ZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUuaGFyZHdhcmUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLmhhcmR3YXJlCmluZGV4IDljNzRjNWQuLmQ3ZTI0ZDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUuaGFyZHdhcmUKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L1JFQURNRS5oYXJkd2FyZQpAQCAtNzcsMzEgKzc3LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKLUludGVsIHg4NiBiYXNlZCBQQ3MgYW5kIGRldmljZXMgKGdlbmVyaWN4ODYpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ludGVsIHg4NiBiYXNlZCBQQ3MgYW5kIGRldmljZXMgKGdlbmVyaWN4ODYqKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBnZW5lcmljeDg2IE1BQ0hJTkUgaXMgdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorVGhlIGdlbmVyaWN4ODYgYW5kIGdlbmVyaWN4ODYtNjQgTUFDSElORSBhcmUgdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgogCiBJbnRlbCBYZW9uL0NvcmUgaS1TZXJpZXM6Ci0gICsgSW50ZWwgUm9tbGV5IFNlcnZlcjogU2FuZHkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoQ2Fub2UgUGFzcyBDUkIpCi0gICsgSW50ZWwgUm9tbGV5IFNlcnZlcjogSXZ5IEJyaWRnZSBYZW9uIHByb2Nlc3NvciwgQzYwMCBQQ0ggKFBhdHNidXJnKSwgKEludGVsIFNEUCBTMlIzKQotICArIEludGVsIENyeXN0YWwgRm9yZXN0IFNlcnZlcjogU2FuZHkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBESDg5eHggUENIIChDYXZlIENyZWVrKSwgKFN0YXJnbyBDUkIpCi0gICsgSW50ZWwgQ2hpZWYgUml2ZXIgTW9iaWxlOiBJdnkgQnJpZGdlIE1vYmlsZSBwcm9jZXNzb3IsIFFNNzcgUENIIChQYW50aGVyIFBvaW50LU0pLCAoRW1lcmFsZCBMYWtlIElJIENSQiwgU2FiaW5vIENhbnlvbiBDUkIpCi0gICsgSW50ZWwgSHVyb24gUml2ZXIgTW9iaWxlOiBTYW5keSBCcmlkZ2UgcHJvY2Vzc29yLCBRTTY3IFBDSCAoQ291Z2FyIFBvaW50KSwgKEVtZXJhbGQgTGFrZSBDUkIsIEVWT0MgRUM3LTE4MTdMTkFSIGJvYXJkKQotICArIEludGVsIENhbHBlbGxhIFBsYXRmb3JtOiBDb3JlIGk3IHByb2Nlc3NvciwgUU01NyBQQ0ggKEliZXggUGVhay1NKSwgKFJlZCBGb3J0IENSQiwgRW1lcnNvbiBNQVRYTSBDT1JFLTQxMS1CKQotICArIEludGVsIE5laGFsZW0vV2VzdG1lcmUtRVAgU2VydmVyOiBYZW9uIDU2eHgvNTV4eCBwcm9jZXNzb3JzLCA1NTIwIGNoaXBzZXQsIElDSDEwUiBJT0ggKDgyODAxKSwgKEhhbmxhbiBDcmVlayBDUkIpCi0gICsgSW50ZWwgTmVoYWxlbSBXb3Jrc3RhdGlvbjogWGVvbiA1Nnh4LzU1eHggcHJvY2Vzc29ycywgU3lzdGVtIFNDNTY1MFNDV1MgKEdyZWVuY2l0eSBDUkIpCi0gICsgSW50ZWwgUGlja2V0IFBvc3QgU2VydmVyOiBYZW9uIDU2eHgvNTV4eCBwcm9jZXNzb3JzIChKYXNwZXIgRm9yZXN0KSwgMzQyMCBjaGlwc2V0IChJYmV4IFBlYWspLCAoT3NhZ2UgQ1JCKQotICArIEludGVsIFN0b3JhZ2UgUGxhdGZvcm06IFNhbmR5IEJyaWRnZSBYZW9uIHByb2Nlc3NvciwgQzYwMCBQQ0ggKFBhdHNidXJnKSwgKE9hayBDcmVlayBDYW55b24gQ1JCKQotICArIEludGVsIFNoYXJrIEJheSBDbGllbnQgUGxhdGZvcm06IEhhc3dlbGwgcHJvY2Vzc29yLCBMeW54UG9pbnQgUENILCAoV2FsbnV0IENhbnlvbiBDUkIsIExhdmEgQ2FueW9uIENSQiwgQmFza2luZyBSaWRnZSBDUkIsIEZsYXRoZWFkIENyZWVrIENSQikKLSAgKyBJbnRlbCBTaGFyayBCYXkgVWx0cmFib29rIFBsYXRmb3JtOiBIYXN3ZWxsIFVMVCBwcm9jZXNzb3IsIEx5bnggUG9pbnQtTFAgUENILCAoV2hpdGVUaXAgTW91bnRhaW4gMSBDUkIpCisgICsgSW50ZWwgTlVDNSBTZXJpZXMgLSBpeC01Mnh4IFNlcmllcyBTT0MgKEJyb2Fkd2VsbCkKKyAgKyBJbnRlbCBOVUM2IFNlcmllcyAtIGl4LTYyeHggU2VyaWVzIFNPQyAoU2t5bGFrZSkKKyAgKyBJbnRlbCBTaHVtd2F5IFhlb24gU2VydmVyCiAKIEludGVsIEF0b20gcGxhdGZvcm1zOgotICArIEludGVsIGVtYmVkZGVkIE1lbmxvdzogSW50ZWwgQXRvbSBaNTEwLzUzMCBDUFUsIFN5c3RlbSBDb250cm9sbGVyIEh1YiBVUzE1VyAoUG9ydHdlbGwgTkFOTy04MDQ0KQotICArIEludGVsIEx1bmEgUGllcjogSW50ZWwgQXRvbSBONHh4L0Q1eHggc2VyaWVzIENQVSAoYWthOiBQaW5ldmlldy1EICYgLU0pLCA4MjgwMUhNIEkvTyBIdWIgKElDSDhNKSwgKEFkdmFudGVjaCBBSU1CLTIxMiwgTW9vbiBDcmVlayBDUkIpCi0gICsgSW50ZWwgUXVlZW5zIEJheSBwbGF0Zm9ybTogSW50ZWwgQXRvbSBFNnh4IENQVSAoYWthOiBUdW5uZWwgQ3JlZWspLCBUb3BjbGlmZiBFRzIwVCBJL08gSHViIChFbWVyc29uIE5JVFgtMzE1LCBDcm93biBCYXkgQ1JCLCBNaW5ub3cgQm9hcmQpCi0gICsgSW50ZWwgRmlzaCBSaXZlciBJc2xhbmQgcGxhdGZvcm06IEludGVsIEF0b20gRTZ4eCBDUFUgKGFrYTogVHVubmVsIENyZWVrKSwgVG9wY2xpZmYgRUcyMFQgSS9PIEh1YiAoS29udHJvbiBLTTJNODA2KQotICArIEludGVsIENlZGFyIFRyYWlsIHBsYXRmb3JtOiBJbnRlbCBBdG9tIE4yMDAwICYgRDIwMDAgc2VyaWVzIENQVSAoYWthOiBDZWRhcnZpZXcpLCBOTTEwIEV4cHJlc3MgQ2hpcHNldCAoTm9yY28ga2l0IEJJUy02NjMwLCBDZWRhciBSb2NrIENSQikKKyAgKyBNaW5ub3dCb2FyZCBNQVggLSBFMzgyNSBTT0MgKEJheSBUcmFpbCkKKyAgKyBNaW5ub3dCb2FyZCBNQVggLSBUdXJib3QgKEFESSBFbmdpbmVlcmluZykgLSBFMzgyNiBTT0MgKEJheSBUcmFpbCkKKyAgICAtIFRoZXNlIGJvYXJkcyBjYW4gYmUgZWl0aGVyIDMyYm90IG9yIDY0Yml0IG1vZGVzIGRlcGVuZGluZyBvbiBmaXJtd2FyZQorICAgIC0gU2VlIG1pbm5vd2JvYXJkLm9yZyBmb3IgZGV0YWlscyAKKyAgKyBJbnRlbCBCcmFzd2VsbCBTT0MKIAogYW5kIGlzIGxpa2VseSB0byB3b3JrIG9uIG1hbnkgdW5saXN0ZWQgQXRvbS9Db3JlL1hlb24gYmFzZWQgZGV2aWNlcy4gVGhlIE1BQ0hJTkUKIHR5cGUgc3VwcG9ydHMgZXRoZXJuZXQsIHdpZmksIHNvdW5kLCBhbmQgSW50ZWwvdmVzYSBncmFwaGljcyBieSBkZWZhdWx0IGluCkBAIC0xMzYsNTMgKzEyNywxNCBAQAogICAgICBkZXZpY2UsIGJ1dCB0aGUgaWRlYSBpcyB0byBmb3JjZSBCSU9TIHRvIHJlYWQgdGhlIEN5bGluZGVyL0hlYWQvU2VjdG9yCiAgICAgIGdlb21ldHJ5IGZyb20gdGhlIGRldmljZS4KIAotICAyLiBXaXRob3V0IHN1Y2ggYW4gb3B0aW9uLCB0aGUgQklPUyBnZW5lcmFsbHkgYm9vdHMgdGhlIGRldmljZSBpbiBVU0ItWklQCi0gICAgIG1vZGUuIFRvIHdyaXRlIGFuIGltYWdlIHRvIGEgVVNCIGRldmljZSB0aGF0IHdpbGwgYmUgYm9vdGFibGUgaW4KLSAgICAgVVNCLVpJUCBtb2RlLCBjYXJyeSBvdXQgdGhlIGZvbGxvd2luZyBhY3Rpb25zOgorICAyLiBVc2UgYSAiLndpYyIgaW1hZ2Ugd2l0aCBhbiBFRkkgcGFydGl0aW9uCiAKLSAgICAgYS4gRGV0ZXJtaW5lIHRoZSBnZW9tZXRyeSBvZiB5b3VyIFVTQiBkZXZpY2UgdXNpbmcgZmRpc2s6CisgICAgIGEpIFdpdGggYSBkZWZhdWx0IGdydWItZWZpIGJvb3Rsb2FkZXI6CisgICAgICMgZGQgaWY9Y29yZS1pbWFnZS1taW5pbWFsLWdlbmVyaWN4ODYtNjQud2ljIG9mPS9kZXYvc2RiCiAKLSAgICAgIyBmZGlzayAvZGV2L3NkYgotICAgICBDb21tYW5kIChtIGZvciBoZWxwKTogcAotCi0gICAgIERpc2sgL2Rldi9zZGI6IDQwMTEgTUIsIDQwMTE0OTEzMjggYnl0ZXMKLSAgICAgMTI0IGhlYWRzLCA2MiBzZWN0b3JzL3RyYWNrLCAxMDE5IGN5bGluZGVycywgdG90YWwgNzgzNDk0NCBzZWN0b3JzCi0gICAgIC4uLgotCi0gICAgIENvbW1hbmQgKG0gZm9yIGhlbHApOiBxCi0KLSAgICAgYi4gQ29uZmlndXJlIHRoZSBVU0IgZGV2aWNlIGZvciBVU0ItWklQIG1vZGU6Ci0gICAgIAotICAgICAjIG1rZGlza2ltYWdlIC00IC9kZXYvc2RiIDEwMTkgMTI0IDYyCi0KLSAgICAgV2hlcmUgMTAxOSwgMTI0IGFuZCA2MiBhcmUgdGhlIGN5bGluZGVyLCBoZWFkIGFuZCBzZWN0b3JzL3RyYWNrIGNvdW50cwotICAgICBhcyByZXBvcnRlZCBieSBmZGlzayAoc3Vic3RpdHV0ZSB0aGUgdmFsdWVzIHJlcG9ydGVkIGZvciB5b3VyIGRldmljZSkuCi0gICAgIFdoZW4gdGhlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQgYW5kIHRoZSBhY2Nlc3MgTEVEIChpZiBhbnkpIG9uIHRoZQotICAgICBkZXZpY2Ugc3RvcHMgZmxhc2hpbmcsIHJlbW92ZSBhbmQgcmVpbnNlcnQgdGhlIGRldmljZSB0byBhbGxvdyB0aGUKLSAgICAga2VybmVsIHRvIGRldGVjdCB0aGUgbmV3IHBhcnRpdGlvbiBsYXlvdXQuCi0KLSAgICAgYy4gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIGltYWdlIHRvIHRoZSBVU0ItWklQIG1vZGUgZGV2aWNlOgotCi0gICAgICMgbWtkaXIgL3RtcC9pbWFnZQotICAgICAjIG1rZGlyIC90bXAvdXNia2V5Ci0gICAgICMgbW91bnQgLW8gbG9vcCBjb3JlLWltYWdlLW1pbmltYWwtZ2VuZXJpY3g4Ni5oZGRpbWcgIC90bXAvaW1hZ2UKLSAgICAgIyBtb3VudCAvZGV2L3NkYjQgL3RtcC91c2JrZXkKLSAgICAgIyBjcCAtcmYgL3RtcC9pbWFnZS8qIC90bXAvdXNia2V5Ci0KLSAgICAgZC4gSW5zdGFsbCB0aGUgc3lzbGludXggYm9vdCBsb2FkZXI6Ci0KLSAgICAgIyBzeXNsaW51eCAvZGV2L3NkYjQKLQotICAgICBlLiBVbm1vdW50IGV2ZXJ5dGhpbmc6Ci0KLSAgICAgIyB1bW91bnQgL3RtcC9pbWFnZQotICAgICAjIHVtb3VudCAvdG1wL3VzYmtleQotCi0gIEluc3RhbGwgdGhlIGJvb3QgZGV2aWNlIGluIHRoZSB0YXJnZXQgYm9hcmQgYW5kIGNvbmZpZ3VyZSB0aGUgQklPUyB0byBib290Ci0gIGZyb20gaXQuCi0KLSAgRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgVVNCLVpJUCBzY2VuYXJpbywgc2VlIHRoZSBzeXNsaW51eCBkb2N1bWVudGF0aW9uOgotICBodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9Ym9vdC9zeXNsaW51eC9zeXNsaW51eC5naXQ7YT1ibG9iX3BsYWluO2Y9ZG9jL3VzYmtleS50eHQ7aGI9SEVBRAorICAgICBiKSBVc2Ugc3lzdGVtZC1ib290IGluc3RlYWQKKyAgICAgLSBCdWlsZCBhbiBpbWFnZSB3aXRoIEVGSV9QUk9WSURFUj0ic3lzdGVtZC1ib290IiB0aGVuIHVzZSB0aGUgYWJvdmUKKyAgICAgICBkZCBjb21tYW5kIHRvIHdyaXRlIHRoZSBpbWFnZSB0byBhIFVTQiBzdGljay4KIAogCiBUZXhhcyBJbnN0cnVtZW50cyBCZWFnbGVib25lIChiZWFnbGVib25lKQpAQCAtMjA4LDU5ICsxNjAsMTcgQEAKIFRvIGZ1cnRoZXIgdGFpbG9yIHRoZXNlIGluc3RydWN0aW9ucyBmb3IgeW91ciBib2FyZCwgcGxlYXNlIHJlZmVyIHRvIHRoZQogZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ib25lIGFuZCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ibGFjawogCi1Gcm9tIGEgTGludXggc3lzdGVtIHdpdGggYWNjZXNzIHRvIHRoZSBpbWFnZSBmaWxlcyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHMKLWFzIHJvb3QsIHJlcGxhY2luZyBtbWNibGswKiB3aXRoIHRoZSBTRCBjYXJkIGRldmljZSBvbiB5b3VyIG1hY2hpbmUgKHN1Y2ggYXMgc2RjCi1pZiB1c2VkIHZpYSBhIHVzYiBjYXJkIHJlYWRlcik6CitGcm9tIGEgTGludXggc3lzdGVtIHdpdGggYWNjZXNzIHRvIHRoZSBpbWFnZSBmaWxlcyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAKLSAgMS4gUGFydGl0aW9uIGFuZCBmb3JtYXQgYW4gU0QgY2FyZDoKLSAgICAgIyBmZGlzayAtbHUgL2Rldi9tbWNibGswCisgIDEuIEJ1aWxkIGFuIGltYWdlLiBGb3IgZXhhbXBsZToKIAotICAgICBEaXNrIC9kZXYvbW1jYmxrMDogMzk1MSBNQiwgMzk1MTAzNDM2OCBieXRlcwotICAgICAyNTUgaGVhZHMsIDYzIHNlY3RvcnMvdHJhY2ssIDQ4MCBjeWxpbmRlcnMsIHRvdGFsIDc3MTY4NjQgc2VjdG9ycwotICAgICBVbml0cyA9IHNlY3RvcnMgb2YgMSAqIDUxMiA9IDUxMiBieXRlcworICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCiAKLSAgICAgICAgICAgICBEZXZpY2UgQm9vdCAgICAgIFN0YXJ0ICAgICAgICAgRW5kICAgICAgQmxvY2tzICBJZCBTeXN0ZW0KLSAgICAgL2Rldi9tbWNibGswcDEgICAqICAgICAgICAgIDYzICAgICAgMTQ0NTg0ICAgICAgIDcyMjYxICAgYyBXaW45NSBGQVQzMiAoTEJBKQotICAgICAvZGV2L21tY2JsazBwMiAgICAgICAgICAxNDQ1ODUgICAgICA0NjU4ODQgICAgICAxNjA2NTAgIDgzIExpbnV4CisgIDIuIFVzZSB0aGUgImRkIiB1dGlsaXR5IHRvIHdyaXRlIHRoZSBpbWFnZSB0byB0aGUgU0QgY2FyZC4gRm9yIGV4YW1wbGU6CiAKLSAgICAgIyBta2ZzLnZmYXQgLUYgMTYgLW4gImJvb3QiIC9kZXYvbW1jYmxrMHAxCi0gICAgICMgbWtlMmZzIC1qIC1MICJyb290IiAvZGV2L21tY2JsazBwMgorICAgICAjIGRkIGNvcmUtaW1hZ2UtbWluaW1hbC1iZWFnbGVib25lLndpYyBvZj0vZGV2L3NkYgogCi0gIFRoZSBmb2xsb3dpbmcgYXNzdW1lcyB0aGUgU0QgY2FyZCBwYXJ0aXRpb25zIDEgYW5kIDIgYXJlIG1vdW50ZWQgYXQKLSAgL21lZGlhL2Jvb3QgYW5kIC9tZWRpYS9yb290IHJlc3BlY3RpdmVseS4gUmVtb3ZpbmcgdGhlIGNhcmQgYW5kIHJlaW5zZXJ0aW5nCi0gIGl0IHdpbGwgZG8ganVzdCB0aGF0IG9uIG1vc3QgbW9kZXJuIExpbnV4IGRlc2t0b3AgZW52aXJvbm1lbnRzLgotCi0gIFRoZSBmaWxlcyByZWZlcmVuY2VkIGJlbG93IGFyZSBtYWRlIGF2YWlsYWJsZSBhZnRlciB0aGUgYnVpbGQgaW4KLSAgYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMuCi0KLSAgMi4gSW5zdGFsbCB0aGUgYm9vdCBsb2FkZXJzCi0gICAgICMgY3AgTUxPLWJlYWdsZWJvbmUgL21lZGlhL2Jvb3QvTUxPCi0gICAgICMgY3AgdS1ib290LWJlYWdsZWJvbmUuaW1nIC9tZWRpYS9ib290L3UtYm9vdC5pbWcKLQotICAzLiBJbnN0YWxsIHRoZSByb290IGZpbGVzeXN0ZW0KLSAgICAgIyB0YXIgeCAtQyAvbWVkaWEvcm9vdCAtZiBjb3JlLWltYWdlLSRJTUFHRV9UWVBFLWJlYWdsZWJvbmUudGFyLmJ6MgotCi0gIDQuIElmIHVzaW5nIGNvcmUtaW1hZ2UtYmFzZSBvciBjb3JlLWltYWdlLXNhdG8gaW1hZ2VzLCB0aGUgU0QgY2FyZCBpcyByZWFkeQotICAgICBhbmQgcm9vdGZzIGFscmVhZHkgY29udGFpbnMgdGhlIGtlcm5lbCwgbW9kdWxlcyBhbmQgZGV2aWNlIHRyZWUgKERUQikKLSAgICAgZmlsZXMgbmVjZXNzYXJ5IHRvIGJlIGJvb3RlZCB3aXRoIFUtYm9vdCdzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgc28KLSAgICAgc2tpcCBkaXJlY3RseSB0byBzdGVwIDguCi0gICAgIEZvciBjb3JlLWltYWdlLW1pbmltYWwsIHByb2NlZWQgdGhyb3VnaCBuZXh0IHN0ZXBzLgotCi0gIDUuIElmIHVzaW5nIGNvcmUtaW1hZ2UtbWluaW1hbCByb290ZnMsIGluc3RhbGwgdGhlIG1vZHVsZXMKLSAgICAgIyB0YXIgeCAtQyAvbWVkaWEvcm9vdCAtZiBtb2R1bGVzLWJlYWdsZWJvbmUudGd6Ci0KLSAgNi4gSWYgdXNpbmcgY29yZS1pbWFnZS1taW5pbWFsIHJvb3RmcywgaW5zdGFsbCB0aGUga2VybmVsIHpJbWFnZSBpbnRvIC9ib290Ci0gICAgIGRpcmVjdG9yeSBvZiByb290ZnMKLSAgICAgIyBjcCB6SW1hZ2UtYmVhZ2xlYm9uZS5iaW4gL21lZGlhL3Jvb3QvYm9vdC96SW1hZ2UKLQotICA3LiBJZiB1c2luZyBjb3JlLWltYWdlLW1pbmltYWwgcm9vdGZzLCBhbHNvIGluc3RhbGwgZGV2aWNlIHRyZWUgKERUQikgZmlsZXMKLSAgICAgaW50byAvYm9vdCBkaXJlY3Rvcnkgb2Ygcm9vdGZzCi0gICAgICMgY3AgekltYWdlLWFtMzM1eC1ib25lLmR0YiAvbWVkaWEvcm9vdC9ib290L2FtMzM1eC1ib25lLmR0YgotICAgICAjIGNwIHpJbWFnZS1hbTMzNXgtYm9uZWJsYWNrLmR0YiAvbWVkaWEvcm9vdC9ib290L2FtMzM1eC1ib25lYmxhY2suZHRiCi0KLSAgOC4gVW5tb3VudCB0aGUgU0QgcGFydGl0aW9ucywgaW5zZXJ0IHRoZSBTRCBjYXJkIGludG8gdGhlIEJlYWdsZWJvbmUsIGFuZAotICAgICBib290IHRoZSBCZWFnbGVib25lCi0KKyAgMy4gSW5zZXJ0IHRoZSBTRCBjYXJkIGludG8gdGhlIEJlYWdsZWJvbmUgYW5kIGJvb3QgdGhlIGJvYXJkLgogCiBGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zOTEsNzUgKzMwMSwyNSBAQAogID0+IHRmdHAgdGZ0cCAkbG9hZGFkZHIgdm1saW51eAogID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD08bmZzcm9vdCBpcD46PHJvb3RmcyBwYXRoPiBpcD08Ym9hcmQgaXA+OjxzZXJ2ZXIgaXA+OjxnYXRld2F5IGlwPjo8bmV0bWFzaz46ZWRnZXJvdXRlcjpldGgwOm9mZiBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKQogCi0tLS0gQm9vdGluZyBmcm9tIFVTQiByb290IC0tLQorLS0tIEJvb3RpbmcgZnJvbSBVU0IgZGlzayAtLS0KIAogVG8gYm9vdCBmcm9tIHRoZSBVU0IgZGlzaywgeW91IGVpdGhlciBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBlZGdlcm91dGVyCiBib3ggYW5kIHBvcHVsYXRlIGl0IGZyb20gYW5vdGhlciBjb21wdXRlciwgb3IgdXNlIGEgcHJldmlvdXNseSBib290ZWQgTkZTCiBpbWFnZSBhbmQgcG9wdWxhdGUgZnJvbSB0aGUgZWRnZXJvdXRlciBpdHNlbGYuCiAKLVR5cGUgMTogTW91bnRlZCBVU0IgZGlzawotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIGJvb3QgZnJvbSB0aGUgVVNCIGRpc2sgdGhlcmUgYXJlIHR3byBhdmFpbGFibGUgcGFydGl0aW9ucyBvbiB0aGUgZmFjdG9yeQotVVNCIHN0b3JhZ2UuIFRoZSByZXN0IG9mIHRoaXMgZ3VpZGUgYXNzdW1lcyB0aGF0IHRoZXNlIHBhcnRpdGlvbnMgYXJlIGxlZnQKLWludGFjdC4gSWYgeW91IGNoYW5nZSB0aGUgcGFydGl0aW9uIHNjaGVtZSwgeW91IG11c3QgdXBkYXRlIHlvdXIgYm9vdCBtZXRob2QKLWFwcHJvcHJpYXRlbHkuCi0KLVRoZSBzdGFuZGFyZCBwYXJ0aXRpb25zIGFyZToKLQotICAtIDE6IHZmYXQgcGFydGl0aW9uIGNvbnRhaW5pbmcgZmFjdG9yeSBrZXJuZWxzCi0gIC0gMjogZXh0MyBwYXJ0aXRpb24gZm9yIHRoZSByb290IGZpbGVzeXN0ZW0uCi0KLVlvdSBjYW4gcGxhY2UgdGhlIGtlcm5lbCBvbiBlaXRoZXIgcGFydGl0aW9uIDEsIG9yIHBhcnRpdGlvbiAyLCBidXQgdGhlIHJvb2ZzCi1tdXN0IGdvIG9uIHBhcnRpdGlvbiAyIChkdWUgdG8gaXRzIHNpemUpLgotCi1Ob3RlOiBJZiB5b3UgcGxhY2UgdGhlIGtlcm5lbCBvbiB0aGUgZXh0MyBwYXJ0aXRpb24sIHlvdSBtdXN0IHJlLWNyZWF0ZSB0aGUKLSAgICAgIGV4dDMgZmlsZXN5c3RlbSwgc2luY2UgdGhlIGZhY3RvcnkgdS1ib290IGNhbiBvbmx5IGhhbmRsZSAxMjggYnl0ZSBpbm9kZXMgYW5kCi0gICAgICBjYW5ub3QgcmVhZCB0aGUgcGFydGl0aW9uIG90aGVyd2lzZS4KK1R5cGUgMTogVXNlIHBhcnRpdGlvbmVkIGltYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTdGVwczoKIAogIDEuIFJlbW92ZSB0aGUgVVNCIGRpc2sgZnJvbSB0aGUgZWRnZXJvdXRlciBhbmQgaW5zZXJ0IGl0IGludG8gYSBjb21wdXRlcgogICAgIHRoYXQgaGFzIGFjY2VzcyB0byB5b3VyIGJ1aWxkIGFydGlmYWN0cy4KIAotIDIuIENvcHkgdGhlIGtlcm5lbCBpbWFnZSB0byB0aGUgVVNCIHN0b3JhZ2UgKGFzc3VtaW5nIGRpc2NvdmVyZWQgYXMgJ3NkYicgb24KLSAgICB0aGUgZGV2ZWxvcG1lbnQgbWFjaGluZSk6CisgMi4gRmxhc2ggdGhlIGltYWdlLgogCi0gICAgMmEpIGlmIGJvb3RpbmcgZnJvbSB2ZmF0Ci0gCi0gICAgICAgICMgbW91bnQgL2Rldi9zZGIxIC9tbnQKLSAgICAgICAgIyBjcCB0bXAvZGVwbG95L2ltYWdlcy9lZGdlcm91dGVyL3ZtbGludXggL21udAotICAgICAgICAjIHVtb3VudCAvbW50CisgICAgIyBkZCBjb3JlLWltYWdlLW1pbmltYWwtZWRnZXJvdXRlci53aWMgb2Y9L2Rldi9zZGIKIAotICAgIDJiKSBpZiBib290aW5nIGZyb20gZXh0MwotCi0gICAgICAgICMgbWtmcy5leHQzIC1JIDEyOCAvZGV2L3NkYjIKLSAgICAgICAgIyBtb3VudCAvZGV2L3NkYjIgL21udAotICAgICAgICAjIG1rZGlyIC9tbnQvYm9vdAotICAgICAgICAjIGNwIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIvdm1saW51eCAvbW50L2Jvb3QKLSAgICAgICAgIyB1bW91bnQgL21udAotCi0gMy4gRXh0cmFjdCB0aGUgcm9vdGZzIHRvIHRoZSBVU0Igc3RvcmFnZSBleHQzIHBhcnRpdGlvbgotCi0gICAgICAgICMgbW91bnQgL2Rldi9zZGIyIC9tbnQKLSAgICAgICAgIyB0YXIgLXh2anBmIGNvcmUtaW1hZ2UtbWluaW1hbC1YWFgudGFyLmJ6MiAtQyAvbW50Ci0gICAgICAgICMgdW1vdW50IC9tbnQKLQotIDQuIFJlYm9vdCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkIHRvIGdldCB0byB0aGUgVS1Cb290Ci0gICAgY29tbWFuZCBsaW5lOgotCi0gNS4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgotCi0gICAgNWEpIHZmYXQgYm9vdAotCi0gICAgICAgICA9PiBmYXRsb2FkIHVzYiAwOjEgJGxvYWRhZGRyIHZtbGludXgKLQotICAgIDViKSBleHQzIGJvb3QKLQotICAgICAgICAgPT4gZXh0MmxvYWQgdXNiIDA6MiAkbG9hZGFkZHIgYm9vdC92bWxpbnV4Ci0gCi0gICAgPT4gYm9vdG9jdGxpbnV4ICRsb2FkYWRkciBjb3JlbWFzaz0weDMgcm9vdD0vZGV2L3NkYTIgcncgcm9vdHdhaXQgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkKLSAKKyAzLiBJbnNlcnQgVVNCIGRpc2sgaW50byB0aGUgZWRnZXJvdXRlciBhbmQgYm9vdCBpdC4KIAogVHlwZSAyOiBORlMKIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9MSUNFTlNFIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvTElDRU5TRQppbmRleCBhNTdmOWE0Li41ZDRhNGMyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9MSUNFTlNFCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL0xJQ0VOU0UKQEAgLTUsOCArNSwxMyBAQAogKiBUaGUgVG9hc3RlciBTaW1wbGUgVUkgYXBwbGljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgRGphbmdvIHByb2plY3QgdGVtcGxhdGUsIHRoZSBmaWxlcyBvZiB3aGljaCBhcmUgY292ZXJlZCBieSB0aGUgQlNEIGxpY2Vuc2UgYW5kIGFyZSBjb3B5cmlnaHQgKGMpIERqYW5nbyBTb2Z0d2FyZQogRm91bmRhdGlvbiBhbmQgaW5kaXZpZHVhbCBjb250cmlidXRvcnMuCiAKLSogVHdpdHRlciBCb290c3RyYXAgKGluY2x1ZGluZyBHbHlwaGljb25zKSwgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgMi4wLgotCisqIFR3aXR0ZXIgQm9vdHN0cmFwIChpbmNsdWRpbmcgR2x5cGhpY29ucyksIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGpRdWVyeSBpcyByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KIAorKiBUd2l0dGVyIHR5cGVhaGVhZC5qcyByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4gTm90ZSB0aGF0IHRoZSBKUyBzb3VyY2UgaGFzIG9uZSBzbWFsbCBtb2RpZmljYXRpb24sIHNvIHRoZSBmdWxsIHVubWluaWZpZWQgZmlsZSBpcyBjdXJyZW50bHkgaW5jbHVkZWQgdG8gbWFrZSBpdCBvYnZpb3VzIHdoZXJlIHRoaXMgaXMuCisKKyoganNyZW5kZXIgaXMgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCisKICogUVVuaXQgaXMgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCisKKyogRm9udCBBd2Vzb21lIGZvbnRzIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSAxLjEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UKaW5kZXggYjAzNjgzZS4uMmE0ZmM3MiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgZXg6dHM9NDpzdz00OnN0cz00OmV0CiAjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCiAjCkBAIC0zNSw3ICszNSwxMCBAQAogZnJvbSBiYiBpbXBvcnQgY29va2VyZGF0YQogZnJvbSBiYi5tYWluIGltcG9ydCBiaXRiYWtlX21haW4sIEJpdEJha2VDb25maWdQYXJhbWV0ZXJzLCBCQk1haW5FeGNlcHRpb24KIAotX192ZXJzaW9uX18gPSAiMS4zMC4wIgoraWYgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpICE9ICJ1dGYtOCI6CisgICAgc3lzLmV4aXQoIlBsZWFzZSB1c2UgYSBsb2NhbGUgc2V0dGluZyB3aGljaCBzdXBwb3J0cyB1dGYtOC5cblB5dGhvbiBjYW4ndCBjaGFuZ2UgdGhlIGZpbGVzeXN0ZW0gbG9jYWxlIGFmdGVyIGxvYWRpbmcgc28gd2UgbmVlZCBhIHV0Zi04IHdoZW4gcHl0aG9uIHN0YXJ0cyBvciB0aGluZ3Mgd29uJ3Qgd29yay4iKQorCitfX3ZlcnNpb25fXyA9ICIxLjMyLjAiCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgaWYgX192ZXJzaW9uX18gIT0gYmIuX192ZXJzaW9uX186CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1kaWZmc2lncyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzCmluZGV4IDE5NmYwYjcuLjUyN2QyYzcgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgYml0YmFrZS1kaWZmc2lncwogIyBCaXRCYWtlIHRhc2sgc2lnbmF0dXJlIGRhdGEgY29tcGFyaXNvbiB1dGlsaXR5CkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgZm5tYXRjaAogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IHBpY2tsZQogCiBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKSwgJ2xpYicpKQogCkBAIC05NSw3ICs5Niw3IEBACiAgICAgICAgICMgUmVjdXJzZSBpbnRvIHNpZ25hdHVyZSBjb21wYXJpc29uCiAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGxhdGVzdGZpbGVzWzBdLCBsYXRlc3RmaWxlc1sxXSwgcmVjdXJzZWNiKQogICAgICAgICBpZiBvdXRwdXQ6Ci0gICAgICAgICAgICBwcmludCAnXG4nLmpvaW4ob3V0cHV0KQorICAgICAgICAgICAgcHJpbnQoJ1xuJy5qb2luKG91dHB1dCkpCiAgICAgc3lzLmV4aXQoMCkKIAogCkBAIC0xMTQsMTQgKzExNSwxMyBAQAogb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQogCiBpZiBvcHRpb25zLnRhc2thcmdzOgotICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQotICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seSA9IFRydWUpCi0gICAgZmluZF9jb21wYXJlX3Rhc2sodGluZm9pbCwgb3B0aW9ucy50YXNrYXJnc1swXSwgb3B0aW9ucy50YXNrYXJnc1sxXSkKKyAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6CisgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1UcnVlKQorICAgICAgICBmaW5kX2NvbXBhcmVfdGFzayh0aW5mb2lsLCBvcHRpb25zLnRhc2thcmdzWzBdLCBvcHRpb25zLnRhc2thcmdzWzFdKQogZWxzZToKICAgICBpZiBsZW4oYXJncykgPT0gMToKICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQogICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydCBjUGlja2xlCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyOgogICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5kdW1wX3NpZ2ZpbGUoc3lzLmFyZ3ZbMV0pCkBAIC0xMzAsOSArMTMwLDkgQEAKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZSkpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgICAgICBleGNlcHQgY1BpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yOgorICAgICAgICBleGNlcHQgKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzaWduYXR1cmUgZGF0YSAtIGVuc3VyZSB5b3UgYXJlIHNwZWNpZnlpbmcgc2lnZGF0YS9zaWdpbmZvIGZpbGVzJykKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAgICAgaWYgb3V0cHV0OgotICAgICAgICAgICAgcHJpbnQgJ1xuJy5qb2luKG91dHB1dCkKKyAgICAgICAgICAgIHByaW50KCdcbicuam9pbihvdXRwdXQpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZHVtcHNpZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWR1bXBzaWcKaW5kZXggNjU2ZDkzYS4uNThiYTFjYSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZHVtcHNpZworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1kdW1wc2lnCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgYml0YmFrZS1kdW1wc2lnCiAjIEJpdEJha2UgdGFzayBzaWduYXR1cmUgZHVtcCB1dGlsaXR5CkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBwaWNrbGUKIAogc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKIApAQCAtNTEsMTUgKzUyLDE0IEBACiBpZiBsZW4oYXJncykgPT0gMToKICAgICBwYXJzZXIucHJpbnRfaGVscCgpCiBlbHNlOgotICAgIGltcG9ydCBjUGlja2xlCiAgICAgdHJ5OgogICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uZHVtcF9zaWdmaWxlKGFyZ3NbMV0pCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlKSkKICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBleGNlcHQgY1BpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yOgorICAgIGV4Y2VwdCAocGlja2xlLlVucGlja2xpbmdFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIGRhdGEgLSBlbnN1cmUgeW91IGFyZSBzcGVjaWZ5aW5nIGEgc2lnZGF0YS9zaWdpbmZvIGZpbGUnKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgaWYgb3V0cHV0OgotICAgICAgICBwcmludCAnXG4nLmpvaW4ob3V0cHV0KQorICAgICAgICBwcmludCgnXG4nLmpvaW4ob3V0cHV0KSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycwppbmRleCBkNDdhNjY5Li45NDZkZWYyIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1sYXllcnMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtbGF5ZXJzCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgVGhpcyBzY3JpcHQgaGFzIHN1YmNvbW1hbmRzIHdoaWNoIG9wZXJhdGUgYWdhaW5zdCB5b3VyIGJpdGJha2UgbGF5ZXJzLCBlaXRoZXIKICMgZGlzcGxheWluZyB1c2VmdWwgaW5mb3JtYXRpb24sIG9yIGFjdGluZyBhZ2FpbnN0IHRoZW0uCkBAIC0yMywxMDQ4ICsyMywxMDUgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBmbm1hdGNoCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAogaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgcmUKLWltcG9ydCBodHRwbGliLCB1cmxwYXJzZSwganNvbgotaW1wb3J0IHN1YnByb2Nlc3MKIAogYmluZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogdG9wZGlyID0gb3MucGF0aC5kaXJuYW1lKGJpbmRpcikKIHN5cy5wYXRoWzA6MF0gPSBbb3MucGF0aC5qb2luKHRvcGRpciwgJ2xpYicpXQogCi1pbXBvcnQgYmIuY2FjaGUKLWltcG9ydCBiYi5jb29rZXIKLWltcG9ydCBiYi5wcm92aWRlcnMKLWltcG9ydCBiYi51dGlscwogaW1wb3J0IGJiLnRpbmZvaWwKIAogCitkZWYgdGluZm9pbF9pbml0KHBhcnNlcmVjaXBlcyk6CisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKHRyYWNraW5nPVRydWUpCisgICAgdGluZm9pbC5wcmVwYXJlKG5vdCBwYXJzZXJlY2lwZXMpCisgICAgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkpCisgICAgcmV0dXJuIHRpbmZvaWwKKworCiBkZWYgbG9nZ2VyX2NyZWF0ZShuYW1lLCBvdXRwdXQ9c3lzLnN0ZGVycik6CiAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKLSAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKG91dHB1dCkKLSAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKLSAgICBpZiBvdXRwdXQuaXNhdHR5KCk6Ci0gICAgICAgIGZvcm1hdC5lbmFibGVfY29sb3IoKQotICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKLSAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIob3V0cHV0KQorICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCiAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKICAgICByZXR1cm4gbG9nZ2VyCiAKK2RlZiBsb2dnZXJfc2V0dXBfY29sb3IobG9nZ2VyLCBjb2xvcj0nYXV0bycpOgorICAgIGZyb20gYmIubXNnIGltcG9ydCBCQkxvZ0Zvcm1hdHRlcgorICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBmb3JtYXR0ZXIgPSBCQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBsb2dnZXIuaGFuZGxlcnMgPSBbY29uc29sZV0KKyAgICBpZiBjb2xvciA9PSAnYWx3YXlzJyBvciAoY29sb3IgPT0gJ2F1dG8nIGFuZCBjb25zb2xlLnN0cmVhbS5pc2F0dHkoKSk6CisgICAgICAgIGZvcm1hdHRlci5lbmFibGVfY29sb3IoKQorCisKIGxvZ2dlciA9IGxvZ2dlcl9jcmVhdGUoJ2JpdGJha2UtbGF5ZXJzJywgc3lzLnN0ZG91dCkKIAotY2xhc3MgVXNlckVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi1jbGFzcyBDb21tYW5kcygpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5iYmhhbmRsZXIgPSBOb25lCi0gICAgICAgIHNlbGYuYmJsYXllcnMgPSBbXQotCi0gICAgZGVmIGluaXRfYmJoYW5kbGVyKHNlbGYsIGNvbmZpZ19vbmx5ID0gRmFsc2UpOgotICAgICAgICBpZiBub3Qgc2VsZi5iYmhhbmRsZXI6Ci0gICAgICAgICAgICBzZWxmLmJiaGFuZGxlciA9IGJiLnRpbmZvaWwuVGluZm9pbCh0cmFja2luZz1UcnVlKQotICAgICAgICAgICAgc2VsZi5iYmxheWVycyA9IChzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKLSAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLnByZXBhcmUoY29uZmlnX29ubHkpCi0gICAgICAgICAgICBsYXllcmNvbmZzID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfaXRlbXNfZmlsZXMoJ0JCRklMRV9DT0xMRUNUSU9OUycsIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQotICAgICAgICAgICAgc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMgPSB7bGF5ZXI6IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUocGF0aCkpIGZvciBsYXllciwgcGF0aCBpbiBsYXllcmNvbmZzLml0ZXJpdGVtcygpfQotCi0KLSAgICBkZWYgZG9fc2hvd19sYXllcnMoc2VsZiwgYXJncyk6Ci0gICAgICAgICIiInNob3cgY3VycmVudCBjb25maWd1cmVkIGxheWVycyIiIgotICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKLSAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyAgJXMgICVzIiAlICgibGF5ZXIiLmxqdXN0KDIwKSwgInBhdGgiLmxqdXN0KDQwKSwgInByaW9yaXR5IikpCi0gICAgICAgIGxvZ2dlci5wbGFpbignPScgKiA3NCkKLSAgICAgICAgZm9yIGxheWVyLCBfLCByZWdleCwgcHJpIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6Ci0gICAgICAgICAgICBsYXllcmRpciA9IHNlbGYuYmJmaWxlX2NvbGxlY3Rpb25zLmdldChsYXllciwgTm9uZSkKLSAgICAgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUobGF5ZXJkaXIpCi0gICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJWQiICUgKGxheWVybmFtZS5sanVzdCgyMCksIGxheWVyZGlyLmxqdXN0KDQwKSwgcHJpKSkKLQotCi0gICAgZGVmIGRvX2FkZF9sYXllcihzZWxmLCBhcmdzKToKLSAgICAgICAgIiIiQWRkIGEgbGF5ZXIgdG8gYmJsYXllcnMuY29uZgotCi1BZGRzIHRoZSBzcGVjaWZpZWQgbGF5ZXIgdG8gYmJsYXllcnMuY29uZgotIiIiCi0gICAgICAgIGxheWVyZGlyID0gb3MucGF0aC5hYnNwYXRoKGFyZ3MubGF5ZXJkaXIpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJTcGVjaWZpZWQgbGF5ZXIgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3RcbiIpCi0gICAgICAgICAgICByZXR1cm4gMQotCi0gICAgICAgIGxheWVyX2NvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGF5ZXJfY29uZik6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJTcGVjaWZpZWQgbGF5ZXIgZGlyZWN0b3J5IGRvZXNuJ3QgY29udGFpbiBhIGNvbmYvbGF5ZXIuY29uZiBmaWxlXG4iKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKCdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmJsYXllcnNfY29uZik6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mXG4iKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICAobm90YWRkZWQsIF8pID0gYmIudXRpbHMuZWRpdF9iYmxheWVyc19jb25mKGJibGF5ZXJzX2NvbmYsIGxheWVyZGlyLCBOb25lKQotICAgICAgICBpZiBub3RhZGRlZDoKLSAgICAgICAgICAgIGZvciBpdGVtIGluIG5vdGFkZGVkOgotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciAlcyBpcyBhbHJlYWR5IGluIEJCTEFZRVJTXG4iICUgaXRlbSkKLQotCi0gICAgZGVmIGRvX3JlbW92ZV9sYXllcihzZWxmLCBhcmdzKToKLSAgICAgICAgIiIiUmVtb3ZlIGEgbGF5ZXIgZnJvbSBiYmxheWVycy5jb25mCi0KLVJlbW92ZXMgdGhlIHNwZWNpZmllZCBsYXllciBmcm9tIGJibGF5ZXJzLmNvbmYKLSIiIgotICAgICAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKCdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmJsYXllcnNfY29uZik6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mXG4iKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICBpZiBhcmdzLmxheWVyZGlyLnN0YXJ0c3dpdGgoJyonKToKLSAgICAgICAgICAgIGxheWVyZGlyID0gYXJncy5sYXllcmRpcgotICAgICAgICBlbGlmIG5vdCAnLycgaW4gYXJncy5sYXllcmRpcjoKLSAgICAgICAgICAgIGxheWVyZGlyID0gJyovJXMnICUgYXJncy5sYXllcmRpcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcmRpcikKLSAgICAgICAgKF8sIG5vdHJlbW92ZWQpID0gYmIudXRpbHMuZWRpdF9iYmxheWVyc19jb25mKGJibGF5ZXJzX2NvbmYsIE5vbmUsIGxheWVyZGlyKQotICAgICAgICBpZiBub3RyZW1vdmVkOgotICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbm90cmVtb3ZlZDoKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJObyBsYXllcnMgbWF0Y2hpbmcgJXMgZm91bmQgaW4gQkJMQVlFUlNcbiIgJSBpdGVtKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0gICAgZGVmIGdldF9qc29uX2RhdGEoc2VsZiwgYXBpdXJsKToKLSAgICAgICAgcHJveHlfc2V0dGluZ3MgPSBvcy5lbnZpcm9uLmdldCgiaHR0cF9wcm94eSIsIE5vbmUpCi0gICAgICAgIGNvbm4gPSBOb25lCi0gICAgICAgIF9wYXJzZWR1cmwgPSB1cmxwYXJzZS51cmxwYXJzZShhcGl1cmwpCi0gICAgICAgIHBhdGggPSBfcGFyc2VkdXJsLnBhdGgKLSAgICAgICAgcXVlcnkgPSBfcGFyc2VkdXJsLnF1ZXJ5Ci0gICAgICAgIGRlZiBwYXJzZV91cmwodXJsKToKLSAgICAgICAgICAgIHBhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKHVybCkKLSAgICAgICAgICAgIGlmIHBhcnNlZHVybC5uZXRsb2NbMF0gPT0gJ1snOgotICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBwYXJzZWR1cmwubmV0bG9jWzE6XS5zcGxpdCgnXScsIDEpCi0gICAgICAgICAgICAgICAgaWYgJzonIGluIHBvcnQ6Ci0gICAgICAgICAgICAgICAgICAgIHBvcnQgPSBwb3J0LnJzcGxpdCgnOicsIDEpWzFdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgcGFyc2VkdXJsLm5ldGxvYy5jb3VudCgnOicpID09IDE6Ci0gICAgICAgICAgICAgICAgICAgIChob3N0LCBwb3J0KSA9IHBhcnNlZHVybC5uZXRsb2Muc3BsaXQoIjoiKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGhvc3QgPSBwYXJzZWR1cmwubmV0bG9jCi0gICAgICAgICAgICAgICAgICAgIHBvcnQgPSBOb25lCi0gICAgICAgICAgICByZXR1cm4gKGhvc3QsIDgwIGlmIHBvcnQgaXMgTm9uZSBlbHNlIGludChwb3J0KSkKLQotICAgICAgICBpZiBwcm94eV9zZXR0aW5ncyBpcyBOb25lOgotICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHBhcnNlX3VybChhcGl1cmwpCi0gICAgICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0KQotICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCJHRVQiLCBwYXRoICsgIj8iICsgcXVlcnkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBob3N0LCBwb3J0ID0gcGFyc2VfdXJsKHByb3h5X3NldHRpbmdzKQotICAgICAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydCkKLSAgICAgICAgICAgIGNvbm4ucmVxdWVzdCgiR0VUIiwgYXBpdXJsKQotCi0gICAgICAgIHIgPSBjb25uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgaWYgci5zdGF0dXMgIT0gMjAwOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCAiICsgcGF0aCArICI6ICVkICVzIiAlIChyLnN0YXR1cywgci5yZWFzb24pKQotICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyLnJlYWQoKSkKLQotCi0gICAgZGVmIGdldF9sYXllcl9kZXBzKHNlbGYsIGxheWVybmFtZSwgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSwgc2VsZm5hbWU9RmFsc2UpOgotICAgICAgICBkZWYgbGF5ZXJpdGVtc19pbmZvX2lkKGl0ZW1zX25hbWUsIGxheWVyaXRlbXMpOgotICAgICAgICAgICAgbGl0ZW1zX2lkID0gTm9uZQotICAgICAgICAgICAgZm9yIGxpIGluIGxheWVyaXRlbXM6Ci0gICAgICAgICAgICAgICAgaWYgbGlbJ25hbWUnXSA9PSBpdGVtc19uYW1lOgotICAgICAgICAgICAgICAgICAgICBsaXRlbXNfaWQgPSBsaVsnaWQnXQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcmV0dXJuIGxpdGVtc19pZAotCi0gICAgICAgIGRlZiBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNfaWQsIGxheWVyYnJhbmNoZXMpOgotICAgICAgICAgICAgbGJyYW5jaCA9IHt9Ci0gICAgICAgICAgICBmb3IgbGIgaW4gbGF5ZXJicmFuY2hlczoKLSAgICAgICAgICAgICAgICBpZiBsYlsnbGF5ZXInXSA9PSBpdGVtc19pZCBhbmQgbGJbJ2JyYW5jaCddID09IGJyYW5jaG51bToKLSAgICAgICAgICAgICAgICAgICAgbGJyYW5jaFsnaWQnXSA9IGxiWydpZCddCi0gICAgICAgICAgICAgICAgICAgIGxicmFuY2hbJ3Zjc19zdWJkaXInXSA9IGxiWyd2Y3Nfc3ViZGlyJ10KLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHJldHVybiBsYnJhbmNoCi0KLSAgICAgICAgZGVmIGxheWVyZGVwZW5kZW5jaWVzX2luZm8obGJfaWQsIGxheWVyZGVwZW5kZW5jaWVzKToKLSAgICAgICAgICAgIGxkX2RlcHMgPSBbXQotICAgICAgICAgICAgZm9yIGxkIGluIGxheWVyZGVwZW5kZW5jaWVzOgotICAgICAgICAgICAgICAgIGlmIGxkWydsYXllcmJyYW5jaCddID09IGxiX2lkIGFuZCBub3QgbGRbJ2RlcGVuZGVuY3knXSBpbiBsZF9kZXBzOgotICAgICAgICAgICAgICAgICAgICBsZF9kZXBzLmFwcGVuZChsZFsnZGVwZW5kZW5jeSddKQotICAgICAgICAgICAgaWYgbm90IGxkX2RlcHM6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgZGVwZW5kZW5jeSBvZiBsYXllckRlcGVuZGVuY2llcyBpcyBub3QgZm91bmQuIikKLSAgICAgICAgICAgIHJldHVybiBsZF9kZXBzCi0KLSAgICAgICAgZGVmIGxheWVyaXRlbXNfaW5mb19uYW1lX3N1YmRpcihpdGVtc19pZCwgbGF5ZXJpdGVtcyk6Ci0gICAgICAgICAgICBsaXRlbXMgPSB7fQotICAgICAgICAgICAgZm9yIGxpIGluIGxheWVyaXRlbXM6Ci0gICAgICAgICAgICAgICAgaWYgbGlbJ2lkJ10gPT0gaXRlbXNfaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGxpdGVtc1sndmNzX3VybCddID0gbGlbJ3Zjc191cmwnXQotICAgICAgICAgICAgICAgICAgICBsaXRlbXNbJ25hbWUnXSA9IGxpWyduYW1lJ10KLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHJldHVybiBsaXRlbXMKLQotICAgICAgICBpZiBzZWxmbmFtZToKLSAgICAgICAgICAgIHNlbGZpZCA9IGxheWVyaXRlbXNfaW5mb19pZChsYXllcm5hbWUsIGxheWVyaXRlbXMpCi0gICAgICAgICAgICBsYmluZm8gPSBsYXllcmJyYW5jaGVzX2luZm8oc2VsZmlkLCBsYXllcmJyYW5jaGVzKQotICAgICAgICAgICAgaWYgbGJpbmZvOgotICAgICAgICAgICAgICAgIHNlbGZzdWJkaXIgPSBsYmluZm9bJ3Zjc19zdWJkaXInXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCIgJSBsYXllcm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmdXJsID0gbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKHNlbGZpZCwgbGF5ZXJpdGVtcylbJ3Zjc191cmwnXQotICAgICAgICAgICAgaWYgc2VsZnVybDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZnVybCwgc2VsZnN1YmRpcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgbGF5ZXIgJXMgZ2l0IHJlcG8gYW5kIHN1YmRpciIgJSBsYXllcm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGxkaWN0ID0ge30KLSAgICAgICAgaXRlbXNpZCA9IGxheWVyaXRlbXNfaW5mb19pZChsYXllcm5hbWUsIGxheWVyaXRlbXMpCi0gICAgICAgIGlmIG5vdCBpdGVtc2lkOgotICAgICAgICAgICAgcmV0dXJuIGxheWVybmFtZSwgTm9uZQotICAgICAgICBsYmlkID0gbGF5ZXJicmFuY2hlc19pbmZvKGl0ZW1zaWQsIGxheWVyYnJhbmNoZXMpCi0gICAgICAgIGlmIGxiaWQ6Ci0gICAgICAgICAgICBsYmlkID0gbGF5ZXJicmFuY2hlc19pbmZvKGl0ZW1zaWQsIGxheWVyYnJhbmNoZXMpWydpZCddCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCIgJSBsYXllcm5hbWUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQotICAgICAgICBmb3IgZGVwZW5kZW5jeSBpbiBsYXllcmRlcGVuZGVuY2llc19pbmZvKGxiaWQsIGxheWVyZGVwZW5kZW5jaWVzKToKLSAgICAgICAgICAgIGxuYW1lID0gbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKGRlcGVuZGVuY3ksIGxheWVyaXRlbXMpWyduYW1lJ10KLSAgICAgICAgICAgIGx1cmwgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoZGVwZW5kZW5jeSwgbGF5ZXJpdGVtcylbJ3Zjc191cmwnXQotICAgICAgICAgICAgbHN1YmRpciA9IGxheWVyYnJhbmNoZXNfaW5mbyhkZXBlbmRlbmN5LCBsYXllcmJyYW5jaGVzKVsndmNzX3N1YmRpciddCi0gICAgICAgICAgICBsZGljdFtsbmFtZV0gPSBsdXJsLCBsc3ViZGlyCi0gICAgICAgIHJldHVybiBOb25lLCBsZGljdAotCi0KLSAgICBkZWYgZ2V0X2ZldGNoX2xheWVyKHNlbGYsIGZldGNoZGlyLCB1cmwsIHN1YmRpciwgZmV0Y2hfbGF5ZXIpOgotICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKHVybCkKLSAgICAgICAgaWYgb3MucGF0aC5zcGxpdGV4dChsYXllcm5hbWUpWzFdID09ICcuZ2l0JzoKLSAgICAgICAgICAgIGxheWVybmFtZSA9IG9zLnBhdGguc3BsaXRleHQobGF5ZXJuYW1lKVswXQotICAgICAgICByZXBvZGlyID0gb3MucGF0aC5qb2luKGZldGNoZGlyLCBsYXllcm5hbWUpCi0gICAgICAgIGxheWVyZGlyID0gb3MucGF0aC5qb2luKHJlcG9kaXIsIHN1YmRpcikKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlcG9kaXIpOgotICAgICAgICAgICAgaWYgZmV0Y2hfbGF5ZXI6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKCdnaXQgY2xvbmUgJXMgJXMnICUgKHVybCwgcmVwb2RpciksIHNoZWxsID0gVHJ1ZSkKLSAgICAgICAgICAgICAgICBpZiByZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGRvd25sb2FkICVzIiAlIHVybCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIlJlcG9zaXRvcnkgJXMgbmVlZHMgdG8gYmUgZmV0Y2hlZCIgJSB1cmwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxheWVybmFtZSwgbGF5ZXJkaXIKLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6Ci0gICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBpcyBub3QgaW4gJXMiICUgKHVybCwgc3ViZGlyKSkKLSAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKLQotCi0gICAgZGVmIGRvX2xheWVyaW5kZXhfZmV0Y2goc2VsZiwgYXJncyk6Ci0gICAgICAgICIiIkZldGNoZXMgYSBsYXllciBmcm9tIGEgbGF5ZXIgaW5kZXggYWxvbmcgd2l0aCBpdHMgZGVwZW5kZW50IGxheWVycywgYW5kIGFkZHMgdGhlbSB0byBjb25mL2JibGF5ZXJzLmNvbmYuCi0iIiIKLSAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcihjb25maWdfb25seSA9IFRydWUpCi0gICAgICAgIGFwaXVybCA9IHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlNfTEFZRVJJTkRFWF9VUkwnLCBUcnVlKQotICAgICAgICBpZiBub3QgYXBpdXJsOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDYW5ub3QgZ2V0IEJCTEFZRVJTX0xBWUVSSU5ERVhfVVJMIikKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBhcGl1cmxbLTFdICE9ICcvJzoKLSAgICAgICAgICAgICAgICBhcGl1cmwgKz0gJy8nCi0gICAgICAgICAgICBhcGl1cmwgKz0gImFwaS8iCi0gICAgICAgIGFwaWxpbmtzID0gc2VsZi5nZXRfanNvbl9kYXRhKGFwaXVybCkKLSAgICAgICAgYnJhbmNoZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2JyYW5jaGVzJ10pCi0KLSAgICAgICAgYnJhbmNobnVtID0gMAotICAgICAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzOgotICAgICAgICAgICAgaWYgYnJhbmNoWyduYW1lJ10gPT0gYXJncy5icmFuY2g6Ci0gICAgICAgICAgICAgICAgYnJhbmNobnVtID0gYnJhbmNoWydpZCddCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgYnJhbmNobnVtID09IDA6Ci0gICAgICAgICAgICB2YWxpZGJyYW5jaGVzID0gJywgJy5qb2luKFticmFuY2hbJ25hbWUnXSBmb3IgYnJhbmNoIGluIGJyYW5jaGVzXSkKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBsYXllciBicmFuY2ggbmFtZSAiJXMiLiBWYWxpZCBicmFuY2hlczogJXMnICUgKGFyZ3MuYnJhbmNoLCB2YWxpZGJyYW5jaGVzKSkKLSAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICAgICAgaWdub3JlX2xheWVycyA9IFtdCi0gICAgICAgIGZvciBjb2xsZWN0aW9uIGluIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJywgVHJ1ZSkuc3BsaXQoKToKLSAgICAgICAgICAgIGxuYW1lID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19MQVlFUklOREVYX05BTUVfJXMnICUgY29sbGVjdGlvbiwgVHJ1ZSkKLSAgICAgICAgICAgIGlmIGxuYW1lOgotICAgICAgICAgICAgICAgIGlnbm9yZV9sYXllcnMuYXBwZW5kKGxuYW1lKQotCi0gICAgICAgIGlmIGFyZ3MuaWdub3JlOgotICAgICAgICAgICAgaWdub3JlX2xheWVycy5leHRlbmQoYXJncy5pZ25vcmUuc3BsaXQoJywnKSkKLQotICAgICAgICBsYXllcml0ZW1zID0gc2VsZi5nZXRfanNvbl9kYXRhKGFwaWxpbmtzWydsYXllckl0ZW1zJ10pCi0gICAgICAgIGxheWVyYnJhbmNoZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVyQnJhbmNoZXMnXSkKLSAgICAgICAgbGF5ZXJkZXBlbmRlbmNpZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVyRGVwZW5kZW5jaWVzJ10pCi0gICAgICAgIGludmFsdWVuYW1lcyA9IFtdCi0gICAgICAgIHJlcG91cmxzID0ge30KLSAgICAgICAgcHJpbnRsYXllcnMgPSBbXQotICAgICAgICBkZWYgcXVlcnlfZGVwZW5kZW5jaWVzKGxheWVycywgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSk6Ci0gICAgICAgICAgICBkZXBzbGF5ZXIgPSBbXQotICAgICAgICAgICAgZm9yIGxheWVybmFtZSBpbiBsYXllcnM6Ci0gICAgICAgICAgICAgICAgaW52YWx1ZW5hbWUsIGxheWVyZGljdCA9IHNlbGYuZ2V0X2xheWVyX2RlcHMobGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKQotICAgICAgICAgICAgICAgIGlmIGxheWVyZGljdDoKLSAgICAgICAgICAgICAgICAgICAgcmVwb3VybHNbbGF5ZXJuYW1lXSA9IHNlbGYuZ2V0X2xheWVyX2RlcHMobGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtLCBzZWxmbmFtZT1UcnVlKQotICAgICAgICAgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJkaWN0OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxheWVyIGluIGlnbm9yZV9sYXllcnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwc2xheWVyLmFwcGVuZChsYXllcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50bGF5ZXJzLmFwcGVuZCgobGF5ZXJuYW1lLCBsYXllciwgbGF5ZXJkaWN0W2xheWVyXVswXSwgbGF5ZXJkaWN0W2xheWVyXVsxXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGF5ZXIgaW4gaWdub3JlX2xheWVycyBhbmQgbm90IGxheWVyIGluIHJlcG91cmxzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG91cmxzW2xheWVyXSA9IChsYXllcmRpY3RbbGF5ZXJdWzBdLCBsYXllcmRpY3RbbGF5ZXJdWzFdKQotICAgICAgICAgICAgICAgIGlmIGludmFsdWVuYW1lIGFuZCBub3QgaW52YWx1ZW5hbWUgaW4gaW52YWx1ZW5hbWVzOgotICAgICAgICAgICAgICAgICAgICBpbnZhbHVlbmFtZXMuYXBwZW5kKGludmFsdWVuYW1lKQotICAgICAgICAgICAgcmV0dXJuIGRlcHNsYXllcgotCi0gICAgICAgIGRlcHNsYXllcnMgPSBxdWVyeV9kZXBlbmRlbmNpZXMoYXJncy5sYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0pCi0gICAgICAgIHdoaWxlIGRlcHNsYXllcnM6Ci0gICAgICAgICAgICBkZXBzbGF5ZXIgPSBxdWVyeV9kZXBlbmRlbmNpZXMoZGVwc2xheWVycywgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSkKLSAgICAgICAgICAgIGRlcHNsYXllcnMgPSBkZXBzbGF5ZXIKLSAgICAgICAgaWYgaW52YWx1ZW5hbWVzOgotICAgICAgICAgICAgZm9yIGludmFsdWVuYW1lIGluIGludmFsdWVuYW1lczoKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0xheWVyICIlcyIgbm90IGZvdW5kIGluIGxheWVyIGluZGV4JyAlIGludmFsdWVuYW1lKQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyAgJXMgICVzICAlcyIgJSAoIkxheWVyIi5sanVzdCgxOSksICJSZXF1aXJlZCBieSIubGp1c3QoMTkpLCAiR2l0IHJlcG9zaXRvcnkiLmxqdXN0KDU0KSwgIlN1YmRpcmVjdG9yeSIpKQotICAgICAgICBsb2dnZXIucGxhaW4oJz0nICogMTE1KQotICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGFyZ3MubGF5ZXJuYW1lOgotICAgICAgICAgICAgbGF5ZXJ1cmwgPSByZXBvdXJsc1tsYXllcm5hbWVdCi0gICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICVzICVzICVzIiAlIChsYXllcm5hbWUubGp1c3QoMjApLCAnLScubGp1c3QoMjApLCBsYXllcnVybFswXS5sanVzdCg1NSksIGxheWVydXJsWzFdKSkKLSAgICAgICAgcHJpbnRlZGxheWVycyA9IFtdCi0gICAgICAgIGZvciBsYXllciwgZGVwZW5kZW5jeSwgZ2l0cmVwbywgc3ViZGlyZWN0b3J5IGluIHByaW50bGF5ZXJzOgotICAgICAgICAgICAgaWYgZGVwZW5kZW5jeSBpbiBwcmludGVkbGF5ZXJzOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICVzICVzICVzIiAlIChkZXBlbmRlbmN5LmxqdXN0KDIwKSwgbGF5ZXIubGp1c3QoMjApLCBnaXRyZXBvLmxqdXN0KDU1KSwgc3ViZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHByaW50ZWRsYXllcnMuYXBwZW5kKGRlcGVuZGVuY3kpCi0KLSAgICAgICAgaWYgcmVwb3VybHM6Ci0gICAgICAgICAgICBmZXRjaGRpciA9IHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlNfRkVUQ0hfRElSJywgVHJ1ZSkKLSAgICAgICAgICAgIGlmIG5vdCBmZXRjaGRpcjoKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgQkJMQVlFUlNfRkVUQ0hfRElSIikKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZldGNoZGlyKToKLSAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhmZXRjaGRpcikKLSAgICAgICAgICAgIGFkZGxheWVycyA9IFtdCi0gICAgICAgICAgICBmb3IgcmVwb3VybCwgc3ViZGlyIGluIHJlcG91cmxzLnZhbHVlcygpOgotICAgICAgICAgICAgICAgIG5hbWUsIGxheWVyZGlyID0gc2VsZi5nZXRfZmV0Y2hfbGF5ZXIoZmV0Y2hkaXIsIHJlcG91cmwsIHN1YmRpciwgbm90IGFyZ3Muc2hvd19vbmx5KQotICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgotICAgICAgICAgICAgICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgICAgICBhZGRsYXllcnMuYXBwZW5kKChzdWJkaXIsIG5hbWUsIGxheWVyZGlyKSkKLSAgICAgICAgaWYgbm90IGFyZ3Muc2hvd19vbmx5OgotICAgICAgICAgICAgZm9yIHN1YmRpciwgbmFtZSwgbGF5ZXJkaXIgaW4gc2V0KGFkZGxheWVycyk6Ci0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJkaXIpOgotICAgICAgICAgICAgICAgICAgICBpZiBzdWJkaXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIkFkZGluZyBsYXllciBcIiVzXCIgdG8gY29uZi9iYmxheWVycy5jb25mIiAlIHN1YmRpcikKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiQWRkaW5nIGxheWVyIFwiJXNcIiB0byBjb25mL2JibGF5ZXJzLmNvbmYiICUgbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxhcmdzID0gYXJncGFyc2UuTmFtZXNwYWNlKCkKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxhcmdzLmxheWVyZGlyID0gbGF5ZXJkaXIKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19hZGRfbGF5ZXIobG9jYWxhcmdzKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLQotICAgIGRlZiBkb19sYXllcmluZGV4X3Nob3dfZGVwZW5kcyhzZWxmLCBhcmdzKToKLSAgICAgICAgIiIiRmluZCBsYXllciBkZXBlbmRlbmNpZXMgZnJvbSBsYXllciBpbmRleC4KLSIiIgotICAgICAgICBhcmdzLnNob3dfb25seSA9IFRydWUKLSAgICAgICAgYXJncy5pZ25vcmUgPSBbXQotICAgICAgICBzZWxmLmRvX2xheWVyaW5kZXhfZmV0Y2goYXJncykKLQotCi0gICAgZGVmIHZlcnNpb25fc3RyKHNlbGYsIHBlLCBwdiwgcHIgPSBOb25lKToKLSAgICAgICAgdmVyc3RyID0gIiVzIiAlIHB2Ci0gICAgICAgIGlmIHByOgotICAgICAgICAgICAgdmVyc3RyID0gIiVzLSVzIiAlICh2ZXJzdHIsIHByKQotICAgICAgICBpZiBwZToKLSAgICAgICAgICAgIHZlcnN0ciA9ICIlczolcyIgJSAocGUsIHZlcnN0cikKLSAgICAgICAgcmV0dXJuIHZlcnN0cgotCi0KLSAgICBkZWYgZG9fc2hvd19vdmVybGF5ZWQoc2VsZiwgYXJncyk6Ci0gICAgICAgICIiImxpc3Qgb3ZlcmxheWVkIHJlY2lwZXMgKHdoZXJlIHRoZSBzYW1lIHJlY2lwZSBleGlzdHMgaW4gYW5vdGhlciBsYXllcikKLQotTGlzdHMgdGhlIG5hbWVzIG9mIG92ZXJsYXllZCByZWNpcGVzIGFuZCB0aGUgYXZhaWxhYmxlIHZlcnNpb25zIGluIGVhY2gKLWxheWVyLCB3aXRoIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBmaXJzdC4gTm90ZSB0aGF0IHNraXBwZWQgcmVjaXBlcyB0aGF0Ci1hcmUgb3ZlcmxheWVkIHdpbGwgYWxzbyBiZSBsaXN0ZWQsIHdpdGggYSAiIChza2lwcGVkKSIgc3VmZml4LgotIiIiCi0gICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoKQotCi0gICAgICAgIGl0ZW1zX2xpc3RlZCA9IHNlbGYubGlzdF9yZWNpcGVzKCdPdmVybGF5ZWQgcmVjaXBlcycsIE5vbmUsIFRydWUsIGFyZ3Muc2FtZV92ZXJzaW9uLCBhcmdzLmZpbGVuYW1lcywgVHJ1ZSwgTm9uZSkKLQotICAgICAgICAjIENoZWNrIGZvciBvdmVybGF5ZWQgLmJiY2xhc3MgZmlsZXMKLSAgICAgICAgY2xhc3NlcyA9IGRlZmF1bHRkaWN0KGxpc3QpCi0gICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgotICAgICAgICAgICAgY2xhc3NkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjbGFzc2VzJykKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNsYXNzZGlyKToKLSAgICAgICAgICAgICAgICBmb3IgY2xhc3NmaWxlIGluIG9zLmxpc3RkaXIoY2xhc3NkaXIpOgotICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KGNsYXNzZmlsZSlbMV0gPT0gJy5iYmNsYXNzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbY2xhc3NmaWxlXS5hcHBlbmQoY2xhc3NkaXIpCi0KLSAgICAgICAgIyBMb2NhdGluZyBjbGFzc2VzIGFuZCBvdGhlciBmaWxlcyBpcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gcmVjaXBlcyAtCi0gICAgICAgICMgbGF5ZXIgcHJpb3JpdHkgaXMgbm90IGEgZmFjdG9yOyBpbnN0ZWFkIEJpdEJha2UgdXNlcyB0aGUgZmlyc3QgbWF0Y2hpbmcKLSAgICAgICAgIyBmaWxlIGluIEJCUEFUSCwgd2hpY2ggaXMgbWFuaXB1bGF0ZWQgZGlyZWN0bHkgYnkgZWFjaCBsYXllcidzCi0gICAgICAgICMgY29uZi9sYXllci5jb25mIGluIHR1cm4sIHRodXMgdGhlIG9yZGVyIG9mIGxheWVycyBpbiBiYmxheWVycy5jb25mIGlzIGEKLSAgICAgICAgIyBmYWN0b3IgLSBob3dldmVyLCBlYWNoIGxheWVyLmNvbmYgaXMgZnJlZSB0byBlaXRoZXIgcHJlcGVuZCBvciBhcHBlbmQgdG8KLSAgICAgICAgIyBCQlBBVEggKG9yIGluZGVlZCBkbyBjcmF6eSBzdHVmZiB3aXRoIGl0KS4gVGh1cyB0aGUgb3JkZXIgaW4gQkJQQVRIIG1pZ2h0Ci0gICAgICAgICMgbm90IGJlIGV4YWN0bHkgdGhlIG9yZGVyIHByZXNlbnQgaW4gYmJsYXllcnMuY29uZiBlaXRoZXIuCi0gICAgICAgIGJicGF0aCA9IHN0cihzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpKQotICAgICAgICBvdmVybGF5ZWRfY2xhc3NfZm91bmQgPSBGYWxzZQotICAgICAgICBmb3IgKGNsYXNzZmlsZSwgY2xhc3NkaXJzKSBpbiBjbGFzc2VzLml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBsZW4oY2xhc3NkaXJzKSA+IDE6Ci0gICAgICAgICAgICAgICAgaWYgbm90IG92ZXJsYXllZF9jbGFzc19mb3VuZDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gT3ZlcmxheWVkIGNsYXNzZXMgPT09JykKLSAgICAgICAgICAgICAgICAgICAgb3ZlcmxheWVkX2NsYXNzX2ZvdW5kID0gVHJ1ZQotCi0gICAgICAgICAgICAgICAgbWFpbmZpbGUgPSBiYi51dGlscy53aGljaChiYnBhdGgsIG9zLnBhdGguam9pbignY2xhc3NlcycsIGNsYXNzZmlsZSkpCi0gICAgICAgICAgICAgICAgaWYgYXJncy5maWxlbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignJXMnICUgbWFpbmZpbGUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBXZSBlZmZlY3RpdmVseSBoYXZlIHRvIGd1ZXNzIHRoZSBsYXllciBoZXJlCi0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignJXM6JyAlIGNsYXNzZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgbWFpbmxheWVybmFtZSA9ICc/JwotICAgICAgICAgICAgICAgICAgICBmb3IgbGF5ZXJkaXIgaW4gc2VsZi5iYmxheWVyczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZGlyID0gb3MucGF0aC5qb2luKGxheWVyZGlyLCAnY2xhc3NlcycpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWluZmlsZS5zdGFydHN3aXRoKGNsYXNzZGlyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlubGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgICVzJyAlIG1haW5sYXllcm5hbWUpCi0gICAgICAgICAgICAgICAgZm9yIGNsYXNzZGlyIGluIGNsYXNzZGlyczoKLSAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4oY2xhc3NkaXIsIGNsYXNzZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgZnVsbHBhdGggIT0gbWFpbmZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBhcmdzLmZpbGVuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBmdWxscGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyAgJXMnICUgc2VsZi5nZXRfbGF5ZXJfbmFtZShvcy5wYXRoLmRpcm5hbWUoY2xhc3NkaXIpKSkKLQotICAgICAgICBpZiBvdmVybGF5ZWRfY2xhc3NfZm91bmQ6Ci0gICAgICAgICAgICBpdGVtc19saXN0ZWQgPSBUcnVlOwotCi0gICAgICAgIGlmIG5vdCBpdGVtc19saXN0ZWQ6Ci0gICAgICAgICAgICBsb2dnZXIucGxhaW4oJ05vIG92ZXJsYXllZCBmaWxlcyBmb3VuZC4nKQotCi0KLSAgICBkZWYgZG9fc2hvd19yZWNpcGVzKHNlbGYsIGFyZ3MpOgotICAgICAgICAiIiJsaXN0IGF2YWlsYWJsZSByZWNpcGVzLCBzaG93aW5nIHRoZSBsYXllciB0aGV5IGFyZSBwcm92aWRlZCBieQotCi1MaXN0cyB0aGUgbmFtZXMgb2YgcmVjaXBlcyBhbmQgdGhlIGF2YWlsYWJsZSB2ZXJzaW9ucyBpbiBlYWNoCi1sYXllciwgd2l0aCB0aGUgcHJlZmVycmVkIHZlcnNpb24gZmlyc3QuIE9wdGlvbmFsbHkgeW91IG1heSBzcGVjaWZ5Ci1wbnNwZWMgdG8gbWF0Y2ggYSBzcGVjaWZpZWQgcmVjaXBlIG5hbWUgKHN1cHBvcnRzIHdpbGRjYXJkcykuIE5vdGUgdGhhdAotc2tpcHBlZCByZWNpcGVzIHdpbGwgYWxzbyBiZSBsaXN0ZWQsIHdpdGggYSAiIChza2lwcGVkKSIgc3VmZml4LgotIiIiCi0gICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoKQotCi0gICAgICAgIGluaGVyaXRsaXN0ID0gYXJncy5pbmhlcml0cy5zcGxpdCgnLCcpIGlmIGFyZ3MuaW5oZXJpdHMgZWxzZSBbXQotICAgICAgICBpZiBpbmhlcml0bGlzdCBvciBhcmdzLnBuc3BlYyBvciBhcmdzLm11bHRpcGxlOgotICAgICAgICAgICAgdGl0bGUgPSAnTWF0Y2hpbmcgcmVjaXBlczonCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aXRsZSA9ICdBdmFpbGFibGUgcmVjaXBlczonCi0gICAgICAgIHNlbGYubGlzdF9yZWNpcGVzKHRpdGxlLCBhcmdzLnBuc3BlYywgRmFsc2UsIEZhbHNlLCBhcmdzLmZpbGVuYW1lcywgYXJncy5tdWx0aXBsZSwgaW5oZXJpdGxpc3QpCi0KLQotICAgIGRlZiBsaXN0X3JlY2lwZXMoc2VsZiwgdGl0bGUsIHBuc3BlYywgc2hvd19vdmVybGF5ZWRfb25seSwgc2hvd19zYW1lX3Zlcl9vbmx5LCBzaG93X2ZpbGVuYW1lcywgc2hvd19tdWx0aV9wcm92aWRlcl9vbmx5LCBpbmhlcml0cyk6Ci0gICAgICAgIGlmIGluaGVyaXRzOgotICAgICAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCi0gICAgICAgICAgICBmb3IgY2xhc3NuYW1lIGluIGluaGVyaXRzOgotICAgICAgICAgICAgICAgIGNsYXNzZmlsZSA9ICdjbGFzc2VzLyVzLmJiY2xhc3MnICUgY2xhc3NuYW1lCi0gICAgICAgICAgICAgICAgaWYgbm90IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY2xhc3NmaWxlLCBoaXN0b3J5PUZhbHNlKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVXNlckVycm9yKCdObyBjbGFzcyBuYW1lZCAlcyBmb3VuZCBpbiBCQlBBVEgnICUgY2xhc3NmaWxlKQotCi0gICAgICAgIHBrZ19wbiA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4KLSAgICAgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLCBzZWxmLmJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUsIHBrZ19wbikKLSAgICAgICAgYWxscHJvdmlkZXJzID0gYmIucHJvdmlkZXJzLmFsbFByb3ZpZGVycyhzZWxmLmJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUpCi0KLSAgICAgICAgIyBFbnN1cmUgd2UgbGlzdCBza2lwcGVkIHJlY2lwZXMKLSAgICAgICAgIyBXZSBhcmUgbGFyZ2VseSBndWVzc2luZyBhYm91dCBQTiwgUFYgYW5kIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBoZXJlLAotICAgICAgICAjIGJ1dCB3ZSBoYXZlIG5vIGNob2ljZSBzaW5jZSBza2lwcGVkIHJlY2lwZXMgYXJlIG5vdCBmdWxseSBwYXJzZWQKLSAgICAgICAgc2tpcGxpc3QgPSBzZWxmLmJiaGFuZGxlci5jb29rZXIuc2tpcGxpc3Qua2V5cygpCi0gICAgICAgIHNraXBsaXN0LnNvcnQoIGtleT1sYW1iZGEgZmlsZWl0ZW06IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmNhbGNfYmJmaWxlX3ByaW9yaXR5KGZpbGVpdGVtKSApCi0gICAgICAgIHNraXBsaXN0LnJldmVyc2UoKQotICAgICAgICBmb3IgZm4gaW4gc2tpcGxpc3Q6Ci0gICAgICAgICAgICByZWNpcGVfcGFydHMgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZm4pKVswXS5zcGxpdCgnXycpCi0gICAgICAgICAgICBwID0gcmVjaXBlX3BhcnRzWzBdCi0gICAgICAgICAgICBpZiBsZW4ocmVjaXBlX3BhcnRzKSA+IDE6Ci0gICAgICAgICAgICAgICAgdmVyID0gKE5vbmUsIHJlY2lwZV9wYXJ0c1sxXSwgTm9uZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdmVyID0gKE5vbmUsICd1bmtub3duJywgTm9uZSkKLSAgICAgICAgICAgIGFsbHByb3ZpZGVyc1twXS5hcHBlbmQoKHZlciwgZm4pKQotICAgICAgICAgICAgaWYgbm90IHAgaW4gcGtnX3BuOgotICAgICAgICAgICAgICAgIHBrZ19wbltwXSA9ICdkdW1teScKLSAgICAgICAgICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcF0gPSAodmVyLCBmbikKLQotICAgICAgICBkZWYgcHJpbnRfaXRlbShmLCBwbiwgdmVyLCBsYXllciwgaXNwcmVmKToKLSAgICAgICAgICAgIGlmIGYgaW4gc2tpcGxpc3Q6Ci0gICAgICAgICAgICAgICAgc2tpcHBlZCA9ICcgKHNraXBwZWQpJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBza2lwcGVkID0gJycKLSAgICAgICAgICAgIGlmIHNob3dfZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIGlmIGlzcHJlZjoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyVzIiwgZiwgc2tpcHBlZCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiAgJXMlcyIsIGYsIHNraXBwZWQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGlzcHJlZjoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlczoiLCBwbikKLSAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiAgJXMgJXMlcyIsIGxheWVyLmxqdXN0KDIwKSwgdmVyLCBza2lwcGVkKQotCi0gICAgICAgIGdsb2JhbF9pbmhlcml0ID0gKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignSU5IRVJJVCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCi0gICAgICAgIGNsc19yZSA9IHJlLmNvbXBpbGUoJ2NsYXNzZXMvJykKLQotICAgICAgICBwcmVmZmlsZXMgPSBbXQotICAgICAgICBpdGVtc19saXN0ZWQgPSBGYWxzZQotICAgICAgICBmb3IgcCBpbiBzb3J0ZWQocGtnX3BuKToKLSAgICAgICAgICAgIGlmIHBuc3BlYzoKLSAgICAgICAgICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoKHAsIHBuc3BlYyk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGlmIGxlbihhbGxwcm92aWRlcnNbcF0pID4gMSBvciBub3Qgc2hvd19tdWx0aV9wcm92aWRlcl9vbmx5OgotICAgICAgICAgICAgICAgIHByZWYgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcF0KLSAgICAgICAgICAgICAgICByZWFsZm4gPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHByZWZbMV0pCi0gICAgICAgICAgICAgICAgcHJlZmZpbGUgPSByZWFsZm5bMF0KLQotICAgICAgICAgICAgICAgICMgV2Ugb25seSBkaXNwbGF5IG9uY2UgcGVyIHJlY2lwZSwgd2Ugc2hvdWxkIHByZWZlciBub24gZXh0ZW5kZWQgdmVyc2lvbnMgb2YgdGhlCi0gICAgICAgICAgICAgICAgIyByZWNpcGUgaWYgcHJlc2VudCAoc28gZS5nLiBpbiBPcGVuRW1iZWRkZWQsIG9wZW5zc2wgcmF0aGVyIHRoYW4gbmF0aXZlc2RrLW9wZW5zc2wKLSAgICAgICAgICAgICAgICAjIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBzb3J0IGZpcnN0KS4KLSAgICAgICAgICAgICAgICBpZiByZWFsZm5bMV0gYW5kIHJlYWxmblswXSBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUucGtnX2ZuOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICAgICAgaWYgaW5oZXJpdHM6Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAwCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZV9pbmhlcml0cyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmluaGVyaXRzLmdldChwcmVmZmlsZSwgW10pCi0gICAgICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gcmVjaXBlX2luaGVyaXRzOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzX3JlLm1hdGNoKGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShjbHMpKVswXQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NuYW1lIGluIGdsb2JhbF9pbmhlcml0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGNsYXNzbmFtZSBpbiBpbmhlcml0czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGNvdW50ICs9IDEKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hjb3VudCAhPSBsZW4oaW5oZXJpdHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBtYXRjaCAtIHNraXAgdGhpcyByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgICAgICBpZiBwcmVmZmlsZSBub3QgaW4gcHJlZmZpbGVzOgotICAgICAgICAgICAgICAgICAgICBwcmVmbGF5ZXIgPSBzZWxmLmdldF9maWxlX2xheWVyKHByZWZmaWxlKQotICAgICAgICAgICAgICAgICAgICBtdWx0aWxheWVyID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgc2FtZV92ZXIgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHByb3ZzID0gW10KLSAgICAgICAgICAgICAgICAgICAgZm9yIHByb3YgaW4gYWxscHJvdmlkZXJzW3BdOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmZpbGUgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHByb3ZbMV0pWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm92bGF5ZXIgPSBzZWxmLmdldF9maWxlX2xheWVyKHByb3ZmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdnMuYXBwZW5kKChwcm92ZmlsZSwgcHJvdmxheWVyLCBwcm92WzBdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZsYXllciAhPSBwcmVmbGF5ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlsYXllciA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZbMF0gIT0gcHJlZlswXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lX3ZlciA9IEZhbHNlCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG11bHRpbGF5ZXIgb3Igbm90IHNob3dfb3ZlcmxheWVkX29ubHkpIGFuZCAoc2FtZV92ZXIgb3Igbm90IHNob3dfc2FtZV92ZXJfb25seSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXRlbXNfbGlzdGVkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignPT09ICVzID09PScgJSB0aXRsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc19saXN0ZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludF9pdGVtKHByZWZmaWxlLCBwLCBzZWxmLnZlcnNpb25fc3RyKHByZWZbMF1bMF0sIHByZWZbMF1bMV0pLCBwcmVmbGF5ZXIsIFRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHByb3ZmaWxlLCBwcm92bGF5ZXIsIHByb3Z2ZXIpIGluIHByb3ZzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZmaWxlICE9IHByZWZmaWxlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9pdGVtKHByb3ZmaWxlLCBwLCBzZWxmLnZlcnNpb25fc3RyKHByb3Z2ZXJbMF0sIHByb3Z2ZXJbMV0pLCBwcm92bGF5ZXIsIEZhbHNlKQotICAgICAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUgd2UgZG9uJ3Qgc2hvdyB0d28gZW50cmllcyBmb3IgQkJDTEFTU0VYVEVORGVkIHJlY2lwZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZmaWxlcy5hcHBlbmQocHJlZmZpbGUpCi0KLSAgICAgICAgcmV0dXJuIGl0ZW1zX2xpc3RlZAotCi0KLSAgICBkZWYgZG9fZmxhdHRlbihzZWxmLCBhcmdzKToKLSAgICAgICAgIiIiZmxhdHRlbiBsYXllciBjb25maWd1cmF0aW9uIGludG8gYSBzZXBhcmF0ZSBvdXRwdXQgZGlyZWN0b3J5LgotCi1UYWtlcyB0aGUgc3BlY2lmaWVkIGxheWVycyAob3IgYWxsIGxheWVycyBpbiB0aGUgY3VycmVudCBsYXllcgotY29uZmlndXJhdGlvbiBpZiBub25lIGFyZSBzcGVjaWZpZWQpIGFuZCBidWlsZHMgYSAiZmxhdHRlbmVkIiBkaXJlY3RvcnkKLWNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGFsbCBsYXllcnMsIHdpdGggYW55IG92ZXJsYXllZCByZWNpcGVzIHJlbW92ZWQKLWFuZCBiYmFwcGVuZHMgYXBwZW5kZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlcy4gTm90ZSB0aGF0IHNvbWUgbWFudWFsCi1jbGVhbnVwIG1heSBzdGlsbCBiZSBuZWNlc3NhcnkgYWZ0ZXJ3YXJkcywgaW4gcGFydGljdWxhcjoKLQotKiB3aGVyZSBub24tcmVjaXBlIGZpbGVzIChzdWNoIGFzIHBhdGNoZXMpIGFyZSBvdmVyd3JpdHRlbiAodGhlIGZsYXR0ZW4KLSAgY29tbWFuZCB3aWxsIHNob3cgYSB3YXJuaW5nIGZvciB0aGVzZSkKLSogd2hlcmUgYW55dGhpbmcgYmV5b25kIHRoZSBub3JtYWwgbGF5ZXIgc2V0dXAgaGFzIGJlZW4gYWRkZWQgdG8KLSAgbGF5ZXIuY29uZiAob25seSB0aGUgbG93ZXN0IHByaW9yaXR5IG51bWJlciBsYXllcidzIGxheWVyLmNvbmYgaXMgdXNlZCkKLSogb3ZlcnJpZGRlbi9hcHBlbmRlZCBpdGVtcyBmcm9tIGJiYXBwZW5kcyB3aWxsIG5lZWQgdG8gYmUgdGlkaWVkIHVwCi0qIHdoZW4gdGhlIGZsYXR0ZW5lZCBsYXllcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSAodGhlCi0gIGZsYXR0ZW4gY29tbWFuZCBzaG91bGQgc2hvdyBhIHdhcm5pbmcgd2hlbiB0aGlzIHdpbGwgY2F1c2UgYSBwcm9ibGVtKQotCi1XYXJuaW5nOiBpZiB5b3UgZmxhdHRlbiBzZXZlcmFsIGxheWVycyB3aGVyZSBhbm90aGVyIGxheWVyIGlzIGludGVuZGVkIHRvCi1iZSB1c2VkICJpbmJldHdlZW4iIHRoZW0gKGluIGxheWVyIHByaW9yaXR5IG9yZGVyKSBzdWNoIHRoYXQgcmVjaXBlcyAvCi1iYmFwcGVuZHMgaW4gdGhlIGxheWVycyBpbnRlcmFjdCwgYW5kIHRoZW4gYXR0ZW1wdCB0byB1c2UgdGhlIG5ldyBvdXRwdXQKLWxheWVyIHRvZ2V0aGVyIHdpdGggdGhhdCBvdGhlciBsYXllciwgeW91IG1heSBubyBsb25nZXIgZ2V0IHRoZSBzYW1lCi1idWlsZCByZXN1bHRzIChhcyB0aGUgbGF5ZXIgcHJpb3JpdHkgb3JkZXIgaGFzIGVmZmVjdGl2ZWx5IGNoYW5nZWQpLgotIiIiCi0gICAgICAgIGlmIGxlbihhcmdzLmxheWVyKSA9PSAxOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJZiB5b3Ugc3BlY2lmeSBsYXllcnMgdG8gZmxhdHRlbiB5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IHR3bycpCi0gICAgICAgICAgICByZXR1cm4gMQotCi0gICAgICAgIG91dHB1dGRpciA9IGFyZ3Mub3V0cHV0ZGlyCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dHB1dGRpcikgYW5kIG9zLmxpc3RkaXIob3V0cHV0ZGlyKToKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRGlyZWN0b3J5ICVzIGV4aXN0cyBhbmQgaXMgbm9uLWVtcHR5LCBwbGVhc2UgY2xlYXIgaXQgb3V0IGZpcnN0JyAlIG91dHB1dGRpcikKLSAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCi0gICAgICAgIGxheWVycyA9IHNlbGYuYmJsYXllcnMKLSAgICAgICAgaWYgbGVuKGFyZ3MubGF5ZXIpID4gMjoKLSAgICAgICAgICAgIGxheWVybmFtZXMgPSBhcmdzLmxheWVyCi0gICAgICAgICAgICBmb3VuZF9sYXllcm5hbWVzID0gW10KLSAgICAgICAgICAgIGZvdW5kX2xheWVyZGlycyA9IFtdCi0gICAgICAgICAgICBmb3IgbGF5ZXJkaXIgaW4gbGF5ZXJzOgotICAgICAgICAgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUobGF5ZXJkaXIpCi0gICAgICAgICAgICAgICAgaWYgbGF5ZXJuYW1lIGluIGxheWVybmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2xheWVyZGlycy5hcHBlbmQobGF5ZXJkaXIpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2xheWVybmFtZXMuYXBwZW5kKGxheWVybmFtZSkKLQotICAgICAgICAgICAgZm9yIGxheWVybmFtZSBpbiBsYXllcm5hbWVzOgotICAgICAgICAgICAgICAgIGlmIG5vdCBsYXllcm5hbWUgaW4gZm91bmRfbGF5ZXJuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBsYXllciAlcyBpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBydW4gIiVzIHNob3ctbGF5ZXJzIiB0byBsaXN0IGNvbmZpZ3VyZWQgbGF5ZXJzJyAlIChsYXllcm5hbWUsIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBsYXllcnMgPSBmb3VuZF9sYXllcmRpcnMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxheWVybmFtZXMgPSBbXQotCi0gICAgICAgICMgRW5zdXJlIGEgc3BlY2lmaWVkIHBhdGggbWF0Y2hlcyBvdXIgbGlzdCBvZiBsYXllcnMKLSAgICAgICAgZGVmIGxheWVyX3BhdGhfbWF0Y2gocGF0aCk6Ci0gICAgICAgICAgICBmb3IgbGF5ZXJkaXIgaW4gbGF5ZXJzOgotICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICcnKSk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcmRpcgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICBhcHBsaWVkX2FwcGVuZHMgPSBbXQotICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgotICAgICAgICAgICAgb3ZlcmxheWVkID0gW10KLSAgICAgICAgICAgIGZvciBmIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLm92ZXJsYXllZC5pdGVya2V5cygpOgotICAgICAgICAgICAgICAgIGZvciBvZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5vdmVybGF5ZWRbZl06Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9mLnN0YXJ0c3dpdGgobGF5ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheWVkLmFwcGVuZChvZikKLQotICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCdDb3B5aW5nIGZpbGVzIGZyb20gJXMuLi4nICUgbGF5ZXIgKQotICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsobGF5ZXIpOgotICAgICAgICAgICAgICAgIGZvciBmMSBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICAgICAgZjFmdWxsID0gb3Muc2VwLmpvaW4oW3Jvb3QsIGYxXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgZjFmdWxsIGluIG92ZXJsYXllZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICBTa2lwcGluZyBvdmVybGF5ZWQgZmlsZSAlcycgJSBmMWZ1bGwgKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmMSlbMV0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCAhPSAnLmJiYXBwZW5kJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGVzdCA9IGYxZnVsbFtsZW4obGF5ZXIpOl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGVzdCA9IG9zLnBhdGgubm9ybXBhdGgob3Muc2VwLmpvaW4oW291dHB1dGRpcixmZGVzdF0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmRlc3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZkZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZjEgPT0gJ2xheWVyLmNvbmYnIGFuZCByb290LmVuZHN3aXRoKCcvY29uZicpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIFNraXBwaW5nIGxheWVyIGNvbmZpZyBmaWxlICVzJyAlIGYxZnVsbCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ092ZXJ3cml0aW5nIGZpbGUgJXMnLCBmZGVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmMWZ1bGwsIGZkZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCA9PSAnLmJiJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFwcGVuZCBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGYxZnVsbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsYXllcl9wYXRoX21hdGNoKGFwcGVuZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIEFwcGx5aW5nIGFwcGVuZCAlcyB0byAlcycgJSAoYXBwZW5kLCBmZGVzdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseV9hcHBlbmQoYXBwZW5kLCBmZGVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkX2FwcGVuZHMuYXBwZW5kKGFwcGVuZCkKLQotICAgICAgICAjIFRha2UgY2FyZSBvZiB3aGVuIHNvbWUgbGF5ZXJzIGFyZSBleGNsdWRlZCBhbmQgeWV0IHdlIGhhdmUgaW5jbHVkZWQgYmJhcHBlbmRzIGZvciB0aG9zZSByZWNpcGVzCi0gICAgICAgIGZvciBiIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmJiYXBwZW5kczoKLSAgICAgICAgICAgIChyZWNpcGVuYW1lLCBhcHBlbmRuYW1lKSA9IGIKLSAgICAgICAgICAgIGlmIGFwcGVuZG5hbWUgbm90IGluIGFwcGxpZWRfYXBwZW5kczoKLSAgICAgICAgICAgICAgICBmaXJzdF9hcHBlbmQgPSBOb25lCi0gICAgICAgICAgICAgICAgbGF5ZXIgPSBsYXllcl9wYXRoX21hdGNoKGFwcGVuZG5hbWUpCi0gICAgICAgICAgICAgICAgaWYgbGF5ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGZpcnN0X2FwcGVuZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwbHlfYXBwZW5kKGFwcGVuZG5hbWUsIGZpcnN0X2FwcGVuZCkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gYXBwZW5kbmFtZVtsZW4obGF5ZXIpOl0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5zZXAuam9pbihbb3V0cHV0ZGlyLGZkZXN0XSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZkZXN0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGFwcGVuZG5hbWUsIGZkZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfYXBwZW5kID0gZmRlc3QKLQotICAgICAgICAjIEdldCB0aGUgcmVnZXggZm9yIHRoZSBmaXJzdCBsYXllciBpbiBvdXIgbGlzdCAod2hpY2ggaXMgd2hlcmUgdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIHdpbGwKLSAgICAgICAgIyBoYXZlIGNvbWUgZnJvbSkKLSAgICAgICAgZmlyc3RfcmVnZXggPSBOb25lCi0gICAgICAgIGxheWVyZGlyID0gbGF5ZXJzWzBdCi0gICAgICAgIGZvciBsYXllcm5hbWUsIHBhdHRlcm4sIHJlZ2V4LCBfIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6Ci0gICAgICAgICAgICBpZiByZWdleC5tYXRjaChvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICd0ZXN0JykpOgotICAgICAgICAgICAgICAgIGZpcnN0X3JlZ2V4ID0gcmVnZXgKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgIGlmIGZpcnN0X3JlZ2V4OgotICAgICAgICAgICAgIyBGaW5kIHRoZSBCQkZJTEVTIGVudHJpZXMgdGhhdCBtYXRjaCAod2hpY2ggd2lsbCBoYXZlIGNvbWUgZnJvbSB0aGlzIGNvbmYvbGF5ZXIuY29uZiBmaWxlKQotICAgICAgICAgICAgYmJmaWxlcyA9IHN0cihzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCRklMRVMnLCBUcnVlKSkuc3BsaXQoKQotICAgICAgICAgICAgYmJmaWxlc19sYXllciA9IFtdCi0gICAgICAgICAgICBmb3IgaXRlbSBpbiBiYmZpbGVzOgotICAgICAgICAgICAgICAgIGlmIGZpcnN0X3JlZ2V4Lm1hdGNoKGl0ZW0pOgotICAgICAgICAgICAgICAgICAgICBuZXdwYXRoID0gb3MucGF0aC5qb2luKG91dHB1dGRpciwgaXRlbVtsZW4obGF5ZXJkaXIpKzE6XSkKLSAgICAgICAgICAgICAgICAgICAgYmJmaWxlc19sYXllci5hcHBlbmQobmV3cGF0aCkKLQotICAgICAgICAgICAgaWYgYmJmaWxlc19sYXllcjoKLSAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgYWxsIGltcG9ydGFudCBsYXllciBmaWxlcyBtYXRjaCBCQkZJTEVTCi0gICAgICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3V0cHV0ZGlyKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGYxIGluIGZpbGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmMSlbMV0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCBpbiBbJy5iYicsICcuYmJhcHBlbmQnXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmMWZ1bGwgPSBvcy5zZXAuam9pbihbcm9vdCwgZjFdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2ZvdW5kID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBiYmZpbGVzX2xheWVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZjFmdWxsLCBpdGVtKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2ZvdW5kID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW50cnlfZm91bmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJGaWxlICVzIGRvZXMgbm90IG1hdGNoIHRoZSBmbGF0dGVuZWQgbGF5ZXIncyBCQkZJTEVTIHNldHRpbmcsIHlvdSBtYXkgbmVlZCB0byBlZGl0IGNvbmYvbGF5ZXIuY29uZiBvciBtb3ZlIHRoZSBmaWxlIGVsc2V3aGVyZSIgJSBmMWZ1bGwpCi0KLSAgICBkZWYgZ2V0X2ZpbGVfbGF5ZXIoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICBsYXllcmRpciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXJkaXIoZmlsZW5hbWUpCi0gICAgICAgIGlmIGxheWVyZGlyOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2xheWVyX25hbWUobGF5ZXJkaXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gJz8nCi0KLSAgICBkZWYgZ2V0X2ZpbGVfbGF5ZXJkaXIoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICBsYXllciA9IGJiLnV0aWxzLmdldF9maWxlX2xheWVyKGZpbGVuYW1lLCBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYmJmaWxlX2NvbGxlY3Rpb25zLmdldChsYXllciwgTm9uZSkKLQotICAgIGRlZiByZW1vdmVfbGF5ZXJfcHJlZml4KHNlbGYsIGYpOgotICAgICAgICAiIiJSZW1vdmUgdGhlIGxheWVyX2RpciBwcmVmaXgsIGUuZy4sIGYgPSAvcGF0aC90by9sYXllcl9kaXIvZm9vL2JsYWgsIHRoZQotICAgICAgICAgICByZXR1cm4gdmFsdWUgd2lsbCBiZTogbGF5ZXJfZGlyL2Zvby9ibGFoIiIiCi0gICAgICAgIGZfbGF5ZXJkaXIgPSBzZWxmLmdldF9maWxlX2xheWVyZGlyKGYpCi0gICAgICAgIGlmIG5vdCBmX2xheWVyZGlyOgotICAgICAgICAgICAgcmV0dXJuIGYKLSAgICAgICAgcHJlZml4ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmX2xheWVyZGlyKSwgJycpCi0gICAgICAgIHJldHVybiBmW2xlbihwcmVmaXgpOl0gaWYgZi5zdGFydHN3aXRoKHByZWZpeCkgZWxzZSBmCi0KLSAgICBkZWYgZ2V0X2xheWVyX25hbWUoc2VsZiwgbGF5ZXJkaXIpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5iYXNlbmFtZShsYXllcmRpci5yc3RyaXAob3Muc2VwKSkKLQotICAgIGRlZiBhcHBseV9hcHBlbmQoc2VsZiwgYXBwZW5kbmFtZSwgcmVjaXBlbmFtZSk6Ci0gICAgICAgIHdpdGggb3BlbihhcHBlbmRuYW1lLCAncicpIGFzIGFwcGVuZGZpbGU6Ci0gICAgICAgICAgICB3aXRoIG9wZW4ocmVjaXBlbmFtZSwgJ2EnKSBhcyByZWNpcGVmaWxlOgotICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGUoJ1xuJykKLSAgICAgICAgICAgICAgICByZWNpcGVmaWxlLndyaXRlKCcjIyMjIyBiYmFwcGVuZGVkIGZyb20gJXMgIyMjIyNcbicgJSBzZWxmLmdldF9maWxlX2xheWVyKGFwcGVuZG5hbWUpKQotICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGVsaW5lcyhhcHBlbmRmaWxlLnJlYWRsaW5lcygpKQotCi0gICAgZGVmIGRvX3Nob3dfYXBwZW5kcyhzZWxmLCBhcmdzKToKLSAgICAgICAgIiIibGlzdCBiYmFwcGVuZCBmaWxlcyBhbmQgcmVjaXBlIGZpbGVzIHRoZXkgYXBwbHkgdG8KLQotTGlzdHMgcmVjaXBlcyB3aXRoIHRoZSBiYmFwcGVuZHMgdGhhdCBhcHBseSB0byB0aGVtIGFzIHN1Yml0ZW1zLgotIiIiCi0gICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoKQotCi0gICAgICAgIGxvZ2dlci5wbGFpbignPT09IEFwcGVuZGVkIHJlY2lwZXMgPT09JykKLQotICAgICAgICBwbmxpc3QgPSBsaXN0KHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbi5rZXlzKCkpCi0gICAgICAgIHBubGlzdC5zb3J0KCkKLSAgICAgICAgYXBwZW5kcyA9IEZhbHNlCi0gICAgICAgIGZvciBwbiBpbiBwbmxpc3Q6Ci0gICAgICAgICAgICBpZiBzZWxmLnNob3dfYXBwZW5kc19mb3JfcG4ocG4pOgotICAgICAgICAgICAgICAgIGFwcGVuZHMgPSBUcnVlCi0KLSAgICAgICAgaWYgc2VsZi5zaG93X2FwcGVuZHNfZm9yX3NraXBwZWQoKToKLSAgICAgICAgICAgIGFwcGVuZHMgPSBUcnVlCi0KLSAgICAgICAgaWYgbm90IGFwcGVuZHM6Ci0gICAgICAgICAgICBsb2dnZXIucGxhaW4oJ05vIGFwcGVuZCBmaWxlcyBmb3VuZCcpCi0KLSAgICBkZWYgc2hvd19hcHBlbmRzX2Zvcl9wbihzZWxmLCBwbik6Ci0gICAgICAgIGZpbGVuYW1lcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbltwbl0KLQotICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuKQotICAgICAgICBiZXN0X2ZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShiZXN0WzNdKQotCi0gICAgICAgIHJldHVybiBzZWxmLnNob3dfYXBwZW5kc19vdXRwdXQoZmlsZW5hbWVzLCBiZXN0X2ZpbGVuYW1lKQotCi0gICAgZGVmIHNob3dfYXBwZW5kc19mb3Jfc2tpcHBlZChzZWxmKToKLSAgICAgICAgZmlsZW5hbWVzID0gW29zLnBhdGguYmFzZW5hbWUoZikKLSAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnNraXBsaXN0Lml0ZXJrZXlzKCldCi0gICAgICAgIHJldHVybiBzZWxmLnNob3dfYXBwZW5kc19vdXRwdXQoZmlsZW5hbWVzLCBOb25lLCAiIChza2lwcGVkKSIpCi0KLSAgICBkZWYgc2hvd19hcHBlbmRzX291dHB1dChzZWxmLCBmaWxlbmFtZXMsIGJlc3RfZmlsZW5hbWUsIG5hbWVfc3VmZml4ID0gJycpOgotICAgICAgICBhcHBlbmRlZCwgbWlzc2luZyA9IHNlbGYuZ2V0X2FwcGVuZHNfZm9yX2ZpbGVzKGZpbGVuYW1lcykKLSAgICAgICAgaWYgYXBwZW5kZWQ6Ci0gICAgICAgICAgICBmb3IgYmFzZW5hbWUsIGFwcGVuZHMgaW4gYXBwZW5kZWQ6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclcyVzOicsIGJhc2VuYW1lLCBuYW1lX3N1ZmZpeCkKLSAgICAgICAgICAgICAgICBmb3IgYXBwZW5kIGluIGFwcGVuZHM6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICAlcycsIGFwcGVuZCkKLQotICAgICAgICAgICAgaWYgYmVzdF9maWxlbmFtZToKLSAgICAgICAgICAgICAgICBpZiBiZXN0X2ZpbGVuYW1lIGluIG1pc3Npbmc6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCclczogbWlzc2luZyBhcHBlbmQgZm9yIHByZWZlcnJlZCB2ZXJzaW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9maWxlbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBnZXRfYXBwZW5kc19mb3JfZmlsZXMoc2VsZiwgZmlsZW5hbWVzKToKLSAgICAgICAgYXBwZW5kZWQsIG5vdGFwcGVuZGVkID0gW10sIFtdCi0gICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6Ci0gICAgICAgICAgICBfLCBjbHMgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGZpbGVuYW1lKQotICAgICAgICAgICAgaWYgY2xzOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKLSAgICAgICAgICAgIGFwcGVuZHMgPSBzZWxmLmJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGJhc2VuYW1lKQotICAgICAgICAgICAgaWYgYXBwZW5kczoKLSAgICAgICAgICAgICAgICBhcHBlbmRlZC5hcHBlbmQoKGJhc2VuYW1lLCBsaXN0KGFwcGVuZHMpKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbm90YXBwZW5kZWQuYXBwZW5kKGJhc2VuYW1lKQotICAgICAgICByZXR1cm4gYXBwZW5kZWQsIG5vdGFwcGVuZGVkCi0KLSAgICBkZWYgZG9fc2hvd19jcm9zc19kZXBlbmRzKHNlbGYsIGFyZ3MpOgotICAgICAgICAiIiJTaG93IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHJlY2lwZXMgdGhhdCBjcm9zcyBsYXllciBib3VuZGFyaWVzLgotCi1GaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiByZWNpcGVzIHRoYXQgY3Jvc3MgbGF5ZXIgYm91bmRhcmllcy4KLQotTk9URTogLmJiYXBwZW5kIGZpbGVzIGNhbiBpbXBhY3QgdGhlIGRlcGVuZGVuY2llcy4KLSIiIgotICAgICAgICBpZ25vcmVfbGF5ZXJzID0gKGFyZ3MuaWdub3JlIG9yICcnKS5zcGxpdCgnLCcpCi0KLSAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCi0KLSAgICAgICAgcGtnX2ZuID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX2ZuCi0gICAgICAgIGJicGF0aCA9IHN0cihzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpKQotICAgICAgICBzZWxmLnJlcXVpcmVfcmUgPSByZS5jb21waWxlKHIicmVxdWlyZVxzKyguKykiKQotICAgICAgICBzZWxmLmluY2x1ZGVfcmUgPSByZS5jb21waWxlKHIiaW5jbHVkZVxzKyguKykiKQotICAgICAgICBzZWxmLmluaGVyaXRfcmUgPSByZS5jb21waWxlKHIiaW5oZXJpdFxzKyguKykiKQotCi0gICAgICAgIGdsb2JhbF9pbmhlcml0ID0gKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignSU5IRVJJVCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCi0KLSAgICAgICAgIyBUaGUgYmIncyBERVBFTkRTIGFuZCBSREVQRU5EUwotICAgICAgICBmb3IgZiBpbiBwa2dfZm46Ci0gICAgICAgICAgICBmID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihmKVswXQotICAgICAgICAgICAgIyBHZXQgdGhlIGxheWVybmFtZSB0aGF0IHRoZSBmaWxlIGlzIGluCi0gICAgICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKGYpCi0KLSAgICAgICAgICAgICMgVGhlIERFUEVORFMKLSAgICAgICAgICAgIGRlcHMgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5kZXBzW2ZdCi0gICAgICAgICAgICBmb3IgcG4gaW4gZGVwczoKLSAgICAgICAgICAgICAgICBpZiBwbiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcG46Ci0gICAgICAgICAgICAgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcG4pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY3Jvc3NfZGVwZW5kcygiREVQRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdFszXSwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCi0KLSAgICAgICAgICAgICMgVGhlIFJEUEVORFMKLSAgICAgICAgICAgIGFsbF9yZGVwcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnJ1bmRlcHNbZl0udmFsdWVzKCkKLSAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBkdXBsaWNhdGVkIG9yIG51bGwgb25lLgotICAgICAgICAgICAgc29ydGVkX3JkZXBzID0ge30KLSAgICAgICAgICAgICMgVGhlIGFsbF9yZGVwcyBpcyB0aGUgbGlzdCBpbiBsaXN0LCBzbyB3ZSBuZWVkIHR3byBmb3IgbG9vcHMKLSAgICAgICAgICAgIGZvciBrMSBpbiBhbGxfcmRlcHM6Ci0gICAgICAgICAgICAgICAgZm9yIGsyIGluIGsxOgotICAgICAgICAgICAgICAgICAgICBzb3J0ZWRfcmRlcHNbazJdID0gMQotICAgICAgICAgICAgYWxsX3JkZXBzID0gc29ydGVkX3JkZXBzLmtleXMoKQotICAgICAgICAgICAgZm9yIHJkZXAgaW4gYWxsX3JkZXBzOgotICAgICAgICAgICAgICAgIGFsbF9wID0gYmIucHJvdmlkZXJzLmdldFJ1bnRpbWVQcm92aWRlcnMoc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEsIHJkZXApCi0gICAgICAgICAgICAgICAgaWYgYWxsX3A6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGYgaW4gYWxsX3A6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSByZWNpcGUgcHJvdmlkZXMgdGhpcyBvbmUgaXRzZWxmLCBpZ25vcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzUnVuVGltZShhbGxfcCwgcmRlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEpWzBdWzBdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY3Jvc3NfZGVwZW5kcygiUkRFUEVORFMiLCBsYXllcm5hbWUsIGYsIGJlc3QsIGFyZ3MuZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKQotCi0gICAgICAgICAgICAjIFRoZSBSUkVDT01NRU5EUwotICAgICAgICAgICAgYWxsX3JyZWNzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucnVucmVjc1tmXS52YWx1ZXMoKQotICAgICAgICAgICAgIyBSZW1vdmUgdGhlIGR1cGxpY2F0ZWQgb3IgbnVsbCBvbmUuCi0gICAgICAgICAgICBzb3J0ZWRfcnJlY3MgPSB7fQotICAgICAgICAgICAgIyBUaGUgYWxsX3JyZWNzIGlzIHRoZSBsaXN0IGluIGxpc3QsIHNvIHdlIG5lZWQgdHdvIGZvciBsb29wcwotICAgICAgICAgICAgZm9yIGsxIGluIGFsbF9ycmVjczoKLSAgICAgICAgICAgICAgICBmb3IgazIgaW4gazE6Ci0gICAgICAgICAgICAgICAgICAgIHNvcnRlZF9ycmVjc1trMl0gPSAxCi0gICAgICAgICAgICBhbGxfcnJlY3MgPSBzb3J0ZWRfcnJlY3Mua2V5cygpCi0gICAgICAgICAgICBmb3IgcnJlYyBpbiBhbGxfcnJlY3M6Ci0gICAgICAgICAgICAgICAgYWxsX3AgPSBiYi5wcm92aWRlcnMuZ2V0UnVudGltZVByb3ZpZGVycyhzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSwgcnJlYykKLSAgICAgICAgICAgICAgICBpZiBhbGxfcDoKLSAgICAgICAgICAgICAgICAgICAgaWYgZiBpbiBhbGxfcDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHJlY2lwZSBwcm92aWRlcyB0aGlzIG9uZSBpdHNlbGYsIGlnbm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCBycmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSlbMF1bMF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJSUkVDT01NRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdCwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCi0KLSAgICAgICAgICAgICMgVGhlIGluaGVyaXQgY2xhc3MKLSAgICAgICAgICAgIGNsc19yZSA9IHJlLmNvbXBpbGUoJ2NsYXNzZXMvJykKLSAgICAgICAgICAgIGlmIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEuaW5oZXJpdHM6Ci0gICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5pbmhlcml0c1tmXQotICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gaW5oZXJpdHM6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhlIGluaGVyaXRzJyBmb3JtYXQgaXMgW2NsYXNzZXMvY2xzLCAvcGF0aC90by9jbGFzc2VzL2Nsc10KLSAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgdGhlIGNsYXNzZXMvY2xzLgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2xzX3JlLm1hdGNoKGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoY2xzKSlbMF0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzbmFtZSBpbiBnbG9iYWxfaW5oZXJpdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKGNscykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluaGVyaXRfbGF5ZXJuYW1lICE9IGxheWVybmFtZSBhbmQgbm90IGluaGVyaXRfbGF5ZXJuYW1lIGluIGlnbm9yZV9sYXllcnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFyZ3MuZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3Nob3J0ID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscyA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChjbHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9zaG9ydCA9IGYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzIGluaGVyaXRzICVzIiAlIChmX3Nob3J0LCBjbHMpKQotCi0gICAgICAgICAgICAjIFRoZSAncmVxdWlyZS9pbmNsdWRlIHh4eCcgaW4gdGhlIGJiIGZpbGUKLSAgICAgICAgICAgIHB2X3JlID0gcmUuY29tcGlsZShyIlwke1BWfSIpCi0gICAgICAgICAgICB3aXRoIG9wZW4oZiwgJ3InKSBhcyBmbmZpbGU6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGZuZmlsZS5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgd2hpbGUgbGluZToKLSAgICAgICAgICAgICAgICAgICAgbSwga2V5d29yZCA9IHNlbGYubWF0Y2hfcmVxdWlyZV9pbmNsdWRlKGxpbmUpCi0gICAgICAgICAgICAgICAgICAgICMgRm91bmQgdGhlICdyZXF1aXJlL2luY2x1ZGUgeHh4eCcKLSAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZF9maWxlID0gbS5ncm91cCgxKQotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXBsYWNlIHRoZSAke1BWfSB3aXRoIHRoZSByZWFsIFBWCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBwdl9yZS5zZWFyY2gobmVlZGVkX2ZpbGUpIGFuZCBmIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wZXB2cHI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHYgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcGVwdnByW2ZdWzFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkX2ZpbGUgPSByZS5zdWIociJcJHtQVn0iLCBwdiwgbmVlZGVkX2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50X2Nyb3NzX2ZpbGVzKGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZSwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmbmZpbGUucmVhZGxpbmUoKQotCi0gICAgICAgICMgVGhlICJyZXF1aXJlL2luY2x1ZGUgeHh4IiBpbiBjb25mL21hY2hpbmUvKi5jb25mLCAuaW5jIGFuZCAuYmJjbGFzcwotICAgICAgICBjb25mX3JlID0gcmUuY29tcGlsZSgiLiovY29uZi9tYWNoaW5lL1teXC9dKlwuY29uZiQiKQotICAgICAgICBpbmNfcmUgPSByZS5jb21waWxlKCIuKlwuaW5jJCIpCi0gICAgICAgICMgVGhlICJpbmhlcml0IHh4eCIgaW4gLmJiY2xhc3MKLSAgICAgICAgYmJjbGFzc19yZSA9IHJlLmNvbXBpbGUoIi4qXC5iYmNsYXNzJCIpCi0gICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgotICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKLSAgICAgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsobGF5ZXJkaXIpOgotICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBuYW1lKQotICAgICAgICAgICAgICAgICAgICBzID0gY29uZl9yZS5tYXRjaChmKSBvciBpbmNfcmUubWF0Y2goZikgb3IgYmJjbGFzc19yZS5tYXRjaChmKQotICAgICAgICAgICAgICAgICAgICBpZiBzOgotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGYsICdyJykgYXMgZmZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZmaWxlLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9yZXF1aXJlX2luY2x1ZGUobGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPbmx5IGJiY2xhc3MgaGFzIHRoZSAiaW5oZXJpdCB4eHgiIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiY2xhc3M9IiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG0gYW5kIGYuZW5kc3dpdGgoIi5iYmNsYXNzIik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9pbmhlcml0KGxpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYmNsYXNzPSIuYmJjbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGaW5kIGEgJ3JlcXVpcmUvaW5jbHVkZSB4eHh4JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmludF9jcm9zc19maWxlcyhiYnBhdGgsIGtleXdvcmQsIGxheWVybmFtZSwgZiwgbS5ncm91cCgxKSArIGJiY2xhc3MsIGFyZ3MuZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZmZpbGUucmVhZGxpbmUoKQotCi0gICAgZGVmIHByaW50X2Nyb3NzX2ZpbGVzKHNlbGYsIGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZW5hbWUsIHNob3dfZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKToKLSAgICAgICAgIiIiUHJpbnQgdGhlIGRlcGVuZHMgdGhhdCBjcm9zc2VzIGEgbGF5ZXIgYm91bmRhcnkiIiIKLSAgICAgICAgbmVlZGVkX2ZpbGUgPSBiYi51dGlscy53aGljaChiYnBhdGgsIG5lZWRlZF9maWxlbmFtZSkKLSAgICAgICAgaWYgbmVlZGVkX2ZpbGU6Ci0gICAgICAgICAgICAjIFdoaWNoIGxheWVyIGlzIHRoaXMgZmlsZSBmcm9tCi0gICAgICAgICAgICBuZWVkZWRfbGF5ZXJuYW1lID0gc2VsZi5nZXRfZmlsZV9sYXllcihuZWVkZWRfZmlsZSkKLSAgICAgICAgICAgIGlmIG5lZWRlZF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgbmVlZGVkX2xheWVybmFtZSBpbiBpZ25vcmVfbGF5ZXJzOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzaG93X2ZpbGVuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChmKQotICAgICAgICAgICAgICAgICAgICBuZWVkZWRfZmlsZSA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChuZWVkZWRfZmlsZSkKLSAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICVzICVzIiAlKGYsIGtleXdvcmQsIG5lZWRlZF9maWxlKSkKLQotICAgIGRlZiBtYXRjaF9pbmhlcml0KHNlbGYsIGxpbmUpOgotICAgICAgICAiIiJNYXRjaCB0aGUgaW5oZXJpdCB4eHggbGluZSIiIgotICAgICAgICByZXR1cm4gKHNlbGYuaW5oZXJpdF9yZS5tYXRjaChsaW5lKSwgImluaGVyaXRzIikKLQotICAgIGRlZiBtYXRjaF9yZXF1aXJlX2luY2x1ZGUoc2VsZiwgbGluZSk6Ci0gICAgICAgICIiIk1hdGNoIHRoZSByZXF1aXJlL2luY2x1ZGUgeHh4IGxpbmUiIiIKLSAgICAgICAgbSA9IHNlbGYucmVxdWlyZV9yZS5tYXRjaChsaW5lKQotICAgICAgICBrZXl3b3JkID0gInJlcXVpcmVzIgotICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgIG0gPSBzZWxmLmluY2x1ZGVfcmUubWF0Y2gobGluZSkKLSAgICAgICAgICAgIGtleXdvcmQgPSAiaW5jbHVkZXMiCi0gICAgICAgIHJldHVybiAobSwga2V5d29yZCkKLQotICAgIGRlZiBjaGVja19jcm9zc19kZXBlbmRzKHNlbGYsIGtleXdvcmQsIGxheWVybmFtZSwgZiwgbmVlZGVkX2ZpbGUsIHNob3dfZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKToKLSAgICAgICAgIiIiUHJpbnQgdGhlIERFUEVORFMvUkRFUEVORFMgZmlsZSB0aGF0IGNyb3NzZXMgYSBsYXllciBib3VuZGFyeSIiIgotICAgICAgICBiZXN0X3JlYWxmbiA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4obmVlZGVkX2ZpbGUpWzBdCi0gICAgICAgIG5lZWRlZF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKGJlc3RfcmVhbGZuKQotICAgICAgICBpZiBuZWVkZWRfbGF5ZXJuYW1lICE9IGxheWVybmFtZSBhbmQgbm90IG5lZWRlZF9sYXllcm5hbWUgaW4gaWdub3JlX2xheWVyczoKLSAgICAgICAgICAgIGlmIG5vdCBzaG93X2ZpbGVuYW1lczoKLSAgICAgICAgICAgICAgICBmID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCi0gICAgICAgICAgICAgICAgYmVzdF9yZWFsZm4gPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoYmVzdF9yZWFsZm4pCi0KLSAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMiICUgKGYsIGtleXdvcmQsIGJlc3RfcmVhbGZuKSkKLQotCiBkZWYgbWFpbigpOgotCi0gICAgY21kcyA9IENvbW1hbmRzKCkKLQotICAgIGRlZiBhZGRfY29tbWFuZChjbWRuYW1lLCBmdW5jdGlvbiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgIyBDb252ZXJ0IGRvY3N0cmluZyBmb3IgZnVuY3Rpb24gdG8gaGVscCAob25lLWxpbmVyIHNob3duIGluIG1haW4gLS1oZWxwKSBhbmQgZGVzY3JpcHRpb24gKHNob3duIGluIHN1YmNvbW1hbmQgLS1oZWxwKQotICAgICAgICBkb2NzcGxpdCA9IGZ1bmN0aW9uLl9fZG9jX18uc3BsaXRsaW5lcygpCi0gICAgICAgIGhlbHAgPSBkb2NzcGxpdFswXQotICAgICAgICBpZiBsZW4oZG9jc3BsaXQpID4gMToKLSAgICAgICAgICAgIGRlc2MgPSAnXG4nLmpvaW4oZG9jc3BsaXRbMTpdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVzYyA9IGhlbHAKLSAgICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKGNtZG5hbWUsICphcmdzLCBoZWxwPWhlbHAsIGRlc2NyaXB0aW9uPWRlc2MsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlciwgKiprd2FyZ3MpCi0gICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1mdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHN1YnBhcnNlcgotCi0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IkJpdEJha2UgbGF5ZXJzIHV0aWxpdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb249IkJpdEJha2UgbGF5ZXJzIHV0aWxpdHkiLAorICAgICAgICBlcGlsb2c9IlVzZSAlKHByb2cpcyA8c3ViY29tbWFuZD4gLS1oZWxwIHRvIGdldCBoZWxwIG9uIGEgc3BlY2lmaWMgY29tbWFuZCIsCisgICAgICAgIGFkZF9oZWxwPUZhbHNlKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29sb3InLCBjaG9pY2VzPVsnYXV0bycsICdhbHdheXMnLCAnbmV2ZXInXSwgZGVmYXVsdD0nYXV0bycsIGhlbHA9J0NvbG9yaXplIG91dHB1dCAod2hlcmUgJShtZXRhdmFyKXMgaXMgJShjaG9pY2VzKXMpJywgbWV0YXZhcj0nQ09MT1InKQorCisgICAgZ2xvYmFsX2FyZ3MsIHVucGFyc2VkX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygpCisKKyAgICAjIEhlbHAgaXMgYWRkZWQgaGVyZSByYXRoZXIgdGhhbiB2aWEgYWRkX2hlbHA9VHJ1ZSwgYXMgd2UgZG9uJ3Qgd2FudCBpdCB0bworICAgICMgYmUgaGFuZGxlZCBieSBwYXJzZV9rbm93bl9hcmdzKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctaCcsICctLWhlbHAnLCBhY3Rpb249J2hlbHAnLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCiAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorICAgIHN1YnBhcnNlcnMucmVxdWlyZWQgPSBUcnVlCiAKLSAgICBwYXJzZXJfc2hvd19sYXllcnMgPSBhZGRfY29tbWFuZCgnc2hvdy1sYXllcnMnLCBjbWRzLmRvX3Nob3dfbGF5ZXJzKQotCi0gICAgcGFyc2VyX2FkZF9sYXllciA9IGFkZF9jb21tYW5kKCdhZGQtbGF5ZXInLCBjbWRzLmRvX2FkZF9sYXllcikKLSAgICBwYXJzZXJfYWRkX2xheWVyLmFkZF9hcmd1bWVudCgnbGF5ZXJkaXInLCBoZWxwPSdMYXllciBkaXJlY3RvcnkgdG8gYWRkJykKLQotICAgIHBhcnNlcl9yZW1vdmVfbGF5ZXIgPSBhZGRfY29tbWFuZCgncmVtb3ZlLWxheWVyJywgY21kcy5kb19yZW1vdmVfbGF5ZXIpCi0gICAgcGFyc2VyX3JlbW92ZV9sYXllci5hZGRfYXJndW1lbnQoJ2xheWVyZGlyJywgaGVscD0nTGF5ZXIgZGlyZWN0b3J5IHRvIHJlbW92ZSAod2lsZGNhcmRzIGFsbG93ZWQsIGVuY2xvc2UgaW4gcXVvdGVzIHRvIGF2b2lkIHNoZWxsIGV4cGFuc2lvbiknKQotICAgIHBhcnNlcl9yZW1vdmVfbGF5ZXIuc2V0X2RlZmF1bHRzKGZ1bmM9Y21kcy5kb19yZW1vdmVfbGF5ZXIpCi0KLSAgICBwYXJzZXJfc2hvd19vdmVybGF5ZWQgPSBhZGRfY29tbWFuZCgnc2hvdy1vdmVybGF5ZWQnLCBjbWRzLmRvX3Nob3dfb3ZlcmxheWVkKQotICAgIHBhcnNlcl9zaG93X292ZXJsYXllZC5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0naW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3JtYXR0aW5nLCBsaXN0IGZpbGVuYW1lcyBvZiBoaWdoZXIgcHJpb3JpdHkgcmVjaXBlcyB3aXRoIHRoZSBvbmVzIHRoZXkgb3ZlcmxheSBpbmRlbnRlZCB1bmRlcm5lYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICBwYXJzZXJfc2hvd19vdmVybGF5ZWQuYWRkX2FyZ3VtZW50KCctcycsICctLXNhbWUtdmVyc2lvbicsIGhlbHA9J29ubHkgbGlzdCBvdmVybGF5ZWQgcmVjaXBlcyB3aGVyZSB0aGUgdmVyc2lvbiBpcyB0aGUgc2FtZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0KLSAgICBwYXJzZXJfc2hvd19yZWNpcGVzID0gYWRkX2NvbW1hbmQoJ3Nob3ctcmVjaXBlcycsIGNtZHMuZG9fc2hvd19yZWNpcGVzKQotICAgIHBhcnNlcl9zaG93X3JlY2lwZXMuYWRkX2FyZ3VtZW50KCctZicsICctLWZpbGVuYW1lcycsIGhlbHA9J2luc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9ybWF0dGluZywgbGlzdCBmaWxlbmFtZXMgb2YgaGlnaGVyIHByaW9yaXR5IHJlY2lwZXMgd2l0aCB0aGUgb25lcyB0aGV5IG92ZXJsYXkgaW5kZW50ZWQgdW5kZXJuZWF0aCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgcGFyc2VyX3Nob3dfcmVjaXBlcy5hZGRfYXJndW1lbnQoJy1tJywgJy0tbXVsdGlwbGUnLCBoZWxwPSdvbmx5IGxpc3Qgd2hlcmUgbXVsdGlwbGUgcmVjaXBlcyAoaW4gdGhlIHNhbWUgbGF5ZXIgb3IgZGlmZmVyZW50IGxheWVycykgZXhpc3QgZm9yIHRoZSBzYW1lIHJlY2lwZSBuYW1lJywgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pbmhlcml0cycsIGhlbHA9J29ubHkgbGlzdCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgbmFtZWQgY2xhc3MnLCBtZXRhdmFyPSdDTEFTUycsIGRlZmF1bHQ9JycpCi0gICAgcGFyc2VyX3Nob3dfcmVjaXBlcy5hZGRfYXJndW1lbnQoJ3Buc3BlYycsIG5hcmdzPSc/JywgaGVscD0nb3B0aW9uYWwgcmVjaXBlIG5hbWUgc3BlY2lmaWNhdGlvbiAod2lsZGNhcmRzIGFsbG93ZWQsIGVuY2xvc2UgaW4gcXVvdGVzIHRvIGF2b2lkIHNoZWxsIGV4cGFuc2lvbiknKQotCi0gICAgcGFyc2VyX3Nob3dfYXBwZW5kcyA9IGFkZF9jb21tYW5kKCdzaG93LWFwcGVuZHMnLCBjbWRzLmRvX3Nob3dfYXBwZW5kcykKLQotICAgIHBhcnNlcl9mbGF0dGVuID0gYWRkX2NvbW1hbmQoJ2ZsYXR0ZW4nLCBjbWRzLmRvX2ZsYXR0ZW4pCi0gICAgcGFyc2VyX2ZsYXR0ZW4uYWRkX2FyZ3VtZW50KCdsYXllcicsIG5hcmdzPScqJywgaGVscD0nT3B0aW9uYWwgbGF5ZXIocykgdG8gZmxhdHRlbiAob3RoZXJ3aXNlIGFsbCBhcmUgZmxhdHRlbmVkKScpCi0gICAgcGFyc2VyX2ZsYXR0ZW4uYWRkX2FyZ3VtZW50KCdvdXRwdXRkaXInLCBoZWxwPSdPdXRwdXQgZGlyZWN0b3J5JykKLQotICAgIHBhcnNlcl9zaG93X2Nyb3NzX2RlcGVuZHMgPSBhZGRfY29tbWFuZCgnc2hvdy1jcm9zcy1kZXBlbmRzJywgY21kcy5kb19zaG93X2Nyb3NzX2RlcGVuZHMpCi0gICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0nc2hvdyBmdWxsIGZpbGUgcGF0aCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1pJywgJy0taWdub3JlJywgaGVscD0naWdub3JlIGRlcGVuZGVuY2llcyBvbiBpdGVtcyBpbiB0aGUgc3BlY2lmaWVkIGxheWVyKHMpIChzcGxpdCBtdWx0aXBsZSBsYXllciBuYW1lcyB3aXRoIGNvbW1hcywgbm8gc3BhY2VzKScsIG1ldGF2YXI9J0xBWUVSTkFNRScpCi0KLSAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaCA9IGFkZF9jb21tYW5kKCdsYXllcmluZGV4LWZldGNoJywgY21kcy5kb19sYXllcmluZGV4X2ZldGNoKQotICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1zaG93LW9ubHknLCBoZWxwPSdzaG93IGRlcGVuZGVuY2llcyBhbmQgZG8gbm90aGluZyBlbHNlJywgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnJhbmNoJywgaGVscD0nYnJhbmNoIG5hbWUgdG8gZmV0Y2ggKGRlZmF1bHQgJShkZWZhdWx0KXMpJywgZGVmYXVsdD0nbWFzdGVyJykKLSAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJy1pJywgJy0taWdub3JlJywgaGVscD0nYXNzdW1lIHRoZSBzcGVjaWZpZWQgbGF5ZXJzIGRvIG5vdCBuZWVkIHRvIGJlIGZldGNoZWQvYWRkZWQgKHNlcGFyYXRlIG11bHRpcGxlIGxheWVycyB3aXRoIGNvbW1hcywgbm8gc3BhY2VzKScsIG1ldGF2YXI9J0xBWUVSJykKLSAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJ2xheWVybmFtZScsIG5hcmdzPScrJywgaGVscD0nbGF5ZXIgdG8gZmV0Y2gnKQotCi0gICAgcGFyc2VyX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzID0gYWRkX2NvbW1hbmQoJ2xheWVyaW5kZXgtc2hvdy1kZXBlbmRzJywgY21kcy5kb19sYXllcmluZGV4X3Nob3dfZGVwZW5kcykKLSAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMuYWRkX2FyZ3VtZW50KCctYicsICctLWJyYW5jaCcsIGhlbHA9J2JyYW5jaCBuYW1lIHRvIGZldGNoIChkZWZhdWx0ICUoZGVmYXVsdClzKScsIGRlZmF1bHQ9J21hc3RlcicpCi0gICAgcGFyc2VyX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzLmFkZF9hcmd1bWVudCgnbGF5ZXJuYW1lJywgbmFyZ3M9JysnLCBoZWxwPSdsYXllciB0byBxdWVyeScpCi0KLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotCi0gICAgaWYgYXJncy5kZWJ1ZzoKKyAgICBpZiBnbG9iYWxfYXJncy5kZWJ1ZzoKICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICAgZWxpZiBhcmdzLnF1aWV0OgorICAgIGVsaWYgZ2xvYmFsX2FyZ3MucXVpZXQ6CiAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQogCi0gICAgdHJ5OgotICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKLSAgICBleGNlcHQgVXNlckVycm9yIGFzIGVycjoKLSAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlcnIpKQotICAgICAgICByZXQgPSAxCisgICAgbG9nZ2VyX3NldHVwX2NvbG9yKGxvZ2dlciwgZ2xvYmFsX2FyZ3MuY29sb3IpCiAKLSAgICByZXR1cm4gcmV0CisgICAgcGx1Z2lucyA9IFtdCisgICAgdGluZm9pbCA9IHRpbmZvaWxfaW5pdChGYWxzZSkKKyAgICB0cnk6CisgICAgICAgIGZvciBwYXRoIGluIChbdG9wZGlyXSArCisgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpKToKKyAgICAgICAgICAgIHBsdWdpbnBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ2xpYicsICdiYmxheWVycycpCisgICAgICAgICAgICBiYi51dGlscy5sb2FkX3BsdWdpbnMobG9nZ2VyLCBwbHVnaW5zLCBwbHVnaW5wYXRoKQorCisgICAgICAgIHJlZ2lzdGVyZWQgPSBGYWxzZQorICAgICAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX2NvbW1hbmRzJyk6CisgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycykKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAndGluZm9pbF9pbml0Jyk6CisgICAgICAgICAgICAgICAgcGx1Z2luLnRpbmZvaWxfaW5pdCh0aW5mb2lsKQorCisgICAgICAgIGlmIG5vdCByZWdpc3RlcmVkOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBjb21tYW5kcyByZWdpc3RlcmVkIC0gbWlzc2luZyBwbHVnaW5zPyIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyh1bnBhcnNlZF9hcmdzLCBuYW1lc3BhY2U9Z2xvYmFsX2FyZ3MpCisKKyAgICAgICAgaWYgZ2V0YXR0cihhcmdzLCAncGFyc2VyZWNpcGVzJywgRmFsc2UpOgorICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5kaXNhYmxlVHJhY2tpbmcoKQorICAgICAgICAgICAgdGluZm9pbC5wYXJzZVJlY2lwZXMoKQorICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5lbmFibGVUcmFja2luZygpCisKKyAgICAgICAgcmV0dXJuIGFyZ3MuZnVuYyhhcmdzKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdHJ5OgogICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCiAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgcmV0ID0gMQogICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYKaW5kZXggMDM4MjE0NC4uZjM4ZDJkZCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtcHJzZXJ2CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXByc2VydgpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzLGxvZ2dpbmcKIGltcG9ydCBvcHRwYXJzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utc2VsZnRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdAppbmRleCA0NjJlYjFiLi4zODBlMDAzIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdApAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKICMKQEAgLTI1LDMxICsyNSw0OCBAQAogZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CiAgICAgc3lzLmV4aXQoc3RyKGV4YykpCiAKLWRlZiB1c2FnZSgpOgotICAgIHByaW50KCd1c2FnZTogW0JCX1NLSVBfTkVUVEVTVFM9eWVzXSAlcyBbLXZdIFt0ZXN0bmFtZTEgW3Rlc3RuYW1lMl0uLi5dJyAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pKQotCi12ZXJib3NpdHkgPSAxCi0KLXRlc3RzID0gc3lzLmFyZ3ZbMTpdCi1pZiAnLXYnIGluIHN5cy5hcmd2OgotICAgIHRlc3RzLnJlbW92ZSgnLXYnKQotICAgIHZlcmJvc2l0eSA9IDIKLQotaWYgdGVzdHM6Ci0gICAgaWYgJy0taGVscCcgaW4gc3lzLmFyZ3ZbMTpdOgotICAgICAgICB1c2FnZSgpCi0gICAgICAgIHN5cy5leGl0KDApCi1lbHNlOgotICAgIHRlc3RzID0gWyJiYi50ZXN0cy5jb2RlcGFyc2VyIiwKLSAgICAgICAgICAgICAiYmIudGVzdHMuY293IiwKLSAgICAgICAgICAgICAiYmIudGVzdHMuZGF0YSIsCi0gICAgICAgICAgICAgImJiLnRlc3RzLmZldGNoIiwKLSAgICAgICAgICAgICAiYmIudGVzdHMucGFyc2UiLAotICAgICAgICAgICAgICJiYi50ZXN0cy51dGlscyJdCit0ZXN0cyA9IFsiYmIudGVzdHMuY29kZXBhcnNlciIsCisgICAgICAgICAiYmIudGVzdHMuY293IiwKKyAgICAgICAgICJiYi50ZXN0cy5kYXRhIiwKKyAgICAgICAgICJiYi50ZXN0cy5mZXRjaCIsCisgICAgICAgICAiYmIudGVzdHMucGFyc2UiLAorICAgICAgICAgImJiLnRlc3RzLnV0aWxzIl0KIAogZm9yIHQgaW4gdGVzdHM6CiAgICAgdCA9ICcuJy5qb2luKHQuc3BsaXQoJy4nKVs6M10pCiAgICAgX19pbXBvcnRfXyh0KQogCi11bml0dGVzdC5tYWluKGFyZ3Y9WyJiaXRiYWtlLXNlbGZ0ZXN0Il0gKyB0ZXN0cywgdmVyYm9zaXR5PXZlcmJvc2l0eSkKIAorIyBTZXQtdXAgbG9nZ2luZworY2xhc3MgU3Rkb3V0U3RyZWFtSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgICIiIlNwZWNpYWwgaGFuZGxlciBzbyB0aGF0IHVuaXR0ZXN0IGlzIGFibGUgdG8gY2FwdHVyZSBzdGRvdXQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgX19pbml0X18oKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc2V0IHNlbGYuc3RyZWFtIGhlcmUKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RyZWFtKHNlbGYpOgorICAgICAgICAjIFdlIHdhbnQgdG8gZHluYW1pY2FsbHkgd3JpdGUgd2hlcmV2ZXIgc3lzLnN0ZG91dCBpcyBwb2ludGluZyB0bworICAgICAgICByZXR1cm4gc3lzLnN0ZG91dAorCisKK2hhbmRsZXIgPSBTdGRvdXRTdHJlYW1IYW5kbGVyKCkKK2JiLmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCitiYi5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworCitFTlZfSEVMUCA9ICIiIlwKK0Vudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQkJfU0tJUF9ORVRURVNUUyAgICAgIHNldCB0byAneWVzJyBpbiBvcmRlciB0byBza2lwIHRlc3RzIHVzaW5nIG5ldHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KKyAgQkJfVE1QRElSX05PQ0xFQU4gICAgIHNldCB0byAneWVzJyB0byBwcmVzZXJ2ZSB0ZXN0IHRtcCBkaXJlY3RvcmllcworIiIiCisKK2NsYXNzIG1haW4odW5pdHRlc3QubWFpbik6CisgICAgZGVmIF9wcmludF9oZWxwKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKG1haW4sIHNlbGYpLl9wcmludF9oZWxwKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgcHJpbnQoRU5WX0hFTFApCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgbWFpbihkZWZhdWx0VGVzdD10ZXN0cywgYnVmZmVyPVRydWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIKaW5kZXggNzY3YTFjMC4uNTAwZjJhZCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utd29ya2VyCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXdvcmtlcgpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKQEAgLTEwLDggKzEwLDEyIEBACiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgZXJybm8KIGltcG9ydCBzaWduYWwKK2ltcG9ydCBwaWNrbGUKIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBMb2NrCiAKK2lmIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSAhPSAidXRmLTgiOgorICAgIHN5cy5leGl0KCJQbGVhc2UgdXNlIGEgbG9jYWxlIHNldHRpbmcgd2hpY2ggc3VwcG9ydHMgdXRmLTguXG5QeXRob24gY2FuJ3QgY2hhbmdlIHRoZSBmaWxlc3lzdGVtIGxvY2FsZSBhZnRlciBsb2FkaW5nIHNvIHdlIG5lZWQgYSB1dGYtOCB3aGVuIHB5dGhvbiBzdGFydHMgb3IgdGhpbmdzIHdvbid0IHdvcmsuIikKKwogIyBVc2VycyBzaG91bGRuJ3QgYmUgcnVubmluZyB0aGlzIGNvZGUgZGlyZWN0bHkKIGlmIGxlbihzeXMuYXJndikgIT0gMiBvciBub3Qgc3lzLmFyZ3ZbMV0uc3RhcnRzd2l0aCgiZGVjYWZiYWQiKToKICAgICBwcmludCgiYml0YmFrZS13b3JrZXIgaXMgbWVhbnQgZm9yIGludGVybmFsIGV4ZWN1dGlvbiBieSBiaXRiYWtlIGl0c2VsZiwgcGxlYXNlIGRvbid0IHVzZSBpdCBzdGFuZGFsb25lLiIpCkBAIC0zMCwxOSArMzQsMTYgQEAKICMgdXBkYXRlcyB0byBsb2cgZmlsZXMgZm9yIHVzZSB3aXRoIHRhaWwKIHRyeToKICAgICBpZiBzeXMuc3Rkb3V0Lm5hbWUgPT0gJzxzdGRvdXQ+JzoKLSAgICAgICAgc3lzLnN0ZG91dCA9IG9zLmZkb3BlbihzeXMuc3Rkb3V0LmZpbGVubygpLCAndycsIDApCisgICAgICAgIGltcG9ydCBmY250bAorICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKHN5cy5zdGRvdXQuZmlsZW5vKCksIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZsIHw9IG9zLk9fU1lOQyAKKyAgICAgICAgZmNudGwuZmNudGwoc3lzLnN0ZG91dC5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmwpCisgICAgICAgICNzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKIGV4Y2VwdDoKICAgICBwYXNzCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKIAotdHJ5OgotICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBwaWNrbGUKLSAgICBiYi5tc2cubm90ZSgxLCBiYi5tc2cuZG9tYWluLkNhY2hlLCAiSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiBGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKLQotCiB3b3JrZXJfcGlwZSA9IHN5cy5zdGRvdXQuZmlsZW5vKCkKIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQod29ya2VyX3BpcGUpCiAjIE5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBtdWx0aXByb2Nlc3NpbmcgYmVpbmcgdXNlZCBpbiBjaGlsZCBwcm9jZXNzZXMKQEAgLTYyLDEwICs2MywxMCBAQAogICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKICAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlbG9nKQogCi13b3JrZXJfcXVldWUgPSAiIgord29ya2VyX3F1ZXVlID0gYiIiCiAKIGRlZiB3b3JrZXJfZmlyZShldmVudCwgZCk6Ci0gICAgZGF0YSA9ICI8ZXZlbnQ+IiArIHBpY2tsZS5kdW1wcyhldmVudCkgKyAiPC9ldmVudD4iCisgICAgZGF0YSA9IGIiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgYiI8L2V2ZW50PiIKICAgICB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKGRhdGEpCiAKIGRlZiB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKGV2ZW50KToKQEAgLTkxLDcgKzkyLDcgQEAKICAgICBnbG9iYWwgd29ya2VyX3BpcGUKICAgICBnbG9iYWwgd29ya2VyX3BpcGVfbG9jawogCi0gICAgZGF0YSA9ICI8ZXZlbnQ+IiArIHBpY2tsZS5kdW1wcyhldmVudCkgKyAiPC9ldmVudD4iCisgICAgZGF0YSA9IGIiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgYiI8L2V2ZW50PiIKICAgICB0cnk6CiAgICAgICAgIHdvcmtlcl9waXBlX2xvY2suYWNxdWlyZSgpCiAgICAgICAgIHdvcmtlcl9waXBlLndyaXRlKGRhdGEpCkBAIC0xMTQsNyArMTE1LDcgQEAKICAgICBvcy5raWxscGcoMCwgc2lnbmFsLlNJR1RFUk0pCiAgICAgc3lzLmV4aXQoKQogCi1kZWYgZm9ya19vZmZfdGFzayhjZmcsIGRhdGEsIHdvcmtlcmRhdGEsIGZuLCB0YXNrLCB0YXNrbmFtZSwgYXBwZW5kcywgdGFza2RlcGRhdGEsIHF1aWV0ZXJyb3JzPUZhbHNlKToKK2RlZiBmb3JrX29mZl90YXNrKGNmZywgZGF0YSwgZGF0YWJ1aWxkZXIsIHdvcmtlcmRhdGEsIGZuLCB0YXNrLCB0YXNrbmFtZSwgYXBwZW5kcywgdGFza2RlcGRhdGEsIHF1aWV0ZXJyb3JzPUZhbHNlKToKICAgICAjIFdlIG5lZWQgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50IEJFRk9SRSB0aGUgZm9yaywgc2luY2UKICAgICAjIGEgZm9yaygpIG9yIGV4ZWMqKCkgYWN0aXZhdGVzIFBTRVVETy4uLgogCkBAIC0xNTksNyArMTYwLDggQEAKICAgICAgICAgcGlwZW91dCA9IG9zLmZkb3BlbihwaXBlb3V0LCAnd2InLCAwKQogICAgICAgICBwaWQgPSBvcy5mb3JrKCkKICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgImZvcmsgZmFpbGVkOiAlZCAoJXMpIiAlIChlLmVycm5vLCBlLnN0cmVycm9yKSkKKyAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJmb3JrIGZhaWxlZDogJWQgKCVzKSIgJSAoZS5lcnJubywgZS5zdHJlcnJvcikpCisgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBpZiBwaWQgPT0gMDoKICAgICAgICAgZGVmIGNoaWxkKCk6CkBAIC0xOTEsMTUgKzE5MywxOSBAQAogICAgICAgICAgICAgaWYgdW1hc2s6CiAgICAgICAgICAgICAgICAgb3MudW1hc2sodW1hc2spCiAKLSAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9XT1JLRVJDT05URVhUIiwgIjEiKQotICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgdGFza2RlcGRhdGEpCi0gICAgICAgICAgICBkYXRhLnNldFZhcigiQlVJTEROQU1FIiwgd29ya2VyZGF0YVsiYnVpbGRuYW1lIl0pCi0gICAgICAgICAgICBkYXRhLnNldFZhcigiREFURSIsIHdvcmtlcmRhdGFbImRhdGUiXSkKLSAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJUSU1FIiwgd29ya2VyZGF0YVsidGltZSJdKQotICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLnNldF90YXNrZGF0YSh3b3JrZXJkYXRhWyJzaWdkYXRhIl0pCi0gICAgICAgICAgICByZXQgPSAwCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGhlX2RhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGFwcGVuZHMsIGRhdGEpCisgICAgICAgICAgICAgICAgYmJfY2FjaGUgPSBiYi5jYWNoZS5Ob0NhY2hlKGRhdGFidWlsZGVyKQorICAgICAgICAgICAgICAgIChyZWFsZm4sIHZpcnR1YWwsIG1jKSA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oZm4pCisgICAgICAgICAgICAgICAgdGhlX2RhdGEgPSBkYXRhYnVpbGRlci5tY2RhdGFbbWNdCisgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyKCJCQl9XT1JLRVJDT05URVhUIiwgIjEiKQorICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhcigiQkJfVEFTS0RFUERBVEEiLCB0YXNrZGVwZGF0YSkKKyAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsIHdvcmtlcmRhdGFbImJ1aWxkbmFtZSJdKQorICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhcigiREFURSIsIHdvcmtlcmRhdGFbImRhdGUiXSkKKyAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXIoIlRJTUUiLCB3b3JrZXJkYXRhWyJ0aW1lIl0pCisgICAgICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLnNldF90YXNrZGF0YSh3b3JrZXJkYXRhWyJzaWdkYXRhIl0pCisgICAgICAgICAgICAgICAgcmV0ID0gMAorCisgICAgICAgICAgICAgICAgdGhlX2RhdGEgPSBiYl9jYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGFwcGVuZHMpCiAgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyKCdCQl9UQVNLSEFTSCcsIHdvcmtlcmRhdGFbInJ1bnFfaGFzaCJdW3Rhc2tdKQogCiAgICAgICAgICAgICAgICAgYmIudXRpbHMuc2V0X3Byb2Nlc3NfbmFtZSgiJXM6JXMiICUgKHRoZV9kYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgdGFza25hbWUucmVwbGFjZSgiZG9fIiwgIiIpKSkKQEAgLTIwNywxNCArMjEzLDI0IEBACiAgICAgICAgICAgICAgICAgIyBleHBvcnRlZF92YXJzKCkgcmV0dXJucyBhIGdlbmVyYXRvciB3aGljaCAqY2Fubm90KiBiZSBwYXNzZWQgdG8gb3MuZW52aXJvbi51cGRhdGUoKSAKICAgICAgICAgICAgICAgICAjIHN1Y2Nlc3NmdWxseS4gV2UgYWxzbyBuZWVkIHRvIHVuc2V0IGFueXRoaW5nIGZyb20gdGhlIGVudmlyb25tZW50IHdoaWNoIHNob3VsZG4ndCBiZSB0aGVyZSAKICAgICAgICAgICAgICAgICBleHBvcnRzID0gYmIuZGF0YS5leHBvcnRlZF92YXJzKHRoZV9kYXRhKQorCiAgICAgICAgICAgICAgICAgYmIudXRpbHMuZW1wdHlfZW52aXJvbm1lbnQoKQogICAgICAgICAgICAgICAgIGZvciBlLCB2IGluIGV4cG9ydHM6CiAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bZV0gPSB2CisKICAgICAgICAgICAgICAgICBmb3IgZSBpbiBmYWtlZW52OgogICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2VdID0gZmFrZWVudltlXQogICAgICAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXIoZSwgZmFrZWVudltlXSkKICAgICAgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyRmxhZyhlLCAnZXhwb3J0JywgIjEiKQogCisgICAgICAgICAgICAgICAgdGFza19leHBvcnRzID0gdGhlX2RhdGEuZ2V0VmFyRmxhZyh0YXNrbmFtZSwgJ2V4cG9ydHMnLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHRhc2tfZXhwb3J0czoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGUgaW4gdGFza19leHBvcnRzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXJGbGFnKGUsICdleHBvcnQnLCAnMScpCisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdGhlX2RhdGEuZ2V0VmFyKGUsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bZV0gPSB2CisKICAgICAgICAgICAgICAgICBpZiBxdWlldGVycm9yczoKICAgICAgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyRmxhZyh0YXNrbmFtZSwgInF1aWV0ZXJyb3JzIiwgIjEiKQogCkBAIC0yNDAsNyArMjU2LDcgQEAKICAgICAgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZm5hbWUpCiAgICAgICAgICAgICAgICAgb3MuX2V4aXQocmV0KQogICAgIGVsc2U6Ci0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGVudmJhY2t1cC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlcihlbnZiYWNrdXAuaXRlbXMoKSk6CiAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KICAgICAgICAgICAgIGVsc2U6CkBAIC0yNTcsMjIgKzI3MywyMiBAQAogICAgICAgICBpZiBwaXBlb3V0OgogICAgICAgICAgICAgcGlwZW91dC5jbG9zZSgpCiAgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc2VsZi5pbnB1dCkKLSAgICAgICAgc2VsZi5xdWV1ZSA9ICIiCisgICAgICAgIHNlbGYucXVldWUgPSBiIiIKIAogICAgIGRlZiByZWFkKHNlbGYpOgogICAgICAgICBzdGFydCA9IGxlbihzZWxmLnF1ZXVlKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZSArIHNlbGYuaW5wdXQucmVhZCgxMDI0MDApCisgICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZSArIChzZWxmLmlucHV0LnJlYWQoMTAyNDAwKSBvciBiIiIpCiAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOOgogICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgZW5kID0gbGVuKHNlbGYucXVldWUpCi0gICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V2ZW50PiIpCisgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKGIiPC9ldmVudD4iKQogICAgICAgICB3aGlsZSBpbmRleCAhPSAtMToKICAgICAgICAgICAgIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoc2VsZi5xdWV1ZVs6aW5kZXgrOF0pCiAgICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZVtpbmRleCs4Ol0KLSAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V2ZW50PiIpCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZChiIjwvZXZlbnQ+IikKICAgICAgICAgcmV0dXJuIChlbmQgPiBzdGFydCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTI4OCw3ICszMDQsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaW4pOgogICAgICAgICBzZWxmLmlucHV0ID0gZGluCiAgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc2VsZi5pbnB1dCkKLSAgICAgICAgc2VsZi5xdWV1ZSA9ICIiCisgICAgICAgIHNlbGYucXVldWUgPSBiIiIKICAgICAgICAgc2VsZi5jb29rZXJjZmcgPSBOb25lCiAgICAgICAgIHNlbGYuZGF0YWJ1aWxkZXIgPSBOb25lCiAgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKQEAgLTMyNSwxMiArMzQxLDEyIEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgaWYgbGVuKHNlbGYucXVldWUpOgotICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oImNvb2tlcmNvbmZpZyIsIHNlbGYuaGFuZGxlX2Nvb2tlcmNmZykKLSAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJ3b3JrZXJkYXRhIiwgc2VsZi5oYW5kbGVfd29ya2VyZGF0YSkKLSAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJydW50YXNrIiwgc2VsZi5oYW5kbGVfcnVudGFzaykKLSAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJmaW5pc2hub3ciLCBzZWxmLmhhbmRsZV9maW5pc2hub3cpCi0gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicGluZyIsIHNlbGYuaGFuZGxlX3BpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicXVpdCIsIHNlbGYuaGFuZGxlX3F1aXQpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbShiImNvb2tlcmNvbmZpZyIsIHNlbGYuaGFuZGxlX2Nvb2tlcmNmZykKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKGIid29ya2VyZGF0YSIsIHNlbGYuaGFuZGxlX3dvcmtlcmRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbShiInJ1bnRhc2siLCBzZWxmLmhhbmRsZV9ydW50YXNrKQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oYiJmaW5pc2hub3ciLCBzZWxmLmhhbmRsZV9maW5pc2hub3cpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbShiInBpbmciLCBzZWxmLmhhbmRsZV9waW5nKQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oYiJxdWl0Iiwgc2VsZi5oYW5kbGVfcXVpdCkKIAogICAgICAgICAgICAgZm9yIHBpcGUgaW4gc2VsZi5idWlsZF9waXBlczoKICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzW3BpcGVdLnJlYWQoKQpAQCAtMzQwLDEyICszNTYsMTIgQEAKIAogCiAgICAgZGVmIGhhbmRsZV9pdGVtKHNlbGYsIGl0ZW0sIGZ1bmMpOgotICAgICAgICBpZiBzZWxmLnF1ZXVlLnN0YXJ0c3dpdGgoIjwiICsgaXRlbSArICI+Iik6Ci0gICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC8iICsgaXRlbSArICI+IikKKyAgICAgICAgaWYgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKGIiPCIgKyBpdGVtICsgYiI+Iik6CisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZChiIjwvIiArIGl0ZW0gKyBiIj4iKQogICAgICAgICAgICAgd2hpbGUgaW5kZXggIT0gLTE6CiAgICAgICAgICAgICAgICAgZnVuYyhzZWxmLnF1ZXVlWyhsZW4oaXRlbSkgKyAyKTppbmRleF0pCiAgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbKGluZGV4ICsgbGVuKGl0ZW0pICsgMyk6XQotICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8LyIgKyBpdGVtICsgIj4iKQorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKGIiPC8iICsgaXRlbSArIGIiPiIpCiAKICAgICBkZWYgaGFuZGxlX2Nvb2tlcmNmZyhzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5jb29rZXJjZmcgPSBwaWNrbGUubG9hZHMoZGF0YSkKQEAgLTM1OSwxMiArMzc1LDEzIEBACiAgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0VmVyYm9zZSA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdHZlcmJvc2UiXQogICAgICAgICBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MgPSBzZWxmLndvcmtlcmRhdGFbImxvZ2RlZmF1bHR2ZXJib3NlbG9ncyJdCiAgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RG9tYWlucyA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdGRvbWFpbiJdCi0gICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIlBSU0VSVl9IT1NUIiwgc2VsZi53b3JrZXJkYXRhWyJwcmhvc3QiXSkKKyAgICAgICAgZm9yIG1jIGluIHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhOgorICAgICAgICAgICAgc2VsZi5kYXRhYnVpbGRlci5tY2RhdGFbbWNdLnNldFZhcigiUFJTRVJWX0hPU1QiLCBzZWxmLndvcmtlcmRhdGFbInByaG9zdCJdKQogCiAgICAgZGVmIGhhbmRsZV9waW5nKHNlbGYsIF8pOgogICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHBpbmdcbiIpCiAKLSAgICAgICAgbG9nZ2VyLndhcm4oIlBvbmcgZnJvbSBiaXRiYWtlLXdvcmtlciEiKQorICAgICAgICBsb2dnZXIud2FybmluZygiUG9uZyBmcm9tIGJpdGJha2Utd29ya2VyISIpCiAKICAgICBkZWYgaGFuZGxlX3F1aXQoc2VsZiwgZGF0YSk6CiAgICAgICAgIHdvcmtlcmxvZ193cml0ZSgiSGFuZGxpbmcgcXVpdFxuIikKQEAgLTM3Nyw3ICszOTQsNyBAQAogICAgICAgICBmbiwgdGFzaywgdGFza25hbWUsIHF1aWV0ZXJyb3JzLCBhcHBlbmRzLCB0YXNrZGVwZGF0YSA9IHBpY2tsZS5sb2FkcyhkYXRhKQogICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHJ1bnRhc2sgJXMgJXMgJXNcbiIgJSAodGFzaywgZm4sIHRhc2tuYW1lKSkKIAotICAgICAgICBwaWQsIHBpcGVpbiwgcGlwZW91dCA9IGZvcmtfb2ZmX3Rhc2soc2VsZi5jb29rZXJjZmcsIHNlbGYuZGF0YSwgc2VsZi53b3JrZXJkYXRhLCBmbiwgdGFzaywgdGFza25hbWUsIGFwcGVuZHMsIHRhc2tkZXBkYXRhLCBxdWlldGVycm9ycykKKyAgICAgICAgcGlkLCBwaXBlaW4sIHBpcGVvdXQgPSBmb3JrX29mZl90YXNrKHNlbGYuY29va2VyY2ZnLCBzZWxmLmRhdGEsIHNlbGYuZGF0YWJ1aWxkZXIsIHNlbGYud29ya2VyZGF0YSwgZm4sIHRhc2ssIHRhc2tuYW1lLCBhcHBlbmRzLCB0YXNrZGVwZGF0YSwgcXVpZXRlcnJvcnMpCiAKICAgICAgICAgc2VsZi5idWlsZF9waWRzW3BpZF0gPSB0YXNrCiAgICAgICAgIHNlbGYuYnVpbGRfcGlwZXNbcGlkXSA9IHJ1blF1ZXVlV29ya2VyUGlwZShwaXBlaW4sIHBpcGVvdXQpCkBAIC00MDksMTIgKzQyNiwxMiBAQAogICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzW3BpZF0uY2xvc2UoKQogICAgICAgICBkZWwgc2VsZi5idWlsZF9waXBlc1twaWRdCiAKLSAgICAgICAgd29ya2VyX2ZpcmVfcHJlcGlja2xlZCgiPGV4aXRjb2RlPiIgKyBwaWNrbGUuZHVtcHMoKHRhc2ssIHN0YXR1cykpICsgIjwvZXhpdGNvZGU+IikKKyAgICAgICAgd29ya2VyX2ZpcmVfcHJlcGlja2xlZChiIjxleGl0Y29kZT4iICsgcGlja2xlLmR1bXBzKCh0YXNrLCBzdGF0dXMpKSArIGIiPC9leGl0Y29kZT4iKQogCiAgICAgZGVmIGhhbmRsZV9maW5pc2hub3coc2VsZiwgXyk6CiAgICAgICAgIGlmIHNlbGYuYnVpbGRfcGlkczoKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZW5kaW5nIFNJR1RFUk0gdG8gcmVtYWluaW5nICVzIHRhc2tzIiwgbGVuKHNlbGYuYnVpbGRfcGlkcykpCi0gICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmJ1aWxkX3BpZHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgaywgdiBpbiBpdGVyKHNlbGYuYnVpbGRfcGlkcy5pdGVtcygpKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwoLWssIHNpZ25hbC5TSUdURVJNKQogICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKC0xLCAwKQpAQCAtNDI0LDcgKzQ0MSw3IEBACiAgICAgICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzW3BpcGVdLnJlYWQoKQogCiB0cnk6Ci0gICAgd29ya2VyID0gQml0YmFrZVdvcmtlcihzeXMuc3RkaW4pCisgICAgd29ya2VyID0gQml0YmFrZVdvcmtlcihvcy5mZG9wZW4oc3lzLnN0ZGluLmZpbGVubygpLCAncmInKSkKICAgICBpZiBub3QgcHJvZmlsaW5nOgogICAgICAgICB3b3JrZXIuc2VydmUoKQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0ZG9jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGRvYwppbmRleCBkZWZiM2RkLi4yNzQ0Njc4IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0ZG9jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRkb2MKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgZXg6dHM9NDpzdz00OnN0cz00OmV0CiAjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCiAjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vaW1hZ2Utd3JpdGVyIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2ltYWdlLXdyaXRlcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTMwYWI0NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vaW1hZ2Utd3JpdGVyCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0jIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1zeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwgJ2xpYicpKQotdHJ5OgotICAgIGltcG9ydCBiYgotZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6Ci0gICAgc3lzLmV4aXQoc3RyKGV4YykpCi0KLWltcG9ydCBndGsKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHB5Z3RrCi0KLWZyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KLWZyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCi1mcm9tIGJiLnVpLmNydW1icy5oaWcuZGVwbG95aW1hZ2VkaWFsb2cgaW1wb3J0IERlcGxveUltYWdlRGlhbG9nCi1mcm9tIGJiLnVpLmNydW1icy5oaWcuaW1hZ2VzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IEltYWdlU2VsZWN0aW9uRGlhbG9nCi0KLSMgSSBwdXQgYWxsIHRoZSBmcyBiaXRiYWtlIHN1cHBvcnRlZCBoZXJlLiBOZWVkIG1vcmUgdGVzdC4KLURFUExPWUFCTEVfSU1BR0VfVFlQRVMgPSBbImpmZnMyIiwgImNyYW1mcyIsICJleHQyIiwgImV4dDMiLCAiZXh0NCIsICJidHJmcyIsICJzcXVhc2hmcyIsICJ1YmkiLCAidm1kayJdCi1UaXRsZSA9ICJVU0IgSW1hZ2UgV3JpdGVyIgotCi1jbGFzcyBEZXBsb3lXaW5kb3coZ3RrLldpbmRvdyk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3BhdGg9JycpOgotICAgICAgICBzdXBlcihEZXBsb3lXaW5kb3csIHNlbGYpLl9faW5pdF9fKCkKLQotICAgICAgICBpZiBsZW4oaW1hZ2VfcGF0aCkgPiAwOgotICAgICAgICAgICAgdmFsaWQgPSBUcnVlCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VfcGF0aCk6Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQotICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5JbnZhbGlkIGltYWdlIGZpbGUgcGF0aDogJXMuPC9iPlxuUHJlc3MgPGI+U2VsZWN0IEltYWdlPC9iPiB0byBzZWxlY3QgYW4gaW1hZ2UuIiAlIGltYWdlX3BhdGgKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChpbWFnZV9wYXRoKQotICAgICAgICAgICAgICAgIGV4dGVuZF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChpbWFnZV9wYXRoKVsxXVsxOl0KLSAgICAgICAgICAgICAgICBpZiBleHRlbmRfbmFtZSBub3QgaW4gREVQTE9ZQUJMRV9JTUFHRV9UWVBFUzoKLSAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+VW5kZXBsb3lhYmxlIGltZ2UgdHlwZTogJXM8L2I+XG5QcmVzcyA8Yj5TZWxlY3QgSW1hZ2U8L2I+IHRvIHNlbGVjdCBhbiBpbWFnZS4iICUgZXh0ZW5kX25hbWUKLQotICAgICAgICAgICAgaWYgbm90IHZhbGlkOgotICAgICAgICAgICAgICAgIGltYWdlX3BhdGggPSAnJwotICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLlNUT0NLX0RJQUxPR19JTkZPKQotICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCi0gICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCi0gICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQotICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCi0KLSAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nID0gRGVwbG95SW1hZ2VEaWFsb2coVGl0bGUsIGltYWdlX3BhdGgsIHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IsIE5vbmUsIHN0YW5kYWxvbmU9VHJ1ZSkKLSAgICAgICAgY2xvc2VfYnV0dG9uID0gc2VsZi5kZXBsb3lfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQotICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGNsb3NlX2J1dHRvbikKLSAgICAgICAgY2xvc2VfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBndGsubWFpbl9xdWl0KQotCi0gICAgICAgIHdyaXRlX2J1dHRvbiA9IHNlbGYuZGVwbG95X2RpYWxvZy5hZGRfYnV0dG9uKCJXcml0ZSBVU0IgaW1hZ2UiLCBndGsuUkVTUE9OU0VfWUVTKQotICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKHdyaXRlX2J1dHRvbikKLQotICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnc2VsZWN0X2ltYWdlX2NsaWNrZWQnLCBzZWxmLnNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKQotICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnZGVzdHJveScsIGd0ay5tYWluX3F1aXQpCi0gICAgICAgIHJlc3BvbnNlID0gc2VsZi5kZXBsb3lfZGlhbG9nLnNob3coKQotCi0gICAgZGVmIHNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKHNlbGYsIGRpYWxvZyk6Ci0gICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgIGRpYWxvZyA9IEltYWdlU2VsZWN0aW9uRGlhbG9nKGN3ZCwgREVQTE9ZQUJMRV9JTUFHRV9UWVBFUywgVGl0bGUsIHNlbGYsIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUgKQotICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQotICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKLSAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQotICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKLSAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKLQotICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgotICAgICAgICAgICAgaWYgbm90IGRpYWxvZy5pbWFnZV9uYW1lczoKLSAgICAgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPlxuQ2xpY2tlZCB0aGUgcmFkaW8gYnV0dG9uIHRvIHNlbGVjdCBhIGltYWdlLiIKLSAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5TVE9DS19ESUFMT0dfSU5GTykKLSAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQotICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQotICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKLSAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQotICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgIyBnZXQgdGhlIGZ1bGwgcGF0aCBvZiBpbWFnZQotICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihkaWFsb2cuaW1hZ2VfZm9sZGVyLCBkaWFsb2cuaW1hZ2VfbmFtZXNbMF0pCi0gICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3RleHRfYnVmZmVyKGltYWdlX3BhdGgpCi0gICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3BhdGgoaW1hZ2VfcGF0aCkKLQotICAgICAgICBkaWFsb2cuZGVzdHJveSgpCi0KLWRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAotICAgICAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgWy1oXSBbaW1hZ2VfZmlsZV0KLQotJXByb2cgd3JpdGVzIGJvb3RhYmxlIGltYWdlcyB0byBVU0IgZGV2aWNlcy4gWW91IGNhbgotcHJvdmlkZSB0aGUgaW1hZ2UgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIHNlbGVjdCBpdCB1c2luZyB0aGUgR1VJLiIiIikKLQotICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKLSAgICBpbWFnZV9maWxlID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPiAxIGVsc2UgJycKLSAgICBkdyA9IERlcGxveVdpbmRvdyhpbWFnZV9maWxlKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRyeToKLSAgICAgICAgbWFpbigpCi0gICAgICAgIGd0ay5tYWluKCkKLSAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCi0gICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlcgppbmRleCA3MGM2NmQyLi5mOTJkMzhlIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlcgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlcgpAQCAtMTcsMTAgKzE3LDEyIEBACiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgogCi0jIFVzYWdlOiBzb3VyY2UgdG9hc3RlciBbc3RhcnR8c3RvcF0KLSMgICAgICAgICAgICAgICAgICAgICAgIFt3ZWJwb3J0PTxwb3J0Pl0gW25vdWldIFtub3dlYl0KLQotIyBIZWxwZXIgZnVuY3Rpb24gdG8ga2lsbCBhIGJhY2tncm91bmQgdG9hc3RlciBkZXZlbG9wbWVudCBzZXJ2ZXIKK0hFTFA9IgorVXNhZ2U6IHNvdXJjZSB0b2FzdGVyIHN0YXJ0fHN0b3AgW3dlYnBvcnQ9PGFkZHJlc3M6cG9ydD5dIFtub3dlYl0KKyAgICBPcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgIFtub3dlYl0gU2V0dXAgdGhlIGVudmlyb25tZW50IGZvciBidWlsZGluZyB3aXRoIHRvYXN0ZXIgYnV0IGRvbid0IHN0YXJ0IHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIKKyAgICAgICAgW3dlYnBvcnRdIFNldCB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIChkZWZhdWx0OiBsb2NhbGhvc3Q6ODAwMCkKKyIKIAogd2Vic2VydmVyS2lsbEFsbCgpCiB7CkBAIC0zMSw5ICszMyw2IEBACiAgICAgICAgICAgICB3aGlsZSBraWxsIC0wICRwaWQgMj4vZGV2L251bGw7IGRvCiAgICAgICAgICAgICAgICAga2lsbCAtU0lHVEVSTSAtJHBpZCAyPi9kZXYvbnVsbAogICAgICAgICAgICAgICAgIHNsZWVwIDEKLSAgICAgICAgICAgICAgICAjIEtpbGwgcHJvY2Vzc2VzIGlmIHRoZXkgYXJlIHN0aWxsIHJ1bm5pbmcgLSBtYXkgaGFwcGVuCi0gICAgICAgICAgICAgICAgIyBpbiBpbnRlcmFjdGl2ZSBzaGVsbHMKLSAgICAgICAgICAgICAgICBwcyBmdXggfCBncmVwICJweXRob24uKm1hbmFnZS5weSBydW5zZXJ2ZXIiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IHhhcmdzIGtpbGwKICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgIHJtICAke3BpZGZpbGV9CiAgICAgICAgIGZpCkBAIC01Nyw3ICs1Niw4IEBACiAgICAgICAgIGVjaG8gIkZhaWxlZCBtaWdyYXRpb25zLCBhYm9ydGluZyBzeXN0ZW0gc3RhcnQiIDE+JjIKICAgICAgICAgcmV0dXJuICRyZXR2YWwKICAgICBmaQotCisgICAgIyBNYWtlIHN1cmUgdGhhdCBjaGVja3NldHRpbmdzIGNhbiBwaWNrIHVwIGFueSB2YWx1ZSBmb3IgVEVNUExBVEVDT05GCisgICAgZXhwb3J0IFRFTVBMQVRFQ09ORgogICAgICRNQU5BR0UgY2hlY2tzZXR0aW5ncyAtLXRyYWNlYmFjayB8fCByZXR2YWw9MQogCiAgICAgaWYgWyAkcmV0dmFsIC1lcSAxIF07IHRoZW4KQEAgLTY3LDcgKzY3LDcgQEAKIAogICAgIGVjaG8gIlN0YXJ0aW5nIHdlYnNlcnZlci4uLiIKIAotICAgICRNQU5BR0UgcnVuc2VydmVyICIwLjAuMC4wOiRXRUJfUE9SVCIgXAorICAgICRNQU5BR0UgcnVuc2VydmVyICIkQUREUl9QT1JUIiBcCiAgICAgICAgICAgIDwvZGV2L251bGwgPj4ke0JVSUxERElSfS90b2FzdGVyX3dlYi5sb2cgMj4mMSBcCiAgICAgICAgICAgICYgZWNobyAkISA+JHtCVUlMRERJUn0vLnRvYXN0ZXJtYWluLnBpZAogCkBAIC03Nyw3ICs3Nyw4IEBACiAgICAgICAgIHJldHZhbD0xCiAgICAgICAgIHJtICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIgogICAgIGVsc2UKLSAgICAgICAgZWNobyAiV2Vic2VydmVyIGFkZHJlc3M6ICBodHRwOi8vMC4wLjAuMDokV0VCX1BPUlQvIgorICAgICAgICBlY2hvICJUb2FzdGVyIGRldmVsb3BtZW50IHdlYnNlcnZlciBzdGFydGVkIGF0IGh0dHA6Ly8kQUREUl9QT1JUIgorICAgICAgICBlY2hvIC1lICJcbllvdSBjYW4gbm93IHJ1biAnYml0YmFrZSA8dGFyZ2V0Picgb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgbW9uaXRvciB5b3VyIGJ1aWxkIGluIFRvYXN0ZXIuXG5Zb3UgY2FuIGFsc28gdXNlIGEgVG9hc3RlciBwcm9qZWN0IHRvIGNvbmZpZ3VyZSBhbmQgcnVuIGEgYnVpbGQuXG4iCiAgICAgZmkKIAogICAgIHJldHVybiAkcmV0dmFsCkBAIC05MSwxNCArOTIsOCBAQAogICAgICMgcHJldmVudCByZWVudHJ5CiAgICAgaWYgWyAkSU5TVE9QU1lTVEVNIC1lcSAxIF07IHRoZW4gcmV0dXJuOyBmaQogICAgIElOU1RPUFNZU1RFTT0xCi0gICAgaWYgWyAtZiAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZCBdOyB0aGVuCi0gICAgICAgIGtpbGwgYGNhdCAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZGAgMj4vZGV2L251bGwKLSAgICAgICAgcm0gJHtCVUlMRERJUn0vLnRvYXN0ZXJ1aS5waWQKLSAgICBmaQogICAgIHdlYnNlcnZlcktpbGxBbGwKICAgICAjIHVuc2V0IGV4cG9ydGVkIHZhcmlhYmxlcwotICAgIHVuc2V0IERBVEFCQVNFX1VSTAotICAgIHVuc2V0IFRPQVNURVJfQ09ORgogICAgIHVuc2V0IFRPQVNURVJfRElSCiAgICAgdW5zZXQgQklUQkFLRV9VSQogICAgIHVuc2V0IEJCQkFTRURJUgpAQCAtMTA5LDExICsxMDQsMTEgQEAKIAogdmVyaWZ5X3ByZXJlcSgpIHsKICAgICAjIFZlcmlmeSBEamFuZ28gdmVyc2lvbgotICAgIHJlcWZpbGU9JChweXRob24gLWMgImltcG9ydCBvczsgcHJpbnQgb3MucGF0aC5yZWFscGF0aCgnJEJCQkFTRURJUi90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQnKSIpCisgICAgcmVxZmlsZT0kKHB5dGhvbjMgLWMgImltcG9ydCBvczsgcHJpbnQob3MucGF0aC5yZWFscGF0aCgnJEJCQkFTRURJUi90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQnKSkiKQogICAgIGV4cD0ncy9EamFuZ29cKFs+PD1dXCtcKVwoW14sXVwrXCksXChbPjw9XVwrXClcKC5cK1wpLycKICAgICBleHA9JGV4cCdpbXBvcnQgc3lzLGRqYW5nbzt2ZXJzaW9uPWRqYW5nby5nZXRfdmVyc2lvbigpLnNwbGl0KCIuIik7JwogICAgIGV4cD0kZXhwJ3N5cy5leGl0KG5vdCAodmVyc2lvbiBcMSAiXDIiLnNwbGl0KCIuIikgYW5kIHZlcnNpb24gXDMgIlw0Ii5zcGxpdCgiLiIpKSkvcCcKLSAgICBpZiAhIHNlZCAtbiAiJGV4cCIgJHJlcWZpbGUgfCBweXRob24gLSA7IHRoZW4KKyAgICBpZiAhIHNlZCAtbiAiJGV4cCIgJHJlcWZpbGUgfCBweXRob24zIC0gOyB0aGVuCiAgICAgICAgIHJlcT1gZ3JlcCBeRGphbmdvICRyZXFmaWxlYAogICAgICAgICBlY2hvICJUaGlzIHByb2dyYW0gbmVlZHMgJHJlcSIKICAgICAgICAgZWNobyAiUGxlYXNlIGluc3RhbGwgd2l0aCBwaXAgaW5zdGFsbCAtciAkcmVxZmlsZSIKQEAgLTEzMyw4ICsxMjgsOCBAQAogZmkKIAogZXhwb3J0IEJCQkFTRURJUj1gZGlybmFtZSAkVE9BU1RFUmAvLi4KLU1BTkFHRT0kQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weQotT0VST09UPWBkaXJuYW1lICRUT0FTVEVSYC8uLi8uLgorTUFOQUdFPSJweXRob24zICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IgorT0VfUk9PVD1gZGlybmFtZSAkVE9BU1RFUmAvLi4vLi4KIAogIyB0aGlzIGlzIHRoZSBjb25maWd1cmF0b24gZmlsZSB3ZSBhcmUgdXNpbmcgZm9yIHRvYXN0ZXIKICMgd2UgYXJlIHVzaW5nIHRoZSBzYW1lIGxvZ2ljIHRoYXQgb2Utc2V0dXAtYnVpbGRkaXIgdXNlcwpAQCAtMTQ0LDI5ICsxMzksMTcgQEAKICMgaW4gdGhlIGxvY2FsIGxheWVycyB0aGF0IGN1cnJlbnRseSBtYWtlIHVzaW5nIGFuIGFyYml0cmFyeQogIyB0b2FzdGVyY29uZi5qc29uIGRpZmZpY3VsdC4KIAotLiAkT0VST09ULy50ZW1wbGF0ZWNvbmYKKy4gJE9FX1JPT1QvLnRlbXBsYXRlY29uZgogaWYgWyAtbiAiJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgogICAgIGlmIFsgISAtZCAiJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgogICAgICAgICAjIEFsbG93IFRFTVBMQVRFQ09ORj1tZXRhLXh5ei9jb25mIGFzIGEgc2hvcnRjdXQKLSAgICAgICAgaWYgWyAtZCAiJE9FUk9PVC8kVEVNUExBVEVDT05GIiBdOyB0aGVuCi0gICAgICAgICAgICBURU1QTEFURUNPTkY9IiRPRVJPT1QvJFRFTVBMQVRFQ09ORiIKLSAgICAgICAgZmkKLSAgICAgICAgaWYgWyAhIC1kICIkVEVNUExBVEVDT05GIiBdOyB0aGVuCi0gICAgICAgICAgICBlY2hvID4mMiAiRXJyb3I6ICckVEVNUExBVEVDT05GJyBtdXN0IGJlIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdG9hc3RlcmNvbmYuanNvbiIKLSAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIFsgLWQgIiRPRV9ST09ULyRURU1QTEFURUNPTkYiIF07IHRoZW4KKyAgICAgICAgICAgIFRFTVBMQVRFQ09ORj0iJE9FX1JPT1QvJFRFTVBMQVRFQ09ORiIKICAgICAgICAgZmkKICAgICBmaQogZmkKIAotaWYgWyAiJFRPQVNURVJfQ09ORiIgPSAiIiBdOyB0aGVuCi0gICAgVE9BU1RFUl9DT05GPSIkVEVNUExBVEVDT05GL3RvYXN0ZXJjb25mLmpzb24iCi0gICAgZXhwb3J0IFRPQVNURVJfQ09ORj0kKHB5dGhvbiAtYyAiaW1wb3J0IG9zOyBwcmludCBvcy5wYXRoLnJlYWxwYXRoKCckVE9BU1RFUl9DT05GJykiKQotZmkKLQotaWYgWyAhIC1mICRUT0FTVEVSX0NPTkYgXTsgdGhlbgotICAgIGVjaG8gIiRUT0FTVEVSX0NPTkYgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gU2V0IFRPQVNURVJfQ09ORiB0byBzcGVjaWZ5IGZpbGUgb3IgZml4IC50ZW1wbGF0ZWNvbmYiCi0gICAgcmV0dXJuIDEKLWZpCit1bnNldCBPRV9ST09UCiAKICMgdGhpcyBkZWZpbmVzIHRoZSBkaXIgdG9hc3RlciB3aWxsIHVzZSBmb3IKICMgMSkgY2xvbmVzIG9mIGxheWVycyAoaW4gX3RvYXN0ZXJfY2xvbmVzICkKQEAgLTE3OCw3ICsxNjEsNyBAQAogZXhwb3J0IFRPQVNURVJfRElSPWBwd2RgCiAKIFdFQlNFUlZFUj0xCi1XRUJfUE9SVD0iODAwMCIKK0FERFJfUE9SVD0ibG9jYWxob3N0OjgwMDAiCiB1bnNldCBDTUQKIGZvciBwYXJhbSBpbiAkKjsgZG8KICAgICBjYXNlICRwYXJhbSBpbgpAQCAtMTkyLDcgKzE3NSwyNCBAQAogICAgICAgICAgICAgQ01EPSRwYXJhbQogICAgIDs7CiAgICAgd2VicG9ydD0qKQotICAgICAgICAgICAgV0VCX1BPUlQ9IiR7cGFyYW0jKj19IgorICAgICAgICAgICAgQUREUl9QT1JUPSIke3BhcmFtIyo9fSIKKyAgICAgICAgICAgICMgU3BsaXQgdGhlIGFkZHI6cG9ydCBzdHJpbmcKKyAgICAgICAgICAgIEFERFI9YGVjaG8gJEFERFJfUE9SVCB8IGN1dCAtZiAxIC1kICc6J2AKKyAgICAgICAgICAgIFBPUlQ9YGVjaG8gJEFERFJfUE9SVCB8IGN1dCAtZiAyIC1kICc6J2AKKyAgICAgICAgICAgICMgSWYgb25seSBhIHBvcnQgaGFzIGJlZW4gc3BlaWZpZWQgdGhlbiBzZXQgYWRkcmVzcyB0byBsb2NhbGhvc3QuCisgICAgICAgICAgICBpZiBbICRBRERSID0gJFBPUlQgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBBRERSX1BPUlQ9ImxvY2FsaG9zdDokUE9SVCIKKyAgICAgICAgICAgIGZpCisgICAgOzsKKyAgICAtLWhlbHApCisgICAgICAgICAgICBlY2hvICIkSEVMUCIKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgZWNobyAiJEhFTFAiCisgICAgICAgICAgICByZXR1cm4gMQorICAgIDs7CisKICAgICBlc2FjCiBkb25lCiAKQEAgLTIyNiwxMSArMjI2LDkgQEAKIAlyZXR1cm4gMQogZmkKIGVsaWYgWyAiJENNRCIgPSAiIiBdOyB0aGVuCi0gICAgaWYgWyAteiAiJEJCU0VSVkVSIiBdOyB0aGVuCi0gICAgICAgIENNRD0ic3RhcnQiCi0gICAgZWxzZQotICAgICAgICBDTUQ9InN0b3AiCi0gICAgZmkKKyAgICBlY2hvICJObyBjb21tYW5kIHNwZWNpZmllZCIKKyAgICBlY2hvICIkSEVMUCIKKyAgICByZXR1cm4gMQogZmkKIAogZWNobyAiVGhlIHN5c3RlbSB3aWxsICRDTUQuIgpAQCAtMjQxLDE1ICsyMzksOSBAQAogICAgIHN0YXJ0ICkKICAgICAgICAgIyBjaGVjayBpZiBhZGRyOnBvcnQgaXMgbm90IGluIHVzZQogICAgICAgICBpZiBbICIkQ01EIiA9PSAnc3RhcnQnIF07IHRoZW4KLSAgICAgICAgICAgICAkTUFOQUdFIGNoZWNrc29ja2V0ICIwLjAuMC4wOiRXRUJfUE9SVCIgfHwgcmV0dXJuIDEKLSAgICAgICAgZmkKLQotICAgICAgICAjIGtpbGwgVG9hc3RlciB3ZWIgc2VydmVyIGlmIGl0J3MgYWxpdmUKLSAgICAgICAgaWYgWyAtZSAkQlVJTERESVIvLnRvYXN0ZXJtYWluLnBpZCBdICYmIGtpbGwgLTAgYGNhdCAkQlVJTERESVIvLnRvYXN0ZXJtYWluLnBpZGA7IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIldhcm5pbmc6IGJpdGJha2UgYXBwZWFycyB0byBiZSBkZWFkLCBidXQgdGhlIFRvYXN0ZXIgd2ViIHNlcnZlciBpcyBydW5uaW5nLiIgMT4mMgotICAgICAgICAgICAgZWNobyAiIFNvbWV0aGluZyBmaXNoeSBpcyBnb2luZyBvbi4iIDE+JjIKLSAgICAgICAgICAgIGVjaG8gIkNsZWFuaW5nIHVwIHRoZSB3ZWIgc2VydmVyIHRvIHN0YXJ0IGZyb20gYSBjbGVhbiBzbGF0ZS4iCi0gICAgICAgICAgICB3ZWJzZXJ2ZXJLaWxsQWxsCisgICAgICAgICAgICBpZiBbICRXRUJTRVJWRVIgLWd0IDAgXTsgdGhlbgorICAgICAgICAgICAgICAgICRNQU5BR0UgY2hlY2tzb2NrZXQgIiRBRERSX1BPUlQiIHx8IHJldHVybiAxCisgICAgICAgICAgICBmaQogICAgICAgICBmaQogCiAgICAgICAgICMgQ3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZQpAQCAtMjYyLDcgKzI1NCw2IEBACiAgICAgICAgICAgICByZXR1cm4gNAogICAgICAgICBmaQogICAgICAgICBleHBvcnQgQklUQkFLRV9VST0ndG9hc3RlcnVpJwotICAgICAgICBleHBvcnQgREFUQUJBU0VfVVJMPWAkTUFOQUdFIGdldC1kYnVybGAKICAgICAgICAgJE1BTkFHRSBydW5idWlsZHMgJiBlY2hvICQhID4ke0JVSUxERElSfS8ucnVuYnVpbGRzLnBpZAogICAgICAgICAjIHNldCBmYWlsIHNhZmUgc3RvcCBzeXN0ZW0gb24gdGVybWluYWwgZXhpdAogICAgICAgICB0cmFwIHN0b3Bfc3lzdGVtIFNJR0hVUApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheQppbmRleCA2MTVhN2FlLi44MDk2N2EwIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKICMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KICMKQEAgLTIxLDE1NCArMjEsMTA2IEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKKyIiIgorVGhpcyBjb21tYW5kIHRha2VzIGEgZmlsZW5hbWUgYXMgYSBzaW5nbGUgcGFyYW1ldGVyLiBUaGUgZmlsZW5hbWUgaXMgcmVhZAorYXMgYSBidWlsZCBldmVudGxvZywgYW5kIHRoZSBUb2FzdGVyVUkgaXMgdXNlZCB0byBwcm9jZXNzIGV2ZW50cyBpbiB0aGUgZmlsZQorYW5kIGxvZyBkYXRhIGluIHRoZSBkYXRhYmFzZQorIiIiCiAKLSMgVGhpcyBjb21tYW5kIHRha2VzIGEgZmlsZW5hbWUgYXMgYSBzaW5nbGUgcGFyYW1ldGVyLiBUaGUgZmlsZW5hbWUgaXMgcmVhZAotIyBhcyBhIGJ1aWxkIGV2ZW50bG9nLCBhbmQgdGhlIFRvYXN0ZXJVSSBpcyB1c2VkIHRvIHByb2Nlc3MgZXZlbnRzIGluIHRoZSBmaWxlCi0jIGFuZCBsb2cgZGF0YSBpbiB0aGUgZGF0YWJhc2UKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogaW1wb3J0IG9zCi1pbXBvcnQgc3lzLCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQganNvbgoraW1wb3J0IHBpY2tsZQoraW1wb3J0IGNvZGVjcworCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCiAKICMgbWFuZ2xlIHN5c3BhdGggdG8gYWxsb3cgZWFzeSBpbXBvcnQgb2YgbW9kdWxlcwotc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYicpKQotCitmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIGRpcm5hbWUsIGFic3BhdGgKK3N5cy5wYXRoLmluc2VydCgwLCBqb2luKGRpcm5hbWUoZGlybmFtZShhYnNwYXRoKF9fZmlsZV9fKSkpLCAnbGliJykpCiAKIGltcG9ydCBiYi5jb29rZXIKIGZyb20gYmIudWkgaW1wb3J0IHRvYXN0ZXJ1aQotaW1wb3J0IHN5cwotaW1wb3J0IGxvZ2dpbmcKIAotaW1wb3J0IGpzb24sIHBpY2tsZQorY2xhc3MgRXZlbnRQbGF5ZXI6CisgICAgIiIiRW11bGF0ZSBhIGNvbm5lY3Rpb24gdG8gYSBiaXRiYWtlIHNlcnZlci4iIiIKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudGZpbGUsIHZhcmlhYmxlcyk6CisgICAgICAgIHNlbGYuZXZlbnRmaWxlID0gZXZlbnRmaWxlCisgICAgICAgIHNlbGYudmFyaWFibGVzID0gdmFyaWFibGVzCisgICAgICAgIHNlbGYuZXZlbnRtYXNrID0gW10KIAotY2xhc3MgRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uKCk6Ci0gICAgIiIiICBFbXVsYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBiaXRiYWtlIHNlcnZlciB0aGF0IGZlZWRzCi0gICAgICAgIGV2ZW50cyBjb21pbmcgYWN0dWFsbHkgcmVhZCBmcm9tIGEgc2F2ZWQgbG9nIGZpbGUuCi0gICAgIiIiCisgICAgZGVmIHdhaXRFdmVudChzZWxmLCBfdGltZW91dCk6CisgICAgICAgICIiIlJlYWQgZXZlbnQgZnJvbSB0aGUgZmlsZS4iIiIKKyAgICAgICAgbGluZSA9IHNlbGYuZXZlbnRmaWxlLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudF9zdHIgPSBqc29uLmxvYWRzKGxpbmUpWyd2YXJzJ10uZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBldmVudCA9IHBpY2tsZS5sb2Fkcyhjb2RlY3MuZGVjb2RlKGV2ZW50X3N0ciwgJ2Jhc2U2NCcpKQorICAgICAgICAgICAgZXZlbnRfbmFtZSA9ICIlcy4lcyIgJSAoZXZlbnQuX19tb2R1bGVfXywgZXZlbnQuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICAgICAgaWYgZXZlbnRfbmFtZSBub3QgaW4gc2VsZi5ldmVudG1hc2s6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZXR1cm4gZXZlbnQKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCBsb2FkaW5nICIsIGxpbmUpCisgICAgICAgICAgICByYWlzZSBlcnIKIAotICAgIGNsYXNzIE1vY2tDb25uZWN0aW9uKCk6Ci0gICAgICAgICIiIiBmaWxsLWluIGZvciB0aGUgcHJveHkgdG8gdGhlIHNlcnZlci4gd2UganVzdCByZXR1cm4gZ2VuZXJpYyBkYXRhCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZF9saW5lKToKKyAgICAgICAgIiIiRW11bGF0ZSBydW5uaW5nIGEgY29tbWFuZCBvbiB0aGUgc2VydmVyLiIiIgorICAgICAgICBuYW1lID0gY29tbWFuZF9saW5lWzBdCisKKyAgICAgICAgaWYgbmFtZSA9PSAiZ2V0VmFyaWFibGUiOgorICAgICAgICAgICAgdmFyX25hbWUgPSBjb21tYW5kX2xpbmVbMV0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gc2VsZi52YXJpYWJsZXMuZ2V0KHZhcl9uYW1lKQorICAgICAgICAgICAgaWYgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlWyd2J10sIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBOb25lLCAiTWlzc2luZyB2YXJpYWJsZSAlcyIgJSB2YXJfbmFtZQorCisgICAgICAgIGVsaWYgbmFtZSA9PSAiZ2V0QWxsS2V5c1dpdGhGbGFncyI6CisgICAgICAgICAgICBkdW1wID0ge30KKyAgICAgICAgICAgIGZsYWdsaXN0ID0gY29tbWFuZF9saW5lWzFdCisgICAgICAgICAgICBmb3Iga2V5LCB2YWwgaW4gc2VsZi52YXJpYWJsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBrZXkuc3RhcnRzd2l0aCgiX18iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBba2V5XSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndic6IHZhbFsndiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaXN0b3J5JyA6IHZhbFsnaGlzdG9yeSddLAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFtrZXldW2ZsYWddID0gdmFsW2ZsYWddCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHByaW50KGVycikKKyAgICAgICAgICAgIHJldHVybiAoZHVtcCwgTm9uZSkKKworICAgICAgICBlbGlmIG5hbWUgPT0gJ3NldEV2ZW50TWFzayc6CisgICAgICAgICAgICBzZWxmLmV2ZW50bWFzayA9IGNvbW1hbmRfbGluZVstMV0KKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ29tbWFuZCAlcyBub3QgaW1wbGVtZW50ZWQiICUgY29tbWFuZF9saW5lWzBdKQorCisgICAgZGVmIGdldEV2ZW50SGFuZGxlKHNlbGYpOgogICAgICAgICAiIiIKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjKToKLSAgICAgICAgICAgIHNlbGYuX3NjID0gc2MKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRvYXN0ZXJ1aS4KKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBwYXNzZWQgdG8gc2VsZi5ydW5Db21tYW5kIGJ1dCBub3QgdXNlZCB0aGVyZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKIAotICAgICAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kQXJyYXkpOgotICAgICAgICAgICAgIiIiIGVtdWxhdGVzIHJ1bm5pbmcgYSBjb21tYW5kIG9uIHRoZSBzZXJ2ZXI7IG9ubHkgcmVhZC1vbmx5IGNvbW1hbmRzIGFyZSBhY2NlcHRlZCAiIiIKLSAgICAgICAgICAgIGNvbW1hbmRfbmFtZSA9IGNvbW1hbmRBcnJheVswXQorZGVmIG1haW4oYXJndik6CisgICAgd2l0aCBvcGVuKGFyZ3ZbLTFdKSBhcyBldmVudGZpbGU6CisgICAgICAgICMgbG9hZCB2YXJpYWJsZXMgZnJvbSB0aGUgZmlyc3QgbGluZQorICAgICAgICB2YXJpYWJsZXMgPSBqc29uLmxvYWRzKGV2ZW50ZmlsZS5yZWFkbGluZSgpLnN0cmlwKCkpWydhbGx2YXJpYWJsZXMnXQogCi0gICAgICAgICAgICBpZiBjb21tYW5kX25hbWUgPT0gImdldFZhcmlhYmxlIjoKLSAgICAgICAgICAgICAgICBpZiBjb21tYW5kQXJyYXlbMV0gaW4gc2VsZi5fc2MuX3ZhcmlhYmxlczoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9zYy5fdmFyaWFibGVzW2NvbW1hbmRBcnJheVsxXV1bJ3YnXSwgTm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKE5vbmUsICJNaXNzaW5nIHZhcmlhYmxlIikKKyAgICAgICAgcGFyYW1zID0gbmFtZWR0dXBsZSgnQ29uZmlnUGFyYW1zJywgWydvYnNlcnZlX29ubHknXSkoVHJ1ZSkKKyAgICAgICAgcGxheWVyID0gRXZlbnRQbGF5ZXIoZXZlbnRmaWxlLCB2YXJpYWJsZXMpCiAKLSAgICAgICAgICAgIGVsaWYgY29tbWFuZF9uYW1lID09ICJnZXRBbGxLZXlzV2l0aEZsYWdzIjoKLSAgICAgICAgICAgICAgICBkdW1wID0ge30KLSAgICAgICAgICAgICAgICBmbGFnbGlzdCA9IGNvbW1hbmRBcnJheVsxXQotICAgICAgICAgICAgICAgIGZvciBrIGluIHNlbGYuX3NjLl92YXJpYWJsZXMua2V5cygpOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgay5zdGFydHN3aXRoKCJfXyIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zYy5fdmFyaWFibGVzW2tdWyd2J10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndicgOiB2ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpc3RvcnknIDogc2VsZi5fc2MuX3ZhcmlhYmxlc1trXVsnaGlzdG9yeSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZCBpbiBmbGFnbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFtrXVtkXSA9IHNlbGYuX3NjLl92YXJpYWJsZXNba11bZF0KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKGR1bXAsIE5vbmUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ29tbWFuZCAlcyBub3QgaW1wbGVtZW50ZWQiICUgY29tbWFuZEFycmF5WzBdKQotCi0gICAgICAgIGRlZiB0ZXJtaW5hdGVTZXJ2ZXIoc2VsZik6Ci0gICAgICAgICAgICAiIiIgZG8gbm90IGRvIGFueXRoaW5nICIiIgotICAgICAgICAgICAgcGFzcwotCi0KLQotICAgIGNsYXNzIEV2ZW50UmVhZGVyKCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYyk6Ci0gICAgICAgICAgICBzZWxmLl9zYyA9IHNjCi0gICAgICAgICAgICBzZWxmLmZpcnN0cmFpc2UgPSAwCi0KLSAgICAgICAgZGVmIF9jcmVhdGVfZXZlbnQoc2VsZiwgbGluZSk6Ci0gICAgICAgICAgICBkZWYgX2ltcG9ydF9jbGFzcyhuYW1lKToKLSAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKG5hbWUpID4gMAotICAgICAgICAgICAgICAgIGFzc2VydCAiLiIgaW4gbmFtZSwgbmFtZQotCi0gICAgICAgICAgICAgICAgY29tcG9uZW50cyA9IG5hbWUuc3RyaXAoKS5zcGxpdCgiLiIpCi0gICAgICAgICAgICAgICAgbW9kdWxlbmFtZSA9ICIuIi5qb2luKGNvbXBvbmVudHNbOi0xXSkKLSAgICAgICAgICAgICAgICBtb2R1bGVrbGFzcyA9IGNvbXBvbmVudHNbLTFdCi0KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZW5hbWUsIGZyb21saXN0PVtzdHIobW9kdWxla2xhc3MpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihtb2R1bGUsIG1vZHVsZWtsYXNzKQotCi0gICAgICAgICAgICAjIHdlIGJ1aWxkIGEgdG9hc3RlciBldmVudCBvdXQgb2YgY3VycmVudCBldmVudCBsb2cgbGluZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGV2ZW50X2RhdGEgPSBqc29uLmxvYWRzKGxpbmUuc3RyaXAoKSkKLSAgICAgICAgICAgICAgICBldmVudF9jbGFzcyA9IF9pbXBvcnRfY2xhc3MoZXZlbnRfZGF0YVsnY2xhc3MnXSkKLSAgICAgICAgICAgICAgICBldmVudF9vYmplY3QgPSBwaWNrbGUubG9hZHMoanNvbi5sb2FkcyhldmVudF9kYXRhWyd2YXJzJ10pKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBwcmludCgiRmFpbGVkIGxvYWRpbmcgIiwgbGluZSkKLSAgICAgICAgICAgICAgICByYWlzZSBlCi0KLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV2ZW50X29iamVjdCwgZXZlbnRfY2xhc3MpOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgbG9hZGluZyBvYmplY3RzICVzIGNsYXNzICVzICIsIGV2ZW50X29iamVjdCwgZXZlbnRfY2xhc3MpCi0KLSAgICAgICAgICAgIHJldHVybiBldmVudF9vYmplY3QKLQotICAgICAgICBkZWYgd2FpdEV2ZW50KHNlbGYsIHRpbWVvdXQpOgotCi0gICAgICAgICAgICBuZXh0bGluZSA9IHNlbGYuX3NjLl9ldmVudGZpbGUucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbGVuKG5leHRsaW5lKSA9PSAwOgotICAgICAgICAgICAgICAgICMgdGhlIGJ1aWxkIGRhdGEgZW5kZWQsIHdoaWxlIHRvYXN0ZXJ1aSBzdGlsbCB3YWl0cyBmb3IgZXZlbnRzLgotICAgICAgICAgICAgICAgICMgdGhpcyBoYXBwZW5zIHdoZW4gdGhlIHNlcnZlciB3YXMgYWJydXB0bHkgc3RvcHBlZCwgc28gd2Ugc2ltdWxhdGUgdGhpcwotICAgICAgICAgICAgICAgIHNlbGYuZmlyc3RyYWlzZSArPSAxCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5maXJzdHJhaXNlID09IDE6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0KCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zYy5saW5lbm8gKz0gMQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZV9ldmVudChuZXh0bGluZSkKLQotCi0gICAgZGVmIF9yZWFkVmFyaWFibGVzKHNlbGYsIHZhcmlhYmxlbGluZSk6Ci0gICAgICAgIHNlbGYuX3ZhcmlhYmxlcyA9IGpzb24ubG9hZHModmFyaWFibGVsaW5lLnN0cmlwKCkpWydhbGx2YXJpYWJsZXMnXQotCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9uYW1lKToKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uLk1vY2tDb25uZWN0aW9uKHNlbGYpCi0gICAgICAgIHNlbGYuX2V2ZW50ZmlsZSA9IG9wZW4oZmlsZV9uYW1lLCAiciIpCi0KLSAgICAgICAgIyB3ZSBleHBlY3QgdG8gaGF2ZSB0aGUgdmFyaWFibGUgZHVtcCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKLSAgICAgICAgc2VsZi5saW5lbm8gPSAxCi0gICAgICAgIHNlbGYuX3JlYWRWYXJpYWJsZXMoc2VsZi5fZXZlbnRmaWxlLnJlYWRsaW5lKCkpCi0KLSAgICAgICAgc2VsZi5ldmVudHMgPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24uRXZlbnRSZWFkZXIoc2VsZikKLQotCi0KLQotCi1jbGFzcyBNb2NrQ29uZmlnUGFyYW1ldGVycygpOgotICAgICIiIiBzdGFuZC1pbiBmb3IgY29va2VyZGF0YS5Db25maWdQYXJhbWV0ZXJzOyBhcyB3ZSBkb24ndCByZWFsbHkgY29uZmlnIGEgY29va2VyLCB0aGlzCi0gICAgICAgIHNlcnZlcyBqdXN0IHRvIHN1cHBseSBuZWVkZWQgaW50ZXJmYWNlcyBmb3IgdGhlIHRvYXN0ZXIgdWkgdG8gd29yayAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYub2JzZXJ2ZV9vbmx5ID0gVHJ1ZSAgICAgICAgICAgICMgd2UgY2FuIG9ubHkgcmVhZCBmaWxlcwotCisgICAgICAgIHJldHVybiB0b2FzdGVydWkubWFpbihwbGF5ZXIsIHBsYXllciwgcGFyYW1zKQogCiAjIHJ1biB0b2FzdGVyIHVpIG9uIG91ciBtb2NrIGJpdGJha2UgY2xhc3MKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA8IDI6Ci0gICAgICAgIHByaW50KCJVc2FnZTogJXMgZXZlbnQubG9nICIgJSBzeXMuYXJndlswXSkKKyAgICBpZiBsZW4oc3lzLmFyZ3YpICE9IDI6CisgICAgICAgIHByaW50KCJVc2FnZTogJXMgPGV2ZW50IGZpbGU+IiAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pKQogICAgICAgICBzeXMuZXhpdCgxKQogCi0gICAgZmlsZV9uYW1lID0gc3lzLmFyZ3ZbLTFdCi0gICAgbW9ja19jb25uZWN0aW9uID0gRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uKGZpbGVfbmFtZSkKLSAgICBjb25maWdQYXJhbXMgPSBNb2NrQ29uZmlnUGFyYW1ldGVycygpCi0KLSAgICAjIHJ1biB0aGUgbWFpbiBwcm9ncmFtIGFuZCBzZXQgZXhpdCBjb2RlIHRvIHRoZSByZXR1cm5lZCB2YWx1ZQotICAgIHN5cy5leGl0KHRvYXN0ZXJ1aS5tYWluKG1vY2tfY29ubmVjdGlvbi5jb25uZWN0aW9uLCBtb2NrX2Nvbm5lY3Rpb24uZXZlbnRzLCBjb25maWdQYXJhbXMpKQorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9kdW1wX2NhY2hlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9kdW1wX2NhY2hlLnB5CmluZGV4IGUxZjIzMDkuLmY0ZDRjMWIgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvZHVtcF9jYWNoZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgZXg6dHM9NDpzdz00OnN0cz00OmV0CiAjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCiAjCkBAIC0yOSwxNCArMjksMTQgQEAKIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpLCAnLi4vbGliJykpCiBmcm9tIGJiLmNhY2hlIGltcG9ydCBDb3JlUmVjaXBlSW5mbwogCi1pbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2ltcG9ydCBwaWNrbGUgYXMgcGlja2xlCiAKIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CiAgICAgIiIiCiAgICAgR2V0IHRoZSBtYXBwaW5nIGZvciB0aGUgdGFyZ2V0IHJlY2lwZS4KICAgICAiIiIKICAgICBpZiBsZW4oYXJndikgIT0gMToKLSAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiRXJyb3IsIG5lZWQgb25lIGFyZ3VtZW50ISIKKyAgICAgICAgcHJpbnQoIkVycm9yLCBuZWVkIG9uZSBhcmd1bWVudCEiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHJldHVybiAyCiAKICAgICBjYWNoZWZpbGUgPSBhcmd2WzBdCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICAgICAjIDEuMCBpcyB0aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciBhIG5vIFBWIHJlY2lwZS4KLSAgICAgICAgICAgICAgICBpZiB2YWwuX19kaWN0X18uaGFzX2tleSgicHYiKToKKyAgICAgICAgICAgICAgICBpZiAicHYiIGluIHZhbC5fX2RpY3RfXzoKICAgICAgICAgICAgICAgICAgICAgcHYgPSB2YWwucHYKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBwdiA9ICIxLjAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwKaW5kZXggYjFiNzJlMC4uZTRjYzQyMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbApAQCAtNTk2LDcgKzU5Niw3IEBACiAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uKS4KICAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXBwZW5kIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBzdGFtcCB1c2luZwotICAgICAgICAgICAgdGhlICJzdGFtcC1leHRyYS1pbmZvIiB0YXNrIGZsYWcuCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPltzdGFtcC1leHRyYS1pbmZvXTwvZmlsZW5hbWU+IHRhc2sgZmxhZy4KICAgICAgICAgICAgIEZvciBleGFtcGxlLCBPcGVuRW1iZWRkZWQgdXNlcyB0aGlzIGZsYWcgdG8gbWFrZSBzb21lIHRhc2tzIG1hY2hpbmUtc3BlY2lmaWMuCiAgICAgICAgIDwvcGFyYT4KIApAQCAtNjUzLDcgKzY1Myw4IEBACiAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgZnVuY3Rpb25zIHJ1biBiZWZvcmUgYW5kIGFmdGVyIGEgdGFzaydzIG1haW4KICAgICAgICAgICAgIGZ1bmN0aW9uLgotICAgICAgICAgICAgVGhpcyBpcyBkb25lIHVzaW5nIHRoZSAicHJlZnVuY3MiIGFuZCAicG9zdGZ1bmNzIiBmbGFncyBvZiB0aGUgdGFzaworICAgICAgICAgICAgVGhpcyBpcyBkb25lIHVzaW5nIHRoZSA8ZmlsZW5hbWU+W3ByZWZ1bmNzXTwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPltwb3N0ZnVuY3NdPC9maWxlbmFtZT4gZmxhZ3Mgb2YgdGhlIHRhc2sKICAgICAgICAgICAgIHRoYXQgbGlzdHMgdGhlIGZ1bmN0aW9ucyB0byBydW4uCiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CkBAIC04MjcsNyArODI4LDcgQEAKICAgICAgICAgICAgIGl0c2VsZi4KICAgICAgICAgICAgIFRoZSBzaW1wbGVzdCBwYXJhbWV0ZXIgdG8gcGFzcyBpcyAibm9uZSIsIHdoaWNoIGNhdXNlcyBhCiAgICAgICAgICAgICBzZXQgb2Ygc2lnbmF0dXJlIGluZm9ybWF0aW9uIHRvIGJlIHdyaXR0ZW4gb3V0IGludG8KLSAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFNUF9ESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgPGZpbGVuYW1lPlNUQU1QU19ESVI8L2ZpbGVuYW1lPgogICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0cyBzcGVjaWZpZWQuCiAgICAgICAgICAgICBUaGUgb3RoZXIgY3VycmVudGx5IGF2YWlsYWJsZSBwYXJhbWV0ZXIgaXMgInByaW50ZGlmZiIsCiAgICAgICAgICAgICB3aGljaCBjYXVzZXMgQml0QmFrZSB0byB0cnkgdG8gZXN0YWJsaXNoIHRoZSBjbG9zZXN0CkBAIC05MTUsNyArOTE2LDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBGaW5hbGx5LCBhZnRlciBhbGwgdGhlIHNldHNjZW5lIHRhc2tzIGhhdmUgZXhlY3V0ZWQsIEJpdEJha2UgY2FsbHMgdGhlCiAgICAgICAgICAgICBmdW5jdGlvbiBsaXN0ZWQgaW4KLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04nPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yJz48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OMjwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgd2l0aCB0aGUgbGlzdCBvZiB0YXNrcyBCaXRCYWtlIHRoaW5rcyBoYXMgYmVlbiAiY292ZXJlZCIuCiAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgY2FuIHRoZW4gZW5zdXJlIHRoYXQgdGhpcyBsaXN0IGlzIGNvcnJlY3QgYW5kIGNhbgogICAgICAgICAgICAgaW5mb3JtIEJpdEJha2UgdGhhdCBpdCB3YW50cyBzcGVjaWZpYyB0YXNrcyB0byBiZSBydW4gcmVnYXJkbGVzcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbAppbmRleCBmMTY4Y2ZhLi4yYTMzNDBiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbApAQCAtNjcwLDggKzY3MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgY29tYmluZWQgdG8gY3JlYXRlIHRoZSA8ZmlsZW5hbWU+bG9hZDwvZmlsZW5hbWU+IHJ1bGUgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmlldyBjb25maWcgc3BlYy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgPGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+IGFuZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT4gdmFsdWVzIGZyb20gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IHZhbHVlcyBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGF0IHRoZSBzdGFydCBvZiB0aGlzIHNlY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluaW5nIHRob3NlIHZhbHVlcyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpAQCAtNzE2LDYgKzcxNiw2OCBAQAogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3BlcmZvcmNlLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPlBlcmZvcmNlIEZldGNoZXIgKDxmaWxlbmFtZT5wNDovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cucGVyZm9yY2UuY29tLyc+UGVyZm9yY2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGlzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9wNDwvZmlsZW5hbWU+LCB3aGljaCBkZWZhdWx0cworICAgICAgICAgICAgICAgIHRvICJwNCIuCisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIncyB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgaXMgc2V0IGJ5CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVA0RElSJz48ZmlsZW5hbWU+UDRESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggZGVmYXVsdHMgdG8gIkRMX0RJUi9wNCIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIGZldGNoZXIsIG1ha2Ugc3VyZSB5b3VyIHJlY2lwZSBoYXMgcHJvcGVyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICBUaGUgcDQgZXhlY3V0YWJsZSBpcyBhYmxlIHRvIHVzZSB0aGUgY29uZmlnIGZpbGUgZGVmaW5lZCBieSB5b3VyCisgICAgICAgICAgICAgICAgc3lzdGVtJ3MgPGZpbGVuYW1lPlA0Q09ORklHPC9maWxlbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4KKyAgICAgICAgICAgICAgICBvcmRlciB0byBkZWZpbmUgdGhlIFBlcmZvcmNlIHNlcnZlciBVUkwgYW5kIHBvcnQsIHVzZXJuYW1lLCBhbmQKKyAgICAgICAgICAgICAgICBwYXNzd29yZCBpZiB5b3UgZG8gbm90IHdpc2ggdG8ga2VlcCB0aG9zZSB2YWx1ZXMgaW4gYSByZWNpcGUKKyAgICAgICAgICAgICAgICBpdHNlbGYuCisgICAgICAgICAgICAgICAgSWYgeW91IGNob29zZSBub3QgdG8gdXNlIDxmaWxlbmFtZT5QNENPTkZJRzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIG9yIHRvIGV4cGxpY2l0bHkgc2V0IHZhcmlhYmxlcyB0aGF0IDxmaWxlbmFtZT5QNENPTkZJRzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY2FuIGNvbnRhaW4sIHlvdSBjYW4gc3BlY2lmeSB0aGUgPGZpbGVuYW1lPlA0UE9SVDwvZmlsZW5hbWU+IHZhbHVlLAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHRoZSBzZXJ2ZXIncyBVUkwgYW5kIHBvcnQgbnVtYmVyLCBhbmQgeW91IGNhbgorICAgICAgICAgICAgICAgIHNwZWNpZnkgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZGlyZWN0bHkgaW4geW91ciByZWNpcGUgd2l0aGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgcmVsaWVzIG9uIDxmaWxlbmFtZT5QNENPTkZJRzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gc3BlY2lmeSB0aGUgc2VydmVyIFVSTCBhbmQgcG9ydCwgdXNlcm5hbWUsIGFuZCBwYXNzd29yZCwgYW5kCisgICAgICAgICAgICAgICAgZmV0Y2hlcyB0aGUgSGVhZCBSZXZpc2lvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgU1JDX1VSSSA9ICJwNDovL2V4YW1wbGUtZGVwb3QvbWFpbi9zb3VyY2UvLi4uIgorICAgIFNSQ1JFViA9ICIke0FVVE9SRVZ9IgorICAgIFBWID0gInA0LSR7U1JDUFZ9IgorICAgIFMgPSAiJHtXT1JLRElSfS9wNCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNwZWNpZmllcyB0aGUgc2VydmVyIFVSTCBhbmQgcG9ydCwKKyAgICAgICAgICAgICAgICB1c2VybmFtZSwgYW5kIHBhc3N3b3JkLCBhbmQgZmV0Y2hlcyBhIFJldmlzaW9uIGJhc2VkIG9uIGEgTGFiZWw6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIFA0UE9SVCA9ICJ0Y3A6cDRzZXJ2ZXIuZXhhbXBsZS5uZXQ6MTY2NiIKKyAgICBTUkNfVVJJID0gInA0Oi8vdXNlcjpwYXNzd2RAZXhhbXBsZS1kZXBvdC9tYWluL3NvdXJjZS8uLi4iCisgICAgU1JDUkVWID0gInJlbGVhc2UtMS4wIgorICAgIFBWID0gInA0LSR7U1JDUFZ9IgorICAgIFMgPSAiJHtXT1JLRElSfS9wNCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWx3YXlzIHNldCA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT4iJHtXT1JLRElSfS9wNCI8L2ZpbGVuYW1lPiBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKwogICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItZmV0Y2hlcnMnPgogICAgICAgICAgICAgPHRpdGxlPk90aGVyIEZldGNoZXJzPC90aXRsZT4KIApAQCAtNzI2LDkgKzc4OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBCYXphYXIgKDxmaWxlbmFtZT5ienI6Ly88L2ZpbGVuYW1lPikKICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBQZXJmb3JjZSAoPGZpbGVuYW1lPnA0Oi8vPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgICAgVHJlZXMgdXNpbmcgR2l0IEFubmV4ICg8ZmlsZW5hbWU+Z2l0YW5uZXg6Ly88L2ZpbGVuYW1lPikKICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCmluZGV4IGY2ZDgyYjQuLjhiN2VkYmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCkBAIC0zOTksNyArMzk5LDcgQEAKICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPkJCRklMRVM8L2xpbms+ICs9ICIke0xBWUVSRElSfS8qLmJiIgogCiAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfQ09MTEVDVElPTlMnPkJCRklMRV9DT0xMRUNUSU9OUzwvbGluaz4gKz0gIm15bGF5ZXIiCi0gICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUEFUVEVSTic+QkJGSUxFX1BBVFRFUk5fbXlsYXllcjwvbGluaz4gOj0gIl4ke0xBWUVSRElSfS8iCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUEFUVEVSTic+QkJGSUxFX1BBVFRFUk5fbXlsYXllcjwvbGluaz4gOj0gIl4ke0xBWUVSRElSX1JFfS8iCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIGNsaWNrIHRoZSBsaW5rcwogICAgICAgICAgICAgICAgIHRvIGdvIHRvIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgZ2xvc3NhcnkuPC9wYXJhPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbAppbmRleCA3YTM3ZWRkLi40ZDU4ZGM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbApAQCAtNjM0LDYgKzYzNCwyNSBAQAogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvc2VjdGlvbj4KIAorICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4ZWN1dGluZy1hLWxpc3Qtb2YtdGFzay1hbmQtcmVjaXBlLWNvbWJpbmF0aW9ucyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBhIExpc3Qgb2YgVGFzayBhbmQgUmVjaXBlIENvbWJpbmF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29tbWFuZCBsaW5lIHN1cHBvcnRzIHNwZWNpZnlpbmcgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIHRhc2tzIGZvciBpbmRpdmlkdWFsIHRhcmdldHMgd2hlbiB5b3Ugc3BlY2lmeSBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIHR3byB0YXJnZXRzIChvciByZWNpcGVzKQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlmaXJzdHJlY2lwZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzZWNvbmRyZWNpcGU8L2ZpbGVuYW1lPiBhbmQgeW91IG5lZWRlZAorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHRvIHJ1biA8ZmlsZW5hbWU+dGFza0E8L2ZpbGVuYW1lPiBmb3IgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBhbmQgPGZpbGVuYW1lPnRhc2tCPC9maWxlbmFtZT4gZm9yIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBteWZpcnN0cmVjaXBlOmRvX3Rhc2tBIG15c2Vjb25kcmVjaXBlOmRvX3Rhc2tCCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdnZW5lcmF0aW5nLWRlcGVuZGVuY3ktZ3JhcGhzJz4KICAgICAgICAgICAgICAgICA8dGl0bGU+R2VuZXJhdGluZyBEZXBlbmRlbmN5IEdyYXBoczwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwKaW5kZXggNjMyOWNkNi4uNzFiYjI1YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwKQEAgLTQ0LDI4ICs0NCw3MyBAQAogICAgICBWQVJJQUJMRSA9ICIgIgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2Ugc2luZ2xlIHF1b3RlcyBpbnN0ZWFkIG9mIGRvdWJsZSBxdW90ZXMKKyAgICAgICAgICAgICAgICB3aGVuIHNldHRpbmcgYSB2YXJpYWJsZSdzIHZhbHVlLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGFsbG93cyB5b3UgdG8gdXNlIHZhbHVlcyB0aGF0IGNvbnRhaW4gdGhlIGRvdWJsZQorICAgICAgICAgICAgICAgIHF1b3RlIGNoYXJhY3RlcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUklBQkxFID0gJ0kgaGF2ZSBhICIgaW4gbXkgdmFsdWUnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBVbmxpa2UgaW4gQm91cm5lIHNoZWxscywgc2luZ2xlIHF1b3RlcyB3b3JrIGlkZW50aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHRvIGRvdWJsZSBxdW90ZXMgaW4gYWxsIG90aGVyIHdheXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXkgZG8gbm90IHN1cHByZXNzIHZhcmlhYmxlIGV4cGFuc2lvbnMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKICAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWV4cGFuc2lvbic+CiAgICAgICAgICAgICA8dGl0bGU+VmFyaWFibGUgRXhwYW5zaW9uPC90aXRsZT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB2YXJpYWJsZXMgcmVmZXJlbmNpbmcgb25lIGFub3RoZXIncwotICAgICAgICAgICAgICAgIGNvbnRlbnRzIHVzaW5nIGEgc3ludGF4IHRoYXQgaXMgc2ltaWxhciB0byBzaGVsbCBzY3JpcHRpbmcuCi0gICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjb250YWluaW5nICJhdmFsIiBhbmQgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBldmFsdWF0aW5nIHRvCi0gICAgICAgICAgICAgICAgInByZWF2YWxwb3N0IiBiYXNlZCBvbiB0aGF0IGN1cnJlbnQgdmFsdWUgb2YKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFZhcmlhYmxlcyBjYW4gcmVmZXJlbmNlIHRoZSBjb250ZW50cyBvZiBvdGhlciB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICB1c2luZyBhIHN5bnRheCB0aGF0IGlzIHNpbWlsYXIgdG8gdmFyaWFibGUgZXhwYW5zaW9uIGluCisgICAgICAgICAgICAgICAgQm91cm5lIHNoZWxscy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGFzc2lnbm1lbnRzCisgICAgICAgICAgICAgICAgcmVzdWx0IGluIEEgY29udGFpbmluZyAiYXZhbCIgYW5kIEIgZXZhbHVhdGluZyB0byAicHJlYXZhbHBvc3QiLgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgQSA9ICJhdmFsIgogICAgICBCID0gInByZSR7QX1wb3N0IgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUgdGhhdCB3aGVuZXZlciA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGlzCi0gICAgICAgICAgICAgICAgcmVmZXJlbmNlZCwgaXRzIGV2YWx1YXRpb24gd2lsbCBkZXBlbmQgb24gdGhlIHN0YXRlIG9mCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBhdCB0aGF0IHRpbWUuCi0gICAgICAgICAgICAgICAgVGh1cywgbGF0ZXIgZXZhbHVhdGlvbnMgb2YgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlIGNvdWxkIHJlc3VsdCBpbiBkaWZmZXJlbnQgdmFsdWVzCi0gICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBVbmxpa2UgaW4gQm91cm5lIHNoZWxscywgdGhlIGN1cmx5IGJyYWNlcyBhcmUgbWFuZGF0b3J5OgorICAgICAgICAgICAgICAgICAgICBPbmx5IDxmaWxlbmFtZT4ke0ZPT308L2ZpbGVuYW1lPiBhbmQgbm90CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kRk9PPC9maWxlbmFtZT4gaXMgcmVjb2duaXplZCBhcyBhbiBleHBhbnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgIj0iIG9wZXJhdG9yIGRvZXMgbm90IGltbWVkaWF0ZWx5IGV4cGFuZCB2YXJpYWJsZQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgaW4gdGhlIHJpZ2h0LWhhbmQgc2lkZS4KKyAgICAgICAgICAgICAgICBJbnN0ZWFkLCBleHBhbnNpb24gaXMgZGVmZXJyZWQgdW50aWwgdGhlIHZhcmlhYmxlIGFzc2lnbmVkIHRvCisgICAgICAgICAgICAgICAgaXMgYWN0dWFsbHkgdXNlZC4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSByZWZlcmVuY2VkCisgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG91bGQgY2xhcmlmeSB0aGlzIGJlaGF2aW9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA9ICIke0J9IGJheiIKKyAgICAgQiA9ICIke0N9IGJhciIKKyAgICAgQyA9ICJmb28iCisgICAgICpBdCB0aGlzIHBvaW50LCAke0F9IGVxdWFscyAiZm9vIGJhciBiYXoiKgorICAgICBDID0gInF1eCIKKyAgICAgKkF0IHRoaXMgcG9pbnQsICR7QX0gZXF1YWxzICJxdXggYmFyIGJheiIqCisgICAgIEIgPSAibm9yZiIKKyAgICAgKkF0IHRoaXMgcG9pbnQsICR7QX0gZXF1YWxzICJub3JmIGJheiIqCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENvbnRyYXN0IHRoaXMgYmVoYXZpb3Igd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbW1lZGlhdGUtdmFyaWFibGUtZXhwYW5zaW9uJz5pbW1lZGlhdGUgdmFyaWFibGUgZXhwYW5zaW9uPC9saW5rPgorICAgICAgICAgICAgICAgIG9wZXJhdG9yIChpLmUuICI6PSIpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgdmFyaWFibGUgZXhwYW5zaW9uIHN5bnRheCBpcyB1c2VkIG9uIGEgdmFyaWFibGUgdGhhdAorICAgICAgICAgICAgICAgIGRvZXMgbm90IGV4aXN0LCB0aGUgc3RyaW5nIGlzIGtlcHQgYXMgaXMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBmb2xsb3dpbmcgYXNzaWdubWVudCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkFSPC9maWxlbmFtZT4gZXhwYW5kcyB0byB0aGUgbGl0ZXJhbCBzdHJpbmcKKyAgICAgICAgICAgICAgICAiJHtGT099IiBhcyBsb25nIGFzIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBkb2VzIG5vdCBleGlzdC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJBUiA9ICIke0ZPT30iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKQEAgLTIzMiw2ICsyNzcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgc3ludGF4LgogICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBlbmQgYW5kIHByZXBlbmQgdG8gc2hlbGwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMgYW5kIEJpdEJha2Utc3R5bGUgUHl0aG9uIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NoZWxsLWZ1bmN0aW9ucyc+U2hlbGwgRnVuY3Rpb25zPC9saW5rPiIgYW5kCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JpdGJha2Utc3R5bGUtcHl0aG9uLWZ1bmN0aW9ucyc+Qml0QmFrZS1TdHlsZSBQeXRob24gRnVuY3Rpb25zPC9saW5rPgorICAgICAgICAgICAgICAgIHNlY3Rpb25zIGZvciBleGFtcGxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCiAgICAgICAgIDxzZWN0aW9uIGlkPSdyZW1vdmluZy1vdmVycmlkZS1zdHlsZS1zeW50YXgnPgpAQCAtMjU5LDYgKzMxMyw2MCBAQAogICAgICAgICAgICAgICAgICI3ODkgMTIzNDU2IiBhbmQgPGZpbGVuYW1lPkZPTzI8L2ZpbGVuYW1lPiBiZWNvbWVzCiAgICAgICAgICAgICAgICAgImdoaSBhYmNkZWYiLgogICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBMaWtlICJfYXBwZW5kIiBhbmQgIl9wcmVwZW5kIiwgIl9yZW1vdmUiCisgICAgICAgICAgICAgICAgaXMgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgcGFyc2luZyBjb21wbGV0ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nb3ZlcnJpZGUtc3R5bGUtb3BlcmF0aW9uLWFkdmFudGFnZXMnPgorICAgICAgICAgICAgPHRpdGxlPk92ZXJyaWRlIFN0eWxlIE9wZXJhdGlvbiBBZHZhbnRhZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW4gYWR2YW50YWdlIG9mIHRoZSBvdmVycmlkZSBzdHlsZSBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgIl9hcHBlbmQiLCAiX3ByZXBlbmQiLCBhbmQgIl9yZW1vdmUiIGFzIGNvbXBhcmVkIHRvIHRoZQorICAgICAgICAgICAgICAgICIrPSIgYW5kICI9KyIgb3BlcmF0b3JzIGlzIHRoYXQgdGhlIG92ZXJyaWRlIHN0eWxlCisgICAgICAgICAgICAgICAgb3BlcmF0b3JzIHByb3ZpZGUgZ3VhcmFudGVlZCBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGNsYXNzIDxmaWxlbmFtZT5mb28uYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCBuZWVkcyB0byBhZGQgdGhlIHZhbHVlICJ2YWwiIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiwgYW5kIGEgcmVjaXBlIHRoYXQgdXNlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb28uYmJjbGFzczwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGZvbworCisgICAgIEZPTyA9ICJpbml0aWFsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+Zm9vLmJiY2xhc3M8L2ZpbGVuYW1lPiB1c2VzIHRoZSAiKz0iIG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFzIGZvbGxvd3MsIHRoZW4gdGhlIGZpbmFsIHZhbHVlIG9mIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHdpbGwgYmUgImluaXRpYWwiLCB3aGljaCBpcyBub3Qgd2hhdCBpcyBkZXNpcmVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PICs9ICJ2YWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgPGZpbGVuYW1lPmZvby5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB1c2VzIHRoZSAiX2FwcGVuZCIgb3BlcmF0b3IsIHRoZW4gdGhlIGZpbmFsIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IHdpbGwgYmUgImluaXRpYWwgdmFsIiwgYXMgaW50ZW5kZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGT09fYXBwZW5kID0gIiB2YWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBuZXZlciBuZWNlc3NhcnkgdG8gdXNlICIrPSIgdG9nZXRoZXIgd2l0aCAiX2FwcGVuZCIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgYXNzaWdubWVudHMgYXBwZW5kcyAiYmFyYmF6IiB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PX2FwcGVuZCA9ICJiYXIiCisgICAgIEZPT19hcHBlbmQgPSAiYmF6IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvbmx5IGVmZmVjdCBvZiBjaGFuZ2luZyB0aGUgc2Vjb25kIGFzc2lnbm1lbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGV4YW1wbGUgdG8gdXNlICIrPSIgd291bGQgYmUgdG8gYWRkIGEgc3BhY2UgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICJiYXoiIGluIHRoZSBhcHBlbmRlZCB2YWx1ZSAoZHVlIHRvIGhvdyB0aGUgIis9IiBvcGVyYXRvcgorICAgICAgICAgICAgICAgICAgICB3b3JrcykuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEFub3RoZXIgYWR2YW50YWdlIG9mIHRoZSBvdmVycmlkZSBzdHlsZSBvcGVyYXRpb25zIGlzIHRoYXQKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGNvbWJpbmUgdGhlbSB3aXRoIG90aGVyIG92ZXJyaWRlcyBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbmRpdGlvbmFsLXN5bnRheC1vdmVycmlkZXMnPkNvbmRpdGlvbmFsIFN5bnRheCAoT3ZlcnJpZGVzKTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCiAgICAgICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1mbGFnLXN5bnRheCc+CkBAIC0yNzcsOCArMzg1LDcgQEAKICAgICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSwgYXBwZW5kLCBhbmQgcHJlcGVuZCB2YWx1ZXMgdG8gdmFyaWFibGUgZmxhZ3MuCiAgICAgICAgICAgICAgICAgQWxsIHRoZSBzdGFuZGFyZCBzeW50YXggb3BlcmF0aW9ucyBwcmV2aW91c2x5IG1lbnRpb25lZCB3b3JrCiAgICAgICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGZsYWdzIGV4Y2VwdCBmb3Igb3ZlcnJpZGUgc3R5bGUgc3ludGF4Ci0gICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcmVtb3ZlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIChpLmUuICJfcHJlcGVuZCIsICJfYXBwZW5kIiwgYW5kICJfcmVtb3ZlIikuCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgpAQCAtMjg5LDkgKzM5Niw5IEBACiAgICAgIEZPT1thXSArPSAiNDU2IgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGhhcyB0d28gZmxhZ3M6Ci0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+W2FdPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5bYl08L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICBUaGUgZmxhZ3MgYXJlIGltbWVkaWF0ZWx5IHNldCB0byAiYWJjIiBhbmQgIjEyMyIsIHJlc3BlY3RpdmVseS4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBmbGFnIGJlY29tZXMgImFiYyA0NTYiLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+W2FdPC9maWxlbmFtZT4gZmxhZyBiZWNvbWVzICJhYmMgNDU2Ii4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+CkBAIC0zMzAsOSArNDM3LDQ1IEBACiAgICAgIFBOID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfSIKICAgICAgUFYgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzFdIG9yICcxLjAnfSIKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElubGluZSBQeXRob24gZXhwcmVzc2lvbnMgd29yayBqdXN0IGxpa2UgdmFyaWFibGUgZXhwYW5zaW9ucworICAgICAgICAgICAgICAgICAgICBpbnNvZmFyIGFzIHRoZSAiPSIgYW5kICI6PSIgb3BlcmF0b3JzIGFyZSBjb25jZXJuZWQuCisgICAgICAgICAgICAgICAgICAgIEdpdmVuIHRoZSBmb2xsb3dpbmcgYXNzaWdubWVudCwgPGZpbGVuYW1lPmZvbygpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgY2FsbGVkIGVhY2ggdGltZSA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4gaXMgZXhwYW5kZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PID0gIiR7QGZvbygpfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBDb250cmFzdCB0aGlzIHdpdGggdGhlIGZvbGxvd2luZyBpbW1lZGlhdGUgYXNzaWdubWVudCwgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvbygpPC9maWxlbmFtZT4gaXMgb25seSBjYWxsZWQgb25jZSwgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgaXMgcGFyc2VkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPTyA6PSAiJHtAZm9vKCl9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEZvciBhIGRpZmZlcmVudCB3YXkgdG8gc2V0IHZhcmlhYmxlcyB3aXRoIFB5dGhvbiBjb2RlIGR1cmluZworICAgICAgICAgICAgICAgIHBhcnNpbmcsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYW5vbnltb3VzLXB5dGhvbi1mdW5jdGlvbnMnPkFub255bW91cyBQeXRob24gRnVuY3Rpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Vuc2V0dGluZy12YXJpYWJsZXMnPgorICAgICAgICAgICAgPHRpdGxlPlVuc2V0aW5nIHZhcmlhYmxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIGEgdmFyaWFibGUgb3IgYSB2YXJpYWJsZSBmbGFnIAorICAgICAgICAgICAgICAgIGZyb20gQml0QmFrZSdzIGludGVybmFsIGRhdGEgZGljdGlvbmFyeSBieSB1c2luZyB0aGUgInVuc2V0IiBrZXl3b3JkLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgIHVuc2V0IERBVEUKKyAgICAgICAgdW5zZXQgZG9fZmV0Y2hbbm9leGVjXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGVzZSB0d28gc3RhdGVtZW50cyByZW1vdmUgdGhlIDxmaWxlbmFtZT5EQVRFPC9maWxlbmFtZT4gYW5kIHRoZSAKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZmV0Y2hbbm9leGVjXTwvZmlsZW5hbWU+IGZsYWcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPC9zZWN0aW9uPgorCiAgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctcGF0aG5hbWVzJz4KICAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgUGF0aG5hbWVzPC90aXRsZT4KIApAQCAtMzU3LDYgKzUwMCw1MyBAQAogICAgICAgICA8L3NlY3Rpb24+CiAgICAgPC9zZWN0aW9uPgogCisgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydGluZy12YXJpYWJsZXMtdG8tdGhlLWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBWYXJpYWJsZXMgdG8gdGhlIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZXhwb3J0IHZhcmlhYmxlcyB0byB0aGUgZW52aXJvbm1lbnQgb2YgcnVubmluZworICAgICAgICAgICAgdGFza3MgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5leHBvcnQ8L2ZpbGVuYW1lPiBrZXl3b3JkLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4gdGFzayBwcmludHMgInZhbHVlIGZyb20KKyAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCIgd2hlbiBydW46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBFTlZfVkFSSUFCTEUKKyAgICAgRU5WX1ZBUklBQkxFID0gInZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50IgorCisgICAgIGRvX2ZvbygpIHsKKyAgICAgICAgIGJicGxhaW4gIiRFTlZfVkFSSUFCTEUiCisgICAgIH0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBub3QgZXhwYW5kIDxmaWxlbmFtZT4kRU5WX1ZBUklBQkxFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UgYmVjYXVzZSBpdCBsYWNrcyB0aGUgb2JsaWdhdG9yeQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT57fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFJhdGhlciwgPGZpbGVuYW1lPiRFTlZfVkFSSUFCTEU8L2ZpbGVuYW1lPiBpcyBleHBhbmRlZAorICAgICAgICAgICAgICAgIGJ5IHRoZSBzaGVsbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIEl0IGRvZXMgbm90IG1hdHRlciB3aGV0aGVyCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZXhwb3J0IEVOVl9WQVJJQUJMRTwvZmlsZW5hbWU+IGFwcGVhcnMgYmVmb3JlIG9yCisgICAgICAgICAgICBhZnRlciBhc3NpZ25tZW50cyB0byA8ZmlsZW5hbWU+RU5WX1ZBUklBQkxFPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY29tYmluZSA8ZmlsZW5hbWU+ZXhwb3J0PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHdpdGggc2V0dGluZyBhIHZhbHVlIGZvciB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBFTlZfVkFSSUFCTEUgPSAiPHJlcGxhY2VhYmxlPnZhcmlhYmxlLXZhbHVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiB0aGUgb3V0cHV0IG9mIDxmaWxlbmFtZT5iaXRiYWtlIC1lPC9maWxlbmFtZT4sIHZhcmlhYmxlcworICAgICAgICAgICAgdGhhdCBhcmUgZXhwb3J0ZWQgdG8gdGhlIGVudmlyb25tZW50IGFyZSBwcmVjZWRlZCBieSAiZXhwb3J0Ii4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW1vbmcgdGhlIHZhcmlhYmxlcyBjb21tb25seSBleHBvcnRlZCB0byB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGFyZSA8ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgd2hpY2ggYXJlIHBpY2tlZCB1cCBieSBtYW55IGJ1aWxkIHN5c3RlbXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKICAgICA8c2VjdGlvbiBpZD0nY29uZGl0aW9uYWwtc3ludGF4LW92ZXJyaWRlcyc+CiAgICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L3RpdGxlPgogCkBAIC00NTUsNiArNjQ1LDM0IEBACiAgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXR0aW5nIGEgVmFyaWFibGUgZm9yIGEgU2luZ2xlIFRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgc2V0dGluZyBhIHZhcmlhYmxlIGp1c3QgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gb2YgYSBzaW5nbGUgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PX3Rhc2stY29uZmlndXJlID0gInZhbCAxIgorICAgICBGT09fdGFzay1jb21waWxlID0gInZhbCAyIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIHRoZSB2YWx1ZSAidmFsIDEiIHdoaWxlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IHRhc2sgaXMgZXhlY3V0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHZhbHVlICJ2YWwgMiIgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHRhc2sgaXMgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkludGVybmFsbHksIHRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgcHJlcGVuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRhc2sgKGUuZy4gInRhc2stY29tcGlsZToiKSB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbG9jYWwgZGF0YXN0b3JlIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBhbHNvIHVzZSB0aGlzIHN5bnRheCB3aXRoIG90aGVyIGNvbWJpbmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gIjxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IikgYXMgc2hvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfT0VNQUtFX3ByZXBlbmRfdGFzay1jb21waWxlID0gIiR7UEFSQUxMRUxfTUFLRX0gIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KQEAgLTU0NSwxNSArNzYzLDE1IEBACiAgICAgIE9WRVJSSURFUyA9ICJmb28iCiAgICAgIEEgPSAiWSIKICAgICAgQV9mb29fYXBwZW5kID0gIloiCi0gICAgIEFfZm9vX2FwcGVuZCArPSAiWCIKKyAgICAgQV9mb29fYXBwZW5kID0gIlgiCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIGJlZm9yZSBhbnkgb3ZlcnJpZGVzIGFyZSByZXNvbHZlZCwKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHNldCB0byAiWSIgdXNpbmcgYW4gaW1tZWRpYXRlIGFzc2lnbm1lbnQuCiAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhpcyBpbW1lZGlhdGUgYXNzaWdubWVudCwgPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4gaXMgc2V0CiAgICAgICAgICAgICAgICAgdG8gIloiLCBhbmQgdGhlbiBmdXJ0aGVyIGFwcGVuZGVkIHdpdGgKLSAgICAgICAgICAgICAgICAiWCIgbGVhdmluZyB0aGUgdmFyaWFibGUgc2V0IHRvICJaIFgiLgorICAgICAgICAgICAgICAgICJYIiBsZWF2aW5nIHRoZSB2YXJpYWJsZSBzZXQgdG8gIlpYIi4KICAgICAgICAgICAgICAgICBGaW5hbGx5LCBhcHBseWluZyB0aGUgb3ZlcnJpZGUgZm9yICJmb28iIHJlc3VsdHMgaW4gdGhlIGNvbmRpdGlvbmFsCi0gICAgICAgICAgICAgICAgdmFyaWFibGUgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBiZWNvbWluZyAiWiBYIiAoaS5lLgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21pbmcgIlpYIiAoaS5lLgogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgcmVwbGFjZWQgd2l0aCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPikuCiAgICAgICAgICAgICA8L3BhcmE+CiAKQEAgLTU3Miw3ICs3OTAsNyBAQAogICAgICAgICAgICAgICAgIEluaXRpYWxseSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIjEgNDUiIGJlY2F1c2UKICAgICAgICAgICAgICAgICBvZiB0aGUgdGhyZWUgc3RhdGVtZW50cyB0aGF0IHVzZSBpbW1lZGlhdGUgb3BlcmF0b3JzLgogICAgICAgICAgICAgICAgIEFmdGVyIHRoZXNlIGFzc2lnbm1lbnRzIGFyZSBtYWRlLCBCaXRCYWtlIGFwcGxpZXMgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICJfYXBwZW5kIiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgIFRob3NlIG9wZXJhdGlvbnMgcmVzdWx0IGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21pbmcgIjEgNDUyMyIuCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KQEAgLTg0Miw3ICsxMDYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgYXMgZnVuY3Rpb25zLCB0YXNrcywgb3IgYm90aC4KICAgICAgICAgICAgICAgICAgICAgVGhleSBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgb3RoZXIgc2hlbGwgZnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJpdEJha2UgU3R5bGUgUHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qml0QmFrZS1TdHlsZSBQeXRob24gRnVuY3Rpb25zOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkgQml0QmFrZSBvciBvdGhlcgogICAgICAgICAgICAgICAgICAgICBQeXRob24gZnVuY3Rpb25zIHVzaW5nIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KQEAgLTg4MSwxMCArMTA5OSw2MCBAQAogICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmRhc2g8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCB1c2UgQmFzaC1zcGVjaWZpYyBzY3JpcHQgKGJhc2hpc21zKS4KICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT3ZlcnJpZGVzIGFuZCBvdmVycmlkZS1zdHlsZSBvcGVyYXRvcnMgbGlrZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gY2FuIGFsc28gYmUgYXBwbGllZCB0bworICAgICAgICAgICAgICAgIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICBNb3N0IGNvbW1vbmx5LCB0aGlzIGFwcGxpY2F0aW9uIHdvdWxkIGJlIHVzZWQgaW4gYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRvIG1vZGlmeSBmdW5jdGlvbnMgaW4KKyAgICAgICAgICAgICAgICB0aGUgbWFpbiByZWNpcGUuCisgICAgICAgICAgICAgICAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBtb2RpZnkgZnVuY3Rpb25zIGluaGVyaXRlZCBmcm9tCisgICAgICAgICAgICAgICAgY2xhc3Nlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2ZvbygpIHsKKyAgICAgICAgIGJicGxhaW4gZmlyc3QKKyAgICAgICAgIGZuCisgICAgIH0KKworICAgICBmbl9wcmVwZW5kKCkgeworICAgICAgICAgYmJwbGFpbiBzZWNvbmQKKyAgICAgfQorCisgICAgIGZuKCkgeworICAgICAgICAgYmJwbGFpbiB0aGlyZAorICAgICB9CisKKyAgICAgZG9fZm9vX2FwcGVuZCgpIHsKKyAgICAgICAgIGJicGxhaW4gZm91cnRoCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwcmludHMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlY2lwZW5hbWUgZG9fZm9vOiBmaXJzdAorICAgICByZWNpcGVuYW1lIGRvX2Zvbzogc2Vjb25kCisgICAgIHJlY2lwZW5hbWUgZG9fZm9vOiB0aGlyZAorICAgICByZWNpcGVuYW1lIGRvX2ZvbzogZm91cnRoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMgYW5kIG92ZXJyaWRlLXN0eWxlIG9wZXJhdG9ycyBjYW4KKyAgICAgICAgICAgICAgICAgICAgYmUgYXBwbGllZCB0byBhbnkgc2hlbGwgZnVuY3Rpb24sIG5vdCBqdXN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Rhc2tzJz50YXNrczwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZTwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gdmlldyB0aGUgZmluYWwgYXNzZW1ibGVkIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIG92ZXJyaWRlcyBoYXZlIGJlZW4gYXBwbGllZC4KKyAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCiAgICAgICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLXN0eWxlLXB5dGhvbi1mdW5jdGlvbnMnPgotICAgICAgICAgICAgPHRpdGxlPkJpdEJha2UgU3R5bGUgUHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+CisgICAgICAgICAgICA8dGl0bGU+Qml0QmFrZS1TdHlsZSBQeXRob24gRnVuY3Rpb25zPC90aXRsZT4KIAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkKQEAgLTkwNSwxOSArMTE3Myw1MSBAQAogICAgICAgICAgICAgICAgIEFsc28gaW4gdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zLCB0aGUgZGF0YXN0b3JlICgiZCIpCiAgICAgICAgICAgICAgICAgaXMgYSBnbG9iYWwgdmFyaWFibGUgYW5kIGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5CiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgotICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlIGV4cHJlc3Npb25zIChlLmcuIDxmaWxlbmFtZT4ke1h9PC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGFyZSBubyBsb25nZXIgZXhwYW5kZWQgd2l0aGluIFB5dGhvbiBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgaXMgaW50ZW50aW9uYWwgaW4gb3JkZXIgdG8gYWxsb3cgeW91CisgICAgICAgICAgICAgICAgICAgIHRvIGZyZWVseSBzZXQgdmFyaWFibGUgdmFsdWVzIHRvIGV4cGFuZGFibGUgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgdGhlbSBleHBhbmRlZCBwcmVtYXR1cmVseS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHdpc2ggdG8gZXhwYW5kIGEgdmFyaWFibGUgd2l0aGluIGEgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCB1c2UgPGZpbGVuYW1lPmQuZ2V0VmFyKCJYIiwgVHJ1ZSk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgT3IsIGZvciBtb3JlIGNvbXBsaWNhdGVkIGV4cHJlc3Npb25zLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmQuZXhwYW5kKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgVmFyaWFibGUgZXhwcmVzc2lvbnMgKGUuZy4gPGZpbGVuYW1lPiR7WH08L2ZpbGVuYW1lPikgYXJlIG5vCi0gICAgICAgICAgICAgICAgbG9uZ2VyIGV4cGFuZGVkIHdpdGhpbiBQeXRob24gZnVuY3Rpb25zLgotICAgICAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgaXMgaW50ZW50aW9uYWwgaW4gb3JkZXIgdG8gYWxsb3cgeW91IHRvIGZyZWVseQotICAgICAgICAgICAgICAgIHNldCB2YXJpYWJsZSB2YWx1ZXMgdG8gZXhwYW5kYWJsZSBleHByZXNzaW9ucyB3aXRob3V0IGhhdmluZwotICAgICAgICAgICAgICAgIHRoZW0gZXhwYW5kZWQgcHJlbWF0dXJlbHkuCi0gICAgICAgICAgICAgICAgSWYgeW91IGRvIHdpc2ggdG8gZXhwYW5kIGEgdmFyaWFibGUgd2l0aGluIGEgUHl0aG9uIGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgIHVzZSA8ZmlsZW5hbWU+ZC5nZXRWYXIoIlgiLCBUcnVlKTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIE9yLCBmb3IgbW9yZSBjb21wbGljYXRlZCBleHByZXNzaW9ucywgdXNlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmQuZXhwYW5kKCk8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2ltaWxhciB0byBzaGVsbCBmdW5jdGlvbnMsIHlvdSBjYW4gYWxzbyBhcHBseSBvdmVycmlkZXMKKyAgICAgICAgICAgICAgICBhbmQgb3ZlcnJpZGUtc3R5bGUgb3BlcmF0b3JzIHRvIEJpdEJha2Utc3R5bGUgUHl0aG9uCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIGRvX2Zvb19wcmVwZW5kKCkgeworICAgICAgICAgYmIucGxhaW4oImZpcnN0IikKKyAgICAgfQorCisgICAgIHB5dGhvbiBkb19mb28oKSB7CisgICAgICAgICBiYi5wbGFpbigic2Vjb25kIikKKyAgICAgfQorCisgICAgIHB5dGhvbiBkb19mb29fYXBwZW5kKCkgeworICAgICAgICAgYmIucGxhaW4oInRoaXJkIikKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5kb19mb288L2ZpbGVuYW1lPiBwcmludHMKKyAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVjaXBlbmFtZSBkb19mb286IGZpcnN0CisgICAgIHJlY2lwZW5hbWUgZG9fZm9vOiBzZWNvbmQKKyAgICAgcmVjaXBlbmFtZSBkb19mb286IHRoaXJkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZTwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gdmlldyB0aGUgZmluYWwgYXNzZW1ibGVkIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIG92ZXJyaWRlcyBoYXZlIGJlZW4gYXBwbGllZC4KKyAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCiAgICAgICAgIDxzZWN0aW9uIGlkPSdweXRob24tZnVuY3Rpb25zJz4KQEAgLTk2MSwzNiArMTI2MSwxNzggQEAKICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCisgICAgICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLXN0eWxlLXB5dGhvbi1mdW5jdGlvbnMtdmVyc3VzLXB5dGhvbi1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPkJpdGJha2UtU3R5bGUgUHl0aG9uIEZ1bmN0aW9ucyBWZXJzdXMgUHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBpbXBvcnRhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbgorICAgICAgICAgICAgICAgIEJpdEJha2Utc3R5bGUgUHl0aG9uIGZ1bmN0aW9ucyBhbmQgcmVndWxhciBQeXRob24KKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoICJkZWYiOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgQml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndGFza3MnPnRhc2tzPC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMgYW5kIG92ZXJyaWRlLXN0eWxlIG9wZXJhdG9ycyBjYW4gb25seQorICAgICAgICAgICAgICAgICAgICAgICAgYmUgYXBwbGllZCB0byBCaXRCYWtlLXN0eWxlIFB5dGhvbiBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgT25seSByZWd1bGFyIFB5dGhvbiBmdW5jdGlvbnMgY2FuIHRha2UgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmV0dXJuIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXJpYWJsZS1mbGFncyc+VmFyaWFibGUgZmxhZ3M8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5bZGlyc108L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5bY2xlYW5kaXJzXTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5bbG9ja2ZpbGVzXTwvZmlsZW5hbWU+IGNhbiBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICBvbiBCaXRCYWtlLXN0eWxlIFB5dGhvbiBmdW5jdGlvbnMsIGJ1dCBub3Qgb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXIgUHl0aG9uIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLXN0eWxlIFB5dGhvbiBmdW5jdGlvbnMgZ2VuZXJhdGUgYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9ydW4uPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZnVuY3Rpb24tbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi48L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5waWQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IHRoYXQgaXMgZXhlY3V0ZWQgdG8gcnVuIHRoZSBmdW5jdGlvbiwgYW5kIGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGEgbG9nIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1R9L2xvZy48L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5mdW5jdGlvbi1uYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBpZDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGV5IGFyZSBleGVjdXRlZCBhcyB0YXNrcy48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVndWxhciBQeXRob24gZnVuY3Rpb25zIGV4ZWN1dGUgImlubGluZSIgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYW55IGZpbGVzIGluIDxmaWxlbmFtZT4ke1R9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVndWxhciBQeXRob24gZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCB0aGUgdXN1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBzeW50YXguCisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLXN0eWxlIFB5dGhvbiBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdGFza3MgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY2FsbGVkIGRpcmVjdGx5IGJ5IEJpdEJha2UsIGJ1dCBjYW4gYWxzbyBiZSBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbGx5IGZyb20gUHl0aG9uIGNvZGUgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPiBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJteV9iaXRiYWtlX3N0eWxlX2Z1bmN0aW9uIiwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+IGNhbiBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCB0byBydW4gc2hlbGwgZnVuY3Rpb25zIGZyb20gUHl0aG9uIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gcnVuIGEgc2hlbGwgZnVuY3Rpb24gYmVmb3JlIGEgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2l0aGluIHRoZSBzYW1lIHRhc2ssIHRoZW4geW91IGNhbiB1c2UgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCBoZWxwZXIgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIGJ5IHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2hlbGwgZnVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+IGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVucyB0aGUgUHl0aG9uIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBkZXRlY3QgZXJyb3JzIGZyb20gZnVuY3Rpb25zIGV4ZWN1dGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+LCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBjYXRjaCB0aGUgPGZpbGVuYW1lPmJiLmJ1aWxkLkZ1bmNGYWlsZWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIGluIG1ldGFkYXRhIChyZWNpcGVzIGFuZCBjbGFzc2VzKSBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgdGhlbXNlbHZlcyByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5GdW5jRmFpbGVkPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCA8ZmlsZW5hbWU+YmIuYnVpbGQuRnVuY0ZhaWxlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIGdlbmVyYWwgaW5kaWNhdG9yIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGZ1bmN0aW9uIGZhaWxlZCBieSByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYW4gZXhjZXB0aW9uIHJhaXNlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5mYXRhbCgpPC9maWxlbmFtZT4gd2lsbCBiZSBjYXVnaHQgaW5zaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4sIGFuZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLkZ1bmNGYWlsZWQ8L2ZpbGVuYW1lPiB3aWxsIGJlIHJhaXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHJlc3BvbnNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1ZSB0byB0aGVpciBzaW1wbGljaXR5LCB5b3Ugc2hvdWxkIHByZWZlciByZWd1bGFyIFB5dGhvbiBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICBvdmVyIEJpdEJha2Utc3R5bGUgUHl0aG9uIGZ1bmN0aW9ucyB1bmxlc3MgeW91IG5lZWQgYSBmZWF0dXJlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgdG8gQml0QmFrZS1zdHlsZSBQeXRob24gZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIFJlZ3VsYXIgUHl0aG9uIGZ1bmN0aW9ucyBpbiBtZXRhZGF0YSBhcmUgYSBtb3JlIHJlY2VudCBpbnZlbnRpb24gdGhhbgorICAgICAgICAgICAgICAgIEJpdEJha2Utc3R5bGUgUHl0aG9uIGZ1bmN0aW9ucywgYW5kIG9sZGVyIGNvZGUgdGVuZHMgdG8gdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4gbW9yZSBvZnRlbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCiAgICAgICAgIDxzZWN0aW9uIGlkPSdhbm9ueW1vdXMtcHl0aG9uLWZ1bmN0aW9ucyc+CiAgICAgICAgICAgICA8dGl0bGU+QW5vbnltb3VzIFB5dGhvbiBGdW5jdGlvbnM8L3RpdGxlPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIHJ1biBzb21lIGNvZGUgZHVyaW5nCi0gICAgICAgICAgICAgICAgcGFyc2luZyB0byBzZXQgdmFyaWFibGVzIG9yIHRvIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucwotICAgICAgICAgICAgICAgIHByb2dyYW1tYXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgVG8gZG8gdGhpcywgeW91IGNhbiBkZWZpbmUgYW4gYW5vbnltb3VzIFB5dGhvbiBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb25kaXRpb25hbGx5IHNldHMgYQotICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBhbm90aGVyIHZhcmlhYmxlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKLSAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FVkFSJywgVHJ1ZSkgPT0gJ3ZhbHVlJzoKLSAgICAgICAgICAgICBkLnNldFZhcignQU5PVEhFUlZBUicsICd2YWx1ZTInKQotICAgICB9Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoZSAiX19hbm9ueW1vdXMiIGZ1bmN0aW9uIG5hbWUgaXMgb3B0aW9uYWwsIHNvIHRoZQotICAgICAgICAgICAgICAgIGZvbGxvd2luZyBleGFtcGxlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZToKKyAgICAgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIHNldCB2YXJpYWJsZXMgb3IgcGVyZm9ybQorICAgICAgICAgICAgICAgIG90aGVyIG9wZXJhdGlvbnMgcHJvZ3JhbW1hdGljYWxseSBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgY2FuIGRlZmluZSBzcGVjaWFsIFB5dGhvbiBmdW5jdGlvbnMsCisgICAgICAgICAgICAgICAgY2FsbGVkIGFub255bW91cyBQeXRob24gZnVuY3Rpb25zLCB0aGF0IHJ1biBhdCB0aGUKKyAgICAgICAgICAgICAgICBlbmQgb2YgcGFyc2luZy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb25kaXRpb25hbGx5IHNldHMgYSB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAgYW5vdGhlciB2YXJpYWJsZToKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIHB5dGhvbiAoKSB7CiAgICAgICAgICBpZiBkLmdldFZhcignU09NRVZBUicsIFRydWUpID09ICd2YWx1ZSc6CiAgICAgICAgICAgICAgZC5zZXRWYXIoJ0FOT1RIRVJWQVInLCAndmFsdWUyJykKICAgICAgfQogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBCZWNhdXNlIHVubGlrZSBvdGhlciBQeXRob24gZnVuY3Rpb25zIGFub255bW91cwotICAgICAgICAgICAgICAgIFB5dGhvbiBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGR1cmluZyBwYXJzaW5nLCB0aGUKLSAgICAgICAgICAgICAgICAiZCIgdmFyaWFibGUgd2l0aGluIGFuIGFub255bW91cyBQeXRob24gZnVuY3Rpb24gcmVwcmVzZW50cwotICAgICAgICAgICAgICAgIHRoZSBkYXRhc3RvcmUgZm9yIHRoZSBlbnRpcmUgcmVjaXBlLgotICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGNhbiBzZXQgdmFyaWFibGUgdmFsdWVzIGhlcmUgYW5kCi0gICAgICAgICAgICAgICAgdGhvc2UgdmFsdWVzIGNhbiBiZSBwaWNrZWQgdXAgYnkgb3RoZXIgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEFuIGVxdWl2YWxlbnQgd2F5IHRvIG1hcmsgYSBmdW5jdGlvbiBhcyBhbiBhbm9ueW1vdXMKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBpcyB0byBnaXZlIGl0IHRoZSBuYW1lICJfX2Fub255bW91cyIsIHJhdGhlcgorICAgICAgICAgICAgICAgIHRoYW4gbm8gbmFtZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vbnltb3VzIFB5dGhvbiBmdW5jdGlvbnMgYWx3YXlzIHJ1biBhdCB0aGUgZW5kCisgICAgICAgICAgICAgICAgb2YgcGFyc2luZywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkLgorICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIGNvbnRhaW5zIG1hbnkgYW5vbnltb3VzIGZ1bmN0aW9ucywgdGhleQorICAgICAgICAgICAgICAgIHJ1biBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzbmlwcGV0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uICgpIHsKKyAgICAgICAgIGQuc2V0VmFyKCdGT08nLCAnZm9vIDInKQorICAgICB9CisKKyAgICAgRk9PID0gImZvbyAxIgorCisgICAgIHB5dGhvbiAoKSB7CisgICAgICAgICBkLmFwcGVuZFZhcignQkFSJywgJyBiYXIgMicpCisgICAgIH0KKworICAgICBCQVIgPSAiYmFyIDEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGlzIGNvbmNlcHR1YWxseSBlcXVpdmFsZW50IHRvIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzbmlwcGV0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PID0gImZvbyAxIgorICAgICBCQVIgPSAiYmFyIDEiCisgICAgIEZPTyA9ICJmb28gMiIKKyAgICAgQkFSICs9ICJiYXIgMiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGVuZHMgdXAgd2l0aCB0aGUgdmFsdWUgImZvbyAyIiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkJBUjwvZmlsZW5hbWU+IHdpdGggdGhlIHZhbHVlICJiYXIgMSBiYXIgMiIuCisgICAgICAgICAgICAgICAgSnVzdCBhcyBpbiB0aGUgc2Vjb25kIHNuaXBwZXQsIHRoZSB2YWx1ZXMgc2V0IGZvciB0aGUKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgd2l0aGluIHRoZSBhbm9ueW1vdXMgZnVuY3Rpb25zIGJlY29tZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICB0byB0YXNrcywgd2hpY2ggYWx3YXlzIHJ1biBhZnRlciBwYXJzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPdmVycmlkZXMgYW5kIG92ZXJyaWRlLXN0eWxlIG9wZXJhdG9ycyBzdWNoIGFzCisgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4iIGFyZSBhcHBsaWVkIGJlZm9yZQorICAgICAgICAgICAgICAgIGFub255bW91cyBmdW5jdGlvbnMgcnVuLgorICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGVuZHMKKyAgICAgICAgICAgICAgICB1cCB3aXRoIHRoZSB2YWx1ZSAiZm9vIGZyb20gYW5vbnltb3VzIjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPTyA9ICJmb28iCisgICAgIEZPT19hcHBlbmQgPSAiIGZyb20gb3V0c2lkZSIKKworICAgICBweXRob24gKCkgeworICAgICAgICAgZC5zZXRWYXIoIkZPTyIsICJmb28gZnJvbSBhbm9ueW1vdXMiKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBtZXRob2RzIHlvdSBjYW4gdXNlIHdpdGggYW5vbnltb3VzIFB5dGhvbiBmdW5jdGlvbnMsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdmdW5jdGlvbnMteW91LWNhbi1jYWxsLWZyb20td2l0aGluLXB5dGhvbic+RnVuY3Rpb25zIFlvdSBDYW4gQ2FsbCBGcm9tIFdpdGhpbiBQeXRob248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGEgZGlmZmVyZW50IG1ldGhvZCB0byBydW4gUHl0aG9uIGNvZGUgZHVyaW5nIHBhcnNpbmcsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbmxpbmUtcHl0aG9uLXZhcmlhYmxlLWV4cGFuc2lvbic+SW5saW5lIFB5dGhvbiBWYXJpYWJsZSBFeHBhbnNpb248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KIApAQCAtMTA4OSwzNyArMTUzMSwyOSBAQAogICAgICAgICA8dGl0bGU+VGFza3M8L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGFza3MgYXJlIEJpdEJha2UgZXhlY3V0aW9uIHVuaXRzIHRoYXQgb3JpZ2luYXRlIGFzCi0gICAgICAgICAgICBmdW5jdGlvbnMgYW5kIG1ha2UgdXAgdGhlIHN0ZXBzIHRoYXQgQml0QmFrZSBuZWVkcyB0byBydW4KLSAgICAgICAgICAgIGZvciBnaXZlbiByZWNpcGUuCi0gICAgICAgICAgICBUYXNrcyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KLSAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4pIGFuZCBjbGFzcwotICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBmaWxlcy4KLSAgICAgICAgICAgIEJ5IGNvbnZlbnRpb24sIHRhc2sgbmFtZXMgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICJkb18iLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSB0YXNrIHRoYXQgcHJpbnRzIG91dCB0aGUgZGF0ZToKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcHl0aG9uIGRvX3ByaW50ZGF0ZSAoKSB7Ci0gICAgICAgICBpbXBvcnQgdGltZQotICAgICAgICAgcHJpbnQgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdGltZS5nbXRpbWUoKSkKLSAgICAgfQotICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRhc2tzIGFyZSBCaXRCYWtlIGV4ZWN1dGlvbiB1bml0cyB0aGF0IG1ha2UgdXAgdGhlCisgICAgICAgICAgICBzdGVwcyB0aGF0IEJpdEJha2UgY2FuIHJ1biBmb3IgYSBnaXZlbiByZWNpcGUuCisgICAgICAgICAgICBUYXNrcyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gcmVjaXBlcyBhbmQgY2xhc3NlcworICAgICAgICAgICAgKGkuZS4gaW4gPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzIGFuZCBmaWxlcworICAgICAgICAgICAgaW5jbHVkZWQgb3IgaW5oZXJpdGVkIGZyb20gPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcykuCisgICAgICAgICAgICBCeSBjb252ZW50aW9uLCB0YXNrcyBoYXZlIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCAiZG9fIi4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxzZWN0aW9uIGlkPSdwcm9tb3RpbmctYS1mdW5jdGlvbi10by1hLXRhc2snPgogICAgICAgICAgICAgPHRpdGxlPlByb21vdGluZyBhIEZ1bmN0aW9uIHRvIGEgVGFzazwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFueSBmdW5jdGlvbiBjYW4gYmUgcHJvbW90ZWQgdG8gYSB0YXNrIGJ5IGFwcGx5aW5nIHRoZQorICAgICAgICAgICAgICAgIFRhc2tzIGFyZSBlaXRoZXIKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzaGVsbC1mdW5jdGlvbnMnPnNoZWxsIGZ1bmN0aW9uczwvbGluaz4gb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdiaXRiYWtlLXN0eWxlLXB5dGhvbi1mdW5jdGlvbnMnPkJpdEJha2Utc3R5bGUgUHl0aG9uIGZ1bmN0aW9uczwvbGluaz4KKyAgICAgICAgICAgICAgICB0aGF0IGhhdmUgYmVlbiBwcm9tb3RlZCB0byB0YXNrcyBieSB1c2luZyB0aGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZCBhbHNvIGRlc2NyaWJlcwotICAgICAgICAgICAgICAgIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHNlY3Rpb24gYnV0IHdpdGggdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIHByb21vdGluZyBpdCB0byBhIHRhc2sKLSAgICAgICAgICAgICAgICBhbmQgZGVmaW5pbmcgc29tZSBkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZCBjYW4gYWxzbworICAgICAgICAgICAgICAgIG9wdGlvbmFsbHkgZGVzY3JpYmUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAgdGFzayBhbmQgb3RoZXIgdGFza3MuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGRlZmluZSBhIHRhc2sKKyAgICAgICAgICAgICAgICBhbmQgZGVjbGFyZSBzb21lIGRlcGVuZGVuY2llczoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIHB5dGhvbiBkb19wcmludGRhdGUgKCkgewogICAgICAgICAgaW1wb3J0IHRpbWUKQEAgLTExMjcsMTUgKzE1NjEsODEgQEAKICAgICAgfQogICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB0aGVuIHByb21vdGVkCi0gICAgICAgICAgICAgICAgYXMgYSB0YXNrLgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBiZWNvbWVzIGEgZGVwZW5kZW5jeSBvZgotICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrLCB3aGljaCBpcyB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgIHRhc2suCi0gICAgICAgICAgICAgICAgQW5kLCB0aGUgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMgZGVwZW5kZW50IHVwb24KLSAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzay4KLSAgICAgICAgICAgICAgICBFeGVjdXRpb24gb2YgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2sgcmVzdWx0cwotICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBydW5uaW5nIGZpcnN0LgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCB0byA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIHByb21vdGUgdG8KKyAgICAgICAgICAgICAgICBhIHRhc2suCisgICAgICAgICAgICAgICAgSWYgdGhlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCAiZG9fIiwgImRvXyIgaXMKKyAgICAgICAgICAgICAgICBpbXBsaWNpdGx5IGFkZGVkLCB3aGljaCBlbmZvcmNlcyB0aGUgY29udmVudGlvbiB0aGF0CisgICAgICAgICAgICAgICAgYWxsIHRhc2sgbmFtZXMgc3RhcnQgd2l0aCAiZG9fIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIGJlY29tZXMgYQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb2YgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzaywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdGFzayAoaS5lLiB0aGUgdGFzayBydW4gYnkKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHVubGVzcworICAgICAgICAgICAgICAgIGFub3RoZXIgdGFzayBpcyBzcGVjaWZpZWQgZXhwbGljaXRseSkuCisgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzayBiZWNvbWVzIGRlcGVuZGVudCB1cG9uIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICAgICAgUnVubmluZyB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzaworICAgICAgICAgICAgICAgIHJlc3VsdHMgaW4gdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgcnVubmluZyBmaXJzdC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHRyeSBvdXQgdGhlIHByZXZpb3VzIGV4YW1wbGUsIHlvdSBtaWdodCBzZWUgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMgb25seSBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IHRpbWUgeW91IGJ1aWxkIHRoZSByZWNpcGUgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgQml0QmFrZSBjb25zaWRlcnMgdGhlIHRhc2sgInVwLXRvLWRhdGUiCisgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoYXQgaW5pdGlhbCBydW4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGZvcmNlIHRoZSB0YXNrIHRvIGFsd2F5cyBiZSByZXJ1biBmb3IKKyAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudGF0aW9uIHB1cnBvc2VzLCB5b3UgY2FuIG1ha2UgQml0QmFrZSBhbHdheXMKKyAgICAgICAgICAgICAgICAgICAgY29uc2lkZXIgdGhlIHRhc2sgIm91dC1vZi1kYXRlIiBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPls8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWdzJz48ZmlsZW5hbWU+bm9zdGFtcDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT5dPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZmxhZywgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wcmludGRhdGVbbm9zdGFtcF0gPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZXhwbGljaXRseSBydW4gdGhlIHRhc2sgYW5kIHByb3ZpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZjwvZmlsZW5hbWU+IG9wdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4gLWMgcHJpbnRkYXRlIC1mCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBtYW51YWxseSBzZWxlY3RpbmcgYSB0YXNrIHRvIHJ1biB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Jm5ic3A7PGZpbGVuYW1lPi1jPC9maWxlbmFtZT4mbmJzcDs8cmVwbGFjZWFibGU+dGFzazwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHlvdSBjYW4gb21pdCB0aGUgImRvXyIgcHJlZml4IGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhc2sgbmFtZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3b25kZXIgYWJvdXQgdGhlIHByYWN0aWNhbCBlZmZlY3RzIG9mIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiB3aXRob3V0IHNwZWNpZnlpbmcgYW55CisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGFzIGlzIGRvbmUgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYWRkdGFzayBwcmludGRhdGUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCBhc3N1bWluZyBkZXBlbmRlbmNpZXMgaGF2ZSBub3QgYmVlbgorICAgICAgICAgICAgICAgIGFkZGVkIHRocm91Z2ggc29tZSBvdGhlciBtZWFucywgdGhlIG9ubHkgd2F5IHRvIHJ1bgorICAgICAgICAgICAgICAgIHRoZSB0YXNrIGlzIGJ5IGV4cGxpY2l0bHkgc2VsZWN0aW5nIGl0IHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Jm5ic3A7PGZpbGVuYW1lPi1jIHByaW50ZGF0ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19saXN0dGFza3M8L2ZpbGVuYW1lPiB0YXNrIHRvIGxpc3QgYWxsIHRhc2tzCisgICAgICAgICAgICAgICAgZGVmaW5lZCBpbiBhIHJlY2lwZSBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+IC1jIGxpc3R0YXNrcworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0YXNrIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXBlbmRlbmNpZXMnPkRlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2YXJpYWJsZS1mbGFncyc+VmFyaWFibGUgRmxhZ3M8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHZhcmlhYmxlIGZsYWdzIHlvdSBjYW4gdXNlIHdpdGgKKyAgICAgICAgICAgICAgICB0YXNrcy4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCkBAIC0xMTcyLDcgKzE2NzIsNyBAQAogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBkZXBlbmRlbmNpZXMgc3VjaCBhcyB0aGVzZSB0byByZW1haW4gaW50YWN0LCB1c2UKLSAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm5vZXhlYzwvZmlsZW5hbWU+IHZhcmZsYWcgdG8gZGlzYWJsZSB0aGUgdGFzaworICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+W25vZXhlY108L2ZpbGVuYW1lPiB2YXJmbGFnIHRvIGRpc2FibGUgdGhlIHRhc2sKICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KICAgICAgICAgICAgICAgICBkZWxldGUgaXQ6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpAQCAtMTI5NSwxMCArMTc5NSwxMyBAQAogICAgICAgICAgICAgVGFza3Mgc3VwcG9ydCBhIG51bWJlciBvZiB0aGVzZSBmbGFncyB3aGljaCBjb250cm9sIHZhcmlvdXMKICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhc2s6CiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2xlYW5kaXJzOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEVtcHR5IGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGNyZWF0ZWQgYmVmb3JlIHRoZSB0YXNrIHJ1bnMuCisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W2NsZWFuZGlyc108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBFbXB0eSBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFzayBydW5zLgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyB0aGF0IGFscmVhZHkgZXhpc3QgYXJlIHJlbW92ZWQgYW5kIHJlY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICB0byBlbXB0eSB0aGVtLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRlcGVuZHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bZGVwZW5kc108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBDb250cm9scyBpbnRlci10YXNrIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KQEAgLTEzMDYsNyArMTgwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbnRlci10YXNrLWRlcGVuZGVuY2llcyc+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L2xpbms+IgogICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bZGVwdGFza108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBDb250cm9scyB0YXNrIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgpAQCAtMTMxNCwxMiArMTgxNywxMyBAQAogICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnVpbGQtZGVwZW5kZW5jaWVzJz5CdWlsZCBEZXBlbmRlbmNpZXM8L2xpbms+IgogICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRpcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bZGlyc108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyB0aGF0IHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgdGFzayBydW5zLgotICAgICAgICAgICAgICAgICAgICBUaGUgbGFzdCBkaXJlY3RvcnkgbGlzdGVkIHdpbGwgYmUgdXNlZCBhcyB0aGUgd29yayBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB0YXNrLgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyB0aGF0IGFscmVhZHkgZXhpc3QgYXJlIGxlZnQgYXMgaXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsYXN0IGRpcmVjdG9yeSBsaXN0ZWQgaXMgdXNlZCBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHRhc2suCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+bG9ja2ZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+W2xvY2tmaWxlc108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIG9uZSBvciBtb3JlIGxvY2tmaWxlcyB0byBsb2NrIHdoaWxlIHRoZSB0YXNrCiAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlcy4KICAgICAgICAgICAgICAgICAgICAgIE9ubHkgb25lIHRhc2sgbWF5IGhvbGQgYSBsb2NrZmlsZSwgYW5kIGFueSB0YXNrIHRoYXQKQEAgLTEzMjgsMjMgKzE4MzIsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgZmxhZyB0byBhY2NvbXBsaXNoIG11dHVhbAogICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaW9uLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5vZXhlYzo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBNYXJrcyB0aGUgdGFza3MgYXMgYmVpbmcgZW1wdHkgYW5kIG5vIGV4ZWN1dGlvbiByZXF1aXJlZC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ub2V4ZWM8L2ZpbGVuYW1lPiBmbGFnIGNhbiBiZSB1c2VkIHRvIHNldCB1cAorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPltub2V4ZWNdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gIjEiLCBtYXJrcyB0aGUgdGFzayBhcyBiZWluZyBlbXB0eSwgd2l0aAorICAgICAgICAgICAgICAgICAgICBubyBleGVjdXRpb24gcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+W25vZXhlY108L2ZpbGVuYW1lPiBmbGFnIHRvIHNldCB1cAogICAgICAgICAgICAgICAgICAgICB0YXNrcyBhcyBkZXBlbmRlbmN5IHBsYWNlaG9sZGVycywgb3IgdG8gZGlzYWJsZSB0YXNrcyBkZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgIGVsc2V3aGVyZSB0aGF0IGFyZSBub3QgbmVlZGVkIGluIGEgcGFydGljdWxhciByZWNpcGUuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+bm9zdGFtcDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBUZWxscyBCaXRCYWtlIHRvIG5vdCBnZW5lcmF0ZSBhIHN0YW1wIGZpbGUgZm9yIGEgdGFzaywKLSAgICAgICAgICAgICAgICAgICAgd2hpY2ggaW1wbGllcyB0aGUgdGFzayBzaG91bGQgYWx3YXlzIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPltub3N0YW1wXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICIxIiwgdGVsbHMgQml0QmFrZSB0byBub3QgZ2VuZXJhdGUgYSBzdGFtcAorICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciBhIHRhc2ssIHdoaWNoIGltcGxpZXMgdGhlIHRhc2sgc2hvdWxkIGFsd2F5cworICAgICAgICAgICAgICAgICAgICBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPkNhdXRpb248L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgQW55IHRhc2sgdGhhdCBkZXBlbmRzIChwb3NzaWJseSBpbmRpcmVjdGx5KSBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+W25vc3RhbXBdPC9maWxlbmFtZT4gdGFzayB3aWxsIGFsd2F5cyBiZQorICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY2FuIGNhdXNlIHVubmVjZXNzYXJ5IHJlYnVpbGRpbmcgaWYgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNhcmVmdWwuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wb3N0ZnVuY3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bcG9zdGZ1bmNzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHRhc2suCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHJlZnVuY3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bcHJlZnVuY3NdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlIHRhc2sgZXhlY3V0ZXMuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmRlcGVuZHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bcmRlcGVuZHNdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaW50ZXItdGFzayBydW50aW1lIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgpAQCAtMTM1NCw3ICsxODY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ludGVyLXRhc2stZGVwZW5kZW5jaWVzJz5JbnRlci1UYXNrIERlcGVuZGVuY2llczwvbGluaz4iCiAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bcmRlcHRhc2tdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayBydW50aW1lIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgpAQCAtMTM2NCwxMiArMTg3NywxMiBAQAogICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncnVudGltZS1kZXBlbmRlbmNpZXMnPlJ1bnRpbWUgRGVwZW5kZW5jaWVzPC9saW5rPiIKICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNpZGVwdGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPltyZWNpZGVwdGFza108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBXaGVuIHNldCBpbiBjb25qdW5jdGlvbiB3aXRoCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNyZGVwdGFzazwvZmlsZW5hbWU+LCBzcGVjaWZpZXMgYSB0YXNrIHRoYXQKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGluc3BlY3RlZCBmb3IgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmVjcmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bcmVjcmRlcHRhc2tdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayByZWN1cnNpdmUgcnVudGltZSBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KQEAgLTEzNzksMTIgKzE4OTIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlY3Vyc2l2ZS1kZXBlbmRlbmNpZXMnPlJlY3Vyc2l2ZSBEZXBlbmRlbmNpZXM8L2xpbms+IgogICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnN0YW1wLWV4dHJhLWluZm86PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bc3RhbXAtZXh0cmEtaW5mb108L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBFeHRyYSBzdGFtcCBpbmZvcm1hdGlvbiB0byBhcHBlbmQgdG8gdGhlIHRhc2sncyBzdGFtcC4KICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgT3BlbkVtYmVkZGVkIHVzZXMgdGhpcyBmbGFnIHRvIGFsbG93CiAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgdGFza3MuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dW1hc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bdW1hc2tdPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgVGhlIHVtYXNrIHRvIHJ1biB0aGUgdGFzayB1bmRlci4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KQEAgLTEzOTcsNyArMTkxMCw3IEBACiAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKICAgICAgICAgICAgIHNlY3Rpb24uCiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlt2YXJkZXBzXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIGFkZCB0byBhIHZhcmlhYmxlJ3MgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcHVycG9zZXMgb2YgY2FsY3VsYXRpbmcgaXRzIHNpZ25hdHVyZS4KQEAgLTE0MDYsMTcgKzE5MTksMTcgQEAKICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWxsb3cgQml0QmFrZSB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZQogICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSB2YXJpYWJsZSBpcyByZWZlcnJlZCB0by4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz52YXJkZXBzZXhjbHVkZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlt2YXJkZXBzZXhjbHVkZV08L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB2YXJpYWJsZXMKICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBhIHZhcmlhYmxlJ3MgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcHVycG9zZXMgb2YgY2FsY3VsYXRpbmcgaXRzIHNpZ25hdHVyZS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz52YXJkZXB2YWx1ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlt2YXJkZXB2YWx1ZV08L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIGluc3RydWN0cyBCaXRCYWtlIHRvIGlnbm9yZSB0aGUgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBhbmQgaW5zdGVhZCB1c2UgdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICAgICB2YWx1ZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2YXJpYWJsZSdzIHNpZ25hdHVyZS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz52YXJkZXB2YWx1ZWV4Y2x1ZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5bdmFyZGVwdmFsdWVleGNsdWRlXTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHBpcGUtc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyB0byBleGNsdWRlCiAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyBzaWduYXR1cmUuCkBAIC0xNjI0LDE1ICsyMTM3LDMyIEBACiAgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXM8L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVG8gYWxsb3cgZm9yIGVmZmljaWVudCBvcGVyYXRpb24gZ2l2ZW4gbXVsdGlwbGUgcHJvY2Vzc2VzCi0gICAgICAgICAgICBleGVjdXRpbmcgaW4gcGFyYWxsZWwsIEJpdEJha2UgaGFuZGxlcyBkZXBlbmRlbmNpZXMgYXQKLSAgICAgICAgICAgIHRoZSB0YXNrIGxldmVsLgotICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBhIHJvYnVzdCBtZXRob2QgdG8gaGFuZGxlIHRoZXNlIGRlcGVuZGVuY2llcy4KLSAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgVG8gYWxsb3cgZm9yIGVmZmljaWVudCBwYXJhbGxlbCBwcm9jZXNzaW5nLCBCaXRCYWtlIGhhbmRsZXMKKyAgICAgICAgICAgIGRlcGVuZGVuY2llcyBhdCB0aGUgdGFzayBsZXZlbC4KKyAgICAgICAgICAgIERlcGVuZGVuY2llcyBjYW4gZXhpc3QgYm90aCBiZXR3ZWVuIHRhc2tzIHdpdGhpbiBhIHNpbmdsZSByZWNpcGUKKyAgICAgICAgICAgIGFuZCBiZXR3ZWVuIHRhc2tzIGluIGRpZmZlcmVudCByZWNpcGVzLgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBleGFtcGxlcyBvZiBlYWNoOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIHRhc2tzIHdpdGhpbiBhIHNpbmdsZSByZWNpcGUsIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgbWlnaHQgbmVlZCB0byBjb21wbGV0ZSBiZWZvcmUgaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFzayBjYW4gcnVuLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIHRhc2tzIGluIGRpZmZlcmVudCByZWNpcGVzLCBvbmUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgbWlnaHQgcmVxdWlyZSBhbm90aGVyIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdGFzayB0byBmaW5pc2ggZmlyc3Qgc3VjaCB0aGF0IHRoZSBsaWJyYXJpZXMgYW5kIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIG90aGVyIHJlY2lwZSBhcmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgc2V2ZXJhbCB0eXBlcyBvZiBkZXBlbmRlbmN5IG1lY2hhbmlzbXMuCi0gICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgc2V2ZXJhbCB3YXlzIHRvIGRlY2xhcmUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgIFJlbWVtYmVyLCBldmVuIHRob3VnaCBkZXBlbmRlbmNpZXMgYXJlIGRlY2xhcmVkIGluIGRpZmZlcmVudCB3YXlzLCB0aGV5CisgICAgICAgICAgICAgYXJlIGFsbCBzaW1wbHkgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGFza3MuCisgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHNlY3Rpb24gaWQ9J2RlcGVuZGVuY2llcy1pbnRlcm5hbC10by10aGUtYmItZmlsZSc+CiAgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzIEludGVybmFsIHRvIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+CkBAIC0xNjQ4LDExICsyMTc4LDQ5IEBACiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPnByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMKLSAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBjb21wbGV0aW9uIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgZGVwZW5kcyBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzayBkZXBlbmRzIG9uIHRoZQorICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gb2YgdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgIHRhc2suCi0gICAgICAgICAgICAgICAgQW5kLCB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gZGVwZW5kcyBvbiB0aGUgY29tcGxldGlvbgotICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+cHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICA8bm90ZT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdGFzayB0byBydW4sIGl0IG11c3QgYmUgYSBkaXJlY3Qgb3IgaW5kaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvZiBzb21lIG90aGVyIHRhc2sgdGhhdCBpcyBzY2hlZHVsZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgcnVuLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaWxsdXN0cmF0aW9uLCBoZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzayBteXRhc2sgYmVmb3JlIGRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2VzIDxmaWxlbmFtZT5kb19teXRhc2s8L2ZpbGVuYW1lPiB0byBydW4gYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IHJ1bnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCA8ZmlsZW5hbWU+ZG9fbXl0YXNrPC9maWxlbmFtZT4gc3RpbGwgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnMgaWYgaXRzIDxsaW5rIGxpbmtlbmQ9J2NoZWNrc3Vtcyc+aW5wdXQgY2hlY2tzdW08L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSBpdCB3YXMgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZXMgdG8gdGhlIGlucHV0IGNoZWNrc3VtIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX215dGFzazwvZmlsZW5hbWU+IGFsc28gaW5kaXJlY3RseSBjYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiB0byBydW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hZGR0YXNrIG15dGFzayBhZnRlciBkb19jb25maWd1cmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGl0c2VsZiBuZXZlciBjYXVzZXMgPGZpbGVuYW1lPmRvX215dGFzazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19teXRhc2s8L2ZpbGVuYW1lPiBjYW4gc3RpbGwgYmUgcnVuIG1hbnVhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4gLWMgbXl0YXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmluZyA8ZmlsZW5hbWU+ZG9fbXl0YXNrPC9maWxlbmFtZT4gYXMgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygc29tZSBvdGhlciB0YXNrIHRoYXQgaXMgc2NoZWR1bGVkIHRvIHJ1biBhbHNvIGNhdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHRvIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdhcmRsZXNzLCB0aGUgdGFzayBydW5zIGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKQEAgLTE2NjMsNyArMjIzMSw4IEBACiAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQogICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIG1hbmFnZSBidWlsZCB0aW1lIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgICAgICBUaGUgImRlcHRhc2siIHZhcmZsYWcgZm9yIHRhc2tzIHNpZ25pZmllcyB0aGUgdGFzayBvZiBlYWNoCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5bZGVwdGFza108L2ZpbGVuYW1lPiB2YXJmbGFnIGZvciB0YXNrcworICAgICAgICAgICAgICAgIHNpZ25pZmllcyB0aGUgdGFzayBvZiBlYWNoCiAgICAgICAgICAgICAgICAgaXRlbSBsaXN0ZWQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiB0aGF0IG11c3QKICAgICAgICAgICAgICAgICBjb21wbGV0ZSBiZWZvcmUgdGhhdCB0YXNrIGNhbiBiZSBleGVjdXRlZC4KICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CkBAIC0xNjkyLDcgKzIyNjEsOCBAQAogICAgICAgICAgICAgICAgIHBhY2thZ2VzLgogICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhvc2UgcGFja2FnZXMgY2FuIGhhdmUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gcnVudGltZSBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgVGhlICJyZGVwdGFzayIgZmxhZyBmb3IgdGFza3MgaXMgdXNlZCB0byBzaWduaWZ5IHRoZSB0YXNrIG9mIGVhY2gKKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPltyZGVwdGFza108L2ZpbGVuYW1lPiBmbGFnIGZvciB0YXNrcyBpcyB1c2VkIHRvCisgICAgICAgICAgICAgICAgc2lnbmlmeSB0aGUgdGFzayBvZiBlYWNoCiAgICAgICAgICAgICAgICAgaXRlbSBydW50aW1lIGRlcGVuZGVuY3kgd2hpY2ggbXVzdCBoYXZlIGNvbXBsZXRlZCBiZWZvcmUgdGhhdAogICAgICAgICAgICAgICAgIHRhc2sgY2FuIGJlIGV4ZWN1dGVkLgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KQEAgLTE3MDgsNyArMjI3OCw3IEBACiAgICAgICAgICAgICA8dGl0bGU+UmVjdXJzaXZlIERlcGVuZGVuY2llczwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgInJlY3JkZXB0YXNrIiBmbGFnIHRvIG1hbmFnZQorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPltyZWNyZGVwdGFza108L2ZpbGVuYW1lPiBmbGFnIHRvIG1hbmFnZQogICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSB0YXNrIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICBCaXRCYWtlIGxvb2tzIHRocm91Z2ggdGhlIGJ1aWxkLXRpbWUgYW5kIHJ1bnRpbWUKICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLCBsb29rcyB0aHJvdWdoCkBAIC0xNzIyLDYgKzIyOTIsMjEgQEAKICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5bcmVjcmRlcHRhc2tdPC9maWxlbmFtZT4gZmxhZyBpcyBtb3N0IGNvbW1vbmx5CisgICAgICAgICAgICAgICAgdXNlZCBpbiBoaWdoLWxldmVsCisgICAgICAgICAgICAgICAgcmVjaXBlcyB0aGF0IG5lZWQgdG8gd2FpdCBmb3Igc29tZSB0YXNrIHRvIGZpbmlzaCAiZ2xvYmFsbHkiLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+IGhhcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZWRhdGEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgc3RhdGVtZW50IHNheXMgdGhhdCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIHRoZSBjdXJyZW50IHJlY2lwZSBhbmQgYWxsIHJlY2lwZXMgcmVhY2hhYmxlCisgICAgICAgICAgICAgICAgKGJ5IHdheSBvZiBkZXBlbmRlbmNpZXMpIGZyb20gdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIG11c3QgcnVuIGJlZm9yZSB0aGUgPGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzayBjYW4gcnVuLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBub3Qgb25seSBoYXZlIEJpdEJha2UgbG9vayBmb3IKICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2YgdGhvc2UgdGFza3MsIGJ1dCBhbHNvIGhhdmUgQml0QmFrZSBsb29rCiAgICAgICAgICAgICAgICAgZm9yIGJ1aWxkLXRpbWUgYW5kIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIHRoZSBkZXBlbmRlbnQKQEAgLTE3MzgsNyArMjMyMyw4IEBACiAgICAgICAgICAgICA8dGl0bGU+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L3RpdGxlPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlICJkZXBlbmRzIiBmbGFnIGluIGEgbW9yZSBnZW5lcmljIGZvcm0KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5bZGVwZW5kc108L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZsYWcgaW4gYSBtb3JlIGdlbmVyaWMgZm9ybQogICAgICAgICAgICAgICAgIHRvIG1hbmFnZSBpbnRlci10YXNrIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICBUaGlzIG1vcmUgZ2VuZXJpYyBmb3JtIGFsbG93cyBmb3IgaW50ZXItZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgIGNoZWNrcyBmb3Igc3BlY2lmaWMgdGFza3MgcmF0aGVyIHRoYW4gY2hlY2tzIGZvcgpAQCAtMTc1NCwxMDkgKzIzNDAsMTU4IEBACiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSAicmRlcGVuZHMiIGZsYWcgd29ya3MgaW4gYSBzaW1pbGFyIHdheSBidXQgdGFrZXMgdGFyZ2V0cworICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+W3JkZXBlbmRzXTwvZmlsZW5hbWU+IGZsYWcgd29ya3MgaW4gYSBzaW1pbGFyCisgICAgICAgICAgICAgICAgd2F5IGJ1dCB0YWtlcyB0YXJnZXRzCiAgICAgICAgICAgICAgICAgaW4gdGhlIHJ1bnRpbWUgbmFtZXNwYWNlIGluc3RlYWQgb2YgdGhlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgIG5hbWVzcGFjZS4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSdhY2Nlc3NpbmctZGF0YXN0b3JlLXZhcmlhYmxlcy11c2luZy1weXRob24nPgotICAgICAgICA8dGl0bGU+QWNjZXNzaW5nIERhdGFzdG9yZSBWYXJpYWJsZXMgVXNpbmcgUHl0aG9uPC90aXRsZT4KKyAgICA8c2VjdGlvbiBpZD0nZnVuY3Rpb25zLXlvdS1jYW4tY2FsbC1mcm9tLXdpdGhpbi1weXRob24nPgorICAgICAgICA8dGl0bGU+RnVuY3Rpb25zIFlvdSBDYW4gQ2FsbCBGcm9tIFdpdGhpbiBQeXRob248L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGFjY2VzcyB2YXJpYWJsZXMgaW4gdGhlCi0gICAgICAgICAgICBCaXRCYWtlIGRhdGFzdG9yZSB1c2luZyBQeXRob24gZnVuY3Rpb25zLgotICAgICAgICAgICAgVGhlIEJpdGJha2UgZGF0YXN0b3JlIGhhcyBhbiBBUEkgdGhhdCBhbGxvd3MgeW91IHRoaXMKLSAgICAgICAgICAgIGFjY2Vzcy4KLSAgICAgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIGF2YWlsYWJsZSBvcGVyYXRpb25zOgorICAgICAgICAgICAgQml0QmFrZSBwcm92aWRlcyBtYW55IGZ1bmN0aW9ucyB5b3UgY2FuIGNhbGwgZnJvbQorICAgICAgICAgICAgd2l0aGluIFB5dGhvbiBmdW5jdGlvbnMuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbnMsCisgICAgICAgICAgICBhbmQgbWVudGlvbnMgd2hlcmUgdG8gZmluZCBvdGhlcnMuCiAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSdub25lJz4KLSAgICAgICAgICAgICAgICA8dGdyb3VwIGNvbHM9JzInIGFsaWduPSdsZWZ0JyBjb2xzZXA9JzEnIHJvd3NlcD0nMSc+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9J2MxJyBjb2x3aWR0aD0nMSonLz4KLSAgICAgICAgICAgICAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0nYzInIGNvbHdpZHRoPScxKicvPgotICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGVtcGhhc2lzPk9wZXJhdGlvbjwvZW1waGFzaXM+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxlbXBoYXNpcz5EZXNjcmlwdGlvbjwvZW1waGFzaXM+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZ2V0VmFyKCJYIiwgZXhwYW5kPUZhbHNlKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJldHVybnMgdGhlIHZhbHVlIG9mIHZhcmlhYmxlICJYIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgImV4cGFuZD1UcnVlIiBleHBhbmRzIHRoZSB2YWx1ZS48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuc2V0VmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSB2YXJpYWJsZSAiWCIgdG8gInZhbHVlIi48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuYXBwZW5kVmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5BZGRzICJ2YWx1ZSIgdG8gdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5wcmVwZW5kVmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5BZGRzICJ2YWx1ZSIgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhcigiWCIpPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+RGVsZXRlcyB0aGUgdmFyaWFibGUgIlgiIGZyb20gdGhlIGRhdGFzdG9yZS48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucmVuYW1lVmFyKCJYIiwgIlkiKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJlbmFtZXMgdGhlIHZhcmlhYmxlICJYIiB0byAiWSIuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhckZsYWcoIlgiLCBmbGFnLCBleHBhbmQ9RmFsc2UpPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+R2V0cyB0aGVuIG5hbWVkIGZsYWcgZnJvbSB0aGUgdmFyaWFibGUgIlgiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyAiZXhwYW5kPVRydWUiIGV4cGFuZHMgdGhlIG5hbWVkIGZsYWcuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlNldHMgdGhlIG5hbWVkIGZsYWcgZm9yIHZhcmlhYmxlICJYIiB0byAidmFsdWUiLjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5hcHBlbmRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5BcHBlbmRzICJ2YWx1ZSIgdG8gdGhlIG5hbWVkIGZsYWcgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgIlgiLjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5wcmVwZW5kVmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UHJlcGVuZHMgInZhbHVlIiB0byB0aGUgbmFtZWQgZmxhZyBvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhckZsYWcoIlgiLCBmbGFnKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgdGhlIG5hbWVkIGZsYWcgb24gdGhlIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYIiBmcm9tIHRoZSBkYXRhc3RvcmUuPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhckZsYWdzKCJYIiwgZmxhZ3NkaWN0KTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlNldHMgdGhlIGZsYWdzIHNwZWNpZmllZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmZsYWdzZGljdCgpPC9maWxlbmFtZT4gcGFyYW1ldGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2V0VmFyRmxhZ3M8L2ZpbGVuYW1lPiBkb2VzIG5vdCBjbGVhciBwcmV2aW91cyBmbGFncy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhpcyBvcGVyYXRpb24gYXMgPGZpbGVuYW1lPmFkZFZhckZsYWdzPC9maWxlbmFtZT4uPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhckZsYWdzKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZXR1cm5zIGEgPGZpbGVuYW1lPmZsYWdzZGljdDwvZmlsZW5hbWU+IG9mIHRoZSBmbGFncyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZGVsVmFyRmxhZ3MoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgYWxsIHRoZSBmbGFncyBmb3IgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZXhwYW5kKGV4cHJlc3Npb24pPC9maWxlbmFtZT48L2VudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+RXhwYW5kcyB2YXJpYWJsZSByZWZlcmVuY2VzIGluIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGV4cHJlc3Npb24uPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGdyb3VwPgotICAgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgotICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzZWN0aW9uIGlkPSdmdW5jdGlvbnMtZm9yLWFjY2Vzc2luZy1kYXRhc3RvcmUtdmFyaWFibGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5GdW5jdGlvbnMgZm9yIEFjY2Vzc2luZyBEYXRhc3RvcmUgVmFyaWFibGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGFjY2VzcyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgQml0QmFrZSBkYXRhc3RvcmUgdXNpbmcgUHl0aG9uIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgQml0YmFrZSBkYXRhc3RvcmUgaGFzIGFuIEFQSSB0aGF0IGFsbG93cyB5b3UgdGhpcworICAgICAgICAgICAgICAgIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGEgbGlzdCBvZiBhdmFpbGFibGUgb3BlcmF0aW9uczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9J25vbmUnPgorICAgICAgICAgICAgICAgICAgICA8dGdyb3VwIGNvbHM9JzInIGFsaWduPSdsZWZ0JyBjb2xzZXA9JzEnIHJvd3NlcD0nMSc+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSdjMScgY29sd2lkdGg9JzEqJy8+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSdjMicgY29sd2lkdGg9JzEqJy8+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+T3BlcmF0aW9uPC9lbXBoYXNpcz48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxlbXBoYXNpcz5EZXNjcmlwdGlvbjwvZW1waGFzaXM+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXIoIlgiLCBleHBhbmQpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJldHVybnMgdGhlIHZhbHVlIG9mIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nICJleHBhbmQ9VHJ1ZSIgZXhwYW5kcyB0aGUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zICJOb25lIiBpZiB0aGUgdmFyaWFibGUgIlgiIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXIoIlgiLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSB2YXJpYWJsZSAiWCIgdG8gInZhbHVlIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuYXBwZW5kVmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdHMgbGlrZSA8ZmlsZW5hbWU+ZC5zZXRWYXIoIlgiLCAidmFsdWUiKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgdmFyaWFibGUgIlgiIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5wcmVwZW5kVmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBzdGFydCBvZiB0aGUgdmFyaWFibGUgIlgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0cyBsaWtlIDxmaWxlbmFtZT5kLnNldFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSB2YXJpYWJsZSAiWCIgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhcigiWCIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgdGhlIHZhcmlhYmxlICJYIiBmcm9tIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2VzIG5vdGhpbmcgaWYgdGhlIHZhcmlhYmxlICJYIiBkb2VzIG5vdCBleGlzdC48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucmVuYW1lVmFyKCJYIiwgIlkiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZW5hbWVzIHRoZSB2YXJpYWJsZSAiWCIgdG8gIlkiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9lcyBub3RoaW5nIGlmIHRoZSB2YXJpYWJsZSAiWCIgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhckZsYWcoIlgiLCBmbGFnLCBleHBhbmQpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJldHVybnMgdGhlIHZhbHVlIG9mIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nICJleHBhbmQ9VHJ1ZSIgZXhwYW5kcyB0aGUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zICJOb25lIiBpZiBlaXRoZXIgdGhlIHZhcmlhYmxlICJYIiBvciB0aGUgbmFtZWQgZmxhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBuYW1lZCBmbGFnIGZvciB2YXJpYWJsZSAiWCIgdG8gInZhbHVlIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuYXBwZW5kVmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkFwcGVuZHMgInZhbHVlIiB0byB0aGUgbmFtZWQgZmxhZyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdHMgbGlrZSA8ZmlsZW5hbWU+ZC5zZXRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIG5hbWVkIGZsYWcgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnByZXBlbmRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UHJlcGVuZHMgInZhbHVlIiB0byB0aGUgbmFtZWQgZmxhZyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdHMgbGlrZSA8ZmlsZW5hbWU+ZC5zZXRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIG5hbWVkIGZsYWcgZG9lcyBub3QgZXhpc3QuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhckZsYWcoIlgiLCBmbGFnKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIHRoZSBuYW1lZCBmbGFnIG9uIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlgiIGZyb20gdGhlIGRhdGFzdG9yZS48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuc2V0VmFyRmxhZ3MoIlgiLCBmbGFnc2RpY3QpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlNldHMgdGhlIGZsYWdzIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5mbGFnc2RpY3QoKTwvZmlsZW5hbWU+IHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXRWYXJGbGFnczwvZmlsZW5hbWU+IGRvZXMgbm90IGNsZWFyIHByZXZpb3VzIGZsYWdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhpcyBvcGVyYXRpb24gYXMgPGZpbGVuYW1lPmFkZFZhckZsYWdzPC9maWxlbmFtZT4uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhckZsYWdzKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UmV0dXJucyBhIDxmaWxlbmFtZT5mbGFnc2RpY3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZsYWdzIGZvciB0aGUgdmFyaWFibGUgIlgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyAiTm9uZSIgaWYgdGhlIHZhcmlhYmxlICJYIiBkb2VzIG5vdCBleGlzdC48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZGVsVmFyRmxhZ3MoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIGFsbCB0aGUgZmxhZ3MgZm9yIHRoZSB2YXJpYWJsZSAiWCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2VzIG5vdGhpbmcgaWYgdGhlIHZhcmlhYmxlICJYIiBkb2VzIG5vdCBleGlzdC48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZXhwYW5kKGV4cHJlc3Npb24pPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkV4cGFuZHMgdmFyaWFibGUgcmVmZXJlbmNlcyBpbiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMgdG8gdmFyaWFibGVzIHRoYXQgZG8gbm90IGV4aXN0IGFyZSBsZWZ0IGFzIGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5kLmV4cGFuZCgiZm9vICR7WH0iKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRzIHRvIHRoZSBsaXRlcmFsIHN0cmluZyAiZm9vICR7WH0iIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgIlgiIGRvZXMgbm90IGV4aXN0LjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgICAgICAgICA8L2luZm9ybWFsdGFibGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5PdGhlciBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbWFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgY2FsbGVkCisgICAgICAgICAgICAgICAgZnJvbSBQeXRob24gYnkgbG9va2luZyBhdCB0aGUgc291cmNlIGNvZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiPC9maWxlbmFtZT4gbW9kdWxlLCB3aGljaCBpcyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi9iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi9iYi91dGlscy5weTwvZmlsZW5hbWU+IGluY2x1ZGVzCisgICAgICAgICAgICAgICAgdGhlIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLnV0aWxzLmNvbnRhaW5zKCk8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIudXRpbHMubWtkaXJoaWVyKCk8L2ZpbGVuYW1lPiwgd2hpY2ggY29tZQorICAgICAgICAgICAgICAgIHdpdGggZG9jc3RyaW5ncy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAogICAgIDxzZWN0aW9uIGlkPSd0YXNrLWNoZWNrc3Vtcy1hbmQtc2V0c2NlbmUnPgpAQCAtMTg5Nyw3ICsyNTMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdGhlICJzZXRzY2VuZSIgcGFydCBvZiB0aGUgdGFzaydzIGV4ZWN1dGlvbiBpbiBvcmRlcgogICAgICAgICAgICAgICAgICAgICB0byB2YWxpZGF0ZSB0aGUgbGlzdCBvZiB0YXNrIGhhc2hlcy4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OMjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGNhbGwgdGhhdCB2ZXJpZmllcyB0aGUgbGlzdCBvZgogICAgICAgICAgICAgICAgICAgICBwbGFubmVkIHRhc2sgZXhlY3V0aW9uIGJlZm9yZSB0aGUgbWFpbiB0YXNrIGV4ZWN1dGlvbgogICAgICAgICAgICAgICAgICAgICBoYXBwZW5zLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwKaW5kZXggYWU3ZTRjZS4uNjZkOGY4NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPk08L2xpbms+CiA8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LW4nPk48L2xpbms+IC0tPgogICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPk88L2xpbms+Ci0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QNERJUic+UDwvbGluaz4KIDwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz5RPC9saW5rPiAtLT4KICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlI8L2xpbms+CiAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFQ1RJT04nPlM8L2xpbms+CkBAIC03MTYsNyArNzE2LDcgQEAKICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTic+PGdsb3NzdGVybT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2dsb3NzdGVybT4KKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yJz48Z2xvc3N0ZXJtPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjI8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGF0IHZlcmlmaWVzIHRoZSBsaXN0IG9mCkBAIC05ODYsNiArOTg2LDI5IEBACiAgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm5hdGl2ZSBuYXRpdmVzZGsiCiAgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm11bHRpbGliOjxyZXBsYWNlYWJsZT5tdWx0aWxpYl9uYW1lPC9yZXBsYWNlYWJsZT4iCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsbHksIHRoZSA8ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gZ2VuZXJhdGVzIHJlY2lwZSB2YXJpYW50cyBieSByZXdyaXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcyBhbmQgYXBwbHlpbmcgb3ZlcnJpZGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fY2xhc3MtbmF0aXZlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gZ2VuZXJhdGUgYSBuYXRpdmUgdmVyc2lvbiBvZiBhIHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb24gImZvbyIgaXMgcmV3cml0dGVuIHRvIGEgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgb24gImZvby1uYXRpdmUiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW4gd2hlbiB1c2luZyA8ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpcyBvbmx5IHBhcnNlZCBvbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2luZyBvbmNlIGFkZHMgc29tZSBsaW1pdGF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpdCBpcyBub3QgcG9zc2libGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgYSBkaWZmZXJlbnQgZmlsZSBkZXBlbmRpbmcgb24gdGhlIHZhcmlhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzaW5jZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IHN0YXRlbWVudHMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQgd2hlbiB0aGUgcmVjaXBlIGlzIHBhcnNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC05OTQsNyArMTAxNyw3IEBACiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIEJpdEJha2UgZGVidWcgb3V0cHV0IGxldmVsIHRvIGEgc3BlY2lmaWMgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgYXMgaW5jcmVtZW50ZWQgYnkgdGhlIDxmaWxlbmFtZT4tZDwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZQorICAgICAgICAgICAgICAgICAgICBhcyBpbmNyZW1lbnRlZCBieSB0aGUgPGZpbGVuYW1lPi1EPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQKQEAgLTE2MzYsNiArMTY1OSwxNyBAQAogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJESVJfUkUnPjxnbG9zc3Rlcm0+TEFZRVJESVJfUkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHVzZWQgaW5zaWRlIHRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllciwKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCBmb3IgdXNlIGluIGEgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX1BBVFRFUk4nPjxmaWxlbmFtZT5CQkZJTEVfUEFUVEVSTjwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZSBvdXRzaWRlIG9mIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlZmVyZW5jZXMgYXJlIGV4cGFuZGVkIGltbWVkaWF0ZWx5IHdoZW4gcGFyc2luZyBvZiB0aGUgZmlsZSBjb21wbGV0ZXMuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJWRVJTSU9OJz48Z2xvc3N0ZXJtPkxBWUVSVkVSU0lPTjwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhPk9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLgpAQCAtMTczNyw2ICsxNzcxLDE1IEBACiAKICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1wJz48dGl0bGU+UDwvdGl0bGU+CiAKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QNERJUic+PGdsb3NzdGVybT5QNERJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGEgbG9jYWwgY29weSBvZiBhIFBlcmZvcmNlIGRlcG90CisgICAgICAgICAgICAgICAgICAgIGlzIHN0b3JlZCB3aGVuIGl0IGlzIGZldGNoZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRVM8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGUgcmVjaXBlIGNyZWF0ZXMuCkBAIC0xOTMzLDYgKzE5NzYsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCByZXN1bHRzIGluCiAgICAgICAgICAgICAgICAgICAgIHRoZSAibGliYXYiIHJlY2lwZSBhbHNvIGJlaW5nIGtub3duIGFzICJsaWJwb3N0cHJvYyIuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHByb3ZpZGluZyByZWNpcGVzIHVuZGVyIGFsdGVybmF0ZSBuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IG1lY2hhbmlzbSBpcyBhbHNvIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gaW1wbGVtZW50IHZpcnR1YWwgdGFyZ2V0cy4KKyAgICAgICAgICAgICAgICAgICAgQSB2aXJ0dWFsIHRhcmdldCBpcyBhIG5hbWUgdGhhdCBjb3JyZXNwb25kcyB0byBzb21lCisgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSAoZS5nLiBhIExpbnV4IGtlcm5lbCkuCisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgdGhhdCBwcm92aWRlIHRoZSBmdW5jdGlvbmFsaXR5IGluIHF1ZXN0aW9uIGxpc3QgdGhlCisgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdGFyZ2V0IGluIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBmdW5jdGlvbmFsaXR5IGluIHF1ZXN0aW9uIGNhbgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSB2aXJ0dWFsIHRhcmdldCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdG8gbGVhdmUgdGhlIGNob2ljZSBvZiBwcm92aWRlciBvcGVuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb252ZW50aW9uYWxseSwgdmlydHVhbCB0YXJnZXRzIGhhdmUgbmFtZXMgb24gdGhlIGZvcm0KKyAgICAgICAgICAgICAgICAgICAgInZpcnR1YWwvZnVuY3Rpb24iIChlLmcuICJ2aXJ0dWFsL2tlcm5lbCIpLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2xhc2ggaXMgc2ltcGx5IHBhcnQgb2YgdGhlIG5hbWUgYW5kIGhhcyBubworICAgICAgICAgICAgICAgICAgICBzeW50YWN0aWNhbCBzaWduaWZpY2FuY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL0NPVy5weQppbmRleCA2OTE3ZWMzLi43N2EwNWNmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9DT1cucHkKQEAgLTIzLDE5ICsyMywxNyBAQAogIyBBc3NpZ24gYSBmaWxlIHRvIF9fd2Fybl9fIHRvIGdldCB3YXJuaW5ncyBhYm91dCBzbG93IG9wZXJhdGlvbnMuCiAjCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKwogaW1wb3J0IGNvcHkKIGltcG9ydCB0eXBlcwogSW1tdXRhYmxlVHlwZXMgPSAoCi0gICAgdHlwZXMuTm9uZVR5cGUsCiAgICAgYm9vbCwKICAgICBjb21wbGV4LAogICAgIGZsb2F0LAogICAgIGludCwKLSAgICBsb25nLAogICAgIHR1cGxlLAogICAgIGZyb3plbnNldCwKLSAgICBiYXNlc3RyaW5nCisgICAgc3RyCiApCiAKIE1VVEFCTEUgPSAiX19tdXRhYmxlX18iCkBAIC02MSw3ICs1OSw3IEBACiAgICAgX19jYWxsX18gPSBjb3cKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhjbHMsIGtleSwgdmFsdWUpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgSW1tdXRhYmxlVHlwZXMpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UodmFsdWUsIEltbXV0YWJsZVR5cGVzKToKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDT1dNZXRhKToKICAgICAgICAgICAgICAgICBjbHMuX19oYXNtdXRhYmxlX18gPSBUcnVlCiAgICAgICAgICAgICBrZXkgKz0gTVVUQUJMRQpAQCAtMTE2LDcgKzExNCw3IEBACiAgICAgICAgIGNscy5fX3NldGl0ZW1fXyhrZXksIGNscy5fX21hcmtlcl9fKQogCiAgICAgZGVmIF9fcmV2ZXJ0aXRlbV9fKGNscywga2V5KToKLSAgICAgICAgaWYgbm90IGNscy5fX2RpY3RfXy5oYXNfa2V5KGtleSk6CisgICAgICAgIGlmIGtleSBub3QgaW4gY2xzLl9fZGljdF9fOgogICAgICAgICAgICAga2V5ICs9IE1VVEFCTEUKICAgICAgICAgZGVsYXR0cihjbHMsIGtleSkKIApAQCAtMTgzLDcgKzE4MSw3IEBACiAgICAgICAgIENPV0RpY3RNZXRhLl9fZGVsaXRlbV9fKGNscywgcmVwcihoYXNoKHZhbHVlKSkpCiAKICAgICBkZWYgX19pbl9fKGNscywgdmFsdWUpOgotICAgICAgICByZXR1cm4gQ09XRGljdE1ldGEuaGFzX2tleShyZXByKGhhc2godmFsdWUpKSkKKyAgICAgICAgcmV0dXJuIHJlcHIoaGFzaCh2YWx1ZSkpIGluIENPV0RpY3RNZXRhCiAKICAgICBkZWYgaXRlcmtleXMoY2xzKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzZXRzIGRvbid0IGhhdmUga2V5cyIpCkBAIC0xOTIsMTIgKzE5MCwxMCBAQAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldHMgZG9uJ3QgaGF2ZSAnaXRlbXMnIikKIAogIyBUaGVzZSBhcmUgdGhlIGFjdHVhbCBjbGFzc2VzIHlvdSB1c2UhCi1jbGFzcyBDT1dEaWN0QmFzZShvYmplY3QpOgotICAgIF9fbWV0YWNsYXNzX18gPSBDT1dEaWN0TWV0YQorY2xhc3MgQ09XRGljdEJhc2Uob2JqZWN0LCBtZXRhY2xhc3MgPSBDT1dEaWN0TWV0YSk6CiAgICAgX19jb3VudF9fID0gMAogCi1jbGFzcyBDT1dTZXRCYXNlKG9iamVjdCk6Ci0gICAgX19tZXRhY2xhc3NfXyA9IENPV1NldE1ldGEKK2NsYXNzIENPV1NldEJhc2Uob2JqZWN0LCBtZXRhY2xhc3MgPSBDT1dTZXRNZXRhKToKICAgICBfX2NvdW50X18gPSAwCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CkBAIC0yMTcsMTEgKzIxMywxMSBAQAogICAgIHByaW50KCkKIAogICAgIHByaW50KCJhIiwgYSkKLSAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgIGZvciB4IGluIGEuaXRlbXMoKToKICAgICAgICAgcHJpbnQoeCkKICAgICBwcmludCgiLS0iKQogICAgIHByaW50KCJiIiwgYikKLSAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcygpOgorICAgIGZvciB4IGluIGIuaXRlbXMoKToKICAgICAgICAgcHJpbnQoeCkKICAgICBwcmludCgpCiAKQEAgLTIyOSwxMSArMjI1LDExIEBACiAgICAgYlsnYSddID0gJ2MnCiAKICAgICBwcmludCgiYSIsIGEpCi0gICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICBmb3IgeCBpbiBhLml0ZW1zKCk6CiAgICAgICAgIHByaW50KHgpCiAgICAgcHJpbnQoIi0tIikKICAgICBwcmludCgiYiIsIGIpCi0gICAgZm9yIHggaW4gYi5pdGVyaXRlbXMoKToKKyAgICBmb3IgeCBpbiBiLml0ZW1zKCk6CiAgICAgICAgIHByaW50KHgpCiAgICAgcHJpbnQoKQogCkBAIC0yNDgsMjIgKzI0NCwyMiBAQAogICAgIGFbJ3NldCddLmFkZCgibzIiKQogCiAgICAgcHJpbnQoImEiLCBhKQotICAgIGZvciB4IGluIGFbJ3NldCddLml0ZXJ2YWx1ZXMoKToKKyAgICBmb3IgeCBpbiBhWydzZXQnXS52YWx1ZXMoKToKICAgICAgICAgcHJpbnQoeCkKICAgICBwcmludCgiLS0iKQogICAgIHByaW50KCJiIiwgYikKLSAgICBmb3IgeCBpbiBiWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgZm9yIHggaW4gYlsnc2V0J10udmFsdWVzKCk6CiAgICAgICAgIHByaW50KHgpCiAgICAgcHJpbnQoKQogCiAgICAgYlsnc2V0J10uYWRkKCdvMycpCiAKICAgICBwcmludCgiYSIsIGEpCi0gICAgZm9yIHggaW4gYVsnc2V0J10uaXRlcnZhbHVlcygpOgorICAgIGZvciB4IGluIGFbJ3NldCddLnZhbHVlcygpOgogICAgICAgICBwcmludCh4KQogICAgIHByaW50KCItLSIpCiAgICAgcHJpbnQoImIiLCBiKQotICAgIGZvciB4IGluIGJbJ3NldCddLml0ZXJ2YWx1ZXMoKToKKyAgICBmb3IgeCBpbiBiWydzZXQnXS52YWx1ZXMoKToKICAgICAgICAgcHJpbnQoeCkKICAgICBwcmludCgpCiAKQEAgLTI3Myw3ICsyNjksNyBAQAogICAgIGFbJ3NldDInXS5hZGQoIm8yIikKIAogICAgIHByaW50KCJhIiwgYSkKLSAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgIGZvciB4IGluIGEuaXRlbXMoKToKICAgICAgICAgcHJpbnQoeCkKICAgICBwcmludCgiLS0iKQogICAgIHByaW50KCJiIiwgYikKQEAgLTI4NywxMyArMjgzLDEzIEBACiAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICBwcmludCgiWWF5ISBkZWxldGVkIGtleSByYWlzZXMgZXJyb3IiKQogCi0gICAgaWYgYi5oYXNfa2V5KCdiJyk6CisgICAgaWYgJ2InIGluIGI6CiAgICAgICAgIHByaW50KCJCb28hIikKICAgICBlbHNlOgogICAgICAgICBwcmludCgiWWF5IC0gaGFzX2tleSB3aXRoIGRlbGV0ZSB3b3JrcyEiKQogCiAgICAgcHJpbnQoImEiLCBhKQotICAgIGZvciB4IGluIGEuaXRlcml0ZW1zKCk6CisgICAgZm9yIHggaW4gYS5pdGVtcygpOgogICAgICAgICBwcmludCh4KQogICAgIHByaW50KCItLSIpCiAgICAgcHJpbnQoImIiLCBiKQpAQCAtMzA0LDcgKzMwMCw3IEBACiAgICAgYi5fX3JldmVydGl0ZW1fXygnYicpCiAKICAgICBwcmludCgiYSIsIGEpCi0gICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICBmb3IgeCBpbiBhLml0ZW1zKCk6CiAgICAgICAgIHByaW50KHgpCiAgICAgcHJpbnQoIi0tIikKICAgICBwcmludCgiYiIsIGIpCkBAIC0zMTQsNyArMzEwLDcgQEAKIAogICAgIGIuX19yZXZlcnRpdGVtX18oJ2RpY3QnKQogICAgIHByaW50KCJhIiwgYSkKLSAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgIGZvciB4IGluIGEuaXRlbXMoKToKICAgICAgICAgcHJpbnQoeCkKICAgICBwcmludCgiLS0iKQogICAgIHByaW50KCJiIiwgYikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9fX2luaXRfXy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9fX2luaXRfXy5weQppbmRleCA1MDJhZDgzLi5mMDE5ZDQ4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvX19pbml0X18ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5CkBAIC0yMSwxMSArMjEsMTEgQEAKICMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KIAotX192ZXJzaW9uX18gPSAiMS4zMC4wIgorX192ZXJzaW9uX18gPSAiMS4zMi4wIgogCiBpbXBvcnQgc3lzCi1pZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcsIDMpOgotICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29ycnksIHB5dGhvbiAyLjcuMyBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGJpdGJha2UiKQoraWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCA0LCAwKToKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvcnJ5LCBweXRob24gMy40LjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgdmVyc2lvbiBvZiBiaXRiYWtlIikKIAogCiBjbGFzcyBCQkhhbmRsZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKQEAgLTg0LDggKzg0LDggQEAKICAgICBtYWlubG9nZ2VyLnBsYWluKCcnLmpvaW4oYXJncykpCiAKIGRlZiBkZWJ1ZyhsdmwsICphcmdzKToKLSAgICBpZiBpc2luc3RhbmNlKGx2bCwgYmFzZXN0cmluZyk6Ci0gICAgICAgIG1haW5sb2dnZXIud2FybigiUGFzc2VkIGludmFsaWQgZGVidWcgbGV2ZWwgJyVzJyB0byBiYi5kZWJ1ZyIsIGx2bCkKKyAgICBpZiBpc2luc3RhbmNlKGx2bCwgc3RyKToKKyAgICAgICAgbWFpbmxvZ2dlci53YXJuaW5nKCJQYXNzZWQgaW52YWxpZCBkZWJ1ZyBsZXZlbCAnJXMnIHRvIGJiLmRlYnVnIiwgbHZsKQogICAgICAgICBhcmdzID0gKGx2bCwpICsgYXJncwogICAgICAgICBsdmwgPSAxCiAgICAgbWFpbmxvZ2dlci5kZWJ1ZyhsdmwsICcnLmpvaW4oYXJncykpCkBAIC05NCw3ICs5NCw3IEBACiAgICAgbWFpbmxvZ2dlci5pbmZvKCcnLmpvaW4oYXJncykpCiAKIGRlZiB3YXJuKCphcmdzKToKLSAgICBtYWlubG9nZ2VyLndhcm4oJycuam9pbihhcmdzKSkKKyAgICBtYWlubG9nZ2VyLndhcm5pbmcoJycuam9pbihhcmdzKSkKIAogZGVmIGVycm9yKCphcmdzLCAqKmt3YXJncyk6CiAgICAgbWFpbmxvZ2dlci5lcnJvcignJy5qb2luKGFyZ3MpLCBleHRyYT1rd2FyZ3MpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvYnVpbGQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvYnVpbGQucHkKaW5kZXggZGI1MDcyYy4uYzRjOGFlYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2J1aWxkLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9idWlsZC5weQpAQCAtMzUsOCArMzUsOCBAQAogaW1wb3J0IGJiCiBpbXBvcnQgYmIubXNnCiBpbXBvcnQgYmIucHJvY2VzcwotZnJvbSBjb250ZXh0bGliIGltcG9ydCBuZXN0ZWQKLWZyb20gYmIgaW1wb3J0IGV2ZW50LCB1dGlscworaW1wb3J0IGJiLnByb2dyZXNzCitmcm9tIGJiIGltcG9ydCBkYXRhLCBldmVudCwgdXRpbHMKIAogYmJsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5CdWlsZCcpCkBAIC02MSw4ICs2MSwxMyBAQAogIyBpbiBhbGwgbmFtZXNwYWNlcywgaGVuY2Ugd2UgYWRkIHRoZW0gdG8gX19idWlsdGluc19fLgogIyBJZiB3ZSBkbyBub3QgZG8gdGhpcyBhbmQgdXNlIHRoZSBleGVjIGdsb2JhbHMsIHRoZXkgd2lsbAogIyBub3QgYmUgYXZhaWxhYmxlIHRvIHN1YmZ1bmN0aW9ucy4KLV9fYnVpbHRpbnNfX1snYmInXSA9IGJiCi1fX2J1aWx0aW5zX19bJ29zJ10gPSBvcworaWYgaGFzYXR0cihfX2J1aWx0aW5zX18sICdfX3NldGl0ZW1fXycpOgorICAgIGJ1aWx0aW5zID0gX19idWlsdGluc19fCitlbHNlOgorICAgIGJ1aWx0aW5zID0gX19idWlsdGluc19fLl9fZGljdF9fCisKK2J1aWx0aW5zWydiYiddID0gYmIKK2J1aWx0aW5zWydvcyddID0gb3MKIAogY2xhc3MgRnVuY0ZhaWxlZChFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lID0gTm9uZSwgbG9nZmlsZSA9IE5vbmUpOgpAQCAtMTMzLDYgKzEzOCwyNSBAQAogICAgICAgICBzdXBlcihUYXNrSW52YWxpZCwgc2VsZikuX19pbml0X18odGFzaywgTm9uZSwgbWV0YWRhdGEpCiAgICAgICAgIHNlbGYuX21lc3NhZ2UgPSAiTm8gc3VjaCB0YXNrICclcyciICUgdGFzawogCitjbGFzcyBUYXNrUHJvZ3Jlc3MoZXZlbnQuRXZlbnQpOgorICAgICIiIgorICAgIFRhc2sgbWFkZSBzb21lIHByb2dyZXNzIHRoYXQgY291bGQgYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIsIHVzdWFsbHkgaW4KKyAgICB0aGUgZm9ybSBvZiBhIHByb2dyZXNzIGJhciBvciBzaW1pbGFyLgorICAgIE5PVEU6IHRoaXMgY2xhc3MgZG9lcyBub3QgaW5oZXJpdCBmcm9tIFRhc2tCYXNlIHNpbmNlIGl0IGRvZXNuJ3QgbmVlZAorICAgIHRvIC0gaXQncyBmaXJlZCB3aXRoaW4gdGhlIHRhc2sgY29udGV4dCBpdHNlbGYsIHNvIHdlIGRvbid0IGhhdmUgYW55IG9mCisgICAgdGhlIGNvbnRleHQgaW5mb3JtYXRpb24gdGhhdCB5b3UgZG8gaW4gdGhlIGNhc2Ugb2YgdGhlIG90aGVyIGV2ZW50cy4KKyAgICBUaGUgZXZlbnQgUElEIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGljaCB0YXNrIGl0IGNhbWUgZnJvbS4KKyAgICBUaGUgcHJvZ3Jlc3MgdmFsdWUgaXMgbm9ybWFsbHkgMC0xMDAsIGJ1dCBjYW4gYWxzbyBiZSBuZWdhdGl2ZQorICAgIGluZGljYXRpbmcgdGhhdCBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIGJ1dCB3ZSBhcmVuJ3QgYWJsZSB0byBkZXRlcm1pbmUKKyAgICBob3cgbXVjaC4KKyAgICBUaGUgcmF0ZSBpcyBvcHRpb25hbCwgdGhpcyBpcyBzaW1wbHkgYW4gZXh0cmEgc3RyaW5nIHRvIGRpc3BsYXkgdG8gdGhlCisgICAgdXNlciBpZiBzcGVjaWZpZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2dyZXNzLCByYXRlPU5vbmUpOgorICAgICAgICBzZWxmLnByb2dyZXNzID0gcHJvZ3Jlc3MKKyAgICAgICAgc2VsZi5yYXRlID0gcmF0ZQorICAgICAgICBldmVudC5FdmVudC5fX2luaXRfXyhzZWxmKQorCiAKIGNsYXNzIExvZ1RlZShvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIG91dGZpbGUpOgpAQCAtMTY0LDExICsxODgsMTAgQEAKIGRlZiBleGVjX2Z1bmMoZnVuYywgZCwgZGlycyA9IE5vbmUsIHB5dGhvbmV4Y2VwdGlvbj1GYWxzZSk6CiAgICAgIiIiRXhlY3V0ZSBhIEJCICdmdW5jdGlvbiciIiIKIAotICAgIGJvZHkgPSBkLmdldFZhcihmdW5jLCBGYWxzZSkKLSAgICBpZiBub3QgYm9keToKLSAgICAgICAgaWYgYm9keSBpcyBOb25lOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkZ1bmN0aW9uICVzIGRvZXNuJ3QgZXhpc3QiLCBmdW5jKQotICAgICAgICByZXR1cm4KKyAgICB0cnk6CisgICAgICAgIG9sZGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgZXhjZXB0OgorICAgICAgICBvbGRjd2QgPSBOb25lCiAKICAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoZnVuYykKICAgICBjbGVhbmRpcnMgPSBmbGFncy5nZXQoJ2NsZWFuZGlycycpCkBAIC0xODcsOCArMjEwLDEzIEBACiAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYWRpcikKICAgICAgICAgYWRpciA9IGRpcnNbLTFdCiAgICAgZWxzZToKLSAgICAgICAgYWRpciA9IGQuZ2V0VmFyKCdCJywgVHJ1ZSkKLSAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGFkaXIpCisgICAgICAgIGFkaXIgPSBOb25lCisKKyAgICBib2R5ID0gZC5nZXRWYXIoZnVuYywgRmFsc2UpCisgICAgaWYgbm90IGJvZHk6CisgICAgICAgIGlmIGJvZHkgaXMgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJGdW5jdGlvbiAlcyBkb2Vzbid0IGV4aXN0IiwgZnVuYykKKyAgICAgICAgcmV0dXJuCiAKICAgICBpc3B5dGhvbiA9IGZsYWdzLmdldCgncHl0aG9uJykKIApAQCAtMjMzLDYgKzI2MSwxOCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXhlY19mdW5jX3NoZWxsKGZ1bmMsIGQsIHJ1bmZpbGUsIGN3ZD1hZGlyKQogCisgICAgdHJ5OgorICAgICAgICBjdXJjd2QgPSBvcy5nZXRjd2QoKQorICAgIGV4Y2VwdDoKKyAgICAgICAgY3VyY3dkID0gTm9uZQorCisgICAgaWYgb2xkY3dkIGFuZCBjdXJjd2QgIT0gb2xkY3dkOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi53YXJuKCJUYXNrICVzIGNoYW5nZWQgY3dkIHRvICVzIiAlIChmdW5jLCBjdXJjd2QpKQorICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKIF9mdW5jdGlvbmZtdCA9ICIiIgoge2Z1bmN0aW9ufShkKQogIiIiCkBAIC0yNDgsNyArMjg4LDggQEAKICAgICBpZiBjd2Q6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9sZGRpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIud2FybigiJXM6IENhbm5vdCBnZXQgY3dkOiAlcyIgJSAoZnVuYywgZSkpCiAgICAgICAgICAgICBvbGRkaXIgPSBOb25lCiAgICAgICAgIG9zLmNoZGlyKGN3ZCkKIApAQCAtMjc0LDggKzMxNSw4IEBACiAgICAgICAgIGlmIGN3ZCBhbmQgb2xkZGlyOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IENhbm5vdCByZXN0b3JlIGN3ZCAlczogJXMiICUgKGZ1bmMsIG9sZGRpciwgZSkpCiAKIGRlZiBzaGVsbF90cmFwX2NvZGUoKToKICAgICByZXR1cm4gJycnIyEvYmluL3NoXG4KQEAgLTMyMyw3ICszNjQsNyBAQAogZXhpdCAkcmV0CiAnJycpCiAKLSAgICBvcy5jaG1vZChydW5maWxlLCAwNzc1KQorICAgIG9zLmNobW9kKHJ1bmZpbGUsIDBvNzc1KQogCiAgICAgY21kID0gcnVuZmlsZQogICAgIGlmIGQuZ2V0VmFyRmxhZyhmdW5jLCAnZmFrZXJvb3QnLCBGYWxzZSk6CkBAIC0zMzYsNDEgKzM3Nyw2NCBAQAogICAgIGVsc2U6CiAgICAgICAgIGxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CiAKKyAgICBwcm9ncmVzcyA9IGQuZ2V0VmFyRmxhZyhmdW5jLCAncHJvZ3Jlc3MnLCBUcnVlKQorICAgIGlmIHByb2dyZXNzOgorICAgICAgICBpZiBwcm9ncmVzcyA9PSAncGVyY2VudCc6CisgICAgICAgICAgICAjIFVzZSBkZWZhdWx0IHJlZ2V4CisgICAgICAgICAgICBsb2dmaWxlID0gYmIucHJvZ3Jlc3MuQmFzaWNQcm9ncmVzc0hhbmRsZXIoZCwgb3V0ZmlsZT1sb2dmaWxlKQorICAgICAgICBlbGlmIHByb2dyZXNzLnN0YXJ0c3dpdGgoJ3BlcmNlbnQ6Jyk6CisgICAgICAgICAgICAjIFVzZSBzcGVjaWZpZWQgcmVnZXgKKyAgICAgICAgICAgIGxvZ2ZpbGUgPSBiYi5wcm9ncmVzcy5CYXNpY1Byb2dyZXNzSGFuZGxlcihkLCByZWdleD1wcm9ncmVzcy5zcGxpdCgnOicsIDEpWzFdLCBvdXRmaWxlPWxvZ2ZpbGUpCisgICAgICAgIGVsaWYgcHJvZ3Jlc3Muc3RhcnRzd2l0aCgnb3V0b2Y6Jyk6CisgICAgICAgICAgICAjIFVzZSBzcGVjaWZpZWQgcmVnZXgKKyAgICAgICAgICAgIGxvZ2ZpbGUgPSBiYi5wcm9ncmVzcy5PdXRPZlByb2dyZXNzSGFuZGxlcihkLCByZWdleD1wcm9ncmVzcy5zcGxpdCgnOicsIDEpWzFdLCBvdXRmaWxlPWxvZ2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCclczogaW52YWxpZCB0YXNrIHByb2dyZXNzIHZhcmZsYWcgdmFsdWUgIiVzIiwgaWdub3JpbmcnICUgKGZ1bmMsIHByb2dyZXNzKSkKKworICAgIGZpZm9idWZmZXIgPSBieXRlYXJyYXkoKQogICAgIGRlZiByZWFkZmlmbyhkYXRhKToKLSAgICAgICAgbGluZXMgPSBkYXRhLnNwbGl0KCdcMCcpCi0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnNwbGl0KCcgJywgMSkKLSAgICAgICAgICAgIGNtZCA9IHNwbGl0dmFsWzBdCi0gICAgICAgICAgICBpZiBsZW4oc3BsaXR2YWwpID4gMToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0dmFsWzFdCisgICAgICAgIG5vbmxvY2FsIGZpZm9idWZmZXIKKyAgICAgICAgZmlmb2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgd2hpbGUgZmlmb2J1ZmZlcjoKKyAgICAgICAgICAgIG1lc3NhZ2UsIHRva2VuLCBuZXh0bXNnID0gZmlmb2J1ZmZlci5wYXJ0aXRpb24oYiJcMDAiKQorICAgICAgICAgICAgaWYgdG9rZW46CisgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBtZXNzYWdlLnNwbGl0KGInICcsIDEpCisgICAgICAgICAgICAgICAgY21kID0gc3BsaXR2YWxbMF0uZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXR2YWxbMV0uZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnJworICAgICAgICAgICAgICAgIGlmIGNtZCA9PSAnYmJwbGFpbic6CisgICAgICAgICAgICAgICAgICAgIGJiLnBsYWluKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsaWYgY21kID09ICdiYm5vdGUnOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsaWYgY21kID09ICdiYndhcm4nOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsaWYgY21kID09ICdiYmVycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZmF0YWwnOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBjYWxsZXIgd2lsbCBjYWxsIGV4aXQgdGhlbXNlbHZlcywgc28gYmIuZXJyb3IoKSBpcworICAgICAgICAgICAgICAgICAgICAjIHdoYXQgd2Ugd2FudCBoZXJlIHJhdGhlciB0aGFuIGJiLmZhdGFsKCkKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZmF0YWxfbG9nJzoKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUsIGZvcmNlbG9nPVRydWUpCisgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZGVidWcnOgorICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IHZhbHVlLnNwbGl0KCcgJywgMSkKKyAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBpbnQoc3BsaXR2YWxbMF0pCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXR2YWxbMV0KKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcobGV2ZWwsIHZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlVucmVjb2duaXNlZCBjb21tYW5kICclcycgb24gRklGTyIgJSBjbWQpCisgICAgICAgICAgICAgICAgZmlmb2J1ZmZlciA9IG5leHRtc2cKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAnJwotICAgICAgICAgICAgaWYgY21kID09ICdiYnBsYWluJzoKLSAgICAgICAgICAgICAgICBiYi5wbGFpbih2YWx1ZSkKLSAgICAgICAgICAgIGVsaWYgY21kID09ICdiYm5vdGUnOgotICAgICAgICAgICAgICAgIGJiLm5vdGUodmFsdWUpCi0gICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJ3YXJuJzoKLSAgICAgICAgICAgICAgICBiYi53YXJuKHZhbHVlKQotICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZXJyb3InOgotICAgICAgICAgICAgICAgIGJiLmVycm9yKHZhbHVlKQotICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZmF0YWwnOgotICAgICAgICAgICAgICAgICMgVGhlIGNhbGxlciB3aWxsIGNhbGwgZXhpdCB0aGVtc2VsdmVzLCBzbyBiYi5lcnJvcigpIGlzCi0gICAgICAgICAgICAgICAgIyB3aGF0IHdlIHdhbnQgaGVyZSByYXRoZXIgdGhhbiBiYi5mYXRhbCgpCi0gICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUpCi0gICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJmYXRhbF9sb2cnOgotICAgICAgICAgICAgICAgIGJiLmVycm9yKHZhbHVlLCBmb3JjZWxvZz1UcnVlKQotICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZGVidWcnOgotICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gdmFsdWUuc3BsaXQoJyAnLCAxKQotICAgICAgICAgICAgICAgIGxldmVsID0gaW50KHNwbGl0dmFsWzBdKQotICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXR2YWxbMV0KLSAgICAgICAgICAgICAgICBiYi5kZWJ1ZyhsZXZlbCwgdmFsdWUpCisgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgIHRlbXBkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCiAgICAgZmlmb3BhdGggPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2ZpZm8uJXMnICUgb3MuZ2V0cGlkKCkpCiAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlmb3BhdGgpOgogICAgICAgICBvcy51bmxpbmsoZmlmb3BhdGgpCiAgICAgb3MubWtmaWZvKGZpZm9wYXRoKQotICAgIHdpdGggb3BlbihmaWZvcGF0aCwgJ3IrJykgYXMgZmlmbzoKKyAgICB3aXRoIG9wZW4oZmlmb3BhdGgsICdyK2InLCBidWZmZXJpbmc9MCkgYXMgZmlmbzoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYmIuZGVidWcoMiwgIkV4ZWN1dGluZyBzaGVsbCBmdW5jdGlvbiAlcyIgJSBmdW5jKQogCkBAIC01MDEsMjEgKzU2NSwzMiBAQAogCiAgICAgZmxhZ3MgPSBsb2NhbGRhdGEuZ2V0VmFyRmxhZ3ModGFzaykKIAotICAgIGV2ZW50LmZpcmUoVGFza1N0YXJ0ZWQodGFzaywgbG9nZm4sIGZsYWdzLCBsb2NhbGRhdGEpLCBsb2NhbGRhdGEpCiAgICAgdHJ5OgotICAgICAgICBmb3IgZnVuYyBpbiAocHJlZnVuY3Mgb3IgJycpLnNwbGl0KCk6Ci0gICAgICAgICAgICBleGVjX2Z1bmMoZnVuYywgbG9jYWxkYXRhKQotICAgICAgICBleGVjX2Z1bmModGFzaywgbG9jYWxkYXRhKQotICAgICAgICBmb3IgZnVuYyBpbiAocG9zdGZ1bmNzIG9yICcnKS5zcGxpdCgpOgotICAgICAgICAgICAgZXhlY19mdW5jKGZ1bmMsIGxvY2FsZGF0YSkKLSAgICBleGNlcHQgRnVuY0ZhaWxlZCBhcyBleGM6Ci0gICAgICAgIGlmIHF1aWV0ZXJyOgotICAgICAgICAgICAgZXZlbnQuZmlyZShUYXNrRmFpbGVkU2lsZW50KHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEpLCBsb2NhbGRhdGEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlcnJwcmludGVkID0gZXJyY2hrLnRyaWdnZXJlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudC5maXJlKFRhc2tTdGFydGVkKHRhc2ssIGxvZ2ZuLCBmbGFncywgbG9jYWxkYXRhKSwgbG9jYWxkYXRhKQorICAgICAgICBleGNlcHQgKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbiwgU3lzdGVtRXhpdCk6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBleGNlcHQgRnVuY0ZhaWxlZCBhcyBleGM6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCi0gICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSwgZXJycHJpbnRlZCksIGxvY2FsZGF0YSkKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gKHByZWZ1bmNzIG9yICcnKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGV4ZWNfZnVuYyhmdW5jLCBsb2NhbGRhdGEpCisgICAgICAgICAgICBleGVjX2Z1bmModGFzaywgbG9jYWxkYXRhKQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gKHBvc3RmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBleGVjX2Z1bmMoZnVuYywgbG9jYWxkYXRhKQorICAgICAgICBleGNlcHQgRnVuY0ZhaWxlZCBhcyBleGM6CisgICAgICAgICAgICBpZiBxdWlldGVycjoKKyAgICAgICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWRTaWxlbnQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSksIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJycHJpbnRlZCA9IGVycmNoay50cmlnZ2VyZWQKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICAgICAgZXZlbnQuZmlyZShUYXNrRmFpbGVkKHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEsIGVycnByaW50ZWQpLCBsb2NhbGRhdGEpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uOgorICAgICAgICAgICAgZXZlbnQuZmlyZShUYXNrRmFpbGVkKHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEsIFRydWUpLCBsb2NhbGRhdGEpCisgICAgICAgICAgICByZXR1cm4gMQogICAgIGZpbmFsbHk6CiAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKQEAgLTU3NSw3ICs2NTAsNyBAQAogICAgICAgICAgICAgZXZlbnQuZmlyZShmYWlsZWRldmVudCwgZCkKICAgICAgICAgcmV0dXJuIDEKIAotZGVmIHN0YW1wX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUsIGJhc2Vvbmx5PUZhbHNlKToKK2RlZiBzdGFtcF9pbnRlcm5hbCh0YXNrbmFtZSwgZCwgZmlsZV9uYW1lLCBiYXNlb25seT1GYWxzZSwgbm9leHRyYT1GYWxzZSk6CiAgICAgIiIiCiAgICAgSW50ZXJuYWwgc3RhbXAgaGVscGVyIGZ1bmN0aW9uCiAgICAgTWFrZXMgc3VyZSB0aGUgc3RhbXAgZGlyZWN0b3J5IGV4aXN0cwpAQCAtNTk4LDYgKzY3Myw4IEBACiAKICAgICBpZiBiYXNlb25seToKICAgICAgICAgcmV0dXJuIHN0YW1wCisgICAgaWYgbm9leHRyYToKKyAgICAgICAgZXh0cmFpbmZvID0gIiIKIAogICAgIGlmIG5vdCBzdGFtcDoKICAgICAgICAgcmV0dXJuCkBAIC02OTMsMTIgKzc3MCwxMiBAQAogICAgIHdpdGggb3Blbih0YWludGZuLCAndycpIGFzIHRhaW50ZjoKICAgICAgICAgdGFpbnRmLndyaXRlKHN0cih1dWlkLnV1aWQ0KCkpKQogCi1kZWYgc3RhbXBmaWxlKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUgPSBOb25lKToKK2RlZiBzdGFtcGZpbGUodGFza25hbWUsIGQsIGZpbGVfbmFtZSA9IE5vbmUsIG5vZXh0cmE9RmFsc2UpOgogICAgICIiIgogICAgIFJldHVybiB0aGUgc3RhbXAgZm9yIGEgZ2l2ZW4gdGFzawogICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCiAgICAgIiIiCi0gICAgcmV0dXJuIHN0YW1wX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUpCisgICAgcmV0dXJuIHN0YW1wX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUsIG5vZXh0cmE9bm9leHRyYSkKIAogZGVmIGFkZF90YXNrcyh0YXNrbGlzdCwgZCk6CiAgICAgdGFza19kZXBzID0gZC5nZXRWYXIoJ190YXNrX2RlcHMnLCBGYWxzZSkKQEAgLTc3NCw2ICs4NTEsNyBAQAogICAgIGJidGFza3MgPSBkLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpIG9yIFtdCiAgICAgaWYgdGFzayBpbiBiYnRhc2tzOgogICAgICAgICBiYnRhc2tzLnJlbW92ZSh0YXNrKQorICAgICAgICBkLmRlbFZhckZsYWcodGFzaywgJ3Rhc2snKQogICAgICAgICBkLnNldFZhcignX19CQlRBU0tTJywgYmJ0YXNrcykKIAogICAgIGQuZGVsVmFyRmxhZyh0YXNrLCAnZGVwcycpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGUucHkKaW5kZXggYWY1YjlmYi4uZGQ5Y2ZkZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jYWNoZS5weQpAQCAtMjgsMjIgKzI4LDE2IEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKLQogaW1wb3J0IG9zCitpbXBvcnQgc3lzCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IHBpY2tsZQogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKIGltcG9ydCBiYi51dGlscwogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5DYWNoZSIpCiAKLXRyeToKLSAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgcGlja2xlCi0gICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIgotICAgICAgICAgICAgICAgICJGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKLQotX19jYWNoZV92ZXJzaW9uX18gPSAiMTQ5IgorX19jYWNoZV92ZXJzaW9uX18gPSAiMTUwIgogCiBkZWYgZ2V0Q2FjaGVGaWxlKHBhdGgsIGZpbGVuYW1lLCBkYXRhX2hhc2gpOgogICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUgKyAiLiIgKyBkYXRhX2hhc2gpCkBAIC04MCw3ICs3NCw3IEBACiAgICAgICAgIG91dF9kaWN0ID0gZGljdCgodmFyLCBtZXRhZGF0YS5nZXRWYXJGbGFnKHZhciwgZmxhZywgVHJ1ZSkpCiAgICAgICAgICAgICAgICAgICAgIGZvciB2YXIgaW4gdmFybGlzdCkKICAgICAgICAgaWYgc3F1YXNoOgotICAgICAgICAgICAgcmV0dXJuIGRpY3QoKGssdikgZm9yIChrLHYpIGluIG91dF9kaWN0Lml0ZXJpdGVtcygpIGlmIHYpCisgICAgICAgICAgICByZXR1cm4gZGljdCgoayx2KSBmb3IgKGssdikgaW4gb3V0X2RpY3QuaXRlbXMoKSBpZiB2KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIG91dF9kaWN0CiAKQEAgLTI0MCw3ICsyMzQsNyBAQAogICAgICAgICBjYWNoZWRhdGEudW5pdmVyc2VfdGFyZ2V0LmFwcGVuZChzZWxmLnBuKQogCiAgICAgICAgIGNhY2hlZGF0YS5oYXNoZm5bZm5dID0gc2VsZi5oYXNoZmlsZW5hbWUKLSAgICAgICAgZm9yIHRhc2ssIHRhc2toYXNoIGluIHNlbGYuYmFzZXRhc2toYXNoZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciB0YXNrLCB0YXNraGFzaCBpbiBzZWxmLmJhc2V0YXNraGFzaGVzLml0ZW1zKCk6CiAgICAgICAgICAgICBpZGVudGlmaWVyID0gJyVzLiVzJyAlIChmbiwgdGFzaykKICAgICAgICAgICAgIGNhY2hlZGF0YS5iYXNldGFza2hhc2hbaWRlbnRpZmllcl0gPSB0YXNraGFzaAogCkBAIC0yNTAsMTQgKzI0NCwxMzYgQEAKICAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290ZGlyc1tmbl0gPSBzZWxmLmZha2Vyb290ZGlycwogICAgICAgICBjYWNoZWRhdGEuZXh0cmFkZXBzZnVuY1tmbl0gPSBzZWxmLmV4dHJhZGVwc2Z1bmMKIAorZGVmIHZpcnR1YWxmbjJyZWFsZm4odmlydHVhbGZuKToKKyAgICAiIiIKKyAgICBDb252ZXJ0IGEgdmlydHVhbCBmaWxlIG5hbWUgdG8gYSByZWFsIG9uZSArIHRoZSBhc3NvY2lhdGVkIHN1YmNsYXNzIGtleXdvcmQKKyAgICAiIiIKKyAgICBtYyA9ICIiCisgICAgaWYgdmlydHVhbGZuLnN0YXJ0c3dpdGgoJ211bHRpY29uZmlnOicpOgorICAgICAgICBlbGVtcyA9IHZpcnR1YWxmbi5zcGxpdCgnOicpCisgICAgICAgIG1jID0gZWxlbXNbMV0KKyAgICAgICAgdmlydHVhbGZuID0gIjoiLmpvaW4oZWxlbXNbMjpdKQorCisgICAgZm4gPSB2aXJ0dWFsZm4KKyAgICBjbHMgPSAiIgorICAgIGlmIHZpcnR1YWxmbi5zdGFydHN3aXRoKCd2aXJ0dWFsOicpOgorICAgICAgICBlbGVtcyA9IHZpcnR1YWxmbi5zcGxpdCgnOicpCisgICAgICAgIGNscyA9ICI6Ii5qb2luKGVsZW1zWzE6LTFdKQorICAgICAgICBmbiA9IGVsZW1zWy0xXQorCisgICAgcmV0dXJuIChmbiwgY2xzLCBtYykKKworZGVmIHJlYWxmbjJ2aXJ0dWFsKHJlYWxmbiwgY2xzLCBtYyk6CisgICAgIiIiCisgICAgQ29udmVydCBhIHJlYWwgZmlsZW5hbWUgKyB0aGUgYXNzb2NpYXRlZCBzdWJjbGFzcyBrZXl3b3JkIHRvIGEgdmlydHVhbCBmaWxlbmFtZQorICAgICIiIgorICAgIGlmIGNsczoKKyAgICAgICAgcmVhbGZuID0gInZpcnR1YWw6IiArIGNscyArICI6IiArIHJlYWxmbgorICAgIGlmIG1jOgorICAgICAgICByZWFsZm4gPSAibXVsdGljb25maWc6IiArIG1jICsgIjoiICsgcmVhbGZuCisgICAgcmV0dXJuIHJlYWxmbgorCitkZWYgdmFyaWFudDJ2aXJ0dWFsKHJlYWxmbiwgdmFyaWFudCk6CisgICAgIiIiCisgICAgQ29udmVydCBhIHJlYWwgZmlsZW5hbWUgKyB0aGUgYXNzb2NpYXRlZCBzdWJjbGFzcyBrZXl3b3JkIHRvIGEgdmlydHVhbCBmaWxlbmFtZQorICAgICIiIgorICAgIGlmIHZhcmlhbnQgPT0gIiI6CisgICAgICAgIHJldHVybiByZWFsZm4KKyAgICBpZiB2YXJpYW50LnN0YXJ0c3dpdGgoIm11bHRpY29uZmlnOiIpOgorICAgICAgICBlbGVtcyA9IHZhcmlhbnQuc3BsaXQoIjoiKQorICAgICAgICBpZiBlbGVtc1syXToKKyAgICAgICAgICAgIHJldHVybiAibXVsdGljb25maWc6IiArIGVsZW1zWzFdICsgIjp2aXJ0dWFsOiIgKyAiOiIuam9pbihlbGVtc1syOl0pICsgIjoiICsgcmVhbGZuCisgICAgICAgIHJldHVybiAibXVsdGljb25maWc6IiArIGVsZW1zWzFdICsgIjoiICsgcmVhbGZuCisgICAgcmV0dXJuICJ2aXJ0dWFsOiIgKyB2YXJpYW50ICsgIjoiICsgcmVhbGZuCisKK2RlZiBwYXJzZV9yZWNpcGUoYmJfZGF0YSwgYmJmaWxlLCBhcHBlbmRzLCBtYz0nJyk6CisgICAgIiIiCisgICAgUGFyc2UgYSByZWNpcGUKKyAgICAiIiIKKworICAgIGNoZGlyX2JhY2sgPSBGYWxzZQorCisgICAgYmJfZGF0YS5zZXRWYXIoIl9fQkJNVUxUSUNPTkZJRyIsIG1jKQorCisgICAgIyBleHBhbmQgdG1wZGlyIHRvIGluY2x1ZGUgdGhpcyB0b3BkaXIKKyAgICBiYl9kYXRhLnNldFZhcignVE1QRElSJywgYmJfZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpIG9yICIiKQorICAgIGJiZmlsZV9sb2MgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKGJiZmlsZSkpCisgICAgb2xkcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5nZXRjd2QoKSkKKyAgICBiYi5wYXJzZS5jYWNoZWRfbXRpbWVfbm9lcnJvcihiYmZpbGVfbG9jKQorCisgICAgIyBUaGUgQ29uZkhhbmRsZXIgZmlyc3QgbG9va3MgaWYgdGhlcmUgaXMgYSBUT1BESVIgYW5kIGlmIG5vdAorICAgICMgdGhlbiBpdCB3b3VsZCBjYWxsIGdldGN3ZCgpLgorICAgICMgUHJldmlvdXNseSwgd2UgY2hkaXIoKWVkIHRvIGJiZmlsZV9sb2MsIGNhbGxlZCB0aGUgaGFuZGxlcgorICAgICMgYW5kIGZpbmFsbHkgY2hkaXIoKWVkIGJhY2ssIGEgY291cGxlIG9mIHRob3VzYW5kIHRpbWVzLiBXZSBub3cKKyAgICAjIGp1c3QgZmlsbCBpbiBUT1BESVIgdG8gcG9pbnQgdG8gYmJmaWxlX2xvYyBpZiB0aGVyZSBpcyBubyBUT1BESVIgeWV0LgorICAgIGlmIG5vdCBiYl9kYXRhLmdldFZhcignVE9QRElSJywgRmFsc2UpOgorICAgICAgICBjaGRpcl9iYWNrID0gVHJ1ZQorICAgICAgICBiYl9kYXRhLnNldFZhcignVE9QRElSJywgYmJmaWxlX2xvYykKKyAgICB0cnk6CisgICAgICAgIGlmIGFwcGVuZHM6CisgICAgICAgICAgICBiYl9kYXRhLnNldFZhcignX19CQkFQUEVORCcsICIgIi5qb2luKGFwcGVuZHMpKQorICAgICAgICBiYl9kYXRhID0gYmIucGFyc2UuaGFuZGxlKGJiZmlsZSwgYmJfZGF0YSkKKyAgICAgICAgaWYgY2hkaXJfYmFjazoKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZHBhdGgpCisgICAgICAgIHJldHVybiBiYl9kYXRhCisgICAgZXhjZXB0OgorICAgICAgICBpZiBjaGRpcl9iYWNrOgorICAgICAgICAgICAgb3MuY2hkaXIob2xkcGF0aCkKKyAgICAgICAgcmFpc2UKIAogCi1jbGFzcyBDYWNoZShvYmplY3QpOgorCitjbGFzcyBOb0NhY2hlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YWJ1aWxkZXIpOgorICAgICAgICBzZWxmLmRhdGFidWlsZGVyID0gZGF0YWJ1aWxkZXIKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YWJ1aWxkZXIuZGF0YQorCisgICAgZGVmIGxvYWREYXRhRnVsbChzZWxmLCB2aXJ0dWFsZm4sIGFwcGVuZHMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgY29tcGxldGUgc2V0IG9mIGRhdGEgZm9yIGZuLgorICAgICAgICBUbyBkbyB0aGlzLCB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJQYXJzaW5nICVzIChmdWxsKSIgJSB2aXJ0dWFsZm4pCisgICAgICAgIChmbiwgdmlydHVhbCwgbWMpID0gdmlydHVhbGZuMnJlYWxmbih2aXJ0dWFsZm4pCisgICAgICAgIGJiX2RhdGEgPSBzZWxmLmxvYWRfYmJmaWxlKHZpcnR1YWxmbiwgYXBwZW5kcywgdmlydG9ubHk9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGJiX2RhdGFbdmlydHVhbF0KKworICAgIGRlZiBsb2FkX2JiZmlsZShzZWxmLCBiYmZpbGUsIGFwcGVuZHMsIHZpcnRvbmx5ID0gRmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCBhbmQgcGFyc2Ugb25lIC5iYiBidWlsZCBmaWxlCisgICAgICAgIFJldHVybiB0aGUgZGF0YSBhbmQgd2hldGhlciBwYXJzaW5nIHJlc3VsdGVkIGluIHRoZSBmaWxlIGJlaW5nIHNraXBwZWQKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgdmlydG9ubHk6CisgICAgICAgICAgICAoYmJmaWxlLCB2aXJ0dWFsLCBtYykgPSB2aXJ0dWFsZm4ycmVhbGZuKGJiZmlsZSkKKyAgICAgICAgICAgIGJiX2RhdGEgPSBzZWxmLmRhdGFidWlsZGVyLm1jZGF0YVttY10uY3JlYXRlQ29weSgpCisgICAgICAgICAgICBiYl9kYXRhLnNldFZhcigiX19PTkxZRklOQUxJU0UiLCB2aXJ0dWFsIG9yICJkZWZhdWx0IikKKyAgICAgICAgICAgIGRhdGFzdG9yZXMgPSBwYXJzZV9yZWNpcGUoYmJfZGF0YSwgYmJmaWxlLCBhcHBlbmRzLCBtYykKKyAgICAgICAgICAgIHJldHVybiBkYXRhc3RvcmVzCisKKyAgICAgICAgYmJfZGF0YSA9IHNlbGYuZGF0YS5jcmVhdGVDb3B5KCkKKyAgICAgICAgZGF0YXN0b3JlcyA9IHBhcnNlX3JlY2lwZShiYl9kYXRhLCBiYmZpbGUsIGFwcGVuZHMpCisKKyAgICAgICAgZm9yIG1jIGluIHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhOgorICAgICAgICAgICAgaWYgbm90IG1jOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBiYl9kYXRhID0gc2VsZi5kYXRhYnVpbGRlci5tY2RhdGFbbWNdLmNyZWF0ZUNvcHkoKQorICAgICAgICAgICAgbmV3c3RvcmVzID0gcGFyc2VfcmVjaXBlKGJiX2RhdGEsIGJiZmlsZSwgYXBwZW5kcywgbWMpCisgICAgICAgICAgICBmb3IgbnMgaW4gbmV3c3RvcmVzOgorICAgICAgICAgICAgICAgIGRhdGFzdG9yZXNbIm11bHRpY29uZmlnOiVzOiVzIiAlIChtYywgbnMpXSA9IG5ld3N0b3Jlc1tuc10KKworICAgICAgICByZXR1cm4gZGF0YXN0b3JlcworCitjbGFzcyBDYWNoZShOb0NhY2hlKToKICAgICAiIiIKICAgICBCaXRCYWtlIENhY2hlIGltcGxlbWVudGF0aW9uCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgZGF0YV9oYXNoLCBjYWNoZXNfYXJyYXkpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhYnVpbGRlciwgZGF0YV9oYXNoLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGRhdGFidWlsZGVyKQorICAgICAgICBkYXRhID0gZGF0YWJ1aWxkZXIuZGF0YQorCiAgICAgICAgICMgUGFzcyBjYWNoZXNfYXJyYXkgaW5mb3JtYXRpb24gaW50byBDYWNoZSBDb25zdHJ1Y3RvcgogICAgICAgICAjIEl0IHdpbGwgYmUgdXNlZCBsYXRlciBmb3IgZGVjaWRpbmcgd2hldGhlciB3ZSAKICAgICAgICAgIyBuZWVkIGV4dHJhIGNhY2hlIGZpbGUgZHVtcC9sb2FkIHN1cHBvcnQgCkBAIC0yNjYsNyArMzgyLDYgQEAKICAgICAgICAgc2VsZi5jbGVhbiA9IHNldCgpCiAgICAgICAgIHNlbGYuY2hlY2tlZCA9IHNldCgpCiAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZSA9IHt9Ci0gICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKICAgICAgICAgc2VsZi5kYXRhX2ZuID0gTm9uZQogICAgICAgICBzZWxmLmNhY2hlY2xlYW4gPSBUcnVlCiAgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gZGF0YV9oYXNoCkBAIC0yODYsNzIgKzQwMSw3NCBAQAogICAgICAgICBjYWNoZV9vayA9IFRydWUKICAgICAgICAgaWYgc2VsZi5jYWNoZXNfYXJyYXk6CiAgICAgICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCBjYWNoZV9jbGFzcy5jYWNoZWZpbGUsIHNlbGYuZGF0YV9oYXNoKQotICAgICAgICAgICAgICAgICAgICBjYWNoZV9vayA9IGNhY2hlX29rIGFuZCBvcy5wYXRoLmV4aXN0cyhjYWNoZWZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlX2NsYXNzLmluaXRfY2FjaGVEYXRhKHNlbGYpCisgICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICAgICAgY2FjaGVfb2sgPSBjYWNoZV9vayBhbmQgb3MucGF0aC5leGlzdHMoY2FjaGVmaWxlKQorICAgICAgICAgICAgICAgIGNhY2hlX2NsYXNzLmluaXRfY2FjaGVEYXRhKHNlbGYpCiAgICAgICAgIGlmIGNhY2hlX29rOgogICAgICAgICAgICAgc2VsZi5sb2FkX2NhY2hlZmlsZSgpCiAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5jYWNoZWZpbGUpOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dCBvZiBkYXRlIGNhY2hlIGZvdW5kLCByZWJ1aWxkaW5nLi4uIikKIAogICAgIGRlZiBsb2FkX2NhY2hlZmlsZShzZWxmKToKLSAgICAgICAgIyBGaXJzdGx5LCB1c2luZyBjb3JlIGNhY2hlIGZpbGUgaW5mb3JtYXRpb24gZm9yCi0gICAgICAgICMgdmFsaWQgY2hlY2tpbmcKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6Ci0gICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLlVucGlja2xlcihjYWNoZWZpbGUpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY2FjaGVfdmVyID0gcGlja2xlZC5sb2FkKCkKLSAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlciA9IHBpY2tsZWQubG9hZCgpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdJbnZhbGlkIGNhY2hlLCByZWJ1aWxkaW5nLi4uJykKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgaWYgY2FjaGVfdmVyICE9IF9fY2FjaGVfdmVyc2lvbl9fOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDYWNoZSB2ZXJzaW9uIG1pc21hdGNoLCByZWJ1aWxkaW5nLi4uJykKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGVsaWYgYml0YmFrZV92ZXIgIT0gYmIuX192ZXJzaW9uX186Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0JpdGJha2UgdmVyc2lvbiBtaXNtYXRjaCwgcmVidWlsZGluZy4uLicpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLQogICAgICAgICBjYWNoZXNpemUgPSAwCiAgICAgICAgIHByZXZpb3VzX3Byb2dyZXNzID0gMAogICAgICAgICBwcmV2aW91c19wZXJjZW50ID0gMAogCiAgICAgICAgICMgQ2FsY3VsYXRlIHRoZSBjb3JyZWN0IGNhY2hlc2l6ZSBvZiBhbGwgdGhvc2UgY2FjaGUgZmlsZXMKICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgotICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6Ci0gICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNhY2hlZmlsZSwgInJiIikgYXMgY2FjaGVmaWxlOgotICAgICAgICAgICAgICAgICAgICBjYWNoZXNpemUgKz0gb3MuZnN0YXQoY2FjaGVmaWxlLmZpbGVubygpKS5zdF9zaXplCisgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZWZpbGUsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICBjYWNoZXNpemUgKz0gb3MuZnN0YXQoY2FjaGVmaWxlLmZpbGVubygpKS5zdF9zaXplCiAKICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKGNhY2hlc2l6ZSksIHNlbGYuZGF0YSkKICAgICAgICAgCiAgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKLSAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgotICAgICAgICAgICAgICAgIGNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCBjYWNoZV9jbGFzcy5jYWNoZWZpbGUsIHNlbGYuZGF0YV9oYXNoKQotICAgICAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZWZpbGUsICJyYiIpIGFzIGNhY2hlZmlsZToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5VbnBpY2tsZXIoY2FjaGVmaWxlKSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIGNhY2hlZmlsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBwaWNrbGVkLmxvYWQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGlja2xlZC5sb2FkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVwZW5kc19jYWNoZS5oYXNfa2V5KGtleSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX2NhY2hlW2tleV0uYXBwZW5kKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlcGVuZHNfY2FjaGVba2V5XSA9IFt2YWx1ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgb25seSBmaXJlIGV2ZW50cyBvbiBldmVuIHBlcmNlbnRhZ2UgYm91bmRhcmllcwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9ncmVzcyA9IGNhY2hlZmlsZS50ZWxsKCkgKyBwcmV2aW91c19wcm9ncmVzcwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9wZXJjZW50ID0gMTAwICogY3VycmVudF9wcm9ncmVzcyAvIGNhY2hlc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudF9wZXJjZW50ID4gcHJldmlvdXNfcGVyY2VudDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19wZXJjZW50ID0gY3VycmVudF9wZXJjZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyhjdXJyZW50X3Byb2dyZXNzLCBjYWNoZXNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhKQorICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5VbnBpY2tsZXIoY2FjaGVmaWxlKQorICAgICAgICAgICAgICAgICMgQ2hlY2sgY2FjaGUgdmVyc2lvbiBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVfdmVyID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgYml0YmFrZV92ZXIgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdJbnZhbGlkIGNhY2hlLCByZWJ1aWxkaW5nLi4uJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcHJvZ3Jlc3MgKz0gY3VycmVudF9wcm9ncmVzcworICAgICAgICAgICAgICAgIGlmIGNhY2hlX3ZlciAhPSBfX2NhY2hlX3ZlcnNpb25fXzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NhY2hlIHZlcnNpb24gbWlzbWF0Y2gsIHJlYnVpbGRpbmcuLi4nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbGlmIGJpdGJha2VfdmVyICE9IGJiLl9fdmVyc2lvbl9fOgorICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0JpdGJha2UgdmVyc2lvbiBtaXNtYXRjaCwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgICMgTG9hZCB0aGUgcmVzdCBvZiB0aGUgY2FjaGUgZmlsZQorICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvZ3Jlc3MgPSAwCisgICAgICAgICAgICAgICAgd2hpbGUgY2FjaGVmaWxlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXMgZnJvbSBleHRyYXMgY2FjaGUgaXMgbm90IGEgc3RyaW5nPyIgJSBrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlcyBmcm9tIGV4dHJhcyBjYWNoZSBpcyBub3QgYSBSZWNpcGVJbmZvQ29tbW9uIGNsYXNzPyIgJSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuZGVwZW5kc19jYWNoZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtrZXldLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtrZXldID0gW3ZhbHVlXQorICAgICAgICAgICAgICAgICAgICAjIG9ubHkgZmlyZSBldmVudHMgb24gZXZlbiBwZXJjZW50YWdlIGJvdW5kYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9ncmVzcyA9IGNhY2hlZmlsZS50ZWxsKCkgKyBwcmV2aW91c19wcm9ncmVzcworICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3BlcmNlbnQgPSAxMDAgKiBjdXJyZW50X3Byb2dyZXNzIC8gY2FjaGVzaXplCisgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyY2VudCA+IHByZXZpb3VzX3BlcmNlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19wZXJjZW50ID0gY3VycmVudF9wZXJjZW50CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKGN1cnJlbnRfcHJvZ3Jlc3MsIGNhY2hlc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgICAgIHByZXZpb3VzX3Byb2dyZXNzICs9IGN1cnJlbnRfcHJvZ3Jlc3MKIAogICAgICAgICAjIE5vdGU6IGRlcGVuZHMgY2FjaGUgbnVtYmVyIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcnNpbmcgZmlsZSBudW1iZXJzLgogICAgICAgICAjIFRoZSBzYW1lIGZpbGUgaGFzIHNldmVyYWwgY2FjaGVzLCBzdGlsbCByZWdhcmRlZCBhcyBvbmUgaXRlbSBpbiB0aGUgY2FjaGUKQEAgLTM1OSw2OSArNDc2LDMzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLmRlcGVuZHNfY2FjaGUpKSwKICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEpCiAKLSAgICAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHZpcnR1YWxmbjJyZWFsZm4odmlydHVhbGZuKToKLSAgICAgICAgIiIiCi0gICAgICAgIENvbnZlcnQgYSB2aXJ0dWFsIGZpbGUgbmFtZSB0byBhIHJlYWwgb25lICsgdGhlIGFzc29jaWF0ZWQgc3ViY2xhc3Mga2V5d29yZAotICAgICAgICAiIiIKLQotICAgICAgICBmbiA9IHZpcnR1YWxmbgotICAgICAgICBjbHMgPSAiIgotICAgICAgICBpZiB2aXJ0dWFsZm4uc3RhcnRzd2l0aCgndmlydHVhbDonKToKLSAgICAgICAgICAgIGVsZW1zID0gdmlydHVhbGZuLnNwbGl0KCc6JykKLSAgICAgICAgICAgIGNscyA9ICI6Ii5qb2luKGVsZW1zWzE6LTFdKQotICAgICAgICAgICAgZm4gPSBlbGVtc1stMV0KLSAgICAgICAgcmV0dXJuIChmbiwgY2xzKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiByZWFsZm4ydmlydHVhbChyZWFsZm4sIGNscyk6Ci0gICAgICAgICIiIgotICAgICAgICBDb252ZXJ0IGEgcmVhbCBmaWxlbmFtZSArIHRoZSBhc3NvY2lhdGVkIHN1YmNsYXNzIGtleXdvcmQgdG8gYSB2aXJ0dWFsIGZpbGVuYW1lCi0gICAgICAgICIiIgotICAgICAgICBpZiBjbHMgPT0gIiI6Ci0gICAgICAgICAgICByZXR1cm4gcmVhbGZuCi0gICAgICAgIHJldHVybiAidmlydHVhbDoiICsgY2xzICsgIjoiICsgcmVhbGZuCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbG9hZERhdGFGdWxsKGNscywgdmlydHVhbGZuLCBhcHBlbmRzLCBjZmdEYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBhIGNvbXBsZXRlIHNldCBvZiBkYXRhIGZvciBmbi4KLSAgICAgICAgVG8gZG8gdGhpcywgd2UgbmVlZCB0byBwYXJzZSB0aGUgZmlsZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgKGZuLCB2aXJ0dWFsKSA9IGNscy52aXJ0dWFsZm4ycmVhbGZuKHZpcnR1YWxmbikKLQotICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlBhcnNpbmcgJXMgKGZ1bGwpIiwgZm4pCi0KLSAgICAgICAgY2ZnRGF0YS5zZXRWYXIoIl9fT05MWUZJTkFMSVNFIiwgdmlydHVhbCBvciAiZGVmYXVsdCIpCi0gICAgICAgIGJiX2RhdGEgPSBjbHMubG9hZF9iYmZpbGUoZm4sIGFwcGVuZHMsIGNmZ0RhdGEpCi0gICAgICAgIHJldHVybiBiYl9kYXRhW3ZpcnR1YWxdCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcGFyc2UoY2xzLCBmaWxlbmFtZSwgYXBwZW5kcywgY29uZmlnZGF0YSwgY2FjaGVzX2FycmF5KToKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZmlsZW5hbWUsIGFwcGVuZHMpOgogICAgICAgICAiIiJQYXJzZSB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLCByZXR1cm5pbmcgdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiIiIgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlBhcnNpbmcgJXMiLCBmaWxlbmFtZSkKICAgICAgICAgaW5mb3MgPSBbXQotICAgICAgICBkYXRhc3RvcmVzID0gY2xzLmxvYWRfYmJmaWxlKGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhKQorICAgICAgICBkYXRhc3RvcmVzID0gc2VsZi5sb2FkX2JiZmlsZShmaWxlbmFtZSwgYXBwZW5kcykKICAgICAgICAgZGVwZW5kcyA9IFtdCi0gICAgICAgIGZvciB2YXJpYW50LCBkYXRhIGluIHNvcnRlZChkYXRhc3RvcmVzLml0ZXJpdGVtcygpLAorICAgICAgICB2YXJpYW50cyA9IFtdCisgICAgICAgICMgUHJvY2VzcyB0aGUgInJlYWwiIGZuIGxhc3Qgc28gd2UgY2FuIHN0b3JlIHZhcmlhbnRzIGxpc3QKKyAgICAgICAgZm9yIHZhcmlhbnQsIGRhdGEgaW4gc29ydGVkKGRhdGFzdG9yZXMuaXRlbXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgaTogaVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2U9VHJ1ZSk6Ci0gICAgICAgICAgICB2aXJ0dWFsZm4gPSBjbHMucmVhbGZuMnZpcnR1YWwoZmlsZW5hbWUsIHZhcmlhbnQpCisgICAgICAgICAgICB2aXJ0dWFsZm4gPSB2YXJpYW50MnZpcnR1YWwoZmlsZW5hbWUsIHZhcmlhbnQpCisgICAgICAgICAgICB2YXJpYW50cy5hcHBlbmQodmFyaWFudCkKICAgICAgICAgICAgIGRlcGVuZHMgPSBkZXBlbmRzICsgKGRhdGEuZ2V0VmFyKCJfX2RlcGVuZHMiLCBGYWxzZSkgb3IgW10pCiAgICAgICAgICAgICBpZiBkZXBlbmRzIGFuZCBub3QgdmFyaWFudDoKICAgICAgICAgICAgICAgICBkYXRhLnNldFZhcigiX19kZXBlbmRzIiwgZGVwZW5kcykKLQorICAgICAgICAgICAgaWYgdmlydHVhbGZuID09IGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJfX1ZBUklBTlRTIiwgIiAiLmpvaW4odmFyaWFudHMpKQogICAgICAgICAgICAgaW5mb19hcnJheSA9IFtdCi0gICAgICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gY2FjaGVzX2FycmF5OgotICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgotICAgICAgICAgICAgICAgICAgICBpbmZvID0gY2FjaGVfY2xhc3MoZmlsZW5hbWUsIGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGluZm9fYXJyYXkuYXBwZW5kKGluZm8pCisgICAgICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICAgICAgaW5mbyA9IGNhY2hlX2NsYXNzKGZpbGVuYW1lLCBkYXRhKQorICAgICAgICAgICAgICAgIGluZm9fYXJyYXkuYXBwZW5kKGluZm8pCiAgICAgICAgICAgICBpbmZvcy5hcHBlbmQoKHZpcnR1YWxmbiwgaW5mb19hcnJheSkpCiAKICAgICAgICAgcmV0dXJuIGluZm9zCiAKLSAgICBkZWYgbG9hZChzZWxmLCBmaWxlbmFtZSwgYXBwZW5kcywgY29uZmlnZGF0YSk6CisgICAgZGVmIGxvYWQoc2VsZiwgZmlsZW5hbWUsIGFwcGVuZHMpOgogICAgICAgICAiIiJPYnRhaW4gdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKICAgICAgICAgdXNpbmcgY2FjaGVkIHZhbHVlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBwYXJzaW5nLgogCkBAIC00MzUsMjEgKzUxNiwyMCBAQAogICAgICAgICAgICAgIyBpbmZvX2FycmF5IGl0ZW0gaXMgYSBsaXN0IG9mIFtDb3JlUmVjaXBlSW5mbywgWFhYUmVjaXBlSW5mb10KICAgICAgICAgICAgIGluZm9fYXJyYXkgPSBzZWxmLmRlcGVuZHNfY2FjaGVbZmlsZW5hbWVdCiAgICAgICAgICAgICBmb3IgdmFyaWFudCBpbiBpbmZvX2FycmF5WzBdLnZhcmlhbnRzOgotICAgICAgICAgICAgICAgIHZpcnR1YWxmbiA9IHNlbGYucmVhbGZuMnZpcnR1YWwoZmlsZW5hbWUsIHZhcmlhbnQpCisgICAgICAgICAgICAgICAgdmlydHVhbGZuID0gdmFyaWFudDJ2aXJ0dWFsKGZpbGVuYW1lLCB2YXJpYW50KQogICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgodmlydHVhbGZuLCBzZWxmLmRlcGVuZHNfY2FjaGVbdmlydHVhbGZuXSkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlBhcnNpbmcgJXMiLCBmaWxlbmFtZSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhLCBzZWxmLmNhY2hlc19hcnJheSkKIAogICAgICAgICByZXR1cm4gY2FjaGVkLCBpbmZvcwogCi0gICAgZGVmIGxvYWREYXRhKHNlbGYsIGZuLCBhcHBlbmRzLCBjZmdEYXRhLCBjYWNoZURhdGEpOgorICAgIGRlZiBsb2FkRGF0YShzZWxmLCBmbiwgYXBwZW5kcywgY2FjaGVEYXRhKToKICAgICAgICAgIiIiTG9hZCB0aGUgcmVjaXBlIGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgZmlsZW5hbWUsCiAgICAgICAgIHBhcnNpbmcgYW5kIGFkZGluZyB0byB0aGUgY2FjaGUgaWYgbmVjZXNzYXJ5LCBhbmQgYWRkaW5nCiAgICAgICAgIHRoZSByZWNpcGUgaW5mb3JtYXRpb24gdG8gdGhlIHN1cHBsaWVkIENhY2hlRGF0YSBpbnN0YW5jZS4iIiIKICAgICAgICAgc2tpcHBlZCwgdmlydHVhbHMgPSAwLCAwCiAKLSAgICAgICAgY2FjaGVkLCBpbmZvcyA9IHNlbGYubG9hZChmbiwgYXBwZW5kcywgY2ZnRGF0YSkKKyAgICAgICAgY2FjaGVkLCBpbmZvcyA9IHNlbGYubG9hZChmbiwgYXBwZW5kcykKICAgICAgICAgZm9yIHZpcnR1YWxmbiwgaW5mb19hcnJheSBpbiBpbmZvczoKICAgICAgICAgICAgIGlmIGluZm9fYXJyYXlbMF0uc2tpcHBlZDoKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlNraXBwaW5nICVzOiAlcyIsIHZpcnR1YWxmbiwgaW5mb19hcnJheVswXS5za2lwcmVhc29uKQpAQCAtNTU3LDE2ICs2MzcsMTkgQEAKIAogICAgICAgICBpbnZhbGlkID0gRmFsc2UKICAgICAgICAgZm9yIGNscyBpbiBpbmZvX2FycmF5WzBdLnZhcmlhbnRzOgotICAgICAgICAgICAgdmlydHVhbGZuID0gc2VsZi5yZWFsZm4ydmlydHVhbChmbiwgY2xzKQorICAgICAgICAgICAgdmlydHVhbGZuID0gdmFyaWFudDJ2aXJ0dWFsKGZuLCBjbHMpCiAgICAgICAgICAgICBzZWxmLmNsZWFuLmFkZCh2aXJ0dWFsZm4pCiAgICAgICAgICAgICBpZiB2aXJ0dWFsZm4gbm90IGluIHNlbGYuZGVwZW5kc19jYWNoZToKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcyBpcyBub3QgY2FjaGVkIiwgdmlydHVhbGZuKQogICAgICAgICAgICAgICAgIGludmFsaWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGxlbihzZWxmLmRlcGVuZHNfY2FjaGVbdmlydHVhbGZuXSkgIT0gbGVuKHNlbGYuY2FjaGVzX2FycmF5KToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiBFeHRyYSBjYWNoZXMgbWlzc2luZyBmb3IgJXM/IiAlIHZpcnR1YWxmbikKKyAgICAgICAgICAgICAgICBpbnZhbGlkID0gVHJ1ZQogCiAgICAgICAgICMgSWYgYW55IG9uZSBvZiB0aGUgdmFyaWFudHMgaXMgbm90IHByZXNlbnQsIG1hcmsgYXMgaW52YWxpZCBmb3IgYWxsCiAgICAgICAgIGlmIGludmFsaWQ6CiAgICAgICAgICAgICBmb3IgY2xzIGluIGluZm9fYXJyYXlbMF0udmFyaWFudHM6Ci0gICAgICAgICAgICAgICAgdmlydHVhbGZuID0gc2VsZi5yZWFsZm4ydmlydHVhbChmbiwgY2xzKQorICAgICAgICAgICAgICAgIHZpcnR1YWxmbiA9IHZhcmlhbnQydmlydHVhbChmbiwgY2xzKQogICAgICAgICAgICAgICAgIGlmIHZpcnR1YWxmbiBpbiBzZWxmLmNsZWFuOgogICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiBSZW1vdmluZyAlcyBmcm9tIGNhY2hlIiwgdmlydHVhbGZuKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFuLnJlbW92ZSh2aXJ0dWFsZm4pCkBAIC02MDMsMzAgKzY4NiwxOSBAQAogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZSBpcyBjbGVhbiwgbm90IHNhdmluZy4iKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgZmlsZV9kaWN0ID0ge30KLSAgICAgICAgcGlja2xlcl9kaWN0ID0ge30KICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgotICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6Ci0gICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGNhY2hlX2NsYXNzLl9fbmFtZV9fCi0gICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCi0gICAgICAgICAgICAgICAgZmlsZV9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gb3BlbihjYWNoZWZpbGUsICJ3YiIpCi0gICAgICAgICAgICAgICAgcGlja2xlcl9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gIHBpY2tsZS5QaWNrbGVyKGZpbGVfZGljdFtjYWNoZV9jbGFzc19uYW1lXSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgIHBpY2tsZXJfZGljdFsnQ29yZVJlY2lwZUluZm8nXS5kdW1wKF9fY2FjaGVfdmVyc2lvbl9fKQotICAgICAgICBwaWNrbGVyX2RpY3RbJ0NvcmVSZWNpcGVJbmZvJ10uZHVtcChiYi5fX3ZlcnNpb25fXykKKyAgICAgICAgICAgIGNhY2hlX2NsYXNzX25hbWUgPSBjYWNoZV9jbGFzcy5fX25hbWVfXworICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuUGlja2xlcihmLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKyAgICAgICAgICAgICAgICBwLmR1bXAoX19jYWNoZV92ZXJzaW9uX18pCisgICAgICAgICAgICAgICAgcC5kdW1wKGJiLl9fdmVyc2lvbl9fKQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBrZXksIGluZm9fYXJyYXkgaW4gc2VsZi5kZXBlbmRzX2NhY2hlLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIGZvciBpbmZvIGluIGluZm9fYXJyYXk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5mbywgUmVjaXBlSW5mb0NvbW1vbik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9jbGFzc19uYW1lID0gaW5mby5fX2NsYXNzX18uX19uYW1lX18KLSAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZXJfZGljdFtjYWNoZV9jbGFzc19uYW1lXS5kdW1wKGtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZXJfZGljdFtjYWNoZV9jbGFzc19uYW1lXS5kdW1wKGluZm8pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlX2NsYXNzX25hbWUgPSBjYWNoZV9jbGFzcy5fX25hbWVfXwotICAgICAgICAgICAgICAgICAgICBmaWxlX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0uY2xvc2UoKQorICAgICAgICAgICAgICAgIGZvciBrZXksIGluZm9fYXJyYXkgaW4gc2VsZi5kZXBlbmRzX2NhY2hlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvIGluIGluZm9fYXJyYXk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGluZm8sIFJlY2lwZUluZm9Db21tb24pIGFuZCBpbmZvLl9fY2xhc3NfXy5fX25hbWVfXyA9PSBjYWNoZV9jbGFzc19uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZHVtcChrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5kdW1wKGluZm8pCiAKICAgICAgICAgZGVsIHNlbGYuZGVwZW5kc19jYWNoZQogCkBAIC02NTQsNTAgKzcyNiwxMyBAQAogICAgICAgICBTYXZlIGRhdGEgd2UgbmVlZCBpbnRvIHRoZSBjYWNoZQogICAgICAgICAiIiIKIAotICAgICAgICByZWFsZm4gPSBzZWxmLnZpcnR1YWxmbjJyZWFsZm4oZmlsZV9uYW1lKVswXQorICAgICAgICByZWFsZm4gPSB2aXJ0dWFsZm4ycmVhbGZuKGZpbGVfbmFtZSlbMF0KIAogICAgICAgICBpbmZvX2FycmF5ID0gW10KICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgotICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6Ci0gICAgICAgICAgICAgICAgaW5mb19hcnJheS5hcHBlbmQoY2FjaGVfY2xhc3MocmVhbGZuLCBkYXRhKSkKKyAgICAgICAgICAgIGluZm9fYXJyYXkuYXBwZW5kKGNhY2hlX2NsYXNzKHJlYWxmbiwgZGF0YSkpCiAgICAgICAgIHNlbGYuYWRkX2luZm8oZmlsZV9uYW1lLCBpbmZvX2FycmF5LCBjYWNoZURhdGEsIHBhcnNlZCkKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgbG9hZF9iYmZpbGUoYmJmaWxlLCBhcHBlbmRzLCBjb25maWcpOgotICAgICAgICAiIiIKLSAgICAgICAgTG9hZCBhbmQgcGFyc2Ugb25lIC5iYiBidWlsZCBmaWxlCi0gICAgICAgIFJldHVybiB0aGUgZGF0YSBhbmQgd2hldGhlciBwYXJzaW5nIHJlc3VsdGVkIGluIHRoZSBmaWxlIGJlaW5nIHNraXBwZWQKLSAgICAgICAgIiIiCi0gICAgICAgIGNoZGlyX2JhY2sgPSBGYWxzZQotCi0gICAgICAgIGZyb20gYmIgaW1wb3J0IHBhcnNlCi0KLSAgICAgICAgIyBleHBhbmQgdG1wZGlyIHRvIGluY2x1ZGUgdGhpcyB0b3BkaXIKLSAgICAgICAgY29uZmlnLnNldFZhcignVE1QRElSJywgY29uZmlnLmdldFZhcignVE1QRElSJywgVHJ1ZSkgb3IgIiIpCi0gICAgICAgIGJiZmlsZV9sb2MgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKGJiZmlsZSkpCi0gICAgICAgIG9sZHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MuZ2V0Y3dkKCkpCi0gICAgICAgIHBhcnNlLmNhY2hlZF9tdGltZV9ub2Vycm9yKGJiZmlsZV9sb2MpCi0gICAgICAgIGJiX2RhdGEgPSBjb25maWcuY3JlYXRlQ29weSgpCi0gICAgICAgICMgVGhlIENvbmZIYW5kbGVyIGZpcnN0IGxvb2tzIGlmIHRoZXJlIGlzIGEgVE9QRElSIGFuZCBpZiBub3QKLSAgICAgICAgIyB0aGVuIGl0IHdvdWxkIGNhbGwgZ2V0Y3dkKCkuCi0gICAgICAgICMgUHJldmlvdXNseSwgd2UgY2hkaXIoKWVkIHRvIGJiZmlsZV9sb2MsIGNhbGxlZCB0aGUgaGFuZGxlcgotICAgICAgICAjIGFuZCBmaW5hbGx5IGNoZGlyKCllZCBiYWNrLCBhIGNvdXBsZSBvZiB0aG91c2FuZCB0aW1lcy4gV2Ugbm93Ci0gICAgICAgICMganVzdCBmaWxsIGluIFRPUERJUiB0byBwb2ludCB0byBiYmZpbGVfbG9jIGlmIHRoZXJlIGlzIG5vIFRPUERJUiB5ZXQuCi0gICAgICAgIGlmIG5vdCBiYl9kYXRhLmdldFZhcignVE9QRElSJywgRmFsc2UpOgotICAgICAgICAgICAgY2hkaXJfYmFjayA9IFRydWUKLSAgICAgICAgICAgIGJiX2RhdGEuc2V0VmFyKCdUT1BESVInLCBiYmZpbGVfbG9jKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBhcHBlbmRzOgotICAgICAgICAgICAgICAgIGJiX2RhdGEuc2V0VmFyKCdfX0JCQVBQRU5EJywgIiAiLmpvaW4oYXBwZW5kcykpCi0gICAgICAgICAgICBiYl9kYXRhID0gcGFyc2UuaGFuZGxlKGJiZmlsZSwgYmJfZGF0YSkKLSAgICAgICAgICAgIGlmIGNoZGlyX2JhY2s6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIob2xkcGF0aCkKLSAgICAgICAgICAgIHJldHVybiBiYl9kYXRhCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIGNoZGlyX2JhY2s6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIob2xkcGF0aCkKLSAgICAgICAgICAgIHJhaXNlCi0KIAogZGVmIGluaXQoY29va2VyKToKICAgICAiIiIKQEAgLTcyNyw4ICs3NjIsOSBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZXNfYXJyYXkpOgogICAgICAgICBzZWxmLmNhY2hlc19hcnJheSA9IGNhY2hlc19hcnJheQogICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6Ci0gICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKLSAgICAgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKSAgICAgICAgCisgICAgICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkV4dHJhIGNhY2hlIGRhdGEgY2xhc3MgJXMgc2hvdWxkIHN1YmNsYXNzIFJlY2lwZUluZm9Db21tb24gY2xhc3MiICUgY2FjaGVfY2xhc3MpCisgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKQogCiAgICAgICAgICMgRGlyZWN0IGNhY2hlIHZhcmlhYmxlcwogICAgICAgICBzZWxmLnRhc2tfcXVldWVzID0ge30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weQppbmRleCAyZWM5NjRkLi44NDI4OTIwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2hlY2tzdW0ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NoZWNrc3VtLnB5CkBAIC0xOSwyMCArMTksMTMgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IG9zCiBpbXBvcnQgc3RhdAoraW1wb3J0IHBpY2tsZQogaW1wb3J0IGJiLnV0aWxzCiBpbXBvcnQgbG9nZ2luZwogZnJvbSBiYi5jYWNoZSBpbXBvcnQgTXVsdGlQcm9jZXNzQ2FjaGUKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQ2FjaGUiKQogCi10cnk6Ci0gICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1wb3J0IHBpY2tsZQotICAgIGxvZ2dlci5pbmZvKCJJbXBvcnRpbmcgY1BpY2tsZSBmYWlsZWQuICIKLSAgICAgICAgICAgICAgICAiRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLiIpCi0KLQogIyBtdGltZSBjYWNoZSAobm9uLXBlcnNpc3RlbnQpCiAjIGJhc2VkIHVwb24gdGhlIGFzc3VtcHRpb24gdGhhdCBmaWxlcyBkbyBub3QgY2hhbmdlIGR1cmluZyBiaXRiYWtlIHJ1bgogY2xhc3MgRmlsZU10aW1lQ2FjaGUob2JqZWN0KToKQEAgLTEyNywxMyArMTIwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1zLmV4dGVuZChjaGVja3N1bV9kaXIoZikpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtX2ZpbGUoZikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKGYsIGNoZWNrc3VtKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKGYsIGNoZWNrc3VtKSkKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihwdGgpOgogICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwdGgpOgogICAgICAgICAgICAgICAgICAgICBjaGVja3N1bXMuZXh0ZW5kKGNoZWNrc3VtX2RpcihwdGgpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtX2ZpbGUocHRoKQotICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKHB0aCwgY2hlY2tzdW0pKQorICAgICAgICAgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bXMuYXBwZW5kKChwdGgsIGNoZWNrc3VtKSkKIAogICAgICAgICBjaGVja3N1bXMuc29ydChrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxKSkKICAgICAgICAgcmV0dXJuIGNoZWNrc3VtcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvZGVwYXJzZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29kZXBhcnNlci5weQppbmRleCAzZWU0ZDU2Li4yNTkzOGQ2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29kZXBhcnNlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29kZXBhcnNlci5weQpAQCAtMSwyMSArMSwyMCBAQAogaW1wb3J0IGFzdAoraW1wb3J0IHN5cwogaW1wb3J0IGNvZGVnZW4KIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgcGlja2xlCitpbXBvcnQgYmIucHlzaCBhcyBweXNoCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IGJiLnV0aWxzLCBiYi5kYXRhCitpbXBvcnQgaGFzaGxpYgogZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCi1mcm9tIHB5c2ggaW1wb3J0IHB5c2h5YWNjLCBweXNobGV4LCBzaGVycm9ycworZnJvbSBiYi5weXNoIGltcG9ydCBweXNoeWFjYywgcHlzaGxleCwgc2hlcnJvcnMKIGZyb20gYmIuY2FjaGUgaW1wb3J0IE11bHRpUHJvY2Vzc0NhY2hlCiAKLQogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuQ29kZVBhcnNlcicpCiAKLXRyeToKLSAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgcGlja2xlCi0gICAgbG9nZ2VyLmluZm8oJ0ltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIEZhbGxpbmcgYmFjayB0byBhIHZlcnkgc2xvdyBpbXBsZW1lbnRhdGlvbi4nKQotCitkZWYgYmJoYXNoKHMpOgorICAgIHJldHVybiBoYXNobGliLm1kNShzLmVuY29kZSgidXRmLTgiKSkuaGV4ZGlnZXN0KCkKIAogZGVmIGNoZWNrX2luZGVudChjb2Rlc3RyKToKICAgICAiIiJJZiB0aGUgY29kZSBpcyBpbmRlbnRlZCwgYWRkIGEgdG9wIGxldmVsIHBpZWNlIG9mIGNvZGUgdG8gJ3JlbW92ZScgdGhlIGluZGVudGF0aW9uIiIiCkBAIC02OCwxMSArNjcsMTIgQEAKICAgICAgICAgCiAgICAgICAgIG5ldyA9IFtdCiAgICAgICAgIGZvciBpIGluIGl0ZW1zOgotICAgICAgICAgICAgbmV3LmFwcGVuZChpbnRlcm4oaSkpCisgICAgICAgICAgICBuZXcuYXBwZW5kKHN5cy5pbnRlcm4oaSkpCiAgICAgICAgIHMgPSBmcm96ZW5zZXQobmV3KQotICAgICAgICBpZiBoYXNoKHMpIGluIHNlbGYuc2V0Y2FjaGU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRjYWNoZVtoYXNoKHMpXQotICAgICAgICBzZWxmLnNldGNhY2hlW2hhc2gocyldID0gcworICAgICAgICBoID0gaGFzaChzKQorICAgICAgICBpZiBoIGluIHNlbGYuc2V0Y2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRjYWNoZVtoXQorICAgICAgICBzZWxmLnNldGNhY2hlW2hdID0gcwogICAgICAgICByZXR1cm4gcwogCiBjb2RlY2FjaGUgPSBTZXRDYWNoZSgpCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogY2xhc3MgQ29kZVBhcnNlckNhY2hlKE11bHRpUHJvY2Vzc0NhY2hlKToKICAgICBjYWNoZV9maWxlX25hbWUgPSAiYmJfY29kZXBhcnNlci5kYXQiCi0gICAgQ0FDSEVfVkVSU0lPTiA9IDcKKyAgICBDQUNIRV9WRVJTSU9OID0gOAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBNdWx0aVByb2Nlc3NDYWNoZS5fX2luaXRfXyhzZWxmKQpAQCAtMTkxLDYgKzE5MSw3IEBACiAKIGNsYXNzIFB5dGhvblBhcnNlcigpOgogICAgIGdldHZhcnMgPSAoIi5nZXRWYXIiLCAiLmFwcGVuZFZhciIsICIucHJlcGVuZFZhciIpCisgICAgZ2V0dmFyZmxhZ3MgPSAoIi5nZXRWYXJGbGFnIiwgIi5hcHBlbmRWYXJGbGFnIiwgIi5wcmVwZW5kVmFyRmxhZyIpCiAgICAgY29udGFpbnNmdW5jcyA9ICgiYmIudXRpbHMuY29udGFpbnMiLCAiYmFzZV9jb250YWlucyIsICJiYi51dGlscy5jb250YWluc19hbnkiKQogICAgIGV4ZWNmdW5jcyA9ICgiYmIuYnVpbGQuZXhlY19mdW5jIiwgImJiLmJ1aWxkLmV4ZWNfdGFzayIpCiAKQEAgLTIxMCwxNSArMjExLDIwIEBACiAKICAgICBkZWYgdmlzaXRfQ2FsbChzZWxmLCBub2RlKToKICAgICAgICAgbmFtZSA9IHNlbGYuY2FsbGVkX25vZGVfbmFtZShub2RlLmZ1bmMpCi0gICAgICAgIGlmIG5hbWUgYW5kIG5hbWUuZW5kc3dpdGgoc2VsZi5nZXR2YXJzKSBvciBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jczoKKyAgICAgICAgaWYgbmFtZSBhbmQgKG5hbWUuZW5kc3dpdGgoc2VsZi5nZXR2YXJzKSBvciBuYW1lLmVuZHN3aXRoKHNlbGYuZ2V0dmFyZmxhZ3MpIG9yIG5hbWUgaW4gc2VsZi5jb250YWluc2Z1bmNzKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzBdLCBhc3QuU3RyKToKICAgICAgICAgICAgICAgICB2YXJuYW1lID0gbm9kZS5hcmdzWzBdLnMKICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jcyBhbmQgaXNpbnN0YW5jZShub2RlLmFyZ3NbMV0sIGFzdC5TdHIpOgogICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lIG5vdCBpbiBzZWxmLmNvbnRhaW5zOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc1t2YXJuYW1lXSA9IHNldCgpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNbdmFybmFtZV0uYWRkKG5vZGUuYXJnc1sxXS5zKQotICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMuYWRkKG5vZGUuYXJnc1swXS5zKQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aChzZWxmLmdldHZhcmZsYWdzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLmFyZ3NbMV0sIGFzdC5TdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzLmFkZCgnJXNbJXNdJyAlICh2YXJuYW1lLCBub2RlLmFyZ3NbMV0ucykpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndhcm4obm9kZS5mdW5jLCBub2RlLmFyZ3NbMV0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzLmFkZCh2YXJuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLndhcm4obm9kZS5mdW5jLCBub2RlLmFyZ3NbMF0pCiAgICAgICAgIGVsaWYgbmFtZSBhbmQgbmFtZS5lbmRzd2l0aCgiLmV4cGFuZCIpOgpAQCAtMjY4LDcgKzI3NCw3IEBACiAgICAgICAgIGlmIG5vdCBub2RlIG9yIG5vdCBub2RlLnN0cmlwKCk6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBoID0gaGFzaChzdHIobm9kZSkpCisgICAgICAgIGggPSBiYmhhc2goc3RyKG5vZGUpKQogCiAgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlOgogICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5yZWZzKQpAQCAtMzEzLDcgKzMxOSw3IEBACiAgICAgICAgIGNvbW1hbmRzIGl0IGV4ZWN1dGVzLgogICAgICAgICAiIiIKIAotICAgICAgICBoID0gaGFzaChzdHIodmFsdWUpKQorICAgICAgICBoID0gYmJoYXNoKHN0cih2YWx1ZSkpCiAKICAgICAgICAgaWYgaCBpbiBjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZToKICAgICAgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVbaF0uZXhlY3MpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb21tYW5kLnB5CmluZGV4IDA1NTlmZmMuLmNhYTNlNGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb21tYW5kLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb21tYW5kLnB5CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CiAgICAgICAgICAgICBhcmcgPSBleGMuYXJnc1swXQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6CiAgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hBc3luY0NvbW1hbmQoYXJnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZCgiRXhpdGVkIHdpdGggJXMiICUgYXJnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb29rZXIucHkKaW5kZXggOWI1NjVmYy4uNDI4MzFlMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5CkBAIC0yMiw3ICsyMiw3IEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKwogaW1wb3J0IHN5cywgb3MsIGdsb2IsIG9zLnBhdGgsIHJlLCB0aW1lCiBpbXBvcnQgYXRleGl0CiBpbXBvcnQgaXRlcnRvb2xzCkBAIC0zMCwxOCArMzAsMjEgQEAKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBzcmVfY29uc3RhbnRzCiBpbXBvcnQgdGhyZWFkaW5nCi1mcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBVbnN1cHBvcnRlZE9wZXJhdGlvbgogZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdCwgbmFtZWR0dXBsZQogaW1wb3J0IGJiLCBiYi5leGNlcHRpb25zLCBiYi5jb21tYW5kCiBmcm9tIGJiIGltcG9ydCB1dGlscywgZGF0YSwgcGFyc2UsIGV2ZW50LCBjYWNoZSwgcHJvdmlkZXJzLCB0YXNrZGF0YSwgcnVucXVldWUsIGJ1aWxkCi1pbXBvcnQgUXVldWUKK2ltcG9ydCBxdWV1ZQogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBlcnJubwogaW1wb3J0IHByc2Vydi5zZXJ2CiBpbXBvcnQgcHlpbm90aWZ5CitpbXBvcnQganNvbgoraW1wb3J0IHBpY2tsZQoraW1wb3J0IGNvZGVjcwogCiBsb2dnZXIgICAgICA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKIGNvbGxlY3Rsb2cgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQ29sbGVjdGlvbiIpCkBAIC02NSw3ICs2OCw3IEBACiAgICAgIiIiCiAKIGNsYXNzIHN0YXRlOgotICAgIGluaXRpYWwsIHBhcnNpbmcsIHJ1bm5pbmcsIHNodXRkb3duLCBmb3JjZXNodXRkb3duLCBzdG9wcGVkLCBlcnJvciA9IHJhbmdlKDcpCisgICAgaW5pdGlhbCwgcGFyc2luZywgcnVubmluZywgc2h1dGRvd24sIGZvcmNlc2h1dGRvd24sIHN0b3BwZWQsIGVycm9yID0gbGlzdChyYW5nZSg3KSkKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBnZXRfbmFtZShjbHMsIGNvZGUpOgpAQCAtOTMsNyArOTYsNyBAQAogCiAKIGNsYXNzIENvb2tlckZlYXR1cmVzKG9iamVjdCk6Ci0gICAgX2ZlYXR1cmVfbGlzdCA9IFtIT0JfRVhUUkFfQ0FDSEVTLCBTRU5EX0RFUEVORFNfVFJFRSwgQkFTRURBVEFTVE9SRV9UUkFDS0lORywgU0VORF9TQU5JVFlFVkVOVFNdID0gcmFuZ2UoNCkKKyAgICBfZmVhdHVyZV9saXN0ID0gW0hPQl9FWFRSQV9DQUNIRVMsIEJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcsIFNFTkRfU0FOSVRZRVZFTlRTXSA9IGxpc3QocmFuZ2UoMykpCiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX2ZlYXR1cmVzPXNldCgpCkBAIC0xMTAsMTAgKzExMyw1MCBAQAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZlYXR1cmVzLl9faXRlcl9fKCkKIAotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZmVhdHVyZXMubmV4dCgpCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbmV4dChzZWxmLl9mZWF0dXJlcykKIAogCitjbGFzcyBFdmVudFdyaXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyLCBldmVudGZpbGUpOgorICAgICAgICBzZWxmLmZpbGVfaW5pdGVkID0gTm9uZQorICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICBzZWxmLmV2ZW50ZmlsZSA9IGV2ZW50ZmlsZQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gW10KKworICAgIGRlZiB3cml0ZV9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIHdpdGggb3BlbihzZWxmLmV2ZW50ZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0cl9ldmVudCA9IGNvZGVjcy5lbmNvZGUocGlja2xlLmR1bXBzKGV2ZW50KSwgJ2Jhc2U2NCcpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUganNvbi5kdW1wcyh7ImNsYXNzIjogZXZlbnQuX19tb2R1bGVfXyArICIuIiArIGV2ZW50Ll9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXJzIjogc3RyX2V2ZW50fSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgcHJpbnQoZXJyLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorCisgICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgorICAgICAgICBpZiBzZWxmLmZpbGVfaW5pdGVkOgorICAgICAgICAgICAgIyB3ZSBoYXZlIHRoZSBmaWxlLCBqdXN0IHdyaXRlIHRoZSBldmVudAorICAgICAgICAgICAgc2VsZi53cml0ZV9ldmVudChldmVudCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaW5pdCBvbiBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQKKyAgICAgICAgICAgIG5hbWUgPSAiJXMuJXMiICUgKGV2ZW50Ll9fbW9kdWxlX18sIGV2ZW50Ll9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gKCJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiLCAiYmIuY29va2VyLkNvb2tlckV4aXQiKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5ldmVudGZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBqc29uLmR1bXBzKHsgImFsbHZhcmlhYmxlcyIgOiBzZWxmLmNvb2tlci5nZXRBbGxLZXlzV2l0aEZsYWdzKFsiZG9jIiwgImZ1bmMiXSl9KSkKKworICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9pbml0ZWQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAjIHdyaXRlIHBlbmRpbmcgZXZlbnRzCisgICAgICAgICAgICAgICAgZm9yIGV2dCBpbiBzZWxmLmV2ZW50X3F1ZXVlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGV2dCkKKworICAgICAgICAgICAgICAgICMgYWxzbyB3cml0ZSB0aGUgY3VycmVudCBldmVudAorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZXZlbnQoZXZlbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgcXVldWUgYWxsIGV2ZW50cyB1bnRpbCB0aGUgZmlsZSBpcyBpbml0ZWQKKyAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLmFwcGVuZChldmVudCkKKwogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCiAjIEJCQ29va2VyCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKQEAgLTEyMyw3ICsxNjYsNyBAQAogICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVTZXQ9Tm9uZSk6Ci0gICAgICAgIHNlbGYucmVjaXBlY2FjaGUgPSBOb25lCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGVzID0gTm9uZQogICAgICAgICBzZWxmLnNraXBsaXN0ID0ge30KICAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gQ29va2VyRmVhdHVyZXMoKQogICAgICAgICBpZiBmZWF0dXJlU2V0OgpAQCAtMTUxLDYgKzE5NCwxMyBAQAogCiAgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKIAorICAgICAgICAjIHdlIGxvZyBhbGwgZXZlbnRzIHRvIGEgZmlsZSBpZiBzbyBkaXJlY3RlZAorICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24ud3JpdGVldmVudGxvZzoKKyAgICAgICAgICAgICMgcmVnaXN0ZXIgdGhlIGxvZyBmaWxlIHdyaXRlciBhcyBVSSBIYW5kbGVyCisgICAgICAgICAgICB3cml0ZXIgPSBFdmVudFdyaXRlcihzZWxmLCBzZWxmLmNvbmZpZ3VyYXRpb24ud3JpdGVldmVudGxvZykKKyAgICAgICAgICAgIEV2ZW50TG9nV3JpdGVIYW5kbGVyID0gbmFtZWR0dXBsZSgnRXZlbnRMb2dXcml0ZUhhbmRsZXInLCBbJ2V2ZW50J10pCisgICAgICAgICAgICBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKEV2ZW50TG9nV3JpdGVIYW5kbGVyKHdyaXRlcikpCisKICAgICAgICAgc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzID0gW10KIAogICAgICAgICBkZWYgX3Byb2Nlc3NfaW5vdGlmeV91cGRhdGVzKHNlcnZlciwgbm90aWZpZXJfbGlzdCwgYWJvcnQpOgpAQCAtMTgwLDE0ICsyMzAsMTcgQEAKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAjIFRPU1RPUCBtdXN0IG5vdCBiZSBzZXQgb3Igb3VyIGNoaWxkcmVuIHdpbGwgaGFuZyB3aGVuIHRoZXkgb3V0cHV0Ci0gICAgICAgIGZkID0gc3lzLnN0ZG91dC5maWxlbm8oKQotICAgICAgICBpZiBvcy5pc2F0dHkoZmQpOgotICAgICAgICAgICAgaW1wb3J0IHRlcm1pb3MKLSAgICAgICAgICAgIHRjYXR0ciA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQotICAgICAgICAgICAgaWYgdGNhdHRyWzNdICYgdGVybWlvcy5UT1NUT1A6Ci0gICAgICAgICAgICAgICAgYnVpbGRsb2cuaW5mbygiVGhlIHRlcm1pbmFsIGhhZCB0aGUgVE9TVE9QIGJpdCBzZXQsIGNsZWFyaW5nLi4uIikKLSAgICAgICAgICAgICAgICB0Y2F0dHJbM10gPSB0Y2F0dHJbM10gJiB+dGVybWlvcy5UT1NUT1AKLSAgICAgICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGVybWlvcy5UQ1NBTk9XLCB0Y2F0dHIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkID0gc3lzLnN0ZG91dC5maWxlbm8oKQorICAgICAgICAgICAgaWYgb3MuaXNhdHR5KGZkKToKKyAgICAgICAgICAgICAgICBpbXBvcnQgdGVybWlvcworICAgICAgICAgICAgICAgIHRjYXR0ciA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgICAgICAgICAgICAgIGlmIHRjYXR0clszXSAmIHRlcm1pb3MuVE9TVE9QOgorICAgICAgICAgICAgICAgICAgICBidWlsZGxvZy5pbmZvKCJUaGUgdGVybWluYWwgaGFkIHRoZSBUT1NUT1AgYml0IHNldCwgY2xlYXJpbmcuLi4iKQorICAgICAgICAgICAgICAgICAgICB0Y2F0dHJbM10gPSB0Y2F0dHJbM10gJiB+dGVybWlvcy5UT1NUT1AKKyAgICAgICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQU5PVywgdGNhdHRyKQorICAgICAgICBleGNlcHQgVW5zdXBwb3J0ZWRPcGVyYXRpb246CisgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgc2VsZi5jb21tYW5kID0gYmIuY29tbWFuZC5Db21tYW5kKHNlbGYpCiAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5pbml0aWFsCkBAIC0zMDEsNzQgKzM1NCw2IEBACiAgICAgICAgIGlmIGNvbnNvbGVsb2c6CiAgICAgICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJCQl9DT05TT0xFTE9HIiwgY29uc29sZWxvZykKIAotICAgICAgICAjIHdlIGxvZyBhbGwgZXZlbnRzIHRvIGEgZmlsZSBpZiBzbyBkaXJlY3RlZAotICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24ud3JpdGVldmVudGxvZzoKLSAgICAgICAgICAgIGltcG9ydCBqc29uLCBwaWNrbGUKLSAgICAgICAgICAgIERFRkFVTFRfRVZFTlRGSUxFID0gc2VsZi5jb25maWd1cmF0aW9uLndyaXRlZXZlbnRsb2cKLSAgICAgICAgICAgIGNsYXNzIEV2ZW50TG9nV3JpdGVIYW5kbGVyKCk6Ci0KLSAgICAgICAgICAgICAgICBjbGFzcyBFdmVudFdyaXRlcigpOgotICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9pbml0ZWQgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IFtdCi0KLSAgICAgICAgICAgICAgICAgICAgZGVmIGluaXRfZmlsZShzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgb2xkIGxvZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShERUZBVUxUX0VWRU5URklMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgd3JpdGUgY3VycmVudCBjb25maWd1cmF0aW9uIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihERUZBVUxUX0VWRU5URklMRSwgInciKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUganNvbi5kdW1wcyh7ICJhbGx2YXJpYWJsZXMiIDogc2VsZi5jb29rZXIuZ2V0QWxsS2V5c1dpdGhGbGFncyhbImRvYyIsICJmdW5jIl0pfSkpCi0KLSAgICAgICAgICAgICAgICAgICAgZGVmIHdyaXRlX2V2ZW50KHNlbGYsIGV2ZW50KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihERUZBVUxUX0VWRU5URklMRSwgImEiKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBqc29uLmR1bXBzKHsiY2xhc3MiOmV2ZW50Ll9fbW9kdWxlX18gKyAiLiIgKyBldmVudC5fX2NsYXNzX18uX19uYW1lX18sICJ2YXJzIjpqc29uLmR1bXBzKHBpY2tsZS5kdW1wcyhldmVudCkpIH0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChlLCB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKSkKLQotCi0gICAgICAgICAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIGV2ZW50KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2NsYXNzID0gZXZlbnQuX19tb2R1bGVfXyArICIuIiArIGV2ZW50Ll9fY2xhc3NfXy5fX25hbWVfXwotCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGluaXQgb24gYmIuZXZlbnQuQnVpbGRTdGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmZpbGVfaW5pdGVkIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIGV2ZW50X2NsYXNzID09ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRfZmlsZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9pbml0ZWQgPSBUcnVlCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBwZW5kaW5nIGV2ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZSBpbiBzZWxmLmV2ZW50X3F1ZXVlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9ldmVudChlKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxzbyB3cml0ZSB0aGUgY3VycmVudCBldmVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGV2ZW50KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBxdWV1ZSBhbGwgZXZlbnRzIHVudGlsIHRoZSBmaWxlIGlzIGluaXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLmFwcGVuZChldmVudCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIGhhdmUgdGhlIGZpbGUsIGp1c3Qgd3JpdGUgdGhlIGV2ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9ldmVudChldmVudCkKLQotICAgICAgICAgICAgICAgICMgc2V0IG91ciBoYW5kbGVyJ3MgZXZlbnQgcHJvY2Vzc29yCi0gICAgICAgICAgICAgICAgZXZlbnQgPSBFdmVudFdyaXRlcihzZWxmKSAgICAgICAjIHNlbGYgaXMgdGhlIGNvb2tlciBoZXJlCi0KLQotICAgICAgICAgICAgIyBzZXQgdXAgY29va2VyIGZlYXR1cmVzIGZvciB0aGlzIG1vY2sgVUkgaGFuZGxlcgotCi0gICAgICAgICAgICAjIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGRlcGVuZGVuY3kgdHJlZSBpbiB0aGUgbG9nCi0gICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQuc2V0RmVhdHVyZShDb29rZXJGZWF0dXJlcy5TRU5EX0RFUEVORFNfVFJFRSkKLSAgICAgICAgICAgICMgcmVnaXN0ZXIgdGhlIGxvZyBmaWxlIHdyaXRlciBhcyBVSSBIYW5kbGVyCi0gICAgICAgICAgICBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKEV2ZW50TG9nV3JpdGVIYW5kbGVyKCkpCi0KLQogICAgICAgICAjCiAgICAgICAgICMgQ29weSBvZiB0aGUgZGF0YSBzdG9yZSB3aGljaCBoYXMgYmVlbiBleHBhbmRlZC4KICAgICAgICAgIyBVc2VkIGZvciBmaXJpbmcgZXZlbnRzIGFuZCBhY2Nlc3NpbmcgdmFyaWFibGVzIHdoZXJlIGV4cGFuc2lvbiBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yCkBAIC01MzksMTEgKzUyNCwxNCBAQAogICAgICAgICAgICAgbmljZSA9IGludChuaWNlKSAtIGN1cm5pY2UKICAgICAgICAgICAgIGJ1aWxkbG9nLnZlcmJvc2UoIlJlbmljZSB0byAlcyAiICUgb3MubmljZShuaWNlKSkKIAotICAgICAgICBpZiBzZWxmLnJlY2lwZWNhY2hlOgotICAgICAgICAgICAgZGVsIHNlbGYucmVjaXBlY2FjaGUKLSAgICAgICAgc2VsZi5yZWNpcGVjYWNoZSA9IGJiLmNhY2hlLkNhY2hlRGF0YShzZWxmLmNhY2hlc19hcnJheSkKKyAgICAgICAgaWYgc2VsZi5yZWNpcGVjYWNoZXM6CisgICAgICAgICAgICBkZWwgc2VsZi5yZWNpcGVjYWNoZXMKKyAgICAgICAgc2VsZi5tdWx0aWNvbmZpZ3MgPSBzZWxmLmRhdGFidWlsZGVyLm1jZGF0YS5rZXlzKCkKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZXMgPSB7fQorICAgICAgICBmb3IgbWMgaW4gc2VsZi5tdWx0aWNvbmZpZ3M6CisgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10gPSBiYi5jYWNoZS5DYWNoZURhdGEoc2VsZi5jYWNoZXNfYXJyYXkpCiAKLSAgICAgICAgc2VsZi5oYW5kbGVDb2xsZWN0aW9ucyggc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX0NPTExFQ1RJT05TIiwgVHJ1ZSkgKQorICAgICAgICBzZWxmLmhhbmRsZUNvbGxlY3Rpb25zKHNlbGYuZGF0YS5nZXRWYXIoIkJCRklMRV9DT0xMRUNUSU9OUyIsIFRydWUpKQogCiAgICAgZGVmIHVwZGF0ZUNvbmZpZ09wdHMoc2VsZiwgb3B0aW9ucywgZW52aXJvbm1lbnQpOgogICAgICAgICBjbGVhbiA9IFRydWUKQEAgLTU4Nyw4ICs1NzUsOCBAQAogCiAgICAgZGVmIHNob3dWZXJzaW9ucyhzZWxmKToKIAotICAgICAgICBwa2dfcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19wbgotICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCBwa2dfcG4pCisgICAgICAgIHBrZ19wbiA9IHNlbGYucmVjaXBlY2FjaGVzWycnXS5wa2dfcG4KKyAgICAgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZXNbJyddLCBwa2dfcG4pCiAKICAgICAgICAgbG9nZ2VyLnBsYWluKCIlLTM1cyAlMjVzICUyNXMiLCAiUmVjaXBlIE5hbWUiLCAiTGF0ZXN0IFZlcnNpb24iLCAiUHJlZmVycmVkIFZlcnNpb24iKQogICAgICAgICBsb2dnZXIucGxhaW4oIiUtMzVzICUyNXMgJTI1c1xuIiwgIj09PT09PT09PT09IiwgIj09PT09PT09PT09PT09IiwgIj09PT09PT09PT09PT09PT09IikKQEAgLTYxOSwyNSArNjA3LDI1IEBACiAgICAgICAgICAgICAjIHRoaXMgc2hvd0Vudmlyb25tZW50KCkgY29kZSBwYXRoIGRvZXNuJ3QgdXNlIHRoZSBjYWNoZQogICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb24oKQogCi0gICAgICAgICAgICBmbiwgY2xzID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihidWlsZGZpbGUpCisgICAgICAgICAgICBmbiwgY2xzLCBtYyA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oYnVpbGRmaWxlKQogICAgICAgICAgICAgZm4gPSBzZWxmLm1hdGNoRmlsZShmbikKLSAgICAgICAgICAgIGZuID0gYmIuY2FjaGUuQ2FjaGUucmVhbGZuMnZpcnR1YWwoZm4sIGNscykKKyAgICAgICAgICAgIGZuID0gYmIuY2FjaGUucmVhbGZuMnZpcnR1YWwoZm4sIGNscywgbWMpCiAgICAgICAgIGVsaWYgbGVuKHBrZ3NfdG9fYnVpbGQpID09IDE6CiAgICAgICAgICAgICBpZ25vcmUgPSBzZWxmLmV4cGFuZGVkX2RhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBUcnVlKSBvciAiIgogICAgICAgICAgICAgaWYgcGtnc190b19idWlsZFswXSBpbiBzZXQoaWdub3JlLnNwbGl0KCkpOgogICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBpcyBpbiBBU1NVTUVfUFJPVklERUQiICUgcGtnc190b19idWlsZFswXSkKIAotICAgICAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgTm9uZSwgc2VsZi5jb25maWd1cmF0aW9uLmFib3J0LCBhbGxvd2luY29tcGxldGU9VHJ1ZSkKKyAgICAgICAgICAgIHRhc2tkYXRhLCBydW5saXN0ID0gc2VsZi5idWlsZFRhc2tEYXRhKHBrZ3NfdG9fYnVpbGQsIE5vbmUsIHNlbGYuY29uZmlndXJhdGlvbi5hYm9ydCwgYWxsb3dpbmNvbXBsZXRlPVRydWUpCiAKLSAgICAgICAgICAgIHRhcmdldGlkID0gdGFza2RhdGEuZ2V0YnVpbGRfaWQocGtnc190b19idWlsZFswXSkKLSAgICAgICAgICAgIGZuaWQgPSB0YXNrZGF0YS5idWlsZF90YXJnZXRzW3RhcmdldGlkXVswXQotICAgICAgICAgICAgZm4gPSB0YXNrZGF0YS5mbl9pbmRleFtmbmlkXQorICAgICAgICAgICAgbWMgPSBydW5saXN0WzBdWzBdCisgICAgICAgICAgICBmbiA9IHJ1bmxpc3RbMF1bM10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGVudmRhdGEgPSBzZWxmLmRhdGEKIAogICAgICAgICBpZiBmbjoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBlbnZkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBzZWxmLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgICAgICBiYl9jYWNoZSA9IGJiLmNhY2hlLkNhY2hlKHNlbGYuZGF0YWJ1aWxkZXIsIHNlbGYuZGF0YV9oYXNoLCBzZWxmLmNhY2hlc19hcnJheSkKKyAgICAgICAgICAgICAgICBlbnZkYXRhID0gYmJfY2FjaGUubG9hZERhdGFGdWxsKGZuLCBzZWxmLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbikpCiAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXhjZXB0aW9uKCJVbmFibGUgdG8gcmVhZCAlcyIsIGZuKQogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC02NTYsNyArNjQ0LDcgQEAKICAgICAgICAgIyBlbWl0IHRoZSBtZXRhZGF0YSB3aGljaCBpc250IHZhbGlkIHNoZWxsCiAgICAgICAgIGRhdGEuZXhwYW5kS2V5cyhlbnZkYXRhKQogICAgICAgICBmb3IgZSBpbiBlbnZkYXRhLmtleXMoKToKLSAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyRmxhZyggZSwgJ3B5dGhvbicsIGVudmRhdGEgKToKKyAgICAgICAgICAgIGlmIGVudmRhdGEuZ2V0VmFyRmxhZyhlLCAnZnVuYycsIEZhbHNlKSBhbmQgZW52ZGF0YS5nZXRWYXJGbGFnKGUsICdweXRob24nLCBGYWxzZSk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCJcbnB5dGhvbiAlcyAoKSB7XG4lc31cbiIsIGUsIGVudmRhdGEuZ2V0VmFyKGUsIEZhbHNlKSkKIAogCkBAIC02NzAsMzAgKzY1OCw0NCBAQAogICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CiAgICAgICAgICAgICB0YXNrID0gc2VsZi5jb25maWd1cmF0aW9uLmNtZAogCi0gICAgICAgIGZ1bGx0YXJnZXRsaXN0ID0gc2VsZi5jaGVja1BhY2thZ2VzKHBrZ3NfdG9fYnVpbGQpCisgICAgICAgIGZ1bGx0YXJnZXRsaXN0ID0gc2VsZi5jaGVja1BhY2thZ2VzKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIHRhc2tkYXRhID0ge30KKyAgICAgICAgbG9jYWxkYXRhID0ge30KIAotICAgICAgICBsb2NhbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoc2VsZi5kYXRhKQotICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKLSAgICAgICAgYmIuZGF0YS5leHBhbmRLZXlzKGxvY2FsZGF0YSkKLSAgICAgICAgdGFza2RhdGEgPSBiYi50YXNrZGF0YS5UYXNrRGF0YShhYm9ydCwgc2tpcGxpc3Q9c2VsZi5za2lwbGlzdCwgYWxsb3dpbmNvbXBsZXRlPWFsbG93aW5jb21wbGV0ZSkKKyAgICAgICAgZm9yIG1jIGluIHNlbGYubXVsdGljb25maWdzOgorICAgICAgICAgICAgdGFza2RhdGFbbWNdID0gYmIudGFza2RhdGEuVGFza0RhdGEoYWJvcnQsIHNraXBsaXN0PXNlbGYuc2tpcGxpc3QsIGFsbG93aW5jb21wbGV0ZT1hbGxvd2luY29tcGxldGUpCisgICAgICAgICAgICBsb2NhbGRhdGFbbWNdID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhW21jXSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhW21jXSkKKyAgICAgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGFbbWNdKQogCiAgICAgICAgIGN1cnJlbnQgPSAwCiAgICAgICAgIHJ1bmxpc3QgPSBbXQogICAgICAgICBmb3IgayBpbiBmdWxsdGFyZ2V0bGlzdDoKKyAgICAgICAgICAgIG1jID0gIiIKKyAgICAgICAgICAgIGlmIGsuc3RhcnRzd2l0aCgibXVsdGljb25maWc6Iik6CisgICAgICAgICAgICAgICAgbWMgPSBrLnNwbGl0KCI6IilbMV0KKyAgICAgICAgICAgICAgICBrID0gIjoiLmpvaW4oay5zcGxpdCgiOiIpWzI6XSkKICAgICAgICAgICAgIGt0YXNrID0gdGFzawogICAgICAgICAgICAgaWYgIjpkb18iIGluIGs6CiAgICAgICAgICAgICAgICAgazIgPSBrLnNwbGl0KCI6ZG9fIikKICAgICAgICAgICAgICAgICBrID0gazJbMF0KICAgICAgICAgICAgICAgICBrdGFzayA9IGsyWzFdCi0gICAgICAgICAgICB0YXNrZGF0YS5hZGRfcHJvdmlkZXIobG9jYWxkYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCBrKQorICAgICAgICAgICAgdGFza2RhdGFbbWNdLmFkZF9wcm92aWRlcihsb2NhbGRhdGFbbWNdLCBzZWxmLnJlY2lwZWNhY2hlc1ttY10sIGspCiAgICAgICAgICAgICBjdXJyZW50ICs9IDEKICAgICAgICAgICAgIGlmIG5vdCBrdGFzay5zdGFydHN3aXRoKCJkb18iKToKICAgICAgICAgICAgICAgICBrdGFzayA9ICJkb18lcyIgJSBrdGFzawotICAgICAgICAgICAgcnVubGlzdC5hcHBlbmQoW2ssIGt0YXNrXSkKKyAgICAgICAgICAgIGlmIGsgbm90IGluIHRhc2tkYXRhW21jXS5idWlsZF90YXJnZXRzIG9yIG5vdCB0YXNrZGF0YVttY10uYnVpbGRfdGFyZ2V0c1trXToKKyAgICAgICAgICAgICAgICAjIGUuZy4gaW4gQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZuID0gdGFza2RhdGFbbWNdLmJ1aWxkX3RhcmdldHNba11bMF0KKyAgICAgICAgICAgIHJ1bmxpc3QuYXBwZW5kKFttYywgaywga3Rhc2ssIGZuXSkKICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzKGN1cnJlbnQsIGxlbihmdWxsdGFyZ2V0bGlzdCkpLCBzZWxmLmRhdGEpCi0gICAgICAgIHRhc2tkYXRhLmFkZF91bnJlc29sdmVkKGxvY2FsZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSkKKworICAgICAgICBmb3IgbWMgaW4gc2VsZi5tdWx0aWNvbmZpZ3M6CisgICAgICAgICAgICB0YXNrZGF0YVttY10uYWRkX3VucmVzb2x2ZWQobG9jYWxkYXRhW21jXSwgc2VsZi5yZWNpcGVjYWNoZXNbbWNdKQorCiAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZChsZW4oZnVsbHRhcmdldGxpc3QpKSwgc2VsZi5kYXRhKQotICAgICAgICByZXR1cm4gdGFza2RhdGEsIHJ1bmxpc3QsIGZ1bGx0YXJnZXRsaXN0CisgICAgICAgIHJldHVybiB0YXNrZGF0YSwgcnVubGlzdAogCiAgICAgZGVmIHByZXBhcmVUcmVlRGF0YShzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKICAgICAgICAgIiIiCkBAIC03MDIsNyArNzA0LDcgQEAKIAogICAgICAgICAjIFdlIHNldCBhYm9ydCB0byBGYWxzZSBoZXJlIHRvIHByZXZlbnQgdW5idWlsZGFibGUgdGFyZ2V0cyByYWlzaW5nCiAgICAgICAgICMgYW4gZXhjZXB0aW9uIHdoZW4gd2UncmUganVzdCBnZW5lcmF0aW5nIGRhdGEKLSAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgdGFzaywgRmFsc2UsIGFsbG93aW5jb21wbGV0ZT1UcnVlKQorICAgICAgICB0YXNrZGF0YSwgcnVubGlzdCA9IHNlbGYuYnVpbGRUYXNrRGF0YShwa2dzX3RvX2J1aWxkLCB0YXNrLCBGYWxzZSwgYWxsb3dpbmNvbXBsZXRlPVRydWUpCiAKICAgICAgICAgcmV0dXJuIHJ1bmxpc3QsIHRhc2tkYXRhCiAKQEAgLTcxNCwxMyArNzE2LDE4IEBACiAgICAgICAgIGluZm9ybWF0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgcnVubGlzdCwgdGFza2RhdGEgPSBzZWxmLnByZXBhcmVUcmVlRGF0YShwa2dzX3RvX2J1aWxkLCB0YXNrKQotICAgICAgICBycSA9IGJiLnJ1bnF1ZXVlLlJ1blF1ZXVlKHNlbGYsIHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgdGFza2RhdGEsIHJ1bmxpc3QpCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlcywgdGFza2RhdGEsIHJ1bmxpc3QpCiAgICAgICAgIHJxLnJxZGF0YS5wcmVwYXJlKCkKICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGREZXBlbmRUcmVlKHJxLCB0YXNrZGF0YSkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYWRkX21jX3ByZWZpeChtYywgcG4pOgorICAgICAgICBpZiBtYzoKKyAgICAgICAgICAgIHJldHVybiAibXVsdGljb25maWc6JXMuJXMiICUgKG1jLCBwbikKKyAgICAgICAgcmV0dXJuIHBuCiAKICAgICBkZWYgYnVpbGREZXBlbmRUcmVlKHNlbGYsIHJxLCB0YXNrZGF0YSk6Ci0gICAgICAgIHNlZW5fZm5pZHMgPSBbXQorICAgICAgICBzZWVuX2ZucyA9IFtdCiAgICAgICAgIGRlcGVuZF90cmVlID0ge30KICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXSA9IHt9CiAgICAgICAgIGRlcGVuZF90cmVlWyJ0ZGVwZW5kcyJdID0ge30KQEAgLTczMCwyNSArNzM3LDI2IEBACiAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wa2ciXSA9IHt9CiAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXSA9IHt9CiAgICAgICAgIGRlcGVuZF90cmVlWydwcm92aWRlcm1hcCddID0ge30KLSAgICAgICAgZGVwZW5kX3RyZWVbImxheWVyLXByaW9yaXRpZXMiXSA9IHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzCisgICAgICAgIGRlcGVuZF90cmVlWyJsYXllci1wcmlvcml0aWVzIl0gPSBzZWxmLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcwogCi0gICAgICAgIGZvciBuYW1lLCBmbiBpbiB0YXNrZGF0YS5nZXRfcHJvdmlkZXJtYXAoKS5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5dCi0gICAgICAgICAgICBpZiBuYW1lICE9IHBuOgotICAgICAgICAgICAgICAgIHZlcnNpb24gPSAiJXM6JXMtJXMiICUgc2VsZi5yZWNpcGVjYWNoZS5wa2dfcGVwdnByW2ZuXQotICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWydwcm92aWRlcm1hcCddW25hbWVdID0gKHBuLCB2ZXJzaW9uKQorICAgICAgICBmb3IgbWMgaW4gdGFza2RhdGE6CisgICAgICAgICAgICBmb3IgbmFtZSwgZm4gaW4gbGlzdCh0YXNrZGF0YVttY10uZ2V0X3Byb3ZpZGVybWFwKCkuaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgcG4gPSBzZWxmLnJlY2lwZWNhY2hlc1ttY10ucGtnX2ZuW2ZuXQorICAgICAgICAgICAgICAgIHBuID0gc2VsZi5hZGRfbWNfcHJlZml4KG1jLCBwbikKKyAgICAgICAgICAgICAgICBpZiBuYW1lICE9IHBuOgorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gIiVzOiVzLSVzIiAlIHNlbGYucmVjaXBlY2FjaGVzW21jXS5wa2dfcGVwdnByW2ZuXQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsncHJvdmlkZXJtYXAnXVtuYW1lXSA9IChwbiwgdmVyc2lvbikKIAotICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHJxLnJxZGF0YS5ydW5xX2ZuaWQpKToKLSAgICAgICAgICAgIHRhc2tuYW1lID0gcnEucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQotICAgICAgICAgICAgZm5pZCA9IHJxLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10KLSAgICAgICAgICAgIGZuID0gdGFza2RhdGEuZm5faW5kZXhbZm5pZF0KLSAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5dCi0gICAgICAgICAgICB2ZXJzaW9uICA9ICIlczolcy0lcyIgJSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19wZXB2cHJbZm5dCisgICAgICAgIGZvciB0aWQgaW4gcnEucnFkYXRhLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgKG1jLCBmbiwgdGFza25hbWUsIHRhc2tmbikgPSBiYi5ydW5xdWV1ZS5zcGxpdF90aWRfbWNmbih0aWQpCisgICAgICAgICAgICBwbiA9IHNlbGYucmVjaXBlY2FjaGVzW21jXS5wa2dfZm5bdGFza2ZuXQorICAgICAgICAgICAgcG4gPSBzZWxmLmFkZF9tY19wcmVmaXgobWMsIHBuKQorICAgICAgICAgICAgdmVyc2lvbiAgPSAiJXM6JXMtJXMiICUgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnBrZ19wZXB2cHJbdGFza2ZuXQogICAgICAgICAgICAgaWYgcG4gbm90IGluIGRlcGVuZF90cmVlWyJwbiJdOgogICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXSA9IHt9Ci0gICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dWyJmaWxlbmFtZSJdID0gZm4KKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImZpbGVuYW1lIl0gPSB0YXNrZm4KICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bInZlcnNpb24iXSA9IHZlcnNpb24KLSAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImluaGVyaXRzIl0gPSBzZWxmLnJlY2lwZWNhY2hlLmluaGVyaXRzLmdldChmbiwgTm9uZSkKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImluaGVyaXRzIl0gPSBzZWxmLnJlY2lwZWNhY2hlc1ttY10uaW5oZXJpdHMuZ2V0KHRhc2tmbiwgTm9uZSkKIAogICAgICAgICAgICAgICAgICMgaWYgd2UgaGF2ZSBleHRyYSBjYWNoZXMsIGxpc3QgYWxsIGF0dHJpYnV0ZXMgdGhleSBicmluZyBpbgogICAgICAgICAgICAgICAgIGV4dHJhX2luZm8gPSBbXQpAQCAtNzU5LDM2ICs3NjcsMzYgQEAKIAogICAgICAgICAgICAgICAgICMgZm9yIGFsbCBhdHRyaWJ1dGVzIHN0b3JlZCwgYWRkIHRoZW0gdG8gdGhlIGRlcGVuZGVuY3kgdHJlZQogICAgICAgICAgICAgICAgIGZvciBlaSBpbiBleHRyYV9pbmZvOgotICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bZWldID0gdmFycyhzZWxmLnJlY2lwZWNhY2hlKVtlaV1bZm5dCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVtlaV0gPSB2YXJzKHNlbGYucmVjaXBlY2FjaGVzW21jXSlbZWldW3Rhc2tmbl0KIAogCi0gICAgICAgICAgICBmb3IgZGVwIGluIHJxLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza106Ci0gICAgICAgICAgICAgICAgZGVwZm4gPSB0YXNrZGF0YS5mbl9pbmRleFtycS5ycWRhdGEucnVucV9mbmlkW2RlcF1dCi0gICAgICAgICAgICAgICAgZGVwcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltkZXBmbl0KLSAgICAgICAgICAgICAgICBkb3RuYW1lID0gIiVzLiVzIiAlIChwbiwgcnEucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcnEucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0uZGVwZW5kczoKKyAgICAgICAgICAgICAgICAoZGVwbWMsIGRlcGZuLCBkZXB0YXNrbmFtZSwgZGVwdGFza2ZuKSA9IGJiLnJ1bnF1ZXVlLnNwbGl0X3RpZF9tY2ZuKGRlcCkKKyAgICAgICAgICAgICAgICBkZXBwbiA9IHNlbGYucmVjaXBlY2FjaGVzW21jXS5wa2dfZm5bZGVwdGFza2ZuXQorICAgICAgICAgICAgICAgIGRvdG5hbWUgPSAiJXMuJXMiICUgKHBuLCBiYi5ydW5xdWV1ZS50YXNrbmFtZV9mcm9tX3RpZCh0aWQpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBkb3RuYW1lIGluIGRlcGVuZF90cmVlWyJ0ZGVwZW5kcyJdOgogICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXVtkb3RuYW1lXSA9IFtdCi0gICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl1bZG90bmFtZV0uYXBwZW5kKCIlcy4lcyIgJSAoZGVwcG4sIHJxLnJxZGF0YS5ydW5xX3Rhc2tbZGVwXSkpCi0gICAgICAgICAgICBpZiBmbmlkIG5vdCBpbiBzZWVuX2ZuaWRzOgotICAgICAgICAgICAgICAgIHNlZW5fZm5pZHMuYXBwZW5kKGZuaWQpCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl1bZG90bmFtZV0uYXBwZW5kKCIlcy4lcyIgJSAoZGVwcG4sIGJiLnJ1bnF1ZXVlLnRhc2tuYW1lX2Zyb21fdGlkKGRlcCkpKQorICAgICAgICAgICAgaWYgdGFza2ZuIG5vdCBpbiBzZWVuX2ZuczoKKyAgICAgICAgICAgICAgICBzZWVuX2Zucy5hcHBlbmQodGFza2ZuKQogICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gW10KIAogICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl1bcG5dID0gW10KLSAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHRhc2tkYXRhLmRlcGlkc1tmbmlkXToKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0uYXBwZW5kKHRhc2tkYXRhLmJ1aWxkX25hbWVzX2luZGV4W2RlcF0pCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB0YXNrZGF0YVttY10uZGVwaWRzW3Rhc2tmbl06CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl1bcG5dLmFwcGVuZChkZXApCiAKICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcG4iXVtwbl0gPSBbXQotICAgICAgICAgICAgICAgIGZvciByZGVwIGluIHRhc2tkYXRhLnJkZXBpZHNbZm5pZF06Ci0gICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdW3BuXS5hcHBlbmQodGFza2RhdGEucnVuX25hbWVzX2luZGV4W3JkZXBdKQorICAgICAgICAgICAgICAgIGZvciByZGVwIGluIHRhc2tkYXRhW21jXS5yZGVwaWRzW3Rhc2tmbl06CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdW3BuXS5hcHBlbmQocmRlcCkKIAotICAgICAgICAgICAgICAgIHJkZXBlbmRzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5kZXBzW2ZuXQorICAgICAgICAgICAgICAgIHJkZXBlbmRzID0gc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnJ1bmRlcHNbdGFza2ZuXQogICAgICAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHJkZXBlbmRzOgogICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl1bcGFja2FnZV0gPSBbXQogICAgICAgICAgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiByZGVwZW5kc1twYWNrYWdlXToKICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wa2ciXVtwYWNrYWdlXS5hcHBlbmQocmRlcGVuZCkKICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBhY2thZ2UpCiAKLSAgICAgICAgICAgICAgICBycmVjcyA9IHNlbGYucmVjaXBlY2FjaGUucnVucmVjc1tmbl0KKyAgICAgICAgICAgICAgICBycmVjcyA9IHNlbGYucmVjaXBlY2FjaGVzW21jXS5ydW5yZWNzW3Rhc2tmbl0KICAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBycmVjczoKICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJyZWNzLXBrZyJdW3BhY2thZ2VdID0gW10KICAgICAgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcnJlY3NbcGFja2FnZV06CkBAIC04MDAsNyArODA4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgcGFja2FnZSBub3QgaW4gZGVwZW5kX3RyZWVbInBhY2thZ2VzIl06CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicGFja2FnZXMiXVtwYWNrYWdlXSA9IHt9CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicGFja2FnZXMiXVtwYWNrYWdlXVsicG4iXSA9IHBuCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicGFja2FnZXMiXVtwYWNrYWdlXVsiZmlsZW5hbWUiXSA9IGZuCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicGFja2FnZXMiXVtwYWNrYWdlXVsiZmlsZW5hbWUiXSA9IHRhc2tmbgogICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bInZlcnNpb24iXSA9IHZlcnNpb24KIAogICAgICAgICByZXR1cm4gZGVwZW5kX3RyZWUKQEAgLTgxMSwxMiArODE5LDggQEAKICAgICAgICAgQ3JlYXRlIGEgZGVwZW5kZW5jeSB0cmVlIG9mIHBrZ3NfdG9fYnVpbGQsIHJldHVybmluZyB0aGUgZGF0YS4KICAgICAgICAgIiIiCiAgICAgICAgIF8sIHRhc2tkYXRhID0gc2VsZi5wcmVwYXJlVHJlZURhdGEocGtnc190b19idWlsZCwgdGFzaykKLSAgICAgICAgdGFza3NfZm5pZCA9IFtdCi0gICAgICAgIGlmIGxlbih0YXNrZGF0YS50YXNrc19uYW1lKSAhPSAwOgotICAgICAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbih0YXNrZGF0YS50YXNrc19uYW1lKSk6Ci0gICAgICAgICAgICAgICAgdGFza3NfZm5pZC5hcHBlbmQodGFza2RhdGEudGFza3NfZm5pZFt0YXNrXSkKIAotICAgICAgICBzZWVuX2ZuaWRzID0gW10KKyAgICAgICAgc2Vlbl9mbnMgPSBbXQogICAgICAgICBkZXBlbmRfdHJlZSA9IHt9CiAgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl0gPSB7fQogICAgICAgICBkZXBlbmRfdHJlZVsicG4iXSA9IHt9CkBAIC04MzEsNTEgKzgzNSw1MyBAQAogICAgICAgICAgICAgICAgIGNhY2hlZmllbGRzID0gZ2V0YXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJywgW10pCiAgICAgICAgICAgICAgICAgZXh0cmFfaW5mbyA9IGV4dHJhX2luZm8gKyBjYWNoZWZpZWxkcwogCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza3NfZm5pZCkpOgotICAgICAgICAgICAgZm5pZCA9IHRhc2tzX2ZuaWRbdGFza10KLSAgICAgICAgICAgIGZuID0gdGFza2RhdGEuZm5faW5kZXhbZm5pZF0KLSAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5dCisgICAgICAgIHRpZHMgPSBbXQorICAgICAgICBmb3IgbWMgaW4gdGFza2RhdGE6CisgICAgICAgICAgICBmb3IgdGlkIGluIHRhc2tkYXRhW21jXS50YXNrZW50cmllczoKKyAgICAgICAgICAgICAgICB0aWRzLmFwcGVuZCh0aWQpCisKKyAgICAgICAgZm9yIHRpZCBpbiB0aWRzOgorICAgICAgICAgICAgKG1jLCBmbiwgdGFza25hbWUsIHRhc2tmbikgPSBiYi5ydW5xdWV1ZS5zcGxpdF90aWRfbWNmbih0aWQpCisKKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnBrZ19mblt0YXNrZm5dCisgICAgICAgICAgICBwbiA9IHNlbGYuYWRkX21jX3ByZWZpeChtYywgcG4pCiAKICAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBkZXBlbmRfdHJlZVsicG4iXToKICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl0gPSB7fQotICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IGZuCi0gICAgICAgICAgICAgICAgdmVyc2lvbiAgPSAiJXM6JXMtJXMiICUgc2VsZi5yZWNpcGVjYWNoZS5wa2dfcGVwdnByW2ZuXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IHRhc2tmbgorICAgICAgICAgICAgICAgIHZlcnNpb24gID0gIiVzOiVzLSVzIiAlIHNlbGYucmVjaXBlY2FjaGVzW21jXS5wa2dfcGVwdnByW3Rhc2tmbl0KICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bInZlcnNpb24iXSA9IHZlcnNpb24KLSAgICAgICAgICAgICAgICByZGVwZW5kcyA9IHNlbGYucmVjaXBlY2FjaGUucnVuZGVwc1tmbl0KLSAgICAgICAgICAgICAgICBycmVjcyA9IHNlbGYucmVjaXBlY2FjaGUucnVucmVjc1tmbl0KLSAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImluaGVyaXRzIl0gPSBzZWxmLnJlY2lwZWNhY2hlLmluaGVyaXRzLmdldChmbiwgTm9uZSkKKyAgICAgICAgICAgICAgICByZGVwZW5kcyA9IHNlbGYucmVjaXBlY2FjaGVzW21jXS5ydW5kZXBzW3Rhc2tmbl0KKyAgICAgICAgICAgICAgICBycmVjcyA9IHNlbGYucmVjaXBlY2FjaGVzW21jXS5ydW5yZWNzW3Rhc2tmbl0KKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImluaGVyaXRzIl0gPSBzZWxmLnJlY2lwZWNhY2hlc1ttY10uaW5oZXJpdHMuZ2V0KHRhc2tmbiwgTm9uZSkKIAogICAgICAgICAgICAgICAgICMgZm9yIGFsbCBleHRyYSBhdHRyaWJ1dGVzIHN0b3JlZCwgYWRkIHRoZW0gdG8gdGhlIGRlcGVuZGVuY3kgdHJlZQogICAgICAgICAgICAgICAgIGZvciBlaSBpbiBleHRyYV9pbmZvOgotICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bZWldID0gdmFycyhzZWxmLnJlY2lwZWNhY2hlKVtlaV1bZm5dCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVtlaV0gPSB2YXJzKHNlbGYucmVjaXBlY2FjaGVzW21jXSlbZWldW3Rhc2tmbl0KIAotICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gc2Vlbl9mbmlkczoKLSAgICAgICAgICAgICAgICBzZWVuX2ZuaWRzLmFwcGVuZChmbmlkKQorICAgICAgICAgICAgaWYgdGFza2ZuIG5vdCBpbiBzZWVuX2ZuczoKKyAgICAgICAgICAgICAgICBzZWVuX2Zucy5hcHBlbmQodGFza2ZuKQogCiAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0gPSBbXQotICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGEuZGVwaWRzW2ZuaWRdOgotICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGFza2RhdGEuYnVpbGRfbmFtZXNfaW5kZXhbZGVwXQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIHRhc2tkYXRhW21jXS5kZXBpZHNbdGFza2ZuXToKICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSAiIgotICAgICAgICAgICAgICAgICAgICB0YXJnZXRpZCA9IHRhc2tkYXRhLmdldGJ1aWxkX2lkKGl0ZW0pCi0gICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldGlkIGluIHRhc2tkYXRhLmJ1aWxkX3RhcmdldHMgYW5kIHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdOgotICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSB0YXNrZGF0YS5idWlsZF90YXJnZXRzW3RhcmdldGlkXVswXQotICAgICAgICAgICAgICAgICAgICAgICAgZm5fcHJvdmlkZXIgPSB0YXNrZGF0YS5mbl9pbmRleFtpZF0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Byb3ZpZGVyID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5fcHJvdmlkZXJdCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiB0YXNrZGF0YVttY10uYnVpbGRfdGFyZ2V0cyBhbmQgdGFza2RhdGFbbWNdLmJ1aWxkX3RhcmdldHNbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuX3Byb3ZpZGVyID0gdGFza2RhdGFbbWNdLmJ1aWxkX3RhcmdldHNbZGVwXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSBzZWxmLnJlY2lwZWNhY2hlc1ttY10ucGtnX2ZuW2ZuX3Byb3ZpZGVyXQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSBpdGVtCisgICAgICAgICAgICAgICAgICAgIHBuX3Byb3ZpZGVyID0gc2VsZi5hZGRfbWNfcHJlZml4KG1jLCBwbl9wcm92aWRlcikKICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0uYXBwZW5kKHBuX3Byb3ZpZGVyKQogCiAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dID0gW10KLSAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiB0YXNrZGF0YS5yZGVwaWRzW2ZuaWRdOgotICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGFza2RhdGEucnVuX25hbWVzX2luZGV4W3JkZXBdCisgICAgICAgICAgICAgICAgZm9yIHJkZXAgaW4gdGFza2RhdGFbbWNdLnJkZXBpZHNbdGFza2ZuXToKICAgICAgICAgICAgICAgICAgICAgcG5fcnByb3ZpZGVyID0gIiIKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrZGF0YS5nZXRydW5faWQoaXRlbSkKLSAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza2RhdGEucnVuX3RhcmdldHMgYW5kIHRhc2tkYXRhLnJ1bl90YXJnZXRzW3RhcmdldGlkXToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gdGFza2RhdGEucnVuX3RhcmdldHNbdGFyZ2V0aWRdWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICBmbl9ycHJvdmlkZXIgPSB0YXNrZGF0YS5mbl9pbmRleFtpZF0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2ZuX3Jwcm92aWRlcl0KKyAgICAgICAgICAgICAgICAgICAgaWYgcmRlcCBpbiB0YXNrZGF0YVttY10ucnVuX3RhcmdldHMgYW5kIHRhc2tkYXRhW21jXS5ydW5fdGFyZ2V0c1tyZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuX3Jwcm92aWRlciA9IHRhc2tkYXRhW21jXS5ydW5fdGFyZ2V0c1tyZGVwXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgcG5fcnByb3ZpZGVyID0gc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnBrZ19mbltmbl9ycHJvdmlkZXJdCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbl9ycHJvdmlkZXIgPSBpdGVtCisgICAgICAgICAgICAgICAgICAgICAgICBwbl9ycHJvdmlkZXIgPSByZGVwCisgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IHNlbGYuYWRkX21jX3ByZWZpeChtYywgcG5fcnByb3ZpZGVyKQogICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcG4iXVtwbl0uYXBwZW5kKHBuX3Jwcm92aWRlcikKIAogICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wa2ciXS51cGRhdGUocmRlcGVuZHMpCkBAIC05MDAsOCArOTA2LDggQEAKICAgICAgICAgZGVwZ3JhcGggPSBzZWxmLmdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCiAKICAgICAgICAgIyBQcmludHMgYSBmbGF0dGVuZWQgZm9ybSBvZiBwYWNrYWdlLWRlcGVuZHMgYmVsb3cgd2hlcmUgc3VicGFja2FnZXMgb2YgYSBwYWNrYWdlIGFyZSBtZXJnZWQgaW50byB0aGUgbWFpbiBwbgotICAgICAgICBkZXBlbmRzX2ZpbGUgPSBmaWxlKCdwbi1kZXBlbmRzLmRvdCcsICd3JyApCi0gICAgICAgIGJ1aWxkbGlzdF9maWxlID0gZmlsZSgncG4tYnVpbGRsaXN0JywgJ3cnICkKKyAgICAgICAgZGVwZW5kc19maWxlID0gb3BlbigncG4tZGVwZW5kcy5kb3QnLCAndycgKQorICAgICAgICBidWlsZGxpc3RfZmlsZSA9IG9wZW4oJ3BuLWJ1aWxkbGlzdCcsICd3JyApCiAgICAgICAgIHByaW50KCJkaWdyYXBoIGRlcGVuZHMgeyIsIGZpbGU9ZGVwZW5kc19maWxlKQogICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbInBuIl06CiAgICAgICAgICAgICBmbiA9IGRlcGdyYXBoWyJwbiJdW3BuXVsiZmlsZW5hbWUiXQpAQCAtOTE3LDkgKzkyMywxMCBAQAogICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl1bcG5dOgogICAgICAgICAgICAgICAgIHByaW50KCciJXMiIC0+ICIlcyIgW3N0eWxlPWRhc2hlZF0nICUgKHBuLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCiAgICAgICAgIHByaW50KCJ9IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGRlcGVuZHNfZmlsZS5jbG9zZSgpCiAgICAgICAgIGxvZ2dlci5pbmZvKCJQTiBkZXBlbmRlbmNpZXMgc2F2ZWQgdG8gJ3BuLWRlcGVuZHMuZG90JyIpCiAKLSAgICAgICAgZGVwZW5kc19maWxlID0gZmlsZSgncGFja2FnZS1kZXBlbmRzLmRvdCcsICd3JyApCisgICAgICAgIGRlcGVuZHNfZmlsZSA9IG9wZW4oJ3BhY2thZ2UtZGVwZW5kcy5kb3QnLCAndycgKQogICAgICAgICBwcmludCgiZGlncmFwaCBkZXBlbmRzIHsiLCBmaWxlPWRlcGVuZHNfZmlsZSkKICAgICAgICAgZm9yIHBhY2thZ2UgaW4gZGVwZ3JhcGhbInBhY2thZ2VzIl06CiAgICAgICAgICAgICBwbiA9IGRlcGdyYXBoWyJwYWNrYWdlcyJdW3BhY2thZ2VdWyJwbiJdCkBAIC05MzgsOSArOTQ1LDEwIEBACiAgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicnJlY3MtcGtnIl1bcGFja2FnZV06CiAgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIiBbc3R5bGU9ZG90dGVkXScgJSAocGFja2FnZSwgcmRlcGVuZCksIGZpbGU9ZGVwZW5kc19maWxlKQogICAgICAgICBwcmludCgifSIsIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBkZXBlbmRzX2ZpbGUuY2xvc2UoKQogICAgICAgICBsb2dnZXIuaW5mbygiUGFja2FnZSBkZXBlbmRlbmNpZXMgc2F2ZWQgdG8gJ3BhY2thZ2UtZGVwZW5kcy5kb3QnIikKIAotICAgICAgICB0ZGVwZW5kc19maWxlID0gZmlsZSgndGFzay1kZXBlbmRzLmRvdCcsICd3JyApCisgICAgICAgIHRkZXBlbmRzX2ZpbGUgPSBvcGVuKCd0YXNrLWRlcGVuZHMuZG90JywgJ3cnICkKICAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT10ZGVwZW5kc19maWxlKQogICAgICAgICBmb3IgdGFzayBpbiBkZXBncmFwaFsidGRlcGVuZHMiXToKICAgICAgICAgICAgIChwbiwgdGFza25hbWUpID0gdGFzay5yc3BsaXQoIi4iLCAxKQpAQCAtOTUwLDEzICs5NTgsMTQgQEAKICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZ3JhcGhbInRkZXBlbmRzIl1bdGFza106CiAgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAodGFzaywgZGVwKSwgZmlsZT10ZGVwZW5kc19maWxlKQogICAgICAgICBwcmludCgifSIsIGZpbGU9dGRlcGVuZHNfZmlsZSkKKyAgICAgICAgdGRlcGVuZHNfZmlsZS5jbG9zZSgpCiAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXNrIGRlcGVuZGVuY2llcyBzYXZlZCB0byAndGFzay1kZXBlbmRzLmRvdCciKQogCiAgICAgZGVmIHNob3dfYXBwZW5kc193aXRoX25vX3JlY2lwZXMoc2VsZik6CiAgICAgICAgICMgRGV0ZXJtaW5lIHdoaWNoIGJiYXBwZW5kcyBoYXZlbid0IGJlZW4gYXBwbGllZAogCiAgICAgICAgICMgRmlyc3QgZ2V0IGxpc3Qgb2YgcmVjaXBlcywgaW5jbHVkaW5nIHNraXBwZWQKLSAgICAgICAgcmVjaXBlZm5zID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm4ua2V5cygpCisgICAgICAgIHJlY2lwZWZucyA9IGxpc3Qoc2VsZi5yZWNpcGVjYWNoZXNbJyddLnBrZ19mbi5rZXlzKCkpCiAgICAgICAgIHJlY2lwZWZucy5leHRlbmQoc2VsZi5za2lwbGlzdC5rZXlzKCkpCiAKICAgICAgICAgIyBXb3JrIG91dCBsaXN0IG9mIGJiYXBwZW5kcyB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkCkBAIC05ODAsMjAgKzk4OSwyMSBAQAogCiAgICAgZGVmIGhhbmRsZVByZWZQcm92aWRlcnMoc2VsZik6CiAKLSAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKLSAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCi0gICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisgICAgICAgIGZvciBtYyBpbiBzZWxmLm11bHRpY29uZmlnczoKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGRhdGEuY3JlYXRlQ29weShzZWxmLmRhdGFidWlsZGVyLm1jZGF0YVttY10pCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCiAKLSAgICAgICAgIyBIYW5kbGUgUFJFRkVSUkVEX1BST1ZJREVSUwotICAgICAgICBmb3IgcCBpbiAobG9jYWxkYXRhLmdldFZhcignUFJFRkVSUkVEX1BST1ZJREVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIChwcm92aWRlZSwgcHJvdmlkZXIpID0gcC5zcGxpdCgnOicpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuY3JpdGljYWwoIk1hbGZvcm1lZCBvcHRpb24gaW4gUFJFRkVSUkVEX1BST1ZJREVSUyB2YXJpYWJsZTogJXMiICUgcCkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgcHJvdmlkZWUgaW4gc2VsZi5yZWNpcGVjYWNoZS5wcmVmZXJyZWQgYW5kIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSAhPSBwcm92aWRlcjoKLSAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiY29uZmxpY3RpbmcgcHJlZmVyZW5jZXMgZm9yICVzOiBib3RoICVzIGFuZCAlcyBzcGVjaWZpZWQiLCBwcm92aWRlZSwgcHJvdmlkZXIsIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSkKLSAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSA9IHByb3ZpZGVyCisgICAgICAgICAgICAjIEhhbmRsZSBQUkVGRVJSRURfUFJPVklERVJTCisgICAgICAgICAgICBmb3IgcCBpbiAobG9jYWxkYXRhLmdldFZhcignUFJFRkVSUkVEX1BST1ZJREVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgKHByb3ZpZGVlLCBwcm92aWRlcikgPSBwLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmNyaXRpY2FsKCJNYWxmb3JtZWQgb3B0aW9uIGluIFBSRUZFUlJFRF9QUk9WSURFUlMgdmFyaWFibGU6ICVzIiAlIHApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgcHJvdmlkZWUgaW4gc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnByZWZlcnJlZCBhbmQgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnByZWZlcnJlZFtwcm92aWRlZV0gIT0gcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmVycm9yKCJjb25mbGljdGluZyBwcmVmZXJlbmNlcyBmb3IgJXM6IGJvdGggJXMgYW5kICVzIHNwZWNpZmllZCIsIHByb3ZpZGVlLCBwcm92aWRlciwgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnByZWZlcnJlZFtwcm92aWRlZV0pCisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnByZWZlcnJlZFtwcm92aWRlZV0gPSBwcm92aWRlcgogCiAgICAgZGVmIGZpbmRDb3JlQmFzZUZpbGVzKHNlbGYsIHN1YmRpciwgY29uZmlnZmlsZSk6CiAgICAgICAgIGNvcmViYXNlID0gc2VsZi5kYXRhLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKSBvciAiIgpAQCAtMTA4OCwxMCArMTA5OCwxMCBAQAogICAgICAgICAiIiIKICAgICAgICAgcGtnX2xpc3QgPSBbXQogCi0gICAgICAgIGZvciBwZm4gaW4gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm46Ci0gICAgICAgICAgICBpbmhlcml0cyA9IHNlbGYucmVjaXBlY2FjaGUuaW5oZXJpdHMuZ2V0KHBmbiwgTm9uZSkKKyAgICAgICAgZm9yIHBmbiBpbiBzZWxmLnJlY2lwZWNhY2hlc1snJ10ucGtnX2ZuOgorICAgICAgICAgICAgaW5oZXJpdHMgPSBzZWxmLnJlY2lwZWNhY2hlc1snJ10uaW5oZXJpdHMuZ2V0KHBmbiwgTm9uZSkKICAgICAgICAgICAgIGlmIGluaGVyaXRzIGFuZCBrbGFzcyBpbiBpbmhlcml0czoKLSAgICAgICAgICAgICAgICBwa2dfbGlzdC5hcHBlbmQoc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bcGZuXSkKKyAgICAgICAgICAgICAgICBwa2dfbGlzdC5hcHBlbmQoc2VsZi5yZWNpcGVjYWNoZXNbJyddLnBrZ19mbltwZm5dKQogCiAgICAgICAgIHJldHVybiBwa2dfbGlzdAogCkBAIC0xMTI0LDE2ICsxMTM0LDE4IEBACiAgICAgICAgICAgICBzaGVsbC5zdGFydCggc2VsZiApCiAKIAotICAgIGRlZiBoYW5kbGVDb2xsZWN0aW9ucyggc2VsZiwgY29sbGVjdGlvbnMgKToKKyAgICBkZWYgaGFuZGxlQ29sbGVjdGlvbnMoc2VsZiwgY29sbGVjdGlvbnMpOgogICAgICAgICAiIiJIYW5kbGUgY29sbGVjdGlvbnMiIiIKICAgICAgICAgZXJyb3JzID0gRmFsc2UKLSAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMgPSBbXQorICAgICAgICBzZWxmLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcyA9IFtdCiAgICAgICAgIGlmIGNvbGxlY3Rpb25zOgogICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzID0ge30KICAgICAgICAgICAgIGNvbGxlY3Rpb25fZGVwZW5kcyA9IHt9CiAgICAgICAgICAgICBjb2xsZWN0aW9uX2xpc3QgPSBjb2xsZWN0aW9ucy5zcGxpdCgpCiAgICAgICAgICAgICBtaW5fcHJpbyA9IDAKICAgICAgICAgICAgIGZvciBjIGluIGNvbGxlY3Rpb25fbGlzdDoKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCdQcm9jZXNzaW5nICVzIGluIGNvbGxlY3Rpb24gbGlzdCcgJSAoYykpCisKICAgICAgICAgICAgICAgICAjIEdldCBjb2xsZWN0aW9uIHByaW9yaXR5IGlmIGRlZmluZWQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX1BSSU9SSVRZXyVzIiAlIGMsIFRydWUpCiAgICAgICAgICAgICAgICAgaWYgcHJpb3JpdHk6CkBAIC0xMTUyLDEwICsxMTY0LDEwIEBACiAgICAgICAgICAgICAgICAgZGVwcyA9IHNlbGYuZGF0YS5nZXRWYXIoIkxBWUVSREVQRU5EU18lcyIgJSBjLCBUcnVlKQogICAgICAgICAgICAgICAgIGlmIGRlcHM6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxpc3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcERpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcykKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnV0aWxzLlZlcnNpb25TdHJpbmdFeGNlcHRpb24gYXMgdnNlOgogICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ0Vycm9yIHBhcnNpbmcgTEFZRVJERVBFTkRTXyVzOiAlcycgJSAoYywgc3RyKHZzZSkpKQotICAgICAgICAgICAgICAgICAgICBmb3IgZGVwLCBvcGxpc3QgaW4gZGVwbGlzdC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCwgb3BsaXN0IGluIGxpc3QoZGVwRGljdC5pdGVtcygpKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBjb2xsZWN0aW9uX2xpc3Q6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG9wc3RyIGluIG9wbGlzdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJ2ZXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJMQVlFUlZFUlNJT05fJXMiICUgZGVwLCBUcnVlKQpAQCAtMTE3NCwxMCArMTE4NiwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiTGF5ZXIgJyVzJyBkZXBlbmRzIG9uIGxheWVyICclcycsIGJ1dCB0aGlzIGxheWVyIGlzIG5vdCBlbmFibGVkIGluIHlvdXIgY29uZmlndXJhdGlvbiIsIGMsIGRlcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fZGVwZW5kc1tjXSA9IGRlcGxpc3Qua2V5cygpCisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fZGVwZW5kc1tjXSA9IGxpc3QoZGVwRGljdC5rZXlzKCkpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9kZXBlbmRzW2NdID0gW10KIAorICAgICAgICAgICAgICAgICMgQ2hlY2sgcmVjb21tZW5kcyBhbmQgc3RvcmUgaW5mb3JtYXRpb24gZm9yIHByaW9yaXR5IGNhbGN1bGF0aW9uCisgICAgICAgICAgICAgICAgcmVjcyA9IHNlbGYuZGF0YS5nZXRWYXIoIkxBWUVSUkVDT01NRU5EU18lcyIgJSBjLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHJlY3M6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY0RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIocmVjcykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnV0aWxzLlZlcnNpb25TdHJpbmdFeGNlcHRpb24gYXMgdnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ0Vycm9yIHBhcnNpbmcgTEFZRVJSRUNPTU1FTkRTXyVzOiAlcycgJSAoYywgc3RyKHZzZSkpKQorICAgICAgICAgICAgICAgICAgICBmb3IgcmVjLCBvcGxpc3QgaW4gbGlzdChyZWNEaWN0Lml0ZW1zKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVjIGluIGNvbGxlY3Rpb25fbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcGxpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc3RyID0gb3BsaXN0WzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVydmVyID0gc2VsZi5kYXRhLmdldFZhcigiTEFZRVJWRVJTSU9OXyVzIiAlIHJlYywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3AsIHJlY3ZlcikgPSBvcHN0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gYmIudXRpbHMudmVyY21wX3N0cmluZ19vcChsYXllcnZlciwgcmVjdmVyLCBvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi51dGlscy5WZXJzaW9uU3RyaW5nRXhjZXB0aW9uIGFzIHZzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnRXJyb3IgcGFyc2luZyBMQVlFUlJFQ09NTUVORFNfJXM6ICVzJyAlIChjLCBzdHIodnNlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmRlYnVnKDMsIkxheWVyICclcycgcmVjb21tZW5kcyB2ZXJzaW9uICVzIG9mIGxheWVyICclcycsIGJ1dCB2ZXJzaW9uICVzIGlzIGN1cnJlbnRseSBlbmFibGVkIGluIHlvdXIgY29uZmlndXJhdGlvbi4gQ2hlY2sgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IG1hdGNoaW5nIHZlcnNpb25zL2JyYW5jaGVzIG9mIHRoZXNlIHR3byBsYXllcnMuIiwgYywgb3BzdHIsIHJlYywgbGF5ZXJ2ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmRlYnVnKDMsIkxheWVyICclcycgcmVjb21tZW5kcyB2ZXJzaW9uICVzIG9mIGxheWVyICclcycsIHdoaWNoIGV4aXN0cyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gYnV0IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uLiBDaGVjayB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgbWF0Y2hpbmcgdmVyc2lvbnMvYnJhbmNoZXMgb2YgdGhlc2UgdHdvIGxheWVycy4iLCBjLCBvcHN0ciwgcmVjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygzLCJMYXllciAnJXMnIHJlY29tbWVuZHMgbGF5ZXIgJyVzJywgc28gd2UgYXJlIGFkZGluZyBpdCIsIGMsIHJlYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX2RlcGVuZHNbY10uYXBwZW5kKHJlYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMywiTGF5ZXIgJyVzJyByZWNvbW1lbmRzIGxheWVyICclcycsIGJ1dCB0aGlzIGxheWVyIGlzIG5vdCBlbmFibGVkIGluIHlvdXIgY29uZmlndXJhdGlvbiIsIGMsIHJlYykKKwogICAgICAgICAgICAgIyBSZWN1cnNpdmVseSB3b3JrIG91dCBjb2xsZWN0aW9uIHByaW9yaXRpZXMgYmFzZWQgb24gZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICBkZWYgY2FsY19sYXllcl9wcmlvcml0eShjb2xsZWN0aW9uKToKICAgICAgICAgICAgICAgICBpZiBub3QgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NvbGxlY3Rpb25dOgpAQCAtMTIwNSw3ICsxMjQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIkJCRklMRV9QQVRURVJOXyVzIFwiJXNcIiBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iLCBjLCByZWdleCkKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzLmFwcGVuZCgoYywgcmVnZXgsIGNyZSwgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NdKSkKKyAgICAgICAgICAgICAgICBzZWxmLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcy5hcHBlbmQoKGMsIHJlZ2V4LCBjcmUsIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSkpCiAgICAgICAgIGlmIGVycm9yczoKICAgICAgICAgICAgICMgV2UndmUgYWxyZWFkeSBwcmludGVkIHRoZSBhY3R1YWwgZXJyb3IocykKICAgICAgICAgICAgIHJhaXNlIENvbGxlY3Rpb25FcnJvcigiRXJyb3JzIGR1cmluZyBwYXJzaW5nIGxheWVyIGNvbmZpZ3VyYXRpb24iKQpAQCAtMTIyOCw3ICsxMjY5LDcgQEAKICAgICAgICAgaWYgYmYuc3RhcnRzd2l0aCgiLyIpIG9yIGJmLnN0YXJ0c3dpdGgoIi4uLyIpOgogICAgICAgICAgICAgYmYgPSBvcy5wYXRoLmFic3BhdGgoYmYpCiAKLSAgICAgICAgc2VsZi5jb2xsZWN0aW9uID0gQ29va2VyQ29sbGVjdEZpbGVzKHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzKQorICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBDb29rZXJDb2xsZWN0RmlsZXMoc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMpCiAgICAgICAgIGZpbGVsaXN0LCBtYXNrZWQgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdF9iYmZpbGVzKHNlbGYuZGF0YSwgc2VsZi5leHBhbmRlZF9kYXRhKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zdGF0KGJmKQpAQCAtMTI2NCw2ICsxMzA1LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIEJ1aWxkIHRoZSBmaWxlIG1hdGNoaW5nIHJlZ2V4cCBidWlsZGZpbGUKICAgICAgICAgIiIiCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRJbml0KCksIHNlbGYuZXhwYW5kZWRfZGF0YSkKIAogICAgICAgICAjIFRvbyBtYW55IHBlb3BsZSB1c2UgLWIgYmVjYXVzZSB0aGV5IHRoaW5rIGl0J3MgaG93IHlvdSBub3JtYWxseQogICAgICAgICAjIHNwZWNpZnkgYSB0YXJnZXQgdG8gYmUgYnVpbHQsIHNvIHNob3cgYSB3YXJuaW5nCkBAIC0xMjc3LDE3ICsxMzE5LDE3IEBACiAgICAgICAgIGlmICh0YXNrID09IE5vbmUpOgogICAgICAgICAgICAgdGFzayA9IHNlbGYuY29uZmlndXJhdGlvbi5jbWQKIAotICAgICAgICBmbiwgY2xzID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihidWlsZGZpbGUpCisgICAgICAgIGZuLCBjbHMsIG1jID0gYmIuY2FjaGUudmlydHVhbGZuMnJlYWxmbihidWlsZGZpbGUpCiAgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCiAKICAgICAgICAgc2VsZi5idWlsZFNldFZhcnMoKQogCi0gICAgICAgIGluZm9zID0gYmIuY2FjaGUuQ2FjaGUucGFyc2UoZm4sIHNlbGYuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlc19hcnJheSkKKyAgICAgICAgYmJfY2FjaGUgPSBiYi5jYWNoZS5DYWNoZShzZWxmLmRhdGFidWlsZGVyLCBzZWxmLmRhdGFfaGFzaCwgc2VsZi5jYWNoZXNfYXJyYXkpCisKKyAgICAgICAgaW5mb3MgPSBiYl9jYWNoZS5wYXJzZShmbiwgc2VsZi5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pKQogICAgICAgICBpbmZvcyA9IGRpY3QoaW5mb3MpCiAKLSAgICAgICAgZm4gPSBiYi5jYWNoZS5DYWNoZS5yZWFsZm4ydmlydHVhbChmbiwgY2xzKQorICAgICAgICBmbiA9IGJiLmNhY2hlLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMsIG1jKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbmZvX2FycmF5ID0gaW5mb3NbZm5dCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyOTYsMjkgKzEzMzgsMzAgQEAKICAgICAgICAgaWYgaW5mb19hcnJheVswXS5za2lwcGVkOgogICAgICAgICAgICAgYmIuZmF0YWwoIiVzIHdhcyBza2lwcGVkOiAlcyIgJSAoZm4sIGluZm9fYXJyYXlbMF0uc2tpcHJlYXNvbikpCiAKLSAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5hZGRfZnJvbV9yZWNpcGVpbmZvKGZuLCBpbmZvX2FycmF5KQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10uYWRkX2Zyb21fcmVjaXBlaW5mbyhmbiwgaW5mb19hcnJheSkKIAogICAgICAgICAjIFR3ZWFrIHNvbWUgdmFyaWFibGVzCiAgICAgICAgIGl0ZW0gPSBpbmZvX2FycmF5WzBdLnBuCi0gICAgICAgIHNlbGYucmVjaXBlY2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMgPSBzZXQoKQotICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9wcmlvcml0eVtmbl0gPSAxCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGVzW21jXS5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IHNldCgpCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGVzW21jXS5iYmZpbGVfcHJpb3JpdHlbZm5dID0gMQogCiAgICAgICAgICMgUmVtb3ZlIGV4dGVybmFsIGRlcGVuZGVuY2llcwotICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLnRhc2tfZGVwc1tmbl1bJ2RlcGVuZHMnXSA9IHt9Ci0gICAgICAgIHNlbGYucmVjaXBlY2FjaGUuZGVwc1tmbl0gPSBbXQotICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLnJ1bmRlcHNbZm5dID0gW10KLSAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5ydW5yZWNzW2ZuXSA9IFtdCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGVzW21jXS50YXNrX2RlcHNbZm5dWydkZXBlbmRzJ10gPSB7fQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10uZGVwc1tmbl0gPSBbXQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10ucnVuZGVwc1tmbl0gPSBbXQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10ucnVucmVjc1tmbl0gPSBbXQogCiAgICAgICAgICMgSW52YWxpZGF0ZSB0YXNrIGZvciB0YXJnZXQgaWYgZm9yY2UgbW9kZSBhY3RpdmUKICAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmZvcmNlOgogICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIkludmFsaWRhdGUgdGFzayAlcywgJXMiLCB0YXNrLCBmbikKICAgICAgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgogICAgICAgICAgICAgICAgIHRhc2sgPSAiZG9fJXMiICUgdGFzawotICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmludmFsaWRhdGVfdGFzayh0YXNrLCBzZWxmLnJlY2lwZWNhY2hlLCBmbikKKyAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5pbnZhbGlkYXRlX3Rhc2sodGFzaywgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLCBmbikKIAogICAgICAgICAjIFNldHVwIHRhc2tkYXRhIHN0cnVjdHVyZQotICAgICAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKHNlbGYuY29uZmlndXJhdGlvbi5hYm9ydCkKLSAgICAgICAgdGFza2RhdGEuYWRkX3Byb3ZpZGVyKHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgaXRlbSkKKyAgICAgICAgdGFza2RhdGEgPSB7fQorICAgICAgICB0YXNrZGF0YVttY10gPSBiYi50YXNrZGF0YS5UYXNrRGF0YShzZWxmLmNvbmZpZ3VyYXRpb24uYWJvcnQpCisgICAgICAgIHRhc2tkYXRhW21jXS5hZGRfcHJvdmlkZXIoc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlc1ttY10sIGl0ZW0pCiAKICAgICAgICAgYnVpbGRuYW1lID0gc2VsZi5kYXRhLmdldFZhcigiQlVJTEROQU1FIiwgVHJ1ZSkKICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZFN0YXJ0ZWQoYnVpbGRuYW1lLCBbaXRlbV0pLCBzZWxmLmV4cGFuZGVkX2RhdGEpCkBAIC0xMzI2LDkgKzEzNjksOSBAQAogICAgICAgICAjIEV4ZWN1dGUgdGhlIHJ1bnF1ZXVlCiAgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgogICAgICAgICAgICAgdGFzayA9ICJkb18lcyIgJSB0YXNrCi0gICAgICAgIHJ1bmxpc3QgPSBbW2l0ZW0sIHRhc2tdXQorICAgICAgICBydW5saXN0ID0gW1ttYywgaXRlbSwgdGFzaywgZm5dXQogCi0gICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKyAgICAgICAgcnEgPSBiYi5ydW5xdWV1ZS5SdW5RdWV1ZShzZWxmLCBzZWxmLmRhdGEsIHNlbGYucmVjaXBlY2FjaGVzLCB0YXNrZGF0YSwgcnVubGlzdCkKIAogICAgICAgICBkZWYgYnVpbGRGaWxlSWRsZShzZXJ2ZXIsIHJxLCBhYm9ydCk6CiAKQEAgLTEzNTMsNyArMTM5Niw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgICAgIGlmIG5vdCByZXR2YWw6Ci0gICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZENvbXBsZXRlZChsZW4ocnEucnFkYXRhLnJ1bnFfZm5pZCksIGJ1aWxkbmFtZSwgaXRlbSwgZmFpbHVyZXMsIGludGVycnVwdGVkKSwgc2VsZi5leHBhbmRlZF9kYXRhKQorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQobGVuKHJxLnJxZGF0YS5ydW50YXNrZW50cmllcyksIGJ1aWxkbmFtZSwgaXRlbSwgZmFpbHVyZXMsIGludGVycnVwdGVkKSwgc2VsZi5leHBhbmRlZF9kYXRhKQogICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQobXNnKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgaWYgcmV0dmFsIGlzIFRydWU6CkBAIC0xMzg5LDcgKzE0MzIsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgotICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQobGVuKHJxLnJxZGF0YS5ydW5xX2ZuaWQpLCBidWlsZG5hbWUsIHRhcmdldHMsIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKGxlbihycS5ycWRhdGEucnVudGFza2VudHJpZXMpLCBidWlsZG5hbWUsIHRhcmdldHMsIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZGF0YSkKICAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKG1zZykKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGlmIHJldHZhbCBpcyBUcnVlOgpAQCAtMTQwNiwyMyArMTQ0OSwyNCBAQAogICAgICAgICBpZiBub3QgdGFzay5zdGFydHN3aXRoKCJkb18iKToKICAgICAgICAgICAgIHRhc2sgPSAiZG9fJXMiICUgdGFzawogCi0gICAgICAgIHRhc2tkYXRhLCBydW5saXN0LCBmdWxsdGFyZ2V0bGlzdCA9IHNlbGYuYnVpbGRUYXNrRGF0YSh0YXJnZXRzLCB0YXNrLCBzZWxmLmNvbmZpZ3VyYXRpb24uYWJvcnQpCisgICAgICAgIHBhY2thZ2VzID0gW3RhcmdldCBpZiAnOicgaW4gdGFyZ2V0IGVsc2UgJyVzOiVzJyAlICh0YXJnZXQsIHRhc2spIGZvciB0YXJnZXQgaW4gdGFyZ2V0c10KKworICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkSW5pdChwYWNrYWdlcyksIHNlbGYuZXhwYW5kZWRfZGF0YSkKKworICAgICAgICB0YXNrZGF0YSwgcnVubGlzdCA9IHNlbGYuYnVpbGRUYXNrRGF0YSh0YXJnZXRzLCB0YXNrLCBzZWxmLmNvbmZpZ3VyYXRpb24uYWJvcnQpCiAKICAgICAgICAgYnVpbGRuYW1lID0gc2VsZi5kYXRhLmdldFZhcigiQlVJTEROQU1FIiwgRmFsc2UpCiAKICAgICAgICAgIyBtYWtlIHRhcmdldHMgdG8gYWx3YXlzIGxvb2sgYXMgPHRhcmdldD46ZG9fPHRhc2s+CiAgICAgICAgIG50YXJnZXRzID0gW10KLSAgICAgICAgZm9yIHRhcmdldCBpbiBmdWxsdGFyZ2V0bGlzdDoKLSAgICAgICAgICAgIGlmICI6IiBpbiB0YXJnZXQ6Ci0gICAgICAgICAgICAgICAgaWYgIjpkb18iIG5vdCBpbiB0YXJnZXQ6Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9ICIlczpkb18lcyIgJSB0dXBsZSh0YXJnZXQuc3BsaXQoIjoiLCAxKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gIiVzOiVzIiAlICh0YXJnZXQsIHRhc2spCi0gICAgICAgICAgICBudGFyZ2V0cy5hcHBlbmQodGFyZ2V0KQorICAgICAgICBmb3IgdGFyZ2V0IGluIHJ1bmxpc3Q6CisgICAgICAgICAgICBpZiB0YXJnZXRbMF06CisgICAgICAgICAgICAgICAgbnRhcmdldHMuYXBwZW5kKCJtdWx0aWNvbmZpZzolczolczolcyIgJSAodGFyZ2V0WzBdLCB0YXJnZXRbMV0sIHRhcmdldFsyXSkpCisgICAgICAgICAgICBudGFyZ2V0cy5hcHBlbmQoIiVzOiVzIiAlICh0YXJnZXRbMV0sIHRhcmdldFsyXSkpCiAKICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZFN0YXJ0ZWQoYnVpbGRuYW1lLCBudGFyZ2V0cyksIHNlbGYuZGF0YSkKIAotICAgICAgICBycSA9IGJiLnJ1bnF1ZXVlLlJ1blF1ZXVlKHNlbGYsIHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgdGFza2RhdGEsIHJ1bmxpc3QpCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlcywgdGFza2RhdGEsIHJ1bmxpc3QpCiAgICAgICAgIGlmICd1bml2ZXJzZScgaW4gdGFyZ2V0czoKICAgICAgICAgICAgIHJxLnJxZGF0YS53YXJuX211bHRpX2JiID0gVHJ1ZQogCkBAIC0xNTM3LDEzICsxNTgxLDE0IEBACiAgICAgICAgICAgICBpZiBDb29rZXJGZWF0dXJlcy5TRU5EX1NBTklUWUVWRU5UUyBpbiBzZWxmLmZlYXR1cmVzZXQ6CiAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVjayhGYWxzZSksIHNlbGYuZGF0YSkKIAotICAgICAgICAgICAgaWdub3JlID0gc2VsZi5leHBhbmRlZF9kYXRhLmdldFZhcigiQVNTVU1FX1BST1ZJREVEIiwgVHJ1ZSkgb3IgIiIKLSAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMgPSBzZXQoaWdub3JlLnNwbGl0KCkpCisgICAgICAgICAgICBmb3IgbWMgaW4gc2VsZi5tdWx0aWNvbmZpZ3M6CisgICAgICAgICAgICAgICAgaWdub3JlID0gc2VsZi5kYXRhYnVpbGRlci5tY2RhdGFbbWNdLmdldFZhcigiQVNTVU1FX1BST1ZJREVEIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10uaWdub3JlZF9kZXBlbmRlbmNpZXMgPSBzZXQoaWdub3JlLnNwbGl0KCkpCiAKLSAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX2Fzc3VtZV9wcm92aWRlZDoKLSAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzLmFkZChkZXApCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10uaWdub3JlZF9kZXBlbmRlbmNpZXMuYWRkKGRlcCkKIAotICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uID0gQ29va2VyQ29sbGVjdEZpbGVzKHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzKQorICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uID0gQ29va2VyQ29sbGVjdEZpbGVzKHNlbGYuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzKQogICAgICAgICAgICAgKGZpbGVsaXN0LCBtYXNrZWQpID0gc2VsZi5jb2xsZWN0aW9uLmNvbGxlY3RfYmJmaWxlcyhzZWxmLmRhdGEsIHNlbGYuZXhwYW5kZWRfZGF0YSkKIAogICAgICAgICAgICAgc2VsZi5wYXJzZXIgPSBDb29rZXJQYXJzZXIoc2VsZiwgZmlsZWxpc3QsIG1hc2tlZCkKQEAgLTE1NTcsMTggKzE2MDIsMjAgQEAKICAgICAgICAgICAgICAgICByYWlzZSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oKQogICAgICAgICAgICAgc2VsZi5zaG93X2FwcGVuZHNfd2l0aF9ub19yZWNpcGVzKCkKICAgICAgICAgICAgIHNlbGYuaGFuZGxlUHJlZlByb3ZpZGVycygpCi0gICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9wcmlvcml0eSA9IHNlbGYuY29sbGVjdGlvbi5jb2xsZWN0aW9uX3ByaW9yaXRpZXMoc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm4sIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIGZvciBtYyBpbiBzZWxmLm11bHRpY29uZmlnczoKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10uYmJmaWxlX3ByaW9yaXR5ID0gc2VsZi5jb2xsZWN0aW9uLmNvbGxlY3Rpb25fcHJpb3JpdGllcyhzZWxmLnJlY2lwZWNhY2hlc1ttY10ucGtnX2ZuLCBzZWxmLmRhdGEpCiAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUucnVubmluZwogCiAgICAgICAgICAgICAjIFNlbmQgYW4gZXZlbnQgbGlzdGluZyBhbGwgc3RhbXBzIHJlYWNoYWJsZSBhZnRlciBwYXJzaW5nCiAgICAgICAgICAgICAjIHdoaWNoIHRoZSBtZXRhZGF0YSBtYXkgdXNlIHRvIGNsZWFuIHVwIHN0YWxlIGRhdGEKLSAgICAgICAgICAgIGV2ZW50ID0gYmIuZXZlbnQuUmVhY2hhYmxlU3RhbXBzKHNlbGYucmVjaXBlY2FjaGUuc3RhbXApCi0gICAgICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50LCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICBmb3IgbWMgaW4gc2VsZi5tdWx0aWNvbmZpZ3M6CisgICAgICAgICAgICAgICAgZXZlbnQgPSBiYi5ldmVudC5SZWFjaGFibGVTdGFtcHMoc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnN0YW1wKQorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoZXZlbnQsIHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhW21jXSkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiBjaGVja1BhY2thZ2VzKHNlbGYsIHBrZ3NfdG9fYnVpbGQpOgorICAgIGRlZiBjaGVja1BhY2thZ2VzKHNlbGYsIHBrZ3NfdG9fYnVpbGQsIHRhc2s9Tm9uZSk6CiAKICAgICAgICAgIyBSZXR1cm4gYSBjb3B5LCBkb24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsCiAgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwa2dzX3RvX2J1aWxkWzpdCkBAIC0xNTc5LDI2ICsxNjI2LDI5IEBACiAgICAgICAgIGlnbm9yZSA9IChzZWxmLmV4cGFuZGVkX2RhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgICAgICBmb3IgcGtnIGluIHBrZ3NfdG9fYnVpbGQ6CiAgICAgICAgICAgICBpZiBwa2cgaW4gaWdub3JlOgotICAgICAgICAgICAgICAgIHBhcnNlbG9nLndhcm4oIkV4cGxpY2l0IHRhcmdldCBcIiVzXCIgaXMgaW4gQVNTVU1FX1BST1ZJREVELCBpZ25vcmluZyIgJSBwa2cpCisgICAgICAgICAgICAgICAgcGFyc2Vsb2cud2FybmluZygiRXhwbGljaXQgdGFyZ2V0IFwiJXNcIiBpcyBpbiBBU1NVTUVfUFJPVklERUQsIGlnbm9yaW5nIiAlIHBrZykKIAogICAgICAgICBpZiAnd29ybGQnIGluIHBrZ3NfdG9fYnVpbGQ6Ci0gICAgICAgICAgICBiYi5wcm92aWRlcnMuYnVpbGRXb3JsZFRhcmdldExpc3Qoc2VsZi5yZWNpcGVjYWNoZSkKICAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd3b3JsZCcpCi0gICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLndvcmxkX3RhcmdldDoKLSAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorICAgICAgICAgICAgZm9yIG1jIGluIHNlbGYubXVsdGljb25maWdzOgorICAgICAgICAgICAgICAgIGJiLnByb3ZpZGVycy5idWlsZFdvcmxkVGFyZ2V0TGlzdChzZWxmLnJlY2lwZWNhY2hlc1ttY10sIHRhc2spCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gc2VsZi5yZWNpcGVjYWNoZXNbbWNdLndvcmxkX3RhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbWM6CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gIm11bHRpY29uZmlnOiIgKyBtYyArICI6IiArIHQKKyAgICAgICAgICAgICAgICAgICAgcGtnc190b19idWlsZC5hcHBlbmQodCkKIAogICAgICAgICBpZiAndW5pdmVyc2UnIGluIHBrZ3NfdG9fYnVpbGQ6Ci0gICAgICAgICAgICBwYXJzZWxvZy53YXJuKCJUaGUgXCJ1bml2ZXJzZVwiIHRhcmdldCBpcyBvbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nIGFuZCBtYXkgcHJvZHVjZSBlcnJvcnMuIikKKyAgICAgICAgICAgIHBhcnNlbG9nLndhcm5pbmcoIlRoZSBcInVuaXZlcnNlXCIgdGFyZ2V0IGlzIG9ubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5kIG1heSBwcm9kdWNlIGVycm9ycy4iKQogICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMSwgImNvbGxhdGluZyBwYWNrYWdlcyBmb3IgXCJ1bml2ZXJzZVwiIikKICAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd1bml2ZXJzZScpCi0gICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLnVuaXZlcnNlX3RhcmdldDoKLSAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorICAgICAgICAgICAgZm9yIG1jIGluIHNlbGYubXVsdGljb25maWdzOgorICAgICAgICAgICAgICAgIGZvciB0IGluIHNlbGYucmVjaXBlY2FjaGVzW21jXS51bml2ZXJzZV90YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgIGlmIG1jOgorICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICJtdWx0aWNvbmZpZzoiICsgbWMgKyAiOiIgKyB0CisgICAgICAgICAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQuYXBwZW5kKHQpCiAKICAgICAgICAgcmV0dXJuIHBrZ3NfdG9fYnVpbGQKIAotCi0KLQogICAgIGRlZiBwcmVfc2VydmUoc2VsZik6CiAgICAgICAgICMgRW1wdHkgdGhlIGVudmlyb25tZW50LiBUaGUgZW52aXJvbm1lbnQgd2lsbCBiZSBwb3B1bGF0ZWQgYXMKICAgICAgICAgIyBuZWNlc3NhcnkgZnJvbSB0aGUgZGF0YSBzdG9yZS4KQEAgLTE4NDcsNyArMTg5Nyw3IEBACiAgICAgICAgICMgQ2FsY3VsYXRlIHByaW9yaXRpZXMgZm9yIGVhY2ggZmlsZQogICAgICAgICBtYXRjaGVkID0gc2V0KCkKICAgICAgICAgZm9yIHAgaW4gcGtnZm5zOgotICAgICAgICAgICAgcmVhbGZuLCBjbHMgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHApCisgICAgICAgICAgICByZWFsZm4sIGNscywgbWMgPSBiYi5jYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHApCiAgICAgICAgICAgICBwcmlvcml0aWVzW3BdID0gc2VsZi5jYWxjX2JiZmlsZV9wcmlvcml0eShyZWFsZm4sIG1hdGNoZWQpCiAKICAgICAgICAgIyBEb24ndCBzaG93IHRoZSB3YXJuaW5nIGlmIHRoZSBCQkZJTEVfUEFUVEVSTiBkaWQgbWF0Y2ggLmJiYXBwZW5kIGZpbGVzCkBAIC0xODcwLDcgKzE5MjAsNyBAQAogICAgICAgICBmb3IgY29sbGVjdGlvbiwgcGF0dGVybiwgcmVnZXgsIF8gaW4gc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CiAgICAgICAgICAgICBpZiByZWdleCBpbiB1bm1hdGNoZWQ6CiAgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV8lcycgJSBjb2xsZWN0aW9uLCBUcnVlKSAhPSAnMSc6Ci0gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rsb2cud2FybigiTm8gYmIgZmlsZXMgbWF0Y2hlZCBCQkZJTEVfUEFUVEVSTl8lcyAnJXMnIiAlIChjb2xsZWN0aW9uLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGxvZy53YXJuaW5nKCJObyBiYiBmaWxlcyBtYXRjaGVkIEJCRklMRV9QQVRURVJOXyVzICclcyciICUgKGNvbGxlY3Rpb24sIHBhdHRlcm4pKQogCiAgICAgICAgIHJldHVybiBwcmlvcml0aWVzCiAKQEAgLTE4OTEsNyArMTk0MSw3IEBACiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcXVpdCA9IHNlbGYucXVpdC5nZXRfbm93YWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGlmIHF1aXQgPT0gJ2NhbmNlbCc6CkBAIC0xOTA1LDcgKzE5NTUsNyBAQAogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi50b19wYXJzZXJzLnB1dChqb2IsIHRpbWVvdXQ9MC41KQotICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkZ1bGw6CisgICAgICAgICAgICBleGNlcHQgcXVldWUuRnVsbDoKICAgICAgICAgICAgICAgICBzZWxmLmpvYnMuaW5zZXJ0KDAsIGpvYikKICAgICAgICAgICAgICAgICBjb250aW51ZQogCkBAIC0xOTQ1LDcgKzE5OTUsNyBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucXVpdC5nZXRfbm93YWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0cy5jYW5jZWxfam9pbl90aHJlYWQoKQpAQCAtMTk1Niw3ICsyMDA2LDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBqb2IgPSBzZWxmLmpvYnMuZ2V0KHRpbWVvdXQ9MC4yNSkKLSAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgZXhjZXB0IHF1ZXVlLkVtcHR5OgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgaWYgam9iIGlzIE5vbmU6CkBAIC0xOTY1LDEwICsyMDE1LDEwIEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMucHV0KHJlc3VsdCwgdGltZW91dD0wLjI1KQotICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkZ1bGw6CisgICAgICAgICAgICBleGNlcHQgcXVldWUuRnVsbDoKICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZChyZXN1bHQpCiAKLSAgICBkZWYgcGFyc2Uoc2VsZiwgZmlsZW5hbWUsIGFwcGVuZHMsIGNhY2hlc19hcnJheSk6CisgICAgZGVmIHBhcnNlKHNlbGYsIGZpbGVuYW1lLCBhcHBlbmRzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBSZWNvcmQgdGhlIGZpbGVuYW1lIHdlJ3JlIHBhcnNpbmcgaW50byBhbnkgZXZlbnRzIGdlbmVyYXRlZAogICAgICAgICAgICAgZGVmIHBhcnNlX2ZpbHRlcihzZWxmLCByZWNvcmQpOgpAQCAtMTk4MSw3ICsyMDMxLDcgQEAKICAgICAgICAgICAgIGJiLmV2ZW50LnNldF9jbGFzc19oYW5kbGVycyhzZWxmLmhhbmRsZXJzLmNvcHkoKSkKICAgICAgICAgICAgIGJiLmV2ZW50LkxvZ0hhbmRsZXIuZmlsdGVyID0gcGFyc2VfZmlsdGVyCiAKLSAgICAgICAgICAgIHJldHVybiBUcnVlLCBiYi5jYWNoZS5DYWNoZS5wYXJzZShmaWxlbmFtZSwgYXBwZW5kcywgc2VsZi5jZmcsIGNhY2hlc19hcnJheSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBzZWxmLmJiX2NhY2hlLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KICAgICAgICAgICAgIGV4Yy5yZWNpcGUgPSBmaWxlbmFtZQpAQCAtMTk5OSw2ICsyMDQ5LDcgQEAKICAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKICAgICAgICAgc2VsZi5jZmdkYXRhID0gY29va2VyLmRhdGEKICAgICAgICAgc2VsZi5jZmdoYXNoID0gY29va2VyLmRhdGFfaGFzaAorICAgICAgICBzZWxmLmNmZ2J1aWxkZXIgPSBjb29rZXIuZGF0YWJ1aWxkZXIKIAogICAgICAgICAjIEFjY291bnRpbmcgc3RhdGlzdGljcwogICAgICAgICBzZWxmLnBhcnNlZCA9IDAKQEAgLTIwMTMsMTcgKzIwNjQsMTcgQEAKICAgICAgICAgc2VsZi5jdXJyZW50ID0gMAogICAgICAgICBzZWxmLnByb2Nlc3NfbmFtZXMgPSBbXQogCi0gICAgICAgIHNlbGYuYmJfY2FjaGUgPSBiYi5jYWNoZS5DYWNoZShzZWxmLmNmZ2RhdGEsIHNlbGYuY2ZnaGFzaCwgY29va2VyLmNhY2hlc19hcnJheSkKKyAgICAgICAgc2VsZi5iYl9jYWNoZSA9IGJiLmNhY2hlLkNhY2hlKHNlbGYuY2ZnYnVpbGRlciwgc2VsZi5jZmdoYXNoLCBjb29rZXIuY2FjaGVzX2FycmF5KQogICAgICAgICBzZWxmLmZyb21jYWNoZSA9IFtdCiAgICAgICAgIHNlbGYud2lsbHBhcnNlID0gW10KICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuZmlsZWxpc3Q6CiAgICAgICAgICAgICBhcHBlbmRzID0gc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZpbGVuYW1lKQogICAgICAgICAgICAgaWYgbm90IHNlbGYuYmJfY2FjaGUuY2FjaGVWYWxpZChmaWxlbmFtZSwgYXBwZW5kcyk6Ci0gICAgICAgICAgICAgICAgc2VsZi53aWxscGFyc2UuYXBwZW5kKChmaWxlbmFtZSwgYXBwZW5kcywgY29va2VyLmNhY2hlc19hcnJheSkpCisgICAgICAgICAgICAgICAgc2VsZi53aWxscGFyc2UuYXBwZW5kKChmaWxlbmFtZSwgYXBwZW5kcykpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZnJvbWNhY2hlLmFwcGVuZCgoZmlsZW5hbWUsIGFwcGVuZHMpKQogICAgICAgICBzZWxmLnRvcGFyc2UgPSBzZWxmLnRvdGFsIC0gbGVuKHNlbGYuZnJvbWNhY2hlKQotICAgICAgICBzZWxmLnByb2dyZXNzX2NodW5rID0gbWF4KHNlbGYudG9wYXJzZSAvIDEwMCwgMSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19jaHVuayA9IGludChtYXgoc2VsZi50b3BhcnNlIC8gMTAwLCAxKSkKIAogICAgICAgICBzZWxmLm51bV9wcm9jZXNzZXMgPSBtaW4oaW50KHNlbGYuY2ZnZGF0YS5nZXRWYXIoIkJCX05VTUJFUl9QQVJTRV9USFJFQURTIiwgVHJ1ZSkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSksIGxlbihzZWxmLndpbGxwYXJzZSkpCkBAIC0yMDM3LDcgKzIwODgsNyBAQAogICAgICAgICBpZiBzZWxmLnRvcGFyc2U6CiAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlBhcnNlU3RhcnRlZChzZWxmLnRvcGFyc2UpLCBzZWxmLmNmZ2RhdGEpCiAgICAgICAgICAgICBkZWYgaW5pdCgpOgotICAgICAgICAgICAgICAgIFBhcnNlci5jZmcgPSBzZWxmLmNmZ2RhdGEKKyAgICAgICAgICAgICAgICBQYXJzZXIuYmJfY2FjaGUgPSBzZWxmLmJiX2NhY2hlCiAgICAgICAgICAgICAgICAgYmIudXRpbHMuc2V0X3Byb2Nlc3NfbmFtZShtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZSkKICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcudXRpbC5GaW5hbGl6ZShOb25lLCBiYi5jb2RlcGFyc2VyLnBhcnNlcl9jYWNoZV9zYXZlLCBleGl0cHJpb3JpdHk9MSkKICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcudXRpbC5GaW5hbGl6ZShOb25lLCBiYi5mZXRjaC5mZXRjaGVyX3BhcnNlX3NhdmUsIGV4aXRwcmlvcml0eT0xKQpAQCAtMjEwOCw3ICsyMTU5LDcgQEAKIAogICAgIGRlZiBsb2FkX2NhY2hlZChzZWxmKToKICAgICAgICAgZm9yIGZpbGVuYW1lLCBhcHBlbmRzIGluIHNlbGYuZnJvbWNhY2hlOgotICAgICAgICAgICAgY2FjaGVkLCBpbmZvcyA9IHNlbGYuYmJfY2FjaGUubG9hZChmaWxlbmFtZSwgYXBwZW5kcywgc2VsZi5jZmdkYXRhKQorICAgICAgICAgICAgY2FjaGVkLCBpbmZvcyA9IHNlbGYuYmJfY2FjaGUubG9hZChmaWxlbmFtZSwgYXBwZW5kcykKICAgICAgICAgICAgIHlpZWxkIG5vdCBjYWNoZWQsIGluZm9zCiAKICAgICBkZWYgcGFyc2VfZ2VuZXJhdG9yKHNlbGYpOgpAQCAtMjExOCw3ICsyMTY5LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYucmVzdWx0X3F1ZXVlLmdldCh0aW1lb3V0PTAuMjUpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBleGNlcHQgcXVldWUuRW1wdHk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdFsxXQpAQCAtMjEzMSw3ICsyMTgyLDcgQEAKICAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICAgcGFyc2VkID0gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXJzZWQsIHJlc3VsdCA9IHNlbGYucmVzdWx0cy5uZXh0KCkKKyAgICAgICAgICAgIHBhcnNlZCwgcmVzdWx0ID0gbmV4dChzZWxmLnJlc3VsdHMpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgc2VsZi5zaHV0ZG93bigpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTIxNTMsMTUgKzIyMDQsMTggQEAKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBleGNlcHQgYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciBhcyBleGM6CiAgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKLSAgICAgICAgICAgIF8sIHZhbHVlLCBfID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXhwYW5zaW9uRXJyb3IgZHVyaW5nIHBhcnNpbmcgJXM6ICVzJywgdmFsdWUucmVjaXBlLCBzdHIoZXhjKSkKKyAgICAgICAgICAgIGJiZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArIG9zLnNlcAorICAgICAgICAgICAgZXR5cGUsIHZhbHVlLCBfID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHRiID0gbGlzdChpdGVydG9vbHMuZHJvcHdoaWxlKGxhbWJkYSBlOiBlLmZpbGVuYW1lLnN0YXJ0c3dpdGgoYmJkaXIpLCBleGMudHJhY2ViYWNrKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXhwYW5zaW9uRXJyb3IgZHVyaW5nIHBhcnNpbmcgJXMnLCB2YWx1ZS5yZWNpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89KGV0eXBlLCB2YWx1ZSwgdGIpKQogICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgICAgIHNlbGYuZXJyb3IgKz0gMQogICAgICAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKHZhbHVlLCAicmVjaXBlIik6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gcGFyc2UgJXMnLCB2YWx1ZS5yZWNpcGUsCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gcGFyc2UgJXMnICUgdmFsdWUucmVjaXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShldHlwZSwgdmFsdWUsIGV4Yy50cmFjZWJhY2spKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIE1vc3QgbGlrZWx5LCBhbiBleGNlcHRpb24gb2NjdXJyZWQgZHVyaW5nIHJhaXNpbmcgYW4gZXhjZXB0aW9uCkBAIC0yMTg0LDEzICsyMjM4LDEzIEBACiAgICAgICAgICAgICBpZiBpbmZvX2FycmF5WzBdLnNraXBwZWQ6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwcGVkICs9IDEKICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5za2lwbGlzdFt2aXJ0dWFsZm5dID0gU2tpcHBlZFBhY2thZ2UoaW5mb19hcnJheVswXSkKLSAgICAgICAgICAgIHNlbGYuYmJfY2FjaGUuYWRkX2luZm8odmlydHVhbGZuLCBpbmZvX2FycmF5LCBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZSwKKyAgICAgICAgICAgIChmbiwgY2xzLCBtYykgPSBiYi5jYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHZpcnR1YWxmbikKKyAgICAgICAgICAgIHNlbGYuYmJfY2FjaGUuYWRkX2luZm8odmlydHVhbGZuLCBpbmZvX2FycmF5LCBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZXNbbWNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZD1wYXJzZWQsIHdhdGNoZXIgPSBzZWxmLmNvb2tlci5hZGRfZmlsZXdhdGNoKQogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHJlcGFyc2Uoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICBpbmZvcyA9IHNlbGYuYmJfY2FjaGUucGFyc2UoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZmdkYXRhLCBzZWxmLmNvb2tlci5jYWNoZXNfYXJyYXkpCisgICAgICAgIGluZm9zID0gc2VsZi5iYl9jYWNoZS5wYXJzZShmaWxlbmFtZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZpbGVuYW1lKSkKICAgICAgICAgZm9yIHZmbiwgaW5mb19hcnJheSBpbiBpbmZvczoKLSAgICAgICAgICAgIHNlbGYuY29va2VyLnJlY2lwZWNhY2hlLmFkZF9mcm9tX3JlY2lwZWluZm8odmZuLCBpbmZvX2FycmF5KQorICAgICAgICAgICAgKGZuLCBjbHMsIG1jKSA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4odmZuKQorICAgICAgICAgICAgc2VsZi5jb29rZXIucmVjaXBlY2FjaGVzW21jXS5hZGRfZnJvbV9yZWNpcGVpbmZvKHZmbiwgaW5mb19hcnJheSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkKaW5kZXggNTAyNTlhOS4uYjA3YzI2NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkKQEAgLTIyLDkgKzIyLDExIEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKLWltcG9ydCBvcywgc3lzCi1mcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCiBpbXBvcnQgYmIKIGZyb20gYmIgaW1wb3J0IGRhdGEKIGltcG9ydCBiYi5wYXJzZQpAQCAtMTkyLDcgKzE5NCw4IEBACiAgICAgICAgICAgICAgICAgZm4sIF8sIF8sIF8gPSB0cmFjZWJhY2suZXh0cmFjdF90Yih0YiwgMSlbMF0KICAgICAgICAgICAgICAgICBpZiBub3QgZm4uc3RhcnRzd2l0aChiYmRpcik6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCgiVW5hYmxlIHRvIHBhcnNlICVzIiwgZm4sIGV4Y19pbmZvPShleGNfY2xhc3MsIGV4YywgdGIpKQorICAgICAgICAgICAgcGFyc2Vsb2cuY3JpdGljYWwoIlVuYWJsZSB0byBwYXJzZSAlcyIgJSBmbiwgZXhjX2luZm89KGV4Y19jbGFzcywgZXhjLCB0YikpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBleGNlcHQgYmIucGFyc2UuUGFyc2VFcnJvciBhcyBleGM6CiAgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbChzdHIoZXhjKSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCkBAIC0yMzQsOSArMjM3LDkgQEAKIAogICAgICAgICBiYi51dGlscy5zZXRfY29udGV4dChiYi51dGlscy5jbGVhbl9jb250ZXh0KCkpCiAgICAgICAgIGJiLmV2ZW50LnNldF9jbGFzc19oYW5kbGVycyhiYi5ldmVudC5jbGVhbl9jbGFzc19oYW5kbGVycygpKQotICAgICAgICBzZWxmLmRhdGEgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmJhc2VkYXRhID0gYmIuZGF0YS5pbml0KCkKICAgICAgICAgaWYgc2VsZi50cmFja2luZzoKLSAgICAgICAgICAgIHNlbGYuZGF0YS5lbmFibGVUcmFja2luZygpCisgICAgICAgICAgICBzZWxmLmJhc2VkYXRhLmVuYWJsZVRyYWNraW5nKCkKIAogICAgICAgICAjIEtlZXAgYSBkYXRhc3RvcmUgb2YgdGhlIGluaXRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGVpcgogICAgICAgICAjIHZhbHVlcyBmcm9tIHdoZW4gQml0QmFrZSB3YXMgbGF1bmNoZWQgdG8gZW5hYmxlIGNoaWxkIHByb2Nlc3NlcwpAQCAtMjQ3LDE2ICsyNTAsNDkgQEAKICAgICAgICAgICAgIHNlbGYuc2F2ZWRlbnYuc2V0VmFyKGssIGNvb2tlcmNmZy5lbnZba10pCiAKICAgICAgICAgZmlsdGVyZWRfa2V5cyA9IGJiLnV0aWxzLmFwcHJvdmVkX3ZhcmlhYmxlcygpCi0gICAgICAgIGJiLmRhdGEuaW5oZXJpdEZyb21PUyhzZWxmLmRhdGEsIHNlbGYuc2F2ZWRlbnYsIGZpbHRlcmVkX2tleXMpCi0gICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJCX09SSUdFTlYiLCBzZWxmLnNhdmVkZW52KQorICAgICAgICBiYi5kYXRhLmluaGVyaXRGcm9tT1Moc2VsZi5iYXNlZGF0YSwgc2VsZi5zYXZlZGVudiwgZmlsdGVyZWRfa2V5cykKKyAgICAgICAgc2VsZi5iYXNlZGF0YS5zZXRWYXIoIkJCX09SSUdFTlYiLCBzZWxmLnNhdmVkZW52KQogICAgICAgICAKICAgICAgICAgaWYgd29ya2VyOgotICAgICAgICAgICAgc2VsZi5kYXRhLnNldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsICIxIikKKyAgICAgICAgICAgIHNlbGYuYmFzZWRhdGEuc2V0VmFyKCJCQl9XT1JLRVJDT05URVhUIiwgIjEiKQorCisgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuYmFzZWRhdGEKKyAgICAgICAgc2VsZi5tY2RhdGEgPSB7fQogCiAgICAgZGVmIHBhcnNlQmFzZUNvbmZpZ3VyYXRpb24oc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYucGFyc2VDb25maWd1cmF0aW9uRmlsZXMoc2VsZi5wcmVmaWxlcywgc2VsZi5wb3N0ZmlsZXMpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKHNlbGYuYmFzZWRhdGEpCisgICAgICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbkZpbGVzKHNlbGYucHJlZmlsZXMsIHNlbGYucG9zdGZpbGVzKQorCisgICAgICAgICAgICBpZiBzZWxmLmRhdGEuZ2V0VmFyKCJCQl9XT1JLRVJDT05URVhUIiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmV0Y2guZmV0Y2hlcl9pbml0KHNlbGYuZGF0YSkKKyAgICAgICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX2luaXQoc2VsZi5kYXRhKQorCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCgpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgIHJlcGFyc2VfY250ID0gMAorICAgICAgICAgICAgd2hpbGUgc2VsZi5kYXRhLmdldFZhcigiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSkgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiByZXBhcnNlX2NudCA+IDIwOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcmUtcGFyc2VkIG92ZXIgMjAgdGltZXMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmVha2luZyBvdXQgb2YgdGhlIGxvb3AuLi4iKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRvbyBkZWVwIGNvbmZpZyByZS1wYXJzZSBsb29wLiBDaGVjayBsb2NhdGlvbnMgd2hlcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJCX0lOVkFMSURDT05GIGlzIGJlaW5nIHNldCAoQ29uZmlnUGFyc2VkIGV2ZW50IGhhbmRsZXJzKSIpCisgICAgICAgICAgICAgICAgc2VsZi5kYXRhLnNldFZhcigiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbkZpbGVzKHNlbGYucHJlZmlsZXMsIHNlbGYucG9zdGZpbGVzKQorICAgICAgICAgICAgICAgIHJlcGFyc2VfY250ICs9IDEKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCgpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gc2VsZi5kYXRhLmdldF9oYXNoKCkKKyAgICAgICAgICAgIHNlbGYubWNkYXRhWycnXSA9IHNlbGYuZGF0YQorCisgICAgICAgICAgICBtdWx0aWNvbmZpZyA9IChzZWxmLmRhdGEuZ2V0VmFyKCJCQk1VTFRJQ09ORklHIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGZvciBjb25maWcgaW4gbXVsdGljb25maWc6CisgICAgICAgICAgICAgICAgbWNkYXRhID0gc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhbJ2NvbmYvbXVsdGljb25maWcvJXMuY29uZicgJSBjb25maWddICsgc2VsZi5wcmVmaWxlcywgc2VsZi5wb3N0ZmlsZXMpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdQYXJzZWQoKSwgbWNkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYubWNkYXRhW2NvbmZpZ10gPSBtY2RhdGEKKworICAgICAgICBleGNlcHQgKFN5bnRheEVycm9yLCBiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgogICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCiAgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yIGFzIGU6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQpAQCAtMjY5LDggKzMwNSw3IEBACiAgICAgICAgIHJldHVybiBmaW5kQ29uZmlnRmlsZSgiYmJsYXllcnMuY29uZiIsIGRhdGEpCiAKICAgICBkZWYgcGFyc2VDb25maWd1cmF0aW9uRmlsZXMoc2VsZiwgcHJlZmlsZXMsIHBvc3RmaWxlcyk6Ci0gICAgICAgIGRhdGEgPSBzZWxmLmRhdGEKLSAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIoZGF0YSkKKyAgICAgICAgZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShzZWxmLmJhc2VkYXRhKQogCiAgICAgICAgICMgUGFyc2UgZmlsZXMgZm9yIGxvYWRpbmcgKmJlZm9yZSogYml0YmFrZS5jb25mIGFuZCBhbnkgaW5jbHVkZXMKICAgICAgICAgZm9yIGYgaW4gcHJlZmlsZXM6CkBAIC0yODksMTUgKzMyNCwyMiBAQAogICAgICAgICAgICAgZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkYXRhKQogICAgICAgICAgICAgYXBwcm92ZWQgPSBiYi51dGlscy5hcHByb3ZlZF92YXJpYWJsZXMoKQogICAgICAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihsYXllcik6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmNyaXRpY2FsKCJMYXllciBkaXJlY3RvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIGNoZWNrIEJCTEFZRVJTIGluICVzIiAlIChsYXllciwgbGF5ZXJjb25mKSkKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiQWRkaW5nIGxheWVyICVzIiwgbGF5ZXIpCiAgICAgICAgICAgICAgICAgaWYgJ0hPTUUnIGluIGFwcHJvdmVkIGFuZCAnficgaW4gbGF5ZXI6CiAgICAgICAgICAgICAgICAgICAgIGxheWVyID0gb3MucGF0aC5leHBhbmR1c2VyKGxheWVyKQogICAgICAgICAgICAgICAgIGlmIGxheWVyLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgICAgICAgICAgICAgIGxheWVyID0gbGF5ZXIucnN0cmlwKCcvJykKICAgICAgICAgICAgICAgICBkYXRhLnNldFZhcignTEFZRVJESVInLCBsYXllcikKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcignTEFZRVJESVJfUkUnLCByZS5lc2NhcGUobGF5ZXIpKQogICAgICAgICAgICAgICAgIGRhdGEgPSBwYXJzZV9jb25maWdfZmlsZShvcy5wYXRoLmpvaW4obGF5ZXIsICJjb25mIiwgImxheWVyLmNvbmYiKSwgZGF0YSkKICAgICAgICAgICAgICAgICBkYXRhLmV4cGFuZFZhcnJlZignTEFZRVJESVInKQorICAgICAgICAgICAgICAgIGRhdGEuZXhwYW5kVmFycmVmKCdMQVlFUkRJUl9SRScpCiAKKyAgICAgICAgICAgIGRhdGEuZGVsVmFyKCdMQVlFUkRJUl9SRScpCiAgICAgICAgICAgICBkYXRhLmRlbFZhcignTEFZRVJESVInKQogCiAgICAgICAgIGlmIG5vdCBkYXRhLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSk6CkBAIC0zMjMsMjMgKzM2NSwxMyBAQAogICAgICAgICAjIFdlIHJlZ2lzdGVyIGFueSBoYW5kbGVycyB3ZSd2ZSBmb3VuZCBzbyBmYXIgaGVyZS4uLgogICAgICAgICBmb3IgdmFyIGluIGRhdGEuZ2V0VmFyKCdfX0JCSEFORExFUlMnLCBGYWxzZSkgb3IgW106CiAgICAgICAgICAgICBoYW5kbGVyZm4gPSBkYXRhLmdldFZhckZsYWcodmFyLCAiZmlsZW5hbWUiLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIG5vdCBoYW5kbGVyZm46CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuY3JpdGljYWwoIlVuZGVmaW5lZCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uICclcyciICUgdmFyKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgICAgICBoYW5kbGVybG4gPSBpbnQoZGF0YS5nZXRWYXJGbGFnKHZhciwgImxpbmVubyIsIEZhbHNlKSkKICAgICAgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyKHZhciwgZGF0YS5nZXRWYXIodmFyLCBGYWxzZSksICAoZGF0YS5nZXRWYXJGbGFnKHZhciwgImV2ZW50bWFzayIsIFRydWUpIG9yICIiKS5zcGxpdCgpLCBoYW5kbGVyZm4sIGhhbmRsZXJsbikKIAotICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsIEZhbHNlKSBpcyBOb25lOgotICAgICAgICAgICAgYmIuZmV0Y2guZmV0Y2hlcl9pbml0KGRhdGEpCi0gICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX2luaXQoZGF0YSkKLSAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdQYXJzZWQoKSwgZGF0YSkKLQotICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSkgaXMgVHJ1ZToKLSAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9JTlZBTElEQ09ORiIsIEZhbHNlKQotICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcykKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKGRhdGEpCiAgICAgICAgIGRhdGEuc2V0VmFyKCdCQklOQ0xVREVEJyxiYi5wYXJzZS5nZXRfZmlsZV9kZXBlbmRzKGRhdGEpKQotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCi0gICAgICAgIHNlbGYuZGF0YV9oYXNoID0gZGF0YS5nZXRfaGFzaCgpCiAKLQorICAgICAgICByZXR1cm4gZGF0YQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGFlbW9uaXplLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weQppbmRleCAzNDZhNjE4Li5hYjRhOTU0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGFlbW9uaXplLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYWVtb25pemUucHkKQEAgLTE3OCw4ICsxNzgsOCBAQAogIyAgICBvcy5kdXAyKDAsIDIpICAgICAgICAgICAgICAgICAgICAgICMgc3RhbmRhcmQgZXJyb3IgKDIpCiAKIAotICAgIHNpID0gZmlsZSgnL2Rldi9udWxsJywgJ3InKQotICAgIHNvID0gZmlsZShsb2dmaWxlLCAndycpCisgICAgc2kgPSBvcGVuKCcvZGV2L251bGwnLCAncicpCisgICAgc28gPSBvcGVuKGxvZ2ZpbGUsICd3JykKICAgICBzZSA9IHNvCiAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGEucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weQppbmRleCBkYmM2ZGVhLi5jMWYyN2NkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weQpAQCAtMTgyLDEyICsxODIsMTIgQEAKIAogZGVmIGVtaXRfdmFyKHZhciwgbz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSwgYWxsPUZhbHNlKToKICAgICAiIiJFbWl0IGEgdmFyaWFibGUgdG8gYmUgc291cmNlZCBieSBhIHNoZWxsLiIiIgotICAgIGlmIGQuZ2V0VmFyRmxhZyh2YXIsICJweXRob24iLCBGYWxzZSk6CisgICAgZnVuYyA9IGQuZ2V0VmFyRmxhZyh2YXIsICJmdW5jIiwgRmFsc2UpCisgICAgaWYgZC5nZXRWYXJGbGFnKHZhciwgJ3B5dGhvbicsIEZhbHNlKSBhbmQgZnVuYzoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBleHBvcnQgPSBkLmdldFZhckZsYWcodmFyLCAiZXhwb3J0IiwgRmFsc2UpCiAgICAgdW5leHBvcnQgPSBkLmdldFZhckZsYWcodmFyLCAidW5leHBvcnQiLCBGYWxzZSkKLSAgICBmdW5jID0gZC5nZXRWYXJGbGFnKHZhciwgImZ1bmMiLCBGYWxzZSkKICAgICBpZiBub3QgYWxsIGFuZCBub3QgZXhwb3J0IGFuZCBub3QgdW5leHBvcnQgYW5kIG5vdCBmdW5jOgogICAgICAgICByZXR1cm4gRmFsc2UKIApAQCAtMzM5LDcgKzMzOSw3IEBACiAgICAgICAgICAgICBkZXBzIHw9IHBhcnNlci5yZWZlcmVuY2VzCiAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IChrZXlzICYgcGFyc2VyLmV4ZWNzKQogICAgICAgICAgICAgcmV0dXJuIGRlcHMsIHZhbHVlCi0gICAgICAgIHZhcmZsYWdzID0gZC5nZXRWYXJGbGFncyhrZXksIFsidmFyZGVwcyIsICJ2YXJkZXB2YWx1ZSIsICJ2YXJkZXBzZXhjbHVkZSIsICJ2YXJkZXB2YWx1ZWV4Y2x1ZGUiLCAicG9zdGZ1bmNzIiwgInByZWZ1bmNzIiwgImxpbmVubyIsICJmaWxlbmFtZSJdKSBvciB7fQorICAgICAgICB2YXJmbGFncyA9IGQuZ2V0VmFyRmxhZ3Moa2V5LCBbInZhcmRlcHMiLCAidmFyZGVwdmFsdWUiLCAidmFyZGVwc2V4Y2x1ZGUiLCAiZXhwb3J0cyIsICJwb3N0ZnVuY3MiLCAicHJlZnVuY3MiLCAibGluZW5vIiwgImZpbGVuYW1lIl0pIG9yIHt9CiAgICAgICAgIHZhcmRlcHMgPSB2YXJmbGFncy5nZXQoInZhcmRlcHMiKQogICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpCiAKQEAgLTM2NCw3ICszNjQsNyBAQAogICAgICAgICAgICAgaWYgdmFyZmxhZ3MuZ2V0KCJweXRob24iKToKICAgICAgICAgICAgICAgICBwYXJzZXIgPSBiYi5jb2RlcGFyc2VyLlB5dGhvblBhcnNlcihrZXksIGxvZ2dlcikKICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBhbmQgIlx0IiBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlZhcmlhYmxlICVzIGNvbnRhaW5zIHRhYnMsIHBsZWFzZSByZW1vdmUgdGhlc2UgKCVzKSIgJSAoa2V5LCBkLmdldFZhcigiRklMRSIsIFRydWUpKSkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlZhcmlhYmxlICVzIGNvbnRhaW5zIHRhYnMsIHBsZWFzZSByZW1vdmUgdGhlc2UgKCVzKSIgJSAoa2V5LCBkLmdldFZhcigiRklMRSIsIFRydWUpKSkKICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfcHl0aG9uKHZhbHVlLCBmaWxlbmFtZT12YXJmbGFncy5nZXQoImZpbGVuYW1lIiksIGxpbmVubz12YXJmbGFncy5nZXQoImxpbmVubyIpKQogICAgICAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgcGFyc2VyLnJlZmVyZW5jZXMKICAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IChrZXlzICYgcGFyc2VyLmV4ZWNzKQpAQCAtMzgzLDYgKzM4Myw4IEBACiAgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBzZXQodmFyZmxhZ3NbInByZWZ1bmNzIl0uc3BsaXQoKSkKICAgICAgICAgICAgIGlmICJwb3N0ZnVuY3MiIGluIHZhcmZsYWdzOgogICAgICAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgc2V0KHZhcmZsYWdzWyJwb3N0ZnVuY3MiXS5zcGxpdCgpKQorICAgICAgICAgICAgaWYgImV4cG9ydHMiIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgc2V0KHZhcmZsYWdzWyJleHBvcnRzIl0uc3BsaXQoKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBhcnNlciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKICAgICAgICAgICAgIGRlcHMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhX3NtYXJ0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkKaW5kZXggZmExZTc5NC4uZjEwMDQ0NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2tdID0gcGFyc2VyLmNvbnRhaW5zW2tdLmNvcHkoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNba10udXBkYXRlKHBhcnNlci5jb250YWluc1trXSkKLSAgICAgICAgICAgIHZhbHVlID0gdXRpbHMuYmV0dGVyX2V2YWwoY29kZW9iaiwgRGF0YUNvbnRleHQoc2VsZi5kKSkKKyAgICAgICAgICAgIHZhbHVlID0gdXRpbHMuYmV0dGVyX2V2YWwoY29kZW9iaiwgRGF0YUNvbnRleHQoc2VsZi5kKSwgeydkJyA6IHNlbGYuZH0pCiAgICAgICAgICAgICByZXR1cm4gc3RyKHZhbHVlKQogCiAKQEAgLTM3Miw3ICszNzIsNyBAQAogCiAgICAgZGVmIGV4cGFuZFdpdGhSZWZzKHNlbGYsIHMsIHZhcm5hbWUpOgogCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJhc2VzdHJpbmcpOiAjIHNhbml0eSBjaGVjaworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBzdHIpOiAjIHNhbml0eSBjaGVjawogICAgICAgICAgICAgcmV0dXJuIFZhcmlhYmxlUGFyc2UodmFybmFtZSwgc2VsZiwgcykKIAogICAgICAgICBpZiB2YXJuYW1lIGFuZCB2YXJuYW1lIGluIHNlbGYuZXhwYW5kX2NhY2hlOgpAQCAtMzk3LDggKzM5Nyw3IEBACiAgICAgICAgICAgICBleGNlcHQgYmIucGFyc2UuU2tpcFJlY2lwZToKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6Ci0gICAgICAgICAgICAgICAgZXhjX2NsYXNzLCBleGMsIHRiID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgICAgICByYWlzZSBFeHBhbnNpb25FcnJvciwgRXhwYW5zaW9uRXJyb3IodmFybmFtZSwgcywgZXhjKSwgdGIKKyAgICAgICAgICAgICAgICByYWlzZSBFeHBhbnNpb25FcnJvcih2YXJuYW1lLCBzLCBleGMpIGZyb20gZXhjCiAKICAgICAgICAgdmFycGFyc2UudmFsdWUgPSBzCiAKQEAgLTkxNyw3ICs5MTYsNyBAQAogICAgICAgICAgICAgIHlpZWxkIGsKIAogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gbGVuKGZyb3plbnNldChzZWxmKSkKKyAgICAgICAgcmV0dXJuIGxlbihmcm96ZW5zZXQoaXRlcihzZWxmKSkpCiAKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CiAgICAgICAgIHZhbHVlID0gc2VsZi5nZXRWYXIoaXRlbSwgRmFsc2UpCkBAIC05NjYsNCArOTY1LDQgQEAKICAgICAgICAgICAgICAgICAgICAgZGF0YS51cGRhdGUoe2k6dmFsdWV9KQogCiAgICAgICAgIGRhdGFfc3RyID0gc3RyKFsoaywgZGF0YVtrXSkgZm9yIGsgaW4gc29ydGVkKGRhdGEua2V5cygpKV0pCi0gICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhX3N0cikuaGV4ZGlnZXN0KCkKKyAgICAgICAgcmV0dXJuIGhhc2hsaWIubWQ1KGRhdGFfc3RyLmVuY29kZSgidXRmLTgiKSkuaGV4ZGlnZXN0KCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ldmVudC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ldmVudC5weQppbmRleCA1ZmZlODllLi42ZjFjYjEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXZlbnQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V2ZW50LnB5CkBAIC0yNCwxNCArMjQsMTMgQEAKIAogaW1wb3J0IG9zLCBzeXMKIGltcG9ydCB3YXJuaW5ncwotdHJ5OgotICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBwaWNrbGUKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgYXRleGl0CiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgYXN0CitpbXBvcnQgdGhyZWFkaW5nCisKIGltcG9ydCBiYi51dGlscwogaW1wb3J0IGJiLmNvbXBhdAogaW1wb3J0IGJiLmV4Y2VwdGlvbnMKQEAgLTcxLDEyICs3MCwyNyBAQAogX2NhdGNoYWxsX2hhbmRsZXJzID0ge30KIF9ldmVudGZpbHRlciA9IE5vbmUKIF91aXJlYWR5ID0gRmFsc2UKK190aHJlYWRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKK190aHJlYWRfbG9ja19lbmFibGVkID0gRmFsc2UKKworaWYgaGFzYXR0cihfX2J1aWx0aW5zX18sICdfX3NldGl0ZW1fXycpOgorICAgIGJ1aWx0aW5zID0gX19idWlsdGluc19fCitlbHNlOgorICAgIGJ1aWx0aW5zID0gX19idWlsdGluc19fLl9fZGljdF9fCisKK2RlZiBlbmFibGVfdGhyZWFkbG9jaygpOgorICAgIGdsb2JhbCBfdGhyZWFkX2xvY2tfZW5hYmxlZAorICAgIF90aHJlYWRfbG9ja19lbmFibGVkID0gVHJ1ZQorCitkZWYgZGlzYWJsZV90aHJlYWRsb2NrKCk6CisgICAgZ2xvYmFsIF90aHJlYWRfbG9ja19lbmFibGVkCisgICAgX3RocmVhZF9sb2NrX2VuYWJsZWQgPSBGYWxzZQogCiBkZWYgZXhlY3V0ZV9oYW5kbGVyKG5hbWUsIGhhbmRsZXIsIGV2ZW50LCBkKToKICAgICBldmVudC5kYXRhID0gZAogICAgIGFkZGVkZCA9IEZhbHNlCi0gICAgaWYgJ2QnIG5vdCBpbiBfX2J1aWx0aW5zX186Ci0gICAgICAgIF9fYnVpbHRpbnNfX1snZCddID0gZAorICAgIGlmICdkJyBub3QgaW4gYnVpbHRpbnM6CisgICAgICAgIGJ1aWx0aW5zWydkJ10gPSBkCiAgICAgICAgIGFkZGVkZCA9IFRydWUKICAgICB0cnk6CiAgICAgICAgIHJldCA9IGhhbmRsZXIoZXZlbnQpCkBAIC05NCw3ICsxMDgsNyBAQAogICAgIGZpbmFsbHk6CiAgICAgICAgIGRlbCBldmVudC5kYXRhCiAgICAgICAgIGlmIGFkZGVkZDoKLSAgICAgICAgICAgIGRlbCBfX2J1aWx0aW5zX19bJ2QnXQorICAgICAgICAgICAgZGVsIGJ1aWx0aW5zWydkJ10KIAogZGVmIGZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQsIGQpOgogICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKQEAgLTEwMiw3ICsxMTYsNyBAQAogCiAgICAgZWlkID0gc3RyKGV2ZW50Ll9fY2xhc3NfXylbODotMl0KICAgICBldnRfaG1hcCA9IF9ldmVudF9oYW5kbGVyX21hcC5nZXQoZWlkLCB7fSkKLSAgICBmb3IgbmFtZSwgaGFuZGxlciBpbiBfaGFuZGxlcnMuaXRlcml0ZW1zKCk6CisgICAgZm9yIG5hbWUsIGhhbmRsZXIgaW4gbGlzdChfaGFuZGxlcnMuaXRlbXMoKSk6CiAgICAgICAgIGlmIG5hbWUgaW4gX2NhdGNoYWxsX2hhbmRsZXJzIG9yIG5hbWUgaW4gZXZ0X2htYXA6CiAgICAgICAgICAgICBpZiBfZXZlbnRmaWx0ZXI6CiAgICAgICAgICAgICAgICAgaWYgbm90IF9ldmVudGZpbHRlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCk6CkBAIC0xMTcsMzEgKzEzMSw0NCBAQAogICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKICAgICBpZiBub3QgX3VpcmVhZHk6CiAgICAgICAgIGZyb20gYmIubXNnIGltcG9ydCBCQkxvZ0Zvcm1hdHRlcgotICAgICAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCi0gICAgICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKEJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQotICAgICAgICBsb2dnZXIuaGFuZGxlcnMgPSBbY29uc29sZV0KKyAgICAgICAgc3Rkb3V0ID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgICAgIHN0ZGVyciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKQorICAgICAgICBmb3JtYXR0ZXIgPSBCQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICBzdGRvdXQuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgc3RkZXJyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCiAKICAgICAgICAgIyBGaXJzdCBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhbnkgcHJvcGVyIG1lc3NhZ2VzCiAgICAgICAgIG1zZ3ByaW50ID0gRmFsc2UKLSAgICAgICAgZm9yIGV2ZW50IGluIHVpX3F1ZXVlOgorICAgICAgICBmb3IgZXZlbnQgaW4gdWlfcXVldWVbOl06CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CiAgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuREVCVUc6CisgICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gbG9nZ2luZy5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc3Rkb3V0KQogICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQogICAgICAgICAgICAgICAgICAgICBtc2dwcmludCA9IFRydWUKICAgICAgICAgaWYgbXNncHJpbnQ6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIE5vcGUsIHNvIGp1c3QgcHJpbnQgYWxsIG9mIHRoZSBtZXNzYWdlcyB3ZSBoYXZlIChpbmNsdWRpbmcgZGVidWcgbWVzc2FnZXMpCi0gICAgICAgIGZvciBldmVudCBpbiB1aV9xdWV1ZToKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc3Rkb3V0KQorICAgICAgICBmb3IgZXZlbnQgaW4gdWlfcXVldWVbOl06CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKIAogZGVmIGZpcmVfdWlfaGFuZGxlcnMoZXZlbnQsIGQpOgorICAgIGdsb2JhbCBfdGhyZWFkX2xvY2sKKyAgICBnbG9iYWwgX3RocmVhZF9sb2NrX2VuYWJsZWQKKwogICAgIGlmIG5vdCBfdWlyZWFkeToKICAgICAgICAgIyBObyBVSSBoYW5kbGVycyByZWdpc3RlcmVkIHlldCwgcXVldWUgdXAgdGhlIG1lc3NhZ2VzCiAgICAgICAgIHVpX3F1ZXVlLmFwcGVuZChldmVudCkKICAgICAgICAgcmV0dXJuCiAKKyAgICBpZiBfdGhyZWFkX2xvY2tfZW5hYmxlZDoKKyAgICAgICAgX3RocmVhZF9sb2NrLmFjcXVpcmUoKQorCiAgICAgZXJyb3JzID0gW10KICAgICBmb3IgaCBpbiBfdWlfaGFuZGxlcnM6CiAgICAgICAgICNwcmludCAiU2VuZGluZyBldmVudCAlcyIgJSBldmVudApAQCAtMTYwLDYgKzE4Nyw5IEBACiAgICAgZm9yIGggaW4gZXJyb3JzOgogICAgICAgICBkZWwgX3VpX2hhbmRsZXJzW2hdCiAKKyAgICBpZiBfdGhyZWFkX2xvY2tfZW5hYmxlZDoKKyAgICAgICAgX3RocmVhZF9sb2NrLnJlbGVhc2UoKQorCiBkZWYgZmlyZShldmVudCwgZCk6CiAgICAgIiIiRmlyZSBvZmYgYW4gRXZlbnQiIiIKIApAQCAtMTg3LDcgKzIxNyw3IEBACiAKICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgogICAgICAgICAjIGhhbmRsZSBzdHJpbmcgY29udGFpbmluZyBweXRob24gY29kZQotICAgICAgICBpZiBpc2luc3RhbmNlKGhhbmRsZXIsIGJhc2VzdHJpbmcpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGhhbmRsZXIsIHN0cik6CiAgICAgICAgICAgICB0bXAgPSAiZGVmICVzKGUpOlxuJXMiICUgKG5hbWUsIGhhbmRsZXIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY29kZSA9IGJiLm1ldGhvZHBvb2wuY29tcGlsZV9jYWNoZSh0bXApCkBAIC0yMjUsNiArMjU1LDEzIEBACiAgICAgIiIiUmVtb3ZlIGFuIEV2ZW50IGhhbmRsZXIiIiIKICAgICBfaGFuZGxlcnMucG9wKG5hbWUpCiAKK2RlZiBnZXRfaGFuZGxlcnMoKToKKyAgICByZXR1cm4gX2hhbmRsZXJzCisKK2RlZiBzZXRfaGFuZGxlcnMoaGFuZGxlcnMpOgorICAgIGdsb2JhbCBfaGFuZGxlcnMKKyAgICBfaGFuZGxlcnMgPSBoYW5kbGVycworCiBkZWYgc2V0X2V2ZW50ZmlsdGVyKGZ1bmMpOgogICAgIGdsb2JhbCBfZXZlbnRmaWx0ZXIKICAgICBfZXZlbnRmaWx0ZXIgPSBmdW5jCkBAIC0zNzMsNyArNDEwLDExIEBACiAKIAogCi0KK2NsYXNzIEJ1aWxkSW5pdChCdWlsZEJhc2UpOgorICAgICIiImJ1aWxkRmlsZSBvciBidWlsZFRhcmdldHMgd2FzIGludm9rZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcD1bXSk6CisgICAgICAgIG5hbWUgPSBOb25lCisgICAgICAgIEJ1aWxkQmFzZS5fX2luaXRfXyhzZWxmLCBuYW1lLCBwKQogCiBjbGFzcyBCdWlsZFN0YXJ0ZWQoQnVpbGRCYXNlLCBPcGVyYXRpb25TdGFydGVkKToKICAgICAiIiJiYm1ha2UgYnVpbGQgcnVuIHN0YXJ0ZWQiIiIKQEAgLTYwNSw4ICs2NDYsOSBAQAogICAgICAgICAgICAgaWYgaGFzYXR0cih0YiwgJ3RiX25leHQnKToKICAgICAgICAgICAgICAgICB0YiA9IGxpc3QoYmIuZXhjZXB0aW9ucy5leHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0zKSkKICAgICAgICAgICAgICMgTmVlZCB0byB0dXJuIHRoZSB2YWx1ZSBpbnRvIHNvbWV0aGluZyB0aGUgbG9nZ2luZyBzeXN0ZW0gY2FuIHBpY2tsZQotICAgICAgICAgICAgdmFsdWUgPSBzdHIodmFsdWUpCiAgICAgICAgICAgICByZWNvcmQuYmJfZXhjX2luZm8gPSAoZXR5cGUsIHZhbHVlLCB0YikKKyAgICAgICAgICAgIHJlY29yZC5iYl9leGNfZm9ybWF0dGVkID0gYmIuZXhjZXB0aW9ucy5mb3JtYXRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PTUpCisgICAgICAgICAgICB2YWx1ZSA9IHN0cih2YWx1ZSkKICAgICAgICAgICAgIHJlY29yZC5leGNfaW5mbyA9IE5vbmUKICAgICAgICAgZmlyZShyZWNvcmQsIE5vbmUpCiAKQEAgLTYzNyw2ICs2NzksMzMgQEAKICAgICAgICAgc2VsZi50eXBlID0gZXZlbnR0eXBlCiAgICAgICAgIHNlbGYuX2xvY2FsZGF0YSA9IGV2ZW50ZGF0YQogCitjbGFzcyBQcm9jZXNzU3RhcnRlZChFdmVudCk6CisgICAgIiIiCisgICAgR2VuZXJpYyBwcm9jZXNzIHN0YXJ0ZWQgZXZlbnQgKHVzdWFsbHkgcGFydCBvZiB0aGUgaW5pdGlhbCBzdGFydHVwKQorICAgIHdoZXJlIGZ1cnRoZXIgcHJvZ3Jlc3MgZXZlbnRzIHdpbGwgYmUgZGVsaXZlcmVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3NuYW1lLCB0b3RhbCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYucHJvY2Vzc25hbWUgPSBwcm9jZXNzbmFtZQorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKworY2xhc3MgUHJvY2Vzc1Byb2dyZXNzKEV2ZW50KToKKyAgICAiIiIKKyAgICBHZW5lcmljIHByb2Nlc3MgcHJvZ3Jlc3MgZXZlbnQgKHVzdWFsbHkgcGFydCBvZiB0aGUgaW5pdGlhbCBzdGFydHVwKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzbmFtZSwgcHJvZ3Jlc3MpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnByb2Nlc3NuYW1lID0gcHJvY2Vzc25hbWUKKyAgICAgICAgc2VsZi5wcm9ncmVzcyA9IHByb2dyZXNzCisKK2NsYXNzIFByb2Nlc3NGaW5pc2hlZChFdmVudCk6CisgICAgIiIiCisgICAgR2VuZXJpYyBwcm9jZXNzIGZpbmlzaGVkIGV2ZW50ICh1c3VhbGx5IHBhcnQgb2YgdGhlIGluaXRpYWwgc3RhcnR1cCkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc25hbWUpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnByb2Nlc3NuYW1lID0gcHJvY2Vzc25hbWUKKwogY2xhc3MgU2FuaXR5Q2hlY2soRXZlbnQpOgogICAgICIiIgogICAgIEV2ZW50IHRvIHJ1biBzYW5pdHkgY2hlY2tzLCBlaXRoZXIgcmFpc2UgZXJyb3JzIG9yIGdlbmVyYXRlIGV2ZW50cyBhcyByZXR1cm4gc3RhdHVzLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V4Y2VwdGlvbnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXhjZXB0aW9ucy5weQppbmRleCBmMTgyYzhmLi5jZDcxMzQzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXhjZXB0aW9ucy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXhjZXB0aW9ucy5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CisKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgYmIubmFtZWR0dXBsZV93aXRoX2FiYwpAQCAtODYsNiArODYsNiBAQAogCiBkZWYgdG9fc3RyaW5nKGV4Yyk6CiAgICAgaWYgaXNpbnN0YW5jZShleGMsIFN5c3RlbUV4aXQpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMuY29kZSwgYmFzZXN0cmluZyk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4Yy5jb2RlLCBzdHIpOgogICAgICAgICAgICAgcmV0dXJuICdFeGl0ZWQgd2l0aCAiJWQiJyAlIGV4Yy5jb2RlCiAgICAgcmV0dXJuIHN0cihleGMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9fX2luaXRfXy5weQppbmRleCAxZmE2NzAyLi5jZDczNjJjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL19faW5pdF9fLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkKQEAgLTI1LDMxICsyNSwyNiBAQAogIwogIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Ci1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiBpbXBvcnQgb3MsIHJlCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IHVybGxpYgotaW1wb3J0IHVybHBhcnNlCitpbXBvcnQgdXJsbGliLnJlcXVlc3QsIHVybGxpYi5wYXJzZSwgdXJsbGliLmVycm9yCitpZiAnZ2l0JyBub3QgaW4gdXJsbGliLnBhcnNlLnVzZXNfbmV0bG9jOgorICAgIHVybGxpYi5wYXJzZS51c2VzX25ldGxvYy5hcHBlbmQoJ2dpdCcpCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBiYi5wZXJzaXN0X2RhdGEsIGJiLnV0aWxzCiBpbXBvcnQgYmIuY2hlY2tzdW0KIGZyb20gYmIgaW1wb3J0IGRhdGEKIGltcG9ydCBiYi5wcm9jZXNzCi1pbXBvcnQgc3VicHJvY2VzcwogCiBfX3ZlcnNpb25fXyA9ICIyIgogX2NoZWNrc3VtX2NhY2hlID0gYmIuY2hlY2tzdW0uRmlsZUNoZWNrc3VtQ2FjaGUoKQogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5GZXRjaGVyIikKIAotdHJ5OgotICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBwaWNrbGUKLSAgICBsb2dnZXIuaW5mbygiSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiAiCi0gICAgICAgICAgICAgICAgIkZhbGxpbmcgYmFjayB0byBhIHZlcnkgc2xvdyBpbXBsZW1lbnRhdGlvbi4iKQotCiBjbGFzcyBCQkZldGNoRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAgIiIiQ2xhc3MgYWxsIGZldGNoIGV4Y2VwdGlvbnMgaW5oZXJpdCBmcm9tIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpOgpAQCAtMjMxLDE0ICsyMjYsMTQgQEAKICAgICAgICAgIyB0aGVtIGFyZSBub3QgcXVpdGUgUkZDIGNvbXBsaWFudC4KICAgICAgICAgdXJpLCBwYXJhbV9zdHIgPSAodXJpLnNwbGl0KCI7IiwgMSkgKyBbTm9uZV0pWzoyXQogCi0gICAgICAgIHVybHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisgICAgICAgIHVybHAgPSB1cmxsaWIucGFyc2UudXJscGFyc2UodXJpKQogICAgICAgICBzZWxmLnNjaGVtZSA9IHVybHAuc2NoZW1lCiAKICAgICAgICAgcmVwYXJzZSA9IDAKIAogICAgICAgICAjIENvZXJjZSB1cmxwYXJzZSB0byBtYWtlIFVSSSBzY2hlbWUgdXNlIG5ldGxvYwotICAgICAgICBpZiBub3Qgc2VsZi5zY2hlbWUgaW4gdXJscGFyc2UudXNlc19uZXRsb2M6Ci0gICAgICAgICAgICB1cmxwYXJzZS51c2VzX3BhcmFtcy5hcHBlbmQoc2VsZi5zY2hlbWUpCisgICAgICAgIGlmIG5vdCBzZWxmLnNjaGVtZSBpbiB1cmxsaWIucGFyc2UudXNlc19uZXRsb2M6CisgICAgICAgICAgICB1cmxsaWIucGFyc2UudXNlc19wYXJhbXMuYXBwZW5kKHNlbGYuc2NoZW1lKQogICAgICAgICAgICAgcmVwYXJzZSA9IDEKIAogICAgICAgICAjIE1ha2UgdXJscGFyc2UgaGFwcHkoL2llcikgYnkgY29udmVydGluZyBsb2NhbCByZXNvdXJjZXMKQEAgLTI0OSw3ICsyNDQsNyBAQAogICAgICAgICAgICAgcmVwYXJzZSA9IDEKIAogICAgICAgICBpZiByZXBhcnNlOgotICAgICAgICAgICAgdXJscCA9IHVybHBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgICAgIHVybHAgPSB1cmxsaWIucGFyc2UudXJscGFyc2UodXJpKQogCiAgICAgICAgICMgSWRlbnRpZnkgaWYgdGhlIFVSSSBpcyByZWxhdGl2ZSBvciBub3QKICAgICAgICAgaWYgdXJscC5zY2hlbWUgaW4gc2VsZi5fcmVsYXRpdmVfc2NoZW1lcyBhbmQgXApAQCAtMjY1LDcgKzI2MCw3IEBACiAgICAgICAgICAgICBpZiB1cmxwLnBhc3N3b3JkOgogICAgICAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gJzolcycgJSB1cmxwLnBhc3N3b3JkCiAKLSAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUodXJscC5wYXRoKQorICAgICAgICBzZWxmLnBhdGggPSB1cmxsaWIucGFyc2UudW5xdW90ZSh1cmxwLnBhdGgpCiAKICAgICAgICAgaWYgcGFyYW1fc3RyOgogICAgICAgICAgICAgc2VsZi5wYXJhbXMgPSBzZWxmLl9wYXJhbV9zdHJfc3BsaXQocGFyYW1fc3RyLCAiOyIpCkBAIC0yOTcsNyArMjkyLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYucXVlcnkgZWxzZSAnJykKIAogICAgIGRlZiBfcGFyYW1fc3RyX3NwbGl0KHNlbGYsIHN0cmluZywgZWxtZGVsaW0sIGt2ZGVsaW09Ij0iKToKLSAgICAgICAgcmV0ID0ge30KKyAgICAgICAgcmV0ID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQogICAgICAgICBmb3IgaywgdiBpbiBbeC5zcGxpdChrdmRlbGltLCAxKSBmb3IgeCBpbiBzdHJpbmcuc3BsaXQoZWxtZGVsaW0pXToKICAgICAgICAgICAgIHJldFtrXSA9IHYKICAgICAgICAgcmV0dXJuIHJldApAQCAtMzEzLDExICszMDgsMTEgQEAKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXRoX3F1b3RlZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHVybGxpYi5xdW90ZShzZWxmLnBhdGgpCisgICAgICAgIHJldHVybiB1cmxsaWIucGFyc2UucXVvdGUoc2VsZi5wYXRoKQogCiAgICAgQHBhdGhfcXVvdGVkLnNldHRlcgogICAgIGRlZiBwYXRoX3F1b3RlZChzZWxmLCBwYXRoKToKLSAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUocGF0aCkKKyAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXRoKHNlbGYpOgpAQCAtMzkwLDcgKzM4NSw3IEBACiAgICAgICAgIHVzZXIgPSAnJwogICAgICAgICBwc3dkID0gJycKIAotICAgIHAgPSB7fQorICAgIHAgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCiAgICAgaWYgcGFybToKICAgICAgICAgZm9yIHMgaW4gcGFybS5zcGxpdCgnOycpOgogICAgICAgICAgICAgaWYgczoKQEAgLTM5OSw3ICszOTQsNyBAQAogICAgICAgICAgICAgICAgIHMxLCBzMiA9IHMuc3BsaXQoJz0nKQogICAgICAgICAgICAgICAgIHBbczFdID0gczIKIAotICAgIHJldHVybiB0eXBlLCBob3N0LCB1cmxsaWIudW5xdW90ZShwYXRoKSwgdXNlciwgcHN3ZCwgcAorICAgIHJldHVybiB0eXBlLCBob3N0LCB1cmxsaWIucGFyc2UudW5xdW90ZShwYXRoKSwgdXNlciwgcHN3ZCwgcAogCiBkZWYgZW5jb2RldXJsKGRlY29kZWQpOgogICAgICIiIkVuY29kZXMgYSBVUkwgZnJvbSB0b2tlbnMgKHNjaGVtZSwgbmV0d29yayBsb2NhdGlvbiwgcGF0aCwKQEAgLTQyMyw3ICs0MTgsNyBAQAogICAgICMgU3RhbmRhcmRpc2UgcGF0aCB0byBlbnN1cmUgY29tcGFyaXNvbnMgd29yawogICAgIHdoaWxlICcvLycgaW4gcGF0aDoKICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiLy8iLCAiLyIpCi0gICAgdXJsICs9ICIlcyIgJSB1cmxsaWIucXVvdGUocGF0aCkKKyAgICB1cmwgKz0gIiVzIiAlIHVybGxpYi5wYXJzZS5xdW90ZShwYXRoKQogICAgIGlmIHA6CiAgICAgICAgIGZvciBwYXJtIGluIHA6CiAgICAgICAgICAgICB1cmwgKz0gIjslcz0lcyIgJSAocGFybSwgcFtwYXJtXSkKQEAgLTU4NiwxMiArNTgxLDEyIEBACiAgICAgICAgICAgICByYWlzZSBOb0NoZWNrc3VtRXJyb3IoJ01pc3NpbmcgU1JDX1VSSSBjaGVja3N1bScsIHVkLnVybCkKIAogICAgICAgICAjIExvZyBtaXNzaW5nIHN1bXMgc28gdXNlciBjYW4gbW9yZSBlYXNpbHkgYWRkIHRoZW0KLSAgICAgICAgbG9nZ2VyLndhcm4oJ01pc3NpbmcgbWQ1IFNSQ19VUkkgY2hlY2tzdW0gZm9yICVzLCBjb25zaWRlciBhZGRpbmcgdG8gdGhlIHJlY2lwZTpcbicKLSAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklbJXNdID0gIiVzIicsCi0gICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQubWQ1X25hbWUsIG1kNWRhdGEpCi0gICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIHNoYTI1NiBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCi0gICAgICAgICAgICAgICAgICAgICdTUkNfVVJJWyVzXSA9ICIlcyInLAotICAgICAgICAgICAgICAgICAgICB1ZC5sb2NhbHBhdGgsIHVkLnNoYTI1Nl9uYW1lLCBzaGEyNTZkYXRhKQorICAgICAgICBsb2dnZXIud2FybmluZygnTWlzc2luZyBtZDUgU1JDX1VSSSBjaGVja3N1bSBmb3IgJXMsIGNvbnNpZGVyIGFkZGluZyB0byB0aGUgcmVjaXBlOlxuJworICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgdWQubG9jYWxwYXRoLCB1ZC5tZDVfbmFtZSwgbWQ1ZGF0YSkKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ01pc3Npbmcgc2hhMjU2IFNSQ19VUkkgY2hlY2tzdW0gZm9yICVzLCBjb25zaWRlciBhZGRpbmcgdG8gdGhlIHJlY2lwZTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklbJXNdID0gIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQuc2hhMjU2X25hbWUsIHNoYTI1NmRhdGEpCiAKICAgICAjIFdlIHdhbnQgdG8gYWxlcnQgdGhlIHVzZXIgaWYgYSBjaGVja3N1bSBpcyBkZWZpbmVkIGluIHRoZSByZWNpcGUgYnV0CiAgICAgIyBpdCBkb2VzIG5vdCBtYXRjaC4KQEAgLTY1OSw5ICs2NTQsOSBAQAogICAgICAgICAgICAgIyBmaWxlcyB0byB0aG9zZSBjb250YWluaW5nIHRoZSBjaGVja3N1bXMuCiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzLCB0aGV5IGFyZW4ndCBmYXRhbAotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDb3VsZG4ndCBsb2FkIGNoZWNrc3VtcyBmcm9tIGRvbmVzdGFtcCAlczogJXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIobXNnOiAlcykiICUgKHVkLmRvbmVzdGFtcCwgdHlwZShlKS5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZSkpKQorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDb3VsZG4ndCBsb2FkIGNoZWNrc3VtcyBmcm9tIGRvbmVzdGFtcCAlczogJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIobXNnOiAlcykiICUgKHVkLmRvbmVzdGFtcCwgdHlwZShlKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZSkpKQogCiAgICAgdHJ5OgogICAgICAgICBjaGVja3N1bXMgPSB2ZXJpZnlfY2hlY2tzdW0odWQsIGQsIHByZWNvbXB1dGVkX2NoZWNrc3VtcykKQEAgLTY2OSwxNCArNjY0LDE0IEBACiAgICAgICAgICMgYXMgYW4gdXBncmFkZSBwYXRoIGZyb20gdGhlIHByZXZpb3VzIGRvbmUgc3RhbXAgZmlsZSBmb3JtYXQuCiAgICAgICAgIGlmIGNoZWNrc3VtcyAhPSBwcmVjb21wdXRlZF9jaGVja3N1bXM6CiAgICAgICAgICAgICB3aXRoIG9wZW4odWQuZG9uZXN0YW1wLCAid2IiKSBhcyBjYWNoZWZpbGU6Ci0gICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGNhY2hlZmlsZSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGNhY2hlZmlsZSwgMikKICAgICAgICAgICAgICAgICBwLmR1bXAoY2hlY2tzdW1zKQogICAgICAgICByZXR1cm4gVHJ1ZQogICAgIGV4Y2VwdCBDaGVja3N1bUVycm9yIGFzIGU6CiAgICAgICAgICMgQ2hlY2tzdW1zIGZhaWxlZCB0byB2ZXJpZnksIHRyaWdnZXIgcmUtZG93bmxvYWQgYW5kIHJlbW92ZSB0aGUKICAgICAgICAgIyBpbmNvcnJlY3Qgc3RhbXAgZmlsZS4KLSAgICAgICAgbG9nZ2VyLndhcm4oIkNoZWNrc3VtIG1pc21hdGNoIGZvciBsb2NhbCBmaWxlICVzXG4iCi0gICAgICAgICAgICAgICAgICAgICJDbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSB1ZC5sb2NhbHBhdGgpCisgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDaGVja3N1bSBtaXNtYXRjaCBmb3IgbG9jYWwgZmlsZSAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYW5pbmcgYW5kIHRyeWluZyBhZ2Fpbi4iICUgdWQubG9jYWxwYXRoKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgogICAgICAgICAgICAgcmVuYW1lX2JhZF9jaGVja3N1bSh1ZCwgZS5jaGVja3N1bSkKICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmRvbmVzdGFtcCkKQEAgLTcwMywxMyArNjk4LDEzIEBACiAgICAgICAgICAgICBjaGVja3N1bXMgPSB2ZXJpZnlfY2hlY2tzdW0odWQsIGQpCiAgICAgICAgICAgICAjIFN0b3JlIHRoZSBjaGVja3N1bXMgZm9yIGxhdGVyIHJlLXZlcmlmaWNhdGlvbiBhZ2FpbnN0IHRoZSByZWNpcGUKICAgICAgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJ3YiIpIGFzIGNhY2hlZmlsZToKLSAgICAgICAgICAgICAgICBwID0gcGlja2xlLlBpY2tsZXIoY2FjaGVmaWxlLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKyAgICAgICAgICAgICAgICBwID0gcGlja2xlLlBpY2tsZXIoY2FjaGVmaWxlLCAyKQogICAgICAgICAgICAgICAgIHAuZHVtcChjaGVja3N1bXMpCiAgICAgICAgIGV4Y2VwdCBDaGVja3N1bUVycm9yIGFzIGU6CiAgICAgICAgICAgICAjIENoZWNrc3VtcyBmYWlsZWQgdG8gdmVyaWZ5LCB0cmlnZ2VyIHJlLWRvd25sb2FkIGFuZCByZW1vdmUgdGhlCiAgICAgICAgICAgICAjIGluY29ycmVjdCBzdGFtcCBmaWxlLgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkNoZWNrc3VtIG1pc21hdGNoIGZvciBsb2NhbCBmaWxlICVzXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYW5pbmcgYW5kIHRyeWluZyBhZ2Fpbi4iICUgdWQubG9jYWxwYXRoKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNoZWNrc3VtIG1pc21hdGNoIGZvciBsb2NhbCBmaWxlICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYW5pbmcgYW5kIHRyeWluZyBhZ2Fpbi4iICUgdWQubG9jYWxwYXRoKQogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKICAgICAgICAgICAgICAgICByZW5hbWVfYmFkX2NoZWNrc3VtKHVkLCBlLmNoZWNrc3VtKQogICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmRvbmVzdGFtcCkKQEAgLTc2Niw2ICs3NjEsNyBAQAogICAgIGlmIG5vdCBmb3JtYXQ6CiAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlRoZSBTUkNSRVZfRk9STUFUIHZhcmlhYmxlIG11c3QgYmUgc2V0IHdoZW4gbXVsdGlwbGUgU0NNcyBhcmUgdXNlZC4iKQogCisgICAgbmFtZV90b19yZXYgPSB7fQogICAgIHNlZW5hdXRvaW5jID0gRmFsc2UKICAgICBmb3Igc2NtIGluIHNjbXM6CiAgICAgICAgIHVkID0gdXJsZGF0YVtzY21dCkBAIC03NzQsNyArNzcwLDE2IEBACiAgICAgICAgICAgICBzZWVuYXV0b2luYyA9IHNlZW5hdXRvaW5jIG9yIGF1dG9pbmMKICAgICAgICAgICAgIGlmIGxlbihyZXYpID4gMTA6CiAgICAgICAgICAgICAgICAgcmV2ID0gcmV2WzoxMF0KLSAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKG5hbWUsIHJldikKKyAgICAgICAgICAgIG5hbWVfdG9fcmV2W25hbWVdID0gcmV2CisgICAgIyBSZXBsYWNlIG5hbWVzIGJ5IHJldmlzaW9ucyBpbiB0aGUgU1JDUkVWX0ZPUk1BVCBzdHJpbmcuIFRoZSBhcHByb2FjaCB1c2VkCisgICAgIyBoZXJlIGNhbiBoYW5kbGUgbmFtZXMgYmVpbmcgcHJlZml4ZXMgb2Ygb3RoZXIgbmFtZXMgYW5kIG5hbWVzIGFwcGVhcmluZworICAgICMgYXMgc3Vic3RyaW5ncyBpbiByZXZpc2lvbnMgKGluIHdoaWNoIGNhc2UgdGhlIG5hbWUgc2hvdWxkIG5vdCBiZQorICAgICMgZXhwYW5kZWQpLiBUaGUgJ3wnIHJlZ3VsYXIgZXhwcmVzc2lvbiBvcGVyYXRvciB0cmllcyBtYXRjaGVzIGZyb20gbGVmdCB0bworICAgICMgcmlnaHQsIHNvIHdlIG5lZWQgdG8gc29ydCB0aGUgbmFtZXMgd2l0aCB0aGUgbG9uZ2VzdCBvbmVzIGZpcnN0LgorICAgIG5hbWVzX2Rlc2NlbmRpbmdfbGVuID0gc29ydGVkKG5hbWVfdG9fcmV2LCBrZXk9bGVuLCByZXZlcnNlPVRydWUpCisgICAgbmFtZV90b19yZXZfcmUgPSAifCIuam9pbihyZS5lc2NhcGUobmFtZSkgZm9yIG5hbWUgaW4gbmFtZXNfZGVzY2VuZGluZ19sZW4pCisgICAgZm9ybWF0ID0gcmUuc3ViKG5hbWVfdG9fcmV2X3JlLCBsYW1iZGEgbWF0Y2g6IG5hbWVfdG9fcmV2W21hdGNoLmdyb3VwKDApXSwgZm9ybWF0KQorCiAgICAgaWYgc2VlbmF1dG9pbmM6CiAgICAgICAgZm9ybWF0ID0gIkFVVE9JTkMrIiArIGZvcm1hdAogCkBAIC03ODQsNyArNzg5LDcgQEAKICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFt1cmxdLCBkKQogICAgIHJldHVybiBmZXRjaGVyLmxvY2FscGF0aCh1cmwpCiAKLWRlZiBydW5mZXRjaGNtZChjbWQsIGQsIHF1aWV0PUZhbHNlLCBjbGVhbnVwPU5vbmUpOgorZGVmIHJ1bmZldGNoY21kKGNtZCwgZCwgcXVpZXQ9RmFsc2UsIGNsZWFudXA9Tm9uZSwgbG9nPU5vbmUsIHdvcmtkaXI9Tm9uZSk6CiAgICAgIiIiCiAgICAgUnVuIGNtZCByZXR1cm5pbmcgdGhlIGNvbW1hbmQgb3V0cHV0CiAgICAgUmFpc2UgYW4gZXJyb3IgaWYgaW50ZXJydXB0ZWQgb3IgY21kIGZhaWxzCkBAIC04MDcsMTMgKzgxMiwxNiBAQAogICAgICAgICAgICAgICAgICAgJ0dJVF9TU0xfQ0FJTkZPJywKICAgICAgICAgICAgICAgICAgICdHSVRfU01BUlRfSFRUUCcsCiAgICAgICAgICAgICAgICAgICAnU1NIX0FVVEhfU09DSycsICdTU0hfQUdFTlRfUElEJywKLSAgICAgICAgICAgICAgICAgICdTT0NLUzVfVVNFUicsICdTT0NLUzVfUEFTU1dEJ10KKyAgICAgICAgICAgICAgICAgICdTT0NLUzVfVVNFUicsICdTT0NLUzVfUEFTU1dEJywKKyAgICAgICAgICAgICAgICAgICdEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MnLAorICAgICAgICAgICAgICAgICAgJ1A0Q09ORklHJ10KIAogICAgIGlmIG5vdCBjbGVhbnVwOgogICAgICAgICBjbGVhbnVwID0gW10KIAorICAgIG9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKQogICAgIGZvciB2YXIgaW4gZXhwb3J0dmFyczoKLSAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIFRydWUpIG9yIChvcmlnZW52IGFuZCBvcmlnZW52LmdldFZhcih2YXIsIFRydWUpKQogICAgICAgICBpZiB2YWw6CiAgICAgICAgICAgICBjbWQgPSAnZXhwb3J0ICcgKyB2YXIgKyAnPVwiJXNcIjsgJXMnICUgKHZhbCwgY21kKQogCkBAIC04MjMsNyArODMxLDcgQEAKICAgICBlcnJvcl9tZXNzYWdlID0gIiIKIAogICAgIHRyeToKLSAgICAgICAgKG91dHB1dCwgZXJyb3JzKSA9IGJiLnByb2Nlc3MucnVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgKG91dHB1dCwgZXJyb3JzKSA9IGJiLnByb2Nlc3MucnVuKGNtZCwgbG9nPWxvZywgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgY3dkPXdvcmtkaXIpCiAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCiAgICAgZXhjZXB0IGJiLnByb2Nlc3MuTm90Rm91bmRFcnJvciBhcyBlOgogICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgJXMiICUgKGUuY29tbWFuZCkKQEAgLTgzNCw3ICs4NDIsNyBAQAogICAgICAgICAgICAgb3V0cHV0ID0gIm91dHB1dDpcbiVzIiAlIGUuc3RkZXJyCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvdXRwdXQgPSAibm8gb3V0cHV0IgotICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzLCAlcyIgJSAoZS5leGl0Y29kZSwgb3V0cHV0KQorICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgJXMgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzLCAlcyIgJSAoZS5jb21tYW5kLCBlLmV4aXRjb2RlLCBvdXRwdXQpCiAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZToKICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJGZXRjaCBjb21tYW5kICVzIGNvdWxkIG5vdCBiZSBydW46XG4lcyIgJSAoZS5jb21tYW5kLCBlLm1zZykKICAgICBpZiBub3Qgc3VjY2VzczoKQEAgLTkzNyw4ICs5NDUsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgb3MuY2hkaXIobGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSkKLQogICAgICAgICBpZiBub3QgdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgbGQsIG9yaWd1ZCkgb3IgdWQubWV0aG9kLm5lZWRfdXBkYXRlKHVkLCBsZCk6CiAgICAgICAgICAgICB1ZC5tZXRob2QuZG93bmxvYWQodWQsIGxkKQogICAgICAgICAgICAgaWYgaGFzYXR0cih1ZC5tZXRob2QsImJ1aWxkX21pcnJvcl9kYXRhIik6CkBAIC05ODIsOCArOTg4LDggQEAKIAogICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIk1pcnJvciBjaGVja3N1bSBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpXG5DbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSAodWQudXJsLCBvcmlndWQudXJsKSkKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKHN0cihlKSkKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJNaXJyb3IgY2hlY2tzdW0gZmFpbHVyZSBmb3IgdXJsICVzIChvcmlnaW5hbCB1cmw6ICVzKVxuQ2xlYW5pbmcgYW5kIHRyeWluZyBhZ2Fpbi4iICUgKHVkLnVybCwgb3JpZ3VkLnVybCkpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzdHIoZSkpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgogICAgICAgICAgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBOb0NoZWNrc3VtRXJyb3IpOgpAQCAtMTE5OCw3ICsxMjA0LDcgQEAKICAgICAgICAgICAgIHJhaXNlIE5vbkxvY2FsTWV0aG9kKCkKIAogICAgICAgICBpZiBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpIGFuZCAicHJvdG9jb2wiIG5vdCBpbiBzZWxmLnBhcm06Ci0gICAgICAgICAgICBsb2dnZXIud2FybignQ29uc2lkZXIgdXBkYXRpbmcgJXMgcmVjaXBlIHRvIHVzZSAicHJvdG9jb2wiIG5vdCAicHJvdG8iIGluIFNSQ19VUkkuJywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZygnQ29uc2lkZXIgdXBkYXRpbmcgJXMgcmVjaXBlIHRvIHVzZSAicHJvdG9jb2wiIG5vdCAicHJvdG8iIGluIFNSQ19VUkkuJywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCiAgICAgICAgICAgICBzZWxmLnBhcm1bInByb3RvY29sIl0gPSBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpCiAKICAgICAgICAgaWYgaGFzYXR0cihzZWxmLm1ldGhvZCwgInVybGRhdGFfaW5pdCIpOgpAQCAtMTM5NSw3ICsxNDAxLDE4IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY21kID0gJ3JwbTJjcGlvLnNoICVzIHwgY3BpbyAtaWQnICUgKGZpbGUpCiAgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5kZWInKSBvciBmaWxlLmVuZHN3aXRoKCcuaXBrJyk6Ci0gICAgICAgICAgICAgICAgY21kID0gJ2FyIC1wICVzIGRhdGEudGFyLmd6IHwgemNhdCB8IHRhciAtLW5vLXNhbWUtb3duZXIgLXhwZiAtJyAlIGZpbGUKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgnYXIgLXQgJXMnICUgZmlsZSwgcHJlZXhlY19mbj1zdWJwcm9jZXNzX3NldHVwLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIGRhdGFmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LmRlY29kZSgpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnZGF0YS50YXIuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWZpbGUgPSBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFVucGFja0Vycm9yKCJVbmFibGUgdG8gdW5wYWNrIGRlYi9pcGsgcGFja2FnZSAtIGRvZXMgbm90IGNvbnRhaW4gZGF0YS50YXIuKiBmaWxlIiwgdXJsZGF0YS51cmwpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVW5wYWNrRXJyb3IoIlVuYWJsZSB0byB1bnBhY2sgZGViL2lwayBwYWNrYWdlIC0gY291bGQgbm90IGxpc3QgY29udGVudHMiLCB1cmxkYXRhLnVybCkKKyAgICAgICAgICAgICAgICBjbWQgPSAnYXIgeCAlcyAlcyAmJiB0YXIgLS1uby1zYW1lLW93bmVyIC14cGYgJXMgJiYgcm0gJXMnICUgKGZpbGUsIGRhdGFmaWxlLCBkYXRhZmlsZSwgZGF0YWZpbGUpCiAgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy50YXIuN3onKToKICAgICAgICAgICAgICAgICBjbWQgPSAnN3ogeCAtc28gJXMgfCB0YXIgeGYgLSAnICUgZmlsZQogICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuN3onKToKQEAgLTE0MDMsNyArMTQyMCwxMyBAQAogCiAgICAgICAgICMgSWYgJ3N1YmRpcicgcGFyYW0gZXhpc3RzLCBjcmVhdGUgYSBkaXIgYW5kIHVzZSBpdCBhcyBkZXN0aW5hdGlvbiBmb3IgdW5wYWNrIGNtZAogICAgICAgICBpZiAnc3ViZGlyJyBpbiB1cmxkYXRhLnBhcm06Ci0gICAgICAgICAgICB1bnBhY2tkaXIgPSAnJXMvJXMnICUgKHJvb3RkaXIsIHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpKQorICAgICAgICAgICAgc3ViZGlyID0gdXJsZGF0YS5wYXJtLmdldCgnc3ViZGlyJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoc3ViZGlyKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5yZWFscGF0aChzdWJkaXIpLnN0YXJ0c3dpdGgob3MucGF0aC5yZWFscGF0aChyb290ZGlyKSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFVucGFja0Vycm9yKCJzdWJkaXIgYXJndW1lbnQgaXNuJ3QgYSBzdWJkaXJlY3Rvcnkgb2YgdW5wYWNrIHJvb3QgJXMiICUgcm9vdGRpciwgdXJsZGF0YS51cmwpCisgICAgICAgICAgICAgICAgdW5wYWNrZGlyID0gc3ViZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVucGFja2RpciA9IG9zLnBhdGguam9pbihyb290ZGlyLCBzdWJkaXIpCiAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodW5wYWNrZGlyKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdW5wYWNrZGlyID0gcm9vdGRpcgpAQCAtMTQyMiwyMiArMTQ0NSwxNiBAQAogICAgICAgICAgICAgICAgICAgICBpZiB1cmxwYXRoLmZpbmQoIi8iKSAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSB1cmxwYXRoLnJzcGxpdCgiLyIsIDEpWzBdICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoIiVzLyVzIiAlICh1bnBhY2tkaXIsIGRlc3RkaXIpKQotICAgICAgICAgICAgICAgIGNtZCA9ICdjcCAtZnBQUiAlcyAlcycgJSAoZmlsZSwgZGVzdGRpcikKKyAgICAgICAgICAgICAgICBjbWQgPSAnY3AgLWZwUFJIICVzICVzJyAlIChmaWxlLCBkZXN0ZGlyKQogCiAgICAgICAgIGlmIG5vdCBjbWQ6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAjIENoYW5nZSB0byB1bnBhY2tkaXIgYmVmb3JlIGV4ZWN1dGluZyBjb21tYW5kCi0gICAgICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCk7Ci0gICAgICAgIG9zLmNoZGlyKHVucGFja2RpcikKLQogICAgICAgICBwYXRoID0gZGF0YS5nZXRWYXIoJ1BBVEgnLCBUcnVlKQogICAgICAgICBpZiBwYXRoOgogICAgICAgICAgICAgY21kID0gIlBBVEg9XCIlc1wiICVzIiAlIChwYXRoLCBjbWQpCi0gICAgICAgIGJiLm5vdGUoIlVucGFja2luZyAlcyB0byAlcy8iICUgKGZpbGUsIG9zLmdldGN3ZCgpKSkKLSAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgcHJlZXhlY19mbj1zdWJwcm9jZXNzX3NldHVwLCBzaGVsbD1UcnVlKQotCi0gICAgICAgIG9zLmNoZGlyKHNhdmVfY3dkKQorICAgICAgICBiYi5ub3RlKCJVbnBhY2tpbmcgJXMgdG8gJXMvIiAlIChmaWxlLCB1bnBhY2tkaXIpKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBwcmVleGVjX2ZuPXN1YnByb2Nlc3Nfc2V0dXAsIHNoZWxsPVRydWUsIGN3ZD11bnBhY2tkaXIpCiAKICAgICAgICAgaWYgcmV0ICE9IDA6CiAgICAgICAgICAgICByYWlzZSBVbnBhY2tFcnJvcigiVW5wYWNrIGNvbW1hbmQgJXMgZmFpbGVkIHdpdGggcmV0dXJuIHZhbHVlICVzIiAlIChjbWQsIHJldCksIHVybGRhdGEudXJsKQpAQCAtMTUwNSw4ICsxNTIyLDkgQEAKICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2NhY2hlID0gY29ubmVjdGlvbl9jYWNoZQogCiAgICAgICAgIGZuID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQotICAgICAgICBpZiBjYWNoZSBhbmQgZm4gYW5kIGZuIGluIHVybGRhdGFfY2FjaGU6Ci0gICAgICAgICAgICBzZWxmLnVkID0gdXJsZGF0YV9jYWNoZVtmbl0KKyAgICAgICAgbWMgPSBkLmdldFZhcignX19CQk1VTFRJQ09ORklHJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgY2FjaGUgYW5kIGZuIGFuZCBtYyArIGZuIGluIHVybGRhdGFfY2FjaGU6CisgICAgICAgICAgICBzZWxmLnVkID0gdXJsZGF0YV9jYWNoZVttYyArIGZuXQogCiAgICAgICAgIGZvciB1cmwgaW4gdXJsczoKICAgICAgICAgICAgIGlmIHVybCBub3QgaW4gc2VsZi51ZDoKQEAgLTE1MTgsNyArMTUzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgaWYgZm4gYW5kIGNhY2hlOgotICAgICAgICAgICAgdXJsZGF0YV9jYWNoZVtmbl0gPSBzZWxmLnVkCisgICAgICAgICAgICB1cmxkYXRhX2NhY2hlW21jICsgZm5dID0gc2VsZi51ZAogCiAgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1cmwpOgogICAgICAgICBpZiB1cmwgbm90IGluIHNlbGYudXJsczoKQEAgLTE1NzIsOCArMTU5MCw2IEBACiAgICAgICAgICAgICAgICAgaWYgcHJlbWlycm9yb25seToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKIAotICAgICAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQotCiAgICAgICAgICAgICAgICAgZmlyc3RlcnIgPSBOb25lCiAgICAgICAgICAgICAgICAgdmVyaWZpZWRfc3RhbXAgPSB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBzZWxmLmQpCiAgICAgICAgICAgICAgICAgaWYgbm90IGxvY2FscGF0aCBhbmQgKG5vdCB2ZXJpZmllZF9zdGFtcCBvciBtLm5lZWRfdXBkYXRlKHVkLCBzZWxmLmQpKToKQEAgLTE1OTQsMTQgKzE2MTAsMTQgQEAKIAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBDaGVja3N1bUVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiQ2hlY2tzdW0gZmFpbHVyZSBlbmNvdW50ZXJlZCB3aXRoIGRvd25sb2FkIG9mICVzIC0gd2lsbCBhdHRlbXB0IG90aGVyIHNvdXJjZXMgaWYgYXZhaWxhYmxlIiAlIHUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNoZWNrc3VtIGZhaWx1cmUgZW5jb3VudGVyZWQgd2l0aCBkb3dubG9hZCBvZiAlcyAtIHdpbGwgYXR0ZW1wdCBvdGhlciBzb3VyY2VzIGlmIGF2YWlsYWJsZSIgJSB1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCBzdHIoZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2JhZF9jaGVja3N1bSh1ZCwgZS5jaGVja3N1bSkKICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBOb0NoZWNrc3VtRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZmV0Y2ggVVJMICVzLCBhdHRlbXB0aW5nIE1JUlJPUlMgaWYgYXZhaWxhYmxlJyAlIHUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0ZhaWxlZCB0byBmZXRjaCBVUkwgJXMsIGF0dGVtcHRpbmcgTUlSUk9SUyBpZiBhdmFpbGFibGUnICUgdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RlcnIgPSBlCiAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgaW5jb21wbGV0ZSBmZXRjaApAQCAtMTczNCw3ICsxNzUwLDcgQEAKICAgICAgICAgICAgIGRlbCBzZWxmLmNhY2hlW2NuXQogCiAgICAgZGVmIGNsb3NlX2Nvbm5lY3Rpb25zKHNlbGYpOgotICAgICAgICBmb3IgY24gaW4gc2VsZi5jYWNoZS5rZXlzKCk6CisgICAgICAgIGZvciBjbiBpbiBsaXN0KHNlbGYuY2FjaGUua2V5cygpKToKICAgICAgICAgICAgIHNlbGYuY2FjaGVbY25dLmNsb3NlKCkKICAgICAgICAgICAgIGRlbCBzZWxmLmNhY2hlW2NuXQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2J6ci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvYnpyLnB5CmluZGV4IDAzZTlhYzQuLjcyMjY0YWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvYnpyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvYnpyLnB5CkBAIC04OCwyOCArODgsMjUgQEAKICAgICAgICAgICAgIGJ6cmNtZCA9IHNlbGYuX2J1aWxkYnpyY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJaUiBVcGRhdGUgJXMiLCB1ZC51cmwpCiAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgYnpyY21kLCB1ZC51cmwpCi0gICAgICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4gKHVkLnBrZ2Rpciwgb3MucGF0aC5iYXNlbmFtZSh1ZC5wYXRoKSkpCi0gICAgICAgICAgICBydW5mZXRjaGNtZChienJjbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZChienJjbWQsIGQsIHdvcmtkaXI9b3MucGF0aC5qb2luKHVkLnBrZ2Rpciwgb3MucGF0aC5iYXNlbmFtZSh1ZC5wYXRoKSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHVkLnBrZ2Rpciwgb3MucGF0aC5iYXNlbmFtZSh1ZC5wa2dkaXIpKSwgVHJ1ZSkKICAgICAgICAgICAgIGJ6cmNtZCA9IHNlbGYuX2J1aWxkYnpyY29tbWFuZCh1ZCwgZCwgImZldGNoIikKICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBienJjbWQsIHVkLnVybCkKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQlpSIENoZWNrb3V0ICVzIiwgdWQudXJsKQogICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLnBrZ2RpcikKLSAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIGJ6cmNtZCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKGJ6cmNtZCwgZCkKLQotICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBydW5mZXRjaGNtZChienJjbWQsIGQsIHdvcmtkaXI9dWQucGtnZGlyKQogCiAgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQogICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKICAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICcuYnpyJyAtLWV4Y2x1ZGUgJy5ienJ0YWdzJyIKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICItLWV4Y2x1ZGU9Jy5ienInIC0tZXhjbHVkZT0nLmJ6cnRhZ3MnIgogCiAgICAgICAgICMgdGFyIHRoZW0gdXAgdG8gYSBkZWZpbmVkIGZpbGVuYW1lCi0gICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIG9zLnBhdGguYmFzZW5hbWUodWQucGtnZGlyKSksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAlcyAtY3pmICVzICVzIiAlICh0YXJfZmxhZ3MsIHVkLmxvY2FscGF0aCwgb3MucGF0aC5iYXNlbmFtZSh1ZC5wa2dkaXIpKSwKKyAgICAgICAgICAgICAgICAgICAgZCwgY2xlYW51cD1bdWQubG9jYWxwYXRoXSwgd29ya2Rpcj11ZC5wa2dkaXIpCiAKICAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jbGVhcmNhc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2NsZWFyY2FzZS5weQppbmRleCBiYTgzZTdjLi43MGUyODBhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2NsZWFyY2FzZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2NsZWFyY2FzZS5weQpAQCAtMjAyLDExICsyMDIsMTAgQEAKIAogICAgIGRlZiBfcmVtb3ZlX3ZpZXcoc2VsZiwgdWQsIGQpOgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC52aWV3ZGlyKToKLSAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNjYXNlZGlyKQogICAgICAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3JtdmlldycpOwogICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNsZWFuaW5nIHVwIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKLSAgICAgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCwgd29ya2Rpcj11ZC5jY2FzZWRpcikKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJybXZpZXcgb3V0cHV0OiAlcyIsIG91dHB1dCkKIAogICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CkBAIC0yNDEsMTEgKzI0MCwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIGUKIAogICAgICAgICAjIFNldCBjb25maWdzcGVjOiBTZXR0aW5nIHRoZSBjb25maWdzcGVjIGVmZmVjdGl2ZWx5IGZldGNoZXMgdGhlIGZpbGVzIGFzIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3NwZWMKLSAgICAgICAgb3MuY2hkaXIodWQudmlld2RpcikKICAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3NldGNzJyk7CiAgICAgICAgIGxvZ2dlci5pbmZvKCJmZXRjaGluZyBkYXRhIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdWQudXJsKQotICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCwgd29ya2Rpcj11ZC52aWV3ZGlyKQogICAgICAgICBsb2dnZXIuaW5mbygiJXMiLCBvdXRwdXQpCiAKICAgICAgICAgIyBDb3B5IHRoZSBjb25maWdzcGVjIHRvIHRoZSB2aWV3ZGlyIHNvIHdlIGhhdmUgaXQgaW4gb3VyIHNvdXJjZSB0YXJiYWxsIGxhdGVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2N2cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5CmluZGV4IGQyN2Q5NmYuLjVmZjcwYmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5CkBAIC0xMjMsMjIgKzEyMywyMyBAQAogICAgICAgICBwa2cgPSBkLmdldFZhcignUE4nLCBUcnVlKQogICAgICAgICBwa2dkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0NWU0RJUicsIFRydWUpLCBwa2cpCiAgICAgICAgIG1vZGRpciA9IG9zLnBhdGguam9pbihwa2dkaXIsIGxvY2FsZGlyKQorICAgICAgICB3b3JrZGlyID0gTm9uZQogICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKG1vZGRpciwgJ0NWUycpLCBvcy5SX09LKToKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGUgIiArIHVkLnVybCkKICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjdnN1cGRhdGVjbWQsIHVkLnVybCkKICAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKLSAgICAgICAgICAgIG9zLmNoZGlyKG1vZGRpcikKKyAgICAgICAgICAgIHdvcmtkaXIgPSBtb2RkaXIKICAgICAgICAgICAgIGNtZCA9IGN2c3VwZGF0ZWNtZAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCiAgICAgICAgICAgICAjIGNoZWNrIG91dCBzb3VyY2VzIHRoZXJlCiAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnZGlyKQotICAgICAgICAgICAgb3MuY2hkaXIocGtnZGlyKQorICAgICAgICAgICAgd29ya2RpciA9IHBrZ2RpcgogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgY3ZzY21kKQogICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGN2c2NtZCwgdWQudXJsKQogICAgICAgICAgICAgY21kID0gY3ZzY21kCiAKLSAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkLCBjbGVhbnVwID0gW21vZGRpcl0pCisgICAgICAgIHJ1bmZldGNoY21kKGNtZCwgZCwgY2xlYW51cD1bbW9kZGlyXSwgd29ya2Rpcj13b3JrZGlyKQogCiAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MobW9kZGlyLCBvcy5SX09LKToKICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkRpcmVjdG9yeSAlcyB3YXMgbm90IHJlYWRhYmxlIGRlc3BpdGUgc3VjZXNzZnVsIGZldGNoPyEiICUgbW9kZGlyLCB1ZC51cmwpCkBAIC0xNDcsMTggKzE0OCwxOCBAQAogICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKICAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICdDVlMnIgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZT0nQ1ZTJyIKIAogICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICB3b3JrZGlyID0gTm9uZQogICAgICAgICBpZiAnZnVsbHBhdGgnIGluIHVkLnBhcm06Ci0gICAgICAgICAgICBvcy5jaGRpcihwa2dkaXIpCisgICAgICAgICAgICB3b3JrZGlyID0gcGtnZGlyCiAgICAgICAgICAgICBjbWQgPSAidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBsb2NhbGRpcikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9zLmNoZGlyKG1vZGRpcikKLSAgICAgICAgICAgIG9zLmNoZGlyKCcuLicpCisgICAgICAgICAgICB3b3JrZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgobW9kZGlyKSkKICAgICAgICAgICAgIGNtZCA9ICJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIG9zLnBhdGguYmFzZW5hbWUobW9kZGlyKSkKIAotICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKyAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkLCBjbGVhbnVwPVt1ZC5sb2NhbHBhdGhdLCB3b3JrZGlyPXdvcmtkaXIpCiAKICAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgogICAgICAgICAiIiIgQ2xlYW4gQ1ZTIEZpbGVzIGFuZCB0YXJiYWxscyAiIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkKaW5kZXggNTI2NjY4Yi4uMWJlYzYwYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkKQEAgLTQ5LDYgKzQ5LDEwIEBACiAgICByZWZlcnJpbmcgdG8gY29tbWl0IHdoaWNoIGlzIHZhbGlkIGluIHRhZyBpbnN0ZWFkIG9mIGJyYW5jaC4KICAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IG5vYnJhbmNoPTEgaWYgbmVlZGVkLgogCistIHVzZWhlYWQKKyAgIEZvciBsb2NhbCBnaXQ6Ly8gdXJscyB0byB1c2UgdGhlIGN1cnJlbnQgYnJhbmNoIEhFQUQgYXMgdGhlIHJldnNpb24gZm9yIHVzZSB3aXRoCisgICBBVVRPUkVWLiBJbXBsaWVzIG5vYnJhbmNoLgorCiAiIiIKIAogI0NvcHlyaWdodCAoQykgMjAwNSBSaWNoYXJkIFB1cmRpZQpAQCAtNzEsMTEgKzc1LDUzIEBACiBpbXBvcnQgcmUKIGltcG9ydCBiYgogaW1wb3J0IGVycm5vCitpbXBvcnQgYmIucHJvZ3Jlc3MKIGZyb20gICBiYiAgICBpbXBvcnQgZGF0YQogZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKIGZyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCiBmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKIAorCitjbGFzcyBHaXRQcm9ncmVzc0hhbmRsZXIoYmIucHJvZ3Jlc3MuTGluZUZpbHRlclByb2dyZXNzSGFuZGxlcik6CisgICAgIiIiRXh0cmFjdCBwcm9ncmVzcyBpbmZvcm1hdGlvbiBmcm9tIGdpdCBvdXRwdXQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuX2J1ZmZlciA9ICcnCisgICAgICAgIHNlbGYuX2NvdW50ID0gMAorICAgICAgICBzdXBlcihHaXRQcm9ncmVzc0hhbmRsZXIsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgICMgU2VuZCBhbiBpbml0aWFsIHByb2dyZXNzIGV2ZW50IHNvIHRoZSBiYXIgZ2V0cyBzaG93bgorICAgICAgICBzZWxmLl9maXJlX3Byb2dyZXNzKC0xKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHNlbGYuX2J1ZmZlciArPSBzdHJpbmcKKyAgICAgICAgc3RhZ2VzID0gWydDb3VudGluZyBvYmplY3RzJywgJ0NvbXByZXNzaW5nIG9iamVjdHMnLCAnUmVjZWl2aW5nIG9iamVjdHMnLCAnUmVzb2x2aW5nIGRlbHRhcyddCisgICAgICAgIHN0YWdlX3dlaWdodHMgPSBbMC4yLCAwLjA1LCAwLjUsIDAuMjVdCisgICAgICAgIHN0YWdlbnVtID0gMAorICAgICAgICBmb3IgaSwgc3RhZ2UgaW4gcmV2ZXJzZWQobGlzdChlbnVtZXJhdGUoc3RhZ2VzKSkpOgorICAgICAgICAgICAgaWYgc3RhZ2UgaW4gc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgICAgIHN0YWdlbnVtID0gaQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9ICcnCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5fc3RhdHVzID0gc3RhZ2VzW3N0YWdlbnVtXQorICAgICAgICBwZXJjcyA9IHJlLmZpbmRhbGwocicoXGQrKSUnLCBzdHJpbmcpCisgICAgICAgIGlmIHBlcmNzOgorICAgICAgICAgICAgcHJvZ3Jlc3MgPSBpbnQocm91bmQoKGludChwZXJjc1stMV0pICogc3RhZ2Vfd2VpZ2h0c1tzdGFnZW51bV0pICsgKHN1bShzdGFnZV93ZWlnaHRzWzpzdGFnZW51bV0pICogMTAwKSkpCisgICAgICAgICAgICByYXRlcyA9IHJlLmZpbmRhbGwocicoW1xkLl0rIFthLXpBLVpdKi9zKyknLCBzdHJpbmcpCisgICAgICAgICAgICBpZiByYXRlczoKKyAgICAgICAgICAgICAgICByYXRlID0gcmF0ZXNbLTFdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhdGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLnVwZGF0ZShwcm9ncmVzcywgcmF0ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN0YWdlbnVtID09IDA6CisgICAgICAgICAgICAgICAgcGVyY3MgPSByZS5maW5kYWxsKHInOiAoXGQrKScsIHN0cmluZykKKyAgICAgICAgICAgICAgICBpZiBwZXJjczoKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBpbnQocGVyY3NbLTFdKQorICAgICAgICAgICAgICAgICAgICBpZiBjb3VudCA+IHNlbGYuX2NvdW50OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY291bnQgPSBjb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlyZV9wcm9ncmVzcygtY291bnQpCisgICAgICAgIHN1cGVyKEdpdFByb2dyZXNzSGFuZGxlciwgc2VsZikud3JpdGUoc3RyaW5nKQorCisKIGNsYXNzIEdpdChGZXRjaE1ldGhvZCk6CiAgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIGdpdCByZXBvc2l0b3JpZXMiIiIKICAgICBkZWYgaW5pdChzZWxmLCBkKToKQEAgLTExMSw2ICsxNTcsMTMgQEAKIAogICAgICAgICB1ZC5ub2JyYW5jaCA9IHVkLnBhcm0uZ2V0KCJub2JyYW5jaCIsIjAiKSA9PSAiMSIKIAorICAgICAgICAjIHVzZWhlYWQgaW1wbGllcyBub2JyYW5jaAorICAgICAgICB1ZC51c2VoZWFkID0gdWQucGFybS5nZXQoInVzZWhlYWQiLCIwIikgPT0gIjEiCisgICAgICAgIGlmIHVkLnVzZWhlYWQ6CisgICAgICAgICAgICBpZiB1ZC5wcm90byAhPSAiZmlsZSI6CisgICAgICAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigiVGhlIHVzZWhlYWQgb3B0aW9uIGlzIG9ubHkgZm9yIHVzZSB3aXRoIGxvY2FsICgncHJvdG9jb2w9ZmlsZScpIGdpdCByZXBvc2l0b3JpZXMiLCB1ZC51cmwpCisgICAgICAgICAgICB1ZC5ub2JyYW5jaCA9IDEKKwogICAgICAgICAjIGJhcmVjbG9uZSBpbXBsaWVzIG5vY2hlY2tvdXQKICAgICAgICAgdWQuYmFyZWNsb25lID0gdWQucGFybS5nZXQoImJhcmVjbG9uZSIsIjAiKSA9PSAiMSIKICAgICAgICAgaWYgdWQuYmFyZWNsb25lOgpAQCAtMTI2LDYgKzE3OSw5IEBACiAgICAgICAgICAgICB1ZC5icmFuY2hlc1tuYW1lXSA9IGJyYW5jaAogICAgICAgICAgICAgdWQudW5yZXNvbHZlZHJldltuYW1lXSA9IGJyYW5jaAogCisgICAgICAgIGlmIHVkLnVzZWhlYWQ6CisgICAgICAgICAgICB1ZC51bnJlc29sdmVkcmV2WydkZWZhdWx0J10gPSAnSEVBRCcKKwogICAgICAgICB1ZC5iYXNlY21kID0gZGF0YS5nZXRWYXIoIkZFVENIQ01EX2dpdCIsIGQsIFRydWUpIG9yICJnaXQgLWMgY29yZS5mc3luY29iamVjdGZpbGVzPTAiCiAKICAgICAgICAgdWQud3JpdGVfdGFyYmFsbHMgPSAoKGRhdGEuZ2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCBkLCBUcnVlKSBvciAiMCIpICE9ICIwIikgb3IgdWQucmViYXNlYWJsZQpAQCAtMTYzLDkgKzIxOSw4IEBACiAgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLmNsb25lZGlyKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQogICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbnRhaW5zX3JlZih1ZCwgZCwgbmFtZSwgdWQuY2xvbmVkaXIpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIHVkLndyaXRlX3RhcmJhbGxzIGFuZCBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtMTg2LDggKzI0MSw3IEBACiAgICAgICAgICMgSWYgdGhlIGNoZWNrb3V0IGRvZXNuJ3QgZXhpc3QgYW5kIHRoZSBtaXJyb3IgdGFyYmFsbCBkb2VzLCBleHRyYWN0IGl0CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5jbG9uZWRpcikgYW5kIG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpOgogICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLmNsb25lZGlyKQotICAgICAgICAgICAgb3MuY2hkaXIodWQuY2xvbmVkaXIpCi0gICAgICAgICAgICBydW5mZXRjaGNtZCgidGFyIC14emYgJXMiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCwgd29ya2Rpcj11ZC5jbG9uZWRpcikKIAogICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQogCkBAIC0xOTYsMzggKzI1MCwzOCBAQAogICAgICAgICAgICAgIyBXZSBkbyB0aGlzIHNpbmNlIGdpdCB3aWxsIHVzZSBhICItbCIgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZm9yIGxvY2FsIHVybHMgd2hlcmUgcG9zc2libGUKICAgICAgICAgICAgIGlmIHJlcG91cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgogICAgICAgICAgICAgICAgIHJlcG91cmwgPSByZXBvdXJsWzc6XQotICAgICAgICAgICAgY2xvbmVfY21kID0gIiVzIGNsb25lIC0tYmFyZSAtLW1pcnJvciAlcyAlcyIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCwgdWQuY2xvbmVkaXIpCisgICAgICAgICAgICBjbG9uZV9jbWQgPSAiTEFORz1DICVzIGNsb25lIC0tYmFyZSAtLW1pcnJvciAlcyAlcyAtLXByb2dyZXNzIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsLCB1ZC5jbG9uZWRpcikKICAgICAgICAgICAgIGlmIHVkLnByb3RvLmxvd2VyKCkgIT0gJ2ZpbGUnOgogICAgICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbG9uZV9jbWQpCi0gICAgICAgICAgICBydW5mZXRjaGNtZChjbG9uZV9jbWQsIGQpCisgICAgICAgICAgICBwcm9ncmVzc2hhbmRsZXIgPSBHaXRQcm9ncmVzc0hhbmRsZXIoZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGNsb25lX2NtZCwgZCwgbG9nPXByb2dyZXNzaGFuZGxlcikKIAotICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKICAgICAgICAgIyBVcGRhdGUgdGhlIGNoZWNrb3V0IGlmIG5lZWRlZAogICAgICAgICBuZWVkdXBkYXRlID0gRmFsc2UKICAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGFpbnNfcmVmKHVkLCBkLCBuYW1lKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUsIHVkLmNsb25lZGlyKToKICAgICAgICAgICAgICAgICBuZWVkdXBkYXRlID0gVHJ1ZQogICAgICAgICBpZiBuZWVkdXBkYXRlOgogICAgICAgICAgICAgdHJ5OiAKLSAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVtb3RlIHJtIG9yaWdpbiIgJSB1ZC5iYXNlY21kLCBkKSAKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVtb3RlIHJtIG9yaWdpbiIgJSB1ZC5iYXNlY21kLCBkLCB3b3JrZGlyPXVkLmNsb25lZGlyKQogICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTm8gT3JpZ2luIikKIAotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlbW90ZSBhZGQgLS1taXJyb3I9ZmV0Y2ggb3JpZ2luICVzIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsKSwgZCkKLSAgICAgICAgICAgIGZldGNoX2NtZCA9ICIlcyBmZXRjaCAtZiAtLXBydW5lICVzIHJlZnMvKjpyZWZzLyoiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVtb3RlIGFkZCAtLW1pcnJvcj1mZXRjaCBvcmlnaW4gJXMiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpLCBkLCB3b3JrZGlyPXVkLmNsb25lZGlyKQorICAgICAgICAgICAgZmV0Y2hfY21kID0gIkxBTkc9QyAlcyBmZXRjaCAtZiAtLXBydW5lIC0tcHJvZ3Jlc3MgJXMgcmVmcy8qOnJlZnMvKiIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCkKICAgICAgICAgICAgIGlmIHVkLnByb3RvLmxvd2VyKCkgIT0gJ2ZpbGUnOgogICAgICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBmZXRjaF9jbWQsIHVkLnVybCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKGZldGNoX2NtZCwgZCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwcnVuZS1wYWNrZWQiICUgdWQuYmFzZWNtZCwgZCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwYWNrLXJlZHVuZGFudCAtLWFsbCB8IHhhcmdzIC1yIHJtIiAlIHVkLmJhc2VjbWQsIGQpCisgICAgICAgICAgICBwcm9ncmVzc2hhbmRsZXIgPSBHaXRQcm9ncmVzc0hhbmRsZXIoZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGZldGNoX2NtZCwgZCwgbG9nPXByb2dyZXNzaGFuZGxlciwgd29ya2Rpcj11ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwcnVuZS1wYWNrZWQiICUgdWQuYmFzZWNtZCwgZCwgd29ya2Rpcj11ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwYWNrLXJlZHVuZGFudCAtLWFsbCB8IHhhcmdzIC1yIHJtIiAlIHVkLmJhc2VjbWQsIGQsIHdvcmtkaXI9dWQuY2xvbmVkaXIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKHVkLmZ1bGxtaXJyb3IpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgICAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgb3MuY2hkaXIodWQuY2xvbmVkaXIpCiAgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbnRhaW5zX3JlZih1ZCwgZCwgbmFtZSk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGFpbnNfcmVmKHVkLCBkLCBuYW1lLCB1ZC5jbG9uZWRpcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIlVuYWJsZSB0byBmaW5kIHJldmlzaW9uICVzIGluIGJyYW5jaCAlcyBldmVuIGZyb20gdXBzdHJlYW0iICUgKHVkLnJldmlzaW9uc1tuYW1lXSwgdWQuYnJhbmNoZXNbbmFtZV0pKQogCiAgICAgZGVmIGJ1aWxkX21pcnJvcl9kYXRhKHNlbGYsIHVkLCBkKToKQEAgLTIzNywxMCArMjkxLDkgQEAKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxtaXJyb3IpOgogICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQogCi0gICAgICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDcmVhdGluZyB0YXJiYWxsIG9mIGdpdCByZXBvc2l0b3J5IikKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQuZnVsbG1pcnJvciwgb3MucGF0aC5qb2luKCIuIikgKSwgZCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQuZnVsbG1pcnJvciwgb3MucGF0aC5qb2luKCIuIikgKSwgZCwgd29ya2Rpcj11ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlICh1ZC5mdWxsbWlycm9yKSwgZCwgd29ya2Rpcj11ZC5jbG9uZWRpcikKIAogICAgIGRlZiB1bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpOgogICAgICAgICAiIiIgdW5wYWNrIHRoZSBkb3dubG9hZGVkIHNyYyB0byBkZXN0ZGlyIiIiCkBAIC0yNjMsMjEgKzMxNiwyMSBAQAogICAgICAgICAgICAgY2xvbmVmbGFncyArPSAiIC0tbWlycm9yIgogCiAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjbG9uZSAlcyAlcy8gJXMiICUgKHVkLmJhc2VjbWQsIGNsb25lZmxhZ3MsIHVkLmNsb25lZGlyLCBkZXN0ZGlyKSwgZCkKLSAgICAgICAgb3MuY2hkaXIoZGVzdGRpcikKICAgICAgICAgcmVwb3VybCA9IHNlbGYuX2dldF9yZXBvX3VybCh1ZCkKLSAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAlcyIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCksIGQpCisgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZW1vdGUgc2V0LXVybCBvcmlnaW4gJXMiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpLCBkLCB3b3JrZGlyPWRlc3RkaXIpCiAgICAgICAgIGlmIG5vdCB1ZC5ub2NoZWNrb3V0OgogICAgICAgICAgICAgaWYgc3ViZGlyICE9ICIiOgotICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZWFkLXRyZWUgJXMlcyIgJSAodWQuYmFzZWNtZCwgdWQucmV2aXNpb25zW3VkLm5hbWVzWzBdXSwgcmVhZHBhdGhzcGVjKSwgZCkKLSAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2hlY2tvdXQtaW5kZXggLXEgLWYgLWEiICUgdWQuYmFzZWNtZCwgZCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVhZC10cmVlICVzJXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIHJlYWRwYXRoc3BlYyksIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Rpcj1kZXN0ZGlyKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dC1pbmRleCAtcSAtZiAtYSIgJSB1ZC5iYXNlY21kLCBkLCB3b3JrZGlyPWRlc3RkaXIpCiAgICAgICAgICAgICBlbGlmIG5vdCB1ZC5ub2JyYW5jaDoKICAgICAgICAgICAgICAgICBicmFuY2huYW1lID0gIHVkLmJyYW5jaGVzW3VkLm5hbWVzWzBdXQogICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dCAtQiAlcyAlcyIgJSAodWQuYmFzZWNtZCwgYnJhbmNobmFtZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0pLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0pLCBkLCB3b3JrZGlyPWRlc3RkaXIpCiAgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGJyYW5jaCAtLXNldC11cHN0cmVhbSAlcyBvcmlnaW4vJXMiICUgKHVkLmJhc2VjbWQsIGJyYW5jaG5hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2huYW1lKSwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2huYW1lKSwgZCwgd29ya2Rpcj1kZXN0ZGlyKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2hlY2tvdXQgJXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0pLCBkKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dCAlcyIgJSAodWQuYmFzZWNtZCwgdWQucmV2aXNpb25zW3VkLm5hbWVzWzBdXSksIGQsIHdvcmtkaXI9ZGVzdGRpcikKIAogICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yOTEsNyArMzQ0LDcgQEAKICAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgZGVmIF9jb250YWluc19yZWYoc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgIGRlZiBfY29udGFpbnNfcmVmKHNlbGYsIHVkLCBkLCBuYW1lLCB3ZCk6CiAgICAgICAgIGNtZCA9ICIiCiAgICAgICAgIGlmIHVkLm5vYnJhbmNoOgogICAgICAgICAgICAgY21kID0gIiVzIGxvZyAtLXByZXR0eT1vbmVsaW5lIC1uIDEgJXMgLS0gMj4gL2Rldi9udWxsIHwgd2MgLWwiICUgKApAQCAtMzAwLDcgKzM1Myw3IEBACiAgICAgICAgICAgICBjbWQgPSAgIiVzIGJyYW5jaCAtLWNvbnRhaW5zICVzIC0tbGlzdCAlcyAyPiAvZGV2L251bGwgfCB3YyAtbCIgJSAoCiAgICAgICAgICAgICAgICAgdWQuYmFzZWNtZCwgdWQucmV2aXNpb25zW25hbWVdLCB1ZC5icmFuY2hlc1tuYW1lXSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoY21kLCBkLCBxdWlldD1UcnVlKQorICAgICAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoY21kLCBkLCBxdWlldD1UcnVlLCB3b3JrZGlyPXdkKQogICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgaWYgbGVuKG91dHB1dC5zcGxpdCgpKSA+IDE6CkBAIC0zNDMsMTYgKzM5NiwxNyBAQAogICAgICAgICAiIiIKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fbHNyZW1vdGUodWQsIGQsICIiKQogICAgICAgICAjIFRhZ3Mgb2YgdGhlIGZvcm0gXnt9IG1heSBub3Qgd29yaywgbmVlZCB0byBmYWxsYmFjayB0byBvdGhlciBmb3JtCi0gICAgICAgIGlmIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV1bOjVdID09ICJyZWZzLyI6CisgICAgICAgIGlmIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV1bOjVdID09ICJyZWZzLyIgb3IgdWQudXNlaGVhZDoKICAgICAgICAgICAgIGhlYWQgPSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCiAgICAgICAgICAgICB0YWcgPSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBoZWFkID0gInJlZnMvaGVhZHMvJXMiICUgdWQudW5yZXNvbHZlZHJldltuYW1lXQogICAgICAgICAgICAgdGFnID0gInJlZnMvdGFncy8lcyIgJSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCiAgICAgICAgIGZvciBzIGluIFtoZWFkLCB0YWcgKyAiXnt9IiwgdGFnXToKLSAgICAgICAgICAgIGZvciBsIGluIG91dHB1dC5zcGxpdCgnXG4nKToKLSAgICAgICAgICAgICAgICBpZiBzIGluIGw6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsLnNwbGl0KClbMF0KKyAgICAgICAgICAgIGZvciBsIGluIG91dHB1dC5zdHJpcCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHNoYTEsIHJlZiA9IGwuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIHMgPT0gcmVmOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hhMQogICAgICAgICByYWlzZSBiYi5mZXRjaDIuRmV0Y2hFcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyBpbiB1cHN0cmVhbSBnaXQgcmVwb3NpdG9yeSBpbiBnaXQgbHMtcmVtb3RlIG91dHB1dCBmb3IgJXMiICUgXAogICAgICAgICAgICAgKHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0sIHVkLmhvc3QrdWQucGF0aCkpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdGFubmV4LnB5CmluZGV4IDBmMzc4OTcuLjQ5MzdhMTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRhbm5leC5weQpAQCAtMzQsNDMgKzM0LDQyIEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2dpdGFubmV4J10KIAotICAgIGRlZiB1c2VzX2FubmV4KHNlbGYsIHVkLCBkKToKKyAgICBkZWYgdXNlc19hbm5leChzZWxmLCB1ZCwgZCwgd2QpOgogICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmV2LWxpc3QgZ2l0LWFubmV4IiAlICh1ZC5iYXNlY21kKSwgZCwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmV2LWxpc3QgZ2l0LWFubmV4IiAlICh1ZC5iYXNlY21kKSwgZCwgcXVpZXQ9VHJ1ZSwgd29ya2Rpcj13ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoLkZldGNoRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIHVwZGF0ZV9hbm5leChzZWxmLCB1ZCwgZCk6CisgICAgZGVmIHVwZGF0ZV9hbm5leChzZWxmLCB1ZCwgZCwgd2QpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYW5uZXggZ2V0IC0tYWxsIiAlICh1ZC5iYXNlY21kKSwgZCwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhbm5leCBnZXQgLS1hbGwiICUgKHVkLmJhc2VjbWQpLCBkLCBxdWlldD1UcnVlLCB3b3JrZGlyPXdkKQogICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBydW5mZXRjaGNtZCgiY2htb2QgdSt3IC1SICVzL2FubmV4IiAlICh1ZC5jbG9uZWRpciksIGQsIHF1aWV0PVRydWUpCisgICAgICAgIHJ1bmZldGNoY21kKCJjaG1vZCB1K3cgLVIgJXMvYW5uZXgiICUgKHVkLmNsb25lZGlyKSwgZCwgcXVpZXQ9VHJ1ZSwgd29ya2Rpcj13ZCkKIAogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKICAgICAgICAgR2l0LmRvd25sb2FkKHNlbGYsIHVkLCBkKQogCi0gICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQotICAgICAgICBhbm5leCA9IHNlbGYudXNlc19hbm5leCh1ZCwgZCkKKyAgICAgICAgYW5uZXggPSBzZWxmLnVzZXNfYW5uZXgodWQsIGQsIHVkLmNsb25lZGlyKQogICAgICAgICBpZiBhbm5leDoKLSAgICAgICAgICAgIHNlbGYudXBkYXRlX2FubmV4KHVkLCBkKQorICAgICAgICAgICAgc2VsZi51cGRhdGVfYW5uZXgodWQsIGQsIHVkLmNsb25lZGlyKQogCiAgICAgZGVmIHVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCk6CiAgICAgICAgIEdpdC51bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpCiAKLSAgICAgICAgb3MuY2hkaXIodWQuZGVzdGRpcikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IHN5bmMiICUgKHVkLmJhc2VjbWQpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IGluaXQiICUgKHVkLmJhc2VjbWQpLCBkLCB3b3JrZGlyPXVkLmRlc3RkaXIpCiAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5GZXRjaEVycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGFubmV4ID0gc2VsZi51c2VzX2FubmV4KHVkLCBkKQorICAgICAgICBhbm5leCA9IHNlbGYudXNlc19hbm5leCh1ZCwgZCwgdWQuZGVzdGRpcikKICAgICAgICAgaWYgYW5uZXg6Ci0gICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYW5uZXggZ2V0IiAlICh1ZC5iYXNlY21kKSwgZCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKCJjaG1vZCB1K3cgLVIgJXMvLmdpdC9hbm5leCIgJSAodWQuZGVzdGRpciksIGQsIHF1aWV0PVRydWUpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYW5uZXggZ2V0IiAlICh1ZC5iYXNlY21kKSwgZCwgd29ya2Rpcj11ZC5kZXN0ZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoImNobW9kIHUrdyAtUiAlcy8uZ2l0L2FubmV4IiAlICh1ZC5kZXN0ZGlyKSwgZCwgcXVpZXQ9VHJ1ZSwgd29ya2Rpcj11ZC5kZXN0ZGlyKQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRzbS5weQppbmRleCA3NTJmMWQzLi42NjEzNzYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkKQEAgLTQzLDEwICs0MywxMCBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydnaXRzbSddCiAKLSAgICBkZWYgdXNlc19zdWJtb2R1bGVzKHNlbGYsIHVkLCBkKToKKyAgICBkZWYgdXNlc19zdWJtb2R1bGVzKHNlbGYsIHVkLCBkLCB3ZCk6CiAgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBzaG93ICVzOi5naXRtb2R1bGVzIiAlICh1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbbmFtZV0pLCBkLCBxdWlldD1UcnVlKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBzaG93ICVzOi5naXRtb2R1bGVzIiAlICh1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbbmFtZV0pLCBkLCBxdWlldD1UcnVlLCB3b3JrZGlyPXdkKQogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCkBAIC0xMDcsMjggKzEwNywyNSBAQAogICAgICAgICBvcy5ta2Rpcih0bXBjbG9uZWRpcikKICAgICAgICAgb3MucmVuYW1lKHVkLmNsb25lZGlyLCBnaXRkaXIpCiAgICAgICAgIHJ1bmZldGNoY21kKCJzZWQgIiArIGdpdGRpciArICIvY29uZmlnIC1pIC1lICdzL2JhcmUuKj0uKnRydWUvYmFyZSA9IGZhbHNlLyciLCBkKQotICAgICAgICBvcy5jaGRpcih0bXBjbG9uZWRpcikKLSAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgcmVzZXQgLS1oYXJkIiwgZCkKLSAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgY2hlY2tvdXQgIiArIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIGQpCi0gICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIiwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgcmVzZXQgLS1oYXJkIiwgZCwgd29ya2Rpcj10bXBjbG9uZWRpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgY2hlY2tvdXQgIiArIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIGQsIHdvcmtkaXI9dG1wY2xvbmVkaXIpCisgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIiwgZCwgd29ya2Rpcj10bXBjbG9uZWRpcikKICAgICAgICAgc2VsZi5fc2V0X3JlbGF0aXZlX3BhdGhzKHRtcGNsb25lZGlyKQotICAgICAgICBydW5mZXRjaGNtZCgic2VkICIgKyBnaXRkaXIgKyAiL2NvbmZpZyAtaSAtZSAncy9iYXJlLio9LipmYWxzZS9iYXJlID0gdHJ1ZS8nIiwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQoInNlZCAiICsgZ2l0ZGlyICsgIi9jb25maWcgLWkgLWUgJ3MvYmFyZS4qPS4qZmFsc2UvYmFyZSA9IHRydWUvJyIsIGQsIHdvcmtkaXI9dG1wY2xvbmVkaXIpCiAgICAgICAgIG9zLnJlbmFtZShnaXRkaXIsIHVkLmNsb25lZGlyLCkKICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRtcGNsb25lZGlyLCBUcnVlKQogCiAgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKICAgICAgICAgR2l0LmRvd25sb2FkKHNlbGYsIHVkLCBkKQogCi0gICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQotICAgICAgICBzdWJtb2R1bGVzID0gc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQpCisgICAgICAgIHN1Ym1vZHVsZXMgPSBzZWxmLnVzZXNfc3VibW9kdWxlcyh1ZCwgZCwgdWQuY2xvbmVkaXIpCiAgICAgICAgIGlmIHN1Ym1vZHVsZXM6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdWJtb2R1bGVzKHVkLCBkKQogCiAgICAgZGVmIHVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCk6CiAgICAgICAgIEdpdC51bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpCiAgICAgICAgIAotICAgICAgICBvcy5jaGRpcih1ZC5kZXN0ZGlyKQotICAgICAgICBzdWJtb2R1bGVzID0gc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQpCisgICAgICAgIHN1Ym1vZHVsZXMgPSBzZWxmLnVzZXNfc3VibW9kdWxlcyh1ZCwgZCwgdWQuZGVzdGRpcikKICAgICAgICAgaWYgc3VibW9kdWxlczoKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIGNoZWNrb3V0ICIgKyB1ZC5yZXZpc2lvbnNbdWQubmFtZXNbMF1dLCBkKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUiLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgY2hlY2tvdXQgIiArIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIGQsIHdvcmtkaXI9dWQuZGVzdGRpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIiwgZCwgd29ya2Rpcj11ZC5kZXN0ZGlyKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkKaW5kZXggM2I3NDNmZi4uMjBkZjgwMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2hnLnB5CkBAIC0xNjksMjUgKzE2OSwyMiBAQAogICAgICAgICAjIElmIHRoZSBjaGVja291dCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgbWlycm9yIHRhcmJhbGwgZG9lcywgZXh0cmFjdCBpdAogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQucGtnZGlyKSBhbmQgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CiAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQotICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLXh6ZiAlcyIgJSAodWQuZnVsbG1pcnJvciksIGQsIHdvcmtkaXI9dWQucGtnZGlyKQogCiAgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odWQubW9kZGlyLCAnLmhnJyksIG9zLlJfT0spOgogICAgICAgICAgICAgIyBGb3VuZCB0aGUgc291cmNlLCBjaGVjayB3aGV0aGVyIG5lZWQgcHVsbAogICAgICAgICAgICAgdXBkYXRlY21kID0gc2VsZi5fYnVpbGRoZ2NvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQotICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgdXBkYXRlY21kKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKHVwZGF0ZWNtZCwgZCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCh1cGRhdGVjbWQsIGQsIHdvcmtkaXI9dWQubW9kZGlyKQogICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgogICAgICAgICAgICAgICAgICMgUnVubm5pbmcgcHVsbCBpbiB0aGUgcmVwbwogICAgICAgICAgICAgICAgIHB1bGxjbWQgPSBzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgInB1bGwiKQogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJQdWxsaW5nICIgKyB1ZC51cmwpCiAgICAgICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBwdWxsY21kKQogICAgICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBwdWxsY21kLCB1ZC51cmwpCi0gICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQocHVsbGNtZCwgZCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZChwdWxsY21kLCBkLCB3b3JrZGlyPXVkLm1vZGRpcikKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKQEAgLTIwMCwxNyArMTk3LDE1IEBACiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKICAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCi0gICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBmZXRjaGNtZCkKICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBmZXRjaGNtZCwgdWQudXJsKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoZmV0Y2hjbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZChmZXRjaGNtZCwgZCwgd29ya2Rpcj11ZC5wa2dkaXIpCiAKICAgICAgICAgIyBFdmVuIHdoZW4gd2UgY2xvbmUgKGZldGNoKSwgd2Ugc3RpbGwgbmVlZCB0byB1cGRhdGUgYXMgaGcncyBjbG9uZQogICAgICAgICAjIHdvbid0IGNoZWNrb3V0IHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gaWYgaXRzIG9uIGEgYnJhbmNoCiAgICAgICAgIHVwZGF0ZWNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAidXBkYXRlIikKLSAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQogICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCB1cGRhdGVjbWQpCi0gICAgICAgIHJ1bmZldGNoY21kKHVwZGF0ZWNtZCwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodXBkYXRlY21kLCBkLCB3b3JrZGlyPXVkLm1vZGRpcikKIAogICAgIGRlZiBjbGVhbihzZWxmLCB1ZCwgZCk6CiAgICAgICAgICIiIiBDbGVhbiB0aGUgaGcgZGlyICIiIgpAQCAtMjQ2LDEwICsyNDEsOSBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsodWQuZnVsbG1pcnJvcik6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKHVkLmZ1bGxtaXJyb3IpCiAKLSAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDcmVhdGluZyB0YXJiYWxsIG9mIGhnIHJlcG9zaXRvcnkiKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5mdWxsbWlycm9yLCB1ZC5tb2R1bGUpLCBkKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRvdWNoICVzLmRvbmUiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5mdWxsbWlycm9yLCB1ZC5tb2R1bGUpLCBkLCB3b3JrZGlyPXVkLnBrZ2RpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlICh1ZC5mdWxsbWlycm9yKSwgZCwgd29ya2Rpcj11ZC5wa2dkaXIpCiAKICAgICBkZWYgbG9jYWxwYXRoKHNlbGYsIHVkLCBkKToKICAgICAgICAgcmV0dXJuIHVkLnBrZ2RpcgpAQCAtMjY5LDEwICsyNjMsOCBAQAogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiBjcmVhdGluZyBuZXcgaGcgcmVwb3NpdG9yeSBpbiAnIiArIGNvZGlyICsgIiciKQogICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBpbml0ICVzIiAlICh1ZC5iYXNlY21kLCBjb2RpciksIGQpCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlVucGFjazogdXBkYXRpbmcgc291cmNlIGluICciICsgY29kaXIgKyAiJyIpCi0gICAgICAgICAgICBvcy5jaGRpcihjb2RpcikKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwdWxsICVzIiAlICh1ZC5iYXNlY21kLCB1ZC5tb2RkaXIpLCBkKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHVwIC1DICVzIiAlICh1ZC5iYXNlY21kLCByZXZmbGFnKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwdWxsICVzIiAlICh1ZC5iYXNlY21kLCB1ZC5tb2RkaXIpLCBkLCB3b3JrZGlyPWNvZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHVwIC1DICVzIiAlICh1ZC5iYXNlY21kLCByZXZmbGFnKSwgZCwgd29ya2Rpcj1jb2RpcikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiBleHRyYWN0aW5nIHNvdXJjZSB0byAnIiArIGNvZGlyICsgIiciKQotICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFyY2hpdmUgLXQgZmlsZXMgJXMgJXMiICUgKHVkLmJhc2VjbWQsIHJldmZsYWcsIGNvZGlyKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhcmNoaXZlIC10IGZpbGVzICVzICVzIiAlICh1ZC5iYXNlY21kLCByZXZmbGFnLCBjb2RpciksIGQsIHdvcmtkaXI9dWQubW9kZGlyKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9sb2NhbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvbG9jYWwucHkKaW5kZXggMzAzYTUyYi4uNTFjYTc4ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9sb2NhbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2xvY2FsLnB5CkBAIC0yNiw3ICsyNiw3IEBACiAjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKIAogaW1wb3J0IG9zCi1pbXBvcnQgdXJsbGliCitpbXBvcnQgdXJsbGliLnJlcXVlc3QsIHVybGxpYi5wYXJzZSwgdXJsbGliLmVycm9yCiBpbXBvcnQgYmIKIGltcG9ydCBiYi51dGlscwogZnJvbSAgIGJiIGltcG9ydCBkYXRhCkBAIC00Miw3ICs0Miw3IEBACiAKICAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKICAgICAgICAgIyBXZSBkb24ndCBzZXQgbG9jYWxmaWxlIGFzIGZvciB0aGlzIGZldGNoZXIgdGhlIGZpbGUgaXMgYWxyZWFkeSBsb2NhbCEKLSAgICAgICAgdWQuZGVjb2RlZHVybCA9IHVybGxpYi51bnF1b3RlKHVkLnVybC5zcGxpdCgiOi8vIilbMV0uc3BsaXQoIjsiKVswXSkKKyAgICAgICAgdWQuZGVjb2RlZHVybCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHVkLnVybC5zcGxpdCgiOi8vIilbMV0uc3BsaXQoIjsiKVswXSkKICAgICAgICAgdWQuYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLmRlY29kZWR1cmwpCiAgICAgICAgIHVkLmJhc2VwYXRoID0gdWQuZGVjb2RlZHVybAogICAgICAgICB1ZC5uZWVkZG9uZXN0YW1wID0gRmFsc2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvbnBtLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ucG0ucHkKaW5kZXggZThkOWIxMS4uNjk5YWU3MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ucG0ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ucG0ucHkKQEAgLTEzLDE0ICsxMywxNCBAQAogICAgIC0gbmFtZQogICAgIC0gdmVyc2lvbgogCi0gICAgbnBtOi8vcmVnaXN0cnkubnBtanMub3JnLyR7UE59Ly0vJHtQTn0tJHtQVn0udGd6ICB3b3VsZCBiZWNvbWUgbnBtOi8vcmVnaXN0cnkubnBtanMub3JnO25hbWU9JHtQTn07dmVyPSR7UFZ9CisgICAgbnBtOi8vcmVnaXN0cnkubnBtanMub3JnLyR7UE59Ly0vJHtQTn0tJHtQVn0udGd6ICB3b3VsZCBiZWNvbWUgbnBtOi8vcmVnaXN0cnkubnBtanMub3JnO25hbWU9JHtQTn07dmVyc2lvbj0ke1BWfQogICAgIFRoZSBmZXRjaGVyIGFsbCB0cmlnZ2VycyBvZmYgdGhlIGV4aXN0ZW5jZSBvZiB1ZC5sb2NhbHBhdGguIElmIHRoYXQgZXhpc3RzIGFuZCBoYXMgdGhlICIuZG9uZSIgc3RhbXAsIGl0cyBhc3N1bWVkIHRoZSBmZXRjaCBpcyBnb29kL2RvbmUKIAogIiIiCiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IHVybGxpYgoraW1wb3J0IHVybGxpYi5yZXF1ZXN0LCB1cmxsaWIucGFyc2UsIHVybGxpYi5lcnJvcgogaW1wb3J0IGpzb24KIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc2lnbmFsCkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgIHVkLmxvY2FscGF0aCA9IGQuZXhwYW5kKCIke0RMX0RJUn0vbnBtLyVzIiAlIHVkLmJibnBtbWFuaWZlc3QpCiAKICAgICAgICAgc2VsZi5iYXNlY21kID0gZC5nZXRWYXIoIkZFVENIQ01EX3dnZXQiLCBUcnVlKSBvciAiL3Vzci9iaW4vZW52IHdnZXQgLU8gLXQgMiAtVCAzMCAtbnYgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlICIKLSAgICAgICAgc2VsZi5iYXNlY21kICs9ICIgLS1kaXJlY3RvcnktcHJlZml4PSVzICIgJSBwcmVmaXhkaXIKKyAgICAgICAgdWQucHJlZml4ZGlyID0gcHJlZml4ZGlyCiAKICAgICAgICAgdWQud3JpdGVfdGFyYmFsbHMgPSAoKGRhdGEuZ2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCBkLCBUcnVlKSBvciAiMCIpICE9ICIwIikKICAgICAgICAgdWQubWlycm9ydGFyYmFsbCA9ICducG1fJXMtJXMudGFyLnh6JyAlICh1ZC5wa2duYW1lLCB1ZC52ZXJzaW9uKQpAQCAtMTAyLDcgKzEwMiw4IEBACiAgICAgZGVmIF9ydW53Z2V0KHNlbGYsIHVkLCBkLCBjb21tYW5kLCBxdWlldCk6CiAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2hpbmcgJXMgdXNpbmcgY29tbWFuZCAnJXMnIiAlICh1ZC51cmwsIGNvbW1hbmQpKQogICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY29tbWFuZCkKLSAgICAgICAgcnVuZmV0Y2hjbWQoY29tbWFuZCwgZCwgcXVpZXQpCisgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgIHJ1bmZldGNoY21kKGNvbW1hbmQsIGQsIHF1aWV0LCB3b3JrZGlyPWRsZGlyKQogCiAgICAgZGVmIF91bnBhY2tkZXAoc2VsZiwgdWQsIHBrZywgZGF0YSwgZGVzdGRpciwgZGxkaXIsIGQpOgogICAgICAgICBmaWxlID0gZGF0YVtwa2ddWyd0Z3onXQpAQCAtMTEzLDE2ICsxMTQsMTMgQEAKICAgICAgICAgICAgIGJiLmZhdGFsKCJOUE0gcGFja2FnZSAlcyBkb3dubG9hZGVkIG5vdCBhIHRhcmJhbGwhIiAlIGZpbGUpCiAKICAgICAgICAgIyBDaGFuZ2UgdG8gc3ViZGlyIGJlZm9yZSBleGVjdXRpbmcgY29tbWFuZAotICAgICAgICBzYXZlX2N3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0ZGlyKToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRlc3RkaXIpCi0gICAgICAgIG9zLmNoZGlyKGRlc3RkaXIpCiAgICAgICAgIHBhdGggPSBkLmdldFZhcignUEFUSCcsIFRydWUpCiAgICAgICAgIGlmIHBhdGg6CiAgICAgICAgICAgICBjbWQgPSAiUEFUSD1cIiVzXCIgJXMiICUgKHBhdGgsIGNtZCkKLSAgICAgICAgYmIubm90ZSgiVW5wYWNraW5nICVzIHRvICVzLyIgJSAoZmlsZSwgb3MuZ2V0Y3dkKCkpKQotICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBwcmVleGVjX2ZuPXN1YnByb2Nlc3Nfc2V0dXAsIHNoZWxsPVRydWUpCi0gICAgICAgIG9zLmNoZGlyKHNhdmVfY3dkKQorICAgICAgICBiYi5ub3RlKCJVbnBhY2tpbmcgJXMgdG8gJXMvIiAlIChmaWxlLCBkZXN0ZGlyKSkKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgcHJlZXhlY19mbj1zdWJwcm9jZXNzX3NldHVwLCBzaGVsbD1UcnVlLCBjd2Q9ZGVzdGRpcikKIAogICAgICAgICBpZiByZXQgIT0gMDoKICAgICAgICAgICAgIHJhaXNlIFVucGFja0Vycm9yKCJVbnBhY2sgY29tbWFuZCAlcyBmYWlsZWQgd2l0aCByZXR1cm4gdmFsdWUgJXMiICUgKGNtZCwgcmV0KSwgdWQudXJsKQpAQCAtMTQwLDcgKzEzOCwxMiBAQAogICAgICAgICAgICAgd29ya29iaiA9IGpzb24ubG9hZChkYXRhZmlsZSkKICAgICAgICAgZGxkaXIgPSAiJXMvJXMiICUgKG9zLnBhdGguZGlybmFtZSh1ZC5sb2NhbHBhdGgpLCB1ZC5wa2duYW1lKQogCi0gICAgICAgIHNlbGYuX3VucGFja2RlcCh1ZCwgdWQucGtnbmFtZSwgd29ya29iaiwgICIlcy9ucG1wa2ciICUgZGVzdGRpciwgZGxkaXIsIGQpCisgICAgICAgIGlmICdzdWJkaXInIGluIHVkLnBhcm06CisgICAgICAgICAgICB1bnBhY2tkaXIgPSAnJXMvJXMnICUgKGRlc3RkaXIsIHVkLnBhcm0uZ2V0KCdzdWJkaXInKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVucGFja2RpciA9ICclcy9ucG1wa2cnICUgZGVzdGRpcgorCisgICAgICAgIHNlbGYuX3VucGFja2RlcCh1ZCwgdWQucGtnbmFtZSwgd29ya29iaiwgdW5wYWNrZGlyLCBkbGRpciwgZCkKIAogICAgIGRlZiBfcGFyc2VfdmlldyhzZWxmLCBvdXRwdXQpOgogICAgICAgICAnJycKQEAgLTE2Miw3ICsxNjUsOSBAQAogICAgICAgICAgICAgcGRhdGEgPSBqc29uLmxvYWRzKCdcbicuam9pbihkYXRhbGluZXMpKQogICAgICAgICByZXR1cm4gcGRhdGEKIAotICAgIGRlZiBfZ2V0ZGVwZW5kZW5jaWVzKHNlbGYsIHBrZywgZGF0YSwgdmVyc2lvbiwgZCwgdWQsIG9wdGlvbmFsPUZhbHNlKToKKyAgICBkZWYgX2dldGRlcGVuZGVuY2llcyhzZWxmLCBwa2csIGRhdGEsIHZlcnNpb24sIGQsIHVkLCBvcHRpb25hbD1GYWxzZSwgZmV0Y2hlZGxpc3Q9Tm9uZSk6CisgICAgICAgIGlmIGZldGNoZWRsaXN0IGlzIE5vbmU6CisgICAgICAgICAgICBmZXRjaGVkbGlzdCA9IFtdCiAgICAgICAgIHBrZ2Z1bGxuYW1lID0gcGtnCiAgICAgICAgIGlmIHZlcnNpb24gIT0gJyonIGFuZCBub3QgJy8nIGluIHZlcnNpb246CiAgICAgICAgICAgICBwa2dmdWxsbmFtZSArPSAiQCclcyciICUgdmVyc2lvbgpAQCAtMTg0LDcgKzE4OSw5IEBACiAgICAgICAgIG91dHB1dHVybCA9IHBkYXRhWydkaXN0J11bJ3RhcmJhbGwnXQogICAgICAgICBkYXRhW3BrZ10gPSB7fQogICAgICAgICBkYXRhW3BrZ11bJ3RneiddID0gb3MucGF0aC5iYXNlbmFtZShvdXRwdXR1cmwpCi0gICAgICAgIHNlbGYuX3J1bndnZXQodWQsIGQsICIlcyAlcyIgJSAoc2VsZi5iYXNlY21kLCBvdXRwdXR1cmwpLCBGYWxzZSkKKyAgICAgICAgaWYgbm90IG91dHB1dHVybCBpbiBmZXRjaGVkbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3J1bndnZXQodWQsIGQsICIlcyAtLWRpcmVjdG9yeS1wcmVmaXg9JXMgJXMiICUgKHNlbGYuYmFzZWNtZCwgdWQucHJlZml4ZGlyLCBvdXRwdXR1cmwpLCBGYWxzZSkKKyAgICAgICAgICAgIGZldGNoZWRsaXN0LmFwcGVuZChvdXRwdXR1cmwpCiAKICAgICAgICAgZGVwZW5kZW5jaWVzID0gcGRhdGEuZ2V0KCdkZXBlbmRlbmNpZXMnLCB7fSkKICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXMgPSBwZGF0YS5nZXQoJ29wdGlvbmFsRGVwZW5kZW5jaWVzJywge30pCkBAIC0xOTYsMTMgKzIwMywyMCBAQAogICAgICAgICAgICAgICAgIG9wdGRlcHNmb3VuZFtkZXBdID0gZGVwZW5kZW5jaWVzW2RlcF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGVwc2ZvdW5kW2RlcF0gPSBkZXBlbmRlbmNpZXNbZGVwXQotICAgICAgICBmb3IgZGVwLCB2ZXJzaW9uIGluIG9wdGRlcHNmb3VuZC5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuX2dldGRlcGVuZGVuY2llcyhkZXAsIGRhdGFbcGtnXVsnZGVwcyddLCB2ZXJzaW9uLCBkLCB1ZCwgb3B0aW9uYWw9VHJ1ZSkKLSAgICAgICAgZm9yIGRlcCwgdmVyc2lvbiBpbiBkZXBzZm91bmQuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9nZXRkZXBlbmRlbmNpZXMoZGVwLCBkYXRhW3BrZ11bJ2RlcHMnXSwgdmVyc2lvbiwgZCwgdWQpCisgICAgICAgIGZvciBkZXAsIHZlcnNpb24gaW4gb3B0ZGVwc2ZvdW5kLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLl9nZXRkZXBlbmRlbmNpZXMoZGVwLCBkYXRhW3BrZ11bJ2RlcHMnXSwgdmVyc2lvbiwgZCwgdWQsIG9wdGlvbmFsPVRydWUsIGZldGNoZWRsaXN0PWZldGNoZWRsaXN0KQorICAgICAgICBmb3IgZGVwLCB2ZXJzaW9uIGluIGRlcHNmb3VuZC5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5fZ2V0ZGVwZW5kZW5jaWVzKGRlcCwgZGF0YVtwa2ddWydkZXBzJ10sIHZlcnNpb24sIGQsIHVkLCBmZXRjaGVkbGlzdD1mZXRjaGVkbGlzdCkKIAotICAgIGRlZiBfZ2V0c2hyaW5rZWRkZXBlbmRlbmNpZXMoc2VsZiwgcGtnLCBkYXRhLCB2ZXJzaW9uLCBkLCB1ZCwgbG9ja2Rvd24sIG1hbmlmZXN0KToKKyAgICBkZWYgX2dldHNocmlua2VkZGVwZW5kZW5jaWVzKHNlbGYsIHBrZywgZGF0YSwgdmVyc2lvbiwgZCwgdWQsIGxvY2tkb3duLCBtYW5pZmVzdCwgdG9wbGV2ZWw9VHJ1ZSk6CiAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiTlBNIHNocmlua3dyYXAgZmlsZSBpcyAlcyIgJSBkYXRhKQorICAgICAgICBpZiB0b3BsZXZlbDoKKyAgICAgICAgICAgIG5hbWUgPSBkYXRhLmdldCgnbmFtZScsIE5vbmUpCisgICAgICAgICAgICBpZiBuYW1lIGFuZCBuYW1lICE9IHBrZzoKKyAgICAgICAgICAgICAgICBmb3Igb2JqIGluIGRhdGEuZ2V0KCdkZXBlbmRlbmNpZXMnLCBbXSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG9iaiA9PSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRzaHJpbmtlZGRlcGVuZGVuY2llcyhvYmosIGRhdGFbJ2RlcGVuZGVuY2llcyddW29ial0sIGRhdGFbJ2RlcGVuZGVuY2llcyddW29ial1bJ3ZlcnNpb24nXSwgZCwgdWQsIGxvY2tkb3duLCBtYW5pZmVzdCwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgb3V0cHV0dXJsID0gImludmFsaWQiCiAgICAgICAgIGlmICgncmVzb2x2ZWQnIG5vdCBpbiBkYXRhKSBvciAobm90IGRhdGFbJ3Jlc29sdmVkJ10uc3RhcnRzd2l0aCgnaHR0cCcpKToKICAgICAgICAgICAgICMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgJHtQTn0KQEAgLTIxMSw3ICsyMjUsNyBAQAogICAgICAgICAgICAgb3V0cHV0dXJsID0gcnVuZmV0Y2hjbWQoZmV0Y2hjbWQsIGQsIFRydWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvdXRwdXR1cmwgPSBkYXRhWydyZXNvbHZlZCddCi0gICAgICAgIHNlbGYuX3J1bndnZXQodWQsIGQsICIlcyAlcyIgJSAoc2VsZi5iYXNlY21kLCBvdXRwdXR1cmwpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5fcnVud2dldCh1ZCwgZCwgIiVzIC0tZGlyZWN0b3J5LXByZWZpeD0lcyAlcyIgJSAoc2VsZi5iYXNlY21kLCB1ZC5wcmVmaXhkaXIsIG91dHB1dHVybCksIEZhbHNlKQogICAgICAgICBtYW5pZmVzdFtwa2ddID0ge30KICAgICAgICAgbWFuaWZlc3RbcGtnXVsndGd6J10gPSBvcy5wYXRoLmJhc2VuYW1lKG91dHB1dHVybCkucnN0cmlwKCkKICAgICAgICAgbWFuaWZlc3RbcGtnXVsnZGVwcyddID0ge30KQEAgLTIyOCw3ICsyNDIsNyBAQAogICAgICAgICBpZiAnZGVwZW5kZW5jaWVzJyBpbiBkYXRhOgogICAgICAgICAgICAgZm9yIG9iaiBpbiBkYXRhWydkZXBlbmRlbmNpZXMnXToKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZvdW5kIGRlcCBpcyAlcyIgJSBzdHIob2JqKSkKLSAgICAgICAgICAgICAgICBzZWxmLl9nZXRzaHJpbmtlZGRlcGVuZGVuY2llcyhvYmosIGRhdGFbJ2RlcGVuZGVuY2llcyddW29ial0sIGRhdGFbJ2RlcGVuZGVuY2llcyddW29ial1bJ3ZlcnNpb24nXSwgZCwgdWQsIGxvY2tkb3duLCBtYW5pZmVzdFtwa2ddWydkZXBzJ10pCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0c2hyaW5rZWRkZXBlbmRlbmNpZXMob2JqLCBkYXRhWydkZXBlbmRlbmNpZXMnXVtvYmpdLCBkYXRhWydkZXBlbmRlbmNpZXMnXVtvYmpdWyd2ZXJzaW9uJ10sIGQsIHVkLCBsb2NrZG93biwgbWFuaWZlc3RbcGtnXVsnZGVwcyddLCBGYWxzZSkKIAogICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CiAgICAgICAgICIiIkZldGNoIHVybCIiIgpAQCAtMjM5LDEwICsyNTMsNyBAQAogICAgICAgICBpZiBub3Qgb3MubGlzdGRpcih1ZC5wa2dkYXRhZGlyKSBhbmQgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CiAgICAgICAgICAgICBkZXN0ID0gZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCiAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdCkKLSAgICAgICAgICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIG9zLmNoZGlyKGRlc3QpCi0gICAgICAgICAgICBydW5mZXRjaGNtZCgidGFyIC14SmYgJXMiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQotICAgICAgICAgICAgb3MuY2hkaXIoc2F2ZV9jd2QpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgidGFyIC14SmYgJXMiICUgKHVkLmZ1bGxtaXJyb3IpLCBkLCB3b3JrZGlyPWRlc3QpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBzaHdyZiA9IGQuZ2V0VmFyKCdOUE1fU0hSSU5LV1JBUCcsIFRydWUpCkBAIC0yNTEsMTQgKzI2MiwxNCBAQAogICAgICAgICAgICAgd2l0aCBvcGVuKHNod3JmKSBhcyBkYXRhZmlsZToKICAgICAgICAgICAgICAgICBzaHJpbmtvYmogPSBqc29uLmxvYWQoZGF0YWZpbGUpCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIHNocmlua3dyYXAgZmlsZSBpbiBOUE1fU0hSSU5LV1JBUCBmb3IgJXMsIHRoaXMgd2lsbCBsZWFkIHRvIHVucmVsaWFibGUgYnVpbGRzIScgJSB1ZC5wa2duYW1lKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ01pc3Npbmcgc2hyaW5rd3JhcCBmaWxlIGluIE5QTV9TSFJJTktXUkFQIGZvciAlcywgdGhpcyB3aWxsIGxlYWQgdG8gdW5yZWxpYWJsZSBidWlsZHMhJyAlIHVkLnBrZ25hbWUpCiAgICAgICAgIGxja2RmID0gZC5nZXRWYXIoJ05QTV9MT0NLRE9XTicsIFRydWUpCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiTlBNIGxvY2tkb3duIGZpbGUgaXMgJXMiICUgbGNrZGYpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggb3BlbihsY2tkZikgYXMgZGF0YWZpbGU6CiAgICAgICAgICAgICAgICAgbG9ja2Rvd24gPSBqc29uLmxvYWQoZGF0YWZpbGUpCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIGxvY2tkb3duIGZpbGUgaW4gTlBNX0xPQ0tET1dOIGZvciAlcywgdGhpcyB3aWxsIGxlYWQgdG8gdW5yZXByb2R1Y2libGUgYnVpbGRzIScgJSB1ZC5wa2duYW1lKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ01pc3NpbmcgbG9ja2Rvd24gZmlsZSBpbiBOUE1fTE9DS0RPV04gZm9yICVzLCB0aGlzIHdpbGwgbGVhZCB0byB1bnJlcHJvZHVjaWJsZSBidWlsZHMhJyAlIHVkLnBrZ25hbWUpCiAKICAgICAgICAgaWYgKCduYW1lJyBub3QgaW4gc2hyaW5rb2JqKToKICAgICAgICAgICAgIHNlbGYuX2dldGRlcGVuZGVuY2llcyh1ZC5wa2duYW1lLCBqc29uZGVwb2JqLCB1ZC52ZXJzaW9uLCBkLCB1ZCkKQEAgLTI3NSwxMCArMjg2LDggQEAKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxtaXJyb3IpOgogICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQogCi0gICAgICAgICAgICBzYXZlX2N3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBvcy5jaGRpcihkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkpCisgICAgICAgICAgICBkbGRpciA9IGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKQogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNyZWF0aW5nIHRhcmJhbGwgb2YgbnBtIGRhdGEiKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY0pmICVzIG5wbS8lcyBucG0vJXMiICUgKHVkLmZ1bGxtaXJyb3IsIHVkLmJibnBtbWFuaWZlc3QsIHVkLnBrZ25hbWUpLCBkKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRvdWNoICVzLmRvbmUiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQotICAgICAgICAgICAgb3MuY2hkaXIoc2F2ZV9jd2QpCi0KKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWNKZiAlcyBucG0vJXMgbnBtLyVzIiAlICh1ZC5mdWxsbWlycm9yLCB1ZC5iYm5wbW1hbmlmZXN0LCB1ZC5wa2duYW1lKSwgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtkaXI9ZGxkaXIpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgidG91Y2ggJXMuZG9uZSIgJSAodWQuZnVsbG1pcnJvciksIGQsIHdvcmtkaXI9ZGxkaXIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL29zYy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvb3NjLnB5CmluZGV4IGQwNTFkZmQuLjI5NWFiZjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvb3NjLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvb3NjLnB5CkBAIC04OCwyMyArODgsMjEgQEAKICAgICAgICAgICAgIG9zY3VwZGF0ZWNtZCA9IHNlbGYuX2J1aWxkb3NjY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRlICIrIHVkLnVybCkKICAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKLSAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIG9zY3VwZGF0ZWNtZCkKICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBvc2N1cGRhdGVjbWQsIHVkLnVybCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKG9zY3VwZGF0ZWNtZCwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKG9zY3VwZGF0ZWNtZCwgZCwgd29ya2Rpcj11ZC5tb2RkaXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvc2NmZXRjaGNtZCA9IHNlbGYuX2J1aWxkb3NjY29tbWFuZCh1ZCwgZCwgImZldGNoIikKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaCAiICsgdWQudXJsKQogICAgICAgICAgICAgIyBjaGVjayBvdXQgc291cmNlcyB0aGVyZQogICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLnBrZ2RpcikKLSAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIG9zY2ZldGNoY21kKQogICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIG9zY2ZldGNoY21kLCB1ZC51cmwpCi0gICAgICAgICAgICBydW5mZXRjaGNtZChvc2NmZXRjaGNtZCwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKG9zY2ZldGNoY21kLCBkLCB3b3JrZGlyPXVkLnBrZ2RpcikKIAotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4odWQucGtnZGlyICsgdWQucGF0aCkpCiAgICAgICAgICMgdGFyIHRoZW0gdXAgdG8gYSBkZWZpbmVkIGZpbGVuYW1lCi0gICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQubG9jYWxwYXRoLCB1ZC5tb2R1bGUpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQubG9jYWxwYXRoLCB1ZC5tb2R1bGUpLCBkLAorICAgICAgICAgICAgICAgICAgICBjbGVhbnVwPVt1ZC5sb2NhbHBhdGhdLCB3b3JrZGlyPW9zLnBhdGguam9pbih1ZC5wa2dkaXIgKyB1ZC5wYXRoKSkKIAogICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CiAgICAgICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcGVyZm9yY2UucHkKaW5kZXggM2ExMGM3Yy4uNTBjYjQ3OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3BlcmZvcmNlLnB5CkBAIC0xLDE0ICsxLDEyIEBACiAjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAogIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQogIiIiCi1CaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCi0KLUNsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKLUJpdEJha2UgYnVpbGQgdG9vbHMuCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb24gZm9yIHBlcmZvcmNlCiAKICIiIgogCiAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAxNiBLb2RhayBBbGFyaXMsIEluYy4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI1LDkgKzIzLDcgQEAKICMKICMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZwogCi1mcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgemlwCiBpbXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IGJiCiBmcm9tICAgYmIgaW1wb3J0IGRhdGEKQEAgLTM3LDE1MSArMzMsMTc4IEBACiBmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAogCiBjbGFzcyBQZXJmb3JjZShGZXRjaE1ldGhvZCk6CisgICAgIiIiIENsYXNzIHRvIGZldGNoIGZyb20gcGVyZm9yY2UgcmVwb3NpdG9yaWVzICIiIgogICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIiBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBwZXJmb3JjZS4gIiIiCiAgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsncDQnXQogCi0gICAgZGVmIGRvcGFyc2UodXJsLCBkKToKLSAgICAgICAgcGFybSA9IHt9Ci0gICAgICAgIHBhdGggPSB1cmwuc3BsaXQoIjovLyIpWzFdCi0gICAgICAgIGRlbGltID0gcGF0aC5maW5kKCJAIik7Ci0gICAgICAgIGlmIGRlbGltICE9IC0xOgotICAgICAgICAgICAgKHVzZXIsIHBzd2QsIGhvc3QsIHBvcnQpID0gcGF0aC5zcGxpdCgnQCcpWzBdLnNwbGl0KCI6IikKLSAgICAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCdAJylbMV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIChob3N0LCBwb3J0KSA9IGQuZ2V0VmFyKCdQNFBPUlQnLCBGYWxzZSkuc3BsaXQoJzonKQotICAgICAgICAgICAgdXNlciA9ICIiCi0gICAgICAgICAgICBwc3dkID0gIiIKLQotICAgICAgICBpZiBwYXRoLmZpbmQoIjsiKSAhPSAtMToKLSAgICAgICAgICAgIGtleXM9W10KLSAgICAgICAgICAgIHZhbHVlcz1bXQotICAgICAgICAgICAgcGxpc3QgPSBwYXRoLnNwbGl0KCc7JykKLSAgICAgICAgICAgIGZvciBpdGVtIGluIHBsaXN0OgotICAgICAgICAgICAgICAgIGlmIGl0ZW0uY291bnQoJz0nKToKLSAgICAgICAgICAgICAgICAgICAgKGtleSwgdmFsdWUpID0gaXRlbS5zcGxpdCgnPScpCi0gICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKLQotICAgICAgICAgICAgcGFybSA9IGRpY3QoemlwKGtleXMsIHZhbHVlcykpCi0gICAgICAgIHBhdGggPSAiLy8iICsgcGF0aC5zcGxpdCgnOycpWzBdCi0gICAgICAgIGhvc3QgKz0gIjolcyIgJSAocG9ydCkKLSAgICAgICAgcGFybVsiY3NldCJdID0gUGVyZm9yY2UuZ2V0Y3NldChkLCBwYXRoLCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKQotCi0gICAgICAgIHJldHVybiBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtCi0gICAgZG9wYXJzZSA9IHN0YXRpY21ldGhvZChkb3BhcnNlKQotCi0gICAgZGVmIGdldGNzZXQoZCwgZGVwb3QsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pOgotICAgICAgICBwNG9wdCA9ICIiCi0gICAgICAgIGlmICJjc2V0IiBpbiBwYXJtOgotICAgICAgICAgICAgcmV0dXJuIHBhcm1bImNzZXQiXTsKLSAgICAgICAgaWYgdXNlcjoKLSAgICAgICAgICAgIHA0b3B0ICs9ICIgLXUgJXMiICUgKHVzZXIpCi0gICAgICAgIGlmIHBzd2Q6Ci0gICAgICAgICAgICBwNG9wdCArPSAiIC1QICVzIiAlIChwc3dkKQotICAgICAgICBpZiBob3N0OgotICAgICAgICAgICAgcDRvcHQgKz0gIiAtcCAlcyIgJSAoaG9zdCkKLQotICAgICAgICBwNGRhdGUgPSBkLmdldFZhcigiUDREQVRFIiwgVHJ1ZSkKLSAgICAgICAgaWYgInJldmlzaW9uIiBpbiBwYXJtOgotICAgICAgICAgICAgZGVwb3QgKz0gIiMlcyIgJSAocGFybVsicmV2aXNpb24iXSkKLSAgICAgICAgZWxpZiAibGFiZWwiIGluIHBhcm06Ci0gICAgICAgICAgICBkZXBvdCArPSAiQCVzIiAlIChwYXJtWyJsYWJlbCJdKQotICAgICAgICBlbGlmIHA0ZGF0ZToKLSAgICAgICAgICAgIGRlcG90ICs9ICJAJXMiICUgKHA0ZGF0ZSkKLQotICAgICAgICBwNGNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9wNCcsIFRydWUpIG9yICJwNCIKLSAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzJXMgY2hhbmdlcyAtbSAxICVzIiwgcDRjbWQsIHA0b3B0LCBkZXBvdCkKLSAgICAgICAgcDRmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bigiJXMlcyBjaGFuZ2VzIC1tIDEgJXMiICUgKHA0Y21kLCBwNG9wdCwgZGVwb3QpKQotICAgICAgICBjc2V0ID0gcDRmaWxlLnN0cmlwKCkKLSAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSRUFEICVzIiwgY3NldCkKLSAgICAgICAgaWYgbm90IGNzZXQ6Ci0gICAgICAgICAgICByZXR1cm4gLTEKLQotICAgICAgICByZXR1cm4gY3NldC5zcGxpdCgnICcpWzFdCi0gICAgZ2V0Y3NldCA9IHN0YXRpY21ldGhvZChnZXRjc2V0KQotCiAgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6Ci0gICAgICAgIChob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IFBlcmZvcmNlLmRvcGFyc2UodWQudXJsLCBkKQotCi0gICAgICAgIGJhc2VfcGF0aCA9IHBhdGgucmVwbGFjZSgnLy4uLicsICcnKQotICAgICAgICBiYXNlX3BhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXMoYmFzZV9wYXRoKQotICAgICAgICAKLSAgICAgICAgaWYgImxhYmVsIiBpbiBwYXJtOgotICAgICAgICAgICAgdmVyc2lvbiA9IHBhcm1bImxhYmVsIl0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZlcnNpb24gPSBQZXJmb3JjZS5nZXRjc2V0KGQsIHBhdGgsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pCi0KLSAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzKyVzKyVzLnRhci5neicgJSAoaG9zdCwgYmFzZV9wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB2ZXJzaW9uKSwgZCkKLQotICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CiAgICAgICAgICIiIgotICAgICAgICBGZXRjaCB1cmxzCisgICAgICAgIEluaXRpYWxpemUgcGVyZm9yY2Ugc3BlY2lmaWMgdmFyaWFibGVzIHdpdGhpbiB1cmwgZGF0YS4gIElmIFA0Q09ORklHIGlzCisgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBlbnYsIHVzZSBpdC4gIElmIFA0UE9SVCBpcyBzcGVjaWZpZWQgYnkgdGhlIHJlY2lwZSwgdXNlCisgICAgICAgIGl0cyB2YWx1ZXMsIHdoaWNoIG1heSBvdmVycmlkZSB0aGUgc2V0dGluZ3MgaW4gUDRDT05GSUcuCiAgICAgICAgICIiIgorICAgICAgICB1ZC5iYXNlY21kID0gZC5nZXRWYXIoJ0ZFVENIQ01EX3A0JywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHVkLmJhc2VjbWQ6CisgICAgICAgICAgICB1ZC5iYXNlY21kID0gIi91c3IvYmluL2VudiBwNCIKIAotICAgICAgICAoaG9zdCwgZGVwb3QsIHVzZXIsIHBzd2QsIHBhcm0pID0gUGVyZm9yY2UuZG9wYXJzZSh1ZC51cmwsIGQpCisgICAgICAgIHVkLmRsZGlyID0gZC5nZXRWYXIoJ1A0RElSJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHVkLmRsZGlyOgorICAgICAgICAgICAgdWQuZGxkaXIgPSAnJXMvJXMnICUgKGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKSwgJ3A0JykKIAotICAgICAgICBpZiBkZXBvdC5maW5kKCcvLi4uJykgIT0gLTE6Ci0gICAgICAgICAgICBwYXRoID0gZGVwb3RbOmRlcG90LmZpbmQoJy8uLi4nKV0KKyAgICAgICAgcGF0aCA9IHVkLnVybC5zcGxpdCgnOi8vJylbMV0KKyAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQoJzsnKVswXQorICAgICAgICBkZWxpbSA9IHBhdGguZmluZCgnQCcpOworICAgICAgICBpZiBkZWxpbSAhPSAtMToKKyAgICAgICAgICAgICh1ZC51c2VyLCB1ZC5wc3dkKSA9IHBhdGguc3BsaXQoJ0AnKVswXS5zcGxpdCgnOicpCisgICAgICAgICAgICB1ZC5wYXRoID0gcGF0aC5zcGxpdCgnQCcpWzFdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoID0gZGVwb3RbOmRlcG90LnJmaW5kKCcvJyldCisgICAgICAgICAgICB1ZC5wYXRoID0gcGF0aAogCi0gICAgICAgIG1vZHVsZSA9IHBhcm0uZ2V0KCdtb2R1bGUnLCBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorICAgICAgICB1ZC51c2luZ3A0Y29uZmlnID0gRmFsc2UKKyAgICAgICAgcDRwb3J0ID0gZC5nZXRWYXIoJ1A0UE9SVCcsIFRydWUpCiAKLSAgICAgICAgIyBHZXQgdGhlIHA0IGNvbW1hbmQKKyAgICAgICAgaWYgcDRwb3J0OgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdVc2luZyByZWNpcGUgcHJvdmlkZWQgUDRQT1JUOiAlcycgJSBwNHBvcnQpCisgICAgICAgICAgICB1ZC5ob3N0ID0gcDRwb3J0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ1RyeWluZyB0byB1c2UgUDRDT05GSUcgdG8gYXV0b21hdGljYWxseSBzZXQgUDRQT1JULi4uJykKKyAgICAgICAgICAgIHVkLnVzaW5ncDRjb25maWcgPSBUcnVlCisgICAgICAgICAgICBwNGNtZCA9ICclcyBpbmZvIHwgZ3JlcCAiU2VydmVyIGFkZHJlc3MiJyAlIHVkLmJhc2VjbWQKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBwNGNtZCkKKyAgICAgICAgICAgIHVkLmhvc3QgPSBydW5mZXRjaGNtZChwNGNtZCwgZCwgVHJ1ZSkKKyAgICAgICAgICAgIHVkLmhvc3QgPSB1ZC5ob3N0LnNwbGl0KCc6ICcpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnRGV0ZXJtaW5lZCBQNFBPUlQgdG8gYmU6ICVzJyAlIHVkLmhvc3QpCisgICAgICAgICAgICBpZiBub3QgdWQuaG9zdDoKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIFA0UE9SVCBmcm9tIFA0Q09ORklHJykKKwkKKyAgICAgICAgaWYgdWQucGF0aC5maW5kKCcvLi4uJykgPj0gMDoKKyAgICAgICAgICAgIHVkLnBhdGhpc2RpciA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVkLnBhdGhpc2RpciA9IEZhbHNlCisKKyAgICAgICAgY2xlYW5lZHBhdGggPSB1ZC5wYXRoLnJlcGxhY2UoJy8uLi4nLCAnJykucmVwbGFjZSgnLycsICcuJykKKyAgICAgICAgY2xlYW5lZGhvc3QgPSB1ZC5ob3N0LnJlcGxhY2UoJzonLCAnLicpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbih1ZC5kbGRpciwgY2xlYW5lZGhvc3QsIGNsZWFuZWRwYXRoKQorCisgICAgICAgIHVkLnNldHVwX3Jldmlzb25zKGQpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzXyVzXyVzLnRhci5neicgJSAoY2xlYW5lZGhvc3QsIGNsZWFuZWRwYXRoLCB1ZC5yZXZpc2lvbiksIGQpCisKKyAgICBkZWYgX2J1aWxkcDRjb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kLCBkZXBvdF9maWxlbmFtZT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIGEgcDQgY29tbWFuZGxpbmUuICBWYWxpZCBjb21tYW5kcyBhcmUgImNoYW5nZXMiLCAicHJpbnQiLCBhbmQKKyAgICAgICAgImZpbGVzIi4gIGRlcG90X2ZpbGVuYW1lIGlzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgaW4gdGhlIGRlcG90CisgICAgICAgIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgJyNyZXYnIHZhbHVlLgorICAgICAgICAiIiIKICAgICAgICAgcDRvcHQgPSAiIgotICAgICAgICBpZiB1c2VyOgotICAgICAgICAgICAgcDRvcHQgKz0gIiAtdSAlcyIgJSAodXNlcikKIAotICAgICAgICBpZiBwc3dkOgotICAgICAgICAgICAgcDRvcHQgKz0gIiAtUCAlcyIgJSAocHN3ZCkKKyAgICAgICAgaWYgdWQudXNlcjoKKyAgICAgICAgICAgIHA0b3B0ICs9ICcgLXUgIiVzIicgJSAodWQudXNlcikKIAotICAgICAgICBpZiBob3N0OgotICAgICAgICAgICAgcDRvcHQgKz0gIiAtcCAlcyIgJSAoaG9zdCkKKyAgICAgICAgaWYgdWQucHN3ZDoKKyAgICAgICAgICAgIHA0b3B0ICs9ICcgLVAgIiVzIicgJSAodWQucHN3ZCkKIAotICAgICAgICBwNGNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9wNCcsIFRydWUpIG9yICJwNCIKKyAgICAgICAgaWYgdWQuaG9zdCBhbmQgbm90IHVkLnVzaW5ncDRjb25maWc6CisgICAgICAgICAgICBwNG9wdCArPSAnIC1wICVzJyAlICh1ZC5ob3N0KQogCi0gICAgICAgICMgY3JlYXRlIHRlbXAgZGlyZWN0b3J5Ci0gICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2g6IGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkiKQotICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5leHBhbmQoJyR7V09SS0RJUn0nKSkKLSAgICAgICAgbWt0ZW1wID0gZC5nZXRWYXIoIkZFVENIQ01EX3A0bWt0ZW1wIiwgVHJ1ZSkgb3IgZC5leHBhbmQoIm1rdGVtcCAtZCAtcSAnJHtXT1JLRElSfS9vZXA0LlhYWFhYWCciKQotICAgICAgICB0bXBmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bihta3RlbXApCi0gICAgICAgIHRtcGZpbGUgPSB0bXBmaWxlLnN0cmlwKCkKLSAgICAgICAgaWYgbm90IHRtcGZpbGU6Ci0gICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJGZXRjaDogdW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Li4gbWFrZSBzdXJlICdta3RlbXAnIGlzIGluIHRoZSBQQVRILiIsIHVkLnVybCkKLQotICAgICAgICBpZiAibGFiZWwiIGluIHBhcm06Ci0gICAgICAgICAgICBkZXBvdCA9ICIlc0AlcyIgJSAoZGVwb3QsIHBhcm1bImxhYmVsIl0pCisgICAgICAgIGlmIGhhc2F0dHIodWQsICdyZXZpc2lvbicpIGFuZCB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIHBhdGhucmV2ID0gJyVzQCVzJyAlICh1ZC5wYXRoLCB1ZC5yZXZpc2lvbikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNzZXQgPSBQZXJmb3JjZS5nZXRjc2V0KGQsIGRlcG90LCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKQotICAgICAgICAgICAgZGVwb3QgPSAiJXNAJXMiICUgKGRlcG90LCBjc2V0KQorICAgICAgICAgICAgcGF0aG5yZXYgPSAnJXMnICUgKHVkLnBhdGgpCiAKLSAgICAgICAgb3MuY2hkaXIodG1wZmlsZSkKLSAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCi0gICAgICAgIGxvZ2dlci5pbmZvKCIlcyVzIGZpbGVzICVzIiwgcDRjbWQsIHA0b3B0LCBkZXBvdCkKLSAgICAgICAgcDRmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bigiJXMlcyBmaWxlcyAlcyIgJSAocDRjbWQsIHA0b3B0LCBkZXBvdCkpCi0gICAgICAgIHA0ZmlsZSA9IFtmLnJzdHJpcCgpIGZvciBmIGluIHA0ZmlsZS5zcGxpdGxpbmVzKCldCisgICAgICAgIGlmIGRlcG90X2ZpbGVuYW1lOgorICAgICAgICAgICAgaWYgdWQucGF0aGlzZGlyOiAjIFJlbW92ZSBsZWFkaW5nIHBhdGggdG8gb2J0YWluIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBkZXBvdF9maWxlbmFtZVtsZW4odWQucGF0aCktMTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZGVwb3RfZmlsZW5hbWVbZGVwb3RfZmlsZW5hbWUucmZpbmQoJy8nKTpdCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzpmaWxlbmFtZS5maW5kKCcjJyldICMgUmVtb3ZlIHRyYWlsaW5nICcjcmV2JwogCi0gICAgICAgIGlmIG5vdCBwNGZpbGU6Ci0gICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJGZXRjaDogdW5hYmxlIHRvIGdldCB0aGUgUDQgZmlsZXMgZnJvbSAlcyIgJSBkZXBvdCwgdWQudXJsKQorICAgICAgICBpZiBjb21tYW5kID09ICdjaGFuZ2VzJzoKKyAgICAgICAgICAgIHA0Y21kID0gJyVzJXMgY2hhbmdlcyAtbSAxIC8vJXMnICUgKHVkLmJhc2VjbWQsIHA0b3B0LCBwYXRobnJldikKKyAgICAgICAgZWxpZiBjb21tYW5kID09ICdwcmludCc6CisgICAgICAgICAgICBpZiBkZXBvdF9maWxlbmFtZSAhPSBOb25lOgorICAgICAgICAgICAgICAgIHA0Y21kID0gJyVzJXMgcHJpbnQgLW8gInA0LyVzIiAiJXMiJyAlICh1ZC5iYXNlY21kLCBwNG9wdCwgZmlsZW5hbWUsIGRlcG90X2ZpbGVuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCdObyBkZXBvdCBmaWxlIG5hbWUgcHJvdmlkZWQgdG8gcDQgJXMnICUgY29tbWFuZCwgdWQudXJsKQorICAgICAgICBlbGlmIGNvbW1hbmQgPT0gJ2ZpbGVzJzoKKyAgICAgICAgICAgIHA0Y21kID0gJyVzJXMgZmlsZXMgLy8lcycgJSAodWQuYmFzZWNtZCwgcDRvcHQsIHBhdGhucmV2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcignSW52YWxpZCBwNCBjb21tYW5kICVzJyAlIGNvbW1hbmQsIHVkLnVybCkKKworICAgICAgICByZXR1cm4gcDRjbWQKKworICAgIGRlZiBfcDRsaXN0ZmlsZXMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgZmlsZSBuYW1lcyB3aGljaCBhcmUgcHJlc2VudCBpbiB0aGUgZGVwb3QgdXNpbmcgdGhlCisgICAgICAgICdwNCBmaWxlcycgY29tbWFuZCwgaW5jbHVkaW5nIHRyYWlsaW5nICcjcmV2JyBmaWxlIHJldmlzaW9uIGluZGljYXRvcgorICAgICAgICAiIiIKKyAgICAgICAgcDRjbWQgPSBzZWxmLl9idWlsZHA0Y29tbWFuZCh1ZCwgZCwgJ2ZpbGVzJykKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHA0Y21kKQorICAgICAgICBwNGZpbGVzbGlzdCA9IHJ1bmZldGNoY21kKHA0Y21kLCBkLCBUcnVlKQorICAgICAgICBwNGZpbGVzbGlzdCA9IFtmLnJzdHJpcCgpIGZvciBmIGluIHA0ZmlsZXNsaXN0LnNwbGl0bGluZXMoKV0KKworICAgICAgICBpZiBub3QgcDRmaWxlc2xpc3Q6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCdVbmFibGUgdG8gZmV0Y2ggbGlzdGluZyBvZiBwNCBmaWxlcyBmcm9tICVzQCVzJyAlICh1ZC5ob3N0LCB1ZC5wYXRoKSkKIAogICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZmlsZWxpc3QgPSBbXQogCi0gICAgICAgIGZvciBmaWxlIGluIHA0ZmlsZToKLSAgICAgICAgICAgIGxpc3QgPSBmaWxlLnNwbGl0KCkKLQotICAgICAgICAgICAgaWYgbGlzdFsyXSA9PSAiZGVsZXRlIjoKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIHA0ZmlsZXNsaXN0OgorICAgICAgICAgICAgaXRlbSA9IGZpbGVuYW1lLnNwbGl0KCcgLSAnKQorICAgICAgICAgICAgbGFzdGFjdGlvbiA9IGl0ZW1bMV0uc3BsaXQoKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdGaWxlOiAlcyBMYXN0IEFjdGlvbjogJXMnICUgKGl0ZW1bMF0sIGxhc3RhY3Rpb25bMF0pKQorICAgICAgICAgICAgaWYgbGFzdGFjdGlvblswXSA9PSAnZGVsZXRlJzoKICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKGl0ZW1bMF0pCiAKLSAgICAgICAgICAgIGRlc3QgPSBsaXN0WzBdW2xlbihwYXRoKSsxOl0KLSAgICAgICAgICAgIHdoZXJlID0gZGVzdC5maW5kKCIjIikKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CiAKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgiJXMlcyBwcmludCAtbyAlcy8lcyAlcyIgJSAocDRjbWQsIHA0b3B0LCBtb2R1bGUsIGRlc3RbOndoZXJlXSwgbGlzdFswXSksIHNoZWxsPVRydWUpCi0gICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIiBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMsIGZldGNoIGVhY2ggb25lICIiIgorICAgICAgICBmaWxlbGlzdCA9IHNlbGYuX3A0bGlzdGZpbGVzKHVkLCBkKQorICAgICAgICBpZiBub3QgZmlsZWxpc3Q6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCdObyBmaWxlcyBmb3VuZCBpbiBkZXBvdCAlc0AlcycgJSAodWQuaG9zdCwgdWQucGF0aCkpCiAKLSAgICAgICAgaWYgY291bnQgPT0gMDoKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpCi0gICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJGZXRjaDogTm8gZmlsZXMgZ2F0aGVyZWQgZnJvbSB0aGUgUDQgZmV0Y2giLCB1ZC51cmwpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5wa2dkaXIsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCiAKLSAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5sb2NhbHBhdGgsIG1vZHVsZSksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKLSAgICAgICAgIyBjbGVhbnVwCi0gICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHRtcGZpbGUpCisgICAgICAgIGZvciBhZmlsZSBpbiBmaWxlbGlzdDoKKyAgICAgICAgICAgIHA0ZmV0Y2hjbWQgPSBzZWxmLl9idWlsZHA0Y29tbWFuZCh1ZCwgZCwgJ3ByaW50JywgYWZpbGUpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgcDRmZXRjaGNtZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKHA0ZmV0Y2hjbWQsIGQsIHdvcmtkaXI9dWQucGtnZGlyKQorCisgICAgICAgIHJ1bmZldGNoY21kKCd0YXIgLWN6ZiAlcyBwNCcgJSAodWQubG9jYWxwYXRoKSwgZCwgY2xlYW51cD1bdWQubG9jYWxwYXRoXSwgd29ya2Rpcj11ZC5wa2dkaXIpCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgQ2xlYW51cCBwNCBzcGVjaWZpYyBmaWxlcyBhbmQgZGlycyIiIgorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQucGtnZGlyLCBUcnVlKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwgIiIiCisgICAgICAgIHJldHVybiAncDQ6JXMnICUgdWQucGtnZGlyCisKKyAgICBkZWYgX2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIiBSZXR1cm4gdGhlIGxhdGVzdCB1cHN0cmVhbSBzY20gcmV2aXNpb24gbnVtYmVyICIiIgorICAgICAgICBwNGNtZCA9IHNlbGYuX2J1aWxkcDRjb21tYW5kKHVkLCBkLCAiY2hhbmdlcyIpCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBwNGNtZCkKKyAgICAgICAgdGlwID0gcnVuZmV0Y2hjbWQocDRjbWQsIGQsIFRydWUpCisKKyAgICAgICAgaWYgbm90IHRpcDoKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxhdGVzdCBwZXJmb3JjZSBjaGFuZ2VsaXN0JykKKworICAgICAgICB0aXBjc2V0ID0gdGlwLnNwbGl0KCcgJylbMV0KKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdwNCB0aXAgZm91bmQgdG8gYmUgY2hhbmdlbGlzdCAlcycgJSB0aXBjc2V0KQorICAgICAgICByZXR1cm4gdGlwY3NldAorCisgICAgZGVmIHNvcnRhYmxlX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiIFJldHVybiBhIHNvcnRhYmxlIHJldmlzaW9uIG51bWJlciAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBzZWxmLl9idWlsZF9yZXZpc2lvbih1ZCwgZCkKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb24KKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5CmluZGV4IDIxNjc4ZWIuLmVjYzZlNjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcmVwby5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3JlcG8ucHkKQEAgLTY5LDI0ICs2OSwyMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdXNlcm5hbWUgPSAiIgogCi0gICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oY29kaXIsICJyZXBvIikpCi0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihjb2RpciwgInJlcG8iKSkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihjb2RpciwgInJlcG8iLCAiLnJlcG8iKSk6CisgICAgICAgIHJlcG9kaXIgPSBvcy5wYXRoLmpvaW4oY29kaXIsICJyZXBvIikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJlcG9kaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocmVwb2RpciwgIi5yZXBvIikpOgogICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsICJyZXBvIGluaXQgLW0gJXMgLWIgJXMgLXUgJXM6Ly8lcyVzJXMiICUgKHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gsIHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCksIHVkLnVybCkKLSAgICAgICAgICAgIHJ1bmZldGNoY21kKCJyZXBvIGluaXQgLW0gJXMgLWIgJXMgLXUgJXM6Ly8lcyVzJXMiICUgKHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gsIHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCksIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgicmVwbyBpbml0IC1tICVzIC1iICVzIC11ICVzOi8vJXMlcyVzIiAlICh1ZC5tYW5pZmVzdCwgdWQuYnJhbmNoLCB1ZC5wcm90bywgdXNlcm5hbWUsIHVkLmhvc3QsIHVkLnBhdGgpLCBkLCB3b3JrZGlyPXJlcG9kaXIpCiAKICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsICJyZXBvIHN5bmMgJXMiICUgdWQudXJsLCB1ZC51cmwpCi0gICAgICAgIHJ1bmZldGNoY21kKCJyZXBvIHN5bmMiLCBkKQotICAgICAgICBvcy5jaGRpcihjb2RpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQoInJlcG8gc3luYyIsIGQsIHdvcmtkaXI9cmVwb2RpcikKIAogICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKICAgICAgICAgaWYgc2NtZGF0YSA9PSAia2VlcCI6CiAgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiIgogICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZSAnLnJlcG8nIC0tZXhjbHVkZSAnLmdpdCciCisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlPScucmVwbycgLS1leGNsdWRlPScuZ2l0JyIKIAogICAgICAgICAjIENyZWF0ZSBhIGNhY2hlCi0gICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIG9zLnBhdGguam9pbigiLiIsICIqIikgKSwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAlcyAtY3pmICVzICVzIiAlICh0YXJfZmxhZ3MsIHVkLmxvY2FscGF0aCwgb3MucGF0aC5qb2luKCIuIiwgIioiKSApLCBkLCB3b3JrZGlyPWNvZGlyKQogCiAgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKICAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkKaW5kZXggY2IyZjc1My4uNzk4OWZjYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zZnRwLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc2Z0cC5weQpAQCAtNjEsOCArNjEsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBiYgotaW1wb3J0IHVybGxpYgotaW1wb3J0IGNvbW1hbmRzCitpbXBvcnQgdXJsbGliLnJlcXVlc3QsIHVybGxpYi5wYXJzZSwgdXJsbGliLmVycm9yCiBmcm9tIGJiIGltcG9ydCBkYXRhCiBmcm9tIGJiLmZldGNoMiBpbXBvcnQgVVJJCiBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKQEAgLTkzLDcgKzkyLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHVkLmJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5wYXRoKQogCi0gICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKHVybGxpYi51bnF1b3RlKHVkLmJhc2VuYW1lKSwgZCkKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQodXJsbGliLnBhcnNlLnVucXVvdGUodWQuYmFzZW5hbWUpLCBkKQogCiAgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKICAgICAgICAgIiIiRmV0Y2ggdXJscyIiIgpAQCAtMTIxLDggKzEyMCw3IEBACiAKICAgICAgICAgcmVtb3RlID0gJyVzJXM6JXMnICUgKHVzZXIsIHVybG8uaG9zdG5hbWUsIHBhdGgpCiAKLSAgICAgICAgY21kID0gJyVzICVzICVzICVzJyAlIChiYXNlY21kLCBwb3J0LCBjb21tYW5kcy5ta2FyZyhyZW1vdGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLm1rYXJnKGxwYXRoKSkKKyAgICAgICAgY21kID0gJyVzICVzICVzICVzJyAlIChiYXNlY21kLCBwb3J0LCByZW1vdGUsIGxwYXRoKQogCiAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKICAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zc2gucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NzaC5weQppbmRleCA2MzU1NzhhLi41NmY5YjdlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NzaC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NzaC5weQpAQCAtMTE0LDEyICsxMTQsMTAgQEAKICAgICAgICAgICAgIGZyID0gaG9zdAogICAgICAgICBmciArPSAnOiVzJyAlIHBhdGgKIAotCi0gICAgICAgIGltcG9ydCBjb21tYW5kcwogICAgICAgICBjbWQgPSAnc2NwIC1CIC1yICVzICVzICVzLycgJSAoCiAgICAgICAgICAgICBwb3J0YXJnLAotICAgICAgICAgICAgY29tbWFuZHMubWthcmcoZnIpLAotICAgICAgICAgICAgY29tbWFuZHMubWthcmcoZGxkaXIpCisgICAgICAgICAgICBmciwKKyAgICAgICAgICAgIGRsZGlyCiAgICAgICAgICkKIAogICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY21kLCB1cmxkYXRhLnVybCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3ZuLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zdm4ucHkKaW5kZXggOGEyOTE5My4uNmNhNzlkMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zdm4ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zdm4ucHkKQEAgLTEyNiwzNSArMTI2LDMyIEBACiAgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odWQubW9kZGlyLCAnLnN2bicpLCBvcy5SX09LKToKICAgICAgICAgICAgIHN2bnVwZGF0ZWNtZCA9IHNlbGYuX2J1aWxkc3ZuY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRlICIgKyB1ZC51cmwpCi0gICAgICAgICAgICAjIHVwZGF0ZSBzb3VyY2VzIHRoZXJlCi0gICAgICAgICAgICBvcy5jaGRpcih1ZC5tb2RkaXIpCiAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gYXR0ZW1wdCB0byBydW4gc3ZuIHVwZ3JhZGUgZmlyc3QgaW4gY2FzZSBpdHMgYW4gb2xkZXIgd29ya2luZyBmb3JtYXQKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiB1cGdyYWRlIiwgZCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiB1cGdyYWRlIiwgZCwgd29ya2Rpcj11ZC5tb2RkaXIpCiAgICAgICAgICAgICBleGNlcHQgRmV0Y2hFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBzdm51cGRhdGVjbWQpCiAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgc3ZudXBkYXRlY21kLCB1ZC51cmwpCi0gICAgICAgICAgICBydW5mZXRjaGNtZChzdm51cGRhdGVjbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZChzdm51cGRhdGVjbWQsIGQsIHdvcmtkaXI9dWQubW9kZGlyKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3ZuZmV0Y2hjbWQgPSBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJmZXRjaCIpCiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKICAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCi0gICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBzdm5mZXRjaGNtZCkKICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBzdm5mZXRjaGNtZCwgdWQudXJsKQotICAgICAgICAgICAgcnVuZmV0Y2hjbWQoc3ZuZmV0Y2hjbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZChzdm5mZXRjaGNtZCwgZCwgd29ya2Rpcj11ZC5wa2dkaXIpCiAKICAgICAgICAgc2NtZGF0YSA9IHVkLnBhcm0uZ2V0KCJzY21kYXRhIiwgIiIpCiAgICAgICAgIGlmIHNjbWRhdGEgPT0gImtlZXAiOgogICAgICAgICAgICAgdGFyX2ZsYWdzID0gIiIKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRhcl9mbGFncyA9ICItLWV4Y2x1ZGUgJy5zdm4nIgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZT0nLnN2biciCiAKLSAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQogICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQotICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCB1ZC5wYXRoX3NwZWMpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIHVkLnBhdGhfc3BlYyksIGQsCisgICAgICAgICAgICAgICAgICAgIGNsZWFudXA9W3VkLmxvY2FscGF0aF0sIHdvcmtkaXI9dWQucGtnZGlyKQogCiAgICAgZGVmIGNsZWFuKHNlbGYsIHVkLCBkKToKICAgICAgICAgIiIiIENsZWFuIFNWTiBzcGVjaWZpYyBmaWxlcyBhbmQgZGlycyAiIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvd2dldC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvd2dldC5weQppbmRleCA4YmM5ZTkzLi5lY2I5NDZhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi93Z2V0LnB5CkBAIC0zMSw3ICszMSw4IEBACiBpbXBvcnQgb3MKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgYmIKLWltcG9ydCB1cmxsaWIKK2ltcG9ydCBiYi5wcm9ncmVzcworaW1wb3J0IHVybGxpYi5yZXF1ZXN0LCB1cmxsaWIucGFyc2UsIHVybGxpYi5lcnJvcgogZnJvbSAgIGJiIGltcG9ydCBkYXRhCiBmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAogZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgpAQCAtNDEsNiArNDIsMjcgQEAKIGZyb20gICBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKIGZyb20gICBiczQgaW1wb3J0IFNvdXBTdHJhaW5lcgogCitjbGFzcyBXZ2V0UHJvZ3Jlc3NIYW5kbGVyKGJiLnByb2dyZXNzLkxpbmVGaWx0ZXJQcm9ncmVzc0hhbmRsZXIpOgorICAgICIiIgorICAgIEV4dHJhY3QgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gZnJvbSB3Z2V0IG91dHB1dC4KKyAgICBOb3RlOiByZWxpZXMgb24gLS1wcm9ncmVzcz1kb3QgKHdpdGggLXYgb3Igd2l0aG91dCAtcS8tbnYpIGJlaW5nCisgICAgc3BlY2lmaWVkIG9uIHRoZSB3Z2V0IGNvbW1hbmQgbGluZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKFdnZXRQcm9ncmVzc0hhbmRsZXIsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgICMgU2VuZCBhbiBpbml0aWFsIHByb2dyZXNzIGV2ZW50IHNvIHRoZSBiYXIgZ2V0cyBzaG93bgorICAgICAgICBzZWxmLl9maXJlX3Byb2dyZXNzKDApCisKKyAgICBkZWYgd3JpdGVsaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBwZXJjcyA9IHJlLmZpbmRhbGwocicoXGQrKSVccysoW1xkLl0rW0EtWl0pJywgbGluZSkKKyAgICAgICAgaWYgcGVyY3M6CisgICAgICAgICAgICBwcm9ncmVzcyA9IGludChwZXJjc1stMV1bMF0pCisgICAgICAgICAgICByYXRlID0gcGVyY3NbLTFdWzFdICsgJy9zJworICAgICAgICAgICAgc2VsZi51cGRhdGUocHJvZ3Jlc3MsIHJhdGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCiBjbGFzcyBXZ2V0KEZldGNoTWV0aG9kKToKICAgICAiIiJDbGFzcyB0byBmZXRjaCB1cmxzIHZpYSAnd2dldCciIiIKICAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgpAQCAtNjIsMTcgKzg0LDE5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB1ZC5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodWQucGF0aCkKIAotICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCh1cmxsaWIudW5xdW90ZSh1ZC5iYXNlbmFtZSksIGQpCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKHVybGxpYi5wYXJzZS51bnF1b3RlKHVkLmJhc2VuYW1lKSwgZCkKICAgICAgICAgaWYgbm90IHVkLmxvY2FsZmlsZToKLSAgICAgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKHVybGxpYi51bnF1b3RlKHVkLmhvc3QgKyB1ZC5wYXRoKS5yZXBsYWNlKCIvIiwgIi4iKSwgZCkKKyAgICAgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKHVybGxpYi5wYXJzZS51bnF1b3RlKHVkLmhvc3QgKyB1ZC5wYXRoKS5yZXBsYWNlKCIvIiwgIi4iKSwgZCkKIAotICAgICAgICBzZWxmLmJhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfd2dldCIsIFRydWUpIG9yICIvdXNyL2Jpbi9lbnYgd2dldCAtdCAyIC1UIDMwIC1udiAtLXBhc3NpdmUtZnRwIC0tbm8tY2hlY2stY2VydGlmaWNhdGUiCisgICAgICAgIHNlbGYuYmFzZWNtZCA9IGQuZ2V0VmFyKCJGRVRDSENNRF93Z2V0IiwgVHJ1ZSkgb3IgIi91c3IvYmluL2VudiB3Z2V0IC10IDIgLVQgMzAgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIgogCiAgICAgZGVmIF9ydW53Z2V0KHNlbGYsIHVkLCBkLCBjb21tYW5kLCBxdWlldCk6CiAKKyAgICAgICAgcHJvZ3Jlc3NoYW5kbGVyID0gV2dldFByb2dyZXNzSGFuZGxlcihkKQorCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2hpbmcgJXMgdXNpbmcgY29tbWFuZCAnJXMnIiAlICh1ZC51cmwsIGNvbW1hbmQpKQogICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY29tbWFuZCkKLSAgICAgICAgcnVuZmV0Y2hjbWQoY29tbWFuZCwgZCwgcXVpZXQpCisgICAgICAgIHJ1bmZldGNoY21kKGNvbW1hbmQgKyAnIC0tcHJvZ3Jlc3M9ZG90IC12JywgZCwgcXVpZXQsIGxvZz1wcm9ncmVzc2hhbmRsZXIpCiAKICAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgogICAgICAgICAiIiJGZXRjaCB1cmxzIiIiCkBAIC04NCw2ICsxMDgsMTAgQEAKICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZGxkaXIgKyBvcy5zZXAgKyB1ZC5sb2NhbGZpbGUpKQogICAgICAgICAgICAgZmV0Y2hjbWQgKz0gIiAtTyAiICsgZGxkaXIgKyBvcy5zZXAgKyB1ZC5sb2NhbGZpbGUKIAorICAgICAgICBpZiB1ZC51c2VyOgorICAgICAgICAgICAgdXAgPSB1ZC51c2VyLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGZldGNoY21kICs9ICIgLS11c2VyPSVzIC0tcGFzc3dvcmQ9JXMgLS1hdXRoLW5vLWNoYWxsZW5nZSIgJSAodXBbMF0sdXBbMV0pCisKICAgICAgICAgdXJpID0gdWQudXJsLnNwbGl0KCI7IilbMF0KICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKICAgICAgICAgICAgICMgZmlsZSBleGlzdHMsIGJ1dCB3ZSBkaWRudCBjb21wbGV0ZSBpdC4uIHRyeWluZyBhZ2Fpbi4uCkBAIC0xMDQsMTIgKzEzMiwxMiBAQAogCiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVkLCBkKToKLSAgICAgICAgaW1wb3J0IHVybGxpYjIsIHNvY2tldCwgaHR0cGxpYgotICAgICAgICBmcm9tIHVybGxpYiBpbXBvcnQgYWRkaW5mb3VybAorICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCBmZXRjaCwgdWQsIGQsIHRyeV9hZ2Fpbj1UcnVlKToKKyAgICAgICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0LCB1cmxsaWIuZXJyb3IsIHVybGxpYi5wYXJzZSwgc29ja2V0LCBodHRwLmNsaWVudAorICAgICAgICBmcm9tIHVybGxpYi5yZXNwb25zZSBpbXBvcnQgYWRkaW5mb3VybAogICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hDb25uZWN0aW9uQ2FjaGUKIAotICAgICAgICBjbGFzcyBIVFRQQ29ubmVjdGlvbkNhY2hlKGh0dHBsaWIuSFRUUENvbm5lY3Rpb24pOgorICAgICAgICBjbGFzcyBIVFRQQ29ubmVjdGlvbkNhY2hlKGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKToKICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGU6CiAgICAgICAgICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZik6CiAgICAgICAgICAgICAgICAgICAgICIiIkNvbm5lY3QgdG8gdGhlIGhvc3QgYW5kIHBvcnQgc3BlY2lmaWVkIGluIF9faW5pdF9fLiIiIgpAQCAtMTI1LDcgKzE1Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKIAotICAgICAgICBjbGFzcyBDYWNoZUhUVFBIYW5kbGVyKHVybGxpYjIuSFRUUEhhbmRsZXIpOgorICAgICAgICBjbGFzcyBDYWNoZUhUVFBIYW5kbGVyKHVybGxpYi5yZXF1ZXN0LkhUVFBIYW5kbGVyKToKICAgICAgICAgICAgIGRlZiBodHRwX29wZW4oc2VsZiwgcmVxKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kb19vcGVuKEhUVFBDb25uZWN0aW9uQ2FjaGUsIHJlcSkKIApAQCAtMTM5LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIC0gZ2V0dXJsKCk6IHJldHVybiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBVUkwKICAgICAgICAgICAgICAgICAgICAgLSBjb2RlOiBIVFRQIHN0YXR1cyBjb2RlCiAgICAgICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICAgICAgaG9zdCA9IHJlcS5nZXRfaG9zdCgpCisgICAgICAgICAgICAgICAgaG9zdCA9IHJlcS5ob3N0CiAgICAgICAgICAgICAgICAgaWYgbm90IGhvc3Q6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVybGxsaWIyLlVSTEVycm9yKCdubyBob3N0IGdpdmVuJykKIApAQCAtMTQ3LDcgKzE3NSw3IEBACiAgICAgICAgICAgICAgICAgaC5zZXRfZGVidWdsZXZlbChzZWxmLl9kZWJ1Z2xldmVsKQogCiAgICAgICAgICAgICAgICAgaGVhZGVycyA9IGRpY3QocmVxLnVucmVkaXJlY3RlZF9oZHJzKQotICAgICAgICAgICAgICAgIGhlYWRlcnMudXBkYXRlKGRpY3QoKGssIHYpIGZvciBrLCB2IGluIHJlcS5oZWFkZXJzLml0ZW1zKCkKKyAgICAgICAgICAgICAgICBoZWFkZXJzLnVwZGF0ZShkaWN0KChrLCB2KSBmb3IgaywgdiBpbiBsaXN0KHJlcS5oZWFkZXJzLml0ZW1zKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gaGVhZGVycykpCiAKICAgICAgICAgICAgICAgICAjIFdlIHdhbnQgdG8gbWFrZSBhbiBIVFRQLzEuMSByZXF1ZXN0LCBidXQgdGhlIGFkZGluZm91cmwKQEAgLTE2NCw3ICsxOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyJDb25uZWN0aW9uIl0gPSAiS2VlcC1BbGl2ZSIgIyBXb3JrcyBmb3IgSFRUUC8xLjAKIAogICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBkaWN0KAotICAgICAgICAgICAgICAgICAgICAobmFtZS50aXRsZSgpLCB2YWwpIGZvciBuYW1lLCB2YWwgaW4gaGVhZGVycy5pdGVtcygpKQorICAgICAgICAgICAgICAgICAgICAobmFtZS50aXRsZSgpLCB2YWwpIGZvciBuYW1lLCB2YWwgaW4gbGlzdChoZWFkZXJzLml0ZW1zKCkpKQogCiAgICAgICAgICAgICAgICAgaWYgcmVxLl90dW5uZWxfaG9zdDoKICAgICAgICAgICAgICAgICAgICAgdHVubmVsX2hlYWRlcnMgPSB7fQpAQCAtMTc3LDEyICsyMDUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgaC5zZXRfdHVubmVsKHJlcS5fdHVubmVsX2hvc3QsIGhlYWRlcnM9dHVubmVsX2hlYWRlcnMpCiAKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGgucmVxdWVzdChyZXEuZ2V0X21ldGhvZCgpLCByZXEuZ2V0X3NlbGVjdG9yKCksIHJlcS5kYXRhLCBoZWFkZXJzKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjogIyBYWFggd2hhdCBlcnJvcj8KKyAgICAgICAgICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5zZWxlY3RvciwgcmVxLmRhdGEsIGhlYWRlcnMpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6ICMgWFhYIHdoYXQgZXJyb3I/CiAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgY2xvc2UgY29ubmVjdGlvbiB3aGVuIGNhY2hlIGlzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICByYWlzZSB1cmxsaWIyLlVSTEVycm9yKGVycikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdXJsbGliLmVycm9yLlVSTEVycm9yKGVycikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZShidWZmZXJpbmc9VHJ1ZSkKQEAgLTIyMiw3ICsyNTAsNyBAQAogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3AKIAotICAgICAgICBjbGFzcyBIVFRQTWV0aG9kRmFsbGJhY2sodXJsbGliMi5CYXNlSGFuZGxlcik6CisgICAgICAgIGNsYXNzIEhUVFBNZXRob2RGYWxsYmFjayh1cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlcik6CiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIEZhbGxiYWNrIHRvIEdFVCBpZiBIRUFEIGlzIG5vdCBhbGxvd2VkICg0MDUgSFRUUCBlcnJvcikKICAgICAgICAgICAgICIiIgpAQCAtMjMwLDExICsyNTgsMTEgQEAKICAgICAgICAgICAgICAgICBmcC5yZWFkKCkKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCiAKLSAgICAgICAgICAgICAgICBuZXdoZWFkZXJzID0gZGljdCgoayx2KSBmb3Igayx2IGluIHJlcS5oZWFkZXJzLml0ZW1zKCkKKyAgICAgICAgICAgICAgICBuZXdoZWFkZXJzID0gZGljdCgoayx2KSBmb3Igayx2IGluIGxpc3QocmVxLmhlYWRlcnMuaXRlbXMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrLmxvd2VyKCkgbm90IGluICgiY29udGVudC1sZW5ndGgiLCAiY29udGVudC10eXBlIikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50Lm9wZW4odXJsbGliMi5SZXF1ZXN0KHJlcS5nZXRfZnVsbF91cmwoKSwKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQub3Blbih1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHJlcS5nZXRfZnVsbF91cmwoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1uZXdoZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5fcmVxX2hvc3Q9cmVxLmdldF9vcmlnaW5fcmVxX2hvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0PXJlcS5vcmlnaW5fcmVxX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudmVyaWZpYWJsZT1UcnVlKSkKIAogICAgICAgICAgICAgIiIiCkBAIC0yNDksMzggKzI3Nyw0OSBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBodHRwX2Vycm9yXzQwNiA9IGh0dHBfZXJyb3JfNDA1CiAKLSAgICAgICAgY2xhc3MgRml4ZWRIVFRQUmVkaXJlY3RIYW5kbGVyKHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlcik6CisgICAgICAgIGNsYXNzIEZpeGVkSFRUUFJlZGlyZWN0SGFuZGxlcih1cmxsaWIucmVxdWVzdC5IVFRQUmVkaXJlY3RIYW5kbGVyKToKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyIHJlc2V0cyB0aGUgbWV0aG9kIHRvIEdFVCBvbiByZWRpcmVjdCwKICAgICAgICAgICAgIHdoZW4gd2Ugd2FudCB0byBmb2xsb3cgcmVkaXJlY3RzIHVzaW5nIHRoZSBvcmlnaW5hbCBtZXRob2QuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGRlZiByZWRpcmVjdF9yZXF1ZXN0KHNlbGYsIHJlcSwgZnAsIGNvZGUsIG1zZywgaGVhZGVycywgbmV3dXJsKToKLSAgICAgICAgICAgICAgICBuZXdyZXEgPSB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIucmVkaXJlY3RfcmVxdWVzdChzZWxmLCByZXEsIGZwLCBjb2RlLCBtc2csIGhlYWRlcnMsIG5ld3VybCkKKyAgICAgICAgICAgICAgICBuZXdyZXEgPSB1cmxsaWIucmVxdWVzdC5IVFRQUmVkaXJlY3RIYW5kbGVyLnJlZGlyZWN0X3JlcXVlc3Qoc2VsZiwgcmVxLCBmcCwgY29kZSwgbXNnLCBoZWFkZXJzLCBuZXd1cmwpCiAgICAgICAgICAgICAgICAgbmV3cmVxLmdldF9tZXRob2QgPSBsYW1iZGE6IHJlcS5nZXRfbWV0aG9kKCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3cmVxCiAgICAgICAgIGV4cG9ydGVkX3Byb3hpZXMgPSBleHBvcnRfcHJveGllcyhkKQogCiAgICAgICAgIGhhbmRsZXJzID0gW0ZpeGVkSFRUUFJlZGlyZWN0SGFuZGxlciwgSFRUUE1ldGhvZEZhbGxiYWNrXQogICAgICAgICBpZiBleHBvcnRfcHJveGllczoKLSAgICAgICAgICAgIGhhbmRsZXJzLmFwcGVuZCh1cmxsaWIyLlByb3h5SGFuZGxlcigpKQorICAgICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKHVybGxpYi5yZXF1ZXN0LlByb3h5SGFuZGxlcigpKQogICAgICAgICBoYW5kbGVycy5hcHBlbmQoQ2FjaGVIVFRQSGFuZGxlcigpKQogICAgICAgICAjIFhYWDogU2luY2UgUHl0aG9uIDIuNy45IHNzbCBjZXJ0IHZhbGlkYXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0CiAgICAgICAgICMgc2VlIFBFUC0wNDc2LCB0aGlzIGNhdXNlcyB2ZXJpZmljYXRpb24gZXJyb3JzIG9uIHNvbWUgaHR0cHMgc2VydmVycwogICAgICAgICAjIHNvIGRpc2FibGUgYnkgZGVmYXVsdC4KICAgICAgICAgaW1wb3J0IHNzbAogICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ19jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0Jyk6Ci0gICAgICAgICAgICBoYW5kbGVycy5hcHBlbmQodXJsbGliMi5IVFRQU0hhbmRsZXIoY29udGV4dD1zc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKSkpCi0gICAgICAgIG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKCpoYW5kbGVycykKKyAgICAgICAgICAgIGhhbmRsZXJzLmFwcGVuZCh1cmxsaWIucmVxdWVzdC5IVFRQU0hhbmRsZXIoY29udGV4dD1zc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKSkpCisgICAgICAgIG9wZW5lciA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcigqaGFuZGxlcnMpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdXJpID0gdWQudXJsLnNwbGl0KCI7IilbMF0KLSAgICAgICAgICAgIHIgPSB1cmxsaWIyLlJlcXVlc3QodXJpKQorICAgICAgICAgICAgciA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJpKQogICAgICAgICAgICAgci5nZXRfbWV0aG9kID0gbGFtYmRhOiAiSEVBRCIKKworICAgICAgICAgICAgaWYgdWQudXNlcjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgYmFzZTY0CisgICAgICAgICAgICAgICAgZW5jb2RldXNlciA9IGJhc2U2NC5iNjRlbmNvZGUodWQudXNlci5lbmNvZGUoJ3V0Zi04JykpLmRlY29kZSgidXRmLTgiKQorICAgICAgICAgICAgICAgIGF1dGhoZWFkZXIgPSAgIkJhc2ljICVzIiAlIGVuY29kZXVzZXIKKyAgICAgICAgICAgICAgICByLmFkZF9oZWFkZXIoIkF1dGhvcml6YXRpb24iLCBhdXRoaGVhZGVyKQorCiAgICAgICAgICAgICBvcGVuZXIub3BlbihyKQotICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlOgotICAgICAgICAgICAgIyBkZWJ1ZyBmb3Igbm93IHRvIGF2b2lkIHNwYW1taW5nIHRoZSBsb2dzIGluIGUuZy4gcmVtb3RlIHNzdGF0ZSBzZWFyY2hlcwotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJjaGVja3N0YXR1cygpIHVybG9wZW4gZmFpbGVkOiAlcyIgJSBlKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuVVJMRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIHRyeV9hZ2FpbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImNoZWNrc3RhdHVzOiB0cnlpbmcgYWdhaW4iKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoZWNrc3RhdHVzKGZldGNoLCB1ZCwgZCwgRmFsc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZGVidWcgZm9yIG5vdyB0byBhdm9pZCBzcGFtbWluZyB0aGUgbG9ncyBpbiBlLmcuIHJlbW90ZSBzc3RhdGUgc2VhcmNoZXMKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImNoZWNrc3RhdHVzKCkgdXJsb3BlbiBmYWlsZWQ6ICVzIiAlIGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgX3BhcnNlX3BhdGgoc2VsZiwgcmVnZXgsIHMpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21haW4ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weQppbmRleCBlMzAyMTczLi5mMmY1OWY2IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weQpAQCAtMjcsNiArMjcsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgZmNudGwKIAogaW1wb3J0IGJiCiBmcm9tIGJiIGltcG9ydCBldmVudApAQCAtMTAwLDExICsxMDEsMTIgQEAKICAgICAgICAgIyBEeW5hbWljYWxseSBsb2FkIHRoZSBVSSBiYXNlZCBvbiB0aGUgdWkgbmFtZS4gQWx0aG91Z2ggd2UKICAgICAgICAgIyBzdWdnZXN0IGEgZml4ZWQgc2V0IHRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIGZsZXhpYmlsaXR5IGluIHdoaWNoCiAgICAgICAgICMgb25lcyBhcmUgYXZhaWxhYmxlLgotICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKHBrZy5fX25hbWVfXywgZnJvbWxpc3QgPSBbbW9kdWxlbmFtZV0pCisgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18ocGtnLl9fbmFtZV9fLCBmcm9tbGlzdD1bbW9kdWxlbmFtZV0pCiAgICAgICAgIHJldHVybiBnZXRhdHRyKG1vZHVsZSwgbW9kdWxlbmFtZSkKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbignRkFUQUw6IFVuYWJsZSB0byBpbXBvcnQgZXh0ZW5zaW9uIG1vZHVsZSAiJXMiIGZyb20gJXMuIFZhbGlkIGV4dGVuc2lvbiBtb2R1bGVzOiAlcycgJSAobW9kdWxlbmFtZSwgcGtnLl9fbmFtZV9fLCBwcmVzZW50X29wdGlvbnMobGlzdF9leHRlbnNpb25fbW9kdWxlcyhwa2csIGNoZWNrYXR0cikpKSkKLQorICAgICAgICBtb2R1bGVzID0gcHJlc2VudF9vcHRpb25zKGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMocGtnLCBjaGVja2F0dHIpKQorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oJ0ZBVEFMOiBVbmFibGUgdG8gaW1wb3J0IGV4dGVuc2lvbiBtb2R1bGUgIiVzIiBmcm9tICVzLiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFsaWQgZXh0ZW5zaW9uIG1vZHVsZXM6ICVzJyAlIChtb2R1bGVuYW1lLCBwa2cuX19uYW1lX18sIG1vZHVsZXMpKQogCiAjIERpc3BsYXkgYml0YmFrZS9PRSB3YXJuaW5ncyB2aWEgdGhlIEJpdEJha2UuV2FybmluZ3MgbG9nZ2VyLCBpZ25vcmluZyBvdGhlcnMiIiIKIHdhcm5sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5XYXJuaW5ncyIpCkBAIC0xMTUsNyArMTE3LDcgQEAKICAgICAgICAgICAgIF93YXJuaW5nc19zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZSwgbGluZSkKICAgICBlbHNlOgogICAgICAgICBzID0gd2FybmluZ3MuZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubykKLSAgICAgICAgd2FybmxvZy53YXJuKHMpCisgICAgICAgIHdhcm5sb2cud2FybmluZyhzKQogCiB3YXJuaW5ncy5zaG93d2FybmluZyA9IF9zaG93d2FybmluZwogd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIpCkBAIC0xMjksMTM2ICsxMzEsMTg5IEBACiAKICAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKICAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAotICAgICAgICAgICAgZm9ybWF0dGVyID0gQml0YmFrZUhlbHBGb3JtYXR0ZXIoKSwKLSAgICAgICAgICAgIHZlcnNpb24gPSAiQml0QmFrZSBCdWlsZCBUb29sIENvcmUgdmVyc2lvbiAlcyIgJSBiYi5fX3ZlcnNpb25fXywKLSAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgW29wdGlvbnNdIFtyZWNpcGVuYW1lL3RhcmdldCByZWNpcGU6ZG9fdGFzayAuLi5dCisgICAgICAgICAgICBmb3JtYXR0ZXI9Qml0YmFrZUhlbHBGb3JtYXR0ZXIoKSwKKyAgICAgICAgICAgIHZlcnNpb249IkJpdEJha2UgQnVpbGQgVG9vbCBDb3JlIHZlcnNpb24gJXMiICUgYmIuX192ZXJzaW9uX18sCisgICAgICAgICAgICB1c2FnZT0iIiIlcHJvZyBbb3B0aW9uc10gW3JlY2lwZW5hbWUvdGFyZ2V0IHJlY2lwZTpkb190YXNrIC4uLl0KIAogICAgIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzayAoZGVmYXVsdCBpcyAnYnVpbGQnKSBmb3IgYSBnaXZlbiBzZXQgb2YgdGFyZ2V0IHJlY2lwZXMgKC5iYiBmaWxlcykuCiAgICAgSXQgaXMgYXNzdW1lZCB0aGVyZSBpcyBhIGNvbmYvYmJsYXllcnMuY29uZiBhdmFpbGFibGUgaW4gY3dkIG9yIGluIEJCUEFUSCB3aGljaAogICAgIHdpbGwgcHJvdmlkZSB0aGUgbGF5ZXIsIEJCRklMRVMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIiIiKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYiIsICItLWJ1aWxkZmlsZSIsIGhlbHAgPSAiRXhlY3V0ZSB0YXNrcyBmcm9tIGEgc3BlY2lmaWMgLmJiIHJlY2lwZSBkaXJlY3RseS4gV0FSTklORzogRG9lcyBub3QgaGFuZGxlIGFueSBkZXBlbmRlbmNpZXMgZnJvbSBvdGhlciByZWNpcGVzLiIsCi0gICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJidWlsZGZpbGUiLCBkZWZhdWx0ID0gTm9uZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYnVpbGRmaWxlIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ1aWxkZmlsZSIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRXhlY3V0ZSB0YXNrcyBmcm9tIGEgc3BlY2lmaWMgLmJiIHJlY2lwZSBkaXJlY3RseS4gV0FSTklORzogRG9lcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBoYW5kbGUgYW55IGRlcGVuZGVuY2llcyBmcm9tIG90aGVyIHJlY2lwZXMuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWsiLCAiLS1jb250aW51ZSIsIGhlbHAgPSAiQ29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlIHRhcmdldCB0aGF0IGZhaWxlZCBhbmQgYW55dGhpbmcgZGVwZW5kaW5nIG9uIGl0IGNhbm5vdCBiZSBidWlsdCwgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aWxsIGJlIGJ1aWx0IGJlZm9yZSBzdG9wcGluZy4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV9mYWxzZSIsIGRlc3QgPSAiYWJvcnQiLCBkZWZhdWx0ID0gVHJ1ZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1rIiwgIi0tY29udGludWUiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iYWJvcnQiLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYW4gZXJyb3IuIFdoaWxlIHRoZSB0YXJnZXQgdGhhdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCBhbmQgYW55dGhpbmcgZGVwZW5kaW5nIG9uIGl0IGNhbm5vdCBiZSBidWlsdCwgYXMgbXVjaCBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc3NpYmxlIHdpbGwgYmUgYnVpbHQgYmVmb3JlIHN0b3BwaW5nLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tdHJ5YWx0Y29uZmlncyIsIGhlbHAgPSAiQ29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZSBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAidHJ5YWx0Y29uZmlncyIsIGRlZmF1bHQgPSBGYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tdHJ5YWx0Y29uZmlncyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InRyeWFsdGNvbmZpZ3MiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJDb250aW51ZSB3aXRoIGJ1aWxkcyBieSB0cnlpbmcgdG8gdXNlIGFsdGVybmF0aXZlIHByb3ZpZGVycyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIHBvc3NpYmxlLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9yY2UiLCBoZWxwID0gIkZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nIGFueSBleGlzdGluZyBzdGFtcCBmaWxlKS4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJmb3JjZSIsIGRlZmF1bHQgPSBGYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9yY2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJmb3JjZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nIGFueSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4aXN0aW5nIHN0YW1wIGZpbGUpLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY21kIiwgaGVscCA9ICJTcGVjaWZ5IHRoZSB0YXNrIHRvIGV4ZWN1dGUuIFRoZSBleGFjdCBvcHRpb25zIGF2YWlsYWJsZSBkZXBlbmQgb24gdGhlIG1ldGFkYXRhLiBTb21lIGV4YW1wbGVzIG1pZ2h0IGJlICdjb21waWxlJyBvciAncG9wdWxhdGVfc3lzcm9vdCcgb3IgJ2xpc3R0YXNrcycgbWF5IGdpdmUgYSBsaXN0IG9mIHRoZSB0YXNrcyBhdmFpbGFibGUuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImNtZCIpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNtZCIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJjbWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTcGVjaWZ5IHRoZSB0YXNrIHRvIGV4ZWN1dGUuIFRoZSBleGFjdCBvcHRpb25zIGF2YWlsYWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcGVuZCBvbiB0aGUgbWV0YWRhdGEuIFNvbWUgZXhhbXBsZXMgbWlnaHQgYmUgJ2NvbXBpbGUnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb3IgJ3BvcHVsYXRlX3N5c3Jvb3QnIG9yICdsaXN0dGFza3MnIG1heSBnaXZlIGEgbGlzdCBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB0YXNrcyBhdmFpbGFibGUuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUMiLCAiLS1jbGVhci1zdGFtcCIsIGhlbHAgPSAiSW52YWxpZGF0ZSB0aGUgc3RhbXAgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayBzdWNoIGFzICdjb21waWxlJyBhbmQgdGhlbiBydW4gdGhlIGRlZmF1bHQgdGFzayBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQocykuIiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJpbnZhbGlkYXRlX3N0YW1wIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1DIiwgIi0tY2xlYXItc3RhbXAiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0iaW52YWxpZGF0ZV9zdGFtcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkludmFsaWRhdGUgdGhlIHN0YW1wIGZvciB0aGUgc3BlY2lmaWVkIHRhc2sgc3VjaCBhcyAnY29tcGlsZScgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgdGhlbiBydW4gdGhlIGRlZmF1bHQgdGFzayBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQocykuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yZWFkIiwgaGVscCA9ICJSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLiIsCi0gICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAicHJlZmlsZSIsIGRlZmF1bHQgPSBbXSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1yIiwgIi0tcmVhZCIsIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0icHJlZmlsZSIsIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVIiLCAiLS1wb3N0cmVhZCIsIGhlbHAgPSAiUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYWZ0ZXIgYml0YmFrZS5jb25mLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJhcHBlbmQiLCBkZXN0ID0gInBvc3RmaWxlIiwgZGVmYXVsdCA9IFtdKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVIiLCAiLS1wb3N0cmVhZCIsIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0icG9zdGZpbGUiLCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhZnRlciBiaXRiYWtlLmNvbmYuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJPdXRwdXQgbW9yZSBsb2cgbWVzc2FnZSBkYXRhIHRvIHRoZSB0ZXJtaW5hbC4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJ2ZXJib3NlIiwgZGVmYXVsdCA9IEZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idmVyYm9zZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCBtb3JlIGxvZyBtZXNzYWdlIGRhdGEgdG8gdGhlIHRlcm1pbmFsLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBoZWxwID0gIkluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZSB0aGFuIG9uY2UuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiY291bnQiLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQgPSAwKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGFjdGlvbj0iY291bnQiLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQ9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlIHRoYW4gb25jZS4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLWRyeS1ydW4iLCBoZWxwID0gIkRvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJkcnlfcnVuIiwgZGVmYXVsdCA9IEZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXEiLCAiLS1xdWlldCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InF1aWV0IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iT3V0cHV0IGxlc3MgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVMiLCAiLS1kdW1wLXNpZ25hdHVyZXMiLCBoZWxwID0gIkR1bXAgb3V0IHRoZSBzaWduYXR1cmUgY29uc3RydWN0aW9uIGluZm9ybWF0aW9uLCB3aXRoIG5vIHRhc2sgZXhlY3V0aW9uLiBUaGUgU0lHTkFUVVJFX0hBTkRMRVIgcGFyYW1ldGVyIGlzIHBhc3NlZCB0byB0aGUgaGFuZGxlci4gVHdvIGNvbW1vbiB2YWx1ZXMgYXJlIG5vbmUgYW5kIHByaW50ZGlmZiBidXQgdGhlIGhhbmRsZXIgbWF5IGRlZmluZSBtb3JlL2xlc3MuIG5vbmUgbWVhbnMgb25seSBkdW1wIHRoZSBzaWduYXR1cmUsIHByaW50ZGlmZiBtZWFucyBjb21wYXJlIHRoZSBkdW1wZWQgc2lnbmF0dXJlIHdpdGggdGhlIGNhY2hlZCBvbmUuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJkdW1wX3NpZ25hdHVyZXMiLCBkZWZhdWx0ID0gW10sIG1ldGF2YXI9IlNJR05BVFVSRV9IQU5ETEVSIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tZHJ5LXJ1biIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImRyeV9ydW4iLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24ndCBleGVjdXRlLCBqdXN0IGdvIHRocm91Z2ggdGhlIG1vdGlvbnMuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1wYXJzZS1vbmx5IiwgaGVscCA9ICJRdWl0IGFmdGVyIHBhcnNpbmcgdGhlIEJCIHJlY2lwZXMuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAicGFyc2Vfb25seSIsIGRlZmF1bHQgPSBGYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1TIiwgIi0tZHVtcC1zaWduYXR1cmVzIiwgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJkdW1wX3NpZ25hdHVyZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBtZXRhdmFyPSJTSUdOQVRVUkVfSEFORExFUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkR1bXAgb3V0IHRoZSBzaWduYXR1cmUgY29uc3RydWN0aW9uIGluZm9ybWF0aW9uLCB3aXRoIG5vIHRhc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGVjdXRpb24uIFRoZSBTSUdOQVRVUkVfSEFORExFUiBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbmRsZXIuIFR3byBjb21tb24gdmFsdWVzIGFyZSBub25lIGFuZCBwcmludGRpZmYgYnV0IHRoZSBoYW5kbGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF5IGRlZmluZSBtb3JlL2xlc3MuIG5vbmUgbWVhbnMgb25seSBkdW1wIHRoZSBzaWduYXR1cmUsIHByaW50ZGlmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1lYW5zIGNvbXBhcmUgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUgY2FjaGVkIG9uZS4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXNob3ctdmVyc2lvbnMiLCBoZWxwID0gIlNob3cgY3VycmVudCBhbmQgcHJlZmVycmVkIHZlcnNpb25zIG9mIGFsbCByZWNpcGVzLiIsCi0gICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInNob3dfdmVyc2lvbnMiLCBkZWZhdWx0ID0gRmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXBhcnNlLW9ubHkiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJwYXJzZV9vbmx5IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0tZW52aXJvbm1lbnQiLCBoZWxwID0gIlNob3cgdGhlIGdsb2JhbCBvciBwZXItcmVjaXBlIGVudmlyb25tZW50IGNvbXBsZXRlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdmFyaWFibGVzIHdlcmUgc2V0L2NoYW5nZWQuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2hvd19lbnZpcm9ubWVudCIsIGRlZmF1bHQgPSBGYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2hvdy12ZXJzaW9ucyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InNob3dfdmVyc2lvbnMiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTaG93IGN1cnJlbnQgYW5kIHByZWZlcnJlZCB2ZXJzaW9ucyBvZiBhbGwgcmVjaXBlcy4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZyIsICItLWdyYXBodml6IiwgaGVscCA9ICJTYXZlIGRlcGVuZGVuY3kgdHJlZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXRzIGluIHRoZSBkb3Qgc3ludGF4LiIsCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJkb3RfZ3JhcGgiLCBkZWZhdWx0ID0gRmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZSIsICItLWVudmlyb25tZW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ic2hvd19lbnZpcm9ubWVudCIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNob3cgdGhlIGdsb2JhbCBvciBwZXItcmVjaXBlIGVudmlyb25tZW50IGNvbXBsZXRlIHdpdGggaW5mb3JtYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhYm91dCB3aGVyZSB2YXJpYWJsZXMgd2VyZSBzZXQvY2hhbmdlZC4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSSIsICItLWlnbm9yZS1kZXBzIiwgaGVscCA9ICIiIkFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5IHByb3ZpZGVkIChlcXVpdmFsZW50IHRvIEFTU1VNRV9QUk9WSURFRCkuIFVzZWZ1bCB0byBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nIiIiLAotICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJleHRyYV9hc3N1bWVfcHJvdmlkZWQiLCBkZWZhdWx0ID0gW10pCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZyIsICItLWdyYXBodml6IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZG90X2dyYXBoIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXJnZXRzIGluIHRoZSBkb3Qgc3ludGF4LiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbG9nLWRvbWFpbnMiLCBoZWxwID0gIiIiU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucyIiIiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAiZGVidWdfZG9tYWlucyIsIGRlZmF1bHQgPSBbXSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1JIiwgIi0taWdub3JlLWRlcHMiLCBhY3Rpb249ImFwcGVuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImV4dHJhX2Fzc3VtZV9wcm92aWRlZCIsIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5IHByb3ZpZGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGVxdWl2YWxlbnQgdG8gQVNTVU1FX1BST1ZJREVEKS4gVXNlZnVsIHRvIG1ha2UgZGVwZW5kZW5jeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdyYXBocyBtb3JlIGFwcGVhbGluZyIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1QIiwgIi0tcHJvZmlsZSIsIGhlbHAgPSAiUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLiIsCi0gICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInByb2ZpbGUiLCBkZWZhdWx0ID0gRmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxvZy1kb21haW5zIiwgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJkZWJ1Z19kb21haW5zIiwgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucyIpCiAKLSAgICAgICAgZW52X3VpID0gb3MuZW52aXJvbi5nZXQoJ0JJVEJBS0VfVUknLCBOb25lKQotICAgICAgICBkZWZhdWx0X3VpID0gZW52X3VpIG9yICdrbm90dHknCi0gICAgICAgICMgQENIT0lDRVNAIGlzIHN1YnN0aXR1dGVkIG91dCBieSBCaXRiYWtlSGVscEZvcm1hdHRlciBhYm92ZQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXUiLCAiLS11aSIsIGhlbHAgPSAiVGhlIHVzZXIgaW50ZXJmYWNlIHRvIHVzZSAoQENIT0lDRVNAIC0gZGVmYXVsdCAlZGVmYXVsdCkuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0idWkiLCBkZWZhdWx0PWRlZmF1bHRfdWkpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUCIsICItLXByb2ZpbGUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJwcm9maWxlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLiIpCiAKICAgICAgICAgIyBAQ0hPSUNFU0AgaXMgc3Vic3RpdHV0ZWQgb3V0IGJ5IEJpdGJha2VIZWxwRm9ybWF0dGVyIGFib3ZlCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXNlcnZlcnR5cGUiLCBoZWxwID0gIkNob29zZSB3aGljaCBzZXJ2ZXIgdHlwZSB0byB1c2UgKEBDSE9JQ0VTQCAtIGRlZmF1bHQgJWRlZmF1bHQpLiIsCi0gICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJzZXJ2ZXJ0eXBlIiwgZGVmYXVsdCA9ICJwcm9jZXNzIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi11IiwgIi0tdWkiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0idWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PW9zLmVudmlyb24uZ2V0KCdCSVRCQUtFX1VJJywgJ2tub3R0eScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChAQ0hPSUNFU0AgLSBkZWZhdWx0ICVkZWZhdWx0KS4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS10b2tlbiIsIGhlbHAgPSAiU3BlY2lmeSB0aGUgY29ubmVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHdoZW4gY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInhtbHJwY3Rva2VuIikKKyAgICAgICAgIyBAQ0hPSUNFU0AgaXMgc3Vic3RpdHV0ZWQgb3V0IGJ5IEJpdGJha2VIZWxwRm9ybWF0dGVyIGFib3ZlCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXNlcnZlcnR5cGUiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0ic2VydmVydHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9WyJwcm9jZXNzIiwgInhtbHJwYyJdWyJCQlNFUlZFUiIgaW4gb3MuZW52aXJvbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNob29zZSB3aGljaCBzZXJ2ZXIgdHlwZSB0byB1c2UgKEBDSE9JQ0VTQCAtIGRlZmF1bHQgJWRlZmF1bHQpLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJldmlzaW9ucy1jaGFuZ2VkIiwgaGVscCA9ICJTZXQgdGhlIGV4aXQgY29kZSBkZXBlbmRpbmcgb24gd2hldGhlciB1cHN0cmVhbSBmbG9hdGluZyByZXZpc2lvbnMgaGF2ZSBjaGFuZ2VkIG9yIG5vdC4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJyZXZpc2lvbnNfY2hhbmdlZCIsIGRlZmF1bHQgPSBGYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXRva2VuIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InhtbHJwY3Rva2VuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1vcy5lbnZpcm9uLmdldCgiQkJUT0tFTiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTcGVjaWZ5IHRoZSBjb25uZWN0aW9uIHRva2VuIHRvIGJlIHVzZWQgd2hlbiBjb25uZWN0aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gYSByZW1vdGUgc2VydmVyLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXNlcnZlci1vbmx5IiwgaGVscCA9ICJSdW4gYml0YmFrZSB3aXRob3V0IGEgVUksIG9ubHkgc3RhcnRpbmcgYSBzZXJ2ZXIgKGNvb2tlcikgcHJvY2Vzcy4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJzZXJ2ZXJfb25seSIsIGRlZmF1bHQgPSBGYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJldmlzaW9ucy1jaGFuZ2VkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icmV2aXNpb25zX2NoYW5nZWQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTZXQgdGhlIGV4aXQgY29kZSBkZXBlbmRpbmcgb24gd2hldGhlciB1cHN0cmVhbSBmbG9hdGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1CIiwgIi0tYmluZCIsIGhlbHAgPSAiVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImJpbmQiLCBkZWZhdWx0ID0gRmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1zZXJ2ZXItb25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InNlcnZlcl9vbmx5IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUnVuIGJpdGJha2Ugd2l0aG91dCBhIFVJLCBvbmx5IHN0YXJ0aW5nIGEgc2VydmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGNvb2tlcikgcHJvY2Vzcy4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1uby1zZXRzY2VuZSIsIGhlbHAgPSAiRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MuIHNzdGF0ZSB3aWxsIGJlIGlnbm9yZWQgYW5kIGV2ZXJ5dGhpbmcgbmVlZGVkLCBidWlsdC4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJub3NldHNjZW5lIiwgZGVmYXVsdCA9IEZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tZm9yZWdyb3VuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJ1biBiaXRiYWtlIHNlcnZlciBpbiBmb3JlZ3JvdW5kLiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXNldHNjZW5lLW9ubHkiLCBoZWxwID0gIk9ubHkgcnVuIHNldHNjZW5lIHRhc2tzLCBkb24ndCBydW4gYW55IHJlYWwgdGFza3MuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2V0c2NlbmVvbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUIiLCAiLS1iaW5kIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJpbmQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1yZW1vdGUtc2VydmVyIiwgaGVscCA9ICJDb25uZWN0IHRvIHRoZSBzcGVjaWZpZWQgc2VydmVyLiIsCi0gICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJyZW1vdGVfc2VydmVyIiwgZGVmYXVsdCA9IEZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVQiLCAiLS1pZGxlLXRpbWVvdXQiLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1pbnQob3MuZW52aXJvbi5nZXQoIkJCVElNRU9VVCIsICIwIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTZXQgdGltZW91dCB0byB1bmxvYWQgYml0YmFrZSBzZXJ2ZXIgZHVlIHRvIGluYWN0aXZpdHkiKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbSIsICItLWtpbGwtc2VydmVyIiwgaGVscCA9ICJUZXJtaW5hdGUgdGhlIHJlbW90ZSBzZXJ2ZXIuIiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImtpbGxfc2VydmVyIiwgZGVmYXVsdCA9IEZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbm8tc2V0c2NlbmUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJub3NldHNjZW5lIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MuIHNzdGF0ZSB3aWxsIGJlIGlnbm9yZWQgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlcnl0aGluZyBuZWVkZWQsIGJ1aWx0LiIpCiAKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW9ic2VydmUtb25seSIsIGhlbHAgPSAiQ29ubmVjdCB0byBhIHNlcnZlciBhcyBhbiBvYnNlcnZpbmctb25seSBjbGllbnQuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAib2JzZXJ2ZV9vbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tc2V0c2NlbmUtb25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InNldHNjZW5lb25seSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik9ubHkgcnVuIHNldHNjZW5lIHRhc2tzLCBkb24ndCBydW4gYW55IHJlYWwgdGFza3MuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tc3RhdHVzLW9ubHkiLCBoZWxwID0gIkNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHJlbW90ZSBiaXRiYWtlIHNlcnZlci4iLAotICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJzdGF0dXNfb25seSIsIGRlZmF1bHQgPSBGYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJlbW90ZS1zZXJ2ZXIiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0icmVtb3RlX3NlcnZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9b3MuZW52aXJvbi5nZXQoIkJCU0VSVkVSIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXciLCAiLS13cml0ZS1sb2ciLCBoZWxwID0gIldyaXRlcyB0aGUgZXZlbnQgbG9nIG9mIHRoZSBidWlsZCB0byBhIGJpdGJha2UgZXZlbnQganNvbiBmaWxlLiBVc2UgJycgKGVtcHR5IHN0cmluZykgdG8gYXNzaWduIHRoZSBuYW1lIGF1dG9tYXRpY2FsbHkuIiwKLSAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gIndyaXRlZXZlbnRsb2ciKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLW0iLCAiLS1raWxsLXNlcnZlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImtpbGxfc2VydmVyIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLiIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW9ic2VydmUtb25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9Im9ic2VydmVfb25seSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNvbm5lY3QgdG8gYSBzZXJ2ZXIgYXMgYW4gb2JzZXJ2aW5nLW9ubHkgY2xpZW50LiIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXN0YXR1cy1vbmx5IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ic3RhdHVzX29ubHkiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSByZW1vdGUgYml0YmFrZSBzZXJ2ZXIuIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXciLCAiLS13cml0ZS1sb2ciLCBhY3Rpb249InN0b3JlIiwgZGVzdD0id3JpdGVldmVudGxvZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9b3MuZW52aXJvbi5nZXQoIkJCRVZFTlRMT0ciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iV3JpdGVzIHRoZSBldmVudCBsb2cgb2YgdGhlIGJ1aWxkIHRvIGEgYml0YmFrZSBldmVudCBqc29uIGZpbGUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICcnIChlbXB0eSBzdHJpbmcpIHRvIGFzc2lnbiB0aGUgbmFtZSBhdXRvbWF0aWNhbGx5LiIpCiAKICAgICAgICAgb3B0aW9ucywgdGFyZ2V0cyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAKLSAgICAgICAgIyBzb21lIGVudmlyb25tZW50YWwgdmFyaWFibGVzIHNldCBhbHNvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwotICAgICAgICBpZiAiQkJTRVJWRVIiIGluIG9zLmVudmlyb246Ci0gICAgICAgICAgICBvcHRpb25zLnNlcnZlcnR5cGUgPSAieG1scnBjIgotICAgICAgICAgICAgb3B0aW9ucy5yZW1vdGVfc2VydmVyID0gb3MuZW52aXJvblsiQkJTRVJWRVIiXQorICAgICAgICBpZiBvcHRpb25zLnF1aWV0IGFuZCBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBwYXJzZXIuZXJyb3IoIm9wdGlvbnMgLS1xdWlldCBhbmQgLS12ZXJib3NlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKQogCi0gICAgICAgIGlmICJCQlRPS0VOIiBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgb3B0aW9ucy54bWxycGN0b2tlbiA9IG9zLmVudmlyb25bIkJCVE9LRU4iXQorICAgICAgICBpZiBvcHRpb25zLnF1aWV0IGFuZCBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgcGFyc2VyLmVycm9yKCJvcHRpb25zIC0tcXVpZXQgYW5kIC0tZGVidWcgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpCiAKLSAgICAgICAgaWYgIkJCRVZFTlRMT0ciIGluIG9zLmVudmlyb246Ci0gICAgICAgICAgICBvcHRpb25zLndyaXRlZXZlbnRsb2cgPSBvcy5lbnZpcm9uWyJCQkVWRU5UTE9HIl0KKyAgICAgICAgIyB1c2UgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICBpZiAiQkJQUkVDT05GIiBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgb3B0aW9ucy5wcmVmaWxlLmFwcGVuZChvcy5lbnZpcm9uWyJCQlBSRUNPTkYiXSkKKworICAgICAgICBpZiAiQkJQT1NUQ09ORiIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIG9wdGlvbnMucG9zdGZpbGUuYXBwZW5kKG9zLmVudmlyb25bIkJCUE9TVENPTkYiXSkKIAogICAgICAgICAjIGZpbGwgaW4gcHJvcGVyIGxvZyBuYW1lIGlmIG5vdCBzdXBwbGllZAogICAgICAgICBpZiBvcHRpb25zLndyaXRlZXZlbnRsb2cgaXMgbm90IE5vbmUgYW5kIGxlbihvcHRpb25zLndyaXRlZXZlbnRsb2cpID09IDA6Ci0gICAgICAgICAgICBpbXBvcnQgZGF0ZXRpbWUKLSAgICAgICAgICAgIG9wdGlvbnMud3JpdGVldmVudGxvZyA9ICJiaXRiYWtlX2V2ZW50bG9nXyVzLmpzb24iICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoIiVZJW0lZCVIJU0lUyIpCisgICAgICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorICAgICAgICAgICAgZXZlbnRsb2cgPSAiYml0YmFrZV9ldmVudGxvZ18lcy5qc29uIiAlIGRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWSVtJWQlSCVNJVMiKQorICAgICAgICAgICAgb3B0aW9ucy53cml0ZWV2ZW50bG9nID0gZXZlbnRsb2cKIAogICAgICAgICAjIGlmIEJCU0VSVkVSIHNheXMgdG8gYXV0b2RldGVjdCwgbGV0J3MgZG8gdGhhdAogICAgICAgICBpZiBvcHRpb25zLnJlbW90ZV9zZXJ2ZXI6Ci0gICAgICAgICAgICBbaG9zdCwgcG9ydF0gPSBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIuc3BsaXQoIjoiLCAyKQotICAgICAgICAgICAgcG9ydCA9IGludChwb3J0KQorICAgICAgICAgICAgcG9ydCA9IC0xCisgICAgICAgICAgICBpZiBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIgIT0gJ2F1dG9zdGFydCc6CisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IG9wdGlvbnMucmVtb3RlX3NlcnZlci5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICAgICAgcG9ydCA9IGludChwb3J0KQogICAgICAgICAgICAgIyB1c2UgYXV0b21hdGljIHBvcnQgaWYgcG9ydCBzZXQgdG8gLTEsIG1lYW5zIHJlYWQgaXQgZnJvbQogICAgICAgICAgICAgIyB0aGUgYml0YmFrZS5sb2NrIGZpbGU7IHRoaXMgaXMgYSBiaXQgdHJpY2t5LCBidXQgd2UgYWx3YXlzIGV4cGVjdAogICAgICAgICAgICAgIyB0byBiZSBpbiB0aGUgYmFzZSBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5IGlmIHdlIG5lZWQgdG8gaGF2ZSBhCkBAIC0yNzUsMTggKzMzMCwyMCBAQAogICAgICAgICAgICAgICAgICAgICBsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVtb3RlX3NlcnZlciA9IHJlbW90ZWRlZgogICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCBiaXRiYWtlLmxvY2sgKCVzKSwgaW52YWxpZCBwb3J0IiAlIHN0cihlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3B0aW9ucy5yZW1vdGVfc2VydmVyICE9ICdhdXRvc3RhcnQnOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCBiaXRiYWtlLmxvY2sgKCVzKSwgaW52YWxpZCBwb3J0IiAlIHN0cihlKSkKIAogICAgICAgICByZXR1cm4gb3B0aW9ucywgdGFyZ2V0c1sxOl0KIAogCiBkZWYgc3RhcnRfc2VydmVyKHNlcnZlcm1vZHVsZSwgY29uZmlnUGFyYW1zLCBjb25maWd1cmF0aW9uLCBmZWF0dXJlcyk6CiAgICAgc2VydmVyID0gc2VydmVybW9kdWxlLkJpdEJha2VTZXJ2ZXIoKQotICAgIHNpbmdsZV91c2UgPSBub3QgY29uZmlnUGFyYW1zLnNlcnZlcl9vbmx5CisgICAgc2luZ2xlX3VzZSA9IG5vdCBjb25maWdQYXJhbXMuc2VydmVyX29ubHkgYW5kIG9zLmdldGVudignQkJTRVJWRVInKSAhPSAnYXV0b3N0YXJ0JwogICAgIGlmIGNvbmZpZ1BhcmFtcy5iaW5kOgogICAgICAgICAoaG9zdCwgcG9ydCkgPSBjb25maWdQYXJhbXMuYmluZC5zcGxpdCgnOicpCi0gICAgICAgIHNlcnZlci5pbml0U2VydmVyKChob3N0LCBpbnQocG9ydCkpLCBzaW5nbGVfdXNlKQotICAgICAgICBjb25maWd1cmF0aW9uLmludGVyZmFjZSA9IFsgc2VydmVyLnNlcnZlckltcGwuaG9zdCwgc2VydmVyLnNlcnZlckltcGwucG9ydCBdCisgICAgICAgIHNlcnZlci5pbml0U2VydmVyKChob3N0LCBpbnQocG9ydCkpLCBzaW5nbGVfdXNlPXNpbmdsZV91c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlkbGVfdGltZW91dD1jb25maWdQYXJhbXMuaWRsZV90aW1lb3V0KQorICAgICAgICBjb25maWd1cmF0aW9uLmludGVyZmFjZSA9IFtzZXJ2ZXIuc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXIuc2VydmVySW1wbC5wb3J0XQogICAgIGVsc2U6CiAgICAgICAgIHNlcnZlci5pbml0U2VydmVyKHNpbmdsZV91c2U9c2luZ2xlX3VzZSkKICAgICAgICAgY29uZmlndXJhdGlvbi5pbnRlcmZhY2UgPSBbXQpAQCAtMjk5LDIwICszNTYsMTcgQEAKICAgICAgICAgc2VydmVyLmFkZGNvb2tlcihjb29rZXIpCiAgICAgICAgIHNlcnZlci5zYXZlQ29ubmVjdGlvbkRldGFpbHMoKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQogICAgICAgICB3aGlsZSBoYXNhdHRyKHNlcnZlciwgImV2ZW50X3F1ZXVlIik6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IHF1ZXVlCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IFF1ZXVlIGFzIHF1ZXVlCisgICAgICAgICAgICBpbXBvcnQgcXVldWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBldmVudCA9IHNlcnZlci5ldmVudF9xdWV1ZS5nZXQoYmxvY2s9RmFsc2UpCiAgICAgICAgICAgICBleGNlcHQgKHF1ZXVlLkVtcHR5LCBJT0Vycm9yKToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgogICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCi0gICAgICAgIHJhaXNlIGV4Y19pbmZvWzFdLCBOb25lLCBleGNfaW5mb1syXQotICAgIHNlcnZlci5kZXRhY2goKQorICAgICAgICByYWlzZQorICAgIGlmIG5vdCBjb25maWdQYXJhbXMuZm9yZWdyb3VuZDoKKyAgICAgICAgc2VydmVyLmRldGFjaCgpCiAgICAgY29va2VyLmxvY2suY2xvc2UoKQogICAgIHJldHVybiBzZXJ2ZXIKIApAQCAtMzI4LDcgKzM4MiwxMCBAQAogICAgICMgdXBkYXRlcyB0byBsb2cgZmlsZXMgZm9yIHVzZSB3aXRoIHRhaWwKICAgICB0cnk6CiAgICAgICAgIGlmIHN5cy5zdGRvdXQubmFtZSA9PSAnPHN0ZG91dD4nOgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9zLmZkb3BlbihzeXMuc3Rkb3V0LmZpbGVubygpLCAndycsIDApCisgICAgICAgICAgICAjIFJlb3BlbiB3aXRoIE9fU1lOQyAodW5idWZmZXJlZCkKKyAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoc3lzLnN0ZG91dC5maWxlbm8oKSwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgICAgIGZsIHw9IG9zLk9fU1lOQworICAgICAgICAgICAgZmNudGwuZmNudGwoc3lzLnN0ZG91dC5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmwpCiAgICAgZXhjZXB0OgogICAgICAgICBwYXNzCiAKQEAgLTM0NSwxMCArNDAyLDIxIEBACiAgICAgICAgIGlmIG5vdCBjb25maWdQYXJhbXMuYmluZDoKICAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IFRoZSAnLS1zZXJ2ZXItb25seScgb3B0aW9uIHJlcXVpcmVzIGEgbmFtZS9hZGRyZXNzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gYmluZCB0byB3aXRoIHRoZSAtQiBvcHRpb24uXG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICNDaGVja2luZyB0aGF0IHRoZSBwb3J0IGlzIGEgbnVtYmVyCisgICAgICAgICAgICAgICAgaW50KGNvbmZpZ1BhcmFtcy5iaW5kLnNwbGl0KCI6IilbMV0pCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIkZBVEFMOiBNYWxmb3JtZWQgaG9zdDpwb3J0IGJpbmQgcGFyYW1ldGVyIikKICAgICAgICAgaWYgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6CiAgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBUaGUgJy0tc2VydmVyLW9ubHknIG9wdGlvbiBjb25mbGljdHMgd2l0aCAlcy5cbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGhlIEJCU0VSVkVSIGVudmlyb25tZW50IHZhcmlhYmxlIiBpZiAiQkJTRVJWRVIiIGluIG9zLmVudmlyb24gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICJ0aGUgJy0tcmVtb3RlLXNlcnZlcicgb3B0aW9uIiApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICJ0aGUgJy0tcmVtb3RlLXNlcnZlcicgb3B0aW9uIikpCisKKyAgICBlbGlmIGNvbmZpZ1BhcmFtcy5mb3JlZ3JvdW5kOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBUaGUgJy0tZm9yZWdyb3VuZCcgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggLS1zZXJ2ZXItb25seS5cbiIpCiAKICAgICBpZiBjb25maWdQYXJhbXMuYmluZCBhbmQgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6CiAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IElmICctQicgb3IgJy0tYmluZCcgaXMgZGVmaW5lZCwgd2UgbXVzdCAiCkBAIC0zNjMsNyArNDMxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0aW5nIHRvIGEgc2VydmVyLlxuIikKIAogICAgIGlmIGNvbmZpZ1BhcmFtcy5raWxsX3NlcnZlciBhbmQgbm90IGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyOgotICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiAnLS1raWxsLXNlcnZlcicgY2FuIG9ubHkgYmUgdXNlZCB0byB0ZXJtaW5hdGUgYSByZW1vdGUgc2VydmVyIikKKyAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogJy0ta2lsbC1zZXJ2ZXInIGNhbiBvbmx5IGJlIHVzZWQgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlcm1pbmF0ZSBhIHJlbW90ZSBzZXJ2ZXIiKQogCiAgICAgaWYgIkJCREVCVUciIGluIG9zLmVudmlyb246CiAgICAgICAgIGxldmVsID0gaW50KG9zLmVudmlyb25bIkJCREVCVUciXSkKQEAgLTM3MSw3ICs0NDAsNyBAQAogICAgICAgICAgICAgY29uZmlndXJhdGlvbi5kZWJ1ZyA9IGxldmVsCiAKICAgICBiYi5tc2cuaW5pdF9tc2djb25maWcoY29uZmlnUGFyYW1zLnZlcmJvc2UsIGNvbmZpZ3VyYXRpb24uZGVidWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5kZWJ1Z19kb21haW5zKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmRlYnVnX2RvbWFpbnMpCiAKICAgICAjIEVuc3VyZSBsb2dnaW5nIG1lc3NhZ2VzIGdldCBzZW50IHRvIHRoZSBVSSBhcyBldmVudHMKICAgICBoYW5kbGVyID0gYmIuZXZlbnQuTG9nSGFuZGxlcigpCkBAIC0zOTksOCArNDY4LDE3IEBACiAgICAgICAgIHNlcnZlciA9IHN0YXJ0X3NlcnZlcihzZXJ2ZXJtb2R1bGUsIGNvbmZpZ1BhcmFtcywgY29uZmlndXJhdGlvbiwgZmVhdHVyZXNldCkKICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQogICAgIGVsc2U6CisgICAgICAgIGlmIG9zLmdldGVudignQkJTRVJWRVInKSA9PSAnYXV0b3N0YXJ0JzoKKyAgICAgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyID09ICdhdXRvc3RhcnQnIG9yIFwKKyAgICAgICAgICAgICAgIG5vdCBzZXJ2ZXJtb2R1bGUuY2hlY2tfY29ubmVjdGlvbihjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciwgdGltZW91dD0yKToKKyAgICAgICAgICAgICAgICBjb25maWdQYXJhbXMuYmluZCA9ICdsb2NhbGhvc3Q6MCcKKyAgICAgICAgICAgICAgICBzcnYgPSBzdGFydF9zZXJ2ZXIoc2VydmVybW9kdWxlLCBjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzZXQpCisgICAgICAgICAgICAgICAgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXIgPSAnJXM6JWQnICUgdHVwbGUoY29uZmlndXJhdGlvbi5pbnRlcmZhY2UpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQorCiAgICAgICAgICMgd2Ugc3RhcnQgYSBzdHViIHNlcnZlciB0aGF0IGlzIGFjdHVhbGx5IGEgWE1MUlBDbGllbnQgdGhhdCBjb25uZWN0cyB0byBhIHJlYWwgc2VydmVyCi0gICAgICAgIHNlcnZlciA9IHNlcnZlcm1vZHVsZS5CaXRCYWtlWE1MUlBDQ2xpZW50KGNvbmZpZ1BhcmFtcy5vYnNlcnZlX29ubHksIGNvbmZpZ1BhcmFtcy54bWxycGN0b2tlbikKKyAgICAgICAgc2VydmVyID0gc2VydmVybW9kdWxlLkJpdEJha2VYTUxSUENDbGllbnQoY29uZmlnUGFyYW1zLm9ic2VydmVfb25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnUGFyYW1zLnhtbHJwY3Rva2VuKQogICAgICAgICBzZXJ2ZXIuc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyKQogCiAKQEAgLTQyOSwxMiArNTA3LDE2IEBACiAgICAgICAgICAgICByZXR1cm4gMAogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiB1aV9tb2R1bGUubWFpbihzZXJ2ZXJfY29ubmVjdGlvbi5jb25uZWN0aW9uLCBzZXJ2ZXJfY29ubmVjdGlvbi5ldmVudHMsIGNvbmZpZ1BhcmFtcykKKyAgICAgICAgICAgIHJldHVybiB1aV9tb2R1bGUubWFpbihzZXJ2ZXJfY29ubmVjdGlvbi5jb25uZWN0aW9uLCBzZXJ2ZXJfY29ubmVjdGlvbi5ldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnUGFyYW1zKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQogICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24udGVybWluYXRlKCkKICAgICBlbHNlOgotICAgICAgICBwcmludCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzczogJXMsIHNlcnZlciBwb3J0OiAlcyIgJSAoc2VydmVyLnNlcnZlckltcGwuaG9zdCwgc2VydmVyLnNlcnZlckltcGwucG9ydCkpCisgICAgICAgIHByaW50KCJCaXRiYWtlIHNlcnZlciBhZGRyZXNzOiAlcywgc2VydmVyIHBvcnQ6ICVzIiAlIChzZXJ2ZXIuc2VydmVySW1wbC5ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnNlcnZlckltcGwucG9ydCkpCisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5mb3JlZ3JvdW5kOgorICAgICAgICAgICAgc2VydmVyLnNlcnZlckltcGwuc2VydmVfZm9yZXZlcigpCiAgICAgICAgIHJldHVybiAwCiAKICAgICByZXR1cm4gMQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21vbml0b3JkaXNrLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21vbml0b3JkaXNrLnB5CmluZGV4IDQ2NjUyM2MuLjIwM2M0MDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tb25pdG9yZGlzay5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbW9uaXRvcmRpc2sucHkKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgICAgIGlmIG1pblNwYWNlIGFuZCBmcmVlU3BhY2UgPCBtaW5TcGFjZToKICAgICAgICAgICAgICAgICAgICAgIyBBbHdheXMgc2hvdyB3YXJuaW5nLCB0aGUgc2VsZi5jaGVja2VkIHdvdWxkIGFsd2F5cyBiZSBGYWxzZSBpZiB0aGUgYWN0aW9uIGlzIFdBUk4KICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmVGcmVlU1trXSA9PSAwIG9yIHNlbGYucHJlRnJlZVNba10gLSBmcmVlU3BhY2UgPiBzZWxmLnNwYWNlSW50ZXJ2YWwgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiVGhlIGZyZWUgc3BhY2Ugb2YgJXMgKCVzKSBpcyBydW5uaW5nIGxvdyAoJS4zZkdCIGxlZnQpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJUaGUgZnJlZSBzcGFjZSBvZiAlcyAoJXMpIGlzIHJ1bm5pbmcgbG93ICglLjNmR0IgbGVmdCkiICUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCwgZGV2LCBmcmVlU3BhY2UgLyAxMDI0IC8gMTAyNCAvIDEwMjQuMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVTW2tdID0gZnJlZVNwYWNlCiAKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgIyBBbHdheXMgc2hvdyB3YXJuaW5nLCB0aGUgc2VsZi5jaGVja2VkIHdvdWxkIGFsd2F5cyBiZSBGYWxzZSBpZiB0aGUgYWN0aW9uIGlzIFdBUk4KICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmVGcmVlSVtrXSA9PSAwIG9yIHNlbGYucHJlRnJlZUlba10gLSBmcmVlSW5vZGUgPiBzZWxmLmlub2RlSW50ZXJ2YWwgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiVGhlIGZyZWUgaW5vZGUgb2YgJXMgKCVzKSBpcyBydW5uaW5nIGxvdyAoJS4zZksgbGVmdCkiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlRoZSBmcmVlIGlub2RlIG9mICVzICglcykgaXMgcnVubmluZyBsb3cgKCUuM2ZLIGxlZnQpIiAlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGgsIGRldiwgZnJlZUlub2RlIC8gMTAyNC4wKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZUlba10gPSBmcmVlSW5vZGUKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21zZy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tc2cucHkKaW5kZXggNzg2YjVhZS4uYjdjMzlmYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21zZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbXNnLnB5CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgY29sb3JfZW5hYmxlZCA9IEZhbHNlCi0gICAgQkFTRUNPTE9SLCBCTEFDSywgUkVELCBHUkVFTiwgWUVMTE9XLCBCTFVFLCBNQUdFTlRBLCBDWUFOLCBXSElURSA9IHJhbmdlKDI5LDM4KQorICAgIEJBU0VDT0xPUiwgQkxBQ0ssIFJFRCwgR1JFRU4sIFlFTExPVywgQkxVRSwgTUFHRU5UQSwgQ1lBTiwgV0hJVEUgPSBsaXN0KHJhbmdlKDI5LDM4KSkKIAogICAgIENPTE9SUyA9IHsKICAgICAgICAgREVCVUczICA6IENZQU4sCkBAIC05MCw4ICs5MCw5IEBACiAgICAgICAgICAgICBpZiBzZWxmLmNvbG9yX2VuYWJsZWQ6CiAgICAgICAgICAgICAgICAgcmVjb3JkID0gc2VsZi5jb2xvcml6ZShyZWNvcmQpCiAgICAgICAgICAgICBtc2cgPSBsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXQoc2VsZiwgcmVjb3JkKQotCi0gICAgICAgIGlmIGhhc2F0dHIocmVjb3JkLCAnYmJfZXhjX2luZm8nKToKKyAgICAgICAgaWYgaGFzYXR0cihyZWNvcmQsICdiYl9leGNfZm9ybWF0dGVkJyk6CisgICAgICAgICAgICBtc2cgKz0gJ1xuJyArICcnLmpvaW4ocmVjb3JkLmJiX2V4Y19mb3JtYXR0ZWQpCisgICAgICAgIGVsaWYgaGFzYXR0cihyZWNvcmQsICdiYl9leGNfaW5mbycpOgogICAgICAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHJlY29yZC5iYl9leGNfaW5mbwogICAgICAgICAgICAgZm9ybWF0dGVkID0gYmIuZXhjZXB0aW9ucy5mb3JtYXRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PTUpCiAgICAgICAgICAgICBtc2cgKz0gJ1xuJyArICcnLmpvaW4oZm9ybWF0dGVkKQpAQCAtMTgxLDkgKzE4MiwxMiBAQAogICAgICAgICBkZWJ1Z19kb21haW5zWyJCaXRCYWtlLiVzIiAlIGRvbWFpbmFyZ10gPSBsb2dnaW5nLkRFQlVHIC0gZGxldmVsICsgMQogICAgIHJldHVybiBsZXZlbCwgZGVidWdfZG9tYWlucwogCi1kZWYgYWRkRGVmYXVsdGxvZ0ZpbHRlcihoYW5kbGVyLCBjbHMgPSBCQkxvZ0ZpbHRlcik6CitkZWYgYWRkRGVmYXVsdGxvZ0ZpbHRlcihoYW5kbGVyLCBjbHMgPSBCQkxvZ0ZpbHRlciwgZm9yY2VsZXZlbD1Ob25lKToKICAgICBsZXZlbCwgZGVidWdfZG9tYWlucyA9IGNvbnN0cnVjdExvZ09wdGlvbnMoKQogCisgICAgaWYgZm9yY2VsZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgbGV2ZWwgPSBmb3JjZWxldmVsCisKICAgICBjbHMoaGFuZGxlciwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpCiAKICMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9hc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvYXN0LnB5CmluZGV4IDVmNTVhZjUuLmZhODNiMTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9hc3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL2FzdC5weQpAQCAtMjEsOCArMjEsNyBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAotZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IGZpbHRlcgorCiBpbXBvcnQgcmUKIGltcG9ydCBzdHJpbmcKIGltcG9ydCBsb2dnaW5nCkBAIC03MCw2ICs2OSwzMyBAQAogICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgogICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi52YXIsICJleHBvcnQiLCAxLCBvcCA9ICdleHBvcnRlZCcpCiAKK2NsYXNzIFVuc2V0Tm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgdmFyKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLnZhciA9IHZhcgorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGxvZ2luZm8gPSB7CisgICAgICAgICAgICAndmFyaWFibGUnOiBzZWxmLnZhciwKKyAgICAgICAgICAgICdmaWxlJzogc2VsZi5maWxlbmFtZSwKKyAgICAgICAgICAgICdsaW5lJzogc2VsZi5saW5lbm8sCisgICAgICAgIH0KKyAgICAgICAgZGF0YS5kZWxWYXIoc2VsZi52YXIsKipsb2dpbmZvKQorCitjbGFzcyBVbnNldEZsYWdOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCB2YXIsIGZsYWcpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYudmFyID0gdmFyCisgICAgICAgIHNlbGYuZmxhZyA9IGZsYWcKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBsb2dpbmZvID0geworICAgICAgICAgICAgJ3ZhcmlhYmxlJzogc2VsZi52YXIsCisgICAgICAgICAgICAnZmlsZSc6IHNlbGYuZmlsZW5hbWUsCisgICAgICAgICAgICAnbGluZSc6IHNlbGYubGluZW5vLAorICAgICAgICB9CisgICAgICAgIGRhdGEuZGVsVmFyRmxhZyhzZWxmLnZhciwgc2VsZi5mbGFnLCAqKmxvZ2luZm8pCisKIGNsYXNzIERhdGFOb2RlKEFzdE5vZGUpOgogICAgICIiIgogICAgIFZhcmlvdXMgZGF0YSByZWxhdGVkIHVwZGF0ZXMuIEZvciB0aGUgc2FrZSBvZiBzYW5pdHkKQEAgLTEzOSw3ICsxNjUsNyBAQAogICAgICAgICAgICAgZGF0YS5zZXRWYXIoa2V5LCB2YWwsIHBhcnNpbmc9VHJ1ZSwgKipsb2dpbmZvKQogCiBjbGFzcyBNZXRob2ROb2RlKEFzdE5vZGUpOgotICAgIHRyX3RibCA9IHN0cmluZy5tYWtldHJhbnMoJy8uKy1AJSYnLCAnX19fX19fXycpCisgICAgdHJfdGJsID0gc3RyLm1ha2V0cmFucygnLy4rLUAlJicsICdfX19fX19fJykKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jX25hbWUsIGJvZHksIHB5dGhvbiwgZmFrZXJvb3QpOgogICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCkBAIC0yNzEsNiArMjk3LDEyIEBACiBkZWYgaGFuZGxlRXhwb3J0KHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgogICAgIHN0YXRlbWVudHMuYXBwZW5kKEV4cG9ydE5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSkpCiAKK2RlZiBoYW5kbGVVbnNldChzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChVbnNldE5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSkpCisKK2RlZiBoYW5kbGVVbnNldEZsYWcoc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgbSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoVW5zZXRGbGFnTm9kZShmaWxlbmFtZSwgbGluZW5vLCBtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKSkKKwogZGVmIGhhbmRsZURhdGEoc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgZ3JvdXBkKToKICAgICBzdGF0ZW1lbnRzLmFwcGVuZChEYXRhTm9kZShmaWxlbmFtZSwgbGluZW5vLCBncm91cGQpKQogCkBAIC0zMDcsMTAgKzMzOSwxMyBAQAogICAgIHN0YXRlbWVudHMuYXBwZW5kKEluaGVyaXROb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGNsYXNzZXMpKQogCiBkZWYgZmluYWxpemUoZm4sIGQsIHZhcmlhbnQgPSBOb25lKToKLSAgICBhbGxfaGFuZGxlcnMgPSB7fQorICAgIHNhdmVkX2hhbmRsZXJzID0gYmIuZXZlbnQuZ2V0X2hhbmRsZXJzKCkuY29weSgpCisKICAgICBmb3IgdmFyIGluIGQuZ2V0VmFyKCdfX0JCSEFORExFUlMnLCBGYWxzZSkgb3IgW106CiAgICAgICAgICMgdHJ5IHRvIGFkZCB0aGUgaGFuZGxlcgogICAgICAgICBoYW5kbGVyZm4gPSBkLmdldFZhckZsYWcodmFyLCAiZmlsZW5hbWUiLCBGYWxzZSkKKyAgICAgICAgaWYgbm90IGhhbmRsZXJmbjoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmRlZmluZWQgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiAnJXMnIiAlIHZhcikKICAgICAgICAgaGFuZGxlcmxuID0gaW50KGQuZ2V0VmFyRmxhZyh2YXIsICJsaW5lbm8iLCBGYWxzZSkpCiAgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyKHZhciwgZC5nZXRWYXIodmFyLCBGYWxzZSksIChkLmdldFZhckZsYWcodmFyLCAiZXZlbnRtYXNrIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCksIGhhbmRsZXJmbiwgaGFuZGxlcmxuKQogCkBAIC0zMzIsNiArMzY3LDcgQEAKICAgICBkLnNldFZhcignQkJJTkNMVURFRCcsIGJiLnBhcnNlLmdldF9maWxlX2RlcGVuZHMoZCkpCiAKICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlJlY2lwZVBhcnNlZChmbiksIGQpCisgICAgYmIuZXZlbnQuc2V0X2hhbmRsZXJzKHNhdmVkX2hhbmRsZXJzKQogCiBkZWYgX2NyZWF0ZV92YXJpYW50cyhkYXRhc3RvcmVzLCBuYW1lcywgZnVuY3Rpb24sIG9ubHlmaW5hbGlzZSk6CiAgICAgZGVmIGNyZWF0ZV92YXJpYW50KG5hbWUsIG9yaWdfZCwgYXJnID0gTm9uZSk6CkBAIC0zNDEsMTcgKzM3NywxNyBAQAogICAgICAgICBmdW5jdGlvbihhcmcgb3IgbmFtZSwgbmV3X2QpCiAgICAgICAgIGRhdGFzdG9yZXNbbmFtZV0gPSBuZXdfZAogCi0gICAgZm9yIHZhcmlhbnQsIHZhcmlhbnRfZCBpbiBkYXRhc3RvcmVzLml0ZW1zKCk6CisgICAgZm9yIHZhcmlhbnQgaW4gbGlzdChkYXRhc3RvcmVzLmtleXMoKSk6CiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICAgICAgaWYgbm90IHZhcmlhbnQ6CiAgICAgICAgICAgICAgICAgIyBCYXNlZCBvbiBtYWluIHJlY2lwZQotICAgICAgICAgICAgICAgIGNyZWF0ZV92YXJpYW50KG5hbWUsIHZhcmlhbnRfZCkKKyAgICAgICAgICAgICAgICBjcmVhdGVfdmFyaWFudChuYW1lLCBkYXRhc3RvcmVzWyIiXSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY3JlYXRlX3ZhcmlhbnQoIiVzLSVzIiAlICh2YXJpYW50LCBuYW1lKSwgdmFyaWFudF9kLCBuYW1lKQorICAgICAgICAgICAgICAgIGNyZWF0ZV92YXJpYW50KCIlcy0lcyIgJSAodmFyaWFudCwgbmFtZSksIGRhdGFzdG9yZXNbdmFyaWFudF0sIG5hbWUpCiAKIGRlZiBfZXhwYW5kX3ZlcnNpb25zKHZlcnNpb25zKToKICAgICBkZWYgZXhwYW5kX29uZSh2ZXJzaW9uLCBzdGFydCwgZW5kKToKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKHN0YXJ0LCBlbmQgKyAxKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc3RhcnQsIGVuZCArIDEpOgogICAgICAgICAgICAgdmVyID0gX2JidmVyc2lvbnNfcmUuc3ViKHN0cihpKSwgdmVyc2lvbiwgMSkKICAgICAgICAgICAgIHlpZWxkIHZlcgogCkBAIC00NjAsMTcgKzQ5NiwxMyBAQAogICAgICAgICBzYWZlX2Quc2V0VmFyKCJCQkNMQVNTRVhURU5EIiwgZXh0ZW5kZWQpCiAgICAgICAgIF9jcmVhdGVfdmFyaWFudHMoZGF0YXN0b3JlcywgZXh0ZW5kZWRtYXAua2V5cygpLCBleHRlbmRmdW5jLCBvbmx5ZmluYWxpc2UpCiAKLSAgICBmb3IgdmFyaWFudCwgdmFyaWFudF9kIGluIGRhdGFzdG9yZXMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHZhcmlhbnQgaW4gZGF0YXN0b3Jlcy5rZXlzKCk6CiAgICAgICAgIGlmIHZhcmlhbnQ6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaWYgbm90IG9ubHlmaW5hbGlzZSBvciB2YXJpYW50IGluIG9ubHlmaW5hbGlzZToKLSAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoZm4sIHZhcmlhbnRfZCwgdmFyaWFudCkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoZm4sIGRhdGFzdG9yZXNbdmFyaWFudF0sIHZhcmlhbnQpCiAgICAgICAgICAgICBleGNlcHQgYmIucGFyc2UuU2tpcFJlY2lwZSBhcyBlOgotICAgICAgICAgICAgICAgIHZhcmlhbnRfZC5zZXRWYXIoIl9fU0tJUFBFRCIsIGUuYXJnc1swXSkKLQotICAgIGlmIGxlbihkYXRhc3RvcmVzKSA+IDE6Ci0gICAgICAgIHZhcmlhbnRzID0gZmlsdGVyKE5vbmUsIGRhdGFzdG9yZXMuaXRlcmtleXMoKSkKLSAgICAgICAgc2FmZV9kLnNldFZhcigiX19WQVJJQU5UUyIsICIgIi5qb2luKHZhcmlhbnRzKSkKKyAgICAgICAgICAgICAgICBkYXRhc3RvcmVzW3ZhcmlhbnRdLnNldFZhcigiX19TS0lQUEVEIiwgZS5hcmdzWzBdKQogCiAgICAgZGF0YXN0b3Jlc1siIl0gPSBkCiAgICAgcmV0dXJuIGRhdGFzdG9yZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9CQkhhbmRsZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5CmluZGV4IGVmNzJjMzcuLmM1NGEwNzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9CQkhhbmRsZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weQpAQCAtMjUsNyArMjUsNyBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorCiBpbXBvcnQgcmUsIGJiLCBvcwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBiYi5idWlsZCwgYmIudXRpbHMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weQppbmRleCBmYmQ3NWIxLi44NzUyNTBkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0NvbmZIYW5kbGVyLnB5CkBAIC01Nyw2ICs1Nyw4IEBACiBfX2luY2x1ZGVfcmVnZXhwX18gPSByZS5jb21waWxlKCByImluY2x1ZGVccysoLispIiApCiBfX3JlcXVpcmVfcmVnZXhwX18gPSByZS5jb21waWxlKCByInJlcXVpcmVccysoLispIiApCiBfX2V4cG9ydF9yZWdleHBfXyA9IHJlLmNvbXBpbGUoIHIiZXhwb3J0XHMrKFthLXpBLVowLTlcLV8rLiR7fS9dKykkIiApCitfX3Vuc2V0X3JlZ2V4cF9fID0gcmUuY29tcGlsZSggciJ1bnNldFxzKyhbYS16QS1aMC05XC1fKy4ke30vXSspJCIgKQorX191bnNldF9mbGFnX3JlZ2V4cF9fID0gcmUuY29tcGlsZSggciJ1bnNldFxzKyhbYS16QS1aMC05XC1fKy4ke30vXSspXFsoW2EtekEtWjAtOVwtXysuJHt9L10rKVxdJCIgKQogCiBkZWYgaW5pdChkYXRhKToKICAgICB0b3BkaXIgPSBkYXRhLmdldFZhcignVE9QRElSJywgRmFsc2UpCkBAIC04NCwxMyArODYsMTMgQEAKICAgICAgICAgYmJwYXRoID0gIiVzOiVzIiAlIChkbmFtZSwgZGF0YS5nZXRWYXIoIkJCUEFUSCIsIFRydWUpKQogICAgICAgICBhYnNfZm4sIGF0dGVtcHRzID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBmbiwgaGlzdG9yeT1UcnVlKQogICAgICAgICBpZiBhYnNfZm4gYW5kIGJiLnBhcnNlLmNoZWNrX2RlcGVuZGVuY3koZGF0YSwgYWJzX2ZuKToKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJEdXBsaWNhdGUgaW5jbHVzaW9uIGZvciAlcyBpbiAlcyIgJSAoYWJzX2ZuLCBkYXRhLmdldFZhcignRklMRScsIFRydWUpKSkKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJEdXBsaWNhdGUgaW5jbHVzaW9uIGZvciAlcyBpbiAlcyIgJSAoYWJzX2ZuLCBkYXRhLmdldFZhcignRklMRScsIFRydWUpKSkKICAgICAgICAgZm9yIGFmIGluIGF0dGVtcHRzOgogICAgICAgICAgICAgYmIucGFyc2UubWFya19kZXBlbmRlbmN5KGRhdGEsIGFmKQogICAgICAgICBpZiBhYnNfZm46CiAgICAgICAgICAgICBmbiA9IGFic19mbgogICAgIGVsaWYgYmIucGFyc2UuY2hlY2tfZGVwZW5kZW5jeShkYXRhLCBmbik6Ci0gICAgICAgIGxvZ2dlci53YXJuKCJEdXBsaWNhdGUgaW5jbHVzaW9uIGZvciAlcyBpbiAlcyIgJSAoZm4sIGRhdGEuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpKQorICAgICAgICBsb2dnZXIud2FybmluZygiRHVwbGljYXRlIGluY2x1c2lvbiBmb3IgJXMgaW4gJXMiICUgKGZuLCBkYXRhLmdldFZhcignRklMRScsIFRydWUpKSkKIAogICAgIHRyeToKICAgICAgICAgYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBUcnVlKQpAQCAtMTg1LDYgKzE4NywxNiBAQAogICAgICAgICBhc3QuaGFuZGxlRXhwb3J0KHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIG0pCiAgICAgICAgIHJldHVybgogCisgICAgbSA9IF9fdW5zZXRfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlVW5zZXQoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX191bnNldF9mbGFnX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZVVuc2V0RmxhZyhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKwogICAgIHJhaXNlIFBhcnNlRXJyb3IoInVucGFyc2VkIGxpbmU6ICclcyciICUgcywgZm4sIGxpbmVubyk7CiAKICMgQWRkIHVzIHRvIHRoZSBoYW5kbGVycyBsaXN0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGVyc2lzdF9kYXRhLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BlcnNpc3RfZGF0YS5weQppbmRleCBlNDUwNDIzLi5iYjZkZWNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGVyc2lzdF9kYXRhLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wZXJzaXN0X2RhdGEucHkKQEAgLTkyLDkgKzkyLDkgQEAKICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiREVMRVRFIGZyb20gJXMgd2hlcmUga2V5PT87IiAlIHNlbGYudGFibGUsIFtrZXldKQogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJhc2VzdHJpbmcpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIHN0cik6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ09ubHkgc3RyaW5nIGtleXMgYXJlIHN1cHBvcnRlZCcpCi0gICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdPbmx5IHN0cmluZyB2YWx1ZXMgYXJlIHN1cHBvcnRlZCcpCiAKICAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCAqIGZyb20gJXMgd2hlcmUga2V5PT87IiAlCkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybiBhIGxpc3Qgb2Yga2V5ICsgdmFsdWUgcGFpcnMgZm9yIGEgZG9tYWluCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2RvbWFpbl0uaXRlbXMoKQorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmRhdGFbZG9tYWluXS5pdGVtcygpKQogCiAgICAgZGVmIGdldFZhbHVlKHNlbGYsIGRvbWFpbiwga2V5KToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm9jZXNzLnB5CmluZGV4IDFjMDdmMmQuLmM2MmQ3YmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm9jZXNzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm9jZXNzLnB5CkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgIHNlbGYubXNnID0gbXNnCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5jb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5jb21tYW5kLCBzdHIpOgogICAgICAgICAgICAgY21kID0gc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoc2VsZi5jb21tYW5kKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY21kID0gc2VsZi5jb21tYW5kCkBAIC05Nyw2ICs5Nyw4IEBACiAgICAgdHJ5OgogICAgICAgICB3aGlsZSBwaXBlLnBvbGwoKSBpcyBOb25lOgogICAgICAgICAgICAgcmxpc3QgPSByaW4KKyAgICAgICAgICAgIHN0ZG91dGJ1ZiA9IGIiIgorICAgICAgICAgICAgc3RkZXJyYnVmID0gYiIiCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcix3LGUgPSBzZWxlY3Quc2VsZWN0IChybGlzdCwgW10sIFtdLCAxKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKQEAgLTEwNCwxNiArMTA2LDI2IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgICAgIGlmIHBpcGUuc3Rkb3V0IGluIHI6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHBpcGUuc3Rkb3V0LnJlYWQoKQotICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG91dGRhdGEuYXBwZW5kKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGxvZy53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBzdGRvdXRidWYgKyBwaXBlLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lIGFuZCBsZW4oZGF0YSkgPiAwOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2cud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dGJ1ZiA9IGIiIgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0YnVmID0gZGF0YQogCiAgICAgICAgICAgICBpZiBwaXBlLnN0ZGVyciBpbiByOgotICAgICAgICAgICAgICAgIGRhdGEgPSBwaXBlLnN0ZGVyci5yZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlcnJkYXRhLmFwcGVuZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBsb2cud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gc3RkZXJyYnVmICsgcGlwZS5zdGRlcnIucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZSBhbmQgbGVuKGRhdGEpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJkYXRhLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnJidWYgPSBiIiIKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycmJ1ZiA9IGRhdGEKIAogICAgICAgICAgICAgcmVhZGV4dHJhcyhyKQogCkBAIC0xMzUsNyArMTQ3LDcgQEAKICAgICBpZiBub3QgZXh0cmFmaWxlczoKICAgICAgICAgZXh0cmFmaWxlcyA9IFtdCiAKLSAgICBpZiBpc2luc3RhbmNlKGNtZCwgYmFzZXN0cmluZykgYW5kIG5vdCAic2hlbGwiIGluIG9wdGlvbnM6CisgICAgaWYgaXNpbnN0YW5jZShjbWQsIHN0cikgYW5kIG5vdCAic2hlbGwiIGluIG9wdGlvbnM6CiAgICAgICAgIG9wdGlvbnNbInNoZWxsIl0gPSBUcnVlCiAKICAgICB0cnk6CkBAIC0xNTAsNiArMTYyLDEwIEBACiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gX2xvZ2dlZF9jb21tdW5pY2F0ZShwaXBlLCBsb2csIGlucHV0LCBleHRyYWZpbGVzKQogICAgIGVsc2U6CiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwZS5jb21tdW5pY2F0ZShpbnB1dCkKKyAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgidXRmLTgiKQorICAgICAgICBpZiBzdGRlcnI6CisgICAgICAgICAgICBzdGRlcnIgPSBzdGRlcnIuZGVjb2RlKCJ1dGYtOCIpCiAKICAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRXJyb3IoY21kLCBwaXBlLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb2dyZXNzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb2dyZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NGQxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvZ3Jlc3MucHkKQEAgLTAsMCArMSwyNzYgQEAKKyIiIgorQml0QmFrZSBwcm9ncmVzcyBoYW5kbGluZyBjb2RlCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgYmIuZXZlbnQKK2ltcG9ydCBiYi5idWlsZAorCitjbGFzcyBQcm9ncmVzc0hhbmRsZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIHRoYXQgY2FuIHByZXRlbmQgdG8gYmUgYSBmaWxlIG9iamVjdCB3ZWxsIGVub3VnaCB0byBiZQorICAgIHVzZWQgdG8gYnVpbGQgb2JqZWN0cyB0byBpbnRlcmNlcHQgY29uc29sZSBvdXRwdXQgYW5kIGRldGVybWluZSB0aGUKKyAgICBwcm9ncmVzcyBvZiBzb21lIG9wZXJhdGlvbi4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgb3V0ZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5fcHJvZ3Jlc3MgPSAwCisgICAgICAgIHNlbGYuX2RhdGEgPSBkCisgICAgICAgIHNlbGYuX2xhc3RldmVudCA9IDAKKyAgICAgICAgaWYgb3V0ZmlsZToKKyAgICAgICAgICAgIHNlbGYuX291dGZpbGUgPSBvdXRmaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9vdXRmaWxlID0gc3lzLnN0ZG91dAorCisgICAgZGVmIF9maXJlX3Byb2dyZXNzKHNlbGYsIHRhc2twcm9ncmVzcywgcmF0ZT1Ob25lKToKKyAgICAgICAgIiIiSW50ZXJuYWwgZnVuY3Rpb24gdG8gZmlyZSB0aGUgcHJvZ3Jlc3MgZXZlbnQiIiIKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5idWlsZC5UYXNrUHJvZ3Jlc3ModGFza3Byb2dyZXNzLCByYXRlKSwgc2VsZi5fZGF0YSkKKworICAgIGRlZiB3cml0ZShzZWxmLCBzdHJpbmcpOgorICAgICAgICBzZWxmLl9vdXRmaWxlLndyaXRlKHN0cmluZykKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi5fb3V0ZmlsZS5mbHVzaCgpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHByb2dyZXNzLCByYXRlPU5vbmUpOgorICAgICAgICB0cyA9IHRpbWUudGltZSgpCisgICAgICAgIGlmIHByb2dyZXNzID4gMTAwOgorICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxMDAKKyAgICAgICAgaWYgcHJvZ3Jlc3MgIT0gc2VsZi5fcHJvZ3Jlc3Mgb3Igc2VsZi5fbGFzdGV2ZW50ICsgMSA8IHRzOgorICAgICAgICAgICAgc2VsZi5fZmlyZV9wcm9ncmVzcyhwcm9ncmVzcywgcmF0ZSkKKyAgICAgICAgICAgIHNlbGYuX2xhc3RldmVudCA9IHRzCisgICAgICAgICAgICBzZWxmLl9wcm9ncmVzcyA9IHByb2dyZXNzCisKK2NsYXNzIExpbmVGaWx0ZXJQcm9ncmVzc0hhbmRsZXIoUHJvZ3Jlc3NIYW5kbGVyKToKKyAgICAiIiIKKyAgICBBIFByb2dyZXNzSGFuZGxlciB2YXJpYW50IHRoYXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gZmlsdGVyIG91dAorICAgIHRoZSBsaW5lcyBpZiB0aGV5IGNvbnRhaW4gcHJvZ3Jlc3MgaW5mb3JtYXRpb24uIEFkZGl0aW9uYWxseSwgaXQKKyAgICBmaWx0ZXJzIG91dCBhbnl0aGluZyBiZWZvcmUgdGhlIGxhc3QgbGluZSBmZWVkIG9uIGEgbGluZS4gVGhpcyBjYW4KKyAgICBiZSB1c2VkIHRvIGtlZXAgdGhlIGxvZ3MgY2xlYW4gb2Ygb3V0cHV0IHRoYXQgd2UndmUgb25seSBlbmFibGVkIGZvcgorICAgIGdldHRpbmcgcHJvZ3Jlc3MsIGFzc3VtaW5nIHRoYXQgdGhhdCBjYW4gYmUgZG9uZSBvbiBhIHBlci1saW5lCisgICAgYmFzaXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG91dGZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYuX2xpbmVidWZmZXIgPSAnJworICAgICAgICBzdXBlcihMaW5lRmlsdGVyUHJvZ3Jlc3NIYW5kbGVyLCBzZWxmKS5fX2luaXRfXyhkLCBvdXRmaWxlKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHNlbGYuX2xpbmVidWZmZXIgKz0gc3RyaW5nCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBicmVha3BvcyA9IHNlbGYuX2xpbmVidWZmZXIuZmluZCgnXG4nKSArIDEKKyAgICAgICAgICAgIGlmIGJyZWFrcG9zID09IDA6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lYnVmZmVyWzpicmVha3Bvc10KKyAgICAgICAgICAgIHNlbGYuX2xpbmVidWZmZXIgPSBzZWxmLl9saW5lYnVmZmVyW2JyZWFrcG9zOl0KKyAgICAgICAgICAgICMgRHJvcCBhbnkgbGluZSBmZWVkcyBhbmQgYW55dGhpbmcgdGhhdCBwcmVjZWRlcyB0aGVtCisgICAgICAgICAgICBsYnJlYWtwb3MgPSBsaW5lLnJmaW5kKCdccicpICsgMQorICAgICAgICAgICAgaWYgbGJyZWFrcG9zOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xicmVha3BvczpdCisgICAgICAgICAgICBpZiBzZWxmLndyaXRlbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICBzdXBlcihMaW5lRmlsdGVyUHJvZ3Jlc3NIYW5kbGVyLCBzZWxmKS53cml0ZShsaW5lKQorCisgICAgZGVmIHdyaXRlbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgQmFzaWNQcm9ncmVzc0hhbmRsZXIoUHJvZ3Jlc3NIYW5kbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcmVnZXg9cicoXGQrKSUnLCBvdXRmaWxlPU5vbmUpOgorICAgICAgICBzdXBlcihCYXNpY1Byb2dyZXNzSGFuZGxlciwgc2VsZikuX19pbml0X18oZCwgb3V0ZmlsZSkKKyAgICAgICAgc2VsZi5fcmVnZXggPSByZS5jb21waWxlKHJlZ2V4KQorICAgICAgICAjIFNlbmQgYW4gaW5pdGlhbCBwcm9ncmVzcyBldmVudCBzbyB0aGUgYmFyIGdldHMgc2hvd24KKyAgICAgICAgc2VsZi5fZmlyZV9wcm9ncmVzcygwKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHBlcmNzID0gc2VsZi5fcmVnZXguZmluZGFsbChzdHJpbmcpCisgICAgICAgIGlmIHBlcmNzOgorICAgICAgICAgICAgcHJvZ3Jlc3MgPSBpbnQocGVyY3NbLTFdKQorICAgICAgICAgICAgc2VsZi51cGRhdGUocHJvZ3Jlc3MpCisgICAgICAgIHN1cGVyKEJhc2ljUHJvZ3Jlc3NIYW5kbGVyLCBzZWxmKS53cml0ZShzdHJpbmcpCisKK2NsYXNzIE91dE9mUHJvZ3Jlc3NIYW5kbGVyKFByb2dyZXNzSGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJlZ2V4LCBvdXRmaWxlPU5vbmUpOgorICAgICAgICBzdXBlcihPdXRPZlByb2dyZXNzSGFuZGxlciwgc2VsZikuX19pbml0X18oZCwgb3V0ZmlsZSkKKyAgICAgICAgc2VsZi5fcmVnZXggPSByZS5jb21waWxlKHJlZ2V4KQorICAgICAgICAjIFNlbmQgYW4gaW5pdGlhbCBwcm9ncmVzcyBldmVudCBzbyB0aGUgYmFyIGdldHMgc2hvd24KKyAgICAgICAgc2VsZi5fZmlyZV9wcm9ncmVzcygwKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIG51bXMgPSBzZWxmLl9yZWdleC5maW5kYWxsKHN0cmluZykKKyAgICAgICAgaWYgbnVtczoKKyAgICAgICAgICAgIHByb2dyZXNzID0gKGZsb2F0KG51bXNbLTFdWzBdKSAvIGZsb2F0KG51bXNbLTFdWzFdKSkgKiAxMDAKKyAgICAgICAgICAgIHNlbGYudXBkYXRlKHByb2dyZXNzKQorICAgICAgICBzdXBlcihPdXRPZlByb2dyZXNzSGFuZGxlciwgc2VsZikud3JpdGUoc3RyaW5nKQorCitjbGFzcyBNdWx0aVN0YWdlUHJvZ3Jlc3NSZXBvcnRlcihvYmplY3QpOgorICAgICIiIgorICAgIENsYXNzIHdoaWNoIGFsbG93cyByZXBvcnRpbmcgcHJvZ3Jlc3Mgd2l0aG91dCB0aGUgY2FsbGVyCisgICAgaGF2aW5nIHRvIGtub3cgd2hlcmUgdGhleSBhcmUgaW4gdGhlIG92ZXJhbGwgc2VxdWVuY2UuIFVzZWZ1bAorICAgIGZvciB0YXNrcyBtYWRlIHVwIG9mIHB5dGhvbiBjb2RlIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUKKyAgICBjbGFzc2VzIC8gZnVuY3Rpb25zIC0gdGhlIHByb2dyZXNzIHJlcG9ydGVyIG9iamVjdCBjYW4KKyAgICBiZSBwYXNzZWQgYXJvdW5kIG9yIHN0b3JlZCBhdCB0aGUgb2JqZWN0IGxldmVsIGFuZCBjYWxscworICAgIHRvIG5leHRfc3RhZ2UoKSBhbmQgdXBkYXRlKCkgbWFkZSB3aGVyZWV2ZXIgbmVlZGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBzdGFnZV93ZWlnaHRzLCBkZWJ1Zz1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXNlIHRoZSBwcm9ncmVzcyByZXBvcnRlci4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICAqIGQ6IHRoZSBkYXRhc3RvcmUgKG5lZWRlZCBmb3IgZmlyaW5nIHRoZSBldmVudHMpCisgICAgICAgICogc3RhZ2Vfd2VpZ2h0czogYSBsaXN0IG9mIHdlaWdodCB2YWx1ZXMsIG9uZSBmb3IgZWFjaCBzdGFnZS4KKyAgICAgICAgICBUaGUgdmFsdWUgaXMgc2NhbGVkIGludGVybmFsbHkgc28geW91IG9ubHkgbmVlZCB0byBzcGVjaWZ5CisgICAgICAgICAgdmFsdWVzIHJlbGF0aXZlIHRvIG90aGVyIHZhbHVlcyBpbiB0aGUgbGlzdCwgc28gaWYgdGhlcmUKKyAgICAgICAgICBhcmUgdHdvIHN0YWdlcyBhbmQgdGhlIGZpcnN0IHRha2VzIDJzIGFuZCB0aGUgc2Vjb25kIHRha2VzCisgICAgICAgICAgMTBzIHlvdSB3b3VsZCBzcGVjaWZ5IFsyLCAxMF0gKG9yIFsxLCA1XSwgaXQgZG9lc24ndCBtYXR0ZXIpLgorICAgICAgICAqIGRlYnVnOiBzcGVjaWZ5IFRydWUgKGFuZCBlbnN1cmUgeW91IGNhbGwgZmluaXNoKCkgYXQgdGhlIGVuZCkKKyAgICAgICAgICBpbiBvcmRlciB0byBzaG93IGEgcHJpbnRvdXQgb2YgdGhlIGNhbGN1bGF0ZWQgc3RhZ2Ugd2VpZ2h0cworICAgICAgICAgIGJhc2VkIG9uIHRpbWluZyBlYWNoIHN0YWdlLiBVc2UgdGhpcyB0byBkZXRlcm1pbmUgd2hhdCB0aGUKKyAgICAgICAgICB3ZWlnaHRzIHNob3VsZCBiZSB3aGVuIHlvdSdyZSBub3Qgc3VyZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2RhdGEgPSBkCisgICAgICAgIHRvdGFsID0gc3VtKHN0YWdlX3dlaWdodHMpCisgICAgICAgIHNlbGYuX3N0YWdlX3dlaWdodHMgPSBbZmxvYXQoeCkvdG90YWwgZm9yIHggaW4gc3RhZ2Vfd2VpZ2h0c10KKyAgICAgICAgc2VsZi5fc3RhZ2UgPSAtMQorICAgICAgICBzZWxmLl9iYXNlX3Byb2dyZXNzID0gMAorICAgICAgICAjIFNlbmQgYW4gaW5pdGlhbCBwcm9ncmVzcyBldmVudCBzbyB0aGUgYmFyIGdldHMgc2hvd24KKyAgICAgICAgc2VsZi5fZmlyZV9wcm9ncmVzcygwKQorICAgICAgICBzZWxmLl9kZWJ1ZyA9IGRlYnVnCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBzZWxmLl9sYXN0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc2VsZi5fc3RhZ2VfdGltZXMgPSBbXQorICAgICAgICAgICAgc2VsZi5fc3RhZ2VfdG90YWwgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9jYWxsZXJzID0gW10KKworICAgIGRlZiBfZmlyZV9wcm9ncmVzcyhzZWxmLCB0YXNrcHJvZ3Jlc3MpOgorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmJ1aWxkLlRhc2tQcm9ncmVzcyh0YXNrcHJvZ3Jlc3MpLCBzZWxmLl9kYXRhKQorCisgICAgZGVmIG5leHRfc3RhZ2Uoc2VsZiwgc3RhZ2VfdG90YWw9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBNb3ZlIHRvIHRoZSBuZXh0IHN0YWdlLgorICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICAqIHN0YWdlX3RvdGFsOiBvcHRpb25hbCB0b3RhbCBmb3IgcHJvZ3Jlc3Mgd2l0aGluIHRoZSBzdGFnZSwKKyAgICAgICAgICBzZWUgdXBkYXRlKCkgZm9yIGRldGFpbHMKKyAgICAgICAgTk9URTogeW91IG5lZWQgdG8gY2FsbCB0aGlzIGJlZm9yZSB0aGUgZmlyc3Qgc3RhZ2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zdGFnZSArPSAxCisgICAgICAgIHNlbGYuX3N0YWdlX3RvdGFsID0gc3RhZ2VfdG90YWwKKyAgICAgICAgaWYgc2VsZi5fc3RhZ2UgPT0gMDoKKyAgICAgICAgICAgICMgRmlyc3Qgc3RhZ2UKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLl9zdGFnZSA8IGxlbihzZWxmLl9zdGFnZV93ZWlnaHRzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9iYXNlX3Byb2dyZXNzID0gc3VtKHNlbGYuX3N0YWdlX3dlaWdodHNbOnNlbGYuX3N0YWdlXSkgKiAxMDAKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgY3VycnRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGFnZV90aW1lcy5hcHBlbmQoY3VycnRpbWUgLSBzZWxmLl9sYXN0X3RpbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RfdGltZSA9IGN1cnJ0aW1lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxlcnMuYXBwZW5kKGluc3BlY3QuZ2V0b3V0ZXJmcmFtZXMoaW5zcGVjdC5jdXJyZW50ZnJhbWUoKSlbMV0pCisgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdQcm9ncmVzc1JlcG9ydGVyOiBjdXJyZW50IHN0YWdlIGJleW9uZCBkZWNsYXJlZCBudW1iZXIgb2Ygc3RhZ2VzJykKKyAgICAgICAgICAgICAgICBzZWxmLl9iYXNlX3Byb2dyZXNzID0gMTAwCisgICAgICAgICAgICBzZWxmLl9maXJlX3Byb2dyZXNzKHNlbGYuX2Jhc2VfcHJvZ3Jlc3MpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHN0YWdlX3Byb2dyZXNzKToKKyAgICAgICAgIiIiCisgICAgICAgIFVwZGF0ZSBwcm9ncmVzcyB3aXRoaW4gdGhlIGN1cnJlbnQgc3RhZ2UuCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgICogc3RhZ2VfcHJvZ3Jlc3M6IHByb2dyZXNzIHZhbHVlIHdpdGhpbiB0aGUgc3RhZ2UuIElmIHN0YWdlX3RvdGFsCisgICAgICAgICAgd2FzIHNwZWNpZmllZCB3aGVuIG5leHRfc3RhZ2UoKSB3YXMgbGFzdCBjYWxsZWQsIHRoZW4gdGhpcworICAgICAgICAgIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgb3V0IG9mIHN0YWdlX3RvdGFsLCBvdGhlcndpc2UgaXQgc2hvdWxkCisgICAgICAgICAgYmUgYSBwZXJjZW50YWdlIHZhbHVlIGZyb20gMCB0byAxMDAuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGFnZV90b3RhbDoKKyAgICAgICAgICAgIHN0YWdlX3Byb2dyZXNzID0gKGZsb2F0KHN0YWdlX3Byb2dyZXNzKSAvIHNlbGYuX3N0YWdlX3RvdGFsKSAqIDEwMAorICAgICAgICBpZiBzZWxmLl9zdGFnZSA8IDA6CisgICAgICAgICAgICBiYi53YXJuKCdQcm9ncmVzc1JlcG9ydGVyOiB1cGRhdGUgY2FsbGVkIGJlZm9yZSBmaXJzdCBjYWxsIHRvIG5leHRfc3RhZ2UoKScpCisgICAgICAgIGVsaWYgc2VsZi5fc3RhZ2UgPCBsZW4oc2VsZi5fc3RhZ2Vfd2VpZ2h0cyk6CisgICAgICAgICAgICBwcm9ncmVzcyA9IHNlbGYuX2Jhc2VfcHJvZ3Jlc3MgKyAoc3RhZ2VfcHJvZ3Jlc3MgKiBzZWxmLl9zdGFnZV93ZWlnaHRzW3NlbGYuX3N0YWdlXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2dyZXNzID0gc2VsZi5fYmFzZV9wcm9ncmVzcworICAgICAgICBpZiBwcm9ncmVzcyA+IDEwMDoKKyAgICAgICAgICAgIHByb2dyZXNzID0gMTAwCisgICAgICAgIHNlbGYuX2ZpcmVfcHJvZ3Jlc3MocHJvZ3Jlc3MpCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9maW5pc2hlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBpbXBvcnQgbWF0aAorICAgICAgICAgICAgc2VsZi5fc3RhZ2VfdGltZXMuYXBwZW5kKHRpbWUudGltZSgpIC0gc2VsZi5fbGFzdF90aW1lKQorICAgICAgICAgICAgbWludGltZSA9IG1heChtaW4oc2VsZi5fc3RhZ2VfdGltZXMpLCAwLjAxKQorICAgICAgICAgICAgc2VsZi5fY2FsbGVycy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgIHN0YWdlX3dlaWdodHMgPSBbaW50KG1hdGguY2VpbCh4IC8gbWludGltZSkpIGZvciB4IGluIHNlbGYuX3N0YWdlX3RpbWVzXQorICAgICAgICAgICAgYmIud2FybignU3RhZ2Ugd2VpZ2h0czogJXMnICUgc3RhZ2Vfd2VpZ2h0cykKKyAgICAgICAgICAgIG91dCA9IFtdCisgICAgICAgICAgICBmb3Igc3RhZ2Vfd2VpZ2h0LCBjYWxsZXIgaW4gemlwKHN0YWdlX3dlaWdodHMsIHNlbGYuX2NhbGxlcnMpOgorICAgICAgICAgICAgICAgIGlmIGNhbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgnVXAgdG8gJXM6JWQ6ICVkJyAlIChjYWxsZXJbMV0sIGNhbGxlclsyXSwgc3RhZ2Vfd2VpZ2h0KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKCdVcCB0byBmaW5pc2g6ICVkJyAlIHN0YWdlX3dlaWdodCkKKyAgICAgICAgICAgIGJiLndhcm4oJ1N0YWdlIHRpbWVzOlxuICAlcycgJSAnXG4gICcuam9pbihvdXQpKQorCitjbGFzcyBNdWx0aVN0YWdlUHJvY2Vzc1Byb2dyZXNzUmVwb3J0ZXIoTXVsdGlTdGFnZVByb2dyZXNzUmVwb3J0ZXIpOgorICAgICIiIgorICAgIFZlcnNpb24gb2YgTXVsdGlTdGFnZVByb2dyZXNzUmVwb3J0ZXIgaW50ZW5kZWQgZm9yIHVzZSB3aXRoCisgICAgc3RhbmRhbG9uZSBwcm9jZXNzZXMgKHN1Y2ggYXMgcHJlcGFyaW5nIHRoZSBydW5xdWV1ZSkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcHJvY2Vzc25hbWUsIHN0YWdlX3dlaWdodHMsIGRlYnVnPUZhbHNlKToKKyAgICAgICAgc2VsZi5fcHJvY2Vzc25hbWUgPSBwcm9jZXNzbmFtZQorICAgICAgICBzZWxmLl9zdGFydGVkID0gRmFsc2UKKyAgICAgICAgTXVsdGlTdGFnZVByb2dyZXNzUmVwb3J0ZXIuX19pbml0X18oc2VsZiwgZCwgc3RhZ2Vfd2VpZ2h0cywgZGVidWcpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9zdGFydGVkOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Qcm9jZXNzU3RhcnRlZChzZWxmLl9wcm9jZXNzbmFtZSwgMTAwKSwgc2VsZi5fZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWQgPSBUcnVlCisKKyAgICBkZWYgX2ZpcmVfcHJvZ3Jlc3Moc2VsZiwgdGFza3Byb2dyZXNzKToKKyAgICAgICAgaWYgdGFza3Byb2dyZXNzID09IDA6CisgICAgICAgICAgICBzZWxmLnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlByb2Nlc3NQcm9ncmVzcyhzZWxmLl9wcm9jZXNzbmFtZSwgdGFza3Byb2dyZXNzKSwgc2VsZi5fZGF0YSkKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIE11bHRpU3RhZ2VQcm9ncmVzc1JlcG9ydGVyLmZpbmlzaChzZWxmKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlByb2Nlc3NGaW5pc2hlZChzZWxmLl9wcm9jZXNzbmFtZSksIHNlbGYuX2RhdGEpCisKK2NsYXNzIER1bW15TXVsdGlTdGFnZVByb2Nlc3NQcm9ncmVzc1JlcG9ydGVyKE11bHRpU3RhZ2VQcm9ncmVzc1JlcG9ydGVyKToKKyAgICAiIiIKKyAgICBNdWx0aVN0YWdlUHJvY2Vzc1Byb2dyZXNzUmVwb3J0ZXIgdGhhdCB0YWtlcyB0aGUgY2FsbHMgYW5kIGRvZXMgbm90aGluZworICAgIHdpdGggdGhlbSAodG8gYXZvaWQgYSBidW5jaCBvZiAiaWYgcHJvZ3Jlc3NfcmVwb3J0ZXI6IiBjaGVja3MpCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBNdWx0aVN0YWdlUHJvY2Vzc1Byb2dyZXNzUmVwb3J0ZXIuX19pbml0X18oc2VsZiwgIiIsIE5vbmUsIFtdKQorCisgICAgZGVmIF9maXJlX3Byb2dyZXNzKHNlbGYsIHRhc2twcm9ncmVzcywgcmF0ZT1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgbmV4dF9zdGFnZShzZWxmLCBzdGFnZV90b3RhbD1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHVwZGF0ZShzZWxmLCBzdGFnZV9wcm9ncmVzcyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvdmlkZXJzLnB5CmluZGV4IDU2M2EwOTEuLmRiMDJhMGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb3ZpZGVycy5weQpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgICAgICAgICBwa2dfcG5bcG5dID0gW10KICAgICAgICAgcGtnX3BuW3BuXS5hcHBlbmQocCkKIAotICAgIGxvZ2dlci5kZWJ1ZygxLCAicHJvdmlkZXJzIGZvciAlcyBhcmU6ICVzIiwgaXRlbSwgcGtnX3BuLmtleXMoKSkKKyAgICBsb2dnZXIuZGVidWcoMSwgInByb3ZpZGVycyBmb3IgJXMgYXJlOiAlcyIsIGl0ZW0sIGxpc3QocGtnX3BuLmtleXMoKSkpCiAKICAgICAjIEZpcnN0IGFkZCBQUkVGRVJSRURfVkVSU0lPTlMKICAgICBmb3IgcG4gaW4gcGtnX3BuOgpAQCAtNDAyLDcgKzQwMiw3IEBACiAgICAgcmV0dXJuIHJwcm92aWRlcnMKIAogCi1kZWYgYnVpbGRXb3JsZFRhcmdldExpc3QoZGF0YUNhY2hlKToKK2RlZiBidWlsZFdvcmxkVGFyZ2V0TGlzdChkYXRhQ2FjaGUsIHRhc2s9Tm9uZSk6CiAgICAgIiIiCiAgICAgQnVpbGQgcGFja2FnZSBsaXN0IGZvciAiYml0YmFrZSB3b3JsZCIKICAgICAiIiIKQEAgLTQxMyw2ICs0MTMsOSBAQAogICAgIGZvciBmIGluIGRhdGFDYWNoZS5wb3NzaWJsZV93b3JsZDoKICAgICAgICAgdGVybWluYWwgPSBUcnVlCiAgICAgICAgIHBuID0gZGF0YUNhY2hlLnBrZ19mbltmXQorICAgICAgICBpZiB0YXNrIGFuZCB0YXNrIG5vdCBpbiBkYXRhQ2FjaGUudGFza19kZXBzW2ZdWyd0YXNrcyddOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJXb3JsZCBidWlsZCBza2lwcGluZyAlcyBhcyB0YXNrICVzIGRvZXNuJ3QgZXhpc3QiLCBmLCB0YXNrKQorICAgICAgICAgICAgdGVybWluYWwgPSBGYWxzZQogCiAgICAgICAgIGZvciBwIGluIGRhdGFDYWNoZS5wbl9wcm92aWRlc1twbl06CiAgICAgICAgICAgICBpZiBwLnN0YXJ0c3dpdGgoJ3ZpcnR1YWwvJyk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvYnVpbHRpbi5weQppbmRleCBiNzQ4ZTRhLi5hODgxNGRjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2J1aWx0aW4ucHkKQEAgLTUyNyw3ICs1MjcsNyBAQAogICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCiAgICAgICAgIAogICAgICMgU2NhbiBwYXR0ZXJuIGFyZ3VtZW50cyBhbmQgYXBwZW5kIGEgc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAgZm9yIGkgaW4geHJhbmdlKGxlbihhcmdzKSk6CisgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3MpKToKICAgICAgICAgaWYgbm90IFJFX1NFRC5zZWFyY2goYXJnc1tpXSk6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBhcmdzW2ldID0gYXJnc1tpXSArICcgJwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5CmluZGV4IDI1ZDhjOTIuLmQxNGVjZjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2ludGVycC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9pbnRlcnAucHkKQEAgLTQ3NCw3ICs0NzQsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBTYXZlIGFuZCByZW1vdmUgcHJldmlvdXMgYXJndW1lbnRzCiAgICAgICAgIHByZXZhcmdzID0gW10gICAgICAgIAotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX2VudlsnIyddKSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGludChzZWxmLl9lbnZbJyMnXSkpOgogICAgICAgICAgICAgaSA9IHN0cihpKzEpCiAgICAgICAgICAgICBwcmV2YXJncy5hcHBlbmQoc2VsZi5fZW52W2ldKQogICAgICAgICAgICAgZGVsIHNlbGYuX2VudltpXQpAQCAtNDg4LDcgKzQ4OCw3IEBACiAgICAgICAgIHJldHVybiBwcmV2YXJncwogICAgICAgICAKICAgICBkZWYgZ2V0X3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLl9lbnZbc3RyKGkrMSldIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fZW52WycjJ10pKV0KKyAgICAgICAgcmV0dXJuIFtzZWxmLl9lbnZbc3RyKGkrMSldIGZvciBpIGluIHJhbmdlKGludChzZWxmLl9lbnZbJyMnXSkpXQogICAgICAgICAKICAgICBkZWYgZ2V0X3ZhcmlhYmxlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5fZW52KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaGxleC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2hsZXgucHkKaW5kZXggYjMwMTIzNi4uZmJmMDk0YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaGxleC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNobGV4LnB5CkBAIC0yMCw3ICsyMCw3IEBACiAgICAgZnJvbSBTZXQgaW1wb3J0IFNldCBhcyBzZXQKIAogZnJvbSBwbHkgaW1wb3J0IGxleAotZnJvbSBzaGVycm9ycyBpbXBvcnQgKgorZnJvbSBiYi5weXNoLnNoZXJyb3JzIGltcG9ydCAqCiAKIGNsYXNzIE5lZWRNb3JlKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaHlhY2MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoeWFjYy5weQppbmRleCBlOGU4MGFhLi5iYTRjZWZkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoeWFjYy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoeWFjYy5weQpAQCAtMTAsMTEgKzEwLDExIEBACiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwogCi1pbXBvcnQgcHlzaGxleAoraW1wb3J0IGJiLnB5c2gucHlzaGxleCBhcyBweXNobGV4CiB0b2tlbnMgPSBweXNobGV4LnRva2VucwogCiBmcm9tIHBseSBpbXBvcnQgeWFjYwotaW1wb3J0IHNoZXJyb3JzCitpbXBvcnQgYmIucHlzaC5zaGVycm9ycyBhcyBzaGVycm9ycwogICAgIAogY2xhc3MgSU9SZWRpcmVjdDoKICAgICBkZWYgX19pbml0X18oc2VsZiwgb3AsIGZpbGVuYW1lLCBpb19udW1iZXI9Tm9uZSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkKaW5kZXggZTFiOWIyZS4uODRiMjY4NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3J1bnF1ZXVlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weQpAQCAtMzUsMTcgKzM1LDQ0IEBACiBmcm9tIGJiIGltcG9ydCBtc2csIGRhdGEsIGV2ZW50CiBmcm9tIGJiIGltcG9ydCBtb25pdG9yZGlzawogaW1wb3J0IHN1YnByb2Nlc3MKLQotdHJ5OgotICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBwaWNrbGUKK2ltcG9ydCBwaWNrbGUKIAogYmJsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5SdW5RdWV1ZSIpCiAKIF9fZmluZF9tZDVfXyA9IHJlLmNvbXBpbGUoIHInKD9pKSg/PCFbYS16MC05XSlbYS1mMC05XXszMn0oPyFbYS16MC05XSknICkKIAorZGVmIGZuX2Zyb21fdGlkKHRpZCk6CisgICAgIHJldHVybiB0aWQucnNwbGl0KCI6IiwgMSlbMF0KKworZGVmIHRhc2tuYW1lX2Zyb21fdGlkKHRpZCk6CisgICAgcmV0dXJuIHRpZC5yc3BsaXQoIjoiLCAxKVsxXQorCitkZWYgc3BsaXRfdGlkKHRpZCk6CisgICAgKG1jLCBmbiwgdGFza25hbWUsIF8pID0gc3BsaXRfdGlkX21jZm4odGlkKQorICAgIHJldHVybiAobWMsIGZuLCB0YXNrbmFtZSkKKworZGVmIHNwbGl0X3RpZF9tY2ZuKHRpZCk6CisgICAgaWYgdGlkLnN0YXJ0c3dpdGgoJ211bHRpY29uZmlnOicpOgorICAgICAgICBlbGVtcyA9IHRpZC5zcGxpdCgnOicpCisgICAgICAgIG1jID0gZWxlbXNbMV0KKyAgICAgICAgZm4gPSAiOiIuam9pbihlbGVtc1syOi0xXSkKKyAgICAgICAgdGFza25hbWUgPSBlbGVtc1stMV0KKyAgICAgICAgbWNmbiA9ICJtdWx0aWNvbmZpZzoiICsgbWMgKyAiOiIgKyBmbgorICAgIGVsc2U6CisgICAgICAgIHRpZCA9IHRpZC5yc3BsaXQoIjoiLCAxKQorICAgICAgICBtYyA9ICIiCisgICAgICAgIGZuID0gdGlkWzBdCisgICAgICAgIHRhc2tuYW1lID0gdGlkWzFdCisgICAgICAgIG1jZm4gPSBmbgorCisgICAgcmV0dXJuIChtYywgZm4sIHRhc2tuYW1lLCBtY2ZuKQorCitkZWYgYnVpbGRfdGlkKG1jLCBmbiwgdGFza25hbWUpOgorICAgIGlmIG1jOgorICAgICAgICByZXR1cm4gIm11bHRpY29uZmlnOiIgKyBtYyArICI6IiArIGZuICsgIjoiICsgdGFza25hbWUKKyAgICByZXR1cm4gZm4gKyAiOiIgKyB0YXNrbmFtZQorCiBjbGFzcyBSdW5RdWV1ZVN0YXRzOgogICAgICIiIgogICAgIEhvbGRzIHN0YXRpc3RpY3Mgb24gdGhlIHRhc2tzIGhhbmRsZWQgYnkgdGhlIGFzc29jaWF0ZWQgcnVuUXVldWUKQEAgLTEwMSwxOSArMTI4LDE3IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJxID0gcnVucXVldWUKICAgICAgICAgc2VsZi5ycWRhdGEgPSBycWRhdGEKLSAgICAgICAgc2VsZi5udW1UYXNrcyA9IGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpCisgICAgICAgIHNlbGYubnVtVGFza3MgPSBsZW4oc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXMpCiAKLSAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCi0gICAgICAgIHNlbGYucHJpb19tYXAuZXh0ZW5kKHJhbmdlKHNlbGYubnVtVGFza3MpKQorICAgICAgICBzZWxmLnByaW9fbWFwID0gW3NlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzLmtleXMoKV0KIAogICAgICAgICBzZWxmLmJ1aWxkYWJsZSA9IFtdCiAgICAgICAgIHNlbGYuc3RhbXBzID0ge30KLSAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2Uoc2VsZi5udW1UYXNrcyk6Ci0gICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNraWRdXQotICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza2lkXQotICAgICAgICAgICAgc2VsZi5zdGFtcHNbdGFza2lkXSA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKLSAgICAgICAgICAgIGlmIHNlbGYucnEucnVucV9idWlsZGFibGVbdGFza2lkXSA9PSAxOgotICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRhYmxlLmFwcGVuZCh0YXNraWQpCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgdGFza2ZuKSA9IHNwbGl0X3RpZF9tY2ZuKHRpZCkKKyAgICAgICAgICAgIHNlbGYuc3RhbXBzW3RpZF0gPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLCB0YXNrZm4sIG5vZXh0cmE9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHRpZCBpbiBzZWxmLnJxLnJ1bnFfYnVpbGRhYmxlOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRhYmxlLmFwcGVuZCh0aWQpCiAKICAgICAgICAgc2VsZi5yZXZfcHJpb19tYXAgPSBOb25lCiAKQEAgLTEyMSwzMCArMTQ2LDMwIEBACiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm4gdGhlIGlkIG9mIHRoZSBmaXJzdCB0YXNrIHdlIGZpbmQgdGhhdCBpcyBidWlsZGFibGUKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYnVpbGRhYmxlID0gW3ggZm9yIHggaW4gc2VsZi5idWlsZGFibGUgaWYgbm90IHNlbGYucnEucnVucV9ydW5uaW5nW3hdID09IDFdCisgICAgICAgIHNlbGYuYnVpbGRhYmxlID0gW3ggZm9yIHggaW4gc2VsZi5idWlsZGFibGUgaWYgeCBub3QgaW4gc2VsZi5ycS5ydW5xX3J1bm5pbmddCiAgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkYWJsZToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkYWJsZSkgPT0gMToKLSAgICAgICAgICAgIHRhc2tpZCA9IHNlbGYuYnVpbGRhYmxlWzBdCi0gICAgICAgICAgICBzdGFtcCA9IHNlbGYuc3RhbXBzW3Rhc2tpZF0KLSAgICAgICAgICAgIGlmIHN0YW1wIG5vdCBpbiBzZWxmLnJxLmJ1aWxkX3N0YW1wcy5pdGVydmFsdWVzKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tpZAorICAgICAgICAgICAgdGlkID0gc2VsZi5idWlsZGFibGVbMF0KKyAgICAgICAgICAgIHN0YW1wID0gc2VsZi5zdGFtcHNbdGlkXQorICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHNlbGYucnEuYnVpbGRfc3RhbXBzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHJldHVybiB0aWQKIAogICAgICAgICBpZiBub3Qgc2VsZi5yZXZfcHJpb19tYXA6Ci0gICAgICAgICAgICBzZWxmLnJldl9wcmlvX21hcCA9IHJhbmdlKHNlbGYubnVtVGFza3MpCi0gICAgICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShzZWxmLm51bVRhc2tzKToKLSAgICAgICAgICAgICAgICBzZWxmLnJldl9wcmlvX21hcFtzZWxmLnByaW9fbWFwW3Rhc2tpZF1dID0gdGFza2lkCisgICAgICAgICAgICBzZWxmLnJldl9wcmlvX21hcCA9IHt9CisgICAgICAgICAgICBmb3IgdGlkIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgICAgIHNlbGYucmV2X3ByaW9fbWFwW3RpZF0gPSBzZWxmLnByaW9fbWFwLmluZGV4KHRpZCkKIAogICAgICAgICBiZXN0ID0gTm9uZQogICAgICAgICBiZXN0cHJpbyA9IE5vbmUKLSAgICAgICAgZm9yIHRhc2tpZCBpbiBzZWxmLmJ1aWxkYWJsZToKLSAgICAgICAgICAgIHByaW8gPSBzZWxmLnJldl9wcmlvX21hcFt0YXNraWRdCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5idWlsZGFibGU6CisgICAgICAgICAgICBwcmlvID0gc2VsZi5yZXZfcHJpb19tYXBbdGlkXQogICAgICAgICAgICAgaWYgYmVzdHByaW8gaXMgTm9uZSBvciBiZXN0cHJpbyA+IHByaW86Ci0gICAgICAgICAgICAgICAgc3RhbXAgPSBzZWxmLnN0YW1wc1t0YXNraWRdCi0gICAgICAgICAgICAgICAgaWYgc3RhbXAgaW4gc2VsZi5ycS5idWlsZF9zdGFtcHMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHN0YW1wID0gc2VsZi5zdGFtcHNbdGlkXQorICAgICAgICAgICAgICAgIGlmIHN0YW1wIGluIHNlbGYucnEuYnVpbGRfc3RhbXBzLnZhbHVlcygpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGJlc3RwcmlvID0gcHJpbwotICAgICAgICAgICAgICAgIGJlc3QgPSB0YXNraWQKKyAgICAgICAgICAgICAgICBiZXN0ID0gdGlkCiAKICAgICAgICAgcmV0dXJuIGJlc3QKIApAQCAtMTcxLDE0ICsxOTYsMTcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFJ1blF1ZXVlU2NoZWR1bGVyLl9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpCiAKLSAgICAgICAgc29ydHdlaWdodCA9IHNvcnRlZChjb3B5LmRlZXBjb3B5KHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0KSkKLSAgICAgICAgY29weXdlaWdodCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5ycWRhdGEucnVucV93ZWlnaHQpCi0gICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQorICAgICAgICB3ZWlnaHRzID0ge30KKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgIHdlaWdodCA9IHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0ud2VpZ2h0CisgICAgICAgICAgICBpZiBub3Qgd2VpZ2h0IGluIHdlaWdodHM6CisgICAgICAgICAgICAgICAgd2VpZ2h0c1t3ZWlnaHRdID0gW10KKyAgICAgICAgICAgIHdlaWdodHNbd2VpZ2h0XS5hcHBlbmQodGlkKQogCi0gICAgICAgIGZvciB3ZWlnaHQgaW4gc29ydHdlaWdodDoKLSAgICAgICAgICAgIGlkeCA9IGNvcHl3ZWlnaHQuaW5kZXgod2VpZ2h0KQotICAgICAgICAgICAgc2VsZi5wcmlvX21hcC5hcHBlbmQoaWR4KQotICAgICAgICAgICAgY29weXdlaWdodFtpZHhdID0gLTEKKyAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCisgICAgICAgIGZvciB3ZWlnaHQgaW4gc29ydGVkKHdlaWdodHMpOgorICAgICAgICAgICAgZm9yIHcgaW4gd2VpZ2h0c1t3ZWlnaHRdOgorICAgICAgICAgICAgICAgIHNlbGYucHJpb19tYXAuYXBwZW5kKHcpCiAKICAgICAgICAgc2VsZi5wcmlvX21hcC5yZXZlcnNlKCkKIApAQCAtMTk1LDMyICsyMjMsNDAgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSk6CiAgICAgICAgIFJ1blF1ZXVlU2NoZWR1bGVyU3BlZWQuX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSkKIAotICAgICAgICAjRklYTUUgLSB3aGlsc3QgdGhpcyBncm91cHMgYWxsIGZuaWRzIHRvZ2V0aGVyIGl0IGRvZXMgbm90IHJlb3JkZXIgdGhlCi0gICAgICAgICNmbmlkIGdyb3VwcyBvcHRpbWFsbHkuCisgICAgICAgICNGSVhNRSAtIHdoaWxzdCB0aGlzIGdyb3VwcyBhbGwgZm5zIHRvZ2V0aGVyIGl0IGRvZXMgbm90IHJlb3JkZXIgdGhlCisgICAgICAgICNmbiBncm91cHMgb3B0aW1hbGx5LgogCiAgICAgICAgIGJhc2VtYXAgPSBjb3B5LmRlZXBjb3B5KHNlbGYucHJpb19tYXApCiAgICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQogICAgICAgICB3aGlsZSAobGVuKGJhc2VtYXApID4gMCk6CiAgICAgICAgICAgICBlbnRyeSA9IGJhc2VtYXAucG9wKDApCiAgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChlbnRyeSkKLSAgICAgICAgICAgIGZuaWQgPSBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZW50cnldCisgICAgICAgICAgICBmbiA9IGZuX2Zyb21fdGlkKGVudHJ5KQogICAgICAgICAgICAgdG9kZWwgPSBbXQogICAgICAgICAgICAgZm9yIGVudHJ5IGluIGJhc2VtYXA6Ci0gICAgICAgICAgICAgICAgZW50cnlfZm5pZCA9IHNlbGYucnFkYXRhLnJ1bnFfZm5pZFtlbnRyeV0KLSAgICAgICAgICAgICAgICBpZiBlbnRyeV9mbmlkID09IGZuaWQ6CisgICAgICAgICAgICAgICAgZW50cnlfZm4gPSBmbl9mcm9tX3RpZChlbnRyeSkKKyAgICAgICAgICAgICAgICBpZiBlbnRyeV9mbiA9PSBmbjoKICAgICAgICAgICAgICAgICAgICAgdG9kZWwuYXBwZW5kKGJhc2VtYXAuaW5kZXgoZW50cnkpKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChlbnRyeSkKICAgICAgICAgICAgIHRvZGVsLnJldmVyc2UoKQogICAgICAgICAgICAgZm9yIGlkeCBpbiB0b2RlbDoKICAgICAgICAgICAgICAgICBkZWwgYmFzZW1hcFtpZHhdCiAKK2NsYXNzIFJ1blRhc2tFbnRyeShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kZXBlbmRzID0gc2V0KCkKKyAgICAgICAgc2VsZi5yZXZkZXBzID0gc2V0KCkKKyAgICAgICAgc2VsZi5oYXNoID0gTm9uZQorICAgICAgICBzZWxmLnRhc2sgPSBOb25lCisgICAgICAgIHNlbGYud2VpZ2h0ID0gMQorCiBjbGFzcyBSdW5RdWV1ZURhdGE6CiAgICAgIiIiCiAgICAgQml0QmFrZSBSdW4gUXVldWUgaW1wbGVtZW50YXRpb24KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcnEsIGNvb2tlciwgY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXNrRGF0YSwgdGFyZ2V0cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxLCBjb29rZXIsIGNmZ0RhdGEsIGRhdGFDYWNoZXMsIHRhc2tEYXRhLCB0YXJnZXRzKToKICAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKLSAgICAgICAgc2VsZi5kYXRhQ2FjaGUgPSBkYXRhQ2FjaGUKKyAgICAgICAgc2VsZi5kYXRhQ2FjaGVzID0gZGF0YUNhY2hlcwogICAgICAgICBzZWxmLnRhc2tEYXRhID0gdGFza0RhdGEKICAgICAgICAgc2VsZi50YXJnZXRzID0gdGFyZ2V0cwogICAgICAgICBzZWxmLnJxID0gcnEKQEAgLTIyOCw1MiArMjY0LDM2IEBACiAKICAgICAgICAgc2VsZi5zdGFtcHdoaXRlbGlzdCA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TVEFNUF9XSElURUxJU1QiLCBUcnVlKSBvciAiIgogICAgICAgICBzZWxmLm11bHRpX3Byb3ZpZGVyX3doaXRlbGlzdCA9IChjZmdEYXRhLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5zZXRzY2VuZXdoaXRlbGlzdCA9IGdldF9zZXRzY2VuZV9lbmZvcmNlX3doaXRlbGlzdChjZmdEYXRhKQorICAgICAgICBzZWxmLnNldHNjZW5ld2hpdGVsaXN0X2NoZWNrZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIgPSBiYi5wcm9ncmVzcy5EdW1teU11bHRpU3RhZ2VQcm9jZXNzUHJvZ3Jlc3NSZXBvcnRlcigpCiAKICAgICAgICAgc2VsZi5yZXNldCgpCiAKICAgICBkZWYgcmVzZXQoc2VsZik6Ci0gICAgICAgIHNlbGYucnVucV9mbmlkID0gW10KLSAgICAgICAgc2VsZi5ydW5xX3Rhc2sgPSBbXQotICAgICAgICBzZWxmLnJ1bnFfZGVwZW5kcyA9IFtdCi0gICAgICAgIHNlbGYucnVucV9yZXZkZXBzID0gW10KLSAgICAgICAgc2VsZi5ydW5xX2hhc2ggPSBbXQorICAgICAgICBzZWxmLnJ1bnRhc2tlbnRyaWVzID0ge30KIAogICAgIGRlZiBydW5xX2RlcGVuZHNfbmFtZXMoc2VsZiwgaWRzKToKICAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIHJldCA9IFtdCi0gICAgICAgIGZvciBpZCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1tpZHNdOgotICAgICAgICAgICAgbmFtID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF91c2VyX2lkc3RyaW5nKGlkKSkKKyAgICAgICAgZm9yIGlkIGluIGlkczoKKyAgICAgICAgICAgIG5hbSA9IG9zLnBhdGguYmFzZW5hbWUoaWQpCiAgICAgICAgICAgICBuYW0gPSByZS5zdWIoIl9bXixdKiwiLCAiLCIsIG5hbSkKICAgICAgICAgICAgIHJldC5leHRlbmQoW25hbV0pCiAgICAgICAgIHJldHVybiByZXQKIAotICAgIGRlZiBnZXRfdGFza19uYW1lKHNlbGYsIHRhc2spOgotICAgICAgICByZXR1cm4gc2VsZi5ydW5xX3Rhc2tbdGFza10KKyAgICBkZWYgZ2V0X3Rhc2tfaGFzaChzZWxmLCB0aWQpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLmhhc2gKIAotICAgIGRlZiBnZXRfdGFza19maWxlKHNlbGYsIHRhc2spOgotICAgICAgICByZXR1cm4gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KLQotICAgIGRlZiBnZXRfdGFza19oYXNoKHNlbGYsIHRhc2spOgotICAgICAgICByZXR1cm4gc2VsZi5ydW5xX2hhc2hbdGFza10KLQotICAgIGRlZiBnZXRfdXNlcl9pZHN0cmluZyhzZWxmLCB0YXNrLCB0YXNrX25hbWVfc3VmZml4ID0gIiIpOgotICAgICAgICBmbiA9IHNlbGYudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbdGFza11dCi0gICAgICAgIHRhc2tuYW1lID0gc2VsZi5ydW5xX3Rhc2tbdGFza10gKyB0YXNrX25hbWVfc3VmZml4Ci0gICAgICAgIHJldHVybiAiJXMsICVzIiAlIChmbiwgdGFza25hbWUpCisgICAgZGVmIGdldF91c2VyX2lkc3RyaW5nKHNlbGYsIHRpZCwgdGFza19uYW1lX3N1ZmZpeCA9ICIiKToKKyAgICAgICAgcmV0dXJuIHRpZCArIHRhc2tfbmFtZV9zdWZmaXgKIAogICAgIGRlZiBnZXRfc2hvcnRfdXNlcl9pZHN0cmluZyhzZWxmLCB0YXNrLCB0YXNrX25hbWVfc3VmZml4ID0gIiIpOgotICAgICAgICBmbiA9IHNlbGYudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbdGFza11dCi0gICAgICAgIHBuID0gc2VsZi5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQotICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnVucV90YXNrW3Rhc2tdICsgdGFza19uYW1lX3N1ZmZpeAorICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgXykgPSBzcGxpdF90aWRfbWNmbih0YXNrKQorICAgICAgICBwbiA9IHNlbGYuZGF0YUNhY2hlc1ttY10ucGtnX2ZuW2ZuXQorICAgICAgICB0YXNrbmFtZSA9IHRhc2tuYW1lX2Zyb21fdGlkKHRhc2spICsgdGFza19uYW1lX3N1ZmZpeAogICAgICAgICByZXR1cm4gIiVzOiVzIiAlIChwbiwgdGFza25hbWUpCiAKLQotICAgIGRlZiBnZXRfdGFza19pZChzZWxmLCBmbmlkLCB0YXNrbmFtZSk6Ci0gICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgotICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2ZuaWRbbGlzdGlkXSA9PSBmbmlkIGFuZCBzZWxmLnJ1bnFfdGFza1tsaXN0aWRdID09IHRhc2tuYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBsaXN0aWQKLSAgICAgICAgcmV0dXJuIE5vbmUKLQogICAgIGRlZiBjaXJjdWxhcl9kZXBjaGFpbnNfaGFuZGxlcihzZWxmLCB0YXNrcyk6CiAgICAgICAgICIiIgogICAgICAgICBTb21lIHRhc2tzIGFyZW4ndCBidWlsZGFibGUsIGxpa2VseSBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZXMuCkBAIC0yOTEsNyArMzExLDcgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgbG93ZXN0ID0gMAogICAgICAgICAgICAgbmV3X2NoYWluID0gW10KLSAgICAgICAgICAgIGZvciBlbnRyeSBpbiB4cmFuZ2UobGVuKGNoYWluKSk6CisgICAgICAgICAgICBmb3IgZW50cnkgaW4gcmFuZ2UobGVuKGNoYWluKSk6CiAgICAgICAgICAgICAgICAgaWYgY2hhaW5bZW50cnldIDwgY2hhaW5bbG93ZXN0XToKICAgICAgICAgICAgICAgICAgICAgbG93ZXN0ID0gZW50cnkKICAgICAgICAgICAgIG5ld19jaGFpbi5leHRlbmQoY2hhaW5bbG93ZXN0Ol0pCkBAIC0zMDQsNyArMzI0LDcgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgaWYgbGVuKGNoYWluMSkgIT0gbGVuKGNoYWluMik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBmb3IgaW5kZXggaW4geHJhbmdlKGxlbihjaGFpbjEpKToKKyAgICAgICAgICAgIGZvciBpbmRleCBpbiByYW5nZShsZW4oY2hhaW4xKSk6CiAgICAgICAgICAgICAgICAgaWYgY2hhaW4xW2luZGV4XSAhPSBjaGFpbjJbaW5kZXhdOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC0zMTgsMTEgKzMzOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgZGVmIGZpbmRfY2hhaW5zKHRhc2tpZCwgcHJldl9jaGFpbik6Ci0gICAgICAgICAgICBwcmV2X2NoYWluLmFwcGVuZCh0YXNraWQpCisgICAgICAgIGRlZiBmaW5kX2NoYWlucyh0aWQsIHByZXZfY2hhaW4pOgorICAgICAgICAgICAgcHJldl9jaGFpbi5hcHBlbmQodGlkKQogICAgICAgICAgICAgdG90YWxfZGVwcyA9IFtdCi0gICAgICAgICAgICB0b3RhbF9kZXBzLmV4dGVuZChzZWxmLnJ1bnFfcmV2ZGVwc1t0YXNraWRdKQotICAgICAgICAgICAgZm9yIHJldmRlcCBpbiBzZWxmLnJ1bnFfcmV2ZGVwc1t0YXNraWRdOgorICAgICAgICAgICAgdG90YWxfZGVwcy5leHRlbmQoc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLnJldmRlcHMpCisgICAgICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5yZXZkZXBzOgogICAgICAgICAgICAgICAgIGlmIHJldmRlcCBpbiBwcmV2X2NoYWluOgogICAgICAgICAgICAgICAgICAgICBpZHggPSBwcmV2X2NoYWluLmluZGV4KHJldmRlcCkKICAgICAgICAgICAgICAgICAgICAgIyBUbyBwcmV2ZW50IGR1cGxpY2F0ZXMsIHJlb3JkZXIgdGhlIGNoYWluIHRvIHN0YXJ0IHdpdGggdGhlIGxvd2VzdCB0YXNraWQKQEAgLTMzMyw3ICszNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfY2hhaW5zLmFwcGVuZChuZXdfY2hhaW4pCiAgICAgICAgICAgICAgICAgICAgICAgICBtc2dzLmFwcGVuZCgiRGVwZW5kZW5jeSBsb29wICMlZCBmb3VuZDpcbiIgJSBsZW4odmFsaWRfY2hhaW5zKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gbmV3X2NoYWluOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKCIgIFRhc2sgJXMgKCVzKSAoZGVwZW5kZW50IFRhc2tzICVzKVxuIiAlIChkZXAsIHNlbGYuZ2V0X3VzZXJfaWRzdHJpbmcoZGVwKSwgc2VsZi5ydW5xX2RlcGVuZHNfbmFtZXMoZGVwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIiAgVGFzayAlcyAoZGVwZW5kZW50IFRhc2tzICVzKVxuIiAlIChkZXAsIHNlbGYucnVucV9kZXBlbmRzX25hbWVzKHNlbGYucnVudGFza2VudHJpZXNbZGVwXS5kZXBlbmRzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBtc2dzLmFwcGVuZCgiXG4iKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW4odmFsaWRfY2hhaW5zKSA+IDEwOgogICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIkFib3J0ZWQgZGVwZW5kZW5jeSBsb29wcyBzZWFyY2ggYWZ0ZXIgMTAgbWF0Y2hlcy5cbiIpCkBAIC0zNTQsNyArMzc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiB0b3RhbF9kZXBzOgogICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfZGVwcy5hcHBlbmQoZGVwKQogCi0gICAgICAgICAgICBleHBsb3JlZF9kZXBzW3Rhc2tpZF0gPSB0b3RhbF9kZXBzCisgICAgICAgICAgICBleHBsb3JlZF9kZXBzW3RpZF0gPSB0b3RhbF9kZXBzCiAKICAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CiAgICAgICAgICAgICBmaW5kX2NoYWlucyh0YXNrLCBbXSkKQEAgLTM3MCwyNSArMzkwLDI1IEBACiAgICAgICAgIHBvc3NpYmxlIHRvIGV4ZWN1dGUgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICAgICAgIiIiCiAKLSAgICAgICAgbnVtVGFza3MgPSBsZW4oc2VsZi5ydW5xX2ZuaWQpCi0gICAgICAgIHdlaWdodCA9IFtdCi0gICAgICAgIGRlcHNfbGVmdCA9IFtdCi0gICAgICAgIHRhc2tfZG9uZSA9IFtdCisgICAgICAgIG51bVRhc2tzID0gbGVuKHNlbGYucnVudGFza2VudHJpZXMpCisgICAgICAgIHdlaWdodCA9IHt9CisgICAgICAgIGRlcHNfbGVmdCA9IHt9CisgICAgICAgIHRhc2tfZG9uZSA9IHt9CiAKLSAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobnVtVGFza3MpOgotICAgICAgICAgICAgdGFza19kb25lLmFwcGVuZChGYWxzZSkKLSAgICAgICAgICAgIHdlaWdodC5hcHBlbmQoMSkKLSAgICAgICAgICAgIGRlcHNfbGVmdC5hcHBlbmQobGVuKHNlbGYucnVucV9yZXZkZXBzW2xpc3RpZF0pKQorICAgICAgICBmb3IgdGlkIGluIHNlbGYucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICB0YXNrX2RvbmVbdGlkXSA9IEZhbHNlCisgICAgICAgICAgICB3ZWlnaHRbdGlkXSA9IDEKKyAgICAgICAgICAgIGRlcHNfbGVmdFt0aWRdID0gbGVuKHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5yZXZkZXBzKQogCi0gICAgICAgIGZvciBsaXN0aWQgaW4gZW5kcG9pbnRzOgotICAgICAgICAgICAgd2VpZ2h0W2xpc3RpZF0gPSAxMAotICAgICAgICAgICAgdGFza19kb25lW2xpc3RpZF0gPSBUcnVlCisgICAgICAgIGZvciB0aWQgaW4gZW5kcG9pbnRzOgorICAgICAgICAgICAgd2VpZ2h0W3RpZF0gPSAxMAorICAgICAgICAgICAgdGFza19kb25lW3RpZF0gPSBUcnVlCiAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIG5leHRfcG9pbnRzID0gW10KLSAgICAgICAgICAgIGZvciBsaXN0aWQgaW4gZW5kcG9pbnRzOgotICAgICAgICAgICAgICAgIGZvciByZXZkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKLSAgICAgICAgICAgICAgICAgICAgd2VpZ2h0W3JldmRlcF0gPSB3ZWlnaHRbcmV2ZGVwXSArIHdlaWdodFtsaXN0aWRdCisgICAgICAgICAgICBmb3IgdGlkIGluIGVuZHBvaW50czoKKyAgICAgICAgICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5kZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICB3ZWlnaHRbcmV2ZGVwXSA9IHdlaWdodFtyZXZkZXBdICsgd2VpZ2h0W3RpZF0KICAgICAgICAgICAgICAgICAgICAgZGVwc19sZWZ0W3JldmRlcF0gPSBkZXBzX2xlZnRbcmV2ZGVwXSAtIDEKICAgICAgICAgICAgICAgICAgICAgaWYgZGVwc19sZWZ0W3JldmRlcF0gPT0gMDoKICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfcG9pbnRzLmFwcGVuZChyZXZkZXApCkBAIC0zOTksMTQgKzQxOSwxNSBAQAogCiAgICAgICAgICMgQ2lyY3VsYXIgZGVwZW5kZW5jeSBzYW5pdHkgY2hlY2sKICAgICAgICAgcHJvYmxlbV90YXNrcyA9IFtdCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShudW1UYXNrcyk6Ci0gICAgICAgICAgICBpZiB0YXNrX2RvbmVbdGFza10gaXMgRmFsc2Ugb3IgZGVwc19sZWZ0W3Rhc2tdICE9IDA6Ci0gICAgICAgICAgICAgICAgcHJvYmxlbV90YXNrcy5hcHBlbmQodGFzaykKLSAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlRhc2sgJXMgKCVzKSBpcyBub3QgYnVpbGRhYmxlIiwgdGFzaywgc2VsZi5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKLSAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIihDb21wbGV0ZSBtYXJrZXIgd2FzICVzIGFuZCB0aGUgcmVtYWluaW5nIGRlcGVuZGVuY3kgY291bnQgd2FzICVzKVxuIiwgdGFza19kb25lW3Rhc2tdLCBkZXBzX2xlZnRbdGFza10pCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgIGlmIHRhc2tfZG9uZVt0aWRdIGlzIEZhbHNlIG9yIGRlcHNfbGVmdFt0aWRdICE9IDA6CisgICAgICAgICAgICAgICAgcHJvYmxlbV90YXNrcy5hcHBlbmQodGlkKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVGFzayAlcyBpcyBub3QgYnVpbGRhYmxlIiwgdGlkKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiKENvbXBsZXRlIG1hcmtlciB3YXMgJXMgYW5kIHRoZSByZW1haW5pbmcgZGVwZW5kZW5jeSBjb3VudCB3YXMgJXMpXG4iLCB0YXNrX2RvbmVbdGlkXSwgZGVwc19sZWZ0W3RpZF0pCisgICAgICAgICAgICBzZWxmLnJ1bnRhc2tlbnRyaWVzW3RpZF0ud2VpZ2h0ID0gd2VpZ2h0W3RpZF0KIAogICAgICAgICBpZiBwcm9ibGVtX3Rhc2tzOgotICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmJ1aWxkYWJsZSB0YXNrcyB3ZXJlIGZvdW5kLlxuIgorICAgICAgICAgICAgbWVzc2FnZSA9ICIlcyB1bmJ1aWxkYWJsZSB0YXNrcyB3ZXJlIGZvdW5kLlxuIiAlIGxlbihwcm9ibGVtX3Rhc2tzKQogICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgKyAiVGhlc2UgYXJlIHVzdWFsbHkgY2F1c2VkIGJ5IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYW55IGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hhaW5zIGZvdW5kIHdpbGwgYmUgcHJpbnRlZCBiZWxvdy4gSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsIHRvIHNlZSBhIGxpc3Qgb2YgdW5idWlsZGFibGUgdGFza3MuXG5cbiIKICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIklkZW50aWZ5aW5nIGRlcGVuZGVuY3kgbG9vcHMgKHRoaXMgbWF5IHRha2UgYSBzaG9ydCB3aGlsZSkuLi5cbiIKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtZXNzYWdlKQpAQCAtNDI2LDE4ICs0NDcsMjQgQEAKICAgICAgICAgdG8gb3B0aW1pc2UgdGhlIGV4ZWN1dGlvbiBvcmRlci4KICAgICAgICAgIiIiCiAKLSAgICAgICAgcnVucV9idWlsZCA9IFtdCisgICAgICAgIHJ1bnFfYnVpbGQgPSB7fQogICAgICAgICByZWN1cnNpdmV0YXNrcyA9IHt9CiAgICAgICAgIHJlY3Vyc2l2ZWl0YXNrcyA9IHt9CiAgICAgICAgIHJlY3Vyc2l2ZXRhc2tzc2VsZnJlZiA9IHNldCgpCiAKICAgICAgICAgdGFza0RhdGEgPSBzZWxmLnRhc2tEYXRhCiAKLSAgICAgICAgaWYgbGVuKHRhc2tEYXRhLnRhc2tzX25hbWUpID09IDA6CisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIG1jIGluIHNlbGYudGFza0RhdGE6CisgICAgICAgICAgICBpZiBsZW4odGFza0RhdGFbbWNdLnRhc2tlbnRyaWVzKSA+IDA6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGZvdW5kOgogICAgICAgICAgICAgIyBOb3RoaW5nIHRvIGRvCiAgICAgICAgICAgICByZXR1cm4gMAogCi0gICAgICAgIGxvZ2dlci5pbmZvKCJQcmVwYXJpbmcgUnVuUXVldWUiKQorICAgICAgICBzZWxmLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCiAKICAgICAgICAgIyBTdGVwIEEgLSBXb3JrIG91dCBhIGxpc3Qgb2YgdGFza3MgdG8gcnVuCiAgICAgICAgICMKQEAgLTQ1MCwxNjEgKzQ3NywxNzMgQEAKICAgICAgICAgIyBwcm9jZXNzIGlzIHJlcGVhdGVkIGZvciBlYWNoIHR5cGUgb2YgZGVwZW5kZW5jeSAodGRlcGVuZHMsIGRlcHRhc2ssCiAgICAgICAgICMgcmRlcHRhc3QsIHJlY3JkZXB0YXNrLCBpZGVwZW5kcykuCiAKLSAgICAgICAgZGVmIGFkZF9idWlsZF9kZXBlbmRlbmNpZXMoZGVwaWRzLCB0YXNrbmFtZXMsIGRlcGVuZHMpOgotICAgICAgICAgICAgZm9yIGRlcGlkIGluIGRlcGlkczoKKyAgICAgICAgZGVmIGFkZF9idWlsZF9kZXBlbmRlbmNpZXMoZGVwaWRzLCB0YXNrbmFtZXMsIGRlcGVuZHMsIG1jKToKKyAgICAgICAgICAgIGZvciBkZXBuYW1lIGluIGRlcGlkczoKICAgICAgICAgICAgICAgICAjIFdvbid0IGJlIGluIGJ1aWxkX3RhcmdldHMgaWYgQVNTVU1FX1BST1ZJREVECi0gICAgICAgICAgICAgICAgaWYgZGVwaWQgbm90IGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgaWYgZGVwbmFtZSBub3QgaW4gdGFza0RhdGFbbWNdLmJ1aWxkX3RhcmdldHMgb3Igbm90IHRhc2tEYXRhW21jXS5idWlsZF90YXJnZXRzW2RlcG5hbWVdOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5idWlsZF90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YVttY10uYnVpbGRfdGFyZ2V0c1tkZXBuYW1lXVswXQogICAgICAgICAgICAgICAgIGlmIGRlcGRhdGEgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBmb3IgdGFza25hbWUgaW4gdGFza25hbWVzOgotICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIHRhc2tuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisgICAgICAgICAgICAgICAgICAgIHQgPSBkZXBkYXRhICsgIjoiICsgdGFza25hbWUKKyAgICAgICAgICAgICAgICAgICAgaWYgdCBpbiB0YXNrRGF0YVttY10udGFza2VudHJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0KQogCi0gICAgICAgIGRlZiBhZGRfcnVudGltZV9kZXBlbmRlbmNpZXMoZGVwaWRzLCB0YXNrbmFtZXMsIGRlcGVuZHMpOgotICAgICAgICAgICAgZm9yIGRlcGlkIGluIGRlcGlkczoKLSAgICAgICAgICAgICAgICBpZiBkZXBpZCBub3QgaW4gdGFza0RhdGEucnVuX3RhcmdldHM6CisgICAgICAgIGRlZiBhZGRfcnVudGltZV9kZXBlbmRlbmNpZXMoZGVwaWRzLCB0YXNrbmFtZXMsIGRlcGVuZHMsIG1jKToKKyAgICAgICAgICAgIGZvciBkZXBuYW1lIGluIGRlcGlkczoKKyAgICAgICAgICAgICAgICBpZiBkZXBuYW1lIG5vdCBpbiB0YXNrRGF0YVttY10ucnVuX3RhcmdldHMgb3Igbm90IHRhc2tEYXRhW21jXS5ydW5fdGFyZ2V0c1tkZXBuYW1lXToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBkZXBkYXRhID0gdGFza0RhdGEucnVuX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHRhc2tEYXRhW21jXS5ydW5fdGFyZ2V0c1tkZXBuYW1lXVswXQogICAgICAgICAgICAgICAgIGlmIGRlcGRhdGEgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBmb3IgdGFza25hbWUgaW4gdGFza25hbWVzOgotICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIHRhc2tuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisgICAgICAgICAgICAgICAgICAgIHQgPSBkZXBkYXRhICsgIjoiICsgdGFza25hbWUKKyAgICAgICAgICAgICAgICAgICAgaWYgdCBpbiB0YXNrRGF0YVttY10udGFza2VudHJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0KQogCi0gICAgICAgIGRlZiBhZGRfcmVzb2x2ZWRfZGVwZW5kZW5jaWVzKGRlcGlkcywgdGFza25hbWVzLCBkZXBlbmRzKToKLSAgICAgICAgICAgIGZvciBkZXBpZCBpbiBkZXBpZHM6Ci0gICAgICAgICAgICAgICAgZm9yIHRhc2tuYW1lIGluIHRhc2tuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChkZXBpZCwgdGFza25hbWUpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKyAgICAgICAgZGVmIGFkZF9yZXNvbHZlZF9kZXBlbmRlbmNpZXMobWMsIGZuLCB0YXNrbmFtZXMsIGRlcGVuZHMpOgorICAgICAgICAgICAgZm9yIHRhc2tuYW1lIGluIHRhc2tuYW1lczoKKyAgICAgICAgICAgICAgICB0aWQgPSBidWlsZF90aWQobWMsIGZuLCB0YXNrbmFtZSkKKyAgICAgICAgICAgICAgICBpZiB0aWQgaW4gc2VsZi5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hZGQodGlkKQogCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza0RhdGEudGFza3NfbmFtZSkpOgotICAgICAgICAgICAgZGVwZW5kcyA9IHNldCgpCi0gICAgICAgICAgICBmbmlkID0gdGFza0RhdGEudGFza3NfZm5pZFt0YXNrXQotICAgICAgICAgICAgZm4gPSB0YXNrRGF0YS5mbl9pbmRleFtmbmlkXQotICAgICAgICAgICAgdGFza19kZXBzID0gc2VsZi5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICBmb3IgbWMgaW4gdGFza0RhdGE6CisgICAgICAgICAgICBmb3IgdGlkIGluIHRhc2tEYXRhW21jXS50YXNrZW50cmllczoKIAotICAgICAgICAgICAgI2xvZ2dlci5kZWJ1ZygyLCAiUHJvY2Vzc2luZyAlczolcyIsIGZuLCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdKQorICAgICAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lLCB0YXNrZm4pID0gc3BsaXRfdGlkX21jZm4odGlkKQorICAgICAgICAgICAgICAgICNydW50aWQgPSBidWlsZF90aWQobWMsIGZuLCB0YXNrbmFtZSkKIAotICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gdGFza0RhdGEuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMiwgIlByb2Nlc3NpbmcgJXMsJXM6JXMiLCBtYywgZm4sIHRhc2tuYW1lKQorCisgICAgICAgICAgICAgICAgZGVwZW5kcyA9IHNldCgpCisgICAgICAgICAgICAgICAgdGFza19kZXBzID0gc2VsZi5kYXRhQ2FjaGVzW21jXS50YXNrX2RlcHNbdGFza2ZuXQorCisgICAgICAgICAgICAgICAgc2VsZi5ydW50YXNrZW50cmllc1t0aWRdID0gUnVuVGFza0VudHJ5KCkKKworICAgICAgICAgICAgICAgIGlmIGZuIGluIHRhc2tEYXRhW21jXS5mYWlsZWRfZm5zOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgIyBSZXNvbHZlIHRhc2sgaW50ZXJuYWwgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICMgZS5nLiBhZGR0YXNrIGJlZm9yZSBYIGFmdGVyIFkKLSAgICAgICAgICAgICAgICBkZXBlbmRzID0gc2V0KHRhc2tEYXRhLnRhc2tzX3RkZXBlbmRzW3Rhc2tdKQorICAgICAgICAgICAgICAgIGZvciB0IGluIHRhc2tEYXRhW21jXS50YXNrZW50cmllc1t0aWRdLnRkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICAoXywgZGVwZm4sIGRlcHRhc2tuYW1lLCBfKSA9IHNwbGl0X3RpZF9tY2ZuKHQpCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKGJ1aWxkX3RpZChtYywgZGVwZm4sIGRlcHRhc2tuYW1lKSkKIAogICAgICAgICAgICAgICAgICMgUmVzb2x2ZSAnZGVwdGFzaycgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tkZXB0YXNrXSA9ICJkb19zb21lb3RoZXJ0YXNrIgogICAgICAgICAgICAgICAgICMgKG1ha2VzIHN1cmUgc29tZXRhc2sgcnVucyBhZnRlciBzb21lb3RoZXJ0YXNrIG9mIGFsbCBERVBFTkRTKQotICAgICAgICAgICAgICAgIGlmICdkZXB0YXNrJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10gaW4gdGFza19kZXBzWydkZXB0YXNrJ106Ci0gICAgICAgICAgICAgICAgICAgIHRhc2tuYW1lcyA9IHRhc2tfZGVwc1snZGVwdGFzayddW3Rhc2tEYXRhLnRhc2tzX25hbWVbdGFza11dLnNwbGl0KCkKLSAgICAgICAgICAgICAgICAgICAgYWRkX2J1aWxkX2RlcGVuZGVuY2llcyh0YXNrRGF0YS5kZXBpZHNbZm5pZF0sIHRhc2tuYW1lcywgZGVwZW5kcykKKyAgICAgICAgICAgICAgICBpZiAnZGVwdGFzaycgaW4gdGFza19kZXBzIGFuZCB0YXNrbmFtZSBpbiB0YXNrX2RlcHNbJ2RlcHRhc2snXToKKyAgICAgICAgICAgICAgICAgICAgdGFza25hbWVzID0gdGFza19kZXBzWydkZXB0YXNrJ11bdGFza25hbWVdLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgYWRkX2J1aWxkX2RlcGVuZGVuY2llcyh0YXNrRGF0YVttY10uZGVwaWRzW3Rhc2tmbl0sIHRhc2tuYW1lcywgZGVwZW5kcywgbWMpCiAKICAgICAgICAgICAgICAgICAjIFJlc29sdmUgJ3JkZXB0YXNrJyBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW3JkZXB0YXNrXSA9ICJkb19zb21lb3RoZXJ0YXNrIgogICAgICAgICAgICAgICAgICMgKG1ha2VzIHN1cmUgc29tZXRhc2sgcnVucyBhZnRlciBzb21lb3RoZXJ0YXNrIG9mIGFsbCBSREVQRU5EUykKLSAgICAgICAgICAgICAgICBpZiAncmRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JkZXB0YXNrJ106Ci0gICAgICAgICAgICAgICAgICAgIHRhc2tuYW1lcyA9IHRhc2tfZGVwc1sncmRlcHRhc2snXVt0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdXS5zcGxpdCgpCi0gICAgICAgICAgICAgICAgICAgIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyh0YXNrRGF0YS5yZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisgICAgICAgICAgICAgICAgaWYgJ3JkZXB0YXNrJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2tuYW1lIGluIHRhc2tfZGVwc1sncmRlcHRhc2snXToKKyAgICAgICAgICAgICAgICAgICAgdGFza25hbWVzID0gdGFza19kZXBzWydyZGVwdGFzayddW3Rhc2tuYW1lXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyh0YXNrRGF0YVttY10ucmRlcGlkc1t0YXNrZm5dLCB0YXNrbmFtZXMsIGRlcGVuZHMsIG1jKQogCiAgICAgICAgICAgICAgICAgIyBSZXNvbHZlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tkZXBlbmRzXSA9ICJ0YXJnZXRuYW1lOmRvX3NvbWVvdGhlcnRhc2siCiAgICAgICAgICAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHRhcmdldG5hbWUncyBzb21lb3RoZXJ0YXNrKQotICAgICAgICAgICAgICAgIGlkZXBlbmRzID0gdGFza0RhdGEudGFza3NfaWRlcGVuZHNbdGFza10KLSAgICAgICAgICAgICAgICBmb3IgKGRlcGlkLCBpZGVwZW5kdGFzaykgaW4gaWRlcGVuZHM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGRlcGlkIGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHMgYW5kIG5vdCBkZXBpZCBpbiB0YXNrRGF0YS5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgICAgICBpZGVwZW5kcyA9IHRhc2tEYXRhW21jXS50YXNrZW50cmllc1t0aWRdLmlkZXBlbmRzCisgICAgICAgICAgICAgICAgZm9yIChkZXBuYW1lLCBpZGVwZW5kdGFzaykgaW4gaWRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcG5hbWUgaW4gdGFza0RhdGFbbWNdLmJ1aWxkX3RhcmdldHMgYW5kIHRhc2tEYXRhW21jXS5idWlsZF90YXJnZXRzW2RlcG5hbWVdIGFuZCBub3QgZGVwbmFtZSBpbiB0YXNrRGF0YVttY10uZmFpbGVkX2RlcHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIFdvbid0IGJlIGluIGJ1aWxkX3RhcmdldHMgaWYgQVNTVU1FX1BST1ZJREVECi0gICAgICAgICAgICAgICAgICAgICAgICBkZXBkYXRhID0gdGFza0RhdGEuYnVpbGRfdGFyZ2V0c1tkZXBpZF1bMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YVttY10uYnVpbGRfdGFyZ2V0c1tkZXBuYW1lXVswXQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIGlkZXBlbmR0YXNrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgaW4gJXMgZGVwZW5kcyB1cG9uIG5vbi1leGlzdGVudCB0YXNrICVzIGluICVzIiAlICh0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdLCBmbiwgaWRlcGVuZHRhc2ssIHRhc2tEYXRhLmZuX2luZGV4W2RlcGRhdGFdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCi0gICAgICAgICAgICAgICAgaXJkZXBlbmRzID0gdGFza0RhdGEudGFza3NfaXJkZXBlbmRzW3Rhc2tdCi0gICAgICAgICAgICAgICAgZm9yIChkZXBpZCwgaWRlcGVuZHRhc2spIGluIGlyZGVwZW5kczoKLSAgICAgICAgICAgICAgICAgICAgaWYgZGVwaWQgaW4gdGFza0RhdGEucnVuX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGRlcGRhdGEgKyAiOiIgKyBpZGVwZW5kdGFzaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdCBub3QgaW4gdGFza0RhdGFbbWNdLnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgaW4gJXMgZGVwZW5kcyB1cG9uIG5vbi1leGlzdGVudCB0YXNrICVzIGluICVzIiAlICh0YXNrbmFtZSwgZm4sIGlkZXBlbmR0YXNrLCBkZXBkYXRhKSkKKyAgICAgICAgICAgICAgICBpcmRlcGVuZHMgPSB0YXNrRGF0YVttY10udGFza2VudHJpZXNbdGlkXS5pcmRlcGVuZHMKKyAgICAgICAgICAgICAgICBmb3IgKGRlcG5hbWUsIGlkZXBlbmR0YXNrKSBpbiBpcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcG5hbWUgaW4gdGFza0RhdGFbbWNdLnJ1bl90YXJnZXRzOgogICAgICAgICAgICAgICAgICAgICAgICAgIyBXb24ndCBiZSBpbiBydW5fdGFyZ2V0cyBpZiBBU1NVTUVfUFJPVklERUQKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5ydW5fdGFyZ2V0c1tkZXBpZF1bMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YVttY10ucnVuX3RhcmdldHNbZGVwbmFtZV1bMF0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcGRhdGEgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChkZXBkYXRhLCBpZGVwZW5kdGFzaykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzIGluICVzIHJkZXBlbmRzIHVwb24gbm9uLWV4aXN0ZW50IHRhc2sgJXMgaW4gJXMiICUgKHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10sIGZuLCBpZGVwZW5kdGFzaywgdGFza0RhdGEuZm5faW5kZXhbZGVwZGF0YV0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZGVwZGF0YSArICI6IiArIGlkZXBlbmR0YXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hZGQodCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0IG5vdCBpbiB0YXNrRGF0YVttY10udGFza2VudHJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlcyBpbiAlcyByZGVwZW5kcyB1cG9uIG5vbi1leGlzdGVudCB0YXNrICVzIGluICVzIiAlICh0YXNrbmFtZSwgZm4sIGlkZXBlbmR0YXNrLCBkZXBkYXRhKSkKIAogICAgICAgICAgICAgICAgICMgUmVzb2x2ZSByZWN1cnNpdmUgJ3JlY3JkZXB0YXNrJyBkZXBlbmRlbmNpZXMgKFBhcnQgQSkKICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW3JlY3JkZXB0YXNrXSA9ICJkb19zb21lb3RoZXJ0YXNrIgogICAgICAgICAgICAgICAgICMgKG1ha2VzIHN1cmUgc29tZXRhc2sgcnVucyBhZnRlciBzb21lb3RoZXJ0YXNrIG9mIGFsbCBERVBFTkRTLCBSREVQRU5EUyBhbmQgaW50ZXJ0YXNrIGRlcGVuZGVuY2llcywgcmVjdXJzaXZlbHkpCiAgICAgICAgICAgICAgICAgIyBXZSBjb3ZlciB0aGUgcmVjdXJzaXZlIHBhcnQgb2YgdGhlIGRlcGVuZGVuY2llcyBiZWxvdwotICAgICAgICAgICAgICAgIGlmICdyZWNyZGVwdGFzaycgaW4gdGFza19kZXBzIGFuZCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdIGluIHRhc2tfZGVwc1sncmVjcmRlcHRhc2snXToKLSAgICAgICAgICAgICAgICAgICAgdGFza25hbWVzID0gdGFza19kZXBzWydyZWNyZGVwdGFzayddW3Rhc2tEYXRhLnRhc2tzX25hbWVbdGFza11dLnNwbGl0KCkKLSAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZldGFza3NbdGFza10gPSB0YXNrbmFtZXMKLSAgICAgICAgICAgICAgICAgICAgYWRkX2J1aWxkX2RlcGVuZGVuY2llcyh0YXNrRGF0YS5kZXBpZHNbZm5pZF0sIHRhc2tuYW1lcywgZGVwZW5kcykKLSAgICAgICAgICAgICAgICAgICAgYWRkX3J1bnRpbWVfZGVwZW5kZW5jaWVzKHRhc2tEYXRhLnJkZXBpZHNbZm5pZF0sIHRhc2tuYW1lcywgZGVwZW5kcykKLSAgICAgICAgICAgICAgICAgICAgaWYgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmV0YXNrc3NlbGZyZWYuYWRkKHRhc2spCisgICAgICAgICAgICAgICAgaWYgJ3JlY3JkZXB0YXNrJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2tuYW1lIGluIHRhc2tfZGVwc1sncmVjcmRlcHRhc2snXToKKyAgICAgICAgICAgICAgICAgICAgdGFza25hbWVzID0gdGFza19kZXBzWydyZWNyZGVwdGFzayddW3Rhc2tuYW1lXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZXRhc2tzW3RpZF0gPSB0YXNrbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgYWRkX2J1aWxkX2RlcGVuZGVuY2llcyh0YXNrRGF0YVttY10uZGVwaWRzW3Rhc2tmbl0sIHRhc2tuYW1lcywgZGVwZW5kcywgbWMpCisgICAgICAgICAgICAgICAgICAgIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyh0YXNrRGF0YVttY10ucmRlcGlkc1t0YXNrZm5dLCB0YXNrbmFtZXMsIGRlcGVuZHMsIG1jKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrbmFtZSBpbiB0YXNrbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmV0YXNrc3NlbGZyZWYuYWRkKHRpZCkKIAotICAgICAgICAgICAgICAgICAgICBpZiAncmVjaWRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JlY2lkZXB0YXNrJ106Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVpdGFza3NbdGFza10gPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFza19kZXBzWydyZWNpZGVwdGFzayddW3Rhc2tEYXRhLnRhc2tzX25hbWVbdGFza11dLnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChmbmlkLCB0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWl0YXNrc1t0YXNrXS5hcHBlbmQobmV3ZGVwKQorICAgICAgICAgICAgICAgICAgICBpZiAncmVjaWRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza25hbWUgaW4gdGFza19kZXBzWydyZWNpZGVwdGFzayddOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlaXRhc2tzW3RpZF0gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFza19kZXBzWydyZWNpZGVwdGFzayddW3Rhc2tuYW1lXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2RlcCA9IGJ1aWxkX3RpZChtYywgZm4sIHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlaXRhc2tzW3RpZF0uYXBwZW5kKG5ld2RlcCkKIAotICAgICAgICAgICAgc2VsZi5ydW5xX2ZuaWQuYXBwZW5kKHRhc2tEYXRhLnRhc2tzX2ZuaWRbdGFza10pCi0gICAgICAgICAgICBzZWxmLnJ1bnFfdGFzay5hcHBlbmQodGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSkKLSAgICAgICAgICAgIHNlbGYucnVucV9kZXBlbmRzLmFwcGVuZChkZXBlbmRzKQotICAgICAgICAgICAgc2VsZi5ydW5xX3JldmRlcHMuYXBwZW5kKHNldCgpKQotICAgICAgICAgICAgc2VsZi5ydW5xX2hhc2guYXBwZW5kKCIiKQorICAgICAgICAgICAgICAgIHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5kZXBlbmRzID0gZGVwZW5kcwogCi0gICAgICAgICAgICBydW5xX2J1aWxkLmFwcGVuZCgwKQorICAgICAgICAjc2VsZi5kdW1wX2RhdGEoKQogCiAgICAgICAgICMgUmVzb2x2ZSByZWN1cnNpdmUgJ3JlY3JkZXB0YXNrJyBkZXBlbmRlbmNpZXMgKFBhcnQgQikKICAgICAgICAgIwogICAgICAgICAjIGUuZy4gZG9fc29tZXRhc2tbcmVjcmRlcHRhc2tdID0gImRvX3NvbWVvdGhlcnRhc2siCiAgICAgICAgICMgKG1ha2VzIHN1cmUgc29tZXRhc2sgcnVucyBhZnRlciBzb21lb3RoZXJ0YXNrIG9mIGFsbCBERVBFTkRTLCBSREVQRU5EUyBhbmQgaW50ZXJ0YXNrIGRlcGVuZGVuY2llcywgcmVjdXJzaXZlbHkpCi0gICAgICAgICMgV2UgbmVlZCB0byBkbyB0aGlzIHNlcGFyYXRlbHkgc2luY2Ugd2UgbmVlZCBhbGwgb2Ygc2VsZi5ydW5xX2RlcGVuZHMgdG8gYmUgY29tcGxldGUgYmVmb3JlIHRoaXMgaXMgcHJvY2Vzc2VkCisgICAgICAgICMgV2UgbmVlZCB0byBkbyB0aGlzIHNlcGFyYXRlbHkgc2luY2Ugd2UgbmVlZCBhbGwgb2YgcnVudGFza2VudHJpZXNbKl0uZGVwZW5kcyB0byBiZSBjb21wbGV0ZSBiZWZvcmUgdGhpcyBpcyBwcm9jZXNzZWQKKyAgICAgICAgc2VsZi5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UobGVuKHJlY3Vyc2l2ZXRhc2tzKSkKICAgICAgICAgZXh0cmFkZXBzID0ge30KLSAgICAgICAgZm9yIHRhc2sgaW4gcmVjdXJzaXZldGFza3M6Ci0gICAgICAgICAgICBleHRyYWRlcHNbdGFza10gPSBzZXQoc2VsZi5ydW5xX2RlcGVuZHNbdGFza10pCi0gICAgICAgICAgICB0YXNrbmFtZXMgPSByZWN1cnNpdmV0YXNrc1t0YXNrXQorICAgICAgICBmb3IgdGFza2NvdW50ZXIsIHRpZCBpbiBlbnVtZXJhdGUocmVjdXJzaXZldGFza3MpOgorICAgICAgICAgICAgZXh0cmFkZXBzW3RpZF0gPSBzZXQoc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLmRlcGVuZHMpCisKKyAgICAgICAgICAgIHRhc2tuYW1lcyA9IHJlY3Vyc2l2ZXRhc2tzW3RpZF0KICAgICAgICAgICAgIHNlZW5kZXBzID0gc2V0KCkKLSAgICAgICAgICAgIHNlZW5mbmlkID0gW10KIAogICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3JlY2RlcHModCk6CiAgICAgICAgICAgICAgICAgbmV3ZGVwcyA9IHNldCgpCi0gICAgICAgICAgICAgICAgYWRkX3Jlc29sdmVkX2RlcGVuZGVuY2llcyhbdGFza0RhdGEudGFza3NfZm5pZFt0XV0sIHRhc2tuYW1lcywgbmV3ZGVwcykKLSAgICAgICAgICAgICAgICBleHRyYWRlcHNbdGFza10udXBkYXRlKG5ld2RlcHMpCisgICAgICAgICAgICAgICAgKG1jLCBmbiwgdGFza25hbWUsIF8pID0gc3BsaXRfdGlkX21jZm4odCkKKyAgICAgICAgICAgICAgICBhZGRfcmVzb2x2ZWRfZGVwZW5kZW5jaWVzKG1jLCBmbiwgdGFza25hbWVzLCBuZXdkZXBzKQorICAgICAgICAgICAgICAgIGV4dHJhZGVwc1t0aWRdLnVwZGF0ZShuZXdkZXBzKQogICAgICAgICAgICAgICAgIHNlZW5kZXBzLmFkZCh0KQogICAgICAgICAgICAgICAgIG5ld2RlcHMuYWRkKHQpCiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gbmV3ZGVwczoKLSAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gc2VsZi5ydW5xX2RlcGVuZHNbaV06CisgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBzZWxmLnJ1bnRhc2tlbnRyaWVzW2ldLnRhc2sKKyAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gc2VsZi5ydW50YXNrZW50cmllc1tpXS5kZXBlbmRzOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gc2VlbmRlcHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyhuKQotICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyh0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKG4pCisgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKHRpZCkKIAotICAgICAgICAgICAgaWYgdGFzayBpbiByZWN1cnNpdmVpdGFza3M6Ci0gICAgICAgICAgICAgICAgZm9yIGRlcCBpbiByZWN1cnNpdmVpdGFza3NbdGFza106CisgICAgICAgICAgICBpZiB0aWQgaW4gcmVjdXJzaXZlaXRhc2tzOgorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gcmVjdXJzaXZlaXRhc2tzW3RpZF06CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX3JlY2RlcHMoZGVwKQorICAgICAgICAgICAgc2VsZi5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLnVwZGF0ZSh0YXNrY291bnRlcikKIAogICAgICAgICAjIFJlbW92ZSBjaXJjdWxhciByZWZlcmVuY2VzIHNvIHRoYXQgZG9fYVtyZWNyZGVwdGFza10gPSAiZG9fYSBkb19iIiBjYW4gd29yawotICAgICAgICBmb3IgdGFzayBpbiByZWN1cnNpdmV0YXNrczoKLSAgICAgICAgICAgIGV4dHJhZGVwc1t0YXNrXS5kaWZmZXJlbmNlX3VwZGF0ZShyZWN1cnNpdmV0YXNrc3NlbGZyZWYpCisgICAgICAgIGZvciB0aWQgaW4gcmVjdXJzaXZldGFza3M6CisgICAgICAgICAgICBleHRyYWRlcHNbdGlkXS5kaWZmZXJlbmNlX3VwZGF0ZShyZWN1cnNpdmV0YXNrc3NlbGZyZWYpCiAKLSAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbih0YXNrRGF0YS50YXNrc19uYW1lKSk6CisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgIHRhc2sgPSBzZWxmLnJ1bnRhc2tlbnRyaWVzW3RpZF0udGFzawogICAgICAgICAgICAgIyBBZGQgaW4gZXh0cmEgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICBpZiB0YXNrIGluIGV4dHJhZGVwczoKLSAgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbdGFza10gPSBleHRyYWRlcHNbdGFza10KKyAgICAgICAgICAgIGlmIHRpZCBpbiBleHRyYWRlcHM6CisgICAgICAgICAgICAgICAgIHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5kZXBlbmRzID0gZXh0cmFkZXBzW3RpZF0KICAgICAgICAgICAgICMgUmVtb3ZlIGFsbCBzZWxmIHJlZmVyZW5jZXMKLSAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ydW5xX2RlcGVuZHNbdGFza106Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJUYXNrICVzICglcyAlcykgY29udGFpbnMgc2VsZiByZWZlcmVuY2UhICVzIiwgdGFzaywgdGFza0RhdGEuZm5faW5kZXhbdGFza0RhdGEudGFza3NfZm5pZFt0YXNrXV0sIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10sIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdKQotICAgICAgICAgICAgICAgIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdLnJlbW92ZSh0YXNrKQorICAgICAgICAgICAgaWYgdGlkIGluIHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5kZXBlbmRzOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVGFzayAlcyBjb250YWlucyBzZWxmIHJlZmVyZW5jZSEiLCB0aWQpCisgICAgICAgICAgICAgICAgc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLmRlcGVuZHMucmVtb3ZlKHRpZCkKKworICAgICAgICBzZWxmLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCisKKyAgICAgICAgI3NlbGYuZHVtcF9kYXRhKCkKIAogICAgICAgICAjIFN0ZXAgQiAtIE1hcmsgYWxsIGFjdGl2ZSB0YXNrcwogICAgICAgICAjCkBAIC02MTQsMTQ4ICs2NTMsMTQ2IEBACiAKICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIk1hcmtpbmcgQWN0aXZlIFRhc2tzIikKIAotICAgICAgICBkZWYgbWFya19hY3RpdmUobGlzdGlkLCBkZXB0aCk6CisgICAgICAgIGRlZiBtYXJrX2FjdGl2ZSh0aWQsIGRlcHRoKToKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgTWFyayBhbiBpdGVtIGFzIGFjdGl2ZSBhbG9uZyB3aXRoIGl0cyBkZXBlbmRzCiAgICAgICAgICAgICAoY2FsbHMgaXRzZWxmIHJlY3Vyc2l2ZWx5KQogICAgICAgICAgICAgIiIiCiAKLSAgICAgICAgICAgIGlmIHJ1bnFfYnVpbGRbbGlzdGlkXSA9PSAxOgorICAgICAgICAgICAgaWYgdGlkIGluIHJ1bnFfYnVpbGQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgICAgIHJ1bnFfYnVpbGRbbGlzdGlkXSA9IDEKKyAgICAgICAgICAgIHJ1bnFfYnVpbGRbdGlkXSA9IDEKIAotICAgICAgICAgICAgZGVwZW5kcyA9IHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF0KKyAgICAgICAgICAgIGRlcGVuZHMgPSBzZWxmLnJ1bnRhc2tlbnRyaWVzW3RpZF0uZGVwZW5kcwogICAgICAgICAgICAgZm9yIGRlcGVuZCBpbiBkZXBlbmRzOgogICAgICAgICAgICAgICAgIG1hcmtfYWN0aXZlKGRlcGVuZCwgZGVwdGgrMSkKIAotICAgICAgICBzZWxmLnRhcmdldF9wYWlycyA9IFtdCi0gICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi50YXJnZXRzOgotICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrRGF0YS5nZXRidWlsZF9pZCh0YXJnZXRbMF0pCisgICAgICAgIHNlbGYudGFyZ2V0X3RpZHMgPSBbXQorICAgICAgICBmb3IgKG1jLCB0YXJnZXQsIHRhc2ssIGZuKSBpbiBzZWxmLnRhcmdldHM6CiAKLSAgICAgICAgICAgIGlmIHRhcmdldGlkIG5vdCBpbiB0YXNrRGF0YS5idWlsZF90YXJnZXRzOgorICAgICAgICAgICAgaWYgdGFyZ2V0IG5vdCBpbiB0YXNrRGF0YVttY10uYnVpbGRfdGFyZ2V0cyBvciBub3QgdGFza0RhdGFbbWNdLmJ1aWxkX3RhcmdldHNbdGFyZ2V0XToKICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICBpZiB0YXJnZXRpZCBpbiB0YXNrRGF0YS5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgIGlmIHRhcmdldCBpbiB0YXNrRGF0YVttY10uZmFpbGVkX2RlcHM6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgZm5pZCA9IHRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCi0gICAgICAgICAgICBmbiA9IHRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCi0gICAgICAgICAgICB0YXNrID0gdGFyZ2V0WzFdCiAgICAgICAgICAgICBwYXJlbnRzID0gRmFsc2UKICAgICAgICAgICAgIGlmIHRhc2suZW5kc3dpdGgoJy0nKToKICAgICAgICAgICAgICAgICBwYXJlbnRzID0gVHJ1ZQogICAgICAgICAgICAgICAgIHRhc2sgPSB0YXNrWzotMV0KIAotICAgICAgICAgICAgc2VsZi50YXJnZXRfcGFpcnMuYXBwZW5kKChmbiwgdGFzaykpCi0KLSAgICAgICAgICAgIGlmIGZuaWQgaW4gdGFza0RhdGEuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgaWYgZm4gaW4gdGFza0RhdGFbbWNdLmZhaWxlZF9mbnM6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdOgorICAgICAgICAgICAgIyBmbiBhbHJlYWR5IGhhcyBtYyBwcmVmaXgKKyAgICAgICAgICAgIHRpZCA9IGZuICsgIjoiICsgdGFzaworICAgICAgICAgICAgc2VsZi50YXJnZXRfdGlkcy5hcHBlbmQodGlkKQorICAgICAgICAgICAgaWYgdGlkIG5vdCBpbiB0YXNrRGF0YVttY10udGFza2VudHJpZXM6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGRpZmZsaWIKLSAgICAgICAgICAgICAgICBjbG9zZV9tYXRjaGVzID0gZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlcyh0YXNrLCB0YXNrRGF0YS50YXNrc19sb29rdXBbZm5pZF0sIGN1dG9mZj0wLjcpCisgICAgICAgICAgICAgICAgdGFza3MgPSBbXQorICAgICAgICAgICAgICAgIGZvciB4IGluIHRhc2tEYXRhW21jXS50YXNrZW50cmllczoKKyAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKGZuICsgIjoiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVuZCh0YXNrbmFtZV9mcm9tX3RpZCh4KSkKKyAgICAgICAgICAgICAgICBjbG9zZV9tYXRjaGVzID0gZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlcyh0YXNrLCB0YXNrcywgY3V0b2ZmPTAuNykKICAgICAgICAgICAgICAgICBpZiBjbG9zZV9tYXRjaGVzOgogICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIuIENsb3NlIG1hdGNoZXM6XG4gICVzIiAlICJcbiAgIi5qb2luKGNsb3NlX21hdGNoZXMpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSAiIgotICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlcyBkb2VzIG5vdCBleGlzdCBmb3IgdGFyZ2V0ICVzJXMiICUgKHRhc2ssIHRhcmdldFswXSwgZXh0cmEpKQotICAKKyAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgZG9lcyBub3QgZXhpc3QgZm9yIHRhcmdldCAlcyAoJXMpJXMiICUgKHRhc2ssIHRhcmdldCwgdGlkLCBleHRyYSkpCisKICAgICAgICAgICAgICMgRm9yIHRhc2tzIGNhbGxlZCAiWFhYWC0iLCBvbnkgcnVuIHRoZWlyIGRlcGVuZGVuY2llcwotICAgICAgICAgICAgbGlzdGlkID0gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdCiAgICAgICAgICAgICBpZiBwYXJlbnRzOgotICAgICAgICAgICAgICAgIGZvciBpIGluIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF06CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLmRlcGVuZHM6CiAgICAgICAgICAgICAgICAgICAgIG1hcmtfYWN0aXZlKGksIDEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1hcmtfYWN0aXZlKGxpc3RpZCwgMSkKKyAgICAgICAgICAgICAgICBtYXJrX2FjdGl2ZSh0aWQsIDEpCisKKyAgICAgICAgc2VsZi5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQogCiAgICAgICAgICMgU3RlcCBDIC0gUHJ1bmUgYWxsIGluYWN0aXZlIHRhc2tzCiAgICAgICAgICMKICAgICAgICAgIyBPbmNlIGFsbCBhY3RpdmUgdGFza3MgYXJlIG1hcmtlZCwgcHJ1bmUgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZC4KIAotICAgICAgICBtYXBzID0gW10KICAgICAgICAgZGVsY291bnQgPSAwCi0gICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgotICAgICAgICAgICAgaWYgcnVucV9idWlsZFtsaXN0aWQtZGVsY291bnRdID09IDE6Ci0gICAgICAgICAgICAgICAgbWFwcy5hcHBlbmQobGlzdGlkLWRlbGNvdW50KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2ZuaWRbbGlzdGlkLWRlbGNvdW50XQotICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bnFfdGFza1tsaXN0aWQtZGVsY291bnRdCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZC1kZWxjb3VudF0KLSAgICAgICAgICAgICAgICBkZWwgcnVucV9idWlsZFtsaXN0aWQtZGVsY291bnRdCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV9yZXZkZXBzW2xpc3RpZC1kZWxjb3VudF0KLSAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2hhc2hbbGlzdGlkLWRlbGNvdW50XQotICAgICAgICAgICAgICAgIGRlbGNvdW50ID0gZGVsY291bnQgKyAxCi0gICAgICAgICAgICAgICAgbWFwcy5hcHBlbmQoLTEpCisgICAgICAgIGZvciB0aWQgaW4gbGlzdChzZWxmLnJ1bnRhc2tlbnRyaWVzLmtleXMoKSk6CisgICAgICAgICAgICBpZiB0aWQgbm90IGluIHJ1bnFfYnVpbGQ6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYucnVudGFza2VudHJpZXNbdGlkXQorICAgICAgICAgICAgICAgIGRlbGNvdW50ICs9IDEKKworICAgICAgICBzZWxmLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCiAKICAgICAgICAgIwogICAgICAgICAjIFN0ZXAgRCAtIFNhbml0eSBjaGVja3MgYW5kIGNvbXB1dGF0aW9uCiAgICAgICAgICMKIAogICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRhc2tzIHRvIHJ1bgotICAgICAgICBpZiBsZW4oc2VsZi5ydW5xX2ZuaWQpID09IDA6Ci0gICAgICAgICAgICBpZiBub3QgdGFza0RhdGEuYWJvcnQ6CisgICAgICAgIGlmIGxlbihzZWxmLnJ1bnRhc2tlbnRyaWVzKSA9PSAwOgorICAgICAgICAgICAgaWYgbm90IHRhc2tEYXRhWycnXS5hYm9ydDoKICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIkFsbCBidWlsZGFibGUgdGFza3MgaGF2ZSBiZWVuIHJ1biBidXQgdGhlIGJ1aWxkIGlzIGluY29tcGxldGUgKC0tY29udGludWUgbW9kZSkuIEVycm9ycyBmb3IgdGhlIHRhc2tzIHRoYXQgZmFpbGVkIHdpbGwgaGF2ZSBiZWVuIHByaW50ZWQgYWJvdmUuIikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJObyBhY3RpdmUgdGFza3MgYW5kIG5vdCBpbiAtLWNvbnRpbnVlIG1vZGU/ISBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLiIpCiAKLSAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIlBydW5lZCAlcyBpbmFjdGl2ZSB0YXNrcywgJXMgbGVmdCIsIGRlbGNvdW50LCBsZW4oc2VsZi5ydW5xX2ZuaWQpKQotCi0gICAgICAgICMgUmVtYXAgdGhlIGRlcGVuZGVuY2llcyB0byBhY2NvdW50IGZvciB0aGUgZGVsZXRlZCB0YXNrcwotICAgICAgICAjIENoZWNrIHdlIGRpZG4ndCBkZWxldGUgYSB0YXNrIHdlIGRlcGVuZCBvbgotICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKLSAgICAgICAgICAgIG5ld2RlcHMgPSBbXQotICAgICAgICAgICAgb3JpZ2RlcHMgPSBzZWxmLnJ1bnFfZGVwZW5kc1tsaXN0aWRdCi0gICAgICAgICAgICBmb3Igb3JpZ2RlcCBpbiBvcmlnZGVwczoKLSAgICAgICAgICAgICAgICBpZiBtYXBzW29yaWdkZXBdID09IC0xOgotICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIkludmFsaWQgbWFwcGluZyAtIFNob3VsZCBuZXZlciBoYXBwZW4hIikKLSAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChtYXBzW29yaWdkZXBdKQotICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXSA9IHNldChuZXdkZXBzKQorICAgICAgICBsb2dnZXIudmVyYm9zZSgiUHJ1bmVkICVzIGluYWN0aXZlIHRhc2tzLCAlcyBsZWZ0IiwgZGVsY291bnQsIGxlbihzZWxmLnJ1bnRhc2tlbnRyaWVzKSkKIAogICAgICAgICBsb2dnZXIudmVyYm9zZSgiQXNzaWduIFdlaWdodGluZ3MiKQogCisgICAgICAgIHNlbGYuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICAjIEdlbmVyYXRlIGEgbGlzdCBvZiByZXZlcnNlIGRlcGVuZGVuY2llcyB0byBlYXNlIGZ1dHVyZSBjYWxjdWxhdGlvbnMKLSAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVucV9mbmlkKSk6Ci0gICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF06Ci0gICAgICAgICAgICAgICAgc2VsZi5ydW5xX3JldmRlcHNbZGVwXS5hZGQobGlzdGlkKQorICAgICAgICBmb3IgdGlkIGluIHNlbGYucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5kZXBlbmRzOgorICAgICAgICAgICAgICAgIHNlbGYucnVudGFza2VudHJpZXNbZGVwXS5yZXZkZXBzLmFkZCh0aWQpCisKKyAgICAgICAgc2VsZi5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQogCiAgICAgICAgICMgSWRlbnRpZnkgdGFza3MgYXQgdGhlIGVuZCBvZiBkZXBlbmRlbmN5IGNoYWlucwogICAgICAgICAjIEVycm9yIG9uIGNpcmN1bGFyIGRlcGVuZGVuY3kgbG9vcHMgKGxlbmd0aCB0d28pCiAgICAgICAgIGVuZHBvaW50cyA9IFtdCi0gICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgotICAgICAgICAgICAgcmV2ZGVwcyA9IHNlbGYucnVucV9yZXZkZXBzW2xpc3RpZF0KKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgcmV2ZGVwcyA9IHNlbGYucnVudGFza2VudHJpZXNbdGlkXS5yZXZkZXBzCiAgICAgICAgICAgICBpZiBsZW4ocmV2ZGVwcykgPT0gMDoKLSAgICAgICAgICAgICAgICBlbmRwb2ludHMuYXBwZW5kKGxpc3RpZCkKKyAgICAgICAgICAgICAgICBlbmRwb2ludHMuYXBwZW5kKHRpZCkKICAgICAgICAgICAgIGZvciBkZXAgaW4gcmV2ZGVwczoKLSAgICAgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKLSAgICAgICAgICAgICAgICAgICAgI3NlbGYuZHVtcF9kYXRhKHRhc2tEYXRhKQotICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgKCVzKSBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBvbiAlcyAoJXMpIiAlICh0YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFtkZXBdXSwgc2VsZi5ydW5xX3Rhc2tbZGVwXSwgdGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbbGlzdGlkXV0sIHNlbGYucnVucV90YXNrW2xpc3RpZF0pKQorICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBzZWxmLnJ1bnRhc2tlbnRyaWVzW3RpZF0uZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzIGhhcyBjaXJjdWxhciBkZXBlbmRlbmN5IG9uICVzIiAlICh0aWQsIGRlcCkpCisKIAogICAgICAgICBsb2dnZXIudmVyYm9zZSgiQ29tcHV0ZSB0b3RhbHMgKGhhdmUgJXMgZW5kcG9pbnQocykpIiwgbGVuKGVuZHBvaW50cykpCiAKKyAgICAgICAgc2VsZi5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgICMgQ2FsY3VsYXRlIHRhc2sgd2VpZ2h0cwogICAgICAgICAjIENoZWNrIG9mIGhpZ2hlciBsZW5ndGggY2lyY3VsYXIgZGVwZW5kZW5jaWVzCiAgICAgICAgIHNlbGYucnVucV93ZWlnaHQgPSBzZWxmLmNhbGN1bGF0ZV90YXNrX3dlaWdodHMoZW5kcG9pbnRzKQogCisgICAgICAgIHNlbGYuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICAjIFNhbml0eSBDaGVjayAtIENoZWNrIGZvciBtdWx0aXBsZSB0YXNrcyBidWlsZGluZyB0aGUgc2FtZSBwcm92aWRlcgotICAgICAgICBwcm92X2xpc3QgPSB7fQotICAgICAgICBzZWVuX2ZuID0gW10KLSAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgotICAgICAgICAgICAgZm4gPSB0YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KLSAgICAgICAgICAgIGlmIGZuIGluIHNlZW5fZm46Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNlZW5fZm4uYXBwZW5kKGZuKQotICAgICAgICAgICAgZm9yIHByb3YgaW4gc2VsZi5kYXRhQ2FjaGUuZm5fcHJvdmlkZXNbZm5dOgotICAgICAgICAgICAgICAgIGlmIHByb3Ygbm90IGluIHByb3ZfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgcHJvdl9saXN0W3Byb3ZdID0gW2ZuXQotICAgICAgICAgICAgICAgIGVsaWYgZm4gbm90IGluIHByb3ZfbGlzdFtwcm92XToKLSAgICAgICAgICAgICAgICAgICAgcHJvdl9saXN0W3Byb3ZdLmFwcGVuZChmbikKLSAgICAgICAgZm9yIHByb3YgaW4gcHJvdl9saXN0OgotICAgICAgICAgICAgaWYgbGVuKHByb3ZfbGlzdFtwcm92XSkgPiAxIGFuZCBwcm92IG5vdCBpbiBzZWxmLm11bHRpX3Byb3ZpZGVyX3doaXRlbGlzdDoKKyAgICAgICAgZm9yIG1jIGluIHNlbGYuZGF0YUNhY2hlczoKKyAgICAgICAgICAgIHByb3ZfbGlzdCA9IHt9CisgICAgICAgICAgICBzZWVuX2ZuID0gW10KKyAgICAgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgICAgICAodGlkbWMsIGZuLCB0YXNrbmFtZSwgdGFza2ZuKSA9IHNwbGl0X3RpZF9tY2ZuKHRpZCkKKyAgICAgICAgICAgICAgICBpZiB0YXNrZm4gaW4gc2Vlbl9mbjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBtYyAhPSB0aWRtYzoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWVuX2ZuLmFwcGVuZCh0YXNrZm4pCisgICAgICAgICAgICAgICAgZm9yIHByb3YgaW4gc2VsZi5kYXRhQ2FjaGVzW21jXS5mbl9wcm92aWRlc1t0YXNrZm5dOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm92IG5vdCBpbiBwcm92X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92X2xpc3RbcHJvdl0gPSBbdGFza2ZuXQorICAgICAgICAgICAgICAgICAgICBlbGlmIHRhc2tmbiBub3QgaW4gcHJvdl9saXN0W3Byb3ZdOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdl9saXN0W3Byb3ZdLmFwcGVuZCh0YXNrZm4pCisgICAgICAgICAgICBmb3IgcHJvdiBpbiBwcm92X2xpc3Q6CisgICAgICAgICAgICAgICAgaWYgbGVuKHByb3ZfbGlzdFtwcm92XSkgPCAyOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHByb3YgaW4gc2VsZi5tdWx0aV9wcm92aWRlcl93aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgc2Vlbl9wbiA9IFtdCiAgICAgICAgICAgICAgICAgIyBJZiB0d28gdmVyc2lvbnMgb2YgdGhlIHNhbWUgUE4gYXJlIGJlaW5nIGJ1aWx0IGl0cyBmYXRhbCwgd2UgZG9uJ3Qgc3VwcG9ydCBpdC4KICAgICAgICAgICAgICAgICBmb3IgZm4gaW4gcHJvdl9saXN0W3Byb3ZdOgotICAgICAgICAgICAgICAgICAgICBwbiA9IHNlbGYuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgICAgICAgICAgcG4gPSBzZWxmLmRhdGFDYWNoZXNbbWNdLnBrZ19mbltmbl0KICAgICAgICAgICAgICAgICAgICAgaWYgcG4gbm90IGluIHNlZW5fcG46CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuX3BuLmFwcGVuZChwbikKICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTc3MCwxNSArODA3LDE1IEBACiAgICAgICAgICAgICAgICAgY29tbW9uZGVwcyA9IE5vbmUKICAgICAgICAgICAgICAgICBmb3IgcHJvdmZuIGluIHByb3ZfbGlzdFtwcm92XToKICAgICAgICAgICAgICAgICAgICAgZGVwcyA9IHNldCgpCi0gICAgICAgICAgICAgICAgICAgIGZvciB0YXNrLCBmbmlkIGluIGVudW1lcmF0ZShzZWxmLnJ1bnFfZm5pZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICAgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZm5fZnJvbV90aWQodGlkKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm4gIT0gcHJvdmZuOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnVucV9yZXZkZXBzW3Rhc2tdOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gdGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbZGVwXV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLnJldmRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBmbl9mcm9tX3RpZChkZXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm4gPT0gcHJvdmZuOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMuYWRkKHNlbGYuZ2V0X3Nob3J0X3VzZXJfaWRzdHJpbmcoZGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFkZChkZXApCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjb21tb25kZXBzOgogICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uZGVwcyA9IHNldChkZXBzKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtNzk2LDE2ICs4MzMsMTYgQEAKICAgICAgICAgICAgICAgICBjb21tb25wcm92cyA9IE5vbmUKICAgICAgICAgICAgICAgICBjb21tb25ycHJvdnMgPSBOb25lCiAgICAgICAgICAgICAgICAgZm9yIHByb3ZmbiBpbiBwcm92X2xpc3RbcHJvdl06Ci0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzID0gc2V0KHNlbGYuZGF0YUNhY2hlLmZuX3Byb3ZpZGVzW3Byb3Zmbl0pCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzID0gc2V0KHNlbGYuZGF0YUNhY2hlc1ttY10uZm5fcHJvdmlkZXNbcHJvdmZuXSkKICAgICAgICAgICAgICAgICAgICAgcnByb3ZpZGVzID0gc2V0KCkKLSAgICAgICAgICAgICAgICAgICAgZm9yIHJwcm92aWRlIGluIHNlbGYuZGF0YUNhY2hlLnJwcm92aWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm92Zm4gaW4gc2VsZi5kYXRhQ2FjaGUucnByb3ZpZGVyc1tycHJvdmlkZV06CisgICAgICAgICAgICAgICAgICAgIGZvciBycHJvdmlkZSBpbiBzZWxmLmRhdGFDYWNoZXNbbWNdLnJwcm92aWRlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm92Zm4gaW4gc2VsZi5kYXRhQ2FjaGVzW21jXS5ycHJvdmlkZXJzW3Jwcm92aWRlXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHJvdmlkZXMuYWRkKHJwcm92aWRlKQotICAgICAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLmRhdGFDYWNoZS5wYWNrYWdlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZmbiBpbiBzZWxmLmRhdGFDYWNoZS5wYWNrYWdlc1twYWNrYWdlXToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5kYXRhQ2FjaGVzW21jXS5wYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZmbiBpbiBzZWxmLmRhdGFDYWNoZXNbbWNdLnBhY2thZ2VzW3BhY2thZ2VdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwcm92aWRlcy5hZGQocGFja2FnZSkKLSAgICAgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5kYXRhQ2FjaGUucGFja2FnZXNfZHluYW1pYzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZmbiBpbiBzZWxmLmRhdGFDYWNoZS5wYWNrYWdlc19keW5hbWljW3BhY2thZ2VdOgorICAgICAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLmRhdGFDYWNoZXNbbWNdLnBhY2thZ2VzX2R5bmFtaWM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm92Zm4gaW4gc2VsZi5kYXRhQ2FjaGVzW21jXS5wYWNrYWdlc19keW5hbWljW3BhY2thZ2VdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwcm92aWRlcy5hZGQocGFja2FnZSkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbW1vbnByb3ZzOgogICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9ucHJvdnMgPSBzZXQocHJvdmlkZXMpCkBAIC04MjQsMzUgKzg2MSwzOSBAQAogICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIlxuJXMgaGFzIHVuaXF1ZSBycHJvdmlkZXM6XG4gICVzIiAlIChwcm92Zm4sICJcbiAgIi5qb2luKHJwcm92aWRlX3Jlc3VsdHNbcHJvdmZuXSAtIGNvbW1vbnJwcm92cykpCiAKICAgICAgICAgICAgICAgICBpZiBzZWxmLndhcm5fbXVsdGlfYmI6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKG1zZykKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobXNnKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtc2cpCiAKKyAgICAgICAgc2VsZi5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgICMgQ3JlYXRlIGEgd2hpdGVsaXN0IHVzYWJsZSBieSB0aGUgc3RhbXAgY2hlY2tzCi0gICAgICAgIHN0YW1wZm53aGl0ZWxpc3QgPSBbXQotICAgICAgICBmb3IgZW50cnkgaW4gc2VsZi5zdGFtcHdoaXRlbGlzdC5zcGxpdCgpOgotICAgICAgICAgICAgZW50cnlpZCA9IHNlbGYudGFza0RhdGEuZ2V0YnVpbGRfaWQoZW50cnkpCi0gICAgICAgICAgICBpZiBlbnRyeWlkIG5vdCBpbiBzZWxmLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZuaWQgPSBzZWxmLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZW50cnlpZF1bMF0KLSAgICAgICAgICAgIGZuID0gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtmbmlkXQotICAgICAgICAgICAgc3RhbXBmbndoaXRlbGlzdC5hcHBlbmQoZm4pCi0gICAgICAgIHNlbGYuc3RhbXBmbndoaXRlbGlzdCA9IHN0YW1wZm53aGl0ZWxpc3QKKyAgICAgICAgc2VsZi5zdGFtcGZud2hpdGVsaXN0ID0ge30KKyAgICAgICAgZm9yIG1jIGluIHNlbGYudGFza0RhdGE6IAorICAgICAgICAgICAgc2VsZi5zdGFtcGZud2hpdGVsaXN0W21jXSA9IFtdCisgICAgICAgICAgICBmb3IgZW50cnkgaW4gc2VsZi5zdGFtcHdoaXRlbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIGVudHJ5IG5vdCBpbiBzZWxmLnRhc2tEYXRhW21jXS5idWlsZF90YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZuID0gc2VsZi50YXNrRGF0YS5idWlsZF90YXJnZXRzW2VudHJ5XVswXQorICAgICAgICAgICAgICAgIHNlbGYuc3RhbXBmbndoaXRlbGlzdFttY10uYXBwZW5kKGZuKQorCisgICAgICAgIHNlbGYuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKIAogICAgICAgICAjIEl0ZXJhdGUgb3ZlciB0aGUgdGFzayBsaXN0IGxvb2tpbmcgZm9yIHRhc2tzIHdpdGggYSAnc2V0c2NlbmUnIGZ1bmN0aW9uCi0gICAgICAgIHNlbGYucnVucV9zZXRzY2VuZSA9IFtdCisgICAgICAgIHNlbGYucnVucV9zZXRzY2VuZV90aWRzID0gW10KICAgICAgICAgaWYgbm90IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ubm9zZXRzY2VuZToKLSAgICAgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgotICAgICAgICAgICAgICAgIHNldHNjZW5lID0gdGFza0RhdGEuZ2V0dGFza19pZChzZWxmLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW3Rhc2tdXSwgc2VsZi5ydW5xX3Rhc2tbdGFza10gKyAiX3NldHNjZW5lIiwgRmFsc2UpCi0gICAgICAgICAgICAgICAgaWYgbm90IHNldHNjZW5lOgorICAgICAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lLCBfKSA9IHNwbGl0X3RpZF9tY2ZuKHRpZCkKKyAgICAgICAgICAgICAgICBzZXRzY2VuZXRpZCA9IGZuICsgIjoiICsgdGFza25hbWUgKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgICAgIGlmIHNldHNjZW5ldGlkIG5vdCBpbiB0YXNrRGF0YVttY10udGFza2VudHJpZXM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgc2VsZi5ydW5xX3NldHNjZW5lLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIHNlbGYucnVucV9zZXRzY2VuZV90aWRzLmFwcGVuZCh0aWQpCiAKLSAgICAgICAgZGVmIGludmFsaWRhdGVfdGFzayhmbiwgdGFza25hbWUsIGVycm9yX25vc3RhbXApOgotICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KLSAgICAgICAgICAgIGZuaWQgPSBzZWxmLnRhc2tEYXRhLmdldGZuX2lkKGZuKQotICAgICAgICAgICAgaWYgdGFza25hbWUgbm90IGluIHRhc2tEYXRhLnRhc2tzX2xvb2t1cFtmbmlkXToKLSAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiVGFzayAlcyBkb2VzIG5vdCBleGlzdCwgaW52YWxpZGF0aW5nIHRoaXMgdGFzayB3aWxsIGhhdmUgbm8gZWZmZWN0IiAlIHRhc2tuYW1lKQorICAgICAgICBkZWYgaW52YWxpZGF0ZV90YXNrKHRpZCwgZXJyb3Jfbm9zdGFtcCk6CisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgXykgPSBzcGxpdF90aWRfbWNmbih0aWQpCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5kYXRhQ2FjaGVzW21jXS50YXNrX2RlcHNbZm5dCisgICAgICAgICAgICBpZiBmbiArICI6IiArIHRhc2tuYW1lIG5vdCBpbiB0YXNrRGF0YVttY10udGFza2VudHJpZXM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlRhc2sgJXMgZG9lcyBub3QgZXhpc3QsIGludmFsaWRhdGluZyB0aGlzIHRhc2sgd2lsbCBoYXZlIG5vIGVmZmVjdCIgJSB0YXNrbmFtZSkKICAgICAgICAgICAgIGlmICdub3N0YW1wJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub3N0YW1wJ106CiAgICAgICAgICAgICAgICAgaWYgZXJyb3Jfbm9zdGFtcDoKICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRhc2sgJXMgaXMgbWFya2VkIG5vc3RhbXAsIGNhbm5vdCBpbnZhbGlkYXRlIHRoaXMgdGFzayIgJSB0YXNrbmFtZSkKQEAgLTg2MCw4MCArOTAxLDg0IEBACiAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJUYXNrICVzIGlzIG1hcmtlZCBub3N0YW1wLCBjYW5ub3QgaW52YWxpZGF0ZSB0aGlzIHRhc2siICUgdGFza25hbWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJJbnZhbGlkYXRlIHRhc2sgJXMsICVzIiwgdGFza25hbWUsIGZuKQotICAgICAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5pbnZhbGlkYXRlX3Rhc2sodGFza25hbWUsIHNlbGYuZGF0YUNhY2hlLCBmbikKKyAgICAgICAgICAgICAgICBiYi5wYXJzZS5zaWdnZW4uaW52YWxpZGF0ZV90YXNrKHRhc2tuYW1lLCBzZWxmLmRhdGFDYWNoZXNbbWNdLCBmbikKKworICAgICAgICBzZWxmLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCiAKICAgICAgICAgIyBJbnZhbGlkYXRlIHRhc2sgaWYgZm9yY2UgbW9kZSBhY3RpdmUKICAgICAgICAgaWYgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5mb3JjZToKLSAgICAgICAgICAgIGZvciAoZm4sIHRhcmdldCkgaW4gc2VsZi50YXJnZXRfcGFpcnM6Ci0gICAgICAgICAgICAgICAgaW52YWxpZGF0ZV90YXNrKGZuLCB0YXJnZXQsIEZhbHNlKQorICAgICAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnRhcmdldF90aWRzOgorICAgICAgICAgICAgICAgIGludmFsaWRhdGVfdGFzayh0aWQsIEZhbHNlKQogCiAgICAgICAgICMgSW52YWxpZGF0ZSB0YXNrIGlmIGludmFsaWRhdGUgbW9kZSBhY3RpdmUKICAgICAgICAgaWYgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5pbnZhbGlkYXRlX3N0YW1wOgotICAgICAgICAgICAgZm9yIChmbiwgdGFyZ2V0KSBpbiBzZWxmLnRhcmdldF9wYWlyczoKKyAgICAgICAgICAgIGZvciB0aWQgaW4gc2VsZi50YXJnZXRfdGlkczoKKyAgICAgICAgICAgICAgICBmbiA9IGZuX2Zyb21fdGlkKHRpZCkKICAgICAgICAgICAgICAgICBmb3Igc3QgaW4gc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5pbnZhbGlkYXRlX3N0YW1wLnNwbGl0KCcsJyk6CiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdC5zdGFydHN3aXRoKCJkb18iKToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ID0gImRvXyVzIiAlIHN0Ci0gICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVfdGFzayhmbiwgc3QsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVfdGFzayhmbiArICI6IiArIHN0LCBUcnVlKQorCisgICAgICAgIHNlbGYuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKIAogICAgICAgICAjIENyZWF0ZSBhbmQgcHJpbnQgdG8gdGhlIGxvZ3MgYSB2aXJ0dWFsL3h4eHggLT4gUE4gKGZuKSB0YWJsZQotICAgICAgICB2aXJ0bWFwID0gdGFza0RhdGEuZ2V0X3Byb3ZpZGVybWFwKHByZWZpeD0idmlydHVhbC8iKQotICAgICAgICB2aXJ0cG5tYXAgPSB7fQotICAgICAgICBmb3IgdiBpbiB2aXJ0bWFwOgotICAgICAgICAgICAgdmlydHBubWFwW3ZdID0gc2VsZi5kYXRhQ2FjaGUucGtnX2ZuW3ZpcnRtYXBbdl1dCi0gICAgICAgICAgICBiYi5kZWJ1ZygyLCAiJXMgcmVzb2x2ZWQgdG86ICVzICglcykiICUgKHYsIHZpcnRwbm1hcFt2XSwgdmlydG1hcFt2XSkpCi0gICAgICAgIGlmIGhhc2F0dHIoYmIucGFyc2Uuc2lnZ2VuLCAidGFza3NfcmVzb2x2ZWQiKToKLSAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi50YXNrc19yZXNvbHZlZCh2aXJ0bWFwLCB2aXJ0cG5tYXAsIHNlbGYuZGF0YUNhY2hlKQorICAgICAgICBmb3IgbWMgaW4gdGFza0RhdGE6CisgICAgICAgICAgICB2aXJ0bWFwID0gdGFza0RhdGFbbWNdLmdldF9wcm92aWRlcm1hcChwcmVmaXg9InZpcnR1YWwvIikKKyAgICAgICAgICAgIHZpcnRwbm1hcCA9IHt9CisgICAgICAgICAgICBmb3IgdiBpbiB2aXJ0bWFwOgorICAgICAgICAgICAgICAgIHZpcnRwbm1hcFt2XSA9IHNlbGYuZGF0YUNhY2hlc1ttY10ucGtnX2ZuW3ZpcnRtYXBbdl1dCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIiVzIHJlc29sdmVkIHRvOiAlcyAoJXMpIiAlICh2LCB2aXJ0cG5tYXBbdl0sIHZpcnRtYXBbdl0pKQorICAgICAgICAgICAgaWYgaGFzYXR0cihiYi5wYXJzZS5zaWdnZW4sICJ0YXNrc19yZXNvbHZlZCIpOgorICAgICAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi50YXNrc19yZXNvbHZlZCh2aXJ0bWFwLCB2aXJ0cG5tYXAsIHNlbGYuZGF0YUNhY2hlc1ttY10pCisKKyAgICAgICAgc2VsZi5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQogCiAgICAgICAgICMgSXRlcmF0ZSBvdmVyIHRoZSB0YXNrIGxpc3QgYW5kIGNhbGwgaW50byB0aGUgc2lnZ2VuIGNvZGUKICAgICAgICAgZGVhbHR3aXRoID0gc2V0KCkKLSAgICAgICAgdG9kZWFsID0gc2V0KHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpKQorICAgICAgICB0b2RlYWwgPSBzZXQoc2VsZi5ydW50YXNrZW50cmllcykKICAgICAgICAgd2hpbGUgbGVuKHRvZGVhbCkgPiAwOgotICAgICAgICAgICAgZm9yIHRhc2sgaW4gdG9kZWFsLmNvcHkoKToKLSAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5ydW5xX2RlcGVuZHNbdGFza10gLSBkZWFsdHdpdGgpID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIGRlYWx0d2l0aC5hZGQodGFzaykKLSAgICAgICAgICAgICAgICAgICAgdG9kZWFsLnJlbW92ZSh0YXNrKQorICAgICAgICAgICAgZm9yIHRpZCBpbiB0b2RlYWwuY29weSgpOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJ1bnRhc2tlbnRyaWVzW3RpZF0uZGVwZW5kcyAtIGRlYWx0d2l0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZGVhbHR3aXRoLmFkZCh0aWQpCisgICAgICAgICAgICAgICAgICAgIHRvZGVhbC5yZW1vdmUodGlkKQogICAgICAgICAgICAgICAgICAgICBwcm9jZGVwID0gW10KLSAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2NkZXAuYXBwZW5kKHNlbGYudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbZGVwXV0gKyAiLiIgKyBzZWxmLnJ1bnFfdGFza1tkZXBdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfaGFzaFt0YXNrXSA9IGJiLnBhcnNlLnNpZ2dlbi5nZXRfdGFza2hhc2goc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0sIHNlbGYucnVucV90YXNrW3Rhc2tdLCBwcm9jZGVwLCBzZWxmLmRhdGFDYWNoZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJ1bnRhc2tlbnRyaWVzW3RpZF0uZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2NkZXAuYXBwZW5kKGZuX2Zyb21fdGlkKGRlcCkgKyAiLiIgKyB0YXNrbmFtZV9mcm9tX3RpZChkZXApKQorICAgICAgICAgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgdGFza2ZuKSA9IHNwbGl0X3RpZF9tY2ZuKHRpZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLmhhc2ggPSBiYi5wYXJzZS5zaWdnZW4uZ2V0X3Rhc2toYXNoKHRhc2tmbiwgdGFza25hbWUsIHByb2NkZXAsIHNlbGYuZGF0YUNhY2hlc1ttY10pCisgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBzZWxmLnJ1bnRhc2tlbnRyaWVzW3RpZF0udGFzawogCiAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi53cml0ZW91dF9maWxlX2NoZWNrc3VtX2NhY2hlKCkKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLnJ1bnFfZm5pZCkKIAotICAgIGRlZiBkdW1wX2RhdGEoc2VsZiwgdGFza1F1ZXVlKToKKyAgICAgICAgI3NlbGYuZHVtcF9kYXRhKCkKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnJ1bnRhc2tlbnRyaWVzKQorCisgICAgZGVmIGR1bXBfZGF0YShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIER1bXAgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCiAgICAgICAgICIiIgogICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bl90YXNrczoiKQotICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfdGFzaykpOgotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgKCVzKSVzIC0gJXM6ICVzICAgRGVwcyAlcyBSZXZEZXBzICVzIiwgdGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrUXVldWUuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV93ZWlnaHRbdGFza10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkKKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgJXM6ICVzICAgRGVwcyAlcyBSZXZEZXBzICVzIiwgdGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnVudGFza2VudHJpZXNbdGlkXS53ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLmRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW50YXNrZW50cmllc1t0aWRdLnJldmRlcHMpCiAKLSAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJzb3J0ZWRfdGFza3M6IikKLSAgICAgICAgZm9yIHRhc2sxIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV90YXNrKSk6Ci0gICAgICAgICAgICBpZiB0YXNrMSBpbiBzZWxmLnByaW9fbWFwOgotICAgICAgICAgICAgICAgIHRhc2sgPSBzZWxmLnByaW9fbWFwW3Rhc2sxXQotICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklcyAtICVzOiAlcyAgIERlcHMgJXMgUmV2RGVwcyAlcyIsIHRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrUXVldWUuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0W3Rhc2tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKQorY2xhc3MgUnVuUXVldWVXb3JrZXIoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2VzcywgcGlwZSk6CisgICAgICAgIHNlbGYucHJvY2VzcyA9IHByb2Nlc3MKKyAgICAgICAgc2VsZi5waXBlID0gcGlwZQogCiBjbGFzcyBSdW5RdWV1ZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHRhc2tEYXRhLCB0YXJnZXRzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyLCBjZmdEYXRhLCBkYXRhQ2FjaGVzLCB0YXNrRGF0YSwgdGFyZ2V0cyk6CiAKICAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKICAgICAgICAgc2VsZi5jZmdEYXRhID0gY2ZnRGF0YQotICAgICAgICBzZWxmLnJxZGF0YSA9IFJ1blF1ZXVlRGF0YShzZWxmLCBjb29rZXIsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFza0RhdGEsIHRhcmdldHMpCisgICAgICAgIHNlbGYucnFkYXRhID0gUnVuUXVldWVEYXRhKHNlbGYsIGNvb2tlciwgY2ZnRGF0YSwgZGF0YUNhY2hlcywgdGFza0RhdGEsIHRhcmdldHMpCiAKICAgICAgICAgc2VsZi5zdGFtcHBvbGljeSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TVEFNUF9QT0xJQ1kiLCBUcnVlKSBvciAicGVyZmlsZSIKICAgICAgICAgc2VsZi5oYXNodmFsaWRhdGUgPSBjZmdEYXRhLmdldFZhcigiQkJfSEFTSENIRUNLX0ZVTkNUSU9OIiwgVHJ1ZSkgb3IgTm9uZQotICAgICAgICBzZWxmLnNldHNjZW5ldmVyaWZ5ID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTiIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgc2VsZi5zZXRzY2VuZXZlcmlmeSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yIiwgVHJ1ZSkgb3IgTm9uZQogICAgICAgICBzZWxmLmRlcHZhbGlkYXRlID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NFVFNDRU5FX0RFUFZBTElEIiwgVHJ1ZSkgb3IgTm9uZQogCiAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZVByZXBhcmUKQEAgLTk0MiwxMiArOTg3LDEwIEBACiAgICAgICAgIHNlbGYuZG0gPSBtb25pdG9yZGlzay5kaXNrTW9uaXRvcihjZmdEYXRhKQogCiAgICAgICAgIHNlbGYucnFleGUgPSBOb25lCi0gICAgICAgIHNlbGYud29ya2VyID0gTm9uZQotICAgICAgICBzZWxmLndvcmtlcnBpcGUgPSBOb25lCi0gICAgICAgIHNlbGYuZmFrZXdvcmtlciA9IE5vbmUKLSAgICAgICAgc2VsZi5mYWtld29ya2VycGlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi53b3JrZXIgPSB7fQorICAgICAgICBzZWxmLmZha2V3b3JrZXIgPSB7fQogCi0gICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgZmFrZXJvb3QgPSBGYWxzZSwgcnFleGVjID0gTm9uZSk6CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgbWMsIGZha2Vyb290ID0gRmFsc2UsIHJxZXhlYyA9IE5vbmUpOgogICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlN0YXJ0aW5nIGJpdGJha2Utd29ya2VyIikKICAgICAgICAgbWFnaWMgPSAiZGVjYWZiYWQiCiAgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKQEAgLTk2NSwxMyArMTAwOCwxNyBAQAogICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHdvcmtlci5zdGRvdXQpCiAgICAgICAgIHdvcmtlcnBpcGUgPSBydW5RdWV1ZVBpcGUod29ya2VyLnN0ZG91dCwgTm9uZSwgc2VsZi5jZmdEYXRhLCBzZWxmLCBycWV4ZWMpCiAKKyAgICAgICAgcnVucWhhc2ggPSB7fQorICAgICAgICBmb3IgdGlkIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgcnVucWhhc2hbdGlkXSA9IHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0uaGFzaAorCiAgICAgICAgIHdvcmtlcmRhdGEgPSB7Ci0gICAgICAgICAgICAidGFza2RlcHMiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwcywKLSAgICAgICAgICAgICJmYWtlcm9vdGVudiIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3RlbnYsCi0gICAgICAgICAgICAiZmFrZXJvb3RkaXJzIiA6IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5mYWtlcm9vdGRpcnMsCi0gICAgICAgICAgICAiZmFrZXJvb3Rub2VudiIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3Rub2VudiwKKyAgICAgICAgICAgICJ0YXNrZGVwcyIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGVzW21jXS50YXNrX2RlcHMsCisgICAgICAgICAgICAiZmFrZXJvb3RlbnYiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10uZmFrZXJvb3RlbnYsCisgICAgICAgICAgICAiZmFrZXJvb3RkaXJzIiA6IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLmZha2Vyb290ZGlycywKKyAgICAgICAgICAgICJmYWtlcm9vdG5vZW52IiA6IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLmZha2Vyb290bm9lbnYsCiAgICAgICAgICAgICAic2lnZGF0YSIgOiBiYi5wYXJzZS5zaWdnZW4uZ2V0X3Rhc2tkYXRhKCksCi0gICAgICAgICAgICAicnVucV9oYXNoIiA6IHNlbGYucnFkYXRhLnJ1bnFfaGFzaCwKKyAgICAgICAgICAgICJydW5xX2hhc2giIDogcnVucWhhc2gsCiAgICAgICAgICAgICAibG9nZGVmYXVsdGRlYnVnIiA6IGJiLm1zZy5sb2dnZXJEZWZhdWx0RGVidWdMZXZlbCwKICAgICAgICAgICAgICJsb2dkZWZhdWx0dmVyYm9zZSIgOiBiYi5tc2cubG9nZ2VyRGVmYXVsdFZlcmJvc2UsCiAgICAgICAgICAgICAibG9nZGVmYXVsdHZlcmJvc2Vsb2dzIiA6IGJiLm1zZy5sb2dnZXJWZXJib3NlTG9ncywKQEAgLTk4Miw2MSArMTAyOSw2NSBAQAogICAgICAgICAgICAgInRpbWUiIDogc2VsZi5jZmdEYXRhLmdldFZhcigiVElNRSIsIFRydWUpLAogICAgICAgICB9CiAKLSAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8Y29va2VyY29uZmlnPiIgKyBwaWNrbGUuZHVtcHMoc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbikgKyAiPC9jb29rZXJjb25maWc+IikKLSAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8d29ya2VyZGF0YT4iICsgcGlja2xlLmR1bXBzKHdvcmtlcmRhdGEpICsgIjwvd29ya2VyZGF0YT4iKQorICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUoYiI8Y29va2VyY29uZmlnPiIgKyBwaWNrbGUuZHVtcHMoc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbikgKyBiIjwvY29va2VyY29uZmlnPiIpCisgICAgICAgIHdvcmtlci5zdGRpbi53cml0ZShiIjx3b3JrZXJkYXRhPiIgKyBwaWNrbGUuZHVtcHMod29ya2VyZGF0YSkgKyBiIjwvd29ya2VyZGF0YT4iKQogICAgICAgICB3b3JrZXIuc3RkaW4uZmx1c2goKQogCi0gICAgICAgIHJldHVybiB3b3JrZXIsIHdvcmtlcnBpcGUKKyAgICAgICAgcmV0dXJuIFJ1blF1ZXVlV29ya2VyKHdvcmtlciwgd29ya2VycGlwZSkKIAotICAgIGRlZiBfdGVhcmRvd25fd29ya2VyKHNlbGYsIHdvcmtlciwgd29ya2VycGlwZSk6CisgICAgZGVmIF90ZWFyZG93bl93b3JrZXIoc2VsZiwgd29ya2VyKToKICAgICAgICAgaWYgbm90IHdvcmtlcjoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRlYXJkb3duIGZvciBiaXRiYWtlLXdvcmtlciIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8cXVpdD48L3F1aXQ+IikKLSAgICAgICAgICAgd29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgd29ya2VyLnByb2Nlc3Muc3RkaW4ud3JpdGUoYiI8cXVpdD48L3F1aXQ+IikKKyAgICAgICAgICAgd29ya2VyLnByb2Nlc3Muc3RkaW4uZmx1c2goKQorICAgICAgICAgICB3b3JrZXIucHJvY2Vzcy5zdGRpbi5jbG9zZSgpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICBwYXNzCi0gICAgICAgIHdoaWxlIHdvcmtlci5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICB3b3JrZXJwaXBlLnJlYWQoKQotICAgICAgICAgICAgd29ya2VyLnBvbGwoKQotICAgICAgICB3aGlsZSB3b3JrZXJwaXBlLnJlYWQoKToKKyAgICAgICAgd2hpbGUgd29ya2VyLnByb2Nlc3MucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgd29ya2VyLnBpcGUucmVhZCgpCisgICAgICAgICAgICB3b3JrZXIucHJvY2Vzcy5wb2xsKCkKKyAgICAgICAgd2hpbGUgd29ya2VyLnBpcGUucmVhZCgpOgogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgd29ya2VycGlwZS5jbG9zZSgpCisgICAgICAgIHdvcmtlci5waXBlLmNsb3NlKCkKIAogICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZik6CiAgICAgICAgIGlmIHNlbGYud29ya2VyOgogICAgICAgICAgICAgc2VsZi50ZWFyZG93bl93b3JrZXJzKCkKICAgICAgICAgc2VsZi50ZWFyZG93biA9IEZhbHNlCi0gICAgICAgIHNlbGYud29ya2VyLCBzZWxmLndvcmtlcnBpcGUgPSBzZWxmLl9zdGFydF93b3JrZXIoKQorICAgICAgICBmb3IgbWMgaW4gc2VsZi5ycWRhdGEuZGF0YUNhY2hlczoKKyAgICAgICAgICAgIHNlbGYud29ya2VyW21jXSA9IHNlbGYuX3N0YXJ0X3dvcmtlcihtYykKIAogICAgIGRlZiBzdGFydF9mYWtld29ya2VyKHNlbGYsIHJxZXhlYyk6CiAgICAgICAgIGlmIG5vdCBzZWxmLmZha2V3b3JrZXI6Ci0gICAgICAgICAgICBzZWxmLmZha2V3b3JrZXIsIHNlbGYuZmFrZXdvcmtlcnBpcGUgPSBzZWxmLl9zdGFydF93b3JrZXIoVHJ1ZSwgcnFleGVjKQorICAgICAgICAgICAgZm9yIG1jIGluIHNlbGYucnFkYXRhLmRhdGFDYWNoZXM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWtld29ya2VyW21jXSA9IHNlbGYuX3N0YXJ0X3dvcmtlcihtYywgVHJ1ZSwgcnFleGVjKQogCiAgICAgZGVmIHRlYXJkb3duX3dvcmtlcnMoc2VsZik6CiAgICAgICAgIHNlbGYudGVhcmRvd24gPSBUcnVlCi0gICAgICAgIHNlbGYuX3RlYXJkb3duX3dvcmtlcihzZWxmLndvcmtlciwgc2VsZi53b3JrZXJwaXBlKQotICAgICAgICBzZWxmLndvcmtlciA9IE5vbmUKLSAgICAgICAgc2VsZi53b3JrZXJwaXBlID0gTm9uZQotICAgICAgICBzZWxmLl90ZWFyZG93bl93b3JrZXIoc2VsZi5mYWtld29ya2VyLCBzZWxmLmZha2V3b3JrZXJwaXBlKQotICAgICAgICBzZWxmLmZha2V3b3JrZXIgPSBOb25lCi0gICAgICAgIHNlbGYuZmFrZXdvcmtlcnBpcGUgPSBOb25lCisgICAgICAgIGZvciBtYyBpbiBzZWxmLndvcmtlcjoKKyAgICAgICAgICAgIHNlbGYuX3RlYXJkb3duX3dvcmtlcihzZWxmLndvcmtlclttY10pCisgICAgICAgIHNlbGYud29ya2VyID0ge30KKyAgICAgICAgZm9yIG1jIGluIHNlbGYuZmFrZXdvcmtlcjoKKyAgICAgICAgICAgIHNlbGYuX3RlYXJkb3duX3dvcmtlcihzZWxmLmZha2V3b3JrZXJbbWNdKQorICAgICAgICBzZWxmLmZha2V3b3JrZXIgPSB7fQogCiAgICAgZGVmIHJlYWRfd29ya2VycyhzZWxmKToKLSAgICAgICAgc2VsZi53b3JrZXJwaXBlLnJlYWQoKQotICAgICAgICBpZiBzZWxmLmZha2V3b3JrZXJwaXBlOgotICAgICAgICAgICAgc2VsZi5mYWtld29ya2VycGlwZS5yZWFkKCkKKyAgICAgICAgZm9yIG1jIGluIHNlbGYud29ya2VyOgorICAgICAgICAgICAgc2VsZi53b3JrZXJbbWNdLnBpcGUucmVhZCgpCisgICAgICAgIGZvciBtYyBpbiBzZWxmLmZha2V3b3JrZXI6CisgICAgICAgICAgICBzZWxmLmZha2V3b3JrZXJbbWNdLnBpcGUucmVhZCgpCiAKICAgICBkZWYgYWN0aXZlX2ZkcyhzZWxmKToKICAgICAgICAgZmRzID0gW10KLSAgICAgICAgaWYgc2VsZi53b3JrZXJwaXBlOgotICAgICAgICAgICAgZmRzLmFwcGVuZChzZWxmLndvcmtlcnBpcGUuaW5wdXQpCi0gICAgICAgIGlmIHNlbGYuZmFrZXdvcmtlcnBpcGU6Ci0gICAgICAgICAgICBmZHMuYXBwZW5kKHNlbGYuZmFrZXdvcmtlcnBpcGUuaW5wdXQpCisgICAgICAgIGZvciBtYyBpbiBzZWxmLndvcmtlcjoKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoc2VsZi53b3JrZXJbbWNdLnBpcGUuaW5wdXQpCisgICAgICAgIGZvciBtYyBpbiBzZWxmLmZha2V3b3JrZXI6CisgICAgICAgICAgICBmZHMuYXBwZW5kKHNlbGYuZmFrZXdvcmtlclttY10ucGlwZS5pbnB1dCkKICAgICAgICAgcmV0dXJuIGZkcwogCi0gICAgZGVmIGNoZWNrX3N0YW1wX3Rhc2soc2VsZiwgdGFzaywgdGFza25hbWUgPSBOb25lLCByZWN1cnNlID0gRmFsc2UsIGNhY2hlID0gTm9uZSk6CisgICAgZGVmIGNoZWNrX3N0YW1wX3Rhc2soc2VsZiwgdGlkLCB0YXNrbmFtZSA9IE5vbmUsIHJlY3Vyc2UgPSBGYWxzZSwgY2FjaGUgPSBOb25lKToKICAgICAgICAgZGVmIGdldF90aW1lc3RhbXAoZik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhmLCBvcy5GX09LKToKQEAgLTEwNDUsMjYgKzEwOTYsMjYgQEAKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCisgICAgICAgIChtYywgZm4sIHRuLCB0YXNrZm4pID0gc3BsaXRfdGlkX21jZm4odGlkKQorICAgICAgICBpZiB0YXNrbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgdGFza25hbWUgPSB0bgorCiAgICAgICAgIGlmIHNlbGYuc3RhbXBwb2xpY3kgPT0gInBlcmZpbGUiOgogICAgICAgICAgICAgZnVsbGRlcHRyZWUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZnVsbGRlcHRyZWUgPSBUcnVlCiAgICAgICAgICAgICBzdGFtcHdoaXRlbGlzdCA9IFtdCiAgICAgICAgICAgICBpZiBzZWxmLnN0YW1wcG9saWN5ID09ICJ3aGl0ZWxpc3QiOgotICAgICAgICAgICAgICAgIHN0YW1wd2hpdGVsaXN0ID0gc2VsZi5ycWRhdGEuc3RhbXBmbndoaXRlbGlzdAorICAgICAgICAgICAgICAgIHN0YW1wd2hpdGVsaXN0ID0gc2VsZi5ycWRhdGEuc3RhbXBmbndoaXRlbGlzdFttY10KIAotICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KLSAgICAgICAgaWYgdGFza25hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCi0KLSAgICAgICAgc3RhbXBmaWxlID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICBzdGFtcGZpbGUgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLCB0YXNrZm4pCiAKICAgICAgICAgIyBJZiB0aGUgc3RhbXAgaXMgbWlzc2luZywgaXQncyBub3QgY3VycmVudAogICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHN0YW1wZmlsZSwgb3MuRl9PSyk6CiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlN0YW1wZmlsZSAlcyBub3QgYXZhaWxhYmxlIiwgc3RhbXBmaWxlKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgSWYgaXQncyBhICdub3N0YW1wJyB0YXNrLCBpdCdzIG5vdCBjdXJyZW50Ci0gICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10udGFza19kZXBzW3Rhc2tmbl0KICAgICAgICAgaWYgJ25vc3RhbXAnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vc3RhbXAnXToKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiJXMuJXMgaXMgbm9zdGFtcFxuIiwgZm4sIHRhc2tuYW1lKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0xMDc3LDIzICsxMTI4LDI2IEBACiAKICAgICAgICAgaXNjdXJyZW50ID0gVHJ1ZQogICAgICAgICB0MSA9IGdldF90aW1lc3RhbXAoc3RhbXBmaWxlKQotICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1t0aWRdLmRlcGVuZHM6CiAgICAgICAgICAgICBpZiBpc2N1cnJlbnQ6Ci0gICAgICAgICAgICAgICAgZm4yID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW2RlcF1dCi0gICAgICAgICAgICAgICAgdGFza25hbWUyID0gc2VsZi5ycWRhdGEucnVucV90YXNrW2RlcF0KLSAgICAgICAgICAgICAgICBzdGFtcGZpbGUyID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lMiwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbjIpCi0gICAgICAgICAgICAgICAgc3RhbXBmaWxlMyA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZTIgKyAiX3NldHNjZW5lIiwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbjIpCisgICAgICAgICAgICAgICAgKG1jMiwgZm4yLCB0YXNrbmFtZTIsIHRhc2tmbjIpID0gc3BsaXRfdGlkX21jZm4oZGVwKQorICAgICAgICAgICAgICAgIHN0YW1wZmlsZTIgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUyLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGVzW21jMl0sIHRhc2tmbjIpCisgICAgICAgICAgICAgICAgc3RhbXBmaWxlMyA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZTIgKyAiX3NldHNjZW5lIiwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttYzJdLCB0YXNrZm4yKQogICAgICAgICAgICAgICAgIHQyID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUyKQogICAgICAgICAgICAgICAgIHQzID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUzKQorICAgICAgICAgICAgICAgIGlmIHQzIGFuZCBub3QgdDI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgdDMgYW5kIHQzID4gdDI6Ci0gICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBpZiBmbiA9PSBmbjIgb3IgKGZ1bGxkZXB0cmVlIGFuZCBmbjIgbm90IGluIHN0YW1wd2hpdGVsaXN0KToKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHQyOgogICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTdGFtcGZpbGUgJXMgZG9lcyBub3QgZXhpc3QnLCBzdGFtcGZpbGUyKQogICAgICAgICAgICAgICAgICAgICAgICAgaXNjdXJyZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGlmIHQxIDwgdDI6CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wZmlsZSAlcyA8ICVzJywgc3RhbXBmaWxlLCBzdGFtcGZpbGUyKQogICAgICAgICAgICAgICAgICAgICAgICAgaXNjdXJyZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGlmIHJlY3Vyc2UgYW5kIGlzY3VycmVudDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBjYWNoZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2N1cnJlbnQgPSBjYWNoZVtkZXBdCkBAIC0xMTAzLDcgKzExNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IHNlbGYuY2hlY2tfc3RhbXBfdGFzayhkZXAsIHJlY3Vyc2U9VHJ1ZSwgY2FjaGU9Y2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbZGVwXSA9IGlzY3VycmVudAogICAgICAgICBpZiByZWN1cnNlOgotICAgICAgICAgICAgY2FjaGVbdGFza10gPSBpc2N1cnJlbnQKKyAgICAgICAgICAgIGNhY2hlW3RpZF0gPSBpc2N1cnJlbnQKICAgICAgICAgcmV0dXJuIGlzY3VycmVudAogCiAgICAgZGVmIF9leGVjdXRlX3J1bnF1ZXVlKHNlbGYpOgpAQCAtMTExNywxOSArMTE3MSwzMSBAQAogCiAgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVQcmVwYXJlOgogICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZUR1bW15KHNlbGYpCisgICAgICAgICAgICAjIE5PVEU6IGlmIHlvdSBhZGQsIHJlbW92ZSBvciBzaWduaWZpY2FudGx5IHJlZmFjdG9yIHRoZSBzdGFnZXMgb2YgdGhpcworICAgICAgICAgICAgIyBwcm9jZXNzIHRoZW4geW91IHNob3VsZCByZWNhbGN1bGF0ZSB0aGUgd2VpZ2h0aW5ncyBoZXJlLiBUaGlzIGlzIHF1aXRlCisgICAgICAgICAgICAjIGVhc3kgdG8gZG8gLSBqdXN0IGNoYW5nZSB0aGUgbmV4dCBsaW5lIHRlbXBvcmFyaWx5IHRvIHBhc3MgZGVidWc9VHJ1ZSBhcworICAgICAgICAgICAgIyB0aGUgbGFzdCBwYXJhbWV0ZXIgYW5kIHlvdSdsbCBnZXQgYSBwcmludG91dCBvZiB0aGUgd2VpZ2h0aW5ncyBhcyB3ZWxsCisgICAgICAgICAgICAjIGFzIGEgbWFwIHRvIHRoZSBsaW5lcyB3aGVyZSBuZXh0X3N0YWdlKCkgd2FzIGNhbGxlZC4gT2YgY291cnNlIHRoaXMgaXNuJ3QKKyAgICAgICAgICAgICMgY3JpdGljYWwsIGJ1dCBpdCBoZWxwcyB0byBrZWVwIHRoZSBwcm9ncmVzcyByZXBvcnRpbmcgYWNjdXJhdGUuCisgICAgICAgICAgICBzZWxmLnJxZGF0YS5pbml0X3Byb2dyZXNzX3JlcG9ydGVyID0gYmIucHJvZ3Jlc3MuTXVsdGlTdGFnZVByb2Nlc3NQcm9ncmVzc1JlcG9ydGVyKHNlbGYuY29va2VyLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5pdGlhbGlzaW5nIHRhc2tzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0MywgOTY3LCA0LCAzLCAxLCA1LCAzLCA3LCAxMywgMSwgMiwgMSwgMSwgMjQ2LCAzNSwgMSwgMzgsIDEsIDM1LCAyLCAzMzgsIDIwNCwgMTQyLCAzLCAzLCAzNywgMjQ0XSkKICAgICAgICAgICAgIGlmIHNlbGYucnFkYXRhLnByZXBhcmUoKSA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZVNjZW5lSW5pdAorICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCiAKLSAgICAgICAgICAgICAgICAjIHdlIGFyZSByZWFkeSB0byBydW4sIHNlZSBpZiBhbnkgVUkgY2xpZW50IG5lZWRzIHRoZSBkZXBlbmRlbmN5IGluZm8KLSAgICAgICAgICAgICAgICBpZiBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuU0VORF9ERVBFTkRTX1RSRUUgaW4gc2VsZi5jb29rZXIuZmVhdHVyZXNldDoKLSAgICAgICAgICAgICAgICAgICAgZGVwZ3JhcGggPSBzZWxmLmNvb2tlci5idWlsZERlcGVuZFRyZWUoc2VsZiwgc2VsZi5ycWRhdGEudGFza0RhdGEpCi0gICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZChkZXBncmFwaCksIHNlbGYuY29va2VyLmRhdGEpCisgICAgICAgICAgICAgICAgIyB3ZSBhcmUgcmVhZHkgdG8gcnVuLCAgZW1pdCBkZXBlbmRlbmN5IGluZm8gdG8gYW55IFVJIG9yIGNsYXNzIHdoaWNoCisgICAgICAgICAgICAgICAgIyBuZWVkcyBpdAorICAgICAgICAgICAgICAgIGRlcGdyYXBoID0gc2VsZi5jb29rZXIuYnVpbGREZXBlbmRUcmVlKHNlbGYsIHNlbGYucnFkYXRhLnRhc2tEYXRhKQorICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKGRlcGdyYXBoKSwgc2VsZi5jb29rZXIuZGF0YSkKIAogICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlU2NlbmVJbml0OgogICAgICAgICAgICAgZHVtcCA9IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZHVtcF9zaWduYXR1cmVzCiAgICAgICAgICAgICBpZiBkdW1wOgorICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIuZmluaXNoKCkKICAgICAgICAgICAgICAgICBpZiAncHJpbnRkaWZmJyBpbiBkdW1wOgogICAgICAgICAgICAgICAgICAgICBpbnZhbGlkdGFza3MgPSBzZWxmLnByaW50X2RpZmZzY2VuZXRhc2tzKCkKICAgICAgICAgICAgICAgICBzZWxmLmR1bXBfc2lnbmF0dXJlcyhkdW1wKQpAQCAtMTEzNyw3ICsxMjAzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9kaWZmc2NlbmV0YXNrcyhpbnZhbGlkdGFza3MpCiAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X3dvcmtlcigpCisgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKICAgICAgICAgICAgICAgICBzZWxmLnJxZXhlID0gUnVuUXVldWVFeGVjdXRlU2NlbmVxdWV1ZShzZWxmKQogCiAgICAgICAgIGlmIHNlbGYuc3RhdGUgaW4gW3J1blF1ZXVlU2NlbmVSdW4sIHJ1blF1ZXVlUnVubmluZywgcnVuUXVldWVDbGVhblVwXToKQEAgLTExNTAsNiArMTIxOCw4IEBACiAgICAgICAgICAgICBpZiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLnNldHNjZW5lb25seToKICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQogICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEp1c3QgaW4gY2FzZSB3ZSBkaWRuJ3Qgc2V0c2NlbmUKKyAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLmZpbmlzaCgpCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkV4ZWN1dGluZyBSdW5RdWV1ZSBUYXNrcyIpCiAgICAgICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZVRhc2tzKHNlbGYpCiAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlUnVubmluZwpAQCAtMTE2OSwxMCArMTIzOSwxMSBAQAogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgJWQgdGFza3Mgb2Ygd2hpY2ggJWQgZGlkbid0IG5lZWQgdG8gYmUgcmVydW4gYW5kIGFsbCBzdWNjZWVkZWQuIiwgc2VsZi5ycWV4ZS5zdGF0cy5jb21wbGV0ZWQsIHNlbGYucnFleGUuc3RhdHMuc2tpcHBlZCkKIAogICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlRmFpbGVkOgotICAgICAgICAgICAgaWYgbm90IHNlbGYucnFkYXRhLnRhc2tEYXRhLnRyeWFsdGNvbmZpZ3M6Ci0gICAgICAgICAgICAgICAgcmFpc2UgYmIucnVucXVldWUuVGFza0ZhaWx1cmUoc2VsZi5ycWV4ZS5mYWlsZWRfZm5pZHMpCi0gICAgICAgICAgICBmb3IgZm5pZCBpbiBzZWxmLnJxZXhlLmZhaWxlZF9mbmlkczoKLSAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS50YXNrRGF0YS5mYWlsX2ZuaWQoZm5pZCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJxZGF0YS50YXNrRGF0YVsnJ10udHJ5YWx0Y29uZmlnczoKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5ydW5xdWV1ZS5UYXNrRmFpbHVyZShzZWxmLnJxZXhlLmZhaWxlZF90aWRzKQorICAgICAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJxZXhlLmZhaWxlZF90aWRzOgorICAgICAgICAgICAgICAgIChtYywgZm4sIHRuLCBfKSA9IHNwbGl0X3RpZF9tY2ZuKHRpZCkKKyAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS50YXNrRGF0YVttY10uZmFpbF9mbihmbikKICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJlc2V0KCkKIAogICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlQ29tcGxldGU6CkBAIC0xMTk3LDggKzEyNjgsOCBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBvY2N1cmVkIGluIHJ1bnF1ZXVlLCBwbGVhc2Ugc2VlIHRoZSBmYWlsdXJlIGJlbG93OiIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigiQW4gdW5jYXVnaHQgZXhjZXB0aW9uIG9jY3VycmVkIGluIHJ1bnF1ZXVlIikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnRlYXJkb3duX3dvcmtlcnMoKQogICAgICAgICAgICAgZXhjZXB0OgpAQCAtMTIxOSwxMyArMTI5MCwxNCBAQAogICAgIGRlZiBkdW1wX3NpZ25hdHVyZXMoc2VsZiwgb3B0aW9ucyk6CiAgICAgICAgIGRvbmUgPSBzZXQoKQogICAgICAgICBiYi5ub3RlKCJSZXBhcnNpbmcgZmlsZXMgdG8gY29sbGVjdCBkZXBlbmRlbmN5IGRhdGEiKQotICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10gbm90IGluIGRvbmU6Ci0gICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCi0gICAgICAgICAgICAgICAgdGhlX2RhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIHNlbGYuY29va2VyLmRhdGEpCi0gICAgICAgICAgICAgICAgZG9uZS5hZGQoc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdKQorICAgICAgICBiYl9jYWNoZSA9IGJiLmNhY2hlLk5vQ2FjaGUoc2VsZi5jb29rZXIuZGF0YWJ1aWxkZXIpCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICBmbiA9IGZuX2Zyb21fdGlkKHRpZCkKKyAgICAgICAgICAgIGlmIGZuIG5vdCBpbiBkb25lOgorICAgICAgICAgICAgICAgIHRoZV9kYXRhID0gYmJfY2FjaGUubG9hZERhdGFGdWxsKGZuLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pKQorICAgICAgICAgICAgICAgIGRvbmUuYWRkKGZuKQogCi0gICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Moc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBvcHRpb25zKQorICAgICAgICBiYi5wYXJzZS5zaWdnZW4uZHVtcF9zaWdzKHNlbGYucnFkYXRhLmRhdGFDYWNoZXMsIG9wdGlvbnMpCiAKICAgICAgICAgcmV0dXJuCiAKQEAgLTEyNDEsMjAgKzEzMTMsMTkgQEAKICAgICAgICAgc3RhbXBwcmVzZW50ID0gW10KICAgICAgICAgdmFsaWRfbmV3ID0gc2V0KCkKIAotICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgotICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCi0gICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQotICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgdGFza2ZuKSA9IHNwbGl0X3RpZF9tY2ZuKHRpZCkKKyAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGVzW21jXS50YXNrX2RlcHNbdGFza2ZuXQogCiAgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub2V4ZWMnXToKLSAgICAgICAgICAgICAgICBub2V4ZWMuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgbm9leGVjLmFwcGVuZCh0aWQpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgc3FfZm4uYXBwZW5kKGZuKQotICAgICAgICAgICAgc3FfaGFzaGZuLmFwcGVuZChzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuaGFzaGZuW2ZuXSkKLSAgICAgICAgICAgIHNxX2hhc2guYXBwZW5kKHNlbGYucnFkYXRhLnJ1bnFfaGFzaFt0YXNrXSkKKyAgICAgICAgICAgIHNxX2hhc2hmbi5hcHBlbmQoc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10uaGFzaGZuW2ZuXSkKKyAgICAgICAgICAgIHNxX2hhc2guYXBwZW5kKHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0uaGFzaCkKICAgICAgICAgICAgIHNxX3Rhc2tuYW1lLmFwcGVuZCh0YXNrbmFtZSkKLSAgICAgICAgICAgIHNxX3Rhc2suYXBwZW5kKHRhc2spCisgICAgICAgICAgICBzcV90YXNrLmFwcGVuZCh0aWQpCiAgICAgICAgIGxvY3MgPSB7ICJzcV9mbiIgOiBzcV9mbiwgInNxX3Rhc2siIDogc3FfdGFza25hbWUsICJzcV9oYXNoIiA6IHNxX2hhc2gsICJzcV9oYXNoZm4iIDogc3FfaGFzaGZuLCAiZCIgOiBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhIH0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2FsbCA9IHNlbGYuaGFzaHZhbGlkYXRlICsgIihzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkLCBzaWdpbmZvPVRydWUpIgpAQCAtMTI2OSwxMyArMTM0MCwxMyBAQAogICAgICAgICAjIFRhc2tzIHdoaWNoIGFyZSBib3RoIHNldHNjZW5lIGFuZCBub2V4ZWMgbmV2ZXIgY2FyZSBhYm91dCBkZXBlbmRlbmNpZXMKICAgICAgICAgIyBXZSB0aGVyZWZvcmUgZmluZCB0YXNrcyB3aGljaCBhcmUgc2V0c2NlbmUgYW5kIG5vZXhlYyBhbmQgbWFyayB0aGVpcgogICAgICAgICAjIHVuaXF1ZSBkZXBlbmRlbmNpZXMgYXMgdmFsaWQuCi0gICAgICAgIGZvciB0YXNrIGluIG5vZXhlYzoKLSAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgIGZvciB0aWQgaW4gbm9leGVjOgorICAgICAgICAgICAgaWYgdGlkIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHM6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1t0aWRdLmRlcGVuZHM6CiAgICAgICAgICAgICAgICAgaGFzbm9leGVjcGFyZW50cyA9IFRydWUKLSAgICAgICAgICAgICAgICBmb3IgZGVwMiBpbiBzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbZGVwXToKLSAgICAgICAgICAgICAgICAgICAgaWYgZGVwMiBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lIGFuZCBkZXAyIGluIG5vZXhlYzoKKyAgICAgICAgICAgICAgICBmb3IgZGVwMiBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1tkZXBdLnJldmRlcHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcDIgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZV90aWRzIGFuZCBkZXAyIGluIG5vZXhlYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIGhhc25vZXhlY3BhcmVudHMgPSBGYWxzZQogICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtMTI4MywzMCArMTM1NCwzMCBAQAogICAgICAgICAgICAgICAgICAgICB2YWxpZF9uZXcuYWRkKGRlcCkKIAogICAgICAgICBpbnZhbGlkdGFza3MgPSBzZXQoKQotICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgotICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gdmFsaWRfbmV3IGFuZCB0YXNrIG5vdCBpbiBub2V4ZWM6Ci0gICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzLmFkZCh0YXNrKQorICAgICAgICBmb3IgdGlkIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgaWYgdGlkIG5vdCBpbiB2YWxpZF9uZXcgYW5kIHRpZCBub3QgaW4gbm9leGVjOgorICAgICAgICAgICAgICAgIGludmFsaWR0YXNrcy5hZGQodGlkKQogCiAgICAgICAgIGZvdW5kID0gc2V0KCkKICAgICAgICAgcHJvY2Vzc2VkID0gc2V0KCkKLSAgICAgICAgZm9yIHRhc2sgaW4gaW52YWxpZHRhc2tzOgotICAgICAgICAgICAgdG9wcm9jZXNzID0gc2V0KFt0YXNrXSkKKyAgICAgICAgZm9yIHRpZCBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgICAgICB0b3Byb2Nlc3MgPSBzZXQoW3RpZF0pCiAgICAgICAgICAgICB3aGlsZSB0b3Byb2Nlc3M6CiAgICAgICAgICAgICAgICAgbmV4dCA9IHNldCgpCiAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdG9wcm9jZXNzOgotICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0XToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1t0XS5kZXBlbmRzOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGludmFsaWR0YXNrczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5hZGQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5hZGQodGlkKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBwcm9jZXNzZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkLmFkZChkZXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5hZGQoZGVwKQogICAgICAgICAgICAgICAgIHRvcHJvY2VzcyA9IG5leHQKLSAgICAgICAgICAgICAgICBpZiB0YXNrIGluIGZvdW5kOgorICAgICAgICAgICAgICAgIGlmIHRpZCBpbiBmb3VuZDoKICAgICAgICAgICAgICAgICAgICAgdG9wcm9jZXNzID0gc2V0KCkKIAogICAgICAgICB0YXNrbGlzdCA9IFtdCi0gICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrcy5kaWZmZXJlbmNlKGZvdW5kKToKLSAgICAgICAgICAgIHRhc2tsaXN0LmFwcGVuZChzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgZm9yIHRpZCBpbiBpbnZhbGlkdGFza3MuZGlmZmVyZW5jZShmb3VuZCk6CisgICAgICAgICAgICB0YXNrbGlzdC5hcHBlbmQodGlkKQogCiAgICAgICAgIGlmIHRhc2tsaXN0OgogICAgICAgICAgICAgYmIucGxhaW4oIlRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGJ1aWxkIGFuZCBhbnkgY2FjaGVkIHRhc2tzIHN0YXJ0IGF0IHRoZSBmb2xsb3dpbmcgdGFza3M6XG4iICsgIlxuIi5qb2luKHRhc2tsaXN0KSkKQEAgLTEzMzAsMTEgKzE0MDEsMTAgQEAKICAgICAgICAgICAgIHJldHVybiByZWNvdXQKIAogCi0gICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKLSAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQotICAgICAgICAgICAgcG4gPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQotICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KLSAgICAgICAgICAgIGggPSBzZWxmLnJxZGF0YS5ydW5xX2hhc2hbdGFza10KKyAgICAgICAgZm9yIHRpZCBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgXykgPSBzcGxpdF90aWRfbWNmbih0aWQpCisgICAgICAgICAgICBwbiA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnBrZ19mbltmbl0KKyAgICAgICAgICAgIGggPSBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1t0aWRdLmhhc2gKICAgICAgICAgICAgIG1hdGNoZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgW10sIHNlbGYuY2ZnRGF0YSkKICAgICAgICAgICAgIG1hdGNoID0gTm9uZQogICAgICAgICAgICAgZm9yIG0gaW4gbWF0Y2hlczoKQEAgLTEzNDIsNyArMTQxMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gbQogICAgICAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2FuJ3QgZmluZCBhIHRhc2sgd2UncmUgc3VwcG9zZWQgdG8gaGF2ZSB3cml0dGVuIG91dD8gKGhhc2g6ICVzKT8iICUgaCkKLSAgICAgICAgICAgIG1hdGNoZXMgPSB7ayA6IHYgZm9yIGssIHYgaW4gbWF0Y2hlcy5pdGVyaXRlbXMoKSBpZiBoIG5vdCBpbiBrfQorICAgICAgICAgICAgbWF0Y2hlcyA9IHtrIDogdiBmb3IgaywgdiBpbiBpdGVyKG1hdGNoZXMuaXRlbXMoKSkgaWYgaCBub3QgaW4ga30KICAgICAgICAgICAgIGlmIG1hdGNoZXM6CiAgICAgICAgICAgICAgICAgbGF0ZXN0bWF0Y2ggPSBzb3J0ZWQobWF0Y2hlcy5rZXlzKCksIGtleT1sYW1iZGEgZjogbWF0Y2hlc1tmXSlbLTFdCiAgICAgICAgICAgICAgICAgcHJldmggPSBfX2ZpbmRfbWQ1X18uc2VhcmNoKGxhdGVzdG1hdGNoKS5ncm91cCgwKQpAQCAtMTM2MCwxOSArMTQzMCwyMCBAQAogICAgICAgICBzZWxmLm51bWJlcl90YXNrcyA9IGludChzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJCQl9OVU1CRVJfVEhSRUFEUyIsIFRydWUpIG9yIDEpCiAgICAgICAgIHNlbGYuc2NoZWR1bGVyID0gc2VsZi5jZmdEYXRhLmdldFZhcigiQkJfU0NIRURVTEVSIiwgVHJ1ZSkgb3IgInNwZWVkIgogCi0gICAgICAgIHNlbGYucnVucV9idWlsZGFibGUgPSBbXQotICAgICAgICBzZWxmLnJ1bnFfcnVubmluZyA9IFtdCi0gICAgICAgIHNlbGYucnVucV9jb21wbGV0ZSA9IFtdCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUgPSBzZXQoKQorICAgICAgICBzZWxmLnJ1bnFfcnVubmluZyA9IHNldCgpCisgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZSA9IHNldCgpCiAKICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMgPSB7fQogICAgICAgICBzZWxmLmJ1aWxkX3N0YW1wczIgPSBbXQotICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcyA9IFtdCisgICAgICAgIHNlbGYuZmFpbGVkX3RpZHMgPSBbXQogCiAgICAgICAgIHNlbGYuc3RhbXBjYWNoZSA9IHt9CiAKLSAgICAgICAgcnEud29ya2VycGlwZS5zZXRydW5xdWV1ZWV4ZWMoc2VsZikKLSAgICAgICAgaWYgcnEuZmFrZXdvcmtlcnBpcGU6Ci0gICAgICAgICAgICBycS5mYWtld29ya2VycGlwZS5zZXRydW5xdWV1ZWV4ZWMoc2VsZikKKyAgICAgICAgZm9yIG1jIGluIHJxLndvcmtlcjoKKyAgICAgICAgICAgIHJxLndvcmtlclttY10ucGlwZS5zZXRydW5xdWV1ZWV4ZWMoc2VsZikKKyAgICAgICAgZm9yIG1jIGluIHJxLmZha2V3b3JrZXI6CisgICAgICAgICAgICBycS5mYWtld29ya2VyW21jXS5waXBlLnNldHJ1bnF1ZXVlZXhlYyhzZWxmKQogCiAgICAgICAgIGlmIHNlbGYubnVtYmVyX3Rhc2tzIDw9IDA6CiAgICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgQkJfTlVNQkVSX1RIUkVBRFMgJXMiICUgc2VsZi5udW1iZXJfdGFza3MpCkBAIC0xMzkxLDE4ICsxNDYyLDIyIEBACiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgZmluaXNoX25vdyhzZWxmKToKLQotICAgICAgICBmb3Igd29ya2VyIGluIFtzZWxmLnJxLndvcmtlciwgc2VsZi5ycS5mYWtld29ya2VyXToKLSAgICAgICAgICAgIGlmIG5vdCB3b3JrZXI6Ci0gICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIG1jIGluIHNlbGYucnEud29ya2VyOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdvcmtlci5zdGRpbi53cml0ZSgiPGZpbmlzaG5vdz48L2ZpbmlzaG5vdz4iKQotICAgICAgICAgICAgICAgIHdvcmtlci5zdGRpbi5mbHVzaCgpCisgICAgICAgICAgICAgICAgc2VsZi5ycS53b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4ud3JpdGUoYiI8ZmluaXNobm93PjwvZmluaXNobm93PiIpCisgICAgICAgICAgICAgICAgc2VsZi5ycS53b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3b3JrZXIgbXVzdCBoYXZlIGRpZWQ/CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgbWMgaW4gc2VsZi5ycS5mYWtld29ya2VyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlclttY10ucHJvY2Vzcy5zdGRpbi53cml0ZShiIjxmaW5pc2hub3c+PC9maW5pc2hub3c+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4uZmx1c2goKQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgIyB3b3JrZXIgbXVzdCBoYXZlIGRpZWQ/CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGlmIGxlbihzZWxmLmZhaWxlZF9mbmlkcykgIT0gMDoKKyAgICAgICAgaWYgbGVuKHNlbGYuZmFpbGVkX3RpZHMpICE9IDA6CiAgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKICAgICAgICAgICAgIHJldHVybgogCkBAIC0xNDE3LDcgKzE0OTIsNyBAQAogICAgICAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYucnEuYWN0aXZlX2ZkcygpCiAKLSAgICAgICAgaWYgbGVuKHNlbGYuZmFpbGVkX2ZuaWRzKSAhPSAwOgorICAgICAgICBpZiBsZW4oc2VsZi5mYWlsZWRfdGlkcykgIT0gMDoKICAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUZhaWxlZAogICAgICAgICAgICAgcmV0dXJuIFRydWUKIApAQCAtMTQzMSwxMyArMTUwNiw4IEBACiAgICAgICAgIHRhc2tkYXRhID0ge30KICAgICAgICAgdGFza2RlcHMuYWRkKHRhc2spCiAgICAgICAgIGZvciBkZXAgaW4gdGFza2RlcHM6Ci0gICAgICAgICAgICBpZiBzZXRzY2VuZToKLSAgICAgICAgICAgICAgICBkZXBpZCA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbZGVwXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZXBpZCA9IGRlcAotICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZGVwaWRdXQotICAgICAgICAgICAgcG4gPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQotICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbZGVwaWRdCisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgXykgPSBzcGxpdF90aWRfbWNmbihkZXApCisgICAgICAgICAgICBwbiA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnBrZ19mbltmbl0KICAgICAgICAgICAgIHRhc2tkYXRhW2RlcF0gPSBbcG4sIHRhc2tuYW1lLCBmbl0KICAgICAgICAgY2FsbCA9IHNlbGYucnEuZGVwdmFsaWRhdGUgKyAiKHRhc2ssIHRhc2tkYXRhLCBub3RuZWVkZWQsIGQpIgogICAgICAgICBsb2NzID0geyAidGFzayIgOiB0YXNrLCAidGFza2RhdGEiIDogdGFza2RhdGEsICJub3RuZWVkZWQiIDogc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZCwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CkBAIC0xNDU3LDM0ICsxNTI3LDMyIEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxKToKICAgICAgICAgUnVuUXVldWVFeGVjdXRlLl9faW5pdF9fKHNlbGYsIHJxKQogCi0gICAgICAgIHNlbGYuc3RhdHMgPSBSdW5RdWV1ZVN0YXRzKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKQorICAgICAgICBzZWxmLnN0YXRzID0gUnVuUXVldWVTdGF0cyhsZW4oc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXMpKQogCiAgICAgICAgIHNlbGYuc3RhbXBjYWNoZSA9IHt9CiAKICAgICAgICAgaW5pdGlhbF9jb3ZlcmVkID0gc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQuY29weSgpCiAKICAgICAgICAgIyBNYXJrIGluaXRpYWwgYnVpbGRhYmxlIHRhc2tzCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKLSAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nLmFwcGVuZCgwKQotICAgICAgICAgICAgc2VsZi5ydW5xX2NvbXBsZXRlLmFwcGVuZCgwKQotICAgICAgICAgICAgaWYgbGVuKHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXSkgPT0gMDoKLSAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlLmFwcGVuZCgxKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlLmFwcGVuZCgwKQotICAgICAgICAgICAgaWYgbGVuKHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkgPiAwIGFuZCBzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10uaXNzdWJzZXQoc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpOgotICAgICAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICBmb3IgdGlkIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0uZGVwZW5kcykgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlLmFkZCh0aWQpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbdGlkXS5yZXZkZXBzKSA+IDAgYW5kIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0ucmV2ZGVwcy5pc3N1YnNldChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCk6CisgICAgICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQuYWRkKHRpZCkKIAogICAgICAgICBmb3VuZCA9IFRydWUKICAgICAgICAgd2hpbGUgZm91bmQ6CiAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCi0gICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6Ci0gICAgICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZDoKKyAgICAgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICAgICAgaWYgdGlkIGluIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnQ29uc2lkZXJpbmcgJXMgKCVzKTogJXMnICUgKHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spLCBzdHIoc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSkpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdDb25zaWRlcmluZyAlczogJXMnICUgKHRpZCwgc3RyKHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0ucmV2ZGVwcykpKQogCi0gICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkgPiAwIGFuZCBzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10uaXNzdWJzZXQoc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1t0aWRdLnJldmRlcHMpID4gMCBhbmQgc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbdGlkXS5yZXZkZXBzLmlzc3Vic2V0KHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGlkIGluIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5hZGQodGlkKQogCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnU2tpcCBsaXN0IChwcmUgc2V0c2NlbmV2ZXJpZnkpICVzJywgc29ydGVkKHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKSkKIApAQCAtMTQ5MiwzNSArMTU2MCwzMiBAQAogICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IHNldCgpCiAgICAgICAgIGlmIHNlbGYucnEuc2V0c2NlbmV2ZXJpZnk6CiAgICAgICAgICAgICBpbnZhbGlkdGFza3MgPSBbXQotICAgICAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX3Rhc2spKToKLSAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KLSAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQotICAgICAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQotCisgICAgICAgICAgICB0YXNrbmFtZXMgPSB7fQorICAgICAgICAgICAgZm5zID0ge30KKyAgICAgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICAgICAgKG1jLCBmbiwgdGFza25hbWUsIHRhc2tmbikgPSBzcGxpdF90aWRfbWNmbih0aWQpCisgICAgICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnRhc2tfZGVwc1t0YXNrZm5dCisgICAgICAgICAgICAgICAgZm5zW3RpZF0gPSB0YXNrZm4KKyAgICAgICAgICAgICAgICB0YXNrbmFtZXNbdGlkXSA9IHRhc2tuYW1lCiAgICAgICAgICAgICAgICAgaWYgJ25vZXhlYycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9leGVjJ106CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lICsgIl9zZXRzY2VuZSIsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU2V0c2NlbmUgc3RhbXAgY3VycmVudCBmb3IgdGFzayAlcyglcyknLCB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2sodGlkLCB0YXNrbmFtZSArICJfc2V0c2NlbmUiLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1NldHNjZW5lIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMnLCB0aWQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lLCByZWN1cnNlID0gVHJ1ZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdOb3JtYWwgc3RhbXAgY3VycmVudCBmb3IgdGFzayAlcyglcyknLCB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2sodGlkLCB0YXNrbmFtZSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnTm9ybWFsIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMnLCB0aWQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGludmFsaWR0YXNrcy5hcHBlbmQodGlkKQogCi0gICAgICAgICAgICBjYWxsID0gc2VsZi5ycS5zZXRzY2VuZXZlcmlmeSArICIoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkLCBpbnZhbGlkdGFza3M9aW52YWxpZHRhc2tzKSIKLSAgICAgICAgICAgIGNhbGwyID0gc2VsZi5ycS5zZXRzY2VuZXZlcmlmeSArICIoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkKSIKLSAgICAgICAgICAgIGxvY3MgPSB7ICJjb3ZlcmVkIiA6IHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLCAidGFza25hbWVzIiA6IHNlbGYucnFkYXRhLnJ1bnFfdGFzaywgImZuaWRzIiA6IHNlbGYucnFkYXRhLnJ1bnFfZm5pZCwgImZucyIgOiBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleCwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSwgImludmFsaWR0YXNrcyIgOiBpbnZhbGlkdGFza3MgfQotICAgICAgICAgICAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIHdpdGhvdXQgaW52YWxpZHRhc2tzCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY292ZXJlZF9yZW1vdmUgPSBiYi51dGlscy5iZXR0ZXJfZXZhbChjYWxsLCBsb2NzKQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwyLCBsb2NzKQorICAgICAgICAgICAgY2FsbCA9IHNlbGYucnEuc2V0c2NlbmV2ZXJpZnkgKyAiKGNvdmVyZWQsIHRhc2tuYW1lcywgZm5zLCBkLCBpbnZhbGlkdGFza3M9aW52YWxpZHRhc2tzKSIKKyAgICAgICAgICAgIGxvY3MgPSB7ICJjb3ZlcmVkIiA6IHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLCAidGFza25hbWVzIiA6IHRhc2tuYW1lcywgImZucyIgOiBmbnMsICJkIiA6IHNlbGYuY29va2VyLmV4cGFuZGVkX2RhdGEsICJpbnZhbGlkdGFza3MiIDogaW52YWxpZHRhc2tzIH0KKyAgICAgICAgICAgIGNvdmVyZWRfcmVtb3ZlID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKIAotICAgICAgICBkZWYgcmVtb3ZlY292ZXJlZHRhc2sodGFzayk6Ci0gICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KLSAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdICsgJ19zZXRzY2VuZScKLSAgICAgICAgICAgIGJiLmJ1aWxkLmRlbF9zdGFtcCh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKLSAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLnJlbW92ZSh0YXNrKQorICAgICAgICBkZWYgcmVtb3ZlY292ZXJlZHRhc2sodGlkKToKKyAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lLCB0YXNrZm4pID0gc3BsaXRfdGlkX21jZm4odGlkKQorICAgICAgICAgICAgdGFza25hbWUgPSB0YXNrbmFtZSArICdfc2V0c2NlbmUnCisgICAgICAgICAgICBiYi5idWlsZC5kZWxfc3RhbXAodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLCB0YXNrZm4pCisgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5yZW1vdmUodGlkKQogCiAgICAgICAgIHRvcmVtb3ZlID0gY292ZXJlZF9yZW1vdmUKICAgICAgICAgZm9yIHRhc2sgaW4gdG9yZW1vdmU6CkBAIC0xNTI5LDcgKzE1OTQsNyBAQAogICAgICAgICAgICAgY292ZXJlZF9yZW1vdmUgPSBbXQogICAgICAgICAgICAgZm9yIHRhc2sgaW4gdG9yZW1vdmU6CiAgICAgICAgICAgICAgICAgcmVtb3ZlY292ZXJlZHRhc2sodGFzaykKLSAgICAgICAgICAgICAgICBmb3IgZGVwdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza106CisgICAgICAgICAgICAgICAgZm9yIGRlcHRhc2sgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbdGFza10uZGVwZW5kczoKICAgICAgICAgICAgICAgICAgICAgaWYgZGVwdGFzayBub3QgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBpZiBkZXB0YXNrIGluIHRvcmVtb3ZlIG9yIGRlcHRhc2sgaW4gY292ZXJlZF9yZW1vdmUgb3IgZGVwdGFzayBpbiBpbml0aWFsX2NvdmVyZWQ6CkBAIC0xNTQwLDcgKzE2MDUsMTUgQEAKIAogICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0Z1bGwgc2tpcCBsaXN0ICVzJywgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpCiAKLSAgICAgICAgZXZlbnQuZmlyZShiYi5ldmVudC5TdGFtcFVwZGF0ZShzZWxmLnJxZGF0YS50YXJnZXRfcGFpcnMsIHNlbGYucnFkYXRhLmRhdGFDYWNoZS5zdGFtcCksIHNlbGYuY2ZnRGF0YSkKKworICAgICAgICBmb3IgbWMgaW4gc2VsZi5ycWRhdGEuZGF0YUNhY2hlczoKKyAgICAgICAgICAgIHRhcmdldF9wYWlycyA9IFtdCisgICAgICAgICAgICBmb3IgdGlkIGluIHNlbGYucnFkYXRhLnRhcmdldF90aWRzOgorICAgICAgICAgICAgICAgICh0aWRtYywgZm4sIHRhc2tuYW1lLCBfKSA9IHNwbGl0X3RpZF9tY2ZuKHRpZCkKKyAgICAgICAgICAgICAgICBpZiB0aWRtYyA9PSBtYzoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3BhaXJzLmFwcGVuZCgoZm4sIHRhc2tuYW1lKSkKKworICAgICAgICAgICAgZXZlbnQuZmlyZShiYi5ldmVudC5TdGFtcFVwZGF0ZSh0YXJnZXRfcGFpcnMsIHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnN0YW1wKSwgc2VsZi5jZmdEYXRhKQogCiAgICAgICAgIHNjaGVkdWxlcnMgPSBzZWxmLmdldF9zY2hlZHVsZXJzKCkKICAgICAgICAgZm9yIHNjaGVkdWxlciBpbiBzY2hlZHVsZXJzOgpAQCAtMTU3NSw3ICsxNjQ4LDcgQEAKICAgICAgICAgcmV0dXJuIHNjaGVkdWxlcnMKIAogICAgIGRlZiBzZXRidWlsZGFibGUoc2VsZiwgdGFzayk6Ci0gICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYWRkKHRhc2spCiAgICAgICAgIHNlbGYuc2NoZWQubmV3YnVpbGFibGUodGFzaykKIAogICAgIGRlZiB0YXNrX2NvbXBsZXRlb3V0cmlnaHQoc2VsZiwgdGFzayk6CkBAIC0xNTg0LDIxICsxNjU3LDIxIEBACiAgICAgICAgIExvb2sgYXQgdGhlIHJldmVyc2UgZGVwZW5kZW5jaWVzIGFuZCBtYXJrIGFueSB0YXNrIHdpdGgKICAgICAgICAgY29tcGxldGVkIGRlcGVuZGVuY2llcyBhcyBidWlsZGFibGUKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYucnVucV9jb21wbGV0ZVt0YXNrXSA9IDEKLSAgICAgICAgZm9yIHJldmRlcCBpbiBzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza106Ci0gICAgICAgICAgICBpZiBzZWxmLnJ1bnFfcnVubmluZ1tyZXZkZXBdID09IDE6CisgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZS5hZGQodGFzaykKKyAgICAgICAgZm9yIHJldmRlcCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1t0YXNrXS5yZXZkZXBzOgorICAgICAgICAgICAgaWYgcmV2ZGVwIGluIHNlbGYucnVucV9ydW5uaW5nOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBzZWxmLnJ1bnFfYnVpbGRhYmxlW3JldmRlcF0gPT0gMToKKyAgICAgICAgICAgIGlmIHJldmRlcCBpbiBzZWxmLnJ1bnFfYnVpbGRhYmxlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBhbGxkZXBzID0gMQotICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbcmV2ZGVwXToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfY29tcGxldGVbZGVwXSAhPSAxOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1tyZXZkZXBdLmRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBzZWxmLnJ1bnFfY29tcGxldGU6CiAgICAgICAgICAgICAgICAgICAgIGFsbGRlcHMgPSAwCiAgICAgICAgICAgICBpZiBhbGxkZXBzID09IDE6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXRidWlsZGFibGUocmV2ZGVwKQotICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JldmRlcF1dCi0gICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmV2ZGVwXQotICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWFya2luZyB0YXNrICVzICglcywgJXMpIGFzIGJ1aWxkYWJsZSIsIHJldmRlcCwgZm4sIHRhc2tuYW1lKQorICAgICAgICAgICAgICAgIGZuID0gZm5fZnJvbV90aWQocmV2ZGVwKQorICAgICAgICAgICAgICAgIHRhc2tuYW1lID0gdGFza25hbWVfZnJvbV90aWQocmV2ZGVwKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWFya2luZyB0YXNrICVzIGFzIGJ1aWxkYWJsZSIsIHJldmRlcCkKIAogICAgIGRlZiB0YXNrX2NvbXBsZXRlKHNlbGYsIHRhc2spOgogICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQpAQCAtMTYxMSwxNCArMTY4NCwxMyBAQAogICAgICAgICBVcGRhdGVzIHRoZSBzdGF0ZSBlbmdpbmUgd2l0aCB0aGUgZmFpbHVyZQogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5zdGF0cy50YXNrRmFpbGVkKCkKLSAgICAgICAgZm5pZCA9IHNlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXQotICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcy5hcHBlbmQoZm5pZCkKKyAgICAgICAgc2VsZi5mYWlsZWRfdGlkcy5hcHBlbmQodGFzaykKICAgICAgICAgYmIuZXZlbnQuZmlyZShydW5RdWV1ZVRhc2tGYWlsZWQodGFzaywgc2VsZi5zdGF0cywgZXhpdGNvZGUsIHNlbGYucnEpLCBzZWxmLmNmZ0RhdGEpCi0gICAgICAgIGlmIHNlbGYucnFkYXRhLnRhc2tEYXRhLmFib3J0OgorICAgICAgICBpZiBzZWxmLnJxZGF0YS50YXNrRGF0YVsnJ10uYWJvcnQ6CiAgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDbGVhblVwCiAKICAgICBkZWYgdGFza19za2lwKHNlbGYsIHRhc2ssIHJlYXNvbik6Ci0gICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hZGQodGFzaykKICAgICAgICAgc2VsZi5zZXRidWlsZGFibGUodGFzaykKICAgICAgICAgYmIuZXZlbnQuZmlyZShydW5RdWV1ZVRhc2tTa2lwcGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEsIHJlYXNvbiksIHNlbGYuY2ZnRGF0YSkKICAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlb3V0cmlnaHQodGFzaykKQEAgLTE2MzAsOCArMTcwMiw1MiBAQAogICAgICAgICBSdW4gdGhlIHRhc2tzIGluIGEgcXVldWUgcHJlcGFyZWQgYnkgcnFkYXRhLnByZXBhcmUoKQogICAgICAgICAiIiIKIAorICAgICAgICBpZiBzZWxmLnJxZGF0YS5zZXRzY2VuZXdoaXRlbGlzdCBhbmQgbm90IHNlbGYucnFkYXRhLnNldHNjZW5ld2hpdGVsaXN0X2NoZWNrZWQ6CisgICAgICAgICAgICBzZWxmLnJxZGF0YS5zZXRzY2VuZXdoaXRlbGlzdF9jaGVja2VkID0gVHJ1ZQorCisgICAgICAgICAgICAjIENoZWNrIHRhc2tzIHRoYXQgYXJlIGdvaW5nIHRvIHJ1biBhZ2FpbnN0IHRoZSB3aGl0ZWxpc3QKKyAgICAgICAgICAgIGRlZiBjaGVja19ub3J1bl90YXNrKHRpZCwgc2hvd2Vycm9yPUZhbHNlKToKKyAgICAgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgXykgPSBzcGxpdF90aWRfbWNmbih0aWQpCisgICAgICAgICAgICAgICAgIyBJZ25vcmUgY292ZXJlZCB0YXNrcworICAgICAgICAgICAgICAgIGlmIHRpZCBpbiBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgIyBJZ25vcmUgc3RhbXBlZCB0YXNrcworICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayh0aWQsIHRhc2tuYW1lLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICAjIElnbm9yZSBub2V4ZWMgdGFza3MKKyAgICAgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10udGFza19kZXBzW2ZuXQorICAgICAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10ucGtnX2ZuW2ZuXQorICAgICAgICAgICAgICAgIGlmIG5vdCBjaGVja19zZXRzY2VuZV9lbmZvcmNlX3doaXRlbGlzdChwbiwgdGFza25hbWUsIHNlbGYucnFkYXRhLnNldHNjZW5ld2hpdGVsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2hvd2Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGlkIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVfdGlkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1Rhc2sgJXMuJXMgYXR0ZW1wdGVkIHRvIGV4ZWN1dGUgdW5leHBlY3RlZGx5IGFuZCBzaG91bGQgaGF2ZSBiZWVuIHNldHNjZW5lZCcgJSAocG4sIHRhc2tuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdUYXNrICVzLiVzIGF0dGVtcHRlZCB0byBleGVjdXRlIHVuZXhwZWN0ZWRseScgJSAocG4sIHRhc2tuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICMgTG9vayB0byBzZWUgaWYgYW55IHRhc2tzIHRoYXQgd2UgdGhpbmsgc2hvdWxkbid0IHJ1biBhcmUgZ29pbmcgdG8KKyAgICAgICAgICAgIHVuZXhwZWN0ZWQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgICAgICBpZiBjaGVja19ub3J1bl90YXNrKHRpZCk6CisgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiB1bmV4cGVjdGVkOgorICAgICAgICAgICAgICAgICMgUnVuIHRocm91Z2ggdGhlIHRhc2tzIGluIHRoZSByb3VnaCBvcmRlciB0aGV5J2QgaGF2ZSBleGVjdXRlZCBhbmQgcHJpbnQgZXJyb3JzCisgICAgICAgICAgICAgICAgIyAoc2luY2UgdGhlIG9yZGVyIGNhbiBiZSB1c2VmdWwgLSB1c3VhbGx5IG1pc3Npbmcgc3N0YXRlIGZvciB0aGUgbGFzdCBmZXcgdGFza3MKKyAgICAgICAgICAgICAgICAjIGlzIHRoZSBjYXVzZSBvZiB0aGUgcHJvYmxlbSkKKyAgICAgICAgICAgICAgICB0YXNrID0gc2VsZi5zY2hlZC5uZXh0KCkKKyAgICAgICAgICAgICAgICB3aGlsZSB0YXNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBjaGVja19ub3J1bl90YXNrKHRhc2ssIHNob3dlcnJvcj1UcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrLCAnU2V0c2NlbmUgZW5mb3JjZW1lbnQgY2hlY2snKQorICAgICAgICAgICAgICAgICAgICB0YXNrID0gc2VsZi5zY2hlZC5uZXh0KCkKKworICAgICAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNsZWFuVXAKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCiAgICAgICAgIHNlbGYucnEucmVhZF93b3JrZXJzKCkKLSAgICAgICAgCiAKICAgICAgICAgaWYgc2VsZi5zdGF0cy50b3RhbCA9PSAwOgogICAgICAgICAgICAgIyBub3RoaW5nIHRvIGRvCkBAIC0xNjM5LDMwICsxNzU1LDI4IEBACiAKICAgICAgICAgdGFzayA9IHNlbGYuc2NoZWQubmV4dCgpCiAgICAgICAgIGlmIHRhc2sgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KLSAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgdGFza2ZuKSA9IHNwbGl0X3RpZF9tY2ZuKHRhc2spCiAKICAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQ6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZXRzY2VuZSBjb3ZlcmVkIHRhc2sgJXMgKCVzKSIsIHRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2V0c2NlbmUgY292ZXJlZCB0YXNrICVzIiwgdGFzaykKICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrLCAiY292ZXJlZCIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgotICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU3RhbXAgY3VycmVudCB0YXNrICVzICglcykiLCB0YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlN0YW1wIGN1cnJlbnQgdGFzayAlcyIsIHRhc2spCisKICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrLCAiZXhpc3RpbmciKQogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnRhc2tfZGVwc1t0YXNrZm5dCiAgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub2V4ZWMnXToKICAgICAgICAgICAgICAgICBzdGFydGV2ZW50ID0gcnVuUXVldWVUYXNrU3RhcnRlZCh0YXNrLCBzZWxmLnN0YXRzLCBzZWxmLnJxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZXhlYz1UcnVlKQogICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoc3RhcnRldmVudCwgc2VsZi5jZmdEYXRhKQotICAgICAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nLmFkZCh0YXNrKQogICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMudGFza0FjdGl2ZSgpCiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZHJ5X3J1bjoKLSAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQubWFrZV9zdGFtcCh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQubWFrZV9zdGFtcCh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10sIHRhc2tmbikKICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfY29tcGxldGUodGFzaykKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgZWxzZToKQEAgLTE2NzEsMjQgKzE3ODUsMjUgQEAKIAogICAgICAgICAgICAgdGFza2RlcGRhdGEgPSBzZWxmLmJ1aWxkX3Rhc2tkZXBkYXRhKHRhc2spCiAKLSAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnRhc2tfZGVwc1t0YXNrZm5dCiAgICAgICAgICAgICBpZiAnZmFrZXJvb3QnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ2Zha2Vyb290J10gYW5kIG5vdCBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmRyeV9ydW46CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucnEuZmFrZXdvcmtlcjoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zdGFydF9mYWtld29ya2VyKHNlbGYpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiRmFpbGVkIHRvIHNwYXduIGZha2Vyb290IHdvcmtlciB0byBydW4gJXM6JXM6ICVzIiAlIChmbiwgdGFza25hbWUsIHN0cihleGMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiRmFpbGVkIHRvIHNwYXduIGZha2Vyb290IHdvcmtlciB0byBydW4gJXM6ICVzIiAlICh0YXNrLCBzdHIoZXhjKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMudGFza0ZhaWxlZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgdGFza2RlcGRhdGEpKSArICI8L3J1bnRhc2s+IikKLSAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXIuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlclttY10ucHJvY2Vzcy5zdGRpbi53cml0ZShiIjxydW50YXNrPiIgKyBwaWNrbGUuZHVtcHMoKHRhc2tmbiwgdGFzaywgdGFza25hbWUsIEZhbHNlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCB0YXNrZGVwZGF0YSkpICsgYiI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4uZmx1c2goKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgdGFza2RlcGRhdGEpKSArICI8L3J1bnRhc2s+IikKLSAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi5mbHVzaCgpCisgICAgICAgICAgICAgICAgc2VsZi5ycS53b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4ud3JpdGUoYiI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKCh0YXNrZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKHRhc2tmbiksIHRhc2tkZXBkYXRhKSkgKyBiIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyW21jXS5wcm9jZXNzLnN0ZGluLmZsdXNoKCkKIAotICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHNbdGFza10gPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCi0gICAgICAgICAgICBzZWxmLmJ1aWxkX3N0YW1wczIuYXBwZW5kKHNlbGYuYnVpbGRfc3RhbXBzW3Rhc2tdKSAKLSAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHNbdGFza10gPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLCB0YXNrZm4sIG5vZXh0cmE9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfc3RhbXBzMi5hcHBlbmQoc2VsZi5idWlsZF9zdGFtcHNbdGFza10pCisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hZGQodGFzaykKICAgICAgICAgICAgIHNlbGYuc3RhdHMudGFza0FjdGl2ZSgpCiAgICAgICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA8IHNlbGYubnVtYmVyX3Rhc2tzOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC0xNjk3LDE3ICsxODEyLDE3IEBACiAgICAgICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5ycS5hY3RpdmVfZmRzKCkKIAotICAgICAgICBpZiBsZW4oc2VsZi5mYWlsZWRfZm5pZHMpICE9IDA6CisgICAgICAgIGlmIGxlbihzZWxmLmZhaWxlZF90aWRzKSAhPSAwOgogICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlRmFpbGVkCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgICMgU2FuaXR5IENoZWNrcwotICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID09IDA6CisgICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gc2VsZi5ydW5xX2J1aWxkYWJsZToKICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgbmV2ZXIgYnVpbGRhYmxlISIsIHRhc2spCi0gICAgICAgICAgICBpZiBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9PSAwOgorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gc2VsZi5ydW5xX3J1bm5pbmc6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICVzIG5ldmVyIHJhbiEiLCB0YXNrKQotICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2NvbXBsZXRlW3Rhc2tdID09IDA6CisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBzZWxmLnJ1bnFfY29tcGxldGU6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICVzIG5ldmVyIGNvbXBsZXRlZCEiLCB0YXNrKQogICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQogCkBAIC0xNzE1LDE2ICsxODMwLDE1IEBACiAKICAgICBkZWYgYnVpbGRfdGFza2RlcGRhdGEoc2VsZiwgdGFzayk6CiAgICAgICAgIHRhc2tkZXBkYXRhID0ge30KLSAgICAgICAgbmV4dCA9IHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXQorICAgICAgICBuZXh0ID0gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbdGFza10uZGVwZW5kcwogICAgICAgICBuZXh0LmFkZCh0YXNrKQogICAgICAgICB3aGlsZSBuZXh0OgogICAgICAgICAgICAgYWRkaXRpb25hbCA9IFtdCiAgICAgICAgICAgICBmb3IgcmV2ZGVwIGluIG5leHQ6Ci0gICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmV2ZGVwXV0KLSAgICAgICAgICAgICAgICBwbiA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5wa2dfZm5bZm5dCi0gICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmV2ZGVwXQotICAgICAgICAgICAgICAgIGRlcHMgPSBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbcmV2ZGVwXQotICAgICAgICAgICAgICAgIHByb3ZpZGVzID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmZuX3Byb3ZpZGVzW2ZuXQorICAgICAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lLCB0YXNrZm4pID0gc3BsaXRfdGlkX21jZm4ocmV2ZGVwKQorICAgICAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10ucGtnX2ZuW3Rhc2tmbl0KKyAgICAgICAgICAgICAgICBkZXBzID0gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbcmV2ZGVwXS5kZXBlbmRzCisgICAgICAgICAgICAgICAgcHJvdmlkZXMgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGVzW21jXS5mbl9wcm92aWRlc1t0YXNrZm5dCiAgICAgICAgICAgICAgICAgdGFza2RlcGRhdGFbcmV2ZGVwXSA9IFtwbiwgdGFza25hbWUsIGZuLCBkZXBzLCBwcm92aWRlc10KICAgICAgICAgICAgICAgICBmb3IgcmV2ZGVwMiBpbiBkZXBzOgogICAgICAgICAgICAgICAgICAgICBpZiByZXZkZXAyIG5vdCBpbiB0YXNrZGVwZGF0YToKQEAgLTE3NDMsMTYgKzE4NTcsMTYgQEAKICAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZCA9IHNldCgpCiAKICAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGFueSBzZXRzY2VuZSBmdW5jdGlvbnMsIHNraXAgdGhpcyBzdGVwCi0gICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lKSA9PSAwOgorICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZV90aWRzKSA9PSAwOgogICAgICAgICAgICAgcnEuc2NlbmVxdWV1ZV9jb3ZlcmVkID0gc2V0KCkKICAgICAgICAgICAgIHJxLnN0YXRlID0gcnVuUXVldWVSdW5Jbml0CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBzZWxmLnN0YXRzID0gUnVuUXVldWVTdGF0cyhsZW4oc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZSkpCisgICAgICAgIHNlbGYuc3RhdHMgPSBSdW5RdWV1ZVN0YXRzKGxlbihzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHMpKQogCi0gICAgICAgIHNxX3JldmRlcHMgPSBbXQotICAgICAgICBzcV9yZXZkZXBzX25ldyA9IFtdCi0gICAgICAgIHNxX3JldmRlcHNfc3F1YXNoID0gW10KKyAgICAgICAgc3FfcmV2ZGVwcyA9IHt9CisgICAgICAgIHNxX3JldmRlcHNfbmV3ID0ge30KKyAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2ggPSB7fQogICAgICAgICBzZWxmLnNxX2hhcmRkZXBzID0ge30KIAogICAgICAgICAjIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgZGVwZW5kZW5jeSBncmFwaCBmb3IgdGhlIHNldHNjZW5lIGZ1bmN0aW9ucy4gSW50ZXJtZWRpYXRlCkBAIC0xNzYwLDI1ICsxODc0LDI5IEBACiAgICAgICAgICMgdGhlcmVmb3JlIGFpbXMgdG8gY29sbGFwc2UgdGhlIGh1Z2UgcnVucXVldWUgZGVwZW5kZW5jeSB0cmVlIGludG8gYSBzbWFsbGVyIG9uZQogICAgICAgICAjIG9ubHkgY29udGFpbmluZyB0aGUgc2V0c2NlbmUgZnVuY3Rpb25zLgogCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKLSAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nLmFwcGVuZCgwKQotICAgICAgICAgICAgc2VsZi5ydW5xX2NvbXBsZXRlLmFwcGVuZCgwKQotICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hcHBlbmQoMCkKKyAgICAgICAgc2VsZi5ycWRhdGEuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKIAogICAgICAgICAjIEZpcnN0IHByb2Nlc3MgdGhlIGNoYWlucyB1cCB0byB0aGUgZmlyc3Qgc2V0c2NlbmUgdGFzay4KICAgICAgICAgZW5kcG9pbnRzID0ge30KLSAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKLSAgICAgICAgICAgIHNxX3JldmRlcHMuYXBwZW5kKGNvcHkuY29weShzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pKQotICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXcuYXBwZW5kKHNldCgpKQotICAgICAgICAgICAgaWYgKGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID09IDApIGFuZCB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgotICAgICAgICAgICAgICAgIGVuZHBvaW50c1t0YXNrXSA9IHNldCgpCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXM6CisgICAgICAgICAgICBzcV9yZXZkZXBzW3RpZF0gPSBjb3B5LmNvcHkoc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbdGlkXS5yZXZkZXBzKQorICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXdbdGlkXSA9IHNldCgpCisgICAgICAgICAgICBpZiAobGVuKHNxX3JldmRlcHNbdGlkXSkgPT0gMCkgYW5kIHRpZCBub3QgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZV90aWRzOgorICAgICAgICAgICAgICAgICNiYi53YXJuKCJBZGRlZCBlbmRwb2ludCAlcyIgJSAodGlkKSkKKyAgICAgICAgICAgICAgICBlbmRwb2ludHNbdGlkXSA9IHNldCgpCisKKyAgICAgICAgc2VsZi5ycWRhdGEuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKIAogICAgICAgICAjIFNlY29uZGx5IHByb2Nlc3MgdGhlIGNoYWlucyBiZXR3ZWVuIHNldHNjZW5lIHRhc2tzLgotICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgotICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza106CisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZV90aWRzOgorICAgICAgICAgICAgI2JiLndhcm4oIkFkZGVkIGVuZHBvaW50IDIgJXMiICUgKHRpZCkpCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3RpZF0uZGVwZW5kczoKICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBlbmRwb2ludHM6CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludHNbZGVwXSA9IHNldCgpCi0gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50c1tkZXBdLmFkZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICAjYmIud2FybigiICBBZGRlZCBlbmRwb2ludCAzICVzIiAlIChkZXApKQorICAgICAgICAgICAgICAgICAgICBlbmRwb2ludHNbZGVwXS5hZGQodGlkKQorCisgICAgICAgIHNlbGYucnFkYXRhLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCiAKICAgICAgICAgZGVmIHByb2Nlc3NfZW5kcG9pbnRzKGVuZHBvaW50cyk6CiAgICAgICAgICAgICBuZXdlbmRwb2ludHMgPSB7fQpAQCAtMTc4OSwyNiArMTkwNywyOCBAQAogICAgICAgICAgICAgICAgIGlmIHNxX3JldmRlcHNfbmV3W3BvaW50XToKICAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gc3FfcmV2ZGVwc19uZXdbcG9pbnRdCiAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXdbcG9pbnRdID0gc2V0KCkKLSAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVfdGlkczoKICAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXdbcG9pbnRdID0gdGFza3MKICAgICAgICAgICAgICAgICAgICAgdGFza3MgPSBzZXQoKQotICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3BvaW50XToKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzW3BvaW50XS5kZXBlbmRzOgogICAgICAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzcV9yZXZkZXBzW2RlcF06CiAgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzW2RlcF0ucmVtb3ZlKHBvaW50KQogICAgICAgICAgICAgICAgICAgICBpZiB0YXNrczoKICAgICAgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3W2RlcF0gfD0gdGFza3MKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihzcV9yZXZkZXBzW2RlcF0pID09IDAgb3IgbGVuKHNxX3JldmRlcHNfbmV3W2RlcF0pICE9IDApIGFuZCBkZXAgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oc3FfcmV2ZGVwc1tkZXBdKSA9PSAwIG9yIGxlbihzcV9yZXZkZXBzX25ld1tkZXBdKSAhPSAwKSBhbmQgZGVwIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHM6CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdlbmRwb2ludHNbZGVwXSA9IHRhc2sKICAgICAgICAgICAgIGlmIGxlbihuZXdlbmRwb2ludHMpICE9IDA6CiAgICAgICAgICAgICAgICAgcHJvY2Vzc19lbmRwb2ludHMobmV3ZW5kcG9pbnRzKQogCiAgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzKGVuZHBvaW50cykKIAorICAgICAgICBzZWxmLnJxZGF0YS5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgICMgQnVpbGQgYSBsaXN0IG9mIHNldHNjZW5lIHRhc2tzIHdoaWNoIGFyZSAidW5za2lwcGFibGUiCiAgICAgICAgICMgVGhlc2UgYXJlIGRpcmVjdCBlbmRwb2ludHMgcmVmZXJlbmNlZCBieSB0aGUgYnVpbGQKICAgICAgICAgZW5kcG9pbnRzMiA9IHt9Ci0gICAgICAgIHNxX3JldmRlcHMyID0gW10KLSAgICAgICAgc3FfcmV2ZGVwc19uZXcyID0gW10KKyAgICAgICAgc3FfcmV2ZGVwczIgPSB7fQorICAgICAgICBzcV9yZXZkZXBzX25ldzIgPSB7fQogICAgICAgICBkZWYgcHJvY2Vzc19lbmRwb2ludHMyKGVuZHBvaW50cyk6CiAgICAgICAgICAgICBuZXdlbmRwb2ludHMgPSB7fQogICAgICAgICAgICAgZm9yIHBvaW50LCB0YXNrIGluIGVuZHBvaW50cy5pdGVtcygpOgpAQCAtMTgxOCw4NCArMTkzOCw5OSBAQAogICAgICAgICAgICAgICAgIGlmIHNxX3JldmRlcHNfbmV3Mltwb2ludF06CiAgICAgICAgICAgICAgICAgICAgIHRhc2tzIHw9IHNxX3JldmRlcHNfbmV3Mltwb2ludF0KICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbcG9pbnRdID0gc2V0KCkKLSAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVfdGlkczoKICAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXcyW3BvaW50XSA9IHRhc2tzCi0gICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbcG9pbnRdOgorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbcG9pbnRdLmRlcGVuZHM6CiAgICAgICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNxX3JldmRlcHMyW2RlcF06CiAgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzMltkZXBdLnJlbW92ZShwb2ludCkKICAgICAgICAgICAgICAgICAgICAgaWYgdGFza3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbZGVwXSB8PSB0YXNrcwotICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHNxX3JldmRlcHMyW2RlcF0pID09IDAgb3IgbGVuKHNxX3JldmRlcHNfbmV3MltkZXBdKSAhPSAwKSBhbmQgZGVwIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHNxX3JldmRlcHMyW2RlcF0pID09IDAgb3IgbGVuKHNxX3JldmRlcHNfbmV3MltkZXBdKSAhPSAwKSBhbmQgZGVwIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHM6CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdlbmRwb2ludHNbZGVwXSA9IHRhc2tzCiAgICAgICAgICAgICBpZiBsZW4obmV3ZW5kcG9pbnRzKSAhPSAwOgogICAgICAgICAgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzMihuZXdlbmRwb2ludHMpCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6Ci0gICAgICAgICAgICBzcV9yZXZkZXBzMi5hcHBlbmQoY29weS5jb3B5KHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkpCi0gICAgICAgICAgICBzcV9yZXZkZXBzX25ldzIuYXBwZW5kKHNldCgpKQotICAgICAgICAgICAgaWYgKGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID09IDApIGFuZCB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgotICAgICAgICAgICAgICAgIGVuZHBvaW50czJbdGFza10gPSBzZXQoKQorICAgICAgICBmb3IgdGlkIGluIHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgc3FfcmV2ZGVwczJbdGlkXSA9IGNvcHkuY29weShzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllc1t0aWRdLnJldmRlcHMpCisgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbdGlkXSA9IHNldCgpCisgICAgICAgICAgICBpZiAobGVuKHNxX3JldmRlcHMyW3RpZF0pID09IDApIGFuZCB0aWQgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVfdGlkczoKKyAgICAgICAgICAgICAgICBlbmRwb2ludHMyW3RpZF0gPSBzZXQoKQogICAgICAgICBwcm9jZXNzX2VuZHBvaW50czIoZW5kcG9pbnRzMikKICAgICAgICAgc2VsZi51bnNraXBwYWJsZSA9IFtdCi0gICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6Ci0gICAgICAgICAgICBpZiBzcV9yZXZkZXBzX25ldzJbdGFza106Ci0gICAgICAgICAgICAgICAgc2VsZi51bnNraXBwYWJsZS5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNrKSkKKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHM6CisgICAgICAgICAgICBpZiBzcV9yZXZkZXBzX25ldzJbdGlkXToKKyAgICAgICAgICAgICAgICBzZWxmLnVuc2tpcHBhYmxlLmFwcGVuZCh0aWQpCiAKLSAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKLSAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgc2VsZi5ycWRhdGEuaW5pdF9wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKGxlbihzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllcykpCisKKyAgICAgICAgZm9yIHRhc2tjb3VudGVyLCB0aWQgaW4gZW51bWVyYXRlKHNlbGYucnFkYXRhLnJ1bnRhc2tlbnRyaWVzKToKKyAgICAgICAgICAgIGlmIHRpZCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHM6CiAgICAgICAgICAgICAgICAgZGVwcyA9IHNldCgpCi0gICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzcV9yZXZkZXBzX25ld1t0YXNrXToKLSAgICAgICAgICAgICAgICAgICAgZGVwcy5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleChkZXApKQotICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfc3F1YXNoLmFwcGVuZChkZXBzKQotICAgICAgICAgICAgZWxpZiBsZW4oc3FfcmV2ZGVwc19uZXdbdGFza10pICE9IDA6CisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzcV9yZXZkZXBzX25ld1t0aWRdOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFkZChkZXApCisgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2hbdGlkXSA9IGRlcHMKKyAgICAgICAgICAgIGVsaWYgbGVuKHNxX3JldmRlcHNfbmV3W3RpZF0pICE9IDA6CiAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJTb21ldGhpbmcgd2VudCBiYWRseSB3cm9uZyBkdXJpbmcgc2NlbmVxdWV1ZSBnZW5lcmF0aW9uLCBhYm9ydGluZy4gUGxlYXNlIHJlcG9ydCB0aGlzIHByb2JsZW0uIikKKyAgICAgICAgICAgIHNlbGYucnFkYXRhLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIudXBkYXRlKHRhc2tjb3VudGVyKQorCisgICAgICAgIHNlbGYucnFkYXRhLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCiAKICAgICAgICAgIyBSZXNvbHZlIHNldHNjZW5lIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCiAgICAgICAgICMgZS5nLiBkb19zb21ldGFza19zZXRzY2VuZVtkZXBlbmRzXSA9ICJ0YXJnZXRuYW1lOmRvX3NvbWVvdGhlcnRhc2tfc2V0c2NlbmUiCiAgICAgICAgICMgTm90ZSB0aGF0IGFueXRoaW5nIGV4cGxpY2l0bHkgZGVwZW5kZWQgdXBvbiB3aWxsIGhhdmUgaXRzIHJldmVyc2UgZGVwZW5kZW5jaWVzIHJlbW92ZWQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzCi0gICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6Ci0gICAgICAgICAgICAgICAgcmVhbGlkID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZ2V0dGFza19pZChzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dLCBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10gKyAiX3NldHNjZW5lIiwgRmFsc2UpCi0gICAgICAgICAgICAgICAgaWRlcGVuZHMgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS50YXNrc19pZGVwZW5kc1tyZWFsaWRdCi0gICAgICAgICAgICAgICAgZm9yIChkZXBpZCwgaWRlcGVuZHRhc2spIGluIGlkZXBlbmRzOgotICAgICAgICAgICAgICAgICAgICBpZiBkZXBpZCBub3QgaW4gc2VsZi5ycWRhdGEudGFza0RhdGEuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHM6CisgICAgICAgICAgICAgICAgKG1jLCBmbiwgdGFza25hbWUsIF8pID0gc3BsaXRfdGlkX21jZm4odGlkKQorICAgICAgICAgICAgICAgIHJlYWx0aWQgPSBmbiArICI6IiArIHRhc2tuYW1lICsgIl9zZXRzY2VuZSIKKyAgICAgICAgICAgICAgICBpZGVwZW5kcyA9IHNlbGYucnFkYXRhLnRhc2tEYXRhW21jXS50YXNrZW50cmllc1tyZWFsdGlkXS5pZGVwZW5kcworICAgICAgICAgICAgICAgIGZvciAoZGVwbmFtZSwgaWRlcGVuZHRhc2spIGluIGlkZXBlbmRzOgorCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcG5hbWUgbm90IGluIHNlbGYucnFkYXRhLnRhc2tEYXRhW21jXS5idWlsZF90YXJnZXRzOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgICAgICAgICBkZXBkYXRhID0gc2VsZi5ycWRhdGEudGFza0RhdGEuYnVpbGRfdGFyZ2V0c1tkZXBpZF1bMF0KLSAgICAgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBkZXBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhW21jXS5idWlsZF90YXJnZXRzW2RlcG5hbWVdWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcGZuIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgZGVwID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbZGVwZGF0YV0KLSAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gc2VsZi5ycWRhdGEuZ2V0X3Rhc2tfaWQoc2VsZi5ycWRhdGEudGFza0RhdGEuZ2V0Zm5faWQoZGVwKSwgaWRlcGVuZHRhc2sucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpKQotICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlc19zZXRzY2VuZSBkZXBlbmRzIHVwb24gbm9uLWV4aXN0ZW50IHRhc2sgJXM6JXMiICUgKHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spLCBkZXAsIGlkZXBlbmR0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgZGVwdGlkID0gZGVwZm4gKyAiOiIgKyBpZGVwZW5kdGFzay5yZXBsYWNlKCJfc2V0c2NlbmUiLCAiIikKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwdGlkIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW50YXNrZW50cmllczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlcyBkZXBlbmRzIHVwb24gbm9uLWV4aXN0ZW50IHRhc2sgJXM6JXMiICUgKHJlYWx0aWQsIGRlcGZuLCBpZGVwZW5kdGFzaykpCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKSBpbiBzZWxmLnNxX2hhcmRkZXBzOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcV9oYXJkZGVwc1tzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2tpZCldID0gc2V0KCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zcV9oYXJkZGVwc1tzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2tpZCldLmFkZChzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2spKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGVwdGlkIGluIHNlbGYuc3FfaGFyZGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNxX2hhcmRkZXBzW2RlcHRpZF0gPSBzZXQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNxX2hhcmRkZXBzW2RlcHRpZF0uYWRkKHRpZCkKIAotICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFtzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2spXS5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpKQorICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFt0aWRdLmFkZChkZXB0aWQpCiAgICAgICAgICAgICAgICAgICAgICMgSGF2ZSB0byB6ZXJvIHRoaXMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfc3F1YXNoW3NlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKV0gPSBzZXQoKQorICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFtkZXB0aWRdID0gc2V0KCkKKworICAgICAgICBzZWxmLnJxZGF0YS5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQogCiAgICAgICAgIGZvciB0YXNrIGluIHNlbGYuc3FfaGFyZGRlcHM6CiAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnNxX2hhcmRkZXBzW3Rhc2tdOgogICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFtkZXBdLmFkZCh0YXNrKQogCi0gICAgICAgICNmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNxX3JldmRlcHNfc3F1YXNoKSk6Ci0gICAgICAgICMgICAgcmVhbHRhc2sgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCi0gICAgICAgICMgICAgYmIud2FybigiVGFzayAlczogJXNfc2V0c2NlbmUgaXMgJXMgIiAlICh0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykgLCBzcV9yZXZkZXBzX3NxdWFzaFt0YXNrXSkpCisgICAgICAgIHNlbGYucnFkYXRhLmluaXRfcHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCiAKLSAgICAgICAgc2VsZi5zcV9kZXBzID0gW10KKyAgICAgICAgI2ZvciB0aWQgaW4gc3FfcmV2ZGVwc19zcXVhc2g6CisgICAgICAgICMgICAgZm9yIGRlcCBpbiBzcV9yZXZkZXBzX3NxdWFzaFt0aWRdOgorICAgICAgICAjICAgICAgICBkYXRhID0gZGF0YSArICJcbiAgICVzIiAlIGRlcAorICAgICAgICAjICAgIGJiLndhcm4oIlRhc2sgJXNfc2V0c2NlbmU6IGlzICVzICIgJSAodGlkLCBkYXRhCisKKyAgICAgICAgc2VsZi5zcV9kZXBzID0ge30KICAgICAgICAgc2VsZi5zcV9yZXZkZXBzID0gc3FfcmV2ZGVwc19zcXVhc2gKICAgICAgICAgc2VsZi5zcV9yZXZkZXBzMiA9IGNvcHkuZGVlcGNvcHkoc2VsZi5zcV9yZXZkZXBzKQogCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6Ci0gICAgICAgICAgICBzZWxmLnNxX2RlcHMuYXBwZW5kKHNldCgpKQotICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgotICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnNxX3JldmRlcHNbdGFza106Ci0gICAgICAgICAgICAgICAgc2VsZi5zcV9kZXBzW2RlcF0uYWRkKHRhc2spCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5zcV9yZXZkZXBzOgorICAgICAgICAgICAgc2VsZi5zcV9kZXBzW3RpZF0gPSBzZXQoKQorICAgICAgICBmb3IgdGlkIGluIHNlbGYuc3FfcmV2ZGVwczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9yZXZkZXBzW3RpZF06CisgICAgICAgICAgICAgICAgc2VsZi5zcV9kZXBzW2RlcF0uYWRkKHRpZCkKIAotICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgotICAgICAgICAgICAgaWYgbGVuKHNlbGYuc3FfcmV2ZGVwc1t0YXNrXSkgPT0gMDoKLSAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnJxZGF0YS5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5zcV9yZXZkZXBzOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYuc3FfcmV2ZGVwc1t0aWRdKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYWRkKHRpZCkKKworICAgICAgICBzZWxmLnJxZGF0YS5pbml0X3Byb2dyZXNzX3JlcG9ydGVyLmZpbmlzaCgpCiAKICAgICAgICAgc2VsZi5vdXRyaWdodGZhaWwgPSBbXQogICAgICAgICBpZiBzZWxmLnJxLmhhc2h2YWxpZGF0ZToKQEAgLTE5MDYsMzUgKzIwNDEsMzQgQEAKICAgICAgICAgICAgIHNxX3Rhc2sgPSBbXQogICAgICAgICAgICAgbm9leGVjID0gW10KICAgICAgICAgICAgIHN0YW1wcHJlc2VudCA9IFtdCi0gICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgotICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQotICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JlYWx0YXNrXV0KLSAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza10KLSAgICAgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGZvciB0aWQgaW4gc2VsZi5zcV9yZXZkZXBzOgorICAgICAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lLCB0YXNrZm4pID0gc3BsaXRfdGlkX21jZm4odGlkKQorCisgICAgICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnRhc2tfZGVwc1tmbl0KIAogICAgICAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgotICAgICAgICAgICAgICAgICAgICBub2V4ZWMuYXBwZW5kKHRhc2spCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCi0gICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLm1ha2Vfc3RhbXAodGFza25hbWUgKyAiX3NldHNjZW5lIiwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKyAgICAgICAgICAgICAgICAgICAgbm9leGVjLmFwcGVuZCh0aWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRpZCkKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQubWFrZV9zdGFtcCh0YXNrbmFtZSArICJfc2V0c2NlbmUiLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGVzW21jXSwgdGFza2ZuKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCB0YXNrbmFtZSArICJfc2V0c2NlbmUiLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1NldHNjZW5lIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQotICAgICAgICAgICAgICAgICAgICBzdGFtcHByZXNlbnQuYXBwZW5kKHRhc2spCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCisgICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRpZCwgdGFza25hbWUgKyAiX3NldHNjZW5lIiwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTZXRzY2VuZSBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzJywgdGlkKQorICAgICAgICAgICAgICAgICAgICBzdGFtcHByZXNlbnQuYXBwZW5kKHRpZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGlkKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCB0YXNrbmFtZSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnTm9ybWFsIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQotICAgICAgICAgICAgICAgICAgICBzdGFtcHByZXNlbnQuYXBwZW5kKHRhc2spCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCisgICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRpZCwgdGFza25hbWUsIHJlY3Vyc2UgPSBUcnVlLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ05vcm1hbCBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzJywgdGlkKQorICAgICAgICAgICAgICAgICAgICBzdGFtcHByZXNlbnQuYXBwZW5kKHRpZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGlkKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgc3FfZm4uYXBwZW5kKGZuKQotICAgICAgICAgICAgICAgIHNxX2hhc2hmbi5hcHBlbmQoc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmhhc2hmbltmbl0pCi0gICAgICAgICAgICAgICAgc3FfaGFzaC5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9oYXNoW3JlYWx0YXNrXSkKKyAgICAgICAgICAgICAgICBzcV9oYXNoZm4uYXBwZW5kKHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLmhhc2hmbltmbl0pCisgICAgICAgICAgICAgICAgc3FfaGFzaC5hcHBlbmQoc2VsZi5ycWRhdGEucnVudGFza2VudHJpZXNbdGlkXS5oYXNoKQogICAgICAgICAgICAgICAgIHNxX3Rhc2tuYW1lLmFwcGVuZCh0YXNrbmFtZSkKLSAgICAgICAgICAgICAgICBzcV90YXNrLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIHNxX3Rhc2suYXBwZW5kKHRpZCkKICAgICAgICAgICAgIGNhbGwgPSBzZWxmLnJxLmhhc2h2YWxpZGF0ZSArICIoc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCkiCiAgICAgICAgICAgICBsb2NzID0geyAic3FfZm4iIDogc3FfZm4sICJzcV90YXNrIiA6IHNxX3Rhc2tuYW1lLCAic3FfaGFzaCIgOiBzcV9oYXNoLCAic3FfaGFzaGZuIiA6IHNxX2hhc2hmbiwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CiAgICAgICAgICAgICB2YWxpZCA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwsIGxvY3MpCkBAIC0xOTQzLDEyICsyMDc3LDEwIEBACiAgICAgICAgICAgICBmb3IgdiBpbiB2YWxpZDoKICAgICAgICAgICAgICAgICB2YWxpZF9uZXcuYXBwZW5kKHNxX3Rhc2tbdl0pCiAKLSAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6Ci0gICAgICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gdmFsaWRfbmV3IGFuZCB0YXNrIG5vdCBpbiBub2V4ZWM6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ05vIHBhY2thZ2UgZm91bmQsIHNvIHNraXBwaW5nIHNldHNjZW5lIHRhc2sgJXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQotICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHJpZ2h0ZmFpbC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGZvciB0aWQgaW4gc2VsZi5zcV9yZXZkZXBzOgorICAgICAgICAgICAgICAgIGlmIHRpZCBub3QgaW4gdmFsaWRfbmV3IGFuZCB0aWQgbm90IGluIG5vZXhlYzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdObyBwYWNrYWdlIGZvdW5kLCBzbyBza2lwcGluZyBzZXRzY2VuZSB0YXNrICVzJywgdGlkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHJpZ2h0ZmFpbC5hcHBlbmQodGlkKQogCiAgICAgICAgIGxvZ2dlci5pbmZvKCdFeGVjdXRpbmcgU2V0U2NlbmUgVGFza3MnKQogCkBAIC0xOTU3LDkgKzIwODksNyBAQAogICAgIGRlZiBzY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKHNlbGYsIHRhc2ssIGZhaWwgPSBGYWxzZSk6CiAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9kZXBzW3Rhc2tdOgogICAgICAgICAgICAgaWYgZmFpbCBhbmQgdGFzayBpbiBzZWxmLnNxX2hhcmRkZXBzIGFuZCBkZXAgaW4gc2VsZi5zcV9oYXJkZGVwc1t0YXNrXToKLSAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KLSAgICAgICAgICAgICAgICByZWFsZGVwID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVtkZXBdCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcyB3YXMgdW5hdmFpbGFibGUgYW5kIGlzIGEgaGFyZCBkZXBlbmRlbmN5IG9mICVzIHNvIHNraXBwaW5nIiAlIChzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzayksIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWxkZXApKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIiVzIHdhcyB1bmF2YWlsYWJsZSBhbmQgaXMgYSBoYXJkIGRlcGVuZGVuY3kgb2YgJXMgc28gc2tpcHBpbmciICUgKHRhc2ssIGRlcCkpCiAgICAgICAgICAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKGRlcCwgZmFpbCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gc2VsZi5zcV9yZXZkZXBzMltkZXBdOgpAQCAtMTk2Nyw3ICsyMDk3LDcgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgc2VsZi5zcV9yZXZkZXBzMltkZXBdLnJlbW92ZSh0YXNrKQogICAgICAgICAgICAgaWYgbGVuKHNlbGYuc3FfcmV2ZGVwczJbZGVwXSkgPT0gMDoKLSAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW2RlcF0gPSAxCisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hZGQoZGVwKQogCiAgICAgZGVmIHRhc2tfY29tcGxldGVvdXRyaWdodChzZWxmLCB0YXNrKToKICAgICAgICAgIiIiCkBAIC0xOTc2LDEzICsyMTA2LDE5IEBACiAgICAgICAgIGNvbXBsZXRlZCBkZXBlbmRlbmNpZXMgYXMgYnVpbGRhYmxlCiAgICAgICAgICIiIgogCi0gICAgICAgIGluZGV4ID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQotICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0ZvdW5kIHRhc2sgJXMgd2hpY2ggY291bGQgYmUgYWNjZWxlcmF0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoaW5kZXgpKQotCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnRm91bmQgdGFzayAlcyB3aGljaCBjb3VsZCBiZSBhY2NlbGVyYXRlZCcsIHRhc2spCiAgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZCh0YXNrKQogICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnModGFzaykKIAorICAgIGRlZiBjaGVja190YXNrZmFpbChzZWxmLCB0YXNrKToKKyAgICAgICAgaWYgc2VsZi5ycWRhdGEuc2V0c2NlbmV3aGl0ZWxpc3Q6CisgICAgICAgICAgICByZWFsdGFzayA9IHRhc2suc3BsaXQoJ19zZXRzY2VuZScpWzBdCisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSwgXykgPSBzcGxpdF90aWRfbWNmbihyZWFsdGFzaykKKyAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10ucGtnX2ZuW2ZuXQorICAgICAgICAgICAgaWYgbm90IGNoZWNrX3NldHNjZW5lX2VuZm9yY2Vfd2hpdGVsaXN0KHBuLCB0YXNrbmFtZSwgc2VsZi5ycWRhdGEuc2V0c2NlbmV3aGl0ZWxpc3QpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVGFzayAlcy4lcyBmYWlsZWQnICUgKHBuLCB0YXNrbmFtZSArICJfc2V0c2NlbmUiKSkKKyAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDbGVhblVwCisKICAgICBkZWYgdGFza19jb21wbGV0ZShzZWxmLCB0YXNrKToKICAgICAgICAgc2VsZi5zdGF0cy50YXNrQ29tcGxldGVkKCkKICAgICAgICAgYmIuZXZlbnQuZmlyZShzY2VuZVF1ZXVlVGFza0NvbXBsZXRlZCh0YXNrLCBzZWxmLnN0YXRzLCBzZWxmLnJxKSwgc2VsZi5jZmdEYXRhKQpAQCAtMTk5MywxOSArMjEyOSwxOSBAQAogICAgICAgICBiYi5ldmVudC5maXJlKHNjZW5lUXVldWVUYXNrRmFpbGVkKHRhc2ssIHNlbGYuc3RhdHMsIHJlc3VsdCwgc2VsZiksIHNlbGYuY2ZnRGF0YSkKICAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdGNvdmVyZWQuYWRkKHRhc2spCiAgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV91cGRhdGVjb3VudGVycyh0YXNrLCBUcnVlKQorICAgICAgICBzZWxmLmNoZWNrX3Rhc2tmYWlsKHRhc2spCiAKICAgICBkZWYgdGFza19mYWlsb3V0cmlnaHQoc2VsZiwgdGFzayk6Ci0gICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQotICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hZGQodGFzaykKKyAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hZGQodGFzaykKICAgICAgICAgc2VsZi5zdGF0cy50YXNrQ29tcGxldGVkKCkKICAgICAgICAgc2VsZi5zdGF0cy50YXNrU2tpcHBlZCgpCi0gICAgICAgIGluZGV4ID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQogICAgICAgICBzZWxmLnNjZW5lcXVldWVfbm90Y292ZXJlZC5hZGQodGFzaykKICAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKHRhc2ssIFRydWUpCiAKICAgICBkZWYgdGFza19za2lwKHNlbGYsIHRhc2spOgotICAgICAgICBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9IDEKLSAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZVt0YXNrXSA9IDEKKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmcuYWRkKHRhc2spCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYWRkKHRhc2spCiAgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCiAgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCiAgICAgICAgIHNlbGYuc3RhdHMudGFza1NraXBwZWQoKQpAQCAtMjAyMCwyMCArMjE1NiwxOCBAQAogICAgICAgICB0YXNrID0gTm9uZQogICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA8IHNlbGYubnVtYmVyX3Rhc2tzOgogICAgICAgICAgICAgIyBGaW5kIHRoZSBuZXh0IHNldHNjZW5lIHRvIHJ1bgotICAgICAgICAgICAgZm9yIG5leHR0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfYnVpbGRhYmxlW25leHR0YXNrXSA9PSAxIGFuZCBzZWxmLnJ1bnFfcnVubmluZ1tuZXh0dGFza10gIT0gMToKKyAgICAgICAgICAgIGZvciBuZXh0dGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lX3RpZHM6CisgICAgICAgICAgICAgICAgaWYgbmV4dHRhc2sgaW4gc2VsZi5ydW5xX2J1aWxkYWJsZSBhbmQgbmV4dHRhc2sgbm90IGluIHNlbGYucnVucV9ydW5uaW5nOgogICAgICAgICAgICAgICAgICAgICBpZiBuZXh0dGFzayBpbiBzZWxmLnVuc2tpcHBhYmxlOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZXRzY2VuZSB0YXNrICVzIGlzIHVuc2tpcHBhYmxlIiAlIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdKSkgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNldHNjZW5lIHRhc2sgJXMgaXMgdW5za2lwcGFibGUiICUgbmV4dHRhc2spCiAgICAgICAgICAgICAgICAgICAgIGlmIG5leHR0YXNrIG5vdCBpbiBzZWxmLnVuc2tpcHBhYmxlIGFuZCBsZW4oc2VsZi5zcV9yZXZkZXBzW25leHR0YXNrXSkgPiAwIGFuZCBzZWxmLnNxX3JldmRlcHNbbmV4dHRhc2tdLmlzc3Vic2V0KHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkKSBhbmQgc2VsZi5jaGVja19kZXBlbmRlbmNpZXMobmV4dHRhc2ssIHNlbGYuc3FfcmV2ZGVwc1tuZXh0dGFza10sIFRydWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVhbHRhc2sgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW25leHR0YXNrXQotICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmVhbHRhc2tdXQorICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBmbl9mcm9tX3RpZChuZXh0dGFzaykKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kdGFyZ2V0ID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ycWRhdGEudGFyZ2V0X3BhaXJzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldFswXSA9PSBmbiBhbmQgdGFyZ2V0WzFdID09IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza106Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kdGFyZ2V0ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuZXh0dGFzayBpbiBzZWxmLnJxZGF0YS50YXJnZXRfdGlkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZHRhcmdldCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmb3VuZHRhcmdldDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNraXBwaW5nIHNldHNjZW5lIGZvciB0YXNrICVzIiAlIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNraXBwaW5nIHNldHNjZW5lIGZvciB0YXNrICVzIiAlIG5leHR0YXNrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKG5leHR0YXNrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3RuZWVkZWQuYWRkKG5leHR0YXNrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC0yMDQzLDQyICsyMTc3LDM3IEBACiAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBuZXh0dGFzawogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBpZiB0YXNrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmVhbHRhc2sgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCi0gICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtyZWFsdGFza11dCi0KLSAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3JlYWx0YXNrXSArICJfc2V0c2NlbmUiCi0gICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2socmVhbHRhc2ssIHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza10sIHJlY3Vyc2UgPSBUcnVlLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgotICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU3RhbXAgZm9yIHVuZGVybHlpbmcgdGFzayAlcyglcykgaXMgY3VycmVudCwgc28gc2tpcHBpbmcgc2V0c2NlbmUgdmFyaWFudCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lLCB0YXNrZm4pID0gc3BsaXRfdGlkX21jZm4odGFzaykKKyAgICAgICAgICAgIHRhc2tuYW1lID0gdGFza25hbWUgKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lX2Zyb21fdGlkKHRhc2spLCByZWN1cnNlID0gVHJ1ZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wIGZvciB1bmRlcmx5aW5nIHRhc2sgJXMgaXMgY3VycmVudCwgc28gc2tpcHBpbmcgc2V0c2NlbmUgdmFyaWFudCcsIHRhc2spCiAgICAgICAgICAgICAgICAgc2VsZi50YXNrX2ZhaWxvdXRyaWdodCh0YXNrKQogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2U6Ci0gICAgICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJxZGF0YS50YXJnZXRfcGFpcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldFswXSA9PSBmbiBhbmQgdGFyZ2V0WzFdID09IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza106Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfZmFpbG91dHJpZ2h0KHRhc2spCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ycWRhdGEudGFyZ2V0X3RpZHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19mYWlsb3V0cmlnaHQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCB0YXNrbmFtZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKLSAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1NldHNjZW5lIHN0YW1wIGN1cnJlbnQgdGFzayAlcyglcyksIHNvIHNraXAgaXQgYW5kIGl0cyBkZXBlbmRlbmNpZXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykpCisgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2sodGFzaywgdGFza25hbWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTZXRzY2VuZSBzdGFtcCBjdXJyZW50IHRhc2sgJXMsIHNvIHNraXAgaXQgYW5kIGl0cyBkZXBlbmRlbmNpZXMnLCB0YXNrKQogICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICAgICAgc3RhcnRldmVudCA9IHNjZW5lUXVldWVUYXNrU3RhcnRlZCh0YXNrLCBzZWxmLnN0YXRzLCBzZWxmLnJxKQogICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShzdGFydGV2ZW50LCBzZWxmLmNmZ0RhdGEpCiAKLSAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQotICAgICAgICAgICAgaWYgJ2Zha2Vyb290JyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydmYWtlcm9vdCddOgorICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnRhc2tfZGVwc1t0YXNrZm5dCisgICAgICAgICAgICBpZiAnZmFrZXJvb3QnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ2Zha2Vyb290J10gYW5kIG5vdCBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmRyeV9ydW46CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucnEuZmFrZXdvcmtlcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zdGFydF9mYWtld29ya2VyKHNlbGYpCi0gICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLndyaXRlKCI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKChmbiwgcmVhbHRhc2ssIHRhc2tuYW1lLCBUcnVlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBOb25lKSkgKyAiPC9ydW50YXNrPiIpCi0gICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4ud3JpdGUoYiI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKCh0YXNrZm4sIHRhc2ssIHRhc2tuYW1lLCBUcnVlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHModGFza2ZuKSwgTm9uZSkpICsgYiI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4uZmx1c2goKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHJlYWx0YXNrLCB0YXNrbmFtZSwgVHJ1ZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgTm9uZSkpICsgIjwvcnVudGFzaz4iKQotICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlclttY10ucHJvY2Vzcy5zdGRpbi53cml0ZShiIjxydW50YXNrPiIgKyBwaWNrbGUuZHVtcHMoKHRhc2tmbiwgdGFzaywgdGFza25hbWUsIFRydWUsIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyh0YXNrZm4pLCBOb25lKSkgKyBiIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyW21jXS5wcm9jZXNzLnN0ZGluLmZsdXNoKCkKIAotICAgICAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hZGQodGFzaykKICAgICAgICAgICAgIHNlbGYuc3RhdHMudGFza0FjdGl2ZSgpCiAgICAgICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA8IHNlbGYubnVtYmVyX3Rhc2tzOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC0yMDg3LDE3ICsyMjE2LDE0IEBACiAgICAgICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5ycS5hY3RpdmVfZmRzKCkKIAotICAgICAgICAjZm9yIHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgotICAgICAgICAjICAgIGlmIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdICE9IDE6Ci0gICAgICAgICMgICAgICAgIGJ1aWxkYWJsZSA9IHNlbGYucnVucV9idWlsZGFibGVbdGFza10KLSAgICAgICAgIyAgICAgICAgcmV2ZGVwcyA9IHNlbGYuc3FfcmV2ZGVwc1t0YXNrXQotICAgICAgICAjICAgICAgICBiYi53YXJuKCJGb3VuZCB3ZSBkaWRuJ3QgcnVuICVzICVzICVzICVzIiAlICh0YXNrLCBidWlsZGFibGUsIHN0cihyZXZkZXBzKSwgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXSkpKQorICAgICAgICAjZm9yIHRpZCBpbiBzZWxmLnNxX3JldmRlcHM6CisgICAgICAgICMgICAgaWYgdGlkIG5vdCBpbiBzZWxmLnJ1bnFfcnVubmluZzoKKyAgICAgICAgIyAgICAgICAgYnVpbGRhYmxlID0gdGlkIGluIHNlbGYucnVucV9idWlsZGFibGUKKyAgICAgICAgIyAgICAgICAgcmV2ZGVwcyA9IHNlbGYuc3FfcmV2ZGVwc1t0aWRdCisgICAgICAgICMgICAgICAgIGJiLndhcm4oIkZvdW5kIHdlIGRpZG4ndCBydW4gJXMgJXMgJXMiICUgKHRpZCwgYnVpbGRhYmxlLCBzdHIocmV2ZGVwcykpKQogCi0gICAgICAgICMgQ29udmVydCBzY2VuZXF1ZXVlX2NvdmVyZWQgdGFzayBudW1iZXJzIGludG8gZnVsbCB0YXNrZ3JhcGggaWRzCi0gICAgICAgIG9sZGNvdmVyZWQgPSBzZWxmLnNjZW5lcXVldWVfY292ZXJlZAotICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCA9IHNldCgpCi0gICAgICAgIGZvciB0YXNrIGluIG9sZGNvdmVyZWQ6Ci0gICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXSkKKyAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQgPSBzZWxmLnNjZW5lcXVldWVfY292ZXJlZAorICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfbm90Y292ZXJlZCA9IHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkCiAKICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdXZSBjYW4gc2tpcCB0YXNrcyAlcycsIHNvcnRlZChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkpCiAKQEAgLTIxMDksOCArMjIzNSw2IEBACiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgcnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHNlbGYsIHRhc2ssIHN0YXR1cyk6Ci0gICAgICAgIHRhc2sgPSBzZWxmLnJxLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2spCi0KICAgICAgICAgUnVuUXVldWVFeGVjdXRlLnJ1bnF1ZXVlX3Byb2Nlc3Nfd2FpdHBpZChzZWxmLCB0YXNrLCBzdGF0dXMpCiAKIGNsYXNzIFRhc2tGYWlsdXJlKEV4Y2VwdGlvbik6CkBAIC0yMTM3LDkgKzIyNjEsOSBAQAogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpOgogICAgICAgICBzZWxmLnRhc2tpZCA9IHRhc2sKLSAgICAgICAgc2VsZi50YXNrc3RyaW5nID0gcnEucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spCi0gICAgICAgIHNlbGYudGFza25hbWUgPSBycS5ycWRhdGEuZ2V0X3Rhc2tfbmFtZSh0YXNrKQotICAgICAgICBzZWxmLnRhc2tmaWxlID0gcnEucnFkYXRhLmdldF90YXNrX2ZpbGUodGFzaykKKyAgICAgICAgc2VsZi50YXNrc3RyaW5nID0gdGFzaworICAgICAgICBzZWxmLnRhc2tuYW1lID0gdGFza25hbWVfZnJvbV90aWQodGFzaykKKyAgICAgICAgc2VsZi50YXNrZmlsZSA9IGZuX2Zyb21fdGlkKHRhc2spCiAgICAgICAgIHNlbGYudGFza2hhc2ggPSBycS5ycWRhdGEuZ2V0X3Rhc2tfaGFzaCh0YXNrKQogICAgICAgICBzZWxmLnN0YXRzID0gc3RhdHMuY29weSgpCiAgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCkBAIC0yMTUwLDExICsyMjc0LDEwIEBACiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSwgbm9leGVjPUZhbHNlKToKICAgICAgICAgcnVuUXVldWVFdmVudC5fX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpCi0gICAgICAgIHJlYWx0YXNrID0gcnEucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KLSAgICAgICAgc2VsZi50YXNrc3RyaW5nID0gcnEucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrLCAiX3NldHNjZW5lIikKLSAgICAgICAgc2VsZi50YXNrbmFtZSA9IHJxLnJxZGF0YS5nZXRfdGFza19uYW1lKHJlYWx0YXNrKSArICJfc2V0c2NlbmUiCi0gICAgICAgIHNlbGYudGFza2ZpbGUgPSBycS5ycWRhdGEuZ2V0X3Rhc2tfZmlsZShyZWFsdGFzaykKLSAgICAgICAgc2VsZi50YXNraGFzaCA9IHJxLnJxZGF0YS5nZXRfdGFza19oYXNoKHJlYWx0YXNrKQorICAgICAgICBzZWxmLnRhc2tzdHJpbmcgPSB0YXNrICsgIl9zZXRzY2VuZSIKKyAgICAgICAgc2VsZi50YXNrbmFtZSA9IHRhc2tuYW1lX2Zyb21fdGlkKHRhc2spICsgIl9zZXRzY2VuZSIKKyAgICAgICAgc2VsZi50YXNrZmlsZSA9IGZuX2Zyb21fdGlkKHRhc2spCisgICAgICAgIHNlbGYudGFza2hhc2ggPSBycS5ycWRhdGEuZ2V0X3Rhc2tfaGFzaCh0YXNrKQogCiBjbGFzcyBydW5RdWV1ZVRhc2tTdGFydGVkKHJ1blF1ZXVlRXZlbnQpOgogICAgICIiIgpAQCAtMjIyMyw3ICsyMzQ2LDcgQEAKICAgICAgICAgaWYgcGlwZW91dDoKICAgICAgICAgICAgIHBpcGVvdXQuY2xvc2UoKQogICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCi0gICAgICAgIHNlbGYucXVldWUgPSAiIgorICAgICAgICBzZWxmLnF1ZXVlID0gYiIiCiAgICAgICAgIHNlbGYuZCA9IGQKICAgICAgICAgc2VsZi5ycSA9IHJxCiAgICAgICAgIHNlbGYucnFleGVjID0gcnFleGVjCkBAIC0yMjMyLDIyICsyMzU1LDE2IEBACiAgICAgICAgIHNlbGYucnFleGVjID0gcnFleGVjCiAKICAgICBkZWYgcmVhZChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gW3NlbGYucnEud29ya2VyLCBzZWxmLnJxLmZha2V3b3JrZXJdOgotICAgICAgICAgICAgaWYgbm90IHc6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHcucG9sbCgpCi0gICAgICAgICAgICBpZiB3LnJldHVybmNvZGUgaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLnJxLnRlYXJkb3duOgotICAgICAgICAgICAgICAgIG5hbWUgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5ycS53b3JrZXIgYW5kIHcucGlkID09IHNlbGYucnEud29ya2VyLnBpZDoKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJXb3JrZXIiCi0gICAgICAgICAgICAgICAgZWxpZiBzZWxmLnJxLmZha2V3b3JrZXIgYW5kIHcucGlkID09IHNlbGYucnEuZmFrZXdvcmtlci5waWQ6Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiRmFrZXJvb3QiCi0gICAgICAgICAgICAgICAgYmIuZXJyb3IoIiVzIHByb2Nlc3MgKCVzKSBleGl0ZWQgdW5leHBlY3RlZGx5ICglcyksIHNodXR0aW5nIGRvd24uLi4iICUgKG5hbWUsIHcucGlkLCBzdHIody5yZXR1cm5jb2RlKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5ycS5maW5pc2hfcnVucXVldWUoVHJ1ZSkKKyAgICAgICAgZm9yIHdvcmtlcnMsIG5hbWUgaW4gWyhzZWxmLnJxLndvcmtlciwgIldvcmtlciIpLCAoc2VsZi5ycS5mYWtld29ya2VyLCAiRmFrZXJvb3QiKV06CisgICAgICAgICAgICBmb3Igd29ya2VyIGluIHdvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgd29ya2VyLnByb2Nlc3MucG9sbCgpCisgICAgICAgICAgICAgICAgaWYgd29ya2VyLnByb2Nlc3MucmV0dXJuY29kZSBpcyBub3QgTm9uZSBhbmQgbm90IHNlbGYucnEudGVhcmRvd246CisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCIlcyBwcm9jZXNzICglcykgZXhpdGVkIHVuZXhwZWN0ZWRseSAoJXMpLCBzaHV0dGluZyBkb3duLi4uIiAlIChuYW1lLCB3b3JrZXIucHJvY2Vzcy5waWQsIHN0cih3b3JrZXIucHJvY2Vzcy5yZXR1cm5jb2RlKSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCiAKICAgICAgICAgc3RhcnQgPSBsZW4oc2VsZi5xdWV1ZSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWUgKyBzZWxmLmlucHV0LnJlYWQoMTAyNDAwKQorICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWUgKyAoc2VsZi5pbnB1dC5yZWFkKDEwMjQwMCkgb3IgYiIiKQogICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBR0FJTjoKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMjI1NSw4ICsyMzcyLDggQEAKICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAgICAgIHdoaWxlIGZvdW5kIGFuZCBsZW4oc2VsZi5xdWV1ZSk6CiAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCi0gICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9ldmVudD4iKQotICAgICAgICAgICAgd2hpbGUgaW5kZXggIT0gLTEgYW5kIHNlbGYucXVldWUuc3RhcnRzd2l0aCgiPGV2ZW50PiIpOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoYiI8L2V2ZW50PiIpCisgICAgICAgICAgICB3aGlsZSBpbmRleCAhPSAtMSBhbmQgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKGIiPGV2ZW50PiIpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBwaWNrbGUubG9hZHMoc2VsZi5xdWV1ZVs3OmluZGV4XSkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgpAQCAtMjI2NCw5ICsyMzgxLDkgQEAKICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlX2Zyb21fd29ya2VyKGV2ZW50LCBzZWxmLmQpCiAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrODpdCi0gICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKLSAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V4aXRjb2RlPiIpCi0gICAgICAgICAgICB3aGlsZSBpbmRleCAhPSAtMSBhbmQgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKCI8ZXhpdGNvZGU+Iik6CisgICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoYiI8L2V2ZW50PiIpCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZChiIjwvZXhpdGNvZGU+IikKKyAgICAgICAgICAgIHdoaWxlIGluZGV4ICE9IC0xIGFuZCBzZWxmLnF1ZXVlLnN0YXJ0c3dpdGgoYiI8ZXhpdGNvZGU+Iik6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB0YXNrLCBzdGF0dXMgPSBwaWNrbGUubG9hZHMoc2VsZi5xdWV1ZVsxMDppbmRleF0pCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKQEAgLTIyNzQsNyArMjM5MSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5ycWV4ZWMucnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHRhc2ssIHN0YXR1cykKICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKICAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZVtpbmRleCsxMTpdCi0gICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXhpdGNvZGU+IikKKyAgICAgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZChiIjwvZXhpdGNvZGU+IikKICAgICAgICAgcmV0dXJuIChlbmQgPiBzdGFydCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTIyODMsMyArMjQwMCwyNyBAQAogICAgICAgICBpZiBsZW4oc2VsZi5xdWV1ZSkgPiAwOgogICAgICAgICAgICAgcHJpbnQoIldhcm5pbmcsIHdvcmtlciBsZWZ0IHBhcnRpYWwgbWVzc2FnZTogJXMiICUgc2VsZi5xdWV1ZSkKICAgICAgICAgc2VsZi5pbnB1dC5jbG9zZSgpCisKK2RlZiBnZXRfc2V0c2NlbmVfZW5mb3JjZV93aGl0ZWxpc3QoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0JCX1NFVFNDRU5FX0VORk9SQ0UnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybiBOb25lCisgICAgd2hpdGVsaXN0ID0gKGQuZ2V0VmFyKCJCQl9TRVRTQ0VORV9FTkZPUkNFX1dISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgb3V0bGlzdCA9IFtdCisgICAgZm9yIGl0ZW0gaW4gd2hpdGVsaXN0WzpdOgorICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoJyU6Jyk6CisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHN5cy5hcmd2WzE6XToKKyAgICAgICAgICAgICAgICBpZiBub3QgdGFyZ2V0LnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICAgICAgb3V0bGlzdC5hcHBlbmQodGFyZ2V0LnNwbGl0KCc6JylbMF0gKyAnOicgKyBpdGVtLnNwbGl0KCc6JylbMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRsaXN0LmFwcGVuZChpdGVtKQorICAgIHJldHVybiBvdXRsaXN0CisKK2RlZiBjaGVja19zZXRzY2VuZV9lbmZvcmNlX3doaXRlbGlzdChwbiwgdGFza25hbWUsIHdoaXRlbGlzdCk6CisgICAgaW1wb3J0IGZubWF0Y2gKKyAgICBpZiB3aGl0ZWxpc3Q6CisgICAgICAgIGl0ZW0gPSAnJXM6JXMnICUgKHBuLCB0YXNrbmFtZSkKKyAgICAgICAgZm9yIHdoaXRlbGlzdF9pdGVtIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChpdGVtLCB3aGl0ZWxpc3RfaXRlbSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weQppbmRleCBhMzA3OGE4Li45ODJmY2Y3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3Byb2Nlc3MucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci9wcm9jZXNzLnB5CkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHNlbGVjdAotZnJvbSBRdWV1ZSBpbXBvcnQgRW1wdHkKK2Zyb20gcXVldWUgaW1wb3J0IEVtcHR5CiBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgRXZlbnQsIFByb2Nlc3MsIHV0aWwsIFF1ZXVlLCBQaXBlLCBxdWV1ZXMsIE1hbmFnZXIKIAogZnJvbSAuIGltcG9ydCBCaXRCYWtlQmFzZVNlcnZlciwgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uLCBCYXNlSW1wbFNlcnZlcgpAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgICAgIGlmIG5vdCBmZHM6CiAgICAgICAgICAgICBmZHMgPSBbXQogCi0gICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICBmb3IgZnVuY3Rpb24sIGRhdGEgaW4gbGlzdChzZWxmLl9pZGxlZnVucy5pdGVtcygpKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR2YWwgPSBmdW5jdGlvbihzZWxmLCBkYXRhLCBGYWxzZSkKICAgICAgICAgICAgICAgICBpZiByZXR2YWwgaXMgRmFsc2U6CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbmV4dHNsZWVwID0gTm9uZQogICAgICAgICAgICAgICAgIGVsaWYgcmV0dmFsIGlzIFRydWU6CiAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IE5vbmUKLSAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UocmV0dmFsLCBmbG9hdCk6CisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJldHZhbCwgZmxvYXQpIGFuZCBuZXh0c2xlZXA6CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPCBuZXh0c2xlZXApOgogICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHNsZWVwID0gcmV0dmFsCiAgICAgICAgICAgICAgICAgZWxpZiBuZXh0c2xlZXAgaXMgTm9uZToKQEAgLTIxMyw3ICsyMTMsNyBAQAogIyBXcmFwIFF1ZXVlIHRvIHByb3ZpZGUgQVBJIHdoaWNoIGlzbid0IHNlcnZlciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYwogY2xhc3MgUHJvY2Vzc0V2ZW50UXVldWUobXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5RdWV1ZSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemUpOgotICAgICAgICBtdWx0aXByb2Nlc3NpbmcucXVldWVzLlF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMuUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSwgY3R4PW11bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dCgpKQogICAgICAgICBzZWxmLmV4aXQgPSBGYWxzZQogICAgICAgICBiYi51dGlscy5zZXRfcHJvY2Vzc19uYW1lKCJQcm9jZXNzRVF1ZXVlIikKIApAQCAtMjIyLDExICsyMjIsMTAgQEAKIAogICAgIGRlZiB3YWl0RXZlbnQoc2VsZiwgdGltZW91dCk6CiAgICAgICAgIGlmIHNlbGYuZXhpdDoKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRFdmVudCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlci5pc19hbGl2ZSgpOgotICAgICAgICAgICAgICAgIHNlbGYuc2V0ZXhpdCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRFdmVudCgpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoVHJ1ZSwgdGltZW91dCkKICAgICAgICAgZXhjZXB0IEVtcHR5OgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTIzNSw5ICsyMzQsMTAgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXRleGl0KCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KEZhbHNlKQogICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICBpZiBzZWxmLmV4aXQ6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci94bWxycGMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weQppbmRleCBhY2UxY2Y2Li40NTJmMTRiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weQpAQCAtMzEsMzEgKzMxLDMzIEBACiAgICAgaW4gdGhlIHNlcnZlcidzIG1haW4gbG9vcC4KICIiIgogCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCB0aW1lCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgcGlja2xlCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGh0dHAuY2xpZW50CitpbXBvcnQgeG1scnBjLmNsaWVudAorZnJvbSB4bWxycGMuc2VydmVyIGltcG9ydCBTaW1wbGVYTUxSUENTZXJ2ZXIsIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisKIGltcG9ydCBiYgotaW1wb3J0IHhtbHJwY2xpYiwgc3lzCiBmcm9tIGJiIGltcG9ydCBkYWVtb25pemUKIGZyb20gYmIudWkgaW1wb3J0IHVpZXZlbnQKLWltcG9ydCBoYXNobGliLCB0aW1lCi1pbXBvcnQgc29ja2V0Ci1pbXBvcnQgb3MsIHNpZ25hbAotaW1wb3J0IHRocmVhZGluZwotdHJ5OgotICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBwaWNrbGUKK2Zyb20gLiBpbXBvcnQgQml0QmFrZUJhc2VTZXJ2ZXIsIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbiwgQmFzZUltcGxTZXJ2ZXIKIAogREVCVUcgPSBGYWxzZQogCi1mcm9tIFNpbXBsZVhNTFJQQ1NlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyLCBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgotaW1wb3J0IGluc3BlY3QsIHNlbGVjdCwgaHR0cGxpYgotCi1mcm9tIC4gaW1wb3J0IEJpdEJha2VCYXNlU2VydmVyLCBCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24sIEJhc2VJbXBsU2VydmVyCi0KLWNsYXNzIEJCVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorY2xhc3MgQkJUcmFuc3BvcnQoeG1scnBjLmNsaWVudC5UcmFuc3BvcnQpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0KToKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSBOb25lCi0gICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuX19pbml0X18oc2VsZikKKyAgICAgICAgeG1scnBjLmNsaWVudC5UcmFuc3BvcnQuX19pbml0X18oc2VsZikKIAogICAgICMgTW9kaWZpZWQgZnJvbSBkZWZhdWx0IHRvIHBhc3MgdGltZW91dCB0byBIVFRQQ29ubmVjdGlvbgogICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6CkBAIC02Nyw3ICs2OSw3IEBACiAgICAgICAgICMgY3JlYXRlIGEgSFRUUCBjb25uZWN0aW9uIG9iamVjdCBmcm9tIGEgaG9zdCBkZXNjcmlwdG9yCiAgICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCiAgICAgICAgICNzdG9yZSB0aGUgaG9zdCBhcmd1bWVudCBhbG9uZyB3aXRoIHRoZSBjb25uZWN0aW9uIG9iamVjdAotICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gaG9zdCwgaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihjaG9zdCwgdGltZW91dD1zZWxmLnRpbWVvdXQpCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBob3N0LCBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihjaG9zdCwgdGltZW91dD1zZWxmLnRpbWVvdXQpCiAgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCiAKICAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgpAQCAtNzYsMTMgKzc4LDMwIEBACiAgICAgZGVmIHNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KToKICAgICAgICAgaWYgc2VsZi5jb25uZWN0aW9uX3Rva2VuOgogICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkJpdGJha2UtdG9rZW4iLCBzZWxmLmNvbm5lY3Rpb25fdG9rZW4pCi0gICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuc2VuZF9jb250ZW50KHNlbGYsIGgsIGJvZHkpCisgICAgICAgIHhtbHJwYy5jbGllbnQuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KQogCiBkZWYgX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgdGltZW91dCA9IDYwKToKICAgICB0ID0gQkJUcmFuc3BvcnQodGltZW91dCkKLSAgICBzID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vJXM6JWQvIiAlIChob3N0LCBwb3J0KSwgdHJhbnNwb3J0PXQsIGFsbG93X25vbmU9VHJ1ZSkKKyAgICBzID0geG1scnBjLmNsaWVudC5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkLyIgJSAoaG9zdCwgcG9ydCksIHRyYW5zcG9ydD10LCBhbGxvd19ub25lPVRydWUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUpCiAgICAgcmV0dXJuIHMsIHQKIAorZGVmIGNoZWNrX2Nvbm5lY3Rpb24ocmVtb3RlLCB0aW1lb3V0KToKKyAgICB0cnk6CisgICAgICAgIGhvc3QsIHBvcnQgPSByZW1vdGUuc3BsaXQoIjoiKQorICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCByZW1vdGUgZGVmaW5pdGlvbiAoJXMpIiAlIHN0cihlKSkKKyAgICAgICAgcmFpc2UgZQorCisgICAgc2VydmVyLCBfdHJhbnNwb3J0ID0gX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgdGltZW91dCkKKyAgICB0cnk6CisgICAgICAgIHJldCwgZXJyID0gIHNlcnZlci5ydW5Db21tYW5kKFsnZ2V0VmFyaWFibGUnLCAnVE9QRElSJ10pCisgICAgICAgIGlmIGVyciBvciBub3QgcmV0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IENvbm5lY3Rpb25FcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKwogY2xhc3MgQml0QmFrZVNlcnZlckNvbW1hbmRzKCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyKToKQEAgLTEyOCw3ICsxNDcsNyBAQAogICAgIGRlZiBhZGRDbGllbnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuaGFzX2NsaWVudDoKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHRva2VuID0gaGFzaGxpYi5tZDUoc3RyKHRpbWUudGltZSgpKSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgdG9rZW4gPSBoYXNobGliLm1kNShzdHIodGltZS50aW1lKCkpLmVuY29kZSgidXRmLTgiKSkuaGV4ZGlnZXN0KCkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc2V0X2Nvbm5lY3Rpb25fdG9rZW4odG9rZW4pCiAgICAgICAgIHNlbGYuaGFzX2NsaWVudCA9IFRydWUKICAgICAgICAgcmV0dXJuIHRva2VuCkBAIC0xNzgsNyArMTk3LDcgQEAKICAgICAiIiIgbm90IGEgcmVhbCB3b3JraW5nIHNlcnZlciwgYnV0IGEgc3R1YiBmb3IgYSBwcm94eSBzZXJ2ZXIgY29ubmVjdGlvbgogCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlKToKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CiAKQEAgLTE4Niw3ICsyMDUsNyBAQAogICAgICMgcmVtb3ZlIHRoaXMgd2hlbiB5b3UncmUgZG9uZSB3aXRoIGRlYnVnZ2luZwogICAgICMgYWxsb3dfcmV1c2VfYWRkcmVzcyA9IFRydWUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnRlcmZhY2UsIHNpbmdsZV91c2U9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnRlcmZhY2UsIHNpbmdsZV91c2U9RmFsc2UsIGlkbGVfdGltZW91dD0wKToKICAgICAgICAgIiIiCiAgICAgICAgIENvbnN0cnVjdG9yCiAgICAgICAgICIiIgpAQCAtMjA0LDYgKzIyMywxMCBAQAogICAgICAgICBzZWxmLmNvbW1hbmRzID0gQml0QmFrZVNlcnZlckNvbW1hbmRzKHNlbGYpCiAgICAgICAgIHNlbGYuYXV0b3JlZ2lzdGVyX2FsbF9mdW5jdGlvbnMoc2VsZi5jb21tYW5kcywgIiIpCiAgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gaW50ZXJmYWNlCisgICAgICAgIHNlbGYudGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuaWRsZV90aW1lb3V0ID0gaWRsZV90aW1lb3V0CisgICAgICAgIGlmIGlkbGVfdGltZW91dDoKKyAgICAgICAgICAgIHNlbGYucmVnaXN0ZXJfaWRsZV9mdW5jdGlvbihzZWxmLmhhbmRsZV9pZGxlX3RpbWVvdXQsIHNlbGYpCiAKICAgICBkZWYgYWRkY29va2VyKHNlbGYsIGNvb2tlcik6CiAgICAgICAgIEJhc2VJbXBsU2VydmVyLmFkZGNvb2tlcihzZWxmLCBjb29rZXIpCkBAIC0yMTksNiArMjQyLDEyIEBACiAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgocHJlZml4KToKICAgICAgICAgICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKG1ldGhvZCwgbmFtZVtsZW4ocHJlZml4KTpdKQogCisgICAgZGVmIGhhbmRsZV9pZGxlX3RpbWVvdXQoc2VsZiwgc2VydmVyLCBkYXRhLCBhYm9ydCk6CisgICAgICAgIGlmIG5vdCBhYm9ydDoKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpIC0gc2VydmVyLnRpbWUgPiBzZXJ2ZXIuaWRsZV90aW1lb3V0OgorICAgICAgICAgICAgICAgIHNlcnZlci5xdWl0ID0gVHJ1ZQorICAgICAgICAgICAgICAgIHByaW50KCJTZXJ2ZXIgaWRsZSB0aW1lb3V0IGV4cGlyZWQiKQorICAgICAgICByZXR1cm4gW10KIAogICAgIGRlZiBzZXJ2ZV9mb3JldmVyKHNlbGYpOgogICAgICAgICAjIFN0YXJ0IHRoZSBhY3R1YWwgWE1MUlBDIHNlcnZlcgpAQCAtMjMyLDcgKzI2MSw3IEBACiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CiAgICAgICAgICAgICBmZHMgPSBbc2VsZl0KICAgICAgICAgICAgIG5leHRzbGVlcCA9IDAuMQotICAgICAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIHNlbGYuX2lkbGVmdW5zLml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgZnVuY3Rpb24sIGRhdGEgaW4gbGlzdChzZWxmLl9pZGxlZnVucy5pdGVtcygpKToKICAgICAgICAgICAgICAgICByZXR2YWwgPSBOb25lCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBmdW5jdGlvbihzZWxmLCBkYXRhLCBGYWxzZSkKQEAgLTI2MSwxMyArMjkwLDE1IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmRfc2V0cyA9IHNlbGVjdC5zZWxlY3QoZmRzLCBbXSwgW10sIHNvY2t0aW1lb3V0KQogICAgICAgICAgICAgICAgIGlmIGZkX3NldHNbMF0gYW5kIHNlbGYgaW4gZmRfc2V0c1swXToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5pZGxlX3RpbWVvdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdF9ub2Jsb2NrKCkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgICAgICMgd2UgaWdub3JlIGludGVycnVwdGVkIGNhbGxzCiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICMgVGVsbCBpZGxlIGZ1bmN0aW9ucyB3ZSdyZSBleGl0aW5nCi0gICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICBmb3IgZnVuY3Rpb24sIGRhdGEgaW4gbGlzdChzZWxmLl9pZGxlZnVucy5pdGVtcygpKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR2YWwgPSBmdW5jdGlvbihzZWxmLCBkYXRhLCBUcnVlKQogICAgICAgICAgICAgZXhjZXB0OgpAQCAtMzMyLDkgKzM2MywxMCBAQAogICAgICAgICAgICAgcGFzcwogCiBjbGFzcyBCaXRCYWtlU2VydmVyKEJpdEJha2VCYXNlU2VydmVyKToKLSAgICBkZWYgaW5pdFNlcnZlcihzZWxmLCBpbnRlcmZhY2UgPSAoImxvY2FsaG9zdCIsIDApLCBzaW5nbGVfdXNlID0gRmFsc2UpOgorICAgIGRlZiBpbml0U2VydmVyKHNlbGYsIGludGVyZmFjZSA9ICgibG9jYWxob3N0IiwgMCksCisgICAgICAgICAgICAgICAgICAgc2luZ2xlX3VzZSA9IEZhbHNlLCBpZGxlX3RpbWVvdXQ9MCk6CiAgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gaW50ZXJmYWNlCi0gICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1NlcnZlcihpbnRlcmZhY2UsIHNpbmdsZV91c2UpCisgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1NlcnZlcihpbnRlcmZhY2UsIHNpbmdsZV91c2UsIGlkbGVfdGltZW91dCkKIAogICAgIGRlZiBkZXRhY2goc2VsZik6CiAgICAgICAgIGRhZW1vbml6ZS5jcmVhdGVEYWVtb24oc2VsZi5zZXJ2ZXJJbXBsLnNlcnZlX2ZvcmV2ZXIsICJiaXRiYWtlLWNvb2tlcmRhZW1vbi5sb2ciKQpAQCAtMzc5LDcgKzQxMSw3IEBACiAgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY3JlYXRlIHNvY2tldCBmb3IgJXM6JXMgKCVzKSIgJSAoaG9zdCwgcG9ydCwgc3RyKGUpKSkKICAgICAgICAgICAgIHJhaXNlIGUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gWE1MUlBDUHJveHlTZXJ2ZXIoaG9zdCwgcG9ydCkKKyAgICAgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1Byb3h5U2VydmVyKGhvc3QsIHBvcnQsIHVzZV9idWlsdGluX3R5cGVzPVRydWUpCiAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBCaXRCYWtlWE1MUlBDU2VydmVyQ29ubmVjdGlvbihzZWxmLnNlcnZlckltcGwsIChpcCwgMCksIHNlbGYub2JzZXJ2ZXJfb25seSwgZmVhdHVyZXNldCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdChzZWxmLnRva2VuKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NpZ2dlbi5weQppbmRleCA4OGZjMGYxLi4zYTdkYWM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zaWdnZW4ucHkKQEAgLTMsMTkgKzMsMTQgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBiYi5kYXRhCiBmcm9tIGJiLmNoZWNrc3VtIGltcG9ydCBGaWxlQ2hlY2tzdW1DYWNoZQogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5TaWdHZW4nKQogCi10cnk6Ci0gICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1wb3J0IHBpY2tsZQotICAgIGxvZ2dlci5pbmZvKCdJbXBvcnRpbmcgY1BpY2tsZSBmYWlsZWQuICBGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uJykKLQogZGVmIGluaXQoZCk6Ci0gICAgc2lnZ2VucyA9IFtvYmogZm9yIG9iaiBpbiBnbG9iYWxzKCkuaXRlcnZhbHVlcygpCisgICAgc2lnZ2VucyA9IFtvYmogZm9yIG9iaiBpbiBnbG9iYWxzKCkudmFsdWVzKCkKICAgICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKG9iaikgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhvYmosIFNpZ25hdHVyZUdlbmVyYXRvcildCiAKICAgICBkZXNpcmVkID0gZC5nZXRWYXIoIkJCX1NJR05BVFVSRV9IQU5ETEVSIiwgVHJ1ZSkgb3IgIm5vb3AiCkBAIC0xMzgsNyArMTMzLDcgQEAKICAgICAgICAgICAgICAgICB2YXIgPSBsb29rdXBjYWNoZVtkZXBdCiAgICAgICAgICAgICAgICAgaWYgdmFyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSArIHN0cih2YXIpCi0gICAgICAgICAgICBzZWxmLmJhc2VoYXNoW2ZuICsgIi4iICsgdGFza10gPSBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorICAgICAgICAgICAgc2VsZi5iYXNlaGFzaFtmbiArICIuIiArIHRhc2tdID0gaGFzaGxpYi5tZDUoZGF0YS5lbmNvZGUoInV0Zi04IikpLmhleGRpZ2VzdCgpCiAgICAgICAgICAgICB0YXNrZGVwc1t0YXNrXSA9IGFsbGRlcHMKIAogICAgICAgICBzZWxmLnRhc2tkZXBzW2ZuXSA9IHRhc2tkZXBzCkBAIC0xNDksOCArMTQ0LDkgQEAKIAogICAgIGRlZiBmaW5hbGlzZShzZWxmLCBmbiwgZCwgdmFyaWFudCk6CiAKLSAgICAgICAgaWYgdmFyaWFudDoKLSAgICAgICAgICAgIGZuID0gInZpcnR1YWw6IiArIHZhcmlhbnQgKyAiOiIgKyBmbgorICAgICAgICBtYyA9IGQuZ2V0VmFyKCJfX0JCTVVMVElDT05GSUciLCBGYWxzZSkgb3IgIiIKKyAgICAgICAgaWYgdmFyaWFudCBvciBtYzoKKyAgICAgICAgICAgIGZuID0gYmIuY2FjaGUucmVhbGZuMnZpcnR1YWwoZm4sIHZhcmlhbnQsIG1jKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhc2tkZXBzID0gc2VsZi5fYnVpbGRfZGF0YShmbiwgZCkKQEAgLTIyMSw5ICsyMTcsOSBAQAogICAgICAgICBpZiB0YWludDoKICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgdGFpbnQKICAgICAgICAgICAgIHNlbGYudGFpbnRzW2tdID0gdGFpbnQKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCIlcyBpcyB0YWludGVkIGZyb20gYSBmb3JjZWQgcnVuIiAlIGspCisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiJXMgaXMgdGFpbnRlZCBmcm9tIGEgZm9yY2VkIHJ1biIgJSBrKQogCi0gICAgICAgIGggPSBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorICAgICAgICBoID0gaGFzaGxpYi5tZDUoZGF0YS5lbmNvZGUoInV0Zi04IikpLmhleGRpZ2VzdCgpCiAgICAgICAgIHNlbGYudGFza2hhc2hba10gPSBoCiAgICAgICAgICNkLnNldFZhcigiQkJfVEFTS0hBU0hfdGFzay0lcyIgJSB0YXNrLCB0YXNraGFzaFt0YXNrXSkKICAgICAgICAgcmV0dXJuIGgKQEAgLTI4Nyw3ICsyODMsNyBAQAogICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4oZmQsICJ3YiIpIGFzIHN0cmVhbToKICAgICAgICAgICAgICAgICBwID0gcGlja2xlLmR1bXAoZGF0YSwgc3RyZWFtLCAtMSkKICAgICAgICAgICAgICAgICBzdHJlYW0uZmx1c2goKQotICAgICAgICAgICAgb3MuY2htb2QodG1wZmlsZSwgMDY2NCkKKyAgICAgICAgICAgIG9zLmNobW9kKHRtcGZpbGUsIDBvNjY0KQogICAgICAgICAgICAgb3MucmVuYW1lKHRtcGZpbGUsIHNpZ2ZpbGUpCiAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgdHJ5OgpAQCAtMjk4LDIzICsyOTQsMjUgQEAKIAogICAgICAgICBjb21wdXRlZF9iYXNlaGFzaCA9IGNhbGNfYmFzZWhhc2goZGF0YSkKICAgICAgICAgaWYgY29tcHV0ZWRfYmFzZWhhc2ggIT0gc2VsZi5iYXNlaGFzaFtrXToKLSAgICAgICAgICAgIGJiLmVycm9yKCJCYXNlaGFzaCBtaXNtYXRjaCAlcyB2ZXJzZXMgJXMgZm9yICVzIiAlIChjb21wdXRlZF9iYXNlaGFzaCwgc2VsZi5iYXNlaGFzaFtrXSwgaykpCi0gICAgICAgIGlmIGsgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgIGJiLmVycm9yKCJCYXNlaGFzaCBtaXNtYXRjaCAlcyB2ZXJzdXMgJXMgZm9yICVzIiAlIChjb21wdXRlZF9iYXNlaGFzaCwgc2VsZi5iYXNlaGFzaFtrXSwgaykpCisgICAgICAgIGlmIHJ1bnRpbWUgYW5kIGsgaW4gc2VsZi50YXNraGFzaDoKICAgICAgICAgICAgIGNvbXB1dGVkX3Rhc2toYXNoID0gY2FsY190YXNraGFzaChkYXRhKQogICAgICAgICAgICAgaWYgY29tcHV0ZWRfdGFza2hhc2ggIT0gc2VsZi50YXNraGFzaFtrXToKLSAgICAgICAgICAgICAgICBiYi5lcnJvcigiVGFza2hhc2ggbWlzbWF0Y2ggJXMgdmVyc2VzICVzIGZvciAlcyIgJSAoY29tcHV0ZWRfdGFza2hhc2gsIHNlbGYudGFza2hhc2hba10sIGspKQorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJUYXNraGFzaCBtaXNtYXRjaCAlcyB2ZXJzdXMgJXMgZm9yICVzIiAlIChjb21wdXRlZF90YXNraGFzaCwgc2VsZi50YXNraGFzaFtrXSwgaykpCiAKIAotICAgIGRlZiBkdW1wX3NpZ3Moc2VsZiwgZGF0YUNhY2hlLCBvcHRpb25zKToKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZXMsIG9wdGlvbnMpOgogICAgICAgICBmb3IgZm4gaW4gc2VsZi50YXNrZGVwczoKICAgICAgICAgICAgIGZvciB0YXNrIGluIHNlbGYudGFza2RlcHNbZm5dOgorICAgICAgICAgICAgICAgIHRpZCA9IGZuICsgIjoiICsgdGFzaworICAgICAgICAgICAgICAgIChtYywgXywgXykgPSBiYi5ydW5xdWV1ZS5zcGxpdF90aWQodGlkKQogICAgICAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKICAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBzZWxmLnRhc2toYXNoOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIGRhdGFDYWNoZS5iYXNldGFza2hhc2hba10gIT0gc2VsZi5iYXNlaGFzaFtrXToKKyAgICAgICAgICAgICAgICBpZiBkYXRhQ2FjaGVzW21jXS5iYXNldGFza2hhc2hba10gIT0gc2VsZi5iYXNlaGFzaFtrXToKICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkJpdGJha2UncyBjYWNoZWQgYmFzZWhhc2ggZG9lcyBub3QgbWF0Y2ggdGhlIG9uZSB3ZSBqdXN0IGdlbmVyYXRlZCAoJXMpISIgJSBrKQotICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigiVGhlIG1pc21hdGNoZWQgaGFzaGVzIHdlcmUgJXMgYW5kICVzIiAlIChkYXRhQ2FjaGUuYmFzZXRhc2toYXNoW2tdLCBzZWxmLmJhc2VoYXNoW2tdKSkKLSAgICAgICAgICAgICAgICBzZWxmLmR1bXBfc2lndGFzayhmbiwgdGFzaywgZGF0YUNhY2hlLnN0YW1wW2ZuXSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIlRoZSBtaXNtYXRjaGVkIGhhc2hlcyB3ZXJlICVzIGFuZCAlcyIgJSAoZGF0YUNhY2hlc1ttY10uYmFzZXRhc2toYXNoW2tdLCBzZWxmLmJhc2VoYXNoW2tdKSkKKyAgICAgICAgICAgICAgICBzZWxmLmR1bXBfc2lndGFzayhmbiwgdGFzaywgZGF0YUNhY2hlc1ttY10uc3RhbXBbZm5dLCBUcnVlKQogCiBjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2goU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMpOgogICAgIG5hbWUgPSAiYmFzaWNoYXNoIgpAQCAtMzY4LDEwICszNjYsMTIgQEAKIGRlZiBjb21wYXJlX3NpZ2ZpbGVzKGEsIGIsIHJlY3Vyc2VjYiA9IE5vbmUpOgogICAgIG91dHB1dCA9IFtdCiAKLSAgICBwMSA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihhLCAicmIiKSkKLSAgICBhX2RhdGEgPSBwMS5sb2FkKCkKLSAgICBwMiA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihiLCAicmIiKSkKLSAgICBiX2RhdGEgPSBwMi5sb2FkKCkKKyAgICB3aXRoIG9wZW4oYSwgJ3JiJykgYXMgZjoKKyAgICAgICAgcDEgPSBwaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgIGFfZGF0YSA9IHAxLmxvYWQoKQorICAgIHdpdGggb3BlbihiLCAncmInKSBhcyBmOgorICAgICAgICBwMiA9IHBpY2tsZS5VbnBpY2tsZXIoZikKKyAgICAgICAgYl9kYXRhID0gcDIubG9hZCgpCiAKICAgICBkZWYgZGljdF9kaWZmKGEsIGIsIHdoaXRlbGlzdD1zZXQoKSk6CiAgICAgICAgIHNhID0gc2V0KGEua2V5cygpKQpAQCAtNDUzLDYgKzQ1MywxMSBAQAogICAgICAgICBmb3IgZGVwIGluIGNoYW5nZWQ6CiAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJWYXJpYWJsZSAlcyB2YWx1ZSBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChkZXAsIGFfZGF0YVsndmFydmFscyddW2RlcF0sIGJfZGF0YVsndmFydmFscyddW2RlcF0pKQogCisgICAgaWYgbm90ICdmaWxlX2NoZWNrc3VtX3ZhbHVlcycgaW4gYV9kYXRhOgorICAgICAgICAgYV9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddID0ge30KKyAgICBpZiBub3QgJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJyBpbiBiX2RhdGE6CisgICAgICAgICBiX2RhdGFbJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJ10gPSB7fQorCiAgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBmaWxlX2NoZWNrc3Vtc19kaWZmKGFfZGF0YVsnZmlsZV9jaGVja3N1bV92YWx1ZXMnXSwgYl9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddKQogICAgIGlmIGNoYW5nZWQ6CiAgICAgICAgIGZvciBmLCBvbGQsIG5ldyBpbiBjaGFuZ2VkOgpAQCAtNDY0LDYgKzQ2OSwxMCBAQAogICAgICAgICBmb3IgZiBpbiByZW1vdmVkOgogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiBjaGVja3N1bSBvZiBmaWxlICVzIHdhcyByZW1vdmVkIiAlIChmKSkKIAorICAgIGlmIG5vdCAncnVudGFza2RlcHMnIGluIGFfZGF0YToKKyAgICAgICAgIGFfZGF0YVsncnVudGFza2RlcHMnXSA9IHt9CisgICAgaWYgbm90ICdydW50YXNrZGVwcycgaW4gYl9kYXRhOgorICAgICAgICAgYl9kYXRhWydydW50YXNrZGVwcyddID0ge30KIAogICAgIGlmIGxlbihhX2RhdGFbJ3J1bnRhc2tkZXBzJ10pICE9IGxlbihiX2RhdGFbJ3J1bnRhc2tkZXBzJ10pOgogICAgICAgICBjaGFuZ2VkID0gWyJOdW1iZXIgb2YgdGFzayBkZXBlbmRlbmNpZXMgY2hhbmdlZCJdCkBAIC01MzYsNyArNTQ1LDcgQEAKICAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgYmFzZWRhdGEgPSBiYXNlZGF0YSArIHN0cih2YWwpCiAKLSAgICByZXR1cm4gaGFzaGxpYi5tZDUoYmFzZWRhdGEpLmhleGRpZ2VzdCgpCisgICAgcmV0dXJuIGhhc2hsaWIubWQ1KGJhc2VkYXRhLmVuY29kZSgidXRmLTgiKSkuaGV4ZGlnZXN0KCkKIAogZGVmIGNhbGNfdGFza2hhc2goc2lnZGF0YSk6CiAgICAgZGF0YSA9IHNpZ2RhdGFbJ2Jhc2VoYXNoJ10KQEAgLTU1MywxNCArNTYyLDE1IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBkYXRhID0gZGF0YSArIHNpZ2RhdGFbJ3RhaW50J10KIAotICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhLmVuY29kZSgidXRmLTgiKSkuaGV4ZGlnZXN0KCkKIAogCiBkZWYgZHVtcF9zaWdmaWxlKGEpOgogICAgIG91dHB1dCA9IFtdCiAKLSAgICBwMSA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihhLCAicmIiKSkKLSAgICBhX2RhdGEgPSBwMS5sb2FkKCkKKyAgICB3aXRoIG9wZW4oYSwgJ3JiJykgYXMgZjoKKyAgICAgICAgcDEgPSBwaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgIGFfZGF0YSA9IHAxLmxvYWQoKQogCiAgICAgb3V0cHV0LmFwcGVuZCgiYmFzZXdoaXRlbGlzdDogJXMiICUgKGFfZGF0YVsnYmFzZXdoaXRlbGlzdCddKSkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rhc2tkYXRhLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rhc2tkYXRhLnB5CmluZGV4IDlhZTUyZDcuLmQ4YmRiY2EgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGFza2RhdGEucHkKQEAgLTM3LDI3ICszNywyNCBAQAogICAgIHJldHVybiBhbnkobmFtZSA9PSB0YXJnZXQgb3IgcmUubWF0Y2gobmFtZSwgdGFyZ2V0KQogICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gc3RyaW5ncykKIAorY2xhc3MgVGFza0VudHJ5OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi50ZGVwZW5kcyA9IFtdCisgICAgICAgIHNlbGYuaWRlcGVuZHMgPSBbXQorICAgICAgICBzZWxmLmlyZGVwZW5kcyA9IFtdCisKIGNsYXNzIFRhc2tEYXRhOgogICAgICIiIgogICAgIEJpdEJha2UgVGFzayBEYXRhIGltcGxlbWVudGF0aW9uCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFib3J0ID0gVHJ1ZSwgdHJ5YWx0Y29uZmlncyA9IEZhbHNlLCBza2lwbGlzdCA9IE5vbmUsIGFsbG93aW5jb21wbGV0ZSA9IEZhbHNlKToKLSAgICAgICAgc2VsZi5idWlsZF9uYW1lc19pbmRleCA9IFtdCi0gICAgICAgIHNlbGYucnVuX25hbWVzX2luZGV4ID0gW10KLSAgICAgICAgc2VsZi5mbl9pbmRleCA9IFtdCi0KICAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzID0ge30KICAgICAgICAgc2VsZi5ydW5fdGFyZ2V0cyA9IHt9CiAKICAgICAgICAgc2VsZi5leHRlcm5hbF90YXJnZXRzID0gW10KIAotICAgICAgICBzZWxmLnRhc2tzX2ZuaWQgPSBbXQotICAgICAgICBzZWxmLnRhc2tzX25hbWUgPSBbXQotICAgICAgICBzZWxmLnRhc2tzX3RkZXBlbmRzID0gW10KLSAgICAgICAgc2VsZi50YXNrc19pZGVwZW5kcyA9IFtdCi0gICAgICAgIHNlbGYudGFza3NfaXJkZXBlbmRzID0gW10KLSAgICAgICAgIyBDYWNoZSB0byBzcGVlZCB1cCB0YXNrIElEIGxvb2t1cHMKLSAgICAgICAgc2VsZi50YXNrc19sb29rdXAgPSB7fQorICAgICAgICBzZWxmLnNlZW5mbnMgPSBbXQorICAgICAgICBzZWxmLnRhc2tlbnRyaWVzID0ge30KIAogICAgICAgICBzZWxmLmRlcGlkcyA9IHt9CiAgICAgICAgIHNlbGYucmRlcGlkcyA9IHt9CkBAIC02Niw3ICs2Myw3IEBACiAKICAgICAgICAgc2VsZi5mYWlsZWRfZGVwcyA9IFtdCiAgICAgICAgIHNlbGYuZmFpbGVkX3JkZXBzID0gW10KLSAgICAgICAgc2VsZi5mYWlsZWRfZm5pZHMgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9mbnMgPSBbXQogCiAgICAgICAgIHNlbGYuYWJvcnQgPSBhYm9ydAogICAgICAgICBzZWxmLnRyeWFsdGNvbmZpZ3MgPSB0cnlhbHRjb25maWdzCkBAIC03NCw4OCArNzEsNiBAQAogCiAgICAgICAgIHNlbGYuc2tpcGxpc3QgPSBza2lwbGlzdAogCi0gICAgZGVmIGdldGJ1aWxkX2lkKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIGJ1aWxkIHRhcmdldCBuYW1lLgotICAgICAgICBJZiBpdCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgb25lLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IG5hbWUgaW4gc2VsZi5idWlsZF9uYW1lc19pbmRleDoKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXguYXBwZW5kKG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuYnVpbGRfbmFtZXNfaW5kZXgpIC0gMQotCi0gICAgICAgIHJldHVybiBzZWxmLmJ1aWxkX25hbWVzX2luZGV4LmluZGV4KG5hbWUpCi0KLSAgICBkZWYgZ2V0cnVuX2lkKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIHJ1biB0YXJnZXQgbmFtZS4KLSAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYucnVuX25hbWVzX2luZGV4OgotICAgICAgICAgICAgc2VsZi5ydW5fbmFtZXNfaW5kZXguYXBwZW5kKG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYucnVuX25hbWVzX2luZGV4KSAtIDEKLQotICAgICAgICByZXR1cm4gc2VsZi5ydW5fbmFtZXNfaW5kZXguaW5kZXgobmFtZSkKLQotICAgIGRlZiBnZXRmbl9pZChzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSBmaWxlbmFtZS4KLSAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYuZm5faW5kZXg6Ci0gICAgICAgICAgICBzZWxmLmZuX2luZGV4LmFwcGVuZChuYW1lKQotICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZuX2luZGV4KSAtIDEKLQotICAgICAgICByZXR1cm4gc2VsZi5mbl9pbmRleC5pbmRleChuYW1lKQotCi0gICAgZGVmIGdldHRhc2tfaWRzKHNlbGYsIGZuaWQpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBJRCBudW1iZXJzIG1hdGNoaW5nIGEgZ2l2ZW4gZm5pZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlkcyA9IFtdCi0gICAgICAgIGlmIGZuaWQgaW4gc2VsZi50YXNrc19sb29rdXA6Ci0gICAgICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXToKLSAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdKQotICAgICAgICByZXR1cm4gaWRzCi0KLSAgICBkZWYgZ2V0dGFza19pZF9mcm9tZm5pZChzZWxmLCBmbmlkLCB0YXNrKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSB0YXNrIG1hdGNoaW5nIGZuaWQgYW5kIHRhc2suCi0gICAgICAgICIiIgotICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfbG9va3VwOgotICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50YXNrc19sb29rdXBbZm5pZF1bdGFza10KLQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldHRhc2tfaWQoc2VsZiwgZm4sIHRhc2ssIGNyZWF0ZSA9IFRydWUpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIHRhc2sgbWF0Y2hpbmcgZm4gYW5kIHRhc2suCi0gICAgICAgIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBvbmUgYnkgZGVmYXVsdC4KLSAgICAgICAgT3B0aW9uYWxseSByZXR1cm4gTm9uZSBpbnN0ZWFkLgotICAgICAgICAiIiIKLSAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCi0KLSAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnRhc2tzX2xvb2t1cDoKLSAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi50YXNrc19sb29rdXBbZm5pZF06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdCi0KLSAgICAgICAgaWYgbm90IGNyZWF0ZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgc2VsZi50YXNrc19uYW1lLmFwcGVuZCh0YXNrKQotICAgICAgICBzZWxmLnRhc2tzX2ZuaWQuYXBwZW5kKGZuaWQpCi0gICAgICAgIHNlbGYudGFza3NfdGRlcGVuZHMuYXBwZW5kKFtdKQotICAgICAgICBzZWxmLnRhc2tzX2lkZXBlbmRzLmFwcGVuZChbXSkKLSAgICAgICAgc2VsZi50YXNrc19pcmRlcGVuZHMuYXBwZW5kKFtdKQotCi0gICAgICAgIGxpc3RpZCA9IGxlbihzZWxmLnRhc2tzX25hbWUpIC0gMQotCi0gICAgICAgIGlmIGZuaWQgbm90IGluIHNlbGYudGFza3NfbG9va3VwOgotICAgICAgICAgICAgc2VsZi50YXNrc19sb29rdXBbZm5pZF0gPSB7fQotICAgICAgICBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXVt0YXNrXSA9IGxpc3RpZAotCi0gICAgICAgIHJldHVybiBsaXN0aWQKLQogICAgIGRlZiBhZGRfdGFza3Moc2VsZiwgZm4sIGRhdGFDYWNoZSk6CiAgICAgICAgICIiIgogICAgICAgICBBZGQgdGFza3MgZm9yIGEgZ2l2ZW4gZm4gdG8gdGhlIGRhdGFiYXNlCkBAIC0xNjMsMjkgKzc4LDMxIEBACiAKICAgICAgICAgdGFza19kZXBzID0gZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KIAotICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKLQotICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICBpZiBmbiBpbiBzZWxmLmZhaWxlZF9mbnM6CiAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIlRyeWluZyB0byByZS1hZGQgYSBmYWlsZWQgZmlsZT8gU29tZXRoaW5nIGlzIGJyb2tlbi4uLiIpCiAKICAgICAgICAgIyBDaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyBmbgotICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfZm5pZDoKKyAgICAgICAgaWYgZm4gaW4gc2VsZi5zZWVuZm5zOgogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgc2VsZi5zZWVuZm5zLmFwcGVuZChmbikKKwogICAgICAgICBzZWxmLmFkZF9leHRyYV9kZXBzKGZuLCBkYXRhQ2FjaGUpCiAKICAgICAgICAgZm9yIHRhc2sgaW4gdGFza19kZXBzWyd0YXNrcyddOgogCisgICAgICAgICAgICB0aWQgPSAiJXM6JXMiICUgKGZuLCB0YXNrKQorICAgICAgICAgICAgc2VsZi50YXNrZW50cmllc1t0aWRdID0gVGFza0VudHJ5KCkKKwogICAgICAgICAgICAgIyBXb3JrIG91dCB0YXNrIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgcGFyZW50aWRzID0gW10KICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza19kZXBzWydwYXJlbnRzJ11bdGFza106CiAgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiB0YXNrX2RlcHNbJ3Rhc2tzJ106CiAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJOb3QgYWRkaW5nIGRlcGVuZGVueSBvZiAlcyBvbiAlcyBzaW5jZSAlcyBkb2VzIG5vdCBleGlzdCIgJSAodGFzaywgZGVwLCBkZXApKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHBhcmVudGlkID0gc2VsZi5nZXR0YXNrX2lkKGZuLCBkZXApCisgICAgICAgICAgICAgICAgcGFyZW50aWQgPSAiJXM6JXMiICUgKGZuLCBkZXApCiAgICAgICAgICAgICAgICAgcGFyZW50aWRzLmFwcGVuZChwYXJlbnRpZCkKLSAgICAgICAgICAgIHRhc2tpZCA9IHNlbGYuZ2V0dGFza19pZChmbiwgdGFzaykKLSAgICAgICAgICAgIHNlbGYudGFza3NfdGRlcGVuZHNbdGFza2lkXS5leHRlbmQocGFyZW50aWRzKQorICAgICAgICAgICAgc2VsZi50YXNrZW50cmllc1t0aWRdLnRkZXBlbmRzLmV4dGVuZChwYXJlbnRpZHMpCiAKICAgICAgICAgICAgICMgVG91Y2ggYWxsIGludGVydGFzayBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgIGlmICdkZXBlbmRzJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2sgaW4gdGFza19kZXBzWydkZXBlbmRzJ106CkBAIC0xOTQsMjkgKzExMSwzMCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBkZXA6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAiOiIgbm90IGluIGRlcDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIkVycm9yIGZvciAlcywgZGVwZW5kZW5jeSAlcyBkb2VzIG5vdCBjb250YWluICc6JyBjaGFyYWN0ZXJcbi4gVGFzayAnZGVwZW5kcycgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSAncGFja2FnZW5hbWU6dGFzayciICUgKGZuLCBkZXApKQotICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmFwcGVuZCgoKHNlbGYuZ2V0YnVpbGRfaWQoZGVwLnNwbGl0KCI6IilbMF0pKSwgZGVwLnNwbGl0KCI6IilbMV0pKQotICAgICAgICAgICAgICAgIHNlbGYudGFza3NfaWRlcGVuZHNbdGFza2lkXS5leHRlbmQoaWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmFwcGVuZCgoKGRlcC5zcGxpdCgiOiIpWzBdKSwgZGVwLnNwbGl0KCI6IilbMV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWVuX2J1aWxkX3RhcmdldChkZXAuc3BsaXQoIjoiKVswXSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tlbnRyaWVzW3RpZF0uaWRlcGVuZHMuZXh0ZW5kKGlkcykKICAgICAgICAgICAgIGlmICdyZGVwZW5kcycgaW4gdGFza19kZXBzIGFuZCB0YXNrIGluIHRhc2tfZGVwc1sncmRlcGVuZHMnXToKICAgICAgICAgICAgICAgICBpZHMgPSBbXQogICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza19kZXBzWydyZGVwZW5kcyddW3Rhc2tdLnNwbGl0KCk6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRlcDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICI6IiBub3QgaW4gZGVwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiVGFza0RhdGEiLCAiRXJyb3IgZm9yICVzLCBkZXBlbmRlbmN5ICVzIGRvZXMgbm90IGNvbnRhaW4gJzonIGNoYXJhY3RlclxuLiBUYXNrICdyZGVwZW5kcycgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSAncGFja2FnZW5hbWU6dGFzayciICUgKGZuLCBkZXApKQotICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmFwcGVuZCgoKHNlbGYuZ2V0cnVuX2lkKGRlcC5zcGxpdCgiOiIpWzBdKSksIGRlcC5zcGxpdCgiOiIpWzFdKSkKLSAgICAgICAgICAgICAgICBzZWxmLnRhc2tzX2lyZGVwZW5kc1t0YXNraWRdLmV4dGVuZChpZHMpCi0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5hcHBlbmQoKChkZXAuc3BsaXQoIjoiKVswXSksIGRlcC5zcGxpdCgiOiIpWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vlbl9ydW5fdGFyZ2V0KGRlcC5zcGxpdCgiOiIpWzBdKQorICAgICAgICAgICAgICAgIHNlbGYudGFza2VudHJpZXNbdGlkXS5pcmRlcGVuZHMuZXh0ZW5kKGlkcykKIAogICAgICAgICAjIFdvcmsgb3V0IGJ1aWxkIGRlcGVuZGVuY2llcwotICAgICAgICBpZiBub3QgZm5pZCBpbiBzZWxmLmRlcGlkczoKLSAgICAgICAgICAgIGRlcGVuZGlkcyA9IHt9CisgICAgICAgIGlmIG5vdCBmbiBpbiBzZWxmLmRlcGlkczoKKyAgICAgICAgICAgIGRlcGVuZGlkcyA9IHNldCgpCiAgICAgICAgICAgICBmb3IgZGVwZW5kIGluIGRhdGFDYWNoZS5kZXBzW2ZuXToKLSAgICAgICAgICAgICAgICBkZXBlbmRpZHNbc2VsZi5nZXRidWlsZF9pZChkZXBlbmQpXSA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuZGVwaWRzW2ZuaWRdID0gZGVwZW5kaWRzLmtleXMoKQorICAgICAgICAgICAgICAgIGRlcGVuZGlkcy5hZGQoZGVwZW5kKQorICAgICAgICAgICAgc2VsZi5kZXBpZHNbZm5dID0gbGlzdChkZXBlbmRpZHMpCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIGRlcGVuZGVuY2llcyAlcyBmb3IgJXMiLCBzdHIoZGF0YUNhY2hlLmRlcHNbZm5dKSwgZm4pCiAKICAgICAgICAgIyBXb3JrIG91dCBydW50aW1lIGRlcGVuZGVuY2llcwotICAgICAgICBpZiBub3QgZm5pZCBpbiBzZWxmLnJkZXBpZHM6Ci0gICAgICAgICAgICByZGVwZW5kaWRzID0ge30KKyAgICAgICAgaWYgbm90IGZuIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIHJkZXBlbmRpZHMgPSBzZXQoKQogICAgICAgICAgICAgcmRlcGVuZHMgPSBkYXRhQ2FjaGUucnVuZGVwc1tmbl0KICAgICAgICAgICAgIHJyZWNzID0gZGF0YUNhY2hlLnJ1bnJlY3NbZm5dCiAgICAgICAgICAgICByZGVwZW5kbGlzdCA9IFtdCkBAIC0yMjQsMjQgKzE0MiwyNiBAQAogICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcmRlcGVuZHM6CiAgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHNbcGFja2FnZV06CiAgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRsaXN0LmFwcGVuZChyZGVwZW5kKQotICAgICAgICAgICAgICAgICAgICByZGVwZW5kaWRzW3NlbGYuZ2V0cnVuX2lkKHJkZXBlbmQpXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgcmRlcGVuZGlkcy5hZGQocmRlcGVuZCkKICAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHJyZWNzOgogICAgICAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJyZWNzW3BhY2thZ2VdOgogICAgICAgICAgICAgICAgICAgICBycmVjbGlzdC5hcHBlbmQocmRlcGVuZCkKLSAgICAgICAgICAgICAgICAgICAgcmRlcGVuZGlkc1tzZWxmLmdldHJ1bl9pZChyZGVwZW5kKV0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRpZHMuYWRkKHJkZXBlbmQpCiAgICAgICAgICAgICBpZiByZGVwZW5kbGlzdDoKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzICVzIGZvciAlcyIsIHN0cihyZGVwZW5kbGlzdCksIGZuKQogICAgICAgICAgICAgaWYgcnJlY2xpc3Q6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJBZGRlZCBydW50aW1lIHJlY29tbWVuZGF0aW9ucyAlcyBmb3IgJXMiLCBzdHIocnJlY2xpc3QpLCBmbikKLSAgICAgICAgICAgIHNlbGYucmRlcGlkc1tmbmlkXSA9IHJkZXBlbmRpZHMua2V5cygpCisgICAgICAgICAgICBzZWxmLnJkZXBpZHNbZm5dID0gbGlzdChyZGVwZW5kaWRzKQogCi0gICAgICAgIGZvciBkZXAgaW4gc2VsZi5kZXBpZHNbZm5pZF06CisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5kZXBpZHNbZm5dOgorICAgICAgICAgICAgc2VsZi5zZWVuX2J1aWxkX3RhcmdldChkZXApCiAgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5mYWlsZWRfZGVwczoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChmbmlkKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbihmbikKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06CisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5yZGVwaWRzW2ZuXToKKyAgICAgICAgICAgIHNlbGYuc2Vlbl9ydW5fdGFyZ2V0KGRlcCkKICAgICAgICAgICAgIGlmIGRlcCBpbiBzZWxmLmZhaWxlZF9yZGVwczoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChmbmlkKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbihmbikKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgIGRlZiBhZGRfZXh0cmFfZGVwcyhzZWxmLCBmbiwgZGF0YUNhY2hlKToKQEAgLTI2Myw5ICsxODMsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgSGF2ZSB3ZSBhIGJ1aWxkIHRhcmdldCBtYXRjaGluZyB0aGlzIG5hbWU/CiAgICAgICAgICIiIgotICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQodGFyZ2V0KQotCi0gICAgICAgIGlmIHRhcmdldGlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgaWYgdGFyZ2V0IGluIHNlbGYuYnVpbGRfdGFyZ2V0cyBhbmQgc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF06CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIApAQCAtMjczLDUwICsxOTEsNTQgQEAKICAgICAgICAgIiIiCiAgICAgICAgIEhhdmUgd2UgYSBydW50aW1lIHRhcmdldCBtYXRjaGluZyB0aGlzIG5hbWU/CiAgICAgICAgICIiIgotICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0cnVuX2lkKHRhcmdldCkKLQotICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICBpZiB0YXJnZXQgaW4gc2VsZi5ydW5fdGFyZ2V0cyBhbmQgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICBkZWYgc2Vlbl9idWlsZF90YXJnZXQoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBNYWludGFpbiBhIGxpc3Qgb2YgYnVpbGQgdGFyZ2V0cworICAgICAgICAiIiIKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5idWlsZF90YXJnZXRzOgorICAgICAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzW25hbWVdID0gW10KKwogICAgIGRlZiBhZGRfYnVpbGRfdGFyZ2V0KHNlbGYsIGZuLCBpdGVtKToKICAgICAgICAgIiIiCiAgICAgICAgIEFkZCBhIGJ1aWxkIHRhcmdldC4KICAgICAgICAgSWYgYWxyZWFkeSBwcmVzZW50LCBhcHBlbmQgdGhlIHByb3ZpZGVyIGZuIHRvIHRoZSBsaXN0CiAgICAgICAgICIiIgotICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKLSAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCi0KLSAgICAgICAgaWYgdGFyZ2V0aWQgaW4gc2VsZi5idWlsZF90YXJnZXRzOgotICAgICAgICAgICAgaWYgZm5pZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdOgorICAgICAgICBpZiBpdGVtIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIGlmIGZuIGluIHNlbGYuYnVpbGRfdGFyZ2V0c1tpdGVtXToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0uYXBwZW5kKGZuaWQpCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3RhcmdldHNbaXRlbV0uYXBwZW5kKGZuKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0gPSBbZm5pZF0KKyAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzW2l0ZW1dID0gW2ZuXQorCisgICAgZGVmIHNlZW5fcnVuX3RhcmdldChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIE1haW50YWluIGEgbGlzdCBvZiBydW50aW1lIGJ1aWxkIHRhcmdldHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5hbWUgbm90IGluIHNlbGYucnVuX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLnJ1bl90YXJnZXRzW25hbWVdID0gW10KIAogICAgIGRlZiBhZGRfcnVudGltZV90YXJnZXQoc2VsZiwgZm4sIGl0ZW0pOgogICAgICAgICAiIiIKICAgICAgICAgQWRkIGEgcnVudGltZSB0YXJnZXQuCiAgICAgICAgIElmIGFscmVhZHkgcHJlc2VudCwgYXBwZW5kIHRoZSBwcm92aWRlciBmbiB0byB0aGUgbGlzdAogICAgICAgICAiIiIKLSAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldHJ1bl9pZChpdGVtKQotICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKLQotICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLnJ1bl90YXJnZXRzOgotICAgICAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnJ1bl90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgaWYgaXRlbSBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgaWYgZm4gaW4gc2VsZi5ydW5fdGFyZ2V0c1tpdGVtXToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0aWRdLmFwcGVuZChmbmlkKQorICAgICAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1tpdGVtXS5hcHBlbmQoZm4pCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRpZF0gPSBbZm5pZF0KKyAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1tpdGVtXSA9IFtmbl0KIAotICAgIGRlZiBtYXJrX2V4dGVybmFsX3RhcmdldChzZWxmLCBpdGVtKToKKyAgICBkZWYgbWFya19leHRlcm5hbF90YXJnZXQoc2VsZiwgdGFyZ2V0KToKICAgICAgICAgIiIiCiAgICAgICAgIE1hcmsgYSBidWlsZCB0YXJnZXQgYXMgYmVpbmcgZXh0ZXJuYWxseSByZXF1ZXN0ZWQKICAgICAgICAgIiIiCi0gICAgICAgIHRhcmdldGlkID0gc2VsZi5nZXRidWlsZF9pZChpdGVtKQotCi0gICAgICAgIGlmIHRhcmdldGlkIG5vdCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHM6Ci0gICAgICAgICAgICBzZWxmLmV4dGVybmFsX3RhcmdldHMuYXBwZW5kKHRhcmdldGlkKQorICAgICAgICBpZiB0YXJnZXQgbm90IGluIHNlbGYuZXh0ZXJuYWxfdGFyZ2V0czoKKyAgICAgICAgICAgIHNlbGYuZXh0ZXJuYWxfdGFyZ2V0cy5hcHBlbmQodGFyZ2V0KQogCiAgICAgZGVmIGdldF91bnJlc29sdmVkX2J1aWxkX3RhcmdldHMoc2VsZiwgZGF0YUNhY2hlKToKICAgICAgICAgIiIiCkBAIC0zMjQsMTIgKzI0NiwxMiBAQAogICAgICAgICBhcmUgdW5rbm93bi4KICAgICAgICAgIiIiCiAgICAgICAgIHVucmVzb2x2ZWQgPSBbXQotICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXg6CisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5idWlsZF90YXJnZXRzOgogICAgICAgICAgICAgaWYgcmVfbWF0Y2hfc3RyaW5ncyh0YXJnZXQsIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXguaW5kZXgodGFyZ2V0KSBpbiBzZWxmLmZhaWxlZF9kZXBzOgorICAgICAgICAgICAgaWYgdGFyZ2V0IGluIHNlbGYuZmFpbGVkX2RlcHM6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhdmVfYnVpbGRfdGFyZ2V0KHRhcmdldCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF06CiAgICAgICAgICAgICAgICAgdW5yZXNvbHZlZC5hcHBlbmQodGFyZ2V0KQogICAgICAgICByZXR1cm4gdW5yZXNvbHZlZAogCkBAIC0zMzksMTIgKzI2MSwxMiBAQAogICAgICAgICBhcmUgdW5rbm93bi4KICAgICAgICAgIiIiCiAgICAgICAgIHVucmVzb2x2ZWQgPSBbXQotICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYucnVuX25hbWVzX2luZGV4OgorICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYucnVuX3RhcmdldHM6CiAgICAgICAgICAgICBpZiByZV9tYXRjaF9zdHJpbmdzKHRhcmdldCwgZGF0YUNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzKToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgc2VsZi5ydW5fbmFtZXNfaW5kZXguaW5kZXgodGFyZ2V0KSBpbiBzZWxmLmZhaWxlZF9yZGVwczoKKyAgICAgICAgICAgIGlmIHRhcmdldCBpbiBzZWxmLmZhaWxlZF9yZGVwczoKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90IHNlbGYuaGF2ZV9ydW50aW1lX3RhcmdldCh0YXJnZXQpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0XToKICAgICAgICAgICAgICAgICB1bnJlc29sdmVkLmFwcGVuZCh0YXJnZXQpCiAgICAgICAgIHJldHVybiB1bnJlc29sdmVkCiAKQEAgLTM1Miw1MCArMjc0LDI2IEBACiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHByb3ZpZGVycyBvZiBpdGVtCiAgICAgICAgICIiIgotICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRfdGFyZ2V0c1tpdGVtXQogCi0gICAgICAgIHJldHVybiBzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdCi0KLSAgICBkZWYgZ2V0X2RlcGVuZGVlcyhzZWxmLCBpdGVtaWQpOgorICAgIGRlZiBnZXRfZGVwZW5kZWVzKHNlbGYsIGl0ZW0pOgogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBpdGVtCiAgICAgICAgICIiIgogICAgICAgICBkZXBlbmRlZXMgPSBbXQotICAgICAgICBmb3IgZm5pZCBpbiBzZWxmLmRlcGlkczoKLSAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLmRlcGlkc1tmbmlkXToKLSAgICAgICAgICAgICAgICBkZXBlbmRlZXMuYXBwZW5kKGZuaWQpCisgICAgICAgIGZvciBmbiBpbiBzZWxmLmRlcGlkczoKKyAgICAgICAgICAgIGlmIGl0ZW0gaW4gc2VsZi5kZXBpZHNbZm5dOgorICAgICAgICAgICAgICAgIGRlcGVuZGVlcy5hcHBlbmQoZm4pCiAgICAgICAgIHJldHVybiBkZXBlbmRlZXMKIAotICAgIGRlZiBnZXRfZGVwZW5kZWVzX3N0cihzZWxmLCBpdGVtKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gaXRlbSBhcyBhIHVzZXIgcmVhZGFibGUgc3RyaW5nCi0gICAgICAgICIiIgotICAgICAgICBpdGVtaWQgPSBzZWxmLmdldGJ1aWxkX2lkKGl0ZW0pCi0gICAgICAgIGRlcGVuZGVlcyA9IFtdCi0gICAgICAgIGZvciBmbmlkIGluIHNlbGYuZGVwaWRzOgotICAgICAgICAgICAgaWYgaXRlbWlkIGluIHNlbGYuZGVwaWRzW2ZuaWRdOgotICAgICAgICAgICAgICAgIGRlcGVuZGVlcy5hcHBlbmQoc2VsZi5mbl9pbmRleFtmbmlkXSkKLSAgICAgICAgcmV0dXJuIGRlcGVuZGVlcwotCi0gICAgZGVmIGdldF9yZGVwZW5kZWVzKHNlbGYsIGl0ZW1pZCk6CisgICAgZGVmIGdldF9yZGVwZW5kZWVzKHNlbGYsIGl0ZW0pOgogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBydW50aW1lIGl0ZW0KICAgICAgICAgIiIiCiAgICAgICAgIGRlcGVuZGVlcyA9IFtdCi0gICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKLSAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06Ci0gICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChmbmlkKQotICAgICAgICByZXR1cm4gZGVwZW5kZWVzCi0KLSAgICBkZWYgZ2V0X3JkZXBlbmRlZXNfc3RyKHNlbGYsIGl0ZW0pOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBydW50aW1lIGl0ZW0gYXMgYSB1c2VyIHJlYWRhYmxlIHN0cmluZwotICAgICAgICAiIiIKLSAgICAgICAgaXRlbWlkID0gc2VsZi5nZXRydW5faWQoaXRlbSkKLSAgICAgICAgZGVwZW5kZWVzID0gW10KLSAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5yZGVwaWRzOgotICAgICAgICAgICAgaWYgaXRlbWlkIGluIHNlbGYucmRlcGlkc1tmbmlkXToKLSAgICAgICAgICAgICAgICBkZXBlbmRlZXMuYXBwZW5kKHNlbGYuZm5faW5kZXhbZm5pZF0pCisgICAgICAgIGZvciBmbiBpbiBzZWxmLnJkZXBpZHM6CisgICAgICAgICAgICBpZiBpdGVtIGluIHNlbGYucmRlcGlkc1tmbl06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChmbikKICAgICAgICAgcmV0dXJuIGRlcGVuZGVlcwogCiAgICAgZGVmIGdldF9yZWFzb25zKHNlbGYsIGl0ZW0sIHJ1bnRpbWU9RmFsc2UpOgpAQCAtNDMxLDcgKzMyOSw3IEBACiAgICAgICAgIGV4Y2VwdCBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcjoKICAgICAgICAgICAgIGlmIHNlbGYuYWJvcnQ6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHNlbGYucmVtb3ZlX2J1aWxkdGFyZ2V0KHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkpCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9idWlsZHRhcmdldChpdGVtKQogCiAgICAgICAgIHNlbGYubWFya19leHRlcm5hbF90YXJnZXQoaXRlbSkKIApAQCAtNDQ2LDE0ICszNDQsMTQgQEAKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGlmIG5vdCBpdGVtIGluIGRhdGFDYWNoZS5wcm92aWRlcnM6Ci0gICAgICAgICAgICBjbG9zZV9tYXRjaGVzID0gc2VsZi5nZXRfY2xvc2VfbWF0Y2hlcyhpdGVtLCBkYXRhQ2FjaGUucHJvdmlkZXJzLmtleXMoKSkKKyAgICAgICAgICAgIGNsb3NlX21hdGNoZXMgPSBzZWxmLmdldF9jbG9zZV9tYXRjaGVzKGl0ZW0sIGxpc3QoZGF0YUNhY2hlLnByb3ZpZGVycy5rZXlzKCkpKQogICAgICAgICAgICAgIyBJcyBpdCBpbiBSdW50aW1lUHJvdmlkZXJzID8KICAgICAgICAgICAgIGFsbF9wID0gYmIucHJvdmlkZXJzLmdldFJ1bnRpbWVQcm92aWRlcnMoZGF0YUNhY2hlLCBpdGVtKQogICAgICAgICAgICAgZm9yIGZuIGluIGFsbF9wOgogICAgICAgICAgICAgICAgIG5ldyA9IGRhdGFDYWNoZS5wa2dfZm5bZm5dICsgIiBSUFJPVklERVMgIiArIGl0ZW0KICAgICAgICAgICAgICAgICBpZiBuZXcgbm90IGluIGNsb3NlX21hdGNoZXM6CiAgICAgICAgICAgICAgICAgICAgIGNsb3NlX21hdGNoZXMuYXBwZW5kKG5ldykKLSAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTm9Qcm92aWRlcihpdGVtLCBkZXBlbmRlZXM9c2VsZi5nZXRfZGVwZW5kZWVzX3N0cihpdGVtKSwgcmVhc29ucz1zZWxmLmdldF9yZWFzb25zKGl0ZW0pLCBjbG9zZV9tYXRjaGVzPWNsb3NlX21hdGNoZXMpLCBjZmdEYXRhKQorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIGRlcGVuZGVlcz1zZWxmLmdldF9kZXBlbmRlZXMoaXRlbSksIHJlYXNvbnM9c2VsZi5nZXRfcmVhc29ucyhpdGVtKSwgY2xvc2VfbWF0Y2hlcz1jbG9zZV9tYXRjaGVzKSwgY2ZnRGF0YSkKICAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKGl0ZW0pCiAKICAgICAgICAgaWYgc2VsZi5oYXZlX2J1aWxkX3RhcmdldChpdGVtKToKQEAgLTQ2MiwxMCArMzYwLDEwIEBACiAgICAgICAgIGFsbF9wID0gZGF0YUNhY2hlLnByb3ZpZGVyc1tpdGVtXQogCiAgICAgICAgIGVsaWdpYmxlLCBmb3VuZFVuaXF1ZSA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnMoYWxsX3AsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSkKLSAgICAgICAgZWxpZ2libGUgPSBbcCBmb3IgcCBpbiBlbGlnaWJsZSBpZiBub3Qgc2VsZi5nZXRmbl9pZChwKSBpbiBzZWxmLmZhaWxlZF9mbmlkc10KKyAgICAgICAgZWxpZ2libGUgPSBbcCBmb3IgcCBpbiBlbGlnaWJsZSBpZiBub3QgcCBpbiBzZWxmLmZhaWxlZF9mbnNdCiAKICAgICAgICAgaWYgbm90IGVsaWdpYmxlOgotICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIGRlcGVuZGVlcz1zZWxmLmdldF9kZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPVsiTm8gZWxpZ2libGUgUFJPVklERVJzIGV4aXN0IGZvciAnJXMnIiAlIGl0ZW1dKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTm9Qcm92aWRlcihpdGVtLCBkZXBlbmRlZXM9c2VsZi5nZXRfZGVwZW5kZWVzKGl0ZW0pLCByZWFzb25zPVsiTm8gZWxpZ2libGUgUFJPVklERVJzIGV4aXN0IGZvciAnJXMnIiAlIGl0ZW1dKSwgY2ZnRGF0YSkKICAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKGl0ZW0pCiAKICAgICAgICAgaWYgbGVuKGVsaWdpYmxlKSA+IDEgYW5kIGZvdW5kVW5pcXVlID09IEZhbHNlOgpAQCAtNDc3LDggKzM3NSw3IEBACiAgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGUuYXBwZW5kKGl0ZW0pCiAKICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgotICAgICAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCi0gICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgaWYgZm4gaW4gc2VsZi5mYWlsZWRfZm5zOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImFkZGluZyAlcyB0byBzYXRpc2Z5ICVzIiwgZm4sIGl0ZW0pCiAgICAgICAgICAgICBzZWxmLmFkZF9idWlsZF90YXJnZXQoZm4sIGl0ZW0pCkBAIC01MDIsMTQgKzM5OSwxNCBAQAogICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKGRhdGFDYWNoZSwgaXRlbSkKIAogICAgICAgICBpZiBub3QgYWxsX3A6Ci0gICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgcnVudGltZT1UcnVlLCBkZXBlbmRlZXM9c2VsZi5nZXRfcmRlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9c2VsZi5nZXRfcmVhc29ucyhpdGVtLCBUcnVlKSksIGNmZ0RhdGEpCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgcnVudGltZT1UcnVlLCBkZXBlbmRlZXM9c2VsZi5nZXRfcmRlcGVuZGVlcyhpdGVtKSwgcmVhc29ucz1zZWxmLmdldF9yZWFzb25zKGl0ZW0sIFRydWUpKSwgY2ZnRGF0YSkKICAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1JQcm92aWRlcihpdGVtKQogCiAgICAgICAgIGVsaWdpYmxlLCBudW1iZXJQcmVmZXJyZWQgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzUnVuVGltZShhbGxfcCwgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKQotICAgICAgICBlbGlnaWJsZSA9IFtwIGZvciBwIGluIGVsaWdpYmxlIGlmIG5vdCBzZWxmLmdldGZuX2lkKHApIGluIHNlbGYuZmFpbGVkX2ZuaWRzXQorICAgICAgICBlbGlnaWJsZSA9IFtwIGZvciBwIGluIGVsaWdpYmxlIGlmIG5vdCBwIGluIHNlbGYuZmFpbGVkX2Zuc10KIAogICAgICAgICBpZiBub3QgZWxpZ2libGU6Ci0gICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgcnVudGltZT1UcnVlLCBkZXBlbmRlZXM9c2VsZi5nZXRfcmRlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9WyJObyBlbGlnaWJsZSBSUFJPVklERVJzIGV4aXN0IGZvciAnJXMnIiAlIGl0ZW1dKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTm9Qcm92aWRlcihpdGVtLCBydW50aW1lPVRydWUsIGRlcGVuZGVlcz1zZWxmLmdldF9yZGVwZW5kZWVzKGl0ZW0pLCByZWFzb25zPVsiTm8gZWxpZ2libGUgUlBST1ZJREVScyBleGlzdCBmb3IgJyVzJyIgJSBpdGVtXSksIGNmZ0RhdGEpCiAgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIoaXRlbSkKIAogICAgICAgICBpZiBsZW4oZWxpZ2libGUpID4gMSBhbmQgbnVtYmVyUHJlZmVycmVkID09IDA6CkBAIC01MzEsODIgKzQyOCw4MCBAQAogCiAgICAgICAgICMgcnVuIHRocm91Z2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBvbmUgdGhhdCB3ZSBjYW4gYnVpbGQKICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgotICAgICAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCi0gICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgaWYgZm4gaW4gc2VsZi5mYWlsZWRfZm5zOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImFkZGluZyAnJXMnIHRvIHNhdGlzZnkgcnVudGltZSAnJXMnIiwgZm4sIGl0ZW0pCiAgICAgICAgICAgICBzZWxmLmFkZF9ydW50aW1lX3RhcmdldChmbiwgaXRlbSkKICAgICAgICAgICAgIHNlbGYuYWRkX3Rhc2tzKGZuLCBkYXRhQ2FjaGUpCiAKLSAgICBkZWYgZmFpbF9mbmlkKHNlbGYsIGZuaWQsIG1pc3NpbmdfbGlzdD1Ob25lKToKKyAgICBkZWYgZmFpbF9mbihzZWxmLCBmbiwgbWlzc2luZ19saXN0PU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgTWFyayBhIGZpbGUgYXMgZmFpbGVkICh1bmJ1aWxkYWJsZSkKICAgICAgICAgUmVtb3ZlIGFueSByZWZlcmVuY2VzIGZyb20gYnVpbGQgYW5kIHJ1bnRpbWUgcHJvdmlkZXIgbGlzdHMKIAogICAgICAgICBtaXNzaW5nX2xpc3QsIEEgbGlzdCBvZiBtaXNzaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0YXJnZXQKICAgICAgICAgIiIiCi0gICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgIGlmIGZuIGluIHNlbGYuZmFpbGVkX2ZuczoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBub3QgbWlzc2luZ19saXN0OgogICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW10KLSAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJGaWxlICclcycgaXMgdW5idWlsZGFibGUsIHJlbW92aW5nLi4uIiwgc2VsZi5mbl9pbmRleFtmbmlkXSkKLSAgICAgICAgc2VsZi5mYWlsZWRfZm5pZHMuYXBwZW5kKGZuaWQpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiRmlsZSAnJXMnIGlzIHVuYnVpbGRhYmxlLCByZW1vdmluZy4uLiIsIGZuKQorICAgICAgICBzZWxmLmZhaWxlZF9mbnMuYXBwZW5kKGZuKQogICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKLSAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF06Ci0gICAgICAgICAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF0ucmVtb3ZlKGZuaWQpCisgICAgICAgICAgICBpZiBmbiBpbiBzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0XS5yZW1vdmUoZm4pCiAgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdKSA9PSAwOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9idWlsZHRhcmdldCh0YXJnZXQsIG1pc3NpbmdfbGlzdCkKICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJ1bl90YXJnZXRzOgotICAgICAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnJ1bl90YXJnZXRzW3RhcmdldF06Ci0gICAgICAgICAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdLnJlbW92ZShmbmlkKQorICAgICAgICAgICAgaWYgZm4gaW4gc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdOgorICAgICAgICAgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0XS5yZW1vdmUoZm4pCiAgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0XSkgPT0gMDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcnVudGFyZ2V0KHRhcmdldCwgbWlzc2luZ19saXN0KQogCi0gICAgZGVmIHJlbW92ZV9idWlsZHRhcmdldChzZWxmLCB0YXJnZXRpZCwgbWlzc2luZ19saXN0PU5vbmUpOgorICAgIGRlZiByZW1vdmVfYnVpbGR0YXJnZXQoc2VsZiwgdGFyZ2V0LCBtaXNzaW5nX2xpc3Q9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBNYXJrIGEgYnVpbGQgdGFyZ2V0IGFzIGZhaWxlZCAodW5idWlsZGFibGUpCiAgICAgICAgIFRyaWdnZXIgcmVtb3ZhbCBvZiBhbnkgZmlsZXMgdGhhdCBoYXZlIHRoaXMgYXMgYSBkZXBlbmRlbmN5CiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgbWlzc2luZ19saXN0OgotICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXQorICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3RhcmdldF0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1pc3NpbmdfbGlzdCA9IFtzZWxmLmJ1aWxkX25hbWVzX2luZGV4W3RhcmdldGlkXV0gKyBtaXNzaW5nX2xpc3QKLSAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIlRhcmdldCAnJXMnIGlzIHVuYnVpbGRhYmxlLCByZW1vdmluZy4uLlxuTWlzc2luZyBvciB1bmJ1aWxkYWJsZSBkZXBlbmRlbmN5IGNoYWluIHdhczogJXMiLCBzZWxmLmJ1aWxkX25hbWVzX2luZGV4W3RhcmdldGlkXSwgbWlzc2luZ19saXN0KQotICAgICAgICBzZWxmLmZhaWxlZF9kZXBzLmFwcGVuZCh0YXJnZXRpZCkKLSAgICAgICAgZGVwZW5kZWVzID0gc2VsZi5nZXRfZGVwZW5kZWVzKHRhcmdldGlkKQotICAgICAgICBmb3IgZm5pZCBpbiBkZXBlbmRlZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChmbmlkLCBtaXNzaW5nX2xpc3QpCi0gICAgICAgIGZvciB0YXNraWQgaW4geHJhbmdlKGxlbihzZWxmLnRhc2tzX2lkZXBlbmRzKSk6Ci0gICAgICAgICAgICBpZGVwZW5kcyA9IHNlbGYudGFza3NfaWRlcGVuZHNbdGFza2lkXQotICAgICAgICAgICAgZm9yIChpZGVwZW5kaWQsIGlkZXBlbmR0YXNrKSBpbiBpZGVwZW5kczoKLSAgICAgICAgICAgICAgICBpZiBpZGVwZW5kaWQgPT0gdGFyZ2V0aWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKHNlbGYudGFza3NfZm5pZFt0YXNraWRdLCBtaXNzaW5nX2xpc3QpCisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbdGFyZ2V0XSArIG1pc3NpbmdfbGlzdAorICAgICAgICBsb2dnZXIudmVyYm9zZSgiVGFyZ2V0ICclcycgaXMgdW5idWlsZGFibGUsIHJlbW92aW5nLi4uXG5NaXNzaW5nIG9yIHVuYnVpbGRhYmxlIGRlcGVuZGVuY3kgY2hhaW4gd2FzOiAlcyIsIHRhcmdldCwgbWlzc2luZ19saXN0KQorICAgICAgICBzZWxmLmZhaWxlZF9kZXBzLmFwcGVuZCh0YXJnZXQpCisgICAgICAgIGRlcGVuZGVlcyA9IHNlbGYuZ2V0X2RlcGVuZGVlcyh0YXJnZXQpCisgICAgICAgIGZvciBmbiBpbiBkZXBlbmRlZXM6CisgICAgICAgICAgICBzZWxmLmZhaWxfZm4oZm4sIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgZm9yIChpZGVwZW5kLCBpZGVwZW5kdGFzaykgaW4gc2VsZi50YXNrZW50cmllc1t0aWRdLmlkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmIGlkZXBlbmQgPT0gdGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICBmbiA9IHRpZC5yc3BsaXQoIjoiLDEpWzBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbihmbiwgbWlzc2luZ19saXN0KQogCi0gICAgICAgIGlmIHNlbGYuYWJvcnQgYW5kIHRhcmdldGlkIGluIHNlbGYuZXh0ZXJuYWxfdGFyZ2V0czoKLSAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdCisgICAgICAgIGlmIHNlbGYuYWJvcnQgYW5kIHRhcmdldCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHM6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlJlcXVpcmVkIGJ1aWxkIHRhcmdldCAnJXMnIGhhcyBubyBidWlsZGFibGUgcHJvdmlkZXJzLlxuTWlzc2luZyBvciB1bmJ1aWxkYWJsZSBkZXBlbmRlbmN5IGNoYWluIHdhczogJXMiLCB0YXJnZXQsIG1pc3NpbmdfbGlzdCkKICAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKHRhcmdldCkKIAotICAgIGRlZiByZW1vdmVfcnVudGFyZ2V0KHNlbGYsIHRhcmdldGlkLCBtaXNzaW5nX2xpc3Q9Tm9uZSk6CisgICAgZGVmIHJlbW92ZV9ydW50YXJnZXQoc2VsZiwgdGFyZ2V0LCBtaXNzaW5nX2xpc3Q9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBNYXJrIGEgcnVuIHRhcmdldCBhcyBmYWlsZWQgKHVuYnVpbGRhYmxlKQogICAgICAgICBUcmlnZ2VyIHJlbW92YWwgb2YgYW55IGZpbGVzIHRoYXQgaGF2ZSB0aGlzIGFzIGEgZGVwZW5kZW5jeQogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IG1pc3NpbmdfbGlzdDoKLSAgICAgICAgICAgIG1pc3NpbmdfbGlzdCA9IFtzZWxmLnJ1bl9uYW1lc19pbmRleFt0YXJnZXRpZF1dCisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbdGFyZ2V0XQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYucnVuX25hbWVzX2luZGV4W3RhcmdldGlkXV0gKyBtaXNzaW5nX2xpc3QKKyAgICAgICAgICAgIG1pc3NpbmdfbGlzdCA9IFt0YXJnZXRdICsgbWlzc2luZ19saXN0CiAKLSAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bnRpbWUgdGFyZ2V0ICclcycgaXMgdW5idWlsZGFibGUsIHJlbW92aW5nLi4uXG5NaXNzaW5nIG9yIHVuYnVpbGRhYmxlIGRlcGVuZGVuY3kgY2hhaW4gd2FzOiAlcyIsIHNlbGYucnVuX25hbWVzX2luZGV4W3RhcmdldGlkXSwgbWlzc2luZ19saXN0KQotICAgICAgICBzZWxmLmZhaWxlZF9yZGVwcy5hcHBlbmQodGFyZ2V0aWQpCi0gICAgICAgIGRlcGVuZGVlcyA9IHNlbGYuZ2V0X3JkZXBlbmRlZXModGFyZ2V0aWQpCi0gICAgICAgIGZvciBmbmlkIGluIGRlcGVuZGVlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKGZuaWQsIG1pc3NpbmdfbGlzdCkKLSAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2UobGVuKHNlbGYudGFza3NfaXJkZXBlbmRzKSk6Ci0gICAgICAgICAgICBpcmRlcGVuZHMgPSBzZWxmLnRhc2tzX2lyZGVwZW5kc1t0YXNraWRdCi0gICAgICAgICAgICBmb3IgKGlkZXBlbmRpZCwgaWRlcGVuZHRhc2spIGluIGlyZGVwZW5kczoKLSAgICAgICAgICAgICAgICBpZiBpZGVwZW5kaWQgPT0gdGFyZ2V0aWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKHNlbGYudGFza3NfZm5pZFt0YXNraWRdLCBtaXNzaW5nX2xpc3QpCisgICAgICAgIGxvZ2dlci5pbmZvKCJSdW50aW1lIHRhcmdldCAnJXMnIGlzIHVuYnVpbGRhYmxlLCByZW1vdmluZy4uLlxuTWlzc2luZyBvciB1bmJ1aWxkYWJsZSBkZXBlbmRlbmN5IGNoYWluIHdhczogJXMiLCB0YXJnZXQsIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgc2VsZi5mYWlsZWRfcmRlcHMuYXBwZW5kKHRhcmdldCkKKyAgICAgICAgZGVwZW5kZWVzID0gc2VsZi5nZXRfcmRlcGVuZGVlcyh0YXJnZXQpCisgICAgICAgIGZvciBmbiBpbiBkZXBlbmRlZXM6CisgICAgICAgICAgICBzZWxmLmZhaWxfZm4oZm4sIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgZm9yIChpZGVwZW5kLCBpZGVwZW5kdGFzaykgaW4gc2VsZi50YXNrZW50cmllc1t0aWRdLmlyZGVwZW5kczoKKyAgICAgICAgICAgICAgICBpZiBpZGVwZW5kID09IHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgZm4gPSB0aWQucnNwbGl0KCI6IiwxKVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxfZm4oZm4sIG1pc3NpbmdfbGlzdCkKIAogICAgIGRlZiBhZGRfdW5yZXNvbHZlZChzZWxmLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgogICAgICAgICAiIiIKQEAgLTYyMCwxNyArNTE1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkX3Byb3ZpZGVyX2ludGVybmFsKGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFyZ2V0KQogICAgICAgICAgICAgICAgICAgICBhZGRlZCA9IGFkZGVkICsgMQogICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcjoKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKHRhcmdldCkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5hYm9ydCBhbmQgdGFyZ2V0aWQgaW4gc2VsZi5leHRlcm5hbF90YXJnZXRzIGFuZCBub3Qgc2VsZi5hbGxvd2luY29tcGxldGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuYWJvcnQgYW5kIHRhcmdldCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHMgYW5kIG5vdCBzZWxmLmFsbG93aW5jb21wbGV0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFsbG93aW5jb21wbGV0ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX2J1aWxkdGFyZ2V0KHRhcmdldGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfYnVpbGR0YXJnZXQodGFyZ2V0KQogICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmdldF91bnJlc29sdmVkX3J1bl90YXJnZXRzKGRhdGFDYWNoZSk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZF9ycHJvdmlkZXIoY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXJnZXQpCiAgICAgICAgICAgICAgICAgICAgIGFkZGVkID0gYWRkZWQgKyAxCiAgICAgICAgICAgICAgICAgZXhjZXB0IChiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIsIGJiLnByb3ZpZGVycy5NdWx0aXBsZVJQcm92aWRlcik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3J1bnRhcmdldChzZWxmLmdldHJ1bl9pZCh0YXJnZXQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9ydW50YXJnZXQodGFyZ2V0KQogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZXNvbHZlZCAiICsgc3RyKGFkZGVkKSArICIgZXh0cmEgZGVwZW5kZW5jaWVzIikKICAgICAgICAgICAgIGlmIGFkZGVkID09IDA6CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTYzOCwxMyArNTMyLDEzIEBACiAKICAgICBkZWYgZ2V0X3Byb3ZpZGVybWFwKHNlbGYsIHByZWZpeD1Ob25lKToKICAgICAgICAgcHJvdm1hcCA9IHt9Ci0gICAgICAgIGZvciBuYW1lIGluIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXg6CisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKICAgICAgICAgICAgIGlmIHByZWZpeCBhbmQgbm90IG5hbWUuc3RhcnRzd2l0aChwcmVmaXgpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBzZWxmLmhhdmVfYnVpbGRfdGFyZ2V0KG5hbWUpOgogICAgICAgICAgICAgICAgIHByb3ZpZGVyID0gc2VsZi5nZXRfcHJvdmlkZXIobmFtZSkKICAgICAgICAgICAgICAgICBpZiBwcm92aWRlcjoKLSAgICAgICAgICAgICAgICAgICAgcHJvdm1hcFtuYW1lXSA9IHNlbGYuZm5faW5kZXhbcHJvdmlkZXJbMF1dCisgICAgICAgICAgICAgICAgICAgIHByb3ZtYXBbbmFtZV0gPSBwcm92aWRlclswXQogICAgICAgICByZXR1cm4gcHJvdm1hcAogCiAgICAgZGVmIGR1bXBfZGF0YShzZWxmKToKQEAgLTY1MiwzOSArNTQ2LDM3IEBACiAgICAgICAgIER1bXAgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCiAgICAgICAgICIiIgogICAgICAgICBsb2dnZXIuZGVidWcoMywgImJ1aWxkX25hbWVzOiIpCi0gICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiLCAiLmpvaW4oc2VsZi5idWlsZF9uYW1lc19pbmRleCkpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiLCAiLmpvaW4oc2VsZi5idWlsZF90YXJnZXRzKSkKIAogICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bl9uYW1lczoiKQotICAgICAgICBsb2dnZXIuZGVidWcoMywgIiwgIi5qb2luKHNlbGYucnVuX25hbWVzX2luZGV4KSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIsICIuam9pbihzZWxmLnJ1bl90YXJnZXRzKSkKIAogICAgICAgICBsb2dnZXIuZGVidWcoMywgImJ1aWxkX3RhcmdldHM6IikKLSAgICAgICAgZm9yIGJ1aWxkaWQgaW4geHJhbmdlKGxlbihzZWxmLmJ1aWxkX25hbWVzX2luZGV4KSk6Ci0gICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmJ1aWxkX25hbWVzX2luZGV4W2J1aWxkaWRdCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5idWlsZF90YXJnZXRzOgogICAgICAgICAgICAgdGFyZ2V0cyA9ICJOb25lIgotICAgICAgICAgICAgaWYgYnVpbGRpZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6Ci0gICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHNlbGYuYnVpbGRfdGFyZ2V0c1tidWlsZGlkXQotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgKCVzKSVzOiAlcyIsIGJ1aWxkaWQsIHRhcmdldCwgdGFyZ2V0cykKKyAgICAgICAgICAgIGlmIHRhcmdldCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAlczogJXMiLCB0YXJnZXQsIHRhcmdldHMpCiAKICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW5fdGFyZ2V0czoiKQotICAgICAgICBmb3IgcnVuaWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bl9uYW1lc19pbmRleCkpOgotICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5ydW5fbmFtZXNfaW5kZXhbcnVuaWRdCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ydW5fdGFyZ2V0czoKICAgICAgICAgICAgIHRhcmdldHMgPSAiTm9uZSIKLSAgICAgICAgICAgIGlmIHJ1bmlkIGluIHNlbGYucnVuX3RhcmdldHM6Ci0gICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHNlbGYucnVuX3RhcmdldHNbcnVuaWRdCi0gICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXM6ICVzIiwgcnVuaWQsIHRhcmdldCwgdGFyZ2V0cykKKyAgICAgICAgICAgIGlmIHRhcmdldCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgICAgIHRhcmdldHMgPSBzZWxmLnJ1bl90YXJnZXRzW3RhcmdldF0KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICVzOiAlcyIsIHRhcmdldCwgdGFyZ2V0cykKIAogICAgICAgICBsb2dnZXIuZGVidWcoMywgInRhc2tzOiIpCi0gICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi50YXNrc19uYW1lKSk6Ci0gICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXMgLSAlczogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICB0YXNrLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZuX2luZGV4W3NlbGYudGFza3NfZm5pZFt0YXNrXV0sCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza3NfbmFtZVt0YXNrXSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrc190ZGVwZW5kc1t0YXNrXSkKKyAgICAgICAgZm9yIHRpZCBpbiBzZWxmLnRhc2tlbnRyaWVzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgJXM6ICVzICVzICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGlkLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tlbnRyaWVzW3RpZF0uaWRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza2VudHJpZXNbdGlkXS5pcmRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza2VudHJpZXNbdGlkXS50ZGVwZW5kcykKIAogICAgICAgICBsb2dnZXIuZGVidWcoMywgImRlcGVuZGVuY3kgaWRzIChwZXIgZm4pOiIpCi0gICAgICAgIGZvciBmbmlkIGluIHNlbGYuZGVwaWRzOgotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgJXMgJXM6ICVzIiwgZm5pZCwgc2VsZi5mbl9pbmRleFtmbmlkXSwgc2VsZi5kZXBpZHNbZm5pZF0pCisgICAgICAgIGZvciBmbiBpbiBzZWxmLmRlcGlkczoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICVzOiAlcyIsIGZuLCBzZWxmLmRlcGlkc1tmbl0pCiAKICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW50aW1lIGRlcGVuZGVuY3kgaWRzIChwZXIgZm4pOiIpCi0gICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICVzICVzOiAlcyIsIGZuaWQsIHNlbGYuZm5faW5kZXhbZm5pZF0sIHNlbGYucmRlcGlkc1tmbmlkXSkKKyAgICAgICAgZm9yIGZuIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICVzOiAlcyIsIGZuLCBzZWxmLnJkZXBpZHNbZm5dKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2NvZGVwYXJzZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY29kZXBhcnNlci5weQppbmRleCBiYjgyMGU0Li4xNGYwZTI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY29kZXBhcnNlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY29kZXBhcnNlci5weQpAQCAtMTkxLDggKzE5MSw4IEBACiAgICAgICAgIGlmIGhhc2F0dHIoYmIudXRpbHMsICJfY29udGV4dCIpOgogICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gYmIudXRpbHMuX2NvbnRleHQKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXwotICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gX19idWlsdGluX18uX19kaWN0X18KKyAgICAgICAgICAgIGltcG9ydCBidWlsdGlucworICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gYnVpbHRpbnMuX19kaWN0X18KIAogICAgIGRlZiBwYXJzZUV4cHJlc3Npb24oc2VsZiwgZXhwKToKICAgICAgICAgcGFyc2VkdmFyID0gc2VsZi5kLmV4cGFuZFdpdGhSZWZzKGV4cCwgTm9uZSkKQEAgLTMwMiw3ICszMDIsNyBAQAogCiAgICAgICAgIGRlcHMsIHZhbHVlcyA9IGJiLmRhdGEuYnVpbGRfZGVwZW5kZW5jaWVzKCJGT08iLCBzZXQoc2VsZi5kLmtleXMoKSksIHNldCgpLCBzZXQoKSwgc2VsZi5kKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbInNvbWV2YXIiLCAiYmFyIiwgInNvbWV0aGluZyIsICJpbmV4cGFuZCIsICJ0ZXN0IiwgInRlc3QyIiwgImEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVwcywgc2V0KFsic29tZXZhciIsICJiYXIiLCAic29tZXRoaW5nIiwgImluZXhwYW5kIiwgInRlc3QiLCAidGVzdDIiLCAiYSJdKSkKIAogCiAgICAgc2hlbGxkYXRhID0gIiIiCkBAIC0zNDksNyArMzQ5LDcgQEAKIAogICAgICAgICBkZXBzLCB2YWx1ZXMgPSBiYi5kYXRhLmJ1aWxkX2RlcGVuZGVuY2llcygiRk9PIiwgc2V0KHNlbGYuZC5rZXlzKCkpLCBzZXQoKSwgc2V0KCksIHNlbGYuZCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJzb21ldmFyIiwgImludmVydGVkIl0gKyBleGVjcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVwcywgc2V0KFsic29tZXZhciIsICJpbnZlcnRlZCJdICsgZXhlY3MpKQogCiAKICAgICBkZWYgdGVzdF92YXJkZXBzKHNlbGYpOgpAQCAtMzU5LDcgKzM1OSw3IEBACiAKICAgICAgICAgZGVwcywgdmFsdWVzID0gYmIuZGF0YS5idWlsZF9kZXBlbmRlbmNpZXMoIkZPTyIsIHNldChzZWxmLmQua2V5cygpKSwgc2V0KCksIHNldCgpLCBzZWxmLmQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVwcywgc2V0KFsib2VfbGliaW5zdGFsbCJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXBzLCBzZXQoWyJvZV9saWJpbnN0YWxsIl0pKQogCiAgICAgZGVmIHRlc3RfdmFyZGVwc19leHBhbmQoc2VsZik6CiAgICAgICAgIHNlbGYuZC5zZXRWYXIoIm9lX2xpYmluc3RhbGwiLCAiZWNobyB0ZXN0IikKQEAgLTM2OCw3ICszNjgsNyBAQAogCiAgICAgICAgIGRlcHMsIHZhbHVlcyA9IGJiLmRhdGEuYnVpbGRfZGVwZW5kZW5jaWVzKCJGT08iLCBzZXQoc2VsZi5kLmtleXMoKSksIHNldCgpLCBzZXQoKSwgc2VsZi5kKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbIm9lX2xpYmluc3RhbGwiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVwcywgc2V0KFsib2VfbGliaW5zdGFsbCJdKSkKIAogICAgICNDdXJyZW50bHkgbm8gd2lsZGNhcmQgc3VwcG9ydAogICAgICNkZWYgdGVzdF92YXJkZXBzX3dpbGRjYXJkcyhzZWxmKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb3cucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY293LnB5CmluZGV4IDM1YzU4NDEuLmQxNDlkODQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb3cucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2Nvdy5weQpAQCAtMzQsMTQgKzM0LDE0IEBACiAgICAgICAgIGZyb20gYmIuQ09XIGltcG9ydCBDT1dEaWN0QmFzZQogICAgICAgICBhID0gQ09XRGljdEJhc2UuY29weSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGEuaGFzX2tleSgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnYScgaW4gYSkKIAogICAgICAgICBhWydhJ10gPSAnYScKICAgICAgICAgYVsnYiddID0gJ2InCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGEuaGFzX2tleSgnYScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBhLmhhc19rZXkoJ2InKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2EnLCBhWydhJ10gKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnYicsIGFbJ2InXSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgJ2EnIGluIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgJ2InIGluIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2EnLCBhWydhJ10gKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiJywgYVsnYiddICkKIAogICAgIGRlZiB0ZXN0Q29weUNvcHkoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNjAsMzEgKzYwLDMxIEBACiAgICAgICAgIGNbJ2EnXSA9IDMwCiAKICAgICAgICAgIyB0ZXN0IHNlcGFyYXRpb24gb2YgdGhlIHR3byBpbnN0YW5jZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnYycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzMCwgY1snYSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMCwgYlsnYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnYycgaW4gYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzMCwgY1snYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBiWydhJ10pCiAKICAgICAgICAgIyB0ZXN0IGNvcHkKICAgICAgICAgYl8yID0gYi5jb3B5KCkKICAgICAgICAgY18yID0gYy5jb3B5KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAsIGJfMlsnYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnYycgaW4gY18yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBiXzJbJ2EnXSkKIAogICAgICAgICBiXzJbJ2QnXSA9IDQwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBiXzIuaGFzX2tleSgnZCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0MCwgYl8yWydkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiLmhhc19rZXkoJ2QnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnZCcgaW4gY18yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsICdkJyBpbiBiXzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDAsIGJfMlsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnZCcgaW4gYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgJ2QnIGluIGMpCiAKICAgICAgICAgY18yWydkJ10gPSAzMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBjXzIuaGFzX2tleSgnZCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBiXzIuaGFzX2tleSgnZCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzMCwgY18yWydkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQwLCBiXzJbJ2QnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGIuaGFzX2tleSgnZCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYy5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgJ2QnIGluIGNfMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCAnZCcgaW4gYl8yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMwLCBjXzJbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MCwgYl8yWydkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsICdkJyBpbiBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnZCcgaW4gYykKIAogICAgICAgICAjIHRlc3QgY29weSBvZiB0aGUgY29weQogICAgICAgICBjXzMgPSBjXzIuY29weSgpCkBAIC05MiwxOSArOTIsMTkgQEAKICAgICAgICAgYl8zXzIgPSBiXzIuY29weSgpCiAKICAgICAgICAgY18zWydlJ10gPSA0NzExCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNfM1snZSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfMy5oYXNfa2V5KCdlJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiXzNfMi5oYXNfa2V5KCdlJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiXzIuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQ3MTEsIGNfM1snZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnZScgaW4gY18yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnZScgaW4gYl8zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnZScgaW4gYl8zXzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsICdlJyBpbiBiXzIpCiAKICAgICAgICAgYl8zWydlJ10gPSAndmllbCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3ZpZWwnLCBiXzNbJ2UnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY18zWydlJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBiXzMuaGFzX2tleSgnZScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8zXzIuaGFzX2tleSgnZScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndmllbCcsIGJfM1snZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQ3MTEsIGNfM1snZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCAnZScgaW4gY18yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsICdlJyBpbiBiXzMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsICdlJyBpbiBiXzNfMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgJ2UnIGluIGJfMikKIAogICAgIGRlZiB0ZXN0Q293KHNlbGYpOgogICAgICAgICBmcm9tIGJiLkNPVyBpbXBvcnQgQ09XRGljdEJhc2UKQEAgLTExNSwxMiArMTE1LDEyIEBACiAKICAgICAgICAgY29weSA9IGMuY29weSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyNywgY1snMTIzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNbJ290aGVyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoxMCwgJ2JjZCc6MjB9LCBjWydkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwMjcsIGNvcHlbJzEyMyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0NzExLCBjb3B5WydvdGhlciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7J2FiYyc6MTAsICdiY2QnOjIwfSwgY29weVsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwMjcsIGNbJzEyMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQ3MTEsIGNbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeydhYmMnOjEwLCAnYmNkJzoyMH0sIGNbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMDI3LCBjb3B5WycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0NzExLCBjb3B5WydvdGhlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsnYWJjJzoxMCwgJ2JjZCc6MjB9LCBjb3B5WydkJ10pCiAKICAgICAgICAgIyBjb3cgaXQgbm93CiAgICAgICAgIGNvcHlbJzEyMyddID0gMTAyOApAQCAtMTI4LDkgKzEyOCw5IEBACiAgICAgICAgIGNvcHlbJ2QnXVsnYWJjJ10gPSAyMAogCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyNywgY1snMTIzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNbJ290aGVyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoxMCwgJ2JjZCc6MjB9LCBjWydkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwMjgsIGNvcHlbJzEyMyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0NzEyLCBjb3B5WydvdGhlciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7J2FiYyc6MjAsICdiY2QnOjIwfSwgY29weVsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwMjcsIGNbJzEyMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQ3MTEsIGNbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeydhYmMnOjEwLCAnYmNkJzoyMH0sIGNbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMDI4LCBjb3B5WycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0NzEyLCBjb3B5WydvdGhlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsnYWJjJzoyMCwgJ2JjZCc6MjB9LCBjb3B5WydkJ10pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZGF0YS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9kYXRhLnB5CmluZGV4IDEyMjMyMzAuLmI1NGViMDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9kYXRhLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9kYXRhLnB5CkBAIC0xNDcsMTQgKzE0NywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoImZvbyIsIEZhbHNlKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6Ci0gICAgICAgIGtleXMgPSBzZWxmLmQua2V5cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWyd2YWx1ZV9vZl9mb28nLCAnZm9vJywgJ2JhciddKQorICAgICAgICBrZXlzID0gbGlzdChzZWxmLmQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoa2V5cywgWyd2YWx1ZV9vZl9mb28nLCAnZm9vJywgJ2JhciddKQogCiAgICAgZGVmIHRlc3Rfa2V5c19kZWxldGlvbihzZWxmKToKICAgICAgICAgbmV3ZCA9IGJiLmRhdGEuY3JlYXRlQ29weShzZWxmLmQpCiAgICAgICAgIG5ld2QuZGVsVmFyKCJiYXIiKQotICAgICAgICBrZXlzID0gbmV3ZC5rZXlzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBbJ3ZhbHVlX29mX2ZvbycsICdmb28nXSkKKyAgICAgICAga2V5cyA9IGxpc3QobmV3ZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChrZXlzLCBbJ3ZhbHVlX29mX2ZvbycsICdmb28nXSkKIAogY2xhc3MgVGVzdE5lc3RlZEV4cGFuc2lvbnModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTMzNCw3ICszMzQsNyBAQAogICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUMl9iYXIiLCAidGVzdHZhbHVlMiIpCiAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QyIiwgVHJ1ZSksICJ0ZXN0dmFsdWUyIikKLSAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNlbGYuZC5rZXlzKCksIFsnVEVTVCcsICdURVNUMicsICdPVkVSUklERVMnLCAnVEVTVDJfYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChsaXN0KHNlbGYuZC5rZXlzKCkpLCBbJ1RFU1QnLCAnVEVTVDInLCAnT1ZFUlJJREVTJywgJ1RFU1QyX2JhciddKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfb3ZlcnJpZGUoc2VsZik6CiAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfYmFyIiwgInRlc3R2YWx1ZTIiKQpAQCAtMzQyLDcgKzM0Miw3IEBACiAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfZm9vIiwgInRlc3R2YWx1ZTQiKQogICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJ0ZXN0dmFsdWUzIikKLSAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNlbGYuZC5rZXlzKCksIFsnVEVTVCcsICdURVNUX2ZvbycsICdPVkVSUklERVMnLCAnVEVTVF9iYXInLCAnVEVTVF9sb2NhbCddKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwobGlzdChzZWxmLmQua2V5cygpKSwgWydURVNUJywgJ1RFU1RfZm9vJywgJ09WRVJSSURFUycsICdURVNUX2JhcicsICdURVNUX2xvY2FsJ10pCiAKICAgICBkZWYgdGVzdF9tdWx0aXBsZV9jb21iaW5lZF9vdmVycmlkZXMoc2VsZik6CiAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfbG9jYWxfZm9vX2JhciIsICJ0ZXN0dmFsdWUzIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9mZXRjaC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9mZXRjaC5weQppbmRleCA0YmE2ODhiLi4wZmQyYzAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZmV0Y2gucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5CkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IG9zCiBmcm9tIGJiLmZldGNoMiBpbXBvcnQgVVJJCiBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKQEAgLTEzMywxMCArMTM0LDEwIEBACiAgICAgICAgICAgICAndXNlcmluZm8nOiAnYW5vbmN2czphbm9ueW1vdXMnLAogICAgICAgICAgICAgJ3VzZXJuYW1lJzogJ2Fub25jdnMnLAogICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJ2Fub255bW91cycsCi0gICAgICAgICAgICAncGFyYW1zJzogewotICAgICAgICAgICAgICAgICd0YWcnOiAnVjAtOTktODEnLAotICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJwotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdwYXJhbXMnOiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdChbCisgICAgICAgICAgICAgICAgKCd0YWcnLCAnVjAtOTktODEnKSwKKyAgICAgICAgICAgICAgICAoJ21vZHVsZScsICdmYW1pbGlhci9kaXN0L2lwa2cnKQorICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAncXVlcnknOiB7fSwKICAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCiAgICAgICAgIH0sCkBAIC0zNTksNyArMzYwLDEwIEBACiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIG9zLmNoZGlyKHNlbGYub3JpZ2RpcikKLSAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi50ZW1wZGlyKQorICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgiQkJfVE1QRElSX05PQ0xFQU4iKSA9PSAieWVzIjoKKyAgICAgICAgICAgIHByaW50KCJOb3QgY2xlYW5pbmcgdXAgJXMuIFBsZWFzZSByZW1vdmUgbWFudWFsbHkuIiAlIHNlbGYudGVtcGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHNlbGYudGVtcGRpcikKIAogY2xhc3MgTWlycm9yVXJpVGVzdChGZXRjaGVyVGVzdCk6CiAKQEAgLTQ1MCw3ICs0NTQsNyBAQAogY2xhc3MgRmV0Y2hlckxvY2FsVGVzdChGZXRjaGVyVGVzdCk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBkZWYgdG91Y2goZm4pOgotICAgICAgICAgICAgd2l0aCBmaWxlKGZuLCAnYScpOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnYScpOgogICAgICAgICAgICAgICAgIG9zLnV0aW1lKGZuLCBOb25lKQogCiAgICAgICAgIHN1cGVyKEZldGNoZXJMb2NhbFRlc3QsIHNlbGYpLnNldFVwKCkKQEAgLTUwNCw2ICs1MDgsMTUgQEAKICAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vZGlyL3N1YmRpci9lO3N1YmRpcj1iYXInXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ2Jhci9kaXIvc3ViZGlyL2UnXSkKIAorICAgIGRlZiB0ZXN0X2xvY2FsX2Fic29sdXRlZGlyKHNlbGYpOgorICAgICAgICAjIFVucGFja2luZyB0byBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHJvb3QKKyAgICAgICAgIyBzaG91bGQgd29yaworICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hO3N1YmRpcj0lcycgJSBvcy5wYXRoLmpvaW4oc2VsZi51bnBhY2tkaXIsICdiYXInKV0pCisKKyAgICAgICAgIyBVbnBhY2tpbmcgdG8gYW4gYWJzb2x1dGUgcGF0aCBvdXRzaWRlIG9mIHRoZSByb290IHNob3VsZCBmYWlsCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYmIuZmV0Y2gyLlVucGFja0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vYTtzdWJkaXI9L2Jpbi9zaCddKQorCiBjbGFzcyBGZXRjaGVyTmV0d29ya1Rlc3QoRmV0Y2hlclRlc3QpOgogCiAgICAgaWYgb3MuZW52aXJvbi5nZXQoIkJCX1NLSVBfTkVUVEVTVFMiKSA9PSAieWVzIjoKQEAgLTU4NCw2ICs1OTcsMzYgQEAKICAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PTI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTU7dGFnPTI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5mZXRjaC5GZXRjaEVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybDEsIHVybDIpCiAKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfbG9jYWx1c2VoZWFkKHNlbGYpOgorICAgICAgICAgICAgIyBDcmVhdGUgZHVtbXkgbG9jYWwgR2l0IHJlcG8KKyAgICAgICAgICAgIHNyY19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1zZWxmLnRlbXBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9J2dpdGZldGNoX2xvY2FsdXNlaGVhZF8nKQorICAgICAgICAgICAgc3JjX2RpciA9IG9zLnBhdGguYWJzcGF0aChzcmNfZGlyKQorICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oImdpdCBpbml0IiwgY3dkPXNyY19kaXIpCisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bigiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tJ0R1bW15IGNvbW1pdCciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXNyY19kaXIpCisgICAgICAgICAgICAjIFVzZSBvdGhlciBicmFuY2ggdGhhbiBtYXN0ZXIKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY2hlY2tvdXQgLWIgbXktZGV2ZWwiLCBjd2Q9c3JjX2RpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0nRHVtbXkgY29tbWl0IDInIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zcmNfZGlyKQorICAgICAgICAgICAgc3Rkb3V0ID0gYmIucHJvY2Vzcy5ydW4oImdpdCByZXYtcGFyc2UgSEVBRCIsIGN3ZD1zcmNfZGlyKQorICAgICAgICAgICAgb3JpZ19yZXYgPSBzdGRvdXRbMF0uc3RyaXAoKQorCisgICAgICAgICAgICAjIEZldGNoIGFuZCBjaGVjayByZXZpc2lvbgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiU1JDUkVWIiwgIkFVVE9JTkMiKQorICAgICAgICAgICAgdXJsID0gImdpdDovLyIgKyBzcmNfZGlyICsgIjtwcm90b2NvbD1maWxlO3VzZWhlYWQ9MSIKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgICAgIHN0ZG91dCA9IGJiLnByb2Nlc3MucnVuKCJnaXQgcmV2LXBhcnNlIEhFQUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPW9zLnBhdGguam9pbihzZWxmLnVucGFja2RpciwgJ2dpdCcpKQorICAgICAgICAgICAgdW5wYWNrX3JldiA9IHN0ZG91dFswXS5zdHJpcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdfcmV2LCB1bnBhY2tfcmV2KQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX3JlbW90ZXVzZWhlYWQoc2VsZik6CisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTt1c2VoZWFkPTEiCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5mZXRjaC5QYXJhbWV0ZXJFcnJvciwgc2VsZi5naXRmZXRjaGVyLCB1cmwsIHVybCkKKwogICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3Ioc2VsZik6CiAgICAgICAgICAgICB1cmwxID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCiAgICAgICAgICAgICB1cmwyID0gImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiCkBAIC02NjAsNyArNzAzLDcgQEAKICAgICBkYXRhdGFibGUgPSB7CiAgICAgICAgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbmRleC5odG1sIiA6ICgnaHR0cCcsICd3d3cuZ29vZ2xlLmNvbScsICcvaW5kZXguaHRtbCcsICcnLCAnJywge30pLAogICAgICAgICJjdnM6Ly9hbm9uY3ZzQGN2cy5oYW5kaGVsZHMub3JnL2N2czttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnIiA6ICgnY3ZzJywgJ2N2cy5oYW5kaGVsZHMub3JnJywgJy9jdnMnLCAnYW5vbmN2cycsICcnLCB7J21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnfSksCi0gICAgICAgImN2czovL2Fub25jdnM6YW5vbnltb3VzQGN2cy5oYW5kaGVsZHMub3JnL2N2czt0YWc9VjAtOTktODE7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZyIgOiAoJ2N2cycsICdjdnMuaGFuZGhlbGRzLm9yZycsICcvY3ZzJywgJ2Fub25jdnMnLCAnYW5vbnltb3VzJywgeyd0YWcnOiAnVjAtOTktODEnLCAnbW9kdWxlJzogJ2ZhbWlsaWFyL2Rpc3QvaXBrZyd9KSwKKyAgICAgICAiY3ZzOi8vYW5vbmN2czphbm9ueW1vdXNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO3RhZz1WMC05OS04MTttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnIiA6ICgnY3ZzJywgJ2N2cy5oYW5kaGVsZHMub3JnJywgJy9jdnMnLCAnYW5vbmN2cycsICdhbm9ueW1vdXMnLCBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdChbKCd0YWcnLCAnVjAtOTktODEnKSwgKCdtb2R1bGUnLCAnZmFtaWxpYXIvZGlzdC9pcGtnJyldKSksCiAgICAgICAgImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7YnJhbmNoPUBmb28iIDogKCdnaXQnLCAnZ2l0Lm9wZW5lbWJlZGRlZC5vcmcnLCAnL2JpdGJha2UnLCAnJywgJycsIHsnYnJhbmNoJzogJ0Bmb28nfSksCiAgICAgICAgImZpbGU6Ly9zb21lbG9jYXRpb247c29tZXBhcmFtPTEiOiAoJ2ZpbGUnLCAnJywgJ3NvbWVsb2NhdGlvbicsICcnLCAnJywgeydzb21lcGFyYW0nOiAnMSd9KSwKICAgICB9CkBAIC03NjcsNyArODEwLDYgQEAKIAogY2xhc3MgRmV0Y2hDaGVja1N0YXR1c1Rlc3QoRmV0Y2hlclRlc3QpOgogICAgIHRlc3Rfd2dldF91cmlzID0gWyJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLzEuNy4yL2N1cHMtMS43LjItc291cmNlLnRhci5iejIiLAotICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlL2lwcHRvb2wvaXBwdG9vbC0yMDEzMDczMS1saW51eC11YnVudHUtaTY4Ni50YXIuZ3oiLAogICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LmN1cHMub3JnLyIsCiAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9zYXRvL3NhdG8tZW5naW5lLTAuMS50YXIuZ3oiLAogICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvc2F0by9zYXRvLWVuZ2luZS0wLjIudGFyLmd6IiwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9wYXJzZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9wYXJzZS5weQppbmRleCA2YmViNzZhLi4wYjI3MDZhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3BhcnNlLnB5CkBAIC01MCw3ICs1MCw3IEBACiAgICAgZGVmIHBhcnNlaGVscGVyKHNlbGYsIGNvbnRlbnQsIHN1ZmZpeCA9ICIuYmIiKToKIAogICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHN1ZmZpeCA9IHN1ZmZpeCkKLSAgICAgICAgZi53cml0ZShjb250ZW50KQorICAgICAgICBmLndyaXRlKGJ5dGVzKGNvbnRlbnQsICJ1dGYtOCIpKQogICAgICAgICBmLmZsdXNoKCkKICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKGYubmFtZSkpCiAgICAgICAgIHJldHVybiBmCkBAIC02OCw2ICs2OCwyMyBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLnBhcnNlLlBhcnNlRXJyb3IpOgogICAgICAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCiAKKyAgICB1bnNldHRlc3QgPSAiIiIKK0EgPSAiMSIKK0IgPSAiMiIKK0JbZmxhZ10gPSAiMyIKKwordW5zZXQgQQordW5zZXQgQltmbGFnXQorIiIiCisKKyAgICBkZWYgdGVzdF9wYXJzZV91bnNldChzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi51bnNldHRlc3QpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJBIiwgVHJ1ZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXJGbGFnKCJBIiwiZmxhZyIsIFRydWUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJCIiwgVHJ1ZSksICIyIikKKyAgICAgICAgCisKICAgICBvdmVycmlkZXRlc3QgPSAiIiIKIFJSRUNPTU1FTkRTXyR7UE59ID0gImEiCiBSUkVDT01NRU5EU18ke1BOfV9saWJjID0gImIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90aW5mb2lsLnB5CmluZGV4IDdhYTY1M2YuLjg4OTllODYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90aW5mb2lsLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90aW5mb2lsLnB5CkBAIC01OSw2ICs1OSwxMiBAQAogICAgIGRlZiByZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKICAgICAgICAgcGFzcwogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgc2VsZi5zaHV0ZG93bigpCisKICAgICBkZWYgcGFyc2VSZWNpcGVzKHNlbGYpOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQYXJzaW5nIHJlY2lwZXMuLiIpCiAgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKQEAgLTc0LDE2ICs4MCw1MiBAQAogICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImRvbmUuXG4iKQogCi0gICAgICAgIHNlbGYuY29va2VyX2RhdGEgPSBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZQorICAgICAgICBzZWxmLmNvb2tlcl9kYXRhID0gc2VsZi5jb29rZXIucmVjaXBlY2FjaGVzWycnXQogCiAgICAgZGVmIHByZXBhcmUoc2VsZiwgY29uZmlnX29ubHkgPSBGYWxzZSk6CiAgICAgICAgIGlmIG5vdCBzZWxmLmNvb2tlcl9kYXRhOgogICAgICAgICAgICAgaWYgY29uZmlnX29ubHk6CiAgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIucGFyc2VDb25maWd1cmF0aW9uKCkKLSAgICAgICAgICAgICAgICBzZWxmLmNvb2tlcl9kYXRhID0gc2VsZi5jb29rZXIucmVjaXBlY2FjaGUKKyAgICAgICAgICAgICAgICBzZWxmLmNvb2tlcl9kYXRhID0gc2VsZi5jb29rZXIucmVjaXBlY2FjaGVzWycnXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlUmVjaXBlcygpCiAKKyAgICBkZWYgcGFyc2VfcmVjaXBlX2ZpbGUoc2VsZiwgZm4sIGFwcGVuZHM9VHJ1ZSwgYXBwZW5kbGlzdD1Ob25lLCBjb25maWdfZGF0YT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSBzcGVjaWZpZWQgcmVjaXBlIGZpbGUgKHdpdGggb3Igd2l0aG91dCBiYmFwcGVuZHMpCisgICAgICAgIGFuZCByZXR1cm4gYSBkYXRhc3RvcmUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgZm9yIHRoZSByZWNpcGUuCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgICAgICBmbjogcmVjaXBlIGZpbGUgdG8gcGFyc2UgLSBjYW4gYmUgYSBmaWxlIHBhdGggb3IgdmlydHVhbAorICAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24KKyAgICAgICAgICAgIGFwcGVuZHM6IFRydWUgdG8gYXBwbHkgYmJhcHBlbmRzLCBGYWxzZSBvdGhlcndpc2UKKyAgICAgICAgICAgIGFwcGVuZGxpc3Q6IG9wdGlvbmFsIGxpc3Qgb2YgYmJhcHBlbmQgZmlsZXMgdG8gYXBwbHksIGlmIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byBmaWx0ZXIgdGhlbQorICAgICAgICAgICAgY29uZmlnX2RhdGE6IGN1c3RvbSBjb25maWcgZGF0YXN0b3JlIHRvIHVzZS4gTk9URTogaWYgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBjb25maWdfZGF0YSB0aGVuIHlvdSBjYW5ub3QgdXNlIGEgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGZuLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgYXBwZW5kcyBhbmQgYXBwZW5kbGlzdCA9PSBbXToKKyAgICAgICAgICAgIGFwcGVuZHMgPSBGYWxzZQorICAgICAgICBpZiBhcHBlbmRzOgorICAgICAgICAgICAgaWYgYXBwZW5kbGlzdDoKKyAgICAgICAgICAgICAgICBhcHBlbmRmaWxlcyA9IGFwcGVuZGxpc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5jb29rZXIsICdjb2xsZWN0aW9uJyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignWW91IG11c3QgY2FsbCB0aW5mb2lsLnByZXBhcmUoKSB3aXRoIGNvbmZpZ19vbmx5PUZhbHNlIGluIG9yZGVyIHRvIGdldCBiYmFwcGVuZHMnKQorICAgICAgICAgICAgICAgIGFwcGVuZGZpbGVzID0gc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXBwZW5kZmlsZXMgPSBOb25lCisgICAgICAgIGlmIGNvbmZpZ19kYXRhOgorICAgICAgICAgICAgIyBXZSBoYXZlIHRvIHVzZSBhIGRpZmZlcmVudCBmdW5jdGlvbiBoZXJlIGlmIHdlJ3JlIHBhc3NpbmcgaW4gYSBkYXRhc3RvcmUKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShjb25maWdfZGF0YSkKKyAgICAgICAgICAgIGVudmRhdGEgPSBiYi5jYWNoZS5wYXJzZV9yZWNpcGUobG9jYWxkYXRhLCBmbiwgYXBwZW5kZmlsZXMpWycnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBVc2UgdGhlIHN0YW5kYXJkIHBhdGgKKyAgICAgICAgICAgIHBhcnNlciA9IGJiLmNhY2hlLk5vQ2FjaGUoc2VsZi5jb29rZXIuZGF0YWJ1aWxkZXIpCisgICAgICAgICAgICBlbnZkYXRhID0gcGFyc2VyLmxvYWREYXRhRnVsbChmbiwgYXBwZW5kZmlsZXMpCisgICAgICAgIHJldHVybiBlbnZkYXRhCisKICAgICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY29va2VyLnNodXRkb3duKGZvcmNlPVRydWUpCiAgICAgICAgIHNlbGYuY29va2VyLnBvc3Rfc2VydmUoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9idWlsZGluZm9oZWxwZXIucHkKaW5kZXggOTM5NzkwNS4uNWI2OTY2MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvYnVpbGRpbmZvaGVscGVyLnB5CkBAIC0yMSwyOCArMjEsMjkgQEAKIGltcG9ydCByZQogaW1wb3J0IG9zCiAKLW9zLmVudmlyb25bIkRKQU5HT19TRVRUSU5HU19NT0RVTEUiXSA9ICJ0b2FzdGVyLnRvYXN0ZXJtYWluLnNldHRpbmdzIgotCi0KIGltcG9ydCBkamFuZ28KIGZyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQogCitpbXBvcnQgdG9hc3RlcgorIyBBZGQgdG9hc3RlciBtb2R1bGUgdG8gdGhlIHNlYXJjaCBwYXRoIHRvIGhlbHAgZGphbmdvLnNldHVwKCkgZmluZCB0aGUgcmlnaHQKKyMgbW9kdWxlcworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZSh0b2FzdGVyLl9fZmlsZV9fKSkKIAotZGVmIF9jb25maWd1cmVfdG9hc3RlcigpOgotICAgICIiIiBBZGQgdG9hc3RlciB0byBzeXMgcGF0aCBmb3IgaW1wb3J0aW5nIG1vZHVsZXMKLSAgICAiIiIKLSAgICBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAndG9hc3RlcicpKQotX2NvbmZpZ3VyZV90b2FzdGVyKCkKLQorI1NldCB0aGUgREpBTkdPX1NFVFRJTkdTX01PRFVMRSBpZiBpdCdzIG5vdCBhbHJlYWR5IHNldAorb3MuZW52aXJvblsiREpBTkdPX1NFVFRJTkdTX01PRFVMRSJdID1cCisgICAgb3MuZW52aXJvbi5nZXQoIkRKQU5HT19TRVRUSU5HU19NT0RVTEUiLAorICAgICAgICAgICAgICAgICAgICJ0b2FzdGVyLnRvYXN0ZXJtYWluLnNldHRpbmdzIikKKyMgU2V0dXAgZGphbmdvIGZyYW1ld29yayAobmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgaW1wb3J0aW5nIG1vZHVsZXMpCiBkamFuZ28uc2V0dXAoKQogCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkLCBUYXNrLCBSZWNpcGUsIExheWVyX1ZlcnNpb24sIExheWVyLCBUYXJnZXQsIExvZ01lc3NhZ2UsIEhlbHBUZXh0Ci1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhcmdldF9JbWFnZV9GaWxlLCBCdWlsZEFydGlmYWN0Citmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhcmdldF9JbWFnZV9GaWxlLCBUYXJnZXRLZXJuZWxGaWxlLCBUYXJnZXRTREtGaWxlCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFZhcmlhYmxlLCBWYXJpYWJsZUhpc3RvcnkKIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgUGFja2FnZSwgUGFja2FnZV9GaWxlLCBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UsIFRhcmdldF9GaWxlCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhc2tfRGVwZW5kZW5jeSwgUGFja2FnZV9EZXBlbmRlbmN5CiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFJlY2lwZV9EZXBlbmRlbmN5LCBQcm92aWRlcwogZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBDdXN0b21JbWFnZVBhY2thZ2UsIEN1c3RvbUltYWdlUmVjaXBlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IHNpZ25hbF9ydW5idWlsZHMKIAogZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRSZXF1ZXN0CiAKQEAgLTU0LDExICs1NSwxMSBAQAogCiBmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24KIAorCiAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICMgdGhlIGxvZ2dlciBuYW1lIGlzIHN0YW5kYXJkIHRocm91Z2hvdXQgQml0QmFrZQogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJMb2dnZXIiKQogCi0KIGNsYXNzIE5vdEV4aXN0aW5nKEV4Y2VwdGlvbik6CiAgICAgcGFzcwogCkBAIC0xMjEsMTEgKzEyMiwyNyBAQAogCiAgICAgICAgIHJldHVybiB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldCiAKKyAgICBkZWYgZ2V0X3NpbWlsYXJfdGFyZ2V0X3dpdGhfaW1hZ2VfZmlsZXMoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBhIFRhcmdldCBvYmplY3QgInNpbWlsYXIiIHRvIHRhcmdldDsgaS5lLiB3aXRoIHRoZSBzYW1lIHRhcmdldAorICAgICAgICBuYW1lICgnY29yZS1pbWFnZS1taW5pbWFsJyBldGMuKSBhbmQgbWFjaGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB0YXJnZXQuZ2V0X3NpbWlsYXJfdGFyZ2V0X3dpdGhfaW1hZ2VfZmlsZXMoKQorCisgICAgZGVmIGdldF9zaW1pbGFyX3RhcmdldF93aXRoX3Nka19maWxlcyhzZWxmLCB0YXJnZXQpOgorICAgICAgICByZXR1cm4gdGFyZ2V0LmdldF9zaW1pbGFyX3RhcmdldF93aXRoX3Nka19maWxlcygpCisKKyAgICBkZWYgY2xvbmVfaW1hZ2VfYXJ0aWZhY3RzKHNlbGYsIHRhcmdldF9mcm9tLCB0YXJnZXRfdG8pOgorICAgICAgICB0YXJnZXRfdG8uY2xvbmVfaW1hZ2VfYXJ0aWZhY3RzX2Zyb20odGFyZ2V0X2Zyb20pCisKKyAgICBkZWYgY2xvbmVfc2RrX2FydGlmYWN0cyhzZWxmLCB0YXJnZXRfZnJvbSwgdGFyZ2V0X3RvKToKKyAgICAgICAgdGFyZ2V0X3RvLmNsb25lX3Nka19hcnRpZmFjdHNfZnJvbSh0YXJnZXRfZnJvbSkKKwogICAgIGRlZiBfdGltZXN0YW1wX3RvX2RhdGV0aW1lKHNlbGYsIHNlY3MpOgogICAgICAgICAiIiIKICAgICAgICAgQ29udmVydCB0aW1lc3RhbXAgaW4gc2Vjb25kcyB0byBQeXRob24gZGF0ZXRpbWUKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBkYXRldGltZSgxOTcwLCAxLCAxKSArIHRpbWVkZWx0YShzZWNvbmRzPXNlY3MpCisgICAgICAgIHJldHVybiB0aW1lem9uZS5tYWtlX2F3YXJlKGRhdGV0aW1lKDE5NzAsIDEsIDEpICsgdGltZWRlbHRhKHNlY29uZHM9c2VjcykpCiAKICAgICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLXVzZQogICAgICMgd2UgZGlzYWJsZSBkZXRlY3Rpb24gb2Ygbm8gc2VsZiB1c2UgaW4gZnVuY3Rpb25zIGJlY2F1c2UgdGhlIG1ldGhvZHMgYWN0dWFsbHkgd29yayBvbiB0aGUgb2JqZWN0CkBAIC0xMzQsNTUgKzE1MSwzMyBAQAogICAgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1jb250aW51YXRpb24KICAgICAjIHdlIGRvIG5vdCBmb2xsb3cgdGhlIHB5dGhvbiBjb252ZW50aW9ucyBmb3IgY29udGludWF0aW9uIGluZGVudGF0aW9uIGR1ZSB0byBsb25nIGxpbmVzIGhlcmUKIAotICAgIGRlZiBjcmVhdGVfYnVpbGRfb2JqZWN0KHNlbGYsIGJ1aWxkX2luZm8sIGJyYmUsIHByb2plY3RfaWQpOgotICAgICAgICBhc3NlcnQgJ21hY2hpbmUnIGluIGJ1aWxkX2luZm8KLSAgICAgICAgYXNzZXJ0ICdkaXN0cm8nIGluIGJ1aWxkX2luZm8KLSAgICAgICAgYXNzZXJ0ICdkaXN0cm9fdmVyc2lvbicgaW4gYnVpbGRfaW5mbwotICAgICAgICBhc3NlcnQgJ3N0YXJ0ZWRfb24nIGluIGJ1aWxkX2luZm8KLSAgICAgICAgYXNzZXJ0ICdjb29rZXJfbG9nX3BhdGgnIGluIGJ1aWxkX2luZm8KLSAgICAgICAgYXNzZXJ0ICdidWlsZF9uYW1lJyBpbiBidWlsZF9pbmZvCi0gICAgICAgIGFzc2VydCAnYml0YmFrZV92ZXJzaW9uJyBpbiBidWlsZF9pbmZvCi0KKyAgICBkZWYgZ2V0X29yX2NyZWF0ZV9idWlsZF9vYmplY3Qoc2VsZiwgYnJiZSk6CiAgICAgICAgIHByaiA9IE5vbmUKICAgICAgICAgYnVpbGRyZXF1ZXN0ID0gTm9uZQotICAgICAgICBpZiBicmJlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICMgdGhpcyBidWlsZCB3YXMgdHJpZ2dlcmVkIGJ5IGEgcmVxdWVzdCBmcm9tIGEgdXNlcgorICAgICAgICBpZiBicmJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBUb2FzdGVyLXRyaWdnZXJlZCBidWlsZAogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IGJyYmUgaXMgJXMiICUgYnJiZSkKICAgICAgICAgICAgIGJyLCBfID0gYnJiZS5zcGxpdCgiOiIpCi0gICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicikKKyAgICAgICAgICAgIGJ1aWxkcmVxdWVzdCA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmdldChwaz1icikKICAgICAgICAgICAgIHByaiA9IGJ1aWxkcmVxdWVzdC5wcm9qZWN0Ci0KLSAgICAgICAgZWxpZiBwcm9qZWN0X2lkIGlzIG5vdCBOb25lOiAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhbiBleHRlcm5hbCBzeXN0ZW0gZm9yIGEgc3BlY2lmaWMgcHJvamVjdAotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IHByb2plY3QgaXMgJXMiICUgcHJqKQotICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IHByb2plY3RfaWQpCi0KLSAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhIGxlZ2FjeSBzeXN0ZW0sIG9yIGNvbW1hbmQgbGluZSBpbnRlcmFjdGl2ZSBtb2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIENMSSBidWlsZAogICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldF9vcl9jcmVhdGVfZGVmYXVsdF9wcm9qZWN0KCkKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBwcm9qZWN0IGlzIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRpbmcgdG8gJXMiICUgcHJqKQogCi0KICAgICAgICAgaWYgYnVpbGRyZXF1ZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyByZXVzZSBleGlzdGluZyBCdWlsZCBvYmplY3QKICAgICAgICAgICAgIGJ1aWxkID0gYnVpbGRyZXF1ZXN0LmJ1aWxkCi0gICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRpbmcgZXhpc3RpbmcgYnVpbGQsIHdpdGggJXMiLCBidWlsZF9pbmZvKQogICAgICAgICAgICAgYnVpbGQucHJvamVjdCA9IHByagotICAgICAgICAgICAgYnVpbGQubWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10KLSAgICAgICAgICAgIGJ1aWxkLmRpc3Rybz1idWlsZF9pbmZvWydkaXN0cm8nXQotICAgICAgICAgICAgYnVpbGQuZGlzdHJvX3ZlcnNpb249YnVpbGRfaW5mb1snZGlzdHJvX3ZlcnNpb24nXQotICAgICAgICAgICAgYnVpbGQuY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddCi0gICAgICAgICAgICBidWlsZC5idWlsZF9uYW1lPWJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXQotICAgICAgICAgICAgYnVpbGQuYml0YmFrZV92ZXJzaW9uPWJ1aWxkX2luZm9bJ2JpdGJha2VfdmVyc2lvbiddCiAgICAgICAgICAgICBidWlsZC5zYXZlKCkKLQogICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjcmVhdGUgbmV3IEJ1aWxkIG9iamVjdAorICAgICAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKICAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0ID0gcHJqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm89YnVpbGRfaW5mb1snZGlzdHJvJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm9fdmVyc2lvbj1idWlsZF9pbmZvWydkaXN0cm9fdmVyc2lvbiddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1idWlsZF9pbmZvWydzdGFydGVkX29uJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249YnVpbGRfaW5mb1snc3RhcnRlZF9vbiddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfbmFtZT1idWlsZF9pbmZvWydidWlsZF9uYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249YnVpbGRfaW5mb1snYml0YmFrZV92ZXJzaW9uJ10pCisgICAgICAgICAgICAgICAgcHJvamVjdD1wcmosCisgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdywKKyAgICAgICAgICAgICAgICBidWlsZF9uYW1lPScnKQogCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBidWlsZCBpcyBjcmVhdGVkICVzIiAlIGJ1aWxkKQogCkBAIC0xOTIsOCArMTg3LDE3IEBACiAKICAgICAgICAgcmV0dXJuIGJ1aWxkCiAKKyAgICBkZWYgdXBkYXRlX2J1aWxkKHNlbGYsIGJ1aWxkLCBkYXRhX2RpY3QpOgorICAgICAgICBmb3Iga2V5IGluIGRhdGFfZGljdDoKKyAgICAgICAgICAgIHNldGF0dHIoYnVpbGQsIGtleSwgZGF0YV9kaWN0W2tleV0pCisgICAgICAgIGJ1aWxkLnNhdmUoKQorCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBnZXRfb3JfY3JlYXRlX3RhcmdldHModGFyZ2V0X2luZm8pOgorICAgICAgICAiIiIKKyAgICAgICAgTkIgZ2V0X29yX2NyZWF0ZSgpIGlzIHVzZWQgaGVyZSBiZWNhdXNlIGZvciBUb2FzdGVyLXRyaWdnZXJlZCBidWlsZHMsCisgICAgICAgIHdlIGFscmVhZHkgY3JlYXRlZCB0aGUgdGFyZ2V0cyB3aGVuIHRoZSBidWlsZCB3YXMgdHJpZ2dlcmVkLgorICAgICAgICAiIiIKICAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICAgZm9yIHRhcmdldCBpbiB0YXJnZXRfaW5mb1sndGFyZ2V0cyddOgogICAgICAgICAgICAgdGFzayA9ICcnCkBAIC0yMDMsMTcgKzIwNywxNCBAQAogICAgICAgICAgICAgICAgIHRhc2sgPSB0YXNrWzM6XQogICAgICAgICAgICAgaWYgdGFzayA9PSAnYnVpbGQnOgogICAgICAgICAgICAgICAgIHRhc2sgPSAnJwotICAgICAgICAgICAgb2JqLCBjcmVhdGVkID0gVGFyZ2V0Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZShidWlsZD10YXJnZXRfaW5mb1snYnVpbGQnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PXRhcmdldCkKLSAgICAgICAgICAgIGlmIGNyZWF0ZWQ6Ci0gICAgICAgICAgICAgICAgb2JqLmlzX2ltYWdlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBpZiB0YXNrOgotICAgICAgICAgICAgICAgICAgICBvYmoudGFzayA9IHRhc2sKLSAgICAgICAgICAgICAgICBvYmouc2F2ZSgpCisKKyAgICAgICAgICAgIG9iaiwgXyA9IFRhcmdldC5vYmplY3RzLmdldF9vcl9jcmVhdGUoYnVpbGQ9dGFyZ2V0X2luZm9bJ2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD10YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s9dGFzaykKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQob2JqKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgdXBkYXRlX2J1aWxkX29iamVjdChzZWxmLCBidWlsZCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKToKKyAgICBkZWYgdXBkYXRlX2J1aWxkX3N0YXRzX2FuZF9vdXRjb21lKHNlbGYsIGJ1aWxkLCBlcnJvcnMsIHdhcm5pbmdzLCB0YXNrZmFpbHVyZXMpOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZCxCdWlsZCkKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZXJyb3JzLCBpbnQpCiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHdhcm5pbmdzLCBpbnQpCkBAIC0yMzQsMTEgKzIzNSwxNiBAQAogICAgICAgICBidWlsZC5jb21wbGV0ZWRfb24gPSB0aW1lem9uZS5ub3coKQogICAgICAgICBidWlsZC5vdXRjb21lID0gb3V0Y29tZQogICAgICAgICBidWlsZC5zYXZlKCkKKyAgICAgICAgc2lnbmFsX3J1bmJ1aWxkcygpCiAKICAgICBkZWYgdXBkYXRlX3RhcmdldF9zZXRfbGljZW5zZV9tYW5pZmVzdChzZWxmLCB0YXJnZXQsIGxpY2Vuc2VfbWFuaWZlc3RfcGF0aCk6CiAgICAgICAgIHRhcmdldC5saWNlbnNlX21hbmlmZXN0X3BhdGggPSBsaWNlbnNlX21hbmlmZXN0X3BhdGgKICAgICAgICAgdGFyZ2V0LnNhdmUoKQogCisgICAgZGVmIHVwZGF0ZV90YXJnZXRfc2V0X3BhY2thZ2VfbWFuaWZlc3Qoc2VsZiwgdGFyZ2V0LCBwYWNrYWdlX21hbmlmZXN0X3BhdGgpOgorICAgICAgICB0YXJnZXQucGFja2FnZV9tYW5pZmVzdF9wYXRoID0gcGFja2FnZV9tYW5pZmVzdF9wYXRoCisgICAgICAgIHRhcmdldC5zYXZlKCkKKwogICAgIGRlZiB1cGRhdGVfdGFza19vYmplY3Qoc2VsZiwgYnVpbGQsIHRhc2tfbmFtZSwgcmVjaXBlX25hbWUsIHRhc2tfc3RhdHMpOgogICAgICAgICAiIiIKICAgICAgICAgRmluZCB0aGUgdGFzayBmb3IgYnVpbGQgd2hpY2ggbWF0Y2hlcyB0aGUgcmVjaXBlIGFuZCB0YXNrIG5hbWUKQEAgLTM3Miw3ICszNzgsNyBAQAogICAgICAgICAgICAgbGF5ZXJfY29weSwgYyA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAogICAgICAgICAgICAgICAgIGJ1aWxkPWJ1aWxkX29iaiwKICAgICAgICAgICAgICAgICBsYXllcj1sYXllcl9vYmoubGF5ZXIsCi0gICAgICAgICAgICAgICAgdXBfYnJhbmNoPWxheWVyX29iai51cF9icmFuY2gsCisgICAgICAgICAgICAgICAgcmVsZWFzZT1sYXllcl9vYmoucmVsZWFzZSwKICAgICAgICAgICAgICAgICBicmFuY2g9bGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsnYnJhbmNoJ10sCiAgICAgICAgICAgICAgICAgY29tbWl0PWxheWVyX3ZlcnNpb25faW5mb3JtYXRpb25bJ2NvbW1pdCddLAogICAgICAgICAgICAgICAgIGxvY2FsX3BhdGg9bGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsnbG9jYWxfcGF0aCddLApAQCAtNDE1LDEzICs0MjEsMjQgQEAKICAgICAgICAgYXNzZXJ0ICduYW1lJyBpbiBsYXllcl9pbmZvcm1hdGlvbgogICAgICAgICBhc3NlcnQgJ2xheWVyX2luZGV4X3VybCcgaW4gbGF5ZXJfaW5mb3JtYXRpb24KIAorICAgICAgICAjIEZyb20gY29tbWFuZCBsaW5lIGJ1aWxkcyB3ZSBoYXZlIG5vIGJyYmUgYXMgdGhlIHJlcXVlc3QgaXMgZGlyZWN0bHkKKyAgICAgICAgIyBmcm9tIGJpdGJha2UKICAgICAgICAgaWYgYnJiZSBpcyBOb25lOgotICAgICAgICAgICAgbGF5ZXJfb2JqZWN0LCBfID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWxheWVyX2luZm9ybWF0aW9uWyduYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX2luZGV4X3VybD1sYXllcl9pbmZvcm1hdGlvblsnbGF5ZXJfaW5kZXhfdXJsJ10pCisgICAgICAgICAgICAjIElmIHdlIGRvbid0IGhhdmUgZ2l0IGNvbW1pdCBzaGEgdGhlbiB3ZSdyZSB1c2luZyBhIG5vbi1naXQKKyAgICAgICAgICAgICMgbGF5ZXIgc28gc2V0IHRoZSBsYXllcl9zb3VyY2VfZGlyIHRvIGlkZW50aWZ5IGl0IGFzIHN1Y2gKKyAgICAgICAgICAgIGlmIG5vdCBsYXllcl9pbmZvcm1hdGlvblsndmVyc2lvbiddWydjb21taXQnXToKKyAgICAgICAgICAgICAgICBsb2NhbF9zb3VyY2VfZGlyID0gbGF5ZXJfaW5mb3JtYXRpb25bImxvY2FsX3BhdGgiXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2NhbF9zb3VyY2VfZGlyID0gTm9uZQorCisgICAgICAgICAgICBsYXllcl9vYmplY3QsIF8gPSBcCisgICAgICAgICAgICAgICAgTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICBuYW1lPWxheWVyX2luZm9ybWF0aW9uWyduYW1lJ10sCisgICAgICAgICAgICAgICAgICAgIGxvY2FsX3NvdXJjZV9kaXI9bG9jYWxfc291cmNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJfaW5kZXhfdXJsPWxheWVyX2luZm9ybWF0aW9uWydsYXllcl9pbmRleF91cmwnXSkKKwogICAgICAgICAgICAgcmV0dXJuIGxheWVyX29iamVjdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyB3ZSBhcmUgdW5kZXIgbWFuYWdlZCBtb2RlOyB3ZSBtdXN0IG1hdGNoIHRoZSBsYXllciB1c2VkIGluIHRoZSBQcm9qZWN0IExheWVyCiAgICAgICAgICAgICBicl9pZCwgYmVfaWQgPSBicmJlLnNwbGl0KCI6IikKIAogICAgICAgICAgICAgIyBmaW5kIGxheWVyIGJ5IGNoZWNrb3V0IHBhdGg7CkBAIC00MzQsNyArNDUxLDExIEBACiAgICAgICAgICAgICAjIG5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudAogICAgICAgICAgICAgYnVpbGRyZXF1ZXN0ID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZ2V0KHBrID0gYnJfaWQpCiAgICAgICAgICAgICBmb3IgYnJsIGluIGJ1aWxkcmVxdWVzdC5icmxheWVyX3NldC5hbGwoKToKLSAgICAgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oYmMuZ2V0R2l0Q2xvbmVEaXJlY3RvcnkoYnJsLmdpdHVybCwgYnJsLmNvbW1pdCksIGJybC5kaXJwYXRoKQorICAgICAgICAgICAgICAgIGlmIGJybC5sb2NhbF9zb3VyY2VfZGlyOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oYnJsLmxvY2FsX3NvdXJjZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmwuZGlycGF0aCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oYmMuZ2V0R2l0Q2xvbmVEaXJlY3RvcnkoYnJsLmdpdHVybCwgYnJsLmNvbW1pdCksIGJybC5kaXJwYXRoKQogICAgICAgICAgICAgICAgICMgd2UgZ2V0IGEgcmVsYXRpdmUgcGF0aCwgdW5sZXNzIHJ1bm5pbmcgaW4gSEVBRCBtb2RlIHdoZXJlIHRoZSBwYXRoIGlzIGFic29sdXRlCiAgICAgICAgICAgICAgICAgaWYgbm90IGxvY2FsZGlybmFtZS5zdGFydHN3aXRoKCIvIik6CiAgICAgICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihiYy5iZS5zb3VyY2VkaXIsIGxvY2FsZGlybmFtZSkKQEAgLTQ0Niw2ICs0NjcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgYnJsLmxheWVyX3ZlcnNpb246CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJsLmxheWVyX3ZlcnNpb24KIAorICAgICAgICAgICAgICAgICMgVGhpcyBtaWdodCBiZSBhIGxvY2FsIGxheWVyIChpLmUuIG5vIGdpdCBpbmZvKSBzbyB0cnkKKyAgICAgICAgICAgICAgICAjIG1hdGNoaW5nIGxvY2FsX3NvdXJjZV9kaXIKKyAgICAgICAgICAgICAgICBpZiBicmwubG9jYWxfc291cmNlX2RpciBhbmQgYnJsLmxvY2FsX3NvdXJjZV9kaXIgPT0gbGF5ZXJfaW5mb3JtYXRpb25bImxvY2FsX3BhdGgiXToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJybC5sYXllcl92ZXJzaW9uCisKICAgICAgICAgICAgICAgICAgICAgIyB3ZSBtYXRjaGVkIHRoZSBCUkxheWVyLCBidXQgd2UgbmVlZCB0aGUgbGF5ZXJfdmVyc2lvbiB0aGF0IGdlbmVyYXRlZCB0aGlzIEJSOyByZXZlcnNlIG9mIHRoZSBQcm9qZWN0LnNjaGVkdWxlX2J1aWxkKCkKICAgICAgICAgICAgICAgICAgICAgI2xvZ2dlci5kZWJ1ZygxLCAiTWF0Y2hlZCAlcyB0byBCUmxheWVyICVzIiAlIChwZm9ybWF0KGxheWVyX2luZm9ybWF0aW9uWyJsb2NhbF9wYXRoIl0pLCBsb2NhbGRpcm5hbWUpKQogCkBAIC00OTQsNyArNTIwLDcgQEAKICAgICAgICAgICAgIHBhcmVudF9vYmogPSBzZWxmLl9jYWNoZWRfZ2V0KFRhcmdldF9GaWxlLCB0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYXRoID0gcGFyZW50X3BhdGgsIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSkKICAgICAgICAgICAgIHRmX29iaiA9IFRhcmdldF9GaWxlLm9iamVjdHMuY3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0X29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB1bmljb2RlKHBhdGgsICd1dGYtOCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLApAQCAtNTE5LDcgKzU0NSw3IEBACiAKICAgICAgICAgICAgIHRmX29iaiA9IFRhcmdldF9GaWxlLm9iamVjdHMuY3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0X29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB1bmljb2RlKHBhdGgsICd1dGYtOCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IGlub2RldHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLApAQCAtNTUwLDkgKzU3Niw3IEBACiAgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gIi8iLmpvaW4oZmNwbCkKIAogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZpbGV0YXJnZXRfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5nZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0X29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdW5pY29kZShmaWxldGFyZ2V0X3BhdGgsICd1dGYtOCcpKQorICAgICAgICAgICAgICAgIGZpbGV0YXJnZXRfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5nZXQodGFyZ2V0ID0gdGFyZ2V0X29iaiwgcGF0aCA9IGZpbGV0YXJnZXRfcGF0aCkKICAgICAgICAgICAgIGV4Y2VwdCBUYXJnZXRfRmlsZS5Eb2VzTm90RXhpc3Q6CiAgICAgICAgICAgICAgICAgIyB3ZSBtaWdodCBoYXZlIGFuIGludmFsaWQgbGluazsgbm8gd2F5IHRvIGRldGVjdCB0aGlzLiBqdXN0IHNldCBpdCB0byBOb25lCiAgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9vYmogPSBOb25lCkBAIC01NjEsNyArNTg1LDcgQEAKIAogICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHVuaWNvZGUocGF0aCwgJ3V0Zi04JyksCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfU1lNTElOSywKICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLApAQCAtNjA2LDggKzYzMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWJ1aWx0X3JlY2lwZS5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9fYnVpbGQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb25fX3VwX2JyYW5jaD0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0X3JlY2lwZS5sYXllcl92ZXJzaW9uLnVwX2JyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb25fX3JlbGVhc2U9CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsdF9yZWNpcGUubGF5ZXJfdmVyc2lvbi5yZWxlYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoPWJ1aWx0X3JlY2lwZS5maWxlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPWJ1aWx0X3JlY2lwZS52ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICkKQEAgLTY2NCw4ICs2ODgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZGVwX3R5cGUgPSB0ZGVwdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmopKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiQ291bGQgbm90IGFkZCBkZXBlbmRlbmN5IHRvIHRoZSBwYWNrYWdlICVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlY2F1c2UgJXMgaXMgYW4gdW5rbm93biBwYWNrYWdlIiwgcCwgcHgpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDb3VsZCBub3QgYWRkIGRlcGVuZGVuY3kgdG8gdGhlIHBhY2thZ2UgJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVjYXVzZSAlcyBpcyBhbiB1bmtub3duIHBhY2thZ2UiLCBwLCBweCkKIAogICAgICAgICBpZiBsZW4ocGFja2FnZWRlcHNfb2JqcykgPiAwOgogICAgICAgICAgICAgUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUocGFja2FnZWRlcHNfb2JqcykKQEAgLTY3MywyMyArNjk3LDI2IEBACiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm8gcGFja2FnZSBkZXBlbmRlbmNpZXMgY3JlYXRlZCIpCiAKICAgICAgICAgaWYgbGVuKGVycm9ybXNnKSA+IDA6Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiYnVpbGRpbmZvaGVscGVyOiB0YXJnZXRfcGFja2FnZV9pbmZvIGNvdWxkIG5vdCBpZGVudGlmeSByZWNpcGVzOiBcbiVzIiwgZXJyb3Jtc2cpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiYnVpbGRpbmZvaGVscGVyOiB0YXJnZXRfcGFja2FnZV9pbmZvIGNvdWxkIG5vdCBpZGVudGlmeSByZWNpcGVzOiBcbiVzIiwgZXJyb3Jtc2cpCiAKICAgICBkZWYgc2F2ZV90YXJnZXRfaW1hZ2VfZmlsZV9pbmZvcm1hdGlvbihzZWxmLCB0YXJnZXRfb2JqLCBmaWxlX25hbWUsIGZpbGVfc2l6ZSk6Ci0gICAgICAgIFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuY3JlYXRlKCB0YXJnZXQgPSB0YXJnZXRfb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9IGZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSBmaWxlX3NpemUpCisgICAgICAgIFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuY3JlYXRlKHRhcmdldD10YXJnZXRfb2JqLAorICAgICAgICAgICAgZmlsZV9uYW1lPWZpbGVfbmFtZSwgZmlsZV9zaXplPWZpbGVfc2l6ZSkKIAotICAgIGRlZiBzYXZlX2FydGlmYWN0X2luZm9ybWF0aW9uKHNlbGYsIGJ1aWxkX29iaiwgZmlsZV9uYW1lLCBmaWxlX3NpemUpOgotICAgICAgICAjIHdlIHNraXAgdGhlIGltYWdlIGZpbGVzIGZyb20gb3RoZXIgYnVpbGRzCi0gICAgICAgIGlmIFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKGZpbGVfbmFtZSA9IGZpbGVfbmFtZSkuY291bnQoKSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICBkZWYgc2F2ZV90YXJnZXRfa2VybmVsX2ZpbGUoc2VsZiwgdGFyZ2V0X29iaiwgZmlsZV9uYW1lLCBmaWxlX3NpemUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2F2ZSBrZXJuZWwgZmlsZSAoYnpJbWFnZSwgbW9kdWxlcyopIGluZm9ybWF0aW9uIGZvciBhIFRhcmdldCB0YXJnZXRfb2JqLgorICAgICAgICAiIiIKKyAgICAgICAgVGFyZ2V0S2VybmVsRmlsZS5vYmplY3RzLmNyZWF0ZSh0YXJnZXQ9dGFyZ2V0X29iaiwKKyAgICAgICAgICAgIGZpbGVfbmFtZT1maWxlX25hbWUsIGZpbGVfc2l6ZT1maWxlX3NpemUpCiAKLSAgICAgICAgIyBkbyBub3QgdXBkYXRlIGFydGlmYWN0cyBmb3VuZCBpbiBvdGhlciBidWlsZHMKLSAgICAgICAgaWYgQnVpbGRBcnRpZmFjdC5vYmplY3RzLmZpbHRlcihmaWxlX25hbWUgPSBmaWxlX25hbWUpLmNvdW50KCkgPiAwOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgQnVpbGRBcnRpZmFjdC5vYmplY3RzLmNyZWF0ZShidWlsZCA9IGJ1aWxkX29iaiwgZmlsZV9uYW1lID0gZmlsZV9uYW1lLCBmaWxlX3NpemUgPSBmaWxlX3NpemUpCisgICAgZGVmIHNhdmVfdGFyZ2V0X3Nka19maWxlKHNlbGYsIHRhcmdldF9vYmosIGZpbGVfbmFtZSwgZmlsZV9zaXplKToKKyAgICAgICAgIiIiCisgICAgICAgIFNhdmUgU0RLIGFydGlmYWN0cyB0byB0aGUgZGF0YWJhc2UsIGFzc29jaWF0aW5nIHRoZW0gd2l0aCBhCisgICAgICAgIFRhcmdldCBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBUYXJnZXRTREtGaWxlLm9iamVjdHMuY3JlYXRlKHRhcmdldD10YXJnZXRfb2JqLCBmaWxlX25hbWU9ZmlsZV9uYW1lLAorICAgICAgICAgICAgZmlsZV9zaXplPWZpbGVfc2l6ZSkKIAogICAgIGRlZiBjcmVhdGVfbG9nbWVzc2FnZShzZWxmLCBsb2dfaW5mb3JtYXRpb24pOgogICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiBsb2dfaW5mb3JtYXRpb24KQEAgLTg1Nyw2ICs4ODQsMTEgQEAKICAgICAgICAgS2VlcHMgaW4gbWVtb3J5IGFsbCBkYXRhIHRoYXQgbmVlZHMgbWF0Y2hpbmcgYmVmb3JlIHdyaXRpbmcgaXQgdG8gdGhlIGRhdGFiYXNlCiAgICAgIiIiCiAKKyAgICAjIHRhc2tzIHdoaWNoIHByb2R1Y2UgaW1hZ2UgZmlsZXM7IG5vdGUgd2UgaW5jbHVkZSAnJywgYXMgd2Ugc2V0CisgICAgIyB0aGUgdGFzayBmb3IgYSB0YXJnZXQgdG8gJycgKGkuZS4gJ2J1aWxkJykgaWYgbm8gdGFyZ2V0IGlzCisgICAgIyBleHBsaWNpdGx5IGRlZmluZWQKKyAgICBJTUFHRV9HRU5FUkFUSU5HX1RBU0tTID0gWycnLCAnYnVpbGQnLCAnaW1hZ2UnLCAncG9wdWxhdGVfc2RrX2V4dCddCisKICAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgIyB0aGUgY29kZSB3aWxsIGxvb2sgaW50byB0aGUgcHJvdGVjdGVkIHZhcmlhYmxlcyBvZiB0aGUgZXZlbnQ7IG5vIGVhc3kgd2F5IGFyb3VuZCB0aGlzCiAgICAgIyBweWxpbnQ6IGRpc2FibGU9YmFkLWNvbnRpbnVhdGlvbgpAQCAtODg4LDIyICs5MjAsNTUgQEAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgIyMgbWV0aG9kcyB0byBjb252ZXJ0IGV2ZW50L2V4dGVybmFsIGluZm8gaW50byBvYmplY3RzIHRoYXQgdGhlIE9STSBsYXllciB1c2VzCiAKKyAgICBkZWYgX2Vuc3VyZV9idWlsZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuc3VyZSB0aGUgY3VycmVudCBidWlsZCBvYmplY3QgZXhpc3RzIGFuZCBpcyB1cCB0byBkYXRlIHdpdGgKKyAgICAgICAgZGF0YSBvbiB0aGUgYml0YmFrZSBzZXJ2ZXIKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGUgb3Igbm90IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ106CisgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgQnVpbGQgb2JqZWN0CisgICAgICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddID0gXAorICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X29yX2NyZWF0ZV9idWlsZF9vYmplY3Qoc2VsZi5icmJlKQogCi0gICAgZGVmIF9nZXRfYnVpbGRfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfbG9nX3BhdGgpOgorICAgICAgICBidWlsZCA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10KKworICAgICAgICAjIHVwZGF0ZSBtaXNzaW5nIGZpZWxkcyBvbiB0aGUgQnVpbGQgb2JqZWN0IHdpdGggZm91bmQgZGF0YQogICAgICAgICBidWlsZF9pbmZvID0ge30KLSAgICAgICAgYnVpbGRfaW5mb1snbWFjaGluZSddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIk1BQ0hJTkUiXSlbMF0KLSAgICAgICAgYnVpbGRfaW5mb1snZGlzdHJvJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPIl0pWzBdCi0gICAgICAgIGJ1aWxkX2luZm9bJ2Rpc3Ryb192ZXJzaW9uJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPX1ZFUlNJT04iXSlbMF0KLSAgICAgICAgYnVpbGRfaW5mb1snc3RhcnRlZF9vbiddID0gdGltZXpvbmUubm93KCkKLSAgICAgICAgYnVpbGRfaW5mb1snY29tcGxldGVkX29uJ10gPSB0aW1lem9uZS5ub3coKQotICAgICAgICBidWlsZF9pbmZvWydjb29rZXJfbG9nX3BhdGgnXSA9IGJ1aWxkX2xvZ19wYXRoCi0gICAgICAgIGJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCVUlMRE5BTUUiXSlbMF0KLSAgICAgICAgYnVpbGRfaW5mb1snYml0YmFrZV92ZXJzaW9uJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfVkVSU0lPTiJdKVswXQotICAgICAgICBidWlsZF9pbmZvWydwcm9qZWN0J10gPSBzZWxmLnByb2plY3QgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE9BU1RFUl9QUk9KRUNUIl0pWzBdCi0gICAgICAgIHJldHVybiBidWlsZF9pbmZvCisKKyAgICAgICAgIyBzZXQgdG8gVHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZmllbGQgaXMgZ29pbmcgdG8gYmUgc2V0CisgICAgICAgIGNoYW5nZWQgPSBGYWxzZQorCisgICAgICAgIGlmIG5vdCBidWlsZC5idWlsZF9uYW1lOgorICAgICAgICAgICAgYnVpbGRfbmFtZSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCVUlMRE5BTUUiXSlbMF0KKworICAgICAgICAgICAgIyBvbmx5IHJlc2V0IHRoZSBidWlsZCBuYW1lIGlmIHRoZSBvbmUgb24gdGhlIHNlcnZlciBpcyBhY3R1YWxseQorICAgICAgICAgICAgIyBhIHZhbGlkIHZhbHVlIGZvciB0aGUgYnVpbGRfbmFtZSBmaWVsZAorICAgICAgICAgICAgaWYgYnVpbGRfbmFtZSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXSA9IGJ1aWxkX25hbWUKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBidWlsZC5tYWNoaW5lOgorICAgICAgICAgICAgYnVpbGRfaW5mb1snbWFjaGluZSddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIk1BQ0hJTkUiXSlbMF0KKyAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IGJ1aWxkLmRpc3RybzoKKyAgICAgICAgICAgIGJ1aWxkX2luZm9bJ2Rpc3RybyddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRJU1RSTyJdKVswXQorICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKworICAgICAgICBpZiBub3QgYnVpbGQuZGlzdHJvX3ZlcnNpb246CisgICAgICAgICAgICBidWlsZF9pbmZvWydkaXN0cm9fdmVyc2lvbiddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRJU1RST19WRVJTSU9OIl0pWzBdCisgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBidWlsZC5iaXRiYWtlX3ZlcnNpb246CisgICAgICAgICAgICBidWlsZF9pbmZvWydiaXRiYWtlX3ZlcnNpb24nXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9WRVJTSU9OIl0pWzBdCisgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnVwZGF0ZV9idWlsZChzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCBidWlsZF9pbmZvKQogCiAgICAgZGVmIF9nZXRfdGFza19pbmZvcm1hdGlvbihzZWxmLCBldmVudCwgcmVjaXBlKToKICAgICAgICAgYXNzZXJ0ICd0YXNrbmFtZScgaW4gdmFycyhldmVudCkKKyAgICAgICAgc2VsZi5fZW5zdXJlX2J1aWxkKCkKIAogICAgICAgICB0YXNrX2luZm9ybWF0aW9uID0ge30KICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnYnVpbGQnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10KQEAgLTkxOCw4ICs5ODMsNyBAQAogICAgICAgICByZXR1cm4gdGFza19pbmZvcm1hdGlvbgogCiAgICAgZGVmIF9nZXRfbGF5ZXJfdmVyc2lvbl9mb3JfcGF0aChzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHBhdGguc3RhcnRzd2l0aCgiLyIpCi0gICAgICAgIGFzc2VydCAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGUKKyAgICAgICAgc2VsZi5fZW5zdXJlX2J1aWxkKCkKIAogICAgICAgICBkZWYgX3Nsa2V5X2ludGVyYWN0aXZlKGxheWVyX3ZlcnNpb24pOgogICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGF5ZXJfdmVyc2lvbiwgTGF5ZXJfVmVyc2lvbikKQEAgLTkzMCw5ICs5OTQsMTIgQEAKICAgICAgICAgICAgICMgd2UgY2FuIG1hdGNoIHRvIHRoZSByZWNpcGUgZmlsZSBwYXRoCiAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgobHZvLmxvY2FsX3BhdGgpOgogICAgICAgICAgICAgICAgIHJldHVybiBsdm8KKyAgICAgICAgICAgIGlmIGx2by5sYXllci5sb2NhbF9zb3VyY2VfZGlyIGFuZCBcCisgICAgICAgICAgICAgICBwYXRoLnN0YXJ0c3dpdGgobHZvLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBsdm8KIAogICAgICAgICAjaWYgd2UgZ2V0IGhlcmUsIHdlIGRpZG4ndCByZWFkIGxheWVycyBjb3JyZWN0bHk7IGR1bXAgd2hhdGV2ZXIgaW5mb3JtYXRpb24gd2UgaGF2ZSBvbiB0aGUgZXJyb3IgbG9nCi0gICAgICAgIGxvZ2dlci53YXJuKCJDb3VsZCBub3QgbWF0Y2ggbGF5ZXIgdmVyc2lvbiBmb3IgcmVjaXBlIHBhdGggJXMgOiAlcyIsIHBhdGgsIHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzKQorICAgICAgICBsb2dnZXIud2FybmluZygiQ291bGQgbm90IG1hdGNoIGxheWVyIHZlcnNpb24gZm9yIHJlY2lwZSBwYXRoICVzIDogJXMiLCBwYXRoLCBzZWxmLm9ybV93cmFwcGVyLmxheWVyX3ZlcnNpb25fb2JqZWN0cykKIAogICAgICAgICAjbW9ja3VwIHRoZSBuZXcgbGF5ZXIKICAgICAgICAgdW5rbm93bl9sYXllciwgXyA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPSJVbmlkZW50aWZpZWQgbGF5ZXIiLCBsYXllcl9pbmRleF91cmw9IiIpCkBAIC05NjMsNiArMTAzMCw4IEBACiAgICAgICAgIHJldHVybiByZWNpcGVfaW5mbwogCiAgICAgZGVmIF9nZXRfcGF0aF9pbmZvcm1hdGlvbihzZWxmLCB0YXNrX29iamVjdCk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9idWlsZCgpCisKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFza19vYmplY3QsIFRhc2spCiAgICAgICAgIGJ1aWxkX3N0YXRzX2Zvcm1hdCA9ICJ7dG1wZGlyfS9idWlsZHN0YXRzL3tidWlsZG5hbWV9L3twYWNrYWdlfS8iCiAgICAgICAgIGJ1aWxkX3N0YXRzX3BhdGggPSBbXQpAQCAtMTAwMywxOSArMTA3MiwzMyBAQAogICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW3NlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl9vYmplY3QobGF5ZXJpbmZvc1tsYXllcl0sIHNlbGYuYnJiZSldID0gbGF5ZXJpbmZvc1tsYXllcl1bJ3ZlcnNpb24nXQogICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW3NlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl9vYmplY3QobGF5ZXJpbmZvc1tsYXllcl0sIHNlbGYuYnJiZSldWydsb2NhbF9wYXRoJ10gPSBsYXllcmluZm9zW2xheWVyXVsnbG9jYWxfcGF0aCddCiAgICAgICAgICAgICBleGNlcHQgTm90RXhpc3RpbmcgYXMgbmVlOgotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGluZm9oZWxwZXI6IGNhbm5vdCBpZGVudGlmeSBsYXllciBleGNlcHRpb246JXMgIiwgbmVlKQorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJidWlsZGluZm9oZWxwZXI6IGNhbm5vdCBpZGVudGlmeSBsYXllciBleGNlcHRpb246JXMgIiwgbmVlKQogCisgICAgZGVmIHN0b3JlX3N0YXJ0ZWRfYnVpbGQoc2VsZik6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9idWlsZCgpCiAKLSAgICBkZWYgc3RvcmVfc3RhcnRlZF9idWlsZChzZWxmLCBldmVudCwgYnVpbGRfbG9nX3BhdGgpOgorICAgIGRlZiBzYXZlX2J1aWxkX2xvZ19maWxlX3BhdGgoc2VsZiwgYnVpbGRfbG9nX3BhdGgpOgorICAgICAgICBzZWxmLl9lbnN1cmVfYnVpbGQoKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLmNvb2tlcl9sb2dfcGF0aDoKKyAgICAgICAgICAgIGRhdGFfZGljdCA9IHsnY29va2VyX2xvZ19wYXRoJzogYnVpbGRfbG9nX3BhdGh9CisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnVwZGF0ZV9idWlsZChzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCBkYXRhX2RpY3QpCisKKyAgICBkZWYgc2F2ZV9idWlsZF90YXJnZXRzKHNlbGYsIGV2ZW50KToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2J1aWxkKCkKKworICAgICAgICAjIGNyZWF0ZSB0YXJnZXQgaW5mb3JtYXRpb24KICAgICAgICAgYXNzZXJ0ICdfcGtncycgaW4gdmFycyhldmVudCkKLSAgICAgICAgYnVpbGRfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfYnVpbGRfaW5mb3JtYXRpb24oYnVpbGRfbG9nX3BhdGgpCisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvblsndGFyZ2V0cyddID0gZXZlbnQuX3BrZ3MKKyAgICAgICAgdGFyZ2V0X2luZm9ybWF0aW9uWydidWlsZCddID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXQogCi0gICAgICAgICMgVXBkYXRlIGJyYmUgYW5kIHByb2plY3QgYXMgdGhleSBjYW4gYmUgY2hhbmdlZCBmb3IgZXZlcnkgYnVpbGQKLSAgICAgICAgc2VsZi5wcm9qZWN0ID0gYnVpbGRfaW5mb3JtYXRpb25bJ3Byb2plY3QnXQorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ10gPSBzZWxmLm9ybV93cmFwcGVyLmdldF9vcl9jcmVhdGVfdGFyZ2V0cyh0YXJnZXRfaW5mb3JtYXRpb24pCiAKLSAgICAgICAgYnVpbGRfb2JqID0gc2VsZi5vcm1fd3JhcHBlci5jcmVhdGVfYnVpbGRfb2JqZWN0KGJ1aWxkX2luZm9ybWF0aW9uLCBzZWxmLmJyYmUsIHNlbGYucHJvamVjdCkKKyAgICBkZWYgc2F2ZV9idWlsZF9sYXllcnNfYW5kX3ZhcmlhYmxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2J1aWxkKCkKIAotICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddID0gYnVpbGRfb2JqCisgICAgICAgIGJ1aWxkX29iaiA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10KIAogICAgICAgICAjIHNhdmUgbGF5ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBidWlsZAogICAgICAgICBpZiBub3QgJ2x2cycgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKQEAgLTEwMjYsMTMgKzExMDksNiBAQAogCiAgICAgICAgICAgICBkZWwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnbHZzJ10KIAotICAgICAgICAjIGNyZWF0ZSB0YXJnZXQgaW5mb3JtYXRpb24KLSAgICAgICAgdGFyZ2V0X2luZm9ybWF0aW9uID0ge30KLSAgICAgICAgdGFyZ2V0X2luZm9ybWF0aW9uWyd0YXJnZXRzJ10gPSBldmVudC5fcGtncwotICAgICAgICB0YXJnZXRfaW5mb3JtYXRpb25bJ2J1aWxkJ10gPSBidWlsZF9vYmoKLQotICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ10gPSBzZWxmLm9ybV93cmFwcGVyLmdldF9vcl9jcmVhdGVfdGFyZ2V0cyh0YXJnZXRfaW5mb3JtYXRpb24pCi0KICAgICAgICAgIyBTYXZlIGJ1aWxkIGNvbmZpZ3VyYXRpb24KICAgICAgICAgZGF0YSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRBbGxLZXlzV2l0aEZsYWdzIiwgWyJkb2MiLCAiZnVuYyJdXSlbMF0KIApAQCAtMTA1NSw3ICsxMTMxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGFic19maWxlX25hbWUgPSB2aFsnZmlsZSddCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHAgaW4gcGF0aF9wcmVmaXhlczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhYnNfZmlsZV9uYW1lLnN0YXJ0c3dpdGgocHAgKyAiLyIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aFsnZmlsZSddPWFic19maWxlX25hbWVbbGVuKHBwICsgIi8iKTpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJlc2VydmUgbGF5ZXIgbmFtZSBpbiByZWxhdGl2ZSBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZoWydmaWxlJ109YWJzX2ZpbGVfbmFtZVtwcC5yZmluZCgiLyIpKzE6XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICMgc2F2ZSB0aGUgdmFyaWFibGVzCkBAIC0xMDYzLDM1ICsxMTQwLDQ4IEBACiAKICAgICAgICAgcmV0dXJuIHNlbGYuYnJiZQogCisgICAgZGVmIHNldF9yZWNpcGVzX3RvX3BhcnNlKHNlbGYsIG51bV9yZWNpcGVzKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgbnVtYmVyIG9mIHJlY2lwZXMgd2hpY2ggbmVlZCB0byBiZSBwYXJzZWQgZm9yIHRoaXMgYnVpbGQuCisgICAgICAgIFRoaXMgaXMgc2V0IHRoZSBmaXJzdCB0aW1lIFBhcnNlU3RhcnRlZCBpcyByZWNlaXZlZCBieSB0b2FzdGVydWkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9lbnN1cmVfYnVpbGQoKQorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLnJlY2lwZXNfdG9fcGFyc2UgPSBudW1fcmVjaXBlcworICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLnNhdmUoKQorCisgICAgZGVmIHNldF9yZWNpcGVzX3BhcnNlZChzZWxmLCBudW1fcmVjaXBlcyk6CisgICAgICAgICIiIgorICAgICAgICBTZXQgdGhlIG51bWJlciBvZiByZWNpcGVzIHBhcnNlZCBzbyBmYXIgZm9yIHRoaXMgYnVpbGQ7IHRoaXMgaXMgdXBkYXRlZAorICAgICAgICBlYWNoIHRpbWUgYSBQYXJzZVByb2dyZXNzIG9yIFBhcnNlQ29tcGxldGVkIGV2ZW50IGlzIHJlY2VpdmVkIGJ5CisgICAgICAgIHRvYXN0ZXJ1aS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Vuc3VyZV9idWlsZCgpCisgICAgICAgIGlmIG51bV9yZWNpcGVzIDw9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10ucmVjaXBlc190b19wYXJzZToKKyAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10ucmVjaXBlc19wYXJzZWQgPSBudW1fcmVjaXBlcworICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXS5zYXZlKCkKIAogICAgIGRlZiB1cGRhdGVfdGFyZ2V0X2ltYWdlX2ZpbGUoc2VsZiwgZXZlbnQpOgogICAgICAgICBldmRhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCiAKICAgICAgICAgZm9yIHQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgogICAgICAgICAgICAgaWYgdC5pc19pbWFnZSA9PSBUcnVlOgotICAgICAgICAgICAgICAgIG91dHB1dF9maWxlcyA9IGxpc3QoZXZkYXRhLnZpZXdrZXlzKCkpCisgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVzID0gbGlzdChldmRhdGEua2V5cygpKQogICAgICAgICAgICAgICAgIGZvciBvdXRwdXQgaW4gb3V0cHV0X2ZpbGVzOgogICAgICAgICAgICAgICAgICAgICBpZiB0LnRhcmdldCBpbiBvdXRwdXQgYW5kICdyb290ZnMnIGluIG91dHB1dCBhbmQgbm90IG91dHB1dC5lbmRzd2l0aCgiLm1hbmlmZXN0Iik6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X2ltYWdlX2ZpbGVfaW5mb3JtYXRpb24odCwgb3V0cHV0LCBldmRhdGFbb3V0cHV0XSkKIAogICAgIGRlZiB1cGRhdGVfYXJ0aWZhY3RfaW1hZ2VfZmlsZShzZWxmLCBldmVudCk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9idWlsZCgpCiAgICAgICAgIGV2ZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKICAgICAgICAgZm9yIGFydGlmYWN0X3BhdGggaW4gZXZkYXRhLmtleXMoKToKLSAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV9hcnRpZmFjdF9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCBhcnRpZmFjdF9wYXRoLCBldmRhdGFbYXJ0aWZhY3RfcGF0aF0pCisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfYXJ0aWZhY3RfaW5mb3JtYXRpb24oCisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgYXJ0aWZhY3RfcGF0aCwKKyAgICAgICAgICAgICAgICBldmRhdGFbYXJ0aWZhY3RfcGF0aF0pCiAKICAgICBkZWYgdXBkYXRlX2J1aWxkX2luZm9ybWF0aW9uKHNlbGYsIGV2ZW50LCBlcnJvcnMsIHdhcm5pbmdzLCB0YXNrZmFpbHVyZXMpOgotICAgICAgICBpZiAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6Ci0gICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnVwZGF0ZV9idWlsZF9vYmplY3Qoc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKQotCi0KLSAgICBkZWYgc3RvcmVfbGljZW5zZV9tYW5pZmVzdF9wYXRoKHNlbGYsIGV2ZW50KToKLSAgICAgICAgZGVwbG95X2RpciA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2RlcGxveV9kaXInXQotICAgICAgICBpbWFnZV9uYW1lID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnaW1hZ2VfbmFtZSddCi0gICAgICAgIHBhdGggPSBkZXBsb3lfZGlyICsgIi9saWNlbnNlcy8iICsgaW1hZ2VfbmFtZSArICIvbGljZW5zZS5tYW5pZmVzdCIKLSAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ106Ci0gICAgICAgICAgICBpZiB0YXJnZXQudGFyZ2V0IGluIGltYWdlX25hbWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci51cGRhdGVfdGFyZ2V0X3NldF9saWNlbnNlX21hbmlmZXN0KHRhcmdldCwgcGF0aCkKLQorICAgICAgICBzZWxmLl9lbnN1cmVfYnVpbGQoKQorICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnVwZGF0ZV9idWlsZF9zdGF0c19hbmRfb3V0Y29tZSgKKyAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10sIGVycm9ycywgd2FybmluZ3MsIHRhc2tmYWlsdXJlcykKIAogICAgIGRlZiBzdG9yZV9zdGFydGVkX3Rhc2soc2VsZiwgZXZlbnQpOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU2tpcHBlZCkpCkBAIC0xMTM0LDYgKzEyMjQsNyBAQAogCiAKICAgICBkZWYgc3RvcmVfdGFza3Nfc3RhdHMoc2VsZiwgZXZlbnQpOgorICAgICAgICBzZWxmLl9lbnN1cmVfYnVpbGQoKQogICAgICAgICB0YXNrX2RhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCiAKICAgICAgICAgZm9yICh0YXNrX2ZpbGUsIHRhc2tfbmFtZSwgdGFza19zdGF0cywgcmVjaXBlX25hbWUpIGluIHRhc2tfZGF0YToKQEAgLTEyMjksNiArMTMyMCw4IEBACiAKIAogICAgIGRlZiBzdG9yZV90YXJnZXRfcGFja2FnZV9kYXRhKHNlbGYsIGV2ZW50KToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2J1aWxkKCkKKwogICAgICAgICAjIGZvciBhbGwgaW1hZ2UgdGFyZ2V0cwogICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKICAgICAgICAgICAgIGlmIHRhcmdldC5pc19pbWFnZToKQEAgLTEyNDAsMTcgKzEzMzMsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX3RhcmdldF9wYWNrYWdlX2luZm9ybWF0aW9uKHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10sIHRhcmdldCwgaW1nZGF0YSwgcGtnZGF0YSwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddLCBidWlsdF9wYWNrYWdlPVRydWUpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV90YXJnZXRfcGFja2FnZV9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCB0YXJnZXQsIGltZ2RhdGEuY29weSgpLCBwa2dkYXRhLCBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ10sIGJ1aWx0X3BhY2thZ2U9RmFsc2UpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJLZXlFcnJvciBpbiBzYXZlX3RhcmdldF9wYWNrYWdlX2luZm9ybWF0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIiwgZSkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIktleUVycm9yIGluIHNhdmVfdGFyZ2V0X3BhY2thZ2VfaW5mb3JtYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAiLCBlKQogCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X2ZpbGVfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgdGFyZ2V0LCBmaWxlZGF0YSkKLSAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIktleUVycm9yIGluIHNhdmVfdGFyZ2V0X2ZpbGVfaW5mb3JtYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAiLCBlKQorICAgICAgICAgICAgICAgICMgb25seSB0cnkgdG8gZmluZCBmaWxlcyBpbiB0aGUgaW1hZ2UgaWYgdGhlIHRhc2sgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAjIHRhcmdldCBpcyBvbmUgd2hpY2ggcHJvZHVjZXMgaW1hZ2UgZmlsZXM7IG90aGVyd2lzZSwgdGhlIG9sZAorICAgICAgICAgICAgICAgICMgbGlzdCBvZiBmaWxlcyBpbiB0aGUgZmlsZXMtaW4taW1hZ2UudHh0IGZpbGUgd2lsbCBiZQorICAgICAgICAgICAgICAgICMgYXBwZW5kZWQgdG8gdGhlIHRhcmdldCBldmVuIGlmIGl0IGRpZG4ndCBwcm9kdWNlIGFueSBpbWFnZXMKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXQudGFzayBpbiBCdWlsZEluZm9IZWxwZXIuSU1BR0VfR0VORVJBVElOR19UQVNLUzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX3RhcmdldF9maWxlX2luZm9ybWF0aW9uKHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10sIHRhcmdldCwgZmlsZWRhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIktleUVycm9yIGluIHNhdmVfdGFyZ2V0X2ZpbGVfaW5mb3JtYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIiwgZSkKIAogCiAKKyAgICBkZWYgY2FuY2VsX2NsaV9idWlsZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIGEgYnVpbGQgaXMgY3VycmVudGx5IHVuZGVyd2F5LCBzZXQgaXRzIHN0YXRlIHRvIENBTkNFTExFRDsKKyAgICAgICAgbm90ZSB0aGF0IHRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgY29tbWFuZCBsaW5lIGJ1aWxkcyB3aGljaCBhcmUKKyAgICAgICAgaW50ZXJydXB0ZWQsIHNvIGl0IGRvZXNuJ3QgdG91Y2ggYW55IEJ1aWxkUmVxdWVzdCBvYmplY3RzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9lbnN1cmVfYnVpbGQoKQorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLm91dGNvbWUgPSBCdWlsZC5DQU5DRUxMRUQKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXS5zYXZlKCkKKyAgICAgICAgc2lnbmFsX3J1bmJ1aWxkcygpCiAKICAgICBkZWYgc3RvcmVfZGVwZW5kZW5jeV9pbmZvcm1hdGlvbihzZWxmLCBldmVudCk6CiAgICAgICAgIGFzc2VydCAnX2RlcGdyYXBoJyBpbiB2YXJzKGV2ZW50KQpAQCAtMTM5MiwxMCArMTUwMCwxMiBAQAogICAgICAgICBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5idWxrX2NyZWF0ZSh0YXNrZGVwc19vYmplY3RzKQogCiAgICAgICAgIGlmIGxlbihlcnJvcm1zZykgPiAwOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oImJ1aWxkaW5mb2hlbHBlcjogZGVwZW5kZW5jeSBpbmZvIG5vdCBpZGVudGlmeSByZWNpcGVzOiBcbiVzIiwgZXJyb3Jtc2cpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiYnVpbGRpbmZvaGVscGVyOiBkZXBlbmRlbmN5IGluZm8gbm90IGlkZW50aWZ5IHJlY2lwZXM6IFxuJXMiLCBlcnJvcm1zZykKIAogCiAgICAgZGVmIHN0b3JlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZiwgZXZlbnQpOgorICAgICAgICBzZWxmLl9lbnN1cmVfYnVpbGQoKQorCiAgICAgICAgIHBhY2thZ2VfaW5mbyA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oCiAgICAgICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLApAQCAtMTQxMSwxMCArMTUyMSwxMiBAQAogCiAgICAgZGVmIF9zdG9yZV9idWlsZF9kb25lKHNlbGYsIGVycm9yY29kZSk6CiAgICAgICAgIGxvZ2dlci5pbmZvKCJCdWlsZCBleGl0ZWQgd2l0aCBlcnJvcmNvZGUgJWQiLCBlcnJvcmNvZGUpCisKKyAgICAgICAgaWYgbm90IHNlbGYuYnJiZToKKyAgICAgICAgICAgIHJldHVybgorCiAgICAgICAgIGJyX2lkLCBiZV9pZCA9IHNlbGYuYnJiZS5zcGxpdCgiOiIpCi0gICAgICAgIGJlID0gQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmdldChwayA9IGJlX2lkKQotICAgICAgICBiZS5sb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0sKLSAgICAgICAgYmUuc2F2ZSgpCisKICAgICAgICAgYnIgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkKIAogICAgICAgICAjIGlmIHdlJ3JlICdkb25lJyBiZWNhdXNlIHdlIGdvdCBjYW5jZWxsZWQgdXBkYXRlIHRoZSBidWlsZCBvdXRjb21lCkBAIC0xNDMyLDYgKzE1NDQsMTAgQEAKICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQKICAgICAgICAgYnIuc2F2ZSgpCiAKKyAgICAgICAgYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZ2V0KHBrID0gYmVfaWQpCisgICAgICAgIGJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRQorICAgICAgICBiZS5zYXZlKCkKKyAgICAgICAgc2lnbmFsX3J1bmJ1aWxkcygpCiAKICAgICBkZWYgc3RvcmVfbG9nX2Vycm9yKHNlbGYsIHRleHQpOgogICAgICAgICBtb2NrZXZlbnQgPSBNb2NrRXZlbnQoKQpAQCAtMTQ0OSwzMCArMTU2NSwyNSBAQAogICAgICAgICBtb2NrZXZlbnQubGluZW5vID0gLTEKICAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQobW9ja2V2ZW50KQogCi0KICAgICBkZWYgc3RvcmVfbG9nX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2J1aWxkKCkKKwogICAgICAgICBpZiBldmVudC5sZXZlbG5vIDwgZm9ybWF0dGVyLldBUk5JTkc6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpZiAnYXJncycgaW4gdmFycyhldmVudCk6Ci0gICAgICAgICAgICBldmVudC5tc2cgPSBldmVudC5tc2cgJSBldmVudC5hcmdzCisgICAgICAgICMgZWFybHkgcmV0dXJuIGZvciBDTEkgYnVpbGRzCisgICAgICAgIGlmIHNlbGYuYnJiZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90ICdiYWNrbG9nJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXSA9IFtdCisgICAgICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10uYXBwZW5kKGV2ZW50KQorICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaWYgbm90ICdidWlsZCcgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKLSAgICAgICAgICAgIGlmIHNlbGYuYnJiZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIG5vdCAnYmFja2xvZycgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddID0gW10KLSAgICAgICAgICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10uYXBwZW5kKGV2ZW50KQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZWxzZTogICAjIHdlJ3JlIHVuZGVyIFRvYXN0ZXIgY29udHJvbCwgdGhlIGJ1aWxkIGlzIGFscmVhZHkgY3JlYXRlZAotICAgICAgICAgICAgICAgIGJyLCBfID0gc2VsZi5icmJlLnNwbGl0KCI6IikKLSAgICAgICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicikKLSAgICAgICAgICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddID0gYnVpbGRyZXF1ZXN0LmJ1aWxkCi0KLSAgICAgICAgaWYgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlIGFuZCAnYmFja2xvZycgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKKyAgICAgICAgaWYgJ2JhY2tsb2cnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CiAgICAgICAgICAgICAjIGlmIHdlIGhhdmUgYSBiYWNrbG9nIG9mIGV2ZW50cywgZG8gb3VyIGJlc3QgdG8gc2F2ZSB0aGVtIGhlcmUKICAgICAgICAgICAgIGlmIGxlbihzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10pOgogICAgICAgICAgICAgICAgIHRlbXBldmVudCA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXS5wb3AoKQotICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBTYXZpbmcgc3RvcmVkIGV2ZW50ICVzICIgJSB0ZW1wZXZlbnQpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IFNhdmluZyBzdG9yZWQgZXZlbnQgJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHRlbXBldmVudCkKICAgICAgICAgICAgICAgICBzZWxmLnN0b3JlX2xvZ19ldmVudCh0ZW1wZXZlbnQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJidWlsZGluZm9oZWxwZXI6IEFsbCBldmVudHMgc2F2ZWQiKQpAQCAtMTQ5MSwyNiArMTYwMiwzMjQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGV2ZWwnXSA9IExvZ01lc3NhZ2UuSU5GTwogCi0gICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbWVzc2FnZSddID0gZXZlbnQubXNnCisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbWVzc2FnZSddID0gZXZlbnQuZ2V0TWVzc2FnZSgpCiAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsncGF0aG5hbWUnXSA9IGV2ZW50LnBhdGhuYW1lCiAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGluZW5vJ10gPSBldmVudC5saW5lbm8KICAgICAgICAgbG9nZ2VyLmluZm8oIkxvZ2dpbmcgZXJyb3IgMjogJXMiLCBsb2dfaW5mb3JtYXRpb24pCiAKICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5jcmVhdGVfbG9nbWVzc2FnZShsb2dfaW5mb3JtYXRpb24pCiAKKyAgICBkZWYgX2dldF9maWxlbmFtZXNfZnJvbV9pbWFnZV9saWNlbnNlKHNlbGYsIGltYWdlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSBGSUxFUyBsaW5lIGluIHRoZSBpbWFnZV9saWNlbnNlLm1hbmlmZXN0IGZpbGUsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgYmFzZW5hbWVzIG9mIHRoZSBiekltYWdlIGFuZCBtb2R1bGVzIGZpbGVzCisgICAgICAgIGluIHRoaXMgZm9ybWF0OgorICAgICAgICBGSUxFUzogYnpJbWFnZS0tNC40LjExK2dpdDArM2E1ZjQ5NDc4NF81M2U4NDEwNGM1LXIwLXFlbXV4ODYtMjAxNjA2MDMxNjUwNDAuYmluIG1vZHVsZXMtLTQuNC4xMStnaXQwKzNhNWY0OTQ3ODRfNTNlODQxMDRjNS1yMC1xZW11eDg2LTIwMTYwNjAzMTY1MDQwLnRnegorICAgICAgICAiIiIKKyAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICB3aXRoIG9wZW4oaW1hZ2VfbGljZW5zZV9tYW5pZmVzdF9wYXRoKSBhcyBpbWFnZV9saWNlbnNlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW1hZ2VfbGljZW5zZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0ZJTEVTJyk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzX3N0ciA9IGxpbmUuc3BsaXQoJzonKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGZpbGVzX3N0ciA9IHJlLnN1YihyJyB7Mix9JywgJyAnLCBmaWxlc19zdHIpCisKKyAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgbGluZXMgbGlrZSAiRklMRVM6IiB3aXRoIG5vIGZpbGVuYW1lcworICAgICAgICAgICAgICAgICAgICBpZiBmaWxlc19zdHI6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyArPSBmaWxlc19zdHIuc3BsaXQoJyAnKQorICAgICAgICByZXR1cm4gZmlsZXMKKworICAgIGRlZiBfZW5kc3dpdGgoc2VsZiwgc3RyX3RvX3Rlc3QsIGVuZGluZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBUcnVlIGlmIHN0ciBlbmRzIHdpdGggb25lIG9mIHRoZSBzdHJpbmdzIGluIHRoZSBsaXN0CisgICAgICAgIGVuZGluZ3MsIEZhbHNlIG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgZW5kc3dpdGggPSBGYWxzZQorICAgICAgICBmb3IgZW5kaW5nIGluIGVuZGluZ3M6CisgICAgICAgICAgICBpZiBzdHJfdG9fdGVzdC5lbmRzd2l0aChlbmRpbmcpOgorICAgICAgICAgICAgICAgIGVuZHN3aXRoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBlbmRzd2l0aAorCisgICAgZGVmIF9nZXRfaW1hZ2VfZmlsZXMoc2VsZiwgZGVwbG95X2Rpcl9pbWFnZSwgaW1hZ2VfbmFtZSwgaW1hZ2VfZmlsZV9leHRlbnNpb25zKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgZmlsZXMgaW4gZGVwbG95X2Rpcl9pbWFnZSB3aG9zZSBiYXNlbmFtZSBzdGFydHMgd2l0aCB0aGUKKyAgICAgICAgc3RyaW5nIGltYWdlX25hbWUgYW5kIGVuZHMgd2l0aCBvbmUgb2YgdGhlIHN0cmluZ3MgaW4KKyAgICAgICAgaW1hZ2VfZmlsZV9leHRlbnNpb25zLgorCisgICAgICAgIFJldHVybnMgYSBsaXN0IG9mIGZpbGUgZGljdGlvbmFyaWVzIGxpa2UKKworICAgICAgICBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ3BhdGgnOiAnL3BhdGgvdG8vaW1hZ2UvZmlsZScsCisgICAgICAgICAgICAgICAgJ3NpemUnOiA8ZmlsZSBzaXplIGluIGJ5dGVzPgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgICAgICIiIgorICAgICAgICBpbWFnZV9maWxlcyA9IFtdCisKKyAgICAgICAgZm9yIGRpcnBhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRlcGxveV9kaXJfaW1hZ2UpOgorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKGltYWdlX25hbWUpIGFuZCBcCisgICAgICAgICAgICAgICAgc2VsZi5fZW5kc3dpdGgoZmlsZW5hbWUsIGltYWdlX2ZpbGVfZXh0ZW5zaW9ucyk6CisgICAgICAgICAgICAgICAgICAgIGltYWdlX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VfZmlsZV9zaXplID0gb3Muc3RhdChpbWFnZV9maWxlX3BhdGgpLnN0X3NpemUKKworICAgICAgICAgICAgICAgICAgICBpbWFnZV9maWxlcy5hcHBlbmQoeworICAgICAgICAgICAgICAgICAgICAgICAgJ3BhdGgnOiBpbWFnZV9maWxlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IGltYWdlX2ZpbGVfc2l6ZQorICAgICAgICAgICAgICAgICAgICB9KQorCisgICAgICAgIHJldHVybiBpbWFnZV9maWxlcworCisgICAgZGVmIHNjYW5faW1hZ2VfYXJ0aWZhY3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2NhbiBmb3IgYnVpbHQgaW1hZ2UgYXJ0aWZhY3RzIGluIERFUExPWV9ESVJfSU1BR0UgYW5kIGFzc29jaWF0ZSB0aGVtCisgICAgICAgIHdpdGggYSBUYXJnZXQgb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXS4KKworICAgICAgICBXZSBoYXZlIHR3byBzaXR1YXRpb25zIHRvIGhhbmRsZToKKworICAgICAgICAxLiBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lIGEgdGFyZ2V0ICsgbWFjaGluZSBoYXMgYmVlbiBidWlsdCwgc28KKyAgICAgICAgYWRkIGZpbGVzIGZyb20gdGhlIERFUExPWV9ESVJfSU1BR0UgdG8gdGhlIHRhcmdldC4KKworICAgICAgICBPUgorCisgICAgICAgIDIuIFRoZXJlIGFyZSBubyBuZXcgZmlsZXMgZm9yIHRoZSB0YXJnZXQgKHRoZXkgd2VyZSBhbHJlYWR5IHByb2R1Y2VkIGJ5CisgICAgICAgIGEgcHJldmlvdXMgYnVpbGQpLCBzbyBjb3B5IHRoZW0gZnJvbSB0aGUgbW9zdCByZWNlbnQgcHJldmlvdXMgYnVpbGQgd2l0aAorICAgICAgICB0aGUgc2FtZSB0YXJnZXQsIHRhc2sgYW5kIG1hY2hpbmUuCisgICAgICAgICIiIgorICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gXAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbJ2dldFZhcmlhYmxlJywgJ0RFUExPWV9ESVJfSU1BR0UnXSlbMF0KKworICAgICAgICAjIGlmIHRoZXJlJ3Mgbm8gREVQTE9ZX0RJUl9JTUFHRSwgdGhlcmUgYXJlbid0IGdvaW5nIHRvIGJlCisgICAgICAgICMgYW55IGltYWdlIGFydGlmYWN0cywgc28gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseQorICAgICAgICBpZiBub3QgZGVwbG95X2Rpcl9pbWFnZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJ1aWxkbmFtZSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWydnZXRWYXJpYWJsZScsICdCVUlMRE5BTUUnXSlbMF0KKyAgICAgICAgbWFjaGluZSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWydnZXRWYXJpYWJsZScsICdNQUNISU5FJ10pWzBdCisgICAgICAgIGltYWdlX25hbWUgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsnZ2V0VmFyaWFibGUnLCAnSU1BR0VfTkFNRSddKVswXQorCisgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIG1hbmlmZXN0IGZpbGVzIGZvciB0aGlzIGJ1aWxkOworICAgICAgICAjIG5vdGUgdGhhdCB0aGlzIGZpbGUgaXMgb25seSBwcm9kdWNlZCBpZiBhbiBpbWFnZSBpcyBwcm9kdWNlZAorICAgICAgICBsaWNlbnNlX2RpcmVjdG9yeSA9IFwKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWydnZXRWYXJpYWJsZScsICdMSUNFTlNFX0RJUkVDVE9SWSddKVswXQorCisgICAgICAgICMgZmlsZSBuYW1lIGV4dGVuc2lvbnMgZm9yIGltYWdlIGZpbGVzCisgICAgICAgIGltYWdlX2ZpbGVfZXh0ZW5zaW9uc191bmlxdWUgPSB7fQorICAgICAgICBpbWFnZV9mc3R5cGVzID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZCgKKyAgICAgICAgICAgIFsnZ2V0VmFyaWFibGUnLCAnSU1BR0VfRlNUWVBFUyddKVswXQorICAgICAgICBpZiBpbWFnZV9mc3R5cGVzICE9IE5vbmU6CisgICAgICAgICAgICBpbWFnZV90eXBlc19zdHIgPSBpbWFnZV9mc3R5cGVzLnN0cmlwKCkKKyAgICAgICAgICAgIGltYWdlX2ZpbGVfZXh0ZW5zaW9ucyA9IHJlLnN1YihyJyB7Mix9JywgJyAnLCBpbWFnZV90eXBlc19zdHIpCisgICAgICAgICAgICBpbWFnZV9maWxlX2V4dGVuc2lvbnNfdW5pcXVlID0gc2V0KGltYWdlX2ZpbGVfZXh0ZW5zaW9ucy5zcGxpdCgnICcpKQorCisgICAgICAgIHRhcmdldHMgPSBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ10KKworICAgICAgICAjIGZpbHRlciBvdXQgYW55dGhpbmcgd2hpY2ggaXNuJ3QgYW4gaW1hZ2UgdGFyZ2V0CisgICAgICAgIGltYWdlX3RhcmdldHMgPSBbdGFyZ2V0IGZvciB0YXJnZXQgaW4gdGFyZ2V0cyBpZiB0YXJnZXQuaXNfaW1hZ2VdCisKKyAgICAgICAgZm9yIGltYWdlX3RhcmdldCBpbiBpbWFnZV90YXJnZXRzOgorICAgICAgICAgICAgIyB0aGlzIGlzIHNldCB0byBUcnVlIGlmIHdlIGZpbmQgYXQgbGVhc3Qgb25lIGZpbGUgcmVsYXRpbmcgdG8KKyAgICAgICAgICAgICMgdGhpcyB0YXJnZXQ7IGlmIHRoaXMgcmVtYWlucyBGYWxzZSBhZnRlciB0aGUgc2Nhbiwgd2UgY29weSB0aGUKKyAgICAgICAgICAgICMgZmlsZXMgZnJvbSB0aGUgbW9zdC1yZWNlbnQgVGFyZ2V0IHdpdGggdGhlIHNhbWUgdGFyZ2V0ICsgbWFjaGluZQorICAgICAgICAgICAgIyBvbnRvIHRoaXMgVGFyZ2V0IGluc3RlYWQKKyAgICAgICAgICAgIGhhc19maWxlcyA9IEZhbHNlCisKKyAgICAgICAgICAgICMgd2UgY29uc3RydWN0IHRoaXMgYmVjYXVzZSBieSB0aGUgdGltZSB3ZSByZWFjaAorICAgICAgICAgICAgIyBCdWlsZENvbXBsZXRlZCwgdGhpcyBoYXMgcmVzZXQgdG8KKyAgICAgICAgICAgICMgJ2RlZmF1bHRwa2duYW1lLTxNQUNISU5FPi08QlVJTEROQU1FPic7CisgICAgICAgICAgICAjIHdlIG5lZWQgdG8gY2hhbmdlIGl0IHRvCisgICAgICAgICAgICAjIDxUQVJHRVQ+LTxNQUNISU5FPi08QlVJTEROQU1FPgorICAgICAgICAgICAgcmVhbF9pbWFnZV9uYW1lID0gcmUuc3ViKHInXmRlZmF1bHRwa2duYW1lJywgaW1hZ2VfdGFyZ2V0LnRhcmdldCwKKyAgICAgICAgICAgICAgICBpbWFnZV9uYW1lKQorCisgICAgICAgICAgICBpbWFnZV9saWNlbnNlX21hbmlmZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgbGljZW5zZV9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgcmVhbF9pbWFnZV9uYW1lLAorICAgICAgICAgICAgICAgICdpbWFnZV9saWNlbnNlLm1hbmlmZXN0JykKKworICAgICAgICAgICAgaW1hZ2VfcGFja2FnZV9tYW5pZmVzdF9wYXRoID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIGxpY2Vuc2VfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIHJlYWxfaW1hZ2VfbmFtZSwKKyAgICAgICAgICAgICAgICAnaW1hZ2VfbGljZW5zZS5tYW5pZmVzdCcpCisKKyAgICAgICAgICAgICMgaWYgaW1hZ2VfbGljZW5zZS5tYW5pZmVzdCBleGlzdHMsIHdlIGNhbiByZWFkIHRoZSBuYW1lcyBvZgorICAgICAgICAgICAgIyBiekltYWdlLCBtb2R1bGVzIGV0Yy4gZmlsZXMgZm9yIHRoaXMgYnVpbGQgZnJvbSBpdCwgdGhlbiBsb29rIGZvcgorICAgICAgICAgICAgIyB0aGVtIGluIHRoZSBERVBMT1lfRElSX0lNQUdFOyBub3RlIHRoYXQgdGhpcyBmaWxlIGlzIG9ubHkgcHJvZHVjZWQKKyAgICAgICAgICAgICMgaWYgYW4gaW1hZ2UgZmlsZSB3YXMgcHJvZHVjZWQKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGltYWdlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCk6CisgICAgICAgICAgICAgICAgaGFzX2ZpbGVzID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgYmFzZW5hbWVzID0gc2VsZi5fZ2V0X2ZpbGVuYW1lc19mcm9tX2ltYWdlX2xpY2Vuc2UoCisgICAgICAgICAgICAgICAgICAgIGltYWdlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCkKKworICAgICAgICAgICAgICAgIGZvciBiYXNlbmFtZSBpbiBiYXNlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2Rpcl9pbWFnZSwgYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcnRpZmFjdF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJhcnRpZmFjdCAlcyBkb2Vzbid0IGV4aXN0LCBza2lwcGluZyIgJSBhcnRpZmFjdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYXJ0aWZhY3Rfc2l6ZSA9IG9zLnN0YXQoYXJ0aWZhY3RfcGF0aCkuc3Rfc2l6ZQorCisgICAgICAgICAgICAgICAgICAgICMgbm90ZSB0aGF0IHRoZSBhcnRpZmFjdCB3aWxsIG9ubHkgYmUgc2F2ZWQgYWdhaW5zdCB0aGlzCisgICAgICAgICAgICAgICAgICAgICMgYnVpbGQgaWYgaXQgaGFzbid0IGJlZW4gYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X2tlcm5lbF9maWxlKGltYWdlX3RhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0X3BhdGgsIGFydGlmYWN0X3NpemUpCisKKyAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSBsaWNlbnNlIG1hbmlmZXN0IHBhdGggb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICMgKHRoaXMgZmlsZSBpcyBhbHNvIGNyZWF0ZWQgYW55IHRpbWUgYW4gaW1hZ2UgZmlsZSBpcyBjcmVhdGVkKQorICAgICAgICAgICAgICAgIGxpY2Vuc2VfbWFuaWZlc3RfcGF0aCA9IG9zLnBhdGguam9pbihsaWNlbnNlX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgcmVhbF9pbWFnZV9uYW1lLCAnbGljZW5zZS5tYW5pZmVzdCcpCisKKyAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnVwZGF0ZV90YXJnZXRfc2V0X2xpY2Vuc2VfbWFuaWZlc3QoCisgICAgICAgICAgICAgICAgICAgIGltYWdlX3RhcmdldCwgbGljZW5zZV9tYW5pZmVzdF9wYXRoKQorCisgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgcGFja2FnZSBtYW5pZmVzdCBwYXRoIG9uIHRoZSB0YXJnZXQgKHRoaXMgZmlsZQorICAgICAgICAgICAgICAgICMgaXMgY3JlYXRlZCBhbnkgdGltZSBhbiBpbWFnZSBmaWxlIGlzIGNyZWF0ZWQpCisgICAgICAgICAgICAgICAgcGFja2FnZV9tYW5pZmVzdF9wYXRoID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXJfaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgIHJlYWxfaW1hZ2VfbmFtZSArICcucm9vdGZzLm1hbmlmZXN0JykKKworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhY2thZ2VfbWFuaWZlc3RfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIudXBkYXRlX3RhcmdldF9zZXRfcGFja2FnZV9tYW5pZmVzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX3RhcmdldCwgcGFja2FnZV9tYW5pZmVzdF9wYXRoKQorCisgICAgICAgICAgICAjIHNjYW4gdGhlIGRpcmVjdG9yeSBmb3IgaW1hZ2UgZmlsZXMgcmVsYXRpbmcgdG8gdGhpcyBidWlsZAorICAgICAgICAgICAgIyAodmlhIHJlYWxfaW1hZ2VfbmFtZSk7IG5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHNldAorICAgICAgICAgICAgIyBoYXNfZmlsZXMgPSBUcnVlLCBhcyBzZWFyY2hpbmcgZm9yIHRoZSBsaWNlbnNlIG1hbmlmZXN0IGZpbGUKKyAgICAgICAgICAgICMgd2lsbCBhbHJlYWR5IGhhdmUgc2V0IGl0IHRvIHRydWUgaWYgYXQgbGVhc3Qgb25lIGltYWdlIGZpbGUgd2FzCisgICAgICAgICAgICAjIHByb2R1Y2VkOyBub3RlIHRoYXQgdGhlIHJlYWxfaW1hZ2VfbmFtZSBpbmNsdWRlcyBCVUlMRE5BTUUsIHdoaWNoCisgICAgICAgICAgICAjIGluIHR1cm4gaW5jbHVkZXMgYSB0aW1lc3RhbXA7IHNvIGlmIG5vIGZpbGVzIHdlcmUgcHJvZHVjZWQgZm9yCisgICAgICAgICAgICAjIHRoaXMgdGltZXN0YW1wIChpLmUuIHRoZSBidWlsZCByZXVzZWQgZXhpc3RpbmcgaW1hZ2UgZmlsZXMgYWxyZWFkeQorICAgICAgICAgICAgIyBpbiB0aGUgZGlyZWN0b3J5KSwgbm8gZmlsZXMgd2lsbCBiZSByZWNvcmRlZCBhZ2FpbnN0IHRoaXMgdGFyZ2V0CisgICAgICAgICAgICBpbWFnZV9maWxlcyA9IHNlbGYuX2dldF9pbWFnZV9maWxlcyhkZXBsb3lfZGlyX2ltYWdlLAorICAgICAgICAgICAgICAgIHJlYWxfaW1hZ2VfbmFtZSwgaW1hZ2VfZmlsZV9leHRlbnNpb25zX3VuaXF1ZSkKKworICAgICAgICAgICAgZm9yIGltYWdlX2ZpbGUgaW4gaW1hZ2VfZmlsZXM6CisgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX3RhcmdldF9pbWFnZV9maWxlX2luZm9ybWF0aW9uKAorICAgICAgICAgICAgICAgICAgICBpbWFnZV90YXJnZXQsIGltYWdlX2ZpbGVbJ3BhdGgnXSwgaW1hZ2VfZmlsZVsnc2l6ZSddKQorCisgICAgICAgICAgICBpZiBub3QgaGFzX2ZpbGVzOgorICAgICAgICAgICAgICAgICMgY29weSBpbWFnZSBmaWxlcyBhbmQgYnVpbGQgYXJ0aWZhY3RzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgIyBtb3N0LXJlY2VudGx5LWJ1aWx0IFRhcmdldCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICMgc2FtZSB0YXJnZXQgKyBtYWNoaW5lIGFzIHRoaXMgVGFyZ2V0OyBhbHNvIGNvcHkgdGhlIGxpY2Vuc2UKKyAgICAgICAgICAgICAgICAjIG1hbmlmZXN0IHBhdGgsIGFzIHRoYXQgaXMgbm90IHRyZWF0ZWQgYXMgYW4gYXJ0aWZhY3QgYW5kIG5lZWRzCisgICAgICAgICAgICAgICAgIyB0byBiZSBzZXQgc2VwYXJhdGVseQorICAgICAgICAgICAgICAgIHNpbWlsYXJfdGFyZ2V0ID0gXAorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmdldF9zaW1pbGFyX3RhcmdldF93aXRoX2ltYWdlX2ZpbGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdGFyZ2V0KQorCisgICAgICAgICAgICAgICAgaWYgc2ltaWxhcl90YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdpbWFnZSBhcnRpZmFjdHMgZm9yIHRhcmdldCAlcyBjbG9uZWQgZnJvbSAnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQgJXMnICUgKGltYWdlX3RhcmdldC5waywgc2ltaWxhcl90YXJnZXQucGspKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmNsb25lX2ltYWdlX2FydGlmYWN0cyhzaW1pbGFyX3RhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX3RhcmdldCkKKworICAgIGRlZiBfZ2V0X3Nka190YXJnZXRzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRhcmdldHMgd2hpY2ggY291bGQgZ2VuZXJhdGUgU0RLIGFydGlmYWN0cywgaS5lLgorICAgICAgICAiZG9fcG9wdWxhdGVfc2RrIiBhbmQgImRvX3BvcHVsYXRlX3Nka19leHQiLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIFt0YXJnZXQgZm9yIHRhcmdldCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ10gXAorICAgICAgICAgICAgaWYgdGFyZ2V0LnRhc2sgaW4gWydwb3B1bGF0ZV9zZGsnLCAncG9wdWxhdGVfc2RrX2V4dCddXQorCisgICAgZGVmIHNjYW5fc2RrX2FydGlmYWN0cyhzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBOb3RlIHRoYXQgd2UgaGF2ZSB0byBpbnRlcmNlcHQgYW4gU0RLQXJ0aWZhY3RJbmZvIGV2ZW50IGZyb20KKyAgICAgICAgdG9hc3Rlci5iYmNsYXNzICh2aWEgdG9hc3RlcnVpKSB0byBnZXQgaG9sZCBvZiB0aGUgU0RLIHZhcmlhYmxlcyB3ZQorICAgICAgICBuZWVkIHRvIGJlIGFibGUgdG8gc2NhbiBmb3IgZmlsZXMgYWNjdXJhdGVseTogdGhpcyBpcyBiZWNhdXNlCisgICAgICAgIHZhcmlhYmxlcyBsaWtlIFRPT0xDSEFJTl9PVVRQVVROQU1FIGhhdmUgcmVzZXQgdG8gTm9uZSBieSB0aGUgdGltZQorICAgICAgICBCdWlsZENvbXBsZXRlZCBpcyBmaXJlZCBieSBiaXRiYWtlLCBzbyB3ZSBoYXZlIHRvIGdldCB0aG9zZSB2YWx1ZXMKKyAgICAgICAgd2hpbGUgdGhlIGJ1aWxkIGlzIHN0aWxsIGluIHByb2dyZXNzLgorCisgICAgICAgIEZvciBwb3B1bGF0ZV9zZGtfZXh0LCB0aGlzIHJ1bnMgdHdpY2UsIHdpdGggdHdvIGRpZmZlcmVudAorICAgICAgICBUT09MQ0hBSU5fT1VUUFVUTkFNRSBzZXR0aW5ncywgZWFjaCBvZiB3aGljaCB3aWxsIGNhcHR1cmUgc29tZSBvZiB0aGUKKyAgICAgICAgZmlsZXMgaW4gdGhlIFNESyBvdXRwdXQgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgc2RrX3ZhcnMgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgIHRvb2xjaGFpbl9vdXRwdXRuYW1lID0gc2RrX3ZhcnNbJ1RPT0xDSEFJTl9PVVRQVVROQU1FJ10KKworICAgICAgICAjIHRhcmdldHMgd2hpY2ggbWlnaHQgaGF2ZSBjcmVhdGVkIFNESyBhcnRpZmFjdHMKKyAgICAgICAgc2RrX3RhcmdldHMgPSBzZWxmLl9nZXRfc2RrX3RhcmdldHMoKQorCisgICAgICAgICMgbG9jYXRpb24gb2YgU0RLIGFydGlmYWN0cworICAgICAgICB0bXBkaXIgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsnZ2V0VmFyaWFibGUnLCAnVE1QRElSJ10pWzBdCisgICAgICAgIHNka19kaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGVwbG95JywgJ3NkaycpCisKKyAgICAgICAgIyBhbGwgZmlsZXMgaW4gdGhlIFNESyBkaXJlY3RvcnkKKyAgICAgICAgYXJ0aWZhY3RzID0gW10KKyAgICAgICAgZm9yIGRpcl9wYXRoLCBfLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhzZGtfZGlyKToKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGRpcl9wYXRoLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RzLmFwcGVuZChmdWxsX3BhdGgpCisKKyAgICAgICAgZm9yIHNka190YXJnZXQgaW4gc2RrX3RhcmdldHM6CisgICAgICAgICAgICAjIGZpbmQgZmlsZXMgaW4gdGhlIFNESyBkaXJlY3Rvcnkgd2hpY2ggaGF2ZW4ndCBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICMgcmVjb3JkZWQgYWdhaW5zdCBhIFRhcmdldCBhbmQgd2hvc2UgYmFzZW5hbWUgbWF0Y2hlcworICAgICAgICAgICAgIyBUT09MQ0hBSU5fT1VUUFVUTkFNRQorICAgICAgICAgICAgZm9yIGFydGlmYWN0X3BhdGggaW4gYXJ0aWZhY3RzOgorICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcnRpZmFjdF9wYXRoKQorCisgICAgICAgICAgICAgICAgdG9vbGNoYWluX21hdGNoID0gYmFzZW5hbWUuc3RhcnRzd2l0aCh0b29sY2hhaW5fb3V0cHV0bmFtZSkKKworICAgICAgICAgICAgICAgICMgZmlsZXMgd2hpY2ggbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIHRhcmdldCB3aGljaCBwcm9kdWNlZCB0aGVtOworICAgICAgICAgICAgICAgICMgZm9yIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgIyBwb2t5LWdsaWJjLXg4Nl82NC1jb3JlLWltYWdlLXNhdG8taTU4Ni10b29sY2hhaW4tZXh0LTIuMStzbmFwc2hvdC5zaAorICAgICAgICAgICAgICAgIHRhcmdldF9tYXRjaCA9IHJlLnNlYXJjaChzZGtfdGFyZ2V0LnRhcmdldCwgYmFzZW5hbWUpCisKKyAgICAgICAgICAgICAgICAjIHRhcmdldHMgd2hpY2ggcHJvZHVjZSAiKi1uYXRpdmVzZGstKiIgZmlsZXMKKyAgICAgICAgICAgICAgICBpc19leHRfc2RrX3RhcmdldCA9IHNka190YXJnZXQudGFzayBpbiBcCisgICAgICAgICAgICAgICAgICAgIFsnZG9fcG9wdWxhdGVfc2RrX2V4dCcsICdwb3B1bGF0ZV9zZGtfZXh0J10KKworICAgICAgICAgICAgICAgICMgU0RLIGZpbGVzIHdoaWNoIGRvbid0IG1hdGNoIHRoZSB0YXJnZXQgbmFtZSwgaS5lLgorICAgICAgICAgICAgICAgICMgeDg2XzY0LW5hdGl2ZXNkay1saWJjLioKKyAgICAgICAgICAgICAgICAjIHBva3ktZ2xpYmMteDg2XzY0LWJ1aWxkdG9vbHMtdGFyYmFsbC1pNTg2LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtMi4xK3NuYXBzaG90KgorICAgICAgICAgICAgICAgIGlzX2V4dF9zZGtfZmlsZSA9IHJlLnNlYXJjaCgnLW5hdGl2ZXNkay0nLCBiYXNlbmFtZSkKKworICAgICAgICAgICAgICAgIGZpbGVfZnJvbV90YXJnZXQgPSAodG9vbGNoYWluX21hdGNoIGFuZCB0YXJnZXRfbWF0Y2gpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgKGlzX2V4dF9zZGtfdGFyZ2V0IGFuZCBpc19leHRfc2RrX2ZpbGUpCisKKyAgICAgICAgICAgICAgICBpZiBmaWxlX2Zyb21fdGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICAjIGRvbid0IHJlY29yZCB0aGUgZmlsZSBpZiBpdCdzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGlzCisgICAgICAgICAgICAgICAgICAgICMgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nX2ZpbGVzID0gVGFyZ2V0U0RLRmlsZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1zZGtfdGFyZ2V0LCBmaWxlX25hbWU9YXJ0aWZhY3RfcGF0aCkKKworICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaGluZ19maWxlcy5jb3VudCgpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdF9zaXplID0gb3Muc3RhdChhcnRpZmFjdF9wYXRoKS5zdF9zaXplCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV90YXJnZXRfc2RrX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RrX3RhcmdldCwgYXJ0aWZhY3RfcGF0aCwgYXJ0aWZhY3Rfc2l6ZSkKKworICAgIGRlZiBjbG9uZV9yZXF1aXJlZF9zZGtfYXJ0aWZhY3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgYW4gU0RLIHRhcmdldCBkb2Vzbid0IGhhdmUgYW55IFNESyBhcnRpZmFjdHMsIHRoaXMgbWVhbnMgdGhhdAorICAgICAgICB0aGUgcG9zdGZ1bmNzIG9mIHBvcHVsYXRlX3NkayBvciBwb3B1bGF0ZV9zZGtfZXh0IGRpZG4ndCBmaXJlLCB3aGljaAorICAgICAgICBpbiB0dXJuIG1lYW5zIHRoYXQgdGhlIHRhcmdldHMgb2YgdGhpcyBidWlsZCBkaWRuJ3QgZ2VuZXJhdGUgYW55IG5ldworICAgICAgICBhcnRpZmFjdHMuCisKKyAgICAgICAgSW4gdGhpcyBjYXNlLCBjbG9uZSBTREsgYXJ0aWZhY3RzIGZvciB0YXJnZXRzIGluIHRoZSBjdXJyZW50IGJ1aWxkCisgICAgICAgIGZyb20gZXhpc3RpbmcgdGFyZ2V0cyBmb3IgdGhpcyBidWlsZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNka190YXJnZXRzID0gc2VsZi5fZ2V0X3Nka190YXJnZXRzKCkKKyAgICAgICAgZm9yIHNka190YXJnZXQgaW4gc2RrX3RhcmdldHM6CisgICAgICAgICAgICAjIG9ubHkgY2xvbmUgZm9yIFNESyB0YXJnZXRzIHdoaWNoIGhhdmUgbm8gVGFyZ2V0U0RLRmlsZXMgeWV0CisgICAgICAgICAgICBpZiBzZGtfdGFyZ2V0LnRhcmdldHNka2ZpbGVfc2V0LmFsbCgpLmNvdW50KCkgPT0gMDoKKyAgICAgICAgICAgICAgICBzaW1pbGFyX3RhcmdldCA9IFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5nZXRfc2ltaWxhcl90YXJnZXRfd2l0aF9zZGtfZmlsZXMoCisgICAgICAgICAgICAgICAgICAgICAgICBzZGtfdGFyZ2V0KQorICAgICAgICAgICAgICAgIGlmIHNpbWlsYXJfdGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU0RLIGFydGlmYWN0cyBmb3IgdGFyZ2V0ICVzIGNsb25lZCBmcm9tICcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCAlcycgJSAoc2RrX3RhcmdldC5waywgc2ltaWxhcl90YXJnZXQucGspKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmNsb25lX3Nka19hcnRpZmFjdHMoc2ltaWxhcl90YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBzZGtfdGFyZ2V0KQorCiAgICAgZGVmIGNsb3NlKHNlbGYsIGVycm9yY29kZSk6Ci0gICAgICAgIGlmIHNlbGYuYnJiZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3N0b3JlX2J1aWxkX2RvbmUoZXJyb3Jjb2RlKQorICAgICAgICBzZWxmLl9zdG9yZV9idWlsZF9kb25lKGVycm9yY29kZSkKIAogICAgICAgICBpZiAnYmFja2xvZycgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKLSAgICAgICAgICAgIGlmICdidWlsZCcgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKLSAgICAgICAgICAgICAgICAjIHdlIHNhdmUgbWlzc2VkIGV2ZW50cyBpbiB0aGUgZGF0YWJhc2UgZm9yIHRoZSBjdXJyZW50IGJ1aWxkCi0gICAgICAgICAgICAgICAgdGVtcGV2ZW50ID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddLnBvcCgpCi0gICAgICAgICAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQodGVtcGV2ZW50KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIHdlIGhhdmUgbm8gYnVpbGQsIGFuZCB3ZSBzdGlsbCBoYXZlIGV2ZW50czsgc29tZXRoaW5nIGFtYXppbmdseSB3cm9uZyBoYXBwZW5kCi0gICAgICAgICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVTlNBVkVEIGxvZzogJXMiLCBldmVudC5tc2cpCisgICAgICAgICAgICAjIHdlIHNhdmUgbWlzc2VkIGV2ZW50cyBpbiB0aGUgZGF0YWJhc2UgZm9yIHRoZSBjdXJyZW50IGJ1aWxkCisgICAgICAgICAgICB0ZW1wZXZlbnQgPSBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10ucG9wKCkKKyAgICAgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KHRlbXBldmVudCkKIAogICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgogICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKQEAgLTE1MTksMyArMTkyOCw3IEBACiAgICAgICAgICMgYmVpbmcgaW5jb3JyZWN0bHkgYXR0YWNoZWQgdG8gdGhlIHByZXZpb3VzIFRvYXN0ZXItdHJpZ2dlcmVkIGJ1aWxkOwogICAgICAgICAjIHNlZSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjEKICAgICAgICAgc2VsZi5icmJlID0gTm9uZQorCisgICAgICAgICMgdW5zZXQgdGhlIGludGVybmFsIEJ1aWxkIG9iamVjdCB0byBwcmV2ZW50IGl0IGJlaW5nIHJldXNlZCBmb3IgdGhlCisgICAgICAgICMgbmV4dCBidWlsZAorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddID0gTm9uZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9fX2luaXRfXy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3Y2JlMWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMKLSMgR3RrKyBVSSBwaWVjZXMgZm9yIEJpdEJha2UKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNkaWFsb2cucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNkaWFsb2cucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NzlmOWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzZGlhbG9nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIwotIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+Ci0jIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+Ci0jIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotaW1wb3J0IGd0awotCi0iIiIKLVRoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50Ci1CaXRCYWtlIEdVSSdzCi1JbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4Ci0iIiIKLQotY2xhc3MgQ3J1bWJzRGlhbG9nKGd0ay5EaWFsb2cpOgotICAgICIiIgotICAgIEEgR05PTUUgSElHIGNvbXBsaWFudCBkaWFsb2cgd2lkZ2V0LgotICAgIEFkZCBidXR0b25zIHdpdGggZ3RrLkRpYWxvZy5hZGRfYnV0dG9uIG9yIGd0ay5EaWFsb2cuYWRkX2J1dHRvbnMKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGU9IiIsIHBhcmVudD1Ob25lLCBmbGFncz0wLCBidXR0b25zPU5vbmUpOgotICAgICAgICBzdXBlcihDcnVtYnNEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQotCi0gICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJoYXMtc2VwYXJhdG9yIiwgRmFsc2UpICMgbm90ZTogZGVwcmVjYXRlZCBpbiAyLjIyCi0KLSAgICAgICAgc2VsZi5zZXRfYm9yZGVyX3dpZHRoKDYpCi0gICAgICAgIHNlbGYudmJveC5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKLSAgICAgICAgc2VsZi5hY3Rpb25fYXJlYS5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKLSAgICAgICAgc2VsZi5hY3Rpb25fYXJlYS5zZXRfcHJvcGVydHkoImJvcmRlci13aWR0aCIsIDYpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNtZXNzYWdlZGlhbG9nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzbWVzc2FnZWRpYWxvZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I5OThlNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNtZXNzYWdlZGlhbG9nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotIwotIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+Ci0jIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+Ci0jIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotaW1wb3J0IGdsaWIKLWltcG9ydCBndGsKLWZyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iSWNvbkNoZWNrZXIKLWZyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZwotCi0iIiIKLVRoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50Ci1CaXRCYWtlIEdVSSdzCi1JbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4Ci0iIiIKLQotY2xhc3MgQ3J1bWJzTWVzc2FnZURpYWxvZyhndGsuTWVzc2FnZURpYWxvZyk6Ci0gICAgIiIiCi0gICAgQSBHTk9NRSBISUcgY29tcGxpYW50IGRpYWxvZyB3aWRnZXQuCi0gICAgQWRkIGJ1dHRvbnMgd2l0aCBndGsuRGlhbG9nLmFkZF9idXR0b24gb3IgZ3RrLkRpYWxvZy5hZGRfYnV0dG9ucwotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQgPSBOb25lLCBsYWJlbD0iIiwgZGlhbG9nX3R5cGUgPSBndGsuTUVTU0FHRV9RVUVTVElPTiwgbXNnPSIiKToKLSAgICAgICAgc3VwZXIoQ3J1bWJzTWVzc2FnZURpYWxvZywgc2VsZikuX19pbml0X18oTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5CVVRUT05TX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpCi0KLSAgICAgICAgc2VsZi5zZXRfc2tpcF90YXNrYmFyX2hpbnQoRmFsc2UpCi0KLSAgICAgICAgc2VsZi5zZXRfbWFya3VwKGxhYmVsKQotCi0gICAgICAgIGlmIDAgPD0gbGVuKG1zZykgPCAzMDA6Ci0gICAgICAgICAgICBzZWxmLmZvcm1hdF9zZWNvbmRhcnlfbWFya3VwKG1zZykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZib3ggPSBzZWxmLmdldF9tZXNzYWdlX2FyZWEoKQotICAgICAgICAgICAgdmJveC5zZXRfYm9yZGVyX3dpZHRoKDEpCi0gICAgICAgICAgICB2Ym94LnNldF9wcm9wZXJ0eSgic3BhY2luZyIsIDEyKQotICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKLSAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKLSAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKLSAgICAgICAgICAgIHNlbGYubXNnVmlldyA9IGd0ay5UZXh0VmlldygpCi0gICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2VkaXRhYmxlKEZhbHNlKQotICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF93cmFwX21vZGUoZ3RrLldSQVBfV09SRCkKLSAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfY3Vyc29yX3Zpc2libGUoRmFsc2UpCi0gICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X3NpemVfcmVxdWVzdCgzMDAsIDMwMCkKLSAgICAgICAgICAgIHNlbGYuYnVmID0gZ3RrLlRleHRCdWZmZXIoKQotICAgICAgICAgICAgc2VsZi5idWYuc2V0X3RleHQobXNnKQotICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9idWZmZXIoc2VsZi5idWYpCi0gICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuYWRkKHNlbGYubXNnVmlldykKLSAgICAgICAgICAgIHNlbGYubXNnVmlldy5zaG93KCkKLSAgICAgICAgICAgIHZib3guYWRkKHNlbGYudGV4dFdpbmRvdykKLSAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zaG93KCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2RlcGxveWltYWdlZGlhbG9nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvZGVwbG95aW1hZ2VkaWFsb2cucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExM2ZmZjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvZGVwbG95aW1hZ2VkaWFsb2cucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotIwotIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+Ci0jIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+Ci0jIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotaW1wb3J0IGdsb2IKLWltcG9ydCBndGsKLWltcG9ydCBnb2JqZWN0Ci1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHNobGV4Ci1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHRlbXBmaWxlCi1mcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iQnV0dG9uCi1mcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKLWltcG9ydCBiYi51aS5jcnVtYnMudXRpbHMKLWltcG9ydCBiYi5wcm9jZXNzCi1mcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKLWZyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCi0KLSIiIgotVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKLUJpdEJha2UgR1VJJ3MKLUluIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKLSIiIgotCi1jbGFzcyBEZXBsb3lJbWFnZURpYWxvZyAoQ3J1bWJzRGlhbG9nKToKLQotICAgIF9fZHVtbXlfdXNiX18gPSAiLS1zZWxlY3QgYSB1c2IgZHJpdmUtLSIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgaW1hZ2VfcGF0aCwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lLCBzdGFuZGFsb25lPUZhbHNlKToKLSAgICAgICAgc3VwZXIoRGVwbG95SW1hZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQotCi0gICAgICAgIHNlbGYuaW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKLSAgICAgICAgc2VsZi5zdGFuZGFsb25lID0gc3RhbmRhbG9uZQotCi0gICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCi0gICAgICAgIHNlbGYuY29ubmVjdCgicmVzcG9uc2UiLCBzZWxmLnJlc3BvbnNlX2NiKQotCi0gICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6Ci0gICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCg2MDAsIDQwMCkKLSAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQotICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQotICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+VGhlIGltYWdlIHRvIGJlIHdyaXR0ZW4gaW50byB1c2IgZHJpdmU6PC9zcGFuPiIKLSAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrdXApCi0gICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MikKLQotICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgyLCAxMCwgRmFsc2UpCi0gICAgICAgIHRhYmxlLnNldF9jb2xfc3BhY2luZ3MoNSkKLSAgICAgICAgdGFibGUuc2V0X3Jvd19zcGFjaW5ncyg1KQotICAgICAgICBzZWxmLnZib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKLQotICAgICAgICBzY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQotICAgICAgICBzY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKLSAgICAgICAgc2Nyb2xsLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQotICAgICAgICB0diA9IGd0ay5UZXh0VmlldygpCi0gICAgICAgIHR2LnNldF9lZGl0YWJsZShGYWxzZSkKLSAgICAgICAgdHYuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQotICAgICAgICB0di5zZXRfY3Vyc29yX3Zpc2libGUoRmFsc2UpCi0gICAgICAgIHNlbGYuYnVmID0gZ3RrLlRleHRCdWZmZXIoKQotICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChzZWxmLmltYWdlX3BhdGgpCi0gICAgICAgIHR2LnNldF9idWZmZXIoc2VsZi5idWYpCi0gICAgICAgIHNjcm9sbC5hZGQodHYpCi0gICAgICAgIHRhYmxlLmF0dGFjaChzY3JvbGwsIDAsIDEwLCAwLCAxKQotCi0gICAgICAgICMgVGhlcmUgYXJlIDIgd2F5cyB0byB1c2UgRGVwbG95SW1hZ2VEaWFsb2cKLSAgICAgICAgIyBPbmUgd2F5IGlzIHRoYXQgY2FsbGVkIGJ5IEhPQiB3aGVuIHRoZSAnRGVwbG95IEltYWdlJyBidXR0b24gaXMgY2xpY2tlZAotICAgICAgICAjIFRoZSBvdGhlciB3YXkgaXMgdGhhdCBjYWxsZWQgYnkgYSBzdGFuZGFsb25lIHNjcmlwdC4KLSAgICAgICAgIyBGb2xsb3dpbmcgYmxvY2sgb2YgY29kZXMgaGFuZGxlcyB0aGUgbGF0dGVyIHdheS4gSXQgYWRkcyBhICdTZWxlY3QgSW1hZ2UnIGJ1dHRvbiBhbmQKLSAgICAgICAgIyBlbWl0IGEgc2lnbmFsIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLgotICAgICAgICBpZiBzZWxmLnN0YW5kYWxvbmU6Ci0gICAgICAgICAgICAgICAgZ29iamVjdC5zaWduYWxfbmV3KCJzZWxlY3RfaW1hZ2VfY2xpY2tlZCIsIHNlbGYsIGdvYmplY3QuU0lHTkFMX1JVTl9GSVJTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsICgpKQotICAgICAgICAgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQotICAgICAgICAgICAgICAgIHBpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGhpYy5JQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUpCi0gICAgICAgICAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYocGl4X2J1ZmZlcikKLSAgICAgICAgICAgICAgICBidXR0b24gPSBndGsuQnV0dG9uKCJTZWxlY3QgSW1hZ2UiKQotICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRfaW1hZ2UoaWNvbikKLSAgICAgICAgICAgICAgICAjYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTQwLCA1MCkKLSAgICAgICAgICAgICAgICB0YWJsZS5hdHRhY2goYnV0dG9uLCA5LCAxMCwgMSwgMiwgZ3RrLkZJTEwsIDAsIDAsIDApCi0gICAgICAgICAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnNlbGVjdF9pbWFnZV9idXR0b25fY2xpY2tlZF9jYikKLQotICAgICAgICBzZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCi0gICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlcGFyYXRvciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTEwKQotCi0gICAgICAgIHNlbGYudXNiX2Rlc2MgPSBndGsuTGFiZWwoKQotICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCi0gICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz5Zb3UgaGF2ZW4ndCBjaG9zZW4gYW55IFVTQiBkcml2ZS48L3NwYW4+IgotICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9tYXJrdXAobWFya3VwKQotCi0gICAgICAgIHNlbGYudXNiX2NvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCi0gICAgICAgIHNlbGYudXNiX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnVzYl9jb21ib19jaGFuZ2VkX2NiKQotICAgICAgICBtb2RlbCA9IHNlbGYudXNiX2NvbWJvLmdldF9tb2RlbCgpCi0gICAgICAgIG1vZGVsLmNsZWFyKCkKLSAgICAgICAgc2VsZi51c2JfY29tYm8uYXBwZW5kX3RleHQoc2VsZi5fX2R1bW15X3VzYl9fKQotICAgICAgICBmb3IgdXNiIGluIHNlbGYuZmluZF9hbGxfdXNiX2RldmljZXMoKToKLSAgICAgICAgICAgIHNlbGYudXNiX2NvbWJvLmFwcGVuZF90ZXh0KCIvZGV2LyIgKyB1c2IpCi0gICAgICAgIHNlbGYudXNiX2NvbWJvLnNldF9hY3RpdmUoMCkKLSAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi51c2JfY29tYm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKLSAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi51c2JfZGVzYywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTIpCi0KLSAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIgPSBIb2JQcm9ncmVzc0JhcigpCi0gICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYucHJvZ3Jlc3NfYmFyLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCi0gICAgICAgIHNlcGFyYXRvciA9IGd0ay5IU2VwYXJhdG9yKCkKLSAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VwYXJhdG9yLCBleHBhbmQ9RmFsc2UsIGZpbGw9VHJ1ZSwgcGFkZGluZz0xMCkKLQotICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQotICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5oaWRlKCkKLQotICAgIGRlZiBzZXRfaW1hZ2VfdGV4dF9idWZmZXIoc2VsZiwgaW1hZ2VfcGF0aCk6Ci0gICAgICAgIHNlbGYuYnVmLnNldF90ZXh0KGltYWdlX3BhdGgpCi0KLSAgICBkZWYgc2V0X2ltYWdlX3BhdGgoc2VsZiwgaW1hZ2VfcGF0aCk6Ci0gICAgICAgIHNlbGYuaW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKLQotICAgIGRlZiBwb3Blbl9yZWFkKHNlbGYsIGNtZCk6Ci0gICAgICAgIHRtcG91dCwgZXJyb3JzID0gYmIucHJvY2Vzcy5ydW4oIiVzIiAlIGNtZCkKLSAgICAgICAgcmV0dXJuIHRtcG91dC5zdHJpcCgpCi0KLSAgICBkZWYgZmluZF9hbGxfdXNiX2RldmljZXMoc2VsZik6Ci0gICAgICAgIHVzYl9kZXZzID0gWyBvcy5yZWFkbGluayh1KQotICAgICAgICAgICAgZm9yIHUgaW4gZ2xvYi5nbG9iKCcvZGV2L2Rpc2svYnktaWQvdXNiKicpCi0gICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKHIncGFydFxkKycsIHUpIF0KLSAgICAgICAgcmV0dXJuIFsgJyVzJyAlIHVbdS5yZmluZCgnLycpKzE6XSBmb3IgdSBpbiB1c2JfZGV2cyBdCi0KLSAgICBkZWYgZ2V0X3VzYl9pbmZvKHNlbGYsIGRldik6Ci0gICAgICAgIHJldHVybiAiJXMgJXMiICUgXAotICAgICAgICAgICAgKHNlbGYucG9wZW5fcmVhZCgnY2F0IC9zeXMvY2xhc3MvYmxvY2svJXMvZGV2aWNlL3ZlbmRvcicgJSBkZXYpLAotICAgICAgICAgICAgc2VsZi5wb3Blbl9yZWFkKCdjYXQgL3N5cy9jbGFzcy9ibG9jay8lcy9kZXZpY2UvbW9kZWwnICUgZGV2KSkKLQotICAgIGRlZiBzZWxlY3RfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKLSAgICAgICAgICAgIHNlbGYuZW1pdCgnc2VsZWN0X2ltYWdlX2NsaWNrZWQnKQotCi0gICAgZGVmIHVzYl9jb21ib19jaGFuZ2VkX2NiKHNlbGYsIHVzYl9jb21ibyk6Ci0gICAgICAgIGNvbWJvX2l0ZW0gPSBzZWxmLnVzYl9jb21iby5nZXRfYWN0aXZlX3RleHQoKQotICAgICAgICBpZiBub3QgY29tYm9faXRlbSBvciBjb21ib19pdGVtID09IHNlbGYuX19kdW1teV91c2JfXzoKLSAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz5Zb3UgaGF2ZW4ndCBjaG9zZW4gYW55IFVTQiBkcml2ZS48L3NwYW4+IgotICAgICAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfbWFya3VwKG1hcmt1cCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz4iICsgc2VsZi5nZXRfdXNiX2luZm8oY29tYm9faXRlbS5sc3RyaXAoIi9kZXYvIikpICsgIjwvc3Bhbj4iCi0gICAgICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9tYXJrdXAobWFya3VwKQotCi0gICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgotICAgICAgICBpZiByZXNwb25zZV9pZCA9PSBndGsuUkVTUE9OU0VfWUVTOgotICAgICAgICAgICAgbGJsID0gJycKLSAgICAgICAgICAgIG1zZyA9ICcnCi0gICAgICAgICAgICBjb21ib19pdGVtID0gc2VsZi51c2JfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKLSAgICAgICAgICAgIGlmIGNvbWJvX2l0ZW0gYW5kIGNvbWJvX2l0ZW0gIT0gc2VsZi5fX2R1bW15X3VzYl9fIGFuZCBzZWxmLmltYWdlX3BhdGg6Ci0gICAgICAgICAgICAgICAgY21kbGluZSA9IGJiLnVpLmNydW1icy51dGlscy53aGljaF90ZXJtaW5hbCgpCi0gICAgICAgICAgICAgICAgaWYgY21kbGluZToKLSAgICAgICAgICAgICAgICAgICAgdG1wZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCi0gICAgICAgICAgICAgICAgICAgIGNtZGxpbmUgKz0gIlwic3VkbyBkZCBpZj0iICsgc2VsZi5pbWFnZV9wYXRoICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mPSIgKyBjb21ib19pdGVtICsgIiAmJiBzeW5jOyBlY2hvICQ/ID4gIiArIHRtcGZpbGUubmFtZSArICJcIiIKLSAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNobGV4LnNwbGl0KGNtZGxpbmUpKQotCi0gICAgICAgICAgICAgICAgICAgIGlmIGludCh0bXBmaWxlLnJlYWRsaW5lKCkuc3RyaXAoKSkgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5EZXBsb3kgaW1hZ2Ugc3VjY2Vzc2Z1bGx5LjwvYj4iCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+RmFpbGVkIHRvIGRlcGxveSBpbWFnZS48L2I+IgotICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIlBsZWFzZSBjaGVjayBpbWFnZSA8Yj4lczwvYj4gZXhpc3RzIGFuZCBVU0IgZGV2aWNlIDxiPiVzPC9iPiBpcyB3cml0YWJsZS4iICUgKHNlbGYuaW1hZ2VfcGF0aCwgY29tYm9faXRlbSkKLSAgICAgICAgICAgICAgICAgICAgdG1wZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmltYWdlX3BhdGg6Ci0gICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb24gbWFkZS48L2I+IgotICAgICAgICAgICAgICAgICAgICBtc2cgPSAiWW91IGhhdmUgbm90IHNlbGVjdGVkIGFuIGltYWdlIHRvIGRlcGxveS4iCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbiBtYWRlLjwvYj4iCi0gICAgICAgICAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3Qgc2VsZWN0ZWQgYSBVU0IgZGV2aWNlLiIKLSAgICAgICAgICAgIGlmIGxlbihsYmwpOgotICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQotICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCi0gICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCi0gICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQotICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCi0KLSAgICBkZWYgdXBkYXRlX3Byb2dyZXNzX2JhcihzZWxmLCB0aXRsZSwgZnJhY3Rpb24sIHN0YXR1cz1Ob25lKToKLSAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIudXBkYXRlKGZyYWN0aW9uKQotICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGl0bGUodGl0bGUpCi0gICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKHN0YXR1cykKLQotICAgIGRlZiB3cml0ZV9maWxlKHNlbGYsIGlmaWxlLCBvZmlsZSk6Ci0gICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnJlc2V0KCkKLSAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2hvdygpCi0KLSAgICAgICAgZl9mcm9tID0gb3Mub3BlbihpZmlsZSwgb3MuT19SRE9OTFkpCi0gICAgICAgIGZfdG8gPSBvcy5vcGVuKG9maWxlLCBvcy5PX1dST05MWSkKLQotICAgICAgICB0b3RhbF9zaXplID0gb3Muc3RhdChpZmlsZSkuc3Rfc2l6ZQotICAgICAgICB3cml0dGVuX3NpemUgPSAwCi0KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGJ1ZiA9IG9zLnJlYWQoZl9mcm9tLCAxMDI0KjEwMjQpCi0gICAgICAgICAgICBpZiBub3QgYnVmOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBvcy53cml0ZShmX3RvLCBidWYpCi0gICAgICAgICAgICB3cml0dGVuX3NpemUgKz0gMTAyNCoxMDI0Ci0gICAgICAgICAgICBzZWxmLnVwZGF0ZV9wcm9ncmVzc19iYXIoIldyaXRpbmcgdG8gdXNiOiIsIHdyaXR0ZW5fc2l6ZSAqIDEuMC90b3RhbF9zaXplKQotCi0gICAgICAgIHNlbGYudXBkYXRlX3Byb2dyZXNzX2JhcigiV3JpdGluZyBjb21wbGV0ZWQ6IiwgMS4wKQotICAgICAgICBvcy5jbG9zZShmX2Zyb20pCi0gICAgICAgIG9zLmNsb3NlKGZfdG8pCi0gICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLmhpZGUoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvaW1hZ2VzZWxlY3Rpb25kaWFsb2cucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9pbWFnZXNlbGVjdGlvbmRpYWxvZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEyMTZhZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9pbWFnZXNlbGVjdGlvbmRpYWxvZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0jCi0jIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCi0jCi0jIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KLSMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KLSMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0jIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi1pbXBvcnQgZ3RrCi1pbXBvcnQgZ29iamVjdAotaW1wb3J0IG9zCi1mcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYlZpZXdUYWJsZSwgSG9iSW5mb0J1dHRvbiwgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KLWZyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZwotZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZwotCi0iIiIKLVRoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50Ci1CaXRCYWtlIEdVSSdzCi1JbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4Ci0iIiIKLQotY2xhc3MgSW1hZ2VTZWxlY3Rpb25EaWFsb2cgKENydW1ic0RpYWxvZyk6Ci0KLSAgICBfX2NvbHVtbnNfXyA9IFt7Ci0gICAgICAgICAgICAnY29sX25hbWUnIDogJ0ltYWdlIG5hbWUnLAotICAgICAgICAgICAgJ2NvbF9pZCcgICA6IDAsCi0gICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAotICAgICAgICAgICAgJ2NvbF9taW4nICA6IDQwMCwKLSAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAKLSAgICAgICAgfSwgewotICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdTZWxlY3QnLAotICAgICAgICAgICAgJ2NvbF9pZCcgICA6IDEsCi0gICAgICAgICAgICAnY29sX3N0eWxlJzogJ3JhZGlvIHRvZ2dsZScsCi0gICAgICAgICAgICAnY29sX21pbicgIDogMTYwLAotICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDE2MAotICAgIH1dCi0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9mb2xkZXIsIGltYWdlX3R5cGVzLCB0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lLCBpbWFnZV9leHRlbnNpb24gPSB7fSk6Ci0gICAgICAgIHN1cGVyKEltYWdlU2VsZWN0aW9uRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKLSAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCi0KLSAgICAgICAgc2VsZi5pbWFnZV9mb2xkZXIgPSBpbWFnZV9mb2xkZXIKLSAgICAgICAgc2VsZi5pbWFnZV90eXBlcyAgPSBpbWFnZV90eXBlcwotICAgICAgICBzZWxmLmltYWdlX2xpc3QgPSBbXQotICAgICAgICBzZWxmLmltYWdlX25hbWVzID0gW10KLSAgICAgICAgc2VsZi5pbWFnZV9leHRlbnNpb24gPSBpbWFnZV9leHRlbnNpb24KLQotICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZwotICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQotCi0gICAgICAgIHNlbGYuaW1hZ2Vfc3RvcmUgPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9CT09MRUFOKQotICAgICAgICBzZWxmLmZpbGxfaW1hZ2Vfc3RvcmUoKQotCi0gICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6Ci0gICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgNikKLQotICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCi0KLSAgICAgICAgZW50cnkgPSBndGsuRW50cnkoKQotICAgICAgICBlbnRyeS5zZXRfdGV4dChzZWxmLmltYWdlX2ZvbGRlcikKLSAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMSwgMTAsIFRydWUpCi0gICAgICAgIHRhYmxlLnNldF9zaXplX3JlcXVlc3QoNTYwLCAtMSkKLSAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCi0gICAgICAgIHRhYmxlLmF0dGFjaChlbnRyeSwgMCwgOSwgMCwgMSkKLSAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UoKQotICAgICAgICBpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfT1BFTiwgZ3RrLklDT05fU0laRV9CVVRUT04pCi0gICAgICAgIG9wZW5fYnV0dG9uID0gZ3RrLkJ1dHRvbigpCi0gICAgICAgIG9wZW5fYnV0dG9uLnNldF9pbWFnZShpbWFnZSkKLSAgICAgICAgb3Blbl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc2VsZWN0X3BhdGhfY2IsIHNlbGYsIGVudHJ5KQotICAgICAgICB0YWJsZS5hdHRhY2gob3Blbl9idXR0b24sIDksIDEwLCAwLCAxKQotCi0gICAgICAgIHNlbGYuaW1hZ2VfdGFibGUgPSBIb2JWaWV3VGFibGUoc2VsZi5fX2NvbHVtbnNfXywgIkltYWdlcyIpCi0gICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuc2V0X3NpemVfcmVxdWVzdCgtMSwgMzAwKQotICAgICAgICBzZWxmLmltYWdlX3RhYmxlLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRvZ2dsZWRfY2IpCi0gICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuY29ubmVjdF9ncm91cF9zZWxlY3Rpb24oc2VsZi50YWJsZV9zZWxlY3RlZF9jYikKLSAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5yb3dfYWN0aXZlZF9jYikKLSAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5pbWFnZV90YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKLQotICAgICAgICBzZWxmLnNob3dfYWxsKCkKLQotICAgIGRlZiBjaGFuZ2VfaW1hZ2VfY2Ioc2VsZiwgbW9kZWwsIHBhdGgsIGNvbHVtbmlkKToKLSAgICAgICAgaWYgbm90IG1vZGVsOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGl0ZXIgPSBtb2RlbC5nZXRfaXRlcl9maXJzdCgpCi0gICAgICAgIHdoaWxlIGl0ZXI6Ci0gICAgICAgICAgICByb3dwYXRoID0gbW9kZWwuZ2V0X3BhdGgoaXRlcikKLSAgICAgICAgICAgIG1vZGVsW3Jvd3BhdGhdW2NvbHVtbmlkXSA9IEZhbHNlCi0gICAgICAgICAgICBpdGVyID0gbW9kZWwuaXRlcl9uZXh0KGl0ZXIpCi0KLSAgICAgICAgbW9kZWxbcGF0aF1bY29sdW1uaWRdID0gVHJ1ZQotCi0gICAgZGVmIHRvZ2dsZWRfY2Ioc2VsZiwgdGFibGUsIGNlbGwsIHBhdGgsIGNvbHVtbmlkLCB0cmVlKToKLSAgICAgICAgbW9kZWwgPSB0cmVlLmdldF9tb2RlbCgpCi0gICAgICAgIHNlbGYuY2hhbmdlX2ltYWdlX2NiKG1vZGVsLCBwYXRoLCBjb2x1bW5pZCkKLQotICAgIGRlZiB0YWJsZV9zZWxlY3RlZF9jYihzZWxmLCBzZWxlY3Rpb24pOgotICAgICAgICBtb2RlbCwgcGF0aHMgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkX3Jvd3MoKQotICAgICAgICBpZiBwYXRoczoKLSAgICAgICAgICAgIHNlbGYuY2hhbmdlX2ltYWdlX2NiKG1vZGVsLCBwYXRoc1swXSwgMSkKLQotICAgIGRlZiByb3dfYWN0aXZlZF9jYihzZWxmLCB0YWIsIG1vZGVsLCBwYXRoKToKLSAgICAgICAgc2VsZi5jaGFuZ2VfaW1hZ2VfY2IobW9kZWwsIHBhdGgsIDEpCi0gICAgICAgIHNlbGYuZW1pdCgncmVzcG9uc2UnLCBndGsuUkVTUE9OU0VfWUVTKQotCi0gICAgZGVmIHNlbGVjdF9wYXRoX2NiKHNlbGYsIGFjdGlvbiwgcGFyZW50LCBlbnRyeSk6Ci0gICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiIiwgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKLSAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKLSAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcih0ZXh0IGlmIGxlbih0ZXh0KSA+IDAgZWxzZSBvcy5nZXRjd2QoKSkKLSAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKLSAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCi0gICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKLSAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCi0gICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCi0gICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6Ci0gICAgICAgICAgICBwYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCi0gICAgICAgICAgICBlbnRyeS5zZXRfdGV4dChwYXRoKQotICAgICAgICAgICAgc2VsZi5pbWFnZV9mb2xkZXIgPSBwYXRoCi0gICAgICAgICAgICBzZWxmLmZpbGxfaW1hZ2Vfc3RvcmUoKQotCi0gICAgICAgIGRpYWxvZy5kZXN0cm95KCkKLQotICAgIGRlZiBmaWxsX2ltYWdlX3N0b3JlKHNlbGYpOgotICAgICAgICBzZWxmLmltYWdlX2xpc3QgPSBbXQotICAgICAgICBzZWxmLmltYWdlX3N0b3JlLmNsZWFyKCkKLSAgICAgICAgaW1hZ2VzZXQgPSBzZXQoKQotICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLmltYWdlX2ZvbGRlcik6Ci0gICAgICAgICAgICAjIGlnbm9yZSB0aGUgc3ViIGRpcmVjdG9yaWVzCi0gICAgICAgICAgICBkaXJzWzpdID0gW10KLSAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGZvciBpbWFnZV90eXBlIGluIHNlbGYuaW1hZ2VfdHlwZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV9leHRlbnNpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFsX3R5cGVzID0gc2VsZi5pbWFnZV9leHRlbnNpb25baW1hZ2VfdHlwZV0KLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfdHlwZXMgPSBbaW1hZ2VfdHlwZV0KLSAgICAgICAgICAgICAgICAgICAgZm9yIHJlYWxfaW1hZ2VfdHlwZSBpbiByZWFsX3R5cGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgnLicgKyByZWFsX2ltYWdlX3R5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0LmFkZChmLnJzcGxpdCgnLicgKyByZWFsX2ltYWdlX3R5cGUpWzBdLnJzcGxpdCgnLnJvb3RmcycpWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfbGlzdC5hcHBlbmQoZikKLQotICAgICAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzZXQ6Ci0gICAgICAgICAgICBzZWxmLmltYWdlX3N0b3JlLnNldChzZWxmLmltYWdlX3N0b3JlLmFwcGVuZCgpLCAwLCBpbWFnZSwgMSwgRmFsc2UpCi0KLSAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5zZXRfbW9kZWwoc2VsZi5pbWFnZV9zdG9yZSkKLQotICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKLSAgICAgICAgc2VsZi5pbWFnZV9uYW1lcyA9IFtdCi0gICAgICAgIGlmIHJlc3BvbnNlX2lkID09IGd0ay5SRVNQT05TRV9ZRVM6Ci0gICAgICAgICAgICBpdGVyID0gc2VsZi5pbWFnZV9zdG9yZS5nZXRfaXRlcl9maXJzdCgpCi0gICAgICAgICAgICB3aGlsZSBpdGVyOgotICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLmltYWdlX3N0b3JlLmdldF9wYXRoKGl0ZXIpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5pbWFnZV9zdG9yZVtwYXRoXVsxXToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5pbWFnZV9saXN0OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHNlbGYuaW1hZ2Vfc3RvcmVbcGF0aF1bMF0gKyAnLicpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfbmFtZXMuYXBwZW5kKGYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaXRlciA9IHNlbGYuaW1hZ2Vfc3RvcmUuaXRlcl9uZXh0KGl0ZXIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9sYXllcnNlbGVjdGlvbmRpYWxvZy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2xheWVyc2VsZWN0aW9uZGlhbG9nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmQ1N2I2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2xheWVyc2VsZWN0aW9uZGlhbG9nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjk4ICswLDAgQEAKLSMKLSMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KLSMKLSMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgotIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgotIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLWltcG9ydCBndGsKLWltcG9ydCBnb2JqZWN0Ci1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQotZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYkJ1dHRvbiwgSG9iQWx0QnV0dG9uCi1mcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKLWZyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCi0KLSIiIgotVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKLUJpdEJha2UgR1VJJ3MKLUluIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKLSIiIgotCi1jbGFzcyBDZWxsUmVuZGVyZXJQaXhidWZBY3RpdmF0YWJsZShndGsuQ2VsbFJlbmRlcmVyUGl4YnVmKToKLSAgICAiIiIKLSAgICBBIGN1c3RvbSBDZWxsUmVuZGVyZXIgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgYWN0aXZhdGFibGUKLSAgICBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgdXNlciBjbGlja3MKLSAgICAiIiIKLSAgICBfX2dzaWduYWxzX18gICAgPSB7ICdjbGlja2VkJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywpKSwgfQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBndGsuQ2VsbFJlbmRlcmVyUGl4YnVmLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCdtb2RlJywgZ3RrLkNFTExfUkVOREVSRVJfTU9ERV9BQ1RJVkFUQUJMRSkKLSAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoJ2ZvbGxvdy1zdGF0ZScsIFRydWUpCi0KLSAgICAiIiIKLSAgICBSZXNwb25kIHRvIGEgdXNlciBjbGljayBvbiBhIGNlbGwKLSAgICAiIiIKLSAgICBkZWYgZG9fYWN0aXZhdGUoc2VsZiwgZXZlbiwgd2lkZ2V0LCBwYXRoLCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZmxhZ3MpOgotICAgICAgICBzZWxmLmVtaXQoJ2NsaWNrZWQnLCBwYXRoKQotCi0jCi0jIExheWVyU2VsZWN0aW9uRGlhbG9nCi0jCi1jbGFzcyBMYXllclNlbGVjdGlvbkRpYWxvZyAoQ3J1bWJzRGlhbG9nKToKLQotICAgIFRBUkdFVFMgPSBbCi0gICAgICAgICgiTVlfVFJFRV9NT0RFTF9ST1ciLCBndGsuVEFSR0VUX1NBTUVfV0lER0VULCAwKSwKLSAgICAgICAgKCJ0ZXh0L3BsYWluIiwgMCwgMSksCi0gICAgICAgICgiVEVYVCIsIDAsIDIpLAotICAgICAgICAoIlNUUklORyIsIDAsIDMpLAotICAgICAgICBdCi0KLSAgICBkZWYgZ2VuX2xhYmVsX3dpZGdldChzZWxmLCBjb250ZW50KToKLSAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQotICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCi0gICAgICAgIGxhYmVsLnNldF9tYXJrdXAoY29udGVudCkKLSAgICAgICAgbGFiZWwuc2hvdygpCi0gICAgICAgIHJldHVybiBsYWJlbAotCi0gICAgZGVmIGxheWVyX3dpZGdldF90b2dnbGVkX2NiKHNlbGYsIGNlbGwsIHBhdGgsIGxheWVyX3N0b3JlKToKLSAgICAgICAgbmFtZSA9IGxheWVyX3N0b3JlW3BhdGhdWzBdCi0gICAgICAgIHRvZ2dsZSA9IG5vdCBsYXllcl9zdG9yZVtwYXRoXVsxXQotICAgICAgICBsYXllcl9zdG9yZVtwYXRoXVsxXSA9IHRvZ2dsZQotCi0gICAgZGVmIGxheWVyX3dpZGdldF9hZGRfY2xpY2tlZF9jYihzZWxmLCBhY3Rpb24sIGxheWVyX3N0b3JlLCBwYXJlbnQpOgotICAgICAgICBkaWFsb2cgPSBndGsuRmlsZUNob29zZXJEaWFsb2coIkFkZCBuZXcgbGF5ZXIiLCBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TRUxFQ1RfRk9MREVSKQotICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQotICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKLSAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQotICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKLSAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoIlNlbGVjdCB0aGUgbGF5ZXIgeW91IHdpc2ggdG8gYWRkIikKLSAgICAgICAgbGFiZWwuc2hvdygpCi0gICAgICAgIGRpYWxvZy5zZXRfZXh0cmFfd2lkZ2V0KGxhYmVsKQotICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQotICAgICAgICBwYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCi0gICAgICAgIGRpYWxvZy5kZXN0cm95KCkKLQotICAgICAgICBsYmwgPSAiPGI+RXJyb3I8L2I+IgotICAgICAgICBtc2cgPSAiVW5hYmxlIHRvIGxvYWQgbGF5ZXIgPGk+JXM8L2k+IGJlY2F1c2UgIiAlIHBhdGgKLSAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKLSAgICAgICAgICAgIGltcG9ydCBvcwotICAgICAgICAgICAgaW1wb3J0IG9zLnBhdGgKLSAgICAgICAgICAgIGxheWVycyA9IFtdCi0gICAgICAgICAgICBpdCA9IGxheWVyX3N0b3JlLmdldF9pdGVyX2ZpcnN0KCkKLSAgICAgICAgICAgIHdoaWxlIGl0OgotICAgICAgICAgICAgICAgIGxheWVycy5hcHBlbmQobGF5ZXJfc3RvcmUuZ2V0X3ZhbHVlKGl0LCAwKSkKLSAgICAgICAgICAgICAgICBpdCA9IGxheWVyX3N0b3JlLml0ZXJfbmV4dChpdCkKLQotICAgICAgICAgICAgaWYgbm90IHBhdGg6Ci0gICAgICAgICAgICAgICAgbXNnICs9ICJpdCBpcyBhbiBpbnZhbGlkIHBhdGguIgotICAgICAgICAgICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCsiL2NvbmYvbGF5ZXIuY29uZiIpOgotICAgICAgICAgICAgICAgIG1zZyArPSAidGhlcmUgaXMgbm8gbGF5ZXIuY29uZiBpbnNpZGUgdGhlIGRpcmVjdG9yeS4iCi0gICAgICAgICAgICBlbGlmIHBhdGggaW4gbGF5ZXJzOgotICAgICAgICAgICAgICAgIG1zZyArPSAiaXQgaXMgYWxyZWFkeSBpbiBsb2FkZWQgbGF5ZXJzLiIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGF5ZXJfc3RvcmUuYXBwZW5kKFtwYXRoXSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2cocGFyZW50LCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCi0gICAgICAgICAgICBkaWFsb2cuYWRkX2J1dHRvbihndGsuU1RPQ0tfQ0xPU0UsIGd0ay5SRVNQT05TRV9PSykKLSAgICAgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCi0gICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCi0KLSAgICBkZWYgbGF5ZXJfd2lkZ2V0X2RlbF9jbGlja2VkX2NiKHNlbGYsIGFjdGlvbiwgdHJlZV9zZWxlY3Rpb24sIGxheWVyX3N0b3JlKToKLSAgICAgICAgbW9kZWwsIGl0ZXIgPSB0cmVlX3NlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQotICAgICAgICBpZiBpdGVyOgotICAgICAgICAgICAgbGF5ZXJfc3RvcmUucmVtb3ZlKGl0ZXIpCi0KLQotICAgIGRlZiBnZW5fbGF5ZXJfd2lkZ2V0KHNlbGYsIGxheWVycywgbGF5ZXJzX2F2YWlsLCB3aW5kb3csIHRvb2x0aXA9IiIpOgotICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCi0KLSAgICAgICAgbGF5ZXJfdHYgPSBndGsuVHJlZVZpZXcoKQotICAgICAgICBsYXllcl90di5zZXRfcnVsZXNfaGludChUcnVlKQotICAgICAgICBsYXllcl90di5zZXRfaGVhZGVyc192aXNpYmxlKEZhbHNlKQotICAgICAgICB0cmVlX3NlbGVjdGlvbiA9IGxheWVyX3R2LmdldF9zZWxlY3Rpb24oKQotICAgICAgICB0cmVlX3NlbGVjdGlvbi5zZXRfbW9kZShndGsuU0VMRUNUSU9OX1NJTkdMRSkKLQotICAgICAgICAjIEFsbG93IGVuYWJsZSBkcmFnIGFuZCBkcm9wIG9mIHJvd3MgaW5jbHVkaW5nIHJvdyBtb3ZlCi0gICAgICAgIGRuZF9pbnRlcm5hbF90YXJnZXQgPSAnJwotICAgICAgICBkbmRfdGFyZ2V0cyA9IFsoZG5kX2ludGVybmFsX3RhcmdldCwgZ3RrLlRBUkdFVF9TQU1FX1dJREdFVCwgMCldCi0gICAgICAgIGxheWVyX3R2LmVuYWJsZV9tb2RlbF9kcmFnX3NvdXJjZSggZ3RrLmdkay5CVVRUT04xX01BU0ssCi0gICAgICAgICAgICBkbmRfdGFyZ2V0cywKLSAgICAgICAgICAgIGd0ay5nZGsuQUNUSU9OX01PVkUpCi0gICAgICAgIGxheWVyX3R2LmVuYWJsZV9tb2RlbF9kcmFnX2Rlc3QoZG5kX3RhcmdldHMsCi0gICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9NT1ZFKQotICAgICAgICBsYXllcl90di5jb25uZWN0KCJkcmFnX2RhdGFfZ2V0Iiwgc2VsZi5kcmFnX2RhdGFfZ2V0X2NiKQotICAgICAgICBsYXllcl90di5jb25uZWN0KCJkcmFnX2RhdGFfcmVjZWl2ZWQiLCBzZWxmLmRyYWdfZGF0YV9yZWNlaXZlZF9jYikKLQotICAgICAgICBjb2wwPSBndGsuVHJlZVZpZXdDb2x1bW4oJ1BhdGgnKQotICAgICAgICBjZWxsMCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKLSAgICAgICAgY2VsbDAuc2V0X3BhZGRpbmcoNSwyKQotICAgICAgICBjb2wwLnBhY2tfc3RhcnQoY2VsbDAsIFRydWUpCi0gICAgICAgIGNvbDAuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwwLCBzZWxmLmRyYXdfbGF5ZXJfcGF0aF9jYikKLSAgICAgICAgbGF5ZXJfdHYuYXBwZW5kX2NvbHVtbihjb2wwKQotCi0gICAgICAgIHNjcm9sbCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCi0gICAgICAgIHNjcm9sbC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQotICAgICAgICBzY3JvbGwuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCi0gICAgICAgIHNjcm9sbC5hZGQobGF5ZXJfdHYpCi0KLSAgICAgICAgdGFibGVfbGF5ZXIgPSBndGsuVGFibGUoMiwgMTAsIEZhbHNlKQotICAgICAgICBoYm94LnBhY2tfc3RhcnQodGFibGVfbGF5ZXIsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCi0KLSAgICAgICAgdGFibGVfbGF5ZXIuYXR0YWNoKHNjcm9sbCwgMCwgMTAsIDAsIDEpCi0KLSAgICAgICAgbGF5ZXJfc3RvcmUgPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcpCi0gICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6Ci0gICAgICAgICAgICBsYXllcl9zdG9yZS5hcHBlbmQoW2xheWVyXSkKLQotICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdFbmFibGVkJykKLSAgICAgICAgbGF5ZXJfdHYuYXBwZW5kX2NvbHVtbihjb2wxKQotCi0gICAgICAgIGNlbGwxID0gQ2VsbFJlbmRlcmVyUGl4YnVmQWN0aXZhdGFibGUoKQotICAgICAgICBjZWxsMS5zZXRfZml4ZWRfc2l6ZSgtMSwzNSkKLSAgICAgICAgY2VsbDEuY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZGVsX2NlbGxfY2xpY2tlZF9jYiwgbGF5ZXJfc3RvcmUpCi0gICAgICAgIGNvbDEucGFja19zdGFydChjZWxsMSwgVHJ1ZSkKLSAgICAgICAgY29sMS5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbDEsIHNlbGYuZHJhd19kZWxldGVfYnV0dG9uX2NiLCBsYXllcl90dikKLQotICAgICAgICBhZGRfYnV0dG9uID0gZ3RrLkJ1dHRvbigpCi0gICAgICAgIGFkZF9idXR0b24uc2V0X3JlbGllZihndGsuUkVMSUVGX05PTkUpCi0gICAgICAgIGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQotICAgICAgICBib3guc2hvdygpCi0gICAgICAgIGFkZF9idXR0b24uYWRkKGJveCkKLSAgICAgICAgYWRkX2J1dHRvbi5jb25uZWN0KCJlbnRlci1ub3RpZnktZXZlbnQiLCBzZWxmLmFkZF9ob3Zlcl9jYikKLSAgICAgICAgYWRkX2J1dHRvbi5jb25uZWN0KCJsZWF2ZS1ub3RpZnktZXZlbnQiLCBzZWxmLmFkZF9sZWF2ZV9jYikKLSAgICAgICAgc2VsZi5pbSA9IGd0ay5JbWFnZSgpCi0gICAgICAgIHNlbGYuaW0uc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX0FERF9GSUxFKQotICAgICAgICBzZWxmLmltLnNob3coKQotICAgICAgICBib3gucGFja19zdGFydChzZWxmLmltLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9NikKLSAgICAgICAgbGJsID0gZ3RrLkxhYmVsKCJBZGQgbGF5ZXIiKQotICAgICAgICBsYmwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKLSAgICAgICAgbGJsLnNob3coKQotICAgICAgICBib3gucGFja19zdGFydChsYmwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUsIHBhZGRpbmc9NikKLSAgICAgICAgYWRkX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5sYXllcl93aWRnZXRfYWRkX2NsaWNrZWRfY2IsIGxheWVyX3N0b3JlLCB3aW5kb3cpCi0gICAgICAgIHRhYmxlX2xheWVyLmF0dGFjaChhZGRfYnV0dG9uLCAwLCAxMCwgMSwgMiwgZ3RrLkVYUEFORCB8IGd0ay5GSUxMLCAwLCAwLCA2KQotICAgICAgICBsYXllcl90di5zZXRfbW9kZWwobGF5ZXJfc3RvcmUpCi0KLSAgICAgICAgaGJveC5zaG93X2FsbCgpCi0KLSAgICAgICAgcmV0dXJuIGhib3gsIGxheWVyX3N0b3JlCi0KLSAgICBkZWYgZHJhZ19kYXRhX2dldF9jYihzZWxmLCB0cmVldmlldywgY29udGV4dCwgc2VsZWN0aW9uLCB0YXJnZXRfaWQsIGV0aW1lKToKLSAgICAgICAgdHJlZXNlbGVjdGlvbiA9IHRyZWV2aWV3LmdldF9zZWxlY3Rpb24oKQotICAgICAgICBtb2RlbCwgaXRlciA9IHRyZWVzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKLSAgICAgICAgZGF0YSA9IG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKQotICAgICAgICBzZWxlY3Rpb24uc2V0KHNlbGVjdGlvbi50YXJnZXQsIDgsIGRhdGEpCi0KLSAgICBkZWYgZHJhZ19kYXRhX3JlY2VpdmVkX2NiKHNlbGYsIHRyZWV2aWV3LCBjb250ZXh0LCB4LCB5LCBzZWxlY3Rpb24sIGluZm8sIGV0aW1lKToKLSAgICAgICAgbW9kZWwgPSB0cmVldmlldy5nZXRfbW9kZWwoKQotICAgICAgICBkYXRhID0gc2VsZWN0aW9uLmRhdGEKLSAgICAgICAgZHJvcF9pbmZvID0gdHJlZXZpZXcuZ2V0X2Rlc3Rfcm93X2F0X3Bvcyh4LCB5KQotICAgICAgICBpZiBkcm9wX2luZm86Ci0gICAgICAgICAgICBwYXRoLCBwb3NpdGlvbiA9IGRyb3BfaW5mbwotICAgICAgICAgICAgaXRlciA9IG1vZGVsLmdldF9pdGVyKHBhdGgpCi0gICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZ3RrLlRSRUVfVklFV19EUk9QX0JFRk9SRSBvciBwb3NpdGlvbiA9PSBndGsuVFJFRV9WSUVXX0RST1BfSU5UT19PUl9CRUZPUkUpOgotICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydF9iZWZvcmUoaXRlciwgW2RhdGFdKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtb2RlbC5pbnNlcnRfYWZ0ZXIoaXRlciwgW2RhdGFdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kZWwuYXBwZW5kKFtkYXRhXSkKLSAgICAgICAgaWYgY29udGV4dC5hY3Rpb24gPT0gZ3RrLmdkay5BQ1RJT05fTU9WRToKLSAgICAgICAgICAgIGNvbnRleHQuZmluaXNoKFRydWUsIFRydWUsIGV0aW1lKQotICAgICAgICByZXR1cm4KLQotICAgIGRlZiBhZGRfaG92ZXJfY2Ioc2VsZiwgYnV0dG9uLCBldmVudCk6Ci0gICAgICAgIHNlbGYuaW0uc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX0FERF9IT1ZFUl9GSUxFKQotCi0gICAgZGVmIGFkZF9sZWF2ZV9jYihzZWxmLCBidXR0b24sIGV2ZW50KToKLSAgICAgICAgc2VsZi5pbS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfQUREX0ZJTEUpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGxheWVycywgbGF5ZXJzX25vbl9yZW1vdmFibGUsIGFsbF9sYXllcnMsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6Ci0gICAgICAgIHN1cGVyKExheWVyU2VsZWN0aW9uRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKLQotICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZnJvbSBvdGhlciBvYmplY3RzCi0gICAgICAgIHNlbGYubGF5ZXJzID0gbGF5ZXJzCi0gICAgICAgIHNlbGYubGF5ZXJzX25vbl9yZW1vdmFibGUgPSBsYXllcnNfbm9uX3JlbW92YWJsZQotICAgICAgICBzZWxmLmFsbF9sYXllcnMgPSBhbGxfbGF5ZXJzCi0gICAgICAgIHNlbGYubGF5ZXJzX2NoYW5nZWQgPSBGYWxzZQotCi0gICAgICAgICMgaWNvbiBmb3IgcmVtb3ZlIGJ1dHRvbiBpbiBUcmVlVmlldwotICAgICAgICBpbSA9IGd0ay5JbWFnZSgpCi0gICAgICAgIGltLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9SRU1PVkVfRklMRSkKLSAgICAgICAgc2VsZi5yZW1faWNvbiA9IGltLmdldF9waXhidWYoKQotCi0gICAgICAgICMgY2xhc3MgbWVtYmVycyBmb3IgaW50ZXJuYWwgdXNlCi0gICAgICAgIHNlbGYubGF5ZXJfc3RvcmUgPSBOb25lCi0KLSAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzIG9uIHRoZSBkaWFsb2cKLSAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKLSAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCi0KLSAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKLSAgICAgICAgbGF5ZXJfd2lkZ2V0LCBzZWxmLmxheWVyX3N0b3JlID0gc2VsZi5nZW5fbGF5ZXJfd2lkZ2V0KHNlbGYubGF5ZXJzLCBzZWxmLmFsbF9sYXllcnMsIHNlbGYsIE5vbmUpCi0gICAgICAgIGxheWVyX3dpZGdldC5zZXRfc2l6ZV9yZXF1ZXN0KDQ1MCwgMjUwKQotICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChsYXllcl93aWRnZXQsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCi0gICAgICAgIHNlbGYuc2hvd19hbGwoKQotCi0gICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgotICAgICAgICBtb2RlbCA9IHNlbGYubGF5ZXJfc3RvcmUKLSAgICAgICAgaXQgPSBtb2RlbC5nZXRfaXRlcl9maXJzdCgpCi0gICAgICAgIGxheWVycyA9IFtdCi0gICAgICAgIHdoaWxlIGl0OgotICAgICAgICAgICAgbGF5ZXJzLmFwcGVuZChtb2RlbC5nZXRfdmFsdWUoaXQsIDApKQotICAgICAgICAgICAgaXQgPSBtb2RlbC5pdGVyX25leHQoaXQpCi0KLSAgICAgICAgc2VsZi5sYXllcnNfY2hhbmdlZCA9IChzZWxmLmxheWVycyAhPSBsYXllcnMpCi0gICAgICAgIHNlbGYubGF5ZXJzID0gbGF5ZXJzCi0KLSAgICAiIiIKLSAgICBBIGN1c3RvbSBjZWxsX2RhdGFfZnVuYyB0byBkcmF3IGEgZGVsZXRlICdidXR0b24nIGluIHRoZSBUcmVlVmlldyBmb3IgbGF5ZXJzCi0gICAgb3RoZXIgdGhhbiB0aGUgbWV0YSBsYXllci4gVGhlIGRlbGV0aW9uIG9mIHdoaWNoIGlzIHByZXZlbnRlZCBzbyB0aGF0IHRoZQotICAgIHVzZXIgY2FuJ3Qgc2hvb3QgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdCB0b28gYmFkbHkuCi0gICAgIiIiCi0gICAgZGVmIGRyYXdfZGVsZXRlX2J1dHRvbl9jYihzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdCwgdHYpOgotICAgICAgICBwYXRoID0gIG1vZGVsLmdldF92YWx1ZShpdCwgMCkKLSAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmxheWVyc19ub25fcmVtb3ZhYmxlOgotICAgICAgICAgICAgY2VsbC5zZXRfc2Vuc2l0aXZlKEZhbHNlKQotICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3BpeGJ1ZicsIE5vbmUpCi0gICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnbW9kZScsIGd0ay5DRUxMX1JFTkRFUkVSX01PREVfSU5FUlQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgncGl4YnVmJywgc2VsZi5yZW1faWNvbikKLSAgICAgICAgICAgIGNlbGwuc2V0X3NlbnNpdGl2ZShUcnVlKQotICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ21vZGUnLCBndGsuQ0VMTF9SRU5ERVJFUl9NT0RFX0FDVElWQVRBQkxFKQotCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAiIiIKLSAgICBBIGN1c3RvbSBjZWxsX2RhdGFfZnVuYyB0byB3cml0ZSBhbiBleHRyYSBtZXNzYWdlIGludG8gdGhlIGxheWVyIHBhdGggY2VsbAotICAgIGZvciB0aGUgbWV0YSBsYXllci4gV2Ugc2hvdWxkIGluZm9ybSB0aGUgdXNlciB0aGF0IHRoZXkgY2FuJ3QgcmVtb3ZlIGl0IGZvcgotICAgIHRoZWlyIG93biBzYWZldHkuCi0gICAgIiIiCi0gICAgZGVmIGRyYXdfbGF5ZXJfcGF0aF9jYihzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdCk6Ci0gICAgICAgIHBhdGggPSBtb2RlbC5nZXRfdmFsdWUoaXQsIDApCi0gICAgICAgIGlmIHBhdGggaW4gc2VsZi5sYXllcnNfbm9uX3JlbW92YWJsZToKLSAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdtYXJrdXAnLCAiPGI+SXQgY2Fubm90IGJlIHJlbW92ZWQ8L2I+XG4lcyIgJSBwYXRoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3RleHQnLCBwYXRoKQotCi0gICAgZGVmIGRlbF9jZWxsX2NsaWNrZWRfY2Ioc2VsZiwgY2VsbCwgcGF0aCwgbW9kZWwpOgotICAgICAgICBpdCA9IG1vZGVsLmdldF9pdGVyX2Zyb21fc3RyaW5nKHBhdGgpCi0gICAgICAgIG1vZGVsLnJlbW92ZShpdCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3BlcnR5ZGlhbG9nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJvcGVydHlkaWFsb2cucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YjljZTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJvcGVydHlkaWFsb2cucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotIwotIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgICBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBBdXRob3JlZCBieSBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0jIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi1pbXBvcnQgc3RyaW5nCi1pbXBvcnQgZ3RrCi1pbXBvcnQgZ29iamVjdAotaW1wb3J0IG9zCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCBnbGliCi1mcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKLWZyb20gYmIudWkuY3J1bWJzLmhpZy5zZXR0aW5nc3VpaGVscGVyIGltcG9ydCBTZXR0aW5nc1VJSGVscGVyCi1mcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZwotZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZwotCi0iIiIKLVRoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50Ci1CaXRCYWtlIEdVSSdzCi1JbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4Ci0iIiIKLQotY2xhc3MgUHJvcGVydHlEaWFsb2coQ3J1bWJzRGlhbG9nKToKLQkKLQlkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIHBhcmVudCwgaW5mb3JtYXRpb24sIGZsYWdzLCBidXR0b25zPU5vbmUpOgotCQkKLQkJc3VwZXIoUHJvcGVydHlEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYucHJvcGVydGllcyA9IGluZm9ybWF0aW9uCi0KLSAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5wcm9wZXJ0aWVzKSA9PSAxMDoKLQkJICAgICAgICBzZWxmLmNyZWF0ZV9yZWNpcGVfdmlzdWFsX2VsZW1lbnRzKCkKLSAgICAgICAgICAgICAgICBlbGlmIGxlbihzZWxmLnByb3BlcnRpZXMpID09IDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9wYWNrYWdlX3Zpc3VhbF9lbGVtZW50cygpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX2luZm9ybWF0aW9uX3Zpc3VhbF9lbGVtZW50cygpCi0KLQotICAgICAgICBkZWYgY3JlYXRlX2luZm9ybWF0aW9uX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKLQotICAgICAgICAgICAgICAgIEhPQl9JQ09OX0JBU0VfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAoImljb25zLyIpKQotICAgICAgICAgICAgICAgIElDT05fUEFDS0FHRVNfRElTUExBWV9GSUxFICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19kaXNwbGF5LnBuZycpKQotCi0gICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQotCi0gICAgICAgICAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZSgxLDEsRmFsc2UpCi0gICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfcm93X3NwYWNpbmdzKDApCi0gICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfY29sX3NwYWNpbmdzKDApCi0KLSAgICAgICAgICAgICAgICBzZWxmLmltYWdlID0gZ3RrLkltYWdlKCkKLSAgICAgICAgICAgICAgICBzZWxmLmltYWdlLnNldF9mcm9tX2ZpbGUoSUNPTl9QQUNLQUdFU19ESVNQTEFZX0ZJTEUpCi0gICAgICAgICAgICAgICAgc2VsZi5pbWFnZS5zZXRfcHJvcGVydHkoInhhbGlnbiIsMCkKLSAgICAgICAgICAgICAgICAjc2VsZi52Ym94LmFkZChzZWxmLmltYWdlKQotCi0gICAgICAgICAgICAgICAgaW1hZ2VfaW5mbyA9IHNlbGYucHJvcGVydGllcy5zcGxpdCgiKiIpWzBdCi0gICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYucHJvcGVydGllcy5zcGxpdCgiKiIpWzFdCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdmJveCA9IGd0ay5WQm94KFRydWUsIHNwYWNpbmc9MzApICAgICAgICAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoRmFsc2UpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGltYWdlX2luZm8pCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0KLSAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwgPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgIHNlbGYuaW5mb19sYWJlbC5zZXRfbGluZV93cmFwKFRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsLnNldF9tYXJrdXAoaW5mbykKLSAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwuc2V0X3Byb3BlcnR5KCJ5YWxpZ24iLCAwLjUpCi0KLSAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmltYWdlLCAwLDEsMCwxLCB4b3B0aW9ucz1ndGsuRklMTHxndGsuRVhQQU5ELCB5b3B0aW9ucz1ndGsuRklMTCx4cGFkZGluZz01LHlwYWRkaW5nPTUpCi0gICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5sYWJlbF9zaG9ydCwgMCwxLDAsMSwgeG9wdGlvbnM9Z3RrLkZJTEx8Z3RrLkVYUEFORCwgeW9wdGlvbnM9Z3RrLkZJTEwseHBhZGRpbmc9NDAseXBhZGRpbmc9NSkKLSAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmluZm9fbGFiZWwsIDAsMSwxLDIsIHhvcHRpb25zPWd0ay5GSUxMfGd0ay5FWFBBTkQsIHlvcHRpb25zPWd0ay5GSUxMLHhwYWRkaW5nPTQwLHlwYWRkaW5nPTEwKQotICAgICAgICAKLSAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYudGFibGUpCi0gICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0KCdkZWxldGUtZXZlbnQnLCBsYW1iZGEgdywgZTogc2VsZi5kZXN0cm95KCkgb3IgVHJ1ZSkgCi0KLSAgICAgICAgZGVmIHRyZWVWaWV3VG9vbHRpcCggc2VsZiwgd2lkZ2V0LCBlLCB0b29sdGlwcywgY2VsbCwgZW1wdHlUZXh0PSIiICk6Ci0gICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLGNvbCx4LHkpID0gd2lkZ2V0LmdldF9wYXRoX2F0X3BvcyggaW50KGUueCksIGludChlLnkpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ID0gd2lkZ2V0LmdldF9tb2RlbCgpLmdldF9pdGVyKHBhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHdpZGdldC5nZXRfbW9kZWwoKS5nZXRfdmFsdWUoaXQsY2VsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGYudG9vbHRpcF9pdGVtczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHMuc2V0X3RpcCh3aWRnZXQsIHNlbGYudG9vbHRpcF9pdGVtc1t2YWx1ZV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBzLmVuYWJsZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5zZXRfdGlwKHdpZGdldCwgZW1wdHlUZXh0KQotICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5zZXRfdGlwKHdpZGdldCwgZW1wdHlUZXh0KQotCi0gICAgICAgICAgICAgICAgCi0gICAgICAgIGRlZiBjcmVhdGVfcGFja2FnZV92aXN1YWxfZWxlbWVudHMoc2VsZik6Ci0KLSAgICAgICAgICAgICAgICBpbXBvcnQganNvbgotCi0gICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYucHJvcGVydGllc1snbmFtZSddCi0gICAgICAgICAgICAgICAgYmluYiA9IHNlbGYucHJvcGVydGllc1snYmluYiddCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYucHJvcGVydGllc1snc2l6ZSddCi0gICAgICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5wcm9wZXJ0aWVzWydyZWNpcGUnXQotICAgICAgICAgICAgICAgIGZpbGVfbGlzdCA9IGpzb24ubG9hZHMoc2VsZi5wcm9wZXJ0aWVzWydmaWxlc19saXN0J10pCi0KLSAgICAgICAgICAgICAgICBmaWxlc190ZW1wID0gJycKLSAgICAgICAgICAgICAgICBwYXRoc190ZW1wID0gJycKLSAgICAgICAgICAgICAgICBmaWxlc19iaW5iID0gW10KLSAgICAgICAgICAgICAgICBwYXRoc19iaW5iID0gW10KLQotICAgICAgICAgICAgICAgIHNlbGYudG9vbHRpcF9pdGVtcyA9IHt9Ci0KLSAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXNpemFibGUoRmFsc2UpCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgI2NsZWFuaW5nIG91dCB0aGUgcmVjaXBlIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgcmVjaXBlID0gcmVjaXBlLnNwbGl0KCIrIilbMF0KLQotICAgICAgICAgICAgICAgIHZib3ggPSBndGsuVkJveChUcnVlLHNwYWNpbmcgPSAwKQotCi0gICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkFNRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5OYW1lOiA8L3NwYW4+IiArIG5hbWUpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLQotICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNJWkUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5TaXplOiA8L3NwYW4+IiArIHNpemUpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQotCi0gICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRUNJUEUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5SZWNpcGU6IDwvc3Bhbj4iICsgcmVjaXBlKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQotCi0gICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQotCi0gICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCSU5CIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiBiaW5iICE9ICcnOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkJyb3VnaHQgaW4gYnk6IDwvc3Bhbj4iKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgIAotCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoYmluYikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCi0KLSAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRklMRVMgQlJPVUdIVCBCWSBQQUNLQUdFUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgICAgICAgICAgICAgaWYgZmlsZV9saXN0OgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwgMTcwKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZmlsZXNfc3RvcmUgPSBndGsuTGlzdFN0b3JlKHN0cikKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYgPSBndGsuVHJlZVZpZXcoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X3J1bGVzX2hpbnQoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9oZWFkZXJzX3Zpc2libGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5hZGQoc2VsZi5wYWNrYWdlZmlsZXNfdHYpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2VsbDEgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdQYWNrYWdlIGZpbGVzJywgc2VsZi5jZWxsMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbDEuc2V0X2NlbGxfZGF0YV9mdW5jKHNlbGYuY2VsbDEsIHNlbGYucmVnZXhfZmllbGQpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VmaWxlc190di5hcHBlbmRfY29sdW1uKGNvbDEpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gZmlsZV9saXN0LmtleXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc29ydCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBpdGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxlbihpdGVtKSA+IDM1OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtWzpsZW4oaXRlbSkvMl0gKyAiIiArIGl0ZW1bbGVuKGl0ZW0pLzIrMTpdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihpdGVtKSA9PSAzNToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbVs6bGVuKGl0ZW0pLzJdICsgIi4uLiIgKyBpdGVtW2xlbihpdGVtKS8yKzM6XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9vbHRpcF9pdGVtc1tpdGVtXSA9IGZ1bGxwYXRoCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVzX3N0b3JlLmFwcGVuZChbc3RyKGl0ZW0pXSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X21vZGVsKHBhY2thZ2VmaWxlc19zdG9yZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgdGlwcyA9IGd0ay5Ub29sdGlwcygpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aXBzLnNldF90aXAoc2VsZi5wYWNrYWdlZmlsZXNfdHYsICIiKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuY29ubmVjdCgibW90aW9uLW5vdGlmeS1ldmVudCIsIHNlbGYudHJlZVZpZXdUb29sdGlwLCB0aXBzLCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X2V2ZW50cyhndGsuZ2RrLlBPSU5URVJfTU9USU9OX01BU0spCi0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi50ZXh0V2luZG93KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgICAgICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQotCi0KLSAgICAgICAgZGVmIHJlZ2V4X2ZpZWxkKHNlbGYsIGNvbHVtbiwgY2VsbCwgbW9kZWwsIGl0ZXIpOgotICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApKQotICAgICAgICAgICAgICAgIHJldHVybgotCi0KLQlkZWYgY3JlYXRlX3JlY2lwZV92aXN1YWxfZWxlbWVudHMoc2VsZik6Ci0KLSAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gc2VsZi5wcm9wZXJ0aWVzWydzdW1tYXJ5J10KLQkJbmFtZSA9IHNlbGYucHJvcGVydGllc1snbmFtZSddCi0JCXZlcnNpb24gPSBzZWxmLnByb3BlcnRpZXNbJ3ZlcnNpb24nXQotCQlyZXZpc2lvbiA9IHNlbGYucHJvcGVydGllc1sncmV2aXNpb24nXQotCQliaW5iID0gc2VsZi5wcm9wZXJ0aWVzWydiaW5iJ10KLQkJZ3JvdXAgPSBzZWxmLnByb3BlcnRpZXNbJ2dyb3VwJ10KLQkJbGljZW5zZSA9IHNlbGYucHJvcGVydGllc1snbGljZW5zZSddCi0JCWhvbWVwYWdlID0gc2VsZi5wcm9wZXJ0aWVzWydob21lcGFnZSddCi0JCWJ1Z3RyYWNrZXIgPSBzZWxmLnByb3BlcnRpZXNbJ2J1Z3RyYWNrZXInXQotCQlkZXNjcmlwdGlvbiA9IHNlbGYucHJvcGVydGllc1snZGVzY3JpcHRpb24nXQotCi0gICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQotCQkKLSAgICAgICAgICAgICAgICAjY2xlYW5pbmcgb3V0IHRoZSB2ZXJzaW9uIHZhcmlhYmxlIGFuZCBhbHNvIHRoZSBzdW1tYXJ5Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIjoiKVsxXQotICAgICAgICAgICAgICAgIGlmIGxlbih2ZXJzaW9uKSA+IDMwOgotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIisiKVswXQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi5zcGxpdCgiLSIpWzBdCi0gICAgICAgICAgICAgICAgbGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgiJiIgLCAiYW5kIikKLSAgICAgICAgICAgICAgICBpZiAoaG9tZXBhZ2UgPT0gJycpOgotICAgICAgICAgICAgICAgICAgICAgICAgaG9tZXBhZ2UgPSAndW5rbm93bicKLSAgICAgICAgICAgICAgICBpZiAoYnVndHJhY2tlciA9PSAnJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWd0cmFja2VyID0gJ3Vua25vd24nCi0gICAgICAgICAgICAgICAgc3VtbWFyeSA9IHN1bW1hcnkuc3BsaXQoIisiKVswXQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICNjYWxjdWxhdGluZyB0aGUgcm93cyBuZWVkZWQgZm9yIHRoZSB0YWJsZQotICAgICAgICAgICAgICAgIGJpbmJfaXRlbXNfY291bnQgPSBsZW4oYmluYi5zcGxpdCgnLCcpKQotICAgICAgICAgICAgICAgIGJpbmJfaXRlbXMgPSBiaW5iLnNwbGl0KCcsJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQotCQl2Ym94ID0gZ3RrLlZCb3goRmFsc2Usc3BhY2luZyA9IDApCi0KLSAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNVTU1BUlkgTEFCRUwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiBzdW1tYXJ5ICE9ICcnOiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfd2lkdGhfY2hhcnMoMzcpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxiPiIgKyBzdW1tYXJ5ICsgIjwvYj4iKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkFNRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5OYW1lOiA8L3NwYW4+IiArIG5hbWUpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLQotICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBWRVJTSU9OIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+VmVyc2lvbjogPC9zcGFuPiIgKyB2ZXJzaW9uKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLQotICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVWSVNJT04gUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5SZXZpc2lvbjogPC9zcGFuPiIgKyByZXZpc2lvbikKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQotCi0gICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHUk9VUCBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+R3JvdXA6IDwvc3Bhbj4iICsgZ3JvdXApCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLQotICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBIT01FUEFHRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiBob21lcGFnZSAhPSAndW5rbm93bic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGhvbWVwYWdlKSA+IDM1OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X21hcmt1cCgiPGEgaHJlZj1cIiIgKyBob21lcGFnZSArICJcIj4iICsgaG9tZXBhZ2VbMDozNV0gKyAiLi4uIiArICI8L2E+IikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKCI8YSBocmVmPVwiIiArIGhvbWVwYWdlICsgIlwiPiIgKyBob21lcGFnZVswOjYwXSArICI8L2E+IikKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj5Ib21lcGFnZTogPC9iPiIpICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQotICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEJVR1RSQUNLRVIgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiBidWd0cmFja2VyICE9ICd1bmtub3duJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mbyA9IGd0ay5MYWJlbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbGluZV93cmFwKFRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYnVndHJhY2tlcikgPiAzNToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgYnVndHJhY2tlciArICJcIj4iICsgYnVndHJhY2tlclswOjM1XSArICIuLi4iICsgIjwvYT4iKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgYnVndHJhY2tlciArICJcIj4iICsgYnVndHJhY2tlclswOjYwXSArICI8L2E+IikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj5CdWd0cmFja2VyOiA8L2I+IikgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCi0KLSAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTElDRU5TRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2VsZWN0YWJsZShUcnVlKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbGluZV93cmFwKFRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAobGljZW5zZSkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQotCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+TGljZW5zZTogPC9zcGFuPiIpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQotICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQotCi0gICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQklOQiBST1crQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIGJpbmIgIT0gJyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+QnJvdWdodCBpbiBieTogPC9zcGFuPiIpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mbyA9IGd0ay5MYWJlbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfd2lkdGhfY2hhcnMoMzYpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYmluYikgPiAyMDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLGd0ay5QT0xJQ1lfQUxXQVlTKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwxMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoYmluYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3BhZGRpbmcoNiw2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfYWxpZ25tZW50KDAsMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5hZGRfd2l0aF92aWV3cG9ydChzZWxmLmxhYmVsX2luZm8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzY3JvbGxlZF93aW5kb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGJpbmIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfaW5mbykKLQotICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERFU0NSSVBUSU9OIFRBRyBST1cgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkRlc2NyaXB0aW9uIDwvc3Bhbj4iKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQotICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBERVNDUklQVElPTiBJTkZPUk1BVElPTiBST1cgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaGJveCA9IGd0ay5IQm94KFRydWUsc3BhY2luZyA9IDApCi0KLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfd2lkdGhfY2hhcnMoMzYpCi0gICAgICAgICAgICAgICAgaWYgbGVuKGRlc2NyaXB0aW9uKSA+IDIwMDoKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUixndGsuUE9MSUNZX0FMV0FZUykKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9zaXplX3JlcXVlc3QoMTAwLDEwMCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wYWRkaW5nKDYsNikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfYWxpZ25tZW50KDAsMCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5hZGRfd2l0aF92aWV3cG9ydChzZWxmLmxhYmVsX3Nob3J0KQotICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNjcm9sbGVkX3dpbmRvdykKLSAgICAgICAgICAgICAgICBlbHNlOiAgICAKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKLQotICAgICAgICAgICAgICAgIHNlbGYudmJveC5zaG93X2FsbCgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2V0dGluZ3N1aWhlbHBlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAyODVjOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLSMKLSMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KLSMKLSMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgotIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgotIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLWltcG9ydCBndGsKLWltcG9ydCBvcwotZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JJbmZvQnV0dG9uLCBIb2JCdXR0b24sIEhvYkFsdEJ1dHRvbgotCi0iIiIKLVRoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50Ci1CaXRCYWtlIEdVSSdzCi1JbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4Ci0iIiIKLQotY2xhc3MgU2V0dGluZ3NVSUhlbHBlcigpOgotCi0gICAgZGVmIGdlbl9sYWJlbF93aWRnZXQoc2VsZiwgY29udGVudCk6Ci0gICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKLSAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQotICAgICAgICBsYWJlbC5zZXRfbWFya3VwKGNvbnRlbnQpCi0gICAgICAgIGxhYmVsLnNob3coKQotICAgICAgICByZXR1cm4gbGFiZWwKLQotICAgIGRlZiBnZW5fbGFiZWxfaW5mb193aWRnZXQoc2VsZiwgY29udGVudCwgdG9vbHRpcCk6Ci0gICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDEwLCBGYWxzZSkKLSAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoY29udGVudCkKLSAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKLSAgICAgICAgdGFibGUuYXR0YWNoKGxhYmVsLCAwLCAxLCAwLCAxLCB4b3B0aW9ucz1ndGsuRklMTCkKLSAgICAgICAgdGFibGUuYXR0YWNoKGluZm8sIDEsIDIsIDAsIDEsIHhvcHRpb25zPWd0ay5GSUxMLCB4cGFkZGluZz0xMCkKLSAgICAgICAgcmV0dXJuIHRhYmxlCi0KLSAgICBkZWYgZ2VuX3NwaW5uZXJfd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIGxvd2VyLCB1cHBlciwgdG9vbHRpcD0iIik6Ci0gICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCi0gICAgICAgIGFkanVzdCA9IGd0ay5BZGp1c3RtZW50KHZhbHVlPWNvbnRlbnQsIGxvd2VyPWxvd2VyLCB1cHBlcj11cHBlciwgc3RlcF9pbmNyPTEpCi0gICAgICAgIHNwaW5uZXIgPSBndGsuU3BpbkJ1dHRvbihhZGp1c3RtZW50PWFkanVzdCwgY2xpbWJfcmF0ZT0xLCBkaWdpdHM9MCkKLQotICAgICAgICBzcGlubmVyLnNldF92YWx1ZShjb250ZW50KQotICAgICAgICBoYm94LnBhY2tfc3RhcnQoc3Bpbm5lciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQotCi0gICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCi0gICAgICAgIGhib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCi0KLSAgICAgICAgaGJveC5zaG93X2FsbCgpCi0gICAgICAgIHJldHVybiBoYm94LCBzcGlubmVyCi0KLSAgICBkZWYgZ2VuX2NvbWJvX3dpZGdldChzZWxmLCBjdXJyX2l0ZW0sIGFsbF9pdGVtLCB0b29sdGlwPSIiKToKLSAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKLSAgICAgICAgY29tYm8gPSBndGsuY29tYm9fYm94X25ld190ZXh0KCkKLSAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGNvbWJvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCi0KLSAgICAgICAgaW5kZXggPSAwCi0gICAgICAgIGZvciBpdGVtIGluIGFsbF9pdGVtIG9yIFtdOgotICAgICAgICAgICAgY29tYm8uYXBwZW5kX3RleHQoaXRlbSkKLSAgICAgICAgICAgIGlmIGl0ZW0gPT0gY3Vycl9pdGVtOgotICAgICAgICAgICAgICAgIGNvbWJvLnNldF9hY3RpdmUoaW5kZXgpCi0gICAgICAgICAgICBpbmRleCArPSAxCi0KLSAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKLSAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKLQotICAgICAgICBoYm94LnNob3dfYWxsKCkKLSAgICAgICAgcmV0dXJuIGhib3gsIGNvbWJvCi0KLSAgICBkZWYgZW50cnlfd2lkZ2V0X3NlbGVjdF9wYXRoX2NiKHNlbGYsIGFjdGlvbiwgcGFyZW50LCBlbnRyeSk6Ci0gICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiIiwgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKLSAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKLSAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcih0ZXh0IGlmIGxlbih0ZXh0KSA+IDAgZWxzZSBvcy5nZXRjd2QoKSkKLSAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKLSAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCi0gICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKLSAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCi0gICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCi0gICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6Ci0gICAgICAgICAgICBwYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCi0gICAgICAgICAgICBlbnRyeS5zZXRfdGV4dChwYXRoKQotCi0gICAgICAgIGRpYWxvZy5kZXN0cm95KCkKLQotICAgIGRlZiBnZW5fZW50cnlfd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIHBhcmVudCwgdG9vbHRpcD0iIiwgbmVlZF9idXR0b249VHJ1ZSk6Ci0gICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCi0gICAgICAgIGVudHJ5ID0gZ3RrLkVudHJ5KCkKLSAgICAgICAgZW50cnkuc2V0X3RleHQoY29udGVudCkKLSAgICAgICAgZW50cnkuc2V0X3NpemVfcmVxdWVzdCgzNTAsMzApCi0KLSAgICAgICAgaWYgbmVlZF9idXR0b246Ci0gICAgICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgRmFsc2UpCi0gICAgICAgICAgICBoYm94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCi0gICAgICAgICAgICB0YWJsZS5hdHRhY2goZW50cnksIDAsIDksIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCi0gICAgICAgICAgICBpbWFnZSA9IGd0ay5JbWFnZSgpCi0gICAgICAgICAgICBpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfT1BFTixndGsuSUNPTl9TSVpFX0JVVFRPTikKLSAgICAgICAgICAgIG9wZW5fYnV0dG9uID0gZ3RrLkJ1dHRvbigpCi0gICAgICAgICAgICBvcGVuX2J1dHRvbi5zZXRfaW1hZ2UoaW1hZ2UpCi0gICAgICAgICAgICBvcGVuX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lbnRyeV93aWRnZXRfc2VsZWN0X3BhdGhfY2IsIHBhcmVudCwgZW50cnkpCi0gICAgICAgICAgICB0YWJsZS5hdHRhY2gob3Blbl9idXR0b24sIDksIDEwLCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGVudHJ5LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQotCi0gICAgICAgIGlmIHRvb2x0aXAgIT0gIiI6Ci0gICAgICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwLCBzZWxmKQotICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKLQotICAgICAgICBoYm94LnNob3dfYWxsKCkKLSAgICAgICAgcmV0dXJuIGhib3gsIGVudHJ5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2Jjb2xvci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMxNjU0Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIwotIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLWNsYXNzIEhvYkNvbG9yczoKLSAgICBXSElURSAgICAgICAgPSAiI2ZmZmZmZiIKLSAgICBQQUxFX0dSRUVOICAgPSAiI2FhZmZhYSIKLSAgICBPUkFOR0UgICAgICAgPSAiI2ViOGU2OCIKLSAgICBQQUxFX1JFRCAgICAgPSAiI2ZmYWFhYSIKLSAgICBHUkFZICAgICAgICAgPSAiI2FhYWFhYSIKLSAgICBMSUdIVF9HUkFZICAgPSAiI2RkZGRkZCIKLSAgICBTTElHSFRfREFSSyAgPSAiIzVmNWY1ZiIKLSAgICBEQVJLICAgICAgICAgPSAiIzNjM2IzNyIKLSAgICBCTEFDSyAgICAgICAgPSAiIzAwMDAwMCIKLSAgICBQQUxFX0JMVUUgICAgPSAiIzUzYjhmZiIKLSAgICBERUVQX1JFRCAgICAgPSAiI2FhM2UzZSIKLSAgICBLSEFLSSAgICAgICAgPSAiI2ZmZjY4ZiIKLQotICAgIE9LID0gV0hJVEUKLSAgICBSVU5OSU5HID0gUEFMRV9HUkVFTgotICAgIFdBUk5JTkcgPSBPUkFOR0UKLSAgICBFUlJPUiA9IFBBTEVfUkVECmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYndpZGdldC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9id2lkZ2V0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjk2OWMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9id2lkZ2V0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTA0ICswLDAgQEAKLSMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KLSMKLSMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KLSMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0jIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotaW1wb3J0IGd0awotaW1wb3J0IGdvYmplY3QKLWltcG9ydCBvcwotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLWltcG9ydCBwYW5nbywgcGFuZ29jYWlybwotaW1wb3J0IGNhaXJvCi1pbXBvcnQgbWF0aAotCi1mcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCi1mcm9tIGJiLnVpLmNydW1icy5wZXJzaXN0ZW50dG9vbHRpcCBpbXBvcnQgUGVyc2lzdGVudFRvb2x0aXAKLQotY2xhc3MgaHdjOgotCi0gICAgTUFJTl9XSU5fV0lEVEggICA9IDEwMjQKLSAgICBNQUlOX1dJTl9IRUlHSFQgID0gNzAwCi0KLWNsYXNzIGhpYzoKLQotICAgIEhPQl9JQ09OX0JBU0VfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAoInVpL2ljb25zLyIpKQotCi0gICAgSUNPTl9SQ0lQRV9ESVNQTEFZX0ZJTEUgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncmVjaXBlL3JlY2lwZV9kaXNwbGF5LnBuZycpKQotICAgIElDT05fUkNJUEVfSE9WRVJfRklMRSAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nJykpCi0gICAgSUNPTl9QQUNLQUdFU19ESVNQTEFZX0ZJTEUgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncGFja2FnZXMvcGFja2FnZXNfZGlzcGxheS5wbmcnKSkKLSAgICBJQ09OX1BBQ0tBR0VTX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdwYWNrYWdlcy9wYWNrYWdlc19ob3Zlci5wbmcnKSkKLSAgICBJQ09OX0xBWUVSU19ESVNQTEFZX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdsYXllcnMvbGF5ZXJzX2Rpc3BsYXkucG5nJykpCi0gICAgSUNPTl9MQVlFUlNfSE9WRVJfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnbGF5ZXJzL2xheWVyc19ob3Zlci5wbmcnKSkKLSAgICBJQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbWFnZXMvaW1hZ2VzX2Rpc3BsYXkucG5nJykpCi0gICAgSUNPTl9JTUFHRVNfSE9WRVJfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW1hZ2VzL2ltYWdlc19ob3Zlci5wbmcnKSkKLSAgICBJQ09OX1NFVFRJTkdTX0RJU1BMQVlfRklMRSAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdzZXR0aW5ncy9zZXR0aW5nc19kaXNwbGF5LnBuZycpKQotICAgIElDT05fU0VUVElOR1NfSE9WRVJfRklMRSAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZycpKQotICAgIElDT05fSU5GT19ESVNQTEFZX0ZJTEUgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19kaXNwbGF5LnBuZycpKQotICAgIElDT05fSU5GT19IT1ZFUl9GSUxFICAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19ob3Zlci5wbmcnKSkKLSAgICBJQ09OX0lORElfQ09ORklSTV9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2NvbmZpcm1hdGlvbi5wbmcnKSkKLSAgICBJQ09OX0lORElfRVJST1JfRklMRSAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2RlbmllZC5wbmcnKSkKLSAgICBJQ09OX0lORElfUkVNT1ZFX0ZJTEUgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlbW92ZS5wbmcnKSkKLSAgICBJQ09OX0lORElfUkVNT1ZFX0hPVkVSX0ZJTEUgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlbW92ZS1ob3Zlci5wbmcnKSkKLSAgICBJQ09OX0lORElfQUREX0ZJTEUgICAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2FkZC5wbmcnKSkKLSAgICBJQ09OX0lORElfQUREX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2FkZC1ob3Zlci5wbmcnKSkKLSAgICBJQ09OX0lORElfUkVGUkVTSF9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlZnJlc2gucG5nJykpCi0gICAgSUNPTl9JTkRJX0FMRVJUX0ZJTEUgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9hbGVydC5wbmcnKSkKLSAgICBJQ09OX0lORElfVElDS19GSUxFICAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3RpY2sucG5nJykpCi0gICAgSUNPTl9JTkRJX0lORk9fRklMRSAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9pbmZvLnBuZycpKQotCi1jbGFzcyBIb2JWaWV3VGFibGUgKGd0ay5WQm94KToKLSAgICAiIiIKLSAgICBBIFZCb3ggdG8gY29udGFpbiB0aGUgdGFibGUgZm9yIGRpZmZlcmVudCByZWNpcGUgdmlld3MgYW5kIHBhY2thZ2UgdmlldwotICAgICIiIgotICAgIF9fZ3NpZ25hbHNfXyA9IHsKLSAgICAgICAgICJ0b2dnbGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKLSAgICAgICAgICJyb3ctYWN0aXZhdGVkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAotICAgICAgICAgImNlbGwtZmFkZWlub3V0LXN0b3BwZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAotICAgIH0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2x1bW5zLCBuYW1lKToKLSAgICAgICAgZ3RrLlZCb3guX19pbml0X18oc2VsZiwgRmFsc2UsIDYpCi0gICAgICAgIHNlbGYudGFibGVfdHJlZSA9IGd0ay5UcmVlVmlldygpCi0gICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfaGVhZGVyc192aXNpYmxlKFRydWUpCi0gICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfaGVhZGVyc19jbGlja2FibGUoVHJ1ZSkKLSAgICAgICAgc2VsZi50YWJsZV90cmVlLnNldF9ydWxlc19oaW50KFRydWUpCi0gICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfZW5hYmxlX3RyZWVfbGluZXMoVHJ1ZSkKLSAgICAgICAgc2VsZi50YWJsZV90cmVlLmdldF9zZWxlY3Rpb24oKS5zZXRfbW9kZShndGsuU0VMRUNUSU9OX1NJTkdMRSkKLSAgICAgICAgc2VsZi50b2dnbGVfY29sdW1ucyA9IFtdCi0gICAgICAgIHNlbGYudGFibGVfdHJlZS5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5yb3dfYWN0aXZhdGVkX2NiKQotICAgICAgICBzZWxmLnRvcF9iYXIgPSBOb25lCi0gICAgICAgIHNlbGYudGFiX25hbWUgPSBuYW1lCi0KLSAgICAgICAgZm9yIGksIGNvbHVtbiBpbiBlbnVtZXJhdGUoY29sdW1ucyk6Ci0gICAgICAgICAgICBjb2xfbmFtZSA9IGNvbHVtblsnY29sX25hbWUnXQotICAgICAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uKGNvbF9uYW1lKQotICAgICAgICAgICAgY29sLnNldF9jbGlja2FibGUoVHJ1ZSkKLSAgICAgICAgICAgIGNvbC5zZXRfcmVzaXphYmxlKFRydWUpCi0gICAgICAgICAgICBpZiBzZWxmLnRhYl9uYW1lLnN0YXJ0c3dpdGgoJ0luY2x1ZGVkJyk6Ci0gICAgICAgICAgICAgICAgaWYgY29sX25hbWUhPSdJbmNsdWRlZCc6Ci0gICAgICAgICAgICAgICAgICAgIGNvbC5zZXRfc29ydF9jb2x1bW5faWQoY29sdW1uWydjb2xfaWQnXSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29sLnNldF9zb3J0X2NvbHVtbl9pZChjb2x1bW5bJ2NvbF9pZCddKQotICAgICAgICAgICAgaWYgJ2NvbF9taW4nIGluIGNvbHVtbi5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgY29sLnNldF9taW5fd2lkdGgoY29sdW1uWydjb2xfbWluJ10pCi0gICAgICAgICAgICBpZiAnY29sX21heCcgaW4gY29sdW1uLmtleXMoKToKLSAgICAgICAgICAgICAgICBjb2wuc2V0X21heF93aWR0aChjb2x1bW5bJ2NvbF9tYXgnXSkKLSAgICAgICAgICAgIGlmICdleHBhbmQnIGluIGNvbHVtbi5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgY29sLnNldF9leHBhbmQoVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYudGFibGVfdHJlZS5hcHBlbmRfY29sdW1uKGNvbCkKLQotICAgICAgICAgICAgaWYgKG5vdCAnY29sX3N0eWxlJyBpbiBjb2x1bW4ua2V5cygpKSBvciBjb2x1bW5bJ2NvbF9zdHlsZSddID09ICd0ZXh0JzoKLSAgICAgICAgICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQotICAgICAgICAgICAgICAgIGNvbC5wYWNrX3N0YXJ0KGNlbGwsIFRydWUpCi0gICAgICAgICAgICAgICAgY29sLnNldF9hdHRyaWJ1dGVzKGNlbGwsIHRleHQ9Y29sdW1uWydjb2xfaWQnXSkKLSAgICAgICAgICAgICAgICBpZiAnY29sX3RfaWQnIGluIGNvbHVtbi5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbC5hZGRfYXR0cmlidXRlKGNlbGwsICdmb250JywgY29sdW1uWydjb2xfdF9pZCddKQotICAgICAgICAgICAgZWxpZiBjb2x1bW5bJ2NvbF9zdHlsZSddID09ICdjaGVjayB0b2dnbGUnOgotICAgICAgICAgICAgICAgIGNlbGwgPSBIb2JDZWxsUmVuZGVyZXJUb2dnbGUoKQotICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdhY3RpdmF0YWJsZScsIFRydWUpCi0gICAgICAgICAgICAgICAgY2VsbC5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi50b2dnbGVkX2NiLCBpLCBzZWxmLnRhYmxlX3RyZWUpCi0gICAgICAgICAgICAgICAgY2VsbC5jb25uZWN0X3JlbmRlcl9zdGF0ZV9jaGFuZ2VkKHNlbGYuc3RvcF9jZWxsX2ZhZGVpbm91dF9jYiwgc2VsZi50YWJsZV90cmVlKQotICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlX2lkID0gaQotICAgICAgICAgICAgICAgIGNvbC5wYWNrX2VuZChjZWxsLCBUcnVlKQotICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCBhY3RpdmU9Y29sdW1uWydjb2xfaWQnXSkKLSAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zLmFwcGVuZChjb2xfbmFtZSkKLSAgICAgICAgICAgICAgICBpZiAnY29sX2dyb3VwJyBpbiBjb2x1bW4ua2V5cygpOgotICAgICAgICAgICAgICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwsIHNlbGYuc2V0X2dyb3VwX251bWJlcl9jYikKLSAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAncmFkaW8gdG9nZ2xlJzoKLSAgICAgICAgICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZSgpCi0gICAgICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ2FjdGl2YXRhYmxlJywgVHJ1ZSkKLSAgICAgICAgICAgICAgICBjZWxsLnNldF9yYWRpbyhUcnVlKQotICAgICAgICAgICAgICAgIGNlbGwuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudG9nZ2xlZF9jYiwgaSwgc2VsZi50YWJsZV90cmVlKQotICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlX2lkID0gaQotICAgICAgICAgICAgICAgIGNvbC5wYWNrX2VuZChjZWxsLCBUcnVlKQotICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCBhY3RpdmU9Y29sdW1uWydjb2xfaWQnXSkKLSAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zLmFwcGVuZChjb2xfbmFtZSkKLSAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAnYmluYic6Ci0gICAgICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKLSAgICAgICAgICAgICAgICBjb2wucGFja19zdGFydChjZWxsLCBUcnVlKQotICAgICAgICAgICAgICAgIGNvbC5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbCwgc2VsZi5kaXNwbGF5X2JpbmJfY2IsIGNvbHVtblsnY29sX2lkJ10pCi0gICAgICAgICAgICAgICAgaWYgJ2NvbF90X2lkJyBpbiBjb2x1bW4ua2V5cygpOgotICAgICAgICAgICAgICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZShjZWxsLCAnZm9udCcsIGNvbHVtblsnY29sX3RfaWQnXSkKLQotICAgICAgICBzZWxmLnNjcm9sbCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCi0gICAgICAgIHNlbGYuc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCi0gICAgICAgIHNlbGYuc2Nyb2xsLmFkZChzZWxmLnRhYmxlX3RyZWUpCi0KLSAgICAgICAgc2VsZi5wYWNrX2VuZChzZWxmLnNjcm9sbCwgVHJ1ZSwgVHJ1ZSwgMCkKLQotICAgIGRlZiBhZGRfbm9fcmVzdWx0X2JhcihzZWxmLCBlbnRyeSk6Ci0gICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLktIQUtJCi0gICAgICAgIHNlbGYudG9wX2JhciA9IGd0ay5FdmVudEJveCgpCi0gICAgICAgIHNlbGYudG9wX2Jhci5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA3MCkKLSAgICAgICAgc2VsZi50b3BfYmFyLm1vZGlmeV9iZyhndGsuU1RBVEVfTk9STUFMLCBndGsuZ2RrLmNvbG9yX3BhcnNlKGNvbG9yKSkKLSAgICAgICAgc2VsZi50b3BfYmFyLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCi0gICAgICAgIHNlbGYudG9wX2Jhci5ncmFiX2RlZmF1bHQoKQotCi0gICAgICAgIG5vX3Jlc3VsdF90YWIgPSBndGsuVGFibGUoNSwgMjAsIFRydWUpCi0gICAgICAgIHNlbGYudG9wX2Jhci5hZGQobm9fcmVzdWx0X3RhYikKLQotICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCi0gICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCi0gICAgICAgIHRpdGxlID0gIk5vIHJlc3VsdHMgbWF0Y2hpbmcgeW91ciBzZWFyY2giCi0gICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgdGl0bGUpCi0gICAgICAgIG5vX3Jlc3VsdF90YWIuYXR0YWNoKGxhYmVsLCAxLCAxNCwgMSwgNCkKLQotICAgICAgICBjbGVhcl9idXR0b24gPSBIb2JCdXR0b24oIkNsZWFyIHNlYXJjaCIpCi0gICAgICAgIGNsZWFyX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDbGVhciBzZWFyY2ggcXVlcnkiKQotICAgICAgICBjbGVhcl9idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYiwgZW50cnkpCi0gICAgICAgIG5vX3Jlc3VsdF90YWIuYXR0YWNoKGNsZWFyX2J1dHRvbiwgMTYsIDE5LCAxLCA0KQotCi0gICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLnRvcF9iYXIsIEZhbHNlLCBUcnVlLCAxMikKLSAgICAgICAgc2VsZi50b3BfYmFyLnNob3dfYWxsKCkKLQotICAgIGRlZiBzZXRfc2VhcmNoX2VudHJ5X2NsZWFyX2NiKHNlbGYsIGJ1dHRvbiwgc2VhcmNoKToKLSAgICAgICAgaWYgc2VhcmNoLmdldF9lZGl0YWJsZSgpID09IFRydWU6Ci0gICAgICAgICAgICBzZWFyY2guc2V0X3RleHQoIiIpCi0gICAgICAgIHNlYXJjaC5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBGYWxzZSkKLSAgICAgICAgc2VhcmNoLmdyYWJfZm9jdXMoKQotCi0gICAgZGVmIGRpc3BsYXlfYmluYl9jYihzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdCwgY29sX2lkKToKLSAgICAgICAgYmluYiA9ICBtb2RlbC5nZXRfdmFsdWUoaXQsIGNvbF9pZCkKLSAgICAgICAgIyBKdXN0IGRpc3BsYXkgdGhlIGZpcnN0IGl0ZW0KLSAgICAgICAgaWYgYmluYjoKLSAgICAgICAgICAgIGJpbiA9IGJpbmIuc3BsaXQoJywgJykKLSAgICAgICAgICAgIHRvdGFsX25vID0gbGVuKGJpbikKLSAgICAgICAgICAgIGlmIHRvdGFsX25vID4gMSBhbmQgYmluWzBdID09ICJVc2VyIFNlbGVjdGVkIjoKLSAgICAgICAgICAgICAgICBpZiB0b3RhbF9ubyA+IDI6Ci0gICAgICAgICAgICAgICAgICAgIHByZXNlbnRfYmluYiA9IGJpblsxXSArICcgKCsnICsgc3RyKHRvdGFsX25vIC0gMSkgKyAnKScKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMV0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgdG90YWxfbm8gPiAxOgotICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMF0gKyAnICgrJyArIHN0cih0b3RhbF9ubyAtIDEpICsgJyknCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9iaW5iID0gYmluWzBdCi0gICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIHByZXNlbnRfYmluYikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgIiIpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgc2V0X21vZGVsKHNlbGYsIHRyZWVfbW9kZWwpOgotICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X21vZGVsKHRyZWVfbW9kZWwpCi0KLSAgICBkZWYgdG9nZ2xlX2RlZmF1bHQoc2VsZik6Ci0gICAgICAgIG1vZGVsID0gc2VsZi50YWJsZV90cmVlLmdldF9tb2RlbCgpCi0gICAgICAgIGlmIG5vdCBtb2RlbDoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpdGVyID0gbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQotICAgICAgICBpZiBpdGVyOgotICAgICAgICAgICAgcm93cGF0aCA9IG1vZGVsLmdldF9wYXRoKGl0ZXIpCi0gICAgICAgICAgICBtb2RlbFtyb3dwYXRoXVtzZWxmLnRvZ2dsZV9pZF0gPSBUcnVlCi0KLSAgICBkZWYgdG9nZ2xlZF9jYihzZWxmLCBjZWxsLCBwYXRoLCBjb2x1bW5pZCwgdHJlZSk6Ci0gICAgICAgIHNlbGYuZW1pdCgidG9nZ2xlZCIsIGNlbGwsIHBhdGgsIGNvbHVtbmlkLCB0cmVlKQotCi0gICAgZGVmIHJvd19hY3RpdmF0ZWRfY2Ioc2VsZiwgdHJlZSwgcGF0aCwgdmlld19jb2x1bW4pOgotICAgICAgICBpZiBub3Qgdmlld19jb2x1bW4uZ2V0X3RpdGxlKCkgaW4gc2VsZi50b2dnbGVfY29sdW1uczoKLSAgICAgICAgICAgIHNlbGYuZW1pdCgicm93LWFjdGl2YXRlZCIsIHRyZWUuZ2V0X21vZGVsKCksIHBhdGgpCi0KLSAgICBkZWYgc3RvcF9jZWxsX2ZhZGVpbm91dF9jYihzZWxmLCBjdHJsLCBjZWxsLCB0cmVlKToKLSAgICAgICAgc2VsZi5lbWl0KCJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiwgY3RybCwgY2VsbCwgdHJlZSkKLQotICAgIGRlZiBzZXRfZ3JvdXBfbnVtYmVyX2NiKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0ZXIpOgotICAgICAgICBpZiBtb2RlbCBhbmQgKG1vZGVsLml0ZXJfcGFyZW50KGl0ZXIpID09IE5vbmUpOgotICAgICAgICAgICAgY2VsbC5jZWxsX2F0dHJbIm51bWJlcl9vZl9jaGlsZHJlbiJdID0gbW9kZWwuaXRlcl9uX2NoaWxkcmVuKGl0ZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjZWxsLmNlbGxfYXR0clsibnVtYmVyX29mX2NoaWxkcmVuIl0gPSAwCi0KLSAgICBkZWYgY29ubmVjdF9ncm91cF9zZWxlY3Rpb24oc2VsZiwgY2JfZnVuYyk6Ci0gICAgICAgIHNlbGYudGFibGVfdHJlZS5nZXRfc2VsZWN0aW9uKCkuY29ubmVjdCgiY2hhbmdlZCIsIGNiX2Z1bmMpCi0KLSIiIgotQSBtZXRob2QgdG8gY2FsY3VsYXRlIGEgc29mdGVuZWQgdmFsdWUgZm9yIHRoZSBjb2xvdXIgb2Ygd2lkZ2V0IHdoZW4gaW4gdGhlCi1wcm92aWRlZCBzdGF0ZS4KLQotd2lkZ2V0OiB0aGUgd2lkZ2V0IHdob3NlIHN0eWxlIHRvIHVzZQotc3RhdGU6IHRoZSBzdGF0ZSBvZiB0aGUgd2lkZ2V0IHRvIHVzZSB0aGUgc3R5bGUgZm9yCi0KLVJldHVybnMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBzb2Z0ZW5lZCBjb2xvdXIKLSIiIgotZGVmIHNvZnRlbl9jb2xvcih3aWRnZXQsIHN0YXRlPWd0ay5TVEFURV9OT1JNQUwpOgotICAgICMgdGhpcyBjb2xvdXIgbXVuZ2luZyByb3V0aW5lIGlzIGhlYXZpbHkgaW5zcGlyZWQgYnUgZ2R1X3V0aWxfZ2V0X21peF9jb2xvcigpCi0gICAgIyBmcm9tIGdub21lLWRpc2stdXRpbGl0eToKLSAgICAjIGh0dHA6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9nbm9tZS1kaXNrLXV0aWxpdHkvdHJlZS9zcmMvZ2R1LWd0ay9nZHUtZ3RrLmM/aD1nbm9tZS0zLTAKLSAgICBibGVuZCA9IDAuNwotICAgIHN0eWxlID0gd2lkZ2V0LmdldF9zdHlsZSgpCi0gICAgY29sb3IgPSBzdHlsZS50ZXh0W3N0YXRlXQotICAgIGNvbG9yLnJlZCA9IGNvbG9yLnJlZCAqIGJsZW5kICsgc3R5bGUuYmFzZVtzdGF0ZV0ucmVkICogKDEuMCAtIGJsZW5kKQotICAgIGNvbG9yLmdyZWVuID0gY29sb3IuZ3JlZW4gKiBibGVuZCArIHN0eWxlLmJhc2Vbc3RhdGVdLmdyZWVuICogKDEuMCAtIGJsZW5kKQotICAgIGNvbG9yLmJsdWUgPSBjb2xvci5ibHVlICogYmxlbmQgKyBzdHlsZS5iYXNlW3N0YXRlXS5ibHVlICogKDEuMCAtIGJsZW5kKQotICAgIHJldHVybiBjb2xvci50b19zdHJpbmcoKQotCi1jbGFzcyBCYXNlSG9iQnV0dG9uKGd0ay5CdXR0b24pOgotICAgICIiIgotICAgIEEgZ3RrLkJ1dHRvbiBzdWJjbGFzcyB3aGljaCBmb2xsb3dzIHRoZSB2aXN1YWwgZGVzaWduIG9mIEhvYiBmb3IgcHJpbWFyeQotICAgIGFjdGlvbiBidXR0b25zCi0KLSAgICBsYWJlbDogdGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgYnV0dG9uJ3MgbGFiZWwKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgotICAgICAgICBndGsuQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQotICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHN0eWxlX2J1dHRvbihidXR0b24pOgotICAgICAgICBzdHlsZSA9IGJ1dHRvbi5nZXRfc3R5bGUoKQotICAgICAgICBzdHlsZSA9IGd0ay5yY19nZXRfc3R5bGVfYnlfcGF0aHMoZ3RrLnNldHRpbmdzX2dldF9kZWZhdWx0KCksICdndGstYnV0dG9uJywgJ2d0ay1idXR0b24nLCBnb2JqZWN0LlRZUEVfTk9ORSkKLQotICAgICAgICBidXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKLSAgICAgICAgYnV0dG9uLmdyYWJfZGVmYXVsdCgpCi0KLSMgICAgICAgIGxhYmVsID0gIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgZ29iamVjdC5tYXJrdXBfZXNjYXBlX3RleHQoYnV0dG9uLmdldF9sYWJlbCgpKQotICAgICAgICBsYWJlbCA9IGJ1dHRvbi5nZXRfbGFiZWwoKQotICAgICAgICBidXR0b24uc2V0X2xhYmVsKGxhYmVsKQotICAgICAgICBidXR0b24uY2hpbGQuc2V0X3VzZV9tYXJrdXAoVHJ1ZSkKLQotY2xhc3MgSG9iQnV0dG9uKEJhc2VIb2JCdXR0b24pOgotICAgICIiIgotICAgIEEgZ3RrLkJ1dHRvbiBzdWJjbGFzcyB3aGljaCBmb2xsb3dzIHRoZSB2aXN1YWwgZGVzaWduIG9mIEhvYiBmb3IgcHJpbWFyeQotICAgIGFjdGlvbiBidXR0b25zCi0KLSAgICBsYWJlbDogdGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgYnV0dG9uJ3MgbGFiZWwKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgotICAgICAgICBCYXNlSG9iQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQotICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCi0KLWNsYXNzIEhvYkFsdEJ1dHRvbihCYXNlSG9iQnV0dG9uKToKLSAgICAiIiIKLSAgICBBIGd0ay5CdXR0b24gc3ViY2xhc3Mgd2hpY2ggaGFzIG5vIHJlbGllZiwgYW5kIHNvIGlzIG1vcmUgZGlzY3JldGUKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgotICAgICAgICBCYXNlSG9iQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQotICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCi0KLSAgICAiIiIKLSAgICBBIGNhbGxiYWNrIGZvciB0aGUgc3RhdGUtY2hhbmdlZCBldmVudCB0byBlbnN1cmUgdGhlIHRleHQgaXMgZGlzcGxheWVkCi0gICAgZGlmZmVyZW50bHkgd2hlbiB0aGUgd2lkZ2V0IGlzIG5vdCBzZW5zaXRpdmUKLSAgICAiIiIKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGRlc2Vuc2l0aXNlX29uX3N0YXRlX2NoYW5nZV9jYihidXR0b24sIHN0YXRlKToKLSAgICAgICAgaWYgbm90IGJ1dHRvbi5nZXRfcHJvcGVydHkoInNlbnNpdGl2ZSIpOgotICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnNldF90ZXh0KGJ1dHRvbiwgRmFsc2UpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBIb2JBbHRCdXR0b24uc2V0X3RleHQoYnV0dG9uLCBUcnVlKQotCi0gICAgIiIiCi0gICAgU2V0IHRoZSBidXR0b24gbGFiZWwgd2l0aCBhbiBhcHByb3ByaWF0ZSBjb2xvdXIgZm9yIHRoZSBjdXJyZW50IHdpZGdldCBzdGF0ZQotICAgICIiIgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2V0X3RleHQoYnV0dG9uLCBzZW5zaXRpdmU9VHJ1ZSk6Ci0gICAgICAgIGlmIHNlbnNpdGl2ZToKLSAgICAgICAgICAgIGNvbG91ciA9IEhvYkNvbG9ycy5QQUxFX0JMVUUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbG91ciA9IEhvYkNvbG9ycy5MSUdIVF9HUkFZCi0gICAgICAgIGJ1dHRvbi5zZXRfbGFiZWwoIjxzcGFuIHNpemU9J2xhcmdlJyBjb2xvcj0nJXMnPjxiPiVzPC9iPjwvc3Bhbj4iICUgKGNvbG91ciwgZ29iamVjdC5tYXJrdXBfZXNjYXBlX3RleHQoYnV0dG9uLnRleHQpKSkKLSAgICAgICAgYnV0dG9uLmNoaWxkLnNldF91c2VfbWFya3VwKFRydWUpCi0KLWNsYXNzIEhvYkltYWdlQnV0dG9uKGd0ay5CdXR0b24pOgotICAgICIiIgotICAgIEEgZ3RrLkJ1dHRvbiB3aXRoIGFuIGljb24gYW5kIHR3byByb3dzIG9mIHRleHQsIHRoZSBzZWNvbmQgb2Ygd2hpY2ggaXMKLSAgICBkaXNwbGF5ZWQgaW4gYSBibGVuZGVkIGNvbG91ci4KLQotICAgIHByaW1hcnlfdGV4dDogdGhlIG1haW4gYnV0dG9uIGxhYmVsCi0gICAgc2Vjb25kYXJ5X3RleHQ6IG9wdGlvbmFsIHNlY29uZCBsaW5lIG9mIHRleHQKLSAgICBpY29uX3BhdGg6IHBhdGggdG8gdGhlIGljb24gZmlsZSB0byBkaXNwbGF5IG9uIHRoZSBidXR0b24KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbWFyeV90ZXh0LCBzZWNvbmRhcnlfdGV4dD0iIiwgaWNvbl9wYXRoPSIiLCBob3Zlcl9pY29uX3BhdGg9IiIpOgotICAgICAgICBndGsuQnV0dG9uLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuc2V0X3JlbGllZihndGsuUkVMSUVGX05PTkUpCi0KLSAgICAgICAgc2VsZi5pY29uX3BhdGggPSBpY29uX3BhdGgKLSAgICAgICAgc2VsZi5ob3Zlcl9pY29uX3BhdGggPSBob3Zlcl9pY29uX3BhdGgKLQotICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEwKQotICAgICAgICBoYm94LnNob3coKQotICAgICAgICBzZWxmLmFkZChoYm94KQotICAgICAgICBzZWxmLmljb24gPSBndGsuSW1hZ2UoKQotICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmljb25fcGF0aCkKLSAgICAgICAgc2VsZi5pY29uLnNldF9hbGlnbm1lbnQoMC41LCAwLjApCi0gICAgICAgIHNlbGYuaWNvbi5zaG93KCkKLSAgICAgICAgaWYgc2VsZi5ob3Zlcl9pY29uX3BhdGggYW5kIGxlbihzZWxmLmhvdmVyX2ljb25fcGF0aCk6Ci0gICAgICAgICAgICBzZWxmLmNvbm5lY3QoImVudGVyLW5vdGlmeS1ldmVudCIsIHNlbGYuc2V0X2hvdmVyX2ljb25fY2IpCi0gICAgICAgICAgICBzZWxmLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYuc2V0X2ljb25fY2IpCi0gICAgICAgIGhib3gucGFja19zdGFydChzZWxmLmljb24sIEZhbHNlLCBGYWxzZSwgMCkKLSAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQotICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQotICAgICAgICBjb2xvdXIgPSBzb2Z0ZW5fY29sb3IobGFiZWwpCi0gICAgICAgIG1hcmsgPSAiPHNwYW4gc2l6ZT0neC1sYXJnZSc+JXM8L3NwYW4+XG48c3BhbiBzaXplPSdtZWRpdW0nIGZnY29sb3I9JyVzJyB3ZWlnaHQ9J3VsdHJhbGlnaHQnPiVzPC9zcGFuPiIgJSAocHJpbWFyeV90ZXh0LCBjb2xvdXIsIHNlY29uZGFyeV90ZXh0KQotICAgICAgICBsYWJlbC5zZXRfbWFya3VwKG1hcmspCi0gICAgICAgIGxhYmVsLnNob3coKQotICAgICAgICBoYm94LnBhY2tfc3RhcnQobGFiZWwsIFRydWUsIFRydWUsIDApCi0KLSAgICBkZWYgc2V0X2hvdmVyX2ljb25fY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6Ci0gICAgICAgIHNlbGYuaWNvbi5zZXRfZnJvbV9maWxlKHNlbGYuaG92ZXJfaWNvbl9wYXRoKQotCi0gICAgZGVmIHNldF9pY29uX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgotICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmljb25fcGF0aCkKLQotY2xhc3MgSG9iSW5mb0J1dHRvbihndGsuRXZlbnRCb3gpOgotICAgICIiIgotICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGJ1dHRvbi1saWtlIHdpZGdldCBwZXIgdGhlIEhvYiB2aXN1YWwgYW5kIFVYIGRlc2lnbnMKLSAgICB3aGljaCB3aWxsIGRpc3BsYXkgYSBwZXJzaXN0ZW50IHRvb2x0aXAsIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRpcF9tYXJrdXAsIHdoZW4KLSAgICBjbGlja2VkLgotCi0gICAgdGlwX21hcmt1cDogdGhlIFBhbmdvIE1hcmt1cCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBlcnNpc3RlbnQgdG9vbHRpcAotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXBfbWFya3VwLCBwYXJlbnQ9Tm9uZSk6Ci0gICAgICAgIGd0ay5FdmVudEJveC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmltYWdlID0gZ3RrLkltYWdlKCkKLSAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKAotICAgICAgICBoaWMuSUNPTl9JTkZPX0RJU1BMQVlfRklMRSkKLSAgICAgICAgc2VsZi5pbWFnZS5zaG93KCkKLSAgICAgICAgc2VsZi5hZGQoc2VsZi5pbWFnZSkKLSAgICAgICAgc2VsZi50aXBfbWFya3VwID0gdGlwX21hcmt1cAotICAgICAgICBzZWxmLm15X3BhcmVudCA9IHBhcmVudAotCi0gICAgICAgIHNlbGYuc2V0X2V2ZW50cyhndGsuZ2RrLkJVVFRPTl9SRUxFQVNFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5nZGsuRU5URVJfTk9USUZZX01BU0sgfAotICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLmdkay5MRUFWRV9OT1RJRllfTUFTSykKLQotICAgICAgICBzZWxmLmNvbm5lY3QoImJ1dHRvbi1yZWxlYXNlLWV2ZW50Iiwgc2VsZi5idXR0b25fcmVsZWFzZV9jYikKLSAgICAgICAgc2VsZi5jb25uZWN0KCJlbnRlci1ub3RpZnktZXZlbnQiLCBzZWxmLm1vdXNlX2luX2NiKQotICAgICAgICBzZWxmLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYubW91c2Vfb3V0X2NiKQotCi0gICAgIiIiCi0gICAgV2hlbiB0aGUgbW91c2UgY2xpY2sgaXMgcmVsZWFzZWQgZW11bGF0ZSBhIGJ1dHRvbi1jbGljayBhbmQgc2hvdyB0aGUgYXNzb2NpYXRlZAotICAgIFBlcnNpc3RlbnRUb29sdGlwCi0gICAgIiIiCi0gICAgZGVmIGJ1dHRvbl9yZWxlYXNlX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgotICAgICAgICBmcm9tIGJiLnVpLmNydW1icy5oaWcucHJvcGVydHlkaWFsb2cgaW1wb3J0IFByb3BlcnR5RGlhbG9nCi0gICAgICAgIHNlbGYuZGlhbG9nID0gUHJvcGVydHlEaWFsb2codGl0bGUgPSAnJywKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5teV9wYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uID0gc2VsZi50aXBfbWFya3VwLAotICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAotICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKLQotICAgICAgICBidXR0b24gPSBzZWxmLmRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCi0gICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQotICAgICAgICBidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIGxhbWJkYSB3OiBzZWxmLmRpYWxvZy5kZXN0cm95KCkpCi0gICAgICAgIHNlbGYuZGlhbG9nLnNob3dfYWxsKCkKLSAgICAgICAgc2VsZi5kaWFsb2cucnVuKCkKLQotICAgICIiIgotICAgIENoYW5nZSB0byB0aGUgcHJlbGlnaHQgaW1hZ2Ugd2hlbiB0aGUgbW91c2UgZW50ZXJzIHRoZSB3aWRnZXQKLSAgICAiIiIKLSAgICBkZWYgbW91c2VfaW5fY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6Ci0gICAgICAgIHNlbGYuaW1hZ2Uuc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0hPVkVSX0ZJTEUpCi0KLSAgICAiIiIKLSAgICBDaGFuZ2UgdG8gdGhlIHN0b2NrIGltYWdlIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgd2lkZ2V0Ci0gICAgIiIiCi0gICAgZGVmIG1vdXNlX291dF9jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKLSAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORk9fRElTUExBWV9GSUxFKQotCi1jbGFzcyBIb2JJbmRpY2F0b3IoZ3RrLkRyYXdpbmdBcmVhKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY291bnQpOgotICAgICAgICBndGsuRHJhd2luZ0FyZWEuX19pbml0X18oc2VsZikKLSAgICAgICAgIyBTZXQgbm8gd2luZG93IGZvciB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kCi0gICAgICAgIHNlbGYuc2V0X2hhc193aW5kb3coRmFsc2UpCi0gICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCgzOCwzOCkKLSAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgdGhyb3VnaCBidXR0b24gY2xpY2tzCi0gICAgICAgIHNlbGYuYWRkX2V2ZW50cyhndGsuZ2RrLkJVVFRPTl9QUkVTU19NQVNLIHwgZ3RrLmdkay5CVVRUT05fUkVMRUFTRV9NQVNLKQotCi0gICAgICAgIHNlbGYuY29ubmVjdCgnZXhwb3NlLWV2ZW50Jywgc2VsZi5leHBvc2UpCi0KLSAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50Ci0gICAgICAgIHNlbGYuY29sb3IgPSBIb2JDb2xvcnMuR1JBWQotCi0gICAgZGVmIGV4cG9zZShzZWxmLCB3aWRnZXQsIGV2ZW50KToKLSAgICAgICAgaWYgc2VsZi5jb3VudCBhbmQgc2VsZi5jb3VudCA+IDA6Ci0gICAgICAgICAgICBjdHggPSB3aWRnZXQud2luZG93LmNhaXJvX2NyZWF0ZSgpCi0KLSAgICAgICAgICAgIHgsIHksIHcsIGggPSBzZWxmLmFsbG9jYXRpb24KLQotICAgICAgICAgICAgY3R4LnNldF9vcGVyYXRvcihjYWlyby5PUEVSQVRPUl9PVkVSKQotICAgICAgICAgICAgY3R4LnNldF9zb3VyY2VfY29sb3IoZ3RrLmdkay5jb2xvcl9wYXJzZShzZWxmLmNvbG9yKSkKLSAgICAgICAgICAgIGN0eC50cmFuc2xhdGUody8yLCBoLzIpCi0gICAgICAgICAgICBjdHguYXJjKHgsIHksIG1pbih3LGgpLzIgLSAyLCAwLCAyKm1hdGgucGkpCi0gICAgICAgICAgICBjdHguZmlsbF9wcmVzZXJ2ZSgpCi0KLSAgICAgICAgICAgIGxheW91dCA9IHNlbGYuY3JlYXRlX3BhbmdvX2xheW91dChzdHIoc2VsZi5jb3VudCkpCi0gICAgICAgICAgICB0ZXh0dywgdGV4dGggPSBsYXlvdXQuZ2V0X3BpeGVsX3NpemUoKQotICAgICAgICAgICAgeCA9ICh3LzIpLSh0ZXh0dy8yKSArIHgKLSAgICAgICAgICAgIHkgPSAoaC8yKSAtICh0ZXh0aC8yKSArIHkKLSAgICAgICAgICAgIGN0eC5tb3ZlX3RvKHgsIHkpCi0gICAgICAgICAgICBzZWxmLndpbmRvdy5kcmF3X2xheW91dChzZWxmLnN0eWxlLmxpZ2h0X2djW2d0ay5TVEFURV9OT1JNQUxdLCBpbnQoeCksIGludCh5KSwgbGF5b3V0KQotCi0gICAgZGVmIHNldF9jb3VudChzZWxmLCBjb3VudCk6Ci0gICAgICAgIHNlbGYuY291bnQgPSBjb3VudAotCi0gICAgZGVmIHNldF9hY3RpdmUoc2VsZiwgYWN0aXZlKToKLSAgICAgICAgaWYgYWN0aXZlOgotICAgICAgICAgICAgc2VsZi5jb2xvciA9IEhvYkNvbG9ycy5ERUVQX1JFRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5jb2xvciA9IEhvYkNvbG9ycy5HUkFZCi0KLWNsYXNzIEhvYlRhYkxhYmVsKGd0ay5IQm94KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgY291bnQ9MCk6Ci0gICAgICAgIGd0ay5IQm94Ll9faW5pdF9fKHNlbGYsIEZhbHNlLCAwKQotICAgICAgICBzZWxmLmluZGljYXRvciA9IEhvYkluZGljYXRvcihjb3VudCkKLSAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2hvdygpCi0gICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5pbmRpY2F0b3IsIEZhbHNlLCBGYWxzZSkKLSAgICAgICAgc2VsZi5sYmwgPSBndGsuTGFiZWwodGV4dCkKLSAgICAgICAgc2VsZi5sYmwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKLSAgICAgICAgc2VsZi5sYmwuc2hvdygpCi0gICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5sYmwsIFRydWUsIFRydWUsIDYpCi0KLSAgICBkZWYgc2V0X2NvdW50KHNlbGYsIGNvdW50KToKLSAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2V0X2NvdW50KGNvdW50KQotCi0gICAgZGVmIHNldF9hY3RpdmUoc2VsZiwgYWN0aXZlPVRydWUpOgotICAgICAgICBzZWxmLmluZGljYXRvci5zZXRfYWN0aXZlKGFjdGl2ZSkKLQotY2xhc3MgSG9iTm90ZWJvb2soZ3RrLk5vdGVib29rKToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIGd0ay5Ob3RlYm9vay5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgnaG9tb2dlbmVvdXMnLCBUcnVlKQotCi0gICAgICAgIHNlbGYucGFnZXMgPSBbXQotCi0gICAgICAgIHNlbGYuc2VhcmNoID0gTm9uZQotICAgICAgICBzZWxmLnNlYXJjaF9mb2N1cyA9IEZhbHNlCi0gICAgICAgIHNlbGYucGFnZV9jaGFuZ2VkID0gRmFsc2UKLQotICAgICAgICBzZWxmLmNvbm5lY3QoInN3aXRjaC1wYWdlIiwgc2VsZi5wYWdlX2NoYW5nZWRfY2IpCi0KLSAgICAgICAgc2VsZi5zaG93X2FsbCgpCi0KLSAgICBkZWYgcGFnZV9jaGFuZ2VkX2NiKHNlbGYsIG5iLCBwYWdlLCBwYWdlX251bSk6Ci0gICAgICAgIGZvciBwLCBsYmwgaW4gZW51bWVyYXRlKHNlbGYucGFnZXMpOgotICAgICAgICAgICAgaWYgcCA9PSBwYWdlX251bToKLSAgICAgICAgICAgICAgICBsYmwuc2V0X2FjdGl2ZSgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxibC5zZXRfYWN0aXZlKEZhbHNlKQotCi0gICAgICAgIGlmIHNlbGYuc2VhcmNoOgotICAgICAgICAgICAgc2VsZi5wYWdlX2NoYW5nZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLnJlc2V0X2VudHJ5KHNlbGYuc2VhcmNoLCBwYWdlX251bSkKLQotICAgIGRlZiBhcHBlbmRfcGFnZShzZWxmLCBjaGlsZCwgdGFiX2xhYmVsLCB0YWJfdG9vbHRpcD1Ob25lKToKLSAgICAgICAgbGFiZWwgPSBIb2JUYWJMYWJlbCh0YWJfbGFiZWwpCi0gICAgICAgIGlmIHRhYl90b29sdGlwOgotICAgICAgICAgICAgbGFiZWwuc2V0X3Rvb2x0aXBfdGV4dCh0YWJfdG9vbHRpcCkKLSAgICAgICAgbGFiZWwuc2V0X2FjdGl2ZShGYWxzZSkKLSAgICAgICAgc2VsZi5wYWdlcy5hcHBlbmQobGFiZWwpCi0gICAgICAgIGd0ay5Ob3RlYm9vay5hcHBlbmRfcGFnZShzZWxmLCBjaGlsZCwgbGFiZWwpCi0KLSAgICBkZWYgc2V0X2VudHJ5KHNlbGYsIG5hbWVzLCB0aXBzKToKLSAgICAgICAgc2VsZi5zZWFyY2ggPSBndGsuRW50cnkoKQotICAgICAgICBzZWxmLnNlYXJjaF9uYW1lcyA9IG5hbWVzCi0gICAgICAgIHNlbGYuc2VhcmNoX3RpcHMgPSB0aXBzCi0gICAgICAgIHN0eWxlID0gc2VsZi5zZWFyY2guZ2V0X3N0eWxlKCkKLSAgICAgICAgc3R5bGUudGV4dFtndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkdSQVksIEZhbHNlLCBGYWxzZSkKLSAgICAgICAgc2VsZi5zZWFyY2guc2V0X3N0eWxlKHN0eWxlKQotICAgICAgICBzZWxmLnNlYXJjaC5zZXRfdGV4dChuYW1lc1swXSkKLSAgICAgICAgc2VsZi5zZWFyY2guc2V0X3Rvb2x0aXBfdGV4dChzZWxmLnNlYXJjaF90aXBzWzBdKQotICAgICAgICBzZWxmLnNlYXJjaC5wcm9wcy5oYXNfdG9vbHRpcCA9IFRydWUKLQotICAgICAgICBzZWxmLnNlYXJjaC5zZXRfZWRpdGFibGUoRmFsc2UpCi0gICAgICAgIHNlbGYuc2VhcmNoLnNldF9pY29uX2Zyb21fc3RvY2soZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBndGsuU1RPQ0tfQ0xFQVIpCi0gICAgICAgIHNlbGYuc2VhcmNoLnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQotICAgICAgICBzZWxmLnNlYXJjaC5jb25uZWN0KCJpY29uLXJlbGVhc2UiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfY2xlYXJfY2IpCi0gICAgICAgIHNlbGYuc2VhcmNoLnNldF93aWR0aF9jaGFycygzMCkKLSAgICAgICAgc2VsZi5zZWFyY2guc2hvdygpCi0KLSAgICAgICAgc2VsZi5zZWFyY2guY29ubmVjdCgiZm9jdXMtaW4tZXZlbnQiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfZWRpdGFibGVfY2IpCi0gICAgICAgIHNlbGYuc2VhcmNoLmNvbm5lY3QoImZvY3VzLW91dC1ldmVudCIsIHNlbGYuc2V0X3NlYXJjaF9lbnRyeV9yZXNldF9jYikKLSAgICAgICAgc2VsZi5zZXRfYWN0aW9uX3dpZGdldChzZWxmLnNlYXJjaCwgZ3RrLlBBQ0tfRU5EKQotCi0gICAgZGVmIHNob3dfaW5kaWNhdG9yX2ljb24oc2VsZiwgdGl0bGUsIG51bWJlcik6Ci0gICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgotICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgotICAgICAgICAgICAgICAgIGNoaWxkLnNldF9jb3VudChudW1iZXIpCi0KLSAgICBkZWYgaGlkZV9pbmRpY2F0b3JfaWNvbihzZWxmLCB0aXRsZSk6Ci0gICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgotICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgotICAgICAgICAgICAgICAgIGNoaWxkLnNldF9jb3VudCgwKQotCi0gICAgZGVmIHNldF9zZWFyY2hfZW50cnlfZWRpdGFibGVfY2Ioc2VsZiwgc2VhcmNoLCBldmVudCk6Ci0gICAgICAgIHNlbGYuc2VhcmNoX2ZvY3VzID0gVHJ1ZQotICAgICAgICBzZWFyY2guc2V0X2VkaXRhYmxlKFRydWUpCi0gICAgICAgIHRleHQgPSBzZWFyY2guZ2V0X3RleHQoKQotICAgICAgICBpZiB0ZXh0IGluIHNlbGYuc2VhcmNoX25hbWVzOgotICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQotICAgICAgICBzdHlsZSA9IHNlbGYuc2VhcmNoLmdldF9zdHlsZSgpCi0gICAgICAgIHN0eWxlLnRleHRbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKEhvYkNvbG9ycy5CTEFDSywgRmFsc2UsIEZhbHNlKQotICAgICAgICBzZWFyY2guc2V0X3N0eWxlKHN0eWxlKQotCi0gICAgZGVmIHNldF9zZWFyY2hfZW50cnlfcmVzZXRfY2Ioc2VsZiwgc2VhcmNoLCBldmVudCk6Ci0gICAgICAgIHBhZ2VfbnVtID0gc2VsZi5nZXRfY3VycmVudF9wYWdlKCkKLSAgICAgICAgdGV4dCA9IHNlYXJjaC5nZXRfdGV4dCgpCi0gICAgICAgIGlmIG5vdCB0ZXh0OgotICAgICAgICAgICAgc2VsZi5yZXNldF9lbnRyeShzZWFyY2gsIHBhZ2VfbnVtKQotCi0gICAgZGVmIHJlc2V0X2VudHJ5KHNlbGYsIGVudHJ5LCBwYWdlX251bSk6Ci0gICAgICAgIHN0eWxlID0gZW50cnkuZ2V0X3N0eWxlKCkKLSAgICAgICAgc3R5bGUudGV4dFtndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkdSQVksIEZhbHNlLCBGYWxzZSkKLSAgICAgICAgZW50cnkuc2V0X3N0eWxlKHN0eWxlKQotICAgICAgICBlbnRyeS5zZXRfdGV4dChzZWxmLnNlYXJjaF9uYW1lc1twYWdlX251bV0pCi0gICAgICAgIGVudHJ5LnNldF90b29sdGlwX3RleHQoc2VsZi5zZWFyY2hfdGlwc1twYWdlX251bV0pCi0gICAgICAgIGVudHJ5LnNldF9lZGl0YWJsZShGYWxzZSkKLSAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCi0KLSAgICBkZWYgc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYihzZWxmLCBzZWFyY2gsIGljb25fcG9zLCBldmVudCk6Ci0gICAgICAgIGlmIHNlYXJjaC5nZXRfZWRpdGFibGUoKSA9PSBUcnVlOgotICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQotICAgICAgICBzZWFyY2guc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCi0gICAgICAgIHNlYXJjaC5ncmFiX2ZvY3VzKCkKLQotICAgIGRlZiBzZXRfcGFnZShzZWxmLCB0aXRsZSk6Ci0gICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgotICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgotICAgICAgICAgICAgICAgIGNoaWxkLmdyYWJfZm9jdXMoKQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X2N1cnJlbnRfcGFnZShzZWxmLnBhZ2VzLmluZGV4KGNoaWxkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotY2xhc3MgSG9iV2FycENlbGxSZW5kZXJlclRleHQoZ3RrLkNlbGxSZW5kZXJlclRleHQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2xfbnVtYmVyKToKLSAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclRleHQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoIndyYXAtbW9kZSIsIHBhbmdvLldSQVBfV09SRF9DSEFSKQotICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgid3JhcC13aWR0aCIsIDMwMCkgIyBkZWZhdWx0IHZhbHVlIHdyYXAgd2lkdGggaXMgMzAwCi0gICAgICAgIHNlbGYuY29sX24gPSBjb2xfbnVtYmVyCi0KLSAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKLSAgICAgICAgaWYgd2lkZ2V0OgotICAgICAgICAgICAgc2VsZi5wcm9wcy53cmFwX3dpZHRoID0gc2VsZi5nZXRfcmVzaXplZF93cmFwX3dpZHRoKHdpZGdldCwgd2lkZ2V0LmdldF9jb2x1bW4oc2VsZi5jb2xfbikpCi0gICAgICAgIHJldHVybiBndGsuQ2VsbFJlbmRlcmVyVGV4dC5kb19yZW5kZXIoc2VsZiwgd2luZG93LCB3aWRnZXQsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpCi0KLSAgICBkZWYgZ2V0X3Jlc2l6ZWRfd3JhcF93aWR0aChzZWxmLCB0cmVldmlldywgY29sdW1uKToKLSAgICAgICAgb3RoZXJDb2xzID0gW10KLSAgICAgICAgZm9yIGNvbCBpbiB0cmVldmlldy5nZXRfY29sdW1ucygpOgotICAgICAgICAgICAgaWYgY29sICE9IGNvbHVtbjoKLSAgICAgICAgICAgICAgICBvdGhlckNvbHMuYXBwZW5kKGNvbCkKLSAgICAgICAgYWRqd2lkdGggPSB0cmVldmlldy5hbGxvY2F0aW9uLndpZHRoIC0gc3VtKGMuZ2V0X3dpZHRoKCkgZm9yIGMgaW4gb3RoZXJDb2xzKQotICAgICAgICBhZGp3aWR0aCAtPSB0cmVldmlldy5zdHlsZV9nZXRfcHJvcGVydHkoImhvcml6b250YWwtc2VwYXJhdG9yIikgKiA0Ci0gICAgICAgIGlmIHNlbGYucHJvcHMud3JhcF93aWR0aCA9PSBhZGp3aWR0aCBvciBhZGp3aWR0aCA8PSAwOgotICAgICAgICAgICAgICAgIGFkandpZHRoID0gc2VsZi5wcm9wcy53cmFwX3dpZHRoCi0gICAgICAgIHJldHVybiBhZGp3aWR0aAotCi1nb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iV2FycENlbGxSZW5kZXJlclRleHQpCi0KLWNsYXNzIEhvYkljb25DaGVja2VyKGhpYyk6Ci0gICAgZGVmIHNldF9ob2JfaWNvbl90b19zdG9ja19pY29uKHNlbGYsIGZpbGVfcGF0aCwgc3RvY2tfaWQ9IiIpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwaXhidWYgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGZpbGVfcGF0aCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgaWYgc3RvY2tfaWQgYW5kIChndGsuaWNvbl9mYWN0b3J5X2xvb2t1cF9kZWZhdWx0KHN0b2NrX2lkKSA9PSBOb25lKToKLSAgICAgICAgICAgIGljb25fZmFjdG9yeSA9IGd0ay5JY29uRmFjdG9yeSgpCi0gICAgICAgICAgICBpY29uX2ZhY3RvcnkuYWRkX2RlZmF1bHQoKQotICAgICAgICAgICAgaWNvbl9mYWN0b3J5LmFkZChzdG9ja19pZCwgZ3RrLkljb25TZXQocGl4YnVmKSkKLSAgICAgICAgICAgIGd0ay5zdG9ja19hZGQoWyhzdG9ja19pZCwgJ19sYWJlbCcsIDAsIDAsICcnKV0pCi0KLSAgICAgICAgICAgIHJldHVybiBpY29uX2ZhY3RvcnkubG9va3VwKHN0b2NrX2lkKQotCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICAiIiIKLSAgICBGb3IgbWFrZSBob2IgaWNvbiBjb25zaXN0ZW50bHkgYnkgcmVxdWVzdCwgYW5kIGF2b2lkIGljb24gdmlldyBkaWZmIGJ5IHN5c3RlbSBvciBndGsgdmVyc2lvbiwgd2UgdXNlIHNvbWUgJ2hvYiBpY29uJyB0byByZXBsYWNlIHRoZSAnZ3RrIGljb24nLgotICAgIHRoaXMgZnVuY3Rpb24gY2hlY2sgdGhlIHN0b2NrX2lkIGFuZCBtYWtlIGhvYl9pZCB0byByZXBsYWNlZCB0aGUgZ3RrX2lkIHRoZW4gcmV0dXJuIGl0IG9yICIiCi0gICAgIiIiCi0gICAgZGVmIGNoZWNrX3N0b2NrX2ljb24oc2VsZiwgc3RvY2tfbmFtZT0iIik6Ci0gICAgICAgIEhPQl9DSEVDS19TVE9DS19OQU1FID0gewotICAgICAgICAgICAgKCdoaWMtZGlhbG9nLWluZm8nLCAnZ3RrLWRpYWxvZy1pbmZvJywgJ2RpYWxvZy1pbmZvJykgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfSU5GT19GSUxFLAotICAgICAgICAgICAgKCdoaWMtb2snLCAgICAgICAgICAnZ3RrLW9rJywgICAgICAgICAgICdvaycpICAgICAgICAgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfVElDS19GSUxFLAotICAgICAgICAgICAgKCdoaWMtZGlhbG9nLWVycm9yJywgJ2d0ay1kaWFsb2ctZXJyb3InLCAnZGlhbG9nLWVycm9yJykgICAgICAgIDogc2VsZi5JQ09OX0lORElfRVJST1JfRklMRSwKLSAgICAgICAgICAgICgnaGljLWRpYWxvZy13YXJuaW5nJywgJ2d0ay1kaWFsb2ctd2FybmluZycsICdkaWFsb2ctd2FybmluZycpICA6IHNlbGYuSUNPTl9JTkRJX0FMRVJUX0ZJTEUsCi0gICAgICAgICAgICAoJ2hpYy10YXNrLXJlZnJlc2gnLCAnZ3RrLWV4ZWN1dGUnLCAnZXhlY3V0ZScpICAgICAgICAgICAgICAgICAgOiBzZWxmLklDT05fSU5ESV9SRUZSRVNIX0ZJTEUsCi0gICAgICAgIH0KLSAgICAgICAgdmFsaWRfc3RvY2tfaWQgPSBzdG9ja19uYW1lCi0gICAgICAgIGlmIHN0b2NrX25hbWU6Ci0gICAgICAgICAgICBmb3IgbmFtZXMsIHBhdGggaW4gSE9CX0NIRUNLX1NUT0NLX05BTUUuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYgc3RvY2tfbmFtZSBpbiBuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgdmFsaWRfc3RvY2tfaWQgPSBuYW1lc1swXQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ3RrLmljb25fZmFjdG9yeV9sb29rdXBfZGVmYXVsdCh2YWxpZF9zdG9ja19pZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9ob2JfaWNvbl90b19zdG9ja19pY29uKHBhdGgsIHZhbGlkX3N0b2NrX2lkKQotCi0gICAgICAgIHJldHVybiB2YWxpZF9zdG9ja19pZAotCi1jbGFzcyBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKGdvYmplY3QuR09iamVjdCk6Ci0gICAgKE1PREVfQ1lDTEVfUlVOTklORywgTU9ERV9PTkVfU0hPUlQpID0gcmFuZ2UoMikKLSAgICBfX2dzaWduYWxzX18gPSB7Ci0gICAgICAgICJydW4tdGltZXItc3RvcHBlZCIgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCi0gICAgfQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uaW5nbW9kZT1NT0RFX0NZQ0xFX1JVTk5JTkcsIGlzX2RyYXdfcm93PUZhbHNlKToKLSAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYudGltZW91dF9pZCA9IE5vbmUKLSAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IDAuMAotICAgICAgICBzZWxmLnN0ZXBfYW5nbGUgPSAwLjAKLSAgICAgICAgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0ID0gMAotICAgICAgICBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IFtdCi0gICAgICAgIHNlbGYucnVubmluZ19tb2RlID0gcnVubmluZ21vZGUKLSAgICAgICAgc2VsZi5pc19xdWV1ZV9kcmF3X3Jvd19hcmVhID0gaXNfZHJhd19yb3cKLSAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IEZhbHNlCi0KLSAgICBkZWYgaXNfYWN0aXZlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnRpbWVvdXRfaWQ6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgcmVzZXRfcnVuKHNlbGYpOgotICAgICAgICBzZWxmLmZvcmNlX3N0b3AoKQotICAgICAgICBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IFtdCi0gICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPSAwLjAKLSAgICAgICAgc2VsZi5zdGVwX2FuZ2xlID0gMC4wCi0KLSAgICAnJycgdGltZV9pdGVydmFsOiAoMX4xMDAwKW1zLCB3aGljaCB3aWxsIGJlIGFzIHRoZSBiYXNpYyBpbnRlcnZhbCBjb3VudCBmb3IgdGltZXIKLSAgICAgICAgaW5pdF91c3JkYXRhOiB0aGUgY3VycmVudCBkYXRhIHdoaWNoIHJlbGF0ZWQgdGhlIHByb2dyZXNzLWJhciB3aWxsIGJlIGF0Ci0gICAgICAgIG1pbl91c3JkYXRhOiB0aGUgcmFuZ2Ugb2YgbWluIG9mIHVzZXIgZGF0YQotICAgICAgICBtYXhfdXNyZGF0YTogdGhlIHJhbmdlIG9mIG1heCBvZiB1c2VyIGRhdGEKLSAgICAgICAgc3RlcDogZWFjaCBzdGVwIHdoaWNoIHlvdSB3YW50IHRvIHByb2dyZXNzCi0gICAgICAgIE5vdGU6IHRoZSBpbml0X3VzcmRhdGEgc2hvdWxkIGluIHRoZSByYW5nZSBvZiBmcm9tIG1pbiB0byBtYXgsIGFuZCBtYXggc2hvdWxkID4gbWluCi0gICAgICAgICAgICAgc3RlcCBzaG91bGQgPCAobWF4IC0gbWluKQotICAgICcnJwotICAgIGRlZiBzdGFydF9ydW4oc2VsZiwgdGltZV9pdGVydmFsLCBpbml0X3VzcmRhdGEsIG1pbl91c3JkYXRhLCBtYXhfdXNyZGF0YSwgc3RlcCwgdHJlZSk6Ci0gICAgICAgIGlmIChub3QgdGltZV9pdGVydmFsKSBvciAobm90IG1heF91c3JkYXRhKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICB1c3JfcmFuZ2UgPSAobWF4X3VzcmRhdGEgLSBtaW5fdXNyZGF0YSkgKiAxLjAKLSAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IChpbml0X3VzcmRhdGEgKiAxLjApIC8gdXNyX3JhbmdlCi0gICAgICAgIHNlbGYuc3RlcF9hbmdsZSA9IChzdGVwICogMSkgLyB1c3JfcmFuZ2UKLSAgICAgICAgc2VsZi50aW1lb3V0X2lkID0gZ29iamVjdC50aW1lb3V0X2FkZChpbnQodGltZV9pdGVydmFsKSwKLSAgICAgICAgc2VsZi5tYWtlX2ltYWdlX29uX3Byb2dyZXNzaW5nX2NiLCB0cmVlKQotICAgICAgICBzZWxmLnRyZWVfaGVhZGVyc19oZWlnaHQgPSBzZWxmLmdldF90cmVldmlld19oZWFkZXJzX2hlaWdodCh0cmVlKQotICAgICAgICBzZWxmLmZvcmNlX3N0b3BfZW5hYmxlID0gRmFsc2UKLQotICAgIGRlZiBmb3JjZV9zdG9wKHNlbGYpOgotICAgICAgICBzZWxmLmVtaXQoInJ1bi10aW1lci1zdG9wcGVkIikKLSAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IFRydWUKLSAgICAgICAgaWYgc2VsZi50aW1lb3V0X2lkOgotICAgICAgICAgICAgaWYgZ29iamVjdC5zb3VyY2VfcmVtb3ZlKHNlbGYudGltZW91dF9pZCk6Ci0gICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0X2lkID0gTm9uZQotCi0gICAgZGVmIG9uX2RyYXdfcGl4YnVmX2NiKHNlbGYsIHBpeGJ1ZiwgY3IsIHgsIHksIGltZ193aWR0aCwgaW1nX2hlaWdodCwgZG9fcmVmcmVzaD1UcnVlKToKLSAgICAgICAgaWYgcGl4YnVmOgotICAgICAgICAgICAgciA9IG1heChpbWdfd2lkdGgvMiwgaW1nX2hlaWdodC8yKQotICAgICAgICAgICAgY3IudHJhbnNsYXRlKHggKyByLCB5ICsgcikKLSAgICAgICAgICAgIGlmIGRvX3JlZnJlc2g6Ci0gICAgICAgICAgICAgICAgY3Iucm90YXRlKDIgKiBtYXRoLnBpICogc2VsZi5jdXJyZW50X2FuZ2xlX3BvcykKLQotICAgICAgICAgICAgY3Iuc2V0X3NvdXJjZV9waXhidWYocGl4YnVmLCAtaW1nX3dpZHRoLzIsIC1pbWdfaGVpZ2h0LzIpCi0gICAgICAgICAgICBjci5wYWludCgpCi0KLSAgICBkZWYgb25fZHJhd19mYWRlaW5vdXRfY2Ioc2VsZiwgY3IsIGNvbG9yLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb19mYWRlb3V0PVRydWUpOgotICAgICAgICBpZiBkb19mYWRlb3V0OgotICAgICAgICAgICAgYWxwaGEgPSBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zICogMC44Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhbHBoYSA9ICgxLjAgLSBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zKSAqIDAuOAotCi0gICAgICAgIGNyLnNldF9zb3VyY2VfcmdiYShjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlLCBhbHBoYSkKLSAgICAgICAgY3IucmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpCi0gICAgICAgIGNyLmZpbGwoKQotCi0gICAgZGVmIGdldF90cmVldmlld19oZWFkZXJzX2hlaWdodChzZWxmLCB0cmVlKToKLSAgICAgICAgaWYgdHJlZSBhbmQgKHRyZWUuZ2V0X3Byb3BlcnR5KCJoZWFkZXJzLXZpc2libGUiKSA9PSBUcnVlKToKLSAgICAgICAgICAgIGhlaWdodCA9IHRyZWUuZ2V0X2FsbG9jYXRpb24oKS5oZWlnaHQgLSB0cmVlLmdldF9iaW5fd2luZG93KCkuZ2V0X3NpemUoKVsxXQotICAgICAgICAgICAgcmV0dXJuIGhlaWdodAotCi0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgbWFrZV9pbWFnZV9vbl9wcm9ncmVzc2luZ19jYihzZWxmLCB0cmVlKToKLSAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyArPSBzZWxmLnN0ZXBfYW5nbGUKLSAgICAgICAgaWYgc2VsZi5ydW5uaW5nX21vZGUgPT0gc2VsZi5NT0RFX0NZQ0xFX1JVTk5JTkc6Ci0gICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA+PSAxKToKLSAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zID0gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA+IDE6Ci0gICAgICAgICAgICAgICAgc2VsZi5mb3JjZV9zdG9wKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBpZiBzZWxmLmlzX3F1ZXVlX2RyYXdfcm93X2FyZWE6Ci0gICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhczoKLSAgICAgICAgICAgICAgICByZWN0ID0gdHJlZS5nZXRfY2VsbF9hcmVhKHBhdGgsIHRyZWUuZ2V0X2NvbHVtbigwKSkKLSAgICAgICAgICAgICAgICByb3dfeCwgXywgcm93X3dpZHRoLCBfID0gdHJlZS5nZXRfdmlzaWJsZV9yZWN0KCkKLSAgICAgICAgICAgICAgICB0cmVlLnF1ZXVlX2RyYXdfYXJlYShyb3dfeCwgcmVjdC55ICsgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0LCByb3dfd2lkdGgsIHJlY3QuaGVpZ2h0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIHJlY3QgaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXM6Ci0gICAgICAgICAgICAgICAgdHJlZS5xdWV1ZV9kcmF3X2FyZWEocmVjdC54LCByZWN0LnkgKyBzZWxmLnRyZWVfaGVhZGVyc19oZWlnaHQsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KQotCi0gICAgICAgIHJldHVybiAobm90IHNlbGYuZm9yY2Vfc3RvcF9lbmFibGUpCi0KLSAgICBkZWYgYXBwZW5kX3J1bm5pbmdfY2VsbF9hcmVhKHNlbGYsIGNlbGxfYXJlYSk6Ci0gICAgICAgIGlmIGNlbGxfYXJlYSBhbmQgKGNlbGxfYXJlYSBub3QgaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMpOgotICAgICAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMuYXBwZW5kKGNlbGxfYXJlYSkKLQotICAgIGRlZiByZW1vdmVfcnVubmluZ19jZWxsX2FyZWEoc2VsZiwgY2VsbF9hcmVhKToKLSAgICAgICAgaWYgY2VsbF9hcmVhIGluIHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgotICAgICAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMucmVtb3ZlKGNlbGxfYXJlYSkKLSAgICAgICAgaWYgbm90IHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgotICAgICAgICAgICAgc2VsZi5yZXNldF9ydW4oKQotCi1nb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcikKLQotY2xhc3MgSG9iQ2VsbFJlbmRlcmVyUGl4YnVmKGd0ay5DZWxsUmVuZGVyZXJQaXhidWYpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclBpeGJ1Zi5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmNvbnRyb2wgPSBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKCkKLSAgICAgICAgIyBhZGQgaWNvbiBjaGVja2VyIGZvciBtYWtlIHRoZSBndGstaWNvbiB0cmFuc2ZlciB0byBob2ItaWNvbgotICAgICAgICBzZWxmLmNoZWNrZXIgPSBIb2JJY29uQ2hlY2tlcigpCi0gICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJzdG9jay1zaXplIiwgZ3RrLklDT05fU0laRV9ETkQpCi0KLSAgICBkZWYgZ2V0X3BpeGJ1Zl9mcm9tX3N0b2NrX2ljb24oc2VsZiwgd2lkZ2V0LCBzdG9ja19pZD0iIiwgc2l6ZT1ndGsuSUNPTl9TSVpFX0RJQUxPRyk6Ci0gICAgICAgIGlmIHdpZGdldCBhbmQgc3RvY2tfaWQgYW5kIGd0ay5pY29uX2ZhY3RvcnlfbG9va3VwX2RlZmF1bHQoc3RvY2tfaWQpOgotICAgICAgICAgICAgcmV0dXJuIHdpZGdldC5yZW5kZXJfaWNvbihzdG9ja19pZCwgc2l6ZSkKLQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIHNldF9pY29uX25hbWVfdG9faWQoc2VsZiwgbmV3X25hbWUpOgotICAgICAgICBpZiBuZXdfbmFtZSBhbmQgdHlwZShuZXdfbmFtZSkgPT0gc3RyOgotICAgICAgICAgICAgIyBjaGVjayB0aGUgbmFtZSBpcyBuZWVkIHRvIHRyYW5zZmVyIHRvIGhvYiBpY29uIG9yIG5vdAotICAgICAgICAgICAgbmFtZSA9IHNlbGYuY2hlY2tlci5jaGVja19zdG9ja19pY29uKG5ld19uYW1lKQotICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJoaWMiKSBvciBuYW1lLnN0YXJ0c3dpdGgoImd0ayIpOgotICAgICAgICAgICAgICAgIHN0b2NrX2lkID0gbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzdG9ja19pZCA9ICdndGstJyArIG5hbWUKLQotICAgICAgICByZXR1cm4gc3RvY2tfaWQKLQotICAgICcnJyByZW5kZXIgY2VsbCBleGFjdGx5LCAiaWNvbi1uYW1lIiBpcyBwcmlvcml0eQotICAgICAgICBpZiB1c2UgdGhlICdoaWMtdGFzay1yZWZyZXNoJyB3aWxsIG1ha2UgdGhlIHBpeCBhbmltYXRpb24KLSAgICAgICAgaWYgJ3BpeCcgd2lsbCBjaGFuZ2UgdGhlIHBpeGJ1ZiBmb3IgaXQgZnJvbSB0aGUgcGl4YnVmIG9yIGltYWdlLgotICAgICcnJwotICAgIGRlZiBkb19yZW5kZXIoc2VsZiwgd2luZG93LCB0cmVlLCBiYWNrZ3JvdW5kX2FyZWEsY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpOgotICAgICAgICBpZiAobm90IHNlbGYuY29udHJvbCkgb3IgKG5vdCB0cmVlKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHgsIHksIHcsIGggPSBzZWxmLm9uX2dldF9zaXplKHRyZWUsIGNlbGxfYXJlYSkKLSAgICAgICAgeCArPSBjZWxsX2FyZWEueAotICAgICAgICB5ICs9IGNlbGxfYXJlYS55Ci0gICAgICAgIHcgLT0gMiAqIHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikKLSAgICAgICAgaCAtPSAyICogc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKQotCi0gICAgICAgIHN0b2NrX2lkID0gIiIKLSAgICAgICAgaWYgc2VsZi5wcm9wcy5pY29uX25hbWU6Ci0gICAgICAgICAgICBzdG9ja19pZCA9IHNlbGYuc2V0X2ljb25fbmFtZV90b19pZChzZWxmLnByb3BzLmljb25fbmFtZSkKLSAgICAgICAgZWxpZiBzZWxmLnByb3BzLnN0b2NrX2lkOgotICAgICAgICAgICAgc3RvY2tfaWQgPSBzZWxmLnByb3BzLnN0b2NrX2lkCi0gICAgICAgIGVsaWYgc2VsZi5wcm9wcy5waXhidWY6Ci0gICAgICAgICAgICBwaXggPSBzZWxmLnByb3BzLnBpeGJ1ZgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgc3RvY2tfaWQ6Ci0gICAgICAgICAgICBwaXggPSBzZWxmLmdldF9waXhidWZfZnJvbV9zdG9ja19pY29uKHRyZWUsIHN0b2NrX2lkLCBzZWxmLnByb3BzLnN0b2NrX3NpemUpCi0gICAgICAgIGlmIHN0b2NrX2lkID09ICdoaWMtdGFzay1yZWZyZXNoJzoKLSAgICAgICAgICAgIHNlbGYuY29udHJvbC5hcHBlbmRfcnVubmluZ19jZWxsX2FyZWEoY2VsbF9hcmVhKQotICAgICAgICAgICAgaWYgc2VsZi5jb250cm9sLmlzX2FjdGl2ZSgpOgotICAgICAgICAgICAgICAgIHNlbGYuY29udHJvbC5vbl9kcmF3X3BpeGJ1Zl9jYihwaXgsIHdpbmRvdy5jYWlyb19jcmVhdGUoKSwgeCwgeSwgdywgaCwgVHJ1ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250cm9sLnN0YXJ0X3J1bigyMDAsIDAsIDAsIDEwMDAsIDE1MCwgdHJlZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY29udHJvbC5yZW1vdmVfcnVubmluZ19jZWxsX2FyZWEoY2VsbF9hcmVhKQotICAgICAgICAgICAgc2VsZi5jb250cm9sLm9uX2RyYXdfcGl4YnVmX2NiKHBpeCwgd2luZG93LmNhaXJvX2NyZWF0ZSgpLCB4LCB5LCB3LCBoLCBGYWxzZSkKLQotICAgIGRlZiBvbl9nZXRfc2l6ZShzZWxmLCB3aWRnZXQsIGNlbGxfYXJlYSk6Ci0gICAgICAgIGlmIHNlbGYucHJvcHMuaWNvbl9uYW1lIG9yIHNlbGYucHJvcHMucGl4YnVmIG9yIHNlbGYucHJvcHMuc3RvY2tfaWQ6Ci0gICAgICAgICAgICB3LCBoID0gZ3RrLmljb25fc2l6ZV9sb29rdXAoc2VsZi5wcm9wcy5zdG9ja19zaXplKQotICAgICAgICAgICAgY2FsY193aWR0aCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikgKiAyICsgdwotICAgICAgICAgICAgY2FsY19oZWlnaHQgPSBzZWxmLmdldF9wcm9wZXJ0eSgieXBhZCIpICogMiArIGgKLSAgICAgICAgICAgIHhfb2Zmc2V0ID0gMAotICAgICAgICAgICAgeV9vZmZzZXQgPSAwCi0gICAgICAgICAgICBpZiBjZWxsX2FyZWEgYW5kIHcgPiAwIGFuZCBoID4gMDoKLSAgICAgICAgICAgICAgICB4X29mZnNldCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ4YWxpZ24iKSAqIChjZWxsX2FyZWEud2lkdGggLSBjYWxjX3dpZHRoIC0gc2VsZi5nZXRfcHJvcGVydHkoInhwYWQiKSkKLSAgICAgICAgICAgICAgICB5X29mZnNldCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ5YWxpZ24iKSAqIChjZWxsX2FyZWEuaGVpZ2h0IC0gY2FsY19oZWlnaHQgLSBzZWxmLmdldF9wcm9wZXJ0eSgieXBhZCIpKQotCi0gICAgICAgICAgICByZXR1cm4geF9vZmZzZXQsIHlfb2Zmc2V0LCB3LCBoCi0KLSAgICAgICAgcmV0dXJuIDAsIDAsIDAsIDAKLQotZ29iamVjdC50eXBlX3JlZ2lzdGVyKEhvYkNlbGxSZW5kZXJlclBpeGJ1ZikKLQotY2xhc3MgSG9iQ2VsbFJlbmRlcmVyVG9nZ2xlKGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZS5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmN0cmwgPSBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKGlzX2RyYXdfcm93PVRydWUpCi0gICAgICAgIHNlbGYuY3RybC5ydW5uaW5nX21vZGUgPSBzZWxmLmN0cmwuTU9ERV9PTkVfU0hPUlQKLSAgICAgICAgc2VsZi5jZWxsX2F0dHIgPSB7ImZhZGVvdXQiOiBGYWxzZSwgIm51bWJlcl9vZl9jaGlsZHJlbiI6IDB9Ci0KLSAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKLSAgICAgICAgaWYgKG5vdCBzZWxmLmN0cmwpIG9yIChub3Qgd2lkZ2V0KToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIGZsYWdzICYgZ3RrLkNFTExfUkVOREVSRVJfU0VMRUNURUQ6Ci0gICAgICAgICAgICBzdGF0ZSA9IGd0ay5TVEFURV9TRUxFQ1RFRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3RhdGUgPSBndGsuU1RBVEVfTk9STUFMCi0KLSAgICAgICAgaWYgc2VsZi5jdHJsLmlzX2FjdGl2ZSgpOgotICAgICAgICAgICAgcGF0aCA9IHdpZGdldC5nZXRfcGF0aF9hdF9wb3MoY2VsbF9hcmVhLnggKyBjZWxsX2FyZWEud2lkdGgvMiwgY2VsbF9hcmVhLnkgKyBjZWxsX2FyZWEuaGVpZ2h0LzIpCi0gICAgICAgICAgICAjIHNvbWV0aW1lcyB0aGUgcGFyYW1ldGVycyBvZiBjZWxsX2FyZWEgd2lsbCBiZSBhIG5lZ2F0aXZlIG51bWJlcixzdWNoIGFzIHB1bGwgdXAgZG93biB0aGUgc2Nyb2xsIGJhcgotICAgICAgICAgICAgIyBpdCdzIG92ZXIgdGhlIHRyZWUgY29udGFpbmVyIHJhbmdlLCBzbyB0aGUgcGF0aCB3aWxsIGJlIGJhZAotICAgICAgICAgICAgaWYgbm90IHBhdGg6IHJldHVybgotICAgICAgICAgICAgcGF0aCA9IHBhdGhbMF0KLSAgICAgICAgICAgIGlmIHBhdGggaW4gc2VsZi5jdHJsLnJ1bm5pbmdfY2VsbF9hcmVhczoKLSAgICAgICAgICAgICAgICBjciA9IHdpbmRvdy5jYWlyb19jcmVhdGUoKQotICAgICAgICAgICAgICAgIGNvbG9yID0gd2lkZ2V0LmdldF9zdHlsZSgpLmJhc2Vbc3RhdGVdCi0KLSAgICAgICAgICAgICAgICByb3dfeCwgXywgcm93X3dpZHRoLCBfID0gd2lkZ2V0LmdldF92aXNpYmxlX3JlY3QoKQotICAgICAgICAgICAgICAgIGJvcmRlcl95ID0gc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKQotICAgICAgICAgICAgICAgIHNlbGYuY3RybC5vbl9kcmF3X2ZhZGVpbm91dF9jYihjciwgY29sb3IsIHJvd194LCBjZWxsX2FyZWEueSAtIGJvcmRlcl95LCByb3dfd2lkdGgsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbF9hcmVhLmhlaWdodCArIGJvcmRlcl95ICogMiwgc2VsZi5jZWxsX2F0dHJbImZhZGVvdXQiXSkKLSAgICAgICAgIyBkcmF3IG51bWJlciBvZiBhIGdyb3VwCi0gICAgICAgIGlmIHNlbGYuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXToKLSAgICAgICAgICAgIHRleHQgPSAiJWQgcGtnIiAlIHNlbGYuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXQotICAgICAgICAgICAgcGFuZ29sYXlvdXQgPSB3aWRnZXQuY3JlYXRlX3BhbmdvX2xheW91dCh0ZXh0KQotICAgICAgICAgICAgdGV4dHcsIHRleHRoID0gcGFuZ29sYXlvdXQuZ2V0X3BpeGVsX3NpemUoKQotICAgICAgICAgICAgeCA9IGNlbGxfYXJlYS54ICsgKGNlbGxfYXJlYS53aWR0aC8yKSAtICh0ZXh0dy8yKQotICAgICAgICAgICAgeSA9IGNlbGxfYXJlYS55ICsgKGNlbGxfYXJlYS5oZWlnaHQvMikgLSAodGV4dGgvMikKLQotICAgICAgICAgICAgd2lkZ2V0LnN0eWxlLnBhaW50X2xheW91dCh3aW5kb3csIHN0YXRlLCBUcnVlLCBjZWxsX2FyZWEsIHdpZGdldCwgImNoZWNrYm94IiwgeCwgeSwgcGFuZ29sYXlvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZS5kb19yZW5kZXIoc2VsZiwgd2luZG93LCB3aWRnZXQsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpCi0KLSAgICAnJydkZWxheTogbm9ybWFsbHkgZGVsYXkgdGltZSBpcyAxMDAwbXMKLSAgICAgICBjZWxsX2xpc3Q6IHdoaWxjaCBjZWxscyBuZWVkIHRvIGJlIHJlbmRlcgotICAgICcnJwotICAgIGRlZiBmYWRlb3V0KHNlbGYsIHRyZWUsIGRlbGF5LCBjZWxsX2xpc3Q9Tm9uZSk6Ci0gICAgICAgIGlmIChkZWxheSA8IDIwMCkgb3IgKG5vdCB0cmVlKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmNlbGxfYXR0clsiZmFkZW91dCJdID0gVHJ1ZQotICAgICAgICBzZWxmLmN0cmwucnVubmluZ19jZWxsX2FyZWFzID0gY2VsbF9saXN0Ci0gICAgICAgIHNlbGYuY3RybC5zdGFydF9ydW4oMjAwLCAwLCAwLCBkZWxheSwgKGRlbGF5ICogMjAwIC8gMTAwMCksIHRyZWUpCi0KLSAgICBkZWYgY29ubmVjdF9yZW5kZXJfc3RhdGVfY2hhbmdlZChzZWxmLCBmdW5jLCB1c3JkYXRhPU5vbmUpOgotICAgICAgICBpZiBub3QgZnVuYzoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiB1c3JkYXRhOgotICAgICAgICAgICAgc2VsZi5jdHJsLmNvbm5lY3QoInJ1bi10aW1lci1zdG9wcGVkIiwgZnVuYywgc2VsZiwgdXNyZGF0YSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY3RybC5jb25uZWN0KCJydW4tdGltZXItc3RvcHBlZCIsIGZ1bmMsIHNlbGYpCi0KLWdvYmplY3QudHlwZV9yZWdpc3RlcihIb2JDZWxsUmVuZGVyZXJUb2dnbGUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wZXJzaXN0ZW50dG9vbHRpcC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI3YzE5NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLSMKLSMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCi0jCi0jIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLWltcG9ydCBnb2JqZWN0Ci1pbXBvcnQgZ3RrCi10cnk6Ci0gICAgaW1wb3J0IGdjb25mCi1leGNlcHQ6Ci0gICAgcGFzcwotCi1jbGFzcyBQZXJzaXN0ZW50VG9vbHRpcChndGsuV2luZG93KToKLSAgICAiIiIKLSAgICBBIHRvb2x0aXAgd2hpY2ggcGVyc2lzdHMgb25jZSBzaG93biB1bnRpbCB0aGUgdXNlciBkaXNtaXNzZXMgaXQgd2l0aCB0aGUgRXNjCi0gICAga2V5IG9yIGJ5IGNsaWNraW5nIHRoZSBjbG9zZSBidXR0b24uCi0KLSAgICAjIEZJWE1FOiB0aGUgUGVyc2lzdGVudFRvb2x0aXAgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9mZgotICAgICMgaXQuIFdlIGNhbid0IGRvIHRoaXMgd2l0aCBmb2N1cy1vdXQtZXZlbnQgYmVjdWFzZSBtb2RhbCBlbnN1cmVzIHdlIGhhdmUgZm9jdXM/Ci0KLSAgICBtYXJrdXA6IHNvbWUgUGFuZ28gdGV4dCBtYXJrdXAgdG8gZGlzcGxheSBpbiB0aGUgdG9vbHRpcAotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIHBhcmVudF93aW49Tm9uZSk6Ci0gICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18oc2VsZiwgZ3RrLldJTkRPV19QT1BVUCkKLQotICAgICAgICAjIEluaGVyaXQgdGhlIHN5c3RlbSB0aGVtZSBmb3IgYSB0b29sdGlwCi0gICAgICAgIHN0eWxlID0gZ3RrLnJjX2dldF9zdHlsZV9ieV9wYXRocyhndGsuc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdndGstdG9vbHRpcCcsICdndGstdG9vbHRpcCcsIGdvYmplY3QuVFlQRV9OT05FKQotICAgICAgICBzZWxmLnNldF9zdHlsZShzdHlsZSkKLQotICAgICAgICAjIFRoZSBwbGFjZW1lbnQgb2YgdGhlIGNsb3NlIGJ1dHRvbiBvbiB0aGUgdGlwIHNob3VsZCByZWZsZWN0IGhvdyB0aGUKLSAgICAgICAgIyB3aW5kb3cgbWFuYWdlciBvZiB0aGUgdXNlcnMgc3lzdGVtIHBsYWNlcyBjbG9zZSBidXR0b25zLiBUcnkgdG8gcmVhZAotICAgICAgICAjIHRoZSBtZXRhY2l0eSBnY29uZiBrZXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNsb3NlIGJ1dHRvbiBpcyBvbiB0aGUKLSAgICAgICAgIyBsZWZ0IG9yIHRoZSByaWdodC4KLSAgICAgICAgIyBJbiB0aGUgY2FzZSB0aGF0IHdlIGNhbid0IGRldGVybWluZSB0aGUgdXNlcnMgY29uZmlndXJhdGlvbiB3ZSBkZWZhdWx0Ci0gICAgICAgICMgdG8gY2xvc2UgYnV0dG9ucyBiZWluZyBvbiB0aGUgcmlnaHQuCi0gICAgICAgIF9fYnV0dG9uX3JpZ2h0ID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbGllbnQgPSBnY29uZi5jbGllbnRfZ2V0X2RlZmF1bHQoKQotICAgICAgICAgICAgb3JkZXIgPSBjbGllbnQuZ2V0X3N0cmluZygiL2FwcHMvbWV0YWNpdHkvZ2VuZXJhbC9idXR0b25fbGF5b3V0IikKLSAgICAgICAgICAgIGlmIG9yZGVyIGFuZCBvcmRlci5lbmRzd2l0aCgiOiIpOgotICAgICAgICAgICAgICAgIF9fYnV0dG9uX3JpZ2h0ID0gRmFsc2UKLSAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAjIFdlIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIG9ubHkgc2hvd24gb25jZQotICAgICAgICBzZWxmLnNob3duID0gRmFsc2UKLQotICAgICAgICAjIFdlIGRvbid0IHdhbnQgYW55IFdNIGRlY29yYXRpb25zCi0gICAgICAgIHNlbGYuc2V0X2RlY29yYXRlZChGYWxzZSkKLSAgICAgICAgIyBXZSBkb24ndCB3YW50IHRvIHNob3cgaW4gdGhlIHRhc2tiYXIgb3Igd2luZG93IHN3aXRjaGVyCi0gICAgICAgIHNlbGYuc2V0X3NraXBfcGFnZXJfaGludChUcnVlKQotICAgICAgICBzZWxmLnNldF9za2lwX3Rhc2tiYXJfaGludChUcnVlKQotICAgICAgICAjIFdlIG11c3QgYmUgbW9kYWwgdG8gZW5zdXJlIHdlIGdyYWIgZm9jdXMgd2hlbiBwcmVzZW50ZWQgZnJvbSBhIGd0ay5EaWFsb2cKLSAgICAgICAgc2VsZi5zZXRfbW9kYWwoVHJ1ZSkKLQotICAgICAgICBzZWxmLnNldF9ib3JkZXJfd2lkdGgoMCkKLSAgICAgICAgc2VsZi5zZXRfcG9zaXRpb24oZ3RrLldJTl9QT1NfTU9VU0UpCi0gICAgICAgIHNlbGYuc2V0X29wYWNpdHkoMC45NSkKLQotICAgICAgICAjIEVuc3VyZSBhIHJlYXNvbmFibGUgbWluaW11bSBzaXplCi0gICAgICAgIHNlbGYuc2V0X2dlb21ldHJ5X2hpbnRzKHNlbGYsIDEwMCwgNTApCi0KLSAgICAgICAgIyBTZXQgdGhpcyB3aW5kb3cgYXMgYSB0cmFuc2llbnQgd2luZG93IGZvciBwYXJlbnQobWFpbiB3aW5kb3cpCi0gICAgICAgIGlmIHBhcmVudF93aW46Ci0gICAgICAgICAgICBzZWxmLnNldF90cmFuc2llbnRfZm9yKHBhcmVudF93aW4pCi0gICAgICAgICAgICBzZWxmLnNldF9kZXN0cm95X3dpdGhfcGFyZW50KFRydWUpCi0gICAgICAgICMgRHJhdyBvdXIgbGFiZWwgYW5kIGNsb3NlIGJ1dHRvbnMKLSAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAwKQotICAgICAgICBoYm94LnNob3coKQotICAgICAgICBzZWxmLmFkZChoYm94KQotCi0gICAgICAgIGltZyA9IGd0ay5JbWFnZSgpCi0gICAgICAgIGltZy5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfQ0xPU0UsIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQotCi0gICAgICAgIHNlbGYuYnV0dG9uID0gZ3RrLkJ1dHRvbigpCi0gICAgICAgIHNlbGYuYnV0dG9uLnNldF9pbWFnZShpbWcpCi0gICAgICAgIHNlbGYuYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLl9kaXNtaXNzX2NiKQotICAgICAgICBzZWxmLmJ1dHRvbi5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQotICAgICAgICBzZWxmLmJ1dHRvbi5ncmFiX2ZvY3VzKCkKLSAgICAgICAgc2VsZi5idXR0b24uc2hvdygpCi0gICAgICAgIHZib3ggPSBndGsuVkJveChGYWxzZSwgMCkKLSAgICAgICAgdmJveC5zaG93KCkKLSAgICAgICAgdmJveC5wYWNrX3N0YXJ0KHNlbGYuYnV0dG9uLCBGYWxzZSwgRmFsc2UsIDApCi0gICAgICAgIGlmIF9fYnV0dG9uX3JpZ2h0OgotICAgICAgICAgICAgaGJveC5wYWNrX2VuZCh2Ym94LCBUcnVlLCBUcnVlLCAwKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHZib3gsIFRydWUsIFRydWUsIDApCi0KLSAgICAgICAgc2VsZi5zZXRfZGVmYXVsdChzZWxmLmJ1dHRvbikKLQotICAgICAgICBiaW4gPSBndGsuSEJveChUcnVlLCA2KQotICAgICAgICBiaW4uc2V0X2JvcmRlcl93aWR0aCg2KQotICAgICAgICBiaW4uc2hvdygpCi0gICAgICAgIHNlbGYubGFiZWwgPSBndGsuTGFiZWwoKQotICAgICAgICBzZWxmLmxhYmVsLnNldF9saW5lX3dyYXAoVHJ1ZSkKLSAgICAgICAgIyBXZSB3YW50IHRvIG1hdGNoIHRoZSBjb2xvdXJzIG9mIHRoZSBub3JtYWwgdG9vbHRpcHMsIGFzIGRpY3RhdGVkIGJ5Ci0gICAgICAgICMgdGhlIHVzZXJzIGd0aystMi4wIHRoZW1lLCB3aGVyZXZlciBwb3NzaWJsZSAtIG9uIHNvbWUgc3lzdGVtcyB0aGlzCi0gICAgICAgICMgcmVxdWlyZXMgZXhwbGljaXRseSBzZXR0aW5nIGEgZmdfY29sb3IgZm9yIHRoZSBsYWJlbCB3aGljaCBtYXRjaGVzIHRoZQotICAgICAgICAjIHRvb2x0aXBfZmdfY29sb3IKLSAgICAgICAgc2V0dGluZ3MgPSBndGsuc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKQotICAgICAgICBjb2xvdXJzID0gc2V0dGluZ3MuZ2V0X3Byb3BlcnR5KCdndGstY29sb3Itc2NoZW1lJykuc3BsaXQoJ1xuJykKLSAgICAgICAgIyByZW1vdmUgYW55IGVtcHR5IGxpbmVzLCB0aGVyZSdzIGxpa2VseSB0byBiZSBhIHRyYWlsaW5nIG9uZSBhZnRlcgotICAgICAgICAjIGNhbGxpbmcgc3BsaXQgb24gYSBkaWN0aW9uYXJ5LWxpa2Ugc3RyaW5nCi0gICAgICAgIGNvbG91cnMgPSBmaWx0ZXIoTm9uZSwgY29sb3VycykKLSAgICAgICAgZm9yIGNvbCBpbiBjb2xvdXJzOgotICAgICAgICAgICAgaXRlbSwgdmFsID0gY29sLnNwbGl0KCc6ICcpCi0gICAgICAgICAgICBpZiBpdGVtID09ICd0b29sdGlwX2ZnX2NvbG9yJzoKLSAgICAgICAgICAgICAgICBzdHlsZSA9IHNlbGYubGFiZWwuZ2V0X3N0eWxlKCkKLSAgICAgICAgICAgICAgICBzdHlsZS5mZ1tndGsuU1RBVEVfTk9STUFMXSA9IGd0ay5nZGsuY29sb3JfcGFyc2UodmFsKQotICAgICAgICAgICAgICAgIHNlbGYubGFiZWwuc2V0X3N0eWxlKHN0eWxlKQotICAgICAgICAgICAgICAgIGJyZWFrICMgd2Ugb25seSBjYXJlIGZvciB0aGUgdG9vbHRpcF9mZ19jb2xvcgotCi0gICAgICAgIHNlbGYubGFiZWwuc2V0X21hcmt1cChtYXJrdXApCi0gICAgICAgIHNlbGYubGFiZWwuc2hvdygpCi0gICAgICAgIGJpbi5hZGQoc2VsZi5sYWJlbCkKLSAgICAgICAgaGJveC5wYWNrX2VuZChiaW4sIFRydWUsIFRydWUsIDYpCi0KLSAgICAgICAgIyBhZGQgdGhlIG9yaWdpbmFsIFVSTCBkaXNwbGF5IGZvciB1c2VyIHJlZmVyZW5jZQotICAgICAgICBpZiAnYSBocmVmJyBpbiBtYXJrdXA6Ci0gICAgICAgICAgICBoYm94LnNldF90b29sdGlwX3RleHQoc2VsZi5nZXRfbWFya3VwX3VybChtYXJrdXApKQotICAgICAgICBoYm94LnNob3coKQotCi0gICAgICAgIHNlbGYuY29ubmVjdCgia2V5LXByZXNzLWV2ZW50Iiwgc2VsZi5fY2F0Y2hfZXNjX2NiKQotCi0gICAgIiIiCi0gICAgQ2FsbGJhY2sgd2hlbiB0aGUgUGVyc2lzdGVudFRvb2x0aXAncyBjbG9zZSBidXR0b24gaXMgY2xpY2tlZC4KLSAgICBIaWRlcyB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCi0gICAgIiIiCi0gICAgZGVmIF9kaXNtaXNzX2NiKHNlbGYsIGJ1dHRvbik6Ci0gICAgICAgIHNlbGYuaGlkZSgpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAiIiIKLSAgICBDYWxsYmFjayB3aGVuIHRoZSBFc2Mga2V5IGlzIGRldGVjdGVkLiBIaWRlcyB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCi0gICAgIiIiCi0gICAgZGVmIF9jYXRjaF9lc2NfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6Ci0gICAgICAgIGtleW5hbWUgPSBndGsuZ2RrLmtleXZhbF9uYW1lKGV2ZW50LmtleXZhbCkKLSAgICAgICAgaWYga2V5bmFtZSA9PSAiRXNjYXBlIjoKLSAgICAgICAgICAgIHNlbGYuaGlkZSgpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAiIiIKLSAgICBDYWxsZWQgdG8gcHJlc2VudCB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCi0gICAgT3ZlcnJpZGVzIHRoZSBzdXBlcmNsYXNzZXMgc2hvdygpIG1ldGhvZCB0byBpbmNsdWRlIHN0YXRlIHRyYWNraW5nLgotICAgICIiIgotICAgIGRlZiBzaG93KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5zaG93bjoKLSAgICAgICAgICAgIHNlbGYuc2hvd24gPSBUcnVlCi0gICAgICAgICAgICBndGsuV2luZG93LnNob3coc2VsZikKLQotICAgICIiIgotICAgIENhbGxlZCB0byBoaWRlIHRoZSBQZXJzaXN0ZW50VG9vbHRpcC4KLSAgICBPdmVycmlkZXMgdGhlIHN1cGVyY2xhc3NlcyBoaWRlKCkgbWV0aG9kIHRvIGluY2x1ZGUgc3RhdGUgdHJhY2tpbmcuCi0gICAgIiIiCi0gICAgZGVmIGhpZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuc2hvd24gPSBGYWxzZQotICAgICAgICBndGsuV2luZG93LmhpZGUoc2VsZikKLQotICAgICIiIgotICAgIENhbGxlZCB0byBnZXQgdGhlIGh5cGVybGluayBVUkwgZnJvbSBtYXJrdXAgdGV4dC4KLSAgICAiIiIKLSAgICBkZWYgZ2V0X21hcmt1cF91cmwoc2VsZiwgbWFya3VwKToKLSAgICAgICAgdXJsID0gImh0dHA6IgotICAgICAgICBpZiBtYXJrdXAgYW5kIHR5cGUobWFya3VwKSA9PSBzdHI6Ci0gICAgICAgICAgICBzID0gbWFya3VwCi0gICAgICAgICAgICBpZiAnaHR0cDonIGluIHM6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IHJlCi0gICAgICAgICAgICAgICAgdXJsID0gcmUuc2VhcmNoKCcoaHR0cDpbXixcXCAiXSspJywgcykuZ3JvdXAoMCkKLQotICAgICAgICByZXR1cm4gdXJsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQyOGExMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotaW1wb3J0IGd0awotCi1jbGFzcyBQcm9ncmVzc0JhcihndGsuRGlhbG9nKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKLQotICAgICAgICBndGsuRGlhbG9nLl9faW5pdF9fKHNlbGYsIGZsYWdzPShndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKSkKLSAgICAgICAgc2VsZi5zZXRfdGl0bGUoIlBhcnNpbmcgbWV0YWRhdGEsIHBsZWFzZSB3YWl0Li4uIikKLSAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKDUwMCwgMCkKLSAgICAgICAgc2VsZi5zZXRfdHJhbnNpZW50X2ZvcihwYXJlbnQpCi0gICAgICAgIHNlbGYucHJvZ3Jlc3MgPSBndGsuUHJvZ3Jlc3NCYXIoKQotICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzKQotICAgICAgICBzZWxmLnNob3dfYWxsKCkKLQotICAgIGRlZiBzZXRfdGV4dChzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KG1zZykKLQotICAgIGRlZiB1cGRhdGUoc2VsZiwgeCwgeSk6Ci0gICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X2ZyYWN0aW9uKGZsb2F0KHgpL2Zsb2F0KHkpKQotICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KCIlMmQgJSUiICUgKHgqMTAwL3kpKQotCi0gICAgZGVmIHB1bHNlKHNlbGYpOgotICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KCJMb2FkaW5nLi4uIikKLSAgICAgICAgc2VsZi5wcm9ncmVzcy5wdWxzZSgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzYmFyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzc2Jhci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UyYzY2MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzYmFyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDExICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLWltcG9ydCBndGsKLWZyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKLQotY2xhc3MgSG9iUHJvZ3Jlc3NCYXIgKGd0ay5Qcm9ncmVzc0Jhcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBndGsuUHJvZ3Jlc3NCYXIuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5zZXRfcmNzdHlsZShUcnVlKQotICAgICAgICBzZWxmLnBlcmNlbnRhZ2UgPSAwCi0KLSAgICBkZWYgc2V0X3Jjc3R5bGUoc2VsZiwgc3RhdHVzKToKLSAgICAgICAgcmNzdHlsZSA9IGd0ay5SY1N0eWxlKCkKLSAgICAgICAgcmNzdHlsZS5mZ1syXSA9IGd0ay5nZGsuQ29sb3IoSG9iQ29sb3JzLkJMQUNLKQotICAgICAgICBpZiBzdGF0dXMgPT0gInN0b3AiOgotICAgICAgICAgICAgcmNzdHlsZS5iZ1szXSA9IGd0ay5nZGsuQ29sb3IoSG9iQ29sb3JzLldBUk5JTkcpCi0gICAgICAgIGVsaWYgc3RhdHVzID09ICJmYWlsIjoKLSAgICAgICAgICAgIHJjc3R5bGUuYmdbM10gPSBndGsuZ2RrLkNvbG9yKEhvYkNvbG9ycy5FUlJPUikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJjc3R5bGUuYmdbM10gPSBndGsuZ2RrLkNvbG9yKEhvYkNvbG9ycy5SVU5OSU5HKQotICAgICAgICBzZWxmLm1vZGlmeV9zdHlsZShyY3N0eWxlKQotCi0gICAgZGVmIHNldF90aXRsZShzZWxmLCB0ZXh0PU5vbmUpOgotICAgICAgICBpZiBub3QgdGV4dDoKLSAgICAgICAgICAgIHRleHQgPSAiIgotICAgICAgICB0ZXh0ICs9ICIgJS4wZiUlIiAlIHNlbGYucGVyY2VudGFnZQotICAgICAgICBzZWxmLnNldF90ZXh0KHRleHQpCi0KLSAgICBkZWYgc2V0X3N0b3BfdGl0bGUoc2VsZiwgdGV4dD1Ob25lKToKLQlpZiBub3QgdGV4dDoKLQkgICAgdGV4dCA9ICIiCi0Jc2VsZi5zZXRfdGV4dCh0ZXh0KQotCi0gICAgZGVmIHJlc2V0KHNlbGYpOgotICAgICAgICBzZWxmLnNldF9mcmFjdGlvbigwKQotICAgICAgICBzZWxmLnNldF90ZXh0KCIiKQotICAgICAgICBzZWxmLnNldF9yY3N0eWxlKFRydWUpCi0gICAgICAgIHNlbGYucGVyY2VudGFnZSA9IDAKLQotICAgIGRlZiB1cGRhdGUoc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICBzZWxmLnBlcmNlbnRhZ2UgPSBpbnQoZnJhY3Rpb24gKiAxMDApCi0gICAgICAgIHNlbGYuc2V0X2ZyYWN0aW9uKGZyYWN0aW9uKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wdWNjaG8uZ2xhZGUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3B1Y2Noby5nbGFkZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc1NTNhNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3B1Y2Noby5nbGFkZQorKysgL2Rldi9udWxsCkBAIC0xLDYwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KLTwhRE9DVFlQRSBnbGFkZS1pbnRlcmZhY2UgU1lTVEVNICJnbGFkZS0yLjAuZHRkIj4KLTwhLS1HZW5lcmF0ZWQgd2l0aCBnbGFkZTMgMy40LjUgb24gTW9uIE5vdiAxMCAxMjoyNDoxMiAyMDA4IC0tPgotPGdsYWRlLWludGVyZmFjZT4KLSAgPHdpZGdldCBjbGFzcz0iR3RrRGlhbG9nIiBpZD0iYnVpbGRfZGlhbG9nIj4KLSAgICA8cHJvcGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5TdGFydCBhIGJ1aWxkPC9wcm9wZXJ0eT4KLSAgICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19DRU5URVJfT05fUEFSRU5UPC9wcm9wZXJ0eT4KLSAgICA8cHJvcGVydHkgbmFtZT0idHlwZV9oaW50Ij5HREtfV0lORE9XX1RZUEVfSElOVF9ESUFMT0c8L3Byb3BlcnR5PgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNfc2VwYXJhdG9yIj5GYWxzZTwvcHJvcGVydHk+Ci0gICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJ2Ym94Ij4KLSAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJkaWFsb2ctdmJveDEiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4yPC9wcm9wZXJ0eT4KLSAgICAgICAgPGNoaWxkPgotICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RhYmxlIiBpZD0iYnVpbGRfdGFibGUiPgotICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvcmRlcl93aWR0aCI+NjwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9yb3dzIj43PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuX2NvbHVtbnMiPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbHVtbl9zcGFjaW5nIj41PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb3dfc3BhY2luZyI+NjwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9InN0YXR1c19hbGlnbm1lbnQiPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9wYWRkaW5nIj4xMjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJveCIgaWQ9InN0YXR1c19oYm94Ij4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjY8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJzdGF0dXNfaW1hZ2UiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5vX3Nob3dfYWxsIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstZGlhbG9nLWVycm9yPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5GYWxzZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJzdGF0dXNfbGFiZWwiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5JZiB5b3Ugc2VlIHRoaXMgdGV4dCBzb21ldGhpbmcgaXMgd3JvbmcuLi48L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4zPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDIiPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtCdWlsZCBjb25maWd1cmF0aW9uJmx0Oy9iJmd0OzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj40PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9ImltYWdlX2NvbWJvIj4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjc8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvcGFja2luZz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0iaW1hZ2VfbGFiZWwiPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5JbWFnZTo8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9ImRpc3RyaWJ1dGlvbl9jb21ibyI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImRpc3RyaWJ1dGlvbl9sYWJlbCI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MTI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkRpc3RyaWJ1dGlvbjo8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9Im1hY2hpbmVfY29tYm8iPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj40PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJtYWNoaW5lX2xhYmVsIj4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TWFjaGluZTo8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJyZWZyZXNoX2J1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVjZWl2ZXNfZGVmYXVsdCI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLXJlZnJlc2g8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vfc3RvY2siPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrRW50cnkiIGlkPSJsb2NhdGlvbl9lbnRyeSI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aWR0aF9jaGFycyI+MzI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvcGFja2luZz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWwzIj4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2NhdGlvbjo8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImxhYmVsMSI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPiZsdDtiJmd0O1JlcG9zaXRvcnkmbHQ7L2ImZ3Q7PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX21hcmt1cCI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQxIj4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KLSAgICAgICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvcGFja2luZz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDIiPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgotICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50MyI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+Ci0gICAgICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KLSAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iYWN0aW9uX2FyZWEiPgotICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0hCdXR0b25Cb3giIGlkPSJkaWFsb2ctYWN0aW9uX2FyZWExIj4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYXlvdXRfc3R5bGUiPkdUS19CVVRUT05CT1hfRU5EPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwYWNrX3R5cGUiPkdUS19QQUNLX0VORDwvcHJvcGVydHk+Ci0gICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICA8L2NoaWxkPgotICAgICAgPC93aWRnZXQ+Ci0gICAgPC9jaGlsZD4KLSAgPC93aWRnZXQ+Ci0gIDx3aWRnZXQgY2xhc3M9Ikd0a0RpYWxvZyIgaWQ9ImRpYWxvZzIiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX0NFTlRFUl9PTl9QQVJFTlQ8L3Byb3BlcnR5PgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQiPkdES19XSU5ET1dfVFlQRV9ISU5UX0RJQUxPRzwvcHJvcGVydHk+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc19zZXBhcmF0b3IiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9InZib3giPgotICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVkJveCIgaWQ9ImRpYWxvZy12Ym94MiI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjI8L3Byb3BlcnR5PgotICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVGFibGUiIGlkPSJ0YWJsZTIiPgotICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvcmRlcl93aWR0aCI+NjwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9yb3dzIj43PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuX2NvbHVtbnMiPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbHVtbl9zcGFjaW5nIj42PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb3dfc3BhY2luZyI+NjwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWw3Ij4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2ImZ3Q7UmVwb3NpdG9yaWVzJmx0Oy9iJmd0OzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NCI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X3BhZGRpbmciPjEyPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93MSI+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlYWRlcnNfY2xpY2thYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvcGFja2luZz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0VudHJ5IiBpZD0iZW50cnkxIj4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDkiPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtBZGRpdGlvbmFsIHBhY2thZ2VzJmx0Oy9iJmd0OzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ2Ij4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhzY2FsZSI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDgiPgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TG9jYXRpb246IDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ3Ij4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhzY2FsZSI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJ1dHRvbkJveCIgaWQ9ImhidXR0b25ib3gxIj4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3BhY2luZyI+NTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b243Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLXJlbW92ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b242Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWVkaXQ8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b241Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWFkZDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgIDwvcGFja2luZz4KLSAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NSI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+Ci0gICAgICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDEwIj4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TZWFyY2g6PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrRW50cnkiIGlkPSJlbnRyeTIiPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ4Ij4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfcGFkZGluZyI+MTI8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cyIj4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzIiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZGVyc19jbGlja2FibGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgotICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj42PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NzwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+Ci0gICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICA8L2NoaWxkPgotICAgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImFjdGlvbl9hcmVhIj4KLSAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtIQnV0dG9uQm94IiBpZD0iZGlhbG9nLWFjdGlvbl9hcmVhMiI+Ci0gICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGF5b3V0X3N0eWxlIj5HVEtfQlVUVE9OQk9YX0VORDwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0J1dHRvbiIgaWQ9ImJ1dHRvbjQiPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVjZWl2ZXNfZGVmYXVsdCI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWNsb3NlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgPHBhY2tpbmc+Ci0gICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icGFja190eXBlIj5HVEtfUEFDS19FTkQ8L3Byb3BlcnR5PgotICAgICAgICAgIDwvcGFja2luZz4KLSAgICAgICAgPC9jaGlsZD4KLSAgICAgIDwvd2lkZ2V0PgotICAgIDwvY2hpbGQ+Ci0gIDwvd2lkZ2V0PgotICA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJtYWluX3dpbmRvdyI+Ci0gICAgPGNoaWxkPgotICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVkJveCIgaWQ9Im1haW5fd2luZG93X3Zib3giPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgIDxjaGlsZD4KLSAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUb29sYmFyIiBpZD0ibWFpbl90b29sYmFyIj4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9Im1haW5fdG9vbGJ1dHRvbl9idWlsZCI+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkJ1aWxkPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1leGVjdXRlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC93aWRnZXQ+Ci0gICAgICAgICAgICAgIDxwYWNraW5nPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KLSAgICAgICAgICA8L3BhY2tpbmc+Ci0gICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgIDxjaGlsZD4KLSAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWUGFuZWQiIGlkPSJ2cGFuZWQxIj4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InJlc3VsdHNfc2Nyb2xsZWR3aW5kb3ciPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgotICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5GYWxzZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgIDwvcGFja2luZz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0icHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3ciPgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgotICAgICAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICAgIDwvd2lkZ2V0PgotICAgICAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICAgICAgPC9jaGlsZD4KLSAgICAgICAgICA8L3dpZGdldD4KLSAgICAgICAgICA8cGFja2luZz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+Ci0gICAgICAgICAgPC9wYWNraW5nPgotICAgICAgICA8L2NoaWxkPgotICAgICAgPC93aWRnZXQ+Ci0gICAgPC9jaGlsZD4KLSAgPC93aWRnZXQ+Ci08L2dsYWRlLWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcnVubmluZ2J1aWxkLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ydW5uaW5nYnVpbGQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTk1NWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ydW5uaW5nYnVpbGQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NTEgKzAsMCBAQAotCi0jCi0jIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCi0jCi0jIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLWltcG9ydCBndGsKLWltcG9ydCBnb2JqZWN0Ci1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHRpbWUKLWltcG9ydCB1cmxsaWIKLWltcG9ydCB1cmxsaWIyCi1pbXBvcnQgcGFuZ28KLWZyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKLWZyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iV2FycENlbGxSZW5kZXJlclRleHQsIEhvYkNlbGxSZW5kZXJlclBpeGJ1ZgotCi1jbGFzcyBSdW5uaW5nQnVpbGRNb2RlbCAoZ3RrLlRyZWVTdG9yZSk6Ci0gICAgKENPTF9MT0csIENPTF9QQUNLQUdFLCBDT0xfVEFTSywgQ09MX01FU1NBR0UsIENPTF9JQ09OLCBDT0xfQ09MT1IsIENPTF9OVU1fQUNUSVZFKSA9IHJhbmdlKDcpCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYpOgotICAgICAgICBndGsuVHJlZVN0b3JlLl9faW5pdF9fIChzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5UKQotCi0gICAgZGVmIGZhaWx1cmVfbW9kZWxfZmlsdGVyKHNlbGYsIG1vZGVsLCBpdCk6Ci0gICAgICAgIGNvbG9yID0gbW9kZWwuZ2V0KGl0LCBzZWxmLkNPTF9DT0xPUilbMF0KLSAgICAgICAgaWYgbm90IGNvbG9yOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIGNvbG9yID09IEhvYkNvbG9ycy5FUlJPUiBvciBjb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORzoKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIGZhaWx1cmVfbW9kZWwoc2VsZik6Ci0gICAgICAgIG1vZGVsID0gc2VsZi5maWx0ZXJfbmV3KCkKLSAgICAgICAgbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLmZhaWx1cmVfbW9kZWxfZmlsdGVyKQotICAgICAgICByZXR1cm4gbW9kZWwKLQotICAgIGRlZiBmb3JlYWNoX2NlbGxfZnVuYyhzZWxmLCBtb2RlbCwgcGF0aCwgaXRlciwgdXNyX2RhdGE9Tm9uZSk6Ci0gICAgICAgIGlmIG1vZGVsLmdldF92YWx1ZShpdGVyLCBzZWxmLkNPTF9JQ09OKSA9PSAiZ3RrLWV4ZWN1dGUiOgotICAgICAgICAgICAgbW9kZWwuc2V0KGl0ZXIsIHNlbGYuQ09MX0lDT04sICIiKQotCi0gICAgZGVmIGNsb3NlX3Rhc2tfcmVmcmVzaChzZWxmKToKLSAgICAgICAgc2VsZi5mb3JlYWNoKHNlbGYuZm9yZWFjaF9jZWxsX2Z1bmMsIE5vbmUpCi0KLWNsYXNzIFJ1bm5pbmdCdWlsZCAoZ29iamVjdC5HT2JqZWN0KToKLSAgICBfX2dzaWduYWxzX18gPSB7Ci0gICAgICAgICAgJ2J1aWxkLXN0YXJ0ZWQnICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCi0gICAgICAgICAgJ2J1aWxkLXN1Y2NlZWRlZCcgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCi0gICAgICAgICAgJ2J1aWxkLWZhaWxlZCcgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCi0gICAgICAgICAgJ2J1aWxkLWNvbXBsZXRlJyAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCi0gICAgICAgICAgJ2J1aWxkLWFib3J0ZWQnICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCi0gICAgICAgICAgJ3Rhc2stc3RhcnRlZCcgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAotICAgICAgICAgICdsb2ctZXJyb3InICAgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAotICAgICAgICAgICdsb2ctd2FybmluZycgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAotICAgICAgICAgICdkaXNrLWZ1bGwnICAgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAotICAgICAgICAgICduby1wcm92aWRlcicgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKLSAgICAgICAgICAnbG9nJyAgICAgICAgICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCi0gICAgICAgICAgfQotICAgIHBpZHNfdG9fdGFzayA9IHt9Ci0gICAgdGFza3NfdG9faXRlciA9IHt9Ci0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsIHNlcXVlbnRpYWw9RmFsc2UpOgotICAgICAgICBnb2JqZWN0LkdPYmplY3QuX19pbml0X18gKHNlbGYpCi0gICAgICAgIHNlbGYubW9kZWwgPSBSdW5uaW5nQnVpbGRNb2RlbCgpCi0gICAgICAgIHNlbGYuc2VxdWVudGlhbCA9IHNlcXVlbnRpYWwKLSAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBGYWxzZQotCi0gICAgZGVmIHJlc2V0IChzZWxmKToKLSAgICAgICAgc2VsZi5waWRzX3RvX3Rhc2suY2xlYXIoKQotICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXIuY2xlYXIoKQotICAgICAgICBzZWxmLm1vZGVsLmNsZWFyKCkKLQotICAgIGRlZiBoYW5kbGVfZXZlbnQgKHNlbGYsIGV2ZW50LCBwYmFyPU5vbmUpOgotICAgICAgICAjIEhhbmRsZSBhbiBldmVudCBmcm9tIHRoZSBldmVudCBxdWV1ZSwgdGhpcyBtYXkgcmVzdWx0IGluIHVwZGF0aW5nCi0gICAgICAgICMgdGhlIG1vZGVsIGFuZCB0aHVzIHRoZSBVSS4gT3IgaXQgbWF5IGJlIHRvIHRlbGwgdXMgdGhhdCB0aGUgYnVpbGQKLSAgICAgICAgIyBoYXMgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IChvciBub3QsIGFzIHRoZSBjYXNlIG1heSBiZS4pCi0KLSAgICAgICAgcGFyZW50ID0gTm9uZQotICAgICAgICBwaWQgPSAwCi0gICAgICAgIHBhY2thZ2UgPSBOb25lCi0gICAgICAgIHRhc2sgPSBOb25lCi0KLSAgICAgICAgIyBJZiB3ZSBoYXZlIGEgcGlkIGF0dGFjaGVkIHRvIHRoaXMgbWVzc2FnZS9ldmVudCB0cnkgYW5kIGdldCB0aGUKLSAgICAgICAgIyAocGFja2FnZSwgdGFzaykgcGFpciBmb3IgaXQuIElmIHdlIGdldCB0aGF0IHRoZW4gZ2V0IHRoZSBwYXJlbnQgaXRlcgotICAgICAgICAjIGZvciB0aGUgbWVzc2FnZS4KLSAgICAgICAgaWYgaGFzYXR0cihldmVudCwgJ3BpZCcpOgotICAgICAgICAgICAgcGlkID0gZXZlbnQucGlkCi0gICAgICAgIGlmIGhhc2F0dHIoZXZlbnQsICdwcm9jZXNzJyk6Ci0gICAgICAgICAgICBwaWQgPSBldmVudC5wcm9jZXNzCi0KLSAgICAgICAgaWYgcGlkIGFuZCBwaWQgaW4gc2VsZi5waWRzX3RvX3Rhc2s6Ci0gICAgICAgICAgICAocGFja2FnZSwgdGFzaykgPSBzZWxmLnBpZHNfdG9fdGFza1twaWRdCi0gICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQotCi0gICAgICAgIGlmKGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKSk6Ci0gICAgICAgICAgICBpZiBldmVudC50YXNrcGlkID09IDAgb3IgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJoYW5kbGUiLCBldmVudCkKLSAgICAgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBoYWNrISBNb3JlIGluZm8gaW4gWW9jdG8gIzE0MzMKLSAgICAgICAgICAgICMgaHR0cDovL2J1Z3ppbGxhLnBva3lsaW51eC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzMsIHRlbXBvcmFyaWx5Ci0gICAgICAgICAgICAjIG1hc2sgdGhlIGVycm9yIG1lc3NhZ2UgYXMgaXQncyBub3QgaW5mb3JtYXRpdmUgZm9yIHRoZSB1c2VyLgotICAgICAgICAgICAgaWYgZXZlbnQubXNnLnN0YXJ0c3dpdGgoIkV4ZWN1dGlvbiBvZiBldmVudCBoYW5kbGVyICdydW5fYnVpbGRzdGF0cycgZmFpbGVkIik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgIGlmIChldmVudC5sZXZlbG5vIDwgbG9nZ2luZy5JTkZPIG9yCi0gICAgICAgICAgICAgICAgZXZlbnQubXNnLnN0YXJ0c3dpdGgoIlJ1bm5pbmcgdGFzayIpKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIyBkb24ndCBhZGQgdGhlc2UgdG8gdGhlIGxpc3QKLQotICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLkVSUk9SOgotICAgICAgICAgICAgICAgIGljb24gPSAiZGlhbG9nLWVycm9yIgotICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLkVSUk9SCi0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ctZXJyb3IiKQotICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID49IGxvZ2dpbmcuV0FSTklORzoKLSAgICAgICAgICAgICAgICBpY29uID0gImRpYWxvZy13YXJuaW5nIgotICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLldBUk5JTkcKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZy13YXJuaW5nIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWNvbiA9IE5vbmUKLSAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5PSwotCi0gICAgICAgICAgICAjIGlmIHdlIGtub3cgd2hpY2ggcGFja2FnZSB3ZSBiZWxvbmcgdG8sIHdlJ2xsIGFwcGVuZCBvbnRvIGl0cyBsaXN0LgotICAgICAgICAgICAgIyBvdGhlcndpc2UsIHdlJ2xsIGp1bXAgdG8gdGhlIHRvcCBvZiB0aGUgbWFzdGVyIGxpc3QKLSAgICAgICAgICAgIGlmIHNlbGYuc2VxdWVudGlhbCBvciBub3QgcGFyZW50OgotICAgICAgICAgICAgICAgIHRyZWVfYWRkID0gc2VsZi5tb2RlbC5hcHBlbmQKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLnByZXBlbmQKLSAgICAgICAgICAgIHRyZWVfYWRkKHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgIChOb25lLAotICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgdGFzaywKLSAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgaWNvbiwKLSAgICAgICAgICAgICAgICAgICAgICBjb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAwKSkKLQotICAgICAgICAgICAgIyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgd2hpbGUgcHJvY2Vzc2luZyBhIHBhY2thZ2UKLSAgICAgICAgICAgICMgIChwYXJlbnQpLCBtYXJrIHRoZSB0YXNrIHdpdGggd2FybmluZyBjb2xvcjsKLSAgICAgICAgICAgICMgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzLCB0aGUgdXBkYXRlcyB3aWxsIGJlCi0gICAgICAgICAgICAjICBoYW5kbGVkIG9uIFRhc2tGYWlsZWQuCi0gICAgICAgICAgICBpZiBjb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORyBhbmQgcGFyZW50OgotICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIGNvbG9yKQotICAgICAgICAgICAgICAgIGlmIHRhc2s6ICN0aGVuIHdlIGhhdmUgYSBwYXJlbnQgKHBhY2thZ2UpLCBhbmQgdXBkYXRlIGl0J3MgY29sb3IKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0sIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKLQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdGFydGVkKToKLSAgICAgICAgICAgIChwYWNrYWdlLCB0YXNrKSA9IChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spCi0KLSAgICAgICAgICAgICMgU2F2ZSBvdXQgdGhpcyBQSUQuCi0gICAgICAgICAgICBzZWxmLnBpZHNfdG9fdGFza1twaWRdID0gKHBhY2thZ2UsIHRhc2spCi0KLSAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgcGFja2FnZSBpbiBvdXIgbW9kZWwuIElmIHNvIHRoZW4KLSAgICAgICAgICAgICMgdGhhdCBjYW4gYmUgdGhlIHBhcmVudCBmb3IgdGhlIHRhc2suIE90aGVyd2lzZSB3ZSBjcmVhdGUgYSBuZXcKLSAgICAgICAgICAgICMgdG9wIGxldmVsIGZvciB0aGUgcGFja2FnZS4KLSAgICAgICAgICAgIGlmICgocGFja2FnZSwgTm9uZSkgaW4gc2VsZi50YXNrc190b19pdGVyKToKLSAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIE5vbmUpXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcXVlbnRpYWw6Ci0gICAgICAgICAgICAgICAgICAgIGFkZCA9IHNlbGYubW9kZWwuYXBwZW5kCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYWRkID0gc2VsZi5tb2RlbC5wcmVwZW5kCi0gICAgICAgICAgICAgICAgcGFyZW50ID0gYWRkKE5vbmUsIChOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFja2FnZTogJXMiICUgKHBhY2thZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5PSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQotICAgICAgICAgICAgICAgIHNlbGYudGFza3NfdG9faXRlclsocGFja2FnZSwgTm9uZSldID0gcGFyZW50Ci0KLSAgICAgICAgICAgICMgQmVjYXVzZSB0aGlzIHBhcmVudCBwYWNrYWdlIG5vdyBoYXMgYW4gYWN0aXZlIGNoaWxkIG1hcmsgaXQgYXMKLSAgICAgICAgICAgICMgc3VjaC4KLSAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgImd0ay1leGVjdXRlIikKLSAgICAgICAgICAgIHBhcmVudF9jb2xvciA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IpWzBdCi0gICAgICAgICAgICBpZiBwYXJlbnRfY29sb3IgIT0gSG9iQ29sb3JzLkVSUk9SIGFuZCBwYXJlbnRfY29sb3IgIT0gSG9iQ29sb3JzLldBUk5JTkc6Ci0gICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUiwgSG9iQ29sb3JzLlJVTk5JTkcpCi0KLSAgICAgICAgICAgICMgQWRkIGFuIGVudHJ5IGluIHRoZSBtb2RlbCBmb3IgdGhpcyB0YXNrCi0gICAgICAgICAgICBpID0gc2VsZi5tb2RlbC5hcHBlbmQgKHBhcmVudCwgKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXNrOiAlcyIgJSAodGFzayksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJndGstZXhlY3V0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5SVU5OSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKLQotICAgICAgICAgICAgIyB1cGRhdGUgdGhlIHBhcmVudCdzIGFjdGl2ZSB0YXNrIGNvdW50Ci0gICAgICAgICAgICBudW1fYWN0aXZlID0gc2VsZi5tb2RlbC5nZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9OVU1fQUNUSVZFKVswXSArIDEKLSAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSwgbnVtX2FjdGl2ZSkKLQotICAgICAgICAgICAgIyBTYXZlIG91dCB0aGUgaXRlciBzbyB0aGF0IHdlIGNhbiBmaW5kIGl0IHdoZW4gd2UgaGF2ZSBhIG1lc3NhZ2UKLSAgICAgICAgICAgICMgdGhhdCB3ZSBuZWVkIHRvIGF0dGFjaCB0byBhIHRhc2suCi0gICAgICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXSA9IGkKLQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKLSAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCBldmVudC5fbWVzc2FnZSkKLSAgICAgICAgICAgIGN1cnJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQotICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0KLQotICAgICAgICAgICAgIyByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHBhcmVudCdzIGFjdGl2ZSBjb3VudAotICAgICAgICAgICAgbnVtX2FjdGl2ZSA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSlbMF0gLSAxCi0gICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX05VTV9BQ1RJVkUsIG51bV9hY3RpdmUpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgotICAgICAgICAgICAgICAgICMgTWFyayB0aGUgdGFzayBhbmQgcGFyZW50IGFzIGZhaWxlZAotICAgICAgICAgICAgICAgIGljb24gPSAiZGlhbG9nLWVycm9yIgotICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLkVSUk9SCi0KLSAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQotICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgotICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSkgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSBmLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5hcHBlbmQoY3VycmVudCwgKCdwYXN0ZWJpbicsIE5vbmUsIE5vbmUsIGxvZ2RhdGEsICdndGstZXJyb3InLCBIb2JDb2xvcnMuT0ssIDApKQotCi0gICAgICAgICAgICAgICAgZm9yIGkgaW4gKGN1cnJlbnQsIHBhcmVudCk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGksIHNlbGYubW9kZWwuQ09MX0lDT04sIGljb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBNYXJrIHRoZSBwYXJlbnQgcGFja2FnZSBhbmQgdGhlIHRhc2sgYXMgaW5hY3RpdmUsCi0gICAgICAgICAgICAgICAgIyBidXQgbWFrZSBzdXJlIHRvIHByZXNlcnZlIGVycm9yLCB3YXJuaW5ncyBhbmQgYWN0aXZlCi0gICAgICAgICAgICAgICAgIyBzdGF0ZXMKLSAgICAgICAgICAgICAgICBwYXJlbnRfY29sb3IgPSBzZWxmLm1vZGVsLmdldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SKVswXQotICAgICAgICAgICAgICAgIHRhc2tfY29sb3IgPSBzZWxmLm1vZGVsLmdldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUilbMF0KLQotICAgICAgICAgICAgICAgICMgTWFyayB0aGUgdGFzayBhcyBpbmFjdGl2ZQotICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGN1cnJlbnQsIHNlbGYubW9kZWwuQ09MX0lDT04sIE5vbmUpCi0gICAgICAgICAgICAgICAgaWYgdGFza19jb2xvciAhPSBIb2JDb2xvcnMuRVJST1I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHRhc2tfY29sb3IgPT0gSG9iQ29sb3JzLldBUk5JTkc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCAnZGlhbG9nLXdhcm5pbmcnKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoY3VycmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5PSykKLQotICAgICAgICAgICAgICAgICMgTWFyayB0aGUgcGFyZW50IGFzIGluYWN0aXZlCi0gICAgICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yICE9IEhvYkNvbG9ycy5FUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yID09IEhvYkNvbG9ycy5XQVJOSU5HOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCAiZGlhbG9nLXdhcm5pbmciKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCBOb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtX2FjdGl2ZSA9PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5PSykKLQotICAgICAgICAgICAgIyBDbGVhciB0aGUgaXRlcnMgYW5kIHRoZSBwaWRzIHNpbmNlIHdoZW4gdGhlIHRhc2sgZ29lcyBhd2F5IHRoZQotICAgICAgICAgICAgIyBwaWQgd2lsbCBubyBsb25nZXIgYmUgdXNlZCBmb3IgbWVzc2FnZXMKLSAgICAgICAgICAgIGRlbCBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQotICAgICAgICAgICAgZGVsIHNlbGYucGlkc190b190YXNrW3BpZF0KLQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6Ci0KLSAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtc3RhcnRlZCIpCi0gICAgICAgICAgICBzZWxmLm1vZGVsLnByZXBlbmQoTm9uZSwgKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBTdGFydGVkICglcykiICUgdGltZS5zdHJmdGltZSgnJW0vJWQvJVkgJUg6JU06JVMnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9iQ29sb3JzLk9LLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKLSAgICAgICAgICAgIGlmIHBiYXI6Ci0gICAgICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKLSAgICAgICAgICAgICAgICBwYmFyLnNldF90aXRsZShiYi5ldmVudC5nZXROYW1lKGV2ZW50KSkKLQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKToKLSAgICAgICAgICAgIGZhaWx1cmVzID0gaW50IChldmVudC5fZmFpbHVyZXMpCi0gICAgICAgICAgICBzZWxmLm1vZGVsLnByZXBlbmQoTm9uZSwgKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBDb21wbGV0ZWQgKCVzKSIgJSB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2JDb2xvcnMuT0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQotCi0gICAgICAgICAgICAjIEVtaXQgdGhlIGFwcHJvcHJpYXRlIHNpZ25hbCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBmYWlsdXJlcwotICAgICAgICAgICAgaWYgc2VsZi5idWlsZGFib3J0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtYWJvcnRlZCIpCi0gICAgICAgICAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBGYWxzZQotICAgICAgICAgICAgZWxpZiAoZmFpbHVyZXMgPj0gMSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtZmFpbGVkIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtc3VjY2VlZGVkIikKLSAgICAgICAgICAgICMgRW1pdCBhIGdlbmVyaWMgImJ1aWxkLWNvbXBsZXRlIiBzaWduYWwgZm9yIHRoaW5ncyB3aXNoaW5nIHRvCi0gICAgICAgICAgICAjIGhhbmRsZSB3aGVuIHRoZSBidWlsZCBpcyBmaW5pc2hlZAotICAgICAgICAgICAgc2VsZi5lbWl0KCJidWlsZC1jb21wbGV0ZSIpCi0gICAgICAgICAgICAjIHJlc2V0IHRoZSBhbGwgY2VsbCdzIGljb24gaW5kaWNhdG9yCi0gICAgICAgICAgICBzZWxmLm1vZGVsLmNsb3NlX3Rhc2tfcmVmcmVzaCgpCi0gICAgICAgICAgICBpZiBwYmFyOgotICAgICAgICAgICAgICAgIHBiYXIuc2V0X3RleHQoZXZlbnQubXNnKQotCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGlza0Z1bGwpOgotICAgICAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmVtaXQoImRpc2stZnVsbCIpCi0KLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgotICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSAoZXZlbnQuZXJyb3IpKQotICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3Iuc3RhcnRzd2l0aCgiRXhpdGVkIHdpdGgiKToKLSAgICAgICAgICAgICAgICAjIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYW4gZXhpdCBjb2RlIHdlJ3JlIGRvbmUsIGVtaXQgdGhlCi0gICAgICAgICAgICAgICAgIyBnZW5lcmljIHNpZ25hbCBmb3IgdGhlIFVJIHRvIG5vdGlmeSB0aGUgdXNlcgotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtY29tcGxldGUiKQotICAgICAgICAgICAgICAgICMgcmVzZXQgdGhlIGFsbCBjZWxsJ3MgaWNvbiBpbmRpY2F0b3IKLSAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLmNsb3NlX3Rhc2tfcmVmcmVzaCgpCi0KLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKSBhbmQgcGJhcjoKLSAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCJMb2FkaW5nIGNhY2hlIikKLSAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfdG90YWwgPSBldmVudC50b3RhbAotICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcykgYW5kIHBiYXI6Ci0gICAgICAgICAgICBwYmFyLnVwZGF0ZShldmVudC5jdXJyZW50LCBzZWxmLnByb2dyZXNzX3RvdGFsKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCkgYW5kIHBiYXI6Ci0gICAgICAgICAgICBwYmFyLnVwZGF0ZShzZWxmLnByb2dyZXNzX3RvdGFsLCBzZWxmLnByb2dyZXNzX3RvdGFsKQotICAgICAgICAgICAgcGJhci5oaWRlKCkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpIGFuZCBwYmFyOgotICAgICAgICAgICAgaWYgZXZlbnQudG90YWwgPT0gMDoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCJQcm9jZXNzaW5nIHJlY2lwZXMiKQotICAgICAgICAgICAgc2VsZi5wcm9ncmVzc190b3RhbCA9IGV2ZW50LnRvdGFsCi0gICAgICAgICAgICBwYmFyLnVwZGF0ZSgwLCBzZWxmLnByb2dyZXNzX3RvdGFsKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpIGFuZCBwYmFyOgotICAgICAgICAgICAgcGJhci51cGRhdGUoZXZlbnQuY3VycmVudCwgc2VsZi5wcm9ncmVzc190b3RhbCkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCkgYW5kIHBiYXI6Ci0gICAgICAgICAgICBwYmFyLmhpZGUoKQotICAgICAgICAjdXNpbmcgcnVucXVldWUgZXZlbnRzIGFzIG1hbnkgYXMgcG9zc2libGUgdG8gdXBkYXRlIHRoZSBwcm9ncmVzcyBiYXIKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQpOgotICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiAlIChldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCk6Ci0gICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJ3YXJuIiwgIlNldHNjZW5lIHRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyAtIHJlYWwgdGFzayB3aWxsIGJlIHJ1biBpbnN0ZWFkIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCkpOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgIlJ1bm5pbmcgc2V0c2NlbmUgdGFzayAlZCBvZiAlZCAoJXMpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnN0YXRzLmNvbXBsZXRlZCArIGV2ZW50LnN0YXRzLmFjdGl2ZSArIGV2ZW50LnN0YXRzLmZhaWxlZCArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy50b3RhbCwgZXZlbnQudGFza3N0cmluZykpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGV2ZW50Lm5vZXhlYzoKLSAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUgPSAnbm9leGVjIHRhc2snCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUgPSAndGFzaycKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgIlJ1bm5pbmcgJXMgJXMgb2YgJXMgKElEOiAlcywgJXMpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhc2t0eXBlLCBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMudG90YWwsIGV2ZW50LnRhc2tpZCwgZXZlbnQudGFza3N0cmluZykpCi0gICAgICAgICAgICBtZXNzYWdlID0ge30KLSAgICAgICAgICAgIG1lc3NhZ2VbImV2ZW50bmFtZSJdID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKLSAgICAgICAgICAgIG51bV9vZl9jb21wbGV0ZWQgPSBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5mYWlsZWQKLSAgICAgICAgICAgIG1lc3NhZ2VbImN1cnJlbnQiXSA9IG51bV9vZl9jb21wbGV0ZWQKLSAgICAgICAgICAgIG1lc3NhZ2VbInRvdGFsIl0gPSBldmVudC5zdGF0cy50b3RhbAotICAgICAgICAgICAgbWVzc2FnZVsidGl0bGUiXSA9ICIiCi0gICAgICAgICAgICBtZXNzYWdlWyJ0YXNrIl0gPSBldmVudC50YXNrc3RyaW5nCi0gICAgICAgICAgICBzZWxmLmVtaXQoInRhc2stc3RhcnRlZCIsIG1lc3NhZ2UpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMpOgotICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaW5mbyIsICJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSBmb3IgJXMlcyAoJXMpIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXZlbnQuX2lzX3J1bnRpbWUgYW5kICJydW50aW1lICIgb3IgIiIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2NhbmRpZGF0ZXMpKSkKLSAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCAiY29uc2lkZXIgZGVmaW5pbmcgYSBQUkVGRVJSRURfUFJPVklERVIgZW50cnkgdG8gbWF0Y2ggJXMiICUgKGV2ZW50Ll9pdGVtKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKLSAgICAgICAgICAgIG1zZyA9ICIiCi0gICAgICAgICAgICBpZiBldmVudC5fcnVudGltZToKLSAgICAgICAgICAgICAgICByID0gIlIiCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHIgPSAiIgotCi0gICAgICAgICAgICBleHRyYSA9ICcnCi0gICAgICAgICAgICBpZiBub3QgZXZlbnQuX3JlYXNvbnM6Ci0gICAgICAgICAgICAgICAgaWYgZXZlbnQuX2Nsb3NlX21hdGNoZXM6Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgJ1xuICAnLmpvaW4oZXZlbnQuX2Nsb3NlX21hdGNoZXMpCi0KLSAgICAgICAgICAgIGlmIGV2ZW50Ll9kZXBlbmRlZXM6Ci0gICAgICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklc1xuIiAlIChyLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9kZXBlbmRlZXMpLCByLCBleHRyYSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnJXNcbiIgJSAociwgZXZlbnQuX2l0ZW0sIGV4dHJhKQotICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6Ci0gICAgICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBldmVudC5fcmVhc29uczoKLSAgICAgICAgICAgICAgICAgICAgbXNnICs9ICgiJXNcbiIgJSByZWFzb24pCi0gICAgICAgICAgICBzZWxmLmVtaXQoIm5vLXByb3ZpZGVyIiwgbXNnKQotICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCBtc2cpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6Ci0gICAgICAgICAgICBpY29uID0gImRpYWxvZy13YXJuaW5nIgotICAgICAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuV0FSTklORwotICAgICAgICAgICAgaWYgc2VsZi5zZXF1ZW50aWFsIG9yIG5vdCBwYXJlbnQ6Ci0gICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLmFwcGVuZAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0cmVlX2FkZCA9IHNlbGYubW9kZWwucHJlcGVuZAotICAgICAgICAgICAgdHJlZV9hZGQocGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICB0YXNrLAotICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1zZywKLSAgICAgICAgICAgICAgICAgICAgICBpY29uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLAotICAgICAgICAgICAgICAgICAgICAgIDApKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5CdWlsZEJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlN0YW1wVXBkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5Db25maWdQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXhpdFdhaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuT3BlcmF0aW9uUHJvZ3Jlc3MpKToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJlcnJvciIsICJVbmtub3duIGV2ZW50OiAlcyIgJSAoZXZlbnQuZXJyb3IgaWYgaGFzYXR0cihldmVudCwgJ2Vycm9yJykgZWxzZSAnZXJyb3InKSkKLQotICAgICAgICByZXR1cm4KLQotCi1kZWYgZG9fcGFzdGViaW4odGV4dCk6Ci0gICAgdXJsID0gJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vYXBpX3B1YmxpYy5waHAnCi0gICAgcGFyYW1zID0geydwYXN0ZV9jb2RlJzogdGV4dCwgJ3Bhc3RlX2Zvcm1hdCc6ICd0ZXh0J30KLQotICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmwsIHVybGxpYi51cmxlbmNvZGUocGFyYW1zKSkKLSAgICByZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihyZXEpCi0gICAgcGFzdGVfdXJsID0gcmVzcG9uc2UucmVhZCgpCi0KLSAgICByZXR1cm4gcGFzdGVfdXJsCi0KLQotY2xhc3MgUnVubmluZ0J1aWxkVHJlZVZpZXcgKGd0ay5UcmVlVmlldyk6Ci0gICAgX19nc2lnbmFsc19fID0gewotICAgICAgICAiYnV0dG9uX3ByZXNzX2V2ZW50IiA6ICJvdmVycmlkZSIKLSAgICAgICAgfQotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcmVhZG9ubHk9RmFsc2UsIGhvYj1GYWxzZSk6Ci0gICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyAoc2VsZikKLSAgICAgICAgc2VsZi5yZWFkb25seSA9IHJlYWRvbmx5Ci0KLSAgICAgICAgIyBUaGUgaWNvbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nIG9yIGZhaWxlZC4KLSAgICAgICAgIyBhZGQgJ2hvYicgZmxhZyBiZWNhdXNlIHRoZXJlIGhhcyBub3Qgb25seSBob2IgdG8gc2hhcmUgdGhpcyBjb2RlCi0gICAgICAgIGlmIGhvYjoKLSAgICAgICAgICAgIHJlbmRlcmVyID0gSG9iQ2VsbFJlbmRlcmVyUGl4YnVmICgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJQaXhidWYoKQotICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJTdGF0dXMiLCByZW5kZXJlcikKLSAgICAgICAgY29sLmFkZF9hdHRyaWJ1dGUgKHJlbmRlcmVyLCAiaWNvbi1uYW1lIiwgNCkKLSAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCi0KLSAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiB0aGUgYnVpbGQuCi0gICAgICAgICMgYWRkICdob2InIGZsYWcgYmVjYXVzZSB0aGVyZSBoYXMgbm90IG9ubHkgaG9iIHRvIHNoYXJlIHRoaXMgY29kZQotICAgICAgICBpZiBob2I6Ci0gICAgICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIgPSBIb2JXYXJwQ2VsbFJlbmRlcmVyVGV4dCAoY29sX251bWJlcj0xKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3JlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKLSAgICAgICAgc2VsZi5tZXNzYWdlX2NvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIk1lc3NhZ2UiLCBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIsIHRleHQ9MykKLSAgICAgICAgc2VsZi5tZXNzYWdlX2NvbHVtbi5hZGRfYXR0cmlidXRlKHNlbGYubWVzc2FnZV9yZW5kZXJlciwgJ2JhY2tncm91bmQnLCA1KQotICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIuc2V0X3Byb3BlcnR5KCdlZGl0YWJsZScsIChub3Qgc2VsZi5yZWFkb25seSkpCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoc2VsZi5tZXNzYWdlX2NvbHVtbikKLQotICAgIGRlZiBkb19idXR0b25fcHJlc3NfZXZlbnQoc2VsZiwgZXZlbnQpOgotICAgICAgICBndGsuVHJlZVZpZXcuZG9fYnV0dG9uX3ByZXNzX2V2ZW50KHNlbGYsIGV2ZW50KQotCi0gICAgICAgIGlmIGV2ZW50LmJ1dHRvbiA9PSAzOgotICAgICAgICAgICAgc2VsZWN0aW9uID0gc3VwZXIoUnVubmluZ0J1aWxkVHJlZVZpZXcsIHNlbGYpLmdldF9zZWxlY3Rpb24oKQotICAgICAgICAgICAgKG1vZGVsLCBpdCkgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKLSAgICAgICAgICAgIGlmIGl0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGNhbl9wYXN0ZSA9IG1vZGVsLmdldChpdCwgbW9kZWwuQ09MX0xPRylbMF0KLSAgICAgICAgICAgICAgICBpZiBjYW5fcGFzdGUgPT0gJ3Bhc3RlYmluJzoKLSAgICAgICAgICAgICAgICAgICAgIyBidWlsZCBhIHNpbXBsZSBtZW51IHdpdGggYSBwYXN0ZWJpbiBvcHRpb24KLSAgICAgICAgICAgICAgICAgICAgbWVudSA9IGd0ay5NZW51KCkKLSAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0gPSBndGsuTWVudUl0ZW0oIkNvcHkiKQotICAgICAgICAgICAgICAgICAgICBtZW51LmFwcGVuZChtZW51aXRlbSkKLSAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY29ubmVjdCgiYWN0aXZhdGUiLCBzZWxmLmNsaXBib2FyZF9oYW5kbGVyLCAobW9kZWwsIGl0KSkKLSAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uc2hvdygpCi0gICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtID0gZ3RrLk1lbnVJdGVtKCJTZW5kIGxvZyB0byBwYXN0ZWJpbiIpCi0gICAgICAgICAgICAgICAgICAgIG1lbnUuYXBwZW5kKG1lbnVpdGVtKQotICAgICAgICAgICAgICAgICAgICBtZW51aXRlbS5jb25uZWN0KCJhY3RpdmF0ZSIsIHNlbGYucGFzdGViaW5faGFuZGxlciwgKG1vZGVsLCBpdCkpCi0gICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLnNob3coKQotICAgICAgICAgICAgICAgICAgICBtZW51LnNob3coKQotICAgICAgICAgICAgICAgICAgICBtZW51LnBvcHVwKE5vbmUsIE5vbmUsIE5vbmUsIGV2ZW50LmJ1dHRvbiwgZXZlbnQudGltZSkKLQotICAgIGRlZiBfYWRkX3RvX2NsaXBib2FyZChzZWxmLCBjbGlwcGluZyk6Ci0gICAgICAgICIiIgotICAgICAgICBBZGQgdGhlIGNvbnRlbnRzIG9mIGNsaXBwaW5nIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgotICAgICAgICAiIiIKLSAgICAgICAgY2xpcGJvYXJkID0gZ3RrLmNsaXBib2FyZF9nZXQoKQotICAgICAgICBjbGlwYm9hcmQuc2V0X3RleHQoY2xpcHBpbmcpCi0gICAgICAgIGNsaXBib2FyZC5zdG9yZSgpCi0KLSAgICBkZWYgcGFzdGViaW5faGFuZGxlcihzZWxmLCB3aWRnZXQsIGRhdGEpOgotICAgICAgICAiIiIKLSAgICAgICAgU2VuZCB0aGUgbG9nIGRhdGEgdG8gcGFzdGViaW4sIHRoZW4gYWRkIHRoZSBuZXcgcGFzdGUgdXJsIHRvIHRoZQotICAgICAgICBjbGlwYm9hcmQuCi0gICAgICAgICIiIgotICAgICAgICAobW9kZWwsIGl0KSA9IGRhdGEKLSAgICAgICAgcGFzdGVfdXJsID0gZG9fcGFzdGViaW4obW9kZWwuZ2V0KGl0LCBtb2RlbC5DT0xfTUVTU0FHRSlbMF0pCi0KLSAgICAgICAgIyBAdG9kbyBQcm92aWRlIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlciB0aGF0IGl0IGlzIGRvbmUgYW5kIHRoYXQKLSAgICAgICAgIyBpdCB3b3JrZWQuCi0gICAgICAgIHByaW50IHBhc3RlX3VybAotCi0gICAgICAgIHNlbGYuX2FkZF90b19jbGlwYm9hcmQocGFzdGVfdXJsKQotCi0gICAgZGVmIGNsaXBib2FyZF9oYW5kbGVyKHNlbGYsIHdpZGdldCwgZGF0YSk6Ci0gICAgICAgICIiIgotICAgICAgICAiIiIKLSAgICAgICAgKG1vZGVsLCBpdCkgPSBkYXRhCi0gICAgICAgIG1lc3NhZ2UgPSBtb2RlbC5nZXQoaXQsIG1vZGVsLkNPTF9NRVNTQUdFKVswXQotCi0gICAgICAgIHNlbGYuX2FkZF90b19jbGlwYm9hcmQobWVzc2FnZSkKLQotY2xhc3MgQnVpbGRGYWlsdXJlVHJlZVZpZXcoZ3RrLlRyZWVWaWV3KToKLQotICAgIGRlZiBfX2luaXRfXyAoc2VsZik6Ci0gICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLnNldF9ydWxlc19oaW50KEZhbHNlKQotICAgICAgICBzZWxmLnNldF9oZWFkZXJzX3Zpc2libGUoRmFsc2UpCi0gICAgICAgIHNlbGYuZ2V0X3NlbGVjdGlvbigpLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQotCi0gICAgICAgICMgVGhlIGljb24gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBidWlsZGluZyBvciBmYWlsZWQuCi0gICAgICAgIHJlbmRlcmVyID0gSG9iQ2VsbFJlbmRlcmVyUGl4YnVmICgpCi0gICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIlN0YXR1cyIsIHJlbmRlcmVyKQotICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZSAocmVuZGVyZXIsICJpY29uLW5hbWUiLCBSdW5uaW5nQnVpbGRNb2RlbC5DT0xfSUNPTikKLSAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCi0KLSAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiB0aGUgYnVpbGQuCi0gICAgICAgIHNlbGYubWVzc2FnZV9yZW5kZXJlciA9IEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0IChjb2xfbnVtYmVyPTEpCi0gICAgICAgIHNlbGYubWVzc2FnZV9jb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJNZXNzYWdlIiwgc2VsZi5tZXNzYWdlX3JlbmRlcmVyLCB0ZXh0PVJ1bm5pbmdCdWlsZE1vZGVsLkNPTF9NRVNTQUdFLCBiYWNrZ3JvdW5kPVJ1bm5pbmdCdWlsZE1vZGVsLkNPTF9DT0xPUikKLSAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChzZWxmLm1lc3NhZ2VfY29sdW1uKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOTg2NGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMKLSMgQml0QmFrZSBVSSBVdGlscyAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0jIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi0jIFRoaXMgdXRpbGl0eSBtZXRob2QgbG9va3MgZm9yIHh0ZXJtIG9yIHZ0ZSBhbmQgcmV0dXJuIHRoZSAKLSMgZnJpc3QgdG8gZXhpc3QsIGN1cnJlbnRseSB3ZSBhcmUga2VlcGluZyB0aGlzIHNpbXBsZSwgYnV0IAotIyB3ZSB3aWxsIGxpa2VseSBtb3ZlIHRoZSBvZS50ZXJtaW5hbCBpbXBsZW1lbnRhdGlvbiBpbnRvIAotIyBiaXRiYWtlIHdoaWNoIHdpbGwgYWxsb3cgbW9yZSBmbGV4aWJpbGl0eS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgYmIKLQotZGVmIHdoaWNoX3Rlcm1pbmFsKCk6Ci0gICAgdGVybSA9IGJiLnV0aWxzLndoaWNoKG9zLmVudmlyb25bIlBBVEgiXSwgInh0ZXJtIikKLSAgICBpZiB0ZXJtOgotICAgICAgICByZXR1cm4gdGVybSArICIgLWUgIgotICAgIHRlcm0gPSBiYi51dGlscy53aGljaChvcy5lbnZpcm9uWyJQQVRIIl0sICJ2dGUiKQotICAgIGlmIHRlcm06Ci0gICAgICAgIHJldHVybiB0ZXJtICsgIiAtYyAiCi0gICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9kZXBleHAucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZGVwZXhwLnB5CmluZGV4IDI0MGFhZmMuLmQ4NzllMDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9kZXBleHAucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2RlcGV4cC5weQpAQCAtMTgsMTQgKzE4LDE1IEBACiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKIGltcG9ydCBzeXMKLWltcG9ydCBnb2JqZWN0Ci1pbXBvcnQgZ3RrCi1pbXBvcnQgUXVldWUKK2ltcG9ydCBnaQorZ2kucmVxdWlyZV92ZXJzaW9uKCdHdGsnLCAnMy4wJykKK2Zyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR3RrLCBHZGssIEdPYmplY3QKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZQogaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHhtbHJwY2xpYgorZnJvbSB4bWxycGMgaW1wb3J0IGNsaWVudAoraW1wb3J0IHRpbWUKIGltcG9ydCBiYgogaW1wb3J0IGJiLmV2ZW50Ci1mcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKIAogIyBQYWNrYWdlIE1vZGVsCiAoQ09MX1BLR19OQU1FKSA9ICgwKQpAQCAtMzUsMTkgKzM2LDE5IEBACiAoQ09MX0RFUF9UWVBFLCBDT0xfREVQX1BBUkVOVCwgQ09MX0RFUF9QQUNLQUdFKSA9ICgwLCAxLCAyKQogCiAKLWNsYXNzIFBhY2thZ2VEZXBWaWV3KGd0ay5UcmVlVmlldyk6CitjbGFzcyBQYWNrYWdlRGVwVmlldyhHdGsuVHJlZVZpZXcpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgZGVwX3R5cGUsIGxhYmVsKToKLSAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIEd0ay5UcmVlVmlldy5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLmN1cnJlbnQgPSBOb25lCiAgICAgICAgIHNlbGYuZGVwX3R5cGUgPSBkZXBfdHlwZQogICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbCA9IG1vZGVsLmZpbHRlcl9uZXcoKQotICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5zZXRfdmlzaWJsZV9mdW5jKHNlbGYuX2ZpbHRlcikKKyAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLl9maWx0ZXIsIGRhdGE9Tm9uZSkKICAgICAgICAgc2VsZi5zZXRfbW9kZWwoc2VsZi5maWx0ZXJfbW9kZWwpCi0gICAgICAgICNzZWxmLmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLm9uX3BhY2thZ2VfYWN0aXZhdGVkLCBDT0xfREVQX1BBQ0tBR0UpCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbihndGsuVHJlZVZpZXdDb2x1bW4obGFiZWwsIGd0ay5DZWxsUmVuZGVyZXJUZXh0KCksIHRleHQ9Q09MX0RFUF9QQUNLQUdFKSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uKEd0ay5UcmVlVmlld0NvbHVtbihsYWJlbCwgR3RrLkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD1DT0xfREVQX1BBQ0tBR0UpKQogCi0gICAgZGVmIF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0ZXIpOgotICAgICAgICAodGhpc190eXBlLCBwYWNrYWdlKSA9IG1vZGVsLmdldChpdGVyLCBDT0xfREVQX1RZUEUsIENPTF9ERVBfUEFSRU5UKQorICAgIGRlZiBfZmlsdGVyKHNlbGYsIG1vZGVsLCBpdGVyLCBkYXRhKToKKyAgICAgICAgdGhpc190eXBlID0gbW9kZWxbaXRlcl1bQ09MX0RFUF9UWVBFXQorICAgICAgICBwYWNrYWdlID0gbW9kZWxbaXRlcl1bQ09MX0RFUF9QQVJFTlRdCiAgICAgICAgIGlmIHRoaXNfdHlwZSAhPSBzZWxmLmRlcF90eXBlOiByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIHBhY2thZ2UgPT0gc2VsZi5jdXJyZW50CiAKQEAgLTU2LDE3ICs1NywxNyBAQAogICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5yZWZpbHRlcigpCiAKIAotY2xhc3MgUGFja2FnZVJldmVyc2VEZXBWaWV3KGd0ay5UcmVlVmlldyk6CitjbGFzcyBQYWNrYWdlUmV2ZXJzZURlcFZpZXcoR3RrLlRyZWVWaWV3KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGxhYmVsKToKLSAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIEd0ay5UcmVlVmlldy5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLmN1cnJlbnQgPSBOb25lCiAgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsID0gbW9kZWwuZmlsdGVyX25ldygpCiAgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi5fZmlsdGVyKQogICAgICAgICBzZWxmLnNldF9tb2RlbChzZWxmLmZpbHRlcl9tb2RlbCkKLSAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uKGd0ay5UcmVlVmlld0NvbHVtbihsYWJlbCwgZ3RrLkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD1DT0xfREVQX1BBUkVOVCkpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbihHdGsuVHJlZVZpZXdDb2x1bW4obGFiZWwsIEd0ay5DZWxsUmVuZGVyZXJUZXh0KCksIHRleHQ9Q09MX0RFUF9QQVJFTlQpKQogCi0gICAgZGVmIF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0ZXIpOgotICAgICAgICBwYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIENPTF9ERVBfUEFDS0FHRSkKKyAgICBkZWYgX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXRlciwgZGF0YSk6CisgICAgICAgIHBhY2thZ2UgPSBtb2RlbFtpdGVyXVtDT0xfREVQX1BBQ0tBR0VdCiAgICAgICAgIHJldHVybiBwYWNrYWdlID09IHNlbGYuY3VycmVudAogCiAgICAgZGVmIHNldF9jdXJyZW50X3BhY2thZ2Uoc2VsZiwgcGFja2FnZSk6CkBAIC03NCw1MCArNzUsNTAgQEAKICAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwucmVmaWx0ZXIoKQogCiAKLWNsYXNzIERlcEV4cGxvcmVyKGd0ay5XaW5kb3cpOgorY2xhc3MgRGVwRXhwbG9yZXIoR3RrLldpbmRvdyk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIEd0ay5XaW5kb3cuX19pbml0X18oc2VsZikKICAgICAgICAgc2VsZi5zZXRfdGl0bGUoIkRlcGVuZGVuY3kgRXhwbG9yZXIiKQogICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3NpemUoNTAwLCA1MDApCi0gICAgICAgIHNlbGYuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZ3RrLm1haW5fcXVpdCkKKyAgICAgICAgc2VsZi5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBHdGsubWFpbl9xdWl0KQogCiAgICAgICAgICMgQ3JlYXRlIHRoZSBkYXRhIG1vZGVscwotICAgICAgICBzZWxmLnBrZ19tb2RlbCA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORykKLSAgICAgICAgc2VsZi5wa2dfbW9kZWwuc2V0X3NvcnRfY29sdW1uX2lkKENPTF9QS0dfTkFNRSwgZ3RrLlNPUlRfQVNDRU5ESU5HKQotICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwgPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9JTlQsIGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcpCi0gICAgICAgIHNlbGYuZGVwZW5kc19tb2RlbC5zZXRfc29ydF9jb2x1bW5faWQoQ09MX0RFUF9QQUNLQUdFLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgIHNlbGYucGtnX21vZGVsID0gR3RrLkxpc3RTdG9yZShHT2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLnBrZ19tb2RlbC5zZXRfc29ydF9jb2x1bW5faWQoQ09MX1BLR19OQU1FLCBHdGsuU29ydFR5cGUuQVNDRU5ESU5HKQorICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwgPSBHdGsuTGlzdFN0b3JlKEdPYmplY3QuVFlQRV9JTlQsIEdPYmplY3QuVFlQRV9TVFJJTkcsIEdPYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYuZGVwZW5kc19tb2RlbC5zZXRfc29ydF9jb2x1bW5faWQoQ09MX0RFUF9QQUNLQUdFLCBHdGsuU29ydFR5cGUuQVNDRU5ESU5HKQogCi0gICAgICAgIHBhbmUgPSBndGsuSFBhbmVkKCkKKyAgICAgICAgcGFuZSA9IEd0ay5IUGFuZWQoKQogICAgICAgICBwYW5lLnNldF9wb3NpdGlvbigyNTApCiAgICAgICAgIHNlbGYuYWRkKHBhbmUpCiAKICAgICAgICAgIyBUaGUgbWFzdGVyIGxpc3Qgb2YgcGFja2FnZXMKLSAgICAgICAgc2Nyb2xsZWQgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQotICAgICAgICBzY3JvbGxlZC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKLSAgICAgICAgc2Nyb2xsZWQuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgIHNjcm9sbGVkID0gR3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3BvbGljeShHdGsuUG9saWN5VHlwZS5BVVRPTUFUSUMsIEd0ay5Qb2xpY3lUeXBlLkFVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3NoYWRvd190eXBlKEd0ay5TaGFkb3dUeXBlLklOKQogCi0gICAgICAgIHNlbGYucGtnX3RyZWV2aWV3ID0gZ3RrLlRyZWVWaWV3KHNlbGYucGtnX21vZGVsKQorICAgICAgICBzZWxmLnBrZ190cmVldmlldyA9IEd0ay5UcmVlVmlldyhzZWxmLnBrZ19tb2RlbCkKICAgICAgICAgc2VsZi5wa2dfdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLm9uX2N1cnNvcl9jaGFuZ2VkKQotICAgICAgICBjb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4oIlBhY2thZ2UiLCBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpLCB0ZXh0PUNPTF9QS0dfTkFNRSkKKyAgICAgICAgY29sdW1uID0gR3RrLlRyZWVWaWV3Q29sdW1uKCJQYWNrYWdlIiwgR3RrLkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD1DT0xfUEtHX05BTUUpCiAgICAgICAgIHNlbGYucGtnX3RyZWV2aWV3LmFwcGVuZF9jb2x1bW4oY29sdW1uKQogICAgICAgICBwYW5lLmFkZDEoc2Nyb2xsZWQpCiAgICAgICAgIHNjcm9sbGVkLmFkZChzZWxmLnBrZ190cmVldmlldykKIAotICAgICAgICBib3ggPSBndGsuVkJveChob21vZ2VuZW91cz1UcnVlLCBzcGFjaW5nPTQpCisgICAgICAgIGJveCA9IEd0ay5WQm94KGhvbW9nZW5lb3VzPVRydWUsIHNwYWNpbmc9NCkKIAogICAgICAgICAjIFJ1bnRpbWUgRGVwZW5kcwotICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCi0gICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQotICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2Nyb2xsZWQgPSBHdGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGxlZC5zZXRfcG9saWN5KEd0ay5Qb2xpY3lUeXBlLkFVVE9NQVRJQywgR3RrLlBvbGljeVR5cGUuQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoR3RrLlNoYWRvd1R5cGUuSU4pCiAgICAgICAgIHNlbGYucmRlcF90cmVldmlldyA9IFBhY2thZ2VEZXBWaWV3KHNlbGYuZGVwZW5kc19tb2RlbCwgVFlQRV9SREVQLCAiUnVudGltZSBEZXBlbmRzIikKICAgICAgICAgc2VsZi5yZGVwX3RyZWV2aWV3LmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLm9uX3BhY2thZ2VfYWN0aXZhdGVkLCBDT0xfREVQX1BBQ0tBR0UpCiAgICAgICAgIHNjcm9sbGVkLmFkZChzZWxmLnJkZXBfdHJlZXZpZXcpCiAgICAgICAgIGJveC5hZGQoc2Nyb2xsZWQpCiAKICAgICAgICAgIyBCdWlsZCBEZXBlbmRzCi0gICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKLSAgICAgICAgc2Nyb2xsZWQuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCi0gICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzY3JvbGxlZCA9IEd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koR3RrLlBvbGljeVR5cGUuQVVUT01BVElDLCBHdGsuUG9saWN5VHlwZS5BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShHdGsuU2hhZG93VHlwZS5JTikKICAgICAgICAgc2VsZi5kZXBfdHJlZXZpZXcgPSBQYWNrYWdlRGVwVmlldyhzZWxmLmRlcGVuZHNfbW9kZWwsIFRZUEVfREVQLCAiQnVpbGQgRGVwZW5kcyIpCiAgICAgICAgIHNlbGYuZGVwX3RyZWV2aWV3LmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLm9uX3BhY2thZ2VfYWN0aXZhdGVkLCBDT0xfREVQX1BBQ0tBR0UpCiAgICAgICAgIHNjcm9sbGVkLmFkZChzZWxmLmRlcF90cmVldmlldykKQEAgLTEyNSw5ICsxMjYsOSBAQAogICAgICAgICBwYW5lLmFkZDIoYm94KQogCiAgICAgICAgICMgUmV2ZXJzZSBEZXBlbmRzCi0gICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKLSAgICAgICAgc2Nyb2xsZWQuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCi0gICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzY3JvbGxlZCA9IEd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koR3RrLlBvbGljeVR5cGUuQVVUT01BVElDLCBHdGsuUG9saWN5VHlwZS5BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShHdGsuU2hhZG93VHlwZS5JTikKICAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcgPSBQYWNrYWdlUmV2ZXJzZURlcFZpZXcoc2VsZi5kZXBlbmRzX21vZGVsLCAiUmV2ZXJzZSBEZXBlbmRzIikKICAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYub25fcGFja2FnZV9hY3RpdmF0ZWQsIENPTF9ERVBfUEFSRU5UKQogICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5yZXZkZXBfdHJlZXZpZXcpCkBAIC0xODMsMTUgKzE4NCwyMyBAQAogICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYuc2V0RGFlbW9uKFRydWUpCiAgICAgICAgIHNlbGYuc2h1dGRvd24gPSBzaHV0ZG93bgorICAgICAgICBpZiBub3QgR3RrLmluaXRfY2hlY2soKVswXToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkd0aysgaW5pdCBmYWlsZWQuIE1ha2Ugc3VyZSBESVNQTEFZIHZhcmlhYmxlIGlzIHNldC5cbiIpCisgICAgICAgICAgICBndGt0aHJlYWQucXVpdC5zZXQoKQogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgZ29iamVjdC50aHJlYWRzX2luaXQoKQotICAgICAgICBndGsuZ2RrLnRocmVhZHNfaW5pdCgpCi0gICAgICAgIGd0ay5tYWluKCkKKyAgICAgICAgR09iamVjdC50aHJlYWRzX2luaXQoKQorICAgICAgICBHZGsudGhyZWFkc19pbml0KCkKKyAgICAgICAgR3RrLm1haW4oKQogICAgICAgICBndGt0aHJlYWQucXVpdC5zZXQoKQogCiAKIGRlZiBtYWluKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpOgorICAgIHNodXRkb3duID0gMAorCisgICAgZ3RrZ3VpID0gZ3RrdGhyZWFkKHNodXRkb3duKQorICAgIGd0a2d1aS5zdGFydCgpCisKICAgICB0cnk6CiAgICAgICAgIHBhcmFtcy51cGRhdGVGcm9tU2VydmVyKHNlcnZlcikKICAgICAgICAgY21kbGluZSA9IHBhcmFtcy5wYXJzZUFjdGlvbnMoKQpAQCAtMjEyLDMxICsyMjEsMjQgQEAKICAgICAgICAgZWxpZiByZXQgIT0gVHJ1ZToKICAgICAgICAgICAgIHByaW50KCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogcmV0dXJuZWQgJXMiICUgKGNtZGxpbmUsIHJldCkpCiAgICAgICAgICAgICByZXR1cm4gMQotICAgIGV4Y2VwdCB4bWxycGNsaWIuRmF1bHQgYXMgeDoKKyAgICBleGNlcHQgY2xpZW50LkZhdWx0IGFzIHg6CiAgICAgICAgIHByaW50KCJYTUxSUEMgRmF1bHQgZ2V0dGluZyBjb21tYW5kbGluZTpcbiAlcyIgJSB4KQogICAgICAgICByZXR1cm4KIAotICAgIHRyeToKLSAgICAgICAgZ3RrLmluaXRfY2hlY2soKQotICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlBsZWFzZSBzZXQgRElTUExBWSB2YXJpYWJsZSBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQgXG4iKQorICAgIGlmIGd0a3RocmVhZC5xdWl0LmlzU2V0KCk6CiAgICAgICAgIHJldHVybgogCi0gICAgc2h1dGRvd24gPSAwCi0KLSAgICBndGtndWkgPSBndGt0aHJlYWQoc2h1dGRvd24pCi0gICAgZ3RrZ3VpLnN0YXJ0KCkKLQotICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgR2RrLnRocmVhZHNfZW50ZXIoKQogICAgIGRlcCA9IERlcEV4cGxvcmVyKCkKLSAgICBiYXJkaWFsb2cgPSBndGsuRGlhbG9nKHBhcmVudD1kZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1ndGsuRElBTE9HX01PREFMfGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCkKKyAgICBiYXJkaWFsb2cgPSBHdGsuRGlhbG9nKHBhcmVudD1kZXAsCisgICAgICAgICAgICBmbGFncz1HdGsuRGlhbG9nRmxhZ3MuTU9EQUx8R3RrLkRpYWxvZ0ZsYWdzLkRFU1RST1lfV0lUSF9QQVJFTlQpCiAgICAgYmFyZGlhbG9nLnNldF9kZWZhdWx0X3NpemUoNDAwLCA1MCkKLSAgICBwYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQotICAgIGJhcmRpYWxvZy52Ym94LnBhY2tfc3RhcnQocGJhcikKKyAgICBib3ggPSBiYXJkaWFsb2cuZ2V0X2NvbnRlbnRfYXJlYSgpCisgICAgcGJhciA9IEd0ay5Qcm9ncmVzc0JhcigpCisgICAgYm94LnBhY2tfc3RhcnQocGJhciwgVHJ1ZSwgVHJ1ZSwgMCkKICAgICBiYXJkaWFsb2cuc2hvd19hbGwoKQotICAgIGJhcmRpYWxvZy5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBndGsubWFpbl9xdWl0KQotICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisgICAgYmFyZGlhbG9nLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIEd0ay5tYWluX3F1aXQpCisgICAgR2RrLnRocmVhZHNfbGVhdmUoKQogCiAgICAgcHJvZ3Jlc3NfdG90YWwgPSAwCiAgICAgd2hpbGUgVHJ1ZToKQEAgLTI1Myw1MyArMjU1LDc2IEBACiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgogICAgICAgICAgICAgICAgIHByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKLSAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIEdkay50aHJlYWRzX2VudGVyKCkKICAgICAgICAgICAgICAgICBiYXJkaWFsb2cuc2V0X3RpdGxlKCJMb2FkaW5nIENhY2hlIikKLSAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSgwKQotICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfZnJhY3Rpb24oMC4wKQorICAgICAgICAgICAgICAgIEdkay50aHJlYWRzX2xlYXZlKCkKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MpOgogICAgICAgICAgICAgICAgIHggPSBldmVudC5jdXJyZW50Ci0gICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKLSAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSh4ICogMS4wIC8gcHJvZ3Jlc3NfdG90YWwpCi0gICAgICAgICAgICAgICAgcGJhci5zZXRfdGl0bGUoJycpCi0gICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKyAgICAgICAgICAgICAgICBHZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfZnJhY3Rpb24oeCAqIDEuMCAvIHByb2dyZXNzX3RvdGFsKQorICAgICAgICAgICAgICAgIEdkay50aHJlYWRzX2xlYXZlKCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgotICAgICAgICAgICAgICAgIGJhcmRpYWxvZy5oaWRlKCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgogICAgICAgICAgICAgICAgIHByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKICAgICAgICAgICAgICAgICBpZiBwcm9ncmVzc190b3RhbCA9PSAwOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCi0gICAgICAgICAgICAgICAgcGJhci51cGRhdGUoMCkKKyAgICAgICAgICAgICAgICBHZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfZnJhY3Rpb24oMC4wKQogICAgICAgICAgICAgICAgIGJhcmRpYWxvZy5zZXRfdGl0bGUoIlByb2Nlc3NpbmcgcmVjaXBlcyIpCi0KLSAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorICAgICAgICAgICAgICAgIEdkay50aHJlYWRzX2xlYXZlKCkKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyk6CiAgICAgICAgICAgICAgICAgeCA9IGV2ZW50LmN1cnJlbnQKLSAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQotICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKHggKiAxLjAgLyBwcm9ncmVzc190b3RhbCkKLSAgICAgICAgICAgICAgICBwYmFyLnNldF90aXRsZSgnJykKLSAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorICAgICAgICAgICAgICAgIEdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBwYmFyLnNldF9mcmFjdGlvbih4ICogMS4wIC8gcHJvZ3Jlc3NfdG90YWwpCisgICAgICAgICAgICAgICAgR2RrLnRocmVhZHNfbGVhdmUoKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKLSAgICAgICAgICAgICAgICBiYXJkaWFsb2cuaGlkZSgpCisgICAgICAgICAgICAgICAgR2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIGJhcmRpYWxvZy5zZXRfdGl0bGUoIkdlbmVyYXRpbmcgZGVwZW5kZW5jeSB0cmVlIikKKyAgICAgICAgICAgICAgICBHZGsudGhyZWFkc19sZWF2ZSgpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZCk6Ci0gICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBHZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgYmFyZGlhbG9nLmhpZGUoKQogICAgICAgICAgICAgICAgIGRlcC5wYXJzZShldmVudC5fZGVwZ3JhcGgpCi0gICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKyAgICAgICAgICAgICAgICBHZGsudGhyZWFkc19sZWF2ZSgpCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX3J1bnRpbWU6CisgICAgICAgICAgICAgICAgICAgIHIgPSAiUiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByID0gIiIKKworICAgICAgICAgICAgICAgIGV4dHJhID0gJycKKyAgICAgICAgICAgICAgICBpZiBub3QgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9jbG9zZV9tYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSAiLiBDbG9zZSBtYXRjaGVzOlxuICAlcyIgJSAnXG4gICcuam9pbihldmVudC5fY2xvc2VfbWF0Y2hlcykKKworICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9kZXBlbmRlZXM6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJOb3RoaW5nICVzUFJPVklERVMgJyVzJyAoYnV0ICVzICVzREVQRU5EUyBvbiBvciBvdGhlcndpc2UgcmVxdWlyZXMgaXQpJXMiICUgciwgZXZlbnQuX2l0ZW0sICIsICIuam9pbihldmVudC5fZGVwZW5kZWVzKSwgciwgZXh0cmEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnJXMiICUgKHIsIGV2ZW50Ll9pdGVtLCBleHRyYSkpCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciByZWFzb24gaW4gZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChyZWFzb24pCisKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnVW5hYmxlIHRvIGNsZWFubHkgc2h1dGRvd246ICVzJyAlIGVycm9yKQorICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CiAgICAgICAgICAgICAgICAgcHJpbnQoIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiICUgZXZlbnQuZXJyb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmV4aXRjb2RlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZ29nZ2xlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2dvZ2dsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlZTdiNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZ29nZ2xlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLSMKLSMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwOCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KLSMKLSMgQXV0aG9yZWQgYnkgUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotaW1wb3J0IGdvYmplY3QKLWltcG9ydCBndGsKLWltcG9ydCB4bWxycGNsaWIKLWZyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgUnVubmluZ0J1aWxkVHJlZVZpZXcsIFJ1bm5pbmdCdWlsZAotZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3MgaW1wb3J0IFByb2dyZXNzQmFyCi0KLWltcG9ydCBRdWV1ZQotCi0KLWRlZiBldmVudF9oYW5kbGVfaWRsZV9mdW5jIChldmVudEhhbmRsZXIsIGJ1aWxkLCBwYmFyKToKLQotICAgICMgQ29uc3VtZSBhcyBtYW55IG1lc3NhZ2VzIGFzIHdlIGNhbiBpbiB0aGUgdGltZSBhdmFpbGFibGUgdG8gdXMKLSAgICBldmVudCA9IGV2ZW50SGFuZGxlci5nZXRFdmVudCgpCi0gICAgd2hpbGUgZXZlbnQ6Ci0gICAgICAgIGJ1aWxkLmhhbmRsZV9ldmVudCAoZXZlbnQsIHBiYXIpCi0gICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKLQotICAgIHJldHVybiBUcnVlCi0KLWRlZiBzY3JvbGxfdHZfY2IgKG1vZGVsLCBwYXRoLCBpdGVyLCB2aWV3KToKLSAgICB2aWV3LnNjcm9sbF90b19jZWxsIChwYXRoKQotCi0KLSMgQHRvZG8gaG9vayB0aGVzZSBpbnRvIHRoZSBHVUkgc28gdGhlIHVzZXIgaGFzIGZlZWRiYWNrLi4uCi1kZWYgcnVubmluZ19idWlsZF9mYWlsZWRfY2IgKHJ1bm5pbmdfYnVpbGQpOgotICAgIHBhc3MKLQotCi1kZWYgcnVubmluZ19idWlsZF9zdWNjZWVkZWRfY2IgKHJ1bm5pbmdfYnVpbGQpOgotICAgIHBhc3MKLQotCi1jbGFzcyBNYWluV2luZG93IChndGsuV2luZG93KToKLSAgICBkZWYgX19pbml0X18gKHNlbGYpOgotICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fIChzZWxmLCBndGsuV0lORE9XX1RPUExFVkVMKQotCi0gICAgICAgICMgU2V0dXAgdHJlZSB2aWV3IGFuZCB0aGUgc2Nyb2xsZWQgd2luZG93Ci0gICAgICAgIHNjcm9sbGVkX3dpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdyAoKQotICAgICAgICBzZWxmLmFkZCAoc2Nyb2xsZWRfd2luZG93KQotICAgICAgICBzZWxmLmN1cl9idWlsZF90diA9IFJ1bm5pbmdCdWlsZFRyZWVWaWV3KCkKLSAgICAgICAgc2VsZi5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBndGsubWFpbl9xdWl0KQotICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3NpemUoNjQwLCA0ODApCi0gICAgICAgIHNjcm9sbGVkX3dpbmRvdy5hZGQgKHNlbGYuY3VyX2J1aWxkX3R2KQotCi0KLWRlZiBtYWluIChzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zKToKLSAgICBnb2JqZWN0LnRocmVhZHNfaW5pdCgpCi0gICAgZ3RrLmdkay50aHJlYWRzX2luaXQoKQotCi0gICAgd2luZG93ID0gTWFpbldpbmRvdyAoKQotICAgIHdpbmRvdy5zaG93X2FsbCAoKQotICAgIHBiYXIgPSBQcm9ncmVzc0Jhcih3aW5kb3cpCi0gICAgcGJhci5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBndGsubWFpbl9xdWl0KQotCi0gICAgIyBDcmVhdGUgdGhlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgYnVpbGQKLSAgICBydW5uaW5nX2J1aWxkID0gUnVubmluZ0J1aWxkICgpCi0gICAgd2luZG93LmN1cl9idWlsZF90di5zZXRfbW9kZWwgKHJ1bm5pbmdfYnVpbGQubW9kZWwpCi0gICAgcnVubmluZ19idWlsZC5tb2RlbC5jb25uZWN0KCJyb3ctaW5zZXJ0ZWQiLCBzY3JvbGxfdHZfY2IsIHdpbmRvdy5jdXJfYnVpbGRfdHYpCi0gICAgcnVubmluZ19idWlsZC5jb25uZWN0ICgiYnVpbGQtc3VjY2VlZGVkIiwgcnVubmluZ19idWlsZF9zdWNjZWVkZWRfY2IpCi0gICAgcnVubmluZ19idWlsZC5jb25uZWN0ICgiYnVpbGQtZmFpbGVkIiwgcnVubmluZ19idWlsZF9mYWlsZWRfY2IpCi0KLSAgICB0cnk6Ci0gICAgICAgIHBhcmFtcy51cGRhdGVGcm9tU2VydmVyKHNlcnZlcikKLSAgICAgICAgY21kbGluZSA9IHBhcmFtcy5wYXJzZUFjdGlvbnMoKQotICAgICAgICBpZiBub3QgY21kbGluZToKLSAgICAgICAgICAgIHByaW50KCJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIikKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGlmICdtc2cnIGluIGNtZGxpbmUgYW5kIGNtZGxpbmVbJ21zZyddOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGNtZGxpbmVbJ21zZyddKQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgY21kbGluZSA9IGNtZGxpbmVbJ2FjdGlvbiddCi0gICAgICAgIHJldCwgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChjbWRsaW5lKQotICAgICAgICBpZiBlcnJvcjoKLSAgICAgICAgICAgIHByaW50KCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogJXMiICUgKGNtZGxpbmUsIGVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGVsaWYgcmV0ICE9IFRydWU6Ci0gICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6IHJldHVybmVkICVzIiAlIChjbWRsaW5lLCByZXQpKQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0IGFzIHg6Ci0gICAgICAgIHByaW50KCJYTUxSUEMgRmF1bHQgZ2V0dGluZyBjb21tYW5kbGluZTpcbiAlcyIgJSB4KQotICAgICAgICByZXR1cm4gMQotCi0gICAgIyBVc2UgYSB0aW1lb3V0IGZ1bmN0aW9uIGZvciBwcm9iaW5nIHRoZSBldmVudCBxdWV1ZSB0byBmaW5kIG91dCBpZiB3ZQotICAgICMgaGF2ZSBhIG1lc3NhZ2Ugd2FpdGluZyBmb3IgdXMuCi0gICAgZ29iamVjdC50aW1lb3V0X2FkZCAoMTAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2hhbmRsZV9pZGxlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfYnVpbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcGJhcikKLQotICAgIHRyeToKLSAgICAgICAgZ3RrLm1haW4oKQotICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6Ci0gICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCi0gICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OgotICAgICAgICAgICAgcGFzcwotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9rbm90dHkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5CmluZGV4IDI2ODU2MjcuLjk0OGY1MjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9rbm90dHkucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weQpAQCAtMjIsNyArMjIsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCB4bWxycGNsaWIKK2ltcG9ydCB4bWxycGMuY2xpZW50IGFzIHhtbHJwY2xpYgogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBwcm9ncmVzc2JhcgogaW1wb3J0IHNpZ25hbApAQCAtMzIsNiArMzIsNyBAQAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IGNvcHkKIGltcG9ydCBhdGV4aXQKKwogZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKIAogZmVhdHVyZVNldCA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFNdCkBAIC00MCwzNCArNDEsNTkgQEAKIGludGVyYWN0aXZlID0gc3lzLnN0ZG91dC5pc2F0dHkoKQogCiBjbGFzcyBCQlByb2dyZXNzKHByb2dyZXNzYmFyLlByb2dyZXNzQmFyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBtYXh2YWwpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIG1heHZhbCwgd2lkZ2V0cz1Ob25lLCBleHRyYXBvcz0tMSwgcmVzaXplX2hhbmRsZXI9Tm9uZSk6CiAgICAgICAgIHNlbGYubXNnID0gbXNnCi0gICAgICAgIHdpZGdldHMgPSBbcHJvZ3Jlc3NiYXIuUGVyY2VudGFnZSgpLCAnICcsIHByb2dyZXNzYmFyLkJhcigpLCAnICcsCi0gICAgICAgICAgIHByb2dyZXNzYmFyLkVUQSgpXQorICAgICAgICBzZWxmLmV4dHJhcG9zID0gZXh0cmFwb3MKKyAgICAgICAgaWYgbm90IHdpZGdldHM6CisgICAgICAgICAgICB3aWRnZXRzID0gW3Byb2dyZXNzYmFyLlBlcmNlbnRhZ2UoKSwgJyAnLCBwcm9ncmVzc2Jhci5CYXIoKSwgJyAnLAorICAgICAgICAgICAgcHJvZ3Jlc3NiYXIuRVRBKCldCisgICAgICAgICAgICBzZWxmLmV4dHJhcG9zID0gNAogCi0gICAgICAgIHRyeToKKyAgICAgICAgaWYgcmVzaXplX2hhbmRsZXI6CisgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdCA9IHJlc2l6ZV9oYW5kbGVyCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR1dJTkNIKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdCA9IE5vbmUKICAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuX19pbml0X18oc2VsZiwgbWF4dmFsLCBbc2VsZi5tc2cgKyAiOiAiXSArIHdpZGdldHMsIGZkPXN5cy5zdGRvdXQpCiAKLSAgICBkZWYgX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgZGVmIF9oYW5kbGVfcmVzaXplKHNlbGYsIHNpZ251bT1Ob25lLCBmcmFtZT1Ob25lKToKICAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSkKICAgICAgICAgaWYgc2VsZi5fcmVzaXplX2RlZmF1bHQ6CiAgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdChzaWdudW0sIGZyYW1lKQorCiAgICAgZGVmIGZpbmlzaChzZWxmKToKICAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuZmluaXNoKHNlbGYpCiAgICAgICAgIGlmIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0OgogICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0KQogCisgICAgZGVmIHNldG1lc3NhZ2Uoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgc2VsZi53aWRnZXRzWzBdID0gbXNnCisKKyAgICBkZWYgc2V0ZXh0cmEoc2VsZiwgZXh0cmEpOgorICAgICAgICBpZiBzZWxmLmV4dHJhcG9zID4gLTE6CisgICAgICAgICAgICBpZiBleHRyYToKKyAgICAgICAgICAgICAgICBleHRyYXN0ciA9IHN0cihleHRyYSkKKyAgICAgICAgICAgICAgICBpZiBleHRyYXN0clswXSAhPSAnICc6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhc3RyID0gJyAnICsgZXh0cmFzdHIKKyAgICAgICAgICAgICAgICBpZiBleHRyYXN0clstMV0gIT0gJyAnOgorICAgICAgICAgICAgICAgICAgICBleHRyYXN0ciArPSAnICcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXh0cmFzdHIgPSAnICcKKyAgICAgICAgICAgIHNlbGYud2lkZ2V0c1tzZWxmLmV4dHJhcG9zXSA9IGV4dHJhc3RyCisKKyAgICBkZWYgX25lZWRfdXBkYXRlKHNlbGYpOgorICAgICAgICAjIFdlIGFsd2F5cyB3YW50IHRoZSBiYXIgdG8gcHJpbnQgd2hlbiB1cGRhdGUoKSBpcyBjYWxsZWQKKyAgICAgICAgcmV0dXJuIFRydWUKKwogY2xhc3MgTm9uSW50ZXJhY3RpdmVQcm9ncmVzcyhvYmplY3QpOgogICAgIGZvYmogPSBzeXMuc3Rkb3V0CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBtYXh2YWwpOgogICAgICAgICBzZWxmLm1zZyA9IG1zZwogICAgICAgICBzZWxmLm1heHZhbCA9IG1heHZhbAorICAgICAgICBzZWxmLmZpbmlzaGVkID0gRmFsc2UKIAotICAgIGRlZiBzdGFydChzZWxmKToKKyAgICBkZWYgc3RhcnQoc2VsZiwgdXBkYXRlPVRydWUpOgogICAgICAgICBzZWxmLmZvYmoud3JpdGUoIiVzLi4uIiAlIHNlbGYubXNnKQogICAgICAgICBzZWxmLmZvYmouZmx1c2goKQogICAgICAgICByZXR1cm4gc2VsZgpAQCAtNzYsOCArMTAyLDExIEBACiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmluaXNoZWQ6CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5mb2JqLndyaXRlKCJkb25lLlxuIikKICAgICAgICAgc2VsZi5mb2JqLmZsdXNoKCkKKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IFRydWUKIAogZGVmIG5ld19wcm9ncmVzcyhtc2csIG1heHZhbCk6CiAgICAgaWYgaW50ZXJhY3RpdmU6CkBAIC0xMzQsNyArMTYzLDcgQEAKICAgICAgICAgICAgICAgICBjciA9ICgyNSwgODApCiAgICAgICAgIHJldHVybiBjcgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1haW4sIGhlbHBlciwgY29uc29sZSwgZXJyY29uc29sZSwgZm9ybWF0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFpbiwgaGVscGVyLCBjb25zb2xlLCBlcnJjb25zb2xlLCBmb3JtYXQsIHF1aWV0KToKICAgICAgICAgc2VsZi5tYWluID0gbWFpbgogICAgICAgICBzZWxmLmhlbHBlciA9IGhlbHBlcgogICAgICAgICBzZWxmLmN1dSA9IE5vbmUKQEAgLTE0Miw2ICsxNzEsOCBAQAogICAgICAgICBzZWxmLmludGVyYWN0aXZlID0gc3lzLnN0ZG91dC5pc2F0dHkoKQogICAgICAgICBzZWxmLmZvb3Rlcl9wcmVzZW50ID0gRmFsc2UKICAgICAgICAgc2VsZi5sYXN0cGlkcyA9IFtdCisgICAgICAgIHNlbGYubGFzdHRpbWUgPSBOb25lCisgICAgICAgIHNlbGYucXVpZXQgPSBxdWlldAogCiAgICAgICAgIGlmIG5vdCBzZWxmLmludGVyYWN0aXZlOgogICAgICAgICAgICAgcmV0dXJuCkBAIC0xODEsMTEgKzIxMiwxNCBAQAogICAgICAgICBjb25zb2xlLmFkZEZpbHRlcihJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIoc2VsZiwgZm9ybWF0KSkKICAgICAgICAgZXJyY29uc29sZS5hZGRGaWx0ZXIoSW50ZXJhY3RDb25zb2xlTG9nRmlsdGVyKHNlbGYsIGZvcm1hdCkpCiAKKyAgICAgICAgc2VsZi5tYWluX3Byb2dyZXNzID0gTm9uZQorCiAgICAgZGVmIGNsZWFyRm9vdGVyKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmZvb3Rlcl9wcmVzZW50OgogICAgICAgICAgICAgbGluZXMgPSBzZWxmLmZvb3Rlcl9wcmVzZW50Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHNlbGYuY3Vyc2VzLnRwYXJtKHNlbGYuY3V1LCBsaW5lcykpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHNlbGYuY3Vyc2VzLnRwYXJtKHNlbGYuZWQpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUoc2VsZi5jdXJzZXMudHBhcm0oc2VsZi5jdXUsIGxpbmVzKSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKHNlbGYuY3Vyc2VzLnRwYXJtKHNlbGYuZWQpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHNlbGYuZm9vdGVyX3ByZXNlbnQgPSBGYWxzZQogCiAgICAgZGVmIHVwZGF0ZUZvb3RlcihzZWxmKToKQEAgLTE5NCwyOCArMjI4LDgxIEBACiAgICAgICAgIGFjdGl2ZXRhc2tzID0gc2VsZi5oZWxwZXIucnVubmluZ190YXNrcwogICAgICAgICBmYWlsZWR0YXNrcyA9IHNlbGYuaGVscGVyLmZhaWxlZF90YXNrcwogICAgICAgICBydW5uaW5ncGlkcyA9IHNlbGYuaGVscGVyLnJ1bm5pbmdfcGlkcwotICAgICAgICBpZiBzZWxmLmZvb3Rlcl9wcmVzZW50IGFuZCAoc2VsZi5sYXN0Y291bnQgPT0gc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50KSBhbmQgKHNlbGYubGFzdHBpZHMgPT0gcnVubmluZ3BpZHMpOgorICAgICAgICBjdXJyZW50dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLmxhc3R0aW1lIG9yIChjdXJyZW50dGltZSAtIHNlbGYubGFzdHRpbWUgPiA1KToKKyAgICAgICAgICAgIHNlbGYuaGVscGVyLm5lZWRVcGRhdGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmxhc3R0aW1lID0gY3VycmVudHRpbWUKKyAgICAgICAgaWYgc2VsZi5mb290ZXJfcHJlc2VudCBhbmQgbm90IHNlbGYuaGVscGVyLm5lZWRVcGRhdGU6CiAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5oZWxwZXIubmVlZFVwZGF0ZSA9IEZhbHNlCiAgICAgICAgIGlmIHNlbGYuZm9vdGVyX3ByZXNlbnQ6CiAgICAgICAgICAgICBzZWxmLmNsZWFyRm9vdGVyKCkKICAgICAgICAgaWYgKG5vdCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsIG9yIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCA9PSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKSBhbmQgbm90IGxlbihhY3RpdmV0YXNrcyk6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdGFza3MgPSBbXQogICAgICAgICBmb3IgdCBpbiBydW5uaW5ncGlkczoKLSAgICAgICAgICAgIHRhc2tzLmFwcGVuZCgiJXMgKHBpZCAlcykiICUgKGFjdGl2ZXRhc2tzW3RdWyJ0aXRsZSJdLCB0KSkKKyAgICAgICAgICAgIHByb2dyZXNzID0gYWN0aXZldGFza3NbdF0uZ2V0KCJwcm9ncmVzcyIsIE5vbmUpCisgICAgICAgICAgICBpZiBwcm9ncmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwYmFyID0gYWN0aXZldGFza3NbdF0uZ2V0KCJwcm9ncmVzc2JhciIsIE5vbmUpCisgICAgICAgICAgICAgICAgcmF0ZSA9IGFjdGl2ZXRhc2tzW3RdLmdldCgicmF0ZSIsIE5vbmUpCisgICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IGFjdGl2ZXRhc2tzW3RdLmdldCgic3RhcnR0aW1lIiwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcGJhciBvciBwYmFyLmJvdW5jaW5nICE9IChwcm9ncmVzcyA8IDApOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm9ncmVzcyA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBwYmFyID0gQkJQcm9ncmVzcygiMDogJXMgKHBpZCAlcykgIiAlIChhY3RpdmV0YXNrc1t0XVsidGl0bGUiXSwgdCksIDEwMCwgd2lkZ2V0cz1bcHJvZ3Jlc3NiYXIuQm91bmNpbmdTbGlkZXIoKSwgJyddLCBleHRyYXBvcz0yLCByZXNpemVfaGFuZGxlcj1zZWxmLnNpZ3dpbmNoX2hhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBiYXIuYm91bmNpbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwYmFyID0gQkJQcm9ncmVzcygiMDogJXMgKHBpZCAlcykgIiAlIChhY3RpdmV0YXNrc1t0XVsidGl0bGUiXSwgdCksIDEwMCwgd2lkZ2V0cz1bcHJvZ3Jlc3NiYXIuUGVyY2VudGFnZSgpLCAnICcsIHByb2dyZXNzYmFyLkJhcigpLCAnJ10sIGV4dHJhcG9zPTQsIHJlc2l6ZV9oYW5kbGVyPXNlbGYuc2lnd2luY2hfaGFuZGxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGJhci5ib3VuY2luZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZXRhc2tzW3RdWyJwcm9ncmVzc2JhciJdID0gcGJhcgorICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVuZCgocGJhciwgcHJvZ3Jlc3MsIHJhdGUsIHN0YXJ0X3RpbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gYWN0aXZldGFza3NbdF0uZ2V0KCJzdGFydHRpbWUiLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHN0YXJ0X3RpbWU6CisgICAgICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVuZCgiJXMgLSAlZHMgKHBpZCAlcykiICUgKGFjdGl2ZXRhc2tzW3RdWyJ0aXRsZSJdLCBjdXJyZW50dGltZSAtIHN0YXJ0X3RpbWUsIHQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVuZCgiJXMgKHBpZCAlcykiICUgKGFjdGl2ZXRhc2tzW3RdWyJ0aXRsZSJdLCB0KSkKIAogICAgICAgICBpZiBzZWxmLm1haW4uc2h1dGRvd246CiAgICAgICAgICAgICBjb250ZW50ID0gIldhaXRpbmcgZm9yICVzIHJ1bm5pbmcgdGFza3MgdG8gZmluaXNoOiIgJSBsZW4oYWN0aXZldGFza3MpCi0gICAgICAgIGVsaWYgbm90IGxlbihhY3RpdmV0YXNrcyk6Ci0gICAgICAgICAgICBjb250ZW50ID0gIk5vIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzICglcyBvZiAlcykiICUgKHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbnRlbnQgPSAiQ3VycmVudGx5ICVzIHJ1bm5pbmcgdGFza3MgKCVzIG9mICVzKToiICUgKGxlbihhY3RpdmV0YXNrcyksIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKLSAgICAgICAgcHJpbnQoY29udGVudCkKLSAgICAgICAgbGluZXMgPSAxICsgaW50KGxlbihjb250ZW50KSAvIChzZWxmLmNvbHVtbnMgKyAxKSkKLSAgICAgICAgZm9yIHRhc2tudW0sIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzWzooc2VsZi5yb3dzIC0gMildKToKLSAgICAgICAgICAgIGNvbnRlbnQgPSAiJXM6ICVzIiAlICh0YXNrbnVtLCB0YXNrKQogICAgICAgICAgICAgcHJpbnQoY29udGVudCkKLSAgICAgICAgICAgIGxpbmVzID0gbGluZXMgKyAxICsgaW50KGxlbihjb250ZW50KSAvIChzZWxmLmNvbHVtbnMgKyAxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYucXVpZXQ6CisgICAgICAgICAgICAgICAgY29udGVudCA9ICJSdW5uaW5nIHRhc2tzICglcyBvZiAlcykiICUgKHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKKyAgICAgICAgICAgIGVsaWYgbm90IGxlbihhY3RpdmV0YXNrcyk6CisgICAgICAgICAgICAgICAgY29udGVudCA9ICJObyBjdXJyZW50bHkgcnVubmluZyB0YXNrcyAoJXMgb2YgJXMpIiAlIChzZWxmLmhlbHBlci50YXNrbnVtYmVyX2N1cnJlbnQsIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfdG90YWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRlbnQgPSAiQ3VycmVudGx5ICUycyBydW5uaW5nIHRhc2tzICglcyBvZiAlcykiICUgKGxlbihhY3RpdmV0YXNrcyksIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKKyAgICAgICAgICAgIG1heHRhc2sgPSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5tYWluX3Byb2dyZXNzIG9yIHNlbGYubWFpbl9wcm9ncmVzcy5tYXh2YWwgIT0gbWF4dGFzazoKKyAgICAgICAgICAgICAgICB3aWRnZXRzID0gWycgJywgcHJvZ3Jlc3NiYXIuUGVyY2VudGFnZSgpLCAnICcsIHByb2dyZXNzYmFyLkJhcigpXQorICAgICAgICAgICAgICAgIHNlbGYubWFpbl9wcm9ncmVzcyA9IEJCUHJvZ3Jlc3MoIlJ1bm5pbmcgdGFza3MiLCBtYXh0YXNrLCB3aWRnZXRzPXdpZGdldHMsIHJlc2l6ZV9oYW5kbGVyPXNlbGYuc2lnd2luY2hfaGFuZGxlKQorICAgICAgICAgICAgICAgIHNlbGYubWFpbl9wcm9ncmVzcy5zdGFydChGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubWFpbl9wcm9ncmVzcy5zZXRtZXNzYWdlKGNvbnRlbnQpCisgICAgICAgICAgICBwcm9ncmVzcyA9IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCAtIDEKKyAgICAgICAgICAgIGlmIHByb2dyZXNzIDwgMDoKKyAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDAKKyAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxmLm1haW5fcHJvZ3Jlc3MudXBkYXRlKHByb2dyZXNzKQorICAgICAgICAgICAgcHJpbnQoJycpCisgICAgICAgIGxpbmVzID0gMSArIGludChsZW4oY29udGVudCkgLyAoc2VsZi5jb2x1bW5zICsgMSkpCisgICAgICAgIGlmIG5vdCBzZWxmLnF1aWV0OgorICAgICAgICAgICAgZm9yIHRhc2tudW0sIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzWzooc2VsZi5yb3dzIC0gMildKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRhc2ssIHR1cGxlKToKKyAgICAgICAgICAgICAgICAgICAgcGJhciwgcHJvZ3Jlc3MsIHJhdGUsIHN0YXJ0X3RpbWUgPSB0YXNrCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYmFyLnN0YXJ0X3RpbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBwYmFyLnN0YXJ0KEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhcnRfdGltZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmFyLnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lCisgICAgICAgICAgICAgICAgICAgIHBiYXIuc2V0bWVzc2FnZSgnJXM6JXMnICUgKHRhc2tudW0sIHBiYXIubXNnLnNwbGl0KCc6JywgMSlbMV0pKQorICAgICAgICAgICAgICAgICAgICBpZiBwcm9ncmVzcyA+IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgcGJhci5zZXRleHRyYShyYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHBiYXIudXBkYXRlKHByb2dyZXNzKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHBiYXIudXBkYXRlKDEpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCcnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSAiJXM6ICVzIiAlICh0YXNrbnVtLCB0YXNrKQorICAgICAgICAgICAgICAgICAgICBwcmludChjb250ZW50KQorICAgICAgICAgICAgICAgIGxpbmVzID0gbGluZXMgKyAxICsgaW50KGxlbihjb250ZW50KSAvIChzZWxmLmNvbHVtbnMgKyAxKSkKICAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IGxpbmVzCiAgICAgICAgIHNlbGYubGFzdHBpZHMgPSBydW5uaW5ncGlkc1s6XQogICAgICAgICBzZWxmLmxhc3Rjb3VudCA9IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudApAQCAtMjQ4LDcgKzMzNSw4IEBACiAgICAgICAgICAgICAgICJiYi5jb21tYW5kLkNvbW1hbmRFeGl0IiwgImJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCIsICAiYmIuY29va2VyLkNvb2tlckV4aXQiLAogICAgICAgICAgICAgICAiYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMiLCAiYmIuZXZlbnQuTm9Qcm92aWRlciIsICJiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQiLAogICAgICAgICAgICAgICAiYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCIsICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQiLCAiYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tGYWlsZWQiLAotICAgICAgICAgICAgICAiYmIuZXZlbnQuQnVpbGRCYXNlIiwgImJiLmJ1aWxkLlRhc2tTdGFydGVkIiwgImJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQiLCAiYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCJdCisgICAgICAgICAgICAgICJiYi5ldmVudC5CdWlsZEJhc2UiLCAiYmIuYnVpbGQuVGFza1N0YXJ0ZWQiLCAiYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCIsICJiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50IiwKKyAgICAgICAgICAgICAgImJiLmJ1aWxkLlRhc2tQcm9ncmVzcyIsICJiYi5ldmVudC5Qcm9jZXNzU3RhcnRlZCIsICJiYi5ldmVudC5Qcm9jZXNzUHJvZ3Jlc3MiLCAiYmIuZXZlbnQuUHJvY2Vzc0ZpbmlzaGVkIl0KIAogZGVmIG1haW4oc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcywgdGYgPSBUZXJtaW5hbEZpbHRlcik6CiAKQEAgLTI2NSw3ICszNTMsMTAgQEAKICAgICBlcnJjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRlcnIpCiAgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKICAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKLSAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlLCBiYi5tc2cuQkJMb2dGaWx0ZXJTdGRPdXQpCisgICAgaWYgcGFyYW1zLm9wdGlvbnMucXVpZXQ6CisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGUsIGJiLm1zZy5CQkxvZ0ZpbHRlclN0ZE91dCwgYmIubXNnLkJCTG9nRm9ybWF0dGVyLldBUk5JTkcpCisgICAgZWxzZToKKyAgICAgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoY29uc29sZSwgYmIubXNnLkJCTG9nRmlsdGVyU3RkT3V0KQogICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGVycmNvbnNvbGUsIGJiLm1zZy5CQkxvZ0ZpbHRlclN0ZEVycikKICAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCiAgICAgZXJyY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQpAQCAtMjc4LDYgKzM2OSw3IEBACiAgICAgICAgIHNlcnZlci50ZXJtaW5hdGVTZXJ2ZXIoKQogICAgICAgICByZXR1cm4KIAorICAgIGNvbnNvbGVsb2cgPSBOb25lCiAgICAgaWYgY29uc29sZWxvZ2ZpbGUgYW5kIG5vdCBwYXJhbXMub3B0aW9ucy5zaG93X2Vudmlyb25tZW50IGFuZCBub3QgcGFyYW1zLm9wdGlvbnMuc2hvd192ZXJzaW9uczoKICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShjb25zb2xlbG9nZmlsZSkpCiAgICAgICAgIGNvbmxvZ2Zvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcihmb3JtYXRfc3RyKQpAQCAtMjg1LDYgKzM3NywxMiBAQAogICAgICAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlbG9nKQogICAgICAgICBjb25zb2xlbG9nLnNldEZvcm1hdHRlcihjb25sb2dmb3JtYXQpCiAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGVsb2cpCisgICAgICAgIGxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGNvbnNvbGVsb2dmaWxlKSwgJ2NvbnNvbGUtbGF0ZXN0LmxvZycpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShsb2dsaW5rKQorICAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5iYXNlbmFtZShjb25zb2xlbG9nZmlsZSksIGxvZ2xpbmspCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICBwYXNzCiAKICAgICBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCiAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRFdmVudE1hc2siLCBzZXJ2ZXIuZ2V0RXZlbnRIYW5kbGUoKSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBfZXZ0X2xpc3RdKQpAQCAtMzIxLDcgKzQxOSw3IEBACiAgICAgd2FybmluZ3MgPSAwCiAgICAgdGFza2ZhaWx1cmVzID0gW10KIAotICAgIHRlcm1maWx0ZXIgPSB0ZihtYWluLCBoZWxwZXIsIGNvbnNvbGUsIGVycmNvbnNvbGUsIGZvcm1hdCkKKyAgICB0ZXJtZmlsdGVyID0gdGYobWFpbiwgaGVscGVyLCBjb25zb2xlLCBlcnJjb25zb2xlLCBmb3JtYXQsIHBhcmFtcy5vcHRpb25zLnF1aWV0KQogICAgIGF0ZXhpdC5yZWdpc3Rlcih0ZXJtZmlsdGVyLmZpbmlzaCkKIAogICAgIHdoaWxlIFRydWU6CkBAIC0zNTAsNyArNDQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWVzIC09IDEKICAgICAgICAgICAgICAgICAgICAgaWYgdHJpZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGV2ZW50Lm1zZykKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZyhldmVudC5tc2cpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgpAQCAtMzc3LDcgKzQ3NSw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCk6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkxvZ2ZpbGUgZm9yIGZhaWxlZCBzZXRzY2VuZSB0YXNrIGlzICVzIiAlIGV2ZW50LmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkxvZ2ZpbGUgZm9yIGZhaWxlZCBzZXRzY2VuZSB0YXNrIGlzICVzIiAlIGV2ZW50LmxvZ2ZpbGUpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgogICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKQEAgLTQxMywxNSArNTExLDE5IEBACiAgICAgICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcyA9IG5ld19wcm9ncmVzcygiUGFyc2luZyByZWNpcGVzIiwgZXZlbnQudG90YWwpLnN0YXJ0KCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyk6Ci0gICAgICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcy51cGRhdGUoZXZlbnQuY3VycmVudCkKKyAgICAgICAgICAgICAgICBpZiBwYXJzZXByb2dyZXNzOgorICAgICAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLnVwZGF0ZShldmVudC5jdXJyZW50KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkdvdCBQYXJzZVByb2dyZXNzIGV2ZW50IGZvciBwYXJzaW5nIHRoYXQgbmV2ZXIgc3RhcnRlZD8iKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CiAgICAgICAgICAgICAgICAgaWYgbm90IHBhcnNlcHJvZ3Jlc3M6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KICAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLmZpbmlzaCgpCi0gICAgICAgICAgICAgICAgcHJpbnQoKCJQYXJzaW5nIG9mICVkIC5iYiBmaWxlcyBjb21wbGV0ZSAoJWQgY2FjaGVkLCAlZCBwYXJzZWQpLiAlZCB0YXJnZXRzLCAlZCBza2lwcGVkLCAlZCBtYXNrZWQsICVkIGVycm9ycy4iCi0gICAgICAgICAgICAgICAgICAgICUgKCBldmVudC50b3RhbCwgZXZlbnQuY2FjaGVkLCBldmVudC5wYXJzZWQsIGV2ZW50LnZpcnR1YWxzLCBldmVudC5za2lwcGVkLCBldmVudC5tYXNrZWQsIGV2ZW50LmVycm9ycykpKQorICAgICAgICAgICAgICAgIHBhc3JlcHJvZ3Jlc3MgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vcHRpb25zLnF1aWV0OgorICAgICAgICAgICAgICAgICAgICBwcmludCgoIlBhcnNpbmcgb2YgJWQgLmJiIGZpbGVzIGNvbXBsZXRlICglZCBjYWNoZWQsICVkIHBhcnNlZCkuICVkIHRhcmdldHMsICVkIHNraXBwZWQsICVkIG1hc2tlZCwgJWQgZXJyb3JzLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKCBldmVudC50b3RhbCwgZXZlbnQuY2FjaGVkLCBldmVudC5wYXJzZWQsIGV2ZW50LnZpcnR1YWxzLCBldmVudC5za2lwcGVkLCBldmVudC5tYXNrZWQsIGV2ZW50LmVycm9ycykpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgpAQCAtNDMyLDcgKzUzNCw4IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCk6CiAgICAgICAgICAgICAgICAgY2FjaGVwcm9ncmVzcy5maW5pc2goKQotICAgICAgICAgICAgICAgIHByaW50KCJMb2FkZWQgJWQgZW50cmllcyBmcm9tIGRlcGVuZGVuY3kgY2FjaGUuIiAlIGV2ZW50Lm51bV9lbnRyaWVzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJhbXMub3B0aW9ucy5xdWlldDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkxvYWRlZCAlZCBlbnRyaWVzIGZyb20gZGVwZW5kZW5jeSBjYWNoZS4iICUgZXZlbnQubnVtX2VudHJpZXMpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKQEAgLTQ5NCwyOCArNTk3LDQ0IEBACiAgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ25vZXhlYyB0YXNrJwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ3Rhc2snCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcgJXMgJXMgb2YgJXMgKElEOiAlcywgJXMpIiwKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUnVubmluZyAlcyAlZCBvZiAlZCAoJXMpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRzLnRvdGFsLCBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMudG90YWwsIGV2ZW50LnRhc2tzdHJpbmcpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkKToKICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCiAgICAgICAgICAgICAgICAgdGFza2ZhaWx1cmVzLmFwcGVuZChldmVudC50YXNrc3RyaW5nKQotICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkKToKLSAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiU2V0c2NlbmUgdGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIC0gcmVhbCB0YXNrIHdpbGwgYmUgcnVuIGluc3RlYWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJTZXRzY2VuZSB0YXNrICglcykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICclcycgLSByZWFsIHRhc2sgd2lsbCBiZSBydW4gaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza3N0cmluZywgZXZlbnQuZXhpdGNvZGUpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZCk6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUHJvY2Vzc1N0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MgPSBuZXdfcHJvZ3Jlc3MoZXZlbnQucHJvY2Vzc25hbWUsIGV2ZW50LnRvdGFsKQorICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3Muc3RhcnQoRmFsc2UpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlByb2Nlc3NQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgaWYgcGFyc2Vwcm9ncmVzczoKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcy51cGRhdGUoZXZlbnQucHJvZ3Jlc3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiR290IFByb2Nlc3NQcm9ncmVzcyBldmVudCBmb3Igc29tZXRpbmcgdGhhdCBuZXZlciBzdGFydGVkPyIpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlByb2Nlc3NGaW5pc2hlZCk6CisgICAgICAgICAgICAgICAgaWYgcGFyc2Vwcm9ncmVzczoKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcy5maW5pc2goKQorICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MgPSBOb25lCisgICAgICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICAgICAgIyBpZ25vcmUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5CdWlsZEJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuTWV0YWRhdGFFdmVudCwKQEAgLTUyNyw3ICs2NDYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuT3BlcmF0aW9uQ29tcGxldGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblByb2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkRpc2tGdWxsKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuRGlza0Z1bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQuVGFza1Byb2dyZXNzKSk6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmtub3duIGV2ZW50OiAlcyIsIGV2ZW50KQpAQCAtNTY3LDYgKzY4Nyw3IEBACiAgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgogICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQogICAgIHRyeToKKyAgICAgICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCiAgICAgICAgIHN1bW1hcnkgPSAiIgogICAgICAgICBpZiB0YXNrZmFpbHVyZXM6CiAgICAgICAgICAgICBzdW1tYXJ5ICs9IHBsdXJhbGlzZSgiXG5TdW1tYXJ5OiAlcyB0YXNrIGZhaWxlZDoiLApAQCAtNTc5LDcgKzcwMCw3IEBACiAgICAgICAgIGlmIHJldHVybl92YWx1ZSBhbmQgZXJyb3JzOgogICAgICAgICAgICAgc3VtbWFyeSArPSBwbHVyYWxpc2UoIlxuU3VtbWFyeTogVGhlcmUgd2FzICVzIEVSUk9SIG1lc3NhZ2Ugc2hvd24sIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuU3VtbWFyeTogVGhlcmUgd2VyZSAlcyBFUlJPUiBtZXNzYWdlcyBzaG93biwgcmV0dXJuaW5nIGEgbm9uLXplcm8gZXhpdCBjb2RlLiIsIGVycm9ycykKLSAgICAgICAgaWYgc3VtbWFyeToKKyAgICAgICAgaWYgc3VtbWFyeSBhbmQgbm90IHBhcmFtcy5vcHRpb25zLnF1aWV0OgogICAgICAgICAgICAgcHJpbnQoc3VtbWFyeSkKIAogICAgICAgICBpZiBpbnRlcnJ1cHRlZDoKQEAgLTU5MSw0ICs3MTIsOCBAQAogICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgogICAgICAgICAgICAgcGFzcwogCisgICAgaWYgY29uc29sZWxvZzoKKyAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoY29uc29sZWxvZykKKyAgICAgICAgY29uc29sZWxvZy5jbG9zZSgpCisKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvbmN1cnNlcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CmluZGV4IDk1ODlhNzcuLmQ4MWU0MTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CkBAIC00NSw3ICs0NSw3IEBACiAiIiIKIAogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCisKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MsIHN5cywgaXRlcnRvb2xzLCB0aW1lLCBzdWJwcm9jZXNzCiAKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBzeXMuZXhpdCgiRkFUQUw6IFRoZSBuY3Vyc2VzIHVpIGNvdWxkIG5vdCBsb2FkIHRoZSByZXF1aXJlZCBjdXJzZXMgcHl0aG9uIG1vZHVsZS4iKQogCiBpbXBvcnQgYmIKLWltcG9ydCB4bWxycGNsaWIKK2ltcG9ydCB4bWxycGMuY2xpZW50CiBmcm9tIGJiIGltcG9ydCB1aQogZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKIApAQCAtMjUyLDcgKzI1Miw3IEBACiAgICAgICAgICAgICBlbGlmIHJldCAhPSBUcnVlOgogICAgICAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBnZXQgZGVmYXVsdCBjb21tYW5kbGluZCEgJXMiICUgcmV0KQogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0IGFzIHg6CisgICAgICAgIGV4Y2VwdCB4bWxycGMuY2xpZW50LkZhdWx0IGFzIHg6CiAgICAgICAgICAgICBwcmludCgiWE1MUlBDIEZhdWx0IGdldHRpbmcgY29tbWFuZGxpbmU6XG4gJXMiICUgeCkKICAgICAgICAgICAgIHJldHVybgogCkBAIC0zMzEsNyArMzMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdGF3LnNldFRleHQoMCwgMCwgIiIpCiAgICAgICAgICAgICAgICAgICAgIGlmIGFjdGl2ZXRhc2tzOgogICAgICAgICAgICAgICAgICAgICAgICAgdGF3LmFwcGVuZFRleHQoIkFjdGl2ZSBUYXNrczpcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiBhY3RpdmV0YXNrcy5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiBhY3RpdmV0YXNrcy52YWx1ZXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCh0YXNrWyJ0aXRsZSJdICsgJ1xuJykKICAgICAgICAgICAgICAgICAgICAgaWYgZmFpbGVkdGFza3M6CiAgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCgiRmFpbGVkIFRhc2tzOlxuIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdG9hc3RlcnVpLnB5CmluZGV4IDZiZjRjMWYuLjk4MDhmNmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3RvYXN0ZXJ1aS5weQpAQCAtMzksNyArMzksNyBAQAogIyBtb2R1bGUgcHJvcGVydGllcyBmb3IgVUkgbW9kdWxlcyBhcmUgcmVhZCBieSBiaXRiYWtlIGFuZCB0aGUgY29udHJhY3Qgc2hvdWxkIG5vdCBiZSBicm9rZW4KIAogCi1mZWF0dXJlU2V0ID0gW2JiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5IT0JfRVhUUkFfQ0FDSEVTLCBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuU0VORF9ERVBFTkRTX1RSRUUsIGJiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5CQVNFREFUQVNUT1JFX1RSQUNLSU5HLCBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFNdCitmZWF0dXJlU2V0ID0gW2JiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5IT0JfRVhUUkFfQ0FDSEVTLCBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuQkFTRURBVEFTVE9SRV9UUkFDS0lORywgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLlNFTkRfU0FOSVRZRVZFTlRTXQogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiVG9hc3RlckxvZ2dlciIpCiBpbnRlcmFjdGl2ZSA9IHN5cy5zdGRvdXQuaXNhdHR5KCkKQEAgLTEwMiw2ICsxMDIsNyBAQAogICAgICJiYi5jb21tYW5kLkNvbW1hbmRFeGl0IiwKICAgICAiYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkIiwKICAgICAiYmIuY29va2VyLkNvb2tlckV4aXQiLAorICAgICJiYi5ldmVudC5CdWlsZEluaXQiLAogICAgICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIsCiAgICAgImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIsCiAgICAgImJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCIsCkBAIC0xMTUsNiArMTE2LDcgQEAKICAgICAiYmIuZXZlbnQuTm9Qcm92aWRlciIsCiAgICAgImJiLmV2ZW50LlBhcnNlQ29tcGxldGVkIiwKICAgICAiYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyIsCisgICAgImJiLmV2ZW50LlBhcnNlU3RhcnRlZCIsCiAgICAgImJiLmV2ZW50LlJlY2lwZVBhcnNlZCIsCiAgICAgImJiLmV2ZW50LlNhbml0eUNoZWNrIiwKICAgICAiYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQiLApAQCAtMTYzLDcgKzE2NSw3IEBACiAgICAgaW5oZXJpdGxpc3QsIF8gPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklOSEVSSVQiXSkKIAogICAgIGlmIG5vdCAiYnVpbGRoaXN0b3J5IiBpbiBpbmhlcml0bGlzdC5zcGxpdCgiICIpOgotICAgICAgICBsb2dnZXIud2FybigiYnVpbGRoaXN0b3J5IGlzIG5vdCBlbmFibGVkLiBQbGVhc2UgZW5hYmxlIElOSEVSSVQgKz0gXCJidWlsZGhpc3RvcnlcIiB0byBzZWUgaW1hZ2UgZGV0YWlscy4iKQorICAgICAgICBsb2dnZXIud2FybmluZygiYnVpbGRoaXN0b3J5IGlzIG5vdCBlbmFibGVkLiBQbGVhc2UgZW5hYmxlIElOSEVSSVQgKz0gXCJidWlsZGhpc3RvcnlcIiB0byBzZWUgaW1hZ2UgZGV0YWlscy4iKQogICAgICAgICBidWlsZF9oaXN0b3J5X2VuYWJsZWQgPSBGYWxzZQogCiAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CkBAIC0yMzEsMTkgKzIzMywzNSBAQAogICAgICAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICAgICAgICAgIyB0aGUgY29kZSB3aWxsIGxvb2sgaW50byB0aGUgcHJvdGVjdGVkIHZhcmlhYmxlcyBvZiB0aGUgZXZlbnQ7IG5vIGVhc3kgd2F5IGFyb3VuZCB0aGlzCiAKLSAgICAgICAgICAgICMgd2UgdHJlYXQgUGFyc2VTdGFydGVkIGFzIHRoZSBmaXJzdCBldmVudCBvZiB0b2FzdGVyLXRyaWdnZXJlZAotICAgICAgICAgICAgIyBidWlsZHM7IHRoYXQgd2F5IHdlIGdldCB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBpbmNsdWRlZCBpbiB0aGUgbG9nCi0gICAgICAgICAgICAjIGFuZCBhbnkgZXJyb3JzIHRoYXQgb2NjdXIgYmVmb3JlIEJ1aWxkU3RhcnRlZCBpcyBmaXJlZAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKICAgICAgICAgICAgICAgICBpZiBub3QgKGJ1aWxkX2xvZyBhbmQgYnVpbGRfbG9nX2ZpbGVfcGF0aCk6CiAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2xvZywgYnVpbGRfbG9nX2ZpbGVfcGF0aCA9IF9vcGVuX2J1aWxkX2xvZyhsb2dfZGlyKQorCisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX3N0YXJ0ZWRfYnVpbGQoKQorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zYXZlX2J1aWxkX2xvZ19maWxlX3BhdGgoYnVpbGRfbG9nX2ZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc2V0X3JlY2lwZXNfdG9fcGFyc2UoZXZlbnQudG90YWwpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKKyAgICAgICAgICAgICMgY3JlYXRlIGEgYnVpbGQgb2JqZWN0IGluIGJ1aWxkaW5mb2hlbHBlciBmcm9tIGVpdGhlciBCdWlsZEluaXQKKyAgICAgICAgICAgICMgKGlmIGF2YWlsYWJsZSkgb3IgQnVpbGRTdGFydGVkIChmb3IgamV0aHJvIGFuZCBwcmV2aW91cyB2ZXJzaW9ucykKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5CdWlsZFN0YXJ0ZWQsIGJiLmV2ZW50LkJ1aWxkSW5pdCkpOgogICAgICAgICAgICAgICAgIGlmIG5vdCAoYnVpbGRfbG9nIGFuZCBidWlsZF9sb2dfZmlsZV9wYXRoKToKICAgICAgICAgICAgICAgICAgICAgYnVpbGRfbG9nLCBidWlsZF9sb2dfZmlsZV9wYXRoID0gX29wZW5fYnVpbGRfbG9nKGxvZ19kaXIpCiAKLSAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfc3RhcnRlZF9idWlsZChldmVudCwgYnVpbGRfbG9nX2ZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc2F2ZV9idWlsZF90YXJnZXRzKGV2ZW50KQorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zYXZlX2J1aWxkX2xvZ19maWxlX3BhdGgoYnVpbGRfbG9nX2ZpbGVfcGF0aCkKKworICAgICAgICAgICAgICAgICMgZ2V0IGFkZGl0aW9uYWwgZGF0YSBmcm9tIEJ1aWxkU3RhcnRlZAorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zYXZlX2J1aWxkX2xheWVyc19hbmRfdmFyaWFibGVzKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc2V0X3JlY2lwZXNfcGFyc2VkKGV2ZW50LmN1cnJlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zZXRfcmVjaXBlc19wYXJzZWQoZXZlbnQudG90YWwpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmJ1aWxkLlRhc2tTdGFydGVkLCBiYi5idWlsZC5UYXNrU3VjY2VlZGVkLCBiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50KSk6CkBAIC0yODksMTAgKzMwNyw2IEBACiAgICAgICAgICAgICAjIHRpbWluZyBhbmQgZXJyb3IgaW5mb3JtYXRpb25zIGZyb20gdGhlIHBhcnNpbmcgcGhhc2UgaW4gVG9hc3RlcgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlNhbml0eUNoZWNrUGFzc2VkLCBiYi5ldmVudC5TYW5pdHlDaGVjaykpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MpOgpAQCAtMzQ0LDggKzM1OCw4IEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQpOgogICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCiAgICAgICAgICAgICAgICAgdGFza2ZhaWx1cmVzLmFwcGVuZChldmVudC50YXNrc3RyaW5nKQotICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0NvbXBsZXRlZCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tGYWlsZWQpKToKQEAgLTM2Myw2ICszNzcsOSBAQAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMgKz0gMQogICAgICAgICAgICAgICAgICAgICBlcnJvcmNvZGUgPSAxCiAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIsIGV2ZW50LmVycm9yKQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc2Nhbl9pbWFnZV9hcnRpZmFjdHMoKQorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuY2xvbmVfcmVxdWlyZWRfc2RrX2FydGlmYWN0cygpCiAKICAgICAgICAgICAgICAgICAjIHR1cm4gb2ZmIGxvZ2dpbmcgdG8gdGhlIGN1cnJlbnQgYnVpbGQgbG9nCiAgICAgICAgICAgICAgICAgX2Nsb3NlX2J1aWxkX2xvZyhidWlsZF9sb2cpCkBAIC00MTAsMTggKzQyNywxOCBAQAogICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfdGFyZ2V0X3BhY2thZ2VfZGF0YShldmVudCkKICAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIk1pc3NlZFNzdGF0ZSI6CiAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9taXNzZWRfc3RhdGVfdGFza3MoZXZlbnQpCi0gICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJJbWFnZUZpbGVTaXplIjoKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV90YXJnZXRfaW1hZ2VfZmlsZShldmVudCkKLSAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkFydGlmYWN0RmlsZVNpemUiOgotICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FydGlmYWN0X2ltYWdlX2ZpbGUoZXZlbnQpCi0gICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJMaWNlbnNlTWFuaWZlc3RQYXRoIjoKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aChldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIlNES0FydGlmYWN0SW5mbyI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zY2FuX3Nka19hcnRpZmFjdHMoZXZlbnQpCiAgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJTZXRCUkJFIjoKICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLmJyYmUgPSBidWlsZGluZm9oZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJUYXNrQXJ0aWZhY3RzIjoKKyAgICAgICAgICAgICAgICAgICAgIyBub3QgaW1wbGVtZW50ZWQgeWV0CisgICAgICAgICAgICAgICAgICAgICMgc2VlIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyODMgZm9yIGRldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiT1NFcnJvckV4Y2VwdGlvbiI6CiAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihldmVudCkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVucHJvY2Vzc2VkIE1ldGFkYXRhRXZlbnQgJXMgIiwgc3RyKGV2ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbnByb2Nlc3NlZCBNZXRhZGF0YUV2ZW50ICVzIiwgZXZlbnQudHlwZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb29rZXIuQ29va2VyRXhpdCk6CkBAIC00MzMsMTUgKzQ1MCwzMyBAQAogICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9kZXBlbmRlbmN5X2luZm9ybWF0aW9uKGV2ZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJVbmtub3duIGV2ZW50OiAlcyIsIGV2ZW50KQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlVua25vd24gZXZlbnQ6ICVzIiwgZXZlbnQpCiAgICAgICAgICAgICByZXR1cm5fdmFsdWUgKz0gMQogCiAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6Ci0gICAgICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbwotICAgICAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6Ci0gICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkVudmlyb25tZW50RXJyb3I6ICVzIiAlIGlvZXJyb3IpCisgICAgICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbyBzeXN0ZW0gY2FsbHMKKyAgICAgICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OiAjIGVycm5vIDQgaXMgRUlOVFIKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiU2tpcHBlZCBFSU5UUjogJXMiICUgaW9lcnJvcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDEKKyAgICAgICAgICAgIGlmIHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuS2V5Ym9hcmQgSW50ZXJydXB0LCBleGl0aW5nIG9ic2VydmVyLi4uIikKKyAgICAgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHkgYW5kIG1haW4uc2h1dGRvd24gPT0gMToKKyAgICAgICAgICAgICAgICBwcmludCgiXG5TZWNvbmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBzdG9wcGluZy4uLlxuIikKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGNsZWFubHkgc3RvcDogJXMiICUgZXJyb3IpCisgICAgICAgICAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seSBhbmQgbWFpbi5zaHV0ZG93biA9PSAwOgorICAgICAgICAgICAgICAgIHByaW50KCJcbktleWJvYXJkIEludGVycnVwdCwgY2xvc2luZyBkb3duLi4uXG4iKQorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGNsZWFubHkgc2h1dGRvd246ICVzIiAlIGVycm9yKQorICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLmNhbmNlbF9jbGlfYnVpbGQoKQorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IG1haW4uc2h1dGRvd24gKyAxCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICMgcHJpbnQgZXJyb3JzIHRvIGxvZwogICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawpAQCAtNDYxLDUgKzQ5Niw1IEBACiAgICAgaWYgaW50ZXJydXB0ZWQgYW5kIHJldHVybl92YWx1ZSA9PSAwOgogICAgICAgICByZXR1cm5fdmFsdWUgKz0gMQogCi0gICAgbG9nZ2VyLndhcm4oIlJldHVybiB2YWx1ZSBpcyAlZCIsIHJldHVybl92YWx1ZSkKKyAgICBsb2dnZXIud2FybmluZygiUmV0dXJuIHZhbHVlIGlzICVkIiwgcmV0dXJuX3ZhbHVlKQogICAgIHJldHVybiByZXR1cm5fdmFsdWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWV2ZW50LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkKaW5kZXggZGYwOTNjNS4uOTU0MmI5MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkKQEAgLTI1LDcgKzI1LDcgQEAKICIiIgogCiBpbXBvcnQgc29ja2V0LCB0aHJlYWRpbmcsIHBpY2tsZSwgY29sbGVjdGlvbnMKLWZyb20gU2ltcGxlWE1MUlBDU2VydmVyIGltcG9ydCBTaW1wbGVYTUxSUENTZXJ2ZXIsIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCitmcm9tIHhtbHJwYy5zZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKIAogY2xhc3MgQkJVSUV2ZW50UXVldWU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIEJCU2VydmVyLCBjbGllbnRpbmZvPSgibG9jYWxob3N0LCAwIikpOgpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlX3JlcXVlc3QoKQogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkJCVUlFdmVudFF1ZXVlLnN0YXJ0Q2FsbGJhY2tIYW5kbGVyOiBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIGhhbmRsZSByZXF1ZXN0OiAlc1xuJXMiICUgKGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkJCVUlFdmVudFF1ZXVlLnN0YXJ0Q2FsbGJhY2tIYW5kbGVyOiBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIGhhbmRsZSByZXF1ZXN0OiAlc1xuJXMiICUgKGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpKQogCiAgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9jbG9zZSgpCiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuX19pbml0X18oIHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlcj1TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYWxsb3dfbm9uZT1UcnVlLCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlKQogCiAgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgogICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpaGVscGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpaGVscGVyLnB5CmluZGV4IGRiNzBiNzYuLmZkYTdjYzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWloZWxwZXIucHkKQEAgLTE4LDYgKzE4LDcgQEAKICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KIAogaW1wb3J0IGJiLmJ1aWxkCitpbXBvcnQgdGltZQogCiBjbGFzcyBCQlVJSGVscGVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTMxLDI5ICszMiwzMyBAQAogCiAgICAgZGVmIGV2ZW50SGFuZGxlcihzZWxmLCBldmVudCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdGFydGVkKToKLSAgICAgICAgICAgIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdID0geyAndGl0bGUnIDogIiVzICVzIiAlIChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spIH0KKyAgICAgICAgICAgIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdID0geyAndGl0bGUnIDogIiVzICVzIiAlIChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spLCAnc3RhcnR0aW1lJyA6IHRpbWUudGltZSgpIH0KICAgICAgICAgICAgIHNlbGYucnVubmluZ19waWRzLmFwcGVuZChldmVudC5waWQpCiAgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQpOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQpOgogICAgICAgICAgICAgZGVsIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdCiAgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfcGlkcy5yZW1vdmUoZXZlbnQucGlkKQogICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQotICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50KToKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50KToKICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bm5pbmdfdGFza3NbZXZlbnQucGlkXQogICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMucmVtb3ZlKGV2ZW50LnBpZCkKICAgICAgICAgICAgICMgRG9uJ3QgYWRkIHRvIHRoZSBmYWlsZWQgdGFza3MgbGlzdCBzaW5jZSB0aGlzIGlzIGUuZy4gYSBzZXRzY2VuZSB0YXNrIGZhaWx1cmUKICAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZCk6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZCk6CiAgICAgICAgICAgICBkZWwgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF0KICAgICAgICAgICAgIHNlbGYucnVubmluZ19waWRzLnJlbW92ZShldmVudC5waWQpCiAgICAgICAgICAgICBzZWxmLmZhaWxlZF90YXNrcy5hcHBlbmQoIHsgJ3RpdGxlJyA6ICIlcyAlcyIgJSAoZXZlbnQuX3BhY2thZ2UsIGV2ZW50Ll90YXNrKX0pCiAgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQpIG9yIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCkgb3IgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKICAgICAgICAgICAgIHNlbGYudGFza251bWJlcl9jdXJyZW50ID0gZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuYWN0aXZlICsgZXZlbnQuc3RhdHMuZmFpbGVkICsgMQogICAgICAgICAgICAgc2VsZi50YXNrbnVtYmVyX3RvdGFsID0gZXZlbnQuc3RhdHMudG90YWwKICAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrUHJvZ3Jlc3MpOgorICAgICAgICAgICAgaWYgZXZlbnQucGlkID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfdGFza3NbZXZlbnQucGlkXVsncHJvZ3Jlc3MnXSA9IGV2ZW50LnByb2dyZXNzCisgICAgICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF1bJ3JhdGUnXSA9IGV2ZW50LnJhdGUKKyAgICAgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCiAKICAgICBkZWYgZ2V0VGFza3Moc2VsZik6CiAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IEZhbHNlCiAgICAgICAgIHJldHVybiAoc2VsZi5ydW5uaW5nX3Rhc2tzLCBzZWxmLmZhaWxlZF90YXNrcykKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3V0aWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3V0aWxzLnB5CmluZGV4IDM1NDRiYmUuLjcyOTg0OGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91dGlscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdXRpbHMucHkKQEAgLTI3LDYgKzI3LDggQEAKIGltcG9ydCBiYi5tc2cKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBmY250bAoraW1wb3J0IGltcAoraW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBnbG9iCiBpbXBvcnQgZm5tYXRjaApAQCAtMzQsMTIgKzM2LDE1IEBACiBpbXBvcnQgZXJybm8KIGltcG9ydCBzaWduYWwKIGltcG9ydCBhc3QKLWZyb20gY29tbWFuZHMgaW1wb3J0IGdldHN0YXR1c291dHB1dAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29weQorZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBnZXRzdGF0dXNvdXRwdXQKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKIGZyb20gY3R5cGVzIGltcG9ydCBjZGxsCiAKLQogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuVXRpbCIpCitweXRob25fZXh0ZW5zaW9ucyA9IFtlIGZvciBlLCBfLCBfIGluIGltcC5nZXRfc3VmZml4ZXMoKV0KKwogCiBkZWYgY2xlYW5fY29udGV4dCgpOgogICAgIHJldHVybiB7CkBAIC03MSw3ICs3Niw3IEBACiAgICAgICAgICAgICByLmFwcGVuZCgoMCwgaW50KG0uZ3JvdXAoMSkpKSkKICAgICAgICAgICAgIHMgPSBtLmdyb3VwKDIpCiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBzWzBdIGluIHN0cmluZy5sZXR0ZXJzOgorICAgICAgICBpZiBzWzBdIGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzOgogICAgICAgICAgICAgbSA9IGFscGhhX3JlZ2V4cC5tYXRjaChzKQogICAgICAgICAgICAgci5hcHBlbmQoKDEsIG0uZ3JvdXAoMSkpKQogICAgICAgICAgICAgcyA9IG0uZ3JvdXAoMikKQEAgLTE4OCw3ICsxOTMsNyBAQAogICAgICJERVBFTkQxIChvcHRpb25hbCB2ZXJzaW9uKSBERVBFTkQyIChvcHRpb25hbCB2ZXJzaW9uKSAuLi4iCiAgICAgYW5kIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgZGVwZW5kZW5jaWVzIGFuZCB2ZXJzaW9ucy4KICAgICAiIiIKLSAgICByID0ge30KKyAgICByID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQogICAgIGwgPSBzLnJlcGxhY2UoIiwiLCAiIikuc3BsaXQoKQogICAgIGxhc3RkZXAgPSBOb25lCiAgICAgbGFzdGNtcCA9ICIiCkBAIC0yNDUsNiArMjUwLDcgQEAKICAgICAgICAgaWYgbm90IChpIGluIHIgYW5kIHJbaV0pOgogICAgICAgICAgICAgcltsYXN0ZGVwXSA9IFtdCiAKKyAgICByID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3Qoc29ydGVkKHIuaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzBdKSkKICAgICByZXR1cm4gcgogCiBkZWYgZXhwbG9kZV9kZXBfdmVyc2lvbnMocyk6CkBAIC0zNjksNiArMzc1LDEyIEBACiAgICAgICAgICAgICBsZXZlbCA9IGxldmVsICsgMQogCiAgICAgICAgIGVycm9yLmFwcGVuZCgiRXhjZXB0aW9uOiAlcyIgJSAnJy5qb2luKGV4Y2VwdGlvbikpCisKKyAgICAgICAgIyBJZiB0aGUgZXhjZXB0aW9uIGlzIGZyb20gc3B3YW5pbmcgYSB0YXNrLCBsZXQncyBiZSBoZWxwZnVsIGFuZCBkaXNwbGF5CisgICAgICAgICMgdGhlIG91dHB1dCAod2hpY2ggaG9wZWZ1bGx5IGluY2x1ZGVzIHN0ZGVycikuCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiU3VicHJvY2VzcyBvdXRwdXQ6IikKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCh2YWx1ZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIsIGVycm9ycz0iaWdub3JlIikpCiAgICAgZmluYWxseToKICAgICAgICAgbG9nZ2VyLmVycm9yKCJcbiIuam9pbihlcnJvcikpCiAKQEAgLTQwMyw4ICs0MTUsMTMgQEAKIGRlZiBzaW1wbGVfZXhlYyhjb2RlLCBjb250ZXh0KToKICAgICBleGVjKGNvZGUsIGdldF9jb250ZXh0KCksIGNvbnRleHQpCiAKLWRlZiBiZXR0ZXJfZXZhbChzb3VyY2UsIGxvY2Fscyk6Ci0gICAgcmV0dXJuIGV2YWwoc291cmNlLCBnZXRfY29udGV4dCgpLCBsb2NhbHMpCitkZWYgYmV0dGVyX2V2YWwoc291cmNlLCBsb2NhbHMsIGV4dHJhZ2xvYmFscyA9IE5vbmUpOgorICAgIGN0eCA9IGdldF9jb250ZXh0KCkKKyAgICBpZiBleHRyYWdsb2JhbHM6CisgICAgICAgIGN0eCA9IGNvcHkuY29weShjdHgpCisgICAgICAgIGZvciBnIGluIGV4dHJhZ2xvYmFsczoKKyAgICAgICAgICAgIGN0eFtnXSA9IGV4dHJhZ2xvYmFsc1tnXQorICAgIHJldHVybiBldmFsKHNvdXJjZSwgY3R4LCBsb2NhbHMpCiAKIEBjb250ZXh0bWFuYWdlcgogZGVmIGZpbGVzbG9ja2VkKGZpbGVzKToKQEAgLTU2Myw2ICs1ODAsOCBAQAogICAgICAgICAnU0hFTEwnLAogICAgICAgICAnVEVSTScsCiAgICAgICAgICdVU0VSJywKKyAgICAgICAgJ0xDX0FMTCcsCisgICAgICAgICdCQlNFUlZFUicsCiAgICAgXQogCiBkZWYgcHJlc2VydmVkX2VudnZhcnMoKToKQEAgLTU4MiwxNCArNjAxLDE5IEBACiAgICAgIiIiCiAKICAgICByZW1vdmVkX3ZhcnMgPSB7fQotICAgIGZvciBrZXkgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgZm9yIGtleSBpbiBsaXN0KG9zLmVudmlyb24pOgogICAgICAgICBpZiBrZXkgaW4gZ29vZF92YXJzOgogICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICByZW1vdmVkX3ZhcnNba2V5XSA9IG9zLmVudmlyb25ba2V5XQotICAgICAgICBvcy51bnNldGVudihrZXkpCiAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KIAorICAgICMgSWYgd2Ugc3Bhd24gYSBweXRob24gcHJvY2Vzcywgd2UgbmVlZCB0byBoYXZlIGEgVVRGLTggbG9jYWxlLCBlbHNlIHB5dGhvbidzIGZpbGUKKyAgICAjIGFjY2VzcyBtZXRob2RzIHdpbGwgdXNlIGFzY2lpLiBZb3UgY2FuJ3QgY2hhbmdlIHRoYXQgbW9kZSBvbmNlIHRoZSBpbnRlcnByZXRlciBpcworICAgICMgc3RhcnRlZCBzbyB3ZSBoYXZlIHRvIGVuc3VyZSBhIGxvY2FsZSBpcyBzZXQuIElkZWFsbHkgd2UnZCB1c2UgQy5VVEYtOCBidXQgbm90IGFsbAorICAgICMgZGlzdHJvcyBzdXBwb3J0IHRoYXQgYW5kIHdlIG5lZWQgdG8gc2V0IHNvbWV0aGluZy4KKyAgICBvcy5lbnZpcm9uWyJMQ19BTEwiXSA9ICJlbl9VUy5VVEYtOCIKKwogICAgIGlmIHJlbW92ZWRfdmFyczoKICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZW1vdmVkIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50OiAlcyIsICIsICIuam9pbihyZW1vdmVkX3ZhcnMua2V5cygpKSkKIApAQCAtNjI5LDcgKzY1Myw3IEBACiAgICAgIiIiCiAgICAgUmVtb3ZlIGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgICAgIiIiCi0gICAgZm9yIHMgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgZm9yIHMgaW4gbGlzdChvcy5lbnZpcm9uLmtleXMoKSk6CiAgICAgICAgIG9zLnVuc2V0ZW52KHMpCiAgICAgICAgIGRlbCBvcy5lbnZpcm9uW3NdCiAKQEAgLTgxOCw3ICs4NDIsNyBAQAogICAgICAgICBpZiBub3Qgc3N0YXQ6CiAgICAgICAgICAgICBzc3RhdCA9IG9zLmxzdGF0KHNyYykKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogc3RhdCBvZiAlcyBmYWlsZWQgKCVzKSIgJSAoc3JjLCBlKSkKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoImNvcHlmaWxlOiBzdGF0IG9mICVzIGZhaWxlZCAoJXMpIiAlIChzcmMsIGUpKQogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlc3RleGlzdHMgPSAxCkBAIC04NDUsNyArODY5LDcgQEAKICAgICAgICAgICAgICNvcy5sY2hvd24oZGVzdCxzc3RhdFtzdGF0LlNUX1VJRF0sc3N0YXRbc3RhdC5TVF9HSURdKQogICAgICAgICAgICAgcmV0dXJuIG9zLmxzdGF0KGRlc3QpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogZmFpbGVkIHRvIGNyZWF0ZSBzeW1saW5rICVzIHRvICVzICglcykiICUgKGRlc3QsIHRhcmdldCwgZSkpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiY29weWZpbGU6IGZhaWxlZCB0byBjcmVhdGUgc3ltbGluayAlcyB0byAlcyAoJXMpIiAlIChkZXN0LCB0YXJnZXQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBpZiBzdGF0LlNfSVNSRUcoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CkBAIC04NjAsNyArODg0LDcgQEAKICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QgKyAiI25ldyIpCiAgICAgICAgICAgICBvcy5yZW5hbWUoZGVzdCArICIjbmV3IiwgZGVzdCkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBjb3B5ICVzIHRvICVzIGZhaWxlZCAoJXMpIiAlIChzcmMsIGRlc3QsIGUpKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoImNvcHlmaWxlOiBjb3B5ICVzIHRvICVzIGZhaWxlZCAoJXMpIiAlIChzcmMsIGRlc3QsIGUpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzcmNjaG93bjoKQEAgLTg3MSwxMyArODk1LDEzIEBACiAgICAgICAgICN3ZSBkb24ndCB5ZXQgaGFuZGxlIHNwZWNpYWwsIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIC9iaW4vbXYKICAgICAgICAgYSA9IGdldHN0YXR1c291dHB1dCgiL2Jpbi9jcCAtZiAiICsgIiciICsgc3JjICsgIicgJyIgKyBkZXN0ICsgIiciKQogICAgICAgICBpZiBhWzBdICE9IDA6Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IGZhaWxlZCB0byBjb3B5IHNwZWNpYWwgZmlsZSAlcyB0byAlcyAoJXMpIiAlIChzcmMsIGRlc3QsIGEpKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoImNvcHlmaWxlOiBmYWlsZWQgdG8gY29weSBzcGVjaWFsIGZpbGUgJXMgdG8gJXMgKCVzKSIgJSAoc3JjLCBkZXN0LCBhKSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZSAjIGZhaWx1cmUKICAgICB0cnk6CiAgICAgICAgIG9zLmxjaG93bihkZXN0LCBzc3RhdFtzdGF0LlNUX1VJRF0sIHNzdGF0W3N0YXQuU1RfR0lEXSkKICAgICAgICAgb3MuY2htb2QoZGVzdCwgc3RhdC5TX0lNT0RFKHNzdGF0W3N0YXQuU1RfTU9ERV0pKSAjIFN0aWNreSBpcyByZXNldCBvbiBjaG93bgogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBmYWlsZWQgdG8gY2hvd24vY2htb2QgJXMgKCVzKSIgJSAoZGVzdCwgZSkpCisgICAgICAgIGxvZ2dlci53YXJuaW5nKCJjb3B5ZmlsZTogZmFpbGVkIHRvIGNob3duL2NobW9kICVzICglcykiICUgKGRlc3QsIGUpKQogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGlmIG5ld210aW1lOgpAQCAtOTQ2LDcgKzk3MCw3IEBACiAgICAgaWYgbm90IHZhbDoKICAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKICAgICB2YWwgPSBzZXQodmFsLnNwbGl0KCkpCi0gICAgaWYgaXNpbnN0YW5jZShjaGVja3ZhbHVlcywgYmFzZXN0cmluZyk6CisgICAgaWYgaXNpbnN0YW5jZShjaGVja3ZhbHVlcywgc3RyKToKICAgICAgICAgY2hlY2t2YWx1ZXMgPSBzZXQoY2hlY2t2YWx1ZXMuc3BsaXQoKSkKICAgICBlbHNlOgogICAgICAgICBjaGVja3ZhbHVlcyA9IHNldChjaGVja3ZhbHVlcykKQEAgLTk1OSw3ICs5ODMsNyBAQAogICAgIGlmIG5vdCB2YWw6CiAgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCiAgICAgdmFsID0gc2V0KHZhbC5zcGxpdCgpKQotICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZXMsIGJhc2VzdHJpbmcpOgorICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZXMsIHN0cik6CiAgICAgICAgIGNoZWNrdmFsdWVzID0gc2V0KGNoZWNrdmFsdWVzLnNwbGl0KCkpCiAgICAgZWxzZToKICAgICAgICAgY2hlY2t2YWx1ZXMgPSBzZXQoY2hlY2t2YWx1ZXMpCkBAIC0xMDI4LDcgKzEwNTIsNyBAQAogICAgICAgICBhaWR4ICs9IDEKICAgICAjIEhhbmRsZSBrZXl3b3JkIGFyZ3VtZW50cwogICAgIGNvbnRleHQudXBkYXRlKGt3YXJncykKLSAgICBmdW5jYXJncy5leHRlbmQoWyclcz0lcycgJSAoYXJnLCBhcmcpIGZvciBhcmcgaW4ga3dhcmdzLml0ZXJrZXlzKCldKQorICAgIGZ1bmNhcmdzLmV4dGVuZChbJyVzPSVzJyAlIChhcmcsIGFyZykgZm9yIGFyZyBpbiBrd2FyZ3Mua2V5cygpXSkKICAgICBjb2RlID0gJ3JldHZhbCA9ICVzKCVzKScgJSAoZnVuYywgJywgJy5qb2luKGZ1bmNhcmdzKSkKICAgICBjb21wID0gYmIudXRpbHMuYmV0dGVyX2NvbXBpbGUoY29kZSwgJzxzdHJpbmc+JywgJzxzdHJpbmc+JykKICAgICBiYi51dGlscy5iZXR0ZXJfZXhlYyhjb21wLCBjb250ZXh0LCBjb2RlLCAnPHN0cmluZz4nKQpAQCAtMTA1Nyw3ICsxMDgxLDcgQEAKICAgICAgICAgICAgICAgICBuZXdsaW5lczogbGlzdCBvZiBsaW5lcyB1cCB0byB0aGlzIHBvaW50LiBZb3UgY2FuIHVzZQogICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHByZXBlbmQgbGluZXMgYmVmb3JlIHRoaXMgdmFyaWFibGUgc2V0dGluZwogICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaC4KLSAgICAgICAgICAgIGFuZCBzaG91bGQgcmV0dXJuIGEgdGhyZWUtZWxlbWVudCB0dXBsZToKKyAgICAgICAgICAgIGFuZCBzaG91bGQgcmV0dXJuIGEgZm91ci1lbGVtZW50IHR1cGxlOgogICAgICAgICAgICAgICAgIG5ld3ZhbHVlOiBuZXcgdmFsdWUgdG8gc3Vic3RpdHV0ZSBpbiwgb3IgTm9uZSB0byBkcm9wCiAgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBzZXR0aW5nIGVudGlyZWx5LiAoSWYgdGhlIHJlbW92YWwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyBpbiB0d28gY29uc2VjdXRpdmUgYmxhbmsgbGluZXMsIG9uZSBvZiB0aGUKQEAgLTEwNzEsNiArMTA5NSw4IEBACiAgICAgICAgICAgICAgICAgICAgIG11bHRpLWxpbmUgdmFsdWUgdG8gY29udGludWUgb24gdGhlIHNhbWUgbGluZSBhcwogICAgICAgICAgICAgICAgICAgICB0aGUgYXNzaWdubWVudCwgRmFsc2UgdG8gaW5kZW50IGJlZm9yZSB0aGUgZmlyc3QKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC4KKyAgICAgICAgICAgIFRvIGNsYXJpZnksIGlmIHlvdSB3aXNoIG5vdCB0byBjaGFuZ2UgdGhlIHZhbHVlLCB0aGVuIHlvdQorICAgICAgICAgICAgd291bGQgcmV0dXJuIGxpa2UgdGhpczogcmV0dXJuIG9yaWd2YWx1ZSwgTm9uZSwgMCwgVHJ1ZQogICAgICAgICBtYXRjaF9vdmVycmlkZXM6IFRydWUgdG8gbWF0Y2ggaXRlbXMgd2l0aCBfb3ZlcnJpZGVzIG9uIHRoZSBlbmQsCiAgICAgICAgICAgICBGYWxzZSBvdGhlcndpc2UKICAgICBSZXR1cm5zIGEgdHVwbGU6CkBAIC0xMTE1LDcgKzExNDEsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB2YXJzZXRfbmV3ID0gdmFyc2V0X3N0YXJ0CiAKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5kZW50LCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGluZGVudCwgaW50KToKICAgICAgICAgICAgICAgICBpZiBpbmRlbnQgPT0gLTE6CiAgICAgICAgICAgICAgICAgICAgIGluZGVudHNwYyA9ICcgJyAqIChsZW4odmFyc2V0X25ldykgKyAyKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xMTgzLDcgKzEyMDksNyBAQAogICAgICAgICAgICAgICAgIGluX3ZhciA9IE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNraXAgPSBGYWxzZQotICAgICAgICAgICAgZm9yICh2YXJuYW1lLCB2YXJfcmUpIGluIHZhcl9yZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgKHZhcm5hbWUsIHZhcl9yZSkgaW4gdmFyX3Jlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHJlcyA9IHZhcl9yZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgICAgIGlmIHJlczoKICAgICAgICAgICAgICAgICAgICAgaXNmdW5jID0gdmFybmFtZS5lbmRzd2l0aCgnKCknKQpAQCAtMTM2MSw3ICsxMzg3LDcgQEAKICAgICAgICAgIyBVc2UgbG9uZ2VzdCBwYXRoIHNvIHdlIGhhbmRsZSBuZXN0ZWQgbGF5ZXJzCiAgICAgICAgIG1hdGNobGVuID0gMAogICAgICAgICBtYXRjaCA9IE5vbmUKLSAgICAgICAgZm9yIGNvbGxlY3Rpb24sIHJlZ2V4IGluIGNvbGxlY3Rpb25fcmVzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgY29sbGVjdGlvbiwgcmVnZXggaW4gY29sbGVjdGlvbl9yZXMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGxlbihyZWdleCkgPiBtYXRjaGxlbiBhbmQgcmUubWF0Y2gocmVnZXgsIHBhdGgpOgogICAgICAgICAgICAgICAgIG1hdGNobGVuID0gbGVuKHJlZ2V4KQogICAgICAgICAgICAgICAgIG1hdGNoID0gY29sbGVjdGlvbgpAQCAtMTQyNyw5ICsxNDUzLDggQEAKICAgICAjIFRoaXMgaXMgbmljZSB0byBoYXZlIGZvciBkZWJ1Z2dpbmcsIG5vdCBlc3NlbnRpYWwKICAgICB0cnk6CiAgICAgICAgIGxpYmMgPSBjZGxsLkxvYWRMaWJyYXJ5KCdsaWJjLnNvLjYnKQotICAgICAgICBidWZmID0gY3JlYXRlX3N0cmluZ19idWZmZXIobGVuKG5hbWUpKzEpCi0gICAgICAgIGJ1ZmYudmFsdWUgPSBuYW1lCi0gICAgICAgIGxpYmMucHJjdGwoMTUsIGJ5cmVmKGJ1ZmYpLCAwLCAwLCAwKQorICAgICAgICBidWYgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcihieXRlcyhuYW1lLCAndXRmLTgnKSkKKyAgICAgICAgbGliYy5wcmN0bCgxNSwgYnlyZWYoYnVmKSwgMCwgMCwgMCkKICAgICBleGNlcHQ6CiAgICAgICAgIHBhc3MKIApAQCAtMTQzOCw3ICsxNDYzLDggQEAKICAgICBpbXBvcnQgb3MKIAogICAgIHZhcmlhYmxlcyA9IFsnaHR0cF9wcm94eScsICdIVFRQX1BST1hZJywgJ2h0dHBzX3Byb3h5JywgJ0hUVFBTX1BST1hZJywKLSAgICAgICAgICAgICAgICAgICAgJ2Z0cF9wcm94eScsICdGVFBfUFJPWFknLCAnbm9fcHJveHknLCAnTk9fUFJPWFknXQorICAgICAgICAgICAgICAgICAgICAnZnRwX3Byb3h5JywgJ0ZUUF9QUk9YWScsICdub19wcm94eScsICdOT19QUk9YWScsCisgICAgICAgICAgICAgICAgICAgICdHSVRfUFJPWFlfQ09NTUFORCddCiAgICAgZXhwb3J0ZWQgPSBGYWxzZQogCiAgICAgZm9yIHYgaW4gdmFyaWFibGVzOgpAQCAtMTQ1MSwzICsxNDc3LDI5IEBACiAgICAgICAgICAgICAgICAgZXhwb3J0ZWQgPSBUcnVlCiAKICAgICByZXR1cm4gZXhwb3J0ZWQKKworCitkZWYgbG9hZF9wbHVnaW5zKGxvZ2dlciwgcGx1Z2lucywgcGx1Z2lucGF0aCk6CisgICAgZGVmIGxvYWRfcGx1Z2luKG5hbWUpOgorICAgICAgICBsb2dnZXIuZGVidWcoJ0xvYWRpbmcgcGx1Z2luICVzJyAlIG5hbWUpCisgICAgICAgIGZwLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobmFtZSwgW3BsdWdpbnBhdGhdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gaW1wLmxvYWRfbW9kdWxlKG5hbWUsIGZwLCBwYXRobmFtZSwgZGVzY3JpcHRpb24pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBmcDoKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBsb2dnZXIuZGVidWcoJ0xvYWRpbmcgcGx1Z2lucyBmcm9tICVzLi4uJyAlIHBsdWdpbnBhdGgpCisKKyAgICBleHBhbmRlZCA9IChnbG9iLmdsb2Iob3MucGF0aC5qb2luKHBsdWdpbnBhdGgsICcqJyArIGV4dCkpCisgICAgICAgICAgICAgICAgZm9yIGV4dCBpbiBweXRob25fZXh0ZW5zaW9ucykKKyAgICBmaWxlcyA9IGl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxlKGV4cGFuZGVkKQorICAgIG5hbWVzID0gc2V0KG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdIGZvciBmbiBpbiBmaWxlcykKKyAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgaWYgbmFtZSAhPSAnX19pbml0X18nOgorICAgICAgICAgICAgcGx1Z2luID0gbG9hZF9wbHVnaW4obmFtZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAncGx1Z2luX2luaXQnKToKKyAgICAgICAgICAgICAgICBvYmogPSBwbHVnaW4ucGx1Z2luX2luaXQocGx1Z2lucykKKyAgICAgICAgICAgICAgICBwbHVnaW5zLmFwcGVuZChvYmogb3IgcGx1Z2luKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwbHVnaW5zLmFwcGVuZChwbHVnaW4pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkOTUxMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYmxheWVycy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIgQEAKK2Zyb20gcGtndXRpbCBpbXBvcnQgZXh0ZW5kX3BhdGgKK19fcGF0aF9fID0gZXh0ZW5kX3BhdGgoX19wYXRoX18sIF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JibGF5ZXJzL2FjdGlvbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYmxheWVycy9hY3Rpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5YWUyNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYmxheWVycy9hY3Rpb24ucHkKQEAgLTAsMCArMSwyMzMgQEAKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCBiYi51dGlscworCitmcm9tIGJibGF5ZXJzLmNvbW1vbiBpbXBvcnQgTGF5ZXJQbHVnaW4KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2JpdGJha2UtbGF5ZXJzJykKKworCitkZWYgcGx1Z2luX2luaXQocGx1Z2lucyk6CisgICAgcmV0dXJuIEFjdGlvblBsdWdpbigpCisKKworY2xhc3MgQWN0aW9uUGx1Z2luKExheWVyUGx1Z2luKToKKyAgICBkZWYgZG9fYWRkX2xheWVyKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBsYXllciB0byBiYmxheWVycy5jb25mLiIiIgorICAgICAgICBsYXllcmRpciA9IG9zLnBhdGguYWJzcGF0aChhcmdzLmxheWVyZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGF5ZXJkaXIpOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU3BlY2lmaWVkIGxheWVyIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0XG4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBsYXllcl9jb25mID0gb3MucGF0aC5qb2luKGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxheWVyX2NvbmYpOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU3BlY2lmaWVkIGxheWVyIGRpcmVjdG9yeSBkb2Vzbid0IGNvbnRhaW4gYSBjb25mL2xheWVyLmNvbmYgZmlsZVxuIikKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgYmJsYXllcnNfY29uZiA9IG9zLnBhdGguam9pbignY29uZicsICdiYmxheWVycy5jb25mJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJibGF5ZXJzX2NvbmYpOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYmJsYXllcnMuY29uZlxuIikKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgbm90YWRkZWQsIF8gPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgbGF5ZXJkaXIsIE5vbmUpCisgICAgICAgIGlmIG5vdGFkZGVkOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbm90YWRkZWQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU3BlY2lmaWVkIGxheWVyICVzIGlzIGFscmVhZHkgaW4gQkJMQVlFUlNcbiIgJSBpdGVtKQorCisgICAgZGVmIGRvX3JlbW92ZV9sYXllcihzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgbGF5ZXIgZnJvbSBiYmxheWVycy5jb25mLiIiIgorICAgICAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKCdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmJsYXllcnNfY29uZik6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mXG4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLmxheWVyZGlyLnN0YXJ0c3dpdGgoJyonKToKKyAgICAgICAgICAgIGxheWVyZGlyID0gYXJncy5sYXllcmRpcgorICAgICAgICBlbGlmIG5vdCAnLycgaW4gYXJncy5sYXllcmRpcjoKKyAgICAgICAgICAgIGxheWVyZGlyID0gJyovJXMnICUgYXJncy5sYXllcmRpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcmRpcikKKyAgICAgICAgKF8sIG5vdHJlbW92ZWQpID0gYmIudXRpbHMuZWRpdF9iYmxheWVyc19jb25mKGJibGF5ZXJzX2NvbmYsIE5vbmUsIGxheWVyZGlyKQorICAgICAgICBpZiBub3RyZW1vdmVkOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbm90cmVtb3ZlZDoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJObyBsYXllcnMgbWF0Y2hpbmcgJXMgZm91bmQgaW4gQkJMQVlFUlNcbiIgJSBpdGVtKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBkb19mbGF0dGVuKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJmbGF0dGVuIGxheWVyIGNvbmZpZ3VyYXRpb24gaW50byBhIHNlcGFyYXRlIG91dHB1dCBkaXJlY3RvcnkuCisKK1Rha2VzIHRoZSBzcGVjaWZpZWQgbGF5ZXJzIChvciBhbGwgbGF5ZXJzIGluIHRoZSBjdXJyZW50IGxheWVyCitjb25maWd1cmF0aW9uIGlmIG5vbmUgYXJlIHNwZWNpZmllZCkgYW5kIGJ1aWxkcyBhICJmbGF0dGVuZWQiIGRpcmVjdG9yeQorY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgYWxsIGxheWVycywgd2l0aCBhbnkgb3ZlcmxheWVkIHJlY2lwZXMgcmVtb3ZlZAorYW5kIGJiYXBwZW5kcyBhcHBlbmRlZCB0byB0aGUgY29ycmVzcG9uZGluZyByZWNpcGVzLiBOb3RlIHRoYXQgc29tZSBtYW51YWwKK2NsZWFudXAgbWF5IHN0aWxsIGJlIG5lY2Vzc2FyeSBhZnRlcndhcmRzLCBpbiBwYXJ0aWN1bGFyOgorCisqIHdoZXJlIG5vbi1yZWNpcGUgZmlsZXMgKHN1Y2ggYXMgcGF0Y2hlcykgYXJlIG92ZXJ3cml0dGVuICh0aGUgZmxhdHRlbgorICBjb21tYW5kIHdpbGwgc2hvdyBhIHdhcm5pbmcgZm9yIHRoZXNlKQorKiB3aGVyZSBhbnl0aGluZyBiZXlvbmQgdGhlIG5vcm1hbCBsYXllciBzZXR1cCBoYXMgYmVlbiBhZGRlZCB0bworICBsYXllci5jb25mIChvbmx5IHRoZSBsb3dlc3QgcHJpb3JpdHkgbnVtYmVyIGxheWVyJ3MgbGF5ZXIuY29uZiBpcyB1c2VkKQorKiBvdmVycmlkZGVuL2FwcGVuZGVkIGl0ZW1zIGZyb20gYmJhcHBlbmRzIHdpbGwgbmVlZCB0byBiZSB0aWRpZWQgdXAKKyogd2hlbiB0aGUgZmxhdHRlbmVkIGxheWVycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlICh0aGUKKyAgZmxhdHRlbiBjb21tYW5kIHNob3VsZCBzaG93IGEgd2FybmluZyB3aGVuIHRoaXMgd2lsbCBjYXVzZSBhIHByb2JsZW0pCisKK1dhcm5pbmc6IGlmIHlvdSBmbGF0dGVuIHNldmVyYWwgbGF5ZXJzIHdoZXJlIGFub3RoZXIgbGF5ZXIgaXMgaW50ZW5kZWQgdG8KK2JlIHVzZWQgImluYmV0d2VlbiIgdGhlbSAoaW4gbGF5ZXIgcHJpb3JpdHkgb3JkZXIpIHN1Y2ggdGhhdCByZWNpcGVzIC8KK2JiYXBwZW5kcyBpbiB0aGUgbGF5ZXJzIGludGVyYWN0LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHVzZSB0aGUgbmV3IG91dHB1dAorbGF5ZXIgdG9nZXRoZXIgd2l0aCB0aGF0IG90aGVyIGxheWVyLCB5b3UgbWF5IG5vIGxvbmdlciBnZXQgdGhlIHNhbWUKK2J1aWxkIHJlc3VsdHMgKGFzIHRoZSBsYXllciBwcmlvcml0eSBvcmRlciBoYXMgZWZmZWN0aXZlbHkgY2hhbmdlZCkuCisiIiIKKyAgICAgICAgaWYgbGVuKGFyZ3MubGF5ZXIpID09IDE6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0lmIHlvdSBzcGVjaWZ5IGxheWVycyB0byBmbGF0dGVuIHlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgdHdvJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgb3V0cHV0ZGlyID0gYXJncy5vdXRwdXRkaXIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0cHV0ZGlyKSBhbmQgb3MubGlzdGRpcihvdXRwdXRkaXIpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdEaXJlY3RvcnkgJXMgZXhpc3RzIGFuZCBpcyBub24tZW1wdHksIHBsZWFzZSBjbGVhciBpdCBvdXQgZmlyc3QnICUgb3V0cHV0ZGlyKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBsYXllcnMgPSBzZWxmLmJibGF5ZXJzCisgICAgICAgIGlmIGxlbihhcmdzLmxheWVyKSA+IDI6CisgICAgICAgICAgICBsYXllcm5hbWVzID0gYXJncy5sYXllcgorICAgICAgICAgICAgZm91bmRfbGF5ZXJuYW1lcyA9IFtdCisgICAgICAgICAgICBmb3VuZF9sYXllcmRpcnMgPSBbXQorICAgICAgICAgICAgZm9yIGxheWVyZGlyIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICAgICAgICAgIGlmIGxheWVybmFtZSBpbiBsYXllcm5hbWVzOgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYXllcmRpcnMuYXBwZW5kKGxheWVyZGlyKQorICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYXllcm5hbWVzLmFwcGVuZChsYXllcm5hbWUpCisKKyAgICAgICAgICAgIGZvciBsYXllcm5hbWUgaW4gbGF5ZXJuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBub3QgbGF5ZXJuYW1lIGluIGZvdW5kX2xheWVybmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgbGF5ZXIgJXMgaW4gY3VycmVudCBjb25maWd1cmF0aW9uLCBwbGVhc2UgcnVuICIlcyBzaG93LWxheWVycyIgdG8gbGlzdCBjb25maWd1cmVkIGxheWVycycgJSAobGF5ZXJuYW1lLCBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgbGF5ZXJzID0gZm91bmRfbGF5ZXJkaXJzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYXllcm5hbWVzID0gW10KKworICAgICAgICAjIEVuc3VyZSBhIHNwZWNpZmllZCBwYXRoIG1hdGNoZXMgb3VyIGxpc3Qgb2YgbGF5ZXJzCisgICAgICAgIGRlZiBsYXllcl9wYXRoX21hdGNoKHBhdGgpOgorICAgICAgICAgICAgZm9yIGxheWVyZGlyIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgob3MucGF0aC5qb2luKGxheWVyZGlyLCAnJykpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJkaXIKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYXBwbGllZF9hcHBlbmRzID0gW10KKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgIG92ZXJsYXllZCA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLnRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24ub3ZlcmxheWVkLmtleXMoKToKKyAgICAgICAgICAgICAgICBmb3Igb2YgaW4gc2VsZi50aW5mb2lsLmNvb2tlci5jb2xsZWN0aW9uLm92ZXJsYXllZFtmXToKKyAgICAgICAgICAgICAgICAgICAgaWYgb2Yuc3RhcnRzd2l0aChsYXllcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5ZWQuYXBwZW5kKG9mKQorCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oJ0NvcHlpbmcgZmlsZXMgZnJvbSAlcy4uLicgJSBsYXllciApCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhsYXllcik6CisgICAgICAgICAgICAgICAgaWYgJy5naXQnIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKCcuZ2l0JykKKyAgICAgICAgICAgICAgICBpZiAnLmhnJyBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnLmhnJykKKworICAgICAgICAgICAgICAgIGZvciBmMSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgZjFmdWxsID0gb3Muc2VwLmpvaW4oW3Jvb3QsIGYxXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZjFmdWxsIGluIG92ZXJsYXllZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICBTa2lwcGluZyBvdmVybGF5ZWQgZmlsZSAlcycgJSBmMWZ1bGwgKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCAhPSAnLmJiYXBwZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGVzdCA9IGYxZnVsbFtsZW4obGF5ZXIpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGVzdCA9IG9zLnBhdGgubm9ybXBhdGgob3Muc2VwLmpvaW4oW291dHB1dGRpcixmZGVzdF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmRlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZjEgPT0gJ2xheWVyLmNvbmYnIGFuZCByb290LmVuZHN3aXRoKCcvY29uZicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIFNraXBwaW5nIGxheWVyIGNvbmZpZyBmaWxlICVzJyAlIGYxZnVsbCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ092ZXJ3cml0aW5nIGZpbGUgJXMnLCBmZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmMWZ1bGwsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCA9PSAnLmJiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFwcGVuZCBpbiBzZWxmLnRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmMWZ1bGwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJfcGF0aF9tYXRjaChhcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICBBcHBseWluZyBhcHBlbmQgJXMgdG8gJXMnICUgKGFwcGVuZCwgZmRlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwbHlfYXBwZW5kKGFwcGVuZCwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZF9hcHBlbmRzLmFwcGVuZChhcHBlbmQpCisKKyAgICAgICAgIyBUYWtlIGNhcmUgb2Ygd2hlbiBzb21lIGxheWVycyBhcmUgZXhjbHVkZWQgYW5kIHlldCB3ZSBoYXZlIGluY2x1ZGVkIGJiYXBwZW5kcyBmb3IgdGhvc2UgcmVjaXBlcworICAgICAgICBmb3IgYiBpbiBzZWxmLnRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uYmJhcHBlbmRzOgorICAgICAgICAgICAgKHJlY2lwZW5hbWUsIGFwcGVuZG5hbWUpID0gYgorICAgICAgICAgICAgaWYgYXBwZW5kbmFtZSBub3QgaW4gYXBwbGllZF9hcHBlbmRzOgorICAgICAgICAgICAgICAgIGZpcnN0X2FwcGVuZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBsYXllciA9IGxheWVyX3BhdGhfbWF0Y2goYXBwZW5kbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RfYXBwZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseV9hcHBlbmQoYXBwZW5kbmFtZSwgZmlyc3RfYXBwZW5kKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBhcHBlbmRuYW1lW2xlbihsYXllcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnNlcC5qb2luKFtvdXRwdXRkaXIsZmRlc3RdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmRlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoYXBwZW5kbmFtZSwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcHBlbmQgPSBmZGVzdAorCisgICAgICAgICMgR2V0IHRoZSByZWdleCBmb3IgdGhlIGZpcnN0IGxheWVyIGluIG91ciBsaXN0ICh3aGljaCBpcyB3aGVyZSB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgd2lsbAorICAgICAgICAjIGhhdmUgY29tZSBmcm9tKQorICAgICAgICBmaXJzdF9yZWdleCA9IE5vbmUKKyAgICAgICAgbGF5ZXJkaXIgPSBsYXllcnNbMF0KKyAgICAgICAgZm9yIGxheWVybmFtZSwgcGF0dGVybiwgcmVnZXgsIF8gaW4gc2VsZi50aW5mb2lsLmNvb2tlci5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CisgICAgICAgICAgICBpZiByZWdleC5tYXRjaChvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICd0ZXN0JykpOgorICAgICAgICAgICAgICAgIGZpcnN0X3JlZ2V4ID0gcmVnZXgKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGZpcnN0X3JlZ2V4OgorICAgICAgICAgICAgIyBGaW5kIHRoZSBCQkZJTEVTIGVudHJpZXMgdGhhdCBtYXRjaCAod2hpY2ggd2lsbCBoYXZlIGNvbWUgZnJvbSB0aGlzIGNvbmYvbGF5ZXIuY29uZiBmaWxlKQorICAgICAgICAgICAgYmJmaWxlcyA9IHN0cihzZWxmLnRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkZJTEVTJywgVHJ1ZSkpLnNwbGl0KCkKKyAgICAgICAgICAgIGJiZmlsZXNfbGF5ZXIgPSBbXQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gYmJmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmaXJzdF9yZWdleC5tYXRjaChpdGVtKToKKyAgICAgICAgICAgICAgICAgICAgbmV3cGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRkaXIsIGl0ZW1bbGVuKGxheWVyZGlyKSsxOl0pCisgICAgICAgICAgICAgICAgICAgIGJiZmlsZXNfbGF5ZXIuYXBwZW5kKG5ld3BhdGgpCisKKyAgICAgICAgICAgIGlmIGJiZmlsZXNfbGF5ZXI6CisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IGFsbCBpbXBvcnRhbnQgbGF5ZXIgZmlsZXMgbWF0Y2ggQkJGSUxFUworICAgICAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG91dHB1dGRpcik6CisgICAgICAgICAgICAgICAgICAgIGZvciBmMSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZjEpWzFdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHQgaW4gWycuYmInLCAnLmJiYXBwZW5kJ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjFmdWxsID0gb3Muc2VwLmpvaW4oW3Jvb3QsIGYxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9mb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gYmJmaWxlc19sYXllcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGYxZnVsbCwgaXRlbSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVudHJ5X2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiRmlsZSAlcyBkb2VzIG5vdCBtYXRjaCB0aGUgZmxhdHRlbmVkIGxheWVyJ3MgQkJGSUxFUyBzZXR0aW5nLCB5b3UgbWF5IG5lZWQgdG8gZWRpdCBjb25mL2xheWVyLmNvbmYgb3IgbW92ZSB0aGUgZmlsZSBlbHNld2hlcmUiICUgZjFmdWxsKQorCisgICAgZGVmIGdldF9maWxlX2xheWVyKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgbGF5ZXJkaXIgPSBzZWxmLmdldF9maWxlX2xheWVyZGlyKGZpbGVuYW1lKQorICAgICAgICBpZiBsYXllcmRpcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc/JworCisgICAgZGVmIGdldF9maWxlX2xheWVyZGlyKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgbGF5ZXIgPSBiYi51dGlscy5nZXRfZmlsZV9sYXllcihmaWxlbmFtZSwgc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICByZXR1cm4gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorCisgICAgZGVmIGFwcGx5X2FwcGVuZChzZWxmLCBhcHBlbmRuYW1lLCByZWNpcGVuYW1lKToKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZG5hbWUsICdyJykgYXMgYXBwZW5kZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihyZWNpcGVuYW1lLCAnYScpIGFzIHJlY2lwZWZpbGU6CisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGUoJyMjIyMjIGJiYXBwZW5kZWQgZnJvbSAlcyAjIyMjI1xuJyAlIHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoYXBwZW5kbmFtZSkpCisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZWxpbmVzKGFwcGVuZGZpbGUucmVhZGxpbmVzKCkpCisKKyAgICBkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc2VsZiwgc3ApOgorICAgICAgICBwYXJzZXJfYWRkX2xheWVyID0gc2VsZi5hZGRfY29tbWFuZChzcCwgJ2FkZC1sYXllcicsIHNlbGYuZG9fYWRkX2xheWVyLCBwYXJzZXJlY2lwZXM9RmFsc2UpCisgICAgICAgIHBhcnNlcl9hZGRfbGF5ZXIuYWRkX2FyZ3VtZW50KCdsYXllcmRpcicsIGhlbHA9J0xheWVyIGRpcmVjdG9yeSB0byBhZGQnKQorCisgICAgICAgIHBhcnNlcl9yZW1vdmVfbGF5ZXIgPSBzZWxmLmFkZF9jb21tYW5kKHNwLCAncmVtb3ZlLWxheWVyJywgc2VsZi5kb19yZW1vdmVfbGF5ZXIsIHBhcnNlcmVjaXBlcz1GYWxzZSkKKyAgICAgICAgcGFyc2VyX3JlbW92ZV9sYXllci5hZGRfYXJndW1lbnQoJ2xheWVyZGlyJywgaGVscD0nTGF5ZXIgZGlyZWN0b3J5IHRvIHJlbW92ZSAod2lsZGNhcmRzIGFsbG93ZWQsIGVuY2xvc2UgaW4gcXVvdGVzIHRvIGF2b2lkIHNoZWxsIGV4cGFuc2lvbiknKQorICAgICAgICBwYXJzZXJfcmVtb3ZlX2xheWVyLnNldF9kZWZhdWx0cyhmdW5jPXNlbGYuZG9fcmVtb3ZlX2xheWVyKQorCisgICAgICAgIHBhcnNlcl9mbGF0dGVuID0gc2VsZi5hZGRfY29tbWFuZChzcCwgJ2ZsYXR0ZW4nLCBzZWxmLmRvX2ZsYXR0ZW4pCisgICAgICAgIHBhcnNlcl9mbGF0dGVuLmFkZF9hcmd1bWVudCgnbGF5ZXInLCBuYXJncz0nKicsIGhlbHA9J09wdGlvbmFsIGxheWVyKHMpIHRvIGZsYXR0ZW4gKG90aGVyd2lzZSBhbGwgYXJlIGZsYXR0ZW5lZCknKQorICAgICAgICBwYXJzZXJfZmxhdHRlbi5hZGRfYXJndW1lbnQoJ291dHB1dGRpcicsIGhlbHA9J091dHB1dCBkaXJlY3RvcnknKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JibGF5ZXJzL2NvbW1vbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYmxheWVycy9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwZmI0YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYmxheWVycy9jb21tb24ucHkKQEAgLTAsMCArMSwzMyBAQAoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdiaXRiYWtlLWxheWVycycpCisKKworY2xhc3MgTGF5ZXJQbHVnaW4oKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudGluZm9pbCA9IE5vbmUKKyAgICAgICAgc2VsZi5iYmxheWVycyA9IFtdCisKKyAgICBkZWYgdGluZm9pbF9pbml0KHNlbGYsIHRpbmZvaWwpOgorICAgICAgICBzZWxmLnRpbmZvaWwgPSB0aW5mb2lsCisgICAgICAgIHNlbGYuYmJsYXllcnMgPSAoc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBsYXllcmNvbmZzID0gc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2l0ZW1zX2ZpbGVzKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBzZWxmLnRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIHNlbGYuYmJmaWxlX2NvbGxlY3Rpb25zID0ge2xheWVyOiBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHBhdGgpKSBmb3IgbGF5ZXIsIHBhdGggaW4gbGF5ZXJjb25mcy5pdGVtcygpfQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhZGRfY29tbWFuZChzdWJwYXJzZXJzLCBjbWRuYW1lLCBmdW5jdGlvbiwgcGFyc2VyZWNpcGVzPVRydWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNvbnZlcnQgZG9jc3RyaW5nIGZvciBmdW5jdGlvbiB0byBoZWxwLiIiIgorICAgICAgICBkb2NzcGxpdCA9IGZ1bmN0aW9uLl9fZG9jX18uc3BsaXRsaW5lcygpCisgICAgICAgIGhlbHAgPSBkb2NzcGxpdFswXQorICAgICAgICBpZiBsZW4oZG9jc3BsaXQpID4gMToKKyAgICAgICAgICAgIGRlc2MgPSAnXG4nLmpvaW4oZG9jc3BsaXRbMTpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVzYyA9IGhlbHAKKyAgICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKGNtZG5hbWUsICphcmdzLCBoZWxwPWhlbHAsIGRlc2NyaXB0aW9uPWRlc2MsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlciwgKiprd2FyZ3MpCisgICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1mdW5jdGlvbiwgcGFyc2VyZWNpcGVzPXBhcnNlcmVjaXBlcykKKyAgICAgICAgcmV0dXJuIHN1YnBhcnNlcgorCisgICAgZGVmIGdldF9sYXllcl9uYW1lKHNlbGYsIGxheWVyZGlyKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUobGF5ZXJkaXIucnN0cmlwKG9zLnNlcCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvbGF5ZXJpbmRleC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYmxheWVycy9sYXllcmluZGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYWQ3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvbGF5ZXJpbmRleC5weQpAQCAtMCwwICsxLDI3MCBAQAoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgaHR0cC5jbGllbnQKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHVybGxpYi5wYXJzZQorCitmcm9tIGJibGF5ZXJzLmFjdGlvbiBpbXBvcnQgQWN0aW9uUGx1Z2luCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdiaXRiYWtlLWxheWVycycpCisKKworZGVmIHBsdWdpbl9pbml0KHBsdWdpbnMpOgorICAgIHJldHVybiBMYXllckluZGV4UGx1Z2luKCkKKworCitjbGFzcyBMYXllckluZGV4UGx1Z2luKEFjdGlvblBsdWdpbik6CisgICAgIiIiU3ViY29tbWFuZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGxheWVyIGluZGV4LgorCisgICAgVGhpcyBjbGFzcyBpbmhlcml0cyBBY3Rpb25QbHVnaW4gdG8gZ2V0IGRvX2FkZF9sYXllci4KKyAgICAiIiIKKworICAgIGRlZiBnZXRfanNvbl9kYXRhKHNlbGYsIGFwaXVybCk6CisgICAgICAgIHByb3h5X3NldHRpbmdzID0gb3MuZW52aXJvbi5nZXQoImh0dHBfcHJveHkiLCBOb25lKQorICAgICAgICBjb25uID0gTm9uZQorICAgICAgICBfcGFyc2VkdXJsID0gdXJsbGliLnBhcnNlLnVybHBhcnNlKGFwaXVybCkKKyAgICAgICAgcGF0aCA9IF9wYXJzZWR1cmwucGF0aAorICAgICAgICBxdWVyeSA9IF9wYXJzZWR1cmwucXVlcnkKKworICAgICAgICBkZWYgcGFyc2VfdXJsKHVybCk6CisgICAgICAgICAgICBwYXJzZWR1cmwgPSB1cmxsaWIucGFyc2UudXJscGFyc2UodXJsKQorICAgICAgICAgICAgaWYgcGFyc2VkdXJsLm5ldGxvY1swXSA9PSAnWyc6CisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHBhcnNlZHVybC5uZXRsb2NbMTpdLnNwbGl0KCddJywgMSkKKyAgICAgICAgICAgICAgICBpZiAnOicgaW4gcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHBvcnQucnNwbGl0KCc6JywgMSlbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXJzZWR1cmwubmV0bG9jLmNvdW50KCc6JykgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgKGhvc3QsIHBvcnQpID0gcGFyc2VkdXJsLm5ldGxvYy5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHBhcnNlZHVybC5uZXRsb2MKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiAoaG9zdCwgODAgaWYgcG9ydCBpcyBOb25lIGVsc2UgaW50KHBvcnQpKQorCisgICAgICAgIGlmIHByb3h5X3NldHRpbmdzIGlzIE5vbmU6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gcGFyc2VfdXJsKGFwaXVybCkKKyAgICAgICAgICAgIGNvbm4gPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0KQorICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCJHRVQiLCBwYXRoICsgIj8iICsgcXVlcnkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gcGFyc2VfdXJsKHByb3h5X3NldHRpbmdzKQorICAgICAgICAgICAgY29ubiA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QoIkdFVCIsIGFwaXVybCkKKworICAgICAgICByID0gY29ubi5nZXRyZXNwb25zZSgpCisgICAgICAgIGlmIHIuc3RhdHVzICE9IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgIiArIHBhdGggKyAiOiAlZCAlcyIgJSAoci5zdGF0dXMsIHIucmVhc29uKSkKKyAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoci5yZWFkKCkpCisKKyAgICBkZWYgZ2V0X2xheWVyX2RlcHMoc2VsZiwgbGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtLCBzZWxmbmFtZT1GYWxzZSk6CisgICAgICAgIGRlZiBsYXllcml0ZW1zX2luZm9faWQoaXRlbXNfbmFtZSwgbGF5ZXJpdGVtcyk6CisgICAgICAgICAgICBsaXRlbXNfaWQgPSBOb25lCisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnbmFtZSddID09IGl0ZW1zX25hbWU6CisgICAgICAgICAgICAgICAgICAgIGxpdGVtc19pZCA9IGxpWydpZCddCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXR1cm4gbGl0ZW1zX2lkCisKKyAgICAgICAgZGVmIGxheWVyYnJhbmNoZXNfaW5mbyhpdGVtc19pZCwgbGF5ZXJicmFuY2hlcyk6CisgICAgICAgICAgICBsYnJhbmNoID0ge30KKyAgICAgICAgICAgIGZvciBsYiBpbiBsYXllcmJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGlmIGxiWydsYXllciddID09IGl0ZW1zX2lkIGFuZCBsYlsnYnJhbmNoJ10gPT0gYnJhbmNobnVtOgorICAgICAgICAgICAgICAgICAgICBsYnJhbmNoWydpZCddID0gbGJbJ2lkJ10KKyAgICAgICAgICAgICAgICAgICAgbGJyYW5jaFsndmNzX3N1YmRpciddID0gbGJbJ3Zjc19zdWJkaXInXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxicmFuY2gKKworICAgICAgICBkZWYgbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbyhsYl9pZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbGRfZGVwcyA9IFtdCisgICAgICAgICAgICBmb3IgbGQgaW4gbGF5ZXJkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgaWYgbGRbJ2xheWVyYnJhbmNoJ10gPT0gbGJfaWQgYW5kIG5vdCBsZFsnZGVwZW5kZW5jeSddIGluIGxkX2RlcHM6CisgICAgICAgICAgICAgICAgICAgIGxkX2RlcHMuYXBwZW5kKGxkWydkZXBlbmRlbmN5J10pCisgICAgICAgICAgICBpZiBub3QgbGRfZGVwczoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSBkZXBlbmRlbmN5IG9mIGxheWVyRGVwZW5kZW5jaWVzIGlzIG5vdCBmb3VuZC4iKQorICAgICAgICAgICAgcmV0dXJuIGxkX2RlcHMKKworICAgICAgICBkZWYgbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKGl0ZW1zX2lkLCBsYXllcml0ZW1zKToKKyAgICAgICAgICAgIGxpdGVtcyA9IHt9CisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnaWQnXSA9PSBpdGVtc19pZDoKKyAgICAgICAgICAgICAgICAgICAgbGl0ZW1zWyd2Y3NfdXJsJ10gPSBsaVsndmNzX3VybCddCisgICAgICAgICAgICAgICAgICAgIGxpdGVtc1snbmFtZSddID0gbGlbJ25hbWUnXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxpdGVtcworCisgICAgICAgIGlmIHNlbGZuYW1lOgorICAgICAgICAgICAgc2VsZmlkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgICAgIGxiaW5mbyA9IGxheWVyYnJhbmNoZXNfaW5mbyhzZWxmaWQsIGxheWVyYnJhbmNoZXMpCisgICAgICAgICAgICBpZiBsYmluZm86CisgICAgICAgICAgICAgICAgc2VsZnN1YmRpciA9IGxiaW5mb1sndmNzX3N1YmRpciddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGZ1cmwgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoc2VsZmlkLCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBpZiBzZWxmdXJsOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmdXJsLCBzZWxmc3ViZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBsYXllciAlcyBnaXQgcmVwbyBhbmQgc3ViZGlyIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGRpY3QgPSB7fQorICAgICAgICBpdGVtc2lkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgaWYgbm90IGl0ZW1zaWQ6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBOb25lCisgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcykKKyAgICAgICAgaWYgbGJpZDoKKyAgICAgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcylbJ2lkJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgIGZvciBkZXBlbmRlbmN5IGluIGxheWVyZGVwZW5kZW5jaWVzX2luZm8obGJpZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbG5hbWUgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoZGVwZW5kZW5jeSwgbGF5ZXJpdGVtcylbJ25hbWUnXQorICAgICAgICAgICAgbHVybCA9IGxheWVyaXRlbXNfaW5mb19uYW1lX3N1YmRpcihkZXBlbmRlbmN5LCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBsc3ViZGlyID0gbGF5ZXJicmFuY2hlc19pbmZvKGRlcGVuZGVuY3ksIGxheWVyYnJhbmNoZXMpWyd2Y3Nfc3ViZGlyJ10KKyAgICAgICAgICAgIGxkaWN0W2xuYW1lXSA9IGx1cmwsIGxzdWJkaXIKKyAgICAgICAgcmV0dXJuIE5vbmUsIGxkaWN0CisKKyAgICBkZWYgZ2V0X2ZldGNoX2xheWVyKHNlbGYsIGZldGNoZGlyLCB1cmwsIHN1YmRpciwgZmV0Y2hfbGF5ZXIpOgorICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKHVybCkKKyAgICAgICAgaWYgb3MucGF0aC5zcGxpdGV4dChsYXllcm5hbWUpWzFdID09ICcuZ2l0JzoKKyAgICAgICAgICAgIGxheWVybmFtZSA9IG9zLnBhdGguc3BsaXRleHQobGF5ZXJuYW1lKVswXQorICAgICAgICByZXBvZGlyID0gb3MucGF0aC5qb2luKGZldGNoZGlyLCBsYXllcm5hbWUpCisgICAgICAgIGxheWVyZGlyID0gb3MucGF0aC5qb2luKHJlcG9kaXIsIHN1YmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlcG9kaXIpOgorICAgICAgICAgICAgaWYgZmV0Y2hfbGF5ZXI6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKCdnaXQgY2xvbmUgJXMgJXMnICUgKHVybCwgcmVwb2RpciksIHNoZWxsID0gVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGRvd25sb2FkICVzIiAlIHVybCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIlJlcG9zaXRvcnkgJXMgbmVlZHMgdG8gYmUgZmV0Y2hlZCIgJSB1cmwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVybmFtZSwgbGF5ZXJkaXIKKyAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBpcyBub3QgaW4gJXMiICUgKHVybCwgc3ViZGlyKSkKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworICAgIGRlZiBkb19sYXllcmluZGV4X2ZldGNoKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJGZXRjaGVzIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGluZGV4IGFsb25nIHdpdGggaXRzIGRlcGVuZGVudCBsYXllcnMsIGFuZCBhZGRzIHRoZW0gdG8gY29uZi9iYmxheWVycy5jb25mLgorIiIiCisgICAgICAgIGFwaXVybCA9IHNlbGYudGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCTEFZRVJTX0xBWUVSSU5ERVhfVVJMJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGFwaXVybDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBCQkxBWUVSU19MQVlFUklOREVYX1VSTCIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgYXBpdXJsWy0xXSAhPSAnLyc6CisgICAgICAgICAgICAgICAgYXBpdXJsICs9ICcvJworICAgICAgICAgICAgYXBpdXJsICs9ICJhcGkvIgorICAgICAgICBhcGlsaW5rcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGl1cmwpCisgICAgICAgIGJyYW5jaGVzID0gc2VsZi5nZXRfanNvbl9kYXRhKGFwaWxpbmtzWydicmFuY2hlcyddKQorCisgICAgICAgIGJyYW5jaG51bSA9IDAKKyAgICAgICAgZm9yIGJyYW5jaCBpbiBicmFuY2hlczoKKyAgICAgICAgICAgIGlmIGJyYW5jaFsnbmFtZSddID09IGFyZ3MuYnJhbmNoOgorICAgICAgICAgICAgICAgIGJyYW5jaG51bSA9IGJyYW5jaFsnaWQnXQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGJyYW5jaG51bSA9PSAwOgorICAgICAgICAgICAgdmFsaWRicmFuY2hlcyA9ICcsICcuam9pbihbYnJhbmNoWyduYW1lJ10gZm9yIGJyYW5jaCBpbiBicmFuY2hlc10pCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgbGF5ZXIgYnJhbmNoIG5hbWUgIiVzIi4gVmFsaWQgYnJhbmNoZXM6ICVzJyAlIChhcmdzLmJyYW5jaCwgdmFsaWRicmFuY2hlcykpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlnbm9yZV9sYXllcnMgPSBbXQorICAgICAgICBmb3IgY29sbGVjdGlvbiBpbiBzZWxmLnRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgbG5hbWUgPSBzZWxmLnRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19MQVlFUklOREVYX05BTUVfJXMnICUgY29sbGVjdGlvbiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxuYW1lOgorICAgICAgICAgICAgICAgIGlnbm9yZV9sYXllcnMuYXBwZW5kKGxuYW1lKQorCisgICAgICAgIGlmIGFyZ3MuaWdub3JlOgorICAgICAgICAgICAgaWdub3JlX2xheWVycy5leHRlbmQoYXJncy5pZ25vcmUuc3BsaXQoJywnKSkKKworICAgICAgICBsYXllcml0ZW1zID0gc2VsZi5nZXRfanNvbl9kYXRhKGFwaWxpbmtzWydsYXllckl0ZW1zJ10pCisgICAgICAgIGxheWVyYnJhbmNoZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVyQnJhbmNoZXMnXSkKKyAgICAgICAgbGF5ZXJkZXBlbmRlbmNpZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVyRGVwZW5kZW5jaWVzJ10pCisgICAgICAgIGludmFsdWVuYW1lcyA9IFtdCisgICAgICAgIHJlcG91cmxzID0ge30KKyAgICAgICAgcHJpbnRsYXllcnMgPSBbXQorCisgICAgICAgIGRlZiBxdWVyeV9kZXBlbmRlbmNpZXMobGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKToKKyAgICAgICAgICAgIGRlcHNsYXllciA9IFtdCisgICAgICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBpbnZhbHVlbmFtZSwgbGF5ZXJkaWN0ID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0pCisgICAgICAgICAgICAgICAgaWYgbGF5ZXJkaWN0OgorICAgICAgICAgICAgICAgICAgICByZXBvdXJsc1tsYXllcm5hbWVdID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0sIHNlbGZuYW1lPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcmRpY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGF5ZXIgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzbGF5ZXIuYXBwZW5kKGxheWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRsYXllcnMuYXBwZW5kKChsYXllcm5hbWUsIGxheWVyLCBsYXllcmRpY3RbbGF5ZXJdWzBdLCBsYXllcmRpY3RbbGF5ZXJdWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsYXllciBpbiBpZ25vcmVfbGF5ZXJzIGFuZCBub3QgbGF5ZXIgaW4gcmVwb3VybHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3VybHNbbGF5ZXJdID0gKGxheWVyZGljdFtsYXllcl1bMF0sIGxheWVyZGljdFtsYXllcl1bMV0pCisgICAgICAgICAgICAgICAgaWYgaW52YWx1ZW5hbWUgYW5kIG5vdCBpbnZhbHVlbmFtZSBpbiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGludmFsdWVuYW1lcy5hcHBlbmQoaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gZGVwc2xheWVyCisKKyAgICAgICAgZGVwc2xheWVycyA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhhcmdzLmxheWVybmFtZSwgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSkKKyAgICAgICAgd2hpbGUgZGVwc2xheWVyczoKKyAgICAgICAgICAgIGRlcHNsYXllciA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhkZXBzbGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKQorICAgICAgICAgICAgZGVwc2xheWVycyA9IGRlcHNsYXllcgorICAgICAgICBpZiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICBmb3IgaW52YWx1ZW5hbWUgaW4gaW52YWx1ZW5hbWVzOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTGF5ZXIgIiVzIiBub3QgZm91bmQgaW4gbGF5ZXIgaW5kZXgnICUgaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJXMgICVzIiAlICgiTGF5ZXIiLmxqdXN0KDE5KSwgIlJlcXVpcmVkIGJ5Ii5sanVzdCgxOSksICJHaXQgcmVwb3NpdG9yeSIubGp1c3QoNTQpLCAiU3ViZGlyZWN0b3J5IikpCisgICAgICAgIGxvZ2dlci5wbGFpbignPScgKiAxMTUpCisgICAgICAgIGZvciBsYXllcm5hbWUgaW4gYXJncy5sYXllcm5hbWU6CisgICAgICAgICAgICBsYXllcnVybCA9IHJlcG91cmxzW2xheWVybmFtZV0KKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGxheWVybmFtZS5sanVzdCgyMCksICctJy5sanVzdCgyMCksIGxheWVydXJsWzBdLmxqdXN0KDU1KSwgbGF5ZXJ1cmxbMV0pKQorICAgICAgICBwcmludGVkbGF5ZXJzID0gW10KKyAgICAgICAgZm9yIGxheWVyLCBkZXBlbmRlbmN5LCBnaXRyZXBvLCBzdWJkaXJlY3RvcnkgaW4gcHJpbnRsYXllcnM6CisgICAgICAgICAgICBpZiBkZXBlbmRlbmN5IGluIHByaW50ZWRsYXllcnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGRlcGVuZGVuY3kubGp1c3QoMjApLCBsYXllci5sanVzdCgyMCksIGdpdHJlcG8ubGp1c3QoNTUpLCBzdWJkaXJlY3RvcnkpKQorICAgICAgICAgICAgcHJpbnRlZGxheWVycy5hcHBlbmQoZGVwZW5kZW5jeSkKKworICAgICAgICBpZiByZXBvdXJsczoKKyAgICAgICAgICAgIGZldGNoZGlyID0gc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlNfRkVUQ0hfRElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBmZXRjaGRpcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgQkJMQVlFUlNfRkVUQ0hfRElSIikKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZldGNoZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhmZXRjaGRpcikKKyAgICAgICAgICAgIGFkZGxheWVycyA9IFtdCisgICAgICAgICAgICBmb3IgcmVwb3VybCwgc3ViZGlyIGluIHJlcG91cmxzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIG5hbWUsIGxheWVyZGlyID0gc2VsZi5nZXRfZmV0Y2hfbGF5ZXIoZmV0Y2hkaXIsIHJlcG91cmwsIHN1YmRpciwgbm90IGFyZ3Muc2hvd19vbmx5KQorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICBhZGRsYXllcnMuYXBwZW5kKChzdWJkaXIsIG5hbWUsIGxheWVyZGlyKSkKKyAgICAgICAgaWYgbm90IGFyZ3Muc2hvd19vbmx5OgorICAgICAgICAgICAgZm9yIHN1YmRpciwgbmFtZSwgbGF5ZXJkaXIgaW4gc2V0KGFkZGxheWVycyk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJkaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzdWJkaXI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIkFkZGluZyBsYXllciBcIiVzXCIgdG8gY29uZi9iYmxheWVycy5jb25mIiAlIHN1YmRpcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiQWRkaW5nIGxheWVyIFwiJXNcIiB0byBjb25mL2JibGF5ZXJzLmNvbmYiICUgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxhcmdzID0gYXJncGFyc2UuTmFtZXNwYWNlKCkKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxhcmdzLmxheWVyZGlyID0gbGF5ZXJkaXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19hZGRfbGF5ZXIobG9jYWxhcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgZG9fbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMoc2VsZiwgYXJncyk6CisgICAgICAgICIiIkZpbmQgbGF5ZXIgZGVwZW5kZW5jaWVzIGZyb20gbGF5ZXIgaW5kZXguCisiIiIKKyAgICAgICAgYXJncy5zaG93X29ubHkgPSBUcnVlCisgICAgICAgIGFyZ3MuaWdub3JlID0gW10KKyAgICAgICAgc2VsZi5kb19sYXllcmluZGV4X2ZldGNoKGFyZ3MpCisKKyAgICBkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc2VsZiwgc3ApOgorICAgICAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaCA9IHNlbGYuYWRkX2NvbW1hbmQoc3AsICdsYXllcmluZGV4LWZldGNoJywgc2VsZi5kb19sYXllcmluZGV4X2ZldGNoKQorICAgICAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJy1uJywgJy0tc2hvdy1vbmx5JywgaGVscD0nc2hvdyBkZXBlbmRlbmNpZXMgYW5kIGRvIG5vdGhpbmcgZWxzZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLWInLCAnLS1icmFuY2gnLCBoZWxwPSdicmFuY2ggbmFtZSB0byBmZXRjaCAoZGVmYXVsdCAlKGRlZmF1bHQpcyknLCBkZWZhdWx0PSdtYXN0ZXInKQorICAgICAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJy1pJywgJy0taWdub3JlJywgaGVscD0nYXNzdW1lIHRoZSBzcGVjaWZpZWQgbGF5ZXJzIGRvIG5vdCBuZWVkIHRvIGJlIGZldGNoZWQvYWRkZWQgKHNlcGFyYXRlIG11bHRpcGxlIGxheWVycyB3aXRoIGNvbW1hcywgbm8gc3BhY2VzKScsIG1ldGF2YXI9J0xBWUVSJykKKyAgICAgICAgcGFyc2VyX2xheWVyaW5kZXhfZmV0Y2guYWRkX2FyZ3VtZW50KCdsYXllcm5hbWUnLCBuYXJncz0nKycsIGhlbHA9J2xheWVyIHRvIGZldGNoJykKKworICAgICAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMgPSBzZWxmLmFkZF9jb21tYW5kKHNwLCAnbGF5ZXJpbmRleC1zaG93LWRlcGVuZHMnLCBzZWxmLmRvX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzKQorICAgICAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMuYWRkX2FyZ3VtZW50KCctYicsICctLWJyYW5jaCcsIGhlbHA9J2JyYW5jaCBuYW1lIHRvIGZldGNoIChkZWZhdWx0ICUoZGVmYXVsdClzKScsIGRlZmF1bHQ9J21hc3RlcicpCisgICAgICAgIHBhcnNlcl9sYXllcmluZGV4X3Nob3dfZGVwZW5kcy5hZGRfYXJndW1lbnQoJ2xheWVybmFtZScsIG5hcmdzPScrJywgaGVscD0nbGF5ZXIgdG8gcXVlcnknKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JibGF5ZXJzL3F1ZXJ5LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JibGF5ZXJzL3F1ZXJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMWU3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvcXVlcnkucHkKQEAgLTAsMCArMSw1MDAgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitpbXBvcnQgYmIuY2FjaGUKK2ltcG9ydCBiYi5wcm92aWRlcnMKK2ltcG9ydCBiYi51dGlscworCitmcm9tIGJibGF5ZXJzLmNvbW1vbiBpbXBvcnQgTGF5ZXJQbHVnaW4KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2JpdGJha2UtbGF5ZXJzJykKKworCitkZWYgcGx1Z2luX2luaXQocGx1Z2lucyk6CisgICAgcmV0dXJuIFF1ZXJ5UGx1Z2luKCkKKworCitjbGFzcyBRdWVyeVBsdWdpbihMYXllclBsdWdpbik6CisgICAgZGVmIGRvX3Nob3dfbGF5ZXJzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJzaG93IGN1cnJlbnQgY29uZmlndXJlZCBsYXllcnMuIiIiCisgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgICVzICAlcyIgJSAoImxheWVyIi5sanVzdCgyMCksICJwYXRoIi5sanVzdCg0MCksICJwcmlvcml0eSIpKQorICAgICAgICBsb2dnZXIucGxhaW4oJz0nICogNzQpCisgICAgICAgIGZvciBsYXllciwgXywgcmVnZXgsIHByaSBpbiBzZWxmLnRpbmZvaWwuY29va2VyLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGxheWVyZGlyID0gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgICVzICAlZCIgJSAobGF5ZXJuYW1lLmxqdXN0KDIwKSwgbGF5ZXJkaXIubGp1c3QoNDApLCBwcmkpKQorCisgICAgZGVmIHZlcnNpb25fc3RyKHNlbGYsIHBlLCBwdiwgcHIgPSBOb25lKToKKyAgICAgICAgdmVyc3RyID0gIiVzIiAlIHB2CisgICAgICAgIGlmIHByOgorICAgICAgICAgICAgdmVyc3RyID0gIiVzLSVzIiAlICh2ZXJzdHIsIHByKQorICAgICAgICBpZiBwZToKKyAgICAgICAgICAgIHZlcnN0ciA9ICIlczolcyIgJSAocGUsIHZlcnN0cikKKyAgICAgICAgcmV0dXJuIHZlcnN0cgorCisgICAgZGVmIGRvX3Nob3dfb3ZlcmxheWVkKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJsaXN0IG92ZXJsYXllZCByZWNpcGVzICh3aGVyZSB0aGUgc2FtZSByZWNpcGUgZXhpc3RzIGluIGFub3RoZXIgbGF5ZXIpCisKK0xpc3RzIHRoZSBuYW1lcyBvZiBvdmVybGF5ZWQgcmVjaXBlcyBhbmQgdGhlIGF2YWlsYWJsZSB2ZXJzaW9ucyBpbiBlYWNoCitsYXllciwgd2l0aCB0aGUgcHJlZmVycmVkIHZlcnNpb24gZmlyc3QuIE5vdGUgdGhhdCBza2lwcGVkIHJlY2lwZXMgdGhhdAorYXJlIG92ZXJsYXllZCB3aWxsIGFsc28gYmUgbGlzdGVkLCB3aXRoIGEgIiAoc2tpcHBlZCkiIHN1ZmZpeC4KKyIiIgorCisgICAgICAgIGl0ZW1zX2xpc3RlZCA9IHNlbGYubGlzdF9yZWNpcGVzKCdPdmVybGF5ZWQgcmVjaXBlcycsIE5vbmUsIFRydWUsIGFyZ3Muc2FtZV92ZXJzaW9uLCBhcmdzLmZpbGVuYW1lcywgVHJ1ZSwgTm9uZSkKKworICAgICAgICAjIENoZWNrIGZvciBvdmVybGF5ZWQgLmJiY2xhc3MgZmlsZXMKKyAgICAgICAgY2xhc3NlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgorICAgICAgICAgICAgY2xhc3NkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjbGFzc2VzJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNsYXNzZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgY2xhc3NmaWxlIGluIG9zLmxpc3RkaXIoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KGNsYXNzZmlsZSlbMV0gPT0gJy5iYmNsYXNzJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbY2xhc3NmaWxlXS5hcHBlbmQoY2xhc3NkaXIpCisKKyAgICAgICAgIyBMb2NhdGluZyBjbGFzc2VzIGFuZCBvdGhlciBmaWxlcyBpcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gcmVjaXBlcyAtCisgICAgICAgICMgbGF5ZXIgcHJpb3JpdHkgaXMgbm90IGEgZmFjdG9yOyBpbnN0ZWFkIEJpdEJha2UgdXNlcyB0aGUgZmlyc3QgbWF0Y2hpbmcKKyAgICAgICAgIyBmaWxlIGluIEJCUEFUSCwgd2hpY2ggaXMgbWFuaXB1bGF0ZWQgZGlyZWN0bHkgYnkgZWFjaCBsYXllcidzCisgICAgICAgICMgY29uZi9sYXllci5jb25mIGluIHR1cm4sIHRodXMgdGhlIG9yZGVyIG9mIGxheWVycyBpbiBiYmxheWVycy5jb25mIGlzIGEKKyAgICAgICAgIyBmYWN0b3IgLSBob3dldmVyLCBlYWNoIGxheWVyLmNvbmYgaXMgZnJlZSB0byBlaXRoZXIgcHJlcGVuZCBvciBhcHBlbmQgdG8KKyAgICAgICAgIyBCQlBBVEggKG9yIGluZGVlZCBkbyBjcmF6eSBzdHVmZiB3aXRoIGl0KS4gVGh1cyB0aGUgb3JkZXIgaW4gQkJQQVRIIG1pZ2h0CisgICAgICAgICMgbm90IGJlIGV4YWN0bHkgdGhlIG9yZGVyIHByZXNlbnQgaW4gYmJsYXllcnMuY29uZiBlaXRoZXIuCisgICAgICAgIGJicGF0aCA9IHN0cihzZWxmLnRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICAgICAgb3ZlcmxheWVkX2NsYXNzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIChjbGFzc2ZpbGUsIGNsYXNzZGlycykgaW4gY2xhc3Nlcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbGVuKGNsYXNzZGlycykgPiAxOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvdmVybGF5ZWRfY2xhc3NfZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignPT09IE92ZXJsYXllZCBjbGFzc2VzID09PScpCisgICAgICAgICAgICAgICAgICAgIG92ZXJsYXllZF9jbGFzc19mb3VuZCA9IFRydWUKKworICAgICAgICAgICAgICAgIG1haW5maWxlID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBvcy5wYXRoLmpvaW4oJ2NsYXNzZXMnLCBjbGFzc2ZpbGUpKQorICAgICAgICAgICAgICAgIGlmIGFyZ3MuZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyVzJyAlIG1haW5maWxlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgV2UgZWZmZWN0aXZlbHkgaGF2ZSB0byBndWVzcyB0aGUgbGF5ZXIgaGVyZQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyVzOicgJSBjbGFzc2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIG1haW5sYXllcm5hbWUgPSAnPycKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxheWVyZGlyIGluIHNlbGYuYmJsYXllcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2RpciA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ2NsYXNzZXMnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFpbmZpbGUuc3RhcnRzd2l0aChjbGFzc2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbmxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUobGF5ZXJkaXIpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICAlcycgJSBtYWlubGF5ZXJuYW1lKQorICAgICAgICAgICAgICAgIGZvciBjbGFzc2RpciBpbiBjbGFzc2RpcnM6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKGNsYXNzZGlyLCBjbGFzc2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGZ1bGxwYXRoICE9IG1haW5maWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJncy5maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyAgJXMnICUgZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIHNlbGYuZ2V0X2xheWVyX25hbWUob3MucGF0aC5kaXJuYW1lKGNsYXNzZGlyKSkpCisKKyAgICAgICAgaWYgb3ZlcmxheWVkX2NsYXNzX2ZvdW5kOgorICAgICAgICAgICAgaXRlbXNfbGlzdGVkID0gVHJ1ZTsKKworICAgICAgICBpZiBub3QgaXRlbXNfbGlzdGVkOgorICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCdObyBvdmVybGF5ZWQgZmlsZXMgZm91bmQuJykKKworICAgIGRlZiBkb19zaG93X3JlY2lwZXMoc2VsZiwgYXJncyk6CisgICAgICAgICIiImxpc3QgYXZhaWxhYmxlIHJlY2lwZXMsIHNob3dpbmcgdGhlIGxheWVyIHRoZXkgYXJlIHByb3ZpZGVkIGJ5CisKK0xpc3RzIHRoZSBuYW1lcyBvZiByZWNpcGVzIGFuZCB0aGUgYXZhaWxhYmxlIHZlcnNpb25zIGluIGVhY2gKK2xheWVyLCB3aXRoIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBmaXJzdC4gT3B0aW9uYWxseSB5b3UgbWF5IHNwZWNpZnkKK3Buc3BlYyB0byBtYXRjaCBhIHNwZWNpZmllZCByZWNpcGUgbmFtZSAoc3VwcG9ydHMgd2lsZGNhcmRzKS4gTm90ZSB0aGF0Citza2lwcGVkIHJlY2lwZXMgd2lsbCBhbHNvIGJlIGxpc3RlZCwgd2l0aCBhICIgKHNraXBwZWQpIiBzdWZmaXguCisiIiIKKworICAgICAgICBpbmhlcml0bGlzdCA9IGFyZ3MuaW5oZXJpdHMuc3BsaXQoJywnKSBpZiBhcmdzLmluaGVyaXRzIGVsc2UgW10KKyAgICAgICAgaWYgaW5oZXJpdGxpc3Qgb3IgYXJncy5wbnNwZWMgb3IgYXJncy5tdWx0aXBsZToKKyAgICAgICAgICAgIHRpdGxlID0gJ01hdGNoaW5nIHJlY2lwZXM6JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGl0bGUgPSAnQXZhaWxhYmxlIHJlY2lwZXM6JworICAgICAgICBzZWxmLmxpc3RfcmVjaXBlcyh0aXRsZSwgYXJncy5wbnNwZWMsIEZhbHNlLCBGYWxzZSwgYXJncy5maWxlbmFtZXMsIGFyZ3MubXVsdGlwbGUsIGluaGVyaXRsaXN0KQorCisgICAgZGVmIGxpc3RfcmVjaXBlcyhzZWxmLCB0aXRsZSwgcG5zcGVjLCBzaG93X292ZXJsYXllZF9vbmx5LCBzaG93X3NhbWVfdmVyX29ubHksIHNob3dfZmlsZW5hbWVzLCBzaG93X211bHRpX3Byb3ZpZGVyX29ubHksIGluaGVyaXRzKToKKyAgICAgICAgaWYgaW5oZXJpdHM6CisgICAgICAgICAgICBiYnBhdGggPSBzdHIoc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgICAgICBmb3IgY2xhc3NuYW1lIGluIGluaGVyaXRzOgorICAgICAgICAgICAgICAgIGNsYXNzZmlsZSA9ICdjbGFzc2VzLyVzLmJiY2xhc3MnICUgY2xhc3NuYW1lCisgICAgICAgICAgICAgICAgaWYgbm90IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY2xhc3NmaWxlLCBoaXN0b3J5PUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdObyBjbGFzcyBuYW1lZCAlcyBmb3VuZCBpbiBCQlBBVEgnLCBjbGFzc2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgcGtnX3BuID0gc2VsZi50aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLnBrZ19wbgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLCBzZWxmLnRpbmZvaWwuY29va2VyLnJlY2lwZWNhY2hlc1snJ10sIHBrZ19wbikKKyAgICAgICAgYWxscHJvdmlkZXJzID0gYmIucHJvdmlkZXJzLmFsbFByb3ZpZGVycyhzZWxmLnRpbmZvaWwuY29va2VyLnJlY2lwZWNhY2hlc1snJ10pCisKKyAgICAgICAgIyBFbnN1cmUgd2UgbGlzdCBza2lwcGVkIHJlY2lwZXMKKyAgICAgICAgIyBXZSBhcmUgbGFyZ2VseSBndWVzc2luZyBhYm91dCBQTiwgUFYgYW5kIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBoZXJlLAorICAgICAgICAjIGJ1dCB3ZSBoYXZlIG5vIGNob2ljZSBzaW5jZSBza2lwcGVkIHJlY2lwZXMgYXJlIG5vdCBmdWxseSBwYXJzZWQKKyAgICAgICAgc2tpcGxpc3QgPSBsaXN0KHNlbGYudGluZm9pbC5jb29rZXIuc2tpcGxpc3Qua2V5cygpKQorICAgICAgICBza2lwbGlzdC5zb3J0KCBrZXk9bGFtYmRhIGZpbGVpdGVtOiBzZWxmLnRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uY2FsY19iYmZpbGVfcHJpb3JpdHkoZmlsZWl0ZW0pICkKKyAgICAgICAgc2tpcGxpc3QucmV2ZXJzZSgpCisgICAgICAgIGZvciBmbiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgIHJlY2lwZV9wYXJ0cyA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdLnNwbGl0KCdfJykKKyAgICAgICAgICAgIHAgPSByZWNpcGVfcGFydHNbMF0KKyAgICAgICAgICAgIGlmIGxlbihyZWNpcGVfcGFydHMpID4gMToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgcmVjaXBlX3BhcnRzWzFdLCBOb25lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgJ3Vua25vd24nLCBOb25lKQorICAgICAgICAgICAgYWxscHJvdmlkZXJzW3BdLmFwcGVuZCgodmVyLCBmbikpCisgICAgICAgICAgICBpZiBub3QgcCBpbiBwa2dfcG46CisgICAgICAgICAgICAgICAgcGtnX3BuW3BdID0gJ2R1bW15JworICAgICAgICAgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uc1twXSA9ICh2ZXIsIGZuKQorCisgICAgICAgIGRlZiBwcmludF9pdGVtKGYsIHBuLCB2ZXIsIGxheWVyLCBpc3ByZWYpOgorICAgICAgICAgICAgaWYgZiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgICAgICBza2lwcGVkID0gJyAoc2tpcHBlZCknCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSAnJworICAgICAgICAgICAgaWYgc2hvd19maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzJXMiLCBmLCBza2lwcGVkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyVzIiwgZiwgc2tpcHBlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzOiIsIHBuKQorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyAlcyVzIiwgbGF5ZXIubGp1c3QoMjApLCB2ZXIsIHNraXBwZWQpCisKKyAgICAgICAgZ2xvYmFsX2luaGVyaXQgPSAoc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignSU5IRVJJVCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGNsc19yZSA9IHJlLmNvbXBpbGUoJ2NsYXNzZXMvJykKKworICAgICAgICBwcmVmZmlsZXMgPSBbXQorICAgICAgICBpdGVtc19saXN0ZWQgPSBGYWxzZQorICAgICAgICBmb3IgcCBpbiBzb3J0ZWQocGtnX3BuKToKKyAgICAgICAgICAgIGlmIHBuc3BlYzoKKyAgICAgICAgICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoKHAsIHBuc3BlYyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGxlbihhbGxwcm92aWRlcnNbcF0pID4gMSBvciBub3Qgc2hvd19tdWx0aV9wcm92aWRlcl9vbmx5OgorICAgICAgICAgICAgICAgIHByZWYgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcF0KKyAgICAgICAgICAgICAgICByZWFsZm4gPSBiYi5jYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHByZWZbMV0pCisgICAgICAgICAgICAgICAgcHJlZmZpbGUgPSByZWFsZm5bMF0KKworICAgICAgICAgICAgICAgICMgV2Ugb25seSBkaXNwbGF5IG9uY2UgcGVyIHJlY2lwZSwgd2Ugc2hvdWxkIHByZWZlciBub24gZXh0ZW5kZWQgdmVyc2lvbnMgb2YgdGhlCisgICAgICAgICAgICAgICAgIyByZWNpcGUgaWYgcHJlc2VudCAoc28gZS5nLiBpbiBPcGVuRW1iZWRkZWQsIG9wZW5zc2wgcmF0aGVyIHRoYW4gbmF0aXZlc2RrLW9wZW5zc2wKKyAgICAgICAgICAgICAgICAjIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBzb3J0IGZpcnN0KS4KKyAgICAgICAgICAgICAgICBpZiByZWFsZm5bMV0gYW5kIHJlYWxmblswXSBpbiBzZWxmLnRpbmZvaWwuY29va2VyLnJlY2lwZWNhY2hlc1snJ10ucGtnX2ZuOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAwCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZV9pbmhlcml0cyA9IHNlbGYudGluZm9pbC5jb29rZXJfZGF0YS5pbmhlcml0cy5nZXQocHJlZmZpbGUsIFtdKQorICAgICAgICAgICAgICAgICAgICBmb3IgY2xzIGluIHJlY2lwZV9pbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsc19yZS5tYXRjaChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoY2xzKSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzbmFtZSBpbiBnbG9iYWxfaW5oZXJpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBjbGFzc25hbWUgaW4gaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoY291bnQgIT0gbGVuKGluaGVyaXRzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTm8gbWF0Y2ggLSBza2lwIHRoaXMgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgcHJlZmZpbGUgbm90IGluIHByZWZmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgcHJlZmxheWVyID0gc2VsZi5nZXRfZmlsZV9sYXllcihwcmVmZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlsYXllciA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHNhbWVfdmVyID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcm92cyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBwcm92IGluIGFsbHByb3ZpZGVyc1twXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZmaWxlID0gYmIuY2FjaGUudmlydHVhbGZuMnJlYWxmbihwcm92WzFdKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmxheWVyID0gc2VsZi5nZXRfZmlsZV9sYXllcihwcm92ZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZzLmFwcGVuZCgocHJvdmZpbGUsIHByb3ZsYXllciwgcHJvdlswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm92bGF5ZXIgIT0gcHJlZmxheWVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpbGF5ZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm92WzBdICE9IHByZWZbMF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZV92ZXIgPSBGYWxzZQorCisgICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aWxheWVyIG9yIG5vdCBzaG93X292ZXJsYXllZF9vbmx5KSBhbmQgKHNhbWVfdmVyIG9yIG5vdCBzaG93X3NhbWVfdmVyX29ubHkpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGl0ZW1zX2xpc3RlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJz09PSAlcyA9PT0nICUgdGl0bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNfbGlzdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfaXRlbShwcmVmZmlsZSwgcCwgc2VsZi52ZXJzaW9uX3N0cihwcmVmWzBdWzBdLCBwcmVmWzBdWzFdKSwgcHJlZmxheWVyLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwcm92ZmlsZSwgcHJvdmxheWVyLCBwcm92dmVyKSBpbiBwcm92czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm92ZmlsZSAhPSBwcmVmZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfaXRlbShwcm92ZmlsZSwgcCwgc2VsZi52ZXJzaW9uX3N0cihwcm92dmVyWzBdLCBwcm92dmVyWzFdKSwgcHJvdmxheWVyLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRW5zdXJlIHdlIGRvbid0IHNob3cgdHdvIGVudHJpZXMgZm9yIEJCQ0xBU1NFWFRFTkRlZCByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZmlsZXMuYXBwZW5kKHByZWZmaWxlKQorCisgICAgICAgIHJldHVybiBpdGVtc19saXN0ZWQKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyZGlyID0gc2VsZi5nZXRfZmlsZV9sYXllcmRpcihmaWxlbmFtZSkKKyAgICAgICAgaWYgbGF5ZXJkaXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnPycKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcmRpcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyID0gYmIudXRpbHMuZ2V0X2ZpbGVfbGF5ZXIoZmlsZW5hbWUsIHNlbGYudGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgcmV0dXJuIHNlbGYuYmJmaWxlX2NvbGxlY3Rpb25zLmdldChsYXllciwgTm9uZSkKKworICAgIGRlZiByZW1vdmVfbGF5ZXJfcHJlZml4KHNlbGYsIGYpOgorICAgICAgICAiIiJSZW1vdmUgdGhlIGxheWVyX2RpciBwcmVmaXgsIGUuZy4sIGYgPSAvcGF0aC90by9sYXllcl9kaXIvZm9vL2JsYWgsIHRoZQorICAgICAgICAgICByZXR1cm4gdmFsdWUgd2lsbCBiZTogbGF5ZXJfZGlyL2Zvby9ibGFoIiIiCisgICAgICAgIGZfbGF5ZXJkaXIgPSBzZWxmLmdldF9maWxlX2xheWVyZGlyKGYpCisgICAgICAgIGlmIG5vdCBmX2xheWVyZGlyOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgcHJlZml4ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmX2xheWVyZGlyKSwgJycpCisgICAgICAgIHJldHVybiBmW2xlbihwcmVmaXgpOl0gaWYgZi5zdGFydHN3aXRoKHByZWZpeCkgZWxzZSBmCisKKyAgICBkZWYgZG9fc2hvd19hcHBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJsaXN0IGJiYXBwZW5kIGZpbGVzIGFuZCByZWNpcGUgZmlsZXMgdGhleSBhcHBseSB0bworCitMaXN0cyByZWNpcGVzIHdpdGggdGhlIGJiYXBwZW5kcyB0aGF0IGFwcGx5IHRvIHRoZW0gYXMgc3ViaXRlbXMuCisiIiIKKworICAgICAgICBsb2dnZXIucGxhaW4oJz09PSBBcHBlbmRlZCByZWNpcGVzID09PScpCisKKyAgICAgICAgcG5saXN0ID0gbGlzdChzZWxmLnRpbmZvaWwuY29va2VyX2RhdGEucGtnX3BuLmtleXMoKSkKKyAgICAgICAgcG5saXN0LnNvcnQoKQorICAgICAgICBhcHBlbmRzID0gRmFsc2UKKyAgICAgICAgZm9yIHBuIGluIHBubGlzdDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2hvd19hcHBlbmRzX2Zvcl9wbihwbik6CisgICAgICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNob3dfYXBwZW5kc19mb3Jfc2tpcHBlZCgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBub3QgYXBwZW5kczoKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbignTm8gYXBwZW5kIGZpbGVzIGZvdW5kJykKKworICAgIGRlZiBzaG93X2FwcGVuZHNfZm9yX3BuKHNlbGYsIHBuKToKKyAgICAgICAgZmlsZW5hbWVzID0gc2VsZi50aW5mb2lsLmNvb2tlcl9kYXRhLnBrZ19wbltwbl0KKworICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbmZvaWwuY29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbmZvaWwuY29va2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbmZvaWwuY29va2VyX2RhdGEucGtnX3BuKQorICAgICAgICBiZXN0X2ZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShiZXN0WzNdKQorCisgICAgICAgIHJldHVybiBzZWxmLnNob3dfYXBwZW5kc19vdXRwdXQoZmlsZW5hbWVzLCBiZXN0X2ZpbGVuYW1lKQorCisgICAgZGVmIHNob3dfYXBwZW5kc19mb3Jfc2tpcHBlZChzZWxmKToKKyAgICAgICAgZmlsZW5hbWVzID0gW29zLnBhdGguYmFzZW5hbWUoZikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi50aW5mb2lsLmNvb2tlci5za2lwbGlzdC5rZXlzKCldCisgICAgICAgIHJldHVybiBzZWxmLnNob3dfYXBwZW5kc19vdXRwdXQoZmlsZW5hbWVzLCBOb25lLCAiIChza2lwcGVkKSIpCisKKyAgICBkZWYgc2hvd19hcHBlbmRzX291dHB1dChzZWxmLCBmaWxlbmFtZXMsIGJlc3RfZmlsZW5hbWUsIG5hbWVfc3VmZml4ID0gJycpOgorICAgICAgICBhcHBlbmRlZCwgbWlzc2luZyA9IHNlbGYuZ2V0X2FwcGVuZHNfZm9yX2ZpbGVzKGZpbGVuYW1lcykKKyAgICAgICAgaWYgYXBwZW5kZWQ6CisgICAgICAgICAgICBmb3IgYmFzZW5hbWUsIGFwcGVuZHMgaW4gYXBwZW5kZWQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclcyVzOicsIGJhc2VuYW1lLCBuYW1lX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBmb3IgYXBwZW5kIGluIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICAlcycsIGFwcGVuZCkKKworICAgICAgICAgICAgaWYgYmVzdF9maWxlbmFtZToKKyAgICAgICAgICAgICAgICBpZiBiZXN0X2ZpbGVuYW1lIGluIG1pc3Npbmc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCclczogbWlzc2luZyBhcHBlbmQgZm9yIHByZWZlcnJlZCB2ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9maWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfYXBwZW5kc19mb3JfZmlsZXMoc2VsZiwgZmlsZW5hbWVzKToKKyAgICAgICAgYXBwZW5kZWQsIG5vdGFwcGVuZGVkID0gW10sIFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICBfLCBjbHMsIF8gPSBiYi5jYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGFwcGVuZHMgPSBzZWxmLnRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhiYXNlbmFtZSkKKyAgICAgICAgICAgIGlmIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgYXBwZW5kZWQuYXBwZW5kKChiYXNlbmFtZSwgbGlzdChhcHBlbmRzKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vdGFwcGVuZGVkLmFwcGVuZChiYXNlbmFtZSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZGVkLCBub3RhcHBlbmRlZAorCisgICAgZGVmIGRvX3Nob3dfY3Jvc3NfZGVwZW5kcyhzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiU2hvdyBkZXBlbmRlbmNpZXMgYmV0d2VlbiByZWNpcGVzIHRoYXQgY3Jvc3MgbGF5ZXIgYm91bmRhcmllcy4KKworRmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gcmVjaXBlcyB0aGF0IGNyb3NzIGxheWVyIGJvdW5kYXJpZXMuCisKK05PVEU6IC5iYmFwcGVuZCBmaWxlcyBjYW4gaW1wYWN0IHRoZSBkZXBlbmRlbmNpZXMuCisiIiIKKyAgICAgICAgaWdub3JlX2xheWVycyA9IChhcmdzLmlnbm9yZSBvciAnJykuc3BsaXQoJywnKQorCisgICAgICAgIHBrZ19mbiA9IHNlbGYudGluZm9pbC5jb29rZXJfZGF0YS5wa2dfZm4KKyAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYudGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpKQorICAgICAgICBzZWxmLnJlcXVpcmVfcmUgPSByZS5jb21waWxlKHIicmVxdWlyZVxzKyguKykiKQorICAgICAgICBzZWxmLmluY2x1ZGVfcmUgPSByZS5jb21waWxlKHIiaW5jbHVkZVxzKyguKykiKQorICAgICAgICBzZWxmLmluaGVyaXRfcmUgPSByZS5jb21waWxlKHIiaW5oZXJpdFxzKyguKykiKQorCisgICAgICAgIGdsb2JhbF9pbmhlcml0ID0gKHNlbGYudGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0lOSEVSSVQnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgICMgVGhlIGJiJ3MgREVQRU5EUyBhbmQgUkRFUEVORFMKKyAgICAgICAgZm9yIGYgaW4gcGtnX2ZuOgorICAgICAgICAgICAgZiA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oZilbMF0KKyAgICAgICAgICAgICMgR2V0IHRoZSBsYXllcm5hbWUgdGhhdCB0aGUgZmlsZSBpcyBpbgorICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfZmlsZV9sYXllcihmKQorCisgICAgICAgICAgICAjIFRoZSBERVBFTkRTCisgICAgICAgICAgICBkZXBzID0gc2VsZi50aW5mb2lsLmNvb2tlcl9kYXRhLmRlcHNbZl0KKyAgICAgICAgICAgIGZvciBwbiBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGlmIHBuIGluIHNlbGYudGluZm9pbC5jb29rZXJfZGF0YS5wa2dfcG46CisgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbmZvaWwuY29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW5mb2lsLmNvb2tlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGluZm9pbC5jb29rZXJfZGF0YS5wa2dfcG4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY3Jvc3NfZGVwZW5kcygiREVQRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdFszXSwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisKKyAgICAgICAgICAgICMgVGhlIFJEUEVORFMKKyAgICAgICAgICAgIGFsbF9yZGVwcyA9IHNlbGYudGluZm9pbC5jb29rZXJfZGF0YS5ydW5kZXBzW2ZdLnZhbHVlcygpCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBvciBudWxsIG9uZS4KKyAgICAgICAgICAgIHNvcnRlZF9yZGVwcyA9IHt9CisgICAgICAgICAgICAjIFRoZSBhbGxfcmRlcHMgaXMgdGhlIGxpc3QgaW4gbGlzdCwgc28gd2UgbmVlZCB0d28gZm9yIGxvb3BzCisgICAgICAgICAgICBmb3IgazEgaW4gYWxsX3JkZXBzOgorICAgICAgICAgICAgICAgIGZvciBrMiBpbiBrMToKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkX3JkZXBzW2syXSA9IDEKKyAgICAgICAgICAgIGFsbF9yZGVwcyA9IHNvcnRlZF9yZGVwcy5rZXlzKCkKKyAgICAgICAgICAgIGZvciByZGVwIGluIGFsbF9yZGVwczoKKyAgICAgICAgICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKHNlbGYudGluZm9pbC5jb29rZXJfZGF0YSwgcmRlcCkKKyAgICAgICAgICAgICAgICBpZiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZiBpbiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHJlY2lwZSBwcm92aWRlcyB0aGlzIG9uZSBpdHNlbGYsIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCByZGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW5mb2lsLmNvb2tlcl9kYXRhKVswXVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2Nyb3NzX2RlcGVuZHMoIlJERVBFTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0LCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgUlJFQ09NTUVORFMKKyAgICAgICAgICAgIGFsbF9ycmVjcyA9IHNlbGYudGluZm9pbC5jb29rZXJfZGF0YS5ydW5yZWNzW2ZdLnZhbHVlcygpCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBvciBudWxsIG9uZS4KKyAgICAgICAgICAgIHNvcnRlZF9ycmVjcyA9IHt9CisgICAgICAgICAgICAjIFRoZSBhbGxfcnJlY3MgaXMgdGhlIGxpc3QgaW4gbGlzdCwgc28gd2UgbmVlZCB0d28gZm9yIGxvb3BzCisgICAgICAgICAgICBmb3IgazEgaW4gYWxsX3JyZWNzOgorICAgICAgICAgICAgICAgIGZvciBrMiBpbiBrMToKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkX3JyZWNzW2syXSA9IDEKKyAgICAgICAgICAgIGFsbF9ycmVjcyA9IHNvcnRlZF9ycmVjcy5rZXlzKCkKKyAgICAgICAgICAgIGZvciBycmVjIGluIGFsbF9ycmVjczoKKyAgICAgICAgICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKHNlbGYudGluZm9pbC5jb29rZXJfZGF0YSwgcnJlYykKKyAgICAgICAgICAgICAgICBpZiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZiBpbiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHJlY2lwZSBwcm92aWRlcyB0aGlzIG9uZSBpdHNlbGYsIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCBycmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW5mb2lsLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW5mb2lsLmNvb2tlcl9kYXRhKVswXVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2Nyb3NzX2RlcGVuZHMoIlJSRUNPTU1FTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0LCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgaW5oZXJpdCBjbGFzcworICAgICAgICAgICAgY2xzX3JlID0gcmUuY29tcGlsZSgnY2xhc3Nlcy8nKQorICAgICAgICAgICAgaWYgZiBpbiBzZWxmLnRpbmZvaWwuY29va2VyX2RhdGEuaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBzZWxmLnRpbmZvaWwuY29va2VyX2RhdGEuaW5oZXJpdHNbZl0KKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIGluaGVyaXRzOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBpbmhlcml0cycgZm9ybWF0IGlzIFtjbGFzc2VzL2NscywgL3BhdGgvdG8vY2xhc3Nlcy9jbHNdCisgICAgICAgICAgICAgICAgICAgICMgaWdub3JlIHRoZSBjbGFzc2VzL2Nscy4KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNsc19yZS5tYXRjaChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNscykpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbGFzc25hbWUgaW4gZ2xvYmFsX2luaGVyaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRfbGF5ZXJuYW1lID0gc2VsZi5nZXRfZmlsZV9sYXllcihjbHMpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbmhlcml0X2xheWVybmFtZSAhPSBsYXllcm5hbWUgYW5kIG5vdCBpbmhlcml0X2xheWVybmFtZSBpbiBpZ25vcmVfbGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhcmdzLmZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9zaG9ydCA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMgPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoY2xzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfc2hvcnQgPSBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyBpbmhlcml0cyAlcyIgJSAoZl9zaG9ydCwgY2xzKSkKKworICAgICAgICAgICAgIyBUaGUgJ3JlcXVpcmUvaW5jbHVkZSB4eHgnIGluIHRoZSBiYiBmaWxlCisgICAgICAgICAgICBwdl9yZSA9IHJlLmNvbXBpbGUociJcJHtQVn0iKQorICAgICAgICAgICAgd2l0aCBvcGVuKGYsICdyJykgYXMgZm5maWxlOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmbmZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIG0sIGtleXdvcmQgPSBzZWxmLm1hdGNoX3JlcXVpcmVfaW5jbHVkZShsaW5lKQorICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIHRoZSAncmVxdWlyZS9pbmNsdWRlIHh4eHgnCisgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWRfZmlsZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVwbGFjZSB0aGUgJHtQVn0gd2l0aCB0aGUgcmVhbCBQVgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHZfcmUuc2VhcmNoKG5lZWRlZF9maWxlKSBhbmQgZiBpbiBzZWxmLnRpbmZvaWwuY29va2VyX2RhdGEucGtnX3BlcHZwcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdiA9IHNlbGYudGluZm9pbC5jb29rZXJfZGF0YS5wa2dfcGVwdnByW2ZdWzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkX2ZpbGUgPSByZS5zdWIociJcJHtQVn0iLCBwdiwgbmVlZGVkX2ZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50X2Nyb3NzX2ZpbGVzKGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZSwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmbmZpbGUucmVhZGxpbmUoKQorCisgICAgICAgICMgVGhlICJyZXF1aXJlL2luY2x1ZGUgeHh4IiBpbiBjb25mL21hY2hpbmUvKi5jb25mLCAuaW5jIGFuZCAuYmJjbGFzcworICAgICAgICBjb25mX3JlID0gcmUuY29tcGlsZSgiLiovY29uZi9tYWNoaW5lL1teXC9dKlwuY29uZiQiKQorICAgICAgICBpbmNfcmUgPSByZS5jb21waWxlKCIuKlwuaW5jJCIpCisgICAgICAgICMgVGhlICJpbmhlcml0IHh4eCIgaW4gLmJiY2xhc3MKKyAgICAgICAgYmJjbGFzc19yZSA9IHJlLmNvbXBpbGUoIi4qXC5iYmNsYXNzJCIpCisgICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgorICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsobGF5ZXJkaXIpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzID0gY29uZl9yZS5tYXRjaChmKSBvciBpbmNfcmUubWF0Y2goZikgb3IgYmJjbGFzc19yZS5tYXRjaChmKQorICAgICAgICAgICAgICAgICAgICBpZiBzOgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGYsICdyJykgYXMgZmZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZmaWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9yZXF1aXJlX2luY2x1ZGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPbmx5IGJiY2xhc3MgaGFzIHRoZSAiaW5oZXJpdCB4eHgiIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiY2xhc3M9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG0gYW5kIGYuZW5kc3dpdGgoIi5iYmNsYXNzIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9pbmhlcml0KGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYmNsYXNzPSIuYmJjbGFzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGaW5kIGEgJ3JlcXVpcmUvaW5jbHVkZSB4eHh4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmludF9jcm9zc19maWxlcyhiYnBhdGgsIGtleXdvcmQsIGxheWVybmFtZSwgZiwgbS5ncm91cCgxKSArIGJiY2xhc3MsIGFyZ3MuZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZmZpbGUucmVhZGxpbmUoKQorCisgICAgZGVmIHByaW50X2Nyb3NzX2ZpbGVzKHNlbGYsIGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZW5hbWUsIHNob3dfZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKToKKyAgICAgICAgIiIiUHJpbnQgdGhlIGRlcGVuZHMgdGhhdCBjcm9zc2VzIGEgbGF5ZXIgYm91bmRhcnkiIiIKKyAgICAgICAgbmVlZGVkX2ZpbGUgPSBiYi51dGlscy53aGljaChiYnBhdGgsIG5lZWRlZF9maWxlbmFtZSkKKyAgICAgICAgaWYgbmVlZGVkX2ZpbGU6CisgICAgICAgICAgICAjIFdoaWNoIGxheWVyIGlzIHRoaXMgZmlsZSBmcm9tCisgICAgICAgICAgICBuZWVkZWRfbGF5ZXJuYW1lID0gc2VsZi5nZXRfZmlsZV9sYXllcihuZWVkZWRfZmlsZSkKKyAgICAgICAgICAgIGlmIG5lZWRlZF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgbmVlZGVkX2xheWVybmFtZSBpbiBpZ25vcmVfbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzaG93X2ZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChmKQorICAgICAgICAgICAgICAgICAgICBuZWVkZWRfZmlsZSA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChuZWVkZWRfZmlsZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICVzICVzIiAlKGYsIGtleXdvcmQsIG5lZWRlZF9maWxlKSkKKworICAgIGRlZiBtYXRjaF9pbmhlcml0KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJNYXRjaCB0aGUgaW5oZXJpdCB4eHggbGluZSIiIgorICAgICAgICByZXR1cm4gKHNlbGYuaW5oZXJpdF9yZS5tYXRjaChsaW5lKSwgImluaGVyaXRzIikKKworICAgIGRlZiBtYXRjaF9yZXF1aXJlX2luY2x1ZGUoc2VsZiwgbGluZSk6CisgICAgICAgICIiIk1hdGNoIHRoZSByZXF1aXJlL2luY2x1ZGUgeHh4IGxpbmUiIiIKKyAgICAgICAgbSA9IHNlbGYucmVxdWlyZV9yZS5tYXRjaChsaW5lKQorICAgICAgICBrZXl3b3JkID0gInJlcXVpcmVzIgorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIG0gPSBzZWxmLmluY2x1ZGVfcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGtleXdvcmQgPSAiaW5jbHVkZXMiCisgICAgICAgIHJldHVybiAobSwga2V5d29yZCkKKworICAgIGRlZiBjaGVja19jcm9zc19kZXBlbmRzKHNlbGYsIGtleXdvcmQsIGxheWVybmFtZSwgZiwgbmVlZGVkX2ZpbGUsIHNob3dfZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKToKKyAgICAgICAgIiIiUHJpbnQgdGhlIERFUEVORFMvUkRFUEVORFMgZmlsZSB0aGF0IGNyb3NzZXMgYSBsYXllciBib3VuZGFyeSIiIgorICAgICAgICBiZXN0X3JlYWxmbiA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4obmVlZGVkX2ZpbGUpWzBdCisgICAgICAgIG5lZWRlZF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKGJlc3RfcmVhbGZuKQorICAgICAgICBpZiBuZWVkZWRfbGF5ZXJuYW1lICE9IGxheWVybmFtZSBhbmQgbm90IG5lZWRlZF9sYXllcm5hbWUgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgIGlmIG5vdCBzaG93X2ZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCisgICAgICAgICAgICAgICAgYmVzdF9yZWFsZm4gPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoYmVzdF9yZWFsZm4pCisKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMiICUgKGYsIGtleXdvcmQsIGJlc3RfcmVhbGZuKSkKKworICAgIGRlZiByZWdpc3Rlcl9jb21tYW5kcyhzZWxmLCBzcCk6CisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmQoc3AsICdzaG93LWxheWVycycsIHNlbGYuZG9fc2hvd19sYXllcnMsIHBhcnNlcmVjaXBlcz1GYWxzZSkKKworICAgICAgICBwYXJzZXJfc2hvd19vdmVybGF5ZWQgPSBzZWxmLmFkZF9jb21tYW5kKHNwLCAnc2hvdy1vdmVybGF5ZWQnLCBzZWxmLmRvX3Nob3dfb3ZlcmxheWVkKQorICAgICAgICBwYXJzZXJfc2hvd19vdmVybGF5ZWQuYWRkX2FyZ3VtZW50KCctZicsICctLWZpbGVuYW1lcycsIGhlbHA9J2luc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9ybWF0dGluZywgbGlzdCBmaWxlbmFtZXMgb2YgaGlnaGVyIHByaW9yaXR5IHJlY2lwZXMgd2l0aCB0aGUgb25lcyB0aGV5IG92ZXJsYXkgaW5kZW50ZWQgdW5kZXJuZWF0aCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIHBhcnNlcl9zaG93X292ZXJsYXllZC5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2FtZS12ZXJzaW9uJywgaGVscD0nb25seSBsaXN0IG92ZXJsYXllZCByZWNpcGVzIHdoZXJlIHRoZSB2ZXJzaW9uIGlzIHRoZSBzYW1lJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgICAgICBwYXJzZXJfc2hvd19yZWNpcGVzID0gc2VsZi5hZGRfY29tbWFuZChzcCwgJ3Nob3ctcmVjaXBlcycsIHNlbGYuZG9fc2hvd19yZWNpcGVzKQorICAgICAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlbmFtZXMnLCBoZWxwPSdpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGZvcm1hdHRpbmcsIGxpc3QgZmlsZW5hbWVzIG9mIGhpZ2hlciBwcmlvcml0eSByZWNpcGVzIHdpdGggdGhlIG9uZXMgdGhleSBvdmVybGF5IGluZGVudGVkIHVuZGVybmVhdGgnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tdWx0aXBsZScsIGhlbHA9J29ubHkgbGlzdCB3aGVyZSBtdWx0aXBsZSByZWNpcGVzIChpbiB0aGUgc2FtZSBsYXllciBvciBkaWZmZXJlbnQgbGF5ZXJzKSBleGlzdCBmb3IgdGhlIHNhbWUgcmVjaXBlIG5hbWUnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pbmhlcml0cycsIGhlbHA9J29ubHkgbGlzdCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgbmFtZWQgY2xhc3MnLCBtZXRhdmFyPSdDTEFTUycsIGRlZmF1bHQ9JycpCisgICAgICAgIHBhcnNlcl9zaG93X3JlY2lwZXMuYWRkX2FyZ3VtZW50KCdwbnNwZWMnLCBuYXJncz0nPycsIGhlbHA9J29wdGlvbmFsIHJlY2lwZSBuYW1lIHNwZWNpZmljYXRpb24gKHdpbGRjYXJkcyBhbGxvd2VkLCBlbmNsb3NlIGluIHF1b3RlcyB0byBhdm9pZCBzaGVsbCBleHBhbnNpb24pJykKKworICAgICAgICBzZWxmLmFkZF9jb21tYW5kKHNwLCAnc2hvdy1hcHBlbmRzJywgc2VsZi5kb19zaG93X2FwcGVuZHMpCisKKyAgICAgICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcyA9IHNlbGYuYWRkX2NvbW1hbmQoc3AsICdzaG93LWNyb3NzLWRlcGVuZHMnLCBzZWxmLmRvX3Nob3dfY3Jvc3NfZGVwZW5kcykKKyAgICAgICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0nc2hvdyBmdWxsIGZpbGUgcGF0aCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIHBhcnNlcl9zaG93X2Nyb3NzX2RlcGVuZHMuYWRkX2FyZ3VtZW50KCctaScsICctLWlnbm9yZScsIGhlbHA9J2lnbm9yZSBkZXBlbmRlbmNpZXMgb24gaXRlbXMgaW4gdGhlIHNwZWNpZmllZCBsYXllcihzKSAoc3BsaXQgbXVsdGlwbGUgbGF5ZXIgbmFtZXMgd2l0aCBjb21tYXMsIG5vIHNwYWNlcyknLCBtZXRhdmFyPSdMQVlFUk5BTUUnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9fX2luaXRfXy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvX19pbml0X18ucHkKaW5kZXggN2JhMzQyNi4uZjZmZGZkNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9fX2luaXRfXy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L19faW5pdF9fLnB5CkBAIC0xNyw4ICsxNyw4IEBACiAiIiIKIAogX19hdXRob3JfXyA9ICJMZW9uYXJkIFJpY2hhcmRzb24gKGxlb25hcmRyQHNlZ2ZhdWx0Lm9yZykiCi1fX3ZlcnNpb25fXyA9ICI0LjMuMiIKLV9fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMTMgTGVvbmFyZCBSaWNoYXJkc29uIgorX192ZXJzaW9uX18gPSAiNC40LjEiCitfX2NvcHlyaWdodF9fID0gIkNvcHlyaWdodCAoYykgMjAwNC0yMDE1IExlb25hcmQgUmljaGFyZHNvbiIKIF9fbGljZW5zZV9fID0gIk1JVCIKIAogX19hbGxfXyA9IFsnQmVhdXRpZnVsU291cCddCkBAIC00NSw3ICs0NSw3IEBACiAKICMgVGhlIHZlcnkgZmlyc3QgdGhpbmcgd2UgZG8gaXMgZ2l2ZSBhIHVzZWZ1bCBlcnJvciBpZiBzb21lb25lIGlzCiAjIHJ1bm5pbmcgdGhpcyBjb2RlIHVuZGVyIFB5dGhvbiAzIHdpdGhvdXQgY29udmVydGluZyBpdC4KLXN5bnRheF9lcnJvciA9IHUnWW91IGFyZSB0cnlpbmcgdG8gcnVuIHRoZSBQeXRob24gMiB2ZXJzaW9uIG9mIEJlYXV0aWZ1bCBTb3VwIHVuZGVyIFB5dGhvbiAzLiBUaGlzIHdpbGwgbm90IHdvcmsuIFlvdSBuZWVkIHRvIGNvbnZlcnQgdGhlIGNvZGUsIGVpdGhlciBieSBpbnN0YWxsaW5nIGl0IChgcHl0aG9uIHNldHVwLnB5IGluc3RhbGxgKSBvciBieSBydW5uaW5nIDJ0bzMgKGAydG8zIC13IGJzNGApLicKKydZb3UgYXJlIHRyeWluZyB0byBydW4gdGhlIFB5dGhvbiAyIHZlcnNpb24gb2YgQmVhdXRpZnVsIFNvdXAgdW5kZXIgUHl0aG9uIDMuIFRoaXMgd2lsbCBub3Qgd29yay4nIT0nWW91IG5lZWQgdG8gY29udmVydCB0aGUgY29kZSwgZWl0aGVyIGJ5IGluc3RhbGxpbmcgaXQgKGBweXRob24gc2V0dXAucHkgaW5zdGFsbGApIG9yIGJ5IHJ1bm5pbmcgMnRvMyAoYDJ0bzMgLXcgYnM0YCkuJwogCiBjbGFzcyBCZWF1dGlmdWxTb3VwKFRhZyk6CiAgICAgIiIiCkBAIC02OSw3ICs2OSw3IEBACiAgICAgbGlrZSBIVE1MJ3MgPGJyPiB0YWcpLCBjYWxsIGhhbmRsZV9zdGFydHRhZyBhbmQgdGhlbgogICAgIGhhbmRsZV9lbmR0YWcuCiAgICAgIiIiCi0gICAgUk9PVF9UQUdfTkFNRSA9IHUnW2RvY3VtZW50XScKKyAgICBST09UX1RBR19OQU1FID0gJ1tkb2N1bWVudF0nCiAKICAgICAjIElmIHRoZSBlbmQtdXNlciBnaXZlcyBubyBpbmRpY2F0aW9uIHdoaWNoIHRyZWUgYnVpbGRlciB0aGV5CiAgICAgIyB3YW50LCBsb29rIGZvciBvbmUgd2l0aCB0aGVzZSBmZWF0dXJlcy4KQEAgLTc3LDggKzc3LDExIEBACiAKICAgICBBU0NJSV9TUEFDRVMgPSAnXHgyMFx4MGFceDA5XHgwY1x4MGQnCiAKKyAgICBOT19QQVJTRVJfU1BFQ0lGSUVEX1dBUk5JTkcgPSAiTm8gcGFyc2VyIHdhcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgc28gSSdtIHVzaW5nIHRoZSBiZXN0IGF2YWlsYWJsZSAlKG1hcmt1cF90eXBlKXMgcGFyc2VyIGZvciB0aGlzIHN5c3RlbSAoXCIlKHBhcnNlcilzXCIpLiBUaGlzIHVzdWFsbHkgaXNuJ3QgYSBwcm9ibGVtLCBidXQgaWYgeW91IHJ1biB0aGlzIGNvZGUgb24gYW5vdGhlciBzeXN0ZW0sIG9yIGluIGEgZGlmZmVyZW50IHZpcnR1YWwgZW52aXJvbm1lbnQsIGl0IG1heSB1c2UgYSBkaWZmZXJlbnQgcGFyc2VyIGFuZCBiZWhhdmUgZGlmZmVyZW50bHkuXG5cblRvIGdldCByaWQgb2YgdGhpcyB3YXJuaW5nLCBjaGFuZ2UgdGhpczpcblxuIEJlYXV0aWZ1bFNvdXAoW3lvdXIgbWFya3VwXSlcblxudG8gdGhpczpcblxuIEJlYXV0aWZ1bFNvdXAoW3lvdXIgbWFya3VwXSwgXCIlKHBhcnNlcilzXCIpXG4iCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwPSIiLCBmZWF0dXJlcz1Ob25lLCBidWlsZGVyPU5vbmUsCi0gICAgICAgICAgICAgICAgIHBhcnNlX29ubHk9Tm9uZSwgZnJvbV9lbmNvZGluZz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgIHBhcnNlX29ubHk9Tm9uZSwgZnJvbV9lbmNvZGluZz1Ob25lLCBleGNsdWRlX2VuY29kaW5ncz1Ob25lLAorICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CiAgICAgICAgICIiIlRoZSBTb3VwIG9iamVjdCBpcyBpbml0aWFsaXplZCBhcyB0aGUgJ3Jvb3QgdGFnJywgYW5kIHRoZQogICAgICAgICBwcm92aWRlZCBtYXJrdXAgKHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIGZpbGUtbGlrZSBvYmplY3QpCiAgICAgICAgIGlzIGZlZCBpbnRvIHRoZSB1bmRlcmx5aW5nIHBhcnNlci4iIiIKQEAgLTExNCw5ICsxMTcsOSBAQAogICAgICAgICAgICAgZGVsIGt3YXJnc1snaXNIVE1MJ10KICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBpc0hUTUwgYXJndW1lbnQgdG8gdGhlICIKLSAgICAgICAgICAgICAgICAiQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4gWW91IGNhbiBwYXNzIGluIGZlYXR1cmVzPSdodG1sJyAiCi0gICAgICAgICAgICAgICAgIm9yIGZlYXR1cmVzPSd4bWwnIHRvIGdldCBhIGJ1aWxkZXIgY2FwYWJsZSBvZiBoYW5kbGluZyAiCi0gICAgICAgICAgICAgICAgIm9uZSBvciB0aGUgb3RoZXIuIikKKyAgICAgICAgICAgICAgICAiQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4gU3VnZ2VzdCB5b3UgdXNlICIKKyAgICAgICAgICAgICAgICAiZmVhdHVyZXM9J2x4bWwnIGZvciBIVE1MIGFuZCBmZWF0dXJlcz0nbHhtbC14bWwnIGZvciAiCisgICAgICAgICAgICAgICAgIlhNTC4iKQogCiAgICAgICAgIGRlZiBkZXByZWNhdGVkX2FyZ3VtZW50KG9sZF9uYW1lLCBuZXdfbmFtZSk6CiAgICAgICAgICAgICBpZiBvbGRfbmFtZSBpbiBrd2FyZ3M6CkBAIC0xMzUsMTIgKzEzOCwxMyBAQAogICAgICAgICAgICAgImZyb21FbmNvZGluZyIsICJmcm9tX2VuY29kaW5nIikKIAogICAgICAgICBpZiBsZW4oa3dhcmdzKSA+IDA6Ci0gICAgICAgICAgICBhcmcgPSBrd2FyZ3Mua2V5cygpLnBvcCgpCisgICAgICAgICAgICBhcmcgPSBsaXN0KGt3YXJncy5rZXlzKCkpLnBvcCgpCiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgIl9faW5pdF9fKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJXMnIiAlIGFyZykKIAogICAgICAgICBpZiBidWlsZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZlYXR1cmVzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIG9yaWdpbmFsX2ZlYXR1cmVzID0gZmVhdHVyZXMKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmVhdHVyZXMsIHN0cik6CiAgICAgICAgICAgICAgICAgZmVhdHVyZXMgPSBbZmVhdHVyZXNdCiAgICAgICAgICAgICBpZiBmZWF0dXJlcyBpcyBOb25lIG9yIGxlbihmZWF0dXJlcykgPT0gMDoKICAgICAgICAgICAgICAgICBmZWF0dXJlcyA9IHNlbGYuREVGQVVMVF9CVUlMREVSX0ZFQVRVUkVTCkBAIC0xNTEsNiArMTU1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0ZWQ6ICVzLiBEbyB5b3UgbmVlZCB0byBpbnN0YWxsIGEgcGFyc2VyIGxpYnJhcnk/IgogICAgICAgICAgICAgICAgICAgICAlICIsIi5qb2luKGZlYXR1cmVzKSkKICAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyX2NsYXNzKCkKKyAgICAgICAgICAgIGlmIG5vdCAob3JpZ2luYWxfZmVhdHVyZXMgPT0gYnVpbGRlci5OQU1FIG9yCisgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsX2ZlYXR1cmVzIGluIGJ1aWxkZXIuQUxURVJOQVRFX05BTUVTKToKKyAgICAgICAgICAgICAgICBpZiBidWlsZGVyLmlzX3htbDoKKyAgICAgICAgICAgICAgICAgICAgbWFya3VwX3R5cGUgPSAiWE1MIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1hcmt1cF90eXBlID0gIkhUTUwiCisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybihzZWxmLk5PX1BBUlNFUl9TUEVDSUZJRURfV0FSTklORyAlIGRpY3QoCisgICAgICAgICAgICAgICAgICAgIHBhcnNlcj1idWlsZGVyLk5BTUUsCisgICAgICAgICAgICAgICAgICAgIG1hcmt1cF90eXBlPW1hcmt1cF90eXBlKSkKKwogICAgICAgICBzZWxmLmJ1aWxkZXIgPSBidWlsZGVyCiAgICAgICAgIHNlbGYuaXNfeG1sID0gYnVpbGRlci5pc194bWwKICAgICAgICAgc2VsZi5idWlsZGVyLnNvdXAgPSBzZWxmCkBAIC0xNjQsNyArMTc4LDcgQEAKICAgICAgICAgICAgICMgaW52b2x2aW5nIHBhc3Npbmcgbm9uLW1hcmt1cCB0byBCZWF1dGlmdWwgU291cC4KICAgICAgICAgICAgICMgQmVhdXRpZnVsIFNvdXAgd2lsbCBzdGlsbCBwYXJzZSB0aGUgaW5wdXQgYXMgbWFya3VwLAogICAgICAgICAgICAgIyBqdXN0IGluIGNhc2UgdGhhdCdzIHdoYXQgdGhlIHVzZXIgcmVhbGx5IHdhbnRzLgotICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKQorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWFya3VwLCBzdHIpCiAgICAgICAgICAgICAgICAgYW5kIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzKToKICAgICAgICAgICAgICAgICBwb3NzaWJsZV9maWxlbmFtZSA9IG1hcmt1cC5lbmNvZGUoInV0ZjgiKQogICAgICAgICAgICAgZWxzZToKQEAgLTE3MiwyNSArMTg2LDMwIEBACiAgICAgICAgICAgICBpc19maWxlID0gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpc19maWxlID0gb3MucGF0aC5leGlzdHMocG9zc2libGVfZmlsZW5hbWUpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGEgcHJvYmxlbSBpbnZvbHZpbmcKICAgICAgICAgICAgICAgICAjIGNoYXJhY3RlcnMgbm90IHZhbGlkIGluIGZpbGVuYW1lcyBvbiB0aGlzCiAgICAgICAgICAgICAgICAgIyBzeXN0ZW0uIEp1c3QgbGV0IGl0IGdvLgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGlmIGlzX2ZpbGU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHN0cik6CisgICAgICAgICAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cC5lbmNvZGUoInV0ZjgiKQogICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAgICAgICAgICciJXMiIGxvb2tzIGxpa2UgYSBmaWxlbmFtZSwgbm90IG1hcmt1cC4gWW91IHNob3VsZCBwcm9iYWJseSBvcGVuIHRoaXMgZmlsZSBhbmQgcGFzcyB0aGUgZmlsZWhhbmRsZSBpbnRvIEJlYXV0aWZ1bCBTb3VwLicgJSBtYXJrdXApCiAgICAgICAgICAgICBpZiBtYXJrdXBbOjVdID09ICJodHRwOiIgb3IgbWFya3VwWzo2XSA9PSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgICAjIFRPRE86IFRoaXMgaXMgdWdseSBidXQgSSBjb3VsZG4ndCBnZXQgaXQgdG8gd29yayBpbgogICAgICAgICAgICAgICAgICMgUHl0aG9uIDMgb3RoZXJ3aXNlLgogICAgICAgICAgICAgICAgIGlmICgoaXNpbnN0YW5jZShtYXJrdXAsIGJ5dGVzKSBhbmQgbm90IGInICcgaW4gbWFya3VwKQotICAgICAgICAgICAgICAgICAgICBvciAoaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpIGFuZCBub3QgdScgJyBpbiBtYXJrdXApKToKKyAgICAgICAgICAgICAgICAgICAgb3IgKGlzaW5zdGFuY2UobWFya3VwLCBzdHIpIGFuZCBub3QgJyAnIGluIG1hcmt1cCkpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cC5lbmNvZGUoInV0ZjgiKQogICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICAgICAgICAgICAgICAgICAgJyIlcyIgbG9va3MgbGlrZSBhIFVSTC4gQmVhdXRpZnVsIFNvdXAgaXMgbm90IGFuIEhUVFAgY2xpZW50LiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBhbiBIVFRQIGNsaWVudCB0byBnZXQgdGhlIGRvY3VtZW50IGJlaGluZCB0aGUgVVJMLCBhbmQgZmVlZCB0aGF0IGRvY3VtZW50IHRvIEJlYXV0aWZ1bCBTb3VwLicgJSBtYXJrdXApCiAKICAgICAgICAgZm9yIChzZWxmLm1hcmt1cCwgc2VsZi5vcmlnaW5hbF9lbmNvZGluZywgc2VsZi5kZWNsYXJlZF9odG1sX2VuY29kaW5nLAogICAgICAgICAgc2VsZi5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKSBpbiAoCi0gICAgICAgICAgICBzZWxmLmJ1aWxkZXIucHJlcGFyZV9tYXJrdXAobWFya3VwLCBmcm9tX2VuY29kaW5nKSk6CisgICAgICAgICAgICAgc2VsZi5idWlsZGVyLnByZXBhcmVfbWFya3VwKAorICAgICAgICAgICAgICAgICBtYXJrdXAsIGZyb21fZW5jb2RpbmcsIGV4Y2x1ZGVfZW5jb2RpbmdzPWV4Y2x1ZGVfZW5jb2RpbmdzKSk6CiAgICAgICAgICAgICBzZWxmLnJlc2V0KCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKCkKQEAgLTIwMyw2ICsyMjIsMTYgQEAKICAgICAgICAgc2VsZi5tYXJrdXAgPSBOb25lCiAgICAgICAgIHNlbGYuYnVpbGRlci5zb3VwID0gTm9uZQogCisgICAgZGVmIF9fY29weV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzZWxmLmVuY29kZSgpLCBidWlsZGVyPXNlbGYuYnVpbGRlcikKKworICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICMgRnJlcXVlbnRseSBhIHRyZWUgYnVpbGRlciBjYW4ndCBiZSBwaWNrbGVkLgorICAgICAgICBkID0gZGljdChzZWxmLl9fZGljdF9fKQorICAgICAgICBpZiAnYnVpbGRlcicgaW4gZCBhbmQgbm90IHNlbGYuYnVpbGRlci5waWNrbGFibGU6CisgICAgICAgICAgICBkZWwgZFsnYnVpbGRlciddCisgICAgICAgIHJldHVybiBkCisKICAgICBkZWYgX2ZlZWQoc2VsZik6CiAgICAgICAgICMgQ29udmVydCB0aGUgZG9jdW1lbnQgdG8gVW5pY29kZS4KICAgICAgICAgc2VsZi5idWlsZGVyLnJlc2V0KCkKQEAgLTIyOSw5ICsyNTgsNyBAQAogCiAgICAgZGVmIG5ld19zdHJpbmcoc2VsZiwgcywgc3ViY2xhc3M9TmF2aWdhYmxlU3RyaW5nKToKICAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IE5hdmlnYWJsZVN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb3VwLiIiIgotICAgICAgICBuYXZpZ2FibGUgPSBzdWJjbGFzcyhzKQotICAgICAgICBuYXZpZ2FibGUuc2V0dXAoKQotICAgICAgICByZXR1cm4gbmF2aWdhYmxlCisgICAgICAgIHJldHVybiBzdWJjbGFzcyhzKQogCiAgICAgZGVmIGluc2VydF9iZWZvcmUoc2VsZiwgc3VjY2Vzc29yKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiQmVhdXRpZnVsU291cCBvYmplY3RzIGRvbid0IHN1cHBvcnQgaW5zZXJ0X2JlZm9yZSgpLiIpCkBAIC0yNTksNyArMjg2LDcgQEAKIAogICAgIGRlZiBlbmREYXRhKHNlbGYsIGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0cmluZyk6CiAgICAgICAgIGlmIHNlbGYuY3VycmVudF9kYXRhOgotICAgICAgICAgICAgY3VycmVudF9kYXRhID0gdScnLmpvaW4oc2VsZi5jdXJyZW50X2RhdGEpCisgICAgICAgICAgICBjdXJyZW50X2RhdGEgPSAnJy5qb2luKHNlbGYuY3VycmVudF9kYXRhKQogICAgICAgICAgICAgIyBJZiB3aGl0ZXNwYWNlIGlzIG5vdCBwcmVzZXJ2ZWQsIGFuZCB0aGlzIHN0cmluZyBjb250YWlucwogICAgICAgICAgICAgIyBub3RoaW5nIGJ1dCBBU0NJSSBzcGFjZXMsIHJlcGxhY2UgaXQgd2l0aCBhIHNpbmdsZSBzcGFjZQogICAgICAgICAgICAgIyBvciBuZXdsaW5lLgpAQCAtMjkwLDE0ICszMTcsNDkgQEAKICAgICBkZWYgb2JqZWN0X3dhc19wYXJzZWQoc2VsZiwgbywgcGFyZW50PU5vbmUsIG1vc3RfcmVjZW50X2VsZW1lbnQ9Tm9uZSk6CiAgICAgICAgICIiIkFkZCBhbiBvYmplY3QgdG8gdGhlIHBhcnNlIHRyZWUuIiIiCiAgICAgICAgIHBhcmVudCA9IHBhcmVudCBvciBzZWxmLmN1cnJlbnRUYWcKLSAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudCA9IG1vc3RfcmVjZW50X2VsZW1lbnQgb3Igc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudAotICAgICAgICBvLnNldHVwKHBhcmVudCwgbW9zdF9yZWNlbnRfZWxlbWVudCkKKyAgICAgICAgcHJldmlvdXNfZWxlbWVudCA9IG1vc3RfcmVjZW50X2VsZW1lbnQgb3Igc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudAogCi0gICAgICAgIGlmIG1vc3RfcmVjZW50X2VsZW1lbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50Lm5leHRfZWxlbWVudCA9IG8KKyAgICAgICAgbmV4dF9lbGVtZW50ID0gcHJldmlvdXNfc2libGluZyA9IG5leHRfc2libGluZyA9IE5vbmUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvLCBUYWcpOgorICAgICAgICAgICAgbmV4dF9lbGVtZW50ID0gby5uZXh0X2VsZW1lbnQKKyAgICAgICAgICAgIG5leHRfc2libGluZyA9IG8ubmV4dF9zaWJsaW5nCisgICAgICAgICAgICBwcmV2aW91c19zaWJsaW5nID0gby5wcmV2aW91c19zaWJsaW5nCisgICAgICAgICAgICBpZiBub3QgcHJldmlvdXNfZWxlbWVudDoKKyAgICAgICAgICAgICAgICBwcmV2aW91c19lbGVtZW50ID0gby5wcmV2aW91c19lbGVtZW50CisKKyAgICAgICAgby5zZXR1cChwYXJlbnQsIHByZXZpb3VzX2VsZW1lbnQsIG5leHRfZWxlbWVudCwgcHJldmlvdXNfc2libGluZywgbmV4dF9zaWJsaW5nKQorCiAgICAgICAgIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQgPSBvCiAgICAgICAgIHBhcmVudC5jb250ZW50cy5hcHBlbmQobykKIAorICAgICAgICBpZiBwYXJlbnQubmV4dF9zaWJsaW5nOgorICAgICAgICAgICAgIyBUaGlzIG5vZGUgaXMgYmVpbmcgaW5zZXJ0ZWQgaW50byBhbiBlbGVtZW50IHRoYXQgaGFzCisgICAgICAgICAgICAjIGFscmVhZHkgYmVlbiBwYXJzZWQuIERlYWwgd2l0aCBhbnkgZGFuZ2xpbmcgcmVmZXJlbmNlcy4KKyAgICAgICAgICAgIGluZGV4ID0gcGFyZW50LmNvbnRlbnRzLmluZGV4KG8pCisgICAgICAgICAgICBpZiBpbmRleCA9PSAwOgorICAgICAgICAgICAgICAgIHByZXZpb3VzX2VsZW1lbnQgPSBwYXJlbnQKKyAgICAgICAgICAgICAgICBwcmV2aW91c19zaWJsaW5nID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmV2aW91c19lbGVtZW50ID0gcHJldmlvdXNfc2libGluZyA9IHBhcmVudC5jb250ZW50c1tpbmRleC0xXQorICAgICAgICAgICAgaWYgaW5kZXggPT0gbGVuKHBhcmVudC5jb250ZW50cyktMToKKyAgICAgICAgICAgICAgICBuZXh0X2VsZW1lbnQgPSBwYXJlbnQubmV4dF9zaWJsaW5nCisgICAgICAgICAgICAgICAgbmV4dF9zaWJsaW5nID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXh0X2VsZW1lbnQgPSBuZXh0X3NpYmxpbmcgPSBwYXJlbnQuY29udGVudHNbaW5kZXgrMV0KKworICAgICAgICAgICAgby5wcmV2aW91c19lbGVtZW50ID0gcHJldmlvdXNfZWxlbWVudAorICAgICAgICAgICAgaWYgcHJldmlvdXNfZWxlbWVudDoKKyAgICAgICAgICAgICAgICBwcmV2aW91c19lbGVtZW50Lm5leHRfZWxlbWVudCA9IG8KKyAgICAgICAgICAgIG8ubmV4dF9lbGVtZW50ID0gbmV4dF9lbGVtZW50CisgICAgICAgICAgICBpZiBuZXh0X2VsZW1lbnQ6CisgICAgICAgICAgICAgICAgbmV4dF9lbGVtZW50LnByZXZpb3VzX2VsZW1lbnQgPSBvCisgICAgICAgICAgICBvLm5leHRfc2libGluZyA9IG5leHRfc2libGluZworICAgICAgICAgICAgaWYgbmV4dF9zaWJsaW5nOgorICAgICAgICAgICAgICAgIG5leHRfc2libGluZy5wcmV2aW91c19zaWJsaW5nID0gbworICAgICAgICAgICAgby5wcmV2aW91c19zaWJsaW5nID0gcHJldmlvdXNfc2libGluZworICAgICAgICAgICAgaWYgcHJldmlvdXNfc2libGluZzoKKyAgICAgICAgICAgICAgICBwcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZyA9IG8KKwogICAgIGRlZiBfcG9wVG9UYWcoc2VsZiwgbmFtZSwgbnNwcmVmaXg9Tm9uZSwgaW5jbHVzaXZlUG9wPVRydWUpOgogICAgICAgICAiIiJQb3BzIHRoZSB0YWcgc3RhY2sgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQKICAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHRhZy4gSWYgaW5jbHVzaXZlUG9wIGlzIGZhbHNlLCBwb3BzIHRoZSB0YWcKQEAgLTM2Nyw5ICs0MjksOSBAQAogICAgICAgICAgICAgZW5jb2RpbmdfcGFydCA9ICcnCiAgICAgICAgICAgICBpZiBldmVudHVhbF9lbmNvZGluZyAhPSBOb25lOgogICAgICAgICAgICAgICAgIGVuY29kaW5nX3BhcnQgPSAnIGVuY29kaW5nPSIlcyInICUgZXZlbnR1YWxfZW5jb2RpbmcKLSAgICAgICAgICAgIHByZWZpeCA9IHUnPD94bWwgdmVyc2lvbj0iMS4wIiVzPz5cbicgJSBlbmNvZGluZ19wYXJ0CisgICAgICAgICAgICBwcmVmaXggPSAnPD94bWwgdmVyc2lvbj0iMS4wIiVzPz5cbicgJSBlbmNvZGluZ19wYXJ0CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmVmaXggPSB1JycKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCiAgICAgICAgIGlmIG5vdCBwcmV0dHlfcHJpbnQ6CiAgICAgICAgICAgICBpbmRlbnRfbGV2ZWwgPSBOb25lCiAgICAgICAgIGVsc2U6CkBAIC00MDMsNCArNDY1LDQgQEAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgaW1wb3J0IHN5cwogICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHN5cy5zdGRpbikKLSAgICBwcmludCBzb3VwLnByZXR0aWZ5KCkKKyAgICBwcmludChzb3VwLnByZXR0aWZ5KCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX19pbml0X18ucHkKaW5kZXggNzQwZjVmMi4uNmNjZDRkMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19faW5pdF9fLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fX2luaXRfXy5weQpAQCAtODAsOSArODAsMTIgQEAKIGNsYXNzIFRyZWVCdWlsZGVyKG9iamVjdCk6CiAgICAgIiIiVHVybiBhIGRvY3VtZW50IGludG8gYSBCZWF1dGlmdWwgU291cCBvYmplY3QgdHJlZS4iIiIKIAorICAgIE5BTUUgPSAiW1Vua25vd24gdHJlZSBidWlsZGVyXSIKKyAgICBBTFRFUk5BVEVfTkFNRVMgPSBbXQogICAgIGZlYXR1cmVzID0gW10KIAogICAgIGlzX3htbCA9IEZhbHNlCisgICAgcGlja2xhYmxlID0gRmFsc2UKICAgICBwcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ3MgPSBzZXQoKQogICAgIGVtcHR5X2VsZW1lbnRfdGFncyA9IE5vbmUgIyBBIHRhZyB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gZW1wdHktZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0YWcgd2hlbiBhbmQgb25seSB3aGVuIGl0IGhhcyBubyBjb250ZW50cy4KQEAgLTE1MywxMyArMTU2LDEzIEBACiAgICAgICAgICAgICB1bml2ZXJzYWwgPSBzZWxmLmNkYXRhX2xpc3RfYXR0cmlidXRlcy5nZXQoJyonLCBbXSkKICAgICAgICAgICAgIHRhZ19zcGVjaWZpYyA9IHNlbGYuY2RhdGFfbGlzdF9hdHRyaWJ1dGVzLmdldCgKICAgICAgICAgICAgICAgICB0YWdfbmFtZS5sb3dlcigpLCBOb25lKQotICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cnMua2V5cygpOgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gbGlzdChhdHRycy5rZXlzKCkpOgogICAgICAgICAgICAgICAgIGlmIGF0dHIgaW4gdW5pdmVyc2FsIG9yICh0YWdfc3BlY2lmaWMgYW5kIGF0dHIgaW4gdGFnX3NwZWNpZmljKToKICAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgImNsYXNzIi10eXBlIGF0dHJpYnV0ZSB3aG9zZSBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZSBpcyBhIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YKICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZXMuIFNwbGl0IGl0IGludG8gYSBsaXN0LgogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGF0dHJzW2F0dHJdCi0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gd2hpdGVzcGFjZV9yZS5zcGxpdCh2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgaHRtbDVsaWIgc29tZXRpbWVzIGNhbGxzIHNldEF0dHJpYnV0ZXMgdHdpY2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbDVsaWIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWw1bGliLnB5CmluZGV4IDdkZTM2YWU3Li5mMGU1OTI0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWw1bGliLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbDVsaWIucHkKQEAgLTIsNiArMiw3IEBACiAgICAgJ0hUTUw1VHJlZUJ1aWxkZXInLAogICAgIF0KIAorZnJvbSBwZGIgaW1wb3J0IHNldF90cmFjZQogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCiAgICAgUEVSTUlTU0lWRSwKQEAgLTksNyArMTAsMTAgQEAKICAgICBIVE1MXzUsCiAgICAgSFRNTFRyZWVCdWlsZGVyLAogICAgICkKLWZyb20gYnM0LmVsZW1lbnQgaW1wb3J0IE5hbWVzcGFjZWRBdHRyaWJ1dGUKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBOYW1lc3BhY2VkQXR0cmlidXRlLAorICAgIHdoaXRlc3BhY2VfcmUsCispCiBpbXBvcnQgaHRtbDVsaWIKIGZyb20gaHRtbDVsaWIuY29uc3RhbnRzIGltcG9ydCBuYW1lc3BhY2VzCiBmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCkBAIC0yMiwxMSArMjYsMjAgQEAKIGNsYXNzIEhUTUw1VHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyKToKICAgICAiIiJVc2UgaHRtbDVsaWIgdG8gYnVpbGQgYSB0cmVlLiIiIgogCi0gICAgZmVhdHVyZXMgPSBbJ2h0bWw1bGliJywgUEVSTUlTU0lWRSwgSFRNTF81LCBIVE1MXQorICAgIE5BTUUgPSAiaHRtbDVsaWIiCiAKLSAgICBkZWYgcHJlcGFyZV9tYXJrdXAoc2VsZiwgbWFya3VwLCB1c2VyX3NwZWNpZmllZF9lbmNvZGluZyk6CisgICAgZmVhdHVyZXMgPSBbTkFNRSwgUEVSTUlTU0lWRSwgSFRNTF81LCBIVE1MXQorCisgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nPU5vbmUsIGV4Y2x1ZGVfZW5jb2RpbmdzPU5vbmUpOgogICAgICAgICAjIFN0b3JlIHRoZSB1c2VyLXNwZWNpZmllZCBlbmNvZGluZyBmb3IgdXNlIGxhdGVyIG9uLgogICAgICAgICBzZWxmLnVzZXJfc3BlY2lmaWVkX2VuY29kaW5nID0gdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcKKworICAgICAgICAjIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nIGFuZCBleGNsdWRlX2VuY29kaW5ncyBhcmVuJ3QgdXNlZAorICAgICAgICAjIEFUTSBiZWNhdXNlIHRoZSBodG1sNWxpYiBUcmVlQnVpbGRlciBkb2Vzbid0IHVzZQorICAgICAgICAjIFVuaWNvZGVEYW1taXQuCisgICAgICAgIGlmIGV4Y2x1ZGVfZW5jb2RpbmdzOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiWW91IHByb3ZpZGVkIGEgdmFsdWUgZm9yIGV4Y2x1ZGVfZW5jb2RpbmcsIGJ1dCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBleGNsdWRlX2VuY29kaW5nLiIpCiAgICAgICAgIHlpZWxkIChtYXJrdXAsIE5vbmUsIE5vbmUsIEZhbHNlKQogCiAgICAgIyBUaGVzZSBtZXRob2RzIGFyZSBkZWZpbmVkIGJ5IEJlYXV0aWZ1bCBTb3VwLgpAQCAtMzcsNyArNTAsNyBAQAogICAgICAgICBkb2MgPSBwYXJzZXIucGFyc2UobWFya3VwLCBlbmNvZGluZz1zZWxmLnVzZXJfc3BlY2lmaWVkX2VuY29kaW5nKQogCiAgICAgICAgICMgU2V0IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgZGV0ZWN0ZWQgYnkgdGhlIHRva2VuaXplci4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgc3RyKToKICAgICAgICAgICAgICMgV2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGh0bWw1bGliIHNldHMKICAgICAgICAgICAgICMgY2hhckVuY29kaW5nIHRvIFVURi04IGlmIGl0IGdldHMgVW5pY29kZSBpbnB1dC4KICAgICAgICAgICAgIGRvYy5vcmlnaW5hbF9lbmNvZGluZyA9IE5vbmUKQEAgLTUxLDcgKzY0LDcgQEAKIAogICAgIGRlZiB0ZXN0X2ZyYWdtZW50X3RvX2RvY3VtZW50KHNlbGYsIGZyYWdtZW50KToKICAgICAgICAgIiIiU2VlIGBUcmVlQnVpbGRlcmAuIiIiCi0gICAgICAgIHJldHVybiB1JzxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT4lczwvYm9keT48L2h0bWw+JyAlIGZyYWdtZW50CisgICAgICAgIHJldHVybiAnPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4nICUgZnJhZ21lbnQKIAogCiBjbGFzcyBUcmVlQnVpbGRlckZvckh0bWw1bGliKGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5UcmVlQnVpbGRlcik6CkBAIC0xMDEsNyArMTE0LDE2IEBACiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gbGlzdChzZWxmLmF0dHJzLml0ZW1zKCkpLl9faXRlcl9fKCkKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICAic2V0IGF0dHIiLCBuYW1lLCB2YWx1ZQorICAgICAgICAjIElmIHRoaXMgYXR0cmlidXRlIGlzIGEgbXVsdGktdmFsdWVkIGF0dHJpYnV0ZSBmb3IgdGhpcyBlbGVtZW50LAorICAgICAgICAjIHR1cm4gaXRzIHZhbHVlIGludG8gYSBsaXN0LgorICAgICAgICBsaXN0X2F0dHIgPSBIVE1MNVRyZWVCdWlsZGVyLmNkYXRhX2xpc3RfYXR0cmlidXRlcworICAgICAgICBpZiAobmFtZSBpbiBsaXN0X2F0dHJbJyonXQorICAgICAgICAgICAgb3IgKHNlbGYuZWxlbWVudC5uYW1lIGluIGxpc3RfYXR0cgorICAgICAgICAgICAgICAgIGFuZCBuYW1lIGluIGxpc3RfYXR0cltzZWxmLmVsZW1lbnQubmFtZV0pKToKKyAgICAgICAgICAgICMgQSBub2RlIHRoYXQgaXMgYmVpbmcgY2xvbmVkIG1heSBoYXZlIGFscmVhZHkgdW5kZXJnb25lCisgICAgICAgICAgICAjIHRoaXMgcHJvY2VkdXJlLgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gd2hpdGVzcGFjZV9yZS5zcGxpdCh2YWx1ZSkKICAgICAgICAgc2VsZi5lbGVtZW50W25hbWVdID0gdmFsdWUKICAgICBkZWYgaXRlbXMoc2VsZik6CiAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuYXR0cnMuaXRlbXMoKSkKQEAgLTEyNCw3ICsxNDYsNyBAQAogCiAgICAgZGVmIGFwcGVuZENoaWxkKHNlbGYsIG5vZGUpOgogICAgICAgICBzdHJpbmdfY2hpbGQgPSBjaGlsZCA9IE5vbmUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBzdHIpOgogICAgICAgICAgICAgIyBTb21lIG90aGVyIHBpZWNlIG9mIGNvZGUgZGVjaWRlZCB0byBwYXNzIGluIGEgc3RyaW5nCiAgICAgICAgICAgICAjIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBUZXh0RWxlbWVudCBvYmplY3QgdG8gY29udGFpbiB0aGUKICAgICAgICAgICAgICMgc3RyaW5nLgpAQCAtMTM5LDcgKzE2MSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjaGlsZCA9IG5vZGUuZWxlbWVudAogCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNoaWxkLCBiYXNlc3RyaW5nKSBhbmQgY2hpbGQucGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjaGlsZCwgc3RyKSBhbmQgY2hpbGQucGFyZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgbm9kZS5lbGVtZW50LmV4dHJhY3QoKQogCiAgICAgICAgIGlmIChzdHJpbmdfY2hpbGQgYW5kIHNlbGYuZWxlbWVudC5jb250ZW50cwpAQCAtMTUyLDcgKzE3NCw3IEBACiAgICAgICAgICAgICBvbGRfZWxlbWVudC5yZXBsYWNlX3dpdGgobmV3X2VsZW1lbnQpCiAgICAgICAgICAgICBzZWxmLnNvdXAuX21vc3RfcmVjZW50X2VsZW1lbnQgPSBuZXdfZWxlbWVudAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgc3RyKToKICAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIGJyYW5kIG5ldyBOYXZpZ2FibGVTdHJpbmcgZnJvbSB0aGlzIHN0cmluZy4KICAgICAgICAgICAgICAgICBjaGlsZCA9IHNlbGYuc291cC5uZXdfc3RyaW5nKG5vZGUpCiAKQEAgLTE2MSw2ICsxODMsMTIgQEAKICAgICAgICAgICAgICMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHBhcmVudCwgaWYgaXQgaGFzIG5vIGNoaWxkcmVuLikKICAgICAgICAgICAgIGlmIHNlbGYuZWxlbWVudC5jb250ZW50czoKICAgICAgICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50ID0gc2VsZi5lbGVtZW50Ll9sYXN0X2Rlc2NlbmRhbnQoRmFsc2UpCisgICAgICAgICAgICBlbGlmIHNlbGYuZWxlbWVudC5uZXh0X2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBTb21ldGhpbmcgZnJvbSBmdXJ0aGVyIGFoZWFkIGluIHRoZSBwYXJzZSB0cmVlIGlzCisgICAgICAgICAgICAgICAgIyBiZWluZyBpbnNlcnRlZCBpbnRvIHRoaXMgZWFybGllciBlbGVtZW50LiBUaGlzIGlzCisgICAgICAgICAgICAgICAgIyB2ZXJ5IGFubm95aW5nIGJlY2F1c2UgaXQgbWVhbnMgYW4gZXhwZW5zaXZlIHNlYXJjaAorICAgICAgICAgICAgICAgICMgZm9yIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudCA9IHNlbGYuc291cC5fbGFzdF9kZXNjZW5kYW50KCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudCA9IHNlbGYuZWxlbWVudAogCkBAIC0xNzIsNiArMjAwLDcgQEAKICAgICAgICAgcmV0dXJuIEF0dHJMaXN0KHNlbGYuZWxlbWVudCkKIAogICAgIGRlZiBzZXRBdHRyaWJ1dGVzKHNlbGYsIGF0dHJpYnV0ZXMpOgorCiAgICAgICAgIGlmIGF0dHJpYnV0ZXMgaXMgbm90IE5vbmUgYW5kIGxlbihhdHRyaWJ1dGVzKSA+IDA6CiAKICAgICAgICAgICAgIGNvbnZlcnRlZF9hdHRyaWJ1dGVzID0gW10KQEAgLTE4Myw3ICsyMTIsNyBAQAogCiAgICAgICAgICAgICBzZWxmLnNvdXAuYnVpbGRlci5fcmVwbGFjZV9jZGF0YV9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoCiAgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGF0dHJpYnV0ZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBsaXN0KGF0dHJpYnV0ZXMuaXRlbXMoKSk6CiAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50W25hbWVdID0gdmFsdWUKIAogICAgICAgICAgICAgIyBUaGUgYXR0cmlidXRlcyBtYXkgY29udGFpbiB2YXJpYWJsZXMgdGhhdCBuZWVkIHN1YnN0aXR1dGlvbi4KQEAgLTIxOCw2ICsyNDcsOSBAQAogCiAgICAgZGVmIHJlcGFyZW50Q2hpbGRyZW4oc2VsZiwgbmV3X3BhcmVudCk6CiAgICAgICAgICIiIk1vdmUgYWxsIG9mIHRoaXMgdGFnJ3MgY2hpbGRyZW4gaW50byBhbm90aGVyIHRhZy4iIiIKKyAgICAgICAgIyBwcmludCAiTU9WRSIsIHNlbGYuZWxlbWVudC5jb250ZW50cworICAgICAgICAjIHByaW50ICJGUk9NIiwgc2VsZi5lbGVtZW50CisgICAgICAgICMgcHJpbnQgIlRPIiwgbmV3X3BhcmVudC5lbGVtZW50CiAgICAgICAgIGVsZW1lbnQgPSBzZWxmLmVsZW1lbnQKICAgICAgICAgbmV3X3BhcmVudF9lbGVtZW50ID0gbmV3X3BhcmVudC5lbGVtZW50CiAgICAgICAgICMgRGV0ZXJtaW5lIHdoYXQgdGhpcyB0YWcncyBuZXh0X2VsZW1lbnQgd2lsbCBiZSBvbmNlIGFsbCB0aGUgY2hpbGRyZW4KQEAgLTIzNiwxNyArMjY4LDI4IEBACiAgICAgICAgICAgICBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnRfbmV4dF9lbGVtZW50ID0gbmV3X3BhcmVudF9lbGVtZW50Lm5leHRfZWxlbWVudAogCiAgICAgICAgIHRvX2FwcGVuZCA9IGVsZW1lbnQuY29udGVudHMKLSAgICAgICAgYXBwZW5kX2FmdGVyID0gbmV3X3BhcmVudC5lbGVtZW50LmNvbnRlbnRzCisgICAgICAgIGFwcGVuZF9hZnRlciA9IG5ld19wYXJlbnRfZWxlbWVudC5jb250ZW50cwogICAgICAgICBpZiBsZW4odG9fYXBwZW5kKSA+IDA6CiAgICAgICAgICAgICAjIFNldCB0aGUgZmlyc3QgY2hpbGQncyBwcmV2aW91c19lbGVtZW50IGFuZCBwcmV2aW91c19zaWJsaW5nCiAgICAgICAgICAgICAjIHRvIGVsZW1lbnRzIHdpdGhpbiB0aGUgbmV3IHBhcmVudAogICAgICAgICAgICAgZmlyc3RfY2hpbGQgPSB0b19hcHBlbmRbMF0KLSAgICAgICAgICAgIGZpcnN0X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQgPSBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnQKKyAgICAgICAgICAgIGlmIG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudDoKKyAgICAgICAgICAgICAgICBmaXJzdF9jaGlsZC5wcmV2aW91c19lbGVtZW50ID0gbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpcnN0X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQgPSBuZXdfcGFyZW50X2VsZW1lbnQKICAgICAgICAgICAgIGZpcnN0X2NoaWxkLnByZXZpb3VzX3NpYmxpbmcgPSBuZXdfcGFyZW50c19sYXN0X2NoaWxkCisgICAgICAgICAgICBpZiBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnQ6CisgICAgICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50Lm5leHRfZWxlbWVudCA9IGZpcnN0X2NoaWxkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld19wYXJlbnRfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBmaXJzdF9jaGlsZAorICAgICAgICAgICAgaWYgbmV3X3BhcmVudHNfbGFzdF9jaGlsZDoKKyAgICAgICAgICAgICAgICBuZXdfcGFyZW50c19sYXN0X2NoaWxkLm5leHRfc2libGluZyA9IGZpcnN0X2NoaWxkCiAKICAgICAgICAgICAgICMgRml4IHRoZSBsYXN0IGNoaWxkJ3MgbmV4dF9lbGVtZW50IGFuZCBuZXh0X3NpYmxpbmcKICAgICAgICAgICAgIGxhc3RfY2hpbGQgPSB0b19hcHBlbmRbLTFdCiAgICAgICAgICAgICBsYXN0X2NoaWxkLm5leHRfZWxlbWVudCA9IG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudF9uZXh0X2VsZW1lbnQKKyAgICAgICAgICAgIGlmIG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudF9uZXh0X2VsZW1lbnQ6CisgICAgICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50X25leHRfZWxlbWVudC5wcmV2aW91c19lbGVtZW50ID0gbGFzdF9jaGlsZAogICAgICAgICAgICAgbGFzdF9jaGlsZC5uZXh0X3NpYmxpbmcgPSBOb25lCiAKICAgICAgICAgZm9yIGNoaWxkIGluIHRvX2FwcGVuZDoKQEAgLTI1Nyw2ICszMDAsMTAgQEAKICAgICAgICAgZWxlbWVudC5jb250ZW50cyA9IFtdCiAgICAgICAgIGVsZW1lbnQubmV4dF9lbGVtZW50ID0gZmluYWxfbmV4dF9lbGVtZW50CiAKKyAgICAgICAgIyBwcmludCAiRE9ORSBXSVRIIE1PVkUiCisgICAgICAgICMgcHJpbnQgIkZST00iLCBzZWxmLmVsZW1lbnQKKyAgICAgICAgIyBwcmludCAiVE8iLCBuZXdfcGFyZW50X2VsZW1lbnQKKwogICAgIGRlZiBjbG9uZU5vZGUoc2VsZik6CiAgICAgICAgIHRhZyA9IHNlbGYuc291cC5uZXdfdGFnKHNlbGYuZWxlbWVudC5uYW1lLCBzZWxmLm5hbWVzcGFjZSkKICAgICAgICAgbm9kZSA9IEVsZW1lbnQodGFnLCBzZWxmLnNvdXAsIHNlbGYubmFtZXNwYWNlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1scGFyc2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1scGFyc2VyLnB5CmluZGV4IGNhOGQ4YjguLmJiMGE2M2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbHBhcnNlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWxwYXJzZXIucHkKQEAgLTQsMTAgKzQsMTYgQEAKICAgICAnSFRNTFBhcnNlclRyZWVCdWlsZGVyJywKICAgICBdCiAKLWZyb20gSFRNTFBhcnNlciBpbXBvcnQgKAotICAgIEhUTUxQYXJzZXIsCi0gICAgSFRNTFBhcnNlRXJyb3IsCi0gICAgKQorZnJvbSBodG1sLnBhcnNlciBpbXBvcnQgSFRNTFBhcnNlcgorCit0cnk6CisgICAgZnJvbSBodG1sLnBhcnNlciBpbXBvcnQgSFRNTFBhcnNlRXJyb3IKK2V4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICMgSFRNTFBhcnNlRXJyb3IgaXMgcmVtb3ZlZCBpbiBQeXRob24gMy41LiBTaW5jZSBpdCBjYW4gbmV2ZXIgYmUKKyAgICAjIHRocm93biBpbiAzLjUsIHdlIGNhbiBqdXN0IGRlZmluZSBvdXIgb3duIGNsYXNzIGFzIGEgcGxhY2Vob2xkZXIuCisgICAgY2xhc3MgSFRNTFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAgICAgcGFzcworCiBpbXBvcnQgc3lzCiBpbXBvcnQgd2FybmluZ3MKIApAQCAtMTksMTAgKzI1LDEwIEBACiAjIEF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLCB3ZSBtb25rZXlwYXRjaCBIVE1MUGFyc2VyIHNvIHRoYXQKICMgc3RyaWN0PVRydWUgd29ya3Mgd2VsbCBvbiBQeXRob24gMy4yLjIuCiBtYWpvciwgbWlub3IsIHJlbGVhc2UgPSBzeXMudmVyc2lvbl9pbmZvWzozXQotQ09OU1RSVUNUT1JfVEFLRVNfU1RSSUNUID0gKAotICAgIG1ham9yID4gMwotICAgIG9yIChtYWpvciA9PSAzIGFuZCBtaW5vciA+IDIpCi0gICAgb3IgKG1ham9yID09IDMgYW5kIG1pbm9yID09IDIgYW5kIHJlbGVhc2UgPj0gMykpCitDT05TVFJVQ1RPUl9UQUtFU19TVFJJQ1QgPSBtYWpvciA9PSAzIGFuZCBtaW5vciA9PSAyIGFuZCByZWxlYXNlID49IDMKK0NPTlNUUlVDVE9SX1NUUklDVF9JU19ERVBSRUNBVEVEID0gbWFqb3IgPT0gMyBhbmQgbWlub3IgPT0gMworQ09OU1RSVUNUT1JfVEFLRVNfQ09OVkVSVF9DSEFSUkVGUyA9IG1ham9yID09IDMgYW5kIG1pbm9yID49IDQKKwogCiBmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCiAgICAgQ0RhdGEsCkBAIC02Myw3ICs2OSw4IEBACiAKICAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgbmFtZSk6CiAgICAgICAgICMgWFhYIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEhUTUxQYXJzZXIuIFJlbW92ZSB0aGlzIG9uY2UKLSAgICAgICAgIyBpdCdzIGZpeGVkLgorICAgICAgICAjIGl0J3MgZml4ZWQgaW4gYWxsIHN1cHBvcnRlZCB2ZXJzaW9ucy4KKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTM2MzMKICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCd4Jyk6CiAgICAgICAgICAgICByZWFsX25hbWUgPSBpbnQobmFtZS5sc3RyaXAoJ3gnKSwgMTYpCiAgICAgICAgIGVsaWYgbmFtZS5zdGFydHN3aXRoKCdYJyk6CkBAIC03Miw5ICs3OSw5IEBACiAgICAgICAgICAgICByZWFsX25hbWUgPSBpbnQobmFtZSkKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkYXRhID0gdW5pY2hyKHJlYWxfbmFtZSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgZToKLSAgICAgICAgICAgIGRhdGEgPSB1IlxOe1JFUExBQ0VNRU5UIENIQVJBQ1RFUn0iCisgICAgICAgICAgICBkYXRhID0gY2hyKHJlYWxfbmFtZSkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgZGF0YSA9ICJcTntSRVBMQUNFTUVOVCBDSEFSQUNURVJ9IgogCiAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkKIApAQCAtMTEzLDE0ICsxMjAsNiBAQAogCiAgICAgZGVmIGhhbmRsZV9waShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQotICAgICAgICBpZiBkYXRhLmVuZHN3aXRoKCI/IikgYW5kIGRhdGEubG93ZXIoKS5zdGFydHN3aXRoKCJ4bWwiKToKLSAgICAgICAgICAgICMgIkFuIFhIVE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlIHRyYWlsaW5nICc/JwotICAgICAgICAgICAgIyB3aWxsIGNhdXNlIHRoZSAnPycgdG8gYmUgaW5jbHVkZWQgaW4gZGF0YS4iIC0gSFRNTFBhcnNlcgotICAgICAgICAgICAgIyBkb2NzLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBTdHJpcCB0aGUgcXVlc3Rpb24gbWFyayBzbyB3ZSBkb24ndCBlbmQgdXAgd2l0aCB0d28KLSAgICAgICAgICAgICMgcXVlc3Rpb24gbWFya3MuCi0gICAgICAgICAgICBkYXRhID0gZGF0YVs6LTFdCiAgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQogICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCiAKQEAgLTEyOCwyNiArMTI3LDMxIEBACiBjbGFzcyBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyKToKIAogICAgIGlzX3htbCA9IEZhbHNlCi0gICAgZmVhdHVyZXMgPSBbSFRNTCwgU1RSSUNULCBIVE1MUEFSU0VSXQorICAgIHBpY2tsYWJsZSA9IFRydWUKKyAgICBOQU1FID0gSFRNTFBBUlNFUgorICAgIGZlYXR1cmVzID0gW05BTUUsIEhUTUwsIFNUUklDVF0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBpZiBDT05TVFJVQ1RPUl9UQUtFU19TVFJJQ1Q6CisgICAgICAgIGlmIENPTlNUUlVDVE9SX1RBS0VTX1NUUklDVCBhbmQgbm90IENPTlNUUlVDVE9SX1NUUklDVF9JU19ERVBSRUNBVEVEOgogICAgICAgICAgICAga3dhcmdzWydzdHJpY3QnXSA9IEZhbHNlCisgICAgICAgIGlmIENPTlNUUlVDVE9SX1RBS0VTX0NPTlZFUlRfQ0hBUlJFRlM6CisgICAgICAgICAgICBrd2FyZ3NbJ2NvbnZlcnRfY2hhcnJlZnMnXSA9IEZhbHNlCiAgICAgICAgIHNlbGYucGFyc2VyX2FyZ3MgPSAoYXJncywga3dhcmdzKQogCiAgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2Rpbmc9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nPU5vbmUsIGV4Y2x1ZGVfZW5jb2RpbmdzPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgOnJldHVybjogQSA0LXR1cGxlIChtYXJrdXAsIG9yaWdpbmFsIGVuY29kaW5nLCBlbmNvZGluZwogICAgICAgICBkZWNsYXJlZCB3aXRoaW4gbWFya3VwLCB3aGV0aGVyIGFueSBjaGFyYWN0ZXJzIGhhZCB0byBiZQogICAgICAgICByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UIENIQVJBQ1RFUikuCiAgICAgICAgICIiIgotICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBzdHIpOgogICAgICAgICAgICAgeWllbGQgKG1hcmt1cCwgTm9uZSwgTm9uZSwgRmFsc2UpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICB0cnlfZW5jb2RpbmdzID0gW3VzZXJfc3BlY2lmaWVkX2VuY29kaW5nLCBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZ10KLSAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHRyeV9lbmNvZGluZ3MsIGlzX2h0bWw9VHJ1ZSkKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHRyeV9lbmNvZGluZ3MsIGlzX2h0bWw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2VuY29kaW5ncz1leGNsdWRlX2VuY29kaW5ncykKICAgICAgICAgeWllbGQgKGRhbW1pdC5tYXJrdXAsIGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZywKICAgICAgICAgICAgICAgIGRhbW1pdC5kZWNsYXJlZF9odG1sX2VuY29kaW5nLAogICAgICAgICAgICAgICAgZGFtbWl0LmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMpCkBAIC0xNTgsNyArMTYyLDcgQEAKICAgICAgICAgcGFyc2VyLnNvdXAgPSBzZWxmLnNvdXAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGFyc2VyLmZlZWQobWFya3VwKQotICAgICAgICBleGNlcHQgSFRNTFBhcnNlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBIVE1MUGFyc2VFcnJvciBhcyBlOgogICAgICAgICAgICAgd2FybmluZ3Mud2FybihSdW50aW1lV2FybmluZygKICAgICAgICAgICAgICAgICAiUHl0aG9uJ3MgYnVpbHQtaW4gSFRNTFBhcnNlciBjYW5ub3QgcGFyc2UgdGhlIGdpdmVuIGRvY3VtZW50LiBUaGlzIGlzIG5vdCBhIGJ1ZyBpbiBCZWF1dGlmdWwgU291cC4gVGhlIGJlc3Qgc29sdXRpb24gaXMgdG8gaW5zdGFsbCBhbiBleHRlcm5hbCBwYXJzZXIgKGx4bWwgb3IgaHRtbDVsaWIpLCBhbmQgdXNlIEJlYXV0aWZ1bCBTb3VwIHdpdGggdGhhdCBwYXJzZXIuIFNlZSBodHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC9iczQvZG9jLyNpbnN0YWxsaW5nLWEtcGFyc2VyIGZvciBoZWxwLiIpKQogICAgICAgICAgICAgcmFpc2UgZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19seG1sLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19seG1sLnB5CmluZGV4IGZhNWQ0OTguLjljNmMxNGUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fbHhtbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2x4bWwucHkKQEAgLTQsMTAgKzQsMTUgQEAKICAgICBdCiAKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KLWZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IGNvbGxlY3Rpb25zCiBmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCi1mcm9tIGJzNC5lbGVtZW50IGltcG9ydCBDb21tZW50LCBEb2N0eXBlLCBOYW1lc3BhY2VkQXR0cmlidXRlCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ29tbWVudCwKKyAgICBEb2N0eXBlLAorICAgIE5hbWVzcGFjZWRBdHRyaWJ1dGUsCisgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uLAorKQogZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAogICAgIEZBU1QsCiAgICAgSFRNTCwKQEAgLTI1LDggKzMwLDExIEBACiAKICAgICBpc194bWwgPSBUcnVlCiAKKyAgICBOQU1FID0gImx4bWwteG1sIgorICAgIEFMVEVSTkFURV9OQU1FUyA9IFsieG1sIl0KKwogICAgICMgV2VsbCwgaXQncyBwZXJtaXNzaXZlIGJ5IFhNTCBwYXJzZXIgc3RhbmRhcmRzLgotICAgIGZlYXR1cmVzID0gW0xYTUwsIFhNTCwgRkFTVCwgUEVSTUlTU0lWRV0KKyAgICBmZWF0dXJlcyA9IFtOQU1FLCBMWE1MLCBYTUwsIEZBU1QsIFBFUk1JU1NJVkVdCiAKICAgICBDSFVOS19TSVpFID0gNTEyCiAKQEAgLTcwLDYgKzc4LDcgQEAKICAgICAgICAgICAgIHJldHVybiAoTm9uZSwgdGFnKQogCiAgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9lbmNvZGluZ3M9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2Rpbmc9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICA6eWllbGQ6IEEgc2VyaWVzIG9mIDQtdHVwbGVzLgpAQCAtNzgsMTIgKzg3LDEyIEBACiAKICAgICAgICAgRWFjaCA0LXR1cGxlIHJlcHJlc2VudHMgYSBzdHJhdGVneSBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBzdHIpOgogICAgICAgICAgICAgIyBXZSB3ZXJlIGdpdmVuIFVuaWNvZGUuIE1heWJlIGx4bWwgY2FuIHBhcnNlIFVuaWNvZGUgb24KICAgICAgICAgICAgICMgdGhpcyBzeXN0ZW0/CiAgICAgICAgICAgICB5aWVsZCBtYXJrdXAsIE5vbmUsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nLCBGYWxzZQogCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHN0cik6CiAgICAgICAgICAgICAjIE5vLCBhcHBhcmVudGx5IG5vdC4gQ29udmVydCB0aGUgVW5pY29kZSB0byBVVEYtOCBhbmQKICAgICAgICAgICAgICMgdGVsbCBseG1sIHRvIHBhcnNlIGl0IGFzIFVURi04LgogICAgICAgICAgICAgeWllbGQgKG1hcmt1cC5lbmNvZGUoInV0ZjgiKSwgInV0ZjgiLApAQCAtOTUsMTQgKzEwNCwxNSBAQAogICAgICAgICAjIHRoZSBkb2N1bWVudCBhcyBlYWNoIG9uZSBpbiB0dXJuLgogICAgICAgICBpc19odG1sID0gbm90IHNlbGYuaXNfeG1sCiAgICAgICAgIHRyeV9lbmNvZGluZ3MgPSBbdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nXQotICAgICAgICBkZXRlY3RvciA9IEVuY29kaW5nRGV0ZWN0b3IobWFya3VwLCB0cnlfZW5jb2RpbmdzLCBpc19odG1sKQorICAgICAgICBkZXRlY3RvciA9IEVuY29kaW5nRGV0ZWN0b3IoCisgICAgICAgICAgICBtYXJrdXAsIHRyeV9lbmNvZGluZ3MsIGlzX2h0bWwsIGV4Y2x1ZGVfZW5jb2RpbmdzKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gZGV0ZWN0b3IuZW5jb2RpbmdzOgogICAgICAgICAgICAgeWllbGQgKGRldGVjdG9yLm1hcmt1cCwgZW5jb2RpbmcsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nLCBGYWxzZSkKIAogICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBieXRlcyk6CiAgICAgICAgICAgICBtYXJrdXAgPSBCeXRlc0lPKG1hcmt1cCkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIHN0cik6CiAgICAgICAgICAgICBtYXJrdXAgPSBTdHJpbmdJTyhtYXJrdXApCiAKICAgICAgICAgIyBDYWxsIGZlZWQoKSBhdCBsZWFzdCBvbmNlLCBldmVuIGlmIHRoZSBtYXJrdXAgaXMgZW1wdHksCkBAIC0xMTcsNyArMTI3LDcgQEAKICAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuZmVlZChkYXRhKQogICAgICAgICAgICAgc2VsZi5wYXJzZXIuY2xvc2UoKQotICAgICAgICBleGNlcHQgKFVuaWNvZGVEZWNvZGVFcnJvciwgTG9va3VwRXJyb3IsIGV0cmVlLlBhcnNlckVycm9yKSwgZToKKyAgICAgICAgZXhjZXB0IChVbmljb2RlRGVjb2RlRXJyb3IsIExvb2t1cEVycm9yLCBldHJlZS5QYXJzZXJFcnJvcikgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFBhcnNlclJlamVjdGVkTWFya3VwKHN0cihlKSkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTEzNSwxMiArMTQ1LDEyIEBACiAgICAgICAgICAgICBzZWxmLm5zbWFwcy5hcHBlbmQoTm9uZSkKICAgICAgICAgZWxpZiBsZW4obnNtYXApID4gMDoKICAgICAgICAgICAgICMgQSBuZXcgbmFtZXNwYWNlIG1hcHBpbmcgaGFzIGNvbWUgaW50byBwbGF5LgotICAgICAgICAgICAgaW52ZXJ0ZWRfbnNtYXAgPSBkaWN0KCh2YWx1ZSwga2V5KSBmb3Iga2V5LCB2YWx1ZSBpbiBuc21hcC5pdGVtcygpKQorICAgICAgICAgICAgaW52ZXJ0ZWRfbnNtYXAgPSBkaWN0KCh2YWx1ZSwga2V5KSBmb3Iga2V5LCB2YWx1ZSBpbiBsaXN0KG5zbWFwLml0ZW1zKCkpKQogICAgICAgICAgICAgc2VsZi5uc21hcHMuYXBwZW5kKGludmVydGVkX25zbWFwKQogICAgICAgICAgICAgIyBBbHNvIHRyZWF0IHRoZSBuYW1lc3BhY2UgbWFwcGluZyBhcyBhIHNldCBvZiBhdHRyaWJ1dGVzIG9uIHRoZQogICAgICAgICAgICAgIyB0YWcsIHNvIHdlIGNhbiByZWNyZWF0ZSBpdCBsYXRlci4KICAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuY29weSgpCi0gICAgICAgICAgICBmb3IgcHJlZml4LCBuYW1lc3BhY2UgaW4gbnNtYXAuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBwcmVmaXgsIG5hbWVzcGFjZSBpbiBsaXN0KG5zbWFwLml0ZW1zKCkpOgogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoCiAgICAgICAgICAgICAgICAgICAgICJ4bWxucyIsIHByZWZpeCwgImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIikKICAgICAgICAgICAgICAgICBhdHRyc1thdHRyaWJ1dGVdID0gbmFtZXNwYWNlCkBAIC0xNDksNyArMTU5LDcgQEAKICAgICAgICAgIyBmcm9tIGx4bWwgd2l0aCBuYW1lc3BhY2VzIGF0dGFjaGVkIHRvIHRoZWlyIG5hbWVzLCBhbmQKICAgICAgICAgIyB0dXJuIHRoZW4gaW50byBOYW1lc3BhY2VkQXR0cmlidXRlIG9iamVjdHMuCiAgICAgICAgIG5ld19hdHRycyA9IHt9Ci0gICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBhdHRycy5pdGVtcygpOgorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gbGlzdChhdHRycy5pdGVtcygpKToKICAgICAgICAgICAgIG5hbWVzcGFjZSwgYXR0ciA9IHNlbGYuX2dldE5zVGFnKGF0dHIpCiAgICAgICAgICAgICBpZiBuYW1lc3BhY2UgaXMgTm9uZToKICAgICAgICAgICAgICAgICBuZXdfYXR0cnNbYXR0cl0gPSB2YWx1ZQpAQCAtMTg5LDcgKzE5OSw5IEBACiAgICAgICAgICAgICBzZWxmLm5zbWFwcy5wb3AoKQogCiAgICAgZGVmIHBpKHNlbGYsIHRhcmdldCwgZGF0YSk6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEodGFyZ2V0ICsgJyAnICsgZGF0YSkKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoUHJvY2Vzc2luZ0luc3RydWN0aW9uKQogCiAgICAgZGVmIGRhdGEoc2VsZiwgY29udGVudCk6CiAgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShjb250ZW50KQpAQCAtMjA3LDEyICsyMTksMTUgQEAKIAogICAgIGRlZiB0ZXN0X2ZyYWdtZW50X3RvX2RvY3VtZW50KHNlbGYsIGZyYWdtZW50KToKICAgICAgICAgIiIiU2VlIGBUcmVlQnVpbGRlcmAuIiIiCi0gICAgICAgIHJldHVybiB1Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4lcycgJSBmcmFnbWVudAorICAgICAgICByZXR1cm4gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4lcycgJSBmcmFnbWVudAogCiAKIGNsYXNzIExYTUxUcmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXIsIExYTUxUcmVlQnVpbGRlckZvclhNTCk6CiAKLSAgICBmZWF0dXJlcyA9IFtMWE1MLCBIVE1MLCBGQVNULCBQRVJNSVNTSVZFXQorICAgIE5BTUUgPSBMWE1MCisgICAgQUxURVJOQVRFX05BTUVTID0gWyJseG1sLWh0bWwiXQorCisgICAgZmVhdHVyZXMgPSBBTFRFUk5BVEVfTkFNRVMgKyBbTkFNRSwgSFRNTCwgRkFTVCwgUEVSTUlTU0lWRV0KICAgICBpc194bWwgPSBGYWxzZQogCiAgICAgZGVmIGRlZmF1bHRfcGFyc2VyKHNlbGYsIGVuY29kaW5nKToKQEAgLTIyNCwxMCArMjM5LDEwIEBACiAgICAgICAgICAgICBzZWxmLnBhcnNlciA9IHNlbGYucGFyc2VyX2ZvcihlbmNvZGluZykKICAgICAgICAgICAgIHNlbGYucGFyc2VyLmZlZWQobWFya3VwKQogICAgICAgICAgICAgc2VsZi5wYXJzZXIuY2xvc2UoKQotICAgICAgICBleGNlcHQgKFVuaWNvZGVEZWNvZGVFcnJvciwgTG9va3VwRXJyb3IsIGV0cmVlLlBhcnNlckVycm9yKSwgZToKKyAgICAgICAgZXhjZXB0IChVbmljb2RlRGVjb2RlRXJyb3IsIExvb2t1cEVycm9yLCBldHJlZS5QYXJzZXJFcnJvcikgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFBhcnNlclJlamVjdGVkTWFya3VwKHN0cihlKSkKIAogCiAgICAgZGVmIHRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQoc2VsZiwgZnJhZ21lbnQpOgogICAgICAgICAiIiJTZWUgYFRyZWVCdWlsZGVyYC4iIiIKLSAgICAgICAgcmV0dXJuIHUnPGh0bWw+PGJvZHk+JXM8L2JvZHk+PC9odG1sPicgJSBmcmFnbWVudAorICAgICAgICByZXR1cm4gJzxodG1sPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4nICUgZnJhZ21lbnQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGFtbWl0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kYW1taXQucHkKaW5kZXggNTk2NDBiNy4uNjhkNDE5ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kYW1taXQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kYW1taXQucHkKQEAgLTMsMTIgKzMsMTQgQEAKIAogVGhpcyBsaWJyYXJ5IGNvbnZlcnRzIGEgYnl0ZXN0cmVhbSB0byBVbmljb2RlIHRocm91Z2ggYW55IG1lYW5zCiBuZWNlc3NhcnkuIEl0IGlzIGhlYXZpbHkgYmFzZWQgb24gY29kZSBmcm9tIE1hcmsgUGlsZ3JpbSdzIFVuaXZlcnNhbAotRmVlZCBQYXJzZXIuIEl0IHdvcmtzIGJlc3Qgb24gWE1MIGFuZCBYTUwsIGJ1dCBpdCBkb2VzIG5vdCByZXdyaXRlIHRoZQorRmVlZCBQYXJzZXIuIEl0IHdvcmtzIGJlc3Qgb24gWE1MIGFuZCBIVE1MLCBidXQgaXQgZG9lcyBub3QgcmV3cml0ZSB0aGUKIFhNTCBvciBIVE1MIHRvIHJlZmxlY3QgYSBuZXcgZW5jb2Rpbmc7IHRoYXQncyB0aGUgdHJlZSBidWlsZGVyJ3Mgam9iLgogIiIiCitfX2xpY2Vuc2VfXyA9ICJNSVQiCiAKK2Zyb20gcGRiIGltcG9ydCBzZXRfdHJhY2UKIGltcG9ydCBjb2RlY3MKLWZyb20gaHRtbGVudGl0eWRlZnMgaW1wb3J0IGNvZGVwb2ludDJuYW1lCitmcm9tIGh0bWwuZW50aXRpZXMgaW1wb3J0IGNvZGVwb2ludDJuYW1lCiBpbXBvcnQgcmUKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCkBAIC01Niw3ICs1OCw3IEBACiAgICAgICAgIHJldmVyc2VfbG9va3VwID0ge30KICAgICAgICAgY2hhcmFjdGVyc19mb3JfcmUgPSBbXQogICAgICAgICBmb3IgY29kZXBvaW50LCBuYW1lIGluIGxpc3QoY29kZXBvaW50Mm5hbWUuaXRlbXMoKSk6Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSB1bmljaHIoY29kZXBvaW50KQorICAgICAgICAgICAgY2hhcmFjdGVyID0gY2hyKGNvZGVwb2ludCkKICAgICAgICAgICAgIGlmIGNvZGVwb2ludCAhPSAzNDoKICAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHVybmluZyB0aGUgcXVvdGF0aW9uIG1hcmsgaW50bwogICAgICAgICAgICAgICAgICMgJnF1b3Q7LCB1bmxlc3MgaXQgaGFwcGVucyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlLCB3aGljaApAQCAtMjEyLDggKzIxNCwxMSBAQAogCiAgICAgNS4gV2luZG93cy0xMjUyLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIG92ZXJyaWRlX2VuY29kaW5ncz1Ob25lLCBpc19odG1sPUZhbHNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVycmlkZV9lbmNvZGluZ3M9Tm9uZSwgaXNfaHRtbD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgZXhjbHVkZV9lbmNvZGluZ3M9Tm9uZSk6CiAgICAgICAgIHNlbGYub3ZlcnJpZGVfZW5jb2RpbmdzID0gb3ZlcnJpZGVfZW5jb2RpbmdzIG9yIFtdCisgICAgICAgIGV4Y2x1ZGVfZW5jb2RpbmdzID0gZXhjbHVkZV9lbmNvZGluZ3Mgb3IgW10KKyAgICAgICAgc2VsZi5leGNsdWRlX2VuY29kaW5ncyA9IHNldChbeC5sb3dlcigpIGZvciB4IGluIGV4Y2x1ZGVfZW5jb2RpbmdzXSkKICAgICAgICAgc2VsZi5jaGFyZGV0X2VuY29kaW5nID0gTm9uZQogICAgICAgICBzZWxmLmlzX2h0bWwgPSBpc19odG1sCiAgICAgICAgIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcgPSBOb25lCkBAIC0yMjQsNiArMjI5LDggQEAKICAgICBkZWYgX3VzYWJsZShzZWxmLCBlbmNvZGluZywgdHJpZWQpOgogICAgICAgICBpZiBlbmNvZGluZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcubG93ZXIoKQorICAgICAgICAgICAgaWYgZW5jb2RpbmcgaW4gc2VsZi5leGNsdWRlX2VuY29kaW5nczoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiB0cmllZDoKICAgICAgICAgICAgICAgICB0cmllZC5hZGQoZW5jb2RpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTI2Niw2ICsyNzMsOSBAQAogICAgIGRlZiBzdHJpcF9ieXRlX29yZGVyX21hcmsoY2xzLCBkYXRhKToKICAgICAgICAgIiIiSWYgYSBieXRlLW9yZGVyIG1hcmsgaXMgcHJlc2VudCwgc3RyaXAgaXQgYW5kIHJldHVybiB0aGUgZW5jb2RpbmcgaXQgaW1wbGllcy4iIiIKICAgICAgICAgZW5jb2RpbmcgPSBOb25lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgICAgICMgVW5pY29kZSBkYXRhIGNhbm5vdCBoYXZlIGEgYnl0ZS1vcmRlciBtYXJrLgorICAgICAgICAgICAgcmV0dXJuIGRhdGEsIGVuY29kaW5nCiAgICAgICAgIGlmIChsZW4oZGF0YSkgPj0gNCkgYW5kIChkYXRhWzoyXSA9PSBiJ1x4ZmVceGZmJykgXAogICAgICAgICAgICAgICAgYW5kIChkYXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6CiAgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZiZScKQEAgLTMwNiw3ICszMTYsNyBAQAogICAgICAgICAgICAgZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2ggPSBodG1sX21ldGFfcmUuc2VhcmNoKG1hcmt1cCwgZW5kcG9zPWh0bWxfZW5kcG9zKQogICAgICAgICBpZiBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nID0gZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2guZ3JvdXBzKClbMF0uZGVjb2RlKAotICAgICAgICAgICAgICAgICdhc2NpaScpCisgICAgICAgICAgICAgICAgJ2FzY2lpJywgJ3JlcGxhY2UnKQogICAgICAgICBpZiBkZWNsYXJlZF9lbmNvZGluZzoKICAgICAgICAgICAgIHJldHVybiBkZWNsYXJlZF9lbmNvZGluZy5sb3dlcigpCiAgICAgICAgIHJldHVybiBOb25lCkBAIC0zMzEsMTggKzM0MSwxOSBAQAogICAgICAgICBdCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVycmlkZV9lbmNvZGluZ3M9W10sCi0gICAgICAgICAgICAgICAgIHNtYXJ0X3F1b3Rlc190bz1Ob25lLCBpc19odG1sPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgc21hcnRfcXVvdGVzX3RvPU5vbmUsIGlzX2h0bWw9RmFsc2UsIGV4Y2x1ZGVfZW5jb2RpbmdzPVtdKToKICAgICAgICAgc2VsZi5zbWFydF9xdW90ZXNfdG8gPSBzbWFydF9xdW90ZXNfdG8KICAgICAgICAgc2VsZi50cmllZF9lbmNvZGluZ3MgPSBbXQogICAgICAgICBzZWxmLmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMgPSBGYWxzZQogICAgICAgICBzZWxmLmlzX2h0bWwgPSBpc19odG1sCiAKLSAgICAgICAgc2VsZi5kZXRlY3RvciA9IEVuY29kaW5nRGV0ZWN0b3IobWFya3VwLCBvdmVycmlkZV9lbmNvZGluZ3MsIGlzX2h0bWwpCisgICAgICAgIHNlbGYuZGV0ZWN0b3IgPSBFbmNvZGluZ0RldGVjdG9yKAorICAgICAgICAgICAgbWFya3VwLCBvdmVycmlkZV9lbmNvZGluZ3MsIGlzX2h0bWwsIGV4Y2x1ZGVfZW5jb2RpbmdzKQogCiAgICAgICAgICMgU2hvcnQtY2lyY3VpdCBpZiB0aGUgZGF0YSBpcyBpbiBVbmljb2RlIHRvIGJlZ2luIHdpdGguCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKSBvciBtYXJrdXAgPT0gJyc6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBzdHIpIG9yIG1hcmt1cCA9PSAnJzoKICAgICAgICAgICAgIHNlbGYubWFya3VwID0gbWFya3VwCi0gICAgICAgICAgICBzZWxmLnVuaWNvZGVfbWFya3VwID0gdW5pY29kZShtYXJrdXApCisgICAgICAgICAgICBzZWxmLnVuaWNvZGVfbWFya3VwID0gc3RyKG1hcmt1cCkKICAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfZW5jb2RpbmcgPSBOb25lCiAgICAgICAgICAgICByZXR1cm4KIApAQCAtNDI1LDcgKzQzNiw3IEBACiAgICAgZGVmIF90b191bmljb2RlKHNlbGYsIGRhdGEsIGVuY29kaW5nLCBlcnJvcnM9InN0cmljdCIpOgogICAgICAgICAnJydHaXZlbiBhIHN0cmluZyBhbmQgaXRzIGVuY29kaW5nLCBkZWNvZGVzIHRoZSBzdHJpbmcgaW50byBVbmljb2RlLgogICAgICAgICAlZW5jb2RpbmcgaXMgYSBzdHJpbmcgcmVjb2duaXplZCBieSBlbmNvZGluZ3MuYWxpYXNlcycnJwotICAgICAgICByZXR1cm4gdW5pY29kZShkYXRhLCBlbmNvZGluZywgZXJyb3JzKQorICAgICAgICByZXR1cm4gc3RyKGRhdGEsIGVuY29kaW5nLCBlcnJvcnMpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgZGVjbGFyZWRfaHRtbF9lbmNvZGluZyhzZWxmKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGlhZ25vc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2RpYWdub3NlLnB5CmluZGV4IDRkMGIwMGEuLjA4MzM5NWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGlhZ25vc2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kaWFnbm9zZS5weQpAQCAtMSw3ICsxLDEwIEBACiAiIiJEaWFnbm9zdGljIGZ1bmN0aW9ucywgbWFpbmx5IGZvciB1c2Ugd2hlbiBkb2luZyB0ZWNoIHN1cHBvcnQuIiIiCisKK19fbGljZW5zZV9fID0gIk1JVCIKKwogaW1wb3J0IGNQcm9maWxlCi1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotZnJvbSBIVE1MUGFyc2VyIGltcG9ydCBIVE1MUGFyc2VyCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBodG1sLnBhcnNlciBpbXBvcnQgSFRNTFBhcnNlcgogaW1wb3J0IGJzNAogZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAsIF9fdmVyc2lvbl9fCiBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBidWlsZGVyX3JlZ2lzdHJ5CkBAIC0xNyw4ICsyMCw4IEBACiAKIGRlZiBkaWFnbm9zZShkYXRhKToKICAgICAiIiJEaWFnbm9zdGljIHN1aXRlIGZvciBpc29sYXRpbmcgY29tbW9uIHByb2JsZW1zLiIiIgotICAgIHByaW50ICJEaWFnbm9zdGljIHJ1bm5pbmcgb24gQmVhdXRpZnVsIFNvdXAgJXMiICUgX192ZXJzaW9uX18KLSAgICBwcmludCAiUHl0aG9uIHZlcnNpb24gJXMiICUgc3lzLnZlcnNpb24KKyAgICBwcmludCgiRGlhZ25vc3RpYyBydW5uaW5nIG9uIEJlYXV0aWZ1bCBTb3VwICVzIiAlIF9fdmVyc2lvbl9fKQorICAgIHByaW50KCJQeXRob24gdmVyc2lvbiAlcyIgJSBzeXMudmVyc2lvbikKIAogICAgIGJhc2ljX3BhcnNlcnMgPSBbImh0bWwucGFyc2VyIiwgImh0bWw1bGliIiwgImx4bWwiXQogICAgIGZvciBuYW1lIGluIGJhc2ljX3BhcnNlcnM6CkBAIC0yNyw0NCArMzAsNTMgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYmFzaWNfcGFyc2Vycy5yZW1vdmUobmFtZSkKLSAgICAgICAgICAgIHByaW50ICgKKyAgICAgICAgICAgIHByaW50KCgKICAgICAgICAgICAgICAgICAiSSBub3RpY2VkIHRoYXQgJXMgaXMgbm90IGluc3RhbGxlZC4gSW5zdGFsbGluZyBpdCBtYXkgaGVscC4iICUKLSAgICAgICAgICAgICAgICBuYW1lKQorICAgICAgICAgICAgICAgIG5hbWUpKQogCiAgICAgaWYgJ2x4bWwnIGluIGJhc2ljX3BhcnNlcnM6CiAgICAgICAgIGJhc2ljX3BhcnNlcnMuYXBwZW5kKFsibHhtbCIsICJ4bWwiXSkKLSAgICAgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQotICAgICAgICBwcmludCAiRm91bmQgbHhtbCB2ZXJzaW9uICVzIiAlICIuIi5qb2luKG1hcChzdHIsZXRyZWUuTFhNTF9WRVJTSU9OKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQorICAgICAgICAgICAgcHJpbnQoIkZvdW5kIGx4bWwgdmVyc2lvbiAlcyIgJSAiLiIuam9pbihtYXAoc3RyLGV0cmVlLkxYTUxfVkVSU0lPTikpKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKKyAgICAgICAgICAgIHByaW50ICgKKyAgICAgICAgICAgICAgICAibHhtbCBpcyBub3QgaW5zdGFsbGVkIG9yIGNvdWxkbid0IGJlIGltcG9ydGVkLiIpCisKIAogICAgIGlmICdodG1sNWxpYicgaW4gYmFzaWNfcGFyc2VyczoKLSAgICAgICAgaW1wb3J0IGh0bWw1bGliCi0gICAgICAgIHByaW50ICJGb3VuZCBodG1sNWxpYiB2ZXJzaW9uICVzIiAlIGh0bWw1bGliLl9fdmVyc2lvbl9fCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBodG1sNWxpYgorICAgICAgICAgICAgcHJpbnQoIkZvdW5kIGh0bWw1bGliIHZlcnNpb24gJXMiICUgaHRtbDVsaWIuX192ZXJzaW9uX18pCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAgICAgICAgcHJpbnQgKAorICAgICAgICAgICAgICAgICJodG1sNWxpYiBpcyBub3QgaW5zdGFsbGVkIG9yIGNvdWxkbid0IGJlIGltcG9ydGVkLiIpCiAKICAgICBpZiBoYXNhdHRyKGRhdGEsICdyZWFkJyk6CiAgICAgICAgIGRhdGEgPSBkYXRhLnJlYWQoKQogICAgIGVsaWYgb3MucGF0aC5leGlzdHMoZGF0YSk6Ci0gICAgICAgIHByaW50ICciJXMiIGxvb2tzIGxpa2UgYSBmaWxlbmFtZS4gUmVhZGluZyBkYXRhIGZyb20gdGhlIGZpbGUuJyAlIGRhdGEKKyAgICAgICAgcHJpbnQoJyIlcyIgbG9va3MgbGlrZSBhIGZpbGVuYW1lLiBSZWFkaW5nIGRhdGEgZnJvbSB0aGUgZmlsZS4nICUgZGF0YSkKICAgICAgICAgZGF0YSA9IG9wZW4oZGF0YSkucmVhZCgpCiAgICAgZWxpZiBkYXRhLnN0YXJ0c3dpdGgoImh0dHA6Iikgb3IgZGF0YS5zdGFydHN3aXRoKCJodHRwczoiKToKLSAgICAgICAgcHJpbnQgJyIlcyIgbG9va3MgbGlrZSBhIFVSTC4gQmVhdXRpZnVsIFNvdXAgaXMgbm90IGFuIEhUVFAgY2xpZW50LicgJSBkYXRhCi0gICAgICAgIHByaW50ICJZb3UgbmVlZCB0byB1c2Ugc29tZSBvdGhlciBsaWJyYXJ5IHRvIGdldCB0aGUgZG9jdW1lbnQgYmVoaW5kIHRoZSBVUkwsIGFuZCBmZWVkIHRoYXQgZG9jdW1lbnQgdG8gQmVhdXRpZnVsIFNvdXAuIgorICAgICAgICBwcmludCgnIiVzIiBsb29rcyBsaWtlIGEgVVJMLiBCZWF1dGlmdWwgU291cCBpcyBub3QgYW4gSFRUUCBjbGllbnQuJyAlIGRhdGEpCisgICAgICAgIHByaW50KCJZb3UgbmVlZCB0byB1c2Ugc29tZSBvdGhlciBsaWJyYXJ5IHRvIGdldCB0aGUgZG9jdW1lbnQgYmVoaW5kIHRoZSBVUkwsIGFuZCBmZWVkIHRoYXQgZG9jdW1lbnQgdG8gQmVhdXRpZnVsIFNvdXAuIikKICAgICAgICAgcmV0dXJuCi0gICAgcHJpbnQKKyAgICBwcmludCgpCiAKICAgICBmb3IgcGFyc2VyIGluIGJhc2ljX3BhcnNlcnM6Ci0gICAgICAgIHByaW50ICJUcnlpbmcgdG8gcGFyc2UgeW91ciBtYXJrdXAgd2l0aCAlcyIgJSBwYXJzZXIKKyAgICAgICAgcHJpbnQoIlRyeWluZyB0byBwYXJzZSB5b3VyIG1hcmt1cCB3aXRoICVzIiAlIHBhcnNlcikKICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGRhdGEsIHBhcnNlcikKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBwcmludCAiJXMgY291bGQgbm90IHBhcnNlIHRoZSBtYXJrdXAuIiAlIHBhcnNlcgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCgiJXMgY291bGQgbm90IHBhcnNlIHRoZSBtYXJrdXAuIiAlIHBhcnNlcikKICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICBpZiBzdWNjZXNzOgotICAgICAgICAgICAgcHJpbnQgIkhlcmUncyB3aGF0ICVzIGRpZCB3aXRoIHRoZSBtYXJrdXA6IiAlIHBhcnNlcgotICAgICAgICAgICAgcHJpbnQgc291cC5wcmV0dGlmeSgpCisgICAgICAgICAgICBwcmludCgiSGVyZSdzIHdoYXQgJXMgZGlkIHdpdGggdGhlIG1hcmt1cDoiICUgcGFyc2VyKQorICAgICAgICAgICAgcHJpbnQoc291cC5wcmV0dGlmeSgpKQogCi0gICAgICAgIHByaW50ICItIiAqIDgwCisgICAgICAgIHByaW50KCItIiAqIDgwKQogCiBkZWYgbHhtbF90cmFjZShkYXRhLCBodG1sPVRydWUsICoqa3dhcmdzKToKICAgICAiIiJQcmludCBvdXQgdGhlIGx4bWwgZXZlbnRzIHRoYXQgb2NjdXIgZHVyaW5nIHBhcnNpbmcuCkBAIC03NCw3ICs4Niw3IEBACiAgICAgIiIiCiAgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQogICAgIGZvciBldmVudCwgZWxlbWVudCBpbiBldHJlZS5pdGVycGFyc2UoU3RyaW5nSU8oZGF0YSksIGh0bWw9aHRtbCwgKiprd2FyZ3MpOgotICAgICAgICBwcmludCgiJXMsICU0cywgJXMiICUgKGV2ZW50LCBlbGVtZW50LnRhZywgZWxlbWVudC50ZXh0KSkKKyAgICAgICAgcHJpbnQoKCIlcywgJTRzLCAlcyIgJSAoZXZlbnQsIGVsZW1lbnQudGFnLCBlbGVtZW50LnRleHQpKSkKIAogY2xhc3MgQW5ub3VuY2luZ1BhcnNlcihIVE1MUGFyc2VyKToKICAgICAiIiJBbm5vdW5jZXMgSFRNTFBhcnNlciBwYXJzZSBldmVudHMsIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgZWxzZS4iIiIKQEAgLTE1Niw5ICsxNjgsOSBAQAogCiBkZWYgYmVuY2htYXJrX3BhcnNlcnMobnVtX2VsZW1lbnRzPTEwMDAwMCk6CiAgICAgIiIiVmVyeSBiYXNpYyBoZWFkLXRvLWhlYWQgcGVyZm9ybWFuY2UgYmVuY2htYXJrLiIiIgotICAgIHByaW50ICJDb21wYXJhdGl2ZSBwYXJzZXIgYmVuY2htYXJrIG9uIEJlYXV0aWZ1bCBTb3VwICVzIiAlIF9fdmVyc2lvbl9fCisgICAgcHJpbnQoIkNvbXBhcmF0aXZlIHBhcnNlciBiZW5jaG1hcmsgb24gQmVhdXRpZnVsIFNvdXAgJXMiICUgX192ZXJzaW9uX18pCiAgICAgZGF0YSA9IHJkb2MobnVtX2VsZW1lbnRzKQotICAgIHByaW50ICJHZW5lcmF0ZWQgYSBsYXJnZSBpbnZhbGlkIEhUTUwgZG9jdW1lbnQgKCVkIGJ5dGVzKS4iICUgbGVuKGRhdGEpCisgICAgcHJpbnQoIkdlbmVyYXRlZCBhIGxhcmdlIGludmFsaWQgSFRNTCBkb2N1bWVudCAoJWQgYnl0ZXMpLiIgJSBsZW4oZGF0YSkpCiAgICAgCiAgICAgZm9yIHBhcnNlciBpbiBbImx4bWwiLCBbImx4bWwiLCAiaHRtbCJdLCAiaHRtbDVsaWIiLCAiaHRtbC5wYXJzZXIiXToKICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCkBAIC0xNjcsMjQgKzE3OSwyNCBAQAogICAgICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoZGF0YSwgcGFyc2VyKQogICAgICAgICAgICAgYiA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgcHJpbnQgIiVzIGNvdWxkIG5vdCBwYXJzZSB0aGUgbWFya3VwLiIgJSBwYXJzZXIKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoIiVzIGNvdWxkIG5vdCBwYXJzZSB0aGUgbWFya3VwLiIgJSBwYXJzZXIpCiAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgaWYgc3VjY2VzczoKLSAgICAgICAgICAgIHByaW50ICJCUzQrJXMgcGFyc2VkIHRoZSBtYXJrdXAgaW4gJS4yZnMuIiAlIChwYXJzZXIsIGItYSkKKyAgICAgICAgICAgIHByaW50KCJCUzQrJXMgcGFyc2VkIHRoZSBtYXJrdXAgaW4gJS4yZnMuIiAlIChwYXJzZXIsIGItYSkpCiAKICAgICBmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCiAgICAgYSA9IHRpbWUudGltZSgpCiAgICAgZXRyZWUuSFRNTChkYXRhKQogICAgIGIgPSB0aW1lLnRpbWUoKQotICAgIHByaW50ICJSYXcgbHhtbCBwYXJzZWQgdGhlIG1hcmt1cCBpbiAlLjJmcy4iICUgKGItYSkKKyAgICBwcmludCgiUmF3IGx4bWwgcGFyc2VkIHRoZSBtYXJrdXAgaW4gJS4yZnMuIiAlIChiLWEpKQogCiAgICAgaW1wb3J0IGh0bWw1bGliCiAgICAgcGFyc2VyID0gaHRtbDVsaWIuSFRNTFBhcnNlcigpCiAgICAgYSA9IHRpbWUudGltZSgpCiAgICAgcGFyc2VyLnBhcnNlKGRhdGEpCiAgICAgYiA9IHRpbWUudGltZSgpCi0gICAgcHJpbnQgIlJhdyBodG1sNWxpYiBwYXJzZWQgdGhlIG1hcmt1cCBpbiAlLjJmcy4iICUgKGItYSkKKyAgICBwcmludCgiUmF3IGh0bWw1bGliIHBhcnNlZCB0aGUgbWFya3VwIGluICUuMmZzLiIgJSAoYi1hKSkKIAogZGVmIHByb2ZpbGUobnVtX2VsZW1lbnRzPTEwMDAwMCwgcGFyc2VyPSJseG1sIik6CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZWxlbWVudC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZWxlbWVudC5weQppbmRleCBkYTlhZmRmLi4wZTYyYzJlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2VsZW1lbnQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9lbGVtZW50LnB5CkBAIC0xLDMgKzEsNiBAQAorX19saWNlbnNlX18gPSAiTUlUIgorCitmcm9tIHBkYiBpbXBvcnQgc2V0X3RyYWNlCiBpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCByZQogaW1wb3J0IHN5cwpAQCAtMjEsMjIgKzI0LDIyIEBACiAgICAgcmV0dXJuIGFsaWFzCiAKIAotY2xhc3MgTmFtZXNwYWNlZEF0dHJpYnV0ZSh1bmljb2RlKToKK2NsYXNzIE5hbWVzcGFjZWRBdHRyaWJ1dGUoc3RyKToKIAogICAgIGRlZiBfX25ld19fKGNscywgcHJlZml4LCBuYW1lLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIG9iaiA9IHVuaWNvZGUuX19uZXdfXyhjbHMsIHByZWZpeCkKKyAgICAgICAgICAgIG9iaiA9IHN0ci5fX25ld19fKGNscywgcHJlZml4KQogICAgICAgICBlbGlmIHByZWZpeCBpcyBOb25lOgogICAgICAgICAgICAgIyBOb3QgcmVhbGx5IG5hbWVzcGFjZWQuCi0gICAgICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBuYW1lKQorICAgICAgICAgICAgb2JqID0gc3RyLl9fbmV3X18oY2xzLCBuYW1lKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgcHJlZml4ICsgIjoiICsgbmFtZSkKKyAgICAgICAgICAgIG9iaiA9IHN0ci5fX25ld19fKGNscywgcHJlZml4ICsgIjoiICsgbmFtZSkKICAgICAgICAgb2JqLnByZWZpeCA9IHByZWZpeAogICAgICAgICBvYmoubmFtZSA9IG5hbWUKICAgICAgICAgb2JqLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgICAgICByZXR1cm4gb2JqCiAKLWNsYXNzIEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24odW5pY29kZSk6CitjbGFzcyBBdHRyaWJ1dGVWYWx1ZVdpdGhDaGFyc2V0U3Vic3RpdHV0aW9uKHN0cik6CiAgICAgIiIiQSBzdGFuZC1pbiBvYmplY3QgZm9yIGEgY2hhcmFjdGVyIGVuY29kaW5nIHNwZWNpZmllZCBpbiBIVE1MLiIiIgogCiBjbGFzcyBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlKEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24pOgpAQCAtNDcsNyArNTAsNyBAQAogICAgICIiIgogCiAgICAgZGVmIF9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSk6Ci0gICAgICAgIG9iaiA9IHVuaWNvZGUuX19uZXdfXyhjbHMsIG9yaWdpbmFsX3ZhbHVlKQorICAgICAgICBvYmogPSBzdHIuX19uZXdfXyhjbHMsIG9yaWdpbmFsX3ZhbHVlKQogICAgICAgICBvYmoub3JpZ2luYWxfdmFsdWUgPSBvcmlnaW5hbF92YWx1ZQogICAgICAgICByZXR1cm4gb2JqCiAKQEAgLTcwLDkgKzczLDkgQEAKICAgICAgICAgbWF0Y2ggPSBjbHMuQ0hBUlNFVF9SRS5zZWFyY2gob3JpZ2luYWxfdmFsdWUpCiAgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CiAgICAgICAgICAgICAjIE5vIHN1YnN0aXR1dGlvbiBuZWNlc3NhcnkuCi0gICAgICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKHVuaWNvZGUsIG9yaWdpbmFsX3ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0ci5fX25ld19fKHN0ciwgb3JpZ2luYWxfdmFsdWUpCiAKLSAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgb3JpZ2luYWxfdmFsdWUpCisgICAgICAgIG9iaiA9IHN0ci5fX25ld19fKGNscywgb3JpZ2luYWxfdmFsdWUpCiAgICAgICAgIG9iai5vcmlnaW5hbF92YWx1ZSA9IG9yaWdpbmFsX3ZhbHVlCiAgICAgICAgIHJldHVybiBvYmoKIApAQCAtMTUyLDcgKzE1NSw3IEBACiAKICAgICBkZWYgZm9ybWF0X3N0cmluZyhzZWxmLCBzLCBmb3JtYXR0ZXI9J21pbmltYWwnKToKICAgICAgICAgIiIiRm9ybWF0IHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgdGhlIGdpdmVuIGZvcm1hdHRlci4iIiIKLSAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZvcm1hdHRlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZvcm1hdHRlciwgY29sbGVjdGlvbnMuQ2FsbGFibGUpOgogICAgICAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZm9ybWF0dGVyX2Zvcl9uYW1lKGZvcm1hdHRlcikKICAgICAgICAgaWYgZm9ybWF0dGVyIGlzIE5vbmU6CiAgICAgICAgICAgICBvdXRwdXQgPSBzCkBAIC0xODUsMjQgKzE4OCw0MCBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuSFRNTF9GT1JNQVRURVJTLmdldCgKICAgICAgICAgICAgICAgICBuYW1lLCBIVE1MQXdhcmVFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwpCiAKLSAgICBkZWYgc2V0dXAoc2VsZiwgcGFyZW50PU5vbmUsIHByZXZpb3VzX2VsZW1lbnQ9Tm9uZSk6CisgICAgZGVmIHNldHVwKHNlbGYsIHBhcmVudD1Ob25lLCBwcmV2aW91c19lbGVtZW50PU5vbmUsIG5leHRfZWxlbWVudD1Ob25lLAorICAgICAgICAgICAgICBwcmV2aW91c19zaWJsaW5nPU5vbmUsIG5leHRfc2libGluZz1Ob25lKToKICAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCByZWxhdGlvbnMgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kCiAgICAgICAgIG90aGVyIGVsZW1lbnRzLiIiIgogICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorCiAgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudCA9IHByZXZpb3VzX2VsZW1lbnQKICAgICAgICAgaWYgcHJldmlvdXNfZWxlbWVudCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBzZWxmCi0gICAgICAgIHNlbGYubmV4dF9lbGVtZW50ID0gTm9uZQotICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcgPSBOb25lCi0gICAgICAgIHNlbGYubmV4dF9zaWJsaW5nID0gTm9uZQotICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZSBhbmQgc2VsZi5wYXJlbnQuY29udGVudHM6Ci0gICAgICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcgPSBzZWxmLnBhcmVudC5jb250ZW50c1stMV0KKworICAgICAgICBzZWxmLm5leHRfZWxlbWVudCA9IG5leHRfZWxlbWVudAorICAgICAgICBpZiBzZWxmLm5leHRfZWxlbWVudDoKKyAgICAgICAgICAgIHNlbGYubmV4dF9lbGVtZW50LnByZXZpb3VzX2VsZW1lbnQgPSBzZWxmCisKKyAgICAgICAgc2VsZi5uZXh0X3NpYmxpbmcgPSBuZXh0X3NpYmxpbmcKKyAgICAgICAgaWYgc2VsZi5uZXh0X3NpYmxpbmc6CisgICAgICAgICAgICBzZWxmLm5leHRfc2libGluZy5wcmV2aW91c19zaWJsaW5nID0gc2VsZgorCisgICAgICAgIGlmIChub3QgcHJldmlvdXNfc2libGluZworICAgICAgICAgICAgYW5kIHNlbGYucGFyZW50IGlzIG5vdCBOb25lIGFuZCBzZWxmLnBhcmVudC5jb250ZW50cyk6CisgICAgICAgICAgICBwcmV2aW91c19zaWJsaW5nID0gc2VsZi5wYXJlbnQuY29udGVudHNbLTFdCisKKyAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nID0gcHJldmlvdXNfc2libGluZworICAgICAgICBpZiBwcmV2aW91c19zaWJsaW5nOgogICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZyA9IHNlbGYKIAogICAgIG5leHRTaWJsaW5nID0gX2FsaWFzKCJuZXh0X3NpYmxpbmciKSAgIyBCUzMKICAgICBwcmV2aW91c1NpYmxpbmcgPSBfYWxpYXMoInByZXZpb3VzX3NpYmxpbmciKSAgIyBCUzMKIAogICAgIGRlZiByZXBsYWNlX3dpdGgoc2VsZiwgcmVwbGFjZV93aXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYucGFyZW50OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IHJlcGxhY2Ugb25lIGVsZW1lbnQgd2l0aCBhbm90aGVyIHdoZW4gdGhlIgorICAgICAgICAgICAgICAgICJlbGVtZW50IHRvIGJlIHJlcGxhY2VkIGlzIG5vdCBwYXJ0IG9mIGEgdHJlZS4iKQogICAgICAgICBpZiByZXBsYWNlX3dpdGggaXMgc2VsZjoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiByZXBsYWNlX3dpdGggaXMgc2VsZi5wYXJlbnQ6CkBAIC0yMTYsNiArMjM1LDEwIEBACiAKICAgICBkZWYgdW53cmFwKHNlbGYpOgogICAgICAgICBteV9wYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBpZiBub3Qgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJDYW5ub3QgcmVwbGFjZSBhbiBlbGVtZW50IHdpdGggaXRzIGNvbnRlbnRzIHdoZW4gdGhhdCIKKyAgICAgICAgICAgICAgICAiZWxlbWVudCBpcyBub3QgcGFydCBvZiBhIHRyZWUuIikKICAgICAgICAgbXlfaW5kZXggPSBzZWxmLnBhcmVudC5pbmRleChzZWxmKQogICAgICAgICBzZWxmLmV4dHJhY3QoKQogICAgICAgICBmb3IgY2hpbGQgaW4gcmV2ZXJzZWQoc2VsZi5jb250ZW50c1s6XSk6CkBAIC0yNDAsMTcgKzI2MywyMCBAQAogICAgICAgICBsYXN0X2NoaWxkID0gc2VsZi5fbGFzdF9kZXNjZW5kYW50KCkKICAgICAgICAgbmV4dF9lbGVtZW50ID0gbGFzdF9jaGlsZC5uZXh0X2VsZW1lbnQKIAotICAgICAgICBpZiBzZWxmLnByZXZpb3VzX2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIChzZWxmLnByZXZpb3VzX2VsZW1lbnQgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQgaXMgbm90IG5leHRfZWxlbWVudCk6CiAgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50ID0gbmV4dF9lbGVtZW50Ci0gICAgICAgIGlmIG5leHRfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgbmV4dF9lbGVtZW50IGlzIG5vdCBOb25lIGFuZCBuZXh0X2VsZW1lbnQgaXMgbm90IHNlbGYucHJldmlvdXNfZWxlbWVudDoKICAgICAgICAgICAgIG5leHRfZWxlbWVudC5wcmV2aW91c19lbGVtZW50ID0gc2VsZi5wcmV2aW91c19lbGVtZW50CiAgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudCA9IE5vbmUKICAgICAgICAgbGFzdF9jaGlsZC5uZXh0X2VsZW1lbnQgPSBOb25lCiAKICAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYucHJldmlvdXNfc2libGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgKHNlbGYucHJldmlvdXNfc2libGluZyBpcyBub3QgTm9uZQorICAgICAgICAgICAgYW5kIHNlbGYucHJldmlvdXNfc2libGluZyBpcyBub3Qgc2VsZi5uZXh0X3NpYmxpbmcpOgogICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZyA9IHNlbGYubmV4dF9zaWJsaW5nCi0gICAgICAgIGlmIHNlbGYubmV4dF9zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICBpZiAoc2VsZi5uZXh0X3NpYmxpbmcgaXMgbm90IE5vbmUKKyAgICAgICAgICAgIGFuZCBzZWxmLm5leHRfc2libGluZyBpcyBub3Qgc2VsZi5wcmV2aW91c19zaWJsaW5nKToKICAgICAgICAgICAgIHNlbGYubmV4dF9zaWJsaW5nLnByZXZpb3VzX3NpYmxpbmcgPSBzZWxmLnByZXZpb3VzX3NpYmxpbmcKICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nID0gc2VsZi5uZXh0X3NpYmxpbmcgPSBOb25lCiAgICAgICAgIHJldHVybiBzZWxmCkBAIC0yNjMsMTYgKzI4OSwxOCBAQAogICAgICAgICAgICAgbGFzdF9jaGlsZCA9IHNlbGYKICAgICAgICAgICAgIHdoaWxlIGlzaW5zdGFuY2UobGFzdF9jaGlsZCwgVGFnKSBhbmQgbGFzdF9jaGlsZC5jb250ZW50czoKICAgICAgICAgICAgICAgICBsYXN0X2NoaWxkID0gbGFzdF9jaGlsZC5jb250ZW50c1stMV0KLSAgICAgICAgaWYgbm90IGFjY2VwdF9zZWxmIGFuZCBsYXN0X2NoaWxkID09IHNlbGY6CisgICAgICAgIGlmIG5vdCBhY2NlcHRfc2VsZiBhbmQgbGFzdF9jaGlsZCBpcyBzZWxmOgogICAgICAgICAgICAgbGFzdF9jaGlsZCA9IE5vbmUKICAgICAgICAgcmV0dXJuIGxhc3RfY2hpbGQKICAgICAjIEJTMzogTm90IHBhcnQgb2YgdGhlIEFQSSEKICAgICBfbGFzdFJlY3Vyc2l2ZUNoaWxkID0gX2xhc3RfZGVzY2VuZGFudAogCiAgICAgZGVmIGluc2VydChzZWxmLCBwb3NpdGlvbiwgbmV3X2NoaWxkKToKKyAgICAgICAgaWYgbmV3X2NoaWxkIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgaW5zZXJ0IE5vbmUgaW50byBhIHRhZy4iKQogICAgICAgICBpZiBuZXdfY2hpbGQgaXMgc2VsZjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSB0YWcgaW50byBpdHNlbGYuIikKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UobmV3X2NoaWxkLCBiYXNlc3RyaW5nKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShuZXdfY2hpbGQsIHN0cikKICAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShuZXdfY2hpbGQsIE5hdmlnYWJsZVN0cmluZykpOgogICAgICAgICAgICAgbmV3X2NoaWxkID0gTmF2aWdhYmxlU3RyaW5nKG5ld19jaGlsZCkKIApAQCAtNDc4LDYgKzUwNiwxMCBAQAogICAgIGRlZiBfZmluZF9hbGwoc2VsZiwgbmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKToKICAgICAgICAgIkl0ZXJhdGVzIG92ZXIgYSBnZW5lcmF0b3IgbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWF0Y2guIgogCisgICAgICAgIGlmIHRleHQgaXMgTm9uZSBhbmQgJ3N0cmluZycgaW4ga3dhcmdzOgorICAgICAgICAgICAgdGV4dCA9IGt3YXJnc1snc3RyaW5nJ10KKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ3N0cmluZyddCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCBTb3VwU3RyYWluZXIpOgogICAgICAgICAgICAgc3RyYWluZXIgPSBuYW1lCiAgICAgICAgIGVsc2U6CkBAIC00ODksNyArNTIxLDcgQEAKICAgICAgICAgICAgICAgICByZXN1bHQgPSAoZWxlbWVudCBmb3IgZWxlbWVudCBpbiBnZW5lcmF0b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBUYWcpKQogICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRTZXQoc3RyYWluZXIsIHJlc3VsdCkKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgogICAgICAgICAgICAgICAgICMgT3B0aW1pemF0aW9uIHRvIGZpbmQgYWxsIHRhZ3Mgd2l0aCBhIGdpdmVuIG5hbWUuCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gKGVsZW1lbnQgZm9yIGVsZW1lbnQgaW4gZ2VuZXJhdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGFnKQpAQCAtNTQ4LDE3ICs1ODAsMTcgQEAKIAogICAgICMgTWV0aG9kcyBmb3Igc3VwcG9ydGluZyBDU1Mgc2VsZWN0b3JzLgogCi0gICAgdGFnX25hbWVfcmUgPSByZS5jb21waWxlKCdeW2EtejAtOV0rJCcpCisgICAgdGFnX25hbWVfcmUgPSByZS5jb21waWxlKCdeW2EtekEtWjAtOV1bLS5hLXpBLVowLTk6X10qJCcpCiAKLSAgICAjIC9eKFx3KylcWyhcdyspKFs9flx8XF5cJFwqXT8pPT8iPyhbXlxdIl0qKSI/XF0kLwotICAgICMgICBcLS0tLyAgXC0tLS9cLS0tLS0tLS0tLS0tLS8gICAgXC0tLS0tLS0vCi0gICAgIyAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgfAotICAgICMgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgVGhlIHZhbHVlCi0gICAgIyAgICAgfCAgICAgIHwgICAgfix8LF4sJCwqIG9yID0KLSAgICAjICAgICB8ICAgQXR0cmlidXRlCisgICAgIyAvXihbYS16QS1aMC05XVstLmEtekEtWjAtOTpfXSopXFsoXHcrKShbPX5cfFxeXCRcKl0/KT0/Ij8oW15cXSJdKikiP1xdJC8KKyAgICAjICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8gIFwtLS0vXC0tLS0tLS0tLS0tLS0vICAgIFwtLS0tLS0tLworICAgICMgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAjICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIFRoZSB2YWx1ZQorICAgICMgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIH4sfCxeLCQsKiBvciA9CisgICAgIyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZQogICAgICMgICAgVGFnCiAgICAgYXR0cmlic2VsZWN0X3JlID0gcmUuY29tcGlsZSgKLSAgICAgICAgcideKD9QPHRhZz5cdyspP1xbKD9QPGF0dHJpYnV0ZT5cdyspKD9QPG9wZXJhdG9yPls9flx8XF5cJFwqXT8pJyArCisgICAgICAgIHInXig/UDx0YWc+W2EtekEtWjAtOV1bLS5hLXpBLVowLTk6X10qKT9cWyg/UDxhdHRyaWJ1dGU+W1x3LV0rKSg/UDxvcGVyYXRvcj5bPX5cfFxeXCRcKl0/KScgKwogICAgICAgICByJz0/Ij8oP1A8dmFsdWU+W15cXSJdKikiP1xdJCcKICAgICAgICAgKQogCkBAIC02NDAsNyArNjcyLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50cwogCiAKLWNsYXNzIE5hdmlnYWJsZVN0cmluZyh1bmljb2RlLCBQYWdlRWxlbWVudCk6CitjbGFzcyBOYXZpZ2FibGVTdHJpbmcoc3RyLCBQYWdlRWxlbWVudCk6CiAKICAgICBQUkVGSVggPSAnJwogICAgIFNVRkZJWCA9ICcnCkBAIC02NTMsMTUgKzY4NSwyMSBAQAogICAgICAgICBwYXNzZWQgaW4gdG8gdGhlIHN1cGVyY2xhc3MncyBfX25ld19fIG9yIHRoZSBzdXBlcmNsYXNzIHdvbid0IGtub3cKICAgICAgICAgaG93IHRvIGhhbmRsZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHVuaWNvZGUpOgotICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVlKQotICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUsIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgdSA9IHN0ci5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ID0gc3RyLl9fbmV3X18oY2xzLCB2YWx1ZSwgREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpCisgICAgICAgIHUuc2V0dXAoKQorICAgICAgICByZXR1cm4gdQogCiAgICAgZGVmIF9fY29weV9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAiIiJBIGNvcHkgb2YgYSBOYXZpZ2FibGVTdHJpbmcgaGFzIHRoZSBzYW1lIGNvbnRlbnRzIGFuZCBjbGFzcworICAgICAgICBhcyB0aGUgb3JpZ2luYWwsIGJ1dCBpdCBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSBwYXJzZSB0cmVlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc2VsZikKIAogICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICh1bmljb2RlKHNlbGYpLCkKKyAgICAgICAgcmV0dXJuIChzdHIoc2VsZiksKQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgICAgICAiIiJ0ZXh0LnN0cmluZyBnaXZlcyB5b3UgdGV4dC4gVGhpcyBpcyBmb3IgYmFja3dhcmRzCkBAIC03MDEsMjMgKzczOSwyMyBAQAogCiBjbGFzcyBDRGF0YShQcmVmb3JtYXR0ZWRTdHJpbmcpOgogCi0gICAgUFJFRklYID0gdSc8IVtDREFUQVsnCi0gICAgU1VGRklYID0gdSddXT4nCisgICAgUFJFRklYID0gJzwhW0NEQVRBWycKKyAgICBTVUZGSVggPSAnXV0+JwogCiBjbGFzcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oUHJlZm9ybWF0dGVkU3RyaW5nKToKIAotICAgIFBSRUZJWCA9IHUnPD8nCi0gICAgU1VGRklYID0gdSc/PicKKyAgICBQUkVGSVggPSAnPD8nCisgICAgU1VGRklYID0gJz4nCiAKIGNsYXNzIENvbW1lbnQoUHJlZm9ybWF0dGVkU3RyaW5nKToKIAotICAgIFBSRUZJWCA9IHUnPCEtLScKLSAgICBTVUZGSVggPSB1Jy0tPicKKyAgICBQUkVGSVggPSAnPCEtLScKKyAgICBTVUZGSVggPSAnLS0+JwogCiAKIGNsYXNzIERlY2xhcmF0aW9uKFByZWZvcm1hdHRlZFN0cmluZyk6Ci0gICAgUFJFRklYID0gdSc8IScKLSAgICBTVUZGSVggPSB1JyE+JworICAgIFBSRUZJWCA9ICc8PycKKyAgICBTVUZGSVggPSAnPz4nCiAKIAogY2xhc3MgRG9jdHlwZShQcmVmb3JtYXR0ZWRTdHJpbmcpOgpAQCAtNzM0LDggKzc3Miw4IEBACiAKICAgICAgICAgcmV0dXJuIERvY3R5cGUodmFsdWUpCiAKLSAgICBQUkVGSVggPSB1JzwhRE9DVFlQRSAnCi0gICAgU1VGRklYID0gdSc+XG4nCisgICAgUFJFRklYID0gJzwhRE9DVFlQRSAnCisgICAgU1VGRklYID0gJz5cbicKIAogCiBjbGFzcyBUYWcoUGFnZUVsZW1lbnQpOgpAQCAtNzU5LDkgKzc5NywxMiBAQAogICAgICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAogICAgICAgICBpZiBhdHRycyBpcyBOb25lOgogICAgICAgICAgICAgYXR0cnMgPSB7fQotICAgICAgICBlbGlmIGF0dHJzIGFuZCBidWlsZGVyLmNkYXRhX2xpc3RfYXR0cmlidXRlczoKLSAgICAgICAgICAgIGF0dHJzID0gYnVpbGRlci5fcmVwbGFjZV9jZGF0YV9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoCi0gICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBhdHRycykKKyAgICAgICAgZWxpZiBhdHRyczoKKyAgICAgICAgICAgIGlmIGJ1aWxkZXIgaXMgbm90IE5vbmUgYW5kIGJ1aWxkZXIuY2RhdGFfbGlzdF9hdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIGF0dHJzID0gYnVpbGRlci5fcmVwbGFjZV9jZGF0YV9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgYXR0cnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGF0dHJzID0gZGljdChhdHRycykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGF0dHJzID0gZGljdChhdHRycykKICAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCkBAIC03NzgsNiArODE5LDE4IEBACiAKICAgICBwYXJzZXJDbGFzcyA9IF9hbGlhcygicGFyc2VyX2NsYXNzIikgICMgQlMzCiAKKyAgICBkZWYgX19jb3B5X18oc2VsZik6CisgICAgICAgICIiIkEgY29weSBvZiBhIFRhZyBpcyBhIG5ldyBUYWcsIHVuY29ubmVjdGVkIHRvIHRoZSBwYXJzZSB0cmVlLgorICAgICAgICBJdHMgY29udGVudHMgYXJlIGEgY29weSBvZiB0aGUgb2xkIFRhZydzIGNvbnRlbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgY2xvbmUgPSB0eXBlKHNlbGYpKE5vbmUsIHNlbGYuYnVpbGRlciwgc2VsZi5uYW1lLCBzZWxmLm5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubnNwcmVmaXgsIHNlbGYuYXR0cnMpCisgICAgICAgIGZvciBhdHRyIGluICgnY2FuX2JlX2VtcHR5X2VsZW1lbnQnLCAnaGlkZGVuJyk6CisgICAgICAgICAgICBzZXRhdHRyKGNsb25lLCBhdHRyLCBnZXRhdHRyKHNlbGYsIGF0dHIpKQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jb250ZW50czoKKyAgICAgICAgICAgIGNsb25lLmFwcGVuZChjaGlsZC5fX2NvcHlfXygpKQorICAgICAgICByZXR1cm4gY2xvbmUKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19lbXB0eV9lbGVtZW50KHNlbGYpOgogICAgICAgICAiIiJJcyB0aGlzIHRhZyBhbiBlbXB0eS1lbGVtZW50IHRhZz8gKGFrYSBhIHNlbGYtY2xvc2luZyB0YWcpCkBAIC04NDMsNyArODk2LDcgQEAKICAgICAgICAgZm9yIHN0cmluZyBpbiBzZWxmLl9hbGxfc3RyaW5ncyhUcnVlKToKICAgICAgICAgICAgIHlpZWxkIHN0cmluZwogCi0gICAgZGVmIGdldF90ZXh0KHNlbGYsIHNlcGFyYXRvcj11IiIsIHN0cmlwPUZhbHNlLAorICAgIGRlZiBnZXRfdGV4dChzZWxmLCBzZXBhcmF0b3I9IiIsIHN0cmlwPUZhbHNlLAogICAgICAgICAgICAgICAgICB0eXBlcz0oTmF2aWdhYmxlU3RyaW5nLCBDRGF0YSkpOgogICAgICAgICAiIiIKICAgICAgICAgR2V0IGFsbCBjaGlsZCBzdHJpbmdzLCBjb25jYXRlbmF0ZWQgdXNpbmcgdGhlIGdpdmVuIHNlcGFyYXRvci4KQEAgLTkxNSw3ICs5NjgsNyBAQAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6CiAgICAgICAgIHJldHVybiB4IGluIHNlbGYuY29udGVudHMKIAotICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgICJBIHRhZyBpcyBub24tTm9uZSBldmVuIGlmIGl0IGhhcyBubyBjb250ZW50cy4iCiAgICAgICAgIHJldHVybiBUcnVlCiAKQEAgLTk3MSwxNSArMTAyNCwyNSBAQAogICAgICAgICBhcyBkZWZpbmVkIGluIF9fZXFfXy4iIiIKICAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCiAKLSAgICBkZWYgX19yZXByX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmLCBlbmNvZGluZz0idW5pY29kZS1lc2NhcGUiKToKICAgICAgICAgIiIiUmVuZGVycyB0aGlzIHRhZyBhcyBhIHN0cmluZy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICBpZiBQWTNLOgorICAgICAgICAgICAgIyAiVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdCIsIGkuZS4gVW5pY29kZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgIlRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QiLCBpLmUuIGEgYnl0ZXN0cmluZy4KKyAgICAgICAgICAgICMgQnkgY29udmVudGlvbiwgdGhlIHJldHVybiB2YWx1ZSBvZiBfX3JlcHJfXyBzaG91bGQgYWxzbyBiZQorICAgICAgICAgICAgIyBhbiBBU0NJSSBzdHJpbmcuCisgICAgICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoZW5jb2RpbmcpCiAKICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmRlY29kZSgpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKCkKKyAgICAgICAgaWYgUFkzSzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29kZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoKQogCiAgICAgaWYgUFkzSzoKICAgICAgICAgX19zdHJfXyA9IF9fcmVwcl9fID0gX191bmljb2RlX18KQEAgLTEwMTQsNyArMTA3Nyw3IEBACiAKICAgICAgICAgIyBGaXJzdCBvZmYsIHR1cm4gYSBzdHJpbmcgZm9ybWF0dGVyIGludG8gYSBmdW5jdGlvbi4gVGhpcwogICAgICAgICAjIHdpbGwgc3RvcCB0aGUgbG9va3VwIGZyb20gaGFwcGVuaW5nIG92ZXIgYW5kIG92ZXIgYWdhaW4uCi0gICAgICAgIGlmIG5vdCBjYWxsYWJsZShmb3JtYXR0ZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmb3JtYXR0ZXIsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKToKICAgICAgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2Zvcm1hdHRlcl9mb3JfbmFtZShmb3JtYXR0ZXIpCiAKICAgICAgICAgYXR0cnMgPSBbXQpAQCAtMTAyNSw4ICsxMDg4LDggQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgbGlzdCkgb3IgaXNpbnN0YW5jZSh2YWwsIHR1cGxlKToKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICcgJy5qb2luKHZhbCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZSh2YWwsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdW5pY29kZSh2YWwpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gc3RyKHZhbCkKICAgICAgICAgICAgICAgICAgICAgZWxpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbCwgQXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVudHVhbF9lbmNvZGluZyBpcyBub3QgTm9uZSk6CkBAIC0xMDM0LDcgKzEwOTcsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmZvcm1hdF9zdHJpbmcodmFsLCBmb3JtYXR0ZXIpCiAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSAoCi0gICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlKGtleSkgKyAnPScKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cihrZXkpICsgJz0nCiAgICAgICAgICAgICAgICAgICAgICAgICArIEVudGl0eVN1YnN0aXR1dGlvbi5xdW90ZWRfYXR0cmlidXRlX3ZhbHVlKHRleHQpKQogICAgICAgICAgICAgICAgIGF0dHJzLmFwcGVuZChkZWNvZGVkKQogICAgICAgICBjbG9zZSA9ICcnCkBAIC0xMTAzLDE2ICsxMTY2LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcj0ibWluaW1hbCIpOgogICAgICAgICAiIiJSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZyBhcyBhIFVuaWNvZGUgc3RyaW5nLgogCisgICAgICAgIDpwYXJhbSBpbmRlbnRfbGV2ZWw6IEVhY2ggbGluZSBvZiB0aGUgcmVuZGVyaW5nIHdpbGwgYmUKKyAgICAgICAgICAgaW5kZW50ZWQgdGhpcyBtYW55IHNwYWNlcy4KKwogICAgICAgICA6cGFyYW0gZXZlbnR1YWxfZW5jb2Rpbmc6IFRoZSB0YWcgaXMgZGVzdGluZWQgdG8gYmUKICAgICAgICAgICAgZW5jb2RlZCBpbnRvIHRoaXMgZW5jb2RpbmcuIFRoaXMgbWV0aG9kIGlzIF9ub3RfCiAgICAgICAgICAgIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIHRoYXQgZW5jb2RpbmcuIFRoaXMgaW5mb3JtYXRpb24KICAgICAgICAgICAgaXMgcGFzc2VkIGluIHNvIHRoYXQgaXQgY2FuIGJlIHN1YnN0aXR1dGVkIGluIGlmIHRoZQogICAgICAgICAgICBkb2N1bWVudCBjb250YWlucyBhIDxNRVRBPiB0YWcgdGhhdCBtZW50aW9ucyB0aGUgZG9jdW1lbnQncwogICAgICAgICAgICBlbmNvZGluZy4KKworICAgICAgICA6cGFyYW0gZm9ybWF0dGVyOiBUaGUgb3V0cHV0IGZvcm1hdHRlciByZXNwb25zaWJsZSBmb3IgY29udmVydGluZworICAgICAgICAgICBlbnRpdGllcyB0byBVbmljb2RlIGNoYXJhY3RlcnMuCiAgICAgICAgICIiIgogICAgICAgICAjIEZpcnN0IG9mZiwgdHVybiBhIHN0cmluZyBmb3JtYXR0ZXIgaW50byBhIGZ1bmN0aW9uLiBUaGlzCiAgICAgICAgICMgd2lsbCBzdG9wIHRoZSBsb29rdXAgZnJvbSBoYXBwZW5pbmcgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KLSAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZvcm1hdHRlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZvcm1hdHRlciwgY29sbGVjdGlvbnMuQ2FsbGFibGUpOgogICAgICAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZm9ybWF0dGVyX2Zvcl9uYW1lKGZvcm1hdHRlcikKIAogICAgICAgICBwcmV0dHlfcHJpbnQgPSAoaW5kZW50X2xldmVsIGlzIG5vdCBOb25lKQpAQCAtMTEzNyw3ICsxMjA2LDE3IEBACiAgICAgZGVmIGVuY29kZV9jb250ZW50cygKICAgICAgICAgc2VsZiwgaW5kZW50X2xldmVsPU5vbmUsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAogICAgICAgICBmb3JtYXR0ZXI9Im1pbmltYWwiKToKLSAgICAgICAgIiIiUmVuZGVycyB0aGUgY29udGVudHMgb2YgdGhpcyB0YWcgYXMgYSBieXRlc3RyaW5nLiIiIgorICAgICAgICAiIiJSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZyBhcyBhIGJ5dGVzdHJpbmcuCisKKyAgICAgICAgOnBhcmFtIGluZGVudF9sZXZlbDogRWFjaCBsaW5lIG9mIHRoZSByZW5kZXJpbmcgd2lsbCBiZQorICAgICAgICAgICBpbmRlbnRlZCB0aGlzIG1hbnkgc3BhY2VzLgorCisgICAgICAgIDpwYXJhbSBldmVudHVhbF9lbmNvZGluZzogVGhlIGJ5dGVzdHJpbmcgd2lsbCBiZSBpbiB0aGlzIGVuY29kaW5nLgorCisgICAgICAgIDpwYXJhbSBmb3JtYXR0ZXI6IFRoZSBvdXRwdXQgZm9ybWF0dGVyIHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nCisgICAgICAgICAgIGVudGl0aWVzIHRvIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAgICAgICAgIiIiCisKICAgICAgICAgY29udGVudHMgPSBzZWxmLmRlY29kZV9jb250ZW50cyhpbmRlbnRfbGV2ZWwsIGVuY29kaW5nLCBmb3JtYXR0ZXIpCiAgICAgICAgIHJldHVybiBjb250ZW50cy5lbmNvZGUoZW5jb2RpbmcpCiAKQEAgLTEyMDEsMjYgKzEyODAsNTcgQEAKIAogICAgIF9zZWxlY3Rvcl9jb21iaW5hdG9ycyA9IFsnPicsICcrJywgJ34nXQogICAgIF9zZWxlY3RfZGVidWcgPSBGYWxzZQotICAgIGRlZiBzZWxlY3Qoc2VsZiwgc2VsZWN0b3IsIF9jYW5kaWRhdGVfZ2VuZXJhdG9yPU5vbmUpOgorICAgIGRlZiBzZWxlY3Rfb25lKHNlbGYsIHNlbGVjdG9yKToKICAgICAgICAgIiIiUGVyZm9ybSBhIENTUyBzZWxlY3Rpb24gb3BlcmF0aW9uIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQuIiIiCisgICAgICAgIHZhbHVlID0gc2VsZi5zZWxlY3Qoc2VsZWN0b3IsIGxpbWl0PTEpCisgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHNlbGVjdG9yLCBfY2FuZGlkYXRlX2dlbmVyYXRvcj1Ob25lLCBsaW1pdD1Ob25lKToKKyAgICAgICAgIiIiUGVyZm9ybSBhIENTUyBzZWxlY3Rpb24gb3BlcmF0aW9uIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQuIiIiCisKKyAgICAgICAgIyBIYW5kbGUgZ3JvdXBpbmcgc2VsZWN0b3JzIGlmICcsJyBleGlzdHMsIGllOiBwLGEKKyAgICAgICAgaWYgJywnIGluIHNlbGVjdG9yOgorICAgICAgICAgICAgY29udGV4dCA9IFtdCisgICAgICAgICAgICBmb3IgcGFydGlhbF9zZWxlY3RvciBpbiBzZWxlY3Rvci5zcGxpdCgnLCcpOgorICAgICAgICAgICAgICAgIHBhcnRpYWxfc2VsZWN0b3IgPSBwYXJ0aWFsX3NlbGVjdG9yLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBwYXJ0aWFsX3NlbGVjdG9yID09ICcnOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGdyb3VwIHNlbGVjdGlvbiBzeW50YXg6ICVzJyAlIHNlbGVjdG9yKQorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBzZWxmLnNlbGVjdChwYXJ0aWFsX3NlbGVjdG9yLCBsaW1pdD1saW1pdCkKKyAgICAgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGNhbmRpZGF0ZSBub3QgaW4gY29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXBwZW5kKGNhbmRpZGF0ZSkKKworICAgICAgICAgICAgICAgIGlmIGxpbWl0IGFuZCBsZW4oY29udGV4dCkgPj0gbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXR1cm4gY29udGV4dAorCiAgICAgICAgIHRva2VucyA9IHNlbGVjdG9yLnNwbGl0KCkKICAgICAgICAgY3VycmVudF9jb250ZXh0ID0gW3NlbGZdCiAKICAgICAgICAgaWYgdG9rZW5zWy0xXSBpbiBzZWxmLl9zZWxlY3Rvcl9jb21iaW5hdG9yczoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ0ZpbmFsIGNvbWJpbmF0b3IgIiVzIiBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LicgJSB0b2tlbnNbLTFdKQorCiAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKLSAgICAgICAgICAgIHByaW50ICdSdW5uaW5nIENTUyBzZWxlY3RvciAiJXMiJyAlIHNlbGVjdG9yCisgICAgICAgICAgICBwcmludCgnUnVubmluZyBDU1Mgc2VsZWN0b3IgIiVzIicgJSBzZWxlY3RvcikKKwogICAgICAgICBmb3IgaW5kZXgsIHRva2VuIGluIGVudW1lcmF0ZSh0b2tlbnMpOgotICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgotICAgICAgICAgICAgICAgIHByaW50ICcgQ29uc2lkZXJpbmcgdG9rZW4gIiVzIicgJSB0b2tlbgotICAgICAgICAgICAgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBOb25lCi0gICAgICAgICAgICB0YWdfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgIG5ld19jb250ZXh0ID0gW10KKyAgICAgICAgICAgIG5ld19jb250ZXh0X2lkcyA9IHNldChbXSkKKwogICAgICAgICAgICAgaWYgdG9rZW5zW2luZGV4LTFdIGluIHNlbGYuX3NlbGVjdG9yX2NvbWJpbmF0b3JzOgogICAgICAgICAgICAgICAgICMgVGhpcyB0b2tlbiB3YXMgY29uc3VtZWQgYnkgdGhlIHByZXZpb3VzIGNvbWJpbmF0b3IuIFNraXAgaXQuCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgotICAgICAgICAgICAgICAgICAgICBwcmludCAnICBUb2tlbiB3YXMgY29uc3VtZWQgYnkgdGhlIHByZXZpb3VzIGNvbWJpbmF0b3IuJworICAgICAgICAgICAgICAgICAgICBwcmludCgnICBUb2tlbiB3YXMgY29uc3VtZWQgYnkgdGhlIHByZXZpb3VzIGNvbWJpbmF0b3IuJykKICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgcHJpbnQoJyBDb25zaWRlcmluZyB0b2tlbiAiJXMiJyAlIHRva2VuKQorICAgICAgICAgICAgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBOb25lCisgICAgICAgICAgICB0YWdfbmFtZSA9IE5vbmUKKwogICAgICAgICAgICAgIyBFYWNoIG9wZXJhdGlvbiBjb3JyZXNwb25kcyB0byBhIGNoZWNrZXIgZnVuY3Rpb24sIGEgcnVsZQogICAgICAgICAgICAgIyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGNhbmRpZGF0ZSBtYXRjaGVzIHRoZQogICAgICAgICAgICAgIyBzZWxlY3Rvci4gQ2FuZGlkYXRlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBhY3RpdmUKQEAgLTEyNTYsMzUgKzEzNjYsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJBIHBzZXVkby1jbGFzcyBtdXN0IGJlIHByZWZpeGVkIHdpdGggYSB0YWcgbmFtZS4iKQogICAgICAgICAgICAgICAgIHBzZXVkb19hdHRyaWJ1dGVzID0gcmUubWF0Y2goJyhbYS16QS1aXGQtXSspXCgoW2EtekEtWlxkXSspXCknLCBwc2V1ZG8pCiAgICAgICAgICAgICAgICAgZm91bmQgPSBbXQotICAgICAgICAgICAgICAgIGlmIHBzZXVkb19hdHRyaWJ1dGVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHBzZXVkb19hdHRyaWJ1dGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBzZXVkb190eXBlID0gcHNldWRvCisgICAgICAgICAgICAgICAgICAgIHBzZXVkb192YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fdHlwZSwgcHNldWRvX3ZhbHVlID0gcHNldWRvX2F0dHJpYnV0ZXMuZ3JvdXBzKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgcHNldWRvX3R5cGUgPT0gJ250aC1vZi10eXBlJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fdmFsdWUgPSBpbnQocHNldWRvX3ZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPbmx5IG51bWVyaWMgdmFsdWVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZvciB0aGUgbnRoLW9mLXR5cGUgcHNldWRvLWNsYXNzLicpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBwc2V1ZG9fdmFsdWUgPCAxOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudGgtb2YtdHlwZSBwc2V1ZG8tY2xhc3MgdmFsdWUgbXVzdCBiZSBhdCBsZWFzdCAxLicpCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb3VudGVyKG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RpbmF0aW9uKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgbnRoX2NoaWxkX29mX3R5cGUoc2VsZiwgdGFnKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY291bnQgPT0gc2VsZi5kZXN0aW5hdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY291bnQgPiBzZWxmLmRlc3RpbmF0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTdG9wIHRoZSBnZW5lcmF0b3IgdGhhdCdzIHNlbmRpbmcgdXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlc2UgdGhpbmdzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlciA9IENvdW50ZXIocHNldWRvX3ZhbHVlKS5udGhfY2hpbGRfb2ZfdHlwZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHBzZXVkb190eXBlID09ICdudGgtb2YtdHlwZSc6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb192YWx1ZSA9IGludChwc2V1ZG9fdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09ubHkgdGhlIGZvbGxvd2luZyBwc2V1ZG8tY2xhc3NlcyBhcmUgaW1wbGVtZW50ZWQ6IG50aC1vZi10eXBlLicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09ubHkgbnVtZXJpYyB2YWx1ZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIHRoZSBudGgtb2YtdHlwZSBwc2V1ZG8tY2xhc3MuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgcHNldWRvX3ZhbHVlIDwgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ250aC1vZi10eXBlIHBzZXVkby1jbGFzcyB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IDEuJykKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ291bnRlcihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RpbmF0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbgorCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgbnRoX2NoaWxkX29mX3R5cGUoc2VsZiwgdGFnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID09IHNlbGYuZGVzdGluYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA+IHNlbGYuZGVzdGluYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU3RvcCB0aGUgZ2VuZXJhdG9yIHRoYXQncyBzZW5kaW5nIHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlc2UgdGhpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlciA9IENvdW50ZXIocHNldWRvX3ZhbHVlKS5udGhfY2hpbGRfb2ZfdHlwZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAnT25seSB0aGUgZm9sbG93aW5nIHBzZXVkby1jbGFzc2VzIGFyZSBpbXBsZW1lbnRlZDogbnRoLW9mLXR5cGUuJykKIAogICAgICAgICAgICAgZWxpZiB0b2tlbiA9PSAnKic6CiAgICAgICAgICAgICAgICAgIyBTdGFyIHNlbGVjdG9yIC0tIG1hdGNoZXMgZXZlcnl0aGluZwpAQCAtMTMxMSw3ICsxNDI0LDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIG9yIGludmFsaWQgQ1NTIHNlbGVjdG9yOiAiJXMiJyAlIHRva2VuKQotCiAgICAgICAgICAgICBpZiByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBzZWxlY3RvciBsb29rcyBsaWtlICAiPiBmb28iLgogICAgICAgICAgICAgICAgICMKQEAgLTEzMjUsMTQgKzE0MzcsMTQgQEAKICAgICAgICAgICAgICAgICBuZXh0X3Rva2VuID0gdG9rZW5zW2luZGV4KzFdCiAgICAgICAgICAgICAgICAgZGVmIHJlY3Vyc2l2ZV9zZWxlY3QodGFnKToKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgICBDYWxsaW5nIHNlbGVjdCgiJXMiKSByZWN1cnNpdmVseSBvbiAlcyAlcycgJSAobmV4dF90b2tlbiwgdGFnLm5hbWUsIHRhZy5hdHRycykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctJyAqIDQwCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnICAgIENhbGxpbmcgc2VsZWN0KCIlcyIpIHJlY3Vyc2l2ZWx5IG9uICVzICVzJyAlIChuZXh0X3Rva2VuLCB0YWcubmFtZSwgdGFnLmF0dHJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCctJyAqIDQwKQogICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB0YWcuc2VsZWN0KG5leHRfdG9rZW4sIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnKFJlY3Vyc2l2ZSBzZWxlY3QgcGlja2VkIHVwIGNhbmRpZGF0ZSAlcyAlcyknICUgKGkubmFtZSwgaS5hdHRycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnKFJlY3Vyc2l2ZSBzZWxlY3QgcGlja2VkIHVwIGNhbmRpZGF0ZSAlcyAlcyknICUgKGkubmFtZSwgaS5hdHRycykpCiAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBpCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctJyAqIDQwCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnLScgKiA0MCkKICAgICAgICAgICAgICAgICBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSByZWN1cnNpdmVfc2VsZWN0CiAgICAgICAgICAgICBlbGlmIF9jYW5kaWRhdGVfZ2VuZXJhdG9yIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgIyBCeSBkZWZhdWx0LCBhIHRhZydzIGNhbmRpZGF0ZXMgYXJlIGFsbCBvZiBpdHMKQEAgLTEzNDMsNyArMTQ1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayA9ICJbYW55XSIKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrID0gdGFnX25hbWUKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgIERlZmF1bHQgY2FuZGlkYXRlIGdlbmVyYXRvciwgdGFnIG5hbWU9IiVzIicgJSBjaGVjaworICAgICAgICAgICAgICAgICAgICBwcmludCgnICAgRGVmYXVsdCBjYW5kaWRhdGUgZ2VuZXJhdG9yLCB0YWcgbmFtZT0iJXMiJyAlIGNoZWNrKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHJlZHVuZGFudCB3aXRoIGxhdGVyIGNvZGUsIGJ1dCBpdCBzdG9wcwogICAgICAgICAgICAgICAgICAgICAjIGEgYnVuY2ggb2YgYm9ndXMgdGFncyBmcm9tIGNsdXR0ZXJpbmcgdXAgdGhlCkBAIC0xMzYxLDEyICsxNDczLDExIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IF9jYW5kaWRhdGVfZ2VuZXJhdG9yCiAKLSAgICAgICAgICAgIG5ld19jb250ZXh0ID0gW10KLSAgICAgICAgICAgIG5ld19jb250ZXh0X2lkcyA9IHNldChbXSkKKyAgICAgICAgICAgIGNvdW50ID0gMAogICAgICAgICAgICAgZm9yIHRhZyBpbiBjdXJyZW50X2NvbnRleHQ6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiICAgIFJ1bm5pbmcgY2FuZGlkYXRlIGdlbmVyYXRvciBvbiAlcyAlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWcubmFtZSwgcmVwcih0YWcuYXR0cnMpKQorICAgICAgICAgICAgICAgICAgICBwcmludCgiICAgIFJ1bm5pbmcgY2FuZGlkYXRlIGdlbmVyYXRvciBvbiAlcyAlcyIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICB0YWcubmFtZSwgcmVwcih0YWcuYXR0cnMpKSkKICAgICAgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvcih0YWcpOgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjYW5kaWRhdGUsIFRhZyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtMTM4MSwyMSArMTQ5MiwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGlmIGNoZWNrZXIgaXMgTm9uZSBvciByZXN1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgICAgU1VDQ0VTUyAlcyAlcyIgJSAoY2FuZGlkYXRlLm5hbWUsIHJlcHIoY2FuZGlkYXRlLmF0dHJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiICAgICBTVUNDRVNTICVzICVzIiAlIChjYW5kaWRhdGUubmFtZSwgcmVwcihjYW5kaWRhdGUuYXR0cnMpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlkKGNhbmRpZGF0ZSkgbm90IGluIG5ld19jb250ZXh0X2lkczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGEgdGFnIG1hdGNoZXMgYSBzZWxlY3RvciBtb3JlIHRoYW4gb25jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbid0IGluY2x1ZGUgaXQgaW4gdGhlIGNvbnRleHQgbW9yZSB0aGFuIG9uY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NvbnRleHQuYXBwZW5kKGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY29udGV4dF9pZHMuYWRkKGlkKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGltaXQgYW5kIGxlbihuZXdfY29udGV4dCkgPj0gbGltaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgICAgRkFJTFVSRSAlcyAlcyIgJSAoY2FuZGlkYXRlLm5hbWUsIHJlcHIoY2FuZGlkYXRlLmF0dHJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIgICAgIEZBSUxVUkUgJXMgJXMiICUgKGNhbmRpZGF0ZS5uYW1lLCByZXByKGNhbmRpZGF0ZS5hdHRycykpKQorCiAKICAgICAgICAgICAgIGN1cnJlbnRfY29udGV4dCA9IG5ld19jb250ZXh0CiAKICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgotICAgICAgICAgICAgcHJpbnQgIkZpbmFsIHZlcmRpY3Q6IgorICAgICAgICAgICAgcHJpbnQoIkZpbmFsIHZlcmRpY3Q6IikKICAgICAgICAgICAgIGZvciBpIGluIGN1cnJlbnRfY29udGV4dDoKLSAgICAgICAgICAgICAgICBwcmludCAiICVzICVzIiAlIChpLm5hbWUsIGkuYXR0cnMpCisgICAgICAgICAgICAgICAgcHJpbnQoIiAlcyAlcyIgJSAoaS5uYW1lLCBpLmF0dHJzKSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRfY29udGV4dAogCiAgICAgIyBPbGQgbmFtZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CkBAIC0xNDM5LDcgKzE1NTMsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBhdHRycyA9IGt3YXJncwogICAgICAgICBub3JtYWxpemVkX2F0dHJzID0ge30KLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0cnMuaXRlbXMoKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbGlzdChhdHRycy5pdGVtcygpKToKICAgICAgICAgICAgIG5vcm1hbGl6ZWRfYXR0cnNba2V5XSA9IHNlbGYuX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUodmFsdWUpCiAKICAgICAgICAgc2VsZi5hdHRycyA9IG5vcm1hbGl6ZWRfYXR0cnMKQEAgLTE0NDgsNyArMTU2Miw3IEBACiAgICAgZGVmIF9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKHNlbGYsIHZhbHVlKToKICAgICAgICAgIyBMZWF2ZSBpdCBhbG9uZSBpZiBpdCdzIGEgVW5pY29kZSBzdHJpbmcsIGEgY2FsbGFibGUsIGEKICAgICAgICAgIyByZWd1bGFyIGV4cHJlc3Npb24sIGEgYm9vbGVhbiwgb3IgTm9uZS4KLSAgICAgICAgaWYgKGlzaW5zdGFuY2UodmFsdWUsIHVuaWNvZGUpIG9yIGNhbGxhYmxlKHZhbHVlKSBvciBoYXNhdHRyKHZhbHVlLCAnbWF0Y2gnKQorICAgICAgICBpZiAoaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKSBvciBpc2luc3RhbmNlKHZhbHVlLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSkgb3IgaGFzYXR0cih2YWx1ZSwgJ21hdGNoJykKICAgICAgICAgICAgIG9yIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpIG9yIHZhbHVlIGlzIE5vbmUpOgogICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKQEAgLTE0NjEsNyArMTU3NSw3IEBACiAgICAgICAgICAgICBuZXdfdmFsdWUgPSBbXQogICAgICAgICAgICAgZm9yIHYgaW4gdmFsdWU6CiAgICAgICAgICAgICAgICAgaWYgKGhhc2F0dHIodiwgJ19faXRlcl9fJykgYW5kIG5vdCBpc2luc3RhbmNlKHYsIGJ5dGVzKQotICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UodiwgdW5pY29kZSkpOgorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2Uodiwgc3RyKSk6CiAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSB1c2VyJ3MgbWlzdGFrZS4gSW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICMgaW50ZXJlc3RzIG9mIGF2b2lkaW5nIGluZmluaXRlIGxvb3BzLCB3ZSdsbCBsZXQKICAgICAgICAgICAgICAgICAgICAgIyBpdCB0aHJvdWdoIGFzLWlzIHJhdGhlciB0aGFuIGRvaW5nIGEgcmVjdXJzaXZlIGNhbGwuCkBAIC0xNDczLDcgKzE1ODcsNyBAQAogICAgICAgICAjIE90aGVyd2lzZSwgY29udmVydCBpdCBpbnRvIGEgVW5pY29kZSBzdHJpbmcuCiAgICAgICAgICMgVGhlIHVuaWNvZGUoc3RyKCkpIHRoaW5nIGlzIHNvIHRoaXMgd2lsbCBkbyB0aGUgc2FtZSB0aGluZyBvbiBQeXRob24gMgogICAgICAgICAjIGFuZCBQeXRob24gMy4KLSAgICAgICAgcmV0dXJuIHVuaWNvZGUoc3RyKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0cihzdHIodmFsdWUpKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIGlmIHNlbGYudGV4dDoKQEAgLTE1MjcsNyArMTY0MSw3IEBACiAgICAgICAgIGZvdW5kID0gTm9uZQogICAgICAgICAjIElmIGdpdmVuIGEgbGlzdCBvZiBpdGVtcywgc2NhbiBpdCBmb3IgYSB0ZXh0IGVsZW1lbnQgdGhhdAogICAgICAgICAjIG1hdGNoZXMuCi0gICAgICAgIGlmIGhhc2F0dHIobWFya3VwLCAnX19pdGVyX18nKSBhbmQgbm90IGlzaW5zdGFuY2UobWFya3VwLCAoVGFnLCBiYXNlc3RyaW5nKSk6CisgICAgICAgIGlmIGhhc2F0dHIobWFya3VwLCAnX19pdGVyX18nKSBhbmQgbm90IGlzaW5zdGFuY2UobWFya3VwLCAoVGFnLCBzdHIpKToKICAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG1hcmt1cDoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIE5hdmlnYWJsZVN0cmluZykgXAogICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5zZWFyY2goZWxlbWVudCk6CkBAIC0xNTQwLDcgKzE2NTQsNyBAQAogICAgICAgICAgICAgICAgIGZvdW5kID0gc2VsZi5zZWFyY2hfdGFnKG1hcmt1cCkKICAgICAgICAgIyBJZiBpdCdzIHRleHQsIG1ha2Ugc3VyZSB0aGUgdGV4dCBtYXRjaGVzLgogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBOYXZpZ2FibGVTdHJpbmcpIG9yIFwKLSAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShtYXJrdXAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKG1hcmt1cCwgc3RyKToKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLm5hbWUgYW5kIG5vdCBzZWxmLmF0dHJzIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cCwgc2VsZi50ZXh0KToKICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cAogICAgICAgICBlbHNlOgpAQCAtMTU1NCw3ICsxNjY4LDcgQEAKICAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIGxpc3QpIG9yIGlzaW5zdGFuY2UobWFya3VwLCB0dXBsZSk6CiAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4gc2VhcmNoaW5nIGEgbXVsdGktdmFsdWVkIGF0dHJpYnV0ZQogICAgICAgICAgICAgIyBsaWtlICdjbGFzcycuCi0gICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtYXRjaF9hZ2FpbnN0LCB1bmljb2RlKQorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWF0Y2hfYWdhaW5zdCwgc3RyKQogICAgICAgICAgICAgICAgIGFuZCAnICcgaW4gbWF0Y2hfYWdhaW5zdCk6CiAgICAgICAgICAgICAgICAgIyBBIGJpdCBvZiBhIHNwZWNpYWwgY2FzZS4gSWYgdGhleSB0cnkgdG8gbWF0Y2ggImZvbwogICAgICAgICAgICAgICAgICMgYmFyIiBvbiBhIG11bHRpdmFsdWUgYXR0cmlidXRlJ3MgdmFsdWUsIG9ubHkgYWNjZXB0CkBAIC0xNTg5LDcgKzE3MDMsNyBAQAogICAgICAgICAgICAgIyBOb25lIG1hdGNoZXMgTm9uZSwgRmFsc2UsIGFuIGVtcHR5IHN0cmluZywgYW4gZW1wdHkgbGlzdCwgYW5kIHNvIG9uLgogICAgICAgICAgICAgcmV0dXJuIG5vdCBtYXRjaF9hZ2FpbnN0CiAKLSAgICAgICAgaWYgaXNpbnN0YW5jZShtYXRjaF9hZ2FpbnN0LCB1bmljb2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXRjaF9hZ2FpbnN0LCBzdHIpOgogICAgICAgICAgICAgIyBFeGFjdCBzdHJpbmcgbWF0Y2gKICAgICAgICAgICAgIHJldHVybiBtYXJrdXAgPT0gbWF0Y2hfYWdhaW5zdAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RpbmcucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RpbmcucHkKaW5kZXggZmQ0NDk1YS4uM2EyZjI2MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0aW5nLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdGluZy5weQpAQCAtMSw1ICsxLDggQEAKICIiIkhlbHBlciBjbGFzc2VzIGZvciB0ZXN0cy4iIiIKIAorX19saWNlbnNlX18gPSAiTUlUIgorCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgY29weQogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IHVuaXR0ZXN0CkBAIC00Myw2ICs0NiwxNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2Zvcihjb21wYXJlX3BhcnNlZF90bykpCiAKKyAgICBkZWYgYXNzZXJ0Q29ubmVjdGVkbmVzcyhzZWxmLCBlbGVtZW50KToKKyAgICAgICAgIiIiRW5zdXJlIHRoYXQgbmV4dF9lbGVtZW50IGFuZCBwcmV2aW91c19lbGVtZW50IGFyZSBwcm9wZXJseQorICAgICAgICBzZXQgZm9yIGFsbCBkZXNjZW5kYW50cyBvZiB0aGUgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGVhcmxpZXIgPSBOb25lCisgICAgICAgIGZvciBlIGluIGVsZW1lbnQuZGVzY2VuZGFudHM6CisgICAgICAgICAgICBpZiBlYXJsaWVyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgZWFybGllci5uZXh0X2VsZW1lbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXJsaWVyLCBlLnByZXZpb3VzX2VsZW1lbnQpCisgICAgICAgICAgICBlYXJsaWVyID0gZQogCiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3Qob2JqZWN0KToKIApAQCAtNTQsNiArNjcsMTUgQEAKICAgICBtYXJrdXAgaW4gdGhlc2UgdGVzdHMsIHRoZXJlJ3Mgbm90IG11Y2ggcm9vbSBmb3IgaW50ZXJwcmV0YXRpb24uCiAgICAgIiIiCiAKKyAgICBkZWYgdGVzdF9waWNrbGVfYW5kX3VucGlja2xlX2lkZW50aXR5KHNlbGYpOgorICAgICAgICAjIFBpY2tsaW5nIGEgdHJlZSwgdGhlbiB1bnBpY2tsaW5nIGl0LCB5aWVsZHMgYSB0cmVlIGlkZW50aWNhbAorICAgICAgICAjIHRvIHRoZSBvcmlnaW5hbC4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiPGE+PGI+Zm9vPC9hPiIpCisgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyh0cmVlLCAyKQorICAgICAgICBsb2FkZWQgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX2NsYXNzX18sIEJlYXV0aWZ1bFNvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmRlY29kZSgpLCB0cmVlLmRlY29kZSgpKQorCiAgICAgZGVmIGFzc2VydERvY3R5cGVIYW5kbGVkKHNlbGYsIGRvY3R5cGVfZnJhZ21lbnQpOgogICAgICAgICAiIiJBc3NlcnQgdGhhdCBhIGdpdmVuIGRvY3R5cGUgc3RyaW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5LiIiIgogICAgICAgICBkb2N0eXBlX3N0ciwgc291cCA9IHNlbGYuX2RvY3VtZW50X3dpdGhfZG9jdHlwZShkb2N0eXBlX2ZyYWdtZW50KQpAQCAtMTE0LDYgKzEzNiwxMSBAQAogICAgICAgICAgICAgc291cC5lbmNvZGUoInV0Zi04IikucmVwbGFjZShiIlxuIiwgYiIiKSwKICAgICAgICAgICAgIG1hcmt1cC5yZXBsYWNlKGIiXG4iLCBiIiIpKQogCisgICAgZGVmIHRlc3RfcHJvY2Vzc2luZ19pbnN0cnVjdGlvbihzZWxmKToKKyAgICAgICAgbWFya3VwID0gYiIiIjw/UElUYXJnZXQgUElDb250ZW50Pz4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFya3VwLCBzb3VwLmVuY29kZSgidXRmOCIpKQorCiAgICAgZGVmIHRlc3RfZGVlcGNvcHkoc2VsZik6CiAgICAgICAgICIiIk1ha2Ugc3VyZSB5b3UgY2FuIGNvcHkgdGhlIHRyZWUgYnVpbGRlci4KIApAQCAtMTU1LDYgKzE4MiwyMyBAQAogICAgIGRlZiB0ZXN0X25lc3RlZF9mb3JtYXR0aW5nX2VsZW1lbnRzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxlbT48ZW0+PC9lbT48L2VtPiIpCiAKKyAgICBkZWYgdGVzdF9kb3VibGVfaGVhZChzZWxmKToKKyAgICAgICAgaHRtbCA9ICcnJzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5PcmRpbmFyeSBIRUFEIGVsZW1lbnQgdGVzdDwvdGl0bGU+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CithbGVydCgiSGVscCEiKTsKKzwvc2NyaXB0PgorPGJvZHk+CitIZWxsbywgd29ybGQhCis8L2JvZHk+Cis8L2h0bWw+CisnJycKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L2phdmFzY3JpcHQiLCBzb3VwLmZpbmQoJ3NjcmlwdCcpWyd0eXBlJ10pCisKICAgICBkZWYgdGVzdF9jb21tZW50KHNlbGYpOgogICAgICAgICAjIENvbW1lbnRzIGFyZSByZXByZXNlbnRlZCBhcyBDb21tZW50IG9iamVjdHMuCiAgICAgICAgIG1hcmt1cCA9ICI8cD5mb288IS0tZm9vYmFyLS0+YmF6PC9wPiIKQEAgLTIyMSwxOCArMjY1LDI2IEBACiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiY3NzIl0sIHNvdXAuZGl2LmRpdlsnY2xhc3MnXSkKIAorICAgIGRlZiB0ZXN0X211bHRpdmFsdWVkX2F0dHJpYnV0ZV9vbl9odG1sKHNlbGYpOgorICAgICAgICAjIGh0bWw1bGliIHVzZXMgYSBkaWZmZXJlbnQgQVBJIHRvIHNldCB0aGUgYXR0cmlidXRlcyBvdCB0aGUKKyAgICAgICAgIyA8aHRtbD4gdGFnLiBUaGlzIGhhcyBjYXVzZWQgcHJvYmxlbXMgd2l0aCBtdWx0aXZhbHVlZAorICAgICAgICAjIGF0dHJpYnV0ZXMuCisgICAgICAgIG1hcmt1cCA9ICc8aHRtbCBjbGFzcz0iYSBiIj48L2h0bWw+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImEiLCAiYiJdLCBzb3VwLmh0bWxbJ2NsYXNzJ10pCisKICAgICBkZWYgdGVzdF9hbmdsZV9icmFja2V0c19pbl9hdHRyaWJ1dGVfdmFsdWVzX2FyZV9lc2NhcGVkKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxhIGI9IjxhPiI+PC9hPicsICc8YSBiPSImbHQ7YSZndDsiPjwvYT4nKQogCiAgICAgZGVmIHRlc3RfZW50aXRpZXNfaW5fYXR0cmlidXRlc19jb252ZXJ0ZWRfdG9fdW5pY29kZShzZWxmKToKLSAgICAgICAgZXhwZWN0ID0gdSc8cCBpZD0icGlcTntMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFfWF0YSI+PC9wPicKKyAgICAgICAgZXhwZWN0ID0gJzxwIGlkPSJwaVxOe0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREV9YXRhIj48L3A+JwogICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSYjMjQxO2F0YSI+PC9wPicsIGV4cGVjdCkKICAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8cCBpZD0icGkmI3hmMTthdGEiPjwvcD4nLCBleHBlY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPHAgaWQ9InBpJiNYZjE7YXRhIj48L3A+JywgZXhwZWN0KQogICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSZudGlsZGU7YXRhIj48L3A+JywgZXhwZWN0KQogCiAgICAgZGVmIHRlc3RfZW50aXRpZXNfaW5fdGV4dF9jb252ZXJ0ZWRfdG9fdW5pY29kZShzZWxmKToKLSAgICAgICAgZXhwZWN0ID0gdSc8cD5waVxOe0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREV9YXRhPC9wPicKKyAgICAgICAgZXhwZWN0ID0gJzxwPnBpXE57TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERX1hdGE8L3A+JwogICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPnBpJiMyNDE7YXRhPC9wPiIsIGV4cGVjdCkKICAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5waSYjeGYxO2F0YTwvcD4iLCBleHBlY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+cGkmI1hmMTthdGE8L3A+IiwgZXhwZWN0KQpAQCAtMjQzLDcgKzI5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHA+SSBzYWlkICJnb29kIGRheSEiPC9wPicpCiAKICAgICBkZWYgdGVzdF9vdXRfb2ZfcmFuZ2VfZW50aXR5KHNlbGYpOgotICAgICAgICBleHBlY3QgPSB1IlxOe1JFUExBQ0VNRU5UIENIQVJBQ1RFUn0iCisgICAgICAgIGV4cGVjdCA9ICJcTntSRVBMQUNFTUVOVCBDSEFSQUNURVJ9IgogICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIiYjMTAwMDAwMDAwMDAwMDA7IiwgZXhwZWN0KQogICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIiYjeDEwMDAwMDAwMDAwMDAwOyIsIGV4cGVjdCkKICAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCImIzEwMDAwMDAwMDA7IiwgZXhwZWN0KQpAQCAtMjUzLDYgKzMwNSwzNSBAQAogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8aHRtbD48aDI+XG5mb288L2gyPjxwPjwvcD48L2h0bWw+IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicCIsIHNvdXAuaDIuc3RyaW5nLm5leHRfZWxlbWVudC5uYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJwIiwgc291cC5wLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29ubmVjdGVkbmVzcyhzb3VwKQorCisgICAgZGVmIHRlc3RfaGVhZF90YWdfYmV0d2Vlbl9oZWFkX2FuZF9ib2R5KHNlbGYpOgorICAgICAgICAiUHJldmVudCByZWN1cnJlbmNlIG9mIGEgYnVnIGluIHRoZSBodG1sNWxpYiB0cmVlYnVpbGRlci4iCisgICAgICAgIGNvbnRlbnQgPSAiIiI8aHRtbD48aGVhZD48L2hlYWQ+CisgIDxsaW5rPjwvbGluaz4KKyAgPGJvZHk+Zm9vPC9ib2R5PgorPC9odG1sPgorIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChOb25lLCBzb3VwLmh0bWwuYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRDb25uZWN0ZWRuZXNzKHNvdXApCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9jb3BpZXNfb2ZfYV90YWcoc2VsZik6CisgICAgICAgICJQcmV2ZW50IHJlY3VycmVuY2Ugb2YgYSBidWcgaW4gdGhlIGh0bWw1bGliIHRyZWVidWlsZGVyLiIKKyAgICAgICAgY29udGVudCA9ICIiIjwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgPGJvZHk+CisgICA8YXJ0aWNsZSBpZD0iYSIgPgorICAgPGRpdj48YSBocmVmPSIxIj48L2Rpdj4KKyAgIDxmb290ZXI+CisgICAgIDxhIGhyZWY9IjIiPjwvYT4KKyAgIDwvZm9vdGVyPgorICA8L2FydGljbGU+CisgIDwvYm9keT4KKzwvaHRtbD4KKyIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29ubmVjdGVkbmVzcyhzb3VwLmFydGljbGUpCiAKICAgICBkZWYgdGVzdF9iYXNpY19uYW1lc3BhY2VzKHNlbGYpOgogICAgICAgICAiIiJQYXJzZXJzIGRvbid0IG5lZWQgdG8gKnVuZGVyc3RhbmQqIG5hbWVzcGFjZXMsIGJ1dCBhdCB0aGUKQEAgLTI4NSw5ICszNjYsOSBAQAogICAgICAgICAjIEEgc2VlbWluZ2x5IGlubm9jdW91cyBkb2N1bWVudC4uLiBidXQgaXQncyBpbiBVbmljb2RlISBBbmQKICAgICAgICAgIyBpdCBjb250YWlucyBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlCiAgICAgICAgICMgZW5jb2RpbmcgZm91bmQgaW4gdGhlICBkZWNsYXJhdGlvbiEgVGhlIGhvcnJvciEKLSAgICAgICAgbWFya3VwID0gdSc8aHRtbD48aGVhZD48bWV0YSBlbmNvZGluZz0iZXVjLWpwIj48L2hlYWQ+PGJvZHk+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9ib2R5PicKKyAgICAgICAgbWFya3VwID0gJzxodG1sPjxoZWFkPjxtZXRhIGVuY29kaW5nPSJldWMtanAiPjwvaGVhZD48Ym9keT5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L2JvZHk+JwogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1NhY3JceGU5IGJsZXUhJywgc291cC5ib2R5LnN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2Fjclx4ZTkgYmxldSEnLCBzb3VwLmJvZHkuc3RyaW5nKQogCiAgICAgZGVmIHRlc3Rfc291cHN0cmFpbmVyKHNlbGYpOgogICAgICAgICAiIiJQYXJzZXJzIHNob3VsZCBiZSBhYmxlIHRvIHdvcmsgd2l0aCBTb3VwU3RyYWluZXJzLiIiIgpAQCAtMzI3LDcgKzQwOCw3IEBACiAgICAgICAgICMgQm90aCBYTUwgYW5kIEhUTUwgZW50aXRpZXMgYXJlIGNvbnZlcnRlZCB0byBVbmljb2RlIGNoYXJhY3RlcnMKICAgICAgICAgIyBkdXJpbmcgcGFyc2luZy4KICAgICAgICAgdGV4dCA9ICI8cD4mbHQ7Jmx0O3NhY3ImZWFjdXRlOyYjMzI7YmxldSEmZ3Q7Jmd0OzwvcD4iCi0gICAgICAgIGV4cGVjdGVkID0gdSI8cD4mbHQ7Jmx0O3NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9wPiIKKyAgICAgICAgZXhwZWN0ZWQgPSAiPHA+Jmx0OyZsdDtzYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvcD4iCiAgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyh0ZXh0LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc19jb252ZXJ0ZWRfb25fdGhlX3dheV9pbihzZWxmKToKQEAgLTMzNywxNSArNDE4LDE1IEBACiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAocXVvdGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzb3VwLnAuc3RyaW5nLAotICAgICAgICAgICAgdSJcTntMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSS31Gb29cTntSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkt9IikKKyAgICAgICAgICAgICJcTntMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSS31Gb29cTntSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkt9IikKIAogICAgIGRlZiB0ZXN0X25vbl9icmVha2luZ19zcGFjZXNfY29udmVydGVkX29uX3RoZV93YXlfaW4oc2VsZik6CiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPiZuYnNwOyZuYnNwOzwvYT4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5zdHJpbmcsIHUiXE57Tk8tQlJFQUsgU1BBQ0V9IiAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLnN0cmluZywgIlxOe05PLUJSRUFLIFNQQUNFfSIgKiAyKQogCiAgICAgZGVmIHRlc3RfZW50aXRpZXNfY29udmVydGVkX29uX3RoZV93YXlfb3V0KHNlbGYpOgogICAgICAgICB0ZXh0ID0gIjxwPiZsdDsmbHQ7c2FjciZlYWN1dGU7JiMzMjtibGV1ISZndDsmZ3Q7PC9wPiIKLSAgICAgICAgZXhwZWN0ZWQgPSB1IjxwPiZsdDsmbHQ7c2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L3A+Ii5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgZXhwZWN0ZWQgPSAiPHA+Jmx0OyZsdDtzYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvcD4iLmVuY29kZSgidXRmLTgiKQogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5wLmVuY29kZSgidXRmLTgiKSwgZXhwZWN0ZWQpCiAKQEAgLTM1NCw3ICs0MzUsNyBAQAogICAgICAgICAjIGVhc3ktdG8tdW5kZXJzdGFuZCBkb2N1bWVudC4KIAogICAgICAgICAjIEhlcmUgaXQgaXMgaW4gVW5pY29kZS4gTm90ZSB0aGF0IGl0IGNsYWltcyB0byBiZSBpbiBJU08tTGF0aW4tMS4KLSAgICAgICAgdW5pY29kZV9odG1sID0gdSc8aHRtbD48aGVhZD48bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLUxhdGluLTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPjwvaGVhZD48Ym9keT48cD5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L3A+PC9ib2R5PjwvaHRtbD4nCisgICAgICAgIHVuaWNvZGVfaHRtbCA9ICc8aHRtbD48aGVhZD48bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLUxhdGluLTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPjwvaGVhZD48Ym9keT48cD5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L3A+PC9ib2R5PjwvaHRtbD4nCiAKICAgICAgICAgIyBUaGF0J3MgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBlbmNvZGUgaXQgaW50byBJU08tTGF0aW4tMSwgYW5kIHVzZQogICAgICAgICAjIHRoYXQgdG8gdGVzdC4KQEAgLTQ2MywxMSArNTQ0LDI1IEBACiAKIGNsYXNzIFhNTFRyZWVCdWlsZGVyU21va2VUZXN0KG9iamVjdCk6CiAKKyAgICBkZWYgdGVzdF9waWNrbGVfYW5kX3VucGlja2xlX2lkZW50aXR5KHNlbGYpOgorICAgICAgICAjIFBpY2tsaW5nIGEgdHJlZSwgdGhlbiB1bnBpY2tsaW5nIGl0LCB5aWVsZHMgYSB0cmVlIGlkZW50aWNhbAorICAgICAgICAjIHRvIHRoZSBvcmlnaW5hbC4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiPGE+PGI+Zm9vPC9hPiIpCisgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyh0cmVlLCAyKQorICAgICAgICBsb2FkZWQgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX2NsYXNzX18sIEJlYXV0aWZ1bFNvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmRlY29kZSgpLCB0cmVlLmRlY29kZSgpKQorCiAgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2dlbmVyYXRlZChzZWxmKToKICAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHJvb3QvPiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzb3VwLmVuY29kZSgpLCBiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG48cm9vdC8+JykKIAorICAgIGRlZiB0ZXN0X3htbF9kZWNsYXJhdGlvbihzZWxmKToKKyAgICAgICAgbWFya3VwID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0ZjgiPz5cbjxmb28vPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXJrdXAsIHNvdXAuZW5jb2RlKCJ1dGY4IikpCisKICAgICBkZWYgdGVzdF9yZWFsX3hodG1sX2RvY3VtZW50KHNlbGYpOgogICAgICAgICAiIiJBIHJlYWwgWEhUTUwgZG9jdW1lbnQgc2hvdWxkIGNvbWUgb3V0ICpleGFjdGx5KiB0aGUgc2FtZSBhcyBpdCB3ZW50IGluLiIiIgogICAgICAgICBtYXJrdXAgPSBiIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KQEAgLTQ4NSw3ICs1ODAsNyBAQAogICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgIDwvc2NyaXB0PgogIiIiCi0gICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGRvYywgInhtbCIpCisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGRvYywgImx4bWwteG1sIikKICAgICAgICAgIyBseG1sIHdvdWxkIGhhdmUgc3RyaXBwZWQgdGhpcyB3aGlsZSBwYXJzaW5nLCBidXQgd2UgY2FuIGFkZAogICAgICAgICAjIGl0IGxhdGVyLgogICAgICAgICBzb3VwLnNjcmlwdC5zdHJpbmcgPSAnY29uc29sZS5sb2coIjwgPCBoZXkgPiA+ICIpOycKQEAgLTQ5MywxNSArNTg4LDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIiZsdDsgJmx0OyBoZXkgJmd0OyAmZ3Q7IiBpbiBlbmNvZGVkKQogCiAgICAgZGVmIHRlc3RfY2FuX3BhcnNlX3VuaWNvZGVfZG9jdW1lbnQoc2VsZik6Ci0gICAgICAgIG1hcmt1cCA9IHUnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iZXVjLWpwIj48cm9vdD5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L3Jvb3Q+JworICAgICAgICBtYXJrdXAgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iZXVjLWpwIj48cm9vdD5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L3Jvb3Q+JwogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1NhY3JceGU5IGJsZXUhJywgc291cC5yb290LnN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2Fjclx4ZTkgYmxldSEnLCBzb3VwLnJvb3Quc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfcG9wcGluZ19uYW1lc3BhY2VkX3RhZyhzZWxmKToKICAgICAgICAgbWFya3VwID0gJzxyc3MgeG1sbnM6ZGM9ImZvbyI+PGRjOmNyZWF0b3I+YjwvZGM6Y3JlYXRvcj48ZGM6ZGF0ZT4yMDEyLTA3LTAyVDIwOjMzOjQyWjwvZGM6ZGF0ZT48ZGM6cmlnaHRzPmM8L2RjOnJpZ2h0cz48aW1hZ2U+ZDwvaW1hZ2U+PC9yc3M+JwogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHVuaWNvZGUoc291cC5yc3MpLCBtYXJrdXApCisgICAgICAgICAgICBzdHIoc291cC5yc3MpLCBtYXJrdXApCiAKICAgICBkZWYgdGVzdF9kb2NzdHJpbmdfaW5jbHVkZXNfY29ycmVjdF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHJvb3QvPiIpCkBAIC01MzIsMTcgKzYyNywxNyBAQAogICAgIGRlZiB0ZXN0X2Nsb3NpbmdfbmFtZXNwYWNlZF90YWcoc2VsZik6CiAgICAgICAgIG1hcmt1cCA9ICc8cCB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpkYXRlPjIwMDEwNTA0PC9kYzpkYXRlPjwvcD4nCiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoc291cC5wKSwgbWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwLnApLCBtYXJrdXApCiAKICAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIG1hcmt1cCA9ICc8Zm9vIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPjxiYXIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+PC9mb28+JwogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHNvdXAuZm9vKSwgbWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwLmZvbyksIG1hcmt1cCkKIAogICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfYXR0cmlidXRlc194bWxfbmFtZXNwYWNlKHNlbGYpOgogICAgICAgICBtYXJrdXAgPSAnPGZvbyB4bWw6bGFuZz0iZnIiPmJhcjwvZm9vPicKICAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShzb3VwLmZvbyksIG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cC5mb28pLCBtYXJrdXApCiAKIGNsYXNzIEhUTUw1VHJlZUJ1aWxkZXJTbW9rZVRlc3QoSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0KToKICAgICAiIiJTbW9rZSB0ZXN0IGZvciBhIHRyZWUgYnVpbGRlciB0aGF0IHN1cHBvcnRzIEhUTUw1LiIiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2J1aWxkZXJfcmVnaXN0cnkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfYnVpbGRlcl9yZWdpc3RyeS5weQppbmRleCA5MmFkMTBmLi45MGNhZDgyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfYnVpbGRlcl9yZWdpc3RyeS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfYnVpbGRlcl9yZWdpc3RyeS5weQpAQCAtMSw2ICsxLDcgQEAKICIiIlRlc3RzIG9mIHRoZSBidWlsZGVyIHJlZ2lzdHJ5LiIiIgogCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogCiBmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAogZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKApAQCAtNjcsMTAgKzY4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlcikKIAogICAgIGRlZiB0ZXN0X2JlYXV0aWZ1bHNvdXBfY29uc3RydWN0b3JfZG9lc19sb29rdXAoc2VsZik6Ci0gICAgICAgICMgWW91IGNhbiBwYXNzIGluIGEgc3RyaW5nLgotICAgICAgICBCZWF1dGlmdWxTb3VwKCIiLCBmZWF0dXJlcz0iaHRtbCIpCi0gICAgICAgICMgT3IgYSBsaXN0IG9mIHN0cmluZ3MuCi0gICAgICAgIEJlYXV0aWZ1bFNvdXAoIiIsIGZlYXR1cmVzPVsiaHRtbCIsICJmYXN0Il0pCisKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgICMgVGhpcyB3aWxsIGNyZWF0ZSBhIHdhcm5pbmcgYWJvdXQgbm90IGV4cGxpY2l0bHkKKyAgICAgICAgICAgICMgc3BlY2lmeWluZyBhIHBhcnNlciwgYnV0IHdlJ2xsIGlnbm9yZSBpdC4KKworICAgICAgICAgICAgIyBZb3UgY2FuIHBhc3MgaW4gYSBzdHJpbmcuCisgICAgICAgICAgICBCZWF1dGlmdWxTb3VwKCIiLCBmZWF0dXJlcz0iaHRtbCIpCisgICAgICAgICAgICAjIE9yIGEgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICAgICAgQmVhdXRpZnVsU291cCgiIiwgZmVhdHVyZXM9WyJodG1sIiwgImZhc3QiXSkKIAogICAgICAgICAjIFlvdSdsbCBnZXQgYW4gZXhjZXB0aW9uIGlmIEJTIGNhbid0IGZpbmQgYW4gYXBwcm9wcmlhdGUKICAgICAgICAgIyBidWlsZGVyLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWw1bGliLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWw1bGliLnB5CmluZGV4IDU5NGMzZTEuLmE3NDk0Y2EgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1sNWxpYi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbDVsaWIucHkKQEAgLTUsNyArNSw3IEBACiB0cnk6CiAgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgSFRNTDVUcmVlQnVpbGRlcgogICAgIEhUTUw1TElCX1BSRVNFTlQgPSBUcnVlCi1leGNlcHQgSW1wb3J0RXJyb3IsIGU6CitleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKICAgICBIVE1MNUxJQl9QUkVTRU5UID0gRmFsc2UKIGZyb20gYnM0LmVsZW1lbnQgaW1wb3J0IFNvdXBTdHJhaW5lcgogZnJvbSBiczQudGVzdGluZyBpbXBvcnQgKApAQCAtNzQsMTIgKzc0LDI1IEBACiAgICAgZGVmIHRlc3RfcmVwYXJlbnRlZF9tYXJrdXAoc2VsZik6CiAgICAgICAgIG1hcmt1cCA9ICc8cD48ZW0+Zm9vPC9wPlxuPHA+YmFyPGE+PC9hPjwvZW0+PC9wPicKICAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8Ym9keT48cD48ZW0+Zm9vPC9lbT48L3A+PGVtPlxuPC9lbT48cD48ZW0+YmFyPGE+PC9hPjwvZW0+PC9wPjwvYm9keT4iLCBzb3VwLmJvZHkuZGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxib2R5PjxwPjxlbT5mb288L2VtPjwvcD48ZW0+XG48L2VtPjxwPjxlbT5iYXI8YT48L2E+PC9lbT48L3A+PC9ib2R5PiIsIHNvdXAuYm9keS5kZWNvZGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgncCcpKSkKIAogCiAgICAgZGVmIHRlc3RfcmVwYXJlbnRlZF9tYXJrdXBfZW5kc193aXRoX3doaXRlc3BhY2Uoc2VsZik6CiAgICAgICAgIG1hcmt1cCA9ICc8cD48ZW0+Zm9vPC9wPlxuPHA+YmFyPGE+PC9hPjwvZW0+PC9wPlxuJwogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ijxib2R5PjxwPjxlbT5mb288L2VtPjwvcD48ZW0+XG48L2VtPjxwPjxlbT5iYXI8YT48L2E+PC9lbT48L3A+XG48L2JvZHk+Iiwgc291cC5ib2R5LmRlY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8Ym9keT48cD48ZW0+Zm9vPC9lbT48L3A+PGVtPlxuPC9lbT48cD48ZW0+YmFyPGE+PC9hPjwvZW0+PC9wPlxuPC9ib2R5PiIsIHNvdXAuYm9keS5kZWNvZGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgncCcpKSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24oc2VsZik6CisgICAgICAgICIiIlByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGJlY29tZSBjb21tZW50cy4iIiIKKyAgICAgICAgbWFya3VwID0gYiIiIjw/UElUYXJnZXQgUElDb250ZW50Pz4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGFzc2VydCBzdHIoc291cCkuc3RhcnRzd2l0aCgiPCEtLT9QSVRhcmdldCBQSUNvbnRlbnQ/LS0+IikKKworICAgIGRlZiB0ZXN0X2Nsb25lZF9tdWx0aXZhbHVlX25vZGUoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IGIiIiI8YSBjbGFzcz0ibXlfY2xhc3MiPjxwPjwvYT4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGExLCBhMiA9IHNvdXAuZmluZF9hbGwoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLCBhMikKKyAgICAgICAgYXNzZXJ0IGExIGlzIG5vdCBhMgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWxwYXJzZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbHBhcnNlci5weQppbmRleCBiY2I1ZWQyLi5iNDVlMzVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbHBhcnNlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbHBhcnNlci5weQpAQCAtMSw2ICsxLDggQEAKICIiIlRlc3RzIHRvIGVuc3VyZSB0aGF0IHRoZSBodG1sLnBhcnNlciB0cmVlIGJ1aWxkZXIgZ2VuZXJhdGVzIGdvb2QKIHRyZWVzLiIiIgogCitmcm9tIHBkYiBpbXBvcnQgc2V0X3RyYWNlCitpbXBvcnQgcGlja2xlCiBmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCBTb3VwVGVzdCwgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0CiBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIKIApAQCAtMTcsMyArMTksMTQgQEAKICAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3B1YmxpY19kb2N0eXBlKHNlbGYpOgogICAgICAgICAjIGh0bWwucGFyc2VyIGNhbid0IGhhbmRsZSBuYW1lc3BhY2VkIGRvY3R5cGVzLCBzbyBza2lwIHRoaXMgb25lLgogICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9idWlsZGVyX2lzX3BpY2tsZWQoc2VsZik6CisgICAgICAgICIiIlVubGlrZSBtb3N0IHRyZWUgYnVpbGRlcnMsIEhUTUxQYXJzZXJUcmVlQnVpbGRlciBhbmQgd2lsbAorICAgICAgICBiZSByZXN0b3JlZCBhZnRlciBwaWNrbGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIjxhPjxiPmZvbzwvYT4iKQorICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHModHJlZSwgMikKKyAgICAgICAgbG9hZGVkID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobG9hZGVkLmJ1aWxkZXIsIHR5cGUodHJlZS5idWlsZGVyKSkpCisKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2x4bWwucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weQppbmRleCAyYjJlOWI3Li42YzJhMWQ3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weQpAQCAtNyw3ICs3LDcgQEAKICAgICBpbXBvcnQgbHhtbC5ldHJlZQogICAgIExYTUxfUFJFU0VOVCA9IFRydWUKICAgICBMWE1MX1ZFUlNJT04gPSBseG1sLmV0cmVlLkxYTUxfVkVSU0lPTgotZXhjZXB0IEltcG9ydEVycm9yLCBlOgorZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6CiAgICAgTFhNTF9QUkVTRU5UID0gRmFsc2UKICAgICBMWE1MX1ZFUlNJT04gPSAoMCwpCiAKQEAgLTYyLDI0ICs2Miw5IEBACiAgICAgICAgICMgaWYgb25lIGlzIGluc3RhbGxlZC4KICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTdG9uZVNvdXAoIjxiIC8+IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IjxiLz4iLCB1bmljb2RlKHNvdXAuYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxiLz4iLCBzdHIoc291cC5iKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJCZWF1dGlmdWxTdG9uZVNvdXAgY2xhc3MgaXMgZGVwcmVjYXRlZCIgaW4gc3RyKHdbMF0ubWVzc2FnZSkpCiAKLSAgICBkZWYgdGVzdF9yZWFsX3hodG1sX2RvY3VtZW50KHNlbGYpOgotICAgICAgICAiIiJseG1sIHN0cmlwcyB0aGUgWE1MIGRlZmluaXRpb24gZnJvbSBhbiBYSFRNTCBkb2MsIHdoaWNoIGlzIGZpbmUuIiIiCi0gICAgICAgIG1hcmt1cCA9IGIiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD48dGl0bGU+SGVsbG8uPC90aXRsZT48L2hlYWQ+Ci08Ym9keT5Hb29kYnllLjwvYm9keT4KLTwvaHRtbD4iIiIKLSAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzb3VwLmVuY29kZSgidXRmLTgiKS5yZXBsYWNlKGIiXG4iLCBiJycpLAotICAgICAgICAgICAgbWFya3VwLnJlcGxhY2UoYidcbicsIGInJykucmVwbGFjZSgKLSAgICAgICAgICAgICAgICBiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+JywgYicnKSkKLQotCiBAc2tpcElmKAogICAgIG5vdCBMWE1MX1BSRVNFTlQsCiAgICAgImx4bWwgc2VlbXMgbm90IHRvIGJlIHByZXNlbnQsIG5vdCB0ZXN0aW5nIGl0cyBYTUwgdHJlZSBidWlsZGVyLiIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3Rfc291cC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5CmluZGV4IDQ3YWMyNDUuLmY4Nzk0OWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5CkBAIC0xLDYgKzEsNyBAQAogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KICIiIlRlc3RzIG9mIEJlYXV0aWZ1bCBTb3VwIGFzIGEgd2hvbGUuIiIiCiAKK2Zyb20gcGRiIGltcG9ydCBzZXRfdHJhY2UKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKQEAgLTIwLDYgKzIxLDcgQEAKIGZyb20gYnM0LmRhbW1pdCBpbXBvcnQgKAogICAgIEVudGl0eVN1YnN0aXR1dGlvbiwKICAgICBVbmljb2RlRGFtbWl0LAorICAgIEVuY29kaW5nRGV0ZWN0b3IsCiApCiBmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCAoCiAgICAgU291cFRlc3QsCkBAIC0zMCw3ICszMiw3IEBACiB0cnk6CiAgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgTFhNTFRyZWVCdWlsZGVyLCBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwKICAgICBMWE1MX1BSRVNFTlQgPSBUcnVlCi1leGNlcHQgSW1wb3J0RXJyb3IsIGU6CitleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKICAgICBMWE1MX1BSRVNFTlQgPSBGYWxzZQogCiBQWVRIT05fMl9QUkVfMl83ID0gKHN5cy52ZXJzaW9uX2luZm8gPCAoMiw3KSkKQEAgLTM5LDE3ICs0MSw0MyBAQAogY2xhc3MgVGVzdENvbnN0cnVjdG9yKFNvdXBUZXN0KToKIAogICAgIGRlZiB0ZXN0X3Nob3J0X3VuaWNvZGVfaW5wdXQoc2VsZik6Ci0gICAgICAgIGRhdGEgPSB1IjxoMT7DqcOpPC9oMT4iCisgICAgICAgIGRhdGEgPSAiPGgxPsOpw6k8L2gxPiIKICAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiw6nDqSIsIHNvdXAuaDEuc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCLDqcOpIiwgc291cC5oMS5zdHJpbmcpCiAKICAgICBkZWYgdGVzdF9lbWJlZGRlZF9udWxsKHNlbGYpOgotICAgICAgICBkYXRhID0gdSI8aDE+Zm9vXDBiYXI8L2gxPiIKKyAgICAgICAgZGF0YSA9ICI8aDE+Zm9vXDBiYXI8L2gxPiIKICAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiZm9vXDBiYXIiLCBzb3VwLmgxLnN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZm9vXDBiYXIiLCBzb3VwLmgxLnN0cmluZykKKworICAgIGRlZiB0ZXN0X2V4Y2x1ZGVfZW5jb2RpbmdzKHNlbGYpOgorICAgICAgICB1dGY4X2RhdGEgPSAiUsOka3Ntw7ZyZ8OlcyIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodXRmOF9kYXRhLCBleGNsdWRlX2VuY29kaW5ncz1bInV0Zi04Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIndpbmRvd3MtMTI1MiIsIHNvdXAub3JpZ2luYWxfZW5jb2RpbmcpCiAKIAotY2xhc3MgVGVzdERlcHJlY2F0ZWRDb25zdHJ1Y3RvckFyZ3VtZW50cyhTb3VwVGVzdCk6CitjbGFzcyBUZXN0V2FybmluZ3MoU291cFRlc3QpOgorCisgICAgZGVmIF9ub19wYXJzZXJfc3BlY2lmaWVkKHNlbGYsIHMsIGlzX3RoZXJlPVRydWUpOgorICAgICAgICB2ID0gcy5zdGFydHN3aXRoKEJlYXV0aWZ1bFNvdXAuTk9fUEFSU0VSX1NQRUNJRklFRF9XQVJOSU5HWzo4MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2KQorCisgICAgZGVmIHRlc3Rfd2FybmluZ19pZl9ub19wYXJzZXJfc3BlY2lmaWVkKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PGI+PC9iPjwvYT4iKQorICAgICAgICBtc2cgPSBzdHIod1swXS5tZXNzYWdlKQorICAgICAgICBzZWxmLl9hc3NlcnRfbm9fcGFyc2VyX3NwZWNpZmllZChtc2cpCisKKyAgICBkZWYgdGVzdF93YXJuaW5nX2lmX3BhcnNlcl9zcGVjaWZpZWRfdG9vX3ZhZ3VlKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PGI+PC9iPjwvYT4iLCAiaHRtbCIpCisgICAgICAgIG1zZyA9IHN0cih3WzBdLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuX2Fzc2VydF9ub19wYXJzZXJfc3BlY2lmaWVkKG1zZykKKworICAgIGRlZiB0ZXN0X25vX3dhcm5pbmdfaWZfZXhwbGljaXRfcGFyc2VyX3NwZWNpZmllZChzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjxiPjwvYj48L2E+IiwgImh0bWwucGFyc2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdykKIAogICAgIGRlZiB0ZXN0X3BhcnNlT25seVRoZXNlX3JlbmFtZWRfdG9fcGFyc2Vfb25seShzZWxmKToKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKQEAgLTExNyw5ICsxNDUsOSBAQAogICAgIGRlZiB0ZXN0X3NpbXBsZV9odG1sX3N1YnN0aXR1dGlvbihzZWxmKToKICAgICAgICAgIyBVbmljb2RlIGNoYXJhY3RlcnMgY29ycmVzcG9uZGluZyB0byBuYW1lZCBIVE1MIGVudGl0ZXMKICAgICAgICAgIyBhcmUgc3Vic3RpdHV0ZWQsIGFuZCBubyBvdGhlcnMuCi0gICAgICAgIHMgPSB1ImZvb1x1MjIwMFxOe1NOT1dNQU59XHUwMGY1YmFyIgorICAgICAgICBzID0gImZvb1x1MjIwMFxOe1NOT1dNQU59XHUwMGY1YmFyIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfaHRtbChzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdSJmb28mZm9yYWxsO1xOe1NOT1dNQU59Jm90aWxkZTtiYXIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9vJmZvcmFsbDtcTntTTk9XTUFOfSZvdGlsZGU7YmFyIikKIAogICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3RlX3N1YnN0aXR1dGlvbihzZWxmKToKICAgICAgICAgIyBNUyBzbWFydCBxdW90ZXMgYXJlIGEgY29tbW9uIHNvdXJjZSBvZiBmcnVzdHJhdGlvbiwgc28gd2UKQEAgLTE4NCw3ICsyMTIsNyBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcihUZXN0RW5jb2RpbmdDb252ZXJzaW9uLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYudW5pY29kZV9kYXRhID0gdSc8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjwvaGVhZD48Ym9keT48Zm9vPlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvZm9vPjwvYm9keT48L2h0bWw+JworICAgICAgICBzZWxmLnVuaWNvZGVfZGF0YSA9ICc8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjwvaGVhZD48Ym9keT48Zm9vPlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvZm9vPjwvYm9keT48L2h0bWw+JwogICAgICAgICBzZWxmLnV0ZjhfZGF0YSA9IHNlbGYudW5pY29kZV9kYXRhLmVuY29kZSgidXRmLTgiKQogICAgICAgICAjIEp1c3Qgc28geW91IGtub3cgd2hhdCBpdCBsb29rcyBsaWtlLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjA0LDcgKzIzMiw3IEBACiAgICAgICAgICAgICBhc2NpaSA9IGIiPGZvbz5hPC9mb28+IgogICAgICAgICAgICAgc291cF9mcm9tX2FzY2lpID0gc2VsZi5zb3VwKGFzY2lpKQogICAgICAgICAgICAgdW5pY29kZV9vdXRwdXQgPSBzb3VwX2Zyb21fYXNjaWkuZGVjb2RlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHVuaWNvZGVfb3V0cHV0LCB1bmljb2RlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHVuaWNvZGVfb3V0cHV0LCBzdHIpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX291dHB1dCwgc2VsZi5kb2N1bWVudF9mb3IoYXNjaWkuZGVjb2RlKCkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fYXNjaWkub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgInV0Zi04IikKICAgICAgICAgZmluYWxseToKQEAgLTIxNiw3ICsyNDQsNyBAQAogICAgICAgICAjIGlzIG5vdCBzZXQuCiAgICAgICAgIHNvdXBfZnJvbV91bmljb2RlID0gc2VsZi5zb3VwKHNlbGYudW5pY29kZV9kYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLmRlY29kZSgpLCBzZWxmLnVuaWNvZGVfZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5mb28uc3RyaW5nLCB1J1NhY3JceGU5IGJsZXUhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5mb28uc3RyaW5nLCAnU2Fjclx4ZTkgYmxldSEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLm9yaWdpbmFsX2VuY29kaW5nLCBOb25lKQogCiAgICAgZGVmIHRlc3RfdXRmOF9pbl91bmljb2RlX291dChzZWxmKToKQEAgLTIyNCw3ICsyNTIsNyBAQAogICAgICAgICAjIGF0dHJpYnV0ZSBpcyBzZXQuCiAgICAgICAgIHNvdXBfZnJvbV91dGY4ID0gc2VsZi5zb3VwKHNlbGYudXRmOF9kYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91dGY4LmRlY29kZSgpLCBzZWxmLnVuaWNvZGVfZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdXRmOC5mb28uc3RyaW5nLCB1J1NhY3JceGU5IGJsZXUhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdXRmOC5mb28uc3RyaW5nLCAnU2Fjclx4ZTkgYmxldSEnKQogCiAgICAgZGVmIHRlc3RfdXRmOF9vdXQoc2VsZik6CiAgICAgICAgICMgVGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBjYW4gYmUgZW5jb2RlZCBhcyBVVEYtOC4KQEAgLTIzNSwxNCArMjYzLDE0IEBACiAgICAgICAgIFBZVEhPTl8yX1BSRV8yXzcgb3IgUFlUSE9OXzNfUFJFXzNfMiwKICAgICAgICAgIkJhZCBIVE1MUGFyc2VyIGRldGVjdGVkOyBza2lwcGluZyB0ZXN0IG9mIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGF0dHJpYnV0ZSBuYW1lLiIpCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX25hbWVfY29udGFpbmluZ191bmljb2RlX2NoYXJhY3RlcnMoc2VsZik6Ci0gICAgICAgIG1hcmt1cCA9IHUnPGRpdj48YSBcTntTTk9XTUFOfT0ic25vd21hbiI+PC9hPjwvZGl2PicKKyAgICAgICAgbWFya3VwID0gJzxkaXY+PGEgXE57U05PV01BTn09InNub3dtYW4iPjwvYT48L2Rpdj4nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb3VwKG1hcmt1cCkuZGl2LmVuY29kZSgidXRmOCIpLCBtYXJrdXAuZW5jb2RlKCJ1dGY4IikpCiAKIGNsYXNzIFRlc3RVbmljb2RlRGFtbWl0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJTdGFuZGFsb25lIHRlc3RzIG9mIFVuaWNvZGVEYW1taXQuIiIiCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2lucHV0KHNlbGYpOgotICAgICAgICBtYXJrdXAgPSB1IkknbSBhbHJlYWR5IFVuaWNvZGUhIFxOe1NOT1dNQU59IgorICAgICAgICBtYXJrdXAgPSAiSSdtIGFscmVhZHkgVW5pY29kZSEgXE57U05PV01BTn0iCiAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC51bmljb2RlX21hcmt1cCwgbWFya3VwKQogCkBAIC0yNTAsNyArMjc4LDcgQEAKICAgICAgICAgbWFya3VwID0gYiI8Zm9vPlx4OTFceDkyXHg5M1x4OTQ8L2Zvbz4iCiAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgZGFtbWl0LnVuaWNvZGVfbWFya3VwLCB1Ijxmb28+XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkPC9mb28+IikKKyAgICAgICAgICAgIGRhbW1pdC51bmljb2RlX21hcmt1cCwgIjxmb28+XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkPC9mb28+IikKIAogICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc190b194bWxfZW50aXRpZXMoc2VsZik6CiAgICAgICAgIG1hcmt1cCA9IGIiPGZvbz5ceDkxXHg5Mlx4OTNceDk0PC9mb28+IgpAQCAtMjcxLDE2ICsyOTksMTcgQEAKICAgICAgICAgICAgIGRhbW1pdC51bmljb2RlX21hcmt1cCwgIiIiPGZvbz4nJyIiPC9mb28+IiIiKQogCiAgICAgZGVmIHRlc3RfZGV0ZWN0X3V0Zjgoc2VsZik6Ci0gICAgICAgIHV0ZjggPSBiIlx4YzNceGE5IgorICAgICAgICB1dGY4ID0gYiJTYWNyXHhjM1x4YTkgYmxldSEgXHhlMlx4OThceDgzIgogICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHV0ZjgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLCB1J1x4ZTknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC51bmljb2RlX21hcmt1cCwgJ1NhY3JceGU5IGJsZXUhIFxOe1NOT1dNQU59JykKKwogCiAgICAgZGVmIHRlc3RfY29udmVydF9oZWJyZXcoc2VsZik6CiAgICAgICAgIGhlYnJldyA9IGIiXHhlZFx4ZTVceGVjXHhmOSIKICAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChoZWJyZXcsIFsiaXNvLTg4NTktOCJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAnaXNvLTg4NTktOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLCB1J1x1MDVkZFx1MDVkNVx1MDVkY1x1MDVlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLCAnXHUwNWRkXHUwNWQ1XHUwNWRjXHUwNWU5JykKIAogICAgIGRlZiB0ZXN0X2RvbnRfc2VlX3NtYXJ0X3F1b3Rlc193aGVyZV90aGVyZV9hcmVfbm9uZShzZWxmKToKICAgICAgICAgdXRmXzggPSBiIlwzNDNcMjAyXDI2MVwzNDNcMjAzXDI3NFwzNDNcMjAyXDI3N1wzNDNcMjAyXDI0NCBXYXRjaCIKQEAgLTI4OSwxNiArMzE4LDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLmVuY29kZSgidXRmLTgiKSwgdXRmXzgpCiAKICAgICBkZWYgdGVzdF9pZ25vcmVfaW5hcHByb3ByaWF0ZV9jb2RlY3Moc2VsZik6Ci0gICAgICAgIHV0ZjhfZGF0YSA9IHUiUsOka3Ntw7ZyZ8OlcyIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIHV0ZjhfZGF0YSA9ICJSw6Rrc23DtnJnw6VzIi5lbmNvZGUoInV0Zi04IikKICAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGY4X2RhdGEsIFsiaXNvLTg4NTktOCJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAndXRmLTgnKQogCiAgICAgZGVmIHRlc3RfaWdub3JlX2ludmFsaWRfY29kZWNzKHNlbGYpOgotICAgICAgICB1dGY4X2RhdGEgPSB1IlLDpGtzbcO2cmfDpXMiLmVuY29kZSgidXRmLTgiKQorICAgICAgICB1dGY4X2RhdGEgPSAiUsOka3Ntw7ZyZ8OlcyIuZW5jb2RlKCJ1dGYtOCIpCiAgICAgICAgIGZvciBiYWRfZW5jb2RpbmcgaW4gWycudXRmOCcsICcuLi4nLCAndXRGLS0tMTYuISddOgogICAgICAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGY4X2RhdGEsIFtiYWRfZW5jb2RpbmddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgJ3V0Zi04JykKIAorICAgIGRlZiB0ZXN0X2V4Y2x1ZGVfZW5jb2RpbmdzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgVVRGLTguCisgICAgICAgIHV0ZjhfZGF0YSA9ICJSw6Rrc23DtnJnw6VzIi5lbmNvZGUoInV0Zi04IikKKworICAgICAgICAjIEJ1dCBpZiB3ZSBleGNsdWRlIFVURi04IGZyb20gY29uc2lkZXJhdGlvbiwgdGhlIGd1ZXNzIGlzCisgICAgICAgICMgV2luZG93cy0xMjUyLgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHV0ZjhfZGF0YSwgZXhjbHVkZV9lbmNvZGluZ3M9WyJ1dGYtOCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAnd2luZG93cy0xMjUyJykKKworICAgICAgICAjIEFuZCBpZiB3ZSBleGNsdWRlIHRoYXQsIHRoZXJlIGlzIG5vIHZhbGlkIGd1ZXNzIGF0IGFsbC4KKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCgKKyAgICAgICAgICAgIHV0ZjhfZGF0YSwgZXhjbHVkZV9lbmNvZGluZ3M9WyJ1dGYtOCIsICJ3aW5kb3dzLTEyNTIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19kZXRlY3Rvcl9yZXBsYWNlc19qdW5rX2luX2VuY29kaW5nX25hbWVfd2l0aF9yZXBsYWNlbWVudF9jaGFyYWN0ZXIoc2VsZik6CisgICAgICAgIGRldGVjdGVkID0gRW5jb2RpbmdEZXRlY3RvcigKKyAgICAgICAgICAgIGInPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLVx4ZGIiID8+JykKKyAgICAgICAgZW5jb2RpbmdzID0gbGlzdChkZXRlY3RlZC5lbmNvZGluZ3MpCisgICAgICAgIGFzc2VydCAndXRmLVxOe1JFUExBQ0VNRU5UIENIQVJBQ1RFUn0nIGluIGVuY29kaW5ncworCiAgICAgZGVmIHRlc3RfZGV0ZWN0X2h0bWw1X3N0eWxlX21ldGFfdGFnKHNlbGYpOgogCiAgICAgICAgIGZvciBkYXRhIGluICgKQEAgLTMzNyw3ICszODYsNyBAQAogICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IG5vb3AKICAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQoZG9jKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBkYW1taXQuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1Ilx1ZmZmZCIgaW4gZGFtbWl0LnVuaWNvZGVfbWFya3VwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJcdWZmZmQiIGluIGRhbW1pdC51bmljb2RlX21hcmt1cCkKIAogICAgICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoZG9jLCAiaHRtbC5wYXJzZXIiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvdXAuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykKQEAgLTM0OSwxNyArMzk4LDE3IEBACiAgICAgICAgICMgQSBkb2N1bWVudCB3cml0dGVuIGluIFVURi0xNkxFIHdpbGwgaGF2ZSBpdHMgYnl0ZSBvcmRlciBtYXJrZXIgc3RyaXBwZWQuCiAgICAgICAgIGRhdGEgPSBiJ1x4ZmZceGZlPFx4MDBhXHgwMD5ceDAwXHhlMVx4MDBceGU5XHgwMDxceDAwL1x4MDBhXHgwMD5ceDAwJwogICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KGRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8YT7DocOpPC9hPiIsIGRhbW1pdC51bmljb2RlX21hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPGE+w6HDqTwvYT4iLCBkYW1taXQudW5pY29kZV9tYXJrdXApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInV0Zi0xNmxlIiwgZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nKQogCiAgICAgZGVmIHRlc3RfZGV0d2luZ2xlKHNlbGYpOgogICAgICAgICAjIEhlcmUncyBhIFVURjggZG9jdW1lbnQuCi0gICAgICAgIHV0ZjggPSAodSJcTntTTk9XTUFOfSIgKiAzKS5lbmNvZGUoInV0ZjgiKQorICAgICAgICB1dGY4ID0gKCJcTntTTk9XTUFOfSIgKiAzKS5lbmNvZGUoInV0ZjgiKQogCiAgICAgICAgICMgSGVyZSdzIGEgV2luZG93cy0xMjUyIGRvY3VtZW50LgogICAgICAgICB3aW5kb3dzXzEyNTIgPSAoCi0gICAgICAgICAgICB1IlxOe0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLfUhpLCBJIGxpa2UgV2luZG93cyEiCi0gICAgICAgICAgICB1IlxOe1JJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSS30iKS5lbmNvZGUoIndpbmRvd3NfMTI1MiIpCisgICAgICAgICAgICAiXE57TEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUkt9SGksIEkgbGlrZSBXaW5kb3dzISIKKyAgICAgICAgICAgICJcTntSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUkt9IikuZW5jb2RlKCJ3aW5kb3dzXzEyNTIiKQogCiAgICAgICAgICMgVGhyb3VnaCBzb21lIHVuaG9seSBhbGNoZW15LCB0aGV5J3ZlIGJlZW4gc3R1Y2sgdG9nZXRoZXIuCiAgICAgICAgIGRvYyA9IHV0ZjggKyB3aW5kb3dzXzEyNTIgKyB1dGY4CkBAIC0zNzQsNyArNDIzLDcgQEAKIAogICAgICAgICBmaXhlZCA9IFVuaWNvZGVEYW1taXQuZGV0d2luZ2xlKGRvYykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHUi4piD4piD4piD4oCcSGksIEkgbGlrZSBXaW5kb3dzIeKAneKYg+KYg+KYgyIsIGZpeGVkLmRlY29kZSgidXRmOCIpKQorICAgICAgICAgICAgIuKYg+KYg+KYg+KAnEhpLCBJIGxpa2UgV2luZG93cyHigJ3imIPimIPimIMiLCBmaXhlZC5kZWNvZGUoInV0ZjgiKSkKIAogICAgIGRlZiB0ZXN0X2RldHdpbmdsZV9pZ25vcmVzX211bHRpYnl0ZV9jaGFyYWN0ZXJzKHNlbGYpOgogICAgICAgICAjIEVhY2ggb2YgdGhlc2UgY2hhcmFjdGVycyBoYXMgYSBVVEYtOCByZXByZXNlbnRhdGlvbiBlbmRpbmcKQEAgLTM4Miw5ICs0MzEsOSBAQAogICAgICAgICAjIFdpbmRvd3MtMTI1Mi4gQnV0IG91ciBjb2RlIGtub3dzIHRvIHNraXAgb3ZlciBtdWx0aWJ5dGUKICAgICAgICAgIyBVVEYtOCBjaGFyYWN0ZXJzLCBzbyB0aGV5J2xsIHN1cnZpdmUgdGhlIHByb2Nlc3MgdW5zY2F0aGVkLgogICAgICAgICBmb3IgdHJpY2t5X3VuaWNvZGVfY2hhciBpbiAoCi0gICAgICAgICAgICB1IlxOe0xBVElOIFNNQUxMIExJR0FUVVJFIE9FfSIsICMgMi1ieXRlIGNoYXIgJ1x4YzVceDkzJwotICAgICAgICAgICAgdSJcTntMQVRJTiBTVUJTQ1JJUFQgU01BTEwgTEVUVEVSIFh9IiwgIyAzLWJ5dGUgY2hhciAnXHhlMlx4ODJceDkzJwotICAgICAgICAgICAgdSJceGYwXHg5MFx4OTBceDkzIiwgIyBUaGlzIGlzIGEgQ0pLIGNoYXJhY3Rlciwgbm90IHN1cmUgd2hpY2ggb25lLgorICAgICAgICAgICAgIlxOe0xBVElOIFNNQUxMIExJR0FUVVJFIE9FfSIsICMgMi1ieXRlIGNoYXIgJ1x4YzVceDkzJworICAgICAgICAgICAgIlxOe0xBVElOIFNVQlNDUklQVCBTTUFMTCBMRVRURVIgWH0iLCAjIDMtYnl0ZSBjaGFyICdceGUyXHg4Mlx4OTMnCisgICAgICAgICAgICAiXHhmMFx4OTBceDkwXHg5MyIsICMgVGhpcyBpcyBhIENKSyBjaGFyYWN0ZXIsIG5vdCBzdXJlIHdoaWNoIG9uZS4KICAgICAgICAgICAgICk6CiAgICAgICAgICAgICBpbnB1dCA9IHRyaWNreV91bmljb2RlX2NoYXIuZW5jb2RlKCJ1dGY4IikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnB1dC5lbmRzd2l0aChiJ1x4OTMnKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF90cmVlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3RyZWUucHkKaW5kZXggZjg1MTVjMC4uNmQzZTY3ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3RyZWUucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3RyZWUucHkKQEAgLTksNiArOSw3IEBACiBtZXRob2RzIHRlc3RlZCBoZXJlLgogIiIiCiAKK2Zyb20gcGRiIGltcG9ydCBzZXRfdHJhY2UKIGltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmUKQEAgLTE5LDggKzIwLDEwIEBACiAgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyLAogKQogZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIFBZM0ssCiAgICAgQ0RhdGEsCiAgICAgQ29tbWVudCwKKyAgICBEZWNsYXJhdGlvbiwKICAgICBEb2N0eXBlLAogICAgIE5hdmlnYWJsZVN0cmluZywKICAgICBTb3VwU3RyYWluZXIsCkBAIC02Nyw4ICs3MCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZCgiYiIpLnN0cmluZywgIjIiKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV90ZXh0X2ZpbmQoc2VsZik6Ci0gICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodSc8aDE+UsOka3Ntw7ZyZ8OlczwvaDE+JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmQodGV4dD11J1LDpGtzbcO2cmfDpXMnKSwgdSdSw6Rrc23DtnJnw6VzJykKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGgxPlLDpGtzbcO2cmfDpXM8L2gxPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kKHN0cmluZz0nUsOka3Ntw7ZyZ8OlcycpLCAnUsOka3Ntw7ZyZ8OlcycpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2F0dHJpYnV0ZV9maW5kKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8aDEgaWQ9IlLDpGtzbcO2cmfDpXMiPmhlcmUgaXQgaXM8L2gxPicpCisgICAgICAgIHN0cihzb3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJoZXJlIGl0IGlzIiwgc291cC5maW5kKGlkPSdSw6Rrc23DtnJnw6VzJykudGV4dCkKKwogCiAgICAgZGVmIHRlc3RfZmluZF9ldmVyeXRoaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGFuIG9wdGltaXphdGlvbiB0aGF0IGZpbmRzIGFsbCB0YWdzLiIiIgpAQCAtODcsMTYgKzk2LDE3IEBACiAgICAgICAgICIiIllvdSBjYW4gc2VhcmNoIHRoZSB0cmVlIGZvciB0ZXh0IG5vZGVzLiIiIgogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8aHRtbD5Gb288Yj5iYXI8L2I+XHhiYjwvaHRtbD4iKQogICAgICAgICAjIEV4YWN0IG1hdGNoLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwodGV4dD0iYmFyIiksIFt1ImJhciJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwoc3RyaW5nPSJiYXIiKSwgWyJiYXIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKHRleHQ9ImJhciIpLCBbImJhciJdKQogICAgICAgICAjIE1hdGNoIGFueSBvZiBhIG51bWJlciBvZiBzdHJpbmdzLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgc291cC5maW5kX2FsbCh0ZXh0PVsiRm9vIiwgImJhciJdKSwgW3UiRm9vIiwgdSJiYXIiXSkKKyAgICAgICAgICAgIHNvdXAuZmluZF9hbGwodGV4dD1bIkZvbyIsICJiYXIiXSksIFsiRm9vIiwgImJhciJdKQogICAgICAgICAjIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwodGV4dD1yZS5jb21waWxlKCcuKicpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbdSJGb28iLCB1ImJhciIsIHUnXHhiYiddKQorICAgICAgICAgICAgICAgICAgICAgICAgIFsiRm9vIiwgImJhciIsICdceGJiJ10pCiAgICAgICAgICMgTWF0Y2ggYW55dGhpbmcuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kX2FsbCh0ZXh0PVRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt1IkZvbyIsIHUiYmFyIiwgdSdceGJiJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgWyJGb28iLCAiYmFyIiwgJ1x4YmInXSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2xpbWl0KHNlbGYpOgogICAgICAgICAiIiJZb3UgY2FuIGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgYnkgZmluZF9hbGwuIiIiCkBAIC0yMjcsOCArMjM3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWF0Y2hpbmcgYS4iLCAiTWF0Y2hpbmcgYi4iXSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X3V0ZjhfYXR0cmlidXRlX3ZhbHVlKHNlbGYpOgotICAgICAgICBwZWFjZSA9IHUi153Xldec16kiLmVuY29kZSgidXRmOCIpCi0gICAgICAgIGRhdGEgPSB1JzxhIHRpdGxlPSLXndeV15zXqSI+PC9hPicuZW5jb2RlKCJ1dGY4IikKKyAgICAgICAgcGVhY2UgPSAi153Xldec16kiLmVuY29kZSgidXRmOCIpCisgICAgICAgIGRhdGEgPSAnPGEgdGl0bGU9Ited15XXnNepIj48L2E+Jy5lbmNvZGUoInV0ZjgiKQogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3NvdXAuYV0sIHNvdXAuZmluZF9hbGwodGl0bGU9cGVhY2UpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzb3VwLmFdLCBzb3VwLmZpbmRfYWxsKHRpdGxlPXBlYWNlLmRlY29kZSgidXRmOCIpKSkKQEAgLTY4OCw3ICs2OTgsNyBAQAogCiAgICAgZGVmIHRlc3RfdGFnX2luaGVyaXRzX3NlbGZfY2xvc2luZ19ydWxlc19mcm9tX2J1aWxkZXIoc2VsZik6CiAgICAgICAgIGlmIFhNTF9CVUlMREVSX1BSRVNFTlQ6Ci0gICAgICAgICAgICB4bWxfc291cCA9IEJlYXV0aWZ1bFNvdXAoIiIsICJ4bWwiKQorICAgICAgICAgICAgeG1sX3NvdXAgPSBCZWF1dGlmdWxTb3VwKCIiLCAibHhtbC14bWwiKQogICAgICAgICAgICAgeG1sX2JyID0geG1sX3NvdXAubmV3X3RhZygiYnIiKQogICAgICAgICAgICAgeG1sX3AgPSB4bWxfc291cC5uZXdfdGFnKCJwIikKIApAQCAtNjk3LDcgKzcwNyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPGJyLz4iLCB4bWxfYnIuZW5jb2RlKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPHAvPiIsIHhtbF9wLmVuY29kZSgpKQogCi0gICAgICAgIGh0bWxfc291cCA9IEJlYXV0aWZ1bFNvdXAoIiIsICJodG1sIikKKyAgICAgICAgaHRtbF9zb3VwID0gQmVhdXRpZnVsU291cCgiIiwgImh0bWwucGFyc2VyIikKICAgICAgICAgaHRtbF9iciA9IGh0bWxfc291cC5uZXdfdGFnKCJiciIpCiAgICAgICAgIGh0bWxfcCA9IGh0bWxfc291cC5uZXdfdGFnKCJwIikKIApAQCAtNzczLDYgKzc4MywxNCBAQAogICAgICAgICBuZXdfYSA9IGEudW53cmFwKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBuZXdfYSkKIAorICAgIGRlZiB0ZXN0X3JlcGxhY2Vfd2l0aF9hbmRfdW53cmFwX2dpdmVfdXNlZnVsX2V4Y2VwdGlvbl93aGVuX3RhZ19oYXNfbm9fcGFyZW50KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj5Gb288L2I+PC9hPjxjPkJhcjwvYz4iKQorICAgICAgICBhID0gc291cC5hCisgICAgICAgIGEuZXh0cmFjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgYS5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEudW53cmFwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLnJlcGxhY2Vfd2l0aCwgc291cC5jKQorCiAgICAgZGVmIHRlc3RfcmVwbGFjZV90YWdfd2l0aF9pdHNlbGYoc2VsZik6CiAgICAgICAgIHRleHQgPSAiPGE+PGI+PC9iPjxjPkZvbzxkPjwvZD48L2M+PC9hPjxhPjxlPjwvZT48L2E+IgogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCkBAIC0xMDY3LDYgKzEwODUsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29fMiwgc291cC5hLnN0cmluZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXJfMiwgc291cC5iLnN0cmluZykKIAorICAgIGRlZiB0ZXN0X2V4dHJhY3RfbXVsdGlwbGVzX29mX3NhbWVfdGFnKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiIgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+Zm9vPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyA8c2NyaXB0PmJhcjwvc2NyaXB0PgorIDxhPjwvYT4KKzwvYm9keT4KKzxzY3JpcHQ+YmF6PC9zY3JpcHQ+Cis8L2h0bWw+IiIiKQorICAgICAgICBbc291cC5zY3JpcHQuZXh0cmFjdCgpIGZvciBpIGluIHNvdXAuZmluZF9hbGwoInNjcmlwdCIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8Ym9keT5cblxuPGE+PC9hPlxuPC9ib2R5PiIsIHN0cihzb3VwLmJvZHkpKQorCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X3dvcmtzX3doZW5fZWxlbWVudF9pc19zdXJyb3VuZGVkX2J5X2lkZW50aWNhbF9zdHJpbmdzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKAorICc8aHRtbD5cbicKKyAnPGJvZHk+aGk8L2JvZHk+XG4nCisgJzwvaHRtbD4nKQorICAgICAgICBzb3VwLmZpbmQoJ2JvZHknKS5leHRyYWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzb3VwLmZpbmQoJ2JvZHknKSkKKworCiAgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CiAgICAgICAgICIiIlRhZy5jbGVhcigpIiIiCiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxwPjxhPlN0cmluZyA8ZW0+SXRhbGljaXplZDwvZW0+PC9hPiBhbmQgYW5vdGhlcjwvcD4iKQpAQCAtMTI4NywyNyArMTMzMCw3MiBAQAogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9waWNrbGUoc2VsZik6CiAgICAgICAgICMgQSB0cmVlIGNvbnRhaW5pbmcgVW5pY29kZSBjaGFyYWN0ZXJzIGNhbiBiZSBwaWNrbGVkLgotICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIGh0bWwgPSAiPGI+XE57U05PV01BTn08L2I+IgogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCiAgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyhzb3VwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKICAgICAgICAgbG9hZGVkID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZGVjb2RlKCksIHNvdXAuZGVjb2RlKCkpCiAKKyAgICBkZWYgdGVzdF9jb3B5X25hdmlnYWJsZXN0cmluZ19pc19ub3RfYXR0YWNoZWRfdG9fdHJlZShzZWxmKToKKyAgICAgICAgaHRtbCA9ICI8Yj5Gb288YT48L2E+PC9iPjxiPkJhcjwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgczEgPSBzb3VwLmZpbmQoc3RyaW5nPSJGb28iKQorICAgICAgICBzMiA9IGNvcHkuY29weShzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgczIucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHMyLm5leHRfZWxlbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChOb25lLCBzMS5uZXh0X3NpYmxpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgczIubmV4dF9zaWJsaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHMyLnByZXZpb3VzX2VsZW1lbnQpCisKKyAgICBkZWYgdGVzdF9jb3B5X25hdmlnYWJsZXN0cmluZ19zdWJjbGFzc19oYXNfc2FtZV90eXBlKHNlbGYpOgorICAgICAgICBodG1sID0gIjxiPjwhLS1Gb28tLT48L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHMxID0gc291cC5zdHJpbmcKKyAgICAgICAgczIgPSBjb3B5LmNvcHkoczEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzMiwgQ29tbWVudCkpCisKKyAgICBkZWYgdGVzdF9jb3B5X2VudGlyZV9zb3VwKHNlbGYpOgorICAgICAgICBodG1sID0gIjxkaXY+PGI+Rm9vPGE+PC9hPjwvYj48Yj5CYXI8L2I+PC9kaXY+ZW5kIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNvdXBfY29weSA9IGNvcHkuY29weShzb3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAsIHNvdXBfY29weSkKKworICAgIGRlZiB0ZXN0X2NvcHlfdGFnX2NvcGllc19jb250ZW50cyhzZWxmKToKKyAgICAgICAgaHRtbCA9ICI8ZGl2PjxiPkZvbzxhPjwvYT48L2I+PGI+QmFyPC9iPjwvZGl2PmVuZCIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBkaXYgPSBzb3VwLmRpdgorICAgICAgICBkaXZfY29weSA9IGNvcHkuY29weShkaXYpCisKKyAgICAgICAgIyBUaGUgdHdvIHRhZ3MgbG9vayB0aGUgc2FtZSwgYW5kIGV2YWx1YXRlIHRvIGVxdWFsLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkaXYpLCBzdHIoZGl2X2NvcHkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdiwgZGl2X2NvcHkpCisKKyAgICAgICAgIyBCdXQgdGhleSdyZSBub3QgdGhlIHNhbWUgb2JqZWN0LgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRpdiBpcyBkaXZfY29weSkKKworICAgICAgICAjIEFuZCB0aGV5IGRvbid0IGhhdmUgdGhlIHNhbWUgcmVsYXRpb24gdG8gdGhlIHBhcnNlIHRyZWUuIFRoZQorICAgICAgICAjIGNvcHkgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnNlIHRyZWUgYXQgYWxsLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGRpdl9jb3B5LnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBkaXZfY29weS5wcmV2aW91c19lbGVtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGRpdl9jb3B5LmZpbmQoc3RyaW5nPSdCYXInKS5uZXh0X2VsZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoTm9uZSwgZGl2LmZpbmQoc3RyaW5nPSdCYXInKS5uZXh0X2VsZW1lbnQpCiAKIGNsYXNzIFRlc3RTdWJzdGl0dXRpb25zKFNvdXBUZXN0KToKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfZm9ybWF0dGVyX2lzX21pbmltYWwoc2VsZik6Ci0gICAgICAgIG1hcmt1cCA9IHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCisgICAgICAgIG1hcmt1cCA9ICI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKICAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCiAgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Im1pbmltYWwiKQogICAgICAgICAjIFRoZSA8IGlzIGNvbnZlcnRlZCBiYWNrIGludG8gJmx0OyBidXQgdGhlIGUtd2l0aC1hY3V0ZSBpcyBsZWZ0IGFsb25lLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZGVjb2RlZCwKICAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKAotICAgICAgICAgICAgICAgIHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKKyAgICAgICAgICAgICAgICAiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9odG1sKHNlbGYpOgotICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBtYXJrdXAgPSAiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQogICAgICAgICBkZWNvZGVkID0gc291cC5kZWNvZGUoZm9ybWF0dGVyPSJodG1sIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTEzMTUsNDkgKzE0MDMsNDkgQEAKICAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKCI8Yj4mbHQ7Jmx0O1NhY3ImZWFjdXRlOyBibGV1ISZndDsmZ3Q7PC9iPiIpKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0dGVyX21pbmltYWwoc2VsZik6Ci0gICAgICAgIG1hcmt1cCA9IHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCisgICAgICAgIG1hcmt1cCA9ICI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKICAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCiAgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Im1pbmltYWwiKQogICAgICAgICAjIFRoZSA8IGlzIGNvbnZlcnRlZCBiYWNrIGludG8gJmx0OyBidXQgdGhlIGUtd2l0aC1hY3V0ZSBpcyBsZWZ0IGFsb25lLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZGVjb2RlZCwKICAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKAotICAgICAgICAgICAgICAgIHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKKyAgICAgICAgICAgICAgICAiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9udWxsKHNlbGYpOgotICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBtYXJrdXAgPSAiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQogICAgICAgICBkZWNvZGVkID0gc291cC5kZWNvZGUoZm9ybWF0dGVyPU5vbmUpCiAgICAgICAgICMgTmVpdGhlciB0aGUgYW5nbGUgYnJhY2tldHMgbm9yIHRoZSBlLXdpdGgtYWN1dGUgYXJlIGNvbnZlcnRlZC4KICAgICAgICAgIyBUaGlzIGlzIG5vdCB2YWxpZCBIVE1MLCBidXQgaXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2Zvcih1IjxiPjw8U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPj48L2I+IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKCI8Yj48PFNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1IT4+PC9iPiIpKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0dGVyX2N1c3RvbShzZWxmKToKLSAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Zm9vJmd0OzwvYj48Yj5iYXI8L2I+IgorICAgICAgICBtYXJrdXAgPSAiPGI+Jmx0O2ZvbyZndDs8L2I+PGI+YmFyPC9iPiIKICAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCiAgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXIgPSBsYW1iZGEgeDogeC51cHBlcigpKQogICAgICAgICAjIEluc3RlYWQgb2Ygbm9ybWFsIGVudGl0eSBjb252ZXJzaW9uIGNvZGUsIHRoZSBjdXN0b20KICAgICAgICAgIyBjYWxsYWJsZSBpcyBjYWxsZWQgb24gZXZlcnkgc3RyaW5nLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZGVjb2RlZCwKLSAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKHUiPGI+PEZPTz48L2I+PGI+QkFSPC9iPiIpKQorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IoIjxiPjxGT08+PC9iPjxiPkJBUjwvYj4iKSkKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9pc19ydW5fb25fYXR0cmlidXRlX3ZhbHVlcyhzZWxmKToKLSAgICAgICAgbWFya3VwID0gdSc8YSBocmVmPSJodHRwOi8vYS5jb20/YT1iJmM9w6kiPmU8L2E+JworICAgICAgICBtYXJrdXAgPSAnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZjPcOpIj5lPC9hPicKICAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCiAgICAgICAgIGEgPSBzb3VwLmEKIAotICAgICAgICBleHBlY3RfbWluaW1hbCA9IHUnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZhbXA7Yz3DqSI+ZTwvYT4nCisgICAgICAgIGV4cGVjdF9taW5pbWFsID0gJzxhIGhyZWY9Imh0dHA6Ly9hLmNvbT9hPWImYW1wO2M9w6kiPmU8L2E+JwogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X21pbmltYWwsIGEuZGVjb2RlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X21pbmltYWwsIGEuZGVjb2RlKGZvcm1hdHRlcj0ibWluaW1hbCIpKQogCi0gICAgICAgIGV4cGVjdF9odG1sID0gdSc8YSBocmVmPSJodHRwOi8vYS5jb20/YT1iJmFtcDtjPSZlYWN1dGU7Ij5lPC9hPicKKyAgICAgICAgZXhwZWN0X2h0bWwgPSAnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZhbXA7Yz0mZWFjdXRlOyI+ZTwvYT4nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X2h0bWwsIGEuZGVjb2RlKGZvcm1hdHRlcj0iaHRtbCIpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFya3VwLCBhLmRlY29kZShmb3JtYXR0ZXI9Tm9uZSkpCi0gICAgICAgIGV4cGVjdF91cHBlciA9IHUnPGEgaHJlZj0iSFRUUDovL0EuQ09NP0E9QiZDPcOJIj5FPC9hPicKKyAgICAgICAgZXhwZWN0X3VwcGVyID0gJzxhIGhyZWY9IkhUVFA6Ly9BLkNPTT9BPUImQz3DiSI+RTwvYT4nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X3VwcGVyLCBhLmRlY29kZShmb3JtYXR0ZXI9bGFtYmRhIHg6IHgudXBwZXIoKSkpCiAKICAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfc2tpcHNfc2NyaXB0X3RhZ19mb3JfaHRtbF9kb2N1bWVudHMoc2VsZik6CkBAIC0xMzY2LDcgKzE0NTQsNyBAQAogICAgY29uc29sZS5sb2coIjwgPCBoZXkgPiA+ICIpOwogICA8L3NjcmlwdD4KICIiIgotICAgICAgICBlbmNvZGVkID0gQmVhdXRpZnVsU291cChkb2MpLmVuY29kZSgpCisgICAgICAgIGVuY29kZWQgPSBCZWF1dGlmdWxTb3VwKGRvYywgJ2h0bWwucGFyc2VyJykuZW5jb2RlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiPCA8IGhleSA+ID4iIGluIGVuY29kZWQpCiAKICAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfc2tpcHNfc3R5bGVfdGFnX2Zvcl9odG1sX2RvY3VtZW50cyhzZWxmKToKQEAgLTEzNzUsNyArMTQ2Myw3IEBACiAgICBjb25zb2xlLmxvZygiPCA8IGhleSA+ID4gIik7CiAgIDwvc3R5bGU+CiAiIiIKLSAgICAgICAgZW5jb2RlZCA9IEJlYXV0aWZ1bFNvdXAoZG9jKS5lbmNvZGUoKQorICAgICAgICBlbmNvZGVkID0gQmVhdXRpZnVsU291cChkb2MsICdodG1sLnBhcnNlcicpLmVuY29kZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIjwgPCBoZXkgPiA+IiBpbiBlbmNvZGVkKQogCiAgICAgZGVmIHRlc3RfcHJldHRpZnlfbGVhdmVzX3ByZWZvcm1hdHRlZF90ZXh0X2Fsb25lKHNlbGYpOgpAQCAtMTM4MywyNCArMTQ3MSwyNCBAQAogICAgICAgICAjIEV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGUgPHByZT4gdGFnIGlzIHJlZm9ybWF0dGVkLCBidXQgZXZlcnl0aGluZwogICAgICAgICAjIGluc2lkZSBpcyBsZWZ0IGFsb25lLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgdSc8ZGl2PlxuIGZvb1xuIDxwcmU+ICBcdGJhclxuICBcbiAgPC9wcmU+XG4gYmF6XG48L2Rpdj4nLAorICAgICAgICAgICAgJzxkaXY+XG4gZm9vXG4gPHByZT4gIFx0YmFyXG4gIFxuICA8L3ByZT5cbiBiYXpcbjwvZGl2PicsCiAgICAgICAgICAgICBzb3VwLmRpdi5wcmV0dGlmeSgpKQogCiAgICAgZGVmIHRlc3RfcHJldHRpZnlfYWNjZXB0c19mb3JtYXR0ZXIoc2VsZik6Ci0gICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKCI8aHRtbD48Ym9keT5mb288L2JvZHk+PC9odG1sPiIpCisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKCI8aHRtbD48Ym9keT5mb288L2JvZHk+PC9odG1sPiIsICdodG1sLnBhcnNlcicpCiAgICAgICAgIHByZXR0eSA9IHNvdXAucHJldHRpZnkoZm9ybWF0dGVyID0gbGFtYmRhIHg6IHgudXBwZXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJGT08iIGluIHByZXR0eSkKIAogICAgIGRlZiB0ZXN0X3ByZXR0aWZ5X291dHB1dHNfdW5pY29kZV9ieV9kZWZhdWx0KHNlbGYpOgogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlLCB0eXBlKHNvdXAucHJldHRpZnkoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyLCB0eXBlKHNvdXAucHJldHRpZnkoKSkpCiAKICAgICBkZWYgdGVzdF9wcmV0dGlmeV9jYW5fZW5jb2RlX2RhdGEoc2VsZik6CiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzLCB0eXBlKHNvdXAucHJldHRpZnkoInV0Zi04IikpKQogCiAgICAgZGVmIHRlc3RfaHRtbF9lbnRpdHlfc3Vic3RpdHV0aW9uX29mZl9ieV9kZWZhdWx0KHNlbGYpOgotICAgICAgICBtYXJrdXAgPSB1IjxiPlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvYj4iCisgICAgICAgIG1hcmt1cCA9ICI8Yj5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L2I+IgogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKICAgICAgICAgZW5jb2RlZCA9IHNvdXAuYi5lbmNvZGUoInV0Zi04IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVkLCBtYXJrdXAuZW5jb2RlKCd1dGYtOCcpKQpAQCAtMTQ0NCw0NSArMTUzMiw1MyBAQAogICAgICIiIlRlc3QgdGhlIGFiaWxpdHkgdG8gZW5jb2RlIG9iamVjdHMgaW50byBzdHJpbmdzLiIiIgogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9zdHJpbmdfY2FuX2JlX2VuY29kZWQoc2VsZik6Ci0gICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgaHRtbCA9ICI8Yj5cTntTTk9XTUFOfTwvYj4iCiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuc3RyaW5nLmVuY29kZSgidXRmLTgiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdSJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAiXE57U05PV01BTn0iLmVuY29kZSgidXRmLTgiKSkKIAogICAgIGRlZiB0ZXN0X3RhZ19jb250YWluaW5nX3VuaWNvZGVfc3RyaW5nX2Nhbl9iZV9lbmNvZGVkKHNlbGYpOgotICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIGh0bWwgPSAiPGI+XE57U05PV01BTn08L2I+IgogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzb3VwLmIuZW5jb2RlKCJ1dGYtOCIpLCBodG1sLmVuY29kZSgidXRmLTgiKSkKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nX3N1YnN0aXR1dGVzX3VucmVjb2duaXplZF9jaGFyYWN0ZXJzX2J5X2RlZmF1bHQoc2VsZik6Ci0gICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgaHRtbCA9ICI8Yj5cTntTTk9XTUFOfTwvYj4iCiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuZW5jb2RlKCJhc2NpaSIpLCBiIjxiPiYjOTczMTs8L2I+IikKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nX2Nhbl9iZV9tYWRlX3N0cmljdChzZWxmKToKLSAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBodG1sID0gIjxiPlxOe1NOT1dNQU59PC9iPiIKICAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwgc291cC5lbmNvZGUsICJhc2NpaSIsIGVycm9ycz0ic3RyaWN0IikKIAogICAgIGRlZiB0ZXN0X2RlY29kZV9jb250ZW50cyhzZWxmKToKLSAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBodG1sID0gIjxiPlxOe1NOT1dNQU59PC9iPiIKICAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXE57U05PV01BTn0iLCBzb3VwLmIuZGVjb2RlX2NvbnRlbnRzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlxOe1NOT1dNQU59Iiwgc291cC5iLmRlY29kZV9jb250ZW50cygpKQogCiAgICAgZGVmIHRlc3RfZW5jb2RlX2NvbnRlbnRzKHNlbGYpOgotICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIGh0bWwgPSAiPGI+XE57U05PV01BTn08L2I+IgogICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICB1IlxOe1NOT1dNQU59Ii5lbmNvZGUoInV0ZjgiKSwgc291cC5iLmVuY29kZV9jb250ZW50cygKKyAgICAgICAgICAgICJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGY4IiksIHNvdXAuYi5lbmNvZGVfY29udGVudHMoCiAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0ZjgiKSkKIAogICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfcmVuZGVyQ29udGVudHMoc2VsZik6Ci0gICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgaHRtbCA9ICI8Yj5cTntTTk9XTUFOfTwvYj4iCiAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHUiXE57U05PV01BTn0iLmVuY29kZSgidXRmOCIpLCBzb3VwLmIucmVuZGVyQ29udGVudHMoKSkKKyAgICAgICAgICAgICJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGY4IiksIHNvdXAuYi5yZW5kZXJDb250ZW50cygpKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgaHRtbCA9ICI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgaWYgUFkzSzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbCwgcmVwcihzb3VwKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYic8Yj5cXHUyNjAzPC9iPicsIHJlcHIoc291cCkpCiAKIGNsYXNzIFRlc3ROYXZpZ2FibGVTdHJpbmdTdWJjbGFzc2VzKFNvdXBUZXN0KToKIApAQCAtMTUyMiw2ICsxNjE4LDkgQEAKICAgICAgICAgc291cC5pbnNlcnQoMSwgZG9jdHlwZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmVuY29kZSgpLCBiIjwhRE9DVFlQRSBmb28+XG4iKQogCisgICAgZGVmIHRlc3RfZGVjbGFyYXRpb24oc2VsZik6CisgICAgICAgIGQgPSBEZWNsYXJhdGlvbigiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPD9mb28/PiIsIGQub3V0cHV0X3JlYWR5KCkpCiAKIGNsYXNzIFRlc3RTb3VwU2VsZWN0b3IoVHJlZVRlc3QpOgogCkBAIC0xNTM0LDcgKzE2MzMsNyBAQAogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJibGFoLmNzcyIgdHlwZT0idGV4dC9jc3MiIGlkPSJsMSI+CiA8L2hlYWQ+CiA8Ym9keT4KLQorPGN1c3RvbS1kYXNoZWQtdGFnIGNsYXNzPSJkYXNoZWQiIGlkPSJkYXNoMSI+SGVsbG8gdGhlcmUuPC9jdXN0b20tZGFzaGVkLXRhZz4KIDxkaXYgaWQ9Im1haW4iIGNsYXNzPSJmYW5jeSI+CiA8ZGl2IGlkPSJpbm5lciI+CiA8aDEgaWQ9ImhlYWRlcjEiPkFuIEgxPC9oMT4KQEAgLTE1NTIsOCArMTY1MSwxOCBAQAogPGEgaHJlZj0iIyIgaWQ9InMyYTEiPnNwYW4yYTE8L2E+CiA8L3NwYW4+CiA8c3BhbiBjbGFzcz0ic3BhbjMiPjwvc3Bhbj4KKzxjdXN0b20tZGFzaGVkLXRhZyBjbGFzcz0iZGFzaGVkIiBpZD0iZGFzaDIiLz4KKzxkaXYgZGF0YS10YWc9ImRhc2hlZHZhbHVlIiBpZD0iZGF0YTEiLz4KIDwvc3Bhbj4KIDwvZGl2PgorPHggaWQ9InhpZCI+Cis8eiBpZD0iemlkYSIvPgorPHogaWQ9InppZGFiIi8+Cis8eiBpZD0iemlkYWMiLz4KKzwveD4KKzx5IGlkPSJ5aWQiPgorPHogaWQ9InppZGIiLz4KKzwveT4KIDxwIGxhbmc9ImVuIiBpZD0ibGFuZy1lbiI+RW5nbGlzaDwvcD4KIDxwIGxhbmc9ImVuLWdiIiBpZD0ibGFuZy1lbi1nYiI+RW5nbGlzaCBVSzwvcD4KIDxwIGxhbmc9ImVuLXVzIiBpZD0ibGFuZy1lbi11cyI+RW5nbGlzaCBVUzwvcD4KQEAgLTE1NjUsNyArMTY3NCw3IEBACiAiIiIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5zb3VwID0gQmVhdXRpZnVsU291cChzZWxmLkhUTUwpCisgICAgICAgIHNlbGYuc291cCA9IEJlYXV0aWZ1bFNvdXAoc2VsZi5IVE1MLCAnaHRtbC5wYXJzZXInKQogCiAgICAgZGVmIGFzc2VydFNlbGVjdHMoc2VsZiwgc2VsZWN0b3IsIGV4cGVjdGVkX2lkcyk6CiAgICAgICAgIGVsX2lkcyA9IFtlbFsnaWQnXSBmb3IgZWwgaW4gc2VsZi5zb3VwLnNlbGVjdChzZWxlY3RvcildCkBAIC0xNTg3LDIxICsxNjk2LDI5IEBACiAgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ3RpdGxlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0ubmFtZSwgJ3RpdGxlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0uY29udGVudHMsIFt1J1RoZSB0aXRsZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5jb250ZW50cywgWydUaGUgdGl0bGUnXSkKIAogICAgIGRlZiB0ZXN0X29uZV90YWdfbWFueShzZWxmKToKICAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgNCkKICAgICAgICAgZm9yIGRpdiBpbiBlbHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdi5uYW1lLCAnZGl2JykKIAorICAgICAgICBlbCA9IHNlbGYuc291cC5zZWxlY3Rfb25lKCdkaXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdtYWluJywgZWxbJ2lkJ10pCisKKyAgICBkZWYgdGVzdF9zZWxlY3Rfb25lX3JldHVybnNfbm9uZV9pZl9ub19tYXRjaChzZWxmKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnNvdXAuc2VsZWN0X29uZSgnbm9uZXhpc3RlbnR0YWcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIG1hdGNoKQorCisKICAgICBkZWYgdGVzdF90YWdfaW5fdGFnX29uZShzZWxmKToKICAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2IGRpdicpCi0gICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnZGl2IGRpdicsIFsnaW5uZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCdkaXYgZGl2JywgWydpbm5lcicsICdkYXRhMSddKQogCiAgICAgZGVmIHRlc3RfdGFnX2luX3RhZ19tYW55KHNlbGYpOgogICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCdodG1sIGRpdicsICdodG1sIGJvZHkgZGl2JywgJ2JvZHkgZGl2Jyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsnbWFpbicsICdpbm5lcicsICdmb290ZXInXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxlY3RvciwgWydkYXRhMScsICdtYWluJywgJ2lubmVyJywgJ2Zvb3RlciddKQogCiAgICAgZGVmIHRlc3RfdGFnX25vX21hdGNoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnNvdXAuc2VsZWN0KCdkZWwnKSksIDApCkBAIC0xNjA5LDYgKzE3MjYsMjAgQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX3RhZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zb3VwLnNlbGVjdCwgJ3RhZyV0JykKIAorICAgIGRlZiB0ZXN0X3NlbGVjdF9kYXNoZWRfdGFnX2lkcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCdjdXN0b20tZGFzaGVkLXRhZycsIFsnZGFzaDEnLCAnZGFzaDInXSkKKworICAgIGRlZiB0ZXN0X3NlbGVjdF9kYXNoZWRfYnlfaWQoc2VsZik6CisgICAgICAgIGRhc2hlZCA9IHNlbGYuc291cC5zZWxlY3QoJ2N1c3RvbS1kYXNoZWQtdGFnW2lkPVwiZGFzaDJcIl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhc2hlZFswXS5uYW1lLCAnY3VzdG9tLWRhc2hlZC10YWcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhc2hlZFswXVsnaWQnXSwgJ2Rhc2gyJykKKworICAgIGRlZiB0ZXN0X2Rhc2hlZF90YWdfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvdXAuc2VsZWN0KCdib2R5ID4gY3VzdG9tLWRhc2hlZC10YWcnKVswXS50ZXh0LCAnSGVsbG8gdGhlcmUuJykKKworICAgIGRlZiB0ZXN0X3NlbGVjdF9kYXNoZWRfbWF0Y2hlc19maW5kX2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvdXAuc2VsZWN0KCdjdXN0b20tZGFzaGVkLXRhZycpLCBzZWxmLnNvdXAuZmluZF9hbGwoJ2N1c3RvbS1kYXNoZWQtdGFnJykpCisKICAgICBkZWYgdGVzdF9oZWFkZXJfdGFncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKICAgICAgICAgICAgICgnaDEnLCBbJ2hlYWRlcjEnXSksCkBAIC0xNzA5LDYgKzE4NDAsNyBAQAogICAgICAgICAgICAgKCdbaWRePSJtIl0nLCBbJ21lJywgJ21haW4nXSksCiAgICAgICAgICAgICAoJ2RpdltpZF49Im0iXScsIFsnbWFpbiddKSwKICAgICAgICAgICAgICgnYVtpZF49Im0iXScsIFsnbWUnXSksCisgICAgICAgICAgICAoJ2RpdltkYXRhLXRhZ149ImRhc2hlZCJdJywgWydkYXRhMSddKQogICAgICAgICApCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZW5kc3dpdGgoc2VsZik6CkBAIC0xNzE2LDggKzE4NDgsOCBAQAogICAgICAgICAgICAgKCdbaHJlZiQ9Ii5jc3MiXScsIFsnbDEnXSksCiAgICAgICAgICAgICAoJ2xpbmtbaHJlZiQ9Ii5jc3MiXScsIFsnbDEnXSksCiAgICAgICAgICAgICAoJ2xpbmtbaWQkPSIxIl0nLCBbJ2wxJ10pLAotICAgICAgICAgICAgKCdbaWQkPSIxIl0nLCBbJ2wxJywgJ3AxJywgJ2hlYWRlcjEnLCAnczFhMScsICdzMmExJywgJ3MxYTJzMSddKSwKLSAgICAgICAgICAgICgnZGl2W2lkJD0iMSJdJywgW10pLAorICAgICAgICAgICAgKCdbaWQkPSIxIl0nLCBbJ2RhdGExJywgJ2wxJywgJ3AxJywgJ2hlYWRlcjEnLCAnczFhMScsICdzMmExJywgJ3MxYTJzMScsICdkYXNoMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkJD0iMSJdJywgWydkYXRhMSddKSwKICAgICAgICAgICAgICgnW2lkJD0ibm9lbmRpbmciXScsIFtdKSwKICAgICAgICAgKQogCkBAIC0xNzMwLDcgKzE4NjIsNiBAQAogICAgICAgICAgICAgKCdbcmVsKj0ibm90c3R5bGUiXScsIFtdKSwKICAgICAgICAgICAgICgnbGlua1tyZWwqPSJub3RzdHlsZSJdJywgW10pLAogICAgICAgICAgICAgKCdsaW5rW2hyZWYqPSJibGEiXScsIFsnbDEnXSksCi0gICAgICAgICAgICAoJ2FbaHJlZio9Imh0dHA6Ly8iXScsIFsnYm9iJywgJ21lJ10pLAogICAgICAgICAgICAgKCdbaHJlZio9Imh0dHA6Ly8iXScsIFsnYm9iJywgJ21lJ10pLAogICAgICAgICAgICAgKCdbaWQqPSJwIl0nLCBbJ3BtdWx0aScsICdwMSddKSwKICAgICAgICAgICAgICgnZGl2W2lkKj0ibSJdJywgWydtYWluJ10pLApAQCAtMTczOSw4ICsxODcwLDggQEAKICAgICAgICAgICAgICgnW2hyZWYqPSIuY3NzIl0nLCBbJ2wxJ10pLAogICAgICAgICAgICAgKCdsaW5rW2hyZWYqPSIuY3NzIl0nLCBbJ2wxJ10pLAogICAgICAgICAgICAgKCdsaW5rW2lkKj0iMSJdJywgWydsMSddKSwKLSAgICAgICAgICAgICgnW2lkKj0iMSJdJywgWydsMScsICdwMScsICdoZWFkZXIxJywgJ3MxYTEnLCAnczFhMicsICdzMmExJywgJ3MxYTJzMSddKSwKLSAgICAgICAgICAgICgnZGl2W2lkKj0iMSJdJywgW10pLAorICAgICAgICAgICAgKCdbaWQqPSIxIl0nLCBbJ2RhdGExJywgJ2wxJywgJ3AxJywgJ2hlYWRlcjEnLCAnczFhMScsICdzMWEyJywgJ3MyYTEnLCAnczFhMnMxJywgJ2Rhc2gxJ10pLAorICAgICAgICAgICAgKCdkaXZbaWQqPSIxIl0nLCBbJ2RhdGExJ10pLAogICAgICAgICAgICAgKCdbaWQqPSJub2VuZGluZyJdJywgW10pLAogICAgICAgICAgICAgIyBOZXcgZm9yIHRoaXMgdGVzdAogICAgICAgICAgICAgKCdbaHJlZio9Ii4iXScsIFsnYm9iJywgJ21lJywgJ2wxJ10pLApAQCAtMTc0OCw2ICsxODc5LDcgQEAKICAgICAgICAgICAgICgnbGlua1tocmVmKj0iLiJdJywgWydsMSddKSwKICAgICAgICAgICAgICgnZGl2W2lkKj0ibiJdJywgWydtYWluJywgJ2lubmVyJ10pLAogICAgICAgICAgICAgKCdkaXZbaWQqPSJubiJdJywgWydpbm5lciddKSwKKyAgICAgICAgICAgICgnZGl2W2RhdGEtdGFnKj0iZWR2YWwiXScsIFsnZGF0YTEnXSkKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX2V4YWN0X29yX2h5cGVuKHNlbGYpOgpAQCAtMTc2NywxOCArMTg5OSwyNyBAQAogICAgICAgICAgICAgKCdwW2NsYXNzXScsIFsncDEnLCAncG11bHRpJ10pLAogICAgICAgICAgICAgKCdbYmxhaF0nLCBbXSksCiAgICAgICAgICAgICAoJ3BbYmxhaF0nLCBbXSksCisgICAgICAgICAgICAoJ2RpdltkYXRhLXRhZ10nLCBbJ2RhdGExJ10pCiAgICAgICAgICkKIAorICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX3BzZXVkb2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYuc291cC5zZWxlY3QsICJhOm5vLXN1Y2gtcHNldWRvY2xhc3MiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5zb3VwLnNlbGVjdCwgImE6bnRoLW9mLXR5cGUoYSkiKQorCisKICAgICBkZWYgdGVzdF9udGhfb2ZfdHlwZShzZWxmKToKICAgICAgICAgIyBUcnkgdG8gc2VsZWN0IGZpcnN0IHBhcmFncmFwaAogICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgcDpudGgtb2YtdHlwZSgxKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLnN0cmluZywgdSdTb21lIHRleHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5zdHJpbmcsICdTb21lIHRleHQnKQogCiAgICAgICAgICMgVHJ5IHRvIHNlbGVjdCB0aGlyZCBwYXJhZ3JhcGgKICAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2I2lubmVyIHA6bnRoLW9mLXR5cGUoMyknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5zdHJpbmcsIHUnQW5vdGhlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLnN0cmluZywgJ0Fub3RoZXInKQogCiAgICAgICAgICMgVHJ5IHRvIHNlbGVjdCAobm9uLWV4aXN0ZW50ISkgZm91cnRoIHBhcmFncmFwaAogICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgcDpudGgtb2YtdHlwZSg0KScpCkBAIC0xNzkxLDcgKzE5MzIsNyBAQAogICAgIGRlZiB0ZXN0X250aF9vZl90eXBlX2RpcmVjdF9kZXNjZW5kYW50KHNlbGYpOgogICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgPiBwOm50aC1vZi10eXBlKDEpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0uc3RyaW5nLCB1J1NvbWUgdGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLnN0cmluZywgJ1NvbWUgdGV4dCcpCiAKICAgICBkZWYgdGVzdF9pZF9jaGlsZF9zZWxlY3Rvcl9udGhfb2ZfdHlwZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjaW5uZXIgPiBwOm50aC1vZi10eXBlKDIpJywgWydwMSddKQpAQCAtMTgwMyw3ICsxOTQ0LDcgQEAKICAgICAgICAgc2VsZWN0ZWQgPSBpbm5lci5zZWxlY3QoImRpdiIpCiAgICAgICAgICMgVGhlIDxkaXYgaWQ9ImlubmVyIj4gdGFnIHdhcyBzZWxlY3RlZC4gVGhlIDxkaXYgaWQ9ImZvb3RlciI+CiAgICAgICAgICMgdGFnIHdhcyBub3QuCi0gICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxlY3RlZCwgWydpbm5lciddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoc2VsZWN0ZWQsIFsnaW5uZXInLCAnZGF0YTEnXSkKIAogICAgIGRlZiB0ZXN0X292ZXJzcGVjaWZpZWRfY2hpbGRfaWQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygiLmZhbmN5ICNpbm5lciIsIFsnaW5uZXInXSkKQEAgLTE4MjcsMyArMTk2OCw0NCBAQAogCiAgICAgZGVmIHRlc3Rfc2libGluZ19jb21iaW5hdG9yX3dvbnRfc2VsZWN0X3NhbWVfdGFnX3R3aWNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJ3BbbGFuZ10gfiBwJywgWydsYW5nLWVuLWdiJywgJ2xhbmctZW4tdXMnLCAnbGFuZy1mciddKQorCisgICAgIyBUZXN0IHRoZSBzZWxlY3RvciBncm91cGluZyBvcGVyYXRvciAodGhlIGNvbW1hKQorICAgIGRlZiB0ZXN0X211bHRpcGxlX3NlbGVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCd4LCB5JywgWyd4aWQnLCAneWlkJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9zZWxlY3Rfd2l0aF9ub19zcGFjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCd4LHknLCBbJ3hpZCcsICd5aWQnXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3NlbGVjdF93aXRoX21vcmVfc3BhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygneCwgICAgeScsIFsneGlkJywgJ3lpZCddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfc2VsZWN0X2R1cGxpY2F0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygneCwgeCcsIFsneGlkJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9zZWxlY3Rfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCd4LCB5IH4gcFtsYW5nPWZyXScsIFsneGlkJywgJ2xhbmctZnInXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3NlbGVjdF90YWdfYW5kX2RpcmVjdF9kZXNjZW5kYW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJ3gsIHkgPiB6JywgWyd4aWQnLCAnemlkYiddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfc2VsZWN0X2RpcmVjdF9kZXNjZW5kYW50X2FuZF90YWdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJ2RpdiA+IHgsIHksIHonLCBbJ3hpZCcsICd5aWQnLCAnemlkYScsICd6aWRiJywgJ3ppZGFiJywgJ3ppZGFjJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9zZWxlY3RfaW5kaXJlY3RfZGVzY2VuZGFudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCdkaXYgeCx5LCAgeicsIFsneGlkJywgJ3lpZCcsICd6aWRhJywgJ3ppZGInLCAnemlkYWInLCAnemlkYWMnXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbXVsdGlwbGVfc2VsZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNvdXAuc2VsZWN0LCAnLHgsIHknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNvdXAuc2VsZWN0LCAneCwseScpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9zZWxlY3RfYXR0cnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygncFtsYW5nPWVuXSwgcFtsYW5nPWVuLWdiXScsIFsnbGFuZy1lbicsICdsYW5nLWVuLWdiJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9zZWxlY3RfaWRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJ3gsIHkgPiB6W2lkPXppZGFdLCB6W2lkPXppZGFiXSwgeltpZD16aWRiXScsIFsneGlkJywgJ3ppZGInLCAnemlkYWInXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3NlbGVjdF9uZXN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnYm9keSA+IGRpdiA+IHgsIHkgPiB6JywgWyd4aWQnLCAnemlkYiddKQorCisKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2NvZGVnZW4ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvY29kZWdlbi5weQppbmRleCBiZTc3MmQ1Li42MmE2NzQ4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvY29kZWdlbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvY29kZWdlbi5weQpAQCAtMjE0LDExICsyMTQsMTEgQEAKICAgICAgICAgICAgICAgICBwYXJlbl9vcl9jb21tYSgpCiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShrZXl3b3JkLmFyZyArICc9JykKICAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGtleXdvcmQudmFsdWUpCi0gICAgICAgICAgICBpZiBub2RlLnN0YXJhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgaGFzYXR0cihub2RlLCAnc3RhcmFyZ3MnKSBhbmQgbm9kZS5zdGFyYXJncyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBwYXJlbl9vcl9jb21tYSgpCiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnKicpCiAgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnN0YXJhcmdzKQotICAgICAgICAgICAgaWYgbm9kZS5rd2FyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBoYXNhdHRyKG5vZGUsICdrd2FyZ3MnKSBhbmQgbm9kZS5rd2FyZ3MgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcGFyZW5fb3JfY29tbWEoKQogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyoqJykKICAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUua3dhcmdzKQpAQCAtMzc5LDExICszNzksMTEgQEAKICAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKICAgICAgICAgICAgIHNlbGYud3JpdGUoa2V5d29yZC5hcmcgKyAnPScpCiAgICAgICAgICAgICBzZWxmLnZpc2l0KGtleXdvcmQudmFsdWUpCi0gICAgICAgIGlmIG5vZGUuc3RhcmFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIobm9kZSwgJ3N0YXJhcmdzJykgYW5kIG5vZGUuc3RhcmFyZ3MgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB3cml0ZV9jb21tYSgpCiAgICAgICAgICAgICBzZWxmLndyaXRlKCcqJykKICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5zdGFyYXJncykKLSAgICAgICAgaWYgbm9kZS5rd2FyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIobm9kZSwgJ2t3YXJncycpIGFuZCBub2RlLmt3YXJncyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKICAgICAgICAgICAgIHNlbGYud3JpdGUoJyoqJykKICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5rd2FyZ3MpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L3lhY2MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L3lhY2MucHkKaW5kZXggNjE2OGZkOS4uZDUwODg2ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS95YWNjLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkveWFjYy5weQpAQCAtMTk1LDYgKzE5NSw4IEBACiAgICAgICAgIHNlbGYubGV4ZXIgPSBOb25lCiAgICAgICAgIHNlbGYucGFyc2VyPSBOb25lCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobixzbGljZSk6CisgICAgICAgICAgICByZXR1cm4gW3NlbGZbaV0gZm9yIGkgaW4gcmFuZ2UoKihuLmluZGljZXMobGVuKHNlbGYuc2xpY2UpKSkpXQogICAgICAgICBpZiBuID49IDA6IHJldHVybiBzZWxmLnNsaWNlW25dLnZhbHVlCiAgICAgICAgIGVsc2U6IHJldHVybiBzZWxmLnN0YWNrW25dLnZhbHVlCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE0Y2RjMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzODQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCi0jCi0jIHByb2dyZXNzYmFyICAtIFRleHQgcHJvZ3Jlc3NiYXIgbGlicmFyeSBmb3IgcHl0aG9uLgotIyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlsdG9uIFZvbHBhdG8KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotCi0KLSIiIlRleHQgcHJvZ3Jlc3NiYXIgbGlicmFyeSBmb3IgcHl0aG9uLgotCi1UaGlzIGxpYnJhcnkgcHJvdmlkZXMgYSB0ZXh0IG1vZGUgcHJvZ3Jlc3NiYXIuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQKLXRvIGRpc3BsYXkgdGhlIHByb2dyZXNzIG9mIGEgbG9uZyBydW5uaW5nIG9wZXJhdGlvbiwgcHJvdmlkaW5nIGEKLXZpc3VhbCBjbHVlIHRoYXQgcHJvY2Vzc2luZyBpcyB1bmRlcndheS4KLQotVGhlIFByb2dyZXNzQmFyIGNsYXNzIG1hbmFnZXMgdGhlIHByb2dyZXNzLCBhbmQgdGhlIGZvcm1hdCBvZiB0aGUgbGluZQotaXMgZ2l2ZW4gYnkgYSBudW1iZXIgb2Ygd2lkZ2V0cy4gQSB3aWRnZXQgaXMgYW4gb2JqZWN0IHRoYXQgbWF5Ci1kaXNwbGF5IGRpZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcHJvZ3Jlc3MuIFRoZXJlIGFyZQotdGhyZWUgdHlwZXMgb2Ygd2lkZ2V0OgotLSBhIHN0cmluZywgd2hpY2ggYWx3YXlzIHNob3dzIGl0c2VsZjsKLS0gYSBQcm9ncmVzc0JhcldpZGdldCwgd2hpY2ggbWF5IHJldHVybiBhIGRpZmVyZW50IHZhbHVlIGV2ZXJ5IHRpbWUKLWl0J3MgdXBkYXRlIG1ldGhvZCBpcyBjYWxsZWQ7IGFuZAotLSBhIFByb2dyZXNzQmFyV2lkZ2V0SEZpbGwsIHdoaWNoIGlzIGxpa2UgUHJvZ3Jlc3NCYXJXaWRnZXQsIGV4Y2VwdCBpdAotZXhwYW5kcyB0byBmaWxsIHRoZSByZW1haW5pbmcgd2lkdGggb2YgdGhlIGxpbmUuCi0KLVRoZSBwcm9ncmVzc2JhciBtb2R1bGUgaXMgdmVyeSBlYXN5IHRvIHVzZSwgeWV0IHZlcnkgcG93ZXJmdWwuIEFuZAotYXV0b21hdGljYWxseSBzdXBwb3J0cyBmZWF0dXJlcyBsaWtlIGF1dG8tcmVzaXppbmcgd2hlbiBhdmFpbGFibGUuCi0iIiIKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgotCi1fX2F1dGhvcl9fID0gIk5pbHRvbiBWb2xwYXRvIgotX19hdXRob3JfZW1haWxfXyA9ICJmaXJzdC1uYW1lIGRvdCBsYXN0LW5hbWUgQCBnbWFpbC5jb20iCi1fX2RhdGVfXyA9ICIyMDA2LTA1LTA3IgotX192ZXJzaW9uX18gPSAiMi4zLWRldiIKLQotaW1wb3J0IHN5cywgdGltZSwgb3MKLWZyb20gYXJyYXkgaW1wb3J0IGFycmF5Ci10cnk6Ci0gICAgZnJvbSBmY250bCBpbXBvcnQgaW9jdGwKLSAgICBpbXBvcnQgdGVybWlvcwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLWltcG9ydCBzaWduYWwKLXRyeToKLSAgICBiYXNlc3RyaW5nCi1leGNlcHQgTmFtZUVycm9yOgotICAgIGJhc2VzdHJpbmcgPSAoc3RyLCkKLQotY2xhc3MgUHJvZ3Jlc3NCYXJXaWRnZXQob2JqZWN0KToKLSAgICAiIiJUaGlzIGlzIGFuIGVsZW1lbnQgb2YgUHJvZ3Jlc3NCYXIgZm9ybWF0dGluZy4KLQotICAgIFRoZSBQcm9ncmVzc0JhciBvYmplY3Qgd2lsbCBjYWxsIGl0J3MgdXBkYXRlIHZhbHVlIHdoZW4gYW4gdXBkYXRlCi0gICAgaXMgbmVlZGVkLiBJdCdzIHNpemUgbWF5IGNoYW5nZSBiZXR3ZWVuIGNhbGwsIGJ1dCB0aGUgcmVzdWx0cyB3aWxsCi0gICAgbm90IGJlIGdvb2QgaWYgdGhlIHNpemUgY2hhbmdlcyBkcmFzdGljYWxseSBhbmQgcmVwZWF0ZWRseS4KLSAgICAiIiIKLSAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB3aWRnZXQuCi0KLSAgICAgICAgVGhlIHBhcmFtZXRlciBwYmFyIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIFByb2dyZXNzQmFyLAotICAgICAgICB3aGVyZSBvbmUgY2FuIGFjY2VzcyBhdHRyaWJ1dGVzIG9mIHRoZSBjbGFzcyBmb3Iga25vd2luZyBob3cKLSAgICAgICAgdGhlIHVwZGF0ZSBtdXN0IGJlIG1hZGUuCi0KLSAgICAgICAgQXQgbGVhc3QgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG92ZXJyaWRlbi4iIiIKLSAgICAgICAgcGFzcwotCi1jbGFzcyBQcm9ncmVzc0JhcldpZGdldEhGaWxsKG9iamVjdCk6Ci0gICAgIiIiVGhpcyBpcyBhIHZhcmlhYmxlIHdpZHRoIGVsZW1lbnQgb2YgUHJvZ3Jlc3NCYXIgZm9ybWF0dGluZy4KLQotICAgIFRoZSBQcm9ncmVzc0JhciBvYmplY3Qgd2lsbCBjYWxsIGl0J3MgdXBkYXRlIHZhbHVlLCBpbmZvcm1pbmcgdGhlCi0gICAgd2lkdGggdGhpcyBvYmplY3QgbXVzdCB0aGUgbWFkZS4gVGhpcyBpcyBsaWtlIFRlWCBcXGhmaWxsLCBpdCB3aWxsCi0gICAgZXhwYW5kIHRvIGZpbGwgdGhlIGxpbmUuIFlvdSBjYW4gdXNlIG1vcmUgdGhhbiBvbmUgaW4gdGhlIHNhbWUKLSAgICBsaW5lLCBhbmQgdGhleSB3aWxsIGFsbCBoYXZlIHRoZSBzYW1lIHdpZHRoLCBhbmQgdG9nZXRoZXIgd2lsbAotICAgIGZpbGwgdGhlIGxpbmUuCi0gICAgIiIiCi0gICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyLCB3aWR0aCk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHdpZGdldC4KLQotICAgICAgICBUaGUgcGFyYW1ldGVyIHBiYXIgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgUHJvZ3Jlc3NCYXIsCi0gICAgICAgIHdoZXJlIG9uZSBjYW4gYWNjZXNzIGF0dHJpYnV0ZXMgb2YgdGhlIGNsYXNzIGZvciBrbm93aW5nIGhvdwotICAgICAgICB0aGUgdXBkYXRlIG11c3QgYmUgbWFkZS4gVGhlIHBhcmFtZXRlciB3aWR0aCBpcyB0aGUgdG90YWwKLSAgICAgICAgaG9yaXpvbnRhbCB3aWR0aCB0aGUgd2lkZ2V0IG11c3QgaGF2ZS4KLQotICAgICAgICBBdCBsZWFzdCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3ZlcnJpZGVuLiIiIgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgRVRBKFByb2dyZXNzQmFyV2lkZ2V0KToKLSAgICAiV2lkZ2V0IGZvciB0aGUgRXN0aW1hdGVkIFRpbWUgb2YgQXJyaXZhbCIKLSAgICBkZWYgZm9ybWF0X3RpbWUoc2VsZiwgc2Vjb25kcyk6Ci0gICAgICAgIHJldHVybiB0aW1lLnN0cmZ0aW1lKCclSDolTTolUycsIHRpbWUuZ210aW1lKHNlY29uZHMpKQotICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6Ci0gICAgICAgIGlmIHBiYXIuY3VycnZhbCA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICdFVEE6ICAtLTotLTotLScKLSAgICAgICAgZWxpZiBwYmFyLmZpbmlzaGVkOgotICAgICAgICAgICAgcmV0dXJuICdUaW1lOiAlcycgJSBzZWxmLmZvcm1hdF90aW1lKHBiYXIuc2Vjb25kc19lbGFwc2VkKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZWxhcHNlZCA9IHBiYXIuc2Vjb25kc19lbGFwc2VkCi0gICAgICAgICAgICBldGEgPSBlbGFwc2VkICogcGJhci5tYXh2YWwgLyBwYmFyLmN1cnJ2YWwgLSBlbGFwc2VkCi0gICAgICAgICAgICByZXR1cm4gJ0VUQTogICVzJyAlIHNlbGYuZm9ybWF0X3RpbWUoZXRhKQotCi1jbGFzcyBGaWxlVHJhbnNmZXJTcGVlZChQcm9ncmVzc0JhcldpZGdldCk6Ci0gICAgIldpZGdldCBmb3Igc2hvd2luZyB0aGUgdHJhbnNmZXIgc3BlZWQgKHVzZWZ1bCBmb3IgZmlsZSB0cmFuc2ZlcnMpLiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdW5pdD0nQicpOgotICAgICAgICBzZWxmLnVuaXQgPSB1bml0Ci0gICAgICAgIHNlbGYuZm10ID0gJyU2LjJmICVzJwotICAgICAgICBzZWxmLnByZWZpeGVzID0gWycnLCAnSycsICdNJywgJ0cnLCAnVCcsICdQJ10KLSAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgotICAgICAgICBpZiBwYmFyLnNlY29uZHNfZWxhcHNlZCA8IDJlLTY6Iz09IDA6Ci0gICAgICAgICAgICBicHMgPSAwLjAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJwcyA9IHBiYXIuY3VycnZhbCAvIHBiYXIuc2Vjb25kc19lbGFwc2VkCi0gICAgICAgIHNwZCA9IGJwcwotICAgICAgICBmb3IgdSBpbiBzZWxmLnByZWZpeGVzOgotICAgICAgICAgICAgaWYgc3BkIDwgMTAwMDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc3BkIC89IDEwMDAKLSAgICAgICAgcmV0dXJuIHNlbGYuZm10ICUgKHNwZCwgdSArIHNlbGYudW5pdCArICcvcycpCi0KLWNsYXNzIFJvdGF0aW5nTWFya2VyKFByb2dyZXNzQmFyV2lkZ2V0KToKLSAgICAiQSByb3RhdGluZyBtYXJrZXIgZm9yIGZpbGxpbmcgdGhlIGJhciBvZiBwcm9ncmVzcy4iCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmtlcnM9J3wvLVxcJyk6Ci0gICAgICAgIHNlbGYubWFya2VycyA9IG1hcmtlcnMKLSAgICAgICAgc2VsZi5jdXJtYXJrID0gLTEKLSAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgotICAgICAgICBpZiBwYmFyLmZpbmlzaGVkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFya2Vyc1swXQotICAgICAgICBzZWxmLmN1cm1hcmsgPSAoc2VsZi5jdXJtYXJrICsgMSkgJSBsZW4oc2VsZi5tYXJrZXJzKQotICAgICAgICByZXR1cm4gc2VsZi5tYXJrZXJzW3NlbGYuY3VybWFya10KLQotY2xhc3MgUGVyY2VudGFnZShQcm9ncmVzc0JhcldpZGdldCk6Ci0gICAgIkp1c3QgdGhlIHBlcmNlbnRhZ2UgZG9uZS4iCi0gICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKLSAgICAgICAgcmV0dXJuICclM2QlJScgJSBwYmFyLnBlcmNlbnRhZ2UoKQotCi1jbGFzcyBTaW1wbGVQcm9ncmVzcyhQcm9ncmVzc0JhcldpZGdldCk6Ci0gICAgIlJldHVybnMgd2hhdCBpcyBhbHJlYWR5IGRvbmUgYW5kIHRoZSB0b3RhbCwgZS5nLjogJzUgb2YgNDcnIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXA9JyBvZiAnKToKLSAgICAgICAgc2VsZi5zZXAgPSBzZXAKLSAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgotICAgICAgICByZXR1cm4gJyVkJXMlZCcgJSAocGJhci5jdXJydmFsLCBzZWxmLnNlcCwgcGJhci5tYXh2YWwpCi0KLWNsYXNzIEJhcihQcm9ncmVzc0JhcldpZGdldEhGaWxsKToKLSAgICAiVGhlIGJhciBvZiBwcm9ncmVzcy4gSXQgd2lsbCBzdHJldGNoIHRvIGZpbGwgdGhlIGxpbmUuIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrZXI9JyMnLCBsZWZ0PSd8JywgcmlnaHQ9J3wnKToKLSAgICAgICAgc2VsZi5tYXJrZXIgPSBtYXJrZXIKLSAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAotICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKLSAgICBkZWYgX2Zvcm1hdF9tYXJrZXIoc2VsZiwgcGJhcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5tYXJrZXIsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFya2VyCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5tYXJrZXIudXBkYXRlKHBiYXIpCi0gICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyLCB3aWR0aCk6Ci0gICAgICAgIHBlcmNlbnQgPSBwYmFyLnBlcmNlbnRhZ2UoKQotICAgICAgICBjd2lkdGggPSB3aWR0aCAtIGxlbihzZWxmLmxlZnQpIC0gbGVuKHNlbGYucmlnaHQpCi0gICAgICAgIG1hcmtlZF93aWR0aCA9IGludChwZXJjZW50ICogY3dpZHRoIC8vIDEwMCkKLSAgICAgICAgbSA9IHNlbGYuX2Zvcm1hdF9tYXJrZXIocGJhcikKLSAgICAgICAgYmFyID0gKHNlbGYubGVmdCArIChtICogbWFya2VkX3dpZHRoKS5sanVzdChjd2lkdGgpICsgc2VsZi5yaWdodCkKLSAgICAgICAgcmV0dXJuIGJhcgotCi1jbGFzcyBSZXZlcnNlQmFyKEJhcik6Ci0gICAgIlRoZSByZXZlcnNlIGJhciBvZiBwcm9ncmVzcywgb3IgYmFyIG9mIHJlZ3Jlc3MuIDopIgotICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgotICAgICAgICBwZXJjZW50ID0gcGJhci5wZXJjZW50YWdlKCkKLSAgICAgICAgY3dpZHRoID0gd2lkdGggLSBsZW4oc2VsZi5sZWZ0KSAtIGxlbihzZWxmLnJpZ2h0KQotICAgICAgICBtYXJrZWRfd2lkdGggPSBpbnQocGVyY2VudCAqIGN3aWR0aCAvLyAxMDApCi0gICAgICAgIG0gPSBzZWxmLl9mb3JtYXRfbWFya2VyKHBiYXIpCi0gICAgICAgIGJhciA9IChzZWxmLmxlZnQgKyAobSptYXJrZWRfd2lkdGgpLnJqdXN0KGN3aWR0aCkgKyBzZWxmLnJpZ2h0KQotICAgICAgICByZXR1cm4gYmFyCi0KLWRlZmF1bHRfd2lkZ2V0cyA9IFtQZXJjZW50YWdlKCksICcgJywgQmFyKCldCi1jbGFzcyBQcm9ncmVzc0JhcihvYmplY3QpOgotICAgICIiIlRoaXMgaXMgdGhlIFByb2dyZXNzQmFyIGNsYXNzLCBpdCB1cGRhdGVzIGFuZCBwcmludHMgdGhlIGJhci4KLQotICAgIEEgY29tbW9uIHdheSBvZiB1c2luZyBpdCBpcyBsaWtlOgotICAgID4+PiBwYmFyID0gUHJvZ3Jlc3NCYXIoKS5zdGFydCgpCi0gICAgPj4+IGZvciBpIGluIHhyYW5nZSgxMDApOgotICAgIC4uLiAgICAjIGRvIHNvbWV0aGluZwotICAgIC4uLiAgICBwYmFyLnVwZGF0ZShpKzEpCi0gICAgLi4uCi0gICAgPj4+IHBiYXIuZmluaXNoKCkKLQotICAgIFlvdSBjYW4gYWxzbyB1c2UgYSBwcm9ncmVzc2JhciBhcyBhbiBpdGVyYXRvcjoKLSAgICA+Pj4gcHJvZ3Jlc3MgPSBQcm9ncmVzc0JhcigpCi0gICAgPj4+IGZvciBpIGluIHByb2dyZXNzKHNvbWVfaXRlcmFibGUpOgotICAgIC4uLiAgICAjIGRvIHNvbWV0aGluZwotICAgIC4uLgotCi0gICAgQnV0IGFueXRoaW5nIHlvdSB3YW50IHRvIGRvIGlzIHBvc3NpYmxlICh3ZWxsLCBhbG1vc3QgYW55dGhpbmcpLgotICAgIFlvdSBjYW4gc3VwcGx5IGRpZmZlcmVudCB3aWRnZXRzIG9mIGFueSB0eXBlIGluIGFueSBvcmRlci4gQW5kIHlvdQotICAgIGNhbiBldmVuIHdyaXRlIHlvdXIgb3duIHdpZGdldHMhIFRoZXJlIGFyZSBtYW55IHdpZGdldHMgYWxyZWFkeQotICAgIHNoaXBwZWQgYW5kIHlvdSBzaG91bGQgZXhwZXJpbWVudCB3aXRoIHRoZW0uCi0KLSAgICBUaGUgdGVybV93aWR0aCBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUuIEluIHRoZSBsYXR0ZXIgY2FzZQotICAgIGl0IHdpbGwgdHJ5IHRvIGd1ZXNzIGl0LCBpZiBpdCBmYWlscyBpdCB3aWxsIGRlZmF1bHQgdG8gODAgY29sdW1ucy4KLQotICAgIFdoZW4gaW1wbGVtZW50aW5nIGEgd2lkZ2V0IHVwZGF0ZSBtZXRob2QgeW91IG1heSBhY2Nlc3MgYW55Ci0gICAgYXR0cmlidXRlIG9yIGZ1bmN0aW9uIG9mIHRoZSBQcm9ncmVzc0JhciBvYmplY3QgY2FsbGluZyB0aGUKLSAgICB3aWRnZXQncyB1cGRhdGUgbWV0aG9kLiBUaGUgbW9zdCBpbXBvcnRhbnQgYXR0cmlidXRlcyB5b3Ugd291bGQKLSAgICBsaWtlIHRvIGFjY2VzcyBhcmU6Ci0gICAgLSBjdXJydmFsOiBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9ncmVzcywgMCA8PSBjdXJydmFsIDw9IG1heHZhbAotICAgIC0gbWF4dmFsOiBtYXhpbXVtIChhbmQgZmluYWwpIHZhbHVlIG9mIHRoZSBwcm9ncmVzcwotICAgIC0gZmluaXNoZWQ6IFRydWUgaWYgdGhlIGJhciBoYXMgZmluaXNoZWQgKHJlYWNoZWQgMTAwJSksIEZhbHNlIG8vdwotICAgIC0gc3RhcnRfdGltZTogdGhlIHRpbWUgd2hlbiBzdGFydCgpIG1ldGhvZCBvZiBQcm9ncmVzc0JhciB3YXMgY2FsbGVkCi0gICAgLSBzZWNvbmRzX2VsYXBzZWQ6IHNlY29uZHMgZWxhcHNlZCBzaW5jZSBzdGFydF90aW1lCi0gICAgLSBwZXJjZW50YWdlKCk6IHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzIFswLi4xMDBdLiBUaGlzIGlzIGEgbWV0aG9kLgotCi0gICAgVGhlIGF0dHJpYnV0ZXMgYWJvdmUgYXJlIHVubGlrZWx5IHRvIGNoYW5nZSBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucywKLSAgICB0aGUgb3RoZXIgb25lcyBtYXkgY2hhbmdlIG9yIGNlYXNlIHRvIGV4aXN0IHdpdGhvdXQgbm90aWNlLCBzbyB0cnkgdG8gcmVseQotICAgIG9ubHkgb24gdGhlIG9uZXMgZG9jdW1lbnRlZCBhYm92ZSBpZiB5b3UgYXJlIGV4dGVuZGluZyB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgICIiIgotCi0gICAgX19zbG90c19fID0gKCdjdXJydmFsJywgJ2ZkJywgJ2ZpbmlzaGVkJywgJ2xhc3RfdXBkYXRlX3RpbWUnLCAnbWF4dmFsJywKLSAgICAgICAgICAgICAgICAgJ25leHRfdXBkYXRlJywgJ251bV9pbnRlcnZhbHMnLCAnc2Vjb25kc19lbGFwc2VkJywKLSAgICAgICAgICAgICAgICAgJ3NpZ25hbF9zZXQnLCAnc3RhcnRfdGltZScsICd0ZXJtX3dpZHRoJywgJ3VwZGF0ZV9pbnRlcnZhbCcsCi0gICAgICAgICAgICAgICAgICd3aWRnZXRzJywgJ19pdGVyYWJsZScpCi0KLSAgICBfREVGQVVMVF9NQVhWQUwgPSAxMDAKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXh2YWw9Tm9uZSwgd2lkZ2V0cz1kZWZhdWx0X3dpZGdldHMsIHRlcm1fd2lkdGg9Tm9uZSwKLSAgICAgICAgICAgICAgICAgZmQ9c3lzLnN0ZGVycik6Ci0gICAgICAgIHNlbGYubWF4dmFsID0gbWF4dmFsCi0gICAgICAgIHNlbGYud2lkZ2V0cyA9IHdpZGdldHMKLSAgICAgICAgc2VsZi5mZCA9IGZkCi0gICAgICAgIHNlbGYuc2lnbmFsX3NldCA9IEZhbHNlCi0gICAgICAgIGlmIHRlcm1fd2lkdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnRlcm1fd2lkdGggPSB0ZXJtX3dpZHRoCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3Jlc2l6ZShOb25lLCBOb25lKQotICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzZWxmLl9oYW5kbGVfcmVzaXplKQotICAgICAgICAgICAgICAgIHNlbGYuc2lnbmFsX3NldCA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCAoU3lzdGVtRXhpdCwgS2V5Ym9hcmRJbnRlcnJ1cHQpOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi50ZXJtX3dpZHRoID0gaW50KG9zLmVudmlyb24uZ2V0KCdDT0xVTU5TJywgODApKSAtIDEKLQotICAgICAgICBzZWxmLmN1cnJ2YWwgPSAwCi0gICAgICAgIHNlbGYuZmluaXNoZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBOb25lCi0gICAgICAgIHNlbGYubGFzdF91cGRhdGVfdGltZSA9IE5vbmUKLSAgICAgICAgc2VsZi5zZWNvbmRzX2VsYXBzZWQgPSAwCi0gICAgICAgIHNlbGYuX2l0ZXJhYmxlID0gTm9uZQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsIGl0ZXJhYmxlKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5tYXh2YWwgPSBsZW4oaXRlcmFibGUpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAjIElmIHRoZSBpdGVyYWJsZSBoYXMgbm8gbGVuZ3RoLCB0aGVuIHJlbHkgb24gdGhlIHZhbHVlIHByb3ZpZGVkCi0gICAgICAgICAgICAjIGJ5IHRoZSB1c2VyLCBvdGhlcndpc2UgZmFpbC4KLSAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShzZWxmLm1heHZhbCwgKGludCwgbG9uZykpIGFuZCBzZWxmLm1heHZhbCA+IDApOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ291bGQgbm90IGRldGVybWluZSBtYXh2YWwgZnJvbSBpdGVyYWJsZS4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91IG11c3QgZXhwbGljaXRseSBwcm92aWRlIGEgbWF4dmFsLicpCi0gICAgICAgIHNlbGYuX2l0ZXJhYmxlID0gaXRlcihpdGVyYWJsZSkKLSAgICAgICAgc2VsZi5zdGFydCgpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV4dCA9IHNlbGYuX2l0ZXJhYmxlLm5leHQoKQotICAgICAgICAgICAgc2VsZi51cGRhdGUoc2VsZi5jdXJydmFsICsgMSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Ci0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgc2VsZi5maW5pc2goKQotICAgICAgICAgICAgcmFpc2UKLQotICAgIGRlZiBfaGFuZGxlX3Jlc2l6ZShzZWxmLCBzaWdudW0sIGZyYW1lKToKLSAgICAgICAgaCwgdyA9IGFycmF5KCdoJywgaW9jdGwoc2VsZi5mZCwgdGVybWlvcy5USU9DR1dJTlNaLCAnXDAnICogOCkpWzoyXQotICAgICAgICBzZWxmLnRlcm1fd2lkdGggPSB3Ci0KLSAgICBkZWYgcGVyY2VudGFnZShzZWxmKToKLSAgICAgICAgIlJldHVybnMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzLiIKLSAgICAgICAgcmV0dXJuIHNlbGYuY3VycnZhbCAqIDEwMC4wIC8gc2VsZi5tYXh2YWwKLQotICAgIGRlZiBfZm9ybWF0X3dpZGdldHMoc2VsZik6Ci0gICAgICAgIHIgPSBbXQotICAgICAgICBoZmlsbF9pbmRzID0gW10KLSAgICAgICAgbnVtX2hmaWxsID0gMAotICAgICAgICBjdXJyd2lkdGggPSAwCi0gICAgICAgIGZvciBpLCB3IGluIGVudW1lcmF0ZShzZWxmLndpZGdldHMpOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh3LCBQcm9ncmVzc0JhcldpZGdldEhGaWxsKToKLSAgICAgICAgICAgICAgICByLmFwcGVuZCh3KQotICAgICAgICAgICAgICAgIGhmaWxsX2luZHMuYXBwZW5kKGkpCi0gICAgICAgICAgICAgICAgbnVtX2hmaWxsICs9IDEKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh3LCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICByLmFwcGVuZCh3KQotICAgICAgICAgICAgICAgIGN1cnJ3aWR0aCArPSBsZW4odykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd2V2YWwgPSB3LnVwZGF0ZShzZWxmKQotICAgICAgICAgICAgICAgIGN1cnJ3aWR0aCArPSBsZW4od2V2YWwpCi0gICAgICAgICAgICAgICAgci5hcHBlbmQod2V2YWwpCi0gICAgICAgIGZvciBpdyBpbiBoZmlsbF9pbmRzOgotICAgICAgICAgICAgd2lkZ2V0X3dpZHRoID0gaW50KChzZWxmLnRlcm1fd2lkdGggLSBjdXJyd2lkdGgpIC8vIG51bV9oZmlsbCkKLSAgICAgICAgICAgIHJbaXddID0gcltpd10udXBkYXRlKHNlbGYsIHdpZGdldF93aWR0aCkKLSAgICAgICAgcmV0dXJuIHIKLQotICAgIGRlZiBfZm9ybWF0X2xpbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuX2Zvcm1hdF93aWRnZXRzKCkpLmxqdXN0KHNlbGYudGVybV93aWR0aCkKLQotICAgIGRlZiBfbmV4dF91cGRhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBpbnQoKGludChzZWxmLm51bV9pbnRlcnZhbHMgKgotICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycnZhbCAvIHNlbGYubWF4dmFsKSkgKyAxKSAqCi0gICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfaW50ZXJ2YWwpCi0KLSAgICBkZWYgX25lZWRfdXBkYXRlKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIHRydWUgd2hlbiB0aGUgcHJvZ3Jlc3NiYXIgc2hvdWxkIHByaW50IGFuIHVwZGF0ZWQgbGluZS4KLQotICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHlvdSB3YW50IGZpbmVyIGdyYWluZWQgY29udHJvbCBvdmVyCi0gICAgICAgIHVwZGF0ZXMuCi0KLSAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgb3B0aW1pemVkIHRvIGJlIGFzIGZhc3QgYXMgcG9zc2libGUgYW5kCi0gICAgICAgIGFzIGVjb25vbWljYWwgYXMgcG9zc2libGUgaW4gdGhlIG51bWJlciBvZiB1cGRhdGVzLiBIb3dldmVyLCBkZXBlbmRpbmcKLSAgICAgICAgb24geW91ciB1c2FnZSB5b3UgbWF5IHdhbnQgdG8gZG8gbW9yZSB1cGRhdGVzLiBGb3IgaW5zdGFuY2UsIGlmIHlvdXIKLSAgICAgICAgcHJvZ3Jlc3NiYXIgc3RheXMgaW4gdGhlIHNhbWUgcGVyY2VudGFnZSBmb3IgYSBsb25nIHRpbWUsIGFuZCB5b3Ugd2FudAotICAgICAgICB0byB1cGRhdGUgb3RoZXIgd2lkZ2V0cywgbGlrZSBFVEEsIHRoZW4geW91IGNvdWxkIHJldHVybiBUcnVlIGFmdGVyCi0gICAgICAgIHNvbWUgdGltZSBoYXMgcGFzc2VkIHdpdGggbm8gdXBkYXRlcy4KLQotICAgICAgICBJZGVhbGx5IHlvdSBjb3VsZCBjYWxsIHNlbGYuX2Zvcm1hdF9saW5lKCkgYW5kIHNlZSBpZiBpdCdzIGRpZmZlcmVudAotICAgICAgICBmcm9tIHRoZSBwcmV2aW91cyBfZm9ybWF0X2xpbmUoKSBjYWxsLCBidXQgY2FsbGluZyBfZm9ybWF0X2xpbmUoKSB0YWtlcwotICAgICAgICBhcm91bmQgMjAgdGltZXMgbW9yZSB0aW1lIHRoYW4gY2FsbGluZyB0aGlzIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIF9uZWVkX3VwZGF0ZSgpLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuY3VycnZhbCA+PSBzZWxmLm5leHRfdXBkYXRlCi0KLSAgICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgIlVwZGF0ZXMgdGhlIHByb2dyZXNzIGJhciB0byBhIG5ldyB2YWx1ZS4iCi0gICAgICAgIGFzc2VydCAwIDw9IHZhbHVlIDw9IHNlbGYubWF4dmFsLCAnMCA8PSAlZCA8PSAlZCcgJSAodmFsdWUsIHNlbGYubWF4dmFsKQotICAgICAgICBzZWxmLmN1cnJ2YWwgPSB2YWx1ZQotICAgICAgICBpZiBub3Qgc2VsZi5fbmVlZF91cGRhdGUoKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBzZWxmLnN0YXJ0X3RpbWUgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignWW91IG11c3QgY2FsbCBzdGFydCgpIGJlZm9yZSBjYWxsaW5nIHVwZGF0ZSgpJykKLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5zZWNvbmRzX2VsYXBzZWQgPSBub3cgLSBzZWxmLnN0YXJ0X3RpbWUKLSAgICAgICAgc2VsZi5uZXh0X3VwZGF0ZSA9IHNlbGYuX25leHRfdXBkYXRlKCkKLSAgICAgICAgc2VsZi5mZC53cml0ZShzZWxmLl9mb3JtYXRfbGluZSgpICsgJ1xyJykKLSAgICAgICAgc2VsZi5sYXN0X3VwZGF0ZV90aW1lID0gbm93Ci0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyBtZWFzdXJpbmcgdGltZSwgYW5kIHByaW50cyB0aGUgYmFyIGF0IDAlLgotCi0gICAgICAgIEl0IHJldHVybnMgc2VsZiBzbyB5b3UgY2FuIHVzZSBpdCBsaWtlIHRoaXM6Ci0gICAgICAgID4+PiBwYmFyID0gUHJvZ3Jlc3NCYXIoKS5zdGFydCgpCi0gICAgICAgID4+PiBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKLSAgICAgICAgLi4uICAgICMgZG8gc29tZXRoaW5nCi0gICAgICAgIC4uLiAgICBwYmFyLnVwZGF0ZShpKzEpCi0gICAgICAgIC4uLgotICAgICAgICA+Pj4gcGJhci5maW5pc2goKQotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5tYXh2YWwgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYubWF4dmFsID0gc2VsZi5fREVGQVVMVF9NQVhWQUwKLSAgICAgICAgYXNzZXJ0IHNlbGYubWF4dmFsID4gMAotCi0gICAgICAgIHNlbGYubnVtX2ludGVydmFscyA9IG1heCgxMDAsIHNlbGYudGVybV93aWR0aCkKLSAgICAgICAgc2VsZi51cGRhdGVfaW50ZXJ2YWwgPSBzZWxmLm1heHZhbCAvIHNlbGYubnVtX2ludGVydmFscwotICAgICAgICBzZWxmLm5leHRfdXBkYXRlID0gMAotCi0gICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHNlbGYubGFzdF91cGRhdGVfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYudXBkYXRlKDApCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgZmluaXNoKHNlbGYpOgotICAgICAgICAiIiJVc2VkIHRvIHRlbGwgdGhlIHByb2dyZXNzIGlzIGZpbmlzaGVkLiIiIgotICAgICAgICBzZWxmLmZpbmlzaGVkID0gVHJ1ZQotICAgICAgICBzZWxmLnVwZGF0ZShzZWxmLm1heHZhbCkKLSAgICAgICAgc2VsZi5mZC53cml0ZSgnXG4nKQotICAgICAgICBpZiBzZWxmLnNpZ25hbF9zZXQ6Ci0gICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdXSU5DSCwgc2lnbmFsLlNJR19ERkwpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvTElDRU5TRS50eHQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvTElDRU5TRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4Y2NkYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci9MSUNFTlNFLnR4dApAQCAtMCwwICsxLDUyIEBACitZb3UgY2FuIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgbGlicmFyeSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitHTlUgTEdQTCBsaWNlbnNlIG9yIEJTRCBsaWNlbnNlIChvciBib3RoKS4KKworLS0tCisKK3Byb2dyZXNzYmFyIC0gVGV4dCBwcm9ncmVzcyBiYXIgbGlicmFyeSBmb3IgcHl0aG9uLgorQ29weXJpZ2h0IChDKSAyMDA1IE5pbHRvbiBWb2xwYXRvCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCistLS0KKworcHJvZ3Jlc3NiYXIgLSBUZXh0IHByb2dyZXNzIGJhciBsaWJyYXJ5IGZvciBweXRob24KK0NvcHlyaWdodCAoYykgMjAwOCBOaWx0b24gVm9scGF0bworCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgYS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgYi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyBjLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byb2dyZXNzYmFyL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byb2dyZXNzYmFyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYWI3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvX19pbml0X18ucHkKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjCisjIHByb2dyZXNzYmFyICAtIFRleHQgcHJvZ3Jlc3MgYmFyIGxpYnJhcnkgZm9yIFB5dGhvbi4KKyMgQ29weXJpZ2h0IChjKSAyMDA1IE5pbHRvbiBWb2xwYXRvCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworIiIiVGV4dCBwcm9ncmVzcyBiYXIgbGlicmFyeSBmb3IgUHl0aG9uLgorCitBIHRleHQgcHJvZ3Jlc3MgYmFyIGlzIHR5cGljYWxseSB1c2VkIHRvIGRpc3BsYXkgdGhlIHByb2dyZXNzIG9mIGEgbG9uZworcnVubmluZyBvcGVyYXRpb24sIHByb3ZpZGluZyBhIHZpc3VhbCBjdWUgdGhhdCBwcm9jZXNzaW5nIGlzIHVuZGVyd2F5LgorCitUaGUgUHJvZ3Jlc3NCYXIgY2xhc3MgbWFuYWdlcyB0aGUgY3VycmVudCBwcm9ncmVzcywgYW5kIHRoZSBmb3JtYXQgb2YgdGhlIGxpbmUKK2lzIGdpdmVuIGJ5IGEgbnVtYmVyIG9mIHdpZGdldHMuIEEgd2lkZ2V0IGlzIGFuIG9iamVjdCB0aGF0IG1heSBkaXNwbGF5CitkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSBwcm9ncmVzcyBiYXIuIFRoZXJlIGFyZSB0aHJlZSB0eXBlcworb2Ygd2lkZ2V0czoKKyAtIGEgc3RyaW5nLCB3aGljaCBhbHdheXMgc2hvd3MgaXRzZWxmCisKKyAtIGEgUHJvZ3Jlc3NCYXJXaWRnZXQsIHdoaWNoIG1heSByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgZXZlcnkgdGltZSBpdHMKKyAgIHVwZGF0ZSBtZXRob2QgaXMgY2FsbGVkCisKKyAtIGEgUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbCwgd2hpY2ggaXMgbGlrZSBQcm9ncmVzc0JhcldpZGdldCwgZXhjZXB0IGl0CisgICBleHBhbmRzIHRvIGZpbGwgdGhlIHJlbWFpbmluZyB3aWR0aCBvZiB0aGUgbGluZS4KKworVGhlIHByb2dyZXNzYmFyIG1vZHVsZSBpcyB2ZXJ5IGVhc3kgdG8gdXNlLCB5ZXQgdmVyeSBwb3dlcmZ1bC4gSXQgd2lsbCBhbHNvCithdXRvbWF0aWNhbGx5IGVuYWJsZSBmZWF0dXJlcyBsaWtlIGF1dG8tcmVzaXppbmcgd2hlbiB0aGUgc3lzdGVtIHN1cHBvcnRzIGl0LgorIiIiCisKK19fYXV0aG9yX18gPSAnTmlsdG9uIFZvbHBhdG8nCitfX2F1dGhvcl9lbWFpbF9fID0gJ2ZpcnN0LW5hbWUgZG90IGxhc3QtbmFtZSBAIGdtYWlsLmNvbScKK19fZGF0ZV9fID0gJzIwMTEtMDUtMTQnCitfX3ZlcnNpb25fXyA9ICcyLjMnCisKK2Zyb20gLmNvbXBhdCBpbXBvcnQgKgorZnJvbSAud2lkZ2V0cyBpbXBvcnQgKgorZnJvbSAucHJvZ3Jlc3NiYXIgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci9jb21wYXQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvY29tcGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWY0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvY29tcGF0LnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjCisjIHByb2dyZXNzYmFyICAtIFRleHQgcHJvZ3Jlc3MgYmFyIGxpYnJhcnkgZm9yIFB5dGhvbi4KKyMgQ29weXJpZ2h0IChjKSAyMDA1IE5pbHRvbiBWb2xwYXRvCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworIiIiQ29tcGF0aWJpbGl0eSBtZXRob2RzIGFuZCBjbGFzc2VzIGZvciB0aGUgcHJvZ3Jlc3NiYXIgbW9kdWxlLiIiIgorCisKKyMgUHl0aG9uIDMueCAoYW5kIGJhY2twb3J0cykgdXNlIGEgbW9kaWZpZWQgaXRlcmF0b3Igc3ludGF4CisjIFRoaXMgd2lsbCBhbGxvdyAyLnggdG8gYmVoYXZlIHdpdGggMy54IGl0ZXJhdG9ycwordHJ5OgorICBuZXh0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGRlZiBuZXh0KGl0ZXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFRyeSBuZXcgc3R5bGUgaXRlcmF0b3JzCisgICAgICAgICAgICByZXR1cm4gaXRlci5fX25leHRfXygpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgRmFsbGJhY2sgaW4gY2FzZSBvZiBhICJuYXRpdmUiIGl0ZXJhdG9yCisgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCkKKworCisjIFB5dGhvbiA8IDIuNSBkb2VzIG5vdCBoYXZlICJhbnkiCit0cnk6CisgIGFueQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgIGRlZiBhbnkoaXRlcmF0b3IpOgorICAgICAgZm9yIGl0ZW0gaW4gaXRlcmF0b3I6CisgICAgICAgICBpZiBpdGVtOiByZXR1cm4gVHJ1ZQorICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3M2FkNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5weQpAQCAtMCwwICsxLDMxNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMKKyMgcHJvZ3Jlc3NiYXIgIC0gVGV4dCBwcm9ncmVzcyBiYXIgbGlicmFyeSBmb3IgUHl0aG9uLgorIyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlsdG9uIFZvbHBhdG8KKyMKKyMgKFdpdGggc29tZSBzbWFsbCBjaGFuZ2VzIGFmdGVyIGltcG9ydGluZyBpbnRvIEJpdEJha2UpCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworIiIiTWFpbiBQcm9ncmVzc0JhciBjbGFzcy4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorCitpbXBvcnQgbWF0aAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCit0cnk6CisgICAgZnJvbSBmY250bCBpbXBvcnQgaW9jdGwKKyAgICBmcm9tIGFycmF5IGltcG9ydCBhcnJheQorICAgIGltcG9ydCB0ZXJtaW9zCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCitmcm9tIC5jb21wYXQgaW1wb3J0ICogICMgZm9yOiBhbnksIG5leHQKK2Zyb20gLiBpbXBvcnQgd2lkZ2V0cworCisKK2NsYXNzIFVua25vd25MZW5ndGg6IHBhc3MKKworCitjbGFzcyBQcm9ncmVzc0JhcihvYmplY3QpOgorICAgICIiIlRoZSBQcm9ncmVzc0JhciBjbGFzcyB3aGljaCB1cGRhdGVzIGFuZCBwcmludHMgdGhlIGJhci4KKworICAgIEEgY29tbW9uIHdheSBvZiB1c2luZyBpdCBpcyBsaWtlOgorICAgID4+PiBwYmFyID0gUHJvZ3Jlc3NCYXIoKS5zdGFydCgpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgLi4uICAgICMgZG8gc29tZXRoaW5nCisgICAgLi4uICAgIHBiYXIudXBkYXRlKGkrMSkKKyAgICAuLi4KKyAgICA+Pj4gcGJhci5maW5pc2goKQorCisgICAgWW91IGNhbiBhbHNvIHVzZSBhIFByb2dyZXNzQmFyIGFzIGFuIGl0ZXJhdG9yOgorICAgID4+PiBwcm9ncmVzcyA9IFByb2dyZXNzQmFyKCkKKyAgICA+Pj4gZm9yIGkgaW4gcHJvZ3Jlc3Moc29tZV9pdGVyYWJsZSk6CisgICAgLi4uICAgICMgZG8gc29tZXRoaW5nCisgICAgLi4uCisKKyAgICBTaW5jZSB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGluY3JlZGlibHkgY3VzdG9taXphYmxlIHlvdSBjYW4gc3BlY2lmeQorICAgIGRpZmZlcmVudCB3aWRnZXRzIG9mIGFueSB0eXBlIGluIGFueSBvcmRlci4gWW91IGNhbiBldmVuIHdyaXRlIHlvdXIgb3duCisgICAgd2lkZ2V0cyEgSG93ZXZlciwgc2luY2UgdGhlcmUgYXJlIGFscmVhZHkgYSBnb29kIG51bWJlciBvZiB3aWRnZXRzIHlvdQorICAgIHNob3VsZCBwcm9iYWJseSBwbGF5IGFyb3VuZCB3aXRoIHRoZW0gYmVmb3JlIG1vdmluZyBvbiB0byBjcmVhdGUgeW91ciBvd24KKyAgICB3aWRnZXRzLgorCisgICAgVGhlIHRlcm1fd2lkdGggcGFyYW1ldGVyIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdGVybWluYWwgd2lkdGguIElmIHRoZQorICAgIHBhcmFtZXRlciBpcyBzZXQgdG8gYW4gaW50ZWdlciB0aGVuIHRoZSBwcm9ncmVzcyBiYXIgd2lsbCB1c2UgdGhhdCwKKyAgICBvdGhlcndpc2UgaXQgd2lsbCBhdHRlbXB0IHRvIGRldGVybWluZSB0aGUgdGVybWluYWwgd2lkdGggZmFsbGluZyBiYWNrIHRvCisgICAgODAgY29sdW1ucyBpZiB0aGUgd2lkdGggY2Fubm90IGJlIGRldGVybWluZWQuCisKKyAgICBXaGVuIGltcGxlbWVudGluZyBhIHdpZGdldCdzIHVwZGF0ZSBtZXRob2QgeW91IGFyZSBwYXNzZWQgYSByZWZlcmVuY2UgdG8KKyAgICB0aGUgY3VycmVudCBwcm9ncmVzcyBiYXIuIEFzIGEgcmVzdWx0LCB5b3UgaGF2ZSBhY2Nlc3MgdG8gdGhlCisgICAgUHJvZ3Jlc3NCYXIncyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzLiBBbHRob3VnaCB0aGVyZSBpcyBub3RoaW5nIHByZXZlbnRpbmcKKyAgICB5b3UgZnJvbSBjaGFuZ2luZyB0aGUgUHJvZ3Jlc3NCYXIgeW91IHNob3VsZCB0cmVhdCBpdCBhcyByZWFkIG9ubHkuCisKKyAgICBVc2VmdWwgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyBpbmNsdWRlIChQdWJsaWMgQVBJKToKKyAgICAgLSBjdXJydmFsOiBjdXJyZW50IHByb2dyZXNzICgwIDw9IGN1cnJ2YWwgPD0gbWF4dmFsKQorICAgICAtIG1heHZhbDogbWF4aW11bSAoYW5kIGZpbmFsKSB2YWx1ZQorICAgICAtIGZpbmlzaGVkOiBUcnVlIGlmIHRoZSBiYXIgaGFzIGZpbmlzaGVkIChyZWFjaGVkIDEwMCUpCisgICAgIC0gc3RhcnRfdGltZTogdGhlIHRpbWUgd2hlbiBzdGFydCgpIG1ldGhvZCBvZiBQcm9ncmVzc0JhciB3YXMgY2FsbGVkCisgICAgIC0gc2Vjb25kc19lbGFwc2VkOiBzZWNvbmRzIGVsYXBzZWQgc2luY2Ugc3RhcnRfdGltZSBhbmQgbGFzdCBjYWxsIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUKKyAgICAgLSBwZXJjZW50YWdlKCk6IHByb2dyZXNzIGluIHBlcmNlbnQgWzAuLjEwMF0KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgnY3VycnZhbCcsICdmZCcsICdmaW5pc2hlZCcsICdsYXN0X3VwZGF0ZV90aW1lJywKKyAgICAgICAgICAgICAgICAgJ2xlZnRfanVzdGlmeScsICdtYXh2YWwnLCAnbmV4dF91cGRhdGUnLCAnbnVtX2ludGVydmFscycsCisgICAgICAgICAgICAgICAgICdwb2xsJywgJ3NlY29uZHNfZWxhcHNlZCcsICdzaWduYWxfc2V0JywgJ3N0YXJ0X3RpbWUnLAorICAgICAgICAgICAgICAgICAndGVybV93aWR0aCcsICd1cGRhdGVfaW50ZXJ2YWwnLCAnd2lkZ2V0cycsICdfdGltZV9zZW5zaXRpdmUnLAorICAgICAgICAgICAgICAgICAnX19pdGVyYWJsZScpCisKKyAgICBfREVGQVVMVF9NQVhWQUwgPSAxMDAKKyAgICBfREVGQVVMVF9URVJNU0laRSA9IDgwCisgICAgX0RFRkFVTFRfV0lER0VUUyA9IFt3aWRnZXRzLlBlcmNlbnRhZ2UoKSwgJyAnLCB3aWRnZXRzLkJhcigpXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHZhbD1Ob25lLCB3aWRnZXRzPU5vbmUsIHRlcm1fd2lkdGg9Tm9uZSwgcG9sbD0xLAorICAgICAgICAgICAgICAgICBsZWZ0X2p1c3RpZnk9VHJ1ZSwgZmQ9c3lzLnN0ZGVycik6CisgICAgICAgICIiIkluaXRpYWxpemVzIGEgcHJvZ3Jlc3MgYmFyIHdpdGggc2FuZSBkZWZhdWx0cy4iIiIKKworICAgICAgICAjIERvbid0IHNoYXJlIGEgcmVmZXJlbmNlIHdpdGggYW55IG90aGVyIHByb2dyZXNzIGJhcnMKKyAgICAgICAgaWYgd2lkZ2V0cyBpcyBOb25lOgorICAgICAgICAgICAgd2lkZ2V0cyA9IGxpc3Qoc2VsZi5fREVGQVVMVF9XSURHRVRTKQorCisgICAgICAgIHNlbGYubWF4dmFsID0gbWF4dmFsCisgICAgICAgIHNlbGYud2lkZ2V0cyA9IHdpZGdldHMKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgICAgIHNlbGYubGVmdF9qdXN0aWZ5ID0gbGVmdF9qdXN0aWZ5CisKKyAgICAgICAgc2VsZi5zaWduYWxfc2V0ID0gRmFsc2UKKyAgICAgICAgaWYgdGVybV93aWR0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVybV93aWR0aCA9IHRlcm1fd2lkdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcmVzaXplKE5vbmUsIE5vbmUpCisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNlbGYuX2hhbmRsZV9yZXNpemUpCisgICAgICAgICAgICAgICAgc2VsZi5zaWduYWxfc2V0ID0gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IChTeXN0ZW1FeGl0LCBLZXlib2FyZEludGVycnVwdCk6IHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcHJpbnQoIkRFQlVHIDUgJXMiICUgZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRlcm1fd2lkdGggPSBzZWxmLl9lbnZfc2l6ZSgpCisKKyAgICAgICAgc2VsZi5fX2l0ZXJhYmxlID0gTm9uZQorICAgICAgICBzZWxmLl91cGRhdGVfd2lkZ2V0cygpCisgICAgICAgIHNlbGYuY3VycnZhbCA9IDAKKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYubGFzdF91cGRhdGVfdGltZSA9IE5vbmUKKyAgICAgICAgc2VsZi5wb2xsID0gcG9sbAorICAgICAgICBzZWxmLnNlY29uZHNfZWxhcHNlZCA9IDAKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gTm9uZQorICAgICAgICBzZWxmLnVwZGF0ZV9pbnRlcnZhbCA9IDEKKyAgICAgICAgc2VsZi5uZXh0X3VwZGF0ZSA9IDAKKworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgIiIiVXNlIGEgUHJvZ3Jlc3NCYXIgdG8gaXRlcmF0ZSB0aHJvdWdoIGFuIGl0ZXJhYmxlLiIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubWF4dmFsID0gbGVuKGl0ZXJhYmxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBzZWxmLm1heHZhbCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYubWF4dmFsID0gVW5rbm93bkxlbmd0aAorCisgICAgICAgIHNlbGYuX19pdGVyYWJsZSA9IGl0ZXIoaXRlcmFibGUpCisgICAgICAgIHJldHVybiBzZWxmCisKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IG5leHQoc2VsZi5fX2l0ZXJhYmxlKQorICAgICAgICAgICAgaWYgc2VsZi5zdGFydF90aW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGFydCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlKHNlbGYuY3VycnZhbCArIDEpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBpZiBzZWxmLnN0YXJ0X3RpbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuZmluaXNoKCkKKyAgICAgICAgICAgIHJhaXNlCisKKworICAgICMgQ3JlYXRlIGFuIGFsaWFzIHNvIHRoYXQgUHl0aG9uIDIueCB3b24ndCBjb21wbGFpbiBhYm91dCBub3QgYmVpbmcKKyAgICAjIGFuIGl0ZXJhdG9yLgorICAgIG5leHQgPSBfX25leHRfXworCisKKyAgICBkZWYgX2Vudl9zaXplKHNlbGYpOgorICAgICAgICAiIiJUcmllcyB0byBmaW5kIHRoZSB0ZXJtX3dpZHRoIGZyb20gdGhlIGVudmlyb25tZW50LiIiIgorCisgICAgICAgIHJldHVybiBpbnQob3MuZW52aXJvbi5nZXQoJ0NPTFVNTlMnLCBzZWxmLl9ERUZBVUxUX1RFUk1TSVpFKSkgLSAxCisKKworICAgIGRlZiBfaGFuZGxlX3Jlc2l6ZShzZWxmLCBzaWdudW09Tm9uZSwgZnJhbWU9Tm9uZSk6CisgICAgICAgICIiIlRyaWVzIHRvIGNhdGNoIHJlc2l6ZSBzaWduYWxzIHNlbnQgZnJvbSB0aGUgdGVybWluYWwuIiIiCisKKyAgICAgICAgaCwgdyA9IGFycmF5KCdoJywgaW9jdGwoc2VsZi5mZCwgdGVybWlvcy5USU9DR1dJTlNaLCAnXDAnICogOCkpWzoyXQorICAgICAgICBzZWxmLnRlcm1fd2lkdGggPSB3CisKKworICAgIGRlZiBwZXJjZW50YWdlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuIiIiCisgICAgICAgIGlmIHNlbGYuY3VycnZhbCA+PSBzZWxmLm1heHZhbDoKKyAgICAgICAgICAgIHJldHVybiAxMDAuMAorICAgICAgICByZXR1cm4gKHNlbGYuY3VycnZhbCAqIDEwMC4wIC8gc2VsZi5tYXh2YWwpIGlmIHNlbGYubWF4dmFsIGVsc2UgMTAwLjAwCisKKyAgICBwZXJjZW50ID0gcHJvcGVydHkocGVyY2VudGFnZSkKKworCisgICAgZGVmIF9mb3JtYXRfd2lkZ2V0cyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZXhwYW5kaW5nID0gW10KKyAgICAgICAgd2lkdGggPSBzZWxmLnRlcm1fd2lkdGgKKworICAgICAgICBmb3IgaW5kZXgsIHdpZGdldCBpbiBlbnVtZXJhdGUoc2VsZi53aWRnZXRzKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uod2lkZ2V0LCB3aWRnZXRzLldpZGdldEhGaWxsKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHdpZGdldCkKKyAgICAgICAgICAgICAgICBleHBhbmRpbmcuaW5zZXJ0KDAsIGluZGV4KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3aWRnZXQgPSB3aWRnZXRzLmZvcm1hdF91cGRhdGFibGUod2lkZ2V0LCBzZWxmKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQod2lkZ2V0KQorICAgICAgICAgICAgICAgIHdpZHRoIC09IGxlbih3aWRnZXQpCisKKyAgICAgICAgY291bnQgPSBsZW4oZXhwYW5kaW5nKQorICAgICAgICB3aGlsZSBjb3VudDoKKyAgICAgICAgICAgIHBvcnRpb24gPSBtYXgoaW50KG1hdGguY2VpbCh3aWR0aCAqIDEuIC8gY291bnQpKSwgMCkKKyAgICAgICAgICAgIGluZGV4ID0gZXhwYW5kaW5nLnBvcCgpCisgICAgICAgICAgICBjb3VudCAtPSAxCisKKyAgICAgICAgICAgIHdpZGdldCA9IHJlc3VsdFtpbmRleF0udXBkYXRlKHNlbGYsIHBvcnRpb24pCisgICAgICAgICAgICB3aWR0aCAtPSBsZW4od2lkZ2V0KQorICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IHdpZGdldAorCisgICAgICAgIHJldHVybiByZXN1bHQKKworCisgICAgZGVmIF9mb3JtYXRfbGluZShzZWxmKToKKyAgICAgICAgIiIiSm9pbnMgdGhlIHdpZGdldHMgYW5kIGp1c3RpZmllcyB0aGUgbGluZS4iIiIKKworICAgICAgICB3aWRnZXRzID0gJycuam9pbihzZWxmLl9mb3JtYXRfd2lkZ2V0cygpKQorCisgICAgICAgIGlmIHNlbGYubGVmdF9qdXN0aWZ5OiByZXR1cm4gd2lkZ2V0cy5sanVzdChzZWxmLnRlcm1fd2lkdGgpCisgICAgICAgIGVsc2U6IHJldHVybiB3aWRnZXRzLnJqdXN0KHNlbGYudGVybV93aWR0aCkKKworCisgICAgZGVmIF9uZWVkX3VwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBQcm9ncmVzc0JhciBzaG91bGQgcmVkcmF3IHRoZSBsaW5lLiIiIgorICAgICAgICBpZiBzZWxmLmN1cnJ2YWwgPj0gc2VsZi5uZXh0X3VwZGF0ZSBvciBzZWxmLmZpbmlzaGVkOiByZXR1cm4gVHJ1ZQorCisgICAgICAgIGRlbHRhID0gdGltZS50aW1lKCkgLSBzZWxmLmxhc3RfdXBkYXRlX3RpbWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWVfc2Vuc2l0aXZlIGFuZCBkZWx0YSA+IHNlbGYucG9sbAorCisKKyAgICBkZWYgX3VwZGF0ZV93aWRnZXRzKHNlbGYpOgorICAgICAgICAiIiJDaGVja3MgYWxsIHdpZGdldHMgZm9yIHRoZSB0aW1lIHNlbnNpdGl2ZSBiaXQuIiIiCisKKyAgICAgICAgc2VsZi5fdGltZV9zZW5zaXRpdmUgPSBhbnkoZ2V0YXR0cih3LCAnVElNRV9TRU5TSVRJVkUnLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3IGluIHNlbGYud2lkZ2V0cykKKworCisgICAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgIiIiVXBkYXRlcyB0aGUgUHJvZ3Jlc3NCYXIgdG8gYSBuZXcgdmFsdWUuIiIiCisKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmUgYW5kIHZhbHVlIGlzIG5vdCBVbmtub3duTGVuZ3RoOgorICAgICAgICAgICAgaWYgKHNlbGYubWF4dmFsIGlzIG5vdCBVbmtub3duTGVuZ3RoCisgICAgICAgICAgICAgICAgYW5kIG5vdCAwIDw9IHZhbHVlIDw9IHNlbGYubWF4dmFsKToKKworICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZhbHVlIG91dCBvZiByYW5nZScpCisKKyAgICAgICAgICAgIHNlbGYuY3VycnZhbCA9IHZhbHVlCisKKworICAgICAgICBpZiBub3Qgc2VsZi5fbmVlZF91cGRhdGUoKTogcmV0dXJuCisgICAgICAgIGlmIHNlbGYuc3RhcnRfdGltZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdZb3UgbXVzdCBjYWxsICJzdGFydCIgYmVmb3JlIGNhbGxpbmcgInVwZGF0ZSInKQorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuc2Vjb25kc19lbGFwc2VkID0gbm93IC0gc2VsZi5zdGFydF90aW1lCisgICAgICAgIHNlbGYubmV4dF91cGRhdGUgPSBzZWxmLmN1cnJ2YWwgKyBzZWxmLnVwZGF0ZV9pbnRlcnZhbAorICAgICAgICBvdXRwdXQgPSBzZWxmLl9mb3JtYXRfbGluZSgpCisgICAgICAgIHNlbGYuZmQud3JpdGUob3V0cHV0ICsgJ1xyJykKKyAgICAgICAgc2VsZi5mZC5mbHVzaCgpCisgICAgICAgIHNlbGYubGFzdF91cGRhdGVfdGltZSA9IG5vdworICAgICAgICByZXR1cm4gb3V0cHV0CisKKworICAgIGRlZiBzdGFydChzZWxmLCB1cGRhdGU9VHJ1ZSk6CisgICAgICAgICIiIlN0YXJ0cyBtZWFzdXJpbmcgdGltZSwgYW5kIHByaW50cyB0aGUgYmFyIGF0IDAlLgorCisgICAgICAgIEl0IHJldHVybnMgc2VsZiBzbyB5b3UgY2FuIHVzZSBpdCBsaWtlIHRoaXM6CisgICAgICAgID4+PiBwYmFyID0gUHJvZ3Jlc3NCYXIoKS5zdGFydCgpCisgICAgICAgID4+PiBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAuLi4gICAgIyBkbyBzb21ldGhpbmcKKyAgICAgICAgLi4uICAgIHBiYXIudXBkYXRlKGkrMSkKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBwYmFyLmZpbmlzaCgpCisgICAgICAgICIiIgorCisgICAgICAgIGlmIHNlbGYubWF4dmFsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1heHZhbCA9IHNlbGYuX0RFRkFVTFRfTUFYVkFMCisKKyAgICAgICAgc2VsZi5udW1faW50ZXJ2YWxzID0gbWF4KDEwMCwgc2VsZi50ZXJtX3dpZHRoKQorICAgICAgICBzZWxmLm5leHRfdXBkYXRlID0gMAorCisgICAgICAgIGlmIHNlbGYubWF4dmFsIGlzIG5vdCBVbmtub3duTGVuZ3RoOgorICAgICAgICAgICAgaWYgc2VsZi5tYXh2YWwgPCAwOiByYWlzZSBWYWx1ZUVycm9yKCdWYWx1ZSBvdXQgb2YgcmFuZ2UnKQorICAgICAgICAgICAgc2VsZi51cGRhdGVfaW50ZXJ2YWwgPSBzZWxmLm1heHZhbCAvIHNlbGYubnVtX2ludGVydmFscworCisKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgdXBkYXRlOgorICAgICAgICAgICAgc2VsZi5sYXN0X3VwZGF0ZV90aW1lID0gc2VsZi5zdGFydF90aW1lCisgICAgICAgICAgICBzZWxmLnVwZGF0ZSgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sYXN0X3VwZGF0ZV90aW1lID0gMAorCisgICAgICAgIHJldHVybiBzZWxmCisKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgICIiIlB1dHMgdGhlIFByb2dyZXNzQmFyIGJhciBpbiB0aGUgZmluaXNoZWQgc3RhdGUuIiIiCisKKyAgICAgICAgaWYgc2VsZi5maW5pc2hlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmZpbmlzaGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnVwZGF0ZShzZWxmLm1heHZhbCkKKyAgICAgICAgc2VsZi5mZC53cml0ZSgnXG4nKQorICAgICAgICBpZiBzZWxmLnNpZ25hbF9zZXQ6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdXSU5DSCwgc2lnbmFsLlNJR19ERkwpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvd2lkZ2V0cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci93aWRnZXRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Mjg1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIvd2lkZ2V0cy5weQpAQCAtMCwwICsxLDM5MSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMKKyMgcHJvZ3Jlc3NiYXIgIC0gVGV4dCBwcm9ncmVzcyBiYXIgbGlicmFyeSBmb3IgUHl0aG9uLgorIyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlsdG9uIFZvbHBhdG8KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisiIiJEZWZhdWx0IFByb2dyZXNzQmFyIHdpZGdldHMuIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KKworaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgbWF0aAorCit0cnk6CisgICAgZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgQWJzdHJhY3RXaWRnZXQgPSBvYmplY3QKKyAgICBhYnN0cmFjdG1ldGhvZCA9IGxhbWJkYSBmbjogZm4KK2Vsc2U6CisgICAgQWJzdHJhY3RXaWRnZXQgPSBBQkNNZXRhKCdBYnN0cmFjdFdpZGdldCcsIChvYmplY3QsKSwge30pCisKKworZGVmIGZvcm1hdF91cGRhdGFibGUodXBkYXRhYmxlLCBwYmFyKToKKyAgICBpZiBoYXNhdHRyKHVwZGF0YWJsZSwgJ3VwZGF0ZScpOiByZXR1cm4gdXBkYXRhYmxlLnVwZGF0ZShwYmFyKQorICAgIGVsc2U6IHJldHVybiB1cGRhdGFibGUKKworCitjbGFzcyBXaWRnZXQoQWJzdHJhY3RXaWRnZXQpOgorICAgICIiIlRoZSBiYXNlIGNsYXNzIGZvciBhbGwgd2lkZ2V0cy4KKworICAgIFRoZSBQcm9ncmVzc0JhciB3aWxsIGNhbGwgdGhlIHdpZGdldCdzIHVwZGF0ZSB2YWx1ZSB3aGVuIHRoZSB3aWRnZXQgc2hvdWxkCisgICAgYmUgdXBkYXRlZC4gVGhlIHdpZGdldCdzIHNpemUgbWF5IGNoYW5nZSBiZXR3ZWVuIGNhbGxzLCBidXQgdGhlIHdpZGdldCBtYXkKKyAgICBkaXNwbGF5IGluY29ycmVjdGx5IGlmIHRoZSBzaXplIGNoYW5nZXMgZHJhc3RpY2FsbHkgYW5kIHJlcGVhdGVkbHkuCisKKyAgICBUaGUgYm9vbGVhbiBUSU1FX1NFTlNJVElWRSBpbmZvcm1zIHRoZSBQcm9ncmVzc0JhciB0aGF0IGl0IHNob3VsZCBiZQorICAgIHVwZGF0ZWQgbW9yZSBvZnRlbiBiZWNhdXNlIGl0IGlzIHRpbWUgc2Vuc2l0aXZlLgorICAgICIiIgorCisgICAgVElNRV9TRU5TSVRJVkUgPSBGYWxzZQorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICAiIiJVcGRhdGVzIHRoZSB3aWRnZXQuCisKKyAgICAgICAgcGJhciAtIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIFByb2dyZXNzQmFyCisgICAgICAgICIiIgorCisKK2NsYXNzIFdpZGdldEhGaWxsKFdpZGdldCk6CisgICAgIiIiVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCB2YXJpYWJsZSB3aWR0aCB3aWRnZXRzLgorCisgICAgVGhpcyB3aWRnZXQgaXMgbXVjaCBsaWtlIHRoZSBcXGhmaWxsIGNvbW1hbmQgaW4gVGVYLCBpdCB3aWxsIGV4cGFuZCB0bworICAgIGZpbGwgdGhlIGxpbmUuIFlvdSBjYW4gdXNlIG1vcmUgdGhhbiBvbmUgaW4gdGhlIHNhbWUgbGluZSwgYW5kIHRoZXkgd2lsbAorICAgIGFsbCBoYXZlIHRoZSBzYW1lIHdpZHRoLCBhbmQgdG9nZXRoZXIgd2lsbCBmaWxsIHRoZSBsaW5lLgorICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyLCB3aWR0aCk6CisgICAgICAgICIiIlVwZGF0ZXMgdGhlIHdpZGdldCBwcm92aWRpbmcgdGhlIHRvdGFsIHdpZHRoIHRoZSB3aWRnZXQgbXVzdCBmaWxsLgorCisgICAgICAgIHBiYXIgLSBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbGluZyBQcm9ncmVzc0JhcgorICAgICAgICB3aWR0aCAtIFRoZSB0b3RhbCB3aWR0aCB0aGUgd2lkZ2V0IG11c3QgZmlsbAorICAgICAgICAiIiIKKworCitjbGFzcyBUaW1lcihXaWRnZXQpOgorICAgICIiIldpZGdldCB3aGljaCBkaXNwbGF5cyB0aGUgZWxhcHNlZCBzZWNvbmRzLiIiIgorCisgICAgX19zbG90c19fID0gKCdmb3JtYXRfc3RyaW5nJywpCisgICAgVElNRV9TRU5TSVRJVkUgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0PSdFbGFwc2VkIFRpbWU6ICVzJyk6CisgICAgICAgIHNlbGYuZm9ybWF0X3N0cmluZyA9IGZvcm1hdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmb3JtYXRfdGltZShzZWNvbmRzKToKKyAgICAgICAgIiIiRm9ybWF0cyB0aW1lIGFzIHRoZSBzdHJpbmcgIkhIOk1NOlNTIi4iIiIKKworICAgICAgICByZXR1cm4gc3RyKGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPWludChzZWNvbmRzKSkpCisKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgICIiIlVwZGF0ZXMgdGhlIHdpZGdldCB0byBzaG93IHRoZSBlbGFwc2VkIHRpbWUuIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0X3N0cmluZyAlIHNlbGYuZm9ybWF0X3RpbWUocGJhci5zZWNvbmRzX2VsYXBzZWQpCisKKworY2xhc3MgRVRBKFRpbWVyKToKKyAgICAiIiJXaWRnZXQgd2hpY2ggYXR0ZW1wdHMgdG8gZXN0aW1hdGUgdGhlIHRpbWUgb2YgYXJyaXZhbC4iIiIKKworICAgIFRJTUVfU0VOU0lUSVZFID0gVHJ1ZQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgIiIiVXBkYXRlcyB0aGUgd2lkZ2V0IHRvIHNob3cgdGhlIEVUQSBvciB0b3RhbCB0aW1lIHdoZW4gZmluaXNoZWQuIiIiCisKKyAgICAgICAgaWYgcGJhci5jdXJydmFsID09IDA6CisgICAgICAgICAgICByZXR1cm4gJ0VUQTogIC0tOi0tOi0tJworICAgICAgICBlbGlmIHBiYXIuZmluaXNoZWQ6CisgICAgICAgICAgICByZXR1cm4gJ1RpbWU6ICVzJyAlIHNlbGYuZm9ybWF0X3RpbWUocGJhci5zZWNvbmRzX2VsYXBzZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbGFwc2VkID0gcGJhci5zZWNvbmRzX2VsYXBzZWQKKyAgICAgICAgICAgIGV0YSA9IGVsYXBzZWQgKiBwYmFyLm1heHZhbCAvIHBiYXIuY3VycnZhbCAtIGVsYXBzZWQKKyAgICAgICAgICAgIHJldHVybiAnRVRBOiAgJXMnICUgc2VsZi5mb3JtYXRfdGltZShldGEpCisKKworY2xhc3MgQWRhcHRpdmVFVEEoVGltZXIpOgorICAgICIiIldpZGdldCB3aGljaCBhdHRlbXB0cyB0byBlc3RpbWF0ZSB0aGUgdGltZSBvZiBhcnJpdmFsLgorCisgICAgVXNlcyBhIHdlaWdodGVkIGF2ZXJhZ2Ugb2YgdHdvIGVzdGltYXRlczoKKyAgICAgIDEpIEVUQSBiYXNlZCBvbiB0aGUgdG90YWwgcHJvZ3Jlc3MgYW5kIHRpbWUgZWxhcHNlZCBzbyBmYXIKKyAgICAgIDIpIEVUQSBiYXNlZCBvbiB0aGUgcHJvZ3Jlc3MgYXMgcGVyIHRoZSBsYXN0IDEwIHVwZGF0ZSByZXBvcnRzCisKKyAgICBUaGUgd2VpZ2h0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgc28gdGhhdCB0byBiZWdpbiB3aXRoIHRoZQorICAgIHRvdGFsIHByb2dyZXNzIGlzIHVzZWQgYW5kIGF0IHRoZSBlbmQgb25seSB0aGUgbW9zdCByZWNlbnQgcHJvZ3Jlc3MgaXMKKyAgICB1c2VkLgorICAgICIiIgorCisgICAgVElNRV9TRU5TSVRJVkUgPSBUcnVlCisgICAgTlVNX1NBTVBMRVMgPSAxMAorCisgICAgZGVmIF91cGRhdGVfc2FtcGxlcyhzZWxmLCBjdXJydmFsLCBlbGFwc2VkKToKKyAgICAgICAgc2FtcGxlID0gKGN1cnJ2YWwsIGVsYXBzZWQpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdzYW1wbGVzJyk6CisgICAgICAgICAgICBzZWxmLnNhbXBsZXMgPSBbc2FtcGxlXSAqIChzZWxmLk5VTV9TQU1QTEVTICsgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2FtcGxlcy5hcHBlbmQoc2FtcGxlKQorICAgICAgICByZXR1cm4gc2VsZi5zYW1wbGVzLnBvcCgwKQorCisgICAgZGVmIF9ldGEoc2VsZiwgbWF4dmFsLCBjdXJydmFsLCBlbGFwc2VkKToKKyAgICAgICAgcmV0dXJuIGVsYXBzZWQgKiBtYXh2YWwgLyBmbG9hdChjdXJydmFsKSAtIGVsYXBzZWQKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgICIiIlVwZGF0ZXMgdGhlIHdpZGdldCB0byBzaG93IHRoZSBFVEEgb3IgdG90YWwgdGltZSB3aGVuIGZpbmlzaGVkLiIiIgorICAgICAgICBpZiBwYmFyLmN1cnJ2YWwgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnRVRBOiAgLS06LS06LS0nCisgICAgICAgIGVsaWYgcGJhci5maW5pc2hlZDoKKyAgICAgICAgICAgIHJldHVybiAnVGltZTogJXMnICUgc2VsZi5mb3JtYXRfdGltZShwYmFyLnNlY29uZHNfZWxhcHNlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVsYXBzZWQgPSBwYmFyLnNlY29uZHNfZWxhcHNlZAorICAgICAgICAgICAgY3VycnZhbDEsIGVsYXBzZWQxID0gc2VsZi5fdXBkYXRlX3NhbXBsZXMocGJhci5jdXJydmFsLCBlbGFwc2VkKQorICAgICAgICAgICAgZXRhID0gc2VsZi5fZXRhKHBiYXIubWF4dmFsLCBwYmFyLmN1cnJ2YWwsIGVsYXBzZWQpCisgICAgICAgICAgICBpZiBwYmFyLmN1cnJ2YWwgPiBjdXJydmFsMToKKyAgICAgICAgICAgICAgICBldGFzYW1wID0gc2VsZi5fZXRhKHBiYXIubWF4dmFsIC0gY3VycnZhbDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmFyLmN1cnJ2YWwgLSBjdXJydmFsMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgLSBlbGFwc2VkMSkKKyAgICAgICAgICAgICAgICB3ZWlnaHQgPSAocGJhci5jdXJydmFsIC8gZmxvYXQocGJhci5tYXh2YWwpKSAqKiAwLjUKKyAgICAgICAgICAgICAgICBldGEgPSAoMSAtIHdlaWdodCkgKiBldGEgKyB3ZWlnaHQgKiBldGFzYW1wCisgICAgICAgICAgICByZXR1cm4gJ0VUQTogICVzJyAlIHNlbGYuZm9ybWF0X3RpbWUoZXRhKQorCisKK2NsYXNzIEZpbGVUcmFuc2ZlclNwZWVkKFdpZGdldCk6CisgICAgIiIiV2lkZ2V0IGZvciBzaG93aW5nIHRoZSB0cmFuc2ZlciBzcGVlZCAodXNlZnVsIGZvciBmaWxlIHRyYW5zZmVycykuIiIiCisKKyAgICBGT1JNQVQgPSAnJTYuMmYgJXMlcy9zJworICAgIFBSRUZJWEVTID0gJyBrTUdUUEVaWScKKyAgICBfX3Nsb3RzX18gPSAoJ3VuaXQnLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1bml0PSdCJyk6CisgICAgICAgIHNlbGYudW5pdCA9IHVuaXQKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgICIiIlVwZGF0ZXMgdGhlIHdpZGdldCB3aXRoIHRoZSBjdXJyZW50IFNJIHByZWZpeGVkIHNwZWVkLiIiIgorCisgICAgICAgIGlmIHBiYXIuc2Vjb25kc19lbGFwc2VkIDwgMmUtNiBvciBwYmFyLmN1cnJ2YWwgPCAyZS02OiAjID1+IDAKKyAgICAgICAgICAgIHNjYWxlZCA9IHBvd2VyID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlZWQgPSBwYmFyLmN1cnJ2YWwgLyBwYmFyLnNlY29uZHNfZWxhcHNlZAorICAgICAgICAgICAgcG93ZXIgPSBpbnQobWF0aC5sb2coc3BlZWQsIDEwMDApKQorICAgICAgICAgICAgc2NhbGVkID0gc3BlZWQgLyAxMDAwLioqcG93ZXIKKworICAgICAgICByZXR1cm4gc2VsZi5GT1JNQVQgJSAoc2NhbGVkLCBzZWxmLlBSRUZJWEVTW3Bvd2VyXSwgc2VsZi51bml0KQorCisKK2NsYXNzIEFuaW1hdGVkTWFya2VyKFdpZGdldCk6CisgICAgIiIiQW4gYW5pbWF0ZWQgbWFya2VyIGZvciB0aGUgcHJvZ3Jlc3MgYmFyIHdoaWNoIGRlZmF1bHRzIHRvIGFwcGVhciBhcyBpZgorICAgIGl0IHdlcmUgcm90YXRpbmcuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ21hcmtlcnMnLCAnY3VybWFyaycpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya2Vycz0nfC8tXFwnKToKKyAgICAgICAgc2VsZi5tYXJrZXJzID0gbWFya2VycworICAgICAgICBzZWxmLmN1cm1hcmsgPSAtMQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgIiIiVXBkYXRlcyB0aGUgd2lkZ2V0IHRvIHNob3cgdGhlIG5leHQgbWFya2VyIG9yIHRoZSBmaXJzdCBtYXJrZXIgd2hlbgorICAgICAgICBmaW5pc2hlZCIiIgorCisgICAgICAgIGlmIHBiYXIuZmluaXNoZWQ6IHJldHVybiBzZWxmLm1hcmtlcnNbMF0KKworICAgICAgICBzZWxmLmN1cm1hcmsgPSAoc2VsZi5jdXJtYXJrICsgMSkgJSBsZW4oc2VsZi5tYXJrZXJzKQorICAgICAgICByZXR1cm4gc2VsZi5tYXJrZXJzW3NlbGYuY3VybWFya10KKworIyBBbGlhcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK1JvdGF0aW5nTWFya2VyID0gQW5pbWF0ZWRNYXJrZXIKKworCitjbGFzcyBDb3VudGVyKFdpZGdldCk6CisgICAgIiIiRGlzcGxheXMgdGhlIGN1cnJlbnQgY291bnQuIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ2Zvcm1hdF9zdHJpbmcnLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb3JtYXQ9JyVkJyk6CisgICAgICAgIHNlbGYuZm9ybWF0X3N0cmluZyA9IGZvcm1hdAorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0X3N0cmluZyAlIHBiYXIuY3VycnZhbAorCisKK2NsYXNzIFBlcmNlbnRhZ2UoV2lkZ2V0KToKKyAgICAiIiJEaXNwbGF5cyB0aGUgY3VycmVudCBwZXJjZW50YWdlIGFzIGEgbnVtYmVyIHdpdGggYSBwZXJjZW50IHNpZ24uIiIiCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICByZXR1cm4gJyUzZCUlJyAlIHBiYXIucGVyY2VudGFnZSgpCisKKworY2xhc3MgRm9ybWF0TGFiZWwoVGltZXIpOgorICAgICIiIkRpc3BsYXlzIGEgZm9ybWF0dGVkIGxhYmVsLiIiIgorCisgICAgbWFwcGluZyA9IHsKKyAgICAgICAgJ2VsYXBzZWQnOiAoJ3NlY29uZHNfZWxhcHNlZCcsIFRpbWVyLmZvcm1hdF90aW1lKSwKKyAgICAgICAgJ2ZpbmlzaGVkJzogKCdmaW5pc2hlZCcsIE5vbmUpLAorICAgICAgICAnbGFzdF91cGRhdGUnOiAoJ2xhc3RfdXBkYXRlX3RpbWUnLCBOb25lKSwKKyAgICAgICAgJ21heCc6ICgnbWF4dmFsJywgTm9uZSksCisgICAgICAgICdzZWNvbmRzJzogKCdzZWNvbmRzX2VsYXBzZWQnLCBOb25lKSwKKyAgICAgICAgJ3N0YXJ0JzogKCdzdGFydF90aW1lJywgTm9uZSksCisgICAgICAgICd2YWx1ZSc6ICgnY3VycnZhbCcsIE5vbmUpCisgICAgfQorCisgICAgX19zbG90c19fID0gKCdmb3JtYXRfc3RyaW5nJywpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdCk6CisgICAgICAgIHNlbGYuZm9ybWF0X3N0cmluZyA9IGZvcm1hdAorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgY29udGV4dCA9IHt9CisgICAgICAgIGZvciBuYW1lLCAoa2V5LCB0cmFuc2Zvcm0pIGluIHNlbGYubWFwcGluZy5pdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihwYmFyLCBrZXkpCisKKyAgICAgICAgICAgICAgICBpZiB0cmFuc2Zvcm0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICBjb250ZXh0W25hbWVdID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgIGNvbnRleHRbbmFtZV0gPSB0cmFuc2Zvcm0odmFsdWUpCisgICAgICAgICAgICBleGNlcHQ6IHBhc3MKKworICAgICAgICByZXR1cm4gc2VsZi5mb3JtYXRfc3RyaW5nICUgY29udGV4dAorCisKK2NsYXNzIFNpbXBsZVByb2dyZXNzKFdpZGdldCk6CisgICAgIiIiUmV0dXJucyBwcm9ncmVzcyBhcyBhIGNvdW50IG9mIHRoZSB0b3RhbCAoZS5nLjogIjUgb2YgNDciKS4iIiIKKworICAgIF9fc2xvdHNfXyA9ICgnc2VwJywpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VwPScgb2YgJyk6CisgICAgICAgIHNlbGYuc2VwID0gc2VwCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICByZXR1cm4gJyVkJXMlZCcgJSAocGJhci5jdXJydmFsLCBzZWxmLnNlcCwgcGJhci5tYXh2YWwpCisKKworY2xhc3MgQmFyKFdpZGdldEhGaWxsKToKKyAgICAiIiJBIHByb2dyZXNzIGJhciB3aGljaCBzdHJldGNoZXMgdG8gZmlsbCB0aGUgbGluZS4iIiIKKworICAgIF9fc2xvdHNfXyA9ICgnbWFya2VyJywgJ2xlZnQnLCAncmlnaHQnLCAnZmlsbCcsICdmaWxsX2xlZnQnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmtlcj0nIycsIGxlZnQ9J3wnLCByaWdodD0nfCcsIGZpbGw9JyAnLAorICAgICAgICAgICAgICAgICBmaWxsX2xlZnQ9VHJ1ZSk6CisgICAgICAgICIiIkNyZWF0ZXMgYSBjdXN0b21pemFibGUgcHJvZ3Jlc3MgYmFyLgorCisgICAgICAgIG1hcmtlciAtIHN0cmluZyBvciB1cGRhdGFibGUgb2JqZWN0IHRvIHVzZSBhcyBhIG1hcmtlcgorICAgICAgICBsZWZ0IC0gc3RyaW5nIG9yIHVwZGF0YWJsZSBvYmplY3QgdG8gdXNlIGFzIGEgbGVmdCBib3JkZXIKKyAgICAgICAgcmlnaHQgLSBzdHJpbmcgb3IgdXBkYXRhYmxlIG9iamVjdCB0byB1c2UgYXMgYSByaWdodCBib3JkZXIKKyAgICAgICAgZmlsbCAtIGNoYXJhY3RlciB0byB1c2UgZm9yIHRoZSBlbXB0eSBwYXJ0IG9mIHRoZSBwcm9ncmVzcyBiYXIKKyAgICAgICAgZmlsbF9sZWZ0IC0gd2hldGhlciB0byBmaWxsIGZyb20gdGhlIGxlZnQgb3IgdGhlIHJpZ2h0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLm1hcmtlciA9IG1hcmtlcgorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAorICAgICAgICBzZWxmLmZpbGwgPSBmaWxsCisgICAgICAgIHNlbGYuZmlsbF9sZWZ0ID0gZmlsbF9sZWZ0CisKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgorICAgICAgICAiIiJVcGRhdGVzIHRoZSBwcm9ncmVzcyBiYXIgYW5kIGl0cyBzdWJjb21wb25lbnRzLiIiIgorCisgICAgICAgIGxlZnQsIG1hcmtlZCwgcmlnaHQgPSAoZm9ybWF0X3VwZGF0YWJsZShpLCBwYmFyKSBmb3IgaSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmxlZnQsIHNlbGYubWFya2VyLCBzZWxmLnJpZ2h0KSkKKworICAgICAgICB3aWR0aCAtPSBsZW4obGVmdCkgKyBsZW4ocmlnaHQpCisgICAgICAgICMgTWFya2VkIG11c3QgKmFsd2F5cyogaGF2ZSBsZW5ndGggb2YgMQorICAgICAgICBpZiBwYmFyLm1heHZhbDoKKyAgICAgICAgICBtYXJrZWQgKj0gaW50KHBiYXIuY3VycnZhbCAvIHBiYXIubWF4dmFsICogd2lkdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgbWFya2VkID0gJycKKworICAgICAgICBpZiBzZWxmLmZpbGxfbGVmdDoKKyAgICAgICAgICAgIHJldHVybiAnJXMlcyVzJyAlIChsZWZ0LCBtYXJrZWQubGp1c3Qod2lkdGgsIHNlbGYuZmlsbCksIHJpZ2h0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICclcyVzJXMnICUgKGxlZnQsIG1hcmtlZC5yanVzdCh3aWR0aCwgc2VsZi5maWxsKSwgcmlnaHQpCisKKworY2xhc3MgUmV2ZXJzZUJhcihCYXIpOgorICAgICIiIkEgYmFyIHdoaWNoIGhhcyBhIG1hcmtlciB3aGljaCBib3VuY2VzIGZyb20gc2lkZSB0byBzaWRlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmtlcj0nIycsIGxlZnQ9J3wnLCByaWdodD0nfCcsIGZpbGw9JyAnLAorICAgICAgICAgICAgICAgICBmaWxsX2xlZnQ9RmFsc2UpOgorICAgICAgICAiIiJDcmVhdGVzIGEgY3VzdG9taXphYmxlIHByb2dyZXNzIGJhci4KKworICAgICAgICBtYXJrZXIgLSBzdHJpbmcgb3IgdXBkYXRhYmxlIG9iamVjdCB0byB1c2UgYXMgYSBtYXJrZXIKKyAgICAgICAgbGVmdCAtIHN0cmluZyBvciB1cGRhdGFibGUgb2JqZWN0IHRvIHVzZSBhcyBhIGxlZnQgYm9yZGVyCisgICAgICAgIHJpZ2h0IC0gc3RyaW5nIG9yIHVwZGF0YWJsZSBvYmplY3QgdG8gdXNlIGFzIGEgcmlnaHQgYm9yZGVyCisgICAgICAgIGZpbGwgLSBjaGFyYWN0ZXIgdG8gdXNlIGZvciB0aGUgZW1wdHkgcGFydCBvZiB0aGUgcHJvZ3Jlc3MgYmFyCisgICAgICAgIGZpbGxfbGVmdCAtIHdoZXRoZXIgdG8gZmlsbCBmcm9tIHRoZSBsZWZ0IG9yIHRoZSByaWdodAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5tYXJrZXIgPSBtYXJrZXIKKyAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAorICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKKyAgICAgICAgc2VsZi5maWxsID0gZmlsbAorICAgICAgICBzZWxmLmZpbGxfbGVmdCA9IGZpbGxfbGVmdAorCisKK2NsYXNzIEJvdW5jaW5nQmFyKEJhcik6CisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyLCB3aWR0aCk6CisgICAgICAgICIiIlVwZGF0ZXMgdGhlIHByb2dyZXNzIGJhciBhbmQgaXRzIHN1YmNvbXBvbmVudHMuIiIiCisKKyAgICAgICAgbGVmdCwgbWFya2VyLCByaWdodCA9IChmb3JtYXRfdXBkYXRhYmxlKGksIHBiYXIpIGZvciBpIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubGVmdCwgc2VsZi5tYXJrZXIsIHNlbGYucmlnaHQpKQorCisgICAgICAgIHdpZHRoIC09IGxlbihsZWZ0KSArIGxlbihyaWdodCkKKworICAgICAgICBpZiBwYmFyLmZpbmlzaGVkOiByZXR1cm4gJyVzJXMlcycgJSAobGVmdCwgd2lkdGggKiBtYXJrZXIsIHJpZ2h0KQorCisgICAgICAgIHBvc2l0aW9uID0gaW50KHBiYXIuY3VycnZhbCAlICh3aWR0aCAqIDIgLSAxKSkKKyAgICAgICAgaWYgcG9zaXRpb24gPiB3aWR0aDogcG9zaXRpb24gPSB3aWR0aCAqIDIgLSBwb3NpdGlvbgorICAgICAgICBscGFkID0gc2VsZi5maWxsICogKHBvc2l0aW9uIC0gMSkKKyAgICAgICAgcnBhZCA9IHNlbGYuZmlsbCAqICh3aWR0aCAtIGxlbihtYXJrZXIpIC0gbGVuKGxwYWQpKQorCisgICAgICAgICMgU3dhcCBpZiB3ZSB3YW50IHRvIGJvdW5jZSB0aGUgb3RoZXIgd2F5CisgICAgICAgIGlmIG5vdCBzZWxmLmZpbGxfbGVmdDogcnBhZCwgbHBhZCA9IGxwYWQsIHJwYWQKKworICAgICAgICByZXR1cm4gJyVzJXMlcyVzJXMnICUgKGxlZnQsIGxwYWQsIG1hcmtlciwgcnBhZCwgcmlnaHQpCisKKworY2xhc3MgQm91bmNpbmdTbGlkZXIoQmFyKToKKyAgICAiIiIKKyAgICBBIHNsaWRlciB0aGF0IGJvdW5jZXMgYmFjayBhbmQgZm9ydGggaW4gcmVzcG9uc2UgdG8gdXBkYXRlKCkgY2FsbHMKKyAgICB3aXRob3V0IHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIHZhbHVlLiBCYXNlZCBvbiBhIGNvbWJpbmF0aW9uIG9mCisgICAgQm91bmNpbmdCYXIgZnJvbSBhIG5ld2VyIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUgYW5kIFJvdGF0aW5nTWFya2VyLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrZXI9Jzw9PicpOgorICAgICAgICBzZWxmLmN1cm1hcmsgPSAtMQorICAgICAgICBzZWxmLmZvcndhcmQgPSBUcnVlCisgICAgICAgIEJhci5fX2luaXRfXyhzZWxmLCBtYXJrZXI9bWFya2VyKQorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgorICAgICAgICBsZWZ0LCBtYXJrZXIsIHJpZ2h0ID0gKGZvcm1hdF91cGRhdGFibGUoaSwgcGJhcikgZm9yIGkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5sZWZ0LCBzZWxmLm1hcmtlciwgc2VsZi5yaWdodCkpCisKKyAgICAgICAgd2lkdGggLT0gbGVuKGxlZnQpICsgbGVuKHJpZ2h0KQorICAgICAgICBpZiB3aWR0aCA8IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBpZiBwYmFyLmZpbmlzaGVkOiByZXR1cm4gJyVzJXMlcycgJSAobGVmdCwgd2lkdGggKiAnPScsIHJpZ2h0KQorCisgICAgICAgIHNlbGYuY3VybWFyayA9IHNlbGYuY3VybWFyayArIDEKKyAgICAgICAgcG9zaXRpb24gPSBpbnQoc2VsZi5jdXJtYXJrICUgKHdpZHRoICogMiAtIDEpKQorICAgICAgICBpZiBwb3NpdGlvbiArIGxlbihtYXJrZXIpID4gd2lkdGg6CisgICAgICAgICAgICBzZWxmLmZvcndhcmQgPSBub3Qgc2VsZi5mb3J3YXJkCisgICAgICAgICAgICBzZWxmLmN1cm1hcmsgPSAxCisgICAgICAgICAgICBwb3NpdGlvbiA9IDEKKyAgICAgICAgbHBhZCA9ICcgJyAqIChwb3NpdGlvbiAtIDEpCisgICAgICAgIHJwYWQgPSAnICcgKiAod2lkdGggLSBsZW4obWFya2VyKSAtIGxlbihscGFkKSkKKworICAgICAgICBpZiBub3Qgc2VsZi5mb3J3YXJkOgorICAgICAgICAgICAgdGVtcCA9IGxwYWQKKyAgICAgICAgICAgIGxwYWQgPSBycGFkCisgICAgICAgICAgICBycGFkID0gdGVtcAorICAgICAgICByZXR1cm4gJyVzJXMlcyVzJXMnICUgKGxlZnQsIGxwYWQsIG1hcmtlciwgcnBhZCwgcmlnaHQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L2RiLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9kYi5weQppbmRleCAyYTg2MTg0Li40OTVkMDlmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L2RiLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvZGIucHkKQEAgLTI2MCw3ICsyNjAsNyBAQAogICAgICAgICBzZWxmLmNvbm5lY3Rpb24uY2xvc2UoKQogCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsdGJsbmFtZSk6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRibG5hbWUsIGJhc2VzdHJpbmcpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YmxuYW1lLCBzdHIpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0YmxuYW1lIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIG5vdCAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh0YmxuYW1lKSkKICAgICAgICAgaWYgdGJsbmFtZSBpbiBzZWxmLl90YWJsZXM6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L3NlcnYucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L3NlcnYucHkKaW5kZXggYWZmY2NkOS4uY2FmY2M4MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9zZXJ2LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvc2Vydi5weQpAQCAtMSwxMCArMSwxMCBAQAogaW1wb3J0IG9zLHN5cyxsb2dnaW5nCiBpbXBvcnQgc2lnbmFsLCB0aW1lCi1mcm9tIFNpbXBsZVhNTFJQQ1NlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyLCBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorZnJvbSB4bWxycGMuc2VydmVyIGltcG9ydCBTaW1wbGVYTUxSUENTZXJ2ZXIsIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCiBpbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgUXVldWUKK2ltcG9ydCBxdWV1ZQogaW1wb3J0IHNvY2tldAotaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgaW8KIAogdHJ5OgogICAgIGltcG9ydCBzcWxpdGUzCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIHNlbGYucmVnaXN0ZXJfZnVuY3Rpb24oc2VsZi5pbXBvcnRvbmUsICJpbXBvcnRvbmUiKQogICAgICAgICBzZWxmLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKIAotICAgICAgICBzZWxmLnJlcXVlc3RxdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5yZXF1ZXN0cXVldWUgPSBxdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0ID0gc2VsZi5wcm9jZXNzX3JlcXVlc3RfdGhyZWFkKQogICAgICAgICBzZWxmLmhhbmRsZXJ0aHJlYWQuZGFlbW9uID0gRmFsc2UKIApAQCAtODMsNyArODMsNyBAQAogICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykgPSBzZWxmLnJlcXVlc3RxdWV1ZS5nZXQoVHJ1ZSwgMzApCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBleGNlcHQgcXVldWUuRW1wdHk6CiAgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zeW5jX2lmX2RpcnR5KCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgdHJ5OgpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIFJldHVybnMgTm9uZSBpZiB0aGUgZGF0YWJhc2UgZW5naW5lIGRvZXMgbm90IHN1cHBvcnQgZHVtcGluZyB0bwogICAgICAgICBzY3JpcHQgb3IgaWYgc29tZSBvdGhlciBlcnJvciBpcyBlbmNvdW50ZXJlZCBpbiBwcm9jZXNzaW5nLgogICAgICAgICAiIiIKLSAgICAgICAgYnVmZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgYnVmZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi50YWJsZS5zeW5jKCkKICAgICAgICAgICAgIHNlbGYudGFibGUuZHVtcF9kYihidWZmKQpAQCAtMjQyLDggKzI0Miw4IEBACiAKICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBzaSA9IGZpbGUoJy9kZXYvbnVsbCcsICdyJykKLSAgICAgICAgc28gPSBmaWxlKHNlbGYubG9nZmlsZSwgJ2ErJykKKyAgICAgICAgc2kgPSBvcGVuKCcvZGV2L251bGwnLCAncicpCisgICAgICAgIHNvID0gb3BlbihzZWxmLmxvZ2ZpbGUsICdhKycpCiAgICAgICAgIHNlID0gc28KICAgICAgICAgb3MuZHVwMihzaS5maWxlbm8oKSxzeXMuc3RkaW4uZmlsZW5vKCkpCiAgICAgICAgIG9zLmR1cDIoc28uZmlsZW5vKCksc3lzLnN0ZG91dC5maWxlbm8oKSkKQEAgLTI2Myw3ICsyNjMsNyBAQAogCiAgICAgICAgICMgd3JpdGUgcGlkZmlsZQogICAgICAgICBwaWQgPSBzdHIob3MuZ2V0cGlkKCkpIAotICAgICAgICBwZiA9IGZpbGUoc2VsZi5waWRmaWxlLCAndycpCisgICAgICAgIHBmID0gb3BlbihzZWxmLnBpZGZpbGUsICd3JykKICAgICAgICAgcGYud3JpdGUoIiVzXG4iICUgcGlkKQogICAgICAgICBwZi5jbG9zZSgpCiAKQEAgLTMyMyw3ICszMjMsNyBAQAogICAgIGlwID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkKICAgICBwaWRmaWxlID0gUElEUFJFRklYICUgKGlwLCBwb3J0KQogICAgIHRyeToKLSAgICAgICAgcGYgPSBmaWxlKHBpZGZpbGUsJ3InKQorICAgICAgICBwZiA9IG9wZW4ocGlkZmlsZSwncicpCiAgICAgICAgIHBpZCA9IGludChwZi5yZWFkbGluZSgpLnN0cmlwKCkpCiAgICAgICAgIHBmLmNsb3NlKCkKICAgICBleGNlcHQgSU9FcnJvcjoKQEAgLTM1MCw3ICszNTAsNyBAQAogICAgIGlwID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkKICAgICBwaWRmaWxlID0gUElEUFJFRklYICUgKGlwLCBwb3J0KQogICAgIHRyeToKLSAgICAgICAgcGYgPSBmaWxlKHBpZGZpbGUsJ3InKQorICAgICAgICBwZiA9IG9wZW4ocGlkZmlsZSwncicpCiAgICAgICAgIHBpZCA9IGludChwZi5yZWFkbGluZSgpLnN0cmlwKCkpCiAgICAgICAgIHBmLmNsb3NlKCkKICAgICBleGNlcHQgSU9FcnJvcjoKQEAgLTQyMCw3ICs0MjAsNyBAQAogZGVmIGF1dG9fc3RhcnQoZCk6CiAgICAgZ2xvYmFsIHNpbmdsZXRvbgogCi0gICAgaG9zdF9wYXJhbXMgPSBmaWx0ZXIoTm9uZSwgKGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpKQorICAgIGhvc3RfcGFyYW1zID0gbGlzdChmaWx0ZXIoTm9uZSwgKGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpKSkKICAgICBpZiBub3QgaG9zdF9wYXJhbXM6CiAgICAgICAgIHJldHVybiBOb25lCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9weWlub3RpZnkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHlpbm90aWZ5LnB5CmluZGV4IDJkYWUwMDIuLjRlYjAzYjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9weWlub3RpZnkucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3B5aW5vdGlmeS5weQpAQCAtNDIsMTMgKzQyLDE0IEBACiAgICAgICAgIEBwYXJhbSB2ZXJzaW9uOiBDdXJyZW50IFB5dGhvbiB2ZXJzaW9uCiAgICAgICAgIEB0eXBlIHZlcnNpb246IHN0cmluZwogICAgICAgICAiIiIKLSAgICAgICAgZXJyID0gJ1B5dGhvbiAlcyBpcyB1bnN1cHBvcnRlZCwgcmVxdWlyZXMgYXQgbGVhc3QgUHl0aG9uIDIuNCcKLSAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwgZXJyICUgdmVyc2lvbikKKyAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdQeXRob24gJXMgaXMgdW5zdXBwb3J0ZWQsIHJlcXVpcmVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdCBsZWFzdCBQeXRob24gMy4wJykgJSB2ZXJzaW9uKQogCiAKICMgQ2hlY2sgUHl0aG9uIHZlcnNpb24KIGltcG9ydCBzeXMKLWlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDApOgogICAgIHJhaXNlIFVuc3VwcG9ydGVkUHl0aG9uVmVyc2lvbkVycm9yKHN5cy52ZXJzaW9uKQogCiAKQEAgLTY4LDYgKzY5LDggQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgcmUKIGltcG9ydCBhc3luY29yZQoraW1wb3J0IGdsb2IKK2ltcG9ydCBsb2NhbGUKIGltcG9ydCBzdWJwcm9jZXNzCiAKIHRyeToKQEAgLTc2LDEyICs3OSw2IEBACiAgICAgcGFzcyAgIyBXaWxsIGZhaWwgb24gUHl0aG9uIDIuNCB3aGljaCBoYXMgcmVkdWNlKCkgYnVpbHRpbiBhbnl3YXkuCiAKIHRyeToKLSAgICBmcm9tIGdsb2IgaW1wb3J0IGlnbG9iIGFzIGdsb2IKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIFB5dGhvbiAyLjQgZG9lcyBub3QgaGF2ZSBnbG9iLmlnbG9iKCkuCi0gICAgZnJvbSBnbG9iIGltcG9ydCBnbG9iIGFzIGdsb2IKLQotdHJ5OgogICAgIGltcG9ydCBjdHlwZXMKICAgICBpbXBvcnQgY3R5cGVzLnV0aWwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTk1LDkgKzkyLDcgQEAKIAogX19hdXRob3JfXyA9ICJzZWJAZGJ6dGVhbS5vcmcgKFNlYmFzdGllbiBNYXJ0aW5pKSIKIAotX192ZXJzaW9uX18gPSAiMC45LjUiCi0KLV9fbWV0YWNsYXNzX18gPSB0eXBlICAjIFVzZSBuZXctc3R5bGUgY2xhc3NlcyBieSBkZWZhdWx0CitfX3ZlcnNpb25fXyA9ICIwLjkuNiIKIAogCiAjIENvbXBhdGliaXR5IG1vZGU6IHNldCB0byBUcnVlIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoCkBAIC0xMjIsNiArMTE3LDkgQEAKICAgICAiIiIKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNyZWF0ZSgpOgorICAgICAgICAiIiIKKyAgICAgICAgRmFjdG9yeSBtZXRob2QgaW5zdGFuY2lhdGluZyBhbmQgcmV0dXJuaW5nIHRoZSByaWdodCB3cmFwcGVyLgorICAgICAgICAiIiIKICAgICAgICAgIyBGaXJzdCwgdHJ5IHRvIHVzZSBjdHlwZXMuCiAgICAgICAgIGlmIGN0eXBlczoKICAgICAgICAgICAgIGlub3RpZnkgPSBfQ3R5cGVzTGliY0lOb3RpZnlXcmFwcGVyKCkKQEAgLTE3Myw3ICsxNzEsNyBAQAogICAgIGRlZiBfaW5vdGlmeV9pbml0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZCA9IGlub3RpZnlfc3lzY2FsbHMuaW5vdGlmeV9pbml0KCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5fbGFzdF9lcnJubyA9IGVyci5lcnJubwogICAgICAgICAgICAgcmV0dXJuIC0xCiAgICAgICAgIHJldHVybiBmZApAQCAtMTgxLDcgKzE3OSw3IEBACiAgICAgZGVmIF9pbm90aWZ5X2FkZF93YXRjaChzZWxmLCBmZCwgcGF0aG5hbWUsIG1hc2spOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3ZCA9IGlub3RpZnlfc3lzY2FsbHMuaW5vdGlmeV9hZGRfd2F0Y2goZmQsIHBhdGhuYW1lLCBtYXNrKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgZXJyOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLl9sYXN0X2Vycm5vID0gZXJyLmVycm5vCiAgICAgICAgICAgICByZXR1cm4gLTEKICAgICAgICAgcmV0dXJuIHdkCkBAIC0xODksNyArMTg3LDcgQEAKICAgICBkZWYgX2lub3RpZnlfcm1fd2F0Y2goc2VsZiwgZmQsIHdkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0ID0gaW5vdGlmeV9zeXNjYWxscy5pbm90aWZ5X3JtX3dhdGNoKGZkLCB3ZCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5fbGFzdF9lcnJubyA9IGVyci5lcnJubwogICAgICAgICAgICAgcmV0dXJuIC0xCiAgICAgICAgIHJldHVybiByZXQKQEAgLTIxMywxNyArMjExLDggQEAKICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKICAgICAgICAgICAgIHBhc3MgICMgV2lsbCBhdHRlbXAgdG8gbG9hZCBpdCB3aXRoIE5vbmUgYW55d2F5LgogCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsIDYpOgotICAgICAgICAgICAgc2VsZi5fbGliYyA9IGN0eXBlcy5DRExMKGxpYmNfbmFtZSwgdXNlX2Vycm5vPVRydWUpCi0gICAgICAgICAgICBzZWxmLl9nZXRfZXJybm9fZnVuYyA9IGN0eXBlcy5nZXRfZXJybm8KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2xpYmMgPSBjdHlwZXMuQ0RMTChsaWJjX25hbWUpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBzZWxmLl9saWJjLl9fZXJybm9fbG9jYXRpb24KLSAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXN0eXBlID0gY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfaW50KQotICAgICAgICAgICAgICAgIHNlbGYuX2dldF9lcnJub19mdW5jID0gbGFtYmRhOiBsb2NhdGlvbigpLmNvbnRlbnRzLnZhbHVlCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl9saWJjID0gY3R5cGVzLkNETEwobGliY19uYW1lLCB1c2VfZXJybm89VHJ1ZSkKKyAgICAgICAgc2VsZi5fZ2V0X2Vycm5vX2Z1bmMgPSBjdHlwZXMuZ2V0X2Vycm5vCiAKICAgICAgICAgIyBFdmVudHVhbGx5IGNoZWNrIHRoYXQgbGliYyBoYXMgbmVlZGVkIGlub3RpZnkgYmluZGluZ3MuCiAgICAgICAgIGlmIChub3QgaGFzYXR0cihzZWxmLl9saWJjLCAnaW5vdGlmeV9pbml0Jykgb3IKQEAgLTI0MSw5ICsyMzAsOCBAQAogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9nZXRfZXJybm8oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2dldF9lcnJub19mdW5jIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9lcnJub19mdW5jKCkKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2dldF9lcnJub19mdW5jCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZXJybm9fZnVuYygpCiAKICAgICBkZWYgX2lub3RpZnlfaW5pdChzZWxmKToKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKQEAgLTI1MSw2ICsyMzksMTEgQEAKIAogICAgIGRlZiBfaW5vdGlmeV9hZGRfd2F0Y2goc2VsZiwgZmQsIHBhdGhuYW1lLCBtYXNrKToKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKKyAgICAgICAgIyBFbmNvZGVzIHBhdGggdG8gYSBieXRlcyBzdHJpbmcuIFRoaXMgY29udmVyc2lvbiBzZWVtcyByZXF1aXJlZCBiZWNhdXNlCisgICAgICAgICMgY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyIHNlZW1zIHRvIG1hbmlwdWxhdGUgYnl0ZXMgaW50ZXJuYWxseS4KKyAgICAgICAgIyBNb3Jlb3ZlciBpdCBzZWVtcyB0aGF0IGlub3RpZnlfYWRkX3dhdGNoIGRvZXMgbm90IHdvcmsgdmVyeSB3ZWxsIHdoZW4KKyAgICAgICAgIyBpdCByZWNlaXZlcyBhbiBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyIGluc3RhbmNlIGFzIGFyZ3VtZW50LgorICAgICAgICBwYXRobmFtZSA9IHBhdGhuYW1lLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCiAgICAgICAgIHBhdGhuYW1lID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKHBhdGhuYW1lKQogICAgICAgICByZXR1cm4gc2VsZi5fbGliYy5pbm90aWZ5X2FkZF93YXRjaChmZCwgcGF0aG5hbWUsIG1hc2spCiAKQEAgLTI1OCwxMCArMjUxLDYgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYuX2xpYmMuaW5vdGlmeV9ybV93YXRjaChmZCwgd2QpCiAKLSAgICBkZWYgX3N5c2N0bChzZWxmLCAqYXJncyk6Ci0gICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9saWJjLnN5c2N0bCgqYXJncykKLQogCiAjIExvZ2dpbmcKIGRlZiBsb2dnZXJfaW5pdCgpOgpAQCAtMjc4LDk3ICsyNjcsNTggQEAKIAogCiAjIGlub3RpZnkncyB2YXJpYWJsZXMKLWNsYXNzIFN5c0N0bElOb3RpZnk6CitjbGFzcyBQcm9jSU5vdGlmeToKICAgICAiIiIKLSAgICBBY2Nlc3MgKHJlYWQsIHdyaXRlKSBpbm90aWZ5J3MgdmFyaWFibGVzIHRocm91Z2ggc3lzY3RsLiBVc3VhbGx5IGl0Ci0gICAgcmVxdWlyZXMgYWRtaW5pc3RyYXRvciByaWdodHMgdG8gdXBkYXRlIHRoZW0uCisgICAgQWNjZXNzIChyZWFkLCB3cml0ZSkgaW5vdGlmeSdzIHZhcmlhYmxlcyB0aHJvdWdoIC9wcm9jL3N5cy8uIE5vdGUgdGhhdAorICAgIHVzdWFsbHkgaXQgcmVxdWlyZXMgYWRtaW5pc3RyYXRvciByaWdodHMgdG8gdXBkYXRlIHRoZW0uCiAKICAgICBFeGFtcGxlczoKICAgICAgIC0gUmVhZCBtYXhfcXVldWVkX2V2ZW50cyBhdHRyaWJ1dGU6IG15dmFyID0gbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUKICAgICAgIC0gVXBkYXRlIG1heF9xdWV1ZWRfZXZlbnRzIGF0dHJpYnV0ZTogbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUgPSA0MgogICAgICIiIgotCi0gICAgaW5vdGlmeV9hdHRycyA9IHsnbWF4X3VzZXJfaW5zdGFuY2VzJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICdtYXhfdXNlcl93YXRjaGVzJzogMiwKLSAgICAgICAgICAgICAgICAgICAgICdtYXhfcXVldWVkX2V2ZW50cyc6IDN9Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYXR0cm5hbWUsIGlub3RpZnlfd3JhcHBlcik6Ci0gICAgICAgICMgRklYTUU6IHJpZ2h0IG5vdyBvbmx5IHN1cHBvcnRpbmcgY3R5cGVzCi0gICAgICAgIGFzc2VydCBjdHlwZXMKLSAgICAgICAgc2VsZi5fYXR0cm5hbWUgPSBhdHRybmFtZQotICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIgPSBpbm90aWZ5X3dyYXBwZXIKLSAgICAgICAgc2lubyA9IGN0eXBlcy5jX2ludCAqIDMKLSAgICAgICAgc2VsZi5fYXR0ciA9IHNpbm8oNSwgMjAsIFN5c0N0bElOb3RpZnkuaW5vdGlmeV9hdHRyc1thdHRybmFtZV0pCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZShhdHRybmFtZSk6Ci0gICAgICAgICIiIgotICAgICAgICBGYWN0b3J5IG1ldGhvZCBpbnN0YW5jaWF0aW5nIGFuZCByZXR1cm5pbmcgdGhlIHJpZ2h0IHdyYXBwZXIuCi0gICAgICAgICIiIgotICAgICAgICAjIEZJWE1FOiByaWdodCBub3cgb25seSBzdXBwb3J0aW5nIGN0eXBlcwotICAgICAgICBpZiBjdHlwZXMgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlub3RpZnlfd3JhcHBlciA9IF9DdHlwZXNMaWJjSU5vdGlmeVdyYXBwZXIoKQotICAgICAgICBpZiBub3QgaW5vdGlmeV93cmFwcGVyLmluaXQoKToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBTeXNDdGxJTm90aWZ5KGF0dHJuYW1lLCBpbm90aWZ5X3dyYXBwZXIpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIpOgorICAgICAgICBzZWxmLl9iYXNlID0gIi9wcm9jL3N5cy9mcy9pbm90aWZ5IgorICAgICAgICBzZWxmLl9hdHRyID0gYXR0cgogCiAgICAgZGVmIGdldF92YWwoc2VsZik6CiAgICAgICAgICIiIgotICAgICAgICBHZXRzIGF0dHJpYnV0ZSdzIHZhbHVlLiBSYWlzZXMgT1NFcnJvciBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KKyAgICAgICAgR2V0cyBhdHRyaWJ1dGUncyB2YWx1ZS4KIAogICAgICAgICBAcmV0dXJuOiBzdG9yZWQgdmFsdWUuCiAgICAgICAgIEBydHlwZTogaW50CisgICAgICAgIEByYWlzZSBJT0Vycm9yOiBpZiBjb3JyZXNwb25kaW5nIGZpbGUgaW4gL3Byb2Mvc3lzIGNhbm5vdCBiZSByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgb2xkdiA9IGN0eXBlcy5jX2ludCgwKQotICAgICAgICBzaXplID0gY3R5cGVzLmNfaW50KGN0eXBlcy5zaXplb2Yob2xkdikpCi0gICAgICAgIHN5c2N0bCA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5fc3lzY3RsCi0gICAgICAgIHJlcyA9IHN5c2N0bChzZWxmLl9hdHRyLCAzLAotICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdm9pZHAoY3R5cGVzLmFkZHJlc3NvZihvbGR2KSksCi0gICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYWRkcmVzc29mKHNpemUpLAotICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMCkKLSAgICAgICAgaWYgcmVzID09IC0xOgotICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihzZWxmLl9pbm90aWZ5X3dyYXBwZXIuZ2V0X2Vycm5vKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkKLSAgICAgICAgcmV0dXJuIG9sZHYudmFsdWUKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9iYXNlLCBzZWxmLl9hdHRyKSwgJ3InKSBhcyBmaWxlX29iajoKKyAgICAgICAgICAgIHJldHVybiBpbnQoZmlsZV9vYmoucmVhZGxpbmUoKSkKIAogICAgIGRlZiBzZXRfdmFsKHNlbGYsIG52YWwpOgogICAgICAgICAiIiIKLSAgICAgICAgU2V0cyBuZXcgYXR0cmlidXRlJ3MgdmFsdWUuIFJhaXNlcyBPU0Vycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgorICAgICAgICBTZXRzIG5ldyBhdHRyaWJ1dGUncyB2YWx1ZS4KIAogICAgICAgICBAcGFyYW0gbnZhbDogcmVwbGFjZXMgY3VycmVudCB2YWx1ZSBieSBudmFsLgogICAgICAgICBAdHlwZSBudmFsOiBpbnQKKyAgICAgICAgQHJhaXNlIElPRXJyb3I6IGlmIGNvcnJlc3BvbmRpbmcgZmlsZSBpbiAvcHJvYy9zeXMgY2Fubm90IGJlIHdyaXR0ZW4uCiAgICAgICAgICIiIgotICAgICAgICBvbGR2ID0gY3R5cGVzLmNfaW50KDApCi0gICAgICAgIHNpemVvID0gY3R5cGVzLmNfaW50KGN0eXBlcy5zaXplb2Yob2xkdikpCi0gICAgICAgIG5ld3YgPSBjdHlwZXMuY19pbnQobnZhbCkKLSAgICAgICAgc2l6ZW4gPSBjdHlwZXMuY19pbnQoY3R5cGVzLnNpemVvZihuZXd2KSkKLSAgICAgICAgc3lzY3RsID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLl9zeXNjdGwKLSAgICAgICAgcmVzID0gc3lzY3RsKHNlbGYuX2F0dHIsIDMsCi0gICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY192b2lkcChjdHlwZXMuYWRkcmVzc29mKG9sZHYpKSwKLSAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5hZGRyZXNzb2Yoc2l6ZW8pLAotICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdm9pZHAoY3R5cGVzLmFkZHJlc3NvZihuZXd2KSksCi0gICAgICAgICAgICAgICAgICAgICBzaXplbikKLSAgICAgICAgaWYgcmVzID09IC0xOgotICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihzZWxmLl9pbm90aWZ5X3dyYXBwZXIuZ2V0X2Vycm5vKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9iYXNlLCBzZWxmLl9hdHRyKSwgJ3cnKSBhcyBmaWxlX29iajoKKyAgICAgICAgICAgIGZpbGVfb2JqLndyaXRlKHN0cihudmFsKSArICdcbicpCiAKICAgICB2YWx1ZSA9IHByb3BlcnR5KGdldF92YWwsIHNldF92YWwpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnPCVzPSVkPicgJSAoc2VsZi5fYXR0cm5hbWUsIHNlbGYuZ2V0X3ZhbCgpKQorICAgICAgICByZXR1cm4gJzwlcz0lZD4nICUgKHNlbGYuX2F0dHIsIHNlbGYuZ2V0X3ZhbCgpKQogCiAKICMgSW5vdGlmeSdzIHZhcmlhYmxlcwogIwotIyBGSVhNRTogY3VycmVudGx5IHRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSBhY2Nlc3NpYmxlIHdoZW4gY3R5cGVzIGlzIHVzZWQsCi0jICAgICAgICBvdGhlcndpc2UgdGhlcmUgYXJlIHNldCB0byBOb25lLgorIyBOb3RlOiBtYXkgcmFpc2UgSU9FcnJvciBpZiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiAvcHJvYy9zeXMKKyMgICAgICAgY2Fubm90IGJlIGFjY2Vzc2VkLgogIwotIyByZWFkOiBteXZhciA9IG1heF9xdWV1ZWRfZXZlbnRzLnZhbHVlCi0jIHVwZGF0ZTogbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUgPSA0MgorIyBFeGFtcGxlczoKKyMgIC0gcmVhZDogbXl2YXIgPSBtYXhfcXVldWVkX2V2ZW50cy52YWx1ZQorIyAgLSB1cGRhdGU6IG1heF9xdWV1ZWRfZXZlbnRzLnZhbHVlID0gNDIKICMKIGZvciBhdHRybmFtZSBpbiAoJ21heF9xdWV1ZWRfZXZlbnRzJywgJ21heF91c2VyX2luc3RhbmNlcycsICdtYXhfdXNlcl93YXRjaGVzJyk6Ci0gICAgZ2xvYmFscygpW2F0dHJuYW1lXSA9IFN5c0N0bElOb3RpZnkuY3JlYXRlKGF0dHJuYW1lKQorICAgIGdsb2JhbHMoKVthdHRybmFtZV0gPSBQcm9jSU5vdGlmeShhdHRybmFtZSkKIAogCiBjbGFzcyBFdmVudHNDb2RlczoKQEAgLTUzNiw3ICs0ODYsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBhdHRyID09ICdtYXNrJzoKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGhleChnZXRhdHRyKHNlbGYsIGF0dHIpKQotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKSBhbmQgbm90IHZhbHVlOgorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpIGFuZCBub3QgdmFsdWU6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSAiJyciCiAgICAgICAgICAgICBzICs9ICcgJXMlcyVzJyAlIChvdXRwdXRfZm9ybWF0LmZpZWxkX25hbWUoYXR0ciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc9JyksCkBAIC02MjgsNyArNTc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnBhdGhuYW1lID0gb3MucGF0aC5hYnNwYXRoKHNlbGYucGF0aCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAjIFVzdWFsbHkgaXQgaXMgbm90IGFuIGVycm9yIHNvbWUgZXZlbnRzIGFyZSBwZXJmZWN0bHkgdmFsaWRzCiAgICAgICAgICAgICAjIGRlc3BpdGUgdGhlIGxhY2sgb2YgdGhlc2UgYXR0cmlidXRlcy4KICAgICAgICAgICAgIGxvZy5kZWJ1ZyhlcnIpCkBAIC03MTgsOCArNjY4LDggQEAKICAgICAgICAgYW5kIHNlbGYuX212LgogICAgICAgICAiIiIKICAgICAgICAgZGF0ZV9jdXJfID0gZGF0ZXRpbWUubm93KCkKLSAgICAgICAgZm9yIHNlcSBpbiBbc2VsZi5fbXZfY29va2llLCBzZWxmLl9tdl06Ci0gICAgICAgICAgICBmb3IgayBpbiBzZXEua2V5cygpOgorICAgICAgICBmb3Igc2VxIGluIChzZWxmLl9tdl9jb29raWUsIHNlbGYuX212KToKKyAgICAgICAgICAgIGZvciBrIGluIGxpc3Qoc2VxLmtleXMoKSk6CiAgICAgICAgICAgICAgICAgaWYgKGRhdGVfY3VyXyAtIHNlcVtrXVsxXSkgPiB0aW1lZGVsdGEobWludXRlcz0xKToKICAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdDbGVhbnVwOiBkZWxldGluZyBlbnRyeSAlcycsIHNlcVtrXVswXSkKICAgICAgICAgICAgICAgICAgICAgZGVsIHNlcVtrXQpAQCAtNzY3LDkgKzcxNyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ZXZlbnQgPSBfUmF3RXZlbnQoY3JlYXRlZF9kaXJfd2QsIGZsYWdzLCAwLCBuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25vdGlmaWVyLmFwcGVuZF9ldmVudChyYXdldmVudCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJwcm9jZXNzX0lOX0NSRUFURSwgaW52YWxpZCBkaXJlY3RvcnkgJXM6ICVzIgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKG1zZyAlIChjcmVhdGVkX2Rpciwgc3RyKGVycikpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAicHJvY2Vzc19JTl9DUkVBVEUsIGludmFsaWQgZGlyZWN0b3J5OiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cgJSBzdHIoZXJyKSkKICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCkKIAogICAgIGRlZiBwcm9jZXNzX0lOX01PVkVEX0ZST00oc2VsZiwgcmF3X2V2ZW50KToKQEAgLTEwOTcsOCArMTA0Nyw4IEBACiAgICAgICAgIEB0eXBlIGZpbGVuYW1lOiBzdHJpbmcKICAgICAgICAgIiIiCiAgICAgICAgIGZsYWdzID0gb3MuT19XUk9OTFl8b3MuT19DUkVBVHxvcy5PX05PRk9MTE9XfG9zLk9fRVhDTAotICAgICAgICBmZCA9IG9zLm9wZW4oZmlsZW5hbWUsIGZsYWdzLCAwNjAwKQotICAgICAgICBvcy53cml0ZShmZCwgc3RyKHNlbGYpKQorICAgICAgICBmZCA9IG9zLm9wZW4oZmlsZW5hbWUsIGZsYWdzLCAwbzA2MDApCisgICAgICAgIG9zLndyaXRlKGZkLCBieXRlcyhzZWxmLl9fc3RyX18oKSwgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkpKQogICAgICAgICBvcy5jbG9zZShmZCkKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYsIHNjYWxlPTQ1KToKQEAgLTExMDcsNyArMTA1Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gJycKIAogICAgICAgICBtID0gbWF4KHN0YXRzLnZhbHVlcygpKQotICAgICAgICB1bml0eSA9IGZsb2F0KHNjYWxlKSAvIG0KKyAgICAgICAgdW5pdHkgPSBzY2FsZSAvIG0KICAgICAgICAgZm10ID0gJyUlLTI2cyUlLSVkcyUlcycgJSAobGVuKG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUoJ0AnICogc2NhbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEpCiAgICAgICAgIGRlZiBmdW5jKHgpOgpAQCAtMTE0OSw3ICsxMDk5LDcgQEAKICAgICAgICAgQHR5cGUgZGVmYXVsdF9wcm9jX2Z1bjogaW5zdGFuY2Ugb2YgUHJvY2Vzc0V2ZW50CiAgICAgICAgIEBwYXJhbSByZWFkX2ZyZXE6IGlmIHJlYWRfZnJlcSA9PSAwLCBldmVudHMgYXJlIHJlYWQgYXNhcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVhZF9mcmVxIGlzID4gMCwgdGhpcyB0aHJlYWQgc2xlZXBzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCByZWFkX2ZyZXEgLSB0aW1lb3V0KSBzZWNvbmRzLiBCdXQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAsIHJlYWRfZnJlcSAtICh0aW1lb3V0IC8gMTAwMCkpIHNlY29uZHMuIEJ1dCBpZgogICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IGlzIE5vbmUgaXQgbWF5IGJlIGRpZmZlcmVudCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGwgaXMgYmxvY2tpbmcgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIHJlYWQuCiAgICAgICAgIEB0eXBlIHJlYWRfZnJlcTogaW50CkBAIC0xMTYxLDggKzExMTEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgYW1vdW50IG9mIGV2ZW50cyB0byByZWFkIGlzID49IHRocmVzaG9sZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgQXQgbGVhc3Qgd2l0aCByZWFkX2ZyZXEgc2V0IHlvdSBtaWdodCBzbGVlcC4KICAgICAgICAgQHR5cGUgdGhyZXNob2xkOiBpbnQKLSAgICAgICAgQHBhcmFtIHRpbWVvdXQ6Ci0gICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjcG9sbGluZy1vYmplY3RzCisgICAgICAgIEBwYXJhbSB0aW1lb3V0OiBzZWUgcmVhZF9mcmVxIGFib3ZlLiBJZiBwcm92aWRlZCwgaXQgbXVzdCBiZSBzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcy4gU2VlCisgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwucG9sbAogICAgICAgICBAdHlwZSB0aW1lb3V0OiBpbnQKICAgICAgICAgIiIiCiAgICAgICAgICMgV2F0Y2ggTWFuYWdlciBpbnN0YW5jZQpAQCAtMTIyOCw3ICsxMTc5LDggQEAKICAgICAgICAgbWlsbGlzZWNvbmRzLgogCiAgICAgICAgIEBwYXJhbSB0aW1lb3V0OiBJZiBzcGVjaWZpZWQgaXQgb3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgX3RpbWVvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgX3RpbWVvdXQuIHRpbWVvdXQgbXVzdCBiZSBzZXBjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcy4KICAgICAgICAgQHR5cGUgdGltZW91dDogaW50CiAKICAgICAgICAgQHJldHVybjogTmV3IGV2ZW50cyB0byByZWFkLgpAQCAtMTI0MCw4ICsxMTkyLDggQEAKICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl90aW1lb3V0CiAgICAgICAgICAgICAgICAgcmV0ID0gc2VsZi5fcG9sbG9iai5wb2xsKHRpbWVvdXQpCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgZXJyWzBdID09IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUlOVFI6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgaW50ZXJydXB0ZWQsIHJldHJ5CiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTEyNzEsNyArMTIyMyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgUmVhZCBjb250ZW50IGZyb20gZmlsZQogICAgICAgICAgICAgciA9IG9zLnJlYWQoc2VsZi5fZmQsIHF1ZXVlX3NpemUpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIG1zZzoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBOb3RpZmllckVycm9yKG1zZykKICAgICAgICAgbG9nLmRlYnVnKCdFdmVudCBxdWV1ZSBzaXplOiAlZCcsIHF1ZXVlX3NpemUpCiAgICAgICAgIHJzdW0gPSAwICAjIGNvdW50ZXIKQEAgLTEyODEsOSArMTIzMywxMSBAQAogICAgICAgICAgICAgd2QsIG1hc2ssIGNvb2tpZSwgZm5hbWVfbGVuID0gc3RydWN0LnVucGFjaygnaUlJSScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbcnN1bTpyc3VtK3Nfc2l6ZV0pCiAgICAgICAgICAgICAjIFJldHJpZXZlIG5hbWUKLSAgICAgICAgICAgIGZuYW1lLCA9IHN0cnVjdC51bnBhY2soJyVkcycgJSBmbmFtZV9sZW4sCisgICAgICAgICAgICBibmFtZSwgPSBzdHJ1Y3QudW5wYWNrKCclZHMnICUgZm5hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW3JzdW0gKyBzX3NpemU6cnN1bSArIHNfc2l6ZSArIGZuYW1lX2xlbl0pCi0gICAgICAgICAgICByYXdldmVudCA9IF9SYXdFdmVudCh3ZCwgbWFzaywgY29va2llLCBmbmFtZSkKKyAgICAgICAgICAgICMgRklYTUU6IHNob3VsZCB3ZSBleHBsaWN0bHkgY2FsbCBzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCkgaGVyZSA/PworICAgICAgICAgICAgdW5hbWUgPSBibmFtZS5kZWNvZGUoKQorICAgICAgICAgICAgcmF3ZXZlbnQgPSBfUmF3RXZlbnQod2QsIG1hc2ssIGNvb2tpZSwgdW5hbWUpCiAgICAgICAgICAgICBpZiBzZWxmLl9jb2FsZXNjZToKICAgICAgICAgICAgICAgICAjIE9ubHkgZW5xdWV1ZSBuZXcgKHVuaXF1ZSkgZXZlbnRzLgogICAgICAgICAgICAgICAgIHJhd2V2ZW50c3RyID0gc3RyKHJhd2V2ZW50KQpAQCAtMTMyNiwxMyArMTI4MCwxMCBAQAogICAgIGRlZiBfX2RhZW1vbml6ZShzZWxmLCBwaWRfZmlsZT1Ob25lLCBzdGRpbj1vcy5kZXZudWxsLCBzdGRvdXQ9b3MuZGV2bnVsbCwKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPW9zLmRldm51bGwpOgogICAgICAgICAiIiIKLSAgICAgICAgQHBhcmFtIHBpZF9maWxlOiBmaWxlIHdoZXJlIHRoZSBwaWQgd2lsbCBiZSB3cml0dGVuLiBJZiBwaWRfZmlsZT1Ob25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBpZCBpcyB3cml0dGVuIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgL3Zhci9ydW4vPHN5cy5hcmd2WzBdfHB5aW5vdGlmeT4ucGlkLCBpZiBwaWRfZmlsZT1GYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgIG5vIHBpZF9maWxlIGlzIHdyaXR0ZW4uCi0gICAgICAgIEBwYXJhbSBzdGRpbjoKLSAgICAgICAgQHBhcmFtIHN0ZG91dDoKLSAgICAgICAgQHBhcmFtIHN0ZGVycjogZmlsZXMgYXNzb2NpYXRlZCB0byBjb21tb24gc3RyZWFtcy4KKyAgICAgICAgcGlkX2ZpbGU6IGZpbGUgd2hlcmUgdGhlIHBpZCB3aWxsIGJlIHdyaXR0ZW4uIElmIHBpZF9maWxlPU5vbmUgdGhlIHBpZAorICAgICAgICAgICAgICAgICAgaXMgd3JpdHRlbiB0byAvdmFyL3J1bi88c3lzLmFyZ3ZbMF18cHlpbm90aWZ5Pi5waWQsIGlmCisgICAgICAgICAgICAgICAgICBwaWRfZmlsZT1GYWxzZSBubyBwaWRfZmlsZSBpcyB3cml0dGVuLgorICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnI6IGZpbGVzIGFzc29jaWF0ZWQgdG8gY29tbW9uIHN0cmVhbXMuCiAgICAgICAgICIiIgogICAgICAgICBpZiBwaWRfZmlsZSBpcyBOb25lOgogICAgICAgICAgICAgZGlybmFtZSA9ICcvdmFyL3J1bi8nCkBAIC0xMzU0LDcgKzEzMDUsNyBAQAogICAgICAgICAgICAgICAgIGlmIChwaWQgPT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICMgY2hpbGQKICAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy8nKQotICAgICAgICAgICAgICAgICAgICBvcy51bWFzaygwMjIpCisgICAgICAgICAgICAgICAgICAgIG9zLnVtYXNrKDBvMDIyKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICMgcGFyZW50IDIKICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKQEAgLTEzNjQsOSArMTMxNSw5IEBACiAKICAgICAgICAgICAgIGZkX2lucCA9IG9zLm9wZW4oc3RkaW4sIG9zLk9fUkRPTkxZKQogICAgICAgICAgICAgb3MuZHVwMihmZF9pbnAsIDApCi0gICAgICAgICAgICBmZF9vdXQgPSBvcy5vcGVuKHN0ZG91dCwgb3MuT19XUk9OTFl8b3MuT19DUkVBVCwgMDYwMCkKKyAgICAgICAgICAgIGZkX291dCA9IG9zLm9wZW4oc3Rkb3V0LCBvcy5PX1dST05MWXxvcy5PX0NSRUFULCAwbzA2MDApCiAgICAgICAgICAgICBvcy5kdXAyKGZkX291dCwgMSkKLSAgICAgICAgICAgIGZkX2VyciA9IG9zLm9wZW4oc3RkZXJyLCBvcy5PX1dST05MWXxvcy5PX0NSRUFULCAwNjAwKQorICAgICAgICAgICAgZmRfZXJyID0gb3Mub3BlbihzdGRlcnIsIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQsIDBvMDYwMCkKICAgICAgICAgICAgIG9zLmR1cDIoZmRfZXJyLCAyKQogCiAgICAgICAgICMgRGV0YWNoIHRhc2sKQEAgLTEzNzUsOCArMTMyNiw5IEBACiAgICAgICAgICMgV3JpdGUgcGlkCiAgICAgICAgIGlmIHBpZF9maWxlICE9IEZhbHNlOgogICAgICAgICAgICAgZmxhZ3MgPSBvcy5PX1dST05MWXxvcy5PX0NSRUFUfG9zLk9fTk9GT0xMT1d8b3MuT19FWENMCi0gICAgICAgICAgICBmZF9waWQgPSBvcy5vcGVuKHBpZF9maWxlLCBmbGFncywgMDYwMCkKLSAgICAgICAgICAgIG9zLndyaXRlKGZkX3BpZCwgc3RyKG9zLmdldHBpZCgpKSArICdcbicpCisgICAgICAgICAgICBmZF9waWQgPSBvcy5vcGVuKHBpZF9maWxlLCBmbGFncywgMG8wNjAwKQorICAgICAgICAgICAgb3Mud3JpdGUoZmRfcGlkLCAgYnl0ZXMoc3RyKG9zLmdldHBpZCgpKSArICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKSkpCiAgICAgICAgICAgICBvcy5jbG9zZShmZF9waWQpCiAgICAgICAgICAgICAjIFJlZ2lzdGVyIHVubGluayBmdW5jdGlvbgogICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGxhbWJkYSA6IG9zLnVubGluayhwaWRfZmlsZSkpCkBAIC0xNDQxLDkgKzEzOTMsMTIgQEAKICAgICAgICAgQ2xvc2UgaW5vdGlmeSdzIGluc3RhbmNlIChjbG9zZSBpdHMgZmlsZSBkZXNjcmlwdG9yKS4KICAgICAgICAgSXQgZGVzdHJveXMgYWxsIGV4aXN0aW5nIHdhdGNoZXMsIHBlbmRpbmcgZXZlbnRzLC4uLgogICAgICAgICBUaGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBhdCB0aGUgZW5kIG9mIGxvb3AoKS4KKyAgICAgICAgQWZ0ZXJ3YXJkIGl0IGlzIGludmFsaWQgdG8gYWNjZXNzIHRoaXMgaW5zdGFuY2UuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9wb2xsb2JqLnVucmVnaXN0ZXIoc2VsZi5fZmQpCi0gICAgICAgIG9zLmNsb3NlKHNlbGYuX2ZkKQorICAgICAgICBpZiBzZWxmLl9mZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3BvbGxvYmoudW5yZWdpc3RlcihzZWxmLl9mZCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYuX2ZkKQorICAgICAgICAgICAgc2VsZi5fZmQgPSBOb25lCiAgICAgICAgIHNlbGYuX3N5c19wcm9jX2Z1biA9IE5vbmUKIAogCkBAIC0xNDY4LDcgKzE0MjMsNyBAQAogICAgICAgICBAdHlwZSBkZWZhdWx0X3Byb2NfZnVuOiBpbnN0YW5jZSBvZiBQcm9jZXNzRXZlbnQKICAgICAgICAgQHBhcmFtIHJlYWRfZnJlcTogaWYgcmVhZF9mcmVxID09IDAsIGV2ZW50cyBhcmUgcmVhZCBhc2FwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWFkX2ZyZXEgaXMgPiAwLCB0aGlzIHRocmVhZCBzbGVlcHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAsIHJlYWRfZnJlcSAtIHRpbWVvdXQpIHNlY29uZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCByZWFkX2ZyZXEgLSAodGltZW91dCAvIDEwMDApKSBzZWNvbmRzLgogICAgICAgICBAdHlwZSByZWFkX2ZyZXE6IGludAogICAgICAgICBAcGFyYW0gdGhyZXNob2xkOiBGaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSByZWFkIG9ubHkgaWYgdGhlIGFjY3VtdWxhdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgdG8gcmVhZCBiZWNvbWVzID49IHRocmVzaG9sZC4gSWYgIT0gMCwgeW91IGxpa2VseQpAQCAtMTQ3OCw4ICsxNDMzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIGFtb3VudCBvZiBldmVudHMgdG8gcmVhZCBpcyA+PSB0aHJlc2hvbGQuIEF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IHdpdGggcmVhZF9mcmVxIHlvdSBtaWdodCBzbGVlcC4KICAgICAgICAgQHR5cGUgdGhyZXNob2xkOiBpbnQKLSAgICAgICAgQHBhcmFtIHRpbWVvdXQ6Ci0gICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjcG9sbGluZy1vYmplY3RzCisgICAgICAgIEBwYXJhbSB0aW1lb3V0OiBzZWUgcmVhZF9mcmVxIGFib3ZlLiBJZiBwcm92aWRlZCwgaXQgbXVzdCBiZSBzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcy4gU2VlCisgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwucG9sbAogICAgICAgICBAdHlwZSB0aW1lb3V0OiBpbnQKICAgICAgICAgIiIiCiAgICAgICAgICMgSW5pdCB0aHJlYWRpbmcgYmFzZSBjbGFzcwpAQCAtMTQ5OCw3ICsxNDU0LDcgQEAKICAgICAgICAgU3RvcCBub3RpZmllcidzIGxvb3AuIFN0b3Agbm90aWZpY2F0aW9uLiBKb2luIHRoZSB0aHJlYWQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9zdG9wX2V2ZW50LnNldCgpCi0gICAgICAgIG9zLndyaXRlKHNlbGYuX3BpcGVbMV0sICdzdG9wJykKKyAgICAgICAgb3Mud3JpdGUoc2VsZi5fcGlwZVsxXSwgYidzdG9wJykKICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5qb2luKHNlbGYpCiAgICAgICAgIE5vdGlmaWVyLnN0b3Aoc2VsZikKICAgICAgICAgc2VsZi5fcG9sbG9iai51bnJlZ2lzdGVyKHNlbGYuX3BpcGVbMF0pCkBAIC0xNjk5LDcgKzE2NTUsNiBAQAogY2xhc3MgRXhjbHVkZUZpbHRlcjoKICAgICAiIiIKICAgICBFeGNsdWRlRmlsdGVyIGlzIGFuIGV4Y2x1c2lvbiBmaWx0ZXIuCi0KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnX2xzdCk6CiAgICAgICAgICIiIgpAQCAtMTczMSwxNiArMTY4NiwxMyBAQAogCiAgICAgZGVmIF9sb2FkX3BhdHRlcm5zX2Zyb21fZmlsZShzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgIGxzdCA9IFtdCi0gICAgICAgIGZpbGVfb2JqID0gZmlsZShmaWxlbmFtZSwgJ3InKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmaWxlX29iajoKICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGVfb2JqLnJlYWRsaW5lcygpOgogICAgICAgICAgICAgICAgICMgVHJpbSBsZWFkaW5nIGFuIHRyYWlsaW5nIHdoaXRlc3BhY2VzCiAgICAgICAgICAgICAgICAgcGF0dGVybiA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgIGlmIG5vdCBwYXR0ZXJuIG9yIHBhdHRlcm4uc3RhcnRzd2l0aCgnIycpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQocGF0dGVybikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZpbGVfb2JqLmNsb3NlKCkKICAgICAgICAgcmV0dXJuIGxzdAogCiAgICAgZGVmIF9tYXRjaChzZWxmLCByZWdleCwgcGF0aCk6CkBAIC0xNzY0LDcgKzE3MTYsNiBAQAogICAgICIiIgogICAgIFdhdGNoTWFuYWdlciBFeGNlcHRpb24uIFJhaXNlZCBvbiBlcnJvciBlbmNvdW50ZXJlZCBvbiB3YXRjaGVzCiAgICAgb3BlcmF0aW9ucy4KLQogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIHdtZCk6CiAgICAgICAgICIiIgpAQCAtMTg1MSw3ICsxODAyLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRlbCBzZWxmLl93bWRbd2RdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgbG9nLmVycm9yKCdDYW5ub3QgZGVsZXRlIHVua25vd24gd2F0Y2ggZGVzY3JpcHRvciAlcycgJSBzdHIoZXJyKSkKIAogICAgIEBwcm9wZXJ0eQpAQCAtMTg2OCwxMyArMTgxOSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBGb3JtYXQgcGF0aCB0byBpdHMgaW50ZXJuYWwgKHN0b3JlZCBpbiB3YXRjaCBtYW5hZ2VyKSByZXByZXNlbnRhdGlvbi4KICAgICAgICAgIiIiCi0gICAgICAgICMgVW5pY29kZSBzdHJpbmdzIGFyZSBjb252ZXJ0ZWQgYmFjayB0byBzdHJpbmdzLCBiZWNhdXNlIGl0IHNlZW1zCi0gICAgICAgICMgdGhhdCBpbm90aWZ5X2FkZF93YXRjaCBmcm9tIGN0eXBlcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2hlbgotICAgICAgICAjIGl0IHJlY2VpdmVzIGFuIGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIgaW5zdGFuY2UgYXMgYXJndW1lbnQuCi0gICAgICAgICMgVGhlcmVmb3JlIGV2ZW4gd2QgYXJlIGluZGV4ZWQgd2l0aCBieXRlcyBzdHJpbmcgYW5kIG5vdCB3aXRoCi0gICAgICAgICMgdW5pY29kZSBwYXRocy4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCB1bmljb2RlKToKLSAgICAgICAgICAgIHBhdGggPSBwYXRoLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisgICAgICAgICMgcGF0aCBtdXN0IGJlIGEgdW5pY29kZSBzdHJpbmcgKHN0cikgYW5kIGlzIGp1c3Qgbm9ybWFsaXplZC4KICAgICAgICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgocGF0aCkKIAogICAgIGRlZiBfX2FkZF93YXRjaChzZWxmLCBwYXRoLCBtYXNrLCBwcm9jX2Z1biwgYXV0b19hZGQsIGV4Y2x1ZGVfZmlsdGVyKToKQEAgLTE4OTAsMTMgKzE4MzUsMTQgQEAKICAgICAgICAgICAgIHJldHVybiB3ZAogICAgICAgICB3YXRjaCA9IFdhdGNoKHdkPXdkLCBwYXRoPXBhdGgsIG1hc2s9bWFzaywgcHJvY19mdW49cHJvY19mdW4sCiAgICAgICAgICAgICAgICAgICAgICAgYXV0b19hZGQ9YXV0b19hZGQsIGV4Y2x1ZGVfZmlsdGVyPWV4Y2x1ZGVfZmlsdGVyKQorICAgICAgICAjIHdkIGFyZSBfYWx3YXlzXyBpbmRleGVkIHdpdGggdGhlaXIgb3JpZ2luYWwgdW5pY29kZSBwYXRocyBpbiB3bWQuCiAgICAgICAgIHNlbGYuX3dtZFt3ZF0gPSB3YXRjaAogICAgICAgICBsb2cuZGVidWcoJ05ldyAlcycsIHdhdGNoKQogICAgICAgICByZXR1cm4gd2QKIAogICAgIGRlZiBfX2dsb2Ioc2VsZiwgcGF0aCwgZG9fZ2xvYik6CiAgICAgICAgIGlmIGRvX2dsb2I6Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYihwYXRoKQorICAgICAgICAgICAgcmV0dXJuIGdsb2IuaWdsb2IocGF0aCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBbcGF0aF0KIApAQCAtMTkwNywxMSArMTg1Myw4IEBACiAgICAgICAgIEFkZCB3YXRjaChzKSBvbiB0aGUgcHJvdmlkZWQgfHBhdGh8KHMpIHdpdGggYXNzb2NpYXRlZCB8bWFza3wgZmxhZwogICAgICAgICB2YWx1ZSBhbmQgb3B0aW9uYWxseSB3aXRoIGEgcHJvY2Vzc2luZyB8cHJvY19mdW58IGZ1bmN0aW9uIGFuZAogICAgICAgICByZWN1cnNpdmUgZmxhZyB8cmVjfCBzZXQgdG8gVHJ1ZS4KLSAgICAgICAgSWRlYWxseSB8cGF0aHwgY29tcG9uZW50cyBzaG91bGQgbm90IGJlIHVuaWNvZGUgb2JqZWN0cy4gTm90ZSB0aGF0Ci0gICAgICAgIGFsdGhvdWdoIHVuaWNvZGUgcGF0aHMgYXJlIGFjY2VwdGVkIHRoZXJlIGFyZSBjb252ZXJ0ZWQgdG8gYnl0ZQotICAgICAgICBzdHJpbmdzIGJlZm9yZSBhIHdhdGNoIGlzIHB1dCBvbiB0aGF0IHBhdGguIFRoZSBlbmNvZGluZyB1c2VkIGZvcgotICAgICAgICBjb252ZXJ0aW5nIHRoZSB1bmljb2RlIG9iamVjdCBpcyBnaXZlbiBieSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkuCi0gICAgICAgIElmIHxwYXRofCBzaSBhbHJlYWR5IHdhdGNoZWQgaXQgaXMgaWdub3JlZCwgYnV0IGlmIGl0IGlzIGNhbGxlZCB3aXRoCisgICAgICAgIEFsbCB8cGF0aHwgY29tcG9uZW50cyBfbXVzdF8gYmUgc3RyIChpLmUuIHVuaWNvZGUpIG9iamVjdHMuCisgICAgICAgIElmIHxwYXRofCBpcyBhbHJlYWR5IHdhdGNoZWQgaXQgaXMgaWdub3JlZCwgYnV0IGlmIGl0IGlzIGNhbGxlZCB3aXRoCiAgICAgICAgIG9wdGlvbiByZWM9VHJ1ZSBhIHdhdGNoIGlzIHB1dCBvbiBlYWNoIG9uZSBvZiBpdHMgbm90LXdhdGNoZWQKICAgICAgICAgc3ViZGlyZWN0b3J5LgogCkBAIC0xOTQ1LDEwICsxODg4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2xhc3MnIGNvbnN0cnVjdG9yLgogICAgICAgICBAdHlwZSBleGNsdWRlX2ZpbHRlcjogY2FsbGFibGUgb2JqZWN0CiAgICAgICAgIEByZXR1cm46IGRpY3Qgb2YgcGF0aHMgYXNzb2NpYXRlZCB0byB3YXRjaCBkZXNjcmlwdG9ycy4gQSB3ZCB2YWx1ZQotICAgICAgICAgICAgICAgICBpcyBwb3NpdGl2ZSBpZiB0aGUgd2F0Y2ggd2FzIGFkZGVkIHN1Y2Vzc2Z1bGx5LAotICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLiBJZiB0aGUgcGF0aCB3YXMgaW52YWxpZAotICAgICAgICAgICAgICAgICBvciB3YXMgYWxyZWFkeSB3YXRjaGVkIGl0IGlzIG5vdCBpbmNsdWRlZCBpbnRvIHRoaXMgcmV0dXJuZWQKLSAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS4KKyAgICAgICAgICAgICAgICAgaXMgcG9zaXRpdmUgaWYgdGhlIHdhdGNoIHdhcyBhZGRlZCBzdWNlc3NmdWxseSwgb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZS4gSWYgdGhlIHBhdGggd2FzIGludmFsaWQgb3Igd2FzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgd2F0Y2hlZCBpdCBpcyBub3QgaW5jbHVkZWQgaW50byB0aGlzIHJldHVybmVkIGRpY3Rpb25hcnkuCiAgICAgICAgIEBydHlwZTogZGljdCBvZiB7c3RyOiBpbnR9CiAgICAgICAgICIiIgogICAgICAgICByZXRfID0ge30gIyByZXR1cm4ge3BhdGg6IHdkLCAuLi59CkBAIC0xOTU4LDYgKzE5MDAsMTEgQEAKIAogICAgICAgICAjIG5vcm1hbGl6ZSBhcmdzIGFzIGxpc3QgZWxlbWVudHMKICAgICAgICAgZm9yIG5wYXRoIGluIHNlbGYuX19mb3JtYXRfcGFyYW0ocGF0aCk6CisgICAgICAgICAgICAjIFJlcXVpcmUgdGhhdCBwYXRoIGJlIGEgdW5pY29kZSBzdHJpbmcKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5wYXRoLCBzdHIpOgorICAgICAgICAgICAgICAgIHJldF9bcGF0aF0gPSAtMworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKICAgICAgICAgICAgICMgdW5peCBwYXRobmFtZSBwYXR0ZXJuIGV4cGFuc2lvbgogICAgICAgICAgICAgZm9yIGFwYXRoIGluIHNlbGYuX19nbG9iKG5wYXRoLCBkb19nbG9iKToKICAgICAgICAgICAgICAgICAjIHJlY3Vyc2l2ZWx5IGxpc3Qgc3ViZGlycyBhY2NvcmRpbmcgdG8gcmVjIHBhcmFtCkBAIC0yMjQyLDcgKzIxODksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFrZSB3YXRjaCBtYW5hZ2VyIGlnbm9yaW5nIG5ldyBldmVudHMuIikKIAogCi0KIGNsYXNzIFJhd091dHB1dEZvcm1hdDoKICAgICAiIiIKICAgICBGb3JtYXQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9hZG1pbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9hZG1pbi5weQppbmRleCBjMWY4NWQ3Li4xZjJlMDdmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvYWRtaW4ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL2FkbWluLnB5CkBAIC0xLDMzICsxLDMzIEBACiBmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgotZnJvbSBkamFuZ28uY29udHJpYi5hZG1pbi5maWx0ZXJzIGltcG9ydCBSZWxhdGVkRmllbGRMaXN0RmlsdGVyCi1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBMYXllclNvdXJjZSwgVG9hc3RlclNldHRpbmcKLWZyb20gZGphbmdvLmZvcm1zLndpZGdldHMgaW1wb3J0IFRleHRhcmVhCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBUb2FzdGVyU2V0dGluZywgTGF5ZXJfVmVyc2lvbgogZnJvbSBkamFuZ28gaW1wb3J0IGZvcm1zCiBpbXBvcnQgZGphbmdvLmRiLm1vZGVscyBhcyBtb2RlbHMKIAotZnJvbSBkamFuZ28uY29udHJpYi5hZG1pbiBpbXBvcnQgd2lkZ2V0cywgaGVscGVycwotCi1jbGFzcyBMYXllclNvdXJjZUFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgotICAgIHBhc3MKIAogY2xhc3MgQml0YmFrZVZlcnNpb25BZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKIAotICAgICMgd2Ugb3ZlcnJpZGUgdGhlIGZvcm1maWVsZCBmb3IgZGIgVVJMRmllbGQgYmVjYXVzZSBvZiBicm9rZW4gVVJMIHZhbGlkYXRpb24KKyAgICAjIHdlIG92ZXJyaWRlIHRoZSBmb3JtZmllbGQgZm9yIGRiIFVSTEZpZWxkCisgICAgIyBiZWNhdXNlIG9mIGJyb2tlbiBVUkwgdmFsaWRhdGlvbgogCiAgICAgZGVmIGZvcm1maWVsZF9mb3JfZGJmaWVsZChzZWxmLCBkYl9maWVsZCwgKiprd2FyZ3MpOgogICAgICAgICBpZiBpc2luc3RhbmNlKGRiX2ZpZWxkLCBtb2RlbHMuZmllbGRzLlVSTEZpZWxkKToKICAgICAgICAgICAgIHJldHVybiBmb3Jtcy5maWVsZHMuQ2hhckZpZWxkKCkKLSAgICAgICAgcmV0dXJuIHN1cGVyKEJpdGJha2VWZXJzaW9uQWRtaW4sIHNlbGYpLmZvcm1maWVsZF9mb3JfZGJmaWVsZChkYl9maWVsZCwgKiprd2FyZ3MpCi0KKyAgICAgICAgcmV0dXJuIHN1cGVyKEJpdGJha2VWZXJzaW9uQWRtaW4sIHNlbGYpLmZvcm1maWVsZF9mb3JfZGJmaWVsZCgKKyAgICAgICAgICAgIGRiX2ZpZWxkLCAqKmt3YXJncykKIAogCiBjbGFzcyBSZWxlYXNlQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CiAgICAgcGFzcwogCisKIGNsYXNzIFRvYXN0ZXJTZXR0aW5nQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CiAgICAgcGFzcwogCi1hZG1pbi5zaXRlLnJlZ2lzdGVyKExheWVyU291cmNlLCBMYXllclNvdXJjZUFkbWluKQorCitjbGFzcyBMYXllclZlcnNpb25zQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisgICAgcGFzcworCithZG1pbi5zaXRlLnJlZ2lzdGVyKExheWVyX1ZlcnNpb24sIExheWVyVmVyc2lvbnNBZG1pbikKIGFkbWluLnNpdGUucmVnaXN0ZXIoQml0YmFrZVZlcnNpb24sIEJpdGJha2VWZXJzaW9uQWRtaW4pCiBhZG1pbi5zaXRlLnJlZ2lzdGVyKFJlbGVhc2UsIFJlbGVhc2VBZG1pbikKIGFkbWluLnNpdGUucmVnaXN0ZXIoVG9hc3RlclNldHRpbmcsIFRvYXN0ZXJTZXR0aW5nQWRtaW4pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2JiY29udHJvbGxlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5CmluZGV4IGQwOWFjMTcuLjkxMmY2N2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5CkBAIC0zMCw3ICszMCw2IEBACiAjIGxvYWQgQml0YmFrZSBjb21wb25lbnRzCiBwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpCiBzeXMucGF0aC5pbnNlcnQoMCwgcGF0aCkKLWltcG9ydCBiYi5zZXJ2ZXIueG1scnBjCiAKIGNsYXNzIEJpdGJha2VDb250cm9sbGVyKG9iamVjdCk6CiAgICAgIiIiIFRoaXMgaXMgdGhlIGJhc2ljIGNsYXNzIHRoYXQgY29udHJvbGxzIGEgYml0YmFrZSBzZXJ2ZXIuCkBAIC0zOCw2ICszNyw3IEBACiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgYmUpOgorICAgICAgICBpbXBvcnQgYmIuc2VydmVyLnhtbHJwYwogICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBiYi5zZXJ2ZXIueG1scnBjLl9jcmVhdGVfc2VydmVyKGJlLmJiYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoYmUuYmJwb3J0KSlbMF0KIApAQCAtNzksNyArNzksNyBAQAogICAgICAgICBUaGUgcmV0dXJuIG9iamVjdCBNVVNUIGFsd2F5cyBiZSBhIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLgogICAgICIiIgogCi0gICAgZnJvbSBsb2NhbGhvc3RiZWNvbnRyb2xsZXIgaW1wb3J0IExvY2FsaG9zdEJFQ29udHJvbGxlcgorICAgIGZyb20gYmxkY29udHJvbC5sb2NhbGhvc3RiZWNvbnRyb2xsZXIgaW1wb3J0IExvY2FsaG9zdEJFQ29udHJvbGxlcgogCiAgICAgYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZmlsdGVyKFEoKiprd2FyZ3MpKVswXQogICAgIGlmIGJlLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2xvY2FsaG9zdGJlY29udHJvbGxlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5CmluZGV4IDdkZWYxZjMuLmU1ZjdjOTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5CkBAIC0zMiw3ICszMiw3IEBACiAKIGZyb20gdG9hc3Rlcm1haW4gaW1wb3J0IHNldHRpbmdzCiAKLWZyb20gYmJjb250cm9sbGVyIGltcG9ydCBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciwgU2hlbGxDbWRFeGNlcHRpb24sIEJ1aWxkU2V0dXBFeGNlcHRpb24sIEJpdGJha2VDb250cm9sbGVyCitmcm9tIGJsZGNvbnRyb2wuYmJjb250cm9sbGVyIGltcG9ydCBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciwgU2hlbGxDbWRFeGNlcHRpb24sIEJ1aWxkU2V0dXBFeGNlcHRpb24sIEJpdGJha2VDb250cm9sbGVyCiAKIGltcG9ydCBsb2dnaW5nCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCkBAIC02NiwxNiArNjYsMTYgQEAKICAgICAgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgb3V0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgZXJyKQotICAgICAgICAgICAgbG9nZ2VyLndhcm4oImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgZXJyb3IgJXMiICUgZXJyKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgZXJyb3IgJXMiICUgZXJyKQogICAgICAgICAgICAgcmFpc2UgU2hlbGxDbWRFeGNlcHRpb24oZXJyKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHNoZWxsY21kIHN1Y2Nlc3MiKQotICAgICAgICAgICAgcmV0dXJuIG91dAorICAgICAgICAgICAgcmV0dXJuIG91dC5kZWNvZGUoJ3V0Zi04JykKIAogICAgIGRlZiBnZXRHaXRDbG9uZURpcmVjdG9yeShzZWxmLCB1cmwsIGJyYW5jaCk6CiAgICAgICAgICIiIkNvbnN0cnVjdCB1bmlxdWUgY2xvbmUgZGlyZWN0b3J5IG5hbWUgb3V0IG9mIHVybCBhbmQgYnJhbmNoLiIiIgogICAgICAgICBpZiBicmFuY2ggIT0gIkhFQUQiOgotICAgICAgICAgICAgcmV0dXJuICJfdG9hc3Rlcl9jbG9uZXMvXyVzXyVzIiAlIChyZS5zdWIoJ1s6L0AlXScsICdfJywgdXJsKSwgYnJhbmNoKQorICAgICAgICAgICAgcmV0dXJuICJfdG9hc3Rlcl9jbG9uZXMvXyVzXyVzIiAlIChyZS5zdWIoJ1s6L0ArJV0nLCAnXycsIHVybCksIGJyYW5jaCkKIAogICAgICAgICAjIHdvcmQgb2YgYXR0ZW50aW9uOyB0aGlzIGlzIGEgbG9jYWxob3N0LXNwZWNpZmljIGlzc3VlOyBvbmx5IG9uIHRoZSBsb2NhbGhvc3Qgd2UgZXhwZWN0IHRvIGhhdmUgIkhFQUQiIHJlbGVhc2VzCiAgICAgICAgICMgd2hpY2ggX0FMV0FZU18gbWVhbnMgdGhlIGN1cnJlbnQgcG9reSBjaGVja291dApAQCAtODksMTkgKzg5LDM0IEBACiAgICAgICAgICIiIiBhIHdvcmQgb2YgYXR0ZW50aW9uOiBieSBjb252ZW50aW9uLCB0aGUgZmlyc3QgbGF5ZXIgZm9yIGFueSBidWlsZCB3aWxsIGJlIHBva3khICIiIgogCiAgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBpcyBub3QgTm9uZQorCisgICAgICAgIGxheWVybGlzdCA9IFtdCisgICAgICAgIG5vbmdpdGxheWVybGlzdCA9IFtdCisKICAgICAgICAgIyBzZXQgbGF5ZXJzIGluIHRoZSBsYXllcnNvdXJjZQogCiAgICAgICAgICMgMS4gZ2V0IGEgbGlzdCBvZiByZXBvcyB3aXRoIGJyYW5jaGVzLCBhbmQgbWFwIGRpcnBhdGhzIGZvciBlYWNoIGxheWVyCiAgICAgICAgIGdpdHJlcG9zID0ge30KIAotICAgICAgICBnaXRyZXBvc1soYml0YmFrZS5naXR1cmwsIGJpdGJha2UuY29tbWl0KV0gPSBbXQotICAgICAgICBnaXRyZXBvc1soYml0YmFrZS5naXR1cmwsIGJpdGJha2UuY29tbWl0KV0uYXBwZW5kKCAoImJpdGJha2UiLCBiaXRiYWtlLmRpcnBhdGgpICkKKyAgICAgICAgIyBpZiB3ZSdyZSB1c2luZyBhIHJlbW90ZWx5IGZldGNoZWQgdmVyc2lvbiBvZiBiaXRiYWtlIGFkZCBpdHMgZ2l0CisgICAgICAgICMgZGV0YWlscyB0byB0aGUgbGlzdCBvZiByZXBvcyB0byBjbG9uZQorICAgICAgICBpZiBiaXRiYWtlLmdpdHVybCBhbmQgYml0YmFrZS5jb21taXQ6CisgICAgICAgICAgICBnaXRyZXBvc1soYml0YmFrZS5naXR1cmwsIGJpdGJha2UuY29tbWl0KV0gPSBbXQorICAgICAgICAgICAgZ2l0cmVwb3NbKGJpdGJha2UuZ2l0dXJsLCBiaXRiYWtlLmNvbW1pdCldLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAoImJpdGJha2UiLCBiaXRiYWtlLmRpcnBhdGgpKQogCiAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CiAgICAgICAgICAgICAjIFdlIGRvbid0IG5lZWQgdG8gZ2l0IGNsb25lIHRoZSBsYXllciBmb3IgdGhlIEN1c3RvbUltYWdlUmVjaXBlCiAgICAgICAgICAgICAjIGFzIGl0J3MgZ2VuZXJhdGVkIGJ5IHVzIGxheWVyIG9uIGlmIG5lZWRlZAogICAgICAgICAgICAgaWYgQ3VzdG9tSW1hZ2VSZWNpcGUuTEFZRVJfTkFNRSBpbiBsYXllci5uYW1lOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsb2NhbCBsYXllcnMgdGhlbiB3ZSBkb24ndCBuZWVkIGNsb25lIHRoZW0KKyAgICAgICAgICAgICMgRm9yIGxvY2FsIGxheWVycyBnaXR1cmwgd2lsbCBiZSBlbXB0eQorICAgICAgICAgICAgaWYgbm90IGxheWVyLmdpdHVybDoKKyAgICAgICAgICAgICAgICBub25naXRsYXllcmxpc3QuYXBwZW5kKGxheWVyLmxheWVyX3ZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2RpcikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCiAgICAgICAgICAgICBpZiBub3QgKGxheWVyLmdpdHVybCwgbGF5ZXIuY29tbWl0KSBpbiBnaXRyZXBvczoKICAgICAgICAgICAgICAgICBnaXRyZXBvc1sobGF5ZXIuZ2l0dXJsLCBsYXllci5jb21taXQpXSA9IFtdCiAgICAgICAgICAgICBnaXRyZXBvc1sobGF5ZXIuZ2l0dXJsLCBsYXllci5jb21taXQpXS5hcHBlbmQoIChsYXllci5uYW1lLCBsYXllci5kaXJwYXRoKSApCkBAIC0xMzEsMTkgKzE0NiwyMiBAQAogCiAgICAgICAgIGxvZ2dlci5pbmZvKCJVc2luZyBwcmUtY2hlY2tlZCBvdXQgc291cmNlIGZvciBsYXllciAlcyIsIGNhY2hlZF9sYXllcnMpCiAKLSAgICAgICAgbGF5ZXJsaXN0ID0gW10KLQotCiAgICAgICAgICMgMy4gY2hlY2tvdXQgdGhlIHJlcG9zaXRvcmllcwogICAgICAgICBmb3IgZ2l0dXJsLCBjb21taXQgaW4gZ2l0cmVwb3Mua2V5cygpOgogICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCBzZWxmLmdldEdpdENsb25lRGlyZWN0b3J5KGdpdHVybCwgY29tbWl0KSkKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBnaXR1cmwgJXM6JXMgY2hlY2tpbmcgb3V0IGluIGN1cnJlbnQgZGlyZWN0b3J5ICVzIiAlIChnaXR1cmwsIGNvbW1pdCwgbG9jYWxkaXJuYW1lKSkKIAotICAgICAgICAgICAgIyBtYWtlIHN1cmUgb3VyIGRpcmVjdG9yeSBpcyBhIGdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAjIHNlZSBpZiBvdXIgZGlyZWN0b3J5IGlzIGEgZ2l0IHJlcG9zaXRvcnkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvY2FsZGlybmFtZSk6Ci0gICAgICAgICAgICAgICAgbG9jYWxyZW1vdGVzID0gc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgLXYiLCBsb2NhbGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGdpdHVybCBpbiBsb2NhbHJlbW90ZXM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkV4aXN0aW5nIGdpdCByZXBvc2l0b3J5IGF0ICVzLCBidXQgd2l0aCBkaWZmZXJlbnQgcmVtb3RlcyAoJyVzJywgZXhwZWN0ZWQgJyVzJykuIFRvYXN0ZXIgd2lsbCBub3QgY29udGludWUgb3V0IG9mIGZlYXIgb2YgZGFtYWdpbmcgc29tZXRoaW5nLiIgJSAobG9jYWxkaXJuYW1lLCAiLCAiLmpvaW4obG9jYWxyZW1vdGVzLnNwbGl0KCJcbiIpKSwgZ2l0dXJsKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxvY2FscmVtb3RlcyA9IHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIC12IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ2l0dXJsIGluIGxvY2FscmVtb3RlcyBhbmQgY29tbWl0ICE9ICdIRUFEJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkV4aXN0aW5nIGdpdCByZXBvc2l0b3J5IGF0ICVzLCBidXQgd2l0aCBkaWZmZXJlbnQgcmVtb3RlcyAoJyVzJywgZXhwZWN0ZWQgJyVzJykuIFRvYXN0ZXIgd2lsbCBub3QgY29udGludWUgb3V0IG9mIGZlYXIgb2YgZGFtYWdpbmcgc29tZXRoaW5nLiIgJSAobG9jYWxkaXJuYW1lLCAiLCAiLmpvaW4obG9jYWxyZW1vdGVzLnNwbGl0KCJcbiIpKSwgZ2l0dXJsKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICMgb3VyIGxvY2FsZGlybmFtZSBtaWdodCBub3QgYmUgYSBnaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAjLSB0aGF0J3MgZmluZQorICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGlmIGdpdHVybCBpbiBjYWNoZWRfbGF5ZXJzOgogICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlciBnaXQtY29weWluZyAlcyB0byAlcyIgJSAoY2FjaGVkX2xheWVyc1tnaXR1cmxdLCBsb2NhbGRpcm5hbWUpKQpAQCAtMjQ1LDYgKzI2Myw3IEBACiAgICAgICAgICAgICBsYXllcmxpc3QuYXBwZW5kKGxheWVycGF0aCkKIAogICAgICAgICBzZWxmLmlzbGF5ZXJzZXQgPSBUcnVlCisgICAgICAgIGxheWVybGlzdC5leHRlbmQobm9uZ2l0bGF5ZXJsaXN0KQogICAgICAgICByZXR1cm4gbGF5ZXJsaXN0CiAKICAgICBkZWYgcmVhZFNlcnZlckxvZ0ZpbGUoc2VsZik6CkBAIC0yODcsNyArMzA2LDcgQEAKIAogICAgICAgICAjIHJ1biBiaXRiYWtlIHNlcnZlciBmcm9tIHRoZSBjbG9uZQogICAgICAgICBiaXRiYWtlID0gb3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJywgJ2JpbicsICdiaXRiYWtlJykKLSAgICAgICAgc2VsZi5fc2hlbGxjbWQoJ2Jhc2ggLWMgXCJzb3VyY2UgJXMgJXM7IEJJVEJBS0VfVUk9IiIgJXMgLS1yZWFkICVzICcKKyAgICAgICAgc2VsZi5fc2hlbGxjbWQoJ2Jhc2ggLWMgXCJzb3VyY2UgJXMgJXM7IEJJVEJBS0VfVUk9Imtub3R0eSIgJXMgLS1yZWFkICVzICcKICAgICAgICAgICAgICAgICAgICAgICAgJy0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIDAuMC4wLjA6MFwiJyAlIChvZV9pbml0LAogICAgICAgICAgICAgICAgICAgICAgICBidWlsZGRpciwgYml0YmFrZSwgY29uZnBhdGgpLCBzZWxmLmJlLnNvdXJjZWRpcikKIApAQCAtMzI0LDcgKzM0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UnKQogICAgICAgICBzZWxmLl9zaGVsbGNtZChbJ2Jhc2ggLWMgXCIoVE9BU1RFUl9CUkJFPSIlcyIgQkJTRVJWRVI9IjAuMC4wLjA6LTEiICcKICAgICAgICAgICAgICAgICAgICAgICAgICclcyAlcyAtdSB0b2FzdGVydWkgLS10b2tlbj0iIiA+PiVzIDI+JjE7JwotICAgICAgICAgICAgICAgICAgICAgICAgJ0JJVEJBS0VfVUk9IiIgQkJTRVJWRVI9MC4wLjAuMDotMSAlcyAtbSkmXCInIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICdCSVRCQUtFX1VJPSJrbm90dHkiIEJCU0VSVkVSPTAuMC4wLjA6LTEgJXMgLW0pJlwiJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAlIChicmJlLCBsb2NhbF9iaXRiYWtlLCBiYnRhcmdldHMsIGxvZywgYml0YmFrZSldLAogICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRkaXIsIG5vd2FpdD1UcnVlKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvY2hlY2tzZXR0aW5ncy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5CmluZGV4IDVlNzA0MzcuLjJlZDk5NGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5CkBAIC0xLDEwICsxLDE1IEBACiBmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZCwgQ29tbWFuZEVycm9yCiBmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KKworZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50IGltcG9ydCBjYWxsX2NvbW1hbmQKIGZyb20gYmxkY29udHJvbC5iYmNvbnRyb2xsZXIgaW1wb3J0IGdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLCBTaGVsbENtZEV4Y2VwdGlvbgogZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCdWlsZEVudmlyb25tZW50LCBCUkVycm9yCi1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRvYXN0ZXJTZXR0aW5nLCBCdWlsZAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBUb2FzdGVyU2V0dGluZywgQnVpbGQsIExheWVyCisKIGltcG9ydCBvcwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHdhcm5pbmdzCisKIAogZGVmIEROKHBhdGgpOgogICAgIGlmIHBhdGggaXMgTm9uZToKQEAgLTIxLDM5ICsyNiw2IEBACiAgICAgICAgIHN1cGVyKENvbW1hbmQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5ndWVzc3BhdGggPSBETihETihETihETihETihETihETihfX2ZpbGVfXykpKSkpKSkKIAotICAgIGRlZiBfZmluZF9maXJzdF9wYXRoX2Zvcl9maWxlKHNlbGYsIHN0YXJ0ZGlyZWN0b3J5LCBmaWxlbmFtZSwgbGV2ZWw9MCk6Ci0gICAgICAgIGlmIGxldmVsIDwgMDoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGRpcnMgPSBbXQotICAgICAgICBmb3IgaSBpbiBvcy5saXN0ZGlyKHN0YXJ0ZGlyZWN0b3J5KToKLSAgICAgICAgICAgIGogPSBvcy5wYXRoLmpvaW4oc3RhcnRkaXJlY3RvcnksIGkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShqKToKLSAgICAgICAgICAgICAgICBpZiBpID09IGZpbGVuYW1lOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRkaXJlY3RvcnkKLSAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihqKToKLSAgICAgICAgICAgICAgICBkaXJzLmFwcGVuZChqKQotICAgICAgICBmb3IgaiBpbiBkaXJzOgotICAgICAgICAgICAgcmV0ID0gc2VsZi5fZmluZF9maXJzdF9wYXRoX2Zvcl9maWxlKGosIGZpbGVuYW1lLCBsZXZlbCAtIDEpCi0gICAgICAgICAgICBpZiByZXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldAotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9yZWN1cnNpdmVfbGlzdF9kaXJlY3RvcmllcyhzZWxmLCBzdGFydGRpcmVjdG9yeSwgbGV2ZWw9MCk6Ci0gICAgICAgIGlmIGxldmVsIDwgMDoKLSAgICAgICAgICAgIHJldHVybiBbXQotICAgICAgICBkaXJzID0gW10KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihzdGFydGRpcmVjdG9yeSk6Ci0gICAgICAgICAgICAgICAgaiA9IG9zLnBhdGguam9pbihzdGFydGRpcmVjdG9yeSwgaSkKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGopOgotICAgICAgICAgICAgICAgICAgICBkaXJzLmFwcGVuZChqKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZm9yIGogaW4gZGlyczoKLSAgICAgICAgICAgIGRpcnMgPSBkaXJzICsgc2VsZi5fcmVjdXJzaXZlX2xpc3RfZGlyZWN0b3JpZXMoaiwgbGV2ZWwgLSAxKQotICAgICAgICByZXR1cm4gZGlycwotCi0KICAgICBkZWYgX3ZlcmlmeV9idWlsZF9lbnZpcm9ubWVudChzZWxmKToKICAgICAgICAgIyBwcm92aWRlIGEgbG9jYWwgYnVpbGQgZW52LiBUaGlzIHdpbGwgYmUgZXh0ZW5kZWQgbGF0ZXIgdG8gaW5jbHVkZSBub24gbG9jYWwKICAgICAgICAgaWYgQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmNvdW50KCkgPT0gMDoKQEAgLTcwLDExICs0MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgICAgICAgICAgaWYgbGVuKGJlLnNvdXJjZWRpcikgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgc2V0LiIKICAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfc291cmNlZGlyKCkKIAogICAgICAgICAgICAgICAgIGlmIG5vdCBiZS5zb3VyY2VkaXIuc3RhcnRzd2l0aCgiLyIpOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4gLS0gVmFsaWRhdGlvbjogVGhlIGxheWVycyBjaGVja291dCBkaXJlY3RvcnkgbXVzdCBiZSBzZXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4iCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbiAtLSBWYWxpZGF0aW9uOiBUaGUgbGF5ZXJzIGNoZWNrb3V0IGRpcmVjdG9yeSBtdXN0IGJlIHNldCB0byBhbiBhYnNvbHV0ZSBwYXRoLiIpCiAgICAgICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBfdXBkYXRlX3NvdXJjZWRpcigpCiAKICAgICAgICAgICAgICAgICBpZiBpc19jaGFuZ2VkOgpAQCAtODcsMzggKzU4LDY3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgICAgICAgICBpZiBsZW4oYmUuYnVpbGRkaXIpID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiAtLSBWYWxpZGF0aW9uOiBUaGUgYnVpbGQgZGlyZWN0b3J5IG11c3QgYmUgc2V0LiIKICAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfYnVpbGRkaXIoKQogCiAgICAgICAgICAgICAgICAgaWYgbm90IGJlLmJ1aWxkZGlyLnN0YXJ0c3dpdGgoIi8iKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBidWlsZCBkaXJlY3RvcnkgbXVzdCB0byBiZSBzZXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4iCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbiAtLSBWYWxpZGF0aW9uOiBUaGUgYnVpbGQgZGlyZWN0b3J5IG11c3QgdG8gYmUgc2V0IHRvIGFuIGFic29sdXRlIHBhdGguIikKICAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfYnVpbGRkaXIoKQogCi0KICAgICAgICAgICAgICAgICBpZiBpc19jaGFuZ2VkOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5CdWlsZCBjb25maWd1cmF0aW9uIHNhdmVkIgorICAgICAgICAgICAgICAgICAgICBwcmludCgiXG5CdWlsZCBjb25maWd1cmF0aW9uIHNhdmVkIikKICAgICAgICAgICAgICAgICAgICAgYmUuc2F2ZSgpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKLQogICAgICAgICAgICAgICAgIGlmIGJlLm5lZWRzX2ltcG9ydDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUgPSBvcy5lbnZpcm9uLmdldCgnVE9BU1RFUl9DT05GJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbkltcG9ydGluZyBmaWxlOiAlcyIgJSBjb25maWdfZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBsb2FkY29uZiBpbXBvcnQgQ29tbWFuZCBhcyBMb2FkQ29uZmlnQ29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkxvYWRpbmcgZGVmYXVsdCBzZXR0aW5ncyIpCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2NvbW1hbmQoImxvYWRkYXRhIiwgInNldHRpbmdzIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX2NvbmYgPSBvcy5lbnZpcm9uLmdldCgiVEVNUExBVEVDT05GIiwgIiIpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRDb25maWdDb21tYW5kKCkuX2ltcG9ydF9sYXllcl9jb25maWcoY29uZmlnX2ZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAicG9reSIgaW4gdGVtcGxhdGVfY29uZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiTG9hZGluZyBwb2t5IGNvbmZpZ3VyYXRpb24iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfY29tbWFuZCgibG9hZGRhdGEiLCAicG9reSIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJMb2FkaW5nIE9FLUNvcmUgY29uZmlndXJhdGlvbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9jb21tYW5kKCJsb2FkZGF0YSIsICJvZS1jb3JlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZW1wbGF0ZV9jb25mOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfY29uZiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLy4uLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlRFTVBMQVRFQ09ORiBub3QgZm91bmQuIFlvdSBtYXkgaGF2ZSB0byIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtYW51YWxseSBjb25maWd1cmUgbGF5ZXIgcGF0aHMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX3BhdGggPSBpbnB1dCgiUGxlYXNlIGVudGVyIHRoZSBwYXRoIG9mIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHlvdXIgb3BlbmVtYmVkZGVkLWNvcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF5ZXI6ICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgdGhlIGxheWVyIGluc3RhbmNlcyBvZiBvcGVuZW1lYmVkZGVkLWNvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gTGF5ZXIub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJvcGVuZW1iZWRkZWQtY29yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9zb3VyY2VfZGlyPSJPRS1DT1JFLUxBWUVSLURJUiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5sb2NhbF9wYXRoID0gb2VfY29yZV9wYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNhdmUoKQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEltcG9ydCB0aGUgY3VzdG9tIGZpeHR1cmUgaWYgaXQncyBwcmVzZW50CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0iXi4qTm8gZml4dHVyZSBuYW1lZC4qJCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkltcG9ydGluZyBjdXN0b20gc2V0dGluZ3MgaWYgcHJlc2VudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9jb21tYW5kKCJsb2FkZGF0YSIsICJjdXN0b20iKQorCiAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHJ1biBsc3VwZGF0ZXMgYWZ0ZXIgY29uZmlnIHVwZGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuTGF5ZXIgY29uZmlndXJhdGlvbiBpbXBvcnRlZC4gVXBkYXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgbGF5ZXIgc291cmNlcywgcGxlYXNlIHdhaXQuXG5Zb3UgY2FuIHJlLXVwZGF0ZSBhbnkgdGltZSBsYXRlciBieSBydW5uaW5nIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxzdXBkYXRlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudCBpbXBvcnQgY2FsbF9jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiXG5GZXRjaGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsYXllciBpbmRleCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBsZWFzZSB3YWl0LlxuWW91IGNhbiByZS11cGRhdGUgYW55IHRpbWUgbGF0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IHJ1bm5pbmcgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxzdXBkYXRlc1xuIikKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfY29tbWFuZCgibHN1cGRhdGVzIikKIAogICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBkb24ndCBsb29rIGZvciBhbnkgb3RoZXIgY29uZmlnIGZpbGVzCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNfY2hhbmdlZAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbHVyZSB3aGlsZSB0cnlpbmcgdG8gaW1wb3J0IHRoZSB0b2FzdGVyIGNvbmZpZyBmaWxlICVzOiAlcyIgJVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlnX2ZpbGUsIGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiRmFpbHVyZSB3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdG9hc3RlcjogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGUpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKIAogICAgICAgICAgICAgICAgIHJldHVybiBpc19jaGFuZ2VkCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9sb2FkY29uZi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9sb2FkY29uZi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyMmI1OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvbG9hZGNvbmYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kLCBDb21tYW5kRXJyb3IKLWZyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UsIFRvYXN0ZXJTZXR0aW5nLCBCcmFuY2gsIExheWVyLCBMYXllcl9WZXJzaW9uCi1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBSZWxlYXNlRGVmYXVsdExheWVyLCBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eQotZnJvbSBkamFuZ28uZGIgaW1wb3J0IEludGVncml0eUVycm9yCi1pbXBvcnQgb3MKLQotZnJvbSBjaGVja3NldHRpbmdzIGltcG9ydCBETgotCi1pbXBvcnQgbG9nZ2luZwotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQotCi1kZWYgX3JlZHVjZV9jYW5vbl9wYXRoKHBhdGgpOgotICAgIGNvbXBvbmVudHMgPSBbXQotICAgIGZvciBjIGluIHBhdGguc3BsaXQoIi8iKToKLSAgICAgICAgaWYgYyA9PSAiLi4iOgotICAgICAgICAgICAgZGVsIGNvbXBvbmVudHNbLTFdCi0gICAgICAgIGVsaWYgYyA9PSAiLiI6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21wb25lbnRzLmFwcGVuZChjKQotICAgIGlmIGxlbihjb21wb25lbnRzKSA8IDI6Ci0gICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKCcnKQotICAgIHJldHVybiAiLyIuam9pbihjb21wb25lbnRzKQotCi1kZWYgX2dldF9pZF9mb3Jfc291cmNldHlwZShzKToKLSAgICBmb3IgaSBpbiBMYXllclNvdXJjZS5TT1VSQ0VfVFlQRToKLSAgICAgICAgaWYgcyA9PSBpWzFdOgotICAgICAgICAgICAgcmV0dXJuIGlbMF0KLSAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIGRlZmluaXRpb24gZm9yIHNvdXJjZXR5cGUgJyVzJy4gVmFsaWQgc291cmNlIHR5cGVzIGFyZSAlcyIgJSAoc3RyKHMpLCAnLCAnLmpvaW4obWFwKGxhbWJkYSB4OiAiJyVzJyIgJSB4WzFdLCBMYXllclNvdXJjZS5TT1VSQ0VfVFlQRSApKSkpCi0KLWNsYXNzIENvbW1hbmQoQmFzZUNvbW1hbmQpOgotICAgIGhlbHAgPSAiTG9hZHMgYSB0b2FzdGVyY29uZi5qc29uIGZpbGUgaW4gdGhlIGRhdGFiYXNlIgotICAgIGFyZ3MgPSAiZmlsZXBhdGgiCi0KLQotCi0gICAgZGVmIF9pbXBvcnRfbGF5ZXJfY29uZmlnKHNlbGYsIGZpbGVwYXRoKToKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoZmlsZXBhdGgpOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCB0b2FzdGVyIGNvbmZpZyBmaWxlICVzIC4iICUgZmlsZXBhdGgpCi0KLSAgICAgICAgaW1wb3J0IGpzb24KLSAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMob3BlbihmaWxlcGF0aCwgInIiKS5yZWFkKCkpCi0KLSAgICAgICAgIyB2ZXJpZnkgY29uZmlnIGZpbGUgdmFsaWRpdHkgYmVmb3JlIHVwZGF0aW5nIHNldHRpbmdzCi0gICAgICAgIGZvciBpIGluIFsnYml0YmFrZScsICdyZWxlYXNlcycsICdkZWZhdWx0cmVsZWFzZScsICdjb25maWcnLCAnbGF5ZXJzb3VyY2VzJ106Ci0gICAgICAgICAgICBhc3NlcnQgaSBpbiBkYXRhCi0KLSAgICAgICAgZGVmIF9yZWFkX2dpdF91cmxfZnJvbV9sb2NhbF9yZXBvc2l0b3J5KGFkZHJlc3MpOgotICAgICAgICAgICAgdXJsID0gTm9uZQotICAgICAgICAgICAgIyB3ZSBkZXRlY3QgdGhlIHJlbW90ZSBuYW1lIGF0IHJ1bnRpbWUKLSAgICAgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCi0gICAgICAgICAgICAocmVtb3RlLCByZW1vdGVfbmFtZSkgPSBhZGRyZXNzLnNwbGl0KCI6IiwgMSkKLSAgICAgICAgICAgIGNtZCA9IHN1YnByb2Nlc3MuUG9wZW4oImdpdCByZW1vdGUgLXYiLCBzaGVsbD1UcnVlLCBjd2QgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZXBhdGgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICAob3V0LGVycikgPSBjbWQuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgaWYgY21kLnJldHVybmNvZGUgIT0gMDoKLSAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkVycm9yIHdoaWxlIGltcG9ydGluZyBsYXllciB2Y3NfdXJsOiBnaXQgZXJyb3I6ICVzIiAlIGVycikKLSAgICAgICAgICAgIGZvciBsaW5lIGluIG91dC5zcGxpdCgiXG4iKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIChuYW1lLCBwYXRoKSA9IGxpbmUuc3BsaXQoIlx0IiwgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSByZW1vdGVfbmFtZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHBhdGguc3BsaXQoIiAiKVswXQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgaWYgdXJsID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJFcnJvciB3aGlsZSBsb29raW5nIGZvciByZW1vdGUgXCIlc1wiIGluIFwiJXNcIiIgJSAocmVtb3RlX25hbWUsIG91dCkpCi0gICAgICAgICAgICByZXR1cm4gdXJsCi0KLQotICAgICAgICAjIGltcG9ydCBiaXRiYWtlIGRhdGEKLSAgICAgICAgZm9yIGJ2aSBpbiBkYXRhWydiaXRiYWtlJ106Ci0gICAgICAgICAgICBidm8sIGNyZWF0ZWQgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1idmlbJ25hbWUnXSkKLSAgICAgICAgICAgIGlmIGJ2aVsnZ2l0dXJsJ10uc3RhcnRzd2l0aCgicmVtb3RlOiIpOgotICAgICAgICAgICAgICAgIGJ2by5naXR1cmwgPSBfcmVhZF9naXRfdXJsX2Zyb21fbG9jYWxfcmVwb3NpdG9yeShidmlbJ2dpdHVybCddKQotICAgICAgICAgICAgICAgIGlmIGJ2by5naXR1cmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgdG9hc3RlciBjb25maWcgZmlsZSByZWZlcmVuY2VzIHRoZSBsb2NhbCBnaXQgcmVwbywgYnV0IFRvYXN0ZXIgY2Fubm90IGRldGVjdCBpdC5cbllvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmb3IgYml0YmFrZSB2ZXJzaW9uICVzIGlzIGludmFsaWQuIE1ha2Ugc3VyZSB0aGF0IHRoZSB0b2FzdGVyY29uZi5qc29uIGZpbGUgaXMgY29ycmVjdC4iICUgYnZpWyduYW1lJ10pCi0KLSAgICAgICAgICAgIGlmIGJ2by5naXR1cmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBidm8uZ2l0dXJsID0gYnZpWydnaXR1cmwnXQotICAgICAgICAgICAgYnZvLmJyYW5jaCA9IGJ2aVsnYnJhbmNoJ10KLSAgICAgICAgICAgIGJ2by5kaXJwYXRoID0gYnZpWydkaXJwYXRoJ10KLSAgICAgICAgICAgIGJ2by5zYXZlKCkKLQotICAgICAgICAjIHNldCB0aGUgbGF5ZXIgc291cmNlcwotICAgICAgICBmb3IgbHNpIGluIGRhdGFbJ2xheWVyc291cmNlcyddOgotICAgICAgICAgICAgYXNzZXJ0ICdzb3VyY2V0eXBlJyBpbiBsc2kKLSAgICAgICAgICAgIGFzc2VydCAnYXBpdXJsJyBpbiBsc2kKLSAgICAgICAgICAgIGFzc2VydCAnbmFtZScgaW4gbHNpCi0gICAgICAgICAgICBhc3NlcnQgJ2JyYW5jaGVzJyBpbiBsc2kKLQotCi0gICAgICAgICAgICBpZiBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKGxzaVsnc291cmNldHlwZSddKSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVggb3IgbHNpWydhcGl1cmwnXS5zdGFydHN3aXRoKCIvIik6Ci0gICAgICAgICAgICAgICAgYXBpdXJsID0gbHNpWydhcGl1cmwnXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhcGl1cmwgPSBfcmVkdWNlX2Nhbm9uX3BhdGgob3MucGF0aC5qb2luKEROKG9zLnBhdGguYWJzcGF0aChmaWxlcGF0aCkpLCBsc2lbJ2FwaXVybCddKSkKLQotICAgICAgICAgICAgYXNzZXJ0ICgoX2dldF9pZF9mb3Jfc291cmNldHlwZShsc2lbJ3NvdXJjZXR5cGUnXSkgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYKSBvciBhcGl1cmwuc3RhcnRzd2l0aCgiLyIpKSwgKGxzaVsnc291cmNldHlwZSddLGFwaXVybCkKLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxzLCBjcmVhdGVkID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHNvdXJjZXR5cGUgPSBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKGxzaVsnc291cmNldHlwZSddKSwgYXBpdXJsID0gYXBpdXJsKQotICAgICAgICAgICAgICAgIGxzLm5hbWUgPSBsc2lbJ25hbWUnXQotICAgICAgICAgICAgICAgIGxzLnNhdmUoKQotICAgICAgICAgICAgZXhjZXB0IEludGVncml0eUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkludGVncml0eUVycm9yICVzIFxuV2hpbGUgc2V0dGluZyBuYW1lICVzIGZvciBsYXllciBzb3VyY2UgJXMgIiAlIChlLCBsc2lbJ25hbWUnXSwgbHMpKQotCi0KLSAgICAgICAgICAgIGxheWVyYnJhbmNoZXMgPSBbXQotICAgICAgICAgICAgZm9yIGJyYW5jaG5hbWUgaW4gbHNpWydicmFuY2hlcyddOgotICAgICAgICAgICAgICAgIGJvLCBjcmVhdGVkID0gQnJhbmNoLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBscywgbmFtZSA9IGJyYW5jaG5hbWUpCi0gICAgICAgICAgICAgICAgbGF5ZXJicmFuY2hlcy5hcHBlbmQoYm8pCi0KLSAgICAgICAgICAgIGlmICdsYXllcnMnIGluIGxzaToKLSAgICAgICAgICAgICAgICBmb3IgbGF5ZXJpbmZvIGluIGxzaVsnbGF5ZXJzJ106Ci0gICAgICAgICAgICAgICAgICAgIGxvLCBjcmVhdGVkID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IGxzLCBuYW1lID0gbGF5ZXJpbmZvWyduYW1lJ10pCi0gICAgICAgICAgICAgICAgICAgIGlmIGxheWVyaW5mb1snbG9jYWxfcGF0aCddLnN0YXJ0c3dpdGgoIi8iKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvLmxvY2FsX3BhdGggPSBsYXllcmluZm9bJ2xvY2FsX3BhdGgnXQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbG8ubG9jYWxfcGF0aCA9IF9yZWR1Y2VfY2Fub25fcGF0aChvcy5wYXRoLmpvaW4obHMuYXBpdXJsLCBsYXllcmluZm9bJ2xvY2FsX3BhdGgnXSkpCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvLmxvY2FsX3BhdGgpOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJMb2NhbCBsYXllciBwYXRoICVzIG11c3QgZXhpc3RzLiBBcmUgeW91IHRyeWluZyB0byBpbXBvcnQgYSBsYXllciB0aGF0IGRvZXMgbm90IGV4aXN0ID8gQ2hlY2sgeW91ciBsb2NhbCB0b2FzdGVyY29uZi5qc29uIiAlIGxvLmxvY2FsX3BhdGgpCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJpbmZvWyd2Y3NfdXJsJ10uc3RhcnRzd2l0aCgicmVtb3RlOiIpOgotICAgICAgICAgICAgICAgICAgICAgICAgbG8udmNzX3VybCA9IF9yZWFkX2dpdF91cmxfZnJvbV9sb2NhbF9yZXBvc2l0b3J5KGxheWVyaW5mb1sndmNzX3VybCddKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG8udmNzX3VybCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIHRvYXN0ZXIgY29uZmlnIGZpbGUgcmVmZXJlbmNlcyB0aGUgbG9jYWwgZ2l0IHJlcG8sIGJ1dCBUb2FzdGVyIGNhbm5vdCBkZXRlY3QgaXQuXG5Zb3VyIGxvY2FsIGNvbmZpZ3VyYXRpb24gZm9yIGxheWVyICVzIGlzIGludmFsaWQuIE1ha2Ugc3VyZSB0aGF0IHRoZSB0b2FzdGVyY29uZi5qc29uIGZpbGUgaXMgY29ycmVjdC4iICUgbGF5ZXJpbmZvWyduYW1lJ10pCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgbG8udmNzX3VybCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgbG8udmNzX3VybCA9IGxheWVyaW5mb1sndmNzX3VybCddCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgJ2xheWVyX2luZGV4X3VybCcgaW4gbGF5ZXJpbmZvOgotICAgICAgICAgICAgICAgICAgICAgICAgbG8ubGF5ZXJfaW5kZXhfdXJsID0gbGF5ZXJpbmZvWydsYXllcl9pbmRleF91cmwnXQotICAgICAgICAgICAgICAgICAgICBsby5zYXZlKCkKLQotICAgICAgICAgICAgICAgICAgICBmb3IgYnJhbmNoIGluIGxheWVyYnJhbmNoZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsdm8sIGNyZWF0ZWQgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBfYnJhbmNoID0gYnJhbmNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgPSBicmFuY2gubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBsbykKLSAgICAgICAgICAgICAgICAgICAgICAgIGx2by5kaXJwYXRoID0gbGF5ZXJpbmZvWydkaXJwYXRoJ10KLSAgICAgICAgICAgICAgICAgICAgICAgIGx2by5zYXZlKCkKLSAgICAgICAgIyBzZXQgcmVsZWFzZXMKLSAgICAgICAgZm9yIHJpIGluIGRhdGFbJ3JlbGVhc2VzJ106Ci0gICAgICAgICAgICBidm8gPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmdldChuYW1lID0gcmlbJ2JpdGJha2UnXSkKLSAgICAgICAgICAgIGFzc2VydCBidm8gaXMgbm90IE5vbmUKLQotICAgICAgICAgICAgcm8sIGNyZWF0ZWQgPSBSZWxlYXNlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lID0gcmlbJ25hbWUnXSwgYml0YmFrZV92ZXJzaW9uID0gYnZvLCBicmFuY2hfbmFtZSA9IHJpWydicmFuY2gnXSkKLSAgICAgICAgICAgIHJvLmRlc2NyaXB0aW9uID0gcmlbJ2Rlc2NyaXB0aW9uJ10KLSAgICAgICAgICAgIHJvLmhlbHB0ZXh0ID0gcmlbJ2hlbHB0ZXh0J10KLSAgICAgICAgICAgIHJvLnNhdmUoKQotCi0gICAgICAgICAgICAjIHNhdmUgbGF5ZXIgc291cmNlIHByaW9yaXR5IGZvciByZWxlYXNlCi0gICAgICAgICAgICBmb3IgbHNfbmFtZSBpbiByaVsnbGF5ZXJzb3VyY2Vwcmlvcml0eSddLmtleXMoKToKLSAgICAgICAgICAgICAgICBybHNwbywgY3JlYXRlZCA9IFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZShyZWxlYXNlID0gcm8sIGxheWVyX3NvdXJjZSA9IExheWVyU291cmNlLm9iamVjdHMuZ2V0KG5hbWU9bHNfbmFtZSkpCi0gICAgICAgICAgICAgICAgcmxzcG8ucHJpb3JpdHkgPSByaVsnbGF5ZXJzb3VyY2Vwcmlvcml0eSddW2xzX25hbWVdCi0gICAgICAgICAgICAgICAgcmxzcG8uc2F2ZSgpCi0KLSAgICAgICAgICAgIGZvciBkbGkgaW4gcmlbJ2RlZmF1bHRsYXllcnMnXToKLSAgICAgICAgICAgICAgICAjIGZpbmQgbGF5ZXJzIHdpdGggdGhlIHNhbWUgbmFtZQotICAgICAgICAgICAgICAgIFJlbGVhc2VEZWZhdWx0TGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKCByZWxlYXNlID0gcm8sIGxheWVyX25hbWUgPSBkbGkpCi0KLSAgICAgICAgIyBzZXQgZGVmYXVsdCByZWxlYXNlCi0gICAgICAgIGlmIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIikuY291bnQoKSA+IDA6Ci0gICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gIkRFRkFVTFRfUkVMRUFTRSIpLnVwZGF0ZSh2YWx1ZSA9IGRhdGFbJ2RlZmF1bHRyZWxlYXNlJ10pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmNyZWF0ZShuYW1lID0gIkRFRkFVTFRfUkVMRUFTRSIsIHZhbHVlID0gZGF0YVsnZGVmYXVsdHJlbGVhc2UnXSkKLQotICAgICAgICAjIHNldCBkZWZhdWx0IGNvbmZpZyB2YXJpYWJsZXMKLSAgICAgICAgZm9yIGNvbmZpZ25hbWUgaW4gZGF0YVsnY29uZmlnJ106Ci0gICAgICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gIkRFRkNPTkZfIiArIGNvbmZpZ25hbWUpLmNvdW50KCkgPiAwOgotICAgICAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQ09ORl8iICsgY29uZmlnbmFtZSkudXBkYXRlKHZhbHVlID0gZGF0YVsnY29uZmlnJ11bY29uZmlnbmFtZV0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuY3JlYXRlKG5hbWUgPSAiREVGQ09ORl8iICsgY29uZmlnbmFtZSwgdmFsdWUgPSBkYXRhWydjb25maWcnXVtjb25maWduYW1lXSkKLQotCi0gICAgZGVmIGhhbmRsZShzZWxmLCAqYXJncywgKipvcHRpb25zKToKLSAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6Ci0gICAgICAgICAgICByYWlzZSBDb21tYW5kRXJyb3IoIk5lZWQgYSBwYXRoIHRvIHRoZSB0b2FzdGVyY29uZi5qc29uIGZpbGUiKQotICAgICAgICBmaWxlcGF0aCA9IGFyZ3NbMF0KLSAgICAgICAgc2VsZi5faW1wb3J0X2xheWVyX2NvbmZpZyhmaWxlcGF0aCkKLQotCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvcnVuYnVpbGRzLnB5CmluZGV4IDI3Mjg5YmUuLjdmN2E1YTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL3J1bmJ1aWxkcy5weQpAQCAtMSwzMSArMSwyNyBAQAotZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IE5vQXJnc0NvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IE5vQXJnc0NvbW1hbmQKIGZyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgogZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCiAKIGZyb20gYmxkY29udHJvbC5iYmNvbnRyb2xsZXIgaW1wb3J0IGdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyCi1mcm9tIGJsZGNvbnRyb2wuYmJjb250cm9sbGVyIGltcG9ydCBTaGVsbENtZEV4Y2VwdGlvbiwgQnVpbGRTZXR1cEV4Y2VwdGlvbgogZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCdWlsZEVudmlyb25tZW50CiBmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCUkVycm9yLCBCUlZhcmlhYmxlCiAKLWZyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRvYXN0ZXJTZXR0aW5nLCBMb2dNZXNzYWdlLCBUYXJnZXQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIExvZ01lc3NhZ2UsIFRhcmdldAogCi1pbXBvcnQgb3MKIGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5cwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHNpZ25hbAogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCiAKIGNsYXNzIENvbW1hbmQoTm9BcmdzQ29tbWFuZCk6Ci0gICAgYXJncyAgICA9ICIiCi0gICAgaGVscCAgICA9ICJTY2hlZHVsZXMgYW5kIGV4ZWN1dGVzIGJ1aWxkIHJlcXVlc3RzIGFzIHBvc3NpYmxlLiIKLSAgICAiRG9lcyBub3QgcmV0dXJuIChpbnRlcnJ1cHQgd2l0aCBDdHJsLUMpIgotCisgICAgYXJncyA9ICIiCisgICAgaGVscCA9ICJTY2hlZHVsZXMgYW5kIGV4ZWN1dGVzIGJ1aWxkIHJlcXVlc3RzIGFzIHBvc3NpYmxlLiAiXAorICAgICAgICAgICAiRG9lcyBub3QgcmV0dXJuIChpbnRlcnJ1cHQgd2l0aCBDdHJsLUMpIgogCiAgICAgQHRyYW5zYWN0aW9uLmF0b21pYwogICAgIGRlZiBfc2VsZWN0QnVpbGRFbnZpcm9ubWVudChzZWxmKToKLSAgICAgICAgYmVjID0gZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIobG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFKQorICAgICAgICBiZWMgPSBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcihsb2NrPUJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFKQogICAgICAgICBiZWMuYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19MT0NLCiAgICAgICAgIGJlYy5iZS5zYXZlKCkKICAgICAgICAgcmV0dXJuIGJlYwpAQCAtNTQsOCArNTAsOCBAQAogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygicnVuYnVpbGRzOiBObyBidWlsZCBlbnYiKQogICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICBsb2dnZXIuZGVidWcoInJ1bmJ1aWxkczogc3RhcnRpbmcgYnVpbGQgJXMsIGVudmlyb25tZW50ICVzIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKGJyKS5kZWNvZGUoJ3V0Zi04JyksIGJlYy5iZSkpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygicnVuYnVpbGRzOiBzdGFydGluZyBidWlsZCAlcywgZW52aXJvbm1lbnQgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGJyLCBiZWMuYmUpKQogCiAgICAgICAgICAgICAjIGxldCB0aGUgYnVpbGQgcmVxdWVzdCBrbm93IHdoZXJlIGl0IGlzIGJlaW5nIGV4ZWN1dGVkCiAgICAgICAgICAgICBici5lbnZpcm9ubWVudCA9IGJlYy5iZQpAQCAtNjgsMjQgKzY0LDIyIEBACiAKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJydW5idWlsZHM6IEVycm9yIGxhdW5jaGluZyBidWlsZCAlcyIgJSBlKQotICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhlKQorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICAgICAgICAgICBpZiAiW0Vycm5vIDExMV0gQ29ubmVjdGlvbiByZWZ1c2VkIiBpbiBzdHIoZSk6CiAgICAgICAgICAgICAgICAgIyBDb25uZWN0aW9uIHJlZnVzZWQsIHJlYWQgdG9hc3Rlcl9zZXJ2ZXIub3V0CiAgICAgICAgICAgICAgICAgZXJybXNnID0gYmVjLnJlYWRTZXJ2ZXJMb2dGaWxlKCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZXJybXNnID0gc3RyKGUpCiAKLSAgICAgICAgICAgIEJSRXJyb3Iub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsCi0gICAgICAgICAgICAgICAgICAgIGVycnR5cGUgPSBzdHIodHlwZShlKSksCi0gICAgICAgICAgICAgICAgICAgIGVycm1zZyA9IGVycm1zZywKLSAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAgICAgICBCUkVycm9yLm9iamVjdHMuY3JlYXRlKHJlcT1iciwgZXJydHlwZT1zdHIodHlwZShlKSksIGVycm1zZz1lcnJtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjaz10cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRAogICAgICAgICAgICAgYnIuc2F2ZSgpCiAgICAgICAgICAgICBiZWMuYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFCiAgICAgICAgICAgICBiZWMuYmUuc2F2ZSgpCiAKICAgICBkZWYgYXJjaGl2ZShzZWxmKToKLSAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfQVJDSElWRSk6CisgICAgICAgIGZvciBiciBpbiBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoc3RhdGU9QnVpbGRSZXF1ZXN0LlJFUV9BUkNISVZFKToKICAgICAgICAgICAgIGlmIGJyLmJ1aWxkID09IE5vbmU6CiAgICAgICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRAogICAgICAgICAgICAgZWxzZToKQEAgLTEwMiwxNCArOTYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkUmVxdWVzdC5SRVFfQ09NUExFVEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRSZXF1ZXN0LlJFUV9DQU5DRUxMSU5HXSkgJgogICAgICAgICAgICAgUShsb2NrPUJ1aWxkRW52aXJvbm1lbnQuTE9DS19MT0NLKSAmCi0gICAgICAgICAgICBRKHVwZGF0ZWRfX2x0PXRpbWV6b25lLm5vdygpIC0gdGltZWRlbHRhKHNlY29uZHMgPSAzMCkpCisgICAgICAgICAgICBRKHVwZGF0ZWRfX2x0PXRpbWV6b25lLm5vdygpIC0gdGltZWRlbHRhKHNlY29uZHM9MzApKQogICAgICAgICApLnVwZGF0ZShsb2NrPUJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFKQogCiAKICAgICAgICAgIyB1cGRhdGUgYWxsIEJ1aWxkcyB0aGF0IHdlcmUgaW4gcHJvZ3Jlc3MgYW5kIGZhaWxlZCB0byBzdGFydAotICAgICAgICBmb3IgYnIgaW4gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKAotICAgICAgICAgICAgc3RhdGU9QnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQsCi0gICAgICAgICAgICBidWlsZF9fb3V0Y29tZT1CdWlsZC5JTl9QUk9HUkVTUyk6CisgICAgICAgIGZvciBiciBpbiBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoc3RhdGU9QnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfX291dGNvbWU9QnVpbGQuSU5fUFJPR1JFU1MpOgogICAgICAgICAgICAgIyB0cmFuc3Bvc2UgdGhlIGxhdW5jaCBlcnJvcnMgaW4gVG9hc3RlckV4Y2VwdGlvbnMKICAgICAgICAgICAgIGJyLmJ1aWxkLm91dGNvbWUgPSBCdWlsZC5GQUlMRUQKICAgICAgICAgICAgIGZvciBicmVycm9yIGluIGJyLmJyZXJyb3Jfc2V0LmFsbCgpOgpAQCAtMTI2LDcgKzExOSw3IEBACiAKIAogICAgICAgICAjIHVwZGF0ZSBhbGwgQnVpbGRSZXF1ZXN0cyB3aXRob3V0IGEgYnVpbGQgY3JlYXRlZAotICAgICAgICBmb3IgYnIgaW4gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gTm9uZSk6CisgICAgICAgIGZvciBiciBpbiBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoYnVpbGQ9Tm9uZSk6CiAgICAgICAgICAgICBici5idWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9YnIucHJvamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPWJyLnVwZGF0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249YnIuY3JlYXRlZCkKQEAgLTE1MSwyOSArMTQ0LDM0IEBACiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIExPQ0sgaXMgcmVtb3ZlZCBmb3IgYnVpbGRzIHdoaWNoIGhhdmUgYmVlbiBmdWxseQogICAgICAgICAjIGNhbmNlbGxlZAotICAgICAgICBmb3IgYnIgaW4gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKAotICAgICAgICAgICAgUShidWlsZF9fb3V0Y29tZT1CdWlsZC5DQU5DRUxMRUQpICYKLSAgICAgICAgICAgIFEoc3RhdGU9QnVpbGRSZXF1ZXN0LlJFUV9DQU5DRUxMSU5HKSAmCi0gICAgICAgICAgICB+UShlbnZpcm9ubWVudD1Ob25lKSk6CisgICAgICAgIGZvciBiciBpbiBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoXAorICAgICAgICAgICAgICAgICAgICAgIFEoYnVpbGRfX291dGNvbWU9QnVpbGQuQ0FOQ0VMTEVEKSAmCisgICAgICAgICAgICAgICAgICAgICAgUShzdGF0ZT1CdWlsZFJlcXVlc3QuUkVRX0NBTkNFTExJTkcpICYKKyAgICAgICAgICAgICAgICAgICAgICB+UShlbnZpcm9ubWVudD1Ob25lKSk6CiAgICAgICAgICAgICBici5lbnZpcm9ubWVudC5sb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUKICAgICAgICAgICAgIGJyLmVudmlyb25tZW50LnNhdmUoKQogCisgICAgZGVmIHJ1bmJ1aWxkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNsZWFudXAoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIud2FybigicnVuYnVpbGRzOiBjbGVhbnVwIGV4Y2VwdGlvbiAlcyIgJSBzdHIoZSkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hcmNoaXZlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oInJ1bmJ1aWxkczogYXJjaGl2ZSBleGNlcHRpb24gJXMiICUgc3RyKGUpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2NoZWR1bGUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIud2FybigicnVuYnVpbGRzOiBzY2hlZHVsZSBleGNlcHRpb24gJXMiICUgc3RyKGUpKQogCiAgICAgZGVmIGhhbmRsZV9ub2FyZ3Moc2VsZiwgKipvcHRpb25zKToKKyAgICAgICAgc2VsZi5ydW5idWlsZCgpCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgbGFtYmRhIHNpZywgZnJhbWU6IE5vbmUpCisKICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmNsZWFudXAoKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJydW5idWlsZHM6IGNsZWFudXAgZXhjZXB0aW9uICVzIiAlIHN0cihlKSkKLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuYXJjaGl2ZSgpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oInJ1bmJ1aWxkczogYXJjaGl2ZSBleGNlcHRpb24gJXMiICUgc3RyKGUpKQotCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zY2hlZHVsZSgpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oInJ1bmJ1aWxkczogc2NoZWR1bGUgZXhjZXB0aW9uICVzIiAlIHN0cihlKSkKLQotICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgc2lnbmFsLnBhdXNlKCkKKyAgICAgICAgICAgIHNlbGYucnVuYnVpbGQoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDRfYXV0b18yMDE2MDUyM18xNDQ2LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDRfYXV0b18yMDE2MDUyM18xNDQ2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTA2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNF9hdXRvXzIwMTYwNTIzXzE0NDYucHkKQEAgLTAsMCArMSwzNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKKworICAgIGRlcGVuZGVuY2llcyA9IFsKKyAgICAgICAgKCdibGRjb250cm9sJywgJzAwMDNfYWRkX2NhbmNlbGxpbmdfc3RhdGUnKSwKKyAgICBdCisKKyAgICBvcGVyYXRpb25zID0gWworICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdidWlsZGVudmlyb25tZW50JywKKyAgICAgICAgICAgIG5hbWU9J2Jic3RhdGUnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTAsIGNob2ljZXM9WygwLCAnc3RvcHBlZCcpLCAoMSwgJ3N0YXJ0ZWQnKV0pLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdidWlsZGVudmlyb25tZW50JywKKyAgICAgICAgICAgIG5hbWU9J2JldHlwZScsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9WygwLCAnbG9jYWwnKV0pLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdidWlsZGVudmlyb25tZW50JywKKyAgICAgICAgICAgIG5hbWU9J2xvY2snLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTAsIGNob2ljZXM9WygwLCAnZnJlZScpLCAoMSwgJ2xvY2snKSwgKDIsICdydW5uaW5nJyldKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnVpbGRyZXF1ZXN0JywKKyAgICAgICAgICAgIG5hbWU9J3N0YXRlJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wLCBjaG9pY2VzPVsoMCwgJ2NyZWF0ZWQnKSwgKDEsICdxdWV1ZWQnKSwgKDIsICdpbiBwcm9ncmVzcycpLCAoMywgJ2NvbXBsZXRlZCcpLCAoNCwgJ2ZhaWxlZCcpLCAoNSwgJ2RlbGV0ZWQnKSwgKDYsICdjYW5jZWxsaW5nJyksICg3LCAnYXJjaGl2ZScpXSksCisgICAgICAgICksCisgICAgXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDVfcmVvcmRlcl9idWlsZHJlcXVlc3Rfc3RhdGVzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDVfcmVvcmRlcl9idWlsZHJlcXVlc3Rfc3RhdGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYjk1MTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNV9yZW9yZGVyX2J1aWxkcmVxdWVzdF9zdGF0ZXMucHkKQEAgLTAsMCArMSwxOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKKworICAgIGRlcGVuZGVuY2llcyA9IFsKKyAgICAgICAgKCdibGRjb250cm9sJywgJzAwMDRfYXV0b18yMDE2MDUyM18xNDQ2JyksCisgICAgXQorCisgICAgb3BlcmF0aW9ucyA9IFsKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnVpbGRyZXF1ZXN0JywKKyAgICAgICAgICAgIG5hbWU9J3N0YXRlJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1bKDAsICdjcmVhdGVkJyksICgxLCAncXVldWVkJyksICgyLCAnaW4gcHJvZ3Jlc3MnKSwgKDMsICdmYWlsZWQnKSwgKDQsICdkZWxldGVkJyksICg1LCAnY2FuY2VsbGluZycpLCAoNiwgJ2NvbXBsZXRlZCcpLCAoNywgJ2FyY2hpdmUnKV0sIGRlZmF1bHQ9MCksCisgICAgICAgICksCisgICAgXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDZfYnJsYXllcl9sb2NhbF9zb3VyY2VfZGlyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDZfYnJsYXllcl9sb2NhbF9zb3VyY2VfZGlyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjAwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNl9icmxheWVyX2xvY2FsX3NvdXJjZV9kaXIucHkKQEAgLTAsMCArMSwxOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKKworICAgIGRlcGVuZGVuY2llcyA9IFsKKyAgICAgICAgKCdibGRjb250cm9sJywgJzAwMDVfcmVvcmRlcl9idWlsZHJlcXVlc3Rfc3RhdGVzJyksCisgICAgXQorCisgICAgb3BlcmF0aW9ucyA9IFsKKyAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2JybGF5ZXInLAorICAgICAgICAgICAgbmFtZT0nbG9jYWxfc291cmNlX2RpcicsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU0LCBudWxsPVRydWUpLAorICAgICAgICApLAorICAgIF0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA3X2JybGF5ZXJzX29wdGlvbmFsX2dpdGluZm8ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwN19icmxheWVyc19vcHRpb25hbF9naXRpbmZvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTQyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwN19icmxheWVyc19vcHRpb25hbF9naXRpbmZvLnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CisKKyAgICBkZXBlbmRlbmNpZXMgPSBbCisgICAgICAgICgnYmxkY29udHJvbCcsICcwMDA2X2JybGF5ZXJfbG9jYWxfc291cmNlX2RpcicpLAorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2JybGF5ZXInLAorICAgICAgICAgICAgbmFtZT0nY29tbWl0JywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTQsIG51bGw9VHJ1ZSksCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2JybGF5ZXInLAorICAgICAgICAgICAgbmFtZT0nZGlycGF0aCcsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU0LCBudWxsPVRydWUpLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdicmxheWVyJywKKyAgICAgICAgICAgIG5hbWU9J2dpdHVybCcsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU0LCBudWxsPVRydWUpLAorICAgICAgICApLAorICAgIF0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbW9kZWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkKaW5kZXggY2I0OWE1OC4uNDA5NjE0YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkKQEAgLTEsNyArMSw3IEBACiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKIGZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKIGZyb20gZGphbmdvLmNvcmUudmFsaWRhdG9ycyBpbXBvcnQgTWF4VmFsdWVWYWxpZGF0b3IsIE1pblZhbHVlVmFsaWRhdG9yCi1mcm9tIGRqYW5nby51dGlscy5lbmNvZGluZyBpbXBvcnQgZm9yY2VfYnl0ZXMKK2Zyb20gZGphbmdvLnV0aWxzLmVuY29kaW5nIGltcG9ydCBmb3JjZV90ZXh0CiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFByb2plY3RMYXllciwgUHJvamVjdFZhcmlhYmxlLCBQcm9qZWN0VGFyZ2V0LCBCdWlsZCwgTGF5ZXJfVmVyc2lvbgogCiBpbXBvcnQgbG9nZ2luZwpAQCAtNjMsMjAgKzYzLDIwIEBACiAgICAgUkVRX0NSRUFURUQgPSAwCiAgICAgUkVRX1FVRVVFRCA9IDEKICAgICBSRVFfSU5QUk9HUkVTUyA9IDIKLSAgICBSRVFfQ09NUExFVEVEID0gMwotICAgIFJFUV9GQUlMRUQgPSA0Ci0gICAgUkVRX0RFTEVURUQgPSA1Ci0gICAgUkVRX0NBTkNFTExJTkcgPSA2CisgICAgUkVRX0ZBSUxFRCA9IDMKKyAgICBSRVFfREVMRVRFRCA9IDQKKyAgICBSRVFfQ0FOQ0VMTElORyA9IDUKKyAgICBSRVFfQ09NUExFVEVEID0gNgogICAgIFJFUV9BUkNISVZFID0gNwogCiAgICAgUkVRVUVTVF9TVEFURSA9ICgKICAgICAgICAgKFJFUV9DUkVBVEVELCAiY3JlYXRlZCIpLAogICAgICAgICAoUkVRX1FVRVVFRCwgInF1ZXVlZCIpLAogICAgICAgICAoUkVRX0lOUFJPR1JFU1MsICJpbiBwcm9ncmVzcyIpLAotICAgICAgICAoUkVRX0NPTVBMRVRFRCwgImNvbXBsZXRlZCIpLAogICAgICAgICAoUkVRX0ZBSUxFRCwgImZhaWxlZCIpLAogICAgICAgICAoUkVRX0RFTEVURUQsICJkZWxldGVkIiksCiAgICAgICAgIChSRVFfQ0FOQ0VMTElORywgImNhbmNlbGxpbmciKSwKKyAgICAgICAgKFJFUV9DT01QTEVURUQsICJjb21wbGV0ZWQiKSwKICAgICAgICAgKFJFUV9BUkNISVZFLCAiYXJjaGl2ZSIpLAogICAgICkKIApAQCAtOTEsMTggKzkxLDE4IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgc3VwZXIoQnVpbGRSZXF1ZXN0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICMgU2F2ZSB0aGUgb2xkIHN0YXRlIGluY2FzZSBpdCdzIGFib3V0IHRvIGJlIG1vZGlmaWVkCisgICAgICAgICMgU2F2ZSB0aGUgb2xkIHN0YXRlIGluIGNhc2UgaXQncyBhYm91dCB0byBiZSBtb2RpZmllZAogICAgICAgICBzZWxmLm9sZF9zdGF0ZSA9IHNlbGYuc3RhdGUKIAogICAgIGRlZiBzYXZlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc3RhdGUgd2UncmUgdHJ5aW5nIHRvIHNldCBpcyBub3QgZ29pbmcgYmFja3dhcmRzCiAgICAgICAgICMgZS5nLiBmcm9tIFJFUV9GQUlMRUQgdG8gUkVRX0lOUFJPR1JFU1MKICAgICAgICAgaWYgc2VsZi5vbGRfc3RhdGUgIT0gc2VsZi5zdGF0ZSBhbmQgc2VsZi5vbGRfc3RhdGUgPiBzZWxmLnN0YXRlOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkludmFsaWQgc3RhdGUgY2hhbmdlIHJlcXVlc3RlZDogIgotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBnbyBmcm9tICVzIHRvICVzIC0gaWdub3JpbmcgcmVxdWVzdCIgJQotICAgICAgICAgICAgICAgICAgICAgICAgKEJ1aWxkUmVxdWVzdC5SRVFVRVNUX1NUQVRFW3NlbGYub2xkX3N0YXRlXVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZFJlcXVlc3QuUkVRVUVTVF9TVEFURVtzZWxmLnN0YXRlXVsxXSkKLSAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkludmFsaWQgc3RhdGUgY2hhbmdlIHJlcXVlc3RlZDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBnbyBmcm9tICVzIHRvICVzIC0gaWdub3JpbmcgcmVxdWVzdCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJ1aWxkUmVxdWVzdC5SRVFVRVNUX1NUQVRFW3NlbGYub2xkX3N0YXRlXVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZFJlcXVlc3QuUkVRVUVTVF9TVEFURVtzZWxmLnN0YXRlXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIyBTZXQgcHJvcGVydHkgYmFjayB0byB0aGUgb2xkIHZhbHVlCiAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5vbGRfc3RhdGUKICAgICAgICAgICAgIHJldHVybgpAQCAtMTIxLDE3ICsxMjEsMTkgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuYnJ2YXJpYWJsZV9zZXQuZ2V0KG5hbWU9Ik1BQ0hJTkUiKS52YWx1ZQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBmb3JjZV9ieXRlcygnJXMgJXMnICUgKHNlbGYucHJvamVjdCwgc2VsZi5nZXRfc3RhdGVfZGlzcGxheSgpKSkKKyAgICAgICAgcmV0dXJuIGZvcmNlX3RleHQoJyVzICVzJyAlIChzZWxmLnByb2plY3QsIHNlbGYuZ2V0X3N0YXRlX2Rpc3BsYXkoKSkpCiAKICMgVGhlc2UgdGFibGVzIHNwZWNpZnkgdGhlIHNldHRpbmdzIGZvciBydW5uaW5nIGFuIGFjdHVhbCBidWlsZC4KICMgVGhleSBNVVNUIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0YWJsZXMgaW4gb3JtLm1vZGVscy5Qcm9qZWN0KgogCisKIGNsYXNzIEJSTGF5ZXIobW9kZWxzLk1vZGVsKToKLSAgICByZXEgICAgICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkUmVxdWVzdCkKLSAgICBuYW1lICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDEwMCkKLSAgICBnaXR1cmwgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKLSAgICBjb21taXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKLSAgICBkaXJwYXRoICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICByZXEgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZFJlcXVlc3QpCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgZ2l0dXJsID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NCwgbnVsbD1UcnVlKQorICAgIGxvY2FsX3NvdXJjZV9kaXIgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU0LCBudWxsPVRydWUpCisgICAgY29tbWl0ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NCwgbnVsbD1UcnVlKQorICAgIGRpcnBhdGggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU0LCBudWxsPVRydWUpCiAgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIG51bGw9VHJ1ZSkKIAogY2xhc3MgQlJCaXRiYWtlKG1vZGVscy5Nb2RlbCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3Rlc3RzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC90ZXN0cy5weQppbmRleCBmMjBjYzdkLi40NzVhYzBhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3Rlc3RzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdGVzdHMucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgICMgc2V0dGluZyBsYXllcnMsIHNraXAgYW55IGxheWVyIGluZm8KICAgICAgICAgICAgIGJjLnNldExheWVycyhCSVRCQUtFX0xBWUVSLCBQT0tZX0xBWUVSUykKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiVGVzdCBza2lwcGVkIGR1ZSB0byBjb21tYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCisgICAgICAgICAgICBwcmludCgiVGVzdCBza2lwcGVkIGR1ZSB0byBjb21tYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgIyBXZSBhcmUgb2sgd2l0aCB0aGUgZXhjZXB0aW9uIGFzIHdlJ3JlIGhhbmRsaW5nIHRoZSBnaXQgYWxyZWFkeSBleGlzdHMKICAgICAgICAgZXhjZXB0IEJ1aWxkU2V0dXBFeGNlcHRpb246CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICAgICAjIHNldHRpbmcgbGF5ZXJzLCBza2lwIGFueSBsYXllciBpbmZvCiAgICAgICAgICAgICBsYXllclNldCA9IGJjLnNldExheWVycyhCSVRCQUtFX0xBWUVSLCBQT0tZX0xBWUVSUykKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiVGVzdCBza2lwcGVkIGR1ZSB0byBjb21tYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCisgICAgICAgICAgICBwcmludCgiVGVzdCBza2lwcGVkIGR1ZSB0byBjb21tYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgIyBXZSBhcmUgb2sgd2l0aCB0aGUgZXhjZXB0aW9uIGFzIHdlJ3JlIGhhbmRsaW5nIHRoZSBnaXQgYWxyZWFkeSBleGlzdHMKICAgICAgICAgZXhjZXB0IEJ1aWxkU2V0dXBFeGNlcHRpb246CkBAIC0xMzksMjIgKzEzOSwzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShici5zdGF0ZSA9PSBCdWlsZFJlcXVlc3QuUkVRX0lOUFJPR1JFU1MsICJSZXF1ZXN0IGlzIG5vdCB1cGRhdGVkIikKICAgICAgICAgIyBubyBtb3JlIHNlbGVjdGlvbnMgcG9zc2libGUgaGVyZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBjb21tYW5kLl9zZWxlY3RCdWlsZFJlcXVlc3QpCi0KLQotY2xhc3MgVXRpbGl0eVRlc3RzKFRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9yZWR1Y2VfcGF0aChzZWxmKToKLSAgICAgICAgZnJvbSBibGRjb250cm9sLm1hbmFnZW1lbnQuY29tbWFuZHMubG9hZGNvbmYgaW1wb3J0IF9yZWR1Y2VfY2Fub25fcGF0aCwgX2dldF9pZF9mb3Jfc291cmNldHlwZQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvIikgPT0gIi8iKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9yZWR1Y2VfY2Fub25fcGF0aCgiL2hvbWUvLi4iKSA9PSAiLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS8uLi9hbmEiKSA9PSAiL2FuYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS8uLi9hbmEvLi4iKSA9PSAiLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS9hbmEvbWloYWkvLi4vbWFyaWEiKSA9PSAiL2hvbWUvYW5hL21hcmlhIikKLQotICAgIGRlZiB0ZXN0X2dldF9pZF9mb3Jfc29ydWNldHlwZShzZWxmKToKLSAgICAgICAgZnJvbSBibGRjb250cm9sLm1hbmFnZW1lbnQuY29tbWFuZHMubG9hZGNvbmYgaW1wb3J0IF9yZWR1Y2VfY2Fub25fcGF0aCwgX2dldF9pZF9mb3Jfc291cmNldHlwZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoImxheWVyaW5kZXgiKSA9PSAxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoImxvY2FsIikgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKCJpbXBvcnRlZCIpID09IDIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKToKLSAgICAgICAgICAgIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoInVua25vd24iKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvY29uZmlnLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvY29uZmlnLnB5CmluZGV4IDQwZDQ1ZjMuLjg3YjQyN2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2NvbmZpZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkKQEAgLTc0LDcgKzc0LDcgQEAKICMgdGFzayBzdGF0ZXMKIGRlZiBlbnVtKCpzZXF1ZW50aWFsLCAqKm5hbWVkKToKICAgICBlbnVtcyA9IGRpY3QoemlwKHNlcXVlbnRpYWwsIHJhbmdlKGxlbihzZXF1ZW50aWFsKSkpLCAqKm5hbWVkKQotICAgIHJldmVyc2UgPSBkaWN0KCh2YWx1ZSwga2V5KSBmb3Iga2V5LCB2YWx1ZSBpbiBlbnVtcy5pdGVyaXRlbXMoKSkKKyAgICByZXZlcnNlID0gZGljdCgodmFsdWUsIGtleSkgZm9yIGtleSwgdmFsdWUgaW4gZW51bXMuaXRlbXMoKSkKICAgICBlbnVtc1sncmV2ZXJzZV9tYXBwaW5nJ10gPSByZXZlcnNlCiAgICAgcmV0dXJuIHR5cGUoJ0VudW0nLCAoKSwgZW51bXMpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLy5jcmVhdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9fX2luaXRfXy5weQpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xvZy8uY3JlYXRlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkKaW5kZXggYmVkNjY1MS4uZDAxMzg2YSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvcnVubmVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3J1bm5lci5weQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawotICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyB0ZXN0LiBUcmFjZWR1bXA6IFxuJXMiLCB0cmFjZWJhY2suZm9ybWF0X2V4YyhleGMpKQorICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyB0ZXN0LiBUcmFjZWR1bXA6IFxuJXMiLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgIGZpbmFsbHk6CiAgICAgICAgIG9zLmNoZGlyKGNydF9kaXIpCiAgICAgcmV0dXJuIGxlbihyZXN1bHQuZmFpbHVyZXMpCkBAIC0yMTEsNyArMjExLDcgQEAKIAogICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBleGM6CiAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRXJyb3Igd2hpbGUgc2V0dGluZyB1cCB0ZXN0aW5nLiBUcmFjZWJhY2s6IFxuJXMiLCB0cmFjZWJhY2suZm9ybWF0X2V4YyhleGMpKQorICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJFcnJvciB3aGlsZSBzZXR0aW5nIHVwIHRlc3RpbmcuIFRyYWNlYmFjazogXG4lcyIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCiAgICAgZmluYWxseToKICAgICAgICAgaWYgbmVlZF9jbGVhbnVwIGFuZCB0ZXN0ZGlyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgY2xlYW5fdXAodGVzdGRpcikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NoZWxsdXRpbHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9zaGVsbHV0aWxzLnB5CmluZGV4IGMyMDEyZWQuLmNlNjRjMDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NoZWxsdXRpbHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2hlbGx1dGlscy5weQpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgb3V0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIGVycikKLSAgICAgICAgY29uZmlnLmxvZ2dlci53YXJuKCJfc2hlbGxjbWQ6IGVycm9yIFxuJXNcbiVzIiwgb3V0LCBlcnIpCisgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybmluZygiX3NoZWxsY21kOiBlcnJvciBcbiVzXG4lcyIsIG91dCwgZXJyKQogICAgICAgICByYWlzZSBTaGVsbENtZEV4Y2VwdGlvbihlcnIpCiAgICAgZWxzZToKICAgICAgICAgI2NvbmZpZy5sb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgc3VjY2Vzc1xuJXMiICUgb3V0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5CmluZGV4IDc1NDYzNmYuLjhjYTQ1YTggMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvcnVuX3RvYXN0ZXJ0ZXN0cy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3J1bl90b2FzdGVydGVzdHMucHkKQEAgLTc0LDcgKzc0LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHRlc3RzX2Zyb21fY2ZnID0gZXZhbChjb25maWcuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHRhcmdldF9zdWl0ZSwgJ3Rlc3RfY2FzZXMnKSkKICAgICBleGNlcHQ6Ci0gICAgICAgIHByaW50ICdGYWlsZWQgdG8gZ2V0IHRlc3QgY2FzZXMgZnJvbSBjZmcgZmlsZS4gTWFrZSBzdXJlIHRoZSBmb3JtYXQgaXMgY29ycmVjdC4nCisgICAgICAgIHByaW50KCdGYWlsZWQgdG8gZ2V0IHRlc3QgY2FzZXMgZnJvbSBjZmcgZmlsZS4gTWFrZSBzdXJlIHRoZSBmb3JtYXQgaXMgY29ycmVjdC4nKQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgcHJlZml4ID0gJ3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnRvYXN0ZXJfY2FzZXMudGVzdF8nCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgdGVzdHNsaXN0ID0gZ2V0X3Rlc3RzX2Zyb21fY2ZnKCkKIAogICAgIGlmIG5vdCB0ZXN0c2xpc3Q6Ci0gICAgICAgIHByaW50ICdGYWlsZWQgdG8gZ2V0IHRlc3QgY2FzZXMuJworICAgICAgICBwcmludCgnRmFpbGVkIHRvIGdldCB0ZXN0IGNhc2VzLicpCiAgICAgICAgIGV4aXQoMSkKIAogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvdG9hc3Rlcl9hdXRvbWF0aW9uX3Rlc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnB5CmluZGV4IGQ4ZjgzOGEuLjFhNzg2ZmEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvdG9hc3Rlcl9hdXRvbWF0aW9uX3Rlc3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC90b2FzdGVyX2F1dG9tYXRpb25fdGVzdC5weQpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgYnJlYWsKIAogICAgIGlmIG51bWJlciA9PSAobWF4X2RlcHRoIC0gMSk6Ci0gICAgICAgIHByaW50ICdObyBsb2cgZGlyIGZvdW5kLiBQbGVhc2UgY2hlY2snCisgICAgICAgIHByaW50KCdObyBsb2cgZGlyIGZvdW5kLiBQbGVhc2UgY2hlY2snKQogICAgICAgICByYWlzZSBFeGNlcHRpb24KIAogICAgIHJldHVybiBsb2dfcm9vdF9kaXIKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCiAKICAgICBlbHNlOgotICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICBwcmludCgnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJykKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIApAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCiAKICAgICBlbHNlOgotICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICBwcmludCgnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJykKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIGRlZiByZXBsYWNlX2ZpbGVfY29udGVudChmaWxlbmFtZSwgaXRlbSwgb3B0aW9uKToKQEAgLTM2MSw3ICszNjEsNyBAQAogCiAgICAgZGVmIHNldHVwX2Jyb3dzZXIoc2VsZiwgKmJyb3dzZXJfcGF0aCk6CiAgICAgICAgIHNlbGYuYnJvd3NlciA9IGV2YWwoc2VsZi5wYXJzZXIuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHNlbGYudGFyZ2V0X3N1aXRlLCAndGVzdF9icm93c2VyJykpCi0gICAgICAgIHByaW50IHNlbGYuYnJvd3NlcgorICAgICAgICBwcmludChzZWxmLmJyb3dzZXIpCiAgICAgICAgIGlmIHNlbGYuYnJvd3NlciA9PSAiZmlyZWZveCI6CiAgICAgICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuRmlyZWZveCgpCiAgICAgICAgIGVsaWYgc2VsZi5icm93c2VyID09ICJjaHJvbWUiOgpAQCAtMzcwLDcgKzM3MCw3IEBACiAgICAgICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuSWUoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZHJpdmVyID0gTm9uZQotICAgICAgICAgICAgcHJpbnQgInVucmVjb2duaXplZCBicm93c2VyIHR5cGUsIHBsZWFzZSBjaGVjayIKKyAgICAgICAgICAgIHByaW50KCJ1bnJlY29nbml6ZWQgYnJvd3NlciB0eXBlLCBwbGVhc2UgY2hlY2siKQogICAgICAgICBzZWxmLmRyaXZlciA9IGRyaXZlcgogICAgICAgICBzZWxmLmRyaXZlci5pbXBsaWNpdGx5X3dhaXQoMzApCiAgICAgICAgIHJldHVybiBzZWxmLmRyaXZlcgpAQCAtNDQwLDggKzQ0MCw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQogICAgICAgICAgICAgZWxlbWVudCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbdGV4dCgpPSciICsgdGV4dF9zdHJpbmcgKyAiJ10iKQotICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoJ25vIGVsZW1lbnQgZm91bmQnKQogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJuIGVsZW1lbnQKIApAQCAtNDU0LDggKzQ1NCw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQogICAgICAgICAgICAgZWxlbWVudCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChsaW5rX3RleHQpCi0gICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnQgZm91bmQnCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCgnbm8gZWxlbWVudCBmb3VuZCcpCiAgICAgICAgICAgICByYWlzZQogICAgICAgICByZXR1cm4gZWxlbWVudAogCkBAIC00NjcsOCArNDY3LDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCiAgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfbGlua190ZXh0KGxpbmtfdGV4dCkKLSAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KCdubyBlbGVtZW50IGZvdW5kJykKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHJldHVybiBlbGVtZW50X2xpc3QKIApAQCAtNDgxLDggKzQ4MSw4IEBACiAgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKICAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dChsaW5rX3RleHQpCiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudAotICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoJ25vIGVsZW1lbnQgZm91bmQnKQogICAgICAgICAgICAgcmFpc2UKIAogCkBAIC00OTQsOCArNDk0LDggQEAKICAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQogICAgICAgICAgICAgZWxlbWVudF9saXN0ID0gdGFibGVfZWxlbWVudC5maW5kX2VsZW1lbnRzX2J5X3BhcnRpYWxfbGlua190ZXh0KGxpbmtfdGV4dCkKICAgICAgICAgICAgIHJldHVybiBlbGVtZW50X2xpc3QKLSAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KCdubyBlbGVtZW50IGZvdW5kJykKICAgICAgICAgICAgIHJhaXNlCiAKIApAQCAtNTA2LDggKzUwNiw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQogICAgICAgICAgICAgZWxlbWVudCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoKQotICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoJ25vIGVsZW1lbnQgZm91bmQnKQogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJuIGVsZW1lbnQKIApAQCAtNTE5LDggKzUxOSw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQogICAgICAgICAgICAgZWxlbWVudF9saXN0ID0gdGFibGVfZWxlbWVudC5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKHhwYXRoKQotICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50cyBmb3VuZCcKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KCdubyBlbGVtZW50cyBmb3VuZCcpCiAgICAgICAgICAgICByYWlzZQogICAgICAgICByZXR1cm4gZWxlbWVudF9saXN0CiAKQEAgLTU3MCw3ICs1NzAsNyBAQAogICAgICAgICAgICAgZWxlbWVudF94cGF0aCA9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10iCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aChlbGVtZW50X3hwYXRoKQotICAgICAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudAogICAgICAgICByb3cgPSBjb29yZGluYXRlWzBdCkBAIC01ODAsNyArNTgwLDcgQEAKICAgICAgICAgICAgIGVsZW1lbnRfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddL3Rib2R5L3RyWyIgKyBzdHIocm93KSArICJdIgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoZWxlbWVudF94cGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBlbGVtZW50CiAjbm93IHdlIGFyZSBsb29raW5nIGZvciBhbiBlbGVtZW50IHdpdGggc3BlY2lmaWVkIFggYW5kIFkKQEAgLTU4OSw3ICs1ODksNyBAQAogICAgICAgICBlbGVtZW50X3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZCArICInXS90Ym9keS90clsiICsgc3RyKHJvdykgKyAiXS90ZFsiICsgc3RyKGNvbHVtbikgKyAiXSIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aChlbGVtZW50X3hwYXRoKQotICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gZWxlbWVudAogCkBAIC02MDcsNyArNjA3LDcgQEAKICAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gKyAxCiAgICAgICAgICAgICAgICAgcHJpbnQoInJvd19jb250ZW50PSIscm93X2NvbnRlbnQpCiAgICAgICAgICAgICBMaXN0cy5leHRlbmQocm93X2NvbnRlbnQpCi0gICAgICAgICAgICBwcmludCBMaXN0c1tyb3ctMV1bMF0KKyAgICAgICAgICAgIHByaW50KExpc3RzW3Jvdy0xXVswXSkKICAgICAgICAgICAgIHJvdyA9IHJvdyArIDEKICAgICAgICAgcmV0dXJuIExpc3RzCiAKQEAgLTYxNyw3ICs2MTcsNyBAQAogICAgIGRlZiBpc190ZXh0X3ByZXNlbnQgKHNlbGYsIHBhdHRlcm5zKToKICAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CiAgICAgICAgICAgICBpZiBzdHIocGF0dGVybikgbm90IGluIHNlbGYuZHJpdmVyLnBhZ2Vfc291cmNlOgotICAgICAgICAgICAgICAgIHByaW50ICdUZXh0ICInK3BhdHRlcm4rJyIgaXMgbWlzc2luZycKKyAgICAgICAgICAgICAgICBwcmludCgnVGV4dCAiJytwYXR0ZXJuKyciIGlzIG1pc3NpbmcnKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC02MjUsMTUgKzYyNSwxNSBAQAogICAgIGRlZiBpc19lbGVtZW50X3ByZXNlbnQoc2VsZiwgaG93LCB3aGF0KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50KGhvdywgd2hhdCkKLSAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBwcmludCAnQ291bGQgbm90IGZpbmQgZWxlbWVudCAnK3N0cih3aGF0KSsnIGJ5ICcgKyBzdHIoaG93KQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoJ0NvdWxkIG5vdCBmaW5kIGVsZW1lbnQgJytzdHIod2hhdCkrJyBieSAnICsgc3RyKGhvdykpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIFRydWUKIAogCiAgICAgZGVmIGlzX2FsZXJ0X3ByZXNlbnQoc2VsZik6CiAgICAgICAgIHRyeTogc2VsZi5kcml2ZXIuc3dpdGNoX3RvX2FsZXJ0KCkKLSAgICAgICAgZXhjZXB0IE5vQWxlcnRQcmVzZW50RXhjZXB0aW9uLCBlOiByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IE5vQWxlcnRQcmVzZW50RXhjZXB0aW9uIGFzIGU6IHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQogCiAKQEAgLTY1OCw3ICs2NTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjYXNlbm8gPSBpbnQoY2FzZW5vX3N0cikKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiZ2V0IGNhc2UgbnVtYmVyIGVycm9yISBwbGVhc2UgY2hlY2sgaWYgZnVuYyBuYW1lIGlzIHRlc3RfeHh4IgorICAgICAgICAgICAgcHJpbnQoImdldCBjYXNlIG51bWJlciBlcnJvciEgcGxlYXNlIGNoZWNrIGlmIGZ1bmMgbmFtZSBpcyB0ZXN0X3h4eCIpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIGNhc2VubwogCkBAIC03MDYsNyArNzA2LDcgQEAKICAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChrZXkpLmNsaWNrKCkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzIGNhbm5vdCBiZSBmb3VuZCBvbiBwYWdlIiAlIGtleSkKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKQEAgLTczNiw3ICs3MzYsNyBAQAogICAgICAgICBwYXR0ZXJucyA9IFsibWluaW1hbCIsICJzYXRvIl0KICAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CiAgICAgICAgICAgICBvcmlfdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQotICAgICAgICAgICAgcHJpbnQgb3JpX3RhcmdldF9jb2x1bW5fdGV4dHMKKyAgICAgICAgICAgIHByaW50KG9yaV90YXJnZXRfY29sdW1uX3RleHRzKQogICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCiAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyhwYXR0ZXJuKQogICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQpAQCAtNzcxLDcgKzc3MSw3IEBACiAgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50ID0gc2VsZi5maW5kX2VsZW1lbnRfYnlfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgaXRlbSkKICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgaG93IHdlIGZpbmQgImZpbHRlciBpY29uIiBpbiB0aGUgc2FtZSBsZXZlbCBhcyB0ZW1wX2VsZW1lbnQod2hlcmUgImEiIG1lYW5zIGNsaWNrYWJsZSwgImkiIG1lYW5zIGljb24pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKSkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRydWUsIG1zZz0oIiAlcyBjYW5ub3QgYmUgZm91bmQhICVzIiAlIChpdGVtLCBlKSkpCiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgIyBzdGVwIDUtNgpAQCAtODEyLDcgKzgxMiw3IEBACiAgICAgICAgIHNlbGYudGFibGVfbmFtZSA9ICdvdGFibGUnCiAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgZmluZCB0aGUgImRlZmF1bHQiIHJvd3MtbnVtYmVyIQogICAgICAgICByb3dzX2Rpc3BsYXllZCA9IGludChTZWxlY3Qoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3Rvcigic2VsZWN0LnBhZ2VzaXplIikpLmZpcnN0X3NlbGVjdGVkX29wdGlvbi50ZXh0KQotICAgICAgICBwcmludCByb3dzX2Rpc3BsYXllZAorICAgICAgICBwcmludChyb3dzX2Rpc3BsYXllZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCksIG1zZz0oIm5vdCBlbm91Z2ggcm93cyBkaXNwbGF5ZWQiKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmdldF90YWJsZV9lbGVtZW50KHNlbGYudGFibGVfbmFtZSwgcm93c19kaXNwbGF5ZWQgKyAxKSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0oIm1vcmUgcm93cyBkaXNwbGF5ZWQgdGhhbiBleHBlY3RlZCIpKQpAQCAtODg4LDcgKzg4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIuLi8vKltAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCiAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbF9vcHRpb25zID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy8qW0BpZD0nIiArIGZpbHRlcl9kaWN0W2tleV0gKyAiJ10vLypbQG5hbWU9J2ZpbHRlciddW25vdChAZGlzYWJsZWQpXSIpCiAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiaW4gZXhjZXB0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoImluIGV4Y2VwdGlvbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV90ZXh0KCJTaG93IGFsbCB0YXNrcyIpLmNsaWNrKCkKICMgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J3NlYXJjaGZvcm0nXS9idXR0b25bMl0iKS5jbGljaygpCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpCkBAIC04OTksOSArODk5LDkgQEAKICAgICAgICAgZm9yIGl0ZW0gaW4gWydvcmRlcicsICd0YXNrX25hbWUnLCAnZXhlY3V0ZWQnLCAnb3V0Y29tZScsICdyZWNpcGVfbmFtZScsICdyZWNpcGVfdmVyc2lvbiddOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3hwYXRoX2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwgIi4vdGJvZHkvdHJbMV0vKltAY2xhc3M9JyIgKyBpdGVtICsgIiddL2EiKS5jbGljaygpCi0gICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAjIGxldCBpdCBnby4uLgotICAgICAgICAgICAgICAgIHByaW50ICdubyBpdGVtIGluIHRoZSBjb2x1bScgKyBpdGVtCisgICAgICAgICAgICAgICAgcHJpbnQoJ25vIGl0ZW0gaW4gdGhlIGNvbHVtJyArIGl0ZW0pCiAgICAgICAgICAgICAjIGluc2VydCBzY3JlZW4gc2hvdCBoZXJlCiAgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAxMScpCiAgICAgICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKQEAgLTk5MiwxMyArOTkyLDEzIEBACiAgICAgICAgIHNlbGYudGFibGVfbmFtZSA9ICdvdGFibGUnCiAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgZmluZCB0aGUgImRlZmF1bHQiIHJvd3MtbnVtYmVyIQogICAgICAgICByb3dzX2Rpc3BsYXllZCA9IGludChTZWxlY3Qoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3Rvcigic2VsZWN0LnBhZ2VzaXplIikpLmZpcnN0X3NlbGVjdGVkX29wdGlvbi50ZXh0KQotICAgICAgICBwcmludCByb3dzX2Rpc3BsYXllZAorICAgICAgICBwcmludChyb3dzX2Rpc3BsYXllZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5nZXRfdGFibGVfZWxlbWVudChzZWxmLnRhYmxlX25hbWUsIHJvd3NfZGlzcGxheWVkICsgMSkpCiAKICAgICAgICAgIyBDaGVjayB0aGUgZGVmYXVsdCB0YWJsZSBpcyBzb3J0ZWQgYnkgUmVjaXBlCiAgICAgICAgIHRhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQotICAgICAgICBwcmludCB0YXNrc19jb2x1bW5fY291bnQKKyAgICAgICAgcHJpbnQodGFza3NfY29sdW1uX2NvdW50KQogICAgICAgICBkZWZhdWx0X2NvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcihzZWxmLnRhYmxlX25hbWUsIDEpCiAgICAgICAgICNwcmludCBkZWZhdWx0X2NvbHVtbl9saXN0CiAKQEAgLTEwOTUsNyArMTA5NSw3IEBACiAKICAgICAgICAgIyBCdWcgNTkxOQogICAgICAgICBmb3Iga2V5IGluIHRhYmxlX2hlYWRfZGljdDoKLSAgICAgICAgICAgIHByaW50IGtleQorICAgICAgICAgICAgcHJpbnQoa2V5KQogICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCiAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCiAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQodGFibGVfaGVhZF9kaWN0W2tleV0pLmNsaWNrKCkKQEAgLTExNjcsNyArMTE2Nyw3IEBACiAgICAgICAgIGNoZWNrX2xpc3QgPSBbJ0RlcGVuZGVuY2llcycsICdMYXllciBicmFuY2gnLCAnTGF5ZXIgY29tbWl0JywgJ1JldmVyc2UgZGVwZW5kZW5jaWVzJ10KICAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQogICAgICAgICB0aW1lLnNsZWVwKDIpCi0gICAgICAgIHByaW50IGhlYWRfbGlzdAorICAgICAgICBwcmludChoZWFkX2xpc3QpCiAgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXRlbSBpbiBoZWFkX2xpc3QsIG1zZz0oIml0ZW0gJXMgbm90IGluIGhlYWQgcm93IiAlIGl0ZW0pKQogICAgICAgICAjIHVuLWNoZWNrICdlbSBhbGwKQEAgLTEyMjYsOCArMTIyNiw4IEBACiAKICAgICAgICAgdGFza3Nfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSciK3NlbGYudGFibGVfbmFtZSsiJ10vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKICAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSciK3NlbGYudGFibGVfbmFtZSsiJ10vdGFibGUvdGJvZHkvdHJbMV0vdGQiKSkKLSAgICAgICAgcHJpbnQgJ3Jvd3M6ICcrc3RyKHRhc2tzX3Jvd19jb3VudCkKLSAgICAgICAgcHJpbnQgJ2NvbHVtbnM6ICcrc3RyKHRhc2tzX2NvbHVtbl9jb3VudCkKKyAgICAgICAgcHJpbnQoJ3Jvd3M6ICcrc3RyKHRhc2tzX3Jvd19jb3VudCkpCisgICAgICAgIHByaW50KCdjb2x1bW5zOiAnK3N0cih0YXNrc19jb2x1bW5fY291bnQpKQogCiAgICAgICAgIFRhc2tzX2NvbHVtbiA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAyKQogICAgICAgICBwcmludCAoIlRhc2tzX2NvbHVtbj0iLCBUYXNrc19jb2x1bW4pCkBAIC0xMjUzLDkgKzEyNTMsOSBAQAogCiAgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCiAgICAgICAgIHBhY2thZ2VzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikudGV4dAotICAgICAgICBwcmludCBwYWNrYWdlc19uYW1lCisgICAgICAgIHByaW50KHBhY2thZ2VzX25hbWUpCiAgICAgICAgIHBhY2thZ2VzX251bSA9IGludChmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIocGFja2FnZXNfbmFtZSkpKQotICAgICAgICBwcmludCBwYWNrYWdlc19udW0KKyAgICAgICAgcHJpbnQocGFja2FnZXNfbnVtKQogCiAgICAgICAgICNzd2l0Y2ggdGhlIHRhYmxlIHRvIHNob3cgbW9yZSB0aGFuIDEwIHJvd3MgYXQgYSB0aW1lCiAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0ncGFja2FnZXMtYnVpbHQnXS9kaXZbMV0vZGl2L3NlbGVjdCIpLmNsaWNrKCkKQEAgLTEyNjMsNyArMTI2Myw3IEBACiAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0ncGFja2FnZXMtYnVpbHQnXS9kaXZbMV0vZGl2L3NlbGVjdCIpLnNlbmRfa2V5cyhLZXlzLkVOVEVSKQogCiAgICAgICAgIHBhY2thZ2VzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy8qW0BpZD0nb3RhYmxlJ10vdGJvZHkvdHIvdGRbMV0iKSkKLSAgICAgICAgcHJpbnQgcGFja2FnZXNfcm93X2NvdW50CisgICAgICAgIHByaW50KHBhY2thZ2VzX3Jvd19jb3VudCkKIAogICAgICAgICBpZiBwYWNrYWdlc19udW0gIT0gcGFja2FnZXNfcm93X2NvdW50OgogICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIHBhY2thZ2VzIG51bWJlciBpcyBub3QgY29ycmVjdCIpCkBAIC0xMjcyLDIwICsxMjcyLDIwIEBACiAKICAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS5jbGljaygpCiAgICAgICAgIGRlcGVuZHNfbmFtZSA9IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAotICAgICAgICBwcmludCBkZXBlbmRzX25hbWUKLSAgICAgICAgZGVwZW5kc19udW0gPSBpbnQoZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKGRlcGVuZHNfbmFtZSkpKQotICAgICAgICBwcmludCBkZXBlbmRzX251bQorICAgICAgICBwcmludChkZXBlbmRzX25hbWUpCisgICAgICAgIGRlcGVuZHNfbnVtID0gaW50KGxpc3QoZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKGRlcGVuZHNfbmFtZSkpKSkKKyAgICAgICAgcHJpbnQoZGVwZW5kc19udW0pCiAKICAgICAgICAgaWYgZGVwZW5kc19udW0gPT0gMDoKICAgICAgICAgICAgIGRlcGVuZHNfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImRpdi5hbGVydC5hbGVydC1pbmZvIikudGV4dCkKLSAgICAgICAgICAgIHByaW50IGRlcGVuZHNfbWVzc2FnZQorICAgICAgICAgICAgcHJpbnQoZGVwZW5kc19tZXNzYWdlKQogICAgICAgICAgICAgaWYgZGVwZW5kc19tZXNzYWdlLmZpbmQoImhhcyBubyBidWlsZCBkZXBlbmRlbmNpZXMuIikgPCAwOgogICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGlzbid0IGV4cGVjdGVkLiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByaW50ICgiVGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGVwZW5kc19yb3dfY291bnQgPSBsZW4oZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9J2RlcGVuZGVuY2llcyddL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCi0gICAgICAgICAgICBwcmludCBkZXBlbmRzX3Jvd19jb3VudAorICAgICAgICAgICAgcHJpbnQoZGVwZW5kc19yb3dfY291bnQpCiAgICAgICAgICAgICBpZiBkZXBlbmRzX251bSAhPSBkZXBlbmRzX3Jvd19jb3VudDoKICAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgZGVwZW5kZW50IHBhY2thZ2VzIG51bWJlciBpcyBub3QgY29ycmVjdCIpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTI5MywxMyArMTI5MywxMyBAQAogCiAgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICgiKS5jbGljaygpCiAgICAgICAgIHJkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAotICAgICAgICBwcmludCByZGVwZW5kc19uYW1lCisgICAgICAgIHByaW50KHJkZXBlbmRzX25hbWUpCiAgICAgICAgIHJkZXBlbmRzX251bSA9IGludChmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIocmRlcGVuZHNfbmFtZSkpKQotICAgICAgICBwcmludCByZGVwZW5kc19udW0KKyAgICAgICAgcHJpbnQocmRlcGVuZHNfbnVtKQogCiAgICAgICAgIGlmIHJkZXBlbmRzX251bSA9PSAwOgogICAgICAgICAgICAgcmRlcGVuZHNfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoIiNicm91Z2h0LWluLWJ5ID4gZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQotICAgICAgICAgICAgcHJpbnQgcmRlcGVuZHNfbWVzc2FnZQorICAgICAgICAgICAgcHJpbnQocmRlcGVuZHNfbWVzc2FnZSkKICAgICAgICAgICAgIGlmIHJkZXBlbmRzX21lc3NhZ2UuZmluZCgiaGFzIG5vIHJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzLiIpIDwgMDoKICAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgbWVzc2FnZSBpc24ndCBleHBlY3RlZC4iKQogICAgICAgICAgICAgZWxzZToKQEAgLTEzMTksOCArMTMxOSw4IEBACiAKICAgICAgICAgbmF0aXZlX3Rhc2tzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy8qW0BpZD0naW5mb3JtYXRpb24nXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQogICAgICAgICBuYXRpdmVfdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSdpbmZvcm1hdGlvbiddL3RhYmxlL3Rib2R5L3RyWzFdL3RkIikpCi0gICAgICAgIHByaW50IG5hdGl2ZV90YXNrc19yb3dfY291bnQKLSAgICAgICAgcHJpbnQgbmF0aXZlX3Rhc2tzX2NvbHVtbl9jb3VudAorICAgICAgICBwcmludChuYXRpdmVfdGFza3Nfcm93X2NvdW50KQorICAgICAgICBwcmludChuYXRpdmVfdGFza3NfY29sdW1uX2NvdW50KQogCiAgICAgICAgIE5hdGl2ZV9UYXNrc19jb2x1bW4gPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMikKICAgICAgICAgcHJpbnQgKCJOYXRpdmVfVGFza3NfY29sdW1uPSIsIE5hdGl2ZV9UYXNrc19jb2x1bW4pCkBAIC0xMzQ2LDE1ICsxMzQ2LDE1IEBACiAKICAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgKCIpLmNsaWNrKCkKICAgICAgICAgbmF0aXZlX3BhY2thZ2VzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikudGV4dAotICAgICAgICBwcmludCBuYXRpdmVfcGFja2FnZXNfbmFtZQorICAgICAgICBwcmludChuYXRpdmVfcGFja2FnZXNfbmFtZSkKICAgICAgICAgbmF0aXZlX3BhY2thZ2VzX251bSA9IGludChmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIobmF0aXZlX3BhY2thZ2VzX25hbWUpKSkKLSAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VzX251bQorICAgICAgICBwcmludChuYXRpdmVfcGFja2FnZXNfbnVtKQogCiAgICAgICAgIGlmIG5hdGl2ZV9wYWNrYWdlc19udW0gIT0gMDoKICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIE5hdGl2ZSB0YXNrIHNob3VsZG4ndCBoYXZlIGFueSBwYWNrYWdlcy4iKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoIiNwYWNrYWdlcy1idWlsdCA+IGRpdi5hbGVydC5hbGVydC1pbmZvIikudGV4dCkKLSAgICAgICAgICAgIHByaW50IG5hdGl2ZV9wYWNrYWdlX21lc3NhZ2UKKyAgICAgICAgICAgIHByaW50KG5hdGl2ZV9wYWNrYWdlX21lc3NhZ2UpCiAgICAgICAgICAgICBpZiBuYXRpdmVfcGFja2FnZV9tZXNzYWdlLmZpbmQoImRvZXMgbm90IGJ1aWxkIGFueSBwYWNrYWdlcy4iKSA8IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIG1lc3NhZ2UgZm9yIG5hdGl2ZSB0YXNrIGlzbid0IGV4cGVjdGVkLiIpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTM2MiwxMiArMTM2MiwxMiBAQAogCiAgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQogICAgICAgICBuYXRpdmVfZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS50ZXh0Ci0gICAgICAgIHByaW50IG5hdGl2ZV9kZXBlbmRzX25hbWUKKyAgICAgICAgcHJpbnQobmF0aXZlX2RlcGVuZHNfbmFtZSkKICAgICAgICAgbmF0aXZlX2RlcGVuZHNfbnVtID0gaW50KGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihuYXRpdmVfZGVwZW5kc19uYW1lKSkpCi0gICAgICAgIHByaW50IG5hdGl2ZV9kZXBlbmRzX251bQorICAgICAgICBwcmludChuYXRpdmVfZGVwZW5kc19udW0pCiAKICAgICAgICAgbmF0aXZlX2RlcGVuZHNfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSdkZXBlbmRlbmNpZXMnXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQotICAgICAgICBwcmludCBuYXRpdmVfZGVwZW5kc19yb3dfY291bnQKKyAgICAgICAgcHJpbnQobmF0aXZlX2RlcGVuZHNfcm93X2NvdW50KQogCiAgICAgICAgIGlmIG5hdGl2ZV9kZXBlbmRzX251bSAhPSBuYXRpdmVfZGVwZW5kc19yb3dfY291bnQ6CiAgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgZGVwZW5kZW50IHBhY2thZ2VzIG51bWJlciBpcyBub3QgY29ycmVjdCIpCkBAIC0xMzc2LDEyICsxMzc2LDEyIEBACiAKICAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKICAgICAgICAgbmF0aXZlX3JkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAotICAgICAgICBwcmludCBuYXRpdmVfcmRlcGVuZHNfbmFtZQorICAgICAgICBwcmludChuYXRpdmVfcmRlcGVuZHNfbmFtZSkKICAgICAgICAgbmF0aXZlX3JkZXBlbmRzX251bSA9IGludChmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIobmF0aXZlX3JkZXBlbmRzX25hbWUpKSkKLSAgICAgICAgcHJpbnQgbmF0aXZlX3JkZXBlbmRzX251bQorICAgICAgICBwcmludChuYXRpdmVfcmRlcGVuZHNfbnVtKQogCiAgICAgICAgIG5hdGl2ZV9yZGVwZW5kc19yb3dfY291bnQgPSBsZW4oZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9J2Jyb3VnaHQtaW4tYnknXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQotICAgICAgICBwcmludCBuYXRpdmVfcmRlcGVuZHNfcm93X2NvdW50CisgICAgICAgIHByaW50KG5hdGl2ZV9yZGVwZW5kc19yb3dfY291bnQpCiAKICAgICAgICAgaWYgbmF0aXZlX3JkZXBlbmRzX251bSAhPSBuYXRpdmVfcmRlcGVuZHNfcm93X2NvdW50OgogICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIHJldmVyc2UgZGVwZW5kZW50IHBhY2thZ2VzIG51bWJlciBpcyBub3QgY29ycmVjdCIpCkBAIC0xNDEzLDggKzE0MTMsOCBAQAogICAgICAgICAjIHN0ZXAgNQogICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQogICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCi0gICAgICAgIHByaW50IGhlYWRfbGlzdAotICAgICAgICBwcmludCBsZW4oaGVhZF9saXN0KQorICAgICAgICBwcmludChoZWFkX2xpc3QpCisgICAgICAgIHByaW50KGxlbihoZWFkX2xpc3QpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGVhZF9saXN0ID09IFsnVmFyaWFibGUnLCAnVmFsdWUnLCAnU2V0IGluIGZpbGUnLCAnRGVzY3JpcHRpb24nXSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSgiaGVhZCByb3cgY29udGVudHMgd3JvbmciKSkKICAgICAgICAgIyBzdGVwIDgKQEAgLTE4MzAsNyArMTgzMCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgaW5jbHVkZWQiKQogICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJEaXJlY3Rvcnkgc3RydWN0dXJlIikKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcihlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUcnVlKQogICAgICAgICAjIHN0ZXAgNApAQCAtMjAxNCwxMyArMjAxNCwxMyBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZSgwLDQpOgogICAgICAgICAgICAgZGF0YVtpXSA9IGRhdGFbaV1bMF0KICAgICAgICAgZGF0YS5zb3J0KCkKLSAgICAgICAgcHJpbnQgZGF0YQorICAgICAgICBwcmludChkYXRhKQogICAgICAgICBqc29uX3BhcnNlID0ganNvbi5sb2FkcyhvcGVuKCd0b2FzdGVyY29uZi5qc29uJykucmVhZCgpKQogICAgICAgICBqc29uX2RhdGEgPSBbXQogICAgICAgICBmb3IgaSBpbiByYW5nZSAoMCw0KToKICAgICAgICAgICAgIGpzb25fZGF0YS5hcHBlbmQoanNvbl9wYXJzZVsncmVsZWFzZXMnXVtpXVsnbmFtZSddKQogICAgICAgICBqc29uX2RhdGEuc29ydCgpCi0gICAgICAgIHByaW50IGpzb25fZGF0YQorICAgICAgICBwcmludChqc29uX2RhdGEpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYXRhID09IGpzb25fZGF0YSkKIAogICAgICAgICAjIyMjIyMjIyMjIyMjIwpAQCAtMjAzNiwxMSArMjAzNiwxMSBAQAogICAgICAgICBkYXRhID0gY3Vyc29yLmZldGNoYWxsKCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCw2KToKICAgICAgICAgICAgIGRhdGFbaV0gPSBkYXRhW2ldWzBdCi0gICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgcHJpbnQoZGF0YSkKICAgICAgICAganNvbl9wYXJzZSA9IGpzb24ubG9hZHMob3BlbigndG9hc3RlcmNvbmYuanNvbicpLnJlYWQoKSkKICAgICAgICAganNvbl9kYXRhPWpzb25fcGFyc2VbJ2NvbmZpZyddCiAgICAgICAgIGpzb25fZGF0YSA9IGpzb25fZGF0YS52YWx1ZXMoKQotICAgICAgICBwcmludCBqc29uX2RhdGEKKyAgICAgICAgcHJpbnQoanNvbl9kYXRhKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGF0YSA9PSBqc29uX2RhdGEpCiAKIApAQCAtMjA1NywxMiArMjA1NywxMiBAQAogICAgICAgICBkYXRhID0gY3Vyc29yLmZldGNoYWxsKCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwzKToKICAgICAgICAgICAgIGRhdGFbaV0gPSBkYXRhW2ldWzBdCi0gICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgcHJpbnQoZGF0YSkKICAgICAgICAganNvbl9wYXJzZSA9IGpzb24ubG9hZHMob3BlbigndG9hc3RlcmNvbmYuanNvbicpLnJlYWQoKSkKICAgICAgICAganNvbl9kYXRhID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwzKToKICAgICAgICAgICAgIGpzb25fZGF0YS5hcHBlbmQoanNvbl9wYXJzZVsnbGF5ZXJzb3VyY2VzJ11baV1bJ25hbWUnXSkKLSAgICAgICAgcHJpbnQganNvbl9kYXRhCisgICAgICAgIHByaW50KGpzb25fZGF0YSkKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNldChkYXRhKSA9PSBzZXQoanNvbl9kYXRhKSkKIAogICAgICAgICAjIyMjIyMjIyMjIyMjIwpAQCAtMjA3NywxMCArMjA3NywxMCBAQAogICAgICAgICBjdXJzb3IuZXhlY3V0ZShxdWVyeSkKICAgICAgICAgZGF0YSA9IGN1cnNvci5mZXRjaGFsbCgpCiAgICAgICAgIGRhdGEgPSBkYXRhWzBdWzBdCi0gICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgcHJpbnQoZGF0YSkKICAgICAgICAganNvbl9wYXJzZSA9IGpzb24ubG9hZHMob3BlbigndG9hc3RlcmNvbmYuanNvbicpLnJlYWQoKSkKICAgICAgICAganNvbl9kYXRhID0ganNvbl9wYXJzZVsnZGVmYXVsdHJlbGVhc2UnXQotICAgICAgICBwcmludCBqc29uX2RhdGEKKyAgICAgICAgcHJpbnQoanNvbl9kYXRhKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2V0KGRhdGEpID09IHNldChqc29uX2RhdGEpKQogCiAgICAgICAgICMjIyMjIyMjIyMjIyMjCkBAIC0yMDkwLDcgKzIwOTAsNyBAQAogICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCiAgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQogCi0gICAgICAgIHByaW50ICdDaGVja2luZyBicmFuY2hlcyBmb3IgIkxvY2FsIFlvY3RvIFByb2plY3QiJworICAgICAgICBwcmludCgnQ2hlY2tpbmcgYnJhbmNoZXMgZm9yICJMb2NhbCBZb2N0byBQcm9qZWN0IicpCiAgICAgICAgIGNvbj1zcWxpdGUuY29ubmVjdCgndG9hc3Rlci5zcWxpdGUnKQogICAgICAgICBjdXJzb3IgPSBjb24uY3Vyc29yKCkKICAgICAgICAgcXVlcnkgPSAic2VsZWN0IG5hbWUgZnJvbSBvcm1fYnJhbmNoIHdoZXJlIGxheWVyX3NvdXJjZV9pZD0xOyIKQEAgLTIxMDIsMTUgKzIxMDIsMTUgQEAKICAgICAgICAgICAgICAgICBkYXRhW2ldID0gZGF0YVtpXVswXQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgcHJpbnQoZGF0YSkKICAgICAgICAganNvbl9wYXJzZSA9IGpzb24ubG9hZHMob3BlbigndG9hc3RlcmNvbmYuanNvbicpLnJlYWQoKSkKICAgICAgICAganNvbl9sb2NhdGlvbiA9IGpzb25fcGFyc2VbJ2xheWVyc291cmNlcyddWzBdWyduYW1lJ10KLSAgICAgICAgcHJpbnQganNvbl9sb2NhdGlvbgorICAgICAgICBwcmludChqc29uX2xvY2F0aW9uKQogICAgICAgICBqc29uX2RhdGEgPSBqc29uX3BhcnNlWydsYXllcnNvdXJjZXMnXVswXVsnYnJhbmNoZXMnXQotICAgICAgICBwcmludCBqc29uX2RhdGEKKyAgICAgICAgcHJpbnQoanNvbl9kYXRhKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2V0KGRhdGEpID09IHNldChqc29uX2RhdGEpKQogCi0gICAgICAgIHByaW50ICdDaGVja2luZyBicmFuY2hlcyBmb3IgIk9wZW5FbWJlZGRlZCInCisgICAgICAgIHByaW50KCdDaGVja2luZyBicmFuY2hlcyBmb3IgIk9wZW5FbWJlZGRlZCInKQogICAgICAgICBjb249c3FsaXRlLmNvbm5lY3QoJ3RvYXN0ZXIuc3FsaXRlJykKICAgICAgICAgY3Vyc29yID0gY29uLmN1cnNvcigpCiAgICAgICAgIHF1ZXJ5ID0gInNlbGVjdCBuYW1lIGZyb20gb3JtX2JyYW5jaCB3aGVyZSBsYXllcl9zb3VyY2VfaWQ9MzsiCkBAIC0yMTE5LDE1ICsyMTE5LDE1IEBACiAgICAgICAgIGxlbmdodCA9IGxlbihkYXRhKQogICAgICAgICBmb3IgaSBpbiByYW5nZSgwLGxlbmdodCk6CiAgICAgICAgICAgICBkYXRhW2ldID0gZGF0YVtpXVswXQotICAgICAgICBwcmludCBkYXRhCisgICAgICAgIHByaW50KGRhdGEpCiAgICAgICAgIGpzb25fcGFyc2UgPSBqc29uLmxvYWRzKG9wZW4oJ3RvYXN0ZXJjb25mLmpzb24nKS5yZWFkKCkpCiAgICAgICAgIGpzb25fbG9jYXRpb24gPSBqc29uX3BhcnNlWydsYXllcnNvdXJjZXMnXVsxXVsnbmFtZSddCi0gICAgICAgIHByaW50IGpzb25fbG9jYXRpb24KKyAgICAgICAgcHJpbnQoanNvbl9sb2NhdGlvbikKICAgICAgICAganNvbl9kYXRhID0ganNvbl9wYXJzZVsnbGF5ZXJzb3VyY2VzJ11bMV1bJ2JyYW5jaGVzJ10KLSAgICAgICAgcHJpbnQganNvbl9kYXRhCisgICAgICAgIHByaW50KGpzb25fZGF0YSkKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNldChkYXRhKSA9PSBzZXQoanNvbl9kYXRhKSkKIAotICAgICAgICBwcmludCAnQ2hlY2tpbmcgYnJhbmNoZXMgZm9yICJJbXBvcnRlZCBsYXllcnMiJworICAgICAgICBwcmludCgnQ2hlY2tpbmcgYnJhbmNoZXMgZm9yICJJbXBvcnRlZCBsYXllcnMiJykKICAgICAgICAgY29uPXNxbGl0ZS5jb25uZWN0KCd0b2FzdGVyLnNxbGl0ZScpCiAgICAgICAgIGN1cnNvciA9IGNvbi5jdXJzb3IoKQogICAgICAgICBxdWVyeSA9ICJzZWxlY3QgbmFtZSBmcm9tIG9ybV9icmFuY2ggd2hlcmUgbGF5ZXJfc291cmNlX2lkPTI7IgpAQCAtMjEzNiwxMiArMjEzNiwxMiBAQAogICAgICAgICBsZW5naHQgPSBsZW4oZGF0YSkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCxsZW5naHQpOgogICAgICAgICAgICAgZGF0YVtpXSA9IGRhdGFbaV1bMF0KLSAgICAgICAgcHJpbnQgZGF0YQorICAgICAgICBwcmludChkYXRhKQogICAgICAgICBqc29uX3BhcnNlID0ganNvbi5sb2FkcyhvcGVuKCd0b2FzdGVyY29uZi5qc29uJykucmVhZCgpKQogICAgICAgICBqc29uX2xvY2F0aW9uID0ganNvbl9wYXJzZVsnbGF5ZXJzb3VyY2VzJ11bMl1bJ25hbWUnXQotICAgICAgICBwcmludCBqc29uX2xvY2F0aW9uCisgICAgICAgIHByaW50KGpzb25fbG9jYXRpb24pCiAgICAgICAgIGpzb25fZGF0YSA9IGpzb25fcGFyc2VbJ2xheWVyc291cmNlcyddWzJdWydicmFuY2hlcyddCi0gICAgICAgIHByaW50IGpzb25fZGF0YQorICAgICAgICBwcmludChqc29uX2RhdGEpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZXQoZGF0YSkgPT0gc2V0KGpzb25fZGF0YSkpCiAKIApAQCAtMjE1OCwxMiArMjE1OCwxMiBAQAogICAgICAgICBkYXRhID0gY3Vyc29yLmZldGNoYWxsKCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCw0KToKICAgICAgICAgICAgIGRhdGFbaV0gPSBkYXRhW2ldWzBdCi0gICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgcHJpbnQoZGF0YSkKICAgICAgICAganNvbl9wYXJzZSA9IGpzb24ubG9hZHMob3BlbigndG9hc3RlcmNvbmYuanNvbicpLnJlYWQoKSkKICAgICAgICAganNvbl9kYXRhID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCw0KToKICAgICAgICAgICAgIGpzb25fZGF0YS5hcHBlbmQoanNvbl9wYXJzZVsnYml0YmFrZSddW2ldWyduYW1lJ10pCi0gICAgICAgIHByaW50IGpzb25fZGF0YQorICAgICAgICBwcmludChqc29uX2RhdGEpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZXQoZGF0YSkgPT0gc2V0KGpzb25fZGF0YSkpCiAKICAgICAgICAgIyMjIyMjIyMjIyMjIyMKQEAgLTIxODIsNyArMjE4Miw3IEBACiAgICAgICAgIHF1ZXJ5ID0gInNlbGVjdCBjb3VudChuYW1lKSBmcm9tIG9ybV9wcm9qZWN0IHdoZXJlIG5hbWUgPSAnbmV3LXRlc3QtcHJvamVjdCc7IgogICAgICAgICBjdXJzb3IuZXhlY3V0ZShxdWVyeSkKICAgICAgICAgZGF0YSA9IGN1cnNvci5mZXRjaG9uZSgpCi0gICAgICAgIHByaW50ICdkYXRhOiAlcycgJSBkYXRhCisgICAgICAgIHByaW50KCdkYXRhOiAlcycgJSBkYXRhKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGF0YSA+PSAxKQogCiAgICAgICAgICMjIyMjIyMjIyMjIyMjCkBAIC0yMjc1LDcgKzIyNzUsNyBAQAogICAgICAgICAgICAgZGF0YSA9IGRhdGFbMF1bMF0KICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBwcmludCBkYXRhCisgICAgICAgIHByaW50KGRhdGEpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYXRhID09ICd0b2FzdGVyX2FkbWluJykKIAogICAgICAgICAjIyMjIyMjIyMjIyMjIwpAQCAtMjMyNCw3ICsyMzI0LDcgQEAKICAgICAgICAgcXVlcnkgPSAic2VsZWN0IGEubmFtZSwgYS52YWx1ZSBmcm9tIG9ybV9wcm9qZWN0dmFyaWFibGUgYSwgb3JtX3Byb2plY3QgYiB3aGVyZSBhLnByb2plY3RfaWQgPSBiLmlkIGFuZCBiLm5hbWUgPSAnbmV3LWRlZmF1bHQtcHJvamVjdCc7IgogICAgICAgICBjdXJzb3IuZXhlY3V0ZShxdWVyeSkKICAgICAgICAgZGF0YSA9IGRpY3QoY3Vyc29yLmZldGNoYWxsKCkpCi0gICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgcHJpbnQoZGF0YSkKICAgICAgICAgZGVmYXVsdF92YWx1ZXMgPSB7dSdJTUFHRV9JTlNUQUxMX2FwcGVuZCc6IHUnJywgdSdQQUNLQUdFX0NMQVNTRVMnOiB1J3BhY2thZ2VfcnBtJywgdSdNQUNISU5FJzogdSdxZW11eDg2JywgdSdTREtNQUNISU5FJzogdSd4ODZfNjQnLCB1J0RJU1RSTyc6IHUncG9reScsIHUnSU1BR0VfRlNUWVBFUyc6IHUnZXh0MyBqZmZzMiB0YXIuYnoyJ30KICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhdGEgPT0gZGVmYXVsdF92YWx1ZXMpCiAKQEAgLTIzNDEsNyArMjM0MSw3IEBACiAgICAgICAgIHF1ZXJ5ID0gInNlbGVjdCBsYXllcmNvbW1pdF9pZCBmcm9tIG9ybV9wcm9qZWN0bGF5ZXIgYSwgb3JtX3Byb2plY3QgYiB3aGVyZSBhLnByb2plY3RfaWQ9Yi5pZCBhbmQgYi5uYW1lPSduZXctZGVmYXVsdC1wcm9qZWN0JzsiCiAgICAgICAgIGN1cnNvci5leGVjdXRlKHF1ZXJ5KQogICAgICAgICBkYXRhX2luaXRpYWwgPSBjdXJzb3IuZmV0Y2hhbGwoKQotICAgICAgICBwcmludCBkYXRhX2luaXRpYWwKKyAgICAgICAgcHJpbnQoZGF0YV9pbml0aWFsKQogCiAgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCiAgICAgICAgIHNlbGYuZHJpdmVyLmdldCgnbG9jYWxob3N0OjgwMDAnKSNzZWxmLmJhc2VfdXJsKQpAQCAtMjM2Miw3ICsyMzYyLDcgQEAKICAgICAgICAgcXVlcnkgPSAic2VsZWN0IGxheWVyY29tbWl0X2lkIGZyb20gb3JtX3Byb2plY3RsYXllciBhLCBvcm1fcHJvamVjdCBiIHdoZXJlIGEucHJvamVjdF9pZD1iLmlkIGFuZCBiLm5hbWU9J25ldy1kZWZhdWx0LXByb2plY3QnOyIKICAgICAgICAgY3Vyc29yLmV4ZWN1dGUocXVlcnkpCiAgICAgICAgIGRhdGFfY2hhbmdlZCA9IGN1cnNvci5mZXRjaGFsbCgpCi0gICAgICAgIHByaW50IGRhdGFfY2hhbmdlZAorICAgICAgICBwcmludChkYXRhX2NoYW5nZWQpCiAKICAgICAgICAgI3Jlc2V0dGluZyByZWxlYXNlIHRvIGRlZmF1bHQKICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCdyZWxlYXNlLWNoYW5nZS10b2dnbGUnKS5jbGljaygpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxjaGVjay5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGNoZWNrLnB5CmluZGV4IDA4MjBmODIuLjAwMWZjZWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGNoZWNrLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGNoZWNrLnB5CkBAIC0yNiwxMiArMjYsMTIgQEAKICAgICAgICAgICAgIHdhcm5pbmdzID0gaW50KHJlc3BbJ3gtdzNjLXZhbGlkYXRvci13YXJuaW5ncyddKQogCiAgICAgICAgICAgICBpZiBzdGF0dXMgPT0gJ0ludmFsaWQnOgotICAgICAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybigiRmFpbGVkICVzIGlzICVzXHRlcnJvcnMgJXMgd2FybmluZ3MgJXMgKGNoZWNrIGF0ICVzKSIsIHVybCwgc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzLCB1cmxyZXF1ZXN0KQorICAgICAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybmluZygiRmFpbGVkICVzIGlzICVzXHRlcnJvcnMgJXMgd2FybmluZ3MgJXMgKGNoZWNrIGF0ICVzKSIsIHVybCwgc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzLCB1cmxyZXF1ZXN0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCJPSyEgJXMiLCB1cmwpCiAKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKLSAgICAgICAgY29uZmlnLmxvZ2dlci53YXJuKCJGYWlsZWQgdmFsaWRhdGlvbiBjYWxsOiAlcyIsIGV4YykKKyAgICAgICAgY29uZmlnLmxvZ2dlci53YXJuaW5nKCJGYWlsZWQgdmFsaWRhdGlvbiBjYWxsOiAlcyIsIGV4YykKICAgICByZXR1cm4gKHN0YXR1cywgZXJyb3JzLCB3YXJuaW5ncykKIAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkKaW5kZXggY2VhYTExYi4uMGM3ZWE1MCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9maXh0dXJlcy9SRUFETUUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMWM2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvUkVBRE1FCkBAIC0wLDAgKzEsMzAgQEAKKyMgRml4dHVyZXMgZGlyZWN0b3J5CisKK0ZpeHR1cmVzIGFyZSBkYXRhIGR1bXBzIHRoYXQgY2FuIGJlIGxvYWRlZCBpbnRvIFRvYXN0ZXIncyBkYXRhYmFzZSB0byBwcm92aWRlCitjb25maWd1cmF0aW9uIGFuZCBkYXRhLgorCitJbiB0aGlzIGRpcmVjdG9yeSB3ZSBoYXZlIHRoZSBmaXh0dXJlcyB3aGljaCBhcmUgbG9hZGVkIHRoZSBmaXJzdCB0aW1lIHlvdSBzdGFydCBUb2FzdGVyLgorVGhpcyBpcyB0byBwcm92aWRlIHVzZWZ1bCBkZWZhdWx0IHZhbHVlcyBhbmQgbWV0YWRhdGEgdG8gVG9hc3Rlci4KKworIC0gc2V0dGluZ3MueG1sIFRoaXMgQ29udGFpbnMgVG9hc3RlciB3aWRlIHNldHRpbmdzLCBzdWNoIGFzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgIGNlcnRhaW4gYml0YmFrZSB2YXJpYWJsZXMuCisKKyAtIHBva3kueG1sIFRoaXMgaXMgdGhlIGRlZmF1bHQgcmVsZWFzZSBkYXRhIGZvciBzdXBwb3J0ZWQgcG9reSBiYXNlZCBzZXR1cCAKKworIC0gb2UtY29yZS54bWwgVGhpcyBpcyB0aGUgZGVmYXVsdCByZWxlYXNlIGRhdGEgZm9yIHN1cHBvcnRlZCBvZS1jb3JlIGJhc2VkIHNldHVwcworCisjIEN1c3RvbSBkYXRhL2NvbmZpZ3VyYXRpb24KKworICAtIGN1c3RvbS54bWwKKworVG8gYWRkIGN1c3RvbSBpbml0aWFsIGRhdGEvY29uZmlndXJhdGlvbiB0byBUb2FzdGVyIHBsYWNlIGEgZmlsZSBjYWxsZWQKKyJjdXN0b20ueG1sIiBpbiB0aGlzIGRpcmVjdG9yeS4gSWYgcHJlc2VudCBpdCB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZSBkYXRhYmFzZS4KK1dlIHN1Z2dlc3QgdGhhdCB0aGlzIGlzIHVzZWQgdG8gb3ZlcmxheSBhbnkgY29uZmlndXJhdGlvbiBhbHJlYWR5IGRvbmUuCitBbGwgb2JqZWN0cyBsb2FkZWQgd2l0aCB0aGUgc2FtZSBwcmltYXJ5IGtleXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyBkYXRhLgorRGF0YSBjYW4gYmUgcHJvdmlkZWQgaW4gWE1MLCBKU09OIGFuZCBpZiBpbnN0YWxsZWQgWUFNTCBmb3JtYXRzLgorCisjIFRvIGxvYWQgZGF0YSBhdCBhbnkgcG9pbnQgaW4gdGltZQorCitVc2UgdGhlIGRqYW5nbyBtYW5hZ2VtZW50IGNvbW1hbmQgbWFuYWdlLnB5IGxvYWRkYXRhIDx5b3VyIGZpeHR1cmUgZmlsZT4KK0ZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIHNlZSB0aGUgRGphbmdvIGNvbW1hbmQgZG9jdW1lbnRhdGlvbiBhdDoKK2h0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjgvcmVmL2RqYW5nby1hZG1pbi8jZGphbmdvLWFkbWluLWxvYWRkYXRhCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvb2UtY29yZS54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvb2UtY29yZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjODM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9maXh0dXJlcy9vZS1jb3JlLnhtbApAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPGRqYW5nby1vYmplY3RzIHZlcnNpb249IjEuMCI+CisgIDwhLS0gU2V0IHRoZSBwcm9qZWN0IGRlZmF1bHQgdmFsdWUgZm9yIERJU1RSTyAtLT4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLnRvYXN0ZXJzZXR0aW5nIiBwaz0iMSI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+REVGQ09ORl9ESVNUUk88L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZhbHVlIj5ub2Rpc3RybzwvZmllbGQ+CisgIDwvb2JqZWN0PgorCisgIDwhLS0gQml0YmFrZSB2ZXJzaW9ucyB3aGljaCBjb3JyZXNwb25kIHRvIHRoZSBtZXRhZGF0YSByZWxlYXNlIC0tPgorICA8b2JqZWN0IG1vZGVsPSJvcm0uYml0YmFrZXZlcnNpb24iIHBrPSIxIj4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5tb3J0eTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZ2l0dXJsIj5naXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPjEuMzI8L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLmJpdGJha2V2ZXJzaW9uIiBwaz0iMiI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+SEVBRDwvZmllbGQ+CisgIDwvb2JqZWN0PgorCisgIDwhLS0gUmVsZWFzZXMgYXZhaWxhYmxlIC0tPgorICA8b2JqZWN0IG1vZGVsPSJvcm0ucmVsZWFzZSIgcGs9IjEiPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPm1vcnR5PC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkZXNjcmlwdGlvbiI+T3BlbmVtYmVkZGVkIE1vcnR5PC9maWVsZD4KKyAgICA8ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0uYml0YmFrZXZlcnNpb24iIG5hbWU9ImJpdGJha2VfdmVyc2lvbiI+MTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoX25hbWUiPm1vcnR5PC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJoZWxwdGV4dCI+VG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvP2g9bW9ydHlcIiZndDtPcGVuRW1iZWRkZWQgTW9ydHkmbHQ7L2EmZ3Q7IGJyYW5jaC48L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLnJlbGVhc2UiIHBrPSIyIj4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5sb2NhbDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGVzY3JpcHRpb24iPkxvY2FsIE9wZW5lbWJlZGRlZDwvZmllbGQ+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLmJpdGJha2V2ZXJzaW9uIiBuYW1lPSJiaXRiYWtlX3ZlcnNpb24iPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaF9uYW1lIj5IRUFEPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJoZWxwdGV4dCI+VG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIE9wZW5FbWJlZGRlZCB0aGF0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuPC9maWVsZD4KKyAgPC9vYmplY3Q+CisKKyAgPCEtLSBEZWZhdWx0IGxheWVycyBmb3IgZWFjaCByZWxlYXNlIC0tPgorICA8b2JqZWN0IG1vZGVsPSJvcm0ucmVsZWFzZWRlZmF1bHRsYXllciIgcGs9IjEiPgorICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIj4xPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJsYXllcl9uYW1lIj5vcGVuZW1iZWRkZWQtY29yZTwvZmllbGQ+CisgIDwvb2JqZWN0PgorICA8b2JqZWN0IG1vZGVsPSJvcm0ucmVsZWFzZWRlZmF1bHRsYXllciIgcGs9IjQiPgorICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIj4yPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJsYXllcl9uYW1lIj5vcGVuZW1iZWRkZWQtY29yZTwvZmllbGQ+CisgIDwvb2JqZWN0PgorCisgIDwhLS0gVFlQRV9MT0NBTCA9IDAgTGF5ZXJzIGZvciB0aGUgTG9jYWwgcmVsZWFzZSAtLT4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLmxheWVyIiBwaz0iMSI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZjc191cmwiPmdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlPC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgbW9kZWw9Im9ybS5sYXllcl92ZXJzaW9uIiBwaz0iMSI+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLmxheWVyIiBuYW1lPSJsYXllciI+MTwvZmllbGQ+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLnJlbGVhc2UiIG5hbWU9InJlbGVhc2UiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImxvY2FsX3BhdGgiPk9FLUNPUkUtTEFZRVItRElSPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPkhFQUQ8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRpcnBhdGgiPm1ldGE8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9ImxheWVyX3NvdXJjZSI+MDwvZmllbGQ+CisgIDwvb2JqZWN0PgorCis8L2RqYW5nby1vYmplY3RzPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL2ZpeHR1cmVzL3Bva3kueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL2ZpeHR1cmVzL3Bva3kueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTJiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvcG9reS54bWwKQEAgLTAsMCArMSwxMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8ZGphbmdvLW9iamVjdHMgdmVyc2lvbj0iMS4wIj4KKyAgPCEtLSBTZXQgdGhlIHByb2plY3QgZGVmYXVsdCB2YWx1ZSBmb3IgRElTVFJPIC0tPgorICA8b2JqZWN0IG1vZGVsPSJvcm0udG9hc3RlcnNldHRpbmciIHBrPSIxIj4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5ERUZDT05GX0RJU1RSTzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmFsdWUiPnBva3k8L2ZpZWxkPgorICA8L29iamVjdD4KKworICA8IS0tIEJpdGJha2UgdmVyc2lvbnMgd2hpY2ggY29ycmVzcG9uZCB0byB0aGUgbWV0YWRhdGEgcmVsZWFzZSAtLT4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLmJpdGJha2V2ZXJzaW9uIiBwaz0iMSI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+bW9ydHk8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImdpdHVybCI+Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIj5tb3J0eTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGlycGF0aCI+Yml0YmFrZTwvZmllbGQ+CisgIDwvb2JqZWN0PgorICA8b2JqZWN0IG1vZGVsPSJvcm0uYml0YmFrZXZlcnNpb24iIHBrPSIyIj4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5IRUFEPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJnaXR1cmwiPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCI+SEVBRDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGlycGF0aCI+Yml0YmFrZTwvZmllbGQ+CisgIDwvb2JqZWN0PgorCisgIDwhLS0gUmVsZWFzZXMgYXZhaWxhYmxlIC0tPgorICA8b2JqZWN0IG1vZGVsPSJvcm0ucmVsZWFzZSIgcGs9IjEiPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPm1vcnR5PC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkZXNjcmlwdGlvbiI+WW9jdG8gUHJvamVjdCAyLjIgIk1vcnR5IjwvZmllbGQ+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLmJpdGJha2V2ZXJzaW9uIiBuYW1lPSJiaXRiYWtlX3ZlcnNpb24iPjE8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaF9uYW1lIj5tb3J0eTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IlRleHRGaWVsZCIgbmFtZT0iaGVscHRleHQiPlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgdXNpbmcgdGhlIHRpcCBvZiB0aGUgJmx0O2EgaHJlZj0iaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9bW9ydHkiJmd0O1lvY3RvIFByb2plY3QgTW9ydHkgYnJhbmNoJmx0Oy9hJmd0Oy48L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLnJlbGVhc2UiIHBrPSIyIj4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5sb2NhbDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGVzY3JpcHRpb24iPkxvY2FsIFlvY3RvIFByb2plY3Q8L2ZpZWxkPgorICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5iaXRiYWtldmVyc2lvbiIgbmFtZT0iYml0YmFrZV92ZXJzaW9uIj4yPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2hfbmFtZSI+SEVBRDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IlRleHRGaWVsZCIgbmFtZT0iaGVscHRleHQiPlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCB5b3UgaGF2ZSBjbG9uZWQgb3IgZG93bmxvYWRlZCB0byB5b3VyIGNvbXB1dGVyLjwvZmllbGQ+CisgIDwvb2JqZWN0PgorCisgIDwhLS0gRGVmYXVsdCBsYXllcnMgZm9yIGVhY2ggcmVsZWFzZSAtLT4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXIiIHBrPSIxIj4KKyAgICA8ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ucmVsZWFzZSIgbmFtZT0icmVsZWFzZSI+MTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibGF5ZXJfbmFtZSI+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXIiIHBrPSIyIj4KKyAgICA8ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ucmVsZWFzZSIgbmFtZT0icmVsZWFzZSI+MTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibGF5ZXJfbmFtZSI+bWV0YS1wb2t5PC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgbW9kZWw9Im9ybS5yZWxlYXNlZGVmYXVsdGxheWVyIiBwaz0iMyI+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLnJlbGVhc2UiIG5hbWU9InJlbGVhc2UiPjE8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImxheWVyX25hbWUiPm1ldGEteW9jdG8tYnNwPC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgbW9kZWw9Im9ybS5yZWxlYXNlZGVmYXVsdGxheWVyIiBwaz0iNCI+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLnJlbGVhc2UiIG5hbWU9InJlbGVhc2UiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImxheWVyX25hbWUiPm9wZW5lbWJlZGRlZC1jb3JlPC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgbW9kZWw9Im9ybS5yZWxlYXNlZGVmYXVsdGxheWVyIiBwaz0iNSI+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLnJlbGVhc2UiIG5hbWU9InJlbGVhc2UiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImxheWVyX25hbWUiPm1ldGEtcG9reTwvZmllbGQ+CisgIDwvb2JqZWN0PgorICA8b2JqZWN0IG1vZGVsPSJvcm0ucmVsZWFzZWRlZmF1bHRsYXllciIgcGs9IjYiPgorICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIj4yPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJsYXllcl9uYW1lIj5tZXRhLXlvY3RvLWJzcDwvZmllbGQ+CisgIDwvb2JqZWN0PgorCisgIDwhLS0gTGF5ZXJzIGZvciB0aGUgTG9jYWwgcmVsZWFzZQorICAgICAgIGxheWVyc291cmNlIFRZUEVfTE9DQUwgPSAwCisgIC0tPgorICA8b2JqZWN0IG1vZGVsPSJvcm0ubGF5ZXIiIHBrPSIxIj4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5vcGVuZW1iZWRkZWQtY29yZTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibGF5ZXJfaW5kZXhfdXJsIj48L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZjc191cmwiPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLmxheWVyX3ZlcnNpb24iIHBrPSIxIj4KKyAgICA8ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ubGF5ZXIiIG5hbWU9ImxheWVyIj4xPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJsYXllcl9zb3VyY2UiPjA8L2ZpZWxkPgorICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIj4yPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPkhFQUQ8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImNvbW1pdCI+SEVBRDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGlycGF0aCI+bWV0YTwvZmllbGQ+CisgIDwvb2JqZWN0PgorCisKKyAgPG9iamVjdCBtb2RlbD0ib3JtLmxheWVyIiBwaz0iMiI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+bWV0YS1wb2t5PC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJsYXllcl9pbmRleF91cmwiPjwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3VybCI+Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTwvZmllbGQ+CisgIDwvb2JqZWN0PgorICA8b2JqZWN0IG1vZGVsPSJvcm0ubGF5ZXJfdmVyc2lvbiIgcGs9IjIiPgorICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5sYXllciIgbmFtZT0ibGF5ZXIiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9ImxheWVyX3NvdXJjZSI+MDwvZmllbGQ+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLnJlbGVhc2UiIG5hbWU9InJlbGVhc2UiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCI+SEVBRDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iY29tbWl0Ij5IRUFEPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIj5tZXRhLXBva3k8L2ZpZWxkPgorICA8L29iamVjdD4KKworCisgIDxvYmplY3QgbW9kZWw9Im9ybS5sYXllciIgcGs9IjMiPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPm1ldGEteW9jdG8tYnNwPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJsYXllcl9pbmRleF91cmwiPjwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3VybCI+Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTwvZmllbGQ+CisgIDwvb2JqZWN0PgorICA8b2JqZWN0IG1vZGVsPSJvcm0ubGF5ZXJfdmVyc2lvbiIgcGs9IjMiPgorICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5sYXllciIgbmFtZT0ibGF5ZXIiPjM8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9ImxheWVyX3NvdXJjZSI+MDwvZmllbGQ+CisgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLnJlbGVhc2UiIG5hbWU9InJlbGVhc2UiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCI+SEVBRDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iY29tbWl0Ij5IRUFEPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIj5tZXRhLXlvY3RvLWJzcDwvZmllbGQ+CisgIDwvb2JqZWN0PgorPC9kamFuZ28tb2JqZWN0cz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9maXh0dXJlcy9zZXR0aW5ncy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNmEyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8ZGphbmdvLW9iamVjdHMgdmVyc2lvbj0iMS4wIj4KKyAgPCEtLSBEZWZhdWx0IHByb2plY3Qgc2V0dGluZ3MgLS0+CisgIDwhLS0gcGs9MSBpcyBESVNUUk8gLS0+CisgIDxvYmplY3QgbW9kZWw9Im9ybS50b2FzdGVyc2V0dGluZyIgcGs9IjIiPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPkRFRkFVTFRfUkVMRUFTRTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmFsdWUiPm1vcnR5PC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgbW9kZWw9Im9ybS50b2FzdGVyc2V0dGluZyIgcGs9IjMiPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPkRFRkNPTkZfUEFDS0FHRV9DTEFTU0VTPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2YWx1ZSI+cGFja2FnZV9ycG08L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLnRvYXN0ZXJzZXR0aW5nIiBwaz0iNCI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+REVGQ09ORl9NQUNISU5FPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2YWx1ZSI+cWVtdXg4NjwvZmllbGQ+CisgIDwvb2JqZWN0PgorICA8b2JqZWN0IG1vZGVsPSJvcm0udG9hc3RlcnNldHRpbmciIHBrPSI1Ij4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5ERUZDT05GX1NTVEFURV9ESVI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZhbHVlIj4ke1RPUERJUn0vLi4vc3N0YXRlLWNhY2hlPC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgbW9kZWw9Im9ybS50b2FzdGVyc2V0dGluZyIgcGs9IjYiPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPkRFRkNPTkZfSU1BR0VfSU5TVEFMTF9hcHBlbmQ8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZhbHVlIj48L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBtb2RlbD0ib3JtLnRvYXN0ZXJzZXR0aW5nIiBwaz0iNyI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+REVGQ09ORl9JTUFHRV9GU1RZUEVTPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2YWx1ZSI+ZXh0MyBqZmZzMiB0YXIuYnoyPC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgbW9kZWw9Im9ybS50b2FzdGVyc2V0dGluZyIgcGs9IjgiPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPkRFRkNPTkZfRExfRElSPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2YWx1ZSI+JHtUT1BESVJ9Ly4uL2Rvd25sb2FkczwvZmllbGQ+CisgIDwvb2JqZWN0PgorPC9kamFuZ28tb2JqZWN0cz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL2xzdXBkYXRlcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL2xzdXBkYXRlcy5weQppbmRleCA3NWU5NTEzLi44ZmYxMjBlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9sc3VwZGF0ZXMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5CkBAIC0xLDEyICsxLDMzNCBAQAotZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IE5vQXJnc0NvbW1hbmQsIENvbW1hbmRFcnJvcgotZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllclNvdXJjZQorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UsIExheWVyLCBSZWxlYXNlLCBMYXllcl9WZXJzaW9uCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyVmVyc2lvbkRlcGVuZGVuY3ksIE1hY2hpbmUsIFJlY2lwZQorCiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCitERUZBVUxUX0xBWUVSSU5ERVhfU0VSVkVSID0gImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2FwaS8iCisKKworY2xhc3MgU3Bpbm5lcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiIgQSBzaW1wbGUgcHJvZ3Jlc3Mgc3Bpbm5lciB0byBpbmRpY2F0ZSBkb3dubG9hZC9wYXJzaW5nIGlzIGhhcHBlbmluZyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihTcGlubmVyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIHNlbGYuc2lnbmFsID0gVHJ1ZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgb3Muc3lzdGVtKCdzZXR0ZXJtIC1jdXJzb3Igb2ZmJykKKyAgICAgICAgd2hpbGUgc2VsZi5zaWduYWw6CisgICAgICAgICAgICBmb3IgY2hhciBpbiBbIi8iLCAiLSIsICJcXCIsICJ8Il06CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXHIiICsgY2hhcikKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMjUpCisgICAgICAgIG9zLnN5c3RlbSgnc2V0dGVybSAtY3Vyc29yIG9uJykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnNpZ25hbCA9IEZhbHNlCisKIAogY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKLSAgICBhcmdzICAgID0gIiIKLSAgICBoZWxwICAgID0gIlVwZGF0ZXMgbG9jYWxseSBjYWNoZWQgaW5mb3JtYXRpb24gZnJvbSBhbGwgTGF5ZXJTb3VyY2VzIgorICAgIGFyZ3MgPSAiIgorICAgIGhlbHAgPSAiVXBkYXRlcyBsb2NhbGx5IGNhY2hlZCBpbmZvcm1hdGlvbiBmcm9tIGEgbGF5ZXJpbmRleCBzZXJ2ZXIiCiAKKyAgICBkZWYgbWluaV9wcm9ncmVzcyhzZWxmLCB3aGF0LCBpLCB0b3RhbCk6CisgICAgICAgIGkgPSBpICsgMQorICAgICAgICBwZWMgPSAoZmxvYXQoaSkvZmxvYXQodG90YWwpKSoxMDAKKworICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcclVwZGF0aW5nICVzICVkJSUiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAod2hhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGVjKSkKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIGlmIGludChwZWMpIGlzIDEwMDoKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBGZXRjaGVzIGxheWVyLCByZWNpcGUgYW5kIG1hY2hpbmUgaW5mb3JtYXRpb24gZnJvbSBhIGxheWVyaW5kZXgKKyAgICAgICAgICAgIHNlcnZlcgorICAgICAgICAiIiIKKyAgICAgICAgb3Muc3lzdGVtKCdzZXR0ZXJtIC1jdXJzb3Igb2ZmJykKKworICAgICAgICBzZWxmLmFwaXVybCA9IERFRkFVTFRfTEFZRVJJTkRFWF9TRVJWRVIKKworICAgICAgICBhc3NlcnQgc2VsZi5hcGl1cmwgaXMgbm90IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbiwgVVJMRXJyb3IKKyAgICAgICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IHVybG9wZW4sIFVSTEVycm9yCisgICAgICAgICAgICBmcm9tIHVybHBhcnNlIGltcG9ydCB1cmxwYXJzZQorCisgICAgICAgIHByb3h5X3NldHRpbmdzID0gb3MuZW52aXJvbi5nZXQoImh0dHBfcHJveHkiLCBOb25lKQorICAgICAgICBvZV9jb3JlX2xheWVyID0gJ29wZW5lbWJlZGRlZC1jb3JlJworCisgICAgICAgIGRlZiBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpdXJsPURFRkFVTFRfTEFZRVJJTkRFWF9TRVJWRVIpOgorICAgICAgICAgICAgaHR0cF9wcm9ncmVzcyA9IFNwaW5uZXIoKQorICAgICAgICAgICAgaHR0cF9wcm9ncmVzcy5zdGFydCgpCisKKyAgICAgICAgICAgIF9wYXJzZWR1cmwgPSB1cmxwYXJzZShhcGl1cmwpCisgICAgICAgICAgICBwYXRoID0gX3BhcnNlZHVybC5wYXRoCisKKyAgICAgICAgICAgICMgbG9nZ2VyLmRlYnVnKCJGZXRjaGluZyAlcyIsIGFwaXVybCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXMgPSB1cmxvcGVuKGFwaXVybCkKKyAgICAgICAgICAgIGV4Y2VwdCBVUkxFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgJXM6ICVzIiAlIChwYXRoLCBlLnJlYXNvbikpCisKKyAgICAgICAgICAgIHBhcnNlZCA9IGpzb24ubG9hZHMocmVzLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCisKKyAgICAgICAgICAgIGh0dHBfcHJvZ3Jlc3Muc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VkCisKKyAgICAgICAgIyB2ZXJpZnkgd2UgY2FuIGdldCB0aGUgYmFzaWMgYXBpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFwaWxpbmtzID0gX2dldF9qc29uX3Jlc3BvbnNlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgaWYgcHJveHlfc2V0dGluZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkVFOiBVc2luZyBwcm94eSAlcyIgJSBwcm94eV9zZXR0aW5ncykKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJFRTogY291bGQgbm90IGNvbm5lY3QgdG8gJXMsIHNraXBwaW5nIHVwZGF0ZToiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXNcbiVzIiAlIChzZWxmLmFwaXVybCwgZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHVwZGF0ZSBicmFuY2hlczsgb25seSB0aG9zZSB0aGF0IHdlIGFscmVhZHkgaGF2ZSBuYW1lcyBsaXN0ZWQgaW4gdGhlCisgICAgICAgICMgUmVsZWFzZXMgdGFibGUKKyAgICAgICAgd2hpdGVsaXN0X2JyYW5jaF9uYW1lcyA9IFtyZWwuYnJhbmNoX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcmVsIGluIFJlbGVhc2Uub2JqZWN0cy5hbGwoKV0KKyAgICAgICAgaWYgbGVuKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBtYWtlIGxpc3Qgb2YgYnJhbmNoZXMgdG8gZmV0Y2giKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaGluZyBtZXRhZGF0YSByZWxlYXNlcyBmb3IgJXMiLAorICAgICAgICAgICAgICAgICAgICAiICIuam9pbih3aGl0ZWxpc3RfYnJhbmNoX25hbWVzKSkKKworICAgICAgICBicmFuY2hlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydicmFuY2hlcyddICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiP2ZpbHRlcj1uYW1lOiVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgIk9SIi5qb2luKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpKQorCisgICAgICAgICMgTWFwIHRoZSBsYXllciBpbmRleCBicmFuY2hlcyB0byB0b2FzdGVyIHJlbGVhc2VzCisgICAgICAgIGxpX2JyYW5jaF9pZF90b190b2FzdGVyX3JlbGVhc2UgPSB7fQorCisgICAgICAgIHRvdGFsID0gbGVuKGJyYW5jaGVzX2luZm8pCisgICAgICAgIGZvciBpLCBicmFuY2ggaW4gZW51bWVyYXRlKGJyYW5jaGVzX2luZm8pOgorICAgICAgICAgICAgbGlfYnJhbmNoX2lkX3RvX3RvYXN0ZXJfcmVsZWFzZVticmFuY2hbJ2lkJ11dID0gXAorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlLm9iamVjdHMuZ2V0KG5hbWU9YnJhbmNoWyduYW1lJ10pCisgICAgICAgICAgICBzZWxmLm1pbmlfcHJvZ3Jlc3MoIlJlbGVhc2VzIiwgaSwgdG90YWwpCisKKyAgICAgICAgIyBrZWVwIGEgdHJhY2sgb2YgdGhlIGxheWVyaW5kZXggKGxpKSBpZCBtYXBwaW5ncyBzbyB0aGF0CisgICAgICAgICMgbGF5ZXJfdmVyc2lvbnMgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoZXNlIGxheWVycyBsYXRlciBvbgorICAgICAgICBsaV9sYXllcl9pZF90b190b2FzdGVyX2xheWVyX2lkID0ge30KKworICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2hpbmcgbGF5ZXJzIikKKworICAgICAgICBsYXllcnNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1snbGF5ZXJJdGVtcyddKQorCisgICAgICAgIHRvdGFsID0gbGVuKGxheWVyc19pbmZvKQorICAgICAgICBmb3IgaSwgbGkgaW4gZW51bWVyYXRlKGxheWVyc19pbmZvKToKKyAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciB0aGUgb3BlbmVtYmVkZGVkLWNvcmUgbGF5ZXIKKyAgICAgICAgICAgIGlmIGxpWyduYW1lJ10gPT0gb2VfY29yZV9sYXllcjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBhbiBleGlzdGluZyBvcGVuZW1iZWRkZWQtY29yZSBmb3IgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAjIGZyb20gdGhlIHRvYXN0ZXJjb25mLmpzb24gYXVnbWVudCB0aGUgaW5mbyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBsYXllcmluZGV4IHJhdGhlciB0aGFuIGR1cGxpY2F0ZSBpdAorICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wgPSBMYXllci5vYmplY3RzLmdldChuYW1lPW9lX2NvcmVfbGF5ZXIpCisgICAgICAgICAgICAgICAgICAgICMgVGFrZSBvd25lcnNoaXAgb2YgdGhlIGxheWVyIGFzIG5vdyBjb21pbmcgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBsYXllcmluZGV4CisgICAgICAgICAgICAgICAgICAgIG9lX2NvcmVfbC5zdW1tYXJ5ID0gbGlbJ3N1bW1hcnknXQorICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wuZGVzY3JpcHRpb24gPSBsaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wudmNzX3dlYl91cmwgPSBsaVsndmNzX3dlYl91cmwnXQorICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wudmNzX3dlYl90cmVlX2Jhc2VfdXJsID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgbGlbJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCddCisgICAgICAgICAgICAgICAgICAgIG9lX2NvcmVfbC52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBsaVsndmNzX3dlYl9maWxlX2Jhc2VfdXJsJ10KKworICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wuc2F2ZSgpCisgICAgICAgICAgICAgICAgICAgIGxpX2xheWVyX2lkX3RvX3RvYXN0ZXJfbGF5ZXJfaWRbbGlbJ2lkJ11dID0gb2VfY29yZV9sLnBrCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWluaV9wcm9ncmVzcygibGF5ZXJzIiwgaSwgdG90YWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBleGNlcHQgTGF5ZXIuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsLCBjcmVhdGVkID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWU9bGlbJ25hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjc191cmw9bGlbJ3Zjc191cmwnXSkKKyAgICAgICAgICAgICAgICBsLnVwX2RhdGUgPSBsaVsndXBkYXRlZCddCisgICAgICAgICAgICAgICAgbC52Y3NfdXJsID0gbGlbJ3Zjc191cmwnXQorICAgICAgICAgICAgICAgIGwudmNzX3dlYl91cmwgPSBsaVsndmNzX3dlYl91cmwnXQorICAgICAgICAgICAgICAgIGwudmNzX3dlYl90cmVlX2Jhc2VfdXJsID0gbGlbJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCddCisgICAgICAgICAgICAgICAgbC52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBsaVsndmNzX3dlYl9maWxlX2Jhc2VfdXJsJ10KKyAgICAgICAgICAgICAgICBsLnN1bW1hcnkgPSBsaVsnc3VtbWFyeSddCisgICAgICAgICAgICAgICAgbC5kZXNjcmlwdGlvbiA9IGxpWydkZXNjcmlwdGlvbiddCisgICAgICAgICAgICAgICAgbC5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBMYXllci5NdWx0aXBsZU9iamVjdHNSZXR1cm5lZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2tpcHBlZCAlcyBhcyB3ZSBmb3VuZCBtdWx0aXBsZSBsYXllcnMgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9uJ3Qga25vdyB3aGljaCB0byB1cGRhdGUiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaVsnbmFtZSddKQorCisgICAgICAgICAgICBsaV9sYXllcl9pZF90b190b2FzdGVyX2xheWVyX2lkW2xpWydpZCddXSA9IGwucGsKKworICAgICAgICAgICAgc2VsZi5taW5pX3Byb2dyZXNzKCJsYXllcnMiLCBpLCB0b3RhbCkKKworICAgICAgICAjIHVwZGF0ZSBsYXllcl92ZXJzaW9ucworICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2hpbmcgbGF5ZXIgdmVyc2lvbnMiKQorICAgICAgICBsYXllcmJyYW5jaGVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBhcGlsaW5rc1snbGF5ZXJCcmFuY2hlcyddICsgIj9maWx0ZXI9YnJhbmNoX19uYW1lOiVzIiAlCisgICAgICAgICAgICAiT1IiLmpvaW4od2hpdGVsaXN0X2JyYW5jaF9uYW1lcykpCisKKyAgICAgICAgIyBNYXAgTGF5ZXIgaW5kZXggbGF5ZXJfYnJhbmNoIG9iamVjdCBpZCB0bworICAgICAgICAjIGxheWVyX3ZlcnNpb24gdG9hc3RlciBvYmplY3QgaWQKKyAgICAgICAgbGlfbGF5ZXJfYnJhbmNoX2lkX3RvX3RvYXN0ZXJfbHZfaWQgPSB7fQorCisgICAgICAgIHRvdGFsID0gbGVuKGxheWVyYnJhbmNoZXNfaW5mbykKKyAgICAgICAgZm9yIGksIGxiaSBpbiBlbnVtZXJhdGUobGF5ZXJicmFuY2hlc19pbmZvKToKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGx2LCBjcmVhdGVkID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1MYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgsCisgICAgICAgICAgICAgICAgICAgIGxheWVyPUxheWVyLm9iamVjdHMuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgcGs9bGlfbGF5ZXJfaWRfdG9fdG9hc3Rlcl9sYXllcl9pZFtsYmlbJ2xheWVyJ11dKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgIk5vIHN1Y2ggbGF5ZXJpbmRleCBsYXllciByZWZlcmVuY2VkIGJ5IGxheWVyYnJhbmNoICVkIiAlCisgICAgICAgICAgICAgICAgICAgIGxiaVsnbGF5ZXInXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsdi5yZWxlYXNlID0gbGlfYnJhbmNoX2lkX3RvX3RvYXN0ZXJfcmVsZWFzZVtsYmlbJ2JyYW5jaCddXQorICAgICAgICAgICAgbHYudXBfZGF0ZSA9IGxiaVsndXBkYXRlZCddCisgICAgICAgICAgICBsdi5jb21taXQgPSBsYmlbJ2FjdHVhbF9icmFuY2gnXQorICAgICAgICAgICAgbHYuZGlycGF0aCA9IGxiaVsndmNzX3N1YmRpciddCisgICAgICAgICAgICBsdi5zYXZlKCkKKworICAgICAgICAgICAgbGlfbGF5ZXJfYnJhbmNoX2lkX3RvX3RvYXN0ZXJfbHZfaWRbbGJpWydpZCddXSA9XAorICAgICAgICAgICAgICAgIGx2LnBrCisgICAgICAgICAgICBzZWxmLm1pbmlfcHJvZ3Jlc3MoImxheWVyIHZlcnNpb25zIiwgaSwgdG90YWwpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoaW5nIGxheWVyIHZlcnNpb24gZGVwZW5kZW5jaWVzIikKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXIgZGVwZW5kZW5jaWVzCisgICAgICAgIGxheWVyZGVwZW5kZW5jaWVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBhcGlsaW5rc1snbGF5ZXJEZXBlbmRlbmNpZXMnXSArCisgICAgICAgICAgICAiP2ZpbHRlcj1sYXllcmJyYW5jaF9fYnJhbmNoX19uYW1lOiVzIiAlCisgICAgICAgICAgICAiT1IiLmpvaW4od2hpdGVsaXN0X2JyYW5jaF9uYW1lcykpCisKKyAgICAgICAgZGVwZW5kbGlzdCA9IHt9CisgICAgICAgIGZvciBsZGkgaW4gbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQoCisgICAgICAgICAgICAgICAgICAgIHBrPWxpX2xheWVyX2JyYW5jaF9pZF90b190b2FzdGVyX2x2X2lkW2xkaVsnbGF5ZXJicmFuY2gnXV0pCisgICAgICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3QgYXMgZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBsdiBub3QgaW4gZGVwZW5kbGlzdDoKKyAgICAgICAgICAgICAgICBkZXBlbmRsaXN0W2x2XSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGF5ZXJfaWQgPSBsaV9sYXllcl9pZF90b190b2FzdGVyX2xheWVyX2lkW2xkaVsnZGVwZW5kZW5jeSddXQorCisgICAgICAgICAgICAgICAgZGVwZW5kbGlzdFtsdl0uYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPUxheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX19waz1sYXllcl9pZCkpCisKKyAgICAgICAgICAgIGV4Y2VwdCBMYXllcl9WZXJzaW9uLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiQ2Fubm90IGZpbmQgbGF5ZXIgdmVyc2lvbiAobHM6JXMpLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXBfaWQ6JXMgbHY6JXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZiwgbGRpWydkZXBlbmRlbmN5J10sIGx2KSkKKworICAgICAgICB0b3RhbCA9IGxlbihkZXBlbmRsaXN0KQorICAgICAgICBmb3IgaSwgbHYgaW4gZW51bWVyYXRlKGRlcGVuZGxpc3QpOgorICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uPWx2KS5kZWxldGUoKQorICAgICAgICAgICAgZm9yIGx2ZCBpbiBkZXBlbmRsaXN0W2x2XToKKyAgICAgICAgICAgICAgICBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl92ZXJzaW9uPWx2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHNfb249bHZkKQorICAgICAgICAgICAgc2VsZi5taW5pX3Byb2dyZXNzKCJMYXllciB2ZXJzaW9uIGRlcGVuZGVuY2llcyIsIGksIHRvdGFsKQorCisgICAgICAgICMgdXBkYXRlIG1hY2hpbmVzCisgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaGluZyBtYWNoaW5lIGluZm9ybWF0aW9uIikKKyAgICAgICAgbWFjaGluZXNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIGFwaWxpbmtzWydtYWNoaW5lcyddICsgIj9maWx0ZXI9bGF5ZXJicmFuY2hfX2JyYW5jaF9fbmFtZTolcyIgJQorICAgICAgICAgICAgIk9SIi5qb2luKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpKQorCisgICAgICAgIHRvdGFsID0gbGVuKG1hY2hpbmVzX2luZm8pCisgICAgICAgIGZvciBpLCBtaSBpbiBlbnVtZXJhdGUobWFjaGluZXNfaW5mbyk6CisgICAgICAgICAgICBtbywgY3JlYXRlZCA9IE1hY2hpbmUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAorICAgICAgICAgICAgICAgIG5hbWU9bWlbJ25hbWUnXSwKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uPUxheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQoCisgICAgICAgICAgICAgICAgICAgIHBrPWxpX2xheWVyX2JyYW5jaF9pZF90b190b2FzdGVyX2x2X2lkW21pWydsYXllcmJyYW5jaCddXSkpCisgICAgICAgICAgICBtby51cF9kYXRlID0gbWlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbW8ubmFtZSA9IG1pWyduYW1lJ10KKyAgICAgICAgICAgIG1vLmRlc2NyaXB0aW9uID0gbWlbJ2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIG1vLnNhdmUoKQorICAgICAgICAgICAgc2VsZi5taW5pX3Byb2dyZXNzKCJtYWNoaW5lcyIsIGksIHRvdGFsKQorCisgICAgICAgICMgdXBkYXRlIHJlY2lwZXM7IHBhZ2luYXRlIGJ5IGxheWVyIHZlcnNpb24gLyBsYXllciBicmFuY2gKKyAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoaW5nIHJlY2lwZSBpbmZvcm1hdGlvbiIpCisgICAgICAgIHJlY2lwZXNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIGFwaWxpbmtzWydyZWNpcGVzJ10gKyAiP2ZpbHRlcj1sYXllcmJyYW5jaF9fYnJhbmNoX19uYW1lOiVzIiAlCisgICAgICAgICAgICAiT1IiLmpvaW4od2hpdGVsaXN0X2JyYW5jaF9uYW1lcykpCisKKyAgICAgICAgdG90YWwgPSBsZW4ocmVjaXBlc19pbmZvKQorICAgICAgICBmb3IgaSwgcmkgaW4gZW51bWVyYXRlKHJlY2lwZXNfaW5mbyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbHZfaWQgPSBsaV9sYXllcl9icmFuY2hfaWRfdG9fdG9hc3Rlcl9sdl9pZFtyaVsnbGF5ZXJicmFuY2gnXV0KKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9bHZfaWQpCisKKyAgICAgICAgICAgICAgICBybywgY3JlYXRlZCA9IFJlY2lwZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb249bHYsCisgICAgICAgICAgICAgICAgICAgIG5hbWU9cmlbJ3BuJ10KKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICAgICByby5sYXllcl92ZXJzaW9uID0gbHYKKyAgICAgICAgICAgICAgICByby51cF9kYXRlID0gcmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgICAgIHJvLm5hbWUgPSByaVsncG4nXQorICAgICAgICAgICAgICAgIHJvLnZlcnNpb24gPSByaVsncHYnXQorICAgICAgICAgICAgICAgIHJvLnN1bW1hcnkgPSByaVsnc3VtbWFyeSddCisgICAgICAgICAgICAgICAgcm8uZGVzY3JpcHRpb24gPSByaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgICAgIHJvLnNlY3Rpb24gPSByaVsnc2VjdGlvbiddCisgICAgICAgICAgICAgICAgcm8ubGljZW5zZSA9IHJpWydsaWNlbnNlJ10KKyAgICAgICAgICAgICAgICByby5ob21lcGFnZSA9IHJpWydob21lcGFnZSddCisgICAgICAgICAgICAgICAgcm8uYnVndHJhY2tlciA9IHJpWydidWd0cmFja2VyJ10KKyAgICAgICAgICAgICAgICByby5maWxlX3BhdGggPSByaVsnZmlsZXBhdGgnXSArICIvIiArIHJpWydmaWxlbmFtZSddCisgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiByaToKKyAgICAgICAgICAgICAgICAgICAgcm8uaXNfaW1hZ2UgPSAnaW1hZ2UnIGluIHJpWydpbmhlcml0cyddLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBlbHNlOiAgIyB3b3JrYXJvdW5kIGZvciBvbGQgc3R5bGUgbGF5ZXIgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgcm8uaXNfaW1hZ2UgPSAiLWltYWdlLSIgaW4gcmlbJ3BuJ10KKyAgICAgICAgICAgICAgICByby5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiRmFpbGVkIHNhdmluZyByZWNpcGUgJXMiLCBlKQorCisgICAgICAgICAgICBzZWxmLm1pbmlfcHJvZ3Jlc3MoInJlY2lwZXMiLCBpLCB0b3RhbCkKKworICAgICAgICBvcy5zeXN0ZW0oJ3NldHRlcm0gLWN1cnNvciBvbicpCiAKICAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgotICAgICAgICBmb3IgbHMgaW4gTGF5ZXJTb3VyY2Uub2JqZWN0cy5hbGwoKToKLSAgICAgICAgICAgIGxzLnVwZGF0ZSgpCisgICAgICAgIHNlbGYudXBkYXRlKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDdfYXV0b18yMDE2MDUyM18xNDQ2LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwN19hdXRvXzIwMTYwNTIzXzE0NDYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3MmU3YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDdfYXV0b18yMDE2MDUyM18xNDQ2LnB5CkBAIC0wLDAgKzEsODkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CisKKyAgICBkZXBlbmRlbmNpZXMgPSBbCisgICAgICAgICgnb3JtJywgJzAwMDZfYWRkX2NhbmNlbGxlZF9zdGF0ZScpLAorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2J1aWxkJywKKyAgICAgICAgICAgIG5hbWU9J291dGNvbWUnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTIsIGNob2ljZXM9WygwLCAnU3VjY2VlZGVkJyksICgxLCAnRmFpbGVkJyksICgyLCAnSW4gUHJvZ3Jlc3MnKSwgKDMsICdDYW5jZWxsZWQnKV0pLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdoZWxwdGV4dCcsCisgICAgICAgICAgICBuYW1lPSdhcmVhJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1bKDAsICd2YXJpYWJsZScpXSksCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2xheWVyJywKKyAgICAgICAgICAgIG5hbWU9J3N1bW1hcnknLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLlRleHRGaWVsZChkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSwgaGVscF90ZXh0PSdPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGF5ZXInKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nbGF5ZXJfdmVyc2lvbicsCisgICAgICAgICAgICBuYW1lPSdsb2NhbF9wYXRoJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5GaWxlUGF0aEZpZWxkKGRlZmF1bHQ9Jy8nLCBtYXhfbGVuZ3RoPTEwMjQpLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdsYXllcnNvdXJjZScsCisgICAgICAgICAgICBuYW1lPSdzb3VyY2V0eXBlJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1bKDAsICdsb2NhbCcpLCAoMSwgJ2xheWVyaW5kZXgnKSwgKDIsICdpbXBvcnRlZCcpXSksCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2xvZ21lc3NhZ2UnLAorICAgICAgICAgICAgbmFtZT0nbGV2ZWwnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTAsIGNob2ljZXM9WygwLCAnaW5mbycpLCAoMSwgJ3dhcm4nKSwgKDIsICdlcnJvcicpLCAoMywgJ2NyaXRpY2FsJyksICgtMSwgJ3RvYXN0ZXIgZXhjZXB0aW9uJyldKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0ncGFja2FnZScsCisgICAgICAgICAgICBuYW1lPSdpbnN0YWxsZWRfbmFtZScsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MTAwKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0ncGFja2FnZV9kZXBlbmRlbmN5JywKKyAgICAgICAgICAgIG5hbWU9J2RlcF90eXBlJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1bKDAsICdkZXBlbmRzJyksICgxLCAnZGVwZW5kcycpLCAoMywgJ3JlY29tbWVuZHMnKSwgKDIsICdyZWNvbW1lbmRzJyksICg0LCAnc3VnZ2VzdHMnKSwgKDUsICdwcm92aWRlcycpLCAoNiwgJ3JlcGxhY2VzJyksICg3LCAnY29uZmxpY3RzJyldKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0ncmVjaXBlX2RlcGVuZGVuY3knLAorICAgICAgICAgICAgbmFtZT0nZGVwX3R5cGUnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVsoMCwgJ2RlcGVuZHMnKSwgKDEsICdyZGVwZW5kcycpXSksCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J3JlbGVhc2UnLAorICAgICAgICAgICAgbmFtZT0nYnJhbmNoX25hbWUnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUwKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0ncmVsZWFzZWRlZmF1bHRsYXllcicsCisgICAgICAgICAgICBuYW1lPSdsYXllcl9uYW1lJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSd0YXJnZXRfZmlsZScsCisgICAgICAgICAgICBuYW1lPSdpbm9kZXR5cGUnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVsoMSwgJ3JlZ3VsYXInKSwgKDIsICdkaXJlY3RvcnknKSwgKDMsICdzeW1saW5rJyksICg0LCAnc29ja2V0JyksICg1LCAnZmlmbycpLCAoNiwgJ2NoYXJhY3RlcicpLCAoNywgJ2Jsb2NrJyldKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0ndGFzaycsCisgICAgICAgICAgICBuYW1lPSdvdXRjb21lJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0tMSwgY2hvaWNlcz1bKC0xLCAnTm90IEF2YWlsYWJsZScpLCAoMCwgJ1N1Y2NlZWRlZCcpLCAoMSwgJ0NvdmVyZWQnKSwgKDIsICdDYWNoZWQnKSwgKDMsICdQcmVidWlsdCcpLCAoNCwgJ0ZhaWxlZCcpLCAoNSwgJ0VtcHR5JyldKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0ndGFzaycsCisgICAgICAgICAgICBuYW1lPSdzY3JpcHRfdHlwZScsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCwgY2hvaWNlcz1bKDAsICdOL0EnKSwgKDIsICdQeXRob24nKSwgKDMsICdTaGVsbCcpXSksCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J3Rhc2snLAorICAgICAgICAgICAgbmFtZT0nc3N0YXRlX3Jlc3VsdCcsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCwgY2hvaWNlcz1bKDAsICdOb3QgQXBwbGljYWJsZScpLCAoMSwgJ0ZpbGUgbm90IGluIGNhY2hlJyksICgyLCAnRmFpbGVkJyksICgzLCAnU3VjY2VlZGVkJyldKSwKKyAgICAgICAgKSwKKyAgICBdCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA4X3JlZmFjdG9yX2FydGlmYWN0X21vZGVscy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDhfcmVmYWN0b3JfYXJ0aWZhY3RfbW9kZWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjc1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA4X3JlZmFjdG9yX2FydGlmYWN0X21vZGVscy5weQpAQCAtMCwwICsxLDM5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgorCisgICAgZGVwZW5kZW5jaWVzID0gWworICAgICAgICAoJ29ybScsICcwMDA3X2F1dG9fMjAxNjA1MjNfMTQ0NicpLAorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCisgICAgICAgICAgICBuYW1lPSdUYXJnZXRLZXJuZWxGaWxlJywKKyAgICAgICAgICAgIGZpZWxkcz1bCisgICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHZlcmJvc2VfbmFtZT0nSUQnLCBzZXJpYWxpemU9RmFsc2UpKSwKKyAgICAgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIG1vZGVscy5GaWxlUGF0aEZpZWxkKCkpLAorICAgICAgICAgICAgICAgICgnZmlsZV9zaXplJywgbW9kZWxzLkludGVnZXJGaWVsZCgpKSwKKyAgICAgICAgICAgICAgICAoJ3RhcmdldCcsIG1vZGVscy5Gb3JlaWduS2V5KHRvPSdvcm0uVGFyZ2V0JykpLAorICAgICAgICAgICAgXSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKKyAgICAgICAgICAgIG5hbWU9J1RhcmdldFNES0ZpbGUnLAorICAgICAgICAgICAgZmllbGRzPVsKKyAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkF1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwgdmVyYm9zZV9uYW1lPSdJRCcsIHNlcmlhbGl6ZT1GYWxzZSkpLAorICAgICAgICAgICAgICAgICgnZmlsZV9uYW1lJywgbW9kZWxzLkZpbGVQYXRoRmllbGQoKSksCisgICAgICAgICAgICAgICAgKCdmaWxlX3NpemUnLCBtb2RlbHMuSW50ZWdlckZpZWxkKCkpLAorICAgICAgICAgICAgICAgICgndGFyZ2V0JywgbW9kZWxzLkZvcmVpZ25LZXkodG89J29ybS5UYXJnZXQnKSksCisgICAgICAgICAgICBdLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLlJlbW92ZUZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnVpbGRhcnRpZmFjdCcsCisgICAgICAgICAgICBuYW1lPSdidWlsZCcsCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuRGVsZXRlTW9kZWwoCisgICAgICAgICAgICBuYW1lPSdCdWlsZEFydGlmYWN0JywKKyAgICAgICAgKSwKKyAgICBdCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X3RhcmdldF9wYWNrYWdlX21hbmlmZXN0X3BhdGgucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X3RhcmdldF9wYWNrYWdlX21hbmlmZXN0X3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1OGYzMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDlfdGFyZ2V0X3BhY2thZ2VfbWFuaWZlc3RfcGF0aC5weQpAQCAtMCwwICsxLDE5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgorCisgICAgZGVwZW5kZW5jaWVzID0gWworICAgICAgICAoJ29ybScsICcwMDA4X3JlZmFjdG9yX2FydGlmYWN0X21vZGVscycpLAorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSd0YXJnZXQnLAorICAgICAgICAgICAgbmFtZT0ncGFja2FnZV9tYW5pZmVzdF9wYXRoJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQobnVsbD1UcnVlLCBtYXhfbGVuZ3RoPTUwMCksCisgICAgICAgICksCisgICAgXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9kZWxldGVfbGF5ZXJfc291cmNlX3JlZmVyZW5jZXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEwX2RlbGV0ZV9sYXllcl9zb3VyY2VfcmVmZXJlbmNlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjczODhlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9kZWxldGVfbGF5ZXJfc291cmNlX3JlZmVyZW5jZXMucHkKQEAgLTAsMCArMSwxMTggQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscworaW1wb3J0IGRqYW5nby51dGlscy50aW1lem9uZQorCisKK2NsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CisKKyAgICBkZXBlbmRlbmNpZXMgPSBbCisgICAgICAgICgnb3JtJywgJzAwMDlfdGFyZ2V0X3BhY2thZ2VfbWFuaWZlc3RfcGF0aCcpLAorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJVbmlxdWVUb2dldGhlcigKKyAgICAgICAgICAgIG5hbWU9J3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JywKKyAgICAgICAgICAgIHVuaXF1ZV90b2dldGhlcj1zZXQoW10pLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLlJlbW92ZUZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0ncmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknLAorICAgICAgICAgICAgbmFtZT0nbGF5ZXJfc291cmNlJywKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JywKKyAgICAgICAgICAgIG5hbWU9J3JlbGVhc2UnLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkRlbGV0ZU1vZGVsKAorICAgICAgICAgICAgbmFtZT0nSW1wb3J0ZWRMYXllclNvdXJjZScsCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuRGVsZXRlTW9kZWwoCisgICAgICAgICAgICBuYW1lPSdMYXllckluZGV4TGF5ZXJTb3VyY2UnLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkRlbGV0ZU1vZGVsKAorICAgICAgICAgICAgbmFtZT0nTG9jYWxMYXllclNvdXJjZScsCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuUmVtb3ZlRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdyZWNpcGUnLAorICAgICAgICAgICAgbmFtZT0nbGF5ZXJfc291cmNlJywKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J3JlY2lwZScsCisgICAgICAgICAgICBuYW1lPSd1cF9pZCcsCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2xheWVyJywKKyAgICAgICAgICAgIG5hbWU9J3VwX2RhdGUnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBudWxsPVRydWUpLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdsYXllcl92ZXJzaW9uJywKKyAgICAgICAgICAgIG5hbWU9J2xheWVyX3NvdXJjZScsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCwgY2hvaWNlcz1bKDAsICdsb2NhbCcpLCAoMSwgJ2xheWVyaW5kZXgnKSwgKDIsICdpbXBvcnRlZCcpLCAoMywgJ2J1aWxkJyldKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nbGF5ZXJfdmVyc2lvbicsCisgICAgICAgICAgICBuYW1lPSd1cF9kYXRlJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgbnVsbD1UcnVlKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlclVuaXF1ZVRvZ2V0aGVyKAorICAgICAgICAgICAgbmFtZT0nYnJhbmNoJywKKyAgICAgICAgICAgIHVuaXF1ZV90b2dldGhlcj1zZXQoW10pLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFsdGVyVW5pcXVlVG9nZXRoZXIoCisgICAgICAgICAgICBuYW1lPSdsYXllcicsCisgICAgICAgICAgICB1bmlxdWVfdG9nZXRoZXI9c2V0KFtdKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlclVuaXF1ZVRvZ2V0aGVyKAorICAgICAgICAgICAgbmFtZT0nbGF5ZXJfdmVyc2lvbicsCisgICAgICAgICAgICB1bmlxdWVfdG9nZXRoZXI9c2V0KFtdKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlclVuaXF1ZVRvZ2V0aGVyKAorICAgICAgICAgICAgbmFtZT0nbGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeScsCisgICAgICAgICAgICB1bmlxdWVfdG9nZXRoZXI9c2V0KFtdKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlclVuaXF1ZVRvZ2V0aGVyKAorICAgICAgICAgICAgbmFtZT0nbWFjaGluZScsCisgICAgICAgICAgICB1bmlxdWVfdG9nZXRoZXI9c2V0KFtdKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5EZWxldGVNb2RlbCgKKyAgICAgICAgICAgIG5hbWU9J1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5JywKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2JyYW5jaCcsCisgICAgICAgICAgICBuYW1lPSdsYXllcl9zb3VyY2UnLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLlJlbW92ZUZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnJhbmNoJywKKyAgICAgICAgICAgIG5hbWU9J3VwX2lkJywKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2xheWVyJywKKyAgICAgICAgICAgIG5hbWU9J2xheWVyX3NvdXJjZScsCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuUmVtb3ZlRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdsYXllcicsCisgICAgICAgICAgICBuYW1lPSd1cF9pZCcsCisgICAgICAgICksCisgICAgICAgIG1pZ3JhdGlvbnMuUmVtb3ZlRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdsYXllcl92ZXJzaW9uJywKKyAgICAgICAgICAgIG5hbWU9J3VwX2lkJywKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2xheWVydmVyc2lvbmRlcGVuZGVuY3knLAorICAgICAgICAgICAgbmFtZT0nbGF5ZXJfc291cmNlJywKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKKyAgICAgICAgICAgIG1vZGVsX25hbWU9J2xheWVydmVyc2lvbmRlcGVuZGVuY3knLAorICAgICAgICAgICAgbmFtZT0ndXBfaWQnLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLlJlbW92ZUZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nbWFjaGluZScsCisgICAgICAgICAgICBuYW1lPSdsYXllcl9zb3VyY2UnLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLlJlbW92ZUZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nbWFjaGluZScsCisgICAgICAgICAgICBuYW1lPSd1cF9pZCcsCisgICAgICAgICksCisgICAgXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMV9kZWxldGVfbGF5ZXJzb3VyY2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDExX2RlbGV0ZV9sYXllcnNvdXJjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTUwNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMV9kZWxldGVfbGF5ZXJzb3VyY2UucHkKQEAgLTAsMCArMSwxNyBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKKworICAgIGRlcGVuZGVuY2llcyA9IFsKKyAgICAgICAgKCdvcm0nLCAnMDAxMF9kZWxldGVfbGF5ZXJfc291cmNlX3JlZmVyZW5jZXMnKSwKKyAgICBdCisKKyAgICBvcGVyYXRpb25zID0gWworICAgICAgICBtaWdyYXRpb25zLkRlbGV0ZU1vZGVsKAorICAgICAgICAgICAgbmFtZT0nTGF5ZXJTb3VyY2UnLAorICAgICAgICApLAorICAgIF0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfdXNlX3JlbGVhc2VfaW5zdGVhZF9vZl91cF9icmFuY2gucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEyX3VzZV9yZWxlYXNlX2luc3RlYWRfb2ZfdXBfYnJhbmNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNmJiODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEyX3VzZV9yZWxlYXNlX2luc3RlYWRfb2ZfdXBfYnJhbmNoLnB5CkBAIC0wLDAgKzEsNjIgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscworZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCisKKworZGVmIGJyYW5jaF90b19yZWxlYXNlKGFwcHMsIHNjaGVtYV9lZGl0b3IpOgorICAgIExheWVyX1ZlcnNpb24gPSBhcHBzLmdldF9tb2RlbCgnb3JtJywgJ0xheWVyX1ZlcnNpb24nKQorICAgIFJlbGVhc2UgPSBhcHBzLmdldF9tb2RlbCgnb3JtJywgJ1JlbGVhc2UnKQorCisgICAgcHJpbnQoIkNvbnZlcnRpbmcgYWxsIGxheWVyIHZlcnNpb24gdXBfYnJhbmNoZXMgdG8gcmVsZWFzZXMiKQorICAgICMgRmluZCBhbGwgdGhlIGxheWVyIHZlcnNpb25zIHdoaWNoIGhhdmUgYW4gdXBicmFuY2ggYW5kIGNvbnZlcnQgdGhlbSB0bworICAgICMgdGhlIHJlbGVhc2UgdGhhdCB0aGV5J3JlIGZvci4KKyAgICBmb3IgbGF5ZXJfdmVyc2lvbiBpbiBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgUShyZWxlYXNlPU5vbmUpICYgflEodXBfYnJhbmNoPU5vbmUpKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBIRUFEIGFuZCBsb2NhbCBhcmUgZXF1aXZhbGVudAorICAgICAgICAgICAgaWYgIkhFQUQiIGluIGxheWVyX3ZlcnNpb24udXBfYnJhbmNoLm5hbWU6CisgICAgICAgICAgICAgICAgcmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5nZXQobmFtZT0ibG9jYWwiKQorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uY29tbWl0ID0gIkhFQUQiCisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5icmFuY2ggPSAiSEVBRCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5nZXQoCisgICAgICAgICAgICAgICAgICAgIG5hbWU9bGF5ZXJfdmVyc2lvbi51cF9icmFuY2gubmFtZSkKKworICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5yZWxlYXNlID0gcmVsZWFzZQorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5zYXZlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IHdvcmsgb3V0IGFuIGFwcHJvcHJpYXRlIHJlbGVhc2UgZm9yICVzICIKKyAgICAgICAgICAgICAgICAgICJ0aGUgdXBfYnJhbmNoIHdhcyAlcyAiCisgICAgICAgICAgICAgICAgICAidXNlciB0aGUgZGphbmdvIGFkbWluIGludGVyZmFjZSB0byBjb3JyZWN0IGl0IiAlCisgICAgICAgICAgICAgICAgICAobGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lLCBsYXllcl92ZXJzaW9uLnVwX2JyYW5jaC5uYW1lKSkKKyAgICAgICAgICAgIHByaW50KGUpCisKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKworY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKKworICAgIGRlcGVuZGVuY2llcyA9IFsKKyAgICAgICAgKCdvcm0nLCAnMDAxMV9kZWxldGVfbGF5ZXJzb3VyY2UnKSwKKyAgICBdCisKKyAgICBvcGVyYXRpb25zID0gWworICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nbGF5ZXJfdmVyc2lvbicsCisgICAgICAgICAgICBuYW1lPSdyZWxlYXNlJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5Gb3JlaWduS2V5KHRvPSdvcm0uUmVsZWFzZScsIGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgKSwKKyAgICAgICAgbWlncmF0aW9ucy5SdW5QeXRob24oYnJhbmNoX3RvX3JlbGVhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VfY29kZT1taWdyYXRpb25zLlJ1blB5dGhvbi5ub29wKSwKKworICAgICAgICBtaWdyYXRpb25zLlJlbW92ZUZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nbGF5ZXJfdmVyc2lvbicsCisgICAgICAgICAgICBuYW1lPSd1cF9icmFuY2gnLAorICAgICAgICApLAorCisgICAgICAgIG1pZ3JhdGlvbnMuRGVsZXRlTW9kZWwoCisgICAgICAgICAgICBuYW1lPSdCcmFuY2gnLAorICAgICAgICApLAorICAgIF0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfcmVjaXBlX3BhcnNlX3Byb2dyZXNzX2ZpZWxkcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfcmVjaXBlX3BhcnNlX3Byb2dyZXNzX2ZpZWxkcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVjOTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxM19yZWNpcGVfcGFyc2VfcHJvZ3Jlc3NfZmllbGRzLnB5CkBAIC0wLDAgKzEsMjQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CisKKyAgICBkZXBlbmRlbmNpZXMgPSBbCisgICAgICAgICgnb3JtJywgJzAwMTJfdXNlX3JlbGVhc2VfaW5zdGVhZF9vZl91cF9icmFuY2gnKSwKKyAgICBdCisKKyAgICBvcGVyYXRpb25zID0gWworICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnVpbGQnLAorICAgICAgICAgICAgbmFtZT0ncmVjaXBlc19wYXJzZWQnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnVpbGQnLAorICAgICAgICAgICAgbmFtZT0ncmVjaXBlc190b19wYXJzZScsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MSksCisgICAgICAgICksCisgICAgXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hbGxvd19lbXB0eV9idWlsZG5hbWUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE0X2FsbG93X2VtcHR5X2J1aWxkbmFtZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ5YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hbGxvd19lbXB0eV9idWlsZG5hbWUucHkKQEAgLTAsMCArMSwxOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKKworICAgIGRlcGVuZGVuY2llcyA9IFsKKyAgICAgICAgKCdvcm0nLCAnMDAxM19yZWNpcGVfcGFyc2VfcHJvZ3Jlc3NfZmllbGRzJyksCisgICAgXQorCisgICAgb3BlcmF0aW9ucyA9IFsKKyAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnVpbGQnLAorICAgICAgICAgICAgbmFtZT0nYnVpbGRfbmFtZScsCisgICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MTAwKSwKKyAgICAgICAgKSwKKyAgICBdCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE1X2xheWVyX2xvY2FsX3NvdXJjZV9kaXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE1X2xheWVyX2xvY2FsX3NvdXJjZV9kaXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzOWNkNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTVfbGF5ZXJfbG9jYWxfc291cmNlX2Rpci5weQpAQCAtMCwwICsxLDE5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgorCisgICAgZGVwZW5kZW5jaWVzID0gWworICAgICAgICAoJ29ybScsICcwMDE0X2FsbG93X2VtcHR5X2J1aWxkbmFtZScpLAorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdsYXllcicsCisgICAgICAgICAgICBuYW1lPSdsb2NhbF9zb3VyY2VfZGlyJywKKyAgICAgICAgICAgIGZpZWxkPW1vZGVscy5UZXh0RmllbGQobnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpLAorICAgICAgICApLAorICAgIF0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tb2RlbHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5CmluZGV4IDBiODNiOTkuLmE3ZGU1N2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tb2RlbHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21vZGVscy5weQpAQCAtMjEsOCArMjEsOCBAQAogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKIAotZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscywgSW50ZWdyaXR5RXJyb3IKLWZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgRiwgUSwgQXZnLCBNYXgsIFN1bQorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscywgSW50ZWdyaXR5RXJyb3IsIERhdGFFcnJvcgorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBGLCBRLCBTdW0sIENvdW50CiBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKIGZyb20gZGphbmdvLnV0aWxzLmVuY29kaW5nIGltcG9ydCBmb3JjZV9ieXRlcwogCkBAIC0zMiw5ICszMiwxMSBAQAogZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKIGltcG9ydCBkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMKIAotaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgaXRlcnRvb2xzCitmcm9tIHNpZ25hbCBpbXBvcnQgU0lHVVNSMQogCiBpbXBvcnQgbG9nZ2luZwogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQpAQCAtNzcsNyArNzksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvYmogPSBzZWxmLmNyZWF0ZSgqKnBhcmFtcykKICAgICAgICAgICAgIHJldHVybiBvYmosIFRydWUKLSAgICAgICAgZXhjZXB0IEludGVncml0eUVycm9yOgorICAgICAgICBleGNlcHQgKEludGVncml0eUVycm9yLCBEYXRhRXJyb3IpOgogICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldCgqKmxvb2t1cCksIEZhbHNlCkBAIC0xMDIsNyArMTA0LDcgQEAKIAogZGVmIEdpdFVSTEZpZWxkKCoqa3dhcmdzKToKICAgICByID0gbW9kZWxzLlVSTEZpZWxkKCoqa3dhcmdzKQotICAgIGZvciBpIGluIHhyYW5nZShsZW4oci52YWxpZGF0b3JzKSk6CisgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHIudmFsaWRhdG9ycykpOgogICAgICAgICBpZiBpc2luc3RhbmNlKHIudmFsaWRhdG9yc1tpXSwgdmFsaWRhdG9ycy5VUkxWYWxpZGF0b3IpOgogICAgICAgICAgICAgci52YWxpZGF0b3JzW2ldID0gR2l0VVJMVmFsaWRhdG9yKCkKICAgICByZXR1cm4gcgpAQCAtMTE2LDM5ICsxMTgsNDggQEAKICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiU2V0dGluZyAlcyA9ICVzIiAlIChzZWxmLm5hbWUsIHNlbGYudmFsdWUpCiAKKwogY2xhc3MgUHJvamVjdE1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgogICAgIGRlZiBjcmVhdGVfcHJvamVjdChzZWxmLCBuYW1lLCByZWxlYXNlKToKICAgICAgICAgaWYgcmVsZWFzZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IHJlbGVhc2UuYml0YmFrZV92ZXJzaW9uLCByZWxlYXNlID0gcmVsZWFzZSkKKyAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZT1uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249cmVsZWFzZS5iaXRiYWtlX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2U9cmVsZWFzZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IE5vbmUsIHJlbGVhc2UgPSBOb25lKQorICAgICAgICAgICAgcHJqID0gc2VsZi5tb2RlbChuYW1lPW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyc2lvbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlPU5vbmUpCiAKICAgICAgICAgcHJqLnNhdmUoKQogCi0gICAgICAgIGZvciBkZWZhdWx0Y29uZiBpbiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lX19zdGFydHN3aXRoPSJERUZDT05GXyIpOgorICAgICAgICBmb3IgZGVmYXVsdGNvbmYgaW4gVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICAgICAgbmFtZV9fc3RhcnRzd2l0aD0iREVGQ09ORl8iKToKICAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0Y29uZi5uYW1lWzg6XQotICAgICAgICAgICAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKCBwcm9qZWN0ID0gcHJqLAotICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLAotICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdGNvbmYudmFsdWUpCisgICAgICAgICAgICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5jcmVhdGUocHJvamVjdD1wcmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPWRlZmF1bHRjb25mLnZhbHVlKQogCiAgICAgICAgIGlmIHJlbGVhc2UgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBwcmoKIAogICAgICAgICBmb3IgcmRsIGluIHJlbGVhc2UucmVsZWFzZWRlZmF1bHRsYXllcl9zZXQuYWxsKCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbHYgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGxheWVyX19uYW1lID0gcmRsLmxheWVyX25hbWUsIHVwX2JyYW5jaF9fbmFtZSA9IHJlbGVhc2UuYnJhbmNoX25hbWUpWzBdLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkocHJqKVswXQotICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmNyZWF0ZSggcHJvamVjdCA9IHByaiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyY29tbWl0ID0gbHYsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9IEZhbHNlICkKLSAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICMgd2UgbWF5IGhhdmUgbm8gdmFsaWQgbGF5ZXIgdmVyc2lvbiBvYmplY3RzLCBhbmQgdGhhdCdzIG9rCi0gICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbHYgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgIGxheWVyX19uYW1lPXJkbC5sYXllcl9uYW1lLAorICAgICAgICAgICAgICAgIHJlbGVhc2U9cmVsZWFzZSkuZmlyc3QoKQorCisgICAgICAgICAgICBpZiBsdjoKKyAgICAgICAgICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5jcmVhdGUocHJvamVjdD1wcmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyY29tbWl0PWx2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbD1GYWxzZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkRlZmF1bHQgcHJvamVjdCBsYXllciAlcyBub3QgZm91bmQiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGwubGF5ZXJfbmFtZSkKIAogICAgICAgICByZXR1cm4gcHJqCiAKICAgICAjIHJldHVybiBzaW5nbGUgb2JqZWN0IHdpdGggaXNfZGVmYXVsdCA9IFRydWUKICAgICBkZWYgZ2V0X29yX2NyZWF0ZV9kZWZhdWx0X3Byb2plY3Qoc2VsZik6Ci0gICAgICAgIHByb2plY3RzID0gc3VwZXIoUHJvamVjdE1hbmFnZXIsIHNlbGYpLmZpbHRlcihpc19kZWZhdWx0ID0gVHJ1ZSkKKyAgICAgICAgcHJvamVjdHMgPSBzdXBlcihQcm9qZWN0TWFuYWdlciwgc2VsZikuZmlsdGVyKGlzX2RlZmF1bHQ9VHJ1ZSkKIAogICAgICAgICBpZiBsZW4ocHJvamVjdHMpID4gMToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW5jb25zaXN0ZW50IHByb2plY3QgZGF0YTogbXVsdGlwbGUgJyArCkBAIC0xNTYsNyArMTY3LDggQEAKICAgICAgICAgZWxpZiBsZW4ocHJvamVjdHMpIDwgMToKICAgICAgICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICAgJ25hbWUnOiAnQ29tbWFuZCBsaW5lIGJ1aWxkcycsCi0gICAgICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogJ1Byb2plY3QgZm9yIGJ1aWxkcyBzdGFydGVkIG91dHNpZGUgVG9hc3RlcicsCisgICAgICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICAgICAgICAnUHJvamVjdCBmb3IgYnVpbGRzIHN0YXJ0ZWQgb3V0c2lkZSBUb2FzdGVyJywKICAgICAgICAgICAgICAgICAnaXNfZGVmYXVsdCc6IFRydWUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlKCoqb3B0aW9ucykKQEAgLTI2OSw3ICsyODEsNyBAQAogICAgICAgICAjIGd1YXJkIG9uIHJlbGVhc2UsIGFzIGl0IGNhbiBiZSBudWxsCiAgICAgICAgIGlmIHNlbGYucmVsZWFzZToKICAgICAgICAgICAgIHF1ZXJ5c2V0ID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcigKLSAgICAgICAgICAgICAgICAoUSh1cF9icmFuY2hfX25hbWU9c2VsZi5yZWxlYXNlLmJyYW5jaF9uYW1lKSAmCisgICAgICAgICAgICAgICAgKFEocmVsZWFzZT1zZWxmLnJlbGVhc2UpICYKICAgICAgICAgICAgICAgICAgUShidWlsZD1Ob25lKSAmCiAgICAgICAgICAgICAgICAgIFEocHJvamVjdD1Ob25lKSkgfAogICAgICAgICAgICAgICAgICBRKHByb2plY3Q9c2VsZikpCkBAIC0zMzUsNyArMzQ3LDE1IEBACiAgICAgICAgICAgICBmb3IgbCBpbiBzZWxmLnByb2plY3RsYXllcl9zZXQuYWxsKCkub3JkZXJfYnkoInBrIik6CiAgICAgICAgICAgICAgICAgY29tbWl0ID0gbC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpCiAgICAgICAgICAgICAgICAgcHJpbnQoImlpIEJ1aWxkaW5nIGxheWVyICIsIGwubGF5ZXJjb21taXQubGF5ZXIubmFtZSwgIiBhdCB2Y3MgcG9pbnQgIiwgY29tbWl0KQotICAgICAgICAgICAgICAgIEJSTGF5ZXIub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWUgPSBsLmxheWVyY29tbWl0LmxheWVyLm5hbWUsIGdpdHVybCA9IGwubGF5ZXJjb21taXQubGF5ZXIudmNzX3VybCwgY29tbWl0ID0gY29tbWl0LCBkaXJwYXRoID0gbC5sYXllcmNvbW1pdC5kaXJwYXRoLCBsYXllcl92ZXJzaW9uPWwubGF5ZXJjb21taXQpCisgICAgICAgICAgICAgICAgQlJMYXllci5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgcmVxPWJyLAorICAgICAgICAgICAgICAgICAgICBuYW1lPWwubGF5ZXJjb21taXQubGF5ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZ2l0dXJsPWwubGF5ZXJjb21taXQubGF5ZXIudmNzX3VybCwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0PWNvbW1pdCwKKyAgICAgICAgICAgICAgICAgICAgZGlycGF0aD1sLmxheWVyY29tbWl0LmRpcnBhdGgsCisgICAgICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb249bC5sYXllcmNvbW1pdCwKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxfc291cmNlX2Rpcj1sLmxheWVyY29tbWl0LmxheWVyLmxvY2FsX3NvdXJjZV9kaXIKKyAgICAgICAgICAgICAgICApCiAKICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9RVUVVRUQKICAgICAgICAgICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCkBAIC0zNTcsNiArMzc3LDggQEAKICAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICAgICAgc2lnbmFsX3J1bmJ1aWxkcygpCisKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICMgcmV2ZXJ0IHRoZSBidWlsZCByZXF1ZXN0IGNyZWF0aW9uIHNpbmNlIHdlJ3JlIG5vdCBkb25lIGNsZWFubHkKICAgICAgICAgICAgIGJyLmRlbGV0ZSgpCkBAIC0zODYsOSArNDA4LDE1IEBACiAgICAgY29tcGxldGVkX29uID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQogICAgIG91dGNvbWUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9QlVJTERfT1VUQ09NRSwgZGVmYXVsdD1JTl9QUk9HUkVTUykKICAgICBjb29rZXJfbG9nX3BhdGggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAwKQotICAgIGJ1aWxkX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIGJ1aWxkX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBkZWZhdWx0PScnKQogICAgIGJpdGJha2VfdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCkKIAorICAgICMgbnVtYmVyIG9mIHJlY2lwZXMgdG8gcGFyc2UgZm9yIHRoaXMgYnVpbGQKKyAgICByZWNpcGVzX3RvX3BhcnNlID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTEpCisKKyAgICAjIG51bWJlciBvZiByZWNpcGVzIHBhcnNlZCBzbyBmYXIgZm9yIHRoaXMgYnVpbGQKKyAgICByZWNpcGVzX3BhcnNlZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQorCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBnZXRfcmVjZW50KHByb2plY3Q9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtNDE1LDE0ICs0NDMsMzAgQEAKICAgICAgICAgIyB0byBzaG93IGJ1aWxkIHByb2dyZXNzIGluIG1yYl9zZWN0aW9uLmh0bWwKICAgICAgICAgZm9yIGJ1aWxkIGluIHJlY2VudF9idWlsZHM6CiAgICAgICAgICAgICBidWlsZC5wZXJjZW50RG9uZSA9IGJ1aWxkLmNvbXBsZXRlcGVyKCkKKyAgICAgICAgICAgIGJ1aWxkLm91dGNvbWVUZXh0ID0gYnVpbGQuZ2V0X291dGNvbWVfdGV4dCgpCiAKICAgICAgICAgcmV0dXJuIHJlY2VudF9idWlsZHMKIAorICAgIGRlZiBzdGFydGVkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQXMgYnVpbGQgdmFyaWFibGVzIGFyZSBvbmx5IGFkZGVkIGZvciBhIGJ1aWxkIHdoZW4gaXRzIEJ1aWxkU3RhcnRlZCBldmVudAorICAgICAgICBpcyByZWNlaXZlZCwgYSBidWlsZCB3aXRoIG5vIGJ1aWxkIHZhcmlhYmxlcyBpcyBjb3VudGVkIGFzCisgICAgICAgICJpbiBwcmVwYXJhdGlvbiIgYW5kIG5vdCBwcm9wZXJseSBzdGFydGVkIHlldC4gVGhpcyBtZXRob2QKKyAgICAgICAgd2lsbCByZXR1cm4gRmFsc2UgaWYgYSBidWlsZCBoYXMgbm8gYnVpbGQgdmFyaWFibGVzIChpdCBuZXZlciBwcm9wZXJseQorICAgICAgICBzdGFydGVkKSwgb3IgVHJ1ZSBvdGhlcndpc2UuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgdGhlIGZhY3QgdGhhdCB3ZSBkb24ndAorICAgICAgICBoYXZlIGEgZmluZS1ncmFpbmVkIHN0YXRlIHZhcmlhYmxlIG9uIGEgYnVpbGQgd2hpY2ggd291bGQgYWxsb3cgdXMKKyAgICAgICAgdG8gcmVjb3JkICJpbiBwcm9ncmVzcyIgKEJ1aWxkU3RhcnRlZCByZWNlaXZlZCkgdnMuICJpbiBwcmVwYXJhdGlvbiIuCisgICAgICAgICIiIgorICAgICAgICB2YXJpYWJsZXMgPSBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZD1zZWxmKQorICAgICAgICByZXR1cm4gbGVuKHZhcmlhYmxlcykgPiAwCisKICAgICBkZWYgY29tcGxldGVwZXIoc2VsZik6CiAgICAgICAgIHRmID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IHNlbGYpCiAgICAgICAgIHRmYyA9IHRmLmNvdW50KCkKICAgICAgICAgaWYgdGZjID4gMDoKLSAgICAgICAgICAgIGNvbXBsZXRlcGVyID0gdGYuZXhjbHVkZShvcmRlcl9faXNudWxsPVRydWUpLmNvdW50KCkqMTAwL3RmYworICAgICAgICAgICAgY29tcGxldGVwZXIgPSB0Zi5leGNsdWRlKG9yZGVyX19pc251bGw9VHJ1ZSkuY291bnQoKSoxMDAgLy8gdGZjCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb21wbGV0ZXBlciA9IDAKICAgICAgICAgcmV0dXJuIGNvbXBsZXRlcGVyCkBAIC00MzQsNTggKzQ3OCw2MiBAQAogICAgICAgICAgICAgZXRhICs9ICgoZXRhIC0gc2VsZi5zdGFydGVkX29uKSooMTAwLWNvbXBsZXRlcGVyKSkvY29tcGxldGVwZXIKICAgICAgICAgcmV0dXJuIGV0YQogCisgICAgZGVmIGhhc19pbWFnZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIFRydWUgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSB0YXJnZXRzIGZvciB0aGlzIGJ1aWxkIGhhcyBhbgorICAgICAgICBpbWFnZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBpdCwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkX2lkPXNlbGYuaWQpCisgICAgICAgIGhhc19pbWFnZXMgPSBGYWxzZQorICAgICAgICBmb3IgdGFyZ2V0IGluIHRhcmdldHM6CisgICAgICAgICAgICBpZiB0YXJnZXQuaGFzX2ltYWdlcygpOgorICAgICAgICAgICAgICAgIGhhc19pbWFnZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGhhc19pbWFnZXMKKworICAgIGRlZiBoYXNfaW1hZ2VfcmVjaXBlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgVHJ1ZSBpZiBhIGJ1aWxkIGhhcyBhbnkgdGFyZ2V0cyB3aGljaCB3ZXJlIGJ1aWx0IGZyb20KKyAgICAgICAgaW1hZ2UgcmVjaXBlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGltYWdlX3JlY2lwZXMgPSBzZWxmLmdldF9pbWFnZV9yZWNpcGVzKCkKKyAgICAgICAgcmV0dXJuIGxlbihpbWFnZV9yZWNpcGVzKSA+IDAKKwogICAgIGRlZiBnZXRfaW1hZ2VfZmlsZV9leHRlbnNpb25zKHNlbGYpOgogICAgICAgICAiIiIKLSAgICAgICAgR2V0IGxpc3Qgb2YgZmlsZSBuYW1lIGV4dGVuc2lvbnMgZm9yIGltYWdlcyBwcm9kdWNlZCBieSB0aGlzIGJ1aWxkCisgICAgICAgIEdldCBzdHJpbmcgb2YgZmlsZSBuYW1lIGV4dGVuc2lvbnMgZm9yIGltYWdlcyBwcm9kdWNlZCBieSB0aGlzIGJ1aWxkOworICAgICAgICBub3RlIHRoYXQgdGhpcyBpcyB0aGUgYWN0dWFsIGxpc3Qgb2YgZXh0ZW5zaW9ucyBzdG9yZWQgb24gVGFyZ2V0IG9iamVjdHMKKyAgICAgICAgZm9yIHRoaXMgYnVpbGQsIGFuZCBub3QgdGhlIHZhbHVlIG9mIElNQUdFX0ZTVFlQRVMuCisKKyAgICAgICAgUmV0dXJucyBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLCBlLmcuICJ2bWRrLCBleHQ0IgogICAgICAgICAiIiIKLSAgICAgICAgdGFyZ2V0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZF9pZCA9IHNlbGYuaWQpCiAgICAgICAgIGV4dGVuc2lvbnMgPSBbXQogCi0gICAgICAgICMgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0IGZpbGUgcGF0aCBmb3IgYnVpbGRpbmcgZXh0ZW5zaW9uIHN0cmluZwotICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZSgnXC4oW15cLl0rPykkJykKLQorICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkX2lkID0gc2VsZi5pZCkKICAgICAgICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgotICAgICAgICAgICAgaWYgKG5vdCB0YXJnZXQuaXNfaW1hZ2UpOgorICAgICAgICAgICAgaWYgbm90IHRhcmdldC5pc19pbWFnZToKICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICB0YXJnZXRfaW1hZ2VfZmlsZXMgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWQgPSB0YXJnZXQuaWQpCisgICAgICAgICAgICB0YXJnZXRfaW1hZ2VfZmlsZXMgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICB0YXJnZXRfaWQ9dGFyZ2V0LmlkKQogCiAgICAgICAgICAgICBmb3IgdGFyZ2V0X2ltYWdlX2ZpbGUgaW4gdGFyZ2V0X2ltYWdlX2ZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGFyZ2V0X2ltYWdlX2ZpbGUuZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICcnCisgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5hcHBlbmQodGFyZ2V0X2ltYWdlX2ZpbGUuc3VmZml4KQogCi0gICAgICAgICAgICAgICAgY29udGludWVfbWF0Y2hpbmcgPSBUcnVlCi0KLSAgICAgICAgICAgICAgICAjIGluY3JlbWVudGFsbHkgZXh0cmFjdCB0aGUgc3VmZml4IGZyb20gdGhlIGZpbGUgcGF0aCwKLSAgICAgICAgICAgICAgICAjIGNoZWNraW5nIGl0IGFnYWluc3QgdGhlIGxpc3Qgb2YgdmFsaWQgc3VmZml4ZXMgYXQgZWFjaAotICAgICAgICAgICAgICAgICMgc3RlcDsgaWYgdGhlIHBhdGggaXMgc3RyaXBwZWQgb2YgYWxsIHBvdGVudGlhbCBzdWZmaXgKLSAgICAgICAgICAgICAgICAjIHBhcnRzIHdpdGhvdXQgbWF0Y2hpbmcgYSB2YWxpZCBzdWZmaXgsIHRoaXMgcmV0dXJucyBhbGwKLSAgICAgICAgICAgICAgICAjIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGZpcnN0ICcuJyBpbiB0aGUgZmlsZSBuYW1lCi0gICAgICAgICAgICAgICAgd2hpbGUgY29udGludWVfbWF0Y2hpbmc6Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBwYXR0ZXJuLnNlYXJjaChmaWxlX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgTm9uZSA9PSBtYXRjaGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVfbWF0Y2hpbmcgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gcmUuc3ViKCdeXC4nLCAnJywgc3VmZml4KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG1hdGNoZXMuZ3JvdXAoMSkgKyBzdWZmaXgKLQotICAgICAgICAgICAgICAgICAgICBpZiBzdWZmaXggaW4gVGFyZ2V0X0ltYWdlX0ZpbGUuU1VGRklYRVM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZV9tYXRjaGluZyA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgIyByZWR1Y2UgdGhlIGZpbGUgbmFtZSBhbmQgdHJ5IHRvIGZpbmQgdGhlIG5leHQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgc2VnbWVudCBmcm9tIHRoZSBwYXRoIHdoaWNoIG1pZ2h0IGJlIHBhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgdGhlIHN1ZmZpeAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gcmUuc3ViKCcuJyArIG1hdGNoZXMuZ3JvdXAoMSksICcnLCBmaWxlX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSAnLicgKyBzdWZmaXgKLQotICAgICAgICAgICAgICAgIGlmIG5vdCBzdWZmaXggaW4gZXh0ZW5zaW9uczoKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5hcHBlbmQoc3VmZml4KQorICAgICAgICBleHRlbnNpb25zID0gbGlzdChzZXQoZXh0ZW5zaW9ucykpCisgICAgICAgIGV4dGVuc2lvbnMuc29ydCgpCiAKICAgICAgICAgcmV0dXJuICcsICcuam9pbihleHRlbnNpb25zKQogCisgICAgZGVmIGdldF9pbWFnZV9mc3R5cGVzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHRoZSBJTUFHRV9GU1RZUEVTIHZhcmlhYmxlIHZhbHVlIGZvciB0aGlzIGJ1aWxkIGFzIGEgZGUtZHVwbGljYXRlZAorICAgICAgICBsaXN0IG9mIGltYWdlIGZpbGUgc3VmZml4ZXMuCisgICAgICAgICIiIgorICAgICAgICBpbWFnZV9mc3R5cGVzID0gVmFyaWFibGUub2JqZWN0cy5nZXQoCisgICAgICAgICAgICBidWlsZD1zZWxmLCB2YXJpYWJsZV9uYW1lPSdJTUFHRV9GU1RZUEVTJykudmFyaWFibGVfdmFsdWUKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2V0KHJlLnNwbGl0KHInIHsxLH0nLCBpbWFnZV9mc3R5cGVzKSkpCisKICAgICBkZWYgZ2V0X3NvcnRlZF90YXJnZXRfbGlzdChzZWxmKToKICAgICAgICAgdGd0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZF9pZCA9IHNlbGYuaWQpLm9yZGVyX2J5KCAndGFyZ2V0JyApOwogICAgICAgICByZXR1cm4oIHRndHMgKTsKQEAgLTU3Niw1MCArNjI0LDcwIEBACiAKICAgICAgICAgcmV0dXJuIHRhcmdldF9sYWJlbHMKIAotICAgIGRlZiBnZXRfY3VycmVudF9zdGF0dXMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBnZXQgdGhlIHN0YXR1cyBzdHJpbmcgZnJvbSB0aGUgYnVpbGQgcmVxdWVzdCBpZiB0aGUgYnVpbGQKLSAgICAgICAgaGFzIG9uZSwgb3IgdGhlIHRleHQgZm9yIHRoZSBidWlsZCBvdXRjb21lIGlmIGl0IGRvZXNuJ3QKLSAgICAgICAgIiIiCi0KLSAgICAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0Ci0KLSAgICAgICAgYnVpbGRfcmVxdWVzdCA9IE5vbmUKKyAgICBkZWYgZ2V0X2J1aWxkcmVxdWVzdChzZWxmKToKKyAgICAgICAgYnVpbGRyZXF1ZXN0ID0gTm9uZQogICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdidWlsZHJlcXVlc3QnKToKLSAgICAgICAgICAgIGJ1aWxkX3JlcXVlc3QgPSBzZWxmLmJ1aWxkcmVxdWVzdAorICAgICAgICAgICAgYnVpbGRyZXF1ZXN0ID0gc2VsZi5idWlsZHJlcXVlc3QKKyAgICAgICAgcmV0dXJuIGJ1aWxkcmVxdWVzdAogCi0gICAgICAgIGlmIChidWlsZF9yZXF1ZXN0Ci0gICAgICAgICAgICAgICAgYW5kIGJ1aWxkX3JlcXVlc3Quc3RhdGUgIT0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTCi0gICAgICAgICAgICAgICAgYW5kIHNlbGYub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUyk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5idWlsZHJlcXVlc3QuZ2V0X3N0YXRlX2Rpc3BsYXkoKQorICAgIGRlZiBpc19xdWV1ZWQoc2VsZik6CisgICAgICAgIGZyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdAorICAgICAgICBidWlsZHJlcXVlc3QgPSBzZWxmLmdldF9idWlsZHJlcXVlc3QoKQorICAgICAgICBpZiBidWlsZHJlcXVlc3Q6CisgICAgICAgICAgICByZXR1cm4gYnVpbGRyZXF1ZXN0LnN0YXRlID09IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVECisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19jYW5jZWxsaW5nKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QKKyAgICAgICAgYnVpbGRyZXF1ZXN0ID0gc2VsZi5nZXRfYnVpbGRyZXF1ZXN0KCkKKyAgICAgICAgaWYgYnVpbGRyZXF1ZXN0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUyBhbmQgXAorICAgICAgICAgICAgICAgIGJ1aWxkcmVxdWVzdC5zdGF0ZSA9PSBCdWlsZFJlcXVlc3QuUkVRX0NBTkNFTExJTkcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX3BhcnNpbmcoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUcnVlIGlmIHRoZSBidWlsZCBpcyBzdGlsbCBwYXJzaW5nIHJlY2lwZXMKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLm91dGNvbWUgPT0gQnVpbGQuSU5fUFJPR1JFU1MgYW5kIFwKKyAgICAgICAgICAgIHNlbGYucmVjaXBlc19wYXJzZWQgPCBzZWxmLnJlY2lwZXNfdG9fcGFyc2UKKworICAgIGRlZiBpc19zdGFydGluZyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRydWUgaWYgdGhlIGJ1aWxkIGhhcyBubyBjb21wbGV0ZWQgdGFza3MgeWV0IGFuZCBpcyBzdGlsbCBqdXN0IHN0YXJ0aW5nCisgICAgICAgIHRhc2tzLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgbWVjaGFuaXNtIGZvciB0ZXN0aW5nIHdoZXRoZXIgYSBUYXNrIGlzICJkb25lIiBpcyB3aGV0aGVyCisgICAgICAgIGl0cyBvcmRlciBmaWVsZCBpcyBzZXQsIGFzIHBlciB0aGUgY29tcGxldGVwZXIoKSBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5vdXRjb21lID09IEJ1aWxkLklOX1BST0dSRVNTIGFuZCBcCisgICAgICAgICAgICBzZWxmLnRhc2tfYnVpbGQuZmlsdGVyKG9yZGVyX19pc251bGw9RmFsc2UpLmNvdW50KCkgPT0gMAorCisgICAgZGVmIGdldF9zdGF0ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgc3RhdGUgb2YgdGhlIGJ1aWxkOyBvbmUgb2YgJ1N1Y2NlZWRlZCcsICdGYWlsZWQnLCAnSW4gUHJvZ3Jlc3MnLAorICAgICAgICAnQ2FuY2VsbGVkJyAoQnVpbGQgb3V0Y29tZXMpOyBvciAnUXVldWVkJywgJ0NhbmNlbGxpbmcnIChzdGF0ZXMKKyAgICAgICAgZGVwZW5kZW50IG9uIHRoZSBCdWlsZFJlcXVlc3Qgc3RhdGUpLgorCisgICAgICAgIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBCdWlsZFJlcXVlc3Qgc3RhdGVzIGFzIHdlbGwKKyAgICAgICAgYXMgQnVpbGQgc3RhdGVzLCBidXQgcmVhbGx5IHdlIGp1c3Qgd2FudCB0byBrbm93IHRoZSBzdGF0ZSBvZiB0aGUgYnVpbGQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmlzX2NhbmNlbGxpbmcoKToKKyAgICAgICAgICAgIHJldHVybiAnQ2FuY2VsbGluZyc7CisgICAgICAgIGVsaWYgc2VsZi5pc19xdWV1ZWQoKToKKyAgICAgICAgICAgIHJldHVybiAnUXVldWVkJworICAgICAgICBlbGlmIHNlbGYuaXNfcGFyc2luZygpOgorICAgICAgICAgICAgcmV0dXJuICdQYXJzaW5nJworICAgICAgICBlbGlmIHNlbGYuaXNfc3RhcnRpbmcoKToKKyAgICAgICAgICAgIHJldHVybiAnU3RhcnRpbmcnCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3V0Y29tZV90ZXh0KCkKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVkICVzICVzIiAlIChzZWxmLmlkLCBzZWxmLnByb2plY3QsICIsIi5qb2luKFt0LnRhcmdldCBmb3IgdCBpbiBzZWxmLnRhcmdldF9zZXQuYWxsKCldKSkKIAotCi0jIGFuIEFydGlmYWN0IGlzIGFueXRoaW5nIHRoYXQgcmVzdWx0cyBmcm9tIGEgQnVpbGQsIGFuZCBtYXkgYmUgb2YgaW50ZXJlc3QgdG8gdGhlIHVzZXIsIGFuZCBpcyBub3Qgc3RvcmVkIGVsc2V3aGVyZQotY2xhc3MgQnVpbGRBcnRpZmFjdChtb2RlbHMuTW9kZWwpOgotICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQpCi0gICAgZmlsZV9uYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQoKQotICAgIGZpbGVfc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQotCi0gICAgZGVmIGdldF9sb2NhbF9maWxlX25hbWUoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlcGxveWRpciA9IFZhcmlhYmxlLm9iamVjdHMuZ2V0KGJ1aWxkID0gc2VsZi5idWlsZCwgdmFyaWFibGVfbmFtZT0iREVQTE9ZX0RJUiIpLnZhcmlhYmxlX3ZhbHVlCi0gICAgICAgICAgICByZXR1cm4gIHNlbGYuZmlsZV9uYW1lW2xlbihkZXBsb3lkaXIpKzE6XQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByYWlzZQotCi0gICAgICAgIHJldHVybiBzZWxmLmZpbGVfbmFtZQotCi0gICAgZGVmIGdldF9iYXNlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5maWxlX25hbWUpCi0KLSAgICBkZWYgaXNfYXZhaWxhYmxlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5idWlsZC5idWlsZHJlcXVlc3QuZW52aXJvbm1lbnQuaGFzX2FydGlmYWN0KHNlbGYuZmlsZV9uYW1lKQotCiBjbGFzcyBQcm9qZWN0VGFyZ2V0KG1vZGVscy5Nb2RlbCk6CiAgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KFByb2plY3QpCiAgICAgdGFyZ2V0ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKQEAgLTYzMyw2ICs3MDEsNyBAQAogICAgIGlzX2ltYWdlID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0ID0gRmFsc2UpCiAgICAgaW1hZ2Vfc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQogICAgIGxpY2Vuc2VfbWFuaWZlc3RfcGF0aCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MDAsIG51bGw9VHJ1ZSkKKyAgICBwYWNrYWdlX21hbmlmZXN0X3BhdGggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAwLCBudWxsPVRydWUpCiAKICAgICBkZWYgcGFja2FnZV9jb3VudChzZWxmKToKICAgICAgICAgcmV0dXJuIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0PXNlbGYuaWQpLmNvdW50KCkKQEAgLTY0MCwxNCArNzA5LDE4MCBAQAogICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0CiAKKyAgICBkZWYgZ2V0X3NpbWlsYXJfdGFyZ2V0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0YXJnZXQgc2ZvciB0aGUgc2FtZSBtYWNoaW5lLCB0YXNrIGFuZCB0YXJnZXQgbmFtZQorICAgICAgICAoZS5nLiAnY29yZS1pbWFnZS1taW5pbWFsJykgZnJvbSBhIHN1Y2Nlc3NmdWwgYnVpbGQgZm9yIHRoaXMgcHJvamVjdAorICAgICAgICAoYnV0IGV4Y2x1ZGluZyB0aGlzIHRhcmdldCkuCisKKyAgICAgICAgTm90ZSB0aGF0IHdlIG9ubHkgbG9vayBmb3IgdGFyZ2V0cyBidWlsdCBieSB0aGlzIHByb2plY3QgYmVjYXVzZQorICAgICAgICBwcm9qZWN0cyBjYW4gaGF2ZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgZnJvbSBlYWNoIG90aGVyLCBhbmQgcHV0CisgICAgICAgIHRoZWlyIGFydGlmYWN0cyBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuCisKKyAgICAgICAgVGhlIHBvc3NpYmlsaXR5IG9mIGVycm9yIHdoZW4gcmV0cmlldmluZyBjYW5kaWRhdGUgdGFyZ2V0cworICAgICAgICBpcyBtaW5pbWlzZWQgYnkgdGhlIGZhY3QgdGhhdCBiaXRiYWtlIHdpbGwgcmVidWlsZCBhcnRpZmFjdHMgaWYgTUFDSElORQorICAgICAgICAob3IgdmFyaW91cyBvdGhlciB2YXJpYWJsZXMpIGNoYW5nZS4gSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBubyBuZWVkIHRvCisgICAgICAgIGNsb25lIGFydGlmYWN0cyBmcm9tIGFub3RoZXIgdGFyZ2V0LCBhcyB0aG9zZSBhcnRpZmFjdHMgd2lsbCBoYXZlCisgICAgICAgIGJlZW4gcmUtZ2VuZXJhdGVkIGZvciB0aGlzIHRhcmdldCBhbnl3YXkuCisgICAgICAgICIiIgorICAgICAgICBxdWVyeSA9IH5RKHBrPXNlbGYucGspICYgXAorICAgICAgICAgICAgUSh0YXJnZXQ9c2VsZi50YXJnZXQpICYgXAorICAgICAgICAgICAgUShidWlsZF9fbWFjaGluZT1zZWxmLmJ1aWxkLm1hY2hpbmUpICYgXAorICAgICAgICAgICAgUShidWlsZF9fb3V0Y29tZT1CdWlsZC5TVUNDRUVERUQpICYgXAorICAgICAgICAgICAgUShidWlsZF9fcHJvamVjdD1zZWxmLmJ1aWxkLnByb2plY3QpCisKKyAgICAgICAgcmV0dXJuIFRhcmdldC5vYmplY3RzLmZpbHRlcihxdWVyeSkKKworICAgIGRlZiBnZXRfc2ltaWxhcl90YXJnZXRfd2l0aF9pbWFnZV9maWxlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgbW9zdCByZWNlbnQgc2ltaWxhciB0YXJnZXQgd2l0aCBUYXJnZXRfSW1hZ2VfRmlsZXMgYXNzb2NpYXRlZAorICAgICAgICB3aXRoIGl0LCBmb3IgdGhlIHB1cnBvc2Ugb2YgY2xvbmluZyB0aG9zZSBmaWxlcyBvbnRvIHRoaXMgdGFyZ2V0LgorICAgICAgICAiIiIKKyAgICAgICAgc2ltaWxhcl90YXJnZXQgPSBOb25lCisKKyAgICAgICAgY2FuZGlkYXRlcyA9IHNlbGYuZ2V0X3NpbWlsYXJfdGFyZ2V0cygpCisgICAgICAgIGlmIGNhbmRpZGF0ZXMuY291bnQoKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHNpbWlsYXJfdGFyZ2V0CisKKyAgICAgICAgdGFza19zdWJxdWVyeSA9IFEodGFzaz1zZWxmLnRhc2spCisKKyAgICAgICAgIyB3ZSBjYW4gbG9vayBmb3IgYSAnYnVpbGQnIHRhc2sgaWYgdGhpcyB0YXNrIGlzIGEgJ3BvcHVsYXRlX3Nka19leHQnCisgICAgICAgICMgdGFzaywgYXMgdGhlIGxhdHRlciBhbHNvIGNyZWF0ZXMgaW1hZ2VzOyBhbmQgdmljZSB2ZXJzYTsgbm90ZSB0aGF0CisgICAgICAgICMgJ2J1aWxkJyB0YXJnZXRzIGNhbiBoYXZlIHRoZWlyIHRhc2sgc2V0IHRvICcnOworICAgICAgICAjIGFsc28gbm90ZSB0aGF0ICdwb3B1bGF0ZV9zZGsnIGRvZXMgbm90IHByb2R1Y2UgaW1hZ2UgZmlsZXMKKyAgICAgICAgaW1hZ2VfdGFza3MgPSBbCisgICAgICAgICAgICAnJywgIyBha2EgJ2J1aWxkJworICAgICAgICAgICAgJ2J1aWxkJywKKyAgICAgICAgICAgICdpbWFnZScsCisgICAgICAgICAgICAncG9wdWxhdGVfc2RrX2V4dCcKKyAgICAgICAgXQorICAgICAgICBpZiBzZWxmLnRhc2sgaW4gaW1hZ2VfdGFza3M6CisgICAgICAgICAgICB0YXNrX3N1YnF1ZXJ5ID0gUSh0YXNrX19pbj1pbWFnZV90YXNrcykKKworICAgICAgICAjIGFubm90YXRlIHdpdGggdGhlIGNvdW50IG9mIGZpbGVzLCB0byBleGNsdWRlIGFueSB0YXJnZXRzIHdoaWNoCisgICAgICAgICMgZG9uJ3QgaGF2ZSBhc3NvY2lhdGVkIGZpbGVzCisgICAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmFubm90YXRlKG51bV9maWxlcz1Db3VudCgndGFyZ2V0X2ltYWdlX2ZpbGUnKSkKKworICAgICAgICBxdWVyeSA9IHRhc2tfc3VicXVlcnkgJiBRKG51bV9maWxlc19fZ3Q9MCkKKworICAgICAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5maWx0ZXIocXVlcnkpCisKKyAgICAgICAgaWYgY2FuZGlkYXRlcy5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMub3JkZXJfYnkoJ2J1aWxkX19jb21wbGV0ZWRfb24nKQorICAgICAgICAgICAgc2ltaWxhcl90YXJnZXQgPSBjYW5kaWRhdGVzLmxhc3QoKQorCisgICAgICAgIHJldHVybiBzaW1pbGFyX3RhcmdldAorCisgICAgZGVmIGdldF9zaW1pbGFyX3RhcmdldF93aXRoX3Nka19maWxlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgbW9zdCByZWNlbnQgc2ltaWxhciB0YXJnZXQgd2l0aCBUYXJnZXRTREtGaWxlcyBhc3NvY2lhdGVkCisgICAgICAgIHdpdGggaXQsIGZvciB0aGUgcHVycG9zZSBvZiBjbG9uaW5nIHRob3NlIGZpbGVzIG9udG8gdGhpcyB0YXJnZXQuCisgICAgICAgICIiIgorICAgICAgICBzaW1pbGFyX3RhcmdldCA9IE5vbmUKKworICAgICAgICBjYW5kaWRhdGVzID0gc2VsZi5nZXRfc2ltaWxhcl90YXJnZXRzKCkKKyAgICAgICAgaWYgY2FuZGlkYXRlcy5jb3VudCgpID09IDA6CisgICAgICAgICAgICByZXR1cm4gc2ltaWxhcl90YXJnZXQKKworICAgICAgICAjIGFubm90YXRlIHdpdGggdGhlIGNvdW50IG9mIGZpbGVzLCB0byBleGNsdWRlIGFueSB0YXJnZXRzIHdoaWNoCisgICAgICAgICMgZG9uJ3QgaGF2ZSBhc3NvY2lhdGVkIGZpbGVzCisgICAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmFubm90YXRlKG51bV9maWxlcz1Db3VudCgndGFyZ2V0c2RrZmlsZScpKQorCisgICAgICAgIHF1ZXJ5ID0gUSh0YXNrPXNlbGYudGFzaykgJiBRKG51bV9maWxlc19fZ3Q9MCkKKworICAgICAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5maWx0ZXIocXVlcnkpCisKKyAgICAgICAgaWYgY2FuZGlkYXRlcy5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMub3JkZXJfYnkoJ2J1aWxkX19jb21wbGV0ZWRfb24nKQorICAgICAgICAgICAgc2ltaWxhcl90YXJnZXQgPSBjYW5kaWRhdGVzLmxhc3QoKQorCisgICAgICAgIHJldHVybiBzaW1pbGFyX3RhcmdldAorCisgICAgZGVmIGNsb25lX2ltYWdlX2FydGlmYWN0c19mcm9tKHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIGNsb25lcyBvZiB0aGUgVGFyZ2V0X0ltYWdlX0ZpbGVzIGFuZCBUYXJnZXRLZXJuZWxGaWxlIG9iamVjdHMKKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIFRhcmdldCB0YXJnZXQsIHRoZW4gYXNzb2NpYXRlIHRoZW0gd2l0aCB0aGlzIHRhcmdldC4KKworICAgICAgICBOb3RlIHRoYXQgZm9yIFRhcmdldF9JbWFnZV9GaWxlcywgd2Ugb25seSB3YW50IGZpbGVzIGZyb20gdGhlIHByZXZpb3VzCisgICAgICAgIGJ1aWxkIHdob3NlIHN1ZmZpeCBtYXRjaGVzIG9uZSBvZiB0aGUgc3VmZml4ZXMgZGVmaW5lZCBpbiB0aGlzCisgICAgICAgIHRhcmdldCdzIGJ1aWxkJ3MgSU1BR0VfRlNUWVBFUyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBUaGlzIHByZXZlbnRzIHRoZQorICAgICAgICBUYXJnZXRfSW1hZ2VfRmlsZSBvYmplY3QgZm9yIGFuIGV4dDQgaW1hZ2UgYmVpbmcgYXNzb2NpYXRlZCB3aXRoIGEKKyAgICAgICAgdGFyZ2V0IGZvciBhIHByb2plY3Qgd2hpY2ggZGlkbid0IHByb2R1Y2UgYW4gZXh0NCBpbWFnZSAoZm9yIGV4YW1wbGUpLgorCisgICAgICAgIEFsc28gc2V0cyB0aGUgbGljZW5zZV9tYW5pZmVzdF9wYXRoIGFuZCBwYWNrYWdlX21hbmlmZXN0X3BhdGgKKyAgICAgICAgb2YgdGhpcyB0YXJnZXQgdG8gdGhlIHNhbWUgcGF0aCBhcyB0aGF0IG9mIHRhcmdldCBiZWluZyBjbG9uZWQgZnJvbSwgYXMKKyAgICAgICAgdGhlIG1hbmlmZXN0cyBhcmUgYWxzbyBidWlsZCBhcnRpZmFjdHMgYnV0IGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5LgorICAgICAgICAiIiIKKworICAgICAgICBpbWFnZV9mc3R5cGVzID0gc2VsZi5idWlsZC5nZXRfaW1hZ2VfZnN0eXBlcygpCisKKyAgICAgICAgIyBmaWx0ZXIgb3V0IGFueSBpbWFnZSBmaWxlcyB3aG9zZSBzdWZmaXhlcyBhcmVuJ3QgaW4gdGhlCisgICAgICAgICMgSU1BR0VfRlNUWVBFUyBzdWZmaXhlcyB2YXJpYWJsZSBmb3IgdGhpcyB0YXJnZXQncyBidWlsZAorICAgICAgICBpbWFnZV9maWxlcyA9IFt0YXJnZXRfaW1hZ2VfZmlsZSBcCisgICAgICAgICAgICBmb3IgdGFyZ2V0X2ltYWdlX2ZpbGUgaW4gdGFyZ2V0LnRhcmdldF9pbWFnZV9maWxlX3NldC5hbGwoKSBcCisgICAgICAgICAgICBpZiB0YXJnZXRfaW1hZ2VfZmlsZS5zdWZmaXggaW4gaW1hZ2VfZnN0eXBlc10KKworICAgICAgICBmb3IgaW1hZ2VfZmlsZSBpbiBpbWFnZV9maWxlczoKKyAgICAgICAgICAgIGltYWdlX2ZpbGUucGsgPSBOb25lCisgICAgICAgICAgICBpbWFnZV9maWxlLnRhcmdldCA9IHNlbGYKKyAgICAgICAgICAgIGltYWdlX2ZpbGUuc2F2ZSgpCisKKyAgICAgICAga2VybmVsX2ZpbGVzID0gdGFyZ2V0LnRhcmdldGtlcm5lbGZpbGVfc2V0LmFsbCgpCisgICAgICAgIGZvciBrZXJuZWxfZmlsZSBpbiBrZXJuZWxfZmlsZXM6CisgICAgICAgICAgICBrZXJuZWxfZmlsZS5wayA9IE5vbmUKKyAgICAgICAgICAgIGtlcm5lbF9maWxlLnRhcmdldCA9IHNlbGYKKyAgICAgICAgICAgIGtlcm5lbF9maWxlLnNhdmUoKQorCisgICAgICAgIHNlbGYubGljZW5zZV9tYW5pZmVzdF9wYXRoID0gdGFyZ2V0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aAorICAgICAgICBzZWxmLnBhY2thZ2VfbWFuaWZlc3RfcGF0aCA9IHRhcmdldC5wYWNrYWdlX21hbmlmZXN0X3BhdGgKKyAgICAgICAgc2VsZi5zYXZlKCkKKworICAgIGRlZiBjbG9uZV9zZGtfYXJ0aWZhY3RzX2Zyb20oc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIENsb25lIFRhcmdldFNES0ZpbGUgb2JqZWN0cyBmcm9tIHRhcmdldCBhbmQgYXNzb2NpYXRlIHRoZW0gd2l0aCB0aGlzCisgICAgICAgIHRhcmdldC4KKyAgICAgICAgIiIiCisgICAgICAgIHNka19maWxlcyA9IHRhcmdldC50YXJnZXRzZGtmaWxlX3NldC5hbGwoKQorICAgICAgICBmb3Igc2RrX2ZpbGUgaW4gc2RrX2ZpbGVzOgorICAgICAgICAgICAgc2RrX2ZpbGUucGsgPSBOb25lCisgICAgICAgICAgICBzZGtfZmlsZS50YXJnZXQgPSBzZWxmCisgICAgICAgICAgICBzZGtfZmlsZS5zYXZlKCkKKworICAgIGRlZiBoYXNfaW1hZ2VzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBUcnVlIGlmIHRoaXMgdGFyZ2V0IGhhcyBvbmUgb3IgbW9yZSBpbWFnZSBmaWxlcyBhdHRhY2hlZCB0byBpdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldF9pbWFnZV9maWxlX3NldC5hbGwoKS5jb3VudCgpID4gMAorCisjIGtlcm5lbCBhcnRpZmFjdHMgZm9yIGEgdGFyZ2V0OiBiekltYWdlIGFuZCBtb2R1bGVzKgorY2xhc3MgVGFyZ2V0S2VybmVsRmlsZShtb2RlbHMuTW9kZWwpOgorICAgIHRhcmdldCA9IG1vZGVscy5Gb3JlaWduS2V5KFRhcmdldCkKKyAgICBmaWxlX25hbWUgPSBtb2RlbHMuRmlsZVBhdGhGaWVsZCgpCisgICAgZmlsZV9zaXplID0gbW9kZWxzLkludGVnZXJGaWVsZCgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYmFzZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZmlsZV9uYW1lKQorCisjIFNESyBhcnRpZmFjdHMgZm9yIGEgdGFyZ2V0OiBzaCBhbmQgbWFuaWZlc3QgZmlsZXMKK2NsYXNzIFRhcmdldFNES0ZpbGUobW9kZWxzLk1vZGVsKToKKyAgICB0YXJnZXQgPSBtb2RlbHMuRm9yZWlnbktleShUYXJnZXQpCisgICAgZmlsZV9uYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQoKQorICAgIGZpbGVfc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJhc2VuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5iYXNlbmFtZShzZWxmLmZpbGVfbmFtZSkKKwogY2xhc3MgVGFyZ2V0X0ltYWdlX0ZpbGUobW9kZWxzLk1vZGVsKToKICAgICAjIHZhbGlkIHN1ZmZpeGVzIGZvciBpbWFnZSBmaWxlcyBwcm9kdWNlZCBieSBhIGJ1aWxkCiAgICAgU1VGRklYRVMgPSB7CiAgICAgICAgICdidHJmcycsICdjcGlvJywgJ2NwaW8uZ3onLCAnY3Bpby5sejQnLCAnY3Bpby5sem1hJywgJ2NwaW8ueHonLAogICAgICAgICAnY3JhbWZzJywgJ2VsZicsICdleHQyJywgJ2V4dDIuYnoyJywgJ2V4dDIuZ3onLCAnZXh0Mi5sem1hJywgJ2V4dDQnLAotICAgICAgICAnZXh0NC5neicsICdleHQzJywgJ2V4dDMuZ3onLCAnaGRkaW1nJywgJ2lzbycsICdqZmZzMicsICdqZmZzMi5zdW0nLAotICAgICAgICAnc3F1YXNoZnMnLCAnc3F1YXNoZnMtbHpvJywgJ3NxdWFzaGZzLXh6JywgJ3Rhci5iejInLCAndGFyLmx6NCcsCi0gICAgICAgICd0YXIueHonLCAndGFydGFyLmd6JywgJ3ViaScsICd1YmlmcycsICd2bWRrJworICAgICAgICAnZXh0NC5neicsICdleHQzJywgJ2V4dDMuZ3onLCAnaGRkZGlyZWN0JywgJ2hkZGltZycsICdpc28nLCAnamZmczInLAorICAgICAgICAnamZmczIuc3VtJywgJ211bHRpdWJpJywgJ3Fjb3cyJywgJ3NxdWFzaGZzJywgJ3NxdWFzaGZzLWx6bycsCisgICAgICAgICdzcXVhc2hmcy14eicsICd0YXInLCAndGFyLmJ6MicsICd0YXIuZ3onLCAndGFyLmx6NCcsICd0YXIueHonLCAndWJpJywKKyAgICAgICAgJ3ViaWZzJywgJ3ZkaScsICd2bWRrJywgJ3dpYycsICd3aWMuYnoyJywgJ3dpYy5neicsICd3aWMubHptYScKICAgICB9CiAKICAgICB0YXJnZXQgPSBtb2RlbHMuRm9yZWlnbktleShUYXJnZXQpCkBAIC02NTYsNiArODkxLDEzIEBACiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgc3VmZml4KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VmZml4IGZvciBpbWFnZSBmaWxlLCBtaW51cyBsZWFkaW5nICIuIgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIHN1ZmZpeCBpbiBUYXJnZXRfSW1hZ2VfRmlsZS5TVUZGSVhFUzoKKyAgICAgICAgICAgIGlmIHNlbGYuZmlsZV9uYW1lLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1ZmZpeAorCiAgICAgICAgIGZpbGVuYW1lLCBzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KHNlbGYuZmlsZV9uYW1lKQogICAgICAgICBzdWZmaXggPSBzdWZmaXgubHN0cmlwKCcuJykKICAgICAgICAgcmV0dXJuIHN1ZmZpeApAQCAtODYwLDMxICsxMTAyLDcwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRfbmFtZT0nYXBwZW5kc19zZXQnKQogCiAKLQogY2xhc3MgUGFja2FnZV9EZXBlbmRlbmN5TWFuYWdlcihtb2RlbHMuTWFuYWdlcik6CiAgICAgdXNlX2Zvcl9yZWxhdGVkX2ZpZWxkcyA9IFRydWUKKyAgICBUQVJHRVRfTEFURVNUID0gInVzZS1sYXRlc3QtdGFyZ2V0LWZvci10YXJnZXQiCiAKICAgICBkZWYgZ2V0X3F1ZXJ5c2V0KHNlbGYpOgogICAgICAgICByZXR1cm4gc3VwZXIoUGFja2FnZV9EZXBlbmRlbmN5TWFuYWdlciwgc2VsZikuZ2V0X3F1ZXJ5c2V0KCkuZXhjbHVkZShwYWNrYWdlX2lkID0gRignZGVwZW5kc19vbl9faWQnKSkKIAotICAgIGRlZiBnZXRfdG90YWxfc291cmNlX2RlcHNfc2l6ZShzZWxmKToKLSAgICAgICAgIiIiIFJldHVybnMgdGhlIHRvdGFsIGZpbGUgc2l6ZSBvZiBhbGwgdGhlIHBhY2thZ2VzIHRoYXQgZGVwZW5kIG9uCi0gICAgICAgIHRoaXNwYWNrYWdlLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuYWxsKCkuYWdncmVnYXRlKFN1bSgnZGVwZW5kc19vbl9fc2l6ZScpKQorICAgIGRlZiBmb3JfdGFyZ2V0X29yX25vbmUoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiIGZpbHRlciB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGRpc3BsYXllZCBieSB0aGUgc3VwcGxpZWQgdGFyZ2V0CisgICAgICAgIGlmIG5vIGRlcGVuZGVuY2VzIGFyZSBmb3VuZCBmb3IgdGhlIHRhcmdldCB0aGVuIHRyeSBOb25lIGFzIHRoZSB0YXJnZXQKKyAgICAgICAgd2hpY2ggd2lsbCByZXR1cm4gdGhlIGRlcGVuZGVuY2VzIGNhbGN1bGF0ZWQgd2l0aG91dCB0aGUgY29udGV4dCBvZiBhCisgICAgICAgIHRhcmdldCBlLmcuIG5vbiBpbWFnZSByZWNpcGVzLgogCi0gICAgZGVmIGdldF90b3RhbF9yZXZkZXBzX3NpemUoc2VsZik6Ci0gICAgICAgICIiIiBSZXR1cm5zIHRoZSB0b3RhbCBmaWxlIHNpemUgb2YgYWxsIHRoZSBwYWNrYWdlcyB0aGF0IGRlcGVuZCBvbgotICAgICAgICB0aGlzIHBhY2thZ2UuCisgICAgICAgIHJldHVybnM6IHsgc2l6ZSwgcGFja2FnZXMgfQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuYWxsKCkuYWdncmVnYXRlKFN1bSgncGFja2FnZV9pZF9fc2l6ZScpKQorICAgICAgICBwYWNrYWdlX2RlcGVuZGVuY2llcyA9IHNlbGYuYWxsX2RlcGVuZHMoKS5vcmRlcl9ieSgnZGVwZW5kc19vbl9fbmFtZScpCiAKKyAgICAgICAgaWYgdGFyZ2V0IGlzIHNlbGYuVEFSR0VUX0xBVEVTVDoKKyAgICAgICAgICAgIGluc3RhbGxlZF9kZXBzID1cCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfZGVwZW5kZW5jaWVzLmZpbHRlcih+USh0YXJnZXRfX3RhcmdldD1Ob25lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluc3RhbGxlZF9kZXBzID1cCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfZGVwZW5kZW5jaWVzLmZpbHRlcihRKHRhcmdldF9fdGFyZ2V0PXRhcmdldCkpCisKKyAgICAgICAgcGFja2FnZXNfbGlzdCA9IE5vbmUKKyAgICAgICAgdG90YWxfc2l6ZSA9IDAKKworICAgICAgICAjIElmIHdlIGhhdmUgaW5zdGFsbGVkIGRlcGRlbmNpZXMgZm9yIHRoaXMgcGFja2FnZSBhbmQgdGFyZ2V0IHRoZW4gdXNlCisgICAgICAgICMgdGhlc2UgdG8gZGlzcGxheQorICAgICAgICBpZiBpbnN0YWxsZWRfZGVwcy5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIHBhY2thZ2VzX2xpc3QgPSBpbnN0YWxsZWRfZGVwcworICAgICAgICAgICAgdG90YWxfc2l6ZSA9IGluc3RhbGxlZF9kZXBzLmFnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAgICBTdW0oJ2RlcGVuZHNfb25fX3NpemUnKSlbJ2RlcGVuZHNfb25fX3NpemVfX3N1bSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdfbGlzdCA9IFtdCisgICAgICAgICAgICBwYWNrYWdlX25hbWVzID0gW10KKworICAgICAgICAgICAgIyBGaW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIHBhY2thZ2UgdGhhdCB3ZSBrbm93IGFib3V0IGV2ZW4gaWYKKyAgICAgICAgICAgICMgaXQncyBub3QgaW5zdGFsbGVkIG9uIGEgdGFyZ2V0IGUuZy4gZnJvbSBhIG5vbi1pbWFnZSByZWNpcGUKKyAgICAgICAgICAgIGZvciBwIGluIHBhY2thZ2VfZGVwZW5kZW5jaWVzLmZpbHRlcihRKHRhcmdldD1Ob25lKSk6CisgICAgICAgICAgICAgICAgaWYgcC5kZXBlbmRzX29uLm5hbWUgaW4gcGFja2FnZV9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX25hbWVzLmFwcGVuZChwLmRlcGVuZHNfb24ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbmV3X2xpc3QuYXBwZW5kKHAucGspCisgICAgICAgICAgICAgICAgICAgICMgd2hpbGUgd2UncmUgaGVyZSB3ZSBtYXkgYXMgd2VsbCB0b3RhbCB1cCB0aGUgc2l6ZSB0bworICAgICAgICAgICAgICAgICAgICAjIGF2b2lkIGl0ZXJhdGluZyBhZ2FpbgorICAgICAgICAgICAgICAgICAgICB0b3RhbF9zaXplICs9IHAuZGVwZW5kc19vbi5zaXplCisKKyAgICAgICAgICAgICMgV2Ugd2FudCB0byByZXR1cm4gYSBxdWVyeXNldCBoZXJlIGZvciBjb25zaXN0ZW5jeSBzbyBwaWNrIHRoZQorICAgICAgICAgICAgIyBkZXBzIGZyb20gdGhlIG5ld19saXN0CisgICAgICAgICAgICBwYWNrYWdlc19saXN0ID0gcGFja2FnZV9kZXBlbmRlbmNpZXMuZmlsdGVyKFEocGtfX2luPW5ld19saXN0KSkKKworICAgICAgICByZXR1cm4geydwYWNrYWdlcyc6IHBhY2thZ2VzX2xpc3QsCisgICAgICAgICAgICAgICAgJ3NpemUnOiB0b3RhbF9zaXplfQogCiAgICAgZGVmIGFsbF9kZXBlbmRzKHNlbGYpOgotICAgICAgICAiIiIgUmV0dXJucyBqdXN0IHRoZSBkZXBlbmRzIHBhY2thZ2VzIGFuZCBub3QgYW55IG90aGVyIGRlcF90eXBlICIiIgorICAgICAgICAiIiIgUmV0dXJucyBqdXN0IHRoZSBkZXBlbmRzIHBhY2thZ2VzIGFuZCBub3QgYW55IG90aGVyIGRlcF90eXBlCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIGZvciBhbnkgdGFyZ2V0CisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5maWx0ZXIoUShkZXBfdHlwZT1QYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SREVQRU5EUykgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUShkZXBfdHlwZT1QYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMpKQogCisKIGNsYXNzIFBhY2thZ2VfRGVwZW5kZW5jeShtb2RlbHMuTW9kZWwpOgogICAgIFRZUEVfUkRFUEVORFMgPSAwCiAgICAgVFlQRV9UUkRFUEVORFMgPSAxCkBAIC05MzAsMjEgKzEyMTEsMjcgQEAKICAgICB0YXJnZXQgPSBtb2RlbHMuRm9yZWlnbktleShUYXJnZXQpCiAgICAgcGFja2FnZSA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0nYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnKQogCisKIGNsYXNzIFBhY2thZ2VfRmlsZShtb2RlbHMuTW9kZWwpOgogICAgIHBhY2thZ2UgPSBtb2RlbHMuRm9yZWlnbktleShQYWNrYWdlLCByZWxhdGVkX25hbWU9J2J1aWxkZmlsZWxpc3RfcGFja2FnZScpCiAgICAgcGF0aCA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKQogICAgIHNpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKCkKIAorCiBjbGFzcyBSZWNpcGUobW9kZWxzLk1vZGVsKToKLSAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAndmVyc2lvbicsICdmaWxlX3BhdGgnLCAnc2VjdGlvbicsICdzdW1tYXJ5JywgJ2Rlc2NyaXB0aW9uJywgJ2xpY2Vuc2UnLCAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ2xheWVyX3ZlcnNpb25fX2NvbW1pdCcsICdsYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyX3NvdXJjZV9fbmFtZSddCisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyduYW1lJywgJ3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3NlY3Rpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeScsICdkZXNjcmlwdGlvbicsICdsaWNlbnNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsICdsYXllcl92ZXJzaW9uX19jb21taXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbl9fbG9jYWxfcGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXllcl92ZXJzaW9uX19sYXllcl9zb3VyY2UnXQogCi0gICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0xheWVyU291cmNlJywgZGVmYXVsdCA9IE5vbmUsIG51bGwgPSBUcnVlKSAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnZXQgdGhpcyByZWNpcGUKLSAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBlbnRyeSBpbiB0aGUgc291cmNlCi0gICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpCiAKLSAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkgICAgICAgICAgICAgICAgICMgcG4KLSAgICB2ZXJzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkgICAgICAgICAgICAgICMgcHYKLSAgICBsYXllcl92ZXJzaW9uID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0xheWVyX1ZlcnNpb24nLCByZWxhdGVkX25hbWU9J3JlY2lwZV9sYXllcl92ZXJzaW9uJykKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICB2ZXJzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICBsYXllcl92ZXJzaW9uID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0xheWVyX1ZlcnNpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkX25hbWU9J3JlY2lwZV9sYXllcl92ZXJzaW9uJykKICAgICBzdW1tYXJ5ID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQogICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQogICAgIHNlY3Rpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKQpAQCAtOTU1LDEzICsxMjQyLDYgQEAKICAgICBwYXRoZmxhZ3MgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKQogICAgIGlzX2ltYWdlID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKQogCi0gICAgZGVmIGdldF9sYXllcnNvdXJjZV92aWV3X3VybChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5sYXllcl9zb3VyY2UgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAiIgotCi0gICAgICAgIHVybCA9IHNlbGYubGF5ZXJfc291cmNlLmdldF9vYmplY3RfdmlldyhzZWxmLmxheWVyX3ZlcnNpb24udXBfYnJhbmNoLCAicmVjaXBlcyIsIHNlbGYubmFtZSkKLSAgICAgICAgcmV0dXJuIHVybAotCiAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIlJlY2lwZSAiICsgc2VsZi5uYW1lICsgIjoiICsgc2VsZi52ZXJzaW9uCiAKQEAgLTEwMDcsOCArMTI4Nyw2IEBACiAKIGNsYXNzIE1hY2hpbmUobW9kZWxzLk1vZGVsKToKICAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbIm5hbWUiLCAiZGVzY3JpcHRpb24iLCAibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiXQotICAgIGxheWVyX3NvdXJjZSA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllclNvdXJjZScsIGRlZmF1bHQgPSBOb25lLCBudWxsID0gVHJ1ZSkgICMgZnJvbSB3aGVyZSBkaWQgd2UgZ2V0IHRoaXMgbWFjaGluZQotICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAgICMgaWQgb2YgZW50cnkgaW4gdGhlIHNvdXJjZQogICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCiAKICAgICBsYXllcl92ZXJzaW9uID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0xheWVyX1ZlcnNpb24nKQpAQCAtMTAyMywyODUgKzEzMDEsOSBAQAogICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICJNYWNoaW5lICIgKyBzZWxmLm5hbWUgKyAiKCIgKyBzZWxmLmRlc2NyaXB0aW9uICsgIikiCiAKLSAgICBjbGFzcyBNZXRhOgotICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoImxheWVyX3NvdXJjZSIsICJ1cF9pZCIpCiAKIAotZnJvbSBkamFuZ28uZGIubW9kZWxzLmJhc2UgaW1wb3J0IE1vZGVsQmFzZQogCi1jbGFzcyBJbmhlcml0YW5jZU1ldGFjbGFzcyhNb2RlbEJhc2UpOgotICAgIGRlZiBfX2NhbGxfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG9iaiA9IHN1cGVyKEluaGVyaXRhbmNlTWV0YWNsYXNzLCBjbHMpLl9fY2FsbF9fKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgcmV0dXJuIG9iai5nZXRfb2JqZWN0KCkKLQotCi1jbGFzcyBMYXllclNvdXJjZShtb2RlbHMuTW9kZWwpOgotICAgIF9fbWV0YWNsYXNzX18gPSBJbmhlcml0YW5jZU1ldGFjbGFzcwotCi0gICAgY2xhc3MgTWV0YToKLSAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwgKQotCi0gICAgVFlQRV9MT0NBTCA9IDAKLSAgICBUWVBFX0xBWUVSSU5ERVggPSAxCi0gICAgVFlQRV9JTVBPUlRFRCA9IDIKLSAgICBTT1VSQ0VfVFlQRSA9ICgKLSAgICAgICAgKFRZUEVfTE9DQUwsICJsb2NhbCIpLAotICAgICAgICAoVFlQRV9MQVlFUklOREVYLCAibGF5ZXJpbmRleCIpLAotICAgICAgICAoVFlQRV9JTVBPUlRFRCwgImltcG9ydGVkIiksCi0gICAgICApCi0KLSAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTYzLCB1bmlxdWUgPSBUcnVlKQotICAgIHNvdXJjZXR5cGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9U09VUkNFX1RZUEUpCi0gICAgYXBpdXJsID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgc3VwZXIoTGF5ZXJTb3VyY2UsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgc2VsZi5zb3VyY2V0eXBlID09IExheWVyU291cmNlLlRZUEVfTE9DQUw6Ci0gICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExvY2FsTGF5ZXJTb3VyY2UKLSAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYOgotICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBMYXllckluZGV4TGF5ZXJTb3VyY2UKLSAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRDoKLSAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gSW1wb3J0ZWRMYXllclNvdXJjZQotICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBOb25lOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIExheWVyU291cmNlLWRlcml2ZWQgY2xhc3MuIElmIHlvdSBhZGRlZCBhIG5ldyBsYXllciBzb3VyY2UgdHlwZSwgZmlsbCBvdXQgYWxsIGNvZGUgc3R1YnMuIikKLQotCi0gICAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgICAgICBVcGRhdGVzIHRoZSBsb2NhbCBkYXRhYmFzZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1cHN0cmVhbSBsYXllciBzb3VyY2UKLSAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQWJzdHJhY3QsIHVwZGF0ZSgpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYWxsIExheWVyU291cmNlLWRlcml2ZWQgY2xhc3NlcyAob2JqZWN0IGlzICVzKSIgJSBzdHIodmFycyhzZWxmKSkpCi0KLSAgICBkZWYgc2F2ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICByZXR1cm4gc3VwZXIoTGF5ZXJTb3VyY2UsIHNlbGYpLnNhdmUoKmFyZ3MsICoqa3dhcmdzKQotCi0gICAgZGVmIGdldF9vYmplY3Qoc2VsZik6Ci0gICAgICAgICMgcHJlc2V0IGFuIHVuLWluaXRpbGl6ZWQgb2JqZWN0Ci0gICAgICAgIGlmIE5vbmUgPT0gc2VsZi5uYW1lOgotICAgICAgICAgICAgc2VsZi5uYW1lPSIiCi0gICAgICAgIGlmIE5vbmUgPT0gc2VsZi5hcGl1cmw6Ci0gICAgICAgICAgICBzZWxmLmFwaXVybD0iIgotICAgICAgICBpZiBOb25lID09IHNlbGYuc291cmNldHlwZToKLSAgICAgICAgICAgIHNlbGYuc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xPQ0FMCi0KLSAgICAgICAgaWYgc2VsZi5zb3VyY2V0eXBlID09IExheWVyU291cmNlLlRZUEVfTE9DQUw6Ci0gICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExvY2FsTGF5ZXJTb3VyY2UKLSAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYOgotICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBMYXllckluZGV4TGF5ZXJTb3VyY2UKLSAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRDoKLSAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gSW1wb3J0ZWRMYXllclNvdXJjZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIExheWVyU291cmNlIHR5cGUuIElmIHlvdSBhZGRlZCBhIG5ldyBsYXllciBzb3VyY2UgdHlwZSwgZmlsbCBvdXQgYWxsIGNvZGUgc3R1YnMuIikKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYuc291cmNldHlwZSkKLQotCi1jbGFzcyBMb2NhbExheWVyU291cmNlKExheWVyU291cmNlKToKLSAgICBjbGFzcyBNZXRhKExheWVyU291cmNlLl9tZXRhLl9fY2xhc3NfXyk6Ci0gICAgICAgIHByb3h5ID0gVHJ1ZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKExvY2FsTGF5ZXJTb3VyY2UsIHNlbGYpLl9faW5pdF9fKGFyZ3MsIGt3YXJncykKLSAgICAgICAgc2VsZi5zb3VyY2V0eXBlID0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTAotCi0gICAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgICAgICBGZXRjaGVzIGxheWVyLCByZWNpcGUgYW5kIG1hY2hpbmUgaW5mb3JtYXRpb24gZnJvbSBsb2NhbCByZXBvc2l0b3J5Ci0gICAgICAgICIiIgotICAgICAgICBwYXNzCi0KLWNsYXNzIEltcG9ydGVkTGF5ZXJTb3VyY2UoTGF5ZXJTb3VyY2UpOgotICAgIGNsYXNzIE1ldGEoTGF5ZXJTb3VyY2UuX21ldGEuX19jbGFzc19fKToKLSAgICAgICAgcHJveHkgPSBUcnVlCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgc3VwZXIoSW1wb3J0ZWRMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oYXJncywga3dhcmdzKQotICAgICAgICBzZWxmLnNvdXJjZXR5cGUgPSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVECi0KLSAgICBkZWYgdXBkYXRlKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgICAgIEZldGNoZXMgbGF5ZXIsIHJlY2lwZSBhbmQgbWFjaGluZSBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHJlcG9zaXRvcnkKLSAgICAgICAgIiIiCi0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBMYXllckluZGV4TGF5ZXJTb3VyY2UoTGF5ZXJTb3VyY2UpOgotICAgIGNsYXNzIE1ldGEoTGF5ZXJTb3VyY2UuX21ldGEuX19jbGFzc19fKToKLSAgICAgICAgcHJveHkgPSBUcnVlCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgc3VwZXIoTGF5ZXJJbmRleExheWVyU291cmNlLCBzZWxmKS5fX2luaXRfXyhhcmdzLCBrd2FyZ3MpCi0gICAgICAgIHNlbGYuc291cmNldHlwZSA9IExheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWAotCi0gICAgZGVmIGdldF9vYmplY3RfdmlldyhzZWxmLCBicmFuY2gsIG9iamVjdHlwZSwgdXBpZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmFwaXVybCArICIuLi9icmFuY2gvIiArIGJyYW5jaC5uYW1lICsgIi8iICsgb2JqZWN0eXBlICsgIi8/cT0iICsgc3RyKHVwaWQpCi0KLSAgICBkZWYgdXBkYXRlKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgICAgIEZldGNoZXMgbGF5ZXIsIHJlY2lwZSBhbmQgbWFjaGluZSBpbmZvcm1hdGlvbiBmcm9tIHJlbW90ZSByZXBvc2l0b3J5Ci0gICAgICAgICIiIgotICAgICAgICBhc3NlcnQgc2VsZi5hcGl1cmwgaXMgbm90IE5vbmUKLSAgICAgICAgZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uLCBjb25uZWN0aW9uCi0KLSAgICAgICAgaW1wb3J0IHVybGxpYjIsIHVybHBhcnNlLCBqc29uCi0gICAgICAgIGltcG9ydCBvcwotICAgICAgICBwcm94eV9zZXR0aW5ncyA9IG9zLmVudmlyb24uZ2V0KCJodHRwX3Byb3h5IiwgTm9uZSkKLSAgICAgICAgb2VfY29yZV9sYXllciA9ICdvcGVuZW1iZWRkZWQtY29yZScKLQotICAgICAgICBkZWYgX2dldF9qc29uX3Jlc3BvbnNlKGFwaXVybCA9IHNlbGYuYXBpdXJsKToKLSAgICAgICAgICAgIF9wYXJzZWR1cmwgPSB1cmxwYXJzZS51cmxwYXJzZShhcGl1cmwpCi0gICAgICAgICAgICBwYXRoID0gX3BhcnNlZHVybC5wYXRoCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXMgPSB1cmxsaWIyLnVybG9wZW4oYXBpdXJsKQotICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byByZWFkICVzOiAlcyIgJSAocGF0aCwgZS5yZWFzb24pKQotCi0gICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyZXMucmVhZCgpKQotCi0gICAgICAgICMgdmVyaWZ5IHdlIGNhbiBnZXQgdGhlIGJhc2ljIGFwaQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhcGlsaW5rcyA9IF9nZXRfanNvbl9yZXNwb25zZSgpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgIGlmIHByb3h5X3NldHRpbmdzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJFRTogVXNpbmcgcHJveHkgJXMiICUgcHJveHlfc2V0dGluZ3MpCi0gICAgICAgICAgICBsb2dnZXIud2FybmluZygiRUU6IGNvdWxkIG5vdCBjb25uZWN0IHRvICVzLCBza2lwcGluZyB1cGRhdGU6ICVzXG4lcyIgJSAoc2VsZi5hcGl1cmwsIGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKSkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgdXBkYXRlIGJyYW5jaGVzOyBvbmx5IHRob3NlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG5hbWVzIGxpc3RlZCBpbiB0aGUKLSAgICAgICAgIyBSZWxlYXNlcyB0YWJsZQotICAgICAgICB3aGl0ZWxpc3RfYnJhbmNoX25hbWVzID0gbWFwKGxhbWJkYSB4OiB4LmJyYW5jaF9uYW1lLCBSZWxlYXNlLm9iamVjdHMuYWxsKCkpCi0gICAgICAgIGlmIGxlbih3aGl0ZWxpc3RfYnJhbmNoX25hbWVzKSA9PSAwOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gbWFrZSBsaXN0IG9mIGJyYW5jaGVzIHRvIGZldGNoIikKLQotICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIGJyYW5jaGVzIikKLSAgICAgICAgYnJhbmNoZXNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1snYnJhbmNoZXMnXQotICAgICAgICAgICAgKyAiP2ZpbHRlcj1uYW1lOiVzIiAlICJPUiIuam9pbih3aGl0ZWxpc3RfYnJhbmNoX25hbWVzKSkKLSAgICAgICAgZm9yIGJpIGluIGJyYW5jaGVzX2luZm86Ci0gICAgICAgICAgICBiLCBjcmVhdGVkID0gQnJhbmNoLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCBuYW1lID0gYmlbJ25hbWUnXSkKLSAgICAgICAgICAgIGIudXBfaWQgPSBiaVsnaWQnXQotICAgICAgICAgICAgYi51cF9kYXRlID0gYmlbJ3VwZGF0ZWQnXQotICAgICAgICAgICAgYi5uYW1lID0gYmlbJ25hbWUnXQotICAgICAgICAgICAgYi5zaG9ydF9kZXNjcmlwdGlvbiA9IGJpWydzaG9ydF9kZXNjcmlwdGlvbiddCi0gICAgICAgICAgICBiLnNhdmUoKQotCi0gICAgICAgICMgdXBkYXRlIGxheWVycwotICAgICAgICBsYXllcnNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1snbGF5ZXJJdGVtcyddKQotCi0gICAgICAgIGZvciBsaSBpbiBsYXllcnNfaW5mbzoKLSAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciB0aGUgb3BlbmVtYmVkZGVkLWNvcmUgbGF5ZXIKLSAgICAgICAgICAgIGlmIGxpWyduYW1lJ10gPT0gb2VfY29yZV9sYXllcjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBhbiBleGlzdGluZyBvcGVuZW1iZWRkZWQtY29yZSBmb3IgZXhhbXBsZQotICAgICAgICAgICAgICAgICAgICAjIGZyb20gdGhlIHRvYXN0ZXJjb25mLmpzb24gYXVnbWVudCB0aGUgaW5mbyB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBsYXllcmluZGV4IHJhdGhlciB0aGFuIGR1cGxpY2F0ZSBpdAotICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wgPSAgTGF5ZXIub2JqZWN0cy5nZXQobmFtZT1vZV9jb3JlX2xheWVyKQotICAgICAgICAgICAgICAgICAgICAjIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBsYXllciBhcyBub3cgY29taW5nIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICMgbGF5ZXJpbmRleAotICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wubGF5ZXJfc291cmNlID0gc2VsZgotICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wudXBfaWQgPSBsaVsnaWQnXQotICAgICAgICAgICAgICAgICAgICBvZV9jb3JlX2wuc3VtbWFyeSA9IGxpWydzdW1tYXJ5J10KLSAgICAgICAgICAgICAgICAgICAgb2VfY29yZV9sLmRlc2NyaXB0aW9uID0gbGlbJ2Rlc2NyaXB0aW9uJ10KLSAgICAgICAgICAgICAgICAgICAgb2VfY29yZV9sLnNhdmUoKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICAgICAgZXhjZXB0IExheWVyLkRvZXNOb3RFeGlzdDoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICBsLCBjcmVhdGVkID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsIG5hbWUgPSBsaVsnbmFtZSddKQotICAgICAgICAgICAgbC51cF9pZCA9IGxpWydpZCddCi0gICAgICAgICAgICBsLnVwX2RhdGUgPSBsaVsndXBkYXRlZCddCi0gICAgICAgICAgICBsLnZjc191cmwgPSBsaVsndmNzX3VybCddCi0gICAgICAgICAgICBsLnZjc193ZWJfdXJsID0gbGlbJ3Zjc193ZWJfdXJsJ10KLSAgICAgICAgICAgIGwudmNzX3dlYl90cmVlX2Jhc2VfdXJsID0gbGlbJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCddCi0gICAgICAgICAgICBsLnZjc193ZWJfZmlsZV9iYXNlX3VybCA9IGxpWyd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnXQotICAgICAgICAgICAgbC5zdW1tYXJ5ID0gbGlbJ3N1bW1hcnknXQotICAgICAgICAgICAgbC5kZXNjcmlwdGlvbiA9IGxpWydkZXNjcmlwdGlvbiddCi0gICAgICAgICAgICBsLnNhdmUoKQotCi0gICAgICAgICMgdXBkYXRlIGxheWVyYnJhbmNoZXMvbGF5ZXJfdmVyc2lvbnMKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCJGZXRjaGluZyBsYXllciBpbmZvcm1hdGlvbiIpCi0gICAgICAgIGxheWVyYnJhbmNoZXNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1snbGF5ZXJCcmFuY2hlcyddCi0gICAgICAgICAgICAgICAgKyAiP2ZpbHRlcj1icmFuY2g6JXMiICUgIk9SIi5qb2luKG1hcChsYW1iZGEgeDogc3RyKHgudXBfaWQpLCBbaSBmb3IgaSBpbiBCcmFuY2gub2JqZWN0cy5maWx0ZXIobGF5ZXJfc291cmNlID0gc2VsZikgaWYgaS51cF9pZCBpcyBub3QgTm9uZV0gKSkKLSAgICAgICAgICAgICkKLQotICAgICAgICBmb3IgbGJpIGluIGxheWVyYnJhbmNoZXNfaW5mbzoKLSAgICAgICAgICAgIGx2LCBjcmVhdGVkID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgdXBfaWQgPSBsYmlbJ2lkJ10sCi0gICAgICAgICAgICAgICAgICAgIGxheWVyPUxheWVyLm9iamVjdHMuZ2V0KGxheWVyX3NvdXJjZSA9IHNlbGYsIHVwX2lkID0gbGJpWydsYXllciddKQotICAgICAgICAgICAgICAgICkKLQotICAgICAgICAgICAgbHYudXBfZGF0ZSA9IGxiaVsndXBkYXRlZCddCi0gICAgICAgICAgICBsdi51cF9icmFuY2ggPSBCcmFuY2gub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBsYmlbJ2JyYW5jaCddKQotICAgICAgICAgICAgbHYuYnJhbmNoID0gbGJpWydhY3R1YWxfYnJhbmNoJ10KLSAgICAgICAgICAgIGx2LmNvbW1pdCA9IGxiaVsnYWN0dWFsX2JyYW5jaCddCi0gICAgICAgICAgICBsdi5kaXJwYXRoID0gbGJpWyd2Y3Nfc3ViZGlyJ10KLSAgICAgICAgICAgIGx2LnNhdmUoKQotCi0gICAgICAgICMgdXBkYXRlIGxheWVyIGRlcGVuZGVuY2llcwotICAgICAgICBsYXllcmRlcGVuZGVuY2llc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckRlcGVuZGVuY2llcyddKQotICAgICAgICBkZXBlbmRsaXN0ID0ge30KLSAgICAgICAgZm9yIGxkaSBpbiBsYXllcmRlcGVuZGVuY2llc19pbmZvOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGx2ID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IGxkaVsnbGF5ZXJicmFuY2gnXSkKLSAgICAgICAgICAgIGV4Y2VwdCBMYXllcl9WZXJzaW9uLkRvZXNOb3RFeGlzdCBhcyBlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGlmIGx2IG5vdCBpbiBkZXBlbmRsaXN0OgotICAgICAgICAgICAgICAgIGRlcGVuZGxpc3RbbHZdID0gW10KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBkZXBlbmRsaXN0W2x2XS5hcHBlbmQoTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCBsYXllcl9fdXBfaWQgPSBsZGlbJ2RlcGVuZGVuY3knXSwgdXBfYnJhbmNoID0gbHYudXBfYnJhbmNoKSkKLSAgICAgICAgICAgIGV4Y2VwdCBMYXllcl9WZXJzaW9uLkRvZXNOb3RFeGlzdDoKLSAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiQ2Fubm90IGZpbmQgbGF5ZXIgdmVyc2lvbiAobHM6JXMpLCB1cF9pZDolcyBsdjolcyIgJSAoc2VsZiwgbGRpWydkZXBlbmRlbmN5J10sIGx2KSkKLQotICAgICAgICBmb3IgbHYgaW4gZGVwZW5kbGlzdDoKLSAgICAgICAgICAgIExheWVyVmVyc2lvbkRlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIobGF5ZXJfdmVyc2lvbiA9IGx2KS5kZWxldGUoKQotICAgICAgICAgICAgZm9yIGx2ZCBpbiBkZXBlbmRsaXN0W2x2XToKLSAgICAgICAgICAgICAgICBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl92ZXJzaW9uID0gbHYsIGRlcGVuZHNfb24gPSBsdmQpCi0KLQotICAgICAgICAjIHVwZGF0ZSBtYWNoaW5lcwotICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIG1hY2hpbmUgaW5mb3JtYXRpb24iKQotICAgICAgICBtYWNoaW5lc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydtYWNoaW5lcyddCi0gICAgICAgICAgICAgICAgKyAiP2ZpbHRlcj1sYXllcmJyYW5jaDolcyIgJSAiT1IiLmpvaW4obWFwKGxhbWJkYSB4OiBzdHIoeC51cF9pZCksIExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIobGF5ZXJfc291cmNlID0gc2VsZikpKQotICAgICAgICAgICAgKQotCi0gICAgICAgIGZvciBtaSBpbiBtYWNoaW5lc19pbmZvOgotICAgICAgICAgICAgbW8sIGNyZWF0ZWQgPSBNYWNoaW5lLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IG1pWydpZCddLCBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IG1pWydsYXllcmJyYW5jaCddKSkKLSAgICAgICAgICAgIG1vLnVwX2RhdGUgPSBtaVsndXBkYXRlZCddCi0gICAgICAgICAgICBtby5uYW1lID0gbWlbJ25hbWUnXQotICAgICAgICAgICAgbW8uZGVzY3JpcHRpb24gPSBtaVsnZGVzY3JpcHRpb24nXQotICAgICAgICAgICAgbW8uc2F2ZSgpCi0KLSAgICAgICAgIyB1cGRhdGUgcmVjaXBlczsgcGFnaW5hdGUgYnkgbGF5ZXIgdmVyc2lvbiAvIGxheWVyIGJyYW5jaAotICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIHRhcmdldCBpbmZvcm1hdGlvbiIpCi0gICAgICAgIHJlY2lwZXNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1sncmVjaXBlcyddCi0gICAgICAgICAgICAgICAgKyAiP2ZpbHRlcj1sYXllcmJyYW5jaDolcyIgJSAiT1IiLmpvaW4obWFwKGxhbWJkYSB4OiBzdHIoeC51cF9pZCksIExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIobGF5ZXJfc291cmNlID0gc2VsZikpKQotICAgICAgICAgICAgKQotICAgICAgICBmb3IgcmkgaW4gcmVjaXBlc19pbmZvOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJvLCBjcmVhdGVkID0gUmVjaXBlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydpZCddLCBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydsYXllcmJyYW5jaCddKSkKLSAgICAgICAgICAgICAgICByby51cF9kYXRlID0gcmlbJ3VwZGF0ZWQnXQotICAgICAgICAgICAgICAgIHJvLm5hbWUgPSByaVsncG4nXQotICAgICAgICAgICAgICAgIHJvLnZlcnNpb24gPSByaVsncHYnXQotICAgICAgICAgICAgICAgIHJvLnN1bW1hcnkgPSByaVsnc3VtbWFyeSddCi0gICAgICAgICAgICAgICAgcm8uZGVzY3JpcHRpb24gPSByaVsnZGVzY3JpcHRpb24nXQotICAgICAgICAgICAgICAgIHJvLnNlY3Rpb24gPSByaVsnc2VjdGlvbiddCi0gICAgICAgICAgICAgICAgcm8ubGljZW5zZSA9IHJpWydsaWNlbnNlJ10KLSAgICAgICAgICAgICAgICByby5ob21lcGFnZSA9IHJpWydob21lcGFnZSddCi0gICAgICAgICAgICAgICAgcm8uYnVndHJhY2tlciA9IHJpWydidWd0cmFja2VyJ10KLSAgICAgICAgICAgICAgICByby5maWxlX3BhdGggPSByaVsnZmlsZXBhdGgnXSArICIvIiArIHJpWydmaWxlbmFtZSddCi0gICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiByaToKLSAgICAgICAgICAgICAgICAgICAgcm8uaXNfaW1hZ2UgPSAnaW1hZ2UnIGluIHJpWydpbmhlcml0cyddLnNwbGl0KCkKLSAgICAgICAgICAgICAgICBlbHNlOiAjIHdvcmthcm91bmQgZm9yIG9sZCBzdHlsZSBsYXllciBpbmRleAotICAgICAgICAgICAgICAgICAgICByby5pc19pbWFnZSA9ICItaW1hZ2UtIiBpbiByaVsncG4nXQotICAgICAgICAgICAgICAgIHJvLnNhdmUoKQotICAgICAgICAgICAgZXhjZXB0IEludGVncml0eUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJGYWlsZWQgc2F2aW5nIHJlY2lwZSwgaWdub3Jpbmc6ICVzICglczolcykiICUgKGUsIHJvLmxheWVyX3ZlcnNpb24sIHJpWydmaWxlcGF0aCddKyIvIityaVsnZmlsZW5hbWUnXSkpCi0gICAgICAgICAgICAgICAgcm8uZGVsZXRlKCkKIAogY2xhc3MgQml0YmFrZVZlcnNpb24obW9kZWxzLk1vZGVsKToKIApAQCAtMTMyNSw4NyArMTMyNyw5NCBAQAogICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYuYnJhbmNoX25hbWUpCiAKLWNsYXNzIFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5KG1vZGVscy5Nb2RlbCk6Ci0gICAgIiIiIEVhY2ggcmVsZWFzZSBzZWxlY3RzIGxheWVycyBmcm9tIHRoZSBzZXQgdXAgbGF5ZXIgc291cmNlcywgb3JkZXJlZCBieSBwcmlvcml0eSAiIiIKLSAgICByZWxlYXNlID0gbW9kZWxzLkZvcmVpZ25LZXkoIlJlbGVhc2UiKQotICAgIGxheWVyX3NvdXJjZSA9IG1vZGVscy5Gb3JlaWduS2V5KCJMYXllclNvdXJjZSIpCi0gICAgcHJpb3JpdHkgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQgPSAwKQotCi0gICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzLSVzOiVkIiAlIChzZWxmLnJlbGVhc2UubmFtZSwgc2VsZi5sYXllcl9zb3VyY2UubmFtZSwgc2VsZi5wcmlvcml0eSkKLSAgICBjbGFzcyBNZXRhOgotICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkKLQorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCiAKIGNsYXNzIFJlbGVhc2VEZWZhdWx0TGF5ZXIobW9kZWxzLk1vZGVsKToKICAgICByZWxlYXNlID0gbW9kZWxzLkZvcmVpZ25LZXkoUmVsZWFzZSkKICAgICBsYXllcl9uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgZGVmYXVsdD0iIikKIAogCi0jIEJyYW5jaCBjbGFzcyBpcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkJyYW5jaCwgYnJhbmNoZXMgY2FuIG9ubHkgY29tZSBmcm9tIHJlbW90ZSBsYXllciBpbmRleGVzCi1jbGFzcyBCcmFuY2gobW9kZWxzLk1vZGVsKToKLSAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IFRydWUpCi0gICAgdXBfaWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgICAgICAgICAgICMgaWQgb2YgYnJhbmNoIGluIHRoZSBzb3VyY2UKLSAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorY2xhc3MgTGF5ZXJTb3VyY2Uob2JqZWN0KToKKyAgICAiIiIgV2hlcmUgdGhlIGxheWVyIG1ldGFkYXRhIGNhbWUgZnJvbSAiIiIKKyAgICBUWVBFX0xPQ0FMID0gMAorICAgIFRZUEVfTEFZRVJJTkRFWCA9IDEKKyAgICBUWVBFX0lNUE9SVEVEID0gMgorICAgIFRZUEVfQlVJTEQgPSAzCiAKLSAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQotICAgIHNob3J0X2Rlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKQorICAgIFNPVVJDRV9UWVBFID0gKAorICAgICAgICAoVFlQRV9MT0NBTCwgImxvY2FsIiksCisgICAgICAgIChUWVBFX0xBWUVSSU5ERVgsICJsYXllcmluZGV4IiksCisgICAgICAgIChUWVBFX0lNUE9SVEVELCAiaW1wb3J0ZWQiKSwKKyAgICAgICAgKFRZUEVfQlVJTEQsICJidWlsZCIpLAorICAgICkKIAotICAgIGNsYXNzIE1ldGE6Ci0gICAgICAgIHZlcmJvc2VfbmFtZV9wbHVyYWwgPSAiQnJhbmNoZXMiCi0gICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoJ2xheWVyX3NvdXJjZScsICduYW1lJyksKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkKLQotICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYubmFtZQorICAgIGRlZiB0eXBlc19kaWN0KCk6CisgICAgICAgICIiIiBUdXJuIHRoZSBUWVBFUyBlbnVtcyBpbnRvIGEgc2ltcGxlIGRpY3Rpb25hcnkgIiIiCisgICAgICAgIGRpY3Rpb25hcnkgPSB7fQorICAgICAgICBmb3Iga2V5IGluIExheWVyU291cmNlLl9fZGljdF9fOgorICAgICAgICAgICAgaWYgIlRZUEUiIGluIGtleToKKyAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2tleV0gPSBnZXRhdHRyKExheWVyU291cmNlLCBrZXkpCisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5CiAKIAotIyBMYXllciBjbGFzcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVySXRlbQogY2xhc3MgTGF5ZXIobW9kZWxzLk1vZGVsKToKLSAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleShMYXllclNvdXJjZSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnb3QgdGhpcyBsYXllcgotICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGxheWVyIGluIHRoZSByZW1vdGUgc291cmNlCi0gICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsPVRydWUsIGRlZmF1bHQ9dGltZXpvbmUubm93KQogCiAgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCiAgICAgbGF5ZXJfaW5kZXhfdXJsID0gbW9kZWxzLlVSTEZpZWxkKCkKLSAgICB2Y3NfdXJsID0gR2l0VVJMRmllbGQoZGVmYXVsdCA9IE5vbmUsIG51bGwgPSBUcnVlKQotICAgIHZjc193ZWJfdXJsID0gbW9kZWxzLlVSTEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKLSAgICB2Y3Nfd2ViX3RyZWVfYmFzZV91cmwgPSBtb2RlbHMuVVJMRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQotICAgIHZjc193ZWJfZmlsZV9iYXNlX3VybCA9IG1vZGVscy5VUkxGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdmNzX3VybCA9IEdpdFVSTEZpZWxkKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKQorICAgIGxvY2FsX3NvdXJjZV9kaXIgPSBtb2RlbHMuVGV4dEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKyAgICB2Y3Nfd2ViX3VybCA9IG1vZGVscy5VUkxGaWVsZChudWxsPVRydWUsIGRlZmF1bHQ9Tm9uZSkKKyAgICB2Y3Nfd2ViX3RyZWVfYmFzZV91cmwgPSBtb2RlbHMuVVJMRmllbGQobnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpCisgICAgdmNzX3dlYl9maWxlX2Jhc2VfdXJsID0gbW9kZWxzLlVSTEZpZWxkKG51bGw9VHJ1ZSwgZGVmYXVsdD1Ob25lKQogCi0gICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoaGVscF90ZXh0PSdPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGF5ZXInLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCi0gICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKyAgICBzdW1tYXJ5ID0gbW9kZWxzLlRleHRGaWVsZChoZWxwX3RleHQ9J09uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBsYXllcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKG51bGw9VHJ1ZSwgZGVmYXVsdD1Ob25lKQogCiAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzIC8gJXMgIiAlIChzZWxmLm5hbWUsIHNlbGYubGF5ZXJfc291cmNlKQotCi0gICAgY2xhc3MgTWV0YToKLSAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgibGF5ZXJfc291cmNlIiwgInVwX2lkIiksICgibGF5ZXJfc291cmNlIiwgIm5hbWUiKSkKKyAgICAgICAgcmV0dXJuICIlcyAvICVzICIgJSAoc2VsZi5uYW1lLCBzZWxmLnN1bW1hcnkpCiAKIAotIyBMYXllckNvbW1pdCBjbGFzcyBpcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVyQnJhbmNoCiBjbGFzcyBMYXllcl9WZXJzaW9uKG1vZGVscy5Nb2RlbCk6CiAgICAgIiIiCiAgICAgQSBMYXllcl9WZXJzaW9uIGVpdGhlciBiZWxvbmdzIHRvIGEgc2luZ2xlIHByb2plY3Qgb3Igbm8gcHJvamVjdAogICAgICIiIgotICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsibGF5ZXJfX25hbWUiLCAibGF5ZXJfX3N1bW1hcnkiLCAibGF5ZXJfX2Rlc2NyaXB0aW9uIiwgImxheWVyX192Y3NfdXJsIiwgImRpcnBhdGgiLCAidXBfYnJhbmNoX19uYW1lIiwgImNvbW1pdCIsICJicmFuY2giXQotICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9idWlsZCcsIGRlZmF1bHQgPSBOb25lLCBudWxsID0gVHJ1ZSkKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbImxheWVyX19uYW1lIiwgImxheWVyX19zdW1tYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxheWVyX19kZXNjcmlwdGlvbiIsICJsYXllcl9fdmNzX3VybCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIiwgInJlbGVhc2VfX25hbWUiLCAiY29tbWl0IiwgImJyYW5jaCJdCisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkLCByZWxhdGVkX25hbWU9J2xheWVyX3ZlcnNpb25fYnVpbGQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpCisKICAgICBsYXllciA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyLCByZWxhdGVkX25hbWU9J2xheWVyX3ZlcnNpb25fbGF5ZXInKQogCi0gICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJTb3VyY2UsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgICAgICAgICAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnZXQgdGhpcyBMYXllciBWZXJzaW9uCi0gICAgdXBfaWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICMgaWQgb2YgbGF5ZXJicmFuY2ggaW4gdGhlIHJlbW90ZSBzb3VyY2UKLSAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQotICAgIHVwX2JyYW5jaCA9IG1vZGVscy5Gb3JlaWduS2V5KEJyYW5jaCwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorICAgIGxheWVyX3NvdXJjZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1MYXllclNvdXJjZS5TT1VSQ0VfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MCkKIAotICAgIGJyYW5jaCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD04MCkgICAgICAgICAgICAjIExheWVyQnJhbmNoLmFjdHVhbF9icmFuY2gKLSAgICBjb21taXQgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKSAgICAgICAgICAgIyBMYXllckJyYW5jaC52Y3NfbGFzdF9yZXYKLSAgICBkaXJwYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAjIExheWVyQnJhbmNoLnZjc19zdWJkaXIKLSAgICBwcmlvcml0eSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdCA9IDApICAgICAgICAgIyBpZiAtMSwgdGhpcyBpcyBhIGRlZmF1bHQgbGF5ZXIKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbD1UcnVlLCBkZWZhdWx0PXRpbWV6b25lLm5vdykKIAotICAgIGxvY2FsX3BhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTEwMjQsIGRlZmF1bHQgPSAiLyIpICAjIHdoZXJlIHRoaXMgbGF5ZXIgd2FzIGNoZWNrZWQtb3V0CisgICAgIyBUbyB3aGljaCBtZXRhZGF0YSByZWxlYXNlIGRvZXMgdGhpcyBsYXllciB2ZXJzaW9uIGJlbG9uZyB0bworICAgIHJlbGVhc2UgPSBtb2RlbHMuRm9yZWlnbktleShSZWxlYXNlLCBudWxsPVRydWUsIGRlZmF1bHQ9Tm9uZSkKIAotICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleSgnUHJvamVjdCcsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAjIFNldCBpZiB0aGlzIGxheWVyIGlzIHByb2plY3Qtc3BlY2lmaWM7IGFsd2F5cyBzZXQgZm9yIGltcG9ydGVkIGxheWVycywgYW5kIHByb2plY3Qtc2V0IGJyYW5jaGVzCisgICAgYnJhbmNoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTgwKQorICAgIGNvbW1pdCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgIyBJZiB0aGUgbGF5ZXIgaXMgaW4gYSBzdWJkaXIKKyAgICBkaXJwYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpCiAKLSAgICAjIGNvZGUgbGlmdGVkLCB3aXRoIGFkYXB0YXRpb25zLCBmcm9tIHRoZSBsYXllcmluZGV4LXdlYiBhcHBsaWNhdGlvbiBodHRwczovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbGF5ZXJpbmRleC13ZWIvCisgICAgIyBpZiAtMSwgdGhpcyBpcyBhIGRlZmF1bHQgbGF5ZXIKKyAgICBwcmlvcml0eSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQorCisgICAgIyB3aGVyZSB0aGlzIGxheWVyIGV4aXN0cyBvbiB0aGUgZmlsZXN5c3RlbQorICAgIGxvY2FsX3BhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTEwMjQsIGRlZmF1bHQ9Ii8iKQorCisgICAgIyBTZXQgaWYgdGhpcyBsYXllciBpcyByZXN0cmljdGVkIHRvIGEgcGFydGljdWxhciBwcm9qZWN0CisgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KCdQcm9qZWN0JywgbnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpCisKKyAgICAjIGNvZGUgbGlmdGVkLCB3aXRoIGFkYXB0YXRpb25zLCBmcm9tIHRoZSBsYXllcmluZGV4LXdlYiBhcHBsaWNhdGlvbgorICAgICMgaHR0cHM6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2xheWVyaW5kZXgtd2ViLwogICAgIGRlZiBfaGFuZGxlX3VybF9wYXRoKHNlbGYsIGJhc2VfdXJsLCBwYXRoKToKICAgICAgICAgaW1wb3J0IHJlLCBwb3NpeHBhdGgKICAgICAgICAgaWYgYmFzZV91cmw6CkBAIC0xNDIyLDcgKzE0MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gc2VsZi5kaXJwYXRoCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBwYXRoCi0gICAgICAgICAgICBicmFuY2huYW1lID0gc2VsZi51cF9icmFuY2gubmFtZQorICAgICAgICAgICAgYnJhbmNobmFtZSA9IHNlbGYucmVsZWFzZS5uYW1lCiAgICAgICAgICAgICB1cmwgPSBiYXNlX3VybC5yZXBsYWNlKCclYnJhbmNoJScsIGJyYW5jaG5hbWUpCiAKICAgICAgICAgICAgICMgSWYgdGhlcmUncyBhICUgaW4gdGhlIHBhdGggKGUuZy4gYSB3aWxkY2FyZCBiYmFwcGVuZCkgd2UgbmVlZCB0byBlbmNvZGUgaXQKQEAgLTE0NDcsMjMgKzE0NTYsMTkgQEAKICAgICBkZWYgZ2V0X3Zjc19maWxlX2xpbmtfdXJsKHNlbGYsIGZpbGVfcGF0aD0iIik6CiAgICAgICAgIGlmIHNlbGYubGF5ZXIudmNzX3dlYl9maWxlX2Jhc2VfdXJsIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX3VybF9wYXRoKHNlbGYubGF5ZXIudmNzX3dlYl9maWxlX2Jhc2VfdXJsLCBmaWxlX3BhdGgpCisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdXJsX3BhdGgoc2VsZi5sYXllci52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoKQogCiAgICAgZGVmIGdldF92Y3NfZGlycGF0aF9saW5rX3VybChzZWxmKToKICAgICAgICAgaWYgc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdXJsX3BhdGgoc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwsICcnKQogCi0gICAgZGVmIGdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZiwgcHJvamVjdCk6Ci0gICAgICAgIGxheWVyX3ZlcnNpb25zID0gcHJvamVjdC5nZXRfYWxsX2NvbXBhdGlibGVfbGF5ZXJfdmVyc2lvbnMoKQotICAgICAgICBmaWx0ZXJlZCA9IGxheWVyX3ZlcnNpb25zLmZpbHRlcihsYXllcl9fbmFtZSA9IHNlbGYubGF5ZXIubmFtZSkKLSAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm9yZGVyX2J5KCItbGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcHJpb3JpdHkiKQotCiAgICAgZGVmIGdldF92Y3NfcmVmZXJlbmNlKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmJyYW5jaCBpcyBub3QgTm9uZSBhbmQgbGVuKHNlbGYuYnJhbmNoKSA+IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5icmFuY2gKLSAgICAgICAgaWYgc2VsZi51cF9icmFuY2ggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi51cF9icmFuY2gubmFtZQorICAgICAgICBpZiBzZWxmLnJlbGVhc2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWxlYXNlLm5hbWUKICAgICAgICAgaWYgc2VsZi5jb21taXQgaXMgbm90IE5vbmUgYW5kIGxlbihzZWxmLmNvbW1pdCkgPiAwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0CiAgICAgICAgIHJldHVybiAnTi9BJwpAQCAtMTQ5MSwyMCArMTQ5NiwyMyBAQAogICAgICAgICByZXR1cm4gc29ydGVkKHJlc3VsdCwga2V5PWxhbWJkYSB4OiB4LmxheWVyLm5hbWUpCiAKICAgICBkZWYgX191bmljb2RlX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiJWQgJXMgKFZDUyAlcywgUHJvamVjdCAlcykiICUgKHNlbGYucGssIHN0cihzZWxmLmxheWVyKSwgc2VsZi5nZXRfdmNzX3JlZmVyZW5jZSgpLCBzZWxmLmJ1aWxkLnByb2plY3QgaWYgc2VsZi5idWlsZCBpcyBub3QgTm9uZSBlbHNlICJObyBwcm9qZWN0IikKKyAgICAgICAgcmV0dXJuICgiaWQgJWQgYmVsb25ncyB0byBsYXllcjogJXMiICUgKHNlbGYucGssIHNlbGYubGF5ZXIubmFtZSkpCiAKLSAgICBjbGFzcyBNZXRhOgotICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoImxheWVyX3NvdXJjZSIsICJ1cF9pZCIpCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVsZWFzZToKKyAgICAgICAgICAgIHJlbGVhc2UgPSBzZWxmLnJlbGVhc2UubmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVsZWFzZSA9ICJObyByZWxlYXNlIHNldCIKKworICAgICAgICByZXR1cm4gIiVkICVzICglcykiICUgKHNlbGYucGssIHNlbGYubGF5ZXIubmFtZSwgcmVsZWFzZSkKKwogCiBjbGFzcyBMYXllclZlcnNpb25EZXBlbmRlbmN5KG1vZGVscy5Nb2RlbCk6Ci0gICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJTb3VyY2UsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICMgZnJvbSB3aGVyZSBkaWQgd2UgZ290IHRoaXMgbGF5ZXIKLSAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBsYXllcmJyYW5jaCBpbiB0aGUgcmVtb3RlIHNvdXJjZQogCi0gICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIHJlbGF0ZWRfbmFtZT0iZGVwZW5kZW5jaWVzIikKLSAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJfVmVyc2lvbiwgcmVsYXRlZF9uYW1lPSJkZXBlbmRlZXMiKQotCi0gICAgY2xhc3MgTWV0YToKLSAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKQorICAgIGxheWVyX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleShMYXllcl9WZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkX25hbWU9ImRlcGVuZGVuY2llcyIpCisgICAgZGVwZW5kc19vbiA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRfbmFtZT0iZGVwZW5kZWVzIikKIAogY2xhc3MgUHJvamVjdExheWVyKG1vZGVscy5Nb2RlbCk6CiAgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KFByb2plY3QpCkBAIC0xNTg1LDYgKzE1OTMsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShyZWNpcGVfaW5jbHVkZXM9c2VsZikpICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+UShyZWNpcGVfZXhjbHVkZXM9c2VsZikpCiAKKyAgICBkZWYgZ2V0X2Jhc2VfcmVjaXBlX2ZpbGUoc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgYmFzZSByZWNpcGUgZmlsZSBwYXRoIGlmIGl0IGV4aXN0cyBvbiB0aGUgZmlsZSBzeXN0ZW0iIiIKKyAgICAgICAgcGF0aF9zY2hlbWFfb25lID0gIiVzLyVzIiAlIChzZWxmLmJhc2VfcmVjaXBlLmxheWVyX3ZlcnNpb24uZGlycGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJhc2VfcmVjaXBlLmZpbGVfcGF0aCkKKworICAgICAgICBwYXRoX3NjaGVtYV90d28gPSBzZWxmLmJhc2VfcmVjaXBlLmZpbGVfcGF0aAorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGhfc2NoZW1hX29uZSk6CisgICAgICAgICAgICByZXR1cm4gcGF0aF9zY2hlbWFfb25lCisKKyAgICAgICAgIyBUaGUgcGF0aCBtYXkgbm93IGJlIHRoZSBmdWxsIHBhdGggaWYgdGhlIHJlY2lwZSBoYXMgYmVlbiBidWlsdAorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoX3NjaGVtYV90d28pOgorICAgICAgICAgICAgcmV0dXJuIHBhdGhfc2NoZW1hX3R3bworCisgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgZ2VuZXJhdGVfcmVjaXBlX2ZpbGVfY29udGVudHMoc2VsZik6CiAgICAgICAgICIiIkdlbmVyYXRlIHRoZSBjb250ZW50cyBmb3IgdGhlIHJlY2lwZSBmaWxlLiIiIgpAQCAtMTU5OSwxNyArMTYyMiwxNiBAQAogICAgICAgICAgICAgIyBXZSBhZGQgYWxsIHRoZSBrbm93biBwYWNrYWdlcyB0byBiZSBidWlsdCBieSB0aGlzIHJlY2lwZSBhcGFydAogICAgICAgICAgICAgIyBmcm9tIGxvY2FsZSBwYWNrYWdlcyB3aGljaCBhcmUgYXJlIGNvbnRyb2xsZWQgd2l0aCBJTUFHRV9MSU5HVUFTLgogICAgICAgICAgICAgZm9yIHBrZyBpbiBzZWxmLmdldF9hbGxfcGFja2FnZXMoKS5leGNsdWRlKAotICAgICAgICAgICAgICAgIG5hbWVfX2ljb250YWlucz0ibG9jYWxlIik6CisgICAgICAgICAgICAgICAgICAgIG5hbWVfX2ljb250YWlucz0ibG9jYWxlIik6CiAgICAgICAgICAgICAgICAgcGFja2FnZXNfY29uZiArPSBwa2cubmFtZSsnICcKIAogICAgICAgICBwYWNrYWdlc19jb25mICs9ICJcIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYmFzZV9yZWNpcGUgPSBvcGVuKCIlcy8lcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmJhc2VfcmVjaXBlLmxheWVyX3ZlcnNpb24uZGlycGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYXNlX3JlY2lwZS5maWxlX3BhdGgpLCAncicpLnJlYWQoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICMgVGhlIHBhdGggbWF5IG5vdyBiZSB0aGUgZnVsbCBwYXRoIGlmIHRoZSByZWNpcGUgaGFzIGJlZW4gYnVpbHQKLSAgICAgICAgICAgIGJhc2VfcmVjaXBlID0gb3BlbihzZWxmLmJhc2VfcmVjaXBlLmZpbGVfcGF0aCwgJ3InKS5yZWFkKCkKKworICAgICAgICBiYXNlX3JlY2lwZV9wYXRoID0gc2VsZi5nZXRfYmFzZV9yZWNpcGVfZmlsZSgpCisgICAgICAgIGlmIGJhc2VfcmVjaXBlX3BhdGg6CisgICAgICAgICAgICBiYXNlX3JlY2lwZSA9IG9wZW4oYmFzZV9yZWNpcGVfcGF0aCwgJ3InKS5yZWFkKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkJhc2VkIG9uIHJlY2lwZSBmaWxlIG5vdCBmb3VuZCIpCiAKICAgICAgICAgIyBBZGQgYSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4gdGhlIHJlY2lwZSB3ZSBoYXZlIGJhc2VkIGEgY3VzdG9tIGltYWdlCiAgICAgICAgICMgcmVjaXBlIG9uIHJlcXVpcmVzIGFub3RoZXIgcmVjaXBlLgpAQCAtMTYxOCw4ICsxNjQwLDggQEAKICAgICAgICAgIyAicmVxdWlyZSByZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYiIKIAogICAgICAgICByZXFfc2VhcmNoID0gcmUuc2VhcmNoKHInKHJlcXVpcmVccyspKC4rXC5iYlxzKiQpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9yZWNpcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLk1VTFRJTElORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3JlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5NVUxUSUxJTkUpCiAgICAgICAgIGlmIHJlcV9zZWFyY2g6CiAgICAgICAgICAgICByZXF1aXJlX2ZpbGVuYW1lID0gcmVxX3NlYXJjaC5ncm91cCgyKS5zdHJpcCgpCiAKQEAgLTE2MjksMTkgKzE2NTEsMTkgQEAKIAogICAgICAgICAgICAgbmV3X3JlcXVpcmVfbGluZSA9ICJyZXF1aXJlICVzIiAlIGNvcnJlY3RlZF9sb2NhdGlvbgogCi0gICAgICAgICAgICBiYXNlX3JlY2lwZSA9IFwKLSAgICAgICAgICAgICAgICAgICAgYmFzZV9yZWNpcGUucmVwbGFjZShyZXFfc2VhcmNoLmdyb3VwKDApLCBuZXdfcmVxdWlyZV9saW5lKQorICAgICAgICAgICAgYmFzZV9yZWNpcGUgPSBiYXNlX3JlY2lwZS5yZXBsYWNlKHJlcV9zZWFyY2guZ3JvdXAoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3JlcXVpcmVfbGluZSkKIAotCi0gICAgICAgIGluZm8gPSB7ImRhdGUiIDogdGltZXpvbmUubm93KCkuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIiksCi0gICAgICAgICAgICAgICAgImJhc2VfcmVjaXBlIiA6IGJhc2VfcmVjaXBlLAotICAgICAgICAgICAgICAgICJyZWNpcGVfbmFtZSIgOiBzZWxmLm5hbWUsCi0gICAgICAgICAgICAgICAgImJhc2VfcmVjaXBlX25hbWUiIDogc2VsZi5iYXNlX3JlY2lwZS5uYW1lLAotICAgICAgICAgICAgICAgICJsaWNlbnNlIiA6IHNlbGYubGljZW5zZSwKLSAgICAgICAgICAgICAgICAic3VtbWFyeSIgOiBzZWxmLnN1bW1hcnksCi0gICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6IHNlbGYuZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgInBhY2thZ2VzX2NvbmYiIDogcGFja2FnZXNfY29uZi5zdHJpcCgpLAotICAgICAgICAgICAgICAgfQorICAgICAgICBpbmZvID0geworICAgICAgICAgICAgImRhdGUiOiB0aW1lem9uZS5ub3coKS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiKSwKKyAgICAgICAgICAgICJiYXNlX3JlY2lwZSI6IGJhc2VfcmVjaXBlLAorICAgICAgICAgICAgInJlY2lwZV9uYW1lIjogc2VsZi5uYW1lLAorICAgICAgICAgICAgImJhc2VfcmVjaXBlX25hbWUiOiBzZWxmLmJhc2VfcmVjaXBlLm5hbWUsCisgICAgICAgICAgICAibGljZW5zZSI6IHNlbGYubGljZW5zZSwKKyAgICAgICAgICAgICJzdW1tYXJ5Ijogc2VsZi5zdW1tYXJ5LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogc2VsZi5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICJwYWNrYWdlc19jb25mIjogcGFja2FnZXNfY29uZi5zdHJpcCgpCisgICAgICAgIH0KIAogICAgICAgICByZWNpcGVfY29udGVudHMgPSAoIiMgT3JpZ2luYWwgcmVjaXBlICUoYmFzZV9yZWNpcGVfbmFtZSlzIFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUoYmFzZV9yZWNpcGUpc1xuXG4iCkBAIC0xNzE3LDYgKzE3MzksMTEgQEAKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICBsb2dnZXIud2FybmluZygiUHJvYmxlbSB3aXRoIGNhY2hlIGJhY2tlbmQ6IEZhaWxlZCB0byBjbGVhciBjYWNoZTogJXMiICUgZSkKIAorZGVmIHNpZ25hbF9ydW5idWlsZHMoKToKKyAgICAiIiJTZW5kIFNJR1VTUjEgdG8gcnVuYnVpbGRzIHByb2Nlc3MiIiIKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG9zLmdldGVudignQlVJTERESVInKSwgJy5ydW5idWlsZHMucGlkJykpIGFzIHBpZGY6CisgICAgICAgIG9zLmtpbGwoaW50KHBpZGYucmVhZCgpKSwgU0lHVVNSMSkKKwogZGphbmdvLmRiLm1vZGVscy5zaWduYWxzLnBvc3Rfc2F2ZS5jb25uZWN0KGludmFsaWRhdGVfY2FjaGUpCiBkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMucG9zdF9kZWxldGUuY29ubmVjdChpbnZhbGlkYXRlX2NhY2hlKQogZGphbmdvLmRiLm1vZGVscy5zaWduYWxzLm0ybV9jaGFuZ2VkLmNvbm5lY3QoaW52YWxpZGF0ZV9jYWNoZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS90ZXN0cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS90ZXN0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5MjY2ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKLSMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KLSMKLSMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIENvcnBvcmF0aW9uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0jIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi0iIiJUZXN0IGNhc2VzIGZvciBUb2FzdGVyIE9STS4iIiIKLQotZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UsIFRyYW5zYWN0aW9uVGVzdENhc2UKLWZyb20gb3JtLm1vZGVscyBpbXBvcnQgTG9jYWxMYXllclNvdXJjZSwgTGF5ZXJJbmRleExheWVyU291cmNlLCBJbXBvcnRlZExheWVyU291cmNlLCBMYXllclNvdXJjZQotZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCcmFuY2gsIExheWVyVmVyc2lvbkRlcGVuZGVuY3kKLQotZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBMYXllciwgTGF5ZXJfVmVyc2lvbiwgQnJhbmNoLCBQcm9qZWN0TGF5ZXIKLWZyb20gb3JtLm1vZGVscyBpbXBvcnQgUmVsZWFzZSwgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHksIEJpdGJha2VWZXJzaW9uCi0KLWZyb20gZGphbmdvLmRiIGltcG9ydCBJbnRlZ3JpdHlFcnJvcgotCi1pbXBvcnQgb3MKLQotIyBzZXQgVFRTX0xBWUVSX0lOREVYIHRvIHRoZSBiYXNlIHVybCB0byB1c2UgYSBkaWZmZXJlbnQgaW5zdGFuY2Ugb2YgdGhlIGxheWVyIGluZGV4Ci0KLWNsYXNzIExheWVyU291cmNlVmVyaWZ5SW5oZXJpdGFuY2VTYXZlTG9hZChUZXN0Q2FzZSk6Ci0gICAgIiIiCi0gICAgVGVzdHMgdG8gdmVyaWZ5IGluaGVyaXRhbmNlIGZvciB0aGUgTGF5ZXJTb3VyY2UgcHJveHktaW5oZXJpdGFuY2UgY2xhc3Nlcy4KLSAgICAiIiIKLSAgICBkZWYgdGVzdF9vYmplY3RfY3JlYXRpb24oc2VsZik6Ci0gICAgICAgICIiIlRlc3QgTGF5ZXJTb3VyY2Ugb2JqZWN0IGNyZWF0aW9uLiIiIgotICAgICAgICBmb3IgbmFtZSwgc291cmNldHlwZSBpbiBbKCJhMSIsIExheWVyU291cmNlLlRZUEVfTE9DQUwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJhMiIsIExheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImEzIiwgTGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCldOgotICAgICAgICAgICAgTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUobmFtZT1uYW1lLCBzb3VyY2V0eXBlPXNvdXJjZXR5cGUpCi0KLSAgICAgICAgb2JqZWN0cyA9IExheWVyU291cmNlLm9iamVjdHMuYWxsKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqZWN0c1swXSwgTG9jYWxMYXllclNvdXJjZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iamVjdHNbMV0sIExheWVySW5kZXhMYXllclNvdXJjZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iamVjdHNbMl0sIEltcG9ydGVkTGF5ZXJTb3VyY2UpKQotCi0gICAgZGVmIHRlc3RfZHVwbGljYXRlX2Vycm9yKHNlbGYpOgotICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGR1cGxpY2F0ZSBMYXllclNvdXJjZSBvYmplY3RzLiIiIgotICAgICAgICBzdHlwZSA9IExheWVyU291cmNlLlRZUEVfTE9DQUwKLSAgICAgICAgTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUobmFtZT0iYTEiLCBzb3VyY2V0eXBlPXN0eXBlKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEludGVncml0eUVycm9yKToKLSAgICAgICAgICAgIExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImExIiwgc291cmNldHlwZT1zdHlwZSkKLQotCi1jbGFzcyBMSUxTVXBkYXRlVGVzdENhc2UoVHJhbnNhY3Rpb25UZXN0Q2FzZSk6Ci0gICAgIiIiVGVzdCBMYXllciBTb3VyY2UgdXBkYXRlLiIiIgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAiIiJDcmVhdGUgcmVsZWFzZS4iIiIKLSAgICAgICAgYmJ2ID0gQml0YmFrZVZlcnNpb24ub2JqZWN0cy5jcmVhdGUoXAotICAgICAgICAgICAgICAgICAgbmFtZT0ibWFzdGVyIiwgZ2l0dXJsPSJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIikKLSAgICAgICAgUmVsZWFzZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJkZWZhdWx0LXJlbGVhc2UiLCBiaXRiYWtlX3ZlcnNpb249YmJ2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9uYW1lPSJtYXN0ZXIiKQotCi0gICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgotICAgICAgICAiIiJDaGVjayBpZiBMYXllclNvdXJjZS51cGRhdGUgY2FuIGZldGNoIGJyYW5jaGVzLiIiIgotICAgICAgICB1cmwgPSBvcy5nZXRlbnYoIlRUU19MQVlFUl9JTkRFWCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvIikKLQotICAgICAgICBsc29iaiA9IExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKFwKLSAgICAgICAgICAgICAgICAgICAgbmFtZT0iYjEiLCBzb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWCwKLSAgICAgICAgICAgICAgICAgICAgYXBpdXJsPXVybCArICJsYXllcmluZGV4L2FwaS8iKQotICAgICAgICBsc29iai51cGRhdGUoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobHNvYmouYnJhbmNoX3NldC5hbGwoKS5jb3VudCgpID4gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJubyBicmFuY2hlcyBmZXRjaGVkIikKLQotY2xhc3MgTGF5ZXJWZXJzaW9uRXF1aXZhbGVuY2VUZXN0Q2FzZShUZXN0Q2FzZSk6Ci0gICAgIiIiVmVyaWZ5IExheWVyX1ZlcnNpb24gcHJpb3JpdHkgc2VsZWN0aW9uLiIiIgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAiIiJDcmVhdGUgcmVxdWlyZWQgb2JqZWN0cy4iIiIKLSAgICAgICAgIyBjcmVhdGUgbGF5ZXIgc291cmNlCi0gICAgICAgIHNlbGYubHNyYyA9IExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImR1bW15LWxheWVyc291cmNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xPQ0FMKQotICAgICAgICAjIGNyZWF0ZSByZWxlYXNlCi0gICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKFwKLSAgICAgICAgICAgICAgICAgIG5hbWU9Im1hc3RlciIsIGdpdHVybD0iZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIpCi0gICAgICAgIHNlbGYucmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5jcmVhdGUobmFtZT0iZGVmYXVsdC1yZWxlYXNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249YmJ2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9uYW1lPSJtYXN0ZXIiKQotICAgICAgICAjIGF0dGFjaCBsYXllciBzb3VyY2UgdG8gcmVsZWFzZQotICAgICAgICBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eS5vYmplY3RzLmNyZWF0ZShcCi0gICAgICAgICAgICByZWxlYXNlPXNlbGYucmVsZWFzZSwgbGF5ZXJfc291cmNlPXNlbGYubHNyYywgcHJpb3JpdHk9MSkKLQotICAgICAgICAjIGNyZWF0ZSBhIGxheWVyIHZlcnNpb24gZm9yIHRoZSBsYXllciBvbiB0aGUgc3BlY2lmaWVkIGJyYW5jaAotICAgICAgICBzZWxmLmxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT0ibWV0YS10ZXN0bGF5ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPXNlbGYubHNyYykKLSAgICAgICAgc2VsZi5icmFuY2ggPSBCcmFuY2gub2JqZWN0cy5jcmVhdGUobmFtZT0ibWFzdGVyIiwgbGF5ZXJfc291cmNlPXNlbGYubHNyYykKLSAgICAgICAgc2VsZi5sdmVyID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShcCi0gICAgICAgICAgICBsYXllcj1zZWxmLmxheWVyLCBsYXllcl9zb3VyY2U9c2VsZi5sc3JjLCB1cF9icmFuY2g9c2VsZi5icmFuY2gpCi0KLSAgICAgICAgIyBjcmVhdGUgcHJvamVjdCBhbmQgcHJvamVjdCBsYXllcgotICAgICAgICBzZWxmLnByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZT0idGVzdC1wcm9qZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2U9c2VsZi5yZWxlYXNlKQotICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcmNvbW1pdD1zZWxmLmx2ZXIpCi0KLSAgICAgICAgIyBjcmVhdGUgc3Bvb2YgbGF5ZXIgdGhhdCBzaG91bGQgbm90IGFwcGVhciBpbiB0aGUgc2VhcmNoIHJlc3VsdHMKLSAgICAgICAgbGF5ZXIgPSBMYXllci5vYmplY3RzLmNyZWF0ZShuYW1lPSJtZXRhLW5vdHZhbGlkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcl9zb3VyY2U9c2VsZi5sc3JjKQotICAgICAgICBzZWxmLmx2ZXIyID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShsYXllcj1sYXllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPXNlbGYubHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBfYnJhbmNoPXNlbGYuYnJhbmNoKQotCi0gICAgZGVmIHRlc3Rfc2luZ2xlX2xheWVyc291cmNlKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgV2hlbiB3ZSBoYXZlIGEgc2luZ2xlIGxheWVyIHZlcnNpb24sCi0gICAgICAgIGdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoKSBzaG91bGQgcmV0dXJuIGEgbGlzdCB3aXRoCi0gICAgICAgIGp1c3QgdGhpcyBsYXllcl92ZXJzaW9uLgotICAgICAgICAiIiIKLSAgICAgICAgZXF1aXZxcyA9IHNlbGYubHZlci5nZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHNlbGYucHJvamVjdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGVxdWl2cXMpLCBbc2VsZi5sdmVyXSkKLQotICAgIGRlZiB0ZXN0X2R1YWxfbGF5ZXJzb3VyY2Uoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBJZiB3ZSBoYXZlIHR3byBsYXllcnMgd2l0aCB0aGUgc2FtZSBuYW1lLCBmcm9tIGRpZmZlcmVudCBsYXllciBzb3VyY2VzLAotICAgICAgICB3ZSBleHBlY3QgYm90aCBsYXllcnMgaW4sIGluIGluY3JlYXNpbmcgcHJpb3JpdHkgb2YgdGhlIGxheWVyIHNvdXJjZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGxzcmMyID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUoXAotICAgICAgICAgICAgICAgICAgICBuYW1lPSJkdW1teS1sYXllcnNvdXJjZTIiLAotICAgICAgICAgICAgICAgICAgICBzb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfTE9DQUwsCi0gICAgICAgICAgICAgICAgICAgIGFwaXVybD0idGVzdCIpCi0KLSAgICAgICAgIyBhc3NpZ24gYSBsb3dlciBwcmlvcml0eSBmb3IgdGhlIHNlY29uZCBsYXllciBzb3VyY2UKLSAgICAgICAgc2VsZi5yZWxlYXNlLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5X3NldC5jcmVhdGUobGF5ZXJfc291cmNlPWxzcmMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT0yKQotCi0gICAgICAgICMgY3JlYXRlIGEgbmV3IGxheWVyX3ZlcnNpb24gZm9yIGEgbGF5ZXIgd2l0aCB0aGUgc2FtZSBuYW1lCi0gICAgICAgICMgY29taW5nIGZyb20gdGhlIHNlY29uZCBsYXllciBzb3VyY2UKLSAgICAgICAgbGF5ZXIyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT0ibWV0YS10ZXN0bGF5ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcl9zb3VyY2U9bHNyYzIpCi0gICAgICAgIGx2ZXIyID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShsYXllcj1sYXllcjIsIGxheWVyX3NvdXJjZT1sc3JjMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwX2JyYW5jaD1zZWxmLmJyYW5jaCkKLQotICAgICAgICAjIGV4cGVjdCB0d28gbGF5ZXIgdmVyc2lvbnMsIGluIHRoZSBwcmlvcml0eSBvcmRlcgotICAgICAgICBlcXVpdnFzID0gc2VsZi5sdmVyLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZi5wcm9qZWN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZXF1aXZxcyksIFtsdmVyMiwgc2VsZi5sdmVyXSkKLQotICAgIGRlZiB0ZXN0X2NvbXBhdGlibGVfbGF5ZXJfdmVyc2lvbnMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBXaGVuIHdlIGhhdmUgYSAyIGxheWVyIHZlcnNpb25zLCBnZXRfYWxsX2NvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCi0gICAgICAgIHNob3VsZCByZXR1cm4gYSBxdWVyeXNldCB3aXRoIGJvdGguCi0gICAgICAgICIiIgotICAgICAgICBjb21wYXRfbHYgPSBzZWxmLnByb2plY3QuZ2V0X2FsbF9jb21wYXRpYmxlX2xheWVyX3ZlcnNpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXBhdF9sdiksIFtzZWxmLmx2ZXIsIHNlbGYubHZlcjJdKQotCi0gICAgZGVmIHRlc3RfbGF5ZXJ2ZXJzaW9uX2dldF9hbGxkZXBzKHNlbGYpOgotICAgICAgICAiIiJUZXN0IExheWVyX1ZlcnNpb24uZ2V0X2FsbGRlcHMgQVBJLiIiIgotICAgICAgICBsdmVycyA9IHt9Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIG5hbWUgPSAibGF5ZXIlZCIgJSBpCi0gICAgICAgICAgICBsdmVyc1tuYW1lXSA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9TGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT1uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0PXNlbGYucHJvamVjdCkKLSAgICAgICAgICAgIGlmIGk6Ci0gICAgICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmNyZWF0ZShsYXllcl92ZXJzaW9uPWx2ZXJzWyJsYXllciVkIiAlIChpIC0gMSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbj1sdmVyc1tuYW1lXSkKLSAgICAgICAgICAgICAgICAjIENoZWNrIGRpbmFtaWNhbGx5IGFkZGVkIGRlcHMKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGx2ZXJzWydsYXllcjAnXS5nZXRfYWxsZGVwcyhzZWxmLnByb2plY3QuaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2x2ZXJzWydsYXllciVkJyAlIG5dIGZvciBuIGluIHJhbmdlKDEsIGkrMSldKQotCi0gICAgICAgICMgQ2hlY2sgY2hhaW4gb2YgZGVwcyBjcmVhdGVkIGluIHByZXZpb3VzIGxvb3AKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsdmVyc1snbGF5ZXIlZCcgJSBpXS5nZXRfYWxsZGVwcyhzZWxmLnByb2plY3QuaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbHZlcnNbJ2xheWVyJWQnICUgbl0gZm9yIG4gaW4gcmFuZ2UoaSsxLCAxMCldKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci9SRUFETUUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL1JFQURNRQppbmRleCA2M2U4MTY5Li42YjA5ZDIwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL1JFQURNRQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL1JFQURNRQpAQCAtNCwxNSArNCwxNiBAQAogCiBUaGUgc2ltcGxlc3Qgd2F5IHRvIGluc3RhbGwgdGhpcyBpcyB2aWEgcGlwOgogCi0gIHBpcCBpbnN0YWxsIHNlbGVuaXVtCisgIHBpcCBpbnN0YWxsIHNlbGVuaXVtPT0yLjUzLjIKIAotQWx0ZXJuYXRpdmVseSwgaWYgeW91IHVzZWQgcGlwIHRvIGluc3RhbGwgdGhlIGxpYnJhcmllcyByZXF1aXJlZCBieSBUb2FzdGVyLAotc2VsZW5pdW0gd2lsbCBhbHJlYWR5IGJlIGluc3RhbGxlZC4KK05vdGUgdGhhdCBpZiB5b3UgdXNlIG90aGVyIHZlcnNpb25zIG9mIFNlbGVuaXVtLCBzb21lIG9mIHRoZSB0ZXN0cyAoc3VjaCBhcwordGVzdHMuYnJvd3Nlci50ZXN0X2pzX3VuaXRfdGVzdHMuVGVzdEpzVW5pdFRlc3RzKSBtYXkgZmFpbCwgYXMgdGhlc2UgcmVseSBvbgorYSBTZWxlbml1bSB0ZXN0IHJlcG9ydCB3aXRoIGEgdmVyc2lvbi1zcGVjaWZpYyBmb3JtYXQuCiAKIFRvIHJ1biB0ZXN0cyBhZ2FpbnN0IENocm9tZToKIAogKiBEb3dubG9hZCBjaHJvbWVkcml2ZXIgZm9yIHlvdXIgaG9zdCBPUyBmcm9tCi0gIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21lZHJpdmVyL2Rvd25sb2Fkcy9saXN0CisgIGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9jaHJvbWVkcml2ZXIvZG93bmxvYWRzCiAqIE9uICpuaXggc3lzdGVtcywgcHV0IGNocm9tZWRyaXZlciBvbiBQQVRICiAqIE9uIFdpbmRvd3MsIHB1dCBjaHJvbWVkcml2ZXIuZXhlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBjaHJvbWUuZXhlCiAKQEAgLTIzLDE1ICsyNCwzMCBAQAogKiBPbiAqbml4IHN5c3RlbXMsIHB1dCBwaGFudG9tanMgb24gUEFUSAogKiBOb3QgdGVzdGVkIG9uIFdpbmRvd3MKIAotRmlyZWZveCBzaG91bGQgd29yayB3aXRob3V0IHJlcXVpcmluZyBhZGRpdGlvbmFsIHNvZnR3YXJlIHRvIGJlIGluc3RhbGxlZC4KK1RvIHJ1biB0ZXN0cyBhZ2FpbnN0IEZpcmVmb3gsIHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIHRoZSBNYXJpb25ldHRlIGRyaXZlciwKK2RlcGVuZGluZyBvbiBob3cgbmV3IHlvdXIgdmVyc2lvbiBvZiBGaXJlZm94IGlzLiBPbmUgY2x1ZSB0aGF0IHlvdSBuZWVkIHRvIGRvCit0aGlzIGlzIGlmIHlvdSBzZWUgYW4gZXhjZXB0aW9uIGxpa2U6CiAKLVRoZSB0ZXN0IGNhc2Ugd2lsbCBpbnN0YW50aWF0ZSBhIFNlbGVuaXVtIGRyaXZlciBzZXQgYnkgdGhlCisgIHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zLldlYkRyaXZlckV4Y2VwdGlvbjogTWVzc2FnZTogVGhlIGJyb3dzZXIKKyAgYXBwZWFycyB0byBoYXZlIGV4aXRlZCBiZWZvcmUgd2UgY291bGQgY29ubmVjdC4gSWYgeW91IHNwZWNpZmllZAorICBhIGxvZ19maWxlIGluIHRoZSBGaXJlZm94QmluYXJ5IGNvbnN0cnVjdG9yLCBjaGVjayBpdCBmb3IgZGV0YWlscy4KKworU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9RQS9NYXJpb25ldHRlL1dlYkRyaXZlcgorZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuIEVuc3VyZSB0aGF0IHRoZSBNYXJpb25ldHRlIGV4ZWN1dGFibGUgKHJlbmFtZWQKK2FzIHdpcmVzIG9uIExpbnV4IG9yIHdpcmVzLmV4ZSBvbiBXaW5kb3dzKSBpcyBvbiB5b3VyIFBBVEg7IGFuZCB1c2UgIm1hcmlvbmV0dGUiCithcyB0aGUgYnJvd3NlciBzdHJpbmcgcGFzc2VkIHZpYSBUT0FTVEVSX1RFU1RTX0JST1dTRVIgKHNlZSBiZWxvdykuCisKKyhOb3RlOiBUaGUgVG9hc3RlciB0ZXN0cyBoYXZlIGJlZW4gY2hlY2tlZCBhZ2FpbnN0IEZpcmVmb3ggNDcgd2l0aCB0aGUKK01hcmlvbmV0dGUgZHJpdmVyLikKKworVGhlIHRlc3QgY2FzZXMgd2lsbCBpbnN0YW50aWF0ZSBhIFNlbGVuaXVtIGRyaXZlciBzZXQgYnkgdGhlCiBUT0FTVEVSX1RFU1RTX0JST1dTRVIgZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIENocm9tZSBpZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQuCiAKIEF2YWlsYWJsZSBkcml2ZXJzOgogCiAqIGNocm9tZSAoZGVmYXVsdCkKICogZmlyZWZveAorKiBtYXJpb25ldHRlIChmb3IgbmV3ZXIgRmlyZWZveGVzKQogKiBpZQogKiBwaGFudG9tanMKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci9zZWxlbml1bV9oZWxwZXJzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci9zZWxlbml1bV9oZWxwZXJzLnB5CmluZGV4IDU2ZGJlMmIuLjA4NzExZTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvc2VsZW5pdW1faGVscGVycy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3NlbGVuaXVtX2hlbHBlcnMucHkKQEAgLTI3LDE3OCArMjcsOCBAQAogSGVscGVyIG1ldGhvZHMgZm9yIGNyZWF0aW5nIFRvYXN0ZXIgU2VsZW5pdW0gdGVzdHMgd2hpY2ggcnVuIHdpdGhpbgogdGhlIGNvbnRleHQgb2YgRGphbmdvIHVuaXQgdGVzdHMuCiAiIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgdGltZQotCiBmcm9tIGRqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLnRlc3RpbmcgaW1wb3J0IFN0YXRpY0xpdmVTZXJ2ZXJUZXN0Q2FzZQotZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCi1mcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0LnVpIGltcG9ydCBXZWJEcml2ZXJXYWl0Ci1mcm9tIHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBcCi0gICAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbiwgVGltZW91dEV4Y2VwdGlvbgorZnJvbSB0ZXN0cy5icm93c2VyLnNlbGVuaXVtX2hlbHBlcnNfYmFzZSBpbXBvcnQgU2VsZW5pdW1UZXN0Q2FzZUJhc2UKIAotZGVmIGNyZWF0ZV9zZWxlbml1bV9kcml2ZXIoYnJvd3Nlcj0nY2hyb21lJyk6Ci0gICAgIyBzZXQgZGVmYXVsdCBicm93c2VyIHN0cmluZyBiYXNlZCBvbiBlbnYgKGlmIGF2YWlsYWJsZSkKLSAgICBlbnZfYnJvd3NlciA9IG9zLmVudmlyb24uZ2V0KCdUT0FTVEVSX1RFU1RTX0JST1dTRVInKQotICAgIGlmIGVudl9icm93c2VyOgotICAgICAgICBicm93c2VyID0gZW52X2Jyb3dzZXIKLQotICAgIGlmIGJyb3dzZXIgPT0gJ2Nocm9tZSc6Ci0gICAgICAgIHJldHVybiB3ZWJkcml2ZXIuQ2hyb21lKAotICAgICAgICAgICAgc2VydmljZV9hcmdzPVsiLS12ZXJib3NlIiwgIi0tbG9nLXBhdGg9c2VsZW5pdW0ubG9nIl0KLSAgICAgICAgKQotICAgIGVsaWYgYnJvd3NlciA9PSAnZmlyZWZveCc6Ci0gICAgICAgIHJldHVybiB3ZWJkcml2ZXIuRmlyZWZveCgpCi0gICAgZWxpZiBicm93c2VyID09ICdpZSc6Ci0gICAgICAgIHJldHVybiB3ZWJkcml2ZXIuSWUoKQotICAgIGVsaWYgYnJvd3NlciA9PSAncGhhbnRvbWpzJzoKLSAgICAgICAgcmV0dXJuIHdlYmRyaXZlci5QaGFudG9tSlMoKQotICAgIGVsc2U6Ci0gICAgICAgIG1zZyA9ICdTZWxlbml1bSBkcml2ZXIgZm9yIGJyb3dzZXIgJXMgaXMgbm90IGF2YWlsYWJsZScgJSBicm93c2VyCi0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtc2cpCi0KLWNsYXNzIFdhaXQoV2ViRHJpdmVyV2FpdCk6Ci0gICAgIiIiCi0gICAgU3ViY2xhc3Mgb2YgV2ViRHJpdmVyV2FpdCB3aXRoIHByZWRldGVybWluZWQgdGltZW91dCBhbmQgcG9sbAotICAgIGZyZXF1ZW5jeS4gQWxzbyBkZWFscyB3aXRoIGEgd2lkZXIgdmFyaWV0eSBvZiBleGNlcHRpb25zLgotICAgICIiIgotICAgIF9USU1FT1VUID0gMTAKLSAgICBfUE9MTF9GUkVRVUVOQ1kgPSAwLjUKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkcml2ZXIpOgotICAgICAgICBzdXBlcihXYWl0LCBzZWxmKS5fX2luaXRfXyhkcml2ZXIsIHNlbGYuX1RJTUVPVVQsIHNlbGYuX1BPTExfRlJFUVVFTkNZKQotCi0gICAgZGVmIHVudGlsKHNlbGYsIG1ldGhvZCwgbWVzc2FnZT0nJyk6Ci0gICAgICAgICIiIgotICAgICAgICBDYWxscyB0aGUgbWV0aG9kIHByb3ZpZGVkIHdpdGggdGhlIGRyaXZlciBhcyBhbiBhcmd1bWVudCB1bnRpbCB0aGUKLSAgICAgICAgcmV0dXJuIHZhbHVlIGlzIG5vdCBGYWxzZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1ldGhvZChzZWxmLl9kcml2ZXIpCi0gICAgICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQotICAgICAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IFN0YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5fcG9sbCkKLSAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID4gZW5kX3RpbWU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICByYWlzZSBUaW1lb3V0RXhjZXB0aW9uKG1lc3NhZ2UpCi0KLSAgICBkZWYgdW50aWxfbm90KHNlbGYsIG1ldGhvZCwgbWVzc2FnZT0nJyk6Ci0gICAgICAgICIiIgotICAgICAgICBDYWxscyB0aGUgbWV0aG9kIHByb3ZpZGVkIHdpdGggdGhlIGRyaXZlciBhcyBhbiBhcmd1bWVudCB1bnRpbCB0aGUKLSAgICAgICAgcmV0dXJuIHZhbHVlIGlzIEZhbHNlLgotICAgICAgICAiIiIKLQotICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5fdGltZW91dAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbHVlID0gbWV0aG9kKHNlbGYuX2RyaXZlcikKLSAgICAgICAgICAgICAgICBpZiBub3QgdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQotICAgICAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICB0aW1lLnNsZWVwKHNlbGYuX3BvbGwpCi0gICAgICAgICAgICBpZiB0aW1lLnRpbWUoKSA+IGVuZF90aW1lOgotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgcmFpc2UgVGltZW91dEV4Y2VwdGlvbihtZXNzYWdlKQotCi1jbGFzcyBTZWxlbml1bVRlc3RDYXNlKFN0YXRpY0xpdmVTZXJ2ZXJUZXN0Q2FzZSk6Ci0gICAgIiIiCi0gICAgTkIgU3RhdGljTGl2ZVNlcnZlclRlc3RDYXNlIGlzIHVzZWQgYXMgdGhlIGJhc2UgdGVzdCBjYXNlIHNvIHRoYXQKLSAgICBzdGF0aWMgZmlsZXMgYXJlIHNlcnZlZCBjb3JyZWN0bHkgaW4gYSBTZWxlbml1bSB0ZXN0IHJ1biBjb250ZXh0OyBzZWUKLSAgICBodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS45L3JlZi9jb250cmliL3N0YXRpY2ZpbGVzLyNzcGVjaWFsaXplZC10ZXN0LWNhc2UtdG8tc3VwcG9ydC1saXZlLXRlc3RpbmcKLSAgICAiIiIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgICIiIiBDcmVhdGUgYSB3ZWJkcml2ZXIgZHJpdmVyIGF0IHRoZSBjbGFzcyBsZXZlbCAiIiIKLQotICAgICAgICBzdXBlcihTZWxlbml1bVRlc3RDYXNlLCBjbHMpLnNldFVwQ2xhc3MoKQotCi0gICAgICAgICMgaW5zdGFudGlhdGUgdGhlIFNlbGVuaXVtIHdlYmRyaXZlciBvbmNlIGZvciBhbGwgdGhlIHRlc3QgbWV0aG9kcwotICAgICAgICAjIGluIHRoaXMgdGVzdCBjYXNlCi0gICAgICAgIGNscy5kcml2ZXIgPSBjcmVhdGVfc2VsZW5pdW1fZHJpdmVyKCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6Ci0gICAgICAgICIiIiBDbGVhbiB1cCB3ZWJkcml2ZXIgZHJpdmVyICIiIgotCi0gICAgICAgIGNscy5kcml2ZXIucXVpdCgpCi0gICAgICAgIHN1cGVyKFNlbGVuaXVtVGVzdENhc2UsIGNscykudGVhckRvd25DbGFzcygpCi0KLSAgICBkZWYgZ2V0KHNlbGYsIHVybCk6Ci0gICAgICAgICIiIgotICAgICAgICBTZWxlbml1bSByZXF1aXJlcyBhYnNvbHV0ZSBVUkxzLCBzbyBjb252ZXJ0IERqYW5nbyBVUkxzIHJldHVybmVkCi0gICAgICAgIGJ5IHJlc29sdmUoKSBvciBzaW1pbGFyIHRvIGFic29sdXRlIG9uZXMgYW5kIGdldCB1c2luZyB0aGUKLSAgICAgICAgd2ViZHJpdmVyIGluc3RhbmNlLgotCi0gICAgICAgIHVybDogYSByZWxhdGl2ZSBVUkwKLSAgICAgICAgIiIiCi0gICAgICAgIGFic191cmwgPSAnJXMlcycgJSAoc2VsZi5saXZlX3NlcnZlcl91cmwsIHVybCkKLSAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KGFic191cmwpCi0KLSAgICBkZWYgZmluZChzZWxmLCBzZWxlY3Rvcik6Ci0gICAgICAgICIiIiBGaW5kIHNpbmdsZSBlbGVtZW50IGJ5IENTUyBzZWxlY3RvciAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3Ioc2VsZWN0b3IpCi0KLSAgICBkZWYgZmluZF9hbGwoc2VsZiwgc2VsZWN0b3IpOgotICAgICAgICAiIiIgRmluZCBhbGwgZWxlbWVudHMgbWF0Y2hpbmcgQ1NTIHNlbGVjdG9yICIiIgotICAgICAgICByZXR1cm4gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV9jc3Nfc2VsZWN0b3Ioc2VsZWN0b3IpCi0KLSAgICBkZWYgZm9jdXNlZF9lbGVtZW50KHNlbGYpOgotICAgICAgICAiIiIgUmV0dXJuIHRoZSBlbGVtZW50IHdoaWNoIGN1cnJlbnRseSBoYXMgZm9jdXMgb24gdGhlIHBhZ2UgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLmRyaXZlci5zd2l0Y2hfdG8uYWN0aXZlX2VsZW1lbnQKLQotICAgIGRlZiB3YWl0X3VudGlsX3ByZXNlbnQoc2VsZiwgc2VsZWN0b3IpOgotICAgICAgICAiIiIgV2FpdCB1bnRpbCBlbGVtZW50IG1hdGNoaW5nIENTUyBzZWxlY3RvciBpcyBvbiB0aGUgcGFnZSAiIiIKLSAgICAgICAgaXNfcHJlc2VudCA9IGxhbWJkYSBkcml2ZXI6IHNlbGYuZmluZChzZWxlY3RvcikKLSAgICAgICAgbXNnID0gJ0FuIGVsZW1lbnQgbWF0Y2hpbmcgIiVzIiBzaG91bGQgYmUgb24gdGhlIHBhZ2UnICUgc2VsZWN0b3IKLSAgICAgICAgZWxlbWVudCA9IFdhaXQoc2VsZi5kcml2ZXIpLnVudGlsKGlzX3ByZXNlbnQsIG1zZykKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQKLQotICAgIGRlZiB3YWl0X3VudGlsX3Zpc2libGUoc2VsZiwgc2VsZWN0b3IpOgotICAgICAgICAiIiIgV2FpdCB1bnRpbCBlbGVtZW50IG1hdGNoaW5nIENTUyBzZWxlY3RvciBpcyB2aXNpYmxlIG9uIHRoZSBwYWdlICIiIgotICAgICAgICBpc192aXNpYmxlID0gbGFtYmRhIGRyaXZlcjogc2VsZi5maW5kKHNlbGVjdG9yKS5pc19kaXNwbGF5ZWQoKQotICAgICAgICBtc2cgPSAnQW4gZWxlbWVudCBtYXRjaGluZyAiJXMiIHNob3VsZCBiZSB2aXNpYmxlJyAlIHNlbGVjdG9yCi0gICAgICAgIFdhaXQoc2VsZi5kcml2ZXIpLnVudGlsKGlzX3Zpc2libGUsIG1zZykKLSAgICAgICAgcmV0dXJuIHNlbGYuZmluZChzZWxlY3RvcikKLQotICAgIGRlZiB3YWl0X3VudGlsX2ZvY3VzZWQoc2VsZiwgc2VsZWN0b3IpOgotICAgICAgICAiIiIgV2FpdCB1bnRpbCBlbGVtZW50IG1hdGNoaW5nIENTUyBzZWxlY3RvciBoYXMgZm9jdXMgIiIiCi0gICAgICAgIGlzX2ZvY3VzZWQgPSBcCi0gICAgICAgICAgICBsYW1iZGEgZHJpdmVyOiBzZWxmLmZpbmQoc2VsZWN0b3IpID09IHNlbGYuZm9jdXNlZF9lbGVtZW50KCkKLSAgICAgICAgbXNnID0gJ0FuIGVsZW1lbnQgbWF0Y2hpbmcgIiVzIiBzaG91bGQgYmUgZm9jdXNlZCcgJSBzZWxlY3RvcgotICAgICAgICBXYWl0KHNlbGYuZHJpdmVyKS51bnRpbChpc19mb2N1c2VkLCBtc2cpCi0gICAgICAgIHJldHVybiBzZWxmLmZpbmQoc2VsZWN0b3IpCi0KLSAgICBkZWYgZW50ZXJfdGV4dChzZWxmLCBzZWxlY3RvciwgdmFsdWUpOgotICAgICAgICAiIiIgSW5zZXJ0IHRleHQgaW50byBlbGVtZW50IG1hdGNoaW5nIHNlbGVjdG9yICIiIgotICAgICAgICAjIG5vdGUgdGhhdCBrZXl1cCBldmVudHMgZG9uJ3Qgb2NjdXIgdW50aWwgdGhlIGVsZW1lbnQgaXMgY2xpY2tlZAotICAgICAgICAjIChpbiB0aGUgY2FzZSBvZiA8aW5wdXQgdHlwZT0idGV4dCIuLi4+LCBmb3IgZXhhbXBsZSksIHNvIHNpbXVsYXRlCi0gICAgICAgICMgdXNlciBjbGlja2luZyB0aGUgZWxlbWVudCBiZWZvcmUgaW5zZXJ0aW5nIHRleHQgaW50byBpdAotICAgICAgICBmaWVsZCA9IHNlbGYuY2xpY2soc2VsZWN0b3IpCi0KLSAgICAgICAgZmllbGQuc2VuZF9rZXlzKHZhbHVlKQotICAgICAgICByZXR1cm4gZmllbGQKLQotICAgIGRlZiBjbGljayhzZWxmLCBzZWxlY3Rvcik6Ci0gICAgICAgICIiIiBDbGljayBvbiBlbGVtZW50IHdoaWNoIG1hdGNoZXMgQ1NTIHNlbGVjdG9yICIiIgotICAgICAgICBlbGVtZW50ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoc2VsZWN0b3IpCi0gICAgICAgIGVsZW1lbnQuY2xpY2soKQotICAgICAgICByZXR1cm4gZWxlbWVudAotCi0gICAgZGVmIGdldF9wYWdlX3NvdXJjZShzZWxmKToKLSAgICAgICAgIiIiIEdldCByYXcgSFRNTCBmb3IgdGhlIGN1cnJlbnQgcGFnZSAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLnBhZ2Vfc291cmNlCitjbGFzcyBTZWxlbml1bVRlc3RDYXNlKFNlbGVuaXVtVGVzdENhc2VCYXNlLCBTdGF0aWNMaXZlU2VydmVyVGVzdENhc2UpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvc2VsZW5pdW1faGVscGVyc19iYXNlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci9zZWxlbml1bV9oZWxwZXJzX2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlOWMxNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvc2VsZW5pdW1faGVscGVyc19iYXNlLnB5CkBAIC0wLDAgKzEsMjE4IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIFRoZSBXYWl0IGNsYXNzIGFuZCBzb21lIG9mIFNlbGVuaXVtRHJpdmVySGVscGVyIGFuZCBTZWxlbml1bVRlc3RDYXNlIGFyZQorIyBtb2RpZmllZCBmcm9tIFBhdGNod29yaywgcmVsZWFzZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5jZSB0ZXJtcyBhcyBUb2FzdGVyOgorIyBodHRwczovL2dpdGh1Yi5jb20vZGxlc3BpYXUvcGF0Y2h3b3JrL2Jsb2IvbWFzdGVyL3BhdGNod29yay90ZXN0cy5icm93c2VyLnB5CisKKyIiIgorSGVscGVyIG1ldGhvZHMgZm9yIGNyZWF0aW5nIFRvYXN0ZXIgU2VsZW5pdW0gdGVzdHMgd2hpY2ggcnVuIHdpdGhpbgordGhlIGNvbnRleHQgb2YgRGphbmdvIHVuaXQgdGVzdHMuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZGphbmdvLmNvbnRyaWIuc3RhdGljZmlsZXMudGVzdGluZyBpbXBvcnQgU3RhdGljTGl2ZVNlcnZlclRlc3RDYXNlCitmcm9tIHNlbGVuaXVtIGltcG9ydCB3ZWJkcml2ZXIKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1cHBvcnQudWkgaW1wb3J0IFdlYkRyaXZlcldhaXQKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyLmNvbW1vbi5kZXNpcmVkX2NhcGFiaWxpdGllcyBpbXBvcnQgRGVzaXJlZENhcGFiaWxpdGllcworZnJvbSBzZWxlbml1bS5jb21tb24uZXhjZXB0aW9ucyBpbXBvcnQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgXAorICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24KKworZGVmIGNyZWF0ZV9zZWxlbml1bV9kcml2ZXIoYnJvd3Nlcj0nY2hyb21lJyk6CisgICAgIyBzZXQgZGVmYXVsdCBicm93c2VyIHN0cmluZyBiYXNlZCBvbiBlbnYgKGlmIGF2YWlsYWJsZSkKKyAgICBlbnZfYnJvd3NlciA9IG9zLmVudmlyb24uZ2V0KCdUT0FTVEVSX1RFU1RTX0JST1dTRVInKQorICAgIGlmIGVudl9icm93c2VyOgorICAgICAgICBicm93c2VyID0gZW52X2Jyb3dzZXIKKworICAgIGlmIGJyb3dzZXIgPT0gJ2Nocm9tZSc6CisgICAgICAgIHJldHVybiB3ZWJkcml2ZXIuQ2hyb21lKAorICAgICAgICAgICAgc2VydmljZV9hcmdzPVsiLS12ZXJib3NlIiwgIi0tbG9nLXBhdGg9c2VsZW5pdW0ubG9nIl0KKyAgICAgICAgKQorICAgIGVsaWYgYnJvd3NlciA9PSAnZmlyZWZveCc6CisgICAgICAgIHJldHVybiB3ZWJkcml2ZXIuRmlyZWZveCgpCisgICAgZWxpZiBicm93c2VyID09ICdtYXJpb25ldHRlJzoKKyAgICAgICAgY2FwYWJpbGl0aWVzID0gRGVzaXJlZENhcGFiaWxpdGllcy5GSVJFRk9YCisgICAgICAgIGNhcGFiaWxpdGllc1snbWFyaW9uZXR0ZSddID0gVHJ1ZQorICAgICAgICByZXR1cm4gd2ViZHJpdmVyLkZpcmVmb3goY2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykKKyAgICBlbGlmIGJyb3dzZXIgPT0gJ2llJzoKKyAgICAgICAgcmV0dXJuIHdlYmRyaXZlci5JZSgpCisgICAgZWxpZiBicm93c2VyID09ICdwaGFudG9tanMnOgorICAgICAgICByZXR1cm4gd2ViZHJpdmVyLlBoYW50b21KUygpCisgICAgZWxzZToKKyAgICAgICAgbXNnID0gJ1NlbGVuaXVtIGRyaXZlciBmb3IgYnJvd3NlciAlcyBpcyBub3QgYXZhaWxhYmxlJyAlIGJyb3dzZXIKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKG1zZykKKworY2xhc3MgV2FpdChXZWJEcml2ZXJXYWl0KToKKyAgICAiIiIKKyAgICBTdWJjbGFzcyBvZiBXZWJEcml2ZXJXYWl0IHdpdGggcHJlZGV0ZXJtaW5lZCB0aW1lb3V0IGFuZCBwb2xsCisgICAgZnJlcXVlbmN5LiBBbHNvIGRlYWxzIHdpdGggYSB3aWRlciB2YXJpZXR5IG9mIGV4Y2VwdGlvbnMuCisgICAgIiIiCisgICAgX1RJTUVPVVQgPSAxMAorICAgIF9QT0xMX0ZSRVFVRU5DWSA9IDAuNQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRyaXZlcik6CisgICAgICAgIHN1cGVyKFdhaXQsIHNlbGYpLl9faW5pdF9fKGRyaXZlciwgc2VsZi5fVElNRU9VVCwgc2VsZi5fUE9MTF9GUkVRVUVOQ1kpCisKKyAgICBkZWYgdW50aWwoc2VsZiwgbWV0aG9kLCBtZXNzYWdlPScnKToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxzIHRoZSBtZXRob2QgcHJvdmlkZWQgd2l0aCB0aGUgZHJpdmVyIGFzIGFuIGFyZ3VtZW50IHVudGlsIHRoZQorICAgICAgICByZXR1cm4gdmFsdWUgaXMgbm90IEZhbHNlLgorICAgICAgICAiIiIKKworICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5fdGltZW91dAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gbWV0aG9kKHNlbGYuX2RyaXZlcikKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgdGltZS5zbGVlcChzZWxmLl9wb2xsKQorICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPiBlbmRfdGltZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJhaXNlIFRpbWVvdXRFeGNlcHRpb24obWVzc2FnZSkKKworICAgIGRlZiB1bnRpbF9ub3Qoc2VsZiwgbWV0aG9kLCBtZXNzYWdlPScnKToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxzIHRoZSBtZXRob2QgcHJvdmlkZWQgd2l0aCB0aGUgZHJpdmVyIGFzIGFuIGFyZ3VtZW50IHVudGlsIHRoZQorICAgICAgICByZXR1cm4gdmFsdWUgaXMgRmFsc2UuCisgICAgICAgICIiIgorCisgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBtZXRob2Qoc2VsZi5fZHJpdmVyKQorICAgICAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IFN0YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5fcG9sbCkKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID4gZW5kX3RpbWU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByYWlzZSBUaW1lb3V0RXhjZXB0aW9uKG1lc3NhZ2UpCisKK2NsYXNzIFNlbGVuaXVtVGVzdENhc2VCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBOQiBTdGF0aWNMaXZlU2VydmVyVGVzdENhc2UgaXMgdXNlZCBhcyB0aGUgYmFzZSB0ZXN0IGNhc2Ugc28gdGhhdAorICAgIHN0YXRpYyBmaWxlcyBhcmUgc2VydmVkIGNvcnJlY3RseSBpbiBhIFNlbGVuaXVtIHRlc3QgcnVuIGNvbnRleHQ7IHNlZQorICAgIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjkvcmVmL2NvbnRyaWIvc3RhdGljZmlsZXMvI3NwZWNpYWxpemVkLXRlc3QtY2FzZS10by1zdXBwb3J0LWxpdmUtdGVzdGluZworICAgICIiIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIiIiIENyZWF0ZSBhIHdlYmRyaXZlciBkcml2ZXIgYXQgdGhlIGNsYXNzIGxldmVsICIiIgorCisgICAgICAgIHN1cGVyKFNlbGVuaXVtVGVzdENhc2VCYXNlLCBjbHMpLnNldFVwQ2xhc3MoKQorCisgICAgICAgICMgaW5zdGFudGlhdGUgdGhlIFNlbGVuaXVtIHdlYmRyaXZlciBvbmNlIGZvciBhbGwgdGhlIHRlc3QgbWV0aG9kcworICAgICAgICAjIGluIHRoaXMgdGVzdCBjYXNlCisgICAgICAgIGNscy5kcml2ZXIgPSBjcmVhdGVfc2VsZW5pdW1fZHJpdmVyKCkKKyAgICAgICAgY2xzLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgIiIiIENsZWFuIHVwIHdlYmRyaXZlciBkcml2ZXIgIiIiCisKKyAgICAgICAgY2xzLmRyaXZlci5xdWl0KCkKKyAgICAgICAgc3VwZXIoU2VsZW5pdW1UZXN0Q2FzZUJhc2UsIGNscykudGVhckRvd25DbGFzcygpCisKKyAgICBkZWYgZ2V0KHNlbGYsIHVybCk6CisgICAgICAgICIiIgorICAgICAgICBTZWxlbml1bSByZXF1aXJlcyBhYnNvbHV0ZSBVUkxzLCBzbyBjb252ZXJ0IERqYW5nbyBVUkxzIHJldHVybmVkCisgICAgICAgIGJ5IHJlc29sdmUoKSBvciBzaW1pbGFyIHRvIGFic29sdXRlIG9uZXMgYW5kIGdldCB1c2luZyB0aGUKKyAgICAgICAgd2ViZHJpdmVyIGluc3RhbmNlLgorCisgICAgICAgIHVybDogYSByZWxhdGl2ZSBVUkwKKyAgICAgICAgIiIiCisgICAgICAgIGFic191cmwgPSAnJXMlcycgJSAoc2VsZi5saXZlX3NlcnZlcl91cmwsIHVybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KGFic191cmwpCisKKyAgICBkZWYgZmluZChzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgICIiIiBGaW5kIHNpbmdsZSBlbGVtZW50IGJ5IENTUyBzZWxlY3RvciAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3Ioc2VsZWN0b3IpCisKKyAgICBkZWYgZmluZF9hbGwoc2VsZiwgc2VsZWN0b3IpOgorICAgICAgICAiIiIgRmluZCBhbGwgZWxlbWVudHMgbWF0Y2hpbmcgQ1NTIHNlbGVjdG9yICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV9jc3Nfc2VsZWN0b3Ioc2VsZWN0b3IpCisKKyAgICBkZWYgZWxlbWVudF9leGlzdHMoc2VsZiwgc2VsZWN0b3IpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgb25lIGVsZW1lbnQgbWF0Y2hpbmcgc2VsZWN0b3IgZXhpc3RzLAorICAgICAgICBGYWxzZSBvdGhlcndpc2UKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5maW5kX2FsbChzZWxlY3RvcikpID09IDEKKworICAgIGRlZiBmb2N1c2VkX2VsZW1lbnQoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm4gdGhlIGVsZW1lbnQgd2hpY2ggY3VycmVudGx5IGhhcyBmb2N1cyBvbiB0aGUgcGFnZSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLnN3aXRjaF90by5hY3RpdmVfZWxlbWVudAorCisgICAgZGVmIHdhaXRfdW50aWxfcHJlc2VudChzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgICIiIiBXYWl0IHVudGlsIGVsZW1lbnQgbWF0Y2hpbmcgQ1NTIHNlbGVjdG9yIGlzIG9uIHRoZSBwYWdlICIiIgorICAgICAgICBpc19wcmVzZW50ID0gbGFtYmRhIGRyaXZlcjogc2VsZi5maW5kKHNlbGVjdG9yKQorICAgICAgICBtc2cgPSAnQW4gZWxlbWVudCBtYXRjaGluZyAiJXMiIHNob3VsZCBiZSBvbiB0aGUgcGFnZScgJSBzZWxlY3RvcgorICAgICAgICBlbGVtZW50ID0gV2FpdChzZWxmLmRyaXZlcikudW50aWwoaXNfcHJlc2VudCwgbXNnKQorICAgICAgICByZXR1cm4gZWxlbWVudAorCisgICAgZGVmIHdhaXRfdW50aWxfdmlzaWJsZShzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgICIiIiBXYWl0IHVudGlsIGVsZW1lbnQgbWF0Y2hpbmcgQ1NTIHNlbGVjdG9yIGlzIHZpc2libGUgb24gdGhlIHBhZ2UgIiIiCisgICAgICAgIGlzX3Zpc2libGUgPSBsYW1iZGEgZHJpdmVyOiBzZWxmLmZpbmQoc2VsZWN0b3IpLmlzX2Rpc3BsYXllZCgpCisgICAgICAgIG1zZyA9ICdBbiBlbGVtZW50IG1hdGNoaW5nICIlcyIgc2hvdWxkIGJlIHZpc2libGUnICUgc2VsZWN0b3IKKyAgICAgICAgV2FpdChzZWxmLmRyaXZlcikudW50aWwoaXNfdmlzaWJsZSwgbXNnKQorICAgICAgICByZXR1cm4gc2VsZi5maW5kKHNlbGVjdG9yKQorCisgICAgZGVmIHdhaXRfdW50aWxfZm9jdXNlZChzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgICIiIiBXYWl0IHVudGlsIGVsZW1lbnQgbWF0Y2hpbmcgQ1NTIHNlbGVjdG9yIGhhcyBmb2N1cyAiIiIKKyAgICAgICAgaXNfZm9jdXNlZCA9IFwKKyAgICAgICAgICAgIGxhbWJkYSBkcml2ZXI6IHNlbGYuZmluZChzZWxlY3RvcikgPT0gc2VsZi5mb2N1c2VkX2VsZW1lbnQoKQorICAgICAgICBtc2cgPSAnQW4gZWxlbWVudCBtYXRjaGluZyAiJXMiIHNob3VsZCBiZSBmb2N1c2VkJyAlIHNlbGVjdG9yCisgICAgICAgIFdhaXQoc2VsZi5kcml2ZXIpLnVudGlsKGlzX2ZvY3VzZWQsIG1zZykKKyAgICAgICAgcmV0dXJuIHNlbGYuZmluZChzZWxlY3RvcikKKworICAgIGRlZiBlbnRlcl90ZXh0KHNlbGYsIHNlbGVjdG9yLCB2YWx1ZSk6CisgICAgICAgICIiIiBJbnNlcnQgdGV4dCBpbnRvIGVsZW1lbnQgbWF0Y2hpbmcgc2VsZWN0b3IgIiIiCisgICAgICAgICMgbm90ZSB0aGF0IGtleXVwIGV2ZW50cyBkb24ndCBvY2N1ciB1bnRpbCB0aGUgZWxlbWVudCBpcyBjbGlja2VkCisgICAgICAgICMgKGluIHRoZSBjYXNlIG9mIDxpbnB1dCB0eXBlPSJ0ZXh0Ii4uLj4sIGZvciBleGFtcGxlKSwgc28gc2ltdWxhdGUKKyAgICAgICAgIyB1c2VyIGNsaWNraW5nIHRoZSBlbGVtZW50IGJlZm9yZSBpbnNlcnRpbmcgdGV4dCBpbnRvIGl0CisgICAgICAgIGZpZWxkID0gc2VsZi5jbGljayhzZWxlY3RvcikKKworICAgICAgICBmaWVsZC5zZW5kX2tleXModmFsdWUpCisgICAgICAgIHJldHVybiBmaWVsZAorCisgICAgZGVmIGNsaWNrKHNlbGYsIHNlbGVjdG9yKToKKyAgICAgICAgIiIiIENsaWNrIG9uIGVsZW1lbnQgd2hpY2ggbWF0Y2hlcyBDU1Mgc2VsZWN0b3IgIiIiCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZShzZWxlY3RvcikKKyAgICAgICAgZWxlbWVudC5jbGljaygpCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKyAgICBkZWYgZ2V0X3BhZ2Vfc291cmNlKHNlbGYpOgorICAgICAgICAiIiIgR2V0IHJhdyBIVE1MIGZvciB0aGUgY3VycmVudCBwYWdlICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kcml2ZXIucGFnZV9zb3VyY2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9hbGxfYnVpbGRzX3BhZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYWxsX2J1aWxkc19wYWdlLnB5CmluZGV4IGU0MjIzZjQuLmI4NmYyOWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9hbGxfYnVpbGRzX3BhZ2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2FsbF9idWlsZHNfcGFnZS5weQpAQCAtMjcsNiArMjcsNyBAQAogCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBQcm9qZWN0LCBCdWlsZCwgVGFyZ2V0CiAKKwogY2xhc3MgVGVzdEFsbEJ1aWxkc1BhZ2UoU2VsZW5pdW1UZXN0Q2FzZSk6CiAgICAgIiIiIFRlc3RzIGZvciBhbGwgYnVpbGRzIHBhZ2UgL2J1aWxkcy8gIiIiCiAKQEAgLTU3LDYgKzU4LDEzIEBACiAgICAgICAgICAgICAnb3V0Y29tZSc6IEJ1aWxkLlNVQ0NFRURFRAogICAgICAgICB9CiAKKyAgICAgICAgc2VsZi5wcm9qZWN0MV9idWlsZF9mYWlsdXJlID0geworICAgICAgICAgICAgJ3Byb2plY3QnOiBzZWxmLnByb2plY3QxLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiBub3csCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogbm93LAorICAgICAgICAgICAgJ291dGNvbWUnOiBCdWlsZC5GQUlMRUQKKyAgICAgICAgfQorCiAgICAgICAgIHNlbGYuZGVmYXVsdF9wcm9qZWN0X2J1aWxkX3N1Y2Nlc3MgPSB7CiAgICAgICAgICAgICAncHJvamVjdCc6IHNlbGYuZGVmYXVsdF9wcm9qZWN0LAogICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiBub3csCkBAIC02NCw2ICs3Miw0NiBAQAogICAgICAgICAgICAgJ291dGNvbWUnOiBCdWlsZC5TVUNDRUVERUQKICAgICAgICAgfQogCisgICAgZGVmIF9nZXRfYnVpbGRfdGltZV9lbGVtZW50KHNlbGYsIGJ1aWxkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgSFRNTCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHRpbWUgZm9yIGEgYnVpbGQKKyAgICAgICAgaW4gdGhlIHJlY2VudCBidWlsZHMgYXJlYQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZWN0b3IgPSAnZGl2W2RhdGEtbGF0ZXN0LWJ1aWxkLXJlc3VsdD0iJXMiXSAnIFwKKyAgICAgICAgICAgICdbZGF0YS1yb2xlPSJkYXRhLXJlY2VudC1idWlsZC1idWlsZHRpbWUtZmllbGQiXScgJSBidWlsZC5pZAorCisgICAgICAgICMgYmVjYXVzZSB0aGlzIGxvYWRzIHZpYSBBamF4LCB3YWl0IGZvciBpdCB0byBiZSB2aXNpYmxlCisgICAgICAgIHNlbGYud2FpdF91bnRpbF9wcmVzZW50KHNlbGVjdG9yKQorCisgICAgICAgIGJ1aWxkX3RpbWVfc3BhbnMgPSBzZWxmLmZpbmRfYWxsKHNlbGVjdG9yKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1aWxkX3RpbWVfc3BhbnMpLCAxKQorCisgICAgICAgIHJldHVybiBidWlsZF90aW1lX3NwYW5zWzBdCisKKyAgICBkZWYgX2dldF9yb3dfZm9yX2J1aWxkKHNlbGYsIGJ1aWxkKToKKyAgICAgICAgIiIiIEdldCB0aGUgdGFibGUgcm93IGZvciB0aGUgYnVpbGQgZnJvbSB0aGUgYWxsIGJ1aWxkcyB0YWJsZSAiIiIKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3ByZXNlbnQoJyNhbGxidWlsZHN0YWJsZScpCisKKyAgICAgICAgcm93cyA9IHNlbGYuZmluZF9hbGwoJyNhbGxidWlsZHN0YWJsZSB0cicpCisKKyAgICAgICAgIyBsb29rIGZvciB0aGUgcm93IHdpdGggYSBkb3dubG9hZCBsaW5rIG9uIHRoZSByZWNpcGUgd2hpY2ggbWF0Y2hlcyB0aGUKKyAgICAgICAgIyBidWlsZCBJRAorICAgICAgICB1cmwgPSByZXZlcnNlKCdidWlsZGRhc2hib2FyZCcsIGFyZ3M9KGJ1aWxkLmlkLCkpCisgICAgICAgIHNlbGVjdG9yID0gJ3RkLnRhcmdldCBhW2hyZWY9IiVzIl0nICUgdXJsCisKKyAgICAgICAgZm91bmRfcm93ID0gTm9uZQorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisKKyAgICAgICAgICAgIG91dGNvbWVfbGlua3MgPSByb3cuZmluZF9lbGVtZW50c19ieV9jc3Nfc2VsZWN0b3Ioc2VsZWN0b3IpCisgICAgICAgICAgICBpZiBsZW4ob3V0Y29tZV9saW5rcykgPT0gMToKKyAgICAgICAgICAgICAgICBmb3VuZF9yb3cgPSByb3cKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfcm93LCBOb25lKQorCisgICAgICAgIHJldHVybiBmb3VuZF9yb3cKKwogICAgIGRlZiB0ZXN0X3Nob3dfdGFza3Nfd2l0aF9zdWZmaXgoc2VsZik6CiAgICAgICAgICIiIiBUYXNrIHNob3VsZCBiZSBzaG93biBhcyBzdWZmaXggb24gYnVpbGQgbmFtZSAiIiIKICAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZSgqKnNlbGYucHJvamVjdDFfYnVpbGRfc3VjY2VzcykKQEAgLTk1LDE3ICsxNDMsMTcgQEAKICAgICAgICAgdXJsID0gcmV2ZXJzZSgnYWxsLWJ1aWxkcycpCiAgICAgICAgIHNlbGYuZ2V0KHVybCkKIAotICAgICAgICAjIHNob3VsZG4ndCBzZWUgYSBydW4gYWdhaW4gYnV0dG9uIGZvciBjb21tYW5kLWxpbmUgYnVpbGRzCi0gICAgICAgIHNlbGVjdG9yID0gJ2RpdltkYXRhLWxhdGVzdC1idWlsZC1yZXN1bHQ9IiVzIl0gYnV0dG9uJyAlIGRlZmF1bHRfYnVpbGQuaWQKKyAgICAgICAgIyBzaG91bGRuJ3Qgc2VlIGEgcmVidWlsZCBidXR0b24gZm9yIGNvbW1hbmQtbGluZSBidWlsZHMKKyAgICAgICAgc2VsZWN0b3IgPSAnZGl2W2RhdGEtbGF0ZXN0LWJ1aWxkLXJlc3VsdD0iJXMiXSAucmVidWlsZC1idG4nICUgZGVmYXVsdF9idWlsZC5pZAogICAgICAgICBydW5fYWdhaW5fYnV0dG9uID0gc2VsZi5maW5kX2FsbChzZWxlY3RvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVuX2FnYWluX2J1dHRvbiksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBub3Qgc2VlIGEgcnVuIGFnYWluIGJ1dHRvbiBmb3IgY2xpIGJ1aWxkcycpCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBub3Qgc2VlIGEgcmVidWlsZCBidXR0b24gZm9yIGNsaSBidWlsZHMnKQogCi0gICAgICAgICMgc2hvdWxkIHNlZSBhIHJ1biBhZ2FpbiBidXR0b24gZm9yIG5vbi1jb21tYW5kLWxpbmUgYnVpbGRzCi0gICAgICAgIHNlbGVjdG9yID0gJ2RpdltkYXRhLWxhdGVzdC1idWlsZC1yZXN1bHQ9IiVzIl0gYnV0dG9uJyAlIGJ1aWxkMS5pZAorICAgICAgICAjIHNob3VsZCBzZWUgYSByZWJ1aWxkIGJ1dHRvbiBmb3Igbm9uLWNvbW1hbmQtbGluZSBidWlsZHMKKyAgICAgICAgc2VsZWN0b3IgPSAnZGl2W2RhdGEtbGF0ZXN0LWJ1aWxkLXJlc3VsdD0iJXMiXSAucmVidWlsZC1idG4nICUgYnVpbGQxLmlkCiAgICAgICAgIHJ1bl9hZ2Fpbl9idXR0b24gPSBzZWxmLmZpbmRfYWxsKHNlbGVjdG9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5fYWdhaW5fYnV0dG9uKSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHNlZSBhIHJ1biBhZ2FpbiBidXR0b24gZm9yIG5vbi1jbGkgYnVpbGRzJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHNlZSBhIHJlYnVpbGQgYnV0dG9uIGZvciBub24tY2xpIGJ1aWxkcycpCiAKICAgICBkZWYgdGVzdF90b29sdGlwc19vbl9wcm9qZWN0X25hbWUoc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTI0LDcgKzE3Miw3IEBACiAgICAgICAgICMgZ2V0IHRoZSBwcm9qZWN0IG5hbWUgY2VsbHMgZnJvbSB0aGUgdGFibGUKICAgICAgICAgY2VsbHMgPSBzZWxmLmZpbmRfYWxsKCcjYWxsYnVpbGRzdGFibGUgdGRbY2xhc3M9InByb2plY3QiXScpCiAKLSAgICAgICAgc2VsZWN0b3IgPSAnaS5nZXQtaGVscCcKKyAgICAgICAgc2VsZWN0b3IgPSAnc3Bhbi5nZXQtaGVscCcKIAogICAgICAgICBmb3IgY2VsbCBpbiBjZWxsczoKICAgICAgICAgICAgIGNvbnRlbnQgPSBjZWxsLmdldF9hdHRyaWJ1dGUoJ2lubmVySFRNTCcpCkBAIC0xNDEsMyArMTg5LDQ1IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1zZyA9ICdmb3VuZCB1bmV4cGVjdGVkIHByb2plY3QgbmFtZSBjZWxsIGluIGFsbCBidWlsZHMgdGFibGUnCiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgIGRlZiB0ZXN0X2J1aWxkc190aW1lX2xpbmtzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VjY2Vzc2Z1bCBidWlsZHMgc2hvdWxkIGhhdmUgbGlua3Mgb24gdGhlIHRpbWUgY29sdW1uIGFuZCBpbiB0aGUKKyAgICAgICAgcmVjZW50IGJ1aWxkcyBhcmVhOyBmYWlsZWQgYnVpbGRzIHNob3VsZCBub3QgaGF2ZSBsaW5rcyBvbiB0aGUgdGltZSBjb2x1bW4sCisgICAgICAgIG9yIGluIHRoZSByZWNlbnQgYnVpbGRzIGFyZWEKKyAgICAgICAgIiIiCisgICAgICAgIGJ1aWxkMSA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKCoqc2VsZi5wcm9qZWN0MV9idWlsZF9zdWNjZXNzKQorICAgICAgICBidWlsZDIgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZSgqKnNlbGYucHJvamVjdDFfYnVpbGRfZmFpbHVyZSkKKworICAgICAgICAjIGFkZCBzb21lIHRhcmdldHMgdG8gdGhlc2UgYnVpbGRzIHNvIHRoZXkgaGF2ZSByZWNpcGUgbGlua3MKKyAgICAgICAgIyAoYW5kIHNvIHdlIGNhbiBmaW5kIHRoZSByb3cgaW4gdGhlIFRvYXN0ZXJUYWJsZSBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICMgYSBwYXJ0aWN1bGFyIGJ1aWxkKQorICAgICAgICBUYXJnZXQub2JqZWN0cy5jcmVhdGUoYnVpbGQ9YnVpbGQxLCB0YXJnZXQ9J2ZvbycpCisgICAgICAgIFRhcmdldC5vYmplY3RzLmNyZWF0ZShidWlsZD1idWlsZDIsIHRhcmdldD0nYmFyJykKKworICAgICAgICB1cmwgPSByZXZlcnNlKCdhbGwtYnVpbGRzJykKKyAgICAgICAgc2VsZi5nZXQodXJsKQorCisgICAgICAgICMgdGVzdCByZWNlbnQgYnVpbGRzIGFyZWEgZm9yIHN1Y2Nlc3NmdWwgYnVpbGQKKyAgICAgICAgZWxlbWVudCA9IHNlbGYuX2dldF9idWlsZF90aW1lX2VsZW1lbnQoYnVpbGQxKQorICAgICAgICBsaW5rcyA9IGVsZW1lbnQuZmluZF9lbGVtZW50c19ieV9jc3Nfc2VsZWN0b3IoJ2EnKQorICAgICAgICBtc2cgPSAnc2hvdWxkIGJlIGEgbGluayBvbiB0aGUgYnVpbGQgdGltZSBmb3IgYSBzdWNjZXNzZnVsIHJlY2VudCBidWlsZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGxpbmtzKSwgMSwgbXNnKQorCisgICAgICAgICMgdGVzdCByZWNlbnQgYnVpbGRzIGFyZWEgZm9yIGZhaWxlZCBidWlsZAorICAgICAgICBlbGVtZW50ID0gc2VsZi5fZ2V0X2J1aWxkX3RpbWVfZWxlbWVudChidWlsZDIpCisgICAgICAgIGxpbmtzID0gZWxlbWVudC5maW5kX2VsZW1lbnRzX2J5X2Nzc19zZWxlY3RvcignYScpCisgICAgICAgIG1zZyA9ICdzaG91bGQgbm90IGJlIGEgbGluayBvbiB0aGUgYnVpbGQgdGltZSBmb3IgYSBmYWlsZWQgcmVjZW50IGJ1aWxkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obGlua3MpLCAwLCBtc2cpCisKKyAgICAgICAgIyB0ZXN0IHRoZSB0aW1lIGNvbHVtbiBmb3Igc3VjY2Vzc2Z1bCBidWlsZAorICAgICAgICBidWlsZDFfcm93ID0gc2VsZi5fZ2V0X3Jvd19mb3JfYnVpbGQoYnVpbGQxKQorICAgICAgICBsaW5rcyA9IGJ1aWxkMV9yb3cuZmluZF9lbGVtZW50c19ieV9jc3Nfc2VsZWN0b3IoJ3RkLnRpbWUgYScpCisgICAgICAgIG1zZyA9ICdzaG91bGQgYmUgYSBsaW5rIG9uIHRoZSBidWlsZCB0aW1lIGZvciBhIHN1Y2Nlc3NmdWwgYnVpbGQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsaW5rcyksIDEsIG1zZykKKworICAgICAgICAjIHRlc3QgdGhlIHRpbWUgY29sdW1uIGZvciBmYWlsZWQgYnVpbGQKKyAgICAgICAgYnVpbGQyX3JvdyA9IHNlbGYuX2dldF9yb3dfZm9yX2J1aWxkKGJ1aWxkMikKKyAgICAgICAgbGlua3MgPSBidWlsZDJfcm93LmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCd0ZC50aW1lIGEnKQorICAgICAgICBtc2cgPSAnc2hvdWxkIG5vdCBiZSBhIGxpbmsgb24gdGhlIGJ1aWxkIHRpbWUgZm9yIGEgZmFpbGVkIGJ1aWxkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obGlua3MpLCAwLCBtc2cpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYWxsX3Byb2plY3RzX3BhZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYWxsX3Byb2plY3RzX3BhZ2UucHkKaW5kZXggZWQ4ZTYyMC4uNDRkYTY0MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2FsbF9wcm9qZWN0c19wYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9hbGxfcHJvamVjdHNfcGFnZS5weQpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdXJsID0gcmV2ZXJzZSgnYWxsLXByb2plY3RzJykKICAgICAgICAgc2VsZi5nZXQodXJsKQotICAgICAgICBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI25vLXJlc3VsdHMtcHJvamVjdHN0YWJsZScpCisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjZW1wdHktc3RhdGUtcHJvamVjdHN0YWJsZScpCiAKICAgICAgICAgcm93cyA9IHNlbGYuZmluZF9hbGwoJyNwcm9qZWN0c3RhYmxlIHRib2R5IHRyJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocm93cyksIDAsICdzaG91bGQgYmUgbm8gcHJvamVjdHMgZGlzcGxheWVkJykKQEAgLTEyMiwxMiArMTIyLDEzIEBACiAgICAgICAgIHNlbGYuX2FkZF9ub25fZGVmYXVsdF9wcm9qZWN0KCkKIAogICAgICAgICBzZWxmLmdldChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSkKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoIiNwcm9qZWN0c3RhYmxlIHRyIikKIAogICAgICAgICAjIGZpbmQgdGhlIHJvdyBmb3IgdGhlIGRlZmF1bHQgcHJvamVjdAogICAgICAgICBkZWZhdWx0X3Byb2plY3Rfcm93ID0gc2VsZi5fZ2V0X3Jvd19mb3JfcHJvamVjdChzZWxmLmRlZmF1bHRfcHJvamVjdC5uYW1lKQogCiAgICAgICAgICMgY2hlY2sgdGhlIHJlbGVhc2UgdGV4dCBmb3IgdGhlIGRlZmF1bHQgcHJvamVjdAotICAgICAgICBzZWxlY3RvciA9ICdzcGFuW2RhdGEtcHJvamVjdC1maWVsZD0icmVsZWFzZSJdIHNwYW4ubXV0ZWQnCisgICAgICAgIHNlbGVjdG9yID0gJ3NwYW5bZGF0YS1wcm9qZWN0LWZpZWxkPSJyZWxlYXNlIl0gc3Bhbi50ZXh0LW11dGVkJwogICAgICAgICBlbGVtZW50ID0gZGVmYXVsdF9wcm9qZWN0X3Jvdy5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKHNlbGVjdG9yKQogICAgICAgICB0ZXh0ID0gZWxlbWVudC50ZXh0LnN0cmlwKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAnTm90IGFwcGxpY2FibGUnLApAQCAtMTM3LDcgKzEzOCw3IEBACiAgICAgICAgIG90aGVyX3Byb2plY3Rfcm93ID0gc2VsZi5fZ2V0X3Jvd19mb3JfcHJvamVjdChzZWxmLnByb2plY3QubmFtZSkKIAogICAgICAgICAjIGNoZWNrIHRoZSBsaW5rIGluIHRoZSByZWxlYXNlIGNlbGwgZm9yIHRoZSBvdGhlciBwcm9qZWN0Ci0gICAgICAgIHNlbGVjdG9yID0gJ3NwYW5bZGF0YS1wcm9qZWN0LWZpZWxkPSJyZWxlYXNlIl0gYScKKyAgICAgICAgc2VsZWN0b3IgPSAnc3BhbltkYXRhLXByb2plY3QtZmllbGQ9InJlbGVhc2UiXScKICAgICAgICAgZWxlbWVudCA9IG90aGVyX3Byb2plY3Rfcm93LmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgICAgIHRleHQgPSBlbGVtZW50LnRleHQuc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHNlbGYucmVsZWFzZS5uYW1lLApAQCAtMTU2LDExICsxNTcsMTMgQEAKIAogICAgICAgICBzZWxmLmdldChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSkKIAorICAgICAgICBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgiI3Byb2plY3RzdGFibGUgdHIiKQorCiAgICAgICAgICMgZmluZCB0aGUgcm93IGZvciB0aGUgZGVmYXVsdCBwcm9qZWN0CiAgICAgICAgIGRlZmF1bHRfcHJvamVjdF9yb3cgPSBzZWxmLl9nZXRfcm93X2Zvcl9wcm9qZWN0KHNlbGYuZGVmYXVsdF9wcm9qZWN0Lm5hbWUpCiAKICAgICAgICAgIyBjaGVjayB0aGUgbWFjaGluZSBjZWxsIGZvciB0aGUgZGVmYXVsdCBwcm9qZWN0Ci0gICAgICAgIHNlbGVjdG9yID0gJ3NwYW5bZGF0YS1wcm9qZWN0LWZpZWxkPSJtYWNoaW5lIl0gc3Bhbi5tdXRlZCcKKyAgICAgICAgc2VsZWN0b3IgPSAnc3BhbltkYXRhLXByb2plY3QtZmllbGQ9Im1hY2hpbmUiXSBzcGFuLnRleHQtbXV0ZWQnCiAgICAgICAgIGVsZW1lbnQgPSBkZWZhdWx0X3Byb2plY3Rfcm93LmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgICAgIHRleHQgPSBlbGVtZW50LnRleHQuc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdOb3QgYXBwbGljYWJsZScsCkBAIC0xNzAsNyArMTczLDcgQEAKICAgICAgICAgb3RoZXJfcHJvamVjdF9yb3cgPSBzZWxmLl9nZXRfcm93X2Zvcl9wcm9qZWN0KHNlbGYucHJvamVjdC5uYW1lKQogCiAgICAgICAgICMgY2hlY2sgdGhlIGxpbmsgaW4gdGhlIG1hY2hpbmUgY2VsbCBmb3IgdGhlIG90aGVyIHByb2plY3QKLSAgICAgICAgc2VsZWN0b3IgPSAnc3BhbltkYXRhLXByb2plY3QtZmllbGQ9Im1hY2hpbmUiXSBhJworICAgICAgICBzZWxlY3RvciA9ICdzcGFuW2RhdGEtcHJvamVjdC1maWVsZD0ibWFjaGluZSJdJwogICAgICAgICBlbGVtZW50ID0gb3RoZXJfcHJvamVjdF9yb3cuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcihzZWxlY3RvcikKICAgICAgICAgdGV4dCA9IGVsZW1lbnQudGV4dC5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc2VsZi5NQUNISU5FX05BTUUsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYnVpbGRkYXNoYm9hcmRfcGFnZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9idWlsZGRhc2hib2FyZF9wYWdlLnB5CmluZGV4IDVlMDg3NDkuLmY4Y2NiNTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9idWlsZGRhc2hib2FyZF9wYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9idWlsZGRhc2hib2FyZF9wYWdlLnB5CkBAIC0yMiwxMCArMjIsMTAgQEAKIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCiBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKIAotZnJvbSBzZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCitmcm9tIHRlc3RzLmJyb3dzZXIuc2VsZW5pdW1faGVscGVycyBpbXBvcnQgU2VsZW5pdW1UZXN0Q2FzZQogCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFJlbGVhc2UsIEJpdGJha2VWZXJzaW9uLCBCdWlsZCwgTG9nTWVzc2FnZQotZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllciwgTGF5ZXJfVmVyc2lvbiwgUmVjaXBlLCBDdXN0b21JbWFnZVJlY2lwZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllciwgTGF5ZXJfVmVyc2lvbiwgUmVjaXBlLCBDdXN0b21JbWFnZVJlY2lwZSwgVmFyaWFibGUKIAogY2xhc3MgVGVzdEJ1aWxkRGFzaGJvYXJkUGFnZShTZWxlbml1bVRlc3RDYXNlKToKICAgICAiIiIgVGVzdHMgZm9yIHRoZSBidWlsZCBkYXNoYm9hcmQgL2J1aWxkL1ggIiIiCkBAIC00MiwxMSArNDIsMjcgQEAKIAogICAgICAgICBzZWxmLmJ1aWxkMSA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9cHJvamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkX29uPW5vdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249bm93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Y29tZT1CdWlsZC5TVUNDRUVERUQpCiAKICAgICAgICAgc2VsZi5idWlsZDIgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXByb2plY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGNvbWU9QnVpbGQuU1VDQ0VFREVEKQorCisgICAgICAgIHNlbGYuYnVpbGQzID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD1wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Y29tZT1CdWlsZC5GQUlMRUQpCisKKyAgICAgICAgIyBhZGQgVmFyaWFibGUgb2JqZWN0cyB0byB0aGUgc3VjY2Vzc2Z1bCBidWlsZHMsIGFzIHRoaXMgaXMgdGhlIGNyaXRlcmlvbgorICAgICAgICAjIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGxlZnQtaGFuZCBwYW5lbCBzaG91bGQgYmUgZGlzcGxheWVkCisgICAgICAgIFZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKGJ1aWxkPXNlbGYuYnVpbGQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9uYW1lPSdGb28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV92YWx1ZT0nQmFyJykKKyAgICAgICAgVmFyaWFibGUub2JqZWN0cy5jcmVhdGUoYnVpbGQ9c2VsZi5idWlsZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX25hbWU9J0ZvbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3ZhbHVlPSdCYXInKQogCiAgICAgICAgICMgZXhjZXB0aW9uCiAgICAgICAgIG1zZzEgPSAnYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24nCkBAIC02NCw2ICs4MCwyMiBAQAogICAgICAgICAgICAgbWVzc2FnZT1tc2cyCiAgICAgICAgICkKIAorICAgICAgICAjIGVycm9yIG9uIHRoZSBmYWlsZWQgYnVpbGQKKyAgICAgICAgbXNnMyA9ICdhbiBlcnJvciBvY2N1cnJlZCcKKyAgICAgICAgc2VsZi5lcnJvcl9tZXNzYWdlID0gTG9nTWVzc2FnZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgIGJ1aWxkPXNlbGYuYnVpbGQzLAorICAgICAgICAgICAgbGV2ZWw9TG9nTWVzc2FnZS5FUlJPUiwKKyAgICAgICAgICAgIG1lc3NhZ2U9bXNnMworICAgICAgICApCisKKyAgICAgICAgIyB3YXJuaW5nIG9uIHRoZSBmYWlsZWQgYnVpbGQKKyAgICAgICAgbXNnNCA9ICdEQU5HRVIgV0lMTCBST0JJTlNPTicKKyAgICAgICAgc2VsZi53YXJuaW5nX21lc3NhZ2UgPSBMb2dNZXNzYWdlLm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgYnVpbGQ9c2VsZi5idWlsZDMsCisgICAgICAgICAgICBsZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcsCisgICAgICAgICAgICBtZXNzYWdlPW1zZzQKKyAgICAgICAgKQorCiAgICAgICAgICMgcmVjaXBlcyByZWxhdGVkIHRvIHRoZSBidWlsZCwgZm9yIHRlc3RpbmcgdGhlIGVkaXQgY3VzdG9tIGltYWdlL25ldwogICAgICAgICAjIGN1c3RvbSBpbWFnZSBidXR0b25zCiAgICAgICAgIGxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT0nYWxheWVyJykKQEAgLTcxLDYgKzEwMywxMSBAQAogICAgICAgICAgICAgbGF5ZXI9bGF5ZXIsIGJ1aWxkPXNlbGYuYnVpbGQxCiAgICAgICAgICkKIAorICAgICAgICAjIG5vbi1pbWFnZSByZWNpcGVzIHJlbGF0ZWQgdG8gYSBidWlsZCwgZm9yIHRlc3RpbmcgdGhlIG5ldyBjdXN0b20KKyAgICAgICAgIyBpbWFnZSBidXR0b24KKyAgICAgICAgbGF5ZXJfdmVyc2lvbjIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPWxheWVyLAorICAgICAgICAgICAgYnVpbGQ9c2VsZi5idWlsZDMpCisKICAgICAgICAgIyBpbWFnZSByZWNpcGVzCiAgICAgICAgIHNlbGYuaW1hZ2VfcmVjaXBlMSA9IFJlY2lwZS5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgIG5hbWU9J3JlY2lwZUEnLApAQCAtMTQwLDM4ICsxNzcsNDcgQEAKICAgICAgICAgZGFzaGJvYXJkIGZvciB0aGUgQnVpbGQgb2JqZWN0IGJ1aWxkCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9nZXRfYnVpbGRfZGFzaGJvYXJkKGJ1aWxkKQotICAgICAgICByZXR1cm4gc2VsZi5maW5kX2FsbCgnI2Vycm9ycyBkaXYuYWxlcnQtZXJyb3InKQorICAgICAgICByZXR1cm4gc2VsZi5maW5kX2FsbCgnI2Vycm9ycyBkaXYuYWxlcnQtZGFuZ2VyJykKIAotICAgIGRlZiBfY2hlY2tfZm9yX2xvZ19tZXNzYWdlKHNlbGYsIGJ1aWxkLCBsb2dfbWVzc2FnZSk6CisgICAgZGVmIF9jaGVja19mb3JfbG9nX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9lbGVtZW50cywgbG9nX21lc3NhZ2UpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhhdCB0aGUgTG9nTWVzc2FnZSA8bG9nX21lc3NhZ2U+IGhhcyBhIHJlcHJlc2VudGF0aW9uIGluCisgICAgICAgIHRoZSBIVE1MIGVsZW1lbnRzIDxtZXNzYWdlX2VsZW1lbnRzPi4KKworICAgICAgICBtZXNzYWdlX2VsZW1lbnRzOiBXZWJFbGVtZW50cyByZXByZXNlbnRpbmcgdGhlIGxvZyBtZXNzYWdlcyBzaG93bgorICAgICAgICBpbiB0aGUgYnVpbGQgZGFzaGJvYXJkOyBlYWNoIHNob3VsZCBoYXZlIGEgPHByZT4gZWxlbWVudCBpbnNpZGUKKyAgICAgICAgaXQgd2l0aCBhIGRhdGEtbG9nLW1lc3NhZ2UtaWQgYXR0cmlidXRlCisKKyAgICAgICAgbG9nX21lc3NhZ2U6IG9ybS5tb2RlbHMuTG9nTWVzc2FnZSBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGxvZ19tZXNzYWdlLm1lc3NhZ2UKKyAgICAgICAgZXhwZWN0ZWRfcGsgPSBzdHIobG9nX21lc3NhZ2UucGspCisKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgZWxlbWVudCBpbiBtZXNzYWdlX2VsZW1lbnRzOgorICAgICAgICAgICAgbG9nX21lc3NhZ2VfdGV4dCA9IGVsZW1lbnQuZmluZF9lbGVtZW50X2J5X3RhZ19uYW1lKCdwcmUnKS50ZXh0LnN0cmlwKCkKKyAgICAgICAgICAgIHRleHRfbWF0Y2hlcyA9IChsb2dfbWVzc2FnZV90ZXh0ID09IGV4cGVjdGVkX3RleHQpCisKKyAgICAgICAgICAgIGxvZ19tZXNzYWdlX3BrID0gZWxlbWVudC5nZXRfYXR0cmlidXRlKCdkYXRhLWxvZy1tZXNzYWdlLWlkJykKKyAgICAgICAgICAgIGlkX21hdGNoZXMgPSAobG9nX21lc3NhZ2VfcGsgPT0gZXhwZWN0ZWRfcGspCisKKyAgICAgICAgICAgIGlmIHRleHRfbWF0Y2hlcyBhbmQgaWRfbWF0Y2hlczoKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHRlbXBsYXRlX3ZhcnMgPSAoZXhwZWN0ZWRfdGV4dCwgZXhwZWN0ZWRfcGspCisgICAgICAgIGFzc2VydGlvbl9mYWlsZWRfbXNnID0gJ21lc3NhZ2Ugbm90IGZvdW5kOiAnIFwKKyAgICAgICAgICAgICdleHBlY3RlZCB0ZXh0ICIlcyIgYW5kIElEICVzJyAlIHRlbXBsYXRlX3ZhcnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCBhc3NlcnRpb25fZmFpbGVkX21zZykKKworICAgIGRlZiBfY2hlY2tfZm9yX2Vycm9yX21lc3NhZ2Uoc2VsZiwgYnVpbGQsIGxvZ19tZXNzYWdlKToKICAgICAgICAgIiIiCiAgICAgICAgIENoZWNrIHdoZXRoZXIgdGhlIExvZ01lc3NhZ2UgaW5zdGFuY2UgPGxvZ19tZXNzYWdlPiBpcwogICAgICAgICByZXByZXNlbnRlZCBhcyBhbiBIVE1MIGVycm9yIGluIHRoZSBkYXNoYm9hcmQgcGFnZSBmb3IgdGhlIEJ1aWxkIG9iamVjdAogICAgICAgICBidWlsZAogICAgICAgICAiIiIKICAgICAgICAgZXJyb3JzID0gc2VsZi5fZ2V0X2J1aWxkX2Rhc2hib2FyZF9lcnJvcnMoYnVpbGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVycm9ycyksIDIpCi0KLSAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGxvZ19tZXNzYWdlLm1lc3NhZ2UKLSAgICAgICAgZXhwZWN0ZWRfaWQgPSBzdHIobG9nX21lc3NhZ2UuaWQpCi0KLSAgICAgICAgZm91bmQgPSBGYWxzZQotICAgICAgICBmb3IgZXJyb3IgaW4gZXJyb3JzOgotICAgICAgICAgICAgZXJyb3JfdGV4dCA9IGVycm9yLmZpbmRfZWxlbWVudF9ieV90YWdfbmFtZSgncHJlJykudGV4dAotICAgICAgICAgICAgdGV4dF9tYXRjaGVzID0gKGVycm9yX3RleHQgPT0gZXhwZWN0ZWRfdGV4dCkKLQotICAgICAgICAgICAgZXJyb3JfaWQgPSBlcnJvci5nZXRfYXR0cmlidXRlKCdkYXRhLWVycm9yJykKLSAgICAgICAgICAgIGlkX21hdGNoZXMgPSAoZXJyb3JfaWQgPT0gZXhwZWN0ZWRfaWQpCi0KLSAgICAgICAgICAgIGlmIHRleHRfbWF0Y2hlcyBhbmQgaWRfbWF0Y2hlczoKLSAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgIHRlbXBsYXRlX3ZhcnMgPSAoZXhwZWN0ZWRfdGV4dCwgZXJyb3JfdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9pZCwgZXJyb3JfaWQpCi0gICAgICAgIGFzc2VydGlvbl9lcnJvcl9tc2cgPSAnZXhjZXB0aW9uIG5vdCBmb3VuZCBhcyBlcnJvcjogJyBcCi0gICAgICAgICAgICAnZXhwZWN0ZWQgdGV4dCAiJXMiIGFuZCBnb3QgIiVzIjsgJyBcCi0gICAgICAgICAgICAnZXhwZWN0ZWQgSUQgJXMgYW5kIGdvdCAlcycgJSB0ZW1wbGF0ZV92YXJzCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgYXNzZXJ0aW9uX2Vycm9yX21zZykKKyAgICAgICAgc2VsZi5fY2hlY2tfZm9yX2xvZ19tZXNzYWdlKGVycm9ycywgbG9nX21lc3NhZ2UpCiAKICAgICBkZWYgX2NoZWNrX2xhYmVsc19pbl9tb2RhbChzZWxmLCBtb2RhbCwgZXhwZWN0ZWQpOgogICAgICAgICAiIiIKQEAgLTE3OSwzNyArMjI1LDI5IEBACiAgICAgICAgIHRoZSBXZWJFbGVtZW50IG1vZGFsIG1hdGNoIHRoZSBsaXN0IG9mIHRleHQgdmFsdWVzIGluIGV4cGVjdGVkCiAgICAgICAgICIiIgogICAgICAgICAjIGxhYmVscyBjb250YWluaW5nIHRoZSByYWRpbyBidXR0b25zIHdlJ3JlIHRlc3RpbmcgZm9yCi0gICAgICAgIGxhYmVscyA9IG1vZGFsLmZpbmRfZWxlbWVudHNfYnlfdGFnX25hbWUoJ2xhYmVsJykKKyAgICAgICAgbGFiZWxzID0gbW9kYWwuZmluZF9lbGVtZW50c19ieV9jc3Nfc2VsZWN0b3IoIi5yYWRpbyIpCiAKLSAgICAgICAgIyBiZWNhdXNlIHRoZSBsYWJlbCBjb250ZW50IGhhcyB0aGUgc3RydWN0dXJlCi0gICAgICAgICMgICBsYWJlbCB0ZXh0Ci0gICAgICAgICMgICA8aW5wdXQuLi4+Ci0gICAgICAgICMgd2UgaGF2ZSB0byByZWdleCBvbiBpdHMgaW5uZXJIVE1MLCBhcyB3ZSBjYW4ndCBqdXN0IHJldHJpZXZlIHRoZQotICAgICAgICAjICJsYWJlbCB0ZXh0IiBvbiBpdHMgb3duIHZpYSB0aGUgU2VsZW5pdW0gQVBJCi0gICAgICAgIGxhYmVsc190ZXh0ID0gc29ydGVkKG1hcCgKLSAgICAgICAgICAgIGxhbWJkYSBsYWJlbDogbGFiZWwuZ2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1MJyksIGxhYmVscwotICAgICAgICApKQotCi0gICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGV4cGVjdGVkKQotCisgICAgICAgIGxhYmVsc190ZXh0ID0gW2xhYi50ZXh0IGZvciBsYWIgaW4gbGFiZWxzXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsYWJlbHNfdGV4dCksIGxlbihleHBlY3RlZCkpCiAKLSAgICAgICAgZm9yIGlkeCwgbGFiZWxfdGV4dCBpbiBlbnVtZXJhdGUobGFiZWxzX3RleHQpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGxhYmVsX3RleHQsIGV4cGVjdGVkW2lkeF0pCisgICAgICAgIGZvciBleHBlY3RlZF90ZXh0IGluIGV4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX3RleHQgaW4gbGFiZWxzX3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kICVzIGluICVzIiAlIChleHBlY3RlZF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzX3RleHQpKQogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9uc19zaG93X2FzX2Vycm9ycyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIExvZ01lc3NhZ2VzIHdpdGggbGV2ZWwgRVhDRVBUSU9OIHNob3VsZCBkaXNwbGF5IGluIHRoZSBlcnJvcnMKICAgICAgICAgc2VjdGlvbiBvZiB0aGUgcGFnZQogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fY2hlY2tfZm9yX2xvZ19tZXNzYWdlKHNlbGYuYnVpbGQxLCBzZWxmLmV4Y2VwdGlvbl9tZXNzYWdlKQorICAgICAgICBzZWxmLl9jaGVja19mb3JfZXJyb3JfbWVzc2FnZShzZWxmLmJ1aWxkMSwgc2VsZi5leGNlcHRpb25fbWVzc2FnZSkKIAogICAgIGRlZiB0ZXN0X2NyaXRpY2Fsc19zaG93X2FzX2Vycm9ycyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIExvZ01lc3NhZ2VzIHdpdGggbGV2ZWwgQ1JJVElDQUwgc2hvdWxkIGRpc3BsYXkgaW4gdGhlIGVycm9ycwogICAgICAgICBzZWN0aW9uIG9mIHRoZSBwYWdlCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9jaGVja19mb3JfbG9nX21lc3NhZ2Uoc2VsZi5idWlsZDEsIHNlbGYuY3JpdGljYWxfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZm9yX2Vycm9yX21lc3NhZ2Uoc2VsZi5idWlsZDEsIHNlbGYuY3JpdGljYWxfbWVzc2FnZSkKIAogICAgIGRlZiB0ZXN0X2VkaXRfY3VzdG9tX2ltYWdlX2J1dHRvbihzZWxmKToKICAgICAgICAgIiIiCkBAIC0yMTcsNyArMjU1LDEzIEBACiAgICAgICAgIHRoZSB1c2VyIGNob29zZSBvbmUgb2YgdGhlbSB0byBlZGl0CiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9nZXRfYnVpbGRfZGFzaGJvYXJkKHNlbGYuYnVpbGQxKQorCisgICAgICAgICMgY2xpY2sgdGhlICJlZGl0IGN1c3RvbSBpbWFnZSIgYnV0dG9uLCB3aGljaCBwb3B1bGF0ZXMgdGhlIG1vZGFsCisgICAgICAgIHNlbGVjdG9yID0gJ1tkYXRhLXJvbGU9ImVkaXQtY3VzdG9tLWltYWdlLXRyaWdnZXIiXScKKyAgICAgICAgc2VsZi5jbGljayhzZWxlY3RvcikKKwogICAgICAgICBtb2RhbCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnZWRpdC1jdXN0b20taW1hZ2UtbW9kYWwnKQorICAgICAgICBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgiI2VkaXQtY3VzdG9tLWltYWdlLW1vZGFsIikKIAogICAgICAgICAjIHJlY2lwZXMgd2UgZXhwZWN0IHRvIHNlZSBpbiB0aGUgZWRpdCBjdXN0b20gaW1hZ2UgbW9kYWwKICAgICAgICAgZXhwZWN0ZWRfcmVjaXBlcyA9IFsKQEAgLTIzNSwxMCArMjc5LDExIEBACiAgICAgICAgIHNlbGYuX2dldF9idWlsZF9kYXNoYm9hcmQoc2VsZi5idWlsZDEpCiAKICAgICAgICAgIyBjbGljayB0aGUgIm5ldyBjdXN0b20gaW1hZ2UiIGJ1dHRvbiwgd2hpY2ggcG9wdWxhdGVzIHRoZSBtb2RhbAotICAgICAgICBzZWxlY3RvciA9ICdbZGF0YS1yb2xlPSJuZXctY3VzdG9tLWltYWdlLXRyaWdnZXIiXSBidXR0b24nCisgICAgICAgIHNlbGVjdG9yID0gJ1tkYXRhLXJvbGU9Im5ldy1jdXN0b20taW1hZ2UtdHJpZ2dlciJdJwogICAgICAgICBzZWxmLmNsaWNrKHNlbGVjdG9yKQogCiAgICAgICAgIG1vZGFsID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCduZXctY3VzdG9tLWltYWdlLW1vZGFsJykKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoIiNuZXctY3VzdG9tLWltYWdlLW1vZGFsIikKIAogICAgICAgICAjIHJlY2lwZXMgd2UgZXhwZWN0IHRvIHNlZSBpbiB0aGUgbmV3IGN1c3RvbSBpbWFnZSBtb2RhbAogICAgICAgICBleHBlY3RlZF9yZWNpcGVzID0gWwpAQCAtMjQ5LDMgKzI5NCw1NCBAQAogICAgICAgICBdCiAKICAgICAgICAgc2VsZi5fY2hlY2tfbGFiZWxzX2luX21vZGFsKG1vZGFsLCBleHBlY3RlZF9yZWNpcGVzKQorCisgICAgZGVmIHRlc3RfbmV3X2N1c3RvbV9pbWFnZV9idXR0b25fbm9faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGF0IGEgYnVpbGQgd2hpY2ggYnVpbGRzIG5vbi1pbWFnZSByZWNpcGVzIGRvZXNuJ3Qgc2hvdworICAgICAgICB0aGUgbmV3IGN1c3RvbSBpbWFnZSBidXR0b24gb24gdGhlIGRhc2hib2FyZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2dldF9idWlsZF9kYXNoYm9hcmQoc2VsZi5idWlsZDMpCisgICAgICAgIHNlbGVjdG9yID0gJ1tkYXRhLXJvbGU9Im5ldy1jdXN0b20taW1hZ2UtdHJpZ2dlciJdJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZWxlbWVudF9leGlzdHMoc2VsZWN0b3IpLAorICAgICAgICAgICAgJ25ldyBjdXN0b20gaW1hZ2UgYnV0dG9uIHNob3VsZCBub3Qgc2hvdyBmb3IgYnVpbGRzIHdoaWNoICcgXAorICAgICAgICAgICAgJ2RvblwndCBoYXZlIGFueSBpbWFnZSByZWNpcGVzJykKKworICAgIGRlZiB0ZXN0X2xlZnRfcGFuZWwoc2VsZik6CisgICAgICAgICIiIiIKKyAgICAgICAgQnVpbGRzIHdoaWNoIHN1Y2NlZWQgc2hvdWxkIGhhdmUgYSBsZWZ0IHBhbmVsIGFuZCBhIGJ1aWxkIHN1bW1hcnkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2dldF9idWlsZF9kYXNoYm9hcmQoc2VsZi5idWlsZDEpCisKKyAgICAgICAgbGVmdF9wYW5lbCA9IHNlbGYuZmluZF9hbGwoJyNuYXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsZWZ0X3BhbmVsKSwgMSkKKworICAgICAgICBidWlsZF9zdW1tYXJ5ID0gc2VsZi5maW5kX2FsbCgnW2RhdGEtcm9sZT0iYnVpbGQtc3VtbWFyeS1oZWFkaW5nIl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWlsZF9zdW1tYXJ5KSwgMSkKKworICAgIGRlZiB0ZXN0X2ZhaWxlZF9ub19sZWZ0X3BhbmVsKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGRzIHdoaWNoIGZhaWwgc2hvdWxkIGhhdmUgbm8gbGVmdCBwYW5lbCBhbmQgbm8gYnVpbGQgc3VtbWFyeQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZ2V0X2J1aWxkX2Rhc2hib2FyZChzZWxmLmJ1aWxkMykKKworICAgICAgICBsZWZ0X3BhbmVsID0gc2VsZi5maW5kX2FsbCgnI25hdicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxlZnRfcGFuZWwpLCAwKQorCisgICAgICAgIGJ1aWxkX3N1bW1hcnkgPSBzZWxmLmZpbmRfYWxsKCdbZGF0YS1yb2xlPSJidWlsZC1zdW1tYXJ5LWhlYWRpbmciXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1aWxkX3N1bW1hcnkpLCAwKQorCisgICAgZGVmIHRlc3RfZmFpbGVkX3Nob3dzX2Vycm9yc19hbmRfd2FybmluZ3Moc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBGYWlsZWQgYnVpbGRzIHNob3VsZCBzdGlsbCBzaG93IGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9nZXRfYnVpbGRfZGFzaGJvYXJkKHNlbGYuYnVpbGQzKQorCisgICAgICAgIGVycm9ycyA9IHNlbGYuZmluZF9hbGwoJyNlcnJvcnMgZGl2LmFsZXJ0LWRhbmdlcicpCisgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl9sb2dfbWVzc2FnZShlcnJvcnMsIHNlbGYuZXJyb3JfbWVzc2FnZSkKKworICAgICAgICAjIGV4cGFuZCB0aGUgd2FybmluZ3MgYXJlYQorICAgICAgICBzZWxmLmNsaWNrKCcjd2FybmluZy10b2dnbGUnKQorICAgICAgICBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI3dhcm5pbmdzIGRpdi5hbGVydC13YXJuaW5nJykKKworICAgICAgICB3YXJuaW5ncyA9IHNlbGYuZmluZF9hbGwoJyN3YXJuaW5ncyBkaXYuYWxlcnQtd2FybmluZycpCisgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl9sb2dfbWVzc2FnZSh3YXJuaW5ncywgc2VsZi53YXJuaW5nX21lc3NhZ2UpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYnVpbGRkYXNoYm9hcmRfcGFnZV9hcnRpZmFjdHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYnVpbGRkYXNoYm9hcmRfcGFnZV9hcnRpZmFjdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2MjdhZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9idWlsZGRhc2hib2FyZF9wYWdlX2FydGlmYWN0cy5weQpAQCAtMCwwICsxLDIyMiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisKK2Zyb20gdGVzdHMuYnJvd3Nlci5zZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUmVsZWFzZSwgQml0YmFrZVZlcnNpb24sIEJ1aWxkLCBUYXJnZXQsIFBhY2thZ2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFyZ2V0X0ltYWdlX0ZpbGUsIFRhcmdldFNES0ZpbGUsIFRhcmdldEtlcm5lbEZpbGUKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLCBWYXJpYWJsZQorCitjbGFzcyBUZXN0QnVpbGREYXNoYm9hcmRQYWdlQXJ0aWZhY3RzKFNlbGVuaXVtVGVzdENhc2UpOgorICAgICIiIiBUZXN0cyBmb3IgYXJ0aWZhY3RzIG9uIHRoZSBidWlsZCBkYXNoYm9hcmQgL2J1aWxkL1ggIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKG5hbWU9J2JidjEnLCBnaXR1cmw9Jy90bXAvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoPSdtYXN0ZXInLCBkaXJwYXRoPSIiKQorICAgICAgICByZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmNyZWF0ZShuYW1lPSdyZWxlYXNlMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyc2lvbj1iYnYpCisgICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdChuYW1lPSd0ZXN0IHByb2plY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZT1yZWxlYXNlKQorCisgICAgZGVmIF9nZXRfYnVpbGRfZGFzaGJvYXJkKHNlbGYsIGJ1aWxkKToKKyAgICAgICAgIiIiCisgICAgICAgIE5hdmlnYXRlIHRvIHRoZSBidWlsZCBkYXNoYm9hcmQgZm9yIGJ1aWxkCisgICAgICAgICIiIgorICAgICAgICB1cmwgPSByZXZlcnNlKCdidWlsZGRhc2hib2FyZCcsIGFyZ3M9KGJ1aWxkLmlkLCkpCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKworICAgIGRlZiBfaGFzX2J1aWxkX2FydGlmYWN0c19oZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgd2hldGhlciB0aGUgIkJ1aWxkIGFydGlmYWN0cyIgaGVhZGluZyBpcyB2aXNpYmxlIChUcnVlIGlmIGl0CisgICAgICAgIGlzLCBGYWxzZSBvdGhlcndpc2UpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZWxlbWVudF9leGlzdHMoJ1tkYXRhLWhlYWRpbmc9ImJ1aWxkLWFydGlmYWN0cyJdJykKKworICAgIGRlZiBfaGFzX2ltYWdlc19tZW51X29wdGlvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyeSB0byBnZXQgdGhlICJJbWFnZXMiIGxpc3QgZWxlbWVudCBmcm9tIHRoZSBsZWZ0LWhhbmQgbWVudSBpbiB0aGUKKyAgICAgICAgYnVpbGQgZGFzaGJvYXJkLCBhbmQgcmV0dXJuIFRydWUgaWYgaXQgaXMgcHJlc2VudCwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZWxlbWVudF9leGlzdHMoJ2xpLm5hdi1oZWFkZXJbZGF0YS1tZW51LWhlYWRpbmc9ImltYWdlcyJdJykKKworICAgIGRlZiB0ZXN0X25vX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIGEgYnVpbGQgcHJvZHVjZWQgbm8gYXJ0aWZhY3RzLCB0aGUgYXJ0aWZhY3RzIGhlYWRpbmcgYW5kIGltYWdlcworICAgICAgICBtZW51IG9wdGlvbiBzaG91bGRuJ3Qgc2hvdy4KKyAgICAgICAgIiIiCisgICAgICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QsCisgICAgICAgICAgICBzdGFydGVkX29uPW5vdywgY29tcGxldGVkX29uPW5vdywgb3V0Y29tZT1CdWlsZC5TVUNDRUVERUQpCisKKyAgICAgICAgVGFyZ2V0Lm9iamVjdHMuY3JlYXRlKGlzX2ltYWdlPUZhbHNlLCBidWlsZD1idWlsZCwgdGFzaz0nJywKKyAgICAgICAgICAgIHRhcmdldD0nbXBmci1uYXRpdmUnKQorCisgICAgICAgIHNlbGYuX2dldF9idWlsZF9kYXNoYm9hcmQoYnVpbGQpCisKKyAgICAgICAgIyBjaGVjayBidWlsZCBhcnRpZmFjdHMgaGVhZGluZworICAgICAgICBtc2cgPSAnQnVpbGQgYXJ0aWZhY3RzIGhlYWRpbmcgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQgZm9yIG5vbi1pbWFnZScgXAorICAgICAgICAgICAgJ2J1aWxkcycKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9oYXNfYnVpbGRfYXJ0aWZhY3RzX2hlYWRpbmcoKSwgbXNnKQorCisgICAgICAgICMgY2hlY2sgIkltYWdlcyIgb3B0aW9uIGluIGxlZnQtaGFuZCBtZW51IChzaG91bGQgbm90IGJlIHRoZXJlKQorICAgICAgICBtc2cgPSAnSW1hZ2VzIG9wdGlvbiBzaG91bGQgbm90IGJlIHNob3duIGluIGxlZnQtaGFuZCBtZW51JworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuX2hhc19pbWFnZXNfbWVudV9vcHRpb24oKSwgbXNnKQorCisgICAgZGVmIHRlc3Rfc2RrX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIGEgYnVpbGQgcHJvZHVjZWQgU0RLIGFydGlmYWN0cywgdGhleSBzaG91bGQgYmUgc2hvd24sIGJ1dCB0aGUgc2VjdGlvbgorICAgICAgICBmb3IgaW1hZ2UgZmlsZXMgYW5kIHRoZSBpbWFnZXMgbWVudSBvcHRpb24gc2hvdWxkIGJlIGhpZGRlbi4KKworICAgICAgICBUaGUgcGFja2FnZXMgY291bnQgYW5kIHNpemUgc2hvdWxkIGFsc28gYmUgaGlkZGVuLgorICAgICAgICAiIiIKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXNlbGYucHJvamVjdCwKKyAgICAgICAgICAgIHN0YXJ0ZWRfb249bm93LCBjb21wbGV0ZWRfb249dGltZXpvbmUubm93KCksCisgICAgICAgICAgICBvdXRjb21lPUJ1aWxkLlNVQ0NFRURFRCkKKworICAgICAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5jcmVhdGUoaXNfaW1hZ2U9VHJ1ZSwgYnVpbGQ9YnVpbGQsCisgICAgICAgICAgICB0YXNrPSdwb3B1bGF0ZV9zZGsnLCB0YXJnZXQ9J2NvcmUtaW1hZ2UtbWluaW1hbCcpCisKKyAgICAgICAgc2RrX2ZpbGUxID0gVGFyZ2V0U0RLRmlsZS5vYmplY3RzLmNyZWF0ZSh0YXJnZXQ9dGFyZ2V0LAorICAgICAgICAgICAgZmlsZV9zaXplPTEwMDAwMCwKKyAgICAgICAgICAgIGZpbGVfbmFtZT0nL2hvbWUvZm9vL2NvcmUtaW1hZ2UtbWluaW1hbC50b29sY2hhaW4uc2gnKQorCisgICAgICAgIHNka19maWxlMiA9IFRhcmdldFNES0ZpbGUub2JqZWN0cy5jcmVhdGUodGFyZ2V0PXRhcmdldCwKKyAgICAgICAgICAgIGZpbGVfc2l6ZT0xMjAwMDAsCisgICAgICAgICAgICBmaWxlX25hbWU9Jy9ob21lL2Zvby94ODZfNjQudG9vbGNoYWluLnNoJykKKworICAgICAgICBzZWxmLl9nZXRfYnVpbGRfZGFzaGJvYXJkKGJ1aWxkKQorCisgICAgICAgICMgY2hlY2sgYnVpbGQgYXJ0aWZhY3RzIGhlYWRpbmcKKyAgICAgICAgbXNnID0gJ0J1aWxkIGFydGlmYWN0cyBoZWFkaW5nIHNob3VsZCBiZSBkaXNwbGF5ZWQgZm9yIFNESyAnIFwKKyAgICAgICAgICAgICdidWlsZHMgd2hpY2ggZ2VuZXJhdGUgYXJ0aWZhY3RzJworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5faGFzX2J1aWxkX2FydGlmYWN0c19oZWFkaW5nKCksIG1zZykKKworICAgICAgICAjIGNoZWNrICJJbWFnZXMiIG9wdGlvbiBpbiBsZWZ0LWhhbmQgbWVudSAoc2hvdWxkIG5vdCBiZSB0aGVyZSkKKyAgICAgICAgbXNnID0gJ0ltYWdlcyBvcHRpb24gc2hvdWxkIG5vdCBiZSBzaG93biBpbiBsZWZ0LWhhbmQgbWVudSBmb3IgJyBcCisgICAgICAgICAgICAnYnVpbGRzIHdoaWNoIGRpZG5cJ3QgZ2VuZXJhdGUgYW4gaW1hZ2UgZmlsZScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9oYXNfaW1hZ2VzX21lbnVfb3B0aW9uKCksIG1zZykKKworICAgICAgICAjIGNoZWNrIGxpbmtzIHRvIFNESyBhcnRpZmFjdHMKKyAgICAgICAgc2RrX2FydGlmYWN0X2xpbmtzID0gc2VsZi5maW5kX2FsbCgnW2RhdGEtbGlua3M9InNkay1hcnRpZmFjdHMiXSBsaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNka19hcnRpZmFjdF9saW5rcyksIDIsCisgICAgICAgICAgICAnc2hvdWxkIGJlIGxpbmtzIHRvIDIgU0RLIGFydGlmYWN0cycpCisKKyAgICAgICAgIyBwYWNrYWdlIGNvdW50IGFuZCBzaXplIHNob3VsZCBub3QgYmUgdmlzaWJsZSwgbm8gbGluayBvbgorICAgICAgICAjIHRhcmdldCBuYW1lCisgICAgICAgIHNlbGVjdG9yID0gJ1tkYXRhLXZhbHVlPSJ0YXJnZXQtcGFja2FnZS1jb3VudCJdJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZWxlbWVudF9leGlzdHMoc2VsZWN0b3IpLAorICAgICAgICAgICAgJ3BhY2thZ2UgY291bnQgc2hvdWxkIG5vdCBiZSBzaG93biBmb3Igbm9uLWltYWdlIGJ1aWxkcycpCisKKyAgICAgICAgc2VsZWN0b3IgPSAnW2RhdGEtdmFsdWU9InRhcmdldC1wYWNrYWdlLXNpemUiXScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmVsZW1lbnRfZXhpc3RzKHNlbGVjdG9yKSwKKyAgICAgICAgICAgICdwYWNrYWdlIHNpemUgc2hvdWxkIG5vdCBiZSBzaG93biBmb3Igbm9uLWltYWdlIGJ1aWxkcycpCisKKyAgICAgICAgc2VsZWN0b3IgPSAnW2RhdGEtbGluaz0idGFyZ2V0LXBhY2thZ2VzIl0nCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5lbGVtZW50X2V4aXN0cyhzZWxlY3RvciksCisgICAgICAgICAgICAnbGluayB0byB0YXJnZXQgcGFja2FnZXMgc2hvdWxkIG5vdCBiZSBvbiB0YXJnZXQgaGVhZGluZycpCisKKyAgICBkZWYgdGVzdF9pbWFnZV9hcnRpZmFjdHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBJZiBhIGJ1aWxkIHByb2R1Y2VkIGltYWdlIGZpbGVzLCBrZXJuZWwgYXJ0aWZhY3RzLCBhbmQgbWFuaWZlc3RzLAorICAgICAgICB0aGV5IHNob3VsZCBhbGwgYmUgc2hvd24sIGFzIHdlbGwgYXMgdGhlIGltYWdlIGxpbmsgaW4gdGhlIGxlZnQtaGFuZAorICAgICAgICBtZW51LgorCisgICAgICAgIFRoZSBwYWNrYWdlcyBjb3VudCBhbmQgc2l6ZSBzaG91bGQgYmUgc2hvd24sIHdpdGggYSBsaW5rIHRvIHRoZQorICAgICAgICBwYWNrYWdlIGRpc3BsYXkgcGFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QsCisgICAgICAgICAgICBzdGFydGVkX29uPW5vdywgY29tcGxldGVkX29uPXRpbWV6b25lLm5vdygpLAorICAgICAgICAgICAgb3V0Y29tZT1CdWlsZC5TVUNDRUVERUQpCisKKyAgICAgICAgIyBhZGQgYSB2YXJpYWJsZSB0byB0aGUgYnVpbGQgc28gdGhhdCBpdCBjb3VudHMgYXMgInN0YXJ0ZWQiCisgICAgICAgIFZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKGJ1aWxkPWJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9uYW1lPSdDaHJpc3RvcGhlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3ZhbHVlPSdMZWUnKQorCisgICAgICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmNyZWF0ZShpc19pbWFnZT1UcnVlLCBidWlsZD1idWlsZCwKKyAgICAgICAgICAgIHRhc2s9JycsIHRhcmdldD0nY29yZS1pbWFnZS1taW5pbWFsJywKKyAgICAgICAgICAgIGxpY2Vuc2VfbWFuaWZlc3RfcGF0aD0nL2hvbWUvZm9vL2xpY2Vuc2UubWFuaWZlc3QnLAorICAgICAgICAgICAgcGFja2FnZV9tYW5pZmVzdF9wYXRoPScvaG9tZS9mb28vcGFja2FnZS5tYW5pZmVzdCcpCisKKyAgICAgICAgaW1hZ2VfZmlsZSA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuY3JlYXRlKHRhcmdldD10YXJnZXQsCisgICAgICAgICAgICBmaWxlX25hbWU9Jy9ob21lL2Zvby9jb3JlLWltYWdlLW1pbmltYWwuZXh0NCcsIGZpbGVfc2l6ZT05MDAwKQorCisgICAgICAgIGtlcm5lbF9maWxlMSA9IFRhcmdldEtlcm5lbEZpbGUub2JqZWN0cy5jcmVhdGUodGFyZ2V0PXRhcmdldCwKKyAgICAgICAgICAgIGZpbGVfbmFtZT0nL2hvbWUvZm9vL2J6SW1hZ2UnLCBmaWxlX3NpemU9MjAwMCkKKworICAgICAgICBrZXJuZWxfZmlsZTIgPSBUYXJnZXRLZXJuZWxGaWxlLm9iamVjdHMuY3JlYXRlKHRhcmdldD10YXJnZXQsCisgICAgICAgICAgICBmaWxlX25hbWU9Jy9ob21lL2Zvby9iekltYWdlJywgZmlsZV9zaXplPTIwMDApCisKKyAgICAgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5jcmVhdGUoYnVpbGQ9YnVpbGQsIG5hbWU9J2ZvbycsIHNpemU9MTAyNCwKKyAgICAgICAgICAgIGluc3RhbGxlZF9uYW1lPSdmb28xJykKKyAgICAgICAgaW5zdGFsbGVkX3BhY2thZ2UgPSBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICB0YXJnZXQ9dGFyZ2V0LCBwYWNrYWdlPXBhY2thZ2UpCisKKyAgICAgICAgc2VsZi5fZ2V0X2J1aWxkX2Rhc2hib2FyZChidWlsZCkKKworICAgICAgICAjIGNoZWNrIGJ1aWxkIGFydGlmYWN0cyBoZWFkaW5nCisgICAgICAgIG1zZyA9ICdCdWlsZCBhcnRpZmFjdHMgaGVhZGluZyBzaG91bGQgYmUgZGlzcGxheWVkIGZvciBpbWFnZSAnIFwKKyAgICAgICAgICAgICdidWlsZHMnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9oYXNfYnVpbGRfYXJ0aWZhY3RzX2hlYWRpbmcoKSwgbXNnKQorCisgICAgICAgICMgY2hlY2sgIkltYWdlcyIgb3B0aW9uIGluIGxlZnQtaGFuZCBtZW51IChzaG91bGQgYmUgdGhlcmUpCisgICAgICAgIG1zZyA9ICdJbWFnZXMgb3B0aW9uIHNob3VsZCBiZSBzaG93biBpbiBsZWZ0LWhhbmQgbWVudSBmb3IgaW1hZ2UgYnVpbGRzJworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5faGFzX2ltYWdlc19tZW51X29wdGlvbigpLCBtc2cpCisKKyAgICAgICAgIyBjaGVjayBsaW5rIHRvIGltYWdlIGZpbGUKKyAgICAgICAgc2VsZWN0b3IgPSAnW2RhdGEtbGlua3M9ImltYWdlLWFydGlmYWN0cyJdIGxpJworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbGVtZW50X2V4aXN0cyhzZWxlY3RvciksCisgICAgICAgICAgICAnc2hvdWxkIGJlIGEgbGluayB0byB0aGUgaW1hZ2UgZmlsZSAoc2VsZWN0b3IgJXMpJyAlIHNlbGVjdG9yKQorCisgICAgICAgICMgY2hlY2sgbGlua3MgdG8ga2VybmVsIGFydGlmYWN0cworICAgICAgICBrZXJuZWxfYXJ0aWZhY3RfbGlua3MgPSBcCisgICAgICAgICAgICBzZWxmLmZpbmRfYWxsKCdbZGF0YS1saW5rcz0ia2VybmVsLWFydGlmYWN0cyJdIGxpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2VybmVsX2FydGlmYWN0X2xpbmtzKSwgMiwKKyAgICAgICAgICAgICdzaG91bGQgYmUgbGlua3MgdG8gMiBrZXJuZWwgYXJ0aWZhY3RzJykKKworICAgICAgICAjIGNoZWNrIG1hbmlmZXN0IGxpbmtzCisgICAgICAgIHNlbGVjdG9yID0gJ2FbZGF0YS1saW5rPSJsaWNlbnNlLW1hbmlmZXN0Il0nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVsZW1lbnRfZXhpc3RzKHNlbGVjdG9yKSwKKyAgICAgICAgICAgICdzaG91bGQgYmUgYSBsaW5rIHRvIHRoZSBsaWNlbnNlIG1hbmlmZXN0IChzZWxlY3RvciAlcyknICUgc2VsZWN0b3IpCisKKyAgICAgICAgc2VsZWN0b3IgPSAnYVtkYXRhLWxpbms9InBhY2thZ2UtbWFuaWZlc3QiXScKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZWxlbWVudF9leGlzdHMoc2VsZWN0b3IpLAorICAgICAgICAgICAgJ3Nob3VsZCBiZSBhIGxpbmsgdG8gdGhlIHBhY2thZ2UgbWFuaWZlc3QgKHNlbGVjdG9yICVzKScgJSBzZWxlY3RvcikKKworICAgICAgICAjIGNoZWNrIHBhY2thZ2UgY291bnQgYW5kIHNpemUsIGxpbmsgb24gdGFyZ2V0IG5hbWUKKyAgICAgICAgc2VsZWN0b3IgPSAnW2RhdGEtdmFsdWU9InRhcmdldC1wYWNrYWdlLWNvdW50Il0nCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLmZpbmQoc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVsZW1lbnQudGV4dCwgJzEnLAorICAgICAgICAgICAgJ3BhY2thZ2UgY291bnQgc2hvdWxkIGJlIHNob3duIGZvciBpbWFnZSBidWlsZHMnKQorCisgICAgICAgIHNlbGVjdG9yID0gJ1tkYXRhLXZhbHVlPSJ0YXJnZXQtcGFja2FnZS1zaXplIl0nCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLmZpbmQoc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVsZW1lbnQudGV4dCwgJzEuMCBLQicsCisgICAgICAgICAgICAncGFja2FnZSBzaXplIHNob3VsZCBiZSBzaG93biBmb3IgaW1hZ2UgYnVpbGRzJykKKworICAgICAgICBzZWxlY3RvciA9ICdbZGF0YS1saW5rPSJ0YXJnZXQtcGFja2FnZXMiXScKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZWxlbWVudF9leGlzdHMoc2VsZWN0b3IpLAorICAgICAgICAgICAgJ2xpbmsgdG8gdGFyZ2V0IHBhY2thZ2VzIHNob3VsZCBiZSBvbiB0YXJnZXQgaGVhZGluZycpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYnVpbGRkYXNoYm9hcmRfcGFnZV9yZWNpcGVzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2J1aWxkZGFzaGJvYXJkX3BhZ2VfcmVjaXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDE4MzI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2J1aWxkZGFzaGJvYXJkX3BhZ2VfcmVjaXBlcy5weQpAQCAtMCwwICsxLDY2IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gdGVzdHMuYnJvd3Nlci5zZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIEJ1aWxkLCBSZWNpcGUsIFRhc2ssIExheWVyLCBMYXllcl9WZXJzaW9uCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhcmdldAorCitjbGFzcyBUZXN0QnVpbGRkYXNoYm9hcmRQYWdlUmVjaXBlcyhTZWxlbml1bVRlc3RDYXNlKToKKyAgICAiIiIgVGVzdCBidWlsZCBkYXNoYm9hcmQgcmVjaXBlcyBzdWItcGFnZSAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXRfb3JfY3JlYXRlX2RlZmF1bHRfcHJvamVjdCgpCisKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKworICAgICAgICBzZWxmLmJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD1wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249bm93KQorCisgICAgICAgIGxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUoKQorCisgICAgICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPWxheWVyLAorICAgICAgICAgICAgYnVpbGQ9c2VsZi5idWlsZCkKKworICAgICAgICByZWNpcGUgPSBSZWNpcGUub2JqZWN0cy5jcmVhdGUobGF5ZXJfdmVyc2lvbj1sYXllcl92ZXJzaW9uKQorCisgICAgICAgIHRhc2sgPSBUYXNrLm9iamVjdHMuY3JlYXRlKGJ1aWxkPXNlbGYuYnVpbGQsIHJlY2lwZT1yZWNpcGUsIG9yZGVyPTEpCisKKyAgICAgICAgVGFyZ2V0Lm9iamVjdHMuY3JlYXRlKGJ1aWxkPXNlbGYuYnVpbGQsIHRhc2s9dGFzaywgdGFyZ2V0PSdkb19idWlsZCcpCisKKyAgICBkZWYgdGVzdF9idWlsZF9yZWNpcGVzX2NvbHVtbnMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGF0IG5vbi1oaWRlYWJsZSBjb2x1bW5zIG9mIHRoZSB0YWJsZSBvbiB0aGUgcmVjaXBlcyBzdWItcGFnZQorICAgICAgICBhcmUgZGlzYWJsZWQgb24gdGhlIGVkaXQgY29sdW1ucyBkcm9wZG93bi4KKyAgICAgICAgIiIiCisgICAgICAgIHVybCA9IHJldmVyc2UoJ3JlY2lwZXMnLCBhcmdzPShzZWxmLmJ1aWxkLmlkLCkpCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKworICAgICAgICBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI2VkaXQtY29sdW1ucy1idXR0b24nKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBvcHRpb25zIGZvciB0aGUgbm9uLWhpZGVhYmxlIGNvbHVtbnMgYXJlIGRpc2FibGVkCisgICAgICAgIG5vbl9oaWRlYWJsZSA9IFsnbmFtZScsICd2ZXJzaW9uJ10KKworICAgICAgICBmb3IgY29sdW1uIGluIG5vbl9oaWRlYWJsZToKKyAgICAgICAgICAgIHNlbGVjdG9yID0gJ2lucHV0I2NoZWNrYm94LSVzW2Rpc2FibGVkPSJkaXNhYmxlZCJdJyAlIGNvbHVtbgorICAgICAgICAgICAgc2VsZi53YWl0X3VudGlsX3ByZXNlbnQoc2VsZWN0b3IpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYnVpbGRkYXNoYm9hcmRfcGFnZV90YXNrcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9idWlsZGRhc2hib2FyZF9wYWdlX3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNTBmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfYnVpbGRkYXNoYm9hcmRfcGFnZV90YXNrcy5weQpAQCAtMCwwICsxLDY1IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gdGVzdHMuYnJvd3Nlci5zZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIEJ1aWxkLCBSZWNpcGUsIFRhc2ssIExheWVyLCBMYXllcl9WZXJzaW9uCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhcmdldAorCitjbGFzcyBUZXN0QnVpbGRkYXNoYm9hcmRQYWdlVGFza3MoU2VsZW5pdW1UZXN0Q2FzZSk6CisgICAgIiIiIFRlc3QgYnVpbGQgZGFzaGJvYXJkIHRhc2tzIHN1Yi1wYWdlICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldF9vcl9jcmVhdGVfZGVmYXVsdF9wcm9qZWN0KCkKKworICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorCisgICAgICAgIHNlbGYuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkX29uPW5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3cpCisKKyAgICAgICAgbGF5ZXIgPSBMYXllci5vYmplY3RzLmNyZWF0ZSgpCisKKyAgICAgICAgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9bGF5ZXIpCisKKyAgICAgICAgcmVjaXBlID0gUmVjaXBlLm9iamVjdHMuY3JlYXRlKGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbikKKworICAgICAgICB0YXNrID0gVGFzay5vYmplY3RzLmNyZWF0ZShidWlsZD1zZWxmLmJ1aWxkLCByZWNpcGU9cmVjaXBlLCBvcmRlcj0xKQorCisgICAgICAgIFRhcmdldC5vYmplY3RzLmNyZWF0ZShidWlsZD1zZWxmLmJ1aWxkLCB0YXNrPXRhc2ssIHRhcmdldD0nZG9fYnVpbGQnKQorCisgICAgZGVmIHRlc3RfYnVpbGRfdGFza3NfY29sdW1ucyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRoYXQgbm9uLWhpZGVhYmxlIGNvbHVtbnMgb2YgdGhlIHRhYmxlIG9uIHRoZSB0YXNrcyBzdWItcGFnZQorICAgICAgICBhcmUgZGlzYWJsZWQgb24gdGhlIGVkaXQgY29sdW1ucyBkcm9wZG93bi4KKyAgICAgICAgIiIiCisgICAgICAgIHVybCA9IHJldmVyc2UoJ3Rhc2tzJywgYXJncz0oc2VsZi5idWlsZC5pZCwpKQorICAgICAgICBzZWxmLmdldCh1cmwpCisKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoJyNlZGl0LWNvbHVtbnMtYnV0dG9uJykKKworICAgICAgICAjIGNoZWNrIHRoYXQgb3B0aW9ucyBmb3IgdGhlIG5vbi1oaWRlYWJsZSBjb2x1bW5zIGFyZSBkaXNhYmxlZAorICAgICAgICBub25faGlkZWFibGUgPSBbJ29yZGVyJywgJ3Rhc2tfbmFtZScsICdyZWNpcGVfX25hbWUnXQorCisgICAgICAgIGZvciBjb2x1bW4gaW4gbm9uX2hpZGVhYmxlOgorICAgICAgICAgICAgc2VsZWN0b3IgPSAnaW5wdXQjY2hlY2tib3gtJXNbZGlzYWJsZWQ9ImRpc2FibGVkIl0nICUgY29sdW1uCisgICAgICAgICAgICBzZWxmLndhaXRfdW50aWxfcHJlc2VudChzZWxlY3RvcikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9qc191bml0X3Rlc3RzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2pzX3VuaXRfdGVzdHMucHkKaW5kZXggZTYzZGE4ZS4uM2MwYjk2MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2pzX3VuaXRfdGVzdHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2pzX3VuaXRfdGVzdHMucHkKQEAgLTM4LDExICszOCwxMSBAQAogICAgIGRlZiB0ZXN0X3RoYXRfanNfdW5pdF90ZXN0c19wYXNzKHNlbGYpOgogICAgICAgICB1cmwgPSByZXZlcnNlKCdqcy11bml0LXRlc3RzJykKICAgICAgICAgc2VsZi5nZXQodXJsKQotICAgICAgICBzZWxmLndhaXRfdW50aWxfcHJlc2VudCgnI3Rlc3RzLWZhaWxlZCcpCisgICAgICAgIHNlbGYud2FpdF91bnRpbF9wcmVzZW50KCcjcXVuaXQtdGVzdHJlc3VsdCAuZmFpbGVkJykKIAotICAgICAgICBmYWlsZWQgPSBzZWxmLmZpbmQoIiN0ZXN0cy1mYWlsZWQiKS50ZXh0Ci0gICAgICAgIHBhc3NlZCA9IHNlbGYuZmluZCgiI3Rlc3RzLXBhc3NlZCIpLnRleHQKLSAgICAgICAgdG90YWwgPSBzZWxmLmZpbmQoIiN0ZXN0cy10b3RhbCIpLnRleHQKKyAgICAgICAgZmFpbGVkID0gc2VsZi5maW5kKCIjcXVuaXQtdGVzdHJlc3VsdCAuZmFpbGVkIikudGV4dAorICAgICAgICBwYXNzZWQgPSBzZWxmLmZpbmQoIiNxdW5pdC10ZXN0cmVzdWx0IC5wYXNzZWQiKS50ZXh0CisgICAgICAgIHRvdGFsID0gc2VsZi5maW5kKCIjcXVuaXQtdGVzdHJlc3VsdCAudG90YWwiKS50ZXh0CiAKICAgICAgICAgbG9nZ2VyLmluZm8oIkpzIHVuaXQgdGVzdHMgY29tcGxldGVkICVzIG91dCBvZiAlcyBwYXNzZWQsICVzIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9sYXllcmRldGFpbHNfcGFnZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9sYXllcmRldGFpbHNfcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzkyZDFlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X2xheWVyZGV0YWlsc19wYWdlLnB5CkBAIC0wLDAgKzEsMjE1IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIHRlc3RzLmJyb3dzZXIuc2VsZW5pdW1faGVscGVycyBpbXBvcnQgU2VsZW5pdW1UZXN0Q2FzZQorCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyLCBMYXllcl9WZXJzaW9uLCBQcm9qZWN0LCBMYXllclNvdXJjZSwgUmVsZWFzZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCaXRiYWtlVmVyc2lvbgorCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0IGltcG9ydCBleHBlY3RlZF9jb25kaXRpb25zIGFzIEVDCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0LnVpIGltcG9ydCBXZWJEcml2ZXJXYWl0Citmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24uYnkgaW1wb3J0IEJ5CisKKworY2xhc3MgVGVzdExheWVyRGV0YWlsc1BhZ2UoU2VsZW5pdW1UZXN0Q2FzZSk6CisgICAgIiIiIFRlc3QgbGF5ZXJkZXRhaWxzIHBhZ2Ugd29ya3MgY29ycmVjdGx5ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFRlc3RMYXllckRldGFpbHNQYWdlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5pbml0aWFsX3ZhbHVlcyA9IE5vbmUKKyAgICAgICAgc2VsZi51cmwgPSBOb25lCisgICAgICAgIHNlbGYuaW1wb3J0ZWRfbGF5ZXJfdmVyc2lvbiA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICBuYW1lPSdiYXonLAorICAgICAgICAgICAgYml0YmFrZV92ZXJzaW9uPUJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKG5hbWU9J3YxJykKKyAgICAgICAgKQorCisgICAgICAgICMgcHJvamVjdCB0byBhZGQgbmV3IGN1c3RvbSBpbWFnZXMgdG8KKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZShuYW1lPSdmb28nLCByZWxlYXNlPXJlbGVhc2UpCisKKyAgICAgICAgbmFtZSA9ICJtZXRhLWltcG9ydGVkIgorICAgICAgICB2Y3NfdXJsID0gImdpdDovL2V4YW1wbGUuY29tL21ldGEtaW1wb3J0ZWQiCisgICAgICAgIHN1YmRpciA9ICIvbGF5ZXIiCisgICAgICAgIGdpdHJldiA9ICJkMzNkIgorICAgICAgICBzdW1tYXJ5ID0gIkEgaW1wb3J0ZWQgbGF5ZXIiCisgICAgICAgIGRlc2NyaXB0aW9uID0gIlRoaXMgd2FzIGltcG9ydGVkIgorCisgICAgICAgIGltcG9ydGVkX2xheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT1uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjc191cmw9dmNzX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5PXN1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisKKyAgICAgICAgc2VsZi5pbXBvcnRlZF9sYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgIGxheWVyPWltcG9ydGVkX2xheWVyLAorICAgICAgICAgICAgbGF5ZXJfc291cmNlPUxheWVyU291cmNlLlRZUEVfSU1QT1JURUQsCisgICAgICAgICAgICBicmFuY2g9Z2l0cmV2LAorICAgICAgICAgICAgY29tbWl0PWdpdHJldiwKKyAgICAgICAgICAgIGRpcnBhdGg9c3ViZGlyLAorICAgICAgICAgICAgcHJvamVjdD1zZWxmLnByb2plY3QpCisKKyAgICAgICAgc2VsZi5pbml0aWFsX3ZhbHVlcyA9IFtuYW1lLCB2Y3NfdXJsLCBzdWJkaXIsIGdpdHJldiwgc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl0KKyAgICAgICAgc2VsZi51cmwgPSByZXZlcnNlKCdsYXllcmRldGFpbHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oc2VsZi5wcm9qZWN0LnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRlZF9sYXllcl92ZXJzaW9uLnBrKSkKKworICAgIGRlZiB0ZXN0X2VkaXRfbGF5ZXJkZXRhaWxzKHNlbGYpOgorICAgICAgICAiIiIgRWRpdCBhbGwgdGhlIGVkaXRhYmxlIGZpZWxkcyBmb3IgdGhlIGxheWVyIHJlZnJlc2ggdGhlIHBhZ2UgYW5kCisgICAgICAgIGNoZWNrIHRoYXQgdGhlIG5ldyB2YWx1ZXMgZXhpc3QiIiIKKworICAgICAgICBzZWxmLmdldChzZWxmLnVybCkKKworICAgICAgICBzZWxmLmNsaWNrKCIjYWRkLXJlbW92ZS1sYXllci1idG4iKQorICAgICAgICBzZWxmLmNsaWNrKCIjZWRpdC1sYXllci1zb3VyY2UiKQorICAgICAgICBzZWxmLmNsaWNrKCIjcmVwbyIpCisKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoIiNsYXllci1naXQtcmVwby11cmwiKQorCisgICAgICAgICMgT3BlbiBldmVyeSBlZGl0IGJveAorICAgICAgICBmb3IgYnRuIGluIHNlbGYuZmluZF9hbGwoImRkIC5nbHlwaGljb24tZWRpdCIpOgorICAgICAgICAgICAgYnRuLmNsaWNrKCkKKworICAgICAgICAjIFdhaXQgZm9yIHRoZSBpbnB1dHMgdG8gYmVjb21lIHZpc2libGUKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoIiNsYXllci1naXQgaW5wdXRbdHlwZT10ZXh0XSIpCisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCJkZCB0ZXh0YXJlYSIpCisKKyAgICAgICAgIyBFZGl0IGVhY2ggdmFsdWUKKyAgICAgICAgZm9yIGlucHV0cyBpbiBzZWxmLmZpbmRfYWxsKCIjbGF5ZXItZ2l0IGlucHV0W3R5cGU9dGV4dF0iKSArIFwKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfYWxsKCJkZCB0ZXh0YXJlYSIpOgorICAgICAgICAgICAgIyBpZ25vcmUgdGhlIHR0IGlucHV0cyAodHdpdHRlciB0eXBlYWhlYWQgaW5wdXQpCisgICAgICAgICAgICBpZiAidHQtIiBpbiBpbnB1dHMuZ2V0X2F0dHJpYnV0ZSgiY2xhc3MiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB2YWx1ZSA9IGlucHV0cy5nZXRfYXR0cmlidXRlKCJ2YWx1ZSIpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZSBpbiBzZWxmLmluaXRpYWxfdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RpbmcgYW55IG9mIFwiJXNcImJ1dCBnb3QgXCIlc1wiIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuaW5pdGlhbF92YWx1ZXMsIHZhbHVlKSkKKworICAgICAgICAgICAgaW5wdXRzLnNlbmRfa2V5cygiLWVkaXRlZCIpCisKKyAgICAgICAgIyBTYXZlIHRoZSBuZXcgdmFsdWVzCisgICAgICAgIGZvciBzYXZlX2J0biBpbiBzZWxmLmZpbmRfYWxsKCIuY2hhbmdlLWJ0biIpOgorICAgICAgICAgICAgc2F2ZV9idG4uY2xpY2soKQorCisgICAgICAgIHNlbGYuY2xpY2soIiNzYXZlLWNoYW5nZXMtZm9yLXN3aXRjaCIpCisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCIjZWRpdC1sYXllci1zb3VyY2UiKQorCisgICAgICAgICMgUmVmcmVzaCB0aGUgcGFnZSB0byBzZWUgaWYgdGhlIG5ldyB2YWx1ZXMgYXJlIHJldHVybmVkCisgICAgICAgIHNlbGYuZ2V0KHNlbGYudXJsKQorCisgICAgICAgIG5ld192YWx1ZXMgPSBbIiVzLWVkaXRlZCIgJSBvbGRfdmFsCisgICAgICAgICAgICAgICAgICAgICAgZm9yIG9sZF92YWwgaW4gc2VsZi5pbml0aWFsX3ZhbHVlc10KKworICAgICAgICBmb3IgaW5wdXRzIGluIHNlbGYuZmluZF9hbGwoJyNsYXllci1naXQgaW5wdXRbdHlwZT0idGV4dCJdJykgKyBcCisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2FsbCgnZGQgdGV4dGFyZWEnKToKKyAgICAgICAgICAgICMgaWdub3JlIHRoZSB0dCBpbnB1dHMgKHR3aXR0ZXIgdHlwZWFoZWFkIGlucHV0KQorICAgICAgICAgICAgaWYgInR0LSIgaW4gaW5wdXRzLmdldF9hdHRyaWJ1dGUoImNsYXNzIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHMuZ2V0X2F0dHJpYnV0ZSgidmFsdWUiKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUgaW4gbmV3X3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0aW5nIGFueSBvZiBcIiVzXCIgYnV0IGdvdCBcIiVzXCIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3X3ZhbHVlcywgdmFsdWUpKQorCisgICAgICAgICMgTm93IGNvbnZlcnQgaXQgdG8gYSBsb2NhbCBsYXllcgorICAgICAgICBzZWxmLmNsaWNrKCIjZWRpdC1sYXllci1zb3VyY2UiKQorICAgICAgICBzZWxmLmNsaWNrKCIjZGlyIikKKyAgICAgICAgZGlyX2lucHV0ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoIiNsYXllci1kaXItcGF0aC1pbi1kZXRhaWxzIikKKworICAgICAgICBuZXdfZGlyID0gIi9ob21lL3Rlc3QvbXktbWV0YS1kaXIiCisgICAgICAgIGRpcl9pbnB1dC5zZW5kX2tleXMobmV3X2RpcikKKworICAgICAgICBzZWxmLmNsaWNrKCIjc2F2ZS1jaGFuZ2VzLWZvci1zd2l0Y2giKQorICAgICAgICBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgiI2VkaXQtbGF5ZXItc291cmNlIikKKworICAgICAgICAjIFJlZnJlc2ggdGhlIHBhZ2UgdG8gc2VlIGlmIHRoZSBuZXcgdmFsdWVzIGFyZSByZXR1cm5lZAorICAgICAgICBzZWxmLmdldChzZWxmLnVybCkKKyAgICAgICAgZGlyX2lucHV0ID0gc2VsZi5maW5kKCIjbGF5ZXItZGlyLXBhdGgtaW4tZGV0YWlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdfZGlyIGluIGRpcl9pbnB1dC5nZXRfYXR0cmlidXRlKCJ2YWx1ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkICVzIGluIHRoZSBkaXIgdmFsdWUgZm9yIGxheWVyIGRpcmVjdG9yeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2RpcikKKworICAgIGRlZiB0ZXN0X2RlbGV0ZV9sYXllcihzZWxmKToKKyAgICAgICAgIiIiIERlbGV0ZSB0aGUgbGF5ZXIgIiIiCisKKyAgICAgICAgc2VsZi5nZXQoc2VsZi51cmwpCisKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgdGFibGVzIHRvIGxvYWQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUKKyAgICAgICAgIyB0b2FzdGVyIHRhYmxlcyBoYXZlIG1hZGUgYW4gYXN5bmMgcmVxdWVzdC4gSWYgdGhlIGxheWVyIGlzIGRlbGV0ZWQKKyAgICAgICAgIyBiZWZvcmUgdGhlIHJlcXVlc3QgZmluaXNoZXMgaXQgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24gYW5kIGZhaWwgdGhpcworICAgICAgICAjIHRlc3QuCisgICAgICAgIHdhaXQgPSBXZWJEcml2ZXJXYWl0KHNlbGYuZHJpdmVyLCAzMCkKKworICAgICAgICB3YWl0LnVudGlsKEVDLnRleHRfdG9fYmVfcHJlc2VudF9pbl9lbGVtZW50KAorICAgICAgICAgICAgKEJ5LkNMQVNTX05BTUUsCisgICAgICAgICAgICAgInRhYmxlLWNvdW50LXJlY2lwZXN0YWJsZSIpLCAiMCIpKQorCisgICAgICAgIHdhaXQudW50aWwoRUMudGV4dF90b19iZV9wcmVzZW50X2luX2VsZW1lbnQoCisgICAgICAgICAgICAoQnkuQ0xBU1NfTkFNRSwKKyAgICAgICAgICAgICAidGFibGUtY291bnQtbWFjaGluZXN0YWJsZSIpLCAiMCIpKQorCisgICAgICAgIHNlbGYuY2xpY2soJ2FbZGF0YS10YXJnZXQ9IiNkZWxldGUtbGF5ZXItbW9kYWwiXScpCisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCIjZGVsZXRlLWxheWVyLW1vZGFsIikKKyAgICAgICAgc2VsZi5jbGljaygiI2xheWVyLWRlbGV0ZS1jb25maXJtZWQiKQorCisgICAgICAgIG5vdGlmaWNhdGlvbiA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCIjY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gIllvdSBoYXZlIGRlbGV0ZWQgMSBsYXllciBmcm9tIHlvdXIgcHJvamVjdDogJXMiICUgXAorICAgICAgICAgICAgc2VsZi5pbXBvcnRlZF9sYXllcl92ZXJzaW9uLmxheWVyLm5hbWUKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWRfdGV4dCBpbiBub3RpZmljYXRpb24udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBub3RpZmljYXRpb24gdGV4dCBcIiVzXCIgbm90IGZvdW5kIGluc3RlYWQiCisgICAgICAgICAgICAgICAgICAgICAgICAiaXQgd2FzIFwiJXNcIiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX3RleHQsIG5vdGlmaWNhdGlvbi50ZXh0KSkKKworICAgIGRlZiB0ZXN0X2FkZHJtX3RvX3Byb2plY3Qoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0KHNlbGYudXJsKQorCisgICAgICAgICMgQWRkIHRoZSBsYXllcgorICAgICAgICBzZWxmLmNsaWNrKCIjYWRkLXJlbW92ZS1sYXllci1idG4iKQorCisgICAgICAgIG5vdGlmaWNhdGlvbiA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCIjY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciKQorCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSAiWW91IGhhdmUgYWRkZWQgMSBsYXllciB0byB5b3VyIHByb2plY3Q6ICVzIiAlIFwKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0ZWRfbGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX3RleHQgaW4gbm90aWZpY2F0aW9uLnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgbm90aWZpY2F0aW9uIHRleHQgJXMgbm90IGZvdW5kIHdhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiIFwiJXNcIiBpbnN0ZWFkIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfdGV4dCwgbm90aWZpY2F0aW9uLnRleHQpKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSBsYXllcgorICAgICAgICBzZWxmLmNsaWNrKCIjYWRkLXJlbW92ZS1sYXllci1idG4iKQorCisgICAgICAgIG5vdGlmaWNhdGlvbiA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCIjY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciKQorCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSAiWW91IGhhdmUgcmVtb3ZlZCAxIGxheWVyIGZyb20geW91ciBwcm9qZWN0OiAlcyIgJSBcCisgICAgICAgICAgICBzZWxmLmltcG9ydGVkX2xheWVyX3ZlcnNpb24ubGF5ZXIubmFtZQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZF90ZXh0IGluIG5vdGlmaWNhdGlvbi50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIG5vdGlmaWNhdGlvbiB0ZXh0ICVzIG5vdCBmb3VuZCB3YXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBcIiVzXCIgaW5zdGVhZCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX3RleHQsIG5vdGlmaWNhdGlvbi50ZXh0KSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9tb3N0X3JlY2VudF9idWlsZHNfc3RhdGVzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X21vc3RfcmVjZW50X2J1aWxkc19zdGF0ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjMGIwYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9tb3N0X3JlY2VudF9idWlsZHNfc3RhdGVzLnB5CkBAIC0wLDAgKzEsMjExIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gdGVzdHMuYnJvd3Nlci5zZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCitmcm9tIHRlc3RzLmJyb3dzZXIuc2VsZW5pdW1faGVscGVyc19iYXNlIGltcG9ydCBXYWl0Citmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIEJ1aWxkLCBUYXNrLCBSZWNpcGUsIExheWVyLCBMYXllcl9WZXJzaW9uCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QKKworY2xhc3MgVGVzdE1vc3RSZWNlbnRCdWlsZHNTdGF0ZXMoU2VsZW5pdW1UZXN0Q2FzZSk6CisgICAgIiIiIFRlc3Qgc3RhdGVzIHVwZGF0ZSBjb3JyZWN0bHkgaW4gbW9zdCByZWNlbnQgYnVpbGRzIGFyZWEgIiIiCisKKyAgICBkZWYgX2NyZWF0ZV9idWlsZF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldF9vcl9jcmVhdGVfZGVmYXVsdF9wcm9qZWN0KCkKKworICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorCisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD1wcm9qZWN0LCBidWlsZF9uYW1lPSdmYWtlYnVpbGQnLAorICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csIGNvbXBsZXRlZF9vbj1ub3cpCisKKyAgICAgICAgcmV0dXJuIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmNyZWF0ZShidWlsZD1idWlsZCwgcHJvamVjdD1wcm9qZWN0LAorICAgICAgICAgICAgc3RhdGU9QnVpbGRSZXF1ZXN0LlJFUV9RVUVVRUQpCisKKyAgICBkZWYgX2NyZWF0ZV9yZWNpcGUoc2VsZik6CisgICAgICAgICIiIiBBZGQgYSByZWNpcGUgdG8gdGhlIGRhdGFiYXNlIGFuZCByZXR1cm4gaXQgIiIiCisgICAgICAgIGxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUoKQorICAgICAgICBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShsYXllcj1sYXllcikKKyAgICAgICAgcmV0dXJuIFJlY2lwZS5vYmplY3RzLmNyZWF0ZShuYW1lPSdmb28nLCBsYXllcl92ZXJzaW9uPWxheWVyX3ZlcnNpb24pCisKKyAgICBkZWYgX2NoZWNrX2J1aWxkX3N0YXRlcyhzZWxmLCBidWlsZF9yZXF1ZXN0KToKKyAgICAgICAgcmVjaXBlc190b19wYXJzZSA9IDEwCisgICAgICAgIHVybCA9IHJldmVyc2UoJ2FsbC1idWlsZHMnKQorICAgICAgICBzZWxmLmdldCh1cmwpCisKKyAgICAgICAgYnVpbGQgPSBidWlsZF9yZXF1ZXN0LmJ1aWxkCisgICAgICAgIGJhc2Vfc2VsZWN0b3IgPSAnW2RhdGEtbGF0ZXN0LWJ1aWxkLXJlc3VsdD0iJXMiXSAnICUgYnVpbGQuaWQKKworICAgICAgICAjIGJ1aWxkIHF1ZXVlZDsgY2hlY2sgc2hvd24gYXMgcXVldWVkCisgICAgICAgIHNlbGVjdG9yID0gYmFzZV9zZWxlY3RvciArICdbZGF0YS1idWlsZC1zdGF0ZT0iUXVldWVkIl0nCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZShzZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVsZW1lbnQuZ2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1MJyksCisgICAgICAgICAgICAnQnVpbGQgcXVldWVkJywgJ2J1aWxkIHNob3VsZCBzaG93IHF1ZXVlZCBzdGF0dXMnKQorCisgICAgICAgICMgd2FpdGluZyBmb3IgcmVjaXBlcyB0byBiZSBwYXJzZWQKKyAgICAgICAgYnVpbGQub3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTCisgICAgICAgIGJ1aWxkLnJlY2lwZXNfdG9fcGFyc2UgPSByZWNpcGVzX3RvX3BhcnNlCisgICAgICAgIGJ1aWxkLnJlY2lwZXNfcGFyc2VkID0gMAorCisgICAgICAgIGJ1aWxkX3JlcXVlc3Quc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0lOUFJPR1JFU1MKKyAgICAgICAgYnVpbGRfcmVxdWVzdC5zYXZlKCkKKworICAgICAgICBzZWxmLmdldCh1cmwpCisKKyAgICAgICAgc2VsZWN0b3IgPSBiYXNlX3NlbGVjdG9yICsgJ1tkYXRhLWJ1aWxkLXN0YXRlPSJQYXJzaW5nIl0nCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZShzZWxlY3RvcikKKworICAgICAgICBiYXJfc2VsZWN0b3IgPSAnI3JlY2lwZXMtcGFyc2VkLXBlcmNlbnRhZ2UtYmFyLSVzJyAlIGJ1aWxkLmlkCisgICAgICAgIGJhcl9lbGVtZW50ID0gZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKGJhcl9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXJfZWxlbWVudC52YWx1ZV9vZl9jc3NfcHJvcGVydHkoJ3dpZHRoJyksICcwcHgnLAorICAgICAgICAgICAgJ3JlY2lwZSBwYXJzZSBwcm9ncmVzcyBzaG91bGQgYmUgYXQgMCcpCisKKyAgICAgICAgIyByZWNpcGVzIGJlaW5nIHBhcnNlZDsgY2hlY2sgcGFyc2UgcHJvZ3Jlc3MKKyAgICAgICAgYnVpbGQucmVjaXBlc19wYXJzZWQgPSA1CisgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKworICAgICAgICBlbGVtZW50ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoc2VsZWN0b3IpCisgICAgICAgIGJhcl9lbGVtZW50ID0gZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKGJhcl9zZWxlY3RvcikKKyAgICAgICAgcmVjaXBlX2Jhcl91cGRhdGVkID0gbGFtYmRhIGRyaXZlcjogXAorICAgICAgICAgICAgYmFyX2VsZW1lbnQuZ2V0X2F0dHJpYnV0ZSgnc3R5bGUnKSA9PSAnd2lkdGg6IDUwJTsnCisgICAgICAgIG1zZyA9ICdyZWNpcGUgcGFyc2UgcHJvZ3Jlc3MgYmFyIHNob3VsZCB1cGRhdGUgdG8gNTAlJworICAgICAgICBlbGVtZW50ID0gV2FpdChzZWxmLmRyaXZlcikudW50aWwocmVjaXBlX2Jhcl91cGRhdGVkLCBtc2cpCisKKyAgICAgICAgIyBhbGwgcmVjaXBlcyBwYXJzZWQsIHRhc2sgc3RhcnRlZCwgd2FpdGluZyBmb3IgZmlyc3QgdGFzayB0byBmaW5pc2g7CisgICAgICAgICMgY2hlY2sgc3RhdHVzIGlzIHNob3duIGFzICJUYXNrcyBzdGFydGluZy4uLiIKKyAgICAgICAgYnVpbGQucmVjaXBlc19wYXJzZWQgPSByZWNpcGVzX3RvX3BhcnNlCisgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgICAgIHJlY2lwZSA9IHNlbGYuX2NyZWF0ZV9yZWNpcGUoKQorICAgICAgICB0YXNrMSA9IFRhc2sub2JqZWN0cy5jcmVhdGUoYnVpbGQ9YnVpbGQsIHJlY2lwZT1yZWNpcGUsCisgICAgICAgICAgICB0YXNrX25hbWU9J0xpb25lbCcpCisgICAgICAgIHRhc2syID0gVGFzay5vYmplY3RzLmNyZWF0ZShidWlsZD1idWlsZCwgcmVjaXBlPXJlY2lwZSwKKyAgICAgICAgICAgIHRhc2tfbmFtZT0nSmVmZnJpZXMnKQorCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKworICAgICAgICBzZWxlY3RvciA9IGJhc2Vfc2VsZWN0b3IgKyAnW2RhdGEtYnVpbGQtc3RhdGU9IlN0YXJ0aW5nIl0nCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZShzZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVsZW1lbnQuZ2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1MJyksCisgICAgICAgICAgICAnVGFza3Mgc3RhcnRpbmcnLCAnYnVpbGQgc2hvdWxkIHNob3cgInRhc2tzIHN0YXJ0aW5nIiBzdGF0dXMnKQorCisgICAgICAgICMgZmlyc3QgdGFzayBmaW5pc2hlZDsgY2hlY2sgdGFza3MgcHJvZ3Jlc3MgYmFyCisgICAgICAgIHRhc2sxLm9yZGVyID0gMQorICAgICAgICB0YXNrMS5zYXZlKCkKKworICAgICAgICBzZWxmLmdldCh1cmwpCisKKyAgICAgICAgc2VsZWN0b3IgPSBiYXNlX3NlbGVjdG9yICsgJ1tkYXRhLWJ1aWxkLXN0YXRlPSJJbiBQcm9ncmVzcyJdJworICAgICAgICBlbGVtZW50ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoc2VsZWN0b3IpCisKKyAgICAgICAgYmFyX3NlbGVjdG9yID0gJyNidWlsZC1wYy1kb25lLWJhci0lcycgJSBidWlsZC5pZAorICAgICAgICBiYXJfZWxlbWVudCA9IGVsZW1lbnQuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcihiYXJfc2VsZWN0b3IpCisKKyAgICAgICAgdGFza19iYXJfdXBkYXRlZCA9IGxhbWJkYSBkcml2ZXI6IFwKKyAgICAgICAgICAgIGJhcl9lbGVtZW50LmdldF9hdHRyaWJ1dGUoJ3N0eWxlJykgPT0gJ3dpZHRoOiA1MCU7JworICAgICAgICBtc2cgPSAndGFza3MgcHJvZ3Jlc3MgYmFyIHNob3VsZCB1cGRhdGUgdG8gNTAlJworICAgICAgICBlbGVtZW50ID0gV2FpdChzZWxmLmRyaXZlcikudW50aWwodGFza19iYXJfdXBkYXRlZCwgbXNnKQorCisgICAgICAgICMgbGFzdCB0YXNrIGZpbmlzaGVkOyBjaGVjayB0YXNrcyBwcm9ncmVzcyBiYXIgdXBkYXRlcworICAgICAgICB0YXNrMi5vcmRlciA9IDIKKyAgICAgICAgdGFzazIuc2F2ZSgpCisKKyAgICAgICAgc2VsZi5nZXQodXJsKQorCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZShzZWxlY3RvcikKKyAgICAgICAgYmFyX2VsZW1lbnQgPSBlbGVtZW50LmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoYmFyX3NlbGVjdG9yKQorICAgICAgICB0YXNrX2Jhcl91cGRhdGVkID0gbGFtYmRhIGRyaXZlcjogXAorICAgICAgICAgICAgYmFyX2VsZW1lbnQuZ2V0X2F0dHJpYnV0ZSgnc3R5bGUnKSA9PSAnd2lkdGg6IDEwMCU7JworICAgICAgICBtc2cgPSAndGFza3MgcHJvZ3Jlc3MgYmFyIHNob3VsZCB1cGRhdGUgdG8gMTAwJScKKyAgICAgICAgZWxlbWVudCA9IFdhaXQoc2VsZi5kcml2ZXIpLnVudGlsKHRhc2tfYmFyX3VwZGF0ZWQsIG1zZykKKworICAgIGRlZiB0ZXN0X3N0YXRlc190b19zdWNjZXNzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBzdGF0ZSB0cmFuc2l0aW9ucyBpbiB0aGUgcmVjZW50IGJ1aWxkcyBhcmVhIGZvciBhIGJ1aWxkIHdoaWNoCisgICAgICAgIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuCisgICAgICAgICIiIgorICAgICAgICBidWlsZF9yZXF1ZXN0ID0gc2VsZi5fY3JlYXRlX2J1aWxkX3JlcXVlc3QoKQorCisgICAgICAgIHNlbGYuX2NoZWNrX2J1aWxkX3N0YXRlcyhidWlsZF9yZXF1ZXN0KQorCisgICAgICAgICMgYWxsIHRhc2tzIGNvbXBsZXRlIGFuZCBidWlsZCBzdWNjZWVkZWQ7IGNoZWNrIHN1Y2Nlc3Mgc3RhdGUgc2hvd24KKyAgICAgICAgYnVpbGQgPSBidWlsZF9yZXF1ZXN0LmJ1aWxkCisgICAgICAgIGJ1aWxkLm91dGNvbWUgPSBCdWlsZC5TVUNDRUVERUQKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgc2VsZWN0b3IgPSAnW2RhdGEtbGF0ZXN0LWJ1aWxkLXJlc3VsdD0iJXMiXSAnIFwKKyAgICAgICAgICAgICdbZGF0YS1idWlsZC1zdGF0ZT0iU3VjY2VlZGVkIl0nICUgYnVpbGQuaWQKKyAgICAgICAgZWxlbWVudCA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKHNlbGVjdG9yKQorCisgICAgZGVmIHRlc3Rfc3RhdGVzX3RvX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHN0YXRlIHRyYW5zaXRpb25zIGluIHRoZSByZWNlbnQgYnVpbGRzIGFyZWEgZm9yIGEgYnVpbGQgd2hpY2gKKyAgICAgICAgY29tcGxldGVzIGluIGEgZmFpbHVyZS4KKyAgICAgICAgIiIiCisgICAgICAgIGJ1aWxkX3JlcXVlc3QgPSBzZWxmLl9jcmVhdGVfYnVpbGRfcmVxdWVzdCgpCisKKyAgICAgICAgc2VsZi5fY2hlY2tfYnVpbGRfc3RhdGVzKGJ1aWxkX3JlcXVlc3QpCisKKyAgICAgICAgIyBhbGwgdGFza3MgY29tcGxldGUgYW5kIGJ1aWxkIHN1Y2NlZWRlZDsgY2hlY2sgZmFpbCBzdGF0ZSBzaG93bgorICAgICAgICBidWlsZCA9IGJ1aWxkX3JlcXVlc3QuYnVpbGQKKyAgICAgICAgYnVpbGQub3V0Y29tZSA9IEJ1aWxkLkZBSUxFRAorICAgICAgICBidWlsZC5zYXZlKCkKKworICAgICAgICBzZWxlY3RvciA9ICdbZGF0YS1sYXRlc3QtYnVpbGQtcmVzdWx0PSIlcyJdICcgXAorICAgICAgICAgICAgJ1tkYXRhLWJ1aWxkLXN0YXRlPSJGYWlsZWQiXScgJSBidWlsZC5pZAorICAgICAgICBlbGVtZW50ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoc2VsZWN0b3IpCisKKyAgICBkZWYgdGVzdF9zdGF0ZXNfY2FuY2VsbGluZyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCBtb3N0IHJlY2VudCBidWlsZCBhcmVhIHVwZGF0ZXMgY29ycmVjdGx5IGZvciBhIGJ1aWxkCisgICAgICAgIHdoaWNoIGlzIGNhbmNlbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHVybCA9IHJldmVyc2UoJ2FsbC1idWlsZHMnKQorCisgICAgICAgIGJ1aWxkX3JlcXVlc3QgPSBzZWxmLl9jcmVhdGVfYnVpbGRfcmVxdWVzdCgpCisgICAgICAgIGJ1aWxkID0gYnVpbGRfcmVxdWVzdC5idWlsZAorCisgICAgICAgICMgY2FuY2VsIHRoZSBidWlsZAorICAgICAgICBidWlsZF9yZXF1ZXN0LnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9DQU5DRUxMSU5HCisgICAgICAgIGJ1aWxkX3JlcXVlc3Quc2F2ZSgpCisKKyAgICAgICAgc2VsZi5nZXQodXJsKQorCisgICAgICAgICMgY2hlY2sgY2FuY2VsbGluZyBzdGF0ZQorICAgICAgICBzZWxlY3RvciA9ICdbZGF0YS1sYXRlc3QtYnVpbGQtcmVzdWx0PSIlcyJdICcgXAorICAgICAgICAgICAgJ1tkYXRhLWJ1aWxkLXN0YXRlPSJDYW5jZWxsaW5nIl0nICUgYnVpbGQuaWQKKyAgICAgICAgZWxlbWVudCA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKHNlbGVjdG9yKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZWxlbWVudC5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKSwKKyAgICAgICAgICAgICdDYW5jZWxsaW5nIHRoZSBidWlsZCcsICdidWlsZCBzaG91bGQgc2hvdyAiY2FuY2VsbGluZyIgc3RhdHVzJykKKworICAgICAgICAjIGNoZWNrIGNhbmNlbGxlZCBzdGF0ZQorICAgICAgICBidWlsZC5vdXRjb21lID0gQnVpbGQuQ0FOQ0VMTEVECisgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKworICAgICAgICBzZWxlY3RvciA9ICdbZGF0YS1sYXRlc3QtYnVpbGQtcmVzdWx0PSIlcyJdICcgXAorICAgICAgICAgICAgJ1tkYXRhLWJ1aWxkLXN0YXRlPSJDYW5jZWxsZWQiXScgJSBidWlsZC5pZAorICAgICAgICBlbGVtZW50ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlbGVtZW50LmdldF9hdHRyaWJ1dGUoJ2lubmVySFRNTCcpLAorICAgICAgICAgICAgJ0J1aWxkIGNhbmNlbGxlZCcsICdidWlsZCBzaG91bGQgc2hvdyAiY2FuY2VsbGVkIiBzdGF0dXMnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X25ld19jdXN0b21faW1hZ2VfcGFnZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9uZXdfY3VzdG9tX2ltYWdlX3BhZ2UucHkKaW5kZXggODkwNmNiMi4uYWI1YThlNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X25ld19jdXN0b21faW1hZ2VfcGFnZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfbmV3X2N1c3RvbV9pbWFnZV9wYWdlLnB5CkBAIC0yNSw2ICsyNSw3IEBACiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBQcm9qZWN0LCBQcm9qZWN0TGF5ZXIsIExheWVyCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyX1ZlcnNpb24sIFJlY2lwZSwgQ3VzdG9tSW1hZ2VSZWNpcGUKIAorCiBjbGFzcyBUZXN0TmV3Q3VzdG9tSW1hZ2VQYWdlKFNlbGVuaXVtVGVzdENhc2UpOgogICAgIENVU1RPTV9JTUFHRV9OQU1FID0gJ3Jvb3BhLWRvb3BhJwogCkBAIC0xNDAsNyArMTQxLDcgQEAKICAgICAgICAgc2VsZi5fY3JlYXRlX2N1c3RvbV9pbWFnZShzZWxmLnJlY2lwZS5uYW1lKQogICAgICAgICBlbGVtZW50ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoJyNpbnZhbGlkLW5hbWUtaGVscCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlbGVtZW50LnRleHQuc3RyaXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzJykKIAogICAgIGRlZiB0ZXN0X25ld19kdXBsaWNhdGVzX3Byb2plY3RfaW1hZ2Uoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X25ld19wcm9qZWN0X3BhZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfbmV3X3Byb2plY3RfcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2U1ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X25ld19wcm9qZWN0X3BhZ2UucHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gdGVzdHMuYnJvd3Nlci5zZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0LnVpIGltcG9ydCBTZWxlY3QKK2Zyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IEludmFsaWRFbGVtZW50U3RhdGVFeGNlcHRpb24KKworZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBSZWxlYXNlLCBCaXRiYWtlVmVyc2lvbgorCisKK2NsYXNzIFRlc3ROZXdQcm9qZWN0UGFnZShTZWxlbml1bVRlc3RDYXNlKToKKyAgICAiIiIgVGVzdCBwcm9qZWN0IGRhdGEgYXQgL3Byb2plY3QvWC8gaXMgZGlzcGxheWVkIGNvcnJlY3RseSAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgYml0YmFrZSwgYyA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSgKKyAgICAgICAgICAgIG5hbWU9Im1hc3RlciIsCisgICAgICAgICAgICBnaXR1cmw9ImdpdDovL21hc3RlciIsCisgICAgICAgICAgICBicmFuY2g9Im1hc3RlciIsCisgICAgICAgICAgICBkaXJwYXRoPSJtYXN0ZXIiKQorCisgICAgICAgIHJlbGVhc2UsIGMgPSBSZWxlYXNlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPSJtc2F0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Im1hc3RlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxlYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9uYW1lPSJtYXN0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscHRleHQ9ImxhdGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249Yml0YmFrZSkKKworICAgICAgICBzZWxmLnJlbGVhc2UsIGMgPSBSZWxlYXNlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSgKKyAgICAgICAgICAgIG5hbWU9Im1zYXRlcjIiLAorICAgICAgICAgICAgZGVzY3JpcHRpb249Im1hc3RlcjIiCisgICAgICAgICAgICAicmVsZWFzZTIiLAorICAgICAgICAgICAgYnJhbmNoX25hbWU9Im1hc3RlcjIiLAorICAgICAgICAgICAgaGVscHRleHQ9ImxhdGVzdDIiLAorICAgICAgICAgICAgYml0YmFrZV92ZXJzaW9uPWJpdGJha2UpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfbmV3X3Byb2plY3Qoc2VsZik6CisgICAgICAgICIiIiBUZXN0IGNyZWF0aW5nIGEgcHJvamVjdCAiIiIKKworICAgICAgICBwcm9qZWN0X25hbWUgPSAibWFzdGVycHJvamVjdCIKKworICAgICAgICB1cmwgPSByZXZlcnNlKCduZXdwcm9qZWN0JykKKyAgICAgICAgc2VsZi5nZXQodXJsKQorCisgICAgICAgIHNlbGYuZW50ZXJfdGV4dCgnI25ldy1wcm9qZWN0LW5hbWUnLCBwcm9qZWN0X25hbWUpCisKKyAgICAgICAgc2VsZWN0ID0gU2VsZWN0KHNlbGYuZmluZCgnI3Byb2plY3R2ZXJzaW9uJykpCisgICAgICAgIHNlbGVjdC5zZWxlY3RfYnlfdmFsdWUoc3RyKHNlbGYucmVsZWFzZS5waykpCisKKyAgICAgICAgc2VsZi5jbGljaygiI2NyZWF0ZS1wcm9qZWN0LWJ1dHRvbiIpCisKKyAgICAgICAgIyBXZSBzaG91bGQgZ2V0IHJlZGlyZWN0ZWQgdG8gdGhlIG5ldyBwcm9qZWN0J3MgcGFnZSB3aXRoIHRoZQorICAgICAgICAjIG5vdGlmaWNhdGlvbiBhdCB0aGUgdG9wCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI3Byb2plY3QtY3JlYXRlZC1ub3RpZmljYXRpb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9qZWN0X25hbWUgaW4gZWxlbWVudC50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIk5ldyBwcm9qZWN0IG5hbWUgbm90IGluIG5ldyBwcm9qZWN0IG5vdGlmaWNhdGlvbiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFByb2plY3Qub2JqZWN0cy5maWx0ZXIobmFtZT1wcm9qZWN0X25hbWUpLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAiTmV3IHByb2plY3Qgbm90IGZvdW5kIGluIGRhdGFiYXNlIikKKworICAgIGRlZiB0ZXN0X25ld19kdXBsaWNhdGVzX3Byb2plY3RfbmFtZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNob3VsZCBub3QgYmUgYWJsZSB0byBjcmVhdGUgYSBuZXcgcHJvamVjdCB3aG9zZSBuYW1lIGlzIHRoZSBzYW1lCisgICAgICAgIGFzIGFuIGV4aXN0aW5nIHByb2plY3QKKyAgICAgICAiIiIKKworICAgICAgICBwcm9qZWN0X25hbWUgPSAiZHVwcHJvamVjdCIKKworICAgICAgICBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZT1wcm9qZWN0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlPXNlbGYucmVsZWFzZSkKKworICAgICAgICB1cmwgPSByZXZlcnNlKCduZXdwcm9qZWN0JykKKyAgICAgICAgc2VsZi5nZXQodXJsKQorCisgICAgICAgIHNlbGYuZW50ZXJfdGV4dCgnI25ldy1wcm9qZWN0LW5hbWUnLCBwcm9qZWN0X25hbWUpCisKKyAgICAgICAgc2VsZWN0ID0gU2VsZWN0KHNlbGYuZmluZCgnI3Byb2plY3R2ZXJzaW9uJykpCisgICAgICAgIHNlbGVjdC5zZWxlY3RfYnlfdmFsdWUoc3RyKHNlbGYucmVsZWFzZS5waykpCisKKyAgICAgICAgZWxlbWVudCA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjaGludC1lcnJvci1wcm9qZWN0LW5hbWUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoIlByb2plY3QgbmFtZXMgbXVzdCBiZSB1bmlxdWUiIGluIGVsZW1lbnQudGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAiRGlkIG5vdCBmaW5kIHVuaXF1ZSBwcm9qZWN0IG5hbWUgZXJyb3IgbWVzc2FnZSIpCisKKyAgICAgICAgIyBUcnkgYW5kIGNsaWNrIGl0IGFueXdheSwgaWYgaXQgc3VibWl0cyB3ZSdsbCBoYXZlIGEgbmV3IHByb2plY3QgaW4KKyAgICAgICAgIyB0aGUgZGIgYW5kIGFzc2VydCB0aGVuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2xpY2soIiNjcmVhdGUtcHJvamVjdC1idXR0b24iKQorICAgICAgICBleGNlcHQgSW52YWxpZEVsZW1lbnRTdGF0ZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAoUHJvamVjdC5vYmplY3RzLmZpbHRlcihuYW1lPXByb2plY3RfbmFtZSkuY291bnQoKSA9PSAxKSwKKyAgICAgICAgICAgICJOZXcgcHJvamVjdCBub3QgZm91bmQgaW4gZGF0YWJhc2UiKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X3Byb2plY3RfY29uZmlnX3BhZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfcHJvamVjdF9jb25maWdfcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzEwMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X3Byb2plY3RfY29uZmlnX3BhZ2UucHkKQEAgLTAsMCArMSwyMzEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHJlCisKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gdGVzdHMuYnJvd3Nlci5zZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24sIFJlbGVhc2UsIFByb2plY3QsIFByb2plY3RWYXJpYWJsZQorCitjbGFzcyBUZXN0UHJvamVjdENvbmZpZ3NQYWdlKFNlbGVuaXVtVGVzdENhc2UpOgorICAgICIiIiBUZXN0IGRhdGEgYXQgL3Byb2plY3QvWC9idWlsZHMgaXMgZGlzcGxheWVkIGNvcnJlY3RseSAiIiIKKworICAgIFBST0pFQ1RfTkFNRSA9ICd0ZXN0IHByb2plY3QnCisgICAgSU5WQUxJRF9QQVRIX1NUQVJUX1RFWFQgPSAnVGhlIGRpcmVjdG9yeSBwYXRoIHNob3VsZCBlaXRoZXIgc3RhcnQgd2l0aCBhIC8nCisgICAgSU5WQUxJRF9QQVRIX0NIQVJfVEVYVCA9ICdUaGUgZGlyZWN0b3J5IHBhdGggY2Fubm90IGluY2x1ZGUgc3BhY2VzIG9yICcgXAorICAgICAgICAnYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMnCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKG5hbWU9J2JidjEnLCBnaXR1cmw9Jy90bXAvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoPSdtYXN0ZXInLCBkaXJwYXRoPScnKQorICAgICAgICByZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmNyZWF0ZShuYW1lPSdyZWxlYXNlMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyc2lvbj1iYnYpCisgICAgICAgIHNlbGYucHJvamVjdDEgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZT1zZWxmLlBST0pFQ1RfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlPXJlbGVhc2UpCisgICAgICAgIHNlbGYucHJvamVjdDEuc2F2ZSgpCisKKworICAgIGRlZiB0ZXN0X25vX3VuZGVyc2NvcmVfaWFtZ2Vmc190eXBlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdWxkIG5vdCBhY2NlcHQgSU1BR0VGU19UWVBFIHdpdGggYW4gdW5kZXJzY29yZQorICAgICAgICAiIiIKKworICAgICAgICBpbWFnZWZzX3R5cGUgPSAiZm9vX2JhciIKKworICAgICAgICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHByb2plY3QgPSBzZWxmLnByb2plY3QxLCBuYW1lID0gIklNQUdFX0ZTVFlQRVMiLCB2YWx1ZSA9ICJhYmNkICIpCisgICAgICAgIHVybCA9IHJldmVyc2UoJ3Byb2plY3Rjb25mJywgYXJncz0oc2VsZi5wcm9qZWN0MS5pZCwpKTsKKyAgICAgICAgc2VsZi5nZXQodXJsKTsKKworICAgICAgICBzZWxmLmNsaWNrKCcjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpCisKKyAgICAgICAgc2VsZi5lbnRlcl90ZXh0KCcjbmV3LWltYWdlZnNfdHlwZXMnLCBpbWFnZWZzX3R5cGUpCisKKyAgICAgICAgZWxlbWVudCA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjaGludEVycm9yLWltYWdlLWZzX3R5cGUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoIkEgdmFsaWQgaW1hZ2UgdHlwZSBjYW5ub3QgaW5jbHVkZSB1bmRlcnNjb3JlcyIgaW4gZWxlbWVudC50ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJEaWQgbm90IGZpbmQgdW5kZXJzY29yZSBlcnJvciBtZXNzYWdlIikKKworCisgICAgZGVmIHRlc3RfY2hlY2tib3hfdmVyaWZpY2F0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdWxkIGF1dG9tYXRpY2FsbHkgY2hlY2sgdGhlIGNoZWNrYm94IGlmIHVzZXIgZW50ZXJzIHZhbHVlCisgICAgICAgIHRleHQgYm94LCBpZiB2YWx1ZSBpcyB0aGVyZSBpbiB0aGUgY2hlY2tib3guCisgICAgICAgICIiIgorICAgICAgICBpbWFnZWZzX3R5cGUgPSAiYnRyZnMiCisKKyAgICAgICAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gc2VsZi5wcm9qZWN0MSwgbmFtZSA9ICJJTUFHRV9GU1RZUEVTIiwgdmFsdWUgPSAiYWJjZCAiKQorICAgICAgICB1cmwgPSByZXZlcnNlKCdwcm9qZWN0Y29uZicsIGFyZ3M9KHNlbGYucHJvamVjdDEuaWQsKSk7CisgICAgICAgIHNlbGYuZ2V0KHVybCk7CisKKyAgICAgICAgc2VsZi5jbGljaygnI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKQorCisgICAgICAgIHNlbGYuZW50ZXJfdGV4dCgnI25ldy1pbWFnZWZzX3R5cGVzJywgaW1hZ2Vmc190eXBlKQorCisgICAgICAgIGNoZWNrYm94ZXMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvL2lucHV0W0BjbGFzcz0nZnMtY2hlY2tib3gtZnN0eXBlcyddIikKKworICAgICAgICBmb3IgY2hlY2tib3ggaW4gY2hlY2tib3hlczoKKyAgICAgICAgICAgIGlmIGNoZWNrYm94LmdldF9hdHRyaWJ1dGUoInZhbHVlIikgPT0gImJ0cmZzIjoKKyAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2tib3guaXNfc2VsZWN0ZWQoKSwgVHJ1ZSkKKworCisgICAgZGVmIHRlc3RfdGV4dGJveF93aXRoX2NoZWNrYm94X3ZlcmlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNob3VsZCBhdXRvbWF0aWNhbGx5IGFkZCBvciByZW1vdmUgdmFsdWUgaW4gdGV4dGJveCwgaWYgdXNlciBjaGVja3MKKyAgICAgICAgb3IgdW5jaGVja3MgY2hlY2tib3hlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gc2VsZi5wcm9qZWN0MSwgbmFtZSA9ICJJTUFHRV9GU1RZUEVTIiwgdmFsdWUgPSAiYWJjZCAiKQorICAgICAgICB1cmwgPSByZXZlcnNlKCdwcm9qZWN0Y29uZicsIGFyZ3M9KHNlbGYucHJvamVjdDEuaWQsKSk7CisgICAgICAgIHNlbGYuZ2V0KHVybCk7CisKKyAgICAgICAgc2VsZi5jbGljaygnI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKQorCisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjbmV3LWltYWdlZnNfdHlwZXMnKQorCisgICAgICAgIGNoZWNrYm94ZXNfc2VsZWN0b3IgPSAnLmZzLWNoZWNrYm94LWZzdHlwZXMnCisKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoY2hlY2tib3hlc19zZWxlY3RvcikKKyAgICAgICAgY2hlY2tib3hlcyA9IHNlbGYuZmluZF9hbGwoY2hlY2tib3hlc19zZWxlY3RvcikKKworICAgICAgICBmb3IgY2hlY2tib3ggaW4gY2hlY2tib3hlczoKKyAgICAgICAgICAgIGlmIGNoZWNrYm94LmdldF9hdHRyaWJ1dGUoInZhbHVlIikgPT0gImNwaW8iOgorICAgICAgICAgICAgICAgY2hlY2tib3guY2xpY2soKQorICAgICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnbmV3LWltYWdlZnNfdHlwZXMnKQorCisgICAgICAgICAgICAgICBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI25ldy1pbWFnZWZzX3R5cGVzJykKKworICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgiY3BpbyIgaW4gZWxlbWVudC5nZXRfYXR0cmlidXRlKCd2YWx1ZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbWFnZWZzIG5vdCBhZGRlZCBpbnRvIHRoZSB0ZXh0Ym94IikpCisgICAgICAgICAgICAgICBjaGVja2JveC5jbGljaygpCisgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKCJjcGlvIiBub3QgaW4gZWxlbWVudC50ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW1hZ2Ugc3RpbGwgcHJlc2VudCBpbiB0aGUgdGV4dGJveCIpCisKKyAgICBkZWYgdGVzdF9zZXRfZG93bmxvYWRfZGlyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVmFsaWRhdGUgdGhlIGFsbG93ZWQgYW5kIGRpc2FsbG93ZWQgdHlwZXMgaW4gdGhlIGRpcmVjdG9yeSBmaWVsZCBmb3IKKyAgICAgICAgRExfRElSCisgICAgICAgICIiIgorCisgICAgICAgIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QxLAorICAgICAgICAgICAgbmFtZT0nRExfRElSJykKKyAgICAgICAgdXJsID0gcmV2ZXJzZSgncHJvamVjdGNvbmYnLCBhcmdzPShzZWxmLnByb2plY3QxLmlkLCkpCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKworICAgICAgICAjIGFjdGl2YXRlIHRoZSBpbnB1dCB0byBlZGl0IGRvd25sb2FkIGRpcgorICAgICAgICBzZWxmLmNsaWNrKCcjY2hhbmdlLWRsX2Rpci1pY29uJykKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoJyNuZXctZGxfZGlyJykKKworICAgICAgICAjIGRvd25sb2FkcyBkaXIgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggLyBvciAkey4uLn0KKyAgICAgICAgc2VsZi5lbnRlcl90ZXh0KCcjbmV3LWRsX2RpcicsICdob21lL2ZvbycpCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI2hpbnRFcnJvci1pbml0aWFsQ2hhci1kbF9kaXInKQorCisgICAgICAgIG1zZyA9ICdkb3dubG9hZHMgZGlyZWN0b3J5IHBhdGggc3RhcnRzIHdpdGggaW52YWxpZCBjaGFyYWN0ZXIgYnV0ICcgXAorICAgICAgICAgICAgJ3RyZWF0ZWQgYXMgdmFsaWQnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoc2VsZi5JTlZBTElEX1BBVEhfU1RBUlRfVEVYVCBpbiBlbGVtZW50LnRleHQpLCBtc2cpCisKKyAgICAgICAgIyBkb3dubG9hZHMgZGlyIHBhdGggaGFzIGEgc3BhY2UKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCduZXctZGxfZGlyJykuY2xlYXIoKQorICAgICAgICBzZWxmLmVudGVyX3RleHQoJyNuZXctZGxfZGlyJywgJy9mb28vYmFyIGEnKQorCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI2hpbnRFcnJvci1kbF9kaXInKQorICAgICAgICBtc2cgPSAnZG93bmxvYWRzIGRpcmVjdG9yeSBwYXRoIGNoYXJhY3RlcnMgaW52YWxpZCBidXQgdHJlYXRlZCBhcyB2YWxpZCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzZWxmLklOVkFMSURfUEFUSF9DSEFSX1RFWFQgaW4gZWxlbWVudC50ZXh0KSwgbXNnKQorCisgICAgICAgICMgZG93bmxvYWRzIGRpciBwYXRoIHN0YXJ0cyB3aXRoICR7Li4ufSBidXQgaGFzIGEgc3BhY2UKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCduZXctZGxfZGlyJykuY2xlYXIoKQorICAgICAgICBzZWxmLmVudGVyX3RleHQoJyNuZXctZGxfZGlyJywgJyR7VE9QRElSfS9kb3duIGZvbycpCisKKyAgICAgICAgZWxlbWVudCA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjaGludEVycm9yLWRsX2RpcicpCisgICAgICAgIG1zZyA9ICdkb3dubG9hZHMgZGlyZWN0b3J5IHBhdGggY2hhcmFjdGVycyBpbnZhbGlkIGJ1dCB0cmVhdGVkIGFzIHZhbGlkJworICAgICAgICBzZWxmLmFzc2VydFRydWUoKHNlbGYuSU5WQUxJRF9QQVRIX0NIQVJfVEVYVCBpbiBlbGVtZW50LnRleHQpLCBtc2cpCisKKyAgICAgICAgIyBkb3dubG9hZHMgZGlyIHBhdGggc3RhcnRzIHdpdGggLworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ25ldy1kbF9kaXInKS5jbGVhcigpCisgICAgICAgIHNlbGYuZW50ZXJfdGV4dCgnI25ldy1kbF9kaXInLCAnL2Jhci9mb28nKQorCisgICAgICAgIGhpZGRlbl9lbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCdoaW50RXJyb3ItZGxfZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoaWRkZW5fZWxlbWVudC5pc19kaXNwbGF5ZWQoKSwgRmFsc2UsCisgICAgICAgICAgICAnZG93bmxvYWRzIGRpcmVjdG9yeSBwYXRoIHZhbGlkIGJ1dCB0cmVhdGVkIGFzIGludmFsaWQnKQorCisgICAgICAgICMgZG93bmxvYWRzIGRpciBwYXRoIHN0YXJ0cyB3aXRoICR7Li4ufQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ25ldy1kbF9kaXInKS5jbGVhcigpCisgICAgICAgIHNlbGYuZW50ZXJfdGV4dCgnI25ldy1kbF9kaXInLCAnJHtUT1BESVJ9L2Rvd24nKQorCisgICAgICAgIGhpZGRlbl9lbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCdoaW50RXJyb3ItZGxfZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoaWRkZW5fZWxlbWVudC5pc19kaXNwbGF5ZWQoKSwgRmFsc2UsCisgICAgICAgICAgICAnZG93bmxvYWRzIGRpcmVjdG9yeSBwYXRoIHZhbGlkIGJ1dCB0cmVhdGVkIGFzIGludmFsaWQnKQorCisgICAgZGVmIHRlc3Rfc2V0X3NzdGF0ZV9kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWYWxpZGF0ZSB0aGUgYWxsb3dlZCBhbmQgZGlzYWxsb3dlZCB0eXBlcyBpbiB0aGUgZGlyZWN0b3J5IGZpZWxkIGZvcgorICAgICAgICBTU1RBVEVfRElSCisgICAgICAgICIiIgorCisgICAgICAgIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QxLAorICAgICAgICAgICAgbmFtZT0nU1NUQVRFX0RJUicpCisgICAgICAgIHVybCA9IHJldmVyc2UoJ3Byb2plY3Rjb25mJywgYXJncz0oc2VsZi5wcm9qZWN0MS5pZCwpKQorICAgICAgICBzZWxmLmdldCh1cmwpCisKKyAgICAgICAgc2VsZi5jbGljaygnI2NoYW5nZS1zc3RhdGVfZGlyLWljb24nKQorCisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjbmV3LXNzdGF0ZV9kaXInKQorCisgICAgICAgICMgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggLyBvciAkey4uLn0KKyAgICAgICAgc2VsZi5lbnRlcl90ZXh0KCcjbmV3LXNzdGF0ZV9kaXInLCAnaG9tZS9mb28nKQorICAgICAgICBlbGVtZW50ID0gc2VsZi53YWl0X3VudGlsX3Zpc2libGUoJyNoaW50RXJyb3ItaW5pdGlhbENoYXItc3N0YXRlX2RpcicpCisKKyAgICAgICAgbXNnID0gJ3NzdGF0ZSBkaXJlY3RvcnkgcGF0aCBzdGFydHMgd2l0aCBpbnZhbGlkIGNoYXJhY3RlciBidXQgJyBcCisgICAgICAgICAgICAndHJlYXRlZCBhcyB2YWxpZCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzZWxmLklOVkFMSURfUEFUSF9TVEFSVF9URVhUIGluIGVsZW1lbnQudGV4dCksIG1zZykKKworICAgICAgICAjIHBhdGggaGFzIGEgc3BhY2UKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCduZXctc3N0YXRlX2RpcicpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5lbnRlcl90ZXh0KCcjbmV3LXNzdGF0ZV9kaXInLCAnL2Zvby9iYXIgYScpCisKKyAgICAgICAgZWxlbWVudCA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjaGludEVycm9yLXNzdGF0ZV9kaXInKQorICAgICAgICBtc2cgPSAnc3N0YXRlIGRpcmVjdG9yeSBwYXRoIGNoYXJhY3RlcnMgaW52YWxpZCBidXQgdHJlYXRlZCBhcyB2YWxpZCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzZWxmLklOVkFMSURfUEFUSF9DSEFSX1RFWFQgaW4gZWxlbWVudC50ZXh0KSwgbXNnKQorCisgICAgICAgICMgcGF0aCBzdGFydHMgd2l0aCAkey4uLn0gYnV0IGhhcyBhIHNwYWNlCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnbmV3LXNzdGF0ZV9kaXInKS5jbGVhcigpCisgICAgICAgIHNlbGYuZW50ZXJfdGV4dCgnI25ldy1zc3RhdGVfZGlyJywgJyR7VE9QRElSfS9kb3duIGZvbycpCisKKyAgICAgICAgZWxlbWVudCA9IHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjaGludEVycm9yLXNzdGF0ZV9kaXInKQorICAgICAgICBtc2cgPSAnc3N0YXRlIGRpcmVjdG9yeSBwYXRoIGNoYXJhY3RlcnMgaW52YWxpZCBidXQgdHJlYXRlZCBhcyB2YWxpZCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzZWxmLklOVkFMSURfUEFUSF9DSEFSX1RFWFQgaW4gZWxlbWVudC50ZXh0KSwgbXNnKQorCisgICAgICAgICMgcGF0aCBzdGFydHMgd2l0aCAvCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnbmV3LXNzdGF0ZV9kaXInKS5jbGVhcigpCisgICAgICAgIHNlbGYuZW50ZXJfdGV4dCgnI25ldy1zc3RhdGVfZGlyJywgJy9iYXIvZm9vJykKKworICAgICAgICBoaWRkZW5fZWxlbWVudCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnaGludEVycm9yLXNzdGF0ZV9kaXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhpZGRlbl9lbGVtZW50LmlzX2Rpc3BsYXllZCgpLCBGYWxzZSwKKyAgICAgICAgICAgICdzc3RhdGUgZGlyZWN0b3J5IHBhdGggdmFsaWQgYnV0IHRyZWF0ZWQgYXMgaW52YWxpZCcpCisKKyAgICAgICAgIyBwYXRocyBzdGFydHMgd2l0aCAkey4uLn0KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCduZXctc3N0YXRlX2RpcicpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5lbnRlcl90ZXh0KCcjbmV3LXNzdGF0ZV9kaXInLCAnJHtUT1BESVJ9L2Rvd24nKQorCisgICAgICAgIGhpZGRlbl9lbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCdoaW50RXJyb3Itc3N0YXRlX2RpcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGlkZGVuX2VsZW1lbnQuaXNfZGlzcGxheWVkKCksIEZhbHNlLAorICAgICAgICAgICAgJ3NzdGF0ZSBkaXJlY3RvcnkgcGF0aCB2YWxpZCBidXQgdHJlYXRlZCBhcyBpbnZhbGlkJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfcHJvamVjdF9wYWdlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X3Byb2plY3RfcGFnZS5weQppbmRleCA3ODZiZWYxLi4wMTg2NDYzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfcHJvamVjdF9wYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9wcm9qZWN0X3BhZ2UucHkKQEAgLTU1LDUgKzU1LDUgQEAKICAgICAgICAgc2VsZi5nZXQodXJsKQogCiAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBnZXQgYSBwcm9qZWN0IHBhZ2Ugd2l0aCB0aGUgY29ycmVjdCBoZWFkaW5nCi0gICAgICAgIHByb2plY3RfbmFtZSA9IHNlbGYuZmluZCgnI3Byb2plY3QtbmFtZScpLnRleHQuc3RyaXAoKQorICAgICAgICBwcm9qZWN0X25hbWUgPSBzZWxmLmZpbmQoJy5wcm9qZWN0LW5hbWUnKS50ZXh0LnN0cmlwKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9qZWN0X25hbWUsIHNlbGYuQ0xJX0JVSUxEU19QUk9KRUNUX05BTUUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3Rfc2FtcGxlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnJvd3Nlci90ZXN0X3NhbXBsZS5weQppbmRleCA3YmI4Yjk3Li4yMGVjNTNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3Rfc2FtcGxlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF9zYW1wbGUucHkKQEAgLTM3LDUgKzM3LDUgQEAKICAgICBkZWYgdGVzdF9sYW5kaW5nX3BhZ2VfaGFzX2JyYW5kKHNlbGYpOgogICAgICAgICB1cmwgPSByZXZlcnNlKCdsYW5kaW5nJykKICAgICAgICAgc2VsZi5nZXQodXJsKQotICAgICAgICBicmFuZF9saW5rID0gc2VsZi5maW5kKCdzcGFuLmJyYW5kIGEnKQorICAgICAgICBicmFuZF9saW5rID0gc2VsZi5maW5kKCcudG9hc3Rlci1uYXZiYXItYnJhbmQgYS5icmFuZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnJhbmRfbGluay50ZXh0LnN0cmlwKCksICdUb2FzdGVyJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF90YXNrX3BhZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfdGFza19wYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGQxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfdGFza19wYWdlLnB5CkBAIC0wLDAgKzEsNzYgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSB0ZXN0cy5icm93c2VyLnNlbGVuaXVtX2hlbHBlcnMgaW1wb3J0IFNlbGVuaXVtVGVzdENhc2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgQnVpbGQsIExheWVyLCBMYXllcl9WZXJzaW9uLCBSZWNpcGUsIFRhcmdldAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBUYXNrLCBUYXNrX0RlcGVuZGVuY3kKKworY2xhc3MgVGVzdFRhc2tQYWdlKFNlbGVuaXVtVGVzdENhc2UpOgorICAgICIiIiBUZXN0IHBhZ2Ugd2hpY2ggc2hvd3MgYW4gaW5kaXZpZHVhbCB0YXNrICIiIgorICAgIFJFQ0lQRV9OQU1FID0gJ2JhcicKKyAgICBSRUNJUEVfVkVSU0lPTiA9ICcwLjEnCisgICAgVEFTS19OQU1FID0gJ2RvX2RhX2Rvb19yb25fcm9uJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZV9kZWZhdWx0X3Byb2plY3QoKQorCisgICAgICAgIHNlbGYuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXByb2plY3QsIHN0YXJ0ZWRfb249bm93LAorICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKworICAgICAgICBUYXJnZXQub2JqZWN0cy5jcmVhdGUodGFyZ2V0PSdmb28nLCBidWlsZD1zZWxmLmJ1aWxkKQorCisgICAgICAgIGxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUoKQorCisgICAgICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPWxheWVyKQorCisgICAgICAgIHJlY2lwZSA9IFJlY2lwZS5vYmplY3RzLmNyZWF0ZShuYW1lPVRlc3RUYXNrUGFnZS5SRUNJUEVfTkFNRSwKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbiwgdmVyc2lvbj1UZXN0VGFza1BhZ2UuUkVDSVBFX1ZFUlNJT04pCisKKyAgICAgICAgc2VsZi50YXNrID0gVGFzay5vYmplY3RzLmNyZWF0ZShidWlsZD1zZWxmLmJ1aWxkLCByZWNpcGU9cmVjaXBlLAorICAgICAgICAgICAgb3JkZXI9MSwgb3V0Y29tZT1UYXNrLk9VVENPTUVfQ09WRVJFRCwgdGFza19leGVjdXRlZD1GYWxzZSwKKyAgICAgICAgICAgIHRhc2tfbmFtZT1UZXN0VGFza1BhZ2UuVEFTS19OQU1FKQorCisgICAgZGVmIHRlc3RfY292ZXJlZF90YXNrKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhhdCBjb3ZlcmVkIHRhc2tzIGFyZSBkaXNwbGF5ZWQgZm9yIHRhc2tzIHdoaWNoIGhhdmUKKyAgICAgICAgZGVwZW5kZW5jaWVzIG9uIHRoZW1zZWx2ZXMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyB0aGUgaW5maW5pdGUgbG9vcCB3aGljaCBvZiBidWcgOTk1MiB3YXMgZG93biB0byB0YXNrcyB3aGljaAorICAgICAgICAjIGRlcGVuZCBvbiB0aGVtc2VsdmVzLCBzbyBhZGQgc2VsZi1kZXBlbmRlbnQgdGFza3MgdG8gcmVwbGljYXRlIHRoZQorICAgICAgICAjIHNpdHVhdGlvbiB3aGljaCBjYXVzZWQgdGhlIGluZmluaXRlIGxvb3AgKG5vdyBmaXhlZCkKKyAgICAgICAgVGFza19EZXBlbmRlbmN5Lm9iamVjdHMuY3JlYXRlKHRhc2s9c2VsZi50YXNrLCBkZXBlbmRzX29uPXNlbGYudGFzaykKKworICAgICAgICB1cmwgPSByZXZlcnNlKCd0YXNrJywgYXJncz0oc2VsZi5idWlsZC5pZCwgc2VsZi50YXNrLmlkLCkpCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKworICAgICAgICAjIGNoZWNrIHRoYXQgd2Ugc2VlIHRoZSB0YXNrIG5hbWUKKyAgICAgICAgc2VsZi53YWl0X3VudGlsX3Zpc2libGUoJy5wYWdlLWhlYWRlciBoMScpCisKKyAgICAgICAgaGVhZGluZyA9IHNlbGYuZmluZCgnLnBhZ2UtaGVhZGVyIGgxJykKKyAgICAgICAgZXhwZWN0ZWRfaGVhZGluZyA9ICclc18lcyAlcycgJSAoVGVzdFRhc2tQYWdlLlJFQ0lQRV9OQU1FLAorICAgICAgICAgICAgVGVzdFRhc2tQYWdlLlJFQ0lQRV9WRVJTSU9OLCBUZXN0VGFza1BhZ2UuVEFTS19OQU1FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRpbmcudGV4dCwgZXhwZWN0ZWRfaGVhZGluZywKKyAgICAgICAgICAgICdIZWFkaW5nIHNob3VsZCBzaG93IHJlY2lwZSBuYW1lLCB2ZXJzaW9uIGFuZCB0YXNrJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2Jyb3dzZXIvdGVzdF90b2FzdGVydGFibGVfdWkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfdG9hc3RlcnRhYmxlX3VpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGRmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9icm93c2VyL3Rlc3RfdG9hc3RlcnRhYmxlX3VpLnB5CkBAIC0wLDAgKzEsMTYwIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gdGVzdHMuYnJvd3Nlci5zZWxlbml1bV9oZWxwZXJzIGltcG9ydCBTZWxlbml1bVRlc3RDYXNlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBQcm9qZWN0LCBCdWlsZAorCitjbGFzcyBUZXN0VG9hc3RlclRhYmxlVUkoU2VsZW5pdW1UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIHRoZSBVSSBlbGVtZW50cyBvZiBUb2FzdGVyVGFibGUgKHNvcnRpbmcgZXRjLik7CisgICAgbm90ZSB0aGF0IHRoZSB0ZXN0cyBjb3ZlciBnZW5lcmljIGZ1bmN0aW9uYWxpdHkgb2YgVG9hc3RlclRhYmxlIHdoaWNoCisgICAgbWFuaWZlc3RzIGFzIFVJIGVsZW1lbnRzIGluIHRoZSBicm93c2VyLCBhbmQgY2FuIG9ubHkgYmUgdGVzdGVkIHZpYQorICAgIFNlbGVuaXVtLgorICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2dldF9vcmRlcmJ5X2hlYWRpbmcoc2VsZiwgdGFibGUpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHRoZSBjdXJyZW50IG9yZGVyIGJ5IGZpbmRpbmcgdGhlIGNvbHVtbiBoZWFkaW5nIGluIDx0YWJsZT4gd2l0aAorICAgICAgICB0aGUgc29ydGVkIGNsYXNzIG9uIGl0LgorCisgICAgICAgIHRhYmxlOiBXZWJFbGVtZW50IGZvciBhIFRvYXN0ZXJUYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZWN0b3IgPSAndGhlYWQgYS5zb3J0ZWQnCisgICAgICAgIGhlYWRpbmcgPSB0YWJsZS5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICByZXR1cm4gaGVhZGluZy5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKS5zdHJpcCgpCisKKyAgICBkZWYgX2dldF9kYXRldGltZV9mcm9tX2NlbGwoc2VsZiwgcm93LCBzZWxlY3Rvcik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHZhbHVlIGluIHRoZSBjZWxsIHNlbGVjdGVkIGJ5IDxzZWxlY3Rvcj4gb24gPHJvdz4gYXMgYQorICAgICAgICBkYXRldGltZS4KKworICAgICAgICByb3c6IDx0cj4gV2ViRWxlbWVudCBmb3IgYSByb3cgaW4gdGhlIFRvYXN0ZXJUYWJsZQorICAgICAgICBzZWxlY3RvcjogQ1NTIHNlbGVjdG9yIHRvIHVzZSB0byBmaW5kIHRoZSBjZWxsIGNvbnRhaW5pbmcgdGhlIGRhdGUgdGltZQorICAgICAgICBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGNlbGwgPSByb3cuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcihzZWxlY3RvcikKKyAgICAgICAgY2VsbF90ZXh0ID0gY2VsbC5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKS5zdHJpcCgpCisgICAgICAgIHJldHVybiBkYXRldGltZS5zdHJwdGltZShjZWxsX3RleHQsICclZC8lbS8leSAlSDolTScpCisKKyAgICBkZWYgdGVzdF9yZXZlcnRfb3JkZXJieShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCBzb3J0IG9yZGVyIGZvciBhIHRhYmxlIHJldmVydHMgdG8gdGhlIGRlZmF1bHQgc29ydCBvcmRlcgorICAgICAgICBpZiB0aGUgY3VycmVudCBzb3J0IGNvbHVtbiBpcyBoaWRkZW4uCisgICAgICAgICIiIgorICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICBsYXRlciA9IG5vdyArIHRpbWV6b25lLnRpbWVkZWx0YShob3Vycz0xKQorICAgICAgICBldmVuX2xhdGVyID0gbGF0ZXIgKyB0aW1lem9uZS50aW1lZGVsdGEoaG91cnM9MSkKKworICAgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShuYW1lPSd0ZXN0IGJidicsIGdpdHVybD0nL3RtcC8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2g9J21hc3RlcicsIGRpcnBhdGg9JycpCisgICAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuY3JlYXRlKG5hbWU9J3Rlc3QgcmVsZWFzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9uYW1lPSdtYXN0ZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249YmJ2KQorCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QoJ3Byb2plY3QnLCByZWxlYXNlKQorCisgICAgICAgICMgc2V0IHVwIHR3byBidWlsZHMgd2hpY2ggd2lsbCBvcmRlciBkaWZmZXJlbnRseSB3aGVuIHNvcnRlZCBieQorICAgICAgICAjIHN0YXJ0ZWRfb24gb3IgY29tcGxldGVkX29uCisKKyAgICAgICAgIyBzdGFydGVkIGZpcnN0LCBmaW5pc2hlZCBsYXN0CisgICAgICAgIGJ1aWxkMSA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9cHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ldmVuX2xhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRjb21lPUJ1aWxkLlNVQ0NFRURFRCkKKworICAgICAgICAjIHN0YXJ0ZWQgc2Vjb25kLCBmaW5pc2hlZCBmaXJzdAorICAgICAgICBidWlsZDIgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249bGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1sYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Y29tZT1CdWlsZC5TVUNDRUVERUQpCisKKyAgICAgICAgdXJsID0gcmV2ZXJzZSgnYWxsLWJ1aWxkcycpCisgICAgICAgIHNlbGYuZ2V0KHVybCkKKyAgICAgICAgdGFibGUgPSBzZWxmLndhaXRfdW50aWxfdmlzaWJsZSgnI2FsbGJ1aWxkc3RhYmxlJykKKworICAgICAgICAjIGNoZWNrIG9yZGVyaW5nIChkZWZhdWx0IGlzIGJ5IC1jb21wbGV0ZWRfb24pOyBzbyBidWlsZDEgc2hvdWxkIGJlCisgICAgICAgICMgZmlyc3QgYXMgaXQgZmluaXNoZWQgbGFzdAorICAgICAgICBhY3RpdmVfaGVhZGluZyA9IHNlbGYuX2dldF9vcmRlcmJ5X2hlYWRpbmcodGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aXZlX2hlYWRpbmcsICdDb21wbGV0ZWQgb24nLAorICAgICAgICAgICAgJ3RhYmxlIHNob3VsZCBiZSBzb3J0ZWQgYnkgIkNvbXBsZXRlZCBvbiIgYnkgZGVmYXVsdCcpCisKKyAgICAgICAgcm93X3NlbGVjdG9yID0gJyNhbGxidWlsZHN0YWJsZSB0Ym9keSB0cicKKyAgICAgICAgY2VsbF9zZWxlY3RvciA9ICd0ZC5jb21wbGV0ZWRfb24nCisKKyAgICAgICAgcm93cyA9IHNlbGYuZmluZF9hbGwocm93X3NlbGVjdG9yKQorICAgICAgICByb3cxX2NvbXBsZXRlZF9vbiA9IHNlbGYuX2dldF9kYXRldGltZV9mcm9tX2NlbGwocm93c1swXSwgY2VsbF9zZWxlY3RvcikKKyAgICAgICAgcm93Ml9jb21wbGV0ZWRfb24gPSBzZWxmLl9nZXRfZGF0ZXRpbWVfZnJvbV9jZWxsKHJvd3NbMV0sIGNlbGxfc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3cxX2NvbXBsZXRlZF9vbiA+IHJvdzJfY29tcGxldGVkX29uLAorICAgICAgICAgICAgJ3RhYmxlIHNob3VsZCBiZSBzb3J0ZWQgYnkgLWNvbXBsZXRlZF9vbicpCisKKyAgICAgICAgIyB0dXJuIG9uIHN0YXJ0ZWRfb24gY29sdW1uCisgICAgICAgIHNlbGYuY2xpY2soJyNlZGl0LWNvbHVtbnMtYnV0dG9uJykKKyAgICAgICAgc2VsZi5jbGljaygnI2NoZWNrYm94LXN0YXJ0ZWRfb24nKQorCisgICAgICAgICMgc29ydCBieSBzdGFydGVkX29uIGNvbHVtbgorICAgICAgICBsaW5rcyA9IHRhYmxlLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCd0aC5zdGFydGVkX29uIGEnKQorICAgICAgICBmb3IgbGluayBpbiBsaW5rczoKKyAgICAgICAgICAgIGlmIGxpbmsuZ2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1MJykuc3RyaXAoKSA9PSAnU3RhcnRlZCBvbic6CisgICAgICAgICAgICAgICAgbGluay5jbGljaygpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIHdhaXQgZm9yIHRhYmxlIGRhdGEgdG8gcmVsb2FkIGluIHJlc3BvbnNlIHRvIG5ldyBzb3J0CisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjYWxsYnVpbGRzdGFibGUnKQorCisgICAgICAgICMgY2hlY2sgb3JkZXJpbmc7IGJ1aWxkMSBzaG91bGQgYmUgZmlyc3QKKyAgICAgICAgYWN0aXZlX2hlYWRpbmcgPSBzZWxmLl9nZXRfb3JkZXJieV9oZWFkaW5nKHRhYmxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGl2ZV9oZWFkaW5nLCAnU3RhcnRlZCBvbicsCisgICAgICAgICAgICAndGFibGUgc2hvdWxkIGJlIHNvcnRlZCBieSAiU3RhcnRlZCBvbiInKQorCisgICAgICAgIGNlbGxfc2VsZWN0b3IgPSAndGQuc3RhcnRlZF9vbicKKworICAgICAgICByb3dzID0gc2VsZi5maW5kX2FsbChyb3dfc2VsZWN0b3IpCisgICAgICAgIHJvdzFfc3RhcnRlZF9vbiA9IHNlbGYuX2dldF9kYXRldGltZV9mcm9tX2NlbGwocm93c1swXSwgY2VsbF9zZWxlY3RvcikKKyAgICAgICAgcm93Ml9zdGFydGVkX29uID0gc2VsZi5fZ2V0X2RhdGV0aW1lX2Zyb21fY2VsbChyb3dzWzFdLCBjZWxsX3NlbGVjdG9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocm93MV9zdGFydGVkX29uIDwgcm93Ml9zdGFydGVkX29uLAorICAgICAgICAgICAgJ3RhYmxlIHNob3VsZCBiZSBzb3J0ZWQgYnkgc3RhcnRlZF9vbicpCisKKyAgICAgICAgIyB0dXJuIG9mZiBzdGFydGVkX29uIGNvbHVtbgorICAgICAgICBzZWxmLmNsaWNrKCcjZWRpdC1jb2x1bW5zLWJ1dHRvbicpCisgICAgICAgIHNlbGYuY2xpY2soJyNjaGVja2JveC1zdGFydGVkX29uJykKKworICAgICAgICAjIHdhaXQgZm9yIHRhYmxlIGRhdGEgdG8gcmVsb2FkIGluIHJlc3BvbnNlIHRvIG5ldyBzb3J0CisgICAgICAgIHNlbGYud2FpdF91bnRpbF92aXNpYmxlKCcjYWxsYnVpbGRzdGFibGUnKQorCisgICAgICAgICMgY2hlY2sgb3JkZXJpbmcgKHNob3VsZCByZXZlcnQgdG8gY29tcGxldGVkX29uKTsgYnVpbGQyIHNob3VsZCBiZSBmaXJzdAorICAgICAgICBhY3RpdmVfaGVhZGluZyA9IHNlbGYuX2dldF9vcmRlcmJ5X2hlYWRpbmcodGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aXZlX2hlYWRpbmcsICdDb21wbGV0ZWQgb24nLAorICAgICAgICAgICAgJ3RhYmxlIHNob3VsZCBiZSBzb3J0ZWQgYnkgIkNvbXBsZXRlZCBvbiIgYWZ0ZXIgaGlkaW5nIHNvcnQgY29sdW1uJykKKworICAgICAgICBjZWxsX3NlbGVjdG9yID0gJ3RkLmNvbXBsZXRlZF9vbicKKworICAgICAgICByb3dzID0gc2VsZi5maW5kX2FsbChyb3dfc2VsZWN0b3IpCisgICAgICAgIHJvdzFfY29tcGxldGVkX29uID0gc2VsZi5fZ2V0X2RhdGV0aW1lX2Zyb21fY2VsbChyb3dzWzBdLCBjZWxsX3NlbGVjdG9yKQorICAgICAgICByb3cyX2NvbXBsZXRlZF9vbiA9IHNlbGYuX2dldF9kYXRldGltZV9mcm9tX2NlbGwocm93c1sxXSwgY2VsbF9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJvdzFfY29tcGxldGVkX29uID4gcm93Ml9jb21wbGV0ZWRfb24sCisgICAgICAgICAgICAndGFibGUgc2hvdWxkIGJlIHNvcnRlZCBieSAtY29tcGxldGVkX29uJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2J1aWxkcy9SRUFETUUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9idWlsZHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2I1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9idWlsZHMvUkVBRE1FCkBAIC0wLDAgKzEsMTQgQEAKKyMgUnVubmluZyBidWlsZCB0ZXN0cworCitUaGVzZSB0ZXN0cyBhcmUgdG8gdGVzdCB0aGUgcnVubmluZyBvZiBidWlsZHMgYW5kIHRoZSBkYXRhIHByb2R1Y2VkIGJ5IHRoZSBidWlsZHMuCitZb3VyIG9lIGJ1aWxkIGVudmlyb25tZW50IG11c3QgYmUgc291cmNlZC9pbml0aWFsaXNlZCBmb3IgdGhlc2UgdGVzdHMgdG8gcnVuLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIHJ1biB0aGUgdGVzdHMgYXJlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyQgLiBvZS1pbml0LWJ1aWxkLWVudgorJCBjZCBiaXRiYWtlL2xpYi90b2FzdGVyLyAjIHBhdGggbXkgdmFyeSBidXQgdGhpcyBpcyBpbnRvIHRvYXN0ZXIncyBkaXJlY3RvcnkKKyQgREpBTkdPX1NFVFRJTkdTX01PRFVMRT0ndG9hc3Rlcm1haW4uc2V0dGluZ3NfdGVzdCcgLi9tYW5hZ2UucHkgdGVzdCB0ZXN0cy5idWlsZHMKKworT3B0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorIC0gVE9BU1RFUl9ESVIgKHdoZXJlIHRvYXN0ZXIga2VlcHMgaXQncyBhcnRpZmFjdHMpCisgLSBUT0FTVEVSX0NPTkYgYSBwYXRoIHRvIHRoZSB0b2FzdGVyY29uZi5qc29uIGZpbGUuIFRoaXMgd2lsbCBuZWVkIHRvIGJlIHNldCBpZiB5b3UgZG9uJ3QgZXhlY3V0ZSB0aGUgdGVzdHMgZnJvbSB0b2FzdGVyJ3Mgb3duIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvYnVpbGRzL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvX19pbml0X18ucHkKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9idWlsZHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2J1aWxkcy9idWlsZHRlc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9idWlsZHMvYnVpbGR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2JkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9idWlsZHMvYnVpbGR0ZXN0LnB5CkBAIC0wLDAgKzEsMTM0IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBSZWxlYXNlLCBQcm9qZWN0VGFyZ2V0LCBCdWlsZAorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudAorCitmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgQ29tbWFuZFwKKyAgICBhcyBMb2FkQ29uZmlnQ29tbWFuZAorCitmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5ydW5idWlsZHMgaW1wb3J0IENvbW1hbmRcCisgICAgYXMgUnVuQnVpbGRzQ29tbWFuZAorCitpbXBvcnQgc3VicHJvY2VzcworCisjIFdlIHVzZSB1bml0dGVzdC5UZXN0Q2FzZSBpbnN0ZWFkIG9mIGRqYW5nby50ZXN0LlRlc3RDYXNlIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgd2FudCB0byB3cmFwIGV2ZXJ5dGhpbmcgaW4gYSBkYXRhYmFzZSB0cmFuc2FjdGlvbiBhcyBhbiBleHRlcm5hbCBwcm9jZXNzCisjIChiaXRiYWtlIG5lZWRzIGFjY2VzcyB0byB0aGUgZGF0YWJhc2UpCisKKworY2xhc3MgQnVpbGRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIFBST0pFQ1RfTkFNRSA9ICJUZXN0YnVpbGQiCisKKyAgICBkZWYgYnVpbGQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIyBTbyB0aGF0IHRoZSBidWlsZGluZm8gaGVscGVyIHVzZXMgdGhlIHRlc3QgZGF0YWJhc2UnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBvcy5lbnZpcm9uLmdldCgnREpBTkdPX1NFVFRJTkdTX01PRFVMRScsICcnKSwKKyAgICAgICAgICAgICd0b2FzdGVybWFpbi5zZXR0aW5ncy10ZXN0JywKKyAgICAgICAgICAgICJQbGVhc2UgaW5pdGlhbGlzZSBkamFuZ28gd2l0aCB0aGUgdGVzdHMgc2V0dGluZ3M6ICAiCisgICAgICAgICAgICAiREpBTkdPX1NFVFRJTkdTX01PRFVMRT0ndG9hc3Rlcm1haW4uc2V0dGluZ3MtdGVzdCciKQorCisgICAgICAgIGlmIHNlbGYudGFyZ2V0X2FscmVhZHlfYnVpbHQodGFyZ2V0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgVGFrZSBhIGd1ZXNzIGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgdG9hc3RlcmNvbmYKKyAgICAgICAgcG9reV90b2FzdGVyX2NvbmYgPSAnLi4vLi4vLi4vbWV0YS1wb2t5L2NvbmYvdG9hc3RlcmNvbmYuanNvbicKKyAgICAgICAgb2VfdG9hc3Rlcl9jb25mID0gJy4uLy4uLy4uL21ldGEvY29uZi90b2FzdGVyY29uZi5qc29uJworICAgICAgICBlbnZfdG9hc3Rlcl9jb25mID0gb3MuZW52aXJvbi5nZXQoJ1RPQVNURVJfQ09ORicpCisKKyAgICAgICAgY29uZmlnX2ZpbGUgPSBOb25lCisgICAgICAgIGlmIGVudl90b2FzdGVyX2NvbmY6CisgICAgICAgICAgICBjb25maWdfZmlsZSA9IGVudl90b2FzdGVyX2NvbmYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBva3lfdG9hc3Rlcl9jb25mKToKKyAgICAgICAgICAgICAgICBjb25maWdfZmlsZSA9IHBva3lfdG9hc3Rlcl9jb25mCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKG9lX3RvYXN0ZXJfY29uZik6CisgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUgPSBvZV90b2FzdGVyX2NvbmYKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjb25maWdfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlZmF1bHQgbG9jYXRpb25zIGZvciB0b2FzdGVyY29uZiBub3QgZm91bmQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGVhc2Ugc2V0ICRUT0FTVEVSX0NPTkYgbWFudWFsbHkiKQorCisgICAgICAgICMgU2V0dXAgdGhlIHJlbGVhc2UgaW5mb3JtYXRpb24gYW5kIGRlZmF1bHQgbGF5ZXJzCisgICAgICAgIHByaW50KCJcbkltcG9ydGluZyBmaWxlOiAlcyIgJSBjb25maWdfZmlsZSkKKyAgICAgICAgb3MuZW52aXJvblsnVE9BU1RFUl9DT05GJ10gPSBjb25maWdfZmlsZQorICAgICAgICBMb2FkQ29uZmlnQ29tbWFuZCgpLl9pbXBvcnRfbGF5ZXJfY29uZmlnKGNvbmZpZ19maWxlKQorCisgICAgICAgIG9zLmVudmlyb25bJ1RPQVNURVJfRElSJ10gPSBcCisgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgob3MuZW52aXJvblsnQlVJTERESVInXSArICIvLi4vIikKKworICAgICAgICBvcy5lbnZpcm9uWydCQkJBU0VESVInXSA9IFwKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCd3aGljaCBiaXRiYWtlJywgc2hlbGw9VHJ1ZSkKKworICAgICAgICBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZSgKKyAgICAgICAgICAgIGJldHlwZT1CdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUwsCisgICAgICAgICAgICBzb3VyY2VkaXI9b3MuZW52aXJvblsnVE9BU1RFUl9ESVInXSwKKyAgICAgICAgICAgIGJ1aWxkZGlyPW9zLmVudmlyb25bJ0JVSUxERElSJ10KKyAgICAgICAgKQorCisgICAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuZ2V0KG5hbWU9J2xvY2FsJykKKworICAgICAgICAjIENyZWF0ZSBhIHByb2plY3QgZm9yIHRoaXMgYnVpbGQgdG8gcnVuIGluCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KG5hbWU9QnVpbGRUZXN0LlBST0pFQ1RfTkFNRSkKKyAgICAgICAgZXhjZXB0IFByb2plY3QuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgKKyAgICAgICAgICAgICAgICBuYW1lPUJ1aWxkVGVzdC5QUk9KRUNUX05BTUUsCisgICAgICAgICAgICAgICAgcmVsZWFzZT1yZWxlYXNlCisgICAgICAgICAgICApCisKKyAgICAgICAgUHJvamVjdFRhcmdldC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PXRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrPSIiKQorICAgICAgICBidWlsZF9yZXF1ZXN0ID0gcHJvamVjdC5zY2hlZHVsZV9idWlsZCgpCisKKyAgICAgICAgIyBydW4gcnVuYnVpbGRzIGNvbW1hbmQgdG8gZGlzcGF0Y2ggdGhlIGJ1aWxkCisgICAgICAgICMgZS5nLiBtYW5hZ2UucHkgcnVudWJpbGRzCisgICAgICAgIFJ1bkJ1aWxkc0NvbW1hbmQoKS5ydW5idWlsZCgpCisKKyAgICAgICAgYnVpbGRfcGsgPSBidWlsZF9yZXF1ZXN0LmJ1aWxkLnBrCisgICAgICAgIHdoaWxlIEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX3BrKS5vdXRjb21lID09IEJ1aWxkLklOX1BST0dSRVNTOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXHJCdWlsZGluZyAlcyAlZCUlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9yZXF1ZXN0LmJ1aWxkLmNvbXBsZXRlcGVyKCkpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChidWlsZF9yZXF1ZXN0LmJ1aWxkLm91dGNvbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQuU1VDQ0VFREVELCAiQnVpbGQgZGlkIG5vdCBTVUNDRUVERUQiKQorICAgICAgICBwcmludCgiXG5CdWlsZCBmaW5pc2hlZCIpCisgICAgICAgIHJldHVybiBidWlsZF9yZXF1ZXN0LmJ1aWxkCisKKyAgICBkZWYgdGFyZ2V0X2FscmVhZHlfYnVpbHQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiIElmIHRoZSB0YXJnZXQgaXMgYWxyZWFkeSBidWlsdCBubyBuZWVkIHRvIGJ1aWxkIGl0IGFnYWluIiIiCisgICAgICAgIGZvciBidWlsZCBpbiBCdWlsZC5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICBwcm9qZWN0X19uYW1lPUJ1aWxkVGVzdC5QUk9KRUNUX05BTUUpOgorICAgICAgICAgICAgdGFyZ2V0cyA9IGJ1aWxkLnRhcmdldF9zZXQudmFsdWVzX2xpc3QoJ3RhcmdldCcsIGZsYXQ9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHRhcmdldCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9idWlsZHMvdGVzdF9jb3JlX2ltYWdlX21pbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2J1aWxkcy90ZXN0X2NvcmVfaW1hZ2VfbWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzBiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9idWlsZHMvdGVzdF9jb3JlX2ltYWdlX21pbi5weQpAQCAtMCwwICsxLDM5NiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBUZXN0cyB3ZXJlIHBhcnQgb2Ygb3BlbmVtYmVkZGVkLWNvcmUgb2Ugc2VsZnRlc3QgQXV0aG9yZWQgYnk6IEx1Y2lhbiBNdXNhdAorIyBJb251dCBDaGlzYW5vdmljaSwgUGF1bCBFZ2dsZXRvbiBhbmQgQ3Jpc3RpYW4gSW9yZ2EKKworaW1wb3J0IG9zCisKK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQorCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhcmdldF9JbWFnZV9GaWxlLCBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UsIFRhc2sKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUGFja2FnZV9EZXBlbmRlbmN5LCBSZWNpcGVfRGVwZW5kZW5jeSwgQnVpbGQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFza19EZXBlbmRlbmN5LCBQYWNrYWdlLCBUYXJnZXQsIFJlY2lwZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBDdXN0b21JbWFnZVBhY2thZ2UKKworZnJvbSBidWlsZHRlc3QgaW1wb3J0IEJ1aWxkVGVzdAorCisKK2NsYXNzIEJ1aWxkQ29yZUltYWdlTWluaW1hbChCdWlsZFRlc3QpOgorICAgICIiIkJ1aWxkIGNvcmUtaW1hZ2UtbWluaW1hbCBhbmQgdGVzdCB0aGUgcmVzdWx0cyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkKCJjb3JlLWltYWdlLW1pbmltYWwiKQorCisgICAgIyBDaGVjayBpZiBidWlsZCBuYW1lIGlzIHVuaXF1ZSAtIHRjX2lkPTc5NQorICAgIGRlZiB0ZXN0X0J1aWxkX1VuaXF1ZV9OYW1lKHNlbGYpOgorICAgICAgICBhbGxfYnVpbGRzID0gQnVpbGQub2JqZWN0cy5hbGwoKS5jb3VudCgpCisgICAgICAgIGRpc3RpbmN0X2J1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RpbmN0X2J1aWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfYnVpbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nQnVpbGQgbmFtZSBpcyBub3QgdW5pcXVlJykKKworICAgICMgQ2hlY2sgaWYgYnVpbGQgY29va2VyIGxvZyBwYXRoIGlzIHVuaXF1ZSAtIHRjX2lkPTgxOQorICAgIGRlZiB0ZXN0X0J1aWxkX1VuaXF1ZV9Db29rZXJfTG9nX1BhdGgoc2VsZik6CisgICAgICAgIGRpc3RpbmN0X3BhdGggPSBCdWlsZC5vYmplY3RzLnZhbHVlcygKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnKS5kaXN0aW5jdCgpLmNvdW50KCkKKyAgICAgICAgdG90YWxfYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykuY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RpbmN0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfYnVpbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nQnVpbGQgY29va2VyIGxvZyBwYXRoIGlzIG5vdCB1bmlxdWUnKQorCisgICAgIyBDaGVjayBpZiB0YXNrIG9yZGVyIGlzIHVuaXF1ZSBmb3Igb25lIGJ1aWxkIC0gdGM9ODI0CisgICAgZGVmIHRlc3RfVGFza19VbmlxdWVfT3JkZXIoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0b3RhbF90YXNrX29yZGVyID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICBidWlsZD1idWlsZFsnaWQnXSkudmFsdWVzKCdvcmRlcicpLmNvdW50KCkKKyAgICAgICAgICAgIGRpc3RpbmN0X3Rhc2tfb3JkZXIgPSBUYXNrLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgIGJ1aWxkPWJ1aWxkWydpZCddKS52YWx1ZXMoJ29yZGVyJykuZGlzdGluY3QoKS5jb3VudCgpCisKKyAgICAgICAgICAgIGlmICh0b3RhbF90YXNrX29yZGVyICE9IGRpc3RpbmN0X3Rhc2tfb3JkZXIpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGJ1aWxkWydpZCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdFcnJvcnMgZm9yIGJ1aWxkIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayB0YXNrIG9yZGVyIHNlcXVlbmNlIGZvciBvbmUgYnVpbGQgLSB0Yz04MjUKKyAgICBkZWYgdGVzdF9UYXNrX09yZGVyX1NlcXVlbmNlKHNlbGYpOgorICAgICAgICBidWlsZHMgPSBidWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICBRKGJ1aWxkPWJ1aWxkWydpZCddKSwKKyAgICAgICAgICAgICAgICB+UShvcmRlcj1Ob25lKSwKKyAgICAgICAgICAgICAgICB+USh0YXNrX25hbWVfX2NvbnRhaW5zPSdfc2V0c2NlbmUnKQorICAgICAgICAgICAgKS52YWx1ZXMoJ2lkJywgJ29yZGVyJykub3JkZXJfYnkoIm9yZGVyIikKKworICAgICAgICAgICAgY250X3Rhc2tzID0gMAorICAgICAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgY250X3Rhc2tzICs9IDEKKyAgICAgICAgICAgICAgICBpZiAodGFza1snb3JkZXInXSAhPSBjbnRfdGFza3MpOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGVuKGNudF9lcnIpLCAwLCBtc2c9J0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgZGlza19pbyBtYXRjaGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gRW5kVGltZUlPIGFuZAorICAgICMgU3RhcnRUaW1lSU8gaW4gYnVpbGQgc3RhdHMgLSB0Yz04MjgKKyAgICAjIGRlZiB0ZXN0X1Rhc2tfRGlza19JT19UQzgyOChzZWxmKToKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSA9IDIgKFNTVEFURSkgdGhlbiBzc3RhdGVfcmVzdWx0IG11c3QgYmUgMyAoUkVTVE9SRUQpIC0KKyAgICAjIHRjPTgzMgorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8yX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8zKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZT0yKS52YWx1ZXMoJ2lkJywgJ3NzdGF0ZV9yZXN1bHQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc3N0YXRlX3Jlc3VsdCddICE9IDMpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSA9IDEgKENPVkVSRUQpIG9yIDMgKEVYSVNUSU5HKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdAorICAgICMgYmUgMCAoU1NUQVRFX05BKSAtIHRjPTgzMworICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8xXzNfU3N0YXRlX1Jlc3VsdF9NdXN0X0JlXzAoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgIG91dGNvbWVfX2luPShUYXNrLk9VVENPTUVfQ09WRVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrLk9VVENPTUVfUFJFQlVJTFQpKS52YWx1ZXMoJ2lkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rhc2tfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JykKKyAgICAgICAgY250X2VyciA9IFtdCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc3N0YXRlX3Jlc3VsdCddICE9IFRhc2suU1NUQVRFX05BIGFuZAorICAgICAgICAgICAgICAgICAgICB0YXNrWydzc3RhdGVfcmVzdWx0J10gIT0gVGFzay5TU1RBVEVfTUlTUyk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQoeydpZCc6IHRhc2tbJ2lkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogdGFza1sndGFza19uYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogdGFza1snc3N0YXRlX3Jlc3VsdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSBpcyAwIChTVUNDRVNTKSBvciA0IChGQUlMRUQpIHRoZW4gc3N0YXRlX3Jlc3VsdCBtdXN0IGJlCisgICAgIyAwIChOQSksIDEgKE1JU1MpIG9yIDIgKEZBSUxFRCkgLSB0Yz04MzQKKyAgICBkZWYgdGVzdF9UYXNrX0lmX091dGNvbWVfMF80X1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8wXzFfMihzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgb3V0Y29tZV9faW49KDAsIDQpKS52YWx1ZXMoJ2lkJywgJ3NzdGF0ZV9yZXN1bHQnKQorICAgICAgICBjbnRfZXJyID0gW10KKworICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gbm90IGluIFswLCAxLCAyXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gVFJVRSAoMSksIHNjcmlwdF90eXBlIG11c3QgYmUgMCAoQ09ESU5HX05BKSwgMgorICAgICMgKENPRElOR19QWVRIT04pLCAzIChDT0RJTkdfU0hFTEwpIC0gdGM9ODkxCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX1RydWVfU2NyaXB0X1R5cGVfMF8yXzMoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgIHRhc2tfZXhlY3V0ZWQ9MSkudmFsdWVzKCdpZCcsICdzY3JpcHRfdHlwZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHRhc2tbJ3NjcmlwdF90eXBlJ10gbm90IGluIFswLCAyLCAzXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IFRSVUUgKDEpLCBvdXRjb21lIG11c3QgYmUgMCAoU1VDQ0VTUykgb3IgNAorICAgICMgKEZBSUxFRCkgLSB0Yz04MzYKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfVHJ1ZV9PdXRjb21lXzBfNChzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKHRhc2tfZXhlY3V0ZWQ9MSkudmFsdWVzKCdpZCcsICdvdXRjb21lJykKKyAgICAgICAgY250X2VyciA9IFtdCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snb3V0Y29tZSddIG5vdCBpbiBbMCwgNF0pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IEZBTFNFICgwKSwgc2NyaXB0X3R5cGUgbXVzdCBiZSAwIC0gdGM9ODkwCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX0ZhbHNlX1NjcmlwdF9UeXBlXzAoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgIHRhc2tfZXhlY3V0ZWQ9MCkudmFsdWVzKCdpZCcsICdzY3JpcHRfdHlwZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHRhc2tbJ3NjcmlwdF90eXBlJ10gIT0gMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gRkFMU0UgKDApIGFuZCBidWlsZCBvdXRjb21lID0gU1VDQ0VFREVEICgwKSwKKyAgICAjIHRhc2sgb3V0Y29tZSBtdXN0IGJlIDEgKENPVkVSRUQpLCAyIChDQUNIRUQpLCAzIChQUkVCVUlMVCksIDUgKEVNUFRZKSAtCisgICAgIyB0Yz04MzcKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfRmFsc2VfT3V0Y29tZV8xXzJfM181KHNlbGYpOgorICAgICAgICBidWlsZHMgPSBCdWlsZC5vYmplY3RzLmZpbHRlcihvdXRjb21lPTApLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICBidWlsZD1idWlsZFsnaWQnXSwgdGFza19leGVjdXRlZD0wKS52YWx1ZXMoJ2lkJywgJ291dGNvbWUnKQorICAgICAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgaWYgKHRhc2tbJ291dGNvbWUnXSBub3QgaW4gWzEsIDIsIDMsIDVdKToKKyAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg4CisgICAgZGVmIHRlc3RfVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlKHNlbGYpOgorICAgICAgICByb3dzID0gVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLm9iamVjdHMudmFsdWVzKCdpZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2VfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKworICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoaWQ9cm93Wyd0YXJnZXRfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpZD1yb3dbJ3BhY2thZ2VfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHRhcmdldCBvciBub3QgcGFja2FnZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocm93WydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nRXJyb3JzIGZvciB0YXJnZXQgaW5zdGFsbGVkIHBhY2thZ2UgaWQ6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgY250X2VycikKKworICAgICMgS2V5IHZlcmlmaWNhdGlvbiAtIHRjPTg4OQorICAgIGRlZiB0ZXN0X1Rhc2tfRGVwZW5kZW5jeShzZWxmKToKKyAgICAgICAgcm93cyA9IFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLnZhbHVlcygnaWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXNrX2lkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICB0YXNrX2lkID0gVGFzay5vYmplY3RzLmZpbHRlcihpZD1yb3dbJ3Rhc2tfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBkZXBlbmRzX29uX2lkID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICBpZD1yb3dbJ2RlcGVuZHNfb25faWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHRhc2tfaWQgb3Igbm90IGRlcGVuZHNfb25faWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHJvd1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0Vycm9ycyBmb3IgdGFzayBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBidWlsZCB0YXJnZXQgZmlsZV9uYW1lIGlzIHBvcHVsYXRlZCBvbmx5IGlmIGlzX2ltYWdlPXRydWUgQU5ECisgICAgIyBvcm1fYnVpbGQub3V0Y29tZT0wIHRoZW4gaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBpdHMgc2l6ZSBtYXRjaGVzCisgICAgIyB0aGUgZmlsZV9zaXplIHZhbHVlLiBOZWVkIHRvIGFkZCB0aGUgdGMgaW4gdGhlIHRlc3QgcnVuCisgICAgZGVmIHRlc3RfVGFyZ2V0X0ZpbGVfTmFtZV9Qb3B1bGF0ZWQoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKG91dGNvbWU9MCkudmFsdWVzKCdpZCcpCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgIGJ1aWxkX2lkPWJ1aWxkWydpZCddLCBpc19pbWFnZT0xKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgICAgICB0YXJnZXRfZmlsZXMgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkPXRhcmdldFsnaWQnXSkudmFsdWVzKCdpZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlX3NpemUnKQorICAgICAgICAgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICAgICAgICAgIGZvciBmaWxlX2luZm8gaW4gdGFyZ2V0X2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaWQgPSBmaWxlX2luZm9bJ2lkJ10KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGVfbmFtZSA9IGZpbGVfaW5mb1snZmlsZV9uYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGVfc2l6ZSA9IGZpbGVfaW5mb1snZmlsZV9zaXplJ10KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vdCB0YXJnZXRfZmlsZV9uYW1lIG9yIG5vdCB0YXJnZXRfZmlsZV9zaXplKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0X2ZpbGVfbmFtZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9zLnBhdGguZ2V0c2l6ZSh0YXJnZXRfZmlsZV9uYW1lKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0Vycm9ycyBmb3IgdGFyZ2V0IGltYWdlIGZpbGUgaWQ6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIpCisKKyAgICAjIEtleSB2ZXJpZmljYXRpb24gLSB0Yz04ODQKKyAgICBkZWYgdGVzdF9QYWNrYWdlX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBkZXBzID0gUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKAorICAgICAgICAgICAgJ2lkJywgJ3BhY2thZ2VfaWQnLCAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIChkZXBbJ3BhY2thZ2VfaWQnXSA9PSBkZXBbJ2RlcGVuZHNfb25faWQnXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQoZGVwWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0Vycm9ycyBmb3IgcGFja2FnZSBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBSZWNpcGUga2V5IHZlcmlmaWNhdGlvbiwgcmVjaXBlIG5hbWUgZG9lcyBub3QgZGVwZW5kcyBvbiBhIHJlY2lwZSBoYXZpbmcKKyAgICAjIHRoZSBzYW1lIG5hbWUgLSB0Yz04ODMKKyAgICBkZWYgdGVzdF9SZWNpcGVfRGVwZW5kZW5jeShzZWxmKToKKyAgICAgICAgZGVwcyA9IFJlY2lwZV9EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKAorICAgICAgICAgICAgJ2lkJywgJ3JlY2lwZV9pZCcsICdkZXBlbmRzX29uX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIChub3QgZGVwWydyZWNpcGVfaWQnXSBvciBub3QgZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgaWQ9ZGVwWydyZWNpcGVfaWQnXSkudmFsdWVzKCduYW1lJykKKyAgICAgICAgICAgICAgICBkZXBfbmFtZSA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgaWQ9ZGVwWydkZXBlbmRzX29uX2lkJ10pLnZhbHVlcygnbmFtZScpCisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gZGVwX25hbWUpOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChkZXBbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nRXJyb3JzIGZvciByZWNpcGUgZGVwZW5kZW5jeSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggYSBudW1iZXIgKDAtOSkgLSB0Yz04NDYKKyAgICBkZWYgdGVzdF9QYWNrYWdlX05hbWVfRm9yX051bWJlcihzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemU9LTEpKS52YWx1ZXMoJ2lkJywgJ25hbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiAocGFja2FnZVsnbmFtZSddWzBdLmlzZGlnaXQoKSBpcyBUcnVlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGVuKGNudF9lcnIpLCAwLCBtc2c9J0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSB2ZXJzaW9uIHN0YXJ0cyB3aXRoIGEgbnVtYmVyICgwLTkpIC0gdGM9ODQ3CisgICAgZGVmIHRlc3RfUGFja2FnZV9WZXJzaW9uX1N0YXJ0c19XaXRoX051bWJlcihzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgflEoc2l6ZT0tMSkpLnZhbHVlcygnaWQnLCAndmVyc2lvbicpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIChwYWNrYWdlWyd2ZXJzaW9uJ11bMF0uaXNkaWdpdCgpIGlzIEZhbHNlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGVuKGNudF9lcnIpLCAwLCBtc2c9J0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSByZXZpc2lvbiBzdGFydHMgd2l0aCAncicgLSB0Yz04NDgKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1JldmlzaW9uX1N0YXJ0c19XaXRoX3Ioc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgIH5RKHNpemU9LTEpKS52YWx1ZXMoJ2lkJywgJ3JldmlzaW9uJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgKHBhY2thZ2VbJ3JldmlzaW9uJ11bMF0uc3RhcnRzd2l0aCgiciIpIGlzIEZhbHNlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGVuKGNudF9lcnIpLCAwLCBtc2c9J0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBwYWNrYWdlIGJ1aWxkX2lkCisgICAgIyBUQyBtdXN0IGJlIGFkZGVkIGluIHRlc3QgcnVuCisgICAgZGVmIHRlc3RfUGFja2FnZV9CdWlsZF9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgflEoc2l6ZT0tMSkpLnZhbHVlcygnaWQnLCAnYnVpbGRfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBidWlsZF9pZCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgIGlkPXBhY2thZ2VbJ2J1aWxkX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCBidWlsZF9pZCk6CisgICAgICAgICAgICAgICAgIyBUaGV5IGhhdmUgbm8gYnVpbGRfaWQgYnV0IGlmIHRoZXkgYXJlCisgICAgICAgICAgICAgICAgIyBDdXN0b21JbWFnZVBhY2thZ2UgdGhhdCdzIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBDdXN0b21JbWFnZVBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZVsnaWQnXSkKKyAgICAgICAgICAgICAgICBleGNlcHQgQ3VzdG9tSW1hZ2VQYWNrYWdlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcyB0aGV5IGhhdmUgbm8gYnVpbGQiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFzc29jaWF0ZWQgd2l0aCB0aGVtIiAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRoZSB2YWxpZGl0eSBvZiBwYWNrYWdlIHJlY2lwZV9pZAorICAgICMgVEMgbXVzdCBiZSBhZGRlZCBpbiB0ZXN0IHJ1bgorICAgIGRlZiB0ZXN0X1BhY2thZ2VfUmVjaXBlX0lkKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICB+UShzaXplPS0xKSkudmFsdWVzKCdpZCcsICdyZWNpcGVfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICByZWNpcGVfaWQgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICAgICAgaWQ9cGFja2FnZVsncmVjaXBlX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCByZWNpcGVfaWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsZW4oY250X2VyciksIDAsIG1zZz0nRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIGluc3RhbGxlZF9zaXplIGZpZWxkIGlzIG5vdCBudWxsCisgICAgIyBUQyBtdXN0IGJlIGFkZWQgaW4gdGVzdCBydW4KKyAgICBkZWYgdGVzdF9QYWNrYWdlX0luc3RhbGxlZF9TaXplX05vdF9OVUxMKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICBpbnN0YWxsZWRfc2l6ZV9faXNudWxsPVRydWUpLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGVuKGNudF9lcnIpLCAwLCBtc2c9J0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9wYWNrYWdlc19nZW5lcmF0ZWQoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIGdlbmVyYXRlZCBDdXN0b21JbWFnZVBhY2thZ2UiIiIKKyAgICAgICAgIiIiIGZvciBlYWNoIG9mIHRoZSBwYWNrYWdlcyBnZW5lcmF0ZWQiIiIKKyAgICAgICAgbWlzc2luZ19wYWNrYWdlcyA9IFtdCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gUGFja2FnZS5vYmplY3RzLmFsbCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIEN1c3RvbUltYWdlUGFja2FnZS5vYmplY3RzLmdldChuYW1lPXBhY2thZ2UubmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBDdXN0b21JbWFnZVBhY2thZ2UuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIG1pc3NpbmdfcGFja2FnZXMuYXBwZW5kKHBhY2thZ2UubmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtaXNzaW5nX3BhY2thZ2VzKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU29tZSBwYWNrYWdlIHdlcmUgY3JlYXRlZCBmcm9tIHRoZSBidWlsZCBidXQgdGhlaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBjb3JyZXNwb25kaW5nIEN1c3RvbUltYWdlUGFja2FnZSB3YXMgbm90IGZvdW5kIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvZGIvX19pbml0X18ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5CnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9kYi9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvZGIvdGVzdF9kYi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2RiL3Rlc3RfZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmNWY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3Rlc3RzL2RiL3Rlc3RfZGIucHkKQEAgLTAsMCArMSw1NSBAQAorIyBUaGUgTUlUIExpY2Vuc2UgKE1JVCkKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2IERhbWllbiBMZXNwaWF1CisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisjIFNPRlRXQVJFLgorCitpbXBvcnQgc3lzCisKK3RyeToKKyAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKworZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgbWFuYWdlbWVudAorZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKKworCitAY29udGV4dG1hbmFnZXIKK2RlZiBjYXB0dXJlKGNvbW1hbmQsICphcmdzLCAqKmt3YXJncyk6CisgICAgb3V0LCBzeXMuc3Rkb3V0ID0gc3lzLnN0ZG91dCwgU3RyaW5nSU8oKQorICAgIGNvbW1hbmQoKmFyZ3MsICoqa3dhcmdzKQorICAgIHN5cy5zdGRvdXQuc2VlaygwKQorICAgIHlpZWxkIHN5cy5zdGRvdXQucmVhZCgpCisgICAgc3lzLnN0ZG91dCA9IG91dAorCisKK2RlZiBtYWtlbWlncmF0aW9ucygpOgorICAgIG1hbmFnZW1lbnQuY2FsbF9jb21tYW5kKCdtYWtlbWlncmF0aW9ucycpCisKKworY2xhc3MgTWlncmF0aW9uVGVzdChUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdFBlbmRpbmdNaWdyYXRpb24oc2VsZik6CisgICAgICAgICIiIk1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgbWlncmF0aW9uLiIiIgorCisgICAgICAgIHdpdGggY2FwdHVyZShtYWtlbWlncmF0aW9ucykgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICJObyBjaGFuZ2VzIGRldGVjdGVkXG4iKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90ZXN0cy9mdW5jdGlvbmFsL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5CmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdGVzdHMvZnVuY3Rpb25hbC9SRUFETUUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvYXBpLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9hcGkucHkKaW5kZXggNDI5MDFmNy4uYWUxZjE1MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9hcGkucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9hcGkucHkKQEAgLTE2LDE0ICsxNiwzMiBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCisjIFBsZWFzZSBydW4gZmxha2U4IG9uIHRoaXMgZmlsZSBiZWZvcmUgc2VuZGluZyBwYXRjaGVzCiAKLSMgVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBVSSdzIG1pc2MgQVBJCitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCiAKLWZyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdFRhcmdldCwgQnVpbGQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdFRhcmdldCwgQnVpbGQsIExheWVyX1ZlcnNpb24KK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSwgTGF5ZXJTb3VyY2UsIFByb2plY3RMYXllcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWNpcGUsIEN1c3RvbUltYWdlUmVjaXBlLCBDdXN0b21JbWFnZVBhY2thZ2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXIsIFRhcmdldCwgUGFja2FnZSwgUGFja2FnZV9EZXBlbmRlbmN5Citmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3RWYXJpYWJsZQogZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0CiBmcm9tIGJsZGNvbnRyb2wgaW1wb3J0IGJiY29udHJvbGxlcgorCiBmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UsIEpzb25SZXNwb25zZQogZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgVmlldworZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUSwgRgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IEVycm9yCitmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdAorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKKworZGVmIGVycm9yX3Jlc3BvbnNlKGVycm9yKToKKyAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsiZXJyb3IiOiBlcnJvcn0pCiAKIAogY2xhc3MgWGhyQnVpbGRSZXF1ZXN0KFZpZXcpOgpAQCAtMzEsNiArNDksMjggQEAKICAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoKQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYW5jZWxfYnVpbGQoYnIpOgorICAgICAgICAiIiJDYW5jZWwgYSBidWlsZCByZXF1ZXN0IiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiY3RybCA9IGJiY29udHJvbGxlci5CaXRiYWtlQ29udHJvbGxlcihici5lbnZpcm9ubWVudCkKKyAgICAgICAgICAgIGJiY3RybC5mb3JjZVNodXREb3duKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBXZSBjYXRjaCBhIGJ1bmNoIG9mIGV4Y2VwdGlvbnMgaGVyZSBiZWNhdXNlCisgICAgICAgICAgICAjIHRoaXMgaXMgd2hlcmUgdGhlIHNlcnZlciBoYXMgbm90IGhhZCB0aW1lIHRvIHN0YXJ0IHVwCisgICAgICAgICAgICAjIGFuZCB0aGUgYnVpbGQgcmVxdWVzdCBvciBidWlsZCBpcyBpbiB0cmFuc2l0IGJldHdlZW4KKyAgICAgICAgICAgICMgcHJvY2Vzc2VzLgorICAgICAgICAgICAgIyBXZSBjYW4gc2FmZWx5IGp1c3Qgc2V0IHRoZSBidWlsZCBhcyBjYW5jZWxsZWQKKyAgICAgICAgICAgICMgYWxyZWFkeSBhcyBpdCBuZXZlciBnb3Qgc3RhcnRlZAorICAgICAgICAgICAgYnVpbGQgPSBici5idWlsZAorICAgICAgICAgICAgYnVpbGQub3V0Y29tZSA9IEJ1aWxkLkNBTkNFTExFRAorICAgICAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgIyBXZSBub3cgaGFuZCBvdmVyIHRvIHRoZSBidWlsZGluZm9oZWxwZXIgdG8gdXBkYXRlIHRoZQorICAgICAgICAjIGJ1aWxkIHN0YXRlIG9uY2Ugd2UndmUgZmluaXNoZWQgY2FuY2VsbGluZworICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfQ0FOQ0VMTElORworICAgICAgICBici5zYXZlKCkKKwogICAgIGRlZiBwb3N0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgogICAgICAgICAgIEJ1aWxkIGNvbnRyb2wKQEAgLTU2LDU1ICs5Niw3ODIgQEAKICAgICAgICAgICAgIGZvciBpIGluIHJlcXVlc3QuUE9TVFsnYnVpbGRDYW5jZWwnXS5zdHJpcCgpLnNwbGl0KCIgIik6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmdldChwcm9qZWN0PXByb2plY3QsIHBrPWkpCi0KLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYmJjdHJsID0gYmJjb250cm9sbGVyLkJpdGJha2VDb250cm9sbGVyKGJyLmVudmlyb25tZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgYmJjdHJsLmZvcmNlU2h1dERvd24oKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGNhdGNoIGEgYnVuY2ggb2YgZXhjZXB0aW9ucyBoZXJlIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyB3aGVyZSB0aGUgc2VydmVyIGhhcyBub3QgaGFkIHRpbWUgdG8gc3RhcnQgdXAKLSAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIHRoZSBidWlsZCByZXF1ZXN0IG9yIGJ1aWxkIGlzIGluIHRyYW5zaXQgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9jZXNzZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGNhbiBzYWZlbHkganVzdCBzZXQgdGhlIGJ1aWxkIGFzIGNhbmNlbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHJlYWR5IGFzIGl0IG5ldmVyIGdvdCBzdGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZCA9IGJyLmJ1aWxkCi0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZC5vdXRjb21lID0gQnVpbGQuQ0FOQ0VMTEVECi0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZC5zYXZlKCkKLQotICAgICAgICAgICAgICAgICAgICAjIFdlIG5vdyBoYW5kIG92ZXIgdG8gdGhlIGJ1aWxkaW5mb2hlbHBlciB0byB1cGRhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgYnVpbGQgc3RhdGUgb25jZSB3ZSd2ZSBmaW5pc2hlZCBjYW5jZWxsaW5nCi0gICAgICAgICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9DQU5DRUxMSU5HCi0gICAgICAgICAgICAgICAgICAgIGJyLnNhdmUoKQotCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FuY2VsX2J1aWxkKGJyKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBCdWlsZFJlcXVlc3QuRG9lc05vdEV4aXN0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsnZXJyb3InOidObyBzdWNoIGJ1aWxkIGlkICVzJyAlIGl9KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoJ05vIHN1Y2ggYnVpbGQgcmVxdWVzdCBpZCAlcycgJSBpKQogCi0gICAgICAgICAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsnZXJyb3InOiAnb2snfSkKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgnb2snKQogCiAgICAgICAgIGlmICdidWlsZERlbGV0ZScgaW4gcmVxdWVzdC5QT1NUOgogICAgICAgICAgICAgZm9yIGkgaW4gcmVxdWVzdC5QT1NUWydidWlsZERlbGV0ZSddLnN0cmlwKCkuc3BsaXQoIiAiKToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIEJ1aWxkUmVxdWVzdC5vYmplY3RzLnNlbGVjdF9mb3JfdXBkYXRlKCkuZ2V0KHByb2plY3QgPSBwcm9qZWN0LCBwayA9IGksIHN0YXRlX19sdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0RFTEVURUQpLmRlbGV0ZSgpCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkUmVxdWVzdC5vYmplY3RzLnNlbGVjdF9mb3JfdXBkYXRlKCkuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD1wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgcGs9aSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX19sdGU9QnVpbGRSZXF1ZXN0LlJFUV9ERUxFVEVEKS5kZWxldGUoKQorCiAgICAgICAgICAgICAgICAgZXhjZXB0IEJ1aWxkUmVxdWVzdC5Eb2VzTm90RXhpc3Q6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeydlcnJvcic6ICdvaycgfSkKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgib2siKQogCiAgICAgICAgIGlmICd0YXJnZXRzJyBpbiByZXF1ZXN0LlBPU1Q6Ci0gICAgICAgICAgICBQcm9qZWN0VGFyZ2V0Lm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcm9qZWN0KS5kZWxldGUoKQorICAgICAgICAgICAgUHJvamVjdFRhcmdldC5vYmplY3RzLmZpbHRlcihwcm9qZWN0PXByb2plY3QpLmRlbGV0ZSgpCiAgICAgICAgICAgICBzID0gc3RyKHJlcXVlc3QuUE9TVFsndGFyZ2V0cyddKQotICAgICAgICAgICAgZm9yIHQgaW4gcy50cmFuc2xhdGUoTm9uZSwgIjslfFwiIikuc3BsaXQoIiAiKToKKyAgICAgICAgICAgIGZvciB0IGluIHJlLnN1YihyJ1s7JXwiXScsICcnLCBzKS5zcGxpdCgiICIpOgogICAgICAgICAgICAgICAgIGlmICI6IiBpbiB0OgogICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIHRhc2sgPSB0LnNwbGl0KCI6IikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0CiAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSAiIgotICAgICAgICAgICAgICAgIFByb2plY3RUYXJnZXQub2JqZWN0cy5jcmVhdGUocHJvamVjdCA9IHByb2plY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFzaykKKyAgICAgICAgICAgICAgICBQcm9qZWN0VGFyZ2V0Lm9iamVjdHMuY3JlYXRlKHByb2plY3Q9cHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD10YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrPXRhc2spCiAgICAgICAgICAgICBwcm9qZWN0LnNjaGVkdWxlX2J1aWxkKCkKIAotICAgICAgICAgICAgcmV0dXJuIEpzb25SZXNwb25zZSh7J2Vycm9yJzogJ29rJyB9KQorICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCdvaycpCiAKICAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoKQogICAgICAgICByZXNwb25zZS5zdGF0dXNfY29kZSA9IDUwMAogICAgICAgICByZXR1cm4gcmVzcG9uc2UKKworCitjbGFzcyBYaHJMYXllcihWaWV3KToKKyAgICAiIiIgR2V0IGFuZCBVcGRhdGUgTGF5ZXIgaW5mb3JtYXRpb24gIiIiCisKKyAgICBkZWYgcG9zdChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgICBVcGRhdGUgYSBsYXllcgorCisgICAgICAgICAgRW50cnkgcG9pbnQ6IC94aHJfbGF5ZXIvPGxheWVydmVyc2lvbl9pZD4KKyAgICAgICAgICBNZXRob2Q6IFBPU1QKKworICAgICAgICAgIEFyZ3M6CisgICAgICAgICAgICAgIHZjc191cmwsIGRpcnBhdGgsIGNvbW1pdCwgdXBfYnJhbmNoLCBzdW1tYXJ5LCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgbG9jYWxfc291cmNlX2RpcgorCisgICAgICAgICAgICAgIGFkZF9kZXAgPSBhcHBlbmQgYSBsYXllcnZlcnNpb25faWQgYXMgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgIHJtX2RlcCA9IHJlbW92ZSBhIGxheWVydmVyc2lvbl9pZCBhcyBhIGRlcGVkZW5jeQorICAgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAgIHsiZXJyb3IiOiAib2sifQorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgeyJlcnJvciI6IDxlcnJvciBtZXNzYWdlPn0KKyAgICAgICAgIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBXZSBjdXJyZW50bHkgb25seSBhbGxvdyBJbXBvcnRlZCBsYXllcnMgdG8gYmUgZWRpdGVkCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldCgKKyAgICAgICAgICAgICAgICBpZD1rd2FyZ3NbJ2xheWVydmVyc2lvbl9pZCddLAorICAgICAgICAgICAgICAgIHByb2plY3Q9a3dhcmdzWydwaWQnXSwKKyAgICAgICAgICAgICAgICBsYXllcl9zb3VyY2U9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCkKKworICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIkNhbm5vdCBmaW5kIGltcG9ydGVkIGxheWVyIHRvIHVwZGF0ZSIpCisKKyAgICAgICAgaWYgInZjc191cmwiIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIudmNzX3VybCA9IHJlcXVlc3QuUE9TVFsidmNzX3VybCJdCisgICAgICAgIGlmICJkaXJwYXRoIiBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmRpcnBhdGggPSByZXF1ZXN0LlBPU1RbImRpcnBhdGgiXQorICAgICAgICBpZiAiY29tbWl0IiBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmNvbW1pdCA9IHJlcXVlc3QuUE9TVFsiY29tbWl0Il0KKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uYnJhbmNoID0gcmVxdWVzdC5QT1NUWyJjb21taXQiXQorICAgICAgICBpZiAic3VtbWFyeSIgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci5zdW1tYXJ5ID0gcmVxdWVzdC5QT1NUWyJzdW1tYXJ5Il0KKyAgICAgICAgaWYgImRlc2NyaXB0aW9uIiBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9uID0gcmVxdWVzdC5QT1NUWyJkZXNjcmlwdGlvbiJdCisgICAgICAgIGlmICJsb2NhbF9zb3VyY2VfZGlyIiBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgPSBcCisgICAgICAgICAgICAgICAgcmVxdWVzdC5QT1NUWyJsb2NhbF9zb3VyY2VfZGlyIl0KKworICAgICAgICBpZiAiYWRkX2RlcCIgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgbHZkID0gTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSgKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uPWxheWVyX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgZGVwZW5kc19vbl9pZD1yZXF1ZXN0LlBPU1RbImFkZF9kZXAiXSkKKyAgICAgICAgICAgIGx2ZC5zYXZlKCkKKworICAgICAgICBpZiAicm1fZGVwIiBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICBybV9kZXAgPSBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZ2V0KAorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICBkZXBlbmRzX29uX2lkPXJlcXVlc3QuUE9TVFsicm1fZGVwIl0pCisgICAgICAgICAgICBybV9kZXAuZGVsZXRlKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLnNhdmUoKQorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5zYXZlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJDb3VsZCBub3QgdXBkYXRlIGxheWVyIHZlcnNpb24gZW50cnk6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZSkKKworICAgICAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsiZXJyb3IiOiAib2sifSkKKworICAgIGRlZiBkZWxldGUoc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBXZSBjdXJyZW50bHkgb25seSBhbGxvdyBJbXBvcnRlZCBsYXllcnMgdG8gYmUgZGVsZXRlZAorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQoCisgICAgICAgICAgICAgICAgaWQ9a3dhcmdzWydsYXllcnZlcnNpb25faWQnXSwKKyAgICAgICAgICAgICAgICBwcm9qZWN0PWt3YXJnc1sncGlkJ10sCisgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPUxheWVyU291cmNlLlRZUEVfSU1QT1JURUQpCisgICAgICAgIGV4Y2VwdCBMYXllcl9WZXJzaW9uLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiQ2Fubm90IGZpbmQgaW1wb3J0ZWQgbGF5ZXIgdG8gZGVsZXRlIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5nZXQocHJvamVjdD1rd2FyZ3NbJ3BpZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyY29tbWl0PWxheWVyX3ZlcnNpb24pLmRlbGV0ZSgpCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0TGF5ZXIuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIuZGVsZXRlKCkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbi5kZWxldGUoKQorCisgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeworICAgICAgICAgICAgImVycm9yIjogIm9rIiwKKyAgICAgICAgICAgICJnb3RvVXJsIjogcmV2ZXJzZSgncHJvamVjdGxheWVycycsIGFyZ3M9KGt3YXJnc1sncGlkJ10sKSkKKyAgICAgICAgfSkKKworCitjbGFzcyBYaHJDdXN0b21SZWNpcGUoVmlldyk6CisgICAgIiIiIENyZWF0ZSBhIGN1c3RvbSBpbWFnZSByZWNpcGUgIiIiCisKKyAgICBkZWYgcG9zdChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3VzdG9tIGltYWdlIHJlY2lwZSBSRVNUIEFQSQorCisgICAgICAgIEVudHJ5IHBvaW50OiAveGhyX2N1c3RvbXJlY2lwZS8KKyAgICAgICAgTWV0aG9kOiBQT1NUCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG5hbWU6IG5hbWUgb2YgY3VzdG9tIHJlY2lwZSB0byBjcmVhdGUKKyAgICAgICAgICAgIHByb2plY3Q6IHRhcmdldCBwcm9qZWN0IGlkIG9mIG9ybS5tb2RlbHMuUHJvamVjdAorICAgICAgICAgICAgYmFzZTogYmFzZSByZWNpcGUgaWQgb2Ygb3JtLm1vZGVscy5SZWNpcGUKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgeyJlcnJvciI6ICJvayIsCisgICAgICAgICAgICAgInVybCI6IDx1cmwgb2YgdGhlIGNyZWF0ZWQgcmVjaXBlPn0KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICB7ImVycm9yIjogPGVycm9yIG1lc3NhZ2U+fQorICAgICAgICAiIiIKKyAgICAgICAgIyBjaGVjayBpZiByZXF1ZXN0IGhhcyBhbGwgcmVxdWlyZWQgcGFyYW1ldGVycworICAgICAgICBmb3IgcGFyYW0gaW4gKCduYW1lJywgJ3Byb2plY3QnLCAnYmFzZScpOgorICAgICAgICAgICAgaWYgcGFyYW0gbm90IGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIk1pc3NpbmcgcGFyYW1ldGVyICclcyciICUgcGFyYW0pCisKKyAgICAgICAgIyBnZXQgcHJvamVjdCBhbmQgYmFzZXJlY2lwZSBvYmplY3RzCisgICAgICAgIHBhcmFtcyA9IHt9CisgICAgICAgIGZvciBuYW1lLCBtb2RlbCBpbiBbKCJwcm9qZWN0IiwgUHJvamVjdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJiYXNlIiwgUmVjaXBlKV06CisgICAgICAgICAgICB2YWx1ZSA9IHJlcXVlc3QuUE9TVFtuYW1lXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhcmFtc1tuYW1lXSA9IG1vZGVsLm9iamVjdHMuZ2V0KGlkPXZhbHVlKQorICAgICAgICAgICAgZXhjZXB0IG1vZGVsLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIkludmFsaWQgJXMgaWQgJXMiICUgKG5hbWUsIHZhbHVlKSkKKworICAgICAgICAjIGNyZWF0ZSBjdXN0b20gcmVjaXBlCisgICAgICAgIHRyeToKKworICAgICAgICAgICAgIyBPbmx5IGFsbG93ZWQgY2hhcnMgaW4gbmFtZSBhcmUgYS16LCAwLTkgYW5kIC0KKyAgICAgICAgICAgIGlmIHJlLnNlYXJjaChyJ1teYS16fDAtOXwtXScsIHJlcXVlc3QuUE9TVFsibmFtZSJdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoImludmFsaWQtbmFtZSIpCisKKyAgICAgICAgICAgIGN1c3RvbV9pbWFnZXMgPSBDdXN0b21JbWFnZVJlY2lwZS5vYmplY3RzLmFsbCgpCisKKyAgICAgICAgICAgICMgQXJlIHRoZXJlIGFueSByZWNpcGVzIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgaW4gb3VyIHByb2plY3Q/CisgICAgICAgICAgICBleGlzdGluZ19pbWFnZV9yZWNpcGVzX2luX3Byb2plY3QgPSBjdXN0b21faW1hZ2VzLmZpbHRlcigKKyAgICAgICAgICAgICAgICBuYW1lPXJlcXVlc3QuUE9TVFsibmFtZSJdLCBwcm9qZWN0PXBhcmFtc1sicHJvamVjdCJdKQorCisgICAgICAgICAgICBpZiBleGlzdGluZ19pbWFnZV9yZWNpcGVzX2luX3Byb2plY3QuY291bnQoKSA+IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJpbWFnZS1hbHJlYWR5LWV4aXN0cyIpCisKKyAgICAgICAgICAgICMgQXJlIHRoZXJlIGFueSByZWNpcGVzIHdpdGggdGhpcyBuYW1lIHdoaWNoIGFyZW4ndCBjdXN0b20KKyAgICAgICAgICAgICMgaW1hZ2UgcmVjaXBlcz8KKyAgICAgICAgICAgIGN1c3RvbV9pbWFnZV9pZHMgPSBjdXN0b21faW1hZ2VzLnZhbHVlc19saXN0KCdpZCcsIGZsYXQ9VHJ1ZSkKKyAgICAgICAgICAgIGV4aXN0aW5nX25vbl9pbWFnZV9yZWNpcGVzID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgIFEobmFtZT1yZXF1ZXN0LlBPU1RbIm5hbWUiXSkgJiB+UShwa19faW49Y3VzdG9tX2ltYWdlX2lkcykKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgaWYgZXhpc3Rpbmdfbm9uX2ltYWdlX3JlY2lwZXMuY291bnQoKSA+IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJyZWNpcGUtYWxyZWFkeS1leGlzdHMiKQorCisgICAgICAgICAgICAjIGNyZWF0ZSBsYXllciAnQ3VzdG9tIGxheWVyJyBhbmQgdmVyaW9uIGlmIG5lZWRlZAorICAgICAgICAgICAgbGF5ZXIgPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgbmFtZT1DdXN0b21JbWFnZVJlY2lwZS5MQVlFUl9OQU1FLAorICAgICAgICAgICAgICAgIHN1bW1hcnk9IkxheWVyIGZvciBjdXN0b20gcmVjaXBlcyIsCisgICAgICAgICAgICAgICAgdmNzX3VybD0iZmlsZTovLy90b2FzdGVyX2NyZWF0ZWRfbGF5ZXIiKVswXQorCisgICAgICAgICAgICAjIENoZWNrIGlmIHdlIGhhdmUgYSBsYXllciB2ZXJzaW9uIGFscmVhZHkKKyAgICAgICAgICAgICMgV2UgZG9uJ3QgdXNlIGdldF9vcl9jcmVhdGUgaGVyZSBiZWNhdXNlIHRoZSBkaXJwYXRoIHdpbGwgY2hhbmdlCisgICAgICAgICAgICAjIGFuZCBpcyBhIHJlcXVpcmVkIGZpZWxkCisgICAgICAgICAgICBsdmVyID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihRKHByb2plY3Q9cGFyYW1zWydwcm9qZWN0J10pICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEobGF5ZXI9bGF5ZXIpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoYnVpbGQ9Tm9uZSkpLmxhc3QoKQorICAgICAgICAgICAgaWYgbHZlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGx2ZXIsIGNyZWF0ZWQgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdD1wYXJhbXNbJ3Byb2plY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXI9bGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIGRpcnBhdGg9InRvYXN0ZXJfY3JlYXRlZF9sYXllciIpCisKKyAgICAgICAgICAgICMgQWRkIGEgZGVwZW5kZW5jeSBvbiBvdXIgbGF5ZXIgdG8gdGhlIGJhc2UgcmVjaXBlJ3MgbGF5ZXIKKyAgICAgICAgICAgIExheWVyVmVyc2lvbkRlcGVuZGVuY3kub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb249bHZlciwKKyAgICAgICAgICAgICAgICBkZXBlbmRzX29uPXBhcmFtc1siYmFzZSJdLmxheWVyX3ZlcnNpb24pCisKKyAgICAgICAgICAgICMgQWRkIGl0IHRvIG91ciBjdXJyZW50IHByb2plY3QgaWYgbmVlZGVkCisgICAgICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHByb2plY3Q9cGFyYW1zWydwcm9qZWN0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyY29tbWl0PWx2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsPUZhbHNlKQorCisgICAgICAgICAgICAjIENyZWF0ZSB0aGUgYWN0dWFsIHJlY2lwZQorICAgICAgICAgICAgcmVjaXBlLCBjcmVhdGVkID0gQ3VzdG9tSW1hZ2VSZWNpcGUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAorICAgICAgICAgICAgICAgIG5hbWU9cmVxdWVzdC5QT1NUWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgYmFzZV9yZWNpcGU9cGFyYW1zWyJiYXNlIl0sCisgICAgICAgICAgICAgICAgcHJvamVjdD1wYXJhbXNbInByb2plY3QiXSwKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uPWx2ZXIsCisgICAgICAgICAgICAgICAgaXNfaW1hZ2U9VHJ1ZSkKKworICAgICAgICAgICAgIyBJZiB3ZSBjcmVhdGVkIHRoZSBvYmplY3QgdGhlbiBzZXR1cCB0aGVzZSBmaWVsZHMuIFRoZXkgbWF5IGdldAorICAgICAgICAgICAgIyBvdmVyd3JpdHRlbiBsYXRlciBvbiBhbmQgY2F1c2UgdGhlIGdldF9vcl9jcmVhdGUgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICMgZHVwbGljYXRlIGlmIHRoZXkndmUgY2hhbmdlZC4KKyAgICAgICAgICAgIGlmIGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgcmVjaXBlLmZpbGVfcGF0aCA9IHJlcXVlc3QuUE9TVFsibmFtZSJdCisgICAgICAgICAgICAgICAgcmVjaXBlLmxpY2Vuc2UgPSAiTUlUIgorICAgICAgICAgICAgICAgIHJlY2lwZS52ZXJzaW9uID0gIjAuMSIKKyAgICAgICAgICAgICAgICByZWNpcGUuc2F2ZSgpCisKKyAgICAgICAgZXhjZXB0IEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiQ2FuJ3QgY3JlYXRlIGN1c3RvbSByZWNpcGU6ICVzIiAlIGVycikKKworICAgICAgICAjIEZpbmQgdGhlIHBhY2thZ2UgbGlzdCBmcm9tIHRoZSBsYXN0IGJ1aWxkIG9mIHRoaXMgcmVjaXBlL3RhcmdldAorICAgICAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoUShidWlsZF9fb3V0Y29tZT1CdWlsZC5TVUNDRUVERUQpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoYnVpbGRfX3Byb2plY3Q9cGFyYW1zWydwcm9qZWN0J10pICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChRKHRhcmdldD1wYXJhbXNbJ2Jhc2UnXS5uYW1lKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSh0YXJnZXQ9cmVjaXBlLm5hbWUpKSkubGFzdCgpCisgICAgICAgIGlmIHRhcmdldDoKKyAgICAgICAgICAgICMgQ29weSBpbiBldmVyeSBwYWNrYWdlCisgICAgICAgICAgICAjIFdlIGRvbid0IHdhbnQgdGhlc2UgcGFja2FnZXMgdG8gYmUgbGlua2VkIHRvIGFueXRoaW5nIGJlY2F1c2UKKyAgICAgICAgICAgICMgdGhhdCB1bmRlcmx5aW5nIGRhdGEgbWF5IGNoYW5nZSBlLmcuIGRlbGV0ZSBhIGJ1aWxkCisgICAgICAgICAgICBmb3IgdHBhY2thZ2UgaW4gdGFyZ2V0LnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZV9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBidWlsdF9wYWNrYWdlID0gdHBhY2thZ2UucGFja2FnZQorICAgICAgICAgICAgICAgICAgICAjIFRoZSBwYWNrYWdlIGhhZCBubyByZWNpcGUgaW5mb3JtYXRpb24gc28gaXMgYSBnaG9zdAorICAgICAgICAgICAgICAgICAgICAjIHBhY2thZ2Ugc2tpcCBpdAorICAgICAgICAgICAgICAgICAgICBpZiBidWlsdF9wYWNrYWdlLnJlY2lwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBjb25maWdfcGFja2FnZSA9IEN1c3RvbUltYWdlUGFja2FnZS5vYmplY3RzLmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9YnVpbHRfcGFja2FnZS5uYW1lKQorCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5pbmNsdWRlc19zZXQuYWRkKGNvbmZpZ19wYWNrYWdlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkVycm9yIGFkZGluZyBwYWNrYWdlICVzICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cGFja2FnZS5wYWNrYWdlLm5hbWUsIGUpKQorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIEpzb25SZXNwb25zZSgKKyAgICAgICAgICAgIHsiZXJyb3IiOiAib2siLAorICAgICAgICAgICAgICJwYWNrYWdlcyI6IHJlY2lwZS5nZXRfYWxsX3BhY2thZ2VzKCkuY291bnQoKSwKKyAgICAgICAgICAgICAidXJsIjogcmV2ZXJzZSgnY3VzdG9tcmVjaXBlJywgYXJncz0ocGFyYW1zWydwcm9qZWN0J10ucGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5pZCkpfSkKKworCitjbGFzcyBYaHJDdXN0b21SZWNpcGVJZChWaWV3KToKKyAgICAiIiIKKyAgICBTZXQgb2YgUmVTVCBBUEkgcHJvY2Vzc29ycyB3b3JraW5nIHdpdGggcmVjaXBlIGlkLgorCisgICAgRW50cnkgcG9pbnQ6IC94aHJfY3VzdG9tcmVjaXBlLzxyZWNpcGVfaWQ+CisKKyAgICBNZXRob2RzOgorICAgICAgICBHRVQgLSBHZXQgZGV0YWlscyBvZiBjdXN0b20gaW1hZ2UgcmVjaXBlCisgICAgICAgIERFTEVURSAtIERlbGV0ZSBjdXN0b20gaW1hZ2UgcmVjaXBlCisKKyAgICBSZXR1cm5zOgorICAgICAgICBHRVQ6CisgICAgICAgIHsiZXJyb3IiOiAib2siLAorICAgICAgICAiaW5mbyI6IGRpY3Rpb25hcnkgb2YgZmllbGQgbmFtZSAtPiB2YWx1ZSBwYWlycworICAgICAgICBvZiB0aGUgQ3VzdG9tSW1hZ2VSZWNpcGUgbW9kZWx9CisgICAgICAgIERFTEVURToKKyAgICAgICAgeyJlcnJvciI6ICJvayJ9CisgICAgICAgICAgb3IKKyAgICAgICAgeyJlcnJvciI6IDxlcnJvciBtZXNzYWdlPn0KKyAgICAiIiIKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfY2lfcmVjaXBlKHJlY2lwZV9pZCk6CisgICAgICAgICIiIiBHZXQgQ3VzdG9tIEltYWdlIHJlY2lwZSBvciByZXR1cm4gYW4gZXJyb3IgcmVzcG9uc2UiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VzdG9tX3JlY2lwZSA9IFwKKyAgICAgICAgICAgICAgICBDdXN0b21JbWFnZVJlY2lwZS5vYmplY3RzLmdldChwaz1yZWNpcGVfaWQpCisgICAgICAgICAgICByZXR1cm4gY3VzdG9tX3JlY2lwZSwgTm9uZQorCisgICAgICAgIGV4Y2VwdCBDdXN0b21JbWFnZVJlY2lwZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgZXJyb3JfcmVzcG9uc2UoIkN1c3RvbSByZWNpcGUgd2l0aCBpZD0lcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBmb3VuZCIgJSByZWNpcGVfaWQpCisKKyAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGN1c3RvbV9yZWNpcGUsIGVycm9yID0gc2VsZi5fZ2V0X2NpX3JlY2lwZShrd2FyZ3NbJ3JlY2lwZV9pZCddKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcgorCisgICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdHRVQnOgorICAgICAgICAgICAgaW5mbyA9IHsiaWQiOiBjdXN0b21fcmVjaXBlLmlkLAorICAgICAgICAgICAgICAgICAgICAibmFtZSI6IGN1c3RvbV9yZWNpcGUubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgImJhc2VfcmVjaXBlX2lkIjogY3VzdG9tX3JlY2lwZS5iYXNlX3JlY2lwZS5pZCwKKyAgICAgICAgICAgICAgICAgICAgInByb2plY3RfaWQiOiBjdXN0b21fcmVjaXBlLnByb2plY3QuaWR9CisKKyAgICAgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeyJlcnJvciI6ICJvayIsICJpbmZvIjogaW5mb30pCisKKyAgICBkZWYgZGVsZXRlKHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGN1c3RvbV9yZWNpcGUsIGVycm9yID0gc2VsZi5fZ2V0X2NpX3JlY2lwZShrd2FyZ3NbJ3JlY2lwZV9pZCddKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcgorCisgICAgICAgIHByb2plY3QgPSBjdXN0b21fcmVjaXBlLnByb2plY3QKKworICAgICAgICBjdXN0b21fcmVjaXBlLmRlbGV0ZSgpCisgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeyJlcnJvciI6ICJvayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb3RvVXJsIjogcmV2ZXJzZSgicHJvamVjdGN1c3RvbWltYWdlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShwcm9qZWN0LnBrLCkpfSkKKworCitjbGFzcyBYaHJDdXN0b21SZWNpcGVQYWNrYWdlcyhWaWV3KToKKyAgICAiIiIKKyAgICBSZVNUIEFQSSB0byBhZGQvcmVtb3ZlIHBhY2thZ2VzIHRvL2Zyb20gY3VzdG9tIHJlY2lwZS4KKworICAgIEVudHJ5IHBvaW50OiAveGhyX2N1c3RvbXJlY2lwZS88cmVjaXBlX2lkPi9wYWNrYWdlcy88cGFja2FnZV9pZD4KKyAgICBNZXRob2RzOgorICAgICAgICAgUFVUIC0gQWRkIHBhY2thZ2UgdG8gdGhlIHJlY2lwZQorICAgICAgICAgREVMRVRFIC0gRGVsZXRlIHBhY2thZ2UgZnJvbSB0aGUgcmVjaXBlCisgICAgICAgICBHRVQgLSBHZXQgcGFja2FnZSBpbmZvcm1hdGlvbgorCisgICAgIFJldHVybnM6CisgICAgICAgICB7ImVycm9yIjogIm9rIn0KKyAgICAgICAgICBvcgorICAgICAgICAgIHsiZXJyb3IiOiA8ZXJyb3IgbWVzc2FnZT59CisgICAgIiIiCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X3BhY2thZ2UocGFja2FnZV9pZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhY2thZ2UgPSBDdXN0b21JbWFnZVBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICAgICAgICAgIHJldHVybiBwYWNrYWdlLCBOb25lCisgICAgICAgIGV4Y2VwdCBQYWNrYWdlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBlcnJvcl9yZXNwb25zZSgiUGFja2FnZSB3aXRoIGlkPSVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGZvdW5kIiAlIHBhY2thZ2VfaWQpCisKKyAgICBkZWYgX3RyYXZlcnNlX2RlcGVuZGVudHMoc2VsZiwgbmV4dF9wYWNrYWdlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZfZGVwcywgYWxsX2N1cnJlbnRfcGFja2FnZXMsIHRyZWVfbGV2ZWw9MCk6CisgICAgICAgICIiIgorICAgICAgICBSZWN1cnNlIHRocm91Z2ggcmV2ZXJzZSBkZXBlbmRlbmN5IHRyZWUgZm9yIG5leHRfcGFja2FnZV9pZC4KKyAgICAgICAgTGltaXQgdGhlIHJldmVyc2UgZGVwZW5kZW5jeSBzZWFyY2ggdG8gcGFja2FnZXMgbm90IGFscmVhZHkgc2Nhbm5lZCwKKyAgICAgICAgdGhhdCBpcywgbm90IGFscmVhZHkgaW4gcmV2X2RlcHMuCisgICAgICAgIExpbWl0IHRoZSBzY2FuIHRvIGEgZGVwdGggKHRyZWVfbGV2ZWwpIG5vdCBleGNlZWRpbmcgdGhlIGNvdW50IG9mCisgICAgICAgIGFsbCBwYWNrYWdlcyBpbiB0aGUgY3VzdG9tIGltYWdlLCBhbmQgaWYgdGhhdCBkZXB0aCBpcyBleGNlZWRlZAorICAgICAgICByZXR1cm4gRmFsc2UsIHBvcCBvdXQgb2YgdGhlIHJlY3Vyc2lvbiwgYW5kIHdyaXRlIGEgd2FybmluZworICAgICAgICB0byB0aGUgbG9nLCBidXQgdGhpcyBpcyB1bmxpa2VseSwgc3VnZ2VzdGluZyBhIGRlcGVuZGVuY3kgbG9vcAorICAgICAgICBub3QgY2F1Z2h0IGJ5IGJpdGJha2UuCisgICAgICAgIE9uIHJldHVybiwgdGhlIGlucHV0L291dHB1dCBhcmcgcmV2X2RlcHMgaXMgYXBwZW5kZWQgd2l0aCBxdWVyeXNldAorICAgICAgICBkaWN0aW9uYXJ5IGVsZW1lbnRzLCBhbm5vdGF0ZWQgZm9yIHVzZSBpbiB0aGUgY3VzdG9taW1hZ2UgdGVtcGxhdGUuCisgICAgICAgIFRoZSBsaXN0IGhhcyB1bnNvcnRlZCwgYnV0IHVuaXF1ZSBlbGVtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIG1heF9kZXBlbmRlbmN5X3RyZWVfZGVwdGggPSBhbGxfY3VycmVudF9wYWNrYWdlcy5jb3VudCgpCisgICAgICAgIGlmIHRyZWVfbGV2ZWwgPj0gbWF4X2RlcGVuZGVuY3lfdHJlZV9kZXB0aDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgICAgICJUaGUgbnVtYmVyIG9mIHJldmVyc2UgZGVwZW5kZW5jaWVzICIKKyAgICAgICAgICAgICAgICAiZm9yIHRoaXMgcGFja2FnZSBleGNlZWRzICIgKyBtYXhfZGVwZW5kZW5jeV90cmVlX2RlcHRoICsKKyAgICAgICAgICAgICAgICAiIGFuZCB0aGUgcmVtYWluaW5nIHJldmVyc2UgZGVwZW5kZW5jaWVzIHdpbGwgbm90IGJlIHJlbW92ZWQiKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBwYWNrYWdlID0gQ3VzdG9tSW1hZ2VQYWNrYWdlLm9iamVjdHMuZ2V0KGlkPW5leHRfcGFja2FnZV9pZCkKKyAgICAgICAgZGVwZW5kZW50cyA9IFwKKyAgICAgICAgICAgIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0LmFubm90YXRlKAorICAgICAgICAgICAgICAgIG5hbWU9RigncGFja2FnZV9fbmFtZScpLAorICAgICAgICAgICAgICAgIHBrPUYoJ3BhY2thZ2VfX3BrJyksCisgICAgICAgICAgICAgICAgc2l6ZT1GKCdwYWNrYWdlX19zaXplJyksCisgICAgICAgICAgICApLnZhbHVlcygibmFtZSIsICJwayIsICJzaXplIikuZXhjbHVkZSgKKyAgICAgICAgICAgICAgICB+UShwa19faW49YWxsX2N1cnJlbnRfcGFja2FnZXMpCisgICAgICAgICAgICApCisKKyAgICAgICAgZm9yIHBrZyBpbiBkZXBlbmRlbnRzOgorICAgICAgICAgICAgaWYgcGtnIGluIHJldl9kZXBzOgorICAgICAgICAgICAgICAgICMgYWxyZWFkeSBzZWVuLCBza2lwIGRlcGVuZGVudCBzZWFyY2gKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXZfZGVwcy5hcHBlbmQocGtnKQorICAgICAgICAgICAgaWYgKHNlbGYuX3RyYXZlcnNlX2RlcGVuZGVudHMocGtnWyJwayJdLCByZXZfZGVwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9jdXJyZW50X3BhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZV9sZXZlbCsxKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZ2V0X2FsbF9kZXBlbmRlbnRzKHNlbGYsIHBhY2thZ2VfaWQsIGFsbF9jdXJyZW50X3BhY2thZ2VzKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgc29ydGVkIGxpc3Qgb2YgcmVjdXJzaXZlIHJldmVyc2UgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlX2lkLAorICAgICAgICBhcyBhIGxpc3Qgb2YgZGljdGlvbmFyeSBpdGVtcywgYnkgcmVjdXJzaW5nIHRocm91Z2ggZGVwZW5kZW5jeQorICAgICAgICByZWxhdGlvbnNoaXBzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV2X2RlcHMgPSBbXQorICAgICAgICBzZWxmLl90cmF2ZXJzZV9kZXBlbmRlbnRzKHBhY2thZ2VfaWQsIHJldl9kZXBzLCBhbGxfY3VycmVudF9wYWNrYWdlcykKKyAgICAgICAgcmV2X2RlcHMgPSBzb3J0ZWQocmV2X2RlcHMsIGtleT1sYW1iZGEgeDogeFsibmFtZSJdKQorICAgICAgICByZXR1cm4gcmV2X2RlcHMKKworICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmVjaXBlLCBlcnJvciA9IFhockN1c3RvbVJlY2lwZUlkLl9nZXRfY2lfcmVjaXBlKAorICAgICAgICAgICAga3dhcmdzWydyZWNpcGVfaWQnXSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IKKworICAgICAgICAjIElmIG5vIHBhY2thZ2VfaWQgdGhlbiBsaXN0IGFsbCB0aGUgY3VycmVudCBwYWNrYWdlcworICAgICAgICBpZiBub3Qga3dhcmdzWydwYWNrYWdlX2lkJ106CisgICAgICAgICAgICB0b3RhbF9zaXplID0gMAorICAgICAgICAgICAgcGFja2FnZXMgPSByZWNpcGUuZ2V0X2FsbF9wYWNrYWdlcygpLnZhbHVlcygiaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpemUiKQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgcGFja2FnZVsnc2l6ZV9mb3JtYXR0ZWQnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQocGFja2FnZVsnc2l6ZSddKQorICAgICAgICAgICAgICAgIHRvdGFsX3NpemUgKz0gcGFja2FnZVsnc2l6ZSddCisKKyAgICAgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeyJlcnJvciI6ICJvayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZXMiOiBsaXN0KHBhY2thZ2VzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b3RhbCI6IGxlbihwYWNrYWdlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG90YWxfc2l6ZSI6IHRvdGFsX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG90YWxfc2l6ZV9mb3JtYXR0ZWQiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQodG90YWxfc2l6ZSl9KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZSwgZXJyb3IgPSBYaHJDdXN0b21SZWNpcGVQYWNrYWdlcy5fZ2V0X3BhY2thZ2UoCisgICAgICAgICAgICAgICAga3dhcmdzWydwYWNrYWdlX2lkJ10pCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IKKworICAgICAgICAgICAgYWxsX2N1cnJlbnRfcGFja2FnZXMgPSByZWNpcGUuZ2V0X2FsbF9wYWNrYWdlcygpCisKKyAgICAgICAgICAgICMgRGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlIHdoaWNoIGFyZW4ndCBzYXRpc2ZpZWQgYnkgdGhlCisgICAgICAgICAgICAjIGN1cnJlbnQgcGFja2FnZXMgaW4gdGhlIGN1c3RvbSBpbWFnZSByZWNpcGUKKyAgICAgICAgICAgIGRlcHMgPSBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5mb3JfdGFyZ2V0X29yX25vbmUoCisgICAgICAgICAgICAgICAgcmVjaXBlLm5hbWUpWydwYWNrYWdlcyddLmFubm90YXRlKAorICAgICAgICAgICAgICAgIG5hbWU9RignZGVwZW5kc19vbl9fbmFtZScpLAorICAgICAgICAgICAgICAgIHBrPUYoJ2RlcGVuZHNfb25fX3BrJyksCisgICAgICAgICAgICAgICAgc2l6ZT1GKCdkZXBlbmRzX29uX19zaXplJyksCisgICAgICAgICAgICAgICAgKS52YWx1ZXMoIm5hbWUiLCAicGsiLCAic2l6ZSIpLmZpbHRlcigKKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSB0d28gZGVwZW5kcyB0eXBlcyB3ZSBkb24ndCBrbm93IHdoeQorICAgICAgICAgICAgICAgIChRKGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUykgfAorICAgICAgICAgICAgICAgICBRKGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JERVBFTkRTKSkgJgorICAgICAgICAgICAgICAgIH5RKHBrX19pbj1hbGxfY3VycmVudF9wYWNrYWdlcykKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgUmV2ZXJzZSBkZXBlbmRlbmNpZXMgd2hpY2ggYXJlIG5lZWRlZCBieSBwYWNrYWdlcyB0aGF0IGFyZQorICAgICAgICAgICAgIyBpbiB0aGUgaW1hZ2UuIFJlY3Vyc2l2ZSBzZWFyY2ggcHJvdmlkaW5nIGFsbCBkZXBlbmRlbnRzLAorICAgICAgICAgICAgIyBub3QganVzdCBpbW1lZGlhdGUgZGVwZW5kZW50cy4KKyAgICAgICAgICAgIHJldmVyc2VfZGVwcyA9IHNlbGYuX2dldF9hbGxfZGVwZW5kZW50cyhrd2FyZ3NbJ3BhY2thZ2VfaWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfY3VycmVudF9wYWNrYWdlcykKKyAgICAgICAgICAgIHRvdGFsX3NpemVfZGVwcyA9IDAKKyAgICAgICAgICAgIHRvdGFsX3NpemVfcmV2ZXJzZV9kZXBzID0gMAorCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgZGVwWydzaXplX2Zvcm1hdHRlZCddID0gXAorICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdChkZXBbJ3NpemUnXSkKKyAgICAgICAgICAgICAgICB0b3RhbF9zaXplX2RlcHMgKz0gZGVwWydzaXplJ10KKworICAgICAgICAgICAgZm9yIGRlcCBpbiByZXZlcnNlX2RlcHM6CisgICAgICAgICAgICAgICAgZGVwWydzaXplX2Zvcm1hdHRlZCddID0gXAorICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdChkZXBbJ3NpemUnXSkKKyAgICAgICAgICAgICAgICB0b3RhbF9zaXplX3JldmVyc2VfZGVwcyArPSBkZXBbJ3NpemUnXQorCisgICAgICAgICAgICByZXR1cm4gSnNvblJlc3BvbnNlKAorICAgICAgICAgICAgICAgIHsiZXJyb3IiOiAib2siLAorICAgICAgICAgICAgICAgICAiaWQiOiBwYWNrYWdlLnBrLAorICAgICAgICAgICAgICAgICAibmFtZSI6IHBhY2thZ2UubmFtZSwKKyAgICAgICAgICAgICAgICAgInZlcnNpb24iOiBwYWNrYWdlLnZlcnNpb24sCisgICAgICAgICAgICAgICAgICJ1bnNhdGlzZmllZF9kZXBlbmRlbmNpZXMiOiBsaXN0KGRlcHMpLAorICAgICAgICAgICAgICAgICAidW5zYXRpc2ZpZWRfZGVwZW5kZW5jaWVzX3NpemUiOiB0b3RhbF9zaXplX2RlcHMsCisgICAgICAgICAgICAgICAgICJ1bnNhdGlzZmllZF9kZXBlbmRlbmNpZXNfc2l6ZV9mb3JtYXR0ZWQiOgorICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdCh0b3RhbF9zaXplX2RlcHMpLAorICAgICAgICAgICAgICAgICAicmV2ZXJzZV9kZXBlbmRlbmNpZXMiOiBsaXN0KHJldmVyc2VfZGVwcyksCisgICAgICAgICAgICAgICAgICJyZXZlcnNlX2RlcGVuZGVuY2llc19zaXplIjogdG90YWxfc2l6ZV9yZXZlcnNlX2RlcHMsCisgICAgICAgICAgICAgICAgICJyZXZlcnNlX2RlcGVuZGVuY2llc19zaXplX2Zvcm1hdHRlZCI6CisgICAgICAgICAgICAgICAgIGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0KHRvdGFsX3NpemVfcmV2ZXJzZV9kZXBzKX0pCisKKyAgICBkZWYgcHV0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJlY2lwZSwgZXJyb3IgPSBYaHJDdXN0b21SZWNpcGVJZC5fZ2V0X2NpX3JlY2lwZShrd2FyZ3NbJ3JlY2lwZV9pZCddKQorICAgICAgICBwYWNrYWdlLCBlcnJvciA9IHNlbGYuX2dldF9wYWNrYWdlKGt3YXJnc1sncGFja2FnZV9pZCddKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcgorCisgICAgICAgIGluY2x1ZGVkX3BhY2thZ2VzID0gcmVjaXBlLmluY2x1ZGVzX3NldC52YWx1ZXNfbGlzdCgncGsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdD1UcnVlKQorCisgICAgICAgICMgSWYgd2UncmUgYWRkaW5nIGJhY2sgYSBwYWNrYWdlIHdoaWNoIHVzZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhpcworICAgICAgICAjIGltYWdlIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHJlbW92ZSBpdCBmcm9tIHRoZSBleGNsdWRlcworICAgICAgICBpZiBwYWNrYWdlLnBrIGluIGluY2x1ZGVkX3BhY2thZ2VzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlY2lwZS5leGNsdWRlc19zZXQucmVtb3ZlKHBhY2thZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsiZXJyb3IiOiAib2sifQorICAgICAgICAgICAgZXhjZXB0IFBhY2thZ2UuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiUGFja2FnZSAlcyBub3QgZm91bmQgaW4gZXhjbHVkZXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnV0IHdhcyBpbiBpbmNsdWRlZCBsaXN0IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UubmFtZSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVjaXBlLmFwcGVuZHNfc2V0LmFkZChwYWNrYWdlKQorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBwYWNrYWdlIGlzIG5vdCBpbiB0aGUgZXhjbHVkZXMgc2V0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVjaXBlLmV4Y2x1ZGVzX3NldC5yZW1vdmUocGFja2FnZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIEFkZCB0aGUgZGVwZW5kZW5jaWVzIHdlIHRoaW5rIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJlY2lwZQorICAgICAgICAgICAgIyBhcyBhIHJlc3VsdCBvZiBhcHBlbmRpbmcgdGhpcyBwYWNrYWdlLgorICAgICAgICAgICAgIyBUT0RPIHRoaXMgc2hvdWxkIHJlY3Vyc2UgZG93biB0aGUgZW50aXJlIGRlcHMgdHJlZQorICAgICAgICAgICAgZm9yIGRlcCBpbiBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5hbGxfZGVwZW5kcygpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3VzdF9wYWNrYWdlID0gQ3VzdG9tSW1hZ2VQYWNrYWdlLm9iamVjdHMuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1kZXAuZGVwZW5kc19vbi5uYW1lKQorCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5pbmNsdWRlc19zZXQuYWRkKGN1c3RfcGFja2FnZSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBXaGVuIGFkZGluZyB0aGUgcHJlLXJlcXVpc2l0ZSBwYWNrYWdlLCBtYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHN1cmUgaXQncyBub3QgaW4gdGhlIGV4Y2x1ZGVkIGxpc3QgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW9yIHJlbW92YWwuCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuZXhjbHVkZXNfc2V0LnJlbW92ZShjdXN0X3BhY2thZ2UpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBwYWNrYWdlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgY2FyZSBpZiB0aGUgcGFja2FnZSBoYWQgbmV2ZXIgYmVlbiBleGNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNvdWxkIG5vdCBhZGQgcGFja2FnZSdzIHN1Z2dlc3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcGVuZGVuY2llcyB0byB0aGUgbGlzdCIpCisgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeyJlcnJvciI6ICJvayJ9KQorCisgICAgZGVmIGRlbGV0ZShzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZWNpcGUsIGVycm9yID0gWGhyQ3VzdG9tUmVjaXBlSWQuX2dldF9jaV9yZWNpcGUoa3dhcmdzWydyZWNpcGVfaWQnXSkKKyAgICAgICAgcGFja2FnZSwgZXJyb3IgPSBzZWxmLl9nZXRfcGFja2FnZShrd2FyZ3NbJ3BhY2thZ2VfaWQnXSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpbmNsdWRlZF9wYWNrYWdlcyA9IHJlY2lwZS5pbmNsdWRlc19zZXQudmFsdWVzX2xpc3QoJ3BrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0PVRydWUpCisgICAgICAgICAgICAjIElmIHdlJ3JlIGRlbGV0aW5nIGEgcGFja2FnZSB3aGljaCBpcyBpbmNsdWRlZCB3ZSBuZWVkIHRvCisgICAgICAgICAgICAjIEFkZCBpdCB0byB0aGUgZXhjbHVkZXMgbGlzdC4KKyAgICAgICAgICAgIGlmIHBhY2thZ2UucGsgaW4gaW5jbHVkZWRfcGFja2FnZXM6CisgICAgICAgICAgICAgICAgcmVjaXBlLmV4Y2x1ZGVzX3NldC5hZGQocGFja2FnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVjaXBlLmFwcGVuZHNfc2V0LnJlbW92ZShwYWNrYWdlKQorICAgICAgICAgICAgICAgIGFsbF9jdXJyZW50X3BhY2thZ2VzID0gcmVjaXBlLmdldF9hbGxfcGFja2FnZXMoKQorCisgICAgICAgICAgICAgICAgcmV2ZXJzZV9kZXBzX2RpY3RsaXN0ID0gc2VsZi5fZ2V0X2FsbF9kZXBlbmRlbnRzKAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnBrLAorICAgICAgICAgICAgICAgICAgICBhbGxfY3VycmVudF9wYWNrYWdlcykKKworICAgICAgICAgICAgICAgIGlkcyA9IFtlbnRyeVsncGsnXSBmb3IgZW50cnkgaW4gcmV2ZXJzZV9kZXBzX2RpY3RsaXN0XQorICAgICAgICAgICAgICAgIHJldmVyc2VfZGVwcyA9IEN1c3RvbUltYWdlUGFja2FnZS5vYmplY3RzLmZpbHRlcihpZF9faW49aWRzKQorICAgICAgICAgICAgICAgIGZvciByIGluIHJldmVyc2VfZGVwczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgci5pZCBpbiBpbmNsdWRlZF9wYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuZXhjbHVkZXNfc2V0LmFkZChyKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuYXBwZW5kc19zZXQucmVtb3ZlKHIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgcmV0dXJuIEpzb25SZXNwb25zZSh7ImVycm9yIjogIm9rIn0pCisgICAgICAgIGV4Y2VwdCBDdXN0b21JbWFnZVJlY2lwZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIlRyaWVkIHRvIHJlbW92ZSBwYWNrYWdlIHRoYXQgd2Fzbid0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcHJlc2VudCIpCisKKworY2xhc3MgWGhyUHJvamVjdChWaWV3KToKKyAgICAiIiIgQ3JlYXRlLCBkZWxldGUgb3IgZWRpdCBhIHByb2plY3QKKworICAgIEVudHJ5IHBvaW50OiAveGhyX3Byb2plY3QvPHByb2plY3RfaWQ+CisgICAgIiIiCisgICAgZGVmIHBvc3Qoc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgICAgRWRpdCBwcm9qZWN0IGNvbnRyb2wKKworICAgICAgICAgIEFyZ3M6CisgICAgICAgICAgICAgIGxheWVyQWRkID0gbGF5ZXJfdmVyc2lvbl9pZCBsYXllcl92ZXJzaW9uX2lkIC4uLgorICAgICAgICAgICAgICBsYXllckRlbCA9IGxheWVyX3ZlcnNpb25faWQgbGF5ZXJfdmVyc2lvbl9pZCAuLi4KKyAgICAgICAgICAgICAgcHJvamVjdE5hbWUgPSBuZXdfcHJvamVjdF9uYW1lCisgICAgICAgICAgICAgIG1hY2hpbmVOYW1lID0gbmV3X21hY2hpbmVfbmFtZQorCisgICAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgICAgeyJlcnJvciI6ICJvayJ9CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgICB7ImVycm9yIjogPGVycm9yIG1lc3NhZ2U+fQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3Byb2plY3RfaWQnXSkKKyAgICAgICAgZXhjZXB0IFByb2plY3QuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJObyBzdWNoIHByb2plY3QiKQorCisgICAgICAgICMgQWRkIGxheWVycworICAgICAgICBpZiAnbGF5ZXJBZGQnIGluIHJlcXVlc3QuUE9TVCBhbmQgbGVuKHJlcXVlc3QuUE9TVFsnbGF5ZXJBZGQnXSkgPiAwOgorICAgICAgICAgICAgZm9yIGxheWVyX3ZlcnNpb25faWQgaW4gcmVxdWVzdC5QT1NUWydsYXllckFkZCddLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9aW50KGxheWVyX3ZlcnNpb25faWQpKQorICAgICAgICAgICAgICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHByb2plY3Q9cHJqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyY29tbWl0PWx2KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBMYXllcl9WZXJzaW9uLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJMYXllciB2ZXJzaW9uICVzIGFza2VkIHRvIGFkZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9lc24ndCBleGlzdCIgJSBsYXllcl92ZXJzaW9uX2lkKQorCisgICAgICAgICMgUmVtb3ZlIGxheWVycworICAgICAgICBpZiAnbGF5ZXJEZWwnIGluIHJlcXVlc3QuUE9TVCBhbmQgbGVuKHJlcXVlc3QuUE9TVFsnbGF5ZXJEZWwnXSkgPiAwOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9pZHMgPSByZXF1ZXN0LlBPU1RbJ2xheWVyRGVsJ10uc3BsaXQoJywnKQorICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgIHByb2plY3Q9cHJqLAorICAgICAgICAgICAgICAgIGxheWVyY29tbWl0X2lkX19pbj1sYXllcl92ZXJzaW9uX2lkcykuZGVsZXRlKCkKKworICAgICAgICAjIFByb2plY3QgbmFtZSBjaGFuZ2UKKyAgICAgICAgaWYgJ3Byb2plY3ROYW1lJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICBwcmoubmFtZSA9IHJlcXVlc3QuUE9TVFsncHJvamVjdE5hbWUnXQorICAgICAgICAgICAgcHJqLnNhdmUoKQorCisgICAgICAgICMgTWFjaGluZSBuYW1lIGNoYW5nZQorICAgICAgICBpZiAnbWFjaGluZU5hbWUnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgIG1hY2hpbmV2YXIgPSBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZT0iTUFDSElORSIpCisgICAgICAgICAgICBtYWNoaW5ldmFyLnZhbHVlID0gcmVxdWVzdC5QT1NUWydtYWNoaW5lTmFtZSddCisgICAgICAgICAgICBtYWNoaW5ldmFyLnNhdmUoKQorCisgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeyJlcnJvciI6ICJvayJ9KQorCisgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGpzb24gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9qZWN0CisgICAgICAgIG9yOgorICAgICAgICAgICAgeyJlcnJvciI6IDxlcnJvciBtZXNzYWdlPn0KKyAgICAgICAgIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwcm9qZWN0X2lkJ10pCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiUHJvamVjdCAlcyBkb2VzIG5vdCBleGlzdCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnc1sncHJvamVjdF9pZCddKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSBmcmVxdWVudGx5IGJ1aWx0IHRhcmdldHMgbGlzdAorCisgICAgICAgIGZyZXF0YXJnZXRzID0gQ291bnRlcihUYXJnZXQub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICBRKGJ1aWxkX19wcm9qZWN0PXByb2plY3QpLAorICAgICAgICAgICAgflEoYnVpbGRfX291dGNvbWU9QnVpbGQuSU5fUFJPR1JFU1MpCisgICAgICAgICkub3JkZXJfYnkoInRhcmdldCIpLnZhbHVlc19saXN0KCJ0YXJnZXQiLCBmbGF0PVRydWUpKQorCisgICAgICAgIGZyZXF0YXJnZXRzID0gZnJlcXRhcmdldHMubW9zdF9jb21tb24oNSkKKworICAgICAgICAjIFdlIG5vdyBoYXZlIHRoZSB0YXJnZXRzIGluIG9yZGVyIG9mIGZyZXF1ZW5jeSBidXQgaWYgdGhlcmUgYXJlIHR3bworICAgICAgICAjIHdpdGggdGhlIHNhbWUgZnJlcXVlbmN5IHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGluCisgICAgICAgICMgYWxwaGFiZXRpY2FsIG9yZGVyIHdpdGhvdXQgbG9zaW5nIHRoZSBmcmVxdWVuY3kgb3JkZXJpbmcKKworICAgICAgICB0bXAgPSBbXQorICAgICAgICBzd2l0Y2ggPSBOb25lCisgICAgICAgIGZvciBpLCBmcmVxdGFydGdldCBpbiBlbnVtZXJhdGUoZnJlcXRhcmdldHMpOgorICAgICAgICAgICAgdGFyZ2V0LCBjb3VudCA9IGZyZXF0YXJ0Z2V0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyZ2V0X25leHQsIGNvdW50X25leHQgPSBmcmVxdGFyZ2V0c1tpKzFdCisgICAgICAgICAgICAgICAgaWYgY291bnQgPT0gY291bnRfbmV4dCBhbmQgdGFyZ2V0ID4gdGFyZ2V0X25leHQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCA9IHRhcmdldAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB0bXAuYXBwZW5kKHRhcmdldCkKKworICAgICAgICAgICAgaWYgc3dpdGNoOgorICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoc3dpdGNoKQorICAgICAgICAgICAgICAgIHN3aXRjaCA9IE5vbmUKKworICAgICAgICBmcmVxdGFyZ2V0cyA9IHRtcAorCisgICAgICAgIGxheWVycyA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBwcm9qZWN0LnByb2plY3RsYXllcl9zZXQuYWxsKCk6CisgICAgICAgICAgICBsYXllcnMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICAiaWQiOiBsYXllci5sYXllcmNvbW1pdC5waywKKyAgICAgICAgICAgICAgICAibmFtZSI6IGxheWVyLmxheWVyY29tbWl0LmxheWVyLm5hbWUsCisgICAgICAgICAgICAgICAgInZjc191cmwiOiBsYXllci5sYXllcmNvbW1pdC5sYXllci52Y3NfdXJsLAorICAgICAgICAgICAgICAgICJsb2NhbF9zb3VyY2VfZGlyIjogbGF5ZXIubGF5ZXJjb21taXQubGF5ZXIubG9jYWxfc291cmNlX2RpciwKKyAgICAgICAgICAgICAgICAidmNzX3JlZmVyZW5jZSI6IGxheWVyLmxheWVyY29tbWl0LmdldF92Y3NfcmVmZXJlbmNlKCksCisgICAgICAgICAgICAgICAgInVybCI6IGxheWVyLmxheWVyY29tbWl0LmxheWVyLmxheWVyX2luZGV4X3VybCwKKyAgICAgICAgICAgICAgICAibGF5ZXJkZXRhaWx1cmwiOiBsYXllci5sYXllcmNvbW1pdC5nZXRfZGV0YWlsc3BhZ2VfdXJsKAorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LnBrKSwKKyAgICAgICAgICAgICAgICAibGF5ZXJzb3VyY2UiOiBsYXllci5sYXllcmNvbW1pdC5sYXllcl9zb3VyY2UKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgZGF0YSA9IHsKKyAgICAgICAgICAgICJuYW1lIjogcHJvamVjdC5uYW1lLAorICAgICAgICAgICAgImxheWVycyI6IGxheWVycywKKyAgICAgICAgICAgICJmcmVxdGFyZ2V0cyI6IGZyZXF0YXJnZXRzLAorICAgICAgICB9CisKKyAgICAgICAgaWYgcHJvamVjdC5yZWxlYXNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YVsncmVsZWFzZSddID0geworICAgICAgICAgICAgICAgICJpZCI6IHByb2plY3QucmVsZWFzZS5waywKKyAgICAgICAgICAgICAgICAibmFtZSI6IHByb2plY3QucmVsZWFzZS5uYW1lLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6IHByb2plY3QucmVsZWFzZS5kZXNjcmlwdGlvbgorICAgICAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGFbIm1hY2hpbmUiXSA9IHsibmFtZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5wcm9qZWN0dmFyaWFibGVfc2V0LmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iTUFDSElORSIpLnZhbHVlfQorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIGRhdGFbIm1hY2hpbmUiXSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YVsiZGlzdHJvIl0gPSBwcm9qZWN0LnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KAorICAgICAgICAgICAgICAgIG5hbWU9IkRJU1RSTyIpLnZhbHVlCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgZGF0YVsiZGlzdHJvIl0gPSAiLS0gbm90IHNldCB5ZXQiCisKKyAgICAgICAgZGF0YVsnZXJyb3InXSA9ICJvayIKKworICAgICAgICByZXR1cm4gSnNvblJlc3BvbnNlKGRhdGEpCisKKyAgICBkZWYgcHV0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICMgVE9ETyBjcmVhdGUgbmV3IHByb2plY3QgYXBpCisgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoKQorCisgICAgZGVmIGRlbGV0ZShzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJEZWxldGUgYSBwcm9qZWN0LiBDYW5jZWxzIGFueSBidWlsZHMgaW4gcHJvZ3Jlc3MiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwcm9qZWN0X2lkJ10pCisgICAgICAgICAgICAjIENhbmNlbCBhbnkgYnVpbGRzIGluIHByb2dyZXNzCisgICAgICAgICAgICBmb3IgYnIgaW4gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0PXByb2plY3QsCisgICAgICAgICAgICAgICAgICAgIHN0YXRlPUJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUyk6CisgICAgICAgICAgICAgICAgWGhyQnVpbGRSZXF1ZXN0LmNhbmNlbF9idWlsZChicikKKworICAgICAgICAgICAgcHJvamVjdC5kZWxldGUoKQorCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiUHJvamVjdCAlcyBkb2VzIG5vdCBleGlzdCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnc1sncHJvamVjdF9pZCddKQorCisgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeworICAgICAgICAgICAgImVycm9yIjogIm9rIiwKKyAgICAgICAgICAgICJnb3RvVXJsIjogcmV2ZXJzZSgiYWxsLXByb2plY3RzIiwgYXJncz1bXSkKKyAgICAgICAgfSkKKworCitjbGFzcyBYaHJCdWlsZChWaWV3KToKKyAgICAiIiIgRGVsZXRlIGEgYnVpbGQgb2JqZWN0CisKKyAgICBFbnRyeSBwb2ludDogL3hocl9idWlsZC88YnVpbGRfaWQ+CisgICAgIiIiCisgICAgZGVmIGRlbGV0ZShzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgICBEZWxldGUgYnVpbGQgZGF0YQorCisgICAgICAgICAgQXJnczoKKyAgICAgICAgICAgICAgYnVpbGRfaWQgPSBidWlsZF9pZAorCisgICAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgICAgeyJlcnJvciI6ICJvayJ9CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgICB7ImVycm9yIjogPGVycm9yIG1lc3NhZ2U+fQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ2J1aWxkX2lkJ10pCisgICAgICAgICAgICBwcm9qZWN0ID0gYnVpbGQucHJvamVjdAorICAgICAgICAgICAgYnVpbGQuZGVsZXRlKCkKKyAgICAgICAgZXhjZXB0IEJ1aWxkLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiQnVpbGQgJXMgZG9lcyBub3QgZXhpc3QiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbJ2J1aWxkX2lkJ10pCisgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeworICAgICAgICAgICAgImVycm9yIjogIm9rIiwKKyAgICAgICAgICAgICJnb3RvVXJsIjogcmV2ZXJzZSgicHJvamVjdGJ1aWxkcyIsIGFyZ3M9KHByb2plY3QucGssKSkKKyAgICAgICAgfSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvYnVpbGR0YWJsZXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL2J1aWxkdGFibGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMGE2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL2J1aWxkdGFibGVzLnB5CkBAIC0wLDAgKzEsNjA2IEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkLCBUYXNrLCBUYXJnZXQsIFBhY2thZ2UKK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUSwgU3VtCisKK2ltcG9ydCB0b2FzdGVyZ3VpLnRhYmxlcyBhcyB0YWJsZXMKK2Zyb20gdG9hc3Rlcmd1aS53aWRnZXRzIGltcG9ydCBUb2FzdGVyVGFibGUKK2Zyb20gdG9hc3Rlcmd1aS50YWJsZWZpbHRlciBpbXBvcnQgVGFibGVGaWx0ZXIKK2Zyb20gdG9hc3Rlcmd1aS50YWJsZWZpbHRlciBpbXBvcnQgVGFibGVGaWx0ZXJBY3Rpb25Ub2dnbGUKKworCitjbGFzcyBCdWlsZFRhYmxlc01peGluKFRvYXN0ZXJUYWJsZSk6CisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAjIFdlIG5lZWQgdG8gYmUgZXhwbGljaXQgYWJvdXQgd2hpY2ggc3VwZXJjbGFzcyB3ZSdyZSBjYWxsaW5nIGhlcmUKKyAgICAgICAgIyBPdGhlcndpc2UgdGhlIE1STyBnZXRzIGluIGEgcmlnaHQgbWVzcworICAgICAgICBjb250ZXh0ID0gVG9hc3RlclRhYmxlLmdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpCisgICAgICAgIGNvbnRleHRbJ2J1aWxkJ10gPSBCdWlsZC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ2J1aWxkX2lkJ10pCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworY2xhc3MgQnVpbHRQYWNrYWdlc1RhYmxlQmFzZSh0YWJsZXMuUGFja2FnZXNUYWJsZSk6CisgICAgIiIiIFRhYmxlIHRvIGRpc3BsYXkgYWxsIHRoZSBwYWNrYWdlcyBidWlsdCBpbiBhIGJ1aWxkICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsdFBhY2thZ2VzVGFibGVCYXNlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYudGl0bGUgPSAiUGFja2FnZXMgYnVpbHQiCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIm5hbWUiCisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ2J1aWxkX2lkJ10pCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ2J1aWxkJ10gPSBidWlsZAorICAgICAgICBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhWyd0YXJnZXRfbmFtZSddID0gTm9uZQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gYnVpbGQucGFja2FnZV9zZXQuYWxsKCkuZXhjbHVkZShyZWNpcGU9Tm9uZSkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQub3JkZXJfYnkoc2VsZi5kZWZhdWx0X29yZGVyYnkpCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsdFBhY2thZ2VzVGFibGVCYXNlLCBzZWxmKS5zZXR1cF9jb2x1bW5zKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICBkZWYgcGtnX2xpbmtfdGVtcGxhdGUodmFsKToKKyAgICAgICAgICAgICIiIiByZXR1cm4gdGhlIHRlbXBsYXRlIHVzZWQgZm9yIHRoZSBsaW5rIHdpdGggdGhlIHZhbCBhcyB0aGUKKyAgICAgICAgICAgIGVsZW1lbnQgdmFsdWUgaS5lLiBpbnNpZGUgdGhlIDxhPjwvYT4iIiIKKworICAgICAgICAgICAgcmV0dXJuICgnJycKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iCisgICAgICAgICAgICAgICAgICAgIHslJSB1cmwgInBhY2thZ2VfYnVpbHRfZGV0YWlsIiBleHRyYS5idWlsZC5wayBkYXRhLnBrICUlfQorICAgICAgICAgICAgICAgICAgICAiPiVzPC9hPgorICAgICAgICAgICAgICAgICAgICAnJycgJSB2YWwpCisKKyAgICAgICAgZGVmIHJlY2lwZV9saW5rX3RlbXBsYXRlKHZhbCk6CisgICAgICAgICAgICByZXR1cm4gKCcnJworICAgICAgICAgICAgICAgICAgICB7JSUgaWYgZGF0YS5yZWNpcGUgJSV9CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IgorICAgICAgICAgICAgICAgICAgICB7JSUgdXJsICJyZWNpcGUiIGV4dHJhLmJ1aWxkLnBrIGRhdGEucmVjaXBlLnBrICUlfQorICAgICAgICAgICAgICAgICAgICAiPiUodmFsdWUpczwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyUlIGVsc2UgJSV9CisgICAgICAgICAgICAgICAgICAgICUodmFsdWUpcworICAgICAgICAgICAgICAgICAgICB7JSUgZW5kaWYgJSV9CisgICAgICAgICAgICAgICAgICAgICcnJyAlIHsndmFsdWUnOiB2YWx9KQorCisgICAgICAgIGFkZF9wa2dfbGlua190byA9ICduYW1lJworICAgICAgICBhZGRfcmVjaXBlX2xpbmtfdG8gPSAncmVjaXBlX19uYW1lJworCisgICAgICAgICMgQWRkIHRoZSByZWNpcGUgYW5kIHBrZyBidWlsZCBsaW5rcyB0byB0aGUgcmVxdWlyZWQgY29sdW1ucworICAgICAgICBmb3IgY29sdW1uIGluIHNlbGYuY29sdW1uczoKKyAgICAgICAgICAgICMgQ29udmVydCB0byB0ZW1wbGF0ZSBmaWVsZCBzdHlsZSBhY2Nlc3NvcnMKKyAgICAgICAgICAgIHRtcGx2ID0gY29sdW1uWydmaWVsZF9uYW1lJ10ucmVwbGFjZSgnX18nLCAnLicpCisgICAgICAgICAgICB0bXBsdiA9ICJ7e2RhdGEuJXN9fSIgJSB0bXBsdgorCisgICAgICAgICAgICBpZiBjb2x1bW5bJ2ZpZWxkX25hbWUnXSBpcyBhZGRfcGtnX2xpbmtfdG86CisgICAgICAgICAgICAgICAgIyBEb24ndCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGVtcGxhdGUKKyAgICAgICAgICAgICAgICBpZiBjb2x1bW5bJ3N0YXRpY19kYXRhX3RlbXBsYXRlJ106CisgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnc3RhdGljX2RhdGFfdGVtcGxhdGUnXSA9XAorICAgICAgICAgICAgICAgICAgICAgICAgcGtnX2xpbmtfdGVtcGxhdGUoY29sdW1uWydzdGF0aWNfZGF0YV90ZW1wbGF0ZSddKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnc3RhdGljX2RhdGFfdGVtcGxhdGUnXSA9IHBrZ19saW5rX3RlbXBsYXRlKHRtcGx2KQorCisgICAgICAgICAgICAgICAgY29sdW1uWydzdGF0aWNfZGF0YV9uYW1lJ10gPSBjb2x1bW5bJ2ZpZWxkX25hbWUnXQorCisgICAgICAgICAgICBlbGlmIGNvbHVtblsnZmllbGRfbmFtZSddIGlzIGFkZF9yZWNpcGVfbGlua190bzoKKyAgICAgICAgICAgICAgICAjIERvbid0IG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0ZW1wbGF0ZQorICAgICAgICAgICAgICAgIGlmIGNvbHVtblsnc3RhdGljX2RhdGFfdGVtcGxhdGUnXToKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uWydzdGF0aWNfZGF0YV90ZW1wbGF0ZSddID1cCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVfbGlua190ZW1wbGF0ZShjb2x1bW5bJ3N0YXRpY19kYXRhX3RlbXBsYXRlJ10pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uWydzdGF0aWNfZGF0YV90ZW1wbGF0ZSddID1cCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVfbGlua190ZW1wbGF0ZSh0bXBsdikKKyAgICAgICAgICAgICAgICBjb2x1bW5bJ3N0YXRpY19kYXRhX25hbWUnXSA9IGNvbHVtblsnZmllbGRfbmFtZSddCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUpCisKKyAgICAgICAgbGF5ZXJfYnJhbmNoX3RlbXBsYXRlID0gJycnCisgICAgICAgIHslaWYgbm90IGRhdGEucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2RpciAlfQorICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+e3tkYXRhLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19PC9zcGFuPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj5Ob3QgYXBwbGljYWJsZTwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiB0aXRsZT0iVGhlIHNvdXJjZSBjb2RlIG9mIHt7ZGF0YS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gaXMgbm90IGluIGEgR2l0IHJlcG9zaXRvcnksIHNvIHRoZXJlIGlzIG5vIGJyYW5jaCBhc3NvY2lhdGVkIHdpdGggaXQiPiA8L3NwYW4+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXIgYnJhbmNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0icmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9bGF5ZXJfYnJhbmNoX3RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUpCisKKyAgICAgICAgZ2l0X3Jldl90ZW1wbGF0ZSA9ICcnJworICAgICAgICB7JSBpZiBub3QgZGF0YS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5sb2NhbF9zb3VyY2VfZGlyICV9CisgICAgICAgIHslIHdpdGggdmNzX3JlZj1kYXRhLnJlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdCAlfQorICAgICAgICB7JSBpbmNsdWRlICdzbmlwcGV0cy9naXRyZXZfcG9wb3Zlci5odG1sJyAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPk5vdCBhcHBsaWNhYmxlPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIHRpdGxlPSJUaGUgc291cmNlIGNvZGUgb2Yge3tkYXRhLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSBpcyBub3QgaW4gYSBHaXQgcmVwb3NpdG9yeSwgc28gdGhlcmUgaXMgbm8gcmV2aXNpb24gYXNzb2NpYXRlZCB3aXRoIGl0Ij4gPC9zcGFuPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyIGNvbW1pdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSd2Y3NfcmVmJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWdpdF9yZXZfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSkKKworCitjbGFzcyBCdWlsdFBhY2thZ2VzVGFibGUoQnVpbGRUYWJsZXNNaXhpbiwgQnVpbHRQYWNrYWdlc1RhYmxlQmFzZSk6CisgICAgIiIiIFNob3cgYWxsIHRoZSBwYWNrYWdlcyBidWlsdCBmb3IgdGhlIHNlbGVjdGVkIGJ1aWxkICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsdFBhY2thZ2VzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi50aXRsZSA9ICJQYWNrYWdlcyBidWlsdCIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAibmFtZSIKKworICAgICAgICBzZWxmLmVtcHR5X3N0YXRlID1cCisgICAgICAgICAgICAoJzxzdHJvbmc+Tm8gcGFja2FnZXMgd2VyZSBidWlsdC48L3N0cm9uZz4gSG93IGRpZCB0aGlzIGhhcHBlbj8gJworICAgICAgICAgICAgICdXZWxsLCBCaXRCYWtlIHJldXNlcyBhcyBtdWNoIHN0dWZmIGFzIHBvc3NpYmxlLiAnCisgICAgICAgICAgICAgJ0lmIGFsbCBvZiB0aGUgcGFja2FnZXMgbmVlZGVkIHdlcmUgYWxyZWFkeSBidWlsdCBhbmQgYXZhaWxhYmxlICcKKyAgICAgICAgICAgICAnaW4geW91ciBidWlsZCBpbmZyYXN0cnVjdHVyZSwgQml0QmFrZSAnCisgICAgICAgICAgICAgJ3dpbGwgbm90IHJlYnVpbGQgYW55IG9mIHRoZW0uIFRoaXMgbWlnaHQgYmUgc2xpZ2h0bHkgY29uZnVzaW5nLCAnCisgICAgICAgICAgICAgJ2J1dCBpdCBkb2VzIG1ha2UgZXZlcnl0aGluZyBmYXN0ZXIuJykKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKEJ1aWx0UGFja2FnZXNUYWJsZSwgc2VsZikuc2V0dXBfY29sdW1ucygqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgZGVmIHJlbW92ZV9kZXBfY29scyhjb2x1bW5zKToKKyAgICAgICAgICAgIGZvciBjb2x1bW4gaW4gY29sdW1uczoKKyAgICAgICAgICAgICAgICAjIFdlIGRvbid0IG5lZWQgdGhlc2UgZmllbGRzCisgICAgICAgICAgICAgICAgaWYgY29sdW1uWydzdGF0aWNfZGF0YV9uYW1lJ10gaW4gWydyZXZlcnNlX2RlcGVuZGVuY2llcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnXToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHlpZWxkIGNvbHVtbgorCisgICAgICAgIHNlbGYuY29sdW1ucyA9IGxpc3QocmVtb3ZlX2RlcF9jb2xzKHNlbGYuY29sdW1ucykpCisKKworY2xhc3MgSW5zdGFsbGVkUGFja2FnZXNUYWJsZShCdWlsZFRhYmxlc01peGluLCBCdWlsdFBhY2thZ2VzVGFibGVCYXNlKToKKyAgICAiIiIgU2hvdyBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIGFuIGltYWdlICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihJbnN0YWxsZWRQYWNrYWdlc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYudGl0bGUgPSAiUGFja2FnZXMgSW5jbHVkZWQiCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIm5hbWUiCisKKyAgICBkZWYgbWFrZV9wYWNrYWdlX2xpc3Qoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIyBUaGUgZGF0YWJhc2UgZGVzaWduIG1lYW5zIHRoYXQgeW91IGdldCB0aGUgaW50ZXJtZWRpYXRlIG9iamVjdHMgYW5kCisgICAgICAgICMgbm90IHBhY2thZ2Ugb2JqZWN0cyBsaWtlIHlvdSdkIHJlYWxseSB3YW50IHNvIHdlIGdldCB0aGVtIGhlcmUKKyAgICAgICAgcGtncyA9IHRhcmdldC50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2Vfc2V0LnZhbHVlc19saXN0KCdwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIocGtfX2luPXBrZ3MpCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGNvbnRleHQgPSBzdXBlcihJbnN0YWxsZWRQYWNrYWdlc1RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKworICAgICAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5nZXQocGs9a3dhcmdzWyd0YXJnZXRfaWQnXSkKKyAgICAgICAgcGFja2FnZXMgPSBzZWxmLm1ha2VfcGFja2FnZV9saXN0KHRhcmdldCkKKworICAgICAgICBjb250ZXh0WydwYWNrYWdlc19zdW0nXSA9IHBhY2thZ2VzLmFnZ3JlZ2F0ZSgKKyAgICAgICAgICAgIFN1bSgnaW5zdGFsbGVkX3NpemUnKSlbJ2luc3RhbGxlZF9zaXplX19zdW0nXQorCisgICAgICAgIGNvbnRleHRbJ3RhcmdldCddID0gdGFyZ2V0CisgICAgICAgIHJldHVybiBjb250ZXh0CisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ2J1aWxkX2lkJ10pCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ2J1aWxkJ10gPSBidWlsZAorCisgICAgICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3RhcmdldF9pZCddKQorICAgICAgICAjIFdlIHNlbmQgdGhlc2Ugc2VwYXJhdGVseSBiZWNhdXNlIGluIHRoZSBjYXNlIG9mIGltYWdlIGRldGFpbHMgdGFibGUKKyAgICAgICAgIyB3ZSBkb24ndCBoYXZlIGEgdGFyZ2V0IGp1c3QgdGhlIHJlY2lwZSBuYW1lIGFzIHRoZSB0YXJnZXQKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsndGFyZ2V0X25hbWUnXSA9IHRhcmdldC50YXJnZXQKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsndGFyZ2V0X2lkJ10gPSB0YXJnZXQucGsKKworICAgICAgICBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhWydhZGRfbGlua3MnXSA9IFRydWUKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5tYWtlX3BhY2thZ2VfbGlzdCh0YXJnZXQpCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KHNlbGYuZGVmYXVsdF9vcmRlcmJ5KQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoSW5zdGFsbGVkUGFja2FnZXNUYWJsZSwgc2VsZikuc2V0dXBfY29sdW1ucygqKmt3YXJncykKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJJbnN0YWxsZWQgc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJpbnN0YWxsZWRfc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0ieyUgbG9hZCBwcm9qZWN0dGFncyAlfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ7e2RhdGEuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUpCisKKyAgICAgICAgIyBBZGQgdGhlIHRlbXBsYXRlIHRvIHNob3cgaW5zdGFsbGVkIG5hbWUgZm9yIGluc3RhbGxlZCBwYWNrYWdlcworICAgICAgICBpbnN0YWxsX25hbWVfdG1wbCA9XAorICAgICAgICAgICAgKCc8YSBocmVmPSJ7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsIiBleHRyYS5idWlsZC5waycKKyAgICAgICAgICAgICAnIGV4dHJhLnRhcmdldF9pZCBkYXRhLnBrICV9Ij57e2RhdGEubmFtZX19PC9hPicKKyAgICAgICAgICAgICAneyUgaWYgZGF0YS5pbnN0YWxsZWRfbmFtZSBhbmQgZGF0YS5pbnN0YWxsZWRfbmFtZSAhPScKKyAgICAgICAgICAgICAnIGRhdGEubmFtZSAlfScKKyAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPiBhcyB7e2RhdGEuaW5zdGFsbGVkX25hbWV9fTwvc3Bhbj4nCisgICAgICAgICAgICAgJyA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiJworICAgICAgICAgICAgICcgdGl0bGU9Int7ZGF0YS5uYW1lfX0gd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kJworICAgICAgICAgICAgICcgd2FzIGluc3RhbGxlZCBpbiB5b3VyIGltYWdlIGFzIHt7ZGF0YS5pbnN0YWxsZWRfbmFtZX19JworICAgICAgICAgICAgICciPjwvc3Bhbj57JSBlbmRpZiAlfSAnKQorCisgICAgICAgIGZvciBjb2x1bW4gaW4gc2VsZi5jb2x1bW5zOgorICAgICAgICAgICAgaWYgY29sdW1uWydzdGF0aWNfZGF0YV9uYW1lJ10gPT0gJ25hbWUnOgorICAgICAgICAgICAgICAgIGNvbHVtblsnc3RhdGljX2RhdGFfdGVtcGxhdGUnXSA9IGluc3RhbGxfbmFtZV90bXBsCisgICAgICAgICAgICAgICAgYnJlYWsKKworCitjbGFzcyBCdWlsdFJlY2lwZXNUYWJsZShCdWlsZFRhYmxlc01peGluKToKKyAgICAiIiIgVGFibGUgdG8gc2hvdyB0aGUgcmVjaXBlcyB0aGF0IGhhdmUgYmVlbiBidWlsdCBpbiB0aGlzIGJ1aWxkICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKEJ1aWx0UmVjaXBlc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYudGl0bGUgPSAiUmVjaXBlcyBidWlsdCIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAibmFtZSIKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWt3YXJnc1snYnVpbGRfaWQnXSkKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsnYnVpbGQnXSA9IGJ1aWxkCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBidWlsZC5nZXRfcmVjaXBlcygpCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KHNlbGYuZGVmYXVsdF9vcmRlcmJ5KQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmVjaXBlX25hbWVfdG1wbCA9XAorICAgICAgICAgICAgJzxhIGhyZWY9InslIHVybCAicmVjaXBlIiBleHRyYS5idWlsZC5wayBkYXRhLnBrICV9Ij4nXAorICAgICAgICAgICAgJ3t7ZGF0YS5uYW1lfX0nXAorICAgICAgICAgICAgJzwvYT4nCisKKyAgICAgICAgcmVjaXBlX2ZpbGVfdG1wbCA9XAorICAgICAgICAgICAgJ3t7ZGF0YS5maWxlX3BhdGh9fSdcCisgICAgICAgICAgICAneyUgaWYgZGF0YS5wYXRoZmxhZ3MgJX08aT4oe3tkYXRhLnBhdGhmbGFnc319KTwvaT4nXAorICAgICAgICAgICAgJ3slIGVuZGlmICV9JworCisgICAgICAgIGdpdF9icmFuY2hfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgeyUgaWYgZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgJX0KKyAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPk5vdCBhcHBsaWNhYmxlPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIHRpdGxlPSJUaGUgc291cmNlIGNvZGUgb2Yge3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IGlzIG5vdCBpbiBhIEdpdCByZXBvc2l0b3J5LCBzbyB0aGVyZSBpcyBubyBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIGl0Ij4gPC9zcGFuPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgIDxzcGFuPnt7ZGF0YS5sYXllcl92ZXJzaW9uLmJyYW5jaH19PC9zcGFuPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAnJycKKworICAgICAgICBnaXRfcmV2X3RlbXBsYXRlID0gJycnCisgICAgICAgIHslIGlmIGRhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5sb2NhbF9zb3VyY2VfZGlyICV9CisgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj5Ob3QgYXBwbGljYWJsZTwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiB0aXRsZT0iVGhlIHNvdXJjZSBjb2RlIG9mIHt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSBpcyBub3QgaW4gYSBHaXQgcmVwb3NpdG9yeSwgc28gdGhlcmUgaXMgbm8gY29tbWl0IGFzc29jaWF0ZWQgd2l0aCBpdCI+IDwvc3Bhbj4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICB7JSB3aXRoIHZjc19yZWY9ZGF0YS5sYXllcl92ZXJzaW9uLmNvbW1pdCAlfQorICAgICAgICB7JSBpbmNsdWRlICdzbmlwcGV0cy9naXRyZXZfcG9wb3Zlci5odG1sJyAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICcnJworCisgICAgICAgIGRlcGVuZHNfb25fdG1wbCA9ICcnJworICAgICAgICB7JSB3aXRoIGRlcHM9ZGF0YS5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsICV9CisgICAgICAgIHslIHdpdGggY291bnQ9ZGVwc3xsZW5ndGggJX0KKyAgICAgICAgeyUgaWYgY291bnQgJX0KKyAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgdGl0bGU9IgorICAgICAgICA8YSBocmVmPSd7JSB1cmwgInJlY2lwZSIgZXh0cmEuYnVpbGQucGsgZGF0YS5wayAlfSNkZXBlbmRlbmNpZXMnPgorICAgICAgICB7e2RhdGEubmFtZX19PC9hPiBkZXBlbmRlbmNpZXMiCisgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSdsaXN0LXVuc3R5bGVkJz4KKyAgICAgICAgeyUgZm9yIGRlcCBpbiBkZXBzfGRpY3Rzb3J0OiJkZXBlbmRzX29uLm5hbWUiJX0KKyAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBleHRyYS5idWlsZC5wayBkZXAuZGVwZW5kc19vbi5wayAlfSc+CisgICAgICAgIHt7ZGVwLmRlcGVuZHNfb24ubmFtZX19PC9hPjwvbGk+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L3VsPiI+CisgICAgICAgICB7e2NvdW50fX0KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfXslIGVuZHdpdGggJX17JSBlbmR3aXRoICV9CisgICAgICAgICcnJworCisgICAgICAgIHJldl9kZXBlbmRzX3RtcGwgPSAnJycKKyAgICAgICAgeyUgd2l0aCByZXZzPWRhdGEucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwgJX0KKyAgICAgICAgeyUgd2l0aCBjb3VudD1yZXZzfGxlbmd0aCAlfQorICAgICAgICB7JSBpZiBjb3VudCAlfQorICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IgorICAgICAgICB0aXRsZT0iCisgICAgICAgIDxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBleHRyYS5idWlsZC5wayBkYXRhLnBrICV9I2Jyb3VnaHQtaW4tYnknPgorICAgICAgICB7e2RhdGEubmFtZX19PC9hPiByZXZlcnNlIGRlcGVuZGVuY2llcyIKKyAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J2xpc3QtdW5zdHlsZWQnPgorICAgICAgICB7JSBmb3IgZGVwIGluIHJldnN8ZGljdHNvcnQ6InJlY2lwZS5uYW1lIiAlfQorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBleHRyYS5idWlsZC5wayBkZXAucmVjaXBlLnBrICV9Jz4KKyAgICAgICAge3tkZXAucmVjaXBlLm5hbWV9fQorICAgICAgICA8L2E+PC9saT4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvdWw+Ij4KKyAgICAgICAge3tjb3VudH19CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX17JSBlbmR3aXRoICV9eyUgZW5kd2l0aCAlfQorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9J25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPXJlY2lwZV9uYW1lX3RtcGwpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0idmVyc2lvbiIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXBlbmRlbmNpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iZGVwZW5kZW5jaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWRlcGVuZHNfb25fdG1wbCkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJldmVyc2UgZGVwZW5kZW5jaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9InJldmRlcHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9cmV2X2RlcGVuZHNfdG1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0nUmVjaXBlIGJ1aWxkLXRpbWUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMnCisgICAgICAgICAgICAgICAgICAgICAgICAnIChpLmUuIHRoZSByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoaXMgcmVjaXBlKScpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUgZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJmaWxlX3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iZmlsZV9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPXJlY2lwZV9maWxlX3RtcGwsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlNlY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ic2VjdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGljZW5zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsaWNlbnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0nTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlJworICAgICAgICAgICAgICAgICAgICAgICAgJyBwaXBlIGNoYXJhY3RlciBpbmRpY2F0ZXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4nCisgICAgICAgICAgICAgICAgICAgICAgICAnIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBhbXBlcnNhbmQnCisgICAgICAgICAgICAgICAgICAgICAgICAnIGNoYXJhY3RlciBpbmRpY2F0ZXMgbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QgdGhhdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICcgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyIGJyYW5jaCIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcl92ZXJzaW9uX19icmFuY2giLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWdpdF9icmFuY2hfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXIgY29tbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImNvbW1pdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1naXRfcmV2X3RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUpCisKKworY2xhc3MgQnVpbGRUYXNrc1RhYmxlKEJ1aWxkVGFibGVzTWl4aW4pOgorICAgICIiIiBUYWJsZSB0byBzaG93IHRoZSB0YXNrcyB0aGF0IHJ1biBpbiB0aGlzIGJ1aWxkICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKEJ1aWxkVGFza3NUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnRpdGxlID0gIlRhc2tzIgorICAgICAgICBzZWxmLmRlZmF1bHRfb3JkZXJieSA9ICJvcmRlciIKKworICAgICAgICAjIFRvZ2dsZSB0aGVzZSBjb2x1bW5zIG9uIG9mZiBmb3IgVGltZS9DUFUgdXNhZ2UvRGlzayBJL08gdGFibGVzCisgICAgICAgIHNlbGYudG9nZ2xlX2NvbHVtbnMgPSB7fQorCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQocGs9a3dhcmdzWydidWlsZF9pZCddKQorICAgICAgICBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhWydidWlsZCddID0gYnVpbGQKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IGJ1aWxkLnRhc2tfYnVpbGQuZmlsdGVyKH5RKG9yZGVyPU5vbmUpKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5vcmRlcl9ieShzZWxmLmRlZmF1bHRfb3JkZXJieSkKKworICAgIGRlZiBzZXR1cF9maWx0ZXJzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICMgRXhlY3V0aW9uIG91dGNvbWUgdHlwZXMgZmlsdGVyCisgICAgICAgIGV4ZWN1dGVkX291dGNvbWUgPSBUYWJsZUZpbHRlcihuYW1lPSJleGVjdXRpb25fb3V0Y29tZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iRmlsdGVyIFRhc2tzIGJ5ICdFeGVjdXRlZCIpCisKKyAgICAgICAgZXhlY19vdXRjb21lX2FjdGlvbl9leGVjID0gVGFibGVGaWx0ZXJBY3Rpb25Ub2dnbGUoCisgICAgICAgICAgICAiZXhlY3V0ZWQiLAorICAgICAgICAgICAgIkV4ZWN1dGVkIFRhc2tzIiwKKyAgICAgICAgICAgIFEodGFza19leGVjdXRlZD1UcnVlKSkKKworICAgICAgICBleGVjX291dGNvbWVfYWN0aW9uX25vdF9leGVjID0gVGFibGVGaWx0ZXJBY3Rpb25Ub2dnbGUoCisgICAgICAgICAgICAibm90X2V4ZWN1dGVkIiwKKyAgICAgICAgICAgICJOb3QgRXhlY3V0ZWQgVGFza3MiLAorICAgICAgICAgICAgUSh0YXNrX2V4ZWN1dGVkPUZhbHNlKSkKKworICAgICAgICBleGVjdXRlZF9vdXRjb21lLmFkZF9hY3Rpb24oZXhlY19vdXRjb21lX2FjdGlvbl9leGVjKQorICAgICAgICBleGVjdXRlZF9vdXRjb21lLmFkZF9hY3Rpb24oZXhlY19vdXRjb21lX2FjdGlvbl9ub3RfZXhlYykKKworICAgICAgICAjIFRhc2sgb3V0Y29tZSB0eXBlcyBmaWx0ZXIKKyAgICAgICAgdGFza19vdXRjb21lID0gVGFibGVGaWx0ZXIobmFtZT0idGFza19vdXRjb21lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkZpbHRlciBUYXNrIGJ5ICdPdXRjb21lJyIpCisKKyAgICAgICAgZm9yIG91dGNvbWVfZW51bSwgdGl0bGUgaW4gVGFzay5UQVNLX09VVENPTUU6CisgICAgICAgICAgICBpZiBvdXRjb21lX2VudW0gaXMgVGFzay5PVVRDT01FX05BOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhY3Rpb24gPSBUYWJsZUZpbHRlckFjdGlvblRvZ2dsZSgKKyAgICAgICAgICAgICAgICB0aXRsZS5yZXBsYWNlKCIgIiwgIl8iKS5sb3dlcigpLAorICAgICAgICAgICAgICAgICIlcyBUYXNrcyIgJSB0aXRsZSwKKyAgICAgICAgICAgICAgICBRKG91dGNvbWU9b3V0Y29tZV9lbnVtKSkKKworICAgICAgICAgICAgdGFza19vdXRjb21lLmFkZF9hY3Rpb24oYWN0aW9uKQorCisgICAgICAgICMgU1NUQVRFIG91dGNvbWUgdHlwZXMgZmlsdGVyCisgICAgICAgIHNzdGF0ZV9vdXRjb21lID0gVGFibGVGaWx0ZXIobmFtZT0ic3N0YXRlX291dGNvbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJGaWx0ZXIgVGFzayBieSAnQ2FjaGUgYXR0ZW1wdCciKQorCisgICAgICAgIGZvciBzc3RhdGVfcmVzdWx0X2VudW0sIHRpdGxlIGluIFRhc2suU1NUQVRFX1JFU1VMVDoKKyAgICAgICAgICAgIGFjdGlvbiA9IFRhYmxlRmlsdGVyQWN0aW9uVG9nZ2xlKAorICAgICAgICAgICAgICAgIHRpdGxlLnJlcGxhY2UoIiAiLCAiXyIpLmxvd2VyKCksCisgICAgICAgICAgICAgICAgIlRhc2tzIHdpdGggJyVzJyBhdHRlbXB0cyIgJSB0aXRsZSwKKyAgICAgICAgICAgICAgICBRKHNzdGF0ZV9yZXN1bHQ9c3N0YXRlX3Jlc3VsdF9lbnVtKSkKKworICAgICAgICAgICAgc3N0YXRlX291dGNvbWUuYWRkX2FjdGlvbihhY3Rpb24pCisKKyAgICAgICAgc2VsZi5hZGRfZmlsdGVyKHNzdGF0ZV9vdXRjb21lKQorICAgICAgICBzZWxmLmFkZF9maWx0ZXIoZXhlY3V0ZWRfb3V0Y29tZSkKKyAgICAgICAgc2VsZi5hZGRfZmlsdGVyKHRhc2tfb3V0Y29tZSkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYudG9nZ2xlX2NvbHVtbnNbJ29yZGVyJ10gPSBsZW4oc2VsZi5jb2x1bW5zKQorCisgICAgICAgIHJlY2lwZV9uYW1lX3RtcGwgPVwKKyAgICAgICAgICAgICc8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgZXh0cmEuYnVpbGQucGsgZGF0YS5yZWNpcGUucGsgJX0iPidcCisgICAgICAgICAgICAne3tkYXRhLnJlY2lwZS5uYW1lfX0nXAorICAgICAgICAgICAgJzwvYT4nCisKKyAgICAgICAgZGVmIHRhc2tfbGlua190bXBsKHZhbCk6CisgICAgICAgICAgICByZXR1cm4gKCc8YSBuYW1lPSJ0YXNrLXt7ZGF0YS5vcmRlcn19IicKKyAgICAgICAgICAgICAgICAgICAgJ2hyZWY9InslJSB1cmwgInRhc2siIGV4dHJhLmJ1aWxkLnBrIGRhdGEucGsgJSV9Ij4nCisgICAgICAgICAgICAgICAgICAgICclcycKKyAgICAgICAgICAgICAgICAgICAgJzwvYT4nKSAlIHN0cih2YWwpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJPcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJvcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0ne3tkYXRhLm9yZGVyfX0nLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlRhc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0idGFza19uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPXRhc2tfbGlua190bXBsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7e2RhdGEudGFza19uYW1lfX0iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ncmVjaXBlX19uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPXJlY2lwZV9uYW1lX3RtcGwsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmVjaXBlIHZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ncmVjaXBlX192ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRXhlY3V0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0idGFza19leGVjdXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0ne3tkYXRhLmdldF9leGVjdXRlZF9kaXNwbGF5fX0nLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX25hbWU9J2V4ZWN1dGlvbl9vdXRjb21lJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ09VVENPTUVfRkFJTEVEJ10gPSBUYXNrLk9VVENPTUVfRkFJTEVECisgICAgICAgIG91dGNvbWVfdG1wbCA9ICd7e2RhdGEub3V0Y29tZV90ZXh0fX0nCisgICAgICAgIG91dGNvbWVfdG1wbCA9ICgnJXMgJworICAgICAgICAgICAgICAgICAgICAgICAgJ3slJSBpZiBkYXRhLm91dGNvbWUgPSBleHRyYS5PVVRDT01FX0ZBSUxFRCAlJX0nCisgICAgICAgICAgICAgICAgICAgICAgICAnPGEgaHJlZj0ieyUlIHVybCAiYnVpbGRfYXJ0aWZhY3QiIGV4dHJhLmJ1aWxkLnBrICcKKyAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgInRhc2tsb2dmaWxlIiBkYXRhLnBrICUlfSI+JworICAgICAgICAgICAgICAgICAgICAgICAgJyA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1kb3dubG9hZC1hbHQnCisgICAgICAgICAgICAgICAgICAgICAgICAnIGdldC1oZWxwIiB0aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9zcGFuPicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8L2E+IHslJSBlbmRpZiAlJX0nCisgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbicKKyAgICAgICAgICAgICAgICAgICAgICAgICcgZ2V0LWhlbHAgaG92ZXItaGVscCIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsiICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZT0ie3tkYXRhLmdldF9vdXRjb21lX2hlbHB9fSI+PC9zcGFuPicKKyAgICAgICAgICAgICAgICAgICAgICAgICkgJSBvdXRjb21lX3RtcGwKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9Ik91dGNvbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ib3V0Y29tZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1vdXRjb21lX3RtcGwsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfbmFtZT0idGFza19vdXRjb21lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisgICAgICAgIHNlbGYudG9nZ2xlX2NvbHVtbnNbJ3NzdGF0ZV9yZXN1bHQnXSA9IGxlbihzZWxmLmNvbHVtbnMpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJDYWNoZSBhdHRlbXB0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9InNzdGF0ZV9yZXN1bHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9J3t7ZGF0YS5zc3RhdGVfdGV4dH19JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uYW1lPSJzc3RhdGVfb3V0Y29tZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSkKKworICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zWydlbGFwc2VkX3RpbWUnXSA9IGxlbihzZWxmLmNvbHVtbnMpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKAorICAgICAgICAgICAgdGl0bGU9IlRpbWUgKHNlY3MpIiwKKyAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImVsYXBzZWRfdGltZSIsCisgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0neyUgbG9hZCBwcm9qZWN0dGFncyAlfXslIGxvYWQgaHVtYW5pemUgJX0nCisgICAgICAgICAgICAne3tkYXRhLmVsYXBzZWRfdGltZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX0nLAorICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICBoaWRkZW49VHJ1ZSkKKworICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zWydjcHVfdGltZV9zeXMnXSA9IGxlbihzZWxmLmNvbHVtbnMpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKAorICAgICAgICAgICAgdGl0bGU9IlN5c3RlbSBDUFUgdGltZSAoc2VjcykiLAorICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iY3B1X3RpbWVfc3lzdGVtIiwKKyAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPSd7JSBsb2FkIHByb2plY3R0YWdzICV9eyUgbG9hZCBodW1hbml6ZSAlfScKKyAgICAgICAgICAgICd7e2RhdGEuY3B1X3RpbWVfc3lzdGVtfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fScsCisgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisgICAgICAgIHNlbGYudG9nZ2xlX2NvbHVtbnNbJ2NwdV90aW1lX3VzZXInXSA9IGxlbihzZWxmLmNvbHVtbnMpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKAorICAgICAgICAgICAgdGl0bGU9IlVzZXIgQ1BVIHRpbWUgKHNlY3MpIiwKKyAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImNwdV90aW1lX3VzZXIiLAorICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9J3slIGxvYWQgcHJvamVjdHRhZ3MgJX17JSBsb2FkIGh1bWFuaXplICV9JworICAgICAgICAgICAgJ3t7ZGF0YS5jcHVfdGltZV91c2VyfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fScsCisgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisgICAgICAgIHNlbGYudG9nZ2xlX2NvbHVtbnNbJ2Rpc2tfaW8nXSA9IGxlbihzZWxmLmNvbHVtbnMpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKAorICAgICAgICAgICAgdGl0bGU9IkRpc2sgSS9PIChtcykiLAorICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iZGlza19pbyIsCisgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0neyUgbG9hZCBwcm9qZWN0dGFncyAlfXslIGxvYWQgaHVtYW5pemUgJX0nCisgICAgICAgICAgICAne3tkYXRhLmRpc2tfaW98Zm9ybWF0X25vbmVfYW5kX3plcm98ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fScsCisgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisKK2NsYXNzIEJ1aWxkVGltZVRhYmxlKEJ1aWxkVGFza3NUYWJsZSk6CisgICAgIiIiIFNhbWUgYXMgdGFza3MgdGFibGUgYnV0IHRoZSBUaW1lIGNvbHVtbiBpcyBkZWZhdWx0IGRpc3BsYXllZCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKEJ1aWxkVGltZVRhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIi1lbGFwc2VkX3RpbWUiCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsZFRpbWVUYWJsZSwgc2VsZikuc2V0dXBfY29sdW1ucygqKmt3YXJncykKKworICAgICAgICBzZWxmLmNvbHVtbnNbc2VsZi50b2dnbGVfY29sdW1uc1snb3JkZXInXV1bJ2hpZGRlbiddID0gVHJ1ZQorICAgICAgICBzZWxmLmNvbHVtbnNbc2VsZi50b2dnbGVfY29sdW1uc1snc3N0YXRlX3Jlc3VsdCddXVsnaGlkZGVuJ10gPSBUcnVlCisgICAgICAgIHNlbGYuY29sdW1uc1tzZWxmLnRvZ2dsZV9jb2x1bW5zWydlbGFwc2VkX3RpbWUnXV1bJ2hpZGRlbiddID0gRmFsc2UKKworCitjbGFzcyBCdWlsZENQVVRpbWVUYWJsZShCdWlsZFRhc2tzVGFibGUpOgorICAgICIiIiBTYW1lIGFzIHRhc2tzIHRhYmxlIGJ1dCB0aGUgQ1BVIHVzYWdlIGNvbHVtbnMgYXJlIGRlZmF1bHQgZGlzcGxheWVkIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoQnVpbGRDUFVUaW1lVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAiLWNwdV90aW1lX3N5c3RlbSIKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKEJ1aWxkQ1BVVGltZVRhYmxlLCBzZWxmKS5zZXR1cF9jb2x1bW5zKCoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuY29sdW1uc1tzZWxmLnRvZ2dsZV9jb2x1bW5zWydvcmRlciddXVsnaGlkZGVuJ10gPSBUcnVlCisgICAgICAgIHNlbGYuY29sdW1uc1tzZWxmLnRvZ2dsZV9jb2x1bW5zWydzc3RhdGVfcmVzdWx0J11dWydoaWRkZW4nXSA9IFRydWUKKyAgICAgICAgc2VsZi5jb2x1bW5zW3NlbGYudG9nZ2xlX2NvbHVtbnNbJ2NwdV90aW1lX3N5cyddXVsnaGlkZGVuJ10gPSBGYWxzZQorICAgICAgICBzZWxmLmNvbHVtbnNbc2VsZi50b2dnbGVfY29sdW1uc1snY3B1X3RpbWVfdXNlciddXVsnaGlkZGVuJ10gPSBGYWxzZQorCisKK2NsYXNzIEJ1aWxkSU9UYWJsZShCdWlsZFRhc2tzVGFibGUpOgorICAgICIiIiBTYW1lIGFzIHRhc2tzIHRhYmxlIGJ1dCB0aGUgRGlzayBJTyBjb2x1bW4gaXMgZGVmYXVsdCBkaXNwbGF5ZWQiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsZElPVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAiLWRpc2tfaW8iCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsZElPVGFibGUsIHNlbGYpLnNldHVwX2NvbHVtbnMoKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5jb2x1bW5zW3NlbGYudG9nZ2xlX2NvbHVtbnNbJ29yZGVyJ11dWydoaWRkZW4nXSA9IFRydWUKKyAgICAgICAgc2VsZi5jb2x1bW5zW3NlbGYudG9nZ2xlX2NvbHVtbnNbJ3NzdGF0ZV9yZXN1bHQnXV1bJ2hpZGRlbiddID0gVHJ1ZQorICAgICAgICBzZWxmLmNvbHVtbnNbc2VsZi50b2dnbGVfY29sdW1uc1snZGlza19pbyddXVsnaGlkZGVuJ10gPSBGYWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9maXh0dXJlcy90b2FzdGVyZ3VpLXVuaXR0ZXN0LWRhdGEueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9maXh0dXJlcy90b2FzdGVyZ3VpLXVuaXR0ZXN0LWRhdGEueG1sCmluZGV4IGNmMzViZTQuLjQ1MTdlZDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvZml4dHVyZXMvdG9hc3Rlcmd1aS11bml0dGVzdC1kYXRhLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL2ZpeHR1cmVzL3RvYXN0ZXJndWktdW5pdHRlc3QtZGF0YS54bWwKQEAgLTEsNSArMSwxNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxkamFuZ28tb2JqZWN0cyB2ZXJzaW9uPSIxLjAiPgorICAgPG9iamVjdCBwaz0iMSIgbW9kZWw9Im9ybS5iaXRiYWtldmVyc2lvbiI+CisgICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj52Mi4zPC9maWVsZD4KKyAgICAgIDxmaWVsZCB0eXBlPSJHaXRVUkxGaWVsZCIgbmFtZT0iZ2l0dXJsIj5naXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlPC9maWVsZD4KKyAgICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRpcnBhdGgiPmI8L2ZpZWxkPgorICAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIj5hPC9maWVsZD4KKyAgPC9vYmplY3Q+CisgIDxvYmplY3QgcGs9IjEiIG1vZGVsPSJvcm0ucmVsZWFzZSI+CisgICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPm1hc3RlcjwvZmllbGQ+CisgICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRlc2NyaXB0aW9uIj5tYXN0ZXIgcHJvamVjdDwvZmllbGQ+CisgICAgIDxmaWVsZCB0bz0ib3JtLmJpdGJha2VfdmVyc2lvbiIgbmFtZT0iYml0YmFrZV92ZXJzaW9uIj4xPC9maWVsZD4KKyAgPC9vYmplY3Q+CiAgIDxvYmplY3QgcGs9IjEiIG1vZGVsPSJvcm0ucHJvamVjdCI+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+YSB0ZXN0IHByb2plY3Q8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InNob3J0X2Rlc2NyaXB0aW9uIj48L2ZpZWxkPgpAQCAtODIsOSArOTMsOCBAQAogICAgIDxmaWVsZCB0bz0ib3JtLmJ1aWxkIiBuYW1lPSJidWlsZCIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InRhcmdldCI+YSBpbWFnZSByZWNpcGU8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InRhc2siPjxOb25lPjwvTm9uZT48L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJCb29sZWFuRmllbGQiIG5hbWU9ImlzX2ltYWdlIj5GYWxzZTwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0iaW1hZ2Vfc2l6ZSI+MDwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibGljZW5zZV9tYW5pZmVzdF9wYXRoIj48Tm9uZT48L05vbmU+PC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQm9vbGVhbkZpZWxkIiBuYW1lPSJpc19pbWFnZSI+VHJ1ZTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0iaW1hZ2Vfc2l6ZSI+MjkwPC9maWVsZD4KICAgPC9vYmplY3Q+CiAgIDxvYmplY3QgcGs9IjIiIG1vZGVsPSJvcm0udGFyZ2V0Ij4KICAgICA8ZmllbGQgdG89Im9ybS5idWlsZCIgbmFtZT0iYnVpbGQiIHJlbD0iTWFueVRvT25lUmVsIj4yPC9maWVsZD4KQEAgLTExOCw5ICsxMjgsOSBAQAogICA8L29iamVjdD4KICAgPG9iamVjdCBwaz0iMiIgbW9kZWw9Im9ybS5wYWNrYWdlIj4KICAgICA8ZmllbGQgdG89Im9ybS5idWlsZCIgbmFtZT0iYnVpbGQiIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KLSAgICA8ZmllbGQgdG89Im9ybS5yZWNpcGUiIG5hbWU9InJlY2lwZSIgcmVsPSJNYW55VG9PbmVSZWwiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0bz0ib3JtLnJlY2lwZSIgbmFtZT0icmVjaXBlIiByZWw9Ik1hbnlUb09uZVJlbCI+MTwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+ZiBwa2c8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Imluc3RhbGxlZF9uYW1lIj48L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Imluc3RhbGxlZF9uYW1lIj5mPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2ZXJzaW9uIj48L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InJldmlzaW9uIj48L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJUZXh0RmllbGQiIG5hbWU9InN1bW1hcnkiPjwvZmllbGQ+CkBAIC0xOTYsOCArMjA2LDYgQEAKICAgICA8ZmllbGQgdG89Im9ybS5jdXN0b21pbWFnZXJlY2lwZSIgbmFtZT0icmVjaXBlX2FwcGVuZHMiIHJlbD0iTWFueVRvTWFueVJlbCI+PG9iamVjdCBwaz0iMyI+PC9vYmplY3Q+PC9maWVsZD4KICAgPC9vYmplY3Q+CiAgIDxvYmplY3QgcGs9IjEiIG1vZGVsPSJvcm0ucmVjaXBlIj4KLSAgICA8ZmllbGQgdG89Im9ybS5sYXllcnNvdXJjZSIgbmFtZT0ibGF5ZXJfc291cmNlIiByZWw9Ik1hbnlUb09uZVJlbCI+MTwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0idXBfaWQiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJEYXRlVGltZUZpZWxkIiBuYW1lPSJ1cF9kYXRlIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj56IHJlY2lwZTwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmVyc2lvbiI+NS4yPC9maWVsZD4KQEAgLTIxMyw4ICsyMjEsNiBAQAogICAgIDxmaWVsZCB0eXBlPSJCb29sZWFuRmllbGQiIG5hbWU9ImlzX2ltYWdlIj5GYWxzZTwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IHBrPSIyIiBtb2RlbD0ib3JtLnJlY2lwZSI+Ci0gICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJzb3VyY2UiIG5hbWU9ImxheWVyX3NvdXJjZSIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InVwX2lkIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+YSByZWNpcGU8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZlcnNpb24iPjEuMjwvZmllbGQ+CkBAIC0yMzAsOCArMjM2LDYgQEAKICAgICA8ZmllbGQgdHlwZT0iQm9vbGVhbkZpZWxkIiBuYW1lPSJpc19pbWFnZSI+RmFsc2U8L2ZpZWxkPgogICA8L29iamVjdD4KICAgPG9iamVjdCBwaz0iMyIgbW9kZWw9Im9ybS5yZWNpcGUiPgotICAgIDxmaWVsZCB0bz0ib3JtLmxheWVyc291cmNlIiBuYW1lPSJsYXllcl9zb3VyY2UiIHJlbD0iTWFueVRvT25lUmVsIj48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJ1cF9pZCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkRhdGVUaW1lRmllbGQiIG5hbWU9InVwX2RhdGUiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPmEgY3VzdG9tIHJlY2lwZTwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmVyc2lvbiI+PC9maWVsZD4KQEAgLTI0Nyw4ICsyNTEsNiBAQAogICAgIDxmaWVsZCB0eXBlPSJCb29sZWFuRmllbGQiIG5hbWU9ImlzX2ltYWdlIj5GYWxzZTwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IHBrPSI0IiBtb2RlbD0ib3JtLnJlY2lwZSI+Ci0gICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJzb3VyY2UiIG5hbWU9ImxheWVyX3NvdXJjZSIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InVwX2lkIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+YSBpbWFnZSByZWNpcGU8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZlcnNpb24iPjEuMjwvZmllbGQ+CkBAIC0yNjQsOCArMjY2LDYgQEAKICAgICA8ZmllbGQgdHlwZT0iQm9vbGVhbkZpZWxkIiBuYW1lPSJpc19pbWFnZSI+VHJ1ZTwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IHBrPSI1IiBtb2RlbD0ib3JtLnJlY2lwZSI+Ci0gICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJzb3VyY2UiIG5hbWU9ImxheWVyX3NvdXJjZSIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InVwX2lkIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+eiBpbWFnZSByZWNpcGU8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZlcnNpb24iPjEuMzwvZmllbGQ+CkBAIC0yODEsOCArMjgxLDYgQEAKICAgICA8ZmllbGQgdHlwZT0iQm9vbGVhbkZpZWxkIiBuYW1lPSJpc19pbWFnZSI+VHJ1ZTwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IHBrPSI2IiBtb2RlbD0ib3JtLnJlY2lwZSI+Ci0gICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJzb3VyY2UiIG5hbWU9ImxheWVyX3NvdXJjZSIgcmVsPSJNYW55VG9PbmVSZWwiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InVwX2lkIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+eiBjdXN0b20gcmVjaXBlPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2ZXJzaW9uIj48L2ZpZWxkPgpAQCAtMjk3LDM1ICsyOTUsMzQgQEAKICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJwYXRoZmxhZ3MiPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkJvb2xlYW5GaWVsZCIgbmFtZT0iaXNfaW1hZ2UiPkZhbHNlPC9maWVsZD4KICAgPC9vYmplY3Q+CisgIDwhLS0gQWRkZWQgZm9yIGFuIGFkZGl0aW9uYWwgYnVpbHQgcmVjaXBlIC0tPgorICA8b2JqZWN0IHBrPSI2IiBtb2RlbD0ib3JtLnJlY2lwZSI+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+ZyByZWNpcGU8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZlcnNpb24iPjEuMi4zPC9maWVsZD4KKyAgICA8ZmllbGQgdG89Im9ybS5sYXllcl92ZXJzaW9uIiBuYW1lPSJsYXllcl92ZXJzaW9uIiByZWw9Ik1hbnlUb09uZVJlbCI+MzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibGljZW5zZSI+ZyBsaWNlbnNlPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iRmlsZVBhdGhGaWVsZCIgbmFtZT0iZmlsZV9wYXRoIj4vZzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkJvb2xlYW5GaWVsZCIgbmFtZT0iaXNfaW1hZ2UiPkZhbHNlPC9maWVsZD4KKyAgPC9vYmplY3Q+CisKICAgPG9iamVjdCBwaz0iMSIgbW9kZWw9Im9ybS5tYWNoaW5lIj4KLSAgICA8ZmllbGQgdG89Im9ybS5sYXllcnNvdXJjZSIgbmFtZT0ibGF5ZXJfc291cmNlIiByZWw9Ik1hbnlUb09uZVJlbCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0idXBfaWQiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJEYXRlVGltZUZpZWxkIiBuYW1lPSJ1cF9kYXRlIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdG89Im9ybS5sYXllcl92ZXJzaW9uIiBuYW1lPSJsYXllcl92ZXJzaW9uIiByZWw9Ik1hbnlUb09uZVJlbCI+MTwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+YSBtYWNoaW5lPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkZXNjcmlwdGlvbiI+YSBtYWNoaW5lPC9maWVsZD4KICAgPC9vYmplY3Q+CiAgIDxvYmplY3QgcGs9IjIiIG1vZGVsPSJvcm0ubWFjaGluZSI+Ci0gICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJzb3VyY2UiIG5hbWU9ImxheWVyX3NvdXJjZSIgcmVsPSJNYW55VG9PbmVSZWwiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InVwX2lkIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJfdmVyc2lvbiIgbmFtZT0ibGF5ZXJfdmVyc2lvbiIgcmVsPSJNYW55VG9PbmVSZWwiPjI8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPnogbWFjaGluZTwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGVzY3JpcHRpb24iPnogbWFjaGluZTwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IHBrPSIzIiBtb2RlbD0ib3JtLm1hY2hpbmUiPgotICAgIDxmaWVsZCB0bz0ib3JtLmxheWVyc291cmNlIiBuYW1lPSJsYXllcl9zb3VyY2UiIHJlbD0iTWFueVRvT25lUmVsIj48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJ1cF9pZCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkRhdGVUaW1lRmllbGQiIG5hbWU9InVwX2RhdGUiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgogICAgIDxmaWVsZCB0bz0ib3JtLmxheWVyX3ZlcnNpb24iIG5hbWU9ImxheWVyX3ZlcnNpb24iIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5nIG1hY2hpbmU8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRlc2NyaXB0aW9uIj5nIG1hY2hpbmU8L2ZpZWxkPgogICA8L29iamVjdD4KLSAgPG9iamVjdCBwaz0iMSIgbW9kZWw9Im9ybS5sYXllcnNvdXJjZSI+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+bG9jYWw8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InNvdXJjZXR5cGUiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImFwaXVybCI+PC9maWVsZD4KLSAgPC9vYmplY3Q+CiAgIDxvYmplY3QgcGs9IjEiIG1vZGVsPSJvcm0uYml0YmFrZXZlcnNpb24iPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPnRlc3QgYmJ2PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJnaXR1cmwiPi90bXAvPC9maWVsZD4KQEAgLTM0Niw1MyArMzQzLDI0IEBACiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoX25hbWUiPm1hc3RlcjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IlRleHRGaWVsZCIgbmFtZT0iaGVscHRleHQiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgogICA8L29iamVjdD4KLSAgPG9iamVjdCBwaz0iMSIgbW9kZWw9Im9ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSI+Ci0gICAgPGZpZWxkIHRvPSJvcm0ucmVsZWFzZSIgbmFtZT0icmVsZWFzZSIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0bz0ib3JtLmxheWVyc291cmNlIiBuYW1lPSJsYXllcl9zb3VyY2UiIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJwcmlvcml0eSI+MDwvZmllbGQ+Ci0gIDwvb2JqZWN0PgotICA8b2JqZWN0IHBrPSIxIiBtb2RlbD0ib3JtLmJyYW5jaCI+Ci0gICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJzb3VyY2UiIG5hbWU9ImxheWVyX3NvdXJjZSIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InVwX2lkIj48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+bWFzdGVyPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJzaG9ydF9kZXNjcmlwdGlvbiI+PC9maWVsZD4KLSAgPC9vYmplY3Q+CiAgIDxvYmplY3QgcGs9IjEiIG1vZGVsPSJvcm0ubGF5ZXIiPgotICAgIDxmaWVsZCB0bz0ib3JtLmxheWVyc291cmNlIiBuYW1lPSJsYXllcl9zb3VyY2UiIHJlbD0iTWFueVRvT25lUmVsIj48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJ1cF9pZCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkRhdGVUaW1lRmllbGQiIG5hbWU9InVwX2RhdGUiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPmEgbGF5ZXI8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImxheWVyX2luZGV4X3VybCI+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2Y3NfdXJsIj4vdG1wLzwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3dlYl91cmwiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZjc193ZWJfdHJlZV9iYXNlX3VybCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3dlYl9maWxlX2Jhc2VfdXJsIj48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJzdW1tYXJ5Ij48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJkZXNjcmlwdGlvbiI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IHBrPSIyIiBtb2RlbD0ib3JtLmxheWVyIj4KLSAgICA8ZmllbGQgdG89Im9ybS5sYXllcnNvdXJjZSIgbmFtZT0ibGF5ZXJfc291cmNlIiByZWw9Ik1hbnlUb09uZVJlbCI+MTwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0idXBfaWQiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJEYXRlVGltZUZpZWxkIiBuYW1lPSJ1cF9kYXRlIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj56IGxheWVyPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJsYXllcl9pbmRleF91cmwiPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3VybCI+Z2l0Oi8vdHdvLzwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3dlYl91cmwiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZjc193ZWJfdHJlZV9iYXNlX3VybCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3dlYl9maWxlX2Jhc2VfdXJsIj48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJzdW1tYXJ5Ij48Tm9uZT48L05vbmU+PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJkZXNjcmlwdGlvbiI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IHBrPSIxIiBtb2RlbD0ib3JtLmxheWVyX3ZlcnNpb24iPgotICAgIDxmaWVsZCB0bz0ib3JtLmJ1aWxkIiBuYW1lPSJidWlsZCIgcmVsPSJNYW55VG9PbmVSZWwiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgorICAgIDxmaWVsZCB0bz0ib3JtLmJ1aWxkIiBuYW1lPSJidWlsZCIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgogICAgIDxmaWVsZCB0bz0ib3JtLmxheWVyIiBuYW1lPSJsYXllciIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0bz0ib3JtLmxheWVyc291cmNlIiBuYW1lPSJsYXllcl9zb3VyY2UiIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJ1cF9pZCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkRhdGVUaW1lRmllbGQiIG5hbWU9InVwX2RhdGUiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgotICAgIDxmaWVsZCB0bz0ib3JtLmJyYW5jaCIgbmFtZT0idXBfYnJhbmNoIiByZWw9Ik1hbnlUb09uZVJlbCI+MTwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIj48L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImNvbW1pdCI+bWFzdGVyPC9maWVsZD4KKyAgICA8ZmllbGQgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIiByZWw9Ik1hbnlUb09uZVJlbCI+MTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIj5tYXN0ZXI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImNvbW1pdCI+YWJjZGVmMTIzPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIj4vdG1wLzwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0icHJpb3JpdHkiPjA8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJGaWxlUGF0aEZpZWxkIiBuYW1lPSJsb2NhbF9wYXRoIj4vPC9maWVsZD4KQEAgLTQwMSwxMiArMzY5LDIyIEBACiAgIDxvYmplY3QgcGs9IjIiIG1vZGVsPSJvcm0ubGF5ZXJfdmVyc2lvbiI+CiAgICAgPGZpZWxkIHRvPSJvcm0uYnVpbGQiIG5hbWU9ImJ1aWxkIiByZWw9Ik1hbnlUb09uZVJlbCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXIiIG5hbWU9ImxheWVyIiByZWw9Ik1hbnlUb09uZVJlbCI+MjwvZmllbGQ+Ci0gICAgPGZpZWxkIHRvPSJvcm0ubGF5ZXJzb3VyY2UiIG5hbWU9ImxheWVyX3NvdXJjZSIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InVwX2lkIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+Ci0gICAgPGZpZWxkIHRvPSJvcm0uYnJhbmNoIiBuYW1lPSJ1cF9icmFuY2giIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPjwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iY29tbWl0Ij5tYXN0ZXI8L2ZpZWxkPgorICAgIDxmaWVsZCB0bz0ib3JtLnJlbGVhc2UiIG5hbWU9InJlbGVhc2UiIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPnRlc3RpbmctYnJhbmNoPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJjb21taXQiPjk4NzZmZWRjYmE8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRpcnBhdGgiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InByaW9yaXR5Ij4wPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iRmlsZVBhdGhGaWVsZCIgbmFtZT0ibG9jYWxfcGF0aCI+LzwvZmllbGQ+CisgICAgPGZpZWxkIHRvPSJvcm0ucHJvamVjdCIgbmFtZT0icHJvamVjdCIgcmVsPSJNYW55VG9PbmVSZWwiPjxOb25lPjwvTm9uZT48L2ZpZWxkPgorICA8L29iamVjdD4KKyAgPG9iamVjdCBwaz0iMyIgbW9kZWw9Im9ybS5sYXllcl92ZXJzaW9uIj4KKyAgICA8ZmllbGQgdG89Im9ybS5idWlsZCIgbmFtZT0iYnVpbGQiIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KKyAgICA8ZmllbGQgdG89Im9ybS5sYXllciIgbmFtZT0ibGF5ZXIiIHJlbD0iTWFueVRvT25lUmVsIj4yPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iRGF0ZVRpbWVGaWVsZCIgbmFtZT0idXBfZGF0ZSI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CisgICAgPGZpZWxkIHRvPSJvcm0ucmVsZWFzZSIgbmFtZT0icmVsZWFzZSIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCI+dGVzdGluZy1icmFuY2g8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImNvbW1pdCI+OTg3NmZlZGNiYTwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGlycGF0aCI+PE5vbmU+PC9Ob25lPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0icHJpb3JpdHkiPjA8L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJGaWxlUGF0aEZpZWxkIiBuYW1lPSJsb2NhbF9wYXRoIj4vPC9maWVsZD4KQEAgLTQ0Myw0ICs0MjEsMzkgQEAKICAgICA8ZmllbGQgdHlwZT0iRmlsZVBhdGhGaWVsZCIgbmFtZT0icGF0aG5hbWUiPjwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0ibGluZW5vIj48Tm9uZT48L05vbmU+PC9maWVsZD4KICAgPC9vYmplY3Q+CisgIDwhLS0gU29tZSB0YXNrcyBmb3IgYnVpbGQgMSB0byB0ZXN0IGJ1aWxkIHRhYmxlcyAtLT4KKyAgPG9iamVjdCBwaz0iMSIgbW9kZWw9Im9ybS50YXNrIj4KKyAgICA8ZmllbGQgdG89Im9ybS5idWlsZCIgbmFtZT0iYnVpbGQiIHJlbD0iTWFueVRvT25lUmVsIj4xPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJvcmRlciI+MTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkJvb2xlYW5GaWVsZCIgbmFtZT0idGFza19leGVjdXRlZCI+RmFsc2U8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9Im91dGNvbWUiPi0xPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJzc3RhdGVfY2hlY2tzdW0iPmFiY2RlZjEyMzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkZpbGVQYXRoRmllbGQiIG5hbWU9InBhdGhfdG9fc3N0YXRlX29iaiI+MzQvd2Vmdy50YXI8L2ZpZWxkPgorICAgIDxmaWVsZCB0bz0ib3JtLnJlY2lwZSIgbmFtZT0icmVjaXBlIiByZWw9Ik1hbnlUb09uZVJlbCI+MTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idGFza19uYW1lIj5hX2RvX2NvbXBpbGU8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJEZWNpbWFsRmllbGQiIG5hbWU9ImVsYXBzZWRfdGltZSI+MTAwPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJkaXNrX2lvIj4xMDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0iZGlza19pb19yZWFkIj4xMTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0iZGlza19pb193cml0ZSI+MTI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJEZWNpbWFsRmllbGQiIG5hbWU9ImNwdV90aW1lX3VzZXIiPjEwLjE8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJEZWNpbWFsRmllbGQiIG5hbWU9ImNwdV90aW1lX3N5c3RlbSI+MTAuMjwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0ic3N0YXRlX3Jlc3VsdCI+MzwvZmllbGQ+CisgIDwvb2JqZWN0PgorICA8b2JqZWN0IHBrPSIyIiBtb2RlbD0ib3JtLnRhc2siPgorICAgIDxmaWVsZCB0bz0ib3JtLmJ1aWxkIiBuYW1lPSJidWlsZCIgcmVsPSJNYW55VG9PbmVSZWwiPjE8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9Im9yZGVyIj4yPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQm9vbGVhbkZpZWxkIiBuYW1lPSJ0YXNrX2V4ZWN1dGVkIj5UcnVlPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJvdXRjb21lIj4yPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJzc3RhdGVfY2hlY2tzdW0iPjg1YmNjYjc4MDJmZDVmNDg8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJGaWxlUGF0aEZpZWxkIiBuYW1lPSJwYXRoX3RvX3NzdGF0ZV9vYmoiPjg1L3NzdGFycG0udGd6PC9maWVsZD4KKyAgICA8ZmllbGQgdG89Im9ybS5yZWNpcGUiIG5hbWU9InJlY2lwZSIgcmVsPSJNYW55VG9PbmVSZWwiPjI8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InRhc2tfbmFtZSI+el9kb19wYWNrYWdlX3dyaXRlX3JwbTwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkRlY2ltYWxGaWVsZCIgbmFtZT0iZWxhcHNlZF90aW1lIj4yNDU8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9ImRpc2tfaW8iPjEyNDI0PC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJkaXNrX2lvX3JlYWQiPjIzNDIzPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJkaXNrX2lvX3dyaXRlIj44Mzk0MzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkRlY2ltYWxGaWVsZCIgbmFtZT0iY3B1X3RpbWVfdXNlciI+MjAzOTQuMzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkRlY2ltYWxGaWVsZCIgbmFtZT0iY3B1X3RpbWVfc3lzdGVtIj41MzYzLjM8L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJJbnRlZ2VyRmllbGQiIG5hbWU9InNzdGF0ZV9yZXN1bHQiPjE8L2ZpZWxkPgorICA8L29iamVjdD4KIDwvZGphbmdvLW9iamVjdHM+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUubWluLmNzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwNTk3ODYwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0vKiEKLSAqIEJvb3RzdHJhcCBSZXNwb25zaXZlIHYyLjMuMAotICoKLSAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYwotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KLSAqLy5jbGVhcmZpeHsqem9vbToxfS5jbGVhcmZpeDpiZWZvcmUsLmNsZWFyZml4OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS5oaWRlLXRleHR7Zm9udDowLzAgYTtjb2xvcjp0cmFuc3BhcmVudDt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LmlucHV0LWJsb2NrLWxldmVse2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fUAtbXMtdmlld3BvcnR7d2lkdGg6ZGV2aWNlLXdpZHRofS5oaWRkZW57ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxlLXBob25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk3OXB4KXsuaGlkZGVuLWRlc2t0b3B7ZGlzcGxheTppbmhlcml0IWltcG9ydGFudH0udmlzaWJsZS1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi10YWJsZXR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXBob25le2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0udmlzaWJsZS1wcmludHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsudmlzaWJsZS1wcmludHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5yb3d7bWFyZ2luLWxlZnQ6LTMwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDozMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjExNzBweH0uc3BhbjEye3dpZHRoOjExNzBweH0uc3BhbjExe3dpZHRoOjEwNzBweH0uc3BhbjEwe3dpZHRoOjk3MHB4fS5zcGFuOXt3aWR0aDo4NzBweH0uc3Bhbjh7d2lkdGg6NzcwcHh9LnNwYW43e3dpZHRoOjY3MHB4fS5zcGFuNnt3aWR0aDo1NzBweH0uc3BhbjV7d2lkdGg6NDcwcHh9LnNwYW40e3dpZHRoOjM3MHB4fS5zcGFuM3t3aWR0aDoyNzBweH0uc3BhbjJ7d2lkdGg6MTcwcHh9LnNwYW4xe3dpZHRoOjcwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0OjEyMzBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6MTEzMHB4fS5vZmZzZXQxMHttYXJnaW4tbGVmdDoxMDMwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6OTMwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6ODMwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NzMwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NjMwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NTMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6NDMwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MjMwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTMwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuNTY0MTAyNTY0MTAyNTY0JTsqbWFyZ2luLWxlZnQ6Mi41MTA5MTEwNzQ3NDA4NjE2JTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjU2NDEwMjU2NDEwMjU2NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDUyOTkxNDUyOTkxNDUlOyp3aWR0aDo5MS4zOTk3OTk5NjM2Mjk3NSV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjkwNTk4MjkwNTk4MjkxJTsqd2lkdGg6ODIuODUyNzkxNDE2NjIxMiV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuMzU4OTc0MzU4OTc0MzYlOyp3aWR0aDo3NC4zMDU3ODI4Njk2MTI2NiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuODExOTY1ODExOTY1ODIlOyp3aWR0aDo2NS43NTg3NzQzMjI2MDQxMSV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuMjY0OTU3MjY0OTU3MjYlOyp3aWR0aDo1Ny4yMTE3NjU3NzU1OTU1NiV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguNzE3OTQ4NzE3OTQ4NzE1JTsqd2lkdGg6NDguNjY0NzU3MjI4NTg3MDE0JX0ucm93LWZsdWlkIC5zcGFuNXt3aWR0aDo0MC4xNzA5NDAxNzA5NDAxNyU7KndpZHRoOjQwLjExNzc0ODY4MTU3ODQ3JX0ucm93LWZsdWlkIC5zcGFuNHt3aWR0aDozMS42MjM5MzE2MjM5MzE2MjUlOyp3aWR0aDozMS41NzA3NDAxMzQ1Njk5MjQlfS5yb3ctZmx1aWQgLnNwYW4ze3dpZHRoOjIzLjA3NjkyMzA3NjkyMzA3NyU7KndpZHRoOjIzLjAyMzczMTU4NzU2MTM3NSV9LnJvdy1mbHVpZCAuc3BhbjJ7d2lkdGg6MTQuNTI5OTE0NTI5OTE0NTMlOyp3aWR0aDoxNC40NzY3MjMwNDA1NTI4MjglfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjUuOTgyOTA1OTgyOTA1OTgzJTsqd2lkdGg6NS45Mjk3MTQ0OTM1NDQyODElfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNS4xMjgyMDUxMjgyMDUxMiU7Km1hcmdpbi1sZWZ0OjEwNS4wMjE4MjIxNDk0ODE3MSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjU2NDEwMjU2NDEwMjU3JTsqbWFyZ2luLWxlZnQ6MTAyLjQ1NzcxOTU4NTM3OTE1JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni41ODExOTY1ODExOTY1OCU7Km1hcmdpbi1sZWZ0Ojk2LjQ3NDgxMzYwMjQ3MzE2JX0ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo5NC4wMTcwOTQwMTcwOTQwMiU7Km1hcmdpbi1sZWZ0OjkzLjkxMDcxMTAzODM3MDYxJX0ucm93LWZsdWlkIC5vZmZzZXQxMHttYXJnaW4tbGVmdDo4OC4wMzQxODgwMzQxODgwMyU7Km1hcmdpbi1sZWZ0Ojg3LjkyNzgwNTA1NTQ2NDYyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS40NzAwODU0NzAwODU0OCU7Km1hcmdpbi1sZWZ0Ojg1LjM2MzcwMjQ5MTM2MjA2JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc5LjQ4NzE3OTQ4NzE3OTQ5JTsqbWFyZ2luLWxlZnQ6NzkuMzgwNzk2NTA4NDU2MDclfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuOTIzMDc2OTIzMDc2OTMlOyptYXJnaW4tbGVmdDo3Ni44MTY2OTM5NDQzNTM1MiV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC45NDAxNzA5NDAxNzA5NCU7Km1hcmdpbi1sZWZ0OjcwLjgzMzc4Nzk2MTQ0NzUzJX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjM3NjA2ODM3NjA2ODM5JTsqbWFyZ2luLWxlZnQ6NjguMjY5Njg1Mzk3MzQ0OTclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuMzkzMTYyMzkzMTYyMzg1JTsqbWFyZ2luLWxlZnQ6NjIuMjg2Nzc5NDE0NDM4OTklfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuODI5MDU5ODI5MDU5ODIlOyptYXJnaW4tbGVmdDo1OS43MjI2NzY4NTAzMzY0MiV9LnJvdy1mbHVpZCAub2Zmc2V0NnttYXJnaW4tbGVmdDo1My44NDYxNTM4NDYxNTM4NCU7Km1hcmdpbi1sZWZ0OjUzLjczOTc3MDg2NzQzMDQ0NCV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4yODIwNTEyODIwNTEyOCU7Km1hcmdpbi1sZWZ0OjUxLjE3NTY2ODMwMzMyNzg3NSV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS4yOTkxNDUyOTkxNDUyOTUlOyptYXJnaW4tbGVmdDo0NS4xOTI3NjIzMjA0MjE5JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjczNTA0MjczNTA0MjczJTsqbWFyZ2luLWxlZnQ6NDIuNjI4NjU5NzU2MzE5MzMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuNzUyMTM2NzUyMTM2NzUlOyptYXJnaW4tbGVmdDozNi42NDU3NTM3NzM0MTMzNTQlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMTg4MDM0MTg4MDM0MTklOyptYXJnaW4tbGVmdDozNC4wODE2NTEyMDkzMTA3ODUlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjguMjA1MTI4MjA1MTI4MjA0JTsqbWFyZ2luLWxlZnQ6MjguMDk4NzQ1MjI2NDA0OCV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS42NDEwMjU2NDEwMjU2NDIlOyptYXJnaW4tbGVmdDoyNS41MzQ2NDI2NjIzMDIyNCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS42NTgxMTk2NTgxMTk2NiU7Km1hcmdpbi1sZWZ0OjE5LjU1MTczNjY3OTM5NjI1NyV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wOTQwMTcwOTQwMTcwOTQlOyptYXJnaW4tbGVmdDoxNi45ODc2MzQxMTUyOTM2OSV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMS4xMTExMTExMTExMTExMSU7Km1hcmdpbi1sZWZ0OjExLjAwNDcyODEzMjM4NzcwOCV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjU0NzAwODU0NzAwODU0NyU7Km1hcmdpbi1sZWZ0OjguNDQwNjI1NTY4Mjg1MTQyJX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDozMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjExNTZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDoxMDU2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNwYW4xMCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6OTU2cHh9aW5wdXQuc3BhbjksdGV4dGFyZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6ODU2cHh9aW5wdXQuc3BhbjgsdGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NzU2cHh9aW5wdXQuc3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NjU2cHh9aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lkdGg6NTU2cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjV7d2lkdGg6NDU2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjR7d2lkdGg6MzU2cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjN7d2lkdGg6MjU2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6MTU2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6NTZweH0udGh1bWJuYWlsc3ttYXJnaW4tbGVmdDotMzBweH0udGh1bWJuYWlscz5saXttYXJnaW4tbGVmdDozMHB4fS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTc5cHgpey5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjcyNHB4fS5zcGFuMTJ7d2lkdGg6NzI0cHh9LnNwYW4xMXt3aWR0aDo2NjJweH0uc3BhbjEwe3dpZHRoOjYwMHB4fS5zcGFuOXt3aWR0aDo1MzhweH0uc3Bhbjh7d2lkdGg6NDc2cHh9LnNwYW43e3dpZHRoOjQxNHB4fS5zcGFuNnt3aWR0aDozNTJweH0uc3BhbjV7d2lkdGg6MjkwcHh9LnNwYW40e3dpZHRoOjIyOHB4fS5zcGFuM3t3aWR0aDoxNjZweH0uc3BhbjJ7d2lkdGg6MTA0cHh9LnNwYW4xe3dpZHRoOjQycHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojc2NHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo3MDJweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6NjQwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NTc4cHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NTE2cHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NDU0cHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6MzkycHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MjY4cHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjA2cHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTQ0cHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6ODJweH0ucm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93LWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ctZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6Mi43NjI0MzA5MzkyMjY1MTk0JTsqbWFyZ2luLWxlZnQ6Mi43MDkyMzk0NDk4NjQ4MTclOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuNzYyNDMwOTM5MjI2NTE5NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDM2NDY0MDg4Mzk3NzglOyp3aWR0aDo5MS4zODMyNzI1OTkwMzYwOCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjg3MjkyODE3Njc5NTU4JTsqd2lkdGg6ODIuODE5NzM2Njg3NDMzODclfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjMwOTM5MjI2NTE5MzM3JTsqd2lkdGg6NzQuMjU2MjAwNzc1ODMxNjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljc0NTg1NjM1MzU5MTE3JTsqd2lkdGg6NjUuNjkyNjY0ODY0MjI5NDYlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjE4MjMyMDQ0MTk4ODk1JTsqd2lkdGg6NTcuMTI5MTI4OTUyNjI3MjUlfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjYxODc4NDUzMDM4Njc0JTsqd2lkdGg6NDguNTY1NTkzMDQxMDI1MDQlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjA1NTI0ODYxODc4NDUzJTsqd2lkdGg6NDAuMDAyMDU3MTI5NDIyODMlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjQ5MTcxMjcwNzE4MjMyMyU7KndpZHRoOjMxLjQzODUyMTIxNzgyMDYyJX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMi45MjgxNzY3OTU1ODAxMSU7KndpZHRoOjIyLjg3NDk4NTMwNjIxODQxJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC4zNjQ2NDA4ODM5Nzc5JTsqd2lkdGg6MTQuMzExNDQ5Mzk0NjE2MTk5JX0ucm93LWZsdWlkIC5zcGFuMXt3aWR0aDo1LjgwMTEwNDk3MjM3NTY5MSU7KndpZHRoOjUuNzQ3OTEzNDgzMDEzOTg4JX0ucm93LWZsdWlkIC5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMDUuNTI0ODYxODc4NDUzMDQlOyptYXJnaW4tbGVmdDoxMDUuNDE4NDc4ODk5NzI5NjIlfS5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjEwMi43NjI0MzA5MzkyMjY1MiU7Km1hcmdpbi1sZWZ0OjEwMi42NTYwNDc5NjA1MDMxJX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni45NjEzMjU5NjY4NTA4MiU7Km1hcmdpbi1sZWZ0Ojk2Ljg1NDk0Mjk4ODEyNzQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojk0LjE5ODg5NTAyNzYyNDMlOyptYXJnaW4tbGVmdDo5NC4wOTI1MTIwNDg5MDA4OSV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODguMzk3NzkwMDU1MjQ4NjIlOyptYXJnaW4tbGVmdDo4OC4yOTE0MDcwNzY1MjUyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS42MzUzNTkxMTYwMjIxJTsqbWFyZ2luLWxlZnQ6ODUuNTI4OTc2MTM3Mjk4NjglfS5yb3ctZmx1aWQgLm9mZnNldDl7bWFyZ2luLWxlZnQ6NzkuODM0MjU0MTQzNjQ2NCU7Km1hcmdpbi1sZWZ0Ojc5LjcyNzg3MTE2NDkyMjk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc3LjA3MTgyMzIwNDQxOTg5JTsqbWFyZ2luLWxlZnQ6NzYuOTY1NDQwMjI1Njk2NDclfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzEuMjcwNzE4MjMyMDQ0MiU7Km1hcmdpbi1sZWZ0OjcxLjE2NDMzNTI1MzMyMDc5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjUwODI4NzI5MjgxNzY4JTsqbWFyZ2luLWxlZnQ6NjguNDAxOTA0MzE0MDk0MjclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuNzA3MTgyMzIwNDQxOTklOyptYXJnaW4tbGVmdDo2Mi42MDA3OTkzNDE3MTg1ODQlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuOTQ0NzUxMzgxMjE1NDclOyptYXJnaW4tbGVmdDo1OS44MzgzNjg0MDI0OTIwNjUlfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTQuMTQzNjQ2NDA4ODM5NzglOyptYXJnaW4tbGVmdDo1NC4wMzcyNjM0MzAxMTYzNzYlfS5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTEuMzgxMjE1NDY5NjEzMjYlOyptYXJnaW4tbGVmdDo1MS4yNzQ4MzI0OTA4ODk4NiV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS41ODAxMTA0OTcyMzc1NyU7Km1hcmdpbi1sZWZ0OjQ1LjQ3MzcyNzUxODUxNDE3JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjgxNzY3OTU1ODAxMTA1JTsqbWFyZ2luLWxlZnQ6NDIuNzExMjk2NTc5Mjg3NjUlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzcuMDE2NTc0NTg1NjM1MzYlOyptYXJnaW4tbGVmdDozNi45MTAxOTE2MDY5MTE5NiV9LnJvdy1mbHVpZCAub2Zmc2V0NDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDozNC4yNTQxNDM2NDY0MDg4NCU7Km1hcmdpbi1sZWZ0OjM0LjE0Nzc2MDY2NzY4NTQ0JX0ucm93LWZsdWlkIC5vZmZzZXQze21hcmdpbi1sZWZ0OjI4LjQ1MzAzODY3NDAzMzE1JTsqbWFyZ2luLWxlZnQ6MjguMzQ2NjU1Njk1MzA5NzQ2JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjY5MDYwNzczNDgwNjYzJTsqbWFyZ2luLWxlZnQ6MjUuNTg0MjI0NzU2MDgzMjI3JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5Ljg4OTUwMjc2MjQzMDk0JTsqbWFyZ2luLWxlZnQ6MTkuNzgzMTE5NzgzNzA3NTM3JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjEyNzA3MTgyMzIwNDQyJTsqbWFyZ2luLWxlZnQ6MTcuMDIwNjg4ODQ0NDgxMDIlfS5yb3ctZmx1aWQgLm9mZnNldDF7bWFyZ2luLWxlZnQ6MTEuMzI1OTY2ODUwODI4NzMlOyptYXJnaW4tbGVmdDoxMS4yMTk1ODM4NzIxMDUzMjUlfS5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OC41NjM1MzU5MTE2MDIyMSU7Km1hcmdpbi1sZWZ0OjguNDU3MTUyOTMyODc4ODA2JX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjcxMHB4fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjY0OHB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjU4NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjUyNHB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjQ2MnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjQwMHB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjMzOHB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjI3NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjIxNHB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjE1MnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjkwcHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6MjhweH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7Ym9keXtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b20sLm5hdmJhci1zdGF0aWMtdG9we21hcmdpbi1yaWdodDotMjBweDttYXJnaW4tbGVmdDotMjBweH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmc6MH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpub25lO3dpZHRoOmF1dG87Y2xlYXI6bm9uZTt0ZXh0LWFsaWduOmxlZnR9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MH0uY29udGFpbmVye3dpZHRoOmF1dG99LnJvdy1mbHVpZHt3aWR0aDoxMDAlfS5yb3csLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9W2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5zcGFuMTIsLnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQgW2NsYXNzKj0ib2Zmc2V0Il06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtbGFyZ2UsLmlucHV0LXhsYXJnZSwuaW5wdXQteHhsYXJnZSxpbnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3RbY2xhc3MqPSJzcGFuIl0sdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG99LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjB9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDoyMHB4O3JpZ2h0OjIwcHg7bGVmdDoyMHB4O3dpZHRoOmF1dG87bWFyZ2luOjB9Lm1vZGFsLmZhZGV7dG9wOi0xMDBweH0ubW9kYWwuZmFkZS5pbnt0b3A6MjBweH19QG1lZGlhKG1heC13aWR0aDo0ODBweCl7Lm5hdi1jb2xsYXBzZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9LnBhZ2UtaGVhZGVyIGgxIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweH1pbnB1dFt0eXBlPSJjaGVja2JveCJdLGlucHV0W3R5cGU9InJhZGlvIl17Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWx7ZmxvYXQ6bm9uZTt3aWR0aDphdXRvO3BhZGRpbmctdG9wOjA7dGV4dC1hbGlnbjpsZWZ0fS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xze21hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0e3BhZGRpbmctdG9wOjB9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH0ubWVkaWEgLnB1bGwtbGVmdCwubWVkaWEgLnB1bGwtcmlnaHR7ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21hcmdpbi1ib3R0b206MTBweH0ubWVkaWEtb2JqZWN0e21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1vZGFse3RvcDoxMHB4O3JpZ2h0OjEwcHg7bGVmdDoxMHB4fS5tb2RhbC1oZWFkZXIgLmNsb3Nle3BhZGRpbmc6MTBweDttYXJnaW46LTEwcHh9LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246c3RhdGljfX1AbWVkaWEobWF4LXdpZHRoOjk3OXB4KXtib2R5e3BhZGRpbmctdG9wOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217cG9zaXRpb246c3RhdGljfS5uYXZiYXItZml4ZWQtdG9we21hcmdpbi1ib3R0b206MjBweH0ubmF2YmFyLWZpeGVkLWJvdHRvbXttYXJnaW4tdG9wOjIwcHh9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmc6NXB4fS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvO3BhZGRpbmc6MH0ubmF2YmFyIC5icmFuZHtwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luOjAgMCAwIC01cHh9Lm5hdi1jb2xsYXBzZXtjbGVhcjpib3RofS5uYXYtY29sbGFwc2UgLm5hdntmbG9hdDpub25lO21hcmdpbjowIDAgMTBweH0ubmF2LWNvbGxhcHNlIC5uYXY+bGl7ZmxvYXQ6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+YXttYXJnaW4tYm90dG9tOjJweH0ubmF2LWNvbGxhcHNlIC5uYXY+LmRpdmlkZXItdmVydGljYWx7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdiAubmF2LWhlYWRlcntjb2xvcjojNzc3O3RleHQtc2hhZG93Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhe3BhZGRpbmc6OXB4IDE1cHg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNzc3Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0ubmF2LWNvbGxhcHNlIC5idG57cGFkZGluZzo0cHggMTBweCA0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGxpK2xpIGF7bWFyZ2luLWJvdHRvbToycHh9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6Zm9jdXMsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVyLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmMmYyZjJ9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGF7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdi1jb2xsYXBzZS5pbiAuYnRuLWdyb3Vwe3BhZGRpbmc6MDttYXJnaW4tdG9wOjVweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOnN0YXRpYzt0b3A6YXV0bztsZWZ0OmF1dG87ZGlzcGxheTpub25lO2Zsb2F0Om5vbmU7bWF4LXdpZHRoOm5vbmU7cGFkZGluZzowO21hcmdpbjowIDE1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXYtY29sbGFwc2UgLm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmFmdGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IC5kaXZpZGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3JlLC5uYXYtY29sbGFwc2UgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdi1jb2xsYXBzZSAubmF2YmFyLXNlYXJjaHtmbG9hdDpub25lO3BhZGRpbmc6MTBweCAxNXB4O21hcmdpbjoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2YyZjJmMjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjJmMmYyOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdmJhci1zZWFyY2h7Ym9yZGVyLXRvcC1jb2xvcjojMTExO2JvcmRlci1ib3R0b20tY29sb3I6IzExMX0ubmF2YmFyIC5uYXYtY29sbGFwc2UgLm5hdi5wdWxsLXJpZ2h0e2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0ubmF2LWNvbGxhcHNlLC5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVufS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpibG9ja30ubmF2YmFyLXN0YXRpYyAubmF2YmFyLWlubmVye3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH19QG1lZGlhKG1pbi13aWR0aDo5ODBweCl7Lm5hdi1jb2xsYXBzZS5jb2xsYXBzZXtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5jc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM3OWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5jc3MKQEAgLTAsMCArMSw2NzYwIEBACisvKiEKKyAqIEJvb3RzdHJhcCB2My4zLjYgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQorICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQorICovCisvKiEgbm9ybWFsaXplLmNzcyB2My4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovCitodG1sIHsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKKyAgICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOworfQorYm9keSB7CisgIG1hcmdpbjogMDsKK30KK2FydGljbGUsCithc2lkZSwKK2RldGFpbHMsCitmaWdjYXB0aW9uLAorZmlndXJlLAorZm9vdGVyLAoraGVhZGVyLAoraGdyb3VwLAorbWFpbiwKK21lbnUsCituYXYsCitzZWN0aW9uLAorc3VtbWFyeSB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorYXVkaW8sCitjYW52YXMsCitwcm9ncmVzcywKK3ZpZGVvIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Cit9CithdWRpbzpub3QoW2NvbnRyb2xzXSkgeworICBkaXNwbGF5OiBub25lOworICBoZWlnaHQ6IDA7Cit9CitbaGlkZGVuXSwKK3RlbXBsYXRlIHsKKyAgZGlzcGxheTogbm9uZTsKK30KK2EgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KK2E6YWN0aXZlLAorYTpob3ZlciB7CisgIG91dGxpbmU6IDA7Cit9CithYmJyW3RpdGxlXSB7CisgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQ7Cit9CitiLAorc3Ryb25nIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CitkZm4geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CitoMSB7CisgIG1hcmdpbjogLjY3ZW0gMDsKKyAgZm9udC1zaXplOiAyZW07Cit9CittYXJrIHsKKyAgY29sb3I6ICMwMDA7CisgIGJhY2tncm91bmQ6ICNmZjA7Cit9CitzbWFsbCB7CisgIGZvbnQtc2l6ZTogODAlOworfQorc3ViLAorc3VwIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBmb250LXNpemU6IDc1JTsKKyAgbGluZS1oZWlnaHQ6IDA7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKK30KK3N1cCB7CisgIHRvcDogLS41ZW07Cit9CitzdWIgeworICBib3R0b206IC0uMjVlbTsKK30KK2ltZyB7CisgIGJvcmRlcjogMDsKK30KK3N2Zzpub3QoOnJvb3QpIHsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KK2ZpZ3VyZSB7CisgIG1hcmdpbjogMWVtIDQwcHg7Cit9CitociB7CisgIGhlaWdodDogMDsKKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKK30KK3ByZSB7CisgIG92ZXJmbG93OiBhdXRvOworfQorY29kZSwKK2tiZCwKK3ByZSwKK3NhbXAgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMWVtOworfQorYnV0dG9uLAoraW5wdXQsCitvcHRncm91cCwKK3NlbGVjdCwKK3RleHRhcmVhIHsKKyAgbWFyZ2luOiAwOworICBmb250OiBpbmhlcml0OworICBjb2xvcjogaW5oZXJpdDsKK30KK2J1dHRvbiB7CisgIG92ZXJmbG93OiB2aXNpYmxlOworfQorYnV0dG9uLAorc2VsZWN0IHsKKyAgdGV4dC10cmFuc2Zvcm06IG5vbmU7Cit9CitidXR0b24sCitodG1sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLAoraW5wdXRbdHlwZT0icmVzZXQiXSwKK2lucHV0W3R5cGU9InN1Ym1pdCJdIHsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247CisgIGN1cnNvcjogcG9pbnRlcjsKK30KK2J1dHRvbltkaXNhYmxlZF0sCitodG1sIGlucHV0W2Rpc2FibGVkXSB7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KK2J1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwKK2lucHV0OjotbW96LWZvY3VzLWlubmVyIHsKKyAgcGFkZGluZzogMDsKKyAgYm9yZGVyOiAwOworfQoraW5wdXQgeworICBsaW5lLWhlaWdodDogbm9ybWFsOworfQoraW5wdXRbdHlwZT0iY2hlY2tib3giXSwKK2lucHV0W3R5cGU9InJhZGlvIl0geworICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICBwYWRkaW5nOiAwOworfQoraW5wdXRbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sCitpbnB1dFt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7CisgIGhlaWdodDogYXV0bzsKK30KK2lucHV0W3R5cGU9InNlYXJjaCJdIHsKKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7Cit9CitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwKK2lucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworfQorZmllbGRzZXQgeworICBwYWRkaW5nOiAuMzVlbSAuNjI1ZW0gLjc1ZW07CisgIG1hcmdpbjogMCAycHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7Cit9CitsZWdlbmQgeworICBwYWRkaW5nOiAwOworICBib3JkZXI6IDA7Cit9Cit0ZXh0YXJlYSB7CisgIG92ZXJmbG93OiBhdXRvOworfQorb3B0Z3JvdXAgeworICBmb250LXdlaWdodDogYm9sZDsKK30KK3RhYmxlIHsKKyAgYm9yZGVyLXNwYWNpbmc6IDA7CisgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cit9Cit0ZCwKK3RoIHsKKyAgcGFkZGluZzogMDsKK30KKy8qISBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2Jsb2IvbWFzdGVyL3NyYy9jc3MvbWFpbi5jc3MgKi8KK0BtZWRpYSBwcmludCB7CisgICosCisgICo6YmVmb3JlLAorICAqOmFmdGVyIHsKKyAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50OworICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CisgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKKyAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKKyAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKKyAgfQorICBhLAorICBhOnZpc2l0ZWQgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICB9CisgIGFbaHJlZl06YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICIgKCIgYXR0cihocmVmKSAiKSI7CisgIH0KKyAgYWJiclt0aXRsZV06YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICIgKCIgYXR0cih0aXRsZSkgIikiOworICB9CisgIGFbaHJlZl49IiMiXTphZnRlciwKKyAgYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlciB7CisgICAgY29udGVudDogIiI7CisgIH0KKyAgcHJlLAorICBibG9ja3F1b3RlIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworCisgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworICB9CisgIHRoZWFkIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7CisgIH0KKyAgdHIsCisgIGltZyB7CisgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworICB9CisgIGltZyB7CisgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CisgIH0KKyAgcCwKKyAgaDIsCisgIGgzIHsKKyAgICBvcnBoYW5zOiAzOworICAgIHdpZG93czogMzsKKyAgfQorICBoMiwKKyAgaDMgeworICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOworICB9CisgIC5uYXZiYXIgeworICAgIGRpc3BsYXk6IG5vbmU7CisgIH0KKyAgLmJ0biA+IC5jYXJldCwKKyAgLmRyb3B1cCA+IC5idG4gPiAuY2FyZXQgeworICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudDsKKyAgfQorICAubGFiZWwgeworICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CisgIH0KKyAgLnRhYmxlIHsKKyAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7CisgIH0KKyAgLnRhYmxlIHRkLAorICAudGFibGUgdGggeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDsKKyAgfQorICAudGFibGUtYm9yZGVyZWQgdGgsCisgIC50YWJsZS1ib3JkZXJlZCB0ZCB7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50OworICB9Cit9CitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7CisKKyAgc3JjOiB1cmwoJy4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90Jyk7CisgIHNyYzogdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZyNnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXInKSBmb3JtYXQoJ3N2ZycpOworfQorLmdseXBoaWNvbiB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgdG9wOiAxcHg7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgbGluZS1oZWlnaHQ6IDE7CisKKyAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisuZ2x5cGhpY29uLWFzdGVyaXNrOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcMDAyYSI7Cit9CisuZ2x5cGhpY29uLXBsdXM6YmVmb3JlIHsKKyAgY29udGVudDogIlwwMDJiIjsKK30KKy5nbHlwaGljb24tZXVybzpiZWZvcmUsCisuZ2x5cGhpY29uLWV1cjpiZWZvcmUgeworICBjb250ZW50OiAiXDIwYWMiOworfQorLmdseXBoaWNvbi1taW51czpiZWZvcmUgeworICBjb250ZW50OiAiXDIyMTIiOworfQorLmdseXBoaWNvbi1jbG91ZDpiZWZvcmUgeworICBjb250ZW50OiAiXDI2MDEiOworfQorLmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmUgeworICBjb250ZW50OiAiXDI3MDkiOworfQorLmdseXBoaWNvbi1wZW5jaWw6YmVmb3JlIHsKKyAgY29udGVudDogIlwyNzBmIjsKK30KKy5nbHlwaGljb24tZ2xhc3M6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDAxIjsKK30KKy5nbHlwaGljb24tbXVzaWM6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDAyIjsKK30KKy5nbHlwaGljb24tc2VhcmNoOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAwMyI7Cit9CisuZ2x5cGhpY29uLWhlYXJ0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAwNSI7Cit9CisuZ2x5cGhpY29uLXN0YXI6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDA2IjsKK30KKy5nbHlwaGljb24tc3Rhci1lbXB0eTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMDciOworfQorLmdseXBoaWNvbi11c2VyOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAwOCI7Cit9CisuZ2x5cGhpY29uLWZpbG06YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDA5IjsKK30KKy5nbHlwaGljb24tdGgtbGFyZ2U6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDEwIjsKK30KKy5nbHlwaGljb24tdGg6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDExIjsKK30KKy5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMTIiOworfQorLmdseXBoaWNvbi1vazpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMTMiOworfQorLmdseXBoaWNvbi1yZW1vdmU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDE0IjsKK30KKy5nbHlwaGljb24tem9vbS1pbjpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMTUiOworfQorLmdseXBoaWNvbi16b29tLW91dDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMTYiOworfQorLmdseXBoaWNvbi1vZmY6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDE3IjsKK30KKy5nbHlwaGljb24tc2lnbmFsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAxOCI7Cit9CisuZ2x5cGhpY29uLWNvZzpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMTkiOworfQorLmdseXBoaWNvbi10cmFzaDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMjAiOworfQorLmdseXBoaWNvbi1ob21lOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAyMSI7Cit9CisuZ2x5cGhpY29uLWZpbGU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDIyIjsKK30KKy5nbHlwaGljb24tdGltZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMjMiOworfQorLmdseXBoaWNvbi1yb2FkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAyNCI7Cit9CisuZ2x5cGhpY29uLWRvd25sb2FkLWFsdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMjUiOworfQorLmdseXBoaWNvbi1kb3dubG9hZDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMjYiOworfQorLmdseXBoaWNvbi11cGxvYWQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDI3IjsKK30KKy5nbHlwaGljb24taW5ib3g6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDI4IjsKK30KKy5nbHlwaGljb24tcGxheS1jaXJjbGU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDI5IjsKK30KKy5nbHlwaGljb24tcmVwZWF0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAzMCI7Cit9CisuZ2x5cGhpY29uLXJlZnJlc2g6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDMxIjsKK30KKy5nbHlwaGljb24tbGlzdC1hbHQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDMyIjsKK30KKy5nbHlwaGljb24tbG9jazpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMzMiOworfQorLmdseXBoaWNvbi1mbGFnOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAzNCI7Cit9CisuZ2x5cGhpY29uLWhlYWRwaG9uZXM6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDM1IjsKK30KKy5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMzYiOworfQorLmdseXBoaWNvbi12b2x1bWUtZG93bjpiZWZvcmUgeworICBjb250ZW50OiAiXGUwMzciOworfQorLmdseXBoaWNvbi12b2x1bWUtdXA6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDM4IjsKK30KKy5nbHlwaGljb24tcXJjb2RlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTAzOSI7Cit9CisuZ2x5cGhpY29uLWJhcmNvZGU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDQwIjsKK30KKy5nbHlwaGljb24tdGFnOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA0MSI7Cit9CisuZ2x5cGhpY29uLXRhZ3M6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDQyIjsKK30KKy5nbHlwaGljb24tYm9vazpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNDMiOworfQorLmdseXBoaWNvbi1ib29rbWFyazpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNDQiOworfQorLmdseXBoaWNvbi1wcmludDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNDUiOworfQorLmdseXBoaWNvbi1jYW1lcmE6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDQ2IjsKK30KKy5nbHlwaGljb24tZm9udDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNDciOworfQorLmdseXBoaWNvbi1ib2xkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA0OCI7Cit9CisuZ2x5cGhpY29uLWl0YWxpYzpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNDkiOworfQorLmdseXBoaWNvbi10ZXh0LWhlaWdodDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNTAiOworfQorLmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA1MSI7Cit9CisuZ2x5cGhpY29uLWFsaWduLWxlZnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDUyIjsKK30KKy5nbHlwaGljb24tYWxpZ24tY2VudGVyOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA1MyI7Cit9CisuZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA1NCI7Cit9CisuZ2x5cGhpY29uLWFsaWduLWp1c3RpZnk6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDU1IjsKK30KKy5nbHlwaGljb24tbGlzdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNTYiOworfQorLmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNTciOworfQorLmdseXBoaWNvbi1pbmRlbnQtcmlnaHQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDU4IjsKK30KKy5nbHlwaGljb24tZmFjZXRpbWUtdmlkZW86YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDU5IjsKK30KKy5nbHlwaGljb24tcGljdHVyZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNjAiOworfQorLmdseXBoaWNvbi1tYXAtbWFya2VyOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA2MiI7Cit9CisuZ2x5cGhpY29uLWFkanVzdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNjMiOworfQorLmdseXBoaWNvbi10aW50OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA2NCI7Cit9CisuZ2x5cGhpY29uLWVkaXQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDY1IjsKK30KKy5nbHlwaGljb24tc2hhcmU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDY2IjsKK30KKy5nbHlwaGljb24tY2hlY2s6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDY3IjsKK30KKy5nbHlwaGljb24tbW92ZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNjgiOworfQorLmdseXBoaWNvbi1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA2OSI7Cit9CisuZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDcwIjsKK30KKy5nbHlwaGljb24tYmFja3dhcmQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDcxIjsKK30KKy5nbHlwaGljb24tcGxheTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNzIiOworfQorLmdseXBoaWNvbi1wYXVzZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNzMiOworfQorLmdseXBoaWNvbi1zdG9wOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA3NCI7Cit9CisuZ2x5cGhpY29uLWZvcndhcmQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDc1IjsKK30KKy5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA3NiI7Cit9CisuZ2x5cGhpY29uLXN0ZXAtZm9yd2FyZDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNzciOworfQorLmdseXBoaWNvbi1lamVjdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwNzgiOworfQorLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDc5IjsKK30KKy5nbHlwaGljb24tY2hldnJvbi1yaWdodDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwODAiOworfQorLmdseXBoaWNvbi1wbHVzLXNpZ246YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDgxIjsKK30KKy5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmUgeworICBjb250ZW50OiAiXGUwODIiOworfQorLmdseXBoaWNvbi1yZW1vdmUtc2lnbjpiZWZvcmUgeworICBjb250ZW50OiAiXGUwODMiOworfQorLmdseXBoaWNvbi1vay1zaWduOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA4NCI7Cit9CisuZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDg1IjsKK30KKy5nbHlwaGljb24taW5mby1zaWduOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA4NiI7Cit9CisuZ2x5cGhpY29uLXNjcmVlbnNob3Q6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDg3IjsKK30KKy5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwODgiOworfQorLmdseXBoaWNvbi1vay1jaXJjbGU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDg5IjsKK30KKy5nbHlwaGljb24tYmFuLWNpcmNsZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUwOTAiOworfQorLmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA5MSI7Cit9CisuZ2x5cGhpY29uLWFycm93LXJpZ2h0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA5MiI7Cit9CisuZ2x5cGhpY29uLWFycm93LXVwOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA5MyI7Cit9CisuZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3JlIHsKKyAgY29udGVudDogIlxlMDk0IjsKK30KKy5nbHlwaGljb24tc2hhcmUtYWx0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA5NSI7Cit9CisuZ2x5cGhpY29uLXJlc2l6ZS1mdWxsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTA5NiI7Cit9CisuZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmUgeworICBjb250ZW50OiAiXGUwOTciOworfQorLmdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEwMSI7Cit9CisuZ2x5cGhpY29uLWdpZnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTAyIjsKK30KKy5nbHlwaGljb24tbGVhZjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMDMiOworfQorLmdseXBoaWNvbi1maXJlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEwNCI7Cit9CisuZ2x5cGhpY29uLWV5ZS1vcGVuOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEwNSI7Cit9CisuZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMDYiOworfQorLmdseXBoaWNvbi13YXJuaW5nLXNpZ246YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTA3IjsKK30KKy5nbHlwaGljb24tcGxhbmU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTA4IjsKK30KKy5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTA5IjsKK30KKy5nbHlwaGljb24tcmFuZG9tOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTExMCI7Cit9CisuZ2x5cGhpY29uLWNvbW1lbnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTExIjsKK30KKy5nbHlwaGljb24tbWFnbmV0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTExMiI7Cit9CisuZ2x5cGhpY29uLWNoZXZyb24tdXA6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTEzIjsKK30KKy5nbHlwaGljb24tY2hldnJvbi1kb3duOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTExNCI7Cit9CisuZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTE1IjsKK30KKy5nbHlwaGljb24tc2hvcHBpbmctY2FydDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMTYiOworfQorLmdseXBoaWNvbi1mb2xkZXItY2xvc2U6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTE3IjsKK30KKy5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTE4IjsKK30KKy5nbHlwaGljb24tcmVzaXplLXZlcnRpY2FsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTExOSI7Cit9CisuZ2x5cGhpY29uLXJlc2l6ZS1ob3Jpem9udGFsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEyMCI7Cit9CisuZ2x5cGhpY29uLWhkZDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMjEiOworfQorLmdseXBoaWNvbi1idWxsaG9ybjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMjIiOworfQorLmdseXBoaWNvbi1iZWxsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEyMyI7Cit9CisuZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEyNCI7Cit9CisuZ2x5cGhpY29uLXRodW1icy11cDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMjUiOworfQorLmdseXBoaWNvbi10aHVtYnMtZG93bjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMjYiOworfQorLmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEyNyI7Cit9CisuZ2x5cGhpY29uLWhhbmQtbGVmdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMjgiOworfQorLmdseXBoaWNvbi1oYW5kLXVwOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEyOSI7Cit9CisuZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMzAiOworfQorLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTMxIjsKK30KKy5nbHlwaGljb24tY2lyY2xlLWFycm93LWxlZnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTMyIjsKK30KKy5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEzMyI7Cit9CisuZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1kb3duOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEzNCI7Cit9CisuZ2x5cGhpY29uLWdsb2JlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEzNSI7Cit9CisuZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMzYiOworfQorLmdseXBoaWNvbi10YXNrczpiZWZvcmUgeworICBjb250ZW50OiAiXGUxMzciOworfQorLmdseXBoaWNvbi1maWx0ZXI6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTM4IjsKK30KKy5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTEzOSI7Cit9CisuZ2x5cGhpY29uLWZ1bGxzY3JlZW46YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTQwIjsKK30KKy5nbHlwaGljb24tZGFzaGJvYXJkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE0MSI7Cit9CisuZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNDIiOworfQorLmdseXBoaWNvbi1oZWFydC1lbXB0eTpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNDMiOworfQorLmdseXBoaWNvbi1saW5rOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE0NCI7Cit9CisuZ2x5cGhpY29uLXBob25lOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE0NSI7Cit9CisuZ2x5cGhpY29uLXB1c2hwaW46YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTQ2IjsKK30KKy5nbHlwaGljb24tdXNkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE0OCI7Cit9CisuZ2x5cGhpY29uLWdicDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNDkiOworfQorLmdseXBoaWNvbi1zb3J0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE1MCI7Cit9CisuZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTUxIjsKK30KKy5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTUyIjsKK30KKy5nbHlwaGljb24tc29ydC1ieS1vcmRlcjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNTMiOworfQorLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyLWFsdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNTQiOworfQorLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTU1IjsKK30KKy5nbHlwaGljb24tc29ydC1ieS1hdHRyaWJ1dGVzLWFsdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNTYiOworfQorLmdseXBoaWNvbi11bmNoZWNrZWQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTU3IjsKK30KKy5nbHlwaGljb24tZXhwYW5kOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE1OCI7Cit9CisuZ2x5cGhpY29uLWNvbGxhcHNlLWRvd246YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTU5IjsKK30KKy5nbHlwaGljb24tY29sbGFwc2UtdXA6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTYwIjsKK30KKy5nbHlwaGljb24tbG9nLWluOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE2MSI7Cit9CisuZ2x5cGhpY29uLWZsYXNoOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE2MiI7Cit9CisuZ2x5cGhpY29uLWxvZy1vdXQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTYzIjsKK30KKy5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNjQiOworfQorLmdseXBoaWNvbi1yZWNvcmQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTY1IjsKK30KKy5nbHlwaGljb24tc2F2ZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNjYiOworfQorLmdseXBoaWNvbi1vcGVuOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE2NyI7Cit9CisuZ2x5cGhpY29uLXNhdmVkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE2OCI7Cit9CisuZ2x5cGhpY29uLWltcG9ydDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNjkiOworfQorLmdseXBoaWNvbi1leHBvcnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTcwIjsKK30KKy5nbHlwaGljb24tc2VuZDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNzEiOworfQorLmdseXBoaWNvbi1mbG9wcHktZGlzazpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNzIiOworfQorLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTczIjsKK30KKy5nbHlwaGljb24tZmxvcHB5LXJlbW92ZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNzQiOworfQorLmdseXBoaWNvbi1mbG9wcHktc2F2ZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNzUiOworfQorLmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNzYiOworfQorLmdseXBoaWNvbi1jcmVkaXQtY2FyZDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNzciOworfQorLmdseXBoaWNvbi10cmFuc2ZlcjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxNzgiOworfQorLmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE3OSI7Cit9CisuZ2x5cGhpY29uLWhlYWRlcjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxODAiOworfQorLmdseXBoaWNvbi1jb21wcmVzc2VkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE4MSI7Cit9CisuZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE4MiI7Cit9CisuZ2x5cGhpY29uLXBob25lLWFsdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxODMiOworfQorLmdseXBoaWNvbi10b3dlcjpiZWZvcmUgeworICBjb250ZW50OiAiXGUxODQiOworfQorLmdseXBoaWNvbi1zdGF0czpiZWZvcmUgeworICBjb250ZW50OiAiXGUxODUiOworfQorLmdseXBoaWNvbi1zZC12aWRlbzpiZWZvcmUgeworICBjb250ZW50OiAiXGUxODYiOworfQorLmdseXBoaWNvbi1oZC12aWRlbzpiZWZvcmUgeworICBjb250ZW50OiAiXGUxODciOworfQorLmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTg4IjsKK30KKy5nbHlwaGljb24tc291bmQtc3RlcmVvOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE4OSI7Cit9CisuZ2x5cGhpY29uLXNvdW5kLWRvbGJ5OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE5MCI7Cit9CisuZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmUgeworICBjb250ZW50OiAiXGUxOTEiOworfQorLmdseXBoaWNvbi1zb3VuZC02LTE6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTkyIjsKK30KKy5nbHlwaGljb24tc291bmQtNy0xOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE5MyI7Cit9CisuZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE5NCI7Cit9CisuZ2x5cGhpY29uLXJlZ2lzdHJhdGlvbi1tYXJrOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE5NSI7Cit9CisuZ2x5cGhpY29uLWNsb3VkLWRvd25sb2FkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTE5NyI7Cit9CisuZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmUgeworICBjb250ZW50OiAiXGUxOTgiOworfQorLmdseXBoaWNvbi10cmVlLWNvbmlmZXI6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMTk5IjsKK30KKy5nbHlwaGljb24tdHJlZS1kZWNpZHVvdXM6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjAwIjsKK30KKy5nbHlwaGljb24tY2Q6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjAxIjsKK30KKy5nbHlwaGljb24tc2F2ZS1maWxlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIwMiI7Cit9CisuZ2x5cGhpY29uLW9wZW4tZmlsZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMDMiOworfQorLmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMDQiOworfQorLmdseXBoaWNvbi1jb3B5OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIwNSI7Cit9CisuZ2x5cGhpY29uLXBhc3RlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIwNiI7Cit9CisuZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIwOSI7Cit9CisuZ2x5cGhpY29uLWVxdWFsaXplcjpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMTAiOworfQorLmdseXBoaWNvbi1raW5nOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIxMSI7Cit9CisuZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIxMiI7Cit9CisuZ2x5cGhpY29uLXBhd246YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjEzIjsKK30KKy5nbHlwaGljb24tYmlzaG9wOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIxNCI7Cit9CisuZ2x5cGhpY29uLWtuaWdodDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMTUiOworfQorLmdseXBoaWNvbi1iYWJ5LWZvcm11bGE6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjE2IjsKK30KKy5nbHlwaGljb24tdGVudDpiZWZvcmUgeworICBjb250ZW50OiAiXDI2ZmEiOworfQorLmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIxOCI7Cit9CisuZ2x5cGhpY29uLWJlZDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMTkiOworfQorLmdseXBoaWNvbi1hcHBsZTpiZWZvcmUgeworICBjb250ZW50OiAiXGY4ZmYiOworfQorLmdseXBoaWNvbi1lcmFzZTpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMjEiOworfQorLmdseXBoaWNvbi1ob3VyZ2xhc3M6YmVmb3JlIHsKKyAgY29udGVudDogIlwyMzFiIjsKK30KKy5nbHlwaGljb24tbGFtcDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMjMiOworfQorLmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjI0IjsKK30KKy5nbHlwaGljb24tcGlnZ3ktYmFuazpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMjUiOworfQorLmdseXBoaWNvbi1zY2lzc29yczpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMjYiOworfQorLmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIyNyI7Cit9CisuZ2x5cGhpY29uLWJ0YzpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMjciOworfQorLmdseXBoaWNvbi14YnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjI3IjsKK30KKy5nbHlwaGljb24teWVuOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcMDBhNSI7Cit9CisuZ2x5cGhpY29uLWpweTpiZWZvcmUgeworICBjb250ZW50OiAiXDAwYTUiOworfQorLmdseXBoaWNvbi1ydWJsZTpiZWZvcmUgeworICBjb250ZW50OiAiXDIwYmQiOworfQorLmdseXBoaWNvbi1ydWI6YmVmb3JlIHsKKyAgY29udGVudDogIlwyMGJkIjsKK30KKy5nbHlwaGljb24tc2NhbGU6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjMwIjsKK30KKy5nbHlwaGljb24taWNlLWxvbGx5OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIzMSI7Cit9CisuZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjMyIjsKK30KKy5nbHlwaGljb24tZWR1Y2F0aW9uOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIzMyI7Cit9CisuZ2x5cGhpY29uLW9wdGlvbi1ob3Jpem9udGFsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIzNCI7Cit9CisuZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMzUiOworfQorLmdseXBoaWNvbi1tZW51LWhhbWJ1cmdlcjpiZWZvcmUgeworICBjb250ZW50OiAiXGUyMzYiOworfQorLmdseXBoaWNvbi1tb2RhbC13aW5kb3c6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjM3IjsKK30KKy5nbHlwaGljb24tb2lsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIzOCI7Cit9CisuZ2x5cGhpY29uLWdyYWluOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTIzOSI7Cit9CisuZ2x5cGhpY29uLXN1bmdsYXNzZXM6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjQwIjsKK30KKy5nbHlwaGljb24tdGV4dC1zaXplOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTI0MSI7Cit9CisuZ2x5cGhpY29uLXRleHQtY29sb3I6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjQyIjsKK30KKy5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTI0MyI7Cit9CisuZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3A6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjQ0IjsKK30KKy5nbHlwaGljb24tb2JqZWN0LWFsaWduLWJvdHRvbTpiZWZvcmUgeworICBjb250ZW50OiAiXGUyNDUiOworfQorLmdseXBoaWNvbi1vYmplY3QtYWxpZ24taG9yaXpvbnRhbDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyNDYiOworfQorLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyNDciOworfQorLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdmVydGljYWw6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjQ4IjsKK30KKy5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTI0OSI7Cit9CisuZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTI1MCI7Cit9CisuZ2x5cGhpY29uLXRyaWFuZ2xlLWxlZnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjUxIjsKK30KKy5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTI1MiI7Cit9CisuZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyNTMiOworfQorLmdseXBoaWNvbi1jb25zb2xlOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTI1NCI7Cit9CisuZ2x5cGhpY29uLXN1cGVyc2NyaXB0OmJlZm9yZSB7CisgIGNvbnRlbnQ6ICJcZTI1NSI7Cit9CisuZ2x5cGhpY29uLXN1YnNjcmlwdDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyNTYiOworfQorLmdseXBoaWNvbi1tZW51LWxlZnQ6YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjU3IjsKK30KKy5nbHlwaGljb24tbWVudS1yaWdodDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyNTgiOworfQorLmdseXBoaWNvbi1tZW51LWRvd246YmVmb3JlIHsKKyAgY29udGVudDogIlxlMjU5IjsKK30KKy5nbHlwaGljb24tbWVudS11cDpiZWZvcmUgeworICBjb250ZW50OiAiXGUyNjAiOworfQorKiB7CisgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cit9CisqOmJlZm9yZSwKKyo6YWZ0ZXIgeworICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworfQoraHRtbCB7CisgIGZvbnQtc2l6ZTogMTBweDsKKworICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7Cit9Citib2R5IHsKKyAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTRweDsKKyAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworfQoraW5wdXQsCitidXR0b24sCitzZWxlY3QsCit0ZXh0YXJlYSB7CisgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICBmb250LXNpemU6IGluaGVyaXQ7CisgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OworfQorYSB7CisgIGNvbG9yOiAjMzM3YWI3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CithOmhvdmVyLAorYTpmb2N1cyB7CisgIGNvbG9yOiAjMjM1MjdjOworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KK2E6Zm9jdXMgeworICBvdXRsaW5lOiB0aGluIGRvdHRlZDsKKyAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOworICBvdXRsaW5lLW9mZnNldDogLTJweDsKK30KK2ZpZ3VyZSB7CisgIG1hcmdpbjogMDsKK30KK2ltZyB7CisgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisuaW1nLXJlc3BvbnNpdmUsCisudGh1bWJuYWlsID4gaW1nLAorLnRodW1ibmFpbCBhID4gaW1nLAorLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBpbWcsCisuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSA+IGEgPiBpbWcgeworICBkaXNwbGF5OiBibG9jazsKKyAgbWF4LXdpZHRoOiAxMDAlOworICBoZWlnaHQ6IGF1dG87Cit9CisuaW1nLXJvdW5kZWQgeworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9CisuaW1nLXRodW1ibmFpbCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWF4LXdpZHRoOiAxMDAlOworICBoZWlnaHQ6IGF1dG87CisgIHBhZGRpbmc6IDRweDsKKyAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2UtaW4tb3V0OworICAgICAgIC1vLXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZS1pbi1vdXQ7CisgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlLWluLW91dDsKK30KKy5pbWctY2lyY2xlIHsKKyAgYm9yZGVyLXJhZGl1czogNTAlOworfQoraHIgeworICBtYXJnaW4tdG9wOiAyMHB4OworICBtYXJnaW4tYm90dG9tOiAyMHB4OworICBib3JkZXI6IDA7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOworfQorLnNyLW9ubHkgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdpZHRoOiAxcHg7CisgIGhlaWdodDogMXB4OworICBwYWRkaW5nOiAwOworICBtYXJnaW46IC0xcHg7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7CisgIGJvcmRlcjogMDsKK30KKy5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsCisuc3Itb25seS1mb2N1c2FibGU6Zm9jdXMgeworICBwb3NpdGlvbjogc3RhdGljOworICB3aWR0aDogYXV0bzsKKyAgaGVpZ2h0OiBhdXRvOworICBtYXJnaW46IDA7CisgIG92ZXJmbG93OiB2aXNpYmxlOworICBjbGlwOiBhdXRvOworfQorW3JvbGU9ImJ1dHRvbiJdIHsKKyAgY3Vyc29yOiBwb2ludGVyOworfQoraDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAorLmgxLAorLmgyLAorLmgzLAorLmg0LAorLmg1LAorLmg2IHsKKyAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgIGZvbnQtd2VpZ2h0OiA1MDA7CisgIGxpbmUtaGVpZ2h0OiAxLjE7CisgIGNvbG9yOiBpbmhlcml0OworfQoraDEgc21hbGwsCitoMiBzbWFsbCwKK2gzIHNtYWxsLAoraDQgc21hbGwsCitoNSBzbWFsbCwKK2g2IHNtYWxsLAorLmgxIHNtYWxsLAorLmgyIHNtYWxsLAorLmgzIHNtYWxsLAorLmg0IHNtYWxsLAorLmg1IHNtYWxsLAorLmg2IHNtYWxsLAoraDEgLnNtYWxsLAoraDIgLnNtYWxsLAoraDMgLnNtYWxsLAoraDQgLnNtYWxsLAoraDUgLnNtYWxsLAoraDYgLnNtYWxsLAorLmgxIC5zbWFsbCwKKy5oMiAuc21hbGwsCisuaDMgLnNtYWxsLAorLmg0IC5zbWFsbCwKKy5oNSAuc21hbGwsCisuaDYgLnNtYWxsIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIGNvbG9yOiAjNzc3OworfQoraDEsCisuaDEsCitoMiwKKy5oMiwKK2gzLAorLmgzIHsKKyAgbWFyZ2luLXRvcDogMjBweDsKKyAgbWFyZ2luLWJvdHRvbTogMTBweDsKK30KK2gxIHNtYWxsLAorLmgxIHNtYWxsLAoraDIgc21hbGwsCisuaDIgc21hbGwsCitoMyBzbWFsbCwKKy5oMyBzbWFsbCwKK2gxIC5zbWFsbCwKKy5oMSAuc21hbGwsCitoMiAuc21hbGwsCisuaDIgLnNtYWxsLAoraDMgLnNtYWxsLAorLmgzIC5zbWFsbCB7CisgIGZvbnQtc2l6ZTogNjUlOworfQoraDQsCisuaDQsCitoNSwKKy5oNSwKK2g2LAorLmg2IHsKKyAgbWFyZ2luLXRvcDogMTBweDsKKyAgbWFyZ2luLWJvdHRvbTogMTBweDsKK30KK2g0IHNtYWxsLAorLmg0IHNtYWxsLAoraDUgc21hbGwsCisuaDUgc21hbGwsCitoNiBzbWFsbCwKKy5oNiBzbWFsbCwKK2g0IC5zbWFsbCwKKy5oNCAuc21hbGwsCitoNSAuc21hbGwsCisuaDUgLnNtYWxsLAoraDYgLnNtYWxsLAorLmg2IC5zbWFsbCB7CisgIGZvbnQtc2l6ZTogNzUlOworfQoraDEsCisuaDEgeworICBmb250LXNpemU6IDM2cHg7Cit9CitoMiwKKy5oMiB7CisgIGZvbnQtc2l6ZTogMzBweDsKK30KK2gzLAorLmgzIHsKKyAgZm9udC1zaXplOiAyNHB4OworfQoraDQsCisuaDQgeworICBmb250LXNpemU6IDE4cHg7Cit9CitoNSwKKy5oNSB7CisgIGZvbnQtc2l6ZTogMTRweDsKK30KK2g2LAorLmg2IHsKKyAgZm9udC1zaXplOiAxMnB4OworfQorcCB7CisgIG1hcmdpbjogMCAwIDEwcHg7Cit9CisubGVhZCB7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgIGZvbnQtc2l6ZTogMTZweDsKKyAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgbGluZS1oZWlnaHQ6IDEuNDsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubGVhZCB7CisgICAgZm9udC1zaXplOiAyMXB4OworICB9Cit9CitzbWFsbCwKKy5zbWFsbCB7CisgIGZvbnQtc2l6ZTogODUlOworfQorbWFyaywKKy5tYXJrIHsKKyAgcGFkZGluZzogLjJlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMzsKK30KKy50ZXh0LWxlZnQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorLnRleHQtcmlnaHQgeworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKy50ZXh0LWNlbnRlciB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKy50ZXh0LWp1c3RpZnkgeworICB0ZXh0LWFsaWduOiBqdXN0aWZ5OworfQorLnRleHQtbm93cmFwIHsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKy50ZXh0LWxvd2VyY2FzZSB7CisgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7Cit9CisudGV4dC11cHBlcmNhc2UgeworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorLnRleHQtY2FwaXRhbGl6ZSB7CisgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOworfQorLnRleHQtbXV0ZWQgeworICBjb2xvcjogIzc3NzsKK30KKy50ZXh0LXByaW1hcnkgeworICBjb2xvcjogIzMzN2FiNzsKK30KK2EudGV4dC1wcmltYXJ5OmhvdmVyLAorYS50ZXh0LXByaW1hcnk6Zm9jdXMgeworICBjb2xvcjogIzI4NjA5MDsKK30KKy50ZXh0LXN1Y2Nlc3MgeworICBjb2xvcjogIzNjNzYzZDsKK30KK2EudGV4dC1zdWNjZXNzOmhvdmVyLAorYS50ZXh0LXN1Y2Nlc3M6Zm9jdXMgeworICBjb2xvcjogIzJiNTQyYzsKK30KKy50ZXh0LWluZm8geworICBjb2xvcjogIzMxNzA4ZjsKK30KK2EudGV4dC1pbmZvOmhvdmVyLAorYS50ZXh0LWluZm86Zm9jdXMgeworICBjb2xvcjogIzI0NTI2OTsKK30KKy50ZXh0LXdhcm5pbmcgeworICBjb2xvcjogIzhhNmQzYjsKK30KK2EudGV4dC13YXJuaW5nOmhvdmVyLAorYS50ZXh0LXdhcm5pbmc6Zm9jdXMgeworICBjb2xvcjogIzY2NTEyYzsKK30KKy50ZXh0LWRhbmdlciB7CisgIGNvbG9yOiAjYTk0NDQyOworfQorYS50ZXh0LWRhbmdlcjpob3ZlciwKK2EudGV4dC1kYW5nZXI6Zm9jdXMgeworICBjb2xvcjogIzg0MzUzNDsKK30KKy5iZy1wcmltYXJ5IHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7Cit9CithLmJnLXByaW1hcnk6aG92ZXIsCithLmJnLXByaW1hcnk6Zm9jdXMgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwOworfQorLmJnLXN1Y2Nlc3MgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4OworfQorYS5iZy1zdWNjZXNzOmhvdmVyLAorYS5iZy1zdWNjZXNzOmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2MxZTJiMzsKK30KKy5iZy1pbmZvIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNzsKK30KK2EuYmctaW5mbzpob3ZlciwKK2EuYmctaW5mbzpmb2N1cyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNhZmQ5ZWU7Cit9CisuYmctd2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7Cit9CithLmJnLXdhcm5pbmc6aG92ZXIsCithLmJnLXdhcm5pbmc6Zm9jdXMgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdlY2I1OworfQorLmJnLWRhbmdlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7Cit9CithLmJnLWRhbmdlcjpob3ZlciwKK2EuYmctZGFuZ2VyOmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2U0YjliOTsKK30KKy5wYWdlLWhlYWRlciB7CisgIHBhZGRpbmctYm90dG9tOiA5cHg7CisgIG1hcmdpbjogNDBweCAwIDIwcHg7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlOworfQordWwsCitvbCB7CisgIG1hcmdpbi10b3A6IDA7CisgIG1hcmdpbi1ib3R0b206IDEwcHg7Cit9Cit1bCB1bCwKK29sIHVsLAordWwgb2wsCitvbCBvbCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisubGlzdC11bnN0eWxlZCB7CisgIHBhZGRpbmctbGVmdDogMDsKKyAgbGlzdC1zdHlsZTogbm9uZTsKK30KKy5saXN0LWlubGluZSB7CisgIHBhZGRpbmctbGVmdDogMDsKKyAgbWFyZ2luLWxlZnQ6IC01cHg7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisubGlzdC1pbmxpbmUgPiBsaSB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgcGFkZGluZy1yaWdodDogNXB4OworICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KK2RsIHsKKyAgbWFyZ2luLXRvcDogMDsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKK30KK2R0LAorZGQgeworICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKK30KK2R0IHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CitkZCB7CisgIG1hcmdpbi1sZWZ0OiAwOworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5kbC1ob3Jpem9udGFsIGR0IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB3aWR0aDogMTYwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBjbGVhcjogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICB9CisgIC5kbC1ob3Jpem9udGFsIGRkIHsKKyAgICBtYXJnaW4tbGVmdDogMTgwcHg7CisgIH0KK30KK2FiYnJbdGl0bGVdLAorYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7CisgIGN1cnNvcjogaGVscDsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjNzc3OworfQorLmluaXRpYWxpc20geworICBmb250LXNpemU6IDkwJTsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KK2Jsb2NrcXVvdGUgeworICBwYWRkaW5nOiAxMHB4IDIwcHg7CisgIG1hcmdpbjogMCAwIDIwcHg7CisgIGZvbnQtc2l6ZTogMTcuNXB4OworICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNlZWU7Cit9CitibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCwKK2Jsb2NrcXVvdGUgdWw6bGFzdC1jaGlsZCwKK2Jsb2NrcXVvdGUgb2w6bGFzdC1jaGlsZCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CitibG9ja3F1b3RlIGZvb3RlciwKK2Jsb2NrcXVvdGUgc21hbGwsCitibG9ja3F1b3RlIC5zbWFsbCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmb250LXNpemU6IDgwJTsKKyAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7CisgIGNvbG9yOiAjNzc3OworfQorYmxvY2txdW90ZSBmb290ZXI6YmVmb3JlLAorYmxvY2txdW90ZSBzbWFsbDpiZWZvcmUsCitibG9ja3F1b3RlIC5zbWFsbDpiZWZvcmUgeworICBjb250ZW50OiAnXDIwMTQgXDAwQTAnOworfQorLmJsb2NrcXVvdGUtcmV2ZXJzZSwKK2Jsb2NrcXVvdGUucHVsbC1yaWdodCB7CisgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CisgIHBhZGRpbmctbGVmdDogMDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICNlZWU7CisgIGJvcmRlci1sZWZ0OiAwOworfQorLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YmVmb3JlLAorYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjpiZWZvcmUsCisuYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmJlZm9yZSwKK2Jsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmUsCisuYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDpiZWZvcmUsCitibG9ja3F1b3RlLnB1bGwtcmlnaHQgLnNtYWxsOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICcnOworfQorLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YWZ0ZXIsCitibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmFmdGVyLAorLmJsb2NrcXVvdGUtcmV2ZXJzZSBzbWFsbDphZnRlciwKK2Jsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDphZnRlciwKKy5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmFmdGVyLAorYmxvY2txdW90ZS5wdWxsLXJpZ2h0IC5zbWFsbDphZnRlciB7CisgIGNvbnRlbnQ6ICdcMDBBMCBcMjAxNCc7Cit9CithZGRyZXNzIHsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKK30KK2NvZGUsCitrYmQsCitwcmUsCitzYW1wIHsKKyAgZm9udC1mYW1pbHk6IE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiQ291cmllciBOZXciLCBtb25vc3BhY2U7Cit9Citjb2RlIHsKKyAgcGFkZGluZzogMnB4IDRweDsKKyAgZm9udC1zaXplOiA5MCU7CisgIGNvbG9yOiAjYzcyNTRlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmMmY0OworICBib3JkZXItcmFkaXVzOiA0cHg7Cit9CitrYmQgeworICBwYWRkaW5nOiAycHggNHB4OworICBmb250LXNpemU6IDkwJTsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CisgIGJvcmRlci1yYWRpdXM6IDNweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIC4yNSk7CisgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAuMjUpOworfQora2JkIGtiZCB7CisgIHBhZGRpbmc6IDA7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKKyAgICAgICAgICBib3gtc2hhZG93OiBub25lOworfQorcHJlIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDkuNXB4OworICBtYXJnaW46IDAgMCAxMHB4OworICBmb250LXNpemU6IDEzcHg7CisgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzOworICBjb2xvcjogIzMzMzsKKyAgd29yZC1icmVhazogYnJlYWstYWxsOworICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KK3ByZSBjb2RlIHsKKyAgcGFkZGluZzogMDsKKyAgZm9udC1zaXplOiBpbmhlcml0OworICBjb2xvcjogaW5oZXJpdDsKKyAgd2hpdGUtc3BhY2U6IHByZS13cmFwOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJhZGl1czogMDsKK30KKy5wcmUtc2Nyb2xsYWJsZSB7CisgIG1heC1oZWlnaHQ6IDM0MHB4OworICBvdmVyZmxvdy15OiBzY3JvbGw7Cit9CisuY29udGFpbmVyIHsKKyAgcGFkZGluZy1yaWdodDogMTVweDsKKyAgcGFkZGluZy1sZWZ0OiAxNXB4OworICBtYXJnaW4tcmlnaHQ6IGF1dG87CisgIG1hcmdpbi1sZWZ0OiBhdXRvOworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5jb250YWluZXIgeworICAgIHdpZHRoOiA3NTBweDsKKyAgfQorfQorQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7CisgIC5jb250YWluZXIgeworICAgIHdpZHRoOiA5NzBweDsKKyAgfQorfQorQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgeworICAuY29udGFpbmVyIHsKKyAgICB3aWR0aDogMTE3MHB4OworICB9Cit9CisuY29udGFpbmVyLWZsdWlkIHsKKyAgcGFkZGluZy1yaWdodDogMTVweDsKKyAgcGFkZGluZy1sZWZ0OiAxNXB4OworICBtYXJnaW4tcmlnaHQ6IGF1dG87CisgIG1hcmdpbi1sZWZ0OiBhdXRvOworfQorLnJvdyB7CisgIG1hcmdpbi1yaWdodDogLTE1cHg7CisgIG1hcmdpbi1sZWZ0OiAtMTVweDsKK30KKy5jb2wteHMtMSwgLmNvbC1zbS0xLCAuY29sLW1kLTEsIC5jb2wtbGctMSwgLmNvbC14cy0yLCAuY29sLXNtLTIsIC5jb2wtbWQtMiwgLmNvbC1sZy0yLCAuY29sLXhzLTMsIC5jb2wtc20tMywgLmNvbC1tZC0zLCAuY29sLWxnLTMsIC5jb2wteHMtNCwgLmNvbC1zbS00LCAuY29sLW1kLTQsIC5jb2wtbGctNCwgLmNvbC14cy01LCAuY29sLXNtLTUsIC5jb2wtbWQtNSwgLmNvbC1sZy01LCAuY29sLXhzLTYsIC5jb2wtc20tNiwgLmNvbC1tZC02LCAuY29sLWxnLTYsIC5jb2wteHMtNywgLmNvbC1zbS03LCAuY29sLW1kLTcsIC5jb2wtbGctNywgLmNvbC14cy04LCAuY29sLXNtLTgsIC5jb2wtbWQtOCwgLmNvbC1sZy04LCAuY29sLXhzLTksIC5jb2wtc20tOSwgLmNvbC1tZC05LCAuY29sLWxnLTksIC5jb2wteHMtMTAsIC5jb2wtc20tMTAsIC5jb2wtbWQtMTAsIC5jb2wtbGctMTAsIC5jb2wteHMtMTEsIC5jb2wtc20tMTEsIC5jb2wtbWQtMTEsIC5jb2wtbGctMTEsIC5jb2wteHMtMTIsIC5jb2wtc20tMTIsIC5jb2wtbWQtMTIsIC5jb2wtbGctMTIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIG1pbi1oZWlnaHQ6IDFweDsKKyAgcGFkZGluZy1yaWdodDogMTVweDsKKyAgcGFkZGluZy1sZWZ0OiAxNXB4OworfQorLmNvbC14cy0xLCAuY29sLXhzLTIsIC5jb2wteHMtMywgLmNvbC14cy00LCAuY29sLXhzLTUsIC5jb2wteHMtNiwgLmNvbC14cy03LCAuY29sLXhzLTgsIC5jb2wteHMtOSwgLmNvbC14cy0xMCwgLmNvbC14cy0xMSwgLmNvbC14cy0xMiB7CisgIGZsb2F0OiBsZWZ0OworfQorLmNvbC14cy0xMiB7CisgIHdpZHRoOiAxMDAlOworfQorLmNvbC14cy0xMSB7CisgIHdpZHRoOiA5MS42NjY2NjY2NyU7Cit9CisuY29sLXhzLTEwIHsKKyAgd2lkdGg6IDgzLjMzMzMzMzMzJTsKK30KKy5jb2wteHMtOSB7CisgIHdpZHRoOiA3NSU7Cit9CisuY29sLXhzLTggeworICB3aWR0aDogNjYuNjY2NjY2NjclOworfQorLmNvbC14cy03IHsKKyAgd2lkdGg6IDU4LjMzMzMzMzMzJTsKK30KKy5jb2wteHMtNiB7CisgIHdpZHRoOiA1MCU7Cit9CisuY29sLXhzLTUgeworICB3aWR0aDogNDEuNjY2NjY2NjclOworfQorLmNvbC14cy00IHsKKyAgd2lkdGg6IDMzLjMzMzMzMzMzJTsKK30KKy5jb2wteHMtMyB7CisgIHdpZHRoOiAyNSU7Cit9CisuY29sLXhzLTIgeworICB3aWR0aDogMTYuNjY2NjY2NjclOworfQorLmNvbC14cy0xIHsKKyAgd2lkdGg6IDguMzMzMzMzMzMlOworfQorLmNvbC14cy1wdWxsLTEyIHsKKyAgcmlnaHQ6IDEwMCU7Cit9CisuY29sLXhzLXB1bGwtMTEgeworICByaWdodDogOTEuNjY2NjY2NjclOworfQorLmNvbC14cy1wdWxsLTEwIHsKKyAgcmlnaHQ6IDgzLjMzMzMzMzMzJTsKK30KKy5jb2wteHMtcHVsbC05IHsKKyAgcmlnaHQ6IDc1JTsKK30KKy5jb2wteHMtcHVsbC04IHsKKyAgcmlnaHQ6IDY2LjY2NjY2NjY3JTsKK30KKy5jb2wteHMtcHVsbC03IHsKKyAgcmlnaHQ6IDU4LjMzMzMzMzMzJTsKK30KKy5jb2wteHMtcHVsbC02IHsKKyAgcmlnaHQ6IDUwJTsKK30KKy5jb2wteHMtcHVsbC01IHsKKyAgcmlnaHQ6IDQxLjY2NjY2NjY3JTsKK30KKy5jb2wteHMtcHVsbC00IHsKKyAgcmlnaHQ6IDMzLjMzMzMzMzMzJTsKK30KKy5jb2wteHMtcHVsbC0zIHsKKyAgcmlnaHQ6IDI1JTsKK30KKy5jb2wteHMtcHVsbC0yIHsKKyAgcmlnaHQ6IDE2LjY2NjY2NjY3JTsKK30KKy5jb2wteHMtcHVsbC0xIHsKKyAgcmlnaHQ6IDguMzMzMzMzMzMlOworfQorLmNvbC14cy1wdWxsLTAgeworICByaWdodDogYXV0bzsKK30KKy5jb2wteHMtcHVzaC0xMiB7CisgIGxlZnQ6IDEwMCU7Cit9CisuY29sLXhzLXB1c2gtMTEgeworICBsZWZ0OiA5MS42NjY2NjY2NyU7Cit9CisuY29sLXhzLXB1c2gtMTAgeworICBsZWZ0OiA4My4zMzMzMzMzMyU7Cit9CisuY29sLXhzLXB1c2gtOSB7CisgIGxlZnQ6IDc1JTsKK30KKy5jb2wteHMtcHVzaC04IHsKKyAgbGVmdDogNjYuNjY2NjY2NjclOworfQorLmNvbC14cy1wdXNoLTcgeworICBsZWZ0OiA1OC4zMzMzMzMzMyU7Cit9CisuY29sLXhzLXB1c2gtNiB7CisgIGxlZnQ6IDUwJTsKK30KKy5jb2wteHMtcHVzaC01IHsKKyAgbGVmdDogNDEuNjY2NjY2NjclOworfQorLmNvbC14cy1wdXNoLTQgeworICBsZWZ0OiAzMy4zMzMzMzMzMyU7Cit9CisuY29sLXhzLXB1c2gtMyB7CisgIGxlZnQ6IDI1JTsKK30KKy5jb2wteHMtcHVzaC0yIHsKKyAgbGVmdDogMTYuNjY2NjY2NjclOworfQorLmNvbC14cy1wdXNoLTEgeworICBsZWZ0OiA4LjMzMzMzMzMzJTsKK30KKy5jb2wteHMtcHVzaC0wIHsKKyAgbGVmdDogYXV0bzsKK30KKy5jb2wteHMtb2Zmc2V0LTEyIHsKKyAgbWFyZ2luLWxlZnQ6IDEwMCU7Cit9CisuY29sLXhzLW9mZnNldC0xMSB7CisgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NyU7Cit9CisuY29sLXhzLW9mZnNldC0xMCB7CisgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMyU7Cit9CisuY29sLXhzLW9mZnNldC05IHsKKyAgbWFyZ2luLWxlZnQ6IDc1JTsKK30KKy5jb2wteHMtb2Zmc2V0LTggeworICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjclOworfQorLmNvbC14cy1vZmZzZXQtNyB7CisgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMyU7Cit9CisuY29sLXhzLW9mZnNldC02IHsKKyAgbWFyZ2luLWxlZnQ6IDUwJTsKK30KKy5jb2wteHMtb2Zmc2V0LTUgeworICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjclOworfQorLmNvbC14cy1vZmZzZXQtNCB7CisgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMyU7Cit9CisuY29sLXhzLW9mZnNldC0zIHsKKyAgbWFyZ2luLWxlZnQ6IDI1JTsKK30KKy5jb2wteHMtb2Zmc2V0LTIgeworICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjclOworfQorLmNvbC14cy1vZmZzZXQtMSB7CisgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzJTsKK30KKy5jb2wteHMtb2Zmc2V0LTAgeworICBtYXJnaW4tbGVmdDogMDsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAuY29sLXNtLTEsIC5jb2wtc20tMiwgLmNvbC1zbS0zLCAuY29sLXNtLTQsIC5jb2wtc20tNSwgLmNvbC1zbS02LCAuY29sLXNtLTcsIC5jb2wtc20tOCwgLmNvbC1zbS05LCAuY29sLXNtLTEwLCAuY29sLXNtLTExLCAuY29sLXNtLTEyIHsKKyAgICBmbG9hdDogbGVmdDsKKyAgfQorICAuY29sLXNtLTEyIHsKKyAgICB3aWR0aDogMTAwJTsKKyAgfQorICAuY29sLXNtLTExIHsKKyAgICB3aWR0aDogOTEuNjY2NjY2NjclOworICB9CisgIC5jb2wtc20tMTAgeworICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS05IHsKKyAgICB3aWR0aDogNzUlOworICB9CisgIC5jb2wtc20tOCB7CisgICAgd2lkdGg6IDY2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLTcgeworICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS02IHsKKyAgICB3aWR0aDogNTAlOworICB9CisgIC5jb2wtc20tNSB7CisgICAgd2lkdGg6IDQxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLTQgeworICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS0zIHsKKyAgICB3aWR0aDogMjUlOworICB9CisgIC5jb2wtc20tMiB7CisgICAgd2lkdGg6IDE2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLTEgeworICAgIHdpZHRoOiA4LjMzMzMzMzMzJTsKKyAgfQorICAuY29sLXNtLXB1bGwtMTIgeworICAgIHJpZ2h0OiAxMDAlOworICB9CisgIC5jb2wtc20tcHVsbC0xMSB7CisgICAgcmlnaHQ6IDkxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLXB1bGwtMTAgeworICAgIHJpZ2h0OiA4My4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTkgeworICAgIHJpZ2h0OiA3NSU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTggeworICAgIHJpZ2h0OiA2Ni42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTcgeworICAgIHJpZ2h0OiA1OC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTYgeworICAgIHJpZ2h0OiA1MCU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTUgeworICAgIHJpZ2h0OiA0MS42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTQgeworICAgIHJpZ2h0OiAzMy4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTMgeworICAgIHJpZ2h0OiAyNSU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTIgeworICAgIHJpZ2h0OiAxNi42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTEgeworICAgIHJpZ2h0OiA4LjMzMzMzMzMzJTsKKyAgfQorICAuY29sLXNtLXB1bGwtMCB7CisgICAgcmlnaHQ6IGF1dG87CisgIH0KKyAgLmNvbC1zbS1wdXNoLTEyIHsKKyAgICBsZWZ0OiAxMDAlOworICB9CisgIC5jb2wtc20tcHVzaC0xMSB7CisgICAgbGVmdDogOTEuNjY2NjY2NjclOworICB9CisgIC5jb2wtc20tcHVzaC0xMCB7CisgICAgbGVmdDogODMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tcHVzaC05IHsKKyAgICBsZWZ0OiA3NSU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTggeworICAgIGxlZnQ6IDY2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLXB1c2gtNyB7CisgICAgbGVmdDogNTguMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tcHVzaC02IHsKKyAgICBsZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTUgeworICAgIGxlZnQ6IDQxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLXB1c2gtNCB7CisgICAgbGVmdDogMzMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tcHVzaC0zIHsKKyAgICBsZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTIgeworICAgIGxlZnQ6IDE2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLXB1c2gtMSB7CisgICAgbGVmdDogOC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTAgeworICAgIGxlZnQ6IGF1dG87CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtMTIgeworICAgIG1hcmdpbi1sZWZ0OiAxMDAlOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTExIHsKKyAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjclOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTEwIHsKKyAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTkgeworICAgIG1hcmdpbi1sZWZ0OiA3NSU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtOCB7CisgICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLW9mZnNldC03IHsKKyAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTYgeworICAgIG1hcmdpbi1sZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtNSB7CisgICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLW9mZnNldC00IHsKKyAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTMgeworICAgIG1hcmdpbi1sZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtMiB7CisgICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLW9mZnNldC0xIHsKKyAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtMCB7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgeworICAuY29sLW1kLTEsIC5jb2wtbWQtMiwgLmNvbC1tZC0zLCAuY29sLW1kLTQsIC5jb2wtbWQtNSwgLmNvbC1tZC02LCAuY29sLW1kLTcsIC5jb2wtbWQtOCwgLmNvbC1tZC05LCAuY29sLW1kLTEwLCAuY29sLW1kLTExLCAuY29sLW1kLTEyIHsKKyAgICBmbG9hdDogbGVmdDsKKyAgfQorICAuY29sLW1kLTEyIHsKKyAgICB3aWR0aDogMTAwJTsKKyAgfQorICAuY29sLW1kLTExIHsKKyAgICB3aWR0aDogOTEuNjY2NjY2NjclOworICB9CisgIC5jb2wtbWQtMTAgeworICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC05IHsKKyAgICB3aWR0aDogNzUlOworICB9CisgIC5jb2wtbWQtOCB7CisgICAgd2lkdGg6IDY2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLTcgeworICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC02IHsKKyAgICB3aWR0aDogNTAlOworICB9CisgIC5jb2wtbWQtNSB7CisgICAgd2lkdGg6IDQxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLTQgeworICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC0zIHsKKyAgICB3aWR0aDogMjUlOworICB9CisgIC5jb2wtbWQtMiB7CisgICAgd2lkdGg6IDE2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLTEgeworICAgIHdpZHRoOiA4LjMzMzMzMzMzJTsKKyAgfQorICAuY29sLW1kLXB1bGwtMTIgeworICAgIHJpZ2h0OiAxMDAlOworICB9CisgIC5jb2wtbWQtcHVsbC0xMSB7CisgICAgcmlnaHQ6IDkxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLXB1bGwtMTAgeworICAgIHJpZ2h0OiA4My4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTkgeworICAgIHJpZ2h0OiA3NSU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTggeworICAgIHJpZ2h0OiA2Ni42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTcgeworICAgIHJpZ2h0OiA1OC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTYgeworICAgIHJpZ2h0OiA1MCU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTUgeworICAgIHJpZ2h0OiA0MS42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTQgeworICAgIHJpZ2h0OiAzMy4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTMgeworICAgIHJpZ2h0OiAyNSU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTIgeworICAgIHJpZ2h0OiAxNi42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTEgeworICAgIHJpZ2h0OiA4LjMzMzMzMzMzJTsKKyAgfQorICAuY29sLW1kLXB1bGwtMCB7CisgICAgcmlnaHQ6IGF1dG87CisgIH0KKyAgLmNvbC1tZC1wdXNoLTEyIHsKKyAgICBsZWZ0OiAxMDAlOworICB9CisgIC5jb2wtbWQtcHVzaC0xMSB7CisgICAgbGVmdDogOTEuNjY2NjY2NjclOworICB9CisgIC5jb2wtbWQtcHVzaC0xMCB7CisgICAgbGVmdDogODMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtcHVzaC05IHsKKyAgICBsZWZ0OiA3NSU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTggeworICAgIGxlZnQ6IDY2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLXB1c2gtNyB7CisgICAgbGVmdDogNTguMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtcHVzaC02IHsKKyAgICBsZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTUgeworICAgIGxlZnQ6IDQxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLXB1c2gtNCB7CisgICAgbGVmdDogMzMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtcHVzaC0zIHsKKyAgICBsZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTIgeworICAgIGxlZnQ6IDE2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLXB1c2gtMSB7CisgICAgbGVmdDogOC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTAgeworICAgIGxlZnQ6IGF1dG87CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtMTIgeworICAgIG1hcmdpbi1sZWZ0OiAxMDAlOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTExIHsKKyAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjclOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTEwIHsKKyAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTkgeworICAgIG1hcmdpbi1sZWZ0OiA3NSU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtOCB7CisgICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLW9mZnNldC03IHsKKyAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTYgeworICAgIG1hcmdpbi1sZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtNSB7CisgICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLW9mZnNldC00IHsKKyAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTMgeworICAgIG1hcmdpbi1sZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtMiB7CisgICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLW9mZnNldC0xIHsKKyAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtMCB7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKKyAgLmNvbC1sZy0xLCAuY29sLWxnLTIsIC5jb2wtbGctMywgLmNvbC1sZy00LCAuY29sLWxnLTUsIC5jb2wtbGctNiwgLmNvbC1sZy03LCAuY29sLWxnLTgsIC5jb2wtbGctOSwgLmNvbC1sZy0xMCwgLmNvbC1sZy0xMSwgLmNvbC1sZy0xMiB7CisgICAgZmxvYXQ6IGxlZnQ7CisgIH0KKyAgLmNvbC1sZy0xMiB7CisgICAgd2lkdGg6IDEwMCU7CisgIH0KKyAgLmNvbC1sZy0xMSB7CisgICAgd2lkdGg6IDkxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLWxnLTEwIHsKKyAgICB3aWR0aDogODMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctOSB7CisgICAgd2lkdGg6IDc1JTsKKyAgfQorICAuY29sLWxnLTggeworICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy03IHsKKyAgICB3aWR0aDogNTguMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctNiB7CisgICAgd2lkdGg6IDUwJTsKKyAgfQorICAuY29sLWxnLTUgeworICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy00IHsKKyAgICB3aWR0aDogMzMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctMyB7CisgICAgd2lkdGg6IDI1JTsKKyAgfQorICAuY29sLWxnLTIgeworICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy0xIHsKKyAgICB3aWR0aDogOC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1sZy1wdWxsLTEyIHsKKyAgICByaWdodDogMTAwJTsKKyAgfQorICAuY29sLWxnLXB1bGwtMTEgeworICAgIHJpZ2h0OiA5MS42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy1wdWxsLTEwIHsKKyAgICByaWdodDogODMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctcHVsbC05IHsKKyAgICByaWdodDogNzUlOworICB9CisgIC5jb2wtbGctcHVsbC04IHsKKyAgICByaWdodDogNjYuNjY2NjY2NjclOworICB9CisgIC5jb2wtbGctcHVsbC03IHsKKyAgICByaWdodDogNTguMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctcHVsbC02IHsKKyAgICByaWdodDogNTAlOworICB9CisgIC5jb2wtbGctcHVsbC01IHsKKyAgICByaWdodDogNDEuNjY2NjY2NjclOworICB9CisgIC5jb2wtbGctcHVsbC00IHsKKyAgICByaWdodDogMzMuMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctcHVsbC0zIHsKKyAgICByaWdodDogMjUlOworICB9CisgIC5jb2wtbGctcHVsbC0yIHsKKyAgICByaWdodDogMTYuNjY2NjY2NjclOworICB9CisgIC5jb2wtbGctcHVsbC0xIHsKKyAgICByaWdodDogOC4zMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1sZy1wdWxsLTAgeworICAgIHJpZ2h0OiBhdXRvOworICB9CisgIC5jb2wtbGctcHVzaC0xMiB7CisgICAgbGVmdDogMTAwJTsKKyAgfQorICAuY29sLWxnLXB1c2gtMTEgeworICAgIGxlZnQ6IDkxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLWxnLXB1c2gtMTAgeworICAgIGxlZnQ6IDgzLjMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLXB1c2gtOSB7CisgICAgbGVmdDogNzUlOworICB9CisgIC5jb2wtbGctcHVzaC04IHsKKyAgICBsZWZ0OiA2Ni42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy1wdXNoLTcgeworICAgIGxlZnQ6IDU4LjMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLXB1c2gtNiB7CisgICAgbGVmdDogNTAlOworICB9CisgIC5jb2wtbGctcHVzaC01IHsKKyAgICBsZWZ0OiA0MS42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy1wdXNoLTQgeworICAgIGxlZnQ6IDMzLjMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLXB1c2gtMyB7CisgICAgbGVmdDogMjUlOworICB9CisgIC5jb2wtbGctcHVzaC0yIHsKKyAgICBsZWZ0OiAxNi42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy1wdXNoLTEgeworICAgIGxlZnQ6IDguMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctcHVzaC0wIHsKKyAgICBsZWZ0OiBhdXRvOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTEyIHsKKyAgICBtYXJnaW4tbGVmdDogMTAwJTsKKyAgfQorICAuY29sLWxnLW9mZnNldC0xMSB7CisgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY3JTsKKyAgfQorICAuY29sLWxnLW9mZnNldC0xMCB7CisgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLW9mZnNldC05IHsKKyAgICBtYXJnaW4tbGVmdDogNzUlOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTggeworICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy1vZmZzZXQtNyB7CisgICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLW9mZnNldC02IHsKKyAgICBtYXJnaW4tbGVmdDogNTAlOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTUgeworICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy1vZmZzZXQtNCB7CisgICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLW9mZnNldC0zIHsKKyAgICBtYXJnaW4tbGVmdDogMjUlOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTIgeworICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1sZy1vZmZzZXQtMSB7CisgICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMlOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTAgeworICAgIG1hcmdpbi1sZWZ0OiAwOworICB9Cit9Cit0YWJsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorY2FwdGlvbiB7CisgIHBhZGRpbmctdG9wOiA4cHg7CisgIHBhZGRpbmctYm90dG9tOiA4cHg7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWFsaWduOiBsZWZ0OworfQordGggeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorLnRhYmxlIHsKKyAgd2lkdGg6IDEwMCU7CisgIG1heC13aWR0aDogMTAwJTsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKK30KKy50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCwKKy50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCwKKy50YWJsZSA+IHRmb290ID4gdHIgPiB0aCwKKy50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCwKKy50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZCwKKy50YWJsZSA+IHRmb290ID4gdHIgPiB0ZCB7CisgIHBhZGRpbmc6IDhweDsKKyAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOworfQorLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoIHsKKyAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKKyAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7Cit9CisudGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLAorLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsCisudGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsCisudGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLAorLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsCisudGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQgeworICBib3JkZXItdG9wOiAwOworfQorLnRhYmxlID4gdGJvZHkgKyB0Ym9keSB7CisgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGRkOworfQorLnRhYmxlIC50YWJsZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cit9CisudGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRoLAorLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0aCwKKy50YWJsZS1jb25kZW5zZWQgPiB0Zm9vdCA+IHRyID4gdGgsCisudGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRkLAorLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0ZCwKKy50YWJsZS1jb25kZW5zZWQgPiB0Zm9vdCA+IHRyID4gdGQgeworICBwYWRkaW5nOiA1cHg7Cit9CisudGFibGUtYm9yZGVyZWQgeworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworfQorLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLAorLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoLAorLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoLAorLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkLAorLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkLAorLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkIHsKKyAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKK30KKy50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aCwKKy50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZCB7CisgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDsKK30KKy50YWJsZS1zdHJpcGVkID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTsKK30KKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OworfQordGFibGUgY29sW2NsYXNzKj0iY29sLSJdIHsKKyAgcG9zaXRpb246IHN0YXRpYzsKKyAgZGlzcGxheTogdGFibGUtY29sdW1uOworICBmbG9hdDogbm9uZTsKK30KK3RhYmxlIHRkW2NsYXNzKj0iY29sLSJdLAordGFibGUgdGhbY2xhc3MqPSJjb2wtIl0geworICBwb3NpdGlvbjogc3RhdGljOworICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICBmbG9hdDogbm9uZTsKK30KKy50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5hY3RpdmUsCisudGFibGUgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlLAorLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmFjdGl2ZSwKKy50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5hY3RpdmUsCisudGFibGUgPiB0Ym9keSA+IHRyID4gdGguYWN0aXZlLAorLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLmFjdGl2ZSwKKy50YWJsZSA+IHRoZWFkID4gdHIuYWN0aXZlID4gdGQsCisudGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRkLAorLnRhYmxlID4gdGZvb3QgPiB0ci5hY3RpdmUgPiB0ZCwKKy50YWJsZSA+IHRoZWFkID4gdHIuYWN0aXZlID4gdGgsCisudGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRoLAorLnRhYmxlID4gdGZvb3QgPiB0ci5hY3RpdmUgPiB0aCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7Cit9CisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlOmhvdmVyLAorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmFjdGl2ZTpob3ZlciwKKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuYWN0aXZlOmhvdmVyID4gdGQsCisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLmFjdGl2ZSwKKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuYWN0aXZlOmhvdmVyID4gdGggeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlOGU4OworfQorLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLnN1Y2Nlc3MsCisudGFibGUgPiB0Ym9keSA+IHRyID4gdGQuc3VjY2VzcywKKy50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5zdWNjZXNzLAorLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLnN1Y2Nlc3MsCisudGFibGUgPiB0Ym9keSA+IHRyID4gdGguc3VjY2VzcywKKy50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5zdWNjZXNzLAorLnRhYmxlID4gdGhlYWQgPiB0ci5zdWNjZXNzID4gdGQsCisudGFibGUgPiB0Ym9keSA+IHRyLnN1Y2Nlc3MgPiB0ZCwKKy50YWJsZSA+IHRmb290ID4gdHIuc3VjY2VzcyA+IHRkLAorLnRhYmxlID4gdGhlYWQgPiB0ci5zdWNjZXNzID4gdGgsCisudGFibGUgPiB0Ym9keSA+IHRyLnN1Y2Nlc3MgPiB0aCwKKy50YWJsZSA+IHRmb290ID4gdHIuc3VjY2VzcyA+IHRoIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODsKK30KKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5zdWNjZXNzOmhvdmVyLAorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLnN1Y2Nlc3M6aG92ZXIsCisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0ZCwKKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuc3VjY2VzcywKKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuc3VjY2Vzczpob3ZlciA+IHRoIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2QwZTljNjsKK30KKy50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5pbmZvLAorLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLmluZm8sCisudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuaW5mbywKKy50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5pbmZvLAorLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmluZm8sCisudGFibGUgPiB0Zm9vdCA+IHRyID4gdGguaW5mbywKKy50YWJsZSA+IHRoZWFkID4gdHIuaW5mbyA+IHRkLAorLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGQsCisudGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0ZCwKKy50YWJsZSA+IHRoZWFkID4gdHIuaW5mbyA+IHRoLAorLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGgsCisudGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0aCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7Cit9CisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuaW5mbzpob3ZlciwKKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5pbmZvOmhvdmVyLAorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGQsCisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLmluZm8sCisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmluZm86aG92ZXIgPiB0aCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNjNGUzZjM7Cit9CisudGFibGUgPiB0aGVhZCA+IHRyID4gdGQud2FybmluZywKKy50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nLAorLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLndhcm5pbmcsCisudGFibGUgPiB0aGVhZCA+IHRyID4gdGgud2FybmluZywKKy50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC53YXJuaW5nLAorLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLndhcm5pbmcsCisudGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0ZCwKKy50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRkLAorLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGQsCisudGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0aCwKKy50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRoLAorLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGggeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzOworfQorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLndhcm5pbmc6aG92ZXIsCisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGgud2FybmluZzpob3ZlciwKKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIud2FybmluZzpob3ZlciA+IHRkLAorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC53YXJuaW5nLAorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci53YXJuaW5nOmhvdmVyID4gdGggeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmMmNjOworfQorLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLmRhbmdlciwKKy50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXIsCisudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuZGFuZ2VyLAorLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLmRhbmdlciwKKy50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5kYW5nZXIsCisudGFibGUgPiB0Zm9vdCA+IHRyID4gdGguZGFuZ2VyLAorLnRhYmxlID4gdGhlYWQgPiB0ci5kYW5nZXIgPiB0ZCwKKy50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGQsCisudGFibGUgPiB0Zm9vdCA+IHRyLmRhbmdlciA+IHRkLAorLnRhYmxlID4gdGhlYWQgPiB0ci5kYW5nZXIgPiB0aCwKKy50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGgsCisudGFibGUgPiB0Zm9vdCA+IHRyLmRhbmdlciA+IHRoIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTsKK30KKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXI6aG92ZXIsCisudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguZGFuZ2VyOmhvdmVyLAorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0ZCwKKy50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuZGFuZ2VyLAorLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0aCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjY2M7Cit9CisudGFibGUtcmVzcG9uc2l2ZSB7CisgIG1pbi1oZWlnaHQ6IC4wMSU7CisgIG92ZXJmbG93LXg6IGF1dG87Cit9CitAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgeworICAudGFibGUtcmVzcG9uc2l2ZSB7CisgICAgd2lkdGg6IDEwMCU7CisgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKKyAgICBvdmVyZmxvdy15OiBoaWRkZW47CisgICAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKKyAgfQorICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgfQorICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGgsCisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLAorICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGQsCisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkIHsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICB9CisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkIHsKKyAgICBib3JkZXI6IDA7CisgIH0KKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsCisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLAorICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsCisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLAorICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7CisgICAgYm9yZGVyLWxlZnQ6IDA7CisgIH0KKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6bGFzdC1jaGlsZCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6bGFzdC1jaGlsZCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6bGFzdC1jaGlsZCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6bGFzdC1jaGlsZCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCwKKyAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6bGFzdC1jaGlsZCB7CisgICAgYm9yZGVyLXJpZ2h0OiAwOworICB9CisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGgsCisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgsCisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsCisgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQgeworICAgIGJvcmRlci1ib3R0b206IDA7CisgIH0KK30KK2ZpZWxkc2V0IHsKKyAgbWluLXdpZHRoOiAwOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIGJvcmRlcjogMDsKK30KK2xlZ2VuZCB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKKyAgZm9udC1zaXplOiAyMXB4OworICBsaW5lLWhlaWdodDogaW5oZXJpdDsKKyAgY29sb3I6ICMzMzM7CisgIGJvcmRlcjogMDsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7Cit9CitsYWJlbCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWF4LXdpZHRoOiAxMDAlOworICBtYXJnaW4tYm90dG9tOiA1cHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQoraW5wdXRbdHlwZT0ic2VhcmNoIl0geworICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworfQoraW5wdXRbdHlwZT0icmFkaW8iXSwKK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geworICBtYXJnaW46IDRweCAwIDA7CisgIG1hcmdpbi10b3A6IDFweCBcOTsKKyAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKK30KK2lucHV0W3R5cGU9ImZpbGUiXSB7CisgIGRpc3BsYXk6IGJsb2NrOworfQoraW5wdXRbdHlwZT0icmFuZ2UiXSB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwJTsKK30KK3NlbGVjdFttdWx0aXBsZV0sCitzZWxlY3Rbc2l6ZV0geworICBoZWlnaHQ6IGF1dG87Cit9CitpbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXMsCitpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLAoraW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1cyB7CisgIG91dGxpbmU6IHRoaW4gZG90dGVkOworICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7CisgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OworfQorb3V0cHV0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmctdG9wOiA3cHg7CisgIGZvbnQtc2l6ZTogMTRweDsKKyAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7CisgIGNvbG9yOiAjNTU1OworfQorLmZvcm0tY29udHJvbCB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAzNHB4OworICBwYWRkaW5nOiA2cHggMTJweDsKKyAgZm9udC1zaXplOiAxNHB4OworICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKKyAgY29sb3I6ICM1NTU7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KTsKKyAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KTsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgLXdlYmtpdC1ib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7CisgICAgICAgLW8tdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1czsKKyAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzOworfQorLmZvcm0tY29udHJvbDpmb2N1cyB7CisgIGJvcmRlci1jb2xvcjogIzY2YWZlOTsKKyAgb3V0bGluZTogMDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwgMCAwIDhweCByZ2JhKDEwMiwgMTc1LCAyMzMsIC42KTsKKyAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwgMCAwIDhweCByZ2JhKDEwMiwgMTc1LCAyMzMsIC42KTsKK30KKy5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIgeworICBjb2xvcjogIzk5OTsKKyAgb3BhY2l0eTogMTsKK30KKy5mb3JtLWNvbnRyb2w6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgY29sb3I6ICM5OTk7Cit9CisuZm9ybS1jb250cm9sOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgY29sb3I6ICM5OTk7Cit9CisuZm9ybS1jb250cm9sOjotbXMtZXhwYW5kIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJvcmRlcjogMDsKK30KKy5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLAorLmZvcm0tY29udHJvbFtyZWFkb25seV0sCitmaWVsZHNldFtkaXNhYmxlZF0gLmZvcm0tY29udHJvbCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIG9wYWNpdHk6IDE7Cit9CisuZm9ybS1jb250cm9sW2Rpc2FibGVkXSwKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9sIHsKKyAgY3Vyc29yOiBub3QtYWxsb3dlZDsKK30KK3RleHRhcmVhLmZvcm0tY29udHJvbCB7CisgIGhlaWdodDogYXV0bzsKK30KK2lucHV0W3R5cGU9InNlYXJjaCJdIHsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworfQorQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMCkgeworICBpbnB1dFt0eXBlPSJkYXRlIl0uZm9ybS1jb250cm9sLAorICBpbnB1dFt0eXBlPSJ0aW1lIl0uZm9ybS1jb250cm9sLAorICBpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdLmZvcm0tY29udHJvbCwKKyAgaW5wdXRbdHlwZT0ibW9udGgiXS5mb3JtLWNvbnRyb2wgeworICAgIGxpbmUtaGVpZ2h0OiAzNHB4OworICB9CisgIGlucHV0W3R5cGU9ImRhdGUiXS5pbnB1dC1zbSwKKyAgaW5wdXRbdHlwZT0idGltZSJdLmlucHV0LXNtLAorICBpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdLmlucHV0LXNtLAorICBpbnB1dFt0eXBlPSJtb250aCJdLmlucHV0LXNtLAorICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT0iZGF0ZSJdLAorICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT0idGltZSJdLAorICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSwKKyAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9Im1vbnRoIl0geworICAgIGxpbmUtaGVpZ2h0OiAzMHB4OworICB9CisgIGlucHV0W3R5cGU9ImRhdGUiXS5pbnB1dC1sZywKKyAgaW5wdXRbdHlwZT0idGltZSJdLmlucHV0LWxnLAorICBpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdLmlucHV0LWxnLAorICBpbnB1dFt0eXBlPSJtb250aCJdLmlucHV0LWxnLAorICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT0iZGF0ZSJdLAorICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT0idGltZSJdLAorICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSwKKyAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9Im1vbnRoIl0geworICAgIGxpbmUtaGVpZ2h0OiA0NnB4OworICB9Cit9CisuZm9ybS1ncm91cCB7CisgIG1hcmdpbi1ib3R0b206IDE1cHg7Cit9CisucmFkaW8sCisuY2hlY2tib3ggeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXJnaW4tdG9wOiAxMHB4OworICBtYXJnaW4tYm90dG9tOiAxMHB4OworfQorLnJhZGlvIGxhYmVsLAorLmNoZWNrYm94IGxhYmVsIHsKKyAgbWluLWhlaWdodDogMjBweDsKKyAgcGFkZGluZy1sZWZ0OiAyMHB4OworICBtYXJnaW4tYm90dG9tOiAwOworICBmb250LXdlaWdodDogbm9ybWFsOworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwKKy5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT0icmFkaW8iXSwKKy5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJdLAorLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBtYXJnaW4tdG9wOiA0cHggXDk7CisgIG1hcmdpbi1sZWZ0OiAtMjBweDsKK30KKy5yYWRpbyArIC5yYWRpbywKKy5jaGVja2JveCArIC5jaGVja2JveCB7CisgIG1hcmdpbi10b3A6IC01cHg7Cit9CisucmFkaW8taW5saW5lLAorLmNoZWNrYm94LWlubGluZSB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBwYWRkaW5nLWxlZnQ6IDIwcHg7CisgIG1hcmdpbi1ib3R0b206IDA7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgIGN1cnNvcjogcG9pbnRlcjsKK30KKy5yYWRpby1pbmxpbmUgKyAucmFkaW8taW5saW5lLAorLmNoZWNrYm94LWlubGluZSArIC5jaGVja2JveC1pbmxpbmUgeworICBtYXJnaW4tdG9wOiAwOworICBtYXJnaW4tbGVmdDogMTBweDsKK30KK2lucHV0W3R5cGU9InJhZGlvIl1bZGlzYWJsZWRdLAoraW5wdXRbdHlwZT0iY2hlY2tib3giXVtkaXNhYmxlZF0sCitpbnB1dFt0eXBlPSJyYWRpbyJdLmRpc2FibGVkLAoraW5wdXRbdHlwZT0iY2hlY2tib3giXS5kaXNhYmxlZCwKK2ZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPSJyYWRpbyJdLAorZmllbGRzZXRbZGlzYWJsZWRdIGlucHV0W3R5cGU9ImNoZWNrYm94Il0geworICBjdXJzb3I6IG5vdC1hbGxvd2VkOworfQorLnJhZGlvLWlubGluZS5kaXNhYmxlZCwKKy5jaGVja2JveC1pbmxpbmUuZGlzYWJsZWQsCitmaWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvLWlubGluZSwKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuY2hlY2tib3gtaW5saW5lIHsKKyAgY3Vyc29yOiBub3QtYWxsb3dlZDsKK30KKy5yYWRpby5kaXNhYmxlZCBsYWJlbCwKKy5jaGVja2JveC5kaXNhYmxlZCBsYWJlbCwKK2ZpZWxkc2V0W2Rpc2FibGVkXSAucmFkaW8gbGFiZWwsCitmaWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94IGxhYmVsIHsKKyAgY3Vyc29yOiBub3QtYWxsb3dlZDsKK30KKy5mb3JtLWNvbnRyb2wtc3RhdGljIHsKKyAgbWluLWhlaWdodDogMzRweDsKKyAgcGFkZGluZy10b3A6IDdweDsKKyAgcGFkZGluZy1ib3R0b206IDdweDsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy5mb3JtLWNvbnRyb2wtc3RhdGljLmlucHV0LWxnLAorLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtc20geworICBwYWRkaW5nLXJpZ2h0OiAwOworICBwYWRkaW5nLWxlZnQ6IDA7Cit9CisuaW5wdXQtc20geworICBoZWlnaHQ6IDMwcHg7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICBmb250LXNpemU6IDEycHg7CisgIGxpbmUtaGVpZ2h0OiAxLjU7CisgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KK3NlbGVjdC5pbnB1dC1zbSB7CisgIGhlaWdodDogMzBweDsKKyAgbGluZS1oZWlnaHQ6IDMwcHg7Cit9Cit0ZXh0YXJlYS5pbnB1dC1zbSwKK3NlbGVjdFttdWx0aXBsZV0uaW5wdXQtc20geworICBoZWlnaHQ6IGF1dG87Cit9CisuZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sIHsKKyAgaGVpZ2h0OiAzMHB4OworICBwYWRkaW5nOiA1cHggMTBweDsKKyAgZm9udC1zaXplOiAxMnB4OworICBsaW5lLWhlaWdodDogMS41OworICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisuZm9ybS1ncm91cC1zbSBzZWxlY3QuZm9ybS1jb250cm9sIHsKKyAgaGVpZ2h0OiAzMHB4OworICBsaW5lLWhlaWdodDogMzBweDsKK30KKy5mb3JtLWdyb3VwLXNtIHRleHRhcmVhLmZvcm0tY29udHJvbCwKKy5mb3JtLWdyb3VwLXNtIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHsKKyAgaGVpZ2h0OiBhdXRvOworfQorLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbC1zdGF0aWMgeworICBoZWlnaHQ6IDMwcHg7CisgIG1pbi1oZWlnaHQ6IDMycHg7CisgIHBhZGRpbmc6IDZweCAxMHB4OworICBmb250LXNpemU6IDEycHg7CisgIGxpbmUtaGVpZ2h0OiAxLjU7Cit9CisuaW5wdXQtbGcgeworICBoZWlnaHQ6IDQ2cHg7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKKyAgZm9udC1zaXplOiAxOHB4OworICBsaW5lLWhlaWdodDogMS4zMzMzMzMzOworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9CitzZWxlY3QuaW5wdXQtbGcgeworICBoZWlnaHQ6IDQ2cHg7CisgIGxpbmUtaGVpZ2h0OiA0NnB4OworfQordGV4dGFyZWEuaW5wdXQtbGcsCitzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWxnIHsKKyAgaGVpZ2h0OiBhdXRvOworfQorLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCB7CisgIGhlaWdodDogNDZweDsKKyAgcGFkZGluZzogMTBweCAxNnB4OworICBmb250LXNpemU6IDE4cHg7CisgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7CisgIGJvcmRlci1yYWRpdXM6IDZweDsKK30KKy5mb3JtLWdyb3VwLWxnIHNlbGVjdC5mb3JtLWNvbnRyb2wgeworICBoZWlnaHQ6IDQ2cHg7CisgIGxpbmUtaGVpZ2h0OiA0NnB4OworfQorLmZvcm0tZ3JvdXAtbGcgdGV4dGFyZWEuZm9ybS1jb250cm9sLAorLmZvcm0tZ3JvdXAtbGcgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wgeworICBoZWlnaHQ6IGF1dG87Cit9CisuZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sLXN0YXRpYyB7CisgIGhlaWdodDogNDZweDsKKyAgbWluLWhlaWdodDogMzhweDsKKyAgcGFkZGluZzogMTFweCAxNnB4OworICBmb250LXNpemU6IDE4cHg7CisgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7Cit9CisuaGFzLWZlZWRiYWNrIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworfQorLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sIHsKKyAgcGFkZGluZy1yaWdodDogNDIuNXB4OworfQorLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwOworICByaWdodDogMDsKKyAgei1pbmRleDogMjsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAzNHB4OworICBoZWlnaHQ6IDM0cHg7CisgIGxpbmUtaGVpZ2h0OiAzNHB4OworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHBvaW50ZXItZXZlbnRzOiBub25lOworfQorLmlucHV0LWxnICsgLmZvcm0tY29udHJvbC1mZWVkYmFjaywKKy5pbnB1dC1ncm91cC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssCisuZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgIHdpZHRoOiA0NnB4OworICBoZWlnaHQ6IDQ2cHg7CisgIGxpbmUtaGVpZ2h0OiA0NnB4OworfQorLmlucHV0LXNtICsgLmZvcm0tY29udHJvbC1mZWVkYmFjaywKKy5pbnB1dC1ncm91cC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssCisuZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgIHdpZHRoOiAzMHB4OworICBoZWlnaHQ6IDMwcHg7CisgIGxpbmUtaGVpZ2h0OiAzMHB4OworfQorLmhhcy1zdWNjZXNzIC5oZWxwLWJsb2NrLAorLmhhcy1zdWNjZXNzIC5jb250cm9sLWxhYmVsLAorLmhhcy1zdWNjZXNzIC5yYWRpbywKKy5oYXMtc3VjY2VzcyAuY2hlY2tib3gsCisuaGFzLXN1Y2Nlc3MgLnJhZGlvLWlubGluZSwKKy5oYXMtc3VjY2VzcyAuY2hlY2tib3gtaW5saW5lLAorLmhhcy1zdWNjZXNzLnJhZGlvIGxhYmVsLAorLmhhcy1zdWNjZXNzLmNoZWNrYm94IGxhYmVsLAorLmhhcy1zdWNjZXNzLnJhZGlvLWlubGluZSBsYWJlbCwKKy5oYXMtc3VjY2Vzcy5jaGVja2JveC1pbmxpbmUgbGFiZWwgeworICBjb2xvcjogIzNjNzYzZDsKK30KKy5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sIHsKKyAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkOworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpOworICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpOworfQorLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2w6Zm9jdXMgeworICBib3JkZXItY29sb3I6ICMyYjU0MmM7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSksIDAgMCA2cHggIzY3YjE2ODsKKyAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KSwgMCAwIDZweCAjNjdiMTY4OworfQorLmhhcy1zdWNjZXNzIC5pbnB1dC1ncm91cC1hZGRvbiB7CisgIGNvbG9yOiAjM2M3NjNkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4OworICBib3JkZXItY29sb3I6ICMzYzc2M2Q7Cit9CisuaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgIGNvbG9yOiAjM2M3NjNkOworfQorLmhhcy13YXJuaW5nIC5oZWxwLWJsb2NrLAorLmhhcy13YXJuaW5nIC5jb250cm9sLWxhYmVsLAorLmhhcy13YXJuaW5nIC5yYWRpbywKKy5oYXMtd2FybmluZyAuY2hlY2tib3gsCisuaGFzLXdhcm5pbmcgLnJhZGlvLWlubGluZSwKKy5oYXMtd2FybmluZyAuY2hlY2tib3gtaW5saW5lLAorLmhhcy13YXJuaW5nLnJhZGlvIGxhYmVsLAorLmhhcy13YXJuaW5nLmNoZWNrYm94IGxhYmVsLAorLmhhcy13YXJuaW5nLnJhZGlvLWlubGluZSBsYWJlbCwKKy5oYXMtd2FybmluZy5jaGVja2JveC1pbmxpbmUgbGFiZWwgeworICBjb2xvcjogIzhhNmQzYjsKK30KKy5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sIHsKKyAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiOworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpOworICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpOworfQorLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2w6Zm9jdXMgeworICBib3JkZXItY29sb3I6ICM2NjUxMmM7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSksIDAgMCA2cHggI2MwYTE2YjsKKyAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KSwgMCAwIDZweCAjYzBhMTZiOworfQorLmhhcy13YXJuaW5nIC5pbnB1dC1ncm91cC1hZGRvbiB7CisgIGNvbG9yOiAjOGE2ZDNiOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzOworICBib3JkZXItY29sb3I6ICM4YTZkM2I7Cit9CisuaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgIGNvbG9yOiAjOGE2ZDNiOworfQorLmhhcy1lcnJvciAuaGVscC1ibG9jaywKKy5oYXMtZXJyb3IgLmNvbnRyb2wtbGFiZWwsCisuaGFzLWVycm9yIC5yYWRpbywKKy5oYXMtZXJyb3IgLmNoZWNrYm94LAorLmhhcy1lcnJvciAucmFkaW8taW5saW5lLAorLmhhcy1lcnJvciAuY2hlY2tib3gtaW5saW5lLAorLmhhcy1lcnJvci5yYWRpbyBsYWJlbCwKKy5oYXMtZXJyb3IuY2hlY2tib3ggbGFiZWwsCisuaGFzLWVycm9yLnJhZGlvLWlubGluZSBsYWJlbCwKKy5oYXMtZXJyb3IuY2hlY2tib3gtaW5saW5lIGxhYmVsIHsKKyAgY29sb3I6ICNhOTQ0NDI7Cit9CisuaGFzLWVycm9yIC5mb3JtLWNvbnRyb2wgeworICBib3JkZXItY29sb3I6ICNhOTQ0NDI7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSk7CisgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSk7Cit9CisuaGFzLWVycm9yIC5mb3JtLWNvbnRyb2w6Zm9jdXMgeworICBib3JkZXItY29sb3I6ICM4NDM1MzQ7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSksIDAgMCA2cHggI2NlODQ4MzsKKyAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KSwgMCAwIDZweCAjY2U4NDgzOworfQorLmhhcy1lcnJvciAuaW5wdXQtZ3JvdXAtYWRkb24geworICBjb2xvcjogI2E5NDQ0MjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTsKKyAgYm9yZGVyLWNvbG9yOiAjYTk0NDQyOworfQorLmhhcy1lcnJvciAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHsKKyAgY29sb3I6ICNhOTQ0NDI7Cit9CisuaGFzLWZlZWRiYWNrIGxhYmVsIH4gLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgIHRvcDogMjVweDsKK30KKy5oYXMtZmVlZGJhY2sgbGFiZWwuc3Itb25seSB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sgeworICB0b3A6IDA7Cit9CisuaGVscC1ibG9jayB7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXJnaW4tdG9wOiA1cHg7CisgIG1hcmdpbi1ib3R0b206IDEwcHg7CisgIGNvbG9yOiAjNzM3MzczOworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5mb3JtLWlubGluZSAuZm9ybS1ncm91cCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgfQorICAuZm9ybS1pbmxpbmUgLmZvcm0tY29udHJvbCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHdpZHRoOiBhdXRvOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgIH0KKyAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtc3RhdGljIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIH0KKyAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCB7CisgICAgZGlzcGxheTogaW5saW5lLXRhYmxlOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgIH0KKyAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24sCisgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0biwKKyAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHsKKyAgICB3aWR0aDogYXV0bzsKKyAgfQorICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwID4gLmZvcm0tY29udHJvbCB7CisgICAgd2lkdGg6IDEwMCU7CisgIH0KKyAgLmZvcm0taW5saW5lIC5jb250cm9sLWxhYmVsIHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgIH0KKyAgLmZvcm0taW5saW5lIC5yYWRpbywKKyAgLmZvcm0taW5saW5lIC5jaGVja2JveCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICB9CisgIC5mb3JtLWlubGluZSAucmFkaW8gbGFiZWwsCisgIC5mb3JtLWlubGluZSAuY2hlY2tib3ggbGFiZWwgeworICAgIHBhZGRpbmctbGVmdDogMDsKKyAgfQorICAuZm9ybS1pbmxpbmUgLnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sCisgIC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbi1sZWZ0OiAwOworICB9CisgIC5mb3JtLWlubGluZSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sgeworICAgIHRvcDogMDsKKyAgfQorfQorLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sCisuZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCwKKy5mb3JtLWhvcml6b250YWwgLnJhZGlvLWlubGluZSwKKy5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LWlubGluZSB7CisgIHBhZGRpbmctdG9wOiA3cHg7CisgIG1hcmdpbi10b3A6IDA7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisuZm9ybS1ob3Jpem9udGFsIC5yYWRpbywKKy5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94IHsKKyAgbWluLWhlaWdodDogMjdweDsKK30KKy5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAgeworICBtYXJnaW4tcmlnaHQ6IC0xNXB4OworICBtYXJnaW4tbGVmdDogLTE1cHg7Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbCB7CisgICAgcGFkZGluZy10b3A6IDdweDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICB9Cit9CisuZm9ybS1ob3Jpem9udGFsIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgIHJpZ2h0OiAxNXB4OworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtbGcgLmNvbnRyb2wtbGFiZWwgeworICAgIHBhZGRpbmctdG9wOiAxMXB4OworICAgIGZvbnQtc2l6ZTogMThweDsKKyAgfQorfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtc20gLmNvbnRyb2wtbGFiZWwgeworICAgIHBhZGRpbmctdG9wOiA2cHg7CisgICAgZm9udC1zaXplOiAxMnB4OworICB9Cit9CisuYnRuIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBwYWRkaW5nOiA2cHggMTJweDsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgZm9udC1zaXplOiAxNHB4OworICBmb250LXdlaWdodDogbm9ybWFsOworICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICAtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CisgICAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsKKyAgY3Vyc29yOiBwb2ludGVyOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOworICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOworICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworfQorLmJ0bjpmb2N1cywKKy5idG46YWN0aXZlOmZvY3VzLAorLmJ0bi5hY3RpdmU6Zm9jdXMsCisuYnRuLmZvY3VzLAorLmJ0bjphY3RpdmUuZm9jdXMsCisuYnRuLmFjdGl2ZS5mb2N1cyB7CisgIG91dGxpbmU6IHRoaW4gZG90dGVkOworICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7CisgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OworfQorLmJ0bjpob3ZlciwKKy5idG46Zm9jdXMsCisuYnRuLmZvY3VzIHsKKyAgY29sb3I6ICMzMzM7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKy5idG46YWN0aXZlLAorLmJ0bi5hY3RpdmUgeworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworICBvdXRsaW5lOiAwOworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIC4xMjUpOworICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIC4xMjUpOworfQorLmJ0bi5kaXNhYmxlZCwKKy5idG5bZGlzYWJsZWRdLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4geworICBjdXJzb3I6IG5vdC1hbGxvd2VkOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjUpOworICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CisgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKKyAgb3BhY2l0eTogLjY1OworfQorYS5idG4uZGlzYWJsZWQsCitmaWVsZHNldFtkaXNhYmxlZF0gYS5idG4geworICBwb2ludGVyLWV2ZW50czogbm9uZTsKK30KKy5idG4tZGVmYXVsdCB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNjY2M7Cit9CisuYnRuLWRlZmF1bHQ6Zm9jdXMsCisuYnRuLWRlZmF1bHQuZm9jdXMgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsKKyAgYm9yZGVyLWNvbG9yOiAjOGM4YzhjOworfQorLmJ0bi1kZWZhdWx0OmhvdmVyIHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7CisgIGJvcmRlci1jb2xvcjogI2FkYWRhZDsKK30KKy5idG4tZGVmYXVsdDphY3RpdmUsCisuYnRuLWRlZmF1bHQuYWN0aXZlLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7CisgIGJvcmRlci1jb2xvcjogI2FkYWRhZDsKK30KKy5idG4tZGVmYXVsdDphY3RpdmU6aG92ZXIsCisuYnRuLWRlZmF1bHQuYWN0aXZlOmhvdmVyLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0OmhvdmVyLAorLmJ0bi1kZWZhdWx0OmFjdGl2ZTpmb2N1cywKKy5idG4tZGVmYXVsdC5hY3RpdmU6Zm9jdXMsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQ6Zm9jdXMsCisuYnRuLWRlZmF1bHQ6YWN0aXZlLmZvY3VzLAorLmJ0bi1kZWZhdWx0LmFjdGl2ZS5mb2N1cywKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdC5mb2N1cyB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRkNGQ0OworICBib3JkZXItY29sb3I6ICM4YzhjOGM7Cit9CisuYnRuLWRlZmF1bHQ6YWN0aXZlLAorLmJ0bi1kZWZhdWx0LmFjdGl2ZSwKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisuYnRuLWRlZmF1bHQuZGlzYWJsZWQ6aG92ZXIsCisuYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmhvdmVyLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpob3ZlciwKKy5idG4tZGVmYXVsdC5kaXNhYmxlZDpmb2N1cywKKy5idG4tZGVmYXVsdFtkaXNhYmxlZF06Zm9jdXMsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmZvY3VzLAorLmJ0bi1kZWZhdWx0LmRpc2FibGVkLmZvY3VzLAorLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXS5mb2N1cywKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuZm9jdXMgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNjY2M7Cit9CisuYnRuLWRlZmF1bHQgLmJhZGdlIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7Cit9CisuYnRuLXByaW1hcnkgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNzsKKyAgYm9yZGVyLWNvbG9yOiAjMmU2ZGE0OworfQorLmJ0bi1wcmltYXJ5OmZvY3VzLAorLmJ0bi1wcmltYXJ5LmZvY3VzIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMyODYwOTA7CisgIGJvcmRlci1jb2xvcjogIzEyMmI0MDsKK30KKy5idG4tcHJpbWFyeTpob3ZlciB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwOworICBib3JkZXItY29sb3I6ICMyMDRkNzQ7Cit9CisuYnRuLXByaW1hcnk6YWN0aXZlLAorLmJ0bi1wcmltYXJ5LmFjdGl2ZSwKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeSB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwOworICBib3JkZXItY29sb3I6ICMyMDRkNzQ7Cit9CisuYnRuLXByaW1hcnk6YWN0aXZlOmhvdmVyLAorLmJ0bi1wcmltYXJ5LmFjdGl2ZTpob3ZlciwKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeTpob3ZlciwKKy5idG4tcHJpbWFyeTphY3RpdmU6Zm9jdXMsCisuYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5OmZvY3VzLAorLmJ0bi1wcmltYXJ5OmFjdGl2ZS5mb2N1cywKKy5idG4tcHJpbWFyeS5hY3RpdmUuZm9jdXMsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnkuZm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzIwNGQ3NDsKKyAgYm9yZGVyLWNvbG9yOiAjMTIyYjQwOworfQorLmJ0bi1wcmltYXJ5OmFjdGl2ZSwKKy5idG4tcHJpbWFyeS5hY3RpdmUsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnkgeworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmhvdmVyLAorLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpob3ZlciwKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6aG92ZXIsCisuYnRuLXByaW1hcnkuZGlzYWJsZWQ6Zm9jdXMsCisuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTpmb2N1cywKKy5idG4tcHJpbWFyeS5kaXNhYmxlZC5mb2N1cywKKy5idG4tcHJpbWFyeVtkaXNhYmxlZF0uZm9jdXMsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNzsKKyAgYm9yZGVyLWNvbG9yOiAjMmU2ZGE0OworfQorLmJ0bi1wcmltYXJ5IC5iYWRnZSB7CisgIGNvbG9yOiAjMzM3YWI3OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworfQorLmJ0bi1zdWNjZXNzIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7CisgIGJvcmRlci1jb2xvcjogIzRjYWU0YzsKK30KKy5idG4tc3VjY2Vzczpmb2N1cywKKy5idG4tc3VjY2Vzcy5mb2N1cyB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0OworICBib3JkZXItY29sb3I6ICMyNTU2MjU7Cit9CisuYnRuLXN1Y2Nlc3M6aG92ZXIgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDsKKyAgYm9yZGVyLWNvbG9yOiAjMzk4NDM5OworfQorLmJ0bi1zdWNjZXNzOmFjdGl2ZSwKKy5idG4tc3VjY2Vzcy5hY3RpdmUsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3MgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDsKKyAgYm9yZGVyLWNvbG9yOiAjMzk4NDM5OworfQorLmJ0bi1zdWNjZXNzOmFjdGl2ZTpob3ZlciwKKy5idG4tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3M6aG92ZXIsCisuYnRuLXN1Y2Nlc3M6YWN0aXZlOmZvY3VzLAorLmJ0bi1zdWNjZXNzLmFjdGl2ZTpmb2N1cywKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2Vzczpmb2N1cywKKy5idG4tc3VjY2VzczphY3RpdmUuZm9jdXMsCisuYnRuLXN1Y2Nlc3MuYWN0aXZlLmZvY3VzLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzLmZvY3VzIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzOTg0Mzk7CisgIGJvcmRlci1jb2xvcjogIzI1NTYyNTsKK30KKy5idG4tc3VjY2VzczphY3RpdmUsCisuYnRuLXN1Y2Nlc3MuYWN0aXZlLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKy5idG4tc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwKKy5idG4tc3VjY2Vzc1tkaXNhYmxlZF06aG92ZXIsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmhvdmVyLAorLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmZvY3VzLAorLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpmb2N1cywKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3M6Zm9jdXMsCisuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQuZm9jdXMsCisuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmZvY3VzLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcy5mb2N1cyB7CisgIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7CisgIGJvcmRlci1jb2xvcjogIzRjYWU0YzsKK30KKy5idG4tc3VjY2VzcyAuYmFkZ2UgeworICBjb2xvcjogIzVjYjg1YzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKK30KKy5idG4taW5mbyB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlOworICBib3JkZXItY29sb3I6ICM0NmI4ZGE7Cit9CisuYnRuLWluZm86Zm9jdXMsCisuYnRuLWluZm8uZm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMxYjBkNTsKKyAgYm9yZGVyLWNvbG9yOiAjMWI2ZDg1OworfQorLmJ0bi1pbmZvOmhvdmVyIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7CisgIGJvcmRlci1jb2xvcjogIzI2OWFiYzsKK30KKy5idG4taW5mbzphY3RpdmUsCisuYnRuLWluZm8uYWN0aXZlLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7CisgIGJvcmRlci1jb2xvcjogIzI2OWFiYzsKK30KKy5idG4taW5mbzphY3RpdmU6aG92ZXIsCisuYnRuLWluZm8uYWN0aXZlOmhvdmVyLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvOmhvdmVyLAorLmJ0bi1pbmZvOmFjdGl2ZTpmb2N1cywKKy5idG4taW5mby5hY3RpdmU6Zm9jdXMsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWluZm86Zm9jdXMsCisuYnRuLWluZm86YWN0aXZlLmZvY3VzLAorLmJ0bi1pbmZvLmFjdGl2ZS5mb2N1cywKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mby5mb2N1cyB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjY5YWJjOworICBib3JkZXItY29sb3I6ICMxYjZkODU7Cit9CisuYnRuLWluZm86YWN0aXZlLAorLmJ0bi1pbmZvLmFjdGl2ZSwKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mbyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsCisuYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpob3ZlciwKKy5idG4taW5mby5kaXNhYmxlZDpmb2N1cywKKy5idG4taW5mb1tkaXNhYmxlZF06Zm9jdXMsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmZvY3VzLAorLmJ0bi1pbmZvLmRpc2FibGVkLmZvY3VzLAorLmJ0bi1pbmZvW2Rpc2FibGVkXS5mb2N1cywKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8uZm9jdXMgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlOworICBib3JkZXItY29sb3I6ICM0NmI4ZGE7Cit9CisuYnRuLWluZm8gLmJhZGdlIHsKKyAgY29sb3I6ICM1YmMwZGU7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cit9CisuYnRuLXdhcm5pbmcgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwYWQ0ZTsKKyAgYm9yZGVyLWNvbG9yOiAjZWVhMjM2OworfQorLmJ0bi13YXJuaW5nOmZvY3VzLAorLmJ0bi13YXJuaW5nLmZvY3VzIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7CisgIGJvcmRlci1jb2xvcjogIzk4NWYwZDsKK30KKy5idG4td2FybmluZzpob3ZlciB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmOworICBib3JkZXItY29sb3I6ICNkNTg1MTI7Cit9CisuYnRuLXdhcm5pbmc6YWN0aXZlLAorLmJ0bi13YXJuaW5nLmFjdGl2ZSwKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZyB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmOworICBib3JkZXItY29sb3I6ICNkNTg1MTI7Cit9CisuYnRuLXdhcm5pbmc6YWN0aXZlOmhvdmVyLAorLmJ0bi13YXJuaW5nLmFjdGl2ZTpob3ZlciwKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZzpob3ZlciwKKy5idG4td2FybmluZzphY3RpdmU6Zm9jdXMsCisuYnRuLXdhcm5pbmcuYWN0aXZlOmZvY3VzLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nOmZvY3VzLAorLmJ0bi13YXJuaW5nOmFjdGl2ZS5mb2N1cywKKy5idG4td2FybmluZy5hY3RpdmUuZm9jdXMsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmcuZm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q1ODUxMjsKKyAgYm9yZGVyLWNvbG9yOiAjOTg1ZjBkOworfQorLmJ0bi13YXJuaW5nOmFjdGl2ZSwKKy5idG4td2FybmluZy5hY3RpdmUsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmcgeworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorLmJ0bi13YXJuaW5nLmRpc2FibGVkOmhvdmVyLAorLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTpob3ZlciwKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6aG92ZXIsCisuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6Zm9jdXMsCisuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzpmb2N1cywKKy5idG4td2FybmluZy5kaXNhYmxlZC5mb2N1cywKKy5idG4td2FybmluZ1tkaXNhYmxlZF0uZm9jdXMsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwYWQ0ZTsKKyAgYm9yZGVyLWNvbG9yOiAjZWVhMjM2OworfQorLmJ0bi13YXJuaW5nIC5iYWRnZSB7CisgIGNvbG9yOiAjZjBhZDRlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworfQorLmJ0bi1kYW5nZXIgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0ZjsKKyAgYm9yZGVyLWNvbG9yOiAjZDQzZjNhOworfQorLmJ0bi1kYW5nZXI6Zm9jdXMsCisuYnRuLWRhbmdlci5mb2N1cyB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjOworICBib3JkZXItY29sb3I6ICM3NjFjMTk7Cit9CisuYnRuLWRhbmdlcjpob3ZlciB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjOworICBib3JkZXItY29sb3I6ICNhYzI5MjU7Cit9CisuYnRuLWRhbmdlcjphY3RpdmUsCisuYnRuLWRhbmdlci5hY3RpdmUsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlciB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjOworICBib3JkZXItY29sb3I6ICNhYzI5MjU7Cit9CisuYnRuLWRhbmdlcjphY3RpdmU6aG92ZXIsCisuYnRuLWRhbmdlci5hY3RpdmU6aG92ZXIsCisub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlcjpob3ZlciwKKy5idG4tZGFuZ2VyOmFjdGl2ZTpmb2N1cywKKy5idG4tZGFuZ2VyLmFjdGl2ZTpmb2N1cywKKy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyOmZvY3VzLAorLmJ0bi1kYW5nZXI6YWN0aXZlLmZvY3VzLAorLmJ0bi1kYW5nZXIuYWN0aXZlLmZvY3VzLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXIuZm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2FjMjkyNTsKKyAgYm9yZGVyLWNvbG9yOiAjNzYxYzE5OworfQorLmJ0bi1kYW5nZXI6YWN0aXZlLAorLmJ0bi1kYW5nZXIuYWN0aXZlLAorLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXIgeworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsCisuYnRuLWRhbmdlcltkaXNhYmxlZF06aG92ZXIsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6aG92ZXIsCisuYnRuLWRhbmdlci5kaXNhYmxlZDpmb2N1cywKKy5idG4tZGFuZ2VyW2Rpc2FibGVkXTpmb2N1cywKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjpmb2N1cywKKy5idG4tZGFuZ2VyLmRpc2FibGVkLmZvY3VzLAorLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLmZvY3VzLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0ZjsKKyAgYm9yZGVyLWNvbG9yOiAjZDQzZjNhOworfQorLmJ0bi1kYW5nZXIgLmJhZGdlIHsKKyAgY29sb3I6ICNkOTUzNGY7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cit9CisuYnRuLWxpbmsgeworICBmb250LXdlaWdodDogbm9ybWFsOworICBjb2xvcjogIzMzN2FiNzsKKyAgYm9yZGVyLXJhZGl1czogMDsKK30KKy5idG4tbGluaywKKy5idG4tbGluazphY3RpdmUsCisuYnRuLWxpbmsuYWN0aXZlLAorLmJ0bi1saW5rW2Rpc2FibGVkXSwKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbmsgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOworICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7Cit9CisuYnRuLWxpbmssCisuYnRuLWxpbms6aG92ZXIsCisuYnRuLWxpbms6Zm9jdXMsCisuYnRuLWxpbms6YWN0aXZlIHsKKyAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKy5idG4tbGluazpob3ZlciwKKy5idG4tbGluazpmb2N1cyB7CisgIGNvbG9yOiAjMjM1MjdjOworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluazpob3ZlciwKKy5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rOmZvY3VzIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKy5idG4tbGcsCisuYnRuLWdyb3VwLWxnID4gLmJ0biB7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKKyAgZm9udC1zaXplOiAxOHB4OworICBsaW5lLWhlaWdodDogMS4zMzMzMzMzOworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9CisuYnRuLXNtLAorLmJ0bi1ncm91cC1zbSA+IC5idG4geworICBwYWRkaW5nOiA1cHggMTBweDsKKyAgZm9udC1zaXplOiAxMnB4OworICBsaW5lLWhlaWdodDogMS41OworICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisuYnRuLXhzLAorLmJ0bi1ncm91cC14cyA+IC5idG4geworICBwYWRkaW5nOiAxcHggNXB4OworICBmb250LXNpemU6IDEycHg7CisgIGxpbmUtaGVpZ2h0OiAxLjU7CisgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKy5idG4tYmxvY2sgeworICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6IDEwMCU7Cit9CisuYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7CisgIG1hcmdpbi10b3A6IDVweDsKK30KK2lucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi1ibG9jaywKK2lucHV0W3R5cGU9InJlc2V0Il0uYnRuLWJsb2NrLAoraW5wdXRbdHlwZT0iYnV0dG9uIl0uYnRuLWJsb2NrIHsKKyAgd2lkdGg6IDEwMCU7Cit9CisuZmFkZSB7CisgIG9wYWNpdHk6IDA7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAuMTVzIGxpbmVhcjsKKyAgICAgICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IC4xNXMgbGluZWFyOworICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjE1cyBsaW5lYXI7Cit9CisuZmFkZS5pbiB7CisgIG9wYWNpdHk6IDE7Cit9CisuY29sbGFwc2UgeworICBkaXNwbGF5OiBub25lOworfQorLmNvbGxhcHNlLmluIHsKKyAgZGlzcGxheTogYmxvY2s7Cit9Cit0ci5jb2xsYXBzZS5pbiB7CisgIGRpc3BsYXk6IHRhYmxlLXJvdzsKK30KK3Rib2R5LmNvbGxhcHNlLmluIHsKKyAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOworfQorLmNvbGxhcHNpbmcgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGhlaWdodDogMDsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKKyAgICAgICAtby10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKKyAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKKyAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAuMzVzOworICAgICAgIC1vLXRyYW5zaXRpb24tZHVyYXRpb246IC4zNXM7CisgICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjM1czsKKyAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7CisgICAgICAgLW8tdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5OworICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGhlaWdodCwgdmlzaWJpbGl0eTsKK30KKy5jYXJldCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgd2lkdGg6IDA7CisgIGhlaWdodDogMDsKKyAgbWFyZ2luLWxlZnQ6IDJweDsKKyAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgYm9yZGVyLXRvcDogNHB4IGRhc2hlZDsKKyAgYm9yZGVyLXRvcDogNHB4IHNvbGlkIFw5OworICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKK30KKy5kcm9wdXAsCisuZHJvcGRvd24geworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHsKKyAgb3V0bGluZTogMDsKK30KKy5kcm9wZG93bi1tZW51IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDEwMCU7CisgIGxlZnQ6IDA7CisgIHotaW5kZXg6IDEwMDA7CisgIGRpc3BsYXk6IG5vbmU7CisgIGZsb2F0OiBsZWZ0OworICBtaW4td2lkdGg6IDE2MHB4OworICBwYWRkaW5nOiA1cHggMDsKKyAgbWFyZ2luOiAycHggMCAwOworICBmb250LXNpemU6IDE0cHg7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGxpc3Qtc3R5bGU6IG5vbmU7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKKyAgICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIC4xNSk7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgLjE3NSk7CisgICAgICAgICAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIC4xNzUpOworfQorLmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodCB7CisgIHJpZ2h0OiAwOworICBsZWZ0OiBhdXRvOworfQorLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgeworICBoZWlnaHQ6IDFweDsKKyAgbWFyZ2luOiA5cHggMDsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTsKK30KKy5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDNweCAyMHB4OworICBjbGVhcjogYm90aDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7CisgIGNvbG9yOiAjMzMzOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworfQorLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsCisuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7CisgIGNvbG9yOiAjMjYyNjI2OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7Cit9CisuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLAorLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwKKy5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3OworICBvdXRsaW5lOiAwOworfQorLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhLAorLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLAorLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHsKKyAgY29sb3I6ICM3Nzc7Cit9CisuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsCisuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMgeworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIGN1cnNvcjogbm90LWFsbG93ZWQ7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpOworfQorLm9wZW4gPiAuZHJvcGRvd24tbWVudSB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLm9wZW4gPiBhIHsKKyAgb3V0bGluZTogMDsKK30KKy5kcm9wZG93bi1tZW51LXJpZ2h0IHsKKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IGF1dG87Cit9CisuZHJvcGRvd24tbWVudS1sZWZ0IHsKKyAgcmlnaHQ6IGF1dG87CisgIGxlZnQ6IDA7Cit9CisuZHJvcGRvd24taGVhZGVyIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDNweCAyMHB4OworICBmb250LXNpemU6IDEycHg7CisgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzOworICBjb2xvcjogIzc3NzsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKy5kcm9wZG93bi1iYWNrZHJvcCB7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgdG9wOiAwOworICByaWdodDogMDsKKyAgYm90dG9tOiAwOworICBsZWZ0OiAwOworICB6LWluZGV4OiA5OTA7Cit9CisucHVsbC1yaWdodCA+IC5kcm9wZG93bi1tZW51IHsKKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IGF1dG87Cit9CisuZHJvcHVwIC5jYXJldCwKKy5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuY2FyZXQgeworICBjb250ZW50OiAiIjsKKyAgYm9yZGVyLXRvcDogMDsKKyAgYm9yZGVyLWJvdHRvbTogNHB4IGRhc2hlZDsKKyAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIFw5OworfQorLmRyb3B1cCAuZHJvcGRvd24tbWVudSwKKy5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7CisgIHRvcDogYXV0bzsKKyAgYm90dG9tOiAxMDAlOworICBtYXJnaW4tYm90dG9tOiAycHg7Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudSB7CisgICAgcmlnaHQ6IDA7CisgICAgbGVmdDogYXV0bzsKKyAgfQorICAubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51LWxlZnQgeworICAgIHJpZ2h0OiBhdXRvOworICAgIGxlZnQ6IDA7CisgIH0KK30KKy5idG4tZ3JvdXAsCisuYnRuLWdyb3VwLXZlcnRpY2FsIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisuYnRuLWdyb3VwID4gLmJ0biwKKy5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBmbG9hdDogbGVmdDsKK30KKy5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLAorLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46aG92ZXIsCisuYnRuLWdyb3VwID4gLmJ0bjpmb2N1cywKKy5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmZvY3VzLAorLmJ0bi1ncm91cCA+IC5idG46YWN0aXZlLAorLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46YWN0aXZlLAorLmJ0bi1ncm91cCA+IC5idG4uYWN0aXZlLAorLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHsKKyAgei1pbmRleDogMjsKK30KKy5idG4tZ3JvdXAgLmJ0biArIC5idG4sCisuYnRuLWdyb3VwIC5idG4gKyAuYnRuLWdyb3VwLAorLmJ0bi1ncm91cCAuYnRuLWdyb3VwICsgLmJ0biwKKy5idG4tZ3JvdXAgLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAgeworICBtYXJnaW4tbGVmdDogLTFweDsKK30KKy5idG4tdG9vbGJhciB7CisgIG1hcmdpbi1sZWZ0OiAtNXB4OworfQorLmJ0bi10b29sYmFyIC5idG4sCisuYnRuLXRvb2xiYXIgLmJ0bi1ncm91cCwKKy5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAgeworICBmbG9hdDogbGVmdDsKK30KKy5idG4tdG9vbGJhciA+IC5idG4sCisuYnRuLXRvb2xiYXIgPiAuYnRuLWdyb3VwLAorLmJ0bi10b29sYmFyID4gLmlucHV0LWdyb3VwIHsKKyAgbWFyZ2luLWxlZnQ6IDVweDsKK30KKy5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHsKKyAgYm9yZGVyLXJhZGl1czogMDsKK30KKy5idG4tZ3JvdXAgPiAuYnRuOmZpcnN0LWNoaWxkIHsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CisuYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOworICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKK30KKy5idG4tZ3JvdXAgPiAuYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksCisuYnRuLWdyb3VwID4gLmRyb3Bkb3duLXRvZ2dsZTpub3QoOmZpcnN0LWNoaWxkKSB7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7Cit9CisuYnRuLWdyb3VwID4gLmJ0bi1ncm91cCB7CisgIGZsb2F0OiBsZWZ0OworfQorLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4geworICBib3JkZXItcmFkaXVzOiAwOworfQorLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5idG46bGFzdC1jaGlsZCwKKy5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuZHJvcGRvd24tdG9nZ2xlIHsKKyAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOworfQorLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQgeworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOworfQorLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSwKKy5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHsKKyAgb3V0bGluZTogMDsKK30KKy5idG4tZ3JvdXAgPiAuYnRuICsgLmRyb3Bkb3duLXRvZ2dsZSB7CisgIHBhZGRpbmctcmlnaHQ6IDhweDsKKyAgcGFkZGluZy1sZWZ0OiA4cHg7Cit9CisuYnRuLWdyb3VwID4gLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUgeworICBwYWRkaW5nLXJpZ2h0OiAxMnB4OworICBwYWRkaW5nLWxlZnQ6IDEycHg7Cit9CisuYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgLjEyNSk7CisgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgLjEyNSk7Cit9CisuYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tbGluayB7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKKyAgICAgICAgICBib3gtc2hhZG93OiBub25lOworfQorLmJ0biAuY2FyZXQgeworICBtYXJnaW4tbGVmdDogMDsKK30KKy5idG4tbGcgLmNhcmV0IHsKKyAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7CisgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7Cit9CisuZHJvcHVwIC5idG4tbGcgLmNhcmV0IHsKKyAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7Cit9CisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biwKKy5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwLAorLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgPiAuYnRuIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZsb2F0OiBub25lOworICB3aWR0aDogMTAwJTsKKyAgbWF4LXdpZHRoOiAxMDAlOworfQorLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgPiAuYnRuIHsKKyAgZmxvYXQ6IG5vbmU7Cit9CisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biArIC5idG4sCisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biArIC5idG4tZ3JvdXAsCisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCArIC5idG4sCisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAgeworICBtYXJnaW4tdG9wOiAtMXB4OworICBtYXJnaW4tbGVmdDogMDsKK30KKy5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgeworICBib3JkZXItcmFkaXVzOiAwOworfQorLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsKKyAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7Cit9CisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKKyAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsKK30KKy5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHsKKyAgYm9yZGVyLXJhZGl1czogMDsKK30KKy5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuOmxhc3QtY2hpbGQsCisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmRyb3Bkb3duLXRvZ2dsZSB7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOworfQorLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQgeworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKK30KKy5idG4tZ3JvdXAtanVzdGlmaWVkIHsKKyAgZGlzcGxheTogdGFibGU7CisgIHdpZHRoOiAxMDAlOworICB0YWJsZS1sYXlvdXQ6IGZpeGVkOworICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworfQorLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLAorLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIHsKKyAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiAxJTsKK30KKy5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bi1ncm91cCAuYnRuIHsKKyAgd2lkdGg6IDEwMCU7Cit9CisuYnRuLWdyb3VwLWp1c3RpZmllZCA+IC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgeworICBsZWZ0OiBhdXRvOworfQorW2RhdGEtdG9nZ2xlPSJidXR0b25zIl0gPiAuYnRuIGlucHV0W3R5cGU9InJhZGlvIl0sCitbZGF0YS10b2dnbGU9ImJ1dHRvbnMiXSA+IC5idG4tZ3JvdXAgPiAuYnRuIGlucHV0W3R5cGU9InJhZGlvIl0sCitbZGF0YS10b2dnbGU9ImJ1dHRvbnMiXSA+IC5idG4gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwKK1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTsKKyAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cit9CisuaW5wdXQtZ3JvdXAgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IHRhYmxlOworICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworfQorLmlucHV0LWdyb3VwW2NsYXNzKj0iY29sLSJdIHsKKyAgZmxvYXQ6IG5vbmU7CisgIHBhZGRpbmctcmlnaHQ6IDA7CisgIHBhZGRpbmctbGVmdDogMDsKK30KKy5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB6LWluZGV4OiAyOworICBmbG9hdDogbGVmdDsKKyAgd2lkdGg6IDEwMCU7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmb2N1cyB7CisgIHotaW5kZXg6IDM7Cit9CisuaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLAorLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLAorLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4geworICBoZWlnaHQ6IDQ2cHg7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKKyAgZm9udC1zaXplOiAxOHB4OworICBsaW5lLWhlaWdodDogMS4zMzMzMzMzOworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9CitzZWxlY3QuaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLAorc2VsZWN0LmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLAorc2VsZWN0LmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4geworICBoZWlnaHQ6IDQ2cHg7CisgIGxpbmUtaGVpZ2h0OiA0NnB4OworfQordGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLAordGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sCit0ZXh0YXJlYS5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuLAorc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wsCitzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLAorc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHsKKyAgaGVpZ2h0OiBhdXRvOworfQorLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCwKKy5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbiwKKy5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHsKKyAgaGVpZ2h0OiAzMHB4OworICBwYWRkaW5nOiA1cHggMTBweDsKKyAgZm9udC1zaXplOiAxMnB4OworICBsaW5lLWhlaWdodDogMS41OworICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CitzZWxlY3QuaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLAorc2VsZWN0LmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLAorc2VsZWN0LmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4geworICBoZWlnaHQ6IDMwcHg7CisgIGxpbmUtaGVpZ2h0OiAzMHB4OworfQordGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLAordGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sCit0ZXh0YXJlYS5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuLAorc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsCitzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLAorc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHsKKyAgaGVpZ2h0OiBhdXRvOworfQorLmlucHV0LWdyb3VwLWFkZG9uLAorLmlucHV0LWdyb3VwLWJ0biwKKy5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHsKKyAgZGlzcGxheTogdGFibGUtY2VsbDsKK30KKy5pbnB1dC1ncm91cC1hZGRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLAorLmlucHV0LWdyb3VwLWJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLAorLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7CisgIGJvcmRlci1yYWRpdXM6IDA7Cit9CisuaW5wdXQtZ3JvdXAtYWRkb24sCisuaW5wdXQtZ3JvdXAtYnRuIHsKKyAgd2lkdGg6IDElOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorLmlucHV0LWdyb3VwLWFkZG9uIHsKKyAgcGFkZGluZzogNnB4IDEycHg7CisgIGZvbnQtc2l6ZTogMTRweDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIGNvbG9yOiAjNTU1OworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKy5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1zbSB7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICBmb250LXNpemU6IDEycHg7CisgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKy5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1sZyB7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKKyAgZm9udC1zaXplOiAxOHB4OworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9CisuaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT0icmFkaW8iXSwKKy5pbnB1dC1ncm91cC1hZGRvbiBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgbWFyZ2luLXRvcDogMDsKK30KKy5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLAorLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLAorLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sCisuaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sCisuaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSwKKy5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksCisuaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHsKKyAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOworfQorLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkIHsKKyAgYm9yZGVyLXJpZ2h0OiAwOworfQorLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6bGFzdC1jaGlsZCwKKy5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkLAorLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0biwKKy5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAgPiAuYnRuLAorLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSwKKy5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLAorLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKKyAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKK30KKy5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHsKKyAgYm9yZGVyLWxlZnQ6IDA7Cit9CisuaW5wdXQtZ3JvdXAtYnRuIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBmb250LXNpemU6IDA7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKy5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmJ0biB7CisgIG1hcmdpbi1sZWZ0OiAtMXB4OworfQorLmlucHV0LWdyb3VwLWJ0biA+IC5idG46aG92ZXIsCisuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjpmb2N1cywKKy5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmFjdGl2ZSB7CisgIHotaW5kZXg6IDI7Cit9CisuaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0biwKKy5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwIHsKKyAgbWFyZ2luLXJpZ2h0OiAtMXB4OworfQorLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0biwKKy5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAgeworICB6LWluZGV4OiAyOworICBtYXJnaW4tbGVmdDogLTFweDsKK30KKy5uYXYgeworICBwYWRkaW5nLWxlZnQ6IDA7CisgIG1hcmdpbi1ib3R0b206IDA7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisubmF2ID4gbGkgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLm5hdiA+IGxpID4gYSB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDEwcHggMTVweDsKK30KKy5uYXYgPiBsaSA+IGE6aG92ZXIsCisubmF2ID4gbGkgPiBhOmZvY3VzIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorLm5hdiA+IGxpLmRpc2FibGVkID4gYSB7CisgIGNvbG9yOiAjNzc3OworfQorLm5hdiA+IGxpLmRpc2FibGVkID4gYTpob3ZlciwKKy5uYXYgPiBsaS5kaXNhYmxlZCA+IGE6Zm9jdXMgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBjdXJzb3I6IG5vdC1hbGxvd2VkOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKy5uYXYgLm9wZW4gPiBhLAorLm5hdiAub3BlbiA+IGE6aG92ZXIsCisubmF2IC5vcGVuID4gYTpmb2N1cyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzMzN2FiNzsKK30KKy5uYXYgLm5hdi1kaXZpZGVyIHsKKyAgaGVpZ2h0OiAxcHg7CisgIG1hcmdpbjogOXB4IDA7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7Cit9CisubmF2ID4gbGkgPiBhID4gaW1nIHsKKyAgbWF4LXdpZHRoOiBub25lOworfQorLm5hdi10YWJzIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7Cit9CisubmF2LXRhYnMgPiBsaSB7CisgIGZsb2F0OiBsZWZ0OworICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorLm5hdi10YWJzID4gbGkgPiBhIHsKKyAgbWFyZ2luLXJpZ2h0OiAycHg7CisgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzOworICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7Cit9CisubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIgeworICBib3JkZXItY29sb3I6ICNlZWUgI2VlZSAjZGRkOworfQorLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYSwKKy5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsCisubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhOmZvY3VzIHsKKyAgY29sb3I6ICM1NTU7CisgIGN1cnNvcjogZGVmYXVsdDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisubmF2LXRhYnMubmF2LWp1c3RpZmllZCB7CisgIHdpZHRoOiAxMDAlOworICBib3JkZXItYm90dG9tOiAwOworfQorLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSB7CisgIGZsb2F0OiBub25lOworfQorLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEgeworICBtYXJnaW4tYm90dG9tOiA1cHg7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKy5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHsKKyAgdG9wOiBhdXRvOworICBsZWZ0OiBhdXRvOworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgeworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgd2lkdGg6IDElOworICB9CisgIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICB9Cit9CisubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7CisgIG1hcmdpbi1yaWdodDogMDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworfQorLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSwKKy5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsCisubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHsKKyAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7CisgICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7CisgIH0KKyAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSwKKyAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlciwKKyAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7CisgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKKyAgfQorfQorLm5hdi1waWxscyA+IGxpIHsKKyAgZmxvYXQ6IGxlZnQ7Cit9CisubmF2LXBpbGxzID4gbGkgPiBhIHsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworfQorLm5hdi1waWxscyA+IGxpICsgbGkgeworICBtYXJnaW4tbGVmdDogMnB4OworfQorLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGEsCisubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYTpob3ZlciwKKy5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhOmZvY3VzIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7Cit9CisubmF2LXN0YWNrZWQgPiBsaSB7CisgIGZsb2F0OiBub25lOworfQorLm5hdi1zdGFja2VkID4gbGkgKyBsaSB7CisgIG1hcmdpbi10b3A6IDJweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CisubmF2LWp1c3RpZmllZCB7CisgIHdpZHRoOiAxMDAlOworfQorLm5hdi1qdXN0aWZpZWQgPiBsaSB7CisgIGZsb2F0OiBub25lOworfQorLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEgeworICBtYXJnaW4tYm90dG9tOiA1cHg7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKy5uYXYtanVzdGlmaWVkID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHsKKyAgdG9wOiBhdXRvOworICBsZWZ0OiBhdXRvOworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5uYXYtanVzdGlmaWVkID4gbGkgeworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgd2lkdGg6IDElOworICB9CisgIC5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICB9Cit9CisubmF2LXRhYnMtanVzdGlmaWVkIHsKKyAgYm9yZGVyLWJvdHRvbTogMDsKK30KKy5uYXYtdGFicy1qdXN0aWZpZWQgPiBsaSA+IGEgeworICBtYXJnaW4tcmlnaHQ6IDA7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKy5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSwKKy5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlciwKKy5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLm5hdi10YWJzLWp1c3RpZmllZCA+IGxpID4gYSB7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7CisgICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7CisgIH0KKyAgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLAorICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsCisgIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7CisgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKKyAgfQorfQorLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKy50YWItY29udGVudCA+IC5hY3RpdmUgeworICBkaXNwbGF5OiBibG9jazsKK30KKy5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7CisgIG1hcmdpbi10b3A6IC0xcHg7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOworfQorLm5hdmJhciB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgbWluLWhlaWdodDogNTBweDsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKKyAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLm5hdmJhciB7CisgICAgYm9yZGVyLXJhZGl1czogNHB4OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLm5hdmJhci1oZWFkZXIgeworICAgIGZsb2F0OiBsZWZ0OworICB9Cit9CisubmF2YmFyLWNvbGxhcHNlIHsKKyAgcGFkZGluZy1yaWdodDogMTVweDsKKyAgcGFkZGluZy1sZWZ0OiAxNXB4OworICBvdmVyZmxvdy14OiB2aXNpYmxlOworICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjEpOworICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSk7Cit9CisubmF2YmFyLWNvbGxhcHNlLmluIHsKKyAgb3ZlcmZsb3cteTogYXV0bzsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubmF2YmFyLWNvbGxhcHNlIHsKKyAgICB3aWR0aDogYXV0bzsKKyAgICBib3JkZXItdG9wOiAwOworICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKKyAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CisgIH0KKyAgLm5hdmJhci1jb2xsYXBzZS5jb2xsYXBzZSB7CisgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKKyAgICBwYWRkaW5nLWJvdHRvbTogMDsKKyAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OworICB9CisgIC5uYXZiYXItY29sbGFwc2UuaW4geworICAgIG92ZXJmbG93LXk6IHZpc2libGU7CisgIH0KKyAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSwKKyAgLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItY29sbGFwc2UsCisgIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2UgeworICAgIHBhZGRpbmctcmlnaHQ6IDA7CisgICAgcGFkZGluZy1sZWZ0OiAwOworICB9Cit9CisubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLAorLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7CisgIG1heC1oZWlnaHQ6IDM0MHB4OworfQorQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7CisgIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsCisgIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2UgeworICAgIG1heC1oZWlnaHQ6IDIwMHB4OworICB9Cit9CisuY29udGFpbmVyID4gLm5hdmJhci1oZWFkZXIsCisuY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1oZWFkZXIsCisuY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSwKKy5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWNvbGxhcHNlIHsKKyAgbWFyZ2luLXJpZ2h0OiAtMTVweDsKKyAgbWFyZ2luLWxlZnQ6IC0xNXB4OworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5jb250YWluZXIgPiAubmF2YmFyLWhlYWRlciwKKyAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLAorICAuY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSwKKyAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItY29sbGFwc2UgeworICAgIG1hcmdpbi1yaWdodDogMDsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorfQorLm5hdmJhci1zdGF0aWMtdG9wIHsKKyAgei1pbmRleDogMTAwMDsKKyAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4OworfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5uYXZiYXItc3RhdGljLXRvcCB7CisgICAgYm9yZGVyLXJhZGl1czogMDsKKyAgfQorfQorLm5hdmJhci1maXhlZC10b3AsCisubmF2YmFyLWZpeGVkLWJvdHRvbSB7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IDA7CisgIHotaW5kZXg6IDEwMzA7Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLm5hdmJhci1maXhlZC10b3AsCisgIC5uYXZiYXItZml4ZWQtYm90dG9tIHsKKyAgICBib3JkZXItcmFkaXVzOiAwOworICB9Cit9CisubmF2YmFyLWZpeGVkLXRvcCB7CisgIHRvcDogMDsKKyAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4OworfQorLm5hdmJhci1maXhlZC1ib3R0b20geworICBib3R0b206IDA7CisgIG1hcmdpbi1ib3R0b206IDA7CisgIGJvcmRlci13aWR0aDogMXB4IDAgMDsKK30KKy5uYXZiYXItYnJhbmQgeworICBmbG9hdDogbGVmdDsKKyAgaGVpZ2h0OiA1MHB4OworICBwYWRkaW5nOiAxNXB4IDE1cHg7CisgIGZvbnQtc2l6ZTogMThweDsKKyAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisubmF2YmFyLWJyYW5kOmhvdmVyLAorLm5hdmJhci1icmFuZDpmb2N1cyB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKy5uYXZiYXItYnJhbmQgPiBpbWcgeworICBkaXNwbGF5OiBibG9jazsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubmF2YmFyID4gLmNvbnRhaW5lciAubmF2YmFyLWJyYW5kLAorICAubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kIHsKKyAgICBtYXJnaW4tbGVmdDogLTE1cHg7CisgIH0KK30KKy5uYXZiYXItdG9nZ2xlIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBmbG9hdDogcmlnaHQ7CisgIHBhZGRpbmc6IDlweCAxMHB4OworICBtYXJnaW4tdG9wOiA4cHg7CisgIG1hcmdpbi1yaWdodDogMTVweDsKKyAgbWFyZ2luLWJvdHRvbTogOHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKKyAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKy5uYXZiYXItdG9nZ2xlOmZvY3VzIHsKKyAgb3V0bGluZTogMDsKK30KKy5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMjJweDsKKyAgaGVpZ2h0OiAycHg7CisgIGJvcmRlci1yYWRpdXM6IDFweDsKK30KKy5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciArIC5pY29uLWJhciB7CisgIG1hcmdpbi10b3A6IDRweDsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubmF2YmFyLXRvZ2dsZSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgfQorfQorLm5hdmJhci1uYXYgeworICBtYXJnaW46IDcuNXB4IC0xNXB4OworfQorLm5hdmJhci1uYXYgPiBsaSA+IGEgeworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcGFkZGluZy1ib3R0b206IDEwcHg7CisgIGxpbmUtaGVpZ2h0OiAyMHB4OworfQorQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CisgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHsKKyAgICBwb3NpdGlvbjogc3RhdGljOworICAgIGZsb2F0OiBub25lOworICAgIHdpZHRoOiBhdXRvOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyOiAwOworICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKKyAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CisgIH0KKyAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEsCisgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXIgeworICAgIHBhZGRpbmc6IDVweCAxNXB4IDVweCAyNXB4OworICB9CisgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgfQorICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwKKyAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubmF2YmFyLW5hdiB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgbWFyZ2luOiAwOworICB9CisgIC5uYXZiYXItbmF2ID4gbGkgeworICAgIGZsb2F0OiBsZWZ0OworICB9CisgIC5uYXZiYXItbmF2ID4gbGkgPiBhIHsKKyAgICBwYWRkaW5nLXRvcDogMTVweDsKKyAgICBwYWRkaW5nLWJvdHRvbTogMTVweDsKKyAgfQorfQorLm5hdmJhci1mb3JtIHsKKyAgcGFkZGluZzogMTBweCAxNXB4OworICBtYXJnaW4tdG9wOiA4cHg7CisgIG1hcmdpbi1yaWdodDogLTE1cHg7CisgIG1hcmdpbi1ib3R0b206IDhweDsKKyAgbWFyZ2luLWxlZnQ6IC0xNXB4OworICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjEpOworICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSk7Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICB9CisgIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgd2lkdGg6IGF1dG87CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgfQorICAubmF2YmFyLWZvcm0gLmZvcm0tY29udHJvbC1zdGF0aWMgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgfQorICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgfQorICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbiwKKyAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuLAorICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgeworICAgIHdpZHRoOiBhdXRvOworICB9CisgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHsKKyAgICB3aWR0aDogMTAwJTsKKyAgfQorICAubmF2YmFyLWZvcm0gLmNvbnRyb2wtbGFiZWwgeworICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgfQorICAubmF2YmFyLWZvcm0gLnJhZGlvLAorICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgIH0KKyAgLm5hdmJhci1mb3JtIC5yYWRpbyBsYWJlbCwKKyAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBsYWJlbCB7CisgICAgcGFkZGluZy1sZWZ0OiAwOworICB9CisgIC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwKKyAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAgLm5hdmJhci1mb3JtIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7CisgICAgdG9wOiAwOworICB9Cit9CitAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsKKyAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHsKKyAgICBtYXJnaW4tYm90dG9tOiA1cHg7CisgIH0KKyAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IDA7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubmF2YmFyLWZvcm0geworICAgIHdpZHRoOiBhdXRvOworICAgIHBhZGRpbmctdG9wOiAwOworICAgIHBhZGRpbmctYm90dG9tOiAwOworICAgIG1hcmdpbi1yaWdodDogMDsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgICBib3JkZXI6IDA7CisgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOworICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKKyAgfQorfQorLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHsKKyAgbWFyZ2luLXRvcDogMDsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKKyAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Cit9CisubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUgeworICBtYXJnaW4tYm90dG9tOiAwOworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOworfQorLm5hdmJhci1idG4geworICBtYXJnaW4tdG9wOiA4cHg7CisgIG1hcmdpbi1ib3R0b206IDhweDsKK30KKy5uYXZiYXItYnRuLmJ0bi1zbSB7CisgIG1hcmdpbi10b3A6IDEwcHg7CisgIG1hcmdpbi1ib3R0b206IDEwcHg7Cit9CisubmF2YmFyLWJ0bi5idG4teHMgeworICBtYXJnaW4tdG9wOiAxNHB4OworICBtYXJnaW4tYm90dG9tOiAxNHB4OworfQorLm5hdmJhci10ZXh0IHsKKyAgbWFyZ2luLXRvcDogMTVweDsKKyAgbWFyZ2luLWJvdHRvbTogMTVweDsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubmF2YmFyLXRleHQgeworICAgIGZsb2F0OiBsZWZ0OworICAgIG1hcmdpbi1yaWdodDogMTVweDsKKyAgICBtYXJnaW4tbGVmdDogMTVweDsKKyAgfQorfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5uYXZiYXItbGVmdCB7CisgICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDsKKyAgfQorICAubmF2YmFyLXJpZ2h0IHsKKyAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDsKKyAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4OworICB9CisgIC5uYXZiYXItcmlnaHQgfiAubmF2YmFyLXJpZ2h0IHsKKyAgICBtYXJnaW4tcmlnaHQ6IDA7CisgIH0KK30KKy5uYXZiYXItZGVmYXVsdCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CisgIGJvcmRlci1jb2xvcjogI2U3ZTdlNzsKK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kIHsKKyAgY29sb3I6ICM3Nzc7Cit9CisubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpob3ZlciwKKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzIHsKKyAgY29sb3I6ICM1ZTVlNWU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdGV4dCB7CisgIGNvbG9yOiAjNzc3OworfQorLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhIHsKKyAgY29sb3I6ICM3Nzc7Cit9CisubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIsCisubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6Zm9jdXMgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYSwKKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLAorLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6Zm9jdXMgeworICBjb2xvcjogIzU1NTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNzsKK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGEsCisubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLAorLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7CisgIGNvbG9yOiAjY2NjOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSB7CisgIGJvcmRlci1jb2xvcjogI2RkZDsKK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpob3ZlciwKKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7Cit9CisubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzg4ODsKK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWNvbGxhcHNlLAorLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItZm9ybSB7CisgIGJvcmRlci1jb2xvcjogI2U3ZTdlNzsKK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYSwKKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3ZlciwKKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7CisgIGNvbG9yOiAjNTU1OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3OworfQorQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CisgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7CisgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLAorICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMgeworICAgIGNvbG9yOiAjMzMzOworICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB9CisgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLAorICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwKKyAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMgeworICAgIGNvbG9yOiAjNTU1OworICAgIGJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7CisgIH0KKyAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSwKKyAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3ZlciwKKyAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7CisgICAgY29sb3I6ICNjY2M7CisgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIH0KK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbmsgeworICBjb2xvcjogIzc3NzsKK30KKy5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbms6aG92ZXIgeworICBjb2xvcjogIzMzMzsKK30KKy5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmsgeworICBjb2xvcjogIzc3NzsKK30KKy5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6aG92ZXIsCisubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzIHsKKyAgY29sb3I6ICMzMzM7Cit9CisubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwKK2ZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVyLAorLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsCitmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpmb2N1cyB7CisgIGNvbG9yOiAjY2NjOworfQorLm5hdmJhci1pbnZlcnNlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKKyAgYm9yZGVyLWNvbG9yOiAjMDgwODA4OworfQorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgeworICBjb2xvcjogIzlkOWQ5ZDsKK30KKy5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmhvdmVyLAorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6Zm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0IHsKKyAgY29sb3I6ICM5ZDlkOWQ7Cit9CisubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEgeworICBjb2xvcjogIzlkOWQ5ZDsKK30KKy5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpob3ZlciwKKy5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpmb2N1cyB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKy5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhLAorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIsCisubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4OworfQorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYSwKKy5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsCisubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHsKKyAgY29sb3I6ICM0NDQ7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlIHsKKyAgYm9yZGVyLWNvbG9yOiAjMzMzOworfQorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmhvdmVyLAorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKK30KKy5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworfQorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItY29sbGFwc2UsCisubmF2YmFyLWludmVyc2UgLm5hdmJhci1mb3JtIHsKKyAgYm9yZGVyLWNvbG9yOiAjMTAxMDEwOworfQorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhLAorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmhvdmVyLAorLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmZvY3VzIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7Cit9CitAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsKKyAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRyb3Bkb3duLWhlYWRlciB7CisgICAgYm9yZGVyLWNvbG9yOiAjMDgwODA4OworICB9CisgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwODsKKyAgfQorICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEgeworICAgIGNvbG9yOiAjOWQ5ZDlkOworICB9CisgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwKKyAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHsKKyAgICBjb2xvcjogI2ZmZjsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgfQorICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwKKyAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsCisgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHsKKyAgICBjb2xvcjogI2ZmZjsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4OworICB9CisgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsCisgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsCisgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMgeworICAgIGNvbG9yOiAjNDQ0OworICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB9Cit9CisubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rIHsKKyAgY29sb3I6ICM5ZDlkOWQ7Cit9CisubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVyIHsKKyAgY29sb3I6ICNmZmY7Cit9CisubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rIHsKKyAgY29sb3I6ICM5ZDlkOWQ7Cit9CisubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmhvdmVyLAorLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cyB7CisgIGNvbG9yOiAjZmZmOworfQorLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsCitmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpob3ZlciwKKy5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLAorZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6Zm9jdXMgeworICBjb2xvcjogIzQ0NDsKK30KKy5icmVhZGNydW1iIHsKKyAgcGFkZGluZzogOHB4IDE1cHg7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgIGxpc3Qtc3R5bGU6IG5vbmU7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKy5icmVhZGNydW1iID4gbGkgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisuYnJlYWRjcnVtYiA+IGxpICsgbGk6YmVmb3JlIHsKKyAgcGFkZGluZzogMCA1cHg7CisgIGNvbG9yOiAjY2NjOworICBjb250ZW50OiAiL1wwMGEwIjsKK30KKy5icmVhZGNydW1iID4gLmFjdGl2ZSB7CisgIGNvbG9yOiAjNzc3OworfQorLnBhZ2luYXRpb24geworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIHBhZGRpbmctbGVmdDogMDsKKyAgbWFyZ2luOiAyMHB4IDA7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKy5wYWdpbmF0aW9uID4gbGkgeworICBkaXNwbGF5OiBpbmxpbmU7Cit9CisucGFnaW5hdGlvbiA+IGxpID4gYSwKKy5wYWdpbmF0aW9uID4gbGkgPiBzcGFuIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogNnB4IDEycHg7CisgIG1hcmdpbi1sZWZ0OiAtMXB4OworICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKKyAgY29sb3I6ICMzMzdhYjc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKK30KKy5wYWdpbmF0aW9uID4gbGk6Zmlyc3QtY2hpbGQgPiBhLAorLnBhZ2luYXRpb24gPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4geworICBtYXJnaW4tbGVmdDogMDsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7Cit9CisucGFnaW5hdGlvbiA+IGxpOmxhc3QtY2hpbGQgPiBhLAorLnBhZ2luYXRpb24gPiBsaTpsYXN0LWNoaWxkID4gc3BhbiB7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7Cit9CisucGFnaW5hdGlvbiA+IGxpID4gYTpob3ZlciwKKy5wYWdpbmF0aW9uID4gbGkgPiBzcGFuOmhvdmVyLAorLnBhZ2luYXRpb24gPiBsaSA+IGE6Zm9jdXMsCisucGFnaW5hdGlvbiA+IGxpID4gc3Bhbjpmb2N1cyB7CisgIHotaW5kZXg6IDI7CisgIGNvbG9yOiAjMjM1MjdjOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICNkZGQ7Cit9CisucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhLAorLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3BhbiwKKy5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGE6aG92ZXIsCisucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuOmhvdmVyLAorLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYTpmb2N1cywKKy5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW46Zm9jdXMgeworICB6LWluZGV4OiAzOworICBjb2xvcjogI2ZmZjsKKyAgY3Vyc29yOiBkZWZhdWx0OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3OworICBib3JkZXItY29sb3I6ICMzMzdhYjc7Cit9CisucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IHNwYW4sCisucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IHNwYW46aG92ZXIsCisucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IHNwYW46Zm9jdXMsCisucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IGEsCisucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsCisucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMgeworICBjb2xvcjogIzc3NzsKKyAgY3Vyc29yOiBub3QtYWxsb3dlZDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjZGRkOworfQorLnBhZ2luYXRpb24tbGcgPiBsaSA+IGEsCisucGFnaW5hdGlvbi1sZyA+IGxpID4gc3BhbiB7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKKyAgZm9udC1zaXplOiAxOHB4OworICBsaW5lLWhlaWdodDogMS4zMzMzMzMzOworfQorLnBhZ2luYXRpb24tbGcgPiBsaTpmaXJzdC1jaGlsZCA+IGEsCisucGFnaW5hdGlvbi1sZyA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDZweDsKKyAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNnB4OworfQorLnBhZ2luYXRpb24tbGcgPiBsaTpsYXN0LWNoaWxkID4gYSwKKy5wYWdpbmF0aW9uLWxnID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4geworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNnB4OworICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNnB4OworfQorLnBhZ2luYXRpb24tc20gPiBsaSA+IGEsCisucGFnaW5hdGlvbi1zbSA+IGxpID4gc3BhbiB7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICBmb250LXNpemU6IDEycHg7CisgIGxpbmUtaGVpZ2h0OiAxLjU7Cit9CisucGFnaW5hdGlvbi1zbSA+IGxpOmZpcnN0LWNoaWxkID4gYSwKKy5wYWdpbmF0aW9uLXNtID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Cit9CisucGFnaW5hdGlvbi1zbSA+IGxpOmxhc3QtY2hpbGQgPiBhLAorLnBhZ2luYXRpb24tc20gPiBsaTpsYXN0LWNoaWxkID4gc3BhbiB7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7Cit9CisucGFnZXIgeworICBwYWRkaW5nLWxlZnQ6IDA7CisgIG1hcmdpbjogMjBweCAwOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisucGFnZXIgbGkgeworICBkaXNwbGF5OiBpbmxpbmU7Cit9CisucGFnZXIgbGkgPiBhLAorLnBhZ2VyIGxpID4gc3BhbiB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgcGFkZGluZzogNXB4IDE0cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgIGJvcmRlci1yYWRpdXM6IDE1cHg7Cit9CisucGFnZXIgbGkgPiBhOmhvdmVyLAorLnBhZ2VyIGxpID4gYTpmb2N1cyB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKy5wYWdlciAubmV4dCA+IGEsCisucGFnZXIgLm5leHQgPiBzcGFuIHsKKyAgZmxvYXQ6IHJpZ2h0OworfQorLnBhZ2VyIC5wcmV2aW91cyA+IGEsCisucGFnZXIgLnByZXZpb3VzID4gc3BhbiB7CisgIGZsb2F0OiBsZWZ0OworfQorLnBhZ2VyIC5kaXNhYmxlZCA+IGEsCisucGFnZXIgLmRpc2FibGVkID4gYTpob3ZlciwKKy5wYWdlciAuZGlzYWJsZWQgPiBhOmZvY3VzLAorLnBhZ2VyIC5kaXNhYmxlZCA+IHNwYW4geworICBjb2xvcjogIzc3NzsKKyAgY3Vyc29yOiBub3QtYWxsb3dlZDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKK30KKy5sYWJlbCB7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgcGFkZGluZzogLjJlbSAuNmVtIC4zZW07CisgIGZvbnQtc2l6ZTogNzUlOworICBmb250LXdlaWdodDogYm9sZDsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIGNvbG9yOiAjZmZmOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgYm9yZGVyLXJhZGl1czogLjI1ZW07Cit9CithLmxhYmVsOmhvdmVyLAorYS5sYWJlbDpmb2N1cyB7CisgIGNvbG9yOiAjZmZmOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIGN1cnNvcjogcG9pbnRlcjsKK30KKy5sYWJlbDplbXB0eSB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisuYnRuIC5sYWJlbCB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgdG9wOiAtMXB4OworfQorLmxhYmVsLWRlZmF1bHQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3OworfQorLmxhYmVsLWRlZmF1bHRbaHJlZl06aG92ZXIsCisubGFiZWwtZGVmYXVsdFtocmVmXTpmb2N1cyB7CisgIGJhY2tncm91bmQtY29sb3I6ICM1ZTVlNWU7Cit9CisubGFiZWwtcHJpbWFyeSB7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7Cit9CisubGFiZWwtcHJpbWFyeVtocmVmXTpob3ZlciwKKy5sYWJlbC1wcmltYXJ5W2hyZWZdOmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDsKK30KKy5sYWJlbC1zdWNjZXNzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YzsKK30KKy5sYWJlbC1zdWNjZXNzW2hyZWZdOmhvdmVyLAorLmxhYmVsLXN1Y2Nlc3NbaHJlZl06Zm9jdXMgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0OworfQorLmxhYmVsLWluZm8geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlOworfQorLmxhYmVsLWluZm9baHJlZl06aG92ZXIsCisubGFiZWwtaW5mb1tocmVmXTpmb2N1cyB7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7Cit9CisubGFiZWwtd2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7Cit9CisubGFiZWwtd2FybmluZ1tocmVmXTpob3ZlciwKKy5sYWJlbC13YXJuaW5nW2hyZWZdOmZvY3VzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjsKK30KKy5sYWJlbC1kYW5nZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmOworfQorLmxhYmVsLWRhbmdlcltocmVmXTpob3ZlciwKKy5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjOworfQorLmJhZGdlIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBtaW4td2lkdGg6IDEwcHg7CisgIHBhZGRpbmc6IDNweCA3cHg7CisgIGZvbnQtc2l6ZTogMTJweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGxpbmUtaGVpZ2h0OiAxOworICBjb2xvcjogI2ZmZjsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3OworICBib3JkZXItcmFkaXVzOiAxMHB4OworfQorLmJhZGdlOmVtcHR5IHsKKyAgZGlzcGxheTogbm9uZTsKK30KKy5idG4gLmJhZGdlIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB0b3A6IC0xcHg7Cit9CisuYnRuLXhzIC5iYWRnZSwKKy5idG4tZ3JvdXAteHMgPiAuYnRuIC5iYWRnZSB7CisgIHRvcDogMDsKKyAgcGFkZGluZzogMXB4IDVweDsKK30KK2EuYmFkZ2U6aG92ZXIsCithLmJhZGdlOmZvY3VzIHsKKyAgY29sb3I6ICNmZmY7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgY3Vyc29yOiBwb2ludGVyOworfQorLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgPiAuYmFkZ2UsCisubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGEgPiAuYmFkZ2UgeworICBjb2xvcjogIzMzN2FiNzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKK30KKy5saXN0LWdyb3VwLWl0ZW0gPiAuYmFkZ2UgeworICBmbG9hdDogcmlnaHQ7Cit9CisubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlICsgLmJhZGdlIHsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7Cit9CisubmF2LXBpbGxzID4gbGkgPiBhID4gLmJhZGdlIHsKKyAgbWFyZ2luLWxlZnQ6IDNweDsKK30KKy5qdW1ib3Ryb24geworICBwYWRkaW5nLXRvcDogMzBweDsKKyAgcGFkZGluZy1ib3R0b206IDMwcHg7CisgIG1hcmdpbi1ib3R0b206IDMwcHg7CisgIGNvbG9yOiBpbmhlcml0OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorLmp1bWJvdHJvbiBoMSwKKy5qdW1ib3Ryb24gLmgxIHsKKyAgY29sb3I6IGluaGVyaXQ7Cit9CisuanVtYm90cm9uIHAgeworICBtYXJnaW4tYm90dG9tOiAxNXB4OworICBmb250LXNpemU6IDIxcHg7CisgIGZvbnQtd2VpZ2h0OiAyMDA7Cit9CisuanVtYm90cm9uID4gaHIgeworICBib3JkZXItdG9wLWNvbG9yOiAjZDVkNWQ1OworfQorLmNvbnRhaW5lciAuanVtYm90cm9uLAorLmNvbnRhaW5lci1mbHVpZCAuanVtYm90cm9uIHsKKyAgcGFkZGluZy1yaWdodDogMTVweDsKKyAgcGFkZGluZy1sZWZ0OiAxNXB4OworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9CisuanVtYm90cm9uIC5jb250YWluZXIgeworICBtYXgtd2lkdGg6IDEwMCU7Cit9CitAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgeworICAuanVtYm90cm9uIHsKKyAgICBwYWRkaW5nLXRvcDogNDhweDsKKyAgICBwYWRkaW5nLWJvdHRvbTogNDhweDsKKyAgfQorICAuY29udGFpbmVyIC5qdW1ib3Ryb24sCisgIC5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7CisgICAgcGFkZGluZy1yaWdodDogNjBweDsKKyAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7CisgIH0KKyAgLmp1bWJvdHJvbiBoMSwKKyAgLmp1bWJvdHJvbiAuaDEgeworICAgIGZvbnQtc2l6ZTogNjNweDsKKyAgfQorfQorLnRodW1ibmFpbCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiA0cHg7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICBib3JkZXItcmFkaXVzOiA0cHg7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyIC4ycyBlYXNlLWluLW91dDsKKyAgICAgICAtby10cmFuc2l0aW9uOiBib3JkZXIgLjJzIGVhc2UtaW4tb3V0OworICAgICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAuMnMgZWFzZS1pbi1vdXQ7Cit9CisudGh1bWJuYWlsID4gaW1nLAorLnRodW1ibmFpbCBhID4gaW1nIHsKKyAgbWFyZ2luLXJpZ2h0OiBhdXRvOworICBtYXJnaW4tbGVmdDogYXV0bzsKK30KK2EudGh1bWJuYWlsOmhvdmVyLAorYS50aHVtYm5haWw6Zm9jdXMsCithLnRodW1ibmFpbC5hY3RpdmUgeworICBib3JkZXItY29sb3I6ICMzMzdhYjc7Cit9CisudGh1bWJuYWlsIC5jYXB0aW9uIHsKKyAgcGFkZGluZzogOXB4OworICBjb2xvcjogIzMzMzsKK30KKy5hbGVydCB7CisgIHBhZGRpbmc6IDE1cHg7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItcmFkaXVzOiA0cHg7Cit9CisuYWxlcnQgaDQgeworICBtYXJnaW4tdG9wOiAwOworICBjb2xvcjogaW5oZXJpdDsKK30KKy5hbGVydCAuYWxlcnQtbGluayB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorLmFsZXJ0ID4gcCwKKy5hbGVydCA+IHVsIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy5hbGVydCA+IHAgKyBwIHsKKyAgbWFyZ2luLXRvcDogNXB4OworfQorLmFsZXJ0LWRpc21pc3NhYmxlLAorLmFsZXJ0LWRpc21pc3NpYmxlIHsKKyAgcGFkZGluZy1yaWdodDogMzVweDsKK30KKy5hbGVydC1kaXNtaXNzYWJsZSAuY2xvc2UsCisuYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB0b3A6IC0ycHg7CisgIHJpZ2h0OiAtMjFweDsKKyAgY29sb3I6IGluaGVyaXQ7Cit9CisuYWxlcnQtc3VjY2VzcyB7CisgIGNvbG9yOiAjM2M3NjNkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4OworICBib3JkZXItY29sb3I6ICNkNmU5YzY7Cit9CisuYWxlcnQtc3VjY2VzcyBociB7CisgIGJvcmRlci10b3AtY29sb3I6ICNjOWUyYjM7Cit9CisuYWxlcnQtc3VjY2VzcyAuYWxlcnQtbGluayB7CisgIGNvbG9yOiAjMmI1NDJjOworfQorLmFsZXJ0LWluZm8geworICBjb2xvcjogIzMxNzA4ZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNzsKKyAgYm9yZGVyLWNvbG9yOiAjYmNlOGYxOworfQorLmFsZXJ0LWluZm8gaHIgeworICBib3JkZXItdG9wLWNvbG9yOiAjYTZlMWVjOworfQorLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsgeworICBjb2xvcjogIzI0NTI2OTsKK30KKy5hbGVydC13YXJuaW5nIHsKKyAgY29sb3I6ICM4YTZkM2I7CisgIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7CisgIGJvcmRlci1jb2xvcjogI2ZhZWJjYzsKK30KKy5hbGVydC13YXJuaW5nIGhyIHsKKyAgYm9yZGVyLXRvcC1jb2xvcjogI2Y3ZTFiNTsKK30KKy5hbGVydC13YXJuaW5nIC5hbGVydC1saW5rIHsKKyAgY29sb3I6ICM2NjUxMmM7Cit9CisuYWxlcnQtZGFuZ2VyIHsKKyAgY29sb3I6ICNhOTQ0NDI7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7CisgIGJvcmRlci1jb2xvcjogI2ViY2NkMTsKK30KKy5hbGVydC1kYW5nZXIgaHIgeworICBib3JkZXItdG9wLWNvbG9yOiAjZTRiOWMwOworfQorLmFsZXJ0LWRhbmdlciAuYWxlcnQtbGluayB7CisgIGNvbG9yOiAjODQzNTM0OworfQorQC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHsKKyAgZnJvbSB7CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOworICB9CisgIHRvIHsKKyAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7CisgIH0KK30KK0Atby1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgeworICBmcm9tIHsKKyAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7CisgIH0KKyAgdG8geworICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsKKyAgfQorfQorQGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7CisgIGZyb20geworICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMDsKKyAgfQorICB0byB7CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOworICB9Cit9CisucHJvZ3Jlc3MgeworICBoZWlnaHQ6IDIwcHg7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAuMSk7CisgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpOworfQorLnByb2dyZXNzLWJhciB7CisgIGZsb2F0OiBsZWZ0OworICB3aWR0aDogMDsKKyAgaGVpZ2h0OiAxMDAlOworICBmb250LXNpemU6IDEycHg7CisgIGxpbmUtaGVpZ2h0OiAyMHB4OworICBjb2xvcjogI2ZmZjsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3OworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgLjE1KTsKKyAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIC4xNSk7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogd2lkdGggLjZzIGVhc2U7CisgICAgICAgLW8tdHJhbnNpdGlvbjogd2lkdGggLjZzIGVhc2U7CisgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggLjZzIGVhc2U7Cit9CisucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLAorLnByb2dyZXNzLWJhci1zdHJpcGVkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAgICBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKKyAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDQwcHggNDBweDsKKyAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQwcHggNDBweDsKK30KKy5wcm9ncmVzcy5hY3RpdmUgLnByb2dyZXNzLWJhciwKKy5wcm9ncmVzcy1iYXIuYWN0aXZlIHsKKyAgLXdlYmtpdC1hbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTsKKyAgICAgICAtby1hbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTsKKyAgICAgICAgICBhbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTsKK30KKy5wcm9ncmVzcy1iYXItc3VjY2VzcyB7CisgIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7Cit9CisucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3MgeworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOworICBiYWNrZ3JvdW5kLWltYWdlOiAgICAgIC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOworICBiYWNrZ3JvdW5kLWltYWdlOiAgICAgICAgIGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOworfQorLnByb2dyZXNzLWJhci1pbmZvIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzViYzBkZTsKK30KKy5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItaW5mbyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7CisgIGJhY2tncm91bmQtaW1hZ2U6ICAgICAgLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7CisgIGJhY2tncm91bmQtaW1hZ2U6ICAgICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7Cit9CisucHJvZ3Jlc3MtYmFyLXdhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBhZDRlOworfQorLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci13YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAgICBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKK30KKy5wcm9ncmVzcy1iYXItZGFuZ2VyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0ZjsKK30KKy5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItZGFuZ2VyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAgICBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKK30KKy5tZWRpYSB7CisgIG1hcmdpbi10b3A6IDE1cHg7Cit9CisubWVkaWE6Zmlyc3QtY2hpbGQgeworICBtYXJnaW4tdG9wOiAwOworfQorLm1lZGlhLAorLm1lZGlhLWJvZHkgeworICBvdmVyZmxvdzogaGlkZGVuOworICB6b29tOiAxOworfQorLm1lZGlhLWJvZHkgeworICB3aWR0aDogMTAwMDBweDsKK30KKy5tZWRpYS1vYmplY3QgeworICBkaXNwbGF5OiBibG9jazsKK30KKy5tZWRpYS1vYmplY3QuaW1nLXRodW1ibmFpbCB7CisgIG1heC13aWR0aDogbm9uZTsKK30KKy5tZWRpYS1yaWdodCwKKy5tZWRpYSA+IC5wdWxsLXJpZ2h0IHsKKyAgcGFkZGluZy1sZWZ0OiAxMHB4OworfQorLm1lZGlhLWxlZnQsCisubWVkaWEgPiAucHVsbC1sZWZ0IHsKKyAgcGFkZGluZy1yaWdodDogMTBweDsKK30KKy5tZWRpYS1sZWZ0LAorLm1lZGlhLXJpZ2h0LAorLm1lZGlhLWJvZHkgeworICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorLm1lZGlhLW1pZGRsZSB7CisgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisubWVkaWEtYm90dG9tIHsKKyAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKK30KKy5tZWRpYS1oZWFkaW5nIHsKKyAgbWFyZ2luLXRvcDogMDsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorLm1lZGlhLWxpc3QgeworICBwYWRkaW5nLWxlZnQ6IDA7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisubGlzdC1ncm91cCB7CisgIHBhZGRpbmctbGVmdDogMDsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKK30KKy5saXN0LWdyb3VwLWl0ZW0geworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgIG1hcmdpbi1ib3R0b206IC0xcHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7Cit9CisubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OworfQorLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDsKKyAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OworfQorYS5saXN0LWdyb3VwLWl0ZW0sCitidXR0b24ubGlzdC1ncm91cC1pdGVtIHsKKyAgY29sb3I6ICM1NTU7Cit9CithLmxpc3QtZ3JvdXAtaXRlbSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsCitidXR0b24ubGlzdC1ncm91cC1pdGVtIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7CisgIGNvbG9yOiAjMzMzOworfQorYS5saXN0LWdyb3VwLWl0ZW06aG92ZXIsCitidXR0b24ubGlzdC1ncm91cC1pdGVtOmhvdmVyLAorYS5saXN0LWdyb3VwLWl0ZW06Zm9jdXMsCitidXR0b24ubGlzdC1ncm91cC1pdGVtOmZvY3VzIHsKKyAgY29sb3I6ICM1NTU7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKK30KK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0geworICB3aWR0aDogMTAwJTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKy5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQsCisubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmhvdmVyLAorLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyB7CisgIGNvbG9yOiAjNzc3OworICBjdXJzb3I6IG5vdC1hbGxvd2VkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsCisubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywKKy5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHsKKyAgY29sb3I6IGluaGVyaXQ7Cit9CisubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCwKKy5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LAorLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLXRleHQgeworICBjb2xvcjogIzc3NzsKK30KKy5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlLAorLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIsCisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyB7CisgIHotaW5kZXg6IDI7CisgIGNvbG9yOiAjZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3OworICBib3JkZXItY29sb3I6ICMzMzdhYjc7Cit9CisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsCisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsCisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsCisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCwKKy5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IHNtYWxsLAorLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gc21hbGwsCisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwsCisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwsCisubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwgeworICBjb2xvcjogaW5oZXJpdDsKK30KKy5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCwKKy5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCwKKy5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7CisgIGNvbG9yOiAjYzdkZGVmOworfQorLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIHsKKyAgY29sb3I6ICMzYzc2M2Q7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIHsKKyAgY29sb3I6ICMzYzc2M2Q7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgeworICBjb2xvcjogaW5oZXJpdDsKK30KK2EubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6aG92ZXIsCitidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6aG92ZXIsCithLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmZvY3VzLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmZvY3VzIHsKKyAgY29sb3I6ICMzYzc2M2Q7CisgIGJhY2tncm91bmQtY29sb3I6ICNkMGU5YzY7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmUsCithLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlciwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsCithLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpmb2N1cywKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzNjNzYzZDsKKyAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkOworfQorLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIHsKKyAgY29sb3I6ICMzMTcwOGY7CisgIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIHsKKyAgY29sb3I6ICMzMTcwOGY7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgeworICBjb2xvcjogaW5oZXJpdDsKK30KK2EubGlzdC1ncm91cC1pdGVtLWluZm86aG92ZXIsCitidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm86aG92ZXIsCithLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzIHsKKyAgY29sb3I6ICMzMTcwOGY7CisgIGJhY2tncm91bmQtY29sb3I6ICNjNGUzZjM7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZSwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsCithLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpob3ZlciwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXIsCithLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cywKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6Zm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMxNzA4ZjsKKyAgYm9yZGVyLWNvbG9yOiAjMzE3MDhmOworfQorLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIHsKKyAgY29sb3I6ICM4YTZkM2I7CisgIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIHsKKyAgY29sb3I6ICM4YTZkM2I7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgeworICBjb2xvcjogaW5oZXJpdDsKK30KK2EubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6aG92ZXIsCitidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6aG92ZXIsCithLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmZvY3VzLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmZvY3VzIHsKKyAgY29sb3I6ICM4YTZkM2I7CisgIGJhY2tncm91bmQtY29sb3I6ICNmYWYyY2M7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmUsCithLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlciwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6aG92ZXIsCithLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpmb2N1cywKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6Zm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYjsKKyAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiOworfQorLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgeworICBjb2xvcjogI2E5NDQ0MjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTsKK30KK2EubGlzdC1ncm91cC1pdGVtLWRhbmdlciwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIHsKKyAgY29sb3I6ICNhOTQ0NDI7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHsKKyAgY29sb3I6IGluaGVyaXQ7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6aG92ZXIsCitidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpob3ZlciwKK2EubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cywKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmZvY3VzIHsKKyAgY29sb3I6ICNhOTQ0NDI7CisgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjY2M7Cit9CithLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLAorYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLAorYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpob3ZlciwKK2J1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpob3ZlciwKK2EubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6Zm9jdXMsCitidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6Zm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2E5NDQ0MjsKKyAgYm9yZGVyLWNvbG9yOiAjYTk0NDQyOworfQorLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHsKKyAgbWFyZ2luLXRvcDogMDsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKK30KKy5wYW5lbCB7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItcmFkaXVzOiA0cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA1KTsKKyAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDUpOworfQorLnBhbmVsLWJvZHkgeworICBwYWRkaW5nOiAxNXB4OworfQorLnBhbmVsLWhlYWRpbmcgeworICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4OworfQorLnBhbmVsLWhlYWRpbmcgPiAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSB7CisgIGNvbG9yOiBpbmhlcml0OworfQorLnBhbmVsLXRpdGxlIHsKKyAgbWFyZ2luLXRvcDogMDsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgZm9udC1zaXplOiAxNnB4OworICBjb2xvcjogaW5oZXJpdDsKK30KKy5wYW5lbC10aXRsZSA+IGEsCisucGFuZWwtdGl0bGUgPiBzbWFsbCwKKy5wYW5lbC10aXRsZSA+IC5zbWFsbCwKKy5wYW5lbC10aXRsZSA+IHNtYWxsID4gYSwKKy5wYW5lbC10aXRsZSA+IC5zbWFsbCA+IGEgeworICBjb2xvcjogaW5oZXJpdDsKK30KKy5wYW5lbC1mb290ZXIgeworICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOworICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Cit9CisucGFuZWwgPiAubGlzdC1ncm91cCwKKy5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy5wYW5lbCA+IC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0sCisucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtIHsKKyAgYm9yZGVyLXdpZHRoOiAxcHggMDsKKyAgYm9yZGVyLXJhZGl1czogMDsKK30KKy5wYW5lbCA+IC5saXN0LWdyb3VwOmZpcnN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsKKyAgYm9yZGVyLXRvcDogMDsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4OworfQorLnBhbmVsID4gLmxpc3QtZ3JvdXA6bGFzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQsCisucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7CisgIGJvcmRlci1ib3R0b206IDA7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDsKK30KKy5wYW5lbCA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOworfQorLnBhbmVsLWhlYWRpbmcgKyAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsKKyAgYm9yZGVyLXRvcC13aWR0aDogMDsKK30KKy5saXN0LWdyb3VwICsgLnBhbmVsLWZvb3RlciB7CisgIGJvcmRlci10b3Atd2lkdGg6IDA7Cit9CisucGFuZWwgPiAudGFibGUsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSwKKy5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC50YWJsZSB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisucGFuZWwgPiAudGFibGUgY2FwdGlvbiwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlIGNhcHRpb24sCisucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAudGFibGUgY2FwdGlvbiB7CisgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CisgIHBhZGRpbmctbGVmdDogMTVweDsKK30KKy5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkIHsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4OworfQorLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgeworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7Cit9CisucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OworfQorLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQgeworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4OworfQorLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgeworICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Cit9CisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgeworICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Cit9CisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQgeworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Cit9CisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHsKKyAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsKK30KKy5wYW5lbCA+IC5wYW5lbC1ib2R5ICsgLnRhYmxlLAorLnBhbmVsID4gLnBhbmVsLWJvZHkgKyAudGFibGUtcmVzcG9uc2l2ZSwKKy5wYW5lbCA+IC50YWJsZSArIC5wYW5lbC1ib2R5LAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgKyAucGFuZWwtYm9keSB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOworfQorLnBhbmVsID4gLnRhYmxlID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aCwKKy5wYW5lbCA+IC50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQgeworICBib3JkZXItdG9wOiAwOworfQorLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgeworICBib3JkZXI6IDA7Cit9CisucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQgeworICBib3JkZXItbGVmdDogMDsKK30KKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6bGFzdC1jaGlsZCB7CisgIGJvcmRlci1yaWdodDogMDsKK30KKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLAorLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmZpcnN0LWNoaWxkID4gdGQsCisucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsCisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCwKKy5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpmaXJzdC1jaGlsZCA+IHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMDsKK30KKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0ZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRkLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0ZCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRoLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCwKKy5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRoLAorLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0aCB7CisgIGJvcmRlci1ib3R0b206IDA7Cit9CisucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSB7CisgIG1hcmdpbi1ib3R0b206IDA7CisgIGJvcmRlcjogMDsKK30KKy5wYW5lbC1ncm91cCB7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7Cit9CisucGFuZWwtZ3JvdXAgLnBhbmVsIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworfQorLnBhbmVsLWdyb3VwIC5wYW5lbCArIC5wYW5lbCB7CisgIG1hcmdpbi10b3A6IDVweDsKK30KKy5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyB7CisgIGJvcmRlci1ib3R0b206IDA7Cit9CisucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSwKKy5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7Cit9CisucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciB7CisgIGJvcmRlci10b3A6IDA7Cit9CisucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSAucGFuZWwtYm9keSB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOworfQorLnBhbmVsLWRlZmF1bHQgeworICBib3JkZXItY29sb3I6ICNkZGQ7Cit9CisucGFuZWwtZGVmYXVsdCA+IC5wYW5lbC1oZWFkaW5nIHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIGJvcmRlci1jb2xvcjogI2RkZDsKK30KKy5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7CisgIGJvcmRlci10b3AtY29sb3I6ICNkZGQ7Cit9CisucGFuZWwtZGVmYXVsdCA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7CisgIGNvbG9yOiAjZjVmNWY1OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOworfQorLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkgeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZGRkOworfQorLnBhbmVsLXByaW1hcnkgeworICBib3JkZXItY29sb3I6ICMzMzdhYjc7Cit9CisucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1oZWFkaW5nIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7CisgIGJvcmRlci1jb2xvcjogIzMzN2FiNzsKK30KKy5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7CisgIGJvcmRlci10b3AtY29sb3I6ICMzMzdhYjc7Cit9CisucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7CisgIGNvbG9yOiAjMzM3YWI3OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworfQorLnBhbmVsLXByaW1hcnkgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkgeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjMzM3YWI3OworfQorLnBhbmVsLXN1Y2Nlc3MgeworICBib3JkZXItY29sb3I6ICNkNmU5YzY7Cit9CisucGFuZWwtc3VjY2VzcyA+IC5wYW5lbC1oZWFkaW5nIHsKKyAgY29sb3I6ICMzYzc2M2Q7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7CisgIGJvcmRlci1jb2xvcjogI2Q2ZTljNjsKK30KKy5wYW5lbC1zdWNjZXNzID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7CisgIGJvcmRlci10b3AtY29sb3I6ICNkNmU5YzY7Cit9CisucGFuZWwtc3VjY2VzcyA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7CisgIGNvbG9yOiAjZGZmMGQ4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2M3NjNkOworfQorLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkgeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZDZlOWM2OworfQorLnBhbmVsLWluZm8geworICBib3JkZXItY29sb3I6ICNiY2U4ZjE7Cit9CisucGFuZWwtaW5mbyA+IC5wYW5lbC1oZWFkaW5nIHsKKyAgY29sb3I6ICMzMTcwOGY7CisgIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7CisgIGJvcmRlci1jb2xvcjogI2JjZThmMTsKK30KKy5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7CisgIGJvcmRlci10b3AtY29sb3I6ICNiY2U4ZjE7Cit9CisucGFuZWwtaW5mbyA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7CisgIGNvbG9yOiAjZDllZGY3OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzE3MDhmOworfQorLnBhbmVsLWluZm8gPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkgeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjYmNlOGYxOworfQorLnBhbmVsLXdhcm5pbmcgeworICBib3JkZXItY29sb3I6ICNmYWViY2M7Cit9CisucGFuZWwtd2FybmluZyA+IC5wYW5lbC1oZWFkaW5nIHsKKyAgY29sb3I6ICM4YTZkM2I7CisgIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7CisgIGJvcmRlci1jb2xvcjogI2ZhZWJjYzsKK30KKy5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7CisgIGJvcmRlci10b3AtY29sb3I6ICNmYWViY2M7Cit9CisucGFuZWwtd2FybmluZyA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7CisgIGNvbG9yOiAjZmNmOGUzOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGE2ZDNiOworfQorLnBhbmVsLXdhcm5pbmcgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkgeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmFlYmNjOworfQorLnBhbmVsLWRhbmdlciB7CisgIGJvcmRlci1jb2xvcjogI2ViY2NkMTsKK30KKy5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyB7CisgIGNvbG9yOiAjYTk0NDQyOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlOworICBib3JkZXItY29sb3I6ICNlYmNjZDE7Cit9CisucGFuZWwtZGFuZ2VyID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7CisgIGJvcmRlci10b3AtY29sb3I6ICNlYmNjZDE7Cit9CisucGFuZWwtZGFuZ2VyID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHsKKyAgY29sb3I6ICNmMmRlZGU7CisgIGJhY2tncm91bmQtY29sb3I6ICNhOTQ0NDI7Cit9CisucGFuZWwtZGFuZ2VyID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ViY2NkMTsKK30KKy5lbWJlZC1yZXNwb25zaXZlIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBkaXNwbGF5OiBibG9jazsKKyAgaGVpZ2h0OiAwOworICBwYWRkaW5nOiAwOworICBvdmVyZmxvdzogaGlkZGVuOworfQorLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSwKKy5lbWJlZC1yZXNwb25zaXZlIGlmcmFtZSwKKy5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLAorLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LAorLmVtYmVkLXJlc3BvbnNpdmUgdmlkZW8geworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgYm90dG9tOiAwOworICBsZWZ0OiAwOworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBib3JkZXI6IDA7Cit9CisuZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OSB7CisgIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7Cit9CisuZW1iZWQtcmVzcG9uc2l2ZS00YnkzIHsKKyAgcGFkZGluZy1ib3R0b206IDc1JTsKK30KKy53ZWxsIHsKKyAgbWluLWhlaWdodDogMjBweDsKKyAgcGFkZGluZzogMTlweDsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKKyAgYm9yZGVyOiAxcHggc29saWQgI2UzZTNlMzsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNSk7CisgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA1KTsKK30KKy53ZWxsIGJsb2NrcXVvdGUgeworICBib3JkZXItY29sb3I6ICNkZGQ7CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMTUpOworfQorLndlbGwtbGcgeworICBwYWRkaW5nOiAyNHB4OworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9Cisud2VsbC1zbSB7CisgIHBhZGRpbmc6IDlweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworfQorLmNsb3NlIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBmb250LXNpemU6IDIxcHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBsaW5lLWhlaWdodDogMTsKKyAgY29sb3I6ICMwMDA7CisgIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmY7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0yMCk7CisgIG9wYWNpdHk6IC4yOworfQorLmNsb3NlOmhvdmVyLAorLmNsb3NlOmZvY3VzIHsKKyAgY29sb3I6ICMwMDA7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgY3Vyc29yOiBwb2ludGVyOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApOworICBvcGFjaXR5OiAuNTsKK30KK2J1dHRvbi5jbG9zZSB7CisgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgcGFkZGluZzogMDsKKyAgY3Vyc29yOiBwb2ludGVyOworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKKyAgYm9yZGVyOiAwOworfQorLm1vZGFsLW9wZW4geworICBvdmVyZmxvdzogaGlkZGVuOworfQorLm1vZGFsIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBib3R0b206IDA7CisgIGxlZnQ6IDA7CisgIHotaW5kZXg6IDEwNTA7CisgIGRpc3BsYXk6IG5vbmU7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKKyAgb3V0bGluZTogMDsKK30KKy5tb2RhbC5mYWRlIC5tb2RhbC1kaWFsb2cgeworICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDsKKyAgICAgICAtby10cmFuc2l0aW9uOiAgICAgIC1vLXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7CisgICAgICAgICAgdHJhbnNpdGlvbjogICAgICAgICB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0OworICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpOworICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpOworICAgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpOworICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpOworfQorLm1vZGFsLmluIC5tb2RhbC1kaWFsb2cgeworICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOworICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOworICAgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOworICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOworfQorLm1vZGFsLW9wZW4gLm1vZGFsIHsKKyAgb3ZlcmZsb3cteDogaGlkZGVuOworICBvdmVyZmxvdy15OiBhdXRvOworfQorLm1vZGFsLWRpYWxvZyB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgd2lkdGg6IGF1dG87CisgIG1hcmdpbjogMTBweDsKK30KKy5tb2RhbC1jb250ZW50IHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CisgICAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKKyAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAuMik7CisgIGJvcmRlci1yYWRpdXM6IDZweDsKKyAgb3V0bGluZTogMDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAuNSk7CisgICAgICAgICAgYm94LXNoYWRvdzogMCAzcHggOXB4IHJnYmEoMCwgMCwgMCwgLjUpOworfQorLm1vZGFsLWJhY2tkcm9wIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBib3R0b206IDA7CisgIGxlZnQ6IDA7CisgIHotaW5kZXg6IDEwNDA7CisgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7Cit9CisubW9kYWwtYmFja2Ryb3AuZmFkZSB7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsKKyAgb3BhY2l0eTogMDsKK30KKy5tb2RhbC1iYWNrZHJvcC5pbiB7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7CisgIG9wYWNpdHk6IC41OworfQorLm1vZGFsLWhlYWRlciB7CisgIHBhZGRpbmc6IDE1cHg7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1OworfQorLm1vZGFsLWhlYWRlciAuY2xvc2UgeworICBtYXJnaW4tdG9wOiAtMnB4OworfQorLm1vZGFsLXRpdGxlIHsKKyAgbWFyZ2luOiAwOworICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKK30KKy5tb2RhbC1ib2R5IHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBwYWRkaW5nOiAxNXB4OworfQorLm1vZGFsLWZvb3RlciB7CisgIHBhZGRpbmc6IDE1cHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKK30KKy5tb2RhbC1mb290ZXIgLmJ0biArIC5idG4geworICBtYXJnaW4tYm90dG9tOiAwOworICBtYXJnaW4tbGVmdDogNXB4OworfQorLm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4gKyAuYnRuIHsKKyAgbWFyZ2luLWxlZnQ6IC0xcHg7Cit9CisubW9kYWwtZm9vdGVyIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CisubW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogLTk5OTlweDsKKyAgd2lkdGg6IDUwcHg7CisgIGhlaWdodDogNTBweDsKKyAgb3ZlcmZsb3c6IHNjcm9sbDsKK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeworICAubW9kYWwtZGlhbG9nIHsKKyAgICB3aWR0aDogNjAwcHg7CisgICAgbWFyZ2luOiAzMHB4IGF1dG87CisgIH0KKyAgLm1vZGFsLWNvbnRlbnQgeworICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIC41KTsKKyAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAuNSk7CisgIH0KKyAgLm1vZGFsLXNtIHsKKyAgICB3aWR0aDogMzAwcHg7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgeworICAubW9kYWwtbGcgeworICAgIHdpZHRoOiA5MDBweDsKKyAgfQorfQorLnRvb2x0aXAgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHotaW5kZXg6IDEwNzA7CisgIGRpc3BsYXk6IGJsb2NrOworICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiAxMnB4OworICBmb250LXN0eWxlOiBub3JtYWw7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzOworICB0ZXh0LWFsaWduOiBsZWZ0OworICB0ZXh0LWFsaWduOiBzdGFydDsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CisgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CisgIHdvcmQtYnJlYWs6IG5vcm1hbDsKKyAgd29yZC1zcGFjaW5nOiBub3JtYWw7CisgIHdvcmQtd3JhcDogbm9ybWFsOworICB3aGl0ZS1zcGFjZTogbm9ybWFsOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7CisgIG9wYWNpdHk6IDA7CisKKyAgbGluZS1icmVhazogYXV0bzsKK30KKy50b29sdGlwLmluIHsKKyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTsKKyAgb3BhY2l0eTogLjk7Cit9CisudG9vbHRpcC50b3AgeworICBwYWRkaW5nOiA1cHggMDsKKyAgbWFyZ2luLXRvcDogLTNweDsKK30KKy50b29sdGlwLnJpZ2h0IHsKKyAgcGFkZGluZzogMCA1cHg7CisgIG1hcmdpbi1sZWZ0OiAzcHg7Cit9CisudG9vbHRpcC5ib3R0b20geworICBwYWRkaW5nOiA1cHggMDsKKyAgbWFyZ2luLXRvcDogM3B4OworfQorLnRvb2x0aXAubGVmdCB7CisgIHBhZGRpbmc6IDAgNXB4OworICBtYXJnaW4tbGVmdDogLTNweDsKK30KKy50b29sdGlwLWlubmVyIHsKKyAgbWF4LXdpZHRoOiAyMDBweDsKKyAgcGFkZGluZzogM3B4IDhweDsKKyAgY29sb3I6ICNmZmY7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworfQorLnRvb2x0aXAtYXJyb3cgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdpZHRoOiAwOworICBoZWlnaHQ6IDA7CisgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1zdHlsZTogc29saWQ7Cit9CisudG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cgeworICBib3R0b206IDA7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luLWxlZnQ6IC01cHg7CisgIGJvcmRlci13aWR0aDogNXB4IDVweCAwOworICBib3JkZXItdG9wLWNvbG9yOiAjMDAwOworfQorLnRvb2x0aXAudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cgeworICByaWdodDogNXB4OworICBib3R0b206IDA7CisgIG1hcmdpbi1ib3R0b206IC01cHg7CisgIGJvcmRlci13aWR0aDogNXB4IDVweCAwOworICBib3JkZXItdG9wLWNvbG9yOiAjMDAwOworfQorLnRvb2x0aXAudG9wLXJpZ2h0IC50b29sdGlwLWFycm93IHsKKyAgYm90dG9tOiAwOworICBsZWZ0OiA1cHg7CisgIG1hcmdpbi1ib3R0b206IC01cHg7CisgIGJvcmRlci13aWR0aDogNXB4IDVweCAwOworICBib3JkZXItdG9wLWNvbG9yOiAjMDAwOworfQorLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cgeworICB0b3A6IDUwJTsKKyAgbGVmdDogMDsKKyAgbWFyZ2luLXRvcDogLTVweDsKKyAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwOworICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDA7Cit9CisudG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93IHsKKyAgdG9wOiA1MCU7CisgIHJpZ2h0OiAwOworICBtYXJnaW4tdG9wOiAtNXB4OworICBib3JkZXItd2lkdGg6IDVweCAwIDVweCA1cHg7CisgIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDAwOworfQorLnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93IHsKKyAgdG9wOiAwOworICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0OiAtNXB4OworICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDsKK30KKy50b29sdGlwLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHsKKyAgdG9wOiAwOworICByaWdodDogNXB4OworICBtYXJnaW4tdG9wOiAtNXB4OworICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDsKK30KKy50b29sdGlwLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvdyB7CisgIHRvcDogMDsKKyAgbGVmdDogNXB4OworICBtYXJnaW4tdG9wOiAtNXB4OworICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDsKK30KKy5wb3BvdmVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIGxlZnQ6IDA7CisgIHotaW5kZXg6IDEwNjA7CisgIGRpc3BsYXk6IG5vbmU7CisgIG1heC13aWR0aDogMjc2cHg7CisgIHBhZGRpbmc6IDFweDsKKyAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTRweDsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICBmb250LXdlaWdodDogbm9ybWFsOworICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MzsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgdGV4dC1hbGlnbjogc3RhcnQ7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgdGV4dC1zaGFkb3c6IG5vbmU7CisgIHRleHQtdHJhbnNmb3JtOiBub25lOworICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOworICB3b3JkLWJyZWFrOiBub3JtYWw7CisgIHdvcmQtc3BhY2luZzogbm9ybWFsOworICB3b3JkLXdyYXA6IG5vcm1hbDsKKyAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjIpOworICBib3JkZXItcmFkaXVzOiA2cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIC4yKTsKKyAgICAgICAgICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgLjIpOworCisgIGxpbmUtYnJlYWs6IGF1dG87Cit9CisucG9wb3Zlci50b3AgeworICBtYXJnaW4tdG9wOiAtMTBweDsKK30KKy5wb3BvdmVyLnJpZ2h0IHsKKyAgbWFyZ2luLWxlZnQ6IDEwcHg7Cit9CisucG9wb3Zlci5ib3R0b20geworICBtYXJnaW4tdG9wOiAxMHB4OworfQorLnBvcG92ZXIubGVmdCB7CisgIG1hcmdpbi1sZWZ0OiAtMTBweDsKK30KKy5wb3BvdmVyLXRpdGxlIHsKKyAgcGFkZGluZzogOHB4IDE0cHg7CisgIG1hcmdpbjogMDsKKyAgZm9udC1zaXplOiAxNHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OworICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWJlYjsKKyAgYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7Cit9CisucG9wb3Zlci1jb250ZW50IHsKKyAgcGFkZGluZzogOXB4IDE0cHg7Cit9CisucG9wb3ZlciA+IC5hcnJvdywKKy5wb3BvdmVyID4gLmFycm93OmFmdGVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6IDA7CisgIGhlaWdodDogMDsKKyAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKK30KKy5wb3BvdmVyID4gLmFycm93IHsKKyAgYm9yZGVyLXdpZHRoOiAxMXB4OworfQorLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIgeworICBjb250ZW50OiAiIjsKKyAgYm9yZGVyLXdpZHRoOiAxMHB4OworfQorLnBvcG92ZXIudG9wID4gLmFycm93IHsKKyAgYm90dG9tOiAtMTFweDsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDogLTExcHg7CisgIGJvcmRlci10b3AtY29sb3I6ICM5OTk7CisgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjI1KTsKKyAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDsKK30KKy5wb3BvdmVyLnRvcCA+IC5hcnJvdzphZnRlciB7CisgIGJvdHRvbTogMXB4OworICBtYXJnaW4tbGVmdDogLTEwcHg7CisgIGNvbnRlbnQ6ICIgIjsKKyAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDsKK30KKy5wb3BvdmVyLnJpZ2h0ID4gLmFycm93IHsKKyAgdG9wOiA1MCU7CisgIGxlZnQ6IC0xMXB4OworICBtYXJnaW4tdG9wOiAtMTFweDsKKyAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjOTk5OworICBib3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjI1KTsKKyAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7Cit9CisucG9wb3Zlci5yaWdodCA+IC5hcnJvdzphZnRlciB7CisgIGJvdHRvbTogLTEwcHg7CisgIGxlZnQ6IDFweDsKKyAgY29udGVudDogIiAiOworICBib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1sZWZ0LXdpZHRoOiAwOworfQorLnBvcG92ZXIuYm90dG9tID4gLmFycm93IHsKKyAgdG9wOiAtMTFweDsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDogLTExcHg7CisgIGJvcmRlci10b3Atd2lkdGg6IDA7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICM5OTk7CisgIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgLjI1KTsKK30KKy5wb3BvdmVyLmJvdHRvbSA+IC5hcnJvdzphZnRlciB7CisgIHRvcDogMXB4OworICBtYXJnaW4tbGVmdDogLTEwcHg7CisgIGNvbnRlbnQ6ICIgIjsKKyAgYm9yZGVyLXRvcC13aWR0aDogMDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKy5wb3BvdmVyLmxlZnQgPiAuYXJyb3cgeworICB0b3A6IDUwJTsKKyAgcmlnaHQ6IC0xMXB4OworICBtYXJnaW4tdG9wOiAtMTFweDsKKyAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwOworICBib3JkZXItbGVmdC1jb2xvcjogIzk5OTsKKyAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjI1KTsKK30KKy5wb3BvdmVyLmxlZnQgPiAuYXJyb3c6YWZ0ZXIgeworICByaWdodDogMXB4OworICBib3R0b206IC0xMHB4OworICBjb250ZW50OiAiICI7CisgIGJvcmRlci1yaWdodC13aWR0aDogMDsKKyAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7Cit9CisuY2Fyb3VzZWwgeworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisuY2Fyb3VzZWwtaW5uZXIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHdpZHRoOiAxMDAlOworICBvdmVyZmxvdzogaGlkZGVuOworfQorLmNhcm91c2VsLWlubmVyID4gLml0ZW0geworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IG5vbmU7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogLjZzIGVhc2UtaW4tb3V0IGxlZnQ7CisgICAgICAgLW8tdHJhbnNpdGlvbjogLjZzIGVhc2UtaW4tb3V0IGxlZnQ7CisgICAgICAgICAgdHJhbnNpdGlvbjogLjZzIGVhc2UtaW4tb3V0IGxlZnQ7Cit9CisuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSA+IGltZywKKy5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gYSA+IGltZyB7CisgIGxpbmUtaGVpZ2h0OiAxOworfQorQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksICgtd2Via2l0LXRyYW5zZm9ybS0zZCkgeworICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSB7CisgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7CisgICAgICAgICAtby10cmFuc2l0aW9uOiAgICAgIC1vLXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7CisgICAgICAgICAgICB0cmFuc2l0aW9uOiAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7CisKKyAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKKyAgICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKKyAgICAtd2Via2l0LXBlcnNwZWN0aXZlOiAxMDAwcHg7CisgICAgICAgICAgICBwZXJzcGVjdGl2ZTogMTAwMHB4OworICB9CisgIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLm5leHQsCisgIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZS5yaWdodCB7CisgICAgbGVmdDogMDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7CisgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApOworICB9CisgIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLnByZXYsCisgIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZS5sZWZ0IHsKKyAgICBsZWZ0OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7CisgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTsKKyAgfQorICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5uZXh0LmxlZnQsCisgIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLnByZXYucmlnaHQsCisgIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZSB7CisgICAgbGVmdDogMDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CisgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOworICB9Cit9CisuY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLAorLmNhcm91c2VsLWlubmVyID4gLm5leHQsCisuY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLmNhcm91c2VsLWlubmVyID4gLmFjdGl2ZSB7CisgIGxlZnQ6IDA7Cit9CisuY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCwKKy5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIHdpZHRoOiAxMDAlOworfQorLmNhcm91c2VsLWlubmVyID4gLm5leHQgeworICBsZWZ0OiAxMDAlOworfQorLmNhcm91c2VsLWlubmVyID4gLnByZXYgeworICBsZWZ0OiAtMTAwJTsKK30KKy5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LmxlZnQsCisuY2Fyb3VzZWwtaW5uZXIgPiAucHJldi5yaWdodCB7CisgIGxlZnQ6IDA7Cit9CisuY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLmxlZnQgeworICBsZWZ0OiAtMTAwJTsKK30KKy5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUucmlnaHQgeworICBsZWZ0OiAxMDAlOworfQorLmNhcm91c2VsLWNvbnRyb2wgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgYm90dG9tOiAwOworICBsZWZ0OiAwOworICB3aWR0aDogMTUlOworICBmb250LXNpemU6IDIwcHg7CisgIGNvbG9yOiAjZmZmOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAuNik7CisgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7CisgIG9wYWNpdHk6IC41OworfQorLmNhcm91c2VsLWNvbnRyb2wubGVmdCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgLjUpIDAlLCByZ2JhKDAsIDAsIDAsIC4wMDAxKSAxMDAlKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDEwMCUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIHJpZ2h0IHRvcCwgZnJvbShyZ2JhKDAsIDAsIDAsIC41KSksIHRvKHJnYmEoMCwgMCwgMCwgLjAwMDEpKSk7CisgIGJhY2tncm91bmQtaW1hZ2U6ICAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIC41KSAwJSwgcmdiYSgwLCAwLCAwLCAuMDAwMSkgMTAwJSk7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyM4MDAwMDAwMCcsIGVuZENvbG9yc3RyPScjMDAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSk7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKy5jYXJvdXNlbC1jb250cm9sLnJpZ2h0IHsKKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IGF1dG87CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIC41KSAxMDAlKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogICAgICAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAuMDAwMSkgMCUsIHJnYmEoMCwgMCwgMCwgLjUpIDEwMCUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIHJpZ2h0IHRvcCwgZnJvbShyZ2JhKDAsIDAsIDAsIC4wMDAxKSksIHRvKHJnYmEoMCwgMCwgMCwgLjUpKSk7CisgIGJhY2tncm91bmQtaW1hZ2U6ICAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIC4wMDAxKSAwJSwgcmdiYSgwLCAwLCAwLCAuNSkgMTAwJSk7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyMwMDAwMDAwMCcsIGVuZENvbG9yc3RyPScjODAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSk7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKy5jYXJvdXNlbC1jb250cm9sOmhvdmVyLAorLmNhcm91c2VsLWNvbnRyb2w6Zm9jdXMgeworICBjb2xvcjogI2ZmZjsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9OTApOworICBvdXRsaW5lOiAwOworICBvcGFjaXR5OiAuOTsKK30KKy5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsCisuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LAorLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsCisuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogNTAlOworICB6LWluZGV4OiA1OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIG1hcmdpbi10b3A6IC0xMHB4OworfQorLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldiwKKy5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0IHsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDogLTEwcHg7Cit9CisuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LAorLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHsKKyAgcmlnaHQ6IDUwJTsKKyAgbWFyZ2luLXJpZ2h0OiAtMTBweDsKK30KKy5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsCisuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0IHsKKyAgd2lkdGg6IDIwcHg7CisgIGhlaWdodDogMjBweDsKKyAgZm9udC1mYW1pbHk6IHNlcmlmOworICBsaW5lLWhlaWdodDogMTsKK30KKy5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXY6YmVmb3JlIHsKKyAgY29udGVudDogJ1wyMDM5JzsKK30KKy5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQ6YmVmb3JlIHsKKyAgY29udGVudDogJ1wyMDNhJzsKK30KKy5jYXJvdXNlbC1pbmRpY2F0b3JzIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDEwcHg7CisgIGxlZnQ6IDUwJTsKKyAgei1pbmRleDogMTU7CisgIHdpZHRoOiA2MCU7CisgIHBhZGRpbmctbGVmdDogMDsKKyAgbWFyZ2luLWxlZnQ6IC0zMCU7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgbGlzdC1zdHlsZTogbm9uZTsKK30KKy5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB3aWR0aDogMTBweDsKKyAgaGVpZ2h0OiAxMHB4OworICBtYXJnaW46IDFweDsKKyAgdGV4dC1pbmRlbnQ6IC05OTlweDsKKyAgY3Vyc29yOiBwb2ludGVyOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwIFw5OworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOworICBib3JkZXI6IDFweCBzb2xpZCAjZmZmOworICBib3JkZXItcmFkaXVzOiAxMHB4OworfQorLmNhcm91c2VsLWluZGljYXRvcnMgLmFjdGl2ZSB7CisgIHdpZHRoOiAxMnB4OworICBoZWlnaHQ6IDEycHg7CisgIG1hcmdpbjogMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKK30KKy5jYXJvdXNlbC1jYXB0aW9uIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICByaWdodDogMTUlOworICBib3R0b206IDIwcHg7CisgIGxlZnQ6IDE1JTsKKyAgei1pbmRleDogMTA7CisgIHBhZGRpbmctdG9wOiAyMHB4OworICBwYWRkaW5nLWJvdHRvbTogMjBweDsKKyAgY29sb3I6ICNmZmY7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIC42KTsKK30KKy5jYXJvdXNlbC1jYXB0aW9uIC5idG4geworICB0ZXh0LXNoYWRvdzogbm9uZTsKK30KK0BtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LAorICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQsCisgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsCisgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQgeworICAgIHdpZHRoOiAzMHB4OworICAgIGhlaWdodDogMzBweDsKKyAgICBtYXJnaW4tdG9wOiAtMTBweDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgIH0KKyAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsCisgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYgeworICAgIG1hcmdpbi1sZWZ0OiAtMTBweDsKKyAgfQorICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQsCisgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQgeworICAgIG1hcmdpbi1yaWdodDogLTEwcHg7CisgIH0KKyAgLmNhcm91c2VsLWNhcHRpb24geworICAgIHJpZ2h0OiAyMCU7CisgICAgbGVmdDogMjAlOworICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OworICB9CisgIC5jYXJvdXNlbC1pbmRpY2F0b3JzIHsKKyAgICBib3R0b206IDIwcHg7CisgIH0KK30KKy5jbGVhcmZpeDpiZWZvcmUsCisuY2xlYXJmaXg6YWZ0ZXIsCisuZGwtaG9yaXpvbnRhbCBkZDpiZWZvcmUsCisuZGwtaG9yaXpvbnRhbCBkZDphZnRlciwKKy5jb250YWluZXI6YmVmb3JlLAorLmNvbnRhaW5lcjphZnRlciwKKy5jb250YWluZXItZmx1aWQ6YmVmb3JlLAorLmNvbnRhaW5lci1mbHVpZDphZnRlciwKKy5yb3c6YmVmb3JlLAorLnJvdzphZnRlciwKKy5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YmVmb3JlLAorLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDphZnRlciwKKy5idG4tdG9vbGJhcjpiZWZvcmUsCisuYnRuLXRvb2xiYXI6YWZ0ZXIsCisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpiZWZvcmUsCisuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDphZnRlciwKKy5uYXY6YmVmb3JlLAorLm5hdjphZnRlciwKKy5uYXZiYXI6YmVmb3JlLAorLm5hdmJhcjphZnRlciwKKy5uYXZiYXItaGVhZGVyOmJlZm9yZSwKKy5uYXZiYXItaGVhZGVyOmFmdGVyLAorLm5hdmJhci1jb2xsYXBzZTpiZWZvcmUsCisubmF2YmFyLWNvbGxhcHNlOmFmdGVyLAorLnBhZ2VyOmJlZm9yZSwKKy5wYWdlcjphZnRlciwKKy5wYW5lbC1ib2R5OmJlZm9yZSwKKy5wYW5lbC1ib2R5OmFmdGVyLAorLm1vZGFsLWhlYWRlcjpiZWZvcmUsCisubW9kYWwtaGVhZGVyOmFmdGVyLAorLm1vZGFsLWZvb3RlcjpiZWZvcmUsCisubW9kYWwtZm9vdGVyOmFmdGVyIHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIgIjsKK30KKy5jbGVhcmZpeDphZnRlciwKKy5kbC1ob3Jpem9udGFsIGRkOmFmdGVyLAorLmNvbnRhaW5lcjphZnRlciwKKy5jb250YWluZXItZmx1aWQ6YWZ0ZXIsCisucm93OmFmdGVyLAorLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDphZnRlciwKKy5idG4tdG9vbGJhcjphZnRlciwKKy5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyLAorLm5hdjphZnRlciwKKy5uYXZiYXI6YWZ0ZXIsCisubmF2YmFyLWhlYWRlcjphZnRlciwKKy5uYXZiYXItY29sbGFwc2U6YWZ0ZXIsCisucGFnZXI6YWZ0ZXIsCisucGFuZWwtYm9keTphZnRlciwKKy5tb2RhbC1oZWFkZXI6YWZ0ZXIsCisubW9kYWwtZm9vdGVyOmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CisuY2VudGVyLWJsb2NrIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIG1hcmdpbi1yaWdodDogYXV0bzsKKyAgbWFyZ2luLWxlZnQ6IGF1dG87Cit9CisucHVsbC1yaWdodCB7CisgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OworfQorLnB1bGwtbGVmdCB7CisgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7Cit9CisuaGlkZSB7CisgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKK30KKy5zaG93IHsKKyAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKK30KKy5pbnZpc2libGUgeworICB2aXNpYmlsaXR5OiBoaWRkZW47Cit9CisudGV4dC1oaWRlIHsKKyAgZm9udDogMC8wIGE7CisgIGNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1zaGFkb3c6IG5vbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBib3JkZXI6IDA7Cit9CisuaGlkZGVuIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorLmFmZml4IHsKKyAgcG9zaXRpb246IGZpeGVkOworfQorQC1tcy12aWV3cG9ydCB7CisgIHdpZHRoOiBkZXZpY2Utd2lkdGg7Cit9CisudmlzaWJsZS14cywKKy52aXNpYmxlLXNtLAorLnZpc2libGUtbWQsCisudmlzaWJsZS1sZyB7CisgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKK30KKy52aXNpYmxlLXhzLWJsb2NrLAorLnZpc2libGUteHMtaW5saW5lLAorLnZpc2libGUteHMtaW5saW5lLWJsb2NrLAorLnZpc2libGUtc20tYmxvY2ssCisudmlzaWJsZS1zbS1pbmxpbmUsCisudmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssCisudmlzaWJsZS1tZC1ibG9jaywKKy52aXNpYmxlLW1kLWlubGluZSwKKy52aXNpYmxlLW1kLWlubGluZS1ibG9jaywKKy52aXNpYmxlLWxnLWJsb2NrLAorLnZpc2libGUtbGctaW5saW5lLAorLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CisgIC52aXNpYmxlLXhzIHsKKyAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OworICB9CisgIHRhYmxlLnZpc2libGUteHMgeworICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7CisgIH0KKyAgdHIudmlzaWJsZS14cyB7CisgICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7CisgIH0KKyAgdGgudmlzaWJsZS14cywKKyAgdGQudmlzaWJsZS14cyB7CisgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsKKyAgLnZpc2libGUteHMtYmxvY2sgeworICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CisgIH0KK30KK0BtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgeworICAudmlzaWJsZS14cy1pbmxpbmUgeworICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsKKyAgLnZpc2libGUteHMtaW5saW5lLWJsb2NrIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKKyAgfQorfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHsKKyAgLnZpc2libGUtc20geworICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CisgIH0KKyAgdGFibGUudmlzaWJsZS1zbSB7CisgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsKKyAgfQorICB0ci52aXNpYmxlLXNtIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsKKyAgfQorICB0aC52aXNpYmxlLXNtLAorICB0ZC52aXNpYmxlLXNtIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7CisgIC52aXNpYmxlLXNtLWJsb2NrIHsKKyAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkgeworICAudmlzaWJsZS1zbS1pbmxpbmUgeworICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkgeworICAudmlzaWJsZS1zbS1pbmxpbmUtYmxvY2sgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHsKKyAgLnZpc2libGUtbWQgeworICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CisgIH0KKyAgdGFibGUudmlzaWJsZS1tZCB7CisgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsKKyAgfQorICB0ci52aXNpYmxlLW1kIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsKKyAgfQorICB0aC52aXNpYmxlLW1kLAorICB0ZC52aXNpYmxlLW1kIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkgeworICAudmlzaWJsZS1tZC1ibG9jayB7CisgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgfQorfQorQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7CisgIC52aXNpYmxlLW1kLWlubGluZSB7CisgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkgeworICAudmlzaWJsZS1tZC1pbmxpbmUtYmxvY2sgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CisgIC52aXNpYmxlLWxnIHsKKyAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OworICB9CisgIHRhYmxlLnZpc2libGUtbGcgeworICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7CisgIH0KKyAgdHIudmlzaWJsZS1sZyB7CisgICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7CisgIH0KKyAgdGgudmlzaWJsZS1sZywKKyAgdGQudmlzaWJsZS1sZyB7CisgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CisgIC52aXNpYmxlLWxnLWJsb2NrIHsKKyAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CisgIC52aXNpYmxlLWxnLWlubGluZSB7CisgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7CisgIH0KK30KK0BtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKKyAgLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKKyAgfQorfQorQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CisgIC5oaWRkZW4teHMgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgfQorfQorQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHsKKyAgLmhpZGRlbi1zbSB7CisgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHsKKyAgLmhpZGRlbi1tZCB7CisgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICB9Cit9CitAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CisgIC5oaWRkZW4tbGcgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgfQorfQorLnZpc2libGUtcHJpbnQgeworICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CitAbWVkaWEgcHJpbnQgeworICAudmlzaWJsZS1wcmludCB7CisgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgfQorICB0YWJsZS52aXNpYmxlLXByaW50IHsKKyAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50OworICB9CisgIHRyLnZpc2libGUtcHJpbnQgeworICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OworICB9CisgIHRoLnZpc2libGUtcHJpbnQsCisgIHRkLnZpc2libGUtcHJpbnQgeworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsKKyAgfQorfQorLnZpc2libGUtcHJpbnQtYmxvY2sgeworICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CitAbWVkaWEgcHJpbnQgeworICAudmlzaWJsZS1wcmludC1ibG9jayB7CisgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgfQorfQorLnZpc2libGUtcHJpbnQtaW5saW5lIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorQG1lZGlhIHByaW50IHsKKyAgLnZpc2libGUtcHJpbnQtaW5saW5lIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKKyAgfQorfQorLnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2NrIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorQG1lZGlhIHByaW50IHsKKyAgLnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2NrIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKKyAgfQorfQorQG1lZGlhIHByaW50IHsKKyAgLmhpZGRlbi1wcmludCB7CisgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICB9Cit9CisvKiMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAuY3NzLm1hcCAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5jc3MubWFwIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5jc3MubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjhjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLmNzcy5tYXAKQEAgLTAsMCArMSBAQAoreyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvb3RzdHJhcC5jc3MiLCJsZXNzL25vcm1hbGl6ZS5sZXNzIiwibGVzcy9wcmludC5sZXNzIiwibGVzcy9nbHlwaGljb25zLmxlc3MiLCJsZXNzL3NjYWZmb2xkaW5nLmxlc3MiLCJsZXNzL21peGlucy92ZW5kb3ItcHJlZml4ZXMubGVzcyIsImxlc3MvbWl4aW5zL3RhYi1mb2N1cy5sZXNzIiwibGVzcy9taXhpbnMvaW1hZ2UubGVzcyIsImxlc3MvdHlwZS5sZXNzIiwibGVzcy9taXhpbnMvdGV4dC1lbXBoYXNpcy5sZXNzIiwibGVzcy9taXhpbnMvYmFja2dyb3VuZC12YXJpYW50Lmxlc3MiLCJsZXNzL21peGlucy90ZXh0LW92ZXJmbG93Lmxlc3MiLCJsZXNzL2NvZGUubGVzcyIsImxlc3MvZ3JpZC5sZXNzIiwibGVzcy9taXhpbnMvZ3JpZC5sZXNzIiwibGVzcy9taXhpbnMvZ3JpZC1mcmFtZXdvcmsubGVzcyIsImxlc3MvdGFibGVzLmxlc3MiLCJsZXNzL21peGlucy90YWJsZS1yb3cubGVzcyIsImxlc3MvZm9ybXMubGVzcyIsImxlc3MvbWl4aW5zL2Zvcm1zLmxlc3MiLCJsZXNzL2J1dHRvbnMubGVzcyIsImxlc3MvbWl4aW5zL2J1dHRvbnMubGVzcyIsImxlc3MvbWl4aW5zL29wYWNpdHkubGVzcyIsImxlc3MvY29tcG9uZW50LWFuaW1hdGlvbnMubGVzcyIsImxlc3MvZHJvcGRvd25zLmxlc3MiLCJsZXNzL21peGlucy9uYXYtZGl2aWRlci5sZXNzIiwibGVzcy9taXhpbnMvcmVzZXQtZmlsdGVyLmxlc3MiLCJsZXNzL2J1dHRvbi1ncm91cHMubGVzcyIsImxlc3MvbWl4aW5zL2JvcmRlci1yYWRpdXMubGVzcyIsImxlc3MvaW5wdXQtZ3JvdXBzLmxlc3MiLCJsZXNzL25hdnMubGVzcyIsImxlc3MvbmF2YmFyLmxlc3MiLCJsZXNzL21peGlucy9uYXYtdmVydGljYWwtYWxpZ24ubGVzcyIsImxlc3MvdXRpbGl0aWVzLmxlc3MiLCJsZXNzL2JyZWFkY3J1bWJzLmxlc3MiLCJsZXNzL3BhZ2luYXRpb24ubGVzcyIsImxlc3MvbWl4aW5zL3BhZ2luYXRpb24ubGVzcyIsImxlc3MvcGFnZXIubGVzcyIsImxlc3MvbGFiZWxzLmxlc3MiLCJsZXNzL21peGlucy9sYWJlbHMubGVzcyIsImxlc3MvYmFkZ2VzLmxlc3MiLCJsZXNzL2p1bWJvdHJvbi5sZXNzIiwibGVzcy90aHVtYm5haWxzLmxlc3MiLCJsZXNzL2FsZXJ0cy5sZXNzIiwibGVzcy9taXhpbnMvYWxlcnRzLmxlc3MiLCJsZXNzL3Byb2dyZXNzLWJhcnMubGVzcyIsImxlc3MvbWl4aW5zL2dyYWRpZW50cy5sZXNzIiwibGVzcy9taXhpbnMvcHJvZ3Jlc3MtYmFyLmxlc3MiLCJsZXNzL21lZGlhLmxlc3MiLCJsZXNzL2xpc3QtZ3JvdXAubGVzcyIsImxlc3MvbWl4aW5zL2xpc3QtZ3JvdXAubGVzcyIsImxlc3MvcGFuZWxzLmxlc3MiLCJsZXNzL21peGlucy9wYW5lbHMubGVzcyIsImxlc3MvcmVzcG9uc2l2ZS1lbWJlZC5sZXNzIiwibGVzcy93ZWxscy5sZXNzIiwibGVzcy9jbG9zZS5sZXNzIiwibGVzcy9tb2RhbHMubGVzcyIsImxlc3MvdG9vbHRpcC5sZXNzIiwibGVzcy9taXhpbnMvcmVzZXQtdGV4dC5sZXNzIiwibGVzcy9wb3BvdmVycy5sZXNzIiwibGVzcy9jYXJvdXNlbC5sZXNzIiwibGVzcy9taXhpbnMvY2xlYXJmaXgubGVzcyIsImxlc3MvbWl4aW5zL2NlbnRlci1ibG9jay5sZXNzIiwibGVzcy9taXhpbnMvaGlkZS10ZXh0Lmxlc3MiLCJsZXNzL3Jlc3BvbnNpdmUtdXRpbGl0aWVzLmxlc3MiLCJsZXNzL21peGlucy9yZXNwb25zaXZlLXZpc2liaWxpdHkubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsNEVBQTRFO0FDRzVFO0VBQ0Usd0JBQUE7RUFDQSwyQkFBQTtFQUNBLCtCQUFBO0NEREQ7QUNRRDtFQUNFLFVBQUE7Q0RORDtBQ21CRDs7Ozs7Ozs7Ozs7OztFQWFFLGVBQUE7Q0RqQkQ7QUN5QkQ7Ozs7RUFJRSxzQkFBQTtFQUNBLHlCQUFBO0NEdkJEO0FDK0JEO0VBQ0UsY0FBQTtFQUNBLFVBQUE7Q0Q3QkQ7QUNxQ0Q7O0VBRUUsY0FBQTtDRG5DRDtBQzZDRDtFQUNFLDhCQUFBO0NEM0NEO0FDbUREOztFQUVFLFdBQUE7Q0RqREQ7QUMyREQ7RUFDRSwwQkFBQTtDRHpERDtBQ2dFRDs7RUFFRSxrQkFBQTtDRDlERDtBQ3FFRDtFQUNFLG1CQUFBO0NEbkVEO0FDMkVEO0VBQ0UsZUFBQTtFQUNBLGlCQUFBO0NEekVEO0FDZ0ZEO0VBQ0UsaUJBQUE7RUFDQSxZQUFBO0NEOUVEO0FDcUZEO0VBQ0UsZUFBQTtDRG5GRDtBQzBGRDs7RUFFRSxlQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0VBQ0EseUJBQUE7Q0R4RkQ7QUMyRkQ7RUFDRSxZQUFBO0NEekZEO0FDNEZEO0VBQ0UsZ0JBQUE7Q0QxRkQ7QUNvR0Q7RUFDRSxVQUFBO0NEbEdEO0FDeUdEO0VBQ0UsaUJBQUE7Q0R2R0Q7QUNpSEQ7RUFDRSxpQkFBQTtDRC9HRDtBQ3NIRDtFQUNFLGdDQUFBO0tBQUEsNkJBQUE7VUFBQSx3QkFBQTtFQUNBLFVBQUE7Q0RwSEQ7QUMySEQ7RUFDRSxlQUFBO0NEekhEO0FDZ0lEOzs7O0VBSUUsa0NBQUE7RUFDQSxlQUFBO0NEOUhEO0FDZ0pEOzs7OztFQUtFLGVBQUE7RUFDQSxjQUFBO0VBQ0EsVUFBQTtDRDlJRDtBQ3FKRDtFQUNFLGtCQUFBO0NEbkpEO0FDNkpEOztFQUVFLHFCQUFBO0NEM0pEO0FDc0tEOzs7O0VBSUUsMkJBQUE7RUFDQSxnQkFBQTtDRHBLRDtBQzJLRDs7RUFFRSxnQkFBQTtDRHpLRDtBQ2dMRDs7RUFFRSxVQUFBO0VBQ0EsV0FBQTtDRDlLRDtBQ3NMRDtFQUNFLG9CQUFBO0NEcExEO0FDK0xEOztFQUVFLCtCQUFBO0tBQUEsNEJBQUE7VUFBQSx1QkFBQTtFQUNBLFdBQUE7Q0Q3TEQ7QUNzTUQ7O0VBRUUsYUFBQTtDRHBNRDtBQzRNRDtFQUNFLDhCQUFBO0VBQ0EsZ0NBQUE7S0FBQSw2QkFBQTtVQUFBLHdCQUFBO0NEMU1EO0FDbU5EOztFQUVFLHlCQUFBO0NEak5EO0FDd05EO0VBQ0UsMEJBQUE7RUFDQSxjQUFBO0VBQ0EsK0JBQUE7Q0R0TkQ7QUM4TkQ7RUFDRSxVQUFBO0VBQ0EsV0FBQTtDRDVORDtBQ21PRDtFQUNFLGVBQUE7Q0RqT0Q7QUN5T0Q7RUFDRSxrQkFBQTtDRHZPRDtBQ2lQRDtFQUNFLDBCQUFBO0VBQ0Esa0JBQUE7Q0QvT0Q7QUNrUEQ7O0VBRUUsV0FBQTtDRGhQRDtBQUNELHFGQUFxRjtBRWxGckY7RUE3Rkk7OztJQUdJLG1DQUFBO0lBQ0EsdUJBQUE7SUFDQSxvQ0FBQTtZQUFBLDRCQUFBO0lBQ0EsNkJBQUE7R0ZrTEw7RUUvS0M7O0lBRUksMkJBQUE7R0ZpTEw7RUU5S0M7SUFDSSw2QkFBQTtHRmdMTDtFRTdLQztJQUNJLDhCQUFBO0dGK0tMO0VFMUtDOztJQUVJLFlBQUE7R0Y0S0w7RUV6S0M7O0lBRUksdUJBQUE7SUFDQSx5QkFBQTtHRjJLTDtFRXhLQztJQUNJLDRCQUFBO0dGMEtMO0VFdktDOztJQUVJLHlCQUFBO0dGeUtMO0VFdEtDO0lBQ0ksMkJBQUE7R0Z3S0w7RUVyS0M7OztJQUdJLFdBQUE7SUFDQSxVQUFBO0dGdUtMO0VFcEtDOztJQUVJLHdCQUFBO0dGc0tMO0VFaEtDO0lBQ0ksY0FBQTtHRmtLTDtFRWhLQzs7SUFHUSxrQ0FBQTtHRmlLVDtFRTlKQztJQUNJLHVCQUFBO0dGZ0tMO0VFN0pDO0lBQ0kscUNBQUE7R0YrSkw7RUVoS0M7O0lBS1Esa0NBQUE7R0YrSlQ7RUU1SkM7O0lBR1Esa0NBQUE7R0Y2SlQ7Q0FDRjtBR25QRDtFQUNFLG9DQUFBO0VBQ0Esc0RBQUE7RUFDQSxnWUFBQTtDSHFQRDtBRzdPRDtFQUNFLG1CQUFBO0VBQ0EsU0FBQTtFQUNBLHNCQUFBO0VBQ0Esb0NBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLG9DQUFBO0VBQ0EsbUNBQUE7Q0grT0Q7QUczT21DO0VBQVcsaUJBQUE7Q0g4TzlDO0FHN09tQztFQUFXLGlCQUFBO0NIZ1A5QztBRzlPbUM7O0VBQVcsaUJBQUE7Q0hrUDlDO0FHalBtQztFQUFXLGlCQUFBO0NIb1A5QztBR25QbUM7RUFBVyxpQkFBQTtDSHNQOUM7QUdyUG1DO0VBQVcsaUJBQUE7Q0h3UDlDO0FHdlBtQztFQUFXLGlCQUFBO0NIMFA5QztBR3pQbUM7RUFBVyxpQkFBQTtDSDRQOUM7QUczUG1DO0VBQVcsaUJBQUE7Q0g4UDlDO0FHN1BtQztFQUFXLGlCQUFBO0NIZ1E5QztBRy9QbUM7RUFBVyxpQkFBQTtDSGtROUM7QUdqUW1DO0VBQVcsaUJBQUE7Q0hvUTlDO0FHblFtQztFQUFXLGlCQUFBO0NIc1E5QztBR3JRbUM7RUFBVyxpQkFBQTtDSHdROUM7QUd2UW1DO0VBQVcsaUJBQUE7Q0gwUTlDO0FHelFtQztFQUFXLGlCQUFBO0NINFE5QztBRzNRbUM7RUFBVyxpQkFBQTtDSDhROUM7QUc3UW1DO0VBQVcsaUJBQUE7Q0hnUjlDO0FHL1FtQztFQUFXLGlCQUFBO0NIa1I5QztBR2pSbUM7RUFBVyxpQkFBQTtDSG9SOUM7QUduUm1DO0VBQVcsaUJBQUE7Q0hzUjlDO0FHclJtQztFQUFXLGlCQUFBO0NId1I5QztBR3ZSbUM7RUFBVyxpQkFBQTtDSDBSOUM7QUd6Um1DO0VBQVcsaUJBQUE7Q0g0UjlDO0FHM1JtQztFQUFXLGlCQUFBO0NIOFI5QztBRzdSbUM7RUFBVyxpQkFBQTtDSGdTOUM7QUcvUm1DO0VBQVcsaUJBQUE7Q0hrUzlDO0FHalNtQztFQUFXLGlCQUFBO0NIb1M5QztBR25TbUM7RUFBVyxpQkFBQTtDSHNTOUM7QUdyU21DO0VBQVcsaUJBQUE7Q0h3UzlDO0FHdlNtQztFQUFXLGlCQUFBO0NIMFM5QztBR3pTbUM7RUFBVyxpQkFBQTtDSDRTOUM7QUczU21DO0VBQVcsaUJBQUE7Q0g4UzlDO0FHN1NtQztFQUFXLGlCQUFBO0NIZ1Q5QztBRy9TbUM7RUFBVyxpQkFBQTtDSGtUOUM7QUdqVG1DO0VBQVcsaUJBQUE7Q0hvVDlDO0FHblRtQztFQUFXLGlCQUFBO0NIc1Q5QztBR3JUbUM7RUFBVyxpQkFBQTtDSHdUOUM7QUd2VG1DO0VBQVcsaUJBQUE7Q0gwVDlDO0FHelRtQztFQUFXLGlCQUFBO0NINFQ5QztBRzNUbUM7RUFBVyxpQkFBQTtDSDhUOUM7QUc3VG1DO0VBQVcsaUJBQUE7Q0hnVTlDO0FHL1RtQztFQUFXLGlCQUFBO0NIa1U5QztBR2pVbUM7RUFBVyxpQkFBQTtDSG9VOUM7QUduVW1DO0VBQVcsaUJBQUE7Q0hzVTlDO0FHclVtQztFQUFXLGlCQUFBO0NId1U5QztBR3ZVbUM7RUFBVyxpQkFBQTtDSDBVOUM7QUd6VW1DO0VBQVcsaUJBQUE7Q0g0VTlDO0FHM1VtQztFQUFXLGlCQUFBO0NIOFU5QztBRzdVbUM7RUFBVyxpQkFBQTtDSGdWOUM7QUcvVW1DO0VBQVcsaUJBQUE7Q0hrVjlDO0FHalZtQztFQUFXLGlCQUFBO0NIb1Y5QztBR25WbUM7RUFBVyxpQkFBQTtDSHNWOUM7QUdyVm1DO0VBQVcsaUJBQUE7Q0h3VjlDO0FHdlZtQztFQUFXLGlCQUFBO0NIMFY5QztBR3pWbUM7RUFBVyxpQkFBQTtDSDRWOUM7QUczVm1DO0VBQVcsaUJBQUE7Q0g4VjlDO0FHN1ZtQztFQUFXLGlCQUFBO0NIZ1c5QztBRy9WbUM7RUFBVyxpQkFBQTtDSGtXOUM7QUdqV21DO0VBQVcsaUJBQUE7Q0hvVzlDO0FHbldtQztFQUFXLGlCQUFBO0NIc1c5QztBR3JXbUM7RUFBVyxpQkFBQTtDSHdXOUM7QUd2V21DO0VBQVcsaUJBQUE7Q0gwVzlDO0FHeldtQztFQUFXLGlCQUFBO0NINFc5QztBRzNXbUM7RUFBVyxpQkFBQTtDSDhXOUM7QUc3V21DO0VBQVcsaUJBQUE7Q0hnWDlDO0FHL1dtQztFQUFXLGlCQUFBO0NIa1g5QztBR2pYbUM7RUFBVyxpQkFBQTtDSG9YOUM7QUduWG1DO0VBQVcsaUJBQUE7Q0hzWDlDO0FHclhtQztFQUFXLGlCQUFBO0NId1g5QztBR3ZYbUM7RUFBVyxpQkFBQTtDSDBYOUM7QUd6WG1DO0VBQVcsaUJBQUE7Q0g0WDlDO0FHM1htQztFQUFXLGlCQUFBO0NIOFg5QztBRzdYbUM7RUFBVyxpQkFBQTtDSGdZOUM7QUcvWG1DO0VBQVcsaUJBQUE7Q0hrWTlDO0FHalltQztFQUFXLGlCQUFBO0NIb1k5QztBR25ZbUM7RUFBVyxpQkFBQTtDSHNZOUM7QUdyWW1DO0VBQVcsaUJBQUE7Q0h3WTlDO0FHdlltQztFQUFXLGlCQUFBO0NIMFk5QztBR3pZbUM7RUFBVyxpQkFBQTtDSDRZOUM7QUczWW1DO0VBQVcsaUJBQUE7Q0g4WTlDO0FHN1ltQztFQUFXLGlCQUFBO0NIZ1o5QztBRy9ZbUM7RUFBVyxpQkFBQTtDSGtaOUM7QUdqWm1DO0VBQVcsaUJBQUE7Q0hvWjlDO0FHblptQztFQUFXLGlCQUFBO0NIc1o5QztBR3JabUM7RUFBVyxpQkFBQTtDSHdaOUM7QUd2Wm1DO0VBQVcsaUJBQUE7Q0gwWjlDO0FHelptQztFQUFXLGlCQUFBO0NINFo5QztBRzNabUM7RUFBVyxpQkFBQTtDSDhaOUM7QUc3Wm1DO0VBQVcsaUJBQUE7Q0hnYTlDO0FHL1ptQztFQUFXLGlCQUFBO0NIa2E5QztBR2phbUM7RUFBVyxpQkFBQTtDSG9hOUM7QUduYW1DO0VBQVcsaUJBQUE7Q0hzYTlDO0FHcmFtQztFQUFXLGlCQUFBO0NId2E5QztBR3ZhbUM7RUFBVyxpQkFBQTtDSDBhOUM7QUd6YW1DO0VBQVcsaUJBQUE7Q0g0YTlDO0FHM2FtQztFQUFXLGlCQUFBO0NIOGE5QztBRzdhbUM7RUFBVyxpQkFBQTtDSGdiOUM7QUcvYW1DO0VBQVcsaUJBQUE7Q0hrYjlDO0FHamJtQztFQUFXLGlCQUFBO0NIb2I5QztBR25ibUM7RUFBVyxpQkFBQTtDSHNiOUM7QUdyYm1DO0VBQVcsaUJBQUE7Q0h3YjlDO0FHdmJtQztFQUFXLGlCQUFBO0NIMGI5QztBR3pibUM7RUFBVyxpQkFBQTtDSDRiOUM7QUczYm1DO0VBQVcsaUJBQUE7Q0g4YjlDO0FHN2JtQztFQUFXLGlCQUFBO0NIZ2M5QztBRy9ibUM7RUFBVyxpQkFBQTtDSGtjOUM7QUdqY21DO0VBQVcsaUJBQUE7Q0hvYzlDO0FHbmNtQztFQUFXLGlCQUFBO0NIc2M5QztBR3JjbUM7RUFBVyxpQkFBQTtDSHdjOUM7QUd2Y21DO0VBQVcsaUJBQUE7Q0gwYzlDO0FHemNtQztFQUFXLGlCQUFBO0NINGM5QztBRzNjbUM7RUFBVyxpQkFBQTtDSDhjOUM7QUc3Y21DO0VBQVcsaUJBQUE7Q0hnZDlDO0FHL2NtQztFQUFXLGlCQUFBO0NIa2Q5QztBR2pkbUM7RUFBVyxpQkFBQTtDSG9kOUM7QUduZG1DO0VBQVcsaUJBQUE7Q0hzZDlDO0FHcmRtQztFQUFXLGlCQUFBO0NId2Q5QztBR3ZkbUM7RUFBVyxpQkFBQTtDSDBkOUM7QUd6ZG1DO0VBQVcsaUJBQUE7Q0g0ZDlDO0FHM2RtQztFQUFXLGlCQUFBO0NIOGQ5QztBRzdkbUM7RUFBVyxpQkFBQTtDSGdlOUM7QUcvZG1DO0VBQVcsaUJBQUE7Q0hrZTlDO0FHamVtQztFQUFXLGlCQUFBO0NIb2U5QztBR25lbUM7RUFBVyxpQkFBQTtDSHNlOUM7QUdyZW1DO0VBQVcsaUJBQUE7Q0h3ZTlDO0FHdmVtQztFQUFXLGlCQUFBO0NIMGU5QztBR3plbUM7RUFBVyxpQkFBQTtDSDRlOUM7QUczZW1DO0VBQVcsaUJBQUE7Q0g4ZTlDO0FHN2VtQztFQUFXLGlCQUFBO0NIZ2Y5QztBRy9lbUM7RUFBVyxpQkFBQTtDSGtmOUM7QUdqZm1DO0VBQVcsaUJBQUE7Q0hvZjlDO0FHbmZtQztFQUFXLGlCQUFBO0NIc2Y5QztBR3JmbUM7RUFBVyxpQkFBQTtDSHdmOUM7QUd2Zm1DO0VBQVcsaUJBQUE7Q0gwZjlDO0FHemZtQztFQUFXLGlCQUFBO0NINGY5QztBRzNmbUM7RUFBVyxpQkFBQTtDSDhmOUM7QUc3Zm1DO0VBQVcsaUJBQUE7Q0hnZ0I5QztBRy9mbUM7RUFBVyxpQkFBQTtDSGtnQjlDO0FHamdCbUM7RUFBVyxpQkFBQTtDSG9nQjlDO0FHbmdCbUM7RUFBVyxpQkFBQTtDSHNnQjlDO0FHcmdCbUM7RUFBVyxpQkFBQTtDSHdnQjlDO0FHdmdCbUM7RUFBVyxpQkFBQTtDSDBnQjlDO0FHemdCbUM7RUFBVyxpQkFBQTtDSDRnQjlDO0FHM2dCbUM7RUFBVyxpQkFBQTtDSDhnQjlDO0FHN2dCbUM7RUFBVyxpQkFBQTtDSGdoQjlDO0FHL2dCbUM7RUFBVyxpQkFBQTtDSGtoQjlDO0FHamhCbUM7RUFBVyxpQkFBQTtDSG9oQjlDO0FHbmhCbUM7RUFBVyxpQkFBQTtDSHNoQjlDO0FHcmhCbUM7RUFBVyxpQkFBQTtDSHdoQjlDO0FHdmhCbUM7RUFBVyxpQkFBQTtDSDBoQjlDO0FHemhCbUM7RUFBVyxpQkFBQTtDSDRoQjlDO0FHM2hCbUM7RUFBVyxpQkFBQTtDSDhoQjlDO0FHN2hCbUM7RUFBVyxpQkFBQTtDSGdpQjlDO0FHL2hCbUM7RUFBVyxpQkFBQTtDSGtpQjlDO0FHamlCbUM7RUFBVyxpQkFBQTtDSG9pQjlDO0FHbmlCbUM7RUFBVyxpQkFBQTtDSHNpQjlDO0FHcmlCbUM7RUFBVyxpQkFBQTtDSHdpQjlDO0FHdmlCbUM7RUFBVyxpQkFBQTtDSDBpQjlDO0FHemlCbUM7RUFBVyxpQkFBQTtDSDRpQjlDO0FHM2lCbUM7RUFBVyxpQkFBQTtDSDhpQjlDO0FHN2lCbUM7RUFBVyxpQkFBQTtDSGdqQjlDO0FHL2lCbUM7RUFBVyxpQkFBQTtDSGtqQjlDO0FHampCbUM7RUFBVyxpQkFBQTtDSG9qQjlDO0FHbmpCbUM7RUFBVyxpQkFBQTtDSHNqQjlDO0FHcmpCbUM7RUFBVyxpQkFBQTtDSHdqQjlDO0FHdmpCbUM7RUFBVyxpQkFBQTtDSDBqQjlDO0FHempCbUM7RUFBVyxpQkFBQTtDSDRqQjlDO0FHM2pCbUM7RUFBVyxpQkFBQTtDSDhqQjlDO0FHN2pCbUM7RUFBVyxpQkFBQTtDSGdrQjlDO0FHL2pCbUM7RUFBVyxpQkFBQTtDSGtrQjlDO0FHamtCbUM7RUFBVyxpQkFBQTtDSG9rQjlDO0FHbmtCbUM7RUFBVyxpQkFBQTtDSHNrQjlDO0FHcmtCbUM7RUFBVyxpQkFBQTtDSHdrQjlDO0FHdmtCbUM7RUFBVyxpQkFBQTtDSDBrQjlDO0FHemtCbUM7RUFBVyxpQkFBQTtDSDRrQjlDO0FHM2tCbUM7RUFBVyxpQkFBQTtDSDhrQjlDO0FHN2tCbUM7RUFBVyxpQkFBQTtDSGdsQjlDO0FHL2tCbUM7RUFBVyxpQkFBQTtDSGtsQjlDO0FHamxCbUM7RUFBVyxpQkFBQTtDSG9sQjlDO0FHbmxCbUM7RUFBVyxpQkFBQTtDSHNsQjlDO0FHcmxCbUM7RUFBVyxpQkFBQTtDSHdsQjlDO0FHdmxCbUM7RUFBVyxpQkFBQTtDSDBsQjlDO0FHemxCbUM7RUFBVyxpQkFBQTtDSDRsQjlDO0FHM2xCbUM7RUFBVyxpQkFBQTtDSDhsQjlDO0FHN2xCbUM7RUFBVyxpQkFBQTtDSGdtQjlDO0FHL2xCbUM7RUFBVyxpQkFBQTtDSGttQjlDO0FHam1CbUM7RUFBVyxpQkFBQTtDSG9tQjlDO0FHbm1CbUM7RUFBVyxpQkFBQTtDSHNtQjlDO0FHcm1CbUM7RUFBVyxpQkFBQTtDSHdtQjlDO0FHdm1CbUM7RUFBVyxpQkFBQTtDSDBtQjlDO0FHem1CbUM7RUFBVyxpQkFBQTtDSDRtQjlDO0FHM21CbUM7RUFBVyxpQkFBQTtDSDhtQjlDO0FHN21CbUM7RUFBVyxpQkFBQTtDSGduQjlDO0FHL21CbUM7RUFBVyxpQkFBQTtDSGtuQjlDO0FHam5CbUM7RUFBVyxpQkFBQTtDSG9uQjlDO0FHbm5CbUM7RUFBVyxpQkFBQTtDSHNuQjlDO0FHcm5CbUM7RUFBVyxpQkFBQTtDSHduQjlDO0FHdm5CbUM7RUFBVyxpQkFBQTtDSDBuQjlDO0FHem5CbUM7RUFBVyxpQkFBQTtDSDRuQjlDO0FHM25CbUM7RUFBVyxpQkFBQTtDSDhuQjlDO0FHN25CbUM7RUFBVyxpQkFBQTtDSGdvQjlDO0FHL25CbUM7RUFBVyxpQkFBQTtDSGtvQjlDO0FHam9CbUM7RUFBVyxpQkFBQTtDSG9vQjlDO0FHbm9CbUM7RUFBVyxpQkFBQTtDSHNvQjlDO0FHcm9CbUM7RUFBVyxpQkFBQTtDSHdvQjlDO0FHL25CbUM7RUFBVyxpQkFBQTtDSGtvQjlDO0FHam9CbUM7RUFBVyxpQkFBQTtDSG9vQjlDO0FHbm9CbUM7RUFBVyxpQkFBQTtDSHNvQjlDO0FHcm9CbUM7RUFBVyxpQkFBQTtDSHdvQjlDO0FHdm9CbUM7RUFBVyxpQkFBQTtDSDBvQjlDO0FHem9CbUM7RUFBVyxpQkFBQTtDSDRvQjlDO0FHM29CbUM7RUFBVyxpQkFBQTtDSDhvQjlDO0FHN29CbUM7RUFBVyxpQkFBQTtDSGdwQjlDO0FHL29CbUM7RUFBVyxpQkFBQTtDSGtwQjlDO0FHanBCbUM7RUFBVyxpQkFBQTtDSG9wQjlDO0FHbnBCbUM7RUFBVyxpQkFBQTtDSHNwQjlDO0FHcnBCbUM7RUFBVyxpQkFBQTtDSHdwQjlDO0FHdnBCbUM7RUFBVyxpQkFBQTtDSDBwQjlDO0FHenBCbUM7RUFBVyxpQkFBQTtDSDRwQjlDO0FHM3BCbUM7RUFBVyxpQkFBQTtDSDhwQjlDO0FHN3BCbUM7RUFBVyxpQkFBQTtDSGdxQjlDO0FHL3BCbUM7RUFBVyxpQkFBQTtDSGtxQjlDO0FHanFCbUM7RUFBVyxpQkFBQTtDSG9xQjlDO0FHbnFCbUM7RUFBVyxpQkFBQTtDSHNxQjlDO0FHcnFCbUM7RUFBVyxpQkFBQTtDSHdxQjlDO0FHdnFCbUM7RUFBVyxpQkFBQTtDSDBxQjlDO0FHenFCbUM7RUFBVyxpQkFBQTtDSDRxQjlDO0FHM3FCbUM7RUFBVyxpQkFBQTtDSDhxQjlDO0FHN3FCbUM7RUFBVyxpQkFBQTtDSGdyQjlDO0FHL3FCbUM7RUFBVyxpQkFBQTtDSGtyQjlDO0FHanJCbUM7RUFBVyxpQkFBQTtDSG9yQjlDO0FHbnJCbUM7RUFBVyxpQkFBQTtDSHNyQjlDO0FHcnJCbUM7RUFBVyxpQkFBQTtDSHdyQjlDO0FHdnJCbUM7RUFBVyxpQkFBQTtDSDByQjlDO0FHenJCbUM7RUFBVyxpQkFBQTtDSDRyQjlDO0FHM3JCbUM7RUFBVyxpQkFBQTtDSDhyQjlDO0FHN3JCbUM7RUFBVyxpQkFBQTtDSGdzQjlDO0FHL3JCbUM7RUFBVyxpQkFBQTtDSGtzQjlDO0FHanNCbUM7RUFBVyxpQkFBQTtDSG9zQjlDO0FHbnNCbUM7RUFBVyxpQkFBQTtDSHNzQjlDO0FHcnNCbUM7RUFBVyxpQkFBQTtDSHdzQjlDO0FHdnNCbUM7RUFBVyxpQkFBQTtDSDBzQjlDO0FHenNCbUM7RUFBVyxpQkFBQTtDSDRzQjlDO0FHM3NCbUM7RUFBVyxpQkFBQTtDSDhzQjlDO0FHN3NCbUM7RUFBVyxpQkFBQTtDSGd0QjlDO0FHL3NCbUM7RUFBVyxpQkFBQTtDSGt0QjlDO0FHanRCbUM7RUFBVyxpQkFBQTtDSG90QjlDO0FHbnRCbUM7RUFBVyxpQkFBQTtDSHN0QjlDO0FHcnRCbUM7RUFBVyxpQkFBQTtDSHd0QjlDO0FHdnRCbUM7RUFBVyxpQkFBQTtDSDB0QjlDO0FHenRCbUM7RUFBVyxpQkFBQTtDSDR0QjlDO0FHM3RCbUM7RUFBVyxpQkFBQTtDSDh0QjlDO0FHN3RCbUM7RUFBVyxpQkFBQTtDSGd1QjlDO0FHL3RCbUM7RUFBVyxpQkFBQTtDSGt1QjlDO0FHanVCbUM7RUFBVyxpQkFBQTtDSG91QjlDO0FHbnVCbUM7RUFBVyxpQkFBQTtDSHN1QjlDO0FHcnVCbUM7RUFBVyxpQkFBQTtDSHd1QjlDO0FHdnVCbUM7RUFBVyxpQkFBQTtDSDB1QjlDO0FHenVCbUM7RUFBVyxpQkFBQTtDSDR1QjlDO0FHM3VCbUM7RUFBVyxpQkFBQTtDSDh1QjlDO0FHN3VCbUM7RUFBVyxpQkFBQTtDSGd2QjlDO0FJdGhDRDtFQ2dFRSwrQkFBQTtFQUNHLDRCQUFBO0VBQ0ssdUJBQUE7Q0x5OUJUO0FJeGhDRDs7RUM2REUsK0JBQUE7RUFDRyw0QkFBQTtFQUNLLHVCQUFBO0NMKzlCVDtBSXRoQ0Q7RUFDRSxnQkFBQTtFQUNBLDhDQUFBO0NKd2hDRDtBSXJoQ0Q7RUFDRSw0REFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxlQUFBO0VBQ0EsdUJBQUE7Q0p1aENEO0FJbmhDRDs7OztFQUlFLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtDSnFoQ0Q7QUkvZ0NEO0VBQ0UsZUFBQTtFQUNBLHNCQUFBO0NKaWhDRDtBSS9nQ0M7O0VBRUUsZUFBQTtFQUNBLDJCQUFBO0NKaWhDSDtBSTlnQ0M7RUVyREEscUJBQUE7RUFFQSwyQ0FBQTtFQUNBLHFCQUFBO0NOcWtDRDtBSXhnQ0Q7RUFDRSxVQUFBO0NKMGdDRDtBSXBnQ0Q7RUFDRSx1QkFBQTtDSnNnQ0Q7QUlsZ0NEOzs7OztFR3ZFRSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0NQZ2xDRDtBSXRnQ0Q7RUFDRSxtQkFBQTtDSndnQ0Q7QUlsZ0NEO0VBQ0UsYUFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VDNkZBLHlDQUFBO0VBQ0ssb0NBQUE7RUFDRyxpQ0FBQTtFRXZMUixzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTtDUGdtQ0Q7QUlsZ0NEO0VBQ0UsbUJBQUE7Q0pvZ0NEO0FJOS9CRDtFQUNFLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxVQUFBO0VBQ0EsOEJBQUE7Q0pnZ0NEO0FJeC9CRDtFQUNFLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0NKMC9CRDtBSWwvQkM7O0VBRUUsaUJBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLFVBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7Q0pvL0JIO0FJeitCRDtFQUNFLGdCQUFBO0NKMitCRDtBUWxvQ0Q7Ozs7Ozs7Ozs7OztFQUVFLHFCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7Q1I4b0NEO0FRbnBDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBU0ksb0JBQUE7RUFDQSxlQUFBO0VBQ0EsZUFBQTtDUm9xQ0g7QVFocUNEOzs7Ozs7RUFHRSxpQkFBQTtFQUNBLG9CQUFBO0NScXFDRDtBUXpxQ0Q7Ozs7Ozs7Ozs7OztFQVFJLGVBQUE7Q1IrcUNIO0FRNXFDRDs7Ozs7O0VBR0UsaUJBQUE7RUFDQSxvQkFBQTtDUmlyQ0Q7QVFyckNEOzs7Ozs7Ozs7Ozs7RUFRSSxlQUFBO0NSMnJDSDtBUXZyQ0Q7O0VBQVUsZ0JBQUE7Q1IyckNUO0FRMXJDRDs7RUFBVSxnQkFBQTtDUjhyQ1Q7QVE3ckNEOztFQUFVLGdCQUFBO0NSaXNDVDtBUWhzQ0Q7O0VBQVUsZ0JBQUE7Q1Jvc0NUO0FRbnNDRDs7RUFBVSxnQkFBQTtDUnVzQ1Q7QVF0c0NEOztFQUFVLGdCQUFBO0NSMHNDVDtBUXBzQ0Q7RUFDRSxpQkFBQTtDUnNzQ0Q7QVFuc0NEO0VBQ0Usb0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7Q1Jxc0NEO0FRaHNDRDtFQXdPQTtJQTFPSSxnQkFBQTtHUnNzQ0Q7Q0FDRjtBUTlyQ0Q7O0VBRUUsZUFBQTtDUmdzQ0Q7QVE3ckNEOztFQUVFLDBCQUFBO0VBQ0EsY0FBQTtDUityQ0Q7QVEzckNEO0VBQXVCLGlCQUFBO0NSOHJDdEI7QVE3ckNEO0VBQXVCLGtCQUFBO0NSZ3NDdEI7QVEvckNEO0VBQXVCLG1CQUFBO0NSa3NDdEI7QVFqc0NEO0VBQXVCLG9CQUFBO0NSb3NDdEI7QVFuc0NEO0VBQXVCLG9CQUFBO0NSc3NDdEI7QVFuc0NEO0VBQXVCLDBCQUFBO0NSc3NDdEI7QVFyc0NEO0VBQXVCLDBCQUFBO0NSd3NDdEI7QVF2c0NEO0VBQXVCLDJCQUFBO0NSMHNDdEI7QVF2c0NEO0VBQ0UsZUFBQTtDUnlzQ0Q7QVF2c0NEO0VDckdFLGVBQUE7Q1QreUNEO0FTOXlDQzs7RUFFRSxlQUFBO0NUZ3pDSDtBUTNzQ0Q7RUN4R0UsZUFBQTtDVHN6Q0Q7QVNyekNDOztFQUVFLGVBQUE7Q1R1ekNIO0FRL3NDRDtFQzNHRSxlQUFBO0NUNnpDRDtBUzV6Q0M7O0VBRUUsZUFBQTtDVDh6Q0g7QVFudENEO0VDOUdFLGVBQUE7Q1RvMENEO0FTbjBDQzs7RUFFRSxlQUFBO0NUcTBDSDtBUXZ0Q0Q7RUNqSEUsZUFBQTtDVDIwQ0Q7QVMxMENDOztFQUVFLGVBQUE7Q1Q0MENIO0FRdnRDRDtFQUdFLFlBQUE7RUUzSEEsMEJBQUE7Q1ZtMUNEO0FVbDFDQzs7RUFFRSwwQkFBQTtDVm8xQ0g7QVF6dENEO0VFOUhFLDBCQUFBO0NWMDFDRDtBVXoxQ0M7O0VBRUUsMEJBQUE7Q1YyMUNIO0FRN3RDRDtFRWpJRSwwQkFBQTtDVmkyQ0Q7QVVoMkNDOztFQUVFLDBCQUFBO0NWazJDSDtBUWp1Q0Q7RUVwSUUsMEJBQUE7Q1Z3MkNEO0FVdjJDQzs7RUFFRSwwQkFBQTtDVnkyQ0g7QVFydUNEO0VFdklFLDBCQUFBO0NWKzJDRDtBVTkyQ0M7O0VBRUUsMEJBQUE7Q1ZnM0NIO0FRcHVDRDtFQUNFLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQ0FBQTtDUnN1Q0Q7QVE5dENEOztFQUVFLGNBQUE7RUFDQSxvQkFBQTtDUmd1Q0Q7QVFudUNEOzs7O0VBTUksaUJBQUE7Q1JtdUNIO0FRNXRDRDtFQUNFLGdCQUFBO0VBQ0EsaUJBQUE7Q1I4dENEO0FRMXRDRDtFQUxFLGdCQUFBO0VBQ0EsaUJBQUE7RUFNQSxrQkFBQTtDUjZ0Q0Q7QVEvdENEO0VBS0ksc0JBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0NSNnRDSDtBUXh0Q0Q7RUFDRSxjQUFBO0VBQ0Esb0JBQUE7Q1IwdENEO0FReHRDRDs7RUFFRSx3QkFBQTtDUjB0Q0Q7QVF4dENEO0VBQ0Usa0JBQUE7Q1IwdENEO0FReHRDRDtFQUNFLGVBQUE7Q1IwdENEO0FRanNDRDtFQTZFQTtJQXZGTSxZQUFBO0lBQ0EsYUFBQTtJQUNBLFlBQUE7SUFDQSxrQkFBQTtJR3ROSixpQkFBQTtJQUNBLHdCQUFBO0lBQ0Esb0JBQUE7R1hzNkNDO0VROW5DSDtJQWhGTSxtQkFBQTtHUml0Q0g7Q0FDRjtBUXhzQ0Q7O0VBR0UsYUFBQTtFQUNBLGtDQUFBO0NSeXNDRDtBUXZzQ0Q7RUFDRSxlQUFBO0VBOUlxQiwwQkFBQTtDUncxQ3RCO0FRcnNDRDtFQUNFLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLCtCQUFBO0NSdXNDRDtBUWxzQ0c7OztFQUNFLGlCQUFBO0NSc3NDTDtBUWh0Q0Q7OztFQW1CSSxlQUFBO0VBQ0EsZUFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtDUmtzQ0g7QVFoc0NHOzs7RUFDRSx1QkFBQTtDUm9zQ0w7QVE1ckNEOztFQUVFLG9CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQ0FBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTtDUjhyQ0Q7QVF4ckNHOzs7Ozs7RUFBVyxZQUFBO0NSZ3NDZDtBUS9yQ0c7Ozs7OztFQUNFLHVCQUFBO0NSc3NDTDtBUWhzQ0Q7RUFDRSxvQkFBQTtFQUNBLG1CQUFBO0VBQ0Esd0JBQUE7Q1Jrc0NEO0FZeCtDRDs7OztFQUlFLCtEQUFBO0NaMCtDRDtBWXQrQ0Q7RUFDRSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxtQkFBQTtDWncrQ0Q7QVlwK0NEO0VBQ0UsaUJBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7RUFDQSx1REFBQTtVQUFBLCtDQUFBO0NacytDRDtBWTUrQ0Q7RUFTSSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLHlCQUFBO1VBQUEsaUJBQUE7Q1pzK0NIO0FZaitDRDtFQUNFLGVBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7RUFDQSwwQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q1ptK0NEO0FZOStDRDtFQWVJLFdBQUE7RUFDQSxtQkFBQTtFQUNBLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDhCQUFBO0VBQ0EsaUJBQUE7Q1prK0NIO0FZNzlDRDtFQUNFLGtCQUFBO0VBQ0EsbUJBQUE7Q1orOUNEO0FhemhERDtFQ0hFLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0NkK2hERDtBYXpoREM7RUFxRUY7SUF2RUksYUFBQTtHYitoREQ7Q0FDRjtBYTNoREM7RUFrRUY7SUFwRUksYUFBQTtHYmlpREQ7Q0FDRjtBYTdoREQ7RUErREE7SUFqRUksY0FBQTtHYm1pREQ7Q0FDRjtBYTFoREQ7RUN2QkUsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7Q2RvakREO0FhdmhERDtFQ3ZCRSxtQkFBQTtFQUNBLG9CQUFBO0NkaWpERDtBZWpqREc7RUFDRSxtQkFBQTtFQUVBLGdCQUFBO0VBRUEsbUJBQUE7RUFDQSxvQkFBQTtDZmlqREw7QWVqaURHO0VBQ0UsWUFBQTtDZm1pREw7QWU1aERDO0VBQ0UsWUFBQTtDZjhoREg7QWUvaERDO0VBQ0Usb0JBQUE7Q2ZpaURIO0FlbGlEQztFQUNFLG9CQUFBO0Nmb2lESDtBZXJpREM7RUFDRSxXQUFBO0NmdWlESDtBZXhpREM7RUFDRSxvQkFBQTtDZjBpREg7QWUzaURDO0VBQ0Usb0JBQUE7Q2Y2aURIO0FlOWlEQztFQUNFLFdBQUE7Q2ZnakRIO0FlampEQztFQUNFLG9CQUFBO0NmbWpESDtBZXBqREM7RUFDRSxvQkFBQTtDZnNqREg7QWV2akRDO0VBQ0UsV0FBQTtDZnlqREg7QWUxakRDO0VBQ0Usb0JBQUE7Q2Y0akRIO0FlN2pEQztFQUNFLG1CQUFBO0NmK2pESDtBZWpqREM7RUFDRSxZQUFBO0NmbWpESDtBZXBqREM7RUFDRSxvQkFBQTtDZnNqREg7QWV2akRDO0VBQ0Usb0JBQUE7Q2Z5akRIO0FlMWpEQztFQUNFLFdBQUE7Q2Y0akRIO0FlN2pEQztFQUNFLG9CQUFBO0NmK2pESDtBZWhrREM7RUFDRSxvQkFBQTtDZmtrREg7QWVua0RDO0VBQ0UsV0FBQTtDZnFrREg7QWV0a0RDO0VBQ0Usb0JBQUE7Q2Z3a0RIO0FlemtEQztFQUNFLG9CQUFBO0NmMmtESDtBZTVrREM7RUFDRSxXQUFBO0NmOGtESDtBZS9rREM7RUFDRSxvQkFBQTtDZmlsREg7QWVsbERDO0VBQ0UsbUJBQUE7Q2ZvbERIO0FlaGxEQztFQUNFLFlBQUE7Q2ZrbERIO0FlbG1EQztFQUNFLFdBQUE7Q2ZvbURIO0Flcm1EQztFQUNFLG1CQUFBO0NmdW1ESDtBZXhtREM7RUFDRSxtQkFBQTtDZjBtREg7QWUzbURDO0VBQ0UsVUFBQTtDZjZtREg7QWU5bURDO0VBQ0UsbUJBQUE7Q2ZnbkRIO0Flam5EQztFQUNFLG1CQUFBO0NmbW5ESDtBZXBuREM7RUFDRSxVQUFBO0Nmc25ESDtBZXZuREM7RUFDRSxtQkFBQTtDZnluREg7QWUxbkRDO0VBQ0UsbUJBQUE7Q2Y0bkRIO0FlN25EQztFQUNFLFVBQUE7Q2YrbkRIO0FlaG9EQztFQUNFLG1CQUFBO0Nma29ESDtBZW5vREM7RUFDRSxrQkFBQTtDZnFvREg7QWVqb0RDO0VBQ0UsV0FBQTtDZm1vREg7QWVybkRDO0VBQ0Usa0JBQUE7Q2Z1bkRIO0FleG5EQztFQUNFLDBCQUFBO0NmMG5ESDtBZTNuREM7RUFDRSwwQkFBQTtDZjZuREg7QWU5bkRDO0VBQ0UsaUJBQUE7Q2Znb0RIO0Flam9EQztFQUNFLDBCQUFBO0NmbW9ESDtBZXBvREM7RUFDRSwwQkFBQTtDZnNvREg7QWV2b0RDO0VBQ0UsaUJBQUE7Q2Z5b0RIO0FlMW9EQztFQUNFLDBCQUFBO0NmNG9ESDtBZTdvREM7RUFDRSwwQkFBQTtDZitvREg7QWVocERDO0VBQ0UsaUJBQUE7Q2ZrcERIO0FlbnBEQztFQUNFLDBCQUFBO0NmcXBESDtBZXRwREM7RUFDRSx5QkFBQTtDZndwREg7QWV6cERDO0VBQ0UsZ0JBQUE7Q2YycERIO0FhM3BERDtFRWxDSTtJQUNFLFlBQUE7R2Znc0RIO0VlenJERDtJQUNFLFlBQUE7R2YyckREO0VlNXJERDtJQUNFLG9CQUFBO0dmOHJERDtFZS9yREQ7SUFDRSxvQkFBQTtHZmlzREQ7RWVsc0REO0lBQ0UsV0FBQTtHZm9zREQ7RWVyc0REO0lBQ0Usb0JBQUE7R2Z1c0REO0VleHNERDtJQUNFLG9CQUFBO0dmMHNERDtFZTNzREQ7SUFDRSxXQUFBO0dmNnNERDtFZTlzREQ7SUFDRSxvQkFBQTtHZmd0REQ7RWVqdEREO0lBQ0Usb0JBQUE7R2ZtdEREO0VlcHRERDtJQUNFLFdBQUE7R2ZzdEREO0VldnRERDtJQUNFLG9CQUFBO0dmeXRERDtFZTF0REQ7SUFDRSxtQkFBQTtHZjR0REQ7RWU5c0REO0lBQ0UsWUFBQTtHZmd0REQ7RWVqdEREO0lBQ0Usb0JBQUE7R2ZtdEREO0VlcHRERDtJQUNFLG9CQUFBO0dmc3RERDtFZXZ0REQ7SUFDRSxXQUFBO0dmeXRERDtFZTF0REQ7SUFDRSxvQkFBQTtHZjR0REQ7RWU3dEREO0lBQ0Usb0JBQUE7R2YrdEREO0VlaHVERDtJQUNFLFdBQUE7R2ZrdUREO0VlbnVERDtJQUNFLG9CQUFBO0dmcXVERDtFZXR1REQ7SUFDRSxvQkFBQTtHZnd1REQ7RWV6dUREO0lBQ0UsV0FBQTtHZjJ1REQ7RWU1dUREO0lBQ0Usb0JBQUE7R2Y4dUREO0VlL3VERDtJQUNFLG1CQUFBO0dmaXZERDtFZTd1REQ7SUFDRSxZQUFBO0dmK3VERDtFZS92REQ7SUFDRSxXQUFBO0dmaXdERDtFZWx3REQ7SUFDRSxtQkFBQTtHZm93REQ7RWVyd0REO0lBQ0UsbUJBQUE7R2Z1d0REO0VleHdERDtJQUNFLFVBQUE7R2Ywd0REO0VlM3dERDtJQUNFLG1CQUFBO0dmNndERDtFZTl3REQ7SUFDRSxtQkFBQTtHZmd4REQ7RWVqeEREO0lBQ0UsVUFBQTtHZm14REQ7RWVweEREO0lBQ0UsbUJBQUE7R2ZzeEREO0VldnhERDtJQUNFLG1CQUFBO0dmeXhERDtFZTF4REQ7SUFDRSxVQUFBO0dmNHhERDtFZTd4REQ7SUFDRSxtQkFBQTtHZit4REQ7RWVoeUREO0lBQ0Usa0JBQUE7R2ZreUREO0VlOXhERDtJQUNFLFdBQUE7R2ZneUREO0VlbHhERDtJQUNFLGtCQUFBO0dmb3hERDtFZXJ4REQ7SUFDRSwwQkFBQTtHZnV4REQ7RWV4eEREO0lBQ0UsMEJBQUE7R2YweEREO0VlM3hERDtJQUNFLGlCQUFBO0dmNnhERDtFZTl4REQ7SUFDRSwwQkFBQTtHZmd5REQ7RWVqeUREO0lBQ0UsMEJBQUE7R2ZteUREO0VlcHlERDtJQUNFLGlCQUFBO0dmc3lERDtFZXZ5REQ7SUFDRSwwQkFBQTtHZnl5REQ7RWUxeUREO0lBQ0UsMEJBQUE7R2Y0eUREO0VlN3lERDtJQUNFLGlCQUFBO0dmK3lERDtFZWh6REQ7SUFDRSwwQkFBQTtHZmt6REQ7RWVuekREO0lBQ0UseUJBQUE7R2ZxekREO0VldHpERDtJQUNFLGdCQUFBO0dmd3pERDtDQUNGO0FhaHpERDtFRTNDSTtJQUNFLFlBQUE7R2Y4MURIO0VldjFERDtJQUNFLFlBQUE7R2Z5MUREO0VlMTFERDtJQUNFLG9CQUFBO0dmNDFERDtFZTcxREQ7SUFDRSxvQkFBQTtHZisxREQ7RWVoMkREO0lBQ0UsV0FBQTtHZmsyREQ7RWVuMkREO0lBQ0Usb0JBQUE7R2ZxMkREO0VldDJERDtJQUNFLG9CQUFBO0dmdzJERDtFZXoyREQ7SUFDRSxXQUFBO0dmMjJERDtFZTUyREQ7SUFDRSxvQkFBQTtHZjgyREQ7RWUvMkREO0lBQ0Usb0JBQUE7R2ZpM0REO0VlbDNERDtJQUNFLFdBQUE7R2ZvM0REO0VlcjNERDtJQUNFLG9CQUFBO0dmdTNERDtFZXgzREQ7SUFDRSxtQkFBQTtHZjAzREQ7RWU1MkREO0lBQ0UsWUFBQTtHZjgyREQ7RWUvMkREO0lBQ0Usb0JBQUE7R2ZpM0REO0VlbDNERDtJQUNFLG9CQUFBO0dmbzNERDtFZXIzREQ7SUFDRSxXQUFBO0dmdTNERDtFZXgzREQ7SUFDRSxvQkFBQTtHZjAzREQ7RWUzM0REO0lBQ0Usb0JBQUE7R2Y2M0REO0VlOTNERDtJQUNFLFdBQUE7R2ZnNEREO0VlajRERDtJQUNFLG9CQUFBO0dmbTRERDtFZXA0REQ7SUFDRSxvQkFBQTtHZnM0REQ7RWV2NEREO0lBQ0UsV0FBQTtHZnk0REQ7RWUxNEREO0lBQ0Usb0JBQUE7R2Y0NEREO0VlNzRERDtJQUNFLG1CQUFBO0dmKzRERDtFZTM0REQ7SUFDRSxZQUFBO0dmNjRERDtFZTc1REQ7SUFDRSxXQUFBO0dmKzVERDtFZWg2REQ7SUFDRSxtQkFBQTtHZms2REQ7RWVuNkREO0lBQ0UsbUJBQUE7R2ZxNkREO0VldDZERDtJQUNFLFVBQUE7R2Z3NkREO0VlejZERDtJQUNFLG1CQUFBO0dmMjZERDtFZTU2REQ7SUFDRSxtQkFBQTtHZjg2REQ7RWUvNkREO0lBQ0UsVUFBQTtHZmk3REQ7RWVsN0REO0lBQ0UsbUJBQUE7R2ZvN0REO0VlcjdERDtJQUNFLG1CQUFBO0dmdTdERDtFZXg3REQ7SUFDRSxVQUFBO0dmMDdERDtFZTM3REQ7SUFDRSxtQkFBQTtHZjY3REQ7RWU5N0REO0lBQ0Usa0JBQUE7R2ZnOEREO0VlNTdERDtJQUNFLFdBQUE7R2Y4N0REO0VlaDdERDtJQUNFLGtCQUFBO0dmazdERDtFZW43REQ7SUFDRSwwQkFBQTtHZnE3REQ7RWV0N0REO0lBQ0UsMEJBQUE7R2Z3N0REO0VlejdERDtJQUNFLGlCQUFBO0dmMjdERDtFZTU3REQ7SUFDRSwwQkFBQTtHZjg3REQ7RWUvN0REO0lBQ0UsMEJBQUE7R2ZpOEREO0VlbDhERDtJQUNFLGlCQUFBO0dmbzhERDtFZXI4REQ7SUFDRSwwQkFBQTtHZnU4REQ7RWV4OEREO0lBQ0UsMEJBQUE7R2YwOEREO0VlMzhERDtJQUNFLGlCQUFBO0dmNjhERDtFZTk4REQ7SUFDRSwwQkFBQTtHZmc5REQ7RWVqOUREO0lBQ0UseUJBQUE7R2ZtOUREO0VlcDlERDtJQUNFLGdCQUFBO0dmczlERDtDQUNGO0FhMzhERDtFRTlDSTtJQUNFLFlBQUE7R2Y0L0RIO0Vlci9ERDtJQUNFLFlBQUE7R2Z1L0REO0VleC9ERDtJQUNFLG9CQUFBO0dmMC9ERDtFZTMvREQ7SUFDRSxvQkFBQTtHZjYvREQ7RWU5L0REO0lBQ0UsV0FBQTtHZmdnRUQ7RWVqZ0VEO0lBQ0Usb0JBQUE7R2ZtZ0VEO0VlcGdFRDtJQUNFLG9CQUFBO0dmc2dFRDtFZXZnRUQ7SUFDRSxXQUFBO0dmeWdFRDtFZTFnRUQ7SUFDRSxvQkFBQTtHZjRnRUQ7RWU3Z0VEO0lBQ0Usb0JBQUE7R2YrZ0VEO0VlaGhFRDtJQUNFLFdBQUE7R2ZraEVEO0VlbmhFRDtJQUNFLG9CQUFBO0dmcWhFRDtFZXRoRUQ7SUFDRSxtQkFBQTtHZndoRUQ7RWUxZ0VEO0lBQ0UsWUFBQTtHZjRnRUQ7RWU3Z0VEO0lBQ0Usb0JBQUE7R2YrZ0VEO0VlaGhFRDtJQUNFLG9CQUFBO0dma2hFRDtFZW5oRUQ7SUFDRSxXQUFBO0dmcWhFRDtFZXRoRUQ7SUFDRSxvQkFBQTtHZndoRUQ7RWV6aEVEO0lBQ0Usb0JBQUE7R2YyaEVEO0VlNWhFRDtJQUNFLFdBQUE7R2Y4aEVEO0VlL2hFRDtJQUNFLG9CQUFBO0dmaWlFRDtFZWxpRUQ7SUFDRSxvQkFBQTtHZm9pRUQ7RWVyaUVEO0lBQ0UsV0FBQTtHZnVpRUQ7RWV4aUVEO0lBQ0Usb0JBQUE7R2YwaUVEO0VlM2lFRDtJQUNFLG1CQUFBO0dmNmlFRDtFZXppRUQ7SUFDRSxZQUFBO0dmMmlFRDtFZTNqRUQ7SUFDRSxXQUFBO0dmNmpFRDtFZTlqRUQ7SUFDRSxtQkFBQTtHZmdrRUQ7RWVqa0VEO0lBQ0UsbUJBQUE7R2Zta0VEO0VlcGtFRDtJQUNFLFVBQUE7R2Zza0VEO0VldmtFRDtJQUNFLG1CQUFBO0dmeWtFRDtFZTFrRUQ7SUFDRSxtQkFBQTtHZjRrRUQ7RWU3a0VEO0lBQ0UsVUFBQTtHZitrRUQ7RWVobEVEO0lBQ0UsbUJBQUE7R2ZrbEVEO0VlbmxFRDtJQUNFLG1CQUFBO0dmcWxFRDtFZXRsRUQ7SUFDRSxVQUFBO0dmd2xFRDtFZXpsRUQ7SUFDRSxtQkFBQTtHZjJsRUQ7RWU1bEVEO0lBQ0Usa0JBQUE7R2Y4bEVEO0VlMWxFRDtJQUNFLFdBQUE7R2Y0bEVEO0VlOWtFRDtJQUNFLGtCQUFBO0dmZ2xFRDtFZWpsRUQ7SUFDRSwwQkFBQTtHZm1sRUQ7RWVwbEVEO0lBQ0UsMEJBQUE7R2ZzbEVEO0VldmxFRDtJQUNFLGlCQUFBO0dmeWxFRDtFZTFsRUQ7SUFDRSwwQkFBQTtHZjRsRUQ7RWU3bEVEO0lBQ0UsMEJBQUE7R2YrbEVEO0VlaG1FRDtJQUNFLGlCQUFBO0dma21FRDtFZW5tRUQ7SUFDRSwwQkFBQTtHZnFtRUQ7RWV0bUVEO0lBQ0UsMEJBQUE7R2Z3bUVEO0Vlem1FRDtJQUNFLGlCQUFBO0dmMm1FRDtFZTVtRUQ7SUFDRSwwQkFBQTtHZjhtRUQ7RWUvbUVEO0lBQ0UseUJBQUE7R2ZpbkVEO0VlbG5FRDtJQUNFLGdCQUFBO0dmb25FRDtDQUNGO0FnQnhyRUQ7RUFDRSw4QkFBQTtDaEIwckVEO0FnQnhyRUQ7RUFDRSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0NoQjByRUQ7QWdCeHJFRDtFQUNFLGlCQUFBO0NoQjByRUQ7QWdCcHJFRDtFQUNFLFlBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0NoQnNyRUQ7QWdCenJFRDs7Ozs7O0VBV1EsYUFBQTtFQUNBLHdCQUFBO0VBQ0Esb0JBQUE7RUFDQSwyQkFBQTtDaEJzckVQO0FnQnBzRUQ7RUFvQkksdUJBQUE7RUFDQSw4QkFBQTtDaEJtckVIO0FnQnhzRUQ7Ozs7OztFQThCUSxjQUFBO0NoQmtyRVA7QWdCaHRFRDtFQW9DSSwyQkFBQTtDaEIrcUVIO0FnQm50RUQ7RUF5Q0ksdUJBQUE7Q2hCNnFFSDtBZ0J0cUVEOzs7Ozs7RUFPUSxhQUFBO0NoQnVxRVA7QWdCNXBFRDtFQUNFLHVCQUFBO0NoQjhwRUQ7QWdCL3BFRDs7Ozs7O0VBUVEsdUJBQUE7Q2hCK3BFUDtBZ0J2cUVEOztFQWVNLHlCQUFBO0NoQjRwRUw7QWdCbHBFRDtFQUVJLDBCQUFBO0NoQm1wRUg7QWdCMW9FRDtFQUVJLDBCQUFBO0NoQjJvRUg7QWdCbG9FRDtFQUNFLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0NoQm9vRUQ7QWdCL25FRzs7RUFDRSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxvQkFBQTtDaEJrb0VMO0FpQjl3RUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQnF4RUw7QWlCL3dFQzs7Ozs7RUFNSSwwQkFBQTtDakJneEVMO0FpQm55RUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQjB5RUw7QWlCcHlFQzs7Ozs7RUFNSSwwQkFBQTtDakJxeUVMO0FpQnh6RUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQit6RUw7QWlCenpFQzs7Ozs7RUFNSSwwQkFBQTtDakIwekVMO0FpQjcwRUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQm8xRUw7QWlCOTBFQzs7Ozs7RUFNSSwwQkFBQTtDakIrMEVMO0FpQmwyRUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQnkyRUw7QWlCbjJFQzs7Ozs7RUFNSSwwQkFBQTtDakJvMkVMO0FnQmx0RUQ7RUFDRSxpQkFBQTtFQUNBLGtCQUFBO0NoQm90RUQ7QWdCdnBFRDtFQUNBO0lBM0RJLFlBQUE7SUFDQSxvQkFBQTtJQUNBLG1CQUFBO0lBQ0EsNkNBQUE7SUFDQSx1QkFBQTtHaEJxdEVEO0VnQjlwRUg7SUFuRE0saUJBQUE7R2hCb3RFSDtFZ0JqcUVIOzs7Ozs7SUExQ1ksb0JBQUE7R2hCbXRFVDtFZ0J6cUVIO0lBbENNLFVBQUE7R2hCOHNFSDtFZ0I1cUVIOzs7Ozs7SUF6QlksZUFBQTtHaEI2c0VUO0VnQnByRUg7Ozs7OztJQXJCWSxnQkFBQTtHaEJpdEVUO0VnQjVyRUg7Ozs7SUFSWSxpQkFBQTtHaEIwc0VUO0NBQ0Y7QWtCcDZFRDtFQUNFLFdBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtFQUlBLGFBQUE7Q2xCbTZFRDtBa0JoNkVEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFCQUFBO0VBQ0EsZUFBQTtFQUNBLFVBQUE7RUFDQSxpQ0FBQTtDbEJrNkVEO0FrQi81RUQ7RUFDRSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtDbEJpNkVEO0FrQnQ1RUQ7RWI0QkUsK0JBQUE7RUFDRyw0QkFBQTtFQUNLLHVCQUFBO0NMNjNFVDtBa0J0NUVEOztFQUVFLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtDbEJ3NUVEO0FrQnI1RUQ7RUFDRSxlQUFBO0NsQnU1RUQ7QWtCbjVFRDtFQUNFLGVBQUE7RUFDQSxZQUFBO0NsQnE1RUQ7QWtCajVFRDs7RUFFRSxhQUFBO0NsQm01RUQ7QWtCLzRFRDs7O0VadkVFLHFCQUFBO0VBRUEsMkNBQUE7RUFDQSxxQkFBQTtDTjA5RUQ7QWtCLzRFRDtFQUNFLGVBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxlQUFBO0NsQmk1RUQ7QWtCdjNFRDtFQUNFLGVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFYnhEQSx5REFBQTtFQUNRLGlEQUFBO0VBeUhSLHVGQUFBO0VBQ0ssMEVBQUE7RUFDRyx1RUFBQTtDTDB6RVQ7QW1CbDhFQztFQUNFLHNCQUFBO0VBQ0EsV0FBQTtFZFVGLHVGQUFBO0VBQ1EsK0VBQUE7Q0wyN0VUO0FLMTVFQztFQUNFLFlBQUE7RUFDQSxXQUFBO0NMNDVFSDtBSzE1RUM7RUFBMEIsWUFBQTtDTDY1RTNCO0FLNTVFQztFQUFnQyxZQUFBO0NMKzVFakM7QWtCbjRFQztFQUNFLFVBQUE7RUFDQSw4QkFBQTtDbEJxNEVIO0FrQjczRUM7OztFQUdFLDBCQUFBO0VBQ0EsV0FBQTtDbEIrM0VIO0FrQjUzRUM7O0VBRUUsb0JBQUE7Q2xCODNFSDtBa0IxM0VDO0VBQ0UsYUFBQTtDbEI0M0VIO0FrQmgzRUQ7RUFDRSx5QkFBQTtDbEJrM0VEO0FrQjEwRUQ7RUF0Qkk7Ozs7SUFDRSxrQkFBQTtHbEJzMkVIO0VrQm4yRUM7Ozs7Ozs7O0lBRUUsa0JBQUE7R2xCMjJFSDtFa0J4MkVDOzs7Ozs7OztJQUVFLGtCQUFBO0dsQmczRUg7Q0FDRjtBa0J0MkVEO0VBQ0Usb0JBQUE7Q2xCdzJFRDtBa0JoMkVEOztFQUVFLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7Q2xCazJFRDtBa0J2MkVEOztFQVFJLGlCQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7Q2xCbTJFSDtBa0JoMkVEOzs7O0VBSUUsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0NsQmsyRUQ7QWtCLzFFRDs7RUFFRSxpQkFBQTtDbEJpMkVEO0FrQjcxRUQ7O0VBRUUsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7Q2xCKzFFRDtBa0I3MUVEOztFQUVFLGNBQUE7RUFDQSxrQkFBQTtDbEIrMUVEO0FrQnQxRUM7Ozs7OztFQUdFLG9CQUFBO0NsQjIxRUg7QWtCcjFFQzs7OztFQUVFLG9CQUFBO0NsQnkxRUg7QWtCbjFFQzs7OztFQUdJLG9CQUFBO0NsQnMxRUw7QWtCMzBFRDtFQUVFLGlCQUFBO0VBQ0Esb0JBQUE7RUFFQSxpQkFBQTtFQUNBLGlCQUFBO0NsQjIwRUQ7QWtCejBFQzs7RUFFRSxnQkFBQTtFQUNBLGlCQUFBO0NsQjIwRUg7QWtCOXpFRDtFQ25RRSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7Q25Cb2tGRDtBbUJsa0ZDO0VBQ0UsYUFBQTtFQUNBLGtCQUFBO0NuQm9rRkg7QW1CamtGQzs7RUFFRSxhQUFBO0NuQm1rRkg7QWtCMTBFRDtFQUVJLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtDbEIyMEVIO0FrQmoxRUQ7RUFTSSxhQUFBO0VBQ0Esa0JBQUE7Q2xCMjBFSDtBa0JyMUVEOztFQWNJLGFBQUE7Q2xCMjBFSDtBa0J6MUVEO0VBaUJJLGFBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDbEIyMEVIO0FrQnYwRUQ7RUMvUkUsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0NuQnltRkQ7QW1Cdm1GQztFQUNFLGFBQUE7RUFDQSxrQkFBQTtDbkJ5bUZIO0FtQnRtRkM7O0VBRUUsYUFBQTtDbkJ3bUZIO0FrQm4xRUQ7RUFFSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q2xCbzFFSDtBa0IxMUVEO0VBU0ksYUFBQTtFQUNBLGtCQUFBO0NsQm8xRUg7QWtCOTFFRDs7RUFjSSxhQUFBO0NsQm8xRUg7QWtCbDJFRDtFQWlCSSxhQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7Q2xCbzFFSDtBa0IzMEVEO0VBRUUsbUJBQUE7Q2xCNDBFRDtBa0I5MEVEO0VBTUksc0JBQUE7Q2xCMjBFSDtBa0J2MEVEO0VBQ0UsbUJBQUE7RUFDQSxPQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0EscUJBQUE7Q2xCeTBFRDtBa0J2MEVEOzs7RUFHRSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0NsQnkwRUQ7QWtCdjBFRDs7O0VBR0UsWUFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtDbEJ5MEVEO0FrQnIwRUQ7Ozs7Ozs7Ozs7RUMxWkksZUFBQTtDbkIydUZIO0FrQmoxRUQ7RUN0Wkksc0JBQUE7RWQrQ0YseURBQUE7RUFDUSxpREFBQTtDTDRyRlQ7QW1CMXVGRztFQUNFLHNCQUFBO0VkNENKLDBFQUFBO0VBQ1Esa0VBQUE7Q0xpc0ZUO0FrQjMxRUQ7RUM1WUksZUFBQTtFQUNBLHNCQUFBO0VBQ0EsMEJBQUE7Q25CMHVGSDtBa0JoMkVEO0VDdFlJLGVBQUE7Q25CeXVGSDtBa0JoMkVEOzs7Ozs7Ozs7O0VDN1pJLGVBQUE7Q25CeXdGSDtBa0I1MkVEO0VDelpJLHNCQUFBO0VkK0NGLHlEQUFBO0VBQ1EsaURBQUE7Q0wwdEZUO0FtQnh3Rkc7RUFDRSxzQkFBQTtFZDRDSiwwRUFBQTtFQUNRLGtFQUFBO0NMK3RGVDtBa0J0M0VEO0VDL1lJLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDBCQUFBO0NuQnd3Rkg7QWtCMzNFRDtFQ3pZSSxlQUFBO0NuQnV3Rkg7QWtCMzNFRDs7Ozs7Ozs7OztFQ2hhSSxlQUFBO0NuQnV5Rkg7QWtCdjRFRDtFQzVaSSxzQkFBQTtFZCtDRix5REFBQTtFQUNRLGlEQUFBO0NMd3ZGVDtBbUJ0eUZHO0VBQ0Usc0JBQUE7RWQ0Q0osMEVBQUE7RUFDUSxrRUFBQTtDTDZ2RlQ7QWtCajVFRDtFQ2xaSSxlQUFBO0VBQ0Esc0JBQUE7RUFDQSwwQkFBQTtDbkJzeUZIO0FrQnQ1RUQ7RUM1WUksZUFBQTtDbkJxeUZIO0FrQmw1RUM7RUFDRSxVQUFBO0NsQm81RUg7QWtCbDVFQztFQUNFLE9BQUE7Q2xCbzVFSDtBa0IxNEVEO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7RUFDQSxlQUFBO0NsQjQ0RUQ7QWtCenpFRDtFQXdFQTtJQXRJTSxzQkFBQTtJQUNBLGlCQUFBO0lBQ0EsdUJBQUE7R2xCMjNFSDtFa0J2dkVIO0lBL0hNLHNCQUFBO0lBQ0EsWUFBQTtJQUNBLHVCQUFBO0dsQnkzRUg7RWtCNXZFSDtJQXhITSxzQkFBQTtHbEJ1M0VIO0VrQi92RUg7SUFwSE0sc0JBQUE7SUFDQSx1QkFBQTtHbEJzM0VIO0VrQm53RUg7OztJQTlHUSxZQUFBO0dsQnMzRUw7RWtCeHdFSDtJQXhHTSxZQUFBO0dsQm0zRUg7RWtCM3dFSDtJQXBHTSxpQkFBQTtJQUNBLHVCQUFBO0dsQmszRUg7RWtCL3dFSDs7SUE1Rk0sc0JBQUE7SUFDQSxjQUFBO0lBQ0EsaUJBQUE7SUFDQSx1QkFBQTtHbEIrMkVIO0VrQnR4RUg7O0lBdEZRLGdCQUFBO0dsQmczRUw7RWtCMXhFSDs7SUFqRk0sbUJBQUE7SUFDQSxlQUFBO0dsQisyRUg7RWtCL3hFSDtJQTNFTSxPQUFBO0dsQjYyRUg7Q0FDRjtBa0JuMkVEOzs7O0VBU0ksY0FBQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7Q2xCZzJFSDtBa0IzMkVEOztFQWlCSSxpQkFBQTtDbEI4MUVIO0FrQi8yRUQ7RUp0aEJFLG1CQUFBO0VBQ0Esb0JBQUE7Q2R3NEZEO0FrQjUwRUM7RUF5QkY7SUFuQ00sa0JBQUE7SUFDQSxpQkFBQTtJQUNBLGlCQUFBO0dsQjAxRUg7Q0FDRjtBa0IxM0VEO0VBd0NJLFlBQUE7Q2xCcTFFSDtBa0J2MEVDO0VBVUY7SUFkUSxrQkFBQTtJQUNBLGdCQUFBO0dsQiswRUw7Q0FDRjtBa0JyMEVDO0VBRUY7SUFOUSxpQkFBQTtJQUNBLGdCQUFBO0dsQjYwRUw7Q0FDRjtBb0J0NkZEO0VBQ0Usc0JBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLCtCQUFBO01BQUEsMkJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsOEJBQUE7RUFDQSxvQkFBQTtFQzBDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxtQkFBQTtFaEIrSkEsMEJBQUE7RUFDRyx1QkFBQTtFQUNDLHNCQUFBO0VBQ0ksa0JBQUE7Q0xpdUZUO0FvQno2Rkc7Ozs7OztFZHJCRixxQkFBQTtFQUVBLDJDQUFBO0VBQ0EscUJBQUE7Q05xOEZEO0FvQjc2RkM7OztFQUdFLFlBQUE7RUFDQSxzQkFBQTtDcEIrNkZIO0FvQjU2RkM7O0VBRUUsV0FBQTtFQUNBLHVCQUFBO0VmMkJGLHlEQUFBO0VBQ1EsaURBQUE7Q0xvNUZUO0FvQjU2RkM7OztFQUdFLG9CQUFBO0VFN0NGLGNBQUE7RUFHQSwwQkFBQTtFakI4REEseUJBQUE7RUFDUSxpQkFBQTtDTDY1RlQ7QW9CNTZGRzs7RUFFRSxxQkFBQTtDcEI4NkZMO0FvQnI2RkQ7RUMzREUsWUFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q3JCbStGRDtBcUJqK0ZDOztFQUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQm0rRlA7QXFCaitGQztFQUNFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQm0rRlA7QXFCaitGQzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCbStGUDtBcUJqK0ZHOzs7Ozs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ5K0ZUO0FxQnQrRkM7OztFQUdFLHVCQUFBO0NyQncrRkg7QXFCbitGRzs7Ozs7Ozs7O0VBR0UsdUJBQUE7RUFDSSxtQkFBQTtDckIyK0ZUO0FvQjE5RkQ7RUNaSSxZQUFBO0VBQ0EsdUJBQUE7Q3JCeStGSDtBb0IzOUZEO0VDOURFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NyQjRoR0Q7QXFCMWhHQzs7RUFFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckI0aEdQO0FxQjFoR0M7RUFDRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckI0aEdQO0FxQjFoR0M7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQjRoR1A7QXFCMWhHRzs7Ozs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCa2lHVDtBcUIvaEdDOzs7RUFHRSx1QkFBQTtDckJpaUdIO0FxQjVoR0c7Ozs7Ozs7OztFQUdFLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCb2lHVDtBb0JoaEdEO0VDZkksZUFBQTtFQUNBLHVCQUFBO0NyQmtpR0g7QW9CaGhHRDtFQ2xFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDckJxbEdEO0FxQm5sR0M7O0VBRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCcWxHUDtBcUJubEdDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCcWxHUDtBcUJubEdDOzs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJxbEdQO0FxQm5sR0c7Ozs7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQjJsR1Q7QXFCeGxHQzs7O0VBR0UsdUJBQUE7Q3JCMGxHSDtBcUJybEdHOzs7Ozs7Ozs7RUFHRSwwQkFBQTtFQUNJLHNCQUFBO0NyQjZsR1Q7QW9CcmtHRDtFQ25CSSxlQUFBO0VBQ0EsdUJBQUE7Q3JCMmxHSDtBb0Jya0dEO0VDdEVFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NyQjhvR0Q7QXFCNW9HQzs7RUFFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckI4b0dQO0FxQjVvR0M7RUFDRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckI4b0dQO0FxQjVvR0M7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQjhvR1A7QXFCNW9HRzs7Ozs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCb3BHVDtBcUJqcEdDOzs7RUFHRSx1QkFBQTtDckJtcEdIO0FxQjlvR0c7Ozs7Ozs7OztFQUdFLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCc3BHVDtBb0IxbkdEO0VDdkJJLGVBQUE7RUFDQSx1QkFBQTtDckJvcEdIO0FvQjFuR0Q7RUMxRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3JCdXNHRDtBcUJyc0dDOztFQUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnVzR1A7QXFCcnNHQztFQUNFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnVzR1A7QXFCcnNHQzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCdXNHUDtBcUJyc0dHOzs7Ozs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckI2c0dUO0FxQjFzR0M7OztFQUdFLHVCQUFBO0NyQjRzR0g7QXFCdnNHRzs7Ozs7Ozs7O0VBR0UsMEJBQUE7RUFDSSxzQkFBQTtDckIrc0dUO0FvQi9xR0Q7RUMzQkksZUFBQTtFQUNBLHVCQUFBO0NyQjZzR0g7QW9CL3FHRDtFQzlFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDckJnd0dEO0FxQjl2R0M7O0VBRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCZ3dHUDtBcUI5dkdDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCZ3dHUDtBcUI5dkdDOzs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJnd0dQO0FxQjl2R0c7Ozs7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnN3R1Q7QXFCbndHQzs7O0VBR0UsdUJBQUE7Q3JCcXdHSDtBcUJod0dHOzs7Ozs7Ozs7RUFHRSwwQkFBQTtFQUNJLHNCQUFBO0NyQnd3R1Q7QW9CcHVHRDtFQy9CSSxlQUFBO0VBQ0EsdUJBQUE7Q3JCc3dHSDtBb0IvdEdEO0VBQ0UsZUFBQTtFQUNBLG9CQUFBO0VBQ0EsaUJBQUE7Q3BCaXVHRDtBb0IvdEdDOzs7OztFQUtFLDhCQUFBO0VmbkNGLHlCQUFBO0VBQ1EsaUJBQUE7Q0xxd0dUO0FvQmh1R0M7Ozs7RUFJRSwwQkFBQTtDcEJrdUdIO0FvQmh1R0M7O0VBRUUsZUFBQTtFQUNBLDJCQUFBO0VBQ0EsOEJBQUE7Q3BCa3VHSDtBb0I5dEdHOzs7O0VBRUUsZUFBQTtFQUNBLHNCQUFBO0NwQmt1R0w7QW9CenRHRDs7RUN4RUUsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q3JCcXlHRDtBb0I1dEdEOztFQzVFRSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtDckI0eUdEO0FvQi90R0Q7O0VDaEZFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0NyQm16R0Q7QW9COXRHRDtFQUNFLGVBQUE7RUFDQSxZQUFBO0NwQmd1R0Q7QW9CNXRHRDtFQUNFLGdCQUFBO0NwQjh0R0Q7QW9CdnRHQzs7O0VBQ0UsWUFBQTtDcEIydEdIO0F1QnIzR0Q7RUFDRSxXQUFBO0VsQm9MQSx5Q0FBQTtFQUNLLG9DQUFBO0VBQ0csaUNBQUE7Q0xvc0dUO0F1QngzR0M7RUFDRSxXQUFBO0N2QjAzR0g7QXVCdDNHRDtFQUNFLGNBQUE7Q3ZCdzNHRDtBdUJ0M0dDO0VBQVksZUFBQTtDdkJ5M0diO0F1QngzR0M7RUFBWSxtQkFBQTtDdkIyM0diO0F1QjEzR0M7RUFBWSx5QkFBQTtDdkI2M0diO0F1QjEzR0Q7RUFDRSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxpQkFBQTtFbEJ1S0EsZ0RBQUE7RUFDUSwyQ0FBQTtLQUFBLHdDQUFBO0VBT1IsbUNBQUE7RUFDUSw4QkFBQTtLQUFBLDJCQUFBO0VBR1IseUNBQUE7RUFDUSxvQ0FBQTtLQUFBLGlDQUFBO0NMOHNHVDtBd0J4NUdEO0VBQ0Usc0JBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLHlCQUFBO0VBQ0Esb0NBQUE7RUFDQSxtQ0FBQTtDeEIwNUdEO0F3QnQ1R0Q7O0VBRUUsbUJBQUE7Q3hCdzVHRDtBd0JwNUdEO0VBQ0UsV0FBQTtDeEJzNUdEO0F3Qmw1R0Q7RUFDRSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxRQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxZQUFBO0VBQ0EsaUJBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0VBQ0Esc0NBQUE7RUFDQSxtQkFBQTtFbkJzQkEsb0RBQUE7RUFDUSw0Q0FBQTtFbUJyQlIscUNBQUE7VUFBQSw2QkFBQTtDeEJxNUdEO0F3Qmg1R0M7RUFDRSxTQUFBO0VBQ0EsV0FBQTtDeEJrNUdIO0F3QjM2R0Q7RUN6QkUsWUFBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLDBCQUFBO0N6QnU4R0Q7QXdCajdHRDtFQW1DSSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7RUFDQSxvQkFBQTtDeEJpNUdIO0F3QjM0R0M7O0VBRUUsc0JBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7Q3hCNjRHSDtBd0J2NEdDOzs7RUFHRSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxXQUFBO0VBQ0EsMEJBQUE7Q3hCeTRHSDtBd0JoNEdDOzs7RUFHRSxlQUFBO0N4Qms0R0g7QXdCOTNHQzs7RUFFRSxzQkFBQTtFQUNBLDhCQUFBO0VBQ0EsdUJBQUE7RUUzR0Ysb0VBQUE7RUY2R0Usb0JBQUE7Q3hCZzRHSDtBd0IzM0dEO0VBR0ksZUFBQTtDeEIyM0dIO0F3QjkzR0Q7RUFRSSxXQUFBO0N4QnkzR0g7QXdCajNHRDtFQUNFLFdBQUE7RUFDQSxTQUFBO0N4Qm0zR0Q7QXdCMzJHRDtFQUNFLFFBQUE7RUFDQSxZQUFBO0N4QjYyR0Q7QXdCejJHRDtFQUNFLGVBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxlQUFBO0VBQ0Esb0JBQUE7Q3hCMjJHRDtBd0J2MkdEO0VBQ0UsZ0JBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxPQUFBO0VBQ0EsYUFBQTtDeEJ5MkdEO0F3QnIyR0Q7RUFDRSxTQUFBO0VBQ0EsV0FBQTtDeEJ1MkdEO0F3Qi8xR0Q7O0VBSUksY0FBQTtFQUNBLDBCQUFBO0VBQ0EsNEJBQUE7RUFDQSxZQUFBO0N4QisxR0g7QXdCdDJHRDs7RUFXSSxVQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0N4QisxR0g7QXdCMTBHRDtFQVhFO0lBcEVBLFdBQUE7SUFDQSxTQUFBO0d4QjY1R0M7RXdCMTFHRDtJQTFEQSxRQUFBO0lBQ0EsWUFBQTtHeEJ1NUdDO0NBQ0Y7QTJCdmlIRDs7RUFFRSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsdUJBQUE7QzNCeWlIRDtBMkI3aUhEOztFQU1JLG1CQUFBO0VBQ0EsWUFBQTtDM0IyaUhIO0EyQnppSEc7Ozs7Ozs7O0VBSUUsV0FBQTtDM0IraUhMO0EyQnppSEQ7Ozs7RUFLSSxrQkFBQTtDM0IwaUhIO0EyQnJpSEQ7RUFDRSxrQkFBQTtDM0J1aUhEO0EyQnhpSEQ7OztFQU9JLFlBQUE7QzNCc2lISDtBMkI3aUhEOzs7RUFZSSxpQkFBQTtDM0JzaUhIO0EyQmxpSEQ7RUFDRSxpQkFBQTtDM0JvaUhEO0EyQmhpSEQ7RUFDRSxlQUFBO0MzQmtpSEQ7QTJCamlIQztFQ2xEQSw4QkFBQTtFQUNHLDJCQUFBO0M1QnNsSEo7QTJCaGlIRDs7RUMvQ0UsNkJBQUE7RUFDRywwQkFBQTtDNUJtbEhKO0EyQi9oSEQ7RUFDRSxZQUFBO0MzQmlpSEQ7QTJCL2hIRDtFQUNFLGlCQUFBO0MzQmlpSEQ7QTJCL2hIRDs7RUNuRUUsOEJBQUE7RUFDRywyQkFBQTtDNUJzbUhKO0EyQjloSEQ7RUNqRUUsNkJBQUE7RUFDRywwQkFBQTtDNUJrbUhKO0EyQjdoSEQ7O0VBRUUsV0FBQTtDM0IraEhEO0EyQjlnSEQ7RUFDRSxrQkFBQTtFQUNBLG1CQUFBO0MzQmdoSEQ7QTJCOWdIRDtFQUNFLG1CQUFBO0VBQ0Esb0JBQUE7QzNCZ2hIRDtBMkIzZ0hEO0V0Qi9DRSx5REFBQTtFQUNRLGlEQUFBO0NMNmpIVDtBMkIzZ0hDO0V0Qm5EQSx5QkFBQTtFQUNRLGlCQUFBO0NMaWtIVDtBMkJ4Z0hEO0VBQ0UsZUFBQTtDM0IwZ0hEO0EyQnZnSEQ7RUFDRSx3QkFBQTtFQUNBLHVCQUFBO0MzQnlnSEQ7QTJCdGdIRDtFQUNFLHdCQUFBO0MzQndnSEQ7QTJCamdIRDs7O0VBSUksZUFBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7QzNCa2dISDtBMkJ6Z0hEO0VBY00sWUFBQTtDM0I4L0dMO0EyQjVnSEQ7Ozs7RUFzQkksaUJBQUE7RUFDQSxlQUFBO0MzQjQvR0g7QTJCdi9HQztFQUNFLGlCQUFBO0MzQnkvR0g7QTJCdi9HQztFQzNLQSw2QkFBQTtFQUNDLDRCQUFBO0VBT0QsOEJBQUE7RUFDQyw2QkFBQTtDNUIrcEhGO0EyQnovR0M7RUMvS0EsMkJBQUE7RUFDQywwQkFBQTtFQU9ELGdDQUFBO0VBQ0MsK0JBQUE7QzVCcXFIRjtBMkIxL0dEO0VBQ0UsaUJBQUE7QzNCNC9HRDtBMkIxL0dEOztFQy9LRSw4QkFBQTtFQUNDLDZCQUFBO0M1QjZxSEY7QTJCei9HRDtFQzdMRSwyQkFBQTtFQUNDLDBCQUFBO0M1QnlySEY7QTJCci9HRDtFQUNFLGVBQUE7RUFDQSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtDM0J1L0dEO0EyQjMvR0Q7O0VBT0ksWUFBQTtFQUNBLG9CQUFBO0VBQ0EsVUFBQTtDM0J3L0dIO0EyQmpnSEQ7RUFZSSxZQUFBO0MzQncvR0g7QTJCcGdIRDtFQWdCSSxXQUFBO0MzQnUvR0g7QTJCdCtHRDs7OztFQUtNLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxxQkFBQTtDM0J1K0dMO0E2Qmp0SEQ7RUFDRSxtQkFBQTtFQUNBLGVBQUE7RUFDQSwwQkFBQTtDN0JtdEhEO0E2Qmh0SEM7RUFDRSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDN0JrdEhIO0E2QjN0SEQ7RUFlSSxtQkFBQTtFQUNBLFdBQUE7RUFLQSxZQUFBO0VBRUEsWUFBQTtFQUNBLGlCQUFBO0M3QjBzSEg7QTZCeHNIRztFQUNFLFdBQUE7QzdCMHNITDtBNkJoc0hEOzs7RVYwQkUsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0NuQjJxSEQ7QW1CenFIQzs7O0VBQ0UsYUFBQTtFQUNBLGtCQUFBO0NuQjZxSEg7QW1CMXFIQzs7Ozs7O0VBRUUsYUFBQTtDbkJnckhIO0E2Qmx0SEQ7OztFVnFCRSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7Q25Ca3NIRDtBbUJoc0hDOzs7RUFDRSxhQUFBO0VBQ0Esa0JBQUE7Q25Cb3NISDtBbUJqc0hDOzs7Ozs7RUFFRSxhQUFBO0NuQnVzSEg7QTZCaHVIRDs7O0VBR0Usb0JBQUE7QzdCa3VIRDtBNkJodUhDOzs7RUFDRSxpQkFBQTtDN0JvdUhIO0E2Qmh1SEQ7O0VBRUUsVUFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7QzdCa3VIRDtBNkI3dEhEO0VBQ0Usa0JBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNBLDBCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDN0IrdEhEO0E2QjV0SEM7RUFDRSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7QzdCOHRISDtBNkI1dEhDO0VBQ0UsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0M3Qjh0SEg7QTZCbHZIRDs7RUEwQkksY0FBQTtDN0I0dEhIO0E2QnZ0SEQ7Ozs7Ozs7RURwR0UsOEJBQUE7RUFDRywyQkFBQTtDNUJvMEhKO0E2Qnh0SEQ7RUFDRSxnQkFBQTtDN0IwdEhEO0E2Qnh0SEQ7Ozs7Ozs7RUR4R0UsNkJBQUE7RUFDRywwQkFBQTtDNUJ5MEhKO0E2Qnp0SEQ7RUFDRSxlQUFBO0M3QjJ0SEQ7QTZCdHRIRDtFQUNFLG1CQUFBO0VBR0EsYUFBQTtFQUNBLG9CQUFBO0M3QnN0SEQ7QTZCM3RIRDtFQVVJLG1CQUFBO0M3Qm90SEg7QTZCOXRIRDtFQVlNLGtCQUFBO0M3QnF0SEw7QTZCbHRIRzs7O0VBR0UsV0FBQTtDN0JvdEhMO0E2Qi9zSEM7O0VBR0ksbUJBQUE7QzdCZ3RITDtBNkI3c0hDOztFQUdJLFdBQUE7RUFDQSxrQkFBQTtDN0I4c0hMO0E4QjcySEQ7RUFDRSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7QzlCKzJIRDtBOEJsM0hEO0VBT0ksbUJBQUE7RUFDQSxlQUFBO0M5QjgySEg7QThCdDNIRDtFQVdNLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0M5QjgySEw7QThCNzJISzs7RUFFRSxzQkFBQTtFQUNBLDBCQUFBO0M5QisySFA7QThCMTJIRztFQUNFLGVBQUE7QzlCNDJITDtBOEIxMkhLOztFQUVFLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDhCQUFBO0VBQ0Esb0JBQUE7QzlCNDJIUDtBOEJyMkhHOzs7RUFHRSwwQkFBQTtFQUNBLHNCQUFBO0M5QnUySEw7QThCaDVIRDtFTEhFLFlBQUE7RUFDQSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSwwQkFBQTtDekJzNUhEO0E4QnQ1SEQ7RUEwREksZ0JBQUE7QzlCKzFISDtBOEJ0MUhEO0VBQ0UsOEJBQUE7QzlCdzFIRDtBOEJ6MUhEO0VBR0ksWUFBQTtFQUVBLG9CQUFBO0M5QncxSEg7QThCNzFIRDtFQVNNLGtCQUFBO0VBQ0Esd0JBQUE7RUFDQSw4QkFBQTtFQUNBLDJCQUFBO0M5QnUxSEw7QThCdDFISztFQUNFLG1DQUFBO0M5QncxSFA7QThCbDFISzs7O0VBR0UsZUFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQ0FBQTtFQUNBLGdCQUFBO0M5Qm8xSFA7QThCLzBIQztFQXFEQSxZQUFBO0VBOEJBLGlCQUFBO0M5Qmd3SEQ7QThCbjFIQztFQXdERSxZQUFBO0M5Qjh4SEg7QThCdDFIQztFQTBESSxtQkFBQTtFQUNBLG1CQUFBO0M5Qit4SEw7QThCMTFIQztFQWdFRSxVQUFBO0VBQ0EsV0FBQTtDOUI2eEhIO0E4Qmp4SEQ7RUEwREE7SUFqRU0sb0JBQUE7SUFDQSxVQUFBO0c5QjR4SEg7RThCNXRISDtJQTlEUSxpQkFBQTtHOUI2eEhMO0NBQ0Y7QThCdjJIQztFQXVGRSxnQkFBQTtFQUNBLG1CQUFBO0M5Qm14SEg7QThCMzJIQzs7O0VBOEZFLHVCQUFBO0M5Qmt4SEg7QThCcHdIRDtFQTJCQTtJQXBDTSw4QkFBQTtJQUNBLDJCQUFBO0c5Qml4SEg7RThCOXVISDs7O0lBOUJNLDBCQUFBO0c5Qml4SEg7Q0FDRjtBOEJsM0hEO0VBRUksWUFBQTtDOUJtM0hIO0E4QnIzSEQ7RUFNTSxtQkFBQTtDOUJrM0hMO0E4QngzSEQ7RUFTTSxpQkFBQTtDOUJrM0hMO0E4QjcySEs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtDOUIrMkhQO0E4QnYySEQ7RUFFSSxZQUFBO0M5QncySEg7QThCMTJIRDtFQUlNLGdCQUFBO0VBQ0EsZUFBQTtDOUJ5MkhMO0E4QjcxSEQ7RUFDRSxZQUFBO0M5QisxSEQ7QThCaDJIRDtFQUlJLFlBQUE7QzlCKzFISDtBOEJuMkhEO0VBTU0sbUJBQUE7RUFDQSxtQkFBQTtDOUJnMkhMO0E4QnYySEQ7RUFZSSxVQUFBO0VBQ0EsV0FBQTtDOUI4MUhIO0E4QmwxSEQ7RUEwREE7SUFqRU0sb0JBQUE7SUFDQSxVQUFBO0c5QjYxSEg7RThCN3hISDtJQTlEUSxpQkFBQTtHOUI4MUhMO0NBQ0Y7QThCdDFIRDtFQUNFLGlCQUFBO0M5QncxSEQ7QThCejFIRDtFQUtJLGdCQUFBO0VBQ0EsbUJBQUE7QzlCdTFISDtBOEI3MUhEOzs7RUFZSSx1QkFBQTtDOUJzMUhIO0E4QngwSEQ7RUEyQkE7SUFwQ00sOEJBQUE7SUFDQSwyQkFBQTtHOUJxMUhIO0U4Qmx6SEg7OztJQTlCTSwwQkFBQTtHOUJxMUhIO0NBQ0Y7QThCNTBIRDtFQUVJLGNBQUE7QzlCNjBISDtBOEIvMEhEO0VBS0ksZUFBQTtDOUI2MEhIO0E4QnAwSEQ7RUFFRSxpQkFBQTtFRjNPQSwyQkFBQTtFQUNDLDBCQUFBO0M1QmlqSUY7QStCM2lJRDtFQUNFLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLDhCQUFBO0MvQjZpSUQ7QStCcmlJRDtFQThuQkE7SUFob0JJLG1CQUFBO0cvQjJpSUQ7Q0FDRjtBK0I1aElEO0VBZ25CQTtJQWxuQkksWUFBQTtHL0JraUlEO0NBQ0Y7QStCcGhJRDtFQUNFLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLGtDQUFBO0VBQ0EsMkRBQUE7VUFBQSxtREFBQTtFQUVBLGtDQUFBO0MvQnFoSUQ7QStCbmhJQztFQUNFLGlCQUFBO0MvQnFoSUg7QStCei9IRDtFQTZqQkE7SUFybEJJLFlBQUE7SUFDQSxjQUFBO0lBQ0EseUJBQUE7WUFBQSxpQkFBQTtHL0JxaElEO0UrQm5oSUM7SUFDRSwwQkFBQTtJQUNBLHdCQUFBO0lBQ0Esa0JBQUE7SUFDQSw2QkFBQTtHL0JxaElIO0UrQmxoSUM7SUFDRSxvQkFBQTtHL0JvaElIO0UrQi9nSUM7OztJQUdFLGdCQUFBO0lBQ0EsaUJBQUE7Ry9CaWhJSDtDQUNGO0ErQjdnSUQ7O0VBR0ksa0JBQUE7Qy9COGdJSDtBK0J6Z0lDO0VBbWpCRjs7SUFyakJNLGtCQUFBO0cvQmdoSUg7Q0FDRjtBK0J2Z0lEOzs7O0VBSUksb0JBQUE7RUFDQSxtQkFBQTtDL0J5Z0lIO0ErQm5nSUM7RUFnaUJGOzs7O0lBbmlCTSxnQkFBQTtJQUNBLGVBQUE7Ry9CNmdJSDtDQUNGO0ErQmpnSUQ7RUFDRSxjQUFBO0VBQ0Esc0JBQUE7Qy9CbWdJRDtBK0I5L0hEO0VBOGdCQTtJQWhoQkksaUJBQUE7Ry9Cb2dJRDtDQUNGO0ErQmhnSUQ7O0VBRUUsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsUUFBQTtFQUNBLGNBQUE7Qy9Ca2dJRDtBK0I1L0hEO0VBZ2dCQTs7SUFsZ0JJLGlCQUFBO0cvQm1nSUQ7Q0FDRjtBK0JqZ0lEO0VBQ0UsT0FBQTtFQUNBLHNCQUFBO0MvQm1nSUQ7QStCamdJRDtFQUNFLFVBQUE7RUFDQSxpQkFBQTtFQUNBLHNCQUFBO0MvQm1nSUQ7QStCNy9IRDtFQUNFLFlBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0MvQisvSEQ7QStCNy9IQzs7RUFFRSxzQkFBQTtDL0IrL0hIO0ErQnhnSUQ7RUFhSSxlQUFBO0MvQjgvSEg7QStCci9IRDtFQUxJOztJQUVFLG1CQUFBO0cvQjYvSEg7Q0FDRjtBK0JuL0hEO0VBQ0UsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtFQzlMQSxnQkFBQTtFQUNBLG1CQUFBO0VEK0xBLDhCQUFBO0VBQ0EsdUJBQUE7RUFDQSw4QkFBQTtFQUNBLG1CQUFBO0MvQnMvSEQ7QStCbC9IQztFQUNFLFdBQUE7Qy9Cby9ISDtBK0JsZ0lEO0VBbUJJLGVBQUE7RUFDQSxZQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0MvQmsvSEg7QStCeGdJRDtFQXlCSSxnQkFBQTtDL0JrL0hIO0ErQjUrSEQ7RUFxYkE7SUF2YkksY0FBQTtHL0JrL0hEO0NBQ0Y7QStCeitIRDtFQUNFLG9CQUFBO0MvQjIrSEQ7QStCNStIRDtFQUlJLGtCQUFBO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtDL0IyK0hIO0ErQi84SEM7RUEyWUY7SUFqYU0saUJBQUE7SUFDQSxZQUFBO0lBQ0EsWUFBQTtJQUNBLGNBQUE7SUFDQSw4QkFBQTtJQUNBLFVBQUE7SUFDQSx5QkFBQTtZQUFBLGlCQUFBO0cvQnkrSEg7RStCOWtISDs7SUF4WlEsMkJBQUE7Ry9CMCtITDtFK0JsbEhIO0lBclpRLGtCQUFBO0cvQjArSEw7RStCeitISzs7SUFFRSx1QkFBQTtHL0IyK0hQO0NBQ0Y7QStCejlIRDtFQStYQTtJQTFZSSxZQUFBO0lBQ0EsVUFBQTtHL0J3K0hEO0UrQi9sSEg7SUF0WU0sWUFBQTtHL0J3K0hIO0UrQmxtSEg7SUFwWVEsa0JBQUE7SUFDQSxxQkFBQTtHL0J5K0hMO0NBQ0Y7QStCOTlIRDtFQUNFLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLGtDQUFBO0VBQ0EscUNBQUE7RTFCOU5BLDZGQUFBO0VBQ1EscUZBQUE7RTJCL0RSLGdCQUFBO0VBQ0EsbUJBQUE7Q2hDK3ZJRDtBa0J6dUhEO0VBd0VBO0lBdElNLHNCQUFBO0lBQ0EsaUJBQUE7SUFDQSx1QkFBQTtHbEIyeUhIO0VrQnZxSEg7SUEvSE0sc0JBQUE7SUFDQSxZQUFBO0lBQ0EsdUJBQUE7R2xCeXlISDtFa0I1cUhIO0lBeEhNLHNCQUFBO0dsQnV5SEg7RWtCL3FISDtJQXBITSxzQkFBQTtJQUNBLHVCQUFBO0dsQnN5SEg7RWtCbnJISDs7O0lBOUdRLFlBQUE7R2xCc3lITDtFa0J4ckhIO0lBeEdNLFlBQUE7R2xCbXlISDtFa0IzckhIO0lBcEdNLGlCQUFBO0lBQ0EsdUJBQUE7R2xCa3lISDtFa0IvckhIOztJQTVGTSxzQkFBQTtJQUNBLGNBQUE7SUFDQSxpQkFBQTtJQUNBLHVCQUFBO0dsQit4SEg7RWtCdHNISDs7SUF0RlEsZ0JBQUE7R2xCZ3lITDtFa0Ixc0hIOztJQWpGTSxtQkFBQTtJQUNBLGVBQUE7R2xCK3hISDtFa0Ivc0hIO0lBM0VNLE9BQUE7R2xCNnhISDtDQUNGO0ErQnZnSUM7RUFtV0Y7SUF6V00sbUJBQUE7Ry9CaWhJSDtFK0IvZ0lHO0lBQ0UsaUJBQUE7Ry9CaWhJTDtDQUNGO0ErQmhnSUQ7RUFvVkE7SUE1VkksWUFBQTtJQUNBLFVBQUE7SUFDQSxlQUFBO0lBQ0EsZ0JBQUE7SUFDQSxlQUFBO0lBQ0Esa0JBQUE7STFCelBGLHlCQUFBO0lBQ1EsaUJBQUE7R0xzd0lQO0NBQ0Y7QStCdGdJRDtFQUNFLGNBQUE7RUhwVUEsMkJBQUE7RUFDQywwQkFBQTtDNUI2MElGO0ErQnRnSUQ7RUFDRSxpQkFBQTtFSHpVQSw2QkFBQTtFQUNDLDRCQUFBO0VBT0QsOEJBQUE7RUFDQyw2QkFBQTtDNUI0MElGO0ErQmxnSUQ7RUNoVkUsZ0JBQUE7RUFDQSxtQkFBQTtDaENxMUlEO0ErQm5nSUM7RUNuVkEsaUJBQUE7RUFDQSxvQkFBQTtDaEN5MUlEO0ErQnBnSUM7RUN0VkEsaUJBQUE7RUFDQSxvQkFBQTtDaEM2MUlEO0ErQjkvSEQ7RUNoV0UsaUJBQUE7RUFDQSxvQkFBQTtDaENpMklEO0ErQjEvSEQ7RUFzU0E7SUExU0ksWUFBQTtJQUNBLGtCQUFBO0lBQ0EsbUJBQUE7Ry9Ca2dJRDtDQUNGO0ErQnIrSEQ7RUFoQkU7SUV4V0EsdUJBQUE7R2pDaTJJQztFK0J4L0hEO0lFNVdBLHdCQUFBO0lGOFdFLG9CQUFBO0cvQjAvSEQ7RStCNS9IRDtJQUtJLGdCQUFBO0cvQjAvSEg7Q0FDRjtBK0JqL0hEO0VBQ0UsMEJBQUE7RUFDQSxzQkFBQTtDL0JtL0hEO0ErQnIvSEQ7RUFLSSxZQUFBO0MvQm0vSEg7QStCbC9IRzs7RUFFRSxlQUFBO0VBQ0EsOEJBQUE7Qy9Cby9ITDtBK0I3L0hEO0VBY0ksWUFBQTtDL0JrL0hIO0ErQmhnSUQ7RUFtQk0sWUFBQTtDL0JnL0hMO0ErQjkrSEs7O0VBRUUsWUFBQTtFQUNBLDhCQUFBO0MvQmcvSFA7QStCNStISzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0MvQjgrSFA7QStCMStISzs7O0VBR0UsWUFBQTtFQUNBLDhCQUFBO0MvQjQrSFA7QStCcGhJRDtFQThDSSxtQkFBQTtDL0J5K0hIO0ErQngrSEc7O0VBRUUsdUJBQUE7Qy9CMCtITDtBK0IzaElEO0VBb0RNLHVCQUFBO0MvQjArSEw7QStCOWhJRDs7RUEwREksc0JBQUE7Qy9CdytISDtBK0JqK0hLOzs7RUFHRSwwQkFBQTtFQUNBLFlBQUE7Qy9CbStIUDtBK0JsOEhDO0VBb0tGO0lBN0xVLFlBQUE7Ry9CKzlIUDtFK0I5OUhPOztJQUVFLFlBQUE7SUFDQSw4QkFBQTtHL0JnK0hUO0UrQjU5SE87OztJQUdFLFlBQUE7SUFDQSwwQkFBQTtHL0I4OUhUO0UrQjE5SE87OztJQUdFLFlBQUE7SUFDQSw4QkFBQTtHL0I0OUhUO0NBQ0Y7QStCOWpJRDtFQThHSSxZQUFBO0MvQm05SEg7QStCbDlIRztFQUNFLFlBQUE7Qy9CbzlITDtBK0Jwa0lEO0VBcUhJLFlBQUE7Qy9CazlISDtBK0JqOUhHOztFQUVFLFlBQUE7Qy9CbTlITDtBK0IvOEhLOzs7O0VBRUUsWUFBQTtDL0JtOUhQO0ErQjM4SEQ7RUFDRSx1QkFBQTtFQUNBLHNCQUFBO0MvQjY4SEQ7QStCLzhIRDtFQUtJLGVBQUE7Qy9CNjhISDtBK0I1OEhHOztFQUVFLFlBQUE7RUFDQSw4QkFBQTtDL0I4OEhMO0ErQnY5SEQ7RUFjSSxlQUFBO0MvQjQ4SEg7QStCMTlIRDtFQW1CTSxlQUFBO0MvQjA4SEw7QStCeDhISzs7RUFFRSxZQUFBO0VBQ0EsOEJBQUE7Qy9CMDhIUDtBK0J0OEhLOzs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7Qy9CdzhIUDtBK0JwOEhLOzs7RUFHRSxZQUFBO0VBQ0EsOEJBQUE7Qy9CczhIUDtBK0I5K0hEO0VBK0NJLG1CQUFBO0MvQms4SEg7QStCajhIRzs7RUFFRSx1QkFBQTtDL0JtOEhMO0ErQnIvSEQ7RUFxRE0sdUJBQUE7Qy9CbThITDtBK0J4L0hEOztFQTJESSxzQkFBQTtDL0JpOEhIO0ErQjM3SEs7OztFQUdFLDBCQUFBO0VBQ0EsWUFBQTtDL0I2N0hQO0ErQnQ1SEM7RUF3QkY7SUF2RFUsc0JBQUE7Ry9CeTdIUDtFK0JsNEhIO0lBcERVLDBCQUFBO0cvQnk3SFA7RStCcjRISDtJQWpEVSxlQUFBO0cvQnk3SFA7RStCeDdITzs7SUFFRSxZQUFBO0lBQ0EsOEJBQUE7Ry9CMDdIVDtFK0J0N0hPOzs7SUFHRSxZQUFBO0lBQ0EsMEJBQUE7Ry9CdzdIVDtFK0JwN0hPOzs7SUFHRSxZQUFBO0lBQ0EsOEJBQUE7Ry9CczdIVDtDQUNGO0ErQjloSUQ7RUErR0ksZUFBQTtDL0JrN0hIO0ErQmo3SEc7RUFDRSxZQUFBO0MvQm03SEw7QStCcGlJRDtFQXNISSxlQUFBO0MvQmk3SEg7QStCaDdIRzs7RUFFRSxZQUFBO0MvQms3SEw7QStCOTZISzs7OztFQUVFLFlBQUE7Qy9CazdIUDtBa0M1akpEO0VBQ0Usa0JBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0VBQ0EsMEJBQUE7RUFDQSxtQkFBQTtDbEM4akpEO0FrQ25rSkQ7RUFRSSxzQkFBQTtDbEM4akpIO0FrQ3RrSkQ7RUFXTSxrQkFBQTtFQUNBLGVBQUE7RUFDQSxZQUFBO0NsQzhqSkw7QWtDM2tKRDtFQWtCSSxlQUFBO0NsQzRqSkg7QW1DaGxKRDtFQUNFLHNCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7Q25Da2xKRDtBbUN0bEpEO0VBT0ksZ0JBQUE7Q25Da2xKSDtBbUN6bEpEOztFQVVNLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0Esd0JBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7Q25DbWxKTDtBbUNqbEpHOztFQUdJLGVBQUE7RVBYTiwrQkFBQTtFQUNHLDRCQUFBO0M1QjhsSko7QW1DaGxKRzs7RVB2QkYsZ0NBQUE7RUFDRyw2QkFBQTtDNUIybUpKO0FtQzNrSkc7Ozs7RUFFRSxXQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0VBQ0EsbUJBQUE7Q25DK2tKTDtBbUN6a0pHOzs7Ozs7RUFHRSxXQUFBO0VBQ0EsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtDbkM4a0pMO0FtQ3JvSkQ7Ozs7OztFQWtFTSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0NuQzJrSkw7QW1DbGtKRDs7RUMzRU0sbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0NwQ2lwSkw7QW9DL29KRzs7RVJLRiwrQkFBQTtFQUNHLDRCQUFBO0M1QjhvSko7QW9DOW9KRzs7RVJURixnQ0FBQTtFQUNHLDZCQUFBO0M1QjJwSko7QW1DN2tKRDs7RUNoRk0sa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0NwQ2lxSkw7QW9DL3BKRzs7RVJLRiwrQkFBQTtFQUNHLDRCQUFBO0M1QjhwSko7QW9DOXBKRzs7RVJURixnQ0FBQTtFQUNHLDZCQUFBO0M1QjJxSko7QXFDOXFKRDtFQUNFLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7Q3JDZ3JKRDtBcUNwckpEO0VBT0ksZ0JBQUE7Q3JDZ3JKSDtBcUN2ckpEOztFQVVNLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0VBQ0Esb0JBQUE7Q3JDaXJKTDtBcUMvckpEOztFQW1CTSxzQkFBQTtFQUNBLDBCQUFBO0NyQ2dySkw7QXFDcHNKRDs7RUEyQk0sYUFBQTtDckM2cUpMO0FxQ3hzSkQ7O0VBa0NNLFlBQUE7Q3JDMHFKTDtBcUM1c0pEOzs7O0VBMkNNLGVBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0NyQ3VxSkw7QXNDcnRKRDtFQUNFLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSx5QkFBQTtFQUNBLHFCQUFBO0N0Q3V0SkQ7QXNDbnRKRzs7RUFFRSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtDdENxdEpMO0FzQ2h0SkM7RUFDRSxjQUFBO0N0Q2t0Skg7QXNDOXNKQztFQUNFLG1CQUFBO0VBQ0EsVUFBQTtDdENndEpIO0FzQ3pzSkQ7RUN0Q0UsMEJBQUE7Q3ZDa3ZKRDtBdUMvdUpHOztFQUVFLDBCQUFBO0N2Q2l2Skw7QXNDNXNKRDtFQzFDRSwwQkFBQTtDdkN5dkpEO0F1Q3R2Skc7O0VBRUUsMEJBQUE7Q3ZDd3ZKTDtBc0Mvc0pEO0VDOUNFLDBCQUFBO0N2Q2d3SkQ7QXVDN3ZKRzs7RUFFRSwwQkFBQTtDdkMrdkpMO0FzQ2x0SkQ7RUNsREUsMEJBQUE7Q3ZDdXdKRDtBdUNwd0pHOztFQUVFLDBCQUFBO0N2Q3N3Skw7QXNDcnRKRDtFQ3RERSwwQkFBQTtDdkM4d0pEO0F1QzN3Skc7O0VBRUUsMEJBQUE7Q3ZDNndKTDtBc0N4dEpEO0VDMURFLDBCQUFBO0N2Q3F4SkQ7QXVDbHhKRzs7RUFFRSwwQkFBQTtDdkNveEpMO0F3Q3R4SkQ7RUFDRSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsbUJBQUE7RUFDQSwwQkFBQTtFQUNBLG9CQUFBO0N4Q3d4SkQ7QXdDcnhKQztFQUNFLGNBQUE7Q3hDdXhKSDtBd0NueEpDO0VBQ0UsbUJBQUE7RUFDQSxVQUFBO0N4Q3F4Skg7QXdDbHhKQzs7RUFFRSxPQUFBO0VBQ0EsaUJBQUE7Q3hDb3hKSDtBd0Mvd0pHOztFQUVFLFlBQUE7RUFDQSxzQkFBQTtFQUNBLGdCQUFBO0N4Q2l4Skw7QXdDNXdKQzs7RUFFRSxlQUFBO0VBQ0EsdUJBQUE7Q3hDOHdKSDtBd0Mzd0pDO0VBQ0UsYUFBQTtDeEM2d0pIO0F3QzF3SkM7RUFDRSxrQkFBQTtDeEM0d0pIO0F3Q3p3SkM7RUFDRSxpQkFBQTtDeEMyd0pIO0F5Q3IwSkQ7RUFDRSxrQkFBQTtFQUNBLHFCQUFBO0VBQ0Esb0JBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7Q3pDdTBKRDtBeUM1MEpEOztFQVNJLGVBQUE7Q3pDdTBKSDtBeUNoMUpEO0VBYUksb0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0N6Q3MwSkg7QXlDcjFKRDtFQW1CSSwwQkFBQTtDekNxMEpIO0F5Q2wwSkM7O0VBRUUsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0N6Q28wSkg7QXlDOTFKRDtFQThCSSxnQkFBQTtDekNtMEpIO0F5Q2p6SkQ7RUFDQTtJQWZJLGtCQUFBO0lBQ0EscUJBQUE7R3pDbTBKRDtFeUNqMEpDOztJQUVFLG1CQUFBO0lBQ0Esb0JBQUE7R3pDbTBKSDtFeUMxekpIOztJQUpNLGdCQUFBO0d6Q2swSkg7Q0FDRjtBMEMvMkpEO0VBQ0UsZUFBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VyQ2lMQSw0Q0FBQTtFQUNLLHVDQUFBO0VBQ0csb0NBQUE7Q0xpc0pUO0EwQzMzSkQ7O0VBYUksa0JBQUE7RUFDQSxtQkFBQTtDMUNrM0pIO0EwQzkySkM7OztFQUdFLHNCQUFBO0MxQ2czSkg7QTBDcjRKRDtFQTBCSSxhQUFBO0VBQ0EsZUFBQTtDMUM4MkpIO0EyQ3Y0SkQ7RUFDRSxjQUFBO0VBQ0Esb0JBQUE7RUFDQSw4QkFBQTtFQUNBLG1CQUFBO0MzQ3k0SkQ7QTJDNzRKRDtFQVFJLGNBQUE7RUFFQSxlQUFBO0MzQ3U0Skg7QTJDajVKRDtFQWVJLGtCQUFBO0MzQ3E0Skg7QTJDcDVKRDs7RUFxQkksaUJBQUE7QzNDbTRKSDtBMkN4NUpEO0VBeUJJLGdCQUFBO0MzQ2s0Skg7QTJDMTNKRDs7RUFFRSxvQkFBQTtDM0M0M0pEO0EyQzkzSkQ7O0VBTUksbUJBQUE7RUFDQSxVQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7QzNDNDNKSDtBMkNwM0pEO0VDdkRFLDBCQUFBO0VBQ0Esc0JBQUE7RUFDQSxlQUFBO0M1Qzg2SkQ7QTJDejNKRDtFQ2xESSwwQkFBQTtDNUM4NkpIO0EyQzUzSkQ7RUMvQ0ksZUFBQTtDNUM4NkpIO0EyQzMzSkQ7RUMzREUsMEJBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7QzVDeTdKRDtBMkNoNEpEO0VDdERJLDBCQUFBO0M1Q3k3Skg7QTJDbjRKRDtFQ25ESSxlQUFBO0M1Q3k3Skg7QTJDbDRKRDtFQy9ERSwwQkFBQTtFQUNBLHNCQUFBO0VBQ0EsZUFBQTtDNUNvOEpEO0EyQ3Y0SkQ7RUMxREksMEJBQUE7QzVDbzhKSDtBMkMxNEpEO0VDdkRJLGVBQUE7QzVDbzhKSDtBMkN6NEpEO0VDbkVFLDBCQUFBO0VBQ0Esc0JBQUE7RUFDQSxlQUFBO0M1Qys4SkQ7QTJDOTRKRDtFQzlESSwwQkFBQTtDNUMrOEpIO0EyQ2o1SkQ7RUMzREksZUFBQTtDNUMrOEpIO0E2Q2o5SkQ7RUFDRTtJQUFRLDRCQUFBO0c3Q285SlA7RTZDbjlKRDtJQUFRLHlCQUFBO0c3Q3M5SlA7Q0FDRjtBNkNuOUpEO0VBQ0U7SUFBUSw0QkFBQTtHN0NzOUpQO0U2Q3I5SkQ7SUFBUSx5QkFBQTtHN0N3OUpQO0NBQ0Y7QTZDMzlKRDtFQUNFO0lBQVEsNEJBQUE7RzdDczlKUDtFNkNyOUpEO0lBQVEseUJBQUE7RzdDdzlKUDtDQUNGO0E2Q2o5SkQ7RUFDRSxpQkFBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtFQUNBLDBCQUFBO0VBQ0EsbUJBQUE7RXhDc0NBLHVEQUFBO0VBQ1EsK0NBQUE7Q0w4NkpUO0E2Q2g5SkQ7RUFDRSxZQUFBO0VBQ0EsVUFBQTtFQUNBLGFBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsMEJBQUE7RXhDeUJBLHVEQUFBO0VBQ1EsK0NBQUE7RUF5SFIsb0NBQUE7RUFDSywrQkFBQTtFQUNHLDRCQUFBO0NMazBKVDtBNkM3OEpEOztFQ0NJLDhNQUFBO0VBQ0EseU1BQUE7RUFDQSxzTUFBQTtFREFGLG1DQUFBO1VBQUEsMkJBQUE7QzdDaTlKRDtBNkMxOEpEOztFeEM1Q0UsMkRBQUE7RUFDSyxzREFBQTtFQUNHLG1EQUFBO0NMMC9KVDtBNkN2OEpEO0VFckVFLDBCQUFBO0MvQytnS0Q7QStDNWdLQztFRGdERSw4TUFBQTtFQUNBLHlNQUFBO0VBQ0Esc01BQUE7QzlDKzlKSDtBNkMzOEpEO0VFekVFLDBCQUFBO0MvQ3VoS0Q7QStDcGhLQztFRGdERSw4TUFBQTtFQUNBLHlNQUFBO0VBQ0Esc01BQUE7QzlDdStKSDtBNkMvOEpEO0VFN0VFLDBCQUFBO0MvQytoS0Q7QStDNWhLQztFRGdERSw4TUFBQTtFQUNBLHlNQUFBO0VBQ0Esc01BQUE7QzlDKytKSDtBNkNuOUpEO0VFakZFLDBCQUFBO0MvQ3VpS0Q7QStDcGlLQztFRGdERSw4TUFBQTtFQUNBLHlNQUFBO0VBQ0Esc01BQUE7QzlDdS9KSDtBZ0QvaUtEO0VBRUUsaUJBQUE7Q2hEZ2pLRDtBZ0Q5aUtDO0VBQ0UsY0FBQTtDaERnaktIO0FnRDVpS0Q7O0VBRUUsUUFBQTtFQUNBLGlCQUFBO0NoRDhpS0Q7QWdEM2lLRDtFQUNFLGVBQUE7Q2hENmlLRDtBZ0QxaUtEO0VBQ0UsZUFBQTtDaEQ0aUtEO0FnRHppS0M7RUFDRSxnQkFBQTtDaEQyaUtIO0FnRHZpS0Q7O0VBRUUsbUJBQUE7Q2hEeWlLRDtBZ0R0aUtEOztFQUVFLG9CQUFBO0NoRHdpS0Q7QWdEcmlLRDs7O0VBR0Usb0JBQUE7RUFDQSxvQkFBQTtDaER1aUtEO0FnRHBpS0Q7RUFDRSx1QkFBQTtDaERzaUtEO0FnRG5pS0Q7RUFDRSx1QkFBQTtDaERxaUtEO0FnRGppS0Q7RUFDRSxjQUFBO0VBQ0EsbUJBQUE7Q2hEbWlLRDtBZ0Q3aEtEO0VBQ0UsZ0JBQUE7RUFDQSxpQkFBQTtDaEQraEtEO0FpRHRsS0Q7RUFFRSxvQkFBQTtFQUNBLGdCQUFBO0NqRHVsS0Q7QWlEL2tLRDtFQUNFLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0VBRUEsb0JBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0NqRGdsS0Q7QWlEN2tLQztFckIzQkEsNkJBQUE7RUFDQyw0QkFBQTtDNUIybUtGO0FpRDlrS0M7RUFDRSxpQkFBQTtFckJ2QkYsZ0NBQUE7RUFDQywrQkFBQTtDNUJ3bUtGO0FpRHZrS0Q7O0VBRUUsWUFBQTtDakR5a0tEO0FpRDNrS0Q7O0VBS0ksWUFBQTtDakQwa0tIO0FpRHRrS0M7Ozs7RUFFRSxzQkFBQTtFQUNBLFlBQUE7RUFDQSwwQkFBQTtDakQwa0tIO0FpRHRrS0Q7RUFDRSxZQUFBO0VBQ0EsaUJBQUE7Q2pEd2tLRDtBaURua0tDOzs7RUFHRSwwQkFBQTtFQUNBLGVBQUE7RUFDQSxvQkFBQTtDakRxa0tIO0FpRDFrS0M7OztFQVNJLGVBQUE7Q2pEc2tLTDtBaUQva0tDOzs7RUFZSSxlQUFBO0NqRHdrS0w7QWlEbmtLQzs7O0VBR0UsV0FBQTtFQUNBLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NqRHFrS0g7QWlEM2tLQzs7Ozs7Ozs7O0VBWUksZUFBQTtDakQwa0tMO0FpRHRsS0M7OztFQWVJLGVBQUE7Q2pENGtLTDtBa0Q5cUtDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0NsRGdyS0g7QWtEOXFLRzs7RUFFRSxlQUFBO0NsRGdyS0w7QWtEbHJLRzs7RUFLSSxlQUFBO0NsRGlyS1A7QWtEOXFLSzs7OztFQUVFLGVBQUE7RUFDQSwwQkFBQTtDbERrcktQO0FrRGhyS0s7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NsRHFyS1A7QWtEM3NLQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtDbEQ2c0tIO0FrRDNzS0c7O0VBRUUsZUFBQTtDbEQ2c0tMO0FrRC9zS0c7O0VBS0ksZUFBQTtDbEQ4c0tQO0FrRDNzS0s7Ozs7RUFFRSxlQUFBO0VBQ0EsMEJBQUE7Q2xEK3NLUDtBa0Q3c0tLOzs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDbERrdEtQO0FrRHh1S0M7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7Q2xEMHVLSDtBa0R4dUtHOztFQUVFLGVBQUE7Q2xEMHVLTDtBa0Q1dUtHOztFQUtJLGVBQUE7Q2xEMnVLUDtBa0R4dUtLOzs7O0VBRUUsZUFBQTtFQUNBLDBCQUFBO0NsRDR1S1A7QWtEMXVLSzs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q2xEK3VLUDtBa0Ryd0tDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0NsRHV3S0g7QWtEcndLRzs7RUFFRSxlQUFBO0NsRHV3S0w7QWtEendLRzs7RUFLSSxlQUFBO0NsRHd3S1A7QWtEcndLSzs7OztFQUVFLGVBQUE7RUFDQSwwQkFBQTtDbER5d0tQO0FrRHZ3S0s7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NsRDR3S1A7QWlEM3FLRDtFQUNFLGNBQUE7RUFDQSxtQkFBQTtDakQ2cUtEO0FpRDNxS0Q7RUFDRSxpQkFBQTtFQUNBLGlCQUFBO0NqRDZxS0Q7QW1EdnlLRDtFQUNFLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSw4QkFBQTtFQUNBLG1CQUFBO0U5QzBEQSxrREFBQTtFQUNRLDBDQUFBO0NMZ3ZLVDtBbUR0eUtEO0VBQ0UsY0FBQTtDbkR3eUtEO0FtRG55S0Q7RUFDRSxtQkFBQTtFQUNBLHFDQUFBO0V2QnBCQSw2QkFBQTtFQUNDLDRCQUFBO0M1QjB6S0Y7QW1EenlLRDtFQU1JLGVBQUE7Q25Ec3lLSDtBbURqeUtEO0VBQ0UsY0FBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0NuRG15S0Q7QW1EdnlLRDs7Ozs7RUFXSSxlQUFBO0NuRG15S0g7QW1EOXhLRDtFQUNFLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSwyQkFBQTtFdkJ4Q0EsZ0NBQUE7RUFDQywrQkFBQTtDNUJ5MEtGO0FtRHh4S0Q7O0VBR0ksaUJBQUE7Q25EeXhLSDtBbUQ1eEtEOztFQU1NLG9CQUFBO0VBQ0EsaUJBQUE7Q25EMHhLTDtBbUR0eEtHOztFQUVJLGNBQUE7RXZCdkVOLDZCQUFBO0VBQ0MsNEJBQUE7QzVCZzJLRjtBbURweEtHOztFQUVJLGlCQUFBO0V2QnZFTixnQ0FBQTtFQUNDLCtCQUFBO0M1QjgxS0Y7QW1EN3lLRDtFdkIxREUsMkJBQUE7RUFDQywwQkFBQTtDNUIwMktGO0FtRGh4S0Q7RUFFSSxvQkFBQTtDbkRpeEtIO0FtRDl3S0Q7RUFDRSxvQkFBQTtDbkRneEtEO0FtRHh3S0Q7OztFQUlJLGlCQUFBO0NuRHl3S0g7QW1EN3dLRDs7O0VBT00sbUJBQUE7RUFDQSxvQkFBQTtDbkQyd0tMO0FtRG54S0Q7O0V2QnpHRSw2QkFBQTtFQUNDLDRCQUFBO0M1Qmc0S0Y7QW1EeHhLRDs7OztFQW1CUSw0QkFBQTtFQUNBLDZCQUFBO0NuRDJ3S1A7QW1EL3hLRDs7Ozs7Ozs7RUF3QlUsNEJBQUE7Q25EaXhLVDtBbUR6eUtEOzs7Ozs7OztFQTRCVSw2QkFBQTtDbkR1eEtUO0FtRG56S0Q7O0V2QmpHRSxnQ0FBQTtFQUNDLCtCQUFBO0M1Qnc1S0Y7QW1EeHpLRDs7OztFQXlDUSwrQkFBQTtFQUNBLGdDQUFBO0NuRHF4S1A7QW1EL3pLRDs7Ozs7Ozs7RUE4Q1UsK0JBQUE7Q25EMnhLVDtBbUR6MEtEOzs7Ozs7OztFQWtEVSxnQ0FBQTtDbkRpeUtUO0FtRG4xS0Q7Ozs7RUEyREksMkJBQUE7Q25EOHhLSDtBbUR6MUtEOztFQStESSxjQUFBO0NuRDh4S0g7QW1ENzFLRDs7RUFtRUksVUFBQTtDbkQ4eEtIO0FtRGoyS0Q7Ozs7Ozs7Ozs7OztFQTBFVSxlQUFBO0NuRHF5S1Q7QW1ELzJLRDs7Ozs7Ozs7Ozs7O0VBOEVVLGdCQUFBO0NuRCt5S1Q7QW1ENzNLRDs7Ozs7Ozs7RUF1RlUsaUJBQUE7Q25EZ3pLVDtBbUR2NEtEOzs7Ozs7OztFQWdHVSxpQkFBQTtDbkRpektUO0FtRGo1S0Q7RUFzR0ksVUFBQTtFQUNBLGlCQUFBO0NuRDh5S0g7QW1EcHlLRDtFQUNFLG9CQUFBO0NuRHN5S0Q7QW1EdnlLRDtFQUtJLGlCQUFBO0VBQ0EsbUJBQUE7Q25EcXlLSDtBbUQzeUtEO0VBU00sZ0JBQUE7Q25EcXlLTDtBbUQ5eUtEO0VBY0ksaUJBQUE7Q25EbXlLSDtBbURqektEOztFQWtCTSwyQkFBQTtDbkRteUtMO0FtRHJ6S0Q7RUF1QkksY0FBQTtDbkRpeUtIO0FtRHh6S0Q7RUF5Qk0sOEJBQUE7Q25Ea3lLTDtBbUQzeEtEO0VDMVBFLG1CQUFBO0NwRHdoTEQ7QW9EdGhMQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtFQUNBLG1CQUFBO0NwRHdoTEg7QW9EM2hMQztFQU1JLHVCQUFBO0NwRHdoTEw7QW9EOWhMQztFQVNJLGVBQUE7RUFDQSwwQkFBQTtDcER3aExMO0FvRHJoTEM7RUFFSSwwQkFBQTtDcERzaExMO0FtRDF5S0Q7RUM3UEUsc0JBQUE7Q3BEMGlMRDtBb0R4aUxDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3BEMGlMSDtBb0Q3aUxDO0VBTUksMEJBQUE7Q3BEMGlMTDtBb0RoakxDO0VBU0ksZUFBQTtFQUNBLHVCQUFBO0NwRDBpTEw7QW9EdmlMQztFQUVJLDZCQUFBO0NwRHdpTEw7QW1EenpLRDtFQ2hRRSxzQkFBQTtDcEQ0akxEO0FvRDFqTEM7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDcEQ0akxIO0FvRC9qTEM7RUFNSSwwQkFBQTtDcEQ0akxMO0FvRGxrTEM7RUFTSSxlQUFBO0VBQ0EsMEJBQUE7Q3BENGpMTDtBb0R6akxDO0VBRUksNkJBQUE7Q3BEMGpMTDtBbUR4MEtEO0VDblFFLHNCQUFBO0NwRDhrTEQ7QW9ENWtMQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NwRDhrTEg7QW9EamxMQztFQU1JLDBCQUFBO0NwRDhrTEw7QW9EcGxMQztFQVNJLGVBQUE7RUFDQSwwQkFBQTtDcEQ4a0xMO0FvRDNrTEM7RUFFSSw2QkFBQTtDcEQ0a0xMO0FtRHYxS0Q7RUN0UUUsc0JBQUE7Q3BEZ21MRDtBb0Q5bExDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3BEZ21MSDtBb0RubUxDO0VBTUksMEJBQUE7Q3BEZ21MTDtBb0R0bUxDO0VBU0ksZUFBQTtFQUNBLDBCQUFBO0NwRGdtTEw7QW9EN2xMQztFQUVJLDZCQUFBO0NwRDhsTEw7QW1EdDJLRDtFQ3pRRSxzQkFBQTtDcERrbkxEO0FvRGhuTEM7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDcERrbkxIO0FvRHJuTEM7RUFNSSwwQkFBQTtDcERrbkxMO0FvRHhuTEM7RUFTSSxlQUFBO0VBQ0EsMEJBQUE7Q3BEa25MTDtBb0QvbUxDO0VBRUksNkJBQUE7Q3BEZ25MTDtBcURob0xEO0VBQ0UsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtDckRrb0xEO0FxRHZvTEQ7Ozs7O0VBWUksbUJBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFVBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLFVBQUE7Q3JEa29MSDtBcUQ3bkxEO0VBQ0UsdUJBQUE7Q3JEK25MRDtBcUQzbkxEO0VBQ0Usb0JBQUE7Q3JENm5MRDtBc0R4cExEO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtFQUNBLDBCQUFBO0VBQ0EsbUJBQUE7RWpEd0RBLHdEQUFBO0VBQ1EsZ0RBQUE7Q0xtbUxUO0FzRGxxTEQ7RUFTSSxtQkFBQTtFQUNBLGtDQUFBO0N0RDRwTEg7QXNEdnBMRDtFQUNFLGNBQUE7RUFDQSxtQkFBQTtDdER5cExEO0FzRHZwTEQ7RUFDRSxhQUFBO0VBQ0EsbUJBQUE7Q3REeXBMRDtBdUQvcUxEO0VBQ0UsYUFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtFQUNBLDBCQUFBO0VqQ1JBLGFBQUE7RUFHQSwwQkFBQTtDdEJ3ckxEO0F1RGhyTEM7O0VBRUUsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7RWpDZkYsYUFBQTtFQUdBLDBCQUFBO0N0QmdzTEQ7QXVENXFMQztFQUNFLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsVUFBQTtFQUNBLHlCQUFBO0N2RDhxTEg7QXdEbnNMRDtFQUNFLGlCQUFBO0N4RHFzTEQ7QXdEanNMRDtFQUNFLGNBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtFQUNBLGNBQUE7RUFDQSxrQ0FBQTtFQUlBLFdBQUE7Q3hEZ3NMRDtBd0Q3ckxDO0VuRCtHQSxzQ0FBQTtFQUNJLGtDQUFBO0VBQ0MsaUNBQUE7RUFDRyw4QkFBQTtFQWtFUixvREFBQTtFQUVLLDBDQUFBO0VBQ0csb0NBQUE7Q0xnaExUO0F3RG5zTEM7RW5EMkdBLG1DQUFBO0VBQ0ksK0JBQUE7RUFDQyw4QkFBQTtFQUNHLDJCQUFBO0NMMmxMVDtBd0R2c0xEO0VBQ0UsbUJBQUE7RUFDQSxpQkFBQTtDeER5c0xEO0F3RHJzTEQ7RUFDRSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0N4RHVzTEQ7QXdEbnNMRDtFQUNFLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLHFDQUFBO0VBQ0EsbUJBQUE7RW5EYUEsaURBQUE7RUFDUSx5Q0FBQTtFbURaUixxQ0FBQTtVQUFBLDZCQUFBO0VBRUEsV0FBQTtDeERxc0xEO0F3RGpzTEQ7RUFDRSxnQkFBQTtFQUNBLE9BQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLFFBQUE7RUFDQSxjQUFBO0VBQ0EsdUJBQUE7Q3hEbXNMRDtBd0Rqc0xDO0VsQ3JFQSxXQUFBO0VBR0EseUJBQUE7Q3RCdXdMRDtBd0Rwc0xDO0VsQ3RFQSxhQUFBO0VBR0EsMEJBQUE7Q3RCMndMRDtBd0Ruc0xEO0VBQ0UsY0FBQTtFQUNBLGlDQUFBO0N4RHFzTEQ7QXdEanNMRDtFQUNFLGlCQUFBO0N4RG1zTEQ7QXdEL3JMRDtFQUNFLFVBQUE7RUFDQSx3QkFBQTtDeERpc0xEO0F3RDVyTEQ7RUFDRSxtQkFBQTtFQUNBLGNBQUE7Q3hEOHJMRDtBd0QxckxEO0VBQ0UsY0FBQTtFQUNBLGtCQUFBO0VBQ0EsOEJBQUE7Q3hENHJMRDtBd0QvckxEO0VBUUksaUJBQUE7RUFDQSxpQkFBQTtDeEQwckxIO0F3RG5zTEQ7RUFhSSxrQkFBQTtDeER5ckxIO0F3RHRzTEQ7RUFpQkksZUFBQTtDeER3ckxIO0F3RG5yTEQ7RUFDRSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGlCQUFBO0N4RHFyTEQ7QXdEbnFMRDtFQVpFO0lBQ0UsYUFBQTtJQUNBLGtCQUFBO0d4RGtyTEQ7RXdEaHJMRDtJbkR2RUEsa0RBQUE7SUFDUSwwQ0FBQTtHTDB2TFA7RXdEL3FMRDtJQUFZLGFBQUE7R3hEa3JMWDtDQUNGO0F3RDdxTEQ7RUFGRTtJQUFZLGFBQUE7R3hEbXJMWDtDQUNGO0F5RGwwTEQ7RUFDRSxtQkFBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0VDUkEsNERBQUE7RUFFQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLGtCQUFBO0VESEEsZ0JBQUE7RW5DVkEsV0FBQTtFQUdBLHlCQUFBO0N0QnkxTEQ7QXlEOTBMQztFbkNkQSxhQUFBO0VBR0EsMEJBQUE7Q3RCNjFMRDtBeURqMUxDO0VBQVcsaUJBQUE7RUFBbUIsZUFBQTtDekRxMUwvQjtBeURwMUxDO0VBQVcsaUJBQUE7RUFBbUIsZUFBQTtDekR3MUwvQjtBeUR2MUxDO0VBQVcsZ0JBQUE7RUFBbUIsZUFBQTtDekQyMUwvQjtBeUQxMUxDO0VBQVcsa0JBQUE7RUFBbUIsZUFBQTtDekQ4MUwvQjtBeUQxMUxEO0VBQ0UsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q3pENDFMRDtBeUR4MUxEO0VBQ0UsbUJBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLDBCQUFBO0VBQ0Esb0JBQUE7Q3pEMDFMRDtBeUR0MUxDO0VBQ0UsVUFBQTtFQUNBLFVBQUE7RUFDQSxrQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7Q3pEdzFMSDtBeUR0MUxDO0VBQ0UsVUFBQTtFQUNBLFdBQUE7RUFDQSxvQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7Q3pEdzFMSDtBeUR0MUxDO0VBQ0UsVUFBQTtFQUNBLFVBQUE7RUFDQSxvQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7Q3pEdzFMSDtBeUR0MUxDO0VBQ0UsU0FBQTtFQUNBLFFBQUE7RUFDQSxpQkFBQTtFQUNBLDRCQUFBO0VBQ0EseUJBQUE7Q3pEdzFMSDtBeUR0MUxDO0VBQ0UsU0FBQTtFQUNBLFNBQUE7RUFDQSxpQkFBQTtFQUNBLDRCQUFBO0VBQ0Esd0JBQUE7Q3pEdzFMSDtBeUR0MUxDO0VBQ0UsT0FBQTtFQUNBLFVBQUE7RUFDQSxrQkFBQTtFQUNBLHdCQUFBO0VBQ0EsMEJBQUE7Q3pEdzFMSDtBeUR0MUxDO0VBQ0UsT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsMEJBQUE7Q3pEdzFMSDtBeUR0MUxDO0VBQ0UsT0FBQTtFQUNBLFVBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsMEJBQUE7Q3pEdzFMSDtBMkRyN0xEO0VBQ0UsbUJBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxhQUFBO0VEWEEsNERBQUE7RUFFQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLGtCQUFBO0VDQUEsZ0JBQUE7RUFFQSx1QkFBQTtFQUNBLHFDQUFBO1VBQUEsNkJBQUE7RUFDQSx1QkFBQTtFQUNBLHFDQUFBO0VBQ0EsbUJBQUE7RXREOENBLGtEQUFBO0VBQ1EsMENBQUE7Q0xxNUxUO0EyRGg4TEM7RUFBWSxrQkFBQTtDM0RtOExiO0EyRGw4TEM7RUFBWSxrQkFBQTtDM0RxOExiO0EyRHA4TEM7RUFBWSxpQkFBQTtDM0R1OExiO0EyRHQ4TEM7RUFBWSxtQkFBQTtDM0R5OExiO0EyRHQ4TEQ7RUFDRSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLDBCQUFBO0VBQ0EsaUNBQUE7RUFDQSwyQkFBQTtDM0R3OExEO0EyRHI4TEQ7RUFDRSxrQkFBQTtDM0R1OExEO0EyRC83TEM7O0VBRUUsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSwwQkFBQTtFQUNBLG9CQUFBO0MzRGk4TEg7QTJEOTdMRDtFQUNFLG1CQUFBO0MzRGc4TEQ7QTJEOTdMRDtFQUNFLG1CQUFBO0VBQ0EsWUFBQTtDM0RnOExEO0EyRDU3TEM7RUFDRSxVQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLDBCQUFBO0VBQ0Esc0NBQUE7RUFDQSxjQUFBO0MzRDg3TEg7QTJENzdMRztFQUNFLGFBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0MzRCs3TEw7QTJENTdMQztFQUNFLFNBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxxQkFBQTtFQUNBLDRCQUFBO0VBQ0Esd0NBQUE7QzNEODdMSDtBMkQ3N0xHO0VBQ0UsYUFBQTtFQUNBLFVBQUE7RUFDQSxjQUFBO0VBQ0EscUJBQUE7RUFDQSx5QkFBQTtDM0QrN0xMO0EyRDU3TEM7RUFDRSxVQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLDZCQUFBO0VBQ0EseUNBQUE7RUFDQSxXQUFBO0MzRDg3TEg7QTJENzdMRztFQUNFLGFBQUE7RUFDQSxTQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLDBCQUFBO0MzRCs3TEw7QTJEMzdMQztFQUNFLFNBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxzQkFBQTtFQUNBLDJCQUFBO0VBQ0EsdUNBQUE7QzNENjdMSDtBMkQ1N0xHO0VBQ0UsYUFBQTtFQUNBLFdBQUE7RUFDQSxzQkFBQTtFQUNBLHdCQUFBO0VBQ0EsY0FBQTtDM0Q4N0xMO0E0RHZqTUQ7RUFDRSxtQkFBQTtDNUR5ak1EO0E0RHRqTUQ7RUFDRSxtQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTtDNUR3ak1EO0E0RDNqTUQ7RUFNSSxjQUFBO0VBQ0EsbUJBQUE7RXZENktGLDBDQUFBO0VBQ0sscUNBQUE7RUFDRyxrQ0FBQTtDTDQ0TFQ7QTREbGtNRDs7RUFjTSxlQUFBO0M1RHdqTUw7QTREOWhNQztFQTRORjtJdkQzREUsdURBQUE7SUFFSyw2Q0FBQTtJQUNHLHVDQUFBO0lBN0pSLG9DQUFBO0lBRVEsNEJBQUE7SUErR1IsNEJBQUE7SUFFUSxvQkFBQTtHTGk3TFA7RTRENWpNRzs7SXZEbUhKLDJDQUFBO0lBQ1EsbUNBQUE7SXVEakhGLFFBQUE7RzVEK2pNTDtFNEQ3ak1HOztJdkQ4R0osNENBQUE7SUFDUSxvQ0FBQTtJdUQ1R0YsUUFBQTtHNURna01MO0U0RDlqTUc7OztJdkR5R0osd0NBQUE7SUFDUSxnQ0FBQTtJdUR0R0YsUUFBQTtHNURpa01MO0NBQ0Y7QTREdm1NRDs7O0VBNkNJLGVBQUE7QzVEK2pNSDtBNEQ1bU1EO0VBaURJLFFBQUE7QzVEOGpNSDtBNEQvbU1EOztFQXNESSxtQkFBQTtFQUNBLE9BQUE7RUFDQSxZQUFBO0M1RDZqTUg7QTREcm5NRDtFQTRESSxXQUFBO0M1RDRqTUg7QTREeG5NRDtFQStESSxZQUFBO0M1RDRqTUg7QTREM25NRDs7RUFtRUksUUFBQTtDNUQ0ak1IO0E0RC9uTUQ7RUF1RUksWUFBQTtDNUQyak1IO0E0RGxvTUQ7RUEwRUksV0FBQTtDNUQyak1IO0E0RG5qTUQ7RUFDRSxtQkFBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RXRDOUZBLGFBQUE7RUFHQSwwQkFBQTtFc0M2RkEsZ0JBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSwwQ0FBQTtFQUNBLG1DQUFBO0M1RHNqTUQ7QTREampNQztFZG5HRSxtR0FBQTtFQUNBLDhGQUFBO0VBQ0EscUhBQUE7RUFBQSwrRkFBQTtFQUNBLDRCQUFBO0VBQ0EsdUhBQUE7QzlDdXBNSDtBNERyak1DO0VBQ0UsV0FBQTtFQUNBLFNBQUE7RWR4R0EsbUdBQUE7RUFDQSw4RkFBQTtFQUNBLHFIQUFBO0VBQUEsK0ZBQUE7RUFDQSw0QkFBQTtFQUNBLHVIQUFBO0M5Q2dxTUg7QTREdmpNQzs7RUFFRSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0V0Q3ZIRixhQUFBO0VBR0EsMEJBQUE7Q3RCK3FNRDtBNER6bE1EOzs7O0VBdUNJLG1CQUFBO0VBQ0EsU0FBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0M1RHdqTUg7QTREbm1NRDs7RUErQ0ksVUFBQTtFQUNBLG1CQUFBO0M1RHdqTUg7QTREeG1NRDs7RUFvREksV0FBQTtFQUNBLG9CQUFBO0M1RHdqTUg7QTREN21NRDs7RUF5REksWUFBQTtFQUNBLGFBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7QzVEd2pNSDtBNERuak1HO0VBQ0UsaUJBQUE7QzVEcWpNTDtBNERqak1HO0VBQ0UsaUJBQUE7QzVEbWpNTDtBNER6aU1EO0VBQ0UsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7QzVEMmlNRDtBNERwak1EO0VBWUksc0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxvQkFBQTtFQUNBLHVCQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQVdBLDBCQUFBO0VBQ0EsbUNBQUE7QzVEaWlNSDtBNERoa01EO0VBa0NJLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLHVCQUFBO0M1RGlpTUg7QTREMWhNRDtFQUNFLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EscUJBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSwwQ0FBQTtDNUQ0aE1EO0E0RDNoTUM7RUFDRSxrQkFBQTtDNUQ2aE1IO0E0RHAvTEQ7RUFoQ0U7Ozs7SUFLSSxZQUFBO0lBQ0EsYUFBQTtJQUNBLGtCQUFBO0lBQ0EsZ0JBQUE7RzVEc2hNSDtFNEQ5aE1EOztJQVlJLG1CQUFBO0c1RHNoTUg7RTREbGlNRDs7SUFnQkksb0JBQUE7RzVEc2hNSDtFNERqaE1EO0lBQ0UsVUFBQTtJQUNBLFdBQUE7SUFDQSxxQkFBQTtHNURtaE1EO0U0RC9nTUQ7SUFDRSxhQUFBO0c1RGloTUQ7Q0FDRjtBNkRoeE1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUVFLGFBQUE7RUFDQSxlQUFBO0M3RGd6TUg7QTZEOXlNQzs7Ozs7Ozs7Ozs7Ozs7OztFQUNFLFlBQUE7QzdEK3pNSDtBaUN2ME1EO0U2QlJFLGVBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0M5RGsxTUQ7QWlDejBNRDtFQUNFLHdCQUFBO0NqQzIwTUQ7QWlDejBNRDtFQUNFLHVCQUFBO0NqQzIwTUQ7QWlDbjBNRDtFQUNFLHlCQUFBO0NqQ3EwTUQ7QWlDbjBNRDtFQUNFLDBCQUFBO0NqQ3EwTUQ7QWlDbjBNRDtFQUNFLG1CQUFBO0NqQ3EwTUQ7QWlDbjBNRDtFOEJ6QkUsWUFBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSw4QkFBQTtFQUNBLFVBQUE7Qy9EKzFNRDtBaUNqME1EO0VBQ0UseUJBQUE7Q2pDbTBNRDtBaUM1ek1EO0VBQ0UsZ0JBQUE7Q2pDOHpNRDtBZ0UvMU1EO0VBQ0Usb0JBQUE7Q2hFaTJNRDtBZ0UzMU1EOzs7O0VDZEUseUJBQUE7Q2pFKzJNRDtBZ0UxMU1EOzs7Ozs7Ozs7Ozs7RUFZRSx5QkFBQTtDaEU0MU1EO0FnRXIxTUQ7RUE2SUE7SUM3TEUsMEJBQUE7R2pFeTRNQztFaUV4NE1EO0lBQVUsMEJBQUE7R2pFMjRNVDtFaUUxNE1EO0lBQVUsOEJBQUE7R2pFNjRNVDtFaUU1NE1EOztJQUNVLCtCQUFBO0dqRSs0TVQ7Q0FDRjtBZ0UvMU1EO0VBd0lBO0lBMUlJLDBCQUFBO0doRXEyTUQ7Q0FDRjtBZ0UvMU1EO0VBbUlBO0lBcklJLDJCQUFBO0doRXEyTUQ7Q0FDRjtBZ0UvMU1EO0VBOEhBO0lBaElJLGlDQUFBO0doRXEyTUQ7Q0FDRjtBZ0U5MU1EO0VBd0hBO0lDN0xFLDBCQUFBO0dqRXU2TUM7RWlFdDZNRDtJQUFVLDBCQUFBO0dqRXk2TVQ7RWlFeDZNRDtJQUFVLDhCQUFBO0dqRTI2TVQ7RWlFMTZNRDs7SUFDVSwrQkFBQTtHakU2Nk1UO0NBQ0Y7QWdFeDJNRDtFQW1IQTtJQXJISSwwQkFBQTtHaEU4Mk1EO0NBQ0Y7QWdFeDJNRDtFQThHQTtJQWhISSwyQkFBQTtHaEU4Mk1EO0NBQ0Y7QWdFeDJNRDtFQXlHQTtJQTNHSSxpQ0FBQTtHaEU4Mk1EO0NBQ0Y7QWdFdjJNRDtFQW1HQTtJQzdMRSwwQkFBQTtHakVxOE1DO0VpRXA4TUQ7SUFBVSwwQkFBQTtHakV1OE1UO0VpRXQ4TUQ7SUFBVSw4QkFBQTtHakV5OE1UO0VpRXg4TUQ7O0lBQ1UsK0JBQUE7R2pFMjhNVDtDQUNGO0FnRWozTUQ7RUE4RkE7SUFoR0ksMEJBQUE7R2hFdTNNRDtDQUNGO0FnRWozTUQ7RUF5RkE7SUEzRkksMkJBQUE7R2hFdTNNRDtDQUNGO0FnRWozTUQ7RUFvRkE7SUF0RkksaUNBQUE7R2hFdTNNRDtDQUNGO0FnRWgzTUQ7RUE4RUE7SUM3TEUsMEJBQUE7R2pFbStNQztFaUVsK01EO0lBQVUsMEJBQUE7R2pFcStNVDtFaUVwK01EO0lBQVUsOEJBQUE7R2pFdStNVDtFaUV0K01EOztJQUNVLCtCQUFBO0dqRXkrTVQ7Q0FDRjtBZ0UxM01EO0VBeUVBO0lBM0VJLDBCQUFBO0doRWc0TUQ7Q0FDRjtBZ0UxM01EO0VBb0VBO0lBdEVJLDJCQUFBO0doRWc0TUQ7Q0FDRjtBZ0UxM01EO0VBK0RBO0lBakVJLGlDQUFBO0doRWc0TUQ7Q0FDRjtBZ0V6M01EO0VBeURBO0lDckxFLHlCQUFBO0dqRXkvTUM7Q0FDRjtBZ0V6M01EO0VBb0RBO0lDckxFLHlCQUFBO0dqRTgvTUM7Q0FDRjtBZ0V6M01EO0VBK0NBO0lDckxFLHlCQUFBO0dqRW1nTkM7Q0FDRjtBZ0V6M01EO0VBMENBO0lDckxFLHlCQUFBO0dqRXdnTkM7Q0FDRjtBZ0V0M01EO0VDbkpFLHlCQUFBO0NqRTRnTkQ7QWdFbjNNRDtFQTRCQTtJQzdMRSwwQkFBQTtHakV3aE5DO0VpRXZoTkQ7SUFBVSwwQkFBQTtHakUwaE5UO0VpRXpoTkQ7SUFBVSw4QkFBQTtHakU0aE5UO0VpRTNoTkQ7O0lBQ1UsK0JBQUE7R2pFOGhOVDtDQUNGO0FnRWo0TUQ7RUFDRSx5QkFBQTtDaEVtNE1EO0FnRTkzTUQ7RUFxQkE7SUF2QkksMEJBQUE7R2hFbzRNRDtDQUNGO0FnRWw0TUQ7RUFDRSx5QkFBQTtDaEVvNE1EO0FnRS8zTUQ7RUFjQTtJQWhCSSwyQkFBQTtHaEVxNE1EO0NBQ0Y7QWdFbjRNRDtFQUNFLHlCQUFBO0NoRXE0TUQ7QWdFaDRNRDtFQU9BO0lBVEksaUNBQUE7R2hFczRNRDtDQUNGO0FnRS8zTUQ7RUFDQTtJQ3JMRSx5QkFBQTtHakV1ak5DO0NBQ0YiLCJmaWxlIjoiYm9vdHN0cmFwLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQm9vdHN0cmFwIHYzLjMuNiAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKi9cbi8qISBub3JtYWxpemUuY3NzIHYzLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cbmh0bWwge1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbn1cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmF1ZGlvLFxuY2FudmFzLFxucHJvZ3Jlc3MsXG52aWRlbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xufVxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwO1xufVxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkO1xufVxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuZGZuIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmYwO1xuICBjb2xvcjogIzAwMDtcbn1cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5pbWcge1xuICBib3JkZXI6IDA7XG59XG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5maWd1cmUge1xuICBtYXJnaW46IDFlbSA0MHB4O1xufVxuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xufVxucHJlIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udDogaW5oZXJpdDtcbiAgbWFyZ2luOiAwO1xufVxuYnV0dG9uIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcbmlucHV0W3R5cGU9XCJyZXNldFwiXSxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiAwO1xufVxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbmxlZ2VuZCB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cbnRkLFxudGgge1xuICBwYWRkaW5nOiAwO1xufVxuLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xuQG1lZGlhIHByaW50IHtcbiAgKixcbiAgKjpiZWZvcmUsXG4gICo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICBhLFxuICBhOnZpc2l0ZWQge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG4gIGFbaHJlZl06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICB9XG4gIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XG4gIH1cbiAgYVtocmVmXj1cIiNcIl06YWZ0ZXIsXG4gIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIHRoZWFkIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XG4gIH1cbiAgdHIsXG4gIGltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbiAgcCxcbiAgaDIsXG4gIGgzIHtcbiAgICBvcnBoYW5zOiAzO1xuICAgIHdpZG93czogMztcbiAgfVxuICBoMixcbiAgaDMge1xuICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICB9XG4gIC5uYXZiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmJ0biA+IC5jYXJldCxcbiAgLmRyb3B1cCA+IC5idG4gPiAuY2FyZXQge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgfVxuICAubGFiZWwge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIH1cbiAgLnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7XG4gIH1cbiAgLnRhYmxlIHRkLFxuICAudGFibGUgdGgge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbiAgfVxuICAudGFibGUtYm9yZGVyZWQgdGgsXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICB9XG59XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIHNyYzogdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdCcpO1xuICBzcmM6IHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCB1cmwoJy4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcjZ2x5cGhpY29uc19oYWxmbGluZ3NyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtcbn1cbi5nbHlwaGljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cbi5nbHlwaGljb24tYXN0ZXJpc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDAwMmFcIjtcbn1cbi5nbHlwaGljb24tcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMDAyYlwiO1xufVxuLmdseXBoaWNvbi1ldXJvOmJlZm9yZSxcbi5nbHlwaGljb24tZXVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMGFjXCI7XG59XG4uZ2x5cGhpY29uLW1pbnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMjEyXCI7XG59XG4uZ2x5cGhpY29uLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyNjAxXCI7XG59XG4uZ2x5cGhpY29uLWVudmVsb3BlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyNzA5XCI7XG59XG4uZ2x5cGhpY29uLXBlbmNpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwZlwiO1xufVxuLmdseXBoaWNvbi1nbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwMVwiO1xufVxuLmdseXBoaWNvbi1tdXNpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwMlwiO1xufVxuLmdseXBoaWNvbi1zZWFyY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDNcIjtcbn1cbi5nbHlwaGljb24taGVhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDVcIjtcbn1cbi5nbHlwaGljb24tc3RhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwNlwiO1xufVxuLmdseXBoaWNvbi1zdGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA3XCI7XG59XG4uZ2x5cGhpY29uLXVzZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDhcIjtcbn1cbi5nbHlwaGljb24tZmlsbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwOVwiO1xufVxuLmdseXBoaWNvbi10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMFwiO1xufVxuLmdseXBoaWNvbi10aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMVwiO1xufVxuLmdseXBoaWNvbi10aC1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDEyXCI7XG59XG4uZ2x5cGhpY29uLW9rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDEzXCI7XG59XG4uZ2x5cGhpY29uLXJlbW92ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNFwiO1xufVxuLmdseXBoaWNvbi16b29tLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE1XCI7XG59XG4uZ2x5cGhpY29uLXpvb20tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE2XCI7XG59XG4uZ2x5cGhpY29uLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxN1wiO1xufVxuLmdseXBoaWNvbi1zaWduYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMThcIjtcbn1cbi5nbHlwaGljb24tY29nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE5XCI7XG59XG4uZ2x5cGhpY29uLXRyYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIwXCI7XG59XG4uZ2x5cGhpY29uLWhvbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjFcIjtcbn1cbi5nbHlwaGljb24tZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMlwiO1xufVxuLmdseXBoaWNvbi10aW1lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIzXCI7XG59XG4uZ2x5cGhpY29uLXJvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjRcIjtcbn1cbi5nbHlwaGljb24tZG93bmxvYWQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI1XCI7XG59XG4uZ2x5cGhpY29uLWRvd25sb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI2XCI7XG59XG4uZ2x5cGhpY29uLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyN1wiO1xufVxuLmdseXBoaWNvbi1pbmJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyOFwiO1xufVxuLmdseXBoaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyOVwiO1xufVxuLmdseXBoaWNvbi1yZXBlYXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzBcIjtcbn1cbi5nbHlwaGljb24tcmVmcmVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMVwiO1xufVxuLmdseXBoaWNvbi1saXN0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMlwiO1xufVxuLmdseXBoaWNvbi1sb2NrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMzXCI7XG59XG4uZ2x5cGhpY29uLWZsYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzRcIjtcbn1cbi5nbHlwaGljb24taGVhZHBob25lczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNVwiO1xufVxuLmdseXBoaWNvbi12b2x1bWUtb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM2XCI7XG59XG4uZ2x5cGhpY29uLXZvbHVtZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM3XCI7XG59XG4uZ2x5cGhpY29uLXZvbHVtZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzOFwiO1xufVxuLmdseXBoaWNvbi1xcmNvZGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzlcIjtcbn1cbi5nbHlwaGljb24tYmFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MFwiO1xufVxuLmdseXBoaWNvbi10YWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDFcIjtcbn1cbi5nbHlwaGljb24tdGFnczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MlwiO1xufVxuLmdseXBoaWNvbi1ib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQzXCI7XG59XG4uZ2x5cGhpY29uLWJvb2ttYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ0XCI7XG59XG4uZ2x5cGhpY29uLXByaW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ1XCI7XG59XG4uZ2x5cGhpY29uLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NlwiO1xufVxuLmdseXBoaWNvbi1mb250OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ3XCI7XG59XG4uZ2x5cGhpY29uLWJvbGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDhcIjtcbn1cbi5nbHlwaGljb24taXRhbGljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ5XCI7XG59XG4uZ2x5cGhpY29uLXRleHQtaGVpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUwXCI7XG59XG4uZ2x5cGhpY29uLXRleHQtd2lkdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTFcIjtcbn1cbi5nbHlwaGljb24tYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MlwiO1xufVxuLmdseXBoaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTNcIjtcbn1cbi5nbHlwaGljb24tYWxpZ24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTRcIjtcbn1cbi5nbHlwaGljb24tYWxpZ24tanVzdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NVwiO1xufVxuLmdseXBoaWNvbi1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU2XCI7XG59XG4uZ2x5cGhpY29uLWluZGVudC1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU3XCI7XG59XG4uZ2x5cGhpY29uLWluZGVudC1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1OFwiO1xufVxuLmdseXBoaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1OVwiO1xufVxuLmdseXBoaWNvbi1waWN0dXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDYwXCI7XG59XG4uZ2x5cGhpY29uLW1hcC1tYXJrZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjJcIjtcbn1cbi5nbHlwaGljb24tYWRqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDYzXCI7XG59XG4uZ2x5cGhpY29uLXRpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjRcIjtcbn1cbi5nbHlwaGljb24tZWRpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NVwiO1xufVxuLmdseXBoaWNvbi1zaGFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NlwiO1xufVxuLmdseXBoaWNvbi1jaGVjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2N1wiO1xufVxuLmdseXBoaWNvbi1tb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY4XCI7XG59XG4uZ2x5cGhpY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjlcIjtcbn1cbi5nbHlwaGljb24tZmFzdC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3MFwiO1xufVxuLmdseXBoaWNvbi1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3MVwiO1xufVxuLmdseXBoaWNvbi1wbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDcyXCI7XG59XG4uZ2x5cGhpY29uLXBhdXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDczXCI7XG59XG4uZ2x5cGhpY29uLXN0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzRcIjtcbn1cbi5nbHlwaGljb24tZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3NVwiO1xufVxuLmdseXBoaWNvbi1mYXN0LWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzZcIjtcbn1cbi5nbHlwaGljb24tc3RlcC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc3XCI7XG59XG4uZ2x5cGhpY29uLWVqZWN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc4XCI7XG59XG4uZ2x5cGhpY29uLWNoZXZyb24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3OVwiO1xufVxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgwXCI7XG59XG4uZ2x5cGhpY29uLXBsdXMtc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4MVwiO1xufVxuLmdseXBoaWNvbi1taW51cy1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgyXCI7XG59XG4uZ2x5cGhpY29uLXJlbW92ZS1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgzXCI7XG59XG4uZ2x5cGhpY29uLW9rLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODRcIjtcbn1cbi5nbHlwaGljb24tcXVlc3Rpb24tc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4NVwiO1xufVxuLmdseXBoaWNvbi1pbmZvLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODZcIjtcbn1cbi5nbHlwaGljb24tc2NyZWVuc2hvdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4N1wiO1xufVxuLmdseXBoaWNvbi1yZW1vdmUtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg4XCI7XG59XG4uZ2x5cGhpY29uLW9rLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OVwiO1xufVxuLmdseXBoaWNvbi1iYW4tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkwXCI7XG59XG4uZ2x5cGhpY29uLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTFcIjtcbn1cbi5nbHlwaGljb24tYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTJcIjtcbn1cbi5nbHlwaGljb24tYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTNcIjtcbn1cbi5nbHlwaGljb24tYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5NFwiO1xufVxuLmdseXBoaWNvbi1zaGFyZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTVcIjtcbn1cbi5nbHlwaGljb24tcmVzaXplLWZ1bGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTZcIjtcbn1cbi5nbHlwaGljb24tcmVzaXplLXNtYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDk3XCI7XG59XG4uZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDFcIjtcbn1cbi5nbHlwaGljb24tZ2lmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwMlwiO1xufVxuLmdseXBoaWNvbi1sZWFmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTAzXCI7XG59XG4uZ2x5cGhpY29uLWZpcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDRcIjtcbn1cbi5nbHlwaGljb24tZXllLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDVcIjtcbn1cbi5nbHlwaGljb24tZXllLWNsb3NlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA2XCI7XG59XG4uZ2x5cGhpY29uLXdhcm5pbmctc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwN1wiO1xufVxuLmdseXBoaWNvbi1wbGFuZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwOFwiO1xufVxuLmdseXBoaWNvbi1jYWxlbmRhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwOVwiO1xufVxuLmdseXBoaWNvbi1yYW5kb206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTBcIjtcbn1cbi5nbHlwaGljb24tY29tbWVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExMVwiO1xufVxuLmdseXBoaWNvbi1tYWduZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTJcIjtcbn1cbi5nbHlwaGljb24tY2hldnJvbi11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExM1wiO1xufVxuLmdseXBoaWNvbi1jaGV2cm9uLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTRcIjtcbn1cbi5nbHlwaGljb24tcmV0d2VldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExNVwiO1xufVxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE2XCI7XG59XG4uZ2x5cGhpY29uLWZvbGRlci1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExN1wiO1xufVxuLmdseXBoaWNvbi1mb2xkZXItb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExOFwiO1xufVxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTlcIjtcbn1cbi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjBcIjtcbn1cbi5nbHlwaGljb24taGRkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIxXCI7XG59XG4uZ2x5cGhpY29uLWJ1bGxob3JuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIyXCI7XG59XG4uZ2x5cGhpY29uLWJlbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjNcIjtcbn1cbi5nbHlwaGljb24tY2VydGlmaWNhdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjRcIjtcbn1cbi5nbHlwaGljb24tdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI1XCI7XG59XG4uZ2x5cGhpY29uLXRodW1icy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI2XCI7XG59XG4uZ2x5cGhpY29uLWhhbmQtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjdcIjtcbn1cbi5nbHlwaGljb24taGFuZC1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI4XCI7XG59XG4uZ2x5cGhpY29uLWhhbmQtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjlcIjtcbn1cbi5nbHlwaGljb24taGFuZC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMwXCI7XG59XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMVwiO1xufVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMlwiO1xufVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzNcIjtcbn1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzRcIjtcbn1cbi5nbHlwaGljb24tZ2xvYmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzVcIjtcbn1cbi5nbHlwaGljb24td3JlbmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM2XCI7XG59XG4uZ2x5cGhpY29uLXRhc2tzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM3XCI7XG59XG4uZ2x5cGhpY29uLWZpbHRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzOFwiO1xufVxuLmdseXBoaWNvbi1icmllZmNhc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzlcIjtcbn1cbi5nbHlwaGljb24tZnVsbHNjcmVlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MFwiO1xufVxuLmdseXBoaWNvbi1kYXNoYm9hcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDFcIjtcbn1cbi5nbHlwaGljb24tcGFwZXJjbGlwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQyXCI7XG59XG4uZ2x5cGhpY29uLWhlYXJ0LWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQzXCI7XG59XG4uZ2x5cGhpY29uLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDRcIjtcbn1cbi5nbHlwaGljb24tcGhvbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDVcIjtcbn1cbi5nbHlwaGljb24tcHVzaHBpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NlwiO1xufVxuLmdseXBoaWNvbi11c2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDhcIjtcbn1cbi5nbHlwaGljb24tZ2JwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ5XCI7XG59XG4uZ2x5cGhpY29uLXNvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTBcIjtcbn1cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1MVwiO1xufVxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1MlwiO1xufVxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUzXCI7XG59XG4uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXItYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU0XCI7XG59XG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1NVwiO1xufVxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU2XCI7XG59XG4uZ2x5cGhpY29uLXVuY2hlY2tlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1N1wiO1xufVxuLmdseXBoaWNvbi1leHBhbmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNThcIjtcbn1cbi5nbHlwaGljb24tY29sbGFwc2UtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1OVwiO1xufVxuLmdseXBoaWNvbi1jb2xsYXBzZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2MFwiO1xufVxuLmdseXBoaWNvbi1sb2ctaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjFcIjtcbn1cbi5nbHlwaGljb24tZmxhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjJcIjtcbn1cbi5nbHlwaGljb24tbG9nLW91dDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2M1wiO1xufVxuLmdseXBoaWNvbi1uZXctd2luZG93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY0XCI7XG59XG4uZ2x5cGhpY29uLXJlY29yZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NVwiO1xufVxuLmdseXBoaWNvbi1zYXZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY2XCI7XG59XG4uZ2x5cGhpY29uLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjdcIjtcbn1cbi5nbHlwaGljb24tc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjhcIjtcbn1cbi5nbHlwaGljb24taW1wb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY5XCI7XG59XG4uZ2x5cGhpY29uLWV4cG9ydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3MFwiO1xufVxuLmdseXBoaWNvbi1zZW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcxXCI7XG59XG4uZ2x5cGhpY29uLWZsb3BweS1kaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcyXCI7XG59XG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3M1wiO1xufVxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc0XCI7XG59XG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc1XCI7XG59XG4uZ2x5cGhpY29uLWZsb3BweS1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc2XCI7XG59XG4uZ2x5cGhpY29uLWNyZWRpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc3XCI7XG59XG4uZ2x5cGhpY29uLXRyYW5zZmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc4XCI7XG59XG4uZ2x5cGhpY29uLWN1dGxlcnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzlcIjtcbn1cbi5nbHlwaGljb24taGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgwXCI7XG59XG4uZ2x5cGhpY29uLWNvbXByZXNzZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODFcIjtcbn1cbi5nbHlwaGljb24tZWFycGhvbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODJcIjtcbn1cbi5nbHlwaGljb24tcGhvbmUtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgzXCI7XG59XG4uZ2x5cGhpY29uLXRvd2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg0XCI7XG59XG4uZ2x5cGhpY29uLXN0YXRzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg1XCI7XG59XG4uZ2x5cGhpY29uLXNkLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg2XCI7XG59XG4uZ2x5cGhpY29uLWhkLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg3XCI7XG59XG4uZ2x5cGhpY29uLXN1YnRpdGxlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4OFwiO1xufVxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODlcIjtcbn1cbi5nbHlwaGljb24tc291bmQtZG9sYnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTBcIjtcbn1cbi5nbHlwaGljb24tc291bmQtNS0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTkxXCI7XG59XG4uZ2x5cGhpY29uLXNvdW5kLTYtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MlwiO1xufVxuLmdseXBoaWNvbi1zb3VuZC03LTE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTNcIjtcbn1cbi5nbHlwaGljb24tY29weXJpZ2h0LW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTRcIjtcbn1cbi5nbHlwaGljb24tcmVnaXN0cmF0aW9uLW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTVcIjtcbn1cbi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTdcIjtcbn1cbi5nbHlwaGljb24tY2xvdWQtdXBsb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk4XCI7XG59XG4uZ2x5cGhpY29uLXRyZWUtY29uaWZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OVwiO1xufVxuLmdseXBoaWNvbi10cmVlLWRlY2lkdW91czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwMFwiO1xufVxuLmdseXBoaWNvbi1jZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwMVwiO1xufVxuLmdseXBoaWNvbi1zYXZlLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDJcIjtcbn1cbi5nbHlwaGljb24tb3Blbi1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAzXCI7XG59XG4uZ2x5cGhpY29uLWxldmVsLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA0XCI7XG59XG4uZ2x5cGhpY29uLWNvcHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDVcIjtcbn1cbi5nbHlwaGljb24tcGFzdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDZcIjtcbn1cbi5nbHlwaGljb24tYWxlcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDlcIjtcbn1cbi5nbHlwaGljb24tZXF1YWxpemVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEwXCI7XG59XG4uZ2x5cGhpY29uLWtpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTFcIjtcbn1cbi5nbHlwaGljb24tcXVlZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTJcIjtcbn1cbi5nbHlwaGljb24tcGF3bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxM1wiO1xufVxuLmdseXBoaWNvbi1iaXNob3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTRcIjtcbn1cbi5nbHlwaGljb24ta25pZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE1XCI7XG59XG4uZ2x5cGhpY29uLWJhYnktZm9ybXVsYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNlwiO1xufVxuLmdseXBoaWNvbi10ZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyNmZhXCI7XG59XG4uZ2x5cGhpY29uLWJsYWNrYm9hcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMThcIjtcbn1cbi5nbHlwaGljb24tYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE5XCI7XG59XG4uZ2x5cGhpY29uLWFwcGxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmOGZmXCI7XG59XG4uZ2x5cGhpY29uLWVyYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjIxXCI7XG59XG4uZ2x5cGhpY29uLWhvdXJnbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjMxYlwiO1xufVxuLmdseXBoaWNvbi1sYW1wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjIzXCI7XG59XG4uZ2x5cGhpY29uLWR1cGxpY2F0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyNFwiO1xufVxuLmdseXBoaWNvbi1waWdneS1iYW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI1XCI7XG59XG4uZ2x5cGhpY29uLXNjaXNzb3JzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI2XCI7XG59XG4uZ2x5cGhpY29uLWJpdGNvaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjdcIjtcbn1cbi5nbHlwaGljb24tYnRjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG4uZ2x5cGhpY29uLXhidDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyN1wiO1xufVxuLmdseXBoaWNvbi15ZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDAwYTVcIjtcbn1cbi5nbHlwaGljb24tanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7XG59XG4uZ2x5cGhpY29uLXJ1YmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMGJkXCI7XG59XG4uZ2x5cGhpY29uLXJ1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjBiZFwiO1xufVxuLmdseXBoaWNvbi1zY2FsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMFwiO1xufVxuLmdseXBoaWNvbi1pY2UtbG9sbHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzFcIjtcbn1cbi5nbHlwaGljb24taWNlLWxvbGx5LXRhc3RlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMlwiO1xufVxuLmdseXBoaWNvbi1lZHVjYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzNcIjtcbn1cbi5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzRcIjtcbn1cbi5nbHlwaGljb24tb3B0aW9uLXZlcnRpY2FsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM1XCI7XG59XG4uZ2x5cGhpY29uLW1lbnUtaGFtYnVyZ2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM2XCI7XG59XG4uZ2x5cGhpY29uLW1vZGFsLXdpbmRvdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzN1wiO1xufVxuLmdseXBoaWNvbi1vaWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzhcIjtcbn1cbi5nbHlwaGljb24tZ3JhaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzlcIjtcbn1cbi5nbHlwaGljb24tc3VuZ2xhc3NlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MFwiO1xufVxuLmdseXBoaWNvbi10ZXh0LXNpemU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDFcIjtcbn1cbi5nbHlwaGljb24tdGV4dC1jb2xvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MlwiO1xufVxuLmdseXBoaWNvbi10ZXh0LWJhY2tncm91bmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDNcIjtcbn1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXRvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0NFwiO1xufVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ1XCI7XG59XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ob3Jpem9udGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ2XCI7XG59XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ3XCI7XG59XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0OFwiO1xufVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDlcIjtcbn1cbi5nbHlwaGljb24tdHJpYW5nbGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTBcIjtcbn1cbi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MVwiO1xufVxuLmdseXBoaWNvbi10cmlhbmdsZS1ib3R0b206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTJcIjtcbn1cbi5nbHlwaGljb24tdHJpYW5nbGUtdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUzXCI7XG59XG4uZ2x5cGhpY29uLWNvbnNvbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTRcIjtcbn1cbi5nbHlwaGljb24tc3VwZXJzY3JpcHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTVcIjtcbn1cbi5nbHlwaGljb24tc3Vic2NyaXB0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU2XCI7XG59XG4uZ2x5cGhpY29uLW1lbnUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1N1wiO1xufVxuLmdseXBoaWNvbi1tZW51LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU4XCI7XG59XG4uZ2x5cGhpY29uLW1lbnUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1OVwiO1xufVxuLmdseXBoaWNvbi1tZW51LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjYwXCI7XG59XG4qIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4qOmJlZm9yZSxcbio6YWZ0ZXIge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbmJvZHkge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBjb2xvcjogIzMzMzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbmlucHV0LFxuYnV0dG9uLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cbmEge1xuICBjb2xvcjogIzMzN2FiNztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuYTpob3ZlcixcbmE6Zm9jdXMge1xuICBjb2xvcjogIzIzNTI3YztcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5hOmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG5maWd1cmUge1xuICBtYXJnaW46IDA7XG59XG5pbWcge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmltZy1yZXNwb25zaXZlLFxuLnRodW1ibmFpbCA+IGltZyxcbi50aHVtYm5haWwgYSA+IGltZyxcbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gaW1nLFxuLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBhID4gaW1nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmltZy1yb3VuZGVkIHtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuLmltZy10aHVtYm5haWwge1xuICBwYWRkaW5nOiA0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbn1cbi5pbWctY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuaHIge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlZWVlO1xufVxuLnNyLW9ubHkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IC0xcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIGJvcmRlcjogMDtcbn1cbi5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsXG4uc3Itb25seS1mb2N1c2FibGU6Zm9jdXMge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBjbGlwOiBhdXRvO1xufVxuW3JvbGU9XCJidXR0b25cIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYsXG4uaDEsXG4uaDIsXG4uaDMsXG4uaDQsXG4uaDUsXG4uaDYge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5oMSBzbWFsbCxcbmgyIHNtYWxsLFxuaDMgc21hbGwsXG5oNCBzbWFsbCxcbmg1IHNtYWxsLFxuaDYgc21hbGwsXG4uaDEgc21hbGwsXG4uaDIgc21hbGwsXG4uaDMgc21hbGwsXG4uaDQgc21hbGwsXG4uaDUgc21hbGwsXG4uaDYgc21hbGwsXG5oMSAuc21hbGwsXG5oMiAuc21hbGwsXG5oMyAuc21hbGwsXG5oNCAuc21hbGwsXG5oNSAuc21hbGwsXG5oNiAuc21hbGwsXG4uaDEgLnNtYWxsLFxuLmgyIC5zbWFsbCxcbi5oMyAuc21hbGwsXG4uaDQgLnNtYWxsLFxuLmg1IC5zbWFsbCxcbi5oNiAuc21hbGwge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICM3Nzc3Nzc7XG59XG5oMSxcbi5oMSxcbmgyLFxuLmgyLFxuaDMsXG4uaDMge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuaDEgc21hbGwsXG4uaDEgc21hbGwsXG5oMiBzbWFsbCxcbi5oMiBzbWFsbCxcbmgzIHNtYWxsLFxuLmgzIHNtYWxsLFxuaDEgLnNtYWxsLFxuLmgxIC5zbWFsbCxcbmgyIC5zbWFsbCxcbi5oMiAuc21hbGwsXG5oMyAuc21hbGwsXG4uaDMgLnNtYWxsIHtcbiAgZm9udC1zaXplOiA2NSU7XG59XG5oNCxcbi5oNCxcbmg1LFxuLmg1LFxuaDYsXG4uaDYge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuaDQgc21hbGwsXG4uaDQgc21hbGwsXG5oNSBzbWFsbCxcbi5oNSBzbWFsbCxcbmg2IHNtYWxsLFxuLmg2IHNtYWxsLFxuaDQgLnNtYWxsLFxuLmg0IC5zbWFsbCxcbmg1IC5zbWFsbCxcbi5oNSAuc21hbGwsXG5oNiAuc21hbGwsXG4uaDYgLnNtYWxsIHtcbiAgZm9udC1zaXplOiA3NSU7XG59XG5oMSxcbi5oMSB7XG4gIGZvbnQtc2l6ZTogMzZweDtcbn1cbmgyLFxuLmgyIHtcbiAgZm9udC1zaXplOiAzMHB4O1xufVxuaDMsXG4uaDMge1xuICBmb250LXNpemU6IDI0cHg7XG59XG5oNCxcbi5oNCB7XG4gIGZvbnQtc2l6ZTogMThweDtcbn1cbmg1LFxuLmg1IHtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuaDYsXG4uaDYge1xuICBmb250LXNpemU6IDEycHg7XG59XG5wIHtcbiAgbWFyZ2luOiAwIDAgMTBweDtcbn1cbi5sZWFkIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5sZWFkIHtcbiAgICBmb250LXNpemU6IDIxcHg7XG4gIH1cbn1cbnNtYWxsLFxuLnNtYWxsIHtcbiAgZm9udC1zaXplOiA4NSU7XG59XG5tYXJrLFxuLm1hcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuICBwYWRkaW5nOiAuMmVtO1xufVxuLnRleHQtbGVmdCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4udGV4dC1yaWdodCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLnRleHQtY2VudGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnRleHQtanVzdGlmeSB7XG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XG59XG4udGV4dC1ub3dyYXAge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnRleHQtbG93ZXJjYXNlIHtcbiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcbn1cbi50ZXh0LXVwcGVyY2FzZSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG4udGV4dC1jYXBpdGFsaXplIHtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG59XG4udGV4dC1tdXRlZCB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLnRleHQtcHJpbWFyeSB7XG4gIGNvbG9yOiAjMzM3YWI3O1xufVxuYS50ZXh0LXByaW1hcnk6aG92ZXIsXG5hLnRleHQtcHJpbWFyeTpmb2N1cyB7XG4gIGNvbG9yOiAjMjg2MDkwO1xufVxuLnRleHQtc3VjY2VzcyB7XG4gIGNvbG9yOiAjM2M3NjNkO1xufVxuYS50ZXh0LXN1Y2Nlc3M6aG92ZXIsXG5hLnRleHQtc3VjY2Vzczpmb2N1cyB7XG4gIGNvbG9yOiAjMmI1NDJjO1xufVxuLnRleHQtaW5mbyB7XG4gIGNvbG9yOiAjMzE3MDhmO1xufVxuYS50ZXh0LWluZm86aG92ZXIsXG5hLnRleHQtaW5mbzpmb2N1cyB7XG4gIGNvbG9yOiAjMjQ1MjY5O1xufVxuLnRleHQtd2FybmluZyB7XG4gIGNvbG9yOiAjOGE2ZDNiO1xufVxuYS50ZXh0LXdhcm5pbmc6aG92ZXIsXG5hLnRleHQtd2FybmluZzpmb2N1cyB7XG4gIGNvbG9yOiAjNjY1MTJjO1xufVxuLnRleHQtZGFuZ2VyIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG59XG5hLnRleHQtZGFuZ2VyOmhvdmVyLFxuYS50ZXh0LWRhbmdlcjpmb2N1cyB7XG4gIGNvbG9yOiAjODQzNTM0O1xufVxuLmJnLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbn1cbmEuYmctcHJpbWFyeTpob3ZlcixcbmEuYmctcHJpbWFyeTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyODYwOTA7XG59XG4uYmctc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7XG59XG5hLmJnLXN1Y2Nlc3M6aG92ZXIsXG5hLmJnLXN1Y2Nlc3M6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzFlMmIzO1xufVxuLmJnLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xufVxuYS5iZy1pbmZvOmhvdmVyLFxuYS5iZy1pbmZvOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmZDllZTtcbn1cbi5iZy13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbn1cbmEuYmctd2FybmluZzpob3ZlcixcbmEuYmctd2FybmluZzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2VjYjU7XG59XG4uYmctZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbn1cbmEuYmctZGFuZ2VyOmhvdmVyLFxuYS5iZy1kYW5nZXI6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTRiOWI5O1xufVxuLnBhZ2UtaGVhZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDlweDtcbiAgbWFyZ2luOiA0MHB4IDAgMjBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWVlZWU7XG59XG51bCxcbm9sIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbnVsIHVsLFxub2wgdWwsXG51bCBvbCxcbm9sIG9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5saXN0LXVuc3R5bGVkIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuLmxpc3QtaW5saW5lIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW4tbGVmdDogLTVweDtcbn1cbi5saXN0LWlubGluZSA+IGxpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgcGFkZGluZy1yaWdodDogNXB4O1xufVxuZGwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuZHQsXG5kZCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xufVxuZHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmRkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmRsLWhvcml6b250YWwgZHQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiAxNjBweDtcbiAgICBjbGVhcjogbGVmdDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbiAgLmRsLWhvcml6b250YWwgZGQge1xuICAgIG1hcmdpbi1sZWZ0OiAxODBweDtcbiAgfVxufVxuYWJiclt0aXRsZV0sXG5hYmJyW2RhdGEtb3JpZ2luYWwtdGl0bGVdIHtcbiAgY3Vyc29yOiBoZWxwO1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICM3Nzc3Nzc7XG59XG4uaW5pdGlhbGlzbSB7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuYmxvY2txdW90ZSB7XG4gIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgbWFyZ2luOiAwIDAgMjBweDtcbiAgZm9udC1zaXplOiAxNy41cHg7XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2VlZWVlZTtcbn1cbmJsb2NrcXVvdGUgcDpsYXN0LWNoaWxkLFxuYmxvY2txdW90ZSB1bDpsYXN0LWNoaWxkLFxuYmxvY2txdW90ZSBvbDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbmJsb2NrcXVvdGUgZm9vdGVyLFxuYmxvY2txdW90ZSBzbWFsbCxcbmJsb2NrcXVvdGUgLnNtYWxsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgY29sb3I6ICM3Nzc3Nzc7XG59XG5ibG9ja3F1b3RlIGZvb3RlcjpiZWZvcmUsXG5ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUgLnNtYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMTQgXFwwMEEwJztcbn1cbi5ibG9ja3F1b3RlLXJldmVyc2UsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICNlZWVlZWU7XG4gIGJvcmRlci1sZWZ0OiAwO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5ibG9ja3F1b3RlLXJldmVyc2UgZm9vdGVyOmJlZm9yZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBmb290ZXI6YmVmb3JlLFxuLmJsb2NrcXVvdGUtcmV2ZXJzZSBzbWFsbDpiZWZvcmUsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YmVmb3JlLFxuLmJsb2NrcXVvdGUtcmV2ZXJzZSAuc21hbGw6YmVmb3JlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IC5zbWFsbDpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbn1cbi5ibG9ja3F1b3RlLXJldmVyc2UgZm9vdGVyOmFmdGVyLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjphZnRlcixcbi5ibG9ja3F1b3RlLXJldmVyc2Ugc21hbGw6YWZ0ZXIsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXIsXG4uYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDphZnRlcixcbmJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YWZ0ZXIge1xuICBjb250ZW50OiAnXFwwMEEwIFxcMjAxNCc7XG59XG5hZGRyZXNzIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mztcbn1cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbn1cbmNvZGUge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICNjNzI1NGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWYyZjQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbmtiZCB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxua2JkIGtiZCB7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5wcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogOS41cHg7XG4gIG1hcmdpbjogMCAwIDEwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBjb2xvcjogIzMzMzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxucHJlIGNvZGUge1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLnByZS1zY3JvbGxhYmxlIHtcbiAgbWF4LWhlaWdodDogMzQwcHg7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cbi5jb250YWluZXIge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDc1MHB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDk3MHB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiAxMTcwcHg7XG4gIH1cbn1cbi5jb250YWluZXItZmx1aWQge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG59XG4ucm93IHtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xufVxuLmNvbC14cy0xLCAuY29sLXNtLTEsIC5jb2wtbWQtMSwgLmNvbC1sZy0xLCAuY29sLXhzLTIsIC5jb2wtc20tMiwgLmNvbC1tZC0yLCAuY29sLWxnLTIsIC5jb2wteHMtMywgLmNvbC1zbS0zLCAuY29sLW1kLTMsIC5jb2wtbGctMywgLmNvbC14cy00LCAuY29sLXNtLTQsIC5jb2wtbWQtNCwgLmNvbC1sZy00LCAuY29sLXhzLTUsIC5jb2wtc20tNSwgLmNvbC1tZC01LCAuY29sLWxnLTUsIC5jb2wteHMtNiwgLmNvbC1zbS02LCAuY29sLW1kLTYsIC5jb2wtbGctNiwgLmNvbC14cy03LCAuY29sLXNtLTcsIC5jb2wtbWQtNywgLmNvbC1sZy03LCAuY29sLXhzLTgsIC5jb2wtc20tOCwgLmNvbC1tZC04LCAuY29sLWxnLTgsIC5jb2wteHMtOSwgLmNvbC1zbS05LCAuY29sLW1kLTksIC5jb2wtbGctOSwgLmNvbC14cy0xMCwgLmNvbC1zbS0xMCwgLmNvbC1tZC0xMCwgLmNvbC1sZy0xMCwgLmNvbC14cy0xMSwgLmNvbC1zbS0xMSwgLmNvbC1tZC0xMSwgLmNvbC1sZy0xMSwgLmNvbC14cy0xMiwgLmNvbC1zbS0xMiwgLmNvbC1tZC0xMiwgLmNvbC1sZy0xMiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG59XG4uY29sLXhzLTEsIC5jb2wteHMtMiwgLmNvbC14cy0zLCAuY29sLXhzLTQsIC5jb2wteHMtNSwgLmNvbC14cy02LCAuY29sLXhzLTcsIC5jb2wteHMtOCwgLmNvbC14cy05LCAuY29sLXhzLTEwLCAuY29sLXhzLTExLCAuY29sLXhzLTEyIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uY29sLXhzLTEyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY29sLXhzLTExIHtcbiAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtMTAge1xuICB3aWR0aDogODMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy05IHtcbiAgd2lkdGg6IDc1JTtcbn1cbi5jb2wteHMtOCB7XG4gIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG59XG4uY29sLXhzLTcge1xuICB3aWR0aDogNTguMzMzMzMzMzMlO1xufVxuLmNvbC14cy02IHtcbiAgd2lkdGg6IDUwJTtcbn1cbi5jb2wteHMtNSB7XG4gIHdpZHRoOiA0MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLTQge1xuICB3aWR0aDogMzMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy0zIHtcbiAgd2lkdGg6IDI1JTtcbn1cbi5jb2wteHMtMiB7XG4gIHdpZHRoOiAxNi42NjY2NjY2NyU7XG59XG4uY29sLXhzLTEge1xuICB3aWR0aDogOC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1bGwtMTIge1xuICByaWdodDogMTAwJTtcbn1cbi5jb2wteHMtcHVsbC0xMSB7XG4gIHJpZ2h0OiA5MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1bGwtMTAge1xuICByaWdodDogODMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdWxsLTkge1xuICByaWdodDogNzUlO1xufVxuLmNvbC14cy1wdWxsLTgge1xuICByaWdodDogNjYuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdWxsLTcge1xuICByaWdodDogNTguMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdWxsLTYge1xuICByaWdodDogNTAlO1xufVxuLmNvbC14cy1wdWxsLTUge1xuICByaWdodDogNDEuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdWxsLTQge1xuICByaWdodDogMzMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdWxsLTMge1xuICByaWdodDogMjUlO1xufVxuLmNvbC14cy1wdWxsLTIge1xuICByaWdodDogMTYuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdWxsLTEge1xuICByaWdodDogOC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1bGwtMCB7XG4gIHJpZ2h0OiBhdXRvO1xufVxuLmNvbC14cy1wdXNoLTEyIHtcbiAgbGVmdDogMTAwJTtcbn1cbi5jb2wteHMtcHVzaC0xMSB7XG4gIGxlZnQ6IDkxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVzaC0xMCB7XG4gIGxlZnQ6IDgzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVzaC05IHtcbiAgbGVmdDogNzUlO1xufVxuLmNvbC14cy1wdXNoLTgge1xuICBsZWZ0OiA2Ni42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1c2gtNyB7XG4gIGxlZnQ6IDU4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVzaC02IHtcbiAgbGVmdDogNTAlO1xufVxuLmNvbC14cy1wdXNoLTUge1xuICBsZWZ0OiA0MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1c2gtNCB7XG4gIGxlZnQ6IDMzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVzaC0zIHtcbiAgbGVmdDogMjUlO1xufVxuLmNvbC14cy1wdXNoLTIge1xuICBsZWZ0OiAxNi42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1c2gtMSB7XG4gIGxlZnQ6IDguMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdXNoLTAge1xuICBsZWZ0OiBhdXRvO1xufVxuLmNvbC14cy1vZmZzZXQtMTIge1xuICBtYXJnaW4tbGVmdDogMTAwJTtcbn1cbi5jb2wteHMtb2Zmc2V0LTExIHtcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtb2Zmc2V0LTEwIHtcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtb2Zmc2V0LTkge1xuICBtYXJnaW4tbGVmdDogNzUlO1xufVxuLmNvbC14cy1vZmZzZXQtOCB7XG4gIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NyU7XG59XG4uY29sLXhzLW9mZnNldC03IHtcbiAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtb2Zmc2V0LTYge1xuICBtYXJnaW4tbGVmdDogNTAlO1xufVxuLmNvbC14cy1vZmZzZXQtNSB7XG4gIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLW9mZnNldC00IHtcbiAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtb2Zmc2V0LTMge1xuICBtYXJnaW4tbGVmdDogMjUlO1xufVxuLmNvbC14cy1vZmZzZXQtMiB7XG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NyU7XG59XG4uY29sLXhzLW9mZnNldC0xIHtcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMlO1xufVxuLmNvbC14cy1vZmZzZXQtMCB7XG4gIG1hcmdpbi1sZWZ0OiAwJTtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29sLXNtLTEsIC5jb2wtc20tMiwgLmNvbC1zbS0zLCAuY29sLXNtLTQsIC5jb2wtc20tNSwgLmNvbC1zbS02LCAuY29sLXNtLTcsIC5jb2wtc20tOCwgLmNvbC1zbS05LCAuY29sLXNtLTEwLCAuY29sLXNtLTExLCAuY29sLXNtLTEyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICAuY29sLXNtLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLXNtLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS05IHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG4gIC5jb2wtc20tOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtc20tNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS0zIHtcbiAgICB3aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtc20tMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICB9XG4gIC5jb2wtc20tcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTAge1xuICAgIHJpZ2h0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTkge1xuICAgIHJpZ2h0OiA3NSU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTgge1xuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTUge1xuICAgIHJpZ2h0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTQge1xuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTMge1xuICAgIHJpZ2h0OiAyNSU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTEge1xuICAgIHJpZ2h0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMCB7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xMCB7XG4gICAgbGVmdDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVzaC05IHtcbiAgICBsZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTgge1xuICAgIGxlZnQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNyB7XG4gICAgbGVmdDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVzaC02IHtcbiAgICBsZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTUge1xuICAgIGxlZnQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNCB7XG4gICAgbGVmdDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMSB7XG4gICAgbGVmdDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTExIHtcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTkge1xuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtOCB7XG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC03IHtcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmNvbC1tZC0xLCAuY29sLW1kLTIsIC5jb2wtbWQtMywgLmNvbC1tZC00LCAuY29sLW1kLTUsIC5jb2wtbWQtNiwgLmNvbC1tZC03LCAuY29sLW1kLTgsIC5jb2wtbWQtOSwgLmNvbC1tZC0xMCwgLmNvbC1tZC0xMSwgLmNvbC1tZC0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLmNvbC1tZC0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC1tZC0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLW1kLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLW1kLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLW1kLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTEyIHtcbiAgICByaWdodDogMTAwJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMTEge1xuICAgIHJpZ2h0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTEwIHtcbiAgICByaWdodDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC05IHtcbiAgICByaWdodDogNzUlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC04IHtcbiAgICByaWdodDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC03IHtcbiAgICByaWdodDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC02IHtcbiAgICByaWdodDogNTAlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC00IHtcbiAgICByaWdodDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0zIHtcbiAgICByaWdodDogMjUlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0yIHtcbiAgICByaWdodDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xIHtcbiAgICByaWdodDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0xMiB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMTEge1xuICAgIGxlZnQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtOSB7XG4gICAgbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC04IHtcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTcge1xuICAgIGxlZnQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMyB7XG4gICAgbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0yIHtcbiAgICBsZWZ0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0wIHtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTEyIHtcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuY29sLWxnLTEsIC5jb2wtbGctMiwgLmNvbC1sZy0zLCAuY29sLWxnLTQsIC5jb2wtbGctNSwgLmNvbC1sZy02LCAuY29sLWxnLTcsIC5jb2wtbGctOCwgLmNvbC1sZy05LCAuY29sLWxnLTEwLCAuY29sLWxnLTExLCAuY29sLWxnLTEyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICAuY29sLWxnLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLWxnLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy05IHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG4gIC5jb2wtbGctOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbGctNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy0zIHtcbiAgICB3aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtbGctMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMTIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMTAge1xuICAgIHJpZ2h0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTkge1xuICAgIHJpZ2h0OiA3NSU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTgge1xuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTUge1xuICAgIHJpZ2h0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTQge1xuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTMge1xuICAgIHJpZ2h0OiAyNSU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTEge1xuICAgIHJpZ2h0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMCB7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbGctcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVzaC0xMCB7XG4gICAgbGVmdDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC05IHtcbiAgICBsZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTgge1xuICAgIGxlZnQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtNyB7XG4gICAgbGVmdDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC02IHtcbiAgICBsZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTUge1xuICAgIGxlZnQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtNCB7XG4gICAgbGVmdDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMSB7XG4gICAgbGVmdDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTExIHtcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTkge1xuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtOCB7XG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC03IHtcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xuICB9XG59XG50YWJsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuY2FwdGlvbiB7XG4gIHBhZGRpbmctdG9wOiA4cHg7XG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gIGNvbG9yOiAjNzc3Nzc3O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxudGgge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLnRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIHBhZGRpbmc6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xufVxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoIHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7XG59XG4udGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4udGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4udGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4udGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQge1xuICBib3JkZXItdG9wOiAwO1xufVxuLnRhYmxlID4gdGJvZHkgKyB0Ym9keSB7XG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGRkO1xufVxuLnRhYmxlIC50YWJsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4udGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Zm9vdCA+IHRyID4gdGgsXG4udGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0ZCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Zm9vdCA+IHRyID4gdGQge1xuICBwYWRkaW5nOiA1cHg7XG59XG4udGFibGUtYm9yZGVyZWQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xufVxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkLFxuLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cbi50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aCxcbi50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZCB7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcbn1cbi50YWJsZS1zdHJpcGVkID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcbn1cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxudGFibGUgY29sW2NsYXNzKj1cImNvbC1cIl0ge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogdGFibGUtY29sdW1uO1xufVxudGFibGUgdGRbY2xhc3MqPVwiY29sLVwiXSxcbnRhYmxlIHRoW2NsYXNzKj1cImNvbC1cIl0ge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbn1cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5hY3RpdmUsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmFjdGl2ZSxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5hY3RpdmUsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguYWN0aXZlLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLmFjdGl2ZSxcbi50YWJsZSA+IHRoZWFkID4gdHIuYWN0aXZlID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5hY3RpdmUgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuYWN0aXZlID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5hY3RpdmUgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmFjdGl2ZTpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuYWN0aXZlOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLmFjdGl2ZSxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuYWN0aXZlOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlOGU4O1xufVxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLnN1Y2Nlc3MsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuc3VjY2Vzcyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5zdWNjZXNzLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLnN1Y2Nlc3MsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguc3VjY2Vzcyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5zdWNjZXNzLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5zdWNjZXNzID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLnN1Y2Nlc3MgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIuc3VjY2VzcyA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5zdWNjZXNzID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyLnN1Y2Nlc3MgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIuc3VjY2VzcyA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbn1cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5zdWNjZXNzOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLnN1Y2Nlc3M6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuc3VjY2Vzcyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuc3VjY2Vzczpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZTljNjtcbn1cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5pbmZvLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLmluZm8sXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuaW5mbyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5pbmZvLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmluZm8sXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGguaW5mbyxcbi50YWJsZSA+IHRoZWFkID4gdHIuaW5mbyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuaW5mbyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG59XG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuaW5mbzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5pbmZvOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLmluZm8sXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmluZm86aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjNGUzZjM7XG59XG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQud2FybmluZyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLndhcm5pbmcsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGgud2FybmluZyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC53YXJuaW5nLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLndhcm5pbmcsXG4udGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xufVxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLndhcm5pbmc6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGgud2FybmluZzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIud2FybmluZzpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC53YXJuaW5nLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci53YXJuaW5nOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmMmNjO1xufVxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLmRhbmdlcixcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXIsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuZGFuZ2VyLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLmRhbmdlcixcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5kYW5nZXIsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGguZGFuZ2VyLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5kYW5nZXIgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmRhbmdlciA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5kYW5nZXIgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmRhbmdlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbn1cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXI6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguZGFuZ2VyOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuZGFuZ2VyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYmNjY2M7XG59XG4udGFibGUtcmVzcG9uc2l2ZSB7XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIG1pbi1oZWlnaHQ6IDAuMDElO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnRhYmxlLXJlc3BvbnNpdmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogLW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0aGVhZCA+IHRyID4gdGgsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0aGVhZCA+IHRyID4gdGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRmb290ID4gdHIgPiB0ZCB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCB7XG4gICAgYm9yZGVyOiAwO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRoLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRoLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRkIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG59XG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyOiAwO1xuICBtaW4td2lkdGg6IDA7XG59XG5sZWdlbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1O1xufVxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbmlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIG1hcmdpbjogNHB4IDAgMDtcbiAgbWFyZ2luLXRvcDogMXB4IFxcOTtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cbmlucHV0W3R5cGU9XCJmaWxlXCJdIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5pbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG59XG5zZWxlY3RbbXVsdGlwbGVdLFxuc2VsZWN0W3NpemVdIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuaW5wdXRbdHlwZT1cImZpbGVcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Zm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cbm91dHB1dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogN3B4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBjb2xvcjogIzU1NTU1NTtcbn1cbi5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzRweDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIGNvbG9yOiAjNTU1NTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1cztcbiAgLW8tdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1cztcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1cztcbn1cbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICM2NmFmZTk7XG4gIG91dGxpbmU6IDA7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA4cHggcmdiYSgxMDIsIDE3NSwgMjMzLCAwLjYpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwgMCAwIDhweCByZ2JhKDEwMiwgMTc1LCAyMzMsIDAuNik7XG59XG4uZm9ybS1jb250cm9sOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIG9wYWNpdHk6IDE7XG59XG4uZm9ybS1jb250cm9sOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuLmZvcm0tY29udHJvbDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuLmZvcm0tY29udHJvbDo6LW1zLWV4cGFuZCB7XG4gIGJvcmRlcjogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4uZm9ybS1jb250cm9sW2Rpc2FibGVkXSxcbi5mb3JtLWNvbnRyb2xbcmVhZG9ubHldLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICBvcGFjaXR5OiAxO1xufVxuLmZvcm0tY29udHJvbFtkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmZvcm0tY29udHJvbCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG50ZXh0YXJlYS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMCkge1xuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5mb3JtLWNvbnRyb2wsXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmZvcm0tY29udHJvbCxcbiAgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmZvcm0tY29udHJvbCxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmZvcm0tY29udHJvbCB7XG4gICAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIH1cbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0uaW5wdXQtc20sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LXNtLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5wdXQtc20sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXS5pbnB1dC1zbSxcbiAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9XCJkYXRlXCJdLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPVwibW9udGhcIl0ge1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICB9XG4gIGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LWxnLFxuICBpbnB1dFt0eXBlPVwidGltZVwiXS5pbnB1dC1sZyxcbiAgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmlucHV0LWxnLFxuICBpbnB1dFt0eXBlPVwibW9udGhcIl0uaW5wdXQtbGcsXG4gIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICBsaW5lLWhlaWdodDogNDZweDtcbiAgfVxufVxuLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi5yYWRpbyBsYWJlbCxcbi5jaGVja2JveCBsYWJlbCB7XG4gIG1pbi1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7XG59XG4ucmFkaW8gKyAucmFkaW8sXG4uY2hlY2tib3ggKyAuY2hlY2tib3gge1xuICBtYXJnaW4tdG9wOiAtNXB4O1xufVxuLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucmFkaW8taW5saW5lICsgLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUgKyAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5pbnB1dFt0eXBlPVwicmFkaW9cIl1bZGlzYWJsZWRdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXS5kaXNhYmxlZCxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5maWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5yYWRpby1pbmxpbmUuZGlzYWJsZWQsXG4uY2hlY2tib3gtaW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5yYWRpby1pbmxpbmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94LWlubGluZSB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ucmFkaW8uZGlzYWJsZWQgbGFiZWwsXG4uY2hlY2tib3guZGlzYWJsZWQgbGFiZWwsXG5maWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVsLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveCBsYWJlbCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIHBhZGRpbmctdG9wOiA3cHg7XG4gIHBhZGRpbmctYm90dG9tOiA3cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1pbi1oZWlnaHQ6IDM0cHg7XG59XG4uZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1sZyxcbi5mb3JtLWNvbnRyb2wtc3RhdGljLmlucHV0LXNtIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLmlucHV0LXNtIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5zZWxlY3QuaW5wdXQtc20ge1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxudGV4dGFyZWEuaW5wdXQtc20sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LXNtIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLmZvcm0tZ3JvdXAtc20gc2VsZWN0LmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG4uZm9ybS1ncm91cC1zbSB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uZm9ybS1ncm91cC1zbSBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBtaW4taGVpZ2h0OiAzMnB4O1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xufVxuLmlucHV0LWxnIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuc2VsZWN0LmlucHV0LWxnIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cbnRleHRhcmVhLmlucHV0LWxnLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1sZyB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4uZm9ybS1ncm91cC1sZyBzZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cbi5mb3JtLWdyb3VwLWxnIHRleHRhcmVhLmZvcm0tY29udHJvbCxcbi5mb3JtLWdyb3VwLWxnIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIG1pbi1oZWlnaHQ6IDM4cHg7XG4gIHBhZGRpbmc6IDExcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xufVxuLmhhcy1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbCB7XG4gIHBhZGRpbmctcmlnaHQ6IDQyLjVweDtcbn1cbi5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHotaW5kZXg6IDI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMzRweDtcbiAgaGVpZ2h0OiAzNHB4O1xuICBsaW5lLWhlaWdodDogMzRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogNDZweDtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtc20gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogMzBweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbn1cbi5oYXMtc3VjY2VzcyAuaGVscC1ibG9jayxcbi5oYXMtc3VjY2VzcyAuY29udHJvbC1sYWJlbCxcbi5oYXMtc3VjY2VzcyAucmFkaW8sXG4uaGFzLXN1Y2Nlc3MgLmNoZWNrYm94LFxuLmhhcy1zdWNjZXNzIC5yYWRpby1pbmxpbmUsXG4uaGFzLXN1Y2Nlc3MgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtc3VjY2Vzcy5yYWRpbyBsYWJlbCxcbi5oYXMtc3VjY2Vzcy5jaGVja2JveCBsYWJlbCxcbi5oYXMtc3VjY2Vzcy5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLXN1Y2Nlc3MuY2hlY2tib3gtaW5saW5lIGxhYmVsIHtcbiAgY29sb3I6ICMzYzc2M2Q7XG59XG4uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogIzNjNzYzZDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cbi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjMmI1NDJjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjNjdiMTY4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzY3YjE2ODtcbn1cbi5oYXMtc3VjY2VzcyAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xufVxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogIzNjNzYzZDtcbn1cbi5oYXMtd2FybmluZyAuaGVscC1ibG9jayxcbi5oYXMtd2FybmluZyAuY29udHJvbC1sYWJlbCxcbi5oYXMtd2FybmluZyAucmFkaW8sXG4uaGFzLXdhcm5pbmcgLmNoZWNrYm94LFxuLmhhcy13YXJuaW5nIC5yYWRpby1pbmxpbmUsXG4uaGFzLXdhcm5pbmcgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtd2FybmluZy5yYWRpbyBsYWJlbCxcbi5oYXMtd2FybmluZy5jaGVja2JveCBsYWJlbCxcbi5oYXMtd2FybmluZy5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLXdhcm5pbmcuY2hlY2tib3gtaW5saW5lIGxhYmVsIHtcbiAgY29sb3I6ICM4YTZkM2I7XG59XG4uaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogIzhhNmQzYjtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjNjY1MTJjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjYzBhMTZiO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2MwYTE2Yjtcbn1cbi5oYXMtd2FybmluZyAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xufVxuLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbi5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssXG4uaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLFxuLmhhcy1lcnJvciAucmFkaW8sXG4uaGFzLWVycm9yIC5jaGVja2JveCxcbi5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSxcbi5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtZXJyb3IucmFkaW8gbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLFxuLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjYTk0NDQyO1xufVxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLWNvbG9yOiAjYTk0NDQyO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xufVxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjODQzNTM0O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjY2U4NDgzO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2NlODQ4Mztcbn1cbi5oYXMtZXJyb3IgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG4gIGJvcmRlci1jb2xvcjogI2E5NDQ0MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbn1cbi5oYXMtZXJyb3IgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIGNvbG9yOiAjYTk0NDQyO1xufVxuLmhhcy1mZWVkYmFjayBsYWJlbCB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB0b3A6IDI1cHg7XG59XG4uaGFzLWZlZWRiYWNrIGxhYmVsLnNyLW9ubHkgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAwO1xufVxuLmhlbHAtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICBjb2xvcjogIzczNzM3Mztcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogYXV0bztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG4sXG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuY29udHJvbC1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAucmFkaW8sXG4gIC5mb3JtLWlubGluZSAuY2hlY2tib3gge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLnJhZGlvIGxhYmVsLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGxhYmVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgdG9wOiAwO1xuICB9XG59XG4uZm9ybS1ob3Jpem9udGFsIC5yYWRpbyxcbi5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LFxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8taW5saW5lLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZy10b3A6IDdweDtcbn1cbi5mb3JtLWhvcml6b250YWwgLnJhZGlvLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gge1xuICBtaW4taGVpZ2h0OiAyN3B4O1xufVxuLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHBhZGRpbmctdG9wOiA3cHg7XG4gIH1cbn1cbi5mb3JtLWhvcml6b250YWwgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcmlnaHQ6IDE1cHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1sZyAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDExcHg7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDZweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gIH1cbn1cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uYnRuOmZvY3VzLFxuLmJ0bjphY3RpdmU6Zm9jdXMsXG4uYnRuLmFjdGl2ZTpmb2N1cyxcbi5idG4uZm9jdXMsXG4uYnRuOmFjdGl2ZS5mb2N1cyxcbi5idG4uYWN0aXZlLmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG4uYnRuOmhvdmVyLFxuLmJ0bjpmb2N1cyxcbi5idG4uZm9jdXMge1xuICBjb2xvcjogIzMzMztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJ0bjphY3RpdmUsXG4uYnRuLmFjdGl2ZSB7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG59XG4uYnRuLmRpc2FibGVkLFxuLmJ0bltkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0biB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIG9wYWNpdHk6IDAuNjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT02NSk7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbmEuYnRuLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIGEuYnRuIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4uYnRuLWRlZmF1bHQge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuLmJ0bi1kZWZhdWx0OmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG4gIGJvcmRlci1jb2xvcjogIzhjOGM4Yztcbn1cbi5idG4tZGVmYXVsdDpob3ZlciB7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG4uYnRuLWRlZmF1bHQ6YWN0aXZlLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdCB7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG4uYnRuLWRlZmF1bHQ6YWN0aXZlOmhvdmVyLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZTpob3Zlcixcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdDpob3Zlcixcbi5idG4tZGVmYXVsdDphY3RpdmU6Zm9jdXMsXG4uYnRuLWRlZmF1bHQuYWN0aXZlOmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0OmZvY3VzLFxuLmJ0bi1kZWZhdWx0OmFjdGl2ZS5mb2N1cyxcbi5idG4tZGVmYXVsdC5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQuZm9jdXMge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZDRkNDtcbiAgYm9yZGVyLWNvbG9yOiAjOGM4YzhjO1xufVxuLmJ0bi1kZWZhdWx0OmFjdGl2ZSxcbi5idG4tZGVmYXVsdC5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6aG92ZXIsXG4uYnRuLWRlZmF1bHQuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpmb2N1cyxcbi5idG4tZGVmYXVsdC5kaXNhYmxlZC5mb2N1cyxcbi5idG4tZGVmYXVsdFtkaXNhYmxlZF0uZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuLmJ0bi1kZWZhdWx0IC5iYWRnZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO1xufVxuLmJ0bi1wcmltYXJ5IHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIGJvcmRlci1jb2xvcjogIzJlNmRhNDtcbn1cbi5idG4tcHJpbWFyeTpmb2N1cyxcbi5idG4tcHJpbWFyeS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwO1xuICBib3JkZXItY29sb3I6ICMxMjJiNDA7XG59XG4uYnRuLXByaW1hcnk6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbiAgYm9yZGVyLWNvbG9yOiAjMjA0ZDc0O1xufVxuLmJ0bi1wcmltYXJ5OmFjdGl2ZSxcbi5idG4tcHJpbWFyeS5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbiAgYm9yZGVyLWNvbG9yOiAjMjA0ZDc0O1xufVxuLmJ0bi1wcmltYXJ5OmFjdGl2ZTpob3Zlcixcbi5idG4tcHJpbWFyeS5hY3RpdmU6aG92ZXIsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnk6aG92ZXIsXG4uYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZTpmb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeTpmb2N1cyxcbi5idG4tcHJpbWFyeTphY3RpdmUuZm9jdXMsXG4uYnRuLXByaW1hcnkuYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5LmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMDRkNzQ7XG4gIGJvcmRlci1jb2xvcjogIzEyMmI0MDtcbn1cbi5idG4tcHJpbWFyeTphY3RpdmUsXG4uYnRuLXByaW1hcnkuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4tcHJpbWFyeS5kaXNhYmxlZDpob3Zlcixcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmhvdmVyLFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmZvY3VzLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6Zm9jdXMsXG4uYnRuLXByaW1hcnkuZGlzYWJsZWQuZm9jdXMsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5mb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIGJvcmRlci1jb2xvcjogIzJlNmRhNDtcbn1cbi5idG4tcHJpbWFyeSAuYmFkZ2Uge1xuICBjb2xvcjogIzMzN2FiNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5idG4tc3VjY2VzcyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiODVjO1xuICBib3JkZXItY29sb3I6ICM0Y2FlNGM7XG59XG4uYnRuLXN1Y2Nlc3M6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbiAgYm9yZGVyLWNvbG9yOiAjMjU1NjI1O1xufVxuLmJ0bi1zdWNjZXNzOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG4gIGJvcmRlci1jb2xvcjogIzM5ODQzOTtcbn1cbi5idG4tc3VjY2VzczphY3RpdmUsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG4gIGJvcmRlci1jb2xvcjogIzM5ODQzOTtcbn1cbi5idG4tc3VjY2VzczphY3RpdmU6aG92ZXIsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzOmhvdmVyLFxuLmJ0bi1zdWNjZXNzOmFjdGl2ZTpmb2N1cyxcbi5idG4tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3M6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2Vzcy5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk4NDM5O1xuICBib3JkZXItY29sb3I6ICMyNTU2MjU7XG59XG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQ6aG92ZXIsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpob3Zlcixcbi5idG4tc3VjY2Vzcy5kaXNhYmxlZDpmb2N1cyxcbi5idG4tc3VjY2Vzc1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXS5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiODVjO1xuICBib3JkZXItY29sb3I6ICM0Y2FlNGM7XG59XG4uYnRuLXN1Y2Nlc3MgLmJhZGdlIHtcbiAgY29sb3I6ICM1Y2I4NWM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uYnRuLWluZm8ge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzViYzBkZTtcbiAgYm9yZGVyLWNvbG9yOiAjNDZiOGRhO1xufVxuLmJ0bi1pbmZvOmZvY3VzLFxuLmJ0bi1pbmZvLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7XG4gIGJvcmRlci1jb2xvcjogIzFiNmQ4NTtcbn1cbi5idG4taW5mbzpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMyNjlhYmM7XG59XG4uYnRuLWluZm86YWN0aXZlLFxuLmJ0bi1pbmZvLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mbyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMyNjlhYmM7XG59XG4uYnRuLWluZm86YWN0aXZlOmhvdmVyLFxuLmJ0bi1pbmZvLmFjdGl2ZTpob3Zlcixcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mbzpob3Zlcixcbi5idG4taW5mbzphY3RpdmU6Zm9jdXMsXG4uYnRuLWluZm8uYWN0aXZlOmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvOmZvY3VzLFxuLmJ0bi1pbmZvOmFjdGl2ZS5mb2N1cyxcbi5idG4taW5mby5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWluZm8uZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2OWFiYztcbiAgYm9yZGVyLWNvbG9yOiAjMWI2ZDg1O1xufVxuLmJ0bi1pbmZvOmFjdGl2ZSxcbi5idG4taW5mby5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWluZm8ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLmJ0bi1pbmZvLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsXG4uYnRuLWluZm8uZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWluZm9bZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpmb2N1cyxcbi5idG4taW5mby5kaXNhYmxlZC5mb2N1cyxcbi5idG4taW5mb1tkaXNhYmxlZF0uZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzViYzBkZTtcbiAgYm9yZGVyLWNvbG9yOiAjNDZiOGRhO1xufVxuLmJ0bi1pbmZvIC5iYWRnZSB7XG4gIGNvbG9yOiAjNWJjMGRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJ0bi13YXJuaW5nIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2VlYTIzNjtcbn1cbi5idG4td2FybmluZzpmb2N1cyxcbi5idG4td2FybmluZy5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmO1xuICBib3JkZXItY29sb3I6ICM5ODVmMGQ7XG59XG4uYnRuLXdhcm5pbmc6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDU4NTEyO1xufVxuLmJ0bi13YXJuaW5nOmFjdGl2ZSxcbi5idG4td2FybmluZy5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmcge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDU4NTEyO1xufVxuLmJ0bi13YXJuaW5nOmFjdGl2ZTpob3Zlcixcbi5idG4td2FybmluZy5hY3RpdmU6aG92ZXIsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmc6aG92ZXIsXG4uYnRuLXdhcm5pbmc6YWN0aXZlOmZvY3VzLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZTpmb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZzpmb2N1cyxcbi5idG4td2FybmluZzphY3RpdmUuZm9jdXMsXG4uYnRuLXdhcm5pbmcuYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkNTg1MTI7XG4gIGJvcmRlci1jb2xvcjogIzk4NWYwZDtcbn1cbi5idG4td2FybmluZzphY3RpdmUsXG4uYnRuLXdhcm5pbmcuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4td2FybmluZy5kaXNhYmxlZDpob3Zlcixcbi5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmhvdmVyLFxuLmJ0bi13YXJuaW5nLmRpc2FibGVkOmZvY3VzLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6Zm9jdXMsXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQuZm9jdXMsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5mb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2VlYTIzNjtcbn1cbi5idG4td2FybmluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2YwYWQ0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5idG4tZGFuZ2VyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG4gIGJvcmRlci1jb2xvcjogI2Q0M2YzYTtcbn1cbi5idG4tZGFuZ2VyOmZvY3VzLFxuLmJ0bi1kYW5nZXIuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjNzYxYzE5O1xufVxuLmJ0bi1kYW5nZXI6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjYWMyOTI1O1xufVxuLmJ0bi1kYW5nZXI6YWN0aXZlLFxuLmJ0bi1kYW5nZXIuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjYWMyOTI1O1xufVxuLmJ0bi1kYW5nZXI6YWN0aXZlOmhvdmVyLFxuLmJ0bi1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXI6aG92ZXIsXG4uYnRuLWRhbmdlcjphY3RpdmU6Zm9jdXMsXG4uYnRuLWRhbmdlci5hY3RpdmU6Zm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlcjpmb2N1cyxcbi5idG4tZGFuZ2VyOmFjdGl2ZS5mb2N1cyxcbi5idG4tZGFuZ2VyLmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhYzI5MjU7XG4gIGJvcmRlci1jb2xvcjogIzc2MWMxOTtcbn1cbi5idG4tZGFuZ2VyOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4tZGFuZ2VyLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVyLFxuLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWRhbmdlcltkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6Zm9jdXMsXG4uYnRuLWRhbmdlci5kaXNhYmxlZC5mb2N1cyxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXS5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5mb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG4gIGJvcmRlci1jb2xvcjogI2Q0M2YzYTtcbn1cbi5idG4tZGFuZ2VyIC5iYWRnZSB7XG4gIGNvbG9yOiAjZDk1MzRmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJ0bi1saW5rIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWxpbmssXG4uYnRuLWxpbms6YWN0aXZlLFxuLmJ0bi1saW5rLmFjdGl2ZSxcbi5idG4tbGlua1tkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5idG4tbGluayxcbi5idG4tbGluazpob3Zlcixcbi5idG4tbGluazpmb2N1cyxcbi5idG4tbGluazphY3RpdmUge1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICMyMzUyN2M7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogIzc3Nzc3NztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJ0bi1sZyxcbi5idG4tZ3JvdXAtbGcgPiAuYnRuIHtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cbi5idG4tc20sXG4uYnRuLWdyb3VwLXNtID4gLmJ0biB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi5idG4teHMsXG4uYnRuLWdyb3VwLXhzID4gLmJ0biB7XG4gIHBhZGRpbmc6IDFweCA1cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLmJ0bi1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXS5idG4tYmxvY2ssXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0uYnRuLWJsb2NrLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXS5idG4tYmxvY2sge1xuICB3aWR0aDogMTAwJTtcbn1cbi5mYWRlIHtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjtcbiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xufVxuLmZhZGUuaW4ge1xuICBvcGFjaXR5OiAxO1xufVxuLmNvbGxhcHNlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxudHIuY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3c7XG59XG50Ym9keS5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDtcbn1cbi5jb2xsYXBzaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zNXM7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMzVzO1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcbn1cbi5jYXJldCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXRvcDogNHB4IGRhc2hlZDtcbiAgYm9yZGVyLXRvcDogNHB4IHNvbGlkIFxcOTtcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG4uZHJvcHVwLFxuLmRyb3Bkb3duIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG4uZHJvcGRvd24tbWVudSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDAwO1xuICBkaXNwbGF5OiBub25lO1xuICBmbG9hdDogbGVmdDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgcGFkZGluZzogNXB4IDA7XG4gIG1hcmdpbjogMnB4IDAgMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbn1cbi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cbi5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogOXB4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7XG59XG4uZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgY2xlYXI6IGJvdGg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBjb2xvcjogIzMzMzMzMztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLFxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjMjYyNjI2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgb3V0bGluZTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbn1cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSxcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5vcGVuID4gLmRyb3Bkb3duLW1lbnUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5vcGVuID4gYSB7XG4gIG91dGxpbmU6IDA7XG59XG4uZHJvcGRvd24tbWVudS1yaWdodCB7XG4gIGxlZnQ6IGF1dG87XG4gIHJpZ2h0OiAwO1xufVxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4uZHJvcGRvd24tYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogOTkwO1xufVxuLnB1bGwtcmlnaHQgPiAuZHJvcGRvd24tbWVudSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvO1xufVxuLmRyb3B1cCAuY2FyZXQsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0IHtcbiAgYm9yZGVyLXRvcDogMDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IGRhc2hlZDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIFxcOTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICB0b3A6IGF1dG87XG4gIGJvdHRvbTogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gIH1cbiAgLm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG59XG4uYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ0bi1ncm91cCA+IC5idG4sXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpob3Zlcixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmhvdmVyLFxuLmJ0bi1ncm91cCA+IC5idG46Zm9jdXMsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmb2N1cyxcbi5idG4tZ3JvdXAgPiAuYnRuOmFjdGl2ZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmFjdGl2ZSxcbi5idG4tZ3JvdXAgPiAuYnRuLmFjdGl2ZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLmFjdGl2ZSB7XG4gIHotaW5kZXg6IDI7XG59XG4uYnRuLWdyb3VwIC5idG4gKyAuYnRuLFxuLmJ0bi1ncm91cCAuYnRuICsgLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAgLmJ0bi1ncm91cCArIC5idG4sXG4uYnRuLWdyb3VwIC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDtcbn1cbi5idG4tdG9vbGJhciAuYnRuLFxuLmJ0bi10b29sYmFyIC5idG4tZ3JvdXAsXG4uYnRuLXRvb2xiYXIgLmlucHV0LWdyb3VwIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uYnRuLXRvb2xiYXIgPiAuYnRuLFxuLmJ0bi10b29sYmFyID4gLmJ0bi1ncm91cCxcbi5idG4tdG9vbGJhciA+IC5pbnB1dC1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuOmxhc3QtY2hpbGQsXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIG91dGxpbmU6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDhweDtcbiAgcGFkZGluZy1yaWdodDogOHB4O1xufVxuLmJ0bi1ncm91cCA+IC5idG4tbGcgKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xufVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xufVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUuYnRuLWxpbmsge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG4uYnRuIC5jYXJldCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggMDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbn1cbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBmbG9hdDogbm9uZTtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuICsgLmJ0bixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuICsgLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwICsgLmJ0bixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5idG46bGFzdC1jaGlsZCxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cC1qdXN0aWZpZWQge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG59XG4uYnRuLWdyb3VwLWp1c3RpZmllZCA+IC5idG4sXG4uYnRuLWdyb3VwLWp1c3RpZmllZCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgd2lkdGg6IDElO1xufVxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5idG4ge1xuICB3aWR0aDogMTAwJTtcbn1cbi5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSB7XG4gIGxlZnQ6IGF1dG87XG59XG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0biBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4tZ3JvdXAgPiAuYnRuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xufVxuLmlucHV0LWdyb3VwW2NsYXNzKj1cImNvbC1cIl0ge1xuICBmbG9hdDogbm9uZTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgei1pbmRleDogMztcbn1cbi5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogNDZweDtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cbnNlbGVjdC5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wsXG5zZWxlY3QuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG5zZWxlY3QuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogNDZweDtcbiAgbGluZS1oZWlnaHQ6IDQ2cHg7XG59XG50ZXh0YXJlYS5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wsXG50ZXh0YXJlYS5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbnRleHRhcmVhLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBoZWlnaHQ6IGF1dG87XG59XG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbnNlbGVjdC5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG5zZWxlY3QuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG5zZWxlY3QuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG50ZXh0YXJlYS5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG50ZXh0YXJlYS5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbixcbnRleHRhcmVhLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCxcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBoZWlnaHQ6IGF1dG87XG59XG4uaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtYnRuLFxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLmlucHV0LWdyb3VwLWFkZG9uOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksXG4uaW5wdXQtZ3JvdXAtYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4ge1xuICB3aWR0aDogMSU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICM1NTU1NTU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LXNtIHtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LWxnIHtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4uaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xufVxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLXJpZ2h0OiAwO1xufVxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG4uaW5wdXQtZ3JvdXAtYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDA7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4uaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG46aG92ZXIsXG4uaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjpmb2N1cyxcbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmFjdGl2ZSB7XG4gIHotaW5kZXg6IDI7XG59XG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xufVxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAge1xuICB6LWluZGV4OiAyO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cbi5uYXYge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubmF2ID4gbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLm5hdiA+IGxpID4gYSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbn1cbi5uYXYgPiBsaSA+IGE6aG92ZXIsXG4ubmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xufVxuLm5hdiA+IGxpLmRpc2FibGVkID4gYSB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLm5hdiA+IGxpLmRpc2FibGVkID4gYTpob3Zlcixcbi5uYXYgPiBsaS5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzc3Nzc3NztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5uYXYgLm9wZW4gPiBhLFxuLm5hdiAub3BlbiA+IGE6aG92ZXIsXG4ubmF2IC5vcGVuID4gYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG4gIGJvcmRlci1jb2xvcjogIzMzN2FiNztcbn1cbi5uYXYgLm5hdi1kaXZpZGVyIHtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogOXB4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7XG59XG4ubmF2ID4gbGkgPiBhID4gaW1nIHtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLm5hdi10YWJzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG59XG4ubmF2LXRhYnMgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xufVxuLm5hdi10YWJzID4gbGkgPiBhIHtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7XG59XG4ubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIge1xuICBib3JkZXItY29sb3I6ICNlZWVlZWUgI2VlZWVlZSAjZGRkO1xufVxuLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYSxcbi5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM1NTU1NTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gIGZsb2F0OiBub25lO1xufVxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBhdXRvO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgd2lkdGg6IDElO1xuICB9XG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gIG1hcmdpbi1yaWdodDogMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSxcbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7XG4gIH1cbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSxcbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcbiAgfVxufVxuLm5hdi1waWxscyA+IGxpIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4ubmF2LXBpbGxzID4gbGkgPiBhIHtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLm5hdi1waWxscyA+IGxpICsgbGkge1xuICBtYXJnaW4tbGVmdDogMnB4O1xufVxuLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGEsXG4ubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYTpob3Zlcixcbi5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG59XG4ubmF2LXN0YWNrZWQgPiBsaSB7XG4gIGZsb2F0OiBub25lO1xufVxuLm5hdi1zdGFja2VkID4gbGkgKyBsaSB7XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4ubmF2LWp1c3RpZmllZCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gIGZsb2F0OiBub25lO1xufVxuLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cbi5uYXYtanVzdGlmaWVkID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBhdXRvO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXYtanVzdGlmaWVkID4gbGkge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgd2lkdGg6IDElO1xuICB9XG4gIC5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG4ubmF2LXRhYnMtanVzdGlmaWVkIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbi5uYXYtdGFicy1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSxcbi5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3Zlcixcbi5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdi10YWJzLWp1c3RpZmllZCA+IGxpID4gYSB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7XG4gIH1cbiAgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcbiAgfVxufVxuLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi50YWItY29udGVudCA+IC5hY3RpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuLm5hdmJhciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogNTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhciB7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1oZWFkZXIge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG59XG4ubmF2YmFyLWNvbGxhcHNlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubmF2YmFyLWNvbGxhcHNlLmluIHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbiAgLm5hdmJhci1jb2xsYXBzZS5jb2xsYXBzZSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIC5uYXZiYXItY29sbGFwc2UuaW4ge1xuICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gIH1cbiAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG59XG4ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7XG4gIG1heC1oZWlnaHQ6IDM0MHB4O1xufVxuQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICB9XG59XG4uY29udGFpbmVyID4gLm5hdmJhci1oZWFkZXIsXG4uY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1oZWFkZXIsXG4uY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSxcbi5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWNvbGxhcHNlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250YWluZXIgPiAubmF2YmFyLWhlYWRlcixcbiAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLFxuICAuY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSxcbiAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuLm5hdmJhci1zdGF0aWMtdG9wIHtcbiAgei1pbmRleDogMTAwMDtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItc3RhdGljLXRvcCB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuLm5hdmJhci1maXhlZC10b3AsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwMzA7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1maXhlZC10b3AsXG4gIC5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4ubmF2YmFyLWZpeGVkLXRvcCB7XG4gIHRvcDogMDtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xufVxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICBib3R0b206IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci13aWR0aDogMXB4IDAgMDtcbn1cbi5uYXZiYXItYnJhbmQge1xuICBmbG9hdDogbGVmdDtcbiAgcGFkZGluZzogMTVweCAxNXB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBoZWlnaHQ6IDUwcHg7XG59XG4ubmF2YmFyLWJyYW5kOmhvdmVyLFxuLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5uYXZiYXItYnJhbmQgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyID4gLmNvbnRhaW5lciAubmF2YmFyLWJyYW5kLFxuICAubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kIHtcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gIH1cbn1cbi5uYXZiYXItdG9nZ2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogMTVweDtcbiAgcGFkZGluZzogOXB4IDEwcHg7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgb3V0bGluZTogMDtcbn1cbi5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMjJweDtcbiAgaGVpZ2h0OiAycHg7XG4gIGJvcmRlci1yYWRpdXM6IDFweDtcbn1cbi5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciArIC5pY29uLWJhciB7XG4gIG1hcmdpbi10b3A6IDRweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLXRvZ2dsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm5hdmJhci1uYXYge1xuICBtYXJnaW46IDcuNXB4IC0xNXB4O1xufVxuLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICBwYWRkaW5nLXRvcDogMTBweDtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIGZsb2F0OiBub25lO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEsXG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXIge1xuICAgIHBhZGRpbmc6IDVweCAxNXB4IDVweCAyNXB4O1xuICB9XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgfVxuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLW5hdiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luOiAwO1xuICB9XG4gIC5uYXZiYXItbmF2ID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgfVxufVxuLm5hdmJhci1mb3JtIHtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWZvcm0gLmZvcm0tZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogYXV0bztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLFxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG4sXG4gIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuY29udHJvbC1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAucmFkaW8sXG4gIC5uYXZiYXItZm9ybSAuY2hlY2tib3gge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLnJhZGlvIGxhYmVsLFxuICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGxhYmVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIC5uYXZiYXItZm9ybSAuY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWZvcm0ge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbn1cbi5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbn1cbi5uYXZiYXItYnRuIHtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG4ubmF2YmFyLWJ0bi5idG4tc20ge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuLm5hdmJhci1idG4uYnRuLXhzIHtcbiAgbWFyZ2luLXRvcDogMTRweDtcbiAgbWFyZ2luLWJvdHRvbTogMTRweDtcbn1cbi5uYXZiYXItdGV4dCB7XG4gIG1hcmdpbi10b3A6IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci10ZXh0IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgfVxuICAubmF2YmFyLXJpZ2h0IH4gLm5hdmJhci1yaWdodCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG59XG4ubmF2YmFyLWRlZmF1bHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xuICBib3JkZXItY29sb3I6ICNlN2U3ZTc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZCB7XG4gIGNvbG9yOiAjNzc3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItYnJhbmQ6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gIGNvbG9yOiAjNWU1ZTVlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRleHQge1xuICBjb2xvcjogIzc3Nztcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gIGNvbG9yOiAjNzc3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGEsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM1NTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2NjYztcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGUge1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM4ODg7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWZvcm0ge1xuICBib3JkZXItY29sb3I6ICNlN2U3ZTc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAub3BlbiA+IGEsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAub3BlbiA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAub3BlbiA+IGE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1xuICBjb2xvcjogIzU1NTtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGNvbG9yOiAjNzc3O1xuICB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzMzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzU1NTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1xuICB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjY2NjO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rIHtcbiAgY29sb3I6ICM3Nzc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rOmhvdmVyIHtcbiAgY29sb3I6ICMzMzM7XG59XG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rIHtcbiAgY29sb3I6ICM3Nzc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpmb2N1cyB7XG4gIGNvbG9yOiAjMzMzO1xufVxuLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogI2NjYztcbn1cbi5uYXZiYXItaW52ZXJzZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMjI7XG4gIGJvcmRlci1jb2xvcjogIzA4MDgwODtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIHtcbiAgY29sb3I6ICM5ZDlkOWQ7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZDpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdGV4dCB7XG4gIGNvbG9yOiAjOWQ5ZDlkO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgY29sb3I6ICM5ZDlkOWQ7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwODtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGEsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNDQ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSB7XG4gIGJvcmRlci1jb2xvcjogIzMzMztcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWNvbGxhcHNlLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItZm9ybSB7XG4gIGJvcmRlci1jb2xvcjogIzEwMTAxMDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7XG4gIGNvbG9yOiAjZmZmO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kcm9wZG93bi1oZWFkZXIge1xuICAgIGJvcmRlci1jb2xvcjogIzA4MDgwODtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7XG4gIH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICBjb2xvcjogIzlkOWQ5ZDtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwODtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhLFxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzQ0NDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluayB7XG4gIGNvbG9yOiAjOWQ5ZDlkO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm5hdmJhci1pbnZlcnNlIC5idG4tbGluayB7XG4gIGNvbG9yOiAjOWQ5ZDlkO1xufVxuLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG59XG4uYnJlYWRjcnVtYiB7XG4gIHBhZGRpbmc6IDhweCAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uYnJlYWRjcnVtYiA+IGxpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmJyZWFkY3J1bWIgPiBsaSArIGxpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiL1xcMDBhMFwiO1xuICBwYWRkaW5nOiAwIDVweDtcbiAgY29sb3I6ICNjY2M7XG59XG4uYnJlYWRjcnVtYiA+IC5hY3RpdmUge1xuICBjb2xvcjogIzc3Nzc3Nztcbn1cbi5wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogMjBweCAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ucGFnaW5hdGlvbiA+IGxpIHtcbiAgZGlzcGxheTogaW5saW5lO1xufVxuLnBhZ2luYXRpb24gPiBsaSA+IGEsXG4ucGFnaW5hdGlvbiA+IGxpID4gc3BhbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzMzN2FiNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG4ucGFnaW5hdGlvbiA+IGxpOmZpcnN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xufVxuLnBhZ2luYXRpb24gPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xufVxuLnBhZ2luYXRpb24gPiBsaSA+IGE6aG92ZXIsXG4ucGFnaW5hdGlvbiA+IGxpID4gc3Bhbjpob3Zlcixcbi5wYWdpbmF0aW9uID4gbGkgPiBhOmZvY3VzLFxuLnBhZ2luYXRpb24gPiBsaSA+IHNwYW46Zm9jdXMge1xuICB6LWluZGV4OiAyO1xuICBjb2xvcjogIzIzNTI3YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkO1xufVxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYSxcbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW4sXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3Bhbjpob3Zlcixcbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGE6Zm9jdXMsXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuOmZvY3VzIHtcbiAgei1pbmRleDogMztcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIGJvcmRlci1jb2xvcjogIzMzN2FiNztcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuOmZvY3VzLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5wYWdpbmF0aW9uLWxnID4gbGkgPiBhLFxuLnBhZ2luYXRpb24tbGcgPiBsaSA+IHNwYW4ge1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbn1cbi5wYWdpbmF0aW9uLWxnID4gbGk6Zmlyc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tbGcgPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA2cHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDZweDtcbn1cbi5wYWdpbmF0aW9uLWxnID4gbGk6bGFzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbi1sZyA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDZweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDZweDtcbn1cbi5wYWdpbmF0aW9uLXNtID4gbGkgPiBhLFxuLnBhZ2luYXRpb24tc20gPiBsaSA+IHNwYW4ge1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xufVxuLnBhZ2luYXRpb24tc20gPiBsaTpmaXJzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbi1zbSA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnBhZ2luYXRpb24tc20gPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLXNtID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuLnBhZ2VyIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46IDIwcHggMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnBhZ2VyIGxpIHtcbiAgZGlzcGxheTogaW5saW5lO1xufVxuLnBhZ2VyIGxpID4gYSxcbi5wYWdlciBsaSA+IHNwYW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDVweCAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiAxNXB4O1xufVxuLnBhZ2VyIGxpID4gYTpob3Zlcixcbi5wYWdlciBsaSA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG59XG4ucGFnZXIgLm5leHQgPiBhLFxuLnBhZ2VyIC5uZXh0ID4gc3BhbiB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi5wYWdlciAucHJldmlvdXMgPiBhLFxuLnBhZ2VyIC5wcmV2aW91cyA+IHNwYW4ge1xuICBmbG9hdDogbGVmdDtcbn1cbi5wYWdlciAuZGlzYWJsZWQgPiBhLFxuLnBhZ2VyIC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ucGFnZXIgLmRpc2FibGVkID4gYTpmb2N1cyxcbi5wYWdlciAuZGlzYWJsZWQgPiBzcGFuIHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIHBhZGRpbmc6IC4yZW0gLjZlbSAuM2VtO1xuICBmb250LXNpemU6IDc1JTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGJvcmRlci1yYWRpdXM6IC4yNWVtO1xufVxuYS5sYWJlbDpob3ZlcixcbmEubGFiZWw6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubGFiZWw6ZW1wdHkge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmJ0biAubGFiZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTFweDtcbn1cbi5sYWJlbC1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc3Nzc3Nztcbn1cbi5sYWJlbC1kZWZhdWx0W2hyZWZdOmhvdmVyLFxuLmxhYmVsLWRlZmF1bHRbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWU1ZTVlO1xufVxuLmxhYmVsLXByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xufVxuLmxhYmVsLXByaW1hcnlbaHJlZl06aG92ZXIsXG4ubGFiZWwtcHJpbWFyeVtocmVmXTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyODYwOTA7XG59XG4ubGFiZWwtc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG4ubGFiZWwtc3VjY2Vzc1tocmVmXTpob3Zlcixcbi5sYWJlbC1zdWNjZXNzW2hyZWZdOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbn1cbi5sYWJlbC1pbmZvIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzViYzBkZTtcbn1cbi5sYWJlbC1pbmZvW2hyZWZdOmhvdmVyLFxuLmxhYmVsLWluZm9baHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xufVxuLmxhYmVsLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBhZDRlO1xufVxuLmxhYmVsLXdhcm5pbmdbaHJlZl06aG92ZXIsXG4ubGFiZWwtd2FybmluZ1tocmVmXTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7XG59XG4ubGFiZWwtZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0Zjtcbn1cbi5sYWJlbC1kYW5nZXJbaHJlZl06aG92ZXIsXG4ubGFiZWwtZGFuZ2VyW2hyZWZdOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbn1cbi5iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWluLXdpZHRoOiAxMHB4O1xuICBwYWRkaW5nOiAzcHggN3B4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogI2ZmZjtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc3Nzc3NztcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbn1cbi5iYWRnZTplbXB0eSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uYnRuIC5iYWRnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMXB4O1xufVxuLmJ0bi14cyAuYmFkZ2UsXG4uYnRuLWdyb3VwLXhzID4gLmJ0biAuYmFkZ2Uge1xuICB0b3A6IDA7XG4gIHBhZGRpbmc6IDFweCA1cHg7XG59XG5hLmJhZGdlOmhvdmVyLFxuYS5iYWRnZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlID4gLmJhZGdlLFxuLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhID4gLmJhZGdlIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4ubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuLmxpc3QtZ3JvdXAtaXRlbSA+IC5iYWRnZSArIC5iYWRnZSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xufVxuLm5hdi1waWxscyA+IGxpID4gYSA+IC5iYWRnZSB7XG4gIG1hcmdpbi1sZWZ0OiAzcHg7XG59XG4uanVtYm90cm9uIHtcbiAgcGFkZGluZy10b3A6IDMwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAzMHB4O1xuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbn1cbi5qdW1ib3Ryb24gaDEsXG4uanVtYm90cm9uIC5oMSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLmp1bWJvdHJvbiBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBmb250LXdlaWdodDogMjAwO1xufVxuLmp1bWJvdHJvbiA+IGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2Q1ZDVkNTtcbn1cbi5jb250YWluZXIgLmp1bWJvdHJvbixcbi5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuLmp1bWJvdHJvbiAuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmp1bWJvdHJvbiB7XG4gICAgcGFkZGluZy10b3A6IDQ4cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDQ4cHg7XG4gIH1cbiAgLmNvbnRhaW5lciAuanVtYm90cm9uLFxuICAuY29udGFpbmVyLWZsdWlkIC5qdW1ib3Ryb24ge1xuICAgIHBhZGRpbmctbGVmdDogNjBweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA2MHB4O1xuICB9XG4gIC5qdW1ib3Ryb24gaDEsXG4gIC5qdW1ib3Ryb24gLmgxIHtcbiAgICBmb250LXNpemU6IDYzcHg7XG4gIH1cbn1cbi50aHVtYm5haWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogNHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UtaW4tb3V0O1xuICAtby10cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMnMgZWFzZS1pbi1vdXQ7XG59XG4udGh1bWJuYWlsID4gaW1nLFxuLnRodW1ibmFpbCBhID4gaW1nIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbmEudGh1bWJuYWlsOmhvdmVyLFxuYS50aHVtYm5haWw6Zm9jdXMsXG5hLnRodW1ibmFpbC5hY3RpdmUge1xuICBib3JkZXItY29sb3I6ICMzMzdhYjc7XG59XG4udGh1bWJuYWlsIC5jYXB0aW9uIHtcbiAgcGFkZGluZzogOXB4O1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5hbGVydCB7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uYWxlcnQgaDQge1xuICBtYXJnaW4tdG9wOiAwO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5hbGVydCAuYWxlcnQtbGluayB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmFsZXJ0ID4gcCxcbi5hbGVydCA+IHVsIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5hbGVydCA+IHAgKyBwIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuLmFsZXJ0LWRpc21pc3NhYmxlLFxuLmFsZXJ0LWRpc21pc3NpYmxlIHtcbiAgcGFkZGluZy1yaWdodDogMzVweDtcbn1cbi5hbGVydC1kaXNtaXNzYWJsZSAuY2xvc2UsXG4uYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0ycHg7XG4gIHJpZ2h0OiAtMjFweDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4uYWxlcnQtc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7XG4gIGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcbiAgY29sb3I6ICMzYzc2M2Q7XG59XG4uYWxlcnQtc3VjY2VzcyBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNjOWUyYjM7XG59XG4uYWxlcnQtc3VjY2VzcyAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjMmI1NDJjO1xufVxuLmFsZXJ0LWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xuICBib3JkZXItY29sb3I6ICNiY2U4ZjE7XG4gIGNvbG9yOiAjMzE3MDhmO1xufVxuLmFsZXJ0LWluZm8gaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjYTZlMWVjO1xufVxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xuICBjb2xvcjogIzI0NTI2OTtcbn1cbi5hbGVydC13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgYm9yZGVyLWNvbG9yOiAjZmFlYmNjO1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbi5hbGVydC13YXJuaW5nIGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2Y3ZTFiNTtcbn1cbi5hbGVydC13YXJuaW5nIC5hbGVydC1saW5rIHtcbiAgY29sb3I6ICM2NjUxMmM7XG59XG4uYWxlcnQtZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbiAgYm9yZGVyLWNvbG9yOiAjZWJjY2QxO1xuICBjb2xvcjogI2E5NDQ0Mjtcbn1cbi5hbGVydC1kYW5nZXIgaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZTRiOWMwO1xufVxuLmFsZXJ0LWRhbmdlciAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjODQzNTM0O1xufVxuQC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xuICBmcm9tIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XG4gIH1cbiAgdG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgfVxufVxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5wcm9ncmVzcy1iYXIge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGVhc2U7XG4gIC1vLXRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcbiAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlO1xufVxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhcixcbi5wcm9ncmVzcy1iYXItc3RyaXBlZCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHg7XG59XG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7XG4gIC1vLWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICBhbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTtcbn1cbi5wcm9ncmVzcy1iYXItc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG4ucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xufVxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1pbmZvIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuLnByb2dyZXNzLWJhci13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwYWQ0ZTtcbn1cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItd2FybmluZyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cbi5wcm9ncmVzcy1iYXItZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0Zjtcbn1cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuLm1lZGlhIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cbi5tZWRpYTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ubWVkaWEsXG4ubWVkaWEtYm9keSB7XG4gIHpvb206IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWVkaWEtYm9keSB7XG4gIHdpZHRoOiAxMDAwMHB4O1xufVxuLm1lZGlhLW9iamVjdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLm1lZGlhLW9iamVjdC5pbWctdGh1bWJuYWlsIHtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhID4gLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG4ubWVkaWEtbGVmdCxcbi5tZWRpYSA+IC5wdWxsLWxlZnQge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xufVxuLm1lZGlhLWxlZnQsXG4ubWVkaWEtcmlnaHQsXG4ubWVkaWEtYm9keSB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWVkaWEtbWlkZGxlIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZWRpYS1ib3R0b20ge1xuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xufVxuLm1lZGlhLWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubWVkaWEtbGlzdCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5saXN0LWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG59XG4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbSxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0ge1xuICBjb2xvcjogIzU1NTtcbn1cbmEubGlzdC1ncm91cC1pdGVtIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6ICMzMzM7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbTpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW06aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW06Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLXRleHQsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3Zlcixcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIHtcbiAgei1pbmRleDogMjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIGJvcmRlci1jb2xvcjogIzMzN2FiNztcbn1cbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IHNtYWxsLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gc21hbGwsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHtcbiAgY29sb3I6ICNjN2RkZWY7XG59XG4ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mge1xuICBjb2xvcjogIzNjNzYzZDtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZTljNjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2M3NjNkO1xuICBib3JkZXItY29sb3I6ICMzYzc2M2Q7XG59XG4ubGlzdC1ncm91cC1pdGVtLWluZm8ge1xuICBjb2xvcjogIzMxNzA4ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cbmEubGlzdC1ncm91cC1pdGVtLWluZm8sXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8ge1xuICBjb2xvcjogIzMxNzA4Zjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLWluZm8gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0taW5mbzpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbzpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLWluZm86Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm86Zm9jdXMge1xuICBjb2xvcjogIzMxNzA4ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M0ZTNmMztcbn1cbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzE3MDhmO1xuICBib3JkZXItY29sb3I6ICMzMTcwOGY7XG59XG4ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbn1cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcge1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZjJjYztcbn1cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGE2ZDNiO1xuICBib3JkZXItY29sb3I6ICM4YTZkM2I7XG59XG4ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7XG4gIGNvbG9yOiAjYTk0NDQyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIge1xuICBjb2xvcjogI2E5NDQ0Mjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6Zm9jdXMge1xuICBjb2xvcjogI2E5NDQ0MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NjYztcbn1cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmUsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmUsXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTk0NDQyO1xuICBib3JkZXItY29sb3I6ICNhOTQ0NDI7XG59XG4ubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuLnBhbmVsIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG4ucGFuZWwtYm9keSB7XG4gIHBhZGRpbmc6IDE1cHg7XG59XG4ucGFuZWwtaGVhZGluZyB7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwtaGVhZGluZyA+IC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ucGFuZWwtdGl0bGUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLnBhbmVsLXRpdGxlID4gYSxcbi5wYW5lbC10aXRsZSA+IHNtYWxsLFxuLnBhbmVsLXRpdGxlID4gLnNtYWxsLFxuLnBhbmVsLXRpdGxlID4gc21hbGwgPiBhLFxuLnBhbmVsLXRpdGxlID4gLnNtYWxsID4gYSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLnBhbmVsLWZvb3RlciB7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC5saXN0LWdyb3VwLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnBhbmVsID4gLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICBib3JkZXItd2lkdGg6IDFweCAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLnBhbmVsID4gLmxpc3QtZ3JvdXA6Zmlyc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwOmZpcnN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4ucGFuZWwtaGVhZGluZyArIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xufVxuLmxpc3QtZ3JvdXAgKyAucGFuZWwtZm9vdGVyIHtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbn1cbi5wYW5lbCA+IC50YWJsZSxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLnRhYmxlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5wYW5lbCA+IC50YWJsZSBjYXB0aW9uLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgY2FwdGlvbixcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC50YWJsZSBjYXB0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnBhbmVsLWJvZHkgKyAudGFibGUsXG4ucGFuZWwgPiAucGFuZWwtYm9keSArIC50YWJsZS1yZXNwb25zaXZlLFxuLnBhbmVsID4gLnRhYmxlICsgLnBhbmVsLWJvZHksXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSArIC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG59XG4ucGFuZWwgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoLFxuLnBhbmVsID4gLnRhYmxlID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZCB7XG4gIGJvcmRlci10b3A6IDA7XG59XG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCB7XG4gIGJvcmRlcjogMDtcbn1cbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXJpZ2h0OiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmZpcnN0LWNoaWxkID4gdGgge1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRoLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlIHtcbiAgYm9yZGVyOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnBhbmVsLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ucGFuZWwtZ3JvdXAgLnBhbmVsICsgLnBhbmVsIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5LFxuLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwtZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlIC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG59XG4ucGFuZWwtZGVmYXVsdCB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzMzMzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkO1xufVxuLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2RkZDtcbn1cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNmNWY1ZjU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzM7XG59XG4ucGFuZWwtZGVmYXVsdCA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNkZGQ7XG59XG4ucGFuZWwtcHJpbWFyeSB7XG4gIGJvcmRlci1jb2xvcjogIzMzN2FiNztcbn1cbi5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbiAgYm9yZGVyLWNvbG9yOiAjMzM3YWI3O1xufVxuLnBhbmVsLXByaW1hcnkgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzMzN2FiNztcbn1cbi5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzMzdhYjc7XG59XG4ucGFuZWwtc3VjY2VzcyB7XG4gIGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcbn1cbi5wYW5lbC1zdWNjZXNzID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbiAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2O1xufVxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2Q2ZTljNjtcbn1cbi5wYW5lbC1zdWNjZXNzID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNkZmYwZDg7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYzc2M2Q7XG59XG4ucGFuZWwtc3VjY2VzcyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNkNmU5YzY7XG59XG4ucGFuZWwtaW5mbyB7XG4gIGJvcmRlci1jb2xvcjogI2JjZThmMTtcbn1cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzMxNzA4ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbiAgYm9yZGVyLWNvbG9yOiAjYmNlOGYxO1xufVxuLnBhbmVsLWluZm8gPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2JjZThmMTtcbn1cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNkOWVkZjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGY7XG59XG4ucGFuZWwtaW5mbyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNiY2U4ZjE7XG59XG4ucGFuZWwtd2FybmluZyB7XG4gIGJvcmRlci1jb2xvcjogI2ZhZWJjYztcbn1cbi5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgYm9yZGVyLWNvbG9yOiAjZmFlYmNjO1xufVxuLnBhbmVsLXdhcm5pbmcgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZhZWJjYztcbn1cbi5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNmY2Y4ZTM7XG4gIGJhY2tncm91bmQtY29sb3I6ICM4YTZkM2I7XG59XG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmYWViY2M7XG59XG4ucGFuZWwtZGFuZ2VyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZWJjY2QxO1xufVxuLnBhbmVsLWRhbmdlciA+IC5wYW5lbC1oZWFkaW5nIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG4gIGJvcmRlci1jb2xvcjogI2ViY2NkMTtcbn1cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ViY2NkMTtcbn1cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2YyZGVkZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E5NDQ0Mjtcbn1cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZWJjY2QxO1xufVxuLmVtYmVkLXJlc3BvbnNpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uZW1iZWQtcmVzcG9uc2l2ZSAuZW1iZWQtcmVzcG9uc2l2ZS1pdGVtLFxuLmVtYmVkLXJlc3BvbnNpdmUgaWZyYW1lLFxuLmVtYmVkLXJlc3BvbnNpdmUgZW1iZWQsXG4uZW1iZWQtcmVzcG9uc2l2ZSBvYmplY3QsXG4uZW1iZWQtcmVzcG9uc2l2ZSB2aWRlbyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlcjogMDtcbn1cbi5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5IHtcbiAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbn1cbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuLndlbGwge1xuICBtaW4taGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAxOXB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTNlM2UzO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuLndlbGwgYmxvY2txdW90ZSB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuLndlbGwtbGcge1xuICBwYWRkaW5nOiAyNHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4ud2VsbC1zbSB7XG4gIHBhZGRpbmc6IDlweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLmNsb3NlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICMwMDA7XG4gIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmY7XG4gIG9wYWNpdHk6IDAuMjtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTIwKTtcbn1cbi5jbG9zZTpob3Zlcixcbi5jbG9zZTpmb2N1cyB7XG4gIGNvbG9yOiAjMDAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuYnV0dG9uLmNsb3NlIHtcbiAgcGFkZGluZzogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA1MDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBvdXRsaW5lOiAwO1xufVxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xufVxuLm1vZGFsLmluIC5tb2RhbC1kaWFsb2cge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbn1cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5tb2RhbC1kaWFsb2cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXJnaW46IDEwcHg7XG59XG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggOXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgYm94LXNoYWRvdzogMCAzcHggOXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgb3V0bGluZTogMDtcbn1cbi5tb2RhbC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xufVxuLm1vZGFsLWJhY2tkcm9wLmZhZGUge1xuICBvcGFjaXR5OiAwO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7XG59XG4ubW9kYWwtYmFja2Ryb3AuaW4ge1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG59XG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogMTVweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7XG59XG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG4ubW9kYWwtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xufVxuLm1vZGFsLWJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDE1cHg7XG59XG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMTVweDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuLm1vZGFsLWZvb3RlciAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cbi5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiA2MDBweDtcbiAgICBtYXJnaW46IDMwcHggYXV0bztcbiAgfVxuICAubW9kYWwtY29udGVudCB7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgfVxuICAubW9kYWwtc20ge1xuICAgIHdpZHRoOiAzMDBweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5tb2RhbC1sZyB7XG4gICAgd2lkdGg6IDkwMHB4O1xuICB9XG59XG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTA3MDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcbiAgbGluZS1icmVhazogYXV0bztcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHRleHQtYWxpZ246IHN0YXJ0O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgd29yZC1icmVhazogbm9ybWFsO1xuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcbiAgd29yZC13cmFwOiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgb3BhY2l0eTogMDtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xufVxuLnRvb2x0aXAuaW4ge1xuICBvcGFjaXR5OiAwLjk7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCk7XG59XG4udG9vbHRpcC50b3Age1xuICBtYXJnaW4tdG9wOiAtM3B4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cbi50b29sdGlwLnJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgcGFkZGluZzogMCA1cHg7XG59XG4udG9vbHRpcC5ib3R0b20ge1xuICBtYXJnaW4tdG9wOiAzcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuLnRvb2x0aXAubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cbi50b29sdGlwLWlubmVyIHtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgcGFkZGluZzogM3B4IDhweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLnRvb2x0aXAtYXJyb3cge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAudG9wLXJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDA7XG59XG4udG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAwO1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDVweCAwIDVweCA1cHg7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cbi50b29sdGlwLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cbi50b29sdGlwLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogMDtcbiAgbGVmdDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cbi5wb3BvdmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwNjA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1heC13aWR0aDogMjc2cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4ucG9wb3Zlci50b3Age1xuICBtYXJnaW4tdG9wOiAtMTBweDtcbn1cbi5wb3BvdmVyLnJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG4ucG9wb3Zlci5ib3R0b20ge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuLnBvcG92ZXIubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbn1cbi5wb3BvdmVyLXRpdGxlIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiA4cHggMTRweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWJlYjtcbiAgYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7XG59XG4ucG9wb3Zlci1jb250ZW50IHtcbiAgcGFkZGluZzogOXB4IDE0cHg7XG59XG4ucG9wb3ZlciA+IC5hcnJvdyxcbi5wb3BvdmVyID4gLmFycm93OmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cbi5wb3BvdmVyID4gLmFycm93IHtcbiAgYm9yZGVyLXdpZHRoOiAxMXB4O1xufVxuLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIge1xuICBib3JkZXItd2lkdGg6IDEwcHg7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ucG9wb3Zlci50b3AgPiAuYXJyb3cge1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYm90dG9tOiAtMTFweDtcbn1cbi5wb3BvdmVyLnRvcCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBib3R0b206IDFweDtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjZmZmO1xufVxuLnBvcG92ZXIucmlnaHQgPiAuYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogLTExcHg7XG4gIG1hcmdpbi10b3A6IC0xMXB4O1xuICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG4ucG9wb3Zlci5yaWdodCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBsZWZ0OiAxcHg7XG4gIGJvdHRvbTogLTEwcHg7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7XG59XG4ucG9wb3Zlci5ib3R0b20gPiAuYXJyb3cge1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgdG9wOiAtMTFweDtcbn1cbi5wb3BvdmVyLmJvdHRvbSA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB0b3A6IDFweDtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xufVxuLnBvcG92ZXIubGVmdCA+IC5hcnJvdyB7XG4gIHRvcDogNTAlO1xuICByaWdodDogLTExcHg7XG4gIG1hcmdpbi10b3A6IC0xMXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cbi5wb3BvdmVyLmxlZnQgPiAuYXJyb3c6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcmlnaHQ6IDFweDtcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZjtcbiAgYm90dG9tOiAtMTBweDtcbn1cbi5jYXJvdXNlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5jYXJvdXNlbC1pbm5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjZzIGVhc2UtaW4tb3V0IGxlZnQ7XG4gIC1vLXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDtcbiAgdHJhbnNpdGlvbjogMC42cyBlYXNlLWluLW91dCBsZWZ0O1xufVxuLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBpbWcsXG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSA+IGEgPiBpbWcge1xuICBsaW5lLWhlaWdodDogMTtcbn1cbkBtZWRpYSBhbGwgYW5kICh0cmFuc2Zvcm0tM2QpLCAoLXdlYmtpdC10cmFuc2Zvcm0tM2QpIHtcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0ge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XG4gICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XG4gICAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgLW1vei1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIC13ZWJraXQtcGVyc3BlY3RpdmU6IDEwMDBweDtcbiAgICAtbW96LXBlcnNwZWN0aXZlOiAxMDAwcHg7XG4gICAgcGVyc3BlY3RpdmU6IDEwMDBweDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5uZXh0LFxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5hY3RpdmUucmlnaHQge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xuICAgIGxlZnQ6IDA7XG4gIH1cbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0ucHJldixcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0uYWN0aXZlLmxlZnQge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7XG4gICAgbGVmdDogMDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5uZXh0LmxlZnQsXG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLnByZXYucmlnaHQsXG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgbGVmdDogMDtcbiAgfVxufVxuLmNhcm91c2VsLWlubmVyID4gLmFjdGl2ZSxcbi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LFxuLmNhcm91c2VsLWlubmVyID4gLnByZXYge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUge1xuICBsZWZ0OiAwO1xufVxuLmNhcm91c2VsLWlubmVyID4gLm5leHQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0IHtcbiAgbGVmdDogMTAwJTtcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgbGVmdDogLTEwMCU7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dC5sZWZ0LFxuLmNhcm91c2VsLWlubmVyID4gLnByZXYucmlnaHQge1xuICBsZWZ0OiAwO1xufVxuLmNhcm91c2VsLWlubmVyID4gLmFjdGl2ZS5sZWZ0IHtcbiAgbGVmdDogLTEwMCU7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLnJpZ2h0IHtcbiAgbGVmdDogMTAwJTtcbn1cbi5jYXJvdXNlbC1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDE1JTtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjYpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuLmNhcm91c2VsLWNvbnRyb2wubGVmdCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC41KSAwJSwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjUpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMDAwMSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjUpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMDAwMSkgMTAwJSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzgwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyMwMDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKTtcbn1cbi5jYXJvdXNlbC1jb250cm9sLnJpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjUpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzAwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyM4MDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKTtcbn1cbi5jYXJvdXNlbC1jb250cm9sOmhvdmVyLFxuLmNhcm91c2VsLWNvbnRyb2w6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBvcGFjaXR5OiAwLjk7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCk7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LFxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCxcbi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxuLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbWFyZ2luLXRvcDogLTEwcHg7XG4gIHotaW5kZXg6IDU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsXG4uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xufVxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCxcbi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCB7XG4gIHJpZ2h0OiA1MCU7XG4gIG1hcmdpbi1yaWdodDogLTEwcHg7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LFxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBmb250LWZhbWlseTogc2VyaWY7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMzknO1xufVxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dDpiZWZvcmUge1xuICBjb250ZW50OiAnXFwyMDNhJztcbn1cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDEwcHg7XG4gIGxlZnQ6IDUwJTtcbiAgei1pbmRleDogMTU7XG4gIHdpZHRoOiA2MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMzAlO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW46IDFweDtcbiAgdGV4dC1pbmRlbnQ6IC05OTlweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwIFxcOTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uY2Fyb3VzZWwtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMTUlO1xuICByaWdodDogMTUlO1xuICBib3R0b206IDIwcHg7XG4gIHotaW5kZXg6IDEwO1xuICBwYWRkaW5nLXRvcDogMjBweDtcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjYpO1xufVxuLmNhcm91c2VsLWNhcHRpb24gLmJ0biB7XG4gIHRleHQtc2hhZG93OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgd2lkdGg6IDMwcHg7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIG1hcmdpbi10b3A6IC0xMHB4O1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgfVxuICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldiB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICB9XG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbiAgfVxuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XG4gICAgbGVmdDogMjAlO1xuICAgIHJpZ2h0OiAyMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIH1cbiAgLmNhcm91c2VsLWluZGljYXRvcnMge1xuICAgIGJvdHRvbTogMjBweDtcbiAgfVxufVxuLmNsZWFyZml4OmJlZm9yZSxcbi5jbGVhcmZpeDphZnRlcixcbi5kbC1ob3Jpem9udGFsIGRkOmJlZm9yZSxcbi5kbC1ob3Jpem9udGFsIGRkOmFmdGVyLFxuLmNvbnRhaW5lcjpiZWZvcmUsXG4uY29udGFpbmVyOmFmdGVyLFxuLmNvbnRhaW5lci1mbHVpZDpiZWZvcmUsXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyLFxuLnJvdzpiZWZvcmUsXG4ucm93OmFmdGVyLFxuLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDpiZWZvcmUsXG4uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmFmdGVyLFxuLmJ0bi10b29sYmFyOmJlZm9yZSxcbi5idG4tdG9vbGJhcjphZnRlcixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmJlZm9yZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyLFxuLm5hdjpiZWZvcmUsXG4ubmF2OmFmdGVyLFxuLm5hdmJhcjpiZWZvcmUsXG4ubmF2YmFyOmFmdGVyLFxuLm5hdmJhci1oZWFkZXI6YmVmb3JlLFxuLm5hdmJhci1oZWFkZXI6YWZ0ZXIsXG4ubmF2YmFyLWNvbGxhcHNlOmJlZm9yZSxcbi5uYXZiYXItY29sbGFwc2U6YWZ0ZXIsXG4ucGFnZXI6YmVmb3JlLFxuLnBhZ2VyOmFmdGVyLFxuLnBhbmVsLWJvZHk6YmVmb3JlLFxuLnBhbmVsLWJvZHk6YWZ0ZXIsXG4ubW9kYWwtaGVhZGVyOmJlZm9yZSxcbi5tb2RhbC1oZWFkZXI6YWZ0ZXIsXG4ubW9kYWwtZm9vdGVyOmJlZm9yZSxcbi5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG4uY2xlYXJmaXg6YWZ0ZXIsXG4uZGwtaG9yaXpvbnRhbCBkZDphZnRlcixcbi5jb250YWluZXI6YWZ0ZXIsXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyLFxuLnJvdzphZnRlcixcbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIsXG4uYnRuLXRvb2xiYXI6YWZ0ZXIsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDphZnRlcixcbi5uYXY6YWZ0ZXIsXG4ubmF2YmFyOmFmdGVyLFxuLm5hdmJhci1oZWFkZXI6YWZ0ZXIsXG4ubmF2YmFyLWNvbGxhcHNlOmFmdGVyLFxuLnBhZ2VyOmFmdGVyLFxuLnBhbmVsLWJvZHk6YWZ0ZXIsXG4ubW9kYWwtaGVhZGVyOmFmdGVyLFxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuLmNlbnRlci1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuLnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbn1cbi5wdWxsLWxlZnQge1xuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xufVxuLmhpZGUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4uc2hvdyB7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG59XG4uaW52aXNpYmxlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLnRleHQtaGlkZSB7XG4gIGZvbnQ6IDAvMCBhO1xuICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xufVxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5hZmZpeCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbn1cbkAtbXMtdmlld3BvcnQge1xuICB3aWR0aDogZGV2aWNlLXdpZHRoO1xufVxuLnZpc2libGUteHMsXG4udmlzaWJsZS1zbSxcbi52aXNpYmxlLW1kLFxuLnZpc2libGUtbGcge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4udmlzaWJsZS14cy1ibG9jayxcbi52aXNpYmxlLXhzLWlubGluZSxcbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayxcbi52aXNpYmxlLXNtLWJsb2NrLFxuLnZpc2libGUtc20taW5saW5lLFxuLnZpc2libGUtc20taW5saW5lLWJsb2NrLFxuLnZpc2libGUtbWQtYmxvY2ssXG4udmlzaWJsZS1tZC1pbmxpbmUsXG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1sZy1ibG9jayxcbi52aXNpYmxlLWxnLWlubGluZSxcbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLXhzIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUteHMsXG4gIHRkLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMtaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgdHIudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGgudmlzaWJsZS1zbSxcbiAgdGQudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAudmlzaWJsZS1zbS1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC52aXNpYmxlLW1kIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgdHIudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGgudmlzaWJsZS1tZCxcbiAgdGQudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtbWQtYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAudmlzaWJsZS1tZC1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtbWQtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtbGcsXG4gIHRkLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAudmlzaWJsZS1sZy1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAudmlzaWJsZS1sZy1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuaGlkZGVuLXhzIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC5oaWRkZW4tc20ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC5oaWRkZW4tbWQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuaGlkZGVuLWxnIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcbiAgfVxuICB0ci52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcbiAgfVxuICB0aC52aXNpYmxlLXByaW50LFxuICB0ZC52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQtYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWlubGluZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC52aXNpYmxlLXByaW50LWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBwcmludCB7XG4gIC5oaWRkZW4tcHJpbnQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLyojIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLmNzcy5tYXAgKi8iLCIvKiEgbm9ybWFsaXplLmNzcyB2My4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbi8vXG4vLyAxLiBTZXQgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLlxuLy8gMi4gUHJldmVudCBpT1MgYW5kIElFIHRleHQgc2l6ZSBhZGp1c3QgYWZ0ZXIgZGV2aWNlIG9yaWVudGF0aW9uIGNoYW5nZSxcbi8vICAgIHdpdGhvdXQgZGlzYWJsaW5nIHVzZXIgem9vbS5cbi8vXG5cbmh0bWwge1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgLy8gMVxuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLy8gMlxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8vIDJcbn1cblxuLy9cbi8vIFJlbW92ZSBkZWZhdWx0IG1hcmdpbi5cbi8vXG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbi8vIEhUTUw1IGRpc3BsYXkgZGVmaW5pdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYW55IEhUTUw1IGVsZW1lbnQgaW4gSUUgOC85LlxuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGBkZXRhaWxzYCBvciBgc3VtbWFyeWAgaW4gSUUgMTAvMTFcbi8vIGFuZCBGaXJlZm94LlxuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGBtYWluYCBpbiBJRSAxMS5cbi8vXG5cbmFydGljbGUsXG5hc2lkZSxcbmRldGFpbHMsXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxuaGdyb3VwLFxubWFpbixcbm1lbnUsXG5uYXYsXG5zZWN0aW9uLFxuc3VtbWFyeSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vL1xuLy8gMS4gQ29ycmVjdCBgaW5saW5lLWJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGluIElFIDgvOS5cbi8vIDIuIE5vcm1hbGl6ZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgYHByb2dyZXNzYCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cbi8vXG5cbmF1ZGlvLFxuY2FudmFzLFxucHJvZ3Jlc3MsXG52aWRlbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLy8gMVxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IC8vIDJcbn1cblxuLy9cbi8vIFByZXZlbnQgbW9kZXJuIGJyb3dzZXJzIGZyb20gZGlzcGxheWluZyBgYXVkaW9gIHdpdGhvdXQgY29udHJvbHMuXG4vLyBSZW1vdmUgZXhjZXNzIGhlaWdodCBpbiBpT1MgNSBkZXZpY2VzLlxuLy9cblxuYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBgW2hpZGRlbl1gIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LzEwLlxuLy8gSGlkZSB0aGUgYHRlbXBsYXRlYCBlbGVtZW50IGluIElFIDgvOS8xMC8xMSwgU2FmYXJpLCBhbmQgRmlyZWZveCA8IDIyLlxuLy9cblxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIExpbmtzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgY29sb3IgZnJvbSBhY3RpdmUgbGlua3MgaW4gSUUgMTAuXG4vL1xuXG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8vXG4vLyBJbXByb3ZlIHJlYWRhYmlsaXR5IG9mIGZvY3VzZWQgZWxlbWVudHMgd2hlbiB0aGV5IGFyZSBhbHNvIGluIGFuXG4vLyBhY3RpdmUvaG92ZXIgc3RhdGUuXG4vL1xuXG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwO1xufVxuXG4vLyBUZXh0LWxldmVsIHNlbWFudGljc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkvMTAvMTEsIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDtcbn1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbi8vXG5cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLy9cbi8vIEFkZHJlc3MgdmFyaWFibGUgYGgxYCBmb250LXNpemUgYW5kIG1hcmdpbiB3aXRoaW4gYHNlY3Rpb25gIGFuZCBgYXJ0aWNsZWBcbi8vIGNvbnRleHRzIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LlxuLy9cblxubWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG4vL1xuLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgYWZmZWN0aW5nIGBsaW5lLWhlaWdodGAgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuLy8gRW1iZWRkZWQgY29udGVudFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSBib3JkZXIgd2hlbiBpbnNpZGUgYGFgIGVsZW1lbnQgaW4gSUUgOC85LzEwLlxuLy9cblxuaW1nIHtcbiAgYm9yZGVyOiAwO1xufVxuXG4vL1xuLy8gQ29ycmVjdCBvdmVyZmxvdyBub3QgaGlkZGVuIGluIElFIDkvMTAvMTEuXG4vL1xuXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIEdyb3VwaW5nIGNvbnRlbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBBZGRyZXNzIG1hcmdpbiBub3QgcHJlc2VudCBpbiBJRSA4LzkgYW5kIFNhZmFyaS5cbi8vXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5cbi8vXG4vLyBBZGRyZXNzIGRpZmZlcmVuY2VzIGJldHdlZW4gRmlyZWZveCBhbmQgb3RoZXIgYnJvd3NlcnMuXG4vL1xuXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBoZWlnaHQ6IDA7XG59XG5cbi8vXG4vLyBDb250YWluIG92ZXJmbG93IGluIGFsbCBicm93c2Vycy5cbi8vXG5cbnByZSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBvZGQgYGVtYC11bml0IGZvbnQgc2l6ZSByZW5kZXJpbmcgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG4vLyBGb3Jtc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIEtub3duIGxpbWl0YXRpb246IGJ5IGRlZmF1bHQsIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFggYWxsb3cgdmVyeSBsaW1pdGVkXG4vLyBzdHlsaW5nIG9mIGBzZWxlY3RgLCB1bmxlc3MgYSBgYm9yZGVyYCBwcm9wZXJ0eSBpcyBzZXQuXG4vL1xuXG4vL1xuLy8gMS4gQ29ycmVjdCBjb2xvciBub3QgYmVpbmcgaW5oZXJpdGVkLlxuLy8gICAgS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuXG4vLyAyLiBDb3JyZWN0IGZvbnQgcHJvcGVydGllcyBub3QgYmVpbmcgaW5oZXJpdGVkLlxuLy8gMy4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDsgLy8gMVxuICBmb250OiBpbmhlcml0OyAvLyAyXG4gIG1hcmdpbjogMDsgLy8gM1xufVxuXG4vL1xuLy8gQWRkcmVzcyBgb3ZlcmZsb3dgIHNldCB0byBgaGlkZGVuYCBpbiBJRSA4LzkvMTAvMTEuXG4vL1xuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLy9cbi8vIEFkZHJlc3MgaW5jb25zaXN0ZW50IGB0ZXh0LXRyYW5zZm9ybWAgaW5oZXJpdGFuY2UgZm9yIGBidXR0b25gIGFuZCBgc2VsZWN0YC5cbi8vIEFsbCBvdGhlciBmb3JtIGNvbnRyb2wgZWxlbWVudHMgZG8gbm90IGluaGVyaXQgYHRleHQtdHJhbnNmb3JtYCB2YWx1ZXMuXG4vLyBDb3JyZWN0IGBidXR0b25gIHN0eWxlIGluaGVyaXRhbmNlIGluIEZpcmVmb3gsIElFIDgvOS8xMC8xMSwgYW5kIE9wZXJhLlxuLy8gQ29ycmVjdCBgc2VsZWN0YCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LlxuLy9cblxuYnV0dG9uLFxuc2VsZWN0IHtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi8vXG4vLyAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYFxuLy8gICAgYW5kIGB2aWRlb2AgY29udHJvbHMuXG4vLyAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuXG4vLyAzLiBJbXByb3ZlIHVzYWJpbGl0eSBhbmQgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGJldHdlZW4gaW1hZ2UtdHlwZVxuLy8gICAgYGlucHV0YCBhbmQgb3RoZXJzLlxuLy9cblxuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCAvLyAxXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8vIDJcbiAgY3Vyc29yOiBwb2ludGVyOyAvLyAzXG59XG5cbi8vXG4vLyBSZS1zZXQgZGVmYXVsdCBjdXJzb3IgZm9yIGRpc2FibGVkIGVsZW1lbnRzLlxuLy9cblxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vL1xuLy8gUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIGJvcmRlciBpbiBGaXJlZm94IDQrLlxuLy9cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIEZpcmVmb3ggNCsgc2V0dGluZyBgbGluZS1oZWlnaHRgIG9uIGBpbnB1dGAgdXNpbmcgYCFpbXBvcnRhbnRgIGluXG4vLyB0aGUgVUEgc3R5bGVzaGVldC5cbi8vXG5cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLy9cbi8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgYXR0ZW1wdCB0byBzdHlsZSB0aGVzZSBlbGVtZW50cy5cbi8vIEZpcmVmb3gncyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHJlc3BlY3QgYm94LXNpemluZywgcGFkZGluZywgb3Igd2lkdGguXG4vL1xuLy8gMS4gQWRkcmVzcyBib3ggc2l6aW5nIHNldCB0byBgY29udGVudC1ib3hgIGluIElFIDgvOS8xMC5cbi8vIDIuIFJlbW92ZSBleGNlc3MgcGFkZGluZyBpbiBJRSA4LzkvMTAuXG4vL1xuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyAxXG4gIHBhZGRpbmc6IDA7IC8vIDJcbn1cblxuLy9cbi8vIEZpeCB0aGUgY3Vyc29yIHN0eWxlIGZvciBDaHJvbWUncyBpbmNyZW1lbnQvZGVjcmVtZW50IGJ1dHRvbnMuIEZvciBjZXJ0YWluXG4vLyBgZm9udC1zaXplYCB2YWx1ZXMgb2YgdGhlIGBpbnB1dGAsIGl0IGNhdXNlcyB0aGUgY3Vyc29yIHN0eWxlIG9mIHRoZVxuLy8gZGVjcmVtZW50IGJ1dHRvbiB0byBjaGFuZ2UgZnJvbSBgZGVmYXVsdGAgdG8gYHRleHRgLlxuLy9cblxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8vXG4vLyAxLiBBZGRyZXNzIGBhcHBlYXJhbmNlYCBzZXQgdG8gYHNlYXJjaGZpZWxkYCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbi8vIDIuIEFkZHJlc3MgYGJveC1zaXppbmdgIHNldCB0byBgYm9yZGVyLWJveGAgaW4gU2FmYXJpIGFuZCBDaHJvbWUuXG4vL1xuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8vIDFcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8vMlxufVxuXG4vL1xuLy8gUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIHNlYXJjaCBjYW5jZWwgYnV0dG9uIGluIFNhZmFyaSBhbmQgQ2hyb21lIG9uIE9TIFguXG4vLyBTYWZhcmkgKGJ1dCBub3QgQ2hyb21lKSBjbGlwcyB0aGUgY2FuY2VsIGJ1dHRvbiB3aGVuIHRoZSBzZWFyY2ggaW5wdXQgaGFzXG4vLyBwYWRkaW5nIChhbmQgYHRleHRmaWVsZGAgYXBwZWFyYW5jZSkuXG4vL1xuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLy9cbi8vIERlZmluZSBjb25zaXN0ZW50IGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZy5cbi8vXG5cbmZpZWxkc2V0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgbWFyZ2luOiAwIDJweDtcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xufVxuXG4vL1xuLy8gMS4gQ29ycmVjdCBgY29sb3JgIG5vdCBiZWluZyBpbmhlcml0ZWQgaW4gSUUgOC85LzEwLzExLlxuLy8gMi4gUmVtb3ZlIHBhZGRpbmcgc28gcGVvcGxlIGFyZW4ndCBjYXVnaHQgb3V0IGlmIHRoZXkgemVybyBvdXQgZmllbGRzZXRzLlxuLy9cblxubGVnZW5kIHtcbiAgYm9yZGVyOiAwOyAvLyAxXG4gIHBhZGRpbmc6IDA7IC8vIDJcbn1cblxuLy9cbi8vIFJlbW92ZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSA4LzkvMTAvMTEuXG4vL1xuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vL1xuLy8gRG9uJ3QgaW5oZXJpdCB0aGUgYGZvbnQtd2VpZ2h0YCAoYXBwbGllZCBieSBhIHJ1bGUgYWJvdmUpLlxuLy8gTk9URTogdGhlIGRlZmF1bHQgY2Fubm90IHNhZmVseSBiZSBjaGFuZ2VkIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFguXG4vL1xuXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vLyBUYWJsZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBSZW1vdmUgbW9zdCBzcGFjaW5nIGJldHdlZW4gdGFibGUgY2VsbHMuXG4vL1xuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgcGFkZGluZzogMDtcbn1cbiIsIi8qISBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2Jsb2IvbWFzdGVyL3NyYy9jc3MvbWFpbi5jc3MgKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFByaW50IHN0eWxlcy5cbi8vIElubGluZWQgdG8gYXZvaWQgdGhlIGFkZGl0aW9uYWwgSFRUUCByZXF1ZXN0OiBoNWJwLmNvbS9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5AbWVkaWEgcHJpbnQge1xuICAgICosXG4gICAgKjpiZWZvcmUsXG4gICAgKjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7IC8vIEJsYWNrIHByaW50cyBmYXN0ZXI6IGg1YnAuY29tL3NcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGEsXG4gICAgYTp2aXNpdGVkIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuXG4gICAgYVtocmVmXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICAgIH1cblxuICAgIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgKFwiIGF0dHIodGl0bGUpIFwiKVwiO1xuICAgIH1cblxuICAgIC8vIERvbid0IHNob3cgbGlua3MgdGhhdCBhcmUgZnJhZ21lbnQgaWRlbnRpZmllcnMsXG4gICAgLy8gb3IgdXNlIHRoZSBgamF2YXNjcmlwdDpgIHBzZXVkbyBwcm90b2NvbFxuICAgIGFbaHJlZl49XCIjXCJdOmFmdGVyLFxuICAgIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgdGhlYWQge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IC8vIGg1YnAuY29tL3RcbiAgICB9XG5cbiAgICB0cixcbiAgICBpbWcge1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIG9ycGhhbnM6IDM7XG4gICAgICAgIHdpZG93czogMztcbiAgICB9XG5cbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIHN0YXJ0XG5cbiAgICAvLyBCb290c3RyYXAgY29tcG9uZW50c1xuICAgIC5uYXZiYXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAuYnRuLFxuICAgIC5kcm9wdXAgPiAuYnRuIHtcbiAgICAgICAgPiAuY2FyZXQge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5sYWJlbCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gICAgfVxuXG4gICAgLnRhYmxlIHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSAhaW1wb3J0YW50O1xuXG4gICAgICAgIHRkLFxuICAgICAgICB0aCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRhYmxlLWJvcmRlcmVkIHtcbiAgICAgICAgdGgsXG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIGVuZFxufVxuIiwiLy9cbi8vIEdseXBoaWNvbnMgZm9yIEJvb3RzdHJhcFxuLy9cbi8vIFNpbmNlIGljb25zIGFyZSBmb250cywgdGhleSBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIHRleHQgaXMgcGxhY2VkIGFuZCBhcmVcbi8vIHRodXMgYXV0b21hdGljYWxseSBzaXplZCB0byBtYXRjaCB0aGUgc3Vycm91bmRpbmcgY2hpbGQuIFRvIHVzZSwgY3JlYXRlIGFuXG4vLyBpbmxpbmUgZWxlbWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjbGFzc2VzLCBsaWtlIHNvOlxuLy9cbi8vIDxhIGhyZWY9XCIjXCI+PHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXN0YXJcIj48L3NwYW4+IFN0YXI8L2E+XG5cbi8vIEltcG9ydCB0aGUgZm9udHNcbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgc3JjOiB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0uZW90Jyk7XG4gIHNyYzogdXJsKCdAe2ljb24tZm9udC1wYXRofUB7aWNvbi1mb250LW5hbWV9LmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgdXJsKCdAe2ljb24tZm9udC1wYXRofUB7aWNvbi1mb250LW5hbWV9LndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgnQHtpY29uLWZvbnQtcGF0aH1Ae2ljb24tZm9udC1uYW1lfS53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgdXJsKCdAe2ljb24tZm9udC1wYXRofUB7aWNvbi1mb250LW5hbWV9LnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICAgICB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0uc3ZnI0B7aWNvbi1mb250LXN2Zy1pZH0nKSBmb3JtYXQoJ3N2ZycpO1xufVxuXG4vLyBDYXRjaGFsbCBiYXNlY2xhc3Ncbi5nbHlwaGljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuLy8gSW5kaXZpZHVhbCBpY29uc1xuLmdseXBoaWNvbi1hc3RlcmlzayAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMDAyYVwiOyB9IH1cbi5nbHlwaGljb24tcGx1cyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDAwMmJcIjsgfSB9XG4uZ2x5cGhpY29uLWV1cm8sXG4uZ2x5cGhpY29uLWV1ciAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGFjXCI7IH0gfVxuLmdseXBoaWNvbi1taW51cyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjIxMlwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2MDFcIjsgfSB9XG4uZ2x5cGhpY29uLWVudmVsb3BlICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyNzA5XCI7IH0gfVxuLmdseXBoaWNvbi1wZW5jaWwgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjcwZlwiOyB9IH1cbi5nbHlwaGljb24tZ2xhc3MgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDFcIjsgfSB9XG4uZ2x5cGhpY29uLW11c2ljICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDAyXCI7IH0gfVxuLmdseXBoaWNvbi1zZWFyY2ggICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwM1wiOyB9IH1cbi5nbHlwaGljb24taGVhcnQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDVcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXIgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGFyLWVtcHR5ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwN1wiOyB9IH1cbi5nbHlwaGljb24tdXNlciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWZpbG0gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA5XCI7IH0gfVxuLmdseXBoaWNvbi10aC1sYXJnZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMFwiOyB9IH1cbi5nbHlwaGljb24tdGggICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXRoLWxpc3QgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDEyXCI7IH0gfVxuLmdseXBoaWNvbi1vayAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxM1wiOyB9IH1cbi5nbHlwaGljb24tcmVtb3ZlICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXpvb20taW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE1XCI7IH0gfVxuLmdseXBoaWNvbi16b29tLW91dCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNlwiOyB9IH1cbi5nbHlwaGljb24tb2ZmICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTdcIjsgfSB9XG4uZ2x5cGhpY29uLXNpZ25hbCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2cgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxOVwiOyB9IH1cbi5nbHlwaGljb24tdHJhc2ggICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhvbWUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDIxXCI7IH0gfVxuLmdseXBoaWNvbi1maWxlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMlwiOyB9IH1cbi5nbHlwaGljb24tdGltZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjNcIjsgfSB9XG4uZ2x5cGhpY29uLXJvYWQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI0XCI7IH0gfVxuLmdseXBoaWNvbi1kb3dubG9hZC1hbHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNVwiOyB9IH1cbi5nbHlwaGljb24tZG93bmxvYWQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjZcIjsgfSB9XG4uZ2x5cGhpY29uLXVwbG9hZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmJveCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyOFwiOyB9IH1cbi5nbHlwaGljb24tcGxheS1jaXJjbGUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjlcIjsgfSB9XG4uZ2x5cGhpY29uLXJlcGVhdCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMwXCI7IH0gfVxuLmdseXBoaWNvbi1yZWZyZXNoICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdC1hbHQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWxvY2sgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMzXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFnICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNFwiOyB9IH1cbi5nbHlwaGljb24taGVhZHBob25lcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXZvbHVtZS1vZmYgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM2XCI7IH0gfVxuLmdseXBoaWNvbi12b2x1bWUtZG93biAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzN1wiOyB9IH1cbi5nbHlwaGljb24tdm9sdW1lLXVwICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzhcIjsgfSB9XG4uZ2x5cGhpY29uLXFyY29kZSAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM5XCI7IH0gfVxuLmdseXBoaWNvbi1iYXJjb2RlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MFwiOyB9IH1cbi5nbHlwaGljb24tdGFnICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXRhZ3MgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQyXCI7IH0gfVxuLmdseXBoaWNvbi1ib29rICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0M1wiOyB9IH1cbi5nbHlwaGljb24tYm9va21hcmsgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXByaW50ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ1XCI7IH0gfVxuLmdseXBoaWNvbi1jYW1lcmEgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NlwiOyB9IH1cbi5nbHlwaGljb24tZm9udCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDdcIjsgfSB9XG4uZ2x5cGhpY29uLWJvbGQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ4XCI7IH0gfVxuLmdseXBoaWNvbi1pdGFsaWMgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0OVwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1oZWlnaHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtd2lkdGggICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDUxXCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1sZWZ0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MlwiOyB9IH1cbi5nbHlwaGljb24tYWxpZ24tY2VudGVyICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU0XCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTZcIjsgfSB9XG4uZ2x5cGhpY29uLWluZGVudC1sZWZ0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmRlbnQtcmlnaHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1OFwiOyB9IH1cbi5nbHlwaGljb24tZmFjZXRpbWUtdmlkZW8gICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTlcIjsgfSB9XG4uZ2x5cGhpY29uLXBpY3R1cmUgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDYwXCI7IH0gfVxuLmdseXBoaWNvbi1tYXAtbWFya2VyICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2MlwiOyB9IH1cbi5nbHlwaGljb24tYWRqdXN0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjNcIjsgfSB9XG4uZ2x5cGhpY29uLXRpbnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY0XCI7IH0gfVxuLmdseXBoaWNvbi1lZGl0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NVwiOyB9IH1cbi5nbHlwaGljb24tc2hhcmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjZcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZWNrICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY3XCI7IH0gfVxuLmdseXBoaWNvbi1tb3ZlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2OFwiOyB9IH1cbi5nbHlwaGljb24tc3RlcC1iYWNrd2FyZCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDcwXCI7IH0gfVxuLmdseXBoaWNvbi1iYWNrd2FyZCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MVwiOyB9IH1cbi5nbHlwaGljb24tcGxheSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzJcIjsgfSB9XG4uZ2x5cGhpY29uLXBhdXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDczXCI7IH0gfVxuLmdseXBoaWNvbi1zdG9wICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NFwiOyB9IH1cbi5nbHlwaGljb24tZm9yd2FyZCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtZm9yd2FyZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGVwLWZvcndhcmQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3N1wiOyB9IH1cbi5nbHlwaGljb24tZWplY3QgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZXZyb24tbGVmdCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc5XCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MFwiOyB9IH1cbi5nbHlwaGljb24tcGx1cy1zaWduICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODFcIjsgfSB9XG4uZ2x5cGhpY29uLW1pbnVzLXNpZ24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDgyXCI7IH0gfVxuLmdseXBoaWNvbi1yZW1vdmUtc2lnbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4M1wiOyB9IH1cbi5nbHlwaGljb24tb2stc2lnbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODRcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg1XCI7IH0gfVxuLmdseXBoaWNvbi1pbmZvLXNpZ24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NlwiOyB9IH1cbi5nbHlwaGljb24tc2NyZWVuc2hvdCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODdcIjsgfSB9XG4uZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg4XCI7IH0gfVxuLmdseXBoaWNvbi1vay1jaXJjbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4OVwiOyB9IH1cbi5nbHlwaGljb24tYmFuLWNpcmNsZSAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTBcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWxlZnQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDkxXCI7IH0gfVxuLmdseXBoaWNvbi1hcnJvdy1yaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MlwiOyB9IH1cbi5nbHlwaGljb24tYXJyb3ctdXAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWRvd24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk0XCI7IH0gfVxuLmdseXBoaWNvbi1zaGFyZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWZ1bGwgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTZcIjsgfSB9XG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk3XCI7IH0gfVxuLmdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwMVwiOyB9IH1cbi5nbHlwaGljb24tZ2lmdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDJcIjsgfSB9XG4uZ2x5cGhpY29uLWxlYWYgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTAzXCI7IH0gfVxuLmdseXBoaWNvbi1maXJlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNFwiOyB9IH1cbi5nbHlwaGljb24tZXllLW9wZW4gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDVcIjsgfSB9XG4uZ2x5cGhpY29uLWV5ZS1jbG9zZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA2XCI7IH0gfVxuLmdseXBoaWNvbi13YXJuaW5nLXNpZ24gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwN1wiOyB9IH1cbi5nbHlwaGljb24tcGxhbmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWNhbGVuZGFyICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA5XCI7IH0gfVxuLmdseXBoaWNvbi1yYW5kb20gICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMFwiOyB9IH1cbi5nbHlwaGljb24tY29tbWVudCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTFcIjsgfSB9XG4uZ2x5cGhpY29uLW1hZ25ldCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTEyXCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXVwICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExM1wiOyB9IH1cbi5nbHlwaGljb24tY2hldnJvbi1kb3duICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXJldHdlZXQgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE1XCI7IH0gfVxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNlwiOyB9IH1cbi5nbHlwaGljb24tZm9sZGVyLWNsb3NlICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTdcIjsgfSB9XG4uZ2x5cGhpY29uLWZvbGRlci1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE4XCI7IH0gfVxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWwgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExOVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhkZCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTIxXCI7IH0gfVxuLmdseXBoaWNvbi1idWxsaG9ybiAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMlwiOyB9IH1cbi5nbHlwaGljb24tYmVsbCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI0XCI7IH0gfVxuLmdseXBoaWNvbi10aHVtYnMtdXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNVwiOyB9IH1cbi5nbHlwaGljb24tdGh1bWJzLWRvd24gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtcmlnaHQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI3XCI7IH0gfVxuLmdseXBoaWNvbi1oYW5kLWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyOFwiOyB9IH1cbi5nbHlwaGljb24taGFuZC11cCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjlcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMwXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMVwiOyB9IH1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWxlZnQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy11cCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMzXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93biAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNFwiOyB9IH1cbi5nbHlwaGljb24tZ2xvYmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXdyZW5jaCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM2XCI7IH0gfVxuLmdseXBoaWNvbi10YXNrcyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzN1wiOyB9IH1cbi5nbHlwaGljb24tZmlsdGVyICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzhcIjsgfSB9XG4uZ2x5cGhpY29uLWJyaWVmY2FzZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM5XCI7IH0gfVxuLmdseXBoaWNvbi1mdWxsc2NyZWVuICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MFwiOyB9IH1cbi5nbHlwaGljb24tZGFzaGJvYXJkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXBhcGVyY2xpcCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQyXCI7IH0gfVxuLmdseXBoaWNvbi1oZWFydC1lbXB0eSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0M1wiOyB9IH1cbi5nbHlwaGljb24tbGluayAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXBob25lICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ1XCI7IH0gfVxuLmdseXBoaWNvbi1wdXNocGluICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NlwiOyB9IH1cbi5nbHlwaGljb24tdXNkICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDhcIjsgfSB9XG4uZ2x5cGhpY29uLWdicCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ5XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MFwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTFcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQtYWx0ICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTUyXCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1M1wiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlci1hbHQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTRcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcyAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU1XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0IHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NlwiOyB9IH1cbi5nbHlwaGljb24tdW5jaGVja2VkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTdcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cGFuZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1OVwiOyB9IH1cbi5nbHlwaGljb24tY29sbGFwc2UtdXAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjBcIjsgfSB9XG4uZ2x5cGhpY29uLWxvZy1pbiAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTYxXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFzaCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MlwiOyB9IH1cbi5nbHlwaGljb24tbG9nLW91dCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjNcIjsgfSB9XG4uZ2x5cGhpY29uLW5ldy13aW5kb3cgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWNvcmQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NVwiOyB9IH1cbi5nbHlwaGljb24tc2F2ZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjZcIjsgfSB9XG4uZ2x5cGhpY29uLW9wZW4gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY3XCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlZCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2OFwiOyB9IH1cbi5nbHlwaGljb24taW1wb3J0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cG9ydCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTcwXCI7IH0gfVxuLmdseXBoaWNvbi1zZW5kICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MVwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LWRpc2sgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzJcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTczXCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NFwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LXNhdmUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc2XCI7IH0gfVxuLmdseXBoaWNvbi1jcmVkaXQtY2FyZCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3N1wiOyB9IH1cbi5nbHlwaGljb24tdHJhbnNmZXIgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWN1dGxlcnkgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc5XCI7IH0gfVxuLmdseXBoaWNvbi1oZWFkZXIgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MFwiOyB9IH1cbi5nbHlwaGljb24tY29tcHJlc3NlZCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODFcIjsgfSB9XG4uZ2x5cGhpY29uLWVhcnBob25lICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTgyXCI7IH0gfVxuLmdseXBoaWNvbi1waG9uZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4M1wiOyB9IH1cbi5nbHlwaGljb24tdG93ZXIgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODRcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXRzICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg1XCI7IH0gfVxuLmdseXBoaWNvbi1zZC12aWRlbyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NlwiOyB9IH1cbi5nbHlwaGljb24taGQtdmlkZW8gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODdcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnRpdGxlcyAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg4XCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW8gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4OVwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtZG9sYnkgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTBcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLTUtMSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTkxXCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC02LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MlwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtNy0xICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyayAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5NVwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTdcIjsgfSB9XG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk4XCI7IH0gfVxuLmdseXBoaWNvbi10cmVlLWNvbmlmZXIgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5OVwiOyB9IH1cbi5nbHlwaGljb24tdHJlZS1kZWNpZHVvdXMgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDBcIjsgfSB9XG4uZ2x5cGhpY29uLWNkICAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjAxXCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlLWZpbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMlwiOyB9IH1cbi5nbHlwaGljb24tb3Blbi1maWxlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDNcIjsgfSB9XG4uZ2x5cGhpY29uLWxldmVsLXVwICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA0XCI7IH0gfVxuLmdseXBoaWNvbi1jb3B5ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNVwiOyB9IH1cbi5nbHlwaGljb24tcGFzdGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDZcIjsgfSB9XG4vLyBUaGUgZm9sbG93aW5nIDIgR2x5cGhpY29ucyBhcmUgb21pdHRlZCBmb3IgdGhlIHRpbWUgYmVpbmcgYmVjYXVzZVxuLy8gdGhleSBjdXJyZW50bHkgdXNlIFVuaWNvZGUgY29kZXBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZVxuLy8gQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLiBPbGRlciBidWdneSB2ZXJzaW9ucyBvZiBXZWJLaXQgY2FuJ3QgaGFuZGxlXG4vLyBub24tQk1QIGNvZGVwb2ludHMgaW4gQ1NTIHN0cmluZyBlc2NhcGVzLCBhbmQgdGh1cyBjYW4ndCBkaXNwbGF5IHRoZXNlIHR3byBpY29ucy5cbi8vIE5vdGFibHksIHRoZSBidWcgYWZmZWN0cyBzb21lIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBBbmRyb2lkIEJyb3dzZXIuXG4vLyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTAxMDZcbi8vIC5nbHlwaGljb24tZG9vciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDFmNmFhXCI7IH0gfVxuLy8gLmdseXBoaWNvbi1rZXkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMWY1MTFcIjsgfSB9XG4uZ2x5cGhpY29uLWFsZXJ0ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA5XCI7IH0gfVxuLmdseXBoaWNvbi1lcXVhbGl6ZXIgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxMFwiOyB9IH1cbi5nbHlwaGljb24ta2luZyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZWVuICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjEyXCI7IH0gfVxuLmdseXBoaWNvbi1wYXduICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxM1wiOyB9IH1cbi5nbHlwaGljb24tYmlzaG9wICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTRcIjsgfSB9XG4uZ2x5cGhpY29uLWtuaWdodCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE1XCI7IH0gfVxuLmdseXBoaWNvbi1iYWJ5LWZvcm11bGEgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxNlwiOyB9IH1cbi5nbHlwaGljb24tdGVudCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2ZmFcIjsgfSB9XG4uZ2x5cGhpY29uLWJsYWNrYm9hcmQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE4XCI7IH0gfVxuLmdseXBoaWNvbi1iZWQgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxOVwiOyB9IH1cbi5nbHlwaGljb24tYXBwbGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGY4ZmZcIjsgfSB9XG4uZ2x5cGhpY29uLWVyYXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjIxXCI7IH0gfVxuLmdseXBoaWNvbi1ob3VyZ2xhc3MgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjMxYlwiOyB9IH1cbi5nbHlwaGljb24tbGFtcCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWR1cGxpY2F0ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI0XCI7IH0gfVxuLmdseXBoaWNvbi1waWdneS1iYW5rICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyNVwiOyB9IH1cbi5nbHlwaGljb24tc2Npc3NvcnMgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWJpdGNvaW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH0gfVxuLmdseXBoaWNvbi1idGMgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyN1wiOyB9IH1cbi5nbHlwaGljb24teGJ0ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XG4uZ2x5cGhpY29uLXllbiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwwMGE1XCI7IH0gfVxuLmdseXBoaWNvbi1qcHkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMDBhNVwiOyB9IH1cbi5nbHlwaGljb24tcnVibGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYmRcIjsgfSB9XG4uZ2x5cGhpY29uLXJ1YiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGJkXCI7IH0gfVxuLmdseXBoaWNvbi1zY2FsZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzMFwiOyB9IH1cbi5nbHlwaGljb24taWNlLWxvbGx5ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzFcIjsgfSB9XG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjMyXCI7IH0gfVxuLmdseXBoaWNvbi1lZHVjYXRpb24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzM1wiOyB9IH1cbi5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzRcIjsgfSB9XG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM1XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWhhbWJ1cmdlciAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzNlwiOyB9IH1cbi5nbHlwaGljb24tbW9kYWwtd2luZG93ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzdcIjsgfSB9XG4uZ2x5cGhpY29uLW9pbCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM4XCI7IH0gfVxuLmdseXBoaWNvbi1ncmFpbiAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzOVwiOyB9IH1cbi5nbHlwaGljb24tc3VuZ2xhc3NlcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtc2l6ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQxXCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LWNvbG9yICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0MlwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDNcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3AgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ0XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0NVwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWx7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDZcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1sZWZ0ICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ3XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdmVydGljYWwgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0OFwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0ICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDlcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0ICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUwXCI7IH0gfVxuLmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1MVwiOyB9IH1cbi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTJcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUzXCI7IH0gfVxuLmdseXBoaWNvbi1jb25zb2xlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1NFwiOyB9IH1cbi5nbHlwaGljb24tc3VwZXJzY3JpcHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTVcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnNjcmlwdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU2XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1N1wiOyB9IH1cbi5nbHlwaGljb24tbWVudS1yaWdodCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNThcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU5XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LXVwICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI2MFwiOyB9IH1cbiIsIi8vXG4vLyBTY2FmZm9sZGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBSZXNldCB0aGUgYm94LXNpemluZ1xuLy9cbi8vIEhlYWRzIHVwISBUaGlzIHJlc2V0IG1heSBjYXVzZSBjb25mbGljdHMgd2l0aCBzb21lIHRoaXJkLXBhcnR5IHdpZGdldHMuXG4vLyBGb3IgcmVjb21tZW5kYXRpb25zIG9uIHJlc29sdmluZyBzdWNoIGNvbmZsaWN0cywgc2VlXG4vLyBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9nZXR0aW5nLXN0YXJ0ZWQvI3RoaXJkLWJveC1zaXppbmdcbioge1xuICAuYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cbio6YmVmb3JlLFxuKjphZnRlciB7XG4gIC5ib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuXG5cbi8vIEJvZHkgcmVzZXRcblxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApO1xufVxuXG5ib2R5IHtcbiAgZm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1iYXNlO1xuICBmb250LXNpemU6IEBmb250LXNpemUtYmFzZTtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogQHRleHQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6IEBib2R5LWJnO1xufVxuXG4vLyBSZXNldCBmb250cyBmb3IgcmVsZXZhbnQgZWxlbWVudHNcbmlucHV0LFxuYnV0dG9uLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxuXG4vLyBMaW5rc1xuXG5hIHtcbiAgY29sb3I6IEBsaW5rLWNvbG9yO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6IEBsaW5rLWhvdmVyLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogQGxpbmstaG92ZXItZGVjb3JhdGlvbjtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIC50YWItZm9jdXMoKTtcbiAgfVxufVxuXG5cbi8vIEZpZ3VyZXNcbi8vXG4vLyBXZSByZXNldCB0aGlzIGhlcmUgYmVjYXVzZSBwcmV2aW91c2x5IE5vcm1hbGl6ZSBoYWQgbm8gYGZpZ3VyZWAgbWFyZ2lucy4gVGhpc1xuLy8gZW5zdXJlcyB3ZSBkb24ndCBicmVhayBhbnlvbmUncyB1c2Ugb2YgdGhlIGVsZW1lbnQuXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMDtcbn1cblxuXG4vLyBJbWFnZXNcblxuaW1nIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLy8gUmVzcG9uc2l2ZSBpbWFnZXMgKGVuc3VyZSBpbWFnZXMgZG9uJ3Qgc2NhbGUgYmV5b25kIHRoZWlyIHBhcmVudHMpXG4uaW1nLXJlc3BvbnNpdmUge1xuICAuaW1nLXJlc3BvbnNpdmUoKTtcbn1cblxuLy8gUm91bmRlZCBjb3JuZXJzXG4uaW1nLXJvdW5kZWQge1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1sYXJnZTtcbn1cblxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xuLy9cbi8vIEhlYWRzIHVwISBUaGlzIGlzIG1peGluLWVkIGludG8gdGh1bWJuYWlscy5sZXNzIGZvciBgLnRodW1ibmFpbGAuXG4uaW1nLXRodW1ibmFpbCB7XG4gIHBhZGRpbmc6IEB0aHVtYm5haWwtcGFkZGluZztcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAdGh1bWJuYWlsLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCBAdGh1bWJuYWlsLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQHRodW1ibmFpbC1ib3JkZXItcmFkaXVzO1xuICAudHJhbnNpdGlvbihhbGwgLjJzIGVhc2UtaW4tb3V0KTtcblxuICAvLyBLZWVwIHRoZW0gYXQgbW9zdCAxMDAlIHdpZGVcbiAgLmltZy1yZXNwb25zaXZlKGlubGluZS1ibG9jayk7XG59XG5cbi8vIFBlcmZlY3QgY2lyY2xlXG4uaW1nLWNpcmNsZSB7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTsgLy8gc2V0IHJhZGl1cyBpbiBwZXJjZW50c1xufVxuXG5cbi8vIEhvcml6b250YWwgcnVsZXNcblxuaHIge1xuICBtYXJnaW4tdG9wOiAgICBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgQGhyLWJvcmRlcjtcbn1cblxuXG4vLyBPbmx5IGRpc3BsYXkgY29udGVudCB0byBzY3JlZW4gcmVhZGVyc1xuLy9cbi8vIFNlZTogaHR0cDovL2ExMXlwcm9qZWN0LmNvbS9wb3N0cy9ob3ctdG8taGlkZS1jb250ZW50L1xuXG4uc3Itb25seSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcDogcmVjdCgwLDAsMCwwKTtcbiAgYm9yZGVyOiAwO1xufVxuXG4vLyBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCAuc3Itb25seSB0byBvbmx5IGRpc3BsYXkgY29udGVudCB3aGVuIGl0J3MgZm9jdXNlZC5cbi8vIFVzZWZ1bCBmb3IgXCJTa2lwIHRvIG1haW4gY29udGVudFwiIGxpbmtzOyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9OT1RFLVdDQUcyMC1URUNIUy0yMDEzMDkwNS9HMVxuLy8gQ3JlZGl0OiBIVE1MNSBCb2lsZXJwbGF0ZVxuXG4uc3Itb25seS1mb2N1c2FibGUge1xuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIGNsaXA6IGF1dG87XG4gIH1cbn1cblxuXG4vLyBpT1MgXCJjbGlja2FibGUgZWxlbWVudHNcIiBmaXggZm9yIHJvbGU9XCJidXR0b25cIlxuLy9cbi8vIEZpeGVzIFwiY2xpY2thYmlsaXR5XCIgaXNzdWUgKGFuZCBtb3JlIGdlbmVyYWxseSwgdGhlIGZpcmluZyBvZiBldmVudHMgc3VjaCBhcyBmb2N1cyBhcyB3ZWxsKVxuLy8gZm9yIHRyYWRpdGlvbmFsbHkgbm9uLWZvY3VzYWJsZSBlbGVtZW50cyB3aXRoIHJvbGU9XCJidXR0b25cIlxuLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9jbGljayNTYWZhcmlfTW9iaWxlXG5cbltyb2xlPVwiYnV0dG9uXCJdIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIiwiLy8gVmVuZG9yIFByZWZpeGVzXG4vL1xuLy8gQWxsIHZlbmRvciBtaXhpbnMgYXJlIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGR1ZSB0byB0aGUgaW50cm9kdWN0aW9uIG9mXG4vLyBBdXRvcHJlZml4ZXIgaW4gb3VyIEdydW50ZmlsZS4gVGhleSBoYXZlIGJlZW4gcmVtb3ZlZCBpbiB2NC5cblxuLy8gLSBBbmltYXRpb25zXG4vLyAtIEJhY2tmYWNlIHZpc2liaWxpdHlcbi8vIC0gQm94IHNoYWRvd1xuLy8gLSBCb3ggc2l6aW5nXG4vLyAtIENvbnRlbnQgY29sdW1uc1xuLy8gLSBIeXBoZW5zXG4vLyAtIFBsYWNlaG9sZGVyIHRleHRcbi8vIC0gVHJhbnNmb3JtYXRpb25zXG4vLyAtIFRyYW5zaXRpb25zXG4vLyAtIFVzZXIgU2VsZWN0XG5cblxuLy8gQW5pbWF0aW9uc1xuLmFuaW1hdGlvbihAYW5pbWF0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBAYW5pbWF0aW9uO1xuICAgICAgIC1vLWFuaW1hdGlvbjogQGFuaW1hdGlvbjtcbiAgICAgICAgICBhbmltYXRpb246IEBhbmltYXRpb247XG59XG4uYW5pbWF0aW9uLW5hbWUoQG5hbWUpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogQG5hbWU7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IEBuYW1lO1xufVxuLmFuaW1hdGlvbi1kdXJhdGlvbihAZHVyYXRpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IEBkdXJhdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IEBkdXJhdGlvbjtcbn1cbi5hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uKEB0aW1pbmctZnVuY3Rpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAdGltaW5nLWZ1bmN0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IEB0aW1pbmctZnVuY3Rpb247XG59XG4uYW5pbWF0aW9uLWRlbGF5KEBkZWxheSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogQGRlbGF5O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogQGRlbGF5O1xufVxuLmFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQoQGl0ZXJhdGlvbi1jb3VudCkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IEBpdGVyYXRpb24tY291bnQ7XG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogQGl0ZXJhdGlvbi1jb3VudDtcbn1cbi5hbmltYXRpb24tZGlyZWN0aW9uKEBkaXJlY3Rpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiBAZGlyZWN0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IEBkaXJlY3Rpb247XG59XG4uYW5pbWF0aW9uLWZpbGwtbW9kZShAZmlsbC1tb2RlKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogQGZpbGwtbW9kZTtcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBAZmlsbC1tb2RlO1xufVxuXG4vLyBCYWNrZmFjZSB2aXNpYmlsaXR5XG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gZmxpY2tlcmluZyB3aGVuIHVzaW5nIENTUyAzRCB0cmFuc2Zvcm1zLlxuLy8gRGVmYXVsdCB2YWx1ZSBpcyBgdmlzaWJsZWAsIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBgaGlkZGVuYFxuXG4uYmFja2ZhY2UtdmlzaWJpbGl0eShAdmlzaWJpbGl0eSkge1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IEB2aXNpYmlsaXR5O1xuICAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6IEB2aXNpYmlsaXR5O1xuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IEB2aXNpYmlsaXR5O1xufVxuXG4vLyBEcm9wIHNoYWRvd3Ncbi8vXG4vLyBOb3RlOiBEZXByZWNhdGVkIGAuYm94LXNoYWRvdygpYCBhcyBvZiB2My4xLjAgc2luY2UgYWxsIG9mIEJvb3RzdHJhcCdzXG4vLyBzdXBwb3J0ZWQgYnJvd3NlcnMgdGhhdCBoYXZlIGJveCBzaGFkb3cgY2FwYWJpbGl0aWVzIG5vdyBzdXBwb3J0IGl0LlxuXG4uYm94LXNoYWRvdyhAc2hhZG93KSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogQHNoYWRvdzsgLy8gaU9TIDw0LjMgJiBBbmRyb2lkIDw0LjFcbiAgICAgICAgICBib3gtc2hhZG93OiBAc2hhZG93O1xufVxuXG4vLyBCb3ggc2l6aW5nXG4uYm94LXNpemluZyhAYm94bW9kZWwpIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBAYm94bW9kZWw7XG4gICAgIC1tb3otYm94LXNpemluZzogQGJveG1vZGVsO1xuICAgICAgICAgIGJveC1zaXppbmc6IEBib3htb2RlbDtcbn1cblxuLy8gQ1NTMyBDb250ZW50IENvbHVtbnNcbi5jb250ZW50LWNvbHVtbnMoQGNvbHVtbi1jb3VudDsgQGNvbHVtbi1nYXA6IEBncmlkLWd1dHRlci13aWR0aCkge1xuICAtd2Via2l0LWNvbHVtbi1jb3VudDogQGNvbHVtbi1jb3VudDtcbiAgICAgLW1vei1jb2x1bW4tY291bnQ6IEBjb2x1bW4tY291bnQ7XG4gICAgICAgICAgY29sdW1uLWNvdW50OiBAY29sdW1uLWNvdW50O1xuICAtd2Via2l0LWNvbHVtbi1nYXA6IEBjb2x1bW4tZ2FwO1xuICAgICAtbW96LWNvbHVtbi1nYXA6IEBjb2x1bW4tZ2FwO1xuICAgICAgICAgIGNvbHVtbi1nYXA6IEBjb2x1bW4tZ2FwO1xufVxuXG4vLyBPcHRpb25hbCBoeXBoZW5hdGlvblxuLmh5cGhlbnMoQG1vZGU6IGF1dG8pIHtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAtd2Via2l0LWh5cGhlbnM6IEBtb2RlO1xuICAgICAtbW96LWh5cGhlbnM6IEBtb2RlO1xuICAgICAgLW1zLWh5cGhlbnM6IEBtb2RlOyAvLyBJRTEwK1xuICAgICAgIC1vLWh5cGhlbnM6IEBtb2RlO1xuICAgICAgICAgIGh5cGhlbnM6IEBtb2RlO1xufVxuXG4vLyBQbGFjZWhvbGRlciB0ZXh0XG4ucGxhY2Vob2xkZXIoQGNvbG9yOiBAaW5wdXQtY29sb3ItcGxhY2Vob2xkZXIpIHtcbiAgLy8gRmlyZWZveFxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogQGNvbG9yO1xuICAgIG9wYWNpdHk6IDE7IC8vIE92ZXJyaWRlIEZpcmVmb3gncyB1bnVzdWFsIGRlZmF1bHQgb3BhY2l0eTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzExNTI2XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyBjb2xvcjogQGNvbG9yOyB9IC8vIEludGVybmV0IEV4cGxvcmVyIDEwK1xuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyICB7IGNvbG9yOiBAY29sb3I7IH0gLy8gU2FmYXJpIGFuZCBDaHJvbWVcbn1cblxuLy8gVHJhbnNmb3JtYXRpb25zXG4uc2NhbGUoQHJhdGlvKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoQHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlKEByYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pO1xufVxuLnNjYWxlKEByYXRpb1g7IEByYXRpb1kpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKEByYXRpb1gsIEByYXRpb1kpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoQHJhdGlvWCwgQHJhdGlvWSk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZShAcmF0aW9YLCBAcmF0aW9ZKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKEByYXRpb1gsIEByYXRpb1kpO1xufVxuLnNjYWxlWChAcmF0aW8pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWChAcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGVYKEByYXRpbyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZVgoQHJhdGlvKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWChAcmF0aW8pO1xufVxuLnNjYWxlWShAcmF0aW8pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWShAcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGVZKEByYXRpbyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZVkoQHJhdGlvKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWShAcmF0aW8pO1xufVxuLnNrZXcoQHg7IEB5KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBza2V3WChAeCkgc2tld1koQHkpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2tld1goQHgpIHNrZXdZKEB5KTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvNDg4NTsgSUU5K1xuICAgICAgIC1vLXRyYW5zZm9ybTogc2tld1goQHgpIHNrZXdZKEB5KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNrZXdYKEB4KSBza2V3WShAeSk7XG59XG4udHJhbnNsYXRlKEB4OyBAeSkge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKEB4LCBAeSk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHgsIEB5KTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZShAeCwgQHkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKEB4LCBAeSk7XG59XG4udHJhbnNsYXRlM2QoQHg7IEB5OyBAeikge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoQHgsIEB5LCBAeik7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZChAeCwgQHksIEB6KTtcbn1cbi5yb3RhdGUoQGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZShAZGVncmVlcyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoQGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZShAZGVncmVlcyk7XG59XG4ucm90YXRlWChAZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWChAZGVncmVlcyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGVYKEBkZWdyZWVzKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZVgoQGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlWChAZGVncmVlcyk7XG59XG4ucm90YXRlWShAZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWShAZGVncmVlcyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGVZKEBkZWdyZWVzKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZVkoQGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlWShAZGVncmVlcyk7XG59XG4ucGVyc3BlY3RpdmUoQHBlcnNwZWN0aXZlKSB7XG4gIC13ZWJraXQtcGVyc3BlY3RpdmU6IEBwZXJzcGVjdGl2ZTtcbiAgICAgLW1vei1wZXJzcGVjdGl2ZTogQHBlcnNwZWN0aXZlO1xuICAgICAgICAgIHBlcnNwZWN0aXZlOiBAcGVyc3BlY3RpdmU7XG59XG4ucGVyc3BlY3RpdmUtb3JpZ2luKEBwZXJzcGVjdGl2ZSkge1xuICAtd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbjogQHBlcnNwZWN0aXZlO1xuICAgICAtbW96LXBlcnNwZWN0aXZlLW9yaWdpbjogQHBlcnNwZWN0aXZlO1xuICAgICAgICAgIHBlcnNwZWN0aXZlLW9yaWdpbjogQHBlcnNwZWN0aXZlO1xufVxuLnRyYW5zZm9ybS1vcmlnaW4oQG9yaWdpbikge1xuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IEBvcmlnaW47XG4gICAgIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogQG9yaWdpbjtcbiAgICAgIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiBAb3JpZ2luOyAvLyBJRTkgb25seVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IEBvcmlnaW47XG59XG5cblxuLy8gVHJhbnNpdGlvbnNcblxuLnRyYW5zaXRpb24oQHRyYW5zaXRpb24pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBAdHJhbnNpdGlvbjtcbiAgICAgICAtby10cmFuc2l0aW9uOiBAdHJhbnNpdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBAdHJhbnNpdGlvbjtcbn1cbi50cmFuc2l0aW9uLXByb3BlcnR5KEB0cmFuc2l0aW9uLXByb3BlcnR5KSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogQHRyYW5zaXRpb24tcHJvcGVydHk7XG4gICAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogQHRyYW5zaXRpb24tcHJvcGVydHk7XG59XG4udHJhbnNpdGlvbi1kZWxheShAdHJhbnNpdGlvbi1kZWxheSkge1xuICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IEB0cmFuc2l0aW9uLWRlbGF5O1xuICAgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IEB0cmFuc2l0aW9uLWRlbGF5O1xufVxuLnRyYW5zaXRpb24tZHVyYXRpb24oQHRyYW5zaXRpb24tZHVyYXRpb24pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiBAdHJhbnNpdGlvbi1kdXJhdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiBAdHJhbnNpdGlvbi1kdXJhdGlvbjtcbn1cbi50cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbihAdGltaW5nLWZ1bmN0aW9uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IEB0aW1pbmctZnVuY3Rpb247XG4gICAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IEB0aW1pbmctZnVuY3Rpb247XG59XG4udHJhbnNpdGlvbi10cmFuc2Zvcm0oQHRyYW5zaXRpb24pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBAdHJhbnNpdGlvbjtcbiAgICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSBAdHJhbnNpdGlvbjtcbiAgICAgICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gQHRyYW5zaXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIEB0cmFuc2l0aW9uO1xufVxuXG5cbi8vIFVzZXIgc2VsZWN0XG4vLyBGb3Igc2VsZWN0aW5nIHRleHQgb24gdGhlIHBhZ2VcblxuLnVzZXItc2VsZWN0KEBzZWxlY3QpIHtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogQHNlbGVjdDtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogQHNlbGVjdDtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogQHNlbGVjdDsgLy8gSUUxMCtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogQHNlbGVjdDtcbn1cbiIsIi8vIFdlYktpdC1zdHlsZSBmb2N1c1xuXG4udGFiLWZvY3VzKCkge1xuICAvLyBEZWZhdWx0XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICAvLyBXZWJLaXRcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cbiIsIi8vIEltYWdlIE1peGluc1xuLy8gLSBSZXNwb25zaXZlIGltYWdlXG4vLyAtIFJldGluYSBpbWFnZVxuXG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2Vcbi8vXG4vLyBLZWVwIGltYWdlcyBmcm9tIHNjYWxpbmcgYmV5b25kIHRoZSB3aWR0aCBvZiB0aGVpciBwYXJlbnRzLlxuLmltZy1yZXNwb25zaXZlKEBkaXNwbGF5OiBibG9jaykge1xuICBkaXNwbGF5OiBAZGlzcGxheTtcbiAgbWF4LXdpZHRoOiAxMDAlOyAvLyBQYXJ0IDE6IFNldCBhIG1heGltdW0gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICBoZWlnaHQ6IGF1dG87IC8vIFBhcnQgMjogU2NhbGUgdGhlIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHdpZHRoLCBvdGhlcndpc2UgeW91IGdldCBzdHJldGNoaW5nXG59XG5cblxuLy8gUmV0aW5hIGltYWdlXG4vL1xuLy8gU2hvcnQgcmV0aW5hIG1peGluIGZvciBzZXR0aW5nIGJhY2tncm91bmQtaW1hZ2UgYW5kIC1zaXplLiBOb3RlIHRoYXQgdGhlXG4vLyBzcGVsbGluZyBvZiBgbWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvYCBpcyBpbnRlbnRpb25hbC5cbi5pbWctcmV0aW5hKEBmaWxlLTF4OyBAZmlsZS0yeDsgQHdpZHRoLTF4OyBAaGVpZ2h0LTF4KSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIkB7ZmlsZS0xeH1cIik7XG5cbiAgQG1lZGlhXG4gIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcbiAgb25seSBzY3JlZW4gYW5kICggICBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMi8xKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgIG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgICAgICAgICBtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgICAgICAgICAgbWluLXJlc29sdXRpb246IDJkcHB4KSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiQHtmaWxlLTJ4fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IEB3aWR0aC0xeCBAaGVpZ2h0LTF4O1xuICB9XG59XG4iLCIvL1xuLy8gVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBIZWFkaW5nc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XG4gIGZvbnQtZmFtaWx5OiBAaGVhZGluZ3MtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiBAaGVhZGluZ3MtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiBAaGVhZGluZ3MtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiBAaGVhZGluZ3MtY29sb3I7XG5cbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogQGhlYWRpbmdzLXNtYWxsLWNvbG9yO1xuICB9XG59XG5cbmgxLCAuaDEsXG5oMiwgLmgyLFxuaDMsIC5oMyB7XG4gIG1hcmdpbi10b3A6IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luLWJvdHRvbTogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogNjUlO1xuICB9XG59XG5oNCwgLmg0LFxuaDUsIC5oNSxcbmg2LCAuaDYge1xuICBtYXJnaW4tdG9wOiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIG1hcmdpbi1ib3R0b206IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcblxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBmb250LXNpemU6IDc1JTtcbiAgfVxufVxuXG5oMSwgLmgxIHsgZm9udC1zaXplOiBAZm9udC1zaXplLWgxOyB9XG5oMiwgLmgyIHsgZm9udC1zaXplOiBAZm9udC1zaXplLWgyOyB9XG5oMywgLmgzIHsgZm9udC1zaXplOiBAZm9udC1zaXplLWgzOyB9XG5oNCwgLmg0IHsgZm9udC1zaXplOiBAZm9udC1zaXplLWg0OyB9XG5oNSwgLmg1IHsgZm9udC1zaXplOiBAZm9udC1zaXplLWg1OyB9XG5oNiwgLmg2IHsgZm9udC1zaXplOiBAZm9udC1zaXplLWg2OyB9XG5cblxuLy8gQm9keSB0ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnAge1xuICBtYXJnaW46IDAgMCAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG59XG5cbi5sZWFkIHtcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6IGZsb29yKChAZm9udC1zaXplLWJhc2UgKiAxLjE1KSk7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgZm9udC1zaXplOiAoQGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgfVxufVxuXG5cbi8vIEVtcGhhc2lzICYgbWlzY1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBFeDogKDEycHggc21hbGwgZm9udCAvIDE0cHggYmFzZSBmb250KSAqIDEwMCUgPSBhYm91dCA4NSVcbnNtYWxsLFxuLnNtYWxsIHtcbiAgZm9udC1zaXplOiBmbG9vcigoMTAwJSAqIEBmb250LXNpemUtc21hbGwgLyBAZm9udC1zaXplLWJhc2UpKTtcbn1cblxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQHN0YXRlLXdhcm5pbmctYmc7XG4gIHBhZGRpbmc6IC4yZW07XG59XG5cbi8vIEFsaWdubWVudFxuLnRleHQtbGVmdCAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4udGV4dC1yaWdodCAgICAgICAgICB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4udGV4dC1jZW50ZXIgICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRlcjsgfVxuLnRleHQtanVzdGlmeSAgICAgICAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9XG4udGV4dC1ub3dyYXAgICAgICAgICB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLy8gVHJhbnNmb3JtYXRpb25cbi50ZXh0LWxvd2VyY2FzZSAgICAgIHsgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTsgfVxuLnRleHQtdXBwZXJjYXNlICAgICAgeyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4udGV4dC1jYXBpdGFsaXplICAgICB7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyB9XG5cbi8vIENvbnRleHR1YWwgY29sb3JzXG4udGV4dC1tdXRlZCB7XG4gIGNvbG9yOiBAdGV4dC1tdXRlZDtcbn1cbi50ZXh0LXByaW1hcnkge1xuICAudGV4dC1lbXBoYXNpcy12YXJpYW50KEBicmFuZC1wcmltYXJ5KTtcbn1cbi50ZXh0LXN1Y2Nlc3Mge1xuICAudGV4dC1lbXBoYXNpcy12YXJpYW50KEBzdGF0ZS1zdWNjZXNzLXRleHQpO1xufVxuLnRleHQtaW5mbyB7XG4gIC50ZXh0LWVtcGhhc2lzLXZhcmlhbnQoQHN0YXRlLWluZm8tdGV4dCk7XG59XG4udGV4dC13YXJuaW5nIHtcbiAgLnRleHQtZW1waGFzaXMtdmFyaWFudChAc3RhdGUtd2FybmluZy10ZXh0KTtcbn1cbi50ZXh0LWRhbmdlciB7XG4gIC50ZXh0LWVtcGhhc2lzLXZhcmlhbnQoQHN0YXRlLWRhbmdlci10ZXh0KTtcbn1cblxuLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xuLy8gRm9yIG5vdyB3ZSdsbCBsZWF2ZSB0aGVzZSBhbG9uZ3NpZGUgdGhlIHRleHQgY2xhc3NlcyB1bnRpbCB2NCB3aGVuIHdlIGNhblxuLy8gc2FmZWx5IHNoaWZ0IHRoaW5ncyBhcm91bmQgKHBlciBTZW1WZXIgcnVsZXMpLlxuLmJnLXByaW1hcnkge1xuICAvLyBHaXZlbiB0aGUgY29udHJhc3QgaGVyZSwgdGhpcyBpcyB0aGUgb25seSBjbGFzcyB0byBoYXZlIGl0cyBjb2xvciBpbnZlcnRlZFxuICAvLyBhdXRvbWF0aWNhbGx5LlxuICBjb2xvcjogI2ZmZjtcbiAgLmJnLXZhcmlhbnQoQGJyYW5kLXByaW1hcnkpO1xufVxuLmJnLXN1Y2Nlc3Mge1xuICAuYmctdmFyaWFudChAc3RhdGUtc3VjY2Vzcy1iZyk7XG59XG4uYmctaW5mbyB7XG4gIC5iZy12YXJpYW50KEBzdGF0ZS1pbmZvLWJnKTtcbn1cbi5iZy13YXJuaW5nIHtcbiAgLmJnLXZhcmlhbnQoQHN0YXRlLXdhcm5pbmctYmcpO1xufVxuLmJnLWRhbmdlciB7XG4gIC5iZy12YXJpYW50KEBzdGF0ZS1kYW5nZXItYmcpO1xufVxuXG5cbi8vIFBhZ2UgaGVhZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiAoKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpIC0gMSk7XG4gIG1hcmdpbjogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAqIDIpIDAgQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjtcbn1cblxuXG4vLyBMaXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBVbm9yZGVyZWQgYW5kIE9yZGVyZWQgbGlzdHNcbnVsLFxub2wge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIHVsLFxuICBvbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBMaXN0IG9wdGlvbnNcblxuLy8gVW5zdHlsZWQga2VlcHMgbGlzdCBpdGVtcyBibG9jayBsZXZlbCwganVzdCByZW1vdmVzIGRlZmF1bHQgYnJvd3NlciBwYWRkaW5nIGFuZCBsaXN0LXN0eWxlXG4ubGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLy8gSW5saW5lIHR1cm5zIGxpc3QgaXRlbXMgaW50byBpbmxpbmUtYmxvY2tcbi5saXN0LWlubGluZSB7XG4gIC5saXN0LXVuc3R5bGVkKCk7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xuXG4gID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gIH1cbn1cblxuLy8gRGVzY3JpcHRpb24gTGlzdHNcbmRsIHtcbiAgbWFyZ2luLXRvcDogMDsgLy8gUmVtb3ZlIGJyb3dzZXIgZGVmYXVsdFxuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG59XG5kdCxcbmRkIHtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xufVxuZHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmRkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7IC8vIFVuZG8gYnJvd3NlciBkZWZhdWx0XG59XG5cbi8vIEhvcml6b250YWwgZGVzY3JpcHRpb24gbGlzdHNcbi8vXG4vLyBEZWZhdWx0cyB0byBiZWluZyBzdGFja2VkIHdpdGhvdXQgYW55IG9mIHRoZSBiZWxvdyBzdHlsZXMgYXBwbGllZCwgdW50aWwgdGhlXG4vLyBncmlkIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCAoZGVmYXVsdCBvZiB+NzY4cHgpLlxuXG4uZGwtaG9yaXpvbnRhbCB7XG4gIGRkIHtcbiAgICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTsgLy8gQ2xlYXIgdGhlIGZsb2F0ZWQgYGR0YCBpZiBhbiBlbXB0eSBgZGRgIGlzIHByZXNlbnRcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZGwtaG9yaXpvbnRhbC1icmVha3BvaW50KSB7XG4gICAgZHQge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB3aWR0aDogKEBkbC1ob3Jpem9udGFsLW9mZnNldCAtIDIwKTtcbiAgICAgIGNsZWFyOiBsZWZ0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAudGV4dC1vdmVyZmxvdygpO1xuICAgIH1cbiAgICBkZCB7XG4gICAgICBtYXJnaW4tbGVmdDogQGRsLWhvcml6b250YWwtb2Zmc2V0O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIE1pc2Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWJicmV2aWF0aW9ucyBhbmQgYWNyb255bXNcbmFiYnJbdGl0bGVdLFxuLy8gQWRkIGRhdGEtKiBhdHRyaWJ1dGUgdG8gaGVscCBvdXQgb3VyIHRvb2x0aXAgcGx1Z2luLCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy81MjU3XG5hYmJyW2RhdGEtb3JpZ2luYWwtdGl0bGVdIHtcbiAgY3Vyc29yOiBoZWxwO1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkIEBhYmJyLWJvcmRlci1jb2xvcjtcbn1cbi5pbml0aWFsaXNtIHtcbiAgZm9udC1zaXplOiA5MCU7XG4gIC50ZXh0LXVwcGVyY2FzZSgpO1xufVxuXG4vLyBCbG9ja3F1b3Rlc1xuYmxvY2txdW90ZSB7XG4gIHBhZGRpbmc6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKSBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIG1hcmdpbjogMCAwIEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zaXplOiBAYmxvY2txdW90ZS1mb250LXNpemU7XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgQGJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yO1xuXG4gIHAsXG4gIHVsLFxuICBvbCB7XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gTm90ZTogRGVwcmVjYXRlZCBzbWFsbCBhbmQgLnNtYWxsIGFzIG9mIHYzLjEuMFxuICAvLyBDb250ZXh0OiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjYwXG4gIGZvb3RlcixcbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiA4MCU7IC8vIGJhY2sgdG8gZGVmYXVsdCBmb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgY29sb3I6IEBibG9ja3F1b3RlLXNtYWxsLWNvbG9yO1xuXG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAxNCBcXDAwQTAnOyAvLyBlbSBkYXNoLCBuYnNwXG4gICAgfVxuICB9XG59XG5cbi8vIE9wcG9zaXRlIGFsaWdubWVudCBvZiBibG9ja3F1b3RlXG4vL1xuLy8gSGVhZHMgdXA6IGBibG9ja3F1b3RlLnB1bGwtcmlnaHRgIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMS4wLlxuLmJsb2NrcXVvdGUtcmV2ZXJzZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCB7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgQGJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItbGVmdDogMDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgLy8gQWNjb3VudCBmb3IgY2l0YXRpb25cbiAgZm9vdGVyLFxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICAmOmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyB9XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnXFwwMEEwIFxcMjAxNCc7IC8vIG5ic3AsIGVtIGRhc2hcbiAgICB9XG4gIH1cbn1cblxuLy8gQWRkcmVzc2VzXG5hZGRyZXNzIHtcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbn1cbiIsIi8vIFR5cG9ncmFwaHlcblxuLnRleHQtZW1waGFzaXMtdmFyaWFudChAY29sb3IpIHtcbiAgY29sb3I6IEBjb2xvcjtcbiAgYSY6aG92ZXIsXG4gIGEmOmZvY3VzIHtcbiAgICBjb2xvcjogZGFya2VuKEBjb2xvciwgMTAlKTtcbiAgfVxufVxuIiwiLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xuXG4uYmctdmFyaWFudChAY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGNvbG9yO1xuICBhJjpob3ZlcixcbiAgYSY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihAY29sb3IsIDEwJSk7XG4gIH1cbn1cbiIsIi8vIFRleHQgb3ZlcmZsb3dcbi8vIFJlcXVpcmVzIGlubGluZS1ibG9jayBvciBibG9jayBmb3IgcHJvcGVyIHN0eWxpbmdcblxuLnRleHQtb3ZlcmZsb3coKSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLy9cbi8vIENvZGUgKGlubGluZSBhbmQgYmxvY2spXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIElubGluZSBhbmQgYmxvY2sgY29kZSBzdHlsZXNcbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1tb25vc3BhY2U7XG59XG5cbi8vIElubGluZSBjb2RlXG5jb2RlIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiBAY29kZS1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGNvZGUtYmc7XG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XG59XG5cbi8vIFVzZXIgaW5wdXQgdHlwaWNhbGx5IGVudGVyZWQgdmlhIGtleWJvYXJkXG5rYmQge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6IEBrYmQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6IEBrYmQtYmc7XG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLXNtYWxsO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSk7XG5cbiAga2JkIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogMTAwJTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG59XG5cbi8vIEJsb2NrcyBvZiBjb2RlXG5wcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogKChAbGluZS1oZWlnaHQtY29tcHV0ZWQgLSAxKSAvIDIpO1xuICBtYXJnaW46IDAgMCAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIGZvbnQtc2l6ZTogKEBmb250LXNpemUtYmFzZSAtIDEpOyAvLyAxNHB4IHRvIDEzcHhcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgY29sb3I6IEBwcmUtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6IEBwcmUtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIEBwcmUtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIEFjY291bnQgZm9yIHNvbWUgY29kZSBvdXRwdXRzIHRoYXQgcGxhY2UgY29kZSB0YWdzIGluIHByZSB0YWdzXG4gIGNvZGUge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEVuYWJsZSBzY3JvbGxhYmxlIGJsb2NrcyBvZiBjb2RlXG4ucHJlLXNjcm9sbGFibGUge1xuICBtYXgtaGVpZ2h0OiBAcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuIiwiLy9cbi8vIEdyaWQgc3lzdGVtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIENvbnRhaW5lciB3aWR0aHNcbi8vXG4vLyBTZXQgdGhlIGNvbnRhaW5lciB3aWR0aCwgYW5kIG92ZXJyaWRlIGl0IGZvciBmaXhlZCBuYXZiYXJzIGluIG1lZGlhIHF1ZXJpZXMuXG5cbi5jb250YWluZXIge1xuICAuY29udGFpbmVyLWZpeGVkKCk7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgd2lkdGg6IEBjb250YWluZXItc207XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSB7XG4gICAgd2lkdGg6IEBjb250YWluZXItbWQ7XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XG4gICAgd2lkdGg6IEBjb250YWluZXItbGc7XG4gIH1cbn1cblxuXG4vLyBGbHVpZCBjb250YWluZXJcbi8vXG4vLyBVdGlsaXplcyB0aGUgbWl4aW4gbWVhbnQgZm9yIGZpeGVkIHdpZHRoIGNvbnRhaW5lcnMsIGJ1dCB3aXRob3V0IGFueSBkZWZpbmVkXG4vLyB3aWR0aCBmb3IgZmx1aWQsIGZ1bGwgd2lkdGggbGF5b3V0cy5cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIC5jb250YWluZXItZml4ZWQoKTtcbn1cblxuXG4vLyBSb3dcbi8vXG4vLyBSb3dzIGNvbnRhaW4gYW5kIGNsZWFyIHRoZSBmbG9hdHMgb2YgeW91ciBjb2x1bW5zLlxuXG4ucm93IHtcbiAgLm1ha2Utcm93KCk7XG59XG5cblxuLy8gQ29sdW1uc1xuLy9cbi8vIENvbW1vbiBzdHlsZXMgZm9yIHNtYWxsIGFuZCBsYXJnZSBncmlkIGNvbHVtbnNcblxuLm1ha2UtZ3JpZC1jb2x1bW5zKCk7XG5cblxuLy8gRXh0cmEgc21hbGwgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciBleHRyYSBzbWFsbCBkZXZpY2VzIGxpa2Vcbi8vIHNtYXJ0cGhvbmVzLlxuXG4ubWFrZS1ncmlkKHhzKTtcblxuXG4vLyBTbWFsbCBncmlkXG4vL1xuLy8gQ29sdW1ucywgb2Zmc2V0cywgcHVzaGVzLCBhbmQgcHVsbHMgZm9yIHRoZSBzbWFsbCBkZXZpY2UgcmFuZ2UsIGZyb20gcGhvbmVzXG4vLyB0byB0YWJsZXRzLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgLm1ha2UtZ3JpZChzbSk7XG59XG5cblxuLy8gTWVkaXVtIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgdGhlIGRlc2t0b3AgZGV2aWNlIHJhbmdlLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1tZC1taW4pIHtcbiAgLm1ha2UtZ3JpZChtZCk7XG59XG5cblxuLy8gTGFyZ2UgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgbGFyZ2UgZGVza3RvcCBkZXZpY2UgcmFuZ2UuXG5cbkBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAubWFrZS1ncmlkKGxnKTtcbn1cbiIsIi8vIEdyaWQgc3lzdGVtXG4vL1xuLy8gR2VuZXJhdGUgc2VtYW50aWMgZ3JpZCBjb2x1bW5zIHdpdGggdGhlc2UgbWl4aW5zLlxuXG4vLyBDZW50ZXJlZCBjb250YWluZXIgZWxlbWVudFxuLmNvbnRhaW5lci1maXhlZChAZ3V0dGVyOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAgZmxvb3IoKEBndXR0ZXIgLyAyKSk7XG4gIHBhZGRpbmctcmlnaHQ6IGNlaWwoKEBndXR0ZXIgLyAyKSk7XG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xufVxuXG4vLyBDcmVhdGVzIGEgd3JhcHBlciBmb3IgYSBzZXJpZXMgb2YgY29sdW1uc1xuLm1ha2Utcm93KEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xuICBtYXJnaW4tbGVmdDogIGNlaWwoKEBndXR0ZXIgLyAtMikpO1xuICBtYXJnaW4tcmlnaHQ6IGZsb29yKChAZ3V0dGVyIC8gLTIpKTtcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBleHRyYSBzbWFsbCBjb2x1bW5zXG4ubWFrZS14cy1jb2x1bW4oQGNvbHVtbnM7IEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgcGFkZGluZy1sZWZ0OiAgKEBndXR0ZXIgLyAyKTtcbiAgcGFkZGluZy1yaWdodDogKEBndXR0ZXIgLyAyKTtcbn1cbi5tYWtlLXhzLWNvbHVtbi1vZmZzZXQoQGNvbHVtbnMpIHtcbiAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xufVxuLm1ha2UteHMtY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcbiAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG59XG4ubWFrZS14cy1jb2x1bW4tcHVsbChAY29sdW1ucykge1xuICByaWdodDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBzbWFsbCBjb2x1bW5zXG4ubWFrZS1zbS1jb2x1bW4oQGNvbHVtbnM7IEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgcGFkZGluZy1sZWZ0OiAgKEBndXR0ZXIgLyAyKTtcbiAgcGFkZGluZy1yaWdodDogKEBndXR0ZXIgLyAyKTtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5tYWtlLXNtLWNvbHVtbi1vZmZzZXQoQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG4ubWFrZS1zbS1jb2x1bW4tcHVzaChAY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgICBsZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLm1ha2Utc20tY29sdW1uLXB1bGwoQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBtZWRpdW0gY29sdW1uc1xuLm1ha2UtbWQtY29sdW1uKEBjb2x1bW5zOyBAZ3V0dGVyOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogIChAZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG4ubWFrZS1tZC1jb2x1bW4tb2Zmc2V0KEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLm1ha2UtbWQtY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5tYWtlLW1kLWNvbHVtbi1wdWxsKEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuXG4vLyBHZW5lcmF0ZSB0aGUgbGFyZ2UgY29sdW1uc1xuLm1ha2UtbGctY29sdW1uKEBjb2x1bW5zOyBAZ3V0dGVyOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogIChAZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG4ubWFrZS1sZy1jb2x1bW4tb2Zmc2V0KEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLm1ha2UtbGctY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5tYWtlLWxnLWNvbHVtbi1wdWxsKEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuIiwiLy8gRnJhbWV3b3JrIGdyaWQgZ2VuZXJhdGlvblxuLy9cbi8vIFVzZWQgb25seSBieSBCb290c3RyYXAgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGdyaWQgY2xhc3NlcyBnaXZlblxuLy8gYW55IHZhbHVlIG9mIGBAZ3JpZC1jb2x1bW5zYC5cblxuLm1ha2UtZ3JpZC1jb2x1bW5zKCkge1xuICAvLyBDb21tb24gc3R5bGVzIGZvciBhbGwgc2l6ZXMgb2YgZ3JpZCBjb2x1bW5zLCB3aWR0aHMgMS0xMlxuICAuY29sKEBpbmRleCkgeyAvLyBpbml0aWFsXG4gICAgQGl0ZW06IH5cIi5jb2wteHMtQHtpbmRleH0sIC5jb2wtc20tQHtpbmRleH0sIC5jb2wtbWQtQHtpbmRleH0sIC5jb2wtbGctQHtpbmRleH1cIjtcbiAgICAuY29sKChAaW5kZXggKyAxKSwgQGl0ZW0pO1xuICB9XG4gIC5jb2woQGluZGV4LCBAbGlzdCkgd2hlbiAoQGluZGV4ID08IEBncmlkLWNvbHVtbnMpIHsgLy8gZ2VuZXJhbDsgXCI9PFwiIGlzbid0IGEgdHlwb1xuICAgIEBpdGVtOiB+XCIuY29sLXhzLUB7aW5kZXh9LCAuY29sLXNtLUB7aW5kZXh9LCAuY29sLW1kLUB7aW5kZXh9LCAuY29sLWxnLUB7aW5kZXh9XCI7XG4gICAgLmNvbCgoQGluZGV4ICsgMSksIH5cIkB7bGlzdH0sIEB7aXRlbX1cIik7XG4gIH1cbiAgLmNvbChAaW5kZXgsIEBsaXN0KSB3aGVuIChAaW5kZXggPiBAZ3JpZC1jb2x1bW5zKSB7IC8vIHRlcm1pbmFsXG4gICAgQHtsaXN0fSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAvLyBQcmV2ZW50IGNvbHVtbnMgZnJvbSBjb2xsYXBzaW5nIHdoZW4gZW1wdHlcbiAgICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICAgIC8vIElubmVyIGd1dHRlciB2aWEgcGFkZGluZ1xuICAgICAgcGFkZGluZy1sZWZ0OiAgY2VpbCgoQGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikpO1xuICAgICAgcGFkZGluZy1yaWdodDogZmxvb3IoKEBncmlkLWd1dHRlci13aWR0aCAvIDIpKTtcbiAgICB9XG4gIH1cbiAgLmNvbCgxKTsgLy8ga2lja3N0YXJ0IGl0XG59XG5cbi5mbG9hdC1ncmlkLWNvbHVtbnMoQGNsYXNzKSB7XG4gIC5jb2woQGluZGV4KSB7IC8vIGluaXRpYWxcbiAgICBAaXRlbTogflwiLmNvbC1Ae2NsYXNzfS1Ae2luZGV4fVwiO1xuICAgIC5jb2woKEBpbmRleCArIDEpLCBAaXRlbSk7XG4gIH1cbiAgLmNvbChAaW5kZXgsIEBsaXN0KSB3aGVuIChAaW5kZXggPTwgQGdyaWQtY29sdW1ucykgeyAvLyBnZW5lcmFsXG4gICAgQGl0ZW06IH5cIi5jb2wtQHtjbGFzc30tQHtpbmRleH1cIjtcbiAgICAuY29sKChAaW5kZXggKyAxKSwgflwiQHtsaXN0fSwgQHtpdGVtfVwiKTtcbiAgfVxuICAuY29sKEBpbmRleCwgQGxpc3QpIHdoZW4gKEBpbmRleCA+IEBncmlkLWNvbHVtbnMpIHsgLy8gdGVybWluYWxcbiAgICBAe2xpc3R9IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cbiAgfVxuICAuY29sKDEpOyAvLyBraWNrc3RhcnQgaXRcbn1cblxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHdpZHRoKSBhbmQgKEBpbmRleCA+IDApIHtcbiAgLmNvbC1Ae2NsYXNzfS1Ae2luZGV4fSB7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKEBpbmRleCAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1c2gpIGFuZCAoQGluZGV4ID4gMCkge1xuICAuY29sLUB7Y2xhc3N9LXB1c2gtQHtpbmRleH0ge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKEBpbmRleCAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1c2gpIGFuZCAoQGluZGV4ID0gMCkge1xuICAuY29sLUB7Y2xhc3N9LXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bztcbiAgfVxufVxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1bGwpIGFuZCAoQGluZGV4ID4gMCkge1xuICAuY29sLUB7Y2xhc3N9LXB1bGwtQHtpbmRleH0ge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKChAaW5kZXggLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5jYWxjLWdyaWQtY29sdW1uKEBpbmRleCwgQGNsYXNzLCBAdHlwZSkgd2hlbiAoQHR5cGUgPSBwdWxsKSBhbmQgKEBpbmRleCA9IDApIHtcbiAgLmNvbC1Ae2NsYXNzfS1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG59XG4uY2FsYy1ncmlkLWNvbHVtbihAaW5kZXgsIEBjbGFzcywgQHR5cGUpIHdoZW4gKEB0eXBlID0gb2Zmc2V0KSB7XG4gIC5jb2wtQHtjbGFzc30tb2Zmc2V0LUB7aW5kZXh9IHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoQGluZGV4IC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5cbi8vIEJhc2ljIGxvb3BpbmcgaW4gTEVTU1xuLmxvb3AtZ3JpZC1jb2x1bW5zKEBpbmRleCwgQGNsYXNzLCBAdHlwZSkgd2hlbiAoQGluZGV4ID49IDApIHtcbiAgLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKTtcbiAgLy8gbmV4dCBpdGVyYXRpb25cbiAgLmxvb3AtZ3JpZC1jb2x1bW5zKChAaW5kZXggLSAxKSwgQGNsYXNzLCBAdHlwZSk7XG59XG5cbi8vIENyZWF0ZSBncmlkIGZvciBzcGVjaWZpYyBjbGFzc1xuLm1ha2UtZ3JpZChAY2xhc3MpIHtcbiAgLmZsb2F0LWdyaWQtY29sdW1ucyhAY2xhc3MpO1xuICAubG9vcC1ncmlkLWNvbHVtbnMoQGdyaWQtY29sdW1ucywgQGNsYXNzLCB3aWR0aCk7XG4gIC5sb29wLWdyaWQtY29sdW1ucyhAZ3JpZC1jb2x1bW5zLCBAY2xhc3MsIHB1bGwpO1xuICAubG9vcC1ncmlkLWNvbHVtbnMoQGdyaWQtY29sdW1ucywgQGNsYXNzLCBwdXNoKTtcbiAgLmxvb3AtZ3JpZC1jb2x1bW5zKEBncmlkLWNvbHVtbnMsIEBjbGFzcywgb2Zmc2V0KTtcbn1cbiIsIi8vXG4vLyBUYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxudGFibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAdGFibGUtYmc7XG59XG5jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IEB0YWJsZS1jZWxsLXBhZGRpbmc7XG4gIHBhZGRpbmctYm90dG9tOiBAdGFibGUtY2VsbC1wYWRkaW5nO1xuICBjb2xvcjogQHRleHQtbXV0ZWQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG50aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cblxuLy8gQmFzZWxpbmUgc3R5bGVzXG5cbi50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgLy8gQ2VsbHNcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIHBhZGRpbmc6IEB0YWJsZS1jZWxsLXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEB0YWJsZS1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEJvdHRvbSBhbGlnbiBmb3IgY29sdW1uIGhlYWRpbmdzXG4gID4gdGhlYWQgPiB0ciA+IHRoIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG4gIC8vIFJlbW92ZSB0b3AgYm9yZGVyIGZyb20gdGhlYWQgYnkgZGVmYXVsdFxuICA+IGNhcHRpb24gKyB0aGVhZCxcbiAgPiBjb2xncm91cCArIHRoZWFkLFxuICA+IHRoZWFkOmZpcnN0LWNoaWxkIHtcbiAgICA+IHRyOmZpcnN0LWNoaWxkIHtcbiAgICAgID4gdGgsXG4gICAgICA+IHRkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gQWNjb3VudCBmb3IgbXVsdGlwbGUgdGJvZHkgaW5zdGFuY2VzXG4gID4gdGJvZHkgKyB0Ym9keSB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIEB0YWJsZS1ib3JkZXItY29sb3I7XG4gIH1cblxuICAvLyBOZXN0aW5nXG4gIC50YWJsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJvZHktYmc7XG4gIH1cbn1cblxuXG4vLyBDb25kZW5zZWQgdGFibGUgdy8gaGFsZiBwYWRkaW5nXG5cbi50YWJsZS1jb25kZW5zZWQge1xuICA+IHRoZWFkLFxuICA+IHRib2R5LFxuICA+IHRmb290IHtcbiAgICA+IHRyIHtcbiAgICAgID4gdGgsXG4gICAgICA+IHRkIHtcbiAgICAgICAgcGFkZGluZzogQHRhYmxlLWNvbmRlbnNlZC1jZWxsLXBhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy8gQm9yZGVyZWQgdmVyc2lvblxuLy9cbi8vIEFkZCBib3JkZXJzIGFsbCBhcm91bmQgdGhlIHRhYmxlIGFuZCBiZXR3ZWVuIGFsbCB0aGUgY29sdW1ucy5cblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgQHRhYmxlLWJvcmRlci1jb2xvcjtcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEB0YWJsZS1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gID4gdGhlYWQgPiB0ciB7XG4gICAgPiB0aCxcbiAgICA+IHRkIHtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBaZWJyYS1zdHJpcGluZ1xuLy9cbi8vIERlZmF1bHQgemVicmEtc3RyaXBlIHN0eWxlcyAoYWx0ZXJuYXRpbmcgZ3JheSBhbmQgdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMpXG5cbi50YWJsZS1zdHJpcGVkIHtcbiAgPiB0Ym9keSA+IHRyOm50aC1vZi10eXBlKG9kZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB0YWJsZS1iZy1hY2NlbnQ7XG4gIH1cbn1cblxuXG4vLyBIb3ZlciBlZmZlY3Rcbi8vXG4vLyBQbGFjZWQgaGVyZSBzaW5jZSBpdCBoYXMgdG8gY29tZSBhZnRlciB0aGUgcG90ZW50aWFsIHplYnJhIHN0cmlwaW5nXG5cbi50YWJsZS1ob3ZlciB7XG4gID4gdGJvZHkgPiB0cjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHRhYmxlLWJnLWhvdmVyO1xuICB9XG59XG5cblxuLy8gVGFibGUgY2VsbCBzaXppbmdcbi8vXG4vLyBSZXNldCBkZWZhdWx0IHRhYmxlIGJlaGF2aW9yXG5cbnRhYmxlIGNvbFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYzsgLy8gUHJldmVudCBib3JkZXIgaGlkaW5nIGluIEZpcmVmb3ggYW5kIElFOS0xMSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2MjMpXG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG50YWJsZSB7XG4gIHRkLFxuICB0aCB7XG4gICAgJltjbGFzcyo9XCJjb2wtXCJdIHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7IC8vIFByZXZlbnQgYm9yZGVyIGhpZGluZyBpbiBGaXJlZm94IGFuZCBJRTktMTEgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjIzKVxuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFRhYmxlIGJhY2tncm91bmRzXG4vL1xuLy8gRXhhY3Qgc2VsZWN0b3JzIGJlbG93IHJlcXVpcmVkIHRvIG92ZXJyaWRlIGAudGFibGUtc3RyaXBlZGAgYW5kIHByZXZlbnRcbi8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG5cbi8vIEdlbmVyYXRlIHRoZSBjb250ZXh0dWFsIHZhcmlhbnRzXG4udGFibGUtcm93LXZhcmlhbnQoYWN0aXZlOyBAdGFibGUtYmctYWN0aXZlKTtcbi50YWJsZS1yb3ctdmFyaWFudChzdWNjZXNzOyBAc3RhdGUtc3VjY2Vzcy1iZyk7XG4udGFibGUtcm93LXZhcmlhbnQoaW5mbzsgQHN0YXRlLWluZm8tYmcpO1xuLnRhYmxlLXJvdy12YXJpYW50KHdhcm5pbmc7IEBzdGF0ZS13YXJuaW5nLWJnKTtcbi50YWJsZS1yb3ctdmFyaWFudChkYW5nZXI7IEBzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFJlc3BvbnNpdmUgdGFibGVzXG4vL1xuLy8gV3JhcCB5b3VyIHRhYmxlcyBpbiBgLnRhYmxlLXJlc3BvbnNpdmVgIGFuZCB3ZSdsbCBtYWtlIHRoZW0gbW9iaWxlIGZyaWVuZGx5XG4vLyBieSBlbmFibGluZyBob3Jpem9udGFsIHNjcm9sbGluZy4gT25seSBhcHBsaWVzIDw3NjhweC4gRXZlcnl0aGluZyBhYm92ZSB0aGF0XG4vLyB3aWxsIGRpc3BsYXkgbm9ybWFsbHkuXG5cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7IC8vIFdvcmthcm91bmQgZm9yIElFOSBidWcgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE0ODM3KVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAqIDAuNzUpO1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xuXG4gICAgLy8gVGlnaHRlbiB1cCBzcGFjaW5nXG4gICAgPiAudGFibGUge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBjb250ZW50IGRvZXNuJ3Qgd3JhcFxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aCxcbiAgICAgICAgICA+IHRkIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBvdmVycmlkZXMgZm9yIHRoZSBib3JkZXJlZCB0YWJsZXNcbiAgICA+IC50YWJsZS1ib3JkZXJlZCB7XG4gICAgICBib3JkZXI6IDA7XG5cbiAgICAgIC8vIE51a2UgdGhlIGFwcHJvcHJpYXRlIGJvcmRlcnMgc28gdGhhdCB0aGUgcGFyZW50IGNhbiBoYW5kbGUgdGhlbVxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgICA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgICAgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT25seSBudWtlIHRoZSBsYXN0IHJvdydzIGJvdHRvbS1ib3JkZXIgaW4gYHRib2R5YCBhbmQgYHRmb290YCBzaW5jZVxuICAgICAgLy8gY2hhbmNlcyBhcmUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBgdHJgIGluIGEgYHRoZWFkYCBhbmQgdGhhdCB3b3VsZFxuICAgICAgLy8gcmVtb3ZlIHRoZSBib3JkZXIgYWx0b2dldGhlci5cbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICA+IHRoLFxuICAgICAgICAgID4gdGQge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGFibGVzXG5cbi50YWJsZS1yb3ctdmFyaWFudChAc3RhdGU7IEBiYWNrZ3JvdW5kKSB7XG4gIC8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4gIC8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG4gIC50YWJsZSA+IHRoZWFkID4gdHIsXG4gIC50YWJsZSA+IHRib2R5ID4gdHIsXG4gIC50YWJsZSA+IHRmb290ID4gdHIge1xuICAgID4gdGQuQHtzdGF0ZX0sXG4gICAgPiB0aC5Ae3N0YXRlfSxcbiAgICAmLkB7c3RhdGV9ID4gdGQsXG4gICAgJi5Ae3N0YXRlfSA+IHRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlcyBmb3IgYC50YWJsZS1ob3ZlcmBcbiAgLy8gTm90ZTogdGhpcyBpcyBub3QgYXZhaWxhYmxlIGZvciBjZWxscyBvciByb3dzIHdpdGhpbiBgdGhlYWRgIG9yIGB0Zm9vdGAuXG4gIC50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIge1xuICAgID4gdGQuQHtzdGF0ZX06aG92ZXIsXG4gICAgPiB0aC5Ae3N0YXRlfTpob3ZlcixcbiAgICAmLkB7c3RhdGV9OmhvdmVyID4gdGQsXG4gICAgJjpob3ZlciA+IC5Ae3N0YXRlfSxcbiAgICAmLkB7c3RhdGV9OmhvdmVyID4gdGgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gRm9ybXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTm9ybWFsaXplIG5vbi1jb250cm9sc1xuLy9cbi8vIFJlc3R5bGUgYW5kIGJhc2VsaW5lIG5vbi1jb250cm9sIGZvcm0gZWxlbWVudHMuXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXI6IDA7XG4gIC8vIENocm9tZSBhbmQgRmlyZWZveCBzZXQgYSBgbWluLXdpZHRoOiBtaW4tY29udGVudDtgIG9uIGZpZWxkc2V0cyxcbiAgLy8gc28gd2UgcmVzZXQgdGhhdCB0byBlbnN1cmUgaXQgYmVoYXZlcyBtb3JlIGxpa2UgYSBzdGFuZGFyZCBibG9jayBlbGVtZW50LlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMjM1OS5cbiAgbWluLXdpZHRoOiAwO1xufVxuXG5sZWdlbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zaXplOiAoQGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBAbGVnZW5kLWNvbG9yO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbGVnZW5kLWJvcmRlci1jb2xvcjtcbn1cblxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTsgLy8gRm9yY2UgSUU4IHRvIHdyYXAgbG9uZyBjb250ZW50IChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMzE0MSlcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuXG4vLyBOb3JtYWxpemUgZm9ybSBjb250cm9sc1xuLy9cbi8vIFdoaWxlIG1vc3Qgb2Ygb3VyIGZvcm0gc3R5bGVzIHJlcXVpcmUgZXh0cmEgY2xhc3Nlcywgc29tZSBiYXNpYyBub3JtYWxpemF0aW9uXG4vLyBpcyByZXF1aXJlZCB0byBlbnN1cmUgb3B0aW11bSBkaXNwbGF5IHdpdGggb3Igd2l0aG91dCB0aG9zZSBjbGFzc2VzIHRvIGJldHRlclxuLy8gYWRkcmVzcyBicm93c2VyIGluY29uc2lzdGVuY2llcy5cblxuLy8gT3ZlcnJpZGUgY29udGVudC1ib3ggaW4gTm9ybWFsaXplICgqIGlzbid0IHNwZWNpZmljIGVub3VnaClcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAuYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cblxuLy8gUG9zaXRpb24gcmFkaW9zIGFuZCBjaGVja2JveGVzIGJldHRlclxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luOiA0cHggMCAwO1xuICBtYXJnaW4tdG9wOiAxcHggXFw5OyAvLyBJRTgtOVxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vLyBNYWtlIHJhbmdlIGlucHV0cyBiZWhhdmUgbGlrZSB0ZXh0dWFsIGZvcm0gY29udHJvbHNcbmlucHV0W3R5cGU9XCJyYW5nZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLy8gTWFrZSBtdWx0aXBsZSBzZWxlY3QgZWxlbWVudHMgaGVpZ2h0IG5vdCBmaXhlZFxuc2VsZWN0W211bHRpcGxlXSxcbnNlbGVjdFtzaXplXSB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLy8gRm9jdXMgZm9yIGZpbGUsIHJhZGlvLCBhbmQgY2hlY2tib3hcbmlucHV0W3R5cGU9XCJmaWxlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgLnRhYi1mb2N1cygpO1xufVxuXG4vLyBBZGp1c3Qgb3V0cHV0IGVsZW1lbnRcbm91dHB1dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6IEBpbnB1dC1jb2xvcjtcbn1cblxuXG4vLyBDb21tb24gZm9ybSBjb250cm9sc1xuLy9cbi8vIFNoYXJlZCBzaXplIGFuZCB0eXBlIHJlc2V0cyBmb3IgZm9ybSBjb250cm9scy4gQXBwbHkgYC5mb3JtLWNvbnRyb2xgIHRvIGFueVxuLy8gb2YgdGhlIGZvbGxvd2luZyBmb3JtIGNvbnRyb2xzOlxuLy9cbi8vIHNlbGVjdFxuLy8gdGV4dGFyZWFcbi8vIGlucHV0W3R5cGU9XCJ0ZXh0XCJdXG4vLyBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl1cbi8vIGlucHV0W3R5cGU9XCJkYXRldGltZVwiXVxuLy8gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdXG4vLyBpbnB1dFt0eXBlPVwiZGF0ZVwiXVxuLy8gaW5wdXRbdHlwZT1cIm1vbnRoXCJdXG4vLyBpbnB1dFt0eXBlPVwidGltZVwiXVxuLy8gaW5wdXRbdHlwZT1cIndlZWtcIl1cbi8vIGlucHV0W3R5cGU9XCJudW1iZXJcIl1cbi8vIGlucHV0W3R5cGU9XCJlbWFpbFwiXVxuLy8gaW5wdXRbdHlwZT1cInVybFwiXVxuLy8gaW5wdXRbdHlwZT1cInNlYXJjaFwiXVxuLy8gaW5wdXRbdHlwZT1cInRlbFwiXVxuLy8gaW5wdXRbdHlwZT1cImNvbG9yXCJdXG5cbi5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlOyAvLyBNYWtlIGlucHV0cyBhdCBsZWFzdCB0aGUgaGVpZ2h0IG9mIHRoZWlyIGJ1dHRvbiBjb3VudGVycGFydCAoYmFzZSBsaW5lLWhlaWdodCArIHBhZGRpbmcgKyBib3JkZXIpXG4gIHBhZGRpbmc6IEBwYWRkaW5nLWJhc2UtdmVydGljYWwgQHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xuICBmb250LXNpemU6IEBmb250LXNpemUtYmFzZTtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogQGlucHV0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAaW5wdXQtYmc7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlc2V0IHVudXN1YWwgRmlyZWZveC1vbi1BbmRyb2lkIGRlZmF1bHQgc3R5bGU7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2lzc3Vlcy8yMTRcbiAgYm9yZGVyOiAxcHggc29saWQgQGlucHV0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQGlucHV0LWJvcmRlci1yYWRpdXM7IC8vIE5vdGU6IFRoaXMgaGFzIG5vIGVmZmVjdCBvbiA8c2VsZWN0PnMgaW4gc29tZSBicm93c2VycywgZHVlIHRvIHRoZSBsaW1pdGVkIHN0eWxhYmlsaXR5IG9mIDxzZWxlY3Q+cyBpbiBDU1MuXG4gIC5ib3gtc2hhZG93KGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpKTtcbiAgLnRyYW5zaXRpb24oflwiYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1c1wiKTtcblxuICAvLyBDdXN0b21pemUgdGhlIGA6Zm9jdXNgIHN0YXRlIHRvIGltaXRhdGUgbmF0aXZlIFdlYktpdCBzdHlsZXMuXG4gIC5mb3JtLWNvbnRyb2wtZm9jdXMoKTtcblxuICAvLyBQbGFjZWhvbGRlclxuICAucGxhY2Vob2xkZXIoKTtcblxuICAvLyBVbnN0eWxlIHRoZSBjYXJldCBvbiBgPHNlbGVjdD5gcyBpbiBJRTEwKy5cbiAgJjo6LW1zLWV4cGFuZCB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLy8gRGlzYWJsZWQgYW5kIHJlYWQtb25seSBpbnB1dHNcbiAgLy9cbiAgLy8gSFRNTDUgc2F5cyB0aGF0IGNvbnRyb2xzIHVuZGVyIGEgZmllbGRzZXQgPiBsZWdlbmQ6Zmlyc3QtY2hpbGQgd29uJ3QgYmVcbiAgLy8gZGlzYWJsZWQgaWYgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLiBEdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmljdWx0eSwgd2VcbiAgLy8gZG9uJ3QgaG9ub3IgdGhhdCBlZGdlIGNhc2U7IHdlIHN0eWxlIHRoZW0gYXMgZGlzYWJsZWQgYW55d2F5LlxuICAmW2Rpc2FibGVkXSxcbiAgJltyZWFkb25seV0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAaW5wdXQtYmctZGlzYWJsZWQ7XG4gICAgb3BhY2l0eTogMTsgLy8gaU9TIGZpeCBmb3IgdW5yZWFkYWJsZSBkaXNhYmxlZCBjb250ZW50OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTY1NVxuICB9XG5cbiAgJltkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBSZXNldCBoZWlnaHQgZm9yIGB0ZXh0YXJlYWBzXG4gIHRleHRhcmVhJiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cblxuLy8gU2VhcmNoIGlucHV0cyBpbiBpT1Ncbi8vXG4vLyBUaGlzIG92ZXJyaWRlcyB0aGUgZXh0cmEgcm91bmRlZCBjb3JuZXJzIG9uIHNlYXJjaCBpbnB1dHMgaW4gaU9TIHNvIHRoYXQgb3VyXG4vLyBgLmZvcm0tY29udHJvbGAgY2xhc3MgY2FuIHByb3Blcmx5IHN0eWxlIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGNhbm5vdCBzaW1wbHlcbi8vIGJlIGFkZGVkIHRvIGAuZm9ybS1jb250cm9sYCBhcyBpdCdzIG5vdCBzcGVjaWZpYyBlbm91Z2guIEZvciBkZXRhaWxzLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE1ODYuXG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cblxuLy8gU3BlY2lhbCBzdHlsZXMgZm9yIGlPUyB0ZW1wb3JhbCBpbnB1dHNcbi8vXG4vLyBJbiBNb2JpbGUgU2FmYXJpLCBzZXR0aW5nIGBkaXNwbGF5OiBibG9ja2Agb24gdGVtcG9yYWwgaW5wdXRzIGNhdXNlcyB0aGVcbi8vIHRleHQgd2l0aGluIHRoZSBpbnB1dCB0byBiZWNvbWUgdmVydGljYWxseSBtaXNhbGlnbmVkLiBBcyBhIHdvcmthcm91bmQsIHdlXG4vLyBzZXQgYSBwaXhlbCBsaW5lLWhlaWdodCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGhlaWdodCBvZiB0aGUgaW5wdXQsIGJ1dCBvbmx5XG4vLyBmb3IgU2FmYXJpLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTg0OFxuLy9cbi8vIE5vdGUgdGhhdCBhcyBvZiA4LjMsIGlPUyBkb2Vzbid0IHN1cHBvcnQgYGRhdGV0aW1lYCBvciBgd2Vla2AuXG5cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDApIHtcbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgJi5mb3JtLWNvbnRyb2wge1xuICAgICAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQtYmFzZTtcbiAgICB9XG5cbiAgICAmLmlucHV0LXNtLFxuICAgIC5pbnB1dC1ncm91cC1zbSAmIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICAgIH1cblxuICAgICYuaW5wdXQtbGcsXG4gICAgLmlucHV0LWdyb3VwLWxnICYge1xuICAgICAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQtbGFyZ2U7XG4gICAgfVxuICB9XG59XG5cblxuLy8gRm9ybSBncm91cHNcbi8vXG4vLyBEZXNpZ25lZCB0byBoZWxwIHdpdGggdGhlIG9yZ2FuaXphdGlvbiBhbmQgc3BhY2luZyBvZiB2ZXJ0aWNhbCBmb3Jtcy4gRm9yXG4vLyBob3Jpem9udGFsIGZvcm1zLCB1c2UgdGhlIHByZWRlZmluZWQgZ3JpZCBjbGFzc2VzLlxuXG4uZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IEBmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b207XG59XG5cblxuLy8gQ2hlY2tib3hlcyBhbmQgcmFkaW9zXG4vL1xuLy8gSW5kZW50IHRoZSBsYWJlbHMgdG8gcG9zaXRpb24gcmFkaW9zL2NoZWNrYm94ZXMgYXMgaGFuZ2luZyBjb250cm9scy5cblxuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcblxuICBsYWJlbCB7XG4gICAgbWluLWhlaWdodDogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkOyAvLyBFbnN1cmUgdGhlIGlucHV0IGRvZXNuJ3QganVtcCB3aGVuIHRoZXJlIGlzIG5vIHRleHRcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxufVxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7XG59XG5cbi5yYWRpbyArIC5yYWRpbyxcbi5jaGVja2JveCArIC5jaGVja2JveCB7XG4gIG1hcmdpbi10b3A6IC01cHg7IC8vIE1vdmUgdXAgc2libGluZyByYWRpb3Mgb3IgY2hlY2tib3hlcyBmb3IgdGlnaHRlciBzcGFjaW5nXG59XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBvbiBzYW1lIGxpbmVcbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnJhZGlvLWlubGluZSArIC5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lICsgLmNoZWNrYm94LWlubGluZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4OyAvLyBzcGFjZSBvdXQgY29uc2VjdXRpdmUgaW5saW5lIGNvbnRyb2xzXG59XG5cbi8vIEFwcGx5IHNhbWUgZGlzYWJsZWQgY3Vyc29yIHR3ZWFrIGFzIGZvciBpbnB1dHNcbi8vIFNvbWUgc3BlY2lhbCBjYXJlIGlzIG5lZWRlZCBiZWNhdXNlIDxsYWJlbD5zIGRvbid0IGluaGVyaXQgdGhlaXIgcGFyZW50J3MgYGN1cnNvcmAuXG4vL1xuLy8gTm90ZTogTmVpdGhlciByYWRpb3Mgbm9yIGNoZWNrYm94ZXMgY2FuIGJlIHJlYWRvbmx5LlxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgJltkaXNhYmxlZF0sXG4gICYuZGlzYWJsZWQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cbn1cbi8vIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgZGlyZWN0bHkgb24gPGxhYmVsPnNcbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgfVxufVxuLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCBvbiBlbGVtZW50cyB3aXRoIDxsYWJlbD4gZGVzY2VuZGFudHNcbi5yYWRpbyxcbi5jaGVja2JveCB7XG4gICYuZGlzYWJsZWQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBsYWJlbCB7XG4gICAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gU3RhdGljIGZvcm0gY29udHJvbCB0ZXh0XG4vL1xuLy8gQXBwbHkgY2xhc3MgdG8gYSBgcGAgZWxlbWVudCB0byBtYWtlIGFueSBzdHJpbmcgb2YgdGV4dCBhbGlnbiB3aXRoIGxhYmVscyBpblxuLy8gYSBob3Jpem9udGFsIGZvcm0gbGF5b3V0LlxuXG4uZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIC8vIFNpemUgaXQgYXBwcm9wcmlhdGVseSBuZXh0IHRvIHJlYWwgZm9ybSBjb250cm9sc1xuICBwYWRkaW5nLXRvcDogKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgcGFkZGluZy1ib3R0b206IChAcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7XG4gIC8vIFJlbW92ZSBkZWZhdWx0IG1hcmdpbiBmcm9tIGBwYFxuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtaW4taGVpZ2h0OiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgQGZvbnQtc2l6ZS1iYXNlKTtcblxuICAmLmlucHV0LWxnLFxuICAmLmlucHV0LXNtIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBzaXppbmdcbi8vXG4vLyBCdWlsZCBvbiBgLmZvcm0tY29udHJvbGAgd2l0aCBtb2RpZmllciBjbGFzc2VzIHRvIGRlY3JlYXNlIG9yIGluY3JlYXNlIHRoZVxuLy8gaGVpZ2h0IGFuZCBmb250LXNpemUgb2YgZm9ybSBjb250cm9scy5cbi8vXG4vLyBUaGUgYC5mb3JtLWdyb3VwLSogZm9ybS1jb250cm9sYCB2YXJpYXRpb25zIGFyZSBzYWRseSBkdXBsaWNhdGVkIHRvIGF2b2lkIHRoZVxuLy8gaXNzdWUgZG9jdW1lbnRlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE1MDc0LlxuXG4uaW5wdXQtc20ge1xuICAuaW5wdXQtc2l6ZShAaW5wdXQtaGVpZ2h0LXNtYWxsOyBAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbDsgQHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAaW5wdXQtYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG59XG4uZm9ybS1ncm91cC1zbSB7XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBwYWRkaW5nOiBAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LXNtYWxsO1xuICAgIGJvcmRlci1yYWRpdXM6IEBpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsO1xuICB9XG4gIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1zbWFsbDtcbiAgfVxuICB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4gIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBtaW4taGVpZ2h0OiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgQGZvbnQtc2l6ZS1zbWFsbCk7XG4gICAgcGFkZGluZzogKEBwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICsgMSkgQHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6IEBmb250LXNpemUtc21hbGw7XG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1zbWFsbDtcbiAgfVxufVxuXG4uaW5wdXQtbGcge1xuICAuaW5wdXQtc2l6ZShAaW5wdXQtaGVpZ2h0LWxhcmdlOyBAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbDsgQHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1sYXJnZTsgQGxpbmUtaGVpZ2h0LWxhcmdlOyBAaW5wdXQtYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG59XG4uZm9ybS1ncm91cC1sZyB7XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBwYWRkaW5nOiBAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCBAcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWxhcmdlO1xuICAgIGJvcmRlci1yYWRpdXM6IEBpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlO1xuICB9XG4gIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcbiAgfVxuICB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4gIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBtaW4taGVpZ2h0OiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgQGZvbnQtc2l6ZS1sYXJnZSk7XG4gICAgcGFkZGluZzogKEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICsgMSkgQHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6IEBmb250LXNpemUtbGFyZ2U7XG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1sYXJnZTtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBmZWVkYmFjayBzdGF0ZXNcbi8vXG4vLyBBcHBseSBjb250ZXh0dWFsIGFuZCBzZW1hbnRpYyBzdGF0ZXMgdG8gaW5kaXZpZHVhbCBmb3JtIGNvbnRyb2xzLlxuXG4uaGFzLWZlZWRiYWNrIHtcbiAgLy8gRW5hYmxlIGFic29sdXRlIHBvc2l0aW9uaW5nXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAvLyBFbnN1cmUgaWNvbnMgZG9uJ3Qgb3ZlcmxhcCB0ZXh0XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIHBhZGRpbmctcmlnaHQ6IChAaW5wdXQtaGVpZ2h0LWJhc2UgKiAxLjI1KTtcbiAgfVxufVxuLy8gRmVlZGJhY2sgaWNvbiAocmVxdWlyZXMgLmdseXBoaWNvbiBjbGFzc2VzKVxuLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogMjsgLy8gRW5zdXJlIGljb24gaXMgYWJvdmUgaW5wdXQgZ3JvdXBzXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogQGlucHV0LWhlaWdodC1iYXNlO1xuICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQtYmFzZTtcbiAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQtYmFzZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogQGlucHV0LWhlaWdodC1sYXJnZTtcbiAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcbn1cbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtc20gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogQGlucHV0LWhlaWdodC1zbWFsbDtcbiAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1zbWFsbDtcbn1cblxuLy8gRmVlZGJhY2sgc3RhdGVzXG4uaGFzLXN1Y2Nlc3Mge1xuICAuZm9ybS1jb250cm9sLXZhbGlkYXRpb24oQHN0YXRlLXN1Y2Nlc3MtdGV4dDsgQHN0YXRlLXN1Y2Nlc3MtdGV4dDsgQHN0YXRlLXN1Y2Nlc3MtYmcpO1xufVxuLmhhcy13YXJuaW5nIHtcbiAgLmZvcm0tY29udHJvbC12YWxpZGF0aW9uKEBzdGF0ZS13YXJuaW5nLXRleHQ7IEBzdGF0ZS13YXJuaW5nLXRleHQ7IEBzdGF0ZS13YXJuaW5nLWJnKTtcbn1cbi5oYXMtZXJyb3Ige1xuICAuZm9ybS1jb250cm9sLXZhbGlkYXRpb24oQHN0YXRlLWRhbmdlci10ZXh0OyBAc3RhdGUtZGFuZ2VyLXRleHQ7IEBzdGF0ZS1kYW5nZXItYmcpO1xufVxuXG4vLyBSZXBvc2l0aW9uIGZlZWRiYWNrIGljb24gaWYgaW5wdXQgaGFzIHZpc2libGUgbGFiZWwgYWJvdmVcbi5oYXMtZmVlZGJhY2sgbGFiZWwge1xuXG4gICYgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICB0b3A6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKyA1KTsgLy8gSGVpZ2h0IG9mIHRoZSBgbGFiZWxgIGFuZCBpdHMgbWFyZ2luXG4gIH1cbiAgJi5zci1vbmx5IH4gLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgdG9wOiAwO1xuICB9XG59XG5cblxuLy8gSGVscCB0ZXh0XG4vL1xuLy8gQXBwbHkgdG8gYW55IGVsZW1lbnQgeW91IHdpc2ggdG8gY3JlYXRlIGxpZ2h0IHRleHQgZm9yIHBsYWNlbWVudCBpbW1lZGlhdGVseVxuLy8gYmVsb3cgYSBmb3JtIGNvbnRyb2wuIFVzZSBmb3IgZ2VuZXJhbCBoZWxwLCBmb3JtYXR0aW5nLCBvciBpbnN0cnVjdGlvbmFsIHRleHQuXG5cbi5oZWxwLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7IC8vIGFjY291bnQgZm9yIGFueSBlbGVtZW50IHVzaW5nIGhlbHAtYmxvY2tcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICBjb2xvcjogbGlnaHRlbihAdGV4dC1jb2xvciwgMjUlKTsgLy8gbGlnaHRlbiB0aGUgdGV4dCBzb21lIGZvciBjb250cmFzdFxufVxuXG5cbi8vIElubGluZSBmb3Jtc1xuLy9cbi8vIE1ha2UgZm9ybXMgYXBwZWFyIGlubGluZSgtYmxvY2spIGJ5IGFkZGluZyB0aGUgYC5mb3JtLWlubGluZWAgY2xhc3MuIElubGluZVxuLy8gZm9ybXMgYmVnaW4gc3RhY2tlZCBvbiBleHRyYSBzbWFsbCAobW9iaWxlKSBkZXZpY2VzIGFuZCB0aGVuIGdvIGlubGluZSB3aGVuXG4vLyB2aWV3cG9ydHMgcmVhY2ggPDc2OHB4LlxuLy9cbi8vIFJlcXVpcmVzIHdyYXBwaW5nIGlucHV0cyBhbmQgbGFiZWxzIHdpdGggYC5mb3JtLWdyb3VwYCBmb3IgcHJvcGVyIGRpc3BsYXkgb2Zcbi8vIGRlZmF1bHQgSFRNTCBmb3JtIGNvbnRyb2xzIGFuZCBvdXIgY3VzdG9tIGZvcm0gY29udHJvbHMgKGUuZy4sIGlucHV0IGdyb3VwcykuXG4vL1xuLy8gSGVhZHMgdXAhIFRoaXMgaXMgbWl4aW4tZWQgaW50byBgLm5hdmJhci1mb3JtYCBpbiBuYXZiYXJzLmxlc3MuXG5cbi5mb3JtLWlubGluZSB7XG5cbiAgLy8gS2ljayBpbiB0aGUgaW5saW5lXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAgIC8vIElubGluZS1ibG9jayBhbGwgdGhlIHRoaW5ncyBmb3IgXCJpbmxpbmVcIlxuICAgIC5mb3JtLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cblxuICAgIC8vIEluIG5hdmJhci1mb3JtLCBhbGxvdyBmb2xrcyB0byAqbm90KiB1c2UgYC5mb3JtLWdyb3VwYFxuICAgIC5mb3JtLWNvbnRyb2wge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGF1dG87IC8vIFByZXZlbnQgbGFiZWxzIGZyb20gc3RhY2tpbmcgYWJvdmUgaW5wdXRzIGluIGAuZm9ybS1ncm91cGBcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdGF0aWMgY29udHJvbHMgYmVoYXZlIGxpa2UgcmVndWxhciBvbmVzXG4gICAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC5pbnB1dC1ncm91cCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICAuaW5wdXQtZ3JvdXAtYWRkb24sXG4gICAgICAuaW5wdXQtZ3JvdXAtYnRuLFxuICAgICAgLmZvcm0tY29udHJvbCB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElucHV0IGdyb3VwcyBuZWVkIHRoYXQgMTAwJSB3aWR0aCB0aG91Z2hcbiAgICAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBkZWZhdWx0IG1hcmdpbiBvbiByYWRpb3MvY2hlY2tib3hlcyB0aGF0IHdlcmUgdXNlZCBmb3Igc3RhY2tpbmcsIGFuZFxuICAgIC8vIHRoZW4gdW5kbyB0aGUgZmxvYXRpbmcgb2YgcmFkaW9zIGFuZCBjaGVja2JveGVzIHRvIG1hdGNoLlxuICAgIC5yYWRpbyxcbiAgICAuY2hlY2tib3gge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICBsYWJlbCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbiAgICAuY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cblxuICAgIC8vIFJlLW92ZXJyaWRlIHRoZSBmZWVkYmFjayBpY29uLlxuICAgIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgICB0b3A6IDA7XG4gICAgfVxuICB9XG59XG5cblxuLy8gSG9yaXpvbnRhbCBmb3Jtc1xuLy9cbi8vIEhvcml6b250YWwgZm9ybXMgYXJlIGJ1aWx0IG9uIGdyaWQgY2xhc3NlcyBhbmQgYWxsb3cgeW91IHRvIGNyZWF0ZSBmb3JtcyB3aXRoXG4vLyBsYWJlbHMgb24gdGhlIGxlZnQgYW5kIGlucHV0cyBvbiB0aGUgcmlnaHQuXG5cbi5mb3JtLWhvcml6b250YWwge1xuXG4gIC8vIENvbnNpc3RlbnQgdmVydGljYWwgYWxpZ25tZW50IG9mIHJhZGlvcyBhbmQgY2hlY2tib3hlc1xuICAvL1xuICAvLyBMYWJlbHMgYWxzbyBnZXQgc29tZSByZXNldCBzdHlsZXMsIGJ1dCB0aGF0IGlzIHNjb3BlZCB0byBhIG1lZGlhIHF1ZXJ5IGJlbG93LlxuICAucmFkaW8sXG4gIC5jaGVja2JveCxcbiAgLnJhZGlvLWlubGluZSxcbiAgLmNoZWNrYm94LWlubGluZSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHBhZGRpbmctdG9wOiAoQHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpOyAvLyBEZWZhdWx0IHBhZGRpbmcgcGx1cyBhIGJvcmRlclxuICB9XG4gIC8vIEFjY291bnQgZm9yIHBhZGRpbmcgd2UncmUgYWRkaW5nIHRvIGVuc3VyZSB0aGUgYWxpZ25tZW50IGFuZCBvZiBoZWxwIHRleHRcbiAgLy8gYW5kIG90aGVyIGNvbnRlbnQgYmVsb3cgaXRlbXNcbiAgLnJhZGlvLFxuICAuY2hlY2tib3gge1xuICAgIG1pbi1oZWlnaHQ6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKyAoQHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpKTtcbiAgfVxuXG4gIC8vIE1ha2UgZm9ybSBncm91cHMgYmVoYXZlIGxpa2Ugcm93c1xuICAuZm9ybS1ncm91cCB7XG4gICAgLm1ha2Utcm93KCk7XG4gIH1cblxuICAvLyBSZXNldCBzcGFjaW5nIGFuZCByaWdodCBhbGlnbiBsYWJlbHMsIGJ1dCBzY29wZSB0byBtZWRpYSBxdWVyaWVzIHNvIHRoYXRcbiAgLy8gbGFiZWxzIG9uIG5hcnJvdyB2aWV3cG9ydHMgc3RhY2sgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IGZvcm0gZXhhbXBsZS5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgcGFkZGluZy10b3A6IChAcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7IC8vIERlZmF1bHQgcGFkZGluZyBwbHVzIGEgYm9yZGVyXG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGlvbiBzdGF0ZXNcbiAgLy9cbiAgLy8gUmVwb3NpdGlvbiB0aGUgaWNvbiBiZWNhdXNlIGl0J3Mgbm93IHdpdGhpbiBhIGdyaWQgY29sdW1uIGFuZCBjb2x1bW5zIGhhdmVcbiAgLy8gYHBvc2l0aW9uOiByZWxhdGl2ZTtgIG9uIHRoZW0uIEFsc28gYWNjb3VudHMgZm9yIHRoZSBncmlkIGd1dHRlciBwYWRkaW5nLlxuICAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHJpZ2h0OiBmbG9vcigoQGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikpO1xuICB9XG5cbiAgLy8gRm9ybSBncm91cCBzaXplc1xuICAvL1xuICAvLyBRdWljayB1dGlsaXR5IGNsYXNzIGZvciBhcHBseWluZyBgLmlucHV0LWxnYCBhbmQgYC5pbnB1dC1zbWAgc3R5bGVzIHRvIHRoZVxuICAvLyBpbnB1dHMgYW5kIGxhYmVscyB3aXRoaW4gYSBgLmZvcm0tZ3JvdXBgLlxuICAuZm9ybS1ncm91cC1sZyB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAoQHBhZGRpbmctbGFyZ2UtdmVydGljYWwgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplLWxhcmdlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAuZm9ybS1ncm91cC1zbSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAoQHBhZGRpbmctc21hbGwtdmVydGljYWwgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm9ybSB2YWxpZGF0aW9uIHN0YXRlc1xuLy9cbi8vIFVzZWQgaW4gZm9ybXMubGVzcyB0byBnZW5lcmF0ZSB0aGUgZm9ybSB2YWxpZGF0aW9uIENTUyBmb3Igd2FybmluZ3MsIGVycm9ycyxcbi8vIGFuZCBzdWNjZXNzZXMuXG5cbi5mb3JtLWNvbnRyb2wtdmFsaWRhdGlvbihAdGV4dC1jb2xvcjogIzU1NTsgQGJvcmRlci1jb2xvcjogI2NjYzsgQGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUpIHtcbiAgLy8gQ29sb3IgdGhlIGxhYmVsIGFuZCBoZWxwIHRleHRcbiAgLmhlbHAtYmxvY2ssXG4gIC5jb250cm9sLWxhYmVsLFxuICAucmFkaW8sXG4gIC5jaGVja2JveCxcbiAgLnJhZGlvLWlubGluZSxcbiAgLmNoZWNrYm94LWlubGluZSxcbiAgJi5yYWRpbyBsYWJlbCxcbiAgJi5jaGVja2JveCBsYWJlbCxcbiAgJi5yYWRpby1pbmxpbmUgbGFiZWwsXG4gICYuY2hlY2tib3gtaW5saW5lIGxhYmVsICB7XG4gICAgY29sb3I6IEB0ZXh0LWNvbG9yO1xuICB9XG4gIC8vIFNldCB0aGUgYm9yZGVyIGFuZCBib3ggc2hhZG93IG9uIHNwZWNpZmljIGlucHV0cyB0byBtYXRjaFxuICAuZm9ybS1jb250cm9sIHtcbiAgICBib3JkZXItY29sb3I6IEBib3JkZXItY29sb3I7XG4gICAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSkpOyAvLyBSZWRlY2xhcmUgc28gdHJhbnNpdGlvbnMgd29ya1xuICAgICY6Zm9jdXMge1xuICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oQGJvcmRlci1jb2xvciwgMTAlKTtcbiAgICAgIEBzaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLCAwIDAgNnB4IGxpZ2h0ZW4oQGJvcmRlci1jb2xvciwgMjAlKTtcbiAgICAgIC5ib3gtc2hhZG93KEBzaGFkb3cpO1xuICAgIH1cbiAgfVxuICAvLyBTZXQgdmFsaWRhdGlvbiBzdGF0ZXMgYWxzbyBmb3IgYWRkb25zXG4gIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gICAgY29sb3I6IEB0ZXh0LWNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogQGJvcmRlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZC1jb2xvcjtcbiAgfVxuICAvLyBPcHRpb25hbCBmZWVkYmFjayBpY29uXG4gIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIGNvbG9yOiBAdGV4dC1jb2xvcjtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBmb2N1cyBzdGF0ZVxuLy9cbi8vIEdlbmVyYXRlIGEgY3VzdG9taXplZCBmb2N1cyBzdGF0ZSBhbmQgZm9yIGFueSBpbnB1dCB3aXRoIHRoZSBzcGVjaWZpZWQgY29sb3IsXG4vLyB3aGljaCBkZWZhdWx0cyB0byB0aGUgYEBpbnB1dC1ib3JkZXItZm9jdXNgIHZhcmlhYmxlLlxuLy9cbi8vIFdlIGhpZ2hseSBlbmNvdXJhZ2UgeW91IHRvIG5vdCBjdXN0b21pemUgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCBpbnN0ZWFkIHVzZVxuLy8gdGhpcyB0byB0d2VhayBjb2xvcnMgb24gYW4gYXMtbmVlZGVkIGJhc2lzLiBUaGlzIGFlc3RoZXRpYyBjaGFuZ2UgaXMgYmFzZWQgb25cbi8vIFdlYktpdCdzIGRlZmF1bHQgc3R5bGVzLCBidXQgYXBwbGljYWJsZSB0byBhIHdpZGVyIHJhbmdlIG9mIGJyb3dzZXJzLiBJdHNcbi8vIHVzYWJpbGl0eSBhbmQgYWNjZXNzaWJpbGl0eSBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHdpdGggYW55IGNoYW5nZS5cbi8vXG4vLyBFeGFtcGxlIHVzYWdlOiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmx1ZSBib3JkZXIgYW5kIHNoYWRvdyB0byB3aGl0ZSBmb3IgYmV0dGVyXG4vLyBjb250cmFzdCBhZ2FpbnN0IGEgZGFyayBncmF5IGJhY2tncm91bmQuXG4uZm9ybS1jb250cm9sLWZvY3VzKEBjb2xvcjogQGlucHV0LWJvcmRlci1mb2N1cykge1xuICBAY29sb3ItcmdiYTogcmdiYShyZWQoQGNvbG9yKSwgZ3JlZW4oQGNvbG9yKSwgYmx1ZShAY29sb3IpLCAuNik7XG4gICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogQGNvbG9yO1xuICAgIG91dGxpbmU6IDA7XG4gICAgLmJveC1zaGFkb3coflwiaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA4cHggQHtjb2xvci1yZ2JhfVwiKTtcbiAgfVxufVxuXG4vLyBGb3JtIGNvbnRyb2wgc2l6aW5nXG4vL1xuLy8gUmVsYXRpdmUgdGV4dCBzaXplLCBwYWRkaW5nLCBhbmQgYm9yZGVyLXJhZGlpIGNoYW5nZXMgZm9yIGZvcm0gY29udHJvbHMuIEZvclxuLy8gaG9yaXpvbnRhbCBzaXppbmcsIHdyYXAgY29udHJvbHMgaW4gdGhlIHByZWRlZmluZWQgZ3JpZCBjbGFzc2VzLiBgPHNlbGVjdD5gXG4vLyBlbGVtZW50IGdldHMgc3BlY2lhbCBsb3ZlIGJlY2F1c2UgaXQncyBzcGVjaWFsLCBhbmQgdGhhdCdzIGEgZmFjdCFcbi5pbnB1dC1zaXplKEBpbnB1dC1oZWlnaHQ7IEBwYWRkaW5nLXZlcnRpY2FsOyBAcGFkZGluZy1ob3Jpem9udGFsOyBAZm9udC1zaXplOyBAbGluZS1oZWlnaHQ7IEBib3JkZXItcmFkaXVzKSB7XG4gIGhlaWdodDogQGlucHV0LWhlaWdodDtcbiAgcGFkZGluZzogQHBhZGRpbmctdmVydGljYWwgQHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cztcblxuICBzZWxlY3QmIHtcbiAgICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQ7XG4gIH1cblxuICB0ZXh0YXJlYSYsXG4gIHNlbGVjdFttdWx0aXBsZV0mIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbn1cbiIsIi8vXG4vLyBCdXR0b25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2Ugc3R5bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBGb3IgaW5wdXQuYnRuXG4gIGZvbnQtd2VpZ2h0OiBAYnRuLWZvbnQtd2VpZ2h0O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlc2V0IHVudXN1YWwgRmlyZWZveC1vbi1BbmRyb2lkIGRlZmF1bHQgc3R5bGU7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2lzc3Vlcy8yMTRcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy1iYXNlLXZlcnRpY2FsOyBAcGFkZGluZy1iYXNlLWhvcml6b250YWw7IEBmb250LXNpemUtYmFzZTsgQGxpbmUtaGVpZ2h0LWJhc2U7IEBidG4tYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgLnVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICYsXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgIC50YWItZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyLFxuICAmOmZvY3VzLFxuICAmLmZvY3VzIHtcbiAgICBjb2xvcjogQGJ0bi1kZWZhdWx0LWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgb3V0bGluZTogMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIC5ib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcbiAgfVxuXG4gICYuZGlzYWJsZWQsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xuICAgIC5vcGFjaXR5KC42NSk7XG4gICAgLmJveC1zaGFkb3cobm9uZSk7XG4gIH1cblxuICBhJiB7XG4gICAgJi5kaXNhYmxlZCxcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgLy8gRnV0dXJlLXByb29mIGRpc2FibGluZyBvZiBjbGlja3Mgb24gYDxhPmAgZWxlbWVudHNcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBBbHRlcm5hdGUgYnV0dG9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1kZWZhdWx0IHtcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4tZGVmYXVsdC1jb2xvcjsgQGJ0bi1kZWZhdWx0LWJnOyBAYnRuLWRlZmF1bHQtYm9yZGVyKTtcbn1cbi5idG4tcHJpbWFyeSB7XG4gIC5idXR0b24tdmFyaWFudChAYnRuLXByaW1hcnktY29sb3I7IEBidG4tcHJpbWFyeS1iZzsgQGJ0bi1wcmltYXJ5LWJvcmRlcik7XG59XG4vLyBTdWNjZXNzIGFwcGVhcnMgYXMgZ3JlZW5cbi5idG4tc3VjY2VzcyB7XG4gIC5idXR0b24tdmFyaWFudChAYnRuLXN1Y2Nlc3MtY29sb3I7IEBidG4tc3VjY2Vzcy1iZzsgQGJ0bi1zdWNjZXNzLWJvcmRlcik7XG59XG4vLyBJbmZvIGFwcGVhcnMgYXMgYmx1ZS1ncmVlblxuLmJ0bi1pbmZvIHtcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4taW5mby1jb2xvcjsgQGJ0bi1pbmZvLWJnOyBAYnRuLWluZm8tYm9yZGVyKTtcbn1cbi8vIFdhcm5pbmcgYXBwZWFycyBhcyBvcmFuZ2Vcbi5idG4td2FybmluZyB7XG4gIC5idXR0b24tdmFyaWFudChAYnRuLXdhcm5pbmctY29sb3I7IEBidG4td2FybmluZy1iZzsgQGJ0bi13YXJuaW5nLWJvcmRlcik7XG59XG4vLyBEYW5nZXIgYW5kIGVycm9yIGFwcGVhciBhcyByZWRcbi5idG4tZGFuZ2VyIHtcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4tZGFuZ2VyLWNvbG9yOyBAYnRuLWRhbmdlci1iZzsgQGJ0bi1kYW5nZXItYm9yZGVyKTtcbn1cblxuXG4vLyBMaW5rIGJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTWFrZSBhIGJ1dHRvbiBsb29rIGFuZCBiZWhhdmUgbGlrZSBhIGxpbmtcbi5idG4tbGluayB7XG4gIGNvbG9yOiBAbGluay1jb2xvcjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgYm9yZGVyLXJhZGl1czogMDtcblxuICAmLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgLmJveC1zaGFkb3cobm9uZSk7XG4gIH1cbiAgJixcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyxcbiAgJjphY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6IEBsaW5rLWhvdmVyLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogQGxpbmstaG92ZXItZGVjb3JhdGlvbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogQGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEJ1dHRvbiBTaXplc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1sZyB7XG4gIC8vIGxpbmUtaGVpZ2h0OiBlbnN1cmUgZXZlbi1udW1iZXJlZCBoZWlnaHQgb2YgYnV0dG9uIG5leHQgdG8gbGFyZ2UgaW5wdXRcbiAgLmJ1dHRvbi1zaXplKEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsOyBAcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsOyBAZm9udC1zaXplLWxhcmdlOyBAbGluZS1oZWlnaHQtbGFyZ2U7IEBidG4tYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG59XG4uYnRuLXNtIHtcbiAgLy8gbGluZS1oZWlnaHQ6IGVuc3VyZSBwcm9wZXIgaGVpZ2h0IG9mIGJ1dHRvbiBuZXh0IHRvIHNtYWxsIGlucHV0XG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbDsgQHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuLmJ0bi14cyB7XG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy14cy12ZXJ0aWNhbDsgQHBhZGRpbmcteHMtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuXG5cbi8vIEJsb2NrIGJ1dHRvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLy8gVmVydGljYWxseSBzcGFjZSBvdXQgbXVsdGlwbGUgYmxvY2sgYnV0dG9uc1xuLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi8vIFNwZWNpZmljaXR5IG92ZXJyaWRlc1xuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSxcbmlucHV0W3R5cGU9XCJyZXNldFwiXSxcbmlucHV0W3R5cGU9XCJidXR0b25cIl0ge1xuICAmLmJ0bi1ibG9jayB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbiIsIi8vIEJ1dHRvbiB2YXJpYW50c1xuLy9cbi8vIEVhc2lseSBwdW1wIG91dCBkZWZhdWx0IHN0eWxlcywgYXMgd2VsbCBhcyA6aG92ZXIsIDpmb2N1cywgOmFjdGl2ZSxcbi8vIGFuZCBkaXNhYmxlZCBvcHRpb25zIGZvciBhbGwgYnV0dG9uc1xuXG4uYnV0dG9uLXZhcmlhbnQoQGNvbG9yOyBAYmFja2dyb3VuZDsgQGJvcmRlcikge1xuICBjb2xvcjogQGNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZDtcbiAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyO1xuXG4gICY6Zm9jdXMsXG4gICYuZm9jdXMge1xuICAgIGNvbG9yOiBAY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxMCUpO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbihAYm9yZGVyLCAyNSUpO1xuICB9XG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiBAY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxMCUpO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbihAYm9yZGVyLCAxMiUpO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSxcbiAgLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlJiB7XG4gICAgY29sb3I6IEBjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGJhY2tncm91bmQsIDEwJSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKEBib3JkZXIsIDEyJSk7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJi5mb2N1cyB7XG4gICAgICBjb2xvcjogQGNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxNyUpO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKEBib3JkZXIsIDI1JSk7XG4gICAgfVxuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSxcbiAgLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlJiB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxuICAmLmRpc2FibGVkLFxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogQGJvcmRlcjtcbiAgICB9XG4gIH1cblxuICAuYmFkZ2Uge1xuICAgIGNvbG9yOiBAYmFja2dyb3VuZDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XG4gIH1cbn1cblxuLy8gQnV0dG9uIHNpemVzXG4uYnV0dG9uLXNpemUoQHBhZGRpbmctdmVydGljYWw7IEBwYWRkaW5nLWhvcml6b250YWw7IEBmb250LXNpemU7IEBsaW5lLWhlaWdodDsgQGJvcmRlci1yYWRpdXMpIHtcbiAgcGFkZGluZzogQHBhZGRpbmctdmVydGljYWwgQHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cztcbn1cbiIsIi8vIE9wYWNpdHlcblxuLm9wYWNpdHkoQG9wYWNpdHkpIHtcbiAgb3BhY2l0eTogQG9wYWNpdHk7XG4gIC8vIElFOCBmaWx0ZXJcbiAgQG9wYWNpdHktaWU6IChAb3BhY2l0eSAqIDEwMCk7XG4gIGZpbHRlcjogflwiYWxwaGEob3BhY2l0eT1Ae29wYWNpdHktaWV9KVwiO1xufVxuIiwiLy9cbi8vIENvbXBvbmVudCBhbmltYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIZWFkcyB1cCFcbi8vXG4vLyBXZSBkb24ndCB1c2UgdGhlIGAub3BhY2l0eSgpYCBtaXhpbiBoZXJlIHNpbmNlIGl0IGNhdXNlcyBhIGJ1ZyB3aXRoIHRleHRcbi8vIGZpZWxkcyBpbiBJRTctOC4gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8zNTUyLlxuXG4uZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIC50cmFuc2l0aW9uKG9wYWNpdHkgLjE1cyBsaW5lYXIpO1xuICAmLmluIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi5jb2xsYXBzZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgJi5pbiAgICAgIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgdHImLmluICAgIHsgZGlzcGxheTogdGFibGUtcm93OyB9XG4gIHRib2R5Ji5pbiB7IGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDsgfVxufVxuXG4uY29sbGFwc2luZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAudHJhbnNpdGlvbi1wcm9wZXJ0eSh+XCJoZWlnaHQsIHZpc2liaWxpdHlcIik7XG4gIC50cmFuc2l0aW9uLWR1cmF0aW9uKC4zNXMpO1xuICAudHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24oZWFzZSk7XG59XG4iLCIvL1xuLy8gRHJvcGRvd24gbWVudXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gRHJvcGRvd24gYXJyb3cvY2FyZXRcbi5jYXJldCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXRvcDogICBAY2FyZXQtd2lkdGgtYmFzZSBkYXNoZWQ7XG4gIGJvcmRlci10b3A6ICAgQGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgflwiXFw5XCI7IC8vIElFOFxuICBib3JkZXItcmlnaHQ6IEBjYXJldC13aWR0aC1iYXNlIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdDogIEBjYXJldC13aWR0aC1iYXNlIHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4vLyBUaGUgZHJvcGRvd24gd3JhcHBlciAoZGl2KVxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8gUHJldmVudCB0aGUgZm9jdXMgb24gdGhlIGRyb3Bkb3duIHRvZ2dsZSB3aGVuIGNsb3NpbmcgZHJvcGRvd25zXG4uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gVGhlIGRyb3Bkb3duIG1lbnUgKHVsKVxuLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogQHppbmRleC1kcm9wZG93bjtcbiAgZGlzcGxheTogbm9uZTsgLy8gbm9uZSBieSBkZWZhdWx0LCBidXQgYmxvY2sgb24gXCJvcGVuXCIgb2YgdGhlIG1lbnVcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xuICBtYXJnaW46IDJweCAwIDA7IC8vIG92ZXJyaWRlIGRlZmF1bHQgdWxcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEVuc3VyZXMgcHJvcGVyIGFsaWdubWVudCBpZiBwYXJlbnQgaGFzIGl0IGNoYW5nZWQgKGUuZy4sIG1vZGFsIGZvb3RlcilcbiAgYmFja2dyb3VuZC1jb2xvcjogQGRyb3Bkb3duLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCBAZHJvcGRvd24tZmFsbGJhY2stYm9yZGVyOyAvLyBJRTggZmFsbGJhY2tcbiAgYm9yZGVyOiAxcHggc29saWQgQGRyb3Bkb3duLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgLmJveC1zaGFkb3coMCA2cHggMTJweCByZ2JhKDAsMCwwLC4xNzUpKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcblxuICAvLyBBbGlnbnMgdGhlIGRyb3Bkb3duIG1lbnUgdG8gcmlnaHRcbiAgLy9cbiAgLy8gRGVwcmVjYXRlZCBhcyBvZiAzLjEuMCBpbiBmYXZvciBvZiBgLmRyb3Bkb3duLW1lbnUtW2Rpcl1gXG4gICYucHVsbC1yaWdodCB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogYXV0bztcbiAgfVxuXG4gIC8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiB0aGUgZHJvcGRvd25cbiAgLmRpdmlkZXIge1xuICAgIC5uYXYtZGl2aWRlcihAZHJvcGRvd24tZGl2aWRlci1iZyk7XG4gIH1cblxuICAvLyBMaW5rcyB3aXRoaW4gdGhlIGRyb3Bkb3duIG1lbnVcbiAgPiBsaSA+IGEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDNweCAyMHB4O1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICAgIGNvbG9yOiBAZHJvcGRvd24tbGluay1jb2xvcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyBwcmV2ZW50IGxpbmtzIGZyb20gcmFuZG9tbHkgYnJlYWtpbmcgb250byBuZXcgbGluZXNcbiAgfVxufVxuXG4vLyBIb3Zlci9Gb2N1cyBzdGF0ZVxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6IEBkcm9wZG93bi1saW5rLWhvdmVyLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBkcm9wZG93bi1saW5rLWhvdmVyLWJnO1xuICB9XG59XG5cbi8vIEFjdGl2ZSBzdGF0ZVxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSB7XG4gICYsXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiBAZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIG91dGxpbmU6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnO1xuICB9XG59XG5cbi8vIERpc2FibGVkIHN0YXRlXG4vL1xuLy8gR3JheSBvdXQgdGV4dCBhbmQgZW5zdXJlIHRoZSBob3Zlci9mb2N1cyBzdGF0ZSByZW1haW5zIGdyYXlcblxuLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhIHtcbiAgJixcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6IEBkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yO1xuICB9XG5cbiAgLy8gTnVrZSBob3Zlci9mb2N1cyBlZmZlY3RzXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZW1vdmUgQ1NTIGdyYWRpZW50XG4gICAgLnJlc2V0LWZpbHRlcigpO1xuICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgfVxufVxuXG4vLyBPcGVuIHN0YXRlIGZvciB0aGUgZHJvcGRvd25cbi5vcGVuIHtcbiAgLy8gU2hvdyB0aGUgbWVudVxuICA+IC5kcm9wZG93bi1tZW51IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgb3V0bGluZSB3aGVuIDpmb2N1cyBpcyB0cmlnZ2VyZWRcbiAgPiBhIHtcbiAgICBvdXRsaW5lOiAwO1xuICB9XG59XG5cbi8vIE1lbnUgcG9zaXRpb25pbmdcbi8vXG4vLyBBZGQgZXh0cmEgY2xhc3MgdG8gYC5kcm9wZG93bi1tZW51YCB0byBmbGlwIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGRyb3Bkb3duXG4vLyBtZW51IHdpdGggdGhlIHBhcmVudC5cbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgbGVmdDogYXV0bzsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgZnJvbSBgLmRyb3Bkb3duLW1lbnVgXG4gIHJpZ2h0OiAwO1xufVxuLy8gV2l0aCB2Mywgd2UgZW5hYmxlZCBhdXRvLWZsaXBwaW5nIGlmIHlvdSBoYXZlIGEgZHJvcGRvd24gd2l0aGluIGEgcmlnaHRcbi8vIGFsaWduZWQgbmF2IGNvbXBvbmVudC4gVG8gZW5hYmxlIHRoZSB1bmRvaW5nIG9mIHRoYXQsIHdlIHByb3ZpZGUgYW4gb3ZlcnJpZGVcbi8vIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgZHJvcGRvd24gbWVudSBhbGlnbm1lbnQuXG4vL1xuLy8gVGhpcyBpcyBvbmx5IGZvciBsZWZ0LWFsaWduaW5nIGEgZHJvcGRvd24gbWVudSB3aXRoaW4gYSBgLm5hdmJhci1yaWdodGAgb3Jcbi8vIGAucHVsbC1yaWdodGAgbmF2IGNvbXBvbmVudC5cbi5kcm9wZG93bi1tZW51LWxlZnQge1xuICBsZWZ0OiAwO1xuICByaWdodDogYXV0bztcbn1cblxuLy8gRHJvcGRvd24gc2VjdGlvbiBoZWFkZXJzXG4uZHJvcGRvd24taGVhZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAyMHB4O1xuICBmb250LXNpemU6IEBmb250LXNpemUtc21hbGw7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6IEBkcm9wZG93bi1oZWFkZXItY29sb3I7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIGFzIHdpdGggPiBsaSA+IGFcbn1cblxuLy8gQmFja2Ryb3AgdG8gY2F0Y2ggYm9keSBjbGlja3Mgb24gbW9iaWxlLCBldGMuXG4uZHJvcGRvd24tYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogKEB6aW5kZXgtZHJvcGRvd24gLSAxMCk7XG59XG5cbi8vIFJpZ2h0IGFsaWduZWQgZHJvcGRvd25zXG4ucHVsbC1yaWdodCA+IC5kcm9wZG93bi1tZW51IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi8vIEFsbG93IGZvciBkcm9wZG93bnMgdG8gZ28gYm90dG9tIHVwIChha2EsIGRyb3B1cC1tZW51KVxuLy9cbi8vIEp1c3QgYWRkIC5kcm9wdXAgYWZ0ZXIgdGhlIHN0YW5kYXJkIC5kcm9wZG93biBjbGFzcyBhbmQgeW91J3JlIHNldCwgYnJvLlxuLy8gVE9ETzogYWJzdHJhY3QgdGhpcyBzbyB0aGF0IHRoZSBuYXZiYXIgZml4ZWQgc3R5bGVzIGFyZSBub3QgcGxhY2VkIGhlcmU/XG5cbi5kcm9wdXAsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24ge1xuICAvLyBSZXZlcnNlIHRoZSBjYXJldFxuICAuY2FyZXQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogQGNhcmV0LXdpZHRoLWJhc2UgZGFzaGVkO1xuICAgIGJvcmRlci1ib3R0b206IEBjYXJldC13aWR0aC1iYXNlIHNvbGlkIH5cIlxcOVwiOyAvLyBJRThcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG4gIC8vIERpZmZlcmVudCBwb3NpdGlvbmluZyBmb3IgYm90dG9tIHVwIG1lbnVcbiAgLmRyb3Bkb3duLW1lbnUge1xuICAgIHRvcDogYXV0bztcbiAgICBib3R0b206IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICB9XG59XG5cblxuLy8gQ29tcG9uZW50IGFsaWdubWVudFxuLy9cbi8vIFJlaXRlcmF0ZSBwZXIgbmF2YmFyLmxlc3MgYW5kIHRoZSBtb2RpZmllZCBjb21wb25lbnQgYWxpZ25tZW50IHRoZXJlLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAubmF2YmFyLXJpZ2h0IHtcbiAgICAuZHJvcGRvd24tbWVudSB7XG4gICAgICAuZHJvcGRvd24tbWVudS1yaWdodCgpO1xuICAgIH1cbiAgICAvLyBOZWNlc3NhcnkgZm9yIG92ZXJyaWRlcyBvZiB0aGUgZGVmYXVsdCByaWdodCBhbGlnbmVkIG1lbnUuXG4gICAgLy8gV2lsbCByZW1vdmUgY29tZSB2NCBpbiBhbGwgbGlrZWxpaG9vZC5cbiAgICAuZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgICAgIC5kcm9wZG93bi1tZW51LWxlZnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEhvcml6b250YWwgZGl2aWRlcnNcbi8vXG4vLyBEaXZpZGVycyAoYmFzaWNhbGx5IGFuIGhyKSB3aXRoaW4gZHJvcGRvd25zIGFuZCBuYXYgbGlzdHNcblxuLm5hdi1kaXZpZGVyKEBjb2xvcjogI2U1ZTVlNSkge1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAoKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpIC0gMSkgMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGNvbG9yO1xufVxuIiwiLy8gUmVzZXQgZmlsdGVycyBmb3IgSUVcbi8vXG4vLyBXaGVuIHlvdSBuZWVkIHRvIHJlbW92ZSBhIGdyYWRpZW50IGJhY2tncm91bmQsIGRvIG5vdCBmb3JnZXQgdG8gdXNlIHRoaXMgdG8gcmVzZXRcbi8vIHRoZSBJRSBmaWx0ZXIgZm9yIElFOSBhbmQgYmVsb3cuXG5cbi5yZXNldC1maWx0ZXIoKSB7XG4gIGZpbHRlcjogZSglKFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSlcIikpO1xufVxuIiwiLy9cbi8vIEJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE1ha2UgdGhlIGRpdiBiZWhhdmUgbGlrZSBhIGJ1dHRvblxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLy8gbWF0Y2ggLmJ0biBhbGlnbm1lbnQgZ2l2ZW4gZm9udC1zaXplIGhhY2sgYWJvdmVcbiAgPiAuYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgLy8gQnJpbmcgdGhlIFwiYWN0aXZlXCIgYnV0dG9uIHRvIHRoZSBmcm9udFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgIH1cbiAgfVxufVxuXG4vLyBQcmV2ZW50IGRvdWJsZSBib3JkZXJzIHdoZW4gYnV0dG9ucyBhcmUgbmV4dCB0byBlYWNoIG90aGVyXG4uYnRuLWdyb3VwIHtcbiAgLmJ0biArIC5idG4sXG4gIC5idG4gKyAuYnRuLWdyb3VwLFxuICAuYnRuLWdyb3VwICsgLmJ0bixcbiAgLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG59XG5cbi8vIE9wdGlvbmFsOiBHcm91cCBtdWx0aXBsZSBidXR0b24gZ3JvdXBzIHRvZ2V0aGVyIGZvciBhIHRvb2xiYXJcbi5idG4tdG9vbGJhciB7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4OyAvLyBPZmZzZXQgdGhlIGZpcnN0IGNoaWxkJ3MgbWFyZ2luXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xuXG4gIC5idG4sXG4gIC5idG4tZ3JvdXAsXG4gIC5pbnB1dC1ncm91cCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAsXG4gID4gLmlucHV0LWdyb3VwIHtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICB9XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLy8gU2V0IGNvcm5lcnMgaW5kaXZpZHVhbCBiZWNhdXNlIHNvbWV0aW1lcyBhIHNpbmdsZSBidXR0b24gY2FuIGJlIGluIGEgLmJ0bi1ncm91cCBhbmQgd2UgbmVlZCA6Zmlyc3QtY2hpbGQgYW5kIDpsYXN0LWNoaWxkIHRvIGJvdGggbWF0Y2hcbi5idG4tZ3JvdXAgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gICY6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICAgIC5ib3JkZXItcmlnaHQtcmFkaXVzKDApO1xuICB9XG59XG4vLyBOZWVkIC5kcm9wZG93bi10b2dnbGUgc2luY2UgOmxhc3QtY2hpbGQgZG9lc24ndCBhcHBseSBnaXZlbiBhIC5kcm9wZG93bi1tZW51IGltbWVkaWF0ZWx5IGFmdGVyIGl0XG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICAuYm9yZGVyLWxlZnQtcmFkaXVzKDApO1xufVxuXG4vLyBDdXN0b20gZWRpdHMgZm9yIGluY2x1ZGluZyBidG4tZ3JvdXBzIHdpdGhpbiBidG4tZ3JvdXBzICh1c2VmdWwgZm9yIGluY2x1ZGluZyBkcm9wZG93biBidXR0b25zIHdpdGhpbiBhIGJ0bi1ncm91cClcbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgPiAuYnRuOmxhc3QtY2hpbGQsXG4gID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgLmJvcmRlci1yaWdodC1yYWRpdXMoMCk7XG4gIH1cbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgLmJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cblxuLy8gT24gYWN0aXZlIGFuZCBvcGVuLCBkb24ndCBzaG93IG91dGxpbmVcbi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIG91dGxpbmU6IDA7XG59XG5cblxuLy8gU2l6aW5nXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgYnV0dG9uIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llciBtYW5pcHVsYXRpb24uXG5cbi5idG4tZ3JvdXAteHMgPiAuYnRuIHsgJjpleHRlbmQoLmJ0bi14cyk7IH1cbi5idG4tZ3JvdXAtc20gPiAuYnRuIHsgJjpleHRlbmQoLmJ0bi1zbSk7IH1cbi5idG4tZ3JvdXAtbGcgPiAuYnRuIHsgJjpleHRlbmQoLmJ0bi1sZyk7IH1cblxuXG4vLyBTcGxpdCBidXR0b24gZHJvcGRvd25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEdpdmUgdGhlIGxpbmUgYmV0d2VlbiBidXR0b25zIHNvbWUgZGVwdGhcbi5idG4tZ3JvdXAgPiAuYnRuICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogOHB4O1xuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEycHg7XG59XG5cbi8vIFRoZSBjbGlja2FibGUgYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgbWVudVxuLy8gUmVtb3ZlIHRoZSBncmFkaWVudCBhbmQgc2V0IHRoZSBzYW1lIGluc2V0IHNoYWRvdyBhcyB0aGUgOmFjdGl2ZSBzdGF0ZVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICAuYm94LXNoYWRvdyhpbnNldCAwIDNweCA1cHggcmdiYSgwLDAsMCwuMTI1KSk7XG5cbiAgLy8gU2hvdyBubyBzaGFkb3cgZm9yIGAuYnRuLWxpbmtgIHNpbmNlIGl0IGhhcyBubyBvdGhlciBidXR0b24gc3R5bGVzLlxuICAmLmJ0bi1saW5rIHtcbiAgICAuYm94LXNoYWRvdyhub25lKTtcbiAgfVxufVxuXG5cbi8vIFJlcG9zaXRpb24gdGhlIGNhcmV0XG4uYnRuIC5jYXJldCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLy8gQ2FyZXRzIGluIG90aGVyIGJ1dHRvbiBzaXplc1xuLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IEBjYXJldC13aWR0aC1sYXJnZSBAY2FyZXQtd2lkdGgtbGFyZ2UgMDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbn1cbi8vIFVwc2lkZSBkb3duIGNhcmV0cyBmb3IgLmRyb3B1cFxuLmRyb3B1cCAuYnRuLWxnIC5jYXJldCB7XG4gIGJvcmRlci13aWR0aDogMCBAY2FyZXQtd2lkdGgtbGFyZ2UgQGNhcmV0LXdpZHRoLWxhcmdlO1xufVxuXG5cbi8vIFZlcnRpY2FsIGJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwLFxuICA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBDbGVhciBmbG9hdHMgc28gZHJvcGRvd24gbWVudXMgY2FuIGJlIHByb3Blcmx5IHBsYWNlZFxuICA+IC5idG4tZ3JvdXAge1xuICAgICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xuICAgID4gLmJ0biB7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICB9XG4gIH1cblxuICA+IC5idG4gKyAuYnRuLFxuICA+IC5idG4gKyAuYnRuLWdyb3VwLFxuICA+IC5idG4tZ3JvdXAgKyAuYnRuLFxuICA+IC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgICBtYXJnaW4tdG9wOiAtMXB4O1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuIHtcbiAgJjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gICY6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgLmJvcmRlci10b3AtcmFkaXVzKEBidG4tYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgICAuYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG4gIH1cbiAgJjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAuYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG4gICAgLmJvcmRlci1ib3R0b20tcmFkaXVzKEBidG4tYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgfVxufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gID4gLmJ0bjpsYXN0LWNoaWxkLFxuICA+IC5kcm9wZG93bi10b2dnbGUge1xuICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cygwKTtcbiAgfVxufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQge1xuICAuYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG5cblxuLy8gSnVzdGlmaWVkIGJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHdpZHRoOiAxJTtcbiAgfVxuICA+IC5idG4tZ3JvdXAgLmJ0biB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICA+IC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbn1cblxuXG4vLyBDaGVja2JveCBhbmQgcmFkaW8gb3B0aW9uc1xuLy9cbi8vIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIGJyb3dzZXIncyBmb3JtIHZhbGlkYXRpb24gZmVlZGJhY2ssIHBvd2VyZWQgYnkgdGhlXG4vLyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSwgd2UgaGF2ZSB0byBcImhpZGVcIiB0aGUgaW5wdXRzIHZpYSBgY2xpcGAuIFdlIGNhbm5vdCB1c2Vcbi8vIGBkaXNwbGF5OiBub25lO2Agb3IgYHZpc2liaWxpdHk6IGhpZGRlbjtgIGFzIHRoYXQgYWxzbyBoaWRlcyB0aGUgcG9wb3Zlci5cbi8vIFNpbXBseSB2aXN1YWxseSBoaWRpbmcgdGhlIGlucHV0cyB2aWEgYG9wYWNpdHlgIHdvdWxkIGxlYXZlIHRoZW0gY2xpY2thYmxlIGluXG4vLyBjZXJ0YWluIGNhc2VzIHdoaWNoIGlzIHByZXZlbnRlZCBieSB1c2luZyBgY2xpcGAgYW5kIGBwb2ludGVyLWV2ZW50c2AuXG4vLyBUaGlzIHdheSwgd2UgZW5zdXJlIGEgRE9NIGVsZW1lbnQgaXMgdmlzaWJsZSB0byBwb3NpdGlvbiB0aGUgcG9wb3ZlciBmcm9tLlxuLy9cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMjc5NCBhbmRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzE0NTU5IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdIHtcbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFNpbmdsZSBzaWRlIGJvcmRlci1yYWRpdXNcblxuLmJvcmRlci10b3AtcmFkaXVzKEByYWRpdXMpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IEByYWRpdXM7XG4gICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBAcmFkaXVzO1xufVxuLmJvcmRlci1yaWdodC1yYWRpdXMoQHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogQHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IEByYWRpdXM7XG59XG4uYm9yZGVyLWJvdHRvbS1yYWRpdXMoQHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogQHJhZGl1cztcbiAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IEByYWRpdXM7XG59XG4uYm9yZGVyLWxlZnQtcmFkaXVzKEByYWRpdXMpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogQHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogQHJhZGl1cztcbn1cbiIsIi8vXG4vLyBJbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEJhc2Ugc3R5bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IC8vIEZvciBkcm9wZG93bnNcbiAgZGlzcGxheTogdGFibGU7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IC8vIHByZXZlbnQgaW5wdXQgZ3JvdXBzIGZyb20gaW5oZXJpdGluZyBib3JkZXIgc3R5bGVzIGZyb20gdGFibGUgY2VsbHMgd2hlbiBwbGFjZWQgd2l0aGluIGEgdGFibGVcblxuICAvLyBVbmRvIHBhZGRpbmcgYW5kIGZsb2F0IG9mIGdyaWQgY2xhc3Nlc1xuICAmW2NsYXNzKj1cImNvbC1cIl0ge1xuICAgIGZsb2F0OiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG5cbiAgLmZvcm0tY29udHJvbCB7XG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGlucHV0IGlzIGFsd2F5cyBhYm92ZSB0aGUgKmFwcGVuZGVkKiBhZGRvbiBidXR0b24gZm9yXG4gICAgLy8gcHJvcGVyIGJvcmRlciBjb2xvcnMuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG5cbiAgICAvLyBJRTkgZnViYXJzIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGUgaW4gdGV4dCBpbnB1dHMgYW5kIHRoZSBhcnJvd3Mgb25cbiAgICAvLyBzZWxlY3QgZWxlbWVudHMgaW4gaW5wdXQgZ3JvdXBzLiBUbyBmaXggaXQsIHdlIGZsb2F0IHRoZSBpbnB1dC4gRGV0YWlsczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNTYxI2lzc3VlY29tbWVudC0yODkzNjg1NVxuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBcbiAgICAmOmZvY3VzIHtcbiAgICAgIHotaW5kZXg6IDM7XG4gICAgfVxuICB9XG59XG5cbi8vIFNpemluZyBvcHRpb25zXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgZm9ybSBjb250cm9sIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llclxuLy8gbWFuaXB1bGF0aW9uLlxuXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICAuaW5wdXQtbGcoKTtcbn1cbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIC5pbnB1dC1zbSgpO1xufVxuXG5cbi8vIERpc3BsYXkgYXMgdGFibGUtY2VsbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0bixcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcblxuICAmOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbn1cbi8vIEFkZG9uIGFuZCBhZGRvbiB3cmFwcGVyIGZvciBidXR0b25zXG4uaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtYnRuIHtcbiAgd2lkdGg6IDElO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAvLyBNYXRjaCB0aGUgaW5wdXRzXG59XG5cbi8vIFRleHQgaW5wdXQgZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBwYWRkaW5nOiBAcGFkZGluZy1iYXNlLXZlcnRpY2FsIEBwYWRkaW5nLWJhc2UtaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogQGlucHV0LWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IEBpbnB1dC1ncm91cC1hZGRvbi1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgQGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogQGlucHV0LWJvcmRlci1yYWRpdXM7XG5cbiAgLy8gU2l6aW5nXG4gICYuaW5wdXQtc20ge1xuICAgIHBhZGRpbmc6IEBwYWRkaW5nLXNtYWxsLXZlcnRpY2FsIEBwYWRkaW5nLXNtYWxsLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xuICAgIGJvcmRlci1yYWRpdXM6IEBpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsO1xuICB9XG4gICYuaW5wdXQtbGcge1xuICAgIHBhZGRpbmc6IEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsIEBwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplLWxhcmdlO1xuICAgIGJvcmRlci1yYWRpdXM6IEBpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlO1xuICB9XG5cbiAgLy8gTnVrZSBkZWZhdWx0IG1hcmdpbnMgZnJvbSBjaGVja2JveGVzIGFuZCByYWRpb3MgdG8gdmVydGljYWxseSBjZW50ZXIgd2l0aGluLlxuICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG4vLyBSZXNldCByb3VuZGVkIGNvcm5lcnNcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgLmJvcmRlci1yaWdodC1yYWRpdXMoMCk7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpsYXN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xuICAuYm9yZGVyLWxlZnQtcmFkaXVzKDApO1xufVxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQge1xuICBib3JkZXItbGVmdDogMDtcbn1cblxuLy8gQnV0dG9uIGlucHV0IGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gSmFua2lseSBwcmV2ZW50IGlucHV0IGJ1dHRvbiBncm91cHMgZnJvbSB3cmFwcGluZyB3aXRoIGB3aGl0ZS1zcGFjZWAgYW5kXG4gIC8vIGBmb250LXNpemVgIGluIGNvbWJpbmF0aW9uIHdpdGggYGlubGluZS1ibG9ja2Agb24gYnV0dG9ucy5cbiAgZm9udC1zaXplOiAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIC8vIE5lZ2F0aXZlIG1hcmdpbiBmb3Igc3BhY2luZywgcG9zaXRpb24gZm9yIGJyaW5naW5nIGhvdmVyZWQvZm9jdXNlZC9hY3RpdmVkXG4gIC8vIGVsZW1lbnQgYWJvdmUgdGhlIHNpYmxpbmdzLlxuICA+IC5idG4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICArIC5idG4ge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfVxuICAgIC8vIEJyaW5nIHRoZSBcImFjdGl2ZVwiIGJ1dHRvbiB0byB0aGUgZnJvbnRcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJjphY3RpdmUge1xuICAgICAgei1pbmRleDogMjtcbiAgICB9XG4gIH1cblxuICAvLyBOZWdhdGl2ZSBtYXJnaW4gdG8gb25seSBoYXZlIGEgMXB4IGJvcmRlciBiZXR3ZWVuIHRoZSB0d29cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgPiAuYnRuLFxuICAgID4gLmJ0bi1ncm91cCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xcHg7XG4gICAgfVxuICB9XG4gICY6bGFzdC1jaGlsZCB7XG4gICAgPiAuYnRuLFxuICAgID4gLmJ0bi1ncm91cCB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gTmF2c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4ubmF2IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZy1sZWZ0OiAwOyAvLyBPdmVycmlkZSBkZWZhdWx0IHVsL29sXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xuXG4gID4gbGkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcblxuICAgID4gYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6IEBuYXYtbGluay1wYWRkaW5nO1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXYtbGluay1ob3Zlci1iZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlZCBzdGF0ZSBzZXRzIHRleHQgdG8gZ3JheSBhbmQgbnVrZXMgaG92ZXIvdGFiIGVmZmVjdHNcbiAgICAmLmRpc2FibGVkID4gYSB7XG4gICAgICBjb2xvcjogQG5hdi1kaXNhYmxlZC1saW5rLWNvbG9yO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2LWRpc2FibGVkLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBPcGVuIGRyb3Bkb3duc1xuICAub3BlbiA+IGEge1xuICAgICYsXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXYtbGluay1ob3Zlci1iZztcbiAgICAgIGJvcmRlci1jb2xvcjogQGxpbmstY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gTmF2IGRpdmlkZXJzIChkZXByZWNhdGVkIHdpdGggdjMuMC4xKVxuICAvL1xuICAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBpbiB2MyB3aXRoIHRoZSBkcm9wcGluZyBvZiBgLm5hdi1saXN0YCwgYnV0XG4gIC8vIHdlIG1pc3NlZCBpdC4gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcyBhbnl3aGVyZSwgYnV0IGluIHRoZSBpbnRlcmVzdFxuICAvLyBvZiBtYWludGFpbmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGluIGNhc2UgeW91IHVzZSBpdCwgaXQncyBkZXByZWNhdGVkLlxuICAubmF2LWRpdmlkZXIge1xuICAgIC5uYXYtZGl2aWRlcigpO1xuICB9XG5cbiAgLy8gUHJldmVudCBJRTggZnJvbSBtaXNwbGFjaW5nIGltZ3NcbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2lzc3Vlcy85ODQjaXNzdWVjb21tZW50LTM5ODU5ODlcbiAgPiBsaSA+IGEgPiBpbWcge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgfVxufVxuXG5cbi8vIFRhYnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gR2l2ZSB0aGUgdGFicyBzb21ldGhpbmcgdG8gc2l0IG9uXG4ubmF2LXRhYnMge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQG5hdi10YWJzLWJvcmRlci1jb2xvcjtcbiAgPiBsaSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgLy8gTWFrZSB0aGUgbGlzdC1pdGVtcyBvdmVybGF5IHRoZSBib3R0b20gYm9yZGVyXG4gICAgbWFyZ2luLWJvdHRvbTogLTFweDtcblxuICAgIC8vIEFjdHVhbCB0YWJzIChhcyBsaW5rcylcbiAgICA+IGEge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gICAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2UgQGJvcmRlci1yYWRpdXMtYmFzZSAwIDA7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBAbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3IgQG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yIEBuYXYtdGFicy1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIHN0YXRlLCBhbmQgaXRzIDpob3ZlciB0byBvdmVycmlkZSBub3JtYWwgOmhvdmVyXG4gICAgJi5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1iZztcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gcHVsbGluZyB0aGlzIGluIG1haW5seSBmb3IgbGVzcyBzaG9ydGhhbmRcbiAgJi5uYXYtanVzdGlmaWVkIHtcbiAgICAubmF2LWp1c3RpZmllZCgpO1xuICAgIC5uYXYtdGFicy1qdXN0aWZpZWQoKTtcbiAgfVxufVxuXG5cbi8vIFBpbGxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4ubmF2LXBpbGxzIHtcbiAgPiBsaSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICAvLyBMaW5rcyByZW5kZXJlZCBhcyBwaWxsc1xuICAgID4gYSB7XG4gICAgICBib3JkZXItcmFkaXVzOiBAbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM7XG4gICAgfVxuICAgICsgbGkge1xuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGVcbiAgICAmLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy8gU3RhY2tlZCBwaWxsc1xuLm5hdi1zdGFja2VkIHtcbiAgPiBsaSB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgKyBsaSB7XG4gICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMDsgLy8gbm8gbmVlZCBmb3IgdGhpcyBnYXAgYmV0d2VlbiBuYXYgaXRlbXNcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBOYXYgdmFyaWF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSnVzdGlmaWVkIG5hdiBsaW5rc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4ubmF2LWp1c3RpZmllZCB7XG4gIHdpZHRoOiAxMDAlO1xuXG4gID4gbGkge1xuICAgIGZsb2F0OiBub25lO1xuICAgID4gYSB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgfVxuICB9XG5cbiAgPiAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICAgIHRvcDogYXV0bztcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgPiBsaSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgd2lkdGg6IDElO1xuICAgICAgPiBhIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gTW92ZSBib3JkZXJzIHRvIGFuY2hvcnMgaW5zdGVhZCBvZiBib3R0b20gb2YgbGlzdFxuLy9cbi8vIE1peGluIGZvciBhZGRpbmcgb24gdG9wIHRoZSBzaGFyZWQgYC5uYXYtanVzdGlmaWVkYCBzdHlsZXMgZm9yIG91ciB0YWJzXG4ubmF2LXRhYnMtanVzdGlmaWVkIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcblxuICA+IGxpID4gYSB7XG4gICAgLy8gT3ZlcnJpZGUgbWFyZ2luIGZyb20gLm5hdi10YWJzXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XG4gIH1cblxuICA+IC5hY3RpdmUgPiBhLFxuICA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgPiBsaSA+IGEge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBuYXYtdGFicy1qdXN0aWZpZWQtbGluay1ib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlIEBib3JkZXItcmFkaXVzLWJhc2UgMCAwO1xuICAgIH1cbiAgICA+IC5hY3RpdmUgPiBhLFxuICAgID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gICAgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBAbmF2LXRhYnMtanVzdGlmaWVkLWFjdGl2ZS1saW5rLWJvcmRlci1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBUYWJiYWJsZSB0YWJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEhpZGUgdGFiYmFibGUgcGFuZXMgdG8gc3RhcnQsIHNob3cgdGhlbSB3aGVuIGAuYWN0aXZlYFxuLnRhYi1jb250ZW50IHtcbiAgPiAudGFiLXBhbmUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgPiAuYWN0aXZlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5cbi8vIERyb3Bkb3duc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBTcGVjaWZpYyBkcm9wZG93bnNcbi5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7XG4gIC8vIG1ha2UgZHJvcGRvd24gYm9yZGVyIG92ZXJsYXAgdGFiIGJvcmRlclxuICBtYXJnaW4tdG9wOiAtMXB4O1xuICAvLyBSZW1vdmUgdGhlIHRvcCByb3VuZGVkIGNvcm5lcnMgaGVyZSBzaW5jZSB0aGVyZSBpcyBhIGhhcmQgZWRnZSBhYm92ZSB0aGUgbWVudVxuICAuYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG4iLCIvL1xuLy8gTmF2YmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBXcmFwcGVyIGFuZCBiYXNlIGNsYXNzXG4vL1xuLy8gUHJvdmlkZSBhIHN0YXRpYyBuYXZiYXIgZnJvbSB3aGljaCB3ZSBleHBhbmQgdG8gY3JlYXRlIGZ1bGwtd2lkdGgsIGZpeGVkLCBhbmRcbi8vIG90aGVyIG5hdmJhciB2YXJpYXRpb25zLlxuXG4ubmF2YmFyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiBAbmF2YmFyLWhlaWdodDsgLy8gRW5zdXJlIGEgbmF2YmFyIGFsd2F5cyBzaG93cyAoZS5nLiwgd2l0aG91dCBhIC5uYXZiYXItYnJhbmQgaW4gY29sbGFwc2VkIG1vZGUpXG4gIG1hcmdpbi1ib3R0b206IEBuYXZiYXItbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgLy8gUHJldmVudCBmbG9hdHMgZnJvbSBicmVha2luZyB0aGUgbmF2YmFyXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogQG5hdmJhci1ib3JkZXItcmFkaXVzO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGhlYWRpbmdcbi8vXG4vLyBHcm91cHMgYC5uYXZiYXItYnJhbmRgIGFuZCBgLm5hdmJhci10b2dnbGVgIGludG8gYSBzaW5nbGUgY29tcG9uZW50IGZvciBlYXN5XG4vLyBzdHlsaW5nIG9mIHJlc3BvbnNpdmUgYXNwZWN0cy5cblxuLm5hdmJhci1oZWFkZXIge1xuICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGNvbGxhcHNlIChib2R5KVxuLy9cbi8vIEdyb3VwIHlvdXIgbmF2YmFyIGNvbnRlbnQgaW50byB0aGlzIGZvciBlYXN5IGNvbGxhcHNpbmcgYW5kIGV4cGFuZGluZyBhY3Jvc3Ncbi8vIHZhcmlvdXMgZGV2aWNlIHNpemVzLiBCeSBkZWZhdWx0LCB0aGlzIGNvbnRlbnQgaXMgY29sbGFwc2VkIHdoZW4gPDc2OHB4LCBidXRcbi8vIHdpbGwgZXhwYW5kIHBhc3QgdGhhdCBmb3IgYSBob3Jpem9udGFsIGRpc3BsYXkuXG4vL1xuLy8gVG8gc3RhcnQgKG9uIG1vYmlsZSBkZXZpY2VzKSB0aGUgbmF2YmFyIGxpbmtzLCBmb3JtcywgYW5kIGJ1dHRvbnMgYXJlIHN0YWNrZWRcbi8vIHZlcnRpY2FsbHkgYW5kIGluY2x1ZGUgYSBgbWF4LWhlaWdodGAgdG8gb3ZlcmZsb3cgaW4gY2FzZSB5b3UgaGF2ZSB0b28gbXVjaFxuLy8gY29udGVudCBmb3IgdGhlIHVzZXIncyB2aWV3cG9ydC5cblxuLm5hdmJhci1jb2xsYXBzZSB7XG4gIG92ZXJmbG93LXg6IHZpc2libGU7XG4gIHBhZGRpbmctcmlnaHQ6IEBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBwYWRkaW5nLWxlZnQ6ICBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpO1xuICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXG4gICYuaW4ge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcblxuICAgICYuY29sbGFwc2Uge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7IC8vIE92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAmLmluIHtcbiAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgLy8gVW5kbyB0aGUgY29sbGFwc2Ugc2lkZSBwYWRkaW5nIGZvciBuYXZiYXJzIHdpdGggY29udGFpbmVycyB0byBlbnN1cmVcbiAgICAvLyBhbGlnbm1lbnQgb2YgcmlnaHQtYWxpZ25lZCBjb250ZW50cy5cbiAgICAubmF2YmFyLWZpeGVkLXRvcCAmLFxuICAgIC5uYXZiYXItc3RhdGljLXRvcCAmLFxuICAgIC5uYXZiYXItZml4ZWQtYm90dG9tICYge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuLm5hdmJhci1maXhlZC10b3AsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1heC1oZWlnaHQ6IEBuYXZiYXItY29sbGFwc2UtbWF4LWhlaWdodDtcblxuICAgIEBtZWRpYSAobWF4LWRldmljZS13aWR0aDogQHNjcmVlbi14cy1taW4pIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQm90aCBuYXZiYXIgaGVhZGVyIGFuZCBjb2xsYXBzZVxuLy9cbi8vIFdoZW4gYSBjb250YWluZXIgaXMgcHJlc2VudCwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgaGVhZGVyIGFuZCBjb2xsYXBzZS5cblxuLmNvbnRhaW5lcixcbi5jb250YWluZXItZmx1aWQge1xuICA+IC5uYXZiYXItaGVhZGVyLFxuICA+IC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1hcmdpbi1yaWdodDogLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIG1hcmdpbi1sZWZ0OiAgLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vL1xuLy8gTmF2YmFyIGFsaWdubWVudCBvcHRpb25zXG4vL1xuLy8gRGlzcGxheSB0aGUgbmF2YmFyIGFjcm9zcyB0aGUgZW50aXJldHkgb2YgdGhlIHBhZ2Ugb3IgZml4ZWQgaXQgdG8gdGhlIHRvcCBvclxuLy8gYm90dG9tIG9mIHRoZSBwYWdlLlxuXG4vLyBTdGF0aWMgdG9wICh1bmZpeGVkLCBidXQgMTAwJSB3aWRlKSBuYXZiYXJcbi5uYXZiYXItc3RhdGljLXRvcCB7XG4gIHotaW5kZXg6IEB6aW5kZXgtbmF2YmFyO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEZpeCB0aGUgdG9wL2JvdHRvbSBuYXZiYXJzIHdoZW4gc2NyZWVuIHJlYWwgZXN0YXRlIHN1cHBvcnRzIGl0XG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogQHppbmRleC1uYXZiYXItZml4ZWQ7XG5cbiAgLy8gVW5kbyB0aGUgcm91bmRlZCBjb3JuZXJzXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuLm5hdmJhci1maXhlZC10b3Age1xuICB0b3A6IDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgYm90dG9tOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBvdmVycmlkZSAubmF2YmFyIGRlZmF1bHRzXG4gIGJvcmRlci13aWR0aDogMXB4IDAgMDtcbn1cblxuXG4vLyBCcmFuZC9wcm9qZWN0IG5hbWVcblxuLm5hdmJhci1icmFuZCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiBAbmF2YmFyLXBhZGRpbmctdmVydGljYWwgQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1sYXJnZTtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgaGVpZ2h0OiBAbmF2YmFyLWhlaWdodDtcblxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICA+IGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIC5uYXZiYXIgPiAuY29udGFpbmVyICYsXG4gICAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgJiB7XG4gICAgICBtYXJnaW4tbGVmdDogLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciB0b2dnbGVcbi8vXG4vLyBDdXN0b20gYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgYC5uYXZiYXItY29sbGFwc2VgLCBwb3dlcmVkIGJ5IHRoZSBjb2xsYXBzZVxuLy8gSmF2YVNjcmlwdCBwbHVnaW4uXG5cbi5uYXZiYXItdG9nZ2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIHBhZGRpbmc6IDlweCAxMHB4O1xuICAubmF2YmFyLXZlcnRpY2FsLWFsaWduKDM0cHgpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcblxuICAvLyBXZSByZW1vdmUgdGhlIGBvdXRsaW5lYCBoZXJlLCBidXQgbGF0ZXIgY29tcGVuc2F0ZSBieSBhdHRhY2hpbmcgYDpob3ZlcmBcbiAgLy8gc3R5bGVzIHRvIGA6Zm9jdXNgLlxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICB9XG5cbiAgLy8gQmFyc1xuICAuaWNvbi1iYXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAyMnB4O1xuICAgIGhlaWdodDogMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDFweDtcbiAgfVxuICAuaWNvbi1iYXIgKyAuaWNvbi1iYXIge1xuICAgIG1hcmdpbi10b3A6IDRweDtcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5cbi8vIE5hdmJhciBuYXYgbGlua3Ncbi8vXG4vLyBCdWlsZHMgb24gdG9wIG9mIHRoZSBgLm5hdmAgY29tcG9uZW50cyB3aXRoIGl0cyBvd24gbW9kaWZpZXIgY2xhc3MgdG8gbWFrZVxuLy8gdGhlIG5hdiB0aGUgZnVsbCBoZWlnaHQgb2YgdGhlIGhvcml6b250YWwgbmF2IChhYm92ZSA3NjhweCkuXG5cbi5uYXZiYXItbmF2IHtcbiAgbWFyZ2luOiAoQG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsIC8gMikgLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gID4gbGkgPiBhIHtcbiAgICBwYWRkaW5nLXRvcDogICAgMTBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheSB3aGVuIGNvbGxhcHNlZFxuICAgIC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgID4gbGkgPiBhLFxuICAgICAgLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgICAgIHBhZGRpbmc6IDVweCAxNXB4IDVweCAyNXB4O1xuICAgICAgfVxuICAgICAgPiBsaSA+IGEge1xuICAgICAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICAgICAgICAmOmhvdmVyLFxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVW5jb2xsYXBzZSB0aGUgbmF2XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luOiAwO1xuXG4gICAgPiBsaSB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgID4gYSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAgICBAbmF2YmFyLXBhZGRpbmctdmVydGljYWw7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiBAbmF2YmFyLXBhZGRpbmctdmVydGljYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy8gTmF2YmFyIGZvcm1cbi8vXG4vLyBFeHRlbnNpb24gb2YgdGhlIGAuZm9ybS1pbmxpbmVgIHdpdGggc29tZSBleHRyYSBmbGF2b3IgZm9yIG9wdGltdW0gZGlzcGxheSBpblxuLy8gb3VyIG5hdmJhcnMuXG5cbi5uYXZiYXItZm9ybSB7XG4gIG1hcmdpbi1sZWZ0OiAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIG1hcmdpbi1yaWdodDogLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBwYWRkaW5nOiAxMHB4IEBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgQHNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LC4xKSwgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtcbiAgLmJveC1zaGFkb3coQHNoYWRvdyk7XG5cbiAgLy8gTWl4aW4gYmVoYXZpb3IgZm9yIG9wdGltdW0gZGlzcGxheVxuICAuZm9ybS1pbmxpbmUoKTtcblxuICAuZm9ybS1ncm91cCB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWxseSBjZW50ZXIgaW4gZXhwYW5kZWQsIGhvcml6b250YWwgbmF2YmFyXG4gIC5uYXZiYXItdmVydGljYWwtYWxpZ24oQGlucHV0LWhlaWdodC1iYXNlKTtcblxuICAvLyBVbmRvIDEwMCUgd2lkdGggZm9yIHB1bGwgY2xhc3Nlc1xuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgLmJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vLyBEcm9wZG93biBtZW51c1xuXG4vLyBNZW51IHBvc2l0aW9uIGFuZCBtZW51IGNhcmV0c1xuLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgLmJvcmRlci10b3AtcmFkaXVzKDApO1xufVxuLy8gTWVudSBwb3NpdGlvbiBhbmQgbWVudSBjYXJldCBzdXBwb3J0IGZvciBkcm9wdXBzIHZpYSBleHRyYSBkcm9wdXAgY2xhc3Ncbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIC5ib3JkZXItdG9wLXJhZGl1cyhAbmF2YmFyLWJvcmRlci1yYWRpdXMpO1xuICAuYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG59XG5cblxuLy8gQnV0dG9ucyBpbiBuYXZiYXJzXG4vL1xuLy8gVmVydGljYWxseSBjZW50ZXIgYSBidXR0b24gd2l0aGluIGEgbmF2YmFyICh3aGVuICpub3QqIGluIGEgZm9ybSkuXG5cbi5uYXZiYXItYnRuIHtcbiAgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbihAaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gICYuYnRuLXNtIHtcbiAgICAubmF2YmFyLXZlcnRpY2FsLWFsaWduKEBpbnB1dC1oZWlnaHQtc21hbGwpO1xuICB9XG4gICYuYnRuLXhzIHtcbiAgICAubmF2YmFyLXZlcnRpY2FsLWFsaWduKDIyKTtcbiAgfVxufVxuXG5cbi8vIFRleHQgaW4gbmF2YmFyc1xuLy9cbi8vIEFkZCBhIGNsYXNzIHRvIG1ha2UgYW55IGVsZW1lbnQgcHJvcGVybHkgYWxpZ24gaXRzZWxmIHZlcnRpY2FsbHkgd2l0aGluIHRoZSBuYXZiYXJzLlxuXG4ubmF2YmFyLXRleHQge1xuICAubmF2YmFyLXZlcnRpY2FsLWFsaWduKEBsaW5lLWhlaWdodC1jb21wdXRlZCk7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tbGVmdDogQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgbWFyZ2luLXJpZ2h0OiBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgfVxufVxuXG5cbi8vIENvbXBvbmVudCBhbGlnbm1lbnRcbi8vXG4vLyBSZXB1cnBvc2UgdGhlIHB1bGwgdXRpbGl0aWVzIGFzIHRoZWlyIG93biBuYXZiYXIgdXRpbGl0aWVzIHRvIGF2b2lkIHNwZWNpZmljaXR5XG4vLyBpc3N1ZXMgd2l0aCBwYXJlbnRzIGFuZCBjaGFpbmluZy4gT25seSBkbyB0aGlzIHdoZW4gdGhlIG5hdmJhciBpcyB1bmNvbGxhcHNlZFxuLy8gdGhvdWdoIHNvIHRoYXQgbmF2YmFyIGNvbnRlbnRzIHByb3Blcmx5IHN0YWNrIGFuZCBhbGlnbiBpbiBtb2JpbGUuXG4vL1xuLy8gRGVjbGFyZWQgYWZ0ZXIgdGhlIG5hdmJhciBjb21wb25lbnRzIHRvIGVuc3VyZSBtb3JlIHNwZWNpZmljaXR5IG9uIHRoZSBtYXJnaW5zLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAubmF2YmFyLWxlZnQgIHsgLnB1bGwtbGVmdCgpOyB9XG4gIC5uYXZiYXItcmlnaHQge1xuICAgIC5wdWxsLXJpZ2h0KCk7XG4gICAgbWFyZ2luLXJpZ2h0OiAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG5cbiAgICB+IC5uYXZiYXItcmlnaHQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEFsdGVybmF0ZSBuYXZiYXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBEZWZhdWx0IG5hdmJhclxuLm5hdmJhci1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWJnO1xuICBib3JkZXItY29sb3I6IEBuYXZiYXItZGVmYXVsdC1ib3JkZXI7XG5cbiAgLm5hdmJhci1icmFuZCB7XG4gICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1icmFuZC1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1iZztcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLXRleHQge1xuICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtY29sb3I7XG4gIH1cblxuICAubmF2YmFyLW5hdiB7XG4gICAgPiBsaSA+IGEge1xuICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuICAgID4gLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1iZztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubmF2YmFyLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWJvcmRlci1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ob3Zlci1iZztcbiAgICB9XG4gICAgLmljb24tYmFyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC10b2dnbGUtaWNvbi1iYXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1mb3JtIHtcbiAgICBib3JkZXItY29sb3I6IEBuYXZiYXItZGVmYXVsdC1ib3JkZXI7XG4gIH1cblxuICAvLyBEcm9wZG93biBtZW51IGl0ZW1zXG4gIC5uYXZiYXItbmF2IHtcbiAgICAvLyBSZW1vdmUgYmFja2dyb3VuZCBjb2xvciBmcm9tIG9wZW4gZHJvcGRvd25cbiAgICA+IC5vcGVuID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtYmc7XG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICAvLyBEcm9wZG93bnMgZ2V0IGN1c3RvbSBkaXNwbGF5IHdoZW4gY29sbGFwc2VkXG4gICAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8gTGlua3MgaW4gbmF2YmFyc1xuICAvL1xuICAvLyBBZGQgYSBjbGFzcyB0byBlbnN1cmUgbGlua3Mgb3V0c2lkZSB0aGUgbmF2YmFyIG5hdiBhcmUgY29sb3JlZCBjb3JyZWN0bHkuXG5cbiAgLm5hdmJhci1saW5rIHtcbiAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLmJ0bi1saW5rIHtcbiAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcbiAgICB9XG4gICAgJltkaXNhYmxlZF0sXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEludmVyc2UgbmF2YmFyXG5cbi5uYXZiYXItaW52ZXJzZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1iZztcbiAgYm9yZGVyLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuXG4gIC5uYXZiYXItYnJhbmQge1xuICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtYnJhbmQtY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10ZXh0IHtcbiAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWNvbG9yO1xuICB9XG5cbiAgLm5hdmJhci1uYXYge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGFya2VuIHRoZSByZXNwb25zaXZlIG5hdiB0b2dnbGVcbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGJvcmRlci1jb2xvcjogQG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ib3JkZXItY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS10b2dnbGUtaG92ZXItYmc7XG4gICAgfVxuICAgIC5pY29uLWJhciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtdG9nZ2xlLWljb24tYmFyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZm9ybSB7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oQG5hdmJhci1pbnZlcnNlLWJnLCA3JSk7XG4gIH1cblxuICAvLyBEcm9wZG93bnNcbiAgLm5hdmJhci1uYXYge1xuICAgID4gLm9wZW4gPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1iZztcbiAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcbiAgICAgIC8vIERyb3Bkb3ducyBnZXQgY3VzdG9tIGRpc3BsYXlcbiAgICAgIC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgPiAuZHJvcGRvd24taGVhZGVyIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6IEBuYXZiYXItaW52ZXJzZS1ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgLmRpdmlkZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgPiBsaSA+IGEge1xuICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjtcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gLmFjdGl2ZSA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAgICAgJixcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1saW5rIHtcbiAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLmJ0bi1saW5rIHtcbiAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICB9XG4gICAgJltkaXNhYmxlZF0sXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBOYXZiYXIgdmVydGljYWwgYWxpZ25cbi8vXG4vLyBWZXJ0aWNhbGx5IGNlbnRlciBlbGVtZW50cyBpbiB0aGUgbmF2YmFyLlxuLy8gRXhhbXBsZTogYW4gZWxlbWVudCBoYXMgYSBoZWlnaHQgb2YgMzBweCwgc28gd3JpdGUgb3V0IGAubmF2YmFyLXZlcnRpY2FsLWFsaWduKDMwcHgpO2AgdG8gY2FsY3VsYXRlIHRoZSBhcHByb3ByaWF0ZSB0b3AgbWFyZ2luLlxuXG4ubmF2YmFyLXZlcnRpY2FsLWFsaWduKEBlbGVtZW50LWhlaWdodCkge1xuICBtYXJnaW4tdG9wOiAoKEBuYXZiYXItaGVpZ2h0IC0gQGVsZW1lbnQtaGVpZ2h0KSAvIDIpO1xuICBtYXJnaW4tYm90dG9tOiAoKEBuYXZiYXItaGVpZ2h0IC0gQGVsZW1lbnQtaGVpZ2h0KSAvIDIpO1xufVxuIiwiLy9cbi8vIFV0aWxpdHkgY2xhc3Nlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBGbG9hdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmNsZWFyZml4IHtcbiAgLmNsZWFyZml4KCk7XG59XG4uY2VudGVyLWJsb2NrIHtcbiAgLmNlbnRlci1ibG9jaygpO1xufVxuLnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbn1cbi5wdWxsLWxlZnQge1xuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xufVxuXG5cbi8vIFRvZ2dsaW5nIGNvbnRlbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm90ZTogRGVwcmVjYXRlZCAuaGlkZSBpbiBmYXZvciBvZiAuaGlkZGVuIG9yIC5zci1vbmx5IChhcyBhcHByb3ByaWF0ZSkgaW4gdjMuMC4xXG4uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5zaG93IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cbi5pbnZpc2libGUge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4udGV4dC1oaWRlIHtcbiAgLnRleHQtaGlkZSgpO1xufVxuXG5cbi8vIEhpZGUgZnJvbSBzY3JlZW5yZWFkZXJzIGFuZCBicm93c2Vyc1xuLy9cbi8vIENyZWRpdDogSFRNTDUgQm9pbGVycGxhdGVcblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuXG4vLyBGb3IgQWZmaXggcGx1Z2luXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5hZmZpeCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbn1cbiIsIi8vXG4vLyBCcmVhZGNydW1ic1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uYnJlYWRjcnVtYiB7XG4gIHBhZGRpbmc6IEBicmVhZGNydW1iLXBhZGRpbmctdmVydGljYWwgQGJyZWFkY3J1bWItcGFkZGluZy1ob3Jpem9udGFsO1xuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IEBicmVhZGNydW1iLWJnO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAgICsgbGk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiQHticmVhZGNydW1iLXNlcGFyYXRvcn1cXDAwYTBcIjsgLy8gVW5pY29kZSBzcGFjZSBhZGRlZCBzaW5jZSBpbmxpbmUtYmxvY2sgbWVhbnMgbm9uLWNvbGxhcHNpbmcgd2hpdGUtc3BhY2VcbiAgICAgIHBhZGRpbmc6IDAgNXB4O1xuICAgICAgY29sb3I6IEBicmVhZGNydW1iLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gID4gLmFjdGl2ZSB7XG4gICAgY29sb3I6IEBicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjtcbiAgfVxufVxuIiwiLy9cbi8vIFBhZ2luYXRpb24gKG11bHRpcGxlIHBhZ2VzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIDA7XG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XG5cbiAgPiBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lOyAvLyBSZW1vdmUgbGlzdC1zdHlsZSBhbmQgYmxvY2stbGV2ZWwgZGVmYXVsdHNcbiAgICA+IGEsXG4gICAgPiBzcGFuIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGZsb2F0OiBsZWZ0OyAvLyBDb2xsYXBzZSB3aGl0ZS1zcGFjZVxuICAgICAgcGFkZGluZzogQHBhZGRpbmctYmFzZS12ZXJ0aWNhbCBAcGFkZGluZy1iYXNlLWhvcml6b250YWw7XG4gICAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBjb2xvcjogQHBhZ2luYXRpb24tY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAcGFnaW5hdGlvbi1iZztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBwYWdpbmF0aW9uLWJvcmRlcjtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH1cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgID4gYSxcbiAgICAgID4gc3BhbiB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAuYm9yZGVyLWxlZnQtcmFkaXVzKEBib3JkZXItcmFkaXVzLWJhc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgPiBhLFxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgLmJvcmRlci1yaWdodC1yYWRpdXMoQGJvcmRlci1yYWRpdXMtYmFzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBsaSA+IGEsXG4gID4gbGkgPiBzcGFuIHtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIGNvbG9yOiBAcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdpbmF0aW9uLWhvdmVyLWJnO1xuICAgICAgYm9yZGVyLWNvbG9yOiBAcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgPiAuYWN0aXZlID4gYSxcbiAgPiAuYWN0aXZlID4gc3BhbiB7XG4gICAgJixcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMztcbiAgICAgIGNvbG9yOiBAcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAcGFnaW5hdGlvbi1hY3RpdmUtYmc7XG4gICAgICBib3JkZXItY29sb3I6IEBwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXI7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgPiAuZGlzYWJsZWQge1xuICAgID4gc3BhbixcbiAgICA+IHNwYW46aG92ZXIsXG4gICAgPiBzcGFuOmZvY3VzLFxuICAgID4gYSxcbiAgICA+IGE6aG92ZXIsXG4gICAgPiBhOmZvY3VzIHtcbiAgICAgIGNvbG9yOiBAcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdpbmF0aW9uLWRpc2FibGVkLWJnO1xuICAgICAgYm9yZGVyLWNvbG9yOiBAcGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXI7XG4gICAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG59XG5cbi8vIFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTGFyZ2Vcbi5wYWdpbmF0aW9uLWxnIHtcbiAgLnBhZ2luYXRpb24tc2l6ZShAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbDsgQHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1sYXJnZTsgQGxpbmUtaGVpZ2h0LWxhcmdlOyBAYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG59XG5cbi8vIFNtYWxsXG4ucGFnaW5hdGlvbi1zbSB7XG4gIC5wYWdpbmF0aW9uLXNpemUoQHBhZGRpbmctc21hbGwtdmVydGljYWw7IEBwYWRkaW5nLXNtYWxsLWhvcml6b250YWw7IEBmb250LXNpemUtc21hbGw7IEBsaW5lLWhlaWdodC1zbWFsbDsgQGJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuIiwiLy8gUGFnaW5hdGlvblxuXG4ucGFnaW5hdGlvbi1zaXplKEBwYWRkaW5nLXZlcnRpY2FsOyBAcGFkZGluZy1ob3Jpem9udGFsOyBAZm9udC1zaXplOyBAbGluZS1oZWlnaHQ7IEBib3JkZXItcmFkaXVzKSB7XG4gID4gbGkge1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgcGFkZGluZzogQHBhZGRpbmctdmVydGljYWwgQHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQ7XG4gICAgfVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgPiBhLFxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgLmJvcmRlci1sZWZ0LXJhZGl1cyhAYm9yZGVyLXJhZGl1cyk7XG4gICAgICB9XG4gICAgfVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICA+IGEsXG4gICAgICA+IHNwYW4ge1xuICAgICAgICAuYm9yZGVyLXJpZ2h0LXJhZGl1cyhAYm9yZGVyLXJhZGl1cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gUGFnZXIgcGFnaW5hdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4ucGFnZXIge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG4gIGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgPiBhLFxuICAgID4gc3BhbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwYWRkaW5nOiA1cHggMTRweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdlci1iZztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBwYWdlci1ib3JkZXI7XG4gICAgICBib3JkZXItcmFkaXVzOiBAcGFnZXItYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICA+IGE6aG92ZXIsXG4gICAgPiBhOmZvY3VzIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdlci1ob3Zlci1iZztcbiAgICB9XG4gIH1cblxuICAubmV4dCB7XG4gICAgPiBhLFxuICAgID4gc3BhbiB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLnByZXZpb3VzIHtcbiAgICA+IGEsXG4gICAgPiBzcGFuIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC5kaXNhYmxlZCB7XG4gICAgPiBhLFxuICAgID4gYTpob3ZlcixcbiAgICA+IGE6Zm9jdXMsXG4gICAgPiBzcGFuIHtcbiAgICAgIGNvbG9yOiBAcGFnZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAcGFnZXItYmc7XG4gICAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gTGFiZWxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4ubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIHBhZGRpbmc6IC4yZW0gLjZlbSAuM2VtO1xuICBmb250LXNpemU6IDc1JTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogQGxhYmVsLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgYm9yZGVyLXJhZGl1czogLjI1ZW07XG5cbiAgLy8gQWRkIGhvdmVyIGVmZmVjdHMsIGJ1dCBvbmx5IGZvciBsaW5rc1xuICBhJiB7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiBAbGFiZWwtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAvLyBFbXB0eSBsYWJlbHMgY29sbGFwc2UgYXV0b21hdGljYWxseSAobm90IGF2YWlsYWJsZSBpbiBJRTgpXG4gICY6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBRdWljayBmaXggZm9yIGxhYmVscyBpbiBidXR0b25zXG4gIC5idG4gJiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTFweDtcbiAgfVxufVxuXG4vLyBDb2xvcnNcbi8vIENvbnRleHR1YWwgdmFyaWF0aW9ucyAobGlua2VkIGxhYmVscyBnZXQgZGFya2VyIG9uIDpob3ZlcilcblxuLmxhYmVsLWRlZmF1bHQge1xuICAubGFiZWwtdmFyaWFudChAbGFiZWwtZGVmYXVsdC1iZyk7XG59XG5cbi5sYWJlbC1wcmltYXJ5IHtcbiAgLmxhYmVsLXZhcmlhbnQoQGxhYmVsLXByaW1hcnktYmcpO1xufVxuXG4ubGFiZWwtc3VjY2VzcyB7XG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC1zdWNjZXNzLWJnKTtcbn1cblxuLmxhYmVsLWluZm8ge1xuICAubGFiZWwtdmFyaWFudChAbGFiZWwtaW5mby1iZyk7XG59XG5cbi5sYWJlbC13YXJuaW5nIHtcbiAgLmxhYmVsLXZhcmlhbnQoQGxhYmVsLXdhcm5pbmctYmcpO1xufVxuXG4ubGFiZWwtZGFuZ2VyIHtcbiAgLmxhYmVsLXZhcmlhbnQoQGxhYmVsLWRhbmdlci1iZyk7XG59XG4iLCIvLyBMYWJlbHNcblxuLmxhYmVsLXZhcmlhbnQoQGNvbG9yKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IEBjb2xvcjtcblxuICAmW2hyZWZdIHtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBjb2xvciwgMTAlKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBCYWRnZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLmJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtaW4td2lkdGg6IDEwcHg7XG4gIHBhZGRpbmc6IDNweCA3cHg7XG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcbiAgZm9udC13ZWlnaHQ6IEBiYWRnZS1mb250LXdlaWdodDtcbiAgY29sb3I6IEBiYWRnZS1jb2xvcjtcbiAgbGluZS1oZWlnaHQ6IEBiYWRnZS1saW5lLWhlaWdodDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFkZ2UtYmc7XG4gIGJvcmRlci1yYWRpdXM6IEBiYWRnZS1ib3JkZXItcmFkaXVzO1xuXG4gIC8vIEVtcHR5IGJhZGdlcyBjb2xsYXBzZSBhdXRvbWF0aWNhbGx5IChub3QgYXZhaWxhYmxlIGluIElFOClcbiAgJjplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8vIFF1aWNrIGZpeCBmb3IgYmFkZ2VzIGluIGJ1dHRvbnNcbiAgLmJ0biAmIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAtMXB4O1xuICB9XG5cbiAgLmJ0bi14cyAmLFxuICAuYnRuLWdyb3VwLXhzID4gLmJ0biAmIHtcbiAgICB0b3A6IDA7XG4gICAgcGFkZGluZzogMXB4IDVweDtcbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlLCBidXQgb25seSBmb3IgbGlua3NcbiAgYSYge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogQGJhZGdlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICB9XG5cbiAgLy8gQWNjb3VudCBmb3IgYmFkZ2VzIGluIG5hdnNcbiAgLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgPiAmLFxuICAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGEgPiAmIHtcbiAgICBjb2xvcjogQGJhZGdlLWFjdGl2ZS1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFkZ2UtYWN0aXZlLWJnO1xuICB9XG5cbiAgLmxpc3QtZ3JvdXAtaXRlbSA+ICYge1xuICAgIGZsb2F0OiByaWdodDtcbiAgfVxuXG4gIC5saXN0LWdyb3VwLWl0ZW0gPiAmICsgJiB7XG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIH1cblxuICAubmF2LXBpbGxzID4gbGkgPiBhID4gJiB7XG4gICAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgfVxufVxuIiwiLy9cbi8vIEp1bWJvdHJvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uanVtYm90cm9uIHtcbiAgcGFkZGluZy10b3A6ICAgIEBqdW1ib3Ryb24tcGFkZGluZztcbiAgcGFkZGluZy1ib3R0b206IEBqdW1ib3Ryb24tcGFkZGluZztcbiAgbWFyZ2luLWJvdHRvbTogQGp1bWJvdHJvbi1wYWRkaW5nO1xuICBjb2xvcjogQGp1bWJvdHJvbi1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGp1bWJvdHJvbi1iZztcblxuICBoMSxcbiAgLmgxIHtcbiAgICBjb2xvcjogQGp1bWJvdHJvbi1oZWFkaW5nLWNvbG9yO1xuICB9XG5cbiAgcCB7XG4gICAgbWFyZ2luLWJvdHRvbTogKEBqdW1ib3Ryb24tcGFkZGluZyAvIDIpO1xuICAgIGZvbnQtc2l6ZTogQGp1bWJvdHJvbi1mb250LXNpemU7XG4gICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgfVxuXG4gID4gaHIge1xuICAgIGJvcmRlci10b3AtY29sb3I6IGRhcmtlbihAanVtYm90cm9uLWJnLCAxMCUpO1xuICB9XG5cbiAgLmNvbnRhaW5lciAmLFxuICAuY29udGFpbmVyLWZsdWlkICYge1xuICAgIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWxhcmdlOyAvLyBPbmx5IHJvdW5kIGNvcm5lcnMgYXQgaGlnaGVyIHJlc29sdXRpb25zIGlmIGNvbnRhaW5lZCBpbiBhIGNvbnRhaW5lclxuICAgIHBhZGRpbmctbGVmdDogIChAZ3JpZC1ndXR0ZXItd2lkdGggLyAyKTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAoQGdyaWQtZ3V0dGVyLXdpZHRoIC8gMik7XG4gIH1cblxuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAgIHBhZGRpbmctdG9wOiAgICAoQGp1bWJvdHJvbi1wYWRkaW5nICogMS42KTtcbiAgICBwYWRkaW5nLWJvdHRvbTogKEBqdW1ib3Ryb24tcGFkZGluZyAqIDEuNik7XG5cbiAgICAuY29udGFpbmVyICYsXG4gICAgLmNvbnRhaW5lci1mbHVpZCAmIHtcbiAgICAgIHBhZGRpbmctbGVmdDogIChAanVtYm90cm9uLXBhZGRpbmcgKiAyKTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IChAanVtYm90cm9uLXBhZGRpbmcgKiAyKTtcbiAgICB9XG5cbiAgICBoMSxcbiAgICAuaDEge1xuICAgICAgZm9udC1zaXplOiBAanVtYm90cm9uLWhlYWRpbmctZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIFRodW1ibmFpbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTWl4aW4gYW5kIGFkanVzdCB0aGUgcmVndWxhciBpbWFnZSBjbGFzc1xuLnRodW1ibmFpbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiBAdGh1bWJuYWlsLXBhZGRpbmc7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAdGh1bWJuYWlsLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCBAdGh1bWJuYWlsLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQHRodW1ibmFpbC1ib3JkZXItcmFkaXVzO1xuICAudHJhbnNpdGlvbihib3JkZXIgLjJzIGVhc2UtaW4tb3V0KTtcblxuICA+IGltZyxcbiAgYSA+IGltZyB7XG4gICAgJjpleHRlbmQoLmltZy1yZXNwb25zaXZlKTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIH1cblxuICAvLyBBZGQgYSBob3ZlciBzdGF0ZSBmb3IgbGlua2VkIHZlcnNpb25zIG9ubHlcbiAgYSY6aG92ZXIsXG4gIGEmOmZvY3VzLFxuICBhJi5hY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogQGxpbmstY29sb3I7XG4gIH1cblxuICAvLyBJbWFnZSBjYXB0aW9uc1xuICAuY2FwdGlvbiB7XG4gICAgcGFkZGluZzogQHRodW1ibmFpbC1jYXB0aW9uLXBhZGRpbmc7XG4gICAgY29sb3I6IEB0aHVtYm5haWwtY2FwdGlvbi1jb2xvcjtcbiAgfVxufVxuIiwiLy9cbi8vIEFsZXJ0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIHN0eWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYWxlcnQge1xuICBwYWRkaW5nOiBAYWxlcnQtcGFkZGluZztcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogQGFsZXJ0LWJvcmRlci1yYWRpdXM7XG5cbiAgLy8gSGVhZGluZ3MgZm9yIGxhcmdlciBhbGVydHNcbiAgaDQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgLy8gU3BlY2lmaWVkIGZvciB0aGUgaDQgdG8gcHJldmVudCBjb25mbGljdHMgb2YgY2hhbmdpbmcgQGhlYWRpbmdzLWNvbG9yXG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAvLyBQcm92aWRlIGNsYXNzIGZvciBsaW5rcyB0aGF0IG1hdGNoIGFsZXJ0c1xuICAuYWxlcnQtbGluayB7XG4gICAgZm9udC13ZWlnaHQ6IEBhbGVydC1saW5rLWZvbnQtd2VpZ2h0O1xuICB9XG5cbiAgLy8gSW1wcm92ZSBhbGlnbm1lbnQgYW5kIHNwYWNpbmcgb2YgaW5uZXIgY29udGVudFxuICA+IHAsXG4gID4gdWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICA+IHAgKyBwIHtcbiAgICBtYXJnaW4tdG9wOiA1cHg7XG4gIH1cbn1cblxuLy8gRGlzbWlzc2libGUgYWxlcnRzXG4vL1xuLy8gRXhwYW5kIHRoZSByaWdodCBwYWRkaW5nIGFuZCBhY2NvdW50IGZvciB0aGUgY2xvc2UgYnV0dG9uJ3MgcG9zaXRpb25pbmcuXG5cbi5hbGVydC1kaXNtaXNzYWJsZSwgLy8gVGhlIG1pc3NwZWxsZWQgLmFsZXJ0LWRpc21pc3NhYmxlIHdhcyBkZXByZWNhdGVkIGluIDMuMi4wLlxuLmFsZXJ0LWRpc21pc3NpYmxlIHtcbiAgcGFkZGluZy1yaWdodDogKEBhbGVydC1wYWRkaW5nICsgMjApO1xuXG4gIC8vIEFkanVzdCBjbG9zZSBsaW5rIHBvc2l0aW9uXG4gIC5jbG9zZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTJweDtcbiAgICByaWdodDogLTIxcHg7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gQWx0ZXJuYXRlIHN0eWxlc1xuLy9cbi8vIEdlbmVyYXRlIGNvbnRleHR1YWwgbW9kaWZpZXIgY2xhc3NlcyBmb3IgY29sb3JpemluZyB0aGUgYWxlcnQuXG5cbi5hbGVydC1zdWNjZXNzIHtcbiAgLmFsZXJ0LXZhcmlhbnQoQGFsZXJ0LXN1Y2Nlc3MtYmc7IEBhbGVydC1zdWNjZXNzLWJvcmRlcjsgQGFsZXJ0LXN1Y2Nlc3MtdGV4dCk7XG59XG5cbi5hbGVydC1pbmZvIHtcbiAgLmFsZXJ0LXZhcmlhbnQoQGFsZXJ0LWluZm8tYmc7IEBhbGVydC1pbmZvLWJvcmRlcjsgQGFsZXJ0LWluZm8tdGV4dCk7XG59XG5cbi5hbGVydC13YXJuaW5nIHtcbiAgLmFsZXJ0LXZhcmlhbnQoQGFsZXJ0LXdhcm5pbmctYmc7IEBhbGVydC13YXJuaW5nLWJvcmRlcjsgQGFsZXJ0LXdhcm5pbmctdGV4dCk7XG59XG5cbi5hbGVydC1kYW5nZXIge1xuICAuYWxlcnQtdmFyaWFudChAYWxlcnQtZGFuZ2VyLWJnOyBAYWxlcnQtZGFuZ2VyLWJvcmRlcjsgQGFsZXJ0LWRhbmdlci10ZXh0KTtcbn1cbiIsIi8vIEFsZXJ0c1xuXG4uYWxlcnQtdmFyaWFudChAYmFja2dyb3VuZDsgQGJvcmRlcjsgQHRleHQtY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJhY2tncm91bmQ7XG4gIGJvcmRlci1jb2xvcjogQGJvcmRlcjtcbiAgY29sb3I6IEB0ZXh0LWNvbG9yO1xuXG4gIGhyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBkYXJrZW4oQGJvcmRlciwgNSUpO1xuICB9XG4gIC5hbGVydC1saW5rIHtcbiAgICBjb2xvcjogZGFya2VuKEB0ZXh0LWNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvL1xuLy8gUHJvZ3Jlc3MgYmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXIgYW5pbWF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBXZWJLaXRcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XG4gIGZyb20gIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOyB9XG4gIHRvICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG59XG5cbi8vIFNwZWMgYW5kIElFMTArXG5Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7IH1cbiAgdG8gICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbn1cblxuXG4vLyBCYXIgaXRzZWxmXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE91dGVyIGNvbnRhaW5lclxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogQHByb2dyZXNzLWJnO1xuICBib3JkZXItcmFkaXVzOiBAcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1cztcbiAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjEpKTtcbn1cblxuLy8gQmFyIG9mIHByb2dyZXNzXG4ucHJvZ3Jlc3MtYmFyIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LXNpemU6IEBmb250LXNpemUtc21hbGw7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGNvbG9yOiBAcHJvZ3Jlc3MtYmFyLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IEBwcm9ncmVzcy1iYXItYmc7XG4gIC5ib3gtc2hhZG93KGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjE1KSk7XG4gIC50cmFuc2l0aW9uKHdpZHRoIC42cyBlYXNlKTtcbn1cblxuLy8gU3RyaXBlZCBiYXJzXG4vL1xuLy8gYC5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXJgIGlzIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGluIGZhdm9yIG9mIHRoZVxuLy8gYC5wcm9ncmVzcy1iYXItc3RyaXBlZGAgY2xhc3MsIHdoaWNoIHlvdSBqdXN0IGFkZCB0byBhbiBleGlzdGluZ1xuLy8gYC5wcm9ncmVzcy1iYXJgLlxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhcixcbi5wcm9ncmVzcy1iYXItc3RyaXBlZCB7XG4gICNncmFkaWVudCA+IC5zdHJpcGVkKCk7XG4gIGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xufVxuXG4vLyBDYWxsIGFuaW1hdGlvbiBmb3IgdGhlIGFjdGl2ZSBvbmVcbi8vXG4vLyBgLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyYCBpcyBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBpbiBmYXZvciBvZiB0aGVcbi8vIGAucHJvZ3Jlc3MtYmFyLmFjdGl2ZWAgYXBwcm9hY2guXG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIC5hbmltYXRpb24ocHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlKTtcbn1cblxuXG4vLyBWYXJpYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5wcm9ncmVzcy1iYXItc3VjY2VzcyB7XG4gIC5wcm9ncmVzcy1iYXItdmFyaWFudChAcHJvZ3Jlc3MtYmFyLXN1Y2Nlc3MtYmcpO1xufVxuXG4ucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICAucHJvZ3Jlc3MtYmFyLXZhcmlhbnQoQHByb2dyZXNzLWJhci1pbmZvLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci13YXJuaW5nIHtcbiAgLnByb2dyZXNzLWJhci12YXJpYW50KEBwcm9ncmVzcy1iYXItd2FybmluZy1iZyk7XG59XG5cbi5wcm9ncmVzcy1iYXItZGFuZ2VyIHtcbiAgLnByb2dyZXNzLWJhci12YXJpYW50KEBwcm9ncmVzcy1iYXItZGFuZ2VyLWJnKTtcbn1cbiIsIi8vIEdyYWRpZW50c1xuXG4jZ3JhZGllbnQge1xuXG4gIC8vIEhvcml6b250YWwgZ3JhZGllbnQsIGZyb20gbGVmdCB0byByaWdodFxuICAvL1xuICAvLyBDcmVhdGVzIHR3byBjb2xvciBzdG9wcywgc3RhcnQgYW5kIGVuZCwgYnkgc3BlY2lmeWluZyBhIGNvbG9yIGFuZCBwb3NpdGlvbiBmb3IgZWFjaCBjb2xvciBzdG9wLlxuICAvLyBDb2xvciBzdG9wcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBJRTkgYW5kIGJlbG93LlxuICAuaG9yaXpvbnRhbChAc3RhcnQtY29sb3I6ICM1NTU7IEBlbmQtY29sb3I6ICMzMzM7IEBzdGFydC1wZXJjZW50OiAwJTsgQGVuZC1wZXJjZW50OiAxMDAlKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgQHN0YXJ0LWNvbG9yIEBzdGFydC1wZXJjZW50LCBAZW5kLWNvbG9yIEBlbmQtcGVyY2VudCk7IC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCBAc3RhcnQtY29sb3IgQHN0YXJ0LXBlcmNlbnQsIEBlbmQtY29sb3IgQGVuZC1wZXJjZW50KTsgLy8gT3BlcmEgMTJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIEBzdGFydC1jb2xvciBAc3RhcnQtcGVyY2VudCwgQGVuZC1jb2xvciBAZW5kLXBlcmNlbnQpOyAvLyBTdGFuZGFyZCwgSUUxMCwgRmlyZWZveCAxNissIE9wZXJhIDEyLjEwKywgU2FmYXJpIDcrLCBDaHJvbWUgMjYrXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICAgIGZpbHRlcjogZSglKFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyVkJywgZW5kQ29sb3JzdHI9JyVkJywgR3JhZGllbnRUeXBlPTEpXCIsYXJnYihAc3RhcnQtY29sb3IpLGFyZ2IoQGVuZC1jb2xvcikpKTsgLy8gSUU5IGFuZCBkb3duXG4gIH1cblxuICAvLyBWZXJ0aWNhbCBncmFkaWVudCwgZnJvbSB0b3AgdG8gYm90dG9tXG4gIC8vXG4gIC8vIENyZWF0ZXMgdHdvIGNvbG9yIHN0b3BzLCBzdGFydCBhbmQgZW5kLCBieSBzcGVjaWZ5aW5nIGEgY29sb3IgYW5kIHBvc2l0aW9uIGZvciBlYWNoIGNvbG9yIHN0b3AuXG4gIC8vIENvbG9yIHN0b3BzIGFyZSBub3QgYXZhaWxhYmxlIGluIElFOSBhbmQgYmVsb3cuXG4gIC52ZXJ0aWNhbChAc3RhcnQtY29sb3I6ICM1NTU7IEBlbmQtY29sb3I6ICMzMzM7IEBzdGFydC1wZXJjZW50OiAwJTsgQGVuZC1wZXJjZW50OiAxMDAlKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCBAc3RhcnQtY29sb3IgQHN0YXJ0LXBlcmNlbnQsIEBlbmQtY29sb3IgQGVuZC1wZXJjZW50KTsgIC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIEBzdGFydC1jb2xvciBAc3RhcnQtcGVyY2VudCwgQGVuZC1jb2xvciBAZW5kLXBlcmNlbnQpOyAgLy8gT3BlcmEgMTJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBAc3RhcnQtY29sb3IgQHN0YXJ0LXBlcmNlbnQsIEBlbmQtY29sb3IgQGVuZC1wZXJjZW50KTsgLy8gU3RhbmRhcmQsIElFMTAsIEZpcmVmb3ggMTYrLCBPcGVyYSAxMi4xMCssIFNhZmFyaSA3KywgQ2hyb21lIDI2K1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgICBmaWx0ZXI6IGUoJShcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSclZCcsIGVuZENvbG9yc3RyPSclZCcsIEdyYWRpZW50VHlwZT0wKVwiLGFyZ2IoQHN0YXJ0LWNvbG9yKSxhcmdiKEBlbmQtY29sb3IpKSk7IC8vIElFOSBhbmQgZG93blxuICB9XG5cbiAgLmRpcmVjdGlvbmFsKEBzdGFydC1jb2xvcjogIzU1NTsgQGVuZC1jb2xvcjogIzMzMzsgQGRlZzogNDVkZWcpIHtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoQGRlZywgQHN0YXJ0LWNvbG9yLCBAZW5kLWNvbG9yKTsgLy8gU2FmYXJpIDUuMS02LCBDaHJvbWUgMTArXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KEBkZWcsIEBzdGFydC1jb2xvciwgQGVuZC1jb2xvcik7IC8vIE9wZXJhIDEyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KEBkZWcsIEBzdGFydC1jb2xvciwgQGVuZC1jb2xvcik7IC8vIFN0YW5kYXJkLCBJRTEwLCBGaXJlZm94IDE2KywgT3BlcmEgMTIuMTArLCBTYWZhcmkgNyssIENocm9tZSAyNitcbiAgfVxuICAuaG9yaXpvbnRhbC10aHJlZS1jb2xvcnMoQHN0YXJ0LWNvbG9yOiAjMDBiM2VlOyBAbWlkLWNvbG9yOiAjN2E0M2I2OyBAY29sb3Itc3RvcDogNTAlOyBAZW5kLWNvbG9yOiAjYzMzMjVmKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgQHN0YXJ0LWNvbG9yLCBAbWlkLWNvbG9yIEBjb2xvci1zdG9wLCBAZW5kLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgQHN0YXJ0LWNvbG9yLCBAbWlkLWNvbG9yIEBjb2xvci1zdG9wLCBAZW5kLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIEBzdGFydC1jb2xvciwgQG1pZC1jb2xvciBAY29sb3Itc3RvcCwgQGVuZC1jb2xvcik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBmaWx0ZXI6IGUoJShcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSclZCcsIGVuZENvbG9yc3RyPSclZCcsIEdyYWRpZW50VHlwZT0xKVwiLGFyZ2IoQHN0YXJ0LWNvbG9yKSxhcmdiKEBlbmQtY29sb3IpKSk7IC8vIElFOSBhbmQgZG93biwgZ2V0cyBubyBjb2xvci1zdG9wIGF0IGFsbCBmb3IgcHJvcGVyIGZhbGxiYWNrXG4gIH1cbiAgLnZlcnRpY2FsLXRocmVlLWNvbG9ycyhAc3RhcnQtY29sb3I6ICMwMGIzZWU7IEBtaWQtY29sb3I6ICM3YTQzYjY7IEBjb2xvci1zdG9wOiA1MCU7IEBlbmQtY29sb3I6ICNjMzMyNWYpIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZmlsdGVyOiBlKCUoXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nJWQnLCBlbmRDb2xvcnN0cj0nJWQnLCBHcmFkaWVudFR5cGU9MClcIixhcmdiKEBzdGFydC1jb2xvciksYXJnYihAZW5kLWNvbG9yKSkpOyAvLyBJRTkgYW5kIGRvd24sIGdldHMgbm8gY29sb3Itc3RvcCBhdCBhbGwgZm9yIHByb3BlciBmYWxsYmFja1xuICB9XG4gIC5yYWRpYWwoQGlubmVyLWNvbG9yOiAjNTU1OyBAb3V0ZXItY29sb3I6ICMzMzMpIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsIEBpbm5lci1jb2xvciwgQG91dGVyLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCBAaW5uZXItY29sb3IsIEBvdXRlci1jb2xvcik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgfVxuICAuc3RyaXBlZChAY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjE1KTsgQGFuZ2xlOiA0NWRlZykge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KEBhbmdsZSwgQGNvbG9yIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIEBjb2xvciA1MCUsIEBjb2xvciA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChAYW5nbGUsIEBjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBAY29sb3IgNTAlLCBAY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoQGFuZ2xlLCBAY29sb3IgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgQGNvbG9yIDUwJSwgQGNvbG9yIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIH1cbn1cbiIsIi8vIFByb2dyZXNzIGJhcnNcblxuLnByb2dyZXNzLWJhci12YXJpYW50KEBjb2xvcikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XG5cbiAgLy8gRGVwcmVjYXRlZCBwYXJlbnQgY2xhc3MgcmVxdWlyZW1lbnQgYXMgb2YgdjMuMi4wXG4gIC5wcm9ncmVzcy1zdHJpcGVkICYge1xuICAgICNncmFkaWVudCA+IC5zdHJpcGVkKCk7XG4gIH1cbn1cbiIsIi5tZWRpYSB7XG4gIC8vIFByb3BlciBzcGFjaW5nIGJldHdlZW4gaW5zdGFuY2VzIG9mIC5tZWRpYVxuICBtYXJnaW4tdG9wOiAxNXB4O1xuXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cbn1cblxuLm1lZGlhLFxuLm1lZGlhLWJvZHkge1xuICB6b29tOiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ubWVkaWEtYm9keSB7XG4gIHdpZHRoOiAxMDAwMHB4O1xufVxuXG4ubWVkaWEtb2JqZWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgLy8gRml4IGNvbGxhcHNlIGluIHdlYmtpdCBmcm9tIG1heC13aWR0aDogMTAwJSBhbmQgZGlzcGxheTogdGFibGUtY2VsbC5cbiAgJi5pbWctdGh1bWJuYWlsIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cbn1cblxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhID4gLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhID4gLnB1bGwtbGVmdCB7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhLWJvZHkge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4ubWVkaWEtbWlkZGxlIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm1lZGlhLWJvdHRvbSB7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG59XG5cbi8vIFJlc2V0IG1hcmdpbnMgb24gaGVhZGluZ3MgZm9yIHRpZ2h0ZXIgZGVmYXVsdCBzcGFjaW5nXG4ubWVkaWEtaGVhZGluZyB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLy8gTWVkaWEgbGlzdCB2YXJpYXRpb25cbi8vXG4vLyBVbmRvIGRlZmF1bHQgdWwvb2wgc3R5bGVzXG4ubWVkaWEtbGlzdCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbiIsIi8vXG4vLyBMaXN0IGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4vL1xuLy8gRWFzaWx5IHVzYWJsZSBvbiA8dWw+LCA8b2w+LCBvciA8ZGl2Pi5cblxuLmxpc3QtZ3JvdXAge1xuICAvLyBObyBuZWVkIHRvIHNldCBsaXN0LXN0eWxlOiBub25lOyBzaW5jZSAubGlzdC1ncm91cC1pdGVtIGlzIGJsb2NrIGxldmVsXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIHBhZGRpbmctbGVmdDogMDsgLy8gcmVzZXQgcGFkZGluZyBiZWNhdXNlIHVsIGFuZCBvbFxufVxuXG5cbi8vIEluZGl2aWR1YWwgbGlzdCBpdGVtc1xuLy9cbi8vIFVzZSBvbiBgbGlgcyBvciBgZGl2YHMgd2l0aGluIHRoZSBgLmxpc3QtZ3JvdXBgIHBhcmVudC5cblxuLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgLy8gUGxhY2UgdGhlIGJvcmRlciBvbiB0aGUgbGlzdCBpdGVtcyBhbmQgbmVnYXRpdmUgbWFyZ2luIHVwIGZvciBiZXR0ZXIgc3R5bGluZ1xuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlzdC1ncm91cC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgQGxpc3QtZ3JvdXAtYm9yZGVyO1xuXG4gIC8vIFJvdW5kIHRoZSBmaXJzdCBhbmQgbGFzdCBpdGVtc1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICAuYm9yZGVyLXRvcC1yYWRpdXMoQGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1cyk7XG4gIH1cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cyhAbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtcbiAgfVxufVxuXG5cbi8vIEludGVyYWN0aXZlIGxpc3QgaXRlbXNcbi8vXG4vLyBVc2UgYW5jaG9yIG9yIGJ1dHRvbiBlbGVtZW50cyBpbnN0ZWFkIG9mIGBsaWBzIG9yIGBkaXZgcyB0byBjcmVhdGUgaW50ZXJhY3RpdmUgaXRlbXMuXG4vLyBJbmNsdWRlcyBhbiBleHRyYSBgLmFjdGl2ZWAgbW9kaWZpZXIgY2xhc3MgZm9yIHNob3dpbmcgc2VsZWN0ZWQgaXRlbXMuXG5cbmEubGlzdC1ncm91cC1pdGVtLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIGNvbG9yOiBAbGlzdC1ncm91cC1saW5rLWNvbG9yO1xuXG4gIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gICAgY29sb3I6IEBsaXN0LWdyb3VwLWxpbmstaGVhZGluZy1jb2xvcjtcbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtbGluay1ob3Zlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlzdC1ncm91cC1ob3Zlci1iZztcbiAgfVxufVxuXG5idXR0b24ubGlzdC1ncm91cC1pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0ge1xuICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAmLmRpc2FibGVkLFxuICAmLmRpc2FibGVkOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlzdC1ncm91cC1kaXNhYmxlZC1iZztcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I7XG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xuXG4gICAgLy8gRm9yY2UgY29sb3IgdG8gaW5oZXJpdCBmb3IgY3VzdG9tIGNvbnRlbnRcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogQGxpc3QtZ3JvdXAtZGlzYWJsZWQtdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBBY3RpdmUgY2xhc3Mgb24gaXRlbSBpdHNlbGYsIG5vdCBwYXJlbnRcbiAgJi5hY3RpdmUsXG4gICYuYWN0aXZlOmhvdmVyLFxuICAmLmFjdGl2ZTpmb2N1cyB7XG4gICAgei1pbmRleDogMjsgLy8gUGxhY2UgYWN0aXZlIGl0ZW1zIGFib3ZlIHRoZWlyIHNpYmxpbmdzIGZvciBwcm9wZXIgYm9yZGVyIHN0eWxpbmdcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBsaXN0LWdyb3VwLWFjdGl2ZS1iZztcbiAgICBib3JkZXItY29sb3I6IEBsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXI7XG5cbiAgICAvLyBGb3JjZSBjb2xvciB0byBpbmhlcml0IGZvciBjdXN0b20gY29udGVudFxuICAgIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogQGxpc3QtZ3JvdXAtYWN0aXZlLXRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQ29udGV4dHVhbCB2YXJpYW50c1xuLy9cbi8vIEFkZCBtb2RpZmllciBjbGFzc2VzIHRvIGNoYW5nZSB0ZXh0IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIG9uIGluZGl2aWR1YWwgaXRlbXMuXG4vLyBPcmdhbml6YXRpb25hbGx5LCB0aGlzIG11c3QgY29tZSBhZnRlciB0aGUgYDpob3ZlcmAgc3RhdGVzLlxuXG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoc3VjY2VzczsgQHN0YXRlLXN1Y2Nlc3MtYmc7IEBzdGF0ZS1zdWNjZXNzLXRleHQpO1xuLmxpc3QtZ3JvdXAtaXRlbS12YXJpYW50KGluZm87IEBzdGF0ZS1pbmZvLWJnOyBAc3RhdGUtaW5mby10ZXh0KTtcbi5saXN0LWdyb3VwLWl0ZW0tdmFyaWFudCh3YXJuaW5nOyBAc3RhdGUtd2FybmluZy1iZzsgQHN0YXRlLXdhcm5pbmctdGV4dCk7XG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoZGFuZ2VyOyBAc3RhdGUtZGFuZ2VyLWJnOyBAc3RhdGUtZGFuZ2VyLXRleHQpO1xuXG5cbi8vIEN1c3RvbSBjb250ZW50IG9wdGlvbnNcbi8vXG4vLyBFeHRyYSBjbGFzc2VzIGZvciBjcmVhdGluZyB3ZWxsLWZvcm1hdHRlZCBjb250ZW50IHdpdGhpbiBgLmxpc3QtZ3JvdXAtaXRlbWBzLlxuXG4ubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuIiwiLy8gTGlzdCBHcm91cHNcblxuLmxpc3QtZ3JvdXAtaXRlbS12YXJpYW50KEBzdGF0ZTsgQGJhY2tncm91bmQ7IEBjb2xvcikge1xuICAubGlzdC1ncm91cC1pdGVtLUB7c3RhdGV9IHtcbiAgICBjb2xvcjogQGNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xuXG4gICAgYSYsXG4gICAgYnV0dG9uJiB7XG4gICAgICBjb2xvcjogQGNvbG9yO1xuXG4gICAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQGNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGJhY2tncm91bmQsIDUlKTtcbiAgICAgIH1cbiAgICAgICYuYWN0aXZlLFxuICAgICAgJi5hY3RpdmU6aG92ZXIsXG4gICAgICAmLmFjdGl2ZTpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XG4gICAgICAgIGJvcmRlci1jb2xvcjogQGNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIFBhbmVsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4ucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6IEBwYW5lbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IEBwYW5lbC1ib3JkZXItcmFkaXVzO1xuICAuYm94LXNoYWRvdygwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpKTtcbn1cblxuLy8gUGFuZWwgY29udGVudHNcbi5wYW5lbC1ib2R5IHtcbiAgcGFkZGluZzogQHBhbmVsLWJvZHktcGFkZGluZztcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG59XG5cbi8vIE9wdGlvbmFsIGhlYWRpbmdcbi5wYW5lbC1oZWFkaW5nIHtcbiAgcGFkZGluZzogQHBhbmVsLWhlYWRpbmctcGFkZGluZztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAuYm9yZGVyLXRvcC1yYWRpdXMoKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xuXG4gID4gLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIFdpdGhpbiBoZWFkaW5nLCBzdHJpcCBhbnkgYGgqYCB0YWcgb2YgaXRzIGRlZmF1bHQgbWFyZ2lucyBmb3Igc3BhY2luZy5cbi5wYW5lbC10aXRsZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogY2VpbCgoQGZvbnQtc2l6ZS1iYXNlICogMS4xMjUpKTtcbiAgY29sb3I6IGluaGVyaXQ7XG5cbiAgPiBhLFxuICA+IHNtYWxsLFxuICA+IC5zbWFsbCxcbiAgPiBzbWFsbCA+IGEsXG4gID4gLnNtYWxsID4gYSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gT3B0aW9uYWwgZm9vdGVyIChzdGF5cyBncmF5IGluIGV2ZXJ5IG1vZGlmaWVyIGNsYXNzKVxuLnBhbmVsLWZvb3RlciB7XG4gIHBhZGRpbmc6IEBwYW5lbC1mb290ZXItcGFkZGluZztcbiAgYmFja2dyb3VuZC1jb2xvcjogQHBhbmVsLWZvb3Rlci1iZztcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBwYW5lbC1pbm5lci1ib3JkZXI7XG4gIC5ib3JkZXItYm90dG9tLXJhZGl1cygoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG59XG5cblxuLy8gTGlzdCBncm91cHMgaW4gcGFuZWxzXG4vL1xuLy8gQnkgZGVmYXVsdCwgc3BhY2Ugb3V0IGxpc3QgZ3JvdXAgY29udGVudCBmcm9tIHBhbmVsIGhlYWRpbmdzIHRvIGFjY291bnQgZm9yXG4vLyBhbnkga2luZCBvZiBjdXN0b20gY29udGVudCBiZXR3ZWVuIHRoZSB0d28uXG5cbi5wYW5lbCB7XG4gID4gLmxpc3QtZ3JvdXAsXG4gID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgICAubGlzdC1ncm91cC1pdGVtIHtcbiAgICAgIGJvcmRlci13aWR0aDogMXB4IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIH1cblxuICAgIC8vIEFkZCBib3JkZXIgdG9wIHJhZGl1cyBmb3IgZmlyc3Qgb25lXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgICAgLmJvcmRlci10b3AtcmFkaXVzKChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYm9yZGVyIGJvdHRvbSByYWRpdXMgZm9yIGxhc3Qgb25lXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cygoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gICAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgICAuYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG4gICAgfVxuICB9XG59XG4vLyBDb2xsYXBzZSBzcGFjZSBiZXR3ZWVuIHdoZW4gdGhlcmUncyBubyBhZGRpdGlvbmFsIGNvbnRlbnQuXG4ucGFuZWwtaGVhZGluZyArIC5saXN0LWdyb3VwIHtcbiAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgfVxufVxuLmxpc3QtZ3JvdXAgKyAucGFuZWwtZm9vdGVyIHtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbn1cblxuLy8gVGFibGVzIGluIHBhbmVsc1xuLy9cbi8vIFBsYWNlIGEgbm9uLWJvcmRlcmVkIGAudGFibGVgIHdpdGhpbiBhIHBhbmVsIChub3Qgd2l0aGluIGEgYC5wYW5lbC1ib2R5YCkgYW5kXG4vLyB3YXRjaCBpdCBnbyBmdWxsIHdpZHRoLlxuXG4ucGFuZWwge1xuICA+IC50YWJsZSxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSxcbiAgPiAucGFuZWwtY29sbGFwc2UgPiAudGFibGUge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgICBjYXB0aW9uIHtcbiAgICAgIHBhZGRpbmctbGVmdDogQHBhbmVsLWJvZHktcGFkZGluZztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IEBwYW5lbC1ib2R5LXBhZGRpbmc7XG4gICAgfVxuICB9XG4gIC8vIEFkZCBib3JkZXIgdG9wIHJhZGl1cyBmb3IgZmlyc3Qgb25lXG4gID4gLnRhYmxlOmZpcnN0LWNoaWxkLFxuICA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkIHtcbiAgICAuYm9yZGVyLXRvcC1yYWRpdXMoKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xuXG4gICAgPiB0aGVhZDpmaXJzdC1jaGlsZCxcbiAgICA+IHRib2R5OmZpcnN0LWNoaWxkIHtcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuXG4gICAgICAgIHRkOmZpcnN0LWNoaWxkLFxuICAgICAgICB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGQ6bGFzdC1jaGlsZCxcbiAgICAgICAgdGg6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFkZCBib3JkZXIgYm90dG9tIHJhZGl1cyBmb3IgbGFzdCBvbmVcbiAgPiAudGFibGU6bGFzdC1jaGlsZCxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQge1xuICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cygoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG5cbiAgICA+IHRib2R5Omxhc3QtY2hpbGQsXG4gICAgPiB0Zm9vdDpsYXN0LWNoaWxkIHtcbiAgICAgID4gdHI6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG5cbiAgICAgICAgdGQ6Zmlyc3QtY2hpbGQsXG4gICAgICAgIHRoOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICB0ZDpsYXN0LWNoaWxkLFxuICAgICAgICB0aDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgPiAucGFuZWwtYm9keSArIC50YWJsZSxcbiAgPiAucGFuZWwtYm9keSArIC50YWJsZS1yZXNwb25zaXZlLFxuICA+IC50YWJsZSArIC5wYW5lbC1ib2R5LFxuICA+IC50YWJsZS1yZXNwb25zaXZlICsgLnBhbmVsLWJvZHkge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG4gID4gLnRhYmxlID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aCxcbiAgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG4gID4gLnRhYmxlLWJvcmRlcmVkLFxuICA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkIHtcbiAgICBib3JkZXI6IDA7XG4gICAgPiB0aGVhZCxcbiAgICA+IHRib2R5LFxuICAgID4gdGZvb3Qge1xuICAgICAgPiB0ciB7XG4gICAgICAgID4gdGg6Zmlyc3QtY2hpbGQsXG4gICAgICAgID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgICAgID4gdGg6bGFzdC1jaGlsZCxcbiAgICAgICAgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgPiB0aGVhZCxcbiAgICA+IHRib2R5IHtcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xuICAgICAgICA+IHRkLFxuICAgICAgICA+IHRoIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgID4gdGJvZHksXG4gICAgPiB0Zm9vdCB7XG4gICAgICA+IHRyOmxhc3QtY2hpbGQge1xuICAgICAgICA+IHRkLFxuICAgICAgICA+IHRoIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gID4gLnRhYmxlLXJlc3BvbnNpdmUge1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cblxuLy8gQ29sbGFwc2FibGUgcGFuZWxzIChha2EsIGFjY29yZGlvbilcbi8vXG4vLyBXcmFwIGEgc2VyaWVzIG9mIHBhbmVscyBpbiBgLnBhbmVsLWdyb3VwYCB0byB0dXJuIHRoZW0gaW50byBhbiBhY2NvcmRpb24gd2l0aFxuLy8gdGhlIGhlbHAgb2Ygb3VyIGNvbGxhcHNlIEphdmFTY3JpcHQgcGx1Z2luLlxuXG4ucGFuZWwtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG5cbiAgLy8gVGlnaHRlbiB1cCBtYXJnaW4gc28gaXQncyBvbmx5IGJldHdlZW4gcGFuZWxzXG4gIC5wYW5lbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBib3JkZXItcmFkaXVzOiBAcGFuZWwtYm9yZGVyLXJhZGl1cztcblxuICAgICsgLnBhbmVsIHtcbiAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICB9XG4gIH1cblxuICAucGFuZWwtaGVhZGluZyB7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcblxuICAgICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHksXG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgQHBhbmVsLWlubmVyLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICAucGFuZWwtZm9vdGVyIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgICsgLnBhbmVsLWNvbGxhcHNlIC5wYW5lbC1ib2R5IHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcGFuZWwtaW5uZXItYm9yZGVyO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIENvbnRleHR1YWwgdmFyaWF0aW9uc1xuLnBhbmVsLWRlZmF1bHQge1xuICAucGFuZWwtdmFyaWFudChAcGFuZWwtZGVmYXVsdC1ib3JkZXI7IEBwYW5lbC1kZWZhdWx0LXRleHQ7IEBwYW5lbC1kZWZhdWx0LWhlYWRpbmctYmc7IEBwYW5lbC1kZWZhdWx0LWJvcmRlcik7XG59XG4ucGFuZWwtcHJpbWFyeSB7XG4gIC5wYW5lbC12YXJpYW50KEBwYW5lbC1wcmltYXJ5LWJvcmRlcjsgQHBhbmVsLXByaW1hcnktdGV4dDsgQHBhbmVsLXByaW1hcnktaGVhZGluZy1iZzsgQHBhbmVsLXByaW1hcnktYm9yZGVyKTtcbn1cbi5wYW5lbC1zdWNjZXNzIHtcbiAgLnBhbmVsLXZhcmlhbnQoQHBhbmVsLXN1Y2Nlc3MtYm9yZGVyOyBAcGFuZWwtc3VjY2Vzcy10ZXh0OyBAcGFuZWwtc3VjY2Vzcy1oZWFkaW5nLWJnOyBAcGFuZWwtc3VjY2Vzcy1ib3JkZXIpO1xufVxuLnBhbmVsLWluZm8ge1xuICAucGFuZWwtdmFyaWFudChAcGFuZWwtaW5mby1ib3JkZXI7IEBwYW5lbC1pbmZvLXRleHQ7IEBwYW5lbC1pbmZvLWhlYWRpbmctYmc7IEBwYW5lbC1pbmZvLWJvcmRlcik7XG59XG4ucGFuZWwtd2FybmluZyB7XG4gIC5wYW5lbC12YXJpYW50KEBwYW5lbC13YXJuaW5nLWJvcmRlcjsgQHBhbmVsLXdhcm5pbmctdGV4dDsgQHBhbmVsLXdhcm5pbmctaGVhZGluZy1iZzsgQHBhbmVsLXdhcm5pbmctYm9yZGVyKTtcbn1cbi5wYW5lbC1kYW5nZXIge1xuICAucGFuZWwtdmFyaWFudChAcGFuZWwtZGFuZ2VyLWJvcmRlcjsgQHBhbmVsLWRhbmdlci10ZXh0OyBAcGFuZWwtZGFuZ2VyLWhlYWRpbmctYmc7IEBwYW5lbC1kYW5nZXItYm9yZGVyKTtcbn1cbiIsIi8vIFBhbmVsc1xuXG4ucGFuZWwtdmFyaWFudChAYm9yZGVyOyBAaGVhZGluZy10ZXh0LWNvbG9yOyBAaGVhZGluZy1iZy1jb2xvcjsgQGhlYWRpbmctYm9yZGVyKSB7XG4gIGJvcmRlci1jb2xvcjogQGJvcmRlcjtcblxuICAmID4gLnBhbmVsLWhlYWRpbmcge1xuICAgIGNvbG9yOiBAaGVhZGluZy10ZXh0LWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBoZWFkaW5nLWJnLWNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogQGhlYWRpbmctYm9yZGVyO1xuXG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiBAYm9yZGVyO1xuICAgIH1cbiAgICAuYmFkZ2Uge1xuICAgICAgY29sb3I6IEBoZWFkaW5nLWJnLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGhlYWRpbmctdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cbiAgJiA+IC5wYW5lbC1mb290ZXIge1xuICAgICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogQGJvcmRlcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEVtYmVkcyByZXNwb25zaXZlXG4vL1xuLy8gQ3JlZGl0OiBOaWNvbGFzIEdhbGxhZ2hlciBhbmQgU1VJVCBDU1MuXG5cbi5lbWJlZC1yZXNwb25zaXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXG4gIGlmcmFtZSxcbiAgZW1iZWQsXG4gIG9iamVjdCxcbiAgdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBib3R0b206IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMDtcbiAgfVxufVxuXG4vLyBNb2RpZmllciBjbGFzcyBmb3IgMTY6OSBhc3BlY3QgcmF0aW9cbi5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5IHtcbiAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbn1cblxuLy8gTW9kaWZpZXIgY2xhc3MgZm9yIDQ6MyBhc3BlY3QgcmF0aW9cbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuIiwiLy9cbi8vIFdlbGxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2UgY2xhc3Ncbi53ZWxsIHtcbiAgbWluLWhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMTlweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogQHdlbGwtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIEB3ZWxsLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA1KSk7XG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1jb2xvcjogI2RkZDtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMCwwLDAsLjE1KTtcbiAgfVxufVxuXG4vLyBTaXplc1xuLndlbGwtbGcge1xuICBwYWRkaW5nOiAyNHB4O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1sYXJnZTtcbn1cbi53ZWxsLXNtIHtcbiAgcGFkZGluZzogOXB4O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1zbWFsbDtcbn1cbiIsIi8vXG4vLyBDbG9zZSBpY29uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uY2xvc2Uge1xuICBmbG9hdDogcmlnaHQ7XG4gIGZvbnQtc2l6ZTogKEBmb250LXNpemUtYmFzZSAqIDEuNSk7XG4gIGZvbnQtd2VpZ2h0OiBAY2xvc2UtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogQGNsb3NlLWNvbG9yO1xuICB0ZXh0LXNoYWRvdzogQGNsb3NlLXRleHQtc2hhZG93O1xuICAub3BhY2l0eSguMik7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6IEBjbG9zZS1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIC5vcGFjaXR5KC41KTtcbiAgfVxuXG4gIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgYnV0dG9uIHZlcnNpb25cbiAgLy8gaU9TIHJlcXVpcmVzIHRoZSBidXR0b24gZWxlbWVudCBpbnN0ZWFkIG9mIGFuIGFuY2hvciB0YWcuXG4gIC8vIElmIHlvdSB3YW50IHRoZSBhbmNob3IgdmVyc2lvbiwgaXQgcmVxdWlyZXMgYGhyZWY9XCIjXCJgLlxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcbiAgYnV0dG9uJiB7XG4gICAgcGFkZGluZzogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxufVxuIiwiLy9cbi8vIE1vZGFsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHNoaXRcblxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIENvbnRhaW5lciB0aGF0IHRoZSBtb2RhbCBzY3JvbGxzIHdpdGhpblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IEB6aW5kZXgtbW9kYWw7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAvLyBQcmV2ZW50IENocm9tZSBvbiBXaW5kb3dzIGZyb20gYWRkaW5nIGEgZm9jdXMgb3V0bGluZS4gRm9yIGRldGFpbHMsIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cbiAgb3V0bGluZTogMDtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAmLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgLnRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgICAudHJhbnNpdGlvbi10cmFuc2Zvcm0oflwiMC4zcyBlYXNlLW91dFwiKTtcbiAgfVxuICAmLmluIC5tb2RhbC1kaWFsb2cgeyAudHJhbnNsYXRlKDAsIDApIH1cbn1cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLy8gU2hlbGwgZGl2IHRvIHBvc2l0aW9uIHRoZSBtb2RhbCB3aXRoIGJvdHRvbSBwYWRkaW5nXG4ubW9kYWwtZGlhbG9nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogYXV0bztcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4vLyBBY3R1YWwgbW9kYWxcbi5tb2RhbC1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAbW9kYWwtY29udGVudC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgQG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOyAvL29sZCBicm93c2VycyBmYWxsYmFjayAoaWU4IGV0YylcbiAgYm9yZGVyOiAxcHggc29saWQgQG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1sYXJnZTtcbiAgLmJveC1zaGFkb3coMCAzcHggOXB4IHJnYmEoMCwwLDAsLjUpKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgLy8gUmVtb3ZlIGZvY3VzIG91dGxpbmUgZnJvbSBvcGVuZWQgbW9kYWxcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gTW9kYWwgYmFja2dyb3VuZFxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IEB6aW5kZXgtbW9kYWwtYmFja2dyb3VuZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogQG1vZGFsLWJhY2tkcm9wLWJnO1xuICAvLyBGYWRlIGZvciBiYWNrZHJvcFxuICAmLmZhZGUgeyAub3BhY2l0eSgwKTsgfVxuICAmLmluIHsgLm9wYWNpdHkoQG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkpOyB9XG59XG5cbi8vIE1vZGFsIGhlYWRlclxuLy8gVG9wIHNlY3Rpb24gb2YgdGhlIG1vZGFsIHcvIHRpdGxlIGFuZCBkaXNtaXNzXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogQG1vZGFsLXRpdGxlLXBhZGRpbmc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjtcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG59XG4vLyBDbG9zZSBpY29uXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG5cbi8vIFRpdGxlIHRleHQgd2l0aGluIGhlYWRlclxuLm1vZGFsLXRpdGxlIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogQG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0O1xufVxuXG4vLyBNb2RhbCBib2R5XG4vLyBXaGVyZSBhbGwgbW9kYWwgY29udGVudCByZXNpZGVzIChzaWJsaW5nIG9mIC5tb2RhbC1oZWFkZXIgYW5kIC5tb2RhbC1mb290ZXIpXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogQG1vZGFsLWlubmVyLXBhZGRpbmc7XG59XG5cbi8vIEZvb3RlciAoZm9yIGFjdGlvbnMpXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogQG1vZGFsLWlubmVyLXBhZGRpbmc7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyAvLyByaWdodCBhbGlnbiBidXR0b25zXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCBAbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjtcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7IC8vIGNsZWFyIGl0IGluIGNhc2UgZm9sa3MgdXNlIC5wdWxsLSogY2xhc3NlcyBvbiBidXR0b25zXG5cbiAgLy8gUHJvcGVybHkgc3BhY2Ugb3V0IGJ1dHRvbnNcbiAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgLy8gYWNjb3VudCBmb3IgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB3aGljaCBnZXRzIHRoZSBib3R0b20gbWFyZ2luIGxpa2UgYWxsIG90aGVyIGlucHV0c1xuICB9XG4gIC8vIGJ1dCBvdmVycmlkZSB0aGF0IGZvciBidXR0b24gZ3JvdXBzXG4gIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG4gIC8vIGFuZCBvdmVycmlkZSBpdCBmb3IgYmxvY2sgYnV0dG9ucyBhcyB3ZWxsXG4gIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4vLyBNZWFzdXJlIHNjcm9sbGJhciB3aWR0aCBmb3IgcGFkZGluZyBib2R5IGR1cmluZyBtb2RhbCBzaG93L2hpZGVcbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG4vLyBTY2FsZSB1cCB0aGUgbW9kYWxcbkBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAvLyBBdXRvbWF0aWNhbGx5IHNldCBtb2RhbCdzIHdpZHRoIGZvciBsYXJnZXIgdmlld3BvcnRzXG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiBAbW9kYWwtbWQ7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIC5ib3gtc2hhZG93KDAgNXB4IDE1cHggcmdiYSgwLDAsMCwuNSkpO1xuICB9XG5cbiAgLy8gTW9kYWwgc2l6ZXNcbiAgLm1vZGFsLXNtIHsgd2lkdGg6IEBtb2RhbC1zbTsgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1tZC1taW4pIHtcbiAgLm1vZGFsLWxnIHsgd2lkdGg6IEBtb2RhbC1sZzsgfVxufVxuIiwiLy9cbi8vIFRvb2x0aXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2UgY2xhc3Ncbi50b29sdGlwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiBAemluZGV4LXRvb2x0aXA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICAvLyBPdXIgcGFyZW50IGVsZW1lbnQgY2FuIGJlIGFyYml0cmFyeSBzaW5jZSB0b29sdGlwcyBhcmUgYnkgZGVmYXVsdCBpbnNlcnRlZCBhcyBhIHNpYmxpbmcgb2YgdGhlaXIgdGFyZ2V0IGVsZW1lbnQuXG4gIC8vIFNvIHJlc2V0IG91ciBmb250IGFuZCB0ZXh0IHByb3BlcnRpZXMgdG8gYXZvaWQgaW5oZXJpdGluZyB3ZWlyZCB2YWx1ZXMuXG4gIC5yZXNldC10ZXh0KCk7XG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcblxuICAub3BhY2l0eSgwKTtcblxuICAmLmluICAgICB7IC5vcGFjaXR5KEB0b29sdGlwLW9wYWNpdHkpOyB9XG4gICYudG9wICAgIHsgbWFyZ2luLXRvcDogIC0zcHg7IHBhZGRpbmc6IEB0b29sdGlwLWFycm93LXdpZHRoIDA7IH1cbiAgJi5yaWdodCAgeyBtYXJnaW4tbGVmdDogIDNweDsgcGFkZGluZzogMCBAdG9vbHRpcC1hcnJvdy13aWR0aDsgfVxuICAmLmJvdHRvbSB7IG1hcmdpbi10b3A6ICAgM3B4OyBwYWRkaW5nOiBAdG9vbHRpcC1hcnJvdy13aWR0aCAwOyB9XG4gICYubGVmdCAgIHsgbWFyZ2luLWxlZnQ6IC0zcHg7IHBhZGRpbmc6IDAgQHRvb2x0aXAtYXJyb3ctd2lkdGg7IH1cbn1cblxuLy8gV3JhcHBlciBmb3IgdGhlIHRvb2x0aXAgY29udGVudFxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6IEB0b29sdGlwLW1heC13aWR0aDtcbiAgcGFkZGluZzogM3B4IDhweDtcbiAgY29sb3I6IEB0b29sdGlwLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IEB0b29sdGlwLWJnO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xufVxuXG4vLyBBcnJvd3Ncbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuLy8gTm90ZTogRGVwcmVjYXRlZCAudG9wLWxlZnQsIC50b3AtcmlnaHQsIC5ib3R0b20tbGVmdCwgYW5kIC5ib3R0b20tcmlnaHQgYXMgb2YgdjMuMy4xXG4udG9vbHRpcCB7XG4gICYudG9wIC50b29sdGlwLWFycm93IHtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci10b3AtY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLWJvdHRvbTogLUB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogQHRvb2x0aXAtYXJyb3ctd2lkdGggQHRvb2x0aXAtYXJyb3ctd2lkdGggMDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLnRvcC1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IEB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi1ib3R0b206IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogQHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW4tdG9wOiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogQHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogMDtcbiAgICBtYXJnaW4tdG9wOiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiBAdG9vbHRpcC1hcnJvdy13aWR0aCAwIEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbSAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLUB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogMCBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IEB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi10b3A6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IDAgQHRvb2x0aXAtYXJyb3ctd2lkdGggQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogQHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5ib3R0b20tcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiBAdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAwIEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG59XG4iLCIucmVzZXQtdGV4dCgpIHtcbiAgZm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1iYXNlO1xuICAvLyBXZSBkZWxpYmVyYXRlbHkgZG8gTk9UIHJlc2V0IGZvbnQtc2l6ZS5cbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEZhbGxiYWNrIGZvciB3aGVyZSBgc3RhcnRgIGlzIG5vdCBzdXBwb3J0ZWRcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbn1cbiIsIi8vXG4vLyBQb3BvdmVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4ucG9wb3ZlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiBAemluZGV4LXBvcG92ZXI7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1heC13aWR0aDogQHBvcG92ZXItbWF4LXdpZHRoO1xuICBwYWRkaW5nOiAxcHg7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHBvcG92ZXJzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgLnJlc2V0LXRleHQoKTtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogQHBvcG92ZXItYmc7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkIEBwb3BvdmVyLWZhbGxiYWNrLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyOiAxcHggc29saWQgQHBvcG92ZXItYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1sYXJnZTtcbiAgLmJveC1zaGFkb3coMCA1cHggMTBweCByZ2JhKDAsMCwwLC4yKSk7XG5cbiAgLy8gT2Zmc2V0IHRoZSBwb3BvdmVyIHRvIGFjY291bnQgZm9yIHRoZSBwb3BvdmVyIGFycm93XG4gICYudG9wICAgICB7IG1hcmdpbi10b3A6IC1AcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxuICAmLnJpZ2h0ICAgeyBtYXJnaW4tbGVmdDogQHBvcG92ZXItYXJyb3ctd2lkdGg7IH1cbiAgJi5ib3R0b20gIHsgbWFyZ2luLXRvcDogQHBvcG92ZXItYXJyb3ctd2lkdGg7IH1cbiAgJi5sZWZ0ICAgIHsgbWFyZ2luLWxlZnQ6IC1AcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxufVxuXG4ucG9wb3Zlci10aXRsZSB7XG4gIG1hcmdpbjogMDsgLy8gcmVzZXQgaGVhZGluZyBtYXJnaW5cbiAgcGFkZGluZzogOHB4IDE0cHg7XG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1iYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAcG9wb3Zlci10aXRsZS1iZztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGRhcmtlbihAcG9wb3Zlci10aXRsZS1iZywgNSUpO1xuICBib3JkZXItcmFkaXVzOiAoQGJvcmRlci1yYWRpdXMtbGFyZ2UgLSAxKSAoQGJvcmRlci1yYWRpdXMtbGFyZ2UgLSAxKSAwIDA7XG59XG5cbi5wb3BvdmVyLWNvbnRlbnQge1xuICBwYWRkaW5nOiA5cHggMTRweDtcbn1cblxuLy8gQXJyb3dzXG4vL1xuLy8gLmFycm93IGlzIG91dGVyLCAuYXJyb3c6YWZ0ZXIgaXMgaW5uZXJcblxuLnBvcG92ZXIgPiAuYXJyb3cge1xuICAmLFxuICAmOmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgfVxufVxuLnBvcG92ZXIgPiAuYXJyb3cge1xuICBib3JkZXItd2lkdGg6IEBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xufVxuLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIge1xuICBib3JkZXItd2lkdGg6IEBwb3BvdmVyLWFycm93LXdpZHRoO1xuICBjb250ZW50OiBcIlwiO1xufVxuXG4ucG9wb3ZlciB7XG4gICYudG9wID4gLmFycm93IHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC1AcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgIGJvcmRlci10b3AtY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWZhbGxiYWNrLWNvbG9yOyAvLyBJRTggZmFsbGJhY2tcbiAgICBib3JkZXItdG9wLWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICBib3R0b206IC1AcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgYm90dG9tOiAxcHg7XG4gICAgICBtYXJnaW4tbGVmdDogLUBwb3BvdmVyLWFycm93LXdpZHRoO1xuICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IEBwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxuICAmLnJpZ2h0ID4gLmFycm93IHtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgbWFyZ2luLXRvcDogLUBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I7IC8vIElFOCBmYWxsYmFja1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I7XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgIGxlZnQ6IDFweDtcbiAgICAgIGJvdHRvbTogLUBwb3BvdmVyLWFycm93LXdpZHRoO1xuICAgICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6IEBwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxuICAmLmJvdHRvbSA+IC5hcnJvdyB7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjsgLy8gSUU4IGZhbGxiYWNrXG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I7XG4gICAgdG9wOiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgIHRvcDogMXB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IC1AcG9wb3Zlci1hcnJvdy13aWR0aDtcbiAgICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmLmxlZnQgPiAuYXJyb3cge1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgbWFyZ2luLXRvcDogLUBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgIGJvcmRlci1yaWdodC13aWR0aDogMDtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I7IC8vIElFOCBmYWxsYmFja1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgcmlnaHQ6IDFweDtcbiAgICAgIGJvcmRlci1yaWdodC13aWR0aDogMDtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1jb2xvcjtcbiAgICAgIGJvdHRvbTogLUBwb3BvdmVyLWFycm93LXdpZHRoO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIENhcm91c2VsXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIFdyYXBwZXIgZm9yIHRoZSBzbGlkZSBjb250YWluZXIgYW5kIGluZGljYXRvcnNcbi5jYXJvdXNlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNhcm91c2VsLWlubmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcblxuICA+IC5pdGVtIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAudHJhbnNpdGlvbiguNnMgZWFzZS1pbi1vdXQgbGVmdCk7XG5cbiAgICAvLyBBY2NvdW50IGZvciBqYW5raXR1ZGUgb24gaW1hZ2VzXG4gICAgPiBpbWcsXG4gICAgPiBhID4gaW1nIHtcbiAgICAgICY6ZXh0ZW5kKC5pbWctcmVzcG9uc2l2ZSk7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICB9XG5cbiAgICAvLyBXZWJLaXQgQ1NTMyB0cmFuc2Zvcm1zIGZvciBzdXBwb3J0ZWQgZGV2aWNlc1xuICAgIEBtZWRpYSBhbGwgYW5kICh0cmFuc2Zvcm0tM2QpLCAoLXdlYmtpdC10cmFuc2Zvcm0tM2QpIHtcbiAgICAgIC50cmFuc2l0aW9uLXRyYW5zZm9ybSh+JzAuNnMgZWFzZS1pbi1vdXQnKTtcbiAgICAgIC5iYWNrZmFjZS12aXNpYmlsaXR5KH4naGlkZGVuJyk7XG4gICAgICAucGVyc3BlY3RpdmUoMTAwMHB4KTtcblxuICAgICAgJi5uZXh0LFxuICAgICAgJi5hY3RpdmUucmlnaHQge1xuICAgICAgICAudHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG4gICAgICAmLnByZXYsXG4gICAgICAmLmFjdGl2ZS5sZWZ0IHtcbiAgICAgICAgLnRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICAgICYubmV4dC5sZWZ0LFxuICAgICAgJi5wcmV2LnJpZ2h0LFxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICAudHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiAuYWN0aXZlLFxuICA+IC5uZXh0LFxuICA+IC5wcmV2IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gID4gLmFjdGl2ZSB7XG4gICAgbGVmdDogMDtcbiAgfVxuXG4gID4gLm5leHQsXG4gID4gLnByZXYge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICA+IC5uZXh0IHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gID4gLnByZXYge1xuICAgIGxlZnQ6IC0xMDAlO1xuICB9XG4gID4gLm5leHQubGVmdCxcbiAgPiAucHJldi5yaWdodCB7XG4gICAgbGVmdDogMDtcbiAgfVxuXG4gID4gLmFjdGl2ZS5sZWZ0IHtcbiAgICBsZWZ0OiAtMTAwJTtcbiAgfVxuICA+IC5hY3RpdmUucmlnaHQge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cblxufVxuXG4vLyBMZWZ0L3JpZ2h0IGNvbnRyb2xzIGZvciBuYXZcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uY2Fyb3VzZWwtY29udHJvbCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiBAY2Fyb3VzZWwtY29udHJvbC13aWR0aDtcbiAgLm9wYWNpdHkoQGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eSk7XG4gIGZvbnQtc2l6ZTogQGNhcm91c2VsLWNvbnRyb2wtZm9udC1zaXplO1xuICBjb2xvcjogQGNhcm91c2VsLWNvbnRyb2wtY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IEBjYXJvdXNlbC10ZXh0LXNoYWRvdztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsgLy8gRml4IElFOSBjbGljay10aHJ1IGJ1Z1xuICAvLyBXZSBjYW4ndCBoYXZlIHRoaXMgdHJhbnNpdGlvbiBoZXJlIGJlY2F1c2UgV2ViS2l0IGNhbmNlbHMgdGhlIGNhcm91c2VsXG4gIC8vIGFuaW1hdGlvbiBpZiB5b3UgdHJpcCB0aGlzIHdoaWxlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciBhbmltYXRpb24uXG5cbiAgLy8gU2V0IGdyYWRpZW50cyBmb3IgYmFja2dyb3VuZHNcbiAgJi5sZWZ0IHtcbiAgICAjZ3JhZGllbnQgPiAuaG9yaXpvbnRhbChAc3RhcnQtY29sb3I6IHJnYmEoMCwwLDAsLjUpOyBAZW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4wMDAxKSk7XG4gIH1cbiAgJi5yaWdodCB7XG4gICAgbGVmdDogYXV0bztcbiAgICByaWdodDogMDtcbiAgICAjZ3JhZGllbnQgPiAuaG9yaXpvbnRhbChAc3RhcnQtY29sb3I6IHJnYmEoMCwwLDAsLjAwMDEpOyBAZW5kLWNvbG9yOiByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBIb3Zlci9mb2N1cyBzdGF0ZVxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGNvbG9yOiBAY2Fyb3VzZWwtY29udHJvbC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgLm9wYWNpdHkoLjkpO1xuICB9XG5cbiAgLy8gVG9nZ2xlc1xuICAuaWNvbi1wcmV2LFxuICAuaWNvbi1uZXh0LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luLXRvcDogLTEwcHg7XG4gICAgei1pbmRleDogNTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbiAgLmljb24tcHJldixcbiAgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQge1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gIH1cbiAgLmljb24tbmV4dCxcbiAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgICByaWdodDogNTAlO1xuICAgIG1hcmdpbi1yaWdodDogLTEwcHg7XG4gIH1cbiAgLmljb24tcHJldixcbiAgLmljb24tbmV4dCB7XG4gICAgd2lkdGg6ICAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250LWZhbWlseTogc2VyaWY7XG4gIH1cblxuXG4gIC5pY29uLXByZXYge1xuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMzknOy8vIFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLIChVKzIwMzkpXG4gICAgfVxuICB9XG4gIC5pY29uLW5leHQge1xuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwM2EnOy8vIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSyAoVSsyMDNBKVxuICAgIH1cbiAgfVxufVxuXG4vLyBPcHRpb25hbCBpbmRpY2F0b3IgcGlwc1xuLy9cbi8vIEFkZCBhbiB1bm9yZGVyZWQgbGlzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2xhc3MgYW5kIGFkZCBhIGxpc3QgaXRlbSBmb3IgZWFjaFxuLy8gc2xpZGUgeW91ciBjYXJvdXNlbCBob2xkcy5cblxuLmNhcm91c2VsLWluZGljYXRvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMTBweDtcbiAgbGVmdDogNTAlO1xuICB6LWluZGV4OiAxNTtcbiAgd2lkdGg6IDYwJTtcbiAgbWFyZ2luLWxlZnQ6IC0zMCU7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gIGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6ICAxMHB4O1xuICAgIGhlaWdodDogMTBweDtcbiAgICBtYXJnaW46IDFweDtcbiAgICB0ZXh0LWluZGVudDogLTk5OXB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBjYXJvdXNlbC1pbmRpY2F0b3ItYm9yZGVyLWNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgLy8gSUU4LTkgaGFjayBmb3IgZXZlbnQgaGFuZGxpbmdcbiAgICAvL1xuICAgIC8vIEludGVybmV0IEV4cGxvcmVyIDgtOSBkb2VzIG5vdCBzdXBwb3J0IGNsaWNrcyBvbiBlbGVtZW50cyB3aXRob3V0IGEgc2V0XG4gICAgLy8gYGJhY2tncm91bmQtY29sb3JgLiBXZSBjYW5ub3QgdXNlIGBmaWx0ZXJgIHNpbmNlIHRoYXQncyBub3Qgdmlld2VkIGFzIGFcbiAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yIGJ5IHRoZSBicm93c2VyLiBUaHVzLCBhIGhhY2sgaXMgbmVlZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvY2xpY2sjSW50ZXJuZXRfRXhwbG9yZXJcbiAgICAvL1xuICAgIC8vIEZvciBJRTgsIHdlIHNldCBzb2xpZCBibGFjayBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgYHJnYmEoKWAuIEZvciBJRTksIHdlXG4gICAgLy8gc2V0IGFscGhhIHRyYW5zcGFyZW5jeSBmb3IgdGhlIGJlc3QgcmVzdWx0cyBwb3NzaWJsZS5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwIFxcOTsgLy8gSUU4XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwwKTsgLy8gSUU5XG4gIH1cbiAgLmFjdGl2ZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAgMTJweDtcbiAgICBoZWlnaHQ6IDEycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc7XG4gIH1cbn1cblxuLy8gT3B0aW9uYWwgY2FwdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIaWRkZW4gYnkgZGVmYXVsdCBmb3Igc21hbGxlciB2aWV3cG9ydHNcbi5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxNSU7XG4gIHJpZ2h0OiAxNSU7XG4gIGJvdHRvbTogMjBweDtcbiAgei1pbmRleDogMTA7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgY29sb3I6IEBjYXJvdXNlbC1jYXB0aW9uLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiBAY2Fyb3VzZWwtdGV4dC1zaGFkb3c7XG4gICYgLmJ0biB7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmU7IC8vIE5vIHNoYWRvdyBmb3IgYnV0dG9uIGVsZW1lbnRzIGluIGNhcm91c2VsLWNhcHRpb25cbiAgfVxufVxuXG5cbi8vIFNjYWxlIHVwIGNvbnRyb2xzIGZvciB0YWJsZXRzIGFuZCB1cFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcblxuICAvLyBTY2FsZSB1cCB0aGUgY29udHJvbHMgYSBzbWlkZ2VcbiAgLmNhcm91c2VsLWNvbnRyb2wge1xuICAgIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxuICAgIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgICAuaWNvbi1wcmV2LFxuICAgIC5pY29uLW5leHQge1xuICAgICAgd2lkdGg6IChAY2Fyb3VzZWwtY29udHJvbC1mb250LXNpemUgKiAxLjUpO1xuICAgICAgaGVpZ2h0OiAoQGNhcm91c2VsLWNvbnRyb2wtZm9udC1zaXplICogMS41KTtcbiAgICAgIG1hcmdpbi10b3A6IChAY2Fyb3VzZWwtY29udHJvbC1mb250LXNpemUgLyAtMik7XG4gICAgICBmb250LXNpemU6IChAY2Fyb3VzZWwtY29udHJvbC1mb250LXNpemUgKiAxLjUpO1xuICAgIH1cbiAgICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgICAuaWNvbi1wcmV2IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAoQGNhcm91c2VsLWNvbnRyb2wtZm9udC1zaXplIC8gLTIpO1xuICAgIH1cbiAgICAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQsXG4gICAgLmljb24tbmV4dCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IChAY2Fyb3VzZWwtY29udHJvbC1mb250LXNpemUgLyAtMik7XG4gICAgfVxuICB9XG5cbiAgLy8gU2hvdyBhbmQgbGVmdCBhbGlnbiB0aGUgY2FwdGlvbnNcbiAgLmNhcm91c2VsLWNhcHRpb24ge1xuICAgIGxlZnQ6IDIwJTtcbiAgICByaWdodDogMjAlO1xuICAgIHBhZGRpbmctYm90dG9tOiAzMHB4O1xuICB9XG5cbiAgLy8gTW92ZSB1cCB0aGUgaW5kaWNhdG9yc1xuICAuY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gICAgYm90dG9tOiAyMHB4O1xuICB9XG59XG4iLCIvLyBDbGVhcmZpeFxuLy9cbi8vIEZvciBtb2Rlcm4gYnJvd3NlcnNcbi8vIDEuIFRoZSBzcGFjZSBjb250ZW50IGlzIG9uZSB3YXkgdG8gYXZvaWQgYW4gT3BlcmEgYnVnIHdoZW4gdGhlXG4vLyAgICBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGRvY3VtZW50LlxuLy8gICAgT3RoZXJ3aXNlIGl0IGNhdXNlcyBzcGFjZSB0byBhcHBlYXIgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGVsZW1lbnRzXG4vLyAgICB0aGF0IGFyZSBjbGVhcmZpeGVkLlxuLy8gMi4gVGhlIHVzZSBvZiBgdGFibGVgIHJhdGhlciB0aGFuIGBibG9ja2AgaXMgb25seSBuZWNlc3NhcnkgaWYgdXNpbmdcbi8vICAgIGA6YmVmb3JlYCB0byBjb250YWluIHRoZSB0b3AtbWFyZ2lucyBvZiBjaGlsZCBlbGVtZW50cy5cbi8vXG4vLyBTb3VyY2U6IGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrL1xuXG4uY2xlYXJmaXgoKSB7XG4gICY6YmVmb3JlLFxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxuICAgIGRpc3BsYXk6IHRhYmxlOyAvLyAyXG4gIH1cbiAgJjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cbiIsIi8vIENlbnRlci1hbGlnbiBhIGJsb2NrIGxldmVsIGVsZW1lbnRcblxuLmNlbnRlci1ibG9jaygpIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4iLCIvLyBDU1MgaW1hZ2UgcmVwbGFjZW1lbnRcbi8vXG4vLyBIZWFkcyB1cCEgdjMgbGF1bmNoZWQgd2l0aCBvbmx5IGAuaGlkZS10ZXh0KClgLCBidXQgcGVyIG91ciBwYXR0ZXJuIGZvclxuLy8gbWl4aW5zIGJlaW5nIHJldXNlZCBhcyBjbGFzc2VzIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhpcyBkb2Vzbid0IGhvbGQgdXAuIEFzXG4vLyBvZiB2My4wLjEgd2UgaGF2ZSBhZGRlZCBgLnRleHQtaGlkZSgpYCBhbmQgZGVwcmVjYXRlZCBgLmhpZGUtdGV4dCgpYC5cbi8vXG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2NvbW1pdC9hYTAzOTZlYWU3NTdcblxuLy8gRGVwcmVjYXRlZCBhcyBvZiB2My4wLjEgKGhhcyBiZWVuIHJlbW92ZWQgaW4gdjQpXG4uaGlkZS10ZXh0KCkge1xuICBmb250OiB+XCIwLzBcIiBhO1xuICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xufVxuXG4vLyBOZXcgbWl4aW4gdG8gdXNlIGFzIG9mIHYzLjAuMVxuLnRleHQtaGlkZSgpIHtcbiAgLmhpZGUtdGV4dCgpO1xufVxuIiwiLy9cbi8vIFJlc3BvbnNpdmU6IFV0aWxpdHkgY2xhc3Nlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBJRTEwIGluIFdpbmRvd3MgKFBob25lKSA4XG4vL1xuLy8gU3VwcG9ydCBmb3IgcmVzcG9uc2l2ZSB2aWV3cyB2aWEgbWVkaWEgcXVlcmllcyBpcyBraW5kIG9mIGJvcmtlZCBpbiBJRTEwLCBmb3Jcbi8vIFN1cmZhY2UvZGVza3RvcCBpbiBzcGxpdCB2aWV3IGFuZCBmb3IgV2luZG93cyBQaG9uZSA4LiBUaGlzIHBhcnRpY3VsYXIgZml4XG4vLyBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGEgc25pcHBldCBvZiBKYXZhU2NyaXB0IHRvIHNuaWZmIHRoZSB1c2VyIGFnZW50IGFuZFxuLy8gYXBwbHkgc29tZSBjb25kaXRpb25hbCBDU1MgdG8gKm9ubHkqIHRoZSBTdXJmYWNlL2Rlc2t0b3AgV2luZG93cyA4LiBMb29rIGF0XG4vLyBvdXIgR2V0dGluZyBTdGFydGVkIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBidWcuXG4vL1xuLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZm9sbG93aW5nOlxuLy9cbi8vIElzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEwNDk3XG4vLyBEb2NzOiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9nZXR0aW5nLXN0YXJ0ZWQvI3N1cHBvcnQtaWUxMC13aWR0aFxuLy8gU291cmNlOiBodHRwOi8vdGlta2FkbGVjLmNvbS8yMDEzLzAxL3dpbmRvd3MtcGhvbmUtOC1hbmQtZGV2aWNlLXdpZHRoL1xuLy8gU291cmNlOiBodHRwOi8vdGlta2FkbGVjLmNvbS8yMDEyLzEwL2llMTAtc25hcC1tb2RlLWFuZC1yZXNwb25zaXZlLWRlc2lnbi9cblxuQC1tcy12aWV3cG9ydCB7XG4gIHdpZHRoOiBkZXZpY2Utd2lkdGg7XG59XG5cblxuLy8gVmlzaWJpbGl0eSB1dGlsaXRpZXNcbi8vIE5vdGU6IERlcHJlY2F0ZWQgLnZpc2libGUteHMsIC52aXNpYmxlLXNtLCAudmlzaWJsZS1tZCwgYW5kIC52aXNpYmxlLWxnIGFzIG9mIHYzLjIuMFxuLnZpc2libGUteHMsXG4udmlzaWJsZS1zbSxcbi52aXNpYmxlLW1kLFxuLnZpc2libGUtbGcge1xuICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcbn1cblxuLnZpc2libGUteHMtYmxvY2ssXG4udmlzaWJsZS14cy1pbmxpbmUsXG4udmlzaWJsZS14cy1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1zbS1ibG9jayxcbi52aXNpYmxlLXNtLWlubGluZSxcbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayxcbi52aXNpYmxlLW1kLWJsb2NrLFxuLnZpc2libGUtbWQtaW5saW5lLFxuLnZpc2libGUtbWQtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtbGctYmxvY2ssXG4udmlzaWJsZS1sZy1pbmxpbmUsXG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi52aXNpYmxlLXhzIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xuICB9XG59XG4udmlzaWJsZS14cy1ibG9jayB7XG4gIEBtZWRpYSAobWF4LXdpZHRoOiBAc2NyZWVuLXhzLW1heCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXhzLWlubGluZSB7XG4gIEBtZWRpYSAobWF4LXdpZHRoOiBAc2NyZWVuLXhzLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS14cy1pbmxpbmUtYmxvY2sge1xuICBAbWVkaWEgKG1heC13aWR0aDogQHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG4udmlzaWJsZS1zbSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tc20tbWF4KSB7XG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xuICB9XG59XG4udmlzaWJsZS1zbS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tc20tbWF4KSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtc20taW5saW5lIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1zbS1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtc20taW5saW5lLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1zbS1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG4udmlzaWJsZS1tZCB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tbWQtbWF4KSB7XG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xuICB9XG59XG4udmlzaWJsZS1tZC1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tbWQtbWF4KSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtbWQtaW5saW5lIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1tZC1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtbWQtaW5saW5lLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1tZC1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG4udmlzaWJsZS1sZyB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIC5yZXNwb25zaXZlLXZpc2liaWxpdHkoKTtcbiAgfVxufVxuLnZpc2libGUtbGctYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1sZy1pbmxpbmUge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmhpZGRlbi14cyB7XG4gIEBtZWRpYSAobWF4LXdpZHRoOiBAc2NyZWVuLXhzLW1heCkge1xuICAgIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xuICB9XG59XG4uaGlkZGVuLXNtIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1zbS1tYXgpIHtcbiAgICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcbiAgfVxufVxuLmhpZGRlbi1tZCB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tbWQtbWF4KSB7XG4gICAgLnJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCk7XG4gIH1cbn1cbi5oaWRkZW4tbGcge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcbiAgICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcbiAgfVxufVxuXG5cbi8vIFByaW50IHV0aWxpdGllc1xuLy9cbi8vIE1lZGlhIHF1ZXJpZXMgYXJlIHBsYWNlZCBvbiB0aGUgaW5zaWRlIHRvIGJlIG1peGluLWZyaWVuZGx5LlxuXG4vLyBOb3RlOiBEZXByZWNhdGVkIC52aXNpYmxlLXByaW50IGFzIG9mIHYzLjIuMFxuLnZpc2libGUtcHJpbnQge1xuICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIC5yZXNwb25zaXZlLXZpc2liaWxpdHkoKTtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1wcmludC1pbmxpbmUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmhpZGRlbi1wcmludCB7XG4gIEBtZWRpYSBwcmludCB7XG4gICAgLnJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCk7XG4gIH1cbn1cbiIsIi8vIFJlc3BvbnNpdmUgdXRpbGl0aWVzXG5cbi8vXG4vLyBNb3JlIGVhc2lseSBpbmNsdWRlIGFsbCB0aGUgc3RhdGVzIGZvciByZXNwb25zaXZlLXV0aWxpdGllcy5sZXNzLlxuLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpIHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgdGFibGUmICB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgdHImICAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XG4gIHRoJixcbiAgdGQmICAgICB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxufVxuXG4ucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiJdfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAubWluLmNzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAubWluLmNzcwppbmRleCAyYjkyN2Y4Li40Y2Y3MjllIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5taW4uY3NzCkBAIC0xLDkgKzEsNiBAQAogLyohCi0gKiBCb290c3RyYXAgdjIuMy4wCi0gKgotICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMAotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogRGVzaWduZWQgYW5kIGJ1aWx0IHdpdGggYWxsIHRoZSBsb3ZlIGluIHRoZSB3b3JsZCBAdHdpdHRlciBieSBAbWRvIGFuZCBAZmF0LgotICovLmNsZWFyZml4eyp6b29tOjF9LmNsZWFyZml4OmJlZm9yZSwuY2xlYXJmaXg6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LmhpZGUtdGV4dHtmb250OjAvMCBhO2NvbG9yOnRyYW5zcGFyZW50O3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0uaW5wdXQtYmxvY2stbGV2ZWx7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9YXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG5hdixzZWN0aW9ue2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmV9aHRtbHtmb250LXNpemU6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlfWE6Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9YTpob3ZlcixhOmFjdGl2ZXtvdXRsaW5lOjB9c3ViLHN1cHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vwe3RvcDotMC41ZW19c3Vie2JvdHRvbTotMC4yNWVtfWltZ3t3aWR0aDphdXRvXDk7aGVpZ2h0OmF1dG87bWF4LXdpZHRoOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlcjowOy1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpY30jbWFwX2NhbnZhcyBpbWcsLmdvb2dsZS1tYXBzIGltZ3ttYXgtd2lkdGg6bm9uZX1idXR0b24saW5wdXQsc2VsZWN0LHRleHRhcmVhe21hcmdpbjowO2ZvbnQtc2l6ZToxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1idXR0b24saW5wdXR7Km92ZXJmbG93OnZpc2libGU7bGluZS1oZWlnaHQ6bm9ybWFsfWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dDo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9YnV0dG9uLGh0bWwgaW5wdXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmVzZXQiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXXtjdXJzb3I6cG9pbnRlcjstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWxhYmVsLHNlbGVjdCxidXR0b24saW5wdXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmVzZXQiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXSxpbnB1dFt0eXBlPSJyYWRpbyJdLGlucHV0W3R5cGU9ImNoZWNrYm94Il17Y3Vyc29yOnBvaW50ZXJ9aW5wdXRbdHlwZT0ic2VhcmNoIl17LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGR9aW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24saW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9dGV4dGFyZWF7b3ZlcmZsb3c6YXV0bzt2ZXJ0aWNhbC1hbGlnbjp0b3B9QG1lZGlhIHByaW50eyp7Y29sb3I6IzAwMCFpbXBvcnRhbnQ7dGV4dC1zaGFkb3c6bm9uZSFpbXBvcnRhbnQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH1hLGE6dmlzaXRlZHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWFbaHJlZl06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIoaHJlZikgIikifWFiYnJbdGl0bGVdOmFmdGVye2NvbnRlbnQ6IiAoIiBhdHRyKHRpdGxlKSAiKSJ9LmlyIGE6YWZ0ZXIsYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlcixhW2hyZWZePSIjIl06YWZ0ZXJ7Y29udGVudDoiIn1wcmUsYmxvY2txdW90ZXtib3JkZXI6MXB4IHNvbGlkICM5OTk7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9dGhlYWR7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9dHIsaW1ne3BhZ2UtYnJlYWstaW5zaWRlOmF2b2lkfWltZ3ttYXgtd2lkdGg6MTAwJSFpbXBvcnRhbnR9QHBhZ2V7bWFyZ2luOi41Y219cCxoMixoM3tvcnBoYW5zOjM7d2lkb3dzOjN9aDIsaDN7cGFnZS1icmVhay1hZnRlcjphdm9pZH19Ym9keXttYXJnaW46MDtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9YXtjb2xvcjojMDhjO3RleHQtZGVjb3JhdGlvbjpub25lfWE6aG92ZXIsYTpmb2N1c3tjb2xvcjojMDA1NTgwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmltZy1yb3VuZGVkey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uaW1nLXBvbGFyb2lke3BhZGRpbmc6NHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpfS5pbWctY2lyY2xley13ZWJraXQtYm9yZGVyLXJhZGl1czo1MDBweDstbW96LWJvcmRlci1yYWRpdXM6NTAwcHg7Ym9yZGVyLXJhZGl1czo1MDBweH0ucm93e21hcmdpbi1sZWZ0Oi0yMHB4Oyp6b29tOjF9LnJvdzpiZWZvcmUsLnJvdzphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93OmFmdGVye2NsZWFyOmJvdGh9W2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnQ7bWluLWhlaWdodDoxcHg7bWFyZ2luLWxlZnQ6MjBweH0uY29udGFpbmVyLC5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDo5NDBweH0uc3BhbjEye3dpZHRoOjk0MHB4fS5zcGFuMTF7d2lkdGg6ODYwcHh9LnNwYW4xMHt3aWR0aDo3ODBweH0uc3Bhbjl7d2lkdGg6NzAwcHh9LnNwYW44e3dpZHRoOjYyMHB4fS5zcGFuN3t3aWR0aDo1NDBweH0uc3BhbjZ7d2lkdGg6NDYwcHh9LnNwYW41e3dpZHRoOjM4MHB4fS5zcGFuNHt3aWR0aDozMDBweH0uc3BhbjN7d2lkdGg6MjIwcHh9LnNwYW4ye3dpZHRoOjE0MHB4fS5zcGFuMXt3aWR0aDo2MHB4fS5vZmZzZXQxMnttYXJnaW4tbGVmdDo5ODBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6OTAwcHh9Lm9mZnNldDEwe21hcmdpbi1sZWZ0OjgyMHB4fS5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc0MHB4fS5vZmZzZXQ4e21hcmdpbi1sZWZ0OjY2MHB4fS5vZmZzZXQ3e21hcmdpbi1sZWZ0OjU4MHB4fS5vZmZzZXQ2e21hcmdpbi1sZWZ0OjUwMHB4fS5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQyMHB4fS5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM0MHB4fS5vZmZzZXQze21hcmdpbi1sZWZ0OjI2MHB4fS5vZmZzZXQye21hcmdpbi1sZWZ0OjE4MHB4fS5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwMHB4fS5yb3ctZmx1aWR7d2lkdGg6MTAwJTsqem9vbToxfS5yb3ctZmx1aWQ6YmVmb3JlLC5yb3ctZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdy1mbHVpZDphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDttYXJnaW4tbGVmdDoyLjEyNzY1OTU3NDQ2ODA4NSU7Km1hcmdpbi1sZWZ0OjIuMDc0NDY4MDg1MTA2MzgzJTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjEyNzY1OTU3NDQ2ODA4NSV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDg5MzYxNzAyMTI3NjUlOyp3aWR0aDo5MS40MzYxNzAyMTI3NjU5NCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjk3ODcyMzQwNDI1NTMyJTsqd2lkdGg6ODIuOTI1NTMxOTE0ODkzNjElfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjQ2ODA4NTEwNjM4Mjk3JTsqd2lkdGg6NzQuNDE0ODkzNjE3MDIxMjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljk1NzQ0NjgwODUxMDY0JTsqd2lkdGg6NjUuOTA0MjU1MzE5MTQ4OTMlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjQ0NjgwODUxMDYzODI5JTsqd2lkdGg6NTcuMzkzNjE3MDIxMjc2NTklfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjkzNjE3MDIxMjc2NTk1JTsqd2lkdGg6NDguODgyOTc4NzIzNDA0MjUlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjQyNTUzMTkxNDg5MzYyJTsqd2lkdGg6NDAuMzcyMzQwNDI1NTMxOTIlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjkxNDg5MzYxNzAyMTI3OCU7KndpZHRoOjMxLjg2MTcwMjEyNzY1OTU3NiV9LnJvdy1mbHVpZCAuc3BhbjN7d2lkdGg6MjMuNDA0MjU1MzE5MTQ4OTM0JTsqd2lkdGg6MjMuMzUxMDYzODI5Nzg3MjMzJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC44OTM2MTcwMjEyNzY1OTUlOyp3aWR0aDoxNC44NDA0MjU1MzE5MTQ4OTQlfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjYuMzgyOTc4NzIzNDA0MjU1JTsqd2lkdGg6Ni4zMjk3ODcyMzQwNDI1NTMlfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNC4yNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjEwNC4xNDg5MzYxNzAyMTI3NSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjEyNzY1OTU3NDQ2ODA4JTsqbWFyZ2luLWxlZnQ6MTAyLjAyMTI3NjU5NTc0NDY3JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5NS43NDQ2ODA4NTEwNjM4MiU7Km1hcmdpbi1sZWZ0Ojk1LjYzODI5Nzg3MjM0MDQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjkzLjYxNzAyMTI3NjU5NTc0JTsqbWFyZ2luLWxlZnQ6OTMuNTEwNjM4Mjk3ODcyMzIlfS5yb3ctZmx1aWQgLm9mZnNldDEwe21hcmdpbi1sZWZ0Ojg3LjIzNDA0MjU1MzE5MTQ5JTsqbWFyZ2luLWxlZnQ6ODcuMTI3NjU5NTc0NDY4MDclfS5yb3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojg1LjEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4NC45OTk5OTk5OTk5OTk5OSV9LnJvdy1mbHVpZCAub2Zmc2V0OXttYXJnaW4tbGVmdDo3OC43MjM0MDQyNTUzMTkxNCU7Km1hcmdpbi1sZWZ0Ojc4LjYxNzAyMTI3NjU5NTcyJX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc2LjU5NTc0NDY4MDg1MTA2JTsqbWFyZ2luLWxlZnQ6NzYuNDg5MzYxNzAyMTI3NjQlfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzAuMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0OjcwLjEwNjM4Mjk3ODcyMzM5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjA4NTEwNjM4Mjk3ODcyJTsqbWFyZ2luLWxlZnQ6NjcuOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0N3ttYXJnaW4tbGVmdDo2MS43MDIxMjc2NTk1NzQ0NiU7Km1hcmdpbi1sZWZ0OjYxLjU5NTc0NDY4MDg1MTA2JX0ucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjU5LjU3NDQ2ODA4NTEwNjM3NSU7Km1hcmdpbi1sZWZ0OjU5LjQ2ODA4NTEwNjM4Mjk3JX0ucm93LWZsdWlkIC5vZmZzZXQ2e21hcmdpbi1sZWZ0OjUzLjE5MTQ4OTM2MTcwMjEyNSU7Km1hcmdpbi1sZWZ0OjUzLjA4NTEwNjM4Mjk3ODcxNSV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4wNjM4Mjk3ODcyMzQwMzUlOyptYXJnaW4tbGVmdDo1MC45NTc0NDY4MDg1MTA2MyV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NC42ODA4NTEwNjM4Mjk3OSU7Km1hcmdpbi1sZWZ0OjQ0LjU3NDQ2ODA4NTEwNjM4JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjU1MzE5MTQ4OTM2MTclOyptYXJnaW4tbGVmdDo0Mi40NDY4MDg1MTA2MzgzJX0ucm93LWZsdWlkIC5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM2LjE3MDIxMjc2NTk1NzQ0NCU7Km1hcmdpbi1sZWZ0OjM2LjA2MzgyOTc4NzIzNDA1JX0ucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjM0LjA0MjU1MzE5MTQ4OTM2JTsqbWFyZ2luLWxlZnQ6MzMuOTM2MTcwMjEyNzY1OTYlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjcuNjU5NTc0NDY4MDg1MTA0JTsqbWFyZ2luLWxlZnQ6MjcuNTUzMTkxNDg5MzYxNyV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS41MzE5MTQ4OTM2MTcwMiU7Km1hcmdpbi1sZWZ0OjI1LjQyNTUzMTkxNDg5MzYxOCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS4xNDg5MzYxNzAyMTI3NjQlOyptYXJnaW4tbGVmdDoxOS4wNDI1NTMxOTE0ODkzNiV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0OjE2LjkxNDg5MzYxNzAyMTI3OCV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMC42MzgyOTc4NzIzNDA0MjUlOyptYXJnaW4tbGVmdDoxMC41MzE5MTQ4OTM2MTcwMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjUxMDYzODI5Nzg3MjM0JTsqbWFyZ2luLWxlZnQ6OC40MDQyNTUzMTkxNDg5MzglfVtjbGFzcyo9InNwYW4iXS5oaWRlLC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLmhpZGV7ZGlzcGxheTpub25lfVtjbGFzcyo9InNwYW4iXS5wdWxsLXJpZ2h0LC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LmNvbnRhaW5lcnttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvOyp6b29tOjF9LmNvbnRhaW5lcjpiZWZvcmUsLmNvbnRhaW5lcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY29udGFpbmVyOmFmdGVye2NsZWFyOmJvdGh9LmNvbnRhaW5lci1mbHVpZHtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7Knpvb206MX0uY29udGFpbmVyLWZsdWlkOmJlZm9yZSwuY29udGFpbmVyLWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH1we21hcmdpbjowIDAgMTBweH0ubGVhZHttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zaXplOjIxcHg7Zm9udC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHh9c21hbGx7Zm9udC1zaXplOjg1JX1zdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZH1lbXtmb250LXN0eWxlOml0YWxpY31jaXRle2ZvbnQtc3R5bGU6bm9ybWFsfS5tdXRlZHtjb2xvcjojOTk5fWEubXV0ZWQ6aG92ZXIsYS5tdXRlZDpmb2N1c3tjb2xvcjojODA4MDgwfS50ZXh0LXdhcm5pbmd7Y29sb3I6I2MwOTg1M31hLnRleHQtd2FybmluZzpob3ZlcixhLnRleHQtd2FybmluZzpmb2N1c3tjb2xvcjojYTQ3ZTNjfS50ZXh0LWVycm9ye2NvbG9yOiNiOTRhNDh9YS50ZXh0LWVycm9yOmhvdmVyLGEudGV4dC1lcnJvcjpmb2N1c3tjb2xvcjojOTUzYjM5fS50ZXh0LWluZm97Y29sb3I6IzNhODdhZH1hLnRleHQtaW5mbzpob3ZlcixhLnRleHQtaW5mbzpmb2N1c3tjb2xvcjojMmQ2OTg3fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0N31hLnRleHQtc3VjY2Vzczpob3ZlcixhLnRleHQtc3VjY2Vzczpmb2N1c3tjb2xvcjojMzU2NjM1fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfWgxLGgyLGgzLGg0LGg1LGg2e21hcmdpbjoxMHB4IDA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6aW5oZXJpdDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZWxlZ2liaWxpdHl9aDEgc21hbGwsaDIgc21hbGwsaDMgc21hbGwsaDQgc21hbGwsaDUgc21hbGwsaDYgc21hbGx7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7Y29sb3I6Izk5OX1oMSxoMixoM3tsaW5lLWhlaWdodDo0MHB4fWgxe2ZvbnQtc2l6ZTozOC41cHh9aDJ7Zm9udC1zaXplOjMxLjVweH1oM3tmb250LXNpemU6MjQuNXB4fWg0e2ZvbnQtc2l6ZToxNy41cHh9aDV7Zm9udC1zaXplOjE0cHh9aDZ7Zm9udC1zaXplOjExLjlweH1oMSBzbWFsbHtmb250LXNpemU6MjQuNXB4fWgyIHNtYWxse2ZvbnQtc2l6ZToxNy41cHh9aDMgc21hbGx7Zm9udC1zaXplOjE0cHh9aDQgc21hbGx7Zm9udC1zaXplOjE0cHh9LnBhZ2UtaGVhZGVye3BhZGRpbmctYm90dG9tOjlweDttYXJnaW46MjBweCAwIDMwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VlZX11bCxvbHtwYWRkaW5nOjA7bWFyZ2luOjAgMCAxMHB4IDI1cHh9dWwgdWwsdWwgb2wsb2wgb2wsb2wgdWx7bWFyZ2luLWJvdHRvbTowfWxpe2xpbmUtaGVpZ2h0OjIwcHh9dWwudW5zdHlsZWQsb2wudW5zdHlsZWR7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9dWwuaW5saW5lLG9sLmlubGluZXttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX11bC5pbmxpbmU+bGksb2wuaW5saW5lPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTtwYWRkaW5nLXJpZ2h0OjVweDtwYWRkaW5nLWxlZnQ6NXB4Oyp6b29tOjF9ZGx7bWFyZ2luLWJvdHRvbToyMHB4fWR0LGRke2xpbmUtaGVpZ2h0OjIwcHh9ZHR7Zm9udC13ZWlnaHQ6Ym9sZH1kZHttYXJnaW4tbGVmdDoxMHB4fS5kbC1ob3Jpem9udGFseyp6b29tOjF9LmRsLWhvcml6b250YWw6YmVmb3JlLC5kbC1ob3Jpem9udGFsOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5kbC1ob3Jpem9udGFsOmFmdGVye2NsZWFyOmJvdGh9LmRsLWhvcml6b250YWwgZHR7ZmxvYXQ6bGVmdDt3aWR0aDoyMDBweDtvdmVyZmxvdzpoaWRkZW47Y2xlYXI6bGVmdDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5kbC1ob3Jpem9udGFsIGRke21hcmdpbi1sZWZ0OjIyMHB4fWhye21hcmdpbjoyMHB4IDA7Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2VlZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmfWFiYnJbdGl0bGVdLGFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV17Y3Vyc29yOmhlbHA7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICM5OTl9YWJici5pbml0aWFsaXNte2ZvbnQtc2l6ZTo5MCU7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfWJsb2NrcXVvdGV7cGFkZGluZzowIDAgMCAxNXB4O21hcmdpbjowIDAgMjBweDtib3JkZXItbGVmdDo1cHggc29saWQgI2VlZX1ibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZToxNy41cHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjEuMjV9YmxvY2txdW90ZSBzbWFsbHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6Izk5OX1ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZXtjb250ZW50OidcMjAxNCBcMDBBMCd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0O3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkICNlZWU7Ym9yZGVyLWxlZnQ6MH1ibG9ja3F1b3RlLnB1bGwtcmlnaHQgcCxibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGx7dGV4dC1hbGlnbjpyaWdodH1ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YmVmb3Jle2NvbnRlbnQ6Jyd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVye2NvbnRlbnQ6J1wwMEEwIFwyMDE0J31xOmJlZm9yZSxxOmFmdGVyLGJsb2NrcXVvdGU6YmVmb3JlLGJsb2NrcXVvdGU6YWZ0ZXJ7Y29udGVudDoiIn1hZGRyZXNze2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9Y29kZSxwcmV7cGFkZGluZzowIDNweCAycHg7Zm9udC1mYW1pbHk6TW9uYWNvLE1lbmxvLENvbnNvbGFzLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMzMzM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fWNvZGV7cGFkZGluZzoycHggNHB4O2NvbG9yOiNkMTQ7d2hpdGUtc3BhY2U6bm93cmFwO2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmOTtib3JkZXI6MXB4IHNvbGlkICNlMWUxZTh9cHJle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo5LjVweDttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MjBweDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fXByZS5wcmV0dHlwcmludHttYXJnaW4tYm90dG9tOjIwcHh9cHJlIGNvZGV7cGFkZGluZzowO2NvbG9yOmluaGVyaXQ7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LnByZS1zY3JvbGxhYmxle21heC1oZWlnaHQ6MzQwcHg7b3ZlcmZsb3cteTpzY3JvbGx9Zm9ybXttYXJnaW46MCAwIDIwcHh9ZmllbGRzZXR7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowfWxlZ2VuZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZzowO21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtsaW5lLWhlaWdodDo0MHB4O2NvbG9yOiMzMzM7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX1sZWdlbmQgc21hbGx7Zm9udC1zaXplOjE1cHg7Y29sb3I6Izk5OX1sYWJlbCxpbnB1dCxidXR0b24sc2VsZWN0LHRleHRhcmVhe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4fWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn1sYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NXB4fXNlbGVjdCx0ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7cGFkZGluZzo0cHggNnB4O21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM1NTU7dmVydGljYWwtYWxpZ246bWlkZGxlOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHt3aWR0aDoyMDZweH10ZXh0YXJlYXtoZWlnaHQ6YXV0b310ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yczstbW96LXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzOy1vLXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzO3RyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzfXRleHRhcmVhOmZvY3VzLGlucHV0W3R5cGU9InRleHQiXTpmb2N1cyxpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGV0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRlIl06Zm9jdXMsaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cyxpbnB1dFt0eXBlPSJ0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0id2VlayJdOmZvY3VzLGlucHV0W3R5cGU9Im51bWJlciJdOmZvY3VzLGlucHV0W3R5cGU9ImVtYWlsIl06Zm9jdXMsaW5wdXRbdHlwZT0idXJsIl06Zm9jdXMsaW5wdXRbdHlwZT0ic2VhcmNoIl06Zm9jdXMsaW5wdXRbdHlwZT0idGVsIl06Zm9jdXMsaW5wdXRbdHlwZT0iY29sb3IiXTpmb2N1cywudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6cmdiYSg4MiwxNjgsMjM2LDAuOCk7b3V0bGluZTowO291dGxpbmU6dGhpbiBkb3R0ZWQgXDk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpfWlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXttYXJnaW46NHB4IDAgMDttYXJnaW4tdG9wOjFweCBcOTsqbWFyZ2luLXRvcDowO2xpbmUtaGVpZ2h0Om5vcm1hbH1pbnB1dFt0eXBlPSJmaWxlIl0saW5wdXRbdHlwZT0iaW1hZ2UiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXt3aWR0aDphdXRvfXNlbGVjdCxpbnB1dFt0eXBlPSJmaWxlIl17aGVpZ2h0OjMwcHg7Km1hcmdpbi10b3A6NHB4O2xpbmUtaGVpZ2h0OjMwcHh9c2VsZWN0e3dpZHRoOjIyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2N9c2VsZWN0W211bHRpcGxlXSxzZWxlY3Rbc2l6ZV17aGVpZ2h0OmF1dG99c2VsZWN0OmZvY3VzLGlucHV0W3R5cGU9ImZpbGUiXTpmb2N1cyxpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLGlucHV0W3R5cGU9ImNoZWNrYm94Il06Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9LnVuZWRpdGFibGUtaW5wdXQsLnVuZWRpdGFibGUtdGV4dGFyZWF7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZmNmY2ZjO2JvcmRlci1jb2xvcjojY2NjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KX0udW5lZGl0YWJsZS1pbnB1dHtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS51bmVkaXRhYmxlLXRleHRhcmVhe3dpZHRoOmF1dG87aGVpZ2h0OmF1dG99aW5wdXQ6LW1vei1wbGFjZWhvbGRlcix0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9aW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTk5fWlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnJhZGlvLC5jaGVja2JveHttaW4taGVpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9LnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6bGVmdDttYXJnaW4tbGVmdDotMjBweH0uY29udHJvbHM+LnJhZGlvOmZpcnN0LWNoaWxkLC5jb250cm9scz4uY2hlY2tib3g6Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6NXB4fS5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ucmFkaW8uaW5saW5lKy5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGluZSsuY2hlY2tib3guaW5saW5le21hcmdpbi1sZWZ0OjEwcHh9LmlucHV0LW1pbml7d2lkdGg6NjBweH0uaW5wdXQtc21hbGx7d2lkdGg6OTBweH0uaW5wdXQtbWVkaXVte3dpZHRoOjE1MHB4fS5pbnB1dC1sYXJnZXt3aWR0aDoyMTBweH0uaW5wdXQteGxhcmdle3dpZHRoOjI3MHB4fS5pbnB1dC14eGxhcmdle3dpZHRoOjUzMHB4fWlucHV0W2NsYXNzKj0ic3BhbiJdLHNlbGVjdFtjbGFzcyo9InNwYW4iXSx0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgc2VsZWN0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9LmlucHV0LWFwcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LXByZXBlbmQgW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LWFwcGVuZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTppbmxpbmUtYmxvY2t9aW5wdXQsdGV4dGFyZWEsLnVuZWRpdGFibGUtaW5wdXR7bWFyZ2luLWxlZnQ6MH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6MjBweH1pbnB1dC5zcGFuMTIsdGV4dGFyZWEuc3BhbjEyLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMnt3aWR0aDo5MjZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDo4NDZweH1pbnB1dC5zcGFuMTAsdGV4dGFyZWEuc3BhbjEwLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMHt3aWR0aDo3NjZweH1pbnB1dC5zcGFuOSx0ZXh0YXJlYS5zcGFuOSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOXt3aWR0aDo2ODZweH1pbnB1dC5zcGFuOCx0ZXh0YXJlYS5zcGFuOCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOHt3aWR0aDo2MDZweH1pbnB1dC5zcGFuNyx0ZXh0YXJlYS5zcGFuNywudW5lZGl0YWJsZS1pbnB1dC5zcGFuN3t3aWR0aDo1MjZweH1pbnB1dC5zcGFuNix0ZXh0YXJlYS5zcGFuNiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNnt3aWR0aDo0NDZweH1pbnB1dC5zcGFuNSx0ZXh0YXJlYS5zcGFuNSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNXt3aWR0aDozNjZweH1pbnB1dC5zcGFuNCx0ZXh0YXJlYS5zcGFuNCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNHt3aWR0aDoyODZweH1pbnB1dC5zcGFuMyx0ZXh0YXJlYS5zcGFuMywudW5lZGl0YWJsZS1pbnB1dC5zcGFuM3t3aWR0aDoyMDZweH1pbnB1dC5zcGFuMix0ZXh0YXJlYS5zcGFuMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMnt3aWR0aDoxMjZweH1pbnB1dC5zcGFuMSx0ZXh0YXJlYS5zcGFuMSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMXt3aWR0aDo0NnB4fS5jb250cm9scy1yb3d7Knpvb206MX0uY29udHJvbHMtcm93OmJlZm9yZSwuY29udHJvbHMtcm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250cm9scy1yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnR9LmNvbnRyb2xzLXJvdyAuY2hlY2tib3hbY2xhc3MqPSJzcGFuIl0sLmNvbnRyb2xzLXJvdyAucmFkaW9bY2xhc3MqPSJzcGFuIl17cGFkZGluZy10b3A6NXB4fWlucHV0W2Rpc2FibGVkXSxzZWxlY3RbZGlzYWJsZWRdLHRleHRhcmVhW2Rpc2FibGVkXSxpbnB1dFtyZWFkb25seV0sc2VsZWN0W3JlYWRvbmx5XSx0ZXh0YXJlYVtyZWFkb25seV17Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZX1pbnB1dFt0eXBlPSJyYWRpbyJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJyYWRpbyJdW3JlYWRvbmx5XSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWlubGluZXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLndhcm5pbmcgLnJhZGlvLC5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYXtib3JkZXItY29sb3I6I2MwOTg1Mzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojYTQ3ZTNjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2RiYzU5ZX0uY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2MwOTg1MztiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTM7Ym9yZGVyLWNvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtaW5saW5le2NvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLmVycm9yIC5yYWRpbywuY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Y29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiNiOTRhNDg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6Izk1M2IzOTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5MjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5Mjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTJ9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2I5NGE0ODtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtaW5saW5le2NvbG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2NvbG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2JvcmRlci1jb2xvcjojNDY4ODQ3Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzNTY2MzU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiYTdifS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojNDY4ODQ3O2JhY2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5pbmZvIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLmluZm8gLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1pbmxpbmV7Y29sb3I6IzNhODdhZH0uY29udHJvbC1ncm91cC5pbmZvIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5pbmZvIC5yYWRpbywuY29udHJvbC1ncm91cC5pbmZvIGlucHV0LC5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0LC5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWF7Y29sb3I6IzNhODdhZH0uY29udHJvbC1ncm91cC5pbmZvIGlucHV0LC5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0LC5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiMzYTg3YWQ7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6IzJkNjk4Nzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkMzstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkMztib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWI1ZDN9LmNvbnRyb2wtZ3JvdXAuaW5mbyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLmluZm8gLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojM2E4N2FkfWlucHV0OmZvY3VzOmludmFsaWQsdGV4dGFyZWE6Zm9jdXM6aW52YWxpZCxzZWxlY3Q6Zm9jdXM6aW52YWxpZHtjb2xvcjojYjk0YTQ4O2JvcmRlci1jb2xvcjojZWU1ZjVifWlucHV0OmZvY3VzOmludmFsaWQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXM6aW52YWxpZDpmb2N1cyxzZWxlY3Q6Zm9jdXM6aW52YWxpZDpmb2N1c3tib3JkZXItY29sb3I6I2U5MzIyZDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDZweCAjZjhiOWI3Oy1tb3otYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjc7Ym94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjd9LmZvcm0tYWN0aW9uc3twYWRkaW5nOjE5cHggMjBweCAyMHB4O21hcmdpbi10b3A6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7Knpvb206MX0uZm9ybS1hY3Rpb25zOmJlZm9yZSwuZm9ybS1hY3Rpb25zOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWFjdGlvbnM6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGVscC1ibG9jaywuaGVscC1pbmxpbmV7Y29sb3I6IzU5NTk1OX0uaGVscC1ibG9ja3tkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTBweH0uaGVscC1pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmctbGVmdDo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmlucHV0LWFwcGVuZCwuaW5wdXQtcHJlcGVuZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1wcmVwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kIHNlbGVjdCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0LC5pbnB1dC1hcHBlbmQgLmRyb3Bkb3duLW1lbnUsLmlucHV0LXByZXBlbmQgLmRyb3Bkb3duLW1lbnUsLmlucHV0LWFwcGVuZCAucG9wb3ZlciwuaW5wdXQtcHJlcGVuZCAucG9wb3Zlcntmb250LXNpemU6MTRweH0uaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1wcmVwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kIHNlbGVjdCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MDsqbWFyZ2luLWxlZnQ6MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1hcHBlbmQgaW5wdXQ6Zm9jdXMsLmlucHV0LXByZXBlbmQgaW5wdXQ6Zm9jdXMsLmlucHV0LWFwcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LXByZXBlbmQgc2VsZWN0OmZvY3VzLC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQ6Zm9jdXMsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXQ6Zm9jdXN7ei1pbmRleDoyfS5pbnB1dC1hcHBlbmQgLmFkZC1vbiwuaW5wdXQtcHJlcGVuZCAuYWRkLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG87aGVpZ2h0OjIwcHg7bWluLXdpZHRoOjE2cHg7cGFkZGluZzo0cHggNXB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS5pbnB1dC1hcHBlbmQgLmFkZC1vbiwuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5pbnB1dC1hcHBlbmQgLmJ0biwuaW5wdXQtcHJlcGVuZCAuYnRuLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xlLC5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXA+LmRyb3Bkb3duLXRvZ2dsZXt2ZXJ0aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5pbnB1dC1hcHBlbmQgLmFjdGl2ZSwuaW5wdXQtcHJlcGVuZCAuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2E5ZGJhOTtib3JkZXItY29sb3I6IzQ2YTU0Nn0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5idG57bWFyZ2luLXJpZ2h0Oi0xcHh9LmlucHV0LXByZXBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZCAuYnRuOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweH0uaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQrLmJ0bi1ncm91cCAuYnRuOmxhc3QtY2hpbGQsLmlucHV0LWFwcGVuZCBzZWxlY3QrLmJ0bi1ncm91cCAuYnRuOmxhc3QtY2hpbGQsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1hcHBlbmQgLmJ0biwuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXB7bWFyZ2luLWxlZnQ6LTFweH0uaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXA6bGFzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIHNlbGVjdCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG4sLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIHNlbGVjdCsuYnRuLWdyb3VwIC5idG4sLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5hZGQtb246Zmlyc3QtY2hpbGQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYWRkLW9uOmxhc3QtY2hpbGQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZHttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfWlucHV0LnNlYXJjaC1xdWVyeXtwYWRkaW5nLXJpZ2h0OjE0cHg7cGFkZGluZy1yaWdodDo0cHggXDk7cGFkZGluZy1sZWZ0OjE0cHg7cGFkZGluZy1sZWZ0OjRweCBcOTttYXJnaW4tYm90dG9tOjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5zZWFyY2gtcXVlcnksLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7LW1vei1ib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7Ym9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4fS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5idG57LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuc2VhcmNoLXF1ZXJ5ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwO2JvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMH0uZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIGlucHV0LC5mb3JtLWlubGluZSBpbnB1dCwuZm9ybS1ob3Jpem9udGFsIGlucHV0LC5mb3JtLXNlYXJjaCB0ZXh0YXJlYSwuZm9ybS1pbmxpbmUgdGV4dGFyZWEsLmZvcm0taG9yaXpvbnRhbCB0ZXh0YXJlYSwuZm9ybS1zZWFyY2ggc2VsZWN0LC5mb3JtLWlubGluZSBzZWxlY3QsLmZvcm0taG9yaXpvbnRhbCBzZWxlY3QsLmZvcm0tc2VhcmNoIC5oZWxwLWlubGluZSwuZm9ybS1pbmxpbmUgLmhlbHAtaW5saW5lLC5mb3JtLWhvcml6b250YWwgLmhlbHAtaW5saW5lLC5mb3JtLXNlYXJjaCAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1pbmxpbmUgLnVuZWRpdGFibGUtaW5wdXQsLmZvcm0taG9yaXpvbnRhbCAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWhvcml6b250YWwgLmlucHV0LXByZXBlbmQsLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtYXBwZW5ke2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmZvcm0tc2VhcmNoIC5oaWRlLC5mb3JtLWlubGluZSAuaGlkZSwuZm9ybS1ob3Jpem9udGFsIC5oaWRle2Rpc3BsYXk6bm9uZX0uZm9ybS1zZWFyY2ggbGFiZWwsLmZvcm0taW5saW5lIGxhYmVsLC5mb3JtLXNlYXJjaCAuYnRuLWdyb3VwLC5mb3JtLWlubGluZSAuYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtYXBwZW5kLC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmR7bWFyZ2luLWJvdHRvbTowfS5mb3JtLXNlYXJjaCAucmFkaW8sLmZvcm0tc2VhcmNoIC5jaGVja2JveCwuZm9ybS1pbmxpbmUgLnJhZGlvLC5mb3JtLWlubGluZSAuY2hlY2tib3h7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZm9ybS1zZWFyY2ggLnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmZvcm0tc2VhcmNoIC5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJdLC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6M3B4O21hcmdpbi1sZWZ0OjB9LmNvbnRyb2wtZ3JvdXB7bWFyZ2luLWJvdHRvbToxMHB4fWxlZ2VuZCsuY29udHJvbC1ncm91cHttYXJnaW4tdG9wOjIwcHg7LXdlYmtpdC1tYXJnaW4tdG9wLWNvbGxhcHNlOnNlcGFyYXRlfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXB7bWFyZ2luLWJvdHRvbToyMHB4Oyp6b29tOjF9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cDpiZWZvcmUsLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVye2NsZWFyOmJvdGh9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbHtmbG9hdDpsZWZ0O3dpZHRoOjE2MHB4O3BhZGRpbmctdG9wOjVweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xzeypkaXNwbGF5OmlubGluZS1ibG9jazsqcGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWxlZnQ6MTgwcHg7Km1hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHM6Zmlyc3QtY2hpbGR7KnBhZGRpbmctbGVmdDoxODBweH0uZm9ybS1ob3Jpem9udGFsIC5oZWxwLWJsb2Nre21hcmdpbi1ib3R0b206MH0uZm9ybS1ob3Jpem9udGFsIGlucHV0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgc2VsZWN0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgdGV4dGFyZWErLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAudW5lZGl0YWJsZS1pbnB1dCsuaGVscC1ibG9jaywuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1wcmVwZW5kKy5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgLmlucHV0LWFwcGVuZCsuaGVscC1ibG9ja3ttYXJnaW4tdG9wOjEwcHh9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctbGVmdDoxODBweH10YWJsZXttYXgtd2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfS50YWJsZXt3aWR0aDoxMDAlO21hcmdpbi1ib3R0b206MjBweH0udGFibGUgdGgsLnRhYmxlIHRke3BhZGRpbmc6OHB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfS50YWJsZSB0aHtmb250LXdlaWdodDpib2xkfS50YWJsZSB0aGVhZCB0aHt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZSBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUgdGJvZHkrdGJvZHl7Ym9yZGVyLXRvcDoycHggc29saWQgI2RkZH0udGFibGUgLnRhYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZn0udGFibGUtY29uZGVuc2VkIHRoLC50YWJsZS1jb25kZW5zZWQgdGR7cGFkZGluZzo0cHggNXB4fS50YWJsZS1ib3JkZXJlZHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOypib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLWxlZnQ6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoLC50YWJsZS1ib3JkZXJlZCB0ZHtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjB9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRoOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRmb290K3Rib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MH0udGFibGUtYm9yZGVyZWQgdGZvb3QrdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjB9LnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHh9LnRhYmxlLXN0cmlwZWQgdGJvZHk+dHI6bnRoLWNoaWxkKG9kZCk+dGQsLnRhYmxlLXN0cmlwZWQgdGJvZHk+dHI6bnRoLWNoaWxkKG9kZCk+dGh7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5fS50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3Zlcj50ZCwudGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXI+dGh7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fXRhYmxlIHRkW2NsYXNzKj0ic3BhbiJdLHRhYmxlIHRoW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGFibGUgdGRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0YWJsZSB0aFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OnRhYmxlLWNlbGw7ZmxvYXQ6bm9uZTttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMSwudGFibGUgdGguc3BhbjF7ZmxvYXQ6bm9uZTt3aWR0aDo0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4yLC50YWJsZSB0aC5zcGFuMntmbG9hdDpub25lO3dpZHRoOjEyNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4zLC50YWJsZSB0aC5zcGFuM3tmbG9hdDpub25lO3dpZHRoOjIwNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW40LC50YWJsZSB0aC5zcGFuNHtmbG9hdDpub25lO3dpZHRoOjI4NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW41LC50YWJsZSB0aC5zcGFuNXtmbG9hdDpub25lO3dpZHRoOjM2NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW42LC50YWJsZSB0aC5zcGFuNntmbG9hdDpub25lO3dpZHRoOjQ0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW43LC50YWJsZSB0aC5zcGFuN3tmbG9hdDpub25lO3dpZHRoOjUyNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW44LC50YWJsZSB0aC5zcGFuOHtmbG9hdDpub25lO3dpZHRoOjYwNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW45LC50YWJsZSB0aC5zcGFuOXtmbG9hdDpub25lO3dpZHRoOjY4NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xMCwudGFibGUgdGguc3BhbjEwe2Zsb2F0Om5vbmU7d2lkdGg6NzY0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjExLC50YWJsZSB0aC5zcGFuMTF7ZmxvYXQ6bm9uZTt3aWR0aDo4NDRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTIsLnRhYmxlIHRoLnNwYW4xMntmbG9hdDpub25lO3dpZHRoOjkyNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRib2R5IHRyLnN1Y2Nlc3M+dGR7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4fS50YWJsZSB0Ym9keSB0ci5lcnJvcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGV9LnRhYmxlIHRib2R5IHRyLndhcm5pbmc+dGR7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzfS50YWJsZSB0Ym9keSB0ci5pbmZvPnRke2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmN30udGFibGUtaG92ZXIgdGJvZHkgdHIuc3VjY2Vzczpob3Zlcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkMGU5YzZ9LnRhYmxlLWhvdmVyIHRib2R5IHRyLmVycm9yOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2ViY2NjY30udGFibGUtaG92ZXIgdGJvZHkgdHIud2FybmluZzpob3Zlcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWYyY2N9LnRhYmxlLWhvdmVyIHRib2R5IHRyLmluZm86aG92ZXI+dGR7YmFja2dyb3VuZC1jb2xvcjojYzRlM2YzfVtjbGFzc149Imljb24tIl0sW2NsYXNzKj0iIGljb24tIl17ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDttYXJnaW4tdG9wOjFweDsqbWFyZ2luLXJpZ2h0Oi4zZW07bGluZS1oZWlnaHQ6MTRweDt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLi4vaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZyIpO2JhY2tncm91bmQtcG9zaXRpb246MTRweCAxNHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0uaWNvbi13aGl0ZSwubmF2LXBpbGxzPi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2LWxpc3Q+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5uYXZiYXItaW52ZXJzZSAubmF2Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXZiYXItaW52ZXJzZSAubmF2Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cz5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cz5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmZvY3VzPmE+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmZvY3VzPmE+W2NsYXNzKj0iIGljb24tIl17YmFja2dyb3VuZC1pbWFnZTp1cmwoIi4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmciKX0uaWNvbi1nbGFzc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0uaWNvbi1tdXNpY3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IDB9Lmljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0uaWNvbi1lbnZlbG9wZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IDB9Lmljb24taGVhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAwfS5pY29uLXN0YXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggMH0uaWNvbi1zdGFyLWVtcHR5e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IDB9Lmljb24tdXNlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAwfS5pY29uLWZpbG17YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggMH0uaWNvbi10aC1sYXJnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAwfS5pY29uLXRoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IDB9Lmljb24tdGgtbGlzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAwfS5pY29uLW9re2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IDB9Lmljb24tcmVtb3Zle2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IDB9Lmljb24tem9vbS1pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAwfS5pY29uLXpvb20tb3V0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IDB9Lmljb24tb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IDB9Lmljb24tc2lnbmFse2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IDB9Lmljb24tY29ne2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IDB9Lmljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggMH0uaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMjRweH0uaWNvbi1maWxle2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTI0cHh9Lmljb24tdGltZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yNHB4fS5pY29uLXJvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtMjRweH0uaWNvbi1kb3dubG9hZC1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMjRweH0uaWNvbi1kb3dubG9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMjRweH0uaWNvbi11cGxvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTI0cHh9Lmljb24taW5ib3h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTI0cHh9Lmljb24tcGxheS1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTI0cHh9Lmljb24tcmVwZWF0e2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0yNHB4fS5pY29uLXJlZnJlc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTI0cHh9Lmljb24tbGlzdC1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTI0cHh9Lmljb24tbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODdweCAtMjRweH0uaWNvbi1mbGFne2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC0yNHB4fS5pY29uLWhlYWRwaG9uZXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTI0cHh9Lmljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtMjRweH0uaWNvbi12b2x1bWUtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtMjRweH0uaWNvbi12b2x1bWUtdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTI0cHh9Lmljb24tcXJjb2Rle2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC0yNHB4fS5pY29uLWJhcmNvZGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTI0cHh9Lmljb24tdGFne2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0uaWNvbi10YWdze2JhY2tncm91bmQtcG9zaXRpb246LTI1cHggLTQ4cHh9Lmljb24tYm9va3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS5pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTQ4cHh9Lmljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0uaWNvbi1jYW1lcmF7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTQ4cHh9Lmljb24tZm9udHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0uaWNvbi1ib2xke2JhY2tncm91bmQtcG9zaXRpb246LTE2N3B4IC00OHB4fS5pY29uLWl0YWxpY3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNDhweH0uaWNvbi10ZXh0LWhlaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtNDhweH0uaWNvbi10ZXh0LXdpZHRoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS5pY29uLWFsaWduLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTQ4cHh9Lmljb24tYWxpZ24tY2VudGVye2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC00OHB4fS5pY29uLWFsaWduLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC00OHB4fS5pY29uLWFsaWduLWp1c3RpZnl7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTQ4cHh9Lmljb24tbGlzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtNDhweH0uaWNvbi1pbmRlbnQtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtNDhweH0uaWNvbi1pbmRlbnQtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTQ4cHh9Lmljb24tZmFjZXRpbWUtdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTQ4cHh9Lmljb24tcGljdHVyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtNDhweH0uaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC03MnB4fS5pY29uLW1hcC1tYXJrZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtNzJweH0uaWNvbi1hZGp1c3R7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNzJweH0uaWNvbi10aW50e2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTcycHh9Lmljb24tZWRpdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC03MnB4fS5pY29uLXNoYXJle2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC03MnB4fS5pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC03MnB4fS5pY29uLW1vdmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTcycHh9Lmljb24tc3RlcC1iYWNrd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNzJweH0uaWNvbi1mYXN0LWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC03MnB4fS5pY29uLWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC03MnB4fS5pY29uLXBsYXl7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTcycHh9Lmljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTcycHh9Lmljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtNzJweH0uaWNvbi1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC03MnB4fS5pY29uLWZhc3QtZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtNzJweH0uaWNvbi1zdGVwLWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTcycHh9Lmljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTcycHh9Lmljb24tY2hldnJvbi1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC03MnB4fS5pY29uLWNoZXZyb24tcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTcycHh9Lmljb24tcGx1cy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0uaWNvbi1taW51cy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTk2cHh9Lmljb24tcmVtb3ZlLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtOTZweH0uaWNvbi1vay1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTk2cHh9Lmljb24tcXVlc3Rpb24tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS5pY29uLWluZm8tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtOTZweH0uaWNvbi1zY3JlZW5zaG90e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS5pY29uLXJlbW92ZS1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTk2cHh9Lmljb24tb2stY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS5pY29uLWJhbi1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTk2cHh9Lmljb24tYXJyb3ctbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0uaWNvbi1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtOTZweH0uaWNvbi1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODlweCAtOTZweH0uaWNvbi1hcnJvdy1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC05NnB4fS5pY29uLXNoYXJlLWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtOTZweH0uaWNvbi1yZXNpemUtZnVsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtOTZweH0uaWNvbi1yZXNpemUtc21hbGx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTk2cHh9Lmljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtOTZweH0uaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzNweCAtOTZweH0uaWNvbi1hc3Rlcmlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtOTZweH0uaWNvbi1leGNsYW1hdGlvbi1zaWdue2JhY2tncm91bmQtcG9zaXRpb246MCAtMTIwcHh9Lmljb24tZ2lmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xMjBweH0uaWNvbi1sZWFme2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTEyMHB4fS5pY29uLWZpcmV7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtMTIwcHh9Lmljb24tZXllLW9wZW57YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTIwcHh9Lmljb24tZXllLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0xMjBweH0uaWNvbi13YXJuaW5nLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTEyMHB4fS5pY29uLXBsYW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xMjBweH0uaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTIwcHh9Lmljb24tcmFuZG9te3dpZHRoOjE2cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTEyMHB4fS5pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTEyMHB4fS5pY29uLW1hZ25ldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMTIwcHh9Lmljb24tY2hldnJvbi11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTIwcHh9Lmljb24tY2hldnJvbi1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxM3B4IC0xMTlweH0uaWNvbi1yZXR3ZWV0e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0xMjBweH0uaWNvbi1zaG9wcGluZy1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0xMjBweH0uaWNvbi1mb2xkZXItY2xvc2V7d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtMTIwcHh9Lmljb24tZm9sZGVyLW9wZW57d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMTIwcHh9Lmljb24tcmVzaXplLXZlcnRpY2Fse2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC0xMTlweH0uaWNvbi1yZXNpemUtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTE4cHh9Lmljb24taGRke2JhY2tncm91bmQtcG9zaXRpb246MCAtMTQ0cHh9Lmljb24tYnVsbGhvcm57YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMTQ0cHh9Lmljb24tYmVsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNDRweH0uaWNvbi1jZXJ0aWZpY2F0ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0xNDRweH0uaWNvbi10aHVtYnMtdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTQ0cHh9Lmljb24tdGh1bWJzLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTE0NHB4fS5pY29uLWhhbmQtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE0NHB4fS5pY29uLWhhbmQtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMTQ0cHh9Lmljb24taGFuZC11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTQ0cHh9Lmljb24taGFuZC1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0xNDRweH0uaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0xNDRweH0uaWNvbi1jaXJjbGUtYXJyb3ctdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC0xNDRweH0uaWNvbi1nbG9iZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMTQ0cHh9Lmljb24td3JlbmNoe2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0xNDRweH0uaWNvbi10YXNrc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtMTQ0cHh9Lmljb24tZmlsdGVye2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0xNDRweH0uaWNvbi1icmllZmNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTE0NHB4fS5pY29uLWZ1bGxzY3JlZW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTE0NHB4fS5kcm9wdXAsLmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi10b2dnbGV7Km1hcmdpbi1ib3R0b206LTNweH0uZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSwub3BlbiAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uY2FyZXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLXRvcDo0cHggc29saWQgIzAwMDtib3JkZXItcmlnaHQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjRweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OiIifS5kcm9wZG93biAuY2FyZXR7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWxlZnQ6MnB4fS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDt6LWluZGV4OjEwMDA7ZGlzcGxheTpub25lO2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjE2MHB4O3BhZGRpbmc6NXB4IDA7bWFyZ2luOjJweCAwIDA7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7KmJvcmRlci1yaWdodC13aWR0aDoycHg7KmJvcmRlci1ib3R0b20td2lkdGg6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDstd2Via2l0LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LW1vei1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpO2JveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZztiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30uZHJvcGRvd24tbWVudSAuZGl2aWRlcnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46LTVweCAwIDVweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9LmRyb3Bkb3duLW1lbnU+bGk+YXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6M3B4IDIwcHg7Y2xlYXI6Ym90aDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO3doaXRlLXNwYWNlOm5vd3JhcH0uZHJvcGRvd24tbWVudT5saT5hOmhvdmVyLC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMsLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YSwuZHJvcGRvd24tc3VibWVudTpmb2N1cz5he2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDc3YjMnLEdyYWRpZW50VHlwZT0wKX0uZHJvcGRvd24tbWVudT4uYWN0aXZlPmEsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmhvdmVyLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzAwODFjMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwMDc3YjMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O291dGxpbmU6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsR3JhZGllbnRUeXBlPTApfS5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hLC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmhvdmVyLC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3Vze2NvbG9yOiM5OTl9LmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0ub3Blbnsqei1pbmRleDoxMDAwfS5vcGVuPi5kcm9wZG93bi1tZW51e2Rpc3BsYXk6YmxvY2t9LnB1bGwtcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmRyb3B1cCAuY2FyZXQsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldHtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwMDtjb250ZW50OiIifS5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e3RvcDphdXRvO2JvdHRvbToxMDAlO21hcmdpbi1ib3R0b206MXB4fS5kcm9wZG93bi1zdWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi1zdWJtZW51Pi5kcm9wZG93bi1tZW51e3RvcDowO2xlZnQ6MTAwJTttYXJnaW4tdG9wOi02cHg7bWFyZ2luLWxlZnQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweDtib3JkZXItcmFkaXVzOjAgNnB4IDZweCA2cHh9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30uZHJvcHVwIC5kcm9wZG93bi1zdWJtZW51Pi5kcm9wZG93bi1tZW51e3RvcDphdXRvO2JvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOi0ycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDA7Ym9yZGVyLXJhZGl1czo1cHggNXB4IDVweCAwfS5kcm9wZG93bi1zdWJtZW51PmE6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpyaWdodDt3aWR0aDowO2hlaWdodDowO21hcmdpbi10b3A6NXB4O21hcmdpbi1yaWdodDotMTBweDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQtY29sb3I6I2NjYztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHg7Y29udGVudDoiICJ9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YTphZnRlcntib3JkZXItbGVmdC1jb2xvcjojZmZmfS5kcm9wZG93bi1zdWJtZW51LnB1bGwtbGVmdHtmbG9hdDpub25lfS5kcm9wZG93bi1zdWJtZW51LnB1bGwtbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0Oi0xMDAlO21hcmdpbi1sZWZ0OjEwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4fS5kcm9wZG93biAuZHJvcGRvd24tbWVudSAubmF2LWhlYWRlcntwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9LnR5cGVhaGVhZHt6LWluZGV4OjEwNTE7bWFyZ2luLXRvcDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS53ZWxse21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nOjE5cHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNlM2UzZTM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KX0ud2VsbCBibG9ja3F1b3Rle2JvcmRlci1jb2xvcjojZGRkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMTUpfS53ZWxsLWxhcmdle3BhZGRpbmc6MjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LndlbGwtc21hbGx7cGFkZGluZzo5cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5mYWRle29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstby10cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfS5mYWRlLmlue29wYWNpdHk6MX0uY29sbGFwc2V7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlOy1tb3otdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlOy1vLXRyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZTt0cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2V9LmNvbGxhcHNlLmlue2hlaWdodDphdXRvfS5jbG9zZXtmbG9hdDpyaWdodDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzAwMDt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7b3BhY2l0eTouMjtmaWx0ZXI6YWxwaGEob3BhY2l0eT0yMCl9LmNsb3NlOmhvdmVyLC5jbG9zZTpmb2N1c3tjb2xvcjojMDAwO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6LjQ7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NDApfWJ1dHRvbi5jbG9zZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTtwYWRkaW5nOjRweCAxMnB4O21hcmdpbi1ib3R0b206MDsqbWFyZ2luLWxlZnQ6LjNlbTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTsqYmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZmZiksdG8oI2U2ZTZlNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjOypib3JkZXI6MDtib3JkZXItY29sb3I6I2U2ZTZlNiAjZTZlNmU2ICNiZmJmYmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtib3JkZXItYm90dG9tLWNvbG9yOiNiM2IzYjM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmZmZmZmJyxlbmRDb2xvcnN0cj0nI2ZmZTZlNmU2JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuOmhvdmVyLC5idG46Zm9jdXMsLmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmUsLmJ0bi5kaXNhYmxlZCwuYnRuW2Rpc2FibGVkXXtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5idG46YWN0aXZlLC5idG4uYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0uYnRuOmZpcnN0LWNoaWxkeyptYXJnaW4tbGVmdDowfS5idG46aG92ZXIsLmJ0bjpmb2N1c3tjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtcG9zaXRpb246MCAtMTVweDstd2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1wb3NpdGlvbiAuMXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXJ9LmJ0bjpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0uYnRuLmFjdGl2ZSwuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvcGFjaXR5Oi42NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT02NSk7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5idG4tbGFyZ2V7cGFkZGluZzoxMXB4IDE5cHg7Zm9udC1zaXplOjE3LjVweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLC5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDo0cHh9LmJ0bi1zbWFsbHtwYWRkaW5nOjJweCAxMHB4O2ZvbnQtc2l6ZToxMS45cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLXNtYWxsIFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10b3A6MH0uYnRuLW1pbmkgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLW1pbmkgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDotMXB4fS5idG4tbWluaXtwYWRkaW5nOjAgNnB4O2ZvbnQtc2l6ZToxMC41cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tYmxvY2t7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJ0bi1ibG9jaysuYnRuLWJsb2Nre21hcmdpbi10b3A6NXB4fWlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi1ibG9jayxpbnB1dFt0eXBlPSJyZXNldCJdLmJ0bi1ibG9jayxpbnB1dFt0eXBlPSJidXR0b24iXS5idG4tYmxvY2t7d2lkdGg6MTAwJX0uYnRuLXByaW1hcnkuYWN0aXZlLC5idG4td2FybmluZy5hY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZlLC5idG4tc3VjY2Vzcy5hY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC43NSl9LmJ0bi1wcmltYXJ5e2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDZkY2M7KmJhY2tncm91bmQtY29sb3I6IzA0YztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwNGMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMwNGMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMDRjICMwNGMgIzAwMmE4MDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA0NGNjJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXByaW1hcnk6aG92ZXIsLmJ0bi1wcmltYXJ5OmZvY3VzLC5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0YzsqYmFja2dyb3VuZC1jb2xvcjojMDAzYmIzfS5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMzkgXDl9LmJ0bi13YXJuaW5ne2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzI7KmJhY2tncm91bmQtY29sb3I6I2Y4OTQwNjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmYmI0NTApLHRvKCNmODk0MDYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojZjg5NDA2ICNmODk0MDYgI2FkNjcwNDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXdhcm5pbmc6aG92ZXIsLmJ0bi13YXJuaW5nOmZvY3VzLC5idG4td2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi13YXJuaW5nW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNjsqYmFja2dyb3VuZC1jb2xvcjojZGY4NTA1fS5idG4td2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjNjc2MDUgXDl9LmJ0bi1kYW5nZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2RhNGY0OTsqYmFja2dyb3VuZC1jb2xvcjojYmQzNjJmO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2VlNWY1YiksdG8oI2JkMzYyZikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNiZDM2MmYgI2JkMzYyZiAjODAyNDIwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlZTVmNWInLGVuZENvbG9yc3RyPScjZmZiZDM2MmYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyOmZvY3VzLC5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1kYW5nZXIuZGlzYWJsZWQsLmJ0bi1kYW5nZXJbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojYmQzNjJmOypiYWNrZ3JvdW5kLWNvbG9yOiNhOTMwMmF9LmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiM5NDJhMjUgXDl9LmJ0bi1zdWNjZXNze2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiM1YmI3NWI7KmJhY2tncm91bmQtY29sb3I6IzUxYTM1MTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM2MmM0NjIpLHRvKCM1MWEzNTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojNTFhMzUxICM1MWEzNTEgIzM4NzAzODtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJyxlbmRDb2xvcnN0cj0nI2ZmNTFhMzUxJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1zdWNjZXNzOmZvY3VzLC5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzUxYTM1MTsqYmFja2dyb3VuZC1jb2xvcjojNDk5MjQ5fS5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiM0MDgxNDAgXDl9LmJ0bi1pbmZve2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiM0OWFmY2Q7KmJhY2tncm91bmQtY29sb3I6IzJmOTZiNDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUpLHRvKCMyZjk2YjQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMmY5NmI0ICMyZjk2YjQgIzFmNjM3Nztib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJyxlbmRDb2xvcnN0cj0nI2ZmMmY5NmI0JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvOmZvY3VzLC5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWluZm8uZGlzYWJsZWQsLmJ0bi1pbmZvW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzJmOTZiNDsqYmFja2dyb3VuZC1jb2xvcjojMmE4NWEwfS5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyNDc0OGMgXDl9LmJ0bi1pbnZlcnNle2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMzNjM2MzY7KmJhY2tncm91bmQtY29sb3I6IzIyMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM0NDQpLHRvKCMyMjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNDQ0LCMyMjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjIyICMyMjIgIzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNDQ0NDQ0JyxlbmRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlOmZvY3VzLC5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlLmFjdGl2ZSwuYnRuLWludmVyc2UuZGlzYWJsZWQsLmJ0bi1pbnZlcnNlW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsqYmFja2dyb3VuZC1jb2xvcjojMTUxNTE1fS5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwODA4MDggXDl9YnV0dG9uLmJ0bixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG57KnBhZGRpbmctdG9wOjNweDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG46Oi1tb3otZm9jdXMtaW5uZXIsaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1idXR0b24uYnRuLmJ0bi1sYXJnZSxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLWxhcmdleypwYWRkaW5nLXRvcDo3cHg7KnBhZGRpbmctYm90dG9tOjdweH1idXR0b24uYnRuLmJ0bi1zbWFsbCxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLXNtYWxseypwYWRkaW5nLXRvcDozcHg7KnBhZGRpbmctYm90dG9tOjNweH1idXR0b24uYnRuLmJ0bi1taW5pLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbWluaXsqcGFkZGluZy10b3A6MXB4OypwYWRkaW5nLWJvdHRvbToxcHh9LmJ0bi1saW5rLC5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rW2Rpc2FibGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1saW5re2NvbG9yOiMwOGM7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rOmZvY3Vze2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1c3tjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4tZ3JvdXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyptYXJnaW4tbGVmdDouM2VtO2ZvbnQtc2l6ZTowO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uYnRuLWdyb3VwOmZpcnN0LWNoaWxkeyptYXJnaW4tbGVmdDowfS5idG4tZ3JvdXArLmJ0bi1ncm91cHttYXJnaW4tbGVmdDo1cHh9LmJ0bi10b29sYmFye21hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjB9LmJ0bi10b29sYmFyPi5idG4rLmJ0biwuYnRuLXRvb2xiYXI+LmJ0bi1ncm91cCsuYnRuLC5idG4tdG9vbGJhcj4uYnRuKy5idG4tZ3JvdXB7bWFyZ2luLWxlZnQ6NXB4fS5idG4tZ3JvdXA+LmJ0bntwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cD4uYnRuKy5idG57bWFyZ2luLWxlZnQ6LTFweH0uYnRuLWdyb3VwPi5idG4sLmJ0bi1ncm91cD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwPi5wb3BvdmVye2ZvbnQtc2l6ZToxNHB4fS5idG4tZ3JvdXA+LmJ0bi1taW5pe2ZvbnQtc2l6ZToxMC41cHh9LmJ0bi1ncm91cD4uYnRuLXNtYWxse2ZvbnQtc2l6ZToxMS45cHh9LmJ0bi1ncm91cD4uYnRuLWxhcmdle2ZvbnQtc2l6ZToxNy41cHh9LmJ0bi1ncm91cD4uYnRuOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LmJ0bi1ncm91cD4uYnRuOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS5idG4tZ3JvdXA+LmJ0bi5sYXJnZTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NnB4fS5idG4tZ3JvdXA+LmJ0bi5sYXJnZTpsYXN0LWNoaWxkLC5idG4tZ3JvdXA+LmxhcmdlLmRyb3Bkb3duLXRvZ2dsZXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjZweH0uYnRuLWdyb3VwPi5idG46aG92ZXIsLmJ0bi1ncm91cD4uYnRuOmZvY3VzLC5idG4tZ3JvdXA+LmJ0bjphY3RpdmUsLmJ0bi1ncm91cD4uYnRuLmFjdGl2ZXt6LWluZGV4OjJ9LmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSwuYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtvdXRsaW5lOjB9LmJ0bi1ncm91cD4uYnRuKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjVweDtwYWRkaW5nLXJpZ2h0OjhweDsqcGFkZGluZy1ib3R0b206NXB4O3BhZGRpbmctbGVmdDo4cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMjUpLGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXA+LmJ0bi1taW5pKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjJweDtwYWRkaW5nLXJpZ2h0OjVweDsqcGFkZGluZy1ib3R0b206MnB4O3BhZGRpbmctbGVmdDo1cHh9LmJ0bi1ncm91cD4uYnRuLXNtYWxsKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjVweDsqcGFkZGluZy1ib3R0b206NHB4fS5idG4tZ3JvdXA+LmJ0bi1sYXJnZSsuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDo3cHg7cGFkZGluZy1yaWdodDoxMnB4OypwYWRkaW5nLWJvdHRvbTo3cHg7cGFkZGluZy1sZWZ0OjEycHh9LmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1pbWFnZTpub25lOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuLWdyb3VwLm9wZW4gLmJ0bi5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5idG4tZ3JvdXAub3BlbiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzA0Y30uYnRuLWdyb3VwLm9wZW4gLmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojNTFhMzUxfS5idG4tZ3JvdXAub3BlbiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzJmOTZiNH0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1pbnZlcnNlLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJ0biAuY2FyZXR7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWxlZnQ6MH0uYnRuLWxhcmdlIC5jYXJldHttYXJnaW4tdG9wOjZweH0uYnRuLWxhcmdlIC5jYXJldHtib3JkZXItdG9wLXdpZHRoOjVweDtib3JkZXItcmlnaHQtd2lkdGg6NXB4O2JvcmRlci1sZWZ0LXdpZHRoOjVweH0uYnRuLW1pbmkgLmNhcmV0LC5idG4tc21hbGwgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5kcm9wdXAgLmJ0bi1sYXJnZSAuY2FyZXR7Ym9yZGVyLWJvdHRvbS13aWR0aDo1cHh9LmJ0bi1wcmltYXJ5IC5jYXJldCwuYnRuLXdhcm5pbmcgLmNhcmV0LC5idG4tZGFuZ2VyIC5jYXJldCwuYnRuLWluZm8gLmNhcmV0LC5idG4tc3VjY2VzcyAuY2FyZXQsLmJ0bi1pbnZlcnNlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5idG4tZ3JvdXAtdmVydGljYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRue2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTttYXgtd2lkdGg6MTAwJTstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuKy5idG57bWFyZ2luLXRvcDotMXB4O21hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4O2JvcmRlci1yYWRpdXM6MCAwIDRweCA0cHh9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWxhcmdlOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDZweCAwIDA7Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tbGFyZ2U6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHh9LmFsZXJ0e3BhZGRpbmc6OHB4IDM1cHggOHB4IDE0cHg7bWFyZ2luLWJvdHRvbToyMHB4O3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXI6MXB4IHNvbGlkICNmYmVlZDU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5hbGVydCwuYWxlcnQgaDR7Y29sb3I6I2MwOTg1M30uYWxlcnQgaDR7bWFyZ2luOjB9LmFsZXJ0IC5jbG9zZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTJweDtyaWdodDotMjFweDtsaW5lLWhlaWdodDoyMHB4fS5hbGVydC1zdWNjZXNze2NvbG9yOiM0Njg4NDc7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojZDZlOWM2fS5hbGVydC1zdWNjZXNzIGg0e2NvbG9yOiM0Njg4NDd9LmFsZXJ0LWRhbmdlciwuYWxlcnQtZXJyb3J7Y29sb3I6I2I5NGE0ODtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNlZWQzZDd9LmFsZXJ0LWRhbmdlciBoNCwuYWxlcnQtZXJyb3IgaDR7Y29sb3I6I2I5NGE0OH0uYWxlcnQtaW5mb3tjb2xvcjojM2E4N2FkO2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmNztib3JkZXItY29sb3I6I2JjZThmMX0uYWxlcnQtaW5mbyBoNHtjb2xvcjojM2E4N2FkfS5hbGVydC1ibG9ja3twYWRkaW5nLXRvcDoxNHB4O3BhZGRpbmctYm90dG9tOjE0cHh9LmFsZXJ0LWJsb2NrPnAsLmFsZXJ0LWJsb2NrPnVse21hcmdpbi1ib3R0b206MH0uYWxlcnQtYmxvY2sgcCtwe21hcmdpbi10b3A6NXB4fS5uYXZ7bWFyZ2luLWJvdHRvbToyMHB4O21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5uYXY+bGk+YXtkaXNwbGF5OmJsb2NrfS5uYXY+bGk+YTpob3ZlciwubmF2PmxpPmE6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5uYXY+bGk+YT5pbWd7bWF4LXdpZHRoOm5vbmV9Lm5hdj4ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ubmF2LWhlYWRlcntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6M3B4IDE1cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5uYXYgbGkrLm5hdi1oZWFkZXJ7bWFyZ2luLXRvcDo5cHh9Lm5hdi1saXN0e3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjB9Lm5hdi1saXN0PmxpPmEsLm5hdi1saXN0IC5uYXYtaGVhZGVye21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweDt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KX0ubmF2LWxpc3Q+bGk+YXtwYWRkaW5nOjNweCAxNXB4fS5uYXYtbGlzdD4uYWN0aXZlPmEsLm5hdi1saXN0Pi5hY3RpdmU+YTpob3ZlciwubmF2LWxpc3Q+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjIpO2JhY2tncm91bmQtY29sb3I6IzA4Y30ubmF2LWxpc3QgW2NsYXNzXj0iaWNvbi0iXSwubmF2LWxpc3QgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXJpZ2h0OjJweH0ubmF2LWxpc3QgLmRpdmlkZXJ7KndpZHRoOjEwMCU7aGVpZ2h0OjFweDttYXJnaW46OXB4IDFweDsqbWFyZ2luOi01cHggMCA1cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmfS5uYXYtdGFicywubmF2LXBpbGxzeyp6b29tOjF9Lm5hdi10YWJzOmJlZm9yZSwubmF2LXBpbGxzOmJlZm9yZSwubmF2LXRhYnM6YWZ0ZXIsLm5hdi1waWxsczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2LXRhYnM6YWZ0ZXIsLm5hdi1waWxsczphZnRlcntjbGVhcjpib3RofS5uYXYtdGFicz5saSwubmF2LXBpbGxzPmxpe2Zsb2F0OmxlZnR9Lm5hdi10YWJzPmxpPmEsLm5hdi1waWxscz5saT5he3BhZGRpbmctcmlnaHQ6MTJweDtwYWRkaW5nLWxlZnQ6MTJweDttYXJnaW4tcmlnaHQ6MnB4O2xpbmUtaGVpZ2h0OjE0cHh9Lm5hdi10YWJze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGR9Lm5hdi10YWJzPmxpe21hcmdpbi1ib3R0b206LTFweH0ubmF2LXRhYnM+bGk+YXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O2xpbmUtaGVpZ2h0OjIwcHg7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDB9Lm5hdi10YWJzPmxpPmE6aG92ZXIsLm5hdi10YWJzPmxpPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlZWUgI2VlZSAjZGRkfS5uYXYtdGFicz4uYWN0aXZlPmEsLm5hdi10YWJzPi5hY3RpdmU+YTpob3ZlciwubmF2LXRhYnM+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiM1NTU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS5uYXYtcGlsbHM+bGk+YXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O21hcmdpbi10b3A6MnB4O21hcmdpbi1ib3R0b206MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHg7LW1vei1ib3JkZXItcmFkaXVzOjVweDtib3JkZXItcmFkaXVzOjVweH0ubmF2LXBpbGxzPi5hY3RpdmU+YSwubmF2LXBpbGxzPi5hY3RpdmU+YTpob3ZlciwubmF2LXBpbGxzPi5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA4Y30ubmF2LXN0YWNrZWQ+bGl7ZmxvYXQ6bm9uZX0ubmF2LXN0YWNrZWQ+bGk+YXttYXJnaW4tcmlnaHQ6MH0ubmF2LXRhYnMubmF2LXN0YWNrZWR7Ym9yZGVyLWJvdHRvbTowfS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5he2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpOmZpcnN0LWNoaWxkPmF7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpOmxhc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk+YTpob3ZlciwubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk+YTpmb2N1c3t6LWluZGV4OjI7Ym9yZGVyLWNvbG9yOiNkZGR9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1ib3R0b206M3B4fS5uYXYtcGlsbHMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5he21hcmdpbi1ib3R0b206MXB4fS5uYXYtdGFicyAuZHJvcGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHh9Lm5hdi1waWxscyAuZHJvcGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjZweDtib3JkZXItdG9wLWNvbG9yOiMwOGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDhjfS5uYXYgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciAuY2FyZXQsLm5hdiAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiMwMDU1ODA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA1NTgwfS5uYXYtdGFicyAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhweH0ubmF2IC5hY3RpdmUgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2LXRhYnMgLmFjdGl2ZSAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTU1fS5uYXY+LmRyb3Bkb3duLmFjdGl2ZT5hOmhvdmVyLC5uYXY+LmRyb3Bkb3duLmFjdGl2ZT5hOmZvY3Vze2N1cnNvcjpwb2ludGVyfS5uYXYtdGFicyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLC5uYXYtcGlsbHMgLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSwubmF2PmxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPmE6aG92ZXIsLm5hdj5saS5kcm9wZG93bi5vcGVuLmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojOTk5O2JvcmRlci1jb2xvcjojOTk5fS5uYXYgbGkuZHJvcGRvd24ub3BlbiAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6aG92ZXIgLmNhcmV0LC5uYXYgbGkuZHJvcGRvd24ub3BlbiBhOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmO29wYWNpdHk6MTtmaWx0ZXI6YWxwaGEob3BhY2l0eT0xMDApfS50YWJzLXN0YWNrZWQgLm9wZW4+YTpob3ZlciwudGFicy1zdGFja2VkIC5vcGVuPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5OTl9LnRhYmJhYmxleyp6b29tOjF9LnRhYmJhYmxlOmJlZm9yZSwudGFiYmFibGU6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnRhYmJhYmxlOmFmdGVye2NsZWFyOmJvdGh9LnRhYi1jb250ZW50e292ZXJmbG93OmF1dG99LnRhYnMtYmVsb3c+Lm5hdi10YWJzLC50YWJzLXJpZ2h0Pi5uYXYtdGFicywudGFicy1sZWZ0Pi5uYXYtdGFic3tib3JkZXItYm90dG9tOjB9LnRhYi1jb250ZW50Pi50YWItcGFuZSwucGlsbC1jb250ZW50Pi5waWxsLXBhbmV7ZGlzcGxheTpub25lfS50YWItY29udGVudD4uYWN0aXZlLC5waWxsLWNvbnRlbnQ+LmFjdGl2ZXtkaXNwbGF5OmJsb2NrfS50YWJzLWJlbG93Pi5uYXYtdGFic3tib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saXttYXJnaW4tdG9wOi0xcHg7bWFyZ2luLWJvdHRvbTowfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0udGFicy1iZWxvdz4ubmF2LXRhYnM+bGk+YTpob3ZlciwudGFicy1iZWxvdz4ubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItdG9wLWNvbG9yOiNkZGQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0udGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hLC50YWJzLWJlbG93Pi5uYXYtdGFicz4uYWN0aXZlPmE6aG92ZXIsLnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+YTpmb2N1c3tib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgI2RkZCAjZGRkICNkZGR9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGksLnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxpe2Zsb2F0Om5vbmV9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YSwudGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YXttaW4td2lkdGg6NzRweDttYXJnaW4tcmlnaHQ6MDttYXJnaW4tYm90dG9tOjNweH0udGFicy1sZWZ0Pi5uYXYtdGFic3tmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5he21hcmdpbi1yaWdodDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlZWUgI2RkZCAjZWVlICNlZWV9LnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hLC50YWJzLWxlZnQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3ZlciwudGFicy1sZWZ0Pi5uYXYtdGFicyAuYWN0aXZlPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNkZGQgdHJhbnNwYXJlbnQgI2RkZCAjZGRkOypib3JkZXItcmlnaHQtY29sb3I6I2ZmZn0udGFicy1yaWdodD4ubmF2LXRhYnN7ZmxvYXQ6cmlnaHQ7bWFyZ2luLWxlZnQ6MTlweDtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH0udGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YXttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0udGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YTpob3ZlciwudGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZWVlICNlZWUgI2RkZH0udGFicy1yaWdodD4ubmF2LXRhYnMgLmFjdGl2ZT5hLC50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmE6aG92ZXIsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpmb2N1c3tib3JkZXItY29sb3I6I2RkZCAjZGRkICNkZGQgdHJhbnNwYXJlbnQ7KmJvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9Lm5hdj4uZGlzYWJsZWQ+YXtjb2xvcjojOTk5fS5uYXY+LmRpc2FibGVkPmE6aG92ZXIsLm5hdj4uZGlzYWJsZWQ+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXJ7KnBvc2l0aW9uOnJlbGF0aXZlOyp6LWluZGV4OjI7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93OnZpc2libGV9Lm5hdmJhci1pbm5lcnttaW4taGVpZ2h0OjQwcHg7cGFkZGluZy1yaWdodDoyMHB4O3BhZGRpbmctbGVmdDoyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmZmYpLHRvKCNmMmYyZjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlcjoxcHggc29saWQgI2Q0ZDRkNDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZmMmYyZjInLEdyYWRpZW50VHlwZT0wKTsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwwLjA2NSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KTtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KX0ubmF2YmFyLWlubmVyOmJlZm9yZSwubmF2YmFyLWlubmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXZiYXItaW5uZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2YmFyIC5jb250YWluZXJ7d2lkdGg6YXV0b30ubmF2LWNvbGxhcHNlLmNvbGxhcHNle2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGV9Lm5hdmJhciAuYnJhbmR7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3BhZGRpbmc6MTBweCAyMHB4IDEwcHg7bWFyZ2luLWxlZnQ6LTIwcHg7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOiM3Nzc7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLmJyYW5kOmhvdmVyLC5uYXZiYXIgLmJyYW5kOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXZiYXItdGV4dHttYXJnaW4tYm90dG9tOjA7bGluZS1oZWlnaHQ6NDBweDtjb2xvcjojNzc3fS5uYXZiYXItbGlua3tjb2xvcjojNzc3fS5uYXZiYXItbGluazpob3ZlciwubmF2YmFyLWxpbms6Zm9jdXN7Y29sb3I6IzMzM30ubmF2YmFyIC5kaXZpZGVyLXZlcnRpY2Fse2hlaWdodDo0MHB4O21hcmdpbjowIDlweDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNmMmYyZjJ9Lm5hdmJhciAuYnRuLC5uYXZiYXIgLmJ0bi1ncm91cHttYXJnaW4tdG9wOjVweH0ubmF2YmFyIC5idG4tZ3JvdXAgLmJ0biwubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4sLm5hdmJhciAuaW5wdXQtYXBwZW5kIC5idG4sLm5hdmJhciAuaW5wdXQtcHJlcGVuZCAuYnRuLWdyb3VwLC5uYXZiYXIgLmlucHV0LWFwcGVuZCAuYnRuLWdyb3Vwe21hcmdpbi10b3A6MH0ubmF2YmFyLWZvcm17bWFyZ2luLWJvdHRvbTowOyp6b29tOjF9Lm5hdmJhci1mb3JtOmJlZm9yZSwubmF2YmFyLWZvcm06YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm5hdmJhci1mb3JtOmFmdGVye2NsZWFyOmJvdGh9Lm5hdmJhci1mb3JtIGlucHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5yYWRpbywubmF2YmFyLWZvcm0gLmNoZWNrYm94e21hcmdpbi10b3A6NXB4fS5uYXZiYXItZm9ybSBpbnB1dCwubmF2YmFyLWZvcm0gc2VsZWN0LC5uYXZiYXItZm9ybSAuYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MH0ubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0iaW1hZ2UiXSwubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0icmFkaW8iXXttYXJnaW4tdG9wOjNweH0ubmF2YmFyLWZvcm0gLmlucHV0LWFwcGVuZCwubmF2YmFyLWZvcm0gLmlucHV0LXByZXBlbmR7bWFyZ2luLXRvcDo1cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kIGlucHV0LC5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZCBpbnB1dHttYXJnaW4tdG9wOjB9Lm5hdmJhci1zZWFyY2h7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeXtwYWRkaW5nOjRweCAxNHB4O21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOy13ZWJraXQtYm9yZGVyLXJhZGl1czoxNXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNXB4O2JvcmRlci1yYWRpdXM6MTVweH0ubmF2YmFyLXN0YXRpYy10b3B7cG9zaXRpb246c3RhdGljO21hcmdpbi1ib3R0b206MH0ubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcnstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtsZWZ0OjA7ei1pbmRleDoxMDMwO21hcmdpbi1ib3R0b206MH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVye2JvcmRlci13aWR0aDowIDAgMXB4fS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7Ym9yZGVyLXdpZHRoOjFweCAwIDB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjk0MHB4fS5uYXZiYXItZml4ZWQtdG9we3RvcDowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzowIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93OjAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpfS5uYXZiYXItZml4ZWQtYm90dG9te2JvdHRvbTowfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7LXdlYmtpdC1ib3gtc2hhZG93OjAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpfS5uYXZiYXIgLm5hdntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjA7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O21hcmdpbjowIDEwcHggMCAwfS5uYXZiYXIgLm5hdi5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0O21hcmdpbi1yaWdodDowfS5uYXZiYXIgLm5hdj5saXtmbG9hdDpsZWZ0fS5uYXZiYXIgLm5hdj5saT5he2Zsb2F0Om5vbmU7cGFkZGluZzoxMHB4IDE1cHggMTBweDtjb2xvcjojNzc3O3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZn0ubmF2YmFyIC5uYXYgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7bWFyZ2luLXRvcDo4cHh9Lm5hdmJhciAubmF2PmxpPmE6Zm9jdXMsLm5hdmJhciAubmF2PmxpPmE6aG92ZXJ7Y29sb3I6IzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXIgLm5hdj4uYWN0aXZlPmEsLm5hdmJhciAubmF2Pi5hY3RpdmU+YTpob3ZlciwubmF2YmFyIC5uYXY+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiM1NTU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDNweCA4cHggcmdiYSgwLDAsMCwwLjEyNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KTtib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KX0ubmF2YmFyIC5idG4tbmF2YmFye2Rpc3BsYXk6bm9uZTtmbG9hdDpyaWdodDtwYWRkaW5nOjdweCAxMHB4O21hcmdpbi1yaWdodDo1cHg7bWFyZ2luLWxlZnQ6NXB4O2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZGVkZWQ7KmJhY2tncm91bmQtY29sb3I6I2U1ZTVlNTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmMmYyZjIpLHRvKCNlNWU1ZTUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojZTVlNWU1ICNlNWU1ZTUgI2JmYmZiZjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjJmMmYyJyxlbmRDb2xvcnN0cj0nI2ZmZTVlNWU1JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3NSl9Lm5hdmJhciAuYnRuLW5hdmJhcjpob3ZlciwubmF2YmFyIC5idG4tbmF2YmFyOmZvY3VzLC5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhciAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7KmJhY2tncm91bmQtY29sb3I6I2Q5ZDlkOX0ubmF2YmFyIC5idG4tbmF2YmFyOmFjdGl2ZSwubmF2YmFyIC5idG4tbmF2YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjY2MgXDl9Lm5hdmJhciAuYnRuLW5hdmJhciAuaWNvbi1iYXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O2hlaWdodDoycHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoxcHg7LW1vei1ib3JkZXItcmFkaXVzOjFweDtib3JkZXItcmFkaXVzOjFweDstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMCByZ2JhKDAsMCwwLDAuMjUpOy1tb3otYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7Ym94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSl9LmJ0bi1uYXZiYXIgLmljb24tYmFyKy5pY29uLWJhcnttYXJnaW4tdG9wOjNweH0ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4O2xlZnQ6OXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yaWdodDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo3cHggc29saWQgI2NjYztib3JkZXItbGVmdDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuMik7Y29udGVudDonJ30ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi02cHg7bGVmdDoxMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yaWdodDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo2cHggc29saWQgI2ZmZjtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Y29udGVudDonJ30ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZXt0b3A6YXV0bztib3R0b206LTdweDtib3JkZXItdG9wOjdweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MDtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMC4yKX0ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmFmdGVye3RvcDphdXRvO2JvdHRvbTotNnB4O2JvcmRlci10b3A6NnB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbTowfS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj5hOmhvdmVyIC5jYXJldCwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24+YTpmb2N1cyAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojMzMzO2JvcmRlci1ib3R0b20tY29sb3I6IzMzM30ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNX0ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojNzc3O2JvcmRlci1ib3R0b20tY29sb3I6Izc3N30ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTU1fS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnUsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHR7cmlnaHQ6MDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudTpiZWZvcmUsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQ6YmVmb3Jle3JpZ2h0OjEycHg7bGVmdDphdXRvfS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXIsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQ6YWZ0ZXJ7cmlnaHQ6MTNweDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudSAuZHJvcGRvd24tbWVudSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodCAuZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6LTFweDttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiMxYjFiMWI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzIyMiwjMTExKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMjIyKSx0bygjMTExKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzIyMiwjMTExKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzIyMiwjMTExKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzIyMiwjMTExKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzI1MjUyNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjIyMjIyMicsZW5kQ29sb3JzdHI9JyNmZjExMTExMScsR3JhZGllbnRUeXBlPTApfS5uYXZiYXItaW52ZXJzZSAuYnJhbmQsLm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YXtjb2xvcjojOTk5O3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSl9Lm5hdmJhci1pbnZlcnNlIC5icmFuZDpob3ZlciwubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAuYnJhbmQ6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpmb2N1c3tjb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAuYnJhbmR7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0e2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmEsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5re2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpob3ZlciwubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmZvY3Vze2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjojMjIyO2JvcmRlci1sZWZ0LWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24+YTpob3ZlciAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24+YTpmb2N1cyAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM5OTk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1MTUxNTE7Ym9yZGVyLWNvbG9yOiMxMTE7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOy13ZWJraXQtdHJhbnNpdGlvbjpub25lOy1tb3otdHJhbnNpdGlvbjpub25lOy1vLXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnkuZm9jdXNlZHtwYWRkaW5nOjVweCAxNXB4O2NvbG9yOiMzMzM7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMGUwZTBlOypiYWNrZ3JvdW5kLWNvbG9yOiMwNDA0MDQ7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMTUxNTE1KSx0bygjMDQwNDA0KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzA0MDQwNCAjMDQwNDA0ICMwMDA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE1MTUxNScsZW5kQ29sb3JzdHI9JyNmZjA0MDQwNCcsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9Lm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjpmb2N1cywubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmRpc2FibGVkLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwNDA0MDQ7KmJhY2tncm91bmQtY29sb3I6IzAwMH0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDAwIFw5fS5icmVhZGNydW1ie3BhZGRpbmc6OHB4IDE1cHg7bWFyZ2luOjAgMCAyMHB4O2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5icmVhZGNydW1iPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7Knpvb206MX0uYnJlYWRjcnVtYj5saT4uZGl2aWRlcntwYWRkaW5nOjAgNXB4O2NvbG9yOiNjY2N9LmJyZWFkY3J1bWI+LmFjdGl2ZXtjb2xvcjojOTk5fS5wYWdpbmF0aW9ue21hcmdpbjoyMHB4IDB9LnBhZ2luYXRpb24gdWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0ucGFnaW5hdGlvbiB1bD5saXtkaXNwbGF5OmlubGluZX0ucGFnaW5hdGlvbiB1bD5saT5hLC5wYWdpbmF0aW9uIHVsPmxpPnNwYW57ZmxvYXQ6bGVmdDtwYWRkaW5nOjRweCAxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItbGVmdC13aWR0aDowfS5wYWdpbmF0aW9uIHVsPmxpPmE6aG92ZXIsLnBhZ2luYXRpb24gdWw+bGk+YTpmb2N1cywucGFnaW5hdGlvbiB1bD4uYWN0aXZlPmEsLnBhZ2luYXRpb24gdWw+LmFjdGl2ZT5zcGFue2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0ucGFnaW5hdGlvbiB1bD4uYWN0aXZlPmEsLnBhZ2luYXRpb24gdWw+LmFjdGl2ZT5zcGFue2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9LnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPnNwYW4sLnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPmEsLnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPmE6aG92ZXIsLnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPmE6Zm9jdXN7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wYWdpbmF0aW9uIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24gdWw+bGk6Zmlyc3QtY2hpbGQ+c3Bhbntib3JkZXItbGVmdC13aWR0aDoxcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LnBhZ2luYXRpb24gdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uIHVsPmxpOmxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweH0ucGFnaW5hdGlvbi1jZW50ZXJlZHt0ZXh0LWFsaWduOmNlbnRlcn0ucGFnaW5hdGlvbi1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpPmEsLnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk+c3BhbntwYWRkaW5nOjExcHggMTlweDtmb250LXNpemU6MTcuNXB4fS5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6Zmlyc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjZweH0ucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6bGFzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NnB4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1zbWFsbCB1bD5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6Zmlyc3QtY2hpbGQ+c3BhbiwucGFnaW5hdGlvbi1zbWFsbCB1bD5saTpmaXJzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6M3B4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1taW5pIHVsPmxpOmxhc3QtY2hpbGQ+c3BhbiwucGFnaW5hdGlvbi1zbWFsbCB1bD5saTpsYXN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHh9LnBhZ2luYXRpb24tc21hbGwgdWw+bGk+YSwucGFnaW5hdGlvbi1zbWFsbCB1bD5saT5zcGFue3BhZGRpbmc6MnB4IDEwcHg7Zm9udC1zaXplOjExLjlweH0ucGFnaW5hdGlvbi1taW5pIHVsPmxpPmEsLnBhZ2luYXRpb24tbWluaSB1bD5saT5zcGFue3BhZGRpbmc6MCA2cHg7Zm9udC1zaXplOjEwLjVweH0ucGFnZXJ7bWFyZ2luOjIwcHggMDt0ZXh0LWFsaWduOmNlbnRlcjtsaXN0LXN0eWxlOm5vbmU7Knpvb206MX0ucGFnZXI6YmVmb3JlLC5wYWdlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucGFnZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucGFnZXIgbGl7ZGlzcGxheTppbmxpbmV9LnBhZ2VyIGxpPmEsLnBhZ2VyIGxpPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo1cHggMTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czoxNXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNXB4O2JvcmRlci1yYWRpdXM6MTVweH0ucGFnZXIgbGk+YTpob3ZlciwucGFnZXIgbGk+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LnBhZ2VyIC5uZXh0PmEsLnBhZ2VyIC5uZXh0PnNwYW57ZmxvYXQ6cmlnaHR9LnBhZ2VyIC5wcmV2aW91cz5hLC5wYWdlciAucHJldmlvdXM+c3BhbntmbG9hdDpsZWZ0fS5wYWdlciAuZGlzYWJsZWQ+YSwucGFnZXIgLmRpc2FibGVkPmE6aG92ZXIsLnBhZ2VyIC5kaXNhYmxlZD5hOmZvY3VzLC5wYWdlciAuZGlzYWJsZWQ+c3Bhbntjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDQwO2JhY2tncm91bmQtY29sb3I6IzAwMH0ubW9kYWwtYmFja2Ryb3AuZmFkZXtvcGFjaXR5OjB9Lm1vZGFsLWJhY2tkcm9wLC5tb2RhbC1iYWNrZHJvcC5mYWRlLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS5tb2RhbHtwb3NpdGlvbjpmaXhlZDt0b3A6MTAlO2xlZnQ6NTAlO3otaW5kZXg6MTA1MDt3aWR0aDo1NjBweDttYXJnaW4tbGVmdDotMjgwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4zKTsqYm9yZGVyOjFweCBzb2xpZCAjOTk5Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LW1vei1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7Ym94LXNoYWRvdzowIDNweCA3cHggcmdiYSgwLDAsMCwwLjMpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ubW9kYWwuZmFkZXt0b3A6LTI1JTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0Oy1vLXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dH0ubW9kYWwuZmFkZS5pbnt0b3A6MTAlfS5tb2RhbC1oZWFkZXJ7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfS5tb2RhbC1oZWFkZXIgLmNsb3Nle21hcmdpbi10b3A6MnB4fS5tb2RhbC1oZWFkZXIgaDN7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MzBweH0ubW9kYWwtYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTttYXgtaGVpZ2h0OjQwMHB4O3BhZGRpbmc6MTVweDtvdmVyZmxvdy15OmF1dG99Lm1vZGFsLWZvcm17bWFyZ2luLWJvdHRvbTowfS5tb2RhbC1mb290ZXJ7cGFkZGluZzoxNHB4IDE1cHggMTVweDttYXJnaW4tYm90dG9tOjA7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Knpvb206MTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCAjZmZmOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmZ9Lm1vZGFsLWZvb3RlcjpiZWZvcmUsLm1vZGFsLWZvb3RlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubW9kYWwtZm9vdGVyOmFmdGVye2NsZWFyOmJvdGh9Lm1vZGFsLWZvb3RlciAuYnRuKy5idG57bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjVweH0ubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0bisuYnRue21hcmdpbi1sZWZ0Oi0xcHh9Lm1vZGFsLWZvb3RlciAuYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLWxlZnQ6MH0udG9vbHRpcHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMzA7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtsaW5lLWhlaWdodDoxLjQ7b3BhY2l0eTowO2ZpbHRlcjphbHBoYShvcGFjaXR5PTApO3Zpc2liaWxpdHk6dmlzaWJsZX0udG9vbHRpcC5pbntvcGFjaXR5Oi44O2ZpbHRlcjphbHBoYShvcGFjaXR5PTgwKX0udG9vbHRpcC50b3B7cGFkZGluZzo1cHggMDttYXJnaW4tdG9wOi0zcHh9LnRvb2x0aXAucmlnaHR7cGFkZGluZzowIDVweDttYXJnaW4tbGVmdDozcHh9LnRvb2x0aXAuYm90dG9te3BhZGRpbmc6NXB4IDA7bWFyZ2luLXRvcDozcHh9LnRvb2x0aXAubGVmdHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0Oi0zcHh9LnRvb2x0aXAtaW5uZXJ7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6OHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDAwOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udG9vbHRpcC1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnRvb2x0aXAudG9wIC50b29sdGlwLWFycm93e2JvdHRvbTowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXRvcC1jb2xvcjojMDAwO2JvcmRlci13aWR0aDo1cHggNXB4IDB9LnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3d7dG9wOjUwJTtsZWZ0OjA7bWFyZ2luLXRvcDotNXB4O2JvcmRlci1yaWdodC1jb2xvcjojMDAwO2JvcmRlci13aWR0aDo1cHggNXB4IDVweCAwfS50b29sdGlwLmxlZnQgLnRvb2x0aXAtYXJyb3d7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTVweDtib3JkZXItbGVmdC1jb2xvcjojMDAwO2JvcmRlci13aWR0aDo1cHggMCA1cHggNXB4fS50b29sdGlwLmJvdHRvbSAudG9vbHRpcC1hcnJvd3t0b3A6MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNXB4O2JvcmRlci1ib3R0b20tY29sb3I6IzAwMDtib3JkZXItd2lkdGg6MCA1cHggNXB4fS5wb3BvdmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt6LWluZGV4OjEwMTA7ZGlzcGxheTpub25lO21heC13aWR0aDo0MDBweDtwYWRkaW5nOjFweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ucG9wb3Zlci50b3B7bWFyZ2luLXRvcDotMTBweH0ucG9wb3Zlci5yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5wb3BvdmVyLmJvdHRvbXttYXJnaW4tdG9wOjEwcHh9LnBvcG92ZXIubGVmdHttYXJnaW4tbGVmdDotMTBweH0ucG9wb3Zlci10aXRsZXtwYWRkaW5nOjhweCAxNHB4O21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOHB4O2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViOy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHggNXB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCAwIDA7Ym9yZGVyLXJhZGl1czo1cHggNXB4IDAgMH0ucG9wb3Zlci10aXRsZTplbXB0eXtkaXNwbGF5Om5vbmV9LnBvcG92ZXItY29udGVudHtwYWRkaW5nOjlweCAxNHB4fS5wb3BvdmVyIC5hcnJvdywucG9wb3ZlciAuYXJyb3c6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnBvcG92ZXIgLmFycm93e2JvcmRlci13aWR0aDoxMXB4fS5wb3BvdmVyIC5hcnJvdzphZnRlcntib3JkZXItd2lkdGg6MTBweDtjb250ZW50OiIifS5wb3BvdmVyLnRvcCAuYXJyb3d7Ym90dG9tOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5wb3BvdmVyLnRvcCAuYXJyb3c6YWZ0ZXJ7Ym90dG9tOjFweDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5wb3BvdmVyLnJpZ2h0IC5hcnJvd3t0b3A6NTAlO2xlZnQ6LTExcHg7bWFyZ2luLXRvcDotMTFweDtib3JkZXItcmlnaHQtY29sb3I6Izk5OTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItbGVmdC13aWR0aDowfS5wb3BvdmVyLnJpZ2h0IC5hcnJvdzphZnRlcntib3R0b206LTEwcHg7bGVmdDoxcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ucG9wb3Zlci5ib3R0b20gLmFycm93e3RvcDotMTFweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMTFweDtib3JkZXItYm90dG9tLWNvbG9yOiM5OTk7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci10b3Atd2lkdGg6MH0ucG9wb3Zlci5ib3R0b20gLmFycm93OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTEwcHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmO2JvcmRlci10b3Atd2lkdGg6MH0ucG9wb3Zlci5sZWZ0IC5hcnJvd3t0b3A6NTAlO3JpZ2h0Oi0xMXB4O21hcmdpbi10b3A6LTExcHg7Ym9yZGVyLWxlZnQtY29sb3I6Izk5OTtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1yaWdodC13aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93OmFmdGVye3JpZ2h0OjFweDtib3R0b206LTEwcHg7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQtd2lkdGg6MH0udGh1bWJuYWlsc3ttYXJnaW4tbGVmdDotMjBweDtsaXN0LXN0eWxlOm5vbmU7Knpvb206MX0udGh1bWJuYWlsczpiZWZvcmUsLnRodW1ibmFpbHM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnRodW1ibmFpbHM6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIC50aHVtYm5haWxze21hcmdpbi1sZWZ0OjB9LnRodW1ibmFpbHM+bGl7ZmxvYXQ6bGVmdDttYXJnaW4tYm90dG9tOjIwcHg7bWFyZ2luLWxlZnQ6MjBweH0udGh1bWJuYWlse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo0cHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1NSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTstd2Via2l0LXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDstbW96LXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fWEudGh1bWJuYWlsOmhvdmVyLGEudGh1bWJuYWlsOmZvY3Vze2JvcmRlci1jb2xvcjojMDhjOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDEwNSwyMTQsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KX0udGh1bWJuYWlsPmltZ3tkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99LnRodW1ibmFpbCAuY2FwdGlvbntwYWRkaW5nOjlweDtjb2xvcjojNTU1fS5tZWRpYSwubWVkaWEtYm9keXtvdmVyZmxvdzpoaWRkZW47Km92ZXJmbG93OnZpc2libGU7em9vbToxfS5tZWRpYSwubWVkaWEgLm1lZGlhe21hcmdpbi10b3A6MTVweH0ubWVkaWE6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5tZWRpYS1vYmplY3R7ZGlzcGxheTpibG9ja30ubWVkaWEtaGVhZGluZ3ttYXJnaW46MCAwIDVweH0ubWVkaWE+LnB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6MTBweH0ubWVkaWE+LnB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6MTBweH0ubWVkaWEtbGlzdHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX0ubGFiZWwsLmJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDRweDtmb250LXNpemU6MTEuODQ0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoxNHB4O2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojOTk5fS5sYWJlbHstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJhZGdle3BhZGRpbmctcmlnaHQ6OXB4O3BhZGRpbmctbGVmdDo5cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjlweDstbW96LWJvcmRlci1yYWRpdXM6OXB4O2JvcmRlci1yYWRpdXM6OXB4fS5sYWJlbDplbXB0eSwuYmFkZ2U6ZW1wdHl7ZGlzcGxheTpub25lfWEubGFiZWw6aG92ZXIsYS5sYWJlbDpmb2N1cyxhLmJhZGdlOmhvdmVyLGEuYmFkZ2U6Zm9jdXN7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcn0ubGFiZWwtaW1wb3J0YW50LC5iYWRnZS1pbXBvcnRhbnR7YmFja2dyb3VuZC1jb2xvcjojYjk0YTQ4fS5sYWJlbC1pbXBvcnRhbnRbaHJlZl0sLmJhZGdlLWltcG9ydGFudFtocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiM5NTNiMzl9LmxhYmVsLXdhcm5pbmcsLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2fS5sYWJlbC13YXJuaW5nW2hyZWZdLC5iYWRnZS13YXJuaW5nW2hyZWZde2JhY2tncm91bmQtY29sb3I6I2M2NzYwNX0ubGFiZWwtc3VjY2VzcywuYmFkZ2Utc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM0Njg4NDd9LmxhYmVsLXN1Y2Nlc3NbaHJlZl0sLmJhZGdlLXN1Y2Nlc3NbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojMzU2NjM1fS5sYWJlbC1pbmZvLC5iYWRnZS1pbmZve2JhY2tncm91bmQtY29sb3I6IzNhODdhZH0ubGFiZWwtaW5mb1tocmVmXSwuYmFkZ2UtaW5mb1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMyZDY5ODd9LmxhYmVsLWludmVyc2UsLmJhZGdlLWludmVyc2V7YmFja2dyb3VuZC1jb2xvcjojMzMzfS5sYWJlbC1pbnZlcnNlW2hyZWZdLC5iYWRnZS1pbnZlcnNlW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzFhMWExYX0uYnRuIC5sYWJlbCwuYnRuIC5iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTFweH0uYnRuLW1pbmkgLmxhYmVsLC5idG4tbWluaSAuYmFkZ2V7dG9wOjB9QC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtbW96LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW1zLWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW8ta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9fUBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19LnByb2dyZXNze2hlaWdodDoyMHB4O21hcmdpbi1ib3R0b206MjBweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y3O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2Y1ZjVmNSksdG8oI2Y5ZjlmOSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjVmNWY1JyxlbmRDb2xvcnN0cj0nI2ZmZjlmOWY5JyxHcmFkaWVudFR5cGU9MCk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpfS5wcm9ncmVzcyAuYmFye2Zsb2F0OmxlZnQ7d2lkdGg6MDtoZWlnaHQ6MTAwJTtmb250LXNpemU6MTJweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMGU5MGQyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzE0OWJkZiksdG8oIzA0ODBiZSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYxNDliZGYnLGVuZENvbG9yc3RyPScjZmYwNDgwYmUnLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstbW96LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7LW8tdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfS5wcm9ncmVzcyAuYmFyKy5iYXJ7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpfS5wcm9ncmVzcy1zdHJpcGVkIC5iYXJ7YmFja2dyb3VuZC1jb2xvcjojMTQ5YmRmO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpOy13ZWJraXQtYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDstbW96LWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7LW8tYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDtiYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4fS5wcm9ncmVzcy5hY3RpdmUgLmJhcnstd2Via2l0LWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW1vei1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1tcy1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1vLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZX0ucHJvZ3Jlc3MtZGFuZ2VyIC5iYXIsLnByb2dyZXNzIC5iYXItZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2RkNTE0YztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNlZTVmNWIpLHRvKCNjNDNjMzUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZWU1ZjViJyxlbmRDb2xvcnN0cj0nI2ZmYzQzYzM1JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLWRhbmdlci5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZWU1ZjViO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1zdWNjZXNzIC5iYXIsLnByb2dyZXNzIC5iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM1ZWI5NWU7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNjJjNDYyKSx0bygjNTdhOTU3KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjYyYzQ2MicsZW5kQ29sb3JzdHI9JyNmZjU3YTk1NycsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1zdWNjZXNzLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjJjNDYyO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1pbmZvIC5iYXIsLnByb2dyZXNzIC5iYXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM0YmIxY2Y7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNWJjMGRlKSx0bygjMzM5YmI5KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjViYzBkZScsZW5kQ29sb3JzdHI9JyNmZjMzOWJiOScsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1pbmZvLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWluZm97YmFja2dyb3VuZC1jb2xvcjojNWJjMGRlO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy13YXJuaW5nIC5iYXIsLnByb2dyZXNzIC5iYXItd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmJiNDUwKSx0bygjZjg5NDA2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZiYjQ1MCcsZW5kQ29sb3JzdHI9JyNmZmY4OTQwNicsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy13YXJuaW5nLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmJiNDUwO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5hY2NvcmRpb257bWFyZ2luLWJvdHRvbToyMHB4fS5hY2NvcmRpb24tZ3JvdXB7bWFyZ2luLWJvdHRvbToycHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0uYWNjb3JkaW9uLWhlYWRpbmd7Ym9yZGVyLWJvdHRvbTowfS5hY2NvcmRpb24taGVhZGluZyAuYWNjb3JkaW9uLXRvZ2dsZXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OHB4IDE1cHh9LmFjY29yZGlvbi10b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LmFjY29yZGlvbi1pbm5lcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LmNhcm91c2Vse3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MjBweDtsaW5lLWhlaWdodDoxfS5jYXJvdXNlbC1pbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbn0uY2Fyb3VzZWwtaW5uZXI+Lml0ZW17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lOy13ZWJraXQtdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDstbW96LXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW8tdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDt0cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0fS5jYXJvdXNlbC1pbm5lcj4uaXRlbT5pbWcsLmNhcm91c2VsLWlubmVyPi5pdGVtPmE+aW1ne2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZSwuY2Fyb3VzZWwtaW5uZXI+Lm5leHQsLmNhcm91c2VsLWlubmVyPi5wcmV2e2Rpc3BsYXk6YmxvY2t9LmNhcm91c2VsLWlubmVyPi5hY3RpdmV7bGVmdDowfS5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0uY2Fyb3VzZWwtaW5uZXI+Lm5leHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ucHJldntsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dC5sZWZ0LC5jYXJvdXNlbC1pbm5lcj4ucHJldi5yaWdodHtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUubGVmdHtsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLnJpZ2h0e2xlZnQ6MTAwJX0uY2Fyb3VzZWwtY29udHJvbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAlO2xlZnQ6MTVweDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6LTIwcHg7Zm9udC1zaXplOjYwcHg7Zm9udC13ZWlnaHQ6MTAwO2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiMyMjI7Ym9yZGVyOjNweCBzb2xpZCAjZmZmOy13ZWJraXQtYm9yZGVyLXJhZGl1czoyM3B4Oy1tb3otYm9yZGVyLXJhZGl1czoyM3B4O2JvcmRlci1yYWRpdXM6MjNweDtvcGFjaXR5Oi41O2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKX0uY2Fyb3VzZWwtY29udHJvbC5yaWdodHtyaWdodDoxNXB4O2xlZnQ6YXV0b30uY2Fyb3VzZWwtY29udHJvbDpob3ZlciwuY2Fyb3VzZWwtY29udHJvbDpmb2N1c3tjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO29wYWNpdHk6Ljk7ZmlsdGVyOmFscGhhKG9wYWNpdHk9OTApfS5jYXJvdXNlbC1pbmRpY2F0b3Jze3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjE1cHg7ei1pbmRleDo1O21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZX0uY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaXtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDttYXJnaW4tbGVmdDo1cHg7dGV4dC1pbmRlbnQ6LTk5OXB4O2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7Ym9yZGVyLXJhZGl1czo1cHh9LmNhcm91c2VsLWluZGljYXRvcnMgLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzMzMztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC43NSl9LmNhcm91c2VsLWNhcHRpb24gaDQsLmNhcm91c2VsLWNhcHRpb24gcHtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiNmZmZ9LmNhcm91c2VsLWNhcHRpb24gaDR7bWFyZ2luOjAgMCA1cHh9LmNhcm91c2VsLWNhcHRpb24gcHttYXJnaW4tYm90dG9tOjB9Lmhlcm8tdW5pdHtwYWRkaW5nOjYwcHg7bWFyZ2luLWJvdHRvbTozMHB4O2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjIwMDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjojZWVlOy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uaGVyby11bml0IGgxe21hcmdpbi1ib3R0b206MDtmb250LXNpemU6NjBweDtsaW5lLWhlaWdodDoxO2xldHRlci1zcGFjaW5nOi0xcHg7Y29sb3I6aW5oZXJpdH0uaGVyby11bml0IGxpe2xpbmUtaGVpZ2h0OjMwcHh9LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LnB1bGwtbGVmdHtmbG9hdDpsZWZ0fS5oaWRle2Rpc3BsYXk6bm9uZX0uc2hvd3tkaXNwbGF5OmJsb2NrfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LmFmZml4e3Bvc2l0aW9uOmZpeGVkfQorICogQm9vdHN0cmFwIHYzLjMuNiAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pCisgKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCisgKi8vKiEgbm9ybWFsaXplLmNzcyB2My4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovaHRtbHtmb250LWZhbWlseTpzYW5zLXNlcmlmOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCV9Ym9keXttYXJnaW46MH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbWFpbixtZW51LG5hdixzZWN0aW9uLHN1bW1hcnl7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMscHJvZ3Jlc3MsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6bm9uZTtoZWlnaHQ6MH1baGlkZGVuXSx0ZW1wbGF0ZXtkaXNwbGF5Om5vbmV9YXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWE6YWN0aXZlLGE6aG92ZXJ7b3V0bGluZTowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206MXB4IGRvdHRlZH1iLHN0cm9uZ3tmb250LXdlaWdodDo3MDB9ZGZue2ZvbnQtc3R5bGU6aXRhbGljfWgxe21hcmdpbjouNjdlbSAwO2ZvbnQtc2l6ZToyZW19bWFya3tjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmMH1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LS41ZW19c3Vie2JvdHRvbTotLjI1ZW19aW1ne2JvcmRlcjowfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1maWd1cmV7bWFyZ2luOjFlbSA0MHB4fWhye2hlaWdodDowOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveH1wcmV7b3ZlcmZsb3c6YXV0b31jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXttYXJnaW46MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdH1idXR0b257b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgaW5wdXRbdHlwZT1idXR0b25dLGlucHV0W3R5cGU9cmVzZXRdLGlucHV0W3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2N1cnNvcjpwb2ludGVyfWJ1dHRvbltkaXNhYmxlZF0saHRtbCBpbnB1dFtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1pbnB1dHtsaW5lLWhlaWdodDpub3JtYWx9aW5wdXRbdHlwZT1jaGVja2JveF0saW5wdXRbdHlwZT1yYWRpb117LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1pbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24saW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZH1pbnB1dFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24saW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfWZpZWxkc2V0e3BhZGRpbmc6LjM1ZW0gLjYyNWVtIC43NWVtO21hcmdpbjowIDJweDtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcn1sZWdlbmR7cGFkZGluZzowO2JvcmRlcjowfXRleHRhcmVhe292ZXJmbG93OmF1dG99b3B0Z3JvdXB7Zm9udC13ZWlnaHQ6NzAwfXRhYmxle2JvcmRlci1zcGFjaW5nOjA7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfXRkLHRoe3BhZGRpbmc6MH0vKiEgU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9ibG9iL21hc3Rlci9zcmMvY3NzL21haW4uY3NzICovQG1lZGlhIHByaW50eyosOmFmdGVyLDpiZWZvcmV7Y29sb3I6IzAwMCFpbXBvcnRhbnQ7dGV4dC1zaGFkb3c6bm9uZSFpbXBvcnRhbnQ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50Oy13ZWJraXQtYm94LXNoYWRvdzpub25lIWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWEsYTp2aXNpdGVke3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YVtocmVmXTphZnRlcntjb250ZW50OiIgKCIgYXR0cihocmVmKSAiKSJ9YWJiclt0aXRsZV06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIodGl0bGUpICIpIn1hW2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyLGFbaHJlZl49IiMiXTphZnRlcntjb250ZW50OiIifWJsb2NrcXVvdGUscHJle2JvcmRlcjoxcHggc29saWQgIzk5OTtwYWdlLWJyZWFrLWluc2lkZTphdm9pZH10aGVhZHtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH1pbWcsdHJ7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9aW1ne21heC13aWR0aDoxMDAlIWltcG9ydGFudH1oMixoMyxwe29ycGhhbnM6Mzt3aWRvd3M6M31oMixoM3twYWdlLWJyZWFrLWFmdGVyOmF2b2lkfS5uYXZiYXJ7ZGlzcGxheTpub25lfS5idG4+LmNhcmV0LC5kcm9wdXA+LmJ0bj4uY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojMDAwIWltcG9ydGFudH0ubGFiZWx7Ym9yZGVyOjFweCBzb2xpZCAjMDAwfS50YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2UhaW1wb3J0YW50fS50YWJsZSB0ZCwudGFibGUgdGh7YmFja2dyb3VuZC1jb2xvcjojZmZmIWltcG9ydGFudH0udGFibGUtYm9yZGVyZWQgdGQsLnRhYmxlLWJvcmRlcmVkIHRoe2JvcmRlcjoxcHggc29saWQgI2RkZCFpbXBvcnRhbnR9fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J0dseXBoaWNvbnMgSGFsZmxpbmdzJztzcmM6dXJsKC4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90KTtzcmM6dXJsKC4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLHVybCguLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksdXJsKC4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZikgZm9ybWF0KCd3b2ZmJyksdXJsKC4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmKSBmb3JtYXQoJ3RydWV0eXBlJyksdXJsKC4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnI2dseXBoaWNvbnNfaGFsZmxpbmdzcmVndWxhcikgZm9ybWF0KCdzdmcnKX0uZ2x5cGhpY29ue3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6J0dseXBoaWNvbnMgSGFsZmxpbmdzJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0uZ2x5cGhpY29uLWFzdGVyaXNrOmJlZm9yZXtjb250ZW50OiJcMDAyYSJ9LmdseXBoaWNvbi1wbHVzOmJlZm9yZXtjb250ZW50OiJcMDAyYiJ9LmdseXBoaWNvbi1ldXI6YmVmb3JlLC5nbHlwaGljb24tZXVybzpiZWZvcmV7Y29udGVudDoiXDIwYWMifS5nbHlwaGljb24tbWludXM6YmVmb3Jle2NvbnRlbnQ6IlwyMjEyIn0uZ2x5cGhpY29uLWNsb3VkOmJlZm9yZXtjb250ZW50OiJcMjYwMSJ9LmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmV7Y29udGVudDoiXDI3MDkifS5nbHlwaGljb24tcGVuY2lsOmJlZm9yZXtjb250ZW50OiJcMjcwZiJ9LmdseXBoaWNvbi1nbGFzczpiZWZvcmV7Y29udGVudDoiXGUwMDEifS5nbHlwaGljb24tbXVzaWM6YmVmb3Jle2NvbnRlbnQ6IlxlMDAyIn0uZ2x5cGhpY29uLXNlYXJjaDpiZWZvcmV7Y29udGVudDoiXGUwMDMifS5nbHlwaGljb24taGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDA1In0uZ2x5cGhpY29uLXN0YXI6YmVmb3Jle2NvbnRlbnQ6IlxlMDA2In0uZ2x5cGhpY29uLXN0YXItZW1wdHk6YmVmb3Jle2NvbnRlbnQ6IlxlMDA3In0uZ2x5cGhpY29uLXVzZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMDA4In0uZ2x5cGhpY29uLWZpbG06YmVmb3Jle2NvbnRlbnQ6IlxlMDA5In0uZ2x5cGhpY29uLXRoLWxhcmdlOmJlZm9yZXtjb250ZW50OiJcZTAxMCJ9LmdseXBoaWNvbi10aDpiZWZvcmV7Y29udGVudDoiXGUwMTEifS5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmV7Y29udGVudDoiXGUwMTIifS5nbHlwaGljb24tb2s6YmVmb3Jle2NvbnRlbnQ6IlxlMDEzIn0uZ2x5cGhpY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDoiXGUwMTQifS5nbHlwaGljb24tem9vbS1pbjpiZWZvcmV7Y29udGVudDoiXGUwMTUifS5nbHlwaGljb24tem9vbS1vdXQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDE2In0uZ2x5cGhpY29uLW9mZjpiZWZvcmV7Y29udGVudDoiXGUwMTcifS5nbHlwaGljb24tc2lnbmFsOmJlZm9yZXtjb250ZW50OiJcZTAxOCJ9LmdseXBoaWNvbi1jb2c6YmVmb3Jle2NvbnRlbnQ6IlxlMDE5In0uZ2x5cGhpY29uLXRyYXNoOmJlZm9yZXtjb250ZW50OiJcZTAyMCJ9LmdseXBoaWNvbi1ob21lOmJlZm9yZXtjb250ZW50OiJcZTAyMSJ9LmdseXBoaWNvbi1maWxlOmJlZm9yZXtjb250ZW50OiJcZTAyMiJ9LmdseXBoaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OiJcZTAyMyJ9LmdseXBoaWNvbi1yb2FkOmJlZm9yZXtjb250ZW50OiJcZTAyNCJ9LmdseXBoaWNvbi1kb3dubG9hZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDI1In0uZ2x5cGhpY29uLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZTAyNiJ9LmdseXBoaWNvbi11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDI3In0uZ2x5cGhpY29uLWluYm94OmJlZm9yZXtjb250ZW50OiJcZTAyOCJ9LmdseXBoaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGUwMjkifS5nbHlwaGljb24tcmVwZWF0OmJlZm9yZXtjb250ZW50OiJcZTAzMCJ9LmdseXBoaWNvbi1yZWZyZXNoOmJlZm9yZXtjb250ZW50OiJcZTAzMSJ9LmdseXBoaWNvbi1saXN0LWFsdDpiZWZvcmV7Y29udGVudDoiXGUwMzIifS5nbHlwaGljb24tbG9jazpiZWZvcmV7Y29udGVudDoiXGUwMzMifS5nbHlwaGljb24tZmxhZzpiZWZvcmV7Y29udGVudDoiXGUwMzQifS5nbHlwaGljb24taGVhZHBob25lczpiZWZvcmV7Y29udGVudDoiXGUwMzUifS5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmV7Y29udGVudDoiXGUwMzYifS5nbHlwaGljb24tdm9sdW1lLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMDM3In0uZ2x5cGhpY29uLXZvbHVtZS11cDpiZWZvcmV7Y29udGVudDoiXGUwMzgifS5nbHlwaGljb24tcXJjb2RlOmJlZm9yZXtjb250ZW50OiJcZTAzOSJ9LmdseXBoaWNvbi1iYXJjb2RlOmJlZm9yZXtjb250ZW50OiJcZTA0MCJ9LmdseXBoaWNvbi10YWc6YmVmb3Jle2NvbnRlbnQ6IlxlMDQxIn0uZ2x5cGhpY29uLXRhZ3M6YmVmb3Jle2NvbnRlbnQ6IlxlMDQyIn0uZ2x5cGhpY29uLWJvb2s6YmVmb3Jle2NvbnRlbnQ6IlxlMDQzIn0uZ2x5cGhpY29uLWJvb2ttYXJrOmJlZm9yZXtjb250ZW50OiJcZTA0NCJ9LmdseXBoaWNvbi1wcmludDpiZWZvcmV7Y29udGVudDoiXGUwNDUifS5nbHlwaGljb24tY2FtZXJhOmJlZm9yZXtjb250ZW50OiJcZTA0NiJ9LmdseXBoaWNvbi1mb250OmJlZm9yZXtjb250ZW50OiJcZTA0NyJ9LmdseXBoaWNvbi1ib2xkOmJlZm9yZXtjb250ZW50OiJcZTA0OCJ9LmdseXBoaWNvbi1pdGFsaWM6YmVmb3Jle2NvbnRlbnQ6IlxlMDQ5In0uZ2x5cGhpY29uLXRleHQtaGVpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTA1MCJ9LmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZXtjb250ZW50OiJcZTA1MSJ9LmdseXBoaWNvbi1hbGlnbi1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTA1MiJ9LmdseXBoaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMDUzIn0uZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTA1NCJ9LmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5OmJlZm9yZXtjb250ZW50OiJcZTA1NSJ9LmdseXBoaWNvbi1saXN0OmJlZm9yZXtjb250ZW50OiJcZTA1NiJ9LmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGUwNTcifS5nbHlwaGljb24taW5kZW50LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTA1OCJ9LmdseXBoaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmV7Y29udGVudDoiXGUwNTkifS5nbHlwaGljb24tcGljdHVyZTpiZWZvcmV7Y29udGVudDoiXGUwNjAifS5nbHlwaGljb24tbWFwLW1hcmtlcjpiZWZvcmV7Y29udGVudDoiXGUwNjIifS5nbHlwaGljb24tYWRqdXN0OmJlZm9yZXtjb250ZW50OiJcZTA2MyJ9LmdseXBoaWNvbi10aW50OmJlZm9yZXtjb250ZW50OiJcZTA2NCJ9LmdseXBoaWNvbi1lZGl0OmJlZm9yZXtjb250ZW50OiJcZTA2NSJ9LmdseXBoaWNvbi1zaGFyZTpiZWZvcmV7Y29udGVudDoiXGUwNjYifS5nbHlwaGljb24tY2hlY2s6YmVmb3Jle2NvbnRlbnQ6IlxlMDY3In0uZ2x5cGhpY29uLW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxlMDY4In0uZ2x5cGhpY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDY5In0uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDcwIn0uZ2x5cGhpY29uLWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZTA3MSJ9LmdseXBoaWNvbi1wbGF5OmJlZm9yZXtjb250ZW50OiJcZTA3MiJ9LmdseXBoaWNvbi1wYXVzZTpiZWZvcmV7Y29udGVudDoiXGUwNzMifS5nbHlwaGljb24tc3RvcDpiZWZvcmV7Y29udGVudDoiXGUwNzQifS5nbHlwaGljb24tZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGUwNzUifS5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OiJcZTA3NiJ9LmdseXBoaWNvbi1zdGVwLWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDc3In0uZ2x5cGhpY29uLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZTA3OCJ9LmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDc5In0uZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDgwIn0uZ2x5cGhpY29uLXBsdXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGUwODEifS5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGUwODIifS5nbHlwaGljb24tcmVtb3ZlLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxlMDgzIn0uZ2x5cGhpY29uLW9rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxlMDg0In0uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxlMDg1In0uZ2x5cGhpY29uLWluZm8tc2lnbjpiZWZvcmV7Y29udGVudDoiXGUwODYifS5nbHlwaGljb24tc2NyZWVuc2hvdDpiZWZvcmV7Y29udGVudDoiXGUwODcifS5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGUwODgifS5nbHlwaGljb24tb2stY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZTA4OSJ9LmdseXBoaWNvbi1iYW4tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZTA5MCJ9LmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTA5MSJ9LmdseXBoaWNvbi1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGUwOTIifS5nbHlwaGljb24tYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMDkzIn0uZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMDk0In0uZ2x5cGhpY29uLXNoYXJlLWFsdDpiZWZvcmV7Y29udGVudDoiXGUwOTUifS5nbHlwaGljb24tcmVzaXplLWZ1bGw6YmVmb3Jle2NvbnRlbnQ6IlxlMDk2In0uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmV7Y29udGVudDoiXGUwOTcifS5nbHlwaGljb24tZXhjbGFtYXRpb24tc2lnbjpiZWZvcmV7Y29udGVudDoiXGUxMDEifS5nbHlwaGljb24tZ2lmdDpiZWZvcmV7Y29udGVudDoiXGUxMDIifS5nbHlwaGljb24tbGVhZjpiZWZvcmV7Y29udGVudDoiXGUxMDMifS5nbHlwaGljb24tZmlyZTpiZWZvcmV7Y29udGVudDoiXGUxMDQifS5nbHlwaGljb24tZXllLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxlMTA1In0uZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGUxMDYifS5nbHlwaGljb24td2FybmluZy1zaWduOmJlZm9yZXtjb250ZW50OiJcZTEwNyJ9LmdseXBoaWNvbi1wbGFuZTpiZWZvcmV7Y29udGVudDoiXGUxMDgifS5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3Jle2NvbnRlbnQ6IlxlMTA5In0uZ2x5cGhpY29uLXJhbmRvbTpiZWZvcmV7Y29udGVudDoiXGUxMTAifS5nbHlwaGljb24tY29tbWVudDpiZWZvcmV7Y29udGVudDoiXGUxMTEifS5nbHlwaGljb24tbWFnbmV0OmJlZm9yZXtjb250ZW50OiJcZTExMiJ9LmdseXBoaWNvbi1jaGV2cm9uLXVwOmJlZm9yZXtjb250ZW50OiJcZTExMyJ9LmdseXBoaWNvbi1jaGV2cm9uLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMTE0In0uZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTE1In0uZ2x5cGhpY29uLXNob3BwaW5nLWNhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTE2In0uZ2x5cGhpY29uLWZvbGRlci1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGUxMTcifS5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxlMTE4In0uZ2x5cGhpY29uLXJlc2l6ZS12ZXJ0aWNhbDpiZWZvcmV7Y29udGVudDoiXGUxMTkifS5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3Jle2NvbnRlbnQ6IlxlMTIwIn0uZ2x5cGhpY29uLWhkZDpiZWZvcmV7Y29udGVudDoiXGUxMjEifS5nbHlwaGljb24tYnVsbGhvcm46YmVmb3Jle2NvbnRlbnQ6IlxlMTIyIn0uZ2x5cGhpY29uLWJlbGw6YmVmb3Jle2NvbnRlbnQ6IlxlMTIzIn0uZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZXtjb250ZW50OiJcZTEyNCJ9LmdseXBoaWNvbi10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMTI1In0uZ2x5cGhpY29uLXRodW1icy1kb3duOmJlZm9yZXtjb250ZW50OiJcZTEyNiJ9LmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTEyNyJ9LmdseXBoaWNvbi1oYW5kLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTI4In0uZ2x5cGhpY29uLWhhbmQtdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMTI5In0uZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmV7Y29udGVudDoiXGUxMzAifS5nbHlwaGljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTEzMSJ9LmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGUxMzIifS5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZTEzMyJ9LmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDoiXGUxMzQifS5nbHlwaGljb24tZ2xvYmU6YmVmb3Jle2NvbnRlbnQ6IlxlMTM1In0uZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmV7Y29udGVudDoiXGUxMzYifS5nbHlwaGljb24tdGFza3M6YmVmb3Jle2NvbnRlbnQ6IlxlMTM3In0uZ2x5cGhpY29uLWZpbHRlcjpiZWZvcmV7Y29udGVudDoiXGUxMzgifS5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZXtjb250ZW50OiJcZTEzOSJ9LmdseXBoaWNvbi1mdWxsc2NyZWVuOmJlZm9yZXtjb250ZW50OiJcZTE0MCJ9LmdseXBoaWNvbi1kYXNoYm9hcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTQxIn0uZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmV7Y29udGVudDoiXGUxNDIifS5nbHlwaGljb24taGVhcnQtZW1wdHk6YmVmb3Jle2NvbnRlbnQ6IlxlMTQzIn0uZ2x5cGhpY29uLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxlMTQ0In0uZ2x5cGhpY29uLXBob25lOmJlZm9yZXtjb250ZW50OiJcZTE0NSJ9LmdseXBoaWNvbi1wdXNocGluOmJlZm9yZXtjb250ZW50OiJcZTE0NiJ9LmdseXBoaWNvbi11c2Q6YmVmb3Jle2NvbnRlbnQ6IlxlMTQ4In0uZ2x5cGhpY29uLWdicDpiZWZvcmV7Y29udGVudDoiXGUxNDkifS5nbHlwaGljb24tc29ydDpiZWZvcmV7Y29udGVudDoiXGUxNTAifS5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldDpiZWZvcmV7Y29udGVudDoiXGUxNTEifS5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTUyIn0uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMTUzIn0uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXItYWx0OmJlZm9yZXtjb250ZW50OiJcZTE1NCJ9LmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3Jle2NvbnRlbnQ6IlxlMTU1In0uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcy1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTU2In0uZ2x5cGhpY29uLXVuY2hlY2tlZDpiZWZvcmV7Y29udGVudDoiXGUxNTcifS5nbHlwaGljb24tZXhwYW5kOmJlZm9yZXtjb250ZW50OiJcZTE1OCJ9LmdseXBoaWNvbi1jb2xsYXBzZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZTE1OSJ9LmdseXBoaWNvbi1jb2xsYXBzZS11cDpiZWZvcmV7Y29udGVudDoiXGUxNjAifS5nbHlwaGljb24tbG9nLWluOmJlZm9yZXtjb250ZW50OiJcZTE2MSJ9LmdseXBoaWNvbi1mbGFzaDpiZWZvcmV7Y29udGVudDoiXGUxNjIifS5nbHlwaGljb24tbG9nLW91dDpiZWZvcmV7Y29udGVudDoiXGUxNjMifS5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmV7Y29udGVudDoiXGUxNjQifS5nbHlwaGljb24tcmVjb3JkOmJlZm9yZXtjb250ZW50OiJcZTE2NSJ9LmdseXBoaWNvbi1zYXZlOmJlZm9yZXtjb250ZW50OiJcZTE2NiJ9LmdseXBoaWNvbi1vcGVuOmJlZm9yZXtjb250ZW50OiJcZTE2NyJ9LmdseXBoaWNvbi1zYXZlZDpiZWZvcmV7Y29udGVudDoiXGUxNjgifS5nbHlwaGljb24taW1wb3J0OmJlZm9yZXtjb250ZW50OiJcZTE2OSJ9LmdseXBoaWNvbi1leHBvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTcwIn0uZ2x5cGhpY29uLXNlbmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTcxIn0uZ2x5cGhpY29uLWZsb3BweS1kaXNrOmJlZm9yZXtjb250ZW50OiJcZTE3MiJ9LmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTczIn0uZ2x5cGhpY29uLWZsb3BweS1yZW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxlMTc0In0uZ2x5cGhpY29uLWZsb3BweS1zYXZlOmJlZm9yZXtjb250ZW50OiJcZTE3NSJ9LmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmV7Y29udGVudDoiXGUxNzYifS5nbHlwaGljb24tY3JlZGl0LWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTc3In0uZ2x5cGhpY29uLXRyYW5zZmVyOmJlZm9yZXtjb250ZW50OiJcZTE3OCJ9LmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZXtjb250ZW50OiJcZTE3OSJ9LmdseXBoaWNvbi1oZWFkZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMTgwIn0uZ2x5cGhpY29uLWNvbXByZXNzZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTgxIn0uZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZXtjb250ZW50OiJcZTE4MiJ9LmdseXBoaWNvbi1waG9uZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTgzIn0uZ2x5cGhpY29uLXRvd2VyOmJlZm9yZXtjb250ZW50OiJcZTE4NCJ9LmdseXBoaWNvbi1zdGF0czpiZWZvcmV7Y29udGVudDoiXGUxODUifS5nbHlwaGljb24tc2QtdmlkZW86YmVmb3Jle2NvbnRlbnQ6IlxlMTg2In0uZ2x5cGhpY29uLWhkLXZpZGVvOmJlZm9yZXtjb250ZW50OiJcZTE4NyJ9LmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3Jle2NvbnRlbnQ6IlxlMTg4In0uZ2x5cGhpY29uLXNvdW5kLXN0ZXJlbzpiZWZvcmV7Y29udGVudDoiXGUxODkifS5nbHlwaGljb24tc291bmQtZG9sYnk6YmVmb3Jle2NvbnRlbnQ6IlxlMTkwIn0uZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmV7Y29udGVudDoiXGUxOTEifS5nbHlwaGljb24tc291bmQtNi0xOmJlZm9yZXtjb250ZW50OiJcZTE5MiJ9LmdseXBoaWNvbi1zb3VuZC03LTE6YmVmb3Jle2NvbnRlbnQ6IlxlMTkzIn0uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZXtjb250ZW50OiJcZTE5NCJ9LmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyazpiZWZvcmV7Y29udGVudDoiXGUxOTUifS5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTk3In0uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmV7Y29udGVudDoiXGUxOTgifS5nbHlwaGljb24tdHJlZS1jb25pZmVyOmJlZm9yZXtjb250ZW50OiJcZTE5OSJ9LmdseXBoaWNvbi10cmVlLWRlY2lkdW91czpiZWZvcmV7Y29udGVudDoiXGUyMDAifS5nbHlwaGljb24tY2Q6YmVmb3Jle2NvbnRlbnQ6IlxlMjAxIn0uZ2x5cGhpY29uLXNhdmUtZmlsZTpiZWZvcmV7Y29udGVudDoiXGUyMDIifS5nbHlwaGljb24tb3Blbi1maWxlOmJlZm9yZXtjb250ZW50OiJcZTIwMyJ9LmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmV7Y29udGVudDoiXGUyMDQifS5nbHlwaGljb24tY29weTpiZWZvcmV7Y29udGVudDoiXGUyMDUifS5nbHlwaGljb24tcGFzdGU6YmVmb3Jle2NvbnRlbnQ6IlxlMjA2In0uZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZXtjb250ZW50OiJcZTIwOSJ9LmdseXBoaWNvbi1lcXVhbGl6ZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMjEwIn0uZ2x5cGhpY29uLWtpbmc6YmVmb3Jle2NvbnRlbnQ6IlxlMjExIn0uZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZXtjb250ZW50OiJcZTIxMiJ9LmdseXBoaWNvbi1wYXduOmJlZm9yZXtjb250ZW50OiJcZTIxMyJ9LmdseXBoaWNvbi1iaXNob3A6YmVmb3Jle2NvbnRlbnQ6IlxlMjE0In0uZ2x5cGhpY29uLWtuaWdodDpiZWZvcmV7Y29udGVudDoiXGUyMTUifS5nbHlwaGljb24tYmFieS1mb3JtdWxhOmJlZm9yZXtjb250ZW50OiJcZTIxNiJ9LmdseXBoaWNvbi10ZW50OmJlZm9yZXtjb250ZW50OiJcMjZmYSJ9LmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZXtjb250ZW50OiJcZTIxOCJ9LmdseXBoaWNvbi1iZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjE5In0uZ2x5cGhpY29uLWFwcGxlOmJlZm9yZXtjb250ZW50OiJcZjhmZiJ9LmdseXBoaWNvbi1lcmFzZTpiZWZvcmV7Y29udGVudDoiXGUyMjEifS5nbHlwaGljb24taG91cmdsYXNzOmJlZm9yZXtjb250ZW50OiJcMjMxYiJ9LmdseXBoaWNvbi1sYW1wOmJlZm9yZXtjb250ZW50OiJcZTIyMyJ9LmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3Jle2NvbnRlbnQ6IlxlMjI0In0uZ2x5cGhpY29uLXBpZ2d5LWJhbms6YmVmb3Jle2NvbnRlbnQ6IlxlMjI1In0uZ2x5cGhpY29uLXNjaXNzb3JzOmJlZm9yZXtjb250ZW50OiJcZTIyNiJ9LmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZXtjb250ZW50OiJcZTIyNyJ9LmdseXBoaWNvbi1idGM6YmVmb3Jle2NvbnRlbnQ6IlxlMjI3In0uZ2x5cGhpY29uLXhidDpiZWZvcmV7Y29udGVudDoiXGUyMjcifS5nbHlwaGljb24teWVuOmJlZm9yZXtjb250ZW50OiJcMDBhNSJ9LmdseXBoaWNvbi1qcHk6YmVmb3Jle2NvbnRlbnQ6IlwwMGE1In0uZ2x5cGhpY29uLXJ1YmxlOmJlZm9yZXtjb250ZW50OiJcMjBiZCJ9LmdseXBoaWNvbi1ydWI6YmVmb3Jle2NvbnRlbnQ6IlwyMGJkIn0uZ2x5cGhpY29uLXNjYWxlOmJlZm9yZXtjb250ZW50OiJcZTIzMCJ9LmdseXBoaWNvbi1pY2UtbG9sbHk6YmVmb3Jle2NvbnRlbnQ6IlxlMjMxIn0uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjMyIn0uZ2x5cGhpY29uLWVkdWNhdGlvbjpiZWZvcmV7Y29udGVudDoiXGUyMzMifS5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWw6YmVmb3Jle2NvbnRlbnQ6IlxlMjM0In0uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbDpiZWZvcmV7Y29udGVudDoiXGUyMzUifS5nbHlwaGljb24tbWVudS1oYW1idXJnZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMjM2In0uZ2x5cGhpY29uLW1vZGFsLXdpbmRvdzpiZWZvcmV7Y29udGVudDoiXGUyMzcifS5nbHlwaGljb24tb2lsOmJlZm9yZXtjb250ZW50OiJcZTIzOCJ9LmdseXBoaWNvbi1ncmFpbjpiZWZvcmV7Y29udGVudDoiXGUyMzkifS5nbHlwaGljb24tc3VuZ2xhc3NlczpiZWZvcmV7Y29udGVudDoiXGUyNDAifS5nbHlwaGljb24tdGV4dC1zaXplOmJlZm9yZXtjb250ZW50OiJcZTI0MSJ9LmdseXBoaWNvbi10ZXh0LWNvbG9yOmJlZm9yZXtjb250ZW50OiJcZTI0MiJ9LmdseXBoaWNvbi10ZXh0LWJhY2tncm91bmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjQzIn0uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3A6YmVmb3Jle2NvbnRlbnQ6IlxlMjQ0In0uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ib3R0b206YmVmb3Jle2NvbnRlbnQ6IlxlMjQ1In0uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ob3Jpem9udGFsOmJlZm9yZXtjb250ZW50OiJcZTI0NiJ9LmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGUyNDcifS5nbHlwaGljb24tb2JqZWN0LWFsaWduLXZlcnRpY2FsOmJlZm9yZXtjb250ZW50OiJcZTI0OCJ9LmdseXBoaWNvbi1vYmplY3QtYWxpZ24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjQ5In0uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTI1MCJ9LmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTI1MSJ9LmdseXBoaWNvbi10cmlhbmdsZS1ib3R0b206YmVmb3Jle2NvbnRlbnQ6IlxlMjUyIn0uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcDpiZWZvcmV7Y29udGVudDoiXGUyNTMifS5nbHlwaGljb24tY29uc29sZTpiZWZvcmV7Y29udGVudDoiXGUyNTQifS5nbHlwaGljb24tc3VwZXJzY3JpcHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjU1In0uZ2x5cGhpY29uLXN1YnNjcmlwdDpiZWZvcmV7Y29udGVudDoiXGUyNTYifS5nbHlwaGljb24tbWVudS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTI1NyJ9LmdseXBoaWNvbi1tZW51LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTI1OCJ9LmdseXBoaWNvbi1tZW51LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMjU5In0uZ2x5cGhpY29uLW1lbnUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMjYwIn0qey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH06YWZ0ZXIsOmJlZm9yZXstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9aHRtbHtmb250LXNpemU6MTBweDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5e2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mztjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZn1idXR0b24saW5wdXQsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdH1he2NvbG9yOiMzMzdhYjc7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YTpmb2N1cyxhOmhvdmVye2NvbG9yOiMyMzUyN2M7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQ7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH1maWd1cmV7bWFyZ2luOjB9aW1ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+YT5pbWcsLmNhcm91c2VsLWlubmVyPi5pdGVtPmltZywuaW1nLXJlc3BvbnNpdmUsLnRodW1ibmFpbCBhPmltZywudGh1bWJuYWlsPmltZ3tkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfS5pbWctcm91bmRlZHtib3JkZXItcmFkaXVzOjZweH0uaW1nLXRodW1ibmFpbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0bztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7LW8tdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dH0uaW1nLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJX1ocnttYXJnaW4tdG9wOjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlZWV9LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwwLDAsMCk7Ym9yZGVyOjB9LnNyLW9ubHktZm9jdXNhYmxlOmFjdGl2ZSwuc3Itb25seS1mb2N1c2FibGU6Zm9jdXN7cG9zaXRpb246c3RhdGljO3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtjbGlwOmF1dG99W3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn0uaDEsLmgyLC5oMywuaDQsLmg1LC5oNixoMSxoMixoMyxoNCxoNSxoNntmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjE7Y29sb3I6aW5oZXJpdH0uaDEgLnNtYWxsLC5oMSBzbWFsbCwuaDIgLnNtYWxsLC5oMiBzbWFsbCwuaDMgLnNtYWxsLC5oMyBzbWFsbCwuaDQgLnNtYWxsLC5oNCBzbWFsbCwuaDUgLnNtYWxsLC5oNSBzbWFsbCwuaDYgLnNtYWxsLC5oNiBzbWFsbCxoMSAuc21hbGwsaDEgc21hbGwsaDIgLnNtYWxsLGgyIHNtYWxsLGgzIC5zbWFsbCxoMyBzbWFsbCxoNCAuc21hbGwsaDQgc21hbGwsaDUgLnNtYWxsLGg1IHNtYWxsLGg2IC5zbWFsbCxoNiBzbWFsbHtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojNzc3fS5oMSwuaDIsLmgzLGgxLGgyLGgze21hcmdpbi10b3A6MjBweDttYXJnaW4tYm90dG9tOjEwcHh9LmgxIC5zbWFsbCwuaDEgc21hbGwsLmgyIC5zbWFsbCwuaDIgc21hbGwsLmgzIC5zbWFsbCwuaDMgc21hbGwsaDEgLnNtYWxsLGgxIHNtYWxsLGgyIC5zbWFsbCxoMiBzbWFsbCxoMyAuc21hbGwsaDMgc21hbGx7Zm9udC1zaXplOjY1JX0uaDQsLmg1LC5oNixoNCxoNSxoNnttYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4fS5oNCAuc21hbGwsLmg0IHNtYWxsLC5oNSAuc21hbGwsLmg1IHNtYWxsLC5oNiAuc21hbGwsLmg2IHNtYWxsLGg0IC5zbWFsbCxoNCBzbWFsbCxoNSAuc21hbGwsaDUgc21hbGwsaDYgLnNtYWxsLGg2IHNtYWxse2ZvbnQtc2l6ZTo3NSV9LmgxLGgxe2ZvbnQtc2l6ZTozNnB4fS5oMixoMntmb250LXNpemU6MzBweH0uaDMsaDN7Zm9udC1zaXplOjI0cHh9Lmg0LGg0e2ZvbnQtc2l6ZToxOHB4fS5oNSxoNXtmb250LXNpemU6MTRweH0uaDYsaDZ7Zm9udC1zaXplOjEycHh9cHttYXJnaW46MCAwIDEwcHh9LmxlYWR7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDoxLjR9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5sZWFke2ZvbnQtc2l6ZToyMXB4fX0uc21hbGwsc21hbGx7Zm9udC1zaXplOjg1JX0ubWFyayxtYXJre3BhZGRpbmc6LjJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTN9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnl9LnRleHQtbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS50ZXh0LXVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnRleHQtY2FwaXRhbGl6ZXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfS50ZXh0LW11dGVke2NvbG9yOiM3Nzd9LnRleHQtcHJpbWFyeXtjb2xvcjojMzM3YWI3fWEudGV4dC1wcmltYXJ5OmZvY3VzLGEudGV4dC1wcmltYXJ5OmhvdmVye2NvbG9yOiMyODYwOTB9LnRleHQtc3VjY2Vzc3tjb2xvcjojM2M3NjNkfWEudGV4dC1zdWNjZXNzOmZvY3VzLGEudGV4dC1zdWNjZXNzOmhvdmVye2NvbG9yOiMyYjU0MmN9LnRleHQtaW5mb3tjb2xvcjojMzE3MDhmfWEudGV4dC1pbmZvOmZvY3VzLGEudGV4dC1pbmZvOmhvdmVye2NvbG9yOiMyNDUyNjl9LnRleHQtd2FybmluZ3tjb2xvcjojOGE2ZDNifWEudGV4dC13YXJuaW5nOmZvY3VzLGEudGV4dC13YXJuaW5nOmhvdmVye2NvbG9yOiM2NjUxMmN9LnRleHQtZGFuZ2Vye2NvbG9yOiNhOTQ0NDJ9YS50ZXh0LWRhbmdlcjpmb2N1cyxhLnRleHQtZGFuZ2VyOmhvdmVye2NvbG9yOiM4NDM1MzR9LmJnLXByaW1hcnl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMzdhYjd9YS5iZy1wcmltYXJ5OmZvY3VzLGEuYmctcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyODYwOTB9LmJnLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4fWEuYmctc3VjY2Vzczpmb2N1cyxhLmJnLXN1Y2Nlc3M6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzFlMmIzfS5iZy1pbmZve2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmN31hLmJnLWluZm86Zm9jdXMsYS5iZy1pbmZvOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2FmZDllZX0uYmctd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTN9YS5iZy13YXJuaW5nOmZvY3VzLGEuYmctd2FybmluZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmN2VjYjV9LmJnLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGV9YS5iZy1kYW5nZXI6Zm9jdXMsYS5iZy1kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRiOWI5fS5wYWdlLWhlYWRlcntwYWRkaW5nLWJvdHRvbTo5cHg7bWFyZ2luOjQwcHggMCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWV9b2wsdWx7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MTBweH1vbCBvbCxvbCB1bCx1bCBvbCx1bCB1bHttYXJnaW4tYm90dG9tOjB9Lmxpc3QtdW5zdHlsZWR7cGFkZGluZy1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5saXN0LWlubGluZXtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDotNXB4O2xpc3Qtc3R5bGU6bm9uZX0ubGlzdC1pbmxpbmU+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OjVweH1kbHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToyMHB4fWRkLGR0e2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDN9ZHR7Zm9udC13ZWlnaHQ6NzAwfWRke21hcmdpbi1sZWZ0OjB9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5kbC1ob3Jpem9udGFsIGR0e2Zsb2F0OmxlZnQ7d2lkdGg6MTYwcHg7b3ZlcmZsb3c6aGlkZGVuO2NsZWFyOmxlZnQ7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZGwtaG9yaXpvbnRhbCBkZHttYXJnaW4tbGVmdDoxODBweH19YWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSxhYmJyW3RpdGxlXXtjdXJzb3I6aGVscDtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzc3N30uaW5pdGlhbGlzbXtmb250LXNpemU6OTAlO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1ibG9ja3F1b3Rle3BhZGRpbmc6MTBweCAyMHB4O21hcmdpbjowIDAgMjBweDtmb250LXNpemU6MTcuNXB4O2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjZWVlfWJsb2NrcXVvdGUgb2w6bGFzdC1jaGlsZCxibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCxibG9ja3F1b3RlIHVsOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfWJsb2NrcXVvdGUgLnNtYWxsLGJsb2NrcXVvdGUgZm9vdGVyLGJsb2NrcXVvdGUgc21hbGx7ZGlzcGxheTpibG9jaztmb250LXNpemU6ODAlO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6Izc3N31ibG9ja3F1b3RlIC5zbWFsbDpiZWZvcmUsYmxvY2txdW90ZSBmb290ZXI6YmVmb3JlLGJsb2NrcXVvdGUgc21hbGw6YmVmb3Jle2NvbnRlbnQ6J1wyMDE0IFwwMEEwJ30uYmxvY2txdW90ZS1yZXZlcnNlLGJsb2NrcXVvdGUucHVsbC1yaWdodHtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjA7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkICNlZWU7Ym9yZGVyLWxlZnQ6MH0uYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDpiZWZvcmUsLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YmVmb3JlLC5ibG9ja3F1b3RlLXJldmVyc2Ugc21hbGw6YmVmb3JlLGJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YmVmb3JlLGJsb2NrcXVvdGUucHVsbC1yaWdodCBmb290ZXI6YmVmb3JlLGJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmV7Y29udGVudDonJ30uYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDphZnRlciwuYmxvY2txdW90ZS1yZXZlcnNlIGZvb3RlcjphZnRlciwuYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmFmdGVyLGJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YWZ0ZXIsYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjphZnRlcixibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXJ7Y29udGVudDonXDAwQTAgXDIwMTQnfWFkZHJlc3N7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDN9Y29kZSxrYmQscHJlLHNhbXB7Zm9udC1mYW1pbHk6TWVubG8sTW9uYWNvLENvbnNvbGFzLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlfWNvZGV7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZTo5MCU7Y29sb3I6I2M3MjU0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNmOWYyZjQ7Ym9yZGVyLXJhZGl1czo0cHh9a2Jke3BhZGRpbmc6MnB4IDRweDtmb250LXNpemU6OTAlO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6M3B4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSl9a2JkIGtiZHtwYWRkaW5nOjA7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6NzAwOy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX1wcmV7ZGlzcGxheTpibG9jaztwYWRkaW5nOjkuNXB4O21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO2NvbG9yOiMzMzM7d29yZC1icmVhazpicmVhay1hbGw7d29yZC13cmFwOmJyZWFrLXdvcmQ7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweH1wcmUgY29kZXtwYWRkaW5nOjA7Zm9udC1zaXplOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MH0ucHJlLXNjcm9sbGFibGV7bWF4LWhlaWdodDozNDBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGFpbmVye3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY29udGFpbmVye3dpZHRoOjc1MHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNvbnRhaW5lcnt3aWR0aDo5NzBweH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY29udGFpbmVye3dpZHRoOjExNzBweH19LmNvbnRhaW5lci1mbHVpZHtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30ucm93e21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweH0uY29sLWxnLTEsLmNvbC1sZy0xMCwuY29sLWxnLTExLC5jb2wtbGctMTIsLmNvbC1sZy0yLC5jb2wtbGctMywuY29sLWxnLTQsLmNvbC1sZy01LC5jb2wtbGctNiwuY29sLWxnLTcsLmNvbC1sZy04LC5jb2wtbGctOSwuY29sLW1kLTEsLmNvbC1tZC0xMCwuY29sLW1kLTExLC5jb2wtbWQtMTIsLmNvbC1tZC0yLC5jb2wtbWQtMywuY29sLW1kLTQsLmNvbC1tZC01LC5jb2wtbWQtNiwuY29sLW1kLTcsLmNvbC1tZC04LC5jb2wtbWQtOSwuY29sLXNtLTEsLmNvbC1zbS0xMCwuY29sLXNtLTExLC5jb2wtc20tMTIsLmNvbC1zbS0yLC5jb2wtc20tMywuY29sLXNtLTQsLmNvbC1zbS01LC5jb2wtc20tNiwuY29sLXNtLTcsLmNvbC1zbS04LC5jb2wtc20tOSwuY29sLXhzLTEsLmNvbC14cy0xMCwuY29sLXhzLTExLC5jb2wteHMtMTIsLmNvbC14cy0yLC5jb2wteHMtMywuY29sLXhzLTQsLmNvbC14cy01LC5jb2wteHMtNiwuY29sLXhzLTcsLmNvbC14cy04LC5jb2wteHMtOXtwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjFweDtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjE1cHh9LmNvbC14cy0xLC5jb2wteHMtMTAsLmNvbC14cy0xMSwuY29sLXhzLTEyLC5jb2wteHMtMiwuY29sLXhzLTMsLmNvbC14cy00LC5jb2wteHMtNSwuY29sLXhzLTYsLmNvbC14cy03LC5jb2wteHMtOCwuY29sLXhzLTl7ZmxvYXQ6bGVmdH0uY29sLXhzLTEye3dpZHRoOjEwMCV9LmNvbC14cy0xMXt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC14cy0xMHt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC14cy05e3dpZHRoOjc1JX0uY29sLXhzLTh7d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wteHMtN3t3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC14cy02e3dpZHRoOjUwJX0uY29sLXhzLTV7d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wteHMtNHt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC14cy0ze3dpZHRoOjI1JX0uY29sLXhzLTJ7d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wteHMtMXt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLXhzLXB1bGwtMTJ7cmlnaHQ6MTAwJX0uY29sLXhzLXB1bGwtMTF7cmlnaHQ6OTEuNjY2NjY2NjclfS5jb2wteHMtcHVsbC0xMHtyaWdodDo4My4zMzMzMzMzMyV9LmNvbC14cy1wdWxsLTl7cmlnaHQ6NzUlfS5jb2wteHMtcHVsbC04e3JpZ2h0OjY2LjY2NjY2NjY3JX0uY29sLXhzLXB1bGwtN3tyaWdodDo1OC4zMzMzMzMzMyV9LmNvbC14cy1wdWxsLTZ7cmlnaHQ6NTAlfS5jb2wteHMtcHVsbC01e3JpZ2h0OjQxLjY2NjY2NjY3JX0uY29sLXhzLXB1bGwtNHtyaWdodDozMy4zMzMzMzMzMyV9LmNvbC14cy1wdWxsLTN7cmlnaHQ6MjUlfS5jb2wteHMtcHVsbC0ye3JpZ2h0OjE2LjY2NjY2NjY3JX0uY29sLXhzLXB1bGwtMXtyaWdodDo4LjMzMzMzMzMzJX0uY29sLXhzLXB1bGwtMHtyaWdodDphdXRvfS5jb2wteHMtcHVzaC0xMntsZWZ0OjEwMCV9LmNvbC14cy1wdXNoLTExe2xlZnQ6OTEuNjY2NjY2NjclfS5jb2wteHMtcHVzaC0xMHtsZWZ0OjgzLjMzMzMzMzMzJX0uY29sLXhzLXB1c2gtOXtsZWZ0Ojc1JX0uY29sLXhzLXB1c2gtOHtsZWZ0OjY2LjY2NjY2NjY3JX0uY29sLXhzLXB1c2gtN3tsZWZ0OjU4LjMzMzMzMzMzJX0uY29sLXhzLXB1c2gtNntsZWZ0OjUwJX0uY29sLXhzLXB1c2gtNXtsZWZ0OjQxLjY2NjY2NjY3JX0uY29sLXhzLXB1c2gtNHtsZWZ0OjMzLjMzMzMzMzMzJX0uY29sLXhzLXB1c2gtM3tsZWZ0OjI1JX0uY29sLXhzLXB1c2gtMntsZWZ0OjE2LjY2NjY2NjY3JX0uY29sLXhzLXB1c2gtMXtsZWZ0OjguMzMzMzMzMzMlfS5jb2wteHMtcHVzaC0we2xlZnQ6YXV0b30uY29sLXhzLW9mZnNldC0xMnttYXJnaW4tbGVmdDoxMDAlfS5jb2wteHMtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uY29sLXhzLW9mZnNldC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMyV9LmNvbC14cy1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNvbC14cy1vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9LmNvbC14cy1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9LmNvbC14cy1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNvbC14cy1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9LmNvbC14cy1vZmZzZXQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9LmNvbC14cy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoyNSV9LmNvbC14cy1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9LmNvbC14cy1vZmZzZXQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzJX0uY29sLXhzLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jb2wtc20tMSwuY29sLXNtLTEwLC5jb2wtc20tMTEsLmNvbC1zbS0xMiwuY29sLXNtLTIsLmNvbC1zbS0zLC5jb2wtc20tNCwuY29sLXNtLTUsLmNvbC1zbS02LC5jb2wtc20tNywuY29sLXNtLTgsLmNvbC1zbS05e2Zsb2F0OmxlZnR9LmNvbC1zbS0xMnt3aWR0aDoxMDAlfS5jb2wtc20tMTF7d2lkdGg6OTEuNjY2NjY2NjclfS5jb2wtc20tMTB7d2lkdGg6ODMuMzMzMzMzMzMlfS5jb2wtc20tOXt3aWR0aDo3NSV9LmNvbC1zbS04e3dpZHRoOjY2LjY2NjY2NjY3JX0uY29sLXNtLTd7d2lkdGg6NTguMzMzMzMzMzMlfS5jb2wtc20tNnt3aWR0aDo1MCV9LmNvbC1zbS01e3dpZHRoOjQxLjY2NjY2NjY3JX0uY29sLXNtLTR7d2lkdGg6MzMuMzMzMzMzMzMlfS5jb2wtc20tM3t3aWR0aDoyNSV9LmNvbC1zbS0ye3dpZHRoOjE2LjY2NjY2NjY3JX0uY29sLXNtLTF7d2lkdGg6OC4zMzMzMzMzMyV9LmNvbC1zbS1wdWxsLTEye3JpZ2h0OjEwMCV9LmNvbC1zbS1wdWxsLTExe3JpZ2h0OjkxLjY2NjY2NjY3JX0uY29sLXNtLXB1bGwtMTB7cmlnaHQ6ODMuMzMzMzMzMzMlfS5jb2wtc20tcHVsbC05e3JpZ2h0Ojc1JX0uY29sLXNtLXB1bGwtOHtyaWdodDo2Ni42NjY2NjY2NyV9LmNvbC1zbS1wdWxsLTd7cmlnaHQ6NTguMzMzMzMzMzMlfS5jb2wtc20tcHVsbC02e3JpZ2h0OjUwJX0uY29sLXNtLXB1bGwtNXtyaWdodDo0MS42NjY2NjY2NyV9LmNvbC1zbS1wdWxsLTR7cmlnaHQ6MzMuMzMzMzMzMzMlfS5jb2wtc20tcHVsbC0ze3JpZ2h0OjI1JX0uY29sLXNtLXB1bGwtMntyaWdodDoxNi42NjY2NjY2NyV9LmNvbC1zbS1wdWxsLTF7cmlnaHQ6OC4zMzMzMzMzMyV9LmNvbC1zbS1wdWxsLTB7cmlnaHQ6YXV0b30uY29sLXNtLXB1c2gtMTJ7bGVmdDoxMDAlfS5jb2wtc20tcHVzaC0xMXtsZWZ0OjkxLjY2NjY2NjY3JX0uY29sLXNtLXB1c2gtMTB7bGVmdDo4My4zMzMzMzMzMyV9LmNvbC1zbS1wdXNoLTl7bGVmdDo3NSV9LmNvbC1zbS1wdXNoLTh7bGVmdDo2Ni42NjY2NjY2NyV9LmNvbC1zbS1wdXNoLTd7bGVmdDo1OC4zMzMzMzMzMyV9LmNvbC1zbS1wdXNoLTZ7bGVmdDo1MCV9LmNvbC1zbS1wdXNoLTV7bGVmdDo0MS42NjY2NjY2NyV9LmNvbC1zbS1wdXNoLTR7bGVmdDozMy4zMzMzMzMzMyV9LmNvbC1zbS1wdXNoLTN7bGVmdDoyNSV9LmNvbC1zbS1wdXNoLTJ7bGVmdDoxNi42NjY2NjY2NyV9LmNvbC1zbS1wdXNoLTF7bGVmdDo4LjMzMzMzMzMzJX0uY29sLXNtLXB1c2gtMHtsZWZ0OmF1dG99LmNvbC1zbS1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6MTAwJX0uY29sLXNtLW9mZnNldC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NyV9LmNvbC1zbS1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMlfS5jb2wtc20tb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6NzUlfS5jb2wtc20tb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjclfS5jb2wtc20tb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMlfS5jb2wtc20tb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6NTAlfS5jb2wtc20tb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjclfS5jb2wtc20tb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMlfS5jb2wtc20tb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MjUlfS5jb2wtc20tb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjclfS5jb2wtc20tb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMyV9LmNvbC1zbS1vZmZzZXQtMHttYXJnaW4tbGVmdDowfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNvbC1tZC0xLC5jb2wtbWQtMTAsLmNvbC1tZC0xMSwuY29sLW1kLTEyLC5jb2wtbWQtMiwuY29sLW1kLTMsLmNvbC1tZC00LC5jb2wtbWQtNSwuY29sLW1kLTYsLmNvbC1tZC03LC5jb2wtbWQtOCwuY29sLW1kLTl7ZmxvYXQ6bGVmdH0uY29sLW1kLTEye3dpZHRoOjEwMCV9LmNvbC1tZC0xMXt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC1tZC0xMHt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC1tZC05e3dpZHRoOjc1JX0uY29sLW1kLTh7d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wtbWQtN3t3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC1tZC02e3dpZHRoOjUwJX0uY29sLW1kLTV7d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wtbWQtNHt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC1tZC0ze3dpZHRoOjI1JX0uY29sLW1kLTJ7d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wtbWQtMXt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLW1kLXB1bGwtMTJ7cmlnaHQ6MTAwJX0uY29sLW1kLXB1bGwtMTF7cmlnaHQ6OTEuNjY2NjY2NjclfS5jb2wtbWQtcHVsbC0xMHtyaWdodDo4My4zMzMzMzMzMyV9LmNvbC1tZC1wdWxsLTl7cmlnaHQ6NzUlfS5jb2wtbWQtcHVsbC04e3JpZ2h0OjY2LjY2NjY2NjY3JX0uY29sLW1kLXB1bGwtN3tyaWdodDo1OC4zMzMzMzMzMyV9LmNvbC1tZC1wdWxsLTZ7cmlnaHQ6NTAlfS5jb2wtbWQtcHVsbC01e3JpZ2h0OjQxLjY2NjY2NjY3JX0uY29sLW1kLXB1bGwtNHtyaWdodDozMy4zMzMzMzMzMyV9LmNvbC1tZC1wdWxsLTN7cmlnaHQ6MjUlfS5jb2wtbWQtcHVsbC0ye3JpZ2h0OjE2LjY2NjY2NjY3JX0uY29sLW1kLXB1bGwtMXtyaWdodDo4LjMzMzMzMzMzJX0uY29sLW1kLXB1bGwtMHtyaWdodDphdXRvfS5jb2wtbWQtcHVzaC0xMntsZWZ0OjEwMCV9LmNvbC1tZC1wdXNoLTExe2xlZnQ6OTEuNjY2NjY2NjclfS5jb2wtbWQtcHVzaC0xMHtsZWZ0OjgzLjMzMzMzMzMzJX0uY29sLW1kLXB1c2gtOXtsZWZ0Ojc1JX0uY29sLW1kLXB1c2gtOHtsZWZ0OjY2LjY2NjY2NjY3JX0uY29sLW1kLXB1c2gtN3tsZWZ0OjU4LjMzMzMzMzMzJX0uY29sLW1kLXB1c2gtNntsZWZ0OjUwJX0uY29sLW1kLXB1c2gtNXtsZWZ0OjQxLjY2NjY2NjY3JX0uY29sLW1kLXB1c2gtNHtsZWZ0OjMzLjMzMzMzMzMzJX0uY29sLW1kLXB1c2gtM3tsZWZ0OjI1JX0uY29sLW1kLXB1c2gtMntsZWZ0OjE2LjY2NjY2NjY3JX0uY29sLW1kLXB1c2gtMXtsZWZ0OjguMzMzMzMzMzMlfS5jb2wtbWQtcHVzaC0we2xlZnQ6YXV0b30uY29sLW1kLW9mZnNldC0xMnttYXJnaW4tbGVmdDoxMDAlfS5jb2wtbWQtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uY29sLW1kLW9mZnNldC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMyV9LmNvbC1tZC1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNvbC1tZC1vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9LmNvbC1tZC1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9LmNvbC1tZC1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNvbC1tZC1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9LmNvbC1tZC1vZmZzZXQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9LmNvbC1tZC1vZmZzZXQtM3ttYXJnaW4tbGVmdDoyNSV9LmNvbC1tZC1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9LmNvbC1tZC1vZmZzZXQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzJX0uY29sLW1kLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNvbC1sZy0xLC5jb2wtbGctMTAsLmNvbC1sZy0xMSwuY29sLWxnLTEyLC5jb2wtbGctMiwuY29sLWxnLTMsLmNvbC1sZy00LC5jb2wtbGctNSwuY29sLWxnLTYsLmNvbC1sZy03LC5jb2wtbGctOCwuY29sLWxnLTl7ZmxvYXQ6bGVmdH0uY29sLWxnLTEye3dpZHRoOjEwMCV9LmNvbC1sZy0xMXt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC1sZy0xMHt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC1sZy05e3dpZHRoOjc1JX0uY29sLWxnLTh7d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wtbGctN3t3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC1sZy02e3dpZHRoOjUwJX0uY29sLWxnLTV7d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wtbGctNHt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC1sZy0ze3dpZHRoOjI1JX0uY29sLWxnLTJ7d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wtbGctMXt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLWxnLXB1bGwtMTJ7cmlnaHQ6MTAwJX0uY29sLWxnLXB1bGwtMTF7cmlnaHQ6OTEuNjY2NjY2NjclfS5jb2wtbGctcHVsbC0xMHtyaWdodDo4My4zMzMzMzMzMyV9LmNvbC1sZy1wdWxsLTl7cmlnaHQ6NzUlfS5jb2wtbGctcHVsbC04e3JpZ2h0OjY2LjY2NjY2NjY3JX0uY29sLWxnLXB1bGwtN3tyaWdodDo1OC4zMzMzMzMzMyV9LmNvbC1sZy1wdWxsLTZ7cmlnaHQ6NTAlfS5jb2wtbGctcHVsbC01e3JpZ2h0OjQxLjY2NjY2NjY3JX0uY29sLWxnLXB1bGwtNHtyaWdodDozMy4zMzMzMzMzMyV9LmNvbC1sZy1wdWxsLTN7cmlnaHQ6MjUlfS5jb2wtbGctcHVsbC0ye3JpZ2h0OjE2LjY2NjY2NjY3JX0uY29sLWxnLXB1bGwtMXtyaWdodDo4LjMzMzMzMzMzJX0uY29sLWxnLXB1bGwtMHtyaWdodDphdXRvfS5jb2wtbGctcHVzaC0xMntsZWZ0OjEwMCV9LmNvbC1sZy1wdXNoLTExe2xlZnQ6OTEuNjY2NjY2NjclfS5jb2wtbGctcHVzaC0xMHtsZWZ0OjgzLjMzMzMzMzMzJX0uY29sLWxnLXB1c2gtOXtsZWZ0Ojc1JX0uY29sLWxnLXB1c2gtOHtsZWZ0OjY2LjY2NjY2NjY3JX0uY29sLWxnLXB1c2gtN3tsZWZ0OjU4LjMzMzMzMzMzJX0uY29sLWxnLXB1c2gtNntsZWZ0OjUwJX0uY29sLWxnLXB1c2gtNXtsZWZ0OjQxLjY2NjY2NjY3JX0uY29sLWxnLXB1c2gtNHtsZWZ0OjMzLjMzMzMzMzMzJX0uY29sLWxnLXB1c2gtM3tsZWZ0OjI1JX0uY29sLWxnLXB1c2gtMntsZWZ0OjE2LjY2NjY2NjY3JX0uY29sLWxnLXB1c2gtMXtsZWZ0OjguMzMzMzMzMzMlfS5jb2wtbGctcHVzaC0we2xlZnQ6YXV0b30uY29sLWxnLW9mZnNldC0xMnttYXJnaW4tbGVmdDoxMDAlfS5jb2wtbGctb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uY29sLWxnLW9mZnNldC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMyV9LmNvbC1sZy1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNvbC1sZy1vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9LmNvbC1sZy1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9LmNvbC1sZy1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNvbC1sZy1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9LmNvbC1sZy1vZmZzZXQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9LmNvbC1sZy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoyNSV9LmNvbC1sZy1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9LmNvbC1sZy1vZmZzZXQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzJX0uY29sLWxnLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9fXRhYmxle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Y2FwdGlvbntwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O2NvbG9yOiM3Nzc7dGV4dC1hbGlnbjpsZWZ0fXRoe3RleHQtYWxpZ246bGVmdH0udGFibGV7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjIwcHh9LnRhYmxlPnRib2R5PnRyPnRkLC50YWJsZT50Ym9keT50cj50aCwudGFibGU+dGZvb3Q+dHI+dGQsLnRhYmxlPnRmb290PnRyPnRoLC50YWJsZT50aGVhZD50cj50ZCwudGFibGU+dGhlYWQ+dHI+dGh7cGFkZGluZzo4cHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mzt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udGFibGU+dGhlYWQ+dHI+dGh7dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNkZGR9LnRhYmxlPmNhcHRpb24rdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsLnRhYmxlPmNhcHRpb24rdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGgsLnRhYmxlPmNvbGdyb3VwK3RoZWFkPnRyOmZpcnN0LWNoaWxkPnRkLC50YWJsZT5jb2xncm91cCt0aGVhZD50cjpmaXJzdC1jaGlsZD50aCwudGFibGU+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQ+dGQsLnRhYmxlPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkPnRoe2JvcmRlci10b3A6MH0udGFibGU+dGJvZHkrdGJvZHl7Ym9yZGVyLXRvcDoycHggc29saWQgI2RkZH0udGFibGUgLnRhYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZn0udGFibGUtY29uZGVuc2VkPnRib2R5PnRyPnRkLC50YWJsZS1jb25kZW5zZWQ+dGJvZHk+dHI+dGgsLnRhYmxlLWNvbmRlbnNlZD50Zm9vdD50cj50ZCwudGFibGUtY29uZGVuc2VkPnRmb290PnRyPnRoLC50YWJsZS1jb25kZW5zZWQ+dGhlYWQ+dHI+dGQsLnRhYmxlLWNvbmRlbnNlZD50aGVhZD50cj50aHtwYWRkaW5nOjVweH0udGFibGUtYm9yZGVyZWR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkfS50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZCwudGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGgsLnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkLC50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aCwudGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQsLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoe2JvcmRlcjoxcHggc29saWQgI2RkZH0udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQsLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoe2JvcmRlci1ib3R0b20td2lkdGg6MnB4fS50YWJsZS1zdHJpcGVkPnRib2R5PnRyOm50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5fS50YWJsZS1ob3Zlcj50Ym9keT50cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9dGFibGUgY29sW2NsYXNzKj1jb2wtXXtwb3NpdGlvbjpzdGF0aWM7ZGlzcGxheTp0YWJsZS1jb2x1bW47ZmxvYXQ6bm9uZX10YWJsZSB0ZFtjbGFzcyo9Y29sLV0sdGFibGUgdGhbY2xhc3MqPWNvbC1de3Bvc2l0aW9uOnN0YXRpYztkaXNwbGF5OnRhYmxlLWNlbGw7ZmxvYXQ6bm9uZX0udGFibGU+dGJvZHk+dHIuYWN0aXZlPnRkLC50YWJsZT50Ym9keT50ci5hY3RpdmU+dGgsLnRhYmxlPnRib2R5PnRyPnRkLmFjdGl2ZSwudGFibGU+dGJvZHk+dHI+dGguYWN0aXZlLC50YWJsZT50Zm9vdD50ci5hY3RpdmU+dGQsLnRhYmxlPnRmb290PnRyLmFjdGl2ZT50aCwudGFibGU+dGZvb3Q+dHI+dGQuYWN0aXZlLC50YWJsZT50Zm9vdD50cj50aC5hY3RpdmUsLnRhYmxlPnRoZWFkPnRyLmFjdGl2ZT50ZCwudGFibGU+dGhlYWQ+dHIuYWN0aXZlPnRoLC50YWJsZT50aGVhZD50cj50ZC5hY3RpdmUsLnRhYmxlPnRoZWFkPnRyPnRoLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LnRhYmxlLWhvdmVyPnRib2R5PnRyLmFjdGl2ZTpob3Zlcj50ZCwudGFibGUtaG92ZXI+dGJvZHk+dHIuYWN0aXZlOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uYWN0aXZlLC50YWJsZS1ob3Zlcj50Ym9keT50cj50ZC5hY3RpdmU6aG92ZXIsLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRoLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTh9LnRhYmxlPnRib2R5PnRyLnN1Y2Nlc3M+dGQsLnRhYmxlPnRib2R5PnRyLnN1Y2Nlc3M+dGgsLnRhYmxlPnRib2R5PnRyPnRkLnN1Y2Nlc3MsLnRhYmxlPnRib2R5PnRyPnRoLnN1Y2Nlc3MsLnRhYmxlPnRmb290PnRyLnN1Y2Nlc3M+dGQsLnRhYmxlPnRmb290PnRyLnN1Y2Nlc3M+dGgsLnRhYmxlPnRmb290PnRyPnRkLnN1Y2Nlc3MsLnRhYmxlPnRmb290PnRyPnRoLnN1Y2Nlc3MsLnRhYmxlPnRoZWFkPnRyLnN1Y2Nlc3M+dGQsLnRhYmxlPnRoZWFkPnRyLnN1Y2Nlc3M+dGgsLnRhYmxlPnRoZWFkPnRyPnRkLnN1Y2Nlc3MsLnRhYmxlPnRoZWFkPnRyPnRoLnN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4fS50YWJsZS1ob3Zlcj50Ym9keT50ci5zdWNjZXNzOmhvdmVyPnRkLC50YWJsZS1ob3Zlcj50Ym9keT50ci5zdWNjZXNzOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uc3VjY2VzcywudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQuc3VjY2Vzczpob3ZlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguc3VjY2Vzczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkMGU5YzZ9LnRhYmxlPnRib2R5PnRyLmluZm8+dGQsLnRhYmxlPnRib2R5PnRyLmluZm8+dGgsLnRhYmxlPnRib2R5PnRyPnRkLmluZm8sLnRhYmxlPnRib2R5PnRyPnRoLmluZm8sLnRhYmxlPnRmb290PnRyLmluZm8+dGQsLnRhYmxlPnRmb290PnRyLmluZm8+dGgsLnRhYmxlPnRmb290PnRyPnRkLmluZm8sLnRhYmxlPnRmb290PnRyPnRoLmluZm8sLnRhYmxlPnRoZWFkPnRyLmluZm8+dGQsLnRhYmxlPnRoZWFkPnRyLmluZm8+dGgsLnRhYmxlPnRoZWFkPnRyPnRkLmluZm8sLnRhYmxlPnRoZWFkPnRyPnRoLmluZm97YmFja2dyb3VuZC1jb2xvcjojZDllZGY3fS50YWJsZS1ob3Zlcj50Ym9keT50ci5pbmZvOmhvdmVyPnRkLC50YWJsZS1ob3Zlcj50Ym9keT50ci5pbmZvOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uaW5mbywudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQuaW5mbzpob3ZlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguaW5mbzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNGUzZjN9LnRhYmxlPnRib2R5PnRyLndhcm5pbmc+dGQsLnRhYmxlPnRib2R5PnRyLndhcm5pbmc+dGgsLnRhYmxlPnRib2R5PnRyPnRkLndhcm5pbmcsLnRhYmxlPnRib2R5PnRyPnRoLndhcm5pbmcsLnRhYmxlPnRmb290PnRyLndhcm5pbmc+dGQsLnRhYmxlPnRmb290PnRyLndhcm5pbmc+dGgsLnRhYmxlPnRmb290PnRyPnRkLndhcm5pbmcsLnRhYmxlPnRmb290PnRyPnRoLndhcm5pbmcsLnRhYmxlPnRoZWFkPnRyLndhcm5pbmc+dGQsLnRhYmxlPnRoZWFkPnRyLndhcm5pbmc+dGgsLnRhYmxlPnRoZWFkPnRyPnRkLndhcm5pbmcsLnRhYmxlPnRoZWFkPnRyPnRoLndhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzfS50YWJsZS1ob3Zlcj50Ym9keT50ci53YXJuaW5nOmhvdmVyPnRkLC50YWJsZS1ob3Zlcj50Ym9keT50ci53YXJuaW5nOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4ud2FybmluZywudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQud2FybmluZzpob3ZlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGgud2FybmluZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWYyY2N9LnRhYmxlPnRib2R5PnRyLmRhbmdlcj50ZCwudGFibGU+dGJvZHk+dHIuZGFuZ2VyPnRoLC50YWJsZT50Ym9keT50cj50ZC5kYW5nZXIsLnRhYmxlPnRib2R5PnRyPnRoLmRhbmdlciwudGFibGU+dGZvb3Q+dHIuZGFuZ2VyPnRkLC50YWJsZT50Zm9vdD50ci5kYW5nZXI+dGgsLnRhYmxlPnRmb290PnRyPnRkLmRhbmdlciwudGFibGU+dGZvb3Q+dHI+dGguZGFuZ2VyLC50YWJsZT50aGVhZD50ci5kYW5nZXI+dGQsLnRhYmxlPnRoZWFkPnRyLmRhbmdlcj50aCwudGFibGU+dGhlYWQ+dHI+dGQuZGFuZ2VyLC50YWJsZT50aGVhZD50cj50aC5kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlfS50YWJsZS1ob3Zlcj50Ym9keT50ci5kYW5nZXI6aG92ZXI+dGQsLnRhYmxlLWhvdmVyPnRib2R5PnRyLmRhbmdlcjpob3Zlcj50aCwudGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXI+LmRhbmdlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQuZGFuZ2VyOmhvdmVyLC50YWJsZS1ob3Zlcj50Ym9keT50cj50aC5kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWJjY2NjfS50YWJsZS1yZXNwb25zaXZle21pbi1oZWlnaHQ6LjAxJTtvdmVyZmxvdy14OmF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjdweCl7LnRhYmxlLXJlc3BvbnNpdmV7d2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjE1cHg7b3ZlcmZsb3cteTpoaWRkZW47LW1zLW92ZXJmbG93LXN0eWxlOi1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtib3JkZXI6MXB4IHNvbGlkICNkZGR9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxle21hcmdpbi1ib3R0b206MH0udGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGJvZHk+dHI+dGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRib2R5PnRyPnRoLC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50Zm9vdD50cj50ZCwudGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGZvb3Q+dHI+dGgsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRoZWFkPnRyPnRkLC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50aGVhZD50cj50aHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVke2JvcmRlcjowfS50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpmaXJzdC1jaGlsZCwudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpmaXJzdC1jaGlsZCwudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0OjB9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjB9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGh7Ym9yZGVyLWJvdHRvbTowfX1maWVsZHNldHttaW4td2lkdGg6MDtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToyMXB4O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6IzMzMztib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDoxMDAlO21hcmdpbi1ib3R0b206NXB4O2ZvbnQtd2VpZ2h0OjcwMH1pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fWlucHV0W3R5cGU9Y2hlY2tib3hdLGlucHV0W3R5cGU9cmFkaW9de21hcmdpbjo0cHggMCAwO21hcmdpbi10b3A6MXB4XDk7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9ZmlsZV17ZGlzcGxheTpibG9ja31pbnB1dFt0eXBlPXJhbmdlXXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9c2VsZWN0W211bHRpcGxlXSxzZWxlY3Rbc2l6ZV17aGVpZ2h0OmF1dG99aW5wdXRbdHlwZT1maWxlXTpmb2N1cyxpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1cyxpbnB1dFt0eXBlPXJhZGlvXTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9b3V0cHV0e2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6N3B4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6IzU1NX0uZm9ybS1jb250cm9se2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MzRweDtwYWRkaW5nOjZweCAxMnB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpub25lO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsLXdlYmtpdC1ib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7LW8tdHJhbnNpdGlvbjpib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cyxib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cyxib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXN9LmZvcm0tY29udHJvbDpmb2N1c3tib3JkZXItY29sb3I6IzY2YWZlOTtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLDAgMCA4cHggcmdiYSgxMDIsMTc1LDIzMywuNik7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwwIDAgOHB4IHJnYmEoMTAyLDE3NSwyMzMsLjYpfS5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OTtvcGFjaXR5OjF9LmZvcm0tY29udHJvbDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0uZm9ybS1jb250cm9sOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LmZvcm0tY29udHJvbDo6LW1zLWV4cGFuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLC5mb3JtLWNvbnRyb2xbcmVhZG9ubHldLGZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9se2JhY2tncm91bmQtY29sb3I6I2VlZTtvcGFjaXR5OjF9LmZvcm0tY29udHJvbFtkaXNhYmxlZF0sZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2x7Y3Vyc29yOm5vdC1hbGxvd2VkfXRleHRhcmVhLmZvcm0tY29udHJvbHtoZWlnaHQ6YXV0b31pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXtpbnB1dFt0eXBlPWRhdGVdLmZvcm0tY29udHJvbCxpbnB1dFt0eXBlPXRpbWVdLmZvcm0tY29udHJvbCxpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXS5mb3JtLWNvbnRyb2wsaW5wdXRbdHlwZT1tb250aF0uZm9ybS1jb250cm9se2xpbmUtaGVpZ2h0OjM0cHh9LmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9ZGF0ZV0sLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9dGltZV0sLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPW1vbnRoXSxpbnB1dFt0eXBlPWRhdGVdLmlucHV0LXNtLGlucHV0W3R5cGU9dGltZV0uaW5wdXQtc20saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0uaW5wdXQtc20saW5wdXRbdHlwZT1tb250aF0uaW5wdXQtc217bGluZS1oZWlnaHQ6MzBweH0uaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1kYXRlXSwuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT10aW1lXSwuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0sLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9bW9udGhdLGlucHV0W3R5cGU9ZGF0ZV0uaW5wdXQtbGcsaW5wdXRbdHlwZT10aW1lXS5pbnB1dC1sZyxpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXS5pbnB1dC1sZyxpbnB1dFt0eXBlPW1vbnRoXS5pbnB1dC1sZ3tsaW5lLWhlaWdodDo0NnB4fX0uZm9ybS1ncm91cHttYXJnaW4tYm90dG9tOjE1cHh9LmNoZWNrYm94LC5yYWRpb3twb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjEwcHh9LmNoZWNrYm94IGxhYmVsLC5yYWRpbyBsYWJlbHttaW4taGVpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtd2VpZ2h0OjQwMDtjdXJzb3I6cG9pbnRlcn0uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwucmFkaW8gaW5wdXRbdHlwZT1yYWRpb10sLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tdG9wOjRweFw5O21hcmdpbi1sZWZ0Oi0yMHB4fS5jaGVja2JveCsuY2hlY2tib3gsLnJhZGlvKy5yYWRpb3ttYXJnaW4tdG9wOi01cHh9LmNoZWNrYm94LWlubGluZSwucmFkaW8taW5saW5le3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDoyMHB4O21hcmdpbi1ib3R0b206MDtmb250LXdlaWdodDo0MDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyfS5jaGVja2JveC1pbmxpbmUrLmNoZWNrYm94LWlubGluZSwucmFkaW8taW5saW5lKy5yYWRpby1pbmxpbmV7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEwcHh9ZmllbGRzZXRbZGlzYWJsZWRdIGlucHV0W3R5cGU9Y2hlY2tib3hdLGZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPXJhZGlvXSxpbnB1dFt0eXBlPWNoZWNrYm94XS5kaXNhYmxlZCxpbnB1dFt0eXBlPWNoZWNrYm94XVtkaXNhYmxlZF0saW5wdXRbdHlwZT1yYWRpb10uZGlzYWJsZWQsaW5wdXRbdHlwZT1yYWRpb11bZGlzYWJsZWRde2N1cnNvcjpub3QtYWxsb3dlZH0uY2hlY2tib3gtaW5saW5lLmRpc2FibGVkLC5yYWRpby1pbmxpbmUuZGlzYWJsZWQsZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveC1pbmxpbmUsZmllbGRzZXRbZGlzYWJsZWRdIC5yYWRpby1pbmxpbmV7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVja2JveC5kaXNhYmxlZCBsYWJlbCwucmFkaW8uZGlzYWJsZWQgbGFiZWwsZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveCBsYWJlbCxmaWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZm9ybS1jb250cm9sLXN0YXRpY3ttaW4taGVpZ2h0OjM0cHg7cGFkZGluZy10b3A6N3B4O3BhZGRpbmctYm90dG9tOjdweDttYXJnaW4tYm90dG9tOjB9LmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtbGcsLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtc217cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowfS5pbnB1dC1zbXtoZWlnaHQ6MzBweDtwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTtib3JkZXItcmFkaXVzOjNweH1zZWxlY3QuaW5wdXQtc217aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweH1zZWxlY3RbbXVsdGlwbGVdLmlucHV0LXNtLHRleHRhcmVhLmlucHV0LXNte2hlaWdodDphdXRvfS5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2x7aGVpZ2h0OjMwcHg7cGFkZGluZzo1cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjU7Ym9yZGVyLXJhZGl1czozcHh9LmZvcm0tZ3JvdXAtc20gc2VsZWN0LmZvcm0tY29udHJvbHtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4fS5mb3JtLWdyb3VwLXNtIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sLC5mb3JtLWdyb3VwLXNtIHRleHRhcmVhLmZvcm0tY29udHJvbHtoZWlnaHQ6YXV0b30uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sLXN0YXRpY3toZWlnaHQ6MzBweDttaW4taGVpZ2h0OjMycHg7cGFkZGluZzo2cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjV9LmlucHV0LWxne2hlaWdodDo0NnB4O3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzMzMzMzMztib3JkZXItcmFkaXVzOjZweH1zZWxlY3QuaW5wdXQtbGd7aGVpZ2h0OjQ2cHg7bGluZS1oZWlnaHQ6NDZweH1zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWxnLHRleHRhcmVhLmlucHV0LWxne2hlaWdodDphdXRvfS5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2x7aGVpZ2h0OjQ2cHg7cGFkZGluZzoxMHB4IDE2cHg7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MS4zMzMzMzMzO2JvcmRlci1yYWRpdXM6NnB4fS5mb3JtLWdyb3VwLWxnIHNlbGVjdC5mb3JtLWNvbnRyb2x7aGVpZ2h0OjQ2cHg7bGluZS1oZWlnaHQ6NDZweH0uZm9ybS1ncm91cC1sZyBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCwuZm9ybS1ncm91cC1sZyB0ZXh0YXJlYS5mb3JtLWNvbnRyb2x7aGVpZ2h0OmF1dG99LmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbC1zdGF0aWN7aGVpZ2h0OjQ2cHg7bWluLWhlaWdodDozOHB4O3BhZGRpbmc6MTFweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzMzMzMzM30uaGFzLWZlZWRiYWNre3Bvc2l0aW9uOnJlbGF0aXZlfS5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbHtwYWRkaW5nLXJpZ2h0OjQyLjVweH0uZm9ybS1jb250cm9sLWZlZWRiYWNre3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7ei1pbmRleDoyO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MzRweDtoZWlnaHQ6MzRweDtsaW5lLWhlaWdodDozNHB4O3RleHQtYWxpZ246Y2VudGVyO3BvaW50ZXItZXZlbnRzOm5vbmV9LmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCsuZm9ybS1jb250cm9sLWZlZWRiYWNrLC5pbnB1dC1ncm91cC1sZysuZm9ybS1jb250cm9sLWZlZWRiYWNrLC5pbnB1dC1sZysuZm9ybS1jb250cm9sLWZlZWRiYWNre3dpZHRoOjQ2cHg7aGVpZ2h0OjQ2cHg7bGluZS1oZWlnaHQ6NDZweH0uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssLmlucHV0LWdyb3VwLXNtKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssLmlucHV0LXNtKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4fS5oYXMtc3VjY2VzcyAuY2hlY2tib3gsLmhhcy1zdWNjZXNzIC5jaGVja2JveC1pbmxpbmUsLmhhcy1zdWNjZXNzIC5jb250cm9sLWxhYmVsLC5oYXMtc3VjY2VzcyAuaGVscC1ibG9jaywuaGFzLXN1Y2Nlc3MgLnJhZGlvLC5oYXMtc3VjY2VzcyAucmFkaW8taW5saW5lLC5oYXMtc3VjY2Vzcy5jaGVja2JveCBsYWJlbCwuaGFzLXN1Y2Nlc3MuY2hlY2tib3gtaW5saW5lIGxhYmVsLC5oYXMtc3VjY2Vzcy5yYWRpbyBsYWJlbCwuaGFzLXN1Y2Nlc3MucmFkaW8taW5saW5lIGxhYmVse2NvbG9yOiMzYzc2M2R9Lmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2x7Ym9yZGVyLWNvbG9yOiMzYzc2M2Q7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSl9Lmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2w6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyYjU0MmM7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLDAgMCA2cHggIzY3YjE2ODtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLDAgMCA2cHggIzY3YjE2OH0uaGFzLXN1Y2Nlc3MgLmlucHV0LWdyb3VwLWFkZG9ue2NvbG9yOiMzYzc2M2Q7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojM2M3NjNkfS5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sLWZlZWRiYWNre2NvbG9yOiMzYzc2M2R9Lmhhcy13YXJuaW5nIC5jaGVja2JveCwuaGFzLXdhcm5pbmcgLmNoZWNrYm94LWlubGluZSwuaGFzLXdhcm5pbmcgLmNvbnRyb2wtbGFiZWwsLmhhcy13YXJuaW5nIC5oZWxwLWJsb2NrLC5oYXMtd2FybmluZyAucmFkaW8sLmhhcy13YXJuaW5nIC5yYWRpby1pbmxpbmUsLmhhcy13YXJuaW5nLmNoZWNrYm94IGxhYmVsLC5oYXMtd2FybmluZy5jaGVja2JveC1pbmxpbmUgbGFiZWwsLmhhcy13YXJuaW5nLnJhZGlvIGxhYmVsLC5oYXMtd2FybmluZy5yYWRpby1pbmxpbmUgbGFiZWx7Y29sb3I6IzhhNmQzYn0uaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbHtib3JkZXItY29sb3I6IzhhNmQzYjstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KX0uaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbDpmb2N1c3tib3JkZXItY29sb3I6IzY2NTEyYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksMCAwIDZweCAjYzBhMTZiO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksMCAwIDZweCAjYzBhMTZifS5oYXMtd2FybmluZyAuaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6IzhhNmQzYjtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTM7Ym9yZGVyLWNvbG9yOiM4YTZkM2J9Lmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7Y29sb3I6IzhhNmQzYn0uaGFzLWVycm9yIC5jaGVja2JveCwuaGFzLWVycm9yIC5jaGVja2JveC1pbmxpbmUsLmhhcy1lcnJvciAuY29udHJvbC1sYWJlbCwuaGFzLWVycm9yIC5oZWxwLWJsb2NrLC5oYXMtZXJyb3IgLnJhZGlvLC5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSwuaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLC5oYXMtZXJyb3IuY2hlY2tib3gtaW5saW5lIGxhYmVsLC5oYXMtZXJyb3IucmFkaW8gbGFiZWwsLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWx7Y29sb3I6I2E5NDQ0Mn0uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2x7Ym9yZGVyLWNvbG9yOiNhOTQ0NDI7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSl9Lmhhcy1lcnJvciAuZm9ybS1jb250cm9sOmZvY3Vze2JvcmRlci1jb2xvcjojODQzNTM0Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwwIDAgNnB4ICNjZTg0ODM7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwwIDAgNnB4ICNjZTg0ODN9Lmhhcy1lcnJvciAuaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6I2E5NDQ0MjtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNhOTQ0NDJ9Lmhhcy1lcnJvciAuZm9ybS1jb250cm9sLWZlZWRiYWNre2NvbG9yOiNhOTQ0NDJ9Lmhhcy1mZWVkYmFjayBsYWJlbH4uZm9ybS1jb250cm9sLWZlZWRiYWNre3RvcDoyNXB4fS5oYXMtZmVlZGJhY2sgbGFiZWwuc3Itb25seX4uZm9ybS1jb250cm9sLWZlZWRiYWNre3RvcDowfS5oZWxwLWJsb2Nre2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbToxMHB4O2NvbG9yOiM3MzczNzN9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5mb3JtLWlubGluZSAuZm9ybS1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLWlubGluZSAuZm9ybS1jb250cm9se2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG87dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLWlubGluZSAuZm9ybS1jb250cm9sLXN0YXRpY3tkaXNwbGF5OmlubGluZS1ibG9ja30uZm9ybS1pbmxpbmUgLmlucHV0LWdyb3Vwe2Rpc3BsYXk6aW5saW5lLXRhYmxlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wsLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24sLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRue3dpZHRoOmF1dG99LmZvcm0taW5saW5lIC5pbnB1dC1ncm91cD4uZm9ybS1jb250cm9se3dpZHRoOjEwMCV9LmZvcm0taW5saW5lIC5jb250cm9sLWxhYmVse21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmZvcm0taW5saW5lIC5jaGVja2JveCwuZm9ybS1pbmxpbmUgLnJhZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLWlubGluZSAuY2hlY2tib3ggbGFiZWwsLmZvcm0taW5saW5lIC5yYWRpbyBsYWJlbHtwYWRkaW5nLWxlZnQ6MH0uZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdLC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT1yYWRpb117cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWxlZnQ6MH0uZm9ybS1pbmxpbmUgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNre3RvcDowfX0uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCwuZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveC1pbmxpbmUsLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sLmZvcm0taG9yaXpvbnRhbCAucmFkaW8taW5saW5le3BhZGRpbmctdG9wOjdweDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfS5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LC5mb3JtLWhvcml6b250YWwgLnJhZGlve21pbi1oZWlnaHQ6MjdweH0uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3Vwe21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbHtwYWRkaW5nLXRvcDo3cHg7bWFyZ2luLWJvdHRvbTowO3RleHQtYWxpZ246cmlnaHR9fS5mb3JtLWhvcml6b250YWwgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNre3JpZ2h0OjE1cHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtbGcgLmNvbnRyb2wtbGFiZWx7cGFkZGluZy10b3A6MTFweDtmb250LXNpemU6MThweH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtc20gLmNvbnRyb2wtbGFiZWx7cGFkZGluZy10b3A6NnB4O2ZvbnQtc2l6ZToxMnB4fX0uYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NnB4IDEycHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LW1zLXRvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1pbWFnZTpub25lO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo0cHh9LmJ0bi5hY3RpdmUuZm9jdXMsLmJ0bi5hY3RpdmU6Zm9jdXMsLmJ0bi5mb2N1cywuYnRuOmFjdGl2ZS5mb2N1cywuYnRuOmFjdGl2ZTpmb2N1cywuYnRuOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQ7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0uYnRuLmZvY3VzLC5idG46Zm9jdXMsLmJ0bjpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4uYWN0aXZlLC5idG46YWN0aXZle2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwwLDAsLjEyNSl9LmJ0bi5kaXNhYmxlZCwuYnRuW2Rpc2FibGVkXSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bntjdXJzb3I6bm90LWFsbG93ZWQ7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NjUpOy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZTtvcGFjaXR5Oi42NX1hLmJ0bi5kaXNhYmxlZCxmaWVsZHNldFtkaXNhYmxlZF0gYS5idG57cG9pbnRlci1ldmVudHM6bm9uZX0uYnRuLWRlZmF1bHR7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNjY2N9LmJ0bi1kZWZhdWx0LmZvY3VzLC5idG4tZGVmYXVsdDpmb2N1c3tjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtib3JkZXItY29sb3I6IzhjOGM4Y30uYnRuLWRlZmF1bHQ6aG92ZXJ7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Ym9yZGVyLWNvbG9yOiNhZGFkYWR9LmJ0bi1kZWZhdWx0LmFjdGl2ZSwuYnRuLWRlZmF1bHQ6YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHR7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Ym9yZGVyLWNvbG9yOiNhZGFkYWR9LmJ0bi1kZWZhdWx0LmFjdGl2ZS5mb2N1cywuYnRuLWRlZmF1bHQuYWN0aXZlOmZvY3VzLC5idG4tZGVmYXVsdC5hY3RpdmU6aG92ZXIsLmJ0bi1kZWZhdWx0OmFjdGl2ZS5mb2N1cywuYnRuLWRlZmF1bHQ6YWN0aXZlOmZvY3VzLC5idG4tZGVmYXVsdDphY3RpdmU6aG92ZXIsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdC5mb2N1cywub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0OmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQ6aG92ZXJ7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNkNGQ0ZDQ7Ym9yZGVyLWNvbG9yOiM4YzhjOGN9LmJ0bi1kZWZhdWx0LmFjdGl2ZSwuYnRuLWRlZmF1bHQ6YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHR7YmFja2dyb3VuZC1pbWFnZTpub25lfS5idG4tZGVmYXVsdC5kaXNhYmxlZC5mb2N1cywuYnRuLWRlZmF1bHQuZGlzYWJsZWQ6Zm9jdXMsLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmhvdmVyLC5idG4tZGVmYXVsdFtkaXNhYmxlZF0uZm9jdXMsLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTpmb2N1cywuYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuZm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpmb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2NjY30uYnRuLWRlZmF1bHQgLmJhZGdle2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzMzfS5idG4tcHJpbWFyeXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzMzN2FiNztib3JkZXItY29sb3I6IzJlNmRhNH0uYnRuLXByaW1hcnkuZm9jdXMsLmJ0bi1wcmltYXJ5OmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjg2MDkwO2JvcmRlci1jb2xvcjojMTIyYjQwfS5idG4tcHJpbWFyeTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzI4NjA5MDtib3JkZXItY29sb3I6IzIwNGQ3NH0uYnRuLXByaW1hcnkuYWN0aXZlLC5idG4tcHJpbWFyeTphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzI4NjA5MDtib3JkZXItY29sb3I6IzIwNGQ3NH0uYnRuLXByaW1hcnkuYWN0aXZlLmZvY3VzLC5idG4tcHJpbWFyeS5hY3RpdmU6Zm9jdXMsLmJ0bi1wcmltYXJ5LmFjdGl2ZTpob3ZlciwuYnRuLXByaW1hcnk6YWN0aXZlLmZvY3VzLC5idG4tcHJpbWFyeTphY3RpdmU6Zm9jdXMsLmJ0bi1wcmltYXJ5OmFjdGl2ZTpob3Zlciwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5LmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnk6Zm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIwNGQ3NDtib3JkZXItY29sb3I6IzEyMmI0MH0uYnRuLXByaW1hcnkuYWN0aXZlLC5idG4tcHJpbWFyeTphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeXtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmJ0bi1wcmltYXJ5LmRpc2FibGVkLmZvY3VzLC5idG4tcHJpbWFyeS5kaXNhYmxlZDpmb2N1cywuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5mb2N1cywuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLC5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMzM3YWI3O2JvcmRlci1jb2xvcjojMmU2ZGE0fS5idG4tcHJpbWFyeSAuYmFkZ2V7Y29sb3I6IzMzN2FiNztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmJ0bi1zdWNjZXNze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNWNiODVjO2JvcmRlci1jb2xvcjojNGNhZTRjfS5idG4tc3VjY2Vzcy5mb2N1cywuYnRuLXN1Y2Nlc3M6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0NDlkNDQ7Ym9yZGVyLWNvbG9yOiMyNTU2MjV9LmJ0bi1zdWNjZXNzOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDQ5ZDQ0O2JvcmRlci1jb2xvcjojMzk4NDM5fS5idG4tc3VjY2Vzcy5hY3RpdmUsLmJ0bi1zdWNjZXNzOmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDQ5ZDQ0O2JvcmRlci1jb2xvcjojMzk4NDM5fS5idG4tc3VjY2Vzcy5hY3RpdmUuZm9jdXMsLmJ0bi1zdWNjZXNzLmFjdGl2ZTpmb2N1cywuYnRuLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLC5idG4tc3VjY2VzczphY3RpdmUuZm9jdXMsLmJ0bi1zdWNjZXNzOmFjdGl2ZTpmb2N1cywuYnRuLXN1Y2Nlc3M6YWN0aXZlOmhvdmVyLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3MuZm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2Vzczpmb2N1cywub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzk4NDM5O2JvcmRlci1jb2xvcjojMjU1NjI1fS5idG4tc3VjY2Vzcy5hY3RpdmUsLmJ0bi1zdWNjZXNzOmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNze2JhY2tncm91bmQtaW1hZ2U6bm9uZX0uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQuZm9jdXMsLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmZvY3VzLC5idG4tc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmZvY3VzLC5idG4tc3VjY2Vzc1tkaXNhYmxlZF06Zm9jdXMsLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpob3ZlcixmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzLmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3M6Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1Y2I4NWM7Ym9yZGVyLWNvbG9yOiM0Y2FlNGN9LmJ0bi1zdWNjZXNzIC5iYWRnZXtjb2xvcjojNWNiODVjO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uYnRuLWluZm97Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1YmMwZGU7Ym9yZGVyLWNvbG9yOiM0NmI4ZGF9LmJ0bi1pbmZvLmZvY3VzLC5idG4taW5mbzpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzMxYjBkNTtib3JkZXItY29sb3I6IzFiNmQ4NX0uYnRuLWluZm86aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMWIwZDU7Ym9yZGVyLWNvbG9yOiMyNjlhYmN9LmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWluZm86YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWluZm97Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMWIwZDU7Ym9yZGVyLWNvbG9yOiMyNjlhYmN9LmJ0bi1pbmZvLmFjdGl2ZS5mb2N1cywuYnRuLWluZm8uYWN0aXZlOmZvY3VzLC5idG4taW5mby5hY3RpdmU6aG92ZXIsLmJ0bi1pbmZvOmFjdGl2ZS5mb2N1cywuYnRuLWluZm86YWN0aXZlOmZvY3VzLC5idG4taW5mbzphY3RpdmU6aG92ZXIsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mby5mb2N1cywub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvOmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWluZm86aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyNjlhYmM7Ym9yZGVyLWNvbG9yOiMxYjZkODV9LmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWluZm86YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWluZm97YmFja2dyb3VuZC1pbWFnZTpub25lfS5idG4taW5mby5kaXNhYmxlZC5mb2N1cywuYnRuLWluZm8uZGlzYWJsZWQ6Zm9jdXMsLmJ0bi1pbmZvLmRpc2FibGVkOmhvdmVyLC5idG4taW5mb1tkaXNhYmxlZF0uZm9jdXMsLmJ0bi1pbmZvW2Rpc2FibGVkXTpmb2N1cywuYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8uZm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpmb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzViYzBkZTtib3JkZXItY29sb3I6IzQ2YjhkYX0uYnRuLWluZm8gLmJhZGdle2NvbG9yOiM1YmMwZGU7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5idG4td2FybmluZ3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2YwYWQ0ZTtib3JkZXItY29sb3I6I2VlYTIzNn0uYnRuLXdhcm5pbmcuZm9jdXMsLmJ0bi13YXJuaW5nOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZWM5NzFmO2JvcmRlci1jb2xvcjojOTg1ZjBkfS5idG4td2FybmluZzpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2VjOTcxZjtib3JkZXItY29sb3I6I2Q1ODUxMn0uYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4td2FybmluZzphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZ3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2VjOTcxZjtib3JkZXItY29sb3I6I2Q1ODUxMn0uYnRuLXdhcm5pbmcuYWN0aXZlLmZvY3VzLC5idG4td2FybmluZy5hY3RpdmU6Zm9jdXMsLmJ0bi13YXJuaW5nLmFjdGl2ZTpob3ZlciwuYnRuLXdhcm5pbmc6YWN0aXZlLmZvY3VzLC5idG4td2FybmluZzphY3RpdmU6Zm9jdXMsLmJ0bi13YXJuaW5nOmFjdGl2ZTpob3Zlciwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nLmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmc6Zm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZzpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Q1ODUxMjtib3JkZXItY29sb3I6Izk4NWYwZH0uYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4td2FybmluZzphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZ3tiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmJ0bi13YXJuaW5nLmRpc2FibGVkLmZvY3VzLC5idG4td2FybmluZy5kaXNhYmxlZDpmb2N1cywuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6aG92ZXIsLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5mb2N1cywuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLC5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjBhZDRlO2JvcmRlci1jb2xvcjojZWVhMjM2fS5idG4td2FybmluZyAuYmFkZ2V7Y29sb3I6I2YwYWQ0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmJ0bi1kYW5nZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNkOTUzNGY7Ym9yZGVyLWNvbG9yOiNkNDNmM2F9LmJ0bi1kYW5nZXIuZm9jdXMsLmJ0bi1kYW5nZXI6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNjOTMwMmM7Ym9yZGVyLWNvbG9yOiM3NjFjMTl9LmJ0bi1kYW5nZXI6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNjOTMwMmM7Ym9yZGVyLWNvbG9yOiNhYzI5MjV9LmJ0bi1kYW5nZXIuYWN0aXZlLC5idG4tZGFuZ2VyOmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNjOTMwMmM7Ym9yZGVyLWNvbG9yOiNhYzI5MjV9LmJ0bi1kYW5nZXIuYWN0aXZlLmZvY3VzLC5idG4tZGFuZ2VyLmFjdGl2ZTpmb2N1cywuYnRuLWRhbmdlci5hY3RpdmU6aG92ZXIsLmJ0bi1kYW5nZXI6YWN0aXZlLmZvY3VzLC5idG4tZGFuZ2VyOmFjdGl2ZTpmb2N1cywuYnRuLWRhbmdlcjphY3RpdmU6aG92ZXIsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyLmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlcjpmb2N1cywub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXI6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNhYzI5MjU7Ym9yZGVyLWNvbG9yOiM3NjFjMTl9LmJ0bi1kYW5nZXIuYWN0aXZlLC5idG4tZGFuZ2VyOmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXJ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5idG4tZGFuZ2VyLmRpc2FibGVkLmZvY3VzLC5idG4tZGFuZ2VyLmRpc2FibGVkOmZvY3VzLC5idG4tZGFuZ2VyLmRpc2FibGVkOmhvdmVyLC5idG4tZGFuZ2VyW2Rpc2FibGVkXS5mb2N1cywuYnRuLWRhbmdlcltkaXNhYmxlZF06Zm9jdXMsLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q5NTM0Zjtib3JkZXItY29sb3I6I2Q0M2YzYX0uYnRuLWRhbmdlciAuYmFkZ2V7Y29sb3I6I2Q5NTM0ZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmJ0bi1saW5re2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzM3YWI3O2JvcmRlci1yYWRpdXM6MH0uYnRuLWxpbmssLmJ0bi1saW5rLmFjdGl2ZSwuYnRuLWxpbms6YWN0aXZlLC5idG4tbGlua1tkaXNhYmxlZF0sZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGlua3tiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uYnRuLWxpbmssLmJ0bi1saW5rOmFjdGl2ZSwuYnRuLWxpbms6Zm9jdXMsLmJ0bi1saW5rOmhvdmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uYnRuLWxpbms6Zm9jdXMsLmJ0bi1saW5rOmhvdmVye2NvbG9yOiMyMzUyN2M7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlcixmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6aG92ZXJ7Y29sb3I6Izc3Nzt0ZXh0LWRlY29yYXRpb246bm9uZX0uYnRuLWdyb3VwLWxnPi5idG4sLmJ0bi1sZ3twYWRkaW5nOjEwcHggMTZweDtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxLjMzMzMzMzM7Ym9yZGVyLXJhZGl1czo2cHh9LmJ0bi1ncm91cC1zbT4uYnRuLC5idG4tc217cGFkZGluZzo1cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjU7Ym9yZGVyLXJhZGl1czozcHh9LmJ0bi1ncm91cC14cz4uYnRuLC5idG4teHN7cGFkZGluZzoxcHggNXB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTtib3JkZXItcmFkaXVzOjNweH0uYnRuLWJsb2Nre2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0uYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLXRvcDo1cHh9aW5wdXRbdHlwZT1idXR0b25dLmJ0bi1ibG9jayxpbnB1dFt0eXBlPXJlc2V0XS5idG4tYmxvY2ssaW5wdXRbdHlwZT1zdWJtaXRdLmJ0bi1ibG9ja3t3aWR0aDoxMDAlfS5mYWRle29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstby10cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfS5mYWRlLmlue29wYWNpdHk6MX0uY29sbGFwc2V7ZGlzcGxheTpub25lfS5jb2xsYXBzZS5pbntkaXNwbGF5OmJsb2NrfXRyLmNvbGxhcHNlLmlue2Rpc3BsYXk6dGFibGUtcm93fXRib2R5LmNvbGxhcHNlLmlue2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfS5jb2xsYXBzaW5ne3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjstd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2U7LW8tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlOy13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjouMzVzOy1vLXRyYW5zaXRpb24tZHVyYXRpb246LjM1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zNXM7LXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OmhlaWdodCx2aXNpYmlsaXR5Oy1vLXRyYW5zaXRpb24tcHJvcGVydHk6aGVpZ2h0LHZpc2liaWxpdHk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpoZWlnaHQsdmlzaWJpbGl0eX0uY2FyZXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tbGVmdDoycHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci10b3A6NHB4IGRhc2hlZDtib3JkZXItdG9wOjRweCBzb2xpZFw5O2JvcmRlci1yaWdodDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50fS5kcm9wZG93biwuZHJvcHVwe3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi10b2dnbGU6Zm9jdXN7b3V0bGluZTowfS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDt6LWluZGV4OjEwMDA7ZGlzcGxheTpub25lO2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjE2MHB4O3BhZGRpbmc6NXB4IDA7bWFyZ2luOjJweCAwIDA7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpsZWZ0O2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjE1KTtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6MCA2cHggMTJweCByZ2JhKDAsMCwwLC4xNzUpO2JveC1zaGFkb3c6MCA2cHggMTJweCByZ2JhKDAsMCwwLC4xNzUpfS5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHR7cmlnaHQ6MDtsZWZ0OmF1dG99LmRyb3Bkb3duLW1lbnUgLmRpdmlkZXJ7aGVpZ2h0OjFweDttYXJnaW46OXB4IDA7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNX0uZHJvcGRvd24tbWVudT5saT5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtjbGVhcjpib3RoO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO2NvbG9yOiMzMzM7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMsLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcntjb2xvcjojMjYyNjI2O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0uZHJvcGRvd24tbWVudT4uYWN0aXZlPmEsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmZvY3VzLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzMzN2FiNztvdXRsaW5lOjB9LmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXMsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6Izc3N30uZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpmb2N1cywuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0ub3Blbj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5vcGVuPmF7b3V0bGluZTowfS5kcm9wZG93bi1tZW51LXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5kcm9wZG93bi1tZW51LWxlZnR7cmlnaHQ6YXV0bztsZWZ0OjB9LmRyb3Bkb3duLWhlYWRlcntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6M3B4IDIwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mztjb2xvcjojNzc3O3doaXRlLXNwYWNlOm5vd3JhcH0uZHJvcGRvd24tYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDo5OTB9LnB1bGwtcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmRyb3B1cCAuY2FyZXQsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldHtjb250ZW50OiIiO2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjRweCBkYXNoZWQ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWRcOX0uZHJvcHVwIC5kcm9wZG93bi1tZW51LC5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuZHJvcGRvd24tbWVudXt0b3A6YXV0bztib3R0b206MTAwJTttYXJnaW4tYm90dG9tOjJweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30ubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51LWxlZnR7cmlnaHQ6YXV0bztsZWZ0OjB9fS5idG4tZ3JvdXAsLmJ0bi1ncm91cC12ZXJ0aWNhbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLC5idG4tZ3JvdXA+LmJ0bntwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0fS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi5hY3RpdmUsLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zm9jdXMsLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmhvdmVyLC5idG4tZ3JvdXA+LmJ0bi5hY3RpdmUsLmJ0bi1ncm91cD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwPi5idG46Zm9jdXMsLmJ0bi1ncm91cD4uYnRuOmhvdmVye3otaW5kZXg6Mn0uYnRuLWdyb3VwIC5idG4rLmJ0biwuYnRuLWdyb3VwIC5idG4rLmJ0bi1ncm91cCwuYnRuLWdyb3VwIC5idG4tZ3JvdXArLmJ0biwuYnRuLWdyb3VwIC5idG4tZ3JvdXArLmJ0bi1ncm91cHttYXJnaW4tbGVmdDotMXB4fS5idG4tdG9vbGJhcnttYXJnaW4tbGVmdDotNXB4fS5idG4tdG9vbGJhciAuYnRuLC5idG4tdG9vbGJhciAuYnRuLWdyb3VwLC5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXB7ZmxvYXQ6bGVmdH0uYnRuLXRvb2xiYXI+LmJ0biwuYnRuLXRvb2xiYXI+LmJ0bi1ncm91cCwuYnRuLXRvb2xiYXI+LmlucHV0LWdyb3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSl7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXA+LmJ0bjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5idG4tZ3JvdXA+LmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmJ0bi1ncm91cD4uYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xlOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmJ0bi1ncm91cD4uYnRuLWdyb3Vwe2Zsb2F0OmxlZnR9LmJ0bi1ncm91cD4uYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk+LmJ0bntib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk+LmJ0bjpsYXN0LWNoaWxkLC5idG4tZ3JvdXA+LmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpPi5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXA+LmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG46Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRvZ2dsZXtwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6OHB4fS5idG4tZ3JvdXA+LmJ0bi1sZysuZHJvcGRvd24tdG9nZ2xle3BhZGRpbmctcmlnaHQ6MTJweDtwYWRkaW5nLWxlZnQ6MTJweH0uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwwLDAsLjEyNSk7Ym94LXNoYWRvdzppbnNldCAwIDNweCA1cHggcmdiYSgwLDAsMCwuMTI1KX0uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tbGlua3std2Via2l0LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0biAuY2FyZXR7bWFyZ2luLWxlZnQ6MH0uYnRuLWxnIC5jYXJldHtib3JkZXItd2lkdGg6NXB4IDVweCAwO2JvcmRlci1ib3R0b20td2lkdGg6MH0uZHJvcHVwIC5idG4tbGcgLmNhcmV0e2JvcmRlci13aWR0aDowIDVweCA1cHh9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cCwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA+LmJ0bntkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA+LmJ0bntmbG9hdDpub25lfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bisuYnRuLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bisuYnRuLWdyb3VwLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cCsuYnRuLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cCsuYnRuLWdyb3Vwe21hcmdpbi10b3A6LTFweDttYXJnaW4tbGVmdDowfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpPi5idG57Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpPi5idG46bGFzdC1jaGlsZCwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKT4uZHJvcGRvd24tdG9nZ2xle2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG46Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LmJ0bi1ncm91cC1qdXN0aWZpZWR7ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlO3RhYmxlLWxheW91dDpmaXhlZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmJ0bi1ncm91cC1qdXN0aWZpZWQ+LmJ0biwuYnRuLWdyb3VwLWp1c3RpZmllZD4uYnRuLWdyb3Vwe2Rpc3BsYXk6dGFibGUtY2VsbDtmbG9hdDpub25lO3dpZHRoOjElfS5idG4tZ3JvdXAtanVzdGlmaWVkPi5idG4tZ3JvdXAgLmJ0bnt3aWR0aDoxMDAlfS5idG4tZ3JvdXAtanVzdGlmaWVkPi5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnV7bGVmdDphdXRvfVtkYXRhLXRvZ2dsZT1idXR0b25zXT4uYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdLFtkYXRhLXRvZ2dsZT1idXR0b25zXT4uYnRuIGlucHV0W3R5cGU9cmFkaW9dLFtkYXRhLXRvZ2dsZT1idXR0b25zXT4uYnRuLWdyb3VwPi5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0sW2RhdGEtdG9nZ2xlPWJ1dHRvbnNdPi5idG4tZ3JvdXA+LmJ0biBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjphYnNvbHV0ZTtjbGlwOnJlY3QoMCwwLDAsMCk7cG9pbnRlci1ldmVudHM6bm9uZX0uaW5wdXQtZ3JvdXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTp0YWJsZTtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmlucHV0LWdyb3VwW2NsYXNzKj1jb2wtXXtmbG9hdDpub25lO3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH0uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbHtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlO21hcmdpbi1ib3R0b206MH0uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmb2N1c3t6LWluZGV4OjN9LmlucHV0LWdyb3VwLWxnPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwLWxnPi5pbnB1dC1ncm91cC1hZGRvbiwuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRue2hlaWdodDo0NnB4O3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzMzMzMzMztib3JkZXItcmFkaXVzOjZweH1zZWxlY3QuaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbCxzZWxlY3QuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWFkZG9uLHNlbGVjdC5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPi5idG57aGVpZ2h0OjQ2cHg7bGluZS1oZWlnaHQ6NDZweH1zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWxnPi5mb3JtLWNvbnRyb2wsc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPi5idG4sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbCx0ZXh0YXJlYS5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRue2hlaWdodDphdXRvfS5pbnB1dC1ncm91cC1zbT4uZm9ybS1jb250cm9sLC5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24sLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1idG4+LmJ0bntoZWlnaHQ6MzBweDtwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTtib3JkZXItcmFkaXVzOjNweH1zZWxlY3QuaW5wdXQtZ3JvdXAtc20+LmZvcm0tY29udHJvbCxzZWxlY3QuaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWFkZG9uLHNlbGVjdC5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG57aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweH1zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLXNtPi5mb3JtLWNvbnRyb2wsc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24sc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG4sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20+LmZvcm0tY29udHJvbCx0ZXh0YXJlYS5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj4uYnRue2hlaWdodDphdXRvfS5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sLC5pbnB1dC1ncm91cC1hZGRvbiwuaW5wdXQtZ3JvdXAtYnRue2Rpc3BsYXk6dGFibGUtY2VsbH0uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5pbnB1dC1ncm91cC1hZGRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5pbnB1dC1ncm91cC1idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItcmFkaXVzOjB9LmlucHV0LWdyb3VwLWFkZG9uLC5pbnB1dC1ncm91cC1idG57d2lkdGg6MSU7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5wdXQtZ3JvdXAtYWRkb257cGFkZGluZzo2cHggMTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojNTU1O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHh9LmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LXNte3BhZGRpbmc6NXB4IDEwcHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czozcHh9LmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LWxne3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2JvcmRlci1yYWRpdXM6NnB4fS5pbnB1dC1ncm91cC1hZGRvbiBpbnB1dFt0eXBlPWNoZWNrYm94XSwuaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLXRvcDowfS5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLC5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCwuaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLWdyb3VwPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xlLC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodDowfS5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQsLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLWdyb3VwPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZHtib3JkZXItbGVmdDowfS5pbnB1dC1ncm91cC1idG57cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1ncm91cC1idG4+LmJ0bntwb3NpdGlvbjpyZWxhdGl2ZX0uaW5wdXQtZ3JvdXAtYnRuPi5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5pbnB1dC1ncm91cC1idG4+LmJ0bjphY3RpdmUsLmlucHV0LWdyb3VwLWJ0bj4uYnRuOmZvY3VzLC5pbnB1dC1ncm91cC1idG4+LmJ0bjpob3Zlcnt6LWluZGV4OjJ9LmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLC5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0bi1ncm91cHttYXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0biwuaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0bi1ncm91cHt6LWluZGV4OjI7bWFyZ2luLWxlZnQ6LTFweH0ubmF2e3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDtsaXN0LXN0eWxlOm5vbmV9Lm5hdj5saXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrfS5uYXY+bGk+YXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MTBweCAxNXB4fS5uYXY+bGk+YTpmb2N1cywubmF2PmxpPmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5uYXY+bGkuZGlzYWJsZWQ+YXtjb2xvcjojNzc3fS5uYXY+bGkuZGlzYWJsZWQ+YTpmb2N1cywubmF2PmxpLmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6Izc3Nzt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2IC5vcGVuPmEsLm5hdiAub3Blbj5hOmZvY3VzLC5uYXYgLm9wZW4+YTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Ym9yZGVyLWNvbG9yOiMzMzdhYjd9Lm5hdiAubmF2LWRpdmlkZXJ7aGVpZ2h0OjFweDttYXJnaW46OXB4IDA7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNX0ubmF2PmxpPmE+aW1ne21heC13aWR0aDpub25lfS5uYXYtdGFic3tib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkfS5uYXYtdGFicz5saXtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206LTFweH0ubmF2LXRhYnM+bGk+YXttYXJnaW4tcmlnaHQ6MnB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5uYXYtdGFicz5saT5hOmhvdmVye2JvcmRlci1jb2xvcjojZWVlICNlZWUgI2RkZH0ubmF2LXRhYnM+bGkuYWN0aXZlPmEsLm5hdi10YWJzPmxpLmFjdGl2ZT5hOmZvY3VzLC5uYXYtdGFicz5saS5hY3RpdmU+YTpob3Zlcntjb2xvcjojNTU1O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0ubmF2LXRhYnMubmF2LWp1c3RpZmllZHt3aWR0aDoxMDAlO2JvcmRlci1ib3R0b206MH0ubmF2LXRhYnMubmF2LWp1c3RpZmllZD5saXtmbG9hdDpub25lfS5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpPmF7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e3RvcDphdXRvO2xlZnQ6YXV0b31AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGl7ZGlzcGxheTp0YWJsZS1jZWxsO3dpZHRoOjElfS5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpPmF7bWFyZ2luLWJvdHRvbTowfX0ubmF2LXRhYnMubmF2LWp1c3RpZmllZD5saT5he21hcmdpbi1yaWdodDowO2JvcmRlci1yYWRpdXM6NHB4fS5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YSwubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6Zm9jdXMsLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmhvdmVye2JvcmRlcjoxcHggc29saWQgI2RkZH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGk+YXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDB9Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hLC5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6aG92ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfX0ubmF2LXBpbGxzPmxpe2Zsb2F0OmxlZnR9Lm5hdi1waWxscz5saT5he2JvcmRlci1yYWRpdXM6NHB4fS5uYXYtcGlsbHM+bGkrbGl7bWFyZ2luLWxlZnQ6MnB4fS5uYXYtcGlsbHM+bGkuYWN0aXZlPmEsLm5hdi1waWxscz5saS5hY3RpdmU+YTpmb2N1cywubmF2LXBpbGxzPmxpLmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzM3YWI3fS5uYXYtc3RhY2tlZD5saXtmbG9hdDpub25lfS5uYXYtc3RhY2tlZD5saStsaXttYXJnaW4tdG9wOjJweDttYXJnaW4tbGVmdDowfS5uYXYtanVzdGlmaWVke3dpZHRoOjEwMCV9Lm5hdi1qdXN0aWZpZWQ+bGl7ZmxvYXQ6bm9uZX0ubmF2LWp1c3RpZmllZD5saT5he21hcmdpbi1ib3R0b206NXB4O3RleHQtYWxpZ246Y2VudGVyfS5uYXYtanVzdGlmaWVkPi5kcm9wZG93biAuZHJvcGRvd24tbWVudXt0b3A6YXV0bztsZWZ0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXYtanVzdGlmaWVkPmxpe2Rpc3BsYXk6dGFibGUtY2VsbDt3aWR0aDoxJX0ubmF2LWp1c3RpZmllZD5saT5he21hcmdpbi1ib3R0b206MH19Lm5hdi10YWJzLWp1c3RpZmllZHtib3JkZXItYm90dG9tOjB9Lm5hdi10YWJzLWp1c3RpZmllZD5saT5he21hcmdpbi1yaWdodDowO2JvcmRlci1yYWRpdXM6NHB4fS5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hLC5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmZvY3VzLC5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmhvdmVye2JvcmRlcjoxcHggc29saWQgI2RkZH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdi10YWJzLWp1c3RpZmllZD5saT5he2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0ubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YSwubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpob3Zlcntib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9fS50YWItY29udGVudD4udGFiLXBhbmV7ZGlzcGxheTpub25lfS50YWItY29udGVudD4uYWN0aXZle2Rpc3BsYXk6YmxvY2t9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51e21hcmdpbi10b3A6LTFweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0ubmF2YmFye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6NTBweDttYXJnaW4tYm90dG9tOjIwcHg7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhcntib3JkZXItcmFkaXVzOjRweH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItaGVhZGVye2Zsb2F0OmxlZnR9fS5uYXZiYXItY29sbGFwc2V7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4O292ZXJmbG93LXg6dmlzaWJsZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtib3JkZXItdG9wOjFweCBzb2xpZCB0cmFuc3BhcmVudDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm5hdmJhci1jb2xsYXBzZS5pbntvdmVyZmxvdy15OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItY29sbGFwc2V7d2lkdGg6YXV0bztib3JkZXItdG9wOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXZiYXItY29sbGFwc2UuY29sbGFwc2V7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjA7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9Lm5hdmJhci1jb2xsYXBzZS5pbntvdmVyZmxvdy15OnZpc2libGV9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWNvbGxhcHNle3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH19Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNle21heC1oZWlnaHQ6MzQwcHh9QG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOjQ4MHB4KSBhbmQgKG9yaWVudGF0aW9uOmxhbmRzY2FwZSl7Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNle21heC1oZWlnaHQ6MjAwcHh9fS5jb250YWluZXItZmx1aWQ+Lm5hdmJhci1jb2xsYXBzZSwuY29udGFpbmVyLWZsdWlkPi5uYXZiYXItaGVhZGVyLC5jb250YWluZXI+Lm5hdmJhci1jb2xsYXBzZSwuY29udGFpbmVyPi5uYXZiYXItaGVhZGVye21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNvbnRhaW5lci1mbHVpZD4ubmF2YmFyLWNvbGxhcHNlLC5jb250YWluZXItZmx1aWQ+Lm5hdmJhci1oZWFkZXIsLmNvbnRhaW5lcj4ubmF2YmFyLWNvbGxhcHNlLC5jb250YWluZXI+Lm5hdmJhci1oZWFkZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH19Lm5hdmJhci1zdGF0aWMtdG9we3otaW5kZXg6MTAwMDtib3JkZXItd2lkdGg6MCAwIDFweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhci1zdGF0aWMtdG9we2JvcmRlci1yYWRpdXM6MH19Lm5hdmJhci1maXhlZC1ib3R0b20sLm5hdmJhci1maXhlZC10b3B7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtsZWZ0OjA7ei1pbmRleDoxMDMwfUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsubmF2YmFyLWZpeGVkLWJvdHRvbSwubmF2YmFyLWZpeGVkLXRvcHtib3JkZXItcmFkaXVzOjB9fS5uYXZiYXItZml4ZWQtdG9we3RvcDowO2JvcmRlci13aWR0aDowIDAgMXB4fS5uYXZiYXItZml4ZWQtYm90dG9te2JvdHRvbTowO21hcmdpbi1ib3R0b206MDtib3JkZXItd2lkdGg6MXB4IDAgMH0ubmF2YmFyLWJyYW5ke2Zsb2F0OmxlZnQ7aGVpZ2h0OjUwcHg7cGFkZGluZzoxNXB4IDE1cHg7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjBweH0ubmF2YmFyLWJyYW5kOmZvY3VzLC5uYXZiYXItYnJhbmQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdmJhci1icmFuZD5pbWd7ZGlzcGxheTpibG9ja31AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhcj4uY29udGFpbmVyIC5uYXZiYXItYnJhbmQsLm5hdmJhcj4uY29udGFpbmVyLWZsdWlkIC5uYXZiYXItYnJhbmR7bWFyZ2luLWxlZnQ6LTE1cHh9fS5uYXZiYXItdG9nZ2xle3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OnJpZ2h0O3BhZGRpbmc6OXB4IDEwcHg7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbTo4cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjRweH0ubmF2YmFyLXRvZ2dsZTpmb2N1c3tvdXRsaW5lOjB9Lm5hdmJhci10b2dnbGUgLmljb24tYmFye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjJweDtoZWlnaHQ6MnB4O2JvcmRlci1yYWRpdXM6MXB4fS5uYXZiYXItdG9nZ2xlIC5pY29uLWJhcisuaWNvbi1iYXJ7bWFyZ2luLXRvcDo0cHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItdG9nZ2xle2Rpc3BsYXk6bm9uZX19Lm5hdmJhci1uYXZ7bWFyZ2luOjcuNXB4IC0xNXB4fS5uYXZiYXItbmF2PmxpPmF7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2xpbmUtaGVpZ2h0OjIwcHh9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOnN0YXRpYztmbG9hdDpub25lO3dpZHRoOmF1dG87bWFyZ2luLXRvcDowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXIsLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+bGk+YXtwYWRkaW5nOjVweCAxNXB4IDVweCAyNXB4fS5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmF7bGluZS1oZWlnaHQ6MjBweH0ubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzLC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXJ7YmFja2dyb3VuZC1pbWFnZTpub25lfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhci1uYXZ7ZmxvYXQ6bGVmdDttYXJnaW46MH0ubmF2YmFyLW5hdj5saXtmbG9hdDpsZWZ0fS5uYXZiYXItbmF2PmxpPmF7cGFkZGluZy10b3A6MTVweDtwYWRkaW5nLWJvdHRvbToxNXB4fX0ubmF2YmFyLWZvcm17cGFkZGluZzoxMHB4IDE1cHg7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0xNXB4O21hcmdpbi1ib3R0b206OHB4O21hcmdpbi1sZWZ0Oi0xNXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSl9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItZm9ybSAuZm9ybS1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9se2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG87dmVydGljYWwtYWxpZ246bWlkZGxlfS5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sLXN0YXRpY3tkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2YmFyLWZvcm0gLmlucHV0LWdyb3Vwe2Rpc3BsYXk6aW5saW5lLXRhYmxlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wsLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24sLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRue3dpZHRoOmF1dG99Lm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cD4uZm9ybS1jb250cm9se3dpZHRoOjEwMCV9Lm5hdmJhci1mb3JtIC5jb250cm9sLWxhYmVse21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm5hdmJhci1mb3JtIC5jaGVja2JveCwubmF2YmFyLWZvcm0gLnJhZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5uYXZiYXItZm9ybSAuY2hlY2tib3ggbGFiZWwsLm5hdmJhci1mb3JtIC5yYWRpbyBsYWJlbHtwYWRkaW5nLWxlZnQ6MH0ubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdLC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT1yYWRpb117cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWxlZnQ6MH0ubmF2YmFyLWZvcm0gLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNre3RvcDowfX1AbWVkaWEgKG1heC13aWR0aDo3NjdweCl7Lm5hdmJhci1mb3JtIC5mb3JtLWdyb3Vwe21hcmdpbi1ib3R0b206NXB4fS5uYXZiYXItZm9ybSAuZm9ybS1ncm91cDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItZm9ybXt3aWR0aDphdXRvO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDowO2JvcmRlcjowOy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX19Lm5hdmJhci1uYXY+bGk+LmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2PmxpPi5kcm9wZG93bi1tZW51e21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lm5hdmJhci1idG57bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWJvdHRvbTo4cHh9Lm5hdmJhci1idG4uYnRuLXNte21hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjEwcHh9Lm5hdmJhci1idG4uYnRuLXhze21hcmdpbi10b3A6MTRweDttYXJnaW4tYm90dG9tOjE0cHh9Lm5hdmJhci10ZXh0e21hcmdpbi10b3A6MTVweDttYXJnaW4tYm90dG9tOjE1cHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItdGV4dHtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1cHh9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsubmF2YmFyLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9Lm5hdmJhci1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0Oi0xNXB4fS5uYXZiYXItcmlnaHR+Lm5hdmJhci1yaWdodHttYXJnaW4tcmlnaHQ6MH19Lm5hdmJhci1kZWZhdWx0e2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmODtib3JkZXItY29sb3I6I2U3ZTdlN30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZHtjb2xvcjojNzc3fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmhvdmVye2NvbG9yOiM1ZTVlNWU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10ZXh0e2NvbG9yOiM3Nzd9Lm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2PmxpPmF7Y29sb3I6Izc3N30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YTpmb2N1cywubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YTpob3Zlcntjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5hY3RpdmU+YSwubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+LmFjdGl2ZT5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNlN2U3ZTd9Lm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpmb2N1cywubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+LmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZXtib3JkZXItY29sb3I6I2RkZH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6Zm9jdXMsLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2RkZH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGUgLmljb24tYmFye2JhY2tncm91bmQtY29sb3I6Izg4OH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1mb3Jte2JvcmRlci1jb2xvcjojZTdlN2U3fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hOmhvdmVye2NvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojZTdlN2U3fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+bGk+YXtjb2xvcjojNzc3fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmhvdmVye2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6Zm9jdXMsLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpob3Zlcntjb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6I2U3ZTdlN30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3Zlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbmt7Y29sb3I6Izc3N30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rOmhvdmVye2NvbG9yOiMzMzN9Lm5hdmJhci1kZWZhdWx0IC5idG4tbGlua3tjb2xvcjojNzc3fS5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMsLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3Zlcntjb2xvcjojMzMzfS5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNle2JhY2tncm91bmQtY29sb3I6IzIyMjtib3JkZXItY29sb3I6IzA4MDgwOH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZHtjb2xvcjojOWQ5ZDlkfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0e2NvbG9yOiM5ZDlkOWR9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2PmxpPmF7Y29sb3I6IzlkOWQ5ZH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+bGk+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+bGk+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5hY3RpdmU+YSwubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+LmFjdGl2ZT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwODA4MDh9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+LmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6IzQ0NDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZXtib3JkZXItY29sb3I6IzMzM30ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzMzM30ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgLmljb24tYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWludmVyc2UgLm5hdmJhci1mb3Jte2JvcmRlci1jb2xvcjojMTAxMDEwfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRyb3Bkb3duLWhlYWRlcntib3JkZXItY29sb3I6IzA4MDgwOH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXJ7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5he2NvbG9yOiM5ZDlkOWR9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmEsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YSwubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmhvdmVye2NvbG9yOiM0NDQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH19Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGlua3tjb2xvcjojOWQ5ZDlkfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXJ7Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5re2NvbG9yOiM5ZDlkOWR9Lm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cywubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmhvdmVye2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXJ7Y29sb3I6IzQ0NH0uYnJlYWRjcnVtYntwYWRkaW5nOjhweCAxNXB4O21hcmdpbi1ib3R0b206MjBweDtsaXN0LXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci1yYWRpdXM6NHB4fS5icmVhZGNydW1iPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5icmVhZGNydW1iPmxpK2xpOmJlZm9yZXtwYWRkaW5nOjAgNXB4O2NvbG9yOiNjY2M7Y29udGVudDoiL1wwMGEwIn0uYnJlYWRjcnVtYj4uYWN0aXZle2NvbG9yOiM3Nzd9LnBhZ2luYXRpb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjA7bWFyZ2luOjIwcHggMDtib3JkZXItcmFkaXVzOjRweH0ucGFnaW5hdGlvbj5saXtkaXNwbGF5OmlubGluZX0ucGFnaW5hdGlvbj5saT5hLC5wYWdpbmF0aW9uPmxpPnNwYW57cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDtwYWRkaW5nOjZweCAxMnB4O21hcmdpbi1sZWZ0Oi0xcHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mztjb2xvcjojMzM3YWI3O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGR9LnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbj5saTpmaXJzdC1jaGlsZD5zcGFue21hcmdpbi1sZWZ0OjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LnBhZ2luYXRpb24+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uPmxpOmxhc3QtY2hpbGQ+c3Bhbntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5wYWdpbmF0aW9uPmxpPmE6Zm9jdXMsLnBhZ2luYXRpb24+bGk+YTpob3ZlciwucGFnaW5hdGlvbj5saT5zcGFuOmZvY3VzLC5wYWdpbmF0aW9uPmxpPnNwYW46aG92ZXJ7ei1pbmRleDoyO2NvbG9yOiMyMzUyN2M7YmFja2dyb3VuZC1jb2xvcjojZWVlO2JvcmRlci1jb2xvcjojZGRkfS5wYWdpbmF0aW9uPi5hY3RpdmU+YSwucGFnaW5hdGlvbj4uYWN0aXZlPmE6Zm9jdXMsLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmhvdmVyLC5wYWdpbmF0aW9uPi5hY3RpdmU+c3BhbiwucGFnaW5hdGlvbj4uYWN0aXZlPnNwYW46Zm9jdXMsLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmhvdmVye3otaW5kZXg6Mztjb2xvcjojZmZmO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6IzMzN2FiNztib3JkZXItY29sb3I6IzMzN2FiN30ucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YSwucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YTpmb2N1cywucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YTpob3ZlciwucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3BhbiwucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3Bhbjpmb2N1cywucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3Bhbjpob3Zlcntjb2xvcjojNzc3O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNkZGR9LnBhZ2luYXRpb24tbGc+bGk+YSwucGFnaW5hdGlvbi1sZz5saT5zcGFue3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzMzMzMzM30ucGFnaW5hdGlvbi1sZz5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLWxnPmxpOmZpcnN0LWNoaWxkPnNwYW57Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHh9LnBhZ2luYXRpb24tbGc+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLWxnPmxpOmxhc3QtY2hpbGQ+c3Bhbntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4fS5wYWdpbmF0aW9uLXNtPmxpPmEsLnBhZ2luYXRpb24tc20+bGk+c3BhbntwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNX0ucGFnaW5hdGlvbi1zbT5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtPmxpOmZpcnN0LWNoaWxkPnNwYW57Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHh9LnBhZ2luYXRpb24tc20+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtPmxpOmxhc3QtY2hpbGQ+c3Bhbntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4fS5wYWdlcntwYWRkaW5nLWxlZnQ6MDttYXJnaW46MjBweCAwO3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGU6bm9uZX0ucGFnZXIgbGl7ZGlzcGxheTppbmxpbmV9LnBhZ2VyIGxpPmEsLnBhZ2VyIGxpPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo1cHggMTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6MTVweH0ucGFnZXIgbGk+YTpmb2N1cywucGFnZXIgbGk+YTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LnBhZ2VyIC5uZXh0PmEsLnBhZ2VyIC5uZXh0PnNwYW57ZmxvYXQ6cmlnaHR9LnBhZ2VyIC5wcmV2aW91cz5hLC5wYWdlciAucHJldmlvdXM+c3BhbntmbG9hdDpsZWZ0fS5wYWdlciAuZGlzYWJsZWQ+YSwucGFnZXIgLmRpc2FibGVkPmE6Zm9jdXMsLnBhZ2VyIC5kaXNhYmxlZD5hOmhvdmVyLC5wYWdlciAuZGlzYWJsZWQ+c3Bhbntjb2xvcjojNzc3O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmxhYmVse2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6LjJlbSAuNmVtIC4zZW07Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtib3JkZXItcmFkaXVzOi4yNWVtfWEubGFiZWw6Zm9jdXMsYS5sYWJlbDpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5sYWJlbDplbXB0eXtkaXNwbGF5Om5vbmV9LmJ0biAubGFiZWx7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHh9LmxhYmVsLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjojNzc3fS5sYWJlbC1kZWZhdWx0W2hyZWZdOmZvY3VzLC5sYWJlbC1kZWZhdWx0W2hyZWZdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZX0ubGFiZWwtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMzMzdhYjd9LmxhYmVsLXByaW1hcnlbaHJlZl06Zm9jdXMsLmxhYmVsLXByaW1hcnlbaHJlZl06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjg2MDkwfS5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzVjYjg1Y30ubGFiZWwtc3VjY2Vzc1tocmVmXTpmb2N1cywubGFiZWwtc3VjY2Vzc1tocmVmXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM0NDlkNDR9LmxhYmVsLWluZm97YmFja2dyb3VuZC1jb2xvcjojNWJjMGRlfS5sYWJlbC1pbmZvW2hyZWZdOmZvY3VzLC5sYWJlbC1pbmZvW2hyZWZdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzMxYjBkNX0ubGFiZWwtd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmMGFkNGV9LmxhYmVsLXdhcm5pbmdbaHJlZl06Zm9jdXMsLmxhYmVsLXdhcm5pbmdbaHJlZl06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWM5NzFmfS5sYWJlbC1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZDk1MzRmfS5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMsLmxhYmVsLWRhbmdlcltocmVmXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjOTMwMmN9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDoxMHB4O3BhZGRpbmc6M3B4IDdweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZC1jb2xvcjojNzc3O2JvcmRlci1yYWRpdXM6MTBweH0uYmFkZ2U6ZW1wdHl7ZGlzcGxheTpub25lfS5idG4gLmJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMXB4fS5idG4tZ3JvdXAteHM+LmJ0biAuYmFkZ2UsLmJ0bi14cyAuYmFkZ2V7dG9wOjA7cGFkZGluZzoxcHggNXB4fWEuYmFkZ2U6Zm9jdXMsYS5iYWRnZTpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlPi5iYWRnZSwubmF2LXBpbGxzPi5hY3RpdmU+YT4uYmFkZ2V7Y29sb3I6IzMzN2FiNztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lmxpc3QtZ3JvdXAtaXRlbT4uYmFkZ2V7ZmxvYXQ6cmlnaHR9Lmxpc3QtZ3JvdXAtaXRlbT4uYmFkZ2UrLmJhZGdle21hcmdpbi1yaWdodDo1cHh9Lm5hdi1waWxscz5saT5hPi5iYWRnZXttYXJnaW4tbGVmdDozcHh9Lmp1bWJvdHJvbntwYWRkaW5nLXRvcDozMHB4O3BhZGRpbmctYm90dG9tOjMwcHg7bWFyZ2luLWJvdHRvbTozMHB4O2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5qdW1ib3Ryb24gLmgxLC5qdW1ib3Ryb24gaDF7Y29sb3I6aW5oZXJpdH0uanVtYm90cm9uIHB7bWFyZ2luLWJvdHRvbToxNXB4O2ZvbnQtc2l6ZToyMXB4O2ZvbnQtd2VpZ2h0OjIwMH0uanVtYm90cm9uPmhye2JvcmRlci10b3AtY29sb3I6I2Q1ZDVkNX0uY29udGFpbmVyIC5qdW1ib3Ryb24sLmNvbnRhaW5lci1mbHVpZCAuanVtYm90cm9ue3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDtib3JkZXItcmFkaXVzOjZweH0uanVtYm90cm9uIC5jb250YWluZXJ7bWF4LXdpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7Lmp1bWJvdHJvbntwYWRkaW5nLXRvcDo0OHB4O3BhZGRpbmctYm90dG9tOjQ4cHh9LmNvbnRhaW5lciAuanVtYm90cm9uLC5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbntwYWRkaW5nLXJpZ2h0OjYwcHg7cGFkZGluZy1sZWZ0OjYwcHh9Lmp1bWJvdHJvbiAuaDEsLmp1bWJvdHJvbiBoMXtmb250LXNpemU6NjNweH19LnRodW1ibmFpbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NHB4O21hcmdpbi1ib3R0b206MjBweDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZS1pbi1vdXQ7LW8tdHJhbnNpdGlvbjpib3JkZXIgLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246Ym9yZGVyIC4ycyBlYXNlLWluLW91dH0udGh1bWJuYWlsIGE+aW1nLC50aHVtYm5haWw+aW1ne21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99YS50aHVtYm5haWwuYWN0aXZlLGEudGh1bWJuYWlsOmZvY3VzLGEudGh1bWJuYWlsOmhvdmVye2JvcmRlci1jb2xvcjojMzM3YWI3fS50aHVtYm5haWwgLmNhcHRpb257cGFkZGluZzo5cHg7Y29sb3I6IzMzM30uYWxlcnR7cGFkZGluZzoxNXB4O21hcmdpbi1ib3R0b206MjBweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NHB4fS5hbGVydCBoNHttYXJnaW4tdG9wOjA7Y29sb3I6aW5oZXJpdH0uYWxlcnQgLmFsZXJ0LWxpbmt7Zm9udC13ZWlnaHQ6NzAwfS5hbGVydD5wLC5hbGVydD51bHttYXJnaW4tYm90dG9tOjB9LmFsZXJ0PnArcHttYXJnaW4tdG9wOjVweH0uYWxlcnQtZGlzbWlzc2FibGUsLmFsZXJ0LWRpc21pc3NpYmxle3BhZGRpbmctcmlnaHQ6MzVweH0uYWxlcnQtZGlzbWlzc2FibGUgLmNsb3NlLC5hbGVydC1kaXNtaXNzaWJsZSAuY2xvc2V7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0ycHg7cmlnaHQ6LTIxcHg7Y29sb3I6aW5oZXJpdH0uYWxlcnQtc3VjY2Vzc3tjb2xvcjojM2M3NjNkO2JhY2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6I2Q2ZTljNn0uYWxlcnQtc3VjY2VzcyBocntib3JkZXItdG9wLWNvbG9yOiNjOWUyYjN9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWxpbmt7Y29sb3I6IzJiNTQyY30uYWxlcnQtaW5mb3tjb2xvcjojMzE3MDhmO2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmNztib3JkZXItY29sb3I6I2JjZThmMX0uYWxlcnQtaW5mbyBocntib3JkZXItdG9wLWNvbG9yOiNhNmUxZWN9LmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmt7Y29sb3I6IzI0NTI2OX0uYWxlcnQtd2FybmluZ3tjb2xvcjojOGE2ZDNiO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXItY29sb3I6I2ZhZWJjY30uYWxlcnQtd2FybmluZyBocntib3JkZXItdG9wLWNvbG9yOiNmN2UxYjV9LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWxpbmt7Y29sb3I6IzY2NTEyY30uYWxlcnQtZGFuZ2Vye2NvbG9yOiNhOTQ0NDI7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlO2JvcmRlci1jb2xvcjojZWJjY2QxfS5hbGVydC1kYW5nZXIgaHJ7Ym9yZGVyLXRvcC1jb2xvcjojZTRiOWMwfS5hbGVydC1kYW5nZXIgLmFsZXJ0LWxpbmt7Y29sb3I6Izg0MzUzNH1ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1vLWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fS5wcm9ncmVzc3toZWlnaHQ6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjEpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjEpfS5wcm9ncmVzcy1iYXJ7ZmxvYXQ6bGVmdDt3aWR0aDowO2hlaWdodDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMzMzdhYjc7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjE1KTtib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjE1KTstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7LW8tdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfS5wcm9ncmVzcy1iYXItc3RyaXBlZCwucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7LXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4O2JhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHh9LnByb2dyZXNzLWJhci5hY3RpdmUsLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyey13ZWJraXQtYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstby1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGV9LnByb2dyZXNzLWJhci1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzVjYjg1Y30ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3N7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3MtYmFyLWluZm97YmFja2dyb3VuZC1jb2xvcjojNWJjMGRlfS5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItaW5mb3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1iYXItd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmMGFkNGV9LnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci13YXJuaW5ne2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLWJhci1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZDk1MzRmfS5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItZGFuZ2Vye2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9Lm1lZGlhe21hcmdpbi10b3A6MTVweH0ubWVkaWE6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5tZWRpYSwubWVkaWEtYm9keXtvdmVyZmxvdzpoaWRkZW47em9vbToxfS5tZWRpYS1ib2R5e3dpZHRoOjEwMDAwcHh9Lm1lZGlhLW9iamVjdHtkaXNwbGF5OmJsb2NrfS5tZWRpYS1vYmplY3QuaW1nLXRodW1ibmFpbHttYXgtd2lkdGg6bm9uZX0ubWVkaWEtcmlnaHQsLm1lZGlhPi5wdWxsLXJpZ2h0e3BhZGRpbmctbGVmdDoxMHB4fS5tZWRpYS1sZWZ0LC5tZWRpYT4ucHVsbC1sZWZ0e3BhZGRpbmctcmlnaHQ6MTBweH0ubWVkaWEtYm9keSwubWVkaWEtbGVmdCwubWVkaWEtcmlnaHR7ZGlzcGxheTp0YWJsZS1jZWxsO3ZlcnRpY2FsLWFsaWduOnRvcH0ubWVkaWEtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWVkaWEtYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0ubWVkaWEtaGVhZGluZ3ttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTo1cHh9Lm1lZGlhLWxpc3R7cGFkZGluZy1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5saXN0LWdyb3Vwe3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MjBweH0ubGlzdC1ncm91cC1pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoxMHB4IDE1cHg7bWFyZ2luLWJvdHRvbTotMXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGR9Lmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHh9Lmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9YS5saXN0LWdyb3VwLWl0ZW0sYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbXtjb2xvcjojNTU1fWEubGlzdC1ncm91cC1pdGVtIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxidXR0b24ubGlzdC1ncm91cC1pdGVtIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZ3tjb2xvcjojMzMzfWEubGlzdC1ncm91cC1pdGVtOmZvY3VzLGEubGlzdC1ncm91cC1pdGVtOmhvdmVyLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW06Zm9jdXMsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpob3Zlcntjb2xvcjojNTU1O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX1idXR0b24ubGlzdC1ncm91cC1pdGVte3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpsZWZ0fS5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQsLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cywubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmhvdmVye2NvbG9yOiM3Nzc7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZX0ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZ3tjb2xvcjppbmhlcml0fS5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LC5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LC5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0e2NvbG9yOiM3Nzd9Lmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXJ7ei1pbmRleDoyO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzM3YWI3O2JvcmRlci1jb2xvcjojMzM3YWI3fS5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+LnNtYWxsLC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz5zbWFsbCwubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPi5zbWFsbCwubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+c21hbGwsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz4uc21hbGwsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPnNtYWxse2NvbG9yOmluaGVyaXR9Lmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCwubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLXRleHR7Y29sb3I6I2M3ZGRlZn0ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3N7Y29sb3I6IzNjNzYzZDtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDh9YS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyxidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3N7Y29sb3I6IzNjNzYzZH1hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5ne2NvbG9yOmluaGVyaXR9YS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cyxhLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmhvdmVyLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cyxidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6aG92ZXJ7Y29sb3I6IzNjNzYzZDtiYWNrZ3JvdW5kLWNvbG9yOiNkMGU5YzZ9YS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmUsYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMsYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSxidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzYzc2M2Q7Ym9yZGVyLWNvbG9yOiMzYzc2M2R9Lmxpc3QtZ3JvdXAtaXRlbS1pbmZve2NvbG9yOiMzMTcwOGY7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3fWEubGlzdC1ncm91cC1pdGVtLWluZm8sYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZve2NvbG9yOiMzMTcwOGZ9YS5saXN0LWdyb3VwLWl0ZW0taW5mbyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZ3tjb2xvcjppbmhlcml0fWEubGlzdC1ncm91cC1pdGVtLWluZm86Zm9jdXMsYS5saXN0LWdyb3VwLWl0ZW0taW5mbzpob3ZlcixidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm86Zm9jdXMsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVye2NvbG9yOiMzMTcwOGY7YmFja2dyb3VuZC1jb2xvcjojYzRlM2YzfWEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLGEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmZvY3VzLGEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyxidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzE3MDhmO2JvcmRlci1jb2xvcjojMzE3MDhmfS5saXN0LWdyb3VwLWl0ZW0td2FybmluZ3tjb2xvcjojOGE2ZDNiO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlM31hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZ3tjb2xvcjojOGE2ZDNifWEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmd7Y29sb3I6aW5oZXJpdH1hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmZvY3VzLGEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6aG92ZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmZvY3VzLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3Zlcntjb2xvcjojOGE2ZDNiO2JhY2tncm91bmQtY29sb3I6I2ZhZjJjY31hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSxhLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpmb2N1cyxhLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlcixidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6Zm9jdXMsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzhhNmQzYjtib3JkZXItY29sb3I6IzhhNmQzYn0ubGlzdC1ncm91cC1pdGVtLWRhbmdlcntjb2xvcjojYTk0NDQyO2JhY2tncm91bmQtY29sb3I6I2YyZGVkZX1hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXJ7Y29sb3I6I2E5NDQ0Mn1hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZ3tjb2xvcjppbmhlcml0fWEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cyxhLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6aG92ZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6Zm9jdXMsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6aG92ZXJ7Y29sb3I6I2E5NDQ0MjtiYWNrZ3JvdW5kLWNvbG9yOiNlYmNjY2N9YS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZSxhLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzLGEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpmb2N1cyxidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNhOTQ0NDI7Ym9yZGVyLWNvbG9yOiNhOTQ0NDJ9Lmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5ne21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjVweH0ubGlzdC1ncm91cC1pdGVtLXRleHR7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjEuM30ucGFuZWx7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpO2JveC1zaGFkb3c6MCAxcHggMXB4IHJnYmEoMCwwLDAsLjA1KX0ucGFuZWwtYm9keXtwYWRkaW5nOjE1cHh9LnBhbmVsLWhlYWRpbmd7cGFkZGluZzoxMHB4IDE1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4fS5wYW5lbC1oZWFkaW5nPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOmluaGVyaXR9LnBhbmVsLXRpdGxle21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE2cHg7Y29sb3I6aW5oZXJpdH0ucGFuZWwtdGl0bGU+LnNtYWxsLC5wYW5lbC10aXRsZT4uc21hbGw+YSwucGFuZWwtdGl0bGU+YSwucGFuZWwtdGl0bGU+c21hbGwsLnBhbmVsLXRpdGxlPnNtYWxsPmF7Y29sb3I6aW5oZXJpdH0ucGFuZWwtZm9vdGVye3BhZGRpbmc6MTBweCAxNXB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweH0ucGFuZWw+Lmxpc3QtZ3JvdXAsLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cHttYXJnaW4tYm90dG9tOjB9LnBhbmVsPi5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0sLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVte2JvcmRlci13aWR0aDoxcHggMDtib3JkZXItcmFkaXVzOjB9LnBhbmVsPi5saXN0LWdyb3VwOmZpcnN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQsLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxke2JvcmRlci10b3A6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHh9LnBhbmVsPi5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkLC5wYW5lbD4ucGFuZWwtY29sbGFwc2U+Lmxpc3QtZ3JvdXA6bGFzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweH0ucGFuZWw+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LnBhbmVsLWhlYWRpbmcrLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjB9Lmxpc3QtZ3JvdXArLnBhbmVsLWZvb3Rlcntib3JkZXItdG9wLXdpZHRoOjB9LnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4udGFibGUsLnBhbmVsPi50YWJsZSwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxle21hcmdpbi1ib3R0b206MH0ucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi50YWJsZSBjYXB0aW9uLC5wYW5lbD4udGFibGUgY2FwdGlvbiwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlIGNhcHRpb257cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4fS5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4fS5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4fS5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4fS5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4fS5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHh9LnBhbmVsPi5wYW5lbC1ib2R5Ky50YWJsZSwucGFuZWw+LnBhbmVsLWJvZHkrLnRhYmxlLXJlc3BvbnNpdmUsLnBhbmVsPi50YWJsZSsucGFuZWwtYm9keSwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmUrLnBhbmVsLWJvZHl7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0ucGFuZWw+LnRhYmxlPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkLC5wYW5lbD4udGFibGU+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGh7Ym9yZGVyLXRvcDowfS5wYW5lbD4udGFibGUtYm9yZGVyZWQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZHtib3JkZXI6MH0ucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDowfS5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpsYXN0LWNoaWxke2JvcmRlci1yaWdodDowfS5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI6Zmlyc3QtY2hpbGQ+dGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpmaXJzdC1jaGlsZD50aCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyOmZpcnN0LWNoaWxkPnRkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGgsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpmaXJzdC1jaGlsZD50ZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmZpcnN0LWNoaWxkPnRoLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cjpmaXJzdC1jaGlsZD50aHtib3JkZXItYm90dG9tOjB9LnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpsYXN0LWNoaWxkPnRkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI6bGFzdC1jaGlsZD50aCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cjpsYXN0LWNoaWxkPnRoLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI6bGFzdC1jaGlsZD50ZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cjpsYXN0LWNoaWxkPnRkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI6bGFzdC1jaGlsZD50aHtib3JkZXItYm90dG9tOjB9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZle21hcmdpbi1ib3R0b206MDtib3JkZXI6MH0ucGFuZWwtZ3JvdXB7bWFyZ2luLWJvdHRvbToyMHB4fS5wYW5lbC1ncm91cCAucGFuZWx7bWFyZ2luLWJvdHRvbTowO2JvcmRlci1yYWRpdXM6NHB4fS5wYW5lbC1ncm91cCAucGFuZWwrLnBhbmVse21hcmdpbi10b3A6NXB4fS5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZ3tib3JkZXItYm90dG9tOjB9LnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cCwucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXJ7Ym9yZGVyLXRvcDowfS5wYW5lbC1ncm91cCAucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZSAucGFuZWwtYm9keXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkfS5wYW5lbC1kZWZhdWx0e2JvcmRlci1jb2xvcjojZGRkfS5wYW5lbC1kZWZhdWx0Pi5wYW5lbC1oZWFkaW5ne2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci1jb2xvcjojZGRkfS5wYW5lbC1kZWZhdWx0Pi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keXtib3JkZXItdG9wLWNvbG9yOiNkZGR9LnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWhlYWRpbmcgLmJhZGdle2NvbG9yOiNmNWY1ZjU7YmFja2dyb3VuZC1jb2xvcjojMzMzfS5wYW5lbC1kZWZhdWx0Pi5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci1ib3R0b20tY29sb3I6I2RkZH0ucGFuZWwtcHJpbWFyeXtib3JkZXItY29sb3I6IzMzN2FiN30ucGFuZWwtcHJpbWFyeT4ucGFuZWwtaGVhZGluZ3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzMzN2FiNztib3JkZXItY29sb3I6IzMzN2FiN30ucGFuZWwtcHJpbWFyeT4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLXRvcC1jb2xvcjojMzM3YWI3fS5wYW5lbC1wcmltYXJ5Pi5wYW5lbC1oZWFkaW5nIC5iYWRnZXtjb2xvcjojMzM3YWI3O2JhY2tncm91bmQtY29sb3I6I2ZmZn0ucGFuZWwtcHJpbWFyeT4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keXtib3JkZXItYm90dG9tLWNvbG9yOiMzMzdhYjd9LnBhbmVsLXN1Y2Nlc3N7Ym9yZGVyLWNvbG9yOiNkNmU5YzZ9LnBhbmVsLXN1Y2Nlc3M+LnBhbmVsLWhlYWRpbmd7Y29sb3I6IzNjNzYzZDtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDg7Ym9yZGVyLWNvbG9yOiNkNmU5YzZ9LnBhbmVsLXN1Y2Nlc3M+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci10b3AtY29sb3I6I2Q2ZTljNn0ucGFuZWwtc3VjY2Vzcz4ucGFuZWwtaGVhZGluZyAuYmFkZ2V7Y29sb3I6I2RmZjBkODtiYWNrZ3JvdW5kLWNvbG9yOiMzYzc2M2R9LnBhbmVsLXN1Y2Nlc3M+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZDZlOWM2fS5wYW5lbC1pbmZve2JvcmRlci1jb2xvcjojYmNlOGYxfS5wYW5lbC1pbmZvPi5wYW5lbC1oZWFkaW5ne2NvbG9yOiMzMTcwOGY7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojYmNlOGYxfS5wYW5lbC1pbmZvPi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keXtib3JkZXItdG9wLWNvbG9yOiNiY2U4ZjF9LnBhbmVsLWluZm8+LnBhbmVsLWhlYWRpbmcgLmJhZGdle2NvbG9yOiNkOWVkZjc7YmFja2dyb3VuZC1jb2xvcjojMzE3MDhmfS5wYW5lbC1pbmZvPi5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci1ib3R0b20tY29sb3I6I2JjZThmMX0ucGFuZWwtd2FybmluZ3tib3JkZXItY29sb3I6I2ZhZWJjY30ucGFuZWwtd2FybmluZz4ucGFuZWwtaGVhZGluZ3tjb2xvcjojOGE2ZDNiO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXItY29sb3I6I2ZhZWJjY30ucGFuZWwtd2FybmluZz4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLXRvcC1jb2xvcjojZmFlYmNjfS5wYW5lbC13YXJuaW5nPi5wYW5lbC1oZWFkaW5nIC5iYWRnZXtjb2xvcjojZmNmOGUzO2JhY2tncm91bmQtY29sb3I6IzhhNmQzYn0ucGFuZWwtd2FybmluZz4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keXtib3JkZXItYm90dG9tLWNvbG9yOiNmYWViY2N9LnBhbmVsLWRhbmdlcntib3JkZXItY29sb3I6I2ViY2NkMX0ucGFuZWwtZGFuZ2VyPi5wYW5lbC1oZWFkaW5ne2NvbG9yOiNhOTQ0NDI7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlO2JvcmRlci1jb2xvcjojZWJjY2QxfS5wYW5lbC1kYW5nZXI+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci10b3AtY29sb3I6I2ViY2NkMX0ucGFuZWwtZGFuZ2VyPi5wYW5lbC1oZWFkaW5nIC5iYWRnZXtjb2xvcjojZjJkZWRlO2JhY2tncm91bmQtY29sb3I6I2E5NDQ0Mn0ucGFuZWwtZGFuZ2VyPi5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci1ib3R0b20tY29sb3I6I2ViY2NkMX0uZW1iZWQtcmVzcG9uc2l2ZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3BhZGRpbmc6MDtvdmVyZmxvdzpoaWRkZW59LmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSwuZW1iZWQtcmVzcG9uc2l2ZSBlbWJlZCwuZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LC5lbWJlZC1yZXNwb25zaXZlIHZpZGVve3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjowfS5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5e3BhZGRpbmctYm90dG9tOjU2LjI1JX0uZW1iZWQtcmVzcG9uc2l2ZS00Ynkze3BhZGRpbmctYm90dG9tOjc1JX0ud2VsbHttaW4taGVpZ2h0OjIwcHg7cGFkZGluZzoxOXB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjZTNlM2UzO2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA1KX0ud2VsbCBibG9ja3F1b3Rle2JvcmRlci1jb2xvcjojZGRkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xNSl9LndlbGwtbGd7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NnB4fS53ZWxsLXNte3BhZGRpbmc6OXB4O2JvcmRlci1yYWRpdXM6M3B4fS5jbG9zZXtmbG9hdDpyaWdodDtmb250LXNpemU6MjFweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojMDAwO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtmaWx0ZXI6YWxwaGEob3BhY2l0eT0yMCk7b3BhY2l0eTouMn0uY2xvc2U6Zm9jdXMsLmNsb3NlOmhvdmVye2NvbG9yOiMwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NTApO29wYWNpdHk6LjV9YnV0dG9uLmNsb3Nley13ZWJraXQtYXBwZWFyYW5jZTpub25lO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0ubW9kYWwtb3BlbntvdmVyZmxvdzpoaWRkZW59Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTA1MDtkaXNwbGF5Om5vbmU7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO291dGxpbmU6MH0ubW9kYWwuZmFkZSAubW9kYWwtZGlhbG9ney13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7LW8tdHJhbnNpdGlvbjotby10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLW91dDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMjUlKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0yNSUpOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMjUlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTI1JSl9Lm1vZGFsLmluIC5tb2RhbC1kaWFsb2d7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS5tb2RhbC1vcGVuIC5tb2RhbHtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG99Lm1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDphdXRvO21hcmdpbjoxMHB4fS5tb2RhbC1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQtY29sb3I6I2ZmZjstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMik7Ym9yZGVyLXJhZGl1czo2cHg7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzowIDNweCA5cHggcmdiYSgwLDAsMCwuNSk7Ym94LXNoYWRvdzowIDNweCA5cHggcmdiYSgwLDAsMCwuNSl9Lm1vZGFsLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTA0MDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1vZGFsLWJhY2tkcm9wLmZhZGV7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7b3BhY2l0eTowfS5tb2RhbC1iYWNrZHJvcC5pbntmaWx0ZXI6YWxwaGEob3BhY2l0eT01MCk7b3BhY2l0eTouNX0ubW9kYWwtaGVhZGVye3BhZGRpbmc6MTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS5tb2RhbC1oZWFkZXIgLmNsb3Nle21hcmdpbi10b3A6LTJweH0ubW9kYWwtdGl0bGV7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MS40Mjg1NzE0M30ubW9kYWwtYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE1cHh9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjE1cHg7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS5tb2RhbC1mb290ZXIgLmJ0bisuYnRue21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVmdDo1cHh9Lm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jaysuYnRuLWJsb2Nre21hcmdpbi1sZWZ0OjB9Lm1vZGFsLXNjcm9sbGJhci1tZWFzdXJle3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTk5OXB4O3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6c2Nyb2xsfUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsubW9kYWwtZGlhbG9ne3dpZHRoOjYwMHB4O21hcmdpbjozMHB4IGF1dG99Lm1vZGFsLWNvbnRlbnR7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDE1cHggcmdiYSgwLDAsMCwuNSk7Ym94LXNoYWRvdzowIDVweCAxNXB4IHJnYmEoMCwwLDAsLjUpfS5tb2RhbC1zbXt3aWR0aDozMDBweH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5tb2RhbC1sZ3t3aWR0aDo5MDBweH19LnRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDcwO2Rpc3BsYXk6YmxvY2s7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mzt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXNoYWRvdzpub25lO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtYnJlYWs6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7d29yZC13cmFwOm5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7b3BhY2l0eTowO2xpbmUtYnJlYWs6YXV0b30udG9vbHRpcC5pbntmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCk7b3BhY2l0eTouOX0udG9vbHRpcC50b3B7cGFkZGluZzo1cHggMDttYXJnaW4tdG9wOi0zcHh9LnRvb2x0aXAucmlnaHR7cGFkZGluZzowIDVweDttYXJnaW4tbGVmdDozcHh9LnRvb2x0aXAuYm90dG9te3BhZGRpbmc6NXB4IDA7bWFyZ2luLXRvcDozcHh9LnRvb2x0aXAubGVmdHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0Oi0zcHh9LnRvb2x0aXAtaW5uZXJ7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDhweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDtib3JkZXItcmFkaXVzOjRweH0udG9vbHRpcC1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnRvb2x0aXAudG9wIC50b29sdGlwLWFycm93e2JvdHRvbTowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXdpZHRoOjVweCA1cHggMDtib3JkZXItdG9wLWNvbG9yOiMwMDB9LnRvb2x0aXAudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3d7cmlnaHQ6NXB4O2JvdHRvbTowO21hcmdpbi1ib3R0b206LTVweDtib3JkZXItd2lkdGg6NXB4IDVweCAwO2JvcmRlci10b3AtY29sb3I6IzAwMH0udG9vbHRpcC50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjA7bGVmdDo1cHg7bWFyZ2luLWJvdHRvbTotNXB4O2JvcmRlci13aWR0aDo1cHggNXB4IDA7Ym9yZGVyLXRvcC1jb2xvcjojMDAwfS50b29sdGlwLnJpZ2h0IC50b29sdGlwLWFycm93e3RvcDo1MCU7bGVmdDowO21hcmdpbi10b3A6LTVweDtib3JkZXItd2lkdGg6NXB4IDVweCA1cHggMDtib3JkZXItcmlnaHQtY29sb3I6IzAwMH0udG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93e3RvcDo1MCU7cmlnaHQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHg7Ym9yZGVyLWxlZnQtY29sb3I6IzAwMH0udG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3d7dG9wOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItd2lkdGg6MCA1cHggNXB4O2JvcmRlci1ib3R0b20tY29sb3I6IzAwMH0udG9vbHRpcC5ib3R0b20tbGVmdCAudG9vbHRpcC1hcnJvd3t0b3A6MDtyaWdodDo1cHg7bWFyZ2luLXRvcDotNXB4O2JvcmRlci13aWR0aDowIDVweCA1cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwfS50b29sdGlwLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvd3t0b3A6MDtsZWZ0OjVweDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXdpZHRoOjAgNXB4IDVweDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDB9LnBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTA2MDtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjI3NnB4O3BhZGRpbmc6MXB4O2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7dGV4dC1hbGlnbjpsZWZ0O3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3dvcmQtd3JhcDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2ZmZjstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMik7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpO2xpbmUtYnJlYWs6YXV0b30ucG9wb3Zlci50b3B7bWFyZ2luLXRvcDotMTBweH0ucG9wb3Zlci5yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5wb3BvdmVyLmJvdHRvbXttYXJnaW4tdG9wOjEwcHh9LnBvcG92ZXIubGVmdHttYXJnaW4tbGVmdDotMTBweH0ucG9wb3Zlci10aXRsZXtwYWRkaW5nOjhweCAxNHB4O21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NXB4IDVweCAwIDB9LnBvcG92ZXItY29udGVudHtwYWRkaW5nOjlweCAxNHB4fS5wb3BvdmVyPi5hcnJvdywucG9wb3Zlcj4uYXJyb3c6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnBvcG92ZXI+LmFycm93e2JvcmRlci13aWR0aDoxMXB4fS5wb3BvdmVyPi5hcnJvdzphZnRlcntjb250ZW50OiIiO2JvcmRlci13aWR0aDoxMHB4fS5wb3BvdmVyLnRvcD4uYXJyb3d7Ym90dG9tOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjI1KTtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIudG9wPi5hcnJvdzphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi0xMHB4O2NvbnRlbnQ6IiAiO2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIucmlnaHQ+LmFycm93e3RvcDo1MCU7bGVmdDotMTFweDttYXJnaW4tdG9wOi0xMXB4O2JvcmRlci1yaWdodC1jb2xvcjojOTk5O2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4yNSk7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ucG9wb3Zlci5yaWdodD4uYXJyb3c6YWZ0ZXJ7Ym90dG9tOi0xMHB4O2xlZnQ6MXB4O2NvbnRlbnQ6IiAiO2JvcmRlci1yaWdodC1jb2xvcjojZmZmO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBvcG92ZXIuYm90dG9tPi5hcnJvd3t0b3A6LTExcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTExcHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjI1KX0ucG9wb3Zlci5ib3R0b20+LmFycm93OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTEwcHg7Y29udGVudDoiICI7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ucG9wb3Zlci5sZWZ0Pi5hcnJvd3t0b3A6NTAlO3JpZ2h0Oi0xMXB4O21hcmdpbi10b3A6LTExcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6Izk5OTtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4yNSl9LnBvcG92ZXIubGVmdD4uYXJyb3c6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotMTBweDtjb250ZW50OiIgIjtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojZmZmfS5jYXJvdXNlbHtwb3NpdGlvbjpyZWxhdGl2ZX0uY2Fyb3VzZWwtaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59LmNhcm91c2VsLWlubmVyPi5pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTstd2Via2l0LXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW8tdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDt0cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0fS5jYXJvdXNlbC1pbm5lcj4uaXRlbT5hPmltZywuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+aW1ne2xpbmUtaGVpZ2h0OjF9QG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksKC13ZWJraXQtdHJhbnNmb3JtLTNkKXsuY2Fyb3VzZWwtaW5uZXI+Lml0ZW17LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC42cyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOi1vLXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2UtaW4tb3V0Oy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47LXdlYmtpdC1wZXJzcGVjdGl2ZToxMDAwcHg7cGVyc3BlY3RpdmU6MTAwMHB4fS5jYXJvdXNlbC1pbm5lcj4uaXRlbS5hY3RpdmUucmlnaHQsLmNhcm91c2VsLWlubmVyPi5pdGVtLm5leHR7bGVmdDowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfS5jYXJvdXNlbC1pbm5lcj4uaXRlbS5hY3RpdmUubGVmdCwuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0ucHJldntsZWZ0OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX0uY2Fyb3VzZWwtaW5uZXI+Lml0ZW0uYWN0aXZlLC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5uZXh0LmxlZnQsLmNhcm91c2VsLWlubmVyPi5pdGVtLnByZXYucmlnaHR7bGVmdDowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApfX0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZSwuY2Fyb3VzZWwtaW5uZXI+Lm5leHQsLmNhcm91c2VsLWlubmVyPi5wcmV2e2Rpc3BsYXk6YmxvY2t9LmNhcm91c2VsLWlubmVyPi5hY3RpdmV7bGVmdDowfS5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0uY2Fyb3VzZWwtaW5uZXI+Lm5leHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ucHJldntsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dC5sZWZ0LC5jYXJvdXNlbC1pbm5lcj4ucHJldi5yaWdodHtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUubGVmdHtsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLnJpZ2h0e2xlZnQ6MTAwJX0uY2Fyb3VzZWwtY29udHJvbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTUlO2ZvbnQtc2l6ZToyMHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtmaWx0ZXI6YWxwaGEob3BhY2l0eT01MCk7b3BhY2l0eTouNX0uY2Fyb3VzZWwtY29udHJvbC5sZWZ0e2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDAsMCwwLC41KSAwLHJnYmEoMCwwLDAsLjAwMDEpIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KGxlZnQscmdiYSgwLDAsMCwuNSkgMCxyZ2JhKDAsMCwwLC4wMDAxKSAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLHJpZ2h0IHRvcCxmcm9tKHJnYmEoMCwwLDAsLjUpKSx0byhyZ2JhKDAsMCwwLC4wMDAxKSkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjUpIDAscmdiYSgwLDAsMCwuMDAwMSkgMTAwJSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjODAwMDAwMDAnLCBlbmRDb2xvcnN0cj0nIzAwMDAwMDAwJywgR3JhZGllbnRUeXBlPTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5jYXJvdXNlbC1jb250cm9sLnJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDAsMCwwLC4wMDAxKSAwLHJnYmEoMCwwLDAsLjUpIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KGxlZnQscmdiYSgwLDAsMCwuMDAwMSkgMCxyZ2JhKDAsMCwwLC41KSAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLHJpZ2h0IHRvcCxmcm9tKHJnYmEoMCwwLDAsLjAwMDEpKSx0byhyZ2JhKDAsMCwwLC41KSkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjAwMDEpIDAscmdiYSgwLDAsMCwuNSkgMTAwJSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjMDAwMDAwMDAnLCBlbmRDb2xvcnN0cj0nIzgwMDAwMDAwJywgR3JhZGllbnRUeXBlPTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5jYXJvdXNlbC1jb250cm9sOmZvY3VzLC5jYXJvdXNlbC1jb250cm9sOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7ZmlsdGVyOmFscGhhKG9wYWNpdHk9OTApO291dGxpbmU6MDtvcGFjaXR5Oi45fS5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCwuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt6LWluZGV4OjU7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDotMTBweH0uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCwuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2e2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMHB4fS5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCwuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0e3JpZ2h0OjUwJTttYXJnaW4tcmlnaHQ6LTEwcHh9LmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCwuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2e3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6c2VyaWY7bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2OmJlZm9yZXtjb250ZW50OidcMjAzOSd9LmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dDpiZWZvcmV7Y29udGVudDonXDIwM2EnfS5jYXJvdXNlbC1pbmRpY2F0b3Jze3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbToxMHB4O2xlZnQ6NTAlO3otaW5kZXg6MTU7d2lkdGg6NjAlO3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0Oi0zMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGlzdC1zdHlsZTpub25lfS5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7bWFyZ2luOjFweDt0ZXh0LWluZGVudDotOTk5cHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwXDk7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjoxcHggc29saWQgI2ZmZjtib3JkZXItcmFkaXVzOjEwcHh9LmNhcm91c2VsLWluZGljYXRvcnMgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxNSU7Ym90dG9tOjIwcHg7bGVmdDoxNSU7ei1pbmRleDoxMDtwYWRkaW5nLXRvcDoyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwuNil9LmNhcm91c2VsLWNhcHRpb24gLmJ0bnt0ZXh0LXNoYWRvdzpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpey5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCwuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXZ7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDttYXJnaW4tdG9wOi0xMHB4O2ZvbnQtc2l6ZTozMHB4fS5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXZ7bWFyZ2luLWxlZnQ6LTEwcHh9LmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHR7bWFyZ2luLXJpZ2h0Oi0xMHB4fS5jYXJvdXNlbC1jYXB0aW9ue3JpZ2h0OjIwJTtsZWZ0OjIwJTtwYWRkaW5nLWJvdHRvbTozMHB4fS5jYXJvdXNlbC1pbmRpY2F0b3Jze2JvdHRvbToyMHB4fX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6YWZ0ZXIsLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwOmJlZm9yZSwuYnRuLXRvb2xiYXI6YWZ0ZXIsLmJ0bi10b29sYmFyOmJlZm9yZSwuY2xlYXJmaXg6YWZ0ZXIsLmNsZWFyZml4OmJlZm9yZSwuY29udGFpbmVyLWZsdWlkOmFmdGVyLC5jb250YWluZXItZmx1aWQ6YmVmb3JlLC5jb250YWluZXI6YWZ0ZXIsLmNvbnRhaW5lcjpiZWZvcmUsLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIsLmRsLWhvcml6b250YWwgZGQ6YmVmb3JlLC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIsLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDpiZWZvcmUsLm1vZGFsLWZvb3RlcjphZnRlciwubW9kYWwtZm9vdGVyOmJlZm9yZSwubW9kYWwtaGVhZGVyOmFmdGVyLC5tb2RhbC1oZWFkZXI6YmVmb3JlLC5uYXY6YWZ0ZXIsLm5hdjpiZWZvcmUsLm5hdmJhci1jb2xsYXBzZTphZnRlciwubmF2YmFyLWNvbGxhcHNlOmJlZm9yZSwubmF2YmFyLWhlYWRlcjphZnRlciwubmF2YmFyLWhlYWRlcjpiZWZvcmUsLm5hdmJhcjphZnRlciwubmF2YmFyOmJlZm9yZSwucGFnZXI6YWZ0ZXIsLnBhZ2VyOmJlZm9yZSwucGFuZWwtYm9keTphZnRlciwucGFuZWwtYm9keTpiZWZvcmUsLnJvdzphZnRlciwucm93OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6IiAifS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDphZnRlciwuYnRuLXRvb2xiYXI6YWZ0ZXIsLmNsZWFyZml4OmFmdGVyLC5jb250YWluZXItZmx1aWQ6YWZ0ZXIsLmNvbnRhaW5lcjphZnRlciwuZGwtaG9yaXpvbnRhbCBkZDphZnRlciwuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmFmdGVyLC5tb2RhbC1mb290ZXI6YWZ0ZXIsLm1vZGFsLWhlYWRlcjphZnRlciwubmF2OmFmdGVyLC5uYXZiYXItY29sbGFwc2U6YWZ0ZXIsLm5hdmJhci1oZWFkZXI6YWZ0ZXIsLm5hdmJhcjphZnRlciwucGFnZXI6YWZ0ZXIsLnBhbmVsLWJvZHk6YWZ0ZXIsLnJvdzphZnRlcntjbGVhcjpib3RofS5jZW50ZXItYmxvY2t7ZGlzcGxheTpibG9jazttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5oaWRle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnNob3d7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0udGV4dC1oaWRle2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5oaWRkZW57ZGlzcGxheTpub25lIWltcG9ydGFudH0uYWZmaXh7cG9zaXRpb246Zml4ZWR9QC1tcy12aWV3cG9ydHt3aWR0aDpkZXZpY2Utd2lkdGh9LnZpc2libGUtbGcsLnZpc2libGUtbWQsLnZpc2libGUtc20sLnZpc2libGUteHN7ZGlzcGxheTpub25lIWltcG9ydGFudH0udmlzaWJsZS1sZy1ibG9jaywudmlzaWJsZS1sZy1pbmxpbmUsLnZpc2libGUtbGctaW5saW5lLWJsb2NrLC52aXNpYmxlLW1kLWJsb2NrLC52aXNpYmxlLW1kLWlubGluZSwudmlzaWJsZS1tZC1pbmxpbmUtYmxvY2ssLnZpc2libGUtc20tYmxvY2ssLnZpc2libGUtc20taW5saW5lLC52aXNpYmxlLXNtLWlubGluZS1ibG9jaywudmlzaWJsZS14cy1ibG9jaywudmlzaWJsZS14cy1pbmxpbmUsLnZpc2libGUteHMtaW5saW5lLWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey52aXNpYmxlLXhze2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fXRhYmxlLnZpc2libGUteHN7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9dHIudmlzaWJsZS14c3tkaXNwbGF5OnRhYmxlLXJvdyFpbXBvcnRhbnR9dGQudmlzaWJsZS14cyx0aC52aXNpYmxlLXhze2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsudmlzaWJsZS14cy1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey52aXNpYmxlLXhzLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsudmlzaWJsZS14cy1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTkxcHgpey52aXNpYmxlLXNte2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fXRhYmxlLnZpc2libGUtc217ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9dHIudmlzaWJsZS1zbXtkaXNwbGF5OnRhYmxlLXJvdyFpbXBvcnRhbnR9dGQudmlzaWJsZS1zbSx0aC52aXNpYmxlLXNte2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5OTFweCl7LnZpc2libGUtc20tYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5OTFweCl7LnZpc2libGUtc20taW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk5MXB4KXsudmlzaWJsZS1zbS1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCkgYW5kIChtYXgtd2lkdGg6MTE5OXB4KXsudmlzaWJsZS1tZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH10YWJsZS52aXNpYmxlLW1ke2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fXRyLnZpc2libGUtbWR7ZGlzcGxheTp0YWJsZS1yb3chaW1wb3J0YW50fXRkLnZpc2libGUtbWQsdGgudmlzaWJsZS1tZHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCkgYW5kIChtYXgtd2lkdGg6MTE5OXB4KXsudmlzaWJsZS1tZC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCl7LnZpc2libGUtbWQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCl7LnZpc2libGUtbWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudmlzaWJsZS1sZ3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH10YWJsZS52aXNpYmxlLWxne2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fXRyLnZpc2libGUtbGd7ZGlzcGxheTp0YWJsZS1yb3chaW1wb3J0YW50fXRkLnZpc2libGUtbGcsdGgudmlzaWJsZS1sZ3tkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey52aXNpYmxlLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey52aXNpYmxlLWxnLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnZpc2libGUtbGctaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey5oaWRkZW4teHN7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk5MXB4KXsuaGlkZGVuLXNte2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KSBhbmQgKG1heC13aWR0aDoxMTk5cHgpey5oaWRkZW4tbWR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuaGlkZGVuLWxne2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS52aXNpYmxlLXByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey52aXNpYmxlLXByaW50e2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fXRhYmxlLnZpc2libGUtcHJpbnR7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9dHIudmlzaWJsZS1wcmludHtkaXNwbGF5OnRhYmxlLXJvdyFpbXBvcnRhbnR9dGQudmlzaWJsZS1wcmludCx0aC52aXNpYmxlLXByaW50e2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9fS52aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey52aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0udmlzaWJsZS1wcmludC1pbmxpbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LnZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19LnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey52aXNpYmxlLXByaW50LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9fUBtZWRpYSBwcmludHsuaGlkZGVuLXByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fQorLyojIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLm1pbi5jc3MubWFwICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5taW4uY3NzLm1hcCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAubWluLmNzcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0OWJiMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAubWluLmNzcy5tYXAKQEAgLTAsMCArMSBAQAoreyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxlc3Mvbm9ybWFsaXplLmxlc3MiLCJsZXNzL3ByaW50Lmxlc3MiLCJib290c3RyYXAuY3NzIiwiZGlzdC9jc3MvYm9vdHN0cmFwLmNzcyIsImxlc3MvZ2x5cGhpY29ucy5sZXNzIiwibGVzcy9zY2FmZm9sZGluZy5sZXNzIiwibGVzcy9taXhpbnMvdmVuZG9yLXByZWZpeGVzLmxlc3MiLCJsZXNzL21peGlucy90YWItZm9jdXMubGVzcyIsImxlc3MvbWl4aW5zL2ltYWdlLmxlc3MiLCJsZXNzL3R5cGUubGVzcyIsImxlc3MvbWl4aW5zL3RleHQtZW1waGFzaXMubGVzcyIsImxlc3MvbWl4aW5zL2JhY2tncm91bmQtdmFyaWFudC5sZXNzIiwibGVzcy9taXhpbnMvdGV4dC1vdmVyZmxvdy5sZXNzIiwibGVzcy9jb2RlLmxlc3MiLCJsZXNzL2dyaWQubGVzcyIsImxlc3MvbWl4aW5zL2dyaWQubGVzcyIsImxlc3MvbWl4aW5zL2dyaWQtZnJhbWV3b3JrLmxlc3MiLCJsZXNzL3RhYmxlcy5sZXNzIiwibGVzcy9taXhpbnMvdGFibGUtcm93Lmxlc3MiLCJsZXNzL2Zvcm1zLmxlc3MiLCJsZXNzL21peGlucy9mb3Jtcy5sZXNzIiwibGVzcy9idXR0b25zLmxlc3MiLCJsZXNzL21peGlucy9idXR0b25zLmxlc3MiLCJsZXNzL21peGlucy9vcGFjaXR5Lmxlc3MiLCJsZXNzL2NvbXBvbmVudC1hbmltYXRpb25zLmxlc3MiLCJsZXNzL2Ryb3Bkb3ducy5sZXNzIiwibGVzcy9taXhpbnMvbmF2LWRpdmlkZXIubGVzcyIsImxlc3MvbWl4aW5zL3Jlc2V0LWZpbHRlci5sZXNzIiwibGVzcy9idXR0b24tZ3JvdXBzLmxlc3MiLCJsZXNzL21peGlucy9ib3JkZXItcmFkaXVzLmxlc3MiLCJsZXNzL2lucHV0LWdyb3Vwcy5sZXNzIiwibGVzcy9uYXZzLmxlc3MiLCJsZXNzL25hdmJhci5sZXNzIiwibGVzcy9taXhpbnMvbmF2LXZlcnRpY2FsLWFsaWduLmxlc3MiLCJsZXNzL3V0aWxpdGllcy5sZXNzIiwibGVzcy9icmVhZGNydW1icy5sZXNzIiwibGVzcy9wYWdpbmF0aW9uLmxlc3MiLCJsZXNzL21peGlucy9wYWdpbmF0aW9uLmxlc3MiLCJsZXNzL3BhZ2VyLmxlc3MiLCJsZXNzL2xhYmVscy5sZXNzIiwibGVzcy9taXhpbnMvbGFiZWxzLmxlc3MiLCJsZXNzL2JhZGdlcy5sZXNzIiwibGVzcy9qdW1ib3Ryb24ubGVzcyIsImxlc3MvdGh1bWJuYWlscy5sZXNzIiwibGVzcy9hbGVydHMubGVzcyIsImxlc3MvbWl4aW5zL2FsZXJ0cy5sZXNzIiwibGVzcy9wcm9ncmVzcy1iYXJzLmxlc3MiLCJsZXNzL21peGlucy9ncmFkaWVudHMubGVzcyIsImxlc3MvbWl4aW5zL3Byb2dyZXNzLWJhci5sZXNzIiwibGVzcy9tZWRpYS5sZXNzIiwibGVzcy9saXN0LWdyb3VwLmxlc3MiLCJsZXNzL21peGlucy9saXN0LWdyb3VwLmxlc3MiLCJsZXNzL3BhbmVscy5sZXNzIiwibGVzcy9taXhpbnMvcGFuZWxzLmxlc3MiLCJsZXNzL3Jlc3BvbnNpdmUtZW1iZWQubGVzcyIsImxlc3Mvd2VsbHMubGVzcyIsImxlc3MvY2xvc2UubGVzcyIsImxlc3MvbW9kYWxzLmxlc3MiLCJsZXNzL3Rvb2x0aXAubGVzcyIsImxlc3MvbWl4aW5zL3Jlc2V0LXRleHQubGVzcyIsImxlc3MvcG9wb3ZlcnMubGVzcyIsImxlc3MvY2Fyb3VzZWwubGVzcyIsImxlc3MvbWl4aW5zL2NsZWFyZml4Lmxlc3MiLCJsZXNzL21peGlucy9jZW50ZXItYmxvY2subGVzcyIsImxlc3MvbWl4aW5zL2hpZGUtdGV4dC5sZXNzIiwibGVzcy9yZXNwb25zaXZlLXV0aWxpdGllcy5sZXNzIiwibGVzcy9taXhpbnMvcmVzcG9uc2l2ZS12aXNpYmlsaXR5Lmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs0RUFRQSxLQUNFLFlBQUEsV0FDQSx5QkFBQSxLQUNBLHFCQUFBLEtBT0YsS0FDRSxPQUFBLEVBYUYsUUFBQSxNQUFBLFFBQUEsV0FBQSxPQUFBLE9BQUEsT0FBQSxPQUFBLEtBQUEsS0FBQSxJQUFBLFFBQUEsUUFhRSxRQUFBLE1BUUYsTUFBQSxPQUFBLFNBQUEsTUFJRSxRQUFBLGFBQ0EsZUFBQSxTQVFGLHNCQUNFLFFBQUEsS0FDQSxPQUFBLEVBUUYsU0FBQSxTQUVFLFFBQUEsS0FVRixFQUNFLGlCQUFBLFlBUUYsU0FBQSxRQUVFLFFBQUEsRUFVRixZQUNFLGNBQUEsSUFBQSxPQU9GLEVBQUEsT0FFRSxZQUFBLElBT0YsSUFDRSxXQUFBLE9BUUYsR0FDRSxPQUFBLE1BQUEsRUFDQSxVQUFBLElBT0YsS0FDRSxNQUFBLEtBQ0EsV0FBQSxLQU9GLE1BQ0UsVUFBQSxJQU9GLElBQUEsSUFFRSxTQUFBLFNBQ0EsVUFBQSxJQUNBLFlBQUEsRUFDQSxlQUFBLFNBR0YsSUFDRSxJQUFBLE1BR0YsSUFDRSxPQUFBLE9BVUYsSUFDRSxPQUFBLEVBT0YsZUFDRSxTQUFBLE9BVUYsT0FDRSxPQUFBLElBQUEsS0FPRixHQUNFLE9BQUEsRUFBQSxtQkFBQSxZQUFBLGdCQUFBLFlBQ0EsV0FBQSxZQU9GLElBQ0UsU0FBQSxLQU9GLEtBQUEsSUFBQSxJQUFBLEtBSUUsWUFBQSxVQUFBLFVBQ0EsVUFBQSxJQWtCRixPQUFBLE1BQUEsU0FBQSxPQUFBLFNBS0UsT0FBQSxFQUNBLEtBQUEsUUFDQSxNQUFBLFFBT0YsT0FDRSxTQUFBLFFBVUYsT0FBQSxPQUVFLGVBQUEsS0FXRixPQUFBLHdCQUFBLGtCQUFBLG1CQUlFLG1CQUFBLE9BQ0EsT0FBQSxRQU9GLGlCQUFBLHFCQUVFLE9BQUEsUUFPRix5QkFBQSx3QkFFRSxRQUFBLEVBQ0EsT0FBQSxFQVFGLE1BQ0UsWUFBQSxPQVdGLHFCQUFBLGtCQUVFLG1CQUFBLFdBQUEsZ0JBQUEsV0FBQSxXQUFBLFdBQ0EsUUFBQSxFQVNGLDhDQUFBLDhDQUVFLE9BQUEsS0FRRixtQkFDRSxtQkFBQSxZQUNBLGdCQUFBLFlBQUEsV0FBQSxZQUFBLG1CQUFBLFVBU0YsaURBQUEsOENBRUUsbUJBQUEsS0FPRixTQUNFLFFBQUEsTUFBQSxPQUFBLE1BQ0EsT0FBQSxFQUFBLElBQ0EsT0FBQSxJQUFBLE1BQUEsT0FRRixPQUNFLFFBQUEsRUFDQSxPQUFBLEVBT0YsU0FDRSxTQUFBLEtBUUYsU0FDRSxZQUFBLElBVUYsTUFDRSxlQUFBLEVBQ0EsZ0JBQUEsU0FHRixHQUFBLEdBRUUsUUFBQSx1RkNqVUYsYUE3RkksRUFBQSxPQUFBLFFBR0ksTUFBQSxlQUNBLFlBQUEsZUFDQSxXQUFBLGNBQUEsbUJBQUEsZUFDQSxXQUFBLGVBR0osRUFBQSxVQUVJLGdCQUFBLFVBR0osY0FDSSxRQUFBLEtBQUEsV0FBQSxJQUdKLGtCQUNJLFFBQUEsS0FBQSxZQUFBLElBS0osNkJBQUEsbUJBRUksUUFBQSxHQUdKLFdBQUEsSUFFSSxPQUFBLElBQUEsTUFBQSxLQzRLTCxrQkFBQSxNRHZLSyxNQzBLTCxRQUFBLG1CRHJLSyxJRThLTixHRExDLGtCQUFBLE1EcktLLElDd0tMLFVBQUEsZUNVRCxHRjVLTSxHRTJLTixFRjFLTSxRQUFBLEVDdUtMLE9BQUEsRUNTRCxHRjNLTSxHQ3NLTCxpQkFBQSxNRC9KSyxRQ2tLTCxRQUFBLEtDU0QsWUZ0S1Usb0JDaUtULGlCQUFBLGVEN0pLLE9DZ0tMLE9BQUEsSUFBQSxNQUFBLEtENUpLLE9DK0pMLGdCQUFBLG1CQ1NELFVGcEtVLFVDK0pULGlCQUFBLGVEekpTLG1CRWtLVixtQkRMQyxPQUFBLElBQUEsTUFBQSxnQkVqUEQsV0FDQSxZQUFBLHVCRnNQRCxJQUFBLCtDRTdPQyxJQUFLLHNEQUF1RCw0QkFBNkIsaURBQWtELGdCQUFpQixnREFBaUQsZUFBZ0IsK0NBQWdELG1CQUFvQiwyRUFBNEUsY0FFN1csV0FDQSxTQUFBLFNBQ0EsSUFBQSxJQUNBLFFBQUEsYUFDQSxZQUFBLHVCQUNBLFdBQUEsT0FDQSxZQUFBLElBQ0EsWUFBQSxFQUlrQyx1QkFBQSxZQUFXLHdCQUFBLFVBQ1gsMkJBQVcsUUFBQSxRQUVYLHVCRHVQbEMsUUFBUyxRQ3RQeUIsc0JGaVBuQyx1QkVqUDhDLFFBQUEsUUFDWCx3QkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLDJCQUFXLFFBQUEsUUFDWCx5QkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCx5QkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCw2QkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCwyQkFBVyxRQUFBLFFBQ1gscUJBQVcsUUFBQSxRQUNYLDBCQUFXLFFBQUEsUUFDWCxxQkFBVyxRQUFBLFFBQ1gseUJBQVcsUUFBQSxRQUNYLDBCQUFXLFFBQUEsUUFDWCwyQkFBVyxRQUFBLFFBQ1gsc0JBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCxzQkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCwrQkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCx3QkFBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCwwQkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsNkJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCw4QkFBVyxRQUFBLFFBQ1gsNEJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCwwQkFBVyxRQUFBLFFBQ1gsc0JBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCx5QkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCx5QkFBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCw2QkFBVyxRQUFBLFFBQ1gsK0JBQVcsUUFBQSxRQUNYLDhCQUFXLFFBQUEsUUFDWCxnQ0FBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLDhCQUFXLFFBQUEsUUFDWCwrQkFBVyxRQUFBLFFBQ1gsaUNBQVcsUUFBQSxRQUNYLDBCQUFXLFFBQUEsUUFDWCw2QkFBVyxRQUFBLFFBQ1gseUJBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsZ0NBQVcsUUFBQSxRQUNYLGdDQUFXLFFBQUEsUUFDWCwyQkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsMEJBQVcsUUFBQSxRQUNYLCtCQUFXLFFBQUEsUUFDWCwrQkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLCtCQUFXLFFBQUEsUUFDWCxnQ0FBVyxRQUFBLFFBQ1gsNEJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCw4QkFBVyxRQUFBLFFBQ1gsMEJBQVcsUUFBQSxRQUNYLGdDQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsNkJBQVcsUUFBQSxRQUNYLGdDQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsNkJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCw4QkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLCtCQUFXLFFBQUEsUUFDWCxtQ0FBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCwrQkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLDJCQUFXLFFBQUEsUUFDWCx5QkFBVyxRQUFBLFFBQ1gsMEJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCw2QkFBVyxRQUFBLFFBQ1gsK0JBQVcsUUFBQSxRQUNYLDBCQUFXLFFBQUEsUUFDWCxnQ0FBVyxRQUFBLFFBQ1gsK0JBQVcsUUFBQSxRQUNYLDhCQUFXLFFBQUEsUUFDWCxrQ0FBVyxRQUFBLFFBQ1gsb0NBQVcsUUFBQSxRQUNYLHNCQUFXLFFBQUEsUUFDWCwyQkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLDhCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsMEJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCxxQ0FBVyxRQUFBLFFBQ1gsb0NBQVcsUUFBQSxRQUNYLGtDQUFXLFFBQUEsUUFDWCxvQ0FBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCx3QkFBVyxRQUFBLFFBQ1gseUJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCw2QkFBVyxRQUFBLFFBQ1gsNEJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCw4QkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCwwQkFBVyxRQUFBLFFBQ1gsc0JBQVcsUUFBQSxRQUNYLHNCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsbUNBQVcsUUFBQSxRQUNYLHVDQUFXLFFBQUEsUUFDWCxnQ0FBVyxRQUFBLFFBQ1gsb0NBQVcsUUFBQSxRQUNYLHFDQUFXLFFBQUEsUUFDWCx5Q0FBVyxRQUFBLFFBQ1gsNEJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCxnQ0FBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCx3QkFBVyxRQUFBLFFBQ1gsMEJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCx5QkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHVCQUFXLFFBQUEsUUFDWCx3QkFBVyxRQUFBLFFBQ1gseUJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLCtCQUFXLFFBQUEsUUFDWCxnQ0FBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLDhCQUFXLFFBQUEsUUFDWCw4QkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLDBCQUFXLFFBQUEsUUFDWCx5QkFBVyxRQUFBLFFBQ1gsNkJBQVcsUUFBQSxRQUNYLDJCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCwyQkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCwrQkFBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsNEJBQVcsUUFBQSxRQUNYLGlDQUFXLFFBQUEsUUFDWCxvQ0FBVyxRQUFBLFFBQ1gsaUNBQVcsUUFBQSxRQUNYLCtCQUFXLFFBQUEsUUFDWCwrQkFBVyxRQUFBLFFBQ1gsaUNBQVcsUUFBQSxRQUNYLHFCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsNEJBQVcsUUFBQSxRQUNYLDJCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBU1gsd0JBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCx1QkFBVyxRQUFBLFFBQ1gseUJBQVcsUUFBQSxRQUNYLHlCQUFXLFFBQUEsUUFDWCwrQkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLDZCQUFXLFFBQUEsUUFDWCxzQkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHdCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsdUJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCw2QkFBVyxRQUFBLFFBQ1gsMkJBQVcsUUFBQSxRQUNYLDBCQUFXLFFBQUEsUUFDWCxzQkFBVyxRQUFBLFFBQ1gsc0JBQVcsUUFBQSxRQUNYLHNCQUFXLFFBQUEsUUFDWCxzQkFBVyxRQUFBLFFBQ1gsd0JBQVcsUUFBQSxRQUNYLHNCQUFXLFFBQUEsUUFDWCx3QkFBVyxRQUFBLFFBQ1gsNEJBQVcsUUFBQSxRQUNYLG1DQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsb0NBQVcsUUFBQSxRQUNYLGtDQUFXLFFBQUEsUUFDWCxpQ0FBVyxRQUFBLFFBQ1gsK0JBQVcsUUFBQSxRQUNYLHNCQUFXLFFBQUEsUUFDWCx3QkFBVyxRQUFBLFFBQ1gsNkJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCw2QkFBVyxRQUFBLFFBQ1gsa0NBQVcsUUFBQSxRQUNYLG1DQUFXLFFBQUEsUUFDWCxzQ0FBVyxRQUFBLFFBQ1gsMENBQVcsUUFBQSxRQUNYLG9DQUFXLFFBQUEsUUFDWCx3Q0FBVyxRQUFBLFFBQ1gscUNBQVcsUUFBQSxRQUNYLGlDQUFXLFFBQUEsUUFDWCxnQ0FBVyxRQUFBLFFBQ1gsa0NBQVcsUUFBQSxRQUNYLCtCQUFXLFFBQUEsUUFDWCwwQkFBVyxRQUFBLFFBQ1gsOEJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUFDWCw0QkFBVyxRQUFBLFFBQ1gsNkJBQVcsUUFBQSxRQUNYLDRCQUFXLFFBQUEsUUN0Uy9DLDBCQ2dFRSxRQUFBLFFIaStCRixFRE5DLG1CQUFBLFdHeGhDSSxnQkFBaUIsV0ZpaUNaLFdBQVksV0dsK0JaLE9BREwsUUpnK0JKLG1CQUFBLFdHdGhDSSxnQkFBaUIsV0FDcEIsV0FBQSxXSHloQ0QsS0dyaENDLFVBQVcsS0FFWCw0QkFBQSxjQUVBLEtBQ0EsWUFBQSxpQkFBQSxVQUFBLE1BQUEsV0h1aENELFVBQUEsS0duaENDLFlBQWEsV0Y0aENiLE1BQU8sS0FDUCxpQkFBa0IsS0V4aENsQixPQURBLE1BRUEsT0hxaENELFNHL2dDQyxZQUFhLFFBQ2IsVUFBQSxRQUNBLFlBQUEsUUFFQSxFRndoQ0EsTUFBTyxRRXRoQ0wsZ0JBQUEsS0FJRixRSDhnQ0QsUUtua0NDLE1BQUEsUUFFQSxnQkFBQSxVTHNrQ0QsUUd4Z0NDLFFBQVMsS0FBSyxPQUNkLFFBQUEsSUFBQSxLQUFBLHlCSDBnQ0QsZUFBQSxLR25nQ0MsT0hzZ0NELE9BQUEsRUNTRCxJQUNFLGVBQWdCLE9ERGpCLDRCTWhsQ0MsMEJMbWxDRixnQktwbENFLGlCQURBLGVINEVBLFFBQVMsTUFDVCxVQUFBLEtId2dDRCxPQUFBLEtHamdDQyxhQUNBLGNBQUEsSUFFQSxlQUNBLFFBQUEsYUM2RkEsVUFBQSxLQUNLLE9BQUEsS0FDRyxRQUFBLElFdkxSLFlBQUEsV0FDQSxpQkFBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtOZ21DRCxjQUFBLElHbGdDQyxtQkFBb0IsSUFBSSxJQUFJLFlBQzVCLGNBQUEsSUFBQSxJQUFBLFlIb2dDRCxXQUFBLElBQUEsSUFBQSxZRzcvQkMsWUFDQSxjQUFBLElBRUEsR0hnZ0NELFdBQUEsS0d4L0JDLGNBQWUsS0FDZixPQUFBLEVBQ0EsV0FBQSxJQUFBLE1BQUEsS0FFQSxTQUNBLFNBQUEsU0FDQSxNQUFBLElBQ0EsT0FBQSxJQUNBLFFBQUEsRUgwL0JELE9BQUEsS0dsL0JDLFNBQUEsT0YyL0JBLEtBQU0sY0V6L0JKLE9BQUEsRUFFQSwwQkFDQSx5QkFDQSxTQUFBLE9BQ0EsTUFBQSxLSG8vQkgsT0FBQSxLR3orQkMsT0FBUSxFQUNSLFNBQUEsUUgyK0JELEtBQUEsS0NTRCxjQUNFLE9BQVEsUUFRVixJQUNBLElNbnBDRSxJQUNBLElBQ0EsSUFDQSxJTnlvQ0YsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdEQUMsWUFBQSxRT25wQ0MsWUFBYSxJTjRwQ2IsWUFBYSxJQUNiLE1BQU8sUUFvQlQsV0FaQSxVQWFBLFdBWkEsVU03cENJLFdOOHBDSixVTTdwQ0ksV044cENKLFVNN3BDSSxXTjhwQ0osVURNQyxXQ0xELFVBQ0EsVUFaQSxTQWFBLFVBWkEsU0FhQSxVQVpBLFNBYUEsVUFaQSxTQWFBLFVBWkEsU0FhQSxVQVpBLFNNcnBDRSxZQUFhLElOeXFDYixZQUFhLEVBQ2IsTUFBTyxLQUdULElNenFDRSxJQUpGLElONHFDQSxHQUVBLEdETEMsR0NTQyxXQUFZLEtBQ1osY0FBZSxLQVNqQixXQU5BLFVEQ0MsV0NDRCxVTTdxQ0EsV04rcUNBLFVBQ0EsVUFOQSxTTTdxQ0ksVU4rcUNKLFNNNXFDQSxVTjhxQ0EsU0FRRSxVQUFXLElBR2IsSU1yckNFLElBSkYsSU53ckNBLEdBRUEsR0RMQyxHQ1NDLFdBQVksS0FDWixjQUFlLEtBU2pCLFdBTkEsVURDQyxXQ0NELFVNeHJDQSxXTjByQ0EsVUFDQSxVQU5BLFNNenJDSSxVTjJyQ0osU012ckNBLFVOeXJDQSxTTXpyQ1UsVUFBQSxJQUNWLElBQUEsR0FBVSxVQUFBLEtBQ1YsSUFBQSxHQUFVLFVBQUEsS0FDVixJQUFBLEdBQVUsVUFBQSxLQUNWLElBQUEsR0FBVSxVQUFBLEtBQ1YsSUFBQSxHQUFVLFVBQUEsS0FPUixJQURGLEdQdXNDQyxVQUFBLEtDU0QsRU0xc0NFLE9BQUEsRUFBQSxFQUFBLEtBRUEsTVBxc0NELGNBQUEsS09oc0NDLFVBQVcsS0F3T1gsWUFBYSxJQTFPWCxZQUFBLElQdXNDSCx5Qk85ckNDLE1OdXNDRSxVQUFXLE1NbHNDZixPQUFBLE1BRUUsVUFBQSxJQUtGLE1QMnJDQyxLTzNyQ3NCLFFBQUEsS1A4ckN0QixpQkFBQSxRTzdyQ3NCLFdQZ3NDdEIsV0FBQSxLTy9yQ3NCLFlQa3NDdEIsV0FBQSxNT2pzQ3NCLGFQb3NDdEIsV0FBQSxPT25zQ3NCLGNQc3NDdEIsV0FBQSxRT25zQ3NCLGFQc3NDdEIsWUFBQSxPT3JzQ3NCLGdCUHdzQ3RCLGVBQUEsVU92c0NzQixnQlAwc0N0QixlQUFBLFVPdHNDQyxpQlB5c0NELGVBQUEsV1E1eUNDLFlSK3lDRCxNQUFBLEtDU0QsY09yekNJLE1BQUEsUUFIRixxQkR3R0YscUJQOHNDQyxNQUFBLFFDU0QsY081ekNJLE1BQUEsUUFIRixxQkQyR0YscUJQa3RDQyxNQUFBLFFDU0QsV09uMENJLE1BQUEsUUFIRixrQkQ4R0Ysa0JQc3RDQyxNQUFBLFFDU0QsY08xMENJLE1BQUEsUUFIRixxQkRpSEYscUJQMHRDQyxNQUFBLFFDU0QsYU9qMUNJLE1BQUEsUUR3SEYsb0JBSEYsb0JFeEhFLE1BQUEsUUFDQSxZUjIxQ0EsTUFBTyxLUXoxQ0wsaUJBQUEsUUFIRixtQkY4SEYsbUJQNHRDQyxpQkFBQSxRQ1NELFlRaDJDSSxpQkFBQSxRQUhGLG1CRmlJRixtQlBndUNDLGlCQUFBLFFDU0QsU1F2MkNJLGlCQUFBLFFBSEYsZ0JGb0lGLGdCUG91Q0MsaUJBQUEsUUNTRCxZUTkyQ0ksaUJBQUEsUUFIRixtQkZ1SUYsbUJQd3VDQyxpQkFBQSxRQ1NELFdRcjNDSSxpQkFBQSxRRjZJRixrQkFERixrQkFFRSxpQkFBQSxRUHV1Q0QsYU85dENDLGVBQWdCLElOdXVDaEIsT0FBUSxLQUFLLEVBQUUsS01ydUNmLGNBQUEsSUFBQSxNQUFBLEtBRkYsR1BtdUNDLEdDU0MsV0FBWSxFQUNaLGNBQWUsS00vdENmLE1QMnRDRCxNTzV0Q0QsTUFQSSxNQVNGLGNBQUEsRUFJRixlQUxFLGFBQUEsRUFDQSxXQUFBLEtQbXVDRCxhTy90Q0MsYUFBYyxFQUtaLFlBQUEsS0FDQSxXQUFBLEtQOHRDSCxnQk94dENDLFFBQVMsYUFDVCxjQUFBLElBQ0EsYUFBQSxJQUVGLEdOaXVDRSxXQUFZLEVNL3RDWixjQUFBLEtBR0EsR0FERixHUDJ0Q0MsWUFBQSxXT3Z0Q0MsR1AwdENELFlBQUEsSU9wbkNELEdBdkZNLFlBQUEsRUFFQSx5QkFDQSxrQkd0TkosTUFBQSxLQUNBLE1BQUEsTUFDQSxTQUFBLE9WczZDQyxNQUFBLEtPOW5DQyxXQUFZLE1BaEZWLGNBQUEsU1BpdENILFlBQUEsT092c0NELGtCTml0Q0UsWUFBYSxPTTNzQ2pCLDBCUHVzQ0MsWU90c0NDLE9BQUEsS0E5SXFCLGNBQUEsSUFBQSxPQUFBLEtBbUp2QixZQUNFLFVBQUEsSUFDQSxlQUFBLFVBRUEsV1B1c0NELFFBQUEsS0FBQSxLT2xzQ0csT0FBQSxFQUFBLEVBQUEsS04yc0NGLFVBQVcsT0FDWCxZQUFhLElBQUksTUFBTSxLTXJ0Q3pCLHlCUGd0Q0Msd0JPaHRDRCx5Qk4wdENFLGNBQWUsRU1wc0NiLGtCQUZBLGtCQUNBLGlCUG1zQ0gsUUFBQSxNT2hzQ0csVUFBQSxJTnlzQ0YsWUFBYSxXQUNiLE1BQU8sS01qc0NULHlCUDRyQ0MseUJPNXJDRCx3QkFFRSxRQUFBLGNBRUEsb0JBQ0Esc0JBQ0EsY0FBQSxLUDhyQ0QsYUFBQSxFT3hyQ0csV0FBQSxNTmlzQ0YsYUFBYyxJQUFJLE1BQU0sS0FDeEIsWUFBYSxFTWpzQ1gsa0NObXNDSixrQ01wc0NlLGlDQUNYLG9DTm9zQ0osb0NETEMsbUNDVUMsUUFBUyxHTWxzQ1gsaUNOb3NDQSxpQ00xc0NNLGdDQU9KLG1DTm9zQ0YsbUNETEMsa0NPOXJDQyxRQUFBLGNQbXNDRCxRV3grQ0MsY0FBZSxLVmkvQ2YsV0FBWSxPQUNaLFlBQWEsV1U5K0NiLEtYMCtDRCxJV3QrQ0QsSUFDRSxLQUNBLFlBQUEsTUFBQSxPQUFBLFNBQUEsY0FBQSxVQUVBLEtBQ0EsUUFBQSxJQUFBLElYdytDRCxVQUFBLElXcCtDQyxNQUFPLFFBQ1AsaUJBQUEsUUFDQSxjQUFBLElBRUEsSUFDQSxRQUFBLElBQUEsSUFDQSxVQUFBLElWNitDQSxNVTcrQ0EsS1hzK0NELGlCQUFBLEtXNStDQyxjQUFlLElBU2IsbUJBQUEsTUFBQSxFQUFBLEtBQUEsRUFBQSxnQkFDQSxXQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsZ0JBRUEsUVY4K0NGLFFVOStDRSxFWHMrQ0gsVUFBQSxLV2orQ0MsWUFBYSxJQUNiLG1CQUFBLEtBQ0EsV0FBQSxLQUVBLElBQ0EsUUFBQSxNQUNBLFFBQUEsTUFDQSxPQUFBLEVBQUEsRUFBQSxLQUNBLFVBQUEsS0FDQSxZQUFBLFdBQ0EsTUFBQSxLQUNBLFdBQUEsVVhtK0NELFVBQUEsV1c5K0NDLGlCQUFrQixRQWVoQixPQUFBLElBQUEsTUFBQSxLQUNBLGNBQUEsSUFFQSxTQUNBLFFBQUEsRUFDQSxVQUFBLFFYaytDSCxNQUFBLFFXNzlDQyxZQUFhLFNBQ2IsaUJBQUEsWUFDQSxjQUFBLEVDMURGLGdCQ0hFLFdBQUEsTUFDQSxXQUFBLE9BRUEsV2IraERELGNBQUEsS1l6aERDLGFBQUEsS0FxRUEsYUFBYyxLQXZFWixZQUFBLEtaZ2lESCx5QlkzaERDLFdBa0VFLE1BQU8sT1o4OUNWLHlCWTdoREMsV0ErREUsTUFBTyxPWm0rQ1YsMEJZMWhEQyxXQ3ZCQSxNQUFBLFFBR0EsaUJib2pERCxjQUFBLEtZdmhEQyxhQUFjLEtDdkJkLGFBQUEsS0FDQSxZQUFBLEtDQUUsS0FDRSxhQUFBLE1BRUEsWUFBQSxNQUdBLFVBQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVZGlqREwsU0FBQSxTY2ppREcsV0FBQSxJQUNFLGNBQUEsS2RtaURMLGFBQUEsS2MzaERHLFVBQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVZDhoREgsTUFBQSxLYzloREcsV2RpaURILE1BQUEsS2NqaURHLFdkb2lESCxNQUFBLGFjcGlERyxXZHVpREgsTUFBQSxhY3ZpREcsVWQwaURILE1BQUEsSWMxaURHLFVkNmlESCxNQUFBLGFjN2lERyxVZGdqREgsTUFBQSxhY2hqREcsVWRtakRILE1BQUEsSWNuakRHLFVkc2pESCxNQUFBLGFjdGpERyxVZHlqREgsTUFBQSxhY3pqREcsVWQ0akRILE1BQUEsSWM1akRHLFVkK2pESCxNQUFBLGFjaGpERyxVZG1qREgsTUFBQSxZY25qREcsZ0Jkc2pESCxNQUFBLEtjdGpERyxnQmR5akRILE1BQUEsYWN6akRHLGdCZDRqREgsTUFBQSxhYzVqREcsZWQrakRILE1BQUEsSWMvakRHLGVka2tESCxNQUFBLGFjbGtERyxlZHFrREgsTUFBQSxhY3JrREcsZWR3a0RILE1BQUEsSWN4a0RHLGVkMmtESCxNQUFBLGFjM2tERyxlZDhrREgsTUFBQSxhYzlrREcsZWRpbERILE1BQUEsSWNqbERHLGVkb2xESCxNQUFBLGFjL2tERyxlZGtsREgsTUFBQSxZY2ptREcsZWRvbURILE1BQUEsS2NwbURHLGdCZHVtREgsS0FBQSxLY3ZtREcsZ0JkMG1ESCxLQUFBLGFjMW1ERyxnQmQ2bURILEtBQUEsYWM3bURHLGVkZ25ESCxLQUFBLEljaG5ERyxlZG1uREgsS0FBQSxhY25uREcsZWRzbkRILEtBQUEsYWN0bkRHLGVkeW5ESCxLQUFBLEljem5ERyxlZDRuREgsS0FBQSxhYzVuREcsZWQrbkRILEtBQUEsYWMvbkRHLGVka29ESCxLQUFBLEljbG9ERyxlZHFvREgsS0FBQSxhY2hvREcsZWRtb0RILEtBQUEsWWNwbkRHLGVkdW5ESCxLQUFBLEtjdm5ERyxrQmQwbkRILFlBQUEsS2MxbkRHLGtCZDZuREgsWUFBQSxhYzduREcsa0JkZ29ESCxZQUFBLGFjaG9ERyxpQmRtb0RILFlBQUEsSWNub0RHLGlCZHNvREgsWUFBQSxhY3RvREcsaUJkeW9ESCxZQUFBLGFjem9ERyxpQmQ0b0RILFlBQUEsSWM1b0RHLGlCZCtvREgsWUFBQSxhYy9vREcsaUJka3BESCxZQUFBLGFjbHBERyxpQmRxcERILFlBQUEsSWNycERHLGlCZHdwREgsWUFBQSxhY3hwREcsaUJkMnBESCxZQUFBLFljN3JERyxpQkFDRSxZQUFBLEVBT0oseUJBQ0UsVUFBQSxXQUFBLFdBQUEsV0FBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVkMnJERCxNQUFBLEtjM3JEQyxXZDhyREQsTUFBQSxLYzlyREMsV2Rpc0RELE1BQUEsYWNqc0RDLFdkb3NERCxNQUFBLGFjcHNEQyxVZHVzREQsTUFBQSxJY3ZzREMsVWQwc0RELE1BQUEsYWMxc0RDLFVkNnNERCxNQUFBLGFjN3NEQyxVZGd0REQsTUFBQSxJY2h0REMsVWRtdERELE1BQUEsYWNudERDLFVkc3RERCxNQUFBLGFjdHREQyxVZHl0REQsTUFBQSxJY3p0REMsVWQ0dERELE1BQUEsYWM3c0RDLFVkZ3RERCxNQUFBLFljaHREQyxnQmRtdERELE1BQUEsS2NudERDLGdCZHN0REQsTUFBQSxhY3R0REMsZ0JkeXRERCxNQUFBLGFjenREQyxlZDR0REQsTUFBQSxJYzV0REMsZWQrdERELE1BQUEsYWMvdERDLGVka3VERCxNQUFBLGFjbHVEQyxlZHF1REQsTUFBQSxJY3J1REMsZWR3dURELE1BQUEsYWN4dURDLGVkMnVERCxNQUFBLGFjM3VEQyxlZDh1REQsTUFBQSxJYzl1REMsZWRpdkRELE1BQUEsYWM1dURDLGVkK3VERCxNQUFBLFljOXZEQyxlZGl3REQsTUFBQSxLY2p3REMsZ0Jkb3dERCxLQUFBLEtjcHdEQyxnQmR1d0RELEtBQUEsYWN2d0RDLGdCZDB3REQsS0FBQSxhYzF3REMsZWQ2d0RELEtBQUEsSWM3d0RDLGVkZ3hERCxLQUFBLGFjaHhEQyxlZG14REQsS0FBQSxhY254REMsZWRzeERELEtBQUEsSWN0eERDLGVkeXhERCxLQUFBLGFjenhEQyxlZDR4REQsS0FBQSxhYzV4REMsZWQreERELEtBQUEsSWMveERDLGVka3lERCxLQUFBLGFjN3hEQyxlZGd5REQsS0FBQSxZY2p4REMsZWRveERELEtBQUEsS2NweERDLGtCZHV4REQsWUFBQSxLY3Z4REMsa0JkMHhERCxZQUFBLGFjMXhEQyxrQmQ2eERELFlBQUEsYWM3eERDLGlCZGd5REQsWUFBQSxJY2h5REMsaUJkbXlERCxZQUFBLGFjbnlEQyxpQmRzeURELFlBQUEsYWN0eURDLGlCZHl5REQsWUFBQSxJY3p5REMsaUJkNHlERCxZQUFBLGFjNXlEQyxpQmQreURELFlBQUEsYWMveURDLGlCZGt6REQsWUFBQSxJY2x6REMsaUJkcXpERCxZQUFBLGFjcnpEQyxpQmR3ekRELFlBQUEsWVkveURELGlCRTNDRSxZQUFBLEdBUUYseUJBQ0UsVUFBQSxXQUFBLFdBQUEsV0FBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVkeTFERCxNQUFBLEtjejFEQyxXZDQxREQsTUFBQSxLYzUxREMsV2QrMURELE1BQUEsYWMvMURDLFdkazJERCxNQUFBLGFjbDJEQyxVZHEyREQsTUFBQSxJY3IyREMsVWR3MkRELE1BQUEsYWN4MkRDLFVkMjJERCxNQUFBLGFjMzJEQyxVZDgyREQsTUFBQSxJYzkyREMsVWRpM0RELE1BQUEsYWNqM0RDLFVkbzNERCxNQUFBLGFjcDNEQyxVZHUzREQsTUFBQSxJY3YzREMsVWQwM0RELE1BQUEsYWMzMkRDLFVkODJERCxNQUFBLFljOTJEQyxnQmRpM0RELE1BQUEsS2NqM0RDLGdCZG8zREQsTUFBQSxhY3AzREMsZ0JkdTNERCxNQUFBLGFjdjNEQyxlZDAzREQsTUFBQSxJYzEzREMsZWQ2M0RELE1BQUEsYWM3M0RDLGVkZzRERCxNQUFBLGFjaDREQyxlZG00REQsTUFBQSxJY240REMsZWRzNERELE1BQUEsYWN0NERDLGVkeTRERCxNQUFBLGFjejREQyxlZDQ0REQsTUFBQSxJYzU0REMsZWQrNERELE1BQUEsYWMxNERDLGVkNjRERCxNQUFBLFljNTVEQyxlZCs1REQsTUFBQSxLYy81REMsZ0JkazZERCxLQUFBLEtjbDZEQyxnQmRxNkRELEtBQUEsYWNyNkRDLGdCZHc2REQsS0FBQSxhY3g2REMsZWQyNkRELEtBQUEsSWMzNkRDLGVkODZERCxLQUFBLGFjOTZEQyxlZGk3REQsS0FBQSxhY2o3REMsZWRvN0RELEtBQUEsSWNwN0RDLGVkdTdERCxLQUFBLGFjdjdEQyxlZDA3REQsS0FBQSxhYzE3REMsZWQ2N0RELEtBQUEsSWM3N0RDLGVkZzhERCxLQUFBLGFjMzdEQyxlZDg3REQsS0FBQSxZYy82REMsZWRrN0RELEtBQUEsS2NsN0RDLGtCZHE3REQsWUFBQSxLY3I3REMsa0JkdzdERCxZQUFBLGFjeDdEQyxrQmQyN0RELFlBQUEsYWMzN0RDLGlCZDg3REQsWUFBQSxJYzk3REMsaUJkaThERCxZQUFBLGFjajhEQyxpQmRvOERELFlBQUEsYWNwOERDLGlCZHU4REQsWUFBQSxJY3Y4REMsaUJkMDhERCxZQUFBLGFjMThEQyxpQmQ2OERELFlBQUEsYWM3OERDLGlCZGc5REQsWUFBQSxJY2g5REMsaUJkbTlERCxZQUFBLGFjbjlEQyxpQmRzOURELFlBQUEsWVkxOERELGlCRTlDRSxZQUFBLEdBUUYsMEJBQ0UsVUFBQSxXQUFBLFdBQUEsV0FBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVBQUEsVUFBQSxVQUFBLFVkdS9ERCxNQUFBLEtjdi9EQyxXZDAvREQsTUFBQSxLYzEvREMsV2Q2L0RELE1BQUEsYWM3L0RDLFdkZ2dFRCxNQUFBLGFjaGdFQyxVZG1nRUQsTUFBQSxJY25nRUMsVWRzZ0VELE1BQUEsYWN0Z0VDLFVkeWdFRCxNQUFBLGFjemdFQyxVZDRnRUQsTUFBQSxJYzVnRUMsVWQrZ0VELE1BQUEsYWMvZ0VDLFVka2hFRCxNQUFBLGFjbGhFQyxVZHFoRUQsTUFBQSxJY3JoRUMsVWR3aEVELE1BQUEsYWN6Z0VDLFVkNGdFRCxNQUFBLFljNWdFQyxnQmQrZ0VELE1BQUEsS2MvZ0VDLGdCZGtoRUQsTUFBQSxhY2xoRUMsZ0JkcWhFRCxNQUFBLGFjcmhFQyxlZHdoRUQsTUFBQSxJY3hoRUMsZWQyaEVELE1BQUEsYWMzaEVDLGVkOGhFRCxNQUFBLGFjOWhFQyxlZGlpRUQsTUFBQSxJY2ppRUMsZWRvaUVELE1BQUEsYWNwaUVDLGVkdWlFRCxNQUFBLGFjdmlFQyxlZDBpRUQsTUFBQSxJYzFpRUMsZWQ2aUVELE1BQUEsYWN4aUVDLGVkMmlFRCxNQUFBLFljMWpFQyxlZDZqRUQsTUFBQSxLYzdqRUMsZ0JkZ2tFRCxLQUFBLEtjaGtFQyxnQmRta0VELEtBQUEsYWNua0VDLGdCZHNrRUQsS0FBQSxhY3RrRUMsZWR5a0VELEtBQUEsSWN6a0VDLGVkNGtFRCxLQUFBLGFjNWtFQyxlZCtrRUQsS0FBQSxhYy9rRUMsZWRrbEVELEtBQUEsSWNsbEVDLGVkcWxFRCxLQUFBLGFjcmxFQyxlZHdsRUQsS0FBQSxhY3hsRUMsZWQybEVELEtBQUEsSWMzbEVDLGVkOGxFRCxLQUFBLGFjemxFQyxlZDRsRUQsS0FBQSxZYzdrRUMsZWRnbEVELEtBQUEsS2NobEVDLGtCZG1sRUQsWUFBQSxLY25sRUMsa0Jkc2xFRCxZQUFBLGFjdGxFQyxrQmR5bEVELFlBQUEsYWN6bEVDLGlCZDRsRUQsWUFBQSxJYzVsRUMsaUJkK2xFRCxZQUFBLGFjL2xFQyxpQmRrbUVELFlBQUEsYWNsbUVDLGlCZHFtRUQsWUFBQSxJY3JtRUMsaUJkd21FRCxZQUFBLGFjeG1FQyxpQmQybUVELFlBQUEsYWMzbUVDLGlCZDhtRUQsWUFBQSxJYzltRUMsaUJkaW5FRCxZQUFBLGFjam5FQyxpQmRvbkVELFlBQUEsWWV2ckVELGlCQUNBLFlBQUEsR0FHQSxNQUNBLGlCQUFBLFlBRUEsUWYwckVELFlBQUEsSWV4ckVDLGVBQWdCLElBQ2hCLE1BQUEsS2YwckVELFdBQUEsS2VuckVDLEdBQ0EsV0FBQSxLZnVyRUQsT2V6ckVDLE1BQU8sS2Rvc0VQLFVBQVcsS0FDWCxjQUFlLEtjeHJFVCxtQmQyckVSLG1CYzFyRVEsbUJBSEEsbUJBQ0EsbUJkMnJFUixtQkRIQyxRQUFBLEllcHNFQyxZQUFhLFdBb0JYLGVBQUEsSUFDQSxXQUFBLElBQUEsTUFBQSxLQXJCSixtQmRtdEVFLGVBQWdCLE9BQ2hCLGNBQWUsSUFBSSxNQUFNLEtESjFCLHVDQ01ELHVDY3R0RUEsd0NkdXRFQSx3Q2NuckVJLDJDQU5JLDJDZnFyRVAsV0FBQSxFZTFxRUcsbUJmNnFFSCxXQUFBLElBQUEsTUFBQSxLQ1dELGNBQ0UsaUJBQWtCLEtjaHFFcEIsNkJkbXFFQSw2QmNscUVFLDZCQVpNLDZCZnVxRVAsNkJDTUQsNkJESEMsUUFBQSxJQ1dELGdCQUNFLE9BQVEsSUFBSSxNQUFNLEtjM3FFcEIsNEJkOHFFQSw0QmM5cUVBLDRCQVFRLDRCZitwRVAsNEJDTUQsNEJjOXBFTSxPQUFBLElBQUEsTUFBQSxLQVlGLDRCQUZKLDRCZnFwRUMsb0JBQUEsSWV4b0VHLHlDZjJvRUgsaUJBQUEsUWVqb0VDLDRCQUNBLGlCQUFBLFFmcW9FRCx1QmUvbkVHLFNBQUEsT2Qwb0VGLFFBQVMsYWN6b0VMLE1BQUEsS0FFQSxzQmZrb0VMLHNCZ0I5d0VDLFNBQUEsT2Z5eEVBLFFBQVMsV0FDVCxNQUFPLEtBU1QsMEJldHhFRSwwQmZneEVGLDBCQUdBLDBCZXp4RU0sMEJBTUosMEJmaXhFRiwwQkFHQSwwQkFDQSwwQkROQywwQkNBRCwwQkFHQSwwQkFTRSxpQkFBa0IsUURMbkIsc0NnQm55RUMsc0NBQUEsb0NmMHlFRixzQ2V2eEVNLHNDZjR4RUosaUJBQWtCLFFBU3BCLDJCZTN5RUUsMkJmcXlFRiwyQkFHQSwyQmU5eUVNLDJCQU1KLDJCZnN5RUYsMkJBR0EsMkJBQ0EsMkJETkMsMkJDQUQsMkJBR0EsMkJBU0UsaUJBQWtCLFFETG5CLHVDZ0J4ekVDLHVDQUFBLHFDZit6RUYsdUNlNXlFTSx1Q2ZpekVKLGlCQUFrQixRQVNwQix3QmVoMEVFLHdCZjB6RUYsd0JBR0Esd0JlbjBFTSx3QkFNSix3QmYyekVGLHdCQUdBLHdCQUNBLHdCRE5DLHdCQ0FELHdCQUdBLHdCQVNFLGlCQUFrQixRRExuQixvQ2dCNzBFQyxvQ0FBQSxrQ2ZvMUVGLG9DZWowRU0sb0NmczBFSixpQkFBa0IsUUFTcEIsMkJlcjFFRSwyQmYrMEVGLDJCQUdBLDJCZXgxRU0sMkJBTUosMkJmZzFFRiwyQkFHQSwyQkFDQSwyQkROQywyQkNBRCwyQkFHQSwyQkFTRSxpQkFBa0IsUURMbkIsdUNnQmwyRUMsdUNBQUEscUNmeTJFRix1Q2V0MUVNLHVDZjIxRUosaUJBQWtCLFFBU3BCLDBCZTEyRUUsMEJmbzJFRiwwQkFHQSwwQmU3MkVNLDBCQU1KLDBCZnEyRUYsMEJBR0EsMEJBQ0EsMEJETkMsMEJDQUQsMEJBR0EsMEJBU0UsaUJBQWtCLFFETG5CLHNDZWp0RUMsc0NBREYsb0NkeXRFQSxzQ2UzMkVNLHNDRG9KSixpQkFBQSxRQTZERixrQkFDRSxXQUFZLEtBM0RWLFdBQUEsS0FFQSxvQ0FDQSxrQkFDQSxNQUFBLEtmcXRFRCxjQUFBLEtlOXBFQyxXQUFZLE9BbkRWLG1CQUFBLHlCZm90RUgsT0FBQSxJQUFBLE1BQUEsS0NXRCx5QkFDRSxjQUFlLEVjN3FFakIscUNkZ3JFQSxxQ2NsdEVJLHFDQVJNLHFDZm10RVQscUNDTUQscUNESEMsWUFBQSxPQ1dELGtDQUNFLE9BQVEsRWN4ckVWLDBEZDJyRUEsMERjM3JFQSwwREF6QlUsMERmNnNFVCwwRENNRCwwREFNRSxZQUFhLEVjaHNFZix5RGRtc0VBLHlEY25zRUEseURBckJVLHlEZml0RVQseURDTUQseURBTUUsYUFBYyxFRExqQix5RGUzc0VXLHlERXpOVix5RGpCbTZFQyx5RGlCbDZFRCxjQUFBLEdBTUEsU2pCbTZFRCxVQUFBLEVpQmg2RUMsUUFBUyxFQUNULE9BQUEsRUFDQSxPQUFBLEVBRUEsT0FDQSxRQUFBLE1BQ0EsTUFBQSxLQUNBLFFBQUEsRUFDQSxjQUFBLEtBQ0EsVUFBQSxLakJrNkVELFlBQUEsUWlCLzVFQyxNQUFPLEtBQ1AsT0FBQSxFQUNBLGNBQUEsSUFBQSxNQUFBLFFBRUEsTWpCaTZFRCxRQUFBLGFpQnQ1RUMsVUFBVyxLYjRCWCxjQUFBLElBQ0csWUFBQSxJSjgzRUosbUJpQnQ1RUMsbUJBQW9CLFdoQmk2RWpCLGdCQUFpQixXZ0IvNUVwQixXQUFBLFdqQjA1RUQscUJpQng1RUMsa0JBR0EsT0FBUSxJQUFJLEVBQUUsRUFDZCxXQUFBLE1qQnU1RUQsWUFBQSxPaUJsNUVDLGlCQUNBLFFBQUEsTUFJRixrQmhCNDVFRSxRQUFTLE1nQjE1RVQsTUFBQSxLQUlGLGlCQUFBLGFoQjI1RUUsT0FBUSxLSWgrRVIsdUJMMjlFRCwyQksxOUVDLHdCWTJFQSxRQUFTLEtBQUssT0FDZCxRQUFBLElBQUEsS0FBQSx5QkFDQSxlQUFBLEtBRUEsT0FDQSxRQUFBLE1qQmk1RUQsWUFBQSxJaUJ2M0VDLFVBQVcsS0FDWCxZQUFBLFdBQ0EsTUFBQSxLQUVBLGNBQ0EsUUFBQSxNQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsUUFBQSxJQUFBLEtBQ0EsVUFBQSxLQUNBLFlBQUEsV0FDQSxNQUFBLEtieERBLGlCQUFBLEtBQ1EsaUJBQUEsS0F5SFIsT0FBQSxJQUFBLE1BQUEsS0FDSyxjQUFBLElBQ0csbUJBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkowekVULFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQmtCbDhFQyxtQkFBQSxhQUFBLFlBQUEsS0FBQSxtQkFBQSxZQUFBLEtBQ0UsY0FBQSxhQUFBLFlBQUEsS0FBQSxXQUFBLFlBQUEsS0FDQSxXQUFBLGFBQUEsWUFBQSxLQUFBLFdBQUEsWUFBQSxLZFdNLG9CSjI3RVQsYUFBQSxRSTE1RUMsUUFBQSxFQUNFLG1CQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsaUJBQUEsRUFBQSxFQUFBLElBQUEscUJBQ0EsV0FBQSxNQUFBLEVBQUEsSUFBQSxJQUFBLGlCQUFBLEVBQUEsRUFBQSxJQUFBLHFCQUVGLGdDQUEwQixNQUFBLEtKNjVFM0IsUUFBQSxFSTU1RWlDLG9DSis1RWpDLE1BQUEsS2lCbDRFRyx5Q0FDQSxNQUFBLEtBUUYsMEJoQnc0RUEsaUJBQWtCLFlBQ2xCLE9BQVEsRWdCcjRFTix3QmpCKzNFSCx3QmlCNTNFQyxpQ2hCdTRFQSxpQkFBa0IsS2dCcjRFaEIsUUFBQSxFQUlGLHdCQUNFLGlDakI0M0VILE9BQUEsWWlCLzJFQyxzQmpCazNFRCxPQUFBLEtpQmgyRUcsbUJoQjQyRUYsbUJBQW9CLEtBRXRCLHFEZ0I3MkVNLDhCakJzMkVILDhCaUJuMkVDLHdDQUFBLCtCaEIrMkVBLFlBQWEsS2dCNzJFWCxpQ2pCMjJFSCxpQ2lCeDJFQywyQ0FBQSxrQ2hCNDJFRiwwQkFDQSwwQkFDQSxvQ0FDQSwyQkFLRSxZQUFhLEtnQmwzRVgsaUNqQmczRUgsaUNBQ0YsMkNpQnQyRUMsa0NoQnkyRUEsMEJBQ0EsMEJBQ0Esb0NBQ0EsMkJnQjMyRUEsWUFBQSxNaEJtM0VGLFlnQnoyRUUsY0FBQSxLQUdBLFVBREEsT2pCbTJFRCxTQUFBLFNpQnYyRUMsUUFBUyxNaEJrM0VULFdBQVksS2dCMTJFVixjQUFBLEtBR0EsZ0JBREEsYUFFQSxXQUFBLEtqQm0yRUgsYUFBQSxLaUJoMkVDLGNBQWUsRWhCMjJFZixZQUFhLElBQ2IsT0FBUSxRZ0J0MkVSLCtCakJrMkVELHNDaUJwMkVDLHlCQUNBLGdDQUlBLFNBQVUsU2hCMDJFVixXQUFZLE1nQngyRVosWUFBQSxNQUlGLG9CQUFBLGNBRUUsV0FBQSxLQUdBLGlCQURBLGNBRUEsU0FBQSxTQUNBLFFBQUEsYUFDQSxhQUFBLEtqQisxRUQsY0FBQSxFaUI3MUVDLFlBQWEsSWhCdzJFYixlQUFnQixPZ0J0MkVoQixPQUFBLFFBVUEsa0NqQnMxRUQsNEJDV0MsV0FBWSxFQUNaLFlBQWEsS2dCejFFYix3Q0FBQSxxQ2pCcTFFRCw4QkNPRCwrQmdCbDJFSSwyQmhCaTJFSiw0QkFNRSxPQUFRLFlETlQsMEJpQnoxRUcsdUJBTUYsb0NBQUEsaUNoQisxRUEsT0FBUSxZRE5ULHlCaUJ0MUVLLHNCQWFKLG1DQUZGLGdDQUdFLE9BQUEsWUFHQSxxQmpCMjBFRCxXQUFBLEtpQnowRUMsWUFBQSxJaEJvMUVBLGVBQWdCLElnQmwxRWQsY0FBQSxFakI0MEVILDhCaUI5ekVELDhCQ25RRSxjQUFBLEVBQ0EsYUFBQSxFQUVBLFVBQ0EsT0FBQSxLbEJva0ZELFFBQUEsSUFBQSxLa0Jsa0ZDLFVBQUEsS0FDRSxZQUFBLElBQ0EsY0FBQSxJQUdGLGdCakI0a0ZBLE9BQVEsS2lCMWtGTixZQUFBLEtEMlBBLDBCQUZKLGtCQUdJLE9BQUEsS0FFQSw2QkFDQSxPQUFBLEtqQjIwRUgsUUFBQSxJQUFBLEtpQmoxRUMsVUFBVyxLQVNULFlBQUEsSUFDQSxjQUFBLElBVkosbUNoQmcyRUUsT0FBUSxLZ0JsMUVOLFlBQUEsS0FHQSw2Q0FqQkoscUNBa0JJLE9BQUEsS0FFQSxvQ0FDQSxPQUFBLEtqQjIwRUgsV0FBQSxLaUJ2MEVDLFFBQVMsSUFBSSxLQy9SYixVQUFBLEtBQ0EsWUFBQSxJQUVBLFVBQ0EsT0FBQSxLbEJ5bUZELFFBQUEsS0FBQSxLa0J2bUZDLFVBQUEsS0FDRSxZQUFBLFVBQ0EsY0FBQSxJQUdGLGdCakJpbkZBLE9BQVEsS2lCL21GTixZQUFBLEtEdVJBLDBCQUZKLGtCQUdJLE9BQUEsS0FFQSw2QkFDQSxPQUFBLEtqQm8xRUgsUUFBQSxLQUFBLEtpQjExRUMsVUFBVyxLQVNULFlBQUEsVUFDQSxjQUFBLElBVkosbUNoQnkyRUUsT0FBUSxLZ0IzMUVOLFlBQUEsS0FHQSw2Q0FqQkoscUNBa0JJLE9BQUEsS0FFQSxvQ0FDQSxPQUFBLEtqQm8xRUgsV0FBQSxLaUIzMEVDLFFBQVMsS0FBSyxLQUVkLFVBQUEsS2pCNDBFRCxZQUFBLFVpQngwRUcsY2pCMjBFSCxTQUFBLFNpQnQwRUMsNEJBQ0EsY0FBQSxPQUVBLHVCQUNBLFNBQUEsU0FDQSxJQUFBLEVBQ0EsTUFBQSxFQUNBLFFBQUEsRUFDQSxRQUFBLE1BQ0EsTUFBQSxLakJ5MEVELE9BQUEsS2lCdjBFQyxZQUFhLEtoQmsxRWIsV0FBWSxPQUNaLGVBQWdCLEtETGpCLG9EaUJ6MEVDLHVDQURBLGlDQUdBLE1BQU8sS2hCazFFUCxPQUFRLEtBQ1IsWUFBYSxLRExkLG9EaUJ6MEVDLHVDQURBLGlDQUtBLE1BQU8sS2hCZzFFUCxPQUFRLEtBQ1IsWUFBYSxLQUtmLHVCQUVBLDhCQUpBLDRCQURBLHlCQUVBLG9CQUVBLDJCRE5DLDRCa0J2dUZHLG1DQUpBLHlCRDBaSixnQ2J2V0UsTUFBQSxRSjZyRkQsMkJrQjF1RkcsYUFBQSxRQUNFLG1CQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsaUJkNENKLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkprc0ZELGlDaUIzMUVDLGFBQWMsUUM1WVosbUJBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFBQSxFQUFBLEVBQUEsSUFBQSxRQUNBLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFBQSxFQUFBLEVBQUEsSUFBQSxRbEIydUZILGdDaUJoMkVDLE1BQU8sUUN0WUwsaUJBQUEsUWxCeXVGSCxhQUFBLFFDV0Qsb0NBQ0UsTUFBTyxRQUtULHVCQUVBLDhCQUpBLDRCQURBLHlCQUVBLG9CQUVBLDJCRE5DLDRCa0Jyd0ZHLG1DQUpBLHlCRDZaSixnQ2IxV0UsTUFBQSxRSjJ0RkQsMkJrQnh3RkcsYUFBQSxRQUNFLG1CQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsaUJkNENKLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkpndUZELGlDaUJ0M0VDLGFBQWMsUUMvWVosbUJBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFBQSxFQUFBLEVBQUEsSUFBQSxRQUNBLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFBQSxFQUFBLEVBQUEsSUFBQSxRbEJ5d0ZILGdDaUIzM0VDLE1BQU8sUUN6WUwsaUJBQUEsUWxCdXdGSCxhQUFBLFFDV0Qsb0NBQ0UsTUFBTyxRQUtULHFCQUVBLDRCQUpBLDBCQURBLHVCQUVBLGtCQUVBLHlCRE5DLDBCa0JueUZHLGlDQUpBLHVCRGdhSiw4QmI3V0UsTUFBQSxRSnl2RkQseUJrQnR5RkcsYUFBQSxRQUNFLG1CQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsaUJkNENKLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQko4dkZELCtCaUJqNUVDLGFBQWMsUUNsWlosbUJBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFBQSxFQUFBLEVBQUEsSUFBQSxRQUNBLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFBQSxFQUFBLEVBQUEsSUFBQSxRbEJ1eUZILDhCaUJ0NUVDLE1BQU8sUUM1WUwsaUJBQUEsUWxCcXlGSCxhQUFBLFFpQmo1RUcsa0NqQm81RUgsTUFBQSxRaUJqNUVHLDJDakJvNUVILElBQUEsS2lCejRFQyxtREFDQSxJQUFBLEVBRUEsWWpCNDRFRCxRQUFBLE1pQnp6RUMsV0FBWSxJQXdFWixjQUFlLEtBdElYLE1BQUEsUUFFQSx5QmpCMjNFSCx5QmlCdnZFQyxRQUFTLGFBL0hQLGNBQUEsRUFDQSxlQUFBLE9qQjAzRUgsMkJpQjV2RUMsUUFBUyxhQXhIUCxNQUFBLEtqQnUzRUgsZUFBQSxPaUJuM0VHLGtDQUNBLFFBQUEsYUFtSEosMEJoQjh3RUUsUUFBUyxhQUNULGVBQWdCLE9nQnYzRWQsd0NqQmczRUgsNkNpQnh3RUQsMkNqQjJ3RUMsTUFBQSxLaUIvMkVHLHdDQUNBLE1BQUEsS0FtR0osNEJoQjB4RUUsY0FBZSxFZ0J0M0ViLGVBQUEsT0FHQSx1QkFEQSxvQmpCZzNFSCxRQUFBLGFpQnR4RUMsV0FBWSxFaEJpeUVaLGNBQWUsRWdCdjNFWCxlQUFBLE9Bc0ZOLDZCQUFBLDBCQWpGSSxhQUFBLEVBaUZKLDRDakIreEVDLHNDaUIxMkVHLFNBQUEsU2pCNjJFSCxZQUFBLEVpQmwyRUQsa0RoQjgyRUUsSUFBSyxHZ0JwMkVMLDJCakJpMkVILGtDaUJsMkVHLHdCQUVBLCtCQVhGLFlBQWEsSWhCczNFYixXQUFZLEVnQnIyRVYsY0FBQSxFSnZpQkYsMkJJc2hCRix3QkpyaEJFLFdBQUEsS0k0akJBLDZCQXlCQSxhQUFjLE1BbkNWLFlBQUEsTUFFQSx5QmpCMDFFSCxnQ0FDRixZQUFBLElpQjEzRUcsY0FBZSxFQXdDZixXQUFBLE9Bd0JKLHNEQWRRLE1BQUEsS2pCZzFFTCx5QkFDRiwrQ2lCcjBFQyxZQUFBLEtBRUUsVUFBVyxNakJ3MEVaLHlCQUNGLCtDbUJ0NkZHLFlBQWEsSUFDZixVQUFBLE1BR0EsS0FDQSxRQUFBLGFBQ0EsUUFBQSxJQUFBLEtBQUEsY0FBQSxFQUNBLFVBQUEsS0FDQSxZQUFBLElBQ0EsWUFBQSxXQUNBLFdBQUEsT0MwQ0EsWUFBQSxPQUNBLGVBQUEsT0FDQSxpQkFBQSxhQUNBLGFBQUEsYWhCK0pBLE9BQUEsUUFDRyxvQkFBQSxLQUNDLGlCQUFBLEtBQ0ksZ0JBQUEsS0ppdUZULFlBQUEsS21CejZGRyxpQkFBQSxLbEJxN0ZGLE9BQVEsSUFBSSxNQUFNLFlBQ2xCLGNBQWUsSURIaEIsa0JLeDhGQyxrQkFFQSxXQUNBLGtCSjI4RkYsa0JBREEsV2tCbDdGRSxRQUFBLEtBQUEsT2xCeTdGQSxRQUFTLElBQUksS0FBSyx5QkFDbEIsZUFBZ0IsS2tCbjdGaEIsV25CNDZGRCxXbUIvNkZHLFdsQjI3RkYsTUFBTyxLa0J0N0ZMLGdCQUFBLEtmNkJNLFlBRFIsWUpxNUZELGlCQUFBLEttQjU2RkMsUUFBQSxFbEJ3N0ZBLG1CQUFvQixNQUFNLEVBQUUsSUFBSSxJQUFJLGlCQUM1QixXQUFZLE1BQU0sRUFBRSxJQUFJLElBQUksaUJvQm4rRnBDLGNBR0EsZWpCOERBLHdCQUNRLE9BQUEsWUo2NUZULE9BQUEsa0JtQjU2RkcsbUJBQUEsS2xCdzdGTSxXQUFZLEtrQnQ3RmhCLFFBQUEsSUFTTixlQzNERSx5QkFDQSxlQUFBLEtwQm8rRkQsYW9CaitGQyxNQUFBLEtuQjYrRkEsaUJBQWtCLEttQjMrRmhCLGFBQUEsS3BCcStGSCxtQm9CbitGTyxtQkFFTixNQUFBLEtBQ0UsaUJBQUEsUUFDQSxhQUFBLFFwQm8rRkgsbUJvQmorRkMsTUFBQSxLbkI2K0ZBLGlCQUFrQixRQUNsQixhQUFjLFFtQnorRlIsb0JBREosb0JwQm8rRkgsbUNvQmorRkcsTUFBQSxLbkI2K0ZGLGlCQUFrQixRQUNsQixhQUFjLFFtQnorRk4sMEJuQisrRlYsMEJBSEEsMEJtQjcrRk0sMEJuQisrRk4sMEJBSEEsMEJERkMseUNvQjMrRksseUNuQisrRk4seUNtQjErRkUsTUFBQSxLbkJrL0ZBLGlCQUFrQixRQUNsQixhQUFjLFFtQjMrRlosb0JwQm0rRkgsb0JvQm4rRkcsbUNuQmcvRkYsaUJBQWtCLEttQjUrRlYsNEJuQmkvRlYsNEJBSEEsNEJESEMsNkJDT0QsNkJBSEEsNkJrQjk5RkEsc0NDbEJNLHNDbkJpL0ZOLHNDbUIzK0ZJLGlCQUFBLEtBQ0EsYUFBQSxLRGNKLG9CQzlERSxNQUFBLEtBQ0EsaUJBQUEsS3BCNmhHRCxhb0IxaEdDLE1BQUEsS25Cc2lHQSxpQkFBa0IsUW1CcGlHaEIsYUFBQSxRcEI4aEdILG1Cb0I1aEdPLG1CQUVOLE1BQUEsS0FDRSxpQkFBQSxRQUNBLGFBQUEsUXBCNmhHSCxtQm9CMWhHQyxNQUFBLEtuQnNpR0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CbGlHUixvQkFESixvQnBCNmhHSCxtQ29CMWhHRyxNQUFBLEtuQnNpR0YsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CbGlHTiwwQm5Cd2lHViwwQkFIQSwwQm1CdGlHTSwwQm5Cd2lHTiwwQkFIQSwwQkRGQyx5Q29CcGlHSyx5Q25Cd2lHTix5Q21CbmlHRSxNQUFBLEtuQjJpR0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CcGlHWixvQnBCNGhHSCxvQm9CNWhHRyxtQ25CeWlHRixpQkFBa0IsS21CcmlHViw0Qm5CMGlHViw0QkFIQSw0QkRIQyw2QkNPRCw2QkFIQSw2QmtCcGhHQSxzQ0NyQk0sc0NuQjBpR04sc0NtQnBpR0ksaUJBQUEsUUFDQSxhQUFBLFFEa0JKLG9CQ2xFRSxNQUFBLFFBQ0EsaUJBQUEsS3BCc2xHRCxhb0JubEdDLE1BQUEsS25CK2xHQSxpQkFBa0IsUW1CN2xHaEIsYUFBQSxRcEJ1bEdILG1Cb0JybEdPLG1CQUVOLE1BQUEsS0FDRSxpQkFBQSxRQUNBLGFBQUEsUXBCc2xHSCxtQm9CbmxHQyxNQUFBLEtuQitsR0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CM2xHUixvQkFESixvQnBCc2xHSCxtQ29CbmxHRyxNQUFBLEtuQitsR0YsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CM2xHTiwwQm5CaW1HViwwQkFIQSwwQm1CL2xHTSwwQm5CaW1HTiwwQkFIQSwwQkRGQyx5Q29CN2xHSyx5Q25CaW1HTix5Q21CNWxHRSxNQUFBLEtuQm9tR0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CN2xHWixvQnBCcWxHSCxvQm9CcmxHRyxtQ25Ca21HRixpQkFBa0IsS21COWxHViw0Qm5CbW1HViw0QkFIQSw0QkRIQyw2QkNPRCw2QkFIQSw2QmtCemtHQSxzQ0N6Qk0sc0NuQm1tR04sc0NtQjdsR0ksaUJBQUEsUUFDQSxhQUFBLFFEc0JKLG9CQ3RFRSxNQUFBLFFBQ0EsaUJBQUEsS3BCK29HRCxVb0I1b0dDLE1BQUEsS25Cd3BHQSxpQkFBa0IsUW1CdHBHaEIsYUFBQSxRcEJncEdILGdCb0I5b0dPLGdCQUVOLE1BQUEsS0FDRSxpQkFBQSxRQUNBLGFBQUEsUXBCK29HSCxnQm9CNW9HQyxNQUFBLEtuQndwR0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CcHBHUixpQkFESixpQnBCK29HSCxnQ29CNW9HRyxNQUFBLEtuQndwR0YsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CcHBHTix1Qm5CMHBHVix1QkFIQSx1Qm1CeHBHTSx1Qm5CMHBHTix1QkFIQSx1QkRGQyxzQ29CdHBHSyxzQ25CMHBHTixzQ21CcnBHRSxNQUFBLEtuQjZwR0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CdHBHWixpQnBCOG9HSCxpQm9COW9HRyxnQ25CMnBHRixpQkFBa0IsS21CdnBHVix5Qm5CNHBHVix5QkFIQSx5QkRIQywwQkNPRCwwQkFIQSwwQmtCOW5HQSxtQ0M3Qk0sbUNuQjRwR04sbUNtQnRwR0ksaUJBQUEsUUFDQSxhQUFBLFFEMEJKLGlCQzFFRSxNQUFBLFFBQ0EsaUJBQUEsS3BCd3NHRCxhb0Jyc0dDLE1BQUEsS25CaXRHQSxpQkFBa0IsUW1CL3NHaEIsYUFBQSxRcEJ5c0dILG1Cb0J2c0dPLG1CQUVOLE1BQUEsS0FDRSxpQkFBQSxRQUNBLGFBQUEsUXBCd3NHSCxtQm9CcnNHQyxNQUFBLEtuQml0R0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CN3NHUixvQkFESixvQnBCd3NHSCxtQ29CcnNHRyxNQUFBLEtuQml0R0YsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CN3NHTiwwQm5CbXRHViwwQkFIQSwwQm1CanRHTSwwQm5CbXRHTiwwQkFIQSwwQkRGQyx5Q29CL3NHSyx5Q25CbXRHTix5Q21COXNHRSxNQUFBLEtuQnN0R0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CL3NHWixvQnBCdXNHSCxvQm9CdnNHRyxtQ25Cb3RHRixpQkFBa0IsS21CaHRHViw0Qm5CcXRHViw0QkFIQSw0QkRIQyw2QkNPRCw2QkFIQSw2QmtCbnJHQSxzQ0NqQ00sc0NuQnF0R04sc0NtQi9zR0ksaUJBQUEsUUFDQSxhQUFBLFFEOEJKLG9CQzlFRSxNQUFBLFFBQ0EsaUJBQUEsS3BCaXdHRCxZb0I5dkdDLE1BQUEsS25CMHdHQSxpQkFBa0IsUW1CeHdHaEIsYUFBQSxRcEJrd0dILGtCb0Jod0dPLGtCQUVOLE1BQUEsS0FDRSxpQkFBQSxRQUNBLGFBQUEsUXBCaXdHSCxrQm9COXZHQyxNQUFBLEtuQjB3R0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CdHdHUixtQkFESixtQnBCaXdHSCxrQ29COXZHRyxNQUFBLEtuQjB3R0YsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CdHdHTix5Qm5CNHdHVix5QkFIQSx5Qm1CMXdHTSx5Qm5CNHdHTix5QkFIQSx5QkRGQyx3Q29CeHdHSyx3Q25CNHdHTix3Q21CdndHRSxNQUFBLEtuQit3R0EsaUJBQWtCLFFBQ2xCLGFBQWMsUW1CeHdHWixtQnBCZ3dHSCxtQm9CaHdHRyxrQ25CNndHRixpQkFBa0IsS21CendHViwyQm5COHdHViwyQkFIQSwyQkRIQyw0QkNPRCw0QkFIQSw0QmtCeHVHQSxxQ0NyQ00scUNuQjh3R04scUNtQnh3R0ksaUJBQUEsUUFDQSxhQUFBLFFEdUNKLG1CQUNFLE1BQUEsUUFDQSxpQkFBQSxLbkJrdUdELFVtQi90R0MsWUFBQSxJbEIydUdBLE1BQU8sUUFDUCxjQUFlLEVBRWpCLFVHNXdHRSxpQmVtQ0UsaUJmbENNLG9CSnF3R1QsNkJtQmh1R0MsaUJBQUEsWWxCNHVHQSxtQkFBb0IsS0FDWixXQUFZLEtrQnp1R2xCLFVBRUYsaUJBQUEsZ0JuQmd1R0QsZ0JtQjl0R0csYUFBQSxZbkJvdUdILGdCbUJsdUdHLGdCQUlBLE1BQUEsUWxCMHVHRixnQkFBaUIsVUFDakIsaUJBQWtCLFlETm5CLDBCbUJudUdLLDBCQVVOLG1DQVRNLG1DbEI4dUdKLE1BQU8sS21CN3lHUCxnQkFBQSxLQUdBLG1CQURBLFFwQnN5R0QsUUFBQSxLQUFBLEttQjV0R0MsVUFBVyxLbEJ3dUdYLFlBQWEsVW1CcHpHYixjQUFBLElBR0EsbUJBREEsUXBCNnlHRCxRQUFBLElBQUEsS21CL3RHQyxVQUFXLEtsQjJ1R1gsWUFBYSxJbUIzekdiLGNBQUEsSUFHQSxtQkFEQSxRcEJvekdELFFBQUEsSUFBQSxJbUI5dEdDLFVBQVcsS0FDWCxZQUFBLElBQ0EsY0FBQSxJQUlGLFdBQ0UsUUFBQSxNbkI4dEdELE1BQUEsS0NZRCxzQkFDRSxXQUFZLElxQjUzR1osNkJBREYsNEJ0QnEzR0MsNkJJaHNHQyxNQUFBLEtBRVEsTUpvc0dULFFBQUEsRXNCeDNHQyxtQkFBQSxRQUFBLEtBQUEsT0FDRSxjQUFBLFFBQUEsS0FBQSxPdEIwM0dILFdBQUEsUUFBQSxLQUFBLE9zQnIzR0MsU3RCdzNHRCxRQUFBLEVzQnQzR2EsVXRCeTNHYixRQUFBLEtzQngzR2EsYXRCMjNHYixRQUFBLE1zQjEzR2EsZXRCNjNHYixRQUFBLFVzQnozR0Msa0JBQ0EsUUFBQSxnQmxCd0tBLFlBQ1EsU0FBQSxTQUFBLE9BQUEsRUFPUixTQUFBLE9BQ1EsbUNBQUEsS0FBQSw4QkFBQSxLQUdSLDJCQUFBLEtBQ1EsNEJBQUEsS0FBQSx1QkFBQSxLSjhzR1Qsb0JBQUEsS3VCeDVHQyw0QkFBNkIsT0FBUSxXQUNyQyx1QkFBQSxPQUFBLFdBQ0Esb0JBQUEsT0FBQSxXQUVBLE9BQ0EsUUFBQSxhQUNBLE1BQUEsRUFDQSxPQUFBLEVBQ0EsWUFBQSxJQUNBLGVBQUEsT3ZCMDVHRCxXQUFBLElBQUEsT3VCdDVHQyxXQUFZLElBQUksUXRCcTZHaEIsYUFBYyxJQUFJLE1BQU0sWXNCbjZHeEIsWUFBQSxJQUFBLE1BQUEsWUFLQSxVQURGLFF2QnU1R0MsU0FBQSxTdUJqNUdDLHVCQUNBLFFBQUEsRUFFQSxlQUNBLFNBQUEsU0FDQSxJQUFBLEtBQ0EsS0FBQSxFQUNBLFFBQUEsS0FDQSxRQUFBLEtBQ0EsTUFBQSxLQUNBLFVBQUEsTUFDQSxRQUFBLElBQUEsRUFDQSxPQUFBLElBQUEsRUFBQSxFQUNBLFVBQUEsS0FDQSxXQUFBLEtBQ0EsV0FBQSxLbkJzQkEsaUJBQUEsS0FDUSx3QkFBQSxZbUJyQlIsZ0JBQUEsWXRCazZHQSxPc0JsNkdBLElBQUEsTUFBQSxLdkJxNUdELE9BQUEsSUFBQSxNQUFBLGdCdUJoNUdDLGNBQUEsSUFDRSxtQkFBQSxFQUFBLElBQUEsS0FBQSxpQkFDQSxXQUFBLEVBQUEsSUFBQSxLQUFBLGlCQXpCSiwwQkN6QkUsTUFBQSxFQUNBLEtBQUEsS0FFQSx3QnhCdThHRCxPQUFBLEl1Qmo3R0MsT0FBUSxJQUFJLEVBbUNWLFNBQUEsT0FDQSxpQkFBQSxRQUVBLG9CQUNBLFFBQUEsTUFDQSxRQUFBLElBQUEsS0FDQSxNQUFBLEt2Qmk1R0gsWUFBQSxJdUIzNEdDLFlBQUEsV3RCMjVHQSxNQUFPLEtzQno1R0wsWUFBQSxPdkIrNEdILDBCdUI3NEdHLDBCQU1GLE1BQUEsUXRCdTVHQSxnQkFBaUIsS0FDakIsaUJBQWtCLFFzQnA1R2hCLHlCQUVBLCtCQURBLCtCdkIwNEdILE1BQUEsS3VCaDRHQyxnQkFBQSxLdEJnNUdBLGlCQUFrQixRQUNsQixRQUFTLEVEWlYsMkJ1QjkzR0MsaUNBQUEsaUNBRUUsTUFBQSxLRXpHRixpQ0YyR0UsaUNBRUEsZ0JBQUEsS3ZCZzRHSCxPQUFBLFl1QjMzR0MsaUJBQWtCLFlBR2hCLGlCQUFBLEt2QjIzR0gsT0FBQSwwRHVCdDNHRyxxQnZCeTNHSCxRQUFBLE11QmgzR0MsUUFDQSxRQUFBLEVBUUYscUJBQ0UsTUFBQSxFQUNBLEtBQUEsS0FJRixvQkFDRSxNQUFBLEtBQ0EsS0FBQSxFQUVBLGlCQUNBLFFBQUEsTUFDQSxRQUFBLElBQUEsS3ZCMjJHRCxVQUFBLEt1QnYyR0MsWUFBYSxXQUNiLE1BQUEsS0FDQSxZQUFBLE9BRUEsbUJBQ0EsU0FBQSxNQUNBLElBQUEsRXZCeTJHRCxNQUFBLEV1QnIyR0MsT0FBUSxFQUNSLEtBQUEsRUFDQSxRQUFBLElBUUYsMkJ0QisyR0UsTUFBTyxFc0IzMkdMLEtBQUEsS0FFQSxlQUNBLHNDdkIrMUdILFFBQUEsR3VCdDJHQyxXQUFZLEV0QnMzR1osY0FBZSxJQUFJLE9zQjMyR2pCLGNBQUEsSUFBQSxRQUVBLHVCdkIrMUdILDhDdUIxMEdDLElBQUssS0FYTCxPQUFBLEtBcEVBLGNBQUEsSXZCODVHQyx5QnVCMTFHRCw2QkExREEsTUFBQSxFQUNBLEtBQUEsS3ZCdzVHRCxrQzBCdmlIRyxNQUFPLEt6QnVqSFAsS0FBTSxHeUJuakhSLFcxQnlpSEQsb0IwQjdpSEMsU0FBVSxTekI2akhWLFFBQVMsYXlCdmpIUCxlQUFBLE9BR0EseUIxQnlpSEgsZ0JDZ0JDLFNBQVUsU0FDVixNQUFPLEt5QmhqSFQsZ0MxQnlpSEMsZ0NDWUQsK0JBRkEsK0J5Qm5qSEEsdUJBTk0sdUJ6QjBqSE4sc0JBRkEsc0JBUUUsUUFBUyxFeUJyakhQLHFCMUIwaUhILDJCMEJyaUhELDJCQUNFLGlDMUJ1aUhELFlBQUEsS0NnQkQsYUFDRSxZQUFhLEtEWmQsa0IwQjdpSEQsd0JBQUEsMEJ6QjhqSEUsTUFBTyxLRFpSLGtCMEJsaUhELHdCQUNFLDBCMUJvaUhELFlBQUEsSTBCL2hIQyx5RTFCa2lIRCxjQUFBLEUyQm5sSEMsNEJBQ0csWUFBQSxFRHNETCxtRXpCZ2pIRSx3QkFBeUIsRTBCL2xIekIsMkJBQUEsRTNCb2xIRCw2QzBCL2hIRCw4Q0FDRSx1QkFBQSxFMUJpaUhELDBCQUFBLEUwQjloSEMsc0IxQmlpSEQsTUFBQSxLQ2dCRCw4RDBCbG5IRSxjQUFBLEUzQnVtSEQsbUUwQjloSEQsb0VDakVFLHdCQUFBLEVBQ0csMkJBQUEsRURxRUwsb0V6QjZpSEUsdUJBQXdCLEV5QjNpSHhCLDBCQUFBLEVBaUJGLG1DQUNFLGlDQUNBLFFBQUEsRUFFRixpQ0FDRSxjQUFBLElBQ0EsYUFBQSxJQUtGLG9DdEIvQ0UsY0FBQSxLQUNRLGFBQUEsS3NCa0RSLGlDdEJuREEsbUJBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFDUSxXQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsaUJzQnlEViwwQ0FDRSxtQkFBQSxLMUIwZ0hELFdBQUEsSzBCdGdIQyxZQUNBLFlBQUEsRUFHRixlQUNFLGFBQUEsSUFBQSxJQUFBLEUxQndnSEQsb0JBQUEsRUNnQkQsdUJBQ0UsYUFBYyxFQUFFLElBQUksSXlCN2dIbEIseUJBQ0EsK0JBQ0Esb0MxQmtnSEgsUUFBQSxNMEJ6Z0hDLE1BQU8sS0FjSCxNQUFBLEsxQjgvR0wsVUFBQSxLQ2dCRCxvQ0FDRSxNQUFPLEt5QnZnSEwsOEJBQ0Esb0MxQjQvR0gsb0MwQnYvR0MsMENBQ0UsV0FBQSxLMUJ5L0dILFlBQUEsRTJCbHFIQyw0REFDQyxjQUFBLEVBUUEsc0QzQitwSEYsdUJBQUEsSTBCei9HQyx3QkFBQSxJQy9LQSwyQkFBQSxFQUNDLDBCQUFBLEVBUUEsc0QzQnFxSEYsdUJBQUEsRTBCMS9HQyx3QkFBeUIsRUFDekIsMkJBQUEsSTFCNC9HRCwwQkFBQSxJQ2dCRCx1RTBCenJIRSxjQUFBLEUzQjhxSEQsNEUwQnovR0QsNkVDN0xFLDJCQUFBLEVBQ0MsMEJBQUEsRURvTUgsNkVBQ0UsdUJBQUEsRUFDQSx3QkFBQSxFQUVBLHFCMUJ1L0dELFFBQUEsTTBCMy9HQyxNQUFPLEt6QjJnSFAsYUFBYyxNeUJwZ0haLGdCQUFBLFNBRUEsMEIxQncvR0gsZ0MwQmpnSEMsUUFBUyxXQVlQLE1BQUEsSzFCdy9HSCxNQUFBLEcwQnAvR0cscUMxQnUvR0gsTUFBQSxLQ2dCRCwrQ0FDRSxLQUFNLEt5QmgvR0YsZ0RBRkEsNkMxQnkrR0wsMkQwQngrR0ssd0RFek9KLFNBQVUsU0FDVixLQUFBLGNBQ0EsZUFBQSxLNUJvdEhELGE0Qmh0SEMsU0FBQSxTQUNFLFFBQUEsTUFDQSxnQkFBQSxTNUJtdEhILDBCNEIzdEhDLE1BQU8sS0FlTCxjQUFBLEVBQ0EsYUFBQSxFQU9BLDJCQUNBLFNBQUEsUzVCMHNISCxRQUFBLEU0QnhzSEcsTUFBQSxLQUNFLE1BQUEsSzVCMHNITCxjQUFBLEVDZ0JELGlDQUNFLFFBQVMsRWlCdHJIVCw4QkFDQSxtQ0FDQSxzQ0FDQSxPQUFBLEtsQjJxSEQsUUFBQSxLQUFBLEtrQnpxSEMsVUFBQSxLakJ5ckhBLFlBQWEsVUFDYixjQUFlLElpQnhySGIsb0NsQjZxSEgseUNrQjFxSEMsNENqQjBySEEsT0FBUSxLQUNSLFlBQWEsS0RUZCw4QzRCbHRIRCxtREFBQSxzRDNCNnRIQSxzQ0FDQSwyQ2lCNXJISSw4Q2pCaXNIRixPQUFRLEtpQjdzSFIsOEJBQ0EsbUNBQ0Esc0NBQ0EsT0FBQSxLbEJrc0hELFFBQUEsSUFBQSxLa0Joc0hDLFVBQUEsS2pCZ3RIQSxZQUFhLElBQ2IsY0FBZSxJaUIvc0hiLG9DbEJvc0hILHlDa0Jqc0hDLDRDakJpdEhBLE9BQVEsS0FDUixZQUFhLEtEVGQsOEM0Qmh1SEQsbURBQUEsc0QzQjJ1SEEsc0NBQ0EsMkNpQm50SEksOENqQnd0SEYsT0FBUSxLMkI1dUhSLDJCNUJndUhELG1CNEJodUhDLGlCM0JpdkhBLFFBQVMsVzJCNXVIWCw4RDVCZ3VIQyxzRDRCaHVIRCxvREFFRSxjQUFBLEVBRUEsbUI1Qmt1SEQsaUI0Qjd0SEMsTUFBTyxHQUNQLFlBQUEsT0FDQSxlQUFBLE9BRUEsbUJBQ0EsUUFBQSxJQUFBLEtBQ0EsVUFBQSxLQUNBLFlBQUEsSUFDQSxZQUFBLEVBQ0EsTUFBQSxLNUIrdEhELFdBQUEsTzRCNXRIQyxpQkFBQSxLQUNFLE9BQUEsSUFBQSxNQUFBLEtBQ0EsY0FBQSxJNUIrdEhILDRCNEI1dEhDLFFBQUEsSUFBQSxLQUNFLFVBQUEsS0FDQSxjQUFBLEk1Qit0SEgsNEI0Qmx2SEMsUUFBUyxLQUFLLEszQmt3SGQsVUFBVyxLMkJ4dUhULGNBQUEsSUFLSix3Q0FBQSxxQzNCd3VIRSxXQUFZLEVBRWQsdUNBQ0EsK0JBQ0Esa0MwQmgxSEUsNkNBQ0csOENDNEdMLDZENUJ3dEhDLHdFNEJ2dEhDLHdCQUFBLEU1QjB0SEQsMkJBQUEsRUNnQkQsK0JBQ0UsYUFBYyxFQUVoQixzQ0FDQSw4QjJCbnVIQSwrRDVCeXRIQyxvRENXRCxpQzBCcjFIRSw0Q0FDRyw2Q0NpSEgsdUJBQUEsRTVCMnRIRCwwQkFBQSxFNEJydEhDLDhCQUdBLFlBQUEsRTVCdXRIRCxpQjRCM3RIQyxTQUFVLFNBVVIsVUFBQSxFNUJvdEhILFlBQUEsTzRCbHRISyxzQjVCcXRITCxTQUFBLFNDZ0JELDJCQUNFLFlBQWEsSzJCM3RIYiw2QkFBQSw0QjVCK3NIRCw0QjRCNXNISyxRQUFBLEVBR0osa0NBQUEsd0NBR0ksYUFBQSxLNUIrc0hMLGlDNkI3MkhELHVDQUNFLFFBQUEsRUFDQSxZQUFBLEs3QmczSEQsSzZCbDNIQyxhQUFjLEVBT1osY0FBQSxFQUNBLFdBQUEsS0FSSixRQVdNLFNBQUEsU0FDQSxRQUFBLE03QisySEwsVTZCNzJISyxTQUFBLFM1QjYzSEosUUFBUyxNNEIzM0hILFFBQUEsS0FBQSxLQU1KLGdCN0IwMkhILGdCNkJ6MkhLLGdCQUFBLEs3QjQySEwsaUJBQUEsS0NnQkQsbUI0QngzSFEsTUFBQSxLQUdBLHlCQURBLHlCN0I2MkhQLE1BQUEsSzZCcjJIRyxnQkFBQSxLNUJxM0hGLE9BQVEsWUFDUixpQkFBa0IsWTRCbDNIZCxhQXpDTixtQjdCZzVIQyxtQndCbjVIQyxpQkFBQSxLQUNBLGFBQUEsUUFFQSxrQnhCczVIRCxPQUFBLEk2QnQ1SEMsT0FBUSxJQUFJLEVBMERWLFNBQUEsTzdCKzFISCxpQkFBQSxRNkJyMUhDLGM3QncxSEQsVUFBQSxLNkJ0MUhHLFVBRUEsY0FBQSxJQUFBLE1BQUEsS0FMSixhQVNNLE1BQUEsS0FDQSxjQUFBLEtBRUEsZTdCdTFITCxhQUFBLEk2QnQxSEssWUFBQSxXQUNFLE9BQUEsSUFBQSxNQUFBLFk3QncxSFAsY0FBQSxJQUFBLElBQUEsRUFBQSxFQ2dCRCxxQkFDRSxhQUFjLEtBQUssS0FBSyxLNEIvMUhsQixzQkFFQSw0QkFEQSw0QkFFQSxNQUFBLEs3Qm8xSFAsT0FBQSxRNkIvMEhDLGlCQUFBLEtBcURBLE9BQUEsSUFBQSxNQUFBLEtBOEJBLG9CQUFBLFlBbkZBLHdCQXdERSxNQUFBLEs3Qjh4SEgsY0FBQSxFNkI1eEhLLDJCQUNBLE1BQUEsS0EzREosNkJBZ0VFLGNBQUEsSUFDQSxXQUFBLE9BWUosaURBMERFLElBQUssS0FqRUQsS0FBQSxLN0I2eEhILHlCNkI1dEhELDJCQTlETSxRQUFBLFc3QjZ4SEwsTUFBQSxHNkJ0MkhELDZCQXVGRSxjQUFBLEdBdkZGLDZCNUIyM0hBLGFBQWMsRUFDZCxjQUFlLElEWmhCLGtDNkJ6dUhELHdDQTNCQSx3Q0FUTSxPQUFBLElBQUEsTUFBQSxLN0JreEhILHlCNkI5dUhELDZCNUI4dkhFLGNBQWUsSUFBSSxNQUFNLEtBQ3pCLGNBQWUsSUFBSSxJQUFJLEVBQUUsRURaMUIsa0M2QmozSEQsd0M3QmszSEQsd0M2QmgzSEcsb0JBQUEsTUFJRSxjN0JrM0hMLE1BQUEsSzZCLzJISyxnQjdCazNITCxjQUFBLElDZ0JELGlCQUNFLFlBQWEsSTRCMTNIUCx1QkFRUiw2QjdCdTJIQyw2QjZCcjJIRyxNQUFBLEs3QncySEgsaUJBQUEsUTZCdDJISyxnQkFDQSxNQUFBLEtBWU4sbUJBQ0UsV0FBQSxJN0IrMUhELFlBQUEsRTZCNTFIRyxlN0IrMUhILE1BQUEsSzZCNzFISyxrQkFDQSxNQUFBLEtBUE4sb0JBWUksY0FBQSxJQUNBLFdBQUEsT0FZSix3Q0EwREUsSUFBSyxLQWpFRCxLQUFBLEs3QjgxSEgseUI2Qjd4SEQsa0JBOURNLFFBQUEsVzdCODFITCxNQUFBLEc2QnIxSEQsb0JBQ0EsY0FBQSxHQUlFLG9CQUNBLGNBQUEsRUFOSix5QjVCNjJIRSxhQUFjLEVBQ2QsY0FBZSxJRFpoQiw4QjZCN3lIRCxvQ0EzQkEsb0NBVE0sT0FBQSxJQUFBLE1BQUEsSzdCczFISCx5QjZCbHpIRCx5QjVCazBIRSxjQUFlLElBQUksTUFBTSxLQUN6QixjQUFlLElBQUksSUFBSSxFQUFFLEVEWjFCLDhCNkIzMEhELG9DN0I0MEhELG9DNkIxMEhHLG9CQUFBLE1BR0EsdUI3QjYwSEgsUUFBQSxLNkJsMEhDLHFCRjNPQSxRQUFBLE0zQmtqSUQseUI4QjNpSUMsV0FBWSxLQUNaLHVCQUFBLEVBQ0Esd0JBQUEsRUFFQSxROUI2aUlELFNBQUEsUzhCcmlJQyxXQUFZLEtBOG5CWixjQUFlLEtBaG9CYixPQUFBLElBQUEsTUFBQSxZOUI0aUlILHlCOEI1aElDLFFBZ25CRSxjQUFlLEs5Qmk3R2xCLHlCOEJwaElDLGVBQ0EsTUFBQSxNQUdBLGlCQUNBLGNBQUEsS0FBQSxhQUFBLEtBRUEsV0FBQSxROUJxaElELDJCQUFBLE04Qm5oSUMsV0FBQSxJQUFBLE1BQUEsWUFDRSxtQkFBQSxNQUFBLEVBQUEsSUFBQSxFQUFBLHFCOUJxaElILFdBQUEsTUFBQSxFQUFBLElBQUEsRUFBQSxxQjhCNTdHRCxvQkFybEJJLFdBQUEsS0FFQSx5QkFBQSxpQjlCcWhJRCxNQUFBLEs4Qm5oSUMsV0FBQSxFQUNFLG1CQUFBLEtBQ0EsV0FBQSxLQUVBLDBCOUJxaElILFFBQUEsZ0I4QmxoSUMsT0FBQSxlQUNFLGVBQUEsRTlCb2hJSCxTQUFBLGtCQ2tCRCxvQkFDRSxXQUFZLFFEWmYsc0M4QmxoSUssbUM5QmloSUgsb0M4QjVnSUMsY0FBZSxFN0IraElmLGFBQWMsRzZCcCtHbEIsc0NBbmpCRSxtQzdCNGhJQSxXQUFZLE1EZFgsNEQ4QnRnSUQsc0M5QnVnSUQsbUNDa0JHLFdBQVksTzZCOWdJZCxrQ0FORSxnQzlCeWdJSCw0QjhCMWdJRywwQkF1aUJGLGFBQWMsTTdCcy9HZCxZQUFhLE1BRWYseUJEWkMsa0M4QjlnSUssZ0M5QjZnSUgsNEI4QjlnSUcsMEJBY0YsYUFBYyxFQUNoQixZQUFBLEdBTUYsbUJBOGdCRSxRQUFTLEtBaGhCUCxhQUFBLEVBQUEsRUFBQSxJOUJxZ0lILHlCOEJoZ0lDLG1CN0JraElFLGNBQWUsRzZCN2dJakIscUJBREEsa0I5Qm1nSUQsU0FBQSxNOEI1L0hDLE1BQU8sRUFnZ0JQLEtBQU0sRTdCK2dITixRQUFTLEtEZFIseUI4QmhnSUQscUI5QmlnSUQsa0I4QmhnSUMsY0FBQSxHQUdGLGtCQUNFLElBQUEsRUFDQSxhQUFBLEVBQUEsRUFBQSxJOUJvZ0lELHFCOEI3L0hDLE9BQVEsRUFDUixjQUFBLEVBQ0EsYUFBQSxJQUFBLEVBQUEsRUFFQSxjQUNBLE1BQUEsSzlCKy9IRCxPQUFBLEs4QjcvSEMsUUFBQSxLQUFBLEs3QitnSUEsVUFBVyxLNkI3Z0lULFlBQUEsS0FJQSxvQkFiSixvQjlCMmdJQyxnQkFBQSxLOEIxL0hHLGtCN0I2Z0lGLFFBQVMsTURkUix5QkFDRixpQzhCbi9IQyx1Q0FDQSxZQUFBLE9BR0EsZUM5TEEsU0FBQSxTQUNBLE1BQUEsTUQrTEEsUUFBQSxJQUFBLEtBQ0EsV0FBQSxJQUNBLGFBQUEsS0FDQSxjQUFBLEk5QnMvSEQsaUJBQUEsWThCbC9IQyxpQkFBQSxLQUNFLE9BQUEsSUFBQSxNQUFBLFk5Qm8vSEgsY0FBQSxJOEIvK0hHLHFCQUNBLFFBQUEsRUFFQSx5QjlCay9ISCxRQUFBLE04QnhnSUMsTUFBTyxLQXlCTCxPQUFBLEk5QmsvSEgsY0FBQSxJOEJ2akhELG1DQXZiSSxXQUFBLEk5Qm0vSEgseUI4QnorSEMsZUFDQSxRQUFBLE1BR0UsWUFDQSxPQUFBLE1BQUEsTTlCNCtISCxpQjhCLzhIQyxZQUFBLEtBMllBLGVBQWdCLEtBamFaLFlBQUEsS0FFQSx5QkFDQSxpQ0FDQSxTQUFBLE9BQ0EsTUFBQSxLQUNBLE1BQUEsS0FBQSxXQUFBLEU5QnkrSEgsaUJBQUEsWThCOWtIQyxPQUFRLEU3QmltSFIsbUJBQW9CLEs2QnovSGhCLFdBQUEsS0FHQSxrREFxWk4sc0M5QnFsSEMsUUFBQSxJQUFBLEtBQUEsSUFBQSxLQ21CRCxzQzZCMS9IUSxZQUFBLEtBbUJSLDRDOUJ5OUhELDRDOEIxbEhHLGlCQUFrQixNOUIrbEhuQix5QjhCL2xIRCxZQXRZSSxNQUFBLEs5QncrSEgsT0FBQSxFOEJ0K0hLLGVBQ0EsTUFBQSxLOUIwK0hQLGlCOEI5OUhHLFlBQWEsS0FDZixlQUFBLE1BR0EsYUFDQSxRQUFBLEtBQUEsSzFCOU5BLFdBQUEsSUFDUSxhQUFBLE0yQi9EUixjQUFBLElBQ0EsWUFBQSxNL0IrdklELFdBQUEsSUFBQSxNQUFBLFlpQnp1SEMsY0FBZSxJQUFJLE1BQU0sWUF3RXpCLG1CQUFvQixNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUF5QixFQUFFLElBQUksRUFBRSxxQkF0SS9ELFdBQUEsTUFBQSxFQUFBLElBQUEsRUFBQSxxQkFBQSxFQUFBLElBQUEsRUFBQSxxQkFFQSx5QmpCMnlISCx5QmlCdnFIQyxRQUFTLGFBL0hQLGNBQUEsRUFDQSxlQUFBLE9qQjB5SEgsMkJpQjVxSEMsUUFBUyxhQXhIUCxNQUFBLEtqQnV5SEgsZUFBQSxPaUJueUhHLGtDQUNBLFFBQUEsYUFtSEosMEJoQnNzSEUsUUFBUyxhQUNULGVBQWdCLE9nQi95SGQsd0NqQmd5SEgsNkNpQnhySEQsMkNqQjJySEMsTUFBQSxLaUIveEhHLHdDQUNBLE1BQUEsS0FtR0osNEJoQmt0SEUsY0FBZSxFZ0I5eUhiLGVBQUEsT0FHQSx1QkFEQSxvQmpCZ3lISCxRQUFBLGFpQnRzSEMsV0FBWSxFaEJ5dEhaLGNBQWUsRWdCL3lIWCxlQUFBLE9Bc0ZOLDZCQUFBLDBCQWpGSSxhQUFBLEVBaUZKLDRDakIrc0hDLHNDaUIxeEhHLFNBQUEsU2pCNnhISCxZQUFBLEU4QnRnSUQsa0RBbVdFLElBQUssR0F2V0gseUJBQ0UseUI5QmloSUwsY0FBQSxJOEIvL0hELG9DQW9WRSxjQUFlLEdBMVZmLHlCQUNBLGFBQ0EsTUFBQSxLQUNBLFlBQUEsRTFCelBGLGVBQUEsRUFDUSxhQUFBLEVKc3dJUCxZQUFBLEVBQ0YsT0FBQSxFOEJ0Z0lHLG1CQUFvQixLQUN0QixXQUFBLE05QjBnSUQsOEI4QnRnSUMsV0FBWSxFQUNaLHVCQUFBLEVIelVBLHdCQUFBLEVBUUEsbURBQ0MsY0FBQSxFM0I0MElGLHVCQUFBLEk4QmxnSUMsd0JBQXlCLElDaFZ6QiwyQkFBQSxFQUNBLDBCQUFBLEVEa1ZBLFlDblZBLFdBQUEsSUFDQSxjQUFBLElEcVZBLG1CQ3RWQSxXQUFBLEtBQ0EsY0FBQSxLRCtWRixtQkNoV0UsV0FBQSxLQUNBLGNBQUEsS0R1V0YsYUFzU0UsV0FBWSxLQTFTVixjQUFBLEtBRUEseUI5QmtnSUQsYUFDRixNQUFBLEs4QnIrSEcsYUFBYyxLQWhCaEIsWUFBQSxNQUNBLHlCRTVXQSxhRjhXRSxNQUFBLGVBRkYsY0FLSSxNQUFBLGdCOUIwL0hILGFBQUEsTThCaC9IRCw0QkFDQSxhQUFBLEdBREYsZ0JBS0ksaUJBQUEsUTlCbS9ISCxhQUFBLFFDbUJELDhCNkJuZ0lNLE1BQUEsS0FSTixvQzlCNi9IQyxvQzhCLytIRyxNQUFBLFE5QmsvSEgsaUJBQUEsWThCNytISyw2QjlCZy9ITCxNQUFBLEtDbUJELGlDNkIvL0hRLE1BQUEsS0FLRix1QzlCNCtITCx1Q0NtQkMsTUFBTyxLQUNQLGlCQUFrQixZNkI1L0haLHNDQUlGLDRDOUIwK0hMLDRDQ21CQyxNQUFPLEtBQ1AsaUJBQWtCLFE2QjEvSFosd0NBeENSLDhDOUJvaElDLDhDOEJ0K0hHLE1BQUEsSzlCeStISCxpQkFBQSxZQ21CRCwrQjZCei9ITSxhQUFBLEtBR0EscUNBcEROLHFDOUI4aElDLGlCQUFBLEtDbUJELHlDNkJ2L0hJLGlCQUFBLEtBT0UsaUNBQUEsNkI3QnEvSEosYUFBYyxRNkJqL0hSLG9DQWlDTiwwQzlCazhIRCwwQzhCOXhIQyxNQUFPLEtBN0xDLGlCQUFBLFFBQ0EseUI3QmkvSFIsc0Q2Qi8rSFUsTUFBQSxLQUtGLDREOUI0OUhQLDREQ21CQyxNQUFPLEtBQ1AsaUJBQWtCLFk2QjUrSFYsMkRBSUYsaUU5QjA5SFAsaUVDbUJDLE1BQU8sS0FDUCxpQkFBa0IsUTZCMStIViw2RDlCNjlIWCxtRUFERSxtRThCN2pJQyxNQUFPLEtBOEdQLGlCQUFBLGFBRUUsNkI5Qm85SEwsTUFBQSxLOEIvOEhHLG1DOUJrOUhILE1BQUEsS0NtQkQsMEI2QmwrSE0sTUFBQSxLQUlBLGdDQUFBLGdDN0JtK0hKLE1BQU8sSzZCejlIVCwwQ0FSUSwwQ0FTTixtRDlCMDhIRCxtRDhCejhIQyxNQUFBLEtBRkYsZ0JBS0ksaUJBQUEsSzlCNjhISCxhQUFBLFFDbUJELDhCNkI3OUhNLE1BQUEsUUFSTixvQzlCdTlIQyxvQzhCejhIRyxNQUFBLEs5QjQ4SEgsaUJBQUEsWThCdjhISyw2QjlCMDhITCxNQUFBLFFDbUJELGlDNkJ6OUhRLE1BQUEsUUFLRix1QzlCczhITCx1Q0NtQkMsTUFBTyxLQUNQLGlCQUFrQixZNkJ0OUhaLHNDQUlGLDRDOUJvOEhMLDRDQ21CQyxNQUFPLEtBQ1AsaUJBQWtCLFE2QnA5SFosd0NBeENSLDhDOUI4K0hDLDhDOEIvN0hHLE1BQUEsSzlCazhISCxpQkFBQSxZQ21CRCwrQjZCbDlITSxhQUFBLEtBR0EscUNBckROLHFDOUJ3L0hDLGlCQUFBLEtDbUJELHlDNkJoOUhJLGlCQUFBLEtBTUUsaUNBQUEsNkI3Qis4SEosYUFBYyxRNkIzOEhSLG9DQXVDTiwwQzlCczVIRCwwQzhCOTNIQyxNQUFPLEtBdkRDLGlCQUFBLFFBdURWLHlCQXBEVSxrRTlCeTdIUCxhQUFBLFE4QnQ3SE8sMEQ5Qnk3SFAsaUJBQUEsUUNtQkQsc0Q2Qno4SFUsTUFBQSxRQUtGLDREOUJzN0hQLDREQ21CQyxNQUFPLEtBQ1AsaUJBQWtCLFk2QnQ4SFYsMkRBSUYsaUU5Qm83SFAsaUVDbUJDLE1BQU8sS0FDUCxpQkFBa0IsUTZCcDhIViw2RDlCdTdIWCxtRUFERSxtRThCN2hJQyxNQUFPLEtBK0dQLGlCQUFBLGFBRUUsNkI5Qm03SEwsTUFBQSxROEI5NkhHLG1DOUJpN0hILE1BQUEsS0NtQkQsMEI2Qmo4SE0sTUFBQSxRQUlBLGdDQUFBLGdDN0JrOEhKLE1BQU8sS2dDMWtKVCwwQ0gwb0JRLDBDR3pvQk4sbURqQzJqSkQsbURpQzFqSkMsTUFBQSxLQUVBLFlBQ0EsUUFBQSxJQUFBLEtqQzhqSkQsY0FBQSxLaUNua0pDLFdBQVksS0FRVixpQkFBQSxRakM4akpILGNBQUEsSWlDM2pKSyxlQUNBLFFBQUEsYWpDK2pKTCx5QmlDM2tKQyxRQUFTLEVBQUUsSUFrQlQsTUFBQSxLakM0akpILFFBQUEsU2tDL2tKQyxvQkFDQSxNQUFBLEtBRUEsWWxDa2xKRCxRQUFBLGFrQ3RsSkMsYUFBYyxFQU9aLE9BQUEsS0FBQSxFbENrbEpILGNBQUEsSUNtQkQsZWlDbG1KTSxRQUFBLE9BRUEsaUJBQ0Esb0JBQ0EsU0FBQSxTQUNBLE1BQUEsS0FDQSxRQUFBLElBQUEsS0FDQSxZQUFBLEtBQ0EsWUFBQSxXbENtbEpMLE1BQUEsUWtDamxKRyxnQkFBQSxLakNvbUpGLGlCQUFrQixLaUNqbUpaLE9BQUEsSUFBQSxNQUFBLEtQVkgsNkIzQjhsSkosZ0NrQ2hsSkcsWUFBQSxFakNtbUpGLHVCQUF3QixJMEIxbkp4QiwwQkFBQSxJM0I0bUpELDRCa0Mza0pHLCtCakM4bEpGLHdCQUF5QixJQUN6QiwyQkFBNEIsSWlDM2xKeEIsdUJBRkEsdUJBR0EsMEJBRkEsMEJsQ2lsSkwsUUFBQSxFa0N6a0pHLE1BQUEsUWpDNGxKRixpQkFBa0IsS0FDbEIsYUFBYyxLQUVoQixzQmlDMWxKTSw0QkFGQSw0QmpDNmxKTix5QmlDMWxKTSwrQkFGQSwrQkFHQSxRQUFBLEVsQzhrSkwsTUFBQSxLa0Nyb0pDLE9BQVEsUWpDd3BKUixpQkFBa0IsUUFDbEIsYUFBYyxRaUN0bEpWLHdCQUVBLDhCQURBLDhCakN1bEpOLDJCaUN6bEpNLGlDakMwbEpOLGlDRFpDLE1BQUEsS2tDbGtKQyxPQUFRLFlqQ3FsSlIsaUJBQWtCLEtrQ2hxSmQsYUFBQSxLQUVBLG9CbkNpcEpMLHVCbUMvb0pHLFFBQUEsS0FBQSxLbENrcUpGLFVBQVcsSzBCN3BKWCxZQUFBLFUzQitvSkQsZ0NtQzlvSkcsbUNsQ2lxSkYsdUJBQXdCLEkwQjFxSnhCLDBCQUFBLEkzQjRwSkQsK0JrQzdrSkQsa0NqQ2dtSkUsd0JBQXlCLElrQ2hySnJCLDJCQUFBLElBRUEsb0JuQ2lxSkwsdUJtQy9wSkcsUUFBQSxJQUFBLEtsQ2tySkYsVUFBVyxLMEI3cUpYLFlBQUEsSTNCK3BKRCxnQ21DOXBKRyxtQ2xDaXJKRix1QkFBd0IsSTBCMXJKeEIsMEJBQUEsSTNCNHFKRCwrQm9DOXFKRCxrQ0FDRSx3QkFBQSxJQUNBLDJCQUFBLElBRUEsT3BDZ3JKRCxhQUFBLEVvQ3BySkMsT0FBUSxLQUFLLEVBT1gsV0FBQSxPcENnckpILFdBQUEsS0NtQkQsVW1DaHNKTSxRQUFBLE9BRUEsWUFDQSxlQUNBLFFBQUEsYXBDaXJKTCxRQUFBLElBQUEsS29DL3JKQyxpQkFBa0IsS25Da3RKbEIsT0FBUSxJQUFJLE1BQU0sS21DL3JKZCxjQUFBLEtBbkJOLGtCcENvc0pDLGtCQ21CQyxnQkFBaUIsS21DNXJKYixpQkFBQSxLQTNCTixlQUFBLGtCQWtDTSxNQUFBLE1BbENOLG1CQUFBLHNCbkNndUpFLE1BQU8sS21DcnJKSCxtQkFFQSx5QkFEQSx5QnBDd3FKTCxzQnFDcnRKQyxNQUFPLEtBQ1AsT0FBQSxZQUNBLGlCQUFBLEtBRUEsT0FDQSxRQUFBLE9BQ0EsUUFBQSxLQUFBLEtBQUEsS0FDQSxVQUFBLElBQ0EsWUFBQSxJQUNBLFlBQUEsRUFDQSxNQUFBLEtyQ3V0SkQsV0FBQSxPcUNudEpHLFlBQUEsT3BDc3VKRixlQUFnQixTb0NwdUpaLGNBQUEsTXJDdXRKTCxjcUNydEpLLGNBS0osTUFBQSxLQUNFLGdCQUFBLEtyQ2t0SkgsT0FBQSxRcUM3c0pHLGFBQ0EsUUFBQSxLQU9KLFlDdENFLFNBQUEsU3RDa3ZKRCxJQUFBLEtDbUJELGVxQ2h3Sk0saUJBQUEsS0FMSiwyQkQwQ0YsMkJyQytzSkMsaUJBQUEsUUNtQkQsZXFDdndKTSxpQkFBQSxRQUxKLDJCRDhDRiwyQnJDa3RKQyxpQkFBQSxRQ21CRCxlcUM5d0pNLGlCQUFBLFFBTEosMkJEa0RGLDJCckNxdEpDLGlCQUFBLFFDbUJELFlxQ3J4Sk0saUJBQUEsUUFMSix3QkRzREYsd0JyQ3d0SkMsaUJBQUEsUUNtQkQsZXFDNXhKTSxpQkFBQSxRQUxKLDJCRDBERiwyQnJDMnRKQyxpQkFBQSxRQ21CRCxjcUNueUpNLGlCQUFBLFFDREosMEJBREYsMEJBRUUsaUJBQUEsUUFFQSxPQUNBLFFBQUEsYUFDQSxVQUFBLEtBQ0EsUUFBQSxJQUFBLElBQ0EsVUFBQSxLQUNBLFlBQUEsSUFDQSxZQUFBLEVBQ0EsTUFBQSxLQUNBLFdBQUEsT3ZDd3hKRCxZQUFBLE91Q3J4SkMsZUFBQSxPQUNFLGlCQUFBLEt2Q3V4SkgsY0FBQSxLdUNseEpHLGFBQ0EsUUFBQSxLQUdGLFl0Q3F5SkEsU0FBVSxTc0NueUpSLElBQUEsS0FNQSwwQnZDK3dKSCxlQ21CQyxJQUFLLEVzQ2h5SkQsUUFBQSxJQUFBLEl2Q214SkwsY3VDanhKSyxjQUtKLE1BQUEsS3RDK3hKQSxnQkFBaUIsS3NDN3hKZixPQUFBLFF2Qyt3SkgsK0J1QzN3SkMsNEJBQ0UsTUFBQSxRdkM2d0pILGlCQUFBLEt1Q3p3Skcsd0J2QzR3SkgsTUFBQSxNdUN4d0pHLCtCdkMyd0pILGFBQUEsSXdDcDBKQyx1QkFDQSxZQUFBLElBRUEsV0FDQSxZQUFBLEt4Q3UwSkQsZUFBQSxLd0M1MEpDLGNBQWUsS3ZDKzFKZixNQUFPLFF1Q3QxSkwsaUJBQUEsS0FJQSxlQWJKLGNBY0ksTUFBQSxReEN1MEpILGF3Q3IxSkMsY0FBZSxLQW1CYixVQUFBLEt4Q3EwSkgsWUFBQSxJQ21CRCxjdUNuMUpJLGlCQUFBLFFBRUEsc0J4Q28wSkgsNEJ3QzkxSkMsY0FBZSxLQThCYixhQUFBLEt4Q20wSkgsY0FBQSxJd0NoekpELHNCQWZJLFVBQUEsS3hDbzBKRCxvQ3dDajBKQyxXdkNvMUpBLFlBQWEsS3VDbDFKWCxlQUFBLEt4Q28wSkgsc0J3QzF6SkQsNEJ2QzYwSkUsY0FBZSxLdUNqMUpiLGFBQUEsS0M1Q0osZXpDKzJKRCxjeUM5MkpDLFVBQUEsTUFHQSxXQUNBLFFBQUEsTUFDQSxRQUFBLElBQ0EsY0FBQSxLckNpTEEsWUFBQSxXQUNLLGlCQUFBLEtBQ0csT0FBQSxJQUFBLE1BQUEsS0ppc0pULGNBQUEsSXlDMzNKQyxtQkFBb0IsT0FBTyxJQUFJLFl4Qzg0SjFCLGNBQWUsT0FBTyxJQUFJLFl3Q2o0SjdCLFdBQUEsT0FBQSxJQUFBLFlBS0YsaUJ6QzgySkQsZUNtQkMsYUFBYyxLQUNkLFlBQWEsS3dDMTNKWCxtQkExQkosa0J6Q3E0SkMsa0J5QzEySkcsYUFBQSxRQ3pCSixvQkFDRSxRQUFBLElBQ0EsTUFBQSxLQUVBLE8xQ3k0SkQsUUFBQSxLMEM3NEpDLGNBQWUsS0FRYixPQUFBLElBQUEsTUFBQSxZQUVBLGNBQUEsSUFWSixVQWVJLFdBQUEsRTFDcTRKSCxNQUFBLFFDbUJELG1CeUNsNUpJLFlBQUEsSUFyQkosU0F5QkksVTFDazRKSCxjQUFBLEVDbUJELFd5QzM0SkUsV0FBQSxJQUZGLG1CQUFBLG1CQU1JLGNBQUEsS0FFQSwwQkFDQSwwQjFDNDNKSCxTQUFBLFMwQ3AzSkMsSUFBSyxLQ3ZETCxNQUFBLE1BQ0EsTUFBQSxRM0MrNkpELGUwQ3ozSkMsTUFBTyxRQ2xETCxpQkFBQSxRM0M4NkpILGFBQUEsUTJDMzZKRyxrQjNDODZKSCxpQkFBQSxRMkN0N0pDLDJCQUNBLE1BQUEsUTNDMDdKRCxZMENoNEpDLE1BQU8sUUN0REwsaUJBQUEsUTNDeTdKSCxhQUFBLFEyQ3Q3SkcsZTNDeTdKSCxpQkFBQSxRMkNqOEpDLHdCQUNBLE1BQUEsUTNDcThKRCxlMEN2NEpDLE1BQU8sUUMxREwsaUJBQUEsUTNDbzhKSCxhQUFBLFEyQ2o4Skcsa0IzQ284SkgsaUJBQUEsUTJDNThKQywyQkFDQSxNQUFBLFEzQ2c5SkQsYzBDOTRKQyxNQUFPLFFDOURMLGlCQUFBLFEzQys4SkgsYUFBQSxRMkM1OEpHLGlCM0MrOEpILGlCQUFBLFE0Q2g5SkMsMEJBQVEsTUFBQSxRQUNSLHdDQUFRLEs1Q3M5SlAsb0JBQUEsS0FBQSxFNENsOUpELEdBQ0Esb0JBQUEsRUFBQSxHQUNBLG1DQUFRLEs1Q3c5SlAsb0JBQUEsS0FBQSxFNEMxOUpELEdBQ0Esb0JBQUEsRUFBQSxHQUNBLGdDQUFRLEs1Q3c5SlAsb0JBQUEsS0FBQSxFNENoOUpELEdBQ0Esb0JBQUEsRUFBQSxHQUdBLFVBQ0EsT0FBQSxLeENzQ0EsY0FBQSxLQUNRLFNBQUEsT0o4NkpULGlCQUFBLFE0Q2g5SkMsY0FBZSxJQUNmLG1CQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsZUFDQSxXQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsZUFFQSxjQUNBLE1BQUEsS0FDQSxNQUFBLEVBQ0EsT0FBQSxLQUNBLFVBQUEsS3hDeUJBLFlBQUEsS0FDUSxNQUFBLEtBeUhSLFdBQUEsT0FDSyxpQkFBQSxRQUNHLG1CQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsZ0JKazBKVCxXQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsZ0I0Qzc4SkMsbUJBQW9CLE1BQU0sSUFBSSxLM0N3K0p6QixjQUFlLE1BQU0sSUFBSSxLNEN2K0o1QixXQUFBLE1BQUEsSUFBQSxLREVGLHNCQ0FFLGdDREFGLGlCQUFBLHlLNUNpOUpELGlCQUFBLG9LNEMxOEpDLGlCQUFpQixpSzNDcytKakIsd0JBQXlCLEtBQUssS0dsaEs5QixnQkFBQSxLQUFBLEtKNC9KRCxxQkkxL0pTLCtCd0NtRFIsa0JBQW1CLHFCQUFxQixHQUFHLE9BQU8sU0VyRWxELGFBQUEscUJBQUEsR0FBQSxPQUFBLFM5QytnS0QsVUFBQSxxQkFBQSxHQUFBLE9BQUEsUzZDNTlKRyxzQkFDQSxpQkFBQSxRN0NnK0pILHdDNEMzOEpDLGlCQUFrQix5S0V6RWxCLGlCQUFBLG9LOUN1aEtELGlCQUFBLGlLNkNwK0pHLG1CQUNBLGlCQUFBLFE3Q3crSkgscUM0Qy84SkMsaUJBQWtCLHlLRTdFbEIsaUJBQUEsb0s5QytoS0QsaUJBQUEsaUs2QzUrSkcsc0JBQ0EsaUJBQUEsUTdDZy9KSCx3QzRDbjlKQyxpQkFBa0IseUtFakZsQixpQkFBQSxvSzlDdWlLRCxpQkFBQSxpSzZDcC9KRyxxQkFDQSxpQkFBQSxRN0N3L0pILHVDK0MvaUtDLGlCQUFrQix5S0FFbEIsaUJBQUEsb0svQ2dqS0QsaUJBQUEsaUsrQzdpS0csTy9DZ2pLSCxXQUFBLEtDNEJELG1COEN0a0tFLFdBQUEsRS9DK2lLRCxPK0MzaUtELFlBQ0UsU0FBQSxPL0M2aUtELEtBQUEsRStDemlLQyxZL0M0aUtELE1BQUEsUStDeGlLRyxjL0MyaUtILFFBQUEsTUM0QkQsNEI4Q2prS0UsVUFBQSxLQUdGLGFBQUEsbUJBRUUsYUFBQSxLQUdGLFlBQUEsa0I5Q2trS0UsY0FBZSxLOEMzaktqQixZQUhFLFkvQ3VpS0QsYStDbmlLQyxRQUFBLFcvQ3NpS0QsZUFBQSxJK0NsaUtDLGMvQ3FpS0QsZUFBQSxPK0NoaUtDLGNBQ0EsZUFBQSxPQU1GLGVBQ0UsV0FBQSxFQUNBLGNBQUEsSUN2REYsWUFFRSxhQUFBLEVBQ0EsV0FBQSxLQVFGLFlBQ0UsYUFBQSxFQUNBLGNBQUEsS0FHQSxpQkFDQSxTQUFBLFNBQ0EsUUFBQSxNaERnbEtELFFBQUEsS0FBQSxLZ0Q3a0tDLGNBQUEsS3JCM0JBLGlCQUFBLEtBQ0MsT0FBQSxJQUFBLE1BQUEsS3FCNkJELDZCQUNFLHVCQUFBLElyQnZCRix3QkFBQSxJM0J5bUtELDRCZ0R2a0tDLGNBQWUsRS9DbW1LZiwyQkFBNEIsSStDam1LNUIsMEJBQUEsSUFGRixrQkFBQSx1QkFLSSxNQUFBLEtBSUYsMkNBQUEsZ0QvQ21tS0EsTUFBTyxLK0MvbEtMLHdCQUZBLHdCaEQ0a0tILDZCZ0Qza0tHLDZCQUtGLE1BQU8sS0FDUCxnQkFBQSxLQUNBLGlCQUFBLFFBS0EsdUIvQytsS0EsTUFBTyxLQUNQLFdBQVksSytDNWxLViwwQmhEc2tLSCxnQ2dEcmtLRyxnQ0FMRixNQUFBLEsvQ3NtS0EsT0FBUSxZQUNSLGlCQUFrQixLRHhCbkIsbURnRC9rS0MseURBQUEseUQvQzRtS0EsTUFBTyxRRHhCUixnRGdEbmtLQyxzREFBQSxzRC9DZ21LQSxNQUFPLEsrQzVsS0wsd0JBRUEsOEJBREEsOEJoRHNrS0gsUUFBQSxFZ0Qza0tDLE1BQUEsSy9DdW1LQSxpQkFBa0IsUUFDbEIsYUFBYyxRQUVoQixpRERwQkMsd0RDdUJELHVEQURBLHVEK0M1bUtFLDhEQVlJLDZEL0MrbEtOLHVEK0MzbUtFLDhEL0M4bUtGLDZEQUtFLE1BQU8sUUR4QlIsOENpRDdxS0csb0RBREYsb0RBRUUsTUFBQSxRQUVBLHlCaEQwc0tGLE1BQU8sUWdEeHNLSCxpQkFBQSxRQUZGLDBCQUFBLCtCQUtJLE1BQUEsUUFHRixtREFBQSx3RGhEMnNLSixNQUFPLFFEdEJSLGdDaURucktPLGdDQUdGLHFDQUZFLHFDaEQ4c0tOLE1BQU8sUUFDUCxpQkFBa0IsUUFFcEIsaUNnRDFzS1EsdUNBRkEsdUNoRDZzS1Isc0NEdEJDLDRDaUR0cktPLDRDQXJCTixNQUFBLEtBQ0UsaUJBQUEsUUFDQSxhQUFBLFFBRUEsc0JoRHV1S0YsTUFBTyxRZ0RydUtILGlCQUFBLFFBRkYsdUJBQUEsNEJBS0ksTUFBQSxRQUdGLGdEQUFBLHFEaER3dUtKLE1BQU8sUUR0QlIsNkJpRGh0S08sNkJBR0Ysa0NBRkUsa0NoRDJ1S04sTUFBTyxRQUNQLGlCQUFrQixRQUVwQiw4QmdEdnVLUSxvQ0FGQSxvQ2hEMHVLUixtQ0R0QkMseUNpRG50S08seUNBckJOLE1BQUEsS0FDRSxpQkFBQSxRQUNBLGFBQUEsUUFFQSx5QmhEb3dLRixNQUFPLFFnRGx3S0gsaUJBQUEsUUFGRiwwQkFBQSwrQkFLSSxNQUFBLFFBR0YsbURBQUEsd0RoRHF3S0osTUFBTyxRRHRCUixnQ2lEN3VLTyxnQ0FHRixxQ0FGRSxxQ2hEd3dLTixNQUFPLFFBQ1AsaUJBQWtCLFFBRXBCLGlDZ0Rwd0tRLHVDQUZBLHVDaER1d0tSLHNDRHRCQyw0Q2lEaHZLTyw0Q0FyQk4sTUFBQSxLQUNFLGlCQUFBLFFBQ0EsYUFBQSxRQUVBLHdCaERpeUtGLE1BQU8sUWdEL3hLSCxpQkFBQSxRQUZGLHlCQUFBLDhCQUtJLE1BQUEsUUFHRixrREFBQSx1RGhEa3lLSixNQUFPLFFEdEJSLCtCaUQxd0tPLCtCQUdGLG9DQUZFLG9DaERxeUtOLE1BQU8sUUFDUCxpQkFBa0IsUUFFcEIsZ0NnRGp5S1Esc0NBRkEsc0NoRG95S1IscUNEdEJDLDJDaUQ3d0tPLDJDRGtHTixNQUFPLEtBQ1AsaUJBQUEsUUFDQSxhQUFBLFFBRUYseUJBQ0UsV0FBQSxFQUNBLGNBQUEsSUUxSEYsc0JBQ0UsY0FBQSxFQUNBLFlBQUEsSUFFQSxPOUMwREEsY0FBQSxLQUNRLGlCQUFBLEtKZ3ZLVCxPQUFBLElBQUEsTUFBQSxZa0R0eUtDLGNBQWUsSUFDZixtQkFBQSxFQUFBLElBQUEsSUFBQSxnQmxEd3lLRCxXQUFBLEVBQUEsSUFBQSxJQUFBLGdCa0RseUtDLFlBQ0EsUUFBQSxLdkJuQkMsZTNCMHpLRixRQUFBLEtBQUEsS2tEenlLQyxjQUFlLElBQUksTUFBTSxZQU12Qix1QkFBQSxJbERzeUtILHdCQUFBLElrRGh5S0MsMENBQ0EsTUFBQSxRQUVBLGFsRG15S0QsV0FBQSxFa0R2eUtDLGNBQWUsRWpEbTBLZixVQUFXLEtBQ1gsTUFBTyxRRHRCUixvQmtEN3hLQyxzQmpEcXpLRixlaUQzektJLG1CQUtKLHFCQUVFLE1BQUEsUXZCdkNBLGNBQ0MsUUFBQSxLQUFBLEszQnkwS0YsaUJBQUEsUWtEeHhLQyxXQUFZLElBQUksTUFBTSxLakRvekt0QiwyQkFBNEIsSWlEanpLMUIsMEJBQUEsSUFISixtQkFBQSxtQ0FNTSxjQUFBLEVsRDJ4S0wsb0NrRHR4S0csb0RqRGt6S0YsYUFBYyxJQUFJLEVpRGh6S1osY0FBQSxFdkJ0RUwsNEQzQmcyS0YsNEVrRHB4S0csV0FBQSxFakRnektGLHVCQUF3QixJaUQ5eUtsQix3QkFBQSxJdkJ0RUwsMEQzQjgxS0YsMEVrRDd5S0MsY0FBZSxFdkIxRGYsMkJBQUEsSUFDQywwQkFBQSxJdUIwRkgsK0VBRUksdUJBQUEsRWxEaXhLSCx3QkFBQSxFa0Q3d0tDLHdEbERneEtELGlCQUFBLEVDNEJELDBCQUNFLGlCQUFrQixFaURyeUtwQiw4QmxENndLQyxja0Q3d0tELGdDakQweUtFLGNBQWUsRWlEMXlLakIsc0NBUU0sc0JsRDJ3S0wsd0NDNEJDLGNBQWUsSzBCeDVLZixhQUFBLEt1QnlHRix3RGxEd3hLQywwQkM0QkMsdUJBQXdCLElBQ3hCLHdCQUF5QixJaURyekszQix5RkFvQlEseUZsRDJ3S1AsMkRrRDV3S08sMkRqRHd5S04sdUJBQXdCLElBQ3hCLHdCQUF5QixJQUszQix3R2lEajBLQSx3R2pEK3pLQSx3R0R0QkMsd0dDdUJELDBFaURoMEtBLDBFakQ4ektBLDBFaUR0eUtVLDBFakQ4eUtSLHVCQUF3QixJQUsxQix1R2lEMzBLQSx1R2pEeTBLQSx1R0R0QkMsdUdDdUJELHlFaUQxMEtBLHlFakR3MEtBLHlFaUQ1eUtVLHlFdkI3SFIsd0JBQUEsSXVCaUdGLHNEbER3ektDLHlCQzRCQywyQkFBNEIsSUFDNUIsMEJBQTJCLElpRDN5S3JCLHFGQTFDUixxRkF5Q1Esd0RsRHN4S1Asd0RDNEJDLDJCQUE0QixJQUM1QiwwQkFBMkIsSUFHN0Isb0dEdEJDLG9HQ3dCRCxvR2lEajJLQSxvR2pEODFLQSx1RWlEaHpLVSx1RWpEa3pLVix1RWlEaDJLQSx1RWpEczJLRSwwQkFBMkIsSUFHN0IsbUdEdEJDLG1HQ3dCRCxtR2lEMzJLQSxtR2pEdzJLQSxzRWlEdHpLVSxzRWpEd3pLVixzRWlEMTJLQSxzRWpEZzNLRSwyQkFBNEIsSWlEcnpLMUIsMEJsRDh4S0gscUNrRHoxS0QsMEJBQUEscUNBK0RJLFdBQUEsSUFBQSxNQUFBLEtBL0RKLGtEQUFBLGtEQW1FSSxXQUFBLEVBbkVKLHVCQUFBLHlDakQ4M0tFLE9BQVEsRWlEcHpLQSwrQ2pEd3pLViwrQ2lEbDRLQSwrQ2pEbzRLQSwrQ0FFQSwrQ0FOQSwrQ0RqQkMsaUVDb0JELGlFaURuNEtBLGlFakRxNEtBLGlFQUVBLGlFQU5BLGlFQVdFLFlBQWEsRWlEOXpLTCw4Q2pEazBLViw4Q2lEaDVLQSw4Q2pEazVLQSw4Q0FFQSw4Q0FOQSw4Q0RqQkMsZ0VDb0JELGdFaURqNUtBLGdFakRtNUtBLGdFQUVBLGdFQU5BLGdFQVdFLGFBQWMsRUFJaEIsK0NpRDk1S0EsK0NqRDQ1S0EsK0NpRHIwS1UsK0NqRHcwS1YsaUVpRC81S0EsaUVqRDY1S0EsaUVEdEJDLGlFQzZCQyxjQUFlLEVBRWpCLDhDaUR0MEtVLDhDakR3MEtWLDhDaUR4NktBLDhDakR1NktBLGdFRHRCQyxnRUN3QkQsZ0VpRG4wS0ksZ0VBQ0EsY0FBQSxFQVVKLHlCQUNFLGNBQUEsRWxEc3lLRCxPQUFBLEVrRGx5S0csYUFDQSxjQUFBLEtBTkosb0JBU00sY0FBQSxFbERxeUtMLGNBQUEsSWtEaHlLRywyQmxEbXlLSCxXQUFBLElDNEJELDRCaUQzektNLGNBQUEsRUFLRix3REF2Qkosd0RsRHd6S0MsV0FBQSxJQUFBLE1BQUEsS2tEL3hLSywyQmxEa3lLTCxXQUFBLEVtRHJoTEMsdURuRHdoTEQsY0FBQSxJQUFBLE1BQUEsS21EcmhMRyxlQUNBLGFBQUEsS25EeWhMSCw4Qm1EM2hMQyxNQUFBLEtBTUksaUJBQUEsUW5Ed2hMTCxhQUFBLEttRHJoTEssMERBQ0EsaUJBQUEsS0FHSixxQ0FFSSxNQUFBLFFuRHNoTEwsaUJBQUEsS21EdmlMQyx5RG5EMGlMRCxvQkFBQSxLbUR2aUxHLGVBQ0EsYUFBQSxRbkQyaUxILDhCbUQ3aUxDLE1BQUEsS0FNSSxpQkFBQSxRbkQwaUxMLGFBQUEsUW1EdmlMSywwREFDQSxpQkFBQSxRQUdKLHFDQUVJLE1BQUEsUW5Ed2lMTCxpQkFBQSxLbUR6akxDLHlEbkQ0akxELG9CQUFBLFFtRHpqTEcsZUFDQSxhQUFBLFFuRDZqTEgsOEJtRC9qTEMsTUFBQSxRQU1JLGlCQUFBLFFuRDRqTEwsYUFBQSxRbUR6akxLLDBEQUNBLGlCQUFBLFFBR0oscUNBRUksTUFBQSxRbkQwakxMLGlCQUFBLFFtRDNrTEMseURuRDhrTEQsb0JBQUEsUW1EM2tMRyxZQUNBLGFBQUEsUW5EK2tMSCwyQm1EamxMQyxNQUFBLFFBTUksaUJBQUEsUW5EOGtMTCxhQUFBLFFtRDNrTEssdURBQ0EsaUJBQUEsUUFHSixrQ0FFSSxNQUFBLFFuRDRrTEwsaUJBQUEsUW1EN2xMQyxzRG5EZ21MRCxvQkFBQSxRbUQ3bExHLGVBQ0EsYUFBQSxRbkRpbUxILDhCbURubUxDLE1BQUEsUUFNSSxpQkFBQSxRbkRnbUxMLGFBQUEsUW1EN2xMSywwREFDQSxpQkFBQSxRQUdKLHFDQUVJLE1BQUEsUW5EOGxMTCxpQkFBQSxRbUQvbUxDLHlEbkRrbkxELG9CQUFBLFFtRC9tTEcsY0FDQSxhQUFBLFFuRG1uTEgsNkJtRHJuTEMsTUFBQSxRQU1JLGlCQUFBLFFuRGtuTEwsYUFBQSxRbUQvbUxLLHlEQUNBLGlCQUFBLFFBR0osb0NBRUksTUFBQSxRbkRnbkxMLGlCQUFBLFFvRC9uTEMsd0RBQ0Esb0JBQUEsUUFFQSxrQkFDQSxTQUFBLFNwRGtvTEQsUUFBQSxNb0R2b0xDLE9BQVEsRW5EbXFMUixRQUFTLEVBQ1QsU0FBVSxPQUVaLHlDbUR6cExJLHdCQURBLHlCQUVBLHlCQUNBLHdCQUNBLFNBQUEsU0FDQSxJQUFBLEVBQ0EsT0FBQSxFcERrb0xILEtBQUEsRW9EN25MQyxNQUFPLEtBQ1AsT0FBQSxLcEQrbkxELE9BQUEsRW9EMW5MQyx3QnBENm5MRCxlQUFBLE9xRHZwTEMsdUJBQ0EsZUFBQSxJQUVBLE1BQ0EsV0FBQSxLQUNBLFFBQUEsS2pEd0RBLGNBQUEsS0FDUSxpQkFBQSxRSm1tTFQsT0FBQSxJQUFBLE1BQUEsUXFEbHFMQyxjQUFlLElBU2IsbUJBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxnQkFDQSxXQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsZ0JBS0osaUJBQ0UsYUFBQSxLQUNBLGFBQUEsZ0JBRUYsU0FDRSxRQUFBLEtBQ0EsY0FBQSxJQ3RCRixTQUNFLFFBQUEsSUFDQSxjQUFBLElBRUEsT0FDQSxNQUFBLE1BQ0EsVUFBQSxLakNSQSxZQUFBLElBR0EsWUFBQSxFckJ3ckxELE1BQUEsS3NEaHJMQyxZQUFBLEVBQUEsSUFBQSxFQUFBLEtyRDRzTEEsT0FBUSxrQnFEMXNMTixRQUFBLEdqQ2JGLGFpQ2VFLGFqQ1pGLE1BQUEsS3JCZ3NMRCxnQkFBQSxLc0Q1cUxDLE9BQUEsUUFDRSxPQUFBLGtCQUNBLFFBQUEsR0FFQSxhQUNBLG1CQUFBLEt0RDhxTEgsUUFBQSxFdURuc0xDLE9BQVEsUUFDUixXQUFBLEl2RHFzTEQsT0FBQSxFdURoc0xDLFlBQ0EsU0FBQSxPQUVBLE9BQ0EsU0FBQSxNQUNBLElBQUEsRUFDQSxNQUFBLEVBQ0EsT0FBQSxFQUNBLEtBQUEsRUFJQSxRQUFBLEt2RGdzTEQsUUFBQSxLdUQ3ckxDLFNBQUEsT25EK0dBLDJCQUFBLE1BQ0ksUUFBQSxFQUVJLDBCQWtFUixtQkFBQSxrQkFBQSxJQUFBLFNBRUssY0FBQSxhQUFBLElBQUEsU0FDRyxXQUFBLFVBQUEsSUFBQSxTSmdoTFQsa0JBQUEsa0J1RG5zTEMsY0FBQSxrQm5EMkdBLGFBQUEsa0JBQ0ksVUFBQSxrQkFFSSx3QkoybExULGtCQUFBLGV1RHZzTEssY0FBZSxlQUNuQixhQUFBLGVBQ0EsVUFBQSxlQUlGLG1CQUNFLFdBQUEsT0FDQSxXQUFBLEt2RHdzTEQsY3VEbnNMQyxTQUFVLFNBQ1YsTUFBQSxLQUNBLE9BQUEsS0FFQSxlQUNBLFNBQUEsU25EYUEsaUJBQUEsS0FDUSx3QkFBQSxZbURaUixnQkFBQSxZdEQrdExBLE9zRC90TEEsSUFBQSxNQUFBLEtBRUEsT0FBQSxJQUFBLE1BQUEsZXZEcXNMRCxjQUFBLEl1RGpzTEMsUUFBUyxFQUNULG1CQUFBLEVBQUEsSUFBQSxJQUFBLGVBQ0EsV0FBQSxFQUFBLElBQUEsSUFBQSxlQUVBLGdCQUNBLFNBQUEsTUFDQSxJQUFBLEVBQ0EsTUFBQSxFdkRtc0xELE9BQUEsRXVEanNMQyxLQUFBLEVsQ3JFQSxRQUFBLEtBR0EsaUJBQUEsS2tDbUVBLHFCbEN0RUEsT0FBQSxpQkFHQSxRQUFBLEVrQ3dFRixtQkFDRSxPQUFBLGtCQUNBLFFBQUEsR0FJRixjQUNFLFFBQUEsS3ZEbXNMRCxjQUFBLElBQUEsTUFBQSxRdUQ5ckxDLHFCQUNBLFdBQUEsS0FLRixhQUNFLE9BQUEsRUFDQSxZQUFBLFdBSUYsWUFDRSxTQUFBLFNBQ0EsUUFBQSxLdkQ2ckxELGN1RC9yTEMsUUFBUyxLQVFQLFdBQUEsTUFDQSxXQUFBLElBQUEsTUFBQSxRQVRKLHdCQWFJLGNBQUEsRXZEeXJMSCxZQUFBLEl1RHJyTEcsbUN2RHdyTEgsWUFBQSxLdURsckxDLG9DQUNBLFlBQUEsRUFFQSx5QkFDQSxTQUFBLFN2RHFyTEQsSUFBQSxRdURucUxDLE1BQU8sS0FaUCxPQUFBLEtBQ0UsU0FBQSxPdkRtckxELHlCdURockxELGNuRHZFQSxNQUFBLE1BQ1EsT0FBQSxLQUFBLEttRDJFUixlQUFZLG1CQUFBLEVBQUEsSUFBQSxLQUFBLGV2RGtyTFgsV0FBQSxFQUFBLElBQUEsS0FBQSxldUQ1cUxELFVBRkEsTUFBQSxPdkRvckxELHlCd0RsMExDLFVBQ0EsTUFBQSxPQ05BLFNBRUEsU0FBQSxTQUNBLFFBQUEsS0FDQSxRQUFBLE1BQ0EsWUFBQSxpQkFBQSxVQUFBLE1BQUEsV0FDQSxVQUFBLEtBQ0EsV0FBQSxPQUNBLFlBQUEsSUFDQSxZQUFBLFdBQ0EsV0FBQSxLQUNBLFdBQUEsTUFDQSxnQkFBQSxLQUNBLFlBQUEsS0FDQSxlQUFBLEtBQ0EsZUFBQSxPREhBLFdBQUEsT25DVkEsYUFBQSxPQUdBLFVBQUEsT3JCeTFMRCxZQUFBLE93RDkwTEMsT0FBQSxpQm5DZEEsUUFBQSxFckJnMkxELFdBQUEsS3dEajFMWSxZQUFtQixPQUFBLGtCeERxMUwvQixRQUFBLEd3RHAxTFksYUFBbUIsUUFBQSxJQUFBLEV4RHcxTC9CLFdBQUEsS3dEdjFMWSxlQUFtQixRQUFBLEVBQUEsSXhEMjFML0IsWUFBQSxJd0QxMUxZLGdCQUFtQixRQUFBLElBQUEsRXhEODFML0IsV0FBQSxJd0R6MUxDLGNBQ0EsUUFBQSxFQUFBLElBQ0EsWUFBQSxLQUVBLGVBQ0EsVUFBQSxNeEQ0MUxELFFBQUEsSUFBQSxJd0R4MUxDLE1BQU8sS0FDUCxXQUFBLE9BQ0EsaUJBQUEsS0FDQSxjQUFBLElBRUEsZXhEMDFMRCxTQUFBLFN3RHQxTEMsTUFBQSxFQUNFLE9BQUEsRUFDQSxhQUFBLFlBQ0EsYUFBQSxNQUVBLDRCeER3MUxILE9BQUEsRXdEdDFMQyxLQUFBLElBQ0UsWUFBQSxLQUNBLGFBQUEsSUFBQSxJQUFBLEVBQ0EsaUJBQUEsS0FFQSxpQ3hEdzFMSCxNQUFBLEl3RHQxTEMsT0FBQSxFQUNFLGNBQUEsS0FDQSxhQUFBLElBQUEsSUFBQSxFQUNBLGlCQUFBLEtBRUEsa0N4RHcxTEgsT0FBQSxFd0R0MUxDLEtBQUEsSUFDRSxjQUFBLEtBQ0EsYUFBQSxJQUFBLElBQUEsRUFDQSxpQkFBQSxLQUVBLDhCeER3MUxILElBQUEsSXdEdDFMQyxLQUFBLEVBQ0UsV0FBQSxLQUNBLGFBQUEsSUFBQSxJQUFBLElBQUEsRUFDQSxtQkFBQSxLQUVBLDZCeER3MUxILElBQUEsSXdEdDFMQyxNQUFBLEVBQ0UsV0FBQSxLQUNBLGFBQUEsSUFBQSxFQUFBLElBQUEsSUFDQSxrQkFBQSxLQUVBLCtCeER3MUxILElBQUEsRXdEdDFMQyxLQUFBLElBQ0UsWUFBQSxLQUNBLGFBQUEsRUFBQSxJQUFBLElBQ0Esb0JBQUEsS0FFQSxvQ3hEdzFMSCxJQUFBLEV3RHQxTEMsTUFBQSxJQUNFLFdBQUEsS0FDQSxhQUFBLEVBQUEsSUFBQSxJQUNBLG9CQUFBLEtBRUEscUN4RHcxTEgsSUFBQSxFMERyN0xDLEtBQU0sSUFDTixXQUFBLEtBQ0EsYUFBQSxFQUFBLElBQUEsSUFDQSxvQkFBQSxLQUVBLFNBQ0EsU0FBQSxTQUNBLElBQUEsRURYQSxLQUFBLEVBRUEsUUFBQSxLQUNBLFFBQUEsS0FDQSxVQUFBLE1BQ0EsUUFBQSxJQUNBLFlBQUEsaUJBQUEsVUFBQSxNQUFBLFdBQ0EsVUFBQSxLQUNBLFdBQUEsT0FDQSxZQUFBLElBQ0EsWUFBQSxXQUNBLFdBQUEsS0FDQSxXQUFBLE1BQ0EsZ0JBQUEsS0FDQSxZQUFBLEtBQ0EsZUFBQSxLQ0FBLGVBQUEsT0FFQSxXQUFBLE9BQ0EsYUFBQSxPQUFBLFVBQUEsT0FDQSxZQUFBLE9BQ0EsaUJBQUEsS0FDQSx3QkFBQSxZdEQ4Q0EsZ0JBQUEsWUFDUSxPQUFBLElBQUEsTUFBQSxLSnE1TFQsT0FBQSxJQUFBLE1BQUEsZTBEaDhMQyxjQUFBLElBQVksbUJBQUEsRUFBQSxJQUFBLEtBQUEsZTFEbThMYixXQUFBLEVBQUEsSUFBQSxLQUFBLGUwRGw4TGEsV0FBQSxLQUNaLGFBQVksV0FBQSxNQUNaLGVBQVksWUFBQSxLQUdkLGdCQUNFLFdBQUEsS0FFQSxjQUNBLFlBQUEsTUFFQSxlMUR3OExELFFBQUEsSUFBQSxLMERyOExDLE9BQVEsRUFDUixVQUFBLEsxRHU4TEQsaUJBQUEsUTBELzdMQyxjQUFBLElBQUEsTUFBQSxRekQ0OUxBLGNBQWUsSUFBSSxJQUFJLEVBQUUsRXlEejlMdkIsaUJBQ0EsUUFBQSxJQUFBLEtBRUEsZ0JBQ0Esc0IxRGk4TEgsU0FBQSxTMEQ5N0xDLFFBQVMsTUFDVCxNQUFBLEUxRGc4TEQsT0FBQSxFMEQ5N0xDLGFBQWMsWUFDZCxhQUFBLE0xRGk4TEQsZ0IwRDU3TEMsYUFBQSxLQUVFLHNCQUNBLFFBQUEsR0FDQSxhQUFBLEtBRUEsb0IxRDg3TEgsT0FBQSxNMEQ3N0xHLEtBQUEsSUFDRSxZQUFBLE1BQ0EsaUJBQUEsS0FDQSxpQkFBQSxnQkFDQSxvQkFBQSxFMURnOExMLDBCMEQ1N0xDLE9BQUEsSUFDRSxZQUFBLE1BQ0EsUUFBQSxJQUNBLGlCQUFBLEtBQ0Esb0JBQUEsRUFFQSxzQjFEODdMSCxJQUFBLEkwRDc3TEcsS0FBQSxNQUNFLFdBQUEsTUFDQSxtQkFBQSxLQUNBLG1CQUFBLGdCQUNBLGtCQUFBLEUxRGc4TEwsNEIwRDU3TEMsT0FBQSxNQUNFLEtBQUEsSUFDQSxRQUFBLElBQ0EsbUJBQUEsS0FDQSxrQkFBQSxFQUVBLHVCMUQ4N0xILElBQUEsTTBENzdMRyxLQUFBLElBQ0UsWUFBQSxNQUNBLGlCQUFBLEVBQ0Esb0JBQUEsS0FDQSxvQkFBQSxnQjFEZzhMTCw2QjBEMzdMQyxJQUFBLElBQ0UsWUFBQSxNQUNBLFFBQUEsSUFDQSxpQkFBQSxFQUNBLG9CQUFBLEtBRUEscUIxRDY3TEgsSUFBQSxJMEQ1N0xHLE1BQUEsTUFDRSxXQUFBLE1BQ0EsbUJBQUEsRUFDQSxrQkFBQSxLQUNBLGtCQUFBLGdCMUQrN0xMLDJCMkR2ak1DLE1BQU8sSUFDUCxPQUFBLE0zRHlqTUQsUUFBQSxJMkR0ak1DLG1CQUFvQixFQUNwQixrQkFBQSxLQUVBLFUzRHdqTUQsU0FBQSxTMkRyak1HLGdCQUNBLFNBQUEsU3ZENktGLE1BQUEsS0FDSyxTQUFBLE9KNjRMTixzQjJEbGtNQyxTQUFVLFMxRCtsTVYsUUFBUyxLMERqbE1MLG1CQUFBLElBQUEsWUFBQSxLM0R3ak1MLGNBQUEsSUFBQSxZQUFBLEsyRDloTUMsV0FBQSxJQUFBLFlBQUEsS3ZEbUtLLDRCQUZMLDBCQUdRLFlBQUEsRUEzSkEscURBK0dSLHNCQUVRLG1CQUFBLGtCQUFBLElBQUEsWUppN0xQLGNBQUEsYUFBQSxJQUFBLFkyRDVqTUcsV0FBQSxVQUFBLElBQUEsWXZEbUhKLDRCQUFBLE9BQ1Esb0JBQUEsT3VEakhGLG9CQUFBLE8zRCtqTUwsWUFBQSxPSS84TEQsbUNIeStMQSwyQkd4K0xRLEtBQUEsRXVENUdGLGtCQUFBLHNCM0Rna01MLFVBQUEsc0JDMkJELGtDQURBLDJCRy8rTEEsS0FBQSxFQUNRLGtCQUFBLHVCdUR0R0YsVUFBQSx1QkFyQ04sNkIzRHVtTUQsZ0MyRHZtTUMsaUMxRGtvTUUsS0FBTSxFMERybE1OLGtCQUFBLG1CM0Qrak1ILFVBQUEsb0JBR0Esd0IyRC9tTUQsc0JBQUEsc0JBc0RJLFFBQUEsTUFFQSx3QjNENmpNSCxLQUFBLEUyRHpqTUcsc0IzRDRqTUgsc0IyRHhuTUMsU0FBVSxTQStEUixJQUFBLEUzRDRqTUgsTUFBQSxLQzBCRCxzQjBEbGxNSSxLQUFBLEtBbkVKLHNCQXVFSSxLQUFBLE1BdkVKLDJCQTBFSSw0QjNEMmpNSCxLQUFBLEUyRGxqTUMsNkJBQ0EsS0FBQSxNQUVBLDhCQUNBLEtBQUEsS3RDM0ZBLGtCc0M2RkEsU0FBQSxTQUNBLElBQUEsRUFDQSxPQUFBLEVBQ0EsS0FBQSxFQUNBLE1BQUEsSTNEc2pNRCxVQUFBLEsyRGpqTUMsTUFBQSxLZG5HRSxXQUFBLE9BQ0EsWUFBQSxFQUFBLElBQUEsSUFBQSxlQUNBLGlCQUFBLGNBQUEsT0FBQSxrQkFDQSxRQUFBLEc3Q3dwTUgsdUIyRHJqTUMsaUJBQUEsc0VBQ0UsaUJBQUEsaUVBQ0EsaUJBQUEsdUZkeEdBLGlCQUFBLGtFQUNBLE9BQUEsK0dBQ0Esa0JBQUEsU0FDQSx3QkFDQSxNQUFBLEU3Q2dxTUgsS0FBQSxLMkR2ak1DLGlCQUFBLHNFMURtbE1BLGlCQUFpQixpRTBEamxNZixpQkFBQSx1RkFDQSxpQkFBQSxrRUFDQSxPQUFBLCtHdEN2SEYsa0JBQUEsU3NDeUZGLHdCM0R5bE1DLHdCQzRCQyxNQUFPLEtBQ1AsZ0JBQWlCLEtBQ2pCLE9BQVEsa0IwRGhsTU4sUUFBQSxFQUNBLFFBQUEsRzNEMmpNSCwwQzJEbm1NRCwyQ0EyQ0ksNkJBREEsNkIxRHFsTUYsU0FBVSxTMERobE1SLElBQUEsSUFDQSxRQUFBLEUzRHdqTUgsUUFBQSxhMkR4bU1DLFdBQVksTUFxRFYsMENBREEsNkIzRHlqTUgsS0FBQSxJMkQ3bU1DLFlBQWEsTUEwRFgsMkNBREEsNkJBRUEsTUFBQSxJQUNBLGFBQUEsTUFNRSw2QkFERiw2QjNEc2pNSCxNQUFBLEsyRGpqTUcsT0FBQSxLQUNFLFlBQUEsTTNEbWpNTCxZQUFBLEUyRHhpTUMsb0NBQ0EsUUFBQSxRQUVBLG9DQUNBLFFBQUEsUUFFQSxxQkFDQSxTQUFBLFNBQ0EsT0FBQSxLM0QyaU1ELEtBQUEsSTJEcGpNQyxRQUFTLEdBWVAsTUFBQSxJQUNBLGFBQUEsRUFDQSxZQUFBLEtBQ0EsV0FBQSxPQUNBLFdBQUEsS0FFQSx3QkFDQSxRQUFBLGFBV0EsTUFBQSxLQUNBLE9BQUEsSzNEaWlNSCxPQUFBLEkyRGhrTUMsWUFBYSxPQWtDWCxPQUFBLFFBQ0EsaUJBQUEsT0FDQSxpQkFBQSxjQUNBLE9BQUEsSUFBQSxNQUFBLEszRGlpTUgsY0FBQSxLMkR6aE1DLDZCQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsT0FBQSxFQUNBLGlCQUFBLEtBRUEsa0JBQ0EsU0FBQSxTQUNBLE1BQUEsSUFDQSxPQUFBLEszRDRoTUQsS0FBQSxJMkQzaE1DLFFBQUEsR0FDRSxZQUFBLEszRDZoTUgsZUFBQSxLMkRwL0xDLE1BQU8sS0FoQ1AsV0FBQSxPMURpak1BLFlBQWEsRUFBRSxJQUFJLElBQUksZUFFekIsdUIwRDlpTU0sWUFBQSxLQUVBLG9DQUNBLDBDM0RzaE1ILDJDMkQ5aE1ELDZCQUFBLDZCQVlJLE1BQUEsSzNEc2hNSCxPQUFBLEsyRGxpTUQsV0FBQSxNMUQ4ak1FLFVBQVcsS0R4QlosMEMyRGpoTUQsNkJBQ0UsWUFBQSxNQUVBLDJDM0RtaE1ELDZCMkQvZ01ELGFBQUEsTTNEa2hNQyxrQkFDRixNQUFBLEk0RGh4TUMsS0FBQSxJM0Q0eU1FLGVBQWdCLEtBRWxCLHFCQUNFLE9BQVEsTUFrQloscUNBREEsc0NBREEsbUJBREEsb0JBWEEsZ0JBREEsaUJBT0EsdUJBREEsd0JBREEsaUJBREEsa0JBREEsd0JBREEseUJBU0EsbUNBREEsb0MyRHZ6TUUsb0JBQUEscUJBQUEsb0JBQUEscUIzRDh6TUYsV0FEQSxZQU9BLHVCQURBLHdCQURBLHFCQURBLHNCQURBLGNBREEsZTJEbDBNSSxhM0R3ME1KLGNEdkJDLGtCNERoek1HLG1CM0R3ek1KLFdBREEsWUF3QkUsUUFBUyxNQUNULFFBQVMsSUFTWCxxQ0FEQSxtQkFOQSxnQkFHQSx1QkFEQSxpQkFEQSx3QkFJQSxtQ0RoQkMsb0I2RGwxTUMsb0I1RHEyTUYsVytCLzFNQSx1QmhDdTBNQyxxQjREL3pNRyxjQ2hCRixhQUNBLGtCNURrMk1GLFcrQngxTUUsTUFBTyxLaEM0ME1SLGNnQ3owTUMsUUFBUyxNQUNULGFBQUEsS2hDMjBNRCxZQUFBLEtnQ2wwTUMsWWhDcTBNRCxNQUFBLGdCZ0NsME1DLFdoQ3EwTUQsTUFBQSxlZ0NsME1DLE1oQ3EwTUQsUUFBQSxlOEQ1MU1DLE1BQ0EsUUFBQSxnQkFFQSxXQUNBLFdBQUEsTzlCOEJGLFdBQ0UsS0FBQSxFQUFBLEVBQUEsRWhDbTBNRCxNQUFBLFlnQzV6TUMsWUFBYSxLQUNiLGlCQUFBLFloQzh6TUQsT0FBQSxFK0Q5MU1DLFEvRGkyTUQsUUFBQSxlQzRCRCxPQUNFLFNBQVUsTStEdDRNVixjaEUrMk1ELE1BQUEsYUMrQkQsWUFEQSxZQURBLFlBREEsWUFJRSxRQUFTLGUrRHY1TVQsa0JoRXk0TUMsbUJnRXg0TUQseUJoRW80TUQsa0IrRHIxTUQsbUJBNklBLHlCOUQrdE1BLGtCQUNBLG1COERwM01FLHlCOURnM01GLGtCQUNBLG1CQUNBLHlCK0QxNU1ZLFFBQUEsZUFDVix5QkFBVSxZaEU2NE1ULFFBQUEsZ0JDNEJELGlCK0R2Nk1VLFFBQUEsZ0JoRWc1TVgsYytELzFNRyxRQUFTLG9CL0RtMk1WLGMrRHIyTUMsYy9EczJNSCxRQUFBLHNCK0RqMk1HLHlCL0RxMk1ELGtCQUNGLFFBQUEsaUIrRGoyTUcseUIvRHEyTUQsbUJBQ0YsUUFBQSxrQmdFbjZNQyx5QmhFdTZNQyx5QmdFdDZNRCxRQUFBLHdCQUNBLCtDQUFVLFloRTI2TVQsUUFBQSxnQkM0QkQsaUIrRHI4TVUsUUFBQSxnQmhFODZNWCxjK0R4Mk1HLFFBQVMsb0IvRDQyTVYsYytEOTJNQyxjL0QrMk1ILFFBQUEsc0IrRDEyTUcsK0MvRDgyTUQsa0JBQ0YsUUFBQSxpQitEMTJNRywrQy9EODJNRCxtQkFDRixRQUFBLGtCZ0VqOE1DLCtDaEVxOE1DLHlCZ0VwOE1ELFFBQUEsd0JBQ0EsZ0RBQVUsWWhFeThNVCxRQUFBLGdCQzRCRCxpQitEbitNVSxRQUFBLGdCaEU0OE1YLGMrRGozTUcsUUFBUyxvQi9EcTNNVixjK0R2M01DLGMvRHczTUgsUUFBQSxzQitEbjNNRyxnRC9EdTNNRCxrQkFDRixRQUFBLGlCK0RuM01HLGdEL0R1M01ELG1CQUNGLFFBQUEsa0JnRS85TUMsZ0RoRW0rTUMseUJnRWwrTUQsUUFBQSx3QkFDQSwwQkFBVSxZaEV1K01ULFFBQUEsZ0JDNEJELGlCK0RqZ05VLFFBQUEsZ0JoRTArTVgsYytEMTNNRyxRQUFTLG9CL0Q4M01WLGMrRGg0TUMsYy9EaTRNSCxRQUFBLHNCK0Q1M01HLDBCL0RnNE1ELGtCQUNGLFFBQUEsaUIrRDUzTUcsMEIvRGc0TUQsbUJBQ0YsUUFBQSxrQmdFci9NQywwQmhFeS9NQyx5QkFDRixRQUFBLHdCZ0UxL01DLHlCaEU4L01DLFdBQ0YsUUFBQSxnQmdFLy9NQywrQ2hFbWdOQyxXQUNGLFFBQUEsZ0JnRXBnTkMsZ0RoRXdnTkMsV0FDRixRQUFBLGdCQUdBLDBCK0RuM01DLFdBNEJFLFFBQVMsZ0JDNUxYLGVBQVUsUUFBQSxlQUNWLGFBQVUsZWhFNGhOVCxRQUFBLGdCQzRCRCxvQitEdGpOVSxRQUFBLGdCaEUraE5YLGlCK0RqNE1HLFFBQVMsb0JBTVgsaUIvRDgzTUQsaUIrRHoyTUcsUUFBUyxzQi9EODJNWixxQitEbDRNQyxRQUFTLGUvRHE0TVYsYStELzNNQyxxQkFjRSxRQUFTLGlCL0RzM01aLHNCK0RuNE1DLFFBQVMsZS9EczRNVixhK0RoNE1DLHNCQU9FLFFBQVMsa0IvRDgzTVosNEIrRC8zTUMsUUFBUyxlQ3BMVCxhaEV1ak5DLDRCQUNGLFFBQUEsd0JDNkJELGFBQ0UsY0FDRSxRQUFTIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwMy10cmFuc2l0aW9uLmNzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAzLXRyYW5zaXRpb24uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NDQ0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwMy10cmFuc2l0aW9uLmNzcwpAQCAtMCwwICsxLDIzOCBAQAorLyogQ2hhbmdlcyB0byB0aGUgdG9wIGJhci4gVGVtcGxhdGU6IGJhc2UuaHRtbCAqLworCisubmF2YmFyIC5icmFuZCB7CisgIHBhZGRpbmc6IDVweCAyMHB4OworfQorCisubG9nbyB7CisgIHBhZGRpbmctdG9wOiAycHggIWltcG9ydGFudDsKK30KKworLyogQ2hhbmdlcyB0byB0aGUgdGFibGVzIHBhZ2luYXRpb24gKi8KKworLnBhZ2luYXRpb24geworICBtYXJnaW46IDAgMCA0MHB4IDA7Cit9CisKK3NlbGVjdFtjbGFzc149InBhZ2VzaXplIl0geworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisvKiBQcm9qZWN0IGNvbmZpZ3VyYXRpb24gcGFnZSAqLworCit1bC5jb25maWd1cmF0aW9uLWxpc3QgeworICBtYXJnaW4tbGVmdDogMHB4OworfQorCisuY29uZmlndXJhdGlvbi1saXN0IC5jaGVja2JveCB7CisgIG1hcmdpbi10b3A6IDA7Cit9CisKKy8qIEJyZWFkY3J1bWJzICovCisKKy5icmVhZGNydW1iIHsKKyAgcGFkZGluZzogOHB4IDA7Cit9CisKKy5icmVhZGNydW1iID4gbGkgKyBsaTo6YmVmb3JlIHsKKyAgY29udGVudDogbm9uZTsKK30KKworLmJyZWFkY3J1bWIgLmRpdmlkZXIgeworICBjb2xvcjogIzk5OTsKKyAgcGFkZGluZzogMCA1cHg7Cit9CisKKy8qIFJlbW92ZSB0aGUgaG92ZXJpbmcgZnJvbSB0aGUgLmJ0bi1wcmltYXJ5IGJ1dHRvbnMgd2hlbiB0aGV5IGFyZSBkaXNhYmxlZCAqLworCisuYnRuLXByaW1hcnkuZGlzYWJsZWQuZm9jdXMsCisuYnRuLXByaW1hcnkuZGlzYWJsZWQ6Zm9jdXMsCisuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsCisuYnRuLXByaW1hcnkuZm9jdXNbZGlzYWJsZWRdLAorLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpmb2N1cywKKy5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsCitmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmZvY3VzLAorZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTpmb2N1cywKK2ZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDRjOworICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsKK30KKworLyogVGFibGUgc2VhcmNoIGlucHV0IGZpZWxkICovCisKKy5uYXZiYXItc2VhcmNoIHsKKyAgd2lkdGg6IDYwJTsKK30KKworLm5hdmJhci1zZWFyY2ggLmlucHV0LWFwcGVuZCB7CisgIHdpZHRoOiA5MCU7Cit9CisKKy5uYXZiYXItc2VhcmNoIC5pbnB1dC1hcHBlbmQgaW5wdXRbdHlwZT0idGV4dCJdIHsKKyAgd2lkdGg6IDgwJTsKK30KKworI3NlYXJjaCB7CisgIHdpZHRoOiA2MCU7Cit9CisKKy8qIERlZmluaXRpb24gbGlzdHMgKi8KKworLmRsLWhvcml6b250YWwgZGQgeworICBtYXJnaW4tbGVmdDogMjIwcHg7Cit9CisKKy5kbC1ob3Jpem9udGFsIGR0IHsKKyAgd2lkdGg6IDIwMHB4OworfQorCisvKiBUYWJsZSBjb250cm9scyAqLworCisubmF2YmFyLWlubmVyID4gLm5hdmJhci1zZWFyY2ggLmlucHV0LWFwcGVuZCB7CisgIG1hcmdpbi1ib3R0b206IDVweDsKK30KKworLm5hdmJhci1zZWFyY2guaW5wdXQtYXBwZW5kIHsKKyAgbWFyZ2luLWJvdHRvbTogMjBweDsKK30KKworLyogTW9kYWwgZGlhbG9ncyAqLworCisubW9kYWwtZGlhbG9nIHsKKyAgd2lkdGg6IDcwMHB4OworfQorCisubW9kYWwtYm9keSB7CisgIG92ZXJmbG93LXk6IHNjcm9sbDsKKyAgbWF4LWhlaWdodDogMzUwcHg7Cit9CisKKy5tb2RhbC1ib2R5IHVsLmxpc3QtdW5zdHlsZWQgeworICBtYXJnaW4tbGVmdDogMDsKK30KKworLm1vZGFsLWZvb3RlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7Cit9CisKKy5tb2RhbC1jb250ZW50IGZvcm0geworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisubW9kYWwtZGlhbG9nIC5jaGVja2JveCBsYWJlbCwKKy5tb2RhbC1kaWFsb2cgLnJhZGlvIGxhYmVsIHsKKyAgcGFkZGluZy1sZWZ0OiAwOworfQorCisvKiBUeXBlYWhlYWQgKi8KKworLnR0LW1lbnUgeworICB3aWR0aDogMTIwJTsKKyAgcGFkZGluZzogMTBweCA4cHg7Cit9CisKKy50dC1zdWdnZXN0aW9uIHsKKyAgcGFkZGluZzogM3B4IDhweDsKKyAgY3Vyc29yOiBwb2ludGVyOworICBvdmVyZmxvdzogaGlkZGVuOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKK30KKworLnR0LXN1Z2dlc3Rpb24uYWN0aXZlLAorLnR0LXN1Z2dlc3Rpb246aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MWMyOworICBjb2xvcjogd2hpdGU7Cit9CisKKy8qIEJ1aWxkIGZvcm0gKi8KKworI2J1aWxkLWlucHV0IHsKKyAgd2lkdGg6IDIwZW07Cit9CisKKy8qIENsZWFyIGZpbHRlciB0b29sdGlwcyBpbiB0b2FzdGVydGFibGVzICovCisKKy50b29sdGlwIC5idG4tc21hbGwgeworICBtYXJnaW46IDEwcHg7Cit9CisKKy8qIFRhYmxlIGNlbGwgbm90aWZpY2F0aW9ucyAqLworCisuaW5saW5lLW5vdGlmaWNhdGlvbiwKKyN0ZW1wLWlubGluZS1ub3RpZnkgeworICBwYWRkaW5nOiAxMHB4OworfQorCisvKiBUYWJsZSBidXR0b25zICovCisKK3RkIC5idG4geworICB3aGl0ZS1zcGFjZTogbm9ybWFsOworfQorCit0aC5hZGQtZGVsLWxheWVycyB7CisgIHdpZHRoOiAxOCU7Cit9CisKK3RoLmFkZF9ybV9wa2dfYnRuIHsKKyAgd2lkdGg6IDIwJTsKK30KKworLyogRWRpdCBjb2x1bXNuIG1lbnUgKi8KKworLmRyb3Bkb3duLW1lbnUgeworICBtaW4td2lkdGg6IDIwMHB4OworfQorCisvKiBQb3BvdmVyIGNvbnRlbnQgKi8KKworLnBvcG92ZXItY29udGVudCA+IHVsIHsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CisKK2gzLnBvcG92ZXItdGl0bGUgeworICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLnBvcG92ZXIgeworICBtYXgtd2lkdGg6IDQwMHB4OworfQorCisvKiBFcnJvcnMgYW5kIHdhcm5pbmdzIGFjY29yZGlvbnMgKi8KKworI2Vycm9ycyAucGFuZWwtaGVhZGluZywKKyN3YXJuaW5ncyAucGFuZWwtaGVhZGluZyB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCithLnRvZ2dsZS1lcnJvcnM6aG92ZXIsCithLnRvZ2dsZS13YXJuaW5nczpob3ZlciwKK2Eud2FybmluZzpmb2N1cyB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworYS50b2dnbGUtZXJyb3JzOmZvY3VzLAorYS50b2dnbGUtd2FybmluZ3M6Zm9jdXMgeworICBvdXRsaW5lOiBub25lOworfQorCisvKiBMYW5kaW5nIHBhZ2UgKi8KKworLmp1bWJvdHJvbiBwIHsKKyAgbWFyZ2luLXRvcDogMjBweDsKKyAgbWFyZ2luLWJvdHRvbTogMzBweDsKK30KKworLmp1bWJvdHJvbiB1bCB7CisgIG1hcmdpbi1sZWZ0OiAxMHB4OworICBmb250LXNpemU6IDIxcHg7CisgIGZvbnQtd2VpZ2h0OiAyMDA7Cit9CisKKy5qdW1ib3Ryb24gdWwgPiBsaSB7CisgIGxpbmUtaGVpZ2h0OiAzMHB4OworfQorCisuanVtYm90cm9uIC5pbWctdGh1bWJuYWlsIHsKKyAgcGFkZGluZzogMDsKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcwppbmRleCBiMDI0ZDk2Li5mZjI0ZThjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvZGVmYXVsdC5jc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2RlZmF1bHQuY3NzCkBAIC0xLDI5OSArMSwzMzcgQEAKKy8qIE5ldyBUb2FzdGVyIGN1c3RvbSBjc3MgZmlsZSBmb3IgQm9vdHN0cmFwIDMgKi8KKworLyogU2V0IHJlcXVpcmVkIHRvcCBib2R5IHBhZGRpbmcgZm9yIHRoZSBmaXhlZCB0b3AgbmF2YmFyZCAqLworYm9keSB7IHBhZGRpbmctdG9wOiA1MHB4OyB9CisKIC8qIFN0eWxlIHRoZSBZb2N0byBQcm9qZWN0IGxvZ28gKi8KLS5sb2dvIGltZyB7IGhlaWdodDogMzBweDsgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsgfQotLmxvZ28geyBwYWRkaW5nLXRvcDogNHB4ICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOjBweCAhaW1wb3J0YW50OyB9CitpbWcubG9nbyB7IGhlaWdodDogMzBweDsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgfQogCi0vKiBzdHlsZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotLmJyYW5kID4gYSB7IGNvbG9yOiAjNzc3OyB9Ci0uYnJhbmQgPiBhOmhvdmVyIHsgY29sb3I6ICM5OTk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQotLmljb24taW5mby1zaWduIHsgY29sb3I6ICM3Nzc7IGZvbnQtc2l6ZTogMTZweDsgbWFyZ2luLWxlZnQ6IDVweDt9Ci0uaWNvbi1pbmZvLXNpZ246aG92ZXIgeyBjb2xvcjogIzk5OTsgY3Vyc29yOiBwb2ludGVyOyB9CisvKiBTdHlsZSB0aGUgWW9jdG8gUHJvamVjdCBsb2dvIGFuZCB0aGUgVG9hc3RlciBuYW1lIGluIHRoZSB0b3AgbmF2YmFyICovCisudG9hc3Rlci1uYXZiYXItYnJhbmQgeyBmbG9hdDogbGVmdDsgbWFyZ2luOiA3cHggMjVweCAwIDA7IH0KKy50b2FzdGVyLW5hdmJhci1icmFuZCBhLmJyYW5kIHsgY29sb3I6ICM3Nzc7IGhlaWdodDogNTBweDsgcGFkZGluZzogMTVweCA1cHggMTVweCAxNXB4OyBmb250LXNpemU6IDIwcHg7IGxpbmUtaGVpZ2h0OiAyNXB4OyBkaXNwbGF5OiBpbmxpbmU7IH0KKy50b2FzdGVyLW5hdmJhci1icmFuZCA+IGEgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKy50b2FzdGVyLW5hdmJhci1icmFuZCA+IGEuYnJhbmQ6aG92ZXIgeyBjb2xvcjogIzVlNWU1ZTsgfQogCi0vKiBTdHlsZSB0aGUgYnJlYWRjcnVtYiAqLwotLmJyZWFkY3J1bWIgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CisvKiBTdHlsZSB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZSB0b3AgbmF2YmFyICovCisuZ2x5cGhpY29uLWluZm8tc2lnbiB7IGNvbG9yOiAjNzc3OyBmb250LXNpemU6IDE2cHg7IH0KKy5nbHlwaGljb24taW5mby1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQorCisvKiBPdmVycmlkZSB0aGUgbmVnYXRpdmUgcmlnaHQgbWFyZ2luIGZvciB0aGUgbmF2YmFyLXJpZ2h0IGNsYXNzICovCisjbmV3LXByb2plY3QtYnV0dG9uIHsgbWFyZ2luLXJpZ2h0OiAwOyB9CisKKy8qIEluY3JlYXNlIHBvcG92ZXJzIHdpZHRoIHRvIGZpdCBjb21taXQgU0hBcyAqLworLnBvcG92ZXIgeyBtYXgtd2lkdGg6IDM1MHB4OyB9CisKKy8qIFNldCBhIGxpbWl0IHRvIHBvcG92ZXIgaGVpZ2h0IHRvIGhhbmRsZSBsb25nIGRlcGVuZGVuY3kgbGlzdHMgKi8KKy5wb3BvdmVyLWNvbnRlbnQgeyBtYXgtaGVpZ2h0OiAzNTBweDsgb3ZlcmZsb3c6IHNjcm9sbDsgfQorCisvKiBTZXQgYSBsaW1pdCB0byBtb2RhbCBkaWFsb2dzIGhlaWdodCB0byBoYW5kbGUgbG9uZyB2YXJpYWJsZSBoaXN0b3J5ICovCitbaWRePSJ2YXJpYWJsZS0iXSAubW9kYWwtY29udGVudCB7IG1heC1oZWlnaHQ6IDU1MHB4OyBvdmVyZmxvdy15OiBzY3JvbGw7IH0KKworLyogTWFrZSBzdXJlIGxvbmcgdmFsdWVzIGluIHZhcmlhYmxlIGhpc3RvcnkgZG8gbm90IG1ha2UgdGhlIG1vZGFsIGRpYWxvZ3MKKyAqIHNjcm9sbCBob3Jpem9udGFsbHkgKi8KK1tpZF49InZhcmlhYmxlLSJdIC5tb2RhbC1jb250ZW50IHAgeyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IH0KKworLyogSW5jcmVhc2UgYm90dG9tIG1hcmdpbiBvZiBkZWZpbml0aW9uIGxpc3RzIGluc2lkZSBwb3BvdmVycyBmb3IgdGhlIFRvYXN0ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbiB0aGUgdG9wIG5hdmJhciwgYW5kIGFsc28gaW5zaWRlIHRoZSByaWdodCBoYW5kIGNvbHVtbnMgb2Ygb3VyIGRldGFpbHMgcGFnZXMgKi8KKy5wb3BvdmVyLWNvbnRlbnQgZGQsCisuaXRlbS1pbmZvIGRkIHsgbWFyZ2luLWJvdHRvbTogMTVweDsgfQorCisvKiBTdHlsZSB0aGUgaG9yaXpvbnRhbCBkZWZpbml0aW9uIGxpc3RzICovCisuZGwtaG9yaXpvbnRhbCBkdCB7IHdpZHRoOiAyMDBweDsgbGluZS1oZWlnaHQ6IDI1cHg7IH0KKy5kbC1ob3Jpem9udGFsIGRkIHsgbWFyZ2luLWxlZnQ6IDIyMHB4OyBsaW5lLWhlaWdodDogMjVweDsgfQorCisvKiBTdHlsZSBvdXIgYnVpbGQgcmVzdWx0cyAqLworLmJ1aWxkLXJlc3VsdCAucHJvZ3Jlc3MgeyBtYXJnaW4tYm90dG9tOiAwOyB9CisuYWxlcnQtbGluay5idWlsZC13YXJuaW5ncywKKy5nbHlwaGljb24td2FybmluZy1zaWduLmJ1aWxkLXdhcm5pbmdzIHsgY29sb3I6ICM4YTZkM2I7IH0KKy5idWlsZC1yZXN1bHQgLnByb2plY3QtbmFtZSB7IG1hcmdpbi10b3A6IC0xMHB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IH0KKy5yZWJ1aWxkLWJ0biwgLmNhbmNlbC1idWlsZC1idG4geyBjdXJzb3I6IHBvaW50ZXI7IH0KIAogLyogU3R5bGVzIGZvciB0aGUgaGVscCBpbmZvcm1hdGlvbiAqLwogLmdldC1oZWxwIHsgY29sb3I6ICNDQ0NDQ0M7IH0KLS5nZXQtaGVscDpob3ZlciwgLmljb24tcGx1cy1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQotLmdldC1oZWxwLWdyZWVuIHsgY29sb3I6ICM0Njg4NDc7IH0KLS5nZXQtaGVscC1ncmVlbjpob3ZlciB7IGNvbG9yOiAjMzQ3MTMyOyBjdXJzb3I6IHBvaW50ZXI7IH0KKy5nZXQtaGVscDpob3ZlciB7IGNvbG9yOiAjOTk5OTk5OyBjdXJzb3I6IHBvaW50ZXI7IH0KKy5nZXQtaGVscC1ncmVlbiB7IGNvbG9yOiAjM2M3NjNkOyB9CisuZ2V0LWhlbHAtZ3JlZW46aG92ZXIgeyBjb2xvcjogIzJiNTQyYzsgY3Vyc29yOiBwb2ludGVyOyB9CiAuZ2V0LWhlbHAtYmx1ZSB7IGNvbG9yOiAjM0E4N0FEOyB9CiAuZ2V0LWhlbHAtYmx1ZTpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyBjdXJzb3I6IHBvaW50ZXI7IH0KLS5nZXQtaGVscC15ZWxsb3cgeyBjb2xvcjogI0MwOTg1MzsgfQotLmdldC1oZWxwLXllbGxvdzpob3ZlciB7IGNvbG9yOiAjQjM4OTQyOyBjdXJzb3I6IHBvaW50ZXI7IH0KLS5nZXQtaGVscC1yZWQgeyBjb2xvcjogI0I5NEE0ODsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nLWxlZnQ6IDJweDsgfQotLmdldC1oZWxwLXJlZDpob3ZlciB7IGNvbG9yOiAjOTQzQTM4OyBjdXJzb3I6IHBvaW50ZXI7IH0KLS5idWlsZC1mb3JtPmk6Zmlyc3Qtb2YtdHlwZSB7IG1hcmdpbi1sZWZ0OiA1cHg7IH0KLS5tYW51YWwgeyBtYXJnaW46IDExcHggMTVweCAwIDExcHg7fQorLmdldC1oZWxwLXJlZCB7IGNvbG9yOiAjYTk0NDQyOyB9CisuZ2V0LWhlbHAtcmVkOmhvdmVyIHsgY29sb3I6ICM4NDM1MzQ7IGN1cnNvcjogcG9pbnRlcjsgfQorCisvKiBTdHlsZXMgZm9yIG91ciB0YWJsZSBjb250cm9scyAqLworLmZvcm0tY29udHJvbFtpZF49InNlYXJjaC1pbnB1dC0iXSwKKy5mb3JtLWNvbnRyb2xbaWRePSJuZXctc2VhcmNoLWlucHV0LSJdLAorI3NlYXJjaHsgd2lkdGg6IDMwZW07IH0KKyNzZWFyY2gtaW5wdXQtc2VsZWN0cGFja2FnZXN0YWJsZSwKKyNzZWFyY2gtaW5wdXQtcGFja2FnZXN0YWJsZSwKKy5mb3JtLWNvbnRyb2xbaWRePSJuby1yZXN1bHRzLXNlYXJjaC1pbnB1dC0iXSB7IHdpZHRoOiAyMGVtOyB9CisjZWRpdC1jb2x1bW5zLWJ1dHRvbiB7IG1hcmdpbi1yaWdodDogMzBweDsgfQorLm5hdmJhci1kZWZhdWx0W2lkXj0idGFibGUtY2hyb21lLSJdLAorI3ZhcmlhYmxlcyAubmF2YmFyLWRlZmF1bHQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorW2lkXj0idGFibGUtY2hyb21lLWNvbGxhcHNlLSJdIC5uYXZiYXItZm9ybSB7IG1hcmdpbi1sZWZ0OiAtMTVweDsgfQorLmRyb3Bkb3duLW1lbnUuZWRpdGNvbCB7IHBhZGRpbmctbGVmdDogMTBweDsgbWluLXdpZHRoOiAyMDBweDsgfQorc3BhbltjbGFzc149InJlbW92ZS1zZWFyY2gtYnRuLSJdIHsgcG9zaXRpb246IGFic29sdXRlOyByaWdodDogNXB4OyB0b3A6IDA7IGJvdHRvbTogMDsgaGVpZ2h0OiAxNHB4OyBtYXJnaW46IGF1dG87IGZvbnQtc2l6ZTogMTRweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogIzc3Nzt9CitzcGFuW2NsYXNzXj0icmVtb3ZlLXNlYXJjaC1idG4tIl06aG92ZXIgeyBjb2xvcjogIzMzMzsgfQorI25vLXJlc3VsdHMtc3BlY2lhbC1zZWxlY3RwYWNrYWdlc3RhYmxlIC5mb3JtLWlubGluZSB7IG1hcmdpbi10b3A6IDIwcHg7IH0KK1tpZF49InBhZ2luYXRpb24tIl0gLnBhZ2luYXRpb24sCitbaWRePSJwYWdpbmF0aW9uLSJdIC5uYXZiYXItZm9ybSB7IG1hcmdpbi10b3A6IDA7IH0KK1tpZF49InRhYmxlLWNocm9tZS0iXSAubmF2YmFyLWZvcm0geyBtYXJnaW4tbGVmdDogLTE1cHg7IG1hcmdpbi1yaWdodDogLTE1cHg7IH0KK1tpZF49InRhYmxlLWNocm9tZS0iXSAuZGV0YWlsLXBhZ2UtY29udG9scywKKyNwYWNrYWdlcy1idWlsdCAuZGV0YWlsLXBhZ2UtY29udHJvbHMgeyBwYWRkaW5nLWxlZnQ6IDA7IHBhZGRpbmctcmlnaHQ6IDA7IH0KKworLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgZm9udC13ZWlnaHQgZm9yIGxhYmVsczogaXQncyBhIGJpdCB0b28gbXVjaCAqLworbGFiZWwgeyBmb250LXdlaWdodDogbm9ybWFsOyB9CisKKy8qIEZpcmVmb3ggd29ya2Fyb3VuZCBmb3IgYXdrd2FyZCBmaWVsZHNldCBzdHlsaW5nLiBTZWUgaHR0cDovL2dldGJvb3RzdHJhcC5jb20vY3NzLyN0YWJsZXMtcmVzcG9uc2l2ZSAqLworQC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpIHsgZmllbGRzZXQgeyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9IH0KKworLyogVGFibGUgaGVhZGluZyBzb3J0YWJsZSAvIG5vdCBzb3J0YWJsZSBzdGF0ZXMgKi8KK3RoZWFkID4gdHIgPiB0aCA+IGEgeyBmb250LXdlaWdodDogbm9ybWFsOyB9Cit0aGVhZCA+IHRyID4gdGggPiBhLnNvcnRlZCB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogIzMzMzsgfQorCisvKiBHaXZlIHNvbWUgZXh0cmEgc3BhY2UgdG8gdGhlICdjbGVhciBmaWx0ZXInIGJ1dHRvbnMgKi8KKy50b29sdGlwIC5idG4geyBtYXJnaW46IDVweDsgfQorCisvKiBJbiB0YWJsZSBoZWFkaW5ncywgc2VwYXJhdGUgdGhlIGhlbHAgYnViYmxlIGZyb20gdGhlIGNvbHVtbiBoZWFkaW5nICovCit0aGVhZCA+IHRyID4gdGggPiAuZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24geyBtYXJnaW4tcmlnaHQ6IDVweDsgfQorCisvKiBTdHlsZSBidWlsZCBvdXRjb21lIGluIHRhYmxlcywgZG93bmxvYWQsIHJlbW92ZSBhbmQgY2hhbmdlIGljb25zICovCit0Ym9keSA+IHRyID4gdGQgPiAuZ2x5cGhpY29uLW9rLWNpcmNsZSwKK2RkID4gLmdseXBoaWNvbi1vay1jaXJjbGUgeyBjb2xvcjogIzNjNzYzZDsgfQordGJvZHkgPiB0ciA+IHRkID4gLmdseXBoaWNvbi1taW51cy1zaWduIHsgY29sb3I6ICNhOTQ0NDI7IH0KKy5nbHlwaGljb24tZG93bmxvYWQtYWx0LAorLmdseXBoaWNvbi1lZGl0IHsgY29sb3I6ICMzMzdhYjc7IH0KKy5mYWlsZWRfdGFza3MgLmdseXBoaWNvbi1kb3dubG9hZC1hbHQgeyBtYXJnaW4tbGVmdDogNXB4OyB9CisuZ2x5cGhpY29uLWRvd25sb2FkLWFsdDpob3ZlciwKKy5nbHlwaGljb24tZWRpdDpob3ZlciB7IGNvbG9yOiAjMjM1MjdjOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorLmdseXBoaWNvbi10cmFzaCB7IGNvbG9yOiAjYTk0NDQyOyB9CisuYnRuLWRhbmdlciA+IC5nbHlwaGljb24tdHJhc2gsCisuYnRuLWRhbmdlciA+IC5nbHlwaGljb24tdHJhc2g6aG92ZXIgeyBjb2xvcjogI2ZmZjsgfQorLmdseXBoaWNvbi10cmFzaDpob3ZlciB7IGNvbG9yOiAjODQzNTM0OyBjdXJzb3I6IHBvaW50ZXI7IH0KKworLyogU2V0IHRoZSBmb250IHNpemUgZm9yIGljb25zIGluc2lkZSBoZWFkaW5ncywgbGVhZCBwYXJhZ3JhcGhzIGFuZCBkZWZpbml0aW9uIGxpc3RzICovCitoMSA+IC5nbHlwaGljb24tZWRpdCwKK3AubGVhZCAuZ2x5cGhpY29uIHsgZm9udC1zaXplOiAxNnB4OyB9CitoMiA+IC5nbHlwaGljb24tcXVlc3Rpb24tc2lnbiwKK2gzID4gLmdseXBoaWNvbi1xdWVzdGlvbi1zaWduLAogLmhlYWRpbmctaGVscCB7IGZvbnQtc2l6ZTogMTRweDsgfQogCi0vKiBTdHlsZXMgZm9yIHRoZSBleHRlcm5hbCBsaW5rICovCi0uZ2V0LWluZm8geyBjb2xvcjogIzAwODhDQzsgfQotLmdldC1pbmZvOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CisvKiBDcmVhdGUgYSBjbGFzcyBmb3Igd2VsbHMgd2l0aG91dCBiYWNrZ3JvdW5kIGNvbG91ciAqLworLndlbGwtdHJhbnNwYXJlbnQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQogCi0vKiBTdHlsZXMgZm9yIGNvZGUgYW5kIHByZSB0YWdzICovCi1jb2RlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICMzMzMzMzM7IH0KLWRkIGNvZGUsIC5hbGVydCBjb2RlIHsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgfQotLmFsZXJ0LXdhcm5pbmcgY29kZSwgLmFsZXJ0LXdhcm5pbmcgcHJlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICNDMDk4NTM7IG1hcmdpbi1ib3R0b206IDBweDsgfQotLmFsZXJ0LWVycm9yIGNvZGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgbWFyZ2luLWJvdHRvbTowcHg7IH0KLS5hbGVydC1lcnJvciBwcmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgd29yZC1icmVhazogbm9ybWFsOyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KLS5hbGVydC13YXJuaW5nIHByZSB7IHdvcmQtYnJlYWs6IG5vcm1hbDsgfQotLmFsZXJ0LWluZm8gYSB7IGZvbnQtd2VpZ2h0OiAzMDA7IH0KLS5hbGVydC1pbmZvIGNvZGUgeyBjb2xvcjogIzNBODdBRDsgfQotLnRvb2x0aXAgY29kZSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgYm9yZGVyOiBub25lOyBmb250LXNpemU6IDFlbTsgfQorLyogQ3JlYXRlIGEgY2xhc3MgZm9yIHRoZSBsZWZ0IG5hdmlnYXRpb24gaGVhZGVycyAqLworLm5hdi1oZWFkZXIgeyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogYm9sZDsgbGluZS1oZWlnaHQ6IDIwcHg7IGNvbG9yOiAjOTk5OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBtYXJnaW4tdG9wOiAyMHB4ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDE1cHg7IHBhZGRpbmctbGVmdDogMTVweDsgfQogCi0vKiBTdHlsZSBmb3IgZGVmaW5pdGlvbiBsaXN0cyAqLwotZGQgdWwgeyBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IG1hcmdpbjogMHB4OyB9Ci1kdCwgZGQgIHtsaW5lLWhlaWdodDogMjVweDsgfQotZGQgbGkgeyBsaW5lLWhlaWdodDogMjVweDsgfQotLml0ZW0taW5mbyBkZCB7IGxpbmUtaGVpZ2h0OiAyMHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9CisvKiBJbmNyZWFzZSB0aGUgdGFicyBwYWRkaW5nIGFuZCBtYXJnaW4gaW4gdGhlIHByb2plY3QgcGFnZXMgdG8gZml0IHRoZSBidWlsZCBmb3JtIGFuZCB0aGUgbWFpbiBjb250ZW50ICovCisjcHJvamVjdC10b3BiYXIgLm5hdi10YWJzID4gbGkgPiBhIHsgcGFkZGluZzogMTVweDsgfQorI3Byb2plY3QtdG9wYmFyIHsgbWFyZ2luLWJvdHRvbTogMjBweDsgfQogCi0vKiBTdHlsZSB0aGUgZmlsdGVyIG1vZGFsIGRpYWxvZ3MgKi8KLS5tb2RhbCB7IHdpZHRoOiA4MDBweDsgbWFyZ2luLWxlZnQ6IC00MDBweDsgfQotLm1vZGFsLWZvb3RlciAuYnRuIHsgZmxvYXQ6IGxlZnQ7IH0KLS5tb2RhbC1ib2R5IHsgbWF4LWhlaWdodDogMzAwcHg7IH0KKy8qIFN0eWxlIHRoZSBwcm9qZWN0IG5hbWUgY2hhbmdlIGZvcm0gaW4gdGhlIHByb2plY3QgcGFnZXMgKi8KKyNwcm9qZWN0LW5hbWUtY2hhbmdlLWlucHV0IHsgd2lkdGg6IDIwZW07IH0KIAotLyogSG92ZXIgc3R5bGUgZm9yIHRoZSBjbGVhciBzZWFyY2ggaWNvbiAqLwotLmljb24tcmVtb3ZlLXNpZ246aG92ZXIgeyBjb2xvcjogIzk5OTk5OTsgY3Vyc29yOiBwb2ludGVyOyB9CisvKiBTdHlsZSB0aGUgYnVpbGQgZm9ybSBpbiB0aGUgcHJvamVjdCBwYWdlcyAqLworI3Byb2plY3QtdG9wYmFyIC5pbnB1dC1sZyB7IHdpZHRoOiAxOGVtOyB9CisjcHJvamVjdC10b3BiYXIgZm9ybSAuZ2x5cGhpY29uIHsgdG9wOiAxNXB4OyByaWdodDogNHB4OyB9CisjYnVpbGQtYnV0dG9uIHsgcGFkZGluZzogMTBweCAzMHB4OyB9CiAKLS8qIFNvbWUgZXh0cmEgc3BhY2UgYmVmb3JlIGhlYWRpbmdzIHdoZW4gbmVlZGVkICovCi0uZGV0YWlscyB7IG1hcmdpbi10b3A6IDMwcHg7IH0KLS5haXIgeyBtYXJnaW4tdG9wOiAzMHB4OyB9CisvKiBTdHlsZSB0aGUgZm9ybSBsaW5rcyBpbiB0aGUgcHJvamVjdCBwYWdlIChhbGwgbWFjaGluZXMsIGFsbCBsYXllcnMsIGV0YykgKi8KKy5mb3JtLWxpbmsgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CiAKLS8qIFJlcXVpcmVkIGNsYXNzZXMgZm9yIHRoZSBoaWdobGlnaHQgYmVoYXZpb3VyIGluIHRhYmxlcyAqLwotLmhpZ2hsaWdodCB7IC13ZWJraXQtYW5pbWF0aW9uOiB0YXJnZXQtZmFkZSAxMHMgMTsgLW1vei1hbmltYXRpb246IHRhcmdldC1mYWRlIDEwcyAxOyBhbmltYXRpb246IHRhcmdldC1mYWRlIDEwcyAxOyB9CisvKiBTdHlsZSB0aGUgbW9zdCBidWlsdCByZWNpcGVzIGxpc3QgaW4gdGhlIHByb2plY3QgcGFnZSAqLworI2ZyZXEtYnVpbGQtbGlzdCAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgbWFyZ2luOiAwIDEwcHggMCAwOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CisjZnJlcS1idWlsZC1saXN0LmxlYWQgPiBsaSB7IGxpbmUtaGVpZ2h0OiAyNXB4OyB9CisjZnJlcS1idWlsZC1saXN0IHsgbWFyZ2luLXRvcDogMjBweDsgfQorI2ZyZXEtYnVpbGQtbGlzdCBsYWJlbCB7IHBhZGRpbmctbGVmdDogMDsgfQorI2ZyZXEtYnVpbGQtYnRuIHsgbWFyZ2luLXRvcDogMTBweDsgfQorI25vLW1vc3QtYnVpbHQgeyBtYXJnaW4tdG9wOiAyMHB4OyB9CisKKy8qIFN0eWxlIHRoZSBsYXllcnMgc2VjdGlvbiBpbiB0aGUgcHJvamVjdCBwYWdlIGFuZCB0aGUgbGF5ZXIgZGVwZW5kZW5jaWVzIGluIHRoZSBpbXBvcnQgbGF5ZXIgZm9ybSAqLworI2xheWVyLWNvbnRhaW5lciAuZm9ybS1pbmxpbmUgeyBtYXJnaW4tdG9wOiAyMHB4OyB9CisjbGF5ZXItYWRkLWlucHV0IHsgd2lkdGg6IDE3ZW07IH0KK3VsLmxlYWQgeyBtYXJnaW4tdG9wOiAyMHB4OyB9Cit1bC5sZWFkID4gbGkgeyBsaW5lLWhlaWdodDogMzhweDsgfQordWwubGVhZCAuZ2x5cGhpY29uLXRyYXNoLAordWwubGVhZCAuZ2x5cGhpY29uLXRyYXNoIHsgZm9udC1zaXplOiAxNnB4OyBtYXJnaW4tbGVmdDogN3B4OyB9CisjbGF5ZXJzLWluLXByb2plY3QtbGlzdCAudG9vbHRpcC1pbm5lciAgeyBtYXgtd2lkdGg6IDYwMHB4OyB9Cisjbm8tbGF5ZXJzLWluLXByb2plY3QgeyBtYXJnaW4tdG9wOiAyMHB4OyB9Cisjbm8tbGF5ZXJzLWluLXByb2plY3QgdWwgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisKKy8qIFN0eWxlIHRoZSBsYXllciBpbmZvcm1hdGlvbiBpY29ucyBpbiB0aGUgbGF5ZXIgZGV0YWlscyBwYWdlcyAqLworZGQgLmdseXBoaWNvbi10cmFzaCwKK2RkIC5nbHlwaGljb24tZWRpdCB7IG1hcmdpbi1sZWZ0OiA1cHg7IH0KKworLyogU3R5bGUgdGhlIGZvcm1zIGFuZCBkZWZpbml0aW9uIGxpc3RzIGluIHRoZSBsYXllciBkZXRhaWxzIHBhZ2VzICovCisjY2hhbmdlLXJlcG8tZm9ybSAuZm9ybS1jb250cm9sIHsgd2lkdGg6IDE3ZW07IH0KKyNpbmZvcm1hdGlvbiB7IG1hcmdpbi1ib3R0b206IDVlbTsgfQorI2luZm9ybWF0aW9uIGRkID4gZm9ybSB7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLXRvcDogNXB4OyB9CisjZWRpdC1sYXllci1zb3VyY2UtZm9ybSBmaWVsZHNldCB7IG1hcmdpbi10b3A6IDIwcHg7IH0KKyNkaXJlY3RvcnktaW5mbywKKyNnaXQtcmVwby1pbmZvIHsgbWFyZ2luLXRvcDogMjBweDsgfQorI2xheWVyLWRpci1wYXRoLWluLWRldGFpbHMgeyB3aWR0aDogNTUlOyB9CisuYWRkLWRlcHMgLmZvcm0tY29udHJvbCB7IHdpZHRoOiAxNWVtOyB9CisKKy8qIFN0eWxlIHRoZSBmb3JtcyBhbmQgZGVmaW5pdGlvbiBsaXN0cyBpbiB0aGUgQml0QmFrZSB2YXJpYWJsZXMgcGFnZSAqLworLnZhcmlhYmxlLWxpc3QgeyBtYXJnaW4tYm90dG9tOiAyMHB4OyB9CitkZC52YXJpYWJsZS1saXN0IGZvcm0geyBtYXJnaW4tdG9wOiAxMHB4OyB9CisjbmV3LWRsX2RpciwKKyNmaWx0ZXItaW1hZ2VfZnN0eXBlcywKKyNuZXctaW1hZ2VfaW5zdGFsbCwKKyNuZXctc3N0YXRlX2RpciwKKyNuZXctaW1hZ2Vmc190eXBlcyB7IHdpZHRoOiAyMGVtOyB9CisjcGFja2FnZV9jbGFzc2VzLXNlbGVjdCB7IHdpZHRoOiAxMGVtOyB9Cisuc2Nyb2xsaW5nIHsgYm9yZGVyOiAxcHggc29saWQgI2RkZGRkZDsgaGVpZ2h0OiAxNTRweDsgb3ZlcmZsb3c6IGF1dG87IHBhZGRpbmc6IDAgMTBweDsgd2lkdGg6IDI3LjUlOyBtYXJnaW4tYm90dG9tOiAxMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyB9Cisuc2Nyb2xsaW5nLmhhcy1lcnJvciB7IGJvcmRlci1jb2xvcjogI2E5NDQ0MjsgfQorLmhlbHAtYmxvY2sudGV4dC1kYW5nZXIgeyBjb2xvcjogI2E5NDQ0MjsgfQorLnRvb2x0aXAtaW5uZXIgY29kZSB7IGNvbG9yOiAjZmZmOyB9CisudGV4dC1kYW5nZXIgPiBjb2RlIHsgY29sb3I6ICNhOTQ0NDI7IH0KK2RkLnZhcmlhYmxlLWxpc3QgLmdseXBoaWNvbi1xdWVzdGlvbi1zaWduIHsgZm9udC1zaXplOiAxNHB4OyB9CitkZC52YXJpYWJsZS1saXN0IC5nbHlwaGljb24tZWRpdCB7IGZvbnQtc2l6ZTogMTZweDsgfQorZHQgLmdseXBoaWNvbi10cmFzaCB7IG1hcmdpbi1sZWZ0OiA1cHg7IGZvbnQtc2l6ZTogMTZweDsgfQorI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSAuY2hlY2tib3ggeyBtYXJnaW4tdG9wOiA1cHg7IH0KKyN2YXJpYWJsZS1mb3JtIGg1IHsgbWFyZ2luLXRvcDogMDsgfQorI3ZhcmlhYmxlLWZvcm0gLmNvbC1tZC01IHsgcGFkZGluZy1sZWZ0OiA0NXB4OyB9CisKKy8qIENyZWF0ZSBhIGNsYXNzIGZvciBhZGRpdGlvbmFsIHRvcCBtYXJnaW4gdGhhdCB3ZSBjYW4gdXNlIGluIGhlYWRpbmdzICovCisudG9wLWFpciB7IG1hcmdpbi10b3A6IDQwcHg7IH0KKworLyogQWRkIHNvbWUgYm90dG9tIG1hcmdpbiB0byBvdXIgaDIncyAqLworaDIgeyBtYXJnaW4tYm90dG9tOiAyNXB4OyB9CisKKy8qIFN0eWxlIHRoZSB0eXBlYWhlYWQgKi8KKy50dC1tZW51IHsgbWluLXdpZHRoOiA0MDBweDsgcGFkZGluZy1ib3R0b206IDEwcHg7IH0KKy50dC1zdWdnZXN0aW9uIHsgcGFkZGluZzogNXB4IDEwcHg7IH0KKy50dC1zdWdnZXN0aW9uOmhvdmVyLAorLnR0LXN1Z2dlc3Rpb246YWN0aXZlIHsgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgY3Vyc29yOiBwb2ludGVyOyB9CisKKy8qIFN0eWxlIHRoZSBpbXBvcnQgbGF5ZXIgZm9ybSBjb250cm9scyovCitsZWdlbmQgeyBib3JkZXI6IG5vbmU7IH0KK2ZpZWxkc2V0LmZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUgeyBtYXJnaW4tdG9wOiAyMHB4OyB9CisucmFkaW9MZWdlbmQgeyBtYXJnaW4tYm90dG9tOiAwOyB9CisjbGF5ZXItbmFtZS1jdHJsIHsgbWFyZ2luLXRvcDogMjBweDsgfQorI2ltcG9ydC1sYXllci1uYW1lLAorI2xheWVyLXN1YmRpciB7IHdpZHRoOiAyMCU7IH0KKyNsYXllci1naXQtcmVwby11cmwgeyB3aWR0aDogNDAlOyB9CisjbGF5ZXItZ2l0LXJlZiB7IHdpZHRoOiAzMiU7IH0KKyNsb2NhbC1kaXItcGF0aCB7IHdpZHRoOiA0NSU7IH0KKyNsYXllci1kZXBlbmRlbmN5IHsgd2lkdGg6IDE2ZW07IH0KKyNsYXllci1kZXBzLWxpc3QgeyBtYXJnaW4tdG9wOiAwOyB9CisjZm9ybS1hY3Rpb25zIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfQorI2R1cGxpY2F0ZS1sYXllci1pbmZvIGRsIHsgbWFyZ2luLXRvcDogMTBweDsgfQorI2R1cGxpY2F0ZS1sYXllci1pbmZvIGRkIHsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQorLmhlbHAtaW5saW5lIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbi1sZWZ0OiAxMHB4OyB9CisucmFkaW8taGVscCB7IHdpZHRoOiA1MCU7IG1hcmdpbi1sZWZ0OiAyMHB4OyB9CisjcmVwby1zZWxlY3QgZGl2Om50aC1vZi10eXBlKDIpIHsgbWFyZ2luLXRvcDogMTVweDsgfQorCisvKiBHaXZlIHNvbWUgcGFkZGluZyB0byB0aGUgaW4tY2VsbCB0b29sdGlwcyB3ZSB1c2UgZm9yIG5vdGlmaWNhdGlvbnMgaW4gdGFibGVzICovCit0ZCA+IC50b29sdGlwLWlubmVyLAorLmlubGluZS1ub3RpZmljYXRpb24geyBwYWRkaW5nOiAxMHB4OyB9CisKKy8qIFNldCBzYW5lIHdpZHRocyBmb3IgdGFibGUgY29sdW1ucyAqLworI25ld2N1c3RvbWltYWdlc3RhYmxlIC5nZXRfZGVzY3JpcHRpb25fb3Jfc3VtbWFyeSwKKyNpbWFnZXJlY2lwZXN0YWJsZSAuZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnksCisjc29mdHdhcmVyZWNpcGVzdGFibGUgLmdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5LAorI2xheWVyc3RhYmxlIC5sYXllcl9fc3VtbWFyeSB7IHdpZHRoOiAzMCU7IH0KKyNyZWNpcGVzdGFibGUgLmdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IHsgd2lkdGg6IDQwJTsgfQorI21hY2hpbmVzdGFibGUgLm5hbWUgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CisjbWFjaGluZXN0YWJsZSAuZGVzY3JpcHRpb24geyB3aWR0aDogNDUlOyB9Cisjb3RhYmxlIC52YXJpYWJsZV92YWx1ZSwKKyNvdGFibGUgLmZpbGUgeyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdpZHRoOiAyNSU7IH0KK1tpZF49InZhcmlhYmxlLSJdIC5maWxlIHsgd29yZC1icmVhazogYnJlYWstYWxsOyB9CisKKy8qIEZvciB0aGUgdGFibGVzIHN0aWxsIG5vdCBwb3J0ZWQgdG8gVG9hc3RlclRhYmxlcywgc3R5bGUgdGhlIHRhYmxlIGhlYWRpbmdzCisgKiB0aGF0IGFyZSBub3Qgc29ydGFibGUgKi8KK3RoID4gc3Bhbi50ZXh0LW11dGVkIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQorCisvKiBPdmVycmlkZSB0aGUgcmF0aGVyIHVnbHkgZGVmYXVsdCBjb2RlIHN0eWxlcyAqLworY29kZSB7IGNvbG9yOiAjMzMzOyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorCisvKiBTdHlsZSBvdXIgYnJlYWRjcnVtYnMgKi8KKy5icmVhZGNydW1iID4gbGkgKyBsaTo6YmVmb3JlIHsgY29udGVudDogbm9uZTsgfQorLmJyZWFkY3J1bWIgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgcGFkZGluZy1sZWZ0OiAwOyBwYWRkaW5nLXRvcDogMTVweDsgfQorLmJyZWFkY3J1bWIgLmRpdmlkZXIgeyBjb2xvcjogIzc3NzsgbWFyZ2luOiAwIDVweDsgfQorCisvKiBSZWR1Y2UgdG9wIG1hcmdpbiBmb3IgdGhlIHBhZ2UtaGVhZGVyIGNsYXNzICovCisucGFnZS1oZWFkZXIgeyBtYXJnaW4tdG9wOiAzMHB4OyB9CisKKy8qIFNldCBzb21lIHNwYWNlIGFyb3VuZCB0aGUgbGF5ZXIgYnV0dG9uIGluIHRoZSBsYXllciBkZXRhaWxzIHBhZ2VzICovCisudGFiLWNvbnRlbnQgeyBtYXJnaW4tdG9wOiAyMHB4OyB9CisudGFiLXBhbmUgeyBtYXJnaW4tdG9wOiAyMHB4OyB9CisKKy8qIFN0eWxlIHRoZSBuZXcgd2luZG93IGljb25zICovCisuZ2x5cGhpY29uLW5ldy13aW5kb3c6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKy5kbC1ob3Jpem9udGFsID4gZGQgPiAuZ2x5cGhpY29uLW5ldy13aW5kb3cgeyBtYXJnaW4tbGVmdDogNXB4OyB9CisKKy8qIFN0eWxlIHRoZSBzcGVjaWFsIG5vIHJlc3VsdHMgbWVzc2FnZSBpbiB0aGUgY3VzdG9tIGltYWdlIGRldGFpbHMgcGFnZSAqLworW2lkXj0ibm8tcmVzdWx0cy1zcGVjaWFsLSJdID4gLmFsZXJ0LXdhcm5pbmcgPiBvbCB7IG1hcmdpbi10b3A6IDEwcHg7IH0KKworLyogc3R5bGUgdGhlIGxvYWRpbmcgc3Bpbm5lciBpbiB0aGUgbmV3IGN1c3RvbSBpbWFnZSBkaWFsb2cgKi8KKyNjcmVhdGUtbmV3LWN1c3RvbS1pbWFnZS1idG4gW2RhdGEtcm9sZT0ibG9hZGluZy1zdGF0ZSJdIHsKKyAgcGFkZGluZy1sZWZ0OiAxNnB4OworfQorCisvKiBpY29uIGhhcyB0byBiZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG90aGVyd2lzZSB0aGUgc3BpbiBhbmltYXRpb24gZG9lc24ndCB3b3JrICovCisjY3JlYXRlLW5ldy1jdXN0b20taW1hZ2UtYnRuIFtkYXRhLXJvbGU9ImxvYWRpbmctc3RhdGUiXSAuaWNvbi1zcGlubmVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAyNnB4OworICBib3R0b206IDI2cHg7Cit9CisKKy8qIFN0eWxlIHRoZSBjb250ZW50IG9mIG1vZGFsIGRpYWxvZ3MgKi8KKy5tb2RhbC1mb290ZXIgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9CisuZGF0ZS1maWx0ZXItY29udHJvbHMgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisuZGF0ZS1maWx0ZXItY29udHJvbHMgc3BhbiB7IG1hcmdpbjogMCAxMHB4OyB9CisKKy8qIFN0eWxlIHRoZSBmaXhlZCBwb3NpdGlvbmVkIG5vdGlmaWNhdGlvbnMgKi8KKyNsb2FkaW5nLW5vdGlmaWNhdGlvbiB7IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogMTEwMTsgdG9wOiAzJTsgbGVmdDogNDAlOyByaWdodDogNDAlOyAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7IC1tb3otYm94LXNoYWRvdzogMCAwIDEwcHggI2MwOTg1MzsgYm94LXNoYWRvdzogMCAwIDEwcHggI2MwOTg1MzsgfQorCisuY2hhbmdlLW5vdGlmaWNhdGlvbiB7IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogMTEwMTsgdG9wOiA0JTsgbGVmdDogMzAlOyByaWdodDogMzAlOyAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7IC1tb3otYm94LXNoYWRvdzogMCAwIDEwcHggIzNhODdhZDsgYm94LXNoYWRvdzogMCAwIDEwcHggIzNhODdhZDsgfQorCisuYWxlcnQtc3VjY2Vzcy5jaGFuZ2Utbm90aWZpY2F0aW9uIHsgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjM2M3NjNkOyAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYzc2M2Q7IGJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYzc2M2Q7IH0KKworLyogU3R5bGUgdGhlIG5ldyBwcm9qZWN0IGZvcm0gKi8KKyNuZXctcHJvamVjdC1uYW1lIHsgd2lkdGg6IDMzJTsgfQorI3Byb2plY3R2ZXJzaW9uIHsgd2lkdGg6IDIwJTsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQorCisvKiBTdHlsZSB0aGUgVG9hc3RlciBzY3JlZW5zaG90IGluIHRoZSBsYW5kaW5nIHBhZ2UgKi8KKy5pbWctdGh1bWJuYWlsIHsgcGFkZGluZzogMDsgfQorCisvKiBTZXQgdGhlIGxheW91dCBmb3IgdGhlIGJ1aWxkIGluZm9ybWF0aW9uIHBhZ2VzICovCisKKyNuYXYgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisucGFnZS1oZWFkZXIuYnVpbGQtZGF0YSB7IG1hcmdpbi10b3A6IDBweDsgfQorLmJ1aWxkLWRhdGEgPiBoMSB7IG1hcmdpbi10b3A6IDhweDsgfQorCisvKiBTdHlsZSB0aGUgYnVpbGQgb3V0Y29tZSBpbmZvcm1hdGlvbiBpbiB0aGUgYnVpbGQgZGFzaGJvYXJkICovCisubG9nIHsgbWFyZ2luLWxlZnQ6IDMwcHg7IH0KKy5zaG93LXdhcm5pbmdzIHsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICM4YTZkM2I7IH0KKy5zaG93LXdhcm5pbmdzOmhvdmVyIHsgY29sb3I6ICM2NjUxMmM7IH0KKworLyogU3R5bGUgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgaW5mb3JtYXRpb24gaW4gdGhlIGJ1aWxkIGRhc2hib2FyZCAqLworI2Vycm9ycyAucGFuZWwtaGVhZGluZyB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBjb2xvcjogIzg0MzUzNDsgfQorI3dhcm5pbmdzIC5wYW5lbC1oZWFkaW5nIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGNvbG9yOiAjOGE2ZDNiOyB9Cisjd2FybmluZ3MgLnBhbmVsLWhlYWRpbmcgYTpob3ZlciB7IGNvbG9yOiAjNjY1MTJjOyB9CitoMi5wYW5lbC10aXRsZSB7IGZvbnQtc2l6ZTogMzBweDsgfQorLmFsZXJ0LWRhbmdlciBwcmUsCisuYWxlcnQtd2FybmluZyBwcmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyB9CisuYWxlcnQtZGFuZ2VyIHByZSB7IGNvbG9yOiAjYTk0NDQyOyB9CisjZXJyb3ItaW5mbyBwcmUsCisjd2FybmluZy1pbmZvIHByZSB7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgfQorLmFsZXJ0LXdhcm5pbmcgcHJlIHsgY29sb3I6ICM4YTZkM2I7IH0KKworLyogU3R5bGUgdGhlIHdlbGxzIGluIHRoZSBidWlsZCBkYXNoYm9hcmQgKi8KKy5kYXNoYm9hcmQtc2VjdGlvbiBoMyB7IG1hcmdpbi10b3A6IDEwcHg7IG1hcmdpbi1ib3R0b206IDIwcHg7IH0KKy5jb2wtbWQtNC5kYXNoYm9hcmQtc2VjdGlvbiBkZCB7IG1hcmdpbi1ib3R0b206IDEwcHg7IH0KKworLyogTWFrZSB0aGUgaGVscCBpbiB0YWJsZXMgaW5zaXZpc2JsZSB1bnRpbCB5b3UgaG92ZXIgb3ZlciB0aGUgcmlnaHQgY2VsbCAqLworLmhvdmVyLWhlbHAgeyB2aXNpYmlsaXR5OiBoaWRkZW47IH0KKworI2FkZC1yZW1vdmUtbGF5ZXItYnRuIHsgbWFyZ2luLWJvdHRvbTogMjBweDsgfQorCisvKiBCbHVlIGhpZ2h0bGlnaHQgYW5pbWF0aW9uIGZvciB0YXNrcyBhbmQgZGlyZWN0b3J5IHN0cnVjdHVyZSB0YWJsZXMgKi8KKy5oaWdobGlnaHQgeyAtd2Via2l0LWFuaW1hdGlvbjogdGFyZ2V0LWZhZGUgMTVzIDE7IC1tb3otYW5pbWF0aW9uOiB0YXJnZXQtZmFkZSAxNXMgMTsgYW5pbWF0aW9uOiB0YXJnZXQtZmFkZSAxNXMgMTsgfQogQC13ZWJraXQta2V5ZnJhbWVzIHRhcmdldC1mYWRlIHsgMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDI1JSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMTAwJSB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9IH0KIEAtbW96LWtleWZyYW1lcyB0YXJnZXQtZmFkZSB7IDAlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAyNSUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfSB9CiBAa2V5ZnJhbWVzIHRhcmdldC1mYWRlIHsgMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDI1JSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMTAwJSB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9IH0KIAotLyogVGhpcyBtYWtlcyB0b29sdGlwcyB3b3JrIGluc2lkZSBtb2RhbCBkaWFsb2dzICovCi0udG9vbHRpcCB7IHotaW5kZXg6IDIwMDAgIWltcG9ydGFudDsgfQotCi0vKiBPdmVycmlkZSBkZWZhdWx0IFR3aXR0ZXIgQm9vc3RyYXAgc3R5bGVzIGZvciBhbmNob3IgdGFncyBpbnNpZGUgdGFibGVzICovCi10ZCBhLCB0ZCBhID4gY29kZSB7IGNvbG9yOiAjMzMzMzMzOyB9Ci10ZCBjb2RlIHsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfQotdGQgYTpob3ZlciwgdGQgYSA+IGNvZGU6aG92ZXIgeyBjb2xvcjogIzAwMDAwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KLQotLyogT3ZlcnJpZGUgZGVmYXVsdCBUd2l0dGVyIEJvb3RzdHJhcCBzdHlsZXMgZm9yIHRyLmVycm9yICovCi0udGFibGUgdGJvZHkgdHIuZXJyb3IgPiB0ZCB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IC8qIG92ZXJyaWRlIGRlZmF1bHQgQm9vdHN0cmFwIGJlaGF2aW91ciAqLwotLnRhYmxlLWhvdmVyIHRib2R5IHRyLmVycm9yOmhvdmVyID4gdGQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O30gLyogb3ZlcnJpZGUgZGVmYXVsdCBCb290c3RyYXAgYmVoYXZpb3VyICovCi0KLS8qIFJpZ2h0IGp1c3RpZnkgQm9vdHN0cmFwIHRhYmxlIGNvbHVtbnMgZm9yIHNpemUgZmllbGRzICovCi0udGFibGUgLnNpemVjb2wgeyB0ZXh0LWFsaWduOiByaWdodDsgfQotCi0vKiBTZXQgZXJyb3IsIHdhcm5pbmcsIHN1Y2Nlc3MgYW5kIG11dGVkIHN0eWxlcyAqLwotLmVycm9yLCAucmVkLCB0ZC5lcnJvciBhLCB0ci5lcnJvciBhIHsgY29sb3I6ICNiOTRhNDg7IH0KLWEuZXJyb3I6aG92ZXIsIGEuZXJyb3I6Zm9jdXMsIHRyLmVycm9yIGE6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KLS53YXJuaW5nLCAueWVsbG93IHsgY29sb3I6ICNjMDk4NTM7fQotYS53YXJuaW5nIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLWEud2FybmluZzpob3ZlciwgYS53YXJuaW5nOmZvY3VzIHsgY29sb3I6ICNCMzg5NDI7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Ci0uc3VjY2VzcywgLmdyZWVuIHsgY29sb3I6ICM0Njg4NDc7fQotLnN1Y2Nlc3M6aG92ZXIgeyBjb2xvcjogIzM0NzEzMjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KLXRkID4gLnN1Y2Nlc3M6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQotLm11dGVkIGEgeyBjb2xvcjojOTk5OTk5OyB9Ci0ubXV0ZWQgYTpob3ZlciB7IGNvbG9yOiM5OTk5OTk7IH0KLQotLyogU29ydGluZyBmdW5jdGlvbmFsaXR5IHN0eWxlcyBmb3IgdGFibGUgaGVhZGluZ3MgKi8KLS5zb3J0ZWQgeyBjb2xvcjogIzMzMzMzMzsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS5zb3J0ZWQ6aG92ZXIgeyBjb2xvcjogIzAwMDAwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KLXRoID4gYSwgdGggPiBzcGFuIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQotCi0vKiBGb3JjZSBsb25nIHN0cmluZ3MgbGlrZSBjb21taXQgaGFzaGVzIHRvIHdyYXAgKi8KLS5pc2NvbW1pdCB7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgd29yZC1icmVhazogYnJlYWstYWxsOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7fQotCi0vKiBNYWtlIHRoZSBwb3BvdmVycyBzY3JvbGxhYmxlIGlmIHRoZXkgYXJlIHRvbyBsb25nICovCi0ucG9wb3Zlci1jb250ZW50IHsgbWF4LWhlaWdodDogMzBlbTsgb3ZlcmZsb3cteTogc2Nyb2xsOyB9Ci0KLS8qIFN0eWxlcyBmb3IgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGFibGUuIFdlJ2xsIHByb2JhYmx5IHdvbid0IHVzZSB0aG9zZSBpbiBwcm9kdWN0aW9uICovCi0ub25lIHsgcGFkZGluZy1sZWZ0OiAxOHB4ICFpbXBvcnRhbnQ7IH0KLS50d28geyBwYWRkaW5nLWxlZnQ6IDM2cHggIWltcG9ydGFudDsgfQotLnRocmVlIHsgcGFkZGluZy1sZWZ0OiA1NHB4ICFpbXBvcnRhbnQ7IH0KLS5jb250ZW50LWRpcmVjdG9yeSBhIHsgY29sb3I6ICMwMDg4Q0M7IH0KLS5jb250ZW50LWRpcmVjdG9yeSBhOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Ci0uc3ltbGluayB7IGNvbG9yOiAjQ0NDQ0NDOyB9Ci0KLS8qIFN0eWxlcyBmb3IgdGhlIG5hdmJhciBhY3Rpb25zICovCi0uYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7IG1hcmdpbi1yaWdodDogMTBweDsgfQotLm5hdmJhci1pbm5lciA+IC5idG4tZ3JvdXAgeyBtYXJnaW4tdG9wOiA2cHg7IH0KLVtpZF49InNlYXJjaC1pbnB1dC0iXSwgI3NlYXJjaCB7IHdpZHRoOiA4MCU7IH0KLQotLyogU3R5bGVzIGZvciB0aGUgcGFyZW50IGl0ZW0gaW4gdGhlIGxlZnQgbmF2aWdhdGlvbiAqLwotCi0ubmF2ID4gbGkgPiBhLm5hdi1wYXJlbnQgeyBmb250LXNpemU6IDE4cHg7IGxpbmUtaGVpZ2h0OiAyNXB4OyAgfQotCi0vKiBPdGhlciBzdHlsZXMgKi8KLS5kcm9wZG93bi1tZW51IHsgcGFkZGluZzogMTBweDsgfQotc2VsZWN0IHsgd2lkdGg6IGF1dG87IH0KLS5wYWdlLWhlYWRlciB7IGNvbG9yOiAjNUE1QTVBOyB9Ci0udG9wLWFpciB7IG1hcmdpbi10b3A6IDQwcHg7fQotLnByb2dyZXNzIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Ci0ubGVhZCAuYmFkZ2UgeyBmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGJvcmRlci1yYWRpdXM6IDE1cHg7IHBhZGRpbmc6IDlweDsgfQotLmxlYWQgb2wsIC5sZWFkIHVsIHsgcGFkZGluZzogMTBweCAwIDAgMjBweDsgfQotLmxlYWQgb2wgPiBsaSwgLmxlYWQgdWwgPiBsaSB7Ci0gICAgbGluZS1oZWlnaHQ6IDM1cHg7Ci19Ci0ud2VsbCA+IC5sZWFkLCAuYWxlcnQgLmxlYWQgeyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KLS53ZWxsLXRyYW5zcGFyZW50IHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLS5uby1yZXN1bHRzIHsgbWFyZ2luOiAxMHB4IDA7IH0KLS50YXNrLW5hbWUgeyBtYXJnaW4tbGVmdDogN3B4OyB9Ci0uaWNvbi1oYW5kLXJpZ2h0IHtjb2xvcjogI0NDQ0NDQzsgfQotLmhlbHAtaW5saW5lIHsgbWFyZ2luOiA1cHg7IH0KLS5kYXNoYm9hcmQtc2VjdGlvbiB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9Ci0KLS8qIHN0eWxlcyBmb3IgbGFuZGluZyBwYWdlIC0gYW5hbHlzaXMgbW9kZSAqLwotLmhlcm8tdW5pdCB7IG1hcmdpbjogMjBweCAwIDMwcHg7IH0KLS5oZXJvLXVuaXQgPiAuY2xvc2UgeyBmb250LXNpemU6NDBweDsgfQotLmhlcm8tYWN0aW9ucyB7IG1hcmdpbi10b3A6IDMwcHg7IH0KLQotLyogc3R5bGVzIGZvciBsYW5kaW5nIHBhZ2UgLSBidWlsZCBtb2RlICovCi0uaGVyby11bml0IHAgeyBsaW5lLWhlaWdodDogMjVweDsgfQotLmhlcm8tdW5pdCBwLCAuaGVyby11bml0IC5idG4tbGFyZ2UgeyBtYXJnaW4tdG9wOiAxNXB4OyB9Ci0uaGVyby11bml0IHVsIHsgbWFyZ2luLXRvcDogMjBweDsgfQotLmhlcm8tdW5pdCBsaSB7IGxpbmUtaGVpZ2h0OiAzMHB4OyB9Ci0uaGVyby11bml0IGltZyB7IGJhY2tncm91bmQtY29sb3I6ICNlZWU7IG1hcmdpbi10b3A6IDE1cHg7IH0KLQotLyogbWFrZSB0YWJsZXMgQ2hyb21lLWhhcHB5IChtZSwgbm90IHNvIG11Y2gpICovCi10YWJsZSB7IHRhYmxlLWxheW91dDogZml4ZWQ7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgfQotCi10YWJsZSBwIHsgbWFyZ2luLWJvdHRvbTogMCB9Ci0udGFibGUgdGQgeyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9Ci0KLS8qIHN0eWxlcyBmb3IgdGhlIG5ldyBidWlsZCBidXR0b24gKi8KLS5uZXctYnVpbGQgLmJ0bi1wcmltYXJ5IHsgcGFkZGluZzogNHB4IDMwcHg7IH0KLS5uZXctYnVpbGQgLmFsZXJ0IHsgbWFyZ2luLXRvcDogMTBweDsgfQotLm5ldy1idWlsZCAuYWxlcnQgcCB7IG1hcmdpbi10b3A6IDEwcHg7IH0KLQotLyogc3R5bGVzIGZvciBzaG93aW5nIHRoZSBwcm9qZWN0IG5hbWUgaW4gYnVpbGQgbW9kZSAqLwotLnByb2plY3QtbmFtZSB7IHBhZGRpbmctdG9wOiAwOyB9Ci0ucHJvamVjdC1uYW1lIC5sYWJlbCB7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IC0xNXB4OyBwYWRkaW5nOiA1cHg7IH0KLS5wcm9qZWN0LW5hbWUgLmxhYmVsID4gYSB7IGNvbG9yOiAjZmZmOyBmb250LXdlaWdodDogbm9ybWFsOyB9Ci0KLS8qIHN0eWxlcyBmb3Igc2hvd2luZyBoZWxwIGljb25zIG5leHQgdG8gY29tbWFuZC1saW5lIGJ1aWxkcyAqLwotLmJ1aWxkLXJlc3VsdCAuZ2V0LWhlbHAtZ3JlZW4sIC5idWlsZC1yZXN1bHQgLmdldC1oZWxwLXJlZCwgLmJ1aWxkLXJlc3VsdCAuZ2V0LWhlbHAtYmx1ZSB7IG1hcmdpbi1yaWdodDogMzVweDsgbWFyZ2luLXRvcDogOHB4OyBmb250LXNpemU6IDE2cHg7IH0KLQotLyogUmVtb3ZlIGJvdHRvbSBtYXJnaW4gZm9yIGZvcm1zIGluc2lkZSBtb2RhbCBkaWFsb2dzICovCi0jZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0geyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KLQotLyogQ3VzdG9tIGNvbHVtbiB3aWR0aHMgKi8KLS5uYXJyb3ctY29sIHsgd2lkdGg6IDglOyB9Ci0ubWVkaXVtLWNvbCB7IHdpZHRoOiAxMiU7IH0KLQotLyogQ29uZmlndXJhdGlvbiBzdHlsZXMgKi8KLS5pY29uLXRyYXNoIHsgY29sb3I6ICNCOTRBNDg7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZy1sZWZ0OiA1cHg7IH0KLS5pY29uLXRyYXNoOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9Ci0uaWNvbi1wZW5jaWwsIC5pY29uLWRvd25sb2FkLWFsdCwgLmljb24tcmVmcmVzaCwgLmljb24tc3Rhci1lbXB0eSwgLmljb24tc3RhciAgeyBmb250LXNpemU6IDE2cHg7IGNvbG9yOiAjMDA4OENDOyBwYWRkaW5nLWxlZnQ6IDJweDsgfQotLmljb24tcGVuY2lsOmhvdmVyLCAuaWNvbi1kb3dubG9hZC1hbHQ6aG92ZXIsIC5pY29uLXJlZnJlc2g6aG92ZXIsIC5pY29uLXN0YXItZW1wdHk6aG92ZXIsIC5pY29uLXN0YXI6aG92ZXIsIC5pY29uLXRhc2tzOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9Ci0uaWNvbi1zaGFyZSB7IHBhZGRpbmctbGVmdDogMnB4OyB9Ci0uYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrcyB7IGNvbG9yOiAjNDY4ODQ3OyB9Ci0uYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrczpob3ZlciB7IGNvbG9yOiAjMzQ3MTMyOyB9Ci0uYWxlcnQtZXJyb3IgLmljb24tcmVmcmVzaCwgLmFsZXJ0LWVycm9yIC5pY29uLXRhc2tzIHsgY29sb3I6ICNiOTRhNDg7IH0KLS5hbGVydC1lcnJvciAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtZXJyb3IgLmljb24tdGFza3M6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgfQotLmNvbmZpZ3VyYXRpb24tbGlzdCBsaSwgLmNvbmZpZ3VyYXRpb24tbGlzdCBsYWJlbCB7IGxpbmUtaGVpZ2h0OiAzNXB4OyBmb250LXNpemU6IDIxcHg7IGZvbnQtd2VpZ2h0OiAyMDA7IG1hcmdpbi1ib3R0b206IDBweDt9Ci0uY29uZmlndXJhdGlvbi1saXN0IHsgZm9udC1zaXplOiAxNnB4OyBtYXJnaW4tYm90dG9tOiAxLjVlbTsgfQotLmNvbmZpZ3VyYXRpb24tbGlzdCBpIHsgZm9udC1zaXplOiAxNnB4OyB9Ci0vKi5jb25maWd1cmF0aW9uLWxheWVycyB7IGhlaWdodDogMTM1cHg7IG92ZXJmbG93OiBzY3JvbGw7IH0qLwotLmNvdW50ZXIgeyBmb250LXdlaWdodDogbm9ybWFsOyB9Ci0ud2VsbC1hbGVydCB7IGJhY2tncm91bmQtY29sb3I6ICNGQ0Y4RTM7IGJvcmRlcjogMXB4IHNvbGlkICNGQkVFRDU7IGJvcmRlci1yYWRpdXM6IDRweDsgfQotLndlbGwtYWxlcnQgPiAubGVhZCB7IGNvbG9yOiAjQzA5ODUzOyBwYWRkaW5nLWJvdHRvbTogLjc1ZW07IH0KLS5jb25maWd1cmF0aW9uLWFsZXJ0IHsgbWFyZ2luLWJvdHRvbTogMHB4OyBwYWRkaW5nOiA4cHggMTRweDsgfQotLmNvbmZpZ3VyYXRpb24tYWxlcnQgcCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQotLnByb2plY3QtZm9ybSB7IG1hcmdpbi10b3A6IDEwcHg7IH0KLS5hZGQtbGF5ZXJzIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrLCAuYnVpbGQgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sgeyBtYXJnaW4tdG9wOiAwcHg7IH0KLWlucHV0Lmh1Z2UgeyBmb250LXNpemU6IDE3LjVweDsgcGFkZGluZzogMTFweDsgbWluLXdpZHRoOiA2MCU7IH0KLS5idWlsZC1mb3JtIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Ci0uYnVpbGQtZm9ybSAuaW5wdXQtYXBwZW5kIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Ci0uYnVpbGQtZm9ybSAuYnRuLWxhcmdlIHsgcGFkZGluZzogMTFweCAzNXB4OyB9Ci0uYnVpbGQtZm9ybSBwIHsgZm9udC1zaXplOjE3LjVweCA7bWFyZ2luOjEycHggMCAwIDEwcHg7fQotI2xheWVyLWNvbnRhaW5lciBmb3JtLCAjdGFyZ2V0LWNvbnRhaW5lciBmb3JtIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Ci0uYnRuLXByaW1hcnkgLmljb24tcXVlc3Rpb24tc2lnbiwgLmJ0bi1kYW5nZXIgLmljb24tcXVlc3Rpb24tc2lnbiB7IGNvbG9yOiAjZmZmOyB9Ci0uYnRuLXByaW1hcnkgLmljb24tcXVlc3Rpb24tc2lnbjpob3ZlciwgLmJ0bi1kYW5nZXIgLmljb24tcXVlc3Rpb24tc2lnbjpob3ZlciB7IGNvbG9yOiAjOTk5OyB9Ci1hIGNvZGUgeyBjb2xvcjogIzAwODhDQzsgfQotYSBjb2RlOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IH0KLS5sb2NhbGNvbmYgeyBmb250LXNpemU6IDE3LjVweDsgbWFyZ2luLXRvcDogNDBweDsgfQotLmxvY2FsY29uZiBjb2RlIHsgZm9udC1zaXplOiAxNy41cHg7IH0KLSNhZGQtbGF5ZXItZGVwZW5kZW5jaWVzIHsgIG1hcmdpbi10b3A6IDVweDsgfQotLmxpbmstYWN0aW9uIHsgZm9udC1zaXplOiAxNy41cHg7IG1hcmdpbi10b3A6IDQwcHg7IH0KLS5saW5rLWFjdGlvbiBjb2RlIHsgZm9udC1zaXplOiAxNy41cHg7IH0KLS5hcnRpZmFjdCB7IHdpZHRoOiA5ZW07IH0KLS5jb250cm9sLWdyb3VwIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Ci0jcHJvamVjdC1kZXRhaWxzIGZvcm0geyBtYXJnaW46IDBweDsgfQotZGQgZm9ybSB7IG1hcmdpbjogMTBweCAwIDAgMDsgfQotZGwgdGV4dGFyZWEgeyByZXNpemU6IHZlcnRpY2FsOyB9Ci0ubmF2YmFyLWZpeGVkLXRvcCB7ICB6LWluZGV4OiAxOyB9Ci0ucG9wb3ZlciB7IHotaW5kZXg6IDI7IH0KLS5idG4tZGFuZ2VyIC5pY29uLXRyYXNoIHsgY29sb3I6ICNmZmY7IH0KLS5iYmFwcGVuZHMgeyBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IG1hcmdpbi1sZWZ0OiAwOyB9Ci0uYmJhcHBlbmRzIGxpIHsgbGluZS1oZWlnaHQ6IDI1cHg7IH0KLS5jb25maWd1cmF0aW9uLWxpc3QgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7IG1hcmdpbi10b3A6MTNweDttYXJnaW4tcmlnaHQ6MTBweDsgfQotLmFsZXJ0IGlucHV0W3R5cGU9ImNoZWNrYm94Il0geyBtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1yaWdodDogM3B4OyB9Ci0uYWxlcnQgb2wgeyBwYWRkaW5nOiAxMHB4IDBweCAwcHggMjBweDsgfQotLmFsZXJ0IG9sID4gbGkgeyBsaW5lLWhlaWdodDogMzVweDsgfQotLmRsLXZlcnRpY2FsIGZvcm0geyBtYXJnaW4tdG9wOiAxMHB4OyB9Ci0uc2Nyb2xsaW5nIHsgYm9yZGVyOiAxcHggc29saWQgI2RkZGRkZDsgaGVpZ2h0OiAxNTRweDsgb3ZlcmZsb3c6IGF1dG87IHBhZGRpbmc6IDhweDsgd2lkdGg6IDI3LjUlOyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9Ci0ubGVhZCAuaGVscC1ibG9jayB7IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDIwcHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0KLS5idXR0b24tcGxhY2UgIC5idG4geyBtYXJnaW46IDAgMCAyMHB4IDA7IH0KLS50b29sdGlwLWlubmVyIHsgbWF4LXdpZHRoOiAyNTBweDsgfQotLm5ldy1idWlsZCB7IHBhZGRpbmc6IDIwcHg7IH0KLS5uZXctYnVpbGQgbGkgeyBsaW5lLWhlaWdodDogMzBweDsgfQotLm5ldy1idWlsZCBsaSAuYWxlcnQgeyBsaW5lLWhlaWdodDogMjBweDsgd2lkdGg6IDIwMHB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB9Ci0ubmV3LWJ1aWxkIGg2IHsgbWFyZ2luOiAxMHB4IDAgMCAwOyBjb2xvcjogIzVhNWE1YTsgfQotLm5ldy1idWlsZCBoMyB7IG1hcmdpbjogMDsgY29sb3I6ICM1YTVhNWE7IH0KLS5uZXctYnVpbGQgZm9ybSB7IG1hcmdpbjogNXB4IDAgMDsgfQotLm5ldy1idWlsZCAuaW5wdXQtYXBwZW5kIHsgbWFyZ2luLWJvdHRvbTogMDsgfQotI2J1aWxkLXNlbGVjdGVkIHsgbWFyZ2luLXRvcDogMTVweDsgfQotZGl2LmFkZC1kZXBzIHsgbWFyZ2luLXRvcDogMTVweDsgfQotLmJ0bi5sb2cgeyBtYXJnaW4tbGVmdDogMjBweDsgfQotCi0KLS5hbmltYXRlLXJlcGVhdCB7Ci0gIGxpc3Qtc3R5bGU6bm9uZTsKLSAgYm94LXNpemluZzpib3JkZXItYm94OwotfQotCi0uYW5pbWF0ZS1yZXBlYXQubmctbW92ZSwKLS5hbmltYXRlLXJlcGVhdC5uZy1lbnRlciwKLS5hbmltYXRlLXJlcGVhdC5uZy1sZWF2ZSB7Ci0gIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7Ci0gIHRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzOwotfQotCi0uYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUubmctbGVhdmUtYWN0aXZlLAotLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUsCi0uYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIgewotICBvcGFjaXR5OjA7Ci19Ci0KLS5hbmltYXRlLXJlcGVhdC5uZy1sZWF2ZSwKLS5hbmltYXRlLXJlcGVhdC5uZy1lbnRlci5uZy1lbnRlci1hY3RpdmUgewotICBvcGFjaXR5OjE7Ci19Ci0KLS50YWItcGFuZSB0YWJsZSB7IG1hcmdpbi10b3A6IDEwcHg7IH0KLQotdGhlYWQgLmRlc2NyaXB0aW9uLCAuZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnkgeyB3aWR0aDogMzY0cHg7IH0KLXRoZWFkIC5hZGQtZGVsLWxheWVycyB7IHdpZHRoOiAxMjRweDsgfQotCi0jbG9hZGluZy1ub3RpZmljYXRpb24gewotICBwb3NpdGlvbjogZml4ZWQ7Ci0gIHotaW5kZXg6IDEwMTsKLSAgdG9wOiAzJTsKLSAgbGVmdDogNDAlOwotICByaWdodDogNDAlOwotICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7Ci0gIC1tb3otYm94LXNoYWRvdzogMCAwIDEwcHggI2MwOTg1MzsKLSAgYm94LXNoYWRvdzogMCAwIDEwcHggI2MwOTg1MzsKLX0KLQotI2NoYW5nZS1ub3RpZmljYXRpb24gewotICBwb3NpdGlvbjogZml4ZWQ7Ci0gIHotaW5kZXg6IDEwMTsKLSAgdG9wOiAzJTsKLSAgbGVmdDogMjAlOwotICByaWdodDogMjAlOwotICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7Ci0gIC1tb3otYm94LXNoYWRvdzogMCAwIDEwcHggIzNhODdhZDsKLSAgYm94LXNoYWRvdzogMCAwIDEwcHggIzNhODdhZDsKLX0KLQogLyogQ29waWVkIGluIGZyb20gbmV3ZXIgdmVyc2lvbiBvZiBGb250LUF3ZXNvbWUgNC4zLjAgKi8KIC5mYS1zcGluIHsKICAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyOwpAQCAtMzMwLDE0ICszNjgsMyBAQAogICB9CiB9CiAvKiBFbmQgY29waWVkIGluIGZyb20gbmV3ZXIgdmVyc2lvbiBvZiBGb250LUF3ZXNvbWUgNC4zLjAgKi8KLQotLnRvcC1wYWRkZWQgewotICBwYWRkaW5nLXRvcDogNjBweDsKLX0KLQotaW5wdXQuaW5wdXQtbGcgewotICBmb250LXNpemU6IDE4cHg7Ci0gIGhlaWdodDogMjJweDsKLSAgbGluZS1oZWlnaHQ6IDEuMzMzMzM7Ci0gIHBhZGRpbmc6IDEwcHggMTZweDsKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3QKaW5kZXggNDIzYmQ1ZC4uYjkzYTQ5NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZwppbmRleCA0NDY5NDg4Li45NGZiNTQ5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZwpAQCAtNiwyMjQgKzYsMjgzIEBACiA8Zm9udCBpZD0iZ2x5cGhpY29uc19oYWxmbGluZ3NyZWd1bGFyIiBob3Jpei1hZHYteD0iMTIwMCIgPgogPGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEyMDAiIGFzY2VudD0iOTYwIiBkZXNjZW50PSItMjQwIiAvPgogPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KLTxnbHlwaCAvPgotPGdseXBoIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZDsiIC8+Cis8Z2x5cGggaG9yaXotYWR2LXg9IjAiIC8+Cis8Z2x5cGggaG9yaXotYWR2LXg9IjQwMCIgLz4KIDxnbHlwaCB1bmljb2RlPSIgIiAvPgotPGdseXBoIHVuaWNvZGU9IioiIGQ9Ik0xMDAgNTAwdjIwMGgyNTlsLTE4MyAxODNsMTQxIDE0MWwxODMgLTE4M3YyNTloMjAwdi0yNTlsMTgzIDE4M2wxNDEgLTE0MWwtMTgzIC0xODNoMjU5di0yMDBoLTI1OWwxODMgLTE4M2wtMTQxIC0xNDFsLTE4MyAxODN2LTI1OWgtMjAwdjI1OWwtMTgzIC0xODNsLTE0MSAxNDFsMTgzIDE4M2gtMjU5eiIgLz4KLTxnbHlwaCB1bmljb2RlPSIrIiBkPSJNMCA0MDB2MzAwaDQwMHY0MDBoMzAwdi00MDBoNDAwdi0zMDBoLTQwMHYtNDAwaC0zMDB2NDAwaC00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IioiIGQ9Ik02MDAgMTEwMHExNSAwIDM0IC0xLjV0MzAgLTMuNWwxMSAtMXExMCAtMiAxNy41IC0xMC41dDcuNSAtMTguNXYtMjI0bDE1OCAxNThxNyA3IDE4IDh0MTkgLTZsMTA2IC0xMDZxNyAtOCA2IC0xOXQtOCAtMThsLTE1OCAtMTU4aDIyNHExMCAwIDE4LjUgLTcuNXQxMC41IC0xNy41cTYgLTQxIDYgLTc1cTAgLTE1IC0xLjUgLTM0dC0zLjUgLTMwbC0xIC0xMXEtMiAtMTAgLTEwLjUgLTE3LjV0LTE4LjUgLTcuNWgtMjI0bDE1OCAtMTU4IHE3IC03IDggLTE4dC02IC0xOWwtMTA2IC0xMDZxLTggLTcgLTE5IC02dC0xOCA4bC0xNTggMTU4di0yMjRxMCAtMTAgLTcuNSAtMTguNXQtMTcuNSAtMTAuNXEtNDEgLTYgLTc1IC02cS0xNSAwIC0zNCAxLjV0LTMwIDMuNWwtMTEgMXEtMTAgMiAtMTcuNSAxMC41dC03LjUgMTguNXYyMjRsLTE1OCAtMTU4cS03IC03IC0xOCAtOHQtMTkgNmwtMTA2IDEwNnEtNyA4IC02IDE5dDggMThsMTU4IDE1OGgtMjI0cS0xMCAwIC0xOC41IDcuNSB0LTEwLjUgMTcuNXEtNiA0MSAtNiA3NXEwIDE1IDEuNSAzNHQzLjUgMzBsMSAxMXEyIDEwIDEwLjUgMTcuNXQxOC41IDcuNWgyMjRsLTE1OCAxNThxLTcgNyAtOCAxOHQ2IDE5bDEwNiAxMDZxOCA3IDE5IDZ0MTggLThsMTU4IC0xNTh2MjI0cTAgMTAgNy41IDE4LjV0MTcuNSAxMC41cTQxIDYgNzUgNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzUwaDM1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zNTB2LTM1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzNTBoLTM1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNSBoMzUwdjM1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgogPGdseXBoIHVuaWNvZGU9IiYjeGEwOyIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3gyMDAwOyIgaG9yaXotYWR2LXg9IjY1MiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3gyMDAxOyIgaG9yaXotYWR2LXg9IjEzMDQiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTIiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4MjAwMzsiIGhvcml6LWFkdi14PSIxMzA0IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDIwMDQ7IiBob3Jpei1hZHYteD0iNDM0IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI2IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDIwMDY7IiBob3Jpei1hZHYteD0iMjE3IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDIwMDc7IiBob3Jpei1hZHYteD0iMjE3IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYzIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGE1OyIgZD0iTTgyNSAxMTAwaDI1MHExMCAwIDEyLjUgLTV0LTUuNSAtMTNsLTM2NCAtMzY0cS02IC02IC0xMSAtMThoMjY4cTEwIDAgMTMgLTZ0LTMgLTE0bC0xMjAgLTE2MHEtNiAtOCAtMTggLTE0dC0yMiAtNmgtMTI1di0xMDBoMjc1cTEwIDAgMTMgLTZ0LTMgLTE0bC0xMjAgLTE2MHEtNiAtOCAtMTggLTE0dC0yMiAtNmgtMTI1di0xNzRxMCAtMTEgLTcuNSAtMTguNXQtMTguNSAtNy41aC0xNDhxLTExIDAgLTE4LjUgNy41dC03LjUgMTguNXYxNzQgaC0yNzVxLTEwIDAgLTEzIDZ0MyAxNGwxMjAgMTYwcTYgOCAxOCAxNHQyMiA2aDEyNXYxMDBoLTI3NXEtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTE4cS01IDEyIC0xMSAxOGwtMzY0IDM2NHEtOCA4IC01LjUgMTN0MTIuNSA1aDI1MHEyNSAwIDQzIC0xOGwxNjQgLTE2NHE4IC04IDE4IC04dDE4IDhsMTY0IDE2NHExOCAxOCA0MyAxOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMDsiIGhvcml6LWFkdi14PSI2NTAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzAwIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDI7IiBob3Jpei1hZHYteD0iNjUwIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDM7IiBob3Jpei1hZHYteD0iMTMwMCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzMyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA1OyIgaG9yaXotYWR2LXg9IjMyNSIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA2OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA4OyIgaG9yaXotYWR2LXg9IjE2MiIgLz4KIDxnbHlwaCB1bmljb2RlPSImI3gyMDA5OyIgaG9yaXotYWR2LXg9IjI2MCIgLz4KIDxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgogPGdseXBoIHVuaWNvZGU9IiYjeDIwMmY7IiBob3Jpei1hZHYteD0iMjYwIiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDIwNWY7IiBob3Jpei1hZHYteD0iMzI2IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNMTAwIDUwMGwxMDAgMTAwaDExM3EwIDQ3IDUgMTAwaC0yMThsMTAwIDEwMGgxMzVxMzcgMTY3IDExMiAyNTdxMTE3IDE0MSAyOTcgMTQxcTI0MiAwIDM1NCAtMTg5cTYwIC0xMDMgNjYgLTIwOWgtMTgxcTAgNTUgLTI1LjUgOTl0LTYzLjUgNjh0LTc1IDM2LjV0LTY3IDEyLjVxLTI0IDAgLTUyLjUgLTEwdC02Mi41IC0zMnQtNjUuNSAtNjd0LTUwLjUgLTEwN2gzNzlsLTEwMCAtMTAwaC0zMDBxLTYgLTQ2IC02IC0xMDBoNDA2bC0xMDAgLTEwMCBoLTMwMHE5IC03NCAzMyAtMTMydDUyLjUgLTkxdDYyIC01NC41dDU5IC0yOXQ0Ni41IC03LjVxMjkgMCA2NiAxM3Q3NSAzN3Q2My41IDY3LjV0MjUuNSA5Ni41aDE3NHEtMzEgLTE3MiAtMTI4IC0yNzhxLTEwNyAtMTE3IC0yNzQgLTExN3EtMjA1IDAgLTMyNCAxNThxLTM2IDQ2IC02OSAxMzEuNXQtNDUgMjA1LjVoLTIxN3oiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yMDAgNDAwaDkwMHYzMDBoLTkwMHYtMzAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3gyNjAxOyIgZD0iTS0xNCA0OTRxMCAtODAgNTYuNSAtMTM3dDEzNS41IC01N2g3NTBxMTIwIDAgMjA1IDg2dDg1IDIwOHEwIDEyMCAtODUgMjA2LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTAgMTAwbDQwMCA0MDBsMjAwIC0yMDBsMjAwIDIwMGw0MDAgLTQwMGgtMTIwMHpNMCAzMDB2NjAwbDMwMCAtMzAwek0wIDExMDBsNjAwIC02MDNsNjAwIDYwM2gtMTIwMHpNOTAwIDYwMGwzMDAgMzAwdi02MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeDI3MGY7IiBkPSJNLTEzIC0xM2wzMzMgMTEybC0yMjMgMjIzek0xODcgNDAzbDIxNCAtMjE0bDYxNCA2MTRsLTIxNCAyMTR6TTg4NyAxMTAzbDIxNCAtMjE0bDk5IDkycTEzIDEzIDEzIDMyLjV0LTEzIDMzLjVsLTE1MyAxNTNxLTE1IDEzIC0zMyAxM3QtMzMgLTEzeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDAwOyIgaG9yaXotYWR2LXg9IjUwMCIgZD0iTTAgMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik0wIDEyMDBoMTIwMGwtNTAwIC01NTB2LTU1MGgzMDB2LTEwMGgtODAwdjEwMGgzMDB2NTUweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDAyOyIgZD0iTTE0IDg0cTE4IC01NSA4NiAtNzUuNXQxNDcgNS41cTY1IDIxIDEwOSA2OXQ0NCA5MHY2MDZsNjAwIDE1NXYtNTIxcS02NCAxNiAtMTM4IC03cS03OSAtMjYgLTEyMi41IC04M3QtMjUuNSAtMTExcTE3IC01NSA4NS41IC03NS41dDE0Ny41IDQuNXE3MCAyMyAxMTEuNSA2My41dDQxLjUgOTUuNXY4ODFxMCAxMCAtNyAxNS41dC0xNyAyLjVsLTc1MiAtMTkzcS0xMCAtMyAtMTcgLTEyLjV0LTcgLTE5LjV2LTY4OXEtNjQgMTcgLTEzOCAtNyBxLTc5IC0yNSAtMTIyLjUgLTgydC0yNS41IC0xMTJ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNMjMgNjkzcTAgMjAwIDE0MiAzNDJ0MzQyIDE0MnQzNDIgLTE0MnQxNDIgLTM0MnEwIC0xNDIgLTc4IC0yNjFsMzAwIC0zMDBxNyAtOCA3IC0xOHQtNyAtMThsLTEwOSAtMTA5cS04IC03IC0xOCAtN3QtMTggN2wtMzAwIDMwMHEtMTE5IC03OCAtMjYxIC03OHEtMjAwIDAgLTM0MiAxNDJ0LTE0MiAzNDJ6TTE3NiA2OTNxMCAtMTM2IDk3IC0yMzN0MjM0IC05N3QyMzMuNSA5Ni41dDk2LjUgMjMzLjV0LTk2LjUgMjMzLjV0LTIzMy41IDk2LjUgdC0yMzQgLTk3dC05NyAtMjMzeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDA1OyIgZD0iTTEwMCA3ODRxMCA2NCAyOCAxMjN0NzMgMTAwLjV0MTA0LjUgNjR0MTE5IDIwLjV0MTIwIC0zOC41dDEwNC41IC0xMDQuNXE0OCA2OSAxMDkuNSAxMDV0MTIxLjUgMzh0MTE4LjUgLTIwLjV0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNDkuNSAxNTIuNXQtMTI2LjUgMTI3LjUgdC05NCAxMjQuNXQtMzMuNSAxMTcuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik0tNzIgODAwaDQ3OWwxNDYgNDAwaDJsMTQ2IC00MDBoNDcybC0zODIgLTI3OGwxNDUgLTQ0OWwtMzg0IDI3NWwtMzgyIC0yNzVsMTQ2IDQ0N3pNMTY4IDcxbDIgMXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAwNzsiIGQ9Ik0tNzIgODAwaDQ3OWwxNDYgNDAwaDJsMTQ2IC00MDBoNDcybC0zODIgLTI3OGwxNDUgLTQ0OWwtMzg0IDI3NWwtMzgyIC0yNzVsMTQ2IDQ0N3pNMTY4IDcxbDIgMXpNMjM3IDcwMGwxOTYgLTE0MmwtNzMgLTIyNmwxOTIgMTQwbDE5NSAtMTQxbC03NCAyMjlsMTkzIDE0MGgtMjM1bC03NyAyMTFsLTc4IC0yMTFoLTIzOXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik0wIDB2MTQzbDQwMCAyNTd2MTAwcS0zNyAwIC02OC41IDc0LjV0LTMxLjUgMTI1LjV2MjAwcTAgMTI0IDg4IDIxMnQyMTIgODh0MjEyIC04OHQ4OCAtMjEydi0yMDBxMCAtNTEgLTMxLjUgLTEyNS41dC02OC41IC03NC41di0xMDBsNDAwIC0yNTd2LTE0M2gtMTIwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAwOTsiIGQ9Ik0wIDB2MTEwMGgxMjAwdi0xMTAwaC0xMjAwek0xMDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgNTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgNzAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgOTAwaDEwMHYxMDBoLTEwMHYtMTAwek0zMDAgMTAwaDYwMHY0MDBoLTYwMHYtNDAwek0zMDAgNjAwaDYwMHY0MDBoLTYwMHYtNDAwek0xMDAwIDEwMGgxMDB2MTAwaC0xMDB2LTEwMHogTTEwMDAgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAwIDUwMGgxMDB2MTAwaC0xMDB2LTEwMHpNMTAwMCA3MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMDAgOTAwaDEwMHYxMDBoLTEwMHYtMTAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDEwOyIgZD0iTTAgNTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA2NTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCA1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgNjUwdjQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDExOyIgZD0iTTAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA0NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41IHYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNODAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNODAwIDg1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDEyOyIgZD0iTTAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA0NTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2MjAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDBxLTIxIDAgLTM1LjUgLTE0LjUgdC0xNC41IC0zNS41di0yMDB6TTAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41IHYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDEzOyIgZD0iTTI5IDQ1NGw0MTkgLTQyMGw4MTggODIwbC0yMTIgMjEybC02MDcgLTYwN2wtMjA2IDIwN3oiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAxNDsiIGQ9Ik0xMDYgMzE4bDI4MiAyODJsLTI4MiAyODJsMjEyIDIxMmwyODIgLTI4MmwyODIgMjgybDIxMiAtMjEybC0yODIgLTI4MmwyODIgLTI4MmwtMjEyIC0yMTJsLTI4MiAyODJsLTI4MiAtMjgyeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDE1OyIgZD0iTTIzIDY5M3EwIDIwMCAxNDIgMzQydDM0MiAxNDJ0MzQyIC0xNDJ0MTQyIC0zNDJxMCAtMTQyIC03OCAtMjYxbDMwMCAtMzAwcTcgLTggNyAtMTh0LTcgLTE4bC0xMDkgLTEwOXEtOCAtNyAtMTggLTd0LTE4IDdsLTMwMCAzMDBxLTExOSAtNzggLTI2MSAtNzhxLTIwMCAwIC0zNDIgMTQydC0xNDIgMzQyek0xNzYgNjkzcTAgLTEzNiA5NyAtMjMzdDIzNCAtOTd0MjMzLjUgOTYuNXQ5Ni41IDIzMy41dC05Ni41IDIzMy41dC0yMzMuNSA5Ni41IHQtMjM0IC05N3QtOTcgLTIzM3pNMzAwIDYwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMGgxMDB2LTIwMGgtMTAwdi0xMDBoLTIwMHYxMDBoLTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAxNjsiIGQ9Ik0yMyA2OTRxMCAyMDAgMTQyIDM0MnQzNDIgMTQydDM0MiAtMTQydDE0MiAtMzQycTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE3IC03IDcgLTE4dC03IC0xOGwtMTA5IC0xMDlxLTggLTggLTE4IC04dC0xOCA4bC0zMDAgMjk5cS0xMjAgLTc3IC0yNjEgLTc3cS0yMDAgMCAtMzQyIDE0MnQtMTQyIDM0MnpNMTc2IDY5NHEwIC0xMzYgOTcgLTIzM3QyMzQgLTk3dDIzMy41IDk3dDk2LjUgMjMzdC05Ni41IDIzM3QtMjMzLjUgOTd0LTIzNCAtOTcgdC05NyAtMjMzek0zMDAgNjAxaDQwMHYyMDBoLTQwMHYtMjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDE3OyIgZD0iTTIzIDYwMHEwIDE4MyAxMDUgMzMxdDI3MiAyMTB2LTE2NnEtMTAzIC01NSAtMTY1IC0xNTV0LTYyIC0yMjBxMCAtMTc3IDEyNSAtMzAydDMwMiAtMTI1dDMwMiAxMjV0MTI1IDMwMnEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1djE2NnExNjcgLTYyIDI3MiAtMjEwdDEwNSAtMzMxcTAgLTExOCAtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjI0LjUgLTQ1LjV0LTIyNC41IDQ1LjV0LTE4NCAxMjN0LTEyMyAxODR0LTQ1LjUgMjI0LjUgek01MDAgNzUwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djQwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di00MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAwIDFoMjAwdjMwMGgtMjAwdi0zMDB6TTQwMCAxdjUwMGgyMDB2LTUwMGgtMjAwek03MDAgMXY4MDBoMjAwdi04MDBoLTIwMHpNMTAwMCAxdjEyMDBoMjAwdi0xMjAwaC0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMTk7IiBkPSJNMjYgNjAxcTAgLTMzIDYgLTc0bDE1MSAtMzhsMiAtNnExNCAtNDkgMzggLTkzbDMgLTVsLTgwIC0xMzRxNDUgLTU5IDEwNSAtMTA1bDEzMyA4MWw1IC0zcTQ1IC0yNiA5NCAtMzlsNSAtMmwzOCAtMTUxcTQwIC01IDc0IC01cTI3IDAgNzQgNWwzOCAxNTFsNiAycTQ2IDEzIDkzIDM5bDUgM2wxMzQgLTgxcTU2IDQ0IDEwNCAxMDVsLTgwIDEzNGwzIDVxMjQgNDQgMzkgOTNsMSA2bDE1MiAzOHE1IDQwIDUgNzRxMCAyOCAtNSA3M2wtMTUyIDM4IGwtMSA2cS0xNiA1MSAtMzkgOTNsLTMgNWw4MCAxMzRxLTQ0IDU4IC0xMDQgMTA1bC0xMzQgLTgxbC01IDNxLTQ1IDI1IC05MyAzOWwtNiAxbC0zOCAxNTJxLTQwIDUgLTc0IDVxLTI3IDAgLTc0IC01bC0zOCAtMTUybC01IC0xcS01MCAtMTQgLTk0IC0zOWwtNSAtM2wtMTMzIDgxcS01OSAtNDcgLTEwNSAtMTA1bDgwIC0xMzRsLTMgLTVxLTI1IC00NyAtMzggLTkzbC0yIC02bC0xNTEgLTM4cS02IC00OCAtNiAtNzN6TTM4NSA2MDEgcTAgODggNjMgMTUxdDE1MiA2M3QxNTIgLTYzdDYzIC0xNTFxMCAtODkgLTYzIC0xNTJ0LTE1MiAtNjN0LTE1MiA2M3QtNjMgMTUyeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDIwOyIgZD0iTTEwMCAxMDI1djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjc1djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTEgLTcgLTE4dC0xOCAtN2gtMTA1MHEtMTEgMCAtMTggN3QtNyAxOHpNMjAwIDEwMHY4MDBoOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcxdC03MC41IC0zMGgtNzAwcS00MSAwIC03MC41IDMwIHQtMjkuNSA3MXpNMzAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNNTAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNNTAwIDExMDBoMzAwdjEwMGgtMzAwdi0xMDB6TTcwMCAxMDBoMTAwdjcwMGgtMTAwdi03MDB6TTkwMCAxMDBoMTAwdjcwMGgtMTAwdi03MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMjE7IiBkPSJNMSA2MDFsNjU2IDY0NGw2NDQgLTY0NGgtMjAwdi02MDBoLTMwMHY0MDBoLTMwMHYtNDAwaC0zMDB2NjAwaC0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMjI7IiBkPSJNMTAwIDI1djExNTBxMCAxMSA3IDE4dDE4IDdoNDc1di01MDBoNDAwdi02NzVxMCAtMTEgLTcgLTE4dC0xOCAtN2gtODUwcS0xMSAwIC0xOCA3dC03IDE4ek03MDAgODAwdjMwMGwzMDAgLTMwMGgtMzAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDIzOyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNTAwIDUwMHY0MDBoMTAwIHYtMzAwaDIwMHYtMTAwaC0zMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMjQ7IiBkPSJNLTEwMCAwbDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDhsNDMxIC0xMjAwaC01MzhsLTQxIDQwMGgtMjQybC00MCAtNDAwaC01Mzl6TTQ4OCA1MDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAyNTsiIGQ9Ik0wIDB2NDAwaDQ5MGwtMjkwIDMwMGgyMDB2NTAwaDMwMHYtNTAwaDIwMGwtMjkwIC0zMDBoNDkwdi00MDBoLTExMDB6TTgxMyAyMDBoMTc1djEwMGgtMTc1di0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMjY7IiBkPSJNMSA2MDBxMCAxMjIgNDcuNSAyMzN0MTI3LjUgMTkxdDE5MSAxMjcuNXQyMzMgNDcuNXQyMzMgLTQ3LjV0MTkxIC0xMjcuNXQxMjcuNSAtMTkxdDQ3LjUgLTIzM3QtNDcuNSAtMjMzdC0xMjcuNSAtMTkxdC0xOTEgLTEyNy41dC0yMzMgLTQ3LjV0LTIzMyA0Ny41dC0xOTEgMTI3LjV0LTEyNy41IDE5MXQtNDcuNSAyMzN6TTE4OCA2MDBxMCAtMTcwIDEyMSAtMjkxdDI5MSAtMTIxdDI5MSAxMjF0MTIxIDI5MXQtMTIxIDI5MXQtMjkxIDEyMSB0LTI5MSAtMTIxdC0xMjEgLTI5MXpNMzUwIDYwMGgxNTB2MzAwaDIwMHYtMzAwaDE1MGwtMjUwIC0zMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMjc7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zNTAgNjAwbDI1MCAzMDAgbDI1MCAtMzAwaC0xNTB2LTMwMGgtMjAwdjMwMGgtMTUweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTAgMjV2NDc1bDIwMCA3MDBoODAwcTE5OSAtNzAwIDIwMCAtNzAwdi00NzVxMCAtMTEgLTcgLTE4dC0xOCAtN2gtMTE1MHEtMTEgMCAtMTggN3QtNyAxOHpNMjAwIDUwMGgyMDBsNTAgLTIwMGgzMDBsNTAgMjAwaDIwMGwtOTcgNTAwaC02MDZ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMjk7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MiAxMjEuNSAtMjkzdDI5Mi41IC0xMjF0MjkyLjUgMTIxdDEyMS41IDI5M3EwIDE3MSAtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNTAwIDM5N3Y0MDEgbDI5NyAtMjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDMwOyIgZD0iTTIzIDYwMHEwIC0xMTggNDUuNSAtMjI0LjV0MTIzIC0xODR0MTg0IC0xMjN0MjI0LjUgLTQ1LjV0MjI0LjUgNDUuNXQxODQgMTIzdDEyMyAxODR0NDUuNSAyMjQuNWgtMTUwcTAgLTE3NyAtMTI1IC0zMDJ0LTMwMiAtMTI1dC0zMDIgMTI1dC0xMjUgMzAydDEyNSAzMDJ0MzAyIDEyNXExMzYgMCAyNDYgLTgxbC0xNDYgLTE0Nmg0MDB2NDAwbC0xNDUgLTE0NXEtMTU3IDEyMiAtMzU1IDEyMnEtMTE4IDAgLTIyNC41IC00NS41dC0xODQgLTEyMyB0LTEyMyAtMTg0dC00NS41IC0yMjQuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAzMTsiIGQ9Ik0yMyA2MDBxMCAxMTggNDUuNSAyMjQuNXQxMjMgMTg0dDE4NCAxMjN0MjI0LjUgNDUuNXExOTggMCAzNTUgLTEyMmwxNDUgMTQ1di00MDBoLTQwMGwxNDcgMTQ3cS0xMTIgODAgLTI0NyA4MHEtMTc3IDAgLTMwMiAtMTI1dC0xMjUgLTMwMmgtMTUwek0xMDAgMHY0MDBoNDAwbC0xNDcgLTE0N3ExMTIgLTgwIDI0NyAtODBxMTc3IDAgMzAyIDEyNXQxMjUgMzAyaDE1MHEwIC0xMTggLTQ1LjUgLTIyNC41dC0xMjMgLTE4NHQtMTg0IC0xMjMgdC0yMjQuNSAtNDUuNXEtMTk4IDAgLTM1NSAxMjJ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMzI7IiBkPSJNMTAwIDBoMTEwMHYxMjAwaC0xMTAwdi0xMjAwek0yMDAgMTAwdjkwMGg5MDB2LTkwMGgtOTAwek0zMDAgMjAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNDAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNjAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgODAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgMjAwaDUwMHYxMDBoLTUwMHYtMTAwek01MDAgNDAwdjEwMGg1MDB2LTEwMGgtNTAwek01MDAgNjAwdjEwMGg1MDB2LTEwMGgtNTAweiBNNTAwIDgwMHYxMDBoNTAwdi0xMDBoLTUwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik0wIDEwMHY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMHYyMDBxMCA4MiA1OSAxNDF0MTQxIDU5aDMwMHE4MiAwIDE0MSAtNTl0NTkgLTE0MXYtMjAwaDEwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC05MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek00MDAgODAwaDMwMHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMDAgMHYxMTAwaDEwMHYtMTEwMGgtMTAwek0zMDAgNDAwcTYwIDYwIDEyNy41IDg0dDEyNy41IDE3LjV0MTIyIC0yM3QxMTkgLTMwdDExMCAtMTF0MTAzIDQydDkxIDEyMC41djUwMHEtNDAgLTgxIC0xMDEuNSAtMTE1LjV0LTEyNy41IC0yOS41dC0xMzggMjV0LTEzOS41IDQwdC0xMjUuNSAyNXQtMTAzIC0yOS41dC02NSAtMTE1LjV2LTUwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAzNTsiIGQ9Ik0wIDI3NXEwIC0xMSA3IC0xOHQxOCAtN2g1MHExMSAwIDE4IDd0NyAxOHYzMDBxMCAxMjcgNzAuNSAyMzEuNXQxODQuNSAxNjEuNXQyNDUgNTd0MjQ1IC01N3QxODQuNSAtMTYxLjV0NzAuNSAtMjMxLjV2LTMwMHEwIC0xMSA3IC0xOHQxOCAtN2g1MHExMSAwIDE4IDd0NyAxOHYzMDBxMCAxMTYgLTQ5LjUgMjI3dC0xMzEgMTkyLjV0LTE5Mi41IDEzMXQtMjI3IDQ5LjV0LTIyNyAtNDkuNXQtMTkyLjUgLTEzMXQtMTMxIC0xOTIuNSB0LTQ5LjUgLTIyN3YtMzAwek0yMDAgMjB2NDYwcTAgOCA2IDE0dDE0IDZoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR6TTgwMCAyMHY0NjBxMCA4IDYgMTR0MTQgNmgxNjBxOCAwIDE0IC02dDYgLTE0di00NjBxMCAtOCAtNiAtMTR0LTE0IC02aC0xNjBxLTggMCAtMTQgNnQtNiAxNHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAzNjsiIGQ9Ik0wIDQwMGgzMDBsMzAwIC0yMDB2ODAwbC0zMDAgLTIwMGgtMzAwdi00MDB6TTY4OCA0NTlsMTQxIDE0MWwtMTQxIDE0MWw3MSA3MWwxNDEgLTE0MWwxNDEgMTQxbDcxIC03MWwtMTQxIC0xNDFsMTQxIC0xNDFsLTcxIC03MWwtMTQxIDE0MWwtMTQxIC0xNDF6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwMzc7IiBkPSJNMCA0MDBoMzAwbDMwMCAtMjAwdjgwMGwtMzAwIC0yMDBoLTMwMHYtNDAwek03MDAgODU3bDY5IDUzcTExMSAtMTM1IDExMSAtMzEwcTAgLTE2OSAtMTA2IC0zMDJsLTY3IDU0cTg2IDExMCA4NiAyNDhxMCAxNDYgLTkzIDI1N3oiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAzODsiIGQ9Ik0wIDQwMXY0MDBoMzAwbDMwMCAyMDB2LTgwMGwtMzAwIDIwMGgtMzAwek03MDIgODU4bDY5IDUzcTExMSAtMTM1IDExMSAtMzEwcTAgLTE3MCAtMTA2IC0zMDNsLTY3IDU1cTg2IDExMCA4NiAyNDhxMCAxNDUgLTkzIDI1N3pNODg5IDk1MWw3IC04cTEyMyAtMTUxIDEyMyAtMzQ0cTAgLTE4OSAtMTE5IC0zMzlsLTcgLThsODEgLTY2bDYgOHExNDIgMTc4IDE0MiA0MDVxMCAyMzAgLTE0NCA0MDhsLTYgOHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTAzOTsiIGQ9Ik0wIDBoNTAwdjUwMGgtMjAwdjEwMGgtMTAwdi0xMDBoLTIwMHYtNTAwek0wIDYwMGgxMDB2MTAwaDQwMHYxMDBoMTAwdjEwMGgtMTAwdjMwMGgtNTAwdi02MDB6TTEwMCAxMDB2MzAwaDMwMHYtMzAwaC0zMDB6TTEwMCA4MDB2MzAwaDMwMHYtMzAwaC0zMDB6TTIwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTIwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTUwMCA1MDB2MTAwaDMwMHYtMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMCBoLTEwMHYxMDBoMTAwdjIwMGgtMjAwek02MDAgMHYxMDBoMTAwdi0xMDBoLTEwMHpNNjAwIDEwMDBoMTAwdi0zMDBoMjAwdi0zMDBoMzAwdjIwMGgtMjAwdjEwMGgyMDB2NTAwaC02MDB2LTIwMHpNODAwIDgwMHYzMDBoMzAwdi0zMDBoLTMwMHpNOTAwIDB2MTAwaDMwMHYtMTAwaC0zMDB6TTkwMCA5MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTExMDAgMjAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTAgMjAwaDEwMHYxMDAwaC0xMDB2LTEwMDB6TTEwMCAwdjEwMGgzMDB2LTEwMGgtMzAwek0yMDAgMjAwdjEwMDBoMTAwdi0xMDAwaC0xMDB6TTUwMCAwdjkxaDEwMHYtOTFoLTEwMHpNNTAwIDIwMHYxMDAwaDIwMHYtMTAwMGgtMjAwek03MDAgMHY5MWgxMDB2LTkxaC0xMDB6TTgwMCAyMDB2MTAwMGgxMDB2LTEwMDBoLTEwMHpNOTAwIDB2OTFoMjAwdi05MWgtMjAwek0xMDAwIDIwMHYxMDAwaDIwMHYtMTAwMGgtMjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDQxOyIgZD0iTTEgNzAwdjQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NGw3MDAgLTcwMGwtNTAwIC01MDB6TTE0OCA5NTNxMCAtNDIgMjkgLTcxcTMwIC0zMCA3MS41IC0zMHQ3MS41IDMwcTI5IDI5IDI5IDcxdC0yOSA3MXEtMzAgMzAgLTcxLjUgMzB0LTcxLjUgLTMwcS0yOSAtMjkgLTI5IC03MXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA0MjsiIGQ9Ik0yIDcwMHY0NzVxMCAxMSA3IDE4dDE4IDdoNDc0bDcwMCAtNzAwbC01MDAgLTUwMHpNMTQ4IDk1M3EwIC00MiAzMCAtNzFxMjkgLTMwIDcxIC0zMHQ3MSAzMHEzMCAyOSAzMCA3MXQtMzAgNzFxLTI5IDMwIC03MSAzMHQtNzEgLTMwcS0zMCAtMjkgLTMwIC03MXpNNzAxIDEyMDBoMTAwbDcwMCAtNzAwbC01MDAgLTUwMGwtNTAgNTBsNDUwIDQ1MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA0MzsiIGQ9Ik0xMDAgMHYxMDI1bDE3NSAxNzVoOTI1di0xMDAwbC0xMDAgLTEwMHYxMDAwaC03NTBsLTEwMCAtMTAwaDc1MHYtMTAwMGgtOTAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTIwMCAwbDQ1MCA0NDRsNDUwIC00NDN2MTE1MHEwIDIwIC0xNC41IDM1dC0zNS41IDE1aC04MDBxLTIxIDAgLTM1LjUgLTE1dC0xNC41IC0zNXYtMTE1MXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik0wIDEwMHY3MDBoMjAwbDEwMCAtMjAwaDYwMGwxMDAgMjAwaDIwMHYtNzAwaC0yMDB2MjAwaC04MDB2LTIwMGgtMjAwek0yNTMgODI5bDQwIC0xMjRoNTkybDYyIDEyNGwtOTQgMzQ2cS0yIDExIC0xMCAxOHQtMTggN2gtNDUwcS0xMCAwIC0xOCAtN3QtMTAgLTE4ek0yODEgMjRsMzggMTUycTIgMTAgMTEuNSAxN3QxOS41IDdoNTAwcTEwIDAgMTkuNSAtN3QxMS41IC0xN2wzOCAtMTUycTIgLTEwIC0zLjUgLTE3dC0xNS41IC03aC02MDAgcS0xMCAwIC0xNS41IDd0LTMuNSAxN3oiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik0wIDIwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xNTBxLTQgOCAtMTEuNSAyMS41dC0zMyA0OHQtNTMgNjF0LTY5IDQ4dC04My41IDIxLjVoLTIwMHEtNDEgMCAtODIgLTIwLjV0LTcwIC01MHQtNTIgLTU5dC0zNCAtNTAuNWwtMTIgLTIwaC0xNTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTYwMHogTTM1NiA1MDBxMCAxMDAgNzIgMTcydDE3MiA3MnQxNzIgLTcydDcyIC0xNzJ0LTcyIC0xNzJ0LTE3MiAtNzJ0LTE3MiA3MnQtNzIgMTcyek00OTQgNTAwcTAgLTQ0IDMxIC03NXQ3NSAtMzF0NzUgMzF0MzEgNzV0LTMxIDc1dC03NSAzMXQtNzUgLTMxdC0zMSAtNzV6TTkwMCA3MDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNDc7IiBkPSJNNTMgMGgzNjV2NjZxLTQxIDAgLTcyIDExdC00OSAzOHQxIDcxbDkyIDIzNGgzOTFsODIgLTIyMnExNiAtNDUgLTUuNSAtODguNXQtNzQuNSAtNDMuNXYtNjZoNDE3djY2cS0zNCAxIC03NCA0M3EtMTggMTkgLTMzIDQydC0yMSAzN2wtNiAxM2wtMzg1IDk5OGgtOTNsLTM5OSAtMTAwNnEtMjQgLTQ4IC01MiAtNzVxLTEyIC0xMiAtMzMgLTI1dC0zNiAtMjBsLTE1IC03di02NnpNNDE2IDUyMWwxNzggNDU3bDQ2IC0xNDBsMTE2IC0zMTdoLTM0MCB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNDg7IiBkPSJNMTAwIDB2ODlxNDEgNyA3MC41IDMyLjV0MjkuNSA2NS41djgyN3EwIDI4IC0xIDM5LjV0LTUuNSAyNnQtMTUuNSAyMXQtMjkgMTR0LTQ5IDE0LjV2NzBoNDcxcTEyMCAwIDIxMyAtODh0OTMgLTIyOHEwIC01NSAtMTEuNSAtMTAxLjV0LTI4IC03NHQtMzMuNSAtNDcuNXQtMjggLTI4bC0xMiAtN3E4IC0zIDIxLjUgLTl0NDggLTMxLjV0NjAuNSAtNTh0NDcuNSAtOTEuNXQyMS41IC0xMjlxMCAtODQgLTU5IC0xNTYuNXQtMTQyIC0xMTEgdC0xNjIgLTM4LjVoLTUwMHpNNDAwIDIwMGgxNjFxODkgMCAxNTMgNDguNXQ2NCAxMzIuNXEwIDkwIC02Mi41IDE1NC41dC0xNTYuNSA2NC41aC0xNTl2LTQwMHpNNDAwIDcwMGgxMzlxNzYgMCAxMzAgNjEuNXQ1NCAxMzguNXEwIDgyIC04NCAxMzAuNXQtMjM5IDQ4LjV2LTM3OXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA0OTsiIGQ9Ik0yMDAgMHY1N3E3NyA3IDEzNC41IDQwLjV0NjUuNSA4MC41bDE3MyA4NDlxMTAgNTYgLTEwIDc0dC05MSAzN3EtNiAxIC0xMC41IDIuNXQtOS41IDIuNXY1N2g0MjVsMiAtNTdxLTMzIC04IC02MiAtMjUuNXQtNDYgLTM3dC0yOS41IC0zOHQtMTcuNSAtMzAuNWwtNSAtMTJsLTEyOCAtODI1cS0xMCAtNTIgMTQgLTgydDk1IC0zNnYtNTdoLTUwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA1MDsiIGQ9Ik0tNzUgMjAwaDc1djgwMGgtNzVsMTI1IDE2N2wxMjUgLTE2N2gtNzV2LTgwMGg3NWwtMTI1IC0xNjd6TTMwMCA5MDB2MzAwaDE1MGg3MDBoMTUwdi0zMDBoLTUwcTAgMjkgLTggNDguNXQtMTguNSAzMHQtMzMuNSAxNXQtMzkuNSA1LjV0LTUwLjUgMWgtMjAwdi04NTBsMTAwIC01MHYtMTAwaC00MDB2MTAwbDEwMCA1MHY4NTBoLTIwMHEtMzQgMCAtNTAuNSAtMXQtNDAgLTUuNXQtMzMuNSAtMTV0LTE4LjUgLTMwdC04LjUgLTQ4LjVoLTQ5eiAiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0zMyA1MWwxNjcgMTI1di03NWg4MDB2NzVsMTY3IC0xMjVsLTE2NyAtMTI1djc1aC04MDB2LTc1ek0xMDAgOTAxdjMwMGgxNTBoNzAwaDE1MHYtMzAwaC01MHEwIDI5IC04IDQ4LjV0LTE4IDMwdC0zMy41IDE1dC00MCA1LjV0LTUwLjUgMWgtMjAwdi02NTBsMTAwIC01MHYtMTAwaC00MDB2MTAwbDEwMCA1MHY2NTBoLTIwMHEtMzQgMCAtNTAuNSAtMXQtMzkuNSAtNS41dC0zMy41IC0xNXQtMTguNSAtMzB0LTggLTQ4LjVoLTUweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDUyOyIgZD0iTTAgNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTEwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTExMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMCAzNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoODAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtODAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41IHYtMTAwek0wIDY1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg2MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjUgdC0xNC41IC0zNS41di0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNTM7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDY1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNSB2LTEwMHpNMjAwIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg3MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC03MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMjAwIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg3MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC03MDBxLTIxIDAgLTM1LjUgLTE0LjUgdC0xNC41IC0zNS41di0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNTQ7IiBkPSJNMCA1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0xMDAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMDBxLTIxIDAgLTM1LjUgMTUgdC0xNC41IDM1ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek01MDAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtNjAwIHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA1NTsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTUgdC0xNC41IDM1ek0wIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwIHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTMwMCA1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMCBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTMwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTMwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1IGgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDU3OyIgZD0iTS0xMDEgNTAwdjEwMGgyMDF2NzVsMTY2IC0xMjVsLTE2NiAtMTI1djc1aC0yMDF6TTMwMCAwaDEwMHYxMTAwaC0xMDB2LTExMDB6TTUwMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg2MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNjAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTUwMCAzNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMzAwcTIwIDAgMzUgMTV0MTUgMzUgdjEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0zMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDY1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg1MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTUwMCA5NTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwIHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik0xIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMSAzNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMzAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0xIDY1MCBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoNTAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTUwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0xIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTgwMSAwdjExMDBoMTAwdi0xMTAwIGgtMTAwek05MzQgNTUwbDE2NyAtMTI1djc1aDIwMHYxMDBoLTIwMHY3NXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik0wIDI3NXY2NTBxMCAzMSAyMiA1M3Q1MyAyMmg3NTBxMzEgMCA1MyAtMjJ0MjIgLTUzdi02NTBxMCAtMzEgLTIyIC01M3QtNTMgLTIyaC03NTBxLTMxIDAgLTUzIDIydC0yMiA1M3pNOTAwIDYwMGwzMDAgMzAwdi02MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNjA7IiBkPSJNMCA0NHYxMDEycTAgMTggMTMgMzF0MzEgMTNoMTExMnExOSAwIDMxLjUgLTEzdDEyLjUgLTMxdi0xMDEycTAgLTE4IC0xMi41IC0zMXQtMzEuNSAtMTNoLTExMTJxLTE4IDAgLTMxIDEzdC0xMyAzMXpNMTAwIDI2M2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB2LTczN3pNMjA4IDc1MHEwIDU2IDM5IDk1dDk1IDM5dDk1IC0zOXQzOSAtOTV0LTM5IC05NXQtOTUgLTM5dC05NSAzOXQtMzkgOTV6ICIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDYyOyIgZD0iTTE0OCA3NDVxMCAxMjQgNjAuNSAyMzEuNXQxNjUgMTcydDIyNi41IDY0LjVxMTIzIDAgMjI3IC02M3QxNjQuNSAtMTY5LjV0NjAuNSAtMjI5LjV0LTczIC0yNzJxLTczIC0xMTQgLTE2Ni41IC0yMzd0LTE1MC41IC0xODlsLTU3IC02NnEtMTAgOSAtMjcgMjZ0LTY2LjUgNzAuNXQtOTYgMTA5dC0xMDQgMTM1LjV0LTEwMC41IDE1NXEtNjMgMTM5IC02MyAyNjJ6TTM0MiA3NzJxMCAtMTA3IDc1LjUgLTE4Mi41dDE4MS41IC03NS41IHExMDcgMCAxODIuNSA3NS41dDc1LjUgMTgyLjV0LTc1LjUgMTgydC0xODIuNSA3NXQtMTgyIC03NS41dC03NSAtMTgxLjV6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNMSA2MDBxMCAxMjIgNDcuNSAyMzN0MTI3LjUgMTkxdDE5MSAxMjcuNXQyMzMgNDcuNXQyMzMgLTQ3LjV0MTkxIC0xMjcuNXQxMjcuNSAtMTkxdDQ3LjUgLTIzM3QtNDcuNSAtMjMzdC0xMjcuNSAtMTkxdC0xOTEgLTEyNy41dC0yMzMgLTQ3LjV0LTIzMyA0Ny41dC0xOTEgMTI3LjV0LTEyNy41IDE5MXQtNDcuNSAyMzN6TTE3MyA2MDBxMCAtMTc3IDEyNS41IC0zMDJ0MzAxLjUgLTEyNXY4NTRxLTE3NiAwIC0zMDEuNSAtMTI1IHQtMTI1LjUgLTMwMnoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik0xMTcgNDA2cTAgOTQgMzQgMTg2dDg4LjUgMTcyLjV0MTEyIDE1OXQxMTUgMTc3dDg3LjUgMTk0LjVxMjEgLTcxIDU3LjUgLTE0Mi41dDc2IC0xMzAuNXQ4MyAtMTE4LjV0ODIgLTExN3Q3MCAtMTE2dDUwIC0xMjUuNXQxOC41IC0xMzZxMCAtODkgLTM5IC0xNjUuNXQtMTAyIC0xMjYuNXQtMTQwIC03OS41dC0xNTYgLTMzLjVxLTExNCA2IC0yMTEuNSA1M3QtMTYxLjUgMTM4LjV0LTY0IDIxMC41ek0yNDMgNDE0cTE0IC04MiA1OS41IC0xMzYgdDEzNi41IC04MGwxNiA5OHEtNyA2IC0xOCAxN3QtMzQgNDh0LTMzIDc3cS0xNSA3MyAtMTQgMTQzLjV0MTAgMTIyLjVsOSA1MXEtOTIgLTExMCAtMTE5LjUgLTE4NXQtMTIuNSAtMTU2eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDY1OyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNXEzNjYgLTYgMzk3IC0xNGwtMTg2IC0xODZoLTMxMXEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djEyNWwyMDAgMjAwdi0yMjVxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjUgdC0xMTcuNSAyODIuNXpNNDM2IDM0MWwxNjEgNTBsNDEyIDQxMmwtMTE0IDExM2wtNDA1IC00MDV6TTk5NSAxMDE1bDExMyAtMTEzbDExMyAxMTNsLTIxIDg1bC05MiAyOHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA2NjsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMjYxbDIgLTgwcS0xMzMgLTMyIC0yMTggLTEyMGgtMTQ1cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjVsMjAwIDE1M3YtNTNxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjV0LTExNy41IDI4Mi41IHpNNDIzIDUyNHEzMCAzOCA4MS41IDY0dDEwMyAzNS41dDk5IDE0dDc3LjUgMy41bDI5IC0xdi0yMDlsMzYwIDMyNGwtMzU5IDMxOHYtMjE2cS03IDAgLTE5IC0xdC00OCAtOHQtNjkuNSAtMTguNXQtNzYuNSAtMzd0LTc2LjUgLTU5dC02MiAtODh0LTM5LjUgLTEyMS41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgzMDBxNjAgMCAxMjcgLTIzbC0xNzggLTE3N2gtMzQ5cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjlsMjAwIDIwMHYtMTY5cTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTY1IDAgLTI4Mi41IDExNy41IHQtMTE3LjUgMjgyLjV6TTM0MiA2MzJsMjgzIC0yODRsNTY2IDU2N2wtMTM2IDEzN2wtNDMwIC00MzFsLTE0NyAxNDd6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMCA2MDNsMzAwIDI5NnYtMTk4aDIwMHYyMDBoLTIwMGwzMDAgMzAwbDI5NSAtMzAwaC0xOTV2LTIwMGgyMDB2MTk4bDMwMCAtMjk2bC0zMDAgLTMwMHYxOThoLTIwMHYtMjAwaDE5NWwtMjk1IC0zMDBsLTMwMCAzMDBoMjAwdjIwMGgtMjAwdi0xOTh6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNjk7IiBkPSJNMjAwIDUwdjEwMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA3MDsiIGQ9Ik0wIDUwdjEwMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM3bDUwMCA0ODd2LTQ4N2w1MDAgNDg3di0xMTAwbC01MDAgNDg4di00ODhsLTUwMCA0ODh2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA3MTsiIGQ9Ik0xMzYgNTUwbDU2NCA1NTB2LTQ4N2w1MDAgNDg3di0xMTAwbC01MDAgNDg4di00ODh6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNzI7IiBkPSJNMjAwIDBsOTAwIDU1MGwtOTAwIDU1MHYtMTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA3MzsiIGQ9Ik0yMDAgMTUwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgyMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djgwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMjAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di04MDB6TTYwMCAxNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDAgcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di04MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMjAwIDE1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg4MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC04MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA3NTsiIGQ9Ik0wIDB2MTEwMGw1MDAgLTQ4N3Y0ODdsNTY0IC01NTBsLTU2NCAtNTUwdjQ4OHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0wIDB2MTEwMGw1MDAgLTQ4N3Y0ODdsNTAwIC00ODd2NDM3cTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC01MDAgLTQ4OHY0ODh6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNzc7IiBkPSJNMzAwIDB2MTEwMGw1MDAgLTQ4N3Y0MzdxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0Mzh6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNMTAwIDI1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTEwMCA1MDBoMTEwMGwtNTUwIDU2NHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA3OTsiIGQ9Ik0xODUgNTk5bDU5MiAtNTkybDI0MCAyNDBsLTM1MyAzNTNsMzUzIDM1M2wtMjQwIDI0MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA4MDsiIGQ9Ik0yNzIgMTk0bDM1MyAzNTNsLTM1MyAzNTNsMjQxIDI0MGw1NzIgLTU3MWwyMSAtMjJsLTEgLTF2LTFsLTU5MiAtNTkxeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMzAwIDUwMGgyMDB2LTIwMGgyMDB2MjAwaDIwMHYyMDBoLTIwMHYyMDBoLTIwMHYtMjAwaC0yMDB2LTIwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTMwMCA1MDBoNjAwdjIwMGgtNjAwdi0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwODM7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek0yNDYgNDU5bDIxMyAtMjEzbDE0MSAxNDJsMTQxIC0xNDJsMjEzIDIxM2wtMTQyIDE0MWwxNDIgMTQxbC0yMTMgMjEybC0xNDEgLTE0MWwtMTQxIDE0MmwtMjEyIC0yMTNsMTQxIC0xNDF6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwODQ7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTcuNXQtODAgMjk5LjV6TTI3MCA1NTFsMjc2IC0yNzdsNDExIDQxMWwtMTc1IDE3NGwtMjM2IC0yMzZsLTEwMiAxMDJ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek0zNjMgNzAwaDE0NHE0IDAgMTEuNSAtMXQxMSAtMXQ2LjUgM3QzIDl0MSAxMXQzLjUgOC41dDMuNSA2dDUuNSA0dDYuNSAyLjV0OSAxLjV0OSAwLjVoMTEuNWgxMi41cTE5IDAgMzAgLTEwdDExIC0yNiBxMCAtMjIgLTQgLTI4dC0yNyAtMjJxLTUgLTEgLTEyLjUgLTN0LTI3IC0xMy41dC0zNCAtMjd0LTI2LjUgLTQ2dC0xMSAtNjguNWgyMDBxNSAzIDE0IDh0MzEuNSAyNS41dDM5LjUgNDUuNXQzMSA2OXQxNCA5NHEwIDUxIC0xNy41IDg5dC00MiA1OHQtNTguNSAzMnQtNTguNSAxNXQtNTEuNSAzcS0xMDUgMCAtMTcyIC01NnQtNjcgLTE4M3pNNTAwIDMwMGgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA4NjsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTQwMCAzMDBoNDAwdjEwMGgtMTAwdjMwMGgtMzAwdi0xMDBoMTAwdi0yMDBoLTEwMHYtMTAwek01MDAgODAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDg3OyIgZD0iTTAgNTAwdjIwMGgxOTRxMTUgNjAgMzYgMTA0LjV0NTUuNSA4NnQ4OCA2OXQxMjYuNSA0MC41djIwMGgyMDB2LTIwMHE1NCAtMjAgMTEzIC02MHQxMTIuNSAtMTA1LjV0NzEuNSAtMTM0LjVoMjAzdi0yMDBoLTIwM3EtMjUgLTEwMiAtMTE2LjUgLTE4NnQtMTgwLjUgLTExN3YtMTk3aC0yMDB2MTk3cS0xNDAgMjcgLTIwOCAxMDIuNXQtOTggMjAwLjVoLTE5NHpNMjkwIDUwMHEyNCAtNzMgNzkuNSAtMTI3LjV0MTMwLjUgLTc4LjV2MjA2aDIwMCB2LTIwNnExNDkgNDggMjAxIDIwNmgtMjAxdjIwMGgyMDBxLTI1IDc0IC03NiAxMjcuNXQtMTI0IDc2LjV2LTIwNGgtMjAwdjIwM3EtNzUgLTI0IC0xMzAgLTc3LjV0LTc5IC0xMjUuNWgyMDl2LTIwMGgtMjEweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMzU2IDQ2NWwxMzUgMTM1IGwtMTM1IDEzNWwxMDkgMTA5bDEzNSAtMTM1bDEzNSAxMzVsMTA5IC0xMDlsLTEzNSAtMTM1bDEzNSAtMTM1bC0xMDkgLTEwOWwtMTM1IDEzNWwtMTM1IC0xMzV6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwODk7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zMjIgNTM3bDE0MSAxNDEgbDg3IC04N2wyMDQgMjA1bDE0MiAtMTQybC0zNDYgLTM0NXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA5MDsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTE1IDYyIC0yMTVsNTY4IDU2N3EtMTAwIDYyIC0yMTYgNjJxLTE3MSAwIC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMzkxIDI0NXE5NyAtNTkgMjA5IC01OXExNzEgMCAyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNSBxMCAxMTIgLTU5IDIwOXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA5MTsiIGQ9Ik0wIDU0N2w2MDAgNDUzdi0zMDBoNjAwdi0zMDBoLTYwMHYtMzAxeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMDkyOyIgZD0iTTAgNDAwdjMwMGg2MDB2MzAwbDYwMCAtNDUzbC02MDAgLTQ0OHYzMDFoLTYwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik0yMDQgNjAwbDQ1MCA2MDBsNDQ0IC02MDBoLTI5OHYtNjAwaC0zMDB2NjAwaC0yOTZ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwOTQ7IiBkPSJNMTA0IDYwMGgyOTZ2NjAwaDMwMHYtNjAwaDI5OGwtNDQ5IC02MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUwOTU7IiBkPSJNMCAyMDBxNiAxMzIgNDEgMjM4LjV0MTAzLjUgMTkzdDE4NCAxMzh0MjcxLjUgNTkuNXYyNzFsNjAwIC00NTNsLTYwMCAtNDQ4djMwMXEtOTUgLTIgLTE4MyAtMjB0LTE3MCAtNTJ0LTE0NyAtOTIuNXQtMTAwIC0xMzUuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA5NjsiIGQ9Ik0wIDB2NDAwbDEyOSAtMTI5bDI5NCAyOTRsMTQyIC0xNDJsLTI5NCAtMjk0bDEyOSAtMTI5aC00MDB6TTYzNSA3NzdsMTQyIC0xNDJsMjk0IDI5NGwxMjkgLTEyOXY0MDBoLTQwMGwxMjkgLTEyOXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTA5NzsiIGQ9Ik0zNCAxNzZsMjk1IDI5NWwtMTI5IDEyOWg0MDB2LTQwMGwtMTI5IDEzMGwtMjk1IC0yOTV6TTYwMCA2MDB2NDAwbDEyOSAtMTI5bDI5NSAyOTVsMTQyIC0xNDFsLTI5NSAtMjk1bDEyOSAtMTMwaC00MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMDE7IiBkPSJNMjMgNjAwcTAgMTE4IDQ1LjUgMjI0LjV0MTIzIDE4NHQxODQgMTIzdDIyNC41IDQ1LjV0MjI0LjUgLTQ1LjV0MTg0IC0xMjN0MTIzIC0xODR0NDUuNSAtMjI0LjV0LTQ1LjUgLTIyNC41dC0xMjMgLTE4NHQtMTg0IC0xMjN0LTIyNC41IC00NS41dC0yMjQuNSA0NS41dC0xODQgMTIzdC0xMjMgMTg0dC00NS41IDIyNC41ek00NTYgODUxbDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41IHQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzMgMTQuNWgtMjA3cS0yMCAwIC0zMiAtMTQuNXQtOCAtMzQuNXpNNTAwIDMwMGgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEwMjsiIGQ9Ik0wIDgwMGgxMDB2LTIwMGg0MDB2MzAwaDIwMHYtMzAwaDQwMHYyMDBoMTAwdjEwMGgtMTExdjZ0LTEgMTV0LTMgMThsLTM0IDE3MnEtMTEgMzkgLTQxLjUgNjN0LTY5LjUgMjRxLTMyIDAgLTYxIC0xN2wtMjM5IC0xNDRxLTIyIC0xMyAtNDAgLTM1cS0xOSAyNCAtNDAgMzZsLTIzOCAxNDRxLTMzIDE4IC02MiAxOHEtMzkgMCAtNjkuNSAtMjN0LTQwLjUgLTYxbC0zNSAtMTc3cS0yIC04IC0zIC0xOHQtMSAtMTV2LTZoLTExMXYtMTAweiBNMTAwIDBoNDAwdjQwMGgtNDAwdi00MDB6TTIwMCA5MDBxLTMgMCAxNCA0OHQzNSA5NmwxOCA0N2wyMTQgLTE5MWgtMjgxek03MDAgMHY0MDBoNDAwdi00MDBoLTQwMHpNNzMxIDkwMGwyMDIgMTk3cTUgLTEyIDEyIC0zMi41dDIzIC02NHQyNSAtNzJ0NyAtMjguNWgtMjY5eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTAgLTIydjE0M2wyMTYgMTkzcS05IDUzIC0xMyA4M3QtNS41IDk0dDkgMTEzdDM4LjUgMTE0dDc0IDEyNHE0NyA2MCA5OS41IDEwMi41dDEwMyA2OHQxMjcuNSA0OHQxNDUuNSAzNy41dDE4NC41IDQzLjV0MjIwIDU4LjVxMCAtMTg5IC0yMiAtMzQzdC01OSAtMjU4dC04OSAtMTgxLjV0LTEwOC41IC0xMjB0LTEyMiAtNjh0LTEyNS41IC0zMHQtMTIxLjUgLTEuNXQtMTA3LjUgMTIuNXQtODcuNSAxN3QtNTYuNSA3LjVsLTk5IC01NXogTTIzOC41IDMwMC41cTE5LjUgLTYuNSA4Ni41IDc2LjVxNTUgNjYgMzY3IDIzNHE3MCAzOCAxMTguNSA2OS41dDEwMiA3OXQ5OSAxMTEuNXQ4Ni41IDE0OHEyMiA1MCAyNCA2MHQtNiAxOXEtNyA1IC0xNyA1dC0yNi41IC0xNC41dC0zMy41IC0zOS41cS0zNSAtNTEgLTExMy41IC0xMDguNXQtMTM5LjUgLTg5LjVsLTYxIC0zMnEtMzY5IC0xOTcgLTQ1OCAtNDAxcS00OCAtMTExIC0yOC41IC0xMTcuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik0xMTEgNDA4cTAgLTMzIDUgLTYzcTkgLTU2IDQ0IC0xMTkuNXQxMDUgLTEwOC41cTMxIC0yMSA2NCAtMTZ0NjIgMjMuNXQ1NyA0OS41dDQ4IDYxLjV0MzUgNjAuNXEzMiA2NiAzOSAxODQuNXQtMTMgMTU3LjVxNzkgLTgwIDEyMiAtMTY0dDI2IC0xODRxLTUgLTMzIC0yMC41IC02OS41dC0zNy41IC04MC41cS0xMCAtMTkgLTE0LjUgLTI5dC0xMiAtMjZ0LTkgLTIzLjV0LTMgLTE5dDIuNSAtMTUuNXQxMSAtOS41dDE5LjUgLTV0MzAuNSAyLjUgdDQyIDhxNTcgMjAgOTEgMzR0ODcuNSA0NC41dDg3IDY0dDY1LjUgODguNXQ0NyAxMjJxMzggMTcyIC00NC41IDM0MS41dC0yNDYuNSAyNzguNXEyMiAtNDQgNDMgLTEyOXEzOSAtMTU5IC0zMiAtMTU0cS0xNSAyIC0zMyA5cS03OSAzMyAtMTIwLjUgMTAwdC00NCAxNzUuNXQ0OC41IDI1Ny41cS0xMyAtOCAtMzQgLTIzLjV0LTcyLjUgLTY2LjV0LTg4LjUgLTEwNS41dC02MCAtMTM4dC04IC0xNjYuNXEyIC0xMiA4IC00MS41dDggLTQzdDYgLTM5LjUgdDMuNSAtMzkuNXQtMSAtMzMuNXQtNiAtMzEuNXQtMTMuNSAtMjR0LTIxIC0yMC41dC0zMSAtMTJxLTM4IC0xMCAtNjcgMTN0LTQwLjUgNjEuNXQtMTUgODEuNXQxMC41IDc1cS01MiAtNDYgLTgzLjUgLTEwMXQtMzkgLTEwN3QtNy41IC04NXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik0tNjEgNjAwbDI2IDQwcTYgMTAgMjAgMzB0NDkgNjMuNXQ3NC41IDg1LjV0OTcgOTB0MTE2LjUgODMuNXQxMzIuNSA1OXQxNDUuNSAyMy41dDE0NS41IC0yMy41dDEzMi41IC01OXQxMTYuNSAtODMuNXQ5NyAtOTB0NzQuNSAtODUuNXQ0OSAtNjMuNXQyMCAtMzBsMjYgLTQwbC0yNiAtNDBxLTYgLTEwIC0yMCAtMzB0LTQ5IC02My41dC03NC41IC04NS41dC05NyAtOTB0LTExNi41IC04My41dC0xMzIuNSAtNTl0LTE0NS41IC0yMy41IHQtMTQ1LjUgMjMuNXQtMTMyLjUgNTl0LTExNi41IDgzLjV0LTk3IDkwdC03NC41IDg1LjV0LTQ5IDYzLjV0LTIwIDMwek0xMjAgNjAwcTcgLTEwIDQwLjUgLTU4dDU2IC03OC41dDY4IC03Ny41dDg3LjUgLTc1dDEwMyAtNDkuNXQxMjUgLTIxLjV0MTIzLjUgMjB0MTAwLjUgNDUuNXQ4NS41IDcxLjV0NjYuNSA3NS41dDU4IDgxLjV0NDcgNjZxLTEgMSAtMjguNSAzNy41dC00MiA1NXQtNDMuNSA1M3QtNTcuNSA2My41dC01OC41IDU0IHE0OSAtNzQgNDkgLTE2M3EwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODh0LTIxMiA4OHQtODggMjEycTAgODUgNDYgMTU4cS0xMDIgLTg3IC0yMjYgLTI1OHpNMzc3IDY1NnE0OSAtMTI0IDE1NCAtMTkxbDEwNSAxMDVxLTM3IDI0IC03NSA3MnQtNTcgODRsLTIwIDM2eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTA2OyIgZD0iTS02MSA2MDBsMjYgNDBxNiAxMCAyMCAzMHQ0OSA2My41dDc0LjUgODUuNXQ5NyA5MHQxMTYuNSA4My41dDEzMi41IDU5dDE0NS41IDIzLjVxNjEgMCAxMjEgLTE3bDM3IDE0MmgxNDhsLTMxNCAtMTIwMGgtMTQ4bDM3IDE0M3EtODIgMjEgLTE2NSA3MS41dC0xNDAgMTAydC0xMDkuNSAxMTJ0LTcyIDg4LjV0LTI5LjUgNDN6TTEyMCA2MDBxMjEwIC0yODIgMzkzIC0zMzZsMzcgMTQxcS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41IHEwIDg1IDQ2IDE1OHEtMTAyIC04NyAtMjI2IC0yNTh6TTM3NyA2NTZxNDkgLTEyNCAxNTQgLTE5MWw0NyA0N2wyMyA4N3EtMzAgMjggLTU5IDY5dC00NCA2OGwtMTQgMjZ6TTc4MCAxNjFsMzggMTQ1cTIyIDE1IDQ0LjUgMzR0NDYgNDR0NDAuNSA0NHQ0MSA1MC41dDMzLjUgNDMuNXQzMyA0NHQyNC41IDM0cS05NyAxMjcgLTE0MCAxNzVsMzkgMTQ2cTY3IC01NCAxMzEuNSAtMTI1LjV0ODcuNSAtMTAzLjV0MzYgLTUybDI2IC00MGwtMjYgLTQwIHEtNyAtMTIgLTI1LjUgLTM4dC02My41IC03OS41dC05NS41IC0xMDIuNXQtMTI0IC0xMDB0LTE0Ni41IC03OXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEwNzsiIGQ9Ik0tOTcuNSAzNHExMy41IC0zNCA1MC41IC0zNGgxMjk0cTM3IDAgNTAuNSAzNS41dC03LjUgNjcuNWwtNjQyIDEwNTZxLTIwIDMzIC00OCAzNnQtNDggLTI5bC02NDIgLTEwNjZxLTIxIC0zMiAtNy41IC02NnpNMTU1IDIwMGw0NDUgNzIzbDQ0NSAtNzIzaC0zNDV2MTAwaC0yMDB2LTEwMGgtMzQ1ek01MDAgNjAwbDEwMCAtMzAwbDEwMCAzMDB2MTAwaC0yMDB2LTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik0xMDAgMjYydjQxcTAgMjAgMTEgNDQuNXQyNiAzOC41bDM2MyAzMjV2MzM5cTAgNjIgNDQgMTA2dDEwNiA0NHQxMDYgLTQ0dDQ0IC0xMDZ2LTMzOWwzNjMgLTMyNXExNSAtMTQgMjYgLTM4LjV0MTEgLTQ0LjV2LTQxcTAgLTIwIC0xMiAtMjYuNXQtMjkgNS41bC0zNTkgMjQ5di0yNjNxMTAwIC05MSAxMDAgLTExM3YtNjRxMCAtMjEgLTEzIC0yOXQtMzIgMWwtOTQgNzhoLTIyMmwtOTQgLTc4cS0xOSAtOSAtMzIgLTF0LTEzIDI5djY0IHEwIDIyIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTA5OyIgZD0iTTAgNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTAwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXY3NTBoLTExMDB2LTc1MHpNMCA5MDBoMTEwMHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxMDBoLTEwMHYtMTAwaC01MDB2MTAwaC0xMDB2LTEwMGgtMTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTB6TTEwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTEwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6IE0xMDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAwek03MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek03MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek03MDAgNTAwIHYxMDBoMTAwdi0xMDBoLTEwMHpNOTAwIDEwMHYxMDBoMTAwdi0xMDBoLTEwMHpNOTAwIDMwMHYxMDBoMTAwdi0xMDBoLTEwMHpNOTAwIDUwMHYxMDBoMTAwdi0xMDBoLTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTExMDsiIGQ9Ik0wIDIwMHYyMDBoMjU5bDYwMCA2MDBoMjQxdjE5OGwzMDAgLTI5NWwtMzAwIC0zMDB2MTk3aC0xNTlsLTYwMCAtNjAwaC0zNDF6TTAgODAwaDI1OWwxMjIgLTEyMmwxNDEgMTQybC0xODEgMTgwaC0zNDF2LTIwMHpNNjc4IDM4MWwxNDEgMTQybDEyMiAtMTIzaDE1OXYxOThsMzAwIC0yOTVsLTMwMCAtMzAwdjE5N2gtMjQxeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTExOyIgZD0iTTAgNDAwdjYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTExMjsiIGQ9Ik0xMDAgNjAwdjIwMGgzMDB2LTI1MHEwIC0xMTMgNiAtMTQ1cTE3IC05MiAxMDIgLTExN3EzOSAtMTEgOTIgLTExcTM3IDAgNjYuNSA1LjV0NTAgMTUuNXQzNiAyNHQyNCAzMS41dDE0IDM3LjV0NyA0MnQyLjUgNDV0MCA0N3YyNXYyNTBoMzAwdi0yMDBxMCAtNDIgLTMgLTgzdC0xNSAtMTA0dC0zMS41IC0xMTZ0LTU4IC0xMDkuNXQtODkgLTk2LjV0LTEyOSAtNjUuNXQtMTc0LjUgLTI1LjV0LTE3NC41IDI1LjV0LTEyOSA2NS41dC04OSA5Ni41IHQtNTggMTA5LjV0LTMxLjUgMTE2dC0xNSAxMDR0LTMgODN6TTEwMCA5MDB2MzAwaDMwMHYtMzAwaC0zMDB6TTgwMCA5MDB2MzAwaDMwMHYtMzAwaC0zMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNLTMwIDQxMWwyMjcgLTIyN2wzNTIgMzUzbDM1MyAtMzUzbDIyNiAyMjdsLTU3OCA1Nzl6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNNzAgNzk3bDU4MCAtNTc5bDU3OCA1NzlsLTIyNiAyMjdsLTM1MyAtMzUzbC0zNTIgMzUzeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTS0xOTggNzAwbDI5OSAyODNsMzAwIC0yODNoLTIwM3YtNDAwaDM4NWwyMTUgLTIwMGgtODAwdjYwMGgtMTk2ek00MDIgMTAwMGwyMTUgLTIwMGgzODF2LTQwMGgtMTk4bDI5OSAtMjgzbDI5OSAyODNoLTIwMHY2MDBoLTc5NnoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTExNjsiIGQ9Ik0xOCA5MzlxLTUgMjQgMTAgNDJxMTQgMTkgMzkgMTloODk2bDM4IDE2MnE1IDE3IDE4LjUgMjcuNXQzMC41IDEwLjVoOTRxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXQtMTUgLTM1LjV0LTM1IC0xNC41aC01NGwtMjAxIC05NjFxLTIgLTQgLTYgLTEwLjV0LTE5IC0xNy41dC0zMyAtMTFoLTMxdi01MHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1dC0zNS41IDE1dC0xNC41IDM1djUwaC0zMDB2LTUwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTUgdC0zNS41IDE1dC0xNC41IDM1djUwaC01MHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTM1bDQ4IDIwMGgtNjMzcS0zMiAwIC01NC41IDIxdC0yNy41IDQzeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTE3OyIgZD0iTTAgMHY4MDBoMTIwMHYtODAwaC0xMjAwek0wIDkwMHYxMDBoMjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjVoNTAwdi0xMDBoLTEyMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMTg7IiBkPSJNMSAwbDMwMCA3MDBoMTIwMGwtMzAwIC03MDBoLTEyMDB6TTEgNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNWg1MDB2LTIwMGgtMTAwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTExOTsiIGQ9Ik0zMDIgMzAwaDE5OHY2MDBoLTE5OGwyOTggMzAwbDI5OCAtMzAwaC0xOTh2LTYwMGgxOThsLTI5OCAtMzAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTIwOyIgZD0iTTAgNjAwbDMwMCAyOTh2LTE5OGg2MDB2MTk4bDMwMCAtMjk4bC0zMDAgLTI5N3YxOTdoLTYwMHYtMTk3eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTIxOyIgZD0iTTAgMTAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMzEgNDAwbDE3MiA3MzlxNSAyMiAyMyA0MS41dDM4IDE5LjVoNjcycTE5IDAgMzcuNSAtMjIuNXQyMy41IC00NS41bDE3MiAtNzMyaC0xMTM4ek04MDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAweiBNMTAwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMjI7IiBkPSJNLTEwMSA2MDB2NTBxMCAyNCAyNSA0OXQ1MCAzOGwyNSAxM3YtMjUwbC0xMSA1LjV0LTI0IDE0dC0zMCAyMS41dC0yNCAyNy41dC0xMSAzMS41ek05OSA1MDB2MjUwdjVxMCAxMyAwLjUgMTguNXQyLjUgMTN0OCAxMC41dDE1IDNoMjAwbDY3NSAyNTB2LTg1MGwtNjc1IDIwMGgtMzhsNDcgLTI3NnEyIC0xMiAtMyAtMTcuNXQtMTEgLTZ0LTIxIC0wLjVoLThoLTgzcS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NiAzMzcgLTU2IDM1MXogTTExMDAgMjAwdjg1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtODUwcTAgLTIwIC0xNSAtMzV0LTM1IC0xNXEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEyMzsiIGQ9Ik03NCAzNTBxMCAyMSAxMy41IDM1LjV0MzMuNSAxNC41aDE3bDExOCAxNzNsNjMgMzI3cTE1IDc3IDc2IDE0MHQxNDQgODNsLTE4IDMycS02IDE5IDMgMzJ0MjkgMTNoOTRxMjAgMCAyOSAtMTAuNXQzIC0yOS41bC0xOCAtMzdxODMgLTE5IDE0NCAtODIuNXQ3NiAtMTQwLjVsNjMgLTMyN2wxMTggLTE3M2gxN3EyMCAwIDMzLjUgLTE0LjV0MTMuNSAtMzUuNXEwIC0yMCAtMTMgLTQwdC0zMSAtMjdxLTIyIC05IC02MyAtMjN0LTE2Ny41IC0zNyB0LTI1MS41IC0yM3QtMjQ1LjUgMjAuNXQtMTc4LjUgNDEuNWwtNTggMjBxLTE4IDcgLTMxIDI3LjV0LTEzIDQwLjV6TTQ5NyAxMTBxMTIgLTQ5IDQwIC03OS41dDYzIC0zMC41dDYzIDMwLjV0MzkgNzkuNXEtNDggLTYgLTEwMiAtNnQtMTAzIDZ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMjQ7IiBkPSJNMjEgNDQ1bDIzMyAtNDVsLTc4IC0yMjRsMjI0IDc4bDQ1IC0yMzNsMTU1IDE3OWwxNTUgLTE3OWw0NSAyMzNsMjI0IC03OGwtNzggMjI0bDIzNCA0NWwtMTgwIDE1NWwxODAgMTU2bC0yMzQgNDRsNzggMjI1bC0yMjQgLTc4bC00NSAyMzNsLTE1NSAtMTgwbC0xNTUgMTgwbC00NSAtMjMzbC0yMjQgNzhsNzggLTIyNWwtMjMzIC00NGwxNzkgLTE1NnoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik0wIDIwMGgyMDB2NjAwaC0yMDB2LTYwMHpNMzAwIDI3NXEwIC03NSAxMDAgLTc1aDYxcTEyMyAtMTAwIDEzOSAtMTAwaDI1MHE0NiAwIDgzIDU3bDIzOCAzNDRxMjkgMzEgMjkgNzR2MTAwcTAgNDQgLTMwLjUgODQuNXQtNjkuNSA0MC41aC0zMjhxMjggMTE4IDI4IDEyNXYxNTBxMCA0NCAtMzAuNSA4NC41dC02OS41IDQwLjVoLTUwcS0yNyAwIC01MSAtMjB0LTM4IC00OGwtOTYgLTE5OGwtMTQ1IC0xOTZxLTIwIC0yNiAtMjAgLTYzdi00MDB6IE00MDAgMzAwdjM3NWwxNTAgMjEybDEwMCAyMTNoNTB2LTE3NWwtNTAgLTIyNWg0NTB2LTEyNWwtMjUwIC0zNzVoLTIxNGwtMTM2IDEwMGgtMTAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTAgNDAwdjYwMGgyMDB2LTYwMGgtMjAwek0zMDAgNTI1djQwMHEwIDc1IDEwMCA3NWg2MXExMjMgMTAwIDEzOSAxMDBoMjUwcTQ2IDAgODMgLTU3bDIzOCAtMzQ0cTI5IC0zMSAyOSAtNzR2LTEwMHEwIC00NCAtMzAuNSAtODQuNXQtNjkuNSAtNDAuNWgtMzI4cTI4IC0xMTggMjggLTEyNXYtMTUwcTAgLTQ0IC0zMC41IC04NC41dC02OS41IC00MC41aC01MHEtMjcgMCAtNTEgMjB0LTM4IDQ4bC05NiAxOThsLTE0NSAxOTYgcS0yMCAyNiAtMjAgNjN6TTQwMCA1MjVsMTUwIC0yMTJsMTAwIC0yMTNoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0bC0xMzYgLTEwMGgtMTAwdi0zNzV6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNOCAyMDB2NjAwaDIwMHYtNjAwaC0yMDB6TTMwOCAyNzV2NTI1cTAgMTcgMTQgMzUuNXQyOCAyOC41bDE0IDlsMzYyIDIzMHExNCA2IDI1IDZxMTcgMCAyOSAtMTJsMTA5IC0xMTJxMTQgLTE0IDE0IC0zNHEwIC0xOCAtMTEgLTMybC04NSAtMTIxaDMwMnE4NSAwIDEzOC41IC0zOHQ1My41IC0xMTB0LTU0LjUgLTExMXQtMTM4LjUgLTM5aC0xMDdsLTEzMCAtMzM5cS03IC0yMiAtMjAuNSAtNDEuNXQtMjguNSAtMTkuNWgtMzQxIHEtNyAwIC05MCA4MXQtODMgOTR6TTQwOCAyODlsMTAwIC04OWgyOTNsMTMxIDMzOXE2IDIxIDE5LjUgNDF0MjguNSAyMGgyMDNxMTYgMCAyNSAxNXQ5IDM2cTAgMjAgLTkgMzQuNXQtMjUgMTQuNWgtNDU3aC02LjVoLTcuNXQtNi41IDAuNXQtNiAxdC01IDEuNXQtNS41IDIuNXQtNCA0dC00IDUuNXEtNSAxMiAtNSAyMHEwIDE0IDEwIDI3bDE0NyAxODNsLTg2IDgzbC0zMzkgLTIzNnYtNTAzeiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTI4OyIgZD0iTS0xMDEgNjUxcTAgNzIgNTQgMTEwdDEzOSAzN2gzMDJsLTg1IDEyMXEtMTEgMTYgLTExIDMycTAgMjEgMTQgMzRsMTA5IDExM3ExMyAxMiAyOSAxMnExMSAwIDI1IC02bDM2NSAtMjMwcTcgLTQgMTYuNSAtMTAuNXQyNiAtMjZ0MTYuNSAtMzYuNXYtNTI2cTAgLTEzIC04NS41IC05My41dC05My41IC04MC41aC0zNDJxLTE1IDAgLTI4LjUgMjB0LTE5LjUgNDFsLTEzMSAzMzloLTEwNnEtODQgMCAtMTM5IDM5dC01NSAxMTF6TS0xIDYwMWgyMjIgcTE1IDAgMjguNSAtMjAuNXQxOS41IC00MC41bDEzMSAtMzM5aDI5M2wxMDYgODl2NTAybC0zNDIgMjM3bC04NyAtODNsMTQ1IC0xODRxMTAgLTExIDEwIC0yNnEwIC0xMSAtNSAtMjBxLTEgLTMgLTMuNSAtNS41bC00IC00dC01IC0yLjV0LTUuNSAtMS41dC02LjUgLTF0LTYuNSAtMC41aC03LjVoLTYuNWgtNDc2di0xMDB6TTk5OSAyMDF2NjAwaDIwMHYtNjAwaC0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMjk7IiBkPSJNOTcgNzE5bDIzMCAtMzYzcTQgLTYgMTAuNSAtMTUuNXQyNiAtMjV0MzYuNSAtMTUuNWg1MjVxMTMgMCA5NCA4M3Q4MSA5MHYzNDJxMCAxNSAtMjAgMjguNXQtNDEgMTkuNWwtMzM5IDEzMXYxMDZxMCA4NCAtMzkgMTM5dC0xMTEgNTV0LTExMCAtNTMuNXQtMzggLTEzOC41di0zMDJsLTEyMSA4NHEtMTUgMTIgLTMzLjUgMTEuNXQtMzIuNSAtMTMuNWwtMTEyIC0xMTBxLTIyIC0yMiAtNiAtNTN6TTE3MiA3MzlsODMgODZsMTgzIC0xNDYgcTIyIC0xOCA0NyAtNXEzIDEgNS41IDMuNWw0IDR0Mi41IDV0MS41IDUuNXQxIDYuNXQwLjUgNnY3LjV2N3Y0NTZxMCAyMiAyNSAzMXQ1MCAtMC41dDI1IC0zMC41di0yMDJxMCAtMTYgMjAgLTI5LjV0NDEgLTE5LjVsMzM5IC0xMzB2LTI5NGwtODkgLTEwMGgtNTAzek00MDAgMHYyMDBoNjAwdi0yMDBoLTYwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0xIDU4NXEtMTUgLTMxIDcgLTUzbDExMiAtMTEwcTEzIC0xMyAzMiAtMTMuNXQzNCAxMC41bDEyMSA4NWwtMSAtMzAycTAgLTg0IDM4LjUgLTEzOHQxMTAuNSAtNTR0MTExIDU1dDM5IDEzOXYxMDZsMzM5IDEzMXEyMCA2IDQwLjUgMTkuNXQyMC41IDI4LjV2MzQycTAgNyAtODEgOTB0LTk0IDgzaC01MjVxLTE3IDAgLTM1LjUgLTE0dC0yOC41IC0yOGwtMTAgLTE1ek03NiA1NjVsMjM3IDMzOWg1MDNsODkgLTEwMHYtMjk0bC0zNDAgLTEzMCBxLTIwIC02IC00MCAtMjB0LTIwIC0yOXYtMjAycTAgLTIyIC0yNSAtMzF0LTUwIDB0LTI1IDMxdjQ1NnYxNC41dC0xLjUgMTEuNXQtNSAxMnQtOS41IDdxLTI0IDEzIC00NiAtNWwtMTg0IC0xNDZ6TTMwNSAxMTA0djIwMGg2MDB2LTIwMGgtNjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTMxOyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExNjIgMCAyOTkuNSAtODB0MjE3LjUgLTIxOHQ4MCAtMzAwdC04MCAtMjk5LjV0LTIxNy41IC0yMTcuNXQtMjk5LjUgLTgwdC0zMDAgODB0LTIxOCAyMTcuNXQtODAgMjk5LjV6TTMwMCA1MDBoMzAwbC0yIC0xOTRsNDAyIDI5NGwtNDAyIDI5OHYtMTk3aC0yOTh2LTIwMXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEzMjsiIGQ9Ik0wIDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMS41IDQ3LjVxMTIyIDAgMjMyLjUgLTQ3LjV0MTkwLjUgLTEyNy41dDEyNy41IC0xOTAuNXQ0Ny41IC0yMzIuNXEwIC0xNjIgLTgwIC0yOTkuNXQtMjE4IC0yMTcuNXQtMzAwIC04MHQtMjk5LjUgODB0LTIxNy41IDIxNy41dC04MCAyOTkuNXpNMjAwIDYwMGw0MDAgLTI5NHYxOTRoMzAydjIwMWgtMzAwdjE5N3oiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik01IDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMi41IDQ3LjVxMTIxIDAgMjMxLjUgLTQ3LjV0MTkwLjUgLTEyNy41dDEyNy41IC0xOTAuNXQ0Ny41IC0yMzIuNXEwIC0xNjIgLTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTMwMCA4MHQtMjE4IDIxNy41dC04MCAyOTkuNXpNMzAwIDYwMGgyMDB2LTMwMGgyMDB2MzAwaDIwMGwtMzAwIDQwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEzNDsiIGQ9Ik01IDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMi41IDQ3LjVxMTIxIDAgMjMxLjUgLTQ3LjV0MTkwLjUgLTEyNy41dDEyNy41IC0xOTAuNXQ0Ny41IC0yMzIuNXEwIC0xNjIgLTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTMwMCA4MHQtMjE4IDIxNy41dC04MCAyOTkuNXpNMzAwIDYwMGwzMDAgLTQwMGwzMDAgNDAwaC0yMDB2MzAwaC0yMDB2LTMwMGgtMjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTM1OyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0yNTQgNzgwcS04IC0zNCA1LjUgLTkzdDcuNSAtODdxMCAtOSAxNyAtNDR0MTYgLTYwcTEyIDAgMjMgLTUuNSB0MjMgLTE1dDIwIC0xMy41cTIwIC0xMCAxMDggLTQycTIyIC04IDUzIC0zMS41dDU5LjUgLTM4LjV0NTcuNSAtMTFxOCAtMTggLTE1IC01NS41dC0yMCAtNTcuNXExMiAtMjEgMjIuNSAtMzQuNXQyOCAtMjd0MzYuNSAtMTcuNXEwIC02IC0zIC0xNS41dC0zLjUgLTE0LjV0NC41IC0xN3ExMDEgLTIgMjIxIDExMXEzMSAzMCA0NyA0OHQzNCA0OXQyMSA2MnEtMTQgOSAtMzcuNSA5LjV0LTM1LjUgNy41cS0xNCA3IC00OSAxNXQtNTIgMTkgcS05IDAgLTM5LjUgLTAuNXQtNDYuNSAtMS41dC0zOSAtNi41dC0zOSAtMTYuNXEtNTAgLTM1IC02NiAtMTJxLTQgMiAtMy41IDI1LjV0MC41IDI1LjVxLTYgMTMgLTI2LjUgMTd0LTI0LjUgN3EyIDIyIC0yIDQxdC0xNi41IDI4dC0zOC41IC0yMHEtMjMgLTI1IC00MiA0cS0xOSAyOCAtOCA1OHE4IDE2IDIyIDIycTYgLTEgMjYgLTEuNXQzMy41IC00LjV0MTkuNSAtMTNxMTIgLTE5IDMyIC0zNy41dDM0IC0yNy41bDE0IC04cTAgMyA5LjUgMzkuNSB0NS41IDU3LjVxLTQgMjMgMTQuNSA0NC41dDIyLjUgMzEuNXE1IDE0IDEwIDM1dDguNSAzMXQxNS41IDIyLjV0MzQgMjEuNXEtNiAxOCAxMCAzN3E4IDAgMjMuNSAtMS41dDI0LjUgLTEuNXQyMC41IDQuNXQyMC41IDE1LjVxLTEwIDIzIC0zMC41IDQyLjV0LTM4IDMwdC00OSAyNi41dC00My41IDIzcTExIDQxIDEgNDRxMzEgLTEzIDU4LjUgLTE0LjV0MzkuNSAzLjVsMTEgNHE2IDM2IC0xNyA1My41dC02NCAyOC41dC01NiAyMyBxLTE5IC0zIC0zNyAwcS0xNSAtMTIgLTM2LjUgLTIxdC0zNC41IC0xMnQtNDQgLTh0LTM5IC02cS0xNSAtMyAtNDYgMHQtNDUgLTNxLTIwIC02IC01MS41IC0yNS41dC0zNC41IC0zNC41cS0zIC0xMSA2LjUgLTIyLjV0OC41IC0xOC41cS0zIC0zNCAtMjcuNSAtOTF0LTI5LjUgLTc5ek01MTggOTE1cTMgMTIgMTYgMzAuNXQxNiAyNS41cTEwIC0xMCAxOC41IC0xMHQxNCA2dDE0LjUgMTQuNXQxNiAxMi41cTAgLTE4IDggLTQyLjV0MTYuNSAtNDQgdDkuNSAtMjMuNXEtNiAxIC0zOSA1dC01My41IDEwdC0zNi41IDE2eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTAgMTY0LjVxMCAyMS41IDE1IDM3LjVsNjAwIDU5OXEtMzMgMTAxIDYgMjAxLjV0MTM1IDE1NC41cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxMTMgLTE3NSAtMTUxIC0yNjdxLTEyMyAtNzAgLTI1MyAtMjNsLTU5NiAtNTk2cS0xNSAtMTYgLTM2LjUgLTE2dC0zNi41IDE2bC0xMTEgMTEwcS0xNSAxNSAtMTUgMzYuNXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTEzNzsiIGhvcml6LWFkdi14PSIxMjIwIiBkPSJNMCAxOTZ2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0wIDU5NnYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0wIDk5NnYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTYwMCA1OTZoNTAwdjEwMGgtNTAwdi0xMDB6TTgwMCAxOTZoMzAwdjEwMGgtMzAwdi0xMDB6TTkwMCA5OTZoMjAwdjEwMGgtMjAwdi0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTAwIDExMDB2MTAwaDEwMDB2LTEwMGgtMTAwMHpNMTUwIDEwMDBoOTAwbC0zNTAgLTUwMHYtMzAwbC0yMDAgLTIwMHY1MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxMzk7IiBkPSJNMCAyMDB2MjAwaDEyMDB2LTIwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMjAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di00MDBoLTUwMHYxMDBoLTIwMHYtMTAwaC01MDB6IE01MDAgMTAwMGgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik0wIDB2NDAwbDEyOSAtMTI5bDIwMCAyMDBsMTQyIC0xNDJsLTIwMCAtMjAwbDEyOSAtMTI5aC00MDB6TTAgODAwbDEyOSAxMjlsMjAwIC0yMDBsMTQyIDE0MmwtMjAwIDIwMGwxMjkgMTI5aC00MDB2LTQwMHpNNzI5IDMyOWwxNDIgMTQybDIwMCAtMjAwbDEyOSAxMjl2LTQwMGgtNDAwbDEyOSAxMjl6TTcyOSA4NzFsMjAwIDIwMGwtMTI5IDEyOWg0MDB2LTQwMGwtMTI5IDEyOWwtMjAwIC0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNDE7IiBkPSJNMCA1OTZxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODIgNTk2cTAgLTE3MiAxMjEuNSAtMjkzdDI5Mi41IC0xMjF0MjkyLjUgMTIxdDEyMS41IDI5M3EwIDE3MSAtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMjkxIDY1NSBxMCAyMyAxNS41IDM4LjV0MzguNSAxNS41dDM5IC0xNnQxNiAtMzhxMCAtMjMgLTE2IC0zOXQtMzkgLTE2cS0yMiAwIC0zOCAxNnQtMTYgMzl6TTQwMCA4NTBxMCAyMiAxNiAzOC41dDM5IDE2LjVxMjIgMCAzOCAtMTZ0MTYgLTM5dC0xNiAtMzl0LTM4IC0xNnEtMjMgMCAtMzkgMTYuNXQtMTYgMzguNXpNNTEzIDYwOXEwIDMyIDIxIDU2LjV0NTIgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIyIDE2IDM4LjV0MzkgMTYuNSBxMjIgMCAzOCAtMTZ0MTYgLTM5dC0xNiAtMzl0LTM4IC0xNnEtMTYgMCAtMjkgMTBsLTU1IC0xNDVxMTcgLTIyIDE3IC01MXEwIC0zNiAtMjUuNSAtNjEuNXQtNjEuNSAtMjUuNXEtMzcgMCAtNjIuNSAyNS41dC0yNS41IDYxLjV6TTgwMCA2NTVxMCAyMiAxNiAzOHQzOSAxNnQzOC41IC0xNS41dDE1LjUgLTM4LjV0LTE2IC0zOXQtMzggLTE2cS0yMyAwIC0zOSAxNnQtMTYgMzl6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNLTQwIDM3NXEtMTMgLTk1IDM1IC0xNzNxMzUgLTU3IDk0IC04OXQxMjkgLTMycTYzIDAgMTE5IDI4cTMzIDE2IDY1IDQwLjV0NTIuNSA0NS41dDU5LjUgNjRxNDAgNDQgNTcgNjFsMzk0IDM5NHEzNSAzNSA0NyA4NHQtMyA5NnEtMjcgODcgLTExNyAxMDRxLTIwIDIgLTI5IDJxLTQ2IDAgLTc5LjUgLTE3dC02Ny41IC01MWwtMzg4IC0zOTZsLTcgLTdsNjkgLTY3bDM3NyAzNzNxMjAgMjIgMzkgMzhxMjMgMjMgNTAgMjNxMzggMCA1MyAtMzYgcTE2IC0zOSAtMjAgLTc1bC01NDcgLTU0N3EtNTIgLTUyIC0xMjUgLTUycS01NSAwIC0xMDAgMzN0LTU0IDk2cS01IDM1IDIuNSA2NnQzMS41IDYzdDQyIDUwdDU2IDU0cTI0IDIxIDQ0IDQxbDM0OCAzNDhxNTIgNTIgODIuNSA3OS41dDg0IDU0dDEwNy41IDI2LjVxMjUgMCA0OCAtNHE5NSAtMTcgMTU0IC05NC41dDUxIC0xNzUuNXEtNyAtMTAxIC05OCAtMTkybC0yNTIgLTI0OWwtMjUzIC0yNTZsNyAtN2w2OSAtNjBsNTE3IDUxMSBxNjcgNjcgOTUgMTU3dDExIDE4M3EtMTYgODcgLTY3IDE1NHQtMTMwIDEwM3EtNjkgMzMgLTE1MiAzM3EtMTA3IDAgLTE5NyAtNTVxLTQwIC0yNCAtMTExIC05NWwtNTEyIC01MTJxLTY4IC02OCAtODEgLTE2M3oiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE0MzsiIGQ9Ik03OSA3ODRxMCAxMzEgOTkgMjI5LjV0MjMwIDk4LjVxMTQ0IDAgMjQyIC0xMjlxMTAzIDEyOSAyNDUgMTI5cTEzMCAwIDIyNyAtOTguNXQ5NyAtMjI5LjVxMCAtNDYgLTE3LjUgLTkxdC02MSAtOTl0LTc3IC04OS41dC0xMDQuNSAtMTA1LjVxLTE5NyAtMTkxIC0yOTMgLTMyMmwtMTcgLTIzbC0xNiAyM3EtNDMgNTggLTEwMCAxMjIuNXQtOTIgOTkuNXQtMTAxIDEwMGwtODQuNSA4NC41dC02OCA3NHQtNjAgNzh0LTMzLjUgNzAuNXQtMTUgNzh6IE0yNTAgNzg0cTAgLTI3IDMwLjUgLTcwdDYxLjUgLTc1LjV0OTUgLTk0LjVsMjIgLTIycTkzIC05MCAxOTAgLTIwMXE4MiA5MiAxOTUgMjAzbDEyIDEycTY0IDYyIDk3LjUgOTd0NjQuNSA3OXQzMSA3MnEwIDcxIC00OCAxMTkuNXQtMTA2IDQ4LjVxLTczIDAgLTEzMSAtODNsLTExOCAtMTcxbC0xMTQgMTc0cS01MSA4MCAtMTI0IDgwcS01OSAwIC0xMDguNSAtNDkuNXQtNDkuNSAtMTE4LjV6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNDQ7IiBkPSJNNTcgMzUzcTAgLTk0IDY2IC0xNjBsMTQxIC0xNDFxNjYgLTY2IDE1OSAtNjZxOTUgMCAxNTkgNjZsMjgzIDI4M3E2NiA2NiA2NiAxNTl0LTY2IDE1OWwtMTQxIDE0MXEtMTIgMTIgLTE5IDE3bC0xMDUgLTEwNWwyMTIgLTIxMmwtMzg5IC0zODlsLTI0NyAyNDhsOTUgOTVsLTE4IDE4cS00NiA0NSAtNzUgMTAxbC01NSAtNTVxLTY2IC02NiAtNjYgLTE1OXpNMjY5IDcwNnEwIC05MyA2NiAtMTU5bDE0MSAtMTQxbDE5IC0xN2wxMDUgMTA1IGwtMjEyIDIxMmwzODkgMzg5bDI0NyAtMjQ3bC05NSAtOTZsMTggLTE4cTQ2IC00NiA3NyAtOTlsMjkgMjlxMzUgMzUgNjIuNSA4OHQyNy41IDk2cTAgOTMgLTY2IDE1OWwtMTQxIDE0MXEtNjYgNjYgLTE1OSA2NnEtOTUgMCAtMTU5IC02NmwtMjgzIC0yODNxLTY2IC02NCAtNjYgLTE1OXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE0NTsiIGQ9Ik0yMDAgMTAwdjk1M3EwIDIxIDMwIDQ2dDgxIDQ4dDEyOSAzOHQxNjMgMTV0MTYyIC0xNXQxMjcgLTM4dDc5IC00OHQyOSAtNDZ2LTk1M3EwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtNjAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMzAwIDMwMGg2MDB2NzAwaC02MDB2LTcwMHpNNDk2IDE1MHEwIC00MyAzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41dDMwLjUgNzMuNXQtMzAuNSA3My41dC03My41IDMwLjUgdC03My41IC0zMC41dC0zMC41IC03My41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTQ2OyIgZD0iTTAgMGwzMDMgMzgwbDIwNyAyMDhsLTIxMCAyMTJoMzAwbDI2NyAyNzlsLTM1IDM2cS0xNSAxNCAtMTUgMzV0MTUgMzVxMTQgMTUgMzUgMTV0MzUgLTE1bDI4MyAtMjgycTE1IC0xNSAxNSAtMzZ0LTE1IC0zNXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0zNiAzNWwtMjc5IC0yNjd2LTMwMGwtMjEyIDIxMGwtMjA4IC0yMDd6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNMjk1IDQzM2gxMzlxNSAtNzcgNDguNSAtMTI2LjV0MTE3LjUgLTY0LjV2MzM1bC0yNyA3cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYyLjUgNTJ0LTQwIDcyLjV0LTE2LjUgOTlxMCA5MiA0NCAxNTkuNXQxMDkgMTAxdDE0NCA0MC41djc4aDEwMHYtNzlxMzggLTQgNzIuNSAtMTMuNXQ3NS41IC0zMS41dDcxIC01My41dDUxLjUgLTg0dDI0LjUgLTExOC41aC0xNTlxLTggNzIgLTM1IDEwOS41dC0xMDEgNTAuNXYtMzA3bDY0IC0xNCBxMzQgLTcgNjQgLTE2LjV0NzAgLTMxLjV0NjcuNSAtNTJ0NDcuNSAtODAuNXQyMCAtMTEyLjVxMCAtMTM5IC04OSAtMjI0dC0yNDQgLTk2di03N2gtMTAwdjc4cS0xNTIgMTcgLTIzNyAxMDRxLTQwIDQwIC01Mi41IDkzLjV0LTE1LjUgMTM5LjV6TTQ2NiA4ODlxMCAtMjkgOCAtNTF0MTYuNSAtMzR0MjkuNSAtMjIuNXQzMSAtMTMuNXQzOCAtMTBxNyAtMiAxMSAtM3YyNzRxLTYxIC04IC05Ny41IC0zNy41dC0zNi41IC0xMDIuNXpNNzAwIDIzNyBxMTcwIDE4IDE3MCAxNTFxMCA2NCAtNDQgOTkuNXQtMTI2IDYwLjV2LTMxMXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik0xMDAgNjAwdjEwMGgxNjZxLTI0IDQ5IC00NCAxMDRxLTEwIDI2IC0xNC41IDU1LjV0LTMgNzIuNXQyNSA5MHQ2OC41IDg3cTk3IDg4IDI2MyA4OHExMjkgMCAyMzAgLTg5dDEwMSAtMjA4aC0xNTNxMCA1MiAtMzQgODkuNXQtNzQgNTEuNXQtNzYgMTRxLTM3IDAgLTc5IC0xNC41dC02MiAtMzUuNXEtNDEgLTQ0IC00MSAtMTAxcTAgLTExIDIuNSAtMjQuNXQ1LjUgLTI0dDkuNSAtMjYuNXQxMC41IC0yNXQxNCAtMjcuNXQxNCAtMjUuNSB0MTUuNSAtMjd0MTMuNSAtMjRoMjQydi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk0cS00MSAtNTkgLTk5IC0xMTNxMzUgMTEgODQgMTh0NzAgN3EzMiAxIDEwMiAtMTZ0MTA0IC0xN3E3NiAwIDEzNiAzMGw1MCAtMTQ3cS00MSAtMjUgLTgwLjUgLTM2LjV0LTU5IC0xM3QtNjEuNSAtMS41cS0yMyAwIC0xMjggMzN0LTE1NSAyOXEtMzkgLTQgLTgyIC0xN3QtNjYgLTI1bC0yNCAtMTFsLTU1IDE0NWwxNi41IDExdDE1LjUgMTAgdDEzLjUgOS41dDE0LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjV0LTMwIDE0Mi41aC0yMjF6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNNjAyIDkwMGwyOTggMzAwbDI5OCAtMzAwaC0xOTh2LTkwMGgtMjAwdjkwMGgtMTk4eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTIgMzAwaDE5OHY5MDBoMjAwdi05MDBoMTk4bC0yOTggLTMwMHpNNzAwIDB2MjAwaDEwMHYtMTAwaDIwMHYtMTAwaC0zMDB6TTcwMCA0MDB2MTAwaDMwMHYtMjAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djEwMGgtMjAwek03MDAgNzAwdjUwMGgzMDB2LTUwMGgtMTAwdjEwMGgtMTAwdi0xMDBoLTEwMHpNODAxIDkwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik0yIDMwMGgxOTh2OTAwaDIwMHYtOTAwaDE5OGwtMjk4IC0zMDB6TTcwMCAwdjUwMGgzMDB2LTUwMGgtMTAwdjEwMGgtMTAwdi0xMDBoLTEwMHpNNzAwIDcwMHYyMDBoMTAwdi0xMDBoMjAwdi0xMDBoLTMwMHpNNzAwIDExMDB2MTAwaDMwMHYtMjAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djEwMGgtMjAwek04MDEgMjAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTIgMzAwbDI5OCAtMzAwbDI5OCAzMDBoLTE5OHY5MDBoLTIwMHYtOTAwaC0xOTh6TTgwMCAxMDB2NDAwaDMwMHYtNTAwaC0xMDB2MTAwaC0yMDB6TTgwMCAxMTAwdjEwMGgyMDB2LTUwMGgtMTAwdjQwMGgtMTAwek05MDEgMjAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTU0OyIgZD0iTTIgMzAwbDI5OCAtMzAwbDI5OCAzMDBoLTE5OHY5MDBoLTIwMHYtOTAwaC0xOTh6TTgwMCA0MDB2MTAwaDIwMHYtNTAwaC0xMDB2NDAwaC0xMDB6TTgwMCA4MDB2NDAwaDMwMHYtNTAwaC0xMDB2MTAwaC0yMDB6TTkwMSA5MDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNNzAwIDEwMHYyMDBoNTAwdi0yMDBoLTUwMHpNNzAwIDQwMHYyMDBoNDAwdi0yMDBoLTQwMHpNNzAwIDcwMHYyMDBoMzAwdi0yMDBoLTMwMHpNNzAwIDEwMDB2MjAwaDIwMHYtMjAwaC0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNNzAwIDEwMHYyMDBoMjAwdi0yMDBoLTIwMHpNNzAwIDQwMHYyMDBoMzAwdi0yMDBoLTMwMHpNNzAwIDcwMHYyMDBoNDAwdi0yMDBoLTQwMHpNNzAwIDEwMDB2MjAwaDUwMHYtMjAwaC01MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41aDMwMHExNjIgMCAyODEgLTExOC41dDExOSAtMjgxLjV2LTMwMHEwIC0xNjUgLTExOC41IC0yODIuNXQtMjgxLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMCA0MDB2MzAwcTAgMTYzIDExOSAyODEuNXQyODEgMTE4LjVoMzAwcTE2NSAwIDI4Mi41IC0xMTcuNXQxMTcuNSAtMjgyLjV2LTMwMHEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2MyAwIC0yODEuNSAxMTcuNXQtMTE4LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6TTQwMCAzMDBsMzMzIDI1MGwtMzMzIDI1MHYtNTAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTU5OyIgZD0iTTAgNDAwdjMwMHEwIDE2MyAxMTcuNSAyODEuNXQyODIuNSAxMTguNWgzMDBxMTYzIDAgMjgxLjUgLTExOXQxMTguNSAtMjgxdi0zMDBxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjV0LTExNy41IDI4Mi41ek0yMDAgMzAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNSBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0zMDAgNzAwbDI1MCAtMzMzbDI1MCAzMzNoLTUwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE2MDsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMzAwcTE2NSAwIDI4Mi41IC0xMTcuNXQxMTcuNSAtMjgyLjV2LTMwMHEwIC0xNjIgLTExOC41IC0yODF0LTI4MS41IC0xMTloLTMwMHEtMTY1IDAgLTI4Mi41IDExOC41dC0xMTcuNSAyODEuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNMzAwIDQwMGg1MDBsLTI1MCAzMzN6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNjE7IiBkPSJNMCA0MDB2MzAwaDMwMHYyMDBsNDAwIC0zNTBsLTQwMCAtMzUwdjIwMGgtMzAwek01MDAgMHYyMDBoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTUwMHYyMDBoNDAwcTE2NSAwIDI4Mi41IC0xMTcuNXQxMTcuNSAtMjgyLjV2LTMwMHEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC00MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNjI7IiBkPSJNMjE2IDUxOXExMCAtMTkgMzIgLTE5aDMwMnEtMTU1IC00MzggLTE2MCAtNDU4cS01IC0yMSA0IC0zMmw5IC04bDkgLTFxMTMgMCAyNiAxNmw1MzggNjMwcTE1IDE5IDYgMzZxLTggMTggLTMyIDE2aC0zMDBxMSA0IDc4IDIxOS41dDc5IDIyNy41cTIgMTcgLTYgMjdsLTggOGgtOXEtMTYgMCAtMjUgLTE1cS00IC01IC05OC41IC0xMTEuNXQtMjI4IC0yNTd0LTIwOS41IC0yMzguNXEtMTcgLTE5IC03IC00MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE2MzsiIGQ9Ik0wIDQwMHEwIC0xNjUgMTE3LjUgLTI4Mi41dDI4Mi41IC0xMTcuNWgzMDBxNDcgMCAxMDAgMTV2MTg1aC01MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoNTAwdjE4NXEtMTQgNCAtMTE0IDcuNXQtMTkzIDUuNWwtOTMgMnEtMTY1IDAgLTI4Mi41IC0xMTcuNXQtMTE3LjUgLTI4Mi41di0zMDB6TTYwMCA0MDB2MzAwaDMwMHYyMDBsNDAwIC0zNTBsLTQwMCAtMzUwdjIwMGgtMzAweiAiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE2NDsiIGQ9Ik0wIDQwMHEwIC0xNjUgMTE3LjUgLTI4Mi41dDI4Mi41IC0xMTcuNWgzMDBxMTYzIDAgMjgxLjUgMTE3LjV0MTE4LjUgMjgyLjV2OThsLTc4IDczbC0xMjIgLTEyM3YtMTQ4cTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTU2bDExOCAxMjJsLTc0IDc4aC0xMDBxLTE2NSAwIC0yODIuNSAtMTE3LjV0LTExNy41IC0yODIuNSB2LTMwMHpNNDk2IDcwOWwzNTMgMzQybC0xNDkgMTQ5aDUwMHYtNTAwbC0xNDkgMTQ5bC0zNDIgLTM1M3oiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE2NTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTQwNiA2MDAgcTAgODAgNTcgMTM3dDEzNyA1N3QxMzcgLTU3dDU3IC0xMzd0LTU3IC0xMzd0LTEzNyAtNTd0LTEzNyA1N3QtNTcgMTM3eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTY2OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgODAwbDQ0NSAtNTAwbDQ1MCA1MDBoLTI5NXY0MDBoLTMwMHYtNDAwaC0zMDB6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTY3OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgNzAwaDMwMHYtMzAwaDMwMHYzMDBoMjk1bC00NDUgNTAwek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE2ODsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMTAwIDcwNWwzMDUgLTMwNWw1OTYgNTk2bC0xNTQgMTU1bC00NDIgLTQ0MmwtMTUwIDE1MXpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNjk7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA5ODhsOTcgLTk4bDIxMiAyMTNsLTk3IDk3ek0yMDAgNDAxaDcwMHY2OTlsLTI1MCAtMjM5bC0xNDkgMTQ5bC0yMTIgLTIxMmwxNDkgLTE0OXpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNzA7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTIwMCA2MTJsMjEyIC0yMTJsOTggOTdsLTIxMyAyMTJ6TTMwMCAxMjAwbDIzOSAtMjUwbC0xNDkgLTE0OWwyMTIgLTIxMmwxNDkgMTQ4bDI0OCAtMjM3djcwMGgtNjk5ek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0yMyA0MTVsMTE3NyA3ODR2LTEwNzlsLTQ3NSAyNzJsLTMxMCAtMzkzdjQxNmgtMzkyek00OTQgMjEwbDY3MiA5MzhsLTY3MiAtNzEydi0yMjZ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtODUwcTAgLTIxIC0xNSAtMzUuNXQtMzUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE3MzsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0yMThsLTI3NiAtMjc1bC0xMjAgMTIwbC0xMjYgLTEyN2gtMzc4di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTU4MSAzMDZsMTIzIDEyM2wxMjAgLTEyMGwzNTMgMzUybDEyMyAtMTIzbC00NzUgLTQ3NnpNNjAwIDEwMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtMjY5bC0xMDMgLTEwM2wtMTcwIDE3MGwtMjk4IC0yOThoLTMyOXYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHpNNzAwIDEzM2wxNzAgMTcwbC0xNzAgMTcwbDEyNyAxMjdsMTcwIC0xNzBsMTcwIDE3MGwxMjcgLTEyOGwtMTcwIC0xNjlsMTcwIC0xNzAgbC0xMjcgLTEyN2wtMTcwIDE3MGwtMTcwIC0xNzB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNzU7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtMzAwaC00MDB2LTIwMGgtNTAwdi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAzMDBsMzAwIC0zMDBsMzAwIDMwMGgtMjAwdjMwMGgtMjAwdi0zMDBoLTIwMHpNNjAwIDEwMDB2MjAwaDEwMHYtMjAwaC0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNzY7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtNDAybC0yMDAgMjAwbC0yOTggLTI5OGgtNDAydi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAzMDBoMjAwdi0zMDBoMjAwdjMwMGgyMDBsLTMwMCAzMDB6TTYwMCAxMDAwdjIwMGgxMDB2LTIwMGgtMTAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTc3OyIgZD0iTTAgMjUwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXY1NTBoLTEyMDB2LTU1MHpNMCA5MDBoMTIwMHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTExMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHpNMTAwIDMwMHYyMDBoNDAwdi0yMDBoLTQwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE3ODsiIGQ9Ik0wIDQwMGwzMDAgMjk4di0xOThoNDAwdi0yMDBoLTQwMHYtMTk4ek0xMDAgODAwdjIwMGgxMDB2LTIwMGgtMTAwek0zMDAgODAwdjIwMGgxMDB2LTIwMGgtMTAwek01MDAgODAwdjIwMGg0MDB2MTk4bDMwMCAtMjk4bC0zMDAgLTI5OHYxOThoLTQwMHpNODAwIDMwMHYyMDBoMTAwdi0yMDBoLTEwMHpNMTAwMCAzMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNMTAwIDcwMHY0MDBsNTAgMTAwbDUwIC0xMDB2LTMwMGgxMDB2MzAwbDUwIDEwMGw1MCAtMTAwdi0zMDBoMTAwdjMwMGw1MCAxMDBsNTAgLTEwMHYtNDAwbC0xMDAgLTIwM3YtNDQ3cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQ0N3pNODAwIDU5N3EwIC0yOSAxMC41IC01NS41dDI1IC00M3QyOSAtMjguNXQyNS41IC0xOGwxMCAtNXYtMzk3cTAgLTIxIDE0LjUgLTM1LjUgdDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMTA2cTAgMzEgLTE4IDQwLjV0LTQ0IC03LjVsLTI3NiAtMTE3cS0yNSAtMTYgLTQzLjUgLTUwLjV0LTE4LjUgLTY1LjV2LTM1OXoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE4MDsiIGQ9Ik0xMDAgMGg0MDB2NTZxLTc1IDAgLTg3LjUgNnQtMTIuNSA0NHYzOTRoNTAwdi0zOTRxMCAtMzggLTEyLjUgLTQ0dC04Ny41IC02di01Nmg0MDB2NTZxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY4ODhxMCAyMiAyNSAzNC41dDUwIDEzLjVsMjUgMnY1NmgtNDAwdi01NnE3NSAwIDg3LjUgLTZ0MTIuNSAtNDR2LTM5NGgtNTAwdjM5NHEwIDM4IDEyLjUgNDR0ODcuNSA2djU2aC00MDB2LTU2cTQgMCAxMSAtMC41IHQyNCAtM3QzMCAtN3QyNCAtMTV0MTEgLTI0LjV2LTg4OHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtNTZ6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0zMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNMTAwIDEwMGg0MDBsMjAwIDIwMGgxMDVsMjk1IDk4di0yOThoLTQyNWwtMTAwIC0xMDBoLTM3NXpNMTAwIDMwMHYyMDBoMzAwdi0yMDBoLTMwMHpNMTAwIDYwMHYyMDBoMzAwdi0yMDBoLTMwMHogTTEwMCAxMDAwaDQwMGwyMDAgLTIwMHYtOThsMjk1IDk4aDEwNXYyMDBoLTQyNWwtMTAwIDEwMGgtMzc1ek03MDAgNDAydjE2M2w0MDAgMTMzdi0xNjN6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxODI7IiBkPSJNMTYuNSA5NzQuNXEwLjUgLTIxLjUgMTYgLTkwdDQ2LjUgLTE0MHQxMDQgLTE3Ny41dDE3NSAtMjA4cTEwMyAtMTAzIDIwNy41IC0xNzZ0MTgwIC0xMDMuNXQxMzcgLTQ3dDkyLjUgLTE2LjVsMzEgMWwxNjMgMTYycTE2IDE3IDEzIDQwLjV0LTIyIDM3LjVsLTE5MiAxMzZxLTE5IDE0IC00NSAxMnQtNDIgLTE5bC0xMTkgLTExOHEtMTQzIDEwMyAtMjY3IDIyN3EtMTI2IDEyNiAtMjI3IDI2OGwxMTggMTE4cTE3IDE3IDIwIDQxLjUgdC0xMSA0NC41bC0xMzkgMTk0cS0xNCAxOSAtMzYuNSAyMnQtNDAuNSAtMTRsLTE2MiAtMTYycS0xIC0xMSAtMC41IC0zMi41eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTgzOyIgZD0iTTAgNTB2MjEycTAgMjAgMTAuNSA0NS41dDI0LjUgMzkuNWwzNjUgMzAzdjUwcTAgNCAxIDEwLjV0MTIgMjIuNXQzMCAyOC41dDYwIDIzdDk3IDEwLjV0OTcgLTEwdDYwIC0yMy41dDMwIC0yNy41dDEyIC0yNGwxIC0xMHYtNTBsMzY1IC0zMDNxMTQgLTE0IDI0LjUgLTM5LjV0MTAuNSAtNDUuNXYtMjEycTAgLTIxIC0xNSAtMzUuNXQtMzUgLTE0LjVoLTExMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDcxMiBxMCAtMjEgMTQuNSAtMzMuNXQzNC41IC04LjVsMjAyIDMzcTIwIDQgMzQuNSAyMXQxNC41IDM4djE0NnExNDEgMjQgMzAwIDI0dDMwMCAtMjR2LTE0NnEwIC0yMSAxNC41IC0zOHQzNC41IC0yMWwyMDIgLTMzcTIwIC00IDM0LjUgOC41dDE0LjUgMzMuNXYyMDBxLTYgOCAtMTkgMjAuNXQtNjMgNDV0LTExMiA1N3QtMTcxIDQ1dC0yMzUgMjAuNXEtOTIgMCAtMTc1IC0xMC41dC0xNDEuNSAtMjd0LTEwOC41IC0zNi41dC04MS41IC00MCB0LTUzLjUgLTM2LjV0LTMxIC0yNy41bC05IC0xMHYtMjAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTg0OyIgZD0iTTEwMCAwdjEwMGgxMTAwdi0xMDBoLTExMDB6TTE3NSAyMDBoOTUwbC0xMjUgMTUwdjI1MGwxMDAgMTAwdjQwMGgtMTAwdi0yMDBoLTEwMHYyMDBoLTIwMHYtMjAwaC0xMDB2MjAwaC0yMDB2LTIwMGgtMTAwdjIwMGgtMTAwdi00MDBsMTAwIC0xMDB2LTI1MHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE4NTsiIGQ9Ik0xMDAgMGgzMDB2NDAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTQwMHpNNTAwIDB2MTAwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDAwaC0zMDB6TTkwMCAwdjcwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di03MDBoLTMwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgzMDB2MzAwaC0yMDB2MTAwaDIwMHYxMDBoLTMwMHYtMzAwaDIwMHYtMTAwaC0yMDB2LTEwMHpNNjAwIDMwMGgyMDB2MTAwaDEwMHYzMDBoLTEwMHYxMDBoLTIwMHYtNTAwIHpNNzAwIDQwMHYzMDBoMTAwdi0zMDBoLTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE4NzsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgxMDB2MjAwaDEwMHYtMjAwaDEwMHY1MDBoLTEwMHYtMjAwaC0xMDB2MjAwaC0xMDB2LTUwMHpNNjAwIDMwMGgyMDB2MTAwaDEwMHYzMDBoLTEwMHYxMDBoLTIwMHYtNTAwIHpNNzAwIDQwMHYzMDBoMTAwdi0zMDBoLTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE4ODsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgzMDB2MTAwaC0yMDB2MzAwaDIwMHYxMDBoLTMwMHYtNTAwek02MDAgMzAwaDMwMHYxMDBoLTIwMHYzMDBoMjAwdjEwMGgtMzAwdi01MDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxODk7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCA1NTBsMzAwIC0xNTB2MzAwek02MDAgNDAwbDMwMCAxNTBsLTMwMCAxNTB2LTMwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE5MDsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMHY1MDBoNzAwdi01MDBoLTcwMHpNMzAwIDQwMGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB2LTMwMHpNNTc1IDU0OSBxMCAtNjUgMjcgLTEwN3Q2OCAtNDJoMTMwdjMwMGgtMTMwcS0zOCAwIC02Ni41IC00M3QtMjguNSAtMTA4eiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTkxOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYzMDBoLTIwMHYxMDBoMjAwdjEwMGgtMzAwdi0zMDBoMjAwdi0xMDBoLTIwMHYtMTAwek02MDEgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek03MDAgNzAwaDEwMCB2LTQwMGgxMDB2NTAwaC0yMDB2LTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgzMDB2NDAwaC0yMDB2MTAwaC0xMDB2LTUwMHpNMzAxIDQwMHYyMDBoMTAwdi0yMDBoLTEwMHpNNjAxIDMwMGgxMDB2MTAwaC0xMDB2LTEwMHpNNzAwIDcwMGgxMDAgdi00MDBoMTAwdjUwMGgtMjAwdi0xMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxOTM7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCA3MDB2MTAwaDMwMHYtMzAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djIwMGgtMjAwek0yMDEgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek02MDEgMzAwdjEwMGgxMDB2LTEwMGgtMTAweiBNNzAwIDcwMHYxMDBoMjAwdi01MDBoLTEwMHY0MDBoLTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTQwMCA1MDB2MjAwIGwxMDAgMTAwaDMwMHYtMTAwaC0zMDB2LTIwMGgzMDB2LTEwMGgtMzAweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTAgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTgyIDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDAwIDQwMHY0MDBoMzAwIGwxMDAgLTEwMHYtMTAwaC0xMDB2MTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMjAwdi0xMDBoLTEwMHpNNzAwIDQwMHYxMDBoMTAwdi0xMDBoLTEwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE5NzsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoMjIydjMwMGg0MDB2LTMwMGgxMjhxMTIwIDAgMjA1IDg2dDg1IDIwOHEwIDEyMCAtODUgMjA2LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41ek0zMDAgMjAwaDIwMHYzMDBoMjAwdi0zMDAgaDIwMGwtMzAwIC0zMDB6IiAvPgotPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNLTE0IDQ5NHEwIC04MCA1Ni41IC0xMzd0MTM1LjUgLTU3aDhsNDE0IDQxNGw0MDMgLTQwM3E5NCAyNiAxNTQuNSAxMDR0NjAuNSAxNzhxMCAxMjEgLTg1IDIwNy41dC0yMDUgODYuNXEtNDYgMCAtOTAgLTE0cS00NCA5NyAtMTM0LjUgMTU2LjV0LTIwMC41IDU5LjVxLTE1MiAwIC0yNjAgLTEwNy41dC0xMDggLTI2MC41cTAgLTI1IDIgLTM3cS02NiAtMTQgLTEwOC41IC02Ny41dC00Mi41IC0xMjIuNXpNMzAwIDIwMGwzMDAgMzAwIGwzMDAgLTMwMGgtMjAwdi0zMDBoLTIwMHYzMDBoLTIwMHoiIC8+Ci08Z2x5cGggdW5pY29kZT0iJiN4ZTE5OTsiIGQ9Ik0xMDAgMjAwaDQwMHYtMTU1bC03NSAtNDVoMzUwbC03NSA0NXYxNTVoNDAwbC0yNzAgMzAwaDE3MGwtMjcwIDMwMGgxNzBsLTMwMCAzMzNsLTMwMCAtMzMzaDE3MGwtMjcwIC0zMDBoMTcweiIgLz4KLTxnbHlwaCB1bmljb2RlPSImI3hlMjAwOyIgZD0iTTEyMSA3MDBxMCAtNTMgMjguNSAtOTd0NzUuNSAtNjVxLTQgLTE2IC00IC0zOHEwIC03NCA1Mi41IC0xMjYuNXQxMjYuNSAtNTIuNXE1NiAwIDEwMCAzMHYtMzA2bC03NSAtNDVoMzUwbC03NSA0NXYzMDZxNDYgLTMwIDEwMCAtMzBxNzQgMCAxMjYuNSA1Mi41dDUyLjUgMTI2LjVxMCAyNCAtOSA1NXE1MCAzMiA3OS41IDgzdDI5LjUgMTEycTAgOTAgLTYxLjUgMTU1LjV0LTE1MC41IDcxLjVxLTI2IDg5IC05OS41IDE0NS41IHQtMTY3LjUgNTYuNXEtMTE2IDAgLTE5Ny41IC04MS41dC04MS41IC0xOTcuNXEwIC00IDEgLTEydDEgLTExcS0xNCAyIC0yMyAycS03NCAwIC0xMjYuNSAtNTIuNXQtNTIuNSAtMTI2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwNWY7IiBob3Jpei1hZHYteD0iMzI1IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNNzQ0IDExOThxMjQyIDAgMzU0IC0xODlxNjAgLTEwNCA2NiAtMjA5aC0xODFxMCA0NSAtMTcuNSA4Mi41dC00My41IDYxLjV0LTU4IDQwLjV0LTYwLjUgMjR0LTUxLjUgNy41cS0xOSAwIC00MC41IC01LjV0LTQ5LjUgLTIwLjV0LTUzIC0zOHQtNDkgLTYyLjV0LTM5IC04OS41aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNTAgLTYgLTEwMGg0MDZsLTEwMCAtMTAwaC0zMDBxOSAtNzQgMzMgLTEzMnQ1Mi41IC05MXQ2MS41IC01NC41dDU5IC0yOSB0NDcgLTcuNXEyMiAwIDUwLjUgNy41dDYwLjUgMjQuNXQ1OCA0MXQ0My41IDYxdDE3LjUgODBoMTc0cS0zMCAtMTcxIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDYgMCAtMzI0IDE1OHEtMzYgNDggLTY5IDEzM3QtNDUgMjA0aC0yMTdsMTAwIDEwMGgxMTJxMSA0NyA2IDEwMGgtMjE4bDEwMCAxMDBoMTM0cTIwIDg3IDUxIDE1My41dDYyIDEwMy41cTExNyAxNDEgMjk3IDE0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjBiZDsiIGQ9Ik00MjggMTIwMGgzNTBxNjcgMCAxMjAgLTEzdDg2IC0zMXQ1NyAtNDkuNXQzNSAtNTYuNXQxNyAtNjQuNXQ2LjUgLTYwLjV0MC41IC01N3YtMTYuNXYtMTYuNXEwIC0zNiAtMC41IC01N3QtNi41IC02MXQtMTcgLTY1dC0zNSAtNTd0LTU3IC01MC41dC04NiAtMzEuNXQtMTIwIC0xM2gtMTc4bC0yIC0xMDBoMjg4cTEwIDAgMTMgLTZ0LTMgLTE0bC0xMjAgLTE2MHEtNiAtOCAtMTggLTE0dC0yMiAtNmgtMTM4di0xNzVxMCAtMTEgLTUuNSAtMTggdC0xNS41IC03aC0xNDlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNzVoLTI2N3EtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTE3djEwMGgtMjY3cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMTd2NDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTYwMCAxMDAwdi0zMDBoMjAzcTY0IDAgODYuNSAzM3QyMi41IDExOXEwIDg0IC0yMi41IDExNnQtODYuNSAzMmgtMjAzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjEyOyIgZD0iTTI1MCA3MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjMxYjsiIGQ9Ik0xMDAwIDEyMDB2LTE1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTEwMHEwIC05MSAtNDkuNSAtMTY1LjV0LTEzMC41IC0xMDkuNXE4MSAtMzUgMTMwLjUgLTEwOS41dDQ5LjUgLTE2NS41di0xNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtODAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MTUwcTAgOTEgNDkuNSAxNjUuNXQxMzAuNSAxMDkuNXEtODEgMzUgLTEzMC41IDEwOS41IHQtNDkuNSAxNjUuNXYxMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxNTBoODAwek00MDAgMTAwMHYtMTAwcTAgLTYwIDMyLjUgLTEwOS41dDg3LjUgLTczLjVxMjggLTEyIDQ0IC0zN3QxNiAtNTV0LTE2IC01NXQtNDQgLTM3cS01NSAtMjQgLTg3LjUgLTczLjV0LTMyLjUgLTEwOS41di0xNTBoNDAwdjE1MHEwIDYwIC0zMi41IDEwOS41dC04Ny41IDczLjVxLTI4IDEyIC00NCAzN3QtMTYgNTV0MTYgNTV0NDQgMzcgcTU1IDI0IDg3LjUgNzMuNXQzMi41IDEwOS41djEwMGgtNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyNWZjOyIgaG9yaXotYWR2LXg9IjUwMCIgZD0iTTAgMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjYwMTsiIGQ9Ik01MDMgMTA4OXExMTAgMCAyMDAuNSAtNTkuNXQxMzQuNSAtMTU2LjVxNDQgMTQgOTAgMTRxMTIwIDAgMjA1IC04Ni41dDg1IC0yMDYuNXEwIC0xMjEgLTg1IC0yMDcuNXQtMjA1IC04Ni41aC03NTBxLTc5IDAgLTEzNS41IDU3dC01Ni41IDEzN3EwIDY5IDQyLjUgMTIyLjV0MTA4LjUgNjcuNXEtMiAxMiAtMiAzN3EwIDE1MyAxMDggMjYwLjV0MjYwIDEwNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyNmZhOyIgZD0iTTc3NCAxMTkzLjVxMTYgLTkuNSAyMC41IC0yN3QtNS41IC0zMy41bC0xMzYgLTE4N2w0NjcgLTc0NmgzMHEyMCAwIDM1IC0xOC41dDE1IC0zOS41di00MmgtMTIwMHY0MnEwIDIxIDE1IDM5LjV0MzUgMTguNWgzMGw0NjggNzQ2bC0xMzUgMTgzcS0xMCAxNiAtNS41IDM0dDIwLjUgMjh0MzQgNS41dDI4IC0yMC41bDExMSAtMTQ4bDExMiAxNTBxOSAxNiAyNyAyMC41dDM0IC01ek02MDAgMjAwaDM3N2wtMTgyIDExMmwtMTk1IDUzNHYtNjQ2eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjcwOTsiIGQ9Ik0yNSAxMTAwaDExNTBxMTAgMCAxMi41IC01dC01LjUgLTEzbC01NjQgLTU2N3EtOCAtOCAtMTggLTh0LTE4IDhsLTU2NCA1NjdxLTggOCAtNS41IDEzdDEyLjUgNXpNMTggODgybDI2NCAtMjY0cTggLTggOCAtMTh0LTggLTE4bC0yNjQgLTI2NHEtOCAtOCAtMTMgLTUuNXQtNSAxMi41djU1MHEwIDEwIDUgMTIuNXQxMyAtNS41ek05MTggNjE4bDI2NCAyNjRxOCA4IDEzIDUuNXQ1IC0xMi41di01NTBxMCAtMTAgLTUgLTEyLjV0LTEzIDUuNSBsLTI2NCAyNjRxLTggOCAtOCAxOHQ4IDE4ek04MTggNDgybDM2NCAtMzY0cTggLTggNS41IC0xM3QtMTIuNSAtNWgtMTE1MHEtMTAgMCAtMTIuNSA1dDUuNSAxM2wzNjQgMzY0cTggOCAxOCA4dDE4IC04bDE2NCAtMTY0cTggLTggMTggLTh0MTggOGwxNjQgMTY0cTggOCAxOCA4dDE4IC04eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyNzBmOyIgZD0iTTEwMTEgMTIxMHExOSAwIDMzIC0xM2wxNTMgLTE1M3ExMyAtMTQgMTMgLTMzdC0xMyAtMzNsLTk5IC05MmwtMjE0IDIxNGw5NSA5NnExMyAxNCAzMiAxNHpNMTAxMyA4MDBsLTYxNSAtNjE0bC0yMTQgMjE0bDYxNCA2MTR6TTMxNyA5NmwtMzMzIC0xMTJsMTEwIDMzNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik03MDAgNjUwdi01NTBoMjUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtODAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2NTUwbC01MDAgNTUwaDEyMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDI7IiBkPSJNMzY4IDEwMTdsNjQ1IDE2M3EzOSAxNSA2MyAwdDI0IC00OXYtODMxcTAgLTU1IC00MS41IC05NS41dC0xMTEuNSAtNjMuNXEtNzkgLTI1IC0xNDcgLTQuNXQtODYgNzV0MjUuNSAxMTEuNXQxMjIuNSA4MnE3MiAyNCAxMzggOHY1MjFsLTYwMCAtMTU1di02MDZxMCAtNDIgLTQ0IC05MHQtMTA5IC02OXEtNzkgLTI2IC0xNDcgLTUuNXQtODYgNzUuNXQyNS41IDExMS41dDEyMi41IDgyLjVxNzIgMjQgMTM4IDd2NjM5cTAgMzggMTQuNSA1OSB0NTMuNSAzNHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMzsiIGQ9Ik01MDAgMTE5MXExMDAgMCAxOTEgLTM5dDE1Ni41IC0xMDQuNXQxMDQuNSAtMTU2LjV0MzkgLTE5MWwtMSAtMmwxIC01cTAgLTE0MSAtNzggLTI2MmwyNzUgLTI3NHEyMyAtMjYgMjIuNSAtNDQuNXQtMjIuNSAtNDIuNWwtNTkgLTU4cS0yNiAtMjAgLTQ2LjUgLTIwdC0zOS41IDIwbC0yNzUgMjc0cS0xMTkgLTc3IC0yNjEgLTc3bC01IDFsLTIgLTFxLTEwMCAwIC0xOTEgMzl0LTE1Ni41IDEwNC41dC0xMDQuNSAxNTYuNXQtMzkgMTkxIHQzOSAxOTF0MTA0LjUgMTU2LjV0MTU2LjUgMTA0LjV0MTkxIDM5ek01MDAgMTAyMnEtODggMCAtMTYyIC00M3QtMTE3IC0xMTd0LTQzIC0xNjJ0NDMgLTE2MnQxMTcgLTExN3QxNjIgLTQzdDE2MiA0M3QxMTcgMTE3dDQzIDE2MnQtNDMgMTYydC0xMTcgMTE3dC0xNjIgNDN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDY7IiBkPSJNNDA3IDgwMGwxMzEgMzUzcTcgMTkgMTcuNSAxOXQxNy41IC0xOWwxMjkgLTM1M2g0MjFxMjEgMCAyNCAtOC41dC0xNCAtMjAuNWwtMzQyIC0yNDlsMTMwIC00MDFxNyAtMjAgLTAuNSAtMjUuNXQtMjQuNSA2LjVsLTM0MyAyNDZsLTM0MiAtMjQ3cS0xNyAtMTIgLTI0LjUgLTYuNXQtMC41IDI1LjVsMTMwIDQwMGwtMzQ3IDI1MXEtMTcgMTIgLTE0IDIwLjV0MjMgOC41aDQyOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNzsiIGQ9Ik00MDcgODAwbDEzMSAzNTNxNyAxOSAxNy41IDE5dDE3LjUgLTE5bDEyOSAtMzUzaDQyMXEyMSAwIDI0IC04LjV0LTE0IC0yMC41bC0zNDIgLTI0OWwxMzAgLTQwMXE3IC0yMCAtMC41IC0yNS41dC0yNC41IDYuNWwtMzQzIDI0NmwtMzQyIC0yNDdxLTE3IC0xMiAtMjQuNSAtNi41dC0wLjUgMjUuNWwxMzAgNDAwbC0zNDcgMjUxcS0xNyAxMiAtMTQgMjAuNXQyMyA4LjVoNDI5ek00NzcgNzAwaC0yNDBsMTk3IC0xNDJsLTc0IC0yMjYgbDE5MyAxMzlsMTk1IC0xNDBsLTc0IDIyOWwxOTIgMTQwaC0yMzRsLTc4IDIxMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik02MDAgMTIwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTI1MHEwIC00NiAtMzEgLTk4dC02OSAtNTJ2LTc1cTAgLTEwIDYgLTIxLjV0MTUgLTE3LjVsMzU4IC0yMzBxOSAtNSAxNSAtMTYuNXQ2IC0yMS41di05M3EwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5M3EwIDEwIDYgMjEuNXQxNSAxNi41bDM1OCAyMzBxOSA2IDE1IDE3LjV0NiAyMS41djc1cS0zOCAwIC02OSA1MiB0LTMxIDk4djI1MHEwIDEyNCA4OCAyMTJ0MjEyIDg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA5OyIgZD0iTTI1IDExMDBoMTE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTA1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0xMDAgMTAwMHYtMTAwaDEwMHYxMDBoLTEwMHpNODc1IDEwMDBoLTU1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTM1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDU1MCBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYzNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41ek0xMDAwIDEwMDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA4MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgODAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAwIDYwMHYtMTAwaDEwMHYxMDBoLTEwMHpNODc1IDUwMGgtNTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMzUwcTAgLTEwIDcuNSAtMTcuNSB0MTcuNSAtNy41aDU1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djM1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTEwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAwIDIwMHYtMTAwaDEwMHYxMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMDsiIGQ9Ik01MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjUwIDUwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMTsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDcwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAzMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41IHQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTI7IiBkPSJNNTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00NTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDMwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00NTAgMzAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwIHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDEzOyIgZD0iTTQ2NSA0NzdsNTcxIDU3MXE4IDggMTggOHQxNyAtOGwxNzcgLTE3N3E4IC03IDggLTE3dC04IC0xOGwtNzgzIC03ODRxLTcgLTggLTE3LjUgLTh0LTE3LjUgOGwtMzg0IDM4NHEtOCA4IC04IDE4dDggMTdsMTc3IDE3N3E3IDggMTcgOHQxOCAtOGwxNzEgLTE3MXE3IC03IDE4IC03dDE4IDd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTQ7IiBkPSJNOTA0IDEwODNsMTc4IC0xNzlxOCAtOCA4IC0xOC41dC04IC0xNy41bC0yNjcgLTI2OGwyNjcgLTI2OHE4IC03IDggLTE3LjV0LTggLTE4LjVsLTE3OCAtMTc4cS04IC04IC0xOC41IC04dC0xNy41IDhsLTI2OCAyNjdsLTI2OCAtMjY3cS03IC04IC0xNy41IC04dC0xOC41IDhsLTE3OCAxNzhxLTggOCAtOCAxOC41dDggMTcuNWwyNjcgMjY4bC0yNjcgMjY4cS04IDcgLTggMTcuNXQ4IDE4LjVsMTc4IDE3OHE4IDggMTguNSA4dDE3LjUgLTggbDI2OCAtMjY3bDI2OCAyNjhxNyA3IDE3LjUgN3QxOC41IC03eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE1OyIgZD0iTTUwNyAxMTc3cTk4IDAgMTg3LjUgLTM4LjV0MTU0LjUgLTEwMy41dDEwMy41IC0xNTQuNXQzOC41IC0xODcuNXEwIC0xNDEgLTc4IC0yNjJsMzAwIC0yOTlxOCAtOCA4IC0xOC41dC04IC0xOC41bC0xMDkgLTEwOHEtNyAtOCAtMTcuNSAtOHQtMTguNSA4bC0zMDAgMjk5cS0xMTkgLTc3IC0yNjEgLTc3cS05OCAwIC0xODggMzguNXQtMTU0LjUgMTAzdC0xMDMgMTU0LjV0LTM4LjUgMTg4dDM4LjUgMTg3LjV0MTAzIDE1NC41IHQxNTQuNSAxMDMuNXQxODggMzguNXpNNTA2LjUgMTAyM3EtODkuNSAwIC0xNjUuNSAtNDR0LTEyMCAtMTIwLjV0LTQ0IC0xNjZ0NDQgLTE2NS41dDEyMCAtMTIwdDE2NS41IC00NHQxNjYgNDR0MTIwLjUgMTIwdDQ0IDE2NS41dC00NCAxNjZ0LTEyMC41IDEyMC41dC0xNjYgNDR6TTQyNSA5MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoNzVxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNSB0LTE3LjUgLTcuNWgtNzV2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTc1cS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNzV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNjsiIGQ9Ik01MDcgMTE3N3E5OCAwIDE4Ny41IC0zOC41dDE1NC41IC0xMDMuNXQxMDMuNSAtMTU0LjV0MzguNSAtMTg3LjVxMCAtMTQxIC03OCAtMjYybDMwMCAtMjk5cTggLTggOCAtMTguNXQtOCAtMTguNWwtMTA5IC0xMDhxLTcgLTggLTE3LjUgLTh0LTE4LjUgOGwtMzAwIDI5OXEtMTE5IC03NyAtMjYxIC03N3EtOTggMCAtMTg4IDM4LjV0LTE1NC41IDEwM3QtMTAzIDE1NC41dC0zOC41IDE4OHQzOC41IDE4Ny41dDEwMyAxNTQuNSB0MTU0LjUgMTAzLjV0MTg4IDM4LjV6TTUwNi41IDEwMjNxLTg5LjUgMCAtMTY1LjUgLTQ0dC0xMjAgLTEyMC41dC00NCAtMTY2dDQ0IC0xNjUuNXQxMjAgLTEyMHQxNjUuNSAtNDR0MTY2IDQ0dDEyMC41IDEyMHQ0NCAxNjUuNXQtNDQgMTY2dC0xMjAuNSAxMjAuNXQtMTY2IDQ0ek0zMjUgODAwaDM1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM1MHEtMTAgMCAtMTcuNSA3LjUgdC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNzsiIGQ9Ik01NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04MDAgOTc1djE2NnExNjcgLTYyIDI3MiAtMjA5LjV0MTA1IC0zMzEuNXEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNSB0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHEwIDE4NCAxMDUgMzMxLjV0MjcyIDIwOS41di0xNjZxLTEwMyAtNTUgLTE2NSAtMTU1dC02MiAtMjIwcTAgLTExNiA1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE4OyIgZD0iTTEwMjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MjUgODAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTc1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djc1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDUwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di00NTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY0NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTI1IDMwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNSB2MjUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTk7IiBkPSJNNjAwIDExNzRxMzMgMCA3NCAtNWwzOCAtMTUybDUgLTFxNDkgLTE0IDk0IC0zOWw1IC0ybDEzNCA4MHE2MSAtNDggMTA0IC0xMDVsLTgwIC0xMzRsMyAtNXEyNSAtNDQgMzkgLTkzbDEgLTZsMTUyIC0zOHE1IC00MyA1IC03M3EwIC0zNCAtNSAtNzRsLTE1MiAtMzhsLTEgLTZxLTE1IC00OSAtMzkgLTkzbC0zIC01bDgwIC0xMzRxLTQ4IC02MSAtMTA0IC0xMDVsLTEzNCA4MWwtNSAtM3EtNDQgLTI1IC05NCAtMzlsLTUgLTJsLTM4IC0xNTEgcS00MyAtNSAtNzQgLTVxLTMzIDAgLTc0IDVsLTM4IDE1MWwtNSAycS00OSAxNCAtOTQgMzlsLTUgM2wtMTM0IC04MXEtNjAgNDggLTEwNCAxMDVsODAgMTM0bC0zIDVxLTI1IDQ1IC0zOCA5M2wtMiA2bC0xNTEgMzhxLTYgNDIgLTYgNzRxMCAzMyA2IDczbDE1MSAzOGwyIDZxMTMgNDggMzggOTNsMyA1bC04MCAxMzRxNDcgNjEgMTA1IDEwNWwxMzMgLTgwbDUgMnE0NSAyNSA5NCAzOWw1IDFsMzggMTUycTQzIDUgNzQgNXpNNjAwIDgxNSBxLTg5IDAgLTE1MiAtNjN0LTYzIC0xNTEuNXQ2MyAtMTUxLjV0MTUyIC02M3QxNTIgNjN0NjMgMTUxLjV0LTYzIDE1MS41dC0xNTIgNjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNNTAwIDEzMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoLTExMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNTAwIDEyMDB2LTEwMGgzMDB2MTAwaC0zMDB6TTExMDAgOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTcwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjUgdjgwMGg5MDB6TTMwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTUwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTcwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTkwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjE7IiBkPSJNMTggNjE4bDYyMCA2MDhxOCA3IDE4LjUgN3QxNy41IC03bDYwOCAtNjA4cTggLTggNS41IC0xM3QtMTIuNSAtNWgtMTc1di01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNzVoLTMwMHYtMzc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTc1aC0xNzVxLTEwIDAgLTEyLjUgNXQ1LjUgMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjI7IiBkPSJNNjAwIDEyMDB2LTQwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMzAwdi02NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDUwek0xMDAwIDgwMGgtMjUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTUyNSA5MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNzVoMTc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNDsiIGQ9Ik0xMzAwIDBoLTUzOGwtNDEgNDAwaC0yNDJsLTQxIC00MDBoLTUzOGw0MzEgMTIwMGgyMDlsLTIxIC0zMDBoMTYybC0yMCAzMDBoMjA4ek01MTUgODAwbC0yNyAtMzAwaDIyNGwtMjcgMzAwaC0xNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjU7IiBkPSJNNTUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00NTBoMTkxcTIwIDAgMjUuNSAtMTEuNXQtNy41IC0yNy41bC0zMjcgLTQwMHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0zMjcgNDAwcS0xMyAxNiAtNy41IDI3LjV0MjUuNSAxMS41aDE5MXY0NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTI1IDQwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTM1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjUgaC0xMDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNzVoOTAwdjE3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDI2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01MjUgOTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI3NWgxMzdxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtMjIzIC0yNzVxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMjIzIDI3NXEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDEzN3YyNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjc7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTYzMiA5MTRsMjIzIC0yNzVxMTMgLTE2IDggLTI3LjV0LTI2IC0xMS41aC0xMzd2LTI3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI3NWgtMTM3cS0yMSAwIC0yNiAxMS41dDggMjcuNWwyMjMgMjc1cTEzIDE2IDMyIDE2IHQzMiAtMTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjg7IiBkPSJNMjI1IDEyMDBoNzUwcTEwIDAgMTkuNSAtN3QxMi41IC0xN2wxODYgLTY1MnE3IC0yNCA3IC00OXYtNDI1cTAgLTEyIC00IC0yN3QtOSAtMTdxLTEyIC02IC0zNyAtNmgtMTEwMHEtMTIgMCAtMjcgNHQtMTcgOHEtNiAxMyAtNiAzOGwxIDQyNXEwIDI1IDcgNDlsMTg1IDY1MnEzIDEwIDEyLjUgMTd0MTkuNSA3ek04NzggMTAwMGgtNTU2cS0xMCAwIC0xOSAtN3QtMTEgLTE4bC04NyAtNDUwcS0yIC0xMSA0IC0xOHQxNiAtN2gxNTAgcTEwIDAgMTkuNSAtN3QxMS41IC0xN2wzOCAtMTUycTIgLTEwIDExLjUgLTE3dDE5LjUgLTdoMjUwcTEwIDAgMTkuNSA3dDExLjUgMTdsMzggMTUycTIgMTAgMTEuNSAxN3QxOS41IDdoMTUwcTEwIDAgMTYgN3Q0IDE4bC04NyA0NTBxLTIgMTEgLTExIDE4dC0xOSA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDI5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01NDAgODIwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzA7IiBkPSJNOTQ3IDEwNjBsMTM1IDEzNXE3IDcgMTIuNSA1dDUuNSAtMTN2LTM2MnEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM2MnEtMTEgMCAtMTMgNS41dDUgMTIuNWwxMzMgMTMzcS0xMDkgNzYgLTIzOCA3NnEtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41dDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVoMTUwcTAgLTExNyAtNDUuNSAtMjI0IHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjVxMTkyIDAgMzQ3IC0xMTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzE7IiBkPSJNOTQ3IDEwNjBsMTM1IDEzNXE3IDcgMTIuNSA1dDUuNSAtMTN2LTM2MXEwIC0xMSAtNy41IC0xOC41dC0xOC41IC03LjVoLTM2MXEtMTEgMCAtMTMgNS41dDUgMTIuNWwxMzQgMTM0cS0xMTAgNzUgLTIzOSA3NXEtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVoLTE1MHEwIDExNyA0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41cTE5MiAwIDM0NyAtMTE3ek0xMDI3IDYwMGgxNTAgcTAgLTExNyAtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjVxLTE5MiAwIC0zNDggMTE4bC0xMzQgLTEzNHEtNyAtOCAtMTIuNSAtNS41dC01LjUgMTIuNXYzNjBxMCAxMSA3LjUgMTguNXQxOC41IDcuNWgzNjBxMTAgMCAxMi41IC01LjV0LTUuNSAtMTIuNWwtMTMzIC0xMzNxMTEwIC03NiAyNDAgLTc2cTExNiAwIDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMyOyIgZD0iTTEyNSAxMjAwaDEwNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djExNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDAwaC04NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di04NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg4NTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY4NTAgcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMzI1IDkwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgOTAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTMyNSA3MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNTI1IDcwMGg0NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTQ1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0zMjUgNTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTUyNSA1MDBoNDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC00NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMzI1IDMwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgMzAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzM7IiBkPSJNOTAwIDgwMHYyMDBxMCA4MyAtNTguNSAxNDEuNXQtMTQxLjUgNTguNWgtMzAwcS04MiAwIC0xNDEgLTU5dC01OSAtMTQxdi0yMDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNjAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg5MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMTAwek00MDAgODAwdjE1MHEwIDIxIDE1IDM1LjV0MzUgMTQuNWgyMDAgcTIwIDAgMzUgLTE0LjV0MTUgLTM1LjV2LTE1MGgtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM0OyIgZD0iTTEyNSAxMTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTA3NWgtMTAwdjEwNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDUycTQgMCA5IC0ycTE2IC02IDE2IC0yM3YtNDIxcTAgLTYgLTMgLTEycS0zMyAtNTkgLTY2LjUgLTk5dC02NS41IC01OHQtNTYuNSAtMjQuNXQtNTIuNSAtNi41cS0yNiAwIC01Ny41IDYuNXQtNTIuNSAxMy41dC02MCAyMXEtNDEgMTUgLTYzIDIyLjV0LTU3LjUgMTV0LTY1LjUgNy41IHEtODUgMCAtMTYwIC01N3EtNyAtNSAtMTUgLTVxLTYgMCAtMTEgM3EtMTQgNyAtMTQgMjJ2NDM4cTIyIDU1IDgyIDk4LjV0MTE5IDQ2LjVxMjMgMiA0MyAwLjV0NDMgLTd0MzIuNSAtOC41dDM4IC0xM3QzMi41IC0xMXE0MSAtMTQgNjMuNSAtMjF0NTcgLTE0dDYzLjUgLTdxMTAzIDAgMTgzIDg3cTcgOCAxOCA4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTYwMCAxMTc1cTExNiAwIDIyNyAtNDkuNXQxOTIuNSAtMTMxdDEzMSAtMTkyLjV0NDkuNSAtMjI3di0zMDBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djMwMHEwIDEyNyAtNzAuNSAyMzEuNXQtMTg0LjUgMTYxLjV0LTI0NSA1N3QtMjQ1IC01N3QtMTg0LjUgLTE2MS41dC03MC41IC0yMzEuNXYtMzAwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTAgcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzAwcTAgMTE2IDQ5LjUgMjI3dDEzMSAxOTIuNXQxOTIuNSAxMzF0MjI3IDQ5LjV6TTIyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwcTAgOCA2IDE0dDE0IDZ6TTgyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwIHEwIDggNiAxNHQxNCA2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM2OyIgZD0iTTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNXQtMTUgMi41bC0yNTggMTcycS0yMSAxNCAtNDYgMTRoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDI1MHEyNSAwIDQ2IDE0ek05MDAgNjY4bDEyMCAxMjBxNyA3IDE3IDd0MTcgLTdsMzQgLTM0cTcgLTcgNyAtMTd0LTcgLTE3bC0xMjAgLTEyMGwxMjAgLTEyMHE3IC03IDcgLTE3IHQtNyAtMTdsLTM0IC0zNHEtNyAtNyAtMTcgLTd0LTE3IDdsLTEyMCAxMTlsLTEyMCAtMTE5cS03IC03IC0xNyAtN3QtMTcgN2wtMzQgMzRxLTcgNyAtNyAxN3Q3IDE3bDExOSAxMjBsLTExOSAxMjBxLTcgNyAtNyAxN3Q3IDE3bDM0IDM0cTcgOCAxNyA4dDE3IC04eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM3OyIgZD0iTTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNXQtMTUgMi41bC0yNTggMTcycS0yMSAxNCAtNDYgMTRoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDI1MHEyNSAwIDQ2IDE0ek03NjYgOTAwaDRxMTAgLTEgMTYgLTEwcTk2IC0xMjkgOTYgLTI5MHEwIC0xNTQgLTkwIC0yODFxLTYgLTkgLTE3IC0xMGwtMyAtMXEtOSAwIC0xNiA2IGwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4cS02IDggLTQuNSAxOHQ5LjUgMTdsMjkgMjJxNyA1IDE1IDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzg7IiBkPSJNOTY3IDEwMDRoM3ExMSAtMSAxNyAtMTBxMTM1IC0xNzkgMTM1IC0zOTZxMCAtMTA1IC0zNCAtMjA2LjV0LTk4IC0xODUuNXEtNyAtOSAtMTcgLTEwaC0zcS05IDAgLTE2IDZsLTQyIDM0cS04IDYgLTkgMTZ0NSAxOHExMTEgMTUwIDExMSAzMjhxMCA5MCAtMjkuNSAxNzZ0LTg0LjUgMTU3cS02IDkgLTUgMTl0MTAgMTZsNDIgMzNxNyA1IDE1IDV6TTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNSB0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNmwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4IHEtNiA4IC00LjUgMTguNXQ5LjUgMTYuNWwyOSAyMnE3IDUgMTUgNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzOTsiIGQ9Ik01MDAgOTAwaDEwMHYtMTAwaC0xMDB2LTEwMGgtNDAwdi0xMDBoLTEwMHY2MDBoNTAwdi0zMDB6TTEyMDAgNzAwaC0yMDB2LTEwMGgyMDB2LTIwMGgtMzAwdjMwMGgtMjAwdjMwMGgtMTAwdjIwMGg2MDB2LTUwMHpNMTAwIDExMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTgwMCAxMTAwdi0zMDBoMzAwdjMwMGgtMzAwek0zMDAgOTAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMDAwIDkwMGgtMTAwdjEwMGgxMDB2LTEwMHpNMzAwIDUwMGgyMDB2LTUwMCBoLTUwMHY1MDBoMjAwdjEwMGgxMDB2LTEwMHpNODAwIDMwMGgyMDB2LTEwMGgtMTAwdi0xMDBoLTIwMHYxMDBoLTEwMHYxMDBoMTAwdjIwMGgtMjAwdjEwMGgzMDB2LTMwMHpNMTAwIDQwMHYtMzAwaDMwMHYzMDBoLTMwMHpNMzAwIDIwMGgtMTAwdjEwMGgxMDB2LTEwMHpNMTIwMCAyMDBoLTEwMHYxMDBoMTAwdi0xMDB6TTcwMCAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMjAwIDBoLTMwMHYxMDBoMzAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDA7IiBkPSJNMTAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek0zMDAgMjAwaC0xMDB2MTAwMGgxMDB2LTEwMDB6TTcwMCAyMDBoLTIwMHYxMDAwaDIwMHYtMTAwMHpNOTAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek0xMjAwIDIwMGgtMjAwdjEwMDBoMjAwdi0xMDAwek00MDAgMGgtMzAwdjEwMGgzMDB2LTEwMHpNNjAwIDBoLTEwMHY5MWgxMDB2LTkxek04MDAgMGgtMTAwdjkxaDEwMHYtOTF6TTExMDAgMGgtMjAwdjkxaDIwMHYtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNNTAwIDEyMDBsNjgyIC02ODJxOCAtOCA4IC0xOHQtOCAtMThsLTQ2NCAtNDY0cS04IC04IC0xOCAtOHQtMTggOGwtNjgyIDY4MmwxIDQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41dC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0MjsiIGQ9Ik01MDAgMTIwMGw2ODIgLTY4MnE4IC04IDggLTE4dC04IC0xOGwtNDY0IC00NjRxLTggLTggLTE4IC04dC0xOCA4bC02ODIgNjgybDEgNDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNDc0ek04MDAgMTIwMGw2ODIgLTY4MnE4IC04IDggLTE4dC04IC0xOGwtNDY0IC00NjRxLTggLTggLTE4IC04dC0xOCA4bC01NiA1Nmw0MjQgNDI2bC03MDAgNzAwaDE1MHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41IHQtMjkuNSAtNzEuNXQyOS41IC03MS41dDcxIC0yOS41dDcxIDI5LjV0MjkuNSA3MS41dC0yOS41IDcxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDM7IiBkPSJNMzAwIDEyMDBoODI1cTc1IDAgNzUgLTc1di05MDBxMCAtMjUgLTE4IC00M2wtNjQgLTY0cS04IC04IC0xMyAtNS41dC01IDEyLjV2OTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNWgtNzAwcS0yNSAwIC00MyAtMThsLTY0IC02NHEtOCAtOCAtNS41IC0xM3QxMi41IC01aDcwMHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTk1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTg1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djk3NSBxMCAyNSAxOCA0M2wxMzkgMTM5cTE4IDE4IDQzIDE4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTI1MCAxMjAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTE1MGwtNDUwIDQ0NGwtNDUwIC00NDV2MTE1MXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDU7IiBkPSJNODIyIDEyMDBoLTQ0NHEtMTEgMCAtMTkgLTcuNXQtOSAtMTcuNWwtNzggLTMwMXEtNyAtMjQgNyAtNDVsNTcgLTEwOHE2IC05IDE3LjUgLTE1dDIxLjUgLTZoNDUwcTEwIDAgMjEuNSA2dDE3LjUgMTVsNjIgMTA4cTE0IDIxIDcgNDVsLTgzIDMwMXEtMSAxMCAtOSAxNy41dC0xOSA3LjV6TTExNzUgODAwaC0xNTBxLTEwIDAgLTIxIC02LjV0LTE1IC0xNS41bC03OCAtMTU2cS00IC05IC0xNSAtMTUuNXQtMjEgLTYuNWgtNTUwIHEtMTAgMCAtMjEgNi41dC0xNSAxNS41bC03OCAxNTZxLTQgOSAtMTUgMTUuNXQtMjEgNi41aC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di02NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWgxNTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWgxNTBxMTAgMCAxNy41IDcuNSB0Ny41IDE3LjV2NjUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNODUwIDIwMGgtNTAwcS0xMCAwIC0xOS41IC03dC0xMS41IC0xN2wtMzggLTE1MnEtMiAtMTAgMy41IC0xN3QxNS41IC03aDYwMHExMCAwIDE1LjUgN3QzLjUgMTdsLTM4IDE1MnEtMiAxMCAtMTEuNSAxN3QtMTkuNSA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ2OyIgZD0iTTUwMCAxMTAwaDIwMHE1NiAwIDEwMi41IC0yMC41dDcyLjUgLTUwdDQ0IC01OXQyNSAtNTAuNWw2IC0yMGgxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTYwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxNTBxMiA4IDYuNSAyMS41dDI0IDQ4dDQ1IDYxdDcyIDQ4dDEwMi41IDIxLjV6TTkwMCA4MDB2LTEwMCBoMTAwdjEwMGgtMTAwek02MDAgNzMwcS05NSAwIC0xNjIuNSAtNjcuNXQtNjcuNSAtMTYyLjV0NjcuNSAtMTYyLjV0MTYyLjUgLTY3LjV0MTYyLjUgNjcuNXQ2Ny41IDE2Mi41dC02Ny41IDE2Mi41dC0xNjIuNSA2Ny41ek02MDAgNjAzcTQzIDAgNzMgLTMwdDMwIC03M3QtMzAgLTczdC03MyAtMzB0LTczIDMwdC0zMCA3M3QzMCA3M3Q3MyAzMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik02ODEgMTE5OWwzODUgLTk5OHEyMCAtNTAgNjAgLTkycTE4IC0xOSAzNi41IC0yOS41dDI3LjUgLTExLjVsMTAgLTJ2LTY2aC00MTd2NjZxNTMgMCA3NSA0My41dDUgODguNWwtODIgMjIyaC0zOTFxLTU4IC0xNDUgLTkyIC0yMzRxLTExIC0zNCAtNi41IC01N3QyNS41IC0zN3Q0NiAtMjB0NTUgLTZ2LTY2aC0zNjV2NjZxNTYgMjQgODQgNTJxMTIgMTIgMjUgMzAuNXQyMCAzMS41bDcgMTNsMzk5IDEwMDZoOTN6TTQxNiA1MjFoMzQwIGwtMTYyIDQ1N3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0ODsiIGQ9Ik03NTMgNjQxcTUgLTEgMTQuNSAtNC41dDM2IC0xNS41dDUwLjUgLTI2LjV0NTMuNSAtNDB0NTAuNSAtNTQuNXQzNS41IC03MHQxNC41IC04N3EwIC02NyAtMjcuNSAtMTI1LjV0LTcxLjUgLTk3LjV0LTk4LjUgLTY2LjV0LTEwOC41IC00MC41dC0xMDIgLTEzaC01MDB2ODlxNDEgNyA3MC41IDMyLjV0MjkuNSA2NS41djgyN3EwIDI0IC0wLjUgMzR0LTMuNSAyNHQtOC41IDE5LjV0LTE3IDEzLjV0LTI4IDEyLjV0LTQyLjUgMTEuNXY3MSBsNDcxIC0xcTU3IDAgMTE1LjUgLTIwLjV0MTA4IC01N3Q4MC41IC05NHQzMSAtMTI0LjVxMCAtNTEgLTE1LjUgLTk2LjV0LTM4IC03NC41dC00NSAtNTAuNXQtMzguNSAtMzAuNXpNNDAwIDcwMGgxMzlxNzggMCAxMzAuNSA0OC41dDUyLjUgMTIyLjVxMCA0MSAtOC41IDcwLjV0LTI5LjUgNTUuNXQtNjIuNSAzOS41dC0xMDMuNSAxMy41aC0xMTh2LTM1MHpNNDAwIDIwMGgyMTZxODAgMCAxMjEgNTAuNXQ0MSAxMzAuNXEwIDkwIC02Mi41IDE1NC41IHQtMTU2LjUgNjQuNWgtMTU5di00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDk7IiBkPSJNODc3IDEyMDBsMiAtNTdxLTgzIC0xOSAtMTE2IC00NS41dC00MCAtNjYuNWwtMTMyIC04MzlxLTkgLTQ5IDEzIC02OXQ5NiAtMjZ2LTk3aC01MDB2OTdxMTg2IDE2IDIwMCA5OGwxNzMgODMycTMgMTcgMyAzMHQtMS41IDIyLjV0LTkgMTcuNXQtMTMuNSAxMi41dC0yMS41IDEwdC0yNiA4LjV0LTMzLjUgMTBxLTEzIDMgLTE5IDV2NTdoNDI1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTTEzMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTE3NSAxMDAwaC03NXYtODAwaDc1bC0xMjUgLTE2N2wtMTI1IDE2N2g3NXY4MDBoLTc1bDEyNSAxNjd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTE7IiBkPSJNMTEwMCA5MDBoLTUwcTAgMjEgLTQgMzd0LTkuNSAyNi41dC0xOCAxNy41dC0yMiAxMXQtMjguNSA1LjV0LTMxIDJ0LTM3IDAuNWgtMjAwdi02NTBxMCAtMjIgMjUgLTM0LjV0NTAgLTEzLjVsMjUgLTJ2LTEwMGgtNDAwdjEwMHE0IDAgMTEgMC41dDI0IDN0MzAgN3QyNCAxNXQxMSAyNC41djY1MGgtMjAwcS0yNSAwIC0zNyAtMC41dC0zMSAtMnQtMjguNSAtNS41dC0yMiAtMTF0LTE4IC0xNy41dC05LjUgLTI2LjV0LTQgLTM3aC01MHYzMDAgaDEwMDB2LTMwMHpNMTE2NyA1MGwtMTY3IC0xMjV2NzVoLTgwMHYtNzVsLTE2NyAxMjVsMTY3IDEyNXYtNzVoODAwdjc1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUyOyIgZD0iTTUwIDExMDBoNjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTYwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgODAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDUwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0yNTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjUwIDUwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NDsiIGQ9Ik01MDAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTYwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTEwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMzAwIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwIHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTU7IiBkPSJNNTAgMTEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTExMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDgwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTExMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCAxMTAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzUwIDgwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zNTAgMjAwaDgwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU3OyIgZD0iTTQwMCAwaC0xMDB2MTEwMGgxMDB2LTExMDB6TTU1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTU1MCA4MDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTI2NyA1NTBsLTE2NyAtMTI1djc1aC0yMDB2MTAwaDIwMHY3NXpNNTUwIDUwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01NTAgMjAwaDYwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU4OyIgZD0iTTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDBoLTEwMHYxMTAwaDEwMHYtMTEwMHpNNTAgODAwaDUwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDYwMGgyMDB2LTEwMGgtMjAwdi03NWwtMTY3IDEyNWwxNjcgMTI1di03NXpNNTAgNTAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGg2MDAgcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTYwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik03NSAxMDAwaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzdjY1MHEwIDMxIDIyIDUzdDUzIDIyek0xMjAwIDMwMGwtMzAwIDMwMGwzMDAgMzAwdi02MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjA7IiBkPSJNNDQgMTEwMGgxMTEycTE4IDAgMzEgLTEzdDEzIC0zMXYtMTAxMnEwIC0xOCAtMTMgLTMxdC0zMSAtMTNoLTExMTJxLTE4IDAgLTMxIDEzdC0xMyAzMXYxMDEycTAgMTggMTMgMzF0MzEgMTN6TTEwMCAxMDAwdi03MzdsMjQ3IDE4MmwyOTggLTEzMWwtNzQgMTU2bDI5MyAzMThsMjM2IC0yODh2NTAwaC0xMDAwek0zNDIgODg0cTU2IDAgOTUgLTM5dDM5IC05NC41dC0zOSAtOTV0LTk1IC0zOS41dC05NSAzOS41dC0zOSA5NXQzOSA5NC41IHQ5NSAzOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MjsiIGQ9Ik02NDggMTE2OXExMTcgMCAyMTYgLTYwdDE1Ni41IC0xNjF0NTcuNSAtMjE4cTAgLTExNSAtNzAgLTI1OHEtNjkgLTEwOSAtMTU4IC0yMjUuNXQtMTQzIC0xNzkuNWwtNTQgLTYycS05IDggLTI1LjUgMjQuNXQtNjMuNSA2Ny41dC05MSAxMDN0LTk4LjUgMTI4dC05NS41IDE0OHEtNjAgMTMyIC02MCAyNDlxMCA4OCAzNCAxNjkuNXQ5MS41IDE0MnQxMzcgOTYuNXQxNjYuNSAzNnpNNjUyLjUgOTc0cS05MS41IDAgLTE1Ni41IC02NSB0LTY1IC0xNTd0NjUgLTE1Ni41dDE1Ni41IC02NC41dDE1Ni41IDY0LjV0NjUgMTU2LjV0LTY1IDE1N3QtMTU2LjUgNjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxNzN2ODU0cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjQ7IiBkPSJNNTU0IDEyOTVxMjEgLTcyIDU3LjUgLTE0My41dDc2IC0xMzB0ODMgLTExOHQ4Mi41IC0xMTd0NzAgLTExNnQ0OS41IC0xMjZ0MTguNSAtMTM2LjVxMCAtNzEgLTI1LjUgLTEzNXQtNjguNSAtMTExdC05OSAtODJ0LTExOC41IC01NHQtMTI1LjUgLTIzcS04NCA1IC0xNjEuNSAzNHQtMTM5LjUgNzguNXQtOTkgMTI1dC0zNyAxNjQuNXEwIDY5IDE4IDEzNi41dDQ5LjUgMTI2LjV0NjkuNSAxMTYuNXQ4MS41IDExNy41dDgzLjUgMTE5IHQ3Ni41IDEzMXQ1OC41IDE0M3pNMzQ0IDcxMHEtMjMgLTMzIC00My41IC03MC41dC00MC41IC0xMDIuNXQtMTcgLTEyM3ExIC0zNyAxNC41IC02OS41dDMwIC01MnQ0MSAtMzd0MzguNSAtMjQuNXQzMyAtMTVxMjEgLTcgMzIgLTF0MTMgMjJsNiAzNHEyIDEwIC0yLjUgMjJ0LTEzLjUgMTlxLTUgNCAtMTQgMTJ0LTI5LjUgNDAuNXQtMzIuNSA3My41cS0yNiA4OSA2IDI3MXEyIDExIC02IDExcS04IDEgLTE1IC0xMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NTsiIGQ9Ik0xMDAwIDEwMTNsMTA4IDExNXEyIDEgNSAydDEzIDJ0MjAuNSAtMXQyNSAtOS41dDI4LjUgLTIxLjVxMjIgLTIyIDI3IC00M3QwIC0zMmwtNiAtMTBsLTEwOCAtMTE1ek0zNTAgMTEwMGg0MDBxNTAgMCAxMDUgLTEzbC0xODcgLTE4N2gtMzY4cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTgybDIwMCAyMDB2LTMzMiBxMCAtMTY1IC05My41IC0yNTcuNXQtMjU2LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNMTAwOSA4MDNsLTM2MiAtMzYybC0xNjEgLTUwbDU1IDE3MGwzNTUgMzU1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTM1MCAxMTAwaDM2MXEtMTY0IC0xNDYgLTIxNiAtMjAwaC0xOTVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi0xMDNxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTgyNCAxMDczbDMzOSAtMzAxcTggLTcgOCAtMTcuNXQtOCAtMTcuNWwtMzQwIC0zMDZxLTcgLTYgLTEyLjUgLTR0LTYuNSAxMXYyMDNxLTI2IDEgLTU0LjUgMHQtNzguNSAtNy41dC05MiAtMTcuNXQtODYgLTM1dC03MCAtNTdxMTAgNTkgMzMgMTA4dDUxLjUgODEuNXQ2NSA1OC41dDY4LjUgNDAuNXQ2NyAyNC41dDU2IDEzLjV0NDAgNC41djIxMHExIDEwIDYuNSAxMi41dDEzLjUgLTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NzsiIGQ9Ik0zNTAgMTEwMGgzNTBxNjAgMCAxMjcgLTIzbC0xNzggLTE3N2gtMzQ5cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjlsMjAwIDIwMHYtMjE5cTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6IE02NDMgNjM5bDM5NSAzOTVxNyA3IDE3LjUgN3QxNy41IC03bDEwMSAtMTAxcTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNTMxIC01MzJxLTcgLTcgLTE3LjUgLTd0LTE3LjUgN2wtMjQ4IDI0OHEtNyA3IC03IDE3LjV0NyAxNy41bDEwMSAxMDFxNyA3IDE3LjUgN3QxNy41IC03bDExMSAtMTExcTggLTcgMTggLTd0MTggN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2ODsiIGQ9Ik0zMTggOTE4bDI2NCAyNjRxOCA4IDE4IDh0MTggLThsMjYwIC0yNjRxNyAtOCA0LjUgLTEzdC0xMi41IC01aC0xNzB2LTIwMGgyMDB2MTczcTAgMTAgNSAxMnQxMyAtNWwyNjQgLTI2MHE4IC03IDggLTE3LjV0LTggLTE3LjVsLTI2NCAtMjY1cS04IC03IC0xMyAtNXQtNSAxMnYxNzNoLTIwMHYtMjAwaDE3MHExMCAwIDEyLjUgLTV0LTQuNSAtMTNsLTI2MCAtMjY0cS04IC04IC0xOCAtOHQtMTggOGwtMjY0IDI2NHEtOCA4IC01LjUgMTMgdDEyLjUgNWgxNzV2MjAwaC0yMDB2LTE3M3EwIC0xMCAtNSAtMTJ0LTEzIDVsLTI2NCAyNjVxLTggNyAtOCAxNy41dDggMTcuNWwyNjQgMjYwcTggNyAxMyA1dDUgLTEydi0xNzNoMjAwdjIwMGgtMTc1cS0xMCAwIC0xMi41IDV0NS41IDEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY5OyIgZD0iTTI1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MDsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjUgdC0xNC41IDM1LjV2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNzE7IiBkPSJNMTIwMCAxMDUwdi0xMDAwcTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDkyIDQ4MHEtMTUgMTQgLTE1IDM1dDE1IDM1bDQ5MiA0ODBxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yNDMgMTA3NGw4MTQgLTQ5OHExOCAtMTEgMTggLTI2dC0xOCAtMjZsLTgxNCAtNDk4cS0xOCAtMTEgLTMwLjUgLTR0LTEyLjUgMjh2MTAwMHEwIDIxIDEyLjUgMjh0MzAuNSAtNHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MzsiIGQ9Ik0yNTAgMTAwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTAwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NDsiIGQ9Ik0xMTAwIDk1MHYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTUwMCA2MTJ2NDM4cTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0OTIgLTQ4MHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTQ5MiAtNDgwcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djQzOGwtNDY0IC00NTNxLTE1IC0xNCAtMjUuNSAtMTB0LTEwLjUgMjV2MTAwMHEwIDIxIDEwLjUgMjV0MjUuNSAtMTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNzY7IiBkPSJNMTA0OCAxMTAybDEwMCAxcTIwIDAgMzUgLTE0LjV0MTUgLTM1LjVsNSAtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWwtMTAwIC0xcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNWwtMiA0MzdsLTQ2MyAtNDU0cS0xNCAtMTUgLTI0LjUgLTEwLjV0LTEwLjUgMjUuNWwtMiA0MzdsLTQ2MiAtNDU1cS0xNSAtMTQgLTI1LjUgLTkuNXQtMTAuNSAyNC41bC01IDEwMDBxMCAyMSAxMC41IDI1LjV0MjUuNSAtMTAuNWw0NjYgLTQ1MCBsLTIgNDM4cTAgMjAgMTAuNSAyNC41dDI1LjUgLTkuNWw0NjYgLTQ1MWwtMiA0MzhxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc3OyIgZD0iTTg1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MzhsLTQ2NCAtNDUzcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djEwMDBxMCAyMSAxMC41IDI1dDI1LjUgLTEwbDQ2NCAtNDUzdjQzOHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNNjg2IDEwODFsNTAxIC01NDBxMTUgLTE1IDEwLjUgLTI2dC0yNi41IC0xMWgtMTA0MnEtMjIgMCAtMjYuNSAxMXQxMC41IDI2bDUwMSA1NDBxMTUgMTUgMzYgMTV0MzYgLTE1ek0xNTAgNDAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3OTsiIGQ9Ik04ODUgOTAwbC0zNTIgLTM1M2wzNTIgLTM1M2wtMTk3IC0xOThsLTU1MiA1NTJsNTUyIDU1MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MDsiIGQ9Ik0xMDY0IDU0N2wtNTUxIC01NTFsLTE5OCAxOThsMzUzIDM1M2wtMzUzIDM1M2wxOTggMTk4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NTAgOTAwaC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MGgtMTUwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxNTB2LTE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxNTBoMTUwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODI7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTg1MCA3MDBoLTUwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjUgdDM1LjUgLTE0LjVoNTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTc0MS41IDkxM3EtMTIuNSAwIC0yMS41IC05bC0xMjAgLTEyMGwtMTIwIDEyMHEtOSA5IC0yMS41IDkgdC0yMS41IC05bC0xNDEgLTE0MXEtOSAtOSAtOSAtMjEuNXQ5IC0yMS41bDEyMCAtMTIwbC0xMjAgLTEyMHEtOSAtOSAtOSAtMjEuNXQ5IC0yMS41bDE0MSAtMTQxcTkgLTkgMjEuNSAtOXQyMS41IDlsMTIwIDEyMGwxMjAgLTEyMHE5IC05IDIxLjUgLTl0MjEuNSA5bDE0MSAxNDFxOSA5IDkgMjEuNXQtOSAyMS41bC0xMjAgMTIwbDEyMCAxMjBxOSA5IDkgMjEuNXQtOSAyMS41bC0xNDEgMTQxcS05IDkgLTIxLjUgOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNTQ2IDYyM2wtODQgODVxLTcgNyAtMTcuNSA3dC0xOC41IC03bC0xMzkgLTEzOXEtNyAtOCAtNyAtMTh0NyAtMTggbDI0MiAtMjQxcTcgLTggMTcuNSAtOHQxNy41IDhsMzc1IDM3NXE3IDcgNyAxNy41dC03IDE4LjVsLTEzOSAxMzlxLTcgNyAtMTcuNSA3dC0xNy41IC03eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDg1OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek01ODggOTQxcS0yOSAwIC01OSAtNS41dC02MyAtMjAuNXQtNTggLTM4LjV0LTQxLjUgLTYzdC0xNi41IC04OS41IHEwIC0yNSAyMCAtMjVoMTMxcTMwIC01IDM1IDExcTYgMjAgMjAuNSAyOHQ0NS41IDhxMjAgMCAzMS41IC0xMC41dDExLjUgLTI4LjVxMCAtMjMgLTcgLTM0dC0yNiAtMThxLTEgMCAtMTMuNSAtNHQtMTkuNSAtNy41dC0yMCAtMTAuNXQtMjIgLTE3dC0xOC41IC0yNHQtMTUuNSAtMzV0LTggLTQ2cS0xIC04IDUuNSAtMTYuNXQyMC41IC04LjVoMTczcTcgMCAyMiA4dDM1IDI4dDM3LjUgNDh0MjkuNSA3NHQxMiAxMDBxMCA0NyAtMTcgODMgdC00Mi41IDU3dC01OS41IDM0LjV0LTY0IDE4dC01OSA0LjV6TTY3NSA0MDBoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODY7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTY3NSAxMDAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0xNTBxMCAtMTAgNy41IC0xNy41IHQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNNjc1IDcwMGgtMjUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtNTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg3NXYtMjAwaC03NXEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMzUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2NTBxMCAxMCAtNy41IDE3LjUgdC0xNy41IDcuNWgtNzV2Mjc1cTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NzsiIGQ9Ik01MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xOTRxMTAzIC0yNyAxNzguNSAtMTAyLjV0MTAyLjUgLTE3OC41aDE5NHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NHEtMjcgLTEwMyAtMTAyLjUgLTE3OC41dC0xNzguNSAtMTAyLjV2LTE5NHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE5NCBxLTEwMyAyNyAtMTc4LjUgMTAyLjV0LTEwMi41IDE3OC41aC0xOTRxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxOTRxMjcgMTAzIDEwMi41IDE3OC41dDE3OC41IDEwMi41djE5NHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MDAgODkzdi0xNjhxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNjhxLTY4IC0yMyAtMTE5IC03NCB0LTc0IC0xMTloMTY4cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTY4cTIzIC02OCA3NCAtMTE5dDExOSAtNzR2MTY4cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTY4cTY4IDIzIDExOSA3NHQ3NCAxMTloLTE2OHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDE2OCBxLTIzIDY4IC03NCAxMTl0LTExOSA3NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4ODsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNzU5IDgyM2w2NCAtNjRxNyAtNyA3IC0xNy41dC03IC0xNy41bC0xMjQgLTEyNGwxMjQgLTEyNHE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTY0IC02NHEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC0xMjQgMTI0bC0xMjQgLTEyNHEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC02NCA2NCBxLTcgNyAtNyAxNy41dDcgMTcuNWwxMjQgMTI0bC0xMjQgMTI0cS03IDcgLTcgMTcuNXQ3IDE3LjVsNjQgNjRxNyA3IDE3LjUgN3QxNy41IC03bDEyNCAtMTI0bDEyNCAxMjRxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDg5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek03ODIgNzg4bDEwNiAtMTA2cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtMzIwIC0zMjFxLTggLTcgLTE4IC03dC0xOCA3bC0yMDIgMjAzcS04IDcgLTggMTcuNXQ4IDE3LjVsMTA2IDEwNnE3IDggMTcuNSA4dDE3LjUgLThsNzkgLTc5bDE5NyAxOTdxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVxMCAtMTIwIDY1IC0yMjUgbDU4NyA1ODdxLTEwNSA2NSAtMjI1IDY1ek05NjUgODE5bC01ODQgLTU4NHExMDQgLTYyIDIxOSAtNjJxMTE2IDAgMjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVxMCAxMTUgLTYyIDIxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MTsiIGQ9Ik0zOSA1ODJsNTIyIDQyN3ExNiAxMyAyNy41IDh0MTEuNSAtMjZ2LTI5MWg1NTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTUwdi0yOTFxMCAtMjEgLTExLjUgLTI2dC0yNy41IDhsLTUyMiA0MjdxLTE2IDEzIC0xNiAzMnQxNiAzMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MjsiIGQ9Ik02MzkgMTAwOWw1MjIgLTQyN3ExNiAtMTMgMTYgLTMydC0xNiAtMzJsLTUyMiAtNDI3cS0xNiAtMTMgLTI3LjUgLTh0LTExLjUgMjZ2MjkxaC01NTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTUwdjI5MXEwIDIxIDExLjUgMjZ0MjcuNSAtOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik02ODIgMTE2MWw0MjcgLTUyMnExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTI5MXYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgtMjkxcS0yMSAwIC0yNiAxMS41dDggMjcuNWw0MjcgNTIycTEzIDE2IDMyIDE2dDMyIC0xNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NDsiIGQ9Ik01NTAgMTIwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTU1MGgyOTFxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtNDI3IC01MjJxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtNDI3IDUyMnEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDI5MXY1NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk1OyIgZD0iTTYzOSAxMTA5bDUyMiAtNDI3cTE2IC0xMyAxNiAtMzJ0LTE2IC0zMmwtNTIyIC00MjdxLTE2IC0xMyAtMjcuNSAtOHQtMTEuNSAyNnYyOTFxLTk0IC0yIC0xODIgLTIwdC0xNzAuNSAtNTJ0LTE0NyAtOTIuNXQtMTAwLjUgLTEzNS41cTUgMTA1IDI3IDE5My41dDY3LjUgMTY3dDExMyAxMzV0MTY3IDkxLjV0MjI1LjUgNDJ2MjYycTAgMjEgMTEuNSAyNnQyNy41IC04eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTRsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTM1MCAwaC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDkgcTggNyAxOCA3dDE4IC03bDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0yNDkgLTI0OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NzsiIGQ9Ik0xMDE0IDExMjBsMTA2IC0xMDZxNyAtOCA3IC0xOHQtNyAtMThsLTI0OSAtMjQ5bDk0IC05NHExNCAtMTQgMTAgLTI0LjV0LTI1IC0xMC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDlxOCA3IDE4IDd0MTggLTd6TTI1MCA2MDBoMzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zMDBxMCAtMjEgLTEwLjUgLTI1dC0yNC41IDEwbC05NCA5NCBsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDE7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTcwNCA5MDBoLTIwOHEtMjAgMCAtMzIgLTE0LjV0LTggLTM0LjVsNTggLTMwMnE0IC0yMCAyMS41IC0zNC41IHQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41dDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMiAxNC41ek02NzUgNDAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0xNTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWgxNTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTI2MCAxMjAwcTkgMCAxOSAtMnQxNSAtNGw1IC0ycTIyIC0xMCA0NCAtMjNsMTk2IC0xMThxMjEgLTEzIDM2IC0yNHEyOSAtMjEgMzcgLTEycTExIDEzIDQ5IDM1bDE5NiAxMThxMjIgMTMgNDUgMjNxMTcgNyAzOCA3cTIzIDAgNDcgLTE2LjV0MzcgLTMzLjVsMTMgLTE2cTE0IC0yMSAxOCAtNDVsMjUgLTEyM2w4IC00NHExIC05IDguNSAtMTQuNXQxNy41IC01LjVoNjFxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MCBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE3NWgtNDAwdjMwMGgtMjAwdi0zMDBoLTQwMHYxNzVxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNjFxMTEgMCAxOCAzdDcgOHEwIDQgOSA1MmwyNSAxMjhxNSAyNSAxOSA0NXEyIDMgNSA3dDEzLjUgMTV0MjEuNSAxOS41dDI2LjUgMTUuNSB0MjkuNSA3ek05MTUgMTA3OWwtMTY2IC0xNjJxLTcgLTcgLTUgLTEydDEyIC01aDIxOXExMCAwIDE1IDd0MiAxN2wtNTEgMTQ5cS0zIDEwIC0xMSAxMnQtMTUgLTZ6TTQ2MyA5MTdsLTE3NyAxNTdxLTggNyAtMTYgNXQtMTEgLTEybC01MSAtMTQzcS0zIC0xMCAyIC0xN3QxNSAtN2gyMzFxMTEgMCAxMi41IDV0LTUuNSAxMnpNNTAwIDBoLTM3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWg0MDB2LTQwMHpNMTEwMCA0MDB2LTM3NSBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NDAwaDQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwMzsiIGQ9Ik0xMTY1IDExOTBxOCAzIDIxIC02LjV0MTMgLTE3LjVxLTIgLTE3OCAtMjQuNSAtMzIzLjV0LTU1LjUgLTI0NS41dC04NyAtMTc0LjV0LTEwMi41IC0xMTguNXQtMTE4IC02OC41dC0xMTguNSAtMzN0LTEyMCAtNC41dC0xMDUgOS41dC05MCAxNi41cS02MSAxMiAtNzggMTFxLTQgMSAtMTIuNSAwdC0zNCAtMTQuNXQtNTIuNSAtNDAuNWwtMTUzIC0xNTNxLTI2IC0yNCAtMzcgLTE0LjV0LTExIDQzLjVxMCA2NCA0MiAxMDJxOCA4IDUwLjUgNDUgdDY2LjUgNThxMTkgMTcgMzUgNDd0MTMgNjFxLTkgNTUgLTEwIDEwMi41dDcgMTExdDM3IDEzMHQ3OCAxMjkuNXEzOSA1MSA4MCA4OHQ4OS41IDYzLjV0OTQuNSA0NXQxMTMuNSAzNnQxMjkgMzF0MTU3LjUgMzd0MTgyIDQ3LjV6TTExMTYgMTA5OHEtOCA5IC0yMi41IC0zdC00NS41IC01MHEtMzggLTQ3IC0xMTkgLTEwMy41dC0xNDIgLTg5LjVsLTYyIC0zM3EtNTYgLTMwIC0xMDIgLTU3dC0xMDQgLTY4dC0xMDIuNSAtODAuNXQtODUuNSAtOTEgdC02NCAtMTA0LjVxLTI0IC01NiAtMzEgLTg2dDIgLTMydDMxLjUgMTcuNXQ1NS41IDU5LjVxMjUgMzAgOTQgNzUuNXQxMjUuNSA3Ny41dDE0Ny41IDgxcTcwIDM3IDExOC41IDY5dDEwMiA3OS41dDk5IDExMXQ4Ni41IDE0OC41cTIyIDUwIDI0IDYwdC02IDE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA0OyIgZD0iTTY1MyAxMjMxcS0zOSAtNjcgLTU0LjUgLTEzMXQtMTAuNSAtMTE0LjV0MjQuNSAtOTYuNXQ0Ny41IC04MHQ2My41IC02Mi41dDY4LjUgLTQ2LjV0NjUgLTMwcS00IDcgLTE3LjUgMzV0LTE4LjUgMzkuNXQtMTcgMzkuNXQtMTcgNDN0LTEzIDQydC05LjUgNDQuNXQtMiA0MnQ0IDQzdDEzLjUgMzl0MjMgMzguNXE5NiAtNDIgMTY1IC0xMDcuNXQxMDUgLTEzOHQ1MiAtMTU2dDEzIC0xNTl0LTE5IC0xNDkuNXEtMTMgLTU1IC00NCAtMTA2LjUgdC02OCAtODd0LTc4LjUgLTY0LjV0LTcyLjUgLTQ1dC01MyAtMjJxLTcyIC0yMiAtMTI3IC0xMXEtMzEgNiAtMTMgMTlxNiAzIDE3IDdxMTMgNSAzMi41IDIxdDQxIDQ0dDM4LjUgNjMuNXQyMS41IDgxLjV0LTYuNSA5NC41dC01MCAxMDd0LTEwNCAxMTUuNXExMCAtMTA0IC0wLjUgLTE4OXQtMzcgLTE0MC41dC02NSAtOTN0LTg0IC01MnQtOTMuNSAtMTF0LTk1IDI0LjVxLTgwIDM2IC0xMzEuNSAxMTR0LTUzLjUgMTcxcS0yIDIzIDAgNDkuNSB0NC41IDUyLjV0MTMuNSA1NnQyNy41IDYwdDQ2IDY0LjV0NjkuNSA2OC41cS04IC01MyAtNSAtMTAyLjV0MTcuNSAtOTB0MzQgLTY4LjV0NDQuNSAtMzl0NDkgLTJxMzEgMTMgMzguNSAzNnQtNC41IDU1dC0yOSA2NC41dC0zNiA3NXQtMjYgNzUuNXEtMTUgODUgMiAxNjEuNXQ1My41IDEyOC41dDg1LjUgOTIuNXQ5My41IDYxdDgxLjUgMjUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik02MDAgMTA5NHE4MiAwIDE2MC41IC0yMi41dDE0MCAtNTl0MTE2LjUgLTgyLjV0OTQuNSAtOTV0NjggLTk1dDQyLjUgLTgyLjV0MTQgLTU3LjV0LTE0IC01Ny41dC00MyAtODIuNXQtNjguNSAtOTV0LTk0LjUgLTk1dC0xMTYuNSAtODIuNXQtMTQwIC01OXQtMTU5LjUgLTIyLjV0LTE1OS41IDIyLjV0LTE0MCA1OXQtMTE2LjUgODIuNXQtOTQuNSA5NXQtNjguNSA5NXQtNDMgODIuNXQtMTQgNTcuNXQxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NSB0OTQuNSA5NXQxMTYuNSA4Mi41dDE0MCA1OXQxNjAuNSAyMi41ek04ODggODI5cS0xNSAxNSAtMTggMTJ0NSAtMjJxMjUgLTU3IDI1IC0xMTlxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4dC0yMTIgODh0LTg4IDIxMnEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMnQtMTcuNSAtMTJxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXEyMiAtMzYgNDcgLTcxdDcwIC04MnQ5Mi41IC04MXQxMTMgLTU4LjV0MTMzLjUgLTI0LjUgdDEzMy41IDI0dDExMyA1OC41dDkyLjUgODEuNXQ3MCA4MS41dDQ3IDcwLjVxMTEgMTggOSA0Mi41dC0xNCA0MS41cS05MCAxMTcgLTE2MyAxODl6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wzNSAzNHExNCAxNSAxMi41IDMzLjV0LTE2LjUgMzMuNXEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDY7IiBkPSJNNTkyIDBoLTE0OGwzMSAxMjBxLTkxIDIwIC0xNzUuNSA2OC41dC0xNDMuNSAxMDYuNXQtMTAzLjUgMTE5dC02Ni41IDExMHQtMjIgNzZxMCAyMSAxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NXQ5NC41IDk1dDExNi41IDgyLjV0MTQwIDU5dDE2MC41IDIyLjVxNjEgMCAxMjYgLTE1bDMyIDEyMWgxNDh6TTk0NCA3NzBsNDcgMTgxcTEwOCAtODUgMTc2LjUgLTE5MnQ2OC41IC0xNTlxMCAtMjYgLTE5LjUgLTcxdC01OS41IC0xMDJ0LTkzIC0xMTIgdC0xMjkgLTEwNC41dC0xNTggLTc1LjVsNDYgMTczcTc3IDQ5IDEzNiAxMTd0OTcgMTMxcTExIDE4IDkgNDIuNXQtMTQgNDEuNXEtNTQgNzAgLTEwNyAxMzB6TTMxMCA4MjRxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXExOCAtMzAgMzkgLTYwdDU3IC03MC41dDc0IC03M3Q5MCAtNjF0MTA1IC00MS41bDQxIDE1NHEtMTA3IDE4IC0xNzguNSAxMDEuNXQtNzEuNSAxOTMuNXEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMiB0LTE3LjUgLTEyek00NDggNzI3bC0zNSAtMzZxLTE1IC0xNSAtMTkuNSAtMzguNXQ0LjUgLTQxLjVxMzcgLTY4IDkzIC0xMTZxMTYgLTEzIDM4LjUgLTExdDM2LjUgMTdsMTIgMTFsMjIgODZsLTMgNHEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDc7IiBkPSJNLTkwIDEwMGw2NDIgMTA2NnEyMCAzMSA0OCAyOC41dDQ4IC0zNS41bDY0MiAtMTA1NnEyMSAtMzIgNy41IC02Ny41dC01MC41IC0zNS41aC0xMjk0cS0zNyAwIC01MC41IDM0dDcuNSA2NnpNMTU1IDIwMGgzNDV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWgzNDVsLTQ0NSA3MjN6TTQ5NiA3MDBoMjA4cTIwIDAgMzIgLTE0LjV0OCAtMzQuNWwtNTggLTI1MiBxLTQgLTIwIC0yMS41IC0zNC41dC0zNy41IC0xNC41aC01NHEtMjAgMCAtMzcuNSAxNC41dC0yMS41IDM0LjVsLTU4IDI1MnEtNCAyMCA4IDM0LjV0MzIgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik02NTAgMTIwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkzIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC0yMDUgMTI4bC0yMDUgLTEyOHEtMTkgLTkgLTMyIC0xdC0xMyAyOXY2NHEwIDIwIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41djQxIHEwIDIwIDExIDQ0LjV0MjYgMzguNWwzNjMgMzI1djMzOXEwIDYyIDQ0IDEwNnQxMDYgNDR6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDk7IiBkPSJNODUwIDEyMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTUwaC0xMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEwMCA4MDB2LTc1MHEwIC0yMSAtMTQuNSAtMzUuNSB0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djc1MGgxMTAwek0xMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgNDAwIHYtMTAwaDEwMHYxMDBoLTEwMHpNNzAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNOTAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwIDIwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMzAwIDIwMHYtMTAwaDEwMHYxMDBoLTEwMHpNNTAwIDIwMHYtMTAwaDEwMHYxMDBoLTEwMHpNNzAwIDIwMHYtMTAwaDEwMHYxMDBoLTEwMHpNOTAwIDIwMHYtMTAwaDEwMHYxMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExMDsiIGQ9Ik0xMTM1IDExNjVsMjQ5IC0yMzBxMTUgLTE0IDE1IC0zNXQtMTUgLTM1bC0yNDkgLTIzMHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYxNTBoLTE1OWwtNjAwIC02MDBoLTI5MXEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDlsNjAwIDYwMGgyNDF2MTUwcTAgMjEgMTAuNSAyNXQyNC41IC0xMHpNNTIyIDgxOWwtMTQxIC0xNDFsLTEyMiAxMjJoLTIwOXEtMjEgMCAtMzUuNSAxNC41IHQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjkxek0xMTM1IDU2NWwyNDkgLTIzMHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTI0OSAtMjMwcS0xNCAtMTQgLTI0LjUgLTEwdC0xMC41IDI1djE1MGgtMjQxbC0xODEgMTgxbDE0MSAxNDFsMTIyIC0xMjJoMTU5djE1MHEwIDIxIDEwLjUgMjV0MjQuNSAtMTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMTAwIDExMDBoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTEyOyIgZD0iTTE1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0zMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTMwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDgwMHYtMzAwcTAgLTQxIC0zIC03Ny41dC0xNSAtODkuNXQtMzIgLTk2dC01OCAtODl0LTg5IC03N3QtMTI5IC01MXQtMTc0IC0yMHQtMTc0IDIwIHQtMTI5IDUxdC04OSA3N3QtNTggODl0LTMyIDk2dC0xNSA4OS41dC0zIDc3LjV2MzAwaDMwMHYtMjUwdi0yN3YtNDIuNXQxLjUgLTQxdDUgLTM4dDEwIC0zNXQxNi41IC0zMHQyNS41IC0yNC41dDM1IC0xOXQ0Ni41IC0xMnQ2MCAtNHQ2MCA0LjV0NDYuNSAxMi41dDM1IDE5LjV0MjUgMjUuNXQxNyAzMC41dDEwIDM1dDUgMzh0MiA0MC41dC0wLjUgNDJ2MjV2MjUwaDMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExMzsiIGQ9Ik0xMTAwIDQxMWwtMTk4IC0xOTlsLTM1MyAzNTNsLTM1MyAtMzUzbC0xOTcgMTk5bDU1MSA1NTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNMTEwMSA3ODlsLTU1MCAtNTUxbC01NTEgNTUxbDE5OCAxOTlsMzUzIC0zNTNsMzUzIDM1M3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExNTsiIGQ9Ik00MDQgMTAwMGg3NDZxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTU1MWgxNTBxMjEgMCAyNSAtMTAuNXQtMTAgLTI0LjVsLTIzMCAtMjQ5cS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNDlxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjQwMWgtMzgxek0xMzUgOTg0bDIzMCAtMjQ5cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTE1MHYtNDAwaDM4NWwyMTUgLTIwMGgtNzUwcS0yMSAwIC0zNS41IDE0LjUgdC0xNC41IDM1LjV2NTUwaC0xNTBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWwyMzAgMjQ5cTE0IDE1IDM1IDE1dDM1IC0xNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExNjsiIGQ9Ik01NiAxMjAwaDk0cTE3IDAgMzEgLTExdDE4IC0yN2wzOCAtMTYyaDg5NnEyNCAwIDM5IC0xOC41dDEwIC00Mi41bC0xMDAgLTQ3NXEtNSAtMjEgLTI3IC00Mi41dC01NSAtMjEuNWgtNjMzbDQ4IC0yMDBoNTM1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01MHYtNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaC0zMDB2LTUwIHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2NTBoLTMxcS0xOCAwIC0zMi41IDEwdC0yMC41IDE5bC01IDEwbC0yMDEgOTYxaC01NHEtMjAgMCAtMzUgMTQuNXQtMTUgMzUuNXQxNSAzNS41dDM1IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMTIwMCAxMDAwdi0xMDBoLTEyMDB2MTAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHpNMCA4MDBoMTIwMHYtODAwaC0xMjAwdjgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExODsiIGQ9Ik0yMDAgODAwbC0yMDAgLTQwMHY2MDBoMjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDBxNDIgMCA3MSAtMjkuNXQyOSAtNzAuNWg1MDB2LTIwMGgtMTAwMHpNMTUwMCA3MDBsLTMwMCAtNzAwaC0xMjAwbDMwMCA3MDBoMTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExOTsiIGQ9Ik02MzUgMTE4NGwyMzAgLTI0OXExNCAtMTQgMTAgLTI0LjV0LTI1IC0xMC41aC0xNTB2LTYwMWgxNTBxMjEgMCAyNSAtMTAuNXQtMTAgLTI0LjVsLTIzMCAtMjQ5cS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNDlxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjYwMWgtMTUwcS0yMSAwIC0yNSAxMC41dDEwIDI0LjVsMjMwIDI0OXExNCAxNSAzNSAxNXQzNSAtMTV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNOTM2IDg2NGwyNDkgLTIyOXExNCAtMTUgMTQgLTM1LjV0LTE0IC0zNS41bC0yNDkgLTIyOXEtMTUgLTE1IC0yNS41IC0xMC41dC0xMC41IDI0LjV2MTUxaC02MDB2LTE1MXEwIC0yMCAtMTAuNSAtMjQuNXQtMjUuNSAxMC41bC0yNDkgMjI5cS0xNCAxNSAtMTQgMzUuNXQxNCAzNS41bDI0OSAyMjlxMTUgMTUgMjUuNSAxMC41dDEwLjUgLTI1LjV2LTE0OWg2MDB2MTQ5cTAgMjEgMTAuNSAyNS41dDI1LjUgLTEwLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjE7IiBkPSJNMTE2OSA0MDBsLTE3MiA3MzJxLTUgMjMgLTIzIDQ1LjV0LTM4IDIyLjVoLTY3MnEtMjAgMCAtMzggLTIwdC0yMyAtNDFsLTE3MiAtNzM5aDExMzh6TTExMDAgMzAwaC0xMDAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di0xMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDEwMDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djEwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNODAwIDEwMHYxMDBoMTAwdi0xMDBoLTEwMCB6TTEwMDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTIyOyIgZD0iTTExNTAgMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMDAwIDIwMGwtNjc1IDIwMGgtMzhsNDcgLTI3NnEzIC0xNiAtNS41IC0yMHQtMjkuNSAtNGgtN2gtODRxLTIwIDAgLTM0LjUgMTR0LTE4LjUgMzVxLTU1IDMzNyAtNTUgMzUxdjI1MHY2cTAgMTYgMSAyMy41dDYuNSAxNCB0MTcuNSA2LjVoMjAwbDY3NSAyNTB2LTg1MHpNMCA3NTB2LTI1MHEtNCAwIC0xMSAwLjV0LTI0IDZ0LTMwIDE1dC0yNCAzMHQtMTEgNDguNXY1MHEwIDI2IDEwLjUgNDZ0MjUgMzB0MjkgMTZ0MjUuNSA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTU1MyAxMjAwaDk0cTIwIDAgMjkgLTEwLjV0MyAtMjkuNWwtMTggLTM3cTgzIC0xOSAxNDQgLTgyLjV0NzYgLTE0MC41bDYzIC0zMjdsMTE4IC0xNzNoMTdxMTkgMCAzMyAtMTQuNXQxNCAtMzV0LTEzIC00MC41dC0zMSAtMjdxLTggLTQgLTIzIC05LjV0LTY1IC0xOS41dC0xMDMgLTI1dC0xMzIuNSAtMjB0LTE1OC41IC05cS01NyAwIC0xMTUgNXQtMTA0IDEydC04OC41IDE1LjV0LTczLjUgMTcuNXQtNTQuNSAxNnQtMzUuNSAxMmwtMTEgNCBxLTE4IDggLTMxIDI4dC0xMyA0MC41dDE0IDM1dDMzIDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMy41IDMydDI4LjUgMTN6TTQ5OCAxMTBxNTAgLTYgMTAyIC02cTUzIDAgMTAyIDZxLTEyIC00OSAtMzkuNSAtNzkuNXQtNjIuNSAtMzAuNXQtNjMgMzAuNXQtMzkgNzkuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNDsiIGQ9Ik04MDAgOTQ2bDIyNCA3OGwtNzggLTIyNGwyMzQgLTQ1bC0xODAgLTE1NWwxODAgLTE1NWwtMjM0IC00NWw3OCAtMjI0bC0yMjQgNzhsLTQ1IC0yMzRsLTE1NSAxODBsLTE1NSAtMTgwbC00NSAyMzRsLTIyNCAtNzhsNzggMjI0bC0yMzQgNDVsMTgwIDE1NWwtMTgwIDE1NWwyMzQgNDVsLTc4IDIyNGwyMjQgLTc4bDQ1IDIzNGwxNTUgLTE4MGwxNTUgMTgweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI1OyIgZD0iTTY1MCAxMjAwaDUwcTQwIDAgNzAgLTQwLjV0MzAgLTg0LjV2LTE1MGwtMjggLTEyNWgzMjhxNDAgMCA3MCAtNDAuNXQzMCAtODQuNXYtMTAwcTAgLTQ1IC0yOSAtNzRsLTIzOCAtMzQ0cS0xNiAtMjQgLTM4IC00MC41dC00NSAtMTYuNWgtMjUwcS03IDAgLTQyIDI1dC02NiA1MGwtMzEgMjVoLTYxcS00NSAwIC03Mi41IDE4dC0yNy41IDU3djQwMHEwIDM2IDIwIDYzbDE0NSAxOTZsOTYgMTk4cTEzIDI4IDM3LjUgNDh0NTEuNSAyMHogTTY1MCAxMTAwbC0xMDAgLTIxMmwtMTUwIC0yMTN2LTM3NWgxMDBsMTM2IC0xMDBoMjE0bDI1MCAzNzV2MTI1aC00NTBsNTAgMjI1djE3NWgtNTB6TTUwIDgwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTYwMCAxMTAwaDI1MHEyMyAwIDQ1IC0xNi41dDM4IC00MC41bDIzOCAtMzQ0cTI5IC0yOSAyOSAtNzR2LTEwMHEwIC00NCAtMzAgLTg0LjV0LTcwIC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwIC04NC41dC03MCAtNDAuNWgtNTBxLTI3IDAgLTUxLjUgMjB0LTM3LjUgNDhsLTk2IDE5OGwtMTQ1IDE5NnEtMjAgMjcgLTIwIDYzdjQwMHEwIDM5IDI3LjUgNTd0NzIuNSAxOGg2MXExMjQgMTAwIDEzOSAxMDB6IE01MCAxMDAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTYzNiAxMDAwbC0xMzYgLTEwMGgtMTAwdi0zNzVsMTUwIC0yMTNsMTAwIC0yMTJoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI3OyIgZD0iTTM1NiA4NzNsMzYzIDIzMHEzMSAxNiA1MyAtNmwxMTAgLTExMnExMyAtMTMgMTMuNSAtMzJ0LTExLjUgLTM0bC04NCAtMTIxaDMwMnE4NCAwIDEzOCAtMzh0NTQgLTExMHQtNTUgLTExMXQtMTM5IC0zOWgtMTA2bC0xMzEgLTMzOXEtNiAtMjEgLTE5LjUgLTQxdC0yOC41IC0yMGgtMzQycS03IDAgLTkwIDgxdC04MyA5NHY1MjVxMCAxNyAxNCAzNS41dDI4IDI4LjV6TTQwMCA3OTJ2LTUwM2wxMDAgLTg5aDI5M2wxMzEgMzM5IHE2IDIxIDE5LjUgNDF0MjguNSAyMGgyMDNxMjEgMCAzMC41IDI1dDAuNSA1MHQtMzEgMjVoLTQ1NmgtN2gtNmgtNS41dC02IDAuNXQtNSAxLjV0LTUgMnQtNCAyLjV0LTQgNHQtMi41IDQuNXEtMTIgMjUgNSA0N2wxNDYgMTgzbC04NiA4M3pNNTAgODAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI4OyIgZD0iTTQ3NSAxMTAzbDM2NiAtMjMwcTIgLTEgNiAtMy41dDE0IC0xMC41dDE4IC0xNi41dDE0LjUgLTIwdDYuNSAtMjIuNXYtNTI1cTAgLTEzIC04NiAtOTR0LTkzIC04MWgtMzQycS0xNSAwIC0yOC41IDIwdC0xOS41IDQxbC0xMzEgMzM5aC0xMDZxLTg1IDAgLTEzOS41IDM5dC01NC41IDExMXQ1NCAxMTB0MTM4IDM4aDMwMmwtODUgMTIxcS0xMSAxNSAtMTAuNSAzNHQxMy41IDMybDExMCAxMTJxMjIgMjIgNTMgNnpNMzcwIDk0NWwxNDYgLTE4MyBxMTcgLTIyIDUgLTQ3cS0yIC0yIC0zLjUgLTQuNXQtNCAtNHQtNCAtMi41dC01IC0ydC01IC0xLjV0LTYgLTAuNWgtNmgtNi41aC02aC00NzV2LTEwMGgyMjFxMTUgMCAyOSAtMjB0MjAgLTQxbDEzMCAtMzM5aDI5NGwxMDYgODl2NTAzbC0zNDIgMjM2ek0xMDUwIDgwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNSB2NTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik01NTAgMTI5NHE3MiAwIDExMSAtNTV0MzkgLTEzOXYtMTA2bDMzOSAtMTMxcTIxIC02IDQxIC0xOS41dDIwIC0yOC41di0zNDJxMCAtNyAtODEgLTkwdC05NCAtODNoLTUyNXEtMTcgMCAtMzUuNSAxNHQtMjguNSAyOGwtOSAxNGwtMjMwIDM2M3EtMTYgMzEgNiA1M2wxMTIgMTEwcTEzIDEzIDMyIDEzLjV0MzQgLTExLjVsMTIxIC04NHYzMDJxMCA4NCAzOCAxMzh0MTEwIDU0ek02MDAgOTcydjIwM3EwIDIxIC0yNSAzMC41dC01MCAwLjUgdC0yNSAtMzF2LTQ1NnYtN3YtNnYtNS41dC0wLjUgLTZ0LTEuNSAtNXQtMiAtNXQtMi41IC00dC00IC00dC00LjUgLTIuNXEtMjUgLTEyIC00NyA1bC0xODMgMTQ2bC04MyAtODZsMjM2IC0zMzloNTAzbDg5IDEwMHYyOTNsLTMzOSAxMzFxLTIxIDYgLTQxIDE5LjV0LTIwIDI4LjV6TTQ1MCAyMDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzA7IiBkPSJNMzUwIDExMDBoNTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTUwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNXpNNjAwIDMwNnYtMTA2cTAgLTg0IC0zOSAtMTM5dC0xMTEgLTU1dC0xMTAgNTR0LTM4IDEzOHYzMDJsLTEyMSAtODRxLTE1IC0xMiAtMzQgLTExLjV0LTMyIDEzLjVsLTExMiAxMTAgcS0yMiAyMiAtNiA1M2wyMzAgMzYzcTEgMiAzLjUgNnQxMC41IDEzLjV0MTYuNSAxN3QyMCAxMy41dDIyLjUgNmg1MjVxMTMgMCA5NCAtODN0ODEgLTkwdi0zNDJxMCAtMTUgLTIwIC0yOC41dC00MSAtMTkuNXpNMzA4IDkwMGwtMjM2IC0zMzlsODMgLTg2bDE4MyAxNDZxMjIgMTcgNDcgNXEyIC0xIDQuNSAtMi41dDQgLTR0Mi41IC00dDIgLTV0MS41IC01dDAuNSAtNnYtNS41di02di03di00NTZxMCAtMjIgMjUgLTMxdDUwIDAuNXQyNSAzMC41IHYyMDNxMCAxNSAyMCAyOC41dDQxIDE5LjVsMzM5IDEzMXYyOTNsLTg5IDEwMGgtNTAzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMxOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek05MTQgNjMybC0yNzUgMjIzcS0xNiAxMyAtMjcuNSA4dC0xMS41IC0yNnYtMTM3aC0yNzUgcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMjc1di0xMzdxMCAtMjEgMTEuNSAtMjZ0MjcuNSA4bDI3NSAyMjNxMTYgMTMgMTYgMzJ0LTE2IDMyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek01NjEgODU1bC0yNzUgLTIyM3EtMTYgLTEzIC0xNiAtMzJ0MTYgLTMybDI3NSAtMjIzcTE2IC0xMyAyNy41IC04IHQxMS41IDI2djEzN2gyNzVxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC0yNzV2MTM3cTAgMjEgLTExLjUgMjZ0LTI3LjUgLTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzM7IiBkPSJNNjAwIDExNzhxMTE4IDAgMjI1IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjV0LTQ1LjUgLTIyNXQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI1IC00NS41dC0yMjUgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI1dDQ1LjUgMjI1dDEyMyAxODQuNXQxODQuNSAxMjN0MjI1IDQ1LjV6TTg1NSA2MzlsLTIyMyAyNzVxLTEzIDE2IC0zMiAxNnQtMzIgLTE2bC0yMjMgLTI3NXEtMTMgLTE2IC04IC0yNy41IHQyNiAtMTEuNWgxMzd2LTI3NXEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djI3NWgxMzdxMjEgMCAyNiAxMS41dC04IDI3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzQ7IiBkPSJNNjAwIDExNzhxMTE4IDAgMjI1IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjV0LTQ1LjUgLTIyNXQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI1IC00NS41dC0yMjUgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI1dDQ1LjUgMjI1dDEyMyAxODQuNXQxODQuNSAxMjN0MjI1IDQ1LjV6TTY3NSA5MDBoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTI3NWgtMTM3cS0yMSAwIC0yNiAtMTEuNSB0OCAtMjcuNWwyMjMgLTI3NXExMyAtMTYgMzIgLTE2dDMyIDE2bDIyMyAyNzVxMTMgMTYgOCAyNy41dC0yNiAxMS41aC0xMzd2Mjc1cTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNTsiIGQ9Ik02MDAgMTE3NnExMTYgMCAyMjIuNSAtNDZ0MTg0IC0xMjMuNXQxMjMuNSAtMTg0dDQ2IC0yMjIuNXQtNDYgLTIyMi41dC0xMjMuNSAtMTg0dC0xODQgLTEyMy41dC0yMjIuNSAtNDZ0LTIyMi41IDQ2dC0xODQgMTIzLjV0LTEyMy41IDE4NHQtNDYgMjIyLjV0NDYgMjIyLjV0MTIzLjUgMTg0dDE4NCAxMjMuNXQyMjIuNSA0NnpNNjI3IDExMDFxLTE1IC0xMiAtMzYuNSAtMjAuNXQtMzUuNSAtMTJ0LTQzIC04dC0zOSAtNi41IHEtMTUgLTMgLTQ1LjUgMHQtNDUuNSAtMnEtMjAgLTcgLTUxLjUgLTI2LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzlxLTkgLTM0IDUgLTkzdDggLTg3cTAgLTkgMTcgLTQ0LjV0MTYgLTU5LjVxMTIgMCAyMyAtNXQyMy41IC0xNXQxOS41IC0xNHExNiAtOCAzMyAtMTV0NDAuNSAtMTV0MzQuNSAtMTJxMjEgLTkgNTIuNSAtMzJ0NjAgLTM4dDU3LjUgLTExIHE3IC0xNSAtMyAtMzR0LTIyLjUgLTQwdC05LjUgLTM4cTEzIC0yMSAyMyAtMzQuNXQyNy41IC0yNy41dDM2LjUgLTE4cTAgLTcgLTMuNSAtMTZ0LTMuNSAtMTR0NSAtMTdxMTA0IC0yIDIyMSAxMTJxMzAgMjkgNDYuNSA0N3QzNC41IDQ5dDIxIDYzcS0xMyA4IC0zNyA4LjV0LTM2IDcuNXEtMTUgNyAtNDkuNSAxNXQtNTEuNSAxOXEtMTggMCAtNDEgLTAuNXQtNDMgLTEuNXQtNDIgLTYuNXQtMzggLTE2LjVxLTUxIC0zNSAtNjYgLTEyIHEtNCAxIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxNy41dC0yNC41IDYuNXExIDE1IC0wLjUgMzAuNXQtNyAyOHQtMTguNSAxMS41dC0zMSAtMjFxLTIzIC0yNSAtNDIgNHEtMTkgMjggLTggNThxNiAxNiAyMiAyMnE2IC0xIDI2IC0xLjV0MzMuNSAtNHQxOS41IC0xMy41cTcgLTEyIDE4IC0yNHQyMS41IC0yMC41dDIwIC0xNXQxNS41IC0xMC41bDUgLTNxMiAxMiA3LjUgMzAuNXQ4IDM0LjV0LTAuNSAzMnEtMyAxOCAzLjUgMjkgdDE4IDIyLjV0MTUuNSAyNC41cTYgMTQgMTAuNSAzNXQ4IDMxdDE1LjUgMjIuNXQzNCAyMi41cS02IDE4IDEwIDM2cTggMCAyNCAtMS41dDI0LjUgLTEuNXQyMCA0LjV0MjAuNSAxNS41cS0xMCAyMyAtMzEgNDIuNXQtMzcuNSAyOS41dC00OSAyN3QtNDMuNSAyM3EwIDEgMiA4dDMgMTEuNXQxLjUgMTAuNXQtMSA5LjV0LTQuNSA0LjVxMzEgLTEzIDU4LjUgLTE0LjV0MzguNSAyLjVsMTIgNXE1IDI4IC05LjUgNDZ0LTM2LjUgMjR0LTUwIDE1IHQtNDEgMjBxLTE4IC00IC0zNyAwek02MTMgOTk0cTAgLTE3IDggLTQydDE3IC00NXQ5IC0yM3EtOCAxIC0zOS41IDUuNXQtNTIuNSAxMHQtMzcgMTYuNXEzIDExIDE2IDI5LjV0MTYgMjUuNXExMCAtMTAgMTkgLTEwdDE0IDZ0MTMuNSAxNC41dDE2LjUgMTIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNjsiIGQ9Ik03NTYgMTE1N3ExNjQgOTIgMzA2IC05bC0yNTkgLTEzOGwxNDUgLTIzMmwyNTEgMTI2cTYgLTg5IC0zNCAtMTU2LjV0LTExNyAtMTEwLjVxLTYwIC0zNCAtMTI3IC0zOS41dC0xMjYgMTYuNWwtNTk2IC01OTZxLTE1IC0xNiAtMzYuNSAtMTZ0LTM2LjUgMTZsLTExMSAxMTBxLTE1IDE1IC0xNSAzNi41dDE1IDM3LjVsNjAwIDU5OXEtMzQgMTAxIDUuNSAyMDEuNXQxMzUuNSAxNTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNzsiIGhvcml6LWFkdi14PSIxMjIwIiBkPSJNMTAwIDExOTZoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41ek0xMTAwIDEwOTZoLTIwMHYtMTAwaDIwMHYxMDB6TTEwMCA3OTZoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCA2OTZoLTUwMHYtMTAwaDUwMHYxMDB6TTEwMCAzOTZoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41ek0xMTAwIDI5NmgtMzAwdi0xMDBoMzAwdjEwMHogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTUwIDEyMDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA1MDB2LTMwMGwtMjAwIC0yMDB2NTAwbC0zNTAgNTAwaDkwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzOTsiIGQ9Ik01MDAgMTIwMGgyMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMGgtNTAwdjEwMGgtMjAwdi0xMDBoLTUwMHY0MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41ek01MDAgMTEwMHYtMTAwaDIwMHYxMDBoLTIwMHpNMTIwMCA0MDB2LTIwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djIwMGgxMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQwOyIgZD0iTTUwIDEyMDBoMzAwcTIxIDAgMjUgLTEwLjV0LTEwIC0yNC41bC05NCAtOTRsMTk5IC0xOTlxNyAtOCA3IC0xOHQtNyAtMThsLTEwNiAtMTA2cS04IC03IC0xOCAtN3QtMTggN2wtMTk5IDE5OWwtOTQgLTk0cS0xNCAtMTQgLTI0LjUgLTEwdC0xMC41IDI1djMwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTQgbC0xOTkgLTE5OXEtOCAtNyAtMTggLTd0LTE4IDdsLTEwNiAxMDZxLTcgOCAtNyAxOHQ3IDE4bDE5OSAxOTlsLTk0IDk0cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41ek0zNjQgNDcwbDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0xOTkgLTE5OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxMC41IDI1dDI0LjUgLTEwbDk0IC05NGwxOTkgMTk5IHE4IDcgMTggN3QxOCAtN3pNMTA3MSAyNzFsOTQgOTRxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMzAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWw5NCA5NGwtMTk5IDE5OXEtNyA4IC03IDE4dDcgMThsMTA2IDEwNnE4IDcgMTggN3QxOCAtN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik01OTYgMTE5MnExMjEgMCAyMzEuNSAtNDcuNXQxOTAgLTEyN3QxMjcgLTE5MHQ0Ny41IC0yMzEuNXQtNDcuNSAtMjMxLjV0LTEyNyAtMTkwLjV0LTE5MCAtMTI3dC0yMzEuNSAtNDd0LTIzMS41IDQ3dC0xOTAuNSAxMjd0LTEyNyAxOTAuNXQtNDcgMjMxLjV0NDcgMjMxLjV0MTI3IDE5MHQxOTAuNSAxMjd0MjMxLjUgNDcuNXpNNTk2IDEwMTBxLTExMiAwIC0yMDcuNSAtNTUuNXQtMTUxIC0xNTF0LTU1LjUgLTIwNy41dDU1LjUgLTIwNy41IHQxNTEgLTE1MXQyMDcuNSAtNTUuNXQyMDcuNSA1NS41dDE1MSAxNTF0NTUuNSAyMDcuNXQtNTUuNSAyMDcuNXQtMTUxIDE1MXQtMjA3LjUgNTUuNXpNNDU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOC41IC0xNi41dC0zOC41IDE2LjV0LTE2IDM5dDE2IDM4LjV0MzguNSAxNnpNNzU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOCAtMTYuNXEtMTQgMCAtMjkgMTBsLTU1IC0xNDUgcTE3IC0yMyAxNyAtNTFxMCAtMzYgLTI1LjUgLTYxLjV0LTYxLjUgLTI1LjV0LTYxLjUgMjUuNXQtMjUuNSA2MS41cTAgMzIgMjAuNSA1Ni41dDUxLjUgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIzIDE2IDM5dDM4LjUgMTZ6TTM0NS41IDcwOXEyMi41IDAgMzguNSAtMTZ0MTYgLTM4LjV0LTE2IC0zOC41dC0zOC41IC0xNnQtMzguNSAxNnQtMTYgMzguNXQxNiAzOC41dDM4LjUgMTZ6TTg1NC41IDcwOXEyMi41IDAgMzguNSAtMTYgdDE2IC0zOC41dC0xNiAtMzguNXQtMzguNSAtMTZ0LTM4LjUgMTZ0LTE2IDM4LjV0MTYgMzguNXQzOC41IDE2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQyOyIgZD0iTTU0NiAxNzNsNDY5IDQ3MHE5MSA5MSA5OSAxOTJxNyA5OCAtNTIgMTc1LjV0LTE1NCA5NC41cS0yMiA0IC00NyA0cS0zNCAwIC02Ni41IC0xMHQtNTYuNSAtMjN0LTU1LjUgLTM4dC00OCAtNDEuNXQtNDguNSAtNDcuNXEtMzc2IC0zNzUgLTM5MSAtMzkwcS0zMCAtMjcgLTQ1IC00MS41dC0zNy41IC00MXQtMzIgLTQ2LjV0LTE2IC00Ny41dC0xLjUgLTU2LjVxOSAtNjIgNTMuNSAtOTV0OTkuNSAtMzNxNzQgMCAxMjUgNTFsNTQ4IDU0OCBxMzYgMzYgMjAgNzVxLTcgMTYgLTIxLjUgMjZ0LTMyLjUgMTBxLTI2IDAgLTUwIC0yM3EtMTMgLTEyIC0zOSAtMzhsLTM0MSAtMzM4cS0xNSAtMTUgLTM1LjUgLTE1LjV0LTM0LjUgMTMuNXQtMTQgMzQuNXQxNCAzNC41cTMyNyAzMzMgMzYxIDM2N3EzNSAzNSA2Ny41IDUxLjV0NzguNSAxNi41cTE0IDAgMjkgLTFxNDQgLTggNzQuNSAtMzUuNXQ0My41IC02OC41cTE0IC00NyAyIC05Ni41dC00NyAtODQuNXEtMTIgLTExIC0zMiAtMzIgdC03OS41IC04MXQtMTE0LjUgLTExNXQtMTI0LjUgLTEyMy41dC0xMjMgLTExOS41dC05Ni41IC04OXQtNTcgLTQ1cS01NiAtMjcgLTEyMCAtMjdxLTcwIDAgLTEyOSAzMnQtOTMgODlxLTQ4IDc4IC0zNSAxNzN0ODEgMTYzbDUxMSA1MTFxNzEgNzIgMTExIDk2cTkxIDU1IDE5OCA1NXE4MCAwIDE1MiAtMzNxNzggLTM2IDEyOS41IC0xMDN0NjYuNSAtMTU0cTE3IC05MyAtMTEgLTE4My41dC05NCAtMTU2LjVsLTQ4MiAtNDc2IHEtMTUgLTE1IC0zNiAtMTZ0LTM3IDE0dC0xNy41IDM0dDE0LjUgMzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDM7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6TTg5NiA5NzJxLTMzIDAgLTY0LjUgLTE5dC01Ni41IC00NnQtNDcuNSAtNTMuNXQtNDMuNSAtNDUuNXQtMzcuNSAtMTl0LTM2IDE5dC00MCA0NS41dC00MyA1My41dC01NCA0NnQtNjUuNSAxOXEtNjcgMCAtMTIyLjUgLTU1LjV0LTU1LjUgLTEzMi41cTAgLTIzIDEzLjUgLTUxdDQ2IC02NXQ1Ny41IC02M3Q3NiAtNzVsMjIgLTIycTE1IC0xNCA0NCAtNDR0NTAuNSAtNTF0NDYgLTQ0dDQxIC0zNXQyMyAtMTIgdDIzLjUgMTJ0NDIuNSAzNnQ0NiA0NHQ1Mi41IDUydDQ0IDQzcTQgNCAxMiAxM3E0MyA0MSA2My41IDYydDUyIDU1dDQ2IDU1dDI2IDQ2dDExLjUgNDRxMCA3OSAtNTMgMTMzLjV0LTEyMCA1NC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ0OyIgZD0iTTc3Ni41IDEyMTRxOTMuNSAwIDE1OS41IC02NmwxNDEgLTE0MXE2NiAtNjYgNjYgLTE2MHEwIC00MiAtMjggLTk1LjV0LTYyIC04Ny41bC0yOSAtMjlxLTMxIDUzIC03NyA5OWwtMTggMThsOTUgOTVsLTI0NyAyNDhsLTM4OSAtMzg5bDIxMiAtMjEybC0xMDUgLTEwNmwtMTkgMThsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTl0NjYgMTU5bDI4MyAyODNxNjUgNjYgMTU4LjUgNjZ6TTYwMCA3MDZsMTA1IDEwNXExMCAtOCAxOSAtMTdsMTQxIC0xNDEgcTY2IC02NiA2NiAtMTU5dC02NiAtMTU5bC0yODMgLTI4M3EtNjYgLTY2IC0xNTkgLTY2dC0xNTkgNjZsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTkuNXQ2NiAxNTkuNWw1NSA1NXEyOSAtNTUgNzUgLTEwMmwxOCAtMTdsLTk1IC05NWwyNDcgLTI0OGwzODkgMzg5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ1OyIgZD0iTTYwMyAxMjAwcTg1IDAgMTYyIC0xNXQxMjcgLTM4dDc5IC00OHQyOSAtNDZ2LTk1M3EwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtNjAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY5NTNxMCAyMSAzMCA0Ni41dDgxIDQ4dDEyOSAzNy41dDE2MyAxNXpNMzAwIDEwMDB2LTcwMGg2MDB2NzAwaC02MDB6TTYwMCAyNTRxLTQzIDAgLTczLjUgLTMwLjV0LTMwLjUgLTczLjV0MzAuNSAtNzMuNXQ3My41IC0zMC41dDczLjUgMzAuNSB0MzAuNSA3My41dC0zMC41IDczLjV0LTczLjUgMzAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0NjsiIGQ9Ik05MDIgMTE4NWwyODMgLTI4MnExNSAtMTUgMTUgLTM2dC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNSAxNWwtMzYgMzVsLTI3OSAtMjY3di0zMDBsLTIxMiAyMTBsLTMwOCAtMzA3bC0yODAgLTIwM2wyMDMgMjgwbDMwNyAzMDhsLTIxMCAyMTJoMzAwbDI2NyAyNzlsLTM1IDM2cS0xNSAxNCAtMTUgMzV0MTQuNSAzNS41dDM1LjUgMTQuNXQzNSAtMTV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNNzAwIDEyNDh2LTc4cTM4IC01IDcyLjUgLTE0LjV0NzUuNSAtMzEuNXQ3MSAtNTMuNXQ1MiAtODR0MjQgLTExOC41aC0xNTlxLTQgMzYgLTEwLjUgNTl0LTIxIDQ1dC00MCAzNS41dC02NC41IDIwLjV2LTMwN2w2NCAtMTNxMzQgLTcgNjQgLTE2LjV0NzAgLTMydDY3LjUgLTUyLjV0NDcuNSAtODB0MjAgLTExMnEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTd2LTc3aC0xMDB2NzlxLTE1MCAxNiAtMjM3IDEwM3EtNDAgNDAgLTUyLjUgOTMuNSB0LTE1LjUgMTM5LjVoMTM5cTUgLTc3IDQ4LjUgLTEyNnQxMTcuNSAtNjV2MzM1bC0yNyA4cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYzIDUydC00MCA3Mi41dC0xNiA5OHEwIDcwIDI1IDEyNnQ2Ny41IDkydDk0LjUgNTd0MTEwIDI3djc3aDEwMHpNNjAwIDc1NHYyNzRxLTI5IC00IC01MCAtMTF0LTQyIC0yMS41dC0zMS41IC00MS41dC0xMC41IC02NXEwIC0yOSA3IC01MC41dDE2LjUgLTM0dDI4LjUgLTIyLjV0MzEuNSAtMTR0MzcuNSAtMTAgcTkgLTMgMTMgLTR6TTcwMCA1NDd2LTMxMHEyMiAyIDQyLjUgNi41dDQ1IDE1LjV0NDEuNSAyN3QyOSA0MnQxMiA1OS41dC0xMi41IDU5LjV0LTM4IDQ0LjV0LTUzIDMxdC02Ni41IDI0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDk7IiBkPSJNNTYxIDExOTdxODQgMCAxNjAuNSAtNDB0MTIzLjUgLTEwOS41dDQ3IC0xNDcuNWgtMTUzcTAgNDAgLTE5LjUgNzEuNXQtNDkuNSA0OC41dC01OS41IDI2dC01NS41IDlxLTM3IDAgLTc5IC0xNC41dC02MiAtMzUuNXEtNDEgLTQ0IC00MSAtMTAxcTAgLTI2IDEzLjUgLTYzdDI2LjUgLTYxdDM3IC02NnE2IC05IDkgLTE0aDI0MXYtMTAwaC0xOTdxOCAtNTAgLTIuNSAtMTE1dC0zMS41IC05NXEtNDUgLTYyIC05OSAtMTEyIHEzNCAxMCA4MyAxNy41dDcxIDcuNXEzMiAxIDEwMiAtMTZ0MTA0IC0xN3E4MyAwIDEzNiAzMGw1MCAtMTQ3cS0zMSAtMTkgLTU4IC0zMC41dC01NSAtMTUuNXQtNDIgLTQuNXQtNDYgLTAuNXEtMjMgMCAtNzYgMTd0LTExMSAzMi41dC05NiAxMS41cS0zOSAtMyAtODIgLTE2dC02NyAtMjVsLTIzIC0xMWwtNTUgMTQ1cTQgMyAxNiAxMXQxNS41IDEwLjV0MTMgOXQxNS41IDEydDE0LjUgMTR0MTcuNSAxOC41cTQ4IDU1IDU0IDEyNi41IHQtMzAgMTQyLjVoLTIyMXYxMDBoMTY2cS0yMyA0NyAtNDQgMTA0cS03IDIwIC0xMiA0MS41dC02IDU1LjV0NiA2Ni41dDI5LjUgNzAuNXQ1OC41IDcxcTk3IDg4IDI2MyA4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MDsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNOTM1IDExODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi05MDBoLTIwMHY5MDBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTEwMDAgNzAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTgwMSAxMTAwdi0yMDBoMTAwdjIwMGgtMTAwek0xMDAwIDM1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTI7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEwMDAgMTA1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHpNMTAwMCAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNODAxIDQwMHYtMjAwaDEwMHYyMDBoLTEwMHogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTM7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEwMDAgNzAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAwek0xMTAwIDBoLTEwMHYxMDBoLTIwMHY0MDBoMzAwdi01MDB6TTkwMSA0MDB2LTIwMGgxMDB2MjAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTExMDAgNzAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgMTEwMHYtMjAwaDEwMHYyMDBoLTEwMHpNMTAwMCAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTU1OyIgZD0iTTQwMCAzMDBoMTUwcTIxIDAgMjUgLTExdC0xMCAtMjVsLTIzMCAtMjUwcS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNTBxLTE0IDE0IC0xMCAyNXQyNSAxMWgxNTB2OTAwaDIwMHYtOTAwek05MDAgMTAwMGgtMjAwdjIwMGgyMDB2LTIwMHpNMTAwMCA3MDBoLTMwMHYyMDBoMzAwdi0yMDB6TTExMDAgNDAwaC00MDB2MjAwaDQwMHYtMjAwek0xMjAwIDEwMGgtNTAwdjIwMGg1MDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NjsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNMTIwMCAxMDAwaC01MDB2MjAwaDUwMHYtMjAwek0xMTAwIDcwMGgtNDAwdjIwMGg0MDB2LTIwMHpNMTAwMCA0MDBoLTMwMHYyMDBoMzAwdi0yMDB6TTkwMCAxMDBoLTIwMHYyMDBoMjAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMzUwIDExMDBoNDAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTQwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTU4OyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2MyAwIC0yNTYuNSA5Mi41dC05My41IDI1Ny41djQwMHEwIDE2MyA5NCAyNTYuNXQyNTYgOTMuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNDQwIDc3MGwyNTMgLTE5MHExNyAtMTIgMTcgLTMwdC0xNyAtMzBsLTI1MyAtMTkwcS0xNiAtMTIgLTI4IC02LjV0LTEyIDI2LjV2NDAwcTAgMjEgMTIgMjYuNXQyOCAtNi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTU5OyIgZD0iTTM1MCAxMTAwaDQwMHExNjMgMCAyNTYuNSAtOTR0OTMuNSAtMjU2di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTYzIDkyLjUgMjU2LjV0MjU3LjUgOTMuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDcwMGg0MDBxMjEgMCAyNi41IC0xMnQtNi41IC0yOGwtMTkwIC0yNTNxLTEyIC0xNyAtMzAgLTE3dC0zMCAxN2wtMTkwIDI1M3EtMTIgMTYgLTYuNSAyOHQyNi41IDEyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2MyAtOTIuNSAtMjU2LjV0LTI1Ny41IC05My41aC00MDBxLTE2MyAwIC0yNTYuNSA5NHQtOTMuNSAyNTZ2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNTgwIDY5M2wxOTAgLTI1M3ExMiAtMTYgNi41IC0yOHQtMjYuNSAtMTJoLTQwMHEtMjEgMCAtMjYuNSAxMnQ2LjUgMjhsMTkwIDI1M3ExMiAxNyAzMCAxN3QzMCAtMTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjE7IiBkPSJNNTUwIDExMDBoNDAwcTE2NSAwIDI1Ny41IC05Mi41dDkyLjUgLTI1Ny41di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0NTBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtNDUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzM4IDg2N2wzMjQgLTI4NHExNiAtMTQgMTYgLTMzdC0xNiAtMzNsLTMyNCAtMjg0cS0xNiAtMTQgLTI3IC05dC0xMSAyNnYxNTBoLTI1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2MTUwcTAgMjEgMTEgMjZ0MjcgLTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjI7IiBkPSJNNzkzIDExODJsOSAtOXE4IC0xMCA1IC0yN3EtMyAtMTEgLTc5IC0yMjUuNXQtNzggLTIyMS41bDMwMCAxcTI0IDAgMzIuNSAtMTcuNXQtNS41IC0zNS41cS0xIDAgLTEzMy41IC0xNTV0LTI2NyAtMzEyLjV0LTEzOC41IC0xNjIuNXEtMTIgLTE1IC0yNiAtMTVoLTlsLTkgOHEtOSAxMSAtNCAzMnEyIDkgNDIgMTIzLjV0NzkgMjI0LjVsMzkgMTEwaC0zMDJxLTIzIDAgLTMxIDE5cS0xMCAyMSA2IDQxcTc1IDg2IDIwOS41IDIzNy41IHQyMjggMjU3dDk4LjUgMTExLjVxOSAxNiAyNSAxNmg5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTM1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00NTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwIHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTkzOCA4NjdsMzI0IC0yODRxMTYgLTE0IDE2IC0zM3QtMTYgLTMzbC0zMjQgLTI4NHEtMTYgLTE0IC0yNyAtOXQtMTEgMjZ2MTUwaC0yNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjUwdjE1MHEwIDIxIDExIDI2dDI3IC05eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY0OyIgZD0iTTc1MCAxMjAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtMTA5IDEwOWwtMzEyIC0zMTJxLTE1IC0xNSAtMzUuNSAtMTV0LTM1LjUgMTVsLTE0MSAxNDFxLTE1IDE1IC0xNSAzNS41dDE1IDM1LjVsMzEyIDMxMmwtMTA5IDEwOXEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNNDU2IDkwMGgtMTU2cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDAgcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djE0OGwyMDAgMjAwdi0yOThxMCAtMTY1IC05My41IC0yNTcuNXQtMjU2LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNWgzMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjU7IiBkPSJNNjAwIDExODZxMTE5IDAgMjI3LjUgLTQ2LjV0MTg3IC0xMjV0MTI1IC0xODd0NDYuNSAtMjI3LjV0LTQ2LjUgLTIyNy41dC0xMjUgLTE4N3QtMTg3IC0xMjV0LTIyNy41IC00Ni41dC0yMjcuNSA0Ni41dC0xODcgMTI1dC0xMjUgMTg3dC00Ni41IDIyNy41dDQ2LjUgMjI3LjV0MTI1IDE4N3QxODcgMTI1dDIyNy41IDQ2LjV6TTYwMCAxMDIycS0xMTUgMCAtMjEyIC01Ni41dC0xNTMuNSAtMTUzLjV0LTU2LjUgLTIxMnQ1Ni41IC0yMTIgdDE1My41IC0xNTMuNXQyMTIgLTU2LjV0MjEyIDU2LjV0MTUzLjUgMTUzLjV0NTYuNSAyMTJ0LTU2LjUgMjEydC0xNTMuNSAxNTMuNXQtMjEyIDU2LjV6TTYwMCA3OTRxODAgMCAxMzcgLTU3dDU3IC0xMzd0LTU3IC0xMzd0LTEzNyAtNTd0LTEzNyA1N3QtNTcgMTM3dDU3IDEzN3QxMzcgNTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNNDUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMjQ1cTIwIDAgMjUgLTExdC05IC0yNmwtMzgzIC00MjZxLTE0IC0xNSAtMzMuNSAtMTV0LTMyLjUgMTVsLTM3OSA0MjZxLTEzIDE1IC04LjUgMjZ0MjUuNSAxMWgyNTB2MzUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMTEwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiBNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjc7IiBkPSJNNTgzIDExODJsMzc4IC00MzVxMTQgLTE1IDkgLTMxdC0yNiAtMTZoLTI0NHYtMjUwcTAgLTIwIC0xNyAtMzV0LTM5IC0xNWgtMjAwcS0yMCAwIC0zMiAxNC41dC0xMiAzNS41djI1MGgtMjUwcS0yMCAwIC0yNS41IDE2LjV0OC41IDMxLjVsMzgzIDQzMXExNCAxNiAzMy41IDE3dDMzLjUgLTE0ek01MCAzMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IE05MDAgMjAwdi01MGgxMDB2NTBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2ODsiIGQ9Ik0zOTYgNzIzbDM2OSAzNjlxNyA3IDE3LjUgN3QxNy41IC03bDEzOSAtMTM5cTcgLTggNyAtMTguNXQtNyAtMTcuNWwtNTI1IC01MjVxLTcgLTggLTE3LjUgLTh0LTE3LjUgOGwtMjkyIDI5MXEtNyA4IC03IDE4dDcgMThsMTM5IDEzOXE4IDcgMTguNSA3dDE3LjUgLTd6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwIGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY5OyIgZD0iTTEzNSAxMDIzbDE0MiAxNDJxMTQgMTQgMzUgMTR0MzUgLTE0bDc3IC03N2wtMjEyIC0yMTJsLTc3IDc2cS0xNCAxNSAtMTQgMzZ0MTQgMzV6TTY1NSA4NTVsMjEwIDIxMHExNCAxNCAyNC41IDEwdDEwLjUgLTI1bC0yIC01OTlxLTEgLTIwIC0xNS41IC0zNXQtMzUuNSAtMTVsLTU5NyAtMXEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIwOCAyMDhsLTE1NCAxNTVsMjEyIDIxMnpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzA7IiBkPSJNMzUwIDEyMDBsNTk5IC0ycTIwIC0xIDM1IC0xNS41dDE1IC0zNS41bDEgLTU5N3EwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTIwOCAyMDhsLTE1NSAtMTU0bC0yMTIgMjEybDE1NSAxNTRsLTIxMCAyMTBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTUyNCA1MTJsLTc2IC03N3EtMTUgLTE0IC0zNiAtMTR0LTM1IDE0bC0xNDIgMTQycS0xNCAxNCAtMTQgMzV0MTQgMzVsNzcgNzd6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAyMDB2LTUwaDEwMHY1MGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTcxOyIgZD0iTTEyMDAgMTAzbC00ODMgMjc2bC0zMTQgLTM5OXY0MjNoLTM5OWwxMTk2IDc5NnYtMTA5NnpNNDgzIDQyNHYtMjMwbDY4MyA5NTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMTEwMCAxMDAwdi04NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTczOyIgZD0iTTExMDAgMTAwMGwtMiAtMTQ5bC0yOTkgLTI5OWwtOTUgOTVxLTkgOSAtMjEuNSA5dC0yMS41IC05bC0xNDkgLTE0N2gtMzEydi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTExMzIgNjM4bDEwNiAtMTA2cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNDIwIC00MjFxLTggLTcgLTE4IC03IHQtMTggN2wtMjAyIDIwM3EtOCA3IC04IDE3LjV0OCAxNy41bDEwNiAxMDZxNyA4IDE3LjUgOHQxNy41IC04bDc5IC03OWwyOTcgMjk3cTcgNyAxNy41IDd0MTcuNSAtN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NDsiIGQ9Ik0xMTAwIDEwMDB2LTI2OWwtMTAzIC0xMDNsLTEzNCAxMzRxLTE1IDE1IC0zMy41IDE2LjV0LTM0LjUgLTEyLjVsLTI2NiAtMjY2aC0zMjl2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTIwMiA1NzJsNzAgLTcwcTE1IC0xNSAxNSAtMzUuNXQtMTUgLTM1LjVsLTEzMSAtMTMxIGwxMzEgLTEzMXExNSAtMTUgMTUgLTM1LjV0LTE1IC0zNS41bC03MCAtNzBxLTE1IC0xNSAtMzUuNSAtMTV0LTM1LjUgMTVsLTEzMSAxMzFsLTEzMSAtMTMxcS0xNSAtMTUgLTM1LjUgLTE1dC0zNS41IDE1bC03MCA3MHEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWwxMzEgMTMxbC0xMzEgMTMxcS0xNSAxNSAtMTUgMzUuNXQxNSAzNS41bDcwIDcwcTE1IDE1IDM1LjUgMTV0MzUuNSAtMTVsMTMxIC0xMzFsMTMxIDEzMXExNSAxNSAzNS41IDE1IHQzNS41IC0xNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0xMTAwIDEwMDB2LTMwMGgtMzUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTBoLTUwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAwek04NTAgNjAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNSBsLTIzMCAtMjMwcS0xNCAtMTQgLTM1IC0xNHQtMzUgMTRsLTIzMCAyMzBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzY7IiBkPSJNMTEwMCAxMDAwdi00MDBsLTE2NSAxNjVxLTE0IDE1IC0zNSAxNXQtMzUgLTE1bC0yNjMgLTI2NWgtNDAydi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTkzNSA1NjVsMjMwIC0yMjlxMTQgLTE1IDEwIC0yNS41dC0yNSAtMTAuNWgtMTUwdi0yNTBxMCAtMjAgLTE0LjUgLTM1IHQtMzUuNSAtMTVoLTEwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXYyNTBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNS41bDIzMCAyMjlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTc3OyIgZD0iTTUwIDExMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTUwaC0xMjAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTEyMDAgODAwdi01NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTExMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgxMjAwek0xMDAgNTAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTkzNSAxMTY1bDI0OCAtMjMwcTE0IC0xNCAxNCAtMzV0LTE0IC0zNWwtMjQ4IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC00MDB2MjAwaDQwMHYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEwek0yMDAgODAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHYtMjAwek00MDAgODAwaC0xMDB2MjAwaDEwMHYtMjAwek0xOCA0MzVsMjQ3IDIzMCBxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMTUwaDQwMHYtMjAwaC00MDB2LTE1MHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTI0NyAyMzBxLTE1IDE0IC0xNSAzNXQxNSAzNXpNOTAwIDMwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTAwMCA1MDBoNTFxMjAgMCAzNC41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzQuNSAtMTQuNWgtNTF2MjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTc5OyIgZD0iTTg2MiAxMDczbDI3NiAxMTZxMjUgMTggNDMuNSA4dDE4LjUgLTQxdi0xMTA2cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djM5N3EtNCAxIC0xMSA1dC0yNCAxNy41dC0zMCAyOXQtMjQgNDJ0LTExIDU2LjV2MzU5cTAgMzEgMTguNSA2NXQ0My41IDUyek01NTAgMTIwMHEyMiAwIDM0LjUgLTEyLjV0MTQuNSAtMjQuNWwxIC0xM3YtNDUwcTAgLTI4IC0xMC41IC01OS41IHQtMjUgLTU2dC0yOSAtNDV0LTI1LjUgLTMxLjVsLTEwIC0xMXYtNDQ3cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQ0N3EtNCA0IC0xMSAxMS41dC0yNCAzMC41dC0zMCA0NnQtMjQgNTV0LTExIDYwdjQ1MHEwIDIgMC41IDUuNXQ0IDEydDguNSAxNXQxNC41IDEydDIyLjUgNS41cTIwIDAgMzIuNSAtMTIuNXQxNC41IC0yNC41bDMgLTEzdi0zNTBoMTAwdjM1MHY1LjV0Mi41IDEyIHQ3IDE1dDE1IDEydDI1LjUgNS41cTIzIDAgMzUuNSAtMTIuNXQxMy41IC0yNC41bDEgLTEzdi0zNTBoMTAwdjM1MHEwIDIgMC41IDUuNXQzIDEydDcgMTV0MTUgMTJ0MjQuNSA1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODA7IiBkPSJNMTIwMCAxMTAwdi01NnEtNCAwIC0xMSAtMC41dC0yNCAtM3QtMzAgLTcuNXQtMjQgLTE1dC0xMSAtMjR2LTg4OHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtNTZoLTQwMHY1NnE3NSAwIDg3LjUgNi41dDEyLjUgNDMuNXYzOTRoLTUwMHYtMzk0cTAgLTM3IDEyLjUgLTQzLjV0ODcuNSAtNi41di01NmgtNDAwdjU2cTQgMCAxMSAwLjV0MjQgM3QzMCA3LjV0MjQgMTV0MTEgMjR2ODg4cTAgMjIgLTI1IDM0LjV0LTUwIDEzLjUgbC0yNSAydjU2aDQwMHYtNTZxLTc1IDAgLTg3LjUgLTYuNXQtMTIuNSAtNDMuNXYtMzk0aDUwMHYzOTRxMCAzNyAtMTIuNSA0My41dC04Ny41IDYuNXY1Nmg0MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNNjc1IDEwMDBoMzc1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTEwNWwtMjk1IC05OHY5OGwtMjAwIDIwMGgtNDAwbDEwMCAxMDBoMzc1ek0xMDAgOTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0zMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTEwMCA4MDB2LTIwMGgzMDB2MjAwIGgtMzAwek0xMTAwIDUzNWwtNDAwIC0xMzN2MTYzbDQwMCAxMzN2LTE2M3pNMTAwIDUwMHYtMjAwaDMwMHYyMDBoLTMwMHpNMTEwMCAzOTh2LTI0OHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzc1bC0xMDAgLTEwMGgtMzc1bC0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MjsiIGQ9Ik0xNyAxMDA3bDE2MiAxNjJxMTcgMTcgNDAgMTR0MzcgLTIybDEzOSAtMTk0cTE0IC0yMCAxMSAtNDQuNXQtMjAgLTQxLjVsLTExOSAtMTE4cTEwMiAtMTQyIDIyOCAtMjY4dDI2NyAtMjI3bDExOSAxMThxMTcgMTcgNDIuNSAxOXQ0NC41IC0xMmwxOTIgLTEzNnExOSAtMTQgMjIuNSAtMzcuNXQtMTMuNSAtNDAuNWwtMTYzIC0xNjJxLTMgLTEgLTkuNSAtMXQtMjkuNSAydC00Ny41IDZ0LTYyLjUgMTQuNXQtNzcuNSAyNi41dC05MCA0Mi41IHQtMTAxLjUgNjB0LTExMSA4M3QtMTE5IDEwOC41cS03NCA3NCAtMTMzLjUgMTUwLjV0LTk0LjUgMTM4LjV0LTYwIDExOS41dC0zNC41IDEwMHQtMTUgNzQuNXQtNC41IDQ4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTgzOyIgZD0iTTYwMCAxMTAwcTkyIDAgMTc1IC0xMC41dDE0MS41IC0yN3QxMDguNSAtMzYuNXQ4MS41IC00MHQ1My41IC0zN3QzMSAtMjdsOSAtMTB2LTIwMHEwIC0yMSAtMTQuNSAtMzN0LTM0LjUgLTlsLTIwMiAzNHEtMjAgMyAtMzQuNSAyMHQtMTQuNSAzOHYxNDZxLTE0MSAyNCAtMzAwIDI0dC0zMDAgLTI0di0xNDZxMCAtMjEgLTE0LjUgLTM4dC0zNC41IC0yMGwtMjAyIC0zNHEtMjAgLTMgLTM0LjUgOXQtMTQuNSAzM3YyMDBxMyA0IDkuNSAxMC41IHQzMSAyNnQ1NCAzNy41dDgwLjUgMzkuNXQxMDkgMzcuNXQxNDEgMjYuNXQxNzUgMTAuNXpNNjAwIDc5NXE1NiAwIDk3IC05LjV0NjAgLTIzLjV0MzAgLTI4dDEyIC0yNGwxIC0xMHYtNTBsMzY1IC0zMDNxMTQgLTE1IDI0LjUgLTQwdDEwLjUgLTQ1di0yMTJxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTExMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIxMnEwIDIwIDEwLjUgNDV0MjQuNSA0MGwzNjUgMzAzdjUwIHEwIDQgMSAxMC41dDEyIDIzdDMwIDI5dDYwIDIyLjV0OTcgMTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTEwMCA3MDBsLTIwMCAtMjAwaC02MDBsLTIwMCAyMDB2NTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdi0yMDBoMjAwdjIwMGgyMDB2LTUwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg1OyIgZD0iTTcwMCAxMTAwaC0xMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTEwMDBoMzAwdjEwMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTExMDAgODAwaC0xMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTcwMGgzMDB2NzAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek00MDAgMGgtMzAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di00MDB6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg2OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNzAwaC0yMDB2LTEwMGgyMDB2LTMwMGgtMzAwdjEwMGgyMDB2MTAwaC0yMDB2MzAwaDMwMHYtMTAwek05MDAgNzAwdi0zMDBsLTEwMCAtMTAwaC0yMDB2NTAwaDIwMHogTTcwMCA3MDB2LTMwMGgxMDB2MzAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODc7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCAzMDBoLTEwMHYyMDBoLTEwMHYtMjAwaC0xMDB2NTAwaDEwMHYtMjAwaDEwMHYyMDBoMTAwdi01MDB6TTkwMCA3MDB2LTMwMGwtMTAwIC0xMDBoLTIwMHY1MDBoMjAweiBNNzAwIDcwMHYtMzAwaDEwMHYzMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4ODsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0zMDBoMjAwdi0xMDBoLTMwMHY1MDBoMzAwdi0xMDB6TTkwMCA3MDBoLTIwMHYtMzAwaDIwMHYtMTAwaC0zMDB2NTAwaDMwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg5OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNDAwbC0zMDAgMTUwbDMwMCAxNTB2LTMwMHpNOTAwIDU1MGwtMzAwIC0xNTB2MzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek05MDAgMzAwaC03MDB2NTAwaDcwMHYtNTAwek04MDAgNzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh0MjcgLTEwN3Q2OCAtNDJoMTMwdjMwMHpNMzAwIDcwMHYtMzAwIGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTE7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCA3MDBoLTIwMHYtMTAwaDIwMHYtMzAwaC0zMDB2MTAwaDIwMHYxMDBoLTIwMHYzMDBoMzAwdi0xMDB6TTkwMCAzMDBoLTEwMHY0MDBoLTEwMHYxMDBoMjAwdi01MDB6IE03MDAgMzAwaC0xMDB2MTAwaDEwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkyOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek0zMDAgNzAwaDIwMHYtNDAwaC0zMDB2NTAwaDEwMHYtMTAwek05MDAgMzAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAwek0zMDAgNjAwdi0yMDBoMTAwdjIwMGgtMTAweiBNNzAwIDMwMGgtMTAwdjEwMGgxMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDUwMGwtMTk5IC0yMDBoLTEwMHY1MGwxOTkgMjAwdjE1MGgtMjAwdjEwMGgzMDB2LTMwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNNzAxIDMwMGgtMTAwIHYxMDBoMTAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTQ7IiBkPSJNNjAwIDExOTFxMTIwIDAgMjI5LjUgLTQ3dDE4OC41IC0xMjZ0MTI2IC0xODguNXQ0NyAtMjI5LjV0LTQ3IC0yMjkuNXQtMTI2IC0xODguNXQtMTg4LjUgLTEyNnQtMjI5LjUgLTQ3dC0yMjkuNSA0N3QtMTg4LjUgMTI2dC0xMjYgMTg4LjV0LTQ3IDIyOS41dDQ3IDIyOS41dDEyNiAxODguNXQxODguNSAxMjZ0MjI5LjUgNDd6TTYwMCAxMDIxcS0xMTQgMCAtMjExIC01Ni41dC0xNTMuNSAtMTUzLjV0LTU2LjUgLTIxMXQ1Ni41IC0yMTEgdDE1My41IC0xNTMuNXQyMTEgLTU2LjV0MjExIDU2LjV0MTUzLjUgMTUzLjV0NTYuNSAyMTF0LTU2LjUgMjExdC0xNTMuNSAxNTMuNXQtMjExIDU2LjV6TTgwMCA3MDBoLTMwMHYtMjAwaDMwMHYtMTAwaC0zMDBsLTEwMCAxMDB2MjAwbDEwMCAxMDBoMzAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTU7IiBkPSJNNjAwIDExOTFxMTIwIDAgMjI5LjUgLTQ3dDE4OC41IC0xMjZ0MTI2IC0xODguNXQ0NyAtMjI5LjV0LTQ3IC0yMjkuNXQtMTI2IC0xODguNXQtMTg4LjUgLTEyNnQtMjI5LjUgLTQ3dC0yMjkuNSA0N3QtMTg4LjUgMTI2dC0xMjYgMTg4LjV0LTQ3IDIyOS41dDQ3IDIyOS41dDEyNiAxODguNXQxODguNSAxMjZ0MjI5LjUgNDd6TTYwMCAxMDIxcS0xMTQgMCAtMjExIC01Ni41dC0xNTMuNSAtMTUzLjV0LTU2LjUgLTIxMXQ1Ni41IC0yMTEgdDE1My41IC0xNTMuNXQyMTEgLTU2LjV0MjExIDU2LjV0MTUzLjUgMTUzLjV0NTYuNSAyMTF0LTU2LjUgMjExdC0xNTMuNSAxNTMuNXQtMjExIDU2LjV6TTgwMCA3MDB2LTEwMGwtNTAgLTUwbDEwMCAtMTAwdi01MGgtMTAwbC0xMDAgMTAwaC0xNTB2LTEwMGgtMTAwdjQwMGgzMDB6TTUwMCA3MDB2LTEwMGgyMDB2MTAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTc7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA3dC04NSAtMjA3dC0yMDUgLTg2LjVoLTEyOHYyNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMjUwaC0yMjJxLTgwIDAgLTEzNiA1Ny41dC01NiAxMzYuNXEwIDY5IDQzIDEyMi41dDEwOCA2Ny41cS0yIDE5IC0yIDM3cTAgMTAwIDQ5IDE4NSB0MTM0IDEzNHQxODUgNDl6TTUyNSA1MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMjc1aDEzN3EyMSAwIDI2IC0xMS41dC04IC0yNy41bC0yMjMgLTI0NHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0yMjMgMjQ0cS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMTM3djI3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk4OyIgZD0iTTUwMiAxMDg5cTExMCAwIDIwMSAtNTkuNXQxMzUgLTE1Ni41cTQzIDE1IDg5IDE1cTEyMSAwIDIwNiAtODYuNXQ4NiAtMjA2LjVxMCAtOTkgLTYwIC0xODF0LTE1MCAtMTEwbC0zNzggMzYwcS0xMyAxNiAtMzEuNSAxNnQtMzEuNSAtMTZsLTM4MSAtMzY1aC05cS03OSAwIC0xMzUuNSA1Ny41dC01Ni41IDEzNi41cTAgNjkgNDMgMTIyLjV0MTA4IDY3LjVxLTIgMTkgLTIgMzhxMCAxMDAgNDkgMTg0LjV0MTMzLjUgMTM0dDE4NC41IDQ5LjV6IE02MzIgNDY3bDIyMyAtMjI4cTEzIC0xNiA4IC0yNy41dC0yNiAtMTEuNWgtMTM3di0yNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYyNzVoLTEzN3EtMjEgMCAtMjYgMTEuNXQ4IDI3LjVxMTk5IDIwNCAyMjMgMjI4cTE5IDE5IDMxLjUgMTl0MzIuNSAtMTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTk7IiBkPSJNNzAwIDEwMHYxMDBoNDAwbC0yNzAgMzAwaDE3MGwtMjcwIDMwMGgxNzBsLTMwMCAzMzNsLTMwMCAtMzMzaDE3MGwtMjcwIC0zMDBoMTcwbC0yNzAgLTMwMGg0MDB2LTEwMGgtNTBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTUwaDQwMHY1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNNjAwIDExNzlxOTQgMCAxNjcuNSAtNTYuNXQ5OS41IC0xNDUuNXE4OSAtNiAxNTAuNSAtNzEuNXQ2MS41IC0xNTUuNXEwIC02MSAtMjkuNSAtMTEyLjV0LTc5LjUgLTgyLjVxOSAtMjkgOSAtNTVxMCAtNzQgLTUyLjUgLTEyNi41dC0xMjYuNSAtNTIuNXEtNTUgMCAtMTAwIDMwdi0yNTFxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0zMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41djI1MXEtNDUgLTMwIC0xMDAgLTMwIHEtNzQgMCAtMTI2LjUgNTIuNXQtNTIuNSAxMjYuNXEwIDE4IDQgMzhxLTQ3IDIxIC03NS41IDY1dC0yOC41IDk3cTAgNzQgNTIuNSAxMjYuNXQxMjYuNSA1Mi41cTUgMCAyMyAtMnEwIDIgLTEgMTB0LTEgMTNxMCAxMTYgODEuNSAxOTcuNXQxOTcuNSA4MS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjAxOyIgZD0iTTEwMTAgMTAxMHExMTEgLTExMSAxNTAuNSAtMjYwLjV0MCAtMjk5dC0xNTAuNSAtMjYwLjVxLTgzIC04MyAtMTkxLjUgLTEyNi41dC0yMTguNSAtNDMuNXQtMjE4LjUgNDMuNXQtMTkxLjUgMTI2LjVxLTExMSAxMTEgLTE1MC41IDI2MC41dDAgMjk5dDE1MC41IDI2MC41cTgzIDgzIDE5MS41IDEyNi41dDIxOC41IDQzLjV0MjE4LjUgLTQzLjV0MTkxLjUgLTEyNi41ek00NzYgMTA2NXEtNCAwIC04IC0xcS0xMjEgLTM0IC0yMDkuNSAtMTIyLjUgdC0xMjIuNSAtMjA5LjVxLTQgLTEyIDIuNSAtMjN0MTguNSAtMTRsMzYgLTlxMyAtMSA3IC0xcTIzIDAgMjkgMjJxMjcgOTYgOTggMTY2cTcwIDcxIDE2NiA5OHExMSAzIDE3LjUgMTMuNXQzLjUgMjIuNWwtOSAzNXEtMyAxMyAtMTQgMTlxLTcgNCAtMTUgNHpNNTEyIDkyMHEtNCAwIC05IC0ycS04MCAtMjQgLTEzOC41IC04Mi41dC04Mi41IC0xMzguNXEtNCAtMTMgMiAtMjR0MTkgLTE0bDM0IC05cTQgLTEgOCAtMXEyMiAwIDI4IDIxIHExOCA1OCA1OC41IDk4LjV0OTcuNSA1OC41cTEyIDMgMTggMTMuNXQzIDIxLjVsLTkgMzVxLTMgMTIgLTE0IDE5cS03IDQgLTE1IDR6TTcxOS41IDcxOS41cS00OS41IDQ5LjUgLTExOS41IDQ5LjV0LTExOS41IC00OS41dC00OS41IC0xMTkuNXQ0OS41IC0xMTkuNXQxMTkuNSAtNDkuNXQxMTkuNSA0OS41dDQ5LjUgMTE5LjV0LTQ5LjUgMTE5LjV6TTg1NSA1NTFxLTIyIDAgLTI4IC0yMXEtMTggLTU4IC01OC41IC05OC41dC05OC41IC01Ny41IHEtMTEgLTQgLTE3IC0xNC41dC0zIC0yMS41bDkgLTM1cTMgLTEyIDE0IC0xOXE3IC00IDE1IC00cTQgMCA5IDJxODAgMjQgMTM4LjUgODIuNXQ4Mi41IDEzOC41cTQgMTMgLTIuNSAyNHQtMTguNSAxNGwtMzQgOXEtNCAxIC04IDF6TTEwMDAgNTE1cS0yMyAwIC0yOSAtMjJxLTI3IC05NiAtOTggLTE2NnEtNzAgLTcxIC0xNjYgLTk4cS0xMSAtMyAtMTcuNSAtMTMuNXQtMy41IC0yMi41bDkgLTM1cTMgLTEzIDE0IC0xOXE3IC00IDE1IC00IHE0IDAgOCAxcTEyMSAzNCAyMDkuNSAxMjIuNXQxMjIuNSAyMDkuNXE0IDEyIC0yLjUgMjN0LTE4LjUgMTRsLTM2IDlxLTMgMSAtNyAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjAyOyIgZD0iTTcwMCA4MDBoMzAwdi0zODBoLTE4MHYyMDBoLTM0MHYtMjAwaC0zODB2NzU1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek03MDAgMzAwaDE2MmwtMjEyIC0yMTJsLTIxMiAyMTJoMTYydjIwMGgxMDB2LTIwMHpNNTIwIDBoLTM5NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM5NXpNMTAwMCAyMjB2LTE5NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMzsiIGQ9Ik03MDAgODAwaDMwMHYtNTIwbC0zNTAgMzUwbC01NTAgLTU1MHYxMDk1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek04NjIgMjAwaC0xNjJ2LTIwMGgtMTAwdjIwMGgtMTYybDIxMiAyMTJ6TTQ4MCAwaC0zNTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NWgzODB2LTgwek0xMDAwIDgwdi01NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1NXY4MGgxODB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMDQ7IiBkPSJNMTE2MiA4MDBoLTE2MnYtMjAwaDEwMGwxMDAgLTEwMGgtMzAwdjMwMGgtMTYybDIxMiAyMTJ6TTIwMCA4MDBoMjAwcTI3IDAgNDAgLTJ0MjkuNSAtMTAuNXQyMy41IC0zMHQ3IC01Ny41aDMwMHYtMTAwaC02MDBsLTIwMCAtMzUwdjQ1MGgxMDBxMCAzNiA3IDU3LjV0MjMuNSAzMHQyOS41IDEwLjV0NDAgMnpNODAwIDQwMGgyNDBsLTI0MCAtNDAwaC04MDBsMzAwIDUwMGg1MDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIwNTsiIGQ9Ik02NTAgMTEwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTEwMDAgODUwdjE1MHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtODAwIHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtNjAwcS0xIDAgLTIwIDRsMjQ2IDI0NmwtMzI2IDMyNnYzMjRxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41di0xNTBxMCAtNjIgNDQgLTEwNnQxMDYgLTQ0aDMwMHE2MiAwIDEwNiA0NHQ0NCAxMDZ6TTQxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjA2OyIgZD0iTTQ1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTUwMCBoLTIwMHYtMzAwaDIwMHEwIC0zNiAtNyAtNTcuNXQtMjMuNSAtMzB0LTI5LjUgLTEwLjV0LTQwIC0yaC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djgwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV2LTE1MHEwIC02MiA0NCAtMTA2dDEwNiAtNDRoMzAwcTYyIDAgMTA2IDQ0dDQ0IDEwNnpNMTIxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjA5OyIgZD0iTTY1OCAxMTk3bDYzNyAtMTEwNHEyMyAtMzggNyAtNjUuNXQtNjAgLTI3LjVoLTEyNzZxLTQ0IDAgLTYwIDI3LjV0NyA2NS41bDYzNyAxMTA0cTIyIDM5IDU0IDM5dDU0IC0zOXpNNzA0IDgwMGgtMjA4cS0yMCAwIC0zMiAtMTQuNXQtOCAtMzQuNWw1OCAtMzAycTQgLTIwIDIxLjUgLTM0LjV0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNXQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzIgMTQuNXpNNTAwIDMwMHYtMTAwaDIwMCB2MTAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMTA7IiBkPSJNNDI1IDExMDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTQyNSA4MDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjUgdDE3LjUgNy41ek04MjUgODAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0yNSA1MDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek04MjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41IHYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMjUgMjAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgMjAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjUgdC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNODI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMTsiIGQ9Ik03MDAgMTIwMGgxMDB2LTIwMGgtMTAwdi0xMDBoMzUwcTYyIDAgODYuNSAtMzkuNXQtMy41IC05NC41bC02NiAtMTMycS00MSAtODMgLTgxIC0xMzRoLTc3MnEtNDAgNTEgLTgxIDEzNGwtNjYgMTMycS0yOCA1NSAtMy41IDk0LjV0ODYuNSAzOS41aDM1MHYxMDBoLTEwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwIGgtOTUwbDEzOCAxMDBoLTEzcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjEyOyIgZD0iTTYwMCAxMzAwcTQwIDAgNjguNSAtMjkuNXQyOC41IC03MC41aC0xOTRxMCA0MSAyOC41IDcwLjV0NjguNSAyOS41ek00NDMgMTEwMGgzMTRxMTggLTM3IDE4IC03NXEwIC04IC0zIC0yNWgzMjhxNDEgMCA0NC41IC0xNi41dC0zMC41IC0zOC41bC0xNzUgLTE0NWgtNjc4bC0xNzggMTQ1cS0zNCAyMiAtMjkgMzguNXQ0NiAxNi41aDMyOHEtMyAxNyAtMyAyNXEwIDM4IDE4IDc1ek0yNTAgNzAwaDcwMHEyMSAwIDM1LjUgLTE0LjUgdDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHYtMjAwbDI3NSAtMjAwaC05NTBsMjc1IDIwMHYyMDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0xMjAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMzsiIGQ9Ik02MDAgMTE4MXE3NSAwIDEyOCAtNTN0NTMgLTEyOHQtNTMgLTEyOHQtMTI4IC01M3QtMTI4IDUzdC01MyAxMjh0NTMgMTI4dDEyOCA1M3pNNjAyIDc5OGg0NnEzNCAwIDU1LjUgLTI4LjV0MjEuNSAtODYuNXEwIC03NiAzOSAtMTgzaC0zMjRxMzkgMTA3IDM5IDE4M3EwIDU4IDIxLjUgODYuNXQ1Ni41IDI4LjVoNDV6TTI1MCA0MDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMyBsMTM4IC0xMDBoLTk1MGwxMzcgMTAwaC0xMnEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0xMjAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNDsiIGQ9Ik02MDAgMTMwMHE0NyAwIDkyLjUgLTUzLjV0NzEgLTEyM3QyNS41IC0xMjMuNXEwIC03OCAtNTUuNSAtMTMzLjV0LTEzMy41IC01NS41dC0xMzMuNSA1NS41dC01NS41IDEzMy41cTAgNjIgMzQgMTQzbDE0NCAtMTQzbDExMSAxMTFsLTE2MyAxNjNxMzQgMjYgNjMgMjZ6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1IHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMTU7IiBkPSJNNjAwIDEyMDBsMzAwIC0xNjF2LTEzOWgtMzAwcTAgLTU3IDE4LjUgLTEwOHQ1MCAtOTEuNXQ2MyAtNzJ0NzAgLTY3LjV0NTcuNSAtNjFoLTUzMHEtNjAgODMgLTkwLjUgMTc3LjV0LTMwLjUgMTc4LjV0MzMgMTY0LjV0ODcuNSAxMzkuNXQxMjYgOTYuNXQxNDUuNSA0MS41di05OHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMCBoLTEycS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjE2OyIgZD0iTTYwMCAxMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di03OHE0NiAtMjYgNzMgLTcydDI3IC0xMDB2LTUwaC00MDB2NTBxMCA1NCAyNyAxMDB0NzMgNzJ2NzhxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41ek00MDAgODAwaDQwMHE1NCAwIDEwMCAtMjd0NzIgLTczaC0xNzJ2LTEwMGgyMDB2LTEwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaDIwMHEwIC04MyAtNTguNSAtMTQxLjV0LTE0MS41IC01OC41aC00MDAgcS04MyAwIC0xNDEuNSA1OC41dC01OC41IDE0MS41djQwMHEwIDgzIDU4LjUgMTQxLjV0MTQxLjUgNTguNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIxODsiIGQ9Ik0xNTAgMTEwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjUgNDAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjgzbDIyNCAtMjI0cTEzIC0xMyAxMyAtMzEuNXQtMTMgLTMyIHQtMzEuNSAtMTMuNXQtMzEuNSAxM2wtODggODhoLTUyNGwtODcgLTg4cS0xMyAtMTMgLTMyIC0xM3QtMzIgMTMuNXQtMTMgMzJ0MTMgMzEuNWwyMjQgMjI0aC0yODlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01NDEgMzAwbC0xMDAgLTEwMGgzMjRsLTEwMCAxMDBoLTEyNHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIxOTsiIGQ9Ik0yMDAgMTEwMGg4MDBxODMgMCAxNDEuNSAtNTguNXQ1OC41IC0xNDEuNXYtMjAwaC0xMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTI1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNWgtMTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0yNTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjVoLTEwMHYyMDBxMCA4MyA1OC41IDE0MS41dDE0MS41IDU4LjV6TTEwMCA2MDBoMTAwMHE0MSAwIDcwLjUgLTI5LjUgdDI5LjUgLTcwLjV2LTMwMGgtMTIwMHYzMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41ek0zMDAgMTAwdi01MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgyMDB6TTExMDAgMTAwdi01MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgyMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMjE7IiBkPSJNNDgwIDExNjVsNjgyIC02ODNxMzEgLTMxIDMxIC03NS41dC0zMSAtNzUuNWwtMTMxIC0xMzFoLTQ4MWwtNTE3IDUxOHEtMzIgMzEgLTMyIDc1LjV0MzIgNzUuNWwyOTUgMjk2cTMxIDMxIDc1LjUgMzF0NzYuNSAtMzF6TTEwOCA3OTRsMzQyIC0zNDJsMzAzIDMwNGwtMzQxIDM0MXpNMjUwIDEwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC05MDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjIzOyIgZD0iTTEwNTcgNjQ3bC0xODkgNTA2cS04IDE5IC0yNy41IDMzdC00MC41IDE0aC00MDBxLTIxIDAgLTQwLjUgLTE0dC0yNy41IC0zM2wtMTg5IC01MDZxLTggLTE5IDEuNSAtMzN0MzAuNSAtMTRoNjI1di0xNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41dDM1LjUgMTQuNXQxNC41IDM1LjV2MTUwaDEyNXEyMSAwIDMwLjUgMTR0MS41IDMzek04OTcgMGgtNTk1djUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ4djMwMGgyMDB2LTMwMGg0N3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjI0OyIgZD0iTTkwMCA4MDBoMzAwdi01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NTkxbC0zMDAgMzAwdjg0cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMzc1di00MDB6TTEyMDAgOTAwaC0yMDB2MjAwek00MDAgNjAwaDMwMHYtNTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2OTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMzc1di00MDB6TTcwMCA3MDBoLTIwMHYyMDB6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjI1OyIgZD0iTTQ4NCAxMDk1aDE5NXE3NSAwIDE0NiAtMzIuNXQxMjQgLTg2dDg5LjUgLTEyMi41dDQ4LjUgLTE0MnExOCAtMTQgMzUgLTIwcTMxIC0xMCA2NC41IDYuNXQ0My41IDQ4LjVxMTAgMzQgLTE1IDcxcS0xOSAyNyAtOSA0M3E1IDggMTIuNSAxMXQxOSAtMXQyMy41IC0xNnE0MSAtNDQgMzkgLTEwNXEtMyAtNjMgLTQ2IC0xMDYuNXQtMTA0IC00My41aC02MnEtNyAtNTUgLTM1IC0xMTd0LTU2IC0xMDBsLTM5IC0yMzRxLTMgLTIwIC0yMCAtMzQuNSB0LTM4IC0xNC41aC0xMDBxLTIxIDAgLTMzIDE0LjV0LTkgMzQuNWwxMiA3MHEtNDkgLTE0IC05MSAtMTRoLTE5NXEtMjQgMCAtNjUgOGwtMTEgLTY0cS0zIC0yMCAtMjAgLTM0LjV0LTM4IC0xNC41aC0xMDBxLTIxIDAgLTMzIDE0LjV0LTkgMzQuNWwyNiAxNTdxLTg0IDc0IC0xMjggMTc1bC0xNTkgNTNxLTE5IDcgLTMzIDI2dC0xNCA0MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTI0cTExIDg3IDU2IDE2NmwtMTExIDk1IHEtMTYgMTQgLTEyLjUgMjMuNXQyNC41IDkuNWgyMDNxMTE2IDEwMSAyNTAgMTAxek02NzUgMTAwMGgtMjUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtNTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWgyNTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMjY7IiBkPSJNNjQxIDkwMGw0MjMgMjQ3cTE5IDggNDIgMi41dDM3IC0yMS41bDMyIC0zOHExNCAtMTUgMTIuNSAtMzZ0LTE3LjUgLTM0bC0xMzkgLTEyMGgtMzkwek01MCAxMTAwaDEwNnE2NyAwIDEwMyAtMTd0NjYgLTcxbDEwMiAtMjEyaDgyM3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBxMCAtMjEgLTE0IC00MHQtMzMgLTI2bC03MzcgLTEzMnEtMjMgLTQgLTQwIDZ0LTI2IDI1cS00MiA2NyAtMTAwIDY3aC0zMDBxLTYyIDAgLTEwNiA0NCB0LTQ0IDEwNnYyMDBxMCA2MiA0NCAxMDZ0MTA2IDQ0ek0xNzMgOTI4aC04MHEtMTkgMCAtMjggLTE0dC05IC0zNXYtNTZxMCAtNTEgNDIgLTUxaDEzNHExNiAwIDIxLjUgOHQ1LjUgMjRxMCAxMSAtMTYgNDV0LTI3IDUxcS0xOCAyOCAtNDMgMjh6TTU1MCA3MjdxLTMyIDAgLTU0LjUgLTIyLjV0LTIyLjUgLTU0LjV0MjIuNSAtNTQuNXQ1NC41IC0yMi41dDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41ek0xMzAgMzg5IGwxNTIgMTMwcTE4IDE5IDM0IDI0dDMxIC0zLjV0MjQuNSAtMTcuNXQyNS41IC0yOHEyOCAtMzUgNTAuNSAtNTF0NDguNSAtMTNsNjMgNWw0OCAtMTc5cTEzIC02MSAtMy41IC05Ny41dC02Ny41IC03OS41bC04MCAtNjlxLTQ3IC00MCAtMTA5IC0zNS41dC0xMDMgNTEuNWwtMTMwIDE1MXEtNDAgNDcgLTM1LjUgMTA5LjV0NTEuNSAxMDIuNXpNMzgwIDM3N2wtMTAyIC04OHEtMzEgLTI3IDIgLTY1bDM3IC00M3ExMyAtMTUgMjcuNSAtMTkuNSB0MzEuNSA2LjVsNjEgNTNxMTkgMTYgMTQgNDlxLTIgMjAgLTEyIDU2dC0xNyA0NXEtMTEgMTIgLTE5IDE0dC0yMyAtOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIyNzsiIGQ9Ik02MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMDlxNzkgLTMzIDEzMSAtODcuNXQ1MyAtMTI4LjVxMSAtNDYgLTE1IC04NC41dC0zOSAtNjF0LTQ2IC0zOHQtMzkgLTIxLjVsLTE3IC02cTYgMCAxNSAtMS41dDM1IC05dDUwIC0xNy41dDUzIC0zMHQ1MCAtNDV0MzUuNSAtNjR0MTQuNSAtODRxMCAtNTkgLTExLjUgLTEwNS41dC0yOC41IC03Ni41dC00NCAtNTF0LTQ5LjUgLTMxLjV0LTU0LjUgLTE2dC00OS41IC02LjUgdC00My41IC0xdi03NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djc1aC0xMDB2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTE3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDc1djYwMGgtNzVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTc1djc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoMTAwdjc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTQwMCA5MDB2LTIwMGgyNjNxMjggMCA0OC41IDEwLjV0MzAgMjV0MTUgMjl0NS41IDI1LjVsMSAxMHEwIDQgLTAuNSAxMXQtNiAyNHQtMTUgMzB0LTMwIDI0dC00OC41IDExaC0yNjN6TTQwMCA1MDB2LTIwMGgzNjNxMjggMCA0OC41IDEwLjUgdDMwIDI1dDE1IDI5dDUuNSAyNS41bDEgMTBxMCA0IC0wLjUgMTF0LTYgMjR0LTE1IDMwdC0zMCAyNHQtNDguNSAxMWgtMzYzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjMwOyIgZD0iTTIxMiAxMTk4aDc4MHE4NiAwIDE0NyAtNjF0NjEgLTE0N3YtNDE2cTAgLTUxIC0xOCAtMTQyLjV0LTM2IC0xNTcuNWwtMTggLTY2cS0yOSAtODcgLTkzLjUgLTE0Ni41dC0xNDYuNSAtNTkuNWgtNTcycS04MiAwIC0xNDcgNTl0LTkzIDE0N3EtOCAyOCAtMjAgNzN0LTMyIDE0My41dC0yMCAxNDkuNXY0MTZxMCA4NiA2MSAxNDd0MTQ3IDYxek02MDAgMTA0NXEtNzAgMCAtMTMyLjUgLTExLjV0LTEwNS41IC0zMC41dC03OC41IC00MS41IHQtNTcgLTQ1dC0zNiAtNDF0LTIwLjUgLTMwLjVsLTYgLTEybDE1NiAtMjQzaDU2MGwxNTYgMjQzcS0yIDUgLTYgMTIuNXQtMjAgMjkuNXQtMzYuNSA0MnQtNTcgNDQuNXQtNzkgNDJ0LTEwNSAyOS41dC0xMzIuNSAxMnpNNzYyIDcwM2gtMTU3bDE5NSAyNjF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMzE7IiBkPSJNNDc1IDEzMDBoMTUwcTEwMyAwIDE4OSAtODZ0ODYgLTE4OXYtNTAwcTAgLTQxIC00MiAtODN0LTgzIC00MmgtNDUwcS00MSAwIC04MyA0MnQtNDIgODN2NTAwcTAgMTAzIDg2IDE4OXQxODkgODZ6TTcwMCAzMDB2LTIyNXEwIC0yMSAtMjcgLTQ4dC00OCAtMjdoLTE1MHEtMjEgMCAtNDggMjd0LTI3IDQ4djIyNWgzMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMzI7IiBkPSJNNDc1IDEzMDBoOTZxMCAtMTUwIDg5LjUgLTIzOS41dDIzOS41IC04OS41di00NDZxMCAtNDEgLTQyIC04M3QtODMgLTQyaC00NTBxLTQxIDAgLTgzIDQydC00MiA4M3Y1MDBxMCAxMDMgODYgMTg5dDE4OSA4NnpNNzAwIDMwMHYtMjI1cTAgLTIxIC0yNyAtNDh0LTQ4IC0yN2gtMTUwcS0yMSAwIC00OCAyN3QtMjcgNDh2MjI1aDMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMzsiIGQ9Ik0xMjk0IDc2N2wtNjM4IC0yODNsLTM3OCAxNzBsLTc4IC02MHYtMjI0bDEwMCAtMTUwdi0xOTlsLTE1MCAxNDhsLTE1MCAtMTQ5djIwMGwxMDAgMTUwdjI1MHEwIDQgLTAuNSAxMC41dDAgOS41dDEgOHQzIDh0Ni41IDZsNDcgNDBsLTE0NyA2NWw2NDIgMjgzek0xMDAwIDM4MGwtMzUwIC0xNjZsLTM1MCAxNjZ2MTQ3bDM1MCAtMTY1bDM1MCAxNjV2LTE0N3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNDsiIGQ9Ik0yNTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek02NTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek0xMDUwIDgwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNTsiIGQ9Ik01NTAgMTEwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHpNNTUwIDcwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHpNNTUwIDMwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNjsiIGQ9Ik0xMjUgMTEwMGg5NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC05NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTI1IDcwMGg5NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC05NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNSB0MTcuNSA3LjV6TTEyNSAzMDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMzc7IiBkPSJNMzUwIDEyMDBoNTAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTUwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNTAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY1MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek05MDAgMTAwMGgtNjAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDYwMHE0MSAwIDcwLjUgMjkuNSB0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDkwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgODAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjM4OyIgZD0iTTE1MCAxMTAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwdi0yMDBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwdi0yMDBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwdi0yMDBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC0xMDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41aDUwdjIwMGgtNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MjAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNWg1MHYyMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjM5OyIgZD0iTTY1MCAxMTg3cTg3IC02NyAxMTguNSAtMTU2dDAgLTE3OHQtMTE4LjUgLTE1NXEtODcgNjYgLTExOC41IDE1NXQwIDE3OHQxMTguNSAxNTZ6TTMwMCA4MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEycS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMDAgODAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0zMDAgNTAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnEtMTI0IDAgLTIxMiA4OHQtODggMjEyeiBNMTAwMCA1MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4cTAgMTI0IDg4IDIxMnQyMTIgODh6TTcwMCAxOTl2LTE0NHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2MTQycTQwIC00IDQzIC00cTE3IDAgNTcgNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MDsiIGQ9Ik03NDUgODc4bDY5IDE5cTI1IDYgNDUgLTEybDI5OCAtMjk1cTExIC0xMSAxNSAtMjYuNXQtMiAtMzAuNXEtNSAtMTQgLTE4IC0yMy41dC0yOCAtOS41aC04cTEgMCAxIC0xM3EwIC0yOSAtMiAtNTZ0LTguNSAtNjJ0LTIwIC02M3QtMzMgLTUzdC01MSAtMzl0LTcyLjUgLTE0aC0xNDZxLTE4NCAwIC0xODQgMjg4cTAgMjQgMTAgNDdxLTIwIDQgLTYyIDR0LTYzIC00cTExIC0yNCAxMSAtNDdxMCAtMjg4IC0xODQgLTI4OGgtMTQyIHEtNDggMCAtODQuNSAyMXQtNTYgNTF0LTMyIDcxLjV0LTE2IDc1dC0zLjUgNjguNXEwIDEzIDIgMTNoLTdxLTE1IDAgLTI3LjUgOS41dC0xOC41IDIzLjVxLTYgMTUgLTIgMzAuNXQxNSAyNS41bDI5OCAyOTZxMjAgMTggNDYgMTFsNzYgLTE5cTIwIC01IDMwLjUgLTIyLjV0NS41IC0zNy41dC0yMi41IC0zMXQtMzcuNSAtNWwtNTEgMTJsLTE4MiAtMTkzaDg5MWwtMTgyIDE5M2wtNDQgLTEycS0yMCAtNSAtMzcuNSA2dC0yMi41IDMxdDYgMzcuNSB0MzEgMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MTsiIGQ9Ik0xMjAwIDkwMGgtNTBxMCAyMSAtNCAzN3QtOS41IDI2LjV0LTE4IDE3LjV0LTIyIDExdC0yOC41IDUuNXQtMzEgMnQtMzcgMC41aC0yMDB2LTg1MHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtMTAwaC00MDB2MTAwcTQgMCAxMSAwLjV0MjQgM3QzMCA3dDI0IDE1dDExIDI0LjV2ODUwaC0yMDBxLTI1IDAgLTM3IC0wLjV0LTMxIC0ydC0yOC41IC01LjV0LTIyIC0xMXQtMTggLTE3LjV0LTkuNSAtMjYuNXQtNCAtMzdoLTUwdjMwMCBoMTAwMHYtMzAwek01MDAgNDUwaC0yNXEwIDE1IC00IDI0LjV0LTkgMTQuNXQtMTcgNy41dC0yMCAzdC0yNSAwLjVoLTEwMHYtNDI1cTAgLTExIDEyLjUgLTE3LjV0MjUuNSAtNy41aDEydi01MGgtMjAwdjUwcTUwIDAgNTAgMjV2NDI1aC0xMDBxLTE3IDAgLTI1IC0wLjV0LTIwIC0zdC0xNyAtNy41dC05IC0xNC41dC00IC0yNC41aC0yNXYxNTBoNTAwdi0xNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyNDI7IiBkPSJNMTAwMCAzMDB2NTBxLTI1IDAgLTU1IDMycS0xNCAxNCAtMjUgMzF0LTE2IDI3bC00IDExbC0yODkgNzQ3aC02OWwtMzAwIC03NTRxLTE4IC0zNSAtMzkgLTU2cS05IC05IC0yNC41IC0xOC41dC0yNi41IC0xNC41bC0xMSAtNXYtNTBoMjczdjUwcS00OSAwIC03OC41IDIxLjV0LTExLjUgNjcuNWw2OSAxNzZoMjkzbDYxIC0xNjZxMTMgLTM0IC0zLjUgLTY2LjV0LTU1LjUgLTMyLjV2LTUwaDMxMnpNNDEyIDY5MWwxMzQgMzQybDEyMSAtMzQyIGgtMjU1ek0xMTAwIDE1MHYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyNDM7IiBkPSJNNTAgMTIwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjExIDExMThoLTcwcS0xMyAwIC0xOCAtMTJsLTI5OSAtNzUzcS0xNyAtMzIgLTM1IC01MXEtMTggLTE4IC01NiAtMzRxLTEyIC01IC0xMiAtMTh2LTUwcTAgLTggNS41IC0xNHQxNC41IC02IGgyNzNxOCAwIDE0IDZ0NiAxNHY1MHEwIDggLTYgMTR0LTE0IDZxLTU1IDAgLTcxIDIzcS0xMCAxNCAwIDM5bDYzIDE2M2gyNjZsNTcgLTE1M3ExMSAtMzEgLTYgLTU1cS0xMiAtMTcgLTM2IC0xN3EtOCAwIC0xNCAtNnQtNiAtMTR2LTUwcTAgLTggNiAtMTR0MTQgLTZoMzEzcTggMCAxNCA2dDYgMTR2NTBxMCA3IC01LjUgMTN0LTEzLjUgN3EtMTcgMCAtNDIgMjVxLTI1IDI3IC00MCA2M2gtMWwtMjg4IDc0OHEtNSAxMiAtMTkgMTJ6TTYzOSA2MTEgaC0xOTdsMTAzIDI2NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NDsiIGQ9Ik0xMjAwIDExMDBoLTEyMDB2MTAwaDEyMDB2LTEwMHpNNTAgMTAwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTkwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY5MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTAwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNzAwIDkwMHYtMzAwaDMwMHYzMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NTsiIGQ9Ik01MCAxMjAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtOTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djkwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCA3MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA2MDB2LTMwMGgzMDB2MzAwaC0zMDB6TTEyMDAgMGgtMTIwMHYxMDBoMTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjQ2OyIgZD0iTTUwIDEwMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoMTAwdi0xMDBoLTEwMHYtMTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djE1MGgtMTAwdi0zNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA3MDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyNDc7IiBkPSJNMTAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNMjUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTI1MCA1MDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyNDg7IiBkPSJNNjAwIDExMDBoMTUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHYtMTAwaDQ1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMzUwdjEwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjUgdC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxNTB2MTAwaDEwMHYtMTAwek00MDAgMTAwMHYtMzAwaDMwMHYzMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI0OTsiIGQ9Ik0xMjAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNNTUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MDsiIGQ9Ik04NjUgNTY1bC00OTQgLTQ5NHEtMjMgLTIzIC00MSAtMjNxLTE0IDAgLTIyIDEzLjV0LTggMzguNXYxMDAwcTAgMjUgOCAzOC41dDIyIDEzLjVxMTggMCA0MSAtMjNsNDk0IC00OTRxMTQgLTE0IDE0IC0zNXQtMTQgLTM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjUxOyIgZD0iTTMzNSA2MzVsNDk0IDQ5NHEyOSAyOSA1MCAyMC41dDIxIC00OS41di0xMDAwcTAgLTQxIC0yMSAtNDkuNXQtNTAgMjAuNWwtNDk0IDQ5NHEtMTQgMTQgLTE0IDM1dDE0IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjUyOyIgZD0iTTEwMCA5MDBoMTAwMHE0MSAwIDQ5LjUgLTIxdC0yMC41IC01MGwtNDk0IC00OTRxLTE0IC0xNCAtMzUgLTE0dC0zNSAxNGwtNDk0IDQ5NHEtMjkgMjkgLTIwLjUgNTB0NDkuNSAyMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MzsiIGQ9Ik02MzUgODY1bDQ5NCAtNDk0cTI5IC0yOSAyMC41IC01MHQtNDkuNSAtMjFoLTEwMDBxLTQxIDAgLTQ5LjUgMjF0MjAuNSA1MGw0OTQgNDk0cTE0IDE0IDM1IDE0dDM1IC0xNHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI1NDsiIGQ9Ik03MDAgNzQxdi0xODJsLTY5MiAtMzIzdjIyMWw0MTMgMTkzbC00MTMgMTkzdjIyMXpNMTIwMCAwaC04MDB2MjAwaDgwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjU1OyIgZD0iTTEyMDAgOTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMzAwdjMwMGgyMDB2MTAwaC0yMDB2MTAwaDMwMHYtMzAwek0wIDcwMGg1MHEwIDIxIDQgMzd0OS41IDI2LjV0MTggMTcuNXQyMiAxMXQyOC41IDUuNXQzMSAydDM3IDAuNWgxMDB2LTU1MHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtMTAwaDQwMHYxMDBxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY1NTBoMTAwcTI1IDAgMzcgLTAuNXQzMSAtMiB0MjguNSAtNS41dDIyIC0xMXQxOCAtMTcuNXQ5LjUgLTI2LjV0NCAtMzdoNTB2MzAwaC04MDB2LTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI1NjsiIGQ9Ik04MDAgNzAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTEwMHYtNTUwcTAgLTIyIDI1IC0zNC41dDUwIC0xNC41bDI1IC0xdi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY1NTBoLTEwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGg4MDB2LTMwMHpNMTEwMCAyMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0zMDB2MzAwaDIwMHYxMDBoLTIwMHYxMDBoMzAwdi0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyNTc7IiBkPSJNNzAxIDEwOThoMTYwcTE2IDAgMjEgLTExdC03IC0yM2wtNDY0IC00NjRsNDY0IC00NjRxMTIgLTEyIDcgLTIzdC0yMSAtMTFoLTE2MHEtMTMgMCAtMjMgOWwtNDcxIDQ3MXEtNyA4IC03IDE4dDcgMThsNDcxIDQ3MXExMCA5IDIzIDl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyNTg7IiBkPSJNMzM5IDEwOThoMTYwcTEzIDAgMjMgLTlsNDcxIC00NzFxNyAtOCA3IC0xOHQtNyAtMThsLTQ3MSAtNDcxcS0xMCAtOSAtMjMgLTloLTE2MHEtMTYgMCAtMjEgMTF0NyAyM2w0NjQgNDY0bC00NjQgNDY0cS0xMiAxMiAtNyAyM3QyMSAxMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTI1OTsiIGQ9Ik0xMDg3IDg4MnExMSAtNSAxMSAtMjF2LTE2MHEwIC0xMyAtOSAtMjNsLTQ3MSAtNDcxcS04IC03IC0xOCAtN3QtMTggN2wtNDcxIDQ3MXEtOSAxMCAtOSAyM3YxNjBxMCAxNiAxMSAyMXQyMyAtN2w0NjQgLTQ2NGw0NjQgNDY0cTEyIDEyIDIzIDd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyNjA7IiBkPSJNNjE4IDk5M2w0NzEgLTQ3MXE5IC0xMCA5IC0yM3YtMTYwcTAgLTE2IC0xMSAtMjF0LTIzIDdsLTQ2NCA0NjRsLTQ2NCAtNDY0cS0xMiAtMTIgLTIzIC03dC0xMSAyMXYxNjBxMCAxMyA5IDIzbDQ3MSA0NzFxOCA3IDE4IDd0MTggLTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGY4ZmY7IiBkPSJNMTAwMCAxMjAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek00NTAgMTAwMGgxMDBxMjEgMCA0MCAtMTR0MjYgLTMzbDc5IC0xOTRxNSAxIDE2IDNxMzQgNiA1NCA5LjV0NjAgN3Q2NS41IDF0NjEgLTEwdDU2LjUgLTIzdDQyLjUgLTQydDI5IC02NHQ1IC05MnQtMTkuNSAtMTIxLjVxLTEgLTcgLTMgLTE5LjV0LTExIC01MHQtMjAuNSAtNzN0LTMyLjUgLTgxLjV0LTQ2LjUgLTgzdC02NCAtNzAgdC04Mi41IC01MHEtMTMgLTUgLTQyIC01dC02NS41IDIuNXQtNDcuNSAyLjVxLTE0IDAgLTQ5LjUgLTMuNXQtNjMgLTMuNXQtNDMuNSA3cS01NyAyNSAtMTA0LjUgNzguNXQtNzUgMTExLjV0LTQ2LjUgMTEydC0yNiA5MGwtNyAzNXEtMTUgNjMgLTE4IDExNXQ0LjUgODguNXQyNiA2NHQzOS41IDQzLjV0NTIgMjUuNXQ1OC41IDEzdDYyLjUgMnQ1OS41IC00LjV0NTUuNSAtOGwtMTQ3IDE5MnEtMTIgMTggLTUuNSAzMHQyNy41IDEyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gxZjUxMTsiIGQ9Ik0yNTAgMTIwMGg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTUwdi01MDBsLTI1NSAtMTc4cS0xOSAtOSAtMzIgLTF0LTEzIDI5djY1MGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgMTEwMHYtMTAwaDMwMHYxMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MWY2YWE7IiBkPSJNMjUwIDEyMDBoNzUwcTM5IDAgNjkuNSAtNDAuNXQzMC41IC04NC41di05MzNsLTcwMCAtMTE3djk1MGw2MDAgMTI1aC03MDB2LTEwMDBoLTEwMHYxMDI1cTAgMjMgMTUuNSA0OXQzNC41IDI2ek01MDAgNTI1di0xMDBsMTAwIDIwdjEwMHoiIC8+CiA8L2ZvbnQ+CiA8L2RlZnM+PC9zdmc+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYKaW5kZXggYTQ5OGVmNC4uMTQxM2ZjNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmCmluZGV4IGQ4M2M1MzkuLjllNjEyODUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmMiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1MzliNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaHRtbC9sYXllcl9kZXBzX21vZGFsLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbAppbmRleCBlMWRiYTQzLi5lODQzZDhkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbApAQCAtMSwxNyArMSwyMSBAQAotPGRpdiBpZD0iZGVwZW5kZW5jaWVzLW1vZGFsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1oaWRkZW49ImZhbHNlIj4KLSAgPGZvcm0gaWQ9ImRlcGVuZGVuY2llcy1tb2RhbC1mb3JtIj4KLSAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgotICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KLSAgICAgIDxoMz48c3BhbiBpZD0idGl0bGUiPjwvc3Bhbj4gZGVwZW5kZW5jaWVzPC9oMz4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KLSAgICAgIDxwIGlkPSJib2R5LXRleHQiPiA8c3Ryb25nIGlkPSJsYXllci1uYW1lIj48L3N0cm9uZz4gZGVwZW5kcyBvbiBzb21lIGxheWVycyB0aGF0IGFyZSBub3QgYWRkZWQgdG8geW91ciBwcm9qZWN0LiBTZWxlY3QgdGhlIG9uZXMgeW91IHdhbnQgdG8gYWRkOjwvcD4KLSAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQiIGlkPSJkZXBlbmRlbmNpZXMtbGlzdCI+Ci0gICAgICA8L3VsPgotICAgIDwvZGl2PgotICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIHR5cGU9InN1Ym1pdCI+QWRkIGxheWVyczwvYnV0dG9uPgotICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJyZXNldCIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2FuY2VsPC9idXR0b24+Ci0gICAgPC9kaXY+Ci0gIDwvZm9ybT4KLTwvZGl2PgorPGRpdiBpZD0iZGVwZW5kZW5jaWVzLW1vZGFsIiBjbGFzcz0ibW9kYWwgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICA8Zm9ybSBpZD0iZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0iPgorCTxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisJICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgorCSAgPGgzPjxzcGFuIGlkPSJ0aXRsZSI+PC9zcGFuPiBkZXBlbmRlbmNpZXM8L2gzPgorCTwvZGl2PgorCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorCSAgPHAgaWQ9ImJvZHktdGV4dCI+IDxzdHJvbmcgaWQ9ImxheWVyLW5hbWUiPjwvc3Ryb25nPiBkZXBlbmRzIG9uIHNvbWUgbGF5ZXJzIHRoYXQgYXJlIG5vdCBhZGRlZCB0byB5b3VyIHByb2plY3QuIFNlbGVjdCB0aGUgb25lcyB5b3Ugd2FudCB0byBhZGQ6PC9wPgorCSAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIiBpZD0iZGVwZW5kZW5jaWVzLWxpc3QiPgorCSAgPC91bD4KKwk8L2Rpdj4KKwk8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorCSAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiPkFkZCBsYXllcnM8L2J1dHRvbj4KKwkgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgdHlwZT0icmVzZXQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgorCTwvZGl2PgorICAgICAgPC9mb3JtPgorICAgIDwvZGl2PjwhLS0gLy5tb2RhbC1jb250ZW50IC0tPgorICA8L2Rpdj48IS0tIC8ubW9kYWwtZGlhbG9nIC0tPgorPC9kaXY+PCEtLSAvLm1vZGFsIC0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjY0ODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTk2OTk5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9ib290c3RyYXAuanMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9ib290c3RyYXAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZDY0MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jvb3RzdHJhcC5qcwpAQCAtMCwwICsxLDIzNjMgQEAKKy8qIQorICogQm9vdHN0cmFwIHYzLjMuNiAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pCisgKiBDb3B5cmlnaHQgMjAxMS0yMDE2IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICovCisKK2lmICh0eXBlb2YgalF1ZXJ5ID09PSAndW5kZWZpbmVkJykgeworICB0aHJvdyBuZXcgRXJyb3IoJ0Jvb3RzdHJhcFwncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeScpCit9CisKKytmdW5jdGlvbiAoJCkgeworICAndXNlIHN0cmljdCc7CisgIHZhciB2ZXJzaW9uID0gJC5mbi5qcXVlcnkuc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpCisgIGlmICgodmVyc2lvblswXSA8IDIgJiYgdmVyc2lvblsxXSA8IDkpIHx8ICh2ZXJzaW9uWzBdID09IDEgJiYgdmVyc2lvblsxXSA9PSA5ICYmIHZlcnNpb25bMl0gPCAxKSB8fCAodmVyc2lvblswXSA+IDIpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIsIGJ1dCBsb3dlciB0aGFuIHZlcnNpb24gMycpCisgIH0KK30oalF1ZXJ5KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBCb290c3RyYXA6IHRyYW5zaXRpb24uanMgdjMuMy42CisgKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyN0cmFuc2l0aW9ucworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisrZnVuY3Rpb24gKCQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIENTUyBUUkFOU0lUSU9OIFNVUFBPUlQgKFNob3V0b3V0OiBodHRwOi8vd3d3Lm1vZGVybml6ci5jb20vKQorICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKCkgeworICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jvb3RzdHJhcCcpCisKKyAgICB2YXIgdHJhbnNFbmRFdmVudE5hbWVzID0geworICAgICAgV2Via2l0VHJhbnNpdGlvbiA6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJywKKyAgICAgIE1velRyYW5zaXRpb24gICAgOiAndHJhbnNpdGlvbmVuZCcsCisgICAgICBPVHJhbnNpdGlvbiAgICAgIDogJ29UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kJywKKyAgICAgIHRyYW5zaXRpb24gICAgICAgOiAndHJhbnNpdGlvbmVuZCcKKyAgICB9CisKKyAgICBmb3IgKHZhciBuYW1lIGluIHRyYW5zRW5kRXZlbnROYW1lcykgeworICAgICAgaWYgKGVsLnN0eWxlW25hbWVdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcmV0dXJuIHsgZW5kOiB0cmFuc0VuZEV2ZW50TmFtZXNbbmFtZV0gfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZSAvLyBleHBsaWNpdCBmb3IgaWU4ICggIC5fLikKKyAgfQorCisgIC8vIGh0dHA6Ly9ibG9nLmFsZXhtYWNjYXcuY29tL2Nzcy10cmFuc2l0aW9ucworICAkLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gKGR1cmF0aW9uKSB7CisgICAgdmFyIGNhbGxlZCA9IGZhbHNlCisgICAgdmFyICRlbCA9IHRoaXMKKyAgICAkKHRoaXMpLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlIH0pCisgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBpZiAoIWNhbGxlZCkgJCgkZWwpLnRyaWdnZXIoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSB9CisgICAgc2V0VGltZW91dChjYWxsYmFjaywgZHVyYXRpb24pCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisgICQoZnVuY3Rpb24gKCkgeworICAgICQuc3VwcG9ydC50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkVuZCgpCisKKyAgICBpZiAoISQuc3VwcG9ydC50cmFuc2l0aW9uKSByZXR1cm4KKworICAgICQuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQgPSB7CisgICAgICBiaW5kVHlwZTogJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLAorICAgICAgZGVsZWdhdGVUeXBlOiAkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsCisgICAgICBoYW5kbGU6IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGlmICgkKGUudGFyZ2V0KS5pcyh0aGlzKSkgcmV0dXJuIGUuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKQorICAgICAgfQorICAgIH0KKyAgfSkKKworfShqUXVlcnkpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEJvb3RzdHJhcDogYWxlcnQuanMgdjMuMy42CisgKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNhbGVydHMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworK2Z1bmN0aW9uICgkKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvLyBBTEVSVCBDTEFTUyBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT0KKworICB2YXIgZGlzbWlzcyA9ICdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJworICB2YXIgQWxlcnQgICA9IGZ1bmN0aW9uIChlbCkgeworICAgICQoZWwpLm9uKCdjbGljaycsIGRpc21pc3MsIHRoaXMuY2xvc2UpCisgIH0KKworICBBbGVydC5WRVJTSU9OID0gJzMuMy42JworCisgIEFsZXJ0LlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTAKKworICBBbGVydC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyAgICA9ICQodGhpcykKKyAgICB2YXIgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpCisKKyAgICBpZiAoIXNlbGVjdG9yKSB7CisgICAgICBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKQorICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3CisgICAgfQorCisgICAgdmFyICRwYXJlbnQgPSAkKHNlbGVjdG9yKQorCisgICAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKQorCisgICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkgeworICAgICAgJHBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJy5hbGVydCcpCisgICAgfQorCisgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdjbG9zZS5icy5hbGVydCcpKQorCisgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorCisgICAgJHBhcmVudC5yZW1vdmVDbGFzcygnaW4nKQorCisgICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgpIHsKKyAgICAgIC8vIGRldGFjaCBmcm9tIHBhcmVudCwgZmlyZSBldmVudCB0aGVuIGNsZWFuIHVwIGRhdGEKKyAgICAgICRwYXJlbnQuZGV0YWNoKCkudHJpZ2dlcignY2xvc2VkLmJzLmFsZXJ0JykucmVtb3ZlKCkKKyAgICB9CisKKyAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiAkcGFyZW50Lmhhc0NsYXNzKCdmYWRlJykgPworICAgICAgJHBhcmVudAorICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCByZW1vdmVFbGVtZW50KQorICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQWxlcnQuVFJBTlNJVElPTl9EVVJBVElPTikgOgorICAgICAgcmVtb3ZlRWxlbWVudCgpCisgIH0KKworCisgIC8vIEFMRVJUIFBMVUdJTiBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09CisKKyAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMuYWxlcnQnKQorCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmFsZXJ0JywgKGRhdGEgPSBuZXcgQWxlcnQodGhpcykpKQorICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKQorICAgIH0pCisgIH0KKworICB2YXIgb2xkID0gJC5mbi5hbGVydAorCisgICQuZm4uYWxlcnQgICAgICAgICAgICAgPSBQbHVnaW4KKyAgJC5mbi5hbGVydC5Db25zdHJ1Y3RvciA9IEFsZXJ0CisKKworICAvLyBBTEVSVCBOTyBDT05GTElDVAorICAvLyA9PT09PT09PT09PT09PT09PQorCisgICQuZm4uYWxlcnQubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmFsZXJ0ID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAgLy8gQUxFUlQgREFUQS1BUEkKKyAgLy8gPT09PT09PT09PT09PT0KKworICAkKGRvY3VtZW50KS5vbignY2xpY2suYnMuYWxlcnQuZGF0YS1hcGknLCBkaXNtaXNzLCBBbGVydC5wcm90b3R5cGUuY2xvc2UpCisKK30oalF1ZXJ5KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBCb290c3RyYXA6IGJ1dHRvbi5qcyB2My4zLjYKKyAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI2J1dHRvbnMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworK2Z1bmN0aW9uICgkKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvLyBCVVRUT04gUFVCTElDIENMQVNTIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgdmFyIEJ1dHRvbiA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVudCAgPSAkKGVsZW1lbnQpCisgICAgdGhpcy5vcHRpb25zICAgPSAkLmV4dGVuZCh7fSwgQnV0dG9uLkRFRkFVTFRTLCBvcHRpb25zKQorICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2UKKyAgfQorCisgIEJ1dHRvbi5WRVJTSU9OICA9ICczLjMuNicKKworICBCdXR0b24uREVGQVVMVFMgPSB7CisgICAgbG9hZGluZ1RleHQ6ICdsb2FkaW5nLi4uJworICB9CisKKyAgQnV0dG9uLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgIHZhciBkICAgID0gJ2Rpc2FibGVkJworICAgIHZhciAkZWwgID0gdGhpcy4kZWxlbWVudAorICAgIHZhciB2YWwgID0gJGVsLmlzKCdpbnB1dCcpID8gJ3ZhbCcgOiAnaHRtbCcKKyAgICB2YXIgZGF0YSA9ICRlbC5kYXRhKCkKKworICAgIHN0YXRlICs9ICdUZXh0JworCisgICAgaWYgKGRhdGEucmVzZXRUZXh0ID09IG51bGwpICRlbC5kYXRhKCdyZXNldFRleHQnLCAkZWxbdmFsXSgpKQorCisgICAgLy8gcHVzaCB0byBldmVudCBsb29wIHRvIGFsbG93IGZvcm1zIHRvIHN1Ym1pdAorICAgIHNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbiAoKSB7CisgICAgICAkZWxbdmFsXShkYXRhW3N0YXRlXSA9PSBudWxsID8gdGhpcy5vcHRpb25zW3N0YXRlXSA6IGRhdGFbc3RhdGVdKQorCisgICAgICBpZiAoc3RhdGUgPT0gJ2xvYWRpbmdUZXh0JykgeworICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWUKKyAgICAgICAgJGVsLmFkZENsYXNzKGQpLmF0dHIoZCwgZCkKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xvYWRpbmcpIHsKKyAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZQorICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoZCkucmVtb3ZlQXR0cihkKQorICAgICAgfQorICAgIH0sIHRoaXMpLCAwKQorICB9CisKKyAgQnV0dG9uLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGNoYW5nZWQgPSB0cnVlCisgICAgdmFyICRwYXJlbnQgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJykKKworICAgIGlmICgkcGFyZW50Lmxlbmd0aCkgeworICAgICAgdmFyICRpbnB1dCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnaW5wdXQnKQorICAgICAgaWYgKCRpbnB1dC5wcm9wKCd0eXBlJykgPT0gJ3JhZGlvJykgeworICAgICAgICBpZiAoJGlucHV0LnByb3AoJ2NoZWNrZWQnKSkgY2hhbmdlZCA9IGZhbHNlCisgICAgICAgICRwYXJlbnQuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQorICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdhY3RpdmUnKQorICAgICAgfSBlbHNlIGlmICgkaW5wdXQucHJvcCgndHlwZScpID09ICdjaGVja2JveCcpIHsKKyAgICAgICAgaWYgKCgkaW5wdXQucHJvcCgnY2hlY2tlZCcpKSAhPT0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnYWN0aXZlJykpIGNoYW5nZWQgPSBmYWxzZQorICAgICAgICB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCdhY3RpdmUnKQorICAgICAgfQorICAgICAgJGlucHV0LnByb3AoJ2NoZWNrZWQnLCB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdhY3RpdmUnKSkKKyAgICAgIGlmIChjaGFuZ2VkKSAkaW5wdXQudHJpZ2dlcignY2hhbmdlJykKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLXByZXNzZWQnLCAhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnYWN0aXZlJykpCisgICAgICB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCdhY3RpdmUnKQorICAgIH0KKyAgfQorCisKKyAgLy8gQlVUVE9OIFBMVUdJTiBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09PQorCisgIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKQorICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5idXR0b24nKQorICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbgorCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmJ1dHRvbicsIChkYXRhID0gbmV3IEJ1dHRvbih0aGlzLCBvcHRpb25zKSkpCisKKyAgICAgIGlmIChvcHRpb24gPT0gJ3RvZ2dsZScpIGRhdGEudG9nZ2xlKCkKKyAgICAgIGVsc2UgaWYgKG9wdGlvbikgZGF0YS5zZXRTdGF0ZShvcHRpb24pCisgICAgfSkKKyAgfQorCisgIHZhciBvbGQgPSAkLmZuLmJ1dHRvbgorCisgICQuZm4uYnV0dG9uICAgICAgICAgICAgID0gUGx1Z2luCisgICQuZm4uYnV0dG9uLkNvbnN0cnVjdG9yID0gQnV0dG9uCisKKworICAvLyBCVVRUT04gTk8gQ09ORkxJQ1QKKyAgLy8gPT09PT09PT09PT09PT09PT09CisKKyAgJC5mbi5idXR0b24ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmJ1dHRvbiA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgIC8vIEJVVFRPTiBEQVRBLUFQSQorICAvLyA9PT09PT09PT09PT09PT0KKworICAkKGRvY3VtZW50KQorICAgIC5vbignY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJywgZnVuY3Rpb24gKGUpIHsKKyAgICAgIHZhciAkYnRuID0gJChlLnRhcmdldCkKKyAgICAgIGlmICghJGJ0bi5oYXNDbGFzcygnYnRuJykpICRidG4gPSAkYnRuLmNsb3Nlc3QoJy5idG4nKQorICAgICAgUGx1Z2luLmNhbGwoJGJ0biwgJ3RvZ2dsZScpCisgICAgICBpZiAoISgkKGUudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0icmFkaW8iXScpIHx8ICQoZS50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJykpKSBlLnByZXZlbnREZWZhdWx0KCkKKyAgICB9KQorICAgIC5vbignZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJywgZnVuY3Rpb24gKGUpIHsKKyAgICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5idG4nKS50b2dnbGVDbGFzcygnZm9jdXMnLCAvXmZvY3VzKGluKT8kLy50ZXN0KGUudHlwZSkpCisgICAgfSkKKworfShqUXVlcnkpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEJvb3RzdHJhcDogY2Fyb3VzZWwuanMgdjMuMy42CisgKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNjYXJvdXNlbAorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisrZnVuY3Rpb24gKCQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIENBUk9VU0VMIENMQVNTIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIHZhciBDYXJvdXNlbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVudCAgICA9ICQoZWxlbWVudCkKKyAgICB0aGlzLiRpbmRpY2F0b3JzID0gdGhpcy4kZWxlbWVudC5maW5kKCcuY2Fyb3VzZWwtaW5kaWNhdG9ycycpCisgICAgdGhpcy5vcHRpb25zICAgICA9IG9wdGlvbnMKKyAgICB0aGlzLnBhdXNlZCAgICAgID0gbnVsbAorICAgIHRoaXMuc2xpZGluZyAgICAgPSBudWxsCisgICAgdGhpcy5pbnRlcnZhbCAgICA9IG51bGwKKyAgICB0aGlzLiRhY3RpdmUgICAgID0gbnVsbAorICAgIHRoaXMuJGl0ZW1zICAgICAgPSBudWxsCisKKyAgICB0aGlzLm9wdGlvbnMua2V5Ym9hcmQgJiYgdGhpcy4kZWxlbWVudC5vbigna2V5ZG93bi5icy5jYXJvdXNlbCcsICQucHJveHkodGhpcy5rZXlkb3duLCB0aGlzKSkKKworICAgIHRoaXMub3B0aW9ucy5wYXVzZSA9PSAnaG92ZXInICYmICEoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSAmJiB0aGlzLiRlbGVtZW50CisgICAgICAub24oJ21vdXNlZW50ZXIuYnMuY2Fyb3VzZWwnLCAkLnByb3h5KHRoaXMucGF1c2UsIHRoaXMpKQorICAgICAgLm9uKCdtb3VzZWxlYXZlLmJzLmNhcm91c2VsJywgJC5wcm94eSh0aGlzLmN5Y2xlLCB0aGlzKSkKKyAgfQorCisgIENhcm91c2VsLlZFUlNJT04gID0gJzMuMy42JworCisgIENhcm91c2VsLlRSQU5TSVRJT05fRFVSQVRJT04gPSA2MDAKKworICBDYXJvdXNlbC5ERUZBVUxUUyA9IHsKKyAgICBpbnRlcnZhbDogNTAwMCwKKyAgICBwYXVzZTogJ2hvdmVyJywKKyAgICB3cmFwOiB0cnVlLAorICAgIGtleWJvYXJkOiB0cnVlCisgIH0KKworICBDYXJvdXNlbC5wcm90b3R5cGUua2V5ZG93biA9IGZ1bmN0aW9uIChlKSB7CisgICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkpIHJldHVybgorICAgIHN3aXRjaCAoZS53aGljaCkgeworICAgICAgY2FzZSAzNzogdGhpcy5wcmV2KCk7IGJyZWFrCisgICAgICBjYXNlIDM5OiB0aGlzLm5leHQoKTsgYnJlYWsKKyAgICAgIGRlZmF1bHQ6IHJldHVybgorICAgIH0KKworICAgIGUucHJldmVudERlZmF1bHQoKQorICB9CisKKyAgQ2Fyb3VzZWwucHJvdG90eXBlLmN5Y2xlID0gZnVuY3Rpb24gKGUpIHsKKyAgICBlIHx8ICh0aGlzLnBhdXNlZCA9IGZhbHNlKQorCisgICAgdGhpcy5pbnRlcnZhbCAmJiBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpCisKKyAgICB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwKKyAgICAgICYmICF0aGlzLnBhdXNlZAorICAgICAgJiYgKHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgkLnByb3h5KHRoaXMubmV4dCwgdGhpcyksIHRoaXMub3B0aW9ucy5pbnRlcnZhbCkpCisKKyAgICByZXR1cm4gdGhpcworICB9CisKKyAgQ2Fyb3VzZWwucHJvdG90eXBlLmdldEl0ZW1JbmRleCA9IGZ1bmN0aW9uIChpdGVtKSB7CisgICAgdGhpcy4kaXRlbXMgPSBpdGVtLnBhcmVudCgpLmNoaWxkcmVuKCcuaXRlbScpCisgICAgcmV0dXJuIHRoaXMuJGl0ZW1zLmluZGV4KGl0ZW0gfHwgdGhpcy4kYWN0aXZlKQorICB9CisKKyAgQ2Fyb3VzZWwucHJvdG90eXBlLmdldEl0ZW1Gb3JEaXJlY3Rpb24gPSBmdW5jdGlvbiAoZGlyZWN0aW9uLCBhY3RpdmUpIHsKKyAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChhY3RpdmUpCisgICAgdmFyIHdpbGxXcmFwID0gKGRpcmVjdGlvbiA9PSAncHJldicgJiYgYWN0aXZlSW5kZXggPT09IDApCisgICAgICAgICAgICAgICAgfHwgKGRpcmVjdGlvbiA9PSAnbmV4dCcgJiYgYWN0aXZlSW5kZXggPT0gKHRoaXMuJGl0ZW1zLmxlbmd0aCAtIDEpKQorICAgIGlmICh3aWxsV3JhcCAmJiAhdGhpcy5vcHRpb25zLndyYXApIHJldHVybiBhY3RpdmUKKyAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb24gPT0gJ3ByZXYnID8gLTEgOiAxCisgICAgdmFyIGl0ZW1JbmRleCA9IChhY3RpdmVJbmRleCArIGRlbHRhKSAlIHRoaXMuJGl0ZW1zLmxlbmd0aAorICAgIHJldHVybiB0aGlzLiRpdGVtcy5lcShpdGVtSW5kZXgpCisgIH0KKworICBDYXJvdXNlbC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAocG9zKSB7CisgICAgdmFyIHRoYXQgICAgICAgID0gdGhpcworICAgIHZhciBhY3RpdmVJbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KHRoaXMuJGFjdGl2ZSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLml0ZW0uYWN0aXZlJykpCisKKyAgICBpZiAocG9zID4gKHRoaXMuJGl0ZW1zLmxlbmd0aCAtIDEpIHx8IHBvcyA8IDApIHJldHVybgorCisgICAgaWYgKHRoaXMuc2xpZGluZykgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQub25lKCdzbGlkLmJzLmNhcm91c2VsJywgZnVuY3Rpb24gKCkgeyB0aGF0LnRvKHBvcykgfSkgLy8geWVzLCAic2xpZCIKKyAgICBpZiAoYWN0aXZlSW5kZXggPT0gcG9zKSByZXR1cm4gdGhpcy5wYXVzZSgpLmN5Y2xlKCkKKworICAgIHJldHVybiB0aGlzLnNsaWRlKHBvcyA+IGFjdGl2ZUluZGV4ID8gJ25leHQnIDogJ3ByZXYnLCB0aGlzLiRpdGVtcy5lcShwb3MpKQorICB9CisKKyAgQ2Fyb3VzZWwucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKGUpIHsKKyAgICBlIHx8ICh0aGlzLnBhdXNlZCA9IHRydWUpCisKKyAgICBpZiAodGhpcy4kZWxlbWVudC5maW5kKCcubmV4dCwgLnByZXYnKS5sZW5ndGggJiYgJC5zdXBwb3J0LnRyYW5zaXRpb24pIHsKKyAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpCisgICAgICB0aGlzLmN5Y2xlKHRydWUpCisgICAgfQorCisgICAgdGhpcy5pbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCkKKworICAgIHJldHVybiB0aGlzCisgIH0KKworICBDYXJvdXNlbC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm4KKyAgICByZXR1cm4gdGhpcy5zbGlkZSgnbmV4dCcpCisgIH0KKworICBDYXJvdXNlbC5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm4KKyAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpCisgIH0KKworICBDYXJvdXNlbC5wcm90b3R5cGUuc2xpZGUgPSBmdW5jdGlvbiAodHlwZSwgbmV4dCkgeworICAgIHZhciAkYWN0aXZlICAgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpCisgICAgdmFyICRuZXh0ICAgICA9IG5leHQgfHwgdGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKHR5cGUsICRhY3RpdmUpCisgICAgdmFyIGlzQ3ljbGluZyA9IHRoaXMuaW50ZXJ2YWwKKyAgICB2YXIgZGlyZWN0aW9uID0gdHlwZSA9PSAnbmV4dCcgPyAnbGVmdCcgOiAncmlnaHQnCisgICAgdmFyIHRoYXQgICAgICA9IHRoaXMKKworICAgIGlmICgkbmV4dC5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVybiAodGhpcy5zbGlkaW5nID0gZmFsc2UpCisKKyAgICB2YXIgcmVsYXRlZFRhcmdldCA9ICRuZXh0WzBdCisgICAgdmFyIHNsaWRlRXZlbnQgPSAkLkV2ZW50KCdzbGlkZS5icy5jYXJvdXNlbCcsIHsKKyAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXQsCisgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbgorICAgIH0pCisgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHNsaWRlRXZlbnQpCisgICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorCisgICAgdGhpcy5zbGlkaW5nID0gdHJ1ZQorCisgICAgaXNDeWNsaW5nICYmIHRoaXMucGF1c2UoKQorCisgICAgaWYgKHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKSB7CisgICAgICB0aGlzLiRpbmRpY2F0b3JzLmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJykKKyAgICAgIHZhciAkbmV4dEluZGljYXRvciA9ICQodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KCRuZXh0KV0pCisgICAgICAkbmV4dEluZGljYXRvciAmJiAkbmV4dEluZGljYXRvci5hZGRDbGFzcygnYWN0aXZlJykKKyAgICB9CisKKyAgICB2YXIgc2xpZEV2ZW50ID0gJC5FdmVudCgnc2xpZC5icy5jYXJvdXNlbCcsIHsgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldCwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gfSkgLy8geWVzLCAic2xpZCIKKyAgICBpZiAoJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnc2xpZGUnKSkgeworICAgICAgJG5leHQuYWRkQ2xhc3ModHlwZSkKKyAgICAgICRuZXh0WzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvdworICAgICAgJGFjdGl2ZS5hZGRDbGFzcyhkaXJlY3Rpb24pCisgICAgICAkbmV4dC5hZGRDbGFzcyhkaXJlY3Rpb24pCisgICAgICAkYWN0aXZlCisgICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAkbmV4dC5yZW1vdmVDbGFzcyhbdHlwZSwgZGlyZWN0aW9uXS5qb2luKCcgJykpLmFkZENsYXNzKCdhY3RpdmUnKQorICAgICAgICAgICRhY3RpdmUucmVtb3ZlQ2xhc3MoWydhY3RpdmUnLCBkaXJlY3Rpb25dLmpvaW4oJyAnKSkKKyAgICAgICAgICB0aGF0LnNsaWRpbmcgPSBmYWxzZQorICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKHNsaWRFdmVudCkKKyAgICAgICAgICB9LCAwKQorICAgICAgICB9KQorICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQ2Fyb3VzZWwuVFJBTlNJVElPTl9EVVJBVElPTikKKyAgICB9IGVsc2UgeworICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnYWN0aXZlJykKKyAgICAgICRuZXh0LmFkZENsYXNzKCdhY3RpdmUnKQorICAgICAgdGhpcy5zbGlkaW5nID0gZmFsc2UKKyAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzbGlkRXZlbnQpCisgICAgfQorCisgICAgaXNDeWNsaW5nICYmIHRoaXMuY3ljbGUoKQorCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAgLy8gQ0FST1VTRUwgUExVR0lOIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgICA9ICQodGhpcykKKyAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMuY2Fyb3VzZWwnKQorICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgQ2Fyb3VzZWwuREVGQVVMVFMsICR0aGlzLmRhdGEoKSwgdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24pCisgICAgICB2YXIgYWN0aW9uICA9IHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycgPyBvcHRpb24gOiBvcHRpb25zLnNsaWRlCisKKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuY2Fyb3VzZWwnLCAoZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnbnVtYmVyJykgZGF0YS50byhvcHRpb24pCisgICAgICBlbHNlIGlmIChhY3Rpb24pIGRhdGFbYWN0aW9uXSgpCisgICAgICBlbHNlIGlmIChvcHRpb25zLmludGVydmFsKSBkYXRhLnBhdXNlKCkuY3ljbGUoKQorICAgIH0pCisgIH0KKworICB2YXIgb2xkID0gJC5mbi5jYXJvdXNlbAorCisgICQuZm4uY2Fyb3VzZWwgICAgICAgICAgICAgPSBQbHVnaW4KKyAgJC5mbi5jYXJvdXNlbC5Db25zdHJ1Y3RvciA9IENhcm91c2VsCisKKworICAvLyBDQVJPVVNFTCBOTyBDT05GTElDVAorICAvLyA9PT09PT09PT09PT09PT09PT09PQorCisgICQuZm4uY2Fyb3VzZWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmNhcm91c2VsID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAgLy8gQ0FST1VTRUwgREFUQS1BUEkKKyAgLy8gPT09PT09PT09PT09PT09PT0KKworICB2YXIgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHsKKyAgICB2YXIgaHJlZgorICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKQorICAgIHZhciAkdGFyZ2V0ID0gJCgkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpIHx8IChocmVmID0gJHRoaXMuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywgJycpKSAvLyBzdHJpcCBmb3IgaWU3CisgICAgaWYgKCEkdGFyZ2V0Lmhhc0NsYXNzKCdjYXJvdXNlbCcpKSByZXR1cm4KKyAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKQorICAgIHZhciBzbGlkZUluZGV4ID0gJHRoaXMuYXR0cignZGF0YS1zbGlkZS10bycpCisgICAgaWYgKHNsaWRlSW5kZXgpIG9wdGlvbnMuaW50ZXJ2YWwgPSBmYWxzZQorCisgICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9ucykKKworICAgIGlmIChzbGlkZUluZGV4KSB7CisgICAgICAkdGFyZ2V0LmRhdGEoJ2JzLmNhcm91c2VsJykudG8oc2xpZGVJbmRleCkKKyAgICB9CisKKyAgICBlLnByZXZlbnREZWZhdWx0KCkKKyAgfQorCisgICQoZG9jdW1lbnQpCisgICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZV0nLCBjbGlja0hhbmRsZXIpCisgICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZS10b10nLCBjbGlja0hhbmRsZXIpCisKKyAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkgeworICAgICQoJ1tkYXRhLXJpZGU9ImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkY2Fyb3VzZWwgPSAkKHRoaXMpCisgICAgICBQbHVnaW4uY2FsbCgkY2Fyb3VzZWwsICRjYXJvdXNlbC5kYXRhKCkpCisgICAgfSkKKyAgfSkKKworfShqUXVlcnkpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEJvb3RzdHJhcDogY29sbGFwc2UuanMgdjMuMy42CisgKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNjb2xsYXBzZQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisrZnVuY3Rpb24gKCQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIENPTExBUFNFIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgdmFyIENvbGxhcHNlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLiRlbGVtZW50ICAgICAgPSAkKGVsZW1lbnQpCisgICAgdGhpcy5vcHRpb25zICAgICAgID0gJC5leHRlbmQoe30sIENvbGxhcHNlLkRFRkFVTFRTLCBvcHRpb25zKQorICAgIHRoaXMuJHRyaWdnZXIgICAgICA9ICQoJ1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtocmVmPSIjJyArIGVsZW1lbnQuaWQgKyAnIl0sJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtdGFyZ2V0PSIjJyArIGVsZW1lbnQuaWQgKyAnIl0nKQorICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IG51bGwKKworICAgIGlmICh0aGlzLm9wdGlvbnMucGFyZW50KSB7CisgICAgICB0aGlzLiRwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpCisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsIHRoaXMuJHRyaWdnZXIpCisgICAgfQorCisgICAgaWYgKHRoaXMub3B0aW9ucy50b2dnbGUpIHRoaXMudG9nZ2xlKCkKKyAgfQorCisgIENvbGxhcHNlLlZFUlNJT04gID0gJzMuMy42JworCisgIENvbGxhcHNlLlRSQU5TSVRJT05fRFVSQVRJT04gPSAzNTAKKworICBDb2xsYXBzZS5ERUZBVUxUUyA9IHsKKyAgICB0b2dnbGU6IHRydWUKKyAgfQorCisgIENvbGxhcHNlLnByb3RvdHlwZS5kaW1lbnNpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGhhc1dpZHRoID0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnd2lkdGgnKQorICAgIHJldHVybiBoYXNXaWR0aCA/ICd3aWR0aCcgOiAnaGVpZ2h0JworICB9CisKKyAgQ29sbGFwc2UucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMudHJhbnNpdGlvbmluZyB8fCB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpbicpKSByZXR1cm4KKworICAgIHZhciBhY3RpdmVzRGF0YQorICAgIHZhciBhY3RpdmVzID0gdGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5jaGlsZHJlbignLnBhbmVsJykuY2hpbGRyZW4oJy5pbiwgLmNvbGxhcHNpbmcnKQorCisgICAgaWYgKGFjdGl2ZXMgJiYgYWN0aXZlcy5sZW5ndGgpIHsKKyAgICAgIGFjdGl2ZXNEYXRhID0gYWN0aXZlcy5kYXRhKCdicy5jb2xsYXBzZScpCisgICAgICBpZiAoYWN0aXZlc0RhdGEgJiYgYWN0aXZlc0RhdGEudHJhbnNpdGlvbmluZykgcmV0dXJuCisgICAgfQorCisgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KCdzaG93LmJzLmNvbGxhcHNlJykKKyAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoc3RhcnRFdmVudCkKKyAgICBpZiAoc3RhcnRFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCisKKyAgICBpZiAoYWN0aXZlcyAmJiBhY3RpdmVzLmxlbmd0aCkgeworICAgICAgUGx1Z2luLmNhbGwoYWN0aXZlcywgJ2hpZGUnKQorICAgICAgYWN0aXZlc0RhdGEgfHwgYWN0aXZlcy5kYXRhKCdicy5jb2xsYXBzZScsIG51bGwpCisgICAgfQorCisgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuZGltZW5zaW9uKCkKKworICAgIHRoaXMuJGVsZW1lbnQKKyAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2UnKQorICAgICAgLmFkZENsYXNzKCdjb2xsYXBzaW5nJylbZGltZW5zaW9uXSgwKQorICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKQorCisgICAgdGhpcy4kdHJpZ2dlcgorICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzZWQnKQorICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKQorCisgICAgdGhpcy50cmFuc2l0aW9uaW5nID0gMQorCisgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNpbmcnKQorICAgICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlIGluJylbZGltZW5zaW9uXSgnJykKKyAgICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IDAKKyAgICAgIHRoaXMuJGVsZW1lbnQKKyAgICAgICAgLnRyaWdnZXIoJ3Nob3duLmJzLmNvbGxhcHNlJykKKyAgICB9CisKKyAgICBpZiAoISQuc3VwcG9ydC50cmFuc2l0aW9uKSByZXR1cm4gY29tcGxldGUuY2FsbCh0aGlzKQorCisgICAgdmFyIHNjcm9sbFNpemUgPSAkLmNhbWVsQ2FzZShbJ3Njcm9sbCcsIGRpbWVuc2lvbl0uam9pbignLScpKQorCisgICAgdGhpcy4kZWxlbWVudAorICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgJC5wcm94eShjb21wbGV0ZSwgdGhpcykpCisgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQ29sbGFwc2UuVFJBTlNJVElPTl9EVVJBVElPTilbZGltZW5zaW9uXSh0aGlzLiRlbGVtZW50WzBdW3Njcm9sbFNpemVdKQorICB9CisKKyAgQ29sbGFwc2UucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMudHJhbnNpdGlvbmluZyB8fCAhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaW4nKSkgcmV0dXJuCisKKyAgICB2YXIgc3RhcnRFdmVudCA9ICQuRXZlbnQoJ2hpZGUuYnMuY29sbGFwc2UnKQorICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzdGFydEV2ZW50KQorICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KKworICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLmRpbWVuc2lvbigpCisKKyAgICB0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0odGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKCkpWzBdLm9mZnNldEhlaWdodAorCisgICAgdGhpcy4kZWxlbWVudAorICAgICAgLmFkZENsYXNzKCdjb2xsYXBzaW5nJykKKyAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2UgaW4nKQorICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSkKKworICAgIHRoaXMuJHRyaWdnZXIKKyAgICAgIC5hZGRDbGFzcygnY29sbGFwc2VkJykKKyAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpCisKKyAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAxCisKKyAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAwCisgICAgICB0aGlzLiRlbGVtZW50CisgICAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2luZycpCisgICAgICAgIC5hZGRDbGFzcygnY29sbGFwc2UnKQorICAgICAgICAudHJpZ2dlcignaGlkZGVuLmJzLmNvbGxhcHNlJykKKyAgICB9CisKKyAgICBpZiAoISQuc3VwcG9ydC50cmFuc2l0aW9uKSByZXR1cm4gY29tcGxldGUuY2FsbCh0aGlzKQorCisgICAgdGhpcy4kZWxlbWVudAorICAgICAgW2RpbWVuc2lvbl0oMCkKKyAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsICQucHJveHkoY29tcGxldGUsIHRoaXMpKQorICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKENvbGxhcHNlLlRSQU5TSVRJT05fRFVSQVRJT04pCisgIH0KKworICBDb2xsYXBzZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaW4nKSA/ICdoaWRlJyA6ICdzaG93J10oKQorICB9CisKKyAgQ29sbGFwc2UucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gJCh0aGlzLm9wdGlvbnMucGFyZW50KQorICAgICAgLmZpbmQoJ1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVudD0iJyArIHRoaXMub3B0aW9ucy5wYXJlbnQgKyAnIl0nKQorICAgICAgLmVhY2goJC5wcm94eShmdW5jdGlvbiAoaSwgZWxlbWVudCkgeworICAgICAgICB2YXIgJGVsZW1lbnQgPSAkKGVsZW1lbnQpCisgICAgICAgIHRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGdldFRhcmdldEZyb21UcmlnZ2VyKCRlbGVtZW50KSwgJGVsZW1lbnQpCisgICAgICB9LCB0aGlzKSkKKyAgICAgIC5lbmQoKQorICB9CisKKyAgQ29sbGFwc2UucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyA9IGZ1bmN0aW9uICgkZWxlbWVudCwgJHRyaWdnZXIpIHsKKyAgICB2YXIgaXNPcGVuID0gJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykKKworICAgICRlbGVtZW50LmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pCisgICAgJHRyaWdnZXIKKyAgICAgIC50b2dnbGVDbGFzcygnY29sbGFwc2VkJywgIWlzT3BlbikKKyAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKQorICB9CisKKyAgZnVuY3Rpb24gZ2V0VGFyZ2V0RnJvbVRyaWdnZXIoJHRyaWdnZXIpIHsKKyAgICB2YXIgaHJlZgorICAgIHZhciB0YXJnZXQgPSAkdHJpZ2dlci5hdHRyKCdkYXRhLXRhcmdldCcpCisgICAgICB8fCAoaHJlZiA9ICR0cmlnZ2VyLmF0dHIoJ2hyZWYnKSkgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3CisKKyAgICByZXR1cm4gJCh0YXJnZXQpCisgIH0KKworCisgIC8vIENPTExBUFNFIFBMVUdJTiBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpCisgICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJykKKyAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIENvbGxhcHNlLkRFRkFVTFRTLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKQorCisgICAgICBpZiAoIWRhdGEgJiYgb3B0aW9ucy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChvcHRpb24pKSBvcHRpb25zLnRvZ2dsZSA9IGZhbHNlCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJywgKGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkKKyAgfQorCisgIHZhciBvbGQgPSAkLmZuLmNvbGxhcHNlCisKKyAgJC5mbi5jb2xsYXBzZSAgICAgICAgICAgICA9IFBsdWdpbgorICAkLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yID0gQ29sbGFwc2UKKworCisgIC8vIENPTExBUFNFIE5PIENPTkZMSUNUCisgIC8vID09PT09PT09PT09PT09PT09PT09CisKKyAgJC5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4uY29sbGFwc2UgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKKworICAvLyBDT0xMQVBTRSBEQVRBLUFQSQorICAvLyA9PT09PT09PT09PT09PT09PQorCisgICQoZG9jdW1lbnQpLm9uKCdjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl0nLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKQorCisgICAgaWYgKCEkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpKSBlLnByZXZlbnREZWZhdWx0KCkKKworICAgIHZhciAkdGFyZ2V0ID0gZ2V0VGFyZ2V0RnJvbVRyaWdnZXIoJHRoaXMpCisgICAgdmFyIGRhdGEgICAgPSAkdGFyZ2V0LmRhdGEoJ2JzLmNvbGxhcHNlJykKKyAgICB2YXIgb3B0aW9uICA9IGRhdGEgPyAndG9nZ2xlJyA6ICR0aGlzLmRhdGEoKQorCisgICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9uKQorICB9KQorCit9KGpRdWVyeSk7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQm9vdHN0cmFwOiBkcm9wZG93bi5qcyB2My4zLjYKKyAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI2Ryb3Bkb3ducworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisrZnVuY3Rpb24gKCQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIERST1BET1dOIENMQVNTIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIHZhciBiYWNrZHJvcCA9ICcuZHJvcGRvd24tYmFja2Ryb3AnCisgIHZhciB0b2dnbGUgICA9ICdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nCisgIHZhciBEcm9wZG93biA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgJChlbGVtZW50KS5vbignY2xpY2suYnMuZHJvcGRvd24nLCB0aGlzLnRvZ2dsZSkKKyAgfQorCisgIERyb3Bkb3duLlZFUlNJT04gPSAnMy4zLjYnCisKKyAgZnVuY3Rpb24gZ2V0UGFyZW50KCR0aGlzKSB7CisgICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKQorCisgICAgaWYgKCFzZWxlY3RvcikgeworICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJykKKyAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgLyNbQS1aYS16XS8udGVzdChzZWxlY3RvcikgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllNworICAgIH0KKworICAgIHZhciAkcGFyZW50ID0gc2VsZWN0b3IgJiYgJChzZWxlY3RvcikKKworICAgIHJldHVybiAkcGFyZW50ICYmICRwYXJlbnQubGVuZ3RoID8gJHBhcmVudCA6ICR0aGlzLnBhcmVudCgpCisgIH0KKworICBmdW5jdGlvbiBjbGVhck1lbnVzKGUpIHsKKyAgICBpZiAoZSAmJiBlLndoaWNoID09PSAzKSByZXR1cm4KKyAgICAkKGJhY2tkcm9wKS5yZW1vdmUoKQorICAgICQodG9nZ2xlKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyAgICAgICAgID0gJCh0aGlzKQorICAgICAgdmFyICRwYXJlbnQgICAgICAgPSBnZXRQYXJlbnQoJHRoaXMpCisgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHsgcmVsYXRlZFRhcmdldDogdGhpcyB9CisKKyAgICAgIGlmICghJHBhcmVudC5oYXNDbGFzcygnb3BlbicpKSByZXR1cm4KKworICAgICAgaWYgKGUgJiYgZS50eXBlID09ICdjbGljaycgJiYgL2lucHV0fHRleHRhcmVhL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSAmJiAkLmNvbnRhaW5zKCRwYXJlbnRbMF0sIGUudGFyZ2V0KSkgcmV0dXJuCisKKyAgICAgICRwYXJlbnQudHJpZ2dlcihlID0gJC5FdmVudCgnaGlkZS5icy5kcm9wZG93bicsIHJlbGF0ZWRUYXJnZXQpKQorCisgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCisKKyAgICAgICR0aGlzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKQorICAgICAgJHBhcmVudC5yZW1vdmVDbGFzcygnb3BlbicpLnRyaWdnZXIoJC5FdmVudCgnaGlkZGVuLmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpCisgICAgfSkKKyAgfQorCisgIERyb3Bkb3duLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyA9ICQodGhpcykKKworICAgIGlmICgkdGhpcy5pcygnLmRpc2FibGVkLCA6ZGlzYWJsZWQnKSkgcmV0dXJuCisKKyAgICB2YXIgJHBhcmVudCAgPSBnZXRQYXJlbnQoJHRoaXMpCisgICAgdmFyIGlzQWN0aXZlID0gJHBhcmVudC5oYXNDbGFzcygnb3BlbicpCisKKyAgICBjbGVhck1lbnVzKCkKKworICAgIGlmICghaXNBY3RpdmUpIHsKKyAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgISRwYXJlbnQuY2xvc2VzdCgnLm5hdmJhci1uYXYnKS5sZW5ndGgpIHsKKyAgICAgICAgLy8gaWYgbW9iaWxlIHdlIHVzZSBhIGJhY2tkcm9wIGJlY2F1c2UgY2xpY2sgZXZlbnRzIGRvbid0IGRlbGVnYXRlCisgICAgICAgICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpCisgICAgICAgICAgLmFkZENsYXNzKCdkcm9wZG93bi1iYWNrZHJvcCcpCisgICAgICAgICAgLmluc2VydEFmdGVyKCQodGhpcykpCisgICAgICAgICAgLm9uKCdjbGljaycsIGNsZWFyTWVudXMpCisgICAgICB9CisKKyAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0geyByZWxhdGVkVGFyZ2V0OiB0aGlzIH0KKyAgICAgICRwYXJlbnQudHJpZ2dlcihlID0gJC5FdmVudCgnc2hvdy5icy5kcm9wZG93bicsIHJlbGF0ZWRUYXJnZXQpKQorCisgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCisKKyAgICAgICR0aGlzCisgICAgICAgIC50cmlnZ2VyKCdmb2N1cycpCisgICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKQorCisgICAgICAkcGFyZW50CisgICAgICAgIC50b2dnbGVDbGFzcygnb3BlbicpCisgICAgICAgIC50cmlnZ2VyKCQuRXZlbnQoJ3Nob3duLmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpCisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlCisgIH0KKworICBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93biA9IGZ1bmN0aW9uIChlKSB7CisgICAgaWYgKCEvKDM4fDQwfDI3fDMyKS8udGVzdChlLndoaWNoKSB8fCAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm4KKworICAgIHZhciAkdGhpcyA9ICQodGhpcykKKworICAgIGUucHJldmVudERlZmF1bHQoKQorICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKKworICAgIGlmICgkdGhpcy5pcygnLmRpc2FibGVkLCA6ZGlzYWJsZWQnKSkgcmV0dXJuCisKKyAgICB2YXIgJHBhcmVudCAgPSBnZXRQYXJlbnQoJHRoaXMpCisgICAgdmFyIGlzQWN0aXZlID0gJHBhcmVudC5oYXNDbGFzcygnb3BlbicpCisKKyAgICBpZiAoIWlzQWN0aXZlICYmIGUud2hpY2ggIT0gMjcgfHwgaXNBY3RpdmUgJiYgZS53aGljaCA9PSAyNykgeworICAgICAgaWYgKGUud2hpY2ggPT0gMjcpICRwYXJlbnQuZmluZCh0b2dnbGUpLnRyaWdnZXIoJ2ZvY3VzJykKKyAgICAgIHJldHVybiAkdGhpcy50cmlnZ2VyKCdjbGljaycpCisgICAgfQorCisgICAgdmFyIGRlc2MgPSAnIGxpOm5vdCguZGlzYWJsZWQpOnZpc2libGUgYScKKyAgICB2YXIgJGl0ZW1zID0gJHBhcmVudC5maW5kKCcuZHJvcGRvd24tbWVudScgKyBkZXNjKQorCisgICAgaWYgKCEkaXRlbXMubGVuZ3RoKSByZXR1cm4KKworICAgIHZhciBpbmRleCA9ICRpdGVtcy5pbmRleChlLnRhcmdldCkKKworICAgIGlmIChlLndoaWNoID09IDM4ICYmIGluZGV4ID4gMCkgICAgICAgICAgICAgICAgIGluZGV4LS0gICAgICAgICAvLyB1cAorICAgIGlmIChlLndoaWNoID09IDQwICYmIGluZGV4IDwgJGl0ZW1zLmxlbmd0aCAtIDEpIGluZGV4KysgICAgICAgICAvLyBkb3duCisgICAgaWYgKCF+aW5kZXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwCisKKyAgICAkaXRlbXMuZXEoaW5kZXgpLnRyaWdnZXIoJ2ZvY3VzJykKKyAgfQorCisKKyAgLy8gRFJPUERPV04gUExVR0lOIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICB2YXIgZGF0YSAgPSAkdGhpcy5kYXRhKCdicy5kcm9wZG93bicpCisKKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuZHJvcGRvd24nLCAoZGF0YSA9IG5ldyBEcm9wZG93bih0aGlzKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dLmNhbGwoJHRoaXMpCisgICAgfSkKKyAgfQorCisgIHZhciBvbGQgPSAkLmZuLmRyb3Bkb3duCisKKyAgJC5mbi5kcm9wZG93biAgICAgICAgICAgICA9IFBsdWdpbgorICAkLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yID0gRHJvcGRvd24KKworCisgIC8vIERST1BET1dOIE5PIENPTkZMSUNUCisgIC8vID09PT09PT09PT09PT09PT09PT09CisKKyAgJC5mbi5kcm9wZG93bi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4uZHJvcGRvd24gPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKKworICAvLyBBUFBMWSBUTyBTVEFOREFSRCBEUk9QRE9XTiBFTEVNRU5UUworICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICQoZG9jdW1lbnQpCisgICAgLm9uKCdjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaScsIGNsZWFyTWVudXMpCisgICAgLm9uKCdjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaScsICcuZHJvcGRvd24gZm9ybScsIGZ1bmN0aW9uIChlKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCkgfSkKKyAgICAub24oJ2NsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgdG9nZ2xlLCBEcm9wZG93bi5wcm90b3R5cGUudG9nZ2xlKQorICAgIC5vbigna2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaScsIHRvZ2dsZSwgRHJvcGRvd24ucHJvdG90eXBlLmtleWRvd24pCisgICAgLm9uKCdrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgJy5kcm9wZG93bi1tZW51JywgRHJvcGRvd24ucHJvdG90eXBlLmtleWRvd24pCisKK30oalF1ZXJ5KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBCb290c3RyYXA6IG1vZGFsLmpzIHYzLjMuNgorICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jbW9kYWxzCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLgorICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKytmdW5jdGlvbiAoJCkgeworICAndXNlIHN0cmljdCc7CisKKyAgLy8gTU9EQUwgQ0xBU1MgREVGSU5JVElPTgorICAvLyA9PT09PT09PT09PT09PT09PT09PT09CisKKyAgdmFyIE1vZGFsID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLm9wdGlvbnMgICAgICAgICAgICAgPSBvcHRpb25zCisgICAgdGhpcy4kYm9keSAgICAgICAgICAgICAgID0gJChkb2N1bWVudC5ib2R5KQorICAgIHRoaXMuJGVsZW1lbnQgICAgICAgICAgICA9ICQoZWxlbWVudCkKKyAgICB0aGlzLiRkaWFsb2cgICAgICAgICAgICAgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5tb2RhbC1kaWFsb2cnKQorICAgIHRoaXMuJGJhY2tkcm9wICAgICAgICAgICA9IG51bGwKKyAgICB0aGlzLmlzU2hvd24gICAgICAgICAgICAgPSBudWxsCisgICAgdGhpcy5vcmlnaW5hbEJvZHlQYWQgICAgID0gbnVsbAorICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggICAgICA9IDAKKyAgICB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZQorCisgICAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdGUpIHsKKyAgICAgIHRoaXMuJGVsZW1lbnQKKyAgICAgICAgLmZpbmQoJy5tb2RhbC1jb250ZW50JykKKyAgICAgICAgLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSwgJC5wcm94eShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdsb2FkZWQuYnMubW9kYWwnKQorICAgICAgICB9LCB0aGlzKSkKKyAgICB9CisgIH0KKworICBNb2RhbC5WRVJTSU9OICA9ICczLjMuNicKKworICBNb2RhbC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMzAwCisgIE1vZGFsLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04gPSAxNTAKKworICBNb2RhbC5ERUZBVUxUUyA9IHsKKyAgICBiYWNrZHJvcDogdHJ1ZSwKKyAgICBrZXlib2FyZDogdHJ1ZSwKKyAgICBzaG93OiB0cnVlCisgIH0KKworICBNb2RhbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKF9yZWxhdGVkVGFyZ2V0KSB7CisgICAgcmV0dXJuIHRoaXMuaXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KF9yZWxhdGVkVGFyZ2V0KQorICB9CisKKyAgTW9kYWwucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoX3JlbGF0ZWRUYXJnZXQpIHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICB2YXIgZSAgICA9ICQuRXZlbnQoJ3Nob3cuYnMubW9kYWwnLCB7IHJlbGF0ZWRUYXJnZXQ6IF9yZWxhdGVkVGFyZ2V0IH0pCisKKyAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKKworICAgIGlmICh0aGlzLmlzU2hvd24gfHwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCisKKyAgICB0aGlzLmlzU2hvd24gPSB0cnVlCisKKyAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyKCkKKyAgICB0aGlzLnNldFNjcm9sbGJhcigpCisgICAgdGhpcy4kYm9keS5hZGRDbGFzcygnbW9kYWwtb3BlbicpCisKKyAgICB0aGlzLmVzY2FwZSgpCisgICAgdGhpcy5yZXNpemUoKQorCisgICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suZGlzbWlzcy5icy5tb2RhbCcsICdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJywgJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpKQorCisgICAgdGhpcy4kZGlhbG9nLm9uKCdtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoYXQuJGVsZW1lbnQub25lKCdtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkgeworICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhhdC4kZWxlbWVudCkpIHRoYXQuaWdub3JlQmFja2Ryb3BDbGljayA9IHRydWUKKyAgICAgIH0pCisgICAgfSkKKworICAgIHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHRyYW5zaXRpb24gPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGF0LiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykKKworICAgICAgaWYgKCF0aGF0LiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aCkgeworICAgICAgICB0aGF0LiRlbGVtZW50LmFwcGVuZFRvKHRoYXQuJGJvZHkpIC8vIGRvbid0IG1vdmUgbW9kYWxzIGRvbSBwb3NpdGlvbgorICAgICAgfQorCisgICAgICB0aGF0LiRlbGVtZW50CisgICAgICAgIC5zaG93KCkKKyAgICAgICAgLnNjcm9sbFRvcCgwKQorCisgICAgICB0aGF0LmFkanVzdERpYWxvZygpCisKKyAgICAgIGlmICh0cmFuc2l0aW9uKSB7CisgICAgICAgIHRoYXQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93CisgICAgICB9CisKKyAgICAgIHRoYXQuJGVsZW1lbnQuYWRkQ2xhc3MoJ2luJykKKworICAgICAgdGhhdC5lbmZvcmNlRm9jdXMoKQorCisgICAgICB2YXIgZSA9ICQuRXZlbnQoJ3Nob3duLmJzLm1vZGFsJywgeyByZWxhdGVkVGFyZ2V0OiBfcmVsYXRlZFRhcmdldCB9KQorCisgICAgICB0cmFuc2l0aW9uID8KKyAgICAgICAgdGhhdC4kZGlhbG9nIC8vIHdhaXQgZm9yIG1vZGFsIHRvIHNsaWRlIGluCisgICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpLnRyaWdnZXIoZSkKKyAgICAgICAgICB9KQorICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6CisgICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKS50cmlnZ2VyKGUpCisgICAgfSkKKyAgfQorCisgIE1vZGFsLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKGUpIHsKKyAgICBpZiAoZSkgZS5wcmV2ZW50RGVmYXVsdCgpCisKKyAgICBlID0gJC5FdmVudCgnaGlkZS5icy5tb2RhbCcpCisKKyAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKKworICAgIGlmICghdGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorCisgICAgdGhpcy5pc1Nob3duID0gZmFsc2UKKworICAgIHRoaXMuZXNjYXBlKCkKKyAgICB0aGlzLnJlc2l6ZSgpCisKKyAgICAkKGRvY3VtZW50KS5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKQorCisgICAgdGhpcy4kZWxlbWVudAorICAgICAgLnJlbW92ZUNsYXNzKCdpbicpCisgICAgICAub2ZmKCdjbGljay5kaXNtaXNzLmJzLm1vZGFsJykKKyAgICAgIC5vZmYoJ21vdXNldXAuZGlzbWlzcy5icy5tb2RhbCcpCisKKyAgICB0aGlzLiRkaWFsb2cub2ZmKCdtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCcpCisKKyAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPworICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCAkLnByb3h5KHRoaXMuaGlkZU1vZGFsLCB0aGlzKSkKKyAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKE1vZGFsLlRSQU5TSVRJT05fRFVSQVRJT04pIDoKKyAgICAgIHRoaXMuaGlkZU1vZGFsKCkKKyAgfQorCisgIE1vZGFsLnByb3RvdHlwZS5lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiAoKSB7CisgICAgJChkb2N1bWVudCkKKyAgICAgIC5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKSAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3AKKyAgICAgIC5vbignZm9jdXNpbi5icy5tb2RhbCcsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0gIT09IGUudGFyZ2V0ICYmICF0aGlzLiRlbGVtZW50LmhhcyhlLnRhcmdldCkubGVuZ3RoKSB7CisgICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpCisgICAgICAgIH0KKyAgICAgIH0sIHRoaXMpKQorICB9CisKKyAgTW9kYWwucHJvdG90eXBlLmVzY2FwZSA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAodGhpcy5pc1Nob3duICYmIHRoaXMub3B0aW9ucy5rZXlib2FyZCkgeworICAgICAgdGhpcy4kZWxlbWVudC5vbigna2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsJywgJC5wcm94eShmdW5jdGlvbiAoZSkgeworICAgICAgICBlLndoaWNoID09IDI3ICYmIHRoaXMuaGlkZSgpCisgICAgICB9LCB0aGlzKSkKKyAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24pIHsKKyAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdrZXlkb3duLmRpc21pc3MuYnMubW9kYWwnKQorICAgIH0KKyAgfQorCisgIE1vZGFsLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMuaXNTaG93bikgeworICAgICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuYnMubW9kYWwnLCAkLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLCB0aGlzKSkKKyAgICB9IGVsc2UgeworICAgICAgJCh3aW5kb3cpLm9mZigncmVzaXplLmJzLm1vZGFsJykKKyAgICB9CisgIH0KKworICBNb2RhbC5wcm90b3R5cGUuaGlkZU1vZGFsID0gZnVuY3Rpb24gKCkgeworICAgIHZhciB0aGF0ID0gdGhpcworICAgIHRoaXMuJGVsZW1lbnQuaGlkZSgpCisgICAgdGhpcy5iYWNrZHJvcChmdW5jdGlvbiAoKSB7CisgICAgICB0aGF0LiRib2R5LnJlbW92ZUNsYXNzKCdtb2RhbC1vcGVuJykKKyAgICAgIHRoYXQucmVzZXRBZGp1c3RtZW50cygpCisgICAgICB0aGF0LnJlc2V0U2Nyb2xsYmFyKCkKKyAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignaGlkZGVuLmJzLm1vZGFsJykKKyAgICB9KQorICB9CisKKyAgTW9kYWwucHJvdG90eXBlLnJlbW92ZUJhY2tkcm9wID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuJGJhY2tkcm9wICYmIHRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpCisgICAgdGhpcy4kYmFja2Ryb3AgPSBudWxsCisgIH0KKworICBNb2RhbC5wcm90b3R5cGUuYmFja2Ryb3AgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICB2YXIgYW5pbWF0ZSA9IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKSA/ICdmYWRlJyA6ICcnCisKKyAgICBpZiAodGhpcy5pc1Nob3duICYmIHRoaXMub3B0aW9ucy5iYWNrZHJvcCkgeworICAgICAgdmFyIGRvQW5pbWF0ZSA9ICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIGFuaW1hdGUKKworICAgICAgdGhpcy4kYmFja2Ryb3AgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKQorICAgICAgICAuYWRkQ2xhc3MoJ21vZGFsLWJhY2tkcm9wICcgKyBhbmltYXRlKQorICAgICAgICAuYXBwZW5kVG8odGhpcy4kYm9keSkKKworICAgICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suZGlzbWlzcy5icy5tb2RhbCcsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgaWYgKHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaykgeworICAgICAgICAgIHRoaXMuaWdub3JlQmFja2Ryb3BDbGljayA9IGZhbHNlCisgICAgICAgICAgcmV0dXJuCisgICAgICAgIH0KKyAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQpIHJldHVybgorICAgICAgICB0aGlzLm9wdGlvbnMuYmFja2Ryb3AgPT0gJ3N0YXRpYycKKyAgICAgICAgICA/IHRoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKQorICAgICAgICAgIDogdGhpcy5oaWRlKCkKKyAgICAgIH0sIHRoaXMpKQorCisgICAgICBpZiAoZG9BbmltYXRlKSB0aGlzLiRiYWNrZHJvcFswXS5vZmZzZXRXaWR0aCAvLyBmb3JjZSByZWZsb3cKKworICAgICAgdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoJ2luJykKKworICAgICAgaWYgKCFjYWxsYmFjaykgcmV0dXJuCisKKyAgICAgIGRvQW5pbWF0ZSA/CisgICAgICAgIHRoaXMuJGJhY2tkcm9wCisgICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY2FsbGJhY2spCisgICAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKE1vZGFsLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pIDoKKyAgICAgICAgY2FsbGJhY2soKQorCisgICAgfSBlbHNlIGlmICghdGhpcy5pc1Nob3duICYmIHRoaXMuJGJhY2tkcm9wKSB7CisgICAgICB0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygnaW4nKQorCisgICAgICB2YXIgY2FsbGJhY2tSZW1vdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoYXQucmVtb3ZlQmFja2Ryb3AoKQorICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpCisgICAgICB9CisgICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPworICAgICAgICB0aGlzLiRiYWNrZHJvcAorICAgICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGNhbGxiYWNrUmVtb3ZlKQorICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKSA6CisgICAgICAgIGNhbGxiYWNrUmVtb3ZlKCkKKworICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHsKKyAgICAgIGNhbGxiYWNrKCkKKyAgICB9CisgIH0KKworICAvLyB0aGVzZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBoYW5kbGUgb3ZlcmZsb3dpbmcgbW9kYWxzCisKKyAgTW9kYWwucHJvdG90eXBlLmhhbmRsZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmFkanVzdERpYWxvZygpCisgIH0KKworICBNb2RhbC5wcm90b3R5cGUuYWRqdXN0RGlhbG9nID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBtb2RhbElzT3ZlcmZsb3dpbmcgPSB0aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQKKworICAgIHRoaXMuJGVsZW1lbnQuY3NzKHsKKyAgICAgIHBhZGRpbmdMZWZ0OiAgIXRoaXMuYm9keUlzT3ZlcmZsb3dpbmcgJiYgbW9kYWxJc092ZXJmbG93aW5nID8gdGhpcy5zY3JvbGxiYXJXaWR0aCA6ICcnLAorICAgICAgcGFkZGluZ1JpZ2h0OiB0aGlzLmJvZHlJc092ZXJmbG93aW5nICYmICFtb2RhbElzT3ZlcmZsb3dpbmcgPyB0aGlzLnNjcm9sbGJhcldpZHRoIDogJycKKyAgICB9KQorICB9CisKKyAgTW9kYWwucHJvdG90eXBlLnJlc2V0QWRqdXN0bWVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kZWxlbWVudC5jc3MoeworICAgICAgcGFkZGluZ0xlZnQ6ICcnLAorICAgICAgcGFkZGluZ1JpZ2h0OiAnJworICAgIH0pCisgIH0KKworICBNb2RhbC5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGZ1bGxXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoCisgICAgaWYgKCFmdWxsV2luZG93V2lkdGgpIHsgLy8gd29ya2Fyb3VuZCBmb3IgbWlzc2luZyB3aW5kb3cuaW5uZXJXaWR0aCBpbiBJRTgKKyAgICAgIHZhciBkb2N1bWVudEVsZW1lbnRSZWN0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpCisgICAgICBmdWxsV2luZG93V2lkdGggPSBkb2N1bWVudEVsZW1lbnRSZWN0LnJpZ2h0IC0gTWF0aC5hYnMoZG9jdW1lbnRFbGVtZW50UmVjdC5sZWZ0KQorICAgIH0KKyAgICB0aGlzLmJvZHlJc092ZXJmbG93aW5nID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8IGZ1bGxXaW5kb3dXaWR0aAorICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSB0aGlzLm1lYXN1cmVTY3JvbGxiYXIoKQorICB9CisKKyAgTW9kYWwucHJvdG90eXBlLnNldFNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgYm9keVBhZCA9IHBhcnNlSW50KCh0aGlzLiRib2R5LmNzcygncGFkZGluZy1yaWdodCcpIHx8IDApLCAxMCkKKyAgICB0aGlzLm9yaWdpbmFsQm9keVBhZCA9IGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0IHx8ICcnCisgICAgaWYgKHRoaXMuYm9keUlzT3ZlcmZsb3dpbmcpIHRoaXMuJGJvZHkuY3NzKCdwYWRkaW5nLXJpZ2h0JywgYm9keVBhZCArIHRoaXMuc2Nyb2xsYmFyV2lkdGgpCisgIH0KKworICBNb2RhbC5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnLCB0aGlzLm9yaWdpbmFsQm9keVBhZCkKKyAgfQorCisgIE1vZGFsLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkgeyAvLyB0aHggd2Fsc2gKKyAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykKKyAgICBzY3JvbGxEaXYuY2xhc3NOYW1lID0gJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJworICAgIHRoaXMuJGJvZHkuYXBwZW5kKHNjcm9sbERpdikKKyAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYub2Zmc2V0V2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGgKKyAgICB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKHNjcm9sbERpdikKKyAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGgKKyAgfQorCisKKyAgLy8gTU9EQUwgUExVR0lOIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0KKworICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uLCBfcmVsYXRlZFRhcmdldCkgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpCisgICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLm1vZGFsJykKKyAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIE1vZGFsLkRFRkFVTFRTLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKQorCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLm1vZGFsJywgKGRhdGEgPSBuZXcgTW9kYWwodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXShfcmVsYXRlZFRhcmdldCkKKyAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2hvdykgZGF0YS5zaG93KF9yZWxhdGVkVGFyZ2V0KQorICAgIH0pCisgIH0KKworICB2YXIgb2xkID0gJC5mbi5tb2RhbAorCisgICQuZm4ubW9kYWwgICAgICAgICAgICAgPSBQbHVnaW4KKyAgJC5mbi5tb2RhbC5Db25zdHJ1Y3RvciA9IE1vZGFsCisKKworICAvLyBNT0RBTCBOTyBDT05GTElDVAorICAvLyA9PT09PT09PT09PT09PT09PQorCisgICQuZm4ubW9kYWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLm1vZGFsID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAgLy8gTU9EQUwgREFUQS1BUEkKKyAgLy8gPT09PT09PT09PT09PT0KKworICAkKGRvY3VtZW50KS5vbignY2xpY2suYnMubW9kYWwuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJywgZnVuY3Rpb24gKGUpIHsKKyAgICB2YXIgJHRoaXMgICA9ICQodGhpcykKKyAgICB2YXIgaHJlZiAgICA9ICR0aGlzLmF0dHIoJ2hyZWYnKQorICAgIHZhciAkdGFyZ2V0ID0gJCgkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpIHx8IChocmVmICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCAnJykpKSAvLyBzdHJpcCBmb3IgaWU3CisgICAgdmFyIG9wdGlvbiAgPSAkdGFyZ2V0LmRhdGEoJ2JzLm1vZGFsJykgPyAndG9nZ2xlJyA6ICQuZXh0ZW5kKHsgcmVtb3RlOiAhLyMvLnRlc3QoaHJlZikgJiYgaHJlZiB9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKQorCisgICAgaWYgKCR0aGlzLmlzKCdhJykpIGUucHJldmVudERlZmF1bHQoKQorCisgICAgJHRhcmdldC5vbmUoJ3Nob3cuYnMubW9kYWwnLCBmdW5jdGlvbiAoc2hvd0V2ZW50KSB7CisgICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4gLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93bgorICAgICAgJHRhcmdldC5vbmUoJ2hpZGRlbi5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJHRoaXMuaXMoJzp2aXNpYmxlJykgJiYgJHRoaXMudHJpZ2dlcignZm9jdXMnKQorICAgICAgfSkKKyAgICB9KQorICAgIFBsdWdpbi5jYWxsKCR0YXJnZXQsIG9wdGlvbiwgdGhpcykKKyAgfSkKKworfShqUXVlcnkpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEJvb3RzdHJhcDogdG9vbHRpcC5qcyB2My4zLjYKKyAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3Rvb2x0aXAKKyAqIEluc3BpcmVkIGJ5IHRoZSBvcmlnaW5hbCBqUXVlcnkudGlwc3kgYnkgSmFzb24gRnJhbWUKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworK2Z1bmN0aW9uICgkKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvLyBUT09MVElQIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICB2YXIgVG9vbHRpcCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy50eXBlICAgICAgID0gbnVsbAorICAgIHRoaXMub3B0aW9ucyAgICA9IG51bGwKKyAgICB0aGlzLmVuYWJsZWQgICAgPSBudWxsCisgICAgdGhpcy50aW1lb3V0ICAgID0gbnVsbAorICAgIHRoaXMuaG92ZXJTdGF0ZSA9IG51bGwKKyAgICB0aGlzLiRlbGVtZW50ICAgPSBudWxsCisgICAgdGhpcy5pblN0YXRlICAgID0gbnVsbAorCisgICAgdGhpcy5pbml0KCd0b29sdGlwJywgZWxlbWVudCwgb3B0aW9ucykKKyAgfQorCisgIFRvb2x0aXAuVkVSU0lPTiAgPSAnMy4zLjYnCisKKyAgVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwCisKKyAgVG9vbHRpcC5ERUZBVUxUUyA9IHsKKyAgICBhbmltYXRpb246IHRydWUsCisgICAgcGxhY2VtZW50OiAndG9wJywKKyAgICBzZWxlY3RvcjogZmFsc2UsCisgICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPSJ0b29sdGlwIiByb2xlPSJ0b29sdGlwIj48ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4nLAorICAgIHRyaWdnZXI6ICdob3ZlciBmb2N1cycsCisgICAgdGl0bGU6ICcnLAorICAgIGRlbGF5OiAwLAorICAgIGh0bWw6IGZhbHNlLAorICAgIGNvbnRhaW5lcjogZmFsc2UsCisgICAgdmlld3BvcnQ6IHsKKyAgICAgIHNlbGVjdG9yOiAnYm9keScsCisgICAgICBwYWRkaW5nOiAwCisgICAgfQorICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICh0eXBlLCBlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5lbmFibGVkICAgPSB0cnVlCisgICAgdGhpcy50eXBlICAgICAgPSB0eXBlCisgICAgdGhpcy4kZWxlbWVudCAgPSAkKGVsZW1lbnQpCisgICAgdGhpcy5vcHRpb25zICAgPSB0aGlzLmdldE9wdGlvbnMob3B0aW9ucykKKyAgICB0aGlzLiR2aWV3cG9ydCA9IHRoaXMub3B0aW9ucy52aWV3cG9ydCAmJiAkKCQuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMudmlld3BvcnQpID8gdGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcywgdGhpcy4kZWxlbWVudCkgOiAodGhpcy5vcHRpb25zLnZpZXdwb3J0LnNlbGVjdG9yIHx8IHRoaXMub3B0aW9ucy52aWV3cG9ydCkpCisgICAgdGhpcy5pblN0YXRlICAgPSB7IGNsaWNrOiBmYWxzZSwgaG92ZXI6IGZhbHNlLCBmb2N1czogZmFsc2UgfQorCisgICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0gaW5zdGFuY2VvZiBkb2N1bWVudC5jb25zdHJ1Y3RvciAmJiAhdGhpcy5vcHRpb25zLnNlbGVjdG9yKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BzZWxlY3RvcmAgb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gaW5pdGlhbGl6aW5nICcgKyB0aGlzLnR5cGUgKyAnIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0IScpCisgICAgfQorCisgICAgdmFyIHRyaWdnZXJzID0gdGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoJyAnKQorCisgICAgZm9yICh2YXIgaSA9IHRyaWdnZXJzLmxlbmd0aDsgaS0tOykgeworICAgICAgdmFyIHRyaWdnZXIgPSB0cmlnZ2Vyc1tpXQorCisgICAgICBpZiAodHJpZ2dlciA9PSAnY2xpY2snKSB7CisgICAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94eSh0aGlzLnRvZ2dsZSwgdGhpcykpCisgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgIT0gJ21hbnVhbCcpIHsKKyAgICAgICAgdmFyIGV2ZW50SW4gID0gdHJpZ2dlciA9PSAnaG92ZXInID8gJ21vdXNlZW50ZXInIDogJ2ZvY3VzaW4nCisgICAgICAgIHZhciBldmVudE91dCA9IHRyaWdnZXIgPT0gJ2hvdmVyJyA/ICdtb3VzZWxlYXZlJyA6ICdmb2N1c291dCcKKworICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKGV2ZW50SW4gICsgJy4nICsgdGhpcy50eXBlLCB0aGlzLm9wdGlvbnMuc2VsZWN0b3IsICQucHJveHkodGhpcy5lbnRlciwgdGhpcykpCisgICAgICAgIHRoaXMuJGVsZW1lbnQub24oZXZlbnRPdXQgKyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94eSh0aGlzLmxlYXZlLCB0aGlzKSkKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLm9wdGlvbnMuc2VsZWN0b3IgPworICAgICAgKHRoaXMuX29wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCB7IHRyaWdnZXI6ICdtYW51YWwnLCBzZWxlY3RvcjogJycgfSkpIDoKKyAgICAgIHRoaXMuZml4VGl0bGUoKQorICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIFRvb2x0aXAuREVGQVVMVFMKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5nZXREZWZhdWx0cygpLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucykKKworICAgIGlmIChvcHRpb25zLmRlbGF5ICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ID09ICdudW1iZXInKSB7CisgICAgICBvcHRpb25zLmRlbGF5ID0geworICAgICAgICBzaG93OiBvcHRpb25zLmRlbGF5LAorICAgICAgICBoaWRlOiBvcHRpb25zLmRlbGF5CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG9wdGlvbnMKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLmdldERlbGVnYXRlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgb3B0aW9ucyAgPSB7fQorICAgIHZhciBkZWZhdWx0cyA9IHRoaXMuZ2V0RGVmYXVsdHMoKQorCisgICAgdGhpcy5fb3B0aW9ucyAmJiAkLmVhY2godGhpcy5fb3B0aW9ucywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgIGlmIChkZWZhdWx0c1trZXldICE9IHZhbHVlKSBvcHRpb25zW2tleV0gPSB2YWx1ZQorICAgIH0pCisKKyAgICByZXR1cm4gb3B0aW9ucworICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuZW50ZXIgPSBmdW5jdGlvbiAob2JqKSB7CisgICAgdmFyIHNlbGYgPSBvYmogaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yID8KKyAgICAgIG9iaiA6ICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUpCisKKyAgICBpZiAoIXNlbGYpIHsKKyAgICAgIHNlbGYgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihvYmouY3VycmVudFRhcmdldCwgdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSkKKyAgICAgICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHNlbGYpCisgICAgfQorCisgICAgaWYgKG9iaiBpbnN0YW5jZW9mICQuRXZlbnQpIHsKKyAgICAgIHNlbGYuaW5TdGF0ZVtvYmoudHlwZSA9PSAnZm9jdXNpbicgPyAnZm9jdXMnIDogJ2hvdmVyJ10gPSB0cnVlCisgICAgfQorCisgICAgaWYgKHNlbGYudGlwKCkuaGFzQ2xhc3MoJ2luJykgfHwgc2VsZi5ob3ZlclN0YXRlID09ICdpbicpIHsKKyAgICAgIHNlbGYuaG92ZXJTdGF0ZSA9ICdpbicKKyAgICAgIHJldHVybgorICAgIH0KKworICAgIGNsZWFyVGltZW91dChzZWxmLnRpbWVvdXQpCisKKyAgICBzZWxmLmhvdmVyU3RhdGUgPSAnaW4nCisKKyAgICBpZiAoIXNlbGYub3B0aW9ucy5kZWxheSB8fCAhc2VsZi5vcHRpb25zLmRlbGF5LnNob3cpIHJldHVybiBzZWxmLnNob3coKQorCisgICAgc2VsZi50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoc2VsZi5ob3ZlclN0YXRlID09ICdpbicpIHNlbGYuc2hvdygpCisgICAgfSwgc2VsZi5vcHRpb25zLmRlbGF5LnNob3cpCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5pc0luU3RhdGVUcnVlID0gZnVuY3Rpb24gKCkgeworICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmluU3RhdGUpIHsKKyAgICAgIGlmICh0aGlzLmluU3RhdGVba2V5XSkgcmV0dXJuIHRydWUKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2UKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLmxlYXZlID0gZnVuY3Rpb24gKG9iaikgeworICAgIHZhciBzZWxmID0gb2JqIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvciA/CisgICAgICBvYmogOiAkKG9iai5jdXJyZW50VGFyZ2V0KS5kYXRhKCdicy4nICsgdGhpcy50eXBlKQorCisgICAgaWYgKCFzZWxmKSB7CisgICAgICBzZWxmID0gbmV3IHRoaXMuY29uc3RydWN0b3Iob2JqLmN1cnJlbnRUYXJnZXQsIHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpCisgICAgICAkKG9iai5jdXJyZW50VGFyZ2V0KS5kYXRhKCdicy4nICsgdGhpcy50eXBlLCBzZWxmKQorICAgIH0KKworICAgIGlmIChvYmogaW5zdGFuY2VvZiAkLkV2ZW50KSB7CisgICAgICBzZWxmLmluU3RhdGVbb2JqLnR5cGUgPT0gJ2ZvY3Vzb3V0JyA/ICdmb2N1cycgOiAnaG92ZXInXSA9IGZhbHNlCisgICAgfQorCisgICAgaWYgKHNlbGYuaXNJblN0YXRlVHJ1ZSgpKSByZXR1cm4KKworICAgIGNsZWFyVGltZW91dChzZWxmLnRpbWVvdXQpCisKKyAgICBzZWxmLmhvdmVyU3RhdGUgPSAnb3V0JworCisgICAgaWYgKCFzZWxmLm9wdGlvbnMuZGVsYXkgfHwgIXNlbGYub3B0aW9ucy5kZWxheS5oaWRlKSByZXR1cm4gc2VsZi5oaWRlKCkKKworICAgIHNlbGYudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgaWYgKHNlbGYuaG92ZXJTdGF0ZSA9PSAnb3V0Jykgc2VsZi5oaWRlKCkKKyAgICB9LCBzZWxmLm9wdGlvbnMuZGVsYXkuaGlkZSkKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGUgPSAkLkV2ZW50KCdzaG93LmJzLicgKyB0aGlzLnR5cGUpCisKKyAgICBpZiAodGhpcy5oYXNDb250ZW50KCkgJiYgdGhpcy5lbmFibGVkKSB7CisgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKKworICAgICAgdmFyIGluRG9tID0gJC5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLiRlbGVtZW50WzBdKQorICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgIWluRG9tKSByZXR1cm4KKyAgICAgIHZhciB0aGF0ID0gdGhpcworCisgICAgICB2YXIgJHRpcCA9IHRoaXMudGlwKCkKKworICAgICAgdmFyIHRpcElkID0gdGhpcy5nZXRVSUQodGhpcy50eXBlKQorCisgICAgICB0aGlzLnNldENvbnRlbnQoKQorICAgICAgJHRpcC5hdHRyKCdpZCcsIHRpcElkKQorICAgICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwSWQpCisKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSAkdGlwLmFkZENsYXNzKCdmYWRlJykKKworICAgICAgdmFyIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50ID09ICdmdW5jdGlvbicgPworICAgICAgICB0aGlzLm9wdGlvbnMucGxhY2VtZW50LmNhbGwodGhpcywgJHRpcFswXSwgdGhpcy4kZWxlbWVudFswXSkgOgorICAgICAgICB0aGlzLm9wdGlvbnMucGxhY2VtZW50CisKKyAgICAgIHZhciBhdXRvVG9rZW4gPSAvXHM/YXV0bz9ccz8vaQorICAgICAgdmFyIGF1dG9QbGFjZSA9IGF1dG9Ub2tlbi50ZXN0KHBsYWNlbWVudCkKKyAgICAgIGlmIChhdXRvUGxhY2UpIHBsYWNlbWVudCA9IHBsYWNlbWVudC5yZXBsYWNlKGF1dG9Ub2tlbiwgJycpIHx8ICd0b3AnCisKKyAgICAgICR0aXAKKyAgICAgICAgLmRldGFjaCgpCisgICAgICAgIC5jc3MoeyB0b3A6IDAsIGxlZnQ6IDAsIGRpc3BsYXk6ICdibG9jaycgfSkKKyAgICAgICAgLmFkZENsYXNzKHBsYWNlbWVudCkKKyAgICAgICAgLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHRoaXMpCisKKyAgICAgIHRoaXMub3B0aW9ucy5jb250YWluZXIgPyAkdGlwLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpIDogJHRpcC5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KQorICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdpbnNlcnRlZC5icy4nICsgdGhpcy50eXBlKQorCisgICAgICB2YXIgcG9zICAgICAgICAgID0gdGhpcy5nZXRQb3NpdGlvbigpCisgICAgICB2YXIgYWN0dWFsV2lkdGggID0gJHRpcFswXS5vZmZzZXRXaWR0aAorICAgICAgdmFyIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0CisKKyAgICAgIGlmIChhdXRvUGxhY2UpIHsKKyAgICAgICAgdmFyIG9yZ1BsYWNlbWVudCA9IHBsYWNlbWVudAorICAgICAgICB2YXIgdmlld3BvcnREaW0gPSB0aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KQorCisgICAgICAgIHBsYWNlbWVudCA9IHBsYWNlbWVudCA9PSAnYm90dG9tJyAmJiBwb3MuYm90dG9tICsgYWN0dWFsSGVpZ2h0ID4gdmlld3BvcnREaW0uYm90dG9tID8gJ3RvcCcgICAgOgorICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ3RvcCcgICAgJiYgcG9zLnRvcCAgICAtIGFjdHVhbEhlaWdodCA8IHZpZXdwb3J0RGltLnRvcCAgICA/ICdib3R0b20nIDoKKyAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50ID09ICdyaWdodCcgICYmIHBvcy5yaWdodCAgKyBhY3R1YWxXaWR0aCAgPiB2aWV3cG9ydERpbS53aWR0aCAgPyAnbGVmdCcgICA6CisgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudCA9PSAnbGVmdCcgICAmJiBwb3MubGVmdCAgIC0gYWN0dWFsV2lkdGggIDwgdmlld3BvcnREaW0ubGVmdCAgID8gJ3JpZ2h0JyAgOgorICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQKKworICAgICAgICAkdGlwCisgICAgICAgICAgLnJlbW92ZUNsYXNzKG9yZ1BsYWNlbWVudCkKKyAgICAgICAgICAuYWRkQ2xhc3MocGxhY2VtZW50KQorICAgICAgfQorCisgICAgICB2YXIgY2FsY3VsYXRlZE9mZnNldCA9IHRoaXMuZ2V0Q2FsY3VsYXRlZE9mZnNldChwbGFjZW1lbnQsIHBvcywgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodCkKKworICAgICAgdGhpcy5hcHBseVBsYWNlbWVudChjYWxjdWxhdGVkT2Zmc2V0LCBwbGFjZW1lbnQpCisKKyAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHByZXZIb3ZlclN0YXRlID0gdGhhdC5ob3ZlclN0YXRlCisgICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignc2hvd24uYnMuJyArIHRoYXQudHlwZSkKKyAgICAgICAgdGhhdC5ob3ZlclN0YXRlID0gbnVsbAorCisgICAgICAgIGlmIChwcmV2SG92ZXJTdGF0ZSA9PSAnb3V0JykgdGhhdC5sZWF2ZSh0aGF0KQorICAgICAgfQorCisgICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiR0aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/CisgICAgICAgICR0aXAKKyAgICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjb21wbGV0ZSkKKyAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6CisgICAgICAgIGNvbXBsZXRlKCkKKyAgICB9CisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudCA9IGZ1bmN0aW9uIChvZmZzZXQsIHBsYWNlbWVudCkgeworICAgIHZhciAkdGlwICAgPSB0aGlzLnRpcCgpCisgICAgdmFyIHdpZHRoICA9ICR0aXBbMF0ub2Zmc2V0V2lkdGgKKyAgICB2YXIgaGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHQKKworICAgIC8vIG1hbnVhbGx5IHJlYWQgbWFyZ2lucyBiZWNhdXNlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpbmNsdWRlcyBkaWZmZXJlbmNlCisgICAgdmFyIG1hcmdpblRvcCA9IHBhcnNlSW50KCR0aXAuY3NzKCdtYXJnaW4tdG9wJyksIDEwKQorICAgIHZhciBtYXJnaW5MZWZ0ID0gcGFyc2VJbnQoJHRpcC5jc3MoJ21hcmdpbi1sZWZ0JyksIDEwKQorCisgICAgLy8gd2UgbXVzdCBjaGVjayBmb3IgTmFOIGZvciBpZSA4LzkKKyAgICBpZiAoaXNOYU4obWFyZ2luVG9wKSkgIG1hcmdpblRvcCAgPSAwCisgICAgaWYgKGlzTmFOKG1hcmdpbkxlZnQpKSBtYXJnaW5MZWZ0ID0gMAorCisgICAgb2Zmc2V0LnRvcCAgKz0gbWFyZ2luVG9wCisgICAgb2Zmc2V0LmxlZnQgKz0gbWFyZ2luTGVmdAorCisgICAgLy8gJC5mbi5vZmZzZXQgZG9lc24ndCByb3VuZCBwaXhlbCB2YWx1ZXMKKyAgICAvLyBzbyB3ZSB1c2Ugc2V0T2Zmc2V0IGRpcmVjdGx5IHdpdGggb3VyIG93biBmdW5jdGlvbiBCLTAKKyAgICAkLm9mZnNldC5zZXRPZmZzZXQoJHRpcFswXSwgJC5leHRlbmQoeworICAgICAgdXNpbmc6IGZ1bmN0aW9uIChwcm9wcykgeworICAgICAgICAkdGlwLmNzcyh7CisgICAgICAgICAgdG9wOiBNYXRoLnJvdW5kKHByb3BzLnRvcCksCisgICAgICAgICAgbGVmdDogTWF0aC5yb3VuZChwcm9wcy5sZWZ0KQorICAgICAgICB9KQorICAgICAgfQorICAgIH0sIG9mZnNldCksIDApCisKKyAgICAkdGlwLmFkZENsYXNzKCdpbicpCisKKyAgICAvLyBjaGVjayB0byBzZWUgaWYgcGxhY2luZyB0aXAgaW4gbmV3IG9mZnNldCBjYXVzZWQgdGhlIHRpcCB0byByZXNpemUgaXRzZWxmCisgICAgdmFyIGFjdHVhbFdpZHRoICA9ICR0aXBbMF0ub2Zmc2V0V2lkdGgKKyAgICB2YXIgYWN0dWFsSGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHQKKworICAgIGlmIChwbGFjZW1lbnQgPT0gJ3RvcCcgJiYgYWN0dWFsSGVpZ2h0ICE9IGhlaWdodCkgeworICAgICAgb2Zmc2V0LnRvcCA9IG9mZnNldC50b3AgKyBoZWlnaHQgLSBhY3R1YWxIZWlnaHQKKyAgICB9CisKKyAgICB2YXIgZGVsdGEgPSB0aGlzLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YShwbGFjZW1lbnQsIG9mZnNldCwgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodCkKKworICAgIGlmIChkZWx0YS5sZWZ0KSBvZmZzZXQubGVmdCArPSBkZWx0YS5sZWZ0CisgICAgZWxzZSBvZmZzZXQudG9wICs9IGRlbHRhLnRvcAorCisgICAgdmFyIGlzVmVydGljYWwgICAgICAgICAgPSAvdG9wfGJvdHRvbS8udGVzdChwbGFjZW1lbnQpCisgICAgdmFyIGFycm93RGVsdGEgICAgICAgICAgPSBpc1ZlcnRpY2FsID8gZGVsdGEubGVmdCAqIDIgLSB3aWR0aCArIGFjdHVhbFdpZHRoIDogZGVsdGEudG9wICogMiAtIGhlaWdodCArIGFjdHVhbEhlaWdodAorICAgIHZhciBhcnJvd09mZnNldFBvc2l0aW9uID0gaXNWZXJ0aWNhbCA/ICdvZmZzZXRXaWR0aCcgOiAnb2Zmc2V0SGVpZ2h0JworCisgICAgJHRpcC5vZmZzZXQob2Zmc2V0KQorICAgIHRoaXMucmVwbGFjZUFycm93KGFycm93RGVsdGEsICR0aXBbMF1bYXJyb3dPZmZzZXRQb3NpdGlvbl0sIGlzVmVydGljYWwpCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5yZXBsYWNlQXJyb3cgPSBmdW5jdGlvbiAoZGVsdGEsIGRpbWVuc2lvbiwgaXNWZXJ0aWNhbCkgeworICAgIHRoaXMuYXJyb3coKQorICAgICAgLmNzcyhpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCcsIDUwICogKDEgLSBkZWx0YSAvIGRpbWVuc2lvbikgKyAnJScpCisgICAgICAuY3NzKGlzVmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JywgJycpCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5zZXRDb250ZW50ID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkdGlwICA9IHRoaXMudGlwKCkKKyAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKCkKKworICAgICR0aXAuZmluZCgnLnRvb2x0aXAtaW5uZXInKVt0aGlzLm9wdGlvbnMuaHRtbCA/ICdodG1sJyA6ICd0ZXh0J10odGl0bGUpCisgICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQnKQorICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgIHZhciB0aGF0ID0gdGhpcworICAgIHZhciAkdGlwID0gJCh0aGlzLiR0aXApCisgICAgdmFyIGUgICAgPSAkLkV2ZW50KCdoaWRlLmJzLicgKyB0aGlzLnR5cGUpCisKKyAgICBmdW5jdGlvbiBjb21wbGV0ZSgpIHsKKyAgICAgIGlmICh0aGF0LmhvdmVyU3RhdGUgIT0gJ2luJykgJHRpcC5kZXRhY2goKQorICAgICAgdGhhdC4kZWxlbWVudAorICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpCisgICAgICAgIC50cmlnZ2VyKCdoaWRkZW4uYnMuJyArIHRoYXQudHlwZSkKKyAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCkKKyAgICB9CisKKyAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKKworICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KKworICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2luJykKKworICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmICR0aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/CisgICAgICAkdGlwCisgICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGNvbXBsZXRlKQorICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6CisgICAgICBjb21wbGV0ZSgpCisKKyAgICB0aGlzLmhvdmVyU3RhdGUgPSBudWxsCisKKyAgICByZXR1cm4gdGhpcworICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuZml4VGl0bGUgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRlID0gdGhpcy4kZWxlbWVudAorICAgIGlmICgkZS5hdHRyKCd0aXRsZScpIHx8IHR5cGVvZiAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJykgIT0gJ3N0cmluZycpIHsKKyAgICAgICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnLCAkZS5hdHRyKCd0aXRsZScpIHx8ICcnKS5hdHRyKCd0aXRsZScsICcnKQorICAgIH0KKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLmhhc0NvbnRlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKQorICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoJGVsZW1lbnQpIHsKKyAgICAkZWxlbWVudCAgID0gJGVsZW1lbnQgfHwgdGhpcy4kZWxlbWVudAorCisgICAgdmFyIGVsICAgICA9ICRlbGVtZW50WzBdCisgICAgdmFyIGlzQm9keSA9IGVsLnRhZ05hbWUgPT0gJ0JPRFknCisKKyAgICB2YXIgZWxSZWN0ICAgID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkKKyAgICBpZiAoZWxSZWN0LndpZHRoID09IG51bGwpIHsKKyAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXJlIG1pc3NpbmcgaW4gSUU4LCBzbyBjb21wdXRlIHRoZW0gbWFudWFsbHk7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE0MDkzCisgICAgICBlbFJlY3QgPSAkLmV4dGVuZCh7fSwgZWxSZWN0LCB7IHdpZHRoOiBlbFJlY3QucmlnaHQgLSBlbFJlY3QubGVmdCwgaGVpZ2h0OiBlbFJlY3QuYm90dG9tIC0gZWxSZWN0LnRvcCB9KQorICAgIH0KKyAgICB2YXIgZWxPZmZzZXQgID0gaXNCb2R5ID8geyB0b3A6IDAsIGxlZnQ6IDAgfSA6ICRlbGVtZW50Lm9mZnNldCgpCisgICAgdmFyIHNjcm9sbCAgICA9IHsgc2Nyb2xsOiBpc0JvZHkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIDogJGVsZW1lbnQuc2Nyb2xsVG9wKCkgfQorICAgIHZhciBvdXRlckRpbXMgPSBpc0JvZHkgPyB7IHdpZHRoOiAkKHdpbmRvdykud2lkdGgoKSwgaGVpZ2h0OiAkKHdpbmRvdykuaGVpZ2h0KCkgfSA6IG51bGwKKworICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZWxSZWN0LCBzY3JvbGwsIG91dGVyRGltcywgZWxPZmZzZXQpCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5nZXRDYWxjdWxhdGVkT2Zmc2V0ID0gZnVuY3Rpb24gKHBsYWNlbWVudCwgcG9zLCBhY3R1YWxXaWR0aCwgYWN0dWFsSGVpZ2h0KSB7CisgICAgcmV0dXJuIHBsYWNlbWVudCA9PSAnYm90dG9tJyA/IHsgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCwgICBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDIgfSA6CisgICAgICAgICAgIHBsYWNlbWVudCA9PSAndG9wJyAgICA/IHsgdG9wOiBwb3MudG9wIC0gYWN0dWFsSGVpZ2h0LCBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDIgfSA6CisgICAgICAgICAgIHBsYWNlbWVudCA9PSAnbGVmdCcgICA/IHsgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCAvIDIgLSBhY3R1YWxIZWlnaHQgLyAyLCBsZWZ0OiBwb3MubGVmdCAtIGFjdHVhbFdpZHRoIH0gOgorICAgICAgICAvKiBwbGFjZW1lbnQgPT0gJ3JpZ2h0JyAqLyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggfQorCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEgPSBmdW5jdGlvbiAocGxhY2VtZW50LCBwb3MsIGFjdHVhbFdpZHRoLCBhY3R1YWxIZWlnaHQpIHsKKyAgICB2YXIgZGVsdGEgPSB7IHRvcDogMCwgbGVmdDogMCB9CisgICAgaWYgKCF0aGlzLiR2aWV3cG9ydCkgcmV0dXJuIGRlbHRhCisKKyAgICB2YXIgdmlld3BvcnRQYWRkaW5nID0gdGhpcy5vcHRpb25zLnZpZXdwb3J0ICYmIHRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nIHx8IDAKKyAgICB2YXIgdmlld3BvcnREaW1lbnNpb25zID0gdGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCkKKworICAgIGlmICgvcmlnaHR8bGVmdC8udGVzdChwbGFjZW1lbnQpKSB7CisgICAgICB2YXIgdG9wRWRnZU9mZnNldCAgICA9IHBvcy50b3AgLSB2aWV3cG9ydFBhZGRpbmcgLSB2aWV3cG9ydERpbWVuc2lvbnMuc2Nyb2xsCisgICAgICB2YXIgYm90dG9tRWRnZU9mZnNldCA9IHBvcy50b3AgKyB2aWV3cG9ydFBhZGRpbmcgLSB2aWV3cG9ydERpbWVuc2lvbnMuc2Nyb2xsICsgYWN0dWFsSGVpZ2h0CisgICAgICBpZiAodG9wRWRnZU9mZnNldCA8IHZpZXdwb3J0RGltZW5zaW9ucy50b3ApIHsgLy8gdG9wIG92ZXJmbG93CisgICAgICAgIGRlbHRhLnRvcCA9IHZpZXdwb3J0RGltZW5zaW9ucy50b3AgLSB0b3BFZGdlT2Zmc2V0CisgICAgICB9IGVsc2UgaWYgKGJvdHRvbUVkZ2VPZmZzZXQgPiB2aWV3cG9ydERpbWVuc2lvbnMudG9wICsgdmlld3BvcnREaW1lbnNpb25zLmhlaWdodCkgeyAvLyBib3R0b20gb3ZlcmZsb3cKKyAgICAgICAgZGVsdGEudG9wID0gdmlld3BvcnREaW1lbnNpb25zLnRvcCArIHZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQgLSBib3R0b21FZGdlT2Zmc2V0CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBsZWZ0RWRnZU9mZnNldCAgPSBwb3MubGVmdCAtIHZpZXdwb3J0UGFkZGluZworICAgICAgdmFyIHJpZ2h0RWRnZU9mZnNldCA9IHBvcy5sZWZ0ICsgdmlld3BvcnRQYWRkaW5nICsgYWN0dWFsV2lkdGgKKyAgICAgIGlmIChsZWZ0RWRnZU9mZnNldCA8IHZpZXdwb3J0RGltZW5zaW9ucy5sZWZ0KSB7IC8vIGxlZnQgb3ZlcmZsb3cKKyAgICAgICAgZGVsdGEubGVmdCA9IHZpZXdwb3J0RGltZW5zaW9ucy5sZWZ0IC0gbGVmdEVkZ2VPZmZzZXQKKyAgICAgIH0gZWxzZSBpZiAocmlnaHRFZGdlT2Zmc2V0ID4gdmlld3BvcnREaW1lbnNpb25zLnJpZ2h0KSB7IC8vIHJpZ2h0IG92ZXJmbG93CisgICAgICAgIGRlbHRhLmxlZnQgPSB2aWV3cG9ydERpbWVuc2lvbnMubGVmdCArIHZpZXdwb3J0RGltZW5zaW9ucy53aWR0aCAtIHJpZ2h0RWRnZU9mZnNldAorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkZWx0YQorICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0VGl0bGUgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHRpdGxlCisgICAgdmFyICRlID0gdGhpcy4kZWxlbWVudAorICAgIHZhciBvICA9IHRoaXMub3B0aW9ucworCisgICAgdGl0bGUgPSAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJykKKyAgICAgIHx8ICh0eXBlb2Ygby50aXRsZSA9PSAnZnVuY3Rpb24nID8gby50aXRsZS5jYWxsKCRlWzBdKSA6ICBvLnRpdGxlKQorCisgICAgcmV0dXJuIHRpdGxlCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5nZXRVSUQgPSBmdW5jdGlvbiAocHJlZml4KSB7CisgICAgZG8gcHJlZml4ICs9IH5+KE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKQorICAgIHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKQorICAgIHJldHVybiBwcmVmaXgKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLnRpcCA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuJHRpcCkgeworICAgICAgdGhpcy4kdGlwID0gJCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpCisgICAgICBpZiAodGhpcy4kdGlwLmxlbmd0aCAhPSAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUgKyAnIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhJykKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRoaXMuJHRpcAorICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuYXJyb3cgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICh0aGlzLiRhcnJvdyA9IHRoaXMuJGFycm93IHx8IHRoaXMudGlwKCkuZmluZCgnLnRvb2x0aXAtYXJyb3cnKSkKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmVuYWJsZWQgPSB0cnVlCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlCisgIH0KKworICBUb29sdGlwLnByb3RvdHlwZS50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuZW5hYmxlZCA9ICF0aGlzLmVuYWJsZWQKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzCisgICAgaWYgKGUpIHsKKyAgICAgIHNlbGYgPSAkKGUuY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSkKKyAgICAgIGlmICghc2VsZikgeworICAgICAgICBzZWxmID0gbmV3IHRoaXMuY29uc3RydWN0b3IoZS5jdXJyZW50VGFyZ2V0LCB0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKQorICAgICAgICAkKGUuY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSwgc2VsZikKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZSkgeworICAgICAgc2VsZi5pblN0YXRlLmNsaWNrID0gIXNlbGYuaW5TdGF0ZS5jbGljaworICAgICAgaWYgKHNlbGYuaXNJblN0YXRlVHJ1ZSgpKSBzZWxmLmVudGVyKHNlbGYpCisgICAgICBlbHNlIHNlbGYubGVhdmUoc2VsZikKKyAgICB9IGVsc2UgeworICAgICAgc2VsZi50aXAoKS5oYXNDbGFzcygnaW4nKSA/IHNlbGYubGVhdmUoc2VsZikgOiBzZWxmLmVudGVyKHNlbGYpCisgICAgfQorICB9CisKKyAgVG9vbHRpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KQorICAgIHRoaXMuaGlkZShmdW5jdGlvbiAoKSB7CisgICAgICB0aGF0LiRlbGVtZW50Lm9mZignLicgKyB0aGF0LnR5cGUpLnJlbW92ZURhdGEoJ2JzLicgKyB0aGF0LnR5cGUpCisgICAgICBpZiAodGhhdC4kdGlwKSB7CisgICAgICAgIHRoYXQuJHRpcC5kZXRhY2goKQorICAgICAgfQorICAgICAgdGhhdC4kdGlwID0gbnVsbAorICAgICAgdGhhdC4kYXJyb3cgPSBudWxsCisgICAgICB0aGF0LiR2aWV3cG9ydCA9IG51bGwKKyAgICB9KQorICB9CisKKworICAvLyBUT09MVElQIFBMVUdJTiBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgICA9ICQodGhpcykKKyAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMudG9vbHRpcCcpCisgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisKKyAgICAgIGlmICghZGF0YSAmJiAvZGVzdHJveXxoaWRlLy50ZXN0KG9wdGlvbikpIHJldHVybgorICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50b29sdGlwJywgKGRhdGEgPSBuZXcgVG9vbHRpcCh0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAgdmFyIG9sZCA9ICQuZm4udG9vbHRpcAorCisgICQuZm4udG9vbHRpcCAgICAgICAgICAgICA9IFBsdWdpbgorICAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IgPSBUb29sdGlwCisKKworICAvLyBUT09MVElQIE5PIENPTkZMSUNUCisgIC8vID09PT09PT09PT09PT09PT09PT0KKworICAkLmZuLnRvb2x0aXAubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLnRvb2x0aXAgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKK30oalF1ZXJ5KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBCb290c3RyYXA6IHBvcG92ZXIuanMgdjMuMy42CisgKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNwb3BvdmVycworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisrZnVuY3Rpb24gKCQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIFBPUE9WRVIgUFVCTElDIENMQVNTIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIHZhciBQb3BvdmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLmluaXQoJ3BvcG92ZXInLCBlbGVtZW50LCBvcHRpb25zKQorICB9CisKKyAgaWYgKCEkLmZuLnRvb2x0aXApIHRocm93IG5ldyBFcnJvcignUG9wb3ZlciByZXF1aXJlcyB0b29sdGlwLmpzJykKKworICBQb3BvdmVyLlZFUlNJT04gID0gJzMuMy42JworCisgIFBvcG92ZXIuREVGQVVMVFMgPSAkLmV4dGVuZCh7fSwgJC5mbi50b29sdGlwLkNvbnN0cnVjdG9yLkRFRkFVTFRTLCB7CisgICAgcGxhY2VtZW50OiAncmlnaHQnLAorICAgIHRyaWdnZXI6ICdjbGljaycsCisgICAgY29udGVudDogJycsCisgICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPSJwb3BvdmVyIiByb2xlPSJ0b29sdGlwIj48ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+PGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIj48L2gzPjxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCI+PC9kaXY+PC9kaXY+JworICB9KQorCisKKyAgLy8gTk9URTogUE9QT1ZFUiBFWFRFTkRTIHRvb2x0aXAuanMKKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBQb3BvdmVyLnByb3RvdHlwZSA9ICQuZXh0ZW5kKHt9LCAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKQorCisgIFBvcG92ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9wb3ZlcgorCisgIFBvcG92ZXIucHJvdG90eXBlLmdldERlZmF1bHRzID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBQb3BvdmVyLkRFRkFVTFRTCisgIH0KKworICBQb3BvdmVyLnByb3RvdHlwZS5zZXRDb250ZW50ID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkdGlwICAgID0gdGhpcy50aXAoKQorICAgIHZhciB0aXRsZSAgID0gdGhpcy5nZXRUaXRsZSgpCisgICAgdmFyIGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKQorCisgICAgJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpW3RoaXMub3B0aW9ucy5odG1sID8gJ2h0bWwnIDogJ3RleHQnXSh0aXRsZSkKKyAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLWNvbnRlbnQnKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpWyAvLyB3ZSB1c2UgYXBwZW5kIGZvciBodG1sIG9iamVjdHMgdG8gbWFpbnRhaW4ganMgZXZlbnRzCisgICAgICB0aGlzLm9wdGlvbnMuaHRtbCA/ICh0eXBlb2YgY29udGVudCA9PSAnc3RyaW5nJyA/ICdodG1sJyA6ICdhcHBlbmQnKSA6ICd0ZXh0JworICAgIF0oY29udGVudCkKKworICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2ZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluJykKKworICAgIC8vIElFOCBkb2Vzbid0IGFjY2VwdCBoaWRpbmcgdmlhIHRoZSBgOmVtcHR5YCBwc2V1ZG8gc2VsZWN0b3IsIHdlIGhhdmUgdG8gZG8KKyAgICAvLyB0aGlzIG1hbnVhbGx5IGJ5IGNoZWNraW5nIHRoZSBjb250ZW50cy4KKyAgICBpZiAoISR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5odG1sKCkpICR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5oaWRlKCkKKyAgfQorCisgIFBvcG92ZXIucHJvdG90eXBlLmhhc0NvbnRlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKSB8fCB0aGlzLmdldENvbnRlbnQoKQorICB9CisKKyAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50CisgICAgdmFyIG8gID0gdGhpcy5vcHRpb25zCisKKyAgICByZXR1cm4gJGUuYXR0cignZGF0YS1jb250ZW50JykKKyAgICAgIHx8ICh0eXBlb2Ygby5jb250ZW50ID09ICdmdW5jdGlvbicgPworICAgICAgICAgICAgby5jb250ZW50LmNhbGwoJGVbMF0pIDoKKyAgICAgICAgICAgIG8uY29udGVudCkKKyAgfQorCisgIFBvcG92ZXIucHJvdG90eXBlLmFycm93ID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiAodGhpcy4kYXJyb3cgPSB0aGlzLiRhcnJvdyB8fCB0aGlzLnRpcCgpLmZpbmQoJy5hcnJvdycpKQorICB9CisKKworICAvLyBQT1BPVkVSIFBMVUdJTiBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgICA9ICQodGhpcykKKyAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMucG9wb3ZlcicpCisgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisKKyAgICAgIGlmICghZGF0YSAmJiAvZGVzdHJveXxoaWRlLy50ZXN0KG9wdGlvbikpIHJldHVybgorICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5wb3BvdmVyJywgKGRhdGEgPSBuZXcgUG9wb3Zlcih0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAgdmFyIG9sZCA9ICQuZm4ucG9wb3ZlcgorCisgICQuZm4ucG9wb3ZlciAgICAgICAgICAgICA9IFBsdWdpbgorICAkLmZuLnBvcG92ZXIuQ29uc3RydWN0b3IgPSBQb3BvdmVyCisKKworICAvLyBQT1BPVkVSIE5PIENPTkZMSUNUCisgIC8vID09PT09PT09PT09PT09PT09PT0KKworICAkLmZuLnBvcG92ZXIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLnBvcG92ZXIgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKK30oalF1ZXJ5KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBCb290c3RyYXA6IHNjcm9sbHNweS5qcyB2My4zLjYKKyAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3Njcm9sbHNweQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisrZnVuY3Rpb24gKCQpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIC8vIFNDUk9MTFNQWSBDTEFTUyBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgZnVuY3Rpb24gU2Nyb2xsU3B5KGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLiRib2R5ICAgICAgICAgID0gJChkb2N1bWVudC5ib2R5KQorICAgIHRoaXMuJHNjcm9sbEVsZW1lbnQgPSAkKGVsZW1lbnQpLmlzKGRvY3VtZW50LmJvZHkpID8gJCh3aW5kb3cpIDogJChlbGVtZW50KQorICAgIHRoaXMub3B0aW9ucyAgICAgICAgPSAkLmV4dGVuZCh7fSwgU2Nyb2xsU3B5LkRFRkFVTFRTLCBvcHRpb25zKQorICAgIHRoaXMuc2VsZWN0b3IgICAgICAgPSAodGhpcy5vcHRpb25zLnRhcmdldCB8fCAnJykgKyAnIC5uYXYgbGkgPiBhJworICAgIHRoaXMub2Zmc2V0cyAgICAgICAgPSBbXQorICAgIHRoaXMudGFyZ2V0cyAgICAgICAgPSBbXQorICAgIHRoaXMuYWN0aXZlVGFyZ2V0ICAgPSBudWxsCisgICAgdGhpcy5zY3JvbGxIZWlnaHQgICA9IDAKKworICAgIHRoaXMuJHNjcm9sbEVsZW1lbnQub24oJ3Njcm9sbC5icy5zY3JvbGxzcHknLCAkLnByb3h5KHRoaXMucHJvY2VzcywgdGhpcykpCisgICAgdGhpcy5yZWZyZXNoKCkKKyAgICB0aGlzLnByb2Nlc3MoKQorICB9CisKKyAgU2Nyb2xsU3B5LlZFUlNJT04gID0gJzMuMy42JworCisgIFNjcm9sbFNweS5ERUZBVUxUUyA9IHsKKyAgICBvZmZzZXQ6IDEwCisgIH0KKworICBTY3JvbGxTcHkucHJvdG90eXBlLmdldFNjcm9sbEhlaWdodCA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHQgfHwgTWF0aC5tYXgodGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpCisgIH0KKworICBTY3JvbGxTcHkucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHRoYXQgICAgICAgICAgPSB0aGlzCisgICAgdmFyIG9mZnNldE1ldGhvZCAgPSAnb2Zmc2V0JworICAgIHZhciBvZmZzZXRCYXNlICAgID0gMAorCisgICAgdGhpcy5vZmZzZXRzICAgICAgPSBbXQorICAgIHRoaXMudGFyZ2V0cyAgICAgID0gW10KKyAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCkKKworICAgIGlmICghJC5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKSkgeworICAgICAgb2Zmc2V0TWV0aG9kID0gJ3Bvc2l0aW9uJworICAgICAgb2Zmc2V0QmFzZSAgID0gdGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKQorICAgIH0KKworICAgIHRoaXMuJGJvZHkKKyAgICAgIC5maW5kKHRoaXMuc2VsZWN0b3IpCisgICAgICAubWFwKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyICRlbCAgID0gJCh0aGlzKQorICAgICAgICB2YXIgaHJlZiAgPSAkZWwuZGF0YSgndGFyZ2V0JykgfHwgJGVsLmF0dHIoJ2hyZWYnKQorICAgICAgICB2YXIgJGhyZWYgPSAvXiMuLy50ZXN0KGhyZWYpICYmICQoaHJlZikKKworICAgICAgICByZXR1cm4gKCRocmVmCisgICAgICAgICAgJiYgJGhyZWYubGVuZ3RoCisgICAgICAgICAgJiYgJGhyZWYuaXMoJzp2aXNpYmxlJykKKyAgICAgICAgICAmJiBbWyRocmVmW29mZnNldE1ldGhvZF0oKS50b3AgKyBvZmZzZXRCYXNlLCBocmVmXV0pIHx8IG51bGwKKyAgICAgIH0pCisgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYVswXSAtIGJbMF0gfSkKKyAgICAgIC5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhhdC5vZmZzZXRzLnB1c2godGhpc1swXSkKKyAgICAgICAgdGhhdC50YXJnZXRzLnB1c2godGhpc1sxXSkKKyAgICAgIH0pCisgIH0KKworICBTY3JvbGxTcHkucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNjcm9sbFRvcCAgICA9IHRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkgKyB0aGlzLm9wdGlvbnMub2Zmc2V0CisgICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCkKKyAgICB2YXIgbWF4U2Nyb2xsICAgID0gdGhpcy5vcHRpb25zLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCkKKyAgICB2YXIgb2Zmc2V0cyAgICAgID0gdGhpcy5vZmZzZXRzCisgICAgdmFyIHRhcmdldHMgICAgICA9IHRoaXMudGFyZ2V0cworICAgIHZhciBhY3RpdmVUYXJnZXQgPSB0aGlzLmFjdGl2ZVRhcmdldAorICAgIHZhciBpCisKKyAgICBpZiAodGhpcy5zY3JvbGxIZWlnaHQgIT0gc2Nyb2xsSGVpZ2h0KSB7CisgICAgICB0aGlzLnJlZnJlc2goKQorICAgIH0KKworICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7CisgICAgICByZXR1cm4gYWN0aXZlVGFyZ2V0ICE9IChpID0gdGFyZ2V0c1t0YXJnZXRzLmxlbmd0aCAtIDFdKSAmJiB0aGlzLmFjdGl2YXRlKGkpCisgICAgfQorCisgICAgaWYgKGFjdGl2ZVRhcmdldCAmJiBzY3JvbGxUb3AgPCBvZmZzZXRzWzBdKSB7CisgICAgICB0aGlzLmFjdGl2ZVRhcmdldCA9IG51bGwKKyAgICAgIHJldHVybiB0aGlzLmNsZWFyKCkKKyAgICB9CisKKyAgICBmb3IgKGkgPSBvZmZzZXRzLmxlbmd0aDsgaS0tOykgeworICAgICAgYWN0aXZlVGFyZ2V0ICE9IHRhcmdldHNbaV0KKyAgICAgICAgJiYgc2Nyb2xsVG9wID49IG9mZnNldHNbaV0KKyAgICAgICAgJiYgKG9mZnNldHNbaSArIDFdID09PSB1bmRlZmluZWQgfHwgc2Nyb2xsVG9wIDwgb2Zmc2V0c1tpICsgMV0pCisgICAgICAgICYmIHRoaXMuYWN0aXZhdGUodGFyZ2V0c1tpXSkKKyAgICB9CisgIH0KKworICBTY3JvbGxTcHkucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKHRhcmdldCkgeworICAgIHRoaXMuYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0CisKKyAgICB0aGlzLmNsZWFyKCkKKworICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKworICAgICAgJ1tkYXRhLXRhcmdldD0iJyArIHRhcmdldCArICciXSwnICsKKyAgICAgIHRoaXMuc2VsZWN0b3IgKyAnW2hyZWY9IicgKyB0YXJnZXQgKyAnIl0nCisKKyAgICB2YXIgYWN0aXZlID0gJChzZWxlY3RvcikKKyAgICAgIC5wYXJlbnRzKCdsaScpCisgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpCisKKyAgICBpZiAoYWN0aXZlLnBhcmVudCgnLmRyb3Bkb3duLW1lbnUnKS5sZW5ndGgpIHsKKyAgICAgIGFjdGl2ZSA9IGFjdGl2ZQorICAgICAgICAuY2xvc2VzdCgnbGkuZHJvcGRvd24nKQorICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpCisgICAgfQorCisgICAgYWN0aXZlLnRyaWdnZXIoJ2FjdGl2YXRlLmJzLnNjcm9sbHNweScpCisgIH0KKworICBTY3JvbGxTcHkucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkgeworICAgICQodGhpcy5zZWxlY3RvcikKKyAgICAgIC5wYXJlbnRzVW50aWwodGhpcy5vcHRpb25zLnRhcmdldCwgJy5hY3RpdmUnKQorICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQorICB9CisKKworICAvLyBTQ1JPTExTUFkgUExVR0lOIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpCisgICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnNjcm9sbHNweScpCisgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisKKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuc2Nyb2xsc3B5JywgKGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIG9wdGlvbnMpKSkKKyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKQorICAgIH0pCisgIH0KKworICB2YXIgb2xkID0gJC5mbi5zY3JvbGxzcHkKKworICAkLmZuLnNjcm9sbHNweSAgICAgICAgICAgICA9IFBsdWdpbgorICAkLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweQorCisKKyAgLy8gU0NST0xMU1BZIE5PIENPTkZMSUNUCisgIC8vID09PT09PT09PT09PT09PT09PT09PQorCisgICQuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi5zY3JvbGxzcHkgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKKworICAvLyBTQ1JPTExTUFkgREFUQS1BUEkKKyAgLy8gPT09PT09PT09PT09PT09PT09CisKKyAgJCh3aW5kb3cpLm9uKCdsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaScsIGZ1bmN0aW9uICgpIHsKKyAgICAkKCdbZGF0YS1zcHk9InNjcm9sbCJdJykuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHNweSA9ICQodGhpcykKKyAgICAgIFBsdWdpbi5jYWxsKCRzcHksICRzcHkuZGF0YSgpKQorICAgIH0pCisgIH0pCisKK30oalF1ZXJ5KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBCb290c3RyYXA6IHRhYi5qcyB2My4zLjYKKyAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3RhYnMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworK2Z1bmN0aW9uICgkKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvLyBUQUIgQ0xBU1MgREVGSU5JVElPTgorICAvLyA9PT09PT09PT09PT09PT09PT09PQorCisgIHZhciBUYWIgPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgIC8vIGpzY3M6ZGlzYWJsZSByZXF1aXJlRG9sbGFyQmVmb3JlalF1ZXJ5QXNzaWdubWVudAorICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCkKKyAgICAvLyBqc2NzOmVuYWJsZSByZXF1aXJlRG9sbGFyQmVmb3JlalF1ZXJ5QXNzaWdubWVudAorICB9CisKKyAgVGFiLlZFUlNJT04gPSAnMy4zLjYnCisKKyAgVGFiLlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTAKKworICBUYWIucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICR0aGlzICAgID0gdGhpcy5lbGVtZW50CisgICAgdmFyICR1bCAgICAgID0gJHRoaXMuY2xvc2VzdCgndWw6bm90KC5kcm9wZG93bi1tZW51KScpCisgICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuZGF0YSgndGFyZ2V0JykKKworICAgIGlmICghc2VsZWN0b3IpIHsKKyAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpCisgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yICYmIHNlbGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywgJycpIC8vIHN0cmlwIGZvciBpZTcKKyAgICB9CisKKyAgICBpZiAoJHRoaXMucGFyZW50KCdsaScpLmhhc0NsYXNzKCdhY3RpdmUnKSkgcmV0dXJuCisKKyAgICB2YXIgJHByZXZpb3VzID0gJHVsLmZpbmQoJy5hY3RpdmU6bGFzdCBhJykKKyAgICB2YXIgaGlkZUV2ZW50ID0gJC5FdmVudCgnaGlkZS5icy50YWInLCB7CisgICAgICByZWxhdGVkVGFyZ2V0OiAkdGhpc1swXQorICAgIH0pCisgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoJ3Nob3cuYnMudGFiJywgeworICAgICAgcmVsYXRlZFRhcmdldDogJHByZXZpb3VzWzBdCisgICAgfSkKKworICAgICRwcmV2aW91cy50cmlnZ2VyKGhpZGVFdmVudCkKKyAgICAkdGhpcy50cmlnZ2VyKHNob3dFdmVudCkKKworICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KKworICAgIHZhciAkdGFyZ2V0ID0gJChzZWxlY3RvcikKKworICAgIHRoaXMuYWN0aXZhdGUoJHRoaXMuY2xvc2VzdCgnbGknKSwgJHVsKQorICAgIHRoaXMuYWN0aXZhdGUoJHRhcmdldCwgJHRhcmdldC5wYXJlbnQoKSwgZnVuY3Rpb24gKCkgeworICAgICAgJHByZXZpb3VzLnRyaWdnZXIoeworICAgICAgICB0eXBlOiAnaGlkZGVuLmJzLnRhYicsCisgICAgICAgIHJlbGF0ZWRUYXJnZXQ6ICR0aGlzWzBdCisgICAgICB9KQorICAgICAgJHRoaXMudHJpZ2dlcih7CisgICAgICAgIHR5cGU6ICdzaG93bi5icy50YWInLAorICAgICAgICByZWxhdGVkVGFyZ2V0OiAkcHJldmlvdXNbMF0KKyAgICAgIH0pCisgICAgfSkKKyAgfQorCisgIFRhYi5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykgeworICAgIHZhciAkYWN0aXZlICAgID0gY29udGFpbmVyLmZpbmQoJz4gLmFjdGl2ZScpCisgICAgdmFyIHRyYW5zaXRpb24gPSBjYWxsYmFjaworICAgICAgJiYgJC5zdXBwb3J0LnRyYW5zaXRpb24KKyAgICAgICYmICgkYWN0aXZlLmxlbmd0aCAmJiAkYWN0aXZlLmhhc0NsYXNzKCdmYWRlJykgfHwgISFjb250YWluZXIuZmluZCgnPiAuZmFkZScpLmxlbmd0aCkKKworICAgIGZ1bmN0aW9uIG5leHQoKSB7CisgICAgICAkYWN0aXZlCisgICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJykKKyAgICAgICAgLmZpbmQoJz4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlJykKKyAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCisgICAgICAgIC5lbmQoKQorICAgICAgICAuZmluZCgnW2RhdGEtdG9nZ2xlPSJ0YWIiXScpCisgICAgICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSkKKworICAgICAgZWxlbWVudAorICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpCisgICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykKKyAgICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpCisKKyAgICAgIGlmICh0cmFuc2l0aW9uKSB7CisgICAgICAgIGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGggLy8gcmVmbG93IGZvciB0cmFuc2l0aW9uCisgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2luJykKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2ZhZGUnKQorICAgICAgfQorCisgICAgICBpZiAoZWxlbWVudC5wYXJlbnQoJy5kcm9wZG93bi1tZW51JykubGVuZ3RoKSB7CisgICAgICAgIGVsZW1lbnQKKyAgICAgICAgICAuY2xvc2VzdCgnbGkuZHJvcGRvd24nKQorICAgICAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKQorICAgICAgICAgIC5lbmQoKQorICAgICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykKKyAgICAgICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSkKKyAgICAgIH0KKworICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKQorICAgIH0KKworICAgICRhY3RpdmUubGVuZ3RoICYmIHRyYW5zaXRpb24gPworICAgICAgJGFjdGl2ZQorICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBuZXh0KQorICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVGFiLlRSQU5TSVRJT05fRFVSQVRJT04pIDoKKyAgICAgIG5leHQoKQorCisgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnaW4nKQorICB9CisKKworICAvLyBUQUIgUExVR0lOIERFRklOSVRJT04KKyAgLy8gPT09PT09PT09PT09PT09PT09PT09CisKKyAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMudGFiJykKKworICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50YWInLCAoZGF0YSA9IG5ldyBUYWIodGhpcykpKQorICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkKKyAgfQorCisgIHZhciBvbGQgPSAkLmZuLnRhYgorCisgICQuZm4udGFiICAgICAgICAgICAgID0gUGx1Z2luCisgICQuZm4udGFiLkNvbnN0cnVjdG9yID0gVGFiCisKKworICAvLyBUQUIgTk8gQ09ORkxJQ1QKKyAgLy8gPT09PT09PT09PT09PT09CisKKyAgJC5mbi50YWIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLnRhYiA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgIC8vIFRBQiBEQVRBLUFQSQorICAvLyA9PT09PT09PT09PT0KKworICB2YXIgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHsKKyAgICBlLnByZXZlbnREZWZhdWx0KCkKKyAgICBQbHVnaW4uY2FsbCgkKHRoaXMpLCAnc2hvdycpCisgIH0KKworICAkKGRvY3VtZW50KQorICAgIC5vbignY2xpY2suYnMudGFiLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT0idGFiIl0nLCBjbGlja0hhbmRsZXIpCisgICAgLm9uKCdjbGljay5icy50YWIuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPSJwaWxsIl0nLCBjbGlja0hhbmRsZXIpCisKK30oalF1ZXJ5KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBCb290c3RyYXA6IGFmZml4LmpzIHYzLjMuNgorICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jYWZmaXgKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworK2Z1bmN0aW9uICgkKSB7CisgICd1c2Ugc3RyaWN0JzsKKworICAvLyBBRkZJWCBDTEFTUyBERUZJTklUSU9OCisgIC8vID09PT09PT09PT09PT09PT09PT09PT0KKworICB2YXIgQWZmaXggPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykgeworICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBBZmZpeC5ERUZBVUxUUywgb3B0aW9ucykKKworICAgIHRoaXMuJHRhcmdldCA9ICQodGhpcy5vcHRpb25zLnRhcmdldCkKKyAgICAgIC5vbignc2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpJywgJC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sIHRoaXMpKQorICAgICAgLm9uKCdjbGljay5icy5hZmZpeC5kYXRhLWFwaScsICAkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsIHRoaXMpKQorCisgICAgdGhpcy4kZWxlbWVudCAgICAgPSAkKGVsZW1lbnQpCisgICAgdGhpcy5hZmZpeGVkICAgICAgPSBudWxsCisgICAgdGhpcy51bnBpbiAgICAgICAgPSBudWxsCisgICAgdGhpcy5waW5uZWRPZmZzZXQgPSBudWxsCisKKyAgICB0aGlzLmNoZWNrUG9zaXRpb24oKQorICB9CisKKyAgQWZmaXguVkVSU0lPTiAgPSAnMy4zLjYnCisKKyAgQWZmaXguUkVTRVQgICAgPSAnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbScKKworICBBZmZpeC5ERUZBVUxUUyA9IHsKKyAgICBvZmZzZXQ6IDAsCisgICAgdGFyZ2V0OiB3aW5kb3cKKyAgfQorCisgIEFmZml4LnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uIChzY3JvbGxIZWlnaHQsIGhlaWdodCwgb2Zmc2V0VG9wLCBvZmZzZXRCb3R0b20pIHsKKyAgICB2YXIgc2Nyb2xsVG9wICAgID0gdGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpCisgICAgdmFyIHBvc2l0aW9uICAgICA9IHRoaXMuJGVsZW1lbnQub2Zmc2V0KCkKKyAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gdGhpcy4kdGFyZ2V0LmhlaWdodCgpCisKKyAgICBpZiAob2Zmc2V0VG9wICE9IG51bGwgJiYgdGhpcy5hZmZpeGVkID09ICd0b3AnKSByZXR1cm4gc2Nyb2xsVG9wIDwgb2Zmc2V0VG9wID8gJ3RvcCcgOiBmYWxzZQorCisgICAgaWYgKHRoaXMuYWZmaXhlZCA9PSAnYm90dG9tJykgeworICAgICAgaWYgKG9mZnNldFRvcCAhPSBudWxsKSByZXR1cm4gKHNjcm9sbFRvcCArIHRoaXMudW5waW4gPD0gcG9zaXRpb24udG9wKSA/IGZhbHNlIDogJ2JvdHRvbScKKyAgICAgIHJldHVybiAoc2Nyb2xsVG9wICsgdGFyZ2V0SGVpZ2h0IDw9IHNjcm9sbEhlaWdodCAtIG9mZnNldEJvdHRvbSkgPyBmYWxzZSA6ICdib3R0b20nCisgICAgfQorCisgICAgdmFyIGluaXRpYWxpemluZyAgID0gdGhpcy5hZmZpeGVkID09IG51bGwKKyAgICB2YXIgY29sbGlkZXJUb3AgICAgPSBpbml0aWFsaXppbmcgPyBzY3JvbGxUb3AgOiBwb3NpdGlvbi50b3AKKyAgICB2YXIgY29sbGlkZXJIZWlnaHQgPSBpbml0aWFsaXppbmcgPyB0YXJnZXRIZWlnaHQgOiBoZWlnaHQKKworICAgIGlmIChvZmZzZXRUb3AgIT0gbnVsbCAmJiBzY3JvbGxUb3AgPD0gb2Zmc2V0VG9wKSByZXR1cm4gJ3RvcCcKKyAgICBpZiAob2Zmc2V0Qm90dG9tICE9IG51bGwgJiYgKGNvbGxpZGVyVG9wICsgY29sbGlkZXJIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gb2Zmc2V0Qm90dG9tKSkgcmV0dXJuICdib3R0b20nCisKKyAgICByZXR1cm4gZmFsc2UKKyAgfQorCisgIEFmZml4LnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMucGlubmVkT2Zmc2V0KSByZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQKKyAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKEFmZml4LlJFU0VUKS5hZGRDbGFzcygnYWZmaXgnKQorICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCkKKyAgICB2YXIgcG9zaXRpb24gID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKQorICAgIHJldHVybiAodGhpcy5waW5uZWRPZmZzZXQgPSBwb3NpdGlvbi50b3AgLSBzY3JvbGxUb3ApCisgIH0KKworICBBZmZpeC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AgPSBmdW5jdGlvbiAoKSB7CisgICAgc2V0VGltZW91dCgkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbiwgdGhpcyksIDEpCisgIH0KKworICBBZmZpeC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaXMoJzp2aXNpYmxlJykpIHJldHVybgorCisgICAgdmFyIGhlaWdodCAgICAgICA9IHRoaXMuJGVsZW1lbnQuaGVpZ2h0KCkKKyAgICB2YXIgb2Zmc2V0ICAgICAgID0gdGhpcy5vcHRpb25zLm9mZnNldAorICAgIHZhciBvZmZzZXRUb3AgICAgPSBvZmZzZXQudG9wCisgICAgdmFyIG9mZnNldEJvdHRvbSA9IG9mZnNldC5ib3R0b20KKyAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgoJChkb2N1bWVudCkuaGVpZ2h0KCksICQoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpCisKKyAgICBpZiAodHlwZW9mIG9mZnNldCAhPSAnb2JqZWN0JykgICAgICAgICBvZmZzZXRCb3R0b20gPSBvZmZzZXRUb3AgPSBvZmZzZXQKKyAgICBpZiAodHlwZW9mIG9mZnNldFRvcCA9PSAnZnVuY3Rpb24nKSAgICBvZmZzZXRUb3AgICAgPSBvZmZzZXQudG9wKHRoaXMuJGVsZW1lbnQpCisgICAgaWYgKHR5cGVvZiBvZmZzZXRCb3R0b20gPT0gJ2Z1bmN0aW9uJykgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0LmJvdHRvbSh0aGlzLiRlbGVtZW50KQorCisgICAgdmFyIGFmZml4ID0gdGhpcy5nZXRTdGF0ZShzY3JvbGxIZWlnaHQsIGhlaWdodCwgb2Zmc2V0VG9wLCBvZmZzZXRCb3R0b20pCisKKyAgICBpZiAodGhpcy5hZmZpeGVkICE9IGFmZml4KSB7CisgICAgICBpZiAodGhpcy51bnBpbiAhPSBudWxsKSB0aGlzLiRlbGVtZW50LmNzcygndG9wJywgJycpCisKKyAgICAgIHZhciBhZmZpeFR5cGUgPSAnYWZmaXgnICsgKGFmZml4ID8gJy0nICsgYWZmaXggOiAnJykKKyAgICAgIHZhciBlICAgICAgICAgPSAkLkV2ZW50KGFmZml4VHlwZSArICcuYnMuYWZmaXgnKQorCisgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKKworICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorCisgICAgICB0aGlzLmFmZml4ZWQgPSBhZmZpeAorICAgICAgdGhpcy51bnBpbiA9IGFmZml4ID09ICdib3R0b20nID8gdGhpcy5nZXRQaW5uZWRPZmZzZXQoKSA6IG51bGwKKworICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAucmVtb3ZlQ2xhc3MoQWZmaXguUkVTRVQpCisgICAgICAgIC5hZGRDbGFzcyhhZmZpeFR5cGUpCisgICAgICAgIC50cmlnZ2VyKGFmZml4VHlwZS5yZXBsYWNlKCdhZmZpeCcsICdhZmZpeGVkJykgKyAnLmJzLmFmZml4JykKKyAgICB9CisKKyAgICBpZiAoYWZmaXggPT0gJ2JvdHRvbScpIHsKKyAgICAgIHRoaXMuJGVsZW1lbnQub2Zmc2V0KHsKKyAgICAgICAgdG9wOiBzY3JvbGxIZWlnaHQgLSBoZWlnaHQgLSBvZmZzZXRCb3R0b20KKyAgICAgIH0pCisgICAgfQorICB9CisKKworICAvLyBBRkZJWCBQTFVHSU4gREVGSU5JVElPTgorICAvLyA9PT09PT09PT09PT09PT09PT09PT09PQorCisgIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKQorICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5hZmZpeCcpCisgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisKKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuYWZmaXgnLCAoZGF0YSA9IG5ldyBBZmZpeCh0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAgdmFyIG9sZCA9ICQuZm4uYWZmaXgKKworICAkLmZuLmFmZml4ICAgICAgICAgICAgID0gUGx1Z2luCisgICQuZm4uYWZmaXguQ29uc3RydWN0b3IgPSBBZmZpeAorCisKKyAgLy8gQUZGSVggTk8gQ09ORkxJQ1QKKyAgLy8gPT09PT09PT09PT09PT09PT0KKworICAkLmZuLmFmZml4Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi5hZmZpeCA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgIC8vIEFGRklYIERBVEEtQVBJCisgIC8vID09PT09PT09PT09PT09CisKKyAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkgeworICAgICQoJ1tkYXRhLXNweT0iYWZmaXgiXScpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICRzcHkgPSAkKHRoaXMpCisgICAgICB2YXIgZGF0YSA9ICRzcHkuZGF0YSgpCisKKyAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5vZmZzZXQgfHwge30KKworICAgICAgaWYgKGRhdGEub2Zmc2V0Qm90dG9tICE9IG51bGwpIGRhdGEub2Zmc2V0LmJvdHRvbSA9IGRhdGEub2Zmc2V0Qm90dG9tCisgICAgICBpZiAoZGF0YS5vZmZzZXRUb3AgICAgIT0gbnVsbCkgZGF0YS5vZmZzZXQudG9wICAgID0gZGF0YS5vZmZzZXRUb3AKKworICAgICAgUGx1Z2luLmNhbGwoJHNweSwgZGF0YSkKKyAgICB9KQorICB9KQorCit9KGpRdWVyeSk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9ib290c3RyYXAubWluLmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYm9vdHN0cmFwLm1pbi5qcwppbmRleCA4NDgyNThkLi5jNGE5MjQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9ib290c3RyYXAubWluLmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jvb3RzdHJhcC5taW4uanMKQEAgLTEsNiArMSw3IEBACiAvKiEKLSogQm9vdHN0cmFwLmpzIGJ5IEBmYXQgJiBAbWRvCi0qIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYy4KLSogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dAotKi8KLSFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZShmdW5jdGlvbigpe2Uuc3VwcG9ydC50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib290c3RyYXAiKSx0PXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifSxuO2ZvcihuIGluIHQpaWYoZS5zdHlsZVtuXSE9PXVuZGVmaW5lZClyZXR1cm4gdFtuXX0oKTtyZXR1cm4gZSYme2VuZDplfX0oKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxuPWZ1bmN0aW9uKG4pe2Uobikub24oImNsaWNrIix0LHRoaXMuY2xvc2UpfTtuLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBzKCl7aS50cmlnZ2VyKCJjbG9zZWQiKS5yZW1vdmUoKX12YXIgbj1lKHRoaXMpLHI9bi5hdHRyKCJkYXRhLXRhcmdldCIpLGk7cnx8KHI9bi5hdHRyKCJocmVmIikscj1yJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpLGk9ZShyKSx0JiZ0LnByZXZlbnREZWZhdWx0KCksaS5sZW5ndGh8fChpPW4uaGFzQ2xhc3MoImFsZXJ0Iik/bjpuLnBhcmVudCgpKSxpLnRyaWdnZXIodD1lLkV2ZW50KCJjbG9zZSIpKTtpZih0LmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtpLnJlbW92ZUNsYXNzKCJpbiIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZpLmhhc0NsYXNzKCJmYWRlIik/aS5vbihlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQscyk6cygpfTt2YXIgcj1lLmZuLmFsZXJ0O2UuZm4uYWxlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoImFsZXJ0Iik7aXx8ci5kYXRhKCJhbGVydCIsaT1uZXcgbih0aGlzKSksdHlwZW9mIHQ9PSJzdHJpbmciJiZpW3RdLmNhbGwocil9KX0sZS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1uLGUuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmFsZXJ0PXIsdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmFsZXJ0LmRhdGEtYXBpIix0LG4ucHJvdG90eXBlLmNsb3NlKX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLm9wdGlvbnM9ZS5leHRlbmQoe30sZS5mbi5idXR0b24uZGVmYXVsdHMsbil9O3QucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PSJkaXNhYmxlZCIsbj10aGlzLiRlbGVtZW50LHI9bi5kYXRhKCksaT1uLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIjtlKz0iVGV4dCIsci5yZXNldFRleHR8fG4uZGF0YSgicmVzZXRUZXh0IixuW2ldKCkpLG5baV0ocltlXXx8dGhpcy5vcHRpb25zW2VdKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT09ImxvYWRpbmdUZXh0Ij9uLmFkZENsYXNzKHQpLmF0dHIodCx0KTpuLnJlbW92ZUNsYXNzKHQpLnJlbW92ZUF0dHIodCl9LDApfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucy1yYWRpbyJdJyk7ZSYmZS5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgbj1lLmZuLmJ1dHRvbjtlLmZuLmJ1dHRvbj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiYnV0dG9uIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJidXR0b24iLGk9bmV3IHQodGhpcyxzKSksbj09InRvZ2dsZSI/aS50b2dnbGUoKTpuJiZpLnNldFN0YXRlKG4pfSl9LGUuZm4uYnV0dG9uLmRlZmF1bHRzPXtsb2FkaW5nVGV4dDoibG9hZGluZy4uLiJ9LGUuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPXQsZS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmJ1dHRvbj1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay5idXR0b24uZGF0YS1hcGkiLCJbZGF0YS10b2dnbGVePWJ1dHRvbl0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodC50YXJnZXQpO24uaGFzQ2xhc3MoImJ0biIpfHwobj1uLmNsb3Nlc3QoIi5idG4iKSksbi5idXR0b24oInRvZ2dsZSIpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCxuKXt0aGlzLiRlbGVtZW50PWUodCksdGhpcy4kaW5kaWNhdG9ycz10aGlzLiRlbGVtZW50LmZpbmQoIi5jYXJvdXNlbC1pbmRpY2F0b3JzIiksdGhpcy5vcHRpb25zPW4sdGhpcy5vcHRpb25zLnBhdXNlPT0iaG92ZXIiJiZ0aGlzLiRlbGVtZW50Lm9uKCJtb3VzZWVudGVyIixlLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3VzZWxlYXZlIixlLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTt0LnByb3RvdHlwZT17Y3ljbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHR8fCh0aGlzLnBhdXNlZD0hMSksdGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoZS5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSksdGhpc30sZ2V0QWN0aXZlSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksdGhpcy4kaXRlbXM9dGhpcy4kYWN0aXZlLnBhcmVudCgpLmNoaWxkcmVuKCksdGhpcy4kaXRlbXMuaW5kZXgodGhpcy4kYWN0aXZlKX0sdG86ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5nZXRBY3RpdmVJbmRleCgpLHI9dGhpcztpZih0PnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHx0PDApcmV0dXJuO3JldHVybiB0aGlzLnNsaWRpbmc/dGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7ci50byh0KX0pOm49PXQ/dGhpcy5wYXVzZSgpLmN5Y2xlKCk6dGhpcy5zbGlkZSh0Pm4/Im5leHQiOiJwcmV2IixlKHRoaXMuJGl0ZW1zW3RdKSl9LHBhdXNlOmZ1bmN0aW9uKHQpe3JldHVybiB0fHwodGhpcy5wYXVzZWQ9ITApLHRoaXMuJGVsZW1lbnQuZmluZCgiLm5leHQsIC5wcmV2IikubGVuZ3RoJiZlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQmJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLmludGVydmFsPW51bGwsdGhpc30sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGluZylyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGUoIm5leHQiKX0scHJldjpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGluZylyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGUoInByZXYiKX0sc2xpZGU6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGk9bnx8clt0XSgpLHM9dGhpcy5pbnRlcnZhbCxvPXQ9PSJuZXh0Ij8ibGVmdCI6InJpZ2h0Iix1PXQ9PSJuZXh0Ij8iZmlyc3QiOiJsYXN0IixhPXRoaXMsZjt0aGlzLnNsaWRpbmc9ITAscyYmdGhpcy5wYXVzZSgpLGk9aS5sZW5ndGg/aTp0aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtIilbdV0oKSxmPWUuRXZlbnQoInNsaWRlIix7cmVsYXRlZFRhcmdldDppWzBdLGRpcmVjdGlvbjpvfSk7aWYoaS5oYXNDbGFzcygiYWN0aXZlIikpcmV0dXJuO3RoaXMuJGluZGljYXRvcnMubGVuZ3RoJiYodGhpcy4kaW5kaWNhdG9ycy5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsZW1lbnQub25lKCJzbGlkIixmdW5jdGlvbigpe3ZhciB0PWUoYS4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW2EuZ2V0QWN0aXZlSW5kZXgoKV0pO3QmJnQuYWRkQ2xhc3MoImFjdGl2ZSIpfSkpO2lmKGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJzbGlkZSIpKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZik7aWYoZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47aS5hZGRDbGFzcyh0KSxpWzBdLm9mZnNldFdpZHRoLHIuYWRkQ2xhc3MobyksaS5hZGRDbGFzcyhvKSx0aGlzLiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtpLnJlbW92ZUNsYXNzKFt0LG9dLmpvaW4oIiAiKSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHIucmVtb3ZlQ2xhc3MoWyJhY3RpdmUiLG9dLmpvaW4oIiAiKSksYS5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLiRlbGVtZW50LnRyaWdnZXIoInNsaWQiKX0sMCl9KX1lbHNle3RoaXMuJGVsZW1lbnQudHJpZ2dlcihmKTtpZihmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtyLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxpLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzbGlkIil9cmV0dXJuIHMmJnRoaXMuY3ljbGUoKSx0aGlzfX07dmFyIG49ZS5mbi5jYXJvdXNlbDtlLmZuLmNhcm91c2VsPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJjYXJvdXNlbCIpLHM9ZS5leHRlbmQoe30sZS5mbi5jYXJvdXNlbC5kZWZhdWx0cyx0eXBlb2Ygbj09Im9iamVjdCImJm4pLG89dHlwZW9mIG49PSJzdHJpbmciP246cy5zbGlkZTtpfHxyLmRhdGEoImNhcm91c2VsIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ibnVtYmVyIj9pLnRvKG4pOm8/aVtvXSgpOnMuaW50ZXJ2YWwmJmkucGF1c2UoKS5jeWNsZSgpfSl9LGUuZm4uY2Fyb3VzZWwuZGVmYXVsdHM9e2ludGVydmFsOjVlMyxwYXVzZToiaG92ZXIifSxlLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yPXQsZS5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uY2Fyb3VzZWw9bix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0sIFtkYXRhLXNsaWRlLXRvXSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxyLGk9ZShuLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChyPW4uYXR0cigiaHJlZiIpKSYmci5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxzPWUuZXh0ZW5kKHt9LGkuZGF0YSgpLG4uZGF0YSgpKSxvO2kuY2Fyb3VzZWwocyksKG89bi5hdHRyKCJkYXRhLXNsaWRlLXRvIikpJiZpLmRhdGEoImNhcm91c2VsIikucGF1c2UoKS50byhvKS5jeWNsZSgpLHQucHJldmVudERlZmF1bHQoKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLmNvbGxhcHNlLmRlZmF1bHRzLG4pLHRoaXMub3B0aW9ucy5wYXJlbnQmJih0aGlzLiRwYXJlbnQ9ZSh0aGlzLm9wdGlvbnMucGFyZW50KSksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZGltZW5zaW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKTtyZXR1cm4gZT8id2lkdGgiOiJoZWlnaHQifSxzaG93OmZ1bmN0aW9uKCl7dmFyIHQsbixyLGk7aWYodGhpcy50cmFuc2l0aW9uaW5nfHx0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXJldHVybjt0PXRoaXMuZGltZW5zaW9uKCksbj1lLmNhbWVsQ2FzZShbInNjcm9sbCIsdF0uam9pbigiLSIpKSxyPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmZpbmQoIj4gLmFjY29yZGlvbi1ncm91cCA+IC5pbiIpO2lmKHImJnIubGVuZ3RoKXtpPXIuZGF0YSgiY29sbGFwc2UiKTtpZihpJiZpLnRyYW5zaXRpb25pbmcpcmV0dXJuO3IuY29sbGFwc2UoImhpZGUiKSxpfHxyLmRhdGEoImNvbGxhcHNlIixudWxsKX10aGlzLiRlbGVtZW50W3RdKDApLHRoaXMudHJhbnNpdGlvbigiYWRkQ2xhc3MiLGUuRXZlbnQoInNob3ciKSwic2hvd24iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudFt0XSh0aGlzLiRlbGVtZW50WzBdW25dKX0saGlkZTpmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMudHJhbnNpdGlvbmluZ3x8IXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpcmV0dXJuO3Q9dGhpcy5kaW1lbnNpb24oKSx0aGlzLnJlc2V0KHRoaXMuJGVsZW1lbnRbdF0oKSksdGhpcy50cmFuc2l0aW9uKCJyZW1vdmVDbGFzcyIsZS5FdmVudCgiaGlkZSIpLCJoaWRkZW4iKSx0aGlzLiRlbGVtZW50W3RdKDApfSxyZXNldDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRpbWVuc2lvbigpO3JldHVybiB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpW3RdKGV8fCJhdXRvIilbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kZWxlbWVudFtlIT09bnVsbD8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJjb2xsYXBzZSIpLHRoaXN9LHRyYW5zaXRpb246ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXMscz1mdW5jdGlvbigpe24udHlwZT09InNob3ciJiZpLnJlc2V0KCksaS50cmFuc2l0aW9uaW5nPTAsaS4kZWxlbWVudC50cmlnZ2VyKHIpfTt0aGlzLiRlbGVtZW50LnRyaWdnZXIobik7aWYobi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy50cmFuc2l0aW9uaW5nPTEsdGhpcy4kZWxlbWVudFt0XSgiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiY29sbGFwc2UiKT90aGlzLiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQscyk6cygpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX19O3ZhciBuPWUuZm4uY29sbGFwc2U7ZS5mbi5jb2xsYXBzZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiY29sbGFwc2UiKSxzPWUuZXh0ZW5kKHt9LGUuZm4uY29sbGFwc2UuZGVmYXVsdHMsci5kYXRhKCksdHlwZW9mIG49PSJvYmplY3QiJiZuKTtpfHxyLmRhdGEoImNvbGxhcHNlIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4uY29sbGFwc2UuZGVmYXVsdHM9e3RvZ2dsZTohMH0sZS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj10LGUuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmNvbGxhcHNlPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmNvbGxhcHNlLmRhdGEtYXBpIiwiW2RhdGEtdG9nZ2xlPWNvbGxhcHNlXSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxyLGk9bi5hdHRyKCJkYXRhLXRhcmdldCIpfHx0LnByZXZlbnREZWZhdWx0KCl8fChyPW4uYXR0cigiaHJlZiIpKSYmci5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpLHM9ZShpKS5kYXRhKCJjb2xsYXBzZSIpPyJ0b2dnbGUiOm4uZGF0YSgpO25bZShpKS5oYXNDbGFzcygiaW4iKT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJjb2xsYXBzZWQiKSxlKGkpLmNvbGxhcHNlKHMpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2UoIi5kcm9wZG93bi1iYWNrZHJvcCIpLnJlbW92ZSgpLGUodCkuZWFjaChmdW5jdGlvbigpe2koZSh0aGlzKSkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfWZ1bmN0aW9uIGkodCl7dmFyIG49dC5hdHRyKCJkYXRhLXRhcmdldCIpLHI7bnx8KG49dC5hdHRyKCJocmVmIiksbj1uJiYvIy8udGVzdChuKSYmbi5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSxyPW4mJmUobik7aWYoIXJ8fCFyLmxlbmd0aClyPXQucGFyZW50KCk7cmV0dXJuIHJ9dmFyIHQ9IltkYXRhLXRvZ2dsZT1kcm9wZG93bl0iLG49ZnVuY3Rpb24odCl7dmFyIG49ZSh0KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLHRoaXMudG9nZ2xlKTtlKCJodG1sIikub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIixmdW5jdGlvbigpe24ucGFyZW50KCkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfTtuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bix0b2dnbGU6ZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxzLG87aWYobi5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSlyZXR1cm47cmV0dXJuIHM9aShuKSxvPXMuaGFzQ2xhc3MoIm9wZW4iKSxyKCksb3x8KCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZlKCc8ZGl2IGNsYXNzPSJkcm9wZG93bi1iYWNrZHJvcCIvPicpLmluc2VydEJlZm9yZShlKHRoaXMpKS5vbigiY2xpY2siLHIpLHMudG9nZ2xlQ2xhc3MoIm9wZW4iKSksbi5mb2N1cygpLCExfSxrZXlkb3duOmZ1bmN0aW9uKG4pe3ZhciByLHMsbyx1LGEsZjtpZighLygzOHw0MHwyNykvLnRlc3Qobi5rZXlDb2RlKSlyZXR1cm47cj1lKHRoaXMpLG4ucHJldmVudERlZmF1bHQoKSxuLnN0b3BQcm9wYWdhdGlvbigpO2lmKHIuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpcmV0dXJuO3U9aShyKSxhPXUuaGFzQ2xhc3MoIm9wZW4iKTtpZighYXx8YSYmbi5rZXlDb2RlPT0yNylyZXR1cm4gbi53aGljaD09MjcmJnUuZmluZCh0KS5mb2N1cygpLHIuY2xpY2soKTtzPWUoIltyb2xlPW1lbnVdIGxpOm5vdCguZGl2aWRlcik6dmlzaWJsZSBhIix1KTtpZighcy5sZW5ndGgpcmV0dXJuO2Y9cy5pbmRleChzLmZpbHRlcigiOmZvY3VzIikpLG4ua2V5Q29kZT09MzgmJmY+MCYmZi0tLG4ua2V5Q29kZT09NDAmJmY8cy5sZW5ndGgtMSYmZisrLH5mfHwoZj0wKSxzLmVxKGYpLmZvY3VzKCl9fTt2YXIgcz1lLmZuLmRyb3Bkb3duO2UuZm4uZHJvcGRvd249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoImRyb3Bkb3duIik7aXx8ci5kYXRhKCJkcm9wZG93biIsaT1uZXcgbih0aGlzKSksdHlwZW9mIHQ9PSJzdHJpbmciJiZpW3RdLmNhbGwocil9KX0sZS5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rvcj1uLGUuZm4uZHJvcGRvd24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmRyb3Bkb3duPXMsdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIixyKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLCIuZHJvcGRvd24gZm9ybSIsZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdCxuLnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmRyb3Bkb3duLmRhdGEtYXBpIix0KyIsIFtyb2xlPW1lbnVdIixuLnByb3RvdHlwZS5rZXlkb3duKX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMub3B0aW9ucz1uLHRoaXMuJGVsZW1lbnQ9ZSh0KS5kZWxlZ2F0ZSgnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsImNsaWNrLmRpc21pc3MubW9kYWwiLGUucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1ib2R5IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlKX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5pc1Nob3duPyJoaWRlIjoic2hvdyJdKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49ZS5FdmVudCgic2hvdyIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihuKTtpZih0aGlzLmlzU2hvd258fG4uaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuaXNTaG93bj0hMCx0aGlzLmVzY2FwZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgbj1lLnN1cHBvcnQudHJhbnNpdGlvbiYmdC4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpO3QuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RofHx0LiRlbGVtZW50LmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLHQuJGVsZW1lbnQuc2hvdygpLG4mJnQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsdC4kZWxlbWVudC5hZGRDbGFzcygiaW4iKS5hdHRyKCJhcmlhLWhpZGRlbiIsITEpLHQuZW5mb3JjZUZvY3VzKCksbj90LiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXt0LiRlbGVtZW50LmZvY3VzKCkudHJpZ2dlcigic2hvd24iKX0pOnQuJGVsZW1lbnQuZm9jdXMoKS50cmlnZ2VyKCJzaG93biIpfSl9LGhpZGU6ZnVuY3Rpb24odCl7dCYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXRoaXM7dD1lLkV2ZW50KCJoaWRlIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKHQpO2lmKCF0aGlzLmlzU2hvd258fHQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuaXNTaG93bj0hMSx0aGlzLmVzY2FwZSgpLGUoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5tb2RhbCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImluIikuYXR0cigiYXJpYS1oaWRkZW4iLCEwKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuaGlkZVdpdGhUcmFuc2l0aW9uKCk6dGhpcy5oaWRlTW9kYWwoKX0sZW5mb3JjZUZvY3VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlKGRvY3VtZW50KS5vbigiZm9jdXNpbi5tb2RhbCIsZnVuY3Rpb24oZSl7dC4kZWxlbWVudFswXSE9PWUudGFyZ2V0JiYhdC4kZWxlbWVudC5oYXMoZS50YXJnZXQpLmxlbmd0aCYmdC4kZWxlbWVudC5mb2N1cygpfSl9LGVzY2FwZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbigia2V5dXAuZGlzbWlzcy5tb2RhbCIsZnVuY3Rpb24odCl7dC53aGljaD09MjcmJmUuaGlkZSgpfSk6dGhpcy5pc1Nob3dufHx0aGlzLiRlbGVtZW50Lm9mZigia2V5dXAuZGlzbWlzcy5tb2RhbCIpfSxoaWRlV2l0aFRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49c2V0VGltZW91dChmdW5jdGlvbigpe3QuJGVsZW1lbnQub2ZmKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdC5oaWRlTW9kYWwoKX0sNTAwKTt0aGlzLiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobiksdC5oaWRlTW9kYWwoKX0pfSxoaWRlTW9kYWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJGVsZW1lbnQuaGlkZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXtlLnJlbW92ZUJhY2tkcm9wKCksZS4kZWxlbWVudC50cmlnZ2VyKCJoaWRkZW4iKX0pfSxyZW1vdmVCYWNrZHJvcDpmdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxiYWNrZHJvcDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpPyJmYWRlIjoiIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGk9ZS5zdXBwb3J0LnRyYW5zaXRpb24mJnI7dGhpcy4kYmFja2Ryb3A9ZSgnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgJytyKyciIC8+JykuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksdGhpcy4kYmFja2Ryb3AuY2xpY2sodGhpcy5vcHRpb25zLmJhY2tkcm9wPT0ic3RhdGljIj9lLnByb3h5KHRoaXMuJGVsZW1lbnRbMF0uZm9jdXMsdGhpcy4kZWxlbWVudFswXSk6ZS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLGkmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpO2lmKCF0KXJldHVybjtpP3RoaXMuJGJhY2tkcm9wLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsdCk6dCgpfWVsc2UhdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcD8odGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoImluIiksZS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLHQpOnQoKSk6dCYmdCgpfX07dmFyIG49ZS5mbi5tb2RhbDtlLmZuLm1vZGFsPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJtb2RhbCIpLHM9ZS5leHRlbmQoe30sZS5mbi5tb2RhbC5kZWZhdWx0cyxyLmRhdGEoKSx0eXBlb2Ygbj09Im9iamVjdCImJm4pO2l8fHIuZGF0YSgibW9kYWwiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciP2lbbl0oKTpzLnNob3cmJmkuc2hvdygpfSl9LGUuZm4ubW9kYWwuZGVmYXVsdHM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6ITB9LGUuZm4ubW9kYWwuQ29uc3RydWN0b3I9dCxlLmZuLm1vZGFsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5tb2RhbD1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay5tb2RhbC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxyPW4uYXR0cigiaHJlZiIpLGk9ZShuLmF0dHIoImRhdGEtdGFyZ2V0Iil8fHImJnIucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSkscz1pLmRhdGEoIm1vZGFsIik/InRvZ2dsZSI6ZS5leHRlbmQoe3JlbW90ZTohLyMvLnRlc3QocikmJnJ9LGkuZGF0YSgpLG4uZGF0YSgpKTt0LnByZXZlbnREZWZhdWx0KCksaS5tb2RhbChzKS5vbmUoImhpZGUiLGZ1bmN0aW9uKCl7bi5mb2N1cygpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbihlLHQpe3RoaXMuaW5pdCgidG9vbHRpcCIsZSx0KX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsaW5pdDpmdW5jdGlvbih0LG4scil7dmFyIGkscyxvLHUsYTt0aGlzLnR5cGU9dCx0aGlzLiRlbGVtZW50PWUobiksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhyKSx0aGlzLmVuYWJsZWQ9ITAsbz10aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdCgiICIpO2ZvcihhPW8ubGVuZ3RoO2EtLTspdT1vW2FdLHU9PSJjbGljayI/dGhpcy4kZWxlbWVudC5vbigiY2xpY2suIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy50b2dnbGUsdGhpcykpOnUhPSJtYW51YWwiJiYoaT11PT0iaG92ZXIiPyJtb3VzZWVudGVyIjoiZm9jdXMiLHM9dT09ImhvdmVyIj8ibW91c2VsZWF2ZSI6ImJsdXIiLHRoaXMuJGVsZW1lbnQub24oaSsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixlLnByb3h5KHRoaXMuZW50ZXIsdGhpcykpLHRoaXMuJGVsZW1lbnQub24ocysiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixlLnByb3h5KHRoaXMubGVhdmUsdGhpcykpKTt0aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0b3I6IiJ9KTp0aGlzLmZpeFRpdGxlKCl9LGdldE9wdGlvbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5leHRlbmQoe30sZS5mblt0aGlzLnR5cGVdLmRlZmF1bHRzLHRoaXMuJGVsZW1lbnQuZGF0YSgpLHQpLHQuZGVsYXkmJnR5cGVvZiB0LmRlbGF5PT0ibnVtYmVyIiYmKHQuZGVsYXk9e3Nob3c6dC5kZWxheSxoaWRlOnQuZGVsYXl9KSx0fSxlbnRlcjpmdW5jdGlvbih0KXt2YXIgbj1lLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMscj17fSxpO3RoaXMuX29wdGlvbnMmJmUuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGUsdCl7bltlXSE9dCYmKHJbZV09dCl9LHRoaXMpLGk9ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0ocikuZGF0YSh0aGlzLnR5cGUpO2lmKCFpLm9wdGlvbnMuZGVsYXl8fCFpLm9wdGlvbnMuZGVsYXkuc2hvdylyZXR1cm4gaS5zaG93KCk7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksaS5ob3ZlclN0YXRlPSJpbiIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmhvdmVyU3RhdGU9PSJpbiImJmkuc2hvdygpfSxpLm9wdGlvbnMuZGVsYXkuc2hvdyl9LGxlYXZlOmZ1bmN0aW9uKHQpe3ZhciBuPWUodC5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRhdGEodGhpcy50eXBlKTt0aGlzLnRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO2lmKCFuLm9wdGlvbnMuZGVsYXl8fCFuLm9wdGlvbnMuZGVsYXkuaGlkZSlyZXR1cm4gbi5oaWRlKCk7bi5ob3ZlclN0YXRlPSJvdXQiLHRoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5ob3ZlclN0YXRlPT0ib3V0IiYmbi5oaWRlKCl9LG4ub3B0aW9ucy5kZWxheS5oaWRlKX0sc2hvdzpmdW5jdGlvbigpe3ZhciB0LG4scixpLHMsbyx1PWUuRXZlbnQoInNob3ciKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIodSk7aWYodS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dD10aGlzLnRpcCgpLHRoaXMuc2V0Q29udGVudCgpLHRoaXMub3B0aW9ucy5hbmltYXRpb24mJnQuYWRkQ2xhc3MoImZhZGUiKSxzPXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50PT0iZnVuY3Rpb24iP3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLHRbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCx0LmRldGFjaCgpLmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6ImJsb2NrIn0pLHRoaXMub3B0aW9ucy5jb250YWluZXI/dC5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTp0Lmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLG49dGhpcy5nZXRQb3NpdGlvbigpLHI9dFswXS5vZmZzZXRXaWR0aCxpPXRbMF0ub2Zmc2V0SGVpZ2h0O3N3aXRjaChzKXtjYXNlImJvdHRvbSI6bz17dG9wOm4udG9wK24uaGVpZ2h0LGxlZnQ6bi5sZWZ0K24ud2lkdGgvMi1yLzJ9O2JyZWFrO2Nhc2UidG9wIjpvPXt0b3A6bi50b3AtaSxsZWZ0Om4ubGVmdCtuLndpZHRoLzItci8yfTticmVhaztjYXNlImxlZnQiOm89e3RvcDpuLnRvcCtuLmhlaWdodC8yLWkvMixsZWZ0Om4ubGVmdC1yfTticmVhaztjYXNlInJpZ2h0IjpvPXt0b3A6bi50b3Arbi5oZWlnaHQvMi1pLzIsbGVmdDpuLmxlZnQrbi53aWR0aH19dGhpcy5hcHBseVBsYWNlbWVudChvLHMpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcigic2hvd24iKX19LGFwcGx5UGxhY2VtZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy50aXAoKSxyPW5bMF0ub2Zmc2V0V2lkdGgsaT1uWzBdLm9mZnNldEhlaWdodCxzLG8sdSxhO24ub2Zmc2V0KGUpLmFkZENsYXNzKHQpLmFkZENsYXNzKCJpbiIpLHM9blswXS5vZmZzZXRXaWR0aCxvPW5bMF0ub2Zmc2V0SGVpZ2h0LHQ9PSJ0b3AiJiZvIT1pJiYoZS50b3A9ZS50b3AraS1vLGE9ITApLHQ9PSJib3R0b20ifHx0PT0idG9wIj8odT0wLGUubGVmdDwwJiYodT1lLmxlZnQqLTIsZS5sZWZ0PTAsbi5vZmZzZXQoZSkscz1uWzBdLm9mZnNldFdpZHRoLG89blswXS5vZmZzZXRIZWlnaHQpLHRoaXMucmVwbGFjZUFycm93KHUtcitzLHMsImxlZnQiKSk6dGhpcy5yZXBsYWNlQXJyb3coby1pLG8sInRvcCIpLGEmJm4ub2Zmc2V0KGUpfSxyZXBsYWNlQXJyb3c6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuYXJyb3coKS5jc3MobixlPzUwKigxLWUvdCkrIiUiOiIiKX0sc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGlwKCksdD10aGlzLmdldFRpdGxlKCk7ZS5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKHQpLGUucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGhpZGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7dmFyIHQ9c2V0VGltZW91dChmdW5jdGlvbigpe24ub2ZmKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkuZGV0YWNoKCl9LDUwMCk7bi5vbmUoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHQpLG4uZGV0YWNoKCl9KX12YXIgdD10aGlzLG49dGhpcy50aXAoKSxyPWUuRXZlbnQoImhpZGUiKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIocik7aWYoci5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47cmV0dXJuIG4ucmVtb3ZlQ2xhc3MoImluIiksZS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcygiZmFkZSIpP2koKTpuLmRldGFjaCgpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcigiaGlkZGVuIiksdGhpc30sZml4VGl0bGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtZW50OyhlLmF0dHIoInRpdGxlIil8fHR5cGVvZiBlLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSE9InN0cmluZyIpJiZlLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiLGUuYXR0cigidGl0bGUiKXx8IiIpLmF0dHIoInRpdGxlIiwiIil9LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnRbMF07cmV0dXJuIGUuZXh0ZW5kKHt9LHR5cGVvZiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD09ImZ1bmN0aW9uIj90LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnt3aWR0aDp0Lm9mZnNldFdpZHRoLGhlaWdodDp0Lm9mZnNldEhlaWdodH0sdGhpcy4kZWxlbWVudC5vZmZzZXQoKSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLiRlbGVtZW50LG49dGhpcy5vcHRpb25zO3JldHVybiBlPXQuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwodHlwZW9mIG4udGl0bGU9PSJmdW5jdGlvbiI/bi50aXRsZS5jYWxsKHRbMF0pOm4udGl0bGUpLGV9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXA9dGhpcy4kdGlwfHxlKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSl9LGFycm93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi50b29sdGlwLWFycm93Iil9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudFswXS5wYXJlbnROb2RlfHwodGhpcy5oaWRlKCksdGhpcy4kZWxlbWVudD1udWxsLHRoaXMub3B0aW9ucz1udWxsKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSx0b2dnbGVFbmFibGVkOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LHRvZ2dsZTpmdW5jdGlvbih0KXt2YXIgbj10P2UodC5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRhdGEodGhpcy50eXBlKTp0aGlzO24udGlwKCkuaGFzQ2xhc3MoImluIik/bi5oaWRlKCk6bi5zaG93KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoIi4iK3RoaXMudHlwZSkucmVtb3ZlRGF0YSh0aGlzLnR5cGUpfX07dmFyIG49ZS5mbi50b29sdGlwO2UuZm4udG9vbHRpcD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgidG9vbHRpcCIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgidG9vbHRpcCIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnRvb2x0aXAuQ29uc3RydWN0b3I9dCxlLmZuLnRvb2x0aXAuZGVmYXVsdHM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITF9LGUuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udG9vbHRpcD1uLHRoaXN9fSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUsdCl7dGhpcy5pbml0KCJwb3BvdmVyIixlLHQpfTt0LnByb3RvdHlwZT1lLmV4dGVuZCh7fSxlLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp0LHNldENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRpcCgpLHQ9dGhpcy5nZXRUaXRsZSgpLG49dGhpcy5nZXRDb250ZW50KCk7ZS5maW5kKCIucG9wb3Zlci10aXRsZSIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKHQpLGUuZmluZCgiLnBvcG92ZXItY29udGVudCIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKG4pLGUucmVtb3ZlQ2xhc3MoImZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluIil9LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sZ2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy4kZWxlbWVudCxuPXRoaXMub3B0aW9ucztyZXR1cm4gZT0odHlwZW9mIG4uY29udGVudD09ImZ1bmN0aW9uIj9uLmNvbnRlbnQuY2FsbCh0WzBdKTpuLmNvbnRlbnQpfHx0LmF0dHIoImRhdGEtY29udGVudCIpLGV9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXB8fCh0aGlzLiR0aXA9ZSh0aGlzLm9wdGlvbnMudGVtcGxhdGUpKSx0aGlzLiR0aXB9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoIi4iK3RoaXMudHlwZSkucmVtb3ZlRGF0YSh0aGlzLnR5cGUpfX0pO3ZhciBuPWUuZm4ucG9wb3ZlcjtlLmZuLnBvcG92ZXI9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoInBvcG92ZXIiKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoInBvcG92ZXIiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPXQsZS5mbi5wb3BvdmVyLmRlZmF1bHRzPWUuZXh0ZW5kKHt9LGUuZm4udG9vbHRpcC5kZWZhdWx0cyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksZS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5wb3BvdmVyPW4sdGhpc319KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpLGk9ZSh0KS5pcygiYm9keSIpP2Uod2luZG93KTplKHQpLHM7dGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzLG4pLHRoaXMuJHNjcm9sbEVsZW1lbnQ9aS5vbigic2Nyb2xsLnNjcm9sbC1zcHkuZGF0YS1hcGkiLHIpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fChzPWUodCkuYXR0cigiaHJlZiIpKSYmcy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpfHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy4kYm9keT1lKCJib2R5IiksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQscmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbjt0aGlzLm9mZnNldHM9ZShbXSksdGhpcy50YXJnZXRzPWUoW10pLG49dGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciBuPWUodGhpcykscj1uLmRhdGEoInRhcmdldCIpfHxuLmF0dHIoImhyZWYiKSxpPS9eI1x3Ly50ZXN0KHIpJiZlKHIpO3JldHVybiBpJiZpLmxlbmd0aCYmW1tpLnBvc2l0aW9uKCkudG9wKyghZS5pc1dpbmRvdyh0LiRzY3JvbGxFbGVtZW50LmdldCgwKSkmJnQuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHJdXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVswXS10WzBdfSkuZWFjaChmdW5jdGlvbigpe3Qub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLHQudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LHByb2Nlc3M6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpK3RoaXMub3B0aW9ucy5vZmZzZXQsdD10aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8dGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsbj10LXRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCkscj10aGlzLm9mZnNldHMsaT10aGlzLnRhcmdldHMscz10aGlzLmFjdGl2ZVRhcmdldCxvO2lmKGU+PW4pcmV0dXJuIHMhPShvPWkubGFzdCgpWzBdKSYmdGhpcy5hY3RpdmF0ZShvKTtmb3Iobz1yLmxlbmd0aDtvLS07KXMhPWlbb10mJmU+PXJbb10mJighcltvKzFdfHxlPD1yW28rMV0pJiZ0aGlzLmFjdGl2YXRlKGlbb10pfSxhY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbixyO3RoaXMuYWN0aXZlVGFyZ2V0PXQsZSh0aGlzLnNlbGVjdG9yKS5wYXJlbnQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIikscj10aGlzLnNlbGVjdG9yKydbZGF0YS10YXJnZXQ9IicrdCsnIl0sJyt0aGlzLnNlbGVjdG9yKydbaHJlZj0iJyt0KyciXScsbj1lKHIpLnBhcmVudCgibGkiKS5hZGRDbGFzcygiYWN0aXZlIiksbi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYobj1uLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSxuLnRyaWdnZXIoImFjdGl2YXRlIil9fTt2YXIgbj1lLmZuLnNjcm9sbHNweTtlLmZuLnNjcm9sbHNweT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgic2Nyb2xsc3B5Iikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJzY3JvbGxzcHkiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3I9dCxlLmZuLnNjcm9sbHNweS5kZWZhdWx0cz17b2Zmc2V0OjEwfSxlLmZuLnNjcm9sbHNweS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uc2Nyb2xsc3B5PW4sdGhpc30sZSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2UoJ1tkYXRhLXNweT0ic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LnNjcm9sbHNweSh0LmRhdGEoKSl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQpe3RoaXMuZWxlbWVudD1lKHQpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxzaG93OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LG49dC5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIikscj10LmF0dHIoImRhdGEtdGFyZ2V0IiksaSxzLG87cnx8KHI9dC5hdHRyKCJocmVmIikscj1yJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO2lmKHQucGFyZW50KCJsaSIpLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm47aT1uLmZpbmQoIi5hY3RpdmU6bGFzdCBhIilbMF0sbz1lLkV2ZW50KCJzaG93Iix7cmVsYXRlZFRhcmdldDppfSksdC50cmlnZ2VyKG8pO2lmKG8uaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3M9ZShyKSx0aGlzLmFjdGl2YXRlKHQucGFyZW50KCJsaSIpLG4pLHRoaXMuYWN0aXZhdGUocyxzLnBhcmVudCgpLGZ1bmN0aW9uKCl7dC50cmlnZ2VyKHt0eXBlOiJzaG93biIscmVsYXRlZFRhcmdldDppfSl9KX0sYWN0aXZhdGU6ZnVuY3Rpb24odCxuLHIpe2Z1bmN0aW9uIG8oKXtpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSx0LmFkZENsYXNzKCJhY3RpdmUiKSxzPyh0WzBdLm9mZnNldFdpZHRoLHQuYWRkQ2xhc3MoImluIikpOnQucmVtb3ZlQ2xhc3MoImZhZGUiKSx0LnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKSYmdC5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKSxyJiZyKCl9dmFyIGk9bi5maW5kKCI+IC5hY3RpdmUiKSxzPXImJmUuc3VwcG9ydC50cmFuc2l0aW9uJiZpLmhhc0NsYXNzKCJmYWRlIik7cz9pLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsbyk6bygpLGkucmVtb3ZlQ2xhc3MoImluIil9fTt2YXIgbj1lLmZuLnRhYjtlLmZuLnRhYj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgidGFiIik7aXx8ci5kYXRhKCJ0YWIiLGk9bmV3IHQodGhpcykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4udGFiLkNvbnN0cnVjdG9yPXQsZS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnRhYj1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay50YWIuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwiXScsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUodGhpcykudGFiKCJzaG93Iil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLm9wdGlvbnM9ZS5leHRlbmQoe30sZS5mbi50eXBlYWhlYWQuZGVmYXVsdHMsbiksdGhpcy5tYXRjaGVyPXRoaXMub3B0aW9ucy5tYXRjaGVyfHx0aGlzLm1hdGNoZXIsdGhpcy5zb3J0ZXI9dGhpcy5vcHRpb25zLnNvcnRlcnx8dGhpcy5zb3J0ZXIsdGhpcy5oaWdobGlnaHRlcj10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZXJ8fHRoaXMuaGlnaGxpZ2h0ZXIsdGhpcy51cGRhdGVyPXRoaXMub3B0aW9ucy51cGRhdGVyfHx0aGlzLnVwZGF0ZXIsdGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLiRtZW51PWUodGhpcy5vcHRpb25zLm1lbnUpLHRoaXMuc2hvd249ITEsdGhpcy5saXN0ZW4oKX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsc2VsZWN0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikuYXR0cigiZGF0YS12YWx1ZSIpO3JldHVybiB0aGlzLiRlbGVtZW50LnZhbCh0aGlzLnVwZGF0ZXIoZSkpLmNoYW5nZSgpLHRoaXMuaGlkZSgpfSx1cGRhdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzaG93OmZ1bmN0aW9uKCl7dmFyIHQ9ZS5leHRlbmQoe30sdGhpcy4kZWxlbWVudC5wb3NpdGlvbigpLHtoZWlnaHQ6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KTtyZXR1cm4gdGhpcy4kbWVudS5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KS5jc3Moe3RvcDp0LnRvcCt0LmhlaWdodCxsZWZ0OnQubGVmdH0pLnNob3coKSx0aGlzLnNob3duPSEwLHRoaXN9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbWVudS5oaWRlKCksdGhpcy5zaG93bj0hMSx0aGlzfSxsb29rdXA6ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMucXVlcnk9dGhpcy4kZWxlbWVudC52YWwoKSwhdGhpcy5xdWVyeXx8dGhpcy5xdWVyeS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aD90aGlzLnNob3duP3RoaXMuaGlkZSgpOnRoaXM6KG49ZS5pc0Z1bmN0aW9uKHRoaXMuc291cmNlKT90aGlzLnNvdXJjZSh0aGlzLnF1ZXJ5LGUucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKTp0aGlzLnNvdXJjZSxuP3RoaXMucHJvY2VzcyhuKTp0aGlzKX0scHJvY2VzczpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiB0PWUuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hdGNoZXIoZSl9KSx0PXRoaXMuc29ydGVyKHQpLHQubGVuZ3RoP3RoaXMucmVuZGVyKHQuc2xpY2UoMCx0aGlzLm9wdGlvbnMuaXRlbXMpKS5zaG93KCk6dGhpcy5zaG93bj90aGlzLmhpZGUoKTp0aGlzfSxtYXRjaGVyOmZ1bmN0aW9uKGUpe3JldHVybn5lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpfSxzb3J0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPVtdLGk7d2hpbGUoaT1lLnNoaWZ0KCkpaS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpKT9+aS5pbmRleE9mKHRoaXMucXVlcnkpP24ucHVzaChpKTpyLnB1c2goaSk6dC5wdXNoKGkpO3JldHVybiB0LmNvbmNhdChuLHIpfSxoaWdobGlnaHRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYiKTtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIigiK3QrIikiLCJpZyIpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIjxzdHJvbmc+Iit0KyI8L3N0cm9uZz4ifSl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiB0PWUodCkubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9ZShuLm9wdGlvbnMuaXRlbSkuYXR0cigiZGF0YS12YWx1ZSIsciksdC5maW5kKCJhIikuaHRtbChuLmhpZ2hsaWdodGVyKHIpKSx0WzBdfSksdC5maXJzdCgpLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLiRtZW51Lmh0bWwodCksdGhpc30sbmV4dDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIikscj1uLm5leHQoKTtyLmxlbmd0aHx8KHI9ZSh0aGlzLiRtZW51LmZpbmQoImxpIilbMF0pKSxyLmFkZENsYXNzKCJhY3RpdmUiKX0scHJldjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksbj10LnByZXYoKTtuLmxlbmd0aHx8KG49dGhpcy4kbWVudS5maW5kKCJsaSIpLmxhc3QoKSksbi5hZGRDbGFzcygiYWN0aXZlIil9LGxpc3RlbjpmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQub24oImZvY3VzIixlLnByb3h5KHRoaXMuZm9jdXMsdGhpcykpLm9uKCJibHVyIixlLnByb3h5KHRoaXMuYmx1cix0aGlzKSkub24oImtleXByZXNzIixlLnByb3h5KHRoaXMua2V5cHJlc3MsdGhpcykpLm9uKCJrZXl1cCIsZS5wcm94eSh0aGlzLmtleXVwLHRoaXMpKSx0aGlzLmV2ZW50U3VwcG9ydGVkKCJrZXlkb3duIikmJnRoaXMuJGVsZW1lbnQub24oImtleWRvd24iLGUucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKSx0aGlzLiRtZW51Lm9uKCJjbGljayIsZS5wcm94eSh0aGlzLmNsaWNrLHRoaXMpKS5vbigibW91c2VlbnRlciIsImxpIixlLnByb3h5KHRoaXMubW91c2VlbnRlcix0aGlzKSkub24oIm1vdXNlbGVhdmUiLCJsaSIsZS5wcm94eSh0aGlzLm1vdXNlbGVhdmUsdGhpcykpfSxldmVudFN1cHBvcnRlZDpmdW5jdGlvbihlKXt2YXIgdD1lIGluIHRoaXMuJGVsZW1lbnQ7cmV0dXJuIHR8fCh0aGlzLiRlbGVtZW50LnNldEF0dHJpYnV0ZShlLCJyZXR1cm47IiksdD10eXBlb2YgdGhpcy4kZWxlbWVudFtlXT09ImZ1bmN0aW9uIiksdH0sbW92ZTpmdW5jdGlvbihlKXtpZighdGhpcy5zaG93bilyZXR1cm47c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA5OmNhc2UgMTM6Y2FzZSAyNzplLnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSAzODplLnByZXZlbnREZWZhdWx0KCksdGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSA0MDplLnByZXZlbnREZWZhdWx0KCksdGhpcy5uZXh0KCl9ZS5zdG9wUHJvcGFnYXRpb24oKX0sa2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLnN1cHByZXNzS2V5UHJlc3NSZXBlYXQ9fmUuaW5BcnJheSh0LmtleUNvZGUsWzQwLDM4LDksMTMsMjddKSx0aGlzLm1vdmUodCl9LGtleXByZXNzOmZ1bmN0aW9uKGUpe2lmKHRoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdClyZXR1cm47dGhpcy5tb3ZlKGUpfSxrZXl1cDpmdW5jdGlvbihlKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQwOmNhc2UgMzg6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6YnJlYWs7Y2FzZSA5OmNhc2UgMTM6aWYoIXRoaXMuc2hvd24pcmV0dXJuO3RoaXMuc2VsZWN0KCk7YnJlYWs7Y2FzZSAyNzppZighdGhpcy5zaG93bilyZXR1cm47dGhpcy5oaWRlKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLmxvb2t1cCgpfWUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxmb2N1czpmdW5jdGlvbihlKXt0aGlzLmZvY3VzZWQ9ITB9LGJsdXI6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkPSExLCF0aGlzLm1vdXNlZG92ZXImJnRoaXMuc2hvd24mJnRoaXMuaGlkZSgpfSxjbGljazpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLnNlbGVjdCgpLHRoaXMuJGVsZW1lbnQuZm9jdXMoKX0sbW91c2VlbnRlcjpmdW5jdGlvbih0KXt0aGlzLm1vdXNlZG92ZXI9ITAsdGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGUodC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygiYWN0aXZlIil9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oZSl7dGhpcy5tb3VzZWRvdmVyPSExLCF0aGlzLmZvY3VzZWQmJnRoaXMuc2hvd24mJnRoaXMuaGlkZSgpfX07dmFyIG49ZS5mbi50eXBlYWhlYWQ7ZS5mbi50eXBlYWhlYWQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoInR5cGVhaGVhZCIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgidHlwZWFoZWFkIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4udHlwZWFoZWFkLmRlZmF1bHRzPXtzb3VyY2U6W10saXRlbXM6OCxtZW51Oic8dWwgY2xhc3M9InR5cGVhaGVhZCBkcm9wZG93bi1tZW51Ij48L3VsPicsaXRlbTonPGxpPjxhIGhyZWY9IiMiPjwvYT48L2xpPicsbWluTGVuZ3RoOjF9LGUuZm4udHlwZWFoZWFkLkNvbnN0cnVjdG9yPXQsZS5mbi50eXBlYWhlYWQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnR5cGVhaGVhZD1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJmb2N1cy50eXBlYWhlYWQuZGF0YS1hcGkiLCdbZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiXScsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKTtpZihuLmRhdGEoInR5cGVhaGVhZCIpKXJldHVybjtuLnR5cGVhaGVhZChuLmRhdGEoKSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLmFmZml4LmRlZmF1bHRzLG4pLHRoaXMuJHdpbmRvdz1lKHdpbmRvdykub24oInNjcm9sbC5hZmZpeC5kYXRhLWFwaSIsZS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5hZmZpeC5kYXRhLWFwaSIsZS5wcm94eShmdW5jdGlvbigpe3NldFRpbWVvdXQoZS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9LHRoaXMpKSx0aGlzLiRlbGVtZW50PWUodCksdGhpcy5jaGVja1Bvc2l0aW9uKCl9O3QucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSlyZXR1cm47dmFyIHQ9ZShkb2N1bWVudCkuaGVpZ2h0KCksbj10aGlzLiR3aW5kb3cuc2Nyb2xsVG9wKCkscj10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGk9dGhpcy5vcHRpb25zLm9mZnNldCxzPWkuYm90dG9tLG89aS50b3AsdT0iYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbSIsYTt0eXBlb2YgaSE9Im9iamVjdCImJihzPW89aSksdHlwZW9mIG89PSJmdW5jdGlvbiImJihvPWkudG9wKCkpLHR5cGVvZiBzPT0iZnVuY3Rpb24iJiYocz1pLmJvdHRvbSgpKSxhPXRoaXMudW5waW4hPW51bGwmJm4rdGhpcy51bnBpbjw9ci50b3A/ITE6cyE9bnVsbCYmci50b3ArdGhpcy4kZWxlbWVudC5oZWlnaHQoKT49dC1zPyJib3R0b20iOm8hPW51bGwmJm48PW8/InRvcCI6ITE7aWYodGhpcy5hZmZpeGVkPT09YSlyZXR1cm47dGhpcy5hZmZpeGVkPWEsdGhpcy51bnBpbj1hPT0iYm90dG9tIj9yLnRvcC1uOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh1KS5hZGRDbGFzcygiYWZmaXgiKyhhPyItIithOiIiKSl9O3ZhciBuPWUuZm4uYWZmaXg7ZS5mbi5hZmZpeD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiYWZmaXgiKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoImFmZml4IixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4uYWZmaXguQ29uc3RydWN0b3I9dCxlLmZuLmFmZml4LmRlZmF1bHRzPXtvZmZzZXQ6MH0sZS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYWZmaXg9bix0aGlzfSxlKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7ZSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksbj10LmRhdGEoKTtuLm9mZnNldD1uLm9mZnNldHx8e30sbi5vZmZzZXRCb3R0b20mJihuLm9mZnNldC5ib3R0b209bi5vZmZzZXRCb3R0b20pLG4ub2Zmc2V0VG9wJiYobi5vZmZzZXQudG9wPW4ub2Zmc2V0VG9wKSx0LmFmZml4KG4pfSl9KX0od2luZG93LmpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICogQm9vdHN0cmFwIHYzLjMuNiAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pCisgKiBDb3B5cmlnaHQgMjAxMS0yMDE2IFR3aXR0ZXIsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICovCitpZigidW5kZWZpbmVkIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5Iik7K2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoYlswXTwyJiZiWzFdPDl8fDE9PWJbMF0mJjk9PWJbMV0mJmJbMl08MXx8YlswXT4yKXRocm93IG5ldyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIsIGJ1dCBsb3dlciB0aGFuIHZlcnNpb24gMyIpfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLGI9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9O2Zvcih2YXIgYyBpbiBiKWlmKHZvaWQgMCE9PWEuc3R5bGVbY10pcmV0dXJue2VuZDpiW2NdfTtyZXR1cm4hMX1hLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKGIpe3ZhciBjPSExLGQ9dGhpczthKHRoaXMpLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmdW5jdGlvbigpe2M9ITB9KTt2YXIgZT1mdW5jdGlvbigpe2N8fGEoZCkudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfTtyZXR1cm4gc2V0VGltZW91dChlLGIpLHRoaXN9LGEoZnVuY3Rpb24oKXthLnN1cHBvcnQudHJhbnNpdGlvbj1iKCksYS5zdXBwb3J0LnRyYW5zaXRpb24mJihhLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24oYil7cmV0dXJuIGEoYi50YXJnZXQpLmlzKHRoaXMpP2IuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnZvaWQgMH19KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YSgiYnMuYWxlcnQiKTtlfHxjLmRhdGEoImJzLmFsZXJ0IixlPW5ldyBkKHRoaXMpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0uY2FsbChjKX0pfXZhciBjPSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oImNsaWNrIixjLHRoaXMuY2xvc2UpfTtkLlZFUlNJT049IjMuMy42IixkLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoKXtnLmRldGFjaCgpLnRyaWdnZXIoImNsb3NlZC5icy5hbGVydCIpLnJlbW92ZSgpfXZhciBlPWEodGhpcyksZj1lLmF0dHIoImRhdGEtdGFyZ2V0Iik7Znx8KGY9ZS5hdHRyKCJocmVmIiksZj1mJiZmLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO3ZhciBnPWEoZik7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGcubGVuZ3RofHwoZz1lLmNsb3Nlc3QoIi5hbGVydCIpKSxnLnRyaWdnZXIoYj1hLkV2ZW50KCJjbG9zZS5icy5hbGVydCIpKSxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZy5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZy5oYXNDbGFzcygiZmFkZSIpP2cub25lKCJic1RyYW5zaXRpb25FbmQiLGMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTik6YygpKX07dmFyIGU9YS5mbi5hbGVydDthLmZuLmFsZXJ0PWIsYS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1kLGEuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmFsZXJ0PWUsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmFsZXJ0LmRhdGEtYXBpIixjLGQucHJvdG90eXBlLmNsb3NlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmJ1dHRvbiIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiO2V8fGQuZGF0YSgiYnMuYnV0dG9uIixlPW5ldyBjKHRoaXMsZikpLCJ0b2dnbGUiPT1iP2UudG9nZ2xlKCk6YiYmZS5zZXRTdGF0ZShiKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuaXNMb2FkaW5nPSExfTtjLlZFUlNJT049IjMuMy42IixjLkRFRkFVTFRTPXtsb2FkaW5nVGV4dDoibG9hZGluZy4uLiJ9LGMucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGIpe3ZhciBjPSJkaXNhYmxlZCIsZD10aGlzLiRlbGVtZW50LGU9ZC5pcygiaW5wdXQiKT8idmFsIjoiaHRtbCIsZj1kLmRhdGEoKTtiKz0iVGV4dCIsbnVsbD09Zi5yZXNldFRleHQmJmQuZGF0YSgicmVzZXRUZXh0IixkW2VdKCkpLHNldFRpbWVvdXQoYS5wcm94eShmdW5jdGlvbigpe2RbZV0obnVsbD09ZltiXT90aGlzLm9wdGlvbnNbYl06ZltiXSksImxvYWRpbmdUZXh0Ij09Yj8odGhpcy5pc0xvYWRpbmc9ITAsZC5hZGRDbGFzcyhjKS5hdHRyKGMsYykpOnRoaXMuaXNMb2FkaW5nJiYodGhpcy5pc0xvYWRpbmc9ITEsZC5yZW1vdmVDbGFzcyhjKS5yZW1vdmVBdHRyKGMpKX0sdGhpcyksMCl9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBhPSEwLGI9dGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9ImJ1dHRvbnMiXScpO2lmKGIubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoImlucHV0Iik7InJhZGlvIj09Yy5wcm9wKCJ0eXBlIik/KGMucHJvcCgiY2hlY2tlZCIpJiYoYT0hMSksYi5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoImFjdGl2ZSIpKToiY2hlY2tib3giPT1jLnByb3AoInR5cGUiKSYmKGMucHJvcCgiY2hlY2tlZCIpIT09dGhpcy4kZWxlbWVudC5oYXNDbGFzcygiYWN0aXZlIikmJihhPSExKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCJhY3RpdmUiKSksYy5wcm9wKCJjaGVja2VkIix0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSksYSYmYy50cmlnZ2VyKCJjaGFuZ2UiKX1lbHNlIHRoaXMuJGVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIiwhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiYWN0aXZlIikpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLmJ1dHRvbjthLmZuLmJ1dHRvbj1iLGEuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWMsYS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJ1dHRvbj1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5idXR0b24uZGF0YS1hcGkiLCdbZGF0YS10b2dnbGVePSJidXR0b24iXScsZnVuY3Rpb24oYyl7dmFyIGQ9YShjLnRhcmdldCk7ZC5oYXNDbGFzcygiYnRuIil8fChkPWQuY2xvc2VzdCgiLmJ0biIpKSxiLmNhbGwoZCwidG9nZ2xlIiksYShjLnRhcmdldCkuaXMoJ2lucHV0W3R5cGU9InJhZGlvIl0nKXx8YShjLnRhcmdldCkuaXMoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKXx8Yy5wcmV2ZW50RGVmYXVsdCgpfSkub24oImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJyxmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5jbG9zZXN0KCIuYnRuIikudG9nZ2xlQ2xhc3MoImZvY3VzIiwvXmZvY3VzKGluKT8kLy50ZXN0KGIudHlwZSkpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5jYXJvdXNlbCIpLGY9YS5leHRlbmQoe30sYy5ERUZBVUxUUyxkLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGc9InN0cmluZyI9PXR5cGVvZiBiP2I6Zi5zbGlkZTtlfHxkLmRhdGEoImJzLmNhcm91c2VsIixlPW5ldyBjKHRoaXMsZikpLCJudW1iZXIiPT10eXBlb2YgYj9lLnRvKGIpOmc/ZVtnXSgpOmYuaW50ZXJ2YWwmJmUucGF1c2UoKS5jeWNsZSgpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy4kaW5kaWNhdG9ycz10aGlzLiRlbGVtZW50LmZpbmQoIi5jYXJvdXNlbC1pbmRpY2F0b3JzIiksdGhpcy5vcHRpb25zPWMsdGhpcy5wYXVzZWQ9bnVsbCx0aGlzLnNsaWRpbmc9bnVsbCx0aGlzLmludGVydmFsPW51bGwsdGhpcy4kYWN0aXZlPW51bGwsdGhpcy4kaXRlbXM9bnVsbCx0aGlzLm9wdGlvbnMua2V5Ym9hcmQmJnRoaXMuJGVsZW1lbnQub24oImtleWRvd24uYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKSwiaG92ZXIiPT10aGlzLm9wdGlvbnMucGF1c2UmJiEoIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiZ0aGlzLiRlbGVtZW50Lm9uKCJtb3VzZWVudGVyLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtjLlZFUlNJT049IjMuMy42IixjLlRSQU5TSVRJT05fRFVSQVRJT049NjAwLGMuREVGQVVMVFM9e2ludGVydmFsOjVlMyxwYXVzZToiaG92ZXIiLHdyYXA6ITAsa2V5Ym9hcmQ6ITB9LGMucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24oYSl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoYS50YXJnZXQudGFnTmFtZSkpe3N3aXRjaChhLndoaWNoKXtjYXNlIDM3OnRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dGhpcy5uZXh0KCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59YS5wcmV2ZW50RGVmYXVsdCgpfX0sYy5wcm90b3R5cGUuY3ljbGU9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMSksdGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoYS5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSksdGhpc30sYy5wcm90b3R5cGUuZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiRpdGVtcz1hLnBhcmVudCgpLmNoaWxkcmVuKCIuaXRlbSIpLHRoaXMuJGl0ZW1zLmluZGV4KGF8fHRoaXMuJGFjdGl2ZSl9LGMucHJvdG90eXBlLmdldEl0ZW1Gb3JEaXJlY3Rpb249ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldEl0ZW1JbmRleChiKSxkPSJwcmV2Ij09YSYmMD09PWN8fCJuZXh0Ij09YSYmYz09dGhpcy4kaXRlbXMubGVuZ3RoLTE7aWYoZCYmIXRoaXMub3B0aW9ucy53cmFwKXJldHVybiBiO3ZhciBlPSJwcmV2Ij09YT8tMToxLGY9KGMrZSkldGhpcy4kaXRlbXMubGVuZ3RoO3JldHVybiB0aGlzLiRpdGVtcy5lcShmKX0sYy5wcm90b3R5cGUudG89ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPXRoaXMuZ2V0SXRlbUluZGV4KHRoaXMuJGFjdGl2ZT10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpKTtyZXR1cm4gYT50aGlzLiRpdGVtcy5sZW5ndGgtMXx8MD5hP3ZvaWQgMDp0aGlzLnNsaWRpbmc/dGhpcy4kZWxlbWVudC5vbmUoInNsaWQuYnMuY2Fyb3VzZWwiLGZ1bmN0aW9uKCl7Yi50byhhKX0pOmM9PWE/dGhpcy5wYXVzZSgpLmN5Y2xlKCk6dGhpcy5zbGlkZShhPmM/Im5leHQiOiJwcmV2Iix0aGlzLiRpdGVtcy5lcShhKSl9LGMucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKGIpe3JldHVybiBifHwodGhpcy5wYXVzZWQ9ITApLHRoaXMuJGVsZW1lbnQuZmluZCgiLm5leHQsIC5wcmV2IikubGVuZ3RoJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLHRoaXMuY3ljbGUoITApKSx0aGlzLmludGVydmFsPWNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCksdGhpc30sYy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWRpbmc/dm9pZCAwOnRoaXMuc2xpZGUoIm5leHQiKX0sYy5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWRpbmc/dm9pZCAwOnRoaXMuc2xpZGUoInByZXYiKX0sYy5wcm90b3R5cGUuc2xpZGU9ZnVuY3Rpb24oYixkKXt2YXIgZT10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGY9ZHx8dGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKGIsZSksZz10aGlzLmludGVydmFsLGg9Im5leHQiPT1iPyJsZWZ0IjoicmlnaHQiLGk9dGhpcztpZihmLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBqPWZbMF0saz1hLkV2ZW50KCJzbGlkZS5icy5jYXJvdXNlbCIse3JlbGF0ZWRUYXJnZXQ6aixkaXJlY3Rpb246aH0pO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihrKSwhay5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aWYodGhpcy5zbGlkaW5nPSEwLGcmJnRoaXMucGF1c2UoKSx0aGlzLiRpbmRpY2F0b3JzLmxlbmd0aCl7dGhpcy4kaW5kaWNhdG9ycy5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpO3ZhciBsPWEodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KGYpXSk7bCYmbC5hZGRDbGFzcygiYWN0aXZlIil9dmFyIG09YS5FdmVudCgic2xpZC5icy5jYXJvdXNlbCIse3JlbGF0ZWRUYXJnZXQ6aixkaXJlY3Rpb246aH0pO3JldHVybiBhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygic2xpZGUiKT8oZi5hZGRDbGFzcyhiKSxmWzBdLm9mZnNldFdpZHRoLGUuYWRkQ2xhc3MoaCksZi5hZGRDbGFzcyhoKSxlLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmdW5jdGlvbigpe2YucmVtb3ZlQ2xhc3MoW2IsaF0uam9pbigiICIpKS5hZGRDbGFzcygiYWN0aXZlIiksZS5yZW1vdmVDbGFzcyhbImFjdGl2ZSIsaF0uam9pbigiICIpKSxpLnNsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe2kuJGVsZW1lbnQudHJpZ2dlcihtKX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pKTooZS5yZW1vdmVDbGFzcygiYWN0aXZlIiksZi5hZGRDbGFzcygiYWN0aXZlIiksdGhpcy5zbGlkaW5nPSExLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihtKSksZyYmdGhpcy5jeWNsZSgpLHRoaXN9fTt2YXIgZD1hLmZuLmNhcm91c2VsO2EuZm4uY2Fyb3VzZWw9YixhLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yPWMsYS5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY2Fyb3VzZWw9ZCx0aGlzfTt2YXIgZT1mdW5jdGlvbihjKXt2YXIgZCxlPWEodGhpcyksZj1hKGUuYXR0cigiZGF0YS10YXJnZXQiKXx8KGQ9ZS5hdHRyKCJocmVmIikpJiZkLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpO2lmKGYuaGFzQ2xhc3MoImNhcm91c2VsIikpe3ZhciBnPWEuZXh0ZW5kKHt9LGYuZGF0YSgpLGUuZGF0YSgpKSxoPWUuYXR0cigiZGF0YS1zbGlkZS10byIpO2gmJihnLmludGVydmFsPSExKSxiLmNhbGwoZixnKSxoJiZmLmRhdGEoImJzLmNhcm91c2VsIikudG8oaCksYy5wcmV2ZW50RGVmYXVsdCgpfX07YShkb2N1bWVudCkub24oImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpIiwiW2RhdGEtc2xpZGVdIixlKS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZS10b10iLGUpLGEod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXthKCdbZGF0YS1yaWRlPSJjYXJvdXNlbCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7Yi5jYWxsKGMsYy5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7dmFyIGMsZD1iLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChjPWIuYXR0cigiaHJlZiIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpO3JldHVybiBhKGQpfWZ1bmN0aW9uIGMoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoImJzLmNvbGxhcHNlIiksZj1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYik7IWUmJmYudG9nZ2xlJiYvc2hvd3xoaWRlLy50ZXN0KGIpJiYoZi50b2dnbGU9ITEpLGV8fGMuZGF0YSgiYnMuY29sbGFwc2UiLGU9bmV3IGQodGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgZD1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sZC5ERUZBVUxUUyxjKSx0aGlzLiR0cmlnZ2VyPWEoJ1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtocmVmPSIjJytiLmlkKyciXSxbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl1bZGF0YS10YXJnZXQ9IiMnK2IuaWQrJyJdJyksdGhpcy50cmFuc2l0aW9uaW5nPW51bGwsdGhpcy5vcHRpb25zLnBhcmVudD90aGlzLiRwYXJlbnQ9dGhpcy5nZXRQYXJlbnQoKTp0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLiRlbGVtZW50LHRoaXMuJHRyaWdnZXIpLHRoaXMub3B0aW9ucy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9O2QuVkVSU0lPTj0iMy4zLjYiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0zNTAsZC5ERUZBVUxUUz17dG9nZ2xlOiEwfSxkLnByb3RvdHlwZS5kaW1lbnNpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJ3aWR0aCIpO3JldHVybiBhPyJ3aWR0aCI6ImhlaWdodCJ9LGQucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiYhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKSl7dmFyIGIsZT10aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5jaGlsZHJlbigiLnBhbmVsIikuY2hpbGRyZW4oIi5pbiwgLmNvbGxhcHNpbmciKTtpZighKGUmJmUubGVuZ3RoJiYoYj1lLmRhdGEoImJzLmNvbGxhcHNlIiksYiYmYi50cmFuc2l0aW9uaW5nKSkpe3ZhciBmPWEuRXZlbnQoInNob3cuYnMuY29sbGFwc2UiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoZiksIWYuaXNEZWZhdWx0UHJldmVudGVkKCkpe2UmJmUubGVuZ3RoJiYoYy5jYWxsKGUsImhpZGUiKSxifHxlLmRhdGEoImJzLmNvbGxhcHNlIixudWxsKSk7dmFyIGc9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIilbZ10oMCkuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMuJHRyaWdnZXIucmVtb3ZlQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgaD1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKS5hZGRDbGFzcygiY29sbGFwc2UgaW4iKVtnXSgiIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy5jb2xsYXBzZSIpfTtpZighYS5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIGguY2FsbCh0aGlzKTt2YXIgaT1hLmNhbWVsQ2FzZShbInNjcm9sbCIsZ10uam9pbigiLSIpKTt0aGlzLiRlbGVtZW50Lm9uZSgiYnNUcmFuc2l0aW9uRW5kIixhLnByb3h5KGgsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTilbZ10odGhpcy4kZWxlbWVudFswXVtpXSl9fX19LGQucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYj1hLkV2ZW50KCJoaWRlLmJzLmNvbGxhcHNlIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLCFiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgYz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbY10odGhpcy4kZWxlbWVudFtjXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiY29sbGFwc2luZyIpLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSBpbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKCJjb2xsYXBzZWQiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSksdGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIGU9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIikuYWRkQ2xhc3MoImNvbGxhcHNlIikudHJpZ2dlcigiaGlkZGVuLmJzLmNvbGxhcHNlIil9O3JldHVybiBhLnN1cHBvcnQudHJhbnNpdGlvbj92b2lkIHRoaXMuJGVsZW1lbnRbY10oMCkub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoZSx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTplLmNhbGwodGhpcyl9fX0sZC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpPyJoaWRlIjoic2hvdyJdKCl9LGQucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMub3B0aW9ucy5wYXJlbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVudD0iJyt0aGlzLm9wdGlvbnMucGFyZW50KyciXScpLmVhY2goYS5wcm94eShmdW5jdGlvbihjLGQpe3ZhciBlPWEoZCk7dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoYihlKSxlKX0sdGhpcykpLmVuZCgpfSxkLnByb3RvdHlwZS5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmhhc0NsYXNzKCJpbiIpO2EuYXR0cigiYXJpYS1leHBhbmRlZCIsYyksYi50b2dnbGVDbGFzcygiY29sbGFwc2VkIiwhYykuYXR0cigiYXJpYS1leHBhbmRlZCIsYyl9O3ZhciBlPWEuZm4uY29sbGFwc2U7YS5mbi5jb2xsYXBzZT1jLGEuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9ZCxhLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jb2xsYXBzZT1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXScsZnVuY3Rpb24oZCl7dmFyIGU9YSh0aGlzKTtlLmF0dHIoImRhdGEtdGFyZ2V0Iil8fGQucHJldmVudERlZmF1bHQoKTt2YXIgZj1iKGUpLGc9Zi5kYXRhKCJicy5jb2xsYXBzZSIpLGg9Zz8idG9nZ2xlIjplLmRhdGEoKTtjLmNhbGwoZixoKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXt2YXIgYz1iLmF0dHIoImRhdGEtdGFyZ2V0Iik7Y3x8KGM9Yi5hdHRyKCJocmVmIiksYz1jJiYvI1tBLVphLXpdLy50ZXN0KGMpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO3ZhciBkPWMmJmEoYyk7cmV0dXJuIGQmJmQubGVuZ3RoP2Q6Yi5wYXJlbnQoKX1mdW5jdGlvbiBjKGMpe2MmJjM9PT1jLndoaWNofHwoYShlKS5yZW1vdmUoKSxhKGYpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9YihkKSxmPXtyZWxhdGVkVGFyZ2V0OnRoaXN9O2UuaGFzQ2xhc3MoIm9wZW4iKSYmKGMmJiJjbGljayI9PWMudHlwZSYmL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSYmYS5jb250YWlucyhlWzBdLGMudGFyZ2V0KXx8KGUudHJpZ2dlcihjPWEuRXZlbnQoImhpZGUuYnMuZHJvcGRvd24iLGYpKSxjLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZC5hdHRyKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxlLnJlbW92ZUNsYXNzKCJvcGVuIikudHJpZ2dlcihhLkV2ZW50KCJoaWRkZW4uYnMuZHJvcGRvd24iLGYpKSkpKX0pKX1mdW5jdGlvbiBkKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9Yy5kYXRhKCJicy5kcm9wZG93biIpO2R8fGMuZGF0YSgiYnMuZHJvcGRvd24iLGQ9bmV3IGcodGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZFtiXS5jYWxsKGMpfSl9dmFyIGU9Ii5kcm9wZG93bi1iYWNrZHJvcCIsZj0nW2RhdGEtdG9nZ2xlPSJkcm9wZG93biJdJyxnPWZ1bmN0aW9uKGIpe2EoYikub24oImNsaWNrLmJzLmRyb3Bkb3duIix0aGlzLnRvZ2dsZSl9O2cuVkVSU0lPTj0iMy4zLjYiLGcucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2lmKCFlLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXt2YXIgZj1iKGUpLGc9Zi5oYXNDbGFzcygib3BlbiIpO2lmKGMoKSwhZyl7Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFmLmNsb3Nlc3QoIi5uYXZiYXItbmF2IikubGVuZ3RoJiZhKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygiZHJvcGRvd24tYmFja2Ryb3AiKS5pbnNlcnRBZnRlcihhKHRoaXMpKS5vbigiY2xpY2siLGMpO3ZhciBoPXtyZWxhdGVkVGFyZ2V0OnRoaXN9O2lmKGYudHJpZ2dlcihkPWEuRXZlbnQoInNob3cuYnMuZHJvcGRvd24iLGgpKSxkLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtlLnRyaWdnZXIoImZvY3VzIikuYXR0cigiYXJpYS1leHBhbmRlZCIsInRydWUiKSxmLnRvZ2dsZUNsYXNzKCJvcGVuIikudHJpZ2dlcihhLkV2ZW50KCJzaG93bi5icy5kcm9wZG93biIsaCkpfXJldHVybiExfX0sZy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihjKXtpZigvKDM4fDQwfDI3fDMyKS8udGVzdChjLndoaWNoKSYmIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoYy50YXJnZXQudGFnTmFtZSkpe3ZhciBkPWEodGhpcyk7aWYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCksIWQuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBlPWIoZCksZz1lLmhhc0NsYXNzKCJvcGVuIik7aWYoIWcmJjI3IT1jLndoaWNofHxnJiYyNz09Yy53aGljaClyZXR1cm4gMjc9PWMud2hpY2gmJmUuZmluZChmKS50cmlnZ2VyKCJmb2N1cyIpLGQudHJpZ2dlcigiY2xpY2siKTt2YXIgaD0iIGxpOm5vdCguZGlzYWJsZWQpOnZpc2libGUgYSIsaT1lLmZpbmQoIi5kcm9wZG93bi1tZW51IitoKTtpZihpLmxlbmd0aCl7dmFyIGo9aS5pbmRleChjLnRhcmdldCk7Mzg9PWMud2hpY2gmJmo+MCYmai0tLDQwPT1jLndoaWNoJiZqPGkubGVuZ3RoLTEmJmorKyx+anx8KGo9MCksaS5lcShqKS50cmlnZ2VyKCJmb2N1cyIpfX19fTt2YXIgaD1hLmZuLmRyb3Bkb3duO2EuZm4uZHJvcGRvd249ZCxhLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWcsYS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uZHJvcGRvd249aCx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLGMpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biBmb3JtIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSkub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIixmLGcucHJvdG90eXBlLnRvZ2dsZSkub24oImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGkiLGYsZy5wcm90b3R5cGUua2V5ZG93bikub24oImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGkiLCIuZHJvcGRvd24tbWVudSIsZy5wcm90b3R5cGUua2V5ZG93bil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIsZCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoImJzLm1vZGFsIiksZz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGUuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYik7Znx8ZS5kYXRhKCJicy5tb2RhbCIsZj1uZXcgYyh0aGlzLGcpKSwic3RyaW5nIj09dHlwZW9mIGI/ZltiXShkKTpnLnNob3cmJmYuc2hvdyhkKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy5vcHRpb25zPWMsdGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRkaWFsb2c9dGhpcy4kZWxlbWVudC5maW5kKCIubW9kYWwtZGlhbG9nIiksdGhpcy4kYmFja2Ryb3A9bnVsbCx0aGlzLmlzU2hvd249bnVsbCx0aGlzLm9yaWdpbmFsQm9keVBhZD1udWxsLHRoaXMuc2Nyb2xsYmFyV2lkdGg9MCx0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEsdGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKCIubW9kYWwtY29udGVudCIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSxhLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJsb2FkZWQuYnMubW9kYWwiKX0sdGhpcykpfTtjLlZFUlNJT049IjMuMy42IixjLlRSQU5TSVRJT05fRFVSQVRJT049MzAwLGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsYy5ERUZBVUxUUz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlzU2hvd24/dGhpcy5oaWRlKCk6dGhpcy5zaG93KGEpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT1hLkV2ZW50KCJzaG93LmJzLm1vZGFsIix7cmVsYXRlZFRhcmdldDpifSk7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLHRoaXMuaXNTaG93bnx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuaXNTaG93bj0hMCx0aGlzLmNoZWNrU2Nyb2xsYmFyKCksdGhpcy5zZXRTY3JvbGxiYXIoKSx0aGlzLiRib2R5LmFkZENsYXNzKCJtb2RhbC1vcGVuIiksdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuJGVsZW1lbnQub24oImNsaWNrLmRpc21pc3MuYnMubW9kYWwiLCdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJyxhLnByb3h5KHRoaXMuaGlkZSx0aGlzKSksdGhpcy4kZGlhbG9nLm9uKCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50Lm9uZSgibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5pcyhkLiRlbGVtZW50KSYmKGQuaWdub3JlQmFja2Ryb3BDbGljaz0hMCl9KX0pLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgZT1hLnN1cHBvcnQudHJhbnNpdGlvbiYmZC4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpO2QuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RofHxkLiRlbGVtZW50LmFwcGVuZFRvKGQuJGJvZHkpLGQuJGVsZW1lbnQuc2hvdygpLnNjcm9sbFRvcCgwKSxkLmFkanVzdERpYWxvZygpLGUmJmQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsZC4kZWxlbWVudC5hZGRDbGFzcygiaW4iKSxkLmVuZm9yY2VGb2N1cygpO3ZhciBmPWEuRXZlbnQoInNob3duLmJzLm1vZGFsIix7cmVsYXRlZFRhcmdldDpifSk7ZT9kLiRkaWFsb2cub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7ZC4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpLnRyaWdnZXIoZil9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmQuJGVsZW1lbnQudHJpZ2dlcigiZm9jdXMiKS50cmlnZ2VyKGYpfSkpfSxjLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGIpe2ImJmIucHJldmVudERlZmF1bHQoKSxiPWEuRXZlbnQoImhpZGUuYnMubW9kYWwiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksdGhpcy5pc1Nob3duJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKHRoaXMuaXNTaG93bj0hMSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksYShkb2N1bWVudCkub2ZmKCJmb2N1c2luLmJzLm1vZGFsIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiaW4iKS5vZmYoImNsaWNrLmRpc21pc3MuYnMubW9kYWwiKS5vZmYoIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbCIpLHRoaXMuJGRpYWxvZy5vZmYoIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIiksYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRlbGVtZW50Lm9uZSgiYnNUcmFuc2l0aW9uRW5kIixhLnByb3h5KHRoaXMuaGlkZU1vZGFsLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOnRoaXMuaGlkZU1vZGFsKCkpfSxjLnByb3RvdHlwZS5lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXthKGRvY3VtZW50KS5vZmYoImZvY3VzaW4uYnMubW9kYWwiKS5vbigiZm9jdXNpbi5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXt0aGlzLiRlbGVtZW50WzBdPT09YS50YXJnZXR8fHRoaXMuJGVsZW1lbnQuaGFzKGEudGFyZ2V0KS5sZW5ndGh8fHRoaXMuJGVsZW1lbnQudHJpZ2dlcigiZm9jdXMiKX0sdGhpcykpfSxjLnByb3RvdHlwZS5lc2NhcGU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiLGEucHJveHkoZnVuY3Rpb24oYSl7Mjc9PWEud2hpY2gmJnRoaXMuaGlkZSgpfSx0aGlzKSk6dGhpcy5pc1Nob3dufHx0aGlzLiRlbGVtZW50Lm9mZigia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsIil9LGMucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93bj9hKHdpbmRvdykub24oInJlc2l6ZS5icy5tb2RhbCIsYS5wcm94eSh0aGlzLmhhbmRsZVVwZGF0ZSx0aGlzKSk6YSh3aW5kb3cpLm9mZigicmVzaXplLmJzLm1vZGFsIil9LGMucHJvdG90eXBlLmhpZGVNb2RhbD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe2EuJGJvZHkucmVtb3ZlQ2xhc3MoIm1vZGFsLW9wZW4iKSxhLnJlc2V0QWRqdXN0bWVudHMoKSxhLnJlc2V0U2Nyb2xsYmFyKCksYS4kZWxlbWVudC50cmlnZ2VyKCJoaWRkZW4uYnMubW9kYWwiKX0pfSxjLnByb3RvdHlwZS5yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxjLnByb3RvdHlwZS5iYWNrZHJvcD1mdW5jdGlvbihiKXt2YXIgZD10aGlzLGU9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpPyJmYWRlIjoiIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGY9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmU7aWYodGhpcy4kYmFja2Ryb3A9YShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuYWRkQ2xhc3MoIm1vZGFsLWJhY2tkcm9wICIrZSkuYXBwZW5kVG8odGhpcy4kYm9keSksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrP3ZvaWQodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExKTp2b2lkKGEudGFyZ2V0PT09YS5jdXJyZW50VGFyZ2V0JiYoInN0YXRpYyI9PXRoaXMub3B0aW9ucy5iYWNrZHJvcD90aGlzLiRlbGVtZW50WzBdLmZvY3VzKCk6dGhpcy5oaWRlKCkpKX0sdGhpcykpLGYmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpLCFiKXJldHVybjtmP3RoaXMuJGJhY2tkcm9wLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixiKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmIoKX1lbHNlIGlmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKTt2YXIgZz1mdW5jdGlvbigpe2QucmVtb3ZlQmFja2Ryb3AoKSxiJiZiKCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy4kYmFja2Ryb3Aub25lKCJic1RyYW5zaXRpb25FbmQiLGcpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6ZygpfWVsc2UgYiYmYigpfSxjLnByb3RvdHlwZS5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmFkanVzdERpYWxvZygpfSxjLnByb3RvdHlwZS5hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDohdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmYT90aGlzLnNjcm9sbGJhcldpZHRoOiIiLHBhZGRpbmdSaWdodDp0aGlzLmJvZHlJc092ZXJmbG93aW5nJiYhYT90aGlzLnNjcm9sbGJhcldpZHRoOiIifSl9LGMucHJvdG90eXBlLnJlc2V0QWRqdXN0bWVudHM9ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LmNzcyh7cGFkZGluZ0xlZnQ6IiIscGFkZGluZ1JpZ2h0OiIifSl9LGMucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LmlubmVyV2lkdGg7aWYoIWEpe3ZhciBiPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthPWIucmlnaHQtTWF0aC5hYnMoYi5sZWZ0KX10aGlzLmJvZHlJc092ZXJmbG93aW5nPWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8YSx0aGlzLnNjcm9sbGJhcldpZHRoPXRoaXMubWVhc3VyZVNjcm9sbGJhcigpfSxjLnByb3RvdHlwZS5zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1wYXJzZUludCh0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIpfHwwLDEwKTt0aGlzLm9yaWdpbmFsQm9keVBhZD1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodHx8IiIsdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoInBhZGRpbmctcmlnaHQiLGErdGhpcy5zY3JvbGxiYXJXaWR0aCl9LGMucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy4kYm9keS5jc3MoInBhZGRpbmctcmlnaHQiLHRoaXMub3JpZ2luYWxCb2R5UGFkKX0sYy5wcm90b3R5cGUubWVhc3VyZVNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuY2xhc3NOYW1lPSJtb2RhbC1zY3JvbGxiYXItbWVhc3VyZSIsdGhpcy4kYm9keS5hcHBlbmQoYSk7dmFyIGI9YS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRoO3JldHVybiB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKGEpLGJ9O3ZhciBkPWEuZm4ubW9kYWw7YS5mbi5tb2RhbD1iLGEuZm4ubW9kYWwuQ29uc3RydWN0b3I9YyxhLmZuLm1vZGFsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5tb2RhbD1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5tb2RhbC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZnVuY3Rpb24oYyl7dmFyIGQ9YSh0aGlzKSxlPWQuYXR0cigiaHJlZiIpLGY9YShkLmF0dHIoImRhdGEtdGFyZ2V0Iil8fGUmJmUucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSksZz1mLmRhdGEoImJzLm1vZGFsIik/InRvZ2dsZSI6YS5leHRlbmQoe3JlbW90ZTohLyMvLnRlc3QoZSkmJmV9LGYuZGF0YSgpLGQuZGF0YSgpKTtkLmlzKCJhIikmJmMucHJldmVudERlZmF1bHQoKSxmLm9uZSgic2hvdy5icy5tb2RhbCIsZnVuY3Rpb24oYSl7YS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Zi5vbmUoImhpZGRlbi5icy5tb2RhbCIsZnVuY3Rpb24oKXtkLmlzKCI6dmlzaWJsZSIpJiZkLnRyaWdnZXIoImZvY3VzIil9KX0pLGIuY2FsbChmLGcsdGhpcyl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLnRvb2x0aXAiKSxmPSJvYmplY3QiPT10eXBlb2YgYiYmYjshZSYmL2Rlc3Ryb3l8aGlkZS8udGVzdChiKXx8KGV8fGQuZGF0YSgiYnMudG9vbHRpcCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKSl9KX12YXIgYz1mdW5jdGlvbihhLGIpe3RoaXMudHlwZT1udWxsLHRoaXMub3B0aW9ucz1udWxsLHRoaXMuZW5hYmxlZD1udWxsLHRoaXMudGltZW91dD1udWxsLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMuJGVsZW1lbnQ9bnVsbCx0aGlzLmluU3RhdGU9bnVsbCx0aGlzLmluaXQoInRvb2x0aXAiLGEsYil9O2MuVkVSU0lPTj0iMy4zLjYiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsYy5ERUZBVUxUUz17YW5pbWF0aW9uOiEwLHBsYWNlbWVudDoidG9wIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCIgcm9sZT0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOiJob3ZlciBmb2N1cyIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMSx2aWV3cG9ydDp7c2VsZWN0b3I6ImJvZHkiLHBhZGRpbmc6MH19LGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYixjLGQpe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9Yix0aGlzLiRlbGVtZW50PWEoYyksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKCJgc2VsZWN0b3JgIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGluaXRpYWxpemluZyAiK3RoaXMudHlwZSsiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0ISIpO2Zvcih2YXIgZT10aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdCgiICIpLGY9ZS5sZW5ndGg7Zi0tOyl7dmFyIGc9ZVtmXTtpZigiY2xpY2siPT1nKXRoaXMuJGVsZW1lbnQub24oImNsaWNrLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKTtlbHNlIGlmKCJtYW51YWwiIT1nKXt2YXIgaD0iaG92ZXIiPT1nPyJtb3VzZWVudGVyIjoiZm9jdXNpbiIsaT0iaG92ZXIiPT1nPyJtb3VzZWxlYXZlIjoiZm9jdXNvdXQiO3RoaXMuJGVsZW1lbnQub24oaCsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMuZW50ZXIsdGhpcykpLHRoaXMuJGVsZW1lbnQub24oaSsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMubGVhdmUsdGhpcykpfX10aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz1hLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0b3I6IiJ9KTp0aGlzLmZpeFRpdGxlKCl9LGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oYil7cmV0dXJuIGI9YS5leHRlbmQoe30sdGhpcy5nZXREZWZhdWx0cygpLHRoaXMuJGVsZW1lbnQuZGF0YSgpLGIpLGIuZGVsYXkmJiJudW1iZXIiPT10eXBlb2YgYi5kZWxheSYmKGIuZGVsYXk9e3Nob3c6Yi5kZWxheSxoaWRlOmIuZGVsYXl9KSxifSxjLnByb3RvdHlwZS5nZXREZWxlZ2F0ZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgYj17fSxjPXRoaXMuZ2V0RGVmYXVsdHMoKTtyZXR1cm4gdGhpcy5fb3B0aW9ucyYmYS5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24oYSxkKXtjW2FdIT1kJiYoYlthXT1kKX0pLGJ9LGMucHJvdG90eXBlLmVudGVyPWZ1bmN0aW9uKGIpe3ZhciBjPWIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2I6YShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlKTtyZXR1cm4gY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxjKSksYiBpbnN0YW5jZW9mIGEuRXZlbnQmJihjLmluU3RhdGVbImZvY3VzaW4iPT1iLnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMCksYy50aXAoKS5oYXNDbGFzcygiaW4iKXx8ImluIj09Yy5ob3ZlclN0YXRlP3ZvaWQoYy5ob3ZlclN0YXRlPSJpbiIpOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9ImluIixjLm9wdGlvbnMuZGVsYXkmJmMub3B0aW9ucy5kZWxheS5zaG93P3ZvaWQoYy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsiaW4iPT1jLmhvdmVyU3RhdGUmJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdykpOmMuc2hvdygpKX0sYy5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZT1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmluU3RhdGUpaWYodGhpcy5pblN0YXRlW2FdKXJldHVybiEwO3JldHVybiExfSxjLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlWyJmb2N1c291dCI9PWIudHlwZT8iZm9jdXMiOiJob3ZlciJdPSExKSxjLmlzSW5TdGF0ZVRydWUoKT92b2lkIDA6KGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT0ib3V0IixjLm9wdGlvbnMuZGVsYXkmJmMub3B0aW9ucy5kZWxheS5oaWRlP3ZvaWQoYy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsib3V0Ij09Yy5ob3ZlclN0YXRlJiZjLmhpZGUoKX0sYy5vcHRpb25zLmRlbGF5LmhpZGUpKTpjLmhpZGUoKSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KCJzaG93LmJzLiIrdGhpcy50eXBlKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoYik7dmFyIGQ9YS5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuJGVsZW1lbnRbMF0pO2lmKGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fCFkKXJldHVybjt2YXIgZT10aGlzLGY9dGhpcy50aXAoKSxnPXRoaXMuZ2V0VUlEKHRoaXMudHlwZSk7dGhpcy5zZXRDb250ZW50KCksZi5hdHRyKCJpZCIsZyksdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixnKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZmLmFkZENsYXNzKCJmYWRlIik7dmFyIGg9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsZlswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LGk9L1xzP2F1dG8/XHM/L2ksaj1pLnRlc3QoaCk7aiYmKGg9aC5yZXBsYWNlKGksIiIpfHwidG9wIiksZi5kZXRhY2goKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KS5hZGRDbGFzcyhoKS5kYXRhKCJicy4iK3RoaXMudHlwZSx0aGlzKSx0aGlzLm9wdGlvbnMuY29udGFpbmVyP2YuYXBwZW5kVG8odGhpcy5vcHRpb25zLmNvbnRhaW5lcik6Zi5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoImluc2VydGVkLmJzLiIrdGhpcy50eXBlKTt2YXIgaz10aGlzLmdldFBvc2l0aW9uKCksbD1mWzBdLm9mZnNldFdpZHRoLG09ZlswXS5vZmZzZXRIZWlnaHQ7aWYoail7dmFyIG49aCxvPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO2g9ImJvdHRvbSI9PWgmJmsuYm90dG9tK20+by5ib3R0b20/InRvcCI6InRvcCI9PWgmJmsudG9wLW08by50b3A/ImJvdHRvbSI6InJpZ2h0Ij09aCYmay5yaWdodCtsPm8ud2lkdGg/ImxlZnQiOiJsZWZ0Ij09aCYmay5sZWZ0LWw8by5sZWZ0PyJyaWdodCI6aCxmLnJlbW92ZUNsYXNzKG4pLmFkZENsYXNzKGgpfXZhciBwPXRoaXMuZ2V0Q2FsY3VsYXRlZE9mZnNldChoLGssbCxtKTt0aGlzLmFwcGx5UGxhY2VtZW50KHAsaCk7dmFyIHE9ZnVuY3Rpb24oKXt2YXIgYT1lLmhvdmVyU3RhdGU7ZS4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy4iK2UudHlwZSksZS5ob3ZlclN0YXRlPW51bGwsIm91dCI9PWEmJmUubGVhdmUoZSl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoImZhZGUiKT9mLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixxKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOnEoKX19LGMucHJvdG90eXBlLmFwcGx5UGxhY2VtZW50PWZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy50aXAoKSxlPWRbMF0ub2Zmc2V0V2lkdGgsZj1kWzBdLm9mZnNldEhlaWdodCxnPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tdG9wIiksMTApLGg9cGFyc2VJbnQoZC5jc3MoIm1hcmdpbi1sZWZ0IiksMTApO2lzTmFOKGcpJiYoZz0wKSxpc05hTihoKSYmKGg9MCksYi50b3ArPWcsYi5sZWZ0Kz1oLGEub2Zmc2V0LnNldE9mZnNldChkWzBdLGEuZXh0ZW5kKHt1c2luZzpmdW5jdGlvbihhKXtkLmNzcyh7dG9wOk1hdGgucm91bmQoYS50b3ApLGxlZnQ6TWF0aC5yb3VuZChhLmxlZnQpfSl9fSxiKSwwKSxkLmFkZENsYXNzKCJpbiIpO3ZhciBpPWRbMF0ub2Zmc2V0V2lkdGgsaj1kWzBdLm9mZnNldEhlaWdodDsidG9wIj09YyYmaiE9ZiYmKGIudG9wPWIudG9wK2Ytaik7dmFyIGs9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoYyxiLGksaik7ay5sZWZ0P2IubGVmdCs9ay5sZWZ0OmIudG9wKz1rLnRvcDt2YXIgbD0vdG9wfGJvdHRvbS8udGVzdChjKSxtPWw/MiprLmxlZnQtZStpOjIqay50b3AtZitqLG49bD8ib2Zmc2V0V2lkdGgiOiJvZmZzZXRIZWlnaHQiO2Qub2Zmc2V0KGIpLHRoaXMucmVwbGFjZUFycm93KG0sZFswXVtuXSxsKX0sYy5wcm90b3R5cGUucmVwbGFjZUFycm93PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmFycm93KCkuY3NzKGM/ImxlZnQiOiJ0b3AiLDUwKigxLWEvYikrIiUiKS5jc3MoYz8idG9wIjoibGVmdCIsIiIpfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKTthLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYiksYS5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBkKCl7ImluIiE9ZS5ob3ZlclN0YXRlJiZmLmRldGFjaCgpLGUuJGVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpLnRyaWdnZXIoImhpZGRlbi5icy4iK2UudHlwZSksYiYmYigpfXZhciBlPXRoaXMsZj1hKHRoaXMuJHRpcCksZz1hLkV2ZW50KCJoaWRlLmJzLiIrdGhpcy50eXBlKTtyZXR1cm4gdGhpcy4kZWxlbWVudC50cmlnZ2VyKGcpLGcuaXNEZWZhdWx0UHJldmVudGVkKCk/dm9pZCAwOihmLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZmLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZCkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpkKCksdGhpcy5ob3ZlclN0YXRlPW51bGwsdGhpcyl9LGMucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudDsoYS5hdHRyKCJ0aXRsZSIpfHwic3RyaW5nIiE9dHlwZW9mIGEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpKSYmYS5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIixhLmF0dHIoInRpdGxlIil8fCIiKS5hdHRyKCJ0aXRsZSIsIiIpfSxjLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKX0sYy5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oYil7Yj1ifHx0aGlzLiRlbGVtZW50O3ZhciBjPWJbMF0sZD0iQk9EWSI9PWMudGFnTmFtZSxlPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09ZS53aWR0aCYmKGU9YS5leHRlbmQoe30sZSx7d2lkdGg6ZS5yaWdodC1lLmxlZnQsaGVpZ2h0OmUuYm90dG9tLWUudG9wfSkpO3ZhciBmPWQ/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKSxnPXtzY3JvbGw6ZD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDpiLnNjcm9sbFRvcCgpfSxoPWQ/e3dpZHRoOmEod2luZG93KS53aWR0aCgpLGhlaWdodDphKHdpbmRvdykuaGVpZ2h0KCl9Om51bGw7cmV0dXJuIGEuZXh0ZW5kKHt9LGUsZyxoLGYpfSxjLnByb3RvdHlwZS5nZXRDYWxjdWxhdGVkT2Zmc2V0PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiJib3R0b20iPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQsbGVmdDpiLmxlZnQrYi53aWR0aC8yLWMvMn06InRvcCI9PWE/e3RvcDpiLnRvcC1kLGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJsZWZ0Ij09YT97dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0LWN9Ont0b3A6Yi50b3ArYi5oZWlnaHQvMi1kLzIsbGVmdDpiLmxlZnQrYi53aWR0aH19LGMucHJvdG90eXBlLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT17dG9wOjAsbGVmdDowfTtpZighdGhpcy4kdmlld3BvcnQpcmV0dXJuIGU7dmFyIGY9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZ0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZ3x8MCxnPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO2lmKC9yaWdodHxsZWZ0Ly50ZXN0KGEpKXt2YXIgaD1iLnRvcC1mLWcuc2Nyb2xsLGk9Yi50b3ArZi1nLnNjcm9sbCtkO2g8Zy50b3A/ZS50b3A9Zy50b3AtaDppPmcudG9wK2cuaGVpZ2h0JiYoZS50b3A9Zy50b3ArZy5oZWlnaHQtaSl9ZWxzZXt2YXIgaj1iLmxlZnQtZixrPWIubGVmdCtmK2M7ajxnLmxlZnQ/ZS5sZWZ0PWcubGVmdC1qOms+Zy5yaWdodCYmKGUubGVmdD1nLmxlZnQrZy53aWR0aC1rKX1yZXR1cm4gZX0sYy5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJGVsZW1lbnQsYz10aGlzLm9wdGlvbnM7cmV0dXJuIGE9Yi5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYy50aXRsZT9jLnRpdGxlLmNhbGwoYlswXSk6Yy50aXRsZSl9LGMucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbihhKXtkbyBhKz1+figxZTYqTWF0aC5yYW5kb20oKSk7d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBhfSxjLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtpZighdGhpcy4kdGlwJiYodGhpcy4kdGlwPWEodGhpcy5vcHRpb25zLnRlbXBsYXRlKSwxIT10aGlzLiR0aXAubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlKyIgYHRlbXBsYXRlYCBvcHRpb24gbXVzdCBjb25zaXN0IG9mIGV4YWN0bHkgMSB0b3AtbGV2ZWwgZWxlbWVudCEiKTtyZXR1cm4gdGhpcy4kdGlwfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKCIudG9vbHRpcC1hcnJvdyIpfSxjLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LGMucHJvdG90eXBlLnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YiYmKGM9YShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlKSxjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSksYj8oYy5pblN0YXRlLmNsaWNrPSFjLmluU3RhdGUuY2xpY2ssYy5pc0luU3RhdGVUcnVlKCk/Yy5lbnRlcihjKTpjLmxlYXZlKGMpKTpjLnRpcCgpLmhhc0NsYXNzKCJpbiIpP2MubGVhdmUoYyk6Yy5lbnRlcihjKX0sYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy5oaWRlKGZ1bmN0aW9uKCl7YS4kZWxlbWVudC5vZmYoIi4iK2EudHlwZSkucmVtb3ZlRGF0YSgiYnMuIithLnR5cGUpLGEuJHRpcCYmYS4kdGlwLmRldGFjaCgpLGEuJHRpcD1udWxsLGEuJGFycm93PW51bGwsYS4kdmlld3BvcnQ9bnVsbH0pfTt2YXIgZD1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWIsYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yPWMsYS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b29sdGlwPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5wb3BvdmVyIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7IWUmJi9kZXN0cm95fGhpZGUvLnRlc3QoYil8fChlfHxkLmRhdGEoImJzLnBvcG92ZXIiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoInBvcG92ZXIiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtjLlZFUlNJT049IjMuMy42IixjLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksYy5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShiKSxhLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQiKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW3RoaXMub3B0aW9ucy5odG1sPyJzdHJpbmciPT10eXBlb2YgYz8iaHRtbCI6ImFwcGVuZCI6InRleHQiXShjKSxhLnJlbW92ZUNsYXNzKCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbiIpLGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5odG1sKCl8fGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cigiZGF0YS1jb250ZW50Iil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYi5jb250ZW50P2IuY29udGVudC5jYWxsKGFbMF0pOmIuY29udGVudCl9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi5hcnJvdyIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGMsZCl7dGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9YShhKGMpLmlzKGRvY3VtZW50LmJvZHkpP3dpbmRvdzpjKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYi5ERUZBVUxUUyxkKSx0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbigic2Nyb2xsLmJzLnNjcm9sbHNweSIsYS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpLHRoaXMucmVmcmVzaCgpLHRoaXMucHJvY2VzcygpfWZ1bmN0aW9uIGMoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLnNjcm9sbHNweSIpLGY9Im9iamVjdCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YSgiYnMuc2Nyb2xsc3B5IixlPW5ldyBiKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYyYmZVtjXSgpfSl9Yi5WRVJTSU9OPSIzLjMuNiIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPSJvZmZzZXQiLGQ9MDt0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksYS5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKXx8KGM9InBvc2l0aW9uIixkPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGU9Yi5kYXRhKCJ0YXJnZXQiKXx8Yi5hdHRyKCJocmVmIiksZj0vXiMuLy50ZXN0KGUpJiZhKGUpO3JldHVybiBmJiZmLmxlbmd0aCYmZi5pcygiOnZpc2libGUiKSYmW1tmW2NdKCkudG9wK2QsZV1dfHxudWxsfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yi5vZmZzZXRzLnB1c2godGhpc1swXSksYi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sYi5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGM9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQrYy10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGU9dGhpcy5vZmZzZXRzLGY9dGhpcy50YXJnZXRzLGc9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWMmJnRoaXMucmVmcmVzaCgpLGI+PWQpcmV0dXJuIGchPShhPWZbZi5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGEpO2lmKGcmJmI8ZVswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGE9ZS5sZW5ndGg7YS0tOylnIT1mW2FdJiZiPj1lW2FdJiYodm9pZCAwPT09ZVthKzFdfHxiPGVbYSsxXSkmJnRoaXMuYWN0aXZhdGUoZlthXSl9LGIucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIpe3RoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytiKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2IrJyJdJyxkPWEoYykucGFyZW50cygibGkiKS5hZGRDbGFzcygiYWN0aXZlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoZD1kLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSwKK2QudHJpZ2dlcigiYWN0aXZhdGUuYnMuc2Nyb2xsc3B5Iil9LGIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7YSh0aGlzLnNlbGVjdG9yKS5wYXJlbnRzVW50aWwodGhpcy5vcHRpb25zLnRhcmdldCwiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKX07dmFyIGQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9YyxhLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1iLGEuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5zY3JvbGxzcHk9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQuYnMuc2Nyb2xsc3B5LmRhdGEtYXBpIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweT0ic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKTtjLmNhbGwoYixiLmRhdGEoKSl9KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMudGFiIik7ZXx8ZC5kYXRhKCJicy50YWIiLGU9bmV3IGModGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXSgpfSl9dmFyIGM9ZnVuY3Rpb24oYil7dGhpcy5lbGVtZW50PWEoYil9O2MuVkVSU0lPTj0iMy4zLjYiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsYy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudCxjPWIuY2xvc2VzdCgidWw6bm90KC5kcm9wZG93bi1tZW51KSIpLGQ9Yi5kYXRhKCJ0YXJnZXQiKTtpZihkfHwoZD1iLmF0dHIoImhyZWYiKSxkPWQmJmQucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSksIWIucGFyZW50KCJsaSIpLmhhc0NsYXNzKCJhY3RpdmUiKSl7dmFyIGU9Yy5maW5kKCIuYWN0aXZlOmxhc3QgYSIpLGY9YS5FdmVudCgiaGlkZS5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmJbMF19KSxnPWEuRXZlbnQoInNob3cuYnMudGFiIix7cmVsYXRlZFRhcmdldDplWzBdfSk7aWYoZS50cmlnZ2VyKGYpLGIudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIWYuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBoPWEoZCk7dGhpcy5hY3RpdmF0ZShiLmNsb3Nlc3QoImxpIiksYyksdGhpcy5hY3RpdmF0ZShoLGgucGFyZW50KCksZnVuY3Rpb24oKXtlLnRyaWdnZXIoe3R5cGU6ImhpZGRlbi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6YlswXX0pLGIudHJpZ2dlcih7dHlwZToic2hvd24uYnMudGFiIixyZWxhdGVkVGFyZ2V0OmVbMF19KX0pfX19LGMucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIsZCxlKXtmdW5jdGlvbiBmKCl7Zy5yZW1vdmVDbGFzcygiYWN0aXZlIikuZmluZCgiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPSJ0YWIiXScpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSxiLmFkZENsYXNzKCJhY3RpdmUiKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLGg/KGJbMF0ub2Zmc2V0V2lkdGgsYi5hZGRDbGFzcygiaW4iKSk6Yi5yZW1vdmVDbGFzcygiZmFkZSIpLGIucGFyZW50KCIuZHJvcGRvd24tbWVudSIpLmxlbmd0aCYmYi5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLGUmJmUoKX12YXIgZz1kLmZpbmQoIj4gLmFjdGl2ZSIpLGg9ZSYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJihnLmxlbmd0aCYmZy5oYXNDbGFzcygiZmFkZSIpfHwhIWQuZmluZCgiPiAuZmFkZSIpLmxlbmd0aCk7Zy5sZW5ndGgmJmg/Zy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZikuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpmKCksZy5yZW1vdmVDbGFzcygiaW4iKX07dmFyIGQ9YS5mbi50YWI7YS5mbi50YWI9YixhLmZuLnRhYi5Db25zdHJ1Y3Rvcj1jLGEuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50YWI9ZCx0aGlzfTt2YXIgZT1mdW5jdGlvbihjKXtjLnByZXZlbnREZWZhdWx0KCksYi5jYWxsKGEodGhpcyksInNob3ciKX07YShkb2N1bWVudCkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0idGFiIl0nLGUpLm9uKCJjbGljay5icy50YWIuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9InBpbGwiXScsZSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5hZmZpeCIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiO2V8fGQuZGF0YSgiYnMuYWZmaXgiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKCJzY3JvbGwuYnMuYWZmaXguZGF0YS1hcGkiLGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpKS5vbigiY2xpY2suYnMuYWZmaXguZGF0YS1hcGkiLGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCx0aGlzKSksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuYWZmaXhlZD1udWxsLHRoaXMudW5waW49bnVsbCx0aGlzLnBpbm5lZE9mZnNldD1udWxsLHRoaXMuY2hlY2tQb3NpdGlvbigpfTtjLlZFUlNJT049IjMuMy42IixjLlJFU0VUPSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIixjLkRFRkFVTFRTPXtvZmZzZXQ6MCx0YXJnZXQ6d2luZG93fSxjLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksZj10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGc9dGhpcy4kdGFyZ2V0LmhlaWdodCgpO2lmKG51bGwhPWMmJiJ0b3AiPT10aGlzLmFmZml4ZWQpcmV0dXJuIGM+ZT8idG9wIjohMTtpZigiYm90dG9tIj09dGhpcy5hZmZpeGVkKXJldHVybiBudWxsIT1jP2UrdGhpcy51bnBpbjw9Zi50b3A/ITE6ImJvdHRvbSI6YS1kPj1lK2c/ITE6ImJvdHRvbSI7dmFyIGg9bnVsbD09dGhpcy5hZmZpeGVkLGk9aD9lOmYudG9wLGo9aD9nOmI7cmV0dXJuIG51bGwhPWMmJmM+PWU/InRvcCI6bnVsbCE9ZCYmaStqPj1hLWQ/ImJvdHRvbSI6ITF9LGMucHJvdG90eXBlLmdldFBpbm5lZE9mZnNldD1mdW5jdGlvbigpe2lmKHRoaXMucGlubmVkT2Zmc2V0KXJldHVybiB0aGlzLnBpbm5lZE9mZnNldDt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGMuUkVTRVQpLmFkZENsYXNzKCJhZmZpeCIpO3ZhciBhPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxiPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCk7cmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0PWIudG9wLWF9LGMucHJvdG90eXBlLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wPWZ1bmN0aW9uKCl7c2V0VGltZW91dChhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGVsZW1lbnQuaXMoIjp2aXNpYmxlIikpe3ZhciBiPXRoaXMuJGVsZW1lbnQuaGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0LGU9ZC50b3AsZj1kLmJvdHRvbSxnPU1hdGgubWF4KGEoZG9jdW1lbnQpLmhlaWdodCgpLGEoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpOyJvYmplY3QiIT10eXBlb2YgZCYmKGY9ZT1kKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKGU9ZC50b3AodGhpcy4kZWxlbWVudCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBmJiYoZj1kLmJvdHRvbSh0aGlzLiRlbGVtZW50KSk7dmFyIGg9dGhpcy5nZXRTdGF0ZShnLGIsZSxmKTtpZih0aGlzLmFmZml4ZWQhPWgpe251bGwhPXRoaXMudW5waW4mJnRoaXMuJGVsZW1lbnQuY3NzKCJ0b3AiLCIiKTt2YXIgaT0iYWZmaXgiKyhoPyItIitoOiIiKSxqPWEuRXZlbnQoaSsiLmJzLmFmZml4Iik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGopLGouaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuYWZmaXhlZD1oLHRoaXMudW5waW49ImJvdHRvbSI9PWg/dGhpcy5nZXRQaW5uZWRPZmZzZXQoKTpudWxsLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoaSkudHJpZ2dlcihpLnJlcGxhY2UoImFmZml4IiwiYWZmaXhlZCIpKyIuYnMuYWZmaXgiKX0iYm90dG9tIj09aCYmdGhpcy4kZWxlbWVudC5vZmZzZXQoe3RvcDpnLWItZn0pfX07dmFyIGQ9YS5mbi5hZmZpeDthLmZuLmFmZml4PWIsYS5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1jLGEuZm4uYWZmaXgubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmFmZml4PWQsdGhpc30sYSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweT0iYWZmaXgiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9Yy5kYXRhKCk7ZC5vZmZzZXQ9ZC5vZmZzZXR8fHt9LG51bGwhPWQub2Zmc2V0Qm90dG9tJiYoZC5vZmZzZXQuYm90dG9tPWQub2Zmc2V0Qm90dG9tKSxudWxsIT1kLm9mZnNldFRvcCYmKGQub2Zmc2V0LnRvcD1kLm9mZnNldFRvcCksYi5jYWxsKGMsZCl9KX0pfShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2N1c3RvbXJlY2lwZS5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2N1c3RvbXJlY2lwZS5qcwppbmRleCAxYzBlZjllLi45ZWE5NjAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9jdXN0b21yZWNpcGUuanMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvY3VzdG9tcmVjaXBlLmpzCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICBtc2cgKz0gIiA8c3Ryb25nPiIgKyBkZXAubmFtZSArICI8L3N0cm9uZz4iOwogCiAgICAgICAgICAgLyogQWRkIGFueSBjZWxscyBjdXJyZW50bHkgaW4gdmlldyB0byB0aGUgbGlzdCBvZiBjZWxscyB3aGljaCBnZXQKLSAgICAgICAgICAgKiBhbiBpbmxpbmUgbm90aWZpY2F0aW9uIGluc2lkZSB0aGVtIGFuZCB3aGljaCBjaGFuZ2UgYWRkL3JtIHN0YXRlCisgICAgICAgICAgICogYW4gbGlzdC1pbmxpbmUgbm90aWZpY2F0aW9uIGluc2lkZSB0aGVtIGFuZCB3aGljaCBjaGFuZ2UgYWRkL3JtIHN0YXRlCiAgICAgICAgICAgICovCiAgICAgICAgICAgZGVwQnRuQ2VsbCA9ICQoIiNwYWNrYWdlLWJ0bi1jZWxsLSIgKyBkZXAucGspOwogICAgICAgICAgIGJ0bkNlbGwgPSBidG5DZWxsLmFkZChkZXBCdG5DZWxsKTsKQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgICAgICAgIH0KIAogICAgICAgICAgIC8qIEFkZCBhbnkgY2VsbHMgY3VycmVudGx5IGluIHZpZXcgdG8gdGhlIGxpc3Qgb2YgY2VsbHMgd2hpY2ggZ2V0Ci0gICAgICAgICAgICogYW4gaW5saW5lIG5vdGlmaWNhdGlvbiBpbnNpZGUgdGhlbSBhbmQgd2hpY2ggY2hhbmdlIGFkZC9ybSBzdGF0ZQorICAgICAgICAgICAqIGFuIGxpc3QtaW5saW5lIG5vdGlmaWNhdGlvbiBpbnNpZGUgdGhlbSBhbmQgd2hpY2ggY2hhbmdlIGFkZC9ybSBzdGF0ZQogICAgICAgICAgICAqLwogICAgICAgICAgIGRlcEJ0bkNlbGwgPSAkKCIjcGFja2FnZS1idG4tY2VsbC0iICsgZGVwLnBrKTsKICAgICAgICAgICBidG5DZWxsID0gYnRuQ2VsbC5hZGQoZGVwQnRuQ2VsbCk7CkBAIC0yODEsNCArMjgxLDM2IEBACiAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RCdWlsZHNVcmwpOwogICAgIH0pOwogICB9KTsKKworICAkKCIjZGVsZXRlLWN1c3RvbS1yZWNpcGUtY29uZmlybWVkIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIGxpYnRvYXN0ZXIuZGlzYWJsZUFqYXhMb2FkaW5nVGltZXIoKTsKKyAgICAkKHRoaXMpLmZpbmQoJ1tkYXRhLXJvbGU9InN1Ym1pdC1zdGF0ZSJdJykuaGlkZSgpOworICAgICQodGhpcykuZmluZCgnW2RhdGEtcm9sZT0ibG9hZGluZy1zdGF0ZSJdJykuc2hvdygpOworICAgICQodGhpcykuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICdERUxFVEUnLAorICAgICAgICB1cmw6IGN0eC5yZWNpcGUueGhyQ3VzdG9tUmVjaXBlVXJsLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9PSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSAkKCc8c3Bhbj5Zb3UgaGF2ZSBkZWxldGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBjdXN0b20gaW1hZ2U6IDxzdHJvbmcgaWQ9ImRlbGV0ZWQtY3VzdG9tLWltYWdlLW5hbWUiPjwvc3Ryb25nPjwvc3Bhbj4nKTsKKyAgICAgICAgICAgIG1zZy5maW5kKCIjZGVsZXRlZC1jdXN0b20taW1hZ2UtbmFtZSIpLnRleHQoY3R4LnJlY2lwZS5uYW1lKTsKKworICAgICAgICAgICAgbGlidG9hc3Rlci5zZXROb3RpZmljYXRpb24oImN1c3RvbS1pbWFnZS1yZWNpcGUtZGVsZXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuaHRtbCgpKTsKKworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoZGF0YS5nb3RvVXJsKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9KTsKKworCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9pbXBvcnRsYXllci5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ltcG9ydGxheWVyLmpzCmluZGV4IDVhNTk3OTkuLjMwZGMyODIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ltcG9ydGxheWVyLmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ltcG9ydGxheWVyLmpzCkBAIC0xMCw0NSArMTAsMzEgQEAKICAgdmFyIGxheWVyRGVwSW5wdXQgPSAkKCIjbGF5ZXItZGVwZW5kZW5jeSIpOwogICB2YXIgbGF5ZXJOYW1lQ3RybCA9ICQoIiNsYXllci1uYW1lLWN0cmwiKTsKICAgdmFyIGR1cGxpY2F0ZWRMYXllck5hbWUgPSAkKCIjZHVwbGljYXRlZC1sYXllci1uYW1lLWhpbnQiKTsKKyAgdmFyIGxvY2FsRGlyUGF0aCA9ICQoIiNsb2NhbC1kaXItcGF0aCIpOwogCiAgIHZhciBsYXllckRlcHMgPSB7fTsKICAgdmFyIGxheWVyRGVwc0RlcHMgPSB7fTsKICAgdmFyIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKICAgdmFyIHZhbGlkTGF5ZXJOYW1lID0gL14oXHd8LSkrJC87CiAKLSAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyRGVwSW5wdXQsIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChsYXllckRlcElucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CiAgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gaXRlbTsKKyAgICBsYXllckRlcEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwogICB9KTsKIAotICAvLyBjaG9pY2VzIGF2YWlsYWJsZSBpbiB0aGUgdHlwZWFoZWFkCi0gIHZhciBsYXllckRlcHNDaG9pY2VzID0ge307Ci0KLSAgLy8gd2hlbiB0aGUgdHlwZWFoZWFkIGNob2ljZXMgY2hhbmdlLCBzdG9yZSBhbiBhcnJheSBvZiB0aGUgYXZhaWxhYmxlIGxheWVyCi0gIC8vIGNob2ljZXMgbG9jYWxseSwgdG8gdXNlIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlICJBZGQgbGF5ZXIiIGJ1dHRvbgotICBsYXllckRlcElucHV0Lm9uKCJ0eXBlYWhlYWQtY2hvaWNlcy1jaGFuZ2UiLCBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHsKLSAgICBsYXllckRlcHNDaG9pY2VzID0ge307Ci0KLSAgICBpZiAoZGF0YS5jaG9pY2VzKSB7Ci0gICAgICBkYXRhLmNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICBsYXllckRlcHNDaG9pY2VzW2l0ZW0ubmFtZV0gPSBpdGVtOwotICAgICAgfSk7Ci0gICAgfQorICBsYXllckRlcElucHV0Lm9uKCJ0eXBlYWhlYWQ6c2VsZWN0IiwgZnVuY3Rpb24oZXZlbnQsIGRhdGEpeworICAgIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9IGRhdGE7CiAgIH0pOwogCisgIC8vIERpc2FibGUgbG9jYWwgZGlyIHJlcG8gd2hlbiBwYWdlIGlzIGxvYWRlZC4KKyAgJCgnI2xvY2FsLWRpcicpLmhpZGUoKTsKKwogICAvLyBkaXNhYmxlIHRoZSAiQWRkIGxheWVyIiBidXR0b24gd2hlbiB0aGUgbGF5ZXIgaW5wdXQgdHlwZWFoZWFkIGlzIGVtcHR5CiAgIC8vIG9yIG5vdCBpbiB0aGUgdHlwZWFoZWFkIGNob2ljZXMKLSAgbGF5ZXJEZXBJbnB1dC5vbigiaW5wdXQgY2hhbmdlIiwgZnVuY3Rpb24gKCkgewotICAgIC8vIGdldCB0aGUgY2hvaWNlcyBmcm9tIHRoZSB0eXBlYWhlYWQKLSAgICB2YXIgY2hvaWNlID0gbGF5ZXJEZXBzQ2hvaWNlc1skKHRoaXMpLnZhbCgpXTsKLQotICAgIGlmIChjaG9pY2UpIHsKLSAgICAgIGxheWVyRGVwQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7Ci0gICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSBjaG9pY2U7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgbGF5ZXJEZXBCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKLSAgICAgIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9IHVuZGVmaW5lZDsKLSAgICB9CisgIGxheWVyRGVwSW5wdXQub24oImlucHV0IGNoYW5nZSIsIGZ1bmN0aW9uKCl7CisgICAgbGF5ZXJEZXBCdG4uYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwogICB9KTsKIAogICAvKiBXZSBhdXRvbWF0aWNhbGx5IGFkZCAib3BlbmVtYmVkZGVkLWNvcmUiIGxheWVyIGZvciBjb252ZW5pZW5jZSBhcyBhCkBAIC03MCw3ICs1Niw3IEBACiAgICAgbGF5ZXJEZXBzW2N1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5pZF0gPSBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb247CiAKICAgICAvKiBNYWtlIGEgbGlzdCBpdGVtIGZvciB0aGUgbmV3IGxheWVyIGRlcGVuZGVuY3kgKi8KLSAgICB2YXIgbmV3TGF5ZXJEZXAgPSAkKCI8bGk+PGE+PC9hPjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiRGVsZXRlXCI+PC9zcGFuPjwvbGk+Iik7CisgICAgdmFyIG5ld0xheWVyRGVwID0gJCgiPGxpPjxhPjwvYT48c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2hcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiB0aXRsZT1cIlJlbW92ZVwiPjwvc3Bhbj48L2xpPiIpOwogCiAgICAgbmV3TGF5ZXJEZXAuZGF0YSgnbGF5ZXItaWQnLCBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24uaWQpOwogICAgIG5ld0xheWVyRGVwLmNoaWxkcmVuKCJzcGFuIikudG9vbHRpcCgpOwpAQCAtOTEsNyArNzcsOCBAQAogCiAgICAgJCgiI2xheWVyLWRlcHMtbGlzdCIpLmFwcGVuZChuZXdMYXllckRlcCk7CiAKLSAgICBsaWJ0b2FzdGVyLmdldExheWVyRGVwc0ZvclByb2plY3QoY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmxheWVyZGV0YWlsdXJsLCBmdW5jdGlvbiAoZGF0YSl7CisgICAgbGlidG9hc3Rlci5nZXRMYXllckRlcHNGb3JQcm9qZWN0KGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5sYXllcmRldGFpbHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpewogICAgICAgICAvKiBUaGVzZSBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgbGF5ZXIgYWRkZWQgYXMgYSBkZXBlbmRlbmN5ICovCiAgICAgICAgIGlmIChkYXRhLmxpc3QubGVuZ3RoID4gMCkgewogICAgICAgICAgIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi51cmwgPSBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmw7CkBAIC0xMDUsNyArOTIsOCBAQAogICAgICAgfSwgbnVsbCk7CiAgIH0pOwogCi0gIGltcG9ydEFuZEFkZEJ0bi5jbGljayhmdW5jdGlvbigpeworICBpbXBvcnRBbmRBZGRCdG4uY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgIC8qIFRoaXMgaXMgYSBsaXN0IG9mIHRoZSBuYW1lcyBmcm9tIGxheWVyRGVwcyBmb3IgdGhlIGxheWVyIGRlcHMKICAgICAgKiBtb2RhbCBkaWFsb2cgYm9keQogICAgICAqLwpAQCAtMTQ1LDcgKzEzMyw5IEBACiAgICAgICB2YXIgYm9keSA9ICI8c3Ryb25nPiIrbGF5ZXIubmFtZSsiPC9zdHJvbmc+J3MgZGVwZW5kZW5jaWVzICgiKwogICAgICAgICBkZXBOYW1lcy5qb2luKCIsICIpKyI8L3NwYW4+KSByZXF1aXJlIHNvbWUgbGF5ZXJzIHRoYXQgYXJlIG5vdCBhZGRlZCB0byB5b3VyIHByb2plY3QuIFNlbGVjdCB0aGUgb25lcyB5b3Ugd2FudCB0byBhZGQ6PC9wPiI7CiAKLSAgICAgIHNob3dMYXllckRlcHNNb2RhbChsYXllciwgZGVwRGVwc0FycmF5LCB0aXRsZSwgYm9keSwgZmFsc2UsIGZ1bmN0aW9uKGxheWVyT2JzTGlzdCl7CisgICAgICBzaG93TGF5ZXJEZXBzTW9kYWwobGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVwRGVwc0FycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBib2R5LCBmYWxzZSwgZnVuY3Rpb24obGF5ZXJPYnNMaXN0KXsKICAgICAgICAgLyogQWRkIHRoZSBhY2NlcHRlZCBsYXllciBkZXBlbmRlbmNpZXMnIGlkcyB0byB0aGUgYWxsRGVwcyBhcnJheSAqLwogICAgICAgICBmb3IgKHZhciBrZXkgaW4gbGF5ZXJPYnNMaXN0KXsKICAgICAgICAgICBhbGxEZXBzLnB1c2gobGF5ZXJPYnNMaXN0W2tleV0uaWQpOwpAQCAtMTY3LDggKzE1NywxNiBAQAogICAgICAgICBkaXJfcGF0aDogJCgiI2xheWVyLXN1YmRpciIpLnZhbCgpLAogICAgICAgICBwcm9qZWN0X2lkOiBsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0SWQsCiAgICAgICAgIGxheWVyX2RlcHM6IGxheWVyRGVwc0NzdiwKKyAgICAgICAgbG9jYWxfc291cmNlX2RpcjogJCgnI2xvY2FsLWRpci1wYXRoJykudmFsKCksCiAgICAgICB9OwogCisgICAgICBpZiAoJCgnaW5wdXRbbmFtZT1yZXBvXTpjaGVja2VkJykudmFsKCkgPT0gImdpdCIpIHsKKyAgICAgICAgbGF5ZXJEYXRhLmxvY2FsX3NvdXJjZV9kaXIgPSAiIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxheWVyRGF0YS52Y3NfdXJsID0gIiI7CisgICAgICAgIGxheWVyRGF0YS5naXRfcmVmID0gIiI7CisgICAgICB9CisKICAgICAgICQuYWpheCh7CiAgICAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgICAgIHVybDogY3R4LnhockltcG9ydExheWVyVXJsLApAQCAtMTc4LDkgKzE3Niw4IEBACiAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CiAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEuZXJyb3IpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLyogU3VjY2VzcyBsYXllciBpbXBvcnQgbm93IGdvIHRvIHRoZSBwcm9qZWN0IHBhZ2UgKi8KLSAgICAgICAgICAgICAgJC5jb29raWUoJ2xheWVyLWltcG9ydGVkLWFsZXJ0JywgSlNPTi5zdHJpbmdpZnkoZGF0YSksIHsgcGF0aDogJy8nfSk7Ci0gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsKyc/bm90aWZ5PWxheWVyLWltcG9ydGVkJyk7CisgICAgICAgICAgICAgIGNyZWF0ZUltcG9ydGVkTm90aWZpY2F0aW9uKGRhdGEpOworICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfSwKICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKQEAgLTE5MSw2ICsxODgsMzAgQEAKICAgICB9CiAgIH0pOwogCisgIC8qIExheWVyIGltcG9ydGVkIG5vdGlmaWNhdGlvbiAqLworICBmdW5jdGlvbiBjcmVhdGVJbXBvcnRlZE5vdGlmaWNhdGlvbihpbXBvcnRlZCl7CisgICAgdmFyIG1lc3NhZ2UgPSAiTGF5ZXIgaW1wb3J0ZWQiOworCisgICAgaWYgKGltcG9ydGVkLmRlcHNfYWRkZWQubGVuZ3RoID09PSAwKSB7CisgICAgICBtZXNzYWdlID0gIllvdSBoYXZlIGltcG9ydGVkIDxzdHJvbmc+PGEgY2xhc3M9XCJhbGVydC1saW5rXCIgaHJlZj1cIiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrIlwiPiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubmFtZSsiPC9hPjwvc3Ryb25nPiBhbmQgYWRkZWQgaXQgdG8geW91ciBwcm9qZWN0LiI7CisgICAgfSBlbHNlIHsKKworICAgICAgdmFyIGxpbmtzID0gIjxhIGhyZWY9XCIiK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLmxheWVyZGV0YWlsdXJsKyJcIj4iK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLm5hbWUrIjwvYT4sICI7CisKKyAgICAgIGltcG9ydGVkLmRlcHNfYWRkZWQubWFwIChmdW5jdGlvbihpdGVtLCBpbmRleCl7CisgICAgICAgIGxpbmtzICs9JzxhIGhyZWY9IicraXRlbS5sYXllcmRldGFpbHVybCsnIj4nK2l0ZW0ubmFtZSsnPC9hPic7CisgICAgICAgIC8qSWYgd2UncmUgYXQgdGhlIGxhc3QgZWxlbWVudCB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBjb21tYSAqLworICAgICAgICBpZiAoaW1wb3J0ZWQuZGVwc19hZGRlZFtpbmRleCsxXSAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgIGxpbmtzICs9ICcsICc7CisgICAgICB9KTsKKworICAgICAgLyogTGVuZ3RoICsgMSBoZXJlIHRvIGRvIGRlcHMgKyB0aGUgaW1wb3J0ZWQgbGF5ZXIgKi8KKyAgICAgIG1lc3NhZ2UgPSAnWW91IGhhdmUgaW1wb3J0ZWQgPHN0cm9uZz48YSBocmVmPSInK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLmxheWVyZGV0YWlsdXJsKyciPicraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubmFtZSsnPC9hPjwvc3Ryb25nPiBhbmQgYWRkZWQgPHN0cm9uZz4nKyhpbXBvcnRlZC5kZXBzX2FkZGVkLmxlbmd0aCsxKSsnPC9zdHJvbmc+IGxheWVycyB0byB5b3VyIHByb2plY3Q6IDxzdHJvbmc+JytsaW5rcysnPC9zdHJvbmc+JzsKKyAgICB9CisKKyAgICBsaWJ0b2FzdGVyLnNldE5vdGlmaWNhdGlvbigibGF5ZXItaW1wb3J0ZWQiLCBtZXNzYWdlKTsKKyAgfQorCiAgIGZ1bmN0aW9uIGVuYWJsZV9pbXBvcnRfYnRuKGVuYWJsZWQpIHsKICAgICB2YXIgaW1wb3J0QW5kQWRkSGludCA9ICQoIiNpbXBvcnQtYW5kLWFkZC1oaW50Iik7CiAKQEAgLTIwNywyNSArMjI4LDQ4IEBACiAgIGZ1bmN0aW9uIGNoZWNrX2Zvcm0oKSB7CiAgICAgdmFyIHZhbGlkID0gZmFsc2U7CiAgICAgdmFyIGlucHV0cyA9ICQoImlucHV0OnJlcXVpcmVkIik7CisgICAgdmFyIGlucHV0U3RyID0gaW5wdXRzLnZhbCgpLnNwbGl0KCIiKTsKIAotICAgIGZvciAodmFyIGk9MDsgaTxpbnB1dHMubGVuZ3RoOyBpKyspewotICAgICAgaWYgKCEodmFsaWQgPSBpbnB1dHNbaV0udmFsdWUpKXsKKyAgICBmb3IgKHZhciBpPTA7IGk8aW5wdXRzLnZhbCgpLmxlbmd0aDsgaSsrKXsKKyAgICAgIGlmICghKHZhbGlkID0gaW5wdXRTdHJbaV0pKXsKICAgICAgICAgZW5hYmxlX2ltcG9ydF9idG4oZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodmFsaWQpCi0gICAgICBlbmFibGVfaW1wb3J0X2J0bih0cnVlKTsKKyAgICBpZiAodmFsaWQpIHsKKyAgICAgIGlmICgkKCIjbG9jYWwtZGlyLXJhZGlvIikucHJvcCgiY2hlY2tlZCIpICYmCisgICAgICAgICAgbG9jYWxEaXJQYXRoLnZhbCgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgZW5hYmxlX2ltcG9ydF9idG4odHJ1ZSk7CisgICAgICB9CisKKyAgICAgIGlmICgkKCIjZ2l0LXJlcG8tcmFkaW8iKS5wcm9wKCJjaGVja2VkIikgJiYKKyAgICAgICAgICB2Y3NVUkxJbnB1dC52YWwoKS5sZW5ndGggPiAwICYmIGdpdFJlZklucHV0LnZhbCgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgZW5hYmxlX2ltcG9ydF9idG4odHJ1ZSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGlucHV0cy52YWwoKS5sZW5ndGggPT0gMCkKKyAgICAgIGVuYWJsZV9pbXBvcnRfYnRuKGZhbHNlKTsKICAgfQogCiAgIGZ1bmN0aW9uIGxheWVyRXhpc3RzRXJyb3IobGF5ZXIpewogICAgIHZhciBkdXBMYXllckluZm8gPSAkKCIjZHVwbGljYXRlLWxheWVyLWluZm8iKTsKLSAgICBkdXBMYXllckluZm8uZmluZCgiLmR1cC1sYXllci1uYW1lIikudGV4dChsYXllci5uYW1lKTsKLSAgICBkdXBMYXllckluZm8uZmluZCgiLmR1cC1sYXllci1saW5rIikuYXR0cigiaHJlZiIsIGxheWVyLmxheWVyZGV0YWlsdXJsKTsKLSAgICBkdXBMYXllckluZm8uZmluZCgiI2R1cC1sYXllci12Y3MtdXJsIikudGV4dChsYXllci52Y3NfdXJsKTsKLSAgICBkdXBMYXllckluZm8uZmluZCgiI2R1cC1sYXllci1yZXZpc2lvbiIpLnRleHQobGF5ZXIudmNzX3JlZmVyZW5jZSk7CiAKKyAgICBpZiAobGF5ZXIubG9jYWxfc291cmNlX2RpcikgeworICAgICAgJCgiI2dpdC1sYXllci1kdXAiKS5oaWRlKCk7CisgICAgICAkKCIjbG9jYWwtbGF5ZXItZHVwIikuZmFkZUluKCk7CisgICAgICBkdXBMYXllckluZm8uZmluZCgiLmR1cC1sYXllci1uYW1lIikudGV4dChsYXllci5uYW1lKTsKKyAgICAgIGR1cExheWVySW5mby5maW5kKCIuZHVwLWxheWVyLWxpbmsiKS5hdHRyKCJocmVmIiwgbGF5ZXIubGF5ZXJkZXRhaWx1cmwpOworICAgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIiNkdXAtbG9jYWwtc291cmNlLWRpci1uYW1lIikudGV4dChsYXllci5sb2NhbF9zb3VyY2VfZGlyKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgiI2dpdC1sYXllci1kdXAiKS5mYWRlSW4oKTsKKyAgICAgICQoIiNsb2NhbC1sYXllci1kdXAiKS5oaWRlKCk7CisgICAgICBkdXBMYXllckluZm8uZmluZCgiLmR1cC1sYXllci1uYW1lIikudGV4dChsYXllci5uYW1lKTsKKyAgICAgIGR1cExheWVySW5mby5maW5kKCIuZHVwLWxheWVyLWxpbmsiKS5hdHRyKCJocmVmIiwgbGF5ZXIubGF5ZXJkZXRhaWx1cmwpOworICAgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIiNkdXAtbGF5ZXItdmNzLXVybCIpLnRleHQobGF5ZXIudmNzX3VybCk7CisgICAgICBkdXBMYXllckluZm8uZmluZCgiI2R1cC1sYXllci1yZXZpc2lvbiIpLnRleHQobGF5ZXIudmNzX3JlZmVyZW5jZSk7CisgICAgfQogICAgICQoIi5maWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIikuZmFkZU91dChmdW5jdGlvbigpewogCiAgICAgICBkdXBMYXllckluZm8uZmFkZUluKCk7CkBAIC0yMzMsMTMgKzI3NywxMyBAQAogICB9CiAKICAgbGF5ZXJOYW1lSW5wdXQub24oJ2JsdXInLCBmdW5jdGlvbigpIHsKLSAgICAgIGlmICghJCh0aGlzKS52YWwoKSl7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHZhciBuYW1lID0gJCh0aGlzKS52YWwoKTsKKyAgICBpZiAoISQodGhpcykudmFsKCkpeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgbmFtZSA9ICQodGhpcykudmFsKCk7CiAKLSAgICAgIC8qIENoZWNrIGlmIHRoZSBsYXllciBuYW1lIGV4aXN0cyAqLwotICAgICAgJC5nZXRKU09OKGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwKKyAgICAvKiBDaGVjayBpZiB0aGUgbGF5ZXIgbmFtZSBleGlzdHMgKi8KKyAgICAkLmdldEpTT04obGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLAogICAgICAgICB7IGluY2x1ZGVfYWRkZWQ6ICJ0cnVlIiAsIHNlYXJjaDogbmFtZSwgZm9ybWF0OiAianNvbiIgfSwKICAgICAgICAgZnVuY3Rpb24obGF5ZXIpIHsKICAgICAgICAgICBpZiAobGF5ZXIucmVzdWx0cy5sZW5ndGggPiAwKSB7CkBAIC0yNjIsNyArMzA2LDcgQEAKIAogICBsYXllck5hbWVJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICBpZiAoJCh0aGlzKS52YWwoKSAmJiAhdmFsaWRMYXllck5hbWUudGVzdCgkKHRoaXMpLnZhbCgpKSl7Ci0gICAgICBsYXllck5hbWVDdHJsLmFkZENsYXNzKCJlcnJvciIpCisgICAgICBsYXllck5hbWVDdHJsLmFkZENsYXNzKCJoYXMtZXJyb3IiKQogICAgICAgJCgiI2ludmFsaWQtbGF5ZXItbmFtZS1oaW50Iikuc2hvdygpOwogICAgICAgZW5hYmxlX2ltcG9ydF9idG4oZmFsc2UpOwogICAgICAgcmV0dXJuOwpAQCAtMjcwLDE2ICszMTQsMTkgQEAKIAogICAgIGlmICgkKCIjZHVwbGljYXRlLWxheWVyLWluZm8iKS5jc3MoImRpc3BsYXkiKSAhPSAiTm9uZSIpewogICAgICAgJCgiI2R1cGxpY2F0ZS1sYXllci1pbmZvIikuZmFkZU91dChmdW5jdGlvbigpewotICAgICAgICAkKCIuZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSIpLnNob3coKTsKLSAgICAgIH0pOworICAgICAgJCgiLmZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiKS5zaG93KCk7CisgICAgICByYWRpb0Rpc3BsYXkoKTsKKyAgICB9KTsKIAotICAgIH0KKyAgfQorCisgICAgcmFkaW9EaXNwbGF5KCk7CiAKICAgICAvKiBEb24ndCByZW1vdmUgdGhlIGVycm9yIGNsYXNzIGlmIHdlJ3JlIGRpc3BsYXlpbmcgdGhlIGVycm9yIGZvciBhbm90aGVyCiAgICAgICogcmVhc29uLgogICAgICAqLwogICAgIGlmICghZHVwbGljYXRlZExheWVyTmFtZS5pcygiOnZpc2libGUiKSkKLSAgICAgIGxheWVyTmFtZUN0cmwucmVtb3ZlQ2xhc3MoImVycm9yIikKKyAgICAgIGxheWVyTmFtZUN0cmwucmVtb3ZlQ2xhc3MoImhhcy1lcnJvciIpCiAKICAgICAkKCIjaW52YWxpZC1sYXllci1uYW1lLWhpbnQiKS5oaWRlKCk7CiAgICAgY2hlY2tfZm9ybSgpOwpAQCAtMzAwLDQgKzM0Nyw3MiBAQAogICAgIH0KICAgfSk7CiAKKyAgZnVuY3Rpb24gcmFkaW9EaXNwbGF5KCkgeworICAgIGlmICgkKCdpbnB1dFtuYW1lPXJlcG9dOmNoZWNrZWQnKS52YWwoKSA9PSAibG9jYWwiKSB7CisgICAgICAkKCcjZ2l0LXJlcG8nKS5oaWRlKCk7CisgICAgICAkKCcjaW1wb3J0LWdpdC1sYXllci1hbmQtYWRkLWhpbnQnKS5oaWRlKCk7CisgICAgICAkKCcjbG9jYWwtZGlyJykuZmFkZUluKCk7CisgICAgICAkKCcjaW1wb3J0LWxvY2FsLWRpci1hbmQtYWRkLWhpbnQnKS5mYWRlSW4oKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgnI2xvY2FsLWRpcicpLmhpZGUoKTsKKyAgICAgICQoJyNpbXBvcnQtbG9jYWwtZGlyLWFuZC1hZGQtaGludCcpLmhpZGUoKTsKKyAgICAgICQoJyNnaXQtcmVwbycpLmZhZGVJbigpOworICAgICAgJCgnI2ltcG9ydC1naXQtbGF5ZXItYW5kLWFkZC1oaW50JykuZmFkZUluKCk7CisgICAgfQorICB9CisKKyAgJCgnaW5wdXQ6cmFkaW9bbmFtZT0icmVwbyJdJykuY2hhbmdlKGZ1bmN0aW9uKCkgeworICAgIHJhZGlvRGlzcGxheSgpOworICAgIGlmICgkKCIjbG9jYWwtZGlyLXJhZGlvIikucHJvcCgiY2hlY2tlZCIpKSB7CisgICAgICBpZiAobG9jYWxEaXJQYXRoLnZhbCgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgZW5hYmxlX2ltcG9ydF9idG4odHJ1ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBlbmFibGVfaW1wb3J0X2J0bihmYWxzZSk7CisgICAgICB9CisgICAgfQorICAgIGlmICgkKCIjZ2l0LXJlcG8tcmFkaW8iKS5wcm9wKCJjaGVja2VkIikpIHsKKyAgICAgIGlmICh2Y3NVUkxJbnB1dC52YWwoKS5sZW5ndGggPiAwICYmIGdpdFJlZklucHV0LnZhbCgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgZW5hYmxlX2ltcG9ydF9idG4odHJ1ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBlbmFibGVfaW1wb3J0X2J0bihmYWxzZSk7CisgICAgICB9CisgICAgfQorICB9KTsKKworICBsb2NhbERpclBhdGgub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICBpZiAoJCh0aGlzKS52YWwoKS50cmltKCkubGVuZ3RoID09IDApIHsKKyAgICAgICQoJyNpbXBvcnQtYW5kLWFkZC1idG4nKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAkKCcjbG9jYWwtZGlyJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgJCgnI2hpbnRFcnJvci1kaXItYWJzLXBhdGgnKS5zaG93KCk7CisgICAgICAkKCcjaGludEVycm9yLWRpci1wYXRoLXN0YXJ0cy13aXRoLXNsYXNoJykuc2hvdygpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpOworICAgICAgdmFyIHJlQmVnaW5XaXRoU2xhc2ggPSAvXlwvLzsKKyAgICAgIHZhciByZUNoZWNrVmFyaWFibGUgPSAvXlwkLzsKKyAgICAgIHZhciByZSA9IC8oWyA8PlxcfCI6XC4lXD9cKl0rKS87CisKKyAgICAgIHZhciBpbnZhbGlkRGlyID0gcmUudGVzdChpbnB1dC52YWwoKSk7CisgICAgICB2YXIgaW52YWxpZFNsYXNoID0gcmVCZWdpbldpdGhTbGFzaC50ZXN0KGlucHV0LnZhbCgpKTsKKyAgICAgIHZhciBpbnZhbGlkVmFyID0gcmVDaGVja1ZhcmlhYmxlLnRlc3QoaW5wdXQudmFsKCkpOworCisgICAgICBpZiAoIWludmFsaWRTbGFzaCAmJiAhaW52YWxpZFZhcikgeworICAgICAgICAkKCcjbG9jYWwtZGlyJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgICAkKCcjaW1wb3J0LWFuZC1hZGQtYnRuJykuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAkKCcjaGludEVycm9yLWRpci1hYnMtcGF0aCcpLnNob3coKTsKKyAgICAgICAgJCgnI2hpbnRFcnJvci1kaXItcGF0aC1zdGFydHMtd2l0aC1zbGFzaCcpLnNob3coKTsKKyAgICAgIH0gZWxzZSBpZiAoaW52YWxpZERpcikgeworICAgICAgICAkKCcjbG9jYWwtZGlyJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgICAkKCcjaW1wb3J0LWFuZC1hZGQtYnRuJykuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAkKCcjaGludEVycm9yLWRpci1wYXRoJykuc2hvdygpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJCgnI2xvY2FsLWRpcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKTsKKyAgICAgICAgaWYgKGxheWVyTmFtZUlucHV0LnZhbCgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAkKCcjaW1wb3J0LWFuZC1hZGQtYnRuJykucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICAgfQorICAgICAgICAkKCcjaGludEVycm9yLWRpci1hYnMtcGF0aCcpLmhpZGUoKTsKKyAgICAgICAgJCgnI2hpbnRFcnJvci1kaXItcGF0aC1zdGFydHMtd2l0aC1zbGFzaCcpLmhpZGUoKTsKKyAgICAgICAgJCgnI2hpbnRFcnJvci1kaXItcGF0aCcpLmhpZGUoKTsKKyAgICAgIH0KKyAgICB9CisgIH0pOwogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanNyZW5kZXIubWluLmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanNyZW5kZXIubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Y2FjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qc3JlbmRlci5taW4uanMKQEAgLTAsMCArMSw0IEBACisvKiEgSnNSZW5kZXIgdjAuOS43OCAoQmV0YSk6IGh0dHA6Ly9qc3ZpZXdzLmNvbS8janNyZW5kZXIgKi8KKy8qISAqKlZFUlNJT04gRk9SIFdFQioqIChGb3IgTk9ERS5KUyBzZWUgaHR0cDovL2pzdmlld3MuY29tL2Rvd25sb2FkL2pzcmVuZGVyLW5vZGUuanMpICovCishZnVuY3Rpb24oZSx0KXt2YXIgbj10LmpRdWVyeTsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bj9lKHQsbik6ZnVuY3Rpb24obil7aWYobiYmIW4uZm4pdGhyb3ciUHJvdmlkZSBqUXVlcnkgb3IgbnVsbCI7cmV0dXJuIGUodCxuKX06ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX0pOmUodCwhMSl9KGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixyPXRoaXMsaT1yLmJhc2U7cmV0dXJuIHIuYmFzZT1lLG49dC5hcHBseShyLGFyZ3VtZW50cyksci5iYXNlPWksbn19ZnVuY3Rpb24gcihlLHQpe3JldHVybiB0ZSh0KSYmKHQ9bihlP2UuX2Q/ZTpuKHMsZSk6cyx0KSx0Ll9kPTEpLHR9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiB0LnByb3BzKVJlLnRlc3QobikmJihlW25dPXIoZVtuXSx0LnByb3BzW25dKSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBzKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gYShlKXt0cnl7dGhyb3cgY29uc29sZS5sb2coIkpzUmVuZGVyIGRiZyBicmVha3BvaW50OiAiK2UpLCJkYmcgYnJlYWtwb2ludCJ9Y2F0Y2godCl7fXJldHVybiB0aGlzLmJhc2U/dGhpcy5iYXNlQXBwbHkoYXJndW1lbnRzKTplfWZ1bmN0aW9uIGQoZSl7dGhpcy5uYW1lPSh0Lmxpbms/IkpzVmlld3MiOiJKc1JlbmRlciIpKyIgRXJyb3IiLHRoaXMubWVzc2FnZT1lfHx0aGlzLm5hbWV9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gZT8oZGUuZGVsaW1pdGVycz1bZSx0LHZlPW4/bi5jaGFyQXQoMCk6dmVdLHBlPWUuY2hhckF0KDApLGNlPWUuY2hhckF0KDEpLGZlPXQuY2hhckF0KDApLGdlPXQuY2hhckF0KDEpLGU9IlxcIitwZSsiKFxcIit2ZSsiKT9cXCIrY2UsdD0iXFwiK2ZlKyJcXCIrZ2UsRz0iKD86KFxcdysoPz1bXFwvXFxzXFwiK2ZlKyJdKSl8KFxcdyspPyg6KXwoPil8KFxcKikpXFxzKigoPzpbXlxcIitmZSsiXXxcXCIrZmUrIig/IVxcIitnZSsiKSkqPykiLGFlLnJUYWc9Iig/OiIrRysiKSIsRz1uZXcgUmVnRXhwKCIoPzoiK2UrRysiKFxcLyk/fFxcIitwZSsiKFxcIit2ZSsiKT9cXCIrY2UrIig/Oig/OlxcLyhcXHcrKSlcXHMqfCEtLVtcXHNcXFNdKj8tLSkpIit0LCJnIiksVz1uZXcgUmVnRXhwKCI8Lio+fChbXlxcXFxdfF4pW3t9XXwiK2UrIi4qIit0KSxsZSk6ZGUuZGVsaW1pdGVyc31mdW5jdGlvbiBwKGUsdCl7dHx8ZT09PSEwfHwodD1lLGU9dm9pZCAwKTt2YXIgbixyLGksbyxzPXRoaXMsYT0hdHx8InJvb3QiPT09dDtpZihlKXtpZihvPXQmJnMudHlwZT09PXQmJnMsIW8paWYobj1zLnZpZXdzLHMuXy51c2VLZXkpe2ZvcihyIGluIG4paWYobz10P25bcl0uZ2V0KGUsdCk6bltyXSlicmVha31lbHNlIGZvcihyPTAsaT1uLmxlbmd0aDshbyYmaT5yO3IrKylvPXQ/bltyXS5nZXQoZSx0KTpuW3JdfWVsc2UgaWYoYSlmb3IoO3MucGFyZW50OylvPXMscz1zLnBhcmVudDtlbHNlIGZvcig7cyYmIW87KW89cy50eXBlPT09dD9zOnZvaWQgMCxzPXMucGFyZW50O3JldHVybiBvfWZ1bmN0aW9uIGMoKXt2YXIgZT10aGlzLmdldCgiaXRlbSIpO3JldHVybiBlP2UuaW5kZXg6dm9pZCAwfWZ1bmN0aW9uIGYoKXtyZXR1cm4gdGhpcy5pbmRleH1mdW5jdGlvbiBnKHQpe3ZhciBuLHI9dGhpcyxpPXIubGlua0N0eCxvPShyLmN0eHx8e30pW3RdO3JldHVybiB2b2lkIDA9PT1vJiZpJiZpLmN0eCYmKG89aS5jdHhbdF0pLHZvaWQgMD09PW8mJihvPW9lW3RdKSxvJiZ0ZShvKSYmIW8uX3dycCYmKG49ZnVuY3Rpb24oKXtyZXR1cm4gby5hcHBseSh0aGlzJiZ0aGlzIT09ZT90aGlzOnIsYXJndW1lbnRzKX0sbi5fd3JwPXIsdShuLG8pKSxufHxvfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUmJihlLmZuP2U6dGhpcy5nZXRSc2MoInRlbXBsYXRlcyIsZSl8fHJlKGUpKX1mdW5jdGlvbiBoKGUsdCxuLHIpe3ZhciBvLHMsYT0ibnVtYmVyIj09dHlwZW9mIG4mJnQudG1wbC5ibmRzW24tMV0sZD10LmxpbmtDdHg7cmV0dXJuIHZvaWQgMCE9PXI/bj1yPXtwcm9wczp7fSxhcmdzOltyXX06YSYmKG49YSh0LmRhdGEsdCxhZSkpLHM9bi5hcmdzWzBdLChlfHxhKSYmKG89ZCYmZC50YWcsb3x8KG89dShuZXcgYWUuX3RnLHtfOntpbmxpbmU6IWQsYm5kOmEsdW5saW5rZWQ6ITB9LHRhZ05hbWU6IjoiLGN2dDplLGZsb3c6ITAsdGFnQ3R4Om59KSxkJiYoZC50YWc9byxvLmxpbmtDdHg9ZCksbi5jdHg9TChuLmN0eCwoZD9kLnZpZXc6dCkuY3R4KSksby5fZXI9ciYmcyxpKG8sbiksbi52aWV3PXQsby5jdHg9bi5jdHh8fG8uY3R4fHx7fSxuLmN0eD12b2lkIDAscz1vLmN2dEFyZ3MoInRydWUiIT09ZSYmZSlbMF0scz1hJiZ0Ll8ub25SZW5kZXI/dC5fLm9uUmVuZGVyKHMsdCxvKTpzKSx2b2lkIDAhPXM/czoiIn1mdW5jdGlvbiBtKGUpe3ZhciB0PXRoaXMsbj10LnRhZ0N0eCxyPW4udmlldyxpPW4uYXJncztyZXR1cm4gZT1lfHx0LmNvbnZlcnQsZT1lJiYoIiIrZT09PWU/ci5nZXRSc2MoImNvbnZlcnRlcnMiLGUpfHxTKCJVbmtub3duIGNvbnZlcnRlcjogJyIrZSsiJyIpOmUpLGk9aS5sZW5ndGh8fG4uaW5kZXg/ZT9pLnNsaWNlKCk6aTpbci5kYXRhXSxlJiYoZS5kZXBlbmRzJiYodC5kZXBlbmRzPWFlLmdldERlcHModC5kZXBlbmRzLHQsZS5kZXBlbmRzLGUpKSxpWzBdPWUuYXBwbHkodCxpKSksaX1mdW5jdGlvbiB3KGUsdCl7Zm9yKHZhciBuLHIsaT10aGlzO3ZvaWQgMD09PW4mJmk7KXI9aS50bXBsJiZpLnRtcGxbZV0sbj1yJiZyW3RdLGk9aS5wYXJlbnQ7cmV0dXJuIG58fFlbZV1bdF19ZnVuY3Rpb24geChlLHQsbixyLG8scyl7dD10fHxYO3ZhciBhLGQsdSxsLHAsYyxmLGcsdixoLG0sdyx4LGIsXyx5LGssaixDLEE9IiIsVD10LmxpbmtDdHh8fDAsVj10LmN0eCxSPW58fHQudG1wbCxNPSJudW1iZXIiPT10eXBlb2YgciYmdC50bXBsLmJuZHNbci0xXTtmb3IoInRhZyI9PT1lLl9pcz8oYT1lLGU9YS50YWdOYW1lLHI9YS50YWdDdHhzLHU9YS50ZW1wbGF0ZSk6KGQ9dC5nZXRSc2MoInRhZ3MiLGUpfHxTKCJVbmtub3duIHRhZzoge3siK2UrIn19ICIpLHU9ZC50ZW1wbGF0ZSksdm9pZCAwIT09cz8oQSs9cyxyPXM9W3twcm9wczp7fSxhcmdzOltdfV0pOk0mJihyPU0odC5kYXRhLHQsYWUpKSxnPXIubGVuZ3RoLGY9MDtnPmY7ZisrKWg9cltmXSwoIVR8fCFULnRhZ3x8ZiYmIVQudGFnLl8uaW5saW5lfHxhLl9lcikmJigodz1SLnRtcGxzJiZoLnRtcGwpJiYodz1oLmNvbnRlbnQ9Ui50bXBsc1t3LTFdKSxoLmluZGV4PWYsaC50bXBsPXcsaC5yZW5kZXI9TixoLnZpZXc9dCxoLmN0eD1MKGguY3R4LFYpKSwobj1oLnByb3BzLnRtcGwpJiYoaC50bXBsPXQuZ2V0VG1wbChuKSksYXx8KGE9bmV3IGQuX2N0cix4PSEhYS5pbml0LGEucGFyZW50PWM9ViYmVi50YWcsYS50YWdDdHhzPXIsQz1hLmRhdGFNYXAsVCYmKGEuXy5pbmxpbmU9ITEsVC50YWc9YSxhLmxpbmtDdHg9VCksKGEuXy5ibmQ9TXx8VC5mbik/YS5fLmFyclZ3cz17fTphLmRhdGFCb3VuZE9ubHkmJlMoInteeyIrZSsifX0gdGFnIG11c3QgYmUgZGF0YS1ib3VuZCIpKSxyPWEudGFnQ3R4cyxDPWEuZGF0YU1hcCxoLnRhZz1hLEMmJnImJihoLm1hcD1yW2ZdLm1hcCksYS5mbG93fHwobT1oLmN0eD1oLmN0eHx8e30sbD1hLnBhcmVudHM9bS5wYXJlbnRUYWdzPVYmJkwobS5wYXJlbnRUYWdzLFYucGFyZW50VGFncyl8fHt9LGMmJihsW2MudGFnTmFtZV09YyksbFthLnRhZ05hbWVdPW0udGFnPWEpO2lmKCEoYS5fZXI9cykpe2ZvcihpKGEsclswXSksYS5yZW5kZXJpbmc9e30sZj0wO2c+ZjtmKyspaD1hLnRhZ0N0eD1yW2ZdLGs9aC5wcm9wcyx5PWEuY3Z0QXJncygpLChiPWsuZGF0YU1hcHx8QykmJih5Lmxlbmd0aHx8ay5kYXRhTWFwKSYmKF89aC5tYXAsXyYmXy5zcmM9PT15WzBdJiYhb3x8KF8mJl8uc3JjJiZfLnVubWFwKCksXz1oLm1hcD1iLm1hcCh5WzBdLGssdm9pZCAwLCFhLl8uYm5kKSkseT1bXy50Z3RdKSxhLmN0eD1oLmN0eCxmfHwoeCYmKGo9YS50ZW1wbGF0ZSxhLmluaXQoaCxULGEuY3R4KSx4PXZvaWQgMCksVCYmKFQuYXR0cj1hLmF0dHI9VC5hdHRyfHxhLmF0dHIpLHA9YS5hdHRyLGEuXy5ub1Z3cz1wJiZwIT09RWUpLHY9dm9pZCAwLGEucmVuZGVyJiYodj1hLnJlbmRlci5hcHBseShhLHkpKSx5Lmxlbmd0aHx8KHk9W3RdKSx2b2lkIDA9PT12JiYodj1oLnJlbmRlcih5WzBdLCEwKXx8KG8/dm9pZCAwOiIiKSksQT1BP0ErKHZ8fCIiKTp2O2EucmVuZGVyaW5nPXZvaWQgMH1yZXR1cm4gYS50YWdDdHg9clswXSxhLmN0eD1hLnRhZ0N0eC5jdHgsYS5fLm5vVndzJiZhLl8uaW5saW5lJiYoQT0idGV4dCI9PT1wP2llLmh0bWwoQSk6IiIpLE0mJnQuXy5vblJlbmRlcj90Ll8ub25SZW5kZXIoQSx0LGEpOkF9ZnVuY3Rpb24gYihlLHQsbixyLGksbyxzLGEpe3ZhciBkLHUsbCxwPXRoaXMsZj0iYXJyYXkiPT09dDtwLmNvbnRlbnQ9YSxwLnZpZXdzPWY/W106e30scC5wYXJlbnQ9bixwLnR5cGU9dHx8InRvcCIscC5kYXRhPXIscC50bXBsPWksbD1wLl89e2tleTowLHVzZUtleTpmPzA6MSxpZDoiIiskZSsrLG9uUmVuZGVyOnMsYm5kczp7fX0scC5saW5rZWQ9ISFzLG4/KGQ9bi52aWV3cyx1PW4uXyx1LnVzZUtleT8oZFtsLmtleT0iXyIrdS51c2VLZXkrK109cCxwLmluZGV4PVVlLHAuZ2V0SW5kZXg9Yyk6ZC5sZW5ndGg9PT0obC5rZXk9cC5pbmRleD1vKT9kLnB1c2gocCk6ZC5zcGxpY2UobywwLHApLHAuY3R4PWV8fG4uY3R4KTpwLmN0eD1lfWZ1bmN0aW9uIF8oZSl7dmFyIHQsbixyLGksbyxzLGE7Zm9yKHQgaW4gT2UpaWYobz1PZVt0XSwocz1vLmNvbXBpbGUpJiYobj1lW3QrInMiXSkpZm9yKHIgaW4gbilpPW5bcl09cyhyLG5bcl0sZSwwKSxpLl9pcz10LGkmJihhPWFlLm9uU3RvcmVbdF0pJiZhKHIsaSxzKX1mdW5jdGlvbiB5KGUsdCxuKXtmdW5jdGlvbiBpKCl7dmFyIHQ9dGhpczt0Ll89e2lubGluZTohMCx1bmxpbmtlZDohMH0sdC50YWdOYW1lPWV9dmFyIG8scyxhLGQ9bmV3IGFlLl90ZztpZih0ZSh0KT90PXtkZXBlbmRzOnQuZGVwZW5kcyxyZW5kZXI6dH06IiIrdD09PXQmJih0PXt0ZW1wbGF0ZTp0fSkscz10LmJhc2VUYWcpe3QuZmxvdz0hIXQuZmxvdyx0LmJhc2VUYWc9cz0iIitzPT09cz9uJiZuLnRhZ3Nbc118fHNlW3NdOnMsZD11KGQscyk7Zm9yKGEgaW4gdClkW2FdPXIoc1thXSx0W2FdKX1lbHNlIGQ9dShkLHQpO3JldHVybiB2b2lkIDAhPT0obz1kLnRlbXBsYXRlKSYmKGQudGVtcGxhdGU9IiIrbz09PW8/cmVbb118fHJlKG8pOm8pLGQuaW5pdCE9PSExJiYoKGkucHJvdG90eXBlPWQpLmNvbnN0cnVjdG9yPWQuX2N0cj1pKSxuJiYoZC5fcGFyZW50VG1wbD1uKSxkfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIHRoaXMuYmFzZS5hcHBseSh0aGlzLGUpfWZ1bmN0aW9uIGooZSxuLHIsaSl7ZnVuY3Rpb24gbyhuKXt2YXIgbyxhO2lmKCIiK249PT1ufHxuLm5vZGVUeXBlPjAmJihzPW4pKXtpZighcylpZigvXlwuXC9bXlxcOio/Ijw+XSokLy50ZXN0KG4pKShhPXJlW2U9ZXx8bl0pP249YTpzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pO2Vsc2UgaWYodC5mbiYmIVcudGVzdChuKSl0cnl7cz10KGRvY3VtZW50KS5maW5kKG4pWzBdfWNhdGNoKGQpe31zJiYoaT9uPXMuaW5uZXJIVE1MOihvPXMuZ2V0QXR0cmlidXRlKFNlKSxvP28hPT1JZT8obj1yZVtvXSxkZWxldGUgcmVbb10pOnQuZm4mJihuPXQuZGF0YShzKVtJZV0pOihlPWV8fCh0LmZuP0llOm4pLG49aihlLHMuaW5uZXJIVE1MLHIsaSkpLG4udG1wbE5hbWU9ZT1lfHxvLGUhPT1JZSYmKHJlW2VdPW4pLHMuc2V0QXR0cmlidXRlKFNlLGUpLHQuZm4mJnQuZGF0YShzLEllLG4pKSkscz12b2lkIDB9ZWxzZSBuLmZufHwobj12b2lkIDApO3JldHVybiBufXZhciBzLGEsZD1uPW58fCIiO3JldHVybiAwPT09aSYmKGk9dm9pZCAwLGQ9byhkKSksaT1pfHwobi5tYXJrdXA/bjp7fSksaS50bXBsTmFtZT1lLHImJihpLl9wYXJlbnRUbXBsPXIpLCFkJiZuLm1hcmt1cCYmKGQ9byhuLm1hcmt1cCkpJiZkLmZuJiYoZD1kLm1hcmt1cCksdm9pZCAwIT09ZD8oZC5mbnx8bi5mbj9kLmZuJiYoYT1kKToobj1WKGQsaSksVShkLnJlcGxhY2Uoa2UsIlxcJCYiKSxuKSksYXx8KF8oaSksYT11KGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVuZGVyLmFwcGx5KG4sYXJndW1lbnRzKX0sbikpLGUmJiFyJiZlIT09SWUmJihxZVtlXT1hKSxhKTp2b2lkIDB9ZnVuY3Rpb24gQyhlLG4pe3JldHVybiB0LmlzRnVuY3Rpb24oZSk/ZS5jYWxsKG4pOmV9ZnVuY3Rpb24gQShlKXt2YXIgdCxuPVtdLHI9ZS5sZW5ndGg7Zm9yKHQ9MDtyPnQ7dCsrKW4ucHVzaChlW3RdLnVubWFwKCkpO3JldHVybiBufWZ1bmN0aW9uIFQoZSxuKXtmdW5jdGlvbiByKGUpe2wuYXBwbHkodGhpcyxlKX1mdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyByKGFyZ3VtZW50cyl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuLHIsaSxvLHMsYT1jLmxlbmd0aDtmb3Iobj0wO2E+bjtuKyspbz1jW25dLHI9dm9pZCAwLG8rIiIhPT1vJiYocj1vLG89ci5nZXR0ZXIpLHZvaWQgMD09PShzPWVbb10pJiZyJiZ2b2lkIDAhPT0oaT1yLmRlZmF1bHRWYWwpJiYocz1DKGksZSkpLHQocyxyJiZwW3IudHlwZV0sbyl9ZnVuY3Rpb24gcyhuKXtuPW4rIiI9PT1uP0pTT04ucGFyc2Uobik6bjt2YXIgcixpLHMsdT1uLGw9W107aWYodC5pc0FycmF5KG4pKXtmb3Iobj1ufHxbXSxpPW4ubGVuZ3RoLHI9MDtpPnI7cisrKWwucHVzaCh0aGlzLm1hcChuW3JdKSk7cmV0dXJuIGwuX2lzPWUsbC51bm1hcD1kLGwubWVyZ2U9YSxsfWlmKG4pe28obixmdW5jdGlvbihlLHQpe3QmJihlPXQubWFwKGUpKSxsLnB1c2goZSl9KSx1PXRoaXMuYXBwbHkodGhpcyxsKTtmb3IocyBpbiBuKXM9PT1lZXx8YltzXXx8KHVbc109bltzXSl9cmV0dXJuIHV9ZnVuY3Rpb24gYShlKXtlPWUrIiI9PT1lP0pTT04ucGFyc2UoZSk6ZTt2YXIgbixyLHMsYSxkLHUsbCxwLGMsZix2PXRoaXM7aWYodC5pc0FycmF5KHYpKXtmb3IocD17fSxmPVtdLHM9ZS5sZW5ndGgsYT12Lmxlbmd0aCxuPTA7cz5uO24rKyl7Zm9yKGM9ZVtuXSxsPSExLHI9MDthPnImJiFsO3IrKylwW3JdfHwodT12W3JdLGcmJihwW3JdPWw9ZysiIj09PWc/Y1tnXSYmKGJbZ10/dVtnXSgpOnVbZ10pPT09Y1tnXTpnKHUsYykpKTtsPyh1Lm1lcmdlKGMpLGYucHVzaCh1KSk6Zi5wdXNoKGkubWFwKGMpKX1yZXR1cm4gdm9pZCh4P3godikucmVmcmVzaChmLCEwKTp2LnNwbGljZS5hcHBseSh2LFswLHYubGVuZ3RoXS5jb25jYXQoZikpKX1vKGUsZnVuY3Rpb24oZSx0LG4pe3Q/dltuXSgpLm1lcmdlKGUpOnZbbl0oZSl9KTtmb3IoZCBpbiBlKWQ9PT1lZXx8YltkXXx8KHZbZF09ZVtkXSl9ZnVuY3Rpb24gZCgpe3ZhciBlLG4scixpLG8scyxhPXRoaXM7aWYodC5pc0FycmF5KGEpKXJldHVybiBBKGEpO2ZvcihlPXt9LGk9Yy5sZW5ndGgscj0wO2k+cjtyKyspbj1jW3JdLG89dm9pZCAwLG4rIiIhPT1uJiYobz1uLG49by5nZXR0ZXIpLHM9YVtuXSgpLGVbbl09byYmcyYmcFtvLnR5cGVdP3QuaXNBcnJheShzKT9BKHMpOnMudW5tYXAoKTpzO2ZvcihuIGluIGEpIl9pcyI9PT1ufHxiW25dfHxuPT09ZWV8fCJfIj09PW4uY2hhckF0KDApJiZiW24uc2xpY2UoMSldfHx0LmlzRnVuY3Rpb24oYVtuXSl8fChlW25dPWFbbl0pO3JldHVybiBlfXZhciB1LGwscD10aGlzLGM9bi5nZXR0ZXJzLGY9bi5leHRlbmQsZz1uLmlkLHY9dC5leHRlbmQoe19pczplfHwidW5uYW1lZCIsdW5tYXA6ZCxtZXJnZTphfSxmKSxoPSIiLG09IiIsdz1jP2MubGVuZ3RoOjAseD10Lm9ic2VydmFibGUsYj17fTtmb3Ioci5wcm90b3R5cGU9dix1PTA7dz51O3UrKykhZnVuY3Rpb24oZSl7ZT1lLmdldHRlcnx8ZSxiW2VdPXUrMTt2YXIgdD0iXyIrZTtoKz0oaD8iLCI6IiIpK2UsbSs9InRoaXMuIit0KyIgPSAiK2UrIjtcbiIsdltlXT12W2VdfHxmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92b2lkKHg/eCh0aGlzKS5zZXRQcm9wZXJ0eShlLG4pOnRoaXNbdF09bik6dGhpc1t0XX0seCYmKHZbZV0uc2V0PXZbZV0uc2V0fHxmdW5jdGlvbihlKXt0aGlzW3RdPWV9KX0oY1t1XSk7cmV0dXJuIGw9bmV3IEZ1bmN0aW9uKGgsbS5zbGljZSgwLC0xKSksbC5wcm90b3R5cGU9dix2LmNvbnN0cnVjdG9yPWwsaS5tYXA9cyxpLmdldHRlcnM9YyxpLmV4dGVuZD1mLGkuaWQ9ZyxpfWZ1bmN0aW9uIFYoZSxuKXt2YXIgcixpPXVlLl93bXx8e30sbz11KHt0bXBsczpbXSxsaW5rczp7fSxibmRzOltdLF9pczoidGVtcGxhdGUiLHJlbmRlcjpOfSxuKTtyZXR1cm4gby5tYXJrdXA9ZSxuLmh0bWxUYWd8fChyPUFlLmV4ZWMoZSksby5odG1sVGFnPXI/clsxXS50b0xvd2VyQ2FzZSgpOiIiKSxyPWlbby5odG1sVGFnXSxyJiZyIT09aS5kaXYmJihvLm1hcmt1cD10LnRyaW0oby5tYXJrdXApKSxvfWZ1bmN0aW9uIFIoZSx0KXtmdW5jdGlvbiBuKGksbyxzKXt2YXIgYSxkLHUsbDtpZihpJiZ0eXBlb2YgaT09PUZlJiYhaS5ub2RlVHlwZSYmIWkubWFya3VwJiYhaS5nZXRUZ3QmJiEoInZpZXdNb2RlbCI9PT1lJiZpLmdldHRlcnN8fGkuZXh0ZW5kKSl7Zm9yKHUgaW4gaSluKHUsaVt1XSxvKTtyZXR1cm4gb3x8WX1yZXR1cm4gdm9pZCAwPT09byYmKG89aSxpPXZvaWQgMCksaSYmIiIraSE9PWkmJihzPW8sbz1pLGk9dm9pZCAwKSxsPXM/InZpZXdNb2RlbCI9PT1lP3M6c1tyXT1zW3JdfHx7fTpuLGQ9dC5jb21waWxlLG51bGw9PT1vP2kmJmRlbGV0ZSBsW2ldOihvPWQ/ZC5jYWxsKGwsaSxvLHMsMCk6byxpJiYobFtpXT1vKSksZCYmbyYmKG8uX2lzPWUpLG8mJihhPWFlLm9uU3RvcmVbZV0pJiZhKGksbyxkKSxvfXZhciByPWUrInMiO1lbcl09bn1mdW5jdGlvbiBNKGUpe2xlW2VdPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkZVtlXT10LGxlKTpkZVtlXX19ZnVuY3Rpb24gJChlKXtmdW5jdGlvbiB0KHQsbil7dGhpcy50Z3Q9ZS5nZXRUZ3QodCxuKX1yZXR1cm4gdGUoZSkmJihlPXtnZXRUZ3Q6ZX0pLGUuYmFzZU1hcCYmKGU9dSh1KHt9LGUuYmFzZU1hcCksZSkpLGUubWFwPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0KGUsbil9LGV9ZnVuY3Rpb24gTihlLHQsbixyLGksbyl7dmFyIHMsYSxkLHUsbCxwLGMsZixnPXIsdj0iIjtpZih0PT09ITA/KG49dCx0PXZvaWQgMCk6dHlwZW9mIHQhPT1GZSYmKHQ9dm9pZCAwKSwoZD10aGlzLnRhZyk/KGw9dGhpcyxnPWd8fGwudmlldyx1PWcuZ2V0VG1wbChkLnRlbXBsYXRlfHxsLnRtcGwpLGFyZ3VtZW50cy5sZW5ndGh8fChlPWcpKTp1PXRoaXMsdSl7aWYoIWcmJmUmJiJ2aWV3Ij09PWUuX2lzJiYoZz1lKSxnJiZlPT09ZyYmKGU9Zy5kYXRhKSxwPSFnLG1lPW1lfHxwLGd8fCgodD10fHx7fSkucm9vdD1lKSwhbWV8fHVlLnVzZVZpZXdzfHx1LnVzZVZpZXdzfHxnJiZnIT09WCl2PUUodSxlLHQsbixnLGksbyxkKTtlbHNle2lmKGc/KGM9Zy5kYXRhLGY9Zy5pbmRleCxnLmluZGV4PVVlKTooZz1YLGcuZGF0YT1lLGcuY3R4PXQpLG5lKGUpJiYhbilmb3Iocz0wLGE9ZS5sZW5ndGg7YT5zO3MrKylnLmluZGV4PXMsZy5kYXRhPWVbc10sdis9dS5mbihlW3NdLGcsYWUpO2Vsc2UgZy5kYXRhPWUsdis9dS5mbihlLGcsYWUpO2cuZGF0YT1jLGcuaW5kZXg9Zn1wJiYobWU9dm9pZCAwKX1yZXR1cm4gdn1mdW5jdGlvbiBFKGUsdCxuLHIsaSxvLHMsYSl7ZnVuY3Rpb24gZChlKXtfPXUoe30sbiksX1t4XT1lfXZhciBsLHAsYyxmLGcsdixoLG0sdyx4LF8seSxrPSIiO2lmKGEmJih3PWEudGFnTmFtZSx5PWEudGFnQ3R4LG49bj9MKG4sYS5jdHgpOmEuY3R4LGU9PT1pLmNvbnRlbnQ/aD1lIT09aS5jdHguX3dycD9pLmN0eC5fd3JwOnZvaWQgMDplIT09eS5jb250ZW50P2U9PT1hLnRlbXBsYXRlPyhoPXkudG1wbCxuLl93cnA9eS5jb250ZW50KTpoPXkuY29udGVudHx8aS5jb250ZW50Omg9aS5jb250ZW50LHkucHJvcHMubGluaz09PSExJiYobj1ufHx7fSxuLmxpbms9ITEpLCh4PXkucHJvcHMuaXRlbVZhcikmJigifiIhPT14LmNoYXJBdCgwKSYmSSgiVXNlIGl0ZW1WYXI9J35teUl0ZW0nIikseD14LnNsaWNlKDEpKSksaSYmKHM9c3x8aS5fLm9uUmVuZGVyLG49TChuLGkuY3R4KSksbz09PSEwJiYodj0hMCxvPTApLHMmJihuJiZuLmxpbms9PT0hMXx8YSYmYS5fLm5vVndzKSYmKHM9dm9pZCAwKSxtPXMscz09PSEwJiYobT12b2lkIDAscz1pLl8ub25SZW5kZXIpLG49ZS5oZWxwZXJzP0woZS5oZWxwZXJzLG4pOm4sXz1uLG5lKHQpJiYhcilmb3IoYz12P2k6dm9pZCAwIT09byYmaXx8bmV3IGIobiwiYXJyYXkiLGksdCxlLG8scyksaSYmaS5fLnVzZUtleSYmKGMuXy5ibmQ9IWF8fGEuXy5ibmQmJmEpLHgmJihjLml0PXgpLHg9Yy5pdCxsPTAscD10Lmxlbmd0aDtwPmw7bCsrKXgmJmQodFtsXSksZj1uZXcgYihfLCJpdGVtIixjLHRbbF0sZSwob3x8MCkrbCxzLGgpLGc9ZS5mbih0W2xdLGYsYWUpLGsrPWMuXy5vblJlbmRlcj9jLl8ub25SZW5kZXIoZyxmKTpnO2Vsc2UgeCYmZCh0KSxjPXY/aTpuZXcgYihfLHd8fCJkYXRhIixpLHQsZSxvLHMsaCksYSYmIWEuZmxvdyYmKGMudGFnPWEpLGsrPWUuZm4odCxjLGFlKTtyZXR1cm4gbT9tKGssYyk6a31mdW5jdGlvbiBGKGUsdCxuKXt2YXIgcj12b2lkIDAhPT1uP3RlKG4pP24uY2FsbCh0LmRhdGEsZSx0KTpufHwiIjoie0Vycm9yOiAiK2UubWVzc2FnZSsifSI7cmV0dXJuIGRlLm9uRXJyb3ImJnZvaWQgMCE9PShuPWRlLm9uRXJyb3IuY2FsbCh0LmRhdGEsZSxuJiZyLHQpKSYmKHI9biksdCYmIXQubGlua0N0eD9pZS5odG1sKHIpOnJ9ZnVuY3Rpb24gUyhlKXt0aHJvdyBuZXcgYWUuRXJyKGUpfWZ1bmN0aW9uIEkoZSl7UygiU3ludGF4IGVycm9yXG4iK2UpfWZ1bmN0aW9uIFUoZSx0LG4scixpKXtmdW5jdGlvbiBvKHQpe3QtPXYsdCYmbS5wdXNoKGUuc3Vic3RyKHYsdCkucmVwbGFjZShfZSwiXFxuIikpfWZ1bmN0aW9uIHModCxuKXt0JiYodCs9In19IixJKChuPyJ7eyIrbisifX0gYmxvY2sgaGFzIHt7LyIrdCsiIHdpdGhvdXQge3siK3Q6IlVubWF0Y2hlZCBvciBtaXNzaW5nIHt7LyIrdCkrIiwgaW4gdGVtcGxhdGU6XG4iK2UpKX1mdW5jdGlvbiBhKGEsZCx1LGMsZyx4LGIsXyx5LGssaixDKXsoYiYmZHx8eSYmIXV8fF8mJiI6Ij09PV8uc2xpY2UoLTEpfHxrKSYmSShhKSx4JiYoZz0iOiIsYz1FZSkseT15fHxuJiYhaTt2YXIgQT0oZHx8bikmJltbXV0sVD0iIixWPSIiLFI9IiIsTT0iIiwkPSIiLE49IiIsRT0iIixGPSIiLFM9IXkmJiFnO3U9dXx8KF89X3x8IiNkYXRhIixnKSxvKEMpLHY9QythLmxlbmd0aCxiP2YmJm0ucHVzaChbIioiLCJcbiIrXy5yZXBsYWNlKC9eOi8sInJldCs9ICIpLnJlcGxhY2UoeWUsIiQxIikrIjtcbiJdKTp1PygiZWxzZSI9PT11JiYoQ2UudGVzdChfKSYmSSgnZm9yICJ7e2Vsc2UgaWYgZXhwcn19IiB1c2UgInt7ZWxzZSBleHByfX0iJyksQT13WzddJiZbW11dLHdbOF09ZS5zdWJzdHJpbmcod1s4XSxDKSx3PWgucG9wKCksbT13WzJdLFM9ITApLF8mJk8oXy5yZXBsYWNlKF9lLCIgIiksQSx0KS5yZXBsYWNlKGplLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7cmV0dXJuIHI9IiciK2krIic6IixzPyhWKz1vKyIsIixNKz0iJyIrYSsiJywiKTpuPyhSKz1yK28rIiwiLE4rPXIrIiciK2ErIicsIik6dD9FKz1vOigidHJpZ2dlciI9PT1pJiYoRis9byksVCs9citvKyIsIiwkKz1yKyInIithKyInLCIscD1wfHxSZS50ZXN0KGkpKSwiIn0pLnNsaWNlKDAsLTEpLEEmJkFbMF0mJkEucG9wKCksbD1bdSxjfHwhIXJ8fHB8fCIiLFMmJltdLEooTXx8KCI6Ij09PXU/IicjZGF0YScsIjoiIiksJCxOKSxKKFZ8fCgiOiI9PT11PyJkYXRhLCI6IiIpLFQsUiksRSxGLEF8fDBdLG0ucHVzaChsKSxTJiYoaC5wdXNoKHcpLHc9bCx3WzhdPXYpKTpqJiYocyhqIT09d1swXSYmImVsc2UiIT09d1swXSYmaix3WzBdKSx3WzhdPWUuc3Vic3RyaW5nKHdbOF0sQyksdz1oLnBvcCgpKSxzKCF3JiZqKSxtPXdbMl19dmFyIGQsdSxsLHAsYyxmPWRlLmFsbG93Q29kZXx8dCYmdC5hbGxvd0NvZGV8fGxlLmFsbG93Q29kZT09PSEwLGc9W10sdj0wLGg9W10sbT1nLHc9WywsZ107aWYoZiYmKHQuYWxsb3dDb2RlPWYpLG4mJih2b2lkIDAhPT1yJiYoZT1lLnNsaWNlKDAsLXIubGVuZ3RoLTIpK2dlKSxlPXBlK2UrZ2UpLHMoaFswXSYmaFswXVsyXS5wb3AoKVswXSksZS5yZXBsYWNlKEcsYSksbyhlLmxlbmd0aCksKHY9Z1tnLmxlbmd0aC0xXSkmJnMoIiIrdiE9PXYmJit2WzhdPT09dls4XSYmdlswXSksbil7Zm9yKHU9QihnLGUsbiksYz1bXSxkPWcubGVuZ3RoO2QtLTspYy51bnNoaWZ0KGdbZF1bN10pO3EodSxjKX1lbHNlIHU9QihnLHQpO3JldHVybiB1fWZ1bmN0aW9uIHEoZSx0KXt2YXIgbixyLGk9MCxvPXQubGVuZ3RoO2ZvcihlLmRlcHM9W107bz5pO2krKyl7cj10W2ldO2ZvcihuIGluIHIpIl9qc3Z0byIhPT1uJiZyW25dLmxlbmd0aCYmKGUuZGVwcz1lLmRlcHMuY29uY2F0KHJbbl0pKX1lLnBhdGhzPXJ9ZnVuY3Rpb24gSihlLHQsbil7cmV0dXJuW2Uuc2xpY2UoMCwtMSksdC5zbGljZSgwLC0xKSxuLnNsaWNlKDAsLTEpXX1mdW5jdGlvbiBLKGUsdCl7cmV0dXJuIlxuCSIrKHQ/dCsiOnsiOiIiKSsiYXJnczpbIitlWzBdKyJdIisoZVsxXXx8IXQ/Iixcbglwcm9wczp7IitlWzFdKyJ9IjoiIikrKGVbMl0/IixcbgljdHg6eyIrZVsyXSsifSI6IiIpfWZ1bmN0aW9uIE8oZSx0LG4pe2Z1bmN0aW9uIHIocixtLHcseCxiLF8seSxrLGosQyxBLFQsVixSLE0sJCxOLEUsRixTKXtmdW5jdGlvbiBxKGUsbixyLHMsYSxkLHAsYyl7dmFyIGY9Ii4iPT09cjtpZihyJiYoYj1iLnNsaWNlKG4ubGVuZ3RoKSwvXlwuP2NvbnN0cnVjdG9yJC8udGVzdChjfHxiKSYmSShlKSxmfHwoZT0ocz8ndmlldy5obHAoIicrcysnIiknOmE/InZpZXciOiJkYXRhIikrKGM/KGQ/Ii4iK2Q6cz8iIjphPyIiOiIuIityKSsocHx8IiIpOihjPXM/IiI6YT9kfHwiIjpyLCIiKSksZSs9Yz8iLiIrYzoiIixlPW4rKCJ2aWV3LmRhdGEiPT09ZS5zbGljZSgwLDkpP2Uuc2xpY2UoNSk6ZSkpLHUpKXtpZihPPSJsaW5rVG8iPT09aT9vPXQuX2pzdnRvPXQuX2pzdnRvfHxbXTpsLmJkLEI9ZiYmT1tPLmxlbmd0aC0xXSl7aWYoQi5fanN2KXtmb3IoO0Iuc2I7KUI9Qi5zYjtCLmJuZCYmKGI9Il4iK2Iuc2xpY2UoMSkpLEIuc2I9YixCLmJuZD1CLmJuZHx8Il4iPT09Yi5jaGFyQXQoMCl9fWVsc2UgTy5wdXNoKGIpO2hbZ109RisoZj8xOjApfXJldHVybiBlfXg9dSYmeCx4JiYhayYmKGI9eCtiKSxfPV98fCIiLHc9d3x8bXx8VCxiPWJ8fGosQz1DfHxOfHwiIjt2YXIgSixLLE8sQixMLFE9IikiO2lmKCJbIj09PUMmJihDPSJbai5fc3EoIixRPSIpXSIpLCF5fHxkfHxhKXtpZih1JiYkJiYhZCYmIWEmJighaXx8c3x8bykmJihKPWhbZy0xXSxTLmxlbmd0aC0xPkYtKEp8fDApKSl7aWYoSj1TLnNsaWNlKEosRityLmxlbmd0aCksSyE9PSEwKWlmKE89b3x8cFtnLTFdLmJkLEI9T1tPLmxlbmd0aC0xXSxCJiZCLnBybSl7Zm9yKDtCLnNiJiZCLnNiLnBybTspQj1CLnNiO0w9Qi5zYj17cGF0aDpCLnNiLGJuZDpCLmJuZH19ZWxzZSBPLnB1c2goTD17cGF0aDpPLnBvcCgpfSk7JD1jZSsiOiIrSisiIG9uZXJyb3I9JyciK2ZlLEs9ZlskXSxLfHwoZlskXT0hMCxmWyRdPUs9VSgkLG4sITApKSxLIT09ITAmJkwmJihMLl9qc3Y9SyxMLnBybT1sLmJkLEwuYm5kPUwuYm5kfHxMLnBhdGgmJkwucGF0aC5pbmRleE9mKCJeIik+PTApfXJldHVybiBkPyhkPSFWLGQ/cjpUKyciJyk6YT8oYT0hUixhP3I6VCsnIicpOih3PyhoW2ddPUYrKyxsPXBbKytnXT17YmQ6W119LHcpOiIiKSsoRT9nPyIiOihjPVMuc2xpY2UoYyxGKSwoaT8oaT1zPW89ITEsIlxiIik6IlxiLCIpK2MrKGM9RityLmxlbmd0aCx1JiZ0LnB1c2gobC5iZD1bXSksIlxiIikpOms/KGcmJkkoZSksdSYmdC5wb3AoKSxpPWIscz14LGM9RityLmxlbmd0aCx4JiYodT1sLmJkPXRbaV09W10pLGIrIjoiKTpiP2Iuc3BsaXQoIl4iKS5qb2luKCIuIikucmVwbGFjZSh4ZSxxKSsoQz8obD1wWysrZ109e2JkOltdfSx2W2ddPVEsQyk6Xyk6Xz9fOk0/KE09dltnXXx8TSx2W2ddPSExLGw9cFstLWddLE0rKEM/KGw9cFsrK2ddLHZbZ109USxDKToiIikpOkE/KHZbZ118fEkoZSksIiwiKTptPyIiOihkPVYsYT1SLCciJykpfUkoZSl9dmFyIGksbyxzLGEsZCx1PXQmJnRbMF0sbD17YmQ6dX0scD17MDpsfSxjPTAsZj1uP24ubGlua3M6dSYmKHUubGlua3M9dS5saW5rc3x8e30pLGc9MCx2PXt9LGg9e30sbT0oZSsobj8iICI6IiIpKS5yZXBsYWNlKGJlLHIpO3JldHVybiFnJiZtfHxJKGUpfWZ1bmN0aW9uIEIoZSx0LG4pe3ZhciByLGksbyxzLGEsZCx1LGwscCxjLGYsZyx2LGgsbSx3LHgsYixfLHksayxqLEMsQSxULFIsTSwkLE4sRSxGPTAsUz11ZS51c2VWaWV3c3x8dC51c2VWaWV3c3x8dC50YWdzfHx0LnRlbXBsYXRlc3x8dC5oZWxwZXJzfHx0LmNvbnZlcnRlcnMsVT0iIixKPXt9LE89ZS5sZW5ndGg7Zm9yKCIiK3Q9PT10PyhiPW4/J2RhdGEtbGluaz0iJyt0LnJlcGxhY2UoX2UsIiAiKS5zbGljZSgxLC0xKSsnIic6dCx0PTApOihiPXQudG1wbE5hbWV8fCJ1bm5hbWVkIix0LmFsbG93Q29kZSYmKEouYWxsb3dDb2RlPSEwKSx0LmRlYnVnJiYoSi5kZWJ1Zz0hMCksZj10LmJuZHMseD10LnRtcGxzKSxyPTA7Tz5yO3IrKylpZihpPWVbcl0sIiIraT09PWkpVSs9J1xuKyInK2krJyInO2Vsc2UgaWYobz1pWzBdLCIqIj09PW8pVSs9IjtcbiIraVsxXSsiXG5yZXQ9cmV0IjtlbHNle2lmKHM9aVsxXSxrPSFuJiZpWzJdLGE9SyhpWzNdLCJwYXJhbXMiKSsifSwiK0sodj1pWzRdKSwkPWlbNV0sRT1pWzZdLGo9aVs4XSYmaVs4XS5yZXBsYWNlKHllLCIkMSIpLChUPSJlbHNlIj09PW8pP2cmJmcucHVzaChpWzddKTooRj0wLGYmJihnPWlbN10pJiYoZz1bZ10sRj1mLnB1c2goMSkpKSxTPVN8fHZbMV18fHZbMl18fGd8fC92aWV3Lig/IWluZGV4KS8udGVzdCh2WzBdKSwoUj0iOiI9PT1vKT9zJiYobz1zPT09RWU/Ij4iOnMrbyk6KGsmJihfPVYoaixKKSxfLnRtcGxOYW1lPWIrIi8iK28sXy51c2VWaWV3cz1fLnVzZVZpZXdzfHxTLEIoayxfKSxTPV8udXNlVmlld3MseC5wdXNoKF8pKSxUfHwoeT1vLFM9U3x8byYmKCFzZVtvXXx8IXNlW29dLmZsb3cpLEE9VSxVPSIiKSxDPWVbcisxXSxDPUMmJiJlbHNlIj09PUNbMF0pLE49JD8iO1xudHJ5e1xucmV0Kz0iOiJcbisiLGg9IiIsbT0iIixSJiYoZ3x8RXx8cyYmcyE9PUVlKSl7aWYoTT1uZXcgRnVuY3Rpb24oImRhdGEsdmlldyxqLHUiLCIgLy8gIitiKyIgIitGKyIgIitvKyJcbnJldHVybiB7IithKyJ9OyIpLE0uX2VyPSQsTS5fdGFnPW8sbilyZXR1cm4gTTtxKE0sZyksdz0nYygiJytzKyciLHZpZXcsJyxjPSEwLGg9dytGKyIsIixtPSIpIn1pZihVKz1SPyhuPygkPyJ0cnl7XG4iOiIiKSsicmV0dXJuICI6TikrKGM/KGM9dm9pZCAwLFM9cD0hMCx3KyhnPyhmW0YtMV09TSxGKToieyIrYSsifSIpKyIpIik6Ij4iPT09bz8odT0hMCwiaCgiK3ZbMF0rIikiKToobD0hMCwiKCh2PSIrdlswXSsiKSE9bnVsbD92OiIrKG4/Im51bGwpIjonIiIpJykpKTooZD0hMCwiXG57dmlldzp2aWV3LHRtcGw6Iisoaz94Lmxlbmd0aDoiMCIpKyIsIithKyJ9LCIpLHkmJiFDKXtpZihVPSJbIitVLnNsaWNlKDAsLTEpKyJdIix3PSd0KCInK3krJyIsdmlldyx0aGlzLCcsbnx8Zyl7aWYoVT1uZXcgRnVuY3Rpb24oImRhdGEsdmlldyxqLHUiLCIgLy8gIitiKyIgIitGKyIgIit5KyJcbnJldHVybiAiK1UrIjsiKSxVLl9lcj0kLFUuX3RhZz15LGcmJnEoZltGLTFdPVUsZyksbilyZXR1cm4gVTtoPXcrRisiLHVuZGVmaW5lZCwiLG09IikifVU9QStOK3crKEZ8fFUpKyIpIixnPTAseT0wfSQmJihTPSEwLFUrPSI7XG59Y2F0Y2goZSl7cmV0Iisobj8idXJuICI6Iis9IikraCsiai5fZXJyKGUsdmlldywiKyQrIikiK20rIjt9Iisobj8iIjoicmV0PXJldCIpKX1VPSIvLyAiK2IrIlxudmFyIHYiKyhkPyIsdD1qLl90YWciOiIiKSsocD8iLGM9ai5fY252dCI6IiIpKyh1PyIsaD1qLl9odG1sIjoiIikrKG4/IjtcbiI6JyxyZXQ9IiJcbicpKyhKLmRlYnVnPyJkZWJ1Z2dlcjsiOiIiKStVKyhuPyJcbiI6IjtcbnJldHVybiByZXQ7IiksZGUuZGVidWdNb2RlIT09ITEmJihVPSJ0cnkge1xuIitVKyJcbn1jYXRjaChlKXtcbnJldHVybiBqLl9lcnIoZSwgdmlldyk7XG59Iik7dHJ5e1U9bmV3IEZ1bmN0aW9uKCJkYXRhLHZpZXcsaix1IixVKX1jYXRjaChMKXtJKCJDb21waWxlZCB0ZW1wbGF0ZSBjb2RlOlxuXG4iK1UrJ1xuOiAiJytMLm1lc3NhZ2UrJyInKX1yZXR1cm4gdCYmKHQuZm49VSx0LnVzZVZpZXdzPSEhUyksVX1mdW5jdGlvbiBMKGUsdCl7cmV0dXJuIGUmJmUhPT10P3Q/dSh1KHt9LHQpLGUpOmU6dCYmdSh7fSx0KX1mdW5jdGlvbiBRKGUpe3JldHVybiBOZVtlXXx8KE5lW2VdPSImIyIrZS5jaGFyQ29kZUF0KDApKyI7Iil9ZnVuY3Rpb24gSChlKXt2YXIgdCxuLHI9W107aWYodHlwZW9mIGU9PT1GZSlmb3IodCBpbiBlKW49ZVt0XSx0PT09ZWV8fHRlKG4pfHxyLnB1c2goe2tleTp0LHByb3A6bn0pO3JldHVybiByfWZ1bmN0aW9uIFAoZSxuLHIpe3ZhciBpPXRoaXMuanF1ZXJ5JiYodGhpc1swXXx8UygnVW5rbm93biB0ZW1wbGF0ZTogIicrdGhpcy5zZWxlY3RvcisnIicpKSxvPWkuZ2V0QXR0cmlidXRlKFNlKTtyZXR1cm4gTi5jYWxsKG8/dC5kYXRhKGkpW0llXTpyZShpKSxlLG4scil9ZnVuY3Rpb24gRChlKXtyZXR1cm4gdm9pZCAwIT1lP1ZlLnRlc3QoZSkmJigiIitlKS5yZXBsYWNlKE1lLFEpfHxlOiIifXZhciBaPXQ9PT0hMTt0PXQmJnQuZm4/dDplLmpRdWVyeTt2YXIgeixHLFcsWCxZLGVlLHRlLG5lLHJlLGllLG9lLHNlLGFlLGRlLHVlLGxlLHBlLGNlLGZlLGdlLHZlLGhlLG1lLHdlPSJ2MC45Ljc4Iix4ZT0vXighKj8pKD86bnVsbHx0cnVlfGZhbHNlfFxkW1xkLl0qfChbXHckXSt8XC58fihbXHckXSspfCModmlld3woW1x3JF0rKSk/KShbXHckLl5dKj8pKD86Wy5bXl0oW1x3JF0rKVxdPyk/KSQvZyxiZT0vKFwoKSg/PVxzKlwoKXwoPzooWyhbXSlccyopPyg/OihcXj8pKCEqP1sjfl0/W1x3JC5eXSspP1xzKigoXCtcK3wtLSl8XCt8LXwmJnxcfFx8fD09PXwhPT18PT18IT18PD18Pj18Wzw+JSo6P1wvXXwoPSkpXHMqfCghKj9bI35dP1tcdyQuXl0rKShbKFtdKT8pfCgsXHMqKXwoXCg/KVxcPyg/OignKXwoIikpfCg/OlxzKigoWylcXV0pKD89XHMqWy5eXXxccyokfFteKFtdKXxbKVxdXSkoWyhbXT8pKXwoXHMrKS9nLF9lPS9bIFx0XSooXHJcbnxcbnxccikvZyx5ZT0vXFwoWyciXSkvZyxrZT0vWyciXFxdL2csamU9Lyg/Olx4MDh8Xikob25lcnJvcjopPyg/Oih+PykoKFtcdyRfXC5dKyk6KT8oW15ceDA4XSspKVx4MDgoLCk/KFteXHgwOF0rKS9naSxDZT0vXmlmXHMvLEFlPS88KFx3KylbPlxzXS8sVGU9L1tceDAwYD48IicmPV0vZyxWZT0vW1x4MDBgPjxcIicmPV0vLFJlPS9eb25bQS1aXXxeY29udmVydChCYWNrKT8kLyxNZT1UZSwkZT0wLE5lPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsIlx4MDAiOiImIzA7IiwiJyI6IiYjMzk7IiwnIic6IiYjMzQ7IiwiYCI6IiYjOTY7IiwiPSI6IiYjNjE7In0sRWU9Imh0bWwiLEZlPSJvYmplY3QiLFNlPSJkYXRhLWpzdi10bXBsIixJZT0ianN2VG1wbCIsVWU9IkZvciAjaW5kZXggaW4gbmVzdGVkIGJsb2NrIHVzZSAjZ2V0SW5kZXgoKS4iLHFlPXt9LEplPWUuanNyZW5kZXIsS2U9SmUmJnQmJiF0LnJlbmRlcixPZT17dGVtcGxhdGU6e2NvbXBpbGU6an0sdGFnOntjb21waWxlOnl9LHZpZXdNb2RlbDp7Y29tcGlsZTpUfSxoZWxwZXI6e30sY29udmVydGVyOnt9fTtpZihZPXtqc3ZpZXdzOndlLHN1Yjp7VmlldzpiLEVycjpkLHRtcGxGbjpVLHBhcnNlOk8sZXh0ZW5kOnUsZXh0ZW5kQ3R4Okwsc3ludGF4RXJyOkksb25TdG9yZTp7fSxhZGRTZXR0aW5nOk0sc2V0dGluZ3M6e2FsbG93Q29kZTohMX0sYWR2U2V0OnMsX3RoczppLF90ZzpmdW5jdGlvbigpe30sX2NudnQ6aCxfdGFnOngsX2VyOlMsX2VycjpGLF9odG1sOkQsX3NxOmZ1bmN0aW9uKGUpe3JldHVybiJjb25zdHJ1Y3RvciI9PT1lJiZJKCIiKSxlfX0sc2V0dGluZ3M6e2RlbGltaXRlcnM6bCxhZHZhbmNlZDpmdW5jdGlvbihlKXtyZXR1cm4gZT8odSh1ZSxlKSxhZS5hZHZTZXQoKSxsZSk6dWV9fSxtYXA6JH0sKGQucHJvdG90eXBlPW5ldyBFcnJvcikuY29uc3RydWN0b3I9ZCxjLmRlcGVuZHM9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5nZXQoIml0ZW0iKSwiaW5kZXgiXX0sZi5kZXBlbmRzPSJpbmRleCIsYi5wcm90b3R5cGU9e2dldDpwLGdldEluZGV4OmYsZ2V0UnNjOncsZ2V0VG1wbDp2LGhscDpnLF9pczoidmlldyJ9LGFlPVkuc3ViLGxlPVkuc2V0dGluZ3MsIShKZXx8dCYmdC5yZW5kZXIpKXtmb3IoeiBpbiBPZSlSKHosT2Vbel0pO2llPVkuY29udmVydGVycyxvZT1ZLmhlbHBlcnMsc2U9WS50YWdzLGFlLl90Zy5wcm90b3R5cGU9e2Jhc2VBcHBseTprLGN2dEFyZ3M6bX0sWD1hZS50b3BWaWV3PW5ldyBiLHQ/KHQuZm4ucmVuZGVyPVAsZWU9dC5leHBhbmRvLHQub2JzZXJ2YWJsZSYmKHUoYWUsdC52aWV3cy5zdWIpLFkubWFwPXQudmlld3MubWFwKSk6KHQ9e30sWiYmKGUuanNyZW5kZXI9dCksdC5yZW5kZXJGaWxlPXQuX19leHByZXNzPXQuY29tcGlsZT1mdW5jdGlvbigpe3Rocm93Ik5vZGUuanM6IHVzZSBucG0ganNyZW5kZXIsIG9yIGpzcmVuZGVyLW5vZGUuanMifSx0LmlzRnVuY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9LHQuaXNBcnJheT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09e30udG9TdHJpbmcuY2FsbChlKX0sYWUuX2pxPWZ1bmN0aW9uKGUpe2UhPT10JiYodShlLHQpLHQ9ZSx0LmZuLnJlbmRlcj1QLGRlbGV0ZSB0LmpzcmVuZGVyLGVlPXQuZXhwYW5kbyl9LHQuanNyZW5kZXI9d2UpLGRlPWFlLnNldHRpbmdzLGRlLmFsbG93Q29kZT0hMSx0ZT10LmlzRnVuY3Rpb24sbmU9dC5pc0FycmF5LHQucmVuZGVyPXFlLHQudmlld3M9WSx0LnRlbXBsYXRlcz1yZT1ZLnRlbXBsYXRlcztmb3IoaGUgaW4gZGUpTShoZSk7KGxlLmRlYnVnTW9kZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9kZS5kZWJ1Z01vZGU6KGRlLmRlYnVnTW9kZT1lLGRlLm9uRXJyb3I9ZSsiIj09PWU/bmV3IEZ1bmN0aW9uKCIiLCJyZXR1cm4gJyIrZSsiJzsiKTp0ZShlKT9lOnZvaWQgMCxsZSl9KSghMSksdWU9ZGUuYWR2YW5jZWQ9e3VzZVZpZXdzOiExLF9qc3Y6ITF9LHNlKHsiaWYiOntyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQudGFnQ3R4LHI9dC5yZW5kZXJpbmcuZG9uZXx8IWUmJihhcmd1bWVudHMubGVuZ3RofHwhbi5pbmRleCk/IiI6KHQucmVuZGVyaW5nLmRvbmU9ITAsdC5zZWxlY3RlZD1uLmluZGV4LG4ucmVuZGVyKG4udmlldywhMCkpO3JldHVybiByfSxmbG93OiEwfSwiZm9yIjp7cmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWFyZ3VtZW50cy5sZW5ndGgscj10aGlzLGk9ci50YWdDdHgsbz0iIixzPTA7cmV0dXJuIHIucmVuZGVyaW5nLmRvbmV8fCh0PW4/aS52aWV3LmRhdGE6ZSx2b2lkIDAhPT10JiYobys9aS5yZW5kZXIodCxuKSxzKz1uZSh0KT90Lmxlbmd0aDoxKSwoci5yZW5kZXJpbmcuZG9uZT1zKSYmKHIuc2VsZWN0ZWQ9aS5pbmRleCkpLG99LGZsb3c6ITB9LHByb3BzOntiYXNlVGFnOiJmb3IiLGRhdGFNYXA6JChIKSxmbG93OiEwfSxpbmNsdWRlOntmbG93OiEwfSwiKiI6e3JlbmRlcjpvLGZsb3c6ITB9LCI6KiI6e3JlbmRlcjpvLGZsb3c6ITB9LGRiZzpvZS5kYmc9aWUuZGJnPWF9KSxpZSh7aHRtbDpELGF0dHI6RCx1cmw6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9ZT9lbmNvZGVVUkkoIiIrZSk6bnVsbD09PWU/ZToiIn19KX1yZXR1cm4gZGU9YWUuc2V0dGluZ3MsbGUuZGVsaW1pdGVycygie3siLCJ9fSIsIl4iKSxLZSYmSmUudmlld3Muc3ViLl9qcSh0KSx0fHxKZX0sd2luZG93KTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzcmVuZGVyLm1pbi5qcy5tYXAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyQnRuLmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJCdG4uanMKaW5kZXggMjU5MjcxZC4uOWY5ZWRhMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJCdG4uanMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJCdG4uanMKQEAgLTU1LDggKzU1LDggQEAKICAgICB9KTsKICAgfSk7CiAKLSAgJCgiLmJ1aWxkLXJlY2lwZS1idG4iKS51bmJpbmQoJ2NsaWNrJyk7Ci0gICQoIi5idWlsZC1yZWNpcGUtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICQoInRkIC5idWlsZC1yZWNpcGUtYnRuIikudW5iaW5kKCdjbGljaycpOworICAkKCJ0ZCAuYnVpbGQtcmVjaXBlLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKGUpewogICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICB2YXIgcmVjaXBlID0gJCh0aGlzKS5kYXRhKCdyZWNpcGUtbmFtZScpOwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckRlcHNNb2RhbC5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzCmluZGV4IDgyNWY5ZGMuLmU5NjIyMjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzCkBAIC02LDcgKzYsMTIgQEAKICAqIGFkZFRvUHJvamVjdDogV2hldGhlciB0byBhZGQgbGF5ZXJzIHRvIHByb2plY3Qgb24gYWNjZXB0CiAgKiBzdWNjZXNzQWRkOiBmdW5jdGlvbiB0byBydW4gb24gc3VjY2VzcwogICovCi1mdW5jdGlvbiBzaG93TGF5ZXJEZXBzTW9kYWwobGF5ZXIsIGRlcGVuZGVuY2llcywgdGl0bGUsIGJvZHksIGFkZFRvUHJvamVjdCwgc3VjY2Vzc0FkZCkgeworZnVuY3Rpb24gc2hvd0xheWVyRGVwc01vZGFsKGxheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvUHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQWRkKSB7CiAKICAgaWYgKCQoIiNkZXBlbmRlbmNpZXMtbW9kYWwiKS5sZW5ndGggPT09IDApIHsKICAgICAkLmdldChsaWJ0b2FzdGVyLmN0eC5odG1sVXJsICsgIi9sYXllcl9kZXBzX21vZGFsLmh0bWwiLCBmdW5jdGlvbihodG1sKXsKQEAgLTMzLDE3ICszOCwyMCBAQAogCiAgICAgdmFyIGRlcGxpc3RIdG1sID0gIiI7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGRlcGxpc3RIdG1sICs9ICI8bGk+PGxhYmVsIGNsYXNzPVwiY2hlY2tib3hcIj48aW5wdXQgbmFtZT1cImRlcGVuZGVuY2llc1wiIHZhbHVlPVwiIjsKKyAgICAgIGRlcGxpc3RIdG1sICs9ICI8bGk+PGRpdiBjbGFzcz1cImNoZWNrYm94XCI+PGxhYmVsPjxpbnB1dCBuYW1lPVwiZGVwZW5kZW5jaWVzXCIgdmFsdWU9XCIiOwogICAgICAgZGVwbGlzdEh0bWwgKz0gZGVwZW5kZW5jaWVzW2ldLmlkOwogICAgICAgZGVwbGlzdEh0bWwgKz0iXCIgdHlwZT1cImNoZWNrYm94XCIgY2hlY2tlZD1cImNoZWNrZWRcIi8+IjsKICAgICAgIGRlcGxpc3RIdG1sICs9IGRlcGVuZGVuY2llc1tpXS5uYW1lOwotICAgICAgZGVwbGlzdEh0bWwgKz0gIjwvbGFiZWw+PC9saT4iOworICAgICAgZGVwbGlzdEh0bWwgKz0gIjwvbGFiZWw+PC9kaXY+PC9saT4iOwogICAgIH0KICAgICAkKCcjZGVwZW5kZW5jaWVzLWxpc3QnKS5odG1sKGRlcGxpc3RIdG1sKTsKIAogICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwiKS5kYXRhKCJkZXBzIiwgZGVwZW5kZW5jaWVzKTsKIAotICAgICQoJyNkZXBlbmRlbmNpZXMtbW9kYWwnKS5tb2RhbCgnc2hvdycpOworICAgIC8qIENsZWFyIGFueSBhbGVydCBub3RpZmljYXRpb25zIGJlZm9yZSBzaG93aW5nIHRoZSBtb2RhbCAqLworICAgICQoIi5hbGVydCIpLmZhZGVPdXQoZnVuY3Rpb24oKXsKKyAgICAgICQoJyNkZXBlbmRlbmNpZXMtbW9kYWwnKS5tb2RhbCgnc2hvdycpOworICAgIH0pOwogCiAgICAgLyogRGlzY2FyZCB0aGUgb2xkIHN1Ym1pc3Npb24gZnVuY3Rpb24gKi8KICAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0iKS51bmJpbmQoJ3N1Ym1pdCcpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJkZXRhaWxzLmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJkZXRhaWxzLmpzCmluZGV4IGQ1NDU0MDYuLjllYWQzOTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyZGV0YWlscy5qcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllcmRldGFpbHMuanMKQEAgLTEwLDI1ICsxMCwyNyBAQAogICB2YXIgdGFyZ2V0VGFiID0gJCgiI3RhcmdldHMtdGFiIik7CiAgIHZhciBtYWNoaW5lVGFiID0gJCgiI21hY2hpbmVzLXRhYiIpOwogICB2YXIgZGV0YWlsc1RhYiA9ICQoIiNkZXRhaWxzLXRhYiIpOworICB2YXIgZWRpdExheWVyU291cmNlID0gJCgiI2VkaXQtbGF5ZXItc291cmNlIik7CisgIHZhciBzYXZlU291cmNlQ2hhbmdlc0J0biA9ICQoIiNzYXZlLWNoYW5nZXMtZm9yLXN3aXRjaCIpOworICB2YXIgbGF5ZXJHaXRSZWZJbnB1dCA9ICQoIiNsYXllci1naXQtcmVmIik7CisgIHZhciBsYXllclN1YkRpcklucHV0ID0gJCgnI2xheWVyLXN1YmRpcicpOworCisgIHRhcmdldFRhYi5vbignc2hvdy5icy50YWInLCB0YXJnZXRzVGFiU2hvdyk7CisgIGRldGFpbHNUYWIub24oJ3Nob3cuYnMudGFiJywgZGV0YWlsc1RhYlNob3cpOworICBtYWNoaW5lVGFiLm9uKCdzaG93LmJzLnRhYicsIG1hY2hpbmVzVGFiU2hvdyk7CiAKICAgLyogc2V0dXAgdGhlIGRlcGVuZGVuY2llcyB0eXBlYWhlYWQgKi8KLSAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyRGVwSW5wdXQsIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChsYXllckRlcElucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CiAgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gaXRlbTsKLQogICAgIGxheWVyRGVwQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CiAgIH0pOwogCi0gICQod2luZG93KS5vbignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKGUpewotICAgIHN3aXRjaCh3aW5kb3cubG9jYXRpb24uaGFzaCl7Ci0gICAgICBjYXNlICcjbWFjaGluZXMnOgotICAgICAgICBtYWNoaW5lVGFiLnRhYignc2hvdycpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJyNyZWNpcGVzJzoKLSAgICAgICAgdGFyZ2V0VGFiLnRhYignc2hvdycpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGRldGFpbHNUYWIudGFiKCdzaG93Jyk7Ci0gICAgICAgIGJyZWFrOworICAvKiBkaXNhYmxlIHRoZSBhZGQgbGF5ZXIgYnV0dG9uIGlmIGl0cyBpbnB1dCBmaWVsZCBpcyBlbXB0eSAqLworICBsYXllckRlcElucHV0Lm9uKCJrZXl1cCIsZnVuY3Rpb24oKXsKKyAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPT09IDApIHsKKyAgICAgIGxheWVyRGVwQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CiAgICAgfQogICB9KTsKIApAQCAtNzYsNyArNzgsNyBAQAogCiAgICAgYWRkUmVtb3ZlRGVwKGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5pZCwgdHJ1ZSwgZnVuY3Rpb24oKXsKICAgICAgIC8qIE1ha2UgYSBsaXN0IGl0ZW0gZm9yIHRoZSBuZXcgbGF5ZXIgZGVwZW5kZW5jeSAqLwotICAgICAgdmFyIG5ld0xheWVyRGVwID0gJCgiPGxpPjxhPjwvYT48c3BhbiBjbGFzcz1cImljb24tdHJhc2hcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiB0aXRsZT1cIkRlbGV0ZVwiPjwvc3Bhbj48L2xpPiIpOworICAgICAgdmFyIG5ld0xheWVyRGVwID0gJCgiPGxpPjxhPjwvYT48c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2hcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiB0aXRsZT1cIkRlbGV0ZVwiPjwvc3Bhbj48L2xpPiIpOwogCiAgICAgICBuZXdMYXllckRlcC5kYXRhKCdsYXllci1pZCcsIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5pZCk7CiAgICAgICBuZXdMYXllckRlcC5jaGlsZHJlbigic3BhbiIpLnRvb2x0aXAoKTsKQEAgLTk0LDExICs5NiwxMSBAQAogICAgICAgLyogQ2xlYXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICovCiAgICAgICBsYXllckRlcElucHV0LnZhbCgiIik7CiAgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSB1bmRlZmluZWQ7Ci0gICAgICBsYXllckRlcEJ0bi5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICBsYXllckRlcEJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOwogICAgIH0pOwogICB9KTsKIAotICAkKCIuaWNvbi1wZW5jaWwiKS5jbGljayhmdW5jdGlvbiAoKXsKKyAgJCgiLmdseXBoaWNvbi1lZGl0IikuY2xpY2soZnVuY3Rpb24gKCl7CiAgICAgdmFyIG1QYXJlbnQgPSAkKHRoaXMpLnBhcmVudCgiZGQiKTsKICAgICBtUGFyZW50LnByZXYoKS5jc3MoIm1hcmdpbi10b3AiLCAiMTBweCIpOwogICAgIG1QYXJlbnQuY2hpbGRyZW4oImZvcm0iKS5zbGlkZURvd24oKTsKQEAgLTEwNiw4ICsxMDgsMTIgQEAKICAgICBjdXJyZW50VmFsLmhpZGUoKTsKICAgICAvKiBTZXQgdGhlIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGlucHV0IGZpZWxkICovCiAgICAgbVBhcmVudC5maW5kKCJ0ZXh0YXJlYSxpbnB1dCIpLnZhbChjdXJyZW50VmFsLnRleHQoKSk7CisgICAgLyogSWYgdGhlIGlucHV0IGZpZWxkIGlzIGVtcHR5LCBkaXNhYmxlIHRoZSBzdWJtaXQgYnV0dG9uICovCisgICAgaWYgKCBtUGFyZW50LmZpbmQoInRleHRhcmVhLGlucHV0IikudmFsKCkubGVuZ3RoID09IDAgKSB7CisgICAgICBtUGFyZW50LmZpbmQoIi5jaGFuZ2UtYnRuIikuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICB9CiAgICAgLyogSGlkZXMgdGhlICJOb3Qgc2V0IiB0ZXh0ICovCi0gICAgbVBhcmVudC5jaGlsZHJlbigiLm11dGVkIikuaGlkZSgpOworICAgIG1QYXJlbnQuY2hpbGRyZW4oIi50ZXh0LW11dGVkIikuaGlkZSgpOwogICAgIC8qIFdlJ3JlIGVkaXRpbmcgc28gaGlkZSB0aGUgZGVsZXRlIGljb24gKi8KICAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CiAgICAgbVBhcmVudC5maW5kKCIuY2FuY2VsIikuc2hvdygpOwpAQCAtMTI4LDMwICsxMzQsMzEgQEAKICAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5jdXJyZW50LXZhbHVlIikuc2hvdygpOwogICAgICAgLyogU2hvdyB0aGUgIk5vdCBzZXQiIHRleHQgaWYgd2UgZW5kZWQgdXAgd2l0aCBubyB2YWx1ZSAqLwogICAgICAgaWYgKCFtUGFyZW50LmNoaWxkcmVuKCIuY3VycmVudC12YWx1ZSIpLmh0bWwoKSl7Ci0gICAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5tdXRlZCIpLmZhZGVJbigpOworICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIudGV4dC1tdXRlZCIpLmZhZGVJbigpOwogICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5zaG93KCk7CiAgICAgICB9CiAKLSAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5pY29uLXBlbmNpbCIpLnNob3coKTsKLSAgICAgIG1QYXJlbnQucHJldigpLmNzcygibWFyZ2luLXRvcCIsICIwcHgiKTsKKyAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5nbHlwaGljb24tZWRpdCIpLnNob3coKTsKKyAgICAgIG1QYXJlbnQucHJldigpLmNzcygibWFyZ2luLXRvcCIsICIwIik7CiAgICAgfSk7CiAgIH0pOwogCisKICAgZnVuY3Rpb24gZGVmYXVsdEFkZEJ0blRleHQoKXsKICAgICAgIHZhciB0ZXh0ID0gIiBBZGQgdGhlICIrY3R4LmxheWVyVmVyc2lvbi5uYW1lKyIgbGF5ZXIgdG8geW91ciBwcm9qZWN0IjsKICAgICAgIGFkZFJtTGF5ZXJCdG4udGV4dCh0ZXh0KTsKLSAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXBsdXNcIj48L3NwYW4+Iik7CisgICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzXCI+PC9zcGFuPiIpOwogICAgICAgYWRkUm1MYXllckJ0bi5yZW1vdmVDbGFzcygiYnRuLWRhbmdlciIpOwogICB9CiAKLSAgZGV0YWlsc1RhYi5vbignc2hvdycsIGZ1bmN0aW9uKCl7CisgIGZ1bmN0aW9uIGRldGFpbHNUYWJTaG93KCl7CiAgICAgaWYgKCFjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByaikKICAgICAgIGRlZmF1bHRBZGRCdG5UZXh0KCk7CiAKLSAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICJkZXRhaWxzIjsKLSAgfSk7CisgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAiaW5mb3JtYXRpb24iOworICB9CiAKICAgZnVuY3Rpb24gdGFyZ2V0c1RhYlNob3coKXsKICAgICBpZiAoIWN0eC5sYXllclZlcnNpb24uaW5DdXJyZW50UHJqKXsKQEAgLTE1OSw3ICsxNjYsNyBAQAogICAgICAgICB2YXIgdGV4dCA9ICIgQWRkIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIHRvIHlvdXIgcHJvamVjdCAiKwogICAgICAgICAgICJ0byBlbmFibGUgdGhlc2UgcmVjaXBlcyI7CiAgICAgICAgIGFkZFJtTGF5ZXJCdG4udGV4dCh0ZXh0KTsKLSAgICAgICAgYWRkUm1MYXllckJ0bi5wcmVwZW5kKCI8c3BhbiBjbGFzcz1cImljb24tcGx1c1wiPjwvc3Bhbj4iKTsKKyAgICAgICAgYWRkUm1MYXllckJ0bi5wcmVwZW5kKCI8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tcGx1c1wiPjwvc3Bhbj4iKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGRlZmF1bHRBZGRCdG5UZXh0KCk7CiAgICAgICB9CkBAIC0xNzcsNyArMTg0LDcgQEAKICAgICAgICQoIiNuby1yZWNpcGVzLXlldCIpLmhpZGUoKTsKICAgICB9CiAKLSAgICB0YXJnZXRUYWIucmVtb3ZlQ2xhc3MoIm11dGVkIik7CisgICAgdGFyZ2V0VGFiLnJlbW92ZUNsYXNzKCJ0ZXh0LW11dGVkIik7CiAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAiI3JlY2lwZXMiKXsKICAgICAgIC8qIHJlIHJ1biB0aGUgbWFjaGluZXNUYWJTaG93IHRvIHVwZGF0ZSB0aGUgdGV4dCAqLwogICAgICAgdGFyZ2V0c1RhYlNob3coKTsKQEAgLTE5MiwyMCArMTk5LDE5IEBACiAgICAgZWxzZQogICAgICAgJCgiI25vLW1hY2hpbmVzLXlldCIpLmhpZGUoKTsKIAotICAgIG1hY2hpbmVUYWIucmVtb3ZlQ2xhc3MoIm11dGVkIik7CisgICAgbWFjaGluZVRhYi5yZW1vdmVDbGFzcygidGV4dC1tdXRlZCIpOwogICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gIiNtYWNoaW5lcyIpewogICAgICAgLyogcmUgcnVuIHRoZSBtYWNoaW5lc1RhYlNob3cgdG8gdXBkYXRlIHRoZSB0ZXh0ICovCiAgICAgICBtYWNoaW5lc1RhYlNob3coKTsKICAgICB9CiAKICAgICAkKCIuc2VsZWN0LW1hY2hpbmUtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7Ci0gICAgICBpZiAoJCh0aGlzKS5hdHRyKCJkaXNhYmxlZCIpID09PSAiZGlzYWJsZWQiKQorICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoImRpc2FibGVkIikpCiAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICB9KTsKIAogICB9KTsKIAotICB0YXJnZXRUYWIub24oJ3Nob3cnLCB0YXJnZXRzVGFiU2hvdyk7CiAKICAgZnVuY3Rpb24gbWFjaGluZXNUYWJTaG93KCl7CiAgICAgaWYgKCFjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByaikgewpAQCAtMjEzLDcgKzIxOSw3IEBACiAgICAgICAgIHZhciB0ZXh0ID0gIiBBZGQgdGhlICIrY3R4LmxheWVyVmVyc2lvbi5uYW1lKyIgbGF5ZXIgdG8geW91ciBwcm9qZWN0ICIgKwogICAgICAgICAgICJ0byBlbmFibGUgdGhlc2UgbWFjaGluZXMiOwogICAgICAgICBhZGRSbUxheWVyQnRuLnRleHQodGV4dCk7Ci0gICAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXBsdXNcIj48L3NwYW4+Iik7CisgICAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXNcIj48L3NwYW4+Iik7CiAgICAgICB9IGVsc2UgewogICAgICAgICBkZWZhdWx0QWRkQnRuVGV4dCgpOwogICAgICAgfQpAQCAtMjIyLDggKzIyOCw2IEBACiAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAibWFjaGluZXMiOwogICB9CiAKLSAgbWFjaGluZVRhYi5vbignc2hvdycsIG1hY2hpbmVzVGFiU2hvdyk7Ci0KICAgJCgiLnBhZ2VzaXplIikuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICAgdmFyIHNlYXJjaCA9IGxpYnRvYXN0ZXIucGFyc2VVcmxQYXJhbXMoKTsKICAgICBzZWFyY2gubGltaXQgPSB0aGlzLnZhbHVlOwpAQCAtMjM5LDE3ICsyNDMsMTcgQEAKIAogICAgIGlmIChhZGRlZCl7CiAgICAgICAvKiBlbmFibGUgYW5kIHN3aXRjaCBhbGwgdGhlIGJ1dHRvbiBzdGF0ZXMgKi8KLSAgICAgICQoIi5idWlsZC1yZWNpcGUtYnRuIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKLSAgICAgICQoIi5zZWxlY3QtbWFjaGluZS1idG4iKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgJCgiLmJ1aWxkLXJlY2lwZS1idG4iKS5yZW1vdmVDbGFzcygiZGlzYWJsZWQiKTsKKyAgICAgICQoIi5zZWxlY3QtbWFjaGluZS1idG4iKS5yZW1vdmVDbGFzcygiZGlzYWJsZWQiKTsKICAgICAgIGFkZFJtTGF5ZXJCdG4uYWRkQ2xhc3MoImJ0bi1kYW5nZXIiKTsKICAgICAgIGFkZFJtTGF5ZXJCdG4uZGF0YSgnZGlyZWN0aXZlJywgInJlbW92ZSIpOwogICAgICAgYWRkUm1MYXllckJ0bi50ZXh0KCIgUmVtb3ZlIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIGZyb20geW91ciBwcm9qZWN0Iik7Ci0gICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiPjwvc3Bhbj4iKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoXCI+PC9zcGFuPiIpOwogCiAgICAgfSBlbHNlIHsKICAgICAgIC8qIGRpc2FibGUgYW5kIHN3aXRjaCBhbGwgdGhlIGJ1dHRvbiBzdGF0ZXMgKi8KLSAgICAgICQoIi5idWlsZC1yZWNpcGUtYnRuIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwotICAgICAgJCgiLnNlbGVjdC1tYWNoaW5lLWJ0biIpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICAkKCIuYnVpbGQtcmVjaXBlLWJ0biIpLmFkZENsYXNzKCJkaXNhYmxlZCIpOworICAgICAgJCgiLnNlbGVjdC1tYWNoaW5lLWJ0biIpLmFkZENsYXNzKCJkaXNhYmxlZCIpOwogICAgICAgYWRkUm1MYXllckJ0bi5yZW1vdmVDbGFzcygiYnRuLWRhbmdlciIpOwogICAgICAgYWRkUm1MYXllckJ0bi5kYXRhKCdkaXJlY3RpdmUnLCAiYWRkIik7CiAKQEAgLTI1Nyw3ICsyNjEsNyBAQAogICAgICAgICogb24gd2hpY2ggdGFiIGlzIGN1cnJlbnRseSB2aXNpYmxlLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGp1c3QgY2FsbAogICAgICAgICogdGFiKCdzaG93JykgYXMgaWYgaXQncyBhbHJlYWR5IHZpc2libGUgaXQgZG9lc24ndCBydW4gdGhlIGV2ZW50LgogICAgICAgICovCi0gICAgICBzd2l0Y2ggKCQoIi5uYXYtcGlsbHMgLmFjdGl2ZSBhIikucHJvcCgnaWQnKSl7CisgICAgICBzd2l0Y2ggKCQoIi5uYXYtdGFicyAuYWN0aXZlIGEiKS5wcm9wKCdpZCcpKXsKICAgICAgICAgY2FzZSAnbWFjaGluZXMtdGFiJzoKICAgICAgICAgICBtYWNoaW5lc1RhYlNob3coKTsKICAgICAgICAgICBicmVhazsKQEAgLTI4Niw3ICsyOTAsNyBAQAogCiAgICAgICBzZXRMYXllckluQ3VycmVudFByaihhZGQpOwogCi0gICAgICAkKCIjYWxlcnQtYXJlYSIpLnNob3coKTsKKyAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihhbGVydE1zZyk7CiAgICAgfSk7CiAgIH0pOwogCkBAIC0zMjUsNyArMzI5LDcgQEAKICAgICAgICAgICAgIHRleHQgPSBlbnRyeUVsZW1lbnQudmFsKCk7CiAKICAgICAgICAgICAgIC8qIEhpZGUgdGhlICJOb3Qgc2V0IiB0ZXh0IGlmIGl0J3MgdmlzaWJsZSAqLwotICAgICAgICAgICAgaW5wdXRBcmVhLmZpbmQoIi5tdXRlZCIpLmhpZGUoKTsKKyAgICAgICAgICAgIGlucHV0QXJlYS5maW5kKCIudGV4dC1tdXRlZCIpLmhpZGUoKTsKICAgICAgICAgICAgIGlucHV0QXJlYS5maW5kKCIuY3VycmVudC12YWx1ZSIpLnRleHQodGV4dCk7CiAgICAgICAgICAgICAvKiBTYW1lIGJlaGF2aW91ciBhcyBjYW5jZWwgaW4gdGhhdCB3ZSBoaWRlIHRoZSBmb3JtL3Nob3cgY3VycmVudAogICAgICAgICAgICAgICogdmFsdWUuCkBAIC0zNDMsOSArMzQ3LDkgQEAKICAgLyogRGlzYWJsZSB0aGUgY2hhbmdlIGJ1dHRvbiB3aGVuIHdlIGhhdmUgbm8gZGF0YSBpbiB0aGUgaW5wdXQgKi8KICAgJCgiZGwgaW5wdXQsIGRsIHRleHRhcmVhIikub24oImlucHV0IixmdW5jdGlvbigpIHsKICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPT09IDApCi0gICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCIuY2hhbmdlLWJ0biIpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLm5leHQoIi5jaGFuZ2UtYnRuIikuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKICAgICBlbHNlCi0gICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCIuY2hhbmdlLWJ0biIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLm5leHQoIi5jaGFuZ2UtYnRuIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKICAgfSk7CiAKICAgLyogVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSBkdCdzIGRkIGhhcyBkYXRhIGluIGl0IG9yIGlmIHRoZSBjaGFuZ2UgZGF0YQpAQCAtMzU1LDExICszNTksMTEgQEAKICAgICBpZiAoJCh0aGlzKS5pcygiZHQiKSkgewogICAgICAgdmFyIGRkID0gJCh0aGlzKS5uZXh0KCJkZCIpOwogICAgICAgaWYgKCFkZC5jaGlsZHJlbigiZm9ybTp2aXNpYmxlIil8fCAhZGQuZmluZCgiLmN1cnJlbnQtdmFsdWUiKS5odG1sKCkpewotICAgICAgICBpZiAoY3R4LmxheWVyVmVyc2lvbi5zb3VyY2VJZCA9PSAzKXsKKyAgICAgICAgaWYgKGN0eC5sYXllclZlcnNpb24ubGF5ZXJfc291cmNlID09IGN0eC5sYXllclNvdXJjZVR5cGVzLlRZUEVfSU1QT1JURUQpewogICAgICAgICAvKiBUaGVyZSdzIG5vIGN1cnJlbnQgdmFsdWUgYW5kIHRoZSBsYXllciBpcyBlZGl0YWJsZQogICAgICAgICAgKiBzbyBzaG93IHRoZSAiTm90IHNldCIgYW5kIGhpZGUgdGhlIGRlbGV0ZSBpY29uCiAgICAgICAgICAqLwotICAgICAgICBkZC5maW5kKCIubXV0ZWQiKS5zaG93KCk7CisgICAgICAgIGRkLmZpbmQoIi50ZXh0LW11dGVkIikuc2hvdygpOwogICAgICAgICBkZC5maW5kKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgLyogV2UncmUgbm90IHZpZXdpbmcgYW4gZWRpdGFibGUgbGF5ZXIgc28gaGlkZSB0aGUgZW1wdHkgZGQvZGwgcGFpciAqLwpAQCAtMzg2LDEwICszOTAsMTMyIEBACiAgICAgJCh0aGlzKS5wYXJlbnRzKCJmb3JtIikuc3VibWl0KCk7CiAgIH0pOwogCisgICQoIiNsYXllci1kZWxldGUtY29uZmlybWVkIikuY2xpY2soZnVuY3Rpb24oKXsKIAotICBsYXllckRlcHNMaXN0LmZpbmQoIi5pY29uLXRyYXNoIikuY2xpY2sobGF5ZXJEZXBSZW1vdmVDbGljayk7CisgICAgJCgiI2RlbGV0ZS1sYXllci1tb2RhbCBidXR0b25bZGF0YS1kaXNtaXNzPSdtb2RhbCddIikuaGlkZSgpOworCisgICAgdmFyIG1lc3NhZ2UgPSAkKCc8c3Bhbj5Zb3UgaGF2ZSBkZWxldGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciBmcm9tIHlvdXIgcHJvamVjdDogPHN0cm9uZyBpZD0iZGVsZXRlZC1sYXllci1uYW1lIj48L3N0cm9uZz4nKTsKKyAgICBtZXNzYWdlLmZpbmQoIiNkZWxldGVkLWxheWVyLW5hbWUiKS50ZXh0KGN0eC5sYXllclZlcnNpb24ubmFtZSk7CisKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiREVMRVRFIiwKKyAgICAgICAgdXJsOiBjdHgueGhyVXBkYXRlTGF5ZXJVcmwsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpYnRvYXN0ZXIuc2V0Tm90aWZpY2F0aW9uKCJsYXllci1kZWxldGVkIiwgbWVzc2FnZS5odG1sKCkpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoZGF0YS5nb3RvVXJsKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9KTsKKworICBsYXllckRlcHNMaXN0LmZpbmQoIi5nbHlwaGljb24tdHJhc2giKS5jbGljayhsYXllckRlcFJlbW92ZUNsaWNrKTsKICAgbGF5ZXJEZXBzTGlzdC5maW5kKCJhIikudG9vbHRpcCgpOwotICAkKCIuaWNvbi10cmFzaCIpLnRvb2x0aXAoKTsKKyAgJCgiLmdseXBoaWNvbi10cmFzaCIpLnRvb2x0aXAoKTsKICAgJCgiLmNvbW1pdCIpLnRvb2x0aXAoKTsKIAorICBlZGl0TGF5ZXJTb3VyY2UuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgLyogS2luZGx5IGJyaW5nIHRoZSBnaXQgbGF5ZXJzIGltcG9ydGVkIGZyb20gbGF5ZXJpbmRleCB0byBub3JtYWwgcGFnZQorICAgICAqIGFuZCBub3QgdGhpcyBuZXcgcGFnZSA6KAorICAgICAqLworICAgICQodGhpcykuaGlkZSgpOworICAgIHNhdmVTb3VyY2VDaGFuZ2VzQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisKKyAgICAkKCIjZ2l0LXJlcG8taW5mbywgI2RpcmVjdG9yeS1pbmZvIikuaGlkZSgpOworICAgICQoIiNlZGl0LWxheWVyLXNvdXJjZS1mb3JtIikuZmFkZUluKCk7CisgICAgaWYgKCQoIiNsYXllci1kaXItcGF0aC1pbi1kZXRhaWxzIikudmFsKCkgPT0gIiIpIHsKKyAgICAgIC8vTG9jYWwgZGlyIHBhdGggaXMgZW1wdHkuLi4KKyAgICAgICQoIiNyZXBvIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOworICAgICAgJCgiI2xheWVyLWdpdCIpLmZhZGVJbigpOworICAgICAgJCgiI2xheWVyLWRpciIpLmhpZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgiI2xheWVyLWdpdCIpLmhpZGUoKTsKKyAgICAgICQoIiNsYXllci1kaXIiKS5mYWRlSW4oKTsKKyAgICB9CisgIH0pOworCisgICQoJ2lucHV0OnJhZGlvW25hbWU9InNvdXJjZS1sb2NhdGlvbiJdJykuY2hhbmdlKGZ1bmN0aW9uKCkgeworICAgIGlmICgkKCdpbnB1dFtuYW1lPXNvdXJjZS1sb2NhdGlvbl06Y2hlY2tlZCcpLnZhbCgpID09ICJyZXBvIikgeworICAgICAgJCgiI2xheWVyLWdpdCIpLmZhZGVJbigpOworICAgICAgJCgiI2xheWVyLWRpciIpLmhpZGUoKTsKKyAgICAgIGlmICgkKCIjbGF5ZXItZ2l0LXJlcG8tdXJsIikudmFsKCkubGVuZ3RoID09PSAwICYmIGxheWVyR2l0UmVmSW5wdXQudmFsKCkubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHNhdmVTb3VyY2VDaGFuZ2VzQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICQoIiNsYXllci1kaXIiKS5mYWRlSW4oKTsKKyAgICAgICQoIiNsYXllci1naXQiKS5oaWRlKCk7CisgICAgfQorICB9KTsKKworICAkKCIjbGF5ZXItZGlyLXBhdGgtaW4tZGV0YWlscyIpLmtleXVwKGZ1bmN0aW9uKCkgeworICAgIHNhdmVTb3VyY2VDaGFuZ2VzQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisgICQoIiNsYXllci1naXQtcmVwby11cmwiKS5rZXl1cChmdW5jdGlvbigpIHsKKyAgICBpZiAoJCgiI2xheWVyLWdpdC1yZXBvLXVybCIpLnZhbCgpLmxlbmd0aCA+IDAgJiYgbGF5ZXJHaXRSZWZJbnB1dC52YWwoKS5sZW5ndGggPiAwKSB7CisgICAgICBzYXZlU291cmNlQ2hhbmdlc0J0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0KKyAgfSk7CisKKyAgbGF5ZXJHaXRSZWZJbnB1dC5rZXl1cChmdW5jdGlvbigpIHsKKyAgICBpZiAoJCgiI2xheWVyLWdpdC1yZXBvLXVybCIpLnZhbCgpLmxlbmd0aCA+IDAgJiYgbGF5ZXJHaXRSZWZJbnB1dC52YWwoKS5sZW5ndGggPiAwKSB7CisgICAgICBzYXZlU291cmNlQ2hhbmdlc0J0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0KKyAgfSk7CisKKworICBsYXllclN1YkRpcklucHV0LmtleXVwKGZ1bmN0aW9uKCl7CisgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCl7CisgICAgICBzYXZlU291cmNlQ2hhbmdlc0J0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0KKyAgfSk7CisKKyAgJCgnI2NhbmNlbC1jaGFuZ2VzLWZvci1zd2l0Y2gnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAkKCIjZWRpdC1sYXllci1zb3VyY2UtZm9ybSIpLmhpZGUoKTsKKyAgICAkKCIjZGlyZWN0b3J5LWluZm8sICNnaXQtcmVwby1pbmZvIikuZmFkZUluKCk7CisgICAgZWRpdExheWVyU291cmNlLnNob3coKTsKKyAgfSk7CisKKyAgc2F2ZVNvdXJjZUNoYW5nZXNCdG4uY2xpY2soZnVuY3Rpb24oKSB7CisKKyAgICB2YXIgbGF5ZXJEYXRhID0geworICAgICAgdmNzX3VybDogJCgnI2xheWVyLWdpdC1yZXBvLXVybCcpLnZhbCgpLAorICAgICAgY29tbWl0OiBsYXllckdpdFJlZklucHV0LnZhbCgpLAorICAgICAgZGlycGF0aDogbGF5ZXJTdWJEaXJJbnB1dC52YWwoKSwKKyAgICAgIGxvY2FsX3NvdXJjZV9kaXI6ICQoJyNsYXllci1kaXItcGF0aC1pbi1kZXRhaWxzJykudmFsKCksCisgICAgfTsKKworICAgIGlmICgkKCdpbnB1dFtuYW1lPXNvdXJjZS1sb2NhdGlvbl06Y2hlY2tlZCcpLnZhbCgpID09ICJyZXBvIikgeworICAgICAgbGF5ZXJEYXRhLmxvY2FsX3NvdXJjZV9kaXIgPSAiIjsKKyAgICB9IGVsc2UgeworICAgICAgbGF5ZXJEYXRhLnZjc191cmwgPSAiIjsKKyAgICAgIGxheWVyRGF0YS5naXRfcmVmID0gIiI7CisgICAgfQorCisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IGN0eC54aHJVcGRhdGVMYXllclVybCwKKyAgICAgICAgZGF0YTogbGF5ZXJEYXRhLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogc3VjY2VzcyBsYXllciBwcm9wZXJ0eSBjaGFuZ2VkICovCisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS53YXJuKGRhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0pOwogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGlidG9hc3Rlci5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xpYnRvYXN0ZXIuanMKaW5kZXggNDM5MzBhMi4uODY2NjJiNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGlidG9hc3Rlci5qcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9saWJ0b2FzdGVyLmpzCkBAIC0zLDk2ICszLDgyIEBACiAgKiBUaGlzIG9iamVjdCByZWFsbHkganVzdCBoZWxwcyByZWFkYWJpbGl0eSBzaW5jZSB3ZSBjYW4gdGhlbiBoYXZlCiAgKiBhIHRyYWNlYWJsZSBuYW1lc3BhY2UuCiAgKi8KLXZhciBsaWJ0b2FzdGVyID0gKGZ1bmN0aW9uICgpewordmFyIGxpYnRvYXN0ZXIgPSAoZnVuY3Rpb24gKCkgeworICAvLyBwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIEJvb3RzdHJhcCAyJ3MgdHlwZWFoZWFkIChyZXF1aXJlZCBkdXJpbmcKKyAgLy8gdHJhbnNpdGlvbiBmcm9tIHYyIHRvIHYzKQorICB2YXIgdHlwZWFoZWFkID0galF1ZXJ5LmZuLnR5cGVhaGVhZC5ub0NvbmZsaWN0KCk7CisgIGpRdWVyeS5mbi5fdHlwZWFoZWFkID0gdHlwZWFoZWFkOwogCi0gIC8qIG1ha2VUeXBlYWhlYWQgcGFyYW1ldGVycwotICAgKiBlbGVtZW50U2VsZWN0b3I6IEpRdWVyeSBlbGVtZW50U2VsZWN0b3Igc3RyaW5nCi0gICAqIHhoclVybDogdGhlIHVybCB0byBnZXQgdGhlIEpTT04gZnJvbSBleHBlY3RzIEpTT04gaW4gdGhlIGZvcm06Ci0gICAqICB7ICJsaXN0IjogWyB7ICJuYW1lIjogInRlc3QiLCAiZGV0YWlsIiA6ICJhIHRlc3QgdGhpbmciICB9LCAuLi4uIF0gfQorICAvKiBNYWtlIGEgdHlwZWFoZWFkIGZyb20gYW4gaW5wdXQgZWxlbWVudAorICAgKgorICAgKiBfbWFrZVR5cGVhaGVhZCBwYXJhbWV0ZXJzCisgICAqIGpRRWxlbWVudDogaW5wdXQgZWxlbWVudCBhcyBzZWxlY3RlZCBieSAkKCdzZWxlY3RvcicpCisgICAqIHhoclVybDogdGhlIHVybCB0byBnZXQgdGhlIEpTT04gZnJvbTsgdGhpcyBVUkwgc2hvdWxkIHJldHVybiBKU09OIGluIHRoZQorICAgKiBmb3JtYXQ6CisgICAqICAgeyAicmVzdWx0cyI6IFsgeyAibmFtZSI6ICJ0ZXN0IiwgImRldGFpbCIgOiAiYSB0ZXN0IHRoaW5nIiAgfSwgLi4uIF0gfQogICAgKiB4aHJQYXJhbXM6IHRoZSBkYXRhL3BhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgZ2V0SlNPTiB1cmwgZS5nLgotICAgKiAgeyAndHlwZScgOiAncHJvamVjdHMnIH0gdGhlIHRleHQgdHlwZWQgd2lsbCBiZSBwYXNzZWQgYXMgJ3NlYXJjaCcuCi0gICAqICBzZWxlY3RlZENCOiBmdW5jdGlvbiB0byBjYWxsIG9uY2UgYW4gaXRlbSBoYXMgYmVlbiBzZWxlY3RlZCBvbmUKLSAgICogIGFyZyBvZiB0aGUgaXRlbS4KKyAgICogICB7ICd0eXBlJyA6ICdwcm9qZWN0cycgfTsgdGhlIHRleHQgdHlwZWQgd2lsbCBiZSBwYXNzZWQgYXMgJ3NlYXJjaCcuCisgICAqIHNlbGVjdGVkQ0I6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBhbiBpdGVtIGhhcyBiZWVuIHNlbGVjdGVkOyBoYXMKKyAgICogc2lnbmF0dXJlIHNlbGVjdGVkQ0IoaXRlbSksIHdoZXJlIGl0ZW0gaXMgYW4gaXRlbSBpbiB0aGUgZm9ybWF0IHNob3duCisgICAqIGluIHRoZSBKU09OIGxpc3QgYWJvdmUsIGkuZS4KKyAgICogICB7ICJuYW1lIjogIm5hbWUiLCAiZGV0YWlsIjogImRldGFpbCIgfS4KICAgICovCi0gIGZ1bmN0aW9uIF9tYWtlVHlwZWFoZWFkIChqUUVsZW1lbnQsIHhoclVybCwgeGhyUGFyYW1zLCBzZWxlY3RlZENCKSB7Ci0gICAgaWYgKCF4aHJVcmwgfHwgeGhyVXJsLmxlbmd0aCA9PT0gMCkKLSAgICAgIHRocm93KCJObyB1cmwgdG8gdHlwZWFoZWFkIHN1cHBsaWVkIik7CisgIGZ1bmN0aW9uIF9tYWtlVHlwZWFoZWFkKGpRRWxlbWVudCwgeGhyVXJsLCB4aHJQYXJhbXMsIHNlbGVjdGVkQ0IpIHsKKyAgICBpZiAoIXhoclVybCB8fCB4aHJVcmwubGVuZ3RoID09PSAwKSB7CisgICAgICB0aHJvdygiTm8gdXJsIHN1cHBsaWVkIGZvciB0eXBlYWhlYWQiKTsKKyAgICB9CiAKICAgICB2YXIgeGhyUmVxOwogCi0gICAgalFFbGVtZW50LnR5cGVhaGVhZCh7Ci0gICAgICAgIC8vIGVhY2ggdGltZSB0aGUgdHlwZWFoZWFkJ3MgY2hvaWNlcyBjaGFuZ2UsIGEKLSAgICAgICAgLy8gInR5cGVhaGVhZC1jaG9pY2VzLWNoYW5nZSIgZXZlbnQgaXMgZmlyZWQgd2l0aCBhbiBvYmplY3QKLSAgICAgICAgLy8gY29udGFpbmluZyB0aGUgYXZhaWxhYmxlIGNob2ljZXMgaW4gYSAiY2hvaWNlcyIgcHJvcGVydHkKLSAgICAgICAgc291cmNlOiBmdW5jdGlvbihxdWVyeSwgcHJvY2Vzcyl7CisgICAgalFFbGVtZW50Ll90eXBlYWhlYWQoCisgICAgICB7CisgICAgICAgIGhpZ2hsaWdodDogdHJ1ZSwKKyAgICAgICAgY2xhc3NOYW1lczogeworICAgICAgICAgIG9wZW46ICJkcm9wZG93bi1tZW51IiwKKyAgICAgICAgICBjdXJzb3I6ICJhY3RpdmUiCisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgIHNvdXJjZTogZnVuY3Rpb24gKHF1ZXJ5LCBzeW5jUmVzdWx0cywgYXN5bmNSZXN1bHRzKSB7CiAgICAgICAgICAgeGhyUGFyYW1zLnNlYXJjaCA9IHF1ZXJ5OwogCi0gICAgICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlcXVlc3QgaW4gcHJvZ3Jlc3MgZG9uJ3QgZmlyZSBvZmYgYW5vdGhlciBvbmUqLwotICAgICAgICAgIGlmICh4aHJSZXEpCisgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHJlcXVlc3QgaW4gcHJvZ3Jlc3MsIGNhbmNlbCBpdCBhbmQgc3RhcnQgYW5vdGhlcgorICAgICAgICAgIGlmICh4aHJSZXEpIHsKICAgICAgICAgICAgIHhoclJlcS5hYm9ydCgpOworICAgICAgICAgIH0KIAotICAgICAgICAgIHhoclJlcSA9ICQuZ2V0SlNPTih4aHJVcmwsIHRoaXMub3B0aW9ucy54aHJQYXJhbXMsIGZ1bmN0aW9uKGRhdGEpeworICAgICAgICAgIHhoclJlcSA9ICQuZ2V0SlNPTih4aHJVcmwsIHhoclBhcmFtcywgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9PSAib2siKSB7Ci0gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJFcnJvciBnZXR0aW5nIGRhdGEgZnJvbSBzZXJ2ZXIgIitkYXRhLmVycm9yKTsKKyAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZ2V0dGluZyBkYXRhIGZyb20gc2VydmVyOiAiICsgZGF0YS5lcnJvcik7CiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgeGhyUmVxID0gbnVsbDsKIAotICAgICAgICAgICAgalFFbGVtZW50LnRyaWdnZXIoInR5cGVhaGVhZC1jaG9pY2VzLWNoYW5nZSIsIHtjaG9pY2VzOiBkYXRhLnJlc3VsdHN9KTsKLQotICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3MoZGF0YS5yZXN1bHRzKTsKKyAgICAgICAgICAgIGFzeW5jUmVzdWx0cyhkYXRhLnJlc3VsdHMpOwogICAgICAgICAgIH0pOwogICAgICAgICB9LAotICAgICAgICB1cGRhdGVyOiBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgdmFyIGl0ZW1PYmogPSB0aGlzLiRtZW51LmZpbmQoJy5hY3RpdmUnKS5kYXRhKCdpdGVtT2JqZWN0Jyk7Ci0gICAgICAgICAgc2VsZWN0ZWRDQihpdGVtT2JqKTsKLSAgICAgICAgICByZXR1cm4gaXRlbTsKKworICAgICAgICAvLyBob3cgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgc2hvd24gaW4gdGhlIGlucHV0CisgICAgICAgIGRpc3BsYXk6IGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZTsKICAgICAgICAgfSwKLSAgICAgICAgbWF0Y2hlcjogZnVuY3Rpb24oaXRlbSkgewotICAgICAgICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmxvZygiTmFtZSBwcm9wZXJ0eSBtaXNzaW5nIGluIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHRlbXBsYXRlczogeworICAgICAgICAgIC8vIGhvdyB0aGUgaXRlbSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGRyb3Bkb3duCisgICAgICAgICAgc3VnZ2VzdGlvbjogZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICAgIHZhciBlbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIGVsdC5pbm5lckhUTUwgPSBpdGVtLm5hbWUgKyAiICIgKyBpdGVtLmRldGFpbDsKKyAgICAgICAgICAgIHJldHVybiBlbHQ7CiAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgKTsKIAotICAgICAgICAgIGlmICh0aGlzLiRlbGVtZW50LnZhbCgpLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0sCi0gICAgICAgIGhpZ2hsaWdodGVyOiBmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICAgIC8qIFVzZSBqcXVlcnkgdG8gZXNjYXBlIHRoZSBpdGVtIG5hbWUgYW5kIGRldGFpbCAqLwotICAgICAgICAgIHZhciBjdXJyZW50ID0gJCgiPHNwYW4+PC9zcGFuPiIpLnRleHQoaXRlbS5uYW1lICsgJyAnK2l0ZW0uZGV0YWlsKTsKLSAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5odG1sKCk7Ci0KLSAgICAgICAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csICdcXCQmJykKLSAgICAgICAgICByZXR1cm4gY3VycmVudC5yZXBsYWNlKG5ldyBSZWdFeHAoJygnICsgcXVlcnkgKyAnKScsICdpZycpLCBmdW5jdGlvbiAoJDEsIG1hdGNoKSB7Ci0gICAgICAgICAgICByZXR1cm4gJzxzdHJvbmc+JyArIG1hdGNoICsgJzwvc3Ryb25nPicKLSAgICAgICAgICB9KQotICAgICAgICB9LAotICAgICAgICBzb3J0ZXI6IGZ1bmN0aW9uIChpdGVtcykgeyByZXR1cm4gaXRlbXM7IH0sCi0gICAgICAgIHhoclVybDogeGhyVXJsLAotICAgICAgICB4aHJQYXJhbXM6IHhoclBhcmFtcywKLSAgICAgICAgeGhyUmVxOiB4aHJSZXEsCisgICAgLy8gd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIHVzaW5nIHRoZSB0eXBlYWhlYWQsIGludm9rZSB0aGUgY2FsbGJhY2sKKyAgICBqUUVsZW1lbnQub24oInR5cGVhaGVhZDpzZWxlY3QiLCBmdW5jdGlvbiAoZXZlbnQsIGl0ZW0pIHsKKyAgICAgIHNlbGVjdGVkQ0IoaXRlbSk7CiAgICAgfSk7Ci0KLQotICAgIC8qIENvcHkgb2YgYm9vdHN0cmFwJ3MgcmVuZGVyIGZ1bmMgYnV0IHNldHMgc2VsZWN0ZWRPYmplY3QgdmFsdWUgKi8KLSAgICBmdW5jdGlvbiBjdXN0b21SZW5kZXJGdW5jIChpdGVtcykgewotICAgICAgdmFyIHRoYXQgPSB0aGlzOwotCi0gICAgICBpdGVtcyA9ICQoaXRlbXMpLm1hcChmdW5jdGlvbiAoaSwgaXRlbSkgewotICAgICAgICBpID0gJCh0aGF0Lm9wdGlvbnMuaXRlbSkuYXR0cignZGF0YS12YWx1ZScsIGl0ZW0ubmFtZSkuZGF0YSgnaXRlbU9iamVjdCcsIGl0ZW0pOwotICAgICAgICBpLmZpbmQoJ2EnKS5odG1sKHRoYXQuaGlnaGxpZ2h0ZXIoaXRlbSkpOwotICAgICAgICByZXR1cm4gaVswXTsKLSAgICAgIH0pOwotCi0gICAgICBpdGVtcy5maXJzdCgpLmFkZENsYXNzKCdhY3RpdmUnKTsKLSAgICAgIHRoaXMuJG1lbnUuaHRtbChpdGVtcyk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBqUUVsZW1lbnQuZGF0YSgndHlwZWFoZWFkJykucmVuZGVyID0gY3VzdG9tUmVuZGVyRnVuYzsKICAgfQogCiAgIC8qIHN0YXJ0QUJ1aWxkOgpAQCAtMTYyLDExICsxNDgsMjUgQEAKICAgICB9KTsKICAgfQogCisgIGZ1bmN0aW9uIF9nZXRNb3N0UmVjZW50QnVpbGRzKHVybCwgb25zdWNjZXNzLCBvbmZhaWwpIHsKKyAgICAkLmFqYXgoeworICAgICAgdXJsOiB1cmwsCisgICAgICB0eXBlOiAnR0VUJywKKyAgICAgIGRhdGEgOiB7Zm9ybWF0OiAnanNvbid9LAorICAgICAgaGVhZGVyczogeydYLUNTUkZUb2tlbic6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICBvbnN1Y2Nlc3MgPyBvbnN1Y2Nlc3MoZGF0YSkgOiBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgIH0sCisgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgb25mYWlsID8gb25mYWlsKGRhdGEpIDogY29uc29sZS5lcnJvcihkYXRhKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCiAgIC8qIEdldCBhIHByb2plY3QncyBjb25maWd1cmF0aW9uIGluZm8gKi8KICAgZnVuY3Rpb24gX2dldFByb2plY3RJbmZvKHVybCwgb25zdWNjZXNzLCBvbmZhaWwpewogICAgICQuYWpheCh7CiAgICAgICAgIHR5cGU6ICJHRVQiLAotICAgICAgICBkYXRhIDogeyBmb3JtYXQ6ICJqc29uIiB9LAogICAgICAgICB1cmw6IHVybCwKICAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKF9kYXRhKSB7CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgZnVuY3Rpb24gX2VkaXRDdXJyZW50UHJvamVjdChkYXRhLCBvblN1Y2Nlc3MsIG9uRmFpbCl7CiAgICAgJC5hamF4KHsKICAgICAgICAgdHlwZTogIlBPU1QiLAotICAgICAgICB1cmw6IGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsICsgIj9mb3JtYXQ9anNvbiIsCisgICAgICAgIHVybDogbGlidG9hc3Rlci5jdHgueGhyUHJvamVjdFVybCwKICAgICAgICAgZGF0YTogZGF0YSwKICAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKQEAgLTMxNCwxMSArMzE0LDExIEBACiAgICAgdmFyIGFsZXJ0TXNnOwogCiAgICAgaWYgKGxheWVyRGVwc0xpc3QubGVuZ3RoID4gMCAmJiBhZGQgPT09IHRydWUpIHsKLSAgICAgIGFsZXJ0TXNnID0gJCgiPHNwYW4+WW91IGhhdmUgYWRkZWQgPHN0cm9uZz4iKyhsYXllckRlcHNMaXN0Lmxlbmd0aCsxKSsiPC9zdHJvbmc+IGxheWVycyB0byB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT4gYW5kIGl0cyBkZXBlbmRlbmNpZXMgPC9zcGFuPiIpOworICAgICAgYWxlcnRNc2cgPSAkKCI8c3Bhbj5Zb3UgaGF2ZSBhZGRlZCA8c3Ryb25nPiIrKGxheWVyRGVwc0xpc3QubGVuZ3RoKzEpKyI8L3N0cm9uZz4gbGF5ZXJzIHRvIHlvdXIgcHJvamVjdDogPGEgY2xhc3M9XCJhbGVydC1saW5rXCIgaWQ9XCJsYXllci1hZmZlY3RlZC1uYW1lXCI+PC9hPiBhbmQgaXRzIGRlcGVuZGVuY2llcyA8L3NwYW4+Iik7CiAKICAgICAgIC8qIEJ1aWxkIHRoZSBsYXllciBkZXBzIGxpc3QgKi8KICAgICAgIGxheWVyRGVwc0xpc3QubWFwKGZ1bmN0aW9uKGxheWVyLCBpKXsKLSAgICAgICAgdmFyIGxpbmsgPSAkKCI8YT48L2E+Iik7CisgICAgICAgIHZhciBsaW5rID0gJCgiPGEgY2xhc3M9XCJhbGVydC1saW5rXCI+PC9hPiIpOwogCiAgICAgICAgIGxpbmsuYXR0cigiaHJlZiIsIGxheWVyLmxheWVyZGV0YWlsdXJsKTsKICAgICAgICAgbGluay50ZXh0KGxheWVyLm5hbWUpOwpAQCAtMzMwLDkgKzMzMCw5IEBACiAgICAgICAgIGFsZXJ0TXNnLmFwcGVuZChsaW5rKTsKICAgICAgIH0pOwogICAgIH0gZWxzZSBpZiAobGF5ZXJEZXBzTGlzdC5sZW5ndGggPT09IDAgJiYgYWRkID09PSB0cnVlKSB7Ci0gICAgICBhbGVydE1zZyA9ICQoIjxzcGFuPllvdSBoYXZlIGFkZGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciB0byB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT48L3NwYW4+PC9zcGFuPiIpOworICAgICAgYWxlcnRNc2cgPSAkKCI8c3Bhbj5Zb3UgaGF2ZSBhZGRlZCA8c3Ryb25nPjE8L3N0cm9uZz4gbGF5ZXIgdG8geW91ciBwcm9qZWN0OiA8YSBjbGFzcz1cImFsZXJ0LWxpbmtcIiBpZD1cImxheWVyLWFmZmVjdGVkLW5hbWVcIj48L2E+PC9zcGFuPjwvc3Bhbj4iKTsKICAgICB9IGVsc2UgaWYgKGFkZCA9PT0gZmFsc2UpIHsKLSAgICAgIGFsZXJ0TXNnID0gJCgiPHNwYW4+WW91IGhhdmUgcmVtb3ZlZCA8c3Ryb25nPjE8L3N0cm9uZz4gbGF5ZXIgZnJvbSB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT48L3NwYW4+Iik7CisgICAgICBhbGVydE1zZyA9ICQoIjxzcGFuPllvdSBoYXZlIHJlbW92ZWQgPHN0cm9uZz4xPC9zdHJvbmc+IGxheWVyIGZyb20geW91ciBwcm9qZWN0OiA8YSBjbGFzcz1cImFsZXJ0LWxpbmtcIiBpZD1cImxheWVyLWFmZmVjdGVkLW5hbWVcIj48L2E+PC9zcGFuPiIpOwogICAgIH0KIAogICAgIGFsZXJ0TXNnLmNoaWxkcmVuKCIjbGF5ZXItYWZmZWN0ZWQtbmFtZSIpLnRleHQobGF5ZXIubmFtZSk7CkBAIC0zNDIsMTAgKzM0MiwxMiBAQAogICB9CiAKICAgZnVuY3Rpb24gX3Nob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSl7Ci0gICAgdmFyIGFsZXJ0TXNnID0gJCgiI2NoYW5nZS1ub3RpZmljYXRpb24tbXNnIik7CisgICAgJCgiLmFsZXJ0LWRpc21pc3NpYmxlIikuZmFkZU91dCgpLnByb21pc2UoKS5kb25lKGZ1bmN0aW9uKCl7CisgICAgICB2YXIgYWxlcnRNc2cgPSAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciKTsKIAotICAgIGFsZXJ0TXNnLmh0bWwobWVzc2FnZSk7Ci0gICAgJCgiI2NoYW5nZS1ub3RpZmljYXRpb24sICNjaGFuZ2Utbm90aWZpY2F0aW9uICoiKS5mYWRlSW4oKTsKKyAgICAgIGFsZXJ0TXNnLmh0bWwobWVzc2FnZSk7CisgICAgICAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbiwgI2NoYW5nZS1ub3RpZmljYXRpb24gKiIpLmZhZGVJbigpOworICAgIH0pOwogICB9CiAKICAgZnVuY3Rpb24gX2NyZWF0ZUN1c3RvbVJlY2lwZShuYW1lLCBiYXNlUmVjaXBlSWQsIGRvbmVDYil7CkBAIC0zNzQsMTEgKzM3Niw5OCBAQAogICAgIH0pOwogICB9CiAKKyAgLyogVmFsaWRhdGUgcHJvamVjdCBuYW1lcy4gVXNlIHVuaXF1ZSBwcm9qZWN0IG5hbWVzCisKKyAgICAgQWxsIGFyZ3VtZW50cyBhY2NlcHRlZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSBKUWV1cnkgb2JqZWN0cy4KKworICAgICBGb3IgZXhhbXBsZSBpZiB0aGUgSFRNTCBlbGVtZW50IGhhcyAiaGludC1lcnJvci1wcm9qZWN0LW5hbWUiLCB0aGVuCisgICAgIGl0IGlzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFzICQoIiNoaW50LWVycm9yLXByb2plY3QtbmFtZSIpLgorCisgICAgIEFyZzEgLSBwcm9qZWN0TmFtZSA6IFRoaXMgaXMgYSBzdHJpbmcgb2JqZWN0LiBJbiB0aGUgSFRNTCwgcHJvamVjdCBuYW1lIHdpbGwgYmUgZW50ZXJlZCBoZXJlLgorICAgICBBcmcyIC0gaGludEVlcnJvciA6IFRoaXMgaXMgYSBqcXVlcnkgb2JqZWN0IHdoaWNoIHdpbGwgYWNjZXB0IHNwYW4gd2hpY2ggdGhyb3dzIGVycm9yIGZvcgorICAgICAgICAgICAgZHVwbGljYXRlIHByb2plY3QKKyAgICAgQXJnMyAtIGN0cmxHcnBWYWxpZGF0ZVByb2plY3ROYW1lIDogVGhpcyBvYmplY3QgaG9sZHMgdGhlIGRpdiB3aXRoIGNsYXNzICJjb250cm9sLWdyb3VwIgorICAgICBBcmc0IC0gZW5hYmxlT3JEaXNhYmxlQnRuIDogVGhpcyBvYmplY3Qgd2lsbCBoZWxwIHRoZSBBUEkgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGZvcm0uCisgICAgICAgICAgICBGb3IgZXhhbXBsZSBpbiB0aGUgbmV3IHByb2plY3QgdGhlIGNyZWF0ZSBwcm9qZWN0IGJ1dHRvbiB3aWxsIGJlIGhpZGRlbiBpZiB0aGUKKyAgICAgICAgICAgIGR1cGxpY2F0ZSBwcm9qZWN0IGV4aXN0LiBTaW1pbGFybHkgaW4gdGhlIHByb2plY3R0b3BiYXIgdGhlIHNhdmUgYnV0dG9uIHdpbGwgYmUKKyAgICAgICAgICAgIGRpc2FibGVkIGlmIHRoZSBwcm9qZWN0IG5hbWUgYWxyZWFkeSBleGlzdC4KKworICAgICBSZXR1cm4gLSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIGFueXRoaW5nLiBJdCBzZXRzL3Vuc2V0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIGVsZW1lbnRzLgorICAqLworCisgIGZ1bmN0aW9uIF9tYWtlUHJvamVjdE5hbWVWYWxpZGF0aW9uKHByb2plY3ROYW1lLCBoaW50RXJyb3IsCisgICAgICAgICAgICAgICAgY3RybEdycFZhbGlkYXRlUHJvamVjdE5hbWUsIGVuYWJsZU9yRGlzYWJsZUJ0biApIHsKKworICAgICBmdW5jdGlvbiBjaGVja1Byb2plY3ROYW1lKHByb2plY3ROYW1lKXsKKyAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICB1cmw6IGxpYnRvYXN0ZXIuY3R4LnByb2plY3RzVHlwZUFoZWFkVXJsLAorICAgICAgICAgICAgZGF0YTogeyAnc2VhcmNoJyA6IHByb2plY3ROYW1lIH0sCisgICAgICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7CisgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdHMubGVuZ3RoID4gMCAmJgorICAgICAgICAgICAgICAgICAgZGF0YS5yZXN1bHRzWzBdLm5hbWUgPT09IHByb2plY3ROYW1lKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9qZWN0IG5hbWUgZXhpc3RzIGhlbmNlIHNob3cgdGhlIGVycm9yIGFuZCBkaXNhYmxlCisgICAgICAgICAgICAgICAgLy8gdGhlIHNhdmUgYnV0dG9uCisgICAgICAgICAgICAgICAgY3RybEdycFZhbGlkYXRlUHJvamVjdE5hbWUuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgICAgICAgICAgIGhpbnRFcnJvci5zaG93KCk7CisgICAgICAgICAgICAgICAgZW5hYmxlT3JEaXNhYmxlQnRuLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3RybEdycFZhbGlkYXRlUHJvamVjdE5hbWUucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgICAgICAgICAgIGhpbnRFcnJvci5oaWRlKCk7CisgICAgICAgICAgICAgICAgZW5hYmxlT3JEaXNhYmxlQnRuLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CisgICAgICAgICAgICB9LAorICAgICAgIH0pOworICAgICB9CisKKyAgICAgLyogVGhlIG1vbWVudCB1c2VyIHR5cGVzIHByb2plY3QgbmFtZSByZW1vdmUgdGhlIGVycm9yICovCisgICAgIHByb2plY3ROYW1lLm9uKCJpbnB1dCIsIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcHJvamVjdE5hbWUgPSAkKHRoaXMpLnZhbCgpOworICAgICAgICBjaGVja1Byb2plY3ROYW1lKHByb2plY3ROYW1lKQorICAgICB9KTsKKworICAgICAvKiBWYWxpZGF0ZSBuZXcgcHJvamVjdCBuYW1lICovCisgICAgIHByb2plY3ROYW1lLm9uKCJibHVyIiwgZnVuY3Rpb24oKXsKKyAgICAgICAgdmFyIHByb2plY3ROYW1lID0gJCh0aGlzKS52YWwoKTsKKyAgICAgICAgY2hlY2tQcm9qZWN0TmFtZShwcm9qZWN0TmFtZSkKKyAgICAgfSk7CisgIH0KKworICAvLyBpZiB0cnVlLCB0aGUgbG9hZGluZyBzcGlubmVyIGZvciBBamF4IHJlcXVlc3RzIHdpbGwgYmUgZGlzcGxheWVkCisgIC8vIGlmIHJlcXVlc3RzIHRha2UgbW9yZSB0aGFuIDEyMDBtcworICB2YXIgYWpheExvYWRpbmdUaW1lckVuYWJsZWQgPSB0cnVlOworCisgIC8vIHR1cm4gb24gdGhlIHBhZ2UtbGV2ZWwgbG9hZGluZyBzcGlubmVyIGZvciBBamF4IHJlcXVlc3RzCisgIGZ1bmN0aW9uIF9lbmFibGVBamF4TG9hZGluZ1RpbWVyKCkgeworICAgIGFqYXhMb2FkaW5nVGltZXJFbmFibGVkID0gdHJ1ZTsKKyAgfQorCisgIC8vIHR1cm4gb2ZmIHRoZSBwYWdlLWxldmVsIGxvYWRpbmcgc3Bpbm5lciBmb3IgQWpheCByZXF1ZXN0cworICBmdW5jdGlvbiBfZGlzYWJsZUFqYXhMb2FkaW5nVGltZXIoKSB7CisgICAgYWpheExvYWRpbmdUaW1lckVuYWJsZWQgPSBmYWxzZTsKKyAgfQorCisgIC8qIFV0aWxpdHkgZnVuY3Rpb24gdG8gc2V0IGEgbm90aWZpY2F0aW9uIGZvciB0aGUgbmV4dCBwYWdlIGxvYWQgKi8KKyAgZnVuY3Rpb24gX3NldE5vdGlmaWNhdGlvbihuYW1lLCBtZXNzYWdlKXsKKyAgICB2YXIgZGF0YSA9IHsKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBtZXNzYWdlOiBtZXNzYWdlCisgICAgfTsKKworICAgICQuY29va2llKCd0b2FzdGVyLW5vdGlmaWNhdGlvbicsIEpTT04uc3RyaW5naWZ5KGRhdGEpLCB7IHBhdGg6ICcvJ30pOworICB9CiAKICAgcmV0dXJuIHsKKyAgICBlbmFibGVBamF4TG9hZGluZ1RpbWVyOiBfZW5hYmxlQWpheExvYWRpbmdUaW1lciwKKyAgICBkaXNhYmxlQWpheExvYWRpbmdUaW1lcjogX2Rpc2FibGVBamF4TG9hZGluZ1RpbWVyLAogICAgIHJlbG9hZF9wYXJhbXMgOiByZWxvYWRfcGFyYW1zLAogICAgIHN0YXJ0QUJ1aWxkIDogX3N0YXJ0QUJ1aWxkLAogICAgIGNhbmNlbEFCdWlsZCA6IF9jYW5jZWxBQnVpbGQsCisgICAgZ2V0TW9zdFJlY2VudEJ1aWxkczogX2dldE1vc3RSZWNlbnRCdWlsZHMsCiAgICAgbWFrZVR5cGVhaGVhZCA6IF9tYWtlVHlwZWFoZWFkLAogICAgIGdldFByb2plY3RJbmZvOiBfZ2V0UHJvamVjdEluZm8sCiAgICAgZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdCA6IF9nZXRMYXllckRlcHNGb3JQcm9qZWN0LApAQCAtMzkwLDYgKzQ3OSw4IEBACiAgICAgbWFrZUxheWVyQWRkUm1BbGVydE1zZyA6IF9tYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnLAogICAgIHNob3dDaGFuZ2VOb3RpZmljYXRpb24gOiBfc2hvd0NoYW5nZU5vdGlmaWNhdGlvbiwKICAgICBjcmVhdGVDdXN0b21SZWNpcGU6IF9jcmVhdGVDdXN0b21SZWNpcGUsCisgICAgbWFrZVByb2plY3ROYW1lVmFsaWRhdGlvbjogX21ha2VQcm9qZWN0TmFtZVZhbGlkYXRpb24sCisgICAgc2V0Tm90aWZpY2F0aW9uOiBfc2V0Tm90aWZpY2F0aW9uLAogICB9OwogfSkoKTsKIApAQCAtNDIxLDEwICs1MTIsMjQgQEAKICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCsiPyIrY2FsbHBhcmFtcy5qb2luKCcmJyk7CiB9CiAKLQogLyogVGhpbmdzIHRoYXQgaGFwcGVuIGZvciBhbGwgcGFnZXMgKi8KICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogCisgIChmdW5jdGlvbiBzaG93Tm90aWZpY2F0aW9uUmVxdWVzdCgpeworICAgIHZhciBjb29raWUgPSAkLmNvb2tpZSgndG9hc3Rlci1ub3RpZmljYXRpb24nKTsKKworICAgIGlmICghY29va2llKQorICAgICAgcmV0dXJuOworCisgICAgdmFyIG5vdGlmaWNhdGlvbkRhdGEgPSBKU09OLnBhcnNlKGNvb2tpZSk7CisKKyAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obm90aWZpY2F0aW9uRGF0YS5tZXNzYWdlKTsKKworICAgICQucmVtb3ZlQ29va2llKCd0b2FzdGVyLW5vdGlmaWNhdGlvbicsIHsgcGF0aDogIi8ifSk7CisgIH0pKCk7CisKKworCiAgIHZhciBhamF4TG9hZGluZ1RpbWVyOwogCiAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBjb25zb2xlIG9iamVjdCB3aGljaCBtaWdodCBiZSB0aGUgY2FzZSBpbiBzb21lCkBAIC00OTMsOSArNTk4LDcgQEAKICAgICAgIGRlbGF5OiB7IHNob3cgOiAzMDAgfQogICAgIH0pOwogCi0gICAgLy8gc2hvdyBoZWxwIGJ1YmJsZSBvbmx5IG9uIGhvdmVyIGluc2lkZSB0YWJsZXMKLSAgICAkKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpOwotCisgICAgLy8gc2hvdyBoZWxwIGJ1YmJsZSBvbiBob3ZlciBpbnNpZGUgdGFibGVzCiAgICAgJCgidGFibGUiKS5vbigibW91c2VvdmVyIiwgInRoLCB0ZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgJCh0aGlzKS5maW5kKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsInZpc2libGUiKTsKICAgICB9KTsKQEAgLTUwOSwxNCArNjEyLDE0IEBACiAgICAgLy8gc2hvdyB0YXNrIHR5cGUgYW5kIG91dGNvbWUgaW4gdGFzayBkZXRhaWxzIHBhZ2VzCiAgICAgJCgiLnRhc2staW5mbyIpLnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiAyMDB9LCBwbGFjZW1lbnQ6ICdyaWdodCcgfSk7CiAKLSAgICAvLyBpbml0aWFsaXNlIHRoZSB0b29sdGlwcyBmb3IgdGhlIGljb24tcGVuY2lsIGljb25zCi0gICAgJCgiLmljb24tcGVuY2lsIikudG9vbHRpcCh7IGNvbnRhaW5lcjogJ2JvZHknLCBodG1sOiB0cnVlLCBkZWxheToge3Nob3c6IDQwMH0sIHRpdGxlOiAiQ2hhbmdlIiB9KTsKKyAgICAvLyBpbml0aWFsaXNlIHRoZSB0b29sdGlwcyBmb3IgdGhlIGVkaXQgaWNvbnMKKyAgICAkKCIuZ2x5cGhpY29uLWVkaXQiKS50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogNDAwfSwgdGl0bGU6ICJDaGFuZ2UiIH0pOwogCiAgICAgLy8gaW5pdGlhbGlzZSB0aGUgdG9vbHRpcHMgZm9yIHRoZSBkb3dubG9hZCBpY29ucwogICAgICQoIi5pY29uLWRvd25sb2FkLWFsdCIpLnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHsgc2hvdzogMjAwIH0gfSk7CiAKICAgICAvLyBpbml0aWFsaXNlIHBvcG92ZXIgZm9yIGRlYnVnIGluZm9ybWF0aW9uCi0gICAgJCgiLmljb24taW5mby1zaWduIikucG9wb3ZlciggeyBwbGFjZW1lbnQ6ICdib3R0b20nLCBodG1sOiB0cnVlLCBjb250YWluZXI6ICdib2R5JyB9KTsKKyAgICAkKCIuZ2x5cGhpY29uLWluZm8tc2lnbiIpLnBvcG92ZXIoIHsgcGxhY2VtZW50OiAnYm90dG9tJywgaHRtbDogdHJ1ZSwgY29udGFpbmVyOiAnYm9keScgfSk7CiAKICAgICAvLyBsaW5raW5nIGRpcmVjdGx5IHRvIHRhYnMKICAgICAkKGZ1bmN0aW9uKCl7CkBAIC01ODIsNyArNjg1LDkgQEAKICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChhamF4TG9hZGluZ1RpbWVyKTsKIAogICAgICAgYWpheExvYWRpbmdUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAkKCIjbG9hZGluZy1ub3RpZmljYXRpb24iKS5mYWRlSW4oKTsKKyAgICAgICAgaWYgKGxpYnRvYXN0ZXIuYWpheExvYWRpbmdUaW1lckVuYWJsZWQpIHsKKyAgICAgICAgICAkKCIjbG9hZGluZy1ub3RpZmljYXRpb24iKS5mYWRlSW4oKTsKKyAgICAgICAgfQogICAgICAgfSwgMTIwMCk7CiAgICAgfSk7CiAKQEAgLTYxMyw2ICs3MTgsMTEgQEAKICAgICAgIH0pOwogICAgIH0KIAorICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgbm90aWZpY2F0aW9uIG92ZXJsYXkgYSBtb2RhbCAqLworICAgICQoIi5tb2RhbCIpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24oKXsKKyAgICAgICQoIi5hbGVydC1kaXNtaXNzaWJsZSIpLmZhZGVPdXQoKTsKKyAgICB9KTsKKwogICAgIGlmIChsaWJ0b2FzdGVyLmRlYnVnKSB7CiAgICAgICBjaGVja19mb3JfZHVwbGljYXRlX2lkcygpOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9tcmJzZWN0aW9uLmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbXJic2VjdGlvbi5qcwppbmRleCAwOTExN2UxLi43M2QwOTM1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9tcmJzZWN0aW9uLmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL21yYnNlY3Rpb24uanMKQEAgLTEsMzMgKzEsMTkgQEAKIAogZnVuY3Rpb24gbXJiU2VjdGlvbkluaXQoY3R4KXsKLQotICB2YXIgcHJvamVjdEJ1aWxkczsKLQotICBpZiAoY3R4Lm1yYlR5cGUgPT09ICdwcm9qZWN0JykKLSAgICBwcm9qZWN0QnVpbGRzID0gdHJ1ZTsKLQotICAkKCIuY2FuY2VsLWJ1aWxkLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAkKCcjbGF0ZXN0LWJ1aWxkcycpLm9uKCdjbGljaycsICcuY2FuY2VsLWJ1aWxkLWJ0bicsIGZ1bmN0aW9uKGUpeworICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogCiAgICAgdmFyIHVybCA9ICQodGhpcykuZGF0YSgncmVxdWVzdC11cmwnKTsKICAgICB2YXIgYnVpbGRSZXFJZHMgPSAkKHRoaXMpLmRhdGEoJ2J1aWxkcmVxdWVzdC1pZCcpOwotICAgIHZhciBiYW5uZXIgPSAkKHRoaXMpLnBhcmVudHMoIi5hbGVydCIpOwogCi0gICAgYmFubmVyLmZpbmQoIi5wcm9ncmVzcy1pbmZvIikuZmFkZU91dCgpLnByb21pc2UoKS5kb25lKGZ1bmN0aW9uKCl7Ci0gICAgICAkKCIjY2FuY2VsbGluZy1tc2ctIiArIGJ1aWxkUmVxSWRzKS5zaG93KCk7Ci0gICAgICBjb25zb2xlLmxvZygiY2FuY2VsIGJ1aWxkIik7Ci0gICAgICBsaWJ0b2FzdGVyLmNhbmNlbEFCdWlsZCh1cmwsIGJ1aWxkUmVxSWRzLCBmdW5jdGlvbigpewotICAgICAgICBpZiAocHJvamVjdEJ1aWxkcyA9PSBmYWxzZSl7Ci0gICAgICAgICAgLyogdGhlIGFsbCBidWlsZHMgcGFnZSBpcyBub3QgJ3NlbGYgdXBkYXRpbmcnIGxpa2UgdGhlaQotICAgICAgICAgICAqIHByb2plY3QgQnVpbGRzCi0gICAgICAgICAgICovCi0gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwotICAgICAgICB9Ci0gICAgICB9LCBudWxsKTsKLSAgICB9KTsKKyAgICBsaWJ0b2FzdGVyLmNhbmNlbEFCdWlsZCh1cmwsIGJ1aWxkUmVxSWRzLCBmdW5jdGlvbiAoKSB7CisgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CisgICAgfSwgbnVsbCk7CiAgIH0pOwogCi0gICQoIi5ydW4tYWdhaW4tYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICQoJyNsYXRlc3QtYnVpbGRzJykub24oJ2NsaWNrJywgJy5yZWJ1aWxkLWJ0bicsIGZ1bmN0aW9uKGUpeworICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogCiAgICAgdmFyIHVybCA9ICQodGhpcykuZGF0YSgncmVxdWVzdC11cmwnKTsKQEAgLTM4LDU4ICsyNCwxMTIgQEAKICAgICB9LCBudWxsKTsKICAgfSk7CiAKKyAgLy8gY2FjaGVkIHZlcnNpb24gb2YgYnVpbGREYXRhLCBzbyB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgYSBidWlsZCBoYXMKKyAgLy8gY2hhbmdlZCBzaW5jZSBpdCB3YXMgbGFzdCBmZXRjaGVkLCBhbmQgdXBkYXRlIHRoZSBET00gYXBwcm9wcmlhdGVseQorICB2YXIgYnVpbGREYXRhID0ge307CiAKLSAgdmFyIHByb2dyZXNzVGltZXI7CisgIC8vIHJldHVybnMgdGhlIGNhY2hlZCB2ZXJzaW9uIG9mIHRoaXMgYnVpbGQsIG9yIHt9IGlzIHRoZXJlIGlzbid0IGEgY2FjaGVkIG9uZQorICBmdW5jdGlvbiBnZXRDYWNoZWQoYnVpbGQpIHsKKyAgICByZXR1cm4gYnVpbGREYXRhW2J1aWxkLmlkXSB8fCB7fTsKKyAgfQogCi0gIGlmIChwcm9qZWN0QnVpbGRzID09PSB0cnVlKXsKLSAgICBwcm9ncmVzc1RpbWVyID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgewotICAgICAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwKLSAgICAgICAgZnVuY3Rpb24ocHJqSW5mbyl7Ci0gICAgICAgICAgLyogVGhlc2UgdHdvIGFyZSBuZWVkZWQgYmVjYXVzZSBhIGJ1aWxkIGNhbiBiZSAxMDAlIGFuZCBzdGlsbAotICAgICAgICAgICAqIGluIHByb2dyZXNzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSAlIGRvbmUgaXMgdXBkYXRlZCBhdCB0aGUKLSAgICAgICAgICAgKiBzdGFydCBvZiBhIHRhc2sgc28gaXQgY2FuIGJlIGRvaW5nIHRoZSBsYXN0IHRhc2sgYXQgMTAwJQotICAgICAgICAgICAqLwotICAgICAgICAgIHZhciBpblByb2dyZXNzID0gMDsKLSAgICAgICAgICB2YXIgYWxsUGVyY2VudERvbmUgPSAwOwotICAgICAgICAgIGlmIChwcmpJbmZvLmJ1aWxkcy5sZW5ndGggPT09IDApCi0gICAgICAgICAgICByZXR1cm4KKyAgLy8gcmV0dXJucyB0cnVlIGlmIGEgYnVpbGQncyBzdGF0ZSBjaGFuZ2VkIHRvICJTdWNjZWVkZWQiLCAiRmFpbGVkIgorICAvLyBvciAiQ2FuY2VsbGVkIiBmcm9tIHNvbWUgb3RoZXIgdmFsdWUKKyAgZnVuY3Rpb24gYnVpbGRGaW5pc2hlZChidWlsZCkgeworICAgIHZhciBjYWNoZWQgPSBnZXRDYWNoZWQoYnVpbGQpOworICAgIHJldHVybiBjYWNoZWQuc3RhdGUgJiYKKyAgICAgIGNhY2hlZC5zdGF0ZSAhPT0gYnVpbGQuc3RhdGUgJiYKKyAgICAgIChidWlsZC5zdGF0ZSA9PSAnU3VjY2VlZGVkJyB8fCBidWlsZC5zdGF0ZSA9PSAnRmFpbGVkJyB8fAorICAgICAgIGJ1aWxkLnN0YXRlID09ICdDYW5jZWxsZWQnKTsKKyAgfQogCi0gICAgICAgICAgZm9yICh2YXIgaSBpbiBwcmpJbmZvLmJ1aWxkcyl7Ci0gICAgICAgICAgICB2YXIgYnVpbGQgPSBwcmpJbmZvLmJ1aWxkc1tpXTsKKyAgLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkCisgIGZ1bmN0aW9uIHN0YXRlQ2hhbmdlZChidWlsZCkgeworICAgIHZhciBjYWNoZWQgPSBnZXRDYWNoZWQoYnVpbGQpOworICAgIHJldHVybiAoY2FjaGVkLnN0YXRlICE9PSBidWlsZC5zdGF0ZSk7CisgIH0KIAotICAgICAgICAgICAgaWYgKGJ1aWxkLm91dGNvbWUgPT09ICJJbiBQcm9ncmVzcyIgfHwKLSAgICAgICAgICAgICAgICQoIi5wcm9ncmVzcyAuYmFyIikubGVuZ3RoID4gMCl7Ci0gICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgYnVpbGQgcHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgdmFyIHBlcmNlbnREb25lOworICAvLyByZXR1cm5zIHRydWUgaWYgdGhlIHRhc2tzX2NvbXBsZXRlX3BlcmNlbnRhZ2UgY2hhbmdlZAorICBmdW5jdGlvbiB0YXNrc1Byb2dyZXNzQ2hhbmdlZChidWlsZCkgeworICAgIHZhciBjYWNoZWQgPSBnZXRDYWNoZWQoYnVpbGQpOworICAgIHJldHVybiAoY2FjaGVkLnRhc2tzX2NvbXBsZXRlX3BlcmNlbnRhZ2UgIT09IGJ1aWxkLnRhc2tzX2NvbXBsZXRlX3BlcmNlbnRhZ2UpOworICB9CiAKLSAgICAgICAgICAgICAgaWYgKGJ1aWxkLm91dGNvbWUgIT09ICJJbiBQcm9ncmVzcyIpewotICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgdG8gaWdub3JlIHRoZSB2YWx1ZSB3aGVuIGl0J3MgU3VjY2VlZGVkIGJlY2F1c2UgaXQKLSAgICAgICAgICAgICAgICAqICAgZ29lcyBiYWNrIHRvIDAKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHBlcmNlbnREb25lID0gMTAwOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBlcmNlbnREb25lID0gYnVpbGQucGVyY2VudERvbmU7Ci0gICAgICAgICAgICAgICAgaW5Qcm9ncmVzcysrOwotICAgICAgICAgICAgICB9CisgIC8vIHJldHVybnMgdHJ1ZSBpZiB0aGUgbnVtYmVyIG9mIHJlY2lwZXMgcGFyc2VkL3RvIHBhcnNlIGNoYW5nZWQKKyAgZnVuY3Rpb24gcmVjaXBlUHJvZ3Jlc3NDaGFuZ2VkKGJ1aWxkKSB7CisgICAgdmFyIGNhY2hlZCA9IGdldENhY2hlZChidWlsZCk7CisgICAgcmV0dXJuIChjYWNoZWQucmVjaXBlc19wYXJzZWRfcGVyY2VudGFnZSAhPT0gYnVpbGQucmVjaXBlc19wYXJzZWRfcGVyY2VudGFnZSk7CisgIH0KIAotICAgICAgICAgICAgICAkKCIjYnVpbGQtcGMtZG9uZS0iICsgYnVpbGQuaWQpLnRleHQocGVyY2VudERvbmUpOwotICAgICAgICAgICAgICAkKCIjYnVpbGQtcGMtZG9uZS10aXRsZS0iICsgYnVpbGQuaWQpLmF0dHIoInRpdGxlIiwgcGVyY2VudERvbmUpOwotICAgICAgICAgICAgICAkKCIjYnVpbGQtcGMtZG9uZS1iYXItIiArIGJ1aWxkLmlkKS5jc3MoIndpZHRoIiwKLSAgICAgICAgICAgICAgICBTdHJpbmcocGVyY2VudERvbmUpICsgIiUiKTsKKyAgZnVuY3Rpb24gcmVmcmVzaE1vc3RSZWNlbnRCdWlsZHMoKXsKKyAgICBsaWJ0b2FzdGVyLmdldE1vc3RSZWNlbnRCdWlsZHMoCisgICAgICBsaWJ0b2FzdGVyLmN0eC5tb3N0UmVjZW50QnVpbGRzVXJsLAogCi0gICAgICAgICAgICAgIGFsbFBlcmNlbnREb25lICs9IHBlcmNlbnREb25lOwotICAgICAgICAgICAgfQorICAgICAgLy8gc3VjY2VzcyBjYWxsYmFjaworICAgICAgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIGJ1aWxkOworICAgICAgICB2YXIgdG1wbDsKKyAgICAgICAgdmFyIGNvbnRhaW5lcjsKKyAgICAgICAgdmFyIHNlbGVjdG9yOworICAgICAgICB2YXIgY29sb3VyQ2xhc3M7CisgICAgICAgIHZhciBlbGVtZW50czsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBidWlsZCA9IGRhdGFbaV07CisKKyAgICAgICAgICBpZiAoYnVpbGRGaW5pc2hlZChidWlsZCkpIHsKKyAgICAgICAgICAgIC8vIGEgYnVpbGQgZmluaXNoZWQ6IHJlbG9hZCB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBidWlsZAorICAgICAgICAgICAgLy8gc2hvd3MgdXAgaW4gdGhlIGJ1aWxkcyB0YWJsZQorICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChzdGF0ZUNoYW5nZWQoYnVpbGQpKSB7CisgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHdob2xlIHRlbXBsYXRlCisgICAgICAgICAgICBidWlsZC53YXJuaW5nc19wbHVyYWxpc2UgPSAoYnVpbGQud2FybmluZ3MgIT09IDEgPyAncycgOiAnJyk7CisgICAgICAgICAgICBidWlsZC5lcnJvcnNfcGx1cmFsaXNlID0gKGJ1aWxkLmVycm9ycyAhPT0gMSA/ICdzJyA6ICcnKTsKKworICAgICAgICAgICAgdG1wbCA9ICQudGVtcGxhdGVzKCIjYnVpbGQtdGVtcGxhdGUiKTsKKworICAgICAgICAgICAgaHRtbCA9ICQodG1wbC5yZW5kZXIoYnVpbGQpKTsKKworICAgICAgICAgICAgc2VsZWN0b3IgPSAnW2RhdGEtbGF0ZXN0LWJ1aWxkLXJlc3VsdD0iJyArIGJ1aWxkLmlkICsgJyJdICcgKworICAgICAgICAgICAgICAnW2RhdGEtcm9sZT0iYnVpbGQtc3RhdHVzLWNvbnRhaW5lciJdJzsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9ICQoc2VsZWN0b3IpOworCisgICAgICAgICAgICAvLyBpbml0aWFsaXplIGJvb3RzdHJhcCB0b29sdGlwcyBpbiB0aGUgbmV3IEhUTUwKKyAgICAgICAgICAgIGh0bWwuZmluZCgnc3Bhbi5nbHlwaGljb24tcXVlc3Rpb24tc2lnbicpLnRvb2x0aXAoKTsKKworICAgICAgICAgICAgY29udGFpbmVyLmh0bWwoaHRtbCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHRhc2tzUHJvZ3Jlc3NDaGFuZ2VkKGJ1aWxkKSkgeworICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSB0YXNrIHByb2dyZXNzIHRleHQKKyAgICAgICAgICAgIHNlbGVjdG9yID0gJyNidWlsZC1wYy1kb25lLScgKyBidWlsZC5pZDsKKyAgICAgICAgICAgICQoc2VsZWN0b3IpLmh0bWwoYnVpbGQudGFza3NfY29tcGxldGVfcGVyY2VudGFnZSk7CisKKyAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgdGFzayBwcm9ncmVzcyBiYXIKKyAgICAgICAgICAgIHNlbGVjdG9yID0gJyNidWlsZC1wYy1kb25lLWJhci0nICsgYnVpbGQuaWQ7CisgICAgICAgICAgICAkKHNlbGVjdG9yKS53aWR0aChidWlsZC50YXNrc19jb21wbGV0ZV9wZXJjZW50YWdlICsgJyUnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAocmVjaXBlUHJvZ3Jlc3NDaGFuZ2VkKGJ1aWxkKSkgeworICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSByZWNpcGUgcHJvZ3Jlc3MgdGV4dAorICAgICAgICAgICAgc2VsZWN0b3IgPSAnI3JlY2lwZXMtcGFyc2VkLXBlcmNlbnRhZ2UtJyArIGJ1aWxkLmlkOworICAgICAgICAgICAgJChzZWxlY3RvcikuaHRtbChidWlsZC5yZWNpcGVzX3BhcnNlZF9wZXJjZW50YWdlKTsKKworICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSByZWNpcGUgcHJvZ3Jlc3MgYmFyCisgICAgICAgICAgICBzZWxlY3RvciA9ICcjcmVjaXBlcy1wYXJzZWQtcGVyY2VudGFnZS1iYXItJyArIGJ1aWxkLmlkOworICAgICAgICAgICAgJChzZWxlY3Rvcikud2lkdGgoYnVpbGQucmVjaXBlc19wYXJzZWRfcGVyY2VudGFnZSArICclJyk7CiAgICAgICAgICAgfQogCi0gICAgICAgICAgaWYgKGFsbFBlcmNlbnREb25lID09PSAoMTAwICogcHJqSW5mby5idWlsZHMubGVuZ3RoKSAmJiAhaW5Qcm9ncmVzcykKLSAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKKyAgICAgICAgICBidWlsZERhdGFbYnVpbGQuaWRdID0gYnVpbGQ7CisgICAgICAgIH0KKyAgICAgIH0sCiAKLSAgICAgICAgICAvKiBPdXIgcHJvZ3Jlc3MgYmFyIGlzIG5vdCBzdGlsbCBzaG93aW5nIHNvIHNodXRkb3duIHRoZSBwb2xsaW5nLiAqLwotICAgICAgICAgIGlmICgkKCIucHJvZ3Jlc3MgLmJhciIpLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHByb2dyZXNzVGltZXIpOwotCi0gICAgICB9KTsKLSAgICB9LCAxNTAwKTsKKyAgICAgIC8vIGZhaWwgY2FsbGJhY2sKKyAgICAgIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YSk7CisgICAgICB9CisgICAgKTsKICAgfQotfQogCisgIHdpbmRvdy5zZXRJbnRlcnZhbChyZWZyZXNoTW9zdFJlY2VudEJ1aWxkcywgMTUwMCk7CisgIHJlZnJlc2hNb3N0UmVjZW50QnVpbGRzKCk7Cit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9uZXdjdXN0b21pbWFnZV9tb2RhbC5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL25ld2N1c3RvbWltYWdlX21vZGFsLmpzCmluZGV4IGNiOWVkNGQuLmRhY2U4ZTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL25ld2N1c3RvbWltYWdlX21vZGFsLmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL25ld2N1c3RvbWltYWdlX21vZGFsLmpzCkBAIC0yMiwyNiArMjIsNDAgQEAKICAgdmFyIG5hbWVJbnB1dCA9IGltZ0N1c3RvbU1vZGFsLmZpbmQoJ2lucHV0Jyk7CiAKICAgdmFyIGludmFsaWROYW1lTXNnID0gIkltYWdlIG5hbWVzIGNhbm5vdCBjb250YWluIHNwYWNlcyBvciBjYXBpdGFsIGxldHRlcnMuIFRoZSBvbmx5IGFsbG93ZWQgc3BlY2lhbCBjaGFyYWN0ZXIgaXMgZGFzaCAoLSkuIjsKLSAgdmFyIGR1cGxpY2F0ZU5hbWVNc2cgPSAiQSByZWNpcGUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIEltYWdlIG5hbWVzIG11c3QgYmUgdW5pcXVlLiI7CisgIHZhciBkdXBsaWNhdGVOYW1lTXNnID0gIkFuIGltYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBJbWFnZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZS4iOwogICB2YXIgZHVwbGljYXRlSW1hZ2VJblByb2plY3RNc2cgPSAiQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBwcm9qZWN0LiIKICAgdmFyIGludmFsaWRCYXNlUmVjaXBlSWRNc2cgPSAiUGxlYXNlIHNlbGVjdCBhbiBpbWFnZSB0byBjdXN0b21pc2UuIjsKIAotICAvLyBjYXB0dXJlIGNsaWNrcyBvbiByYWRpbyBidXR0b25zIGluc2lkZSB0aGUgbW9kYWw7IHdoZW4gb25lIGlzIHNlbGVjdGVkLAotICAvLyBzZXQgdGhlIHJlY2lwZSBvbiB0aGUgbW9kYWwKLSAgaW1nQ3VzdG9tTW9kYWwub24oImNsaWNrIiwgIltuYW1lPSdzZWxlY3QtaW1hZ2UnXSIsIGZ1bmN0aW9uIChlKSB7CisgIC8vIHNldCBidXR0b24gdG8gInN1Ym1pdCIgc3RhdGUgYW5kIGVuYWJsZSB0ZXh0IGVudHJ5IHNvIHVzZXIgY2FuCisgIC8vIGVudGVyIHRoZSBjdXN0b20gcmVjaXBlIG5hbWUKKyAgc2hvd1N1Ym1pdFN0YXRlKCk7CisKKyAgLyogY2FwdHVyZSBjbGlja3Mgb24gcmFkaW8gYnV0dG9ucyBpbnNpZGUgdGhlIG1vZGFsOyB3aGVuIG9uZSBpcyBzZWxlY3RlZCwKKyAgICogc2V0IHRoZSByZWNpcGUgb24gdGhlIG1vZGFsCisgICAqLworICBpbWdDdXN0b21Nb2RhbC5vbigiY2xpY2siLCAiW25hbWU9J3NlbGVjdC1pbWFnZSddIiwgZnVuY3Rpb24oZSkgewogICAgIGNsZWFyUmVjaXBlRXJyb3IoKTsKKwkJJCgiLnJhZGlvIikuZWFjaChmdW5jdGlvbigpeworCQkJJCh0aGlzKS5yZW1vdmVDbGFzcygiaGFzLWVycm9yIik7CisJCX0pOwogCiAgICAgdmFyIHJlY2lwZUlkID0gJChlLnRhcmdldCkuYXR0cignZGF0YS1yZWNpcGUnKTsKICAgICBpbWdDdXN0b21Nb2RhbC5kYXRhKCdyZWNpcGUnLCByZWNpcGVJZCk7CiAgIH0pOwogCiAgIG5ld0N1c3RvbUltZ0J0bi5jbGljayhmdW5jdGlvbihlKXsKKyAgICAvLyBkaXNhYmxlIHRoZSBidXR0b24gYW5kIHRleHQgZW50cnkKKyAgICBzaG93TG9hZGluZ1N0YXRlKCk7CisKICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAKICAgICB2YXIgYmFzZVJlY2lwZUlkID0gaW1nQ3VzdG9tTW9kYWwuZGF0YSgncmVjaXBlJyk7CiAKICAgICBpZiAoIWJhc2VSZWNpcGVJZCkgewogICAgICAgc2hvd1JlY2lwZUVycm9yKGludmFsaWRCYXNlUmVjaXBlSWRNc2cpOworCQkJJCgiLnJhZGlvIikuZWFjaChmdW5jdGlvbigpeworCQkJCSQodGhpcykuYWRkQ2xhc3MoImhhcy1lcnJvciIpOworCQkJfSk7CiAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MiwxNiArNzYsMzcgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgaW1nQ3VzdG9tTW9kYWwubW9kYWwoJ2hpZGUnKTsKKyAgICAgICAgICBpbWdDdXN0b21Nb2RhbC5vbmUoJ2hpZGRlbi5icy5tb2RhbCcsIHNob3dTdWJtaXRTdGF0ZSk7CiAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocmV0LnVybCArICc/bm90aWZ5PW5ldycpOwogICAgICAgICB9CiAgICAgICB9KTsKICAgICB9CiAgIH0pOwogCisgIC8vIGVuYWJsZSB0ZXh0IGVudHJ5LCBzaG93ICJDcmVhdGUgaW1hZ2UiIGJ1dHRvbiB0ZXh0CisgIGZ1bmN0aW9uIHNob3dTdWJtaXRTdGF0ZSgpIHsKKyAgICBsaWJ0b2FzdGVyLmVuYWJsZUFqYXhMb2FkaW5nVGltZXIoKTsKKyAgICBuZXdDdXN0b21JbWdCdG4uZmluZCgnW2RhdGEtcm9sZT0ibG9hZGluZy1zdGF0ZSJdJykuaGlkZSgpOworICAgIG5ld0N1c3RvbUltZ0J0bi5maW5kKCdbZGF0YS1yb2xlPSJzdWJtaXQtc3RhdGUiXScpLnNob3coKTsKKyAgICBuZXdDdXN0b21JbWdCdG4ucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICBuYW1lSW5wdXQucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgfQorCisgIC8vIGRpc2FibGUgdGV4dCBlbnRyeSwgc2hvdyAiQ3JlYXRpbmcgaW1hZ2UuLi4iIGJ1dHRvbiB0ZXh0OworICAvLyB3ZSBhbHNvIGRpc2FibGVkIHRoZSBwYWdlLWxldmVsIGFqYXggbG9hZGluZyBzcGlubmVyIHdoaWxlIHRoaXMgc3Bpbm5lcgorICAvLyBpcyBhY3RpdmUKKyAgZnVuY3Rpb24gc2hvd0xvYWRpbmdTdGF0ZSgpIHsKKyAgICBsaWJ0b2FzdGVyLmRpc2FibGVBamF4TG9hZGluZ1RpbWVyKCk7CisgICAgbmV3Q3VzdG9tSW1nQnRuLmZpbmQoJ1tkYXRhLXJvbGU9InN1Ym1pdC1zdGF0ZSJdJykuaGlkZSgpOworICAgIG5ld0N1c3RvbUltZ0J0bi5maW5kKCdbZGF0YS1yb2xlPSJsb2FkaW5nLXN0YXRlIl0nKS5zaG93KCk7CisgICAgbmV3Q3VzdG9tSW1nQnRuLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgbmFtZUlucHV0LmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgIH0KKwogICBmdW5jdGlvbiBzaG93TmFtZUVycm9yKHRleHQpewogICAgIGludmFsaWROYW1lSGVscC50ZXh0KHRleHQpOwogICAgIGludmFsaWROYW1lSGVscC5zaG93KCk7Ci0gICAgbmFtZUlucHV0LnBhcmVudCgpLmFkZENsYXNzKCdlcnJvcicpOworICAgIG5hbWVJbnB1dC5wYXJlbnQoKS5hZGRDbGFzcygnaGFzLWVycm9yJyk7CiAgIH0KIAogICBmdW5jdGlvbiBzaG93UmVjaXBlRXJyb3IodGV4dCl7CkBAIC05MiwyNiArMTI3LDI2IEBACiAgICAgaWYgKG5hbWVJbnB1dC52YWwoKS5zZWFyY2goL1teYS16fDAtOXwtXS8pICE9IC0xKXsKICAgICAgIHNob3dOYW1lRXJyb3IoaW52YWxpZE5hbWVNc2cpOwogICAgICAgbmV3Q3VzdG9tSW1nQnRuLnByb3AoImRpc2FibGVkIiwgdHJ1ZSk7Ci0gICAgICBuYW1lSW5wdXQucGFyZW50KCkuYWRkQ2xhc3MoJ2Vycm9yJyk7CisgICAgICBuYW1lSW5wdXQucGFyZW50KCkuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOwogICAgIH0gZWxzZSB7CiAgICAgICBpbnZhbGlkTmFtZUhlbHAuaGlkZSgpOwogICAgICAgbmV3Q3VzdG9tSW1nQnRuLnByb3AoImRpc2FibGVkIiwgZmFsc2UpOwotICAgICAgbmFtZUlucHV0LnBhcmVudCgpLnJlbW92ZUNsYXNzKCdlcnJvcicpOworICAgICAgbmFtZUlucHV0LnBhcmVudCgpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKTsKICAgICB9CiAgIH0pOwogfQogCi0vLyBTZXQgdGhlIGltYWdlIHJlY2lwZXMgd2hpY2ggY2FuIHVzZWQgYXMgdGhlIGJhc2lzIGZvciB0aGUgY3VzdG9tCi0vLyBpbWFnZSByZWNpcGUgdGhlIHVzZXIgaXMgY3JlYXRpbmcKLS8vCi0vLyBiYXNlUmVjaXBlczogYSBsaXN0IG9mIG9uZSBvciBtb3JlIHJlY2lwZXMgd2hpY2ggY2FuIGJlCi0vLyB1c2VkIGFzIHRoZSBiYXNlIGZvciB0aGUgbmV3IGN1c3RvbSBpbWFnZSByZWNpcGUgaW4gdGhlIGZvcm1hdDoKLS8vIFt7J2lkJzogPHJlY2lwZSBJRD4sICduYW1lJzogPHJlY2lwZSBuYW1lPid9LCAuLi5dCi0vLwotLy8gaWYgcmVjaXBlcyBpcyBhIHNpbmdsZSByZWNpcGUsIGp1c3Qgc2hvdyB0aGUgdGV4dCBib3ggdG8gc2V0IHRoZQotLy8gbmFtZSBmb3IgdGhlIG5ldyBjdXN0b20gaW1hZ2U7IGlmIHJlY2lwZXMgY29udGFpbnMgbXVsdGlwbGUgcmVjaXBlIG9iamVjdHMsCi0vLyBzaG93IGEgc2V0IG9mIHJhZGlvIGJ1dHRvbnMgc28gdGhlIHVzZXIgY2FuIGRlY2lkZSB3aGljaCB0byB1c2UgYXMgdGhlCi0vLyBiYXNpcyBmb3IgdGhlIG5ldyBjdXN0b20gaW1hZ2UKKy8qIFNldCB0aGUgaW1hZ2UgcmVjaXBlcyB3aGljaCBjYW4gdXNlZCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjdXN0b20KKyAqIGltYWdlIHJlY2lwZSB0aGUgdXNlciBpcyBjcmVhdGluZworICogYmFzZVJlY2lwZXM6IGEgbGlzdCBvZiBvbmUgb3IgbW9yZSByZWNpcGVzIHdoaWNoIGNhbiBiZQorICogdXNlZCBhcyB0aGUgYmFzZSBmb3IgdGhlIG5ldyBjdXN0b20gaW1hZ2UgcmVjaXBlIGluIHRoZSBmb3JtYXQ6CisgKiBbeydpZCc6IDxyZWNpcGUgSUQ+LCAnbmFtZSc6IDxyZWNpcGUgbmFtZT4nfSwgLi4uXQorICoKKyAqIGlmIHJlY2lwZXMgaXMgYSBzaW5nbGUgcmVjaXBlLCBqdXN0IHNob3cgdGhlIHRleHQgYm94IHRvIHNldCB0aGUKKyAqIG5hbWUgZm9yIHRoZSBuZXcgY3VzdG9tIGltYWdlOyBpZiByZWNpcGVzIGNvbnRhaW5zIG11bHRpcGxlIHJlY2lwZSBvYmplY3RzLAorICogc2hvdyBhIHNldCBvZiByYWRpbyBidXR0b25zIHNvIHRoZSB1c2VyIGNhbiBkZWNpZGUgd2hpY2ggdG8gdXNlIGFzIHRoZQorICogYmFzaXMgZm9yIHRoZSBuZXcgY3VzdG9tIGltYWdlCisgKi8KIGZ1bmN0aW9uIG5ld0N1c3RvbUltYWdlTW9kYWxTZXRSZWNpcGVzKGJhc2VSZWNpcGVzKSB7CiAgIHZhciBpbWdDdXN0b21Nb2RhbCA9ICQoIiNuZXctY3VzdG9tLWltYWdlLW1vZGFsIik7CiAgIHZhciBpbWFnZVNlbGVjdG9yID0gJCgnI25ldy1jdXN0b20taW1hZ2UtbW9kYWwgW2RhdGEtcm9sZT0iaW1hZ2Utc2VsZWN0b3IiXScpOwpAQCAtMTI0LDggKzE1OSw5IEBACiAgICAgLy8gaGlkZSB0aGUgcmFkaW8gYnV0dG9uIGNvbnRhaW5lcgogICAgIGltYWdlU2VsZWN0b3IuaGlkZSgpOwogCi0gICAgLy8gc2V0IHRoZSBzaW5nbGUgcmVjaXBlIElEIG9uIHRoZSBtb2RhbCBhcyBpdCdzIHRoZSBvbmx5IG9uZQotICAgIC8vIHdlIGNhbiBidWlsZCBmcm9tCisgICAgLyogc2V0IHRoZSBzaW5nbGUgcmVjaXBlIElEIG9uIHRoZSBtb2RhbCBhcyBpdCdzIHRoZSBvbmx5IG9uZQorICAgICAqIHdlIGNhbiBidWlsZCBmcm9tLgorICAgICAqLwogICAgIGltZ0N1c3RvbU1vZGFsLmRhdGEoJ3JlY2lwZScsIGJhc2VSZWNpcGVzWzBdLmlkKTsKICAgfQogICBlbHNlIHsKQEAgLTEzNCwxNCArMTcwLDI5IEBACiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlUmVjaXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgdmFyIHJlY2lwZSA9IGJhc2VSZWNpcGVzW2ldOwogICAgICAgaW1hZ2VTZWxlY3RSYWRpb3NDb250YWluZXIuYXBwZW5kKAotICAgICAgICAnPGxhYmVsIGNsYXNzPSJyYWRpbyIgZGF0YS1yb2xlPSJpbWFnZS1yYWRpbyI+JyArCi0gICAgICAgIHJlY2lwZS5uYW1lICsKLSAgICAgICAgJzxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9ImZvcm0tY29udHJvbCIgbmFtZT0ic2VsZWN0LWltYWdlIiAnICsKKyAgICAgICAgJzxkaXYgY2xhc3M9InJhZGlvIj48bGFiZWwgZGF0YS1yb2xlPSJpbWFnZS1yYWRpbyI+JyArCisgICAgICAgICc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNlbGVjdC1pbWFnZSIgJyArCiAgICAgICAgICdkYXRhLXJlY2lwZT0iJyArIHJlY2lwZS5pZCArICciPicgKwotICAgICAgICAnPC9sYWJlbD4nCisgICAgICAgIHJlY2lwZS5uYW1lICsKKyAgICAgICAgJzwvbGFiZWw+PC9kaXY+JwogICAgICAgKTsKICAgICB9CiAKKyAgICAvKiBzZWxlY3QgdGhlIGZpcnN0IHJhZGlvIGJ1dHRvbiBhcyBkZWZhdWx0IHNlbGVjdGlvbi4gUmFkaW8gYnV0dG9uCisgICAgICogZ3JvdXBzIHNob3VsZCBhbHdheXMgZGlzcGxheSB3aXRoIGFuIG9wdGlvbiBjaGVja2VkCisgICAgICovCisgICAgaW1hZ2VTZWxlY3RSYWRpb3NDb250YWluZXIuZmluZCgiaW5wdXQ6cmFkaW86Zmlyc3QiKS5hdHRyKCJjaGVja2VkIiwgImNoZWNrZWQiKTsKKworICAgIC8qIGNoZWNrIHdoaWNoIHJhZGlvIGJ1dHRvbiBpcyBzZWxlY3RlZCBieSBkZWZhdWx0IGluc2lkZSB0aGUgbW9kYWwsCisgICAgICogYW5kIHNldCB0aGUgcmVjaXBlIG9uIHRoZSBtb2RhbCBhY2NvcmRpbmdseQorICAgICAqLworICAgIGltYWdlU2VsZWN0UmFkaW9zQ29udGFpbmVyLmZpbmQoImlucHV0OnJhZGlvIikuZWFjaChmdW5jdGlvbigpeworICAgICAgaWYgKCAkKHRoaXMpLmlzKCI6Y2hlY2tlZCIpICkgeworICAgICAgICB2YXIgcmVjaXBlSWQgPSAkKHRoaXMpLmF0dHIoImRhdGEtcmVjaXBlIik7CisgICAgICAgIGltZ0N1c3RvbU1vZGFsLmRhdGEoInJlY2lwZSIsIHJlY2lwZUlkKTsKKyAgICAgIH0KKyAgICB9KTsKKwogICAgIC8vIHNob3cgdGhlIHJhZGlvIGJ1dHRvbiBjb250YWluZXIKICAgICBpbWFnZVNlbGVjdG9yLnNob3coKTsKICAgfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHBhZ2UuanMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcwppbmRleCAzMDEzNDE2Li40NTM2NzAzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcwpAQCAtMjcsMTEgKzI3LDEwIEBACiAKICAgdmFyIHVybFBhcmFtcyA9IGxpYnRvYXN0ZXIucGFyc2VVcmxQYXJhbXMoKTsKIAotICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKKyAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC54aHJQcm9qZWN0VXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKICAgICB1cGRhdGVQcm9qZWN0TGF5ZXJzKHByakluZm8ubGF5ZXJzKTsKICAgICB1cGRhdGVGcmVxQnVpbGRSZWNpcGVzKHByakluZm8uZnJlcXRhcmdldHMpOwogICAgIHVwZGF0ZVByb2plY3RSZWxlYXNlKHByakluZm8ucmVsZWFzZSk7Ci0gICAgdXBkYXRlUHJvamVjdFJlbGVhc2VzKHByakluZm8ucmVsZWFzZXMsIHByakluZm8ucmVsZWFzZSk7CiAKICAgICAvKiBJZiB3ZSdyZSByZWNlaXZpbmcgYSBtYWNoaW5lIHNldCBmcm9tIHRoZSB1cmwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20KICAgICAgKiBvdXIgY3VycmVudCBtYWNoaW5lIHRoZW4gYWN0aXZhdGUgc2V0IG1hY2hpbmUgc2VxdWVuY2UuCkBAIC00Niw1NCArNDUsMTMgQEAKIAogICAgLyogTm93IHdlJ3JlIHJlYWxseSByZWFkeSBzaG93IHRoZSBwYWdlICovCiAgICAgJCgiI3Byb2plY3QtcGFnZSIpLnNob3coKTsKKworICAgIC8qIFNldCB0aGUgcHJvamVjdCBuYW1lIGluIHRoZSBkZWxldGUgbW9kYWwgKi8KKyAgICAkKCIjZGVsZXRlLXByb2plY3QtbW9kYWwgLnByb2plY3QtbmFtZSIpLnRleHQocHJqSW5mby5uYW1lKTsKICAgfSk7CiAKLSAgKGZ1bmN0aW9uIG5vdGlmaWNhdGlvblJlcXVlc3QoKXsKLQotICAgIGlmICh1cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoJ25vdGlmeScpKXsKLSAgICAgIHN3aXRjaCAodXJsUGFyYW1zLm5vdGlmeSl7Ci0gICAgICAgIGNhc2UgJ25ldy1wcm9qZWN0JzoKLSAgICAgICAgICAkKCIjcHJvamVjdC1jcmVhdGVkLW5vdGlmaWNhdGlvbiIpLnNob3coKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnbGF5ZXItaW1wb3J0ZWQnOgotICAgICAgICAgIGxheWVySW1wb3J0ZWROb3RpZmljYXRpb24oKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0pKCk7Ci0KLSAgLyogTGF5ZXIgaW1wb3J0ZWQgbm90aWZpY2F0aW9uICovCi0gIGZ1bmN0aW9uIGxheWVySW1wb3J0ZWROb3RpZmljYXRpb24oKXsKLSAgICB2YXIgaW1wb3J0ZWQgPSAkLmNvb2tpZSgibGF5ZXItaW1wb3J0ZWQtYWxlcnQiKTsKLSAgICB2YXIgbWVzc2FnZSA9ICJMYXllciBpbXBvcnRlZCI7Ci0KLSAgICBpZiAoIWltcG9ydGVkKQotICAgICAgcmV0dXJuOwotICAgIGVsc2UKLSAgICAgIGltcG9ydGVkID0gSlNPTi5wYXJzZShpbXBvcnRlZCk7Ci0KLSAgICBpZiAoaW1wb3J0ZWQuZGVwc19hZGRlZC5sZW5ndGggPT09IDApIHsKLSAgICAgIG1lc3NhZ2UgPSAiWW91IGhhdmUgaW1wb3J0ZWQgPHN0cm9uZz48YSBocmVmPVwiIitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5sYXllcmRldGFpbHVybCsiXCI+IitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5uYW1lKyI8L2E+PC9zdHJvbmc+IGFuZCBhZGRlZCBpdCB0byB5b3VyIHByb2plY3QuIjsKLSAgICB9IGVsc2UgewotCi0gICAgICB2YXIgbGlua3MgPSAiPGEgaHJlZj1cIiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrIlwiPiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubmFtZSsiPC9hPiwgIjsKLQotICAgICAgaW1wb3J0ZWQuZGVwc19hZGRlZC5tYXAgKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KXsKLSAgICAgICAgbGlua3MgKz0nPGEgaHJlZj0iJytpdGVtLmxheWVyZGV0YWlsdXJsKyciPicraXRlbS5uYW1lKyc8L2E+JzsKLSAgICAgICAgLypJZiB3ZSdyZSBhdCB0aGUgbGFzdCBlbGVtZW50IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgIGlmIChpbXBvcnRlZC5kZXBzX2FkZGVkW2luZGV4KzFdICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgbGlua3MgKz0gJywgJzsKLSAgICAgIH0pOwotCi0gICAgICAvKiBMZW5ndGggKyAxIGhlcmUgdG8gZG8gZGVwcyArIHRoZSBpbXBvcnRlZCBsYXllciAqLwotICAgICAgbWVzc2FnZSA9ICdZb3UgaGF2ZSBpbXBvcnRlZCA8c3Ryb25nPjxhIGhyZWY9IicraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrJyI+JytpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5uYW1lKyc8L2E+PC9zdHJvbmc+IGFuZCBhZGRlZCA8c3Ryb25nPicrKGltcG9ydGVkLmRlcHNfYWRkZWQubGVuZ3RoKzEpKyc8L3N0cm9uZz4gbGF5ZXJzIHRvIHlvdXIgcHJvamVjdDogPHN0cm9uZz4nK2xpbmtzKyc8L3N0cm9uZz4nOwotICAgIH0KLQotICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKLQotICAgICQucmVtb3ZlQ29va2llKCJsYXllci1pbXBvcnRlZC1hbGVydCIsIHsgcGF0aDogIi8ifSk7CisgIGlmICh1cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoJ25vdGlmeScpICYmIHVybFBhcmFtcy5ub3RpZnkgPT09ICduZXctcHJvamVjdCcpeworICAgICQoIiNwcm9qZWN0LWNyZWF0ZWQtbm90aWZpY2F0aW9uIikuc2hvdygpOwogICB9CiAKICAgLyogQWRkL1JtIGxheWVyIGZ1bmN0aW9uYWxpdHkgKi8KQEAgLTE0NSw3ICsxMDMsNyBAQAogICAgIGZvciAodmFyIGkgaW4gbGF5ZXJzKXsKICAgICAgIHZhciBsYXllck9iaiA9IGxheWVyc1tpXTsKIAotICAgICAgdmFyIHByb2plY3RMYXllciA9ICQoIjxsaT48YT48L2E+PHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJSZW1vdmVcIj48L3NwYW4+PC9saT4iKTsKKyAgICAgIHZhciBwcm9qZWN0TGF5ZXIgPSAkKCI8bGk+PGE+PC9hPjxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi10cmFzaFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiUmVtb3ZlXCI+PC9zcGFuPjwvbGk+Iik7CiAKICAgICAgIHByb2plY3RMYXllci5kYXRhKCdsYXllcicsIGxheWVyT2JqKTsKICAgICAgIHByb2plY3RMYXllci5jaGlsZHJlbigic3BhbiIpLnRvb2x0aXAoKTsKQEAgLTE1NCw3ICsxMTIsMTIgQEAKIAogICAgICAgbGluay5hdHRyKCJocmVmIiwgbGF5ZXJPYmoubGF5ZXJkZXRhaWx1cmwpOwogICAgICAgbGluay50ZXh0KGxheWVyT2JqLm5hbWUpOwotICAgICAgbGluay50b29sdGlwKHt0aXRsZTogbGF5ZXJPYmoudmNzX3VybCArICIgfCAiKyBsYXllck9iai52Y3NfcmVmZXJlbmNlLCBwbGFjZW1lbnQ6ICJyaWdodCJ9KTsKKworICAgICAgaWYgKGxheWVyT2JqLmxvY2FsX3NvdXJjZV9kaXIpIHsKKyAgICAgICAgbGluay50b29sdGlwKHt0aXRsZTogbGF5ZXJPYmoubG9jYWxfc291cmNlX2RpciwgcGxhY2VtZW50OiAicmlnaHQifSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsaW5rLnRvb2x0aXAoe3RpdGxlOiBsYXllck9iai52Y3NfdXJsICsgIiB8ICIrIGxheWVyT2JqLnZjc19yZWZlcmVuY2UsIHBsYWNlbWVudDogInJpZ2h0In0pOworICAgICAgfQogCiAgICAgICB2YXIgdHJhc2hJdGVtID0gcHJvamVjdExheWVyLmNoaWxkcmVuKCJzcGFuIik7CiAgICAgICB0cmFzaEl0ZW0uY2xpY2soZnVuY3Rpb24gKGUpIHsKQEAgLTIwOCw3ICsxNzEsNyBAQAogICAgIH0KIAogICAgIGZvciAodmFyIGkgaW4gcmVjaXBlcyl7Ci0gICAgICB2YXIgZnJlcVRhcmdldENoZWNrID0gJCgnPGxpPjxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgLz48c3BhbiBjbGFzcz0iZnJlcS10YXJnZXQtbmFtZSI+PC9zcGFuPjwvbGFiZWw+PC9saT4nKTsKKyAgICAgIHZhciBmcmVxVGFyZ2V0Q2hlY2sgPSAkKCc8bGk+PGRpdiBjbGFzcz0iY2hlY2tib3giPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+PHNwYW4gY2xhc3M9ImZyZXEtdGFyZ2V0LW5hbWUiPjwvc3Bhbj48L2xhYmVsPjwvbGk+Jyk7CiAgICAgICBmcmVxVGFyZ2V0Q2hlY2suZmluZCgiLmZyZXEtdGFyZ2V0LW5hbWUiKS50ZXh0KHJlY2lwZXNbaV0pOwogICAgICAgZnJlcVRhcmdldENoZWNrLmZpbmQoImlucHV0IikudmFsKHJlY2lwZXNbaV0pOwogICAgICAgZnJlcVRhcmdldENoZWNrLmNsaWNrKGZ1bmN0aW9uKCl7CkBAIC0yNjQsNyArMjI3LDkgQEAKICAgICBtYWNoaW5lTmFtZVRpdGxlLnRleHQobWFjaGluZU5hbWUpOwogICB9CiAKLSAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKG1hY2hpbmVDaGFuZ2VJbnB1dCwgbGlidG9hc3Rlci5jdHgubWFjaGluZXNUeXBlQWhlYWRVcmwsIHsgfSwgZnVuY3Rpb24oaXRlbSl7CisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChtYWNoaW5lQ2hhbmdlSW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ0b2FzdGVyLmN0eC5tYWNoaW5lc1R5cGVBaGVhZFVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfSwgZnVuY3Rpb24oaXRlbSl7CiAgICAgY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24gPSBpdGVtLm5hbWU7CiAgICAgbWFjaGluZUNoYW5nZUJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwogICB9KTsKQEAgLTI4NSw3ICsyNTAsNyBAQAogICAgICAgICBtYWNoaW5lQ2hhbmdlQ2FuY2VsLmNsaWNrKCk7CiAKICAgICAgICAgLyogU2hvdyB0aGUgYWxlcnQgbWVzc2FnZSAqLwotICAgICAgICB2YXIgbWVzc2FnZSA9ICQoJzxzcGFuIGNsYXNzPSJsZWFkIj5Zb3UgaGF2ZSBjaGFuZ2VkIHRoZSBtYWNoaW5lIHRvOiA8c3Ryb25nPjxzcGFuIGlkPSJub3RpZnktbWFjaGluZS1uYW1lIj48L3NwYW4+PC9zdHJvbmc+PC9zcGFuPicpOworICAgICAgICB2YXIgbWVzc2FnZSA9ICQoJzxzcGFuPllvdSBoYXZlIGNoYW5nZWQgdGhlIG1hY2hpbmUgdG86IDxzdHJvbmc+PHNwYW4gaWQ9Im5vdGlmeS1tYWNoaW5lLW5hbWUiPjwvc3Bhbj48L3N0cm9uZz48L3NwYW4+Jyk7CiAgICAgICAgIG1lc3NhZ2UuZmluZCgiI25vdGlmeS1tYWNoaW5lLW5hbWUiKS50ZXh0KGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uKTsKICAgICAgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOwogICAgIH0sCkBAIC0zMDEsMTQ2ICsyNjYsMzUgQEAKICAgICByZWxlYXNlVGl0bGUudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKICAgfQogCi0gIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RSZWxlYXNlcyhyZWxlYXNlcywgY3VycmVudCl7Ci0gICAgZm9yICh2YXIgaSBpbiByZWxlYXNlcyl7Ci0gICAgICB2YXIgcmVsZWFzZU9wdGlvbiA9ICQoIjxvcHRpb24+PC9vcHRpb24+Iik7CiAKLSAgICAgIHJlbGVhc2VPcHRpb24udmFsKHJlbGVhc2VzW2ldLmlkKTsKLSAgICAgIHJlbGVhc2VPcHRpb24udGV4dChyZWxlYXNlc1tpXS5kZXNjcmlwdGlvbik7Ci0gICAgICByZWxlYXNlT3B0aW9uLmRhdGEoJ3JlbGVhc2UnLCByZWxlYXNlc1tpXSk7Ci0KLSAgICAgIGlmIChyZWxlYXNlc1tpXS5pZCA9PSBjdXJyZW50LmlkKQotICAgICAgICByZWxlYXNlT3B0aW9uLmF0dHIoInNlbGVjdGVkIiwgInNlbGVjdGVkIik7Ci0KLSAgICAgIHJlbGVhc2VGb3JtLmNoaWxkcmVuKCJzZWxlY3QiKS5hcHBlbmQocmVsZWFzZU9wdGlvbik7Ci0gICAgfQotICB9Ci0KLSAgcmVsZWFzZUNoYW5nZUZvcm1Ub2dnbGUuY2xpY2soZnVuY3Rpb24oKXsKLSAgICByZWxlYXNlRm9ybS5zbGlkZURvd24oKTsKLSAgICByZWxlYXNlVGl0bGUuaGlkZSgpOwotICAgICQodGhpcykuaGlkZSgpOwotICB9KTsKLQotICBjYW5jZWxSZWxlYXNlQ2hhbmdlLmNsaWNrKGZ1bmN0aW9uKGUpeworICAkKCIjZGVsZXRlLXByb2plY3QtY29uZmlybWVkIikuY2xpY2soZnVuY3Rpb24oZSl7CiAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIHJlbGVhc2VGb3JtLnNsaWRlVXAoZnVuY3Rpb24oKXsKLSAgICAgIHJlbGVhc2VUaXRsZS5zaG93KCk7Ci0gICAgICByZWxlYXNlQ2hhbmdlRm9ybVRvZ2dsZS5zaG93KCk7Ci0gICAgfSk7Ci0gIH0pOworICAgIGxpYnRvYXN0ZXIuZGlzYWJsZUFqYXhMb2FkaW5nVGltZXIoKTsKKyAgICAkKHRoaXMpLmZpbmQoJ1tkYXRhLXJvbGU9InN1Ym1pdC1zdGF0ZSJdJykuaGlkZSgpOworICAgICQodGhpcykuZmluZCgnW2RhdGEtcm9sZT0ibG9hZGluZy1zdGF0ZSJdJykuc2hvdygpOworICAgICQodGhpcykuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICAkKCcjZGVsZXRlLXByb2plY3QtbW9kYWwgW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScpLmhpZGUoKTsKIAotICBmdW5jdGlvbiBjaGFuZ2VQcm9qZWN0UmVsZWFzZShyZWxlYXNlLCBsYXllcnNUb1JtKXsKLSAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdCh7IHByb2plY3RWZXJzaW9uIDogcmVsZWFzZS5pZCB9LAotICAgICAgZnVuY3Rpb24oKXsKLSAgICAgICAgLyogU3VjY2VzcyAqLwotICAgICAgICAvKiBVcGRhdGUgbGF5ZXJzIGxpc3Qgd2l0aCBuZXcgbGF5ZXJzICovCi0gICAgICAgIGxheWVyc0luUHJqTGlzdC5hZGRDbGFzcygnbXV0ZWQnKTsKLSAgICAgICAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwKLSAgICAgICAgICAgIGZ1bmN0aW9uKHByakluZm8pewotICAgICAgICAgICAgICBsYXllcnNJblByakxpc3QuY2hpbGRyZW4oKS5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdExheWVycyhwcmpJbmZvLmxheWVycyk7Ci0gICAgICAgICAgICAgIGxheWVyc0luUHJqTGlzdC5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKLSAgICAgICAgICAgICAgcmVsZWFzZUNoYW5nZWROb3RpZmljYXRpb24ocmVsZWFzZSwgcHJqSW5mby5sYXllcnMsIGxheWVyc1RvUm0pOwotICAgICAgICB9KTsKLSAgICAgICAgdXBkYXRlUHJvamVjdFJlbGVhc2UocmVsZWFzZSk7Ci0gICAgICAgIGNhbmNlbFJlbGVhc2VDaGFuZ2UuY2xpY2soKTsKLSAgICB9KTsKLSAgfQorICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICdERUxFVEUnLAorICAgICAgICB1cmw6IGxpYnRvYXN0ZXIuY3R4LnhoclByb2plY3RVcmwsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT09ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIG1zZyA9ICAkKCc8c3Bhbj5Zb3UgaGF2ZSBkZWxldGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBwcm9qZWN0OiA8c3Ryb25nIGlkPSJwcm9qZWN0LWRlbGV0ZWQiPjwvc3Ryb25nPjwvc3Bhbj4nKTsKIAotICAvKiBDcmVhdGUgYSBub3RpZmljYXRpb24gdG8gc2hvdyB0aGUgY2hhbmdlcyB0byB0aGUgbGF5ZXIgY29uZmlndXJhdGlvbgotICAgKiBjYXVzZWQgYnkgY2hhbmdpbmcgYSByZWxlYXNlLgotICAgKi8KKyAgICAgICAgICAgIG1zZy5maW5kKCIjcHJvamVjdC1kZWxldGVkIikudGV4dChsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0TmFtZSk7CisgICAgICAgICAgICBsaWJ0b2FzdGVyLnNldE5vdGlmaWNhdGlvbigicHJvamVjdC1kZWxldGVkIiwgbXNnLmh0bWwoKSk7CiAKLSAgZnVuY3Rpb24gcmVsZWFzZUNoYW5nZWROb3RpZmljYXRpb24ocmVsZWFzZSwgbGF5ZXJzLCBsYXllcnNUb1JtKXsKLQotICAgIHZhciBtZXNzYWdlOwotCi0gICAgaWYgKGxheWVycy5sZW5ndGggPT09IDAgJiYgbGF5ZXJzVG9SbS5sZW5ndGggPT09IDApewotICAgICAgbWVzc2FnZSA9ICQoJzxzcGFuPjxzcGFuIGNsYXNzPSJsZWFkIj5Zb3UgaGF2ZSBjaGFuZ2VkIHRoZSBwcm9qZWN0IHJlbGVhc2UgdG86IDxzdHJvbmc+PHNwYW4gaWQ9Im5vdGlmeS1yZWxlYXNlLW5hbWUiPjwvc3Bhbj48L3N0cm9uZz4uJyk7Ci0gICAgICBtZXNzYWdlLmZpbmQoIiNub3RpZnktcmVsZWFzZS1uYW1lIikudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKLSAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBDcmVhdGUgdGhlIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgbGF5ZXJzIHJlbW92ZWQgKi8KLSAgICB2YXIgbGF5ZXJzRGVsTGlzdCA9ICIiOwotCi0gICAgbGF5ZXJzVG9SbS5tYXAoZnVuY3Rpb24obGF5ZXIsIGkpewotICAgICAgbGF5ZXJzRGVsTGlzdCArPSBsYXllci5uYW1lOwotICAgICAgaWYgKGxheWVyc1RvUm1baSsxXSAhPT0gdW5kZWZpbmVkKQotICAgICAgICBsYXllcnNEZWxMaXN0ICs9ICcsICc7Ci0gICAgfSk7Ci0KLSAgICBtZXNzYWdlID0gJCgnPHNwYW4+PHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlIGNoYW5nZWQgdGhlIHByb2plY3QgcmVsZWFzZSB0bzogPHN0cm9uZz48c3BhbiBpZD0ibm90aWZ5LXJlbGVhc2UtbmFtZSI+PC9zcGFuPjwvc3Ryb25nPi4gVGhpcyBoYXMgY2F1c2VkIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBpbiB5b3VyIHByb2plY3QgbGF5ZXJzOjwvc3Bhbj48dWwgaWQ9Im5vdGlmeS1sYXllcnMtY2hhbmdlZC1saXN0Ij48L3VsPjwvc3Bhbj4nKTsKLQotICAgIHZhciBjaGFuZ2VkTGlzdCA9IG1lc3NhZ2UuZmluZCgiI25vdGlmeS1sYXllcnMtY2hhbmdlZC1saXN0Iik7Ci0KLSAgICBtZXNzYWdlLmZpbmQoIiNub3RpZnktcmVsZWFzZS1uYW1lIikudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKLQotICAgIC8qIE1hbnVhbGx5IGNvbnN0cnVjdCB0aGUgbGlzdCBpdGVtIGZvciBjaGFuZ2VkIGxheWVycyAqLwotICAgIHZhciBsaSA9ICc8bGk+PHN0cm9uZz4nK2xheWVycy5sZW5ndGgrJzwvc3Ryb25nPiBsYXllcnMgY2hhbmdlZCB0byB0aGUgPHN0cm9uZz4nK3JlbGVhc2UubmFtZSsnPC9zdHJvbmc+IHJlbGVhc2U6ICc7Ci0gICAgZm9yICh2YXIgaSBpbiBsYXllcnMpewotICAgICAgbGkgKz0gJzxhIGhyZWY9JytsYXllcnNbaV0ubGF5ZXJkZXRhaWx1cmwrJz4nK2xheWVyc1tpXS5uYW1lKyc8L2E+JzsKLSAgICAgIGlmIChpICE9PSAwKQotICAgICAgICBsaSArPSAnLCAnOwotICAgIH0KLQotICAgIGNoYW5nZWRMaXN0LmFwcGVuZCgkKGxpKSk7Ci0KLSAgICAvKiBMYXllcnMgcmVtb3ZlZCAqLwotICAgIGlmIChsYXllcnNUb1JtICYmIGxheWVyc1RvUm0ubGVuZ3RoID4gMCl7Ci0gICAgICBpZiAobGF5ZXJzVG9SbS5sZW5ndGggPT0gMSkKLSAgICAgICAgbGkgPSAnPGxpPjxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciByZW1vdmVkOiAnK2xheWVyc1RvUm1bMF0ubmFtZSsnPC9saT4nOwotICAgICAgZWxzZQotICAgICAgICBsaSA9ICc8bGk+PHN0cm9uZz4nK2xheWVyc1RvUm0ubGVuZ3RoKyc8L3N0cm9uZz4gbGF5ZXJzIGRlbGV0ZWQ6ICcrbGF5ZXJzRGVsTGlzdCsnPC9saT4nOwotCi0gICAgICBjaGFuZ2VkTGlzdC5hcHBlbmQoJChsaSkpOwotICAgIH0KLQotICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKLSAgfQotCi0gIC8qIFNob3cgdGhlIG1vZGFsIGRpYWxvZyB3aGljaCBnaXZlcyB0aGUgb3B0aW9uIHRvIHJlbW92ZSBsYXllcnMgd2hpY2gKLSAgICogYXJlbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvcG9zZWQgcmVsZWFzZQotICAgKi8KLSAgZnVuY3Rpb24gc2hvd1JlbGVhc2VMYXllckNoYW5nZU1vZGFsKHJlbGVhc2UsIGxheWVycyl7Ci0gICAgdmFyIGxheWVyc1RvUm1MaXN0ID0gcmVsZWFzZU1vZGFsLmZpbmQoIiNsYXllcnMtdG8tcmVtb3ZlLWxpc3QiKTsKLSAgICBsYXllcnNUb1JtTGlzdC50ZXh0KCIiKTsKLQotICAgIHJlbGVhc2VNb2RhbC5maW5kKCIucHJvcG9zZWQtcmVsZWFzZS1jaGFuZ2UtbmFtZSIpLnRleHQocmVsZWFzZS5kZXNjcmlwdGlvbik7Ci0gICAgcmVsZWFzZU1vZGFsLmRhdGEoImxheWVycyIsIGxheWVycyk7Ci0gICAgcmVsZWFzZU1vZGFsLmRhdGEoInJlbGVhc2UiLCByZWxlYXNlKTsKLQotICAgIGZvciAodmFyIGkgaW4gbGF5ZXJzKXsKLSAgICAgIGxheWVyc1RvUm1MaXN0LmFwcGVuZCgkKCI8bGk+PC9saT4iKS50ZXh0KGxheWVyc1tpXS5uYW1lKSk7Ci0gICAgfQotICAgIHJlbGVhc2VNb2RhbC5tb2RhbCgnc2hvdycpOwotICB9Ci0KLSAgJCgiI2NoYW5nZS1yZWxlYXNlLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKGUpewotICAgIGUucHJldmVudERlZmF1bHQoKTsKLQotICAgIHZhciBuZXdSZWxlYXNlID0gcmVsZWFzZUZvcm0uZmluZCgib3B0aW9uOnNlbGVjdGVkIikuZGF0YSgncmVsZWFzZScpOwotCi0gICAgJC5nZXRKU09OKGN0eC50ZXN0UmVsZWFzZUNoYW5nZVVybCwKLSAgICAgIHsgbmV3X3JlbGVhc2VfaWQ6IG5ld1JlbGVhc2UuaWQgfSwKLSAgICAgIGZ1bmN0aW9uKGxheWVycykgewotICAgICAgICBpZiAobGF5ZXJzLnJvd3MubGVuZ3RoID09PSAwKXsKLSAgICAgICAgICAvKiBObyBsYXllcnMgdG8gY2hhbmdlIGZvciB0aGlzIHJlbGVhc2UgKi8KLSAgICAgICAgICBjaGFuZ2VQcm9qZWN0UmVsZWFzZShuZXdSZWxlYXNlLCBbXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc2hvd1JlbGVhc2VMYXllckNoYW5nZU1vZGFsKG5ld1JlbGVhc2UsIGxheWVycy5yb3dzKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGRhdGEuZ290b1VybCk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YSk7CiAgICAgICAgIH0KICAgICB9KTsKICAgfSk7CiAKLSAgLyogUmVsZWFzZSBjaGFuZ2UgbW9kYWwgYWNjZXB0ICovCi0gICQoIiNjaGFuZ2UtcmVsZWFzZS1hbmQtcm0tbGF5ZXJzIikuY2xpY2soZnVuY3Rpb24oKXsKLSAgICB2YXIgbGF5ZXJzID0gcmVsZWFzZU1vZGFsLmRhdGEoImxheWVycyIpOwotICAgIHZhciByZWxlYXNlID0gIHJlbGVhc2VNb2RhbC5kYXRhKCJyZWxlYXNlIik7Ci0KLSAgICBjaGFuZ2VQcm9qZWN0UmVsZWFzZShyZWxlYXNlLCBsYXllcnMpOwotICB9KTsKLQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHRvcGJhci5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3R0b3BiYXIuanMKaW5kZXggYjA5Zjk3NC4uOTJhYjJkNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHRvcGJhci5qcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0dG9wYmFyLmpzCkBAIC00LDcgKzQsNyBAQAogCiAgIHZhciBwcm9qZWN0TmFtZUZvcm0gPSAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIik7CiAgIHZhciBwcm9qZWN0TmFtZUNvbnRhaW5lciA9ICQoIiNwcm9qZWN0LW5hbWUtY29udGFpbmVyIik7Ci0gIHZhciBwcm9qZWN0TmFtZSA9ICQoIiNwcm9qZWN0LW5hbWUiKTsKKyAgdmFyIHByb2plY3ROYW1lID0gJCgiLnByb2plY3QtbmFtZSIpOwogICB2YXIgcHJvamVjdE5hbWVGb3JtVG9nZ2xlID0gJCgiI3Byb2plY3QtY2hhbmdlLWZvcm0tdG9nZ2xlIik7CiAgIHZhciBwcm9qZWN0TmFtZUNoYW5nZUNhbmNlbCA9ICQoIiNwcm9qZWN0LW5hbWUtY2hhbmdlLWNhbmNlbCIpOwogCkBAIC0yNSwxMyArMjUsMTQgQEAKICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgcHJvamVjdE5hbWVGb3JtLmhpZGUoKTsKICAgICBwcm9qZWN0TmFtZUNvbnRhaW5lci5mYWRlSW4oKTsKKyAgICAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1pbnB1dCIpLnZhbChwcm9qZWN0TmFtZS5maXJzdCgpLnRleHQoKSk7CiAgIH0pOwogCiAgICQoIiNwcm9qZWN0LW5hbWUtY2hhbmdlLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAgdmFyIG5ld1Byb2plY3ROYW1lID0gJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtaW5wdXQiKS52YWwoKTsKIAogICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgcHJvamVjdE5hbWU6IG5ld1Byb2plY3ROYW1lIH0sIGZ1bmN0aW9uICgpewotICAgICAgcHJvamVjdE5hbWUuaHRtbChuZXdQcm9qZWN0TmFtZSk7CisgICAgICBwcm9qZWN0TmFtZS50ZXh0KG5ld1Byb2plY3ROYW1lKTsKICAgICAgIGxpYnRvYXN0ZXIuY3R4LnByb2plY3ROYW1lID0gbmV3UHJvamVjdE5hbWU7CiAgICAgICBwcm9qZWN0TmFtZUNoYW5nZUNhbmNlbC5jbGljaygpOwogICAgIH0pOwpAQCAtODcsNCArODgsMTAgQEAKICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCk7CiAgICAgfSwgbnVsbCk7CiAgIH0pOworCisgIC8qIENhbGwgbWFrZVByb2plY3ROYW1lVmFsaWRhdGlvbiBmdW5jdGlvbiAqLworICBsaWJ0b2FzdGVyLm1ha2VQcm9qZWN0TmFtZVZhbGlkYXRpb24oJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtaW5wdXQiKSwKKyAgICAgICQoIiNoaW50LWVycm9yLXByb2plY3QtbmFtZSIpLCAkKCIjdmFsaWRhdGUtcHJvamVjdC1uYW1lIiksCisgICAgICAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1idG4iKSk7CisKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3RhYmxlLmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGFibGUuanMKaW5kZXggZjczODE0NC4uMTc2Y2U1NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGFibGUuanMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGFibGUuanMKQEAgLTE1LDYgKzE1LDcgQEAKICAgICBvcmRlcmJ5IDogbnVsbCwKICAgICBmaWx0ZXIgOiBudWxsLAogICAgIHNlYXJjaCA6IG51bGwsCisgICAgZGVmYXVsdF9vcmRlcmJ5OiBudWxsLAogICB9OwogCiAgIHZhciBkZWZhdWx0SGlkZGVuQ29scyA9IFtdOwpAQCAtNzUsMTQgKzc2LDIxIEBACiAKICAgICBpZiAodGFibGVEYXRhLnRvdGFsID09PSAwKXsKICAgICAgIHRhYmxlQ29udGFpbmVyLmhpZGUoKTsKLSAgICAgIGlmICgkKCIjbm8tcmVzdWx0cy1zcGVjaWFsLSIrY3R4LnRhYmxlTmFtZSkubGVuZ3RoID4gMCkgewotICAgICAgICAvKiB1c2UgdGhpcyBwYWdlJ3Mgc3BlY2lhbCBuby1yZXN1bHRzIGZvcm0gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAqLwotICAgICAgICAkKCIjbm8tcmVzdWx0cy1zZWFyY2gtaW5wdXQtIitjdHgudGFibGVOYW1lKS52YWwodGFibGVQYXJhbXMuc2VhcmNoKTsKLSAgICAgICAgJCgiI25vLXJlc3VsdHMtc3BlY2lhbC0iK2N0eC50YWJsZU5hbWUpLnNob3coKTsKLSAgICAgICAgJCgiI3Jlc3VsdHMtZm91bmQtIitjdHgudGFibGVOYW1lKS5oaWRlKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAkKCIjbmV3LXNlYXJjaC1pbnB1dC0iK2N0eC50YWJsZU5hbWUpLnZhbCh0YWJsZVBhcmFtcy5zZWFyY2gpOwotICAgICAgICAkKCIjbm8tcmVzdWx0cy0iK2N0eC50YWJsZU5hbWUpLnNob3coKTsKKyAgICAgIC8qIE5vIHJlc3VsdHMgY2F1c2VkIGJ5IGEgc2VhcmNoIHJldHVybmluZyBub3RoaW5nICovCisgICAgICBpZiAodGFibGVQYXJhbXMuc2VhcmNoKSB7CisgICAgICAgIGlmICgkKCIjbm8tcmVzdWx0cy1zcGVjaWFsLSIrY3R4LnRhYmxlTmFtZSkubGVuZ3RoID4gMCkgeworICAgICAgICAgIC8qIHVzZSB0aGlzIHBhZ2UncyBzcGVjaWFsIG5vLXJlc3VsdHMgZm9ybSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0ICovCisgICAgICAgICAgJCgiI25vLXJlc3VsdHMtc2VhcmNoLWlucHV0LSIrY3R4LnRhYmxlTmFtZSkudmFsKHRhYmxlUGFyYW1zLnNlYXJjaCk7CisgICAgICAgICAgJCgiI25vLXJlc3VsdHMtc3BlY2lhbC0iK2N0eC50YWJsZU5hbWUpLnNob3coKTsKKyAgICAgICAgICAkKCIjcmVzdWx0cy1mb3VuZC0iK2N0eC50YWJsZU5hbWUpLmhpZGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkKCIjbmV3LXNlYXJjaC1pbnB1dC0iK2N0eC50YWJsZU5hbWUpLnZhbCh0YWJsZVBhcmFtcy5zZWFyY2gpOworICAgICAgICAgICQoIiNuby1yZXN1bHRzLSIrY3R4LnRhYmxlTmFtZSkuc2hvdygpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogTm8gcmVzdWx0cyBjYXVzZWQgYnkgdGhlcmUgYmVpbmcgbm8gZGF0YSAqLworICAgICAgICAkKCIjZW1wdHktc3RhdGUtIitjdHgudGFibGVOYW1lKS5zaG93KCk7CiAgICAgICB9CiAgICAgICB0YWJsZS50cmlnZ2VyKCJ0YWJsZS1kb25lIiwgW3RhYmxlRGF0YS50b3RhbCwgdGFibGVQYXJhbXNdKTsKIApAQCAtOTAsNiArOTgsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICB0YWJsZUNvbnRhaW5lci5zaG93KCk7CiAgICAgICAkKCIjbm8tcmVzdWx0cy0iK2N0eC50YWJsZU5hbWUpLmhpZGUoKTsKKyAgICAgICQoIiNlbXB0eS1zdGF0ZS0iK2N0eC50YWJsZU5hbWUpLmhpZGUoKTsKICAgICB9CiAKICAgICBzZXR1cFRhYmxlQ2hyb21lKHRhYmxlRGF0YSk7CkBAIC0xMDEsMjcgKzExMCw4IEBACiAgICAgICB2YXIgcm93ID0gJCgiPHRyPjwvdHI+Iik7CiAgICAgICBjb2x1bW5faW5kZXggPSAtMTsKICAgICAgIGZvciAodmFyIGtleV9qIGluIHRhYmxlRGF0YS5yb3dzW2ldKXsKLQotICAgICAgICAvKiBpZiB3ZSBoYXZlIGEgc3RhdGljOiB2ZXJzaW9uIG9mIGEga2V5LCBwcmVmZXIgdGhlIHN0YXRpYzogdmVyc2lvbiBmb3IgcmVuZGVyaW5nICovCi0gICAgICAgIHZhciBvcmlnX2tleV9qID0ga2V5X2o7Ci0KLSAgICAgICAgaWYgKGtleV9qLmluZGV4T2YoInN0YXRpYzoiKSA9PT0gMCkgewotICAgICAgICAgIGlmIChrZXlfai5zdWJzdHIoInN0YXRpYzoiLmxlbmd0aCkgaW4gdGFibGVEYXRhLnJvd3NbaV0pIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBvcmlnX2tleV9qID0ga2V5X2ouc3Vic3RyKCJzdGF0aWM6Ii5sZW5ndGgpCi0gICAgICAgIH0gZWxzZSBpZiAoKCJzdGF0aWM6IiArIGtleV9qKSBpbiB0YWJsZURhdGEucm93c1tpXSkgewotICAgICAgICAgIGtleV9qID0gInN0YXRpYzoiICsga2V5X2o7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiB3ZSBza2lwIG92ZXIgdW4tZGlzcGxheWFibGUgY29sdW1uIGVudHJpZXMgKi8KLSAgICAgICAgY29sdW1uX2luZGV4ICs9IDE7Ci0gICAgICAgIGlmICghIHRhYmxlRGF0YS5jb2x1bW5zW2NvbHVtbl9pbmRleF0uZGlzcGxheWFibGUpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCiAgICAgICAgIHZhciB0ZCA9ICQoIjx0ZD48L3RkPiIpOwotICAgICAgICB0ZC5wcm9wKCJjbGFzcyIsIG9yaWdfa2V5X2opOworICAgICAgICB0ZC5wcm9wKCJjbGFzcyIsIGtleV9qKTsKICAgICAgICAgaWYgKHRhYmxlRGF0YS5yb3dzW2ldW2tleV9qXSl7CiAgICAgICAgICAgdGQuaHRtbCh0YWJsZURhdGEucm93c1tpXVtrZXlfal0pOwogICAgICAgICB9CkBAIC0xODEsNiArMTcxLDE1IEBACiAgICAgdGFibGUuY3NzKCJwYWRkaW5nLWJvdHRvbSIsIDApOwogICAgIHRhYmxlQ29udGFpbmVyLmNzcygidmlzaWJpbGl0eSIsICJ2aXNpYmxlIik7CiAKKyAgICAvKiBJZiB3ZSBoYXZlIGEgaGFzaCBpbiB0aGUgdXJsIHRyeSBhbmQgaGlnaGxpZ2h0IHRoYXQgaXRlbSBpbiB0aGUgdGFibGUgKi8KKyAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2gpeworICAgICAgdmFyIGhpZ2hsaWdodCA9ICQoInRhYmxlIGFbbmFtZT0iK3dpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCcnKSk7CisgICAgICBpZiAoaGlnaGxpZ2h0Lmxlbmd0aCA+IDApeworICAgICAgICBoaWdobGlnaHQucGFyZW50cygidHIiKS5hZGRDbGFzcygnaGlnaGxpZ2h0Jyk7CisgICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgaGlnaGxpZ2h0LnBvc2l0aW9uKCkudG9wIC0gNTApOworICAgICAgfQorICAgIH0KKwogICAgIHRhYmxlLnRyaWdnZXIoInRhYmxlLWRvbmUiLCBbdGFibGVEYXRhLnRvdGFsLCB0YWJsZVBhcmFtc10pOwogICB9CiAKQEAgLTE4OCwxMiArMTg3LDE0IEBACiAgICAgaWYgKHRhYmxlQ2hyb21lRG9uZSA9PT0gdHJ1ZSkKICAgICAgIHJldHVybjsKIAotICAgIHZhciB0YWJsZUhlYWRSb3cgPSB0YWJsZS5maW5kKCJ0aGVhZCIpOworICAgIHZhciB0YWJsZUhlYWRSb3cgPSB0YWJsZS5maW5kKCJ0aGVhZCA+IHRyIik7CiAgICAgdmFyIGVkaXRDb2xNZW51ID0gJCgiI3RhYmxlLWNocm9tZS0iK2N0eC50YWJsZU5hbWUpLmZpbmQoIi5lZGl0Y29sIik7CiAKICAgICB0YWJsZUhlYWRSb3cuaHRtbCgiIik7CiAgICAgZWRpdENvbE1lbnUuaHRtbCgiIik7CiAKKyAgICB0YWJsZVBhcmFtcy5kZWZhdWx0X29yZGVyYnkgPSB0YWJsZURhdGEuZGVmYXVsdF9vcmRlcmJ5OworCiAgICAgaWYgKCF0YWJsZVBhcmFtcy5vcmRlcmJ5ICYmIHRhYmxlRGF0YS5kZWZhdWx0X29yZGVyYnkpewogICAgICAgdGFibGVQYXJhbXMub3JkZXJieSA9IHRhYmxlRGF0YS5kZWZhdWx0X29yZGVyYnk7CiAgICAgfQpAQCAtMjA5LDcgKzIxMCw3IEBACiAKICAgICAgIC8qIFNldHVwIHRoZSBoZWxwIHRleHQgKi8KICAgICAgIGlmIChjb2wuaGVscF90ZXh0Lmxlbmd0aCA+IDApIHsKLSAgICAgICAgdmFyIGhlbHBfdGV4dCA9ICQoJzxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiPiA8L2k+Jyk7CisgICAgICAgIHZhciBoZWxwX3RleHQgPSAkKCc8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIj4gPC9zcGFuPicpOwogICAgICAgICBoZWxwX3RleHQudG9vbHRpcCh7dGl0bGU6IGNvbC5oZWxwX3RleHR9KTsKICAgICAgICAgaGVhZGVyLmFwcGVuZChoZWxwX3RleHQpOwogICAgICAgfQpAQCAtMjE5LDYgKzIyMCw3IEBACiAgICAgICAgIHZhciB0aXRsZSA9ICQoJzxhIGhyZWY9XCIjXCIgPjwvYT4nKTsKIAogICAgICAgICB0aXRsZS5kYXRhKCdmaWVsZC1uYW1lJywgY29sLmZpZWxkX25hbWUpOworICAgICAgICB0aXRsZS5hdHRyKCdkYXRhLXNvcnQtZmllbGQnLCBjb2wuZmllbGRfbmFtZSk7CiAgICAgICAgIHRpdGxlLnRleHQoY29sLnRpdGxlKTsKICAgICAgICAgdGl0bGUuY2xpY2soc29ydENvbHVtbkNsaWNrZWQpOwogCkBAIC0yNDYsMTIgKzI0OCwxMiBAQAogICAgICAgfSBlbHNlIHsKICAgICAgICAgLyogTm90IG9yZGVyYWJsZSAqLwogICAgICAgICBoZWFkZXIuY3NzKCJmb250LXdlaWdodCIsICJub3JtYWwiKTsKLSAgICAgICAgaGVhZGVyLmFwcGVuZCgnPHNwYW4gY2xhc3M9Im11dGVkIj4nICsgY29sLnRpdGxlICsgJzwvc3Bhbj4gJyk7CisgICAgICAgIGhlYWRlci5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj4nICsgY29sLnRpdGxlICsgJzwvc3Bhbj4gJyk7CiAgICAgICB9CiAKICAgICAgIC8qIFNldHVwIHRoZSBmaWx0ZXIgYnV0dG9uICovCiAgICAgICBpZiAoY29sLmZpbHRlcl9uYW1lKXsKLSAgICAgICAgdmFyIGZpbHRlckJ0biA9ICQoJzxhIGhyZWY9IiMiIHJvbGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXItb249IicgKyBjb2wuZmlsdGVyX25hbWUgKyAnIiBjbGFzcz0icHVsbC1yaWdodCBidG4gYnRuLW1pbmkiIGRhdGEtdG9nZ2xlPSJtb2RhbCI+PGkgY2xhc3M9Imljb24tZmlsdGVyIGZpbHRlcmVkIj48L2k+PC9hPicpOworICAgICAgICB2YXIgZmlsdGVyQnRuID0gJCgnPGEgaHJlZj0iIyIgcm9sZT0iYnV0dG9uIiBkYXRhLWZpbHRlci1vbj0iJyArIGNvbC5maWx0ZXJfbmFtZSArICciIGNsYXNzPSJwdWxsLXJpZ2h0IGJ0biBidG4tbGluayBidG4teHMiIGRhdGEtdG9nZ2xlPSJtb2RhbCI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZmlsdGVyIGZpbHRlcmVkIj48L2k+PC9hPicpOwogCiAgICAgICAgIGZpbHRlckJ0bi5kYXRhKCdmaWx0ZXItbmFtZScsIGNvbC5maWx0ZXJfbmFtZSk7CiAgICAgICAgIGZpbHRlckJ0bi5wcm9wKCdpZCcsIGNvbC5maWx0ZXJfbmFtZSk7CkBAIC0yNzAsNyArMjcyLDcgQEAKICAgICAgIHRhYmxlSGVhZFJvdy5hcHBlbmQoaGVhZGVyKTsKIAogICAgICAgLyogTm93IHNldHVwIHRoZSBjaGVja2JveCBzdGF0ZSBhbmQgY2xpY2sgaGFuZGxlciAqLwotICAgICAgdmFyIHRvZ2dsZXIgPSAkKCc8bGk+PGxhYmVsIGNsYXNzPSJjaGVja2JveCI+Jytjb2wudGl0bGUrJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNoZWNrYm94LScrIGNvbC5maWVsZF9uYW1lICsnIiBjbGFzcz0iY29sLXRvZ2dsZSIgdmFsdWU9IicrY29sLmZpZWxkX25hbWUrJyIgLz48L2xhYmVsPjwvbGk+Jyk7CisgICAgICB2YXIgdG9nZ2xlciA9ICQoJzxsaT48ZGl2IGNsYXNzPSJjaGVja2JveCI+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNoZWNrYm94LScrIGNvbC5maWVsZF9uYW1lICsnIiBjbGFzcz0iY29sLXRvZ2dsZSIgdmFsdWU9IicrY29sLmZpZWxkX25hbWUrJyIgLz4nK2NvbC50aXRsZSsnPC9sYWJlbD48L2Rpdj48L2xpPicpOwogCiAgICAgICB2YXIgdG9nZ2xlcklucHV0ID0gdG9nZ2xlci5maW5kKCJpbnB1dCIpOwogCkBAIC0yODAsNyArMjgyLDggQEAKICAgICAgIGlmIChjb2wuaGlkZWFibGUpewogICAgICAgICB0b2dnbGVySW5wdXQuY2xpY2soY29sVG9nZ2xlQ2xpY2tlZCk7CiAgICAgICB9IGVsc2UgewotICAgICAgICB0b2dnbGVyLmZpbmQoImxhYmVsIikuYWRkQ2xhc3MoIm11dGVkIik7CisgICAgICAgIHRvZ2dsZXIuZmluZCgibGFiZWwiKS5hZGRDbGFzcygidGV4dC1tdXRlZCIpOworICAgICAgICB0b2dnbGVyLmZpbmQoImxhYmVsIikucGFyZW50KCkuYWRkQ2xhc3MoImRpc2FibGVkIik7CiAgICAgICAgIHRvZ2dsZXJJbnB1dC5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOwogICAgICAgfQogCkBAIC0yOTcsMTEgKzMwMCwxMiBAQAogICAvKiBUb2dnbGVzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGZpbHRlciBidXR0b24gKi8KICAgZnVuY3Rpb24gZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgYWN0aXZlKXsKICAgICBpZiAoYWN0aXZlKSB7CisgICAgICBmaWx0ZXJCdG4ucmVtb3ZlQ2xhc3MoImJ0bi1saW5rIik7CiAgICAgICBmaWx0ZXJCdG4uYWRkQ2xhc3MoImJ0bi1wcmltYXJ5Iik7CiAKICAgICAgIGZpbHRlckJ0bi50b29sdGlwKHsKICAgICAgICAgICBodG1sOiB0cnVlLAotICAgICAgICAgIHRpdGxlOiAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeSIgb25DbGljaz1cJyQoIiNjbGVhci1maWx0ZXItYnRuLScrIGN0eC50YWJsZU5hbWUgKyciKS5jbGljaygpO1wnPkNsZWFyIGZpbHRlcjwvYnV0dG9uPicsCisgICAgICAgICAgdGl0bGU6ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IiBvbkNsaWNrPVwnJCgiI2NsZWFyLWZpbHRlci1idG4tJysgY3R4LnRhYmxlTmFtZSArJyIpLmNsaWNrKCk7XCc+Q2xlYXIgZmlsdGVyPC9idXR0b24+JywKICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLAogICAgICAgICAgIGRlbGF5OiB7CiAgICAgICAgICAgICBoaWRlOiAxNTAwLApAQCAtMzEwLDYgKzMxNCw3IEBACiAgICAgICB9KTsKICAgICB9IGVsc2UgewogICAgICAgZmlsdGVyQnRuLnJlbW92ZUNsYXNzKCJidG4tcHJpbWFyeSIpOworICAgICAgZmlsdGVyQnRuLmFkZENsYXNzKCJidG4tbGluayIpOwogICAgICAgZmlsdGVyQnRuLnRvb2x0aXAoJ2Rlc3Ryb3knKTsKICAgICB9CiAgIH0KQEAgLTM0MywyOSArMzQ4LDY1IEBACiAgICAgfQogICB9CiAKKyAgLyogQXBwbHkgYW4gb3JkZXJpbmcgdG8gdGhlIGN1cnJlbnQgdGFibGUuCisgICAqCisgICAqIDEuIEZpbmQgdGhlIGNvbHVtbiBoZWFkaW5nIG1hdGNoaW5nIHRoZSBzb3J0U3BlY2lmaWVyCisgICAqIDIuIFNldCBpdHMgdXAvZG93biBhcnJvdyBhbmQgYWRkIC5zb3J0ZWQKKyAgICoKKyAgICogb3JkZXJieTogZS5nLiAiLXN0YXJ0ZWRfb24iLCAiY29tcGxldGVkX29uIgorICAgKiBjb2xIZWFkaW5nOiBjb2x1bW4gaGVhZGluZyBlbGVtZW50IHRvIGFjdGl2YXRlIChieSBzaG93aW5nIHRoZSBjYXJldAorICAgKiB1cC9kb3duLCBkZXBlbmRpbmcgb24gc29ydCBvcmRlcik7IGlmIG5vdCBzZXQsIHRoZSBjb3JyZWN0IGNvbHVtbgorICAgKiBoZWFkaW5nIGlzIHNlbGVjdGVkIGZyb20gdGhlIERPTSB1c2luZyBvcmRlcmJ5IGFzIGEga2V5CisgICAqLworICBmdW5jdGlvbiBhcHBseU9yZGVyYnkob3JkZXJieSwgY29sSGVhZGluZykgeworICAgIGlmICghb3JkZXJieSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIG9ubHkgaGF2ZSBvbmUgc29ydCBhdCBhIHRpbWUgc28gcmVtb3ZlIGV4aXN0aW5nIHNvcnQgaW5kaWNhdG9ycworICAgICQoIiMiICsgY3R4LnRhYmxlTmFtZSArICIgdGggLmljb24tY2FyZXQtZG93biIpLmhpZGUoKTsKKyAgICAkKCIjIiArIGN0eC50YWJsZU5hbWUgKyAiIHRoIC5pY29uLWNhcmV0LXVwIikuaGlkZSgpOworICAgICQoIiMiICsgY3R4LnRhYmxlTmFtZSArICIgdGggYSIpLnJlbW92ZUNsYXNzKCJzb3J0ZWQiKTsKKworICAgIC8vIG5vcm1hbGlzZSB0aGUgb3JkZXJieSBzbyB3ZSBjYW4gdXNlIGl0IHRvIGZpbmQgdGhlIGxpbmsgd2Ugd2FudAorICAgIC8vIHRvIHN0eWxlCisgICAgdmFyIGZpZWxkTmFtZSA9IG9yZGVyYnk7CisgICAgaWYgKGZpZWxkTmFtZS5pbmRleE9mKCctJykgPT09IDApIHsKKyAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zbGljZSgxKTsKKyAgICB9CisKKyAgICAvLyBmaW5kIHRoZSB0YWJsZSBoZWFkZXIgZWxlbWVudCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgc29ydCBmaWVsZAorICAgIC8vIChpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgaXQpCisgICAgaWYgKCFjb2xIZWFkaW5nKSB7CisgICAgICBjb2xIZWFkaW5nID0gJCgnW2RhdGEtc29ydC1maWVsZD0iJyArIGZpZWxkTmFtZSArICciXScpOworICAgIH0KKworICAgIGNvbEhlYWRpbmcuYWRkQ2xhc3MoInNvcnRlZCIpOworCisgICAgdmFyIHBhcmVudCA9IGNvbEhlYWRpbmcucGFyZW50KCk7CisKKyAgICBpZiAob3JkZXJieS5pbmRleE9mKCctJykgPT09IDApIHsKKyAgICAgIHBhcmVudC5jaGlsZHJlbignLmljb24tY2FyZXQtdXAnKS5zaG93KCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcGFyZW50LmNoaWxkcmVuKCcuaWNvbi1jYXJldC1kb3duJykuc2hvdygpOworICAgIH0KKworICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkgPSBvcmRlcmJ5OworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKyAgfQorCiAgIGZ1bmN0aW9uIHNvcnRDb2x1bW5DbGlja2VkKGUpewogICAgIGUucHJldmVudERlZmF1bHQoKTsKIAotICAgIC8qIFdlIG9ubHkgaGF2ZSBvbmUgc29ydCBhdCBhIHRpbWUgc28gcmVtb3ZlIGFueSBleGlzdGluZyBzb3J0IGluZGljYXRvcnMgKi8KLSAgICAkKCIjIitjdHgudGFibGVOYW1lKyIgdGggLmljb24tY2FyZXQtZG93biIpLmhpZGUoKTsKLSAgICAkKCIjIitjdHgudGFibGVOYW1lKyIgdGggLmljb24tY2FyZXQtdXAiKS5oaWRlKCk7Ci0gICAgJCgiIyIrY3R4LnRhYmxlTmFtZSsiIHRoIGEiKS5yZW1vdmVDbGFzcygic29ydGVkIik7Ci0KLSAgICB2YXIgZmllbGROYW1lID0gJCh0aGlzKS5kYXRhKCdmaWVsZC1uYW1lJyk7Ci0KICAgICAvKiBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBzb3J0IHRoZSBvdGhlciB3YXkgKi8KLSAgICBpZiAodGFibGVQYXJhbXMub3JkZXJieSA9PT0gZmllbGROYW1lICYmCisgICAgdmFyIG9yZGVyYnkgPSAkKHRoaXMpLmRhdGEoJ2ZpZWxkLW5hbWUnKTsKKyAgICBpZiAodGFibGVQYXJhbXMub3JkZXJieSA9PT0gb3JkZXJieSAmJgogICAgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5LmluZGV4T2YoJy0nKSA9PT0gLTEpIHsKLSAgICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkgPSAnLScgKyAkKHRoaXMpLmRhdGEoJ2ZpZWxkLW5hbWUnKTsKLSAgICAgICQodGhpcykucGFyZW50KCkuY2hpbGRyZW4oJy5pY29uLWNhcmV0LXVwJykuc2hvdygpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5ID0gJCh0aGlzKS5kYXRhKCdmaWVsZC1uYW1lJyk7Ci0gICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCcuaWNvbi1jYXJldC1kb3duJykuc2hvdygpOworICAgICAgb3JkZXJieSA9ICctJyArIG9yZGVyYnk7CiAgICAgfQogCi0gICAgJCh0aGlzKS5hZGRDbGFzcygic29ydGVkIik7Ci0KLSAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgICAgYXBwbHlPcmRlcmJ5KG9yZGVyYnksICQodGhpcykpOwogICB9CiAKICAgZnVuY3Rpb24gcGFnZUJ1dHRvbkNsaWNrZWQoZSkgewpAQCAtMzg0LDExICs0MjUsMTMgQEAKICAgICAgIHRhYmxlLmZpbmQoIi4iK2NvbCkuc2hvdygpOwogICAgIH0gIGVsc2UgewogICAgICAgdGFibGUuZmluZCgiLiIrY29sKS5oaWRlKCk7Ci0gICAgICAvKiBJZiB3ZSdyZSBvcmRlcmVkIGJ5IHRoZSBjb2x1bW4gd2UncmUgaGlkaW5nIHJlbW92ZSB0aGUgb3JkZXIgYnkgKi8KKyAgICAgIC8vIElmIHdlJ3JlIG9yZGVyZWQgYnkgdGhlIGNvbHVtbiB3ZSdyZSBoaWRpbmcgcmVtb3ZlIHRoZSBvcmRlciBieQorICAgICAgLy8gYW5kIGFwcGx5IHRoZSBkZWZhdWx0IG9uZSBpbnN0ZWFkCiAgICAgICBpZiAoY29sID09PSB0YWJsZVBhcmFtcy5vcmRlcmJ5IHx8CiAgICAgICAgICAgJy0nICsgY29sID09PSB0YWJsZVBhcmFtcy5vcmRlcmJ5KXsKICAgICAgICAgdGFibGVQYXJhbXMub3JkZXJieSA9IG51bGw7Ci0gICAgICAgICQoIiMiK2N0eC50YWJsZU5hbWUgKyIgLmRlZmF1bHQtb3JkZXJieSIpLmNsaWNrKCk7CisKKyAgICAgICAgYXBwbHlPcmRlcmJ5KHRhYmxlUGFyYW1zLmRlZmF1bHRfb3JkZXJieSk7CiAgICAgICB9CiAgICAgfQogCkBAIC00MTUsMjMgKzQ1OCwyMyBAQAogICAgIHZhciBoYXNOb1JlY29yZHMgPSAoTnVtYmVyKGZpbHRlckFjdGlvbkRhdGEuY291bnQpID09IDApOwogCiAgICAgdmFyIGFjdGlvblN0ciA9ICc8ZGl2IGNsYXNzPSJyYWRpbyI+JyArCi0gICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciInICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICAgICB2YWx1ZT0iJyArIGZpbHRlck5hbWUgKyAnIic7CisgICAgICAnPGxhYmVsIGNsYXNzPSJmaWx0ZXItdGl0bGUnICsKKyAgICAgIChoYXNOb1JlY29yZHMgPyAnIHRleHQtbXV0ZWQnIDogJycpICsgJyInICsKKyAgICAgICcgICAgICAgZm9yPSInICsgZmlsdGVyTmFtZSArICciPicgKworICAgICAgJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIicgKworICAgICAgJyAgICAgICB2YWx1ZT0iJyArIGZpbHRlck5hbWUgKyAnIic7CiAKICAgICBpZiAoaGFzTm9SZWNvcmRzKSB7CiAgICAgICBhY3Rpb25TdHIgKz0gJyBkaXNhYmxlZD0iZGlzYWJsZWQiJzsKICAgICB9CiAKICAgICBhY3Rpb25TdHIgKz0gJyBpZD0iJyArIGZpbHRlck5hbWUgKyAnIj4nICsKLSAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbHRlcl92YWx1ZSIgdmFsdWU9Im9uIicgKwotICAgICAgICAgICAgICAgICAnICAgICAgIGRhdGEtdmFsdWUtZm9yPSInICsgZmlsdGVyTmFtZSArICciPicgKwotICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPSJmaWx0ZXItdGl0bGUnICsKLSAgICAgICAgICAgICAgICAgKGhhc05vUmVjb3JkcyA/ICcgbXV0ZWQnIDogJycpICsgJyInICsKLSAgICAgICAgICAgICAgICAgJyAgICAgICBmb3I9IicgKyBmaWx0ZXJOYW1lICsgJyI+JyArCi0gICAgICAgICAgICAgICAgIGZpbHRlckFjdGlvbkRhdGEudGl0bGUgKwotICAgICAgICAgICAgICAgICAnICgnICsgZmlsdGVyQWN0aW9uRGF0YS5jb3VudCArICcpJyArCi0gICAgICAgICAgICAgICAgICc8L2xhYmVsPicgKwotICAgICAgICAgICAgICAgICAnPC9kaXY+JzsKKyAgICAgICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWx0ZXJfdmFsdWUiIHZhbHVlPSJvbiInICsKKyAgICAgICcgICAgICAgZGF0YS12YWx1ZS1mb3I9IicgKyBmaWx0ZXJOYW1lICsgJyI+JyArCisgICAgICBmaWx0ZXJBY3Rpb25EYXRhLnRpdGxlICsKKyAgICAgICcgKCcgKyBmaWx0ZXJBY3Rpb25EYXRhLmNvdW50ICsgJyknICsKKyAgICAgICc8L2xhYmVsPicgKworICAgICAgJzwvZGl2Pic7CiAKICAgICB2YXIgYWN0aW9uID0gJChhY3Rpb25TdHIpOwogCkBAIC00NjUsMjIgKzUwOCwyMyBAQAogICAgKi8KICAgZnVuY3Rpb24gY3JlYXRlQWN0aW9uRGF0ZVJhbmdlKGZpbHRlck5hbWUsIGZpbHRlclZhbHVlLCBmaWx0ZXJBY3Rpb25EYXRhKSB7CiAgICAgdmFyIGFjdGlvbiA9ICQoJzxkaXYgY2xhc3M9InJhZGlvIj4nICsKKyAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPSJmaWx0ZXItdGl0bGUiJyArCisgICAgICAgICAgICAgICAgICAgJyAgICAgICBmb3I9IicgKyBmaWx0ZXJOYW1lICsgJyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIicgKwogICAgICAgICAgICAgICAgICAgICcgICAgICAgdmFsdWU9IicgKyBmaWx0ZXJOYW1lICsgJyIgJyArCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICBpZD0iJyArIGZpbHRlck5hbWUgKyAnIj4nICsKICAgICAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsdGVyX3ZhbHVlIiB2YWx1ZT0iIicgKwogICAgICAgICAgICAgICAgICAgICcgICAgICAgZGF0YS12YWx1ZS1mb3I9IicgKyBmaWx0ZXJOYW1lICsgJyI+JyArCi0gICAgICAgICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz0iZmlsdGVyLXRpdGxlIicgKwotICAgICAgICAgICAgICAgICAgICcgICAgICAgZm9yPSInICsgZmlsdGVyTmFtZSArICciPicgKwogICAgICAgICAgICAgICAgICAgIGZpbHRlckFjdGlvbkRhdGEudGl0bGUgKwogICAgICAgICAgICAgICAgICAgICc8L2xhYmVsPicgKwotICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIxMCIgY2xhc3M9ImlucHV0LXNtYWxsIicgKworCQkJCQkJCQkJICc8ZGl2IGNsYXNzPSJmb3JtLWlubGluZSBmb3JtLWdyb3VwIGRhdGUtZmlsdGVyLWNvbnRyb2xzIj4nICsKKyAgICAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIG1heGxlbmd0aD0iMTAiIGNsYXNzPSJmb3JtLWNvbnRyb2wiJyArCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICBkYXRhLWRhdGUtZnJvbS1mb3I9IicgKyBmaWx0ZXJOYW1lICsgJyI+JyArCi0gICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSI+dG88L3NwYW4+JyArCi0gICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjEwIiBjbGFzcz0iaW5wdXQtc21hbGwiJyArCisgICAgICAgICAgICAgICAgICAgJzxzcGFuPnRvPC9zcGFuPicgKworICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIxMCIgY2xhc3M9ImZvcm0tY29udHJvbCInICsKICAgICAgICAgICAgICAgICAgICAnICAgICAgIGRhdGEtZGF0ZS10by1mb3I9IicgKyBmaWx0ZXJOYW1lICsgJyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSBnZXQtaGVscCI+KHl5eXktbW0tZGQpPC9zcGFuPicgKwotICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nKTsKKyAgICAgICAgICAgICAgICAgICAnPC9kaXY+PC9kaXY+Jyk7CiAKICAgICB2YXIgcmFkaW8gPSBhY3Rpb24uZmluZCgnW3R5cGU9InJhZGlvIl0nKTsKICAgICB2YXIgdmFsdWUgPSBhY3Rpb24uZmluZCgnW2RhdGEtdmFsdWUtZm9yXScpOwpAQCAtNjIxLDcgKzY2NSw3IEBACiAgICAgICAgICAgICBxdWVyeXNldCBvbiB0aGUgdGFibGUKICAgICAgICAgICAqLwogICAgICAgICAgIHZhciBmaWx0ZXJBY3Rpb25SYWRpb3MgPSAkKCcjZmlsdGVyLWFjdGlvbnMtJyArIGN0eC50YWJsZU5hbWUpOwotICAgICAgICAgIHZhciBmaWx0ZXJBcHBseUJ0biA9ICQoJ1tkYXRhLXJvbGU9ImZpbHRlci1hcHBseSJdJyk7CisgICAgICAgICAgdmFyIGZpbHRlckFwcGx5QnRuID0gJCgnW2RhdGEtY2F0PSJmaWx0ZXItYXBwbHkiXScpOwogCiAgICAgICAgICAgdmFyIHNldEFwcGx5QnV0dG9uU3RhdGUgPSBmdW5jdGlvbiAoZSwgZmlsdGVyQWN0aW9uVmFsdWUpIHsKICAgICAgICAgICAgIGlmIChmaWx0ZXJBY3Rpb25WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7CkBAIC02NjIsNyArNzA2LDcgQEAKICAgICAgICAgICAgIGlmIChhY3Rpb24pIHsKICAgICAgICAgICAgICAgLy8gU2V0dXAgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmlsdGVyOyBkZWZhdWx0IHRvICdhbGwnIGlmCiAgICAgICAgICAgICAgIC8vIG5vIGN1cnJlbnQgZmlsdGVyIHNlbGVjdGVkCi0gICAgICAgICAgICAgIHZhciByYWRpb0lucHV0ID0gYWN0aW9uLmNoaWxkcmVuKCdpbnB1dFtuYW1lPSJmaWx0ZXIiXScpOworICAgICAgICAgICAgICB2YXIgcmFkaW9JbnB1dCA9IGFjdGlvbi5maW5kKCdpbnB1dFtuYW1lPSJmaWx0ZXIiXScpOwogICAgICAgICAgICAgICBpZiAoKHRhYmxlUGFyYW1zLmZpbHRlciAmJgogICAgICAgICAgICAgICAgICAgdGFibGVQYXJhbXMuZmlsdGVyID09PSByYWRpb0lucHV0LnZhbCgpKSB8fAogICAgICAgICAgICAgICAgICAgZmlsdGVyQWN0aW9uRGF0YS5hY3Rpb25fbmFtZSA9PSAnYWxsJykgewpAQCAtNzg4LDYgKzgzMiw3IEBACiAKICAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CiAKLSAgICAkKHRoaXMpLnBhcmVudCgpLm1vZGFsKCdoaWRlJyk7CisKKyAgICAkKCcjZmlsdGVyLW1vZGFsLScrY3R4LnRhYmxlTmFtZSkubW9kYWwoJ2hpZGUnKTsKICAgfSk7CiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90ZXN0cy90ZXN0LmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGVzdHMvdGVzdC5qcwppbmRleCBhYWMwYmE2Li5kNzk1M2RlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90ZXN0cy90ZXN0LmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Rlc3RzL3Rlc3QuanMKQEAgLTIsNyArMiw2IEBACiAvKiBVbml0IHRlc3RzIGZvciBUb2FzdGVyJ3MgSlMgKi8KIAogLyogbGlidG9hc3RlciB0ZXN0cyAqLwotCiBRVW5pdC50ZXN0KCJMYXllciBhbGVydCBub3RpZmljYXRpb24iLCBmdW5jdGlvbihhc3NlcnQpIHsKICAgdmFyIGxheWVyID0gewogICAgICJsYXllcmRldGFpbHVybCI6Ii90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci8yMiIsCkBAIC00Myw5ICs0Miw4IEBACiAKIFFVbml0LnRlc3QoIlByb2plY3QgaW5mbyIsIGZ1bmN0aW9uKGFzc2VydCl7CiAgIHZhciBkb25lID0gYXNzZXJ0LmFzeW5jKCk7Ci0gIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsIGZ1bmN0aW9uKHByakluZm8peworICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnhoclByb2plY3RVcmwsIGZ1bmN0aW9uKHByakluZm8pewogICAgIGFzc2VydC5vayhwcmpJbmZvLm1hY2hpbmUubmFtZSk7Ci0gICAgYXNzZXJ0Lm9rKHByakluZm8ucmVsZWFzZXMubGVuZ3RoID4gMCk7CiAgICAgYXNzZXJ0Lm9rKHByakluZm8ubGF5ZXJzLmxlbmd0aCA+IDApOwogICAgIGFzc2VydC5vayhwcmpJbmZvLmZyZXF0YXJnZXRzKTsKICAgICBhc3NlcnQub2socHJqSW5mby5yZWxlYXNlKTsKQEAgLTgzLDExICs4MSwxMSBAQAogICB9LCAyMDApOwogCiAgIC8qIENvbXBhcmUgdGhlIG51bWJlciBvZiBsYXllcnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgYWRkIGluIHRoZSBwcm9qZWN0ICovCi0gIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsIGZ1bmN0aW9uKHByakluZm8peworICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnhoclByb2plY3RVcmwsIGZ1bmN0aW9uKHByakluZm8pewogICAgIHZhciBvcmlnTnVtTGF5ZXJzID0gcHJqSW5mby5sYXllcnMubGVuZ3RoOwogCiAgICAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyLCB0cnVlLCBmdW5jdGlvbihkZXBzKXsKLSAgICAgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsCisgICAgICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnhoclByb2plY3RVcmwsCiAgICAgICAgIGZ1bmN0aW9uKHByakluZm8pewogICAgICAgICBhc3NlcnQub2socHJqSW5mby5sYXllcnMubGVuZ3RoID4gb3JpZ051bUxheWVycywKICAgICAgICAgICAiTGF5ZXIgbm90IGFkZGVkIHRvIHByb2plY3QiKTsKQEAgLTEzNSwxMCArMTMzLDEwIEBACiAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChyZWNpcGVzVCwKICAgICBsaWJ0b2FzdGVyLmN0eC5yZWNpcGVzVHlwZUFoZWFkVXJsLCB7fSwgZnVuY3Rpb24oKXt9KTsKIAotICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHlwZWFoZWFkJykpOwotICBhc3NlcnQub2sobGF5ZXJzVC5kYXRhKCd0eXBlYWhlYWQnKSk7Ci0gIGFzc2VydC5vayhwcm9qZWN0c1QuZGF0YSgndHlwZWFoZWFkJykpOwotICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHlwZWFoZWFkJykpOworICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHRUeXBlYWhlYWQnKSk7CisgIGFzc2VydC5vayhsYXllcnNULmRhdGEoJ3R0VHlwZWFoZWFkJykpOworICBhc3NlcnQub2socHJvamVjdHNULmRhdGEoJ3R0VHlwZWFoZWFkJykpOworICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHRUeXBlYWhlYWQnKSk7CiB9KTsKIAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90eXBlYWhlYWQuanF1ZXJ5LmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdHlwZWFoZWFkLmpxdWVyeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2VmZDgwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdHlwZWFoZWFkLmpxdWVyeS5qcwpAQCAtMCwwICsxLDE1NTEgQEAKKy8qIQorICogdHlwZWFoZWFkLmpzIDAuMTEuMQorICogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE1IFR3aXR0ZXIsIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUCisgKi8KKworKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHsKKyAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIGRlZmluZSgidHlwZWFoZWFkLmpzIiwgWyAianF1ZXJ5IiBdLCBmdW5jdGlvbihhMCkgeworICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkoYTApOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAib2JqZWN0IikgeworICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgianF1ZXJ5IikpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZhY3RvcnkoalF1ZXJ5KTsKKyAgICB9Cit9KSh0aGlzLCBmdW5jdGlvbigkKSB7CisgICAgdmFyIF8gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgaXNNc2llOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSA/IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhtc2llIHxydjopKFxkKyguXGQrKT8pL2kpWzJdIDogZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaXNCbGFua1N0cmluZzogZnVuY3Rpb24oc3RyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFzdHIgfHwgL15ccyokLy50ZXN0KHN0cik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZXNjYXBlUmVnRXhDaGFyczogZnVuY3Rpb24oc3RyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaXNTdHJpbmc6IGZ1bmN0aW9uKG9iaikgeworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAic3RyaW5nIjsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpc051bWJlcjogZnVuY3Rpb24ob2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJudW1iZXIiOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGlzQXJyYXk6ICQuaXNBcnJheSwKKyAgICAgICAgICAgIGlzRnVuY3Rpb246ICQuaXNGdW5jdGlvbiwKKyAgICAgICAgICAgIGlzT2JqZWN0OiAkLmlzUGxhaW5PYmplY3QsCisgICAgICAgICAgICBpc1VuZGVmaW5lZDogZnVuY3Rpb24ob2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJ1bmRlZmluZWQiOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGlzRWxlbWVudDogZnVuY3Rpb24ob2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGlzSlF1ZXJ5OiBmdW5jdGlvbihvYmopIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgJDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB0b1N0cjogZnVuY3Rpb24gdG9TdHIocykgeworICAgICAgICAgICAgICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHMpIHx8IHMgPT09IG51bGwgPyAiIiA6IHMgKyAiIjsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBiaW5kOiAkLnByb3h5LAorICAgICAgICAgICAgZWFjaDogZnVuY3Rpb24oY29sbGVjdGlvbiwgY2IpIHsKKyAgICAgICAgICAgICAgICAkLmVhY2goY29sbGVjdGlvbiwgcmV2ZXJzZUFyZ3MpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VBcmdzKGluZGV4LCB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IodmFsdWUsIGluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbWFwOiAkLm1hcCwKKyAgICAgICAgICAgIGZpbHRlcjogJC5ncmVwLAorICAgICAgICAgICAgZXZlcnk6IGZ1bmN0aW9uKG9iaiwgdGVzdCkgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghb2JqKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzb21lOiBmdW5jdGlvbihvYmosIHRlc3QpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFvYmopIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24oa2V5LCB2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG1peGluOiAkLmV4dGVuZCwKKyAgICAgICAgICAgIGlkZW50aXR5OiBmdW5jdGlvbih4KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKG9iaikgeworICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh0cnVlLCB7fSwgb2JqKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBnZXRJZEdlbmVyYXRvcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKzsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRlbXBsYXRpZnk6IGZ1bmN0aW9uIHRlbXBsYXRpZnkob2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICQuaXNGdW5jdGlvbihvYmopID8gb2JqIDogdGVtcGxhdGU7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVmZXI6IGZ1bmN0aW9uKGZuKSB7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVib3VuY2U6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkgeworICAgICAgICAgICAgICAgIHZhciB0aW1lb3V0LCByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHMsIGxhdGVyLCBjYWxsTm93OworICAgICAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbE5vdykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgcmVzdWx0LCBwcmV2aW91cywgbGF0ZXI7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSAwOworICAgICAgICAgICAgICAgIGxhdGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gbmV3IERhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLCByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5vdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uKHZhbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBfLmlzU3RyaW5nKHZhbCkgPyB2YWwgOiBKU09OLnN0cmluZ2lmeSh2YWwpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge30KKyAgICAgICAgfTsKKyAgICB9KCk7CisgICAgdmFyIFdXVyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHZhciBkZWZhdWx0Q2xhc3NOYW1lcyA9IHsKKyAgICAgICAgICAgIHdyYXBwZXI6ICJ0d2l0dGVyLXR5cGVhaGVhZCIsCisgICAgICAgICAgICBpbnB1dDogInR0LWlucHV0IiwKKyAgICAgICAgICAgIGhpbnQ6ICJ0dC1oaW50IiwKKyAgICAgICAgICAgIG1lbnU6ICJ0dC1tZW51IiwKKyAgICAgICAgICAgIGRhdGFzZXQ6ICJ0dC1kYXRhc2V0IiwKKyAgICAgICAgICAgIHN1Z2dlc3Rpb246ICJ0dC1zdWdnZXN0aW9uIiwKKyAgICAgICAgICAgIHNlbGVjdGFibGU6ICJ0dC1zZWxlY3RhYmxlIiwKKyAgICAgICAgICAgIGVtcHR5OiAidHQtZW1wdHkiLAorICAgICAgICAgICAgb3BlbjogInR0LW9wZW4iLAorICAgICAgICAgICAgY3Vyc29yOiAidHQtY3Vyc29yIiwKKyAgICAgICAgICAgIGhpZ2hsaWdodDogInR0LWhpZ2hsaWdodCIKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkOworICAgICAgICBmdW5jdGlvbiBidWlsZChvKSB7CisgICAgICAgICAgICB2YXIgd3d3LCBjbGFzc2VzOworICAgICAgICAgICAgY2xhc3NlcyA9IF8ubWl4aW4oe30sIGRlZmF1bHRDbGFzc05hbWVzLCBvKTsKKyAgICAgICAgICAgIHd3dyA9IHsKKyAgICAgICAgICAgICAgICBjc3M6IGJ1aWxkQ3NzKCksCisgICAgICAgICAgICAgICAgY2xhc3NlczogY2xhc3NlcywKKyAgICAgICAgICAgICAgICBodG1sOiBidWlsZEh0bWwoY2xhc3NlcyksCisgICAgICAgICAgICAgICAgc2VsZWN0b3JzOiBidWlsZFNlbGVjdG9ycyhjbGFzc2VzKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgY3NzOiB3d3cuY3NzLAorICAgICAgICAgICAgICAgIGh0bWw6IHd3dy5odG1sLAorICAgICAgICAgICAgICAgIGNsYXNzZXM6IHd3dy5jbGFzc2VzLAorICAgICAgICAgICAgICAgIHNlbGVjdG9yczogd3d3LnNlbGVjdG9ycywKKyAgICAgICAgICAgICAgICBtaXhpbjogZnVuY3Rpb24obykgeworICAgICAgICAgICAgICAgICAgICBfLm1peGluKG8sIHd3dyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBidWlsZEh0bWwoYykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB3cmFwcGVyOiAnPHNwYW4gY2xhc3M9IicgKyBjLndyYXBwZXIgKyAnIj48L3NwYW4+JywKKyAgICAgICAgICAgICAgICBtZW51OiAnPGRpdiBjbGFzcz0iJyArIGMubWVudSArICciPjwvZGl2PicKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gYnVpbGRTZWxlY3RvcnMoY2xhc3NlcykgeworICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IHt9OworICAgICAgICAgICAgXy5lYWNoKGNsYXNzZXMsIGZ1bmN0aW9uKHYsIGspIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RvcnNba10gPSAiLiIgKyB2OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JzOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ3NzKCkgeworICAgICAgICAgICAgdmFyIGNzcyA9IHsKKyAgICAgICAgICAgICAgICB3cmFwcGVyOiB7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAicmVsYXRpdmUiLAorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAiaW5saW5lLWJsb2NrIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgaGludDogeworICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogImFic29sdXRlIiwKKyAgICAgICAgICAgICAgICAgICAgdG9wOiAiMCIsCisgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICIwIiwKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICJ0cmFuc3BhcmVudCIsCisgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogIm5vbmUiLAorICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAiMSIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGlucHV0OiB7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAicmVsYXRpdmUiLAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAidG9wIiwKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAidHJhbnNwYXJlbnQiCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBpbnB1dFdpdGhOb0hpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICJyZWxhdGl2ZSIsCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICJ0b3AiCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBtZW51OiB7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAorICAgICAgICAgICAgICAgICAgICB0b3A6ICIxMDAlIiwKKyAgICAgICAgICAgICAgICAgICAgbGVmdDogIjAiLAorICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICIxMDAiLAorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAibm9uZSIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGx0cjogeworICAgICAgICAgICAgICAgICAgICBsZWZ0OiAiMCIsCisgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHJ0bDogeworICAgICAgICAgICAgICAgICAgICBsZWZ0OiAiYXV0byIsCisgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiIDAiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChfLmlzTXNpZSgpKSB7CisgICAgICAgICAgICAgICAgXy5taXhpbihjc3MuaW5wdXQsIHsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiAidXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBNykiCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY3NzOworICAgICAgICB9CisgICAgfSgpOworICAgIHZhciBFdmVudEJ1cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHZhciBuYW1lc3BhY2UsIGRlcHJlY2F0aW9uTWFwOworICAgICAgICBuYW1lc3BhY2UgPSAidHlwZWFoZWFkOiI7CisgICAgICAgIGRlcHJlY2F0aW9uTWFwID0geworICAgICAgICAgICAgcmVuZGVyOiAicmVuZGVyZWQiLAorICAgICAgICAgICAgY3Vyc29yY2hhbmdlOiAiY3Vyc29yY2hhbmdlZCIsCisgICAgICAgICAgICBzZWxlY3Q6ICJzZWxlY3RlZCIsCisgICAgICAgICAgICBhdXRvY29tcGxldGU6ICJhdXRvY29tcGxldGVkIgorICAgICAgICB9OworICAgICAgICBmdW5jdGlvbiBFdmVudEJ1cyhvKSB7CisgICAgICAgICAgICBpZiAoIW8gfHwgIW8uZWwpIHsKKyAgICAgICAgICAgICAgICAkLmVycm9yKCJFdmVudEJ1cyBpbml0aWFsaXplZCB3aXRob3V0IGVsIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRlbCA9ICQoby5lbCk7CisgICAgICAgIH0KKyAgICAgICAgXy5taXhpbihFdmVudEJ1cy5wcm90b3R5cGUsIHsKKyAgICAgICAgICAgIF90cmlnZ2VyOiBmdW5jdGlvbih0eXBlLCBhcmdzKSB7CisgICAgICAgICAgICAgICAgdmFyICRlOworICAgICAgICAgICAgICAgICRlID0gJC5FdmVudChuYW1lc3BhY2UgKyB0eXBlKTsKKyAgICAgICAgICAgICAgICAoYXJncyA9IGFyZ3MgfHwgW10pLnVuc2hpZnQoJGUpOworICAgICAgICAgICAgICAgIHRoaXMuJGVsLnRyaWdnZXIuYXBwbHkodGhpcy4kZWwsIGFyZ3MpOworICAgICAgICAgICAgICAgIHJldHVybiAkZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKHR5cGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJncywgJGU7CisgICAgICAgICAgICAgICAgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAgICAgICAgICAgICAgICAkZSA9IHRoaXMuX3RyaWdnZXIoImJlZm9yZSIgKyB0eXBlLCBhcmdzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJGUuaXNEZWZhdWx0UHJldmVudGVkKCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24odHlwZSkgeworICAgICAgICAgICAgICAgIHZhciBkZXByZWNhdGVkVHlwZTsKKyAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKHR5cGUsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CisgICAgICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZWRUeXBlID0gZGVwcmVjYXRpb25NYXBbdHlwZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihkZXByZWNhdGVkVHlwZSwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gRXZlbnRCdXM7CisgICAgfSgpOworICAgIHZhciBFdmVudEVtaXR0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgc3BsaXR0ZXIgPSAvXHMrLywgbmV4dFRpY2sgPSBnZXROZXh0VGljaygpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb25TeW5jOiBvblN5bmMsCisgICAgICAgICAgICBvbkFzeW5jOiBvbkFzeW5jLAorICAgICAgICAgICAgb2ZmOiBvZmYsCisgICAgICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyCisgICAgICAgIH07CisgICAgICAgIGZ1bmN0aW9uIG9uKG1ldGhvZCwgdHlwZXMsIGNiLCBjb250ZXh0KSB7CisgICAgICAgICAgICB2YXIgdHlwZTsKKyAgICAgICAgICAgIGlmICghY2IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoc3BsaXR0ZXIpOworICAgICAgICAgICAgY2IgPSBjb250ZXh0ID8gYmluZENvbnRleHQoY2IsIGNvbnRleHQpIDogY2I7CisgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307CisgICAgICAgICAgICB3aGlsZSAodHlwZSA9IHR5cGVzLnNoaWZ0KCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbdHlwZV0gPSB0aGlzLl9jYWxsYmFja3NbdHlwZV0gfHwgeworICAgICAgICAgICAgICAgICAgICBzeW5jOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgYXN5bmM6IFtdCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbdHlwZV1bbWV0aG9kXS5wdXNoKGNiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIG9uQXN5bmModHlwZXMsIGNiLCBjb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gb24uY2FsbCh0aGlzLCAiYXN5bmMiLCB0eXBlcywgY2IsIGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIG9uU3luYyh0eXBlcywgY2IsIGNvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBvbi5jYWxsKHRoaXMsICJzeW5jIiwgdHlwZXMsIGNiLCBjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBvZmYodHlwZXMpIHsKKyAgICAgICAgICAgIHZhciB0eXBlOworICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoc3BsaXR0ZXIpOworICAgICAgICAgICAgd2hpbGUgKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1t0eXBlXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIHRyaWdnZXIodHlwZXMpIHsKKyAgICAgICAgICAgIHZhciB0eXBlLCBjYWxsYmFja3MsIGFyZ3MsIHN5bmNGbHVzaCwgYXN5bmNGbHVzaDsKKyAgICAgICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnNwbGl0KHNwbGl0dGVyKTsKKyAgICAgICAgICAgIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisgICAgICAgICAgICB3aGlsZSAoKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSAmJiAoY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW3R5cGVdKSkgeworICAgICAgICAgICAgICAgIHN5bmNGbHVzaCA9IGdldEZsdXNoKGNhbGxiYWNrcy5zeW5jLCB0aGlzLCBbIHR5cGUgXS5jb25jYXQoYXJncykpOworICAgICAgICAgICAgICAgIGFzeW5jRmx1c2ggPSBnZXRGbHVzaChjYWxsYmFja3MuYXN5bmMsIHRoaXMsIFsgdHlwZSBdLmNvbmNhdChhcmdzKSk7CisgICAgICAgICAgICAgICAgc3luY0ZsdXNoKCkgJiYgbmV4dFRpY2soYXN5bmNGbHVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBnZXRGbHVzaChjYWxsYmFja3MsIGNvbnRleHQsIGFyZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiBmbHVzaDsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZsdXNoKCkgeworICAgICAgICAgICAgICAgIHZhciBjYW5jZWxsZWQ7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7ICFjYW5jZWxsZWQgJiYgaSA8IGxlbjsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZCA9IGNhbGxiYWNrc1tpXS5hcHBseShjb250ZXh0LCBhcmdzKSA9PT0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAhY2FuY2VsbGVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdldE5leHRUaWNrKCkgeworICAgICAgICAgICAgdmFyIG5leHRUaWNrRm47CisgICAgICAgICAgICBpZiAod2luZG93LnNldEltbWVkaWF0ZSkgeworICAgICAgICAgICAgICAgIG5leHRUaWNrRm4gPSBmdW5jdGlvbiBuZXh0VGlja1NldEltbWVkaWF0ZShmbikgeworICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuZXh0VGlja0ZuID0gZnVuY3Rpb24gbmV4dFRpY2tTZXRUaW1lb3V0KGZuKSB7CisgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbigpOworICAgICAgICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5leHRUaWNrRm47CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gYmluZENvbnRleHQoZm4sIGNvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBmbi5iaW5kID8gZm4uYmluZChjb250ZXh0KSA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZuLmFwcGx5KGNvbnRleHQsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfSgpOworICAgIHZhciBoaWdobGlnaHQgPSBmdW5jdGlvbihkb2MpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgZGVmYXVsdHMgPSB7CisgICAgICAgICAgICBub2RlOiBudWxsLAorICAgICAgICAgICAgcGF0dGVybjogbnVsbCwKKyAgICAgICAgICAgIHRhZ05hbWU6ICJzdHJvbmciLAorICAgICAgICAgICAgY2xhc3NOYW1lOiBudWxsLAorICAgICAgICAgICAgd29yZHNPbmx5OiBmYWxzZSwKKyAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBoaWdodGxpZ2h0KG8pIHsKKyAgICAgICAgICAgIHZhciByZWdleDsKKyAgICAgICAgICAgIG8gPSBfLm1peGluKHt9LCBkZWZhdWx0cywgbyk7CisgICAgICAgICAgICBpZiAoIW8ubm9kZSB8fCAhby5wYXR0ZXJuKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgby5wYXR0ZXJuID0gXy5pc0FycmF5KG8ucGF0dGVybikgPyBvLnBhdHRlcm4gOiBbIG8ucGF0dGVybiBdOworICAgICAgICAgICAgcmVnZXggPSBnZXRSZWdleChvLnBhdHRlcm4sIG8uY2FzZVNlbnNpdGl2ZSwgby53b3Jkc09ubHkpOworICAgICAgICAgICAgdHJhdmVyc2Uoby5ub2RlLCBoaWdodGxpZ2h0VGV4dE5vZGUpOworICAgICAgICAgICAgZnVuY3Rpb24gaGlnaHRsaWdodFRleHROb2RlKHRleHROb2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoLCBwYXR0ZXJuTm9kZSwgd3JhcHBlck5vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0Tm9kZS5kYXRhKSkgeworICAgICAgICAgICAgICAgICAgICB3cmFwcGVyTm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KG8udGFnTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG8uY2xhc3NOYW1lICYmICh3cmFwcGVyTm9kZS5jbGFzc05hbWUgPSBvLmNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5Ob2RlID0gdGV4dE5vZGUuc3BsaXRUZXh0KG1hdGNoLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybk5vZGUuc3BsaXRUZXh0KG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJOb2RlLmFwcGVuZENoaWxkKHBhdHRlcm5Ob2RlLmNsb25lTm9kZSh0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIHRleHROb2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdyYXBwZXJOb2RlLCBwYXR0ZXJuTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAhIW1hdGNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnVuY3Rpb24gdHJhdmVyc2UoZWwsIGhpZ2h0bGlnaHRUZXh0Tm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGUsIFRFWFRfTk9ERV9UWVBFID0gMzsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gZWwuY2hpbGROb2Rlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFX1RZUEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gaGlnaHRsaWdodFRleHROb2RlKGNoaWxkTm9kZSkgPyAxIDogMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlKGNoaWxkTm9kZSwgaGlnaHRsaWdodFRleHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgZnVuY3Rpb24gZ2V0UmVnZXgocGF0dGVybnMsIGNhc2VTZW5zaXRpdmUsIHdvcmRzT25seSkgeworICAgICAgICAgICAgdmFyIGVzY2FwZWRQYXR0ZXJucyA9IFtdLCByZWdleFN0cjsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXR0ZXJucy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGVzY2FwZWRQYXR0ZXJucy5wdXNoKF8uZXNjYXBlUmVnRXhDaGFycyhwYXR0ZXJuc1tpXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVnZXhTdHIgPSB3b3Jkc09ubHkgPyAiXFxiKCIgKyBlc2NhcGVkUGF0dGVybnMuam9pbigifCIpICsgIilcXGIiIDogIigiICsgZXNjYXBlZFBhdHRlcm5zLmpvaW4oInwiKSArICIpIjsKKyAgICAgICAgICAgIHJldHVybiBjYXNlU2Vuc2l0aXZlID8gbmV3IFJlZ0V4cChyZWdleFN0cikgOiBuZXcgUmVnRXhwKHJlZ2V4U3RyLCAiaSIpOworICAgICAgICB9CisgICAgfSh3aW5kb3cuZG9jdW1lbnQpOworICAgIHZhciBJbnB1dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHZhciBzcGVjaWFsS2V5Q29kZU1hcDsKKyAgICAgICAgc3BlY2lhbEtleUNvZGVNYXAgPSB7CisgICAgICAgICAgICA5OiAidGFiIiwKKyAgICAgICAgICAgIDI3OiAiZXNjIiwKKyAgICAgICAgICAgIDM3OiAibGVmdCIsCisgICAgICAgICAgICAzOTogInJpZ2h0IiwKKyAgICAgICAgICAgIDEzOiAiZW50ZXIiLAorICAgICAgICAgICAgMzg6ICJ1cCIsCisgICAgICAgICAgICA0MDogImRvd24iCisgICAgICAgIH07CisgICAgICAgIGZ1bmN0aW9uIElucHV0KG8sIHd3dykgeworICAgICAgICAgICAgbyA9IG8gfHwge307CisgICAgICAgICAgICBpZiAoIW8uaW5wdXQpIHsKKyAgICAgICAgICAgICAgICAkLmVycm9yKCJpbnB1dCBpcyBtaXNzaW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3d3cubWl4aW4odGhpcyk7CisgICAgICAgICAgICB0aGlzLiRoaW50ID0gJChvLmhpbnQpOworICAgICAgICAgICAgdGhpcy4kaW5wdXQgPSAkKG8uaW5wdXQpOworICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJGlucHV0LnZhbCgpOworICAgICAgICAgICAgdGhpcy5xdWVyeVdoZW5Gb2N1c2VkID0gdGhpcy5oYXNGb2N1cygpID8gdGhpcy5xdWVyeSA6IG51bGw7CisgICAgICAgICAgICB0aGlzLiRvdmVyZmxvd0hlbHBlciA9IGJ1aWxkT3ZlcmZsb3dIZWxwZXIodGhpcy4kaW5wdXQpOworICAgICAgICAgICAgdGhpcy5fY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpOworICAgICAgICAgICAgaWYgKHRoaXMuJGhpbnQubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRIaW50ID0gdGhpcy5nZXRIaW50ID0gdGhpcy5jbGVhckhpbnQgPSB0aGlzLmNsZWFySGludElmSW52YWxpZCA9IF8ubm9vcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBJbnB1dC5ub3JtYWxpemVRdWVyeSA9IGZ1bmN0aW9uKHN0cikgeworICAgICAgICAgICAgcmV0dXJuIF8udG9TdHIoc3RyKS5yZXBsYWNlKC9eXHMqL2csICIiKS5yZXBsYWNlKC9cc3syLH0vZywgIiAiKTsKKyAgICAgICAgfTsKKyAgICAgICAgXy5taXhpbihJbnB1dC5wcm90b3R5cGUsIEV2ZW50RW1pdHRlciwgeworICAgICAgICAgICAgX29uQmx1cjogZnVuY3Rpb24gb25CbHVyKCkgeworICAgICAgICAgICAgICAgIHRoaXMucmVzZXRJbnB1dFZhbHVlKCk7CisgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJibHVycmVkIik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5xdWVyeVdoZW5Gb2N1c2VkID0gdGhpcy5xdWVyeTsKKyAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoImZvY3VzZWQiKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25LZXlkb3duOiBmdW5jdGlvbiBvbktleWRvd24oJGUpIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5TmFtZSA9IHNwZWNpYWxLZXlDb2RlTWFwWyRlLndoaWNoIHx8ICRlLmtleUNvZGVdOworICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZVByZXZlbnREZWZhdWx0KGtleU5hbWUsICRlKTsKKyAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZSAmJiB0aGlzLl9zaG91bGRUcmlnZ2VyKGtleU5hbWUsICRlKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoa2V5TmFtZSArICJLZXllZCIsICRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uSW5wdXQ6IGZ1bmN0aW9uIG9uSW5wdXQoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2V0UXVlcnkodGhpcy5nZXRJbnB1dFZhbHVlKCkpOworICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJIaW50SWZJbnZhbGlkKCk7CisgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9tYW5hZ2VQcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gbWFuYWdlUHJldmVudERlZmF1bHQoa2V5TmFtZSwgJGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJldmVudERlZmF1bHQ7CisgICAgICAgICAgICAgICAgc3dpdGNoIChrZXlOYW1lKSB7CisgICAgICAgICAgICAgICAgICBjYXNlICJ1cCI6CisgICAgICAgICAgICAgICAgICBjYXNlICJkb3duIjoKKyAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSAhd2l0aE1vZGlmaWVyKCRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ICYmICRlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX3Nob3VsZFRyaWdnZXI6IGZ1bmN0aW9uIHNob3VsZFRyaWdnZXIoa2V5TmFtZSwgJGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlcjsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGtleU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgInRhYiI6CisgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSAhd2l0aE1vZGlmaWVyKCRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJpZ2dlcjsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfY2hlY2tMYW5ndWFnZURpcmVjdGlvbjogZnVuY3Rpb24gY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGlyID0gKHRoaXMuJGlucHV0LmNzcygiZGlyZWN0aW9uIikgfHwgImx0ciIpLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyICE9PSBkaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXIgPSBkaXI7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuJGhpbnQuYXR0cigiZGlyIiwgZGlyKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJsYW5nRGlyQ2hhbmdlZCIsIGRpcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9zZXRRdWVyeTogZnVuY3Rpb24gc2V0UXVlcnkodmFsLCBzaWxlbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJlRXF1aXZhbGVudCwgaGFzRGlmZmVyZW50V2hpdGVzcGFjZTsKKyAgICAgICAgICAgICAgICBhcmVFcXVpdmFsZW50ID0gYXJlUXVlcmllc0VxdWl2YWxlbnQodmFsLCB0aGlzLnF1ZXJ5KTsKKyAgICAgICAgICAgICAgICBoYXNEaWZmZXJlbnRXaGl0ZXNwYWNlID0gYXJlRXF1aXZhbGVudCA/IHRoaXMucXVlcnkubGVuZ3RoICE9PSB2YWwubGVuZ3RoIDogZmFsc2U7CisgICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHZhbDsKKyAgICAgICAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhYXJlRXF1aXZhbGVudCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoInF1ZXJ5Q2hhbmdlZCIsIHRoaXMucXVlcnkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNpbGVudCAmJiBoYXNEaWZmZXJlbnRXaGl0ZXNwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigid2hpdGVzcGFjZUNoYW5nZWQiLCB0aGlzLnF1ZXJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgYmluZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBvbkJsdXIsIG9uRm9jdXMsIG9uS2V5ZG93biwgb25JbnB1dDsKKyAgICAgICAgICAgICAgICBvbkJsdXIgPSBfLmJpbmQodGhpcy5fb25CbHVyLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBvbkZvY3VzID0gXy5iaW5kKHRoaXMuX29uRm9jdXMsIHRoaXMpOworICAgICAgICAgICAgICAgIG9uS2V5ZG93biA9IF8uYmluZCh0aGlzLl9vbktleWRvd24sIHRoaXMpOworICAgICAgICAgICAgICAgIG9uSW5wdXQgPSBfLmJpbmQodGhpcy5fb25JbnB1dCwgdGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oImJsdXIudHQiLCBvbkJsdXIpLm9uKCJmb2N1cy50dCIsIG9uRm9jdXMpLm9uKCJrZXlkb3duLnR0Iiwgb25LZXlkb3duKTsKKyAgICAgICAgICAgICAgICBpZiAoIV8uaXNNc2llKCkgfHwgXy5pc01zaWUoKSA+IDkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oImlucHV0LnR0Iiwgb25JbnB1dCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oImtleWRvd24udHQga2V5cHJlc3MudHQgY3V0LnR0IHBhc3RlLnR0IiwgZnVuY3Rpb24oJGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5Q29kZU1hcFskZS53aGljaCB8fCAkZS5rZXlDb2RlXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIF8uZGVmZXIoXy5iaW5kKHRoYXQuX29uSW5wdXQsIHRoYXQsICRlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuZm9jdXMoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkgeworICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LmJsdXIoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBnZXRMYW5nRGlyOiBmdW5jdGlvbiBnZXRMYW5nRGlyKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRpcjsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBnZXRRdWVyeTogZnVuY3Rpb24gZ2V0UXVlcnkoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkgfHwgIiI7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0UXVlcnk6IGZ1bmN0aW9uIHNldFF1ZXJ5KHZhbCwgc2lsZW50KSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHZhbCk7CisgICAgICAgICAgICAgICAgdGhpcy5fc2V0UXVlcnkodmFsLCBzaWxlbnQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGhhc1F1ZXJ5Q2hhbmdlZFNpbmNlTGFzdEZvY3VzOiBmdW5jdGlvbiBoYXNRdWVyeUNoYW5nZWRTaW5jZUxhc3RGb2N1cygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSAhPT0gdGhpcy5xdWVyeVdoZW5Gb2N1c2VkOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGdldElucHV0VmFsdWU6IGZ1bmN0aW9uIGdldElucHV0VmFsdWUoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGlucHV0LnZhbCgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldElucHV0VmFsdWU6IGZ1bmN0aW9uIHNldElucHV0VmFsdWUodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC52YWwodmFsdWUpOworICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJIaW50SWZJbnZhbGlkKCk7CisgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlc2V0SW5wdXRWYWx1ZTogZnVuY3Rpb24gcmVzZXRJbnB1dFZhbHVlKCkgeworICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnF1ZXJ5KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBnZXRIaW50OiBmdW5jdGlvbiBnZXRIaW50KCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRoaW50LnZhbCgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldEhpbnQ6IGZ1bmN0aW9uIHNldEhpbnQodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRoaW50LnZhbCh2YWx1ZSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY2xlYXJIaW50OiBmdW5jdGlvbiBjbGVhckhpbnQoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRIaW50KCIiKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjbGVhckhpbnRJZkludmFsaWQ6IGZ1bmN0aW9uIGNsZWFySGludElmSW52YWxpZCgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsLCBoaW50LCB2YWxJc1ByZWZpeE9mSGludCwgaXNWYWxpZDsKKyAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmdldElucHV0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBoaW50ID0gdGhpcy5nZXRIaW50KCk7CisgICAgICAgICAgICAgICAgdmFsSXNQcmVmaXhPZkhpbnQgPSB2YWwgIT09IGhpbnQgJiYgaGludC5pbmRleE9mKHZhbCkgPT09IDA7CisgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHZhbCAhPT0gIiIgJiYgdmFsSXNQcmVmaXhPZkhpbnQgJiYgIXRoaXMuaGFzT3ZlcmZsb3coKTsKKyAgICAgICAgICAgICAgICAhaXNWYWxpZCAmJiB0aGlzLmNsZWFySGludCgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGhhc0ZvY3VzOiBmdW5jdGlvbiBoYXNGb2N1cygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5wdXQuaXMoIjpmb2N1cyIpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGhhc092ZXJmbG93OiBmdW5jdGlvbiBoYXNPdmVyZmxvdygpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29uc3RyYWludCA9IHRoaXMuJGlucHV0LndpZHRoKCkgLSAyOworICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJmbG93SGVscGVyLnRleHQodGhpcy5nZXRJbnB1dFZhbHVlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRvdmVyZmxvd0hlbHBlci53aWR0aCgpID49IGNvbnN0cmFpbnQ7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaXNDdXJzb3JBdEVuZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlTGVuZ3RoLCBzZWxlY3Rpb25TdGFydCwgcmFuZ2U7CisgICAgICAgICAgICAgICAgdmFsdWVMZW5ndGggPSB0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGg7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLiRpbnB1dFswXS5zZWxlY3Rpb25TdGFydDsKKyAgICAgICAgICAgICAgICBpZiAoXy5pc051bWJlcihzZWxlY3Rpb25TdGFydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09PSB2YWx1ZUxlbmd0aDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOworICAgICAgICAgICAgICAgICAgICByYW5nZS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIC12YWx1ZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZUxlbmd0aCA9PT0gcmFuZ2UudGV4dC5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kaGludC5vZmYoIi50dCIpOworICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9mZigiLnR0Iik7CisgICAgICAgICAgICAgICAgdGhpcy4kb3ZlcmZsb3dIZWxwZXIucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgdGhpcy4kaGludCA9IHRoaXMuJGlucHV0ID0gdGhpcy4kb3ZlcmZsb3dIZWxwZXIgPSAkKCI8ZGl2PiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIElucHV0OworICAgICAgICBmdW5jdGlvbiBidWlsZE92ZXJmbG93SGVscGVyKCRpbnB1dCkgeworICAgICAgICAgICAgcmV0dXJuICQoJzxwcmUgYXJpYS1oaWRkZW49InRydWUiPjwvcHJlPicpLmNzcyh7CisgICAgICAgICAgICAgICAgcG9zaXRpb246ICJhYnNvbHV0ZSIsCisgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogImhpZGRlbiIsCisgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogInByZSIsCisgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJGlucHV0LmNzcygiZm9udC1mYW1pbHkiKSwKKyAgICAgICAgICAgICAgICBmb250U2l6ZTogJGlucHV0LmNzcygiZm9udC1zaXplIiksCisgICAgICAgICAgICAgICAgZm9udFN0eWxlOiAkaW5wdXQuY3NzKCJmb250LXN0eWxlIiksCisgICAgICAgICAgICAgICAgZm9udFZhcmlhbnQ6ICRpbnB1dC5jc3MoImZvbnQtdmFyaWFudCIpLAorICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICRpbnB1dC5jc3MoImZvbnQtd2VpZ2h0IiksCisgICAgICAgICAgICAgICAgd29yZFNwYWNpbmc6ICRpbnB1dC5jc3MoIndvcmQtc3BhY2luZyIpLAorICAgICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6ICRpbnB1dC5jc3MoImxldHRlci1zcGFjaW5nIiksCisgICAgICAgICAgICAgICAgdGV4dEluZGVudDogJGlucHV0LmNzcygidGV4dC1pbmRlbnQiKSwKKyAgICAgICAgICAgICAgICB0ZXh0UmVuZGVyaW5nOiAkaW5wdXQuY3NzKCJ0ZXh0LXJlbmRlcmluZyIpLAorICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06ICRpbnB1dC5jc3MoInRleHQtdHJhbnNmb3JtIikKKyAgICAgICAgICAgIH0pLmluc2VydEFmdGVyKCRpbnB1dCk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gYXJlUXVlcmllc0VxdWl2YWxlbnQoYSwgYikgeworICAgICAgICAgICAgcmV0dXJuIElucHV0Lm5vcm1hbGl6ZVF1ZXJ5KGEpID09PSBJbnB1dC5ub3JtYWxpemVRdWVyeShiKTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiB3aXRoTW9kaWZpZXIoJGUpIHsKKyAgICAgICAgICAgIHJldHVybiAkZS5hbHRLZXkgfHwgJGUuY3RybEtleSB8fCAkZS5tZXRhS2V5IHx8ICRlLnNoaWZ0S2V5OworICAgICAgICB9CisgICAgfSgpOworICAgIHZhciBEYXRhc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgdmFyIGtleXMsIG5hbWVHZW5lcmF0b3I7CisgICAgICAgIGtleXMgPSB7CisgICAgICAgICAgICB2YWw6ICJ0dC1zZWxlY3RhYmxlLWRpc3BsYXkiLAorICAgICAgICAgICAgb2JqOiAidHQtc2VsZWN0YWJsZS1vYmplY3QiCisgICAgICAgIH07CisgICAgICAgIG5hbWVHZW5lcmF0b3IgPSBfLmdldElkR2VuZXJhdG9yKCk7CisgICAgICAgIGZ1bmN0aW9uIERhdGFzZXQobywgd3d3KSB7CisgICAgICAgICAgICBvID0gbyB8fCB7fTsKKyAgICAgICAgICAgIG8udGVtcGxhdGVzID0gby50ZW1wbGF0ZXMgfHwge307CisgICAgICAgICAgICBvLnRlbXBsYXRlcy5ub3RGb3VuZCA9IG8udGVtcGxhdGVzLm5vdEZvdW5kIHx8IG8udGVtcGxhdGVzLmVtcHR5OworICAgICAgICAgICAgaWYgKCFvLnNvdXJjZSkgeworICAgICAgICAgICAgICAgICQuZXJyb3IoIm1pc3Npbmcgc291cmNlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW8ubm9kZSkgeworICAgICAgICAgICAgICAgICQuZXJyb3IoIm1pc3Npbmcgbm9kZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG8ubmFtZSAmJiAhaXNWYWxpZE5hbWUoby5uYW1lKSkgeworICAgICAgICAgICAgICAgICQuZXJyb3IoImludmFsaWQgZGF0YXNldCBuYW1lOiAiICsgby5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHd3dy5taXhpbih0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ID0gISFvLmhpZ2hsaWdodDsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG8ubmFtZSB8fCBuYW1lR2VuZXJhdG9yKCk7CisgICAgICAgICAgICB0aGlzLmxpbWl0ID0gby5saW1pdCB8fCA1OworICAgICAgICAgICAgdGhpcy5kaXNwbGF5Rm4gPSBnZXREaXNwbGF5Rm4oby5kaXNwbGF5IHx8IG8uZGlzcGxheUtleSk7CisgICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IGdldFRlbXBsYXRlcyhvLnRlbXBsYXRlcywgdGhpcy5kaXNwbGF5Rm4pOworICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBvLnNvdXJjZS5fX3R0QWRhcHRlciA/IG8uc291cmNlLl9fdHRBZGFwdGVyKCkgOiBvLnNvdXJjZTsKKyAgICAgICAgICAgIHRoaXMuYXN5bmMgPSBfLmlzVW5kZWZpbmVkKG8uYXN5bmMpID8gdGhpcy5zb3VyY2UubGVuZ3RoID4gMiA6ICEhby5hc3luYzsKKyAgICAgICAgICAgIHRoaXMuX3Jlc2V0TGFzdFN1Z2dlc3Rpb24oKTsKKyAgICAgICAgICAgIHRoaXMuJGVsID0gJChvLm5vZGUpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5kYXRhc2V0KS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZGF0YXNldCArICItIiArIHRoaXMubmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgRGF0YXNldC5leHRyYWN0RGF0YSA9IGZ1bmN0aW9uIGV4dHJhY3REYXRhKGVsKSB7CisgICAgICAgICAgICB2YXIgJGVsID0gJChlbCk7CisgICAgICAgICAgICBpZiAoJGVsLmRhdGEoa2V5cy5vYmopKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsOiAkZWwuZGF0YShrZXlzLnZhbCkgfHwgIiIsCisgICAgICAgICAgICAgICAgICAgIG9iajogJGVsLmRhdGEoa2V5cy5vYmopIHx8IG51bGwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH07CisgICAgICAgIF8ubWl4aW4oRGF0YXNldC5wcm90b3R5cGUsIEV2ZW50RW1pdHRlciwgeworICAgICAgICAgICAgX292ZXJ3cml0ZTogZnVuY3Rpb24gb3ZlcndyaXRlKHF1ZXJ5LCBzdWdnZXN0aW9ucykgeworICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnMgfHwgW107CisgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJTdWdnZXN0aW9ucyhxdWVyeSwgc3VnZ2VzdGlvbnMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hc3luYyAmJiB0aGlzLnRlbXBsYXRlcy5wZW5kaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclBlbmRpbmcocXVlcnkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYXN5bmMgJiYgdGhpcy50ZW1wbGF0ZXMubm90Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyTm90Rm91bmQocXVlcnkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigicmVuZGVyZWQiLCB0aGlzLm5hbWUsIHN1Z2dlc3Rpb25zLCBmYWxzZSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX2FwcGVuZDogZnVuY3Rpb24gYXBwZW5kKHF1ZXJ5LCBzdWdnZXN0aW9ucykgeworICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnMgfHwgW107CisgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCAmJiB0aGlzLiRsYXN0U3VnZ2VzdGlvbi5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJTdWdnZXN0aW9ucyhxdWVyeSwgc3VnZ2VzdGlvbnMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuJGxhc3RTdWdnZXN0aW9uLmxlbmd0aCAmJiB0aGlzLnRlbXBsYXRlcy5ub3RGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJOb3RGb3VuZChxdWVyeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigicmVuZGVyZWQiLCB0aGlzLm5hbWUsIHN1Z2dlc3Rpb25zLCB0cnVlKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfcmVuZGVyU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uIHJlbmRlclN1Z2dlc3Rpb25zKHF1ZXJ5LCBzdWdnZXN0aW9ucykgeworICAgICAgICAgICAgICAgIHZhciAkZnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgJGZyYWdtZW50ID0gdGhpcy5fZ2V0U3VnZ2VzdGlvbnNGcmFnbWVudChxdWVyeSwgc3VnZ2VzdGlvbnMpOworICAgICAgICAgICAgICAgIHRoaXMuJGxhc3RTdWdnZXN0aW9uID0gJGZyYWdtZW50LmNoaWxkcmVuKCkubGFzdCgpOworICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwoJGZyYWdtZW50KS5wcmVwZW5kKHRoaXMuX2dldEhlYWRlcihxdWVyeSwgc3VnZ2VzdGlvbnMpKS5hcHBlbmQodGhpcy5fZ2V0Rm9vdGVyKHF1ZXJ5LCBzdWdnZXN0aW9ucykpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9hcHBlbmRTdWdnZXN0aW9uczogZnVuY3Rpb24gYXBwZW5kU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKSB7CisgICAgICAgICAgICAgICAgdmFyICRmcmFnbWVudCwgJGxhc3RTdWdnZXN0aW9uOworICAgICAgICAgICAgICAgICRmcmFnbWVudCA9IHRoaXMuX2dldFN1Z2dlc3Rpb25zRnJhZ21lbnQocXVlcnksIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgICAgICAgICAkbGFzdFN1Z2dlc3Rpb24gPSAkZnJhZ21lbnQuY2hpbGRyZW4oKS5sYXN0KCk7CisgICAgICAgICAgICAgICAgdGhpcy4kbGFzdFN1Z2dlc3Rpb24uYWZ0ZXIoJGZyYWdtZW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLiRsYXN0U3VnZ2VzdGlvbiA9ICRsYXN0U3VnZ2VzdGlvbjsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfcmVuZGVyUGVuZGluZzogZnVuY3Rpb24gcmVuZGVyUGVuZGluZyhxdWVyeSkgeworICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzLnBlbmRpbmc7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpOworICAgICAgICAgICAgICAgIHRlbXBsYXRlICYmIHRoaXMuJGVsLmh0bWwodGVtcGxhdGUoeworICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksCisgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZQorICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfcmVuZGVyTm90Rm91bmQ6IGZ1bmN0aW9uIHJlbmRlck5vdEZvdW5kKHF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMubm90Rm91bmQ7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpOworICAgICAgICAgICAgICAgIHRlbXBsYXRlICYmIHRoaXMuJGVsLmh0bWwodGVtcGxhdGUoeworICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksCisgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZQorICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfZW1wdHk6IGZ1bmN0aW9uIGVtcHR5KCkgeworICAgICAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9nZXRTdWdnZXN0aW9uc0ZyYWdtZW50OiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uc0ZyYWdtZW50KHF1ZXJ5LCBzdWdnZXN0aW9ucykgeworICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgZnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgICAgICAgICAgXy5lYWNoKHN1Z2dlc3Rpb25zLCBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uTm9kZShzdWdnZXN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciAkZWwsIGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGF0Ll9pbmplY3RRdWVyeShxdWVyeSwgc3VnZ2VzdGlvbik7CisgICAgICAgICAgICAgICAgICAgICRlbCA9ICQodGhhdC50ZW1wbGF0ZXMuc3VnZ2VzdGlvbihjb250ZXh0KSkuZGF0YShrZXlzLm9iaiwgc3VnZ2VzdGlvbikuZGF0YShrZXlzLnZhbCwgdGhhdC5kaXNwbGF5Rm4oc3VnZ2VzdGlvbikpLmFkZENsYXNzKHRoYXQuY2xhc3Nlcy5zdWdnZXN0aW9uICsgIiAiICsgdGhhdC5jbGFzc2VzLnNlbGVjdGFibGUpOworICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCgkZWxbMF0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ICYmIGhpZ2hsaWdodCh7CisgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5jbGFzc2VzLmhpZ2hsaWdodCwKKyAgICAgICAgICAgICAgICAgICAgbm9kZTogZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHF1ZXJ5CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICQoZnJhZ21lbnQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9nZXRGb290ZXI6IGZ1bmN0aW9uIGdldEZvb3RlcihxdWVyeSwgc3VnZ2VzdGlvbnMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuZm9vdGVyID8gdGhpcy50ZW1wbGF0ZXMuZm9vdGVyKHsKKyAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZQorICAgICAgICAgICAgICAgIH0pIDogbnVsbDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfZ2V0SGVhZGVyOiBmdW5jdGlvbiBnZXRIZWFkZXIocXVlcnksIHN1Z2dlc3Rpb25zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzLmhlYWRlciA/IHRoaXMudGVtcGxhdGVzLmhlYWRlcih7CisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zLAorICAgICAgICAgICAgICAgICAgICBkYXRhc2V0OiB0aGlzLm5hbWUKKyAgICAgICAgICAgICAgICB9KSA6IG51bGw7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX3Jlc2V0TGFzdFN1Z2dlc3Rpb246IGZ1bmN0aW9uIHJlc2V0TGFzdFN1Z2dlc3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kbGFzdFN1Z2dlc3Rpb24gPSAkKCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX2luamVjdFF1ZXJ5OiBmdW5jdGlvbiBpbmplY3RRdWVyeShxdWVyeSwgb2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNPYmplY3Qob2JqKSA/IF8ubWl4aW4oeworICAgICAgICAgICAgICAgICAgICBfcXVlcnk6IHF1ZXJ5CisgICAgICAgICAgICAgICAgfSwgb2JqKSA6IG9iajsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShxdWVyeSkgeworICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgY2FuY2VsZWQgPSBmYWxzZSwgc3luY0NhbGxlZCA9IGZhbHNlLCByZW5kZXJlZCA9IDA7CisgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGF0LmNhbmNlbCA9ICQubm9vcDsKKyAgICAgICAgICAgICAgICAgICAgdGhhdC5hc3luYyAmJiB0aGF0LnRyaWdnZXIoImFzeW5jQ2FuY2VsZWQiLCBxdWVyeSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZShxdWVyeSwgc3luYywgYXN5bmMpOworICAgICAgICAgICAgICAgICFzeW5jQ2FsbGVkICYmIHN5bmMoW10pOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN5bmMoc3VnZ2VzdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNDYWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzeW5jQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSAoc3VnZ2VzdGlvbnMgfHwgW10pLnNsaWNlKDAsIHRoYXQubGltaXQpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCA9IHN1Z2dlc3Rpb25zLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgdGhhdC5fb3ZlcndyaXRlKHF1ZXJ5LCBzdWdnZXN0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlZCA8IHRoYXQubGltaXQgJiYgdGhhdC5hc3luYykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCJhc3luY1JlcXVlc3RlZCIsIHF1ZXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luYyhzdWdnZXN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zIHx8IFtdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkICYmIHJlbmRlcmVkIDwgdGhhdC5saW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jYW5jZWwgPSAkLm5vb3A7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCArPSBzdWdnZXN0aW9ucy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBQ0s6IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHN5bmNocm9ub3VzIHdheSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmluZyByZXN1bHRzLCB3ZSB1c2UgdGhlIGFzeW5jIGZ1bmN0aW9uIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aW1lIHdlIHVwZGF0ZSB0aGUgZHJvcC1kb3duOyBob3dldmVyLCB0aGUgdHlwZWFoZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIHNvbWUgaW50ZXJuYWwgYm9vay1rZWVwaW5nIHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgZ2V0IHRoZSBhZGRpdGlvbmFsIGl0ZW1zIGluIHRoZSBkcm9wLWRvd24gd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgc2V0IG9mIHJlc3VsdHMgaXMgZmV0Y2hlZCwgaW5zdGVhZCBvZiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZW0gKGl0IGFwcGVhcnMgdG8gaW1wbGljaXRseSB0cmFjayB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0cyBoYXZlIGFscmVhZHkgYmVlbiBzaG93biBpbiB0aGUgZHJvcC1kb3duKTsgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcmNpbmcgYW4gb3ZlcndyaXRlLCB3ZSBzZWUgYWxsIG9mIHRoZSBuZXcgcmVzdWx0cworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlcnkgdGltZSB3ZSBmZXRjaCBhIHNldCBvZiBzdWdnZXN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0Ll9hcHBlbmQocXVlcnksIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIHRoYXQubGltaXQgLSByZW5kZXJlZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb3ZlcndyaXRlKHF1ZXJ5LCBzdWdnZXN0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuYXN5bmMgJiYgdGhhdC50cmlnZ2VyKCJhc3luY1JlY2VpdmVkIiwgcXVlcnkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNhbmNlbDogJC5ub29wLAorICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5KCk7CisgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoImNsZWFyZWQiKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRlbC5pcygiOmVtcHR5Iik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRlbCA9ICQoIjxkaXY+Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gRGF0YXNldDsKKyAgICAgICAgZnVuY3Rpb24gZ2V0RGlzcGxheUZuKGRpc3BsYXkpIHsKKyAgICAgICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IF8uc3RyaW5naWZ5OworICAgICAgICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihkaXNwbGF5KSA/IGRpc3BsYXkgOiBkaXNwbGF5Rm47CisgICAgICAgICAgICBmdW5jdGlvbiBkaXNwbGF5Rm4ob2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtkaXNwbGF5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBnZXRUZW1wbGF0ZXModGVtcGxhdGVzLCBkaXNwbGF5Rm4pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgbm90Rm91bmQ6IHRlbXBsYXRlcy5ub3RGb3VuZCAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLm5vdEZvdW5kKSwKKyAgICAgICAgICAgICAgICBwZW5kaW5nOiB0ZW1wbGF0ZXMucGVuZGluZyAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLnBlbmRpbmcpLAorICAgICAgICAgICAgICAgIGhlYWRlcjogdGVtcGxhdGVzLmhlYWRlciAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLmhlYWRlciksCisgICAgICAgICAgICAgICAgZm9vdGVyOiB0ZW1wbGF0ZXMuZm9vdGVyICYmIF8udGVtcGxhdGlmeSh0ZW1wbGF0ZXMuZm9vdGVyKSwKKyAgICAgICAgICAgICAgICBzdWdnZXN0aW9uOiB0ZW1wbGF0ZXMuc3VnZ2VzdGlvbiB8fCBzdWdnZXN0aW9uVGVtcGxhdGUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmdW5jdGlvbiBzdWdnZXN0aW9uVGVtcGxhdGUoY29udGV4dCkgeworICAgICAgICAgICAgICAgIHJldHVybiAkKCI8ZGl2PiIpLnRleHQoZGlzcGxheUZuKGNvbnRleHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBpc1ZhbGlkTmFtZShzdHIpIHsKKyAgICAgICAgICAgIHJldHVybiAvXltfYS16QS1aMC05LV0rJC8udGVzdChzdHIpOworICAgICAgICB9CisgICAgfSgpOworICAgIHZhciBNZW51ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgZnVuY3Rpb24gTWVudShvLCB3d3cpIHsKKyAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKKyAgICAgICAgICAgIG8gPSBvIHx8IHt9OworICAgICAgICAgICAgaWYgKCFvLm5vZGUpIHsKKyAgICAgICAgICAgICAgICAkLmVycm9yKCJub2RlIGlzIHJlcXVpcmVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3d3cubWl4aW4odGhpcyk7CisgICAgICAgICAgICB0aGlzLiRub2RlID0gJChvLm5vZGUpOworICAgICAgICAgICAgdGhpcy5xdWVyeSA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmRhdGFzZXRzID0gXy5tYXAoby5kYXRhc2V0cywgaW5pdGlhbGl6ZURhdGFzZXQpOworICAgICAgICAgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZURhdGFzZXQob0RhdGFzZXQpIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoYXQuJG5vZGUuZmluZChvRGF0YXNldC5ub2RlKS5maXJzdCgpOworICAgICAgICAgICAgICAgIG9EYXRhc2V0Lm5vZGUgPSBub2RlLmxlbmd0aCA/IG5vZGUgOiAkKCI8ZGl2PiIpLmFwcGVuZFRvKHRoYXQuJG5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YXNldChvRGF0YXNldCwgd3d3KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfLm1peGluKE1lbnUucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIsIHsKKyAgICAgICAgICAgIF9vblNlbGVjdGFibGVDbGljazogZnVuY3Rpb24gb25TZWxlY3RhYmxlQ2xpY2soJGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoInNlbGVjdGFibGVDbGlja2VkIiwgJCgkZS5jdXJyZW50VGFyZ2V0KSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uUmVuZGVyZWQ6IGZ1bmN0aW9uIG9uUmVuZGVyZWQodHlwZSwgZGF0YXNldCwgc3VnZ2VzdGlvbnMsIGFzeW5jKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS50b2dnbGVDbGFzcyh0aGlzLmNsYXNzZXMuZW1wdHksIHRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJkYXRhc2V0UmVuZGVyZWQiLCBkYXRhc2V0LCBzdWdnZXN0aW9ucywgYXN5bmMpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9vbkNsZWFyZWQ6IGZ1bmN0aW9uIG9uQ2xlYXJlZCgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRub2RlLnRvZ2dsZUNsYXNzKHRoaXMuY2xhc3Nlcy5lbXB0eSwgdGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoImRhdGFzZXRDbGVhcmVkIik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX3Byb3BhZ2F0ZTogZnVuY3Rpb24gcHJvcGFnYXRlKCkgeworICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9hbGxEYXRhc2V0c0VtcHR5OiBmdW5jdGlvbiBhbGxEYXRhc2V0c0VtcHR5KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBfLmV2ZXJ5KHRoaXMuZGF0YXNldHMsIGlzRGF0YXNldEVtcHR5KTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0RhdGFzZXRFbXB0eShkYXRhc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX2dldFNlbGVjdGFibGVzOiBmdW5jdGlvbiBnZXRTZWxlY3RhYmxlcygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5maW5kKHRoaXMuc2VsZWN0b3JzLnNlbGVjdGFibGUpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9yZW1vdmVDdXJzb3I6IGZ1bmN0aW9uIF9yZW1vdmVDdXJzb3IoKSB7CisgICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlID0gdGhpcy5nZXRBY3RpdmVTZWxlY3RhYmxlKCk7CisgICAgICAgICAgICAgICAgJHNlbGVjdGFibGUgJiYgJHNlbGVjdGFibGUucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmN1cnNvcik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX2Vuc3VyZVZpc2libGU6IGZ1bmN0aW9uIGVuc3VyZVZpc2libGUoJGVsKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsVG9wLCBlbEJvdHRvbSwgbm9kZVNjcm9sbFRvcCwgbm9kZUhlaWdodDsKKyAgICAgICAgICAgICAgICBlbFRvcCA9ICRlbC5wb3NpdGlvbigpLnRvcDsKKyAgICAgICAgICAgICAgICBlbEJvdHRvbSA9IGVsVG9wICsgJGVsLm91dGVySGVpZ2h0KHRydWUpOworICAgICAgICAgICAgICAgIG5vZGVTY3JvbGxUb3AgPSB0aGlzLiRub2RlLnNjcm9sbFRvcCgpOworICAgICAgICAgICAgICAgIG5vZGVIZWlnaHQgPSB0aGlzLiRub2RlLmhlaWdodCgpICsgcGFyc2VJbnQodGhpcy4kbm9kZS5jc3MoInBhZGRpbmdUb3AiKSwgMTApICsgcGFyc2VJbnQodGhpcy4kbm9kZS5jc3MoInBhZGRpbmdCb3R0b20iKSwgMTApOworICAgICAgICAgICAgICAgIGlmIChlbFRvcCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5zY3JvbGxUb3Aobm9kZVNjcm9sbFRvcCArIGVsVG9wKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGVIZWlnaHQgPCBlbEJvdHRvbSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLiRub2RlLnNjcm9sbFRvcChub2RlU2Nyb2xsVG9wICsgKGVsQm90dG9tIC0gbm9kZUhlaWdodCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBiaW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIG9uU2VsZWN0YWJsZUNsaWNrOworICAgICAgICAgICAgICAgIG9uU2VsZWN0YWJsZUNsaWNrID0gXy5iaW5kKHRoaXMuX29uU2VsZWN0YWJsZUNsaWNrLCB0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRub2RlLm9uKCJjbGljay50dCIsIHRoaXMuc2VsZWN0b3JzLnNlbGVjdGFibGUsIG9uU2VsZWN0YWJsZUNsaWNrKTsKKyAgICAgICAgICAgICAgICBfLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhc2V0Lm9uU3luYygiYXN5bmNSZXF1ZXN0ZWQiLCB0aGF0Ll9wcm9wYWdhdGUsIHRoYXQpLm9uU3luYygiYXN5bmNDYW5jZWxlZCIsIHRoYXQuX3Byb3BhZ2F0ZSwgdGhhdCkub25TeW5jKCJhc3luY1JlY2VpdmVkIiwgdGhhdC5fcHJvcGFnYXRlLCB0aGF0KS5vblN5bmMoInJlbmRlcmVkIiwgdGhhdC5fb25SZW5kZXJlZCwgdGhhdCkub25TeW5jKCJjbGVhcmVkIiwgdGhhdC5fb25DbGVhcmVkLCB0aGF0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpc09wZW46IGZ1bmN0aW9uIGlzT3BlbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5oYXNDbGFzcyh0aGlzLmNsYXNzZXMub3Blbik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbigpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5vcGVuKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMub3Blbik7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ3Vyc29yKCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0TGFuZ3VhZ2VEaXJlY3Rpb246IGZ1bmN0aW9uIHNldExhbmd1YWdlRGlyZWN0aW9uKGRpcikgeworICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuYXR0cigiZGlyIiwgZGlyKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZWxlY3RhYmxlUmVsYXRpdmVUb0N1cnNvcjogZnVuY3Rpb24gc2VsZWN0YWJsZVJlbGF0aXZlVG9DdXJzb3IoZGVsdGEpIHsKKyAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGVzLCAkb2xkQ3Vyc29yLCBvbGRJbmRleCwgbmV3SW5kZXg7CisgICAgICAgICAgICAgICAgJG9sZEN1cnNvciA9IHRoaXMuZ2V0QWN0aXZlU2VsZWN0YWJsZSgpOworICAgICAgICAgICAgICAgICRzZWxlY3RhYmxlcyA9IHRoaXMuX2dldFNlbGVjdGFibGVzKCk7CisgICAgICAgICAgICAgICAgb2xkSW5kZXggPSAkb2xkQ3Vyc29yID8gJHNlbGVjdGFibGVzLmluZGV4KCRvbGRDdXJzb3IpIDogLTE7CisgICAgICAgICAgICAgICAgbmV3SW5kZXggPSBvbGRJbmRleCArIGRlbHRhOworICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gKG5ld0luZGV4ICsgMSkgJSAoJHNlbGVjdGFibGVzLmxlbmd0aCArIDEpIC0gMTsKKyAgICAgICAgICAgICAgICBuZXdJbmRleCA9IG5ld0luZGV4IDwgLTEgPyAkc2VsZWN0YWJsZXMubGVuZ3RoIC0gMSA6IG5ld0luZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBuZXdJbmRleCA9PT0gLTEgPyBudWxsIDogJHNlbGVjdGFibGVzLmVxKG5ld0luZGV4KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXRDdXJzb3I6IGZ1bmN0aW9uIHNldEN1cnNvcigkc2VsZWN0YWJsZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUN1cnNvcigpOworICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9ICRzZWxlY3RhYmxlICYmICRzZWxlY3RhYmxlLmZpcnN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgJHNlbGVjdGFibGUuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmN1cnNvcik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVZpc2libGUoJHNlbGVjdGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBnZXRTZWxlY3RhYmxlRGF0YTogZnVuY3Rpb24gZ2V0U2VsZWN0YWJsZURhdGEoJGVsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICRlbCAmJiAkZWwubGVuZ3RoID8gRGF0YXNldC5leHRyYWN0RGF0YSgkZWwpIDogbnVsbDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBnZXRBY3RpdmVTZWxlY3RhYmxlOiBmdW5jdGlvbiBnZXRBY3RpdmVTZWxlY3RhYmxlKCkgeworICAgICAgICAgICAgICAgIHZhciAkc2VsZWN0YWJsZSA9IHRoaXMuX2dldFNlbGVjdGFibGVzKCkuZmlsdGVyKHRoaXMuc2VsZWN0b3JzLmN1cnNvcikuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJHNlbGVjdGFibGUubGVuZ3RoID8gJHNlbGVjdGFibGUgOiBudWxsOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGdldFRvcFNlbGVjdGFibGU6IGZ1bmN0aW9uIGdldFRvcFNlbGVjdGFibGUoKSB7CisgICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlID0gdGhpcy5fZ2V0U2VsZWN0YWJsZXMoKS5maXJzdCgpOworICAgICAgICAgICAgICAgIHJldHVybiAkc2VsZWN0YWJsZS5sZW5ndGggPyAkc2VsZWN0YWJsZSA6IG51bGw7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUocXVlcnkpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXNWYWxpZFVwZGF0ZSA9IHF1ZXJ5ICE9PSB0aGlzLnF1ZXJ5OworICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkVXBkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeTsKKyAgICAgICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIHVwZGF0ZURhdGFzZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFVwZGF0ZTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0KGRhdGFzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YXNldC51cGRhdGUocXVlcnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24gZW1wdHkoKSB7CisgICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIGNsZWFyRGF0YXNldCk7CisgICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IG51bGw7CisgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZW1wdHkpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyRGF0YXNldChkYXRhc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRub2RlLm9mZigiLnR0Iik7CisgICAgICAgICAgICAgICAgdGhpcy4kbm9kZSA9ICQoIjxkaXY+Iik7CisgICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIGRlc3Ryb3lEYXRhc2V0KTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZXN0cm95RGF0YXNldChkYXRhc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuZGVzdHJveSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBNZW51OworICAgIH0oKTsKKyAgICB2YXIgRGVmYXVsdE1lbnUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgcyA9IE1lbnUucHJvdG90eXBlOworICAgICAgICBmdW5jdGlvbiBEZWZhdWx0TWVudSgpIHsKKyAgICAgICAgICAgIE1lbnUuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKKyAgICAgICAgfQorICAgICAgICBfLm1peGluKERlZmF1bHRNZW51LnByb3RvdHlwZSwgTWVudS5wcm90b3R5cGUsIHsKKyAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7CisgICAgICAgICAgICAgICAgIXRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSAmJiB0aGlzLl9zaG93KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHMub3Blbi5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHMuY2xvc2UuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25SZW5kZXJlZDogZnVuY3Rpb24gb25SZW5kZXJlZCgpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbigpICYmIHRoaXMuX3Nob3coKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHMuX29uUmVuZGVyZWQuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25DbGVhcmVkOiBmdW5jdGlvbiBvbkNsZWFyZWQoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW4oKSAmJiB0aGlzLl9zaG93KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBzLl9vbkNsZWFyZWQuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXRMYW5ndWFnZURpcmVjdGlvbjogZnVuY3Rpb24gc2V0TGFuZ3VhZ2VEaXJlY3Rpb24oZGlyKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5jc3MoZGlyID09PSAibHRyIiA/IHRoaXMuY3NzLmx0ciA6IHRoaXMuY3NzLnJ0bCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHMuc2V0TGFuZ3VhZ2VEaXJlY3Rpb24uYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfaGlkZTogZnVuY3Rpb24gaGlkZSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmhpZGUoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfc2hvdzogZnVuY3Rpb24gc2hvdygpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmNzcygiZGlzcGxheSIsICJibG9jayIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIERlZmF1bHRNZW51OworICAgIH0oKTsKKyAgICB2YXIgVHlwZWFoZWFkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgZnVuY3Rpb24gVHlwZWFoZWFkKG8sIHd3dykgeworICAgICAgICAgICAgdmFyIG9uRm9jdXNlZCwgb25CbHVycmVkLCBvbkVudGVyS2V5ZWQsIG9uVGFiS2V5ZWQsIG9uRXNjS2V5ZWQsIG9uVXBLZXllZCwgb25Eb3duS2V5ZWQsIG9uTGVmdEtleWVkLCBvblJpZ2h0S2V5ZWQsIG9uUXVlcnlDaGFuZ2VkLCBvbldoaXRlc3BhY2VDaGFuZ2VkOworICAgICAgICAgICAgbyA9IG8gfHwge307CisgICAgICAgICAgICBpZiAoIW8uaW5wdXQpIHsKKyAgICAgICAgICAgICAgICAkLmVycm9yKCJtaXNzaW5nIGlucHV0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW8ubWVudSkgeworICAgICAgICAgICAgICAgICQuZXJyb3IoIm1pc3NpbmcgbWVudSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFvLmV2ZW50QnVzKSB7CisgICAgICAgICAgICAgICAgJC5lcnJvcigibWlzc2luZyBldmVudCBidXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHd3dy5taXhpbih0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMgPSBvLmV2ZW50QnVzOworICAgICAgICAgICAgdGhpcy5taW5MZW5ndGggPSBfLmlzTnVtYmVyKG8ubWluTGVuZ3RoKSA/IG8ubWluTGVuZ3RoIDogMTsKKyAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBvLmlucHV0OworICAgICAgICAgICAgdGhpcy5tZW51ID0gby5tZW51OworICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLmlucHV0Lmhhc0ZvY3VzKCkgJiYgdGhpcy5hY3RpdmF0ZSgpOworICAgICAgICAgICAgdGhpcy5kaXIgPSB0aGlzLmlucHV0LmdldExhbmdEaXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2hhY2tzKCk7CisgICAgICAgICAgICB0aGlzLm1lbnUuYmluZCgpLm9uU3luYygic2VsZWN0YWJsZUNsaWNrZWQiLCB0aGlzLl9vblNlbGVjdGFibGVDbGlja2VkLCB0aGlzKS5vblN5bmMoImFzeW5jUmVxdWVzdGVkIiwgdGhpcy5fb25Bc3luY1JlcXVlc3RlZCwgdGhpcykub25TeW5jKCJhc3luY0NhbmNlbGVkIiwgdGhpcy5fb25Bc3luY0NhbmNlbGVkLCB0aGlzKS5vblN5bmMoImFzeW5jUmVjZWl2ZWQiLCB0aGlzLl9vbkFzeW5jUmVjZWl2ZWQsIHRoaXMpLm9uU3luYygiZGF0YXNldFJlbmRlcmVkIiwgdGhpcy5fb25EYXRhc2V0UmVuZGVyZWQsIHRoaXMpLm9uU3luYygiZGF0YXNldENsZWFyZWQiLCB0aGlzLl9vbkRhdGFzZXRDbGVhcmVkLCB0aGlzKTsKKyAgICAgICAgICAgIG9uRm9jdXNlZCA9IGModGhpcywgImFjdGl2YXRlIiwgIm9wZW4iLCAiX29uRm9jdXNlZCIpOworICAgICAgICAgICAgb25CbHVycmVkID0gYyh0aGlzLCAiZGVhY3RpdmF0ZSIsICJfb25CbHVycmVkIik7CisgICAgICAgICAgICBvbkVudGVyS2V5ZWQgPSBjKHRoaXMsICJpc0FjdGl2ZSIsICJpc09wZW4iLCAiX29uRW50ZXJLZXllZCIpOworICAgICAgICAgICAgb25UYWJLZXllZCA9IGModGhpcywgImlzQWN0aXZlIiwgImlzT3BlbiIsICJfb25UYWJLZXllZCIpOworICAgICAgICAgICAgb25Fc2NLZXllZCA9IGModGhpcywgImlzQWN0aXZlIiwgIl9vbkVzY0tleWVkIik7CisgICAgICAgICAgICBvblVwS2V5ZWQgPSBjKHRoaXMsICJpc0FjdGl2ZSIsICJvcGVuIiwgIl9vblVwS2V5ZWQiKTsKKyAgICAgICAgICAgIG9uRG93bktleWVkID0gYyh0aGlzLCAiaXNBY3RpdmUiLCAib3BlbiIsICJfb25Eb3duS2V5ZWQiKTsKKyAgICAgICAgICAgIG9uTGVmdEtleWVkID0gYyh0aGlzLCAiaXNBY3RpdmUiLCAiaXNPcGVuIiwgIl9vbkxlZnRLZXllZCIpOworICAgICAgICAgICAgb25SaWdodEtleWVkID0gYyh0aGlzLCAiaXNBY3RpdmUiLCAiaXNPcGVuIiwgIl9vblJpZ2h0S2V5ZWQiKTsKKyAgICAgICAgICAgIG9uUXVlcnlDaGFuZ2VkID0gYyh0aGlzLCAiX29wZW5JZkFjdGl2ZSIsICJfb25RdWVyeUNoYW5nZWQiKTsKKyAgICAgICAgICAgIG9uV2hpdGVzcGFjZUNoYW5nZWQgPSBjKHRoaXMsICJfb3BlbklmQWN0aXZlIiwgIl9vbldoaXRlc3BhY2VDaGFuZ2VkIik7CisgICAgICAgICAgICB0aGlzLmlucHV0LmJpbmQoKS5vblN5bmMoImZvY3VzZWQiLCBvbkZvY3VzZWQsIHRoaXMpLm9uU3luYygiYmx1cnJlZCIsIG9uQmx1cnJlZCwgdGhpcykub25TeW5jKCJlbnRlcktleWVkIiwgb25FbnRlcktleWVkLCB0aGlzKS5vblN5bmMoInRhYktleWVkIiwgb25UYWJLZXllZCwgdGhpcykub25TeW5jKCJlc2NLZXllZCIsIG9uRXNjS2V5ZWQsIHRoaXMpLm9uU3luYygidXBLZXllZCIsIG9uVXBLZXllZCwgdGhpcykub25TeW5jKCJkb3duS2V5ZWQiLCBvbkRvd25LZXllZCwgdGhpcykub25TeW5jKCJsZWZ0S2V5ZWQiLCBvbkxlZnRLZXllZCwgdGhpcykub25TeW5jKCJyaWdodEtleWVkIiwgb25SaWdodEtleWVkLCB0aGlzKS5vblN5bmMoInF1ZXJ5Q2hhbmdlZCIsIG9uUXVlcnlDaGFuZ2VkLCB0aGlzKS5vblN5bmMoIndoaXRlc3BhY2VDaGFuZ2VkIiwgb25XaGl0ZXNwYWNlQ2hhbmdlZCwgdGhpcykub25TeW5jKCJsYW5nRGlyQ2hhbmdlZCIsIHRoaXMuX29uTGFuZ0RpckNoYW5nZWQsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIF8ubWl4aW4oVHlwZWFoZWFkLnByb3RvdHlwZSwgeworICAgICAgICAgICAgX2hhY2tzOiBmdW5jdGlvbiBoYWNrcygpIHsKKyAgICAgICAgICAgICAgICB2YXIgJGlucHV0LCAkbWVudTsKKyAgICAgICAgICAgICAgICAkaW5wdXQgPSB0aGlzLmlucHV0LiRpbnB1dCB8fCAkKCI8ZGl2PiIpOworICAgICAgICAgICAgICAgICRtZW51ID0gdGhpcy5tZW51LiRub2RlIHx8ICQoIjxkaXY+Iik7CisgICAgICAgICAgICAgICAgJGlucHV0Lm9uKCJibHVyLnR0IiwgZnVuY3Rpb24oJGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSwgaXNBY3RpdmUsIGhhc0FjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSAkbWVudS5pcyhhY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBoYXNBY3RpdmUgPSAkbWVudS5oYXMoYWN0aXZlKS5sZW5ndGggPiAwOworICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc01zaWUoKSAmJiAoaXNBY3RpdmUgfHwgaGFzQWN0aXZlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgJGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgJG1lbnUub24oIm1vdXNlZG93bi50dCIsIGZ1bmN0aW9uKCRlKSB7CisgICAgICAgICAgICAgICAgICAgICRlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uU2VsZWN0YWJsZUNsaWNrZWQ6IGZ1bmN0aW9uIG9uU2VsZWN0YWJsZUNsaWNrZWQodHlwZSwgJGVsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJGVsKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25EYXRhc2V0Q2xlYXJlZDogZnVuY3Rpb24gb25EYXRhc2V0Q2xlYXJlZCgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uRGF0YXNldFJlbmRlcmVkOiBmdW5jdGlvbiBvbkRhdGFzZXRSZW5kZXJlZCh0eXBlLCBkYXRhc2V0LCBzdWdnZXN0aW9ucywgYXN5bmMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7CisgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJyZW5kZXIiLCBzdWdnZXN0aW9ucywgYXN5bmMsIGRhdGFzZXQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9vbkFzeW5jUmVxdWVzdGVkOiBmdW5jdGlvbiBvbkFzeW5jUmVxdWVzdGVkKHR5cGUsIGRhdGFzZXQsIHF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJhc3luY3JlcXVlc3QiLCBxdWVyeSwgZGF0YXNldCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uQXN5bmNDYW5jZWxlZDogZnVuY3Rpb24gb25Bc3luY0NhbmNlbGVkKHR5cGUsIGRhdGFzZXQsIHF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJhc3luY2NhbmNlbCIsIHF1ZXJ5LCBkYXRhc2V0KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25Bc3luY1JlY2VpdmVkOiBmdW5jdGlvbiBvbkFzeW5jUmVjZWl2ZWQodHlwZSwgZGF0YXNldCwgcXVlcnkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoImFzeW5jcmVjZWl2ZSIsIHF1ZXJ5LCBkYXRhc2V0KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25Gb2N1c2VkOiBmdW5jdGlvbiBvbkZvY3VzZWQoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbWluTGVuZ3RoTWV0KCkgJiYgdGhpcy5tZW51LnVwZGF0ZSh0aGlzLmlucHV0LmdldFF1ZXJ5KCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9vbkJsdXJyZWQ6IGZ1bmN0aW9uIG9uQmx1cnJlZCgpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dC5oYXNRdWVyeUNoYW5nZWRTaW5jZUxhc3RGb2N1cygpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcigiY2hhbmdlIiwgdGhpcy5pbnB1dC5nZXRRdWVyeSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uRW50ZXJLZXllZDogZnVuY3Rpb24gb25FbnRlcktleWVkKHR5cGUsICRlKSB7CisgICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlOworICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRBY3RpdmVTZWxlY3RhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9vblRhYktleWVkOiBmdW5jdGlvbiBvblRhYktleWVkKHR5cGUsICRlKSB7CisgICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlOworICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRBY3RpdmVTZWxlY3RhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRUb3BTZWxlY3RhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGUoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9vbkVzY0tleWVkOiBmdW5jdGlvbiBvbkVzY0tleWVkKCkgeworICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25VcEtleWVkOiBmdW5jdGlvbiBvblVwS2V5ZWQoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yKC0xKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25Eb3duS2V5ZWQ6IGZ1bmN0aW9uIG9uRG93bktleWVkKCkgeworICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvcigrMSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uTGVmdEtleWVkOiBmdW5jdGlvbiBvbkxlZnRLZXllZCgpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgPT09ICJydGwiICYmIHRoaXMuaW5wdXQuaXNDdXJzb3JBdEVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlKHRoaXMubWVudS5nZXRUb3BTZWxlY3RhYmxlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25SaWdodEtleWVkOiBmdW5jdGlvbiBvblJpZ2h0S2V5ZWQoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyID09PSAibHRyIiAmJiB0aGlzLmlucHV0LmlzQ3Vyc29yQXRFbmQoKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSh0aGlzLm1lbnUuZ2V0VG9wU2VsZWN0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX29uUXVlcnlDaGFuZ2VkOiBmdW5jdGlvbiBvblF1ZXJ5Q2hhbmdlZChlLCBxdWVyeSkgeworICAgICAgICAgICAgICAgIHRoaXMuX21pbkxlbmd0aE1ldChxdWVyeSkgPyB0aGlzLm1lbnUudXBkYXRlKHF1ZXJ5KSA6IHRoaXMubWVudS5lbXB0eSgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9vbldoaXRlc3BhY2VDaGFuZ2VkOiBmdW5jdGlvbiBvbldoaXRlc3BhY2VDaGFuZ2VkKCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfb25MYW5nRGlyQ2hhbmdlZDogZnVuY3Rpb24gb25MYW5nRGlyQ2hhbmdlZChlLCBkaXIpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgIT09IGRpcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciA9IGRpcjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51LnNldExhbmd1YWdlRGlyZWN0aW9uKGRpcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9vcGVuSWZBY3RpdmU6IGZ1bmN0aW9uIG9wZW5JZkFjdGl2ZSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlKCkgJiYgdGhpcy5vcGVuKCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX21pbkxlbmd0aE1ldDogZnVuY3Rpb24gbWluTGVuZ3RoTWV0KHF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBfLmlzU3RyaW5nKHF1ZXJ5KSA/IHF1ZXJ5IDogdGhpcy5pbnB1dC5nZXRRdWVyeSgpIHx8ICIiOworICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeS5sZW5ndGggPj0gdGhpcy5taW5MZW5ndGg7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX3VwZGF0ZUhpbnQ6IGZ1bmN0aW9uIHVwZGF0ZUhpbnQoKSB7CisgICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlLCBkYXRhLCB2YWwsIHF1ZXJ5LCBlc2NhcGVkUXVlcnksIGZyb250TWF0Y2hSZWdFeCwgbWF0Y2g7CisgICAgICAgICAgICAgICAgJHNlbGVjdGFibGUgPSB0aGlzLm1lbnUuZ2V0VG9wU2VsZWN0YWJsZSgpOworICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLm1lbnUuZ2V0U2VsZWN0YWJsZURhdGEoJHNlbGVjdGFibGUpOworICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuaW5wdXQuZ2V0SW5wdXRWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChkYXRhICYmICFfLmlzQmxhbmtTdHJpbmcodmFsKSAmJiAhdGhpcy5pbnB1dC5oYXNPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gSW5wdXQubm9ybWFsaXplUXVlcnkodmFsKTsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZFF1ZXJ5ID0gXy5lc2NhcGVSZWdFeENoYXJzKHF1ZXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgZnJvbnRNYXRjaFJlZ0V4ID0gbmV3IFJlZ0V4cCgiXig/OiIgKyBlc2NhcGVkUXVlcnkgKyAiKSguKyQpIiwgImkiKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmcm9udE1hdGNoUmVnRXguZXhlYyhkYXRhLnZhbCk7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoICYmIHRoaXMuaW5wdXQuc2V0SGludCh2YWwgKyBtYXRjaFsxXSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5jbGVhckhpbnQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaXNFbmFibGVkOiBmdW5jdGlvbiBpc0VuYWJsZWQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlZDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIGVuYWJsZSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uIGlzQWN0aXZlKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24gYWN0aXZhdGUoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRW5hYmxlZCgpIHx8IHRoaXMuZXZlbnRCdXMuYmVmb3JlKCJhY3RpdmUiKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoImFjdGl2ZSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVhY3RpdmF0ZTogZnVuY3Rpb24gZGVhY3RpdmF0ZSgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRCdXMuYmVmb3JlKCJpZGxlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJpZGxlIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpc09wZW46IGZ1bmN0aW9uIGlzT3BlbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZW51LmlzT3BlbigpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpICYmICF0aGlzLmV2ZW50QnVzLmJlZm9yZSgib3BlbiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubWVudS5vcGVuKCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJvcGVuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3BlbigpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4oKSAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoImNsb3NlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51LmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuY2xlYXJIaW50KCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQucmVzZXRJbnB1dFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcigiY2xvc2UiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzT3BlbigpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldFZhbDogZnVuY3Rpb24gc2V0VmFsKHZhbCkgeworICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0UXVlcnkoXy50b1N0cih2YWwpKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBnZXRWYWw6IGZ1bmN0aW9uIGdldFZhbCgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5nZXRRdWVyeSgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KCRzZWxlY3RhYmxlKSB7CisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLm1lbnUuZ2V0U2VsZWN0YWJsZURhdGEoJHNlbGVjdGFibGUpOworICAgICAgICAgICAgICAgIGlmIChkYXRhICYmICF0aGlzLmV2ZW50QnVzLmJlZm9yZSgic2VsZWN0IiwgZGF0YS5vYmopKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0UXVlcnkoZGF0YS52YWwsIHRydWUpOworICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoInNlbGVjdCIsIGRhdGEub2JqKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogZnVuY3Rpb24gYXV0b2NvbXBsZXRlKCRzZWxlY3RhYmxlKSB7CisgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5LCBkYXRhLCBpc1ZhbGlkOworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5pbnB1dC5nZXRRdWVyeSgpOworICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLm1lbnUuZ2V0U2VsZWN0YWJsZURhdGEoJHNlbGVjdGFibGUpOworICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBkYXRhICYmIHF1ZXJ5ICE9PSBkYXRhLnZhbDsKKyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoImF1dG9jb21wbGV0ZSIsIGRhdGEub2JqKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFF1ZXJ5KGRhdGEudmFsKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJhdXRvY29tcGxldGUiLCBkYXRhLm9iaik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbW92ZUN1cnNvcjogZnVuY3Rpb24gbW92ZUN1cnNvcihkZWx0YSkgeworICAgICAgICAgICAgICAgIHZhciBxdWVyeSwgJGNhbmRpZGF0ZSwgZGF0YSwgcGF5bG9hZCwgY2FuY2VsTW92ZTsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IHRoaXMuaW5wdXQuZ2V0UXVlcnkoKTsKKyAgICAgICAgICAgICAgICAkY2FuZGlkYXRlID0gdGhpcy5tZW51LnNlbGVjdGFibGVSZWxhdGl2ZVRvQ3Vyc29yKGRlbHRhKTsKKyAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5tZW51LmdldFNlbGVjdGFibGVEYXRhKCRjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIHBheWxvYWQgPSBkYXRhID8gZGF0YS5vYmogOiBudWxsOworICAgICAgICAgICAgICAgIGNhbmNlbE1vdmUgPSB0aGlzLl9taW5MZW5ndGhNZXQoKSAmJiB0aGlzLm1lbnUudXBkYXRlKHF1ZXJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbE1vdmUgJiYgIXRoaXMuZXZlbnRCdXMuYmVmb3JlKCJjdXJzb3JjaGFuZ2UiLCBwYXlsb2FkKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnUuc2V0Q3Vyc29yKCRjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5zZXRJbnB1dFZhbHVlKGRhdGEudmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQucmVzZXRJbnB1dFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJjdXJzb3JjaGFuZ2UiLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkgeworICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpOworICAgICAgICAgICAgICAgIHRoaXMubWVudS5kZXN0cm95KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gVHlwZWFoZWFkOworICAgICAgICBmdW5jdGlvbiBjKGN0eCkgeworICAgICAgICAgICAgdmFyIG1ldGhvZHMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgXy5lYWNoKG1ldGhvZHMsIGZ1bmN0aW9uKG1ldGhvZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4W21ldGhvZF0uYXBwbHkoY3R4LCBhcmdzKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9KCk7CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHZhciBvbGQsIGtleXMsIG1ldGhvZHM7CisgICAgICAgIG9sZCA9ICQuZm4udHlwZWFoZWFkOworICAgICAgICBrZXlzID0geworICAgICAgICAgICAgd3d3OiAidHQtd3d3IiwKKyAgICAgICAgICAgIGF0dHJzOiAidHQtYXR0cnMiLAorICAgICAgICAgICAgdHlwZWFoZWFkOiAidHQtdHlwZWFoZWFkIgorICAgICAgICB9OworICAgICAgICBtZXRob2RzID0geworICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShvLCBkYXRhc2V0cykgeworICAgICAgICAgICAgICAgIHZhciB3d3c7CisgICAgICAgICAgICAgICAgZGF0YXNldHMgPSBfLmlzQXJyYXkoZGF0YXNldHMpID8gZGF0YXNldHMgOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisgICAgICAgICAgICAgICAgbyA9IG8gfHwge307CisgICAgICAgICAgICAgICAgd3d3ID0gV1dXKG8uY2xhc3NOYW1lcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChhdHRhY2gpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCwgJHdyYXBwZXIsICRoaW50LCAkbWVudSwgZGVmYXVsdEhpbnQsIGRlZmF1bHRNZW51LCBldmVudEJ1cywgaW5wdXQsIG1lbnUsIHR5cGVhaGVhZCwgTWVudUNvbnN0cnVjdG9yOworICAgICAgICAgICAgICAgICAgICBfLmVhY2goZGF0YXNldHMsIGZ1bmN0aW9uKGQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuaGlnaGxpZ2h0ID0gISFvLmhpZ2hsaWdodDsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICRpbnB1dCA9ICQodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICR3cmFwcGVyID0gJCh3d3cuaHRtbC53cmFwcGVyKTsKKyAgICAgICAgICAgICAgICAgICAgJGhpbnQgPSAkZWxPck51bGwoby5oaW50KTsKKyAgICAgICAgICAgICAgICAgICAgJG1lbnUgPSAkZWxPck51bGwoby5tZW51KTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEhpbnQgPSBvLmhpbnQgIT09IGZhbHNlICYmICEkaGludDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lbnUgPSBvLm1lbnUgIT09IGZhbHNlICYmICEkbWVudTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEhpbnQgJiYgKCRoaW50ID0gYnVpbGRIaW50RnJvbUlucHV0KCRpbnB1dCwgd3d3KSk7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZW51ICYmICgkbWVudSA9ICQod3d3Lmh0bWwubWVudSkuY3NzKHd3dy5jc3MubWVudSkpOworICAgICAgICAgICAgICAgICAgICAkaGludCAmJiAkaGludC52YWwoIiIpOworICAgICAgICAgICAgICAgICAgICAkaW5wdXQgPSBwcmVwSW5wdXQoJGlucHV0LCB3d3cpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdEhpbnQgfHwgZGVmYXVsdE1lbnUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICR3cmFwcGVyLmNzcyh3d3cuY3NzLndyYXBwZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LmNzcyhkZWZhdWx0SGludCA/IHd3dy5jc3MuaW5wdXQgOiB3d3cuY3NzLmlucHV0V2l0aE5vSGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQud3JhcCgkd3JhcHBlcikucGFyZW50KCkucHJlcGVuZChkZWZhdWx0SGludCA/ICRoaW50IDogbnVsbCkuYXBwZW5kKGRlZmF1bHRNZW51ID8gJG1lbnUgOiBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBNZW51Q29uc3RydWN0b3IgPSBkZWZhdWx0TWVudSA/IERlZmF1bHRNZW51IDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXMgPSBuZXcgRXZlbnRCdXMoeworICAgICAgICAgICAgICAgICAgICAgICAgZWw6ICRpbnB1dAorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcgSW5wdXQoeworICAgICAgICAgICAgICAgICAgICAgICAgaGludDogJGhpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogJGlucHV0CisgICAgICAgICAgICAgICAgICAgIH0sIHd3dyk7CisgICAgICAgICAgICAgICAgICAgIG1lbnUgPSBuZXcgTWVudUNvbnN0cnVjdG9yKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6ICRtZW51LAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldHM6IGRhdGFzZXRzCisgICAgICAgICAgICAgICAgICAgIH0sIHd3dyk7CisgICAgICAgICAgICAgICAgICAgIHR5cGVhaGVhZCA9IG5ldyBUeXBlYWhlYWQoeworICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgbWVudTogbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzOiBldmVudEJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogby5taW5MZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgfSwgd3d3KTsKKyAgICAgICAgICAgICAgICAgICAgJGlucHV0LmRhdGEoa2V5cy53d3csIHd3dyk7CisgICAgICAgICAgICAgICAgICAgICRpbnB1dC5kYXRhKGtleXMudHlwZWFoZWFkLCB0eXBlYWhlYWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpc0VuYWJsZWQ6IGZ1bmN0aW9uIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgICAgICAgICB2YXIgZW5hYmxlZDsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcy5maXJzdCgpLCBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgPSB0LmlzRW5hYmxlZCgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBlbmFibGVkOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkgeworICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgICAgICAgIHQuZW5hYmxlKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkgeworICAgICAgICAgICAgICAgICAgICB0LmRpc2FibGUoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpc0FjdGl2ZTogZnVuY3Rpb24gaXNBY3RpdmUoKSB7CisgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZTsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcy5maXJzdCgpLCBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IHQuaXNBY3RpdmUoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbiBhY3RpdmF0ZSgpIHsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkgeworICAgICAgICAgICAgICAgICAgICB0LmFjdGl2YXRlKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVhY3RpdmF0ZTogZnVuY3Rpb24gZGVhY3RpdmF0ZSgpIHsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkgeworICAgICAgICAgICAgICAgICAgICB0LmRlYWN0aXZhdGUoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpc09wZW46IGZ1bmN0aW9uIGlzT3BlbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3BlbjsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcy5maXJzdCgpLCBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgICAgICAgIG9wZW4gPSB0LmlzT3BlbigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBvcGVuOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7CisgICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgdC5vcGVuKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkgeworICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgICAgICAgIHQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdChlbCkgeworICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2UsICRlbCA9ICQoZWwpOworICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHQuc2VsZWN0KCRlbCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBmdW5jdGlvbiBhdXRvY29tcGxldGUoZWwpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlLCAkZWwgPSAkKGVsKTsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcy5maXJzdCgpLCBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0LmF1dG9jb21wbGV0ZSgkZWwpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG1vdmVDdXJzb3I6IGZ1bmN0aW9uIG1vdmVDdXJzb2UoZGVsdGEpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHQubW92ZUN1cnNvcihkZWx0YSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdmFsOiBmdW5jdGlvbiB2YWwobmV3VmFsKSB7CisgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5OworICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICB0dEVhY2godGhpcy5maXJzdCgpLCBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IHQuZ2V0VmFsKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsKG5ld1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHsKKyAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odHlwZWFoZWFkLCAkaW5wdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0KCRpbnB1dCk7CisgICAgICAgICAgICAgICAgICAgIHR5cGVhaGVhZC5kZXN0cm95KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgICQuZm4udHlwZWFoZWFkID0gZnVuY3Rpb24obWV0aG9kKSB7CisgICAgICAgICAgICBpZiAobWV0aG9kc1ttZXRob2RdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHNbbWV0aG9kXS5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgICQuZm4udHlwZWFoZWFkLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiBub0NvbmZsaWN0KCkgeworICAgICAgICAgICAgJC5mbi50eXBlYWhlYWQgPSBvbGQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfTsKKyAgICAgICAgZnVuY3Rpb24gdHRFYWNoKCRlbHMsIGZuKSB7CisgICAgICAgICAgICAkZWxzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyICRpbnB1dCA9ICQodGhpcyksIHR5cGVhaGVhZDsKKyAgICAgICAgICAgICAgICAodHlwZWFoZWFkID0gJGlucHV0LmRhdGEoa2V5cy50eXBlYWhlYWQpKSAmJiBmbih0eXBlYWhlYWQsICRpbnB1dCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBidWlsZEhpbnRGcm9tSW5wdXQoJGlucHV0LCB3d3cpIHsKKyAgICAgICAgICAgIHJldHVybiAkaW5wdXQuY2xvbmUoKS5hZGRDbGFzcyh3d3cuY2xhc3Nlcy5oaW50KS5yZW1vdmVEYXRhKCkuY3NzKHd3dy5jc3MuaGludCkuY3NzKGdldEJhY2tncm91bmRTdHlsZXMoJGlucHV0KSkucHJvcCgicmVhZG9ubHkiLCB0cnVlKS5yZW1vdmVBdHRyKCJpZCBuYW1lIHBsYWNlaG9sZGVyIHJlcXVpcmVkIikuYXR0cih7CisgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiAib2ZmIiwKKyAgICAgICAgICAgICAgICBzcGVsbGNoZWNrOiAiZmFsc2UiLAorICAgICAgICAgICAgICAgIHRhYmluZGV4OiAtMQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gcHJlcElucHV0KCRpbnB1dCwgd3d3KSB7CisgICAgICAgICAgICAkaW5wdXQuZGF0YShrZXlzLmF0dHJzLCB7CisgICAgICAgICAgICAgICAgZGlyOiAkaW5wdXQuYXR0cigiZGlyIiksCisgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiAkaW5wdXQuYXR0cigiYXV0b2NvbXBsZXRlIiksCisgICAgICAgICAgICAgICAgc3BlbGxjaGVjazogJGlucHV0LmF0dHIoInNwZWxsY2hlY2siKSwKKyAgICAgICAgICAgICAgICBzdHlsZTogJGlucHV0LmF0dHIoInN0eWxlIikKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgJGlucHV0LmFkZENsYXNzKHd3dy5jbGFzc2VzLmlucHV0KS5hdHRyKHsKKyAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6ICJvZmYiLAorICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s6IGZhbHNlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgISRpbnB1dC5hdHRyKCJkaXIiKSAmJiAkaW5wdXQuYXR0cigiZGlyIiwgImF1dG8iKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgICAgICAgICByZXR1cm4gJGlucHV0OworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdldEJhY2tncm91bmRTdHlsZXMoJGVsKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGJhY2tncm91bmRBdHRhY2htZW50OiAkZWwuY3NzKCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiKSwKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ2xpcDogJGVsLmNzcygiYmFja2dyb3VuZC1jbGlwIiksCisgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAkZWwuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIiksCisgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiAkZWwuY3NzKCJiYWNrZ3JvdW5kLWltYWdlIiksCisgICAgICAgICAgICAgICAgYmFja2dyb3VuZE9yaWdpbjogJGVsLmNzcygiYmFja2dyb3VuZC1vcmlnaW4iKSwKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246ICRlbC5jc3MoImJhY2tncm91bmQtcG9zaXRpb24iKSwKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAkZWwuY3NzKCJiYWNrZ3JvdW5kLXJlcGVhdCIpLAorICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAkZWwuY3NzKCJiYWNrZ3JvdW5kLXNpemUiKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiByZXZlcnQoJGlucHV0KSB7CisgICAgICAgICAgICB2YXIgd3d3LCAkd3JhcHBlcjsKKyAgICAgICAgICAgIHd3dyA9ICRpbnB1dC5kYXRhKGtleXMud3d3KTsKKyAgICAgICAgICAgICR3cmFwcGVyID0gJGlucHV0LnBhcmVudCgpLmZpbHRlcih3d3cuc2VsZWN0b3JzLndyYXBwZXIpOworICAgICAgICAgICAgXy5lYWNoKCRpbnB1dC5kYXRhKGtleXMuYXR0cnMpLCBmdW5jdGlvbih2YWwsIGtleSkgeworICAgICAgICAgICAgICAgIF8uaXNVbmRlZmluZWQodmFsKSA/ICRpbnB1dC5yZW1vdmVBdHRyKGtleSkgOiAkaW5wdXQuYXR0cihrZXksIHZhbCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICRpbnB1dC5yZW1vdmVEYXRhKGtleXMudHlwZWFoZWFkKS5yZW1vdmVEYXRhKGtleXMud3d3KS5yZW1vdmVEYXRhKGtleXMuYXR0cikucmVtb3ZlQ2xhc3Mod3d3LmNsYXNzZXMuaW5wdXQpOworICAgICAgICAgICAgaWYgKCR3cmFwcGVyLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICRpbnB1dC5kZXRhY2goKS5pbnNlcnRBZnRlcigkd3JhcHBlcik7CisgICAgICAgICAgICAgICAgJHdyYXBwZXIucmVtb3ZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gJGVsT3JOdWxsKG9iaikgeworICAgICAgICAgICAgdmFyIGlzVmFsaWQsICRlbDsKKyAgICAgICAgICAgIGlzVmFsaWQgPSBfLmlzSlF1ZXJ5KG9iaikgfHwgXy5pc0VsZW1lbnQob2JqKTsKKyAgICAgICAgICAgICRlbCA9IGlzVmFsaWQgPyAkKG9iaikuZmlyc3QoKSA6IFtdOworICAgICAgICAgICAgcmV0dXJuICRlbC5sZW5ndGggPyAkZWwgOiBudWxsOworICAgICAgICB9CisgICAgfSkoKTsKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVmaWx0ZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlZmlsdGVyLnB5CmluZGV4IDlkMTViY2YuLjY1NDU0ZTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVmaWx0ZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90YWJsZWZpbHRlci5weQpAQCAtMjg2LDcgKzI4Niw3IEBACiAgICAgZGVmIHRvX2pzb24oc2VsZiwgcXVlcnlzZXQpOgogICAgICAgICBkYXRhID0ge30KIAotICAgICAgICBmb3IgZmlsdGVyX25hbWUsIHRhYmxlX2ZpbHRlciBpbiBzZWxmLl9fZmlsdGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGZpbHRlcl9uYW1lLCB0YWJsZV9maWx0ZXIgaW4gc2VsZi5fX2ZpbHRlcnMuaXRlbXMoKToKICAgICAgICAgICAgIGRhdGFbZmlsdGVyX25hbWVdID0gdGFibGVfZmlsdGVyLnRvX2pzb24oKQogCiAgICAgICAgIHJldHVybiBkYXRhCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVzLnB5CmluZGV4IDJjYzJmNGUuLmUyZDIzYzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVzLnB5CkBAIC0yMiw3ICsyMiw3IEBACiBmcm9tIHRvYXN0ZXJndWkud2lkZ2V0cyBpbXBvcnQgVG9hc3RlclRhYmxlCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFJlY2lwZSwgUHJvamVjdExheWVyLCBMYXllcl9WZXJzaW9uLCBNYWNoaW5lLCBQcm9qZWN0CiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEN1c3RvbUltYWdlUmVjaXBlLCBQYWNrYWdlLCBUYXJnZXQsIEJ1aWxkLCBMb2dNZXNzYWdlLCBUYXNrCi1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEN1c3RvbUltYWdlUGFja2FnZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBDdXN0b21JbWFnZVBhY2thZ2UsIFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIKIGZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUSwgTWF4LCBTdW0sIENvdW50LCBXaGVuLCBDYXNlLCBWYWx1ZSwgSW50ZWdlckZpZWxkCiBmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybAogZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UsIHJlc29sdmUKQEAgLTExNCwyOCArMTE0LDM3IEBACiAKICAgICAgICAgZ2l0X3VybF90ZW1wbGF0ZSA9ICcnJwogICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEuaWQgJX0iPgorICAgICAgICB7JSBpZiBkYXRhLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgJX0KKyAgICAgICAgICA8Y29kZT57e2RhdGEubGF5ZXIubG9jYWxfc291cmNlX2Rpcn19PC9jb2RlPgorICAgICAgICB7JSBlbHNlICV9CiAgICAgICAgICAgPGNvZGU+e3tkYXRhLmxheWVyLnZjc191cmx9fTwvY29kZT4KICAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICB7JSBpZiBkYXRhLmdldF92Y3NfbGlua191cmwgJX0KICAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Int7IGRhdGEuZ2V0X3Zjc19saW5rX3VybCB9fSI+Ci0gICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW5ldy13aW5kb3ciPjwvc3Bhbj4KICAgICAgICAgPC9hPgogICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAnJycKIAotICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkdpdCByZXBvc2l0b3J5IFVSTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGxheWVyIHNvdXJjZSBjb2RlIiwKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMYXllciBzb3VyY2UgY29kZSBsb2NhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IkEgR2l0IHJlcG9zaXRvcnkgb3IgYW4gYWJzb2x1dGUgcGF0aCB0byBhIGRpcmVjdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImxheWVyX192Y3NfdXJsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWdpdF91cmxfdGVtcGxhdGUpCiAKICAgICAgICAgZ2l0X2Rpcl90ZW1wbGF0ZSA9ICcnJworICAgICAgICB7JSBpZiBkYXRhLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgJX0KKyAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPk5vdCBhcHBsaWNhYmxlPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIHRpdGxlPSJUaGUgc291cmNlIGNvZGUgb2Yge3tkYXRhLmxheWVyLm5hbWV9fSBpcyBub3QgaW4gYSBHaXQgcmVwb3NpdG9yeSwgc28gdGhlcmUgaXMgbm8gc3ViZGlyZWN0b3J5IGFzc29jaWF0ZWQgd2l0aCBpdCI+IDwvc3Bhbj4KKyAgICAgICAgeyUgZWxzZSAlfQogICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEuaWQgJX0iPgogICAgICAgICAgPGNvZGU+e3tkYXRhLmRpcnBhdGh9fTwvY29kZT4KICAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICB7JSBpZiBkYXRhLmRpcnBhdGggYW5kIGRhdGEuZ2V0X3Zjc19kaXJwYXRoX2xpbmtfdXJsICV9CiAgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJ7eyBkYXRhLmdldF92Y3NfZGlycGF0aF9saW5rX3VybCB9fSI+Ci0gICAgICAgICAgPGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1uZXctd2luZG93Ij48L3NwYW4+CiAgICAgICAgIDwvYT4KICAgICAgICAgeyUgZW5kaWYgJX0nJycKIApAQCAtMTQ2LDE2ICsxNTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWdpdF9kaXJfdGVtcGxhdGUpCiAKICAgICAgICAgcmV2aXNpb25fdGVtcGxhdGUgPSAgJycnCi0gICAgICAgIHslIGxvYWQgcHJvamVjdHRhZ3MgICV9Ci0gICAgICAgIHslIHdpdGggdmNzX3JlZj1kYXRhLmdldF92Y3NfcmVmZXJlbmNlICV9Ci0gICAgICAgIHslIGlmIHZjc19yZWZ8aXNfc2hhaWQgJX0KLSAgICAgICAgPGEgY2xhc3M9ImJ0biIgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4gPGxpPnt7dmNzX3JlZn19PC9saT4gPC91bD4iPgotICAgICAgICB7e3Zjc19yZWZ8dHJ1bmNhdGVjaGFyczoxMH19Ci0gICAgICAgIDwvYT4KKyAgICAgICAgeyUgaWYgZGF0YS5sYXllci5sb2NhbF9zb3VyY2VfZGlyICV9CisgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj5Ob3QgYXBwbGljYWJsZTwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiB0aXRsZT0iVGhlIHNvdXJjZSBjb2RlIG9mIHt7ZGF0YS5sYXllci5uYW1lfX0gaXMgbm90IGluIGEgR2l0IHJlcG9zaXRvcnksIHNvIHRoZXJlIGlzIG5vIHJldmlzaW9uIGFzc29jaWF0ZWQgd2l0aCBpdCI+IDwvc3Bhbj4KICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICB7e3Zjc19yZWZ9fQotICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSB3aXRoIHZjc19yZWY9ZGF0YS5nZXRfdmNzX3JlZmVyZW5jZSAlfQorICAgICAgICB7JSBpbmNsdWRlICdzbmlwcGV0cy9naXRyZXZfcG9wb3Zlci5odG1sJyAlfQogICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICcnJwogCiAgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iR2l0IHJldmlzaW9uIiwKQEAgLTE2Niw4ICsxNzMsOCBAQAogICAgICAgICBkZXBzX3RlbXBsYXRlID0gJycnCiAgICAgICAgIHslIHdpdGggb2RzPWRhdGEuZGVwZW5kZW5jaWVzLmFsbCV9CiAgICAgICAgIHslIGlmIG9kcy5jb3VudCAlfQotICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAibGF5ZXJkZXRhaWxzIiBleHRyYS5waWQgZGF0YS5pZCAlfSc+e3tkYXRhLmxheWVyLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgotICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAibGF5ZXJkZXRhaWxzIiBleHRyYS5waWQgZGF0YS5pZCAlfSc+e3tkYXRhLmxheWVyLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgorICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0nbGlzdC11bnN0eWxlZCc+CiAgICAgICAgIHslIGZvciBpIGluIG9kcyV9CiAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgImxheWVyZGV0YWlscyIgZXh0cmEucGlkIGkuZGVwZW5kc19vbi5wayAlfSc+e3tpLmRlcGVuZHNfb24ubGF5ZXIubmFtZX19PC9hPjwvbGk+CiAgICAgICAgIHslIGVuZGZvciAlfQpAQCAtMTkwLDI0ICsxOTcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPSd7JSBpbmNsdWRlICJsYXllcl9idG4uaHRtbCIgJX0nKQogCi0gICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCi0gICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXJEZXRhaWxzVXJsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlID0gRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcmRldGFpbHVybCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRhdGlvbiA9IGxhbWJkYSB4OiByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcm9qZWN0LmlkLCB4LmlkKSkpCi0KLSAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlID0gRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGF0aW9uID0gbGFtYmRhIHg6IHgubGF5ZXIubmFtZSkKLQogCiBjbGFzcyBNYWNoaW5lc1RhYmxlKFRvYXN0ZXJUYWJsZSk6CiAgICAgIiIiVGFibGUgb2YgTWFjaGluZXMgaW4gVG9hc3RlciIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKE1hY2hpbmVzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5lbXB0eV9zdGF0ZSA9ICJObyBtYWNoaW5lcyBtYXliZSB5b3UgbmVlZCB0byBkbyBhIGJ1aWxkPyIKKyAgICAgICAgc2VsZi5lbXB0eV9zdGF0ZSA9ICJUb2FzdGVyIGhhcyBubyBtYWNoaW5lIGluZm9ybWF0aW9uIGZvciB0aGlzIHByb2plY3QuIFNhZGx5LCAJCQkgICBtYWNoaW5lIGluZm9ybWF0aW9uIGNhbm5vdCBiZSBvYnRhaW5lZCBmcm9tIGJ1aWxkcywgc28gdGhpcyAJCQkJICBwYWdlIHdpbGwgcmVtYWluIGVtcHR5LiIKICAgICAgICAgc2VsZi50aXRsZSA9ICJDb21wYXRpYmxlIG1hY2hpbmVzIgogICAgICAgICBzZWxmLmRlZmF1bHRfb3JkZXJieSA9ICJuYW1lIgogCkBAIC0yNzUsNyArMjcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxheWVyX3ZlcnNpb25fX2dldF92Y3NfcmVmZXJlbmNlIikKIAogICAgICAgICBtYWNoaW5lX2ZpbGVfdGVtcGxhdGUgPSAnJyc8Y29kZT5jb25mL21hY2hpbmUve3tkYXRhLm5hbWV9fS5jb25mPC9jb2RlPgotICAgICAgICA8YSBocmVmPSJ7e2RhdGEuZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmx9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+PC9hPicnJworICAgICAgICA8YSBocmVmPSJ7e2RhdGEuZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmx9fSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW5ldy13aW5kb3ciPjwvaT48L2E+JycnCiAKICAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJNYWNoaW5lIGZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCkBAIC0zMTgsNyArMzE0LDExIEBACiAgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVzY3JpcHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iZGVzY3JpcHRpb24iKQogCi0gICAgICAgIHNlbGVjdF9idG5fdGVtcGxhdGUgPSAnPGEgaHJlZj0ieyUgdXJsICJwcm9qZWN0IiBleHRyYS5waWQgJX0/c2V0TWFjaGluZT17e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBzZWxlY3QtbWFjaGluZS1idG4iIHslIGlmIGV4dHJhLmluX3ByaiA9PSAwJX1kaXNhYmxlZD0iZGlzYWJsZWQieyVlbmRpZiV9PlNlbGVjdCBtYWNoaW5lPC9hPicKKyAgICAgICAgc2VsZWN0X2J0bl90ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInByb2plY3QiIGV4dHJhLnBpZCAlfT9zZXRNYWNoaW5lPXt7ZGF0YS5uYW1lfX0iCisgICAgICAgIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIHNlbGVjdC1tYWNoaW5lLWJ0bgorICAgICAgICB7JSBpZiBleHRyYS5pbl9wcmogPT0gMCV9ZGlzYWJsZWR7JWVuZGlmJX0iPlNlbGVjdCBtYWNoaW5lPC9hPgorICAgICAgICAnJycKIAogICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlNlbGVjdCBtYWNoaW5lIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKQEAgLTMzMCwxMCArMzMwLDEwIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgc3VwZXIoUmVjaXBlc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuZW1wdHlfc3RhdGUgPSAiVG9hc3RlciBoYXMgbm8gcmVjaXBlIGluZm9ybWF0aW9uLiBUbyBnZW5lcmF0ZSByZWNpcGUgaW5mb3JtYXRpb24geW91IGNhbiBjb25maWd1cmUgYSBsYXllciBzb3VyY2UgdGhlbiBydW4gYSBidWlsZC4iCisgICAgICAgIHNlbGYuZW1wdHlfc3RhdGUgPSAiVG9hc3RlciBoYXMgbm8gcmVjaXBlIGluZm9ybWF0aW9uLiBUbyBnZW5lcmF0ZSByZWNpcGUgaW5mb3JtYXRpb24geW91IG5lZWQgdG8gcnVuIGEgYnVpbGQuIgogCiAgICAgYnVpbGRfY29sID0geyAndGl0bGUnIDogIkJ1aWxkIiwKLSAgICAgICAgICAgICdoZWxwX3RleHQnIDogIkFkZCBvciBkZWxldGUgcmVjaXBlcyB0byBhbmQgZnJvbSB5b3VyIHByb2plY3QiLAorICAgICAgICAgICAgJ2hlbHBfdGV4dCcgOiAiQmVmb3JlIGJ1aWxkaW5nIGEgcmVjaXBlLCB5b3UgbWlnaHQgbmVlZCB0byBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgbGF5ZXIgdG8geW91ciBwcm9qZWN0IiwKICAgICAgICAgICAgICdoaWRlYWJsZScgOiBGYWxzZSwKICAgICAgICAgICAgICdmaWx0ZXJfbmFtZScgOiAiaW5fY3VycmVudF9wcm9qZWN0IiwKICAgICAgICAgICAgICdzdGF0aWNfZGF0YV9uYW1lJyA6ICJhZGQtZGVsLWxheWVycyIsCkBAIC0zNDQsOCArMzQ0LDcgQEAKICAgICAgICAgY29udGV4dCA9IHN1cGVyKFJlY2lwZXNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKIAogICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBwcm9qZWN0Ci0KLSAgICAgICAgY29udGV4dFsncHJvamVjdGxheWVycyddID0gbWFwKGxhbWJkYSBwcmpsYXllcjogcHJqbGF5ZXIubGF5ZXJjb21taXQuaWQsIFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PWNvbnRleHRbJ3Byb2plY3QnXSkpCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3RsYXllcnMnXSA9IFtwbGF5ZXIubGF5ZXJjb21taXQuaWQgZm9yIHBsYXllciBpbiBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1jb250ZXh0Wydwcm9qZWN0J10pXQogCiAgICAgICAgIHJldHVybiBjb250ZXh0CiAKQEAgLTM5NSw3ICszOTQsNyBAQAogICAgICAgICByZWNpcGVfZmlsZV90ZW1wbGF0ZSA9ICcnJwogICAgICAgICA8Y29kZT57e2RhdGEuZmlsZV9wYXRofX08L2NvZGU+CiAgICAgICAgIDxhIGhyZWY9Int7ZGF0YS5nZXRfdmNzX3JlY2lwZV9maWxlX2xpbmtfdXJsfX0iIHRhcmdldD0iX2JsYW5rIj4KLSAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW5ldy13aW5kb3ciPjwvaT4KICAgICAgICAgPC9hPgogICAgICAgICAgJycnCiAKQEAgLTQyOCw5ICs0MjcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGljZW5zZSIpCiAKKyAgICAgICAgcmV2aXNpb25fbGlua190ZW1wbGF0ZSA9ICcnJworICAgICAgICB7JSBpZiBkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2RpciAlfQorICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+Tm90IGFwcGxpY2FibGU8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IiIgdGl0bGU9IlRoZSBzb3VyY2UgY29kZSBvZiB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gaXMgbm90IGluIGEgR2l0IHJlcG9zaXRvcnksIHNvIHRoZXJlIGlzIG5vIHJldmlzaW9uIGFzc29jaWF0ZWQgd2l0aCBpdCI+IDwvc3Bhbj4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICB7e2RhdGEubGF5ZXJfdmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICcnJworCiAgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iR2l0IHJldmlzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fZ2V0X3Zjc19yZWZlcmVuY2UiKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fZ2V0X3Zjc19yZWZlcmVuY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9cmV2aXNpb25fbGlua190ZW1wbGF0ZSkKIAogCiBjbGFzcyBMYXllclJlY2lwZXNUYWJsZShSZWNpcGVzVGFibGUpOgpAQCAtNDY2LDcgKzQ3NSwxMSBAQAogICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlc2NyaXB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IikKIAotICAgICAgICBidWlsZF9yZWNpcGVfdGVtcGxhdGUgPSc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGJ1aWxkLXJlY2lwZS1idG4iIGRhdGEtcmVjaXBlLW5hbWU9Int7ZGF0YS5uYW1lfX0iIHslaWYgZXh0cmEuaW5fcHJqID09IDAgJX1kaXNhYmxlZD0iZGlzYWJsZWQieyVlbmRpZiV9PkJ1aWxkIHJlY2lwZTwvYnV0dG9uPicKKyAgICAgICAgYnVpbGRfcmVjaXBlX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ1aWxkLXJlY2lwZS1idG4KKyAgICAgICAgeyUgaWYgZXh0cmEuaW5fcHJqID09IDAgJX1kaXNhYmxlZHslIGVuZGlmICV9IgorICAgICAgICBkYXRhLXJlY2lwZS1uYW1lPSJ7e2RhdGEubmFtZX19Ij5CdWlsZCByZWNpcGU8L2E+CisgICAgICAgICcnJwogCiAgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iQnVpbGQgcmVjaXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKQEAgLTQ4MSw3ICs0OTQsMTYgQEAKIAogICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgY29udGV4dCA9IHN1cGVyKEN1c3RvbUltYWdlc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorCisgICAgICAgIGVtcHR5X3N0YXRlX3RlbXBsYXRlID0gJycnCisgICAgICAgIFlvdSBoYXZlIG5vdCBjcmVhdGVkIGFueSBjdXN0b20gaW1hZ2VzIHlldC4KKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICduZXdjdXN0b21pbWFnZScgZGF0YS5waWQgJX0iPgorICAgICAgICBDcmVhdGUgeW91ciBmaXJzdCBjdXN0b20gaW1hZ2U8L2E+CisgICAgICAgICcnJworICAgICAgICBjb250ZXh0WydlbXB0eV9zdGF0ZSddID0gc2VsZi5yZW5kZXJfc3RhdGljX2RhdGEoZW1wdHlfc3RhdGVfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3MpCiAgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisKICAgICAgICAgIyBUT0RPIHB1dCBwcm9qZWN0IGludG8gdGhlIFRvYXN0ZXJUYWJsZSBiYXNlIGNsYXNzCiAgICAgICAgIGNvbnRleHRbJ3Byb2plY3QnXSA9IHByb2plY3QKICAgICAgICAgcmV0dXJuIGNvbnRleHQKQEAgLTUwNywyOSArNTI5LDMxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1uYW1lX2xpbmtfdGVtcGxhdGUpCiAKICAgICAgICAgcmVjaXBlX2ZpbGVfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgeyUgaWYgZGF0YS5nZXRfYmFzZV9yZWNpcGVfZmlsZSAlfQogICAgICAgICA8Y29kZT57e2RhdGEubmFtZX19X3t7ZGF0YS52ZXJzaW9ufX0uYmI8L2NvZGU+Ci0gICAgICAgIDxhIGhyZWY9InslIHVybCAnY3VzdG9tcmVjaXBlZG93bmxvYWQnIGV4dHJhLnBpZCBkYXRhLnBrICV9Ij4KLSAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJEb3dubG9hZCByZWNpcGUKLSAgICAgICAgZmlsZSI+PC9pPgotICAgICAgICA8L2E+JycnCisgICAgICAgIDxhIGhyZWY9InslIHVybCAnY3VzdG9tcmVjaXBlZG93bmxvYWQnIGV4dHJhLnBpZCBkYXRhLnBrICV9IgorICAgICAgICBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1kb3dubG9hZC1hbHQgZ2V0LWhlbHAiIHRpdGxlPSJEb3dubG9hZCByZWNpcGUgZmlsZSI+PC9hPgorICAgICAgICB7JSBlbmRpZiAlfScnJwogCiAgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmVjaXBlIGZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ncmVjaXBlX2ZpbGVfZG93bmxvYWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9cmVjaXBlX2ZpbGVfdGVtcGxhdGUpCiAKICAgICAgICAgYXBwcm94X3BhY2thZ2VzX3RlbXBsYXRlID0gJycnCisgICAgICAgIHslIGlmIGRhdGEuZ2V0X2FsbF9wYWNrYWdlcy5jb3VudCA+IDAgJX0KICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdjdXN0b21yZWNpcGUnIGV4dHJhLnBpZCBkYXRhLmlkICV9Ij4KICAgICAgICAgICB7e2RhdGEuZ2V0X2FsbF9wYWNrYWdlcy5jb3VudH19Ci0gICAgICAgIDwvYT4nJycKKyAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfScnJwogCi0gICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iQXBwcm94IHBhY2thZ2VzIiwKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJQYWNrYWdlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSdhcHByb3hfcGFja2FnZXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9YXBwcm94X3BhY2thZ2VzX3RlbXBsYXRlKQogCiAKICAgICAgICAgYnVpbGRfYnRuX3RlbXBsYXRlID0gJycnCiAgICAgICAgIDxidXR0b24gZGF0YS1yZWNpcGUtbmFtZT0ie3tkYXRhLm5hbWV9fSIKLSAgICAgICAgY2xhc3M9ImJ0biBidG4tYmxvY2sgYnVpbGQtcmVjaXBlLWJ0biIgc3R5bGU9Im1hcmdpbi10b3A6IDVweDsiID4KKyAgICAgICAgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2sgYnVpbGQtcmVjaXBlLWJ0biI+CiAgICAgICAgIEJ1aWxkCiAgICAgICAgIDwvYnV0dG9uPicnJwogCkBAIC02OTUsNiArNzE5LDcgQEAKIAogICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICByZWNpcGUgPSBSZWNpcGUub2JqZWN0cy5nZXQocGs9a3dhcmdzWydyZWNpcGVfaWQnXSkKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsndGFyZ2V0X25hbWUnXSA9IHJlY2lwZS5uYW1lCiAKICAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYuY3JlYXRlX3BhY2thZ2VfbGlzdChyZWNpcGUsIGt3YXJnc1sncGlkJ10pCiAgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KCduYW1lJykKQEAgLTcxMSwxMyArNzM2LDE1IEBACiAKICAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJBcHByb3ggU2l6ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9InNpemUiLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ic2l6ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0ieyUgbG9hZCBwcm9qZWN0dGFncyAlfSBcCiAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19IikKIAogICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxpY2Vuc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGljZW5zZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUpCiAKIAogICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlcGVuZGVuY2llcyIsCkBAIC03NjQsNyArNzkxLDE5IEBACiAKICAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQub3JkZXJfYnkoJ25hbWUnKQogCisgICAgICAgICMgVGhpcyB0YXJnZXQgaXMgdGhlIHRhcmdldCB1c2VkIHRvIHdvcmsgb3V0IHdoaWNoIGdyb3VwIG9mIGRlcGVuZGVuY2VzCisgICAgICAgICMgdG8gZGlzcGxheSwgaWYgd2UndmUgYnVpbHQgdGhlIGN1c3RvbSBpbWFnZSB3ZSB1c2UgaXQgb3RoZXJ3aXNlIHdlCisgICAgICAgICMgY2FuIHVzZSB0aGUgYmFzZWQgcmVjaXBlIGluc3RlYWQKKyAgICAgICAgaWYgcHJqLmJ1aWxkX3NldC5maWx0ZXIodGFyZ2V0X190YXJnZXQ9c2VsZi5jdXN0X3JlY2lwZS5uYW1lKS5jb3VudCgpXAorICAgICAgICAgICA+IDA6CisgICAgICAgICAgICBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhWyd0YXJnZXRfbmFtZSddID0gc2VsZi5jdXN0X3JlY2lwZS5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhWyd0YXJnZXRfbmFtZSddID1cCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIuVEFSR0VUX0xBVEVTVAorCiAgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ3JlY2lwZV9pZCddID0ga3dhcmdzWydjdXN0cmVjaXBlaWQnXQorCisKICAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsnY3VycmVudF9wYWNrYWdlcyddID0gXAogICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFja2FnZXMudmFsdWVzX2xpc3QoJ3BrJywgZmxhdD1UcnVlKQogCkBAIC04NjAsMjYgKzg5OSwyMiBAQAogICAgICAgICBsYXN0X2FjdGl2aXR5X29uX3RlbXBsYXRlID0gJycnCiAgICAgICAgIHslIGxvYWQgcHJvamVjdF91cmxfdGFnICV9CiAgICAgICAgIDxzcGFuIGRhdGEtcHJvamVjdC1maWVsZD0idXBkYXRlZCI+Ci0gICAgICAgICAgPGEgaHJlZj0ieyUgcHJvamVjdF91cmwgZGF0YSAlfSI+CiAgICAgICAgICAgICB7e2RhdGEudXBkYXRlZCB8IGRhdGU6ImQvbS95IEg6aSJ9fQotICAgICAgICAgIDwvYT4KICAgICAgICAgPC9zcGFuPgogICAgICAgICAnJycKIAogICAgICAgICByZWxlYXNlX3RlbXBsYXRlID0gJycnCiAgICAgICAgIDxzcGFuIGRhdGEtcHJvamVjdC1maWVsZD0icmVsZWFzZSI+CiAgICAgICAgICAgeyUgaWYgZGF0YS5yZWxlYXNlICV9Ci0gICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIGRhdGEuaWQgJX0jcHJvamVjdC1kZXRhaWxzIj4KLSAgICAgICAgICAgICAgICB7e2RhdGEucmVsZWFzZS5uYW1lfX0KLSAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHt7ZGF0YS5yZWxlYXNlLm5hbWV9fQogICAgICAgICAgIHslIGVsaWYgZGF0YS5pc19kZWZhdWx0ICV9Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiPk5vdCBhcHBsaWNhYmxlPC9zcGFuPgotICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIgotICAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC10aXRsZT0iVGhpcyBwcm9qZWN0IGRvZXMgbm90IGhhdmUgYSByZWxlYXNlIHNldC4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj5Ob3QgYXBwbGljYWJsZTwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIKKyAgICAgICAgICAgICAgIHRpdGxlPSJUaGlzIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhIHJlbGVhc2Ugc2V0LgogICAgICAgICAgICAgICAgSXQgc2ltcGx5IGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZHMgeW91IHN0YXJ0IGZyb20KICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgVG9hc3RlciBpcyBydW5uaW5nIgogICAgICAgICAgICAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsiPgotICAgICAgICAgICAgPC9pPgorICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgIHslIGVsc2UgJX0KICAgICAgICAgICAgIE5vIHJlbGVhc2UgYXZhaWxhYmxlCiAgICAgICAgICAgeyUgZW5kaWYgJX0KQEAgLTg4OSwxNiArOTI0LDE0IEBACiAgICAgICAgIG1hY2hpbmVfdGVtcGxhdGUgPSAnJycKICAgICAgICAgPHNwYW4gZGF0YS1wcm9qZWN0LWZpZWxkPSJtYWNoaW5lIj4KICAgICAgICAgICB7JSBpZiBkYXRhLmlzX2RlZmF1bHQgJX0KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+Tm90IGFwcGxpY2FibGU8L3NwYW4+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiCi0gICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUaGlzIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhIG1hY2hpbmUKKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj5Ob3QgYXBwbGljYWJsZTwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIKKyAgICAgICAgICAgICAgIHRpdGxlPSJUaGlzIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhIG1hY2hpbmUKICAgICAgICAgICAgICAgIHNldC4gSXQgc2ltcGx5IGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZHMgeW91CiAgICAgICAgICAgICAgICBzdGFydCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgVG9hc3RlciBpcyBydW5uaW5nIgotICAgICAgICAgICAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsiPjwvaT4KKyAgICAgICAgICAgICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47Ij48L3NwYW4+CiAgICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBkYXRhLmlkICV9I21hY2hpbmUtZGlzdHJvIj4KLSAgICAgICAgICAgICAge3tkYXRhLmdldF9jdXJyZW50X21hY2hpbmVfbmFtZX19Ci0gICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7e2RhdGEuZ2V0X2N1cnJlbnRfbWFjaGluZV9uYW1lfX0KICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICA8L3NwYW4+CiAgICAgICAgICcnJwpAQCAtOTA4LDIwICs5NDEsMTYgQEAKICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGRhdGEuaWQgJX0iPgogICAgICAgICAgICAge3tkYXRhLmdldF9udW1iZXJfb2ZfYnVpbGRzfX0KICAgICAgICAgICA8L2E+Ci0gICAgICAgIHslIGVsc2UgJX0KLSAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiPjA8L3NwYW4+CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICcnJwogCiAgICAgICAgIGxhc3RfYnVpbGRfb3V0Y29tZV90ZW1wbGF0ZSA9ICcnJwogICAgICAgICB7JSBpZiBkYXRhLmdldF9udW1iZXJfb2ZfYnVpbGRzID4gMCAlfQotICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRkYXNoYm9hcmQnIGRhdGEuZ2V0X2xhc3RfYnVpbGRfaWQgJX0iPgotICAgICAgICAgICAgeyUgaWYgZGF0YS5nZXRfbGFzdF9vdXRjb21lID09IGV4dHJhLkJ1aWxkLlNVQ0NFRURFRCAlfQotICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT4KLSAgICAgICAgICAgIHslIGVsaWYgZGF0YS5nZXRfbGFzdF9vdXRjb21lID09IGV4dHJhLkJ1aWxkLkZBSUxFRCAlfQotICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIGVycm9yIj48L2k+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgIDwvYT4KKyAgICAgICAgICB7JSBpZiBkYXRhLmdldF9sYXN0X291dGNvbWUgPT0gZXh0cmEuQnVpbGQuU1VDQ0VFREVEICV9CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1vay1jaXJjbGUiPjwvc3Bhbj4KKyAgICAgICAgICB7JSBlbGlmIGRhdGEuZ2V0X2xhc3Rfb3V0Y29tZSA9PSBleHRyYS5CdWlsZC5GQUlMRUQgJX0KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW1pbnVzLXNpZ24iPjwvc3Bhbj4KKyAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAnJycKIApAQCAtOTM1LDcgKzk2NCw3IEBACiAKICAgICAgICAgZXJyb3JzX3RlbXBsYXRlID0gJycnCiAgICAgICAgIHslIGlmIGRhdGEuZ2V0X251bWJlcl9vZl9idWlsZHMgPiAwIGFuZCBkYXRhLmdldF9sYXN0X2Vycm9ycyA+IDAgJX0KLSAgICAgICAgICA8YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIgorICAgICAgICAgIDxhIGNsYXNzPSJlcnJvcnMuY291bnQgdGV4dC1kYW5nZXIiCiAgICAgICAgICAgICAgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgZGF0YS5nZXRfbGFzdF9idWlsZF9pZCAlfSNlcnJvcnMiPgogICAgICAgICAgICAge3tkYXRhLmdldF9sYXN0X2Vycm9yc319IGVycm9ye3tkYXRhLmdldF9sYXN0X2Vycm9ycyB8IHBsdXJhbGl6ZX19CiAgICAgICAgICAgPC9hPgpAQCAtOTQ0LDcgKzk3Myw3IEBACiAKICAgICAgICAgd2FybmluZ3NfdGVtcGxhdGUgPSAnJycKICAgICAgICAgeyUgaWYgZGF0YS5nZXRfbnVtYmVyX29mX2J1aWxkcyA+IDAgYW5kIGRhdGEuZ2V0X2xhc3Rfd2FybmluZ3MgPiAwICV9Ci0gICAgICAgICAgPGEgY2xhc3M9Indhcm5pbmdzLmNvdW50IHdhcm5pbmciCisgICAgICAgICAgPGEgY2xhc3M9Indhcm5pbmdzLmNvdW50IHRleHQtd2FybmluZyIKICAgICAgICAgICAgICBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBkYXRhLmdldF9sYXN0X2J1aWxkX2lkICV9I3dhcm5pbmdzIj4KICAgICAgICAgICAgIHt7ZGF0YS5nZXRfbGFzdF93YXJuaW5nc319IHdhcm5pbmd7e2RhdGEuZ2V0X2xhc3Rfd2FybmluZ3MgfCBwbHVyYWxpemV9fQogICAgICAgICAgIDwvYT4KQEAgLTk1Myw5ICs5ODIsNyBAQAogCiAgICAgICAgIGltYWdlX2ZpbGVzX3RlbXBsYXRlID0gJycnCiAgICAgICAgIHslIGlmIGRhdGEuZ2V0X251bWJlcl9vZl9idWlsZHMgPiAwIGFuZCBkYXRhLmdldF9sYXN0X291dGNvbWUgPT0gZXh0cmEuQnVpbGQuU1VDQ0VFREVEICV9Ci0gICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgZGF0YS5nZXRfbGFzdF9idWlsZF9pZCAlfSNpbWFnZXMiPgotICAgICAgICAgICAge3tkYXRhLmdldF9sYXN0X2J1aWxkX2V4dGVuc2lvbnN9fQotICAgICAgICAgIDwvYT4KKyAgICAgICAgICB7e2RhdGEuZ2V0X2xhc3RfYnVpbGRfZXh0ZW5zaW9uc319CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICcnJwogCkBAIC05OTEsNyArMTAxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSdtYWNoaW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPW1hY2hpbmVfdGVtcGxhdGUpCiAKLSAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSdOdW1iZXIgb2YgYnVpbGRzJywKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSdCdWlsZHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSdUaGUgbnVtYmVyIG9mIGJ1aWxkcyB3aGljaCBoYXZlIGJlZW4gcnVuIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwcm9qZWN0JywKICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLApAQCAtMTEyMSwxOSArMTE0OCwxNyBAQAogCiAgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgb3V0Y29tZV90ZW1wbGF0ZSA9ICcnJwotICAgICAgICA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBkYXRhLmlkICV9Ij4KLSAgICAgICAgICAgIHslIGlmIGRhdGEub3V0Y29tZSA9PSBkYXRhLlNVQ0NFRURFRCAlfQotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW9rLXNpZ24gc3VjY2VzcyI+PC9pPgotICAgICAgICAgICAgeyUgZWxpZiBkYXRhLm91dGNvbWUgPT0gZGF0YS5GQUlMRUQgJX0KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIGVycm9yIj48L2k+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICA8L2E+CisgICAgICAgIHslIGlmIGRhdGEub3V0Y29tZSA9PSBkYXRhLlNVQ0NFRURFRCAlfQorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tb2stY2lyY2xlIj48L3NwYW4+CisgICAgICAgIHslIGVsaWYgZGF0YS5vdXRjb21lID09IGRhdGEuRkFJTEVEICV9CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1taW51cy1zaWduIj48L3NwYW4+CisgICAgICAgIHslIGVuZGlmICV9CiAKICAgICAgICAgeyUgaWYgZGF0YS5jb29rZXJfbG9nX3BhdGggJX0KICAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJidWlsZF9hcnRpZmFjdCIgZGF0YS5pZCAiY29va2VybG9nIiBkYXRhLmlkICV9Ij4KLSAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCBnZXQtaGVscCIKLSAgICAgICAgICAgICAgIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkRvd25sb2FkIGJ1aWxkIGxvZyI+PC9pPgorICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZG93bmxvYWQtYWx0IGdldC1oZWxwIgorICAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC10aXRsZT0iRG93bmxvYWQgYnVpbGQgbG9nIj48L3NwYW4+CiAgICAgICAgICAgICA8L2E+CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICcnJwpAQCAtMTE0OCw0NSArMTE3MywzOSBAQAogICAgICAgICAnJycKIAogICAgICAgICBtYWNoaW5lX3RlbXBsYXRlID0gJycnCi0gICAgICAgIDxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGRhdGEuaWQgJX0iPgotICAgICAgICAgICAge3tkYXRhLm1hY2hpbmV9fQotICAgICAgICA8L2E+CisgICAgICAgIHt7ZGF0YS5tYWNoaW5lfX0KICAgICAgICAgJycnCiAKICAgICAgICAgc3RhcnRlZF9vbl90ZW1wbGF0ZSA9ICcnJwotICAgICAgICA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBkYXRhLmlkICV9Ij4KLSAgICAgICAgICAgIHt7ZGF0YS5zdGFydGVkX29uIHwgZGF0ZToiZC9tL3kgSDppIn19Ci0gICAgICAgIDwvYT4KKyAgICAgICAge3tkYXRhLnN0YXJ0ZWRfb24gfCBkYXRlOiJkL20veSBIOmkifX0KICAgICAgICAgJycnCiAKICAgICAgICAgY29tcGxldGVkX29uX3RlbXBsYXRlID0gJycnCi0gICAgICAgIDxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGRhdGEuaWQgJX0iPgotICAgICAgICAgICAge3tkYXRhLmNvbXBsZXRlZF9vbiB8IGRhdGU6ImQvbS95IEg6aSJ9fQotICAgICAgICA8L2E+CisgICAgICAgIHt7ZGF0YS5jb21wbGV0ZWRfb24gfCBkYXRlOiJkL20veSBIOmkifX0KICAgICAgICAgJycnCiAKICAgICAgICAgZmFpbGVkX3Rhc2tzX3RlbXBsYXRlID0gJycnCiAgICAgICAgIHslIGlmIGRhdGEuZmFpbGVkX3Rhc2tzLmNvdW50ID09IDEgJX0KLSAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFzayIgZGF0YS5pZCBkYXRhLmZhaWxlZF90YXNrcy4wLmlkICV9Ij4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiPgotICAgICAgICAgICAgICAgICAgICB7e2RhdGEuZmFpbGVkX3Rhc2tzLjAucmVjaXBlLm5hbWV9fS57e2RhdGEuZmFpbGVkX3Rhc2tzLjAudGFza19uYW1lfX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJ0ZXh0LWRhbmdlciIgaHJlZj0ieyUgdXJsICJ0YXNrIiBkYXRhLmlkIGRhdGEuZmFpbGVkX3Rhc2tzLjAuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxzcGFuPgorICAgICAgICAgICAgICAgICAgICB7e2RhdGEuZmFpbGVkX3Rhc2tzLjAucmVjaXBlLm5hbWV9fSB7e2RhdGEuZmFpbGVkX3Rhc2tzLjAudGFza19uYW1lfX0KICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkX2FydGlmYWN0IiBkYXRhLmlkICJ0YXNrbG9nZmlsZSIgZGF0YS5mYWlsZWRfdGFza3MuMC5pZCAlfSI+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IgotICAgICAgICAgICAgICAgICAgIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPgotICAgICAgICAgICAgICAgIDwvaT4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1kb3dubG9hZC1hbHQgZ2V0LWhlbHAiCisgICAgICAgICAgICAgICAgICAgdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgIDwvYT4KICAgICAgICAgeyUgZWxpZiBkYXRhLmZhaWxlZF90YXNrcy5jb3VudCA+IDEgJX0KICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFza3MiIGRhdGEuaWQgJX0/ZmlsdGVyPW91dGNvbWUlM0F7e2V4dHJhLlRhc2suT1VUQ09NRV9GQUlMRUR9fSI+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIj57e2RhdGEuZmFpbGVkX3Rhc2tzLmNvdW50fX0gdGFza3M8L3NwYW4+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZGFuZ2VyIj57e2RhdGEuZmFpbGVkX3Rhc2tzLmNvdW50fX0gdGFza3M8L3NwYW4+CiAgICAgICAgICAgICA8L2E+CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICcnJwogCiAgICAgICAgIGVycm9yc190ZW1wbGF0ZSA9ICcnJwogICAgICAgICB7JSBpZiBkYXRhLmVycm9yc19ubyAlfQotICAgICAgICAgICAgPGEgY2xhc3M9ImVycm9ycy5jb3VudCBlcnJvciIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgZGF0YS5pZCAlfSNlcnJvcnMiPgorICAgICAgICAgICAgPGEgY2xhc3M9ImVycm9ycy5jb3VudCB0ZXh0LWRhbmdlciIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgZGF0YS5pZCAlfSNlcnJvcnMiPgogICAgICAgICAgICAgICAgIHt7ZGF0YS5lcnJvcnNfbm99fSBlcnJvcnt7ZGF0YS5lcnJvcnNfbm98cGx1cmFsaXplfX0KICAgICAgICAgICAgIDwvYT4KICAgICAgICAgeyUgZW5kaWYgJX0KQEAgLTExOTQsNyArMTIxMyw3IEBACiAKICAgICAgICAgd2FybmluZ3NfdGVtcGxhdGUgPSAnJycKICAgICAgICAgeyUgaWYgZGF0YS53YXJuaW5nc19ubyAlfQotICAgICAgICAgICAgPGEgY2xhc3M9Indhcm5pbmdzLmNvdW50IHdhcm5pbmciIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGRhdGEuaWQgJX0jd2FybmluZ3MiPgorICAgICAgICAgICAgPGEgY2xhc3M9Indhcm5pbmdzLmNvdW50IHRleHQtd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgZGF0YS5pZCAlfSN3YXJuaW5ncyI+CiAgICAgICAgICAgICAgICAge3tkYXRhLndhcm5pbmdzX25vfX0gd2FybmluZ3t7ZGF0YS53YXJuaW5nc19ub3xwbHVyYWxpemV9fQogICAgICAgICAgICAgPC9hPgogICAgICAgICB7JSBlbmRpZiAlfQpAQCAtMTIwMiwxNiArMTIyMSwxOCBAQAogCiAgICAgICAgIHRpbWVfdGVtcGxhdGUgPSAnJycKICAgICAgICAgeyUgbG9hZCBwcm9qZWN0dGFncyAlfQotICAgICAgICA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkdGltZSIgZGF0YS5pZCAlfSI+CisgICAgICAgIHslIGlmIGRhdGEub3V0Y29tZSA9PSBleHRyYS5CdWlsZC5TVUNDRUVERUQgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAiYnVpbGR0aW1lIiBkYXRhLmlkICV9Ij4KKyAgICAgICAgICAgICAgICB7e2RhdGEudGltZXNwZW50X3NlY29uZHMgfCBzZWN0b2htc319CisgICAgICAgICAgICA8L2E+CisgICAgICAgIHslIGVsc2UgJX0KICAgICAgICAgICAgIHt7ZGF0YS50aW1lc3BlbnRfc2Vjb25kcyB8IHNlY3RvaG1zfX0KLSAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAnJycKIAogICAgICAgICBpbWFnZV9maWxlc190ZW1wbGF0ZSA9ICcnJwogICAgICAgICB7JSBpZiBkYXRhLm91dGNvbWUgPT0gZXh0cmEuQnVpbGQuU1VDQ0VFREVEICV9Ci0gICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgZGF0YS5pZCAlfSNpbWFnZXMiPgogICAgICAgICAgICAge3tkYXRhLmdldF9pbWFnZV9maWxlX2V4dGVuc2lvbnN9fQotICAgICAgICAgIDwvYT4KICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgJycnCiAKQEAgLTE0MjksMTAgKzE0NTAsMTAgQEAKICAgICAgICAgICAgIHt7ZGF0YS5wcm9qZWN0Lm5hbWV9fQogICAgICAgICA8L2E+CiAgICAgICAgIHslIGlmIGRhdGEucHJvamVjdC5pc19kZWZhdWx0ICV9Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSIiCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSIiCiAgICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUaGlzIHByb2plY3Qgc2hvd3MgaW5mb3JtYXRpb24gYWJvdXQKICAgICAgICAgICAgICAgIHRoZSBidWlsZHMgeW91IHN0YXJ0IGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aGlsZSBUb2FzdGVyIGlzCi0gICAgICAgICAgICAgICBydW5uaW5nIiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyI+PC9pPgorICAgICAgICAgICAgICAgcnVubmluZyIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsiPjwvc3Bhbj4KICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgJycnCiAKQEAgLTE0ODIsNyArMTUwMyw2IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnByb2plY3RfaWQgPSBrd2FyZ3NbJ3BpZCddCiAgICAgICAgIHN1cGVyKFByb2plY3RCdWlsZHNUYWJsZSwgc2VsZikuc2V0dXBfcXVlcnlzZXQoKmFyZ3MsICoqa3dhcmdzKQotCiAgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPXNlbGYucHJvamVjdF9pZCkKICAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQuZmlsdGVyKHByb2plY3Q9cHJvamVjdCkKIApAQCAtMTQ5Niw4ICsxNTE2LDIzIEBACiAgICAgICAgIHNlbGYucHJvamVjdF9pZCA9IGt3YXJnc1sncGlkJ10KICAgICAgICAgY29udGV4dCA9IHN1cGVyKFByb2plY3RCdWlsZHNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKIAorICAgICAgICBlbXB0eV9zdGF0ZV90ZW1wbGF0ZSA9ICcnJworICAgICAgICBUaGlzIHByb2plY3QgaGFzIG5vIGJ1aWxkcy4KKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0aW1hZ2VyZWNpcGVzJyBkYXRhLnBpZCAlfSI+CisgICAgICAgIENob29zZSBhIHJlY2lwZSB0byBidWlsZDwvYT4KKyAgICAgICAgJycnCisgICAgICAgIGNvbnRleHRbJ2VtcHR5X3N0YXRlJ10gPSBzZWxmLnJlbmRlcl9zdGF0aWNfZGF0YShlbXB0eV9zdGF0ZV90ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJncykKKwogICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1zZWxmLnByb2plY3RfaWQpCiAgICAgICAgIGNvbnRleHRbJ21ydSddID0gQnVpbGQuZ2V0X3JlY2VudChwcm9qZWN0KQogICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBwcm9qZWN0CiAKKyAgICAgICAgc2VsZi5zZXR1cF9xdWVyeXNldCgqKmt3YXJncykKKyAgICAgICAgaWYgc2VsZi5xdWVyeXNldC5jb3VudCgpID09IDAgYW5kIFwKKyAgICAgICAgICAgcHJvamVjdC5idWlsZF9zZXQuZmlsdGVyKG91dGNvbWU9QnVpbGQuSU5fUFJPR1JFU1MpLmNvdW50KCkgPiAwOgorICAgICAgICAgICAgY29udGV4dFsnYnVpbGRfaW5fcHJvZ3Jlc3Nfbm9uZV9jb21wbGV0ZWQnXSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRleHRbJ2J1aWxkX2luX3Byb2dyZXNzX25vbmVfY29tcGxldGVkJ10gPSBGYWxzZQorCiAgICAgICAgIHJldHVybiBjb250ZXh0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlLmh0bWwKaW5kZXggMjEwY2YzMy4uNDk2ZGQ2ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2UuaHRtbApAQCAtOCw5ICs4LDggQEAKICAgICAgIHslIGJsb2NrIHRpdGxlICV9IFRvYXN0ZXIgeyUgZW5kYmxvY2sgJX0KICAgICA8L3RpdGxlPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnICV9IiB0eXBlPSJ0ZXh0L2NzcyIvPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUubWluLmNzcycgJX0iIHR5cGU9J3RleHQvY3NzJy8+CisgICAgPCEtLWxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9ib290c3RyYXAtdGhlbWUuY3NzJyAlfSIgdHlwZT0idGV4dC9jc3MiLy0tPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MnICV9IiB0eXBlPSd0ZXh0L2NzcycvPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvcHJldHRpZnkuY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2RlZmF1bHQuY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KIAogICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgpAQCAtMjEsNiArMjAsMTAgQEAKICAgICA8L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9ib290c3RyYXAubWluLmpzJyAlfSI+CiAgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvdHlwZWFoZWFkLmpxdWVyeS5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2pzcmVuZGVyLm1pbi5qcycgJX0iPgorICAgIDwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3ByZXR0aWZ5LmpzJyAlfSI+CiAgICAgPC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGlidG9hc3Rlci5qcycgJX0iPgpAQCAtMzEsNiArMzQsOCBAQAogICAgIDwvc2NyaXB0PgogICAgIHslIGVuZGlmICV9CiAgICAgPHNjcmlwdD4KKyAgICAgICQudmlld3Muc2V0dGluZ3MuZGVsaW1pdGVycygiPCUiLCAiJT4iKTsKKwogICAgICAgbGlidG9hc3Rlci5jdHggPSB7CiAgICAgICAgIGpzVXJsIDogInslIHN0YXRpYyAnanMvJyAlfSIsCiAgICAgICAgIGh0bWxVcmwgOiAieyUgc3RhdGljICdodG1sLycgJX0iLApAQCAtMzksNiArNDQsNyBAQAogICAgICAgICB7JSBpZiBwcm9qZWN0LmlkICV9CiAgICAgICAgIHByb2plY3RJZCA6IHt7cHJvamVjdC5pZH19LAogICAgICAgICBwcm9qZWN0UGFnZVVybCA6IHslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCBhcyBwdXJsICV9e3twdXJsfGpzb259fSwKKyAgICAgICAgeGhyUHJvamVjdFVybCA6IHslIHVybCAneGhyX3Byb2plY3QnIHByb2plY3QuaWQgYXMgcHh1cmwgJX17e3B4dXJsfGpzb259fSwKICAgICAgICAgcHJvamVjdE5hbWUgOiB7e3Byb2plY3QubmFtZXxqc29ufX0sCiAgICAgICAgIHJlY2lwZXNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX3JlY2lwZXN0eXBlYWhlYWQnIHByb2plY3QuaWQgYXMgcGF0dXJsJX17e3BhdHVybHxqc29ufX0sCiAgICAgICAgIGxheWVyc1R5cGVBaGVhZFVybDogeyUgdXJsICd4aHJfbGF5ZXJzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LApAQCAtNDcsNyArNTMsOSBAQAogICAgICAgICB4aHJDdXN0b21SZWNpcGVVcmwgOiAieyUgdXJsICd4aHJfY3VzdG9tcmVjaXBlJyAlfSIsCiAgICAgICAgIHByb2plY3RJZCA6IHt7cHJvamVjdC5pZH19LAogICAgICAgICB4aHJCdWlsZFJlcXVlc3RVcmw6ICJ7JSB1cmwgJ3hocl9idWlsZHJlcXVlc3QnIHByb2plY3QuaWQgJX0iLAorICAgICAgICBtb3N0UmVjZW50QnVpbGRzVXJsOiAieyUgdXJsICdtb3N0X3JlY2VudF9idWlsZHMnICV9P3Byb2plY3RfaWQ9e3twcm9qZWN0LmlkfX0iLAogICAgICAgICB7JSBlbHNlICV9CisgICAgICAgIG1vc3RSZWNlbnRCdWlsZHNVcmw6ICJ7JSB1cmwgJ21vc3RfcmVjZW50X2J1aWxkcycgJX0iLAogICAgICAgICBwcm9qZWN0SWQgOiB1bmRlZmluZWQsCiAgICAgICAgIHByb2plY3RQYWdlVXJsIDogdW5kZWZpbmVkLAogICAgICAgICBwcm9qZWN0TmFtZSA6IHVuZGVmaW5lZCwKQEAgLTU4LDY5ICs2Niw3MiBAQAogICAgIHslIGVuZGJsb2NrICV9CiAgIDwvaGVhZD4KIAotICA8Ym9keSBzdHlsZT0iaGVpZ2h0OiAxMDAlIj4KKyAgPGJvZHk+CiAKICAgICB7JSBjc3JmX3Rva2VuICV9Ci0gICAgPGRpdiBpZD0ibG9hZGluZy1ub3RpZmljYXRpb24iIGNsYXNzPSJhbGVydCBsZWFkIHRleHQtY2VudGVyIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICA8ZGl2IGlkPSJsb2FkaW5nLW5vdGlmaWNhdGlvbiIgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbGVhZCB0ZXh0LWNlbnRlciIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CiAgICAgICBMb2FkaW5nIDxpIGNsYXNzPSJmYS1wdWxzZSBpY29uLXNwaW5uZXIiPjwvaT4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgaWQ9ImNoYW5nZS1ub3RpZmljYXRpb24iIGNsYXNzPSJhbGVydCBsZWFkIGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgaWQ9ImhpZGUtYWxlcnQiPiZ0aW1lczs8L2J1dHRvbj4KKyAgICA8ZGl2IGlkPSJjaGFuZ2Utbm90aWZpY2F0aW9uIiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBhbGVydC1kaXNtaXNzaWJsZSBjaGFuZ2Utbm90aWZpY2F0aW9uIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGlkPSJoaWRlLWFsZXJ0IiBkYXRhLXRvZ2dsZT0iYWxlcnQiPiZ0aW1lczs8L2J1dHRvbj4KICAgICAgIDxzcGFuIGlkPSJjaGFuZ2Utbm90aWZpY2F0aW9uLW1zZyI+PC9zcGFuPgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AiPgotICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KLSAgICAgICAgICA8YSBjbGFzcz0iYnJhbmQgbG9nbyIgaHJlZj0iIyI+PGltZyBzcmM9InslIHN0YXRpYyAnaW1nL2xvZ28ucG5nJyAlfSIgY2xhc3M9IiIgYWx0PSJZb2N0byBsb2dvIHByb2plY3QiLz48L2E+Ci0gICAgICAgICAgPHNwYW4gY2xhc3M9ImJyYW5kIj4KLSAgICAgICAgICAgIDxhIGhyZWY9Ii8iPlRvYXN0ZXI8L2E+CisgICAgPG5hdiBjbGFzcz0ibmF2YmFyIG5hdmJhci1kZWZhdWx0IG5hdmJhci1maXhlZC10b3AiPgorICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CisgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJuYXZiYXItdG9nZ2xlIGNvbGxhcHNlZCIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBkYXRhLXRhcmdldD0iI2dsb2JhbC1uYXYiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzci1vbmx5Ij5Ub2dnbGUgbmF2aWdhdGlvbjwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2FzdGVyLW5hdmJhci1icmFuZCI+CisgICAgICAgICAgICA8YSBocmVmPSIvIj4KKyAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibG9nbyIgc3JjPSJ7JSBzdGF0aWMgJ2ltZy9sb2dvLnBuZycgJX0iIGNsYXNzPSIiIGFsdD0iWW9jdG8gbG9nbyBwcm9qZWN0Ii8+CisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnJhbmQiIGhyZWY9Ii8iPlRvYXN0ZXI8L2E+CiAgICAgICAgICAgICB7JSBpZiBERUJVRyAlfQotICAgICAgICAgICAgPGkgY2xhc3M9Imljb24taW5mby1zaWduIiB0aXRsZT0iPHN0cm9uZz5Ub2FzdGVyIHZlcnNpb24gaW5mb3JtYXRpb248L3N0cm9uZz4iIGRhdGEtY29udGVudD0iPGRsPjxkdD5HaXQgYnJhbmNoPC9kdD48ZGQ+e3tUT0FTVEVSX0JSQU5DSH19PC9kZD48ZHQ+R2l0IHJldmlzaW9uPC9kdD48ZGQ+e3tUT0FTVEVSX1JFVklTSU9OfX08L2RkPjwvZGw+Ij48L2k+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1pbmZvLXNpZ24iIHRpdGxlPSI8c3Ryb25nPlRvYXN0ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbjwvc3Ryb25nPiIgZGF0YS1jb250ZW50PSI8ZGw+PGR0PkdpdCBicmFuY2g8L2R0PjxkZD57e1RPQVNURVJfQlJBTkNIfX08L2RkPjxkdD5HaXQgcmV2aXNpb248L2R0PjxkZD57e1RPQVNURVJfUkVWSVNJT059fTwvZGQ+PC9kbD4iPjwvaT4KICAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgPC9zcGFuPgotICAgICAgICAgIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgIT0gJ2xhbmRpbmcnIGFuZCByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lICE9ICduZXdwcm9qZWN0JyAlfQotICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KLSAgICAgICAgICAgIDxsaSB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdhbGwtYnVpbGRzJyAlfQotICAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCi0gICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2UiIGlkPSJnbG9iYWwtbmF2Ij4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSAhPSAnbGFuZGluZycgYW5kIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgIT0gJ25ld3Byb2plY3QnICV9CisgICAgICAgICAgICAgIDxsaSB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdhbGwtYnVpbGRzJyAlfQorICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfT4KICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdhbGwtYnVpbGRzJyAlfSI+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tdGFza3MiPjwvaT4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10YXNrcyI+PC9pPgogICAgICAgICAgICAgICAgIEFsbCBidWlsZHMKICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgIDxsaSB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdhbGwtcHJvamVjdHMnICAlfQotICAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCi0gICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaSB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdhbGwtcHJvamVjdHMnICAlfQorICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfT4KICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdhbGwtcHJvamVjdHMnICV9Ij4KICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1mb2xkZXItb3BlbiI+PC9pPgogICAgICAgICAgICAgICAgIEFsbCBwcm9qZWN0cwogICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICA8L2xpPgotICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij4KLSAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2xhdGVzdC90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sIj4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1ib29rIj48L2k+Ci0gICAgICAgICAgICAgICAgTWFudWFsCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tYm9vayI+PC9pPgorICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24KICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICA8L3VsPgotICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0IGRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAgcHVsbC1yaWdodCI+Ci0gICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBpZD0ibmV3LXByb2plY3QtYnV0dG9uIiBocmVmPSJ7JSB1cmwgJ25ld3Byb2plY3QnICV9Ij5OZXcgcHJvamVjdDwvYT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IG5hdmJhci1idG4gbmF2YmFyLXJpZ2h0IiBpZD0ibmV3LXByb2plY3QtYnV0dG9uIiBocmVmPSJ7JSB1cmwgJ25ld3Byb2plY3QnICV9Ij5OZXcgcHJvamVjdDwvYT4KICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+CiAgICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KKyAgICA8L25hdj4KIAotICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCB0b3AtcGFkZGVkIj4KLSAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Ci0gICAgICAgIHslIGJsb2NrIHBhZ2Vjb250ZW50ICV9Ci0gICAgICAgIHslIGVuZGJsb2NrICV9Ci0gICAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgICAgeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKyAgICAgIHslIGVuZGJsb2NrICV9CiAgICAgPC9kaXY+CiAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZGRldGFpbHBhZ2UuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZGRldGFpbHBhZ2UuaHRtbAppbmRleCBhNjJlMGIxLi40ZDUwNjY3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sCkBAIC0zLDMwICszLDI5IEBACiB7JSBsb2FkIGh1bWFuaXplICV9CiB7JSBibG9jayBwYWdlY29udGVudCAlfQogCi08ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotPCEtLSBCcmVhZGNydW1icyAtLT4KLSAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLSAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIiBpZD0iYnJlYWRjcnVtYiI+Ci0gICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgcHJvamVjdF91cmwgYnVpbGQucHJvamVjdCAlfSI+e3tidWlsZC5wcm9qZWN0Lm5hbWV9fTwvYT48L2xpPgotICAgICAgICAgICAgeyUgaWYgbm90IGJ1aWxkLnByb2plY3QuaXNfZGVmYXVsdCAlfQotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGJ1aWxkLnByb2plY3QuaWQgJX0iPkJ1aWxkczwvYT48L2xpPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iPnt7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oK3t7YnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSl7JWVuZGlmJX0ge3tidWlsZC5tYWNoaW5lfX0gKHt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fSk8L2E+PC9saT4KLSAgICAgICAgICAgIHslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfXslIGVuZGJsb2NrICV9Ci0gICAgICAgIDwvdWw+Ci0gICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICQoIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGknKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mcmFycjs8L3NwYW4+Jyk7Ci0gICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QnKS5hZGRDbGFzcygiYWN0aXZlIik7Ci0gICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QgPiBzcGFuJykucmVtb3ZlKCk7Ci0gICAgICAgIH0pOwotICAgICAgICA8L3NjcmlwdD4KLSAgICA8L2Rpdj4gPCEtLXNlY3Rpb24tLT4KLQotICAgICAgICA8IS0tIEJlZ2luIGNvbnRhaW5lciAtLT4KLSAgICAgICAgeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9eyUgZW5kYmxvY2sgJX0KLSAgICAgICAgPCEtLSBFbmQgY29udGFpbmVyIC0tPgotCis8ZGl2IGNsYXNzPSJyb3ciPgorICA8IS0tIEJyZWFkY3J1bWJzIC0tPgorCTxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+CisJCTx1bCBjbGFzcz0iYnJlYWRjcnVtYiIgaWQ9ImJyZWFkY3J1bWIiPgorCQkJPGxpPjxhIGhyZWY9InslIHByb2plY3RfdXJsIGJ1aWxkLnByb2plY3QgJX0iPnt7YnVpbGQucHJvamVjdC5uYW1lfX08L2E+PC9saT4KKwkJCXslIGlmIG5vdCBidWlsZC5wcm9qZWN0LmlzX2RlZmF1bHQgJX0KKwkJCTxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGJ1aWxkLnByb2plY3QuaWQgJX0iPkJ1aWxkczwvYT48L2xpPgorCQkJeyUgZW5kaWYgJX0KKwkJCTxsaT48YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iPnt7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oK3t7YnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSl7JWVuZGlmJX0ge3tidWlsZC5tYWNoaW5lfX0gKHt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fSk8L2E+PC9saT4KKwkJCXslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfXslIGVuZGJsb2NrICV9CisJCTwvdWw+CisJCTxzY3JpcHQ+CiskKCBmdW5jdGlvbiAoKSB7CisJJCgnI2JyZWFkY3J1bWIgPiBsaScpLmFwcGVuZCgnPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4nKTsKKwkkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QnKS5hZGRDbGFzcygiYWN0aXZlIik7CisJJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0ID4gc3BhbicpLnJlbW92ZSgpOworCX0pOworCQk8L3NjcmlwdD4KKwk8L2Rpdj4KIDwvZGl2PgogCis8IS0tIEJlZ2luIGNvbnRhaW5lciAtLT4KK3slIGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfXslIGVuZGJsb2NrICV9Cis8IS0tIEVuZCBjb250YWluZXIgLS0+CisKIHslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRwYWdlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRwYWdlLmh0bWwKaW5kZXggMGQ4Yzg4Mi4uZjVlZWU5NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkcGFnZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZHBhZ2UuaHRtbApAQCAtMyw5ICszLDk1IEBACiB7JSBsb2FkIHByb2plY3RfdXJsX3RhZyAlfQogeyUgbG9hZCBvYmplY3RzX3RvX2RpY3Rpb25hcmllc19maWx0ZXIgJX0KIHslIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgZmllbGRfdmFsdWVzX2ZpbHRlciAlfQogeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworIDxzY3JpcHQ+CisgIHZhciBjb25maWdWYXJVcmwgPSAieyUgdXJsICdjb25maWd2YXJzJyBidWlsZC5pZCAlfSI7CisKKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKKworICAgICQoIiNkZWxldGUtYnVpbGQtY29uZmlybSIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICBsaWJ0b2FzdGVyLmRpc2FibGVBamF4TG9hZGluZ1RpbWVyKCk7CisgICAgICAkKHRoaXMpLmZpbmQoJ1tkYXRhLXJvbGU9InN1Ym1pdC1zdGF0ZSJdJykuaGlkZSgpOworICAgICAgJCh0aGlzKS5maW5kKCdbZGF0YS1yb2xlPSJsb2FkaW5nLXN0YXRlIl0nKS5zaG93KCk7CisgICAgICAkKHRoaXMpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisKKyAgICAgIC8qIE1ha2UgdGhlIG1vZGFsIG5vbiBjYW5jZWxhYmxlIHdoaWxlIGRlbGV0ZSBpcyBpbiBwcm9ncmVzcyAqLworICAgICAgJCgnI2RlbGV0ZS1idWlsZC1tb2RhbCBidXR0b25bZGF0YS1kaXNtaXNzPSJtb2RhbCJdJykuaGlkZSgpOworCisgICAgICAkLmFqYXgoeworICAgICAgICAgIHR5cGU6ICdERUxFVEUnLAorICAgICAgICAgIHVybDogInslIHVybCAneGhyX2J1aWxkJyBidWlsZC5pZCAlfSIsCisgICAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT09ICJvayIpIHsKKyAgICAgICAgICAgICAgY29uc29sZS53YXJuKGRhdGEuZXJyb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbGlidG9hc3Rlci5zZXROb3RpZmljYXRpb24oImJ1aWxkLWRlbGV0ZWQiLAorICAgICAgICAgICAgICAgICQoIiNkZWxldGVkLWJ1aWxkLW1lc3NhZ2UiKS5odG1sKCkpOworICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGRhdGEuZ290b1VybCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSk7CisKKworICAgICQoJyNicmVhZGNydW1iID4gbGknKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mcmFycjs8L3NwYW4+Jyk7CisgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0JykuYWRkQ2xhc3MoImFjdGl2ZSIpOworICAgICQoJyNicmVhZGNydW1iID4gbGk6bGFzdCA+IHNwYW4nKS5yZW1vdmUoKTsKKworICAgICQoIiNidWlsZC1tZW51IGxpIGEiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAvKiBTZXQgdGhlIHBhZ2UgYWN0aXZlIHN0YXRlIGluIHRoZSBCdWlsZCBtZW51ICovCisgICAgICB2YXIgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCc/JylbMF07CisgICAgICBpZiAoY3VycmVudFVybCA9PT0gJCh0aGlzKS5wcm9wKCJocmVmIikpeworICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCJhY3RpdmUiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAvKiBTcGVjaWFsIGNhc2UgdGhlIGNvbmZpZ3ZhciBhcyB0aGlzIGlzIHBhcnQgb2YgY29uZmlndXJhdGlvbgorICAgICAgICogcGFnZSBidXQgaXMgYSBzZXBhcmF0ZSB1cmwKKyAgICAgICAqLworICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9PT0gY29uZmlnVmFyVXJsKXsKKyAgICAgICAgICAkKCIjbWVudS1jb25maWd1cmF0aW9uIikuYWRkQ2xhc3MoImFjdGl2ZSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgIH0pOworIDwvc2NyaXB0PgorCis8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0iZGVsZXRlZC1idWlsZC1tZXNzYWdlIj4KKyAgWW91IGhhdmUgZGVsZXRlZCAxIGJ1aWxkOiA8c3Ryb25nPnt7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdHxmaWVsZF92YWx1ZXM6InRhcmdldCJ8am9pbjoiLCAifX0ge3tidWlsZC5tYWNoaW5lfX08L3N0cm9uZz4gY29tcGxldGVkIG9uIDxzdHJvbmc+e3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9zdHJvbmc+Cis8L3NwYW4+CisKKzxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBpZD0iZGVsZXRlLWJ1aWxkLW1vZGFsIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIGRhdGEtYmFja2Ryb3A9InN0YXRpYyIgZGF0YS1rZXlib2FyZD0iZmFsc2UiPgorICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciPgorICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgIDxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIGJ1aWxkIDxzdHJvbmc+e3tidWlsZC5nZXRfc29ydGVkX3RhcmdldF9saXN0fGZpZWxkX3ZhbHVlczoidGFyZ2V0Inxqb2luOiIsICJ9fSB7e2J1aWxkLm1hY2hpbmV9fTwvc3Ryb25nPiBjb21wbGV0ZWQgb24gPHN0cm9uZz57e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L3N0cm9uZz4/PC9wPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICA8YnV0dG9uIGlkPSJkZWxldGUtYnVpbGQtY29uZmlybSIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiPgorICAgICAgICAgIDxzcGFuIGRhdGEtcm9sZT0ic3VibWl0LXN0YXRlIj5EZWxldGUgYnVpbGQ8L3NwYW4+CisgICAgICAgICAgPHNwYW4gZGF0YS1yb2xlPSJsb2FkaW5nLXN0YXRlIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmYS1wdWxzZSI+CisgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNwaW5uZXIiPjwvaT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgJm5ic3A7RGVsZXRpbmcgYnVpbGQuLi4KKyAgICAgICAgICA8L3NwYW4+CisgICAgICAgIDwvYnV0dG9uPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2FuY2VsPC9idXR0b24+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj48IS0tIC8ubW9kYWwtY29udGVudCAtLT4KKyAgPC9kaXY+PCEtLSAvLm1vZGFsLWRpYWxvZyAtLT4KKzwvZGl2PiA8IS0tIC8gbW9kYWwgLS0+CisKKzxkaXYgY2xhc3M9InJvdyI+CiAgIDwhLS0gYnJlYWRjcnVtYnMgLS0+Ci0gIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiIgaWQ9ImJyZWFkY3J1bWIiPgogICAgICAgPGxpPjxhIGhyZWY9InslIHByb2plY3RfdXJsIGJ1aWxkLnByb2plY3QgJX0iPnt7YnVpbGQucHJvamVjdC5uYW1lfX08L2E+PC9saT4KICAgICAgIHslIGlmIG5vdCBidWlsZC5wcm9qZWN0LmlzX2RlZmF1bHQgJX0KQEAgLTIwLDczICsxMDYsNTYgQEAKICAgICAgIDwvbGk+CiAgICAgICB7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX17JSBlbmRibG9jayAlfQogICAgIDwvdWw+Ci0gICAgPHNjcmlwdD4KLSAgICAgICQoIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaScpLmFwcGVuZCgnPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4nKTsKLSAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0JykuYWRkQ2xhc3MoImFjdGl2ZSIpOwotICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QgPiBzcGFuJykucmVtb3ZlKCk7Ci0gICAgICB9KTsKLSAgICA8L3NjcmlwdD4KICAgPC9kaXY+Cis8L2Rpdj4KIAotICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgIDwhLS0gYmVnaW4gbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KLSAgICA8ZGl2IGlkPSJuYXYiIGNsYXNzPSJzcGFuMiI+Ci0gICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtbGlzdCB3ZWxsIj4KLSAgICAgICAgPGxpCi0gICAgICAgICAgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSA9PSAnYnVpbGRkYXNoYm9hcmQnICAlfQotICAgICAgICAgICAgY2xhc3M9ImFjdGl2ZSIKLSAgICAgICAgICB7JSBlbmRpZiAlfSA+Ci0gICAgICAgICAgPGEgY2xhc3M9Im5hdi1wYXJlbnQiIGhyZWY9InslIHVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrICV9Ij5CdWlsZCBzdW1tYXJ5PC9hPgotICAgICAgICA8L2xpPgotICAgICAgICB7JSBpZiBidWlsZC50YXJnZXRfc2V0LmFsbC4wLmlzX2ltYWdlIGFuZCBidWlsZC5vdXRjb21lID09IDAgJX0KLSAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkltYWdlczwvbGk+Ci0gICAgICAgICAgeyUgYmxvY2sgbmF2LXRhcmdldCAlfQotICAgICAgICAgICAgeyUgZm9yIHQgaW4gYnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdCAlfQotICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHQucGsgJX0iPnt7dC50YXJnZXR9fTwvYT48bGk+Ci0gICAgICAgICAgICB7JSBlbmRmb3IgJX0KLSAgICAgICAgICB7JSBlbmRibG9jayAlfQotICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkJ1aWxkPC9saT4KLSAgICAgICAgeyUgYmxvY2sgbmF2LWNvbmZpZ3VyYXRpb24gJX0KLSAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgotICAgICAgICB7JSBlbmRibG9jayAlfQotICAgICAgICB7JSBibG9jayBuYXYtdGFza3MgJX0KLSAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0iPlRhc2tzPC9hPjwvbGk+Ci0gICAgICAgIHslIGVuZGJsb2NrICV9Ci0gICAgICAgIHslIGJsb2NrIG5hdi1yZWNpcGVzICV9Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KLSAgICAgICAgeyUgZW5kYmxvY2sgJX0KLSAgICAgICAgeyUgYmxvY2sgbmF2LXBhY2thZ2VzICV9Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2xpPgotICAgICAgICB7JSBlbmRibG9jayAlfQotICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+UGVyZm9ybWFuY2U8L2xpPgotICAgICAgICB7JSBibG9jayBuYXYtYnVpbGR0aW1lICV9Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgotICAgICAgICB7JSBlbmRibG9jayAlfQotICAgICAgICB7JSBibG9jayBuYXYtY3B1dGltZSAlfQotICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2NwdXRpbWUnIGJ1aWxkLnBrICV9Ij5DUFUgdXNhZ2U8L2E+PC9saT4KLSAgICAgICAgeyUgZW5kYmxvY2sgJX0KLSAgICAgICAgeyUgYmxvY2sgbmF2LWRpc2tpbyAlfQotICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2Rpc2tpbycgYnVpbGQucGsgJX0iPkRpc2sgSS9PPC9hPjwvbGk+Ci0gICAgICAgIHslIGVuZGJsb2NrICV9CisgIDwhLS0gYmVnaW4gbGVmdCBzaWRlYmFyIGNvbnRhaW5lciBmb3IgYnVpbGRzIHdoaWNoIHN0YXJ0ZWQgcHJvcGVybHkgLS0+CisgIHslIGlmIGJ1aWxkLnN0YXJ0ZWQgJX0KKyAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgPGRpdiBpZD0ibmF2IiBjbGFzcz0iY29sLW1kLTIiPgorICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMgbmF2LXN0YWNrZWQiIGlkPSJidWlsZC1tZW51Ij4KKyAgICAgICAgICA8bGkgaWQ9Im1lbnUtZGFzaGJvYXJkIgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSA9PSAnYnVpbGRkYXNoYm9hcmQnICAlfQorICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIgorICAgICAgICAgICAgeyUgZW5kaWYgJX0gPgorICAgICAgICAgICAgPGEgIGhyZWY9InslIHVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrICV9Ij5CdWlsZCBzdW1tYXJ5PC9hPgorICAgICAgICAgIDwvbGk+CisgICAgICAgICAgeyUgaWYgYnVpbGQuaGFzX2ltYWdlcyBhbmQgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX0KKyAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciIgZGF0YS1tZW51LWhlYWRpbmc9ImltYWdlcyI+SW1hZ2VzPC9saT4KKyAgICAgICAgICAgIHslIGJsb2NrIG5hdi10YXJnZXQgJX0KKyAgICAgICAgICAgICAgeyUgZm9yIHQgaW4gYnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdCAlfQorICAgICAgICAgICAgICAgIHslIGlmIHQuaGFzX2ltYWdlcyAlfQorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJtZW51LXt7dC50YXJnZXR9fSI+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHQucGsgJX0iPnt7dC50YXJnZXR9fTwvYT48bGk+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5CdWlsZDwvbGk+CisgICAgICAgICAgICA8bGkgaWQ9Im1lbnUtY29uZmlndXJhdGlvbiI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+UGFja2FnZXM8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+UGVyZm9ybWFuY2U8L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnY3B1dGltZScgYnVpbGQucGsgJX0iPkNQVSB1c2FnZTwvYT48L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnZGlza2lvJyBidWlsZC5wayAlfSI+RGlzayBJL088L2E+PC9saT4KIAotICAgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIiPjwvbGk+Ci0KLSAgICAgICAgPGxpPgotICAgICAgICAgIDxwIGNsYXNzPSJuYXZiYXItYnRuIj4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLWJsb2NrIiBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAnY29va2VybG9nJyBidWlsZC5pZCAlfSI+Ci0gICAgICAgICAgICAgIERvd25sb2FkIGJ1aWxkIGxvZworICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+QWN0aW9uczwvbGk+CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgJ2Nvb2tlcmxvZycgYnVpbGQuaWQgJX0iPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1kb3dubG9hZC1hbHQiPjwvc3Bhbj4KKyAgICAgICAgICAgIERvd25sb2FkIGJ1aWxkIGxvZwogICAgICAgICAgICAgPC9hPgotICAgICAgICAgIDwvcD4KLSAgICAgICAgPC9saT4KKyAgICAgICAgICA8L2xpPgogCi0gICAgICAgIHslIHdpdGggYnVpbGQuZ2V0X2N1c3RvbV9pbWFnZV9yZWNpcGVzIGFzIGN1c3RvbV9pbWFnZV9yZWNpcGVzICV9Ci0gICAgICAgICAgeyUgaWYgY3VzdG9tX2ltYWdlX3JlY2lwZXMuY291bnQgPiAwICV9Ci0gICAgICAgICAgICA8IS0tIGVkaXQgY3VzdG9tIGltYWdlIGJ1aWx0IGR1cmluZyB0aGlzIGJ1aWxkIC0tPgotICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICA8cCBjbGFzcz0ibmF2YmFyLWJ0biIgZGF0YS1yb2xlPSJlZGl0LWN1c3RvbS1pbWFnZS10cmlnZ2VyIj4KLSAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIj5FZGl0IGN1c3RvbSBpbWFnZTwvYnV0dG9uPgorICAgICAgICAgIHslIHdpdGggYnVpbGQuZ2V0X2N1c3RvbV9pbWFnZV9yZWNpcGVzIGFzIGN1c3RvbV9pbWFnZV9yZWNpcGVzICV9CisgICAgICAgICAgICB7JSBpZiBjdXN0b21faW1hZ2VfcmVjaXBlcy5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgPCEtLSBlZGl0IGN1c3RvbSBpbWFnZSBidWlsdCBkdXJpbmcgdGhpcyBidWlsZCAtLT4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGRhdGEtcm9sZT0iZWRpdC1jdXN0b20taW1hZ2UtdHJpZ2dlciI+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgICBFZGl0IGN1c3RvbSBpbWFnZQorICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICdlZGl0Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbCcgJX0KICAgICAgICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgICAgdmFyIGVkaXRhYmxlQ3VzdG9tSW1hZ2VSZWNpcGVzID0ge3sgY3VzdG9tX2ltYWdlX3JlY2lwZXMgfCBvYmplY3RzX3RvX2RpY3Rpb25hcmllczoiaWQsbmFtZSIgfCBqc29uIH19OwpAQCAtMTExLDQ3ICsxODAsNTUgQEAKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIHslIGVuZHdpdGggJX0KIAotICAgICAgICA8bGk+Ci0gICAgICAgICAgPCEtLSBuZXcgY3VzdG9tIGltYWdlIGZyb20gaW1hZ2UgcmVjaXBlIGluIHRoaXMgYnVpbGQgLS0+Ci0gICAgICAgICAgPHAgY2xhc3M9Im5hdmJhci1idG4iIGRhdGEtcm9sZT0ibmV3LWN1c3RvbS1pbWFnZS10cmlnZ2VyIj4KLSAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2siPk5ldyBjdXN0b20gaW1hZ2U8L2J1dHRvbj4KLSAgICAgICAgICA8L3A+Ci0gICAgICAgICAgeyUgaW5jbHVkZSAnbmV3Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbCcgJX0KLSAgICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICAgLy8gaW1hZ2VSZWNpcGVzIGluY2x1ZGVzIGJvdGggY3VzdG9tIGltYWdlIHJlY2lwZXMgYW5kIGJ1aWx0LWluCi0gICAgICAgICAgICAvLyBpbWFnZSByZWNpcGVzLCBhbnkgb2Ygd2hpY2ggY2FuIGJlIHVzZWQgYXMgdGhlIGJhc2lzIGZvciBhCi0gICAgICAgICAgICAvLyBuZXcgY3VzdG9tIGltYWdlCi0gICAgICAgICAgICB2YXIgaW1hZ2VSZWNpcGVzID0ge3sgYnVpbGQuZ2V0X2ltYWdlX3JlY2lwZXMgfCBvYmplY3RzX3RvX2RpY3Rpb25hcmllczoiaWQsbmFtZSIgfCBqc29uIH19OworICAgICAgICAgICAgPCEtLSBuZXcgY3VzdG9tIGltYWdlIGZyb20gaW1hZ2UgcmVjaXBlIGluIHRoaXMgYnVpbGQgLS0+CisgICAgICAgICAgICB7JSBpZiBidWlsZC5oYXNfaW1hZ2VfcmVjaXBlcyAlfQorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSIjIiAgZGF0YS1yb2xlPSJuZXctY3VzdG9tLWltYWdlLXRyaWdnZXIiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICBOZXcgY3VzdG9tIGltYWdlCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgeyUgaW5jbHVkZSAnbmV3Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbCcgJX0KKyAgICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICAvLyBpbWFnZVJlY2lwZXMgaW5jbHVkZXMgYm90aCBjdXN0b20gaW1hZ2UgcmVjaXBlcyBhbmQgYnVpbHQtaW4KKyAgICAgICAgICAgICAgICAvLyBpbWFnZSByZWNpcGVzLCBhbnkgb2Ygd2hpY2ggY2FuIGJlIHVzZWQgYXMgdGhlIGJhc2lzIGZvciBhCisgICAgICAgICAgICAgICAgLy8gbmV3IGN1c3RvbSBpbWFnZQorICAgICAgICAgICAgICAgIHZhciBpbWFnZVJlY2lwZXMgPSB7eyBidWlsZC5nZXRfaW1hZ2VfcmVjaXBlcyB8IG9iamVjdHNfdG9fZGljdGlvbmFyaWVzOiJpZCxuYW1lIiB8IGpzb24gfX07CiAKLSAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgdmFyIG5ld0N1c3RvbUltYWdlTW9kYWwgPSAkKCcjbmV3LWN1c3RvbS1pbWFnZS1tb2RhbCcpOwotICAgICAgICAgICAgICB2YXIgbmV3Q3VzdG9tSW1hZ2VUcmlnZ2VyID0gJCgnW2RhdGEtcm9sZT0ibmV3LWN1c3RvbS1pbWFnZS10cmlnZ2VyIl0nKTsKKyAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICB2YXIgbmV3Q3VzdG9tSW1hZ2VNb2RhbCA9ICQoJyNuZXctY3VzdG9tLWltYWdlLW1vZGFsJyk7CisgICAgICAgICAgICAgICAgICB2YXIgbmV3Q3VzdG9tSW1hZ2VUcmlnZ2VyID0gJCgnW2RhdGEtcm9sZT0ibmV3LWN1c3RvbS1pbWFnZS10cmlnZ2VyIl0nKTsKIAotICAgICAgICAgICAgICAvLyBzaG93IGNyZWF0ZSBuZXcgY3VzdG9tIGltYWdlIG1vZGFsIHRvIHNlbGVjdCBhbiBpbWFnZSBidWlsdAotICAgICAgICAgICAgICAvLyBkdXJpbmcgdGhpcyBidWlsZCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjdXN0b20gcmVjaXBlCi0gICAgICAgICAgICAgIG5ld0N1c3RvbUltYWdlVHJpZ2dlci5jbGljayhmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbWFnZVJlY2lwZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgLy8gc2hvdyBjcmVhdGUgbmV3IGN1c3RvbSBpbWFnZSBtb2RhbCB0byBzZWxlY3QgYW4gaW1hZ2UgYnVpbHQKKyAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyB0aGlzIGJ1aWxkIGFzIHRoZSBiYXNpcyBmb3IgdGhlIGN1c3RvbSByZWNpcGUKKyAgICAgICAgICAgICAgICAgIG5ld0N1c3RvbUltYWdlVHJpZ2dlci5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW1hZ2VSZWNpcGVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbmV3Q3VzdG9tSW1hZ2VNb2RhbFNldFJlY2lwZXMoaW1hZ2VSZWNpcGVzKTsKLSAgICAgICAgICAgICAgICBuZXdDdXN0b21JbWFnZU1vZGFsLm1vZGFsKCdzaG93Jyk7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwvbGk+Ci0gICAgICA8L3VsPgorICAgICAgICAgICAgICAgICAgICBuZXdDdXN0b21JbWFnZU1vZGFsU2V0UmVjaXBlcyhpbWFnZVJlY2lwZXMpOworICAgICAgICAgICAgICAgICAgICBuZXdDdXN0b21JbWFnZU1vZGFsLm1vZGFsKCdzaG93Jyk7CisgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQogCisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBocmVmPSIjZGVsZXRlLWJ1aWxkLW1vZGFsIiBpZD0iZGVsZXRlLWJ1aWxkIiBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjZGVsZXRlLWJ1aWxkLW1vZGFsIiBjbGFzcz0idGV4dC1kYW5nZXIiPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10cmFzaCI+PC9zcGFuPgorICAgICAgICAgICAgICBEZWxldGUgYnVpbGQKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorICAgICAgPCEtLSBlbmQgbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KKyAgICB7JSBlbmRpZiAlfQorCisgICAgPCEtLSByaWdodCBjb250YWluZXI7IG5lZWQgY2xhc3M9InJvdyIgZm9yIGJ1aWxkcyB3aXRob3V0IGxlZnQtaGFuZCBtZW51IC0tPgorICAgIDxkaXZ7JSBpZiBub3QgYnVpbGQuc3RhcnRlZCAlfSBjbGFzcz0icm93InslIGVuZGlmICV9PgorICAgICAgeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfXslIGVuZGJsb2NrICV9CiAgICAgPC9kaXY+Ci0gICAgPCEtLSBlbmQgbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KLQotICAgIDwhLS0gYmVnaW4gcmlnaHQgY29udGFpbmVyIC0tPgotICAgIHslIGJsb2NrIGJ1aWxkaW5mb21haW4gJX17JSBlbmRibG9jayAlfQotICAgIDwhLS0gZW5kIHJpZ2h0IGNvbnRhaW5lciAtLT4KICAgPC9kaXY+CiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdHBhZ2UuaHRtbAppbmRleCA4Nzc4MzA1Li44NDI3ZDI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdHBhZ2UuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdHBhZ2UuaHRtbApAQCAtNywyNCArNywyNCBAQAogCiB7JSBibG9jayBwYWdlY29udGVudCAlfQogCi17JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7Ci0gICAgICQoIiNjb25maWctbmF2IC5uYXYgbGkgYSIpLmVhY2goZnVuY3Rpb24oKXsKLSAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09PSAkKHRoaXMpLmF0dHIoJ2hyZWYnKSkKLSAgICAgICAgICQodGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpOwotICAgICAgIGVsc2UKLSAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOwotICAgICB9KTsKKzxkaXYgY2xhc3M9InJvdyI+CisgIHslIGluY2x1ZGUgInByb2plY3R0b3BiYXIuaHRtbCIgJX0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKKyAgICAkKCIjY29uZmlnLW5hdiAubmF2IGxpIGEiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09PSAkKHRoaXMpLmF0dHIoJ2hyZWYnKSkKKyAgICAgICQodGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpOworICAgICAgZWxzZQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CisgICAgICB9KTsKIAotICAgICAkKCIjdG9wYmFyLWNvbmZpZ3VyYXRpb24tdGFiIikuYWRkQ2xhc3MoImFjdGl2ZSIpCi0gIH0pOwotPC9zY3JpcHQ+CisgICAgJCgiI3RvcGJhci1jb25maWd1cmF0aW9uLXRhYiIpLmFkZENsYXNzKCJhY3RpdmUiKQorICAgIH0pOworICA8L3NjcmlwdD4KIAotPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KICAgPCEtLSBvbmx5IG9uIGNvbmZpZyBwYWdlcyAtLT4KLSAgPGRpdiBpZD0iY29uZmlnLW5hdiIgY2xhc3M9InNwYW4yIj4KLSAgICA8dWwgY2xhc3M9Im5hdiBuYXYtbGlzdCB3ZWxsIj4KKyAgPGRpdiBpZD0iY29uZmlnLW5hdiIgY2xhc3M9ImNvbC1tZC0yIj4KKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMgbmF2LXN0YWNrZWQiPgogICAgICAgPGxpPjxhIGNsYXNzPSJuYXYtcGFyZW50IiBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+Q29tcGF0aWJsZSBtZXRhZGF0YTwvbGk+CiAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0Y3VzdG9taW1hZ2VzJyBwcm9qZWN0LmlkICV9Ij5DdXN0b20gaW1hZ2VzPC9hPjwvbGk+CkBAIC0zNCwxMiArMzQsMTggQEAKICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iPkxheWVyczwvYT48L2xpPgogICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5FeHRyYSBjb25maWd1cmF0aW9uPC9saT4KICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3Rjb25mJyBwcm9qZWN0LmlkICV9Ij5CaXRCYWtlIHZhcmlhYmxlczwvYT48L2xpPgorCisgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkFjdGlvbnM8L2xpPgorICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjZGVsZXRlLXByb2plY3QtbW9kYWwiIHJvbGU9ImJ1dHRvbiIgY2xhc3M9InRleHQtZGFuZ2VyIiBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjZGVsZXRlLXByb2plY3QtbW9kYWwiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXRyYXNoIHRleHQtZGFuZ2VyIj48L2k+IERlbGV0ZSBwcm9qZWN0PC9hPgorICAgICAgPC9saT4KICAgICA8L3VsPgogICA8L2Rpdj4KLSAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTEwIj4KICAgICB7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX17JSBlbmRibG9jayAlfQogICA8L2Rpdj4KLTwvZGl2PgogCis8L2Rpdj4KIHslIGVuZGJsb2NrICV9CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV9ib3R0b20uaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV9ib3R0b20uaHRtbAppbmRleCBjZTAyM2Y1Li5hMjAxMWZhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfYm90dG9tLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX2JvdHRvbS5odG1sCkBAIC0yLDEyICsyLDEwIEBACiAgICAgPC90YWJsZT4KIAogPCEtLSBTaG93IHBhZ2luYXRpb24gY29udHJvbHMgLS0+Ci08ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIHBhZ2luYXRpb24tY2VudGVyZWQiPgotICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KLSAgIFNob3dpbmcge3tvYmplY3RzLnN0YXJ0X2luZGV4fX0gdG8ge3tvYmplY3RzLmVuZF9pbmRleH19IG91dCBvZiB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gZW50cmllcy4KLSAgIDwvZGl2PgorPGRpdiBpZD0icGFnaW5hdGlvbi1iYXNldGFibGVfYm90dG9tIj4KKyAgIDwhLS1zcGFuIGNsYXNzPSJoZWxwLWlubGluZSI+U2hvd2luZyB7e29iamVjdHMuc3RhcnRfaW5kZXh9fSB0byB7e29iamVjdHMuZW5kX2luZGV4fX0gb3V0IG9mIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSBlbnRyaWVzLjwvc3Bhbi0tPgogCi0gICA8dWwgY2xhc3M9InBhZ2luYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBibG9jay1pbmxpbmUiPgorICAgPHVsIGNsYXNzPSJwYWdpbmF0aW9uIj4KIHslaWYgb2JqZWN0cy5oYXNfcHJldmlvdXMgJX0KICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7b2JqZWN0cy5wcmV2aW91c19wYWdlX251bWJlcn19fSkiPiZsYXF1bzs8L2E+PC9saT4KIHslZWxzZSV9CkBAIC0yMiwxNiArMjAsMTggQEAKICAgPGxpIGNsYXNzPSJkaXNhYmxlZCI+PGEgaHJlZj0iIyI+JnJhcXVvOzwvYT48L2xpPgogeyVlbmRpZiV9CiAgIDwvdWw+Ci0gIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgotICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+Ci0gICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUiPgotICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgIDxmb3JtIGNsYXNzPSJuYXZiYXItZm9ybSBuYXZiYXItcmlnaHQiPgorICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgPGxhYmVsPlNob3cgcm93czo8L2xhYmVsPgorICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIHBhZ2VzaXplIj4KKyAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CiAgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KLSAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KICAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICB7JSBlbmR3aXRoICV9Ci0gICAgPC9zZWxlY3Q+Ci0gICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgPC9zZWxlY3Q+CisgICAgPC9kaXY+CisgIDwvZm9ybT4KIDwvZGl2PgogCiA8IS0tIFVwZGF0ZSBwYWdlIGRpc3BsYXkgc2V0dGluZ3MgLS0+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wLmh0bWwKaW5kZXggMGRkZDc0OS4uNWE5MDc2ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcC5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV90b3AuaHRtbApAQCAtMTU5LDY2ICsxNTksODMgQEAKICAgICA8L3NjcmlwdD4KIAogPCEtLSBjb250cm9sIGhlYWRlciAtLT4KLTxkaXYgY2xhc3M9Im5hdmJhciI+Ci0gICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KLSAgICAgICAgPGZvcm0gY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCBzcGFuNiIgaWQ9InNlYXJjaGZvcm0iPgotICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7JWlmIG9iamVjdF9zZWFyY2hfZGlzcGxheSAlfXt7b2JqZWN0X3NlYXJjaF9kaXNwbGF5fX17JWVsc2UlfXt7b2JqZWN0bmFtZX19eyVlbmRpZiV9IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JWVuZGlmJX0KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yZGVyYnkiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULm9yZGVyYnl9fSI+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0iMSI+Ci0gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGlkPSJzZWFyY2gtYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgotICAgICAgICA8L2Zvcm0+Ci0gICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgoteyUgaWYgdGFibGVjb2xzICV9Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgotICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImVkaXQtY29sdW1ucy1idXR0b24iIGNsYXNzPSJidG4gZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkVkaXQgY29sdW1ucwotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKzxkaXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZGVmYXVsdCI+CisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CisgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUgY29sbGFwc2VkIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtdGFyZ2V0PSIjdGFibGUtY2hyb21lLWNvbGxhcHNlLXZhcmlhYmxlaGlzdG9yeSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPgorICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIHRhYmxlIG9wdGlvbnM8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CisgICAgICA8L2J1dHRvbj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2UiIGlkPSJ0YWJsZS1jaHJvbWUtY29sbGFwc2UtdmFyaWFibGVoaXN0b3J5Ij4KKyAgICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItZm9ybSBuYXZiYXItbGVmdCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7JWlmIG9iamVjdF9zZWFyY2hfZGlzcGxheSAlfXt7b2JqZWN0X3NlYXJjaF9kaXNwbGF5fX17JWVsc2UlfXt7b2JqZWN0bmFtZX19eyVlbmRpZiV9IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz4KKyAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgdGFiaW5kZXg9Ii0xIj48c3BhbiBjbGFzcz0icmVtb3ZlLXNlYXJjaC1idG4tdmFyaWFibGVzIGdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlLWNpcmNsZSI+PC9zcGFuPjwvYT57JWVuZGlmJX0KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yZGVyYnkiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULm9yZGVyYnl9fSI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSIxIj4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBpZD0ic2VhcmNoLWJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDwvZm9ybT4KKyAgICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItZm9ybSBuYXZiYXItcmlnaHQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICA8bGFiZWw+U2hvdyByb3dzOjwvbGFiZWw+CisgICAgICAgICAgPHNlbGVjdCBjbGFzcz0icGFnZXNpemUgZm9ybS1jb250cm9sIj4KKyAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Zvcm0+CisKKyAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCBuYXZiYXItcmlnaHQiPgorCQkJCXslIGlmIHRhYmxlY29scyAlfQorCQkJCQk8YnV0dG9uIGlkPSJlZGl0LWNvbHVtbnMtYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IG5hdmJhci1idG4gZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkVkaXQgY29sdW1ucworCQkJCQkJPHNwYW4gY2xhc3M9ImNhcmV0Ij48L3NwYW4+CisJCQkJCTwvYnV0dG9uPgogPCEtLQogCXt7dGFibGVjb2xzfHNvcnRjb2xzfX0KIC0tPgotICAgICAgICAgICAgICAgIDx1bCBpZD0nZWRpdGNvbCcgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgotICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gdGFibGVjb2xzfHNvcnRjb2xzICV9Ci0gICAgICAgICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB7JSBpZiBub3QgaS5jbGNsYXNzICV9IGNsYXNzPSJjaGVja2JveCBtdXRlZCIgeyVlbHNlJX0gY2xhc3M9ImNoZWNrYm94IiB7JWVuZGlmJX0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iY2hieHRvZ2dsZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgaS5jbGNsYXNzICV9CisgICAgICAgIDx1bCBpZD0iZWRpdGNvbCIgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZWRpdGNvbCI+CisgICAgICAgICAgeyUgZm9yIGkgaW4gdGFibGVjb2xzfHNvcnRjb2xzICV9CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3giPgorICAgICAgICAgICAgICA8bGFiZWwgeyUgaWYgbm90IGkuY2xjbGFzcyAlfSBjbGFzcz0ibXV0ZWQiIHslZW5kaWYlfT4KKyAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJjaGJ4dG9nZ2xlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgaS5jbGNsYXNzICV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0ie3tpLmNsY2xhc3N9fSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjdHt7aS5uYW1lfX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBub3QgaS5oaWRkZW4gJX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPSJjaGVja2VkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD0iY2hlY2tlZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0ic2hvd2hpZGVUYWJsZUNvbHVtbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2lkJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5pcygnOmNoZWNrZWQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBpLm9yZGVyaWNvbiAlfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7e2kub3JkZXJrZXl9fScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuaXMoJzpjaGVja2VkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBpLm9yZGVyaWNvbiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t7aS5vcmRlcmtleX19JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslZWxzZSV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkIGRpc2FibGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Lz4gICB7e2kubmFtZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Lz57e2kubmFtZX19CisgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICA8L2Rpdj4KLXslIGVuZGlmICV9Ci0gICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgotICAgICAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplIj4KLSAgICAgICAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQotICAgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9Ci0gICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4gPCEtLSBuYXZiYXItaW5uZXIgLS0+Ci08L2Rpdj4KKyAgICAgICAgICA8L2xpPgorICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L3VsPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgPC9kaXY+CisgICAgPC9kaXY+IDwhLS0gbmF2YmFyLWNvbGxhcHNlIC0tPgorCTwvZGl2PiA8IS0tIGNvbnRhaW5lci1mbHVpZCAtLT4KKzwvZGl2PiA8IS0tIG5hdmJhci1kZWZhdWx0IC0tPgogCiA8IS0tIHRoZSBhY3R1YWwgcm93cyBvZiB0aGUgdGFibGUgLS0+CiAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Im90YWJsZSI+CkBAIC0yMjYsMTEgKzI0MywxMSBAQAogICAgICAgICA8IS0tIFRhYmxlIGhlYWRlciByb3c7IGdlbmVyYXRlZCBmcm9tICJ0YWJsZWNvbHMiIGVudHJ5IGluIHRoZSBjb250ZXh0IGRpY3QgLS0+CiAgICAgICAgIDx0cj4KICAgICAgICAgICAgIHslIGZvciB0YyBpbiB0YWJsZWNvbHMgJX08dGggY2xhc3M9InslaWYgdGMuZGNsYXNzJX17e3RjLmRjbGFzc319eyVlbmRpZiV9IHslIGlmIHRjLmNsY2xhc3MgJX17e3RjLmNsY2xhc3N9fXslIGVuZGlmICV9Ij4KLSAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9Ci0gICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmZpZWxkJX08YSB7JWlmIHRjLm9yZGVyaWNvbiV9IGNsYXNzPSJzb3J0ZWQiIHslZW5kaWYlfWhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOiAxLCAnb3JkZXJieScgOiAne3t0Yy5vcmRlcmZpZWxkfX0nIH0pIj57e3RjLm5hbWV9fTwvYT57JWVsc2UlfTxzcGFuIGNsYXNzPSJtdXRlZCI+e3t0Yy5uYW1lfX08L3NwYW4+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5xaGVscCV9PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Int7dGMucWhlbHB9fSI+PC9zcGFuPnslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslaWYgdGMub3JkZXJmaWVsZCV9PGEgeyVpZiB0Yy5vcmRlcmljb24lfSBjbGFzcz0ic29ydGVkIiB7JWVuZGlmJX1ocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzogMSwgJ29yZGVyYnknIDogJ3t7dGMub3JkZXJmaWVsZH19JyB9KSI+e3t0Yy5uYW1lfX08L2E+eyVlbHNlJX08c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+e3t0Yy5uYW1lfX08L3NwYW4+eyVlbmRpZiV9CiAgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmljb24lfSA8aSBjbGFzcz0iaWNvbi1jYXJldC17e3RjLm9yZGVyaWNvbn19Ij48L2k+eyVlbmRpZiV9CiAgICAgICAgICAgICAgICAgeyVpZiB0Yy5maWx0ZXIlfTxkaXYgY2xhc3M9ImJ0bi1ncm91cCBwdWxsLXJpZ2h0Ij4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpbHRlcl97e3RjLmZpbHRlci5jbGFzc319IiByb2xlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW1pbmkgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIlfXt7dGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfaWNvbjpyZXF1ZXN0LkdFVC5maWx0ZXJ9fSB7JWVuZGlmJX0iIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCB0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF90b29sdGlwOnJlcXVlc3QuR0VULmZpbHRlciAlfSB0aXRsZT0iPHA+e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF90b29sdGlwOnJlcXVlc3QuR0VULmZpbHRlcn19PC9wPjxwPjxhIGNsYXNzPSdidG4gYnRuLXNtYWxsIGJ0bi1wcmltYXJ5JyBocmVmPWphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J2ZpbHRlcic6Jyd9KT5TaG93IGFsbCB7JSBpZiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXkgJX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheX19eyUgZWxzZSAlfXt7b2JqZWN0bmFtZX19eyUgZW5kaWYgJX08L2E+PC9wPiIgeyVlbmRpZiV9IGRhdGEtdG9nZ2xlPSJtb2RhbCI+IDxpIGNsYXNzPSJpY29uLWZpbHRlciBmaWx0ZXJlZCI+PC9pPiA8L2E+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNmaWx0ZXJfe3t0Yy5maWx0ZXIuY2xhc3N9fSIgcm9sZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi14cyB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciV9e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF9pY29uOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZW5kaWYlfSIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIHRjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyICV9IHRpdGxlPSI8cD57e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyfX08L3A+PHA+PGEgY2xhc3M9J2J0biBidG4tc20gYnRuLXByaW1hcnknIGhyZWY9amF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsnZmlsdGVyJzonJ30pPlNob3cgYWxsIHslIGlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSAlfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fX17JSBlbHNlICV9e3tvYmplY3RuYW1lfX17JSBlbmRpZiAlfTwvYT48L3A+IiB7JWVuZGlmJX0gZGF0YS10b2dnbGU9Im1vZGFsIj4gPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZmlsdGVyIGZpbHRlcmVkIj48L3NwYW4+IDwvYT4KICAgICAgICAgICAgICAgICA8L2Rpdj57JWVuZGlmJX0KICAgICAgICAgICAgIDwvdGg+eyUgZW5kZm9yICV9CiAgICAgICAgIDwvdHI+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icGFja2FnZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnBhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5NzNjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLXslIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KLQoteyUgbG9hZCBwcm9qZWN0dGFncyAlfQotCi17JSBibG9jayB0aXRsZSAlfSBQYWNrYWdlcyBidWlsdCAtIHt7YnVpbGQudGFyZ2V0X3NldC5hbGx8ZGljdHNvcnQ6InRhcmdldCJ8am9pbjoiLCAifX0ge3tidWlsZC5tYWNoaW5lfX0gLSB7e2J1aWxkLnByb2plY3QubmFtZX19IC0gVG9hc3RlciB7JSBlbmRibG9jayAlfQoteyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Ci08bGk+UGFja2FnZXM8L2xpPgoteyUgZW5kYmxvY2sgJX0KLQoteyUgYmxvY2sgbmF2LXBhY2thZ2VzICV9Ci0gIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+UGFja2FnZXM8L2E+PC9saT4KLXslIGVuZGJsb2NrICV9Ci0KLXslIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KLTxkaXYgY2xhc3M9InNwYW4xMCI+Ci0KLXslIGlmIG5vdCByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG5vdCByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG5vdCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAlfQotCi08IS0tIEVtcHR5IC0gbm8gZGF0YSBpbiBkYXRhYmFzZSAtLT4KLTxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KLSAgICA8aDE+Ci0gICAgICAgIFBhY2thZ2VzCi0gICAgPC9oMT4KLTwvZGl2PgotPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIj4KLSAgICA8c3Ryb25nPk5vIHBhY2thZ2VzIHdlcmUgYnVpbHQuPC9zdHJvbmc+IEhvdyBkaWQgdGhpcyBoYXBwZW4/IFdlbGwsIEJpdEJha2UgcmV1c2VzIGFzIG11Y2ggc3R1ZmYgYXMgcG9zc2libGUuCi0gICAgSWYgYWxsIG9mIHRoZSBwYWNrYWdlcyBuZWVkZWQgd2VyZSBhbHJlYWR5IGJ1aWx0IGFuZCBhdmFpbGFibGUgaW4geW91ciBidWlsZCBpbmZyYXN0cnVjdHVyZSwgQml0QmFrZQotICAgIHdpbGwgbm90IHJlYnVpbGQgYW55IG9mIHRoZW0uIFRoaXMgbWlnaHQgYmUgc2xpZ2h0bHkgY29uZnVzaW5nLCBidXQgaXQgZG9lcyBtYWtlIGV2ZXJ5dGhpbmcgZmFzdGVyLgotPC9kaXY+Ci0KLXslIGVsc2UgJX0KLQotPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgotICA8aDE+Ci0gIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICAlfQotICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHBhY2thZ2V7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCi0gIHslZWxpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAlfQotICAgICAgTm8gcGFja2FnZXMgZm91bmQKLSAgeyVlbHNlJX0KLSAgICAgIFBhY2thZ2VzCi0gIHslZW5kaWYlfQotICA8L2gxPgotPC9kaXY+Ci0KLSAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQotICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgotICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KLSAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tyZXF1ZXN0LkdFVC5zZWFyY2h9fSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9Ci0gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+Ci0gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgcGFja2FnZXM8L2J1dHRvbj4KLSAgICAgICAgPC9mb3JtPgotICAgICAgPC9kaXY+Ci0gIDwvZGl2PgotCi0gIHslIGVsc2UgJX0KLSAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQotCi0gICAgeyUgZm9yIHBhY2thZ2UgaW4gb2JqZWN0cyAlfQotCi0gICAgPHRyIGNsYXNzPSJkYXRhIj4KLQotICAgICAgICA8IS0tIFBhY2thZ2UgLS0+Ci0gICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV9uYW1lIj48YSBocmVmPSJ7JSB1cmwgInBhY2thZ2VfYnVpbHRfZGV0YWlsIiBidWlsZC5wayBwYWNrYWdlLnBrICV9Ij57e3BhY2thZ2UubmFtZX19PC9hPjwvdGQ+Ci0gICAgICAgIDwhLS0gUGFja2FnZSBWZXJzaW9uIC0tPgotICAgICAgICA8dGQgY2xhc3M9InBhY2thZ2VfdmVyc2lvbiI+eyVpZiBwYWNrYWdlLnZlcnNpb24lfTxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS52ZXJzaW9ufX0te3twYWNrYWdlLnJldmlzaW9ufX08L2E+eyVlbmRpZiV9PC90ZD4KLSAgICAgICAgPCEtLSBQYWNrYWdlIFNpemUgLS0+Ci0gICAgICAgIDx0ZCBjbGFzcz0ic2l6ZSBzaXplY29sIj57e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KLSAgICAgICAgPCEtLSBMaWNlbnNlIC0tPgotICAgICAgICA8dGQgY2xhc3M9ImxpY2Vuc2UiPnt7cGFja2FnZS5saWNlbnNlfX08L3RkPgotCi0gICAgICAgIHslaWYgcGFja2FnZS5yZWNpcGUlfQotICAgICAgICAgICAgPCEtLSBSZWNpcGUgLS0+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbmFtZSI+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHBhY2thZ2UucmVjaXBlLnBrICV9Ij57e3BhY2thZ2UucmVjaXBlLm5hbWV9fTwvYT48L3RkPgotICAgICAgICAgICAgPCEtLSBSZWNpcGUgVmVyc2lvbiAtLT4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX192ZXJzaW9uIj48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcGFja2FnZS5yZWNpcGUucGsgJX0iPnt7cGFja2FnZS5yZWNpcGUudmVyc2lvbn19PC9hPjwvdGQ+Ci0KLSAgICAgICAgICAgIDwhLS0gTGF5ZXIgLS0+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L3RkPgotICAgICAgICAgICAgPCEtLSBMYXllciBicmFuY2ggLS0+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIj57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNofX08L3RkPgotICAgICAgICAgICAgPCEtLSBMYXllciBjb21taXQgLS0+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCI+Ci0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKLSAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KLSAgICAgICAgICAgICAgICAgICAgICA8bGk+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdH19PC9saT4KLSAgICAgICAgICAgICAgICAgICAgPC91bD4iPgotICAgICAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQotICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8IS0tIExheWVyIGRpcmVjdG9yeSAtLT4KLSAgICAgICAgeyVlbHNlJX0KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19uYW1lIj48L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX3ZlcnNpb24iPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIj48L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQiPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbG9jYWxfcGF0aCI+PC90ZD4KLSAgICAgICAgeyVlbmRpZiV9Ci0KLSAgICA8L3RyPgotICAgIHslIGVuZGZvciAlfQotCi0gIHslIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KLSAgeyUgZW5kaWYgJX0geyMgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgI30KLXslIGVuZGlmICV9IHsjIEVtcHR5ICN9Ci08L2Rpdj4KLXslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZGRhc2hib2FyZC5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRkYXNoYm9hcmQuaHRtbAppbmRleCBhMGRhNzFlLi4wMmEyOTgxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZGRhc2hib2FyZC5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkZGFzaGJvYXJkLmh0bWwKQEAgLTEsOCArMSw5IEBACiB7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9CiB7JSBsb2FkIGh1bWFuaXplICV9CiB7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGZpZWxkX3ZhbHVlc19maWx0ZXIgJX0KIAoteyUgYmxvY2sgdGl0bGUgJX0ge3tidWlsZC50YXJnZXRfc2V0LmFsbHxkaWN0c29ydDoidGFyZ2V0Inxqb2luOiIsICJ9fSB7e2J1aWxkLm1hY2hpbmV9fSAtIHt7YnVpbGQucHJvamVjdC5uYW1lfX0gLSBUb2FzdGVyIHslIGVuZGJsb2NrICV9Cit7JSBibG9jayB0aXRsZSAlfSB7e2J1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3R8ZmllbGRfdmFsdWVzOiJ0YXJnZXQifGpvaW46IiwgIn19IHt7YnVpbGQubWFjaGluZX19IC0ge3tidWlsZC5wcm9qZWN0Lm5hbWV9fSAtIFRvYXN0ZXIgeyUgZW5kYmxvY2sgJX0KIHslIGJsb2NrIHBhcmVudGJyZWFkY3J1bWIgJX0KIHslIGlmIGJ1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QuY291bnQgPiAwICV9CiAgIHt7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdC4wLnRhcmdldH19CkBAIC0xMyw2MSArMTQsNTcgQEAKIAogeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQogPCEtLSBwYWdlIHRpdGxlIC0tPgotPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+Ci0gPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgotICAgICA8aDE+e3tidWlsZC50YXJnZXRfc2V0LmFsbHxkaWN0c29ydDoidGFyZ2V0Inxqb2luOiIsICJ9fSB7e2J1aWxkLm1hY2hpbmV9fTwvaDE+Cis8ZGl2IGNsYXNzPSJ7JSBpZiBidWlsZC5zdGFydGVkICV9Y29sLW1kLTEweyUgZWxzZSAlfWNvbC1tZC0xMnslIGVuZGlmICV9Ij4KKyA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciBidWlsZC1kYXRhIj4KKyAgICAgPGgxPnt7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdHxmaWVsZF92YWx1ZXM6InRhcmdldCJ8am9pbjoiLCAifX0ge3tidWlsZC5tYWNoaW5lfX08L2gxPgogIDwvZGl2PgotPC9kaXY+CiAKIDwhLS0gYnVpbGQgcmVzdWx0IGJhciAtLT4KLTxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAgcHVsbC1yaWdodCI+Ci0gIDxkaXYgY2xhc3M9ImFsZXJ0IHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfWFsZXJ0LXN1Y2Nlc3N7JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfWFsZXJ0LWVycm9yeyVlbHNlJX1hbGVydC1pbmZveyVlbmRpZiV9Ij4KLSAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgbGVhZCI+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1sZWZ0Ij48c3Ryb25nPgotICAgICAgICAgICAgICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfUNvbXBsZXRlZHslZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9RmFpbGVkeyVlbHNlJX17JWVuZGlmJX0KLSAgICAgICAgICAgICAgPC9zdHJvbmc+IG9uCi0gICAgICAgICAgICB7e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX0KLTwvc3Bhbj4KLXslIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCBvciBidWlsZC5lcnJvcnMuY291bnQgJX0KLSZuYnNwO3dpdGgKLXslIGVuZGlmICV9Ci17JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEIG9yIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9Ci17JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9Ci0gICAgIDxzcGFuID4gPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiByZWQiPjwvaT48c3Ryb25nPjxhIGhyZWY9IiNlcnJvcnMiIGNsYXNzPSJlcnJvciBzaG93LWVycm9ycyI+IHt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT48L3N0cm9uZz48L3NwYW4+Ci17JSBlbmRpZiAlfQoteyUgaWYgIGJ1aWxkLndhcm5pbmdzLmNvdW50ICV9Ci17JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9Ci0gICAgYW5kCi17JSBlbmRpZiAlfQotICAgIDxzcGFuID4gPGkgY2xhc3M9Imljb24td2FybmluZy1zaWduIHllbGxvdyI+PC9pPjxzdHJvbmc+PGEgaHJlZj0iI3dhcm5pbmdzIiBjbGFzcz0id2FybmluZyBzaG93LXdhcm5pbmdzIj4ge3tidWlsZC53YXJuaW5ncy5jb3VudH19IHdhcm5pbmd7e2J1aWxkLndhcm5pbmdzLmNvdW50fHBsdXJhbGl6ZX19PC9hPjwvc3Ryb25nPjwvc3Bhbj4KLXslIGVuZGlmICV9Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1yaWdodCI+QnVpbGQgdGltZTogPGEgaHJlZj0ieyUgdXJsICdidWlsZHRpbWUnIGJ1aWxkLnBrICV9Ij57eyBidWlsZC50aW1lc3BlbnRfc2Vjb25kc3xzZWN0b2htcyB9fTwvYT4KLSAgICAgICAgICAgIHslIGlmIGJ1aWxkLmNvb2tlcl9sb2dfcGF0aCAlfQotICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4geyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9YnRuLXN1Y2Nlc3N7JWVsc2UlfWJ0bi1kYW5nZXJ7JWVuZGlmJX0gcHVsbC1yaWdodCBsb2ciIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJjb29rZXJsb2ciIGJ1aWxkLmlkICV9Ij5Eb3dubG9hZCBidWlsZCBsb2c8L2E+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgPC9zcGFuPgorICA8ZGl2IGNsYXNzPSJhbGVydCB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1hbGVydC1zdWNjZXNzeyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX1hbGVydC1kYW5nZXJ7JWVsc2UlfWFsZXJ0LWluZm97JWVuZGlmJX0iPgorCQk8c3Bhbj48c3Ryb25nPnslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfUNvbXBsZXRlZHslZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9RmFpbGVkeyVlbHNlJX17JWVuZGlmJX08L3N0cm9uZz4gb24ge3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9zcGFuPgorCQl7JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgb3IgYnVpbGQuZXJyb3JzLmNvdW50ICV9CisJCTxzcGFuPndpdGg8L3NwYW4+CisJCXslIGVuZGlmICV9CisJCXslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KKwkJCXslIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKwkJCTxhIGhyZWY9IiNlcnJvcnMiIGNsYXNzPSJhbGVydC1saW5rIHNob3ctZXJyb3JzIj4ge3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorCQkJeyUgZW5kaWYgJX0KKwkJCXslIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCAlfQorCQkJCXslIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX1hbmR7JSBlbmRpZiAlfQorCQkJCTxhIGhyZWY9IiN3YXJuaW5ncyIgY2xhc3M9InNob3ctd2FybmluZ3MiPiB7e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX08L2E+CisJCQl7JSBlbmRpZiAlfQorCQkJeyUgaWYgYnVpbGQuY29va2VyX2xvZ19wYXRoICV9CisJCQk8YSBjbGFzcz0icHVsbC1yaWdodCBsb2ciIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJjb29rZXJsb2ciIGJ1aWxkLmlkICV9Ij5Eb3dubG9hZCBidWlsZCBsb2c8L2E+CisJCQl7JSBlbmRpZiAlfQorCQkJPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPgorCQkJCUJ1aWxkIHRpbWU6CisJCQkgIDxzcGFuIGRhdGEtYnVpbGQtZmllbGQ9ImJ1aWxkdGltZSI+CisgICAgICAgICAgeyUgaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+e3sgYnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXMgfX08L2E+CisgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAge3sgYnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXMgfX0KKyAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L3NwYW4+CisgICAgICA8L3NwYW4+CiAKLXslZW5kaWYlfQotICAgIDwvZGl2PgotICA8L2Rpdj4KKwkJeyVlbmRpZiV9CiA8L2Rpdj4KIAogeyUgaWYgYnVpbGQuZXJyb3JzLmNvdW50ICV9Ci08ZGl2IGNsYXNzPSJhY2NvcmRpb24gc3BhbjEwIHB1bGwtcmlnaHQiIGlkPSJlcnJvcnMiPgotICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tZ3JvdXAiPgotICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1oZWFkaW5nIj4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIGVycm9yIHRvZ2dsZS1lcnJvcnMiPgotICAgICAgICAgPGgyIGlkPSJlcnJvci10b2dnbGUiPgotICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIj48L2k+CisgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiIGlkPSJlcnJvcnMiPgorICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPgorICAgICAgPGgyIGNsYXNzPSJwYW5lbC10aXRsZSI+CisgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1taW51cy1zaWduIj48L3NwYW4+CisgICAgICAgICA8YSBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiIGhyZWY9IiNlcnJvci1pbmZvIiBpZD0iZXJyb3ItdG9nZ2xlIj4KICAgICAgICAgICAge3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19Ci0gICAgICAgICA8L2gyPgotICAgICAgPC9hPgorICAgICAgICAgPC9hPgorICAgICAgPC9oMj4KICAgICA8L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSBjb2xsYXBzZSBpbiIgaWQ9ImNvbGxhcHNlLWVycm9ycyI+Ci0gICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taW5uZXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgIDxkaXYgY2xhc3M9InBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIGluIiBpZD0iZXJyb3ItaW5mbyI+CisgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0ieyUgaWYgYnVpbGQuc3RhcnRlZCAlfWNvbC1tZC0xMHslIGVsc2UgJX1jb2wtbWQtMTJ7JSBlbmRpZiAlfSI+CiAgICAgICAgICAgeyUgZm9yIGVycm9yIGluIGJ1aWxkLmVycm9ycyAlfQotICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiIGRhdGEtZXJyb3I9Int7IGVycm9yLmlkIH19Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciIgZGF0YS1sb2ctbWVzc2FnZS1pZD0ie3tlcnJvci5wa319Ij4KICAgICAgICAgICAgICAgPHByZT57e2Vycm9yLm1lc3NhZ2V9fTwvcHJlPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgeyUgZW5kZm9yICV9CkBAIC03NSw1NyArNzIsNjIgQEAKICAgICAgIDwvZGl2PgogICAgIDwvZGl2PgogICA8L2Rpdj4KLTwvZGl2PgogeyUgZW5kaWYgJX0KIAogeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9CiA8IS0tIGJ1aWx0IGltYWdlcyAtLT4KLXslIGlmIGhhc0ltYWdlcyAlfQotPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KLSAgICA8aDI+SW1hZ2VzPC9oMj4KKyAgeyUgaWYgaGFzQXJ0aWZhY3RzICV9CisgICAgPGgyIGRhdGEtaGVhZGluZz0iYnVpbGQtYXJ0aWZhY3RzIj5CdWlsZCBhcnRpZmFjdHM8L2gyPgogICAgIHslIGZvciB0YXJnZXQgaW4gdGFyZ2V0cyAlfQogICAgICAgICB7JSBpZiB0YXJnZXQudGFyZ2V0LmlzX2ltYWdlICV9Ci0gICAgPGRpdiBjbGFzcz0id2VsbCBkYXNoYm9hcmQtc2VjdGlvbiI+Ci0gICAgICAgIDxoMz48YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+e3t0YXJnZXQudGFyZ2V0fX08L2E+Ci0gICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KLSAgICAgICAgICAgIDxkdD5QYWNrYWdlcyBpbmNsdWRlZDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHRhcmdldC50YXJnZXQucGsgJX0iPnt7dGFyZ2V0Lm5wa2d9fTwvYT48L2RkPgotICAgICAgICAgICAgPGR0PlRvdGFsIHBhY2thZ2Ugc2l6ZTwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+e3t0YXJnZXQucGtnc3p8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvZGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXJnZXQudGFyZ2V0SGFzTm9JbWFnZXMgJX0KLSAgICAgICAgICAgICAgICA8L2RsPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gc3BhbjciPgotICAgICAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlRoaXMgYnVpbGQgZGlkIG5vdCBjcmVhdGUgYW55IGltYWdlIGZpbGVzPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB2YWxpZCBpbWFnZSBhbmQgbGljZW5zZSBtYW5pZmVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgZnJvbSBhIHByZXZpb3VzIGJ1aWxkIGFscmVhZHkgZXhpc3QgaW4geW91cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Li4uL3Bva3kvYnVpbGQvdG1wL2RlcGxveTwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4gWW91IGNhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldHBrZycgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+dmlldyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBtYW5pZmVzdCBpbmZvcm1hdGlvbjwvYT4gaW4gVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCBkYXNoYm9hcmQtc2VjdGlvbiIgZGF0YS1hcnRpZmFjdHMtZm9yLXRhcmdldD0ie3t0YXJnZXQudGFyZ2V0LnBrfX0iPgorICAgICAgICB7JSBpZiB0YXJnZXQubnBrZyA+IDAgJX0KKyAgICAgICAgICAgIDxoMz4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSIgZGF0YS1saW5rPSJ0YXJnZXQtcGFja2FnZXMiPgorICAgICAgICAgICAgICAgICAge3t0YXJnZXQudGFyZ2V0LnRhcmdldH19CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9oMz4KKyAgICAgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgICAgICAgICAgPGR0PlBhY2thZ2VzIGluY2x1ZGVkPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0YXJnZXQudGFyZ2V0LnBrICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdmFsdWU9InRhcmdldC1wYWNrYWdlLWNvdW50Ij57e3RhcmdldC5ucGtnfX08L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD5Ub3RhbCBwYWNrYWdlIHNpemU8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS12YWx1ZT0idGFyZ2V0LXBhY2thZ2Utc2l6ZSI+e3t0YXJnZXQucGtnc3p8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPC9kbD4KICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbG9jYXRpb24gaW4gZGlzayBvZiB0aGUgbGljZW5zZSBtYW5pZmVzdCwgYSBkb2N1bWVudCBsaXN0aW5nIGFsbCBwYWNrYWdlcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhbmQgdGhlaXIgbGljZW5zZXMiPjwvaT4KKyAgICAgICAgICAgIDxoMz57e3RhcmdldC50YXJnZXQudGFyZ2V0fX08L2gzPgorICAgICAgICB7JSBlbmRpZiAlfQogCi0gICAgICAgICAgICAgICAgTGljZW5zZSBtYW5pZmVzdAotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldHBrZycgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+VmlldyBpbiBUb2FzdGVyPC9hPiB8Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQucGsgJ2xpY2Vuc2VtYW5pZmVzdCcgdGFyZ2V0LnRhcmdldC5wayAlfSI+RG93bmxvYWQ8L2E+PC9kZD4KKyAgICAgICAgeyUgaWYgdGFyZ2V0LnRhcmdldEhhc0ltYWdlcyAlfQorICAgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CiAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkltYWdlIGZpbGVzIGFyZSBzdG9yZWQgaW4gPGNvZGU+L2J1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzLzwvY29kZT4iPjwvaT4KKyAgICAgICAgICAgICAgTWFuaWZlc3RzCisgICAgICAgICAgICA8L2R0PgorCisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxhIGRhdGEtbGluaz0ibGljZW5zZS1tYW5pZmVzdCIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQucGsgJ2xpY2Vuc2VtYW5pZmVzdCcgdGFyZ2V0LnRhcmdldC5wayAlfSI+TGljZW5zZSBtYW5pZmVzdDwvYT4KKyAgICAgICAgICAgIDwvZGQ+CisKKyAgICAgICAgICAgIHslIGlmIHRhcmdldC50YXJnZXQucGFja2FnZV9tYW5pZmVzdF9wYXRoICV9CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8YSBkYXRhLWxpbms9InBhY2thZ2UtbWFuaWZlc3QiIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICdwYWNrYWdlbWFuaWZlc3QnIHRhcmdldC50YXJnZXQucGsgJX0iPlBhY2thZ2UgbWFuaWZlc3Q8L2E+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDwvZGw+CisKKyAgICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJJbWFnZSBmaWxlcyBhcmUgc3RvcmVkIGluIDxjb2RlPmJ1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzLzwvY29kZT4iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBJbWFnZSBmaWxlcwogICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgICAgICAgIHslIGZvciBpIGluIHRhcmdldC5pbWFnZUZpbGVzICV9CisgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIiBkYXRhLWxpbmtzPSJpbWFnZS1hcnRpZmFjdHMiPgorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiB0YXJnZXQuaW1hZ2VGaWxlc3xkaWN0c29ydDoic3VmZml4IiAlfQogICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICdpbWFnZWZpbGUnIGkuaWQgJX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2kuc3VmZml4fX0KQEAgLTEzNSwxMyArMTM3LDQyIEBACiAgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICA8L2RkPgotICAgICAgICA8L2RsPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIEtlcm5lbCBhcnRpZmFjdHMKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIiBkYXRhLWxpbmtzPSJrZXJuZWwtYXJ0aWZhY3RzIj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGFydGlmYWN0IGluIHRhcmdldC50YXJnZXRfa2VybmVsX2FydGlmYWN0c3xkaWN0c29ydDoiYmFzZW5hbWUiICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgJ3RhcmdldGtlcm5lbGFydGlmYWN0JyBhcnRpZmFjdC5pZCAlfSI+e3thcnRpZmFjdC5iYXNlbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7e2FydGlmYWN0LmZpbGVfc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8L2RsPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiB0YXJnZXQudGFyZ2V0X3Nka19hcnRpZmFjdHNfY291bnQgPiAwICV9CisgICAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgU0RLIGFydGlmYWN0cworICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIiBkYXRhLWxpbmtzPSJzZGstYXJ0aWZhY3RzIj4KKyAgICAgICAgICAgICAgICB7JSBmb3IgYXJ0aWZhY3QgaW4gdGFyZ2V0LnRhcmdldF9zZGtfYXJ0aWZhY3RzfGRpY3Rzb3J0OiJiYXNlbmFtZSIgJX0KKyAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAndGFyZ2V0c2RrYXJ0aWZhY3QnIGFydGlmYWN0LmlkICV9Ij57e2FydGlmYWN0LmJhc2VuYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAoe3thcnRpZmFjdC5maWxlX3NpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkKKyAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8L2RsPgogICAgICAgICB7JSBlbmRpZiAlfQogICAgIDwvZGl2PgogICAgICAgICB7JSBlbmRpZiAlfQogICAgIHslIGVuZGZvciAlfQotPC9kaXY+Ci17JSBlbmRpZiAlfQorICB7JSBlbmRpZiAlfQogCiB7JWVsc2UlfQogPCEtLSBlcnJvciBkdW1wIC0tPgpAQCAtMTQ5LDEzICsxODAsMTIgQEAKIAogPCEtLSBvdGhlciBhcnRpZmFjdHMgLS0+CiB7JSBpZiBidWlsZC5idWlsZGFydGlmYWN0X3NldC5hbGwuY291bnQgPiAwICV9Ci08ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIHB1bGwtcmlnaHQiPgogPGgyPk90aGVyIGFydGlmYWN0czwvaDI+CiAKLSAgICA8ZGl2IGNsYXNzPSJ3ZWxsIGRhc2hib2FyZC1zZWN0aW9uIj4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHdlbGwtdHJhbnNwYXJlbnQgZGFzaGJvYXJkLXNlY3Rpb24iPgogICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgogICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZCBhcnRpZmFjdHMgZGlzY292ZXJlZCBpbiA8aT50bXAvZGVwbG95L2ltYWdlczwvaT4uIFVzdWFsbHkga2VybmVsIGltYWdlcyBhbmQga2VybmVsIG1vZHVsZXMuIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkJ1aWxkIGFydGlmYWN0cyBkaXNjb3ZlcmVkIGluIDxpPnRtcC9kZXBsb3kvaW1hZ2VzPC9pPi4gVXN1YWxseSBrZXJuZWwgaW1hZ2VzIGFuZCBrZXJuZWwgbW9kdWxlcy4iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBPdGhlciBhcnRpZmFjdHM8L2R0PgogICAgICAgICAgICAgPGRkPjxkaXY+CiAgICAgICAgICAgICAgIHslIGZvciBiYSBpbiBidWlsZC5idWlsZGFydGlmYWN0X3NldC5hbGx8ZGljdHNvcnQ6ImZpbGVfbmFtZSIgJX0KQEAgLTE3MCw5MiArMjAwLDk3IEBACiAJPC9kbD4KICAgICA8L2Rpdj4KIAotPC9kaXY+CiB7JSBlbmRpZiAlfQotPCEtLSBidWlsZCBzdW1tYXJ5IC0tPgotPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KLTxoMj5CdWlsZCBzdW1tYXJ5PC9oMj4KLSAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHNwYW40IGRhc2hib2FyZC1zZWN0aW9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4OyI+Ci0gICAgICAgIDxoND48YSBocmVmPSJ7JXVybCAnY29uZmlndXJhdGlvbicgYnVpbGQucGslfSI+Q29uZmlndXJhdGlvbjwvYT48L2g0PgotICAgICAgICAgICAgPGRsPgotICAgICAgICA8ZHQ+TWFjaGluZTwvZHQ+PGRkPnt7YnVpbGQubWFjaGluZX19PC9kZD4KLSAgICAgICAgPGR0PkRpc3RybzwvZHQ+PGRkPnt7YnVpbGQuZGlzdHJvfX08L2RkPgotICAgICAgICA8ZHQ+TGF5ZXJzPC9kdD57JSBmb3IgaSBpbiBidWlsZC5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbHxkaWN0c29ydDoibGF5ZXIubmFtZSIgJX08ZGQ+e3tpLmxheWVyLm5hbWV9fTwvZGQ+eyVlbmRmb3IlfQotICAgICAgICAgICAgPC9kbD4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHNwYW40IGRhc2hib2FyZC1zZWN0aW9uIj4KLSAgICAgICAgPGg0PjxhIGhyZWY9InsldXJsICd0YXNrcycgYnVpbGQucGslfSI+VGFza3M8L2E+PC9oND4KLSAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgIHslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3V0Y29tZT00IG9yZGVyX19ndD0wIGFzIGV4ZWN0YXNrJX0KLSAgICAgICAgICAgIHslIGlmIGV4ZWN0YXNrLmNvdW50ID4gMCAlfQotICAgICAgICAgICAgICAgIDxkdD5GYWlsZWQgdGFza3M8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9Ci0gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJlcnJvciIgaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5pZCBleGVjdGFzay4wLmlkICV9Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXhlY3Rhc2suMC5yZWNpcGUubmFtZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay1uYW1lIj57e2V4ZWN0YXNrLjAudGFza19uYW1lfX08L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDwvYT4KIAotICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiBleGVjdGFzay4wLmlkICV9Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPjwvaT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KK3slIGlmIGJ1aWxkLnN0YXJ0ZWQgJX0KKyAgPCEtLSBidWlsZCBzdW1tYXJ5IC0tPgorICA8aDIgZGF0YS1yb2xlPSJidWlsZC1zdW1tYXJ5LWhlYWRpbmciPkJ1aWxkIHN1bW1hcnk8L2gyPgorICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCBkYXNoYm9hcmQtc2VjdGlvbiI+CisgICAgICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCI+CisgICAgICAgICAgPGgzPjxhIGhyZWY9InsldXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayV9Ij5Db25maWd1cmF0aW9uPC9hPjwvaDM+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICA8ZHQ+TWFjaGluZTwvZHQ+PGRkPnt7YnVpbGQubWFjaGluZX19PC9kZD4KKyAgICAgICAgICA8ZHQ+RGlzdHJvPC9kdD48ZGQ+e3tidWlsZC5kaXN0cm99fTwvZGQ+CisgICAgICAgICAgPGR0PkxheWVyczwvZHQ+PGRkPjx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCI+eyUgZm9yIGkgaW4gYnVpbGQubGF5ZXJfdmVyc2lvbl9idWlsZC5hbGx8ZGljdHNvcnQ6ImxheWVyLm5hbWUiICV9PGxpPnt7aS5sYXllci5uYW1lfX08L2xpPnslZW5kZm9yJX08L3VsPjwvZGQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCBkYXNoYm9hcmQtc2VjdGlvbiI+CisgICAgICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCI+CisgICAgICAgICAgPGgzPjxhIGhyZWY9InsldXJsICd0YXNrcycgYnVpbGQucGslfSI+VGFza3M8L2E+PC9oMz4KKyAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICB7JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIG91dGNvbWU9NCBvcmRlcl9fZ3Q9MCBhcyBleGVjdGFzayV9CisgICAgICAgICAgICAgIHslIGlmIGV4ZWN0YXNrLmNvdW50ID4gMCAlfQorICAgICAgICAgICAgICAgICAgPGR0PkZhaWxlZCB0YXNrczwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9CisgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InRleHQtZGFuZ2VyIiBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLmlkIGV4ZWN0YXNrLjAuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICB7e2V4ZWN0YXNrLjAucmVjaXBlLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay1uYW1lIj57e2V4ZWN0YXNrLjAudGFza19uYW1lfX08L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgPC9hPgogCi0gICAgICAgICAgICAgICAgeyUgZWxpZiBleGVjdGFzay5jb3VudCA+IDElfQotICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZXJyb3IiIGhyZWY9InslIHVybCAidGFza3MiIGJ1aWxkLmlkICV9P2ZpbHRlcj1vdXRjb21lJTNBNCI+e3tleGVjdGFzay5jb3VudH19PC9hPgotICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgIDxkdD5Ub3RhbCBudW1iZXIgb2YgdGFza3M8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfSI+eyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvcmRlcl9fZ3Q9MCBhcyBhbGx0YXNrcyAlfXt7YWxsdGFza3MuY291bnR9fTwvYT48L2RkPgotICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICBUYXNrcyBleGVjdXRlZAotICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IidFeGVjdXRlZCcgdGFza3MgYXJlIHRob3NlIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0Ij48L2k+Ci0gICAgICAgIDwvZHQ+Ci0gICAgICAgIDxkZD48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfT9maWx0ZXI9dGFza19leGVjdXRlZCUzQTEmYW1wO2NvdW50PTI1JmFtcDtzZWFyY2g9JmFtcDtwYWdlPTEmYW1wO29yZGVyYnk9b3JkZXIlM0ElMkIiPnslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgdGFza19leGVjdXRlZD0xIG9yZGVyX19ndD0wIGFzIGV4ZWN0YXNrJX17e2V4ZWN0YXNrLmNvdW50fX08L2E+PC9kZD4KLSAgICAgICAgPGR0PgotICAgICAgICAgICAgVGFza3Mgbm90IGV4ZWN1dGVkCi0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iJ05vdCBleGVjdXRlZCcgdGFza3MgZG9uJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRjb21lIGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayI+PC9pPgotICAgICAgICA8L2R0PgotICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0/ZmlsdGVyPXRhc2tfZXhlY3V0ZWQlM0EwJmFtcDtjb3VudD0yNSZhbXA7c2VhcmNoPSZhbXA7cGFnZT0xJmFtcDtvcmRlcmJ5PW9yZGVyJTNBJTJCIj57JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIHRhc2tfZXhlY3V0ZWQ9MCBvcmRlcl9fZ3Q9MCBhcyBub2V4ZWN0YXNrJX17e25vZXhlY3Rhc2suY291bnR9fTwvYT48L2RkPgotICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICBSZXVzZQotICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwZXJjZW50YWdlIG9mICdub3QgZXhlY3V0ZWQnIHRhc2tzIG92ZXIgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcywgd2hpY2ggaXMgYSBtZWFzdXJlIG9mIHRoZSBlZmZpY2llbmN5IG9mIHlvdXIgYnVpbGQiPjwvaT4KLSAgICAgICAgPC9kdD4KLSAgICAgICAgPGRkPgoteyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvcmRlcl9fZ3Q9MCBhcyB0ZXhlYyAlfQoteyUgaWYgbm9leGVjdGFzay5jb3VudHxtdWx0aXBseToxMDB8ZGl2aWRlOnRleGVjLmNvdW50IDwgMCAlfQotMAoteyUgZWxzZSAlfQote3tub2V4ZWN0YXNrLmNvdW50fG11bHRpcGx5OjEwMHxkaXZpZGU6dGV4ZWMuY291bnR9fQoteyUgZW5kaWYgJX0KLSUKLSAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgZXhlY3Rhc2suMC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1kb3dubG9hZC1hbHQgZ2V0LWhlbHAiIHRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgICAgeyUgZWxpZiBleGVjdGFzay5jb3VudCA+IDElfQorICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0ZXh0LWRhbmdlciIgaHJlZj0ieyUgdXJsICJ0YXNrcyIgYnVpbGQuaWQgJX0/bGltaXQ9MjUmYW1wO3BhZ2U9MSZhbXA7b3JkZXJieT1vcmRlciZhbXA7ZmlsdGVyPXRhc2tfb3V0Y29tZTpmYWlsZWQmYW1wO2RlZmF1bHRfb3JkZXJieT1vcmRlciZhbXA7ZmlsdGVyX3ZhbHVlPW9uJmFtcDsiPnt7ZXhlY3Rhc2suY291bnR9fTwvYT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDxkdD5Ub3RhbCBudW1iZXIgb2YgdGFza3M8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfSI+eyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvcmRlcl9fZ3Q9MCBhcyBhbGx0YXNrcyAlfXt7YWxsdGFza3MuY291bnR9fTwvYT48L2RkPgorICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgVGFza3MgZXhlY3V0ZWQKKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IidFeGVjdXRlZCcgdGFza3MgYXJlIHRob3NlIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0Ij48L3NwYW4+CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0/bGltaXQ9MjUmYW1wO3BhZ2U9MSZhbXA7b3JkZXJieT1vcmRlciZhbXA7ZmlsdGVyPWV4ZWN1dGlvbl9vdXRjb21lOmV4ZWN1dGVkJmFtcDtkZWZhdWx0X29yZGVyYnk9b3JkZXImYW1wO2ZpbHRlcl92YWx1ZT1vbiZhbXA7Ij57JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIHRhc2tfZXhlY3V0ZWQ9MSBvcmRlcl9fZ3Q9MCBhcyBleGVjdGFzayV9e3tleGVjdGFzay5jb3VudH19PC9hPjwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICBUYXNrcyBub3QgZXhlY3V0ZWQKKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IidOb3QgZXhlY3V0ZWQnIHRhc2tzIGRvbid0IG5lZWQgdG8gcnVuIGJlY2F1c2UgdGhlaXIgb3V0Y29tZSBpcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2siPjwvc3Bhbj4KKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfT9saW1pdD0yNSZhbXA7cGFnZT0xJmFtcDtvcmRlcmJ5PW9yZGVyJmFtcDtmaWx0ZXI9ZXhlY3V0aW9uX291dGNvbWU6bm90X2V4ZWN1dGVkJmFtcDtkZWZhdWx0X29yZGVyYnk9b3JkZXImYW1wO2ZpbHRlcl92YWx1ZT1vbiZhbXA7Ij57JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIHRhc2tfZXhlY3V0ZWQ9MCBvcmRlcl9fZ3Q9MCBhcyBub2V4ZWN0YXNrJX17e25vZXhlY3Rhc2suY291bnR9fTwvYT48L2RkPgorICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgUmV1c2UKKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwZXJjZW50YWdlIG9mICdub3QgZXhlY3V0ZWQnIHRhc2tzIG92ZXIgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcywgd2hpY2ggaXMgYSBtZWFzdXJlIG9mIHRoZSBlZmZpY2llbmN5IG9mIHlvdXIgYnVpbGQiPjwvc3Bhbj4KKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgeyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvcmRlcl9fZ3Q9MCBhcyB0ZXhlYyAlfQorICB7JSBpZiBub2V4ZWN0YXNrLmNvdW50fG11bHRpcGx5OjEwMHxkaXZpZGU6dGV4ZWMuY291bnQgPCAwICV9CisgIDAKKyAgeyUgZWxzZSAlfQorICB7e25vZXhlY3Rhc2suY291bnR8bXVsdGlwbHk6MTAwfGRpdmlkZTp0ZXhlYy5jb3VudH19CisgIHslIGVuZGlmICV9CisgICUKKyAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQgZGFzaGJvYXJkLXNlY3Rpb24iPgorICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHdlbGwtdHJhbnNwYXJlbnQiPgorICAgICAgICAgIDxoMz48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPiAmIDxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2gzPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgPGR0PlJlY2lwZXMgYnVpbHQ8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij57e3JlY2lwZWNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgICA8ZHQ+UGFja2FnZXMgYnVpbHQ8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+e3twYWNrYWdlY291bnR9fTwvYT48L2RkPgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgPC9kaXY+CiAgICAgPC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0id2VsbCBzcGFuNCBkYXNoYm9hcmQtc2VjdGlvbiI+Ci0gICAgICAgIDxoND48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPiAmIDxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2g0PgotICAgICAgICAgICAgPGRsPgotICAgICAgICA8ZHQ+UmVjaXBlcyBidWlsdDwvZHQ+PGRkPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPnt7cmVjaXBlY291bnR9fTwvYT48L2RkPgotICAgICAgICA8ZHQ+UGFja2FnZXMgYnVpbHQ8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+e3twYWNrYWdlY291bnR9fTwvYT48L2RkPgotICAgICAgICAgICAgPC9kbD4KLSAgICA8L2Rpdj4KLTwvZGl2PgorICA8L2Rpdj4KK3slIGVuZGlmICV9IDwhLS0gZW5kIGJ1aWxkIHN1bW1hcnkgLS0+CiAKIHslIGlmIGJ1aWxkLndhcm5pbmdzLmNvdW50ICV9Ci08ZGl2IGNsYXNzPSJhY2NvcmRpb24gc3BhbjEwIHB1bGwtcmlnaHQiIGlkPSJ3YXJuaW5ncyI+Ci0gIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ncm91cCI+Ci0gICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRpbmciPgotICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUgd2FybmluZyB0b2dnbGUtd2FybmluZ3MiPgotICAgICAgICA8aDIgaWQ9Indhcm5pbmctdG9nZ2xlIj4KLSAgICAgICAgICA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24iPjwvaT4KLSAgICAgICAgICB7e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX0KLSAgICAgICAgPC9oMj4KLSAgICAgIDwvYT4KKyAgPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCIgaWQ9Indhcm5pbmdzIj4KKyAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkaW5nIj4KKyAgICAgIDxoMiBjbGFzcz0icGFuZWwtdGl0bGUiPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXdhcm5pbmctc2lnbiI+PC9zcGFuPgorICAgICAgICAgIDxhIGlkPSJ3YXJuaW5nLXRvZ2dsZSIgaHJlZj0iI3dhcm5pbmctaW5mbyIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIj57e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgICA8L2gyPgogICAgIDwvZGl2PgotICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5IGNvbGxhcHNlIiBpZD0iY29sbGFwc2Utd2FybmluZ3MiPgotICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICA8ZGl2IGNsYXNzPSJwYW5lbC1jb2xsYXBzZSBjb2xsYXBzZSIgaWQ9Indhcm5pbmctaW5mbyI+CisgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0ieyUgaWYgYnVpbGQuc3RhcnRlZCAlfWNvbC1tZC0xMHslIGVsc2UgJX1jb2wtbWQtMTJ7JSBlbmRpZiAlfSI+CiAgICAgICAgICAgeyUgZm9yIHdhcm5pbmcgaW4gbG9nbWVzc2FnZXMgJX17JSBpZiB3YXJuaW5nLmxldmVsID09IDEgJX0KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyIgZGF0YS1sb2ctbWVzc2FnZS1pZD0ie3t3YXJuaW5nLnBrfX0iPgogICAgICAgICAgICAgICA8cHJlPnt7d2FybmluZy5tZXNzYWdlfX08L3ByZT4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIHslIGVuZGlmICV9eyUgZW5kZm9yICV9CkBAIC0yNjMsMTUgKzI5OCwyMSBAQAogICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiAgIDwvZGl2PgotPC9kaXY+CiB7JSBlbmRpZiAlfQogCis8L2Rpdj4gPCEtLSBlbmQgMTAgY29sdW1uIHJvdyAtLT4KKwogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICAvL3Nob3cgd2FybmluZ3Mgc2VjdGlvbiB3aGVuIHJlcXVlc3RlZCBmcm9tIHRoZSBwcmV2aW91cyBwYWdlCiAgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnI3dhcm5pbmdzJykgPiAtMSkgewotICAgICAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgICAgICAgICAkKCcjd2FybmluZy1pbmZvJykuYWRkQ2xhc3MoJ2luJyk7CiAgICAgICAgIH0KKworCS8vc2hvdyB3YXJuaW5ncyBzZWN0aW9uIHdoZW4gcmVxdWVzdGVkIGZyb20gdGhlIGJ1aWxkIG91dGNvbWUKKwkkKCIuc2hvdy13YXJuaW5ncyIpLmNsaWNrKGZ1bmN0aW9uKCkgeworCSAgICAkKCcjd2FybmluZy1pbmZvJykuYWRkQ2xhc3MoJ2luJyk7CisJfSk7CiAgICAgfSk7CiA8L3NjcmlwdD4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRpbmZvLXRvYXN0ZXJ0YWJsZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRpbmZvLXRvYXN0ZXJ0YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNGM2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZGluZm8tdG9hc3RlcnRhYmxlLmh0bWwKQEAgLTAsMCArMSwyNSBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRpdGxlICV9IHt7dGl0bGV9fSAtIHt7YnVpbGQudGFyZ2V0X3NldC5hbGx8ZGljdHNvcnQ6InRhcmdldCJ8am9pbjoiLCAifX0ge3tidWlsZC5tYWNoaW5lfX0gLSB7e2J1aWxkLnByb2plY3QubmFtZX19IC0gVG9hc3RlciB7JSBlbmRibG9jayAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0aXRsZX19PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi1wYWNrYWdlcyAlfQoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPGRpdiBjbGFzcz0iY29sLW1kLTEwIj4KK3sjIHhocl90YWJsZV91cmwgaXMganVzdCB0aGUgY3VycmVudCB1cmwgc28gbGVhdmUgaXQgYmxhbmsgI30KK3slIHdpdGggeGhyX3RhYmxlX3VybD0nJyAlfQorICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciBidWlsZC1kYXRhIj4KKyAgICAgPGgxPgorICAgICAgIHt7dGl0bGV9fSAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LXt7dGFibGVfbmFtZX19Ij4wPC9zcGFuPikgPC9oMj4KKyAgICAgPC9oMT4KKyAgPC9kaXY+CisgIHslIGluY2x1ZGUgInRvYXN0ZXJ0YWJsZS5odG1sIiAlfQoreyUgZW5kd2l0aCAlfQorPC9kaXY+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRyZXF1ZXN0ZGV0YWlscy5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRyZXF1ZXN0ZGV0YWlscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGZhMWZiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcmVxdWVzdGRldGFpbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLXslIGV4dGVuZHMgImJhc2Vwcm9qZWN0cGFnZS5odG1sIiAlfQotCi17JSBsb2FkIHN0YXRpYyAlfQoteyUgbG9hZCBwcm9qZWN0dGFncyAlfQoteyUgbG9hZCBodW1hbml6ZSAlfQotCi0KLXslIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQotICAgICAgPCEtLSBiZWdpbiBjb250ZW50IC0tPgotCi0gICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KLQotICAgICAgICAgICAgPCEtLSBlbmQgbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KLSAgICAgICAgICAgIDwhLS0gQmVnaW4gcmlnaHQgY29udGFpbmVyIC0tPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgotICAgICAgICAgICAgICAgIDxoMT4KLSA8c3BhbiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgeyVpZiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfXRpdGxlPSJUYXJnZXRzOiB7JWZvciB0YXJnZXQgaW4gYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwlfXt7dGFyZ2V0LnRhcmdldH19IHslZW5kZm9yJX0ieyVlbmRpZiV9Pnt7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXJnZXR9fSB7JWlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9KCsge3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KXslZW5kaWYlfSB7e2J1aWxkcmVxdWVzdC5nZXRfbWFjaGluZX19IDwvc3Bhbj4KLQotICAgICAgICA8L2gxPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPgotICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJsZWFkIj4KLSAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmFpbGVkPC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgICAgIG9uIHt7IGJ1aWxkcmVxdWVzdC51cGRhdGVkfGRhdGU6J2QvbS95IEg6aScgfX0KLSAgICAgICAgICAgIHdpdGgKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiBlcnJvciIgc3R5bGU9Im1hcmdpbi1sZWZ0OjZweDsiPjwvaT4KLSAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PGEgY2xhc3M9ImVycm9yIGFjY29yZGlvbi10b2dnbGUgdG9nZ2xlLWVycm9ycyIgaHJlZj0iI2Vycm9ycyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICB7e2J1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwuY291bnR9fSBlcnJvcnt7YnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbC5jb3VudHxwbHVyYWxpemV9fQotICAgICAgICAgICAgICA8L2E+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1yaWdodCI+QnVpbGQgdGltZToge3tidWlsZHJlcXVlc3QuZ2V0X2R1cmF0aW9ufHNlY3RvaG1zfX08L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICA8L2Rpdj4KLQotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24iIGlkPSJlcnJvcnMiPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ncm91cCI+Ci0gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taGVhZGluZyI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIGVycm9yIHRvZ2dsZS1lcnJvcnMiPgotICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24iPjwvaT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7YnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbC5jb3VudH19IGVycm9ye3tidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsLmNvdW50fHBsdXJhbGl6ZX19Ci0gICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSBjb2xsYXBzZSBpbiIgaWQ9ImNvbGxhcHNlLWVycm9ycyI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1pbm5lciI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KLSAgICAgICAgICAgICAgIHslIGZvciBlcnJvciBpbiBidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SOiA8ZGl2IGNsYXNzPSJhaXIgd2VsbCI+PHByZT57e2Vycm9yLmVycm1zZ319PC9wcmU+PC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KLSAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICA8L2Rpdj4KLQotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDwvZGl2PiA8IS0tIGVuZCBvZiByb3ctZmx1aWQgLS0+Ci0KLQoteyVlbmRibG9jayV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHMtdG9hc3RlcnRhYmxlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHMtdG9hc3RlcnRhYmxlLmh0bWwKaW5kZXggYmYxM2E2Ni4uMGFmZTBhMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRzLXRvYXN0ZXJ0YWJsZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcy10b2FzdGVydGFibGUuaHRtbApAQCAtMTMsMTYgKzEzLDIwIEBACiAKIHslIGJsb2NrIHBhZ2Vjb250ZW50ICV9CiAKLSAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKzxkaXYgY2xhc3M9InJvdyI+CisgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+CiAgICAgeyUgd2l0aCBtcnU9bXJ1IG1yYl90eXBlPW1yYl90eXBlICV9CiAgICAgICB7JSBpbmNsdWRlICdtcmJfc2VjdGlvbi5odG1sJyAlfQogICAgIHslIGVuZHdpdGggJX0KIAotICAgIDxoMSBjbGFzcz0icGFnZS1oZWFkZXIgdG9wLWFpciIgZGF0YS1yb2xlPSJwYWdlLXRpdGxlIj48L2gxPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgIDxoMSBjbGFzcz0idG9wLWFpciIgZGF0YS1yb2xlPSJwYWdlLXRpdGxlIj48L2gxPgorICAgIDwvZGl2PgogCiAgICAgeyUgdXJsICdidWlsZHMnIGFzIHhocl90YWJsZV91cmwgJX0KICAgICB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUuaHRtbCcgJX0KICAgPC9kaXY+Cis8L2Rpdj4KIAogICA8c2NyaXB0PgogICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkdGltZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGR0aW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODRhZTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGR0aW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXslIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KLXslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQotPGxpPkJ1aWxkIFRpbWU8L2xpPgoteyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3VyYXRpb24uaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3VyYXRpb24uaHRtbAppbmRleCA4NWQ2YTYyLi41ODk4OWY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd1cmF0aW9uLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbi5odG1sCkBAIC02LDIxICs2LDE3IEBACiA8bGk+Q29uZmlndXJhdGlvbjwvbGk+CiB7JSBlbmRibG9jayAlfQogCi17JSBibG9jayBuYXYtY29uZmlndXJhdGlvbiAlfQotICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgoteyUgZW5kYmxvY2sgJX0KLQogeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQogPCEtLSBwYWdlIHRpdGxlIC0tPgotPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+Ci0gPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorPGRpdiBjbGFzcz0iY29sLW1kLTEwIj4KKworIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIGJ1aWxkLWRhdGEiPgogICAgICA8aDE+Q29uZmlndXJhdGlvbjwvaDE+CiAgPC9kaXY+Ci08L2Rpdj4KIAogPCEtLSBjb25maWd1cmF0aW9uIHRhYmxlIC0tPgotPGRpdiBjbGFzcz0icm93LWZsdWlkIHB1bGwtcmlnaHQgc3BhbjEwIiBpZD0ibmF2VGFiIj4KLTx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+Cis8ZGl2IGlkPSJuYXZUYWIiPgorPHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMiPgogICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIjIj5TdW1tYXJ5PC9hPjwvbGk+CiAgICAgPGxpIGNsYXNzPSIiPjxhIGhyZWY9InslIHVybCAnY29uZmlndmFycycgYnVpbGQuaWQgJX0iPkJpdEJha2UgdmFyaWFibGVzPC9hPjwvbGk+CiA8L3VsPgpAQCAtMzksMzQgKzM1LDUxIEBACiAgICAgICB7JWlmIFRVTkVfRkVBVFVSRVMgJX08ZHQ+VHVuZSBmZWF0dXJlczwvZHQ+PGRkPnt7VFVORV9GRUFUVVJFU319PC9kZD4geyUgZW5kaWYgJX0KICAgICAgIHslaWYgVEFSR0VUX0ZQVSAlfTxkdD5UYXJnZXQgRlBVPC9kdD48ZGQ+e3tUQVJHRVRfRlBVfX08L2RkPiB7JSBlbmRpZiAlfQogICAgICAgeyVpZiB0YXJnZXRzLmFsbCAlfTxkdD5UYXJnZXQocyk8L2R0PgotICAgICAgICAgIDxkZD4gPHVsPiB7JSBmb3IgdGFyZ2V0IGluIHRhcmdldHMuYWxsICV9CisgICAgICAgICAgPGRkPiA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPiB7JSBmb3IgdGFyZ2V0IGluIHRhcmdldHMuYWxsICV9CiAgICAgICAgICAgICAgICA8bGk+e3t0YXJnZXQudGFyZ2V0fX17JWlmIGZvcmxvb3AuY291bnRlciA+IDEgJX08YnI+eyUgZW5kaWYgJX08L2xpPgogICAgICAgICAgIHslIGVuZGZvciAlfSA8L3VsPiA8L2RkPiB7JSBlbmRpZiAlfQogICAgIDwvZGw+CiAgICAgPGgzPkxheWVyczwvaDM+Ci0gICAgPGRpdiBjbGFzcz0ic3BhbjkiIHN0eWxlPSJtYXJnaW4tbGVmdDowcHg7Ij4KLSAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KLSAgICAgIDx0aGVhZD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0aD5MYXllcjwvdGg+Ci0gICAgICAgICAgPHRoPkxheWVyIGJyYW5jaDwvdGg+Ci0gICAgICAgICAgPHRoPkxheWVyIGNvbW1pdDwvdGg+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RoZWFkPgotICAgICAgPHRib2R5PnslIGZvciBsdiBpbiBidWlsZC5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbHxkaWN0c29ydDoibGF5ZXIubmFtZSIgJX0KLSAgICAgICAgPHRyPgorICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtOSB0YWJsZS1yZXNwb25zaXZlIj4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGg+TGF5ZXI8L3RoPgorICAgICAgICAgICAgICA8dGg+TGF5ZXIgYnJhbmNoPC90aD4KKyAgICAgICAgICAgICAgPHRoPkxheWVyIGNvbW1pdDwvdGg+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgPHRib2R5PnslIGZvciBsdiBpbiBidWlsZC5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbHxkaWN0c29ydDoibGF5ZXIubmFtZSIgJX0KKyAgICAgICAgICA8dHI+CiAgICAgICAgICAgICA8dGQ+e3tsdi5sYXllci5uYW1lfX08L3RkPgorCSAgICB7JSBpZiBsdi5sYXllci5sb2NhbF9zb3VyY2VfZGlyICV9CisJICAgIDx0ZD4KKwkgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+Tm90IGFwcGxpY2FibGU8L3NwYW4+CisJICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiB0aXRsZT0iVGhlIHNvdXJjZSBjb2RlIG9mIHt7bHYubGF5ZXIubmFtZX19IGlzIG5vdCBpbiBhIEdpdCByZXBvc2l0b3J5LCBzbyB0aGVyZSBpcyBubyBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIGl0Ij4gPC9zcGFuPgorCSAgICA8L3RkPgorCSAgICB7JSBlbHNlICV9CiAgICAgICAgICAgICA8dGQ+e3tsdi5icmFuY2h9fTwvdGQ+Ci0gICAgICAgICAgICA8dGQ+IDxhIGNsYXNzPSJidG4iIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+Ci0gICAgICAgICAgICAgICAgPGxpPnt7bHYuY29tbWl0fX08L2xpPiA8L3VsPiI+Ci0gICAgICAgICAgICAgICAgICAgIHt7bHYuY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQotICAgICAgICAgICAgICAgIDwvYT48L3RkPgotICAgICAgICA8L3RyPnslIGVuZGZvciAlfQotICAgICAgPC90Ym9keT4KLSAgICA8L3RhYmxlPgorCSAgICB7JSBlbmRpZiAlfQorCSAgICB7JSBpZiBsdi5sYXllci5sb2NhbF9zb3VyY2VfZGlyICV9CisJICAgIDx0ZD4KKwkgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+Tm90IGFwcGxpY2FibGU8L3NwYW4+CisJICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiB0aXRsZT0iVGhlIHNvdXJjZSBjb2RlIG9mIHt7bHYubGF5ZXIubmFtZX19IGlzIG5vdCBpbiBhIEdpdCByZXBvc2l0b3J5LCBzbyB0aGVyZSBpcyBubyBjb21taXQgYXNzb2NpYXRlZCB3aXRoIGl0Ij4gPC9zcGFuPgorCSAgICA8L3RkPgorCSAgICB7JSBlbHNlICV9CisgICAgICAgICAgICA8dGQ+IDxhIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSdsaXN0LXVuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgIDxsaT57e2x2LmNvbW1pdH19PC9saT4gPC91bD4iPgorICAgICAgICAgICAgICAgIHt7bHYuY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgPC9hPjwvdGQ+CisJICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPC90cj57JSBlbmRmb3IgJX0KKyAgICAgICAgICA8L3Rib2R5PgorICAgICAgICA8L3RhYmxlPgorICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiAgIDwvZGl2PgogCi0KIDwvZGl2PgorCis8L2Rpdj4gPCEtLSBlbmQgb2YgMTAtY29sdW1uIHNlY3Rpb24gLS0+CiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndmFycy5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndmFycy5odG1sCmluZGV4IGU0MGMyMjUuLmNhMmUxZWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3ZhcnMuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd2YXJzLmh0bWwKQEAgLTYsMTQgKzYsMTAgQEAKIDxsaT5Db25maWd1cmF0aW9uPC9saT4KIHslIGVuZGJsb2NrICV9CiAKLXslIGJsb2NrIG5hdi1jb25maWd1cmF0aW9uICV9Ci0gIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2NvbmZpZ3VyYXRpb24nIGJ1aWxkLnBrICV9Ij5Db25maWd1cmF0aW9uPC9hPjwvbGk+Ci17JSBlbmRibG9jayAlfQotCiB7JSBibG9jayBidWlsZGluZm9tYWluICV9CiA8IS0tIHBhZ2UgdGl0bGUgLS0+Ci08ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIj4KLSA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+Cis8ZGl2IGNsYXNzPSJjb2wtbWQtMTAiPgorIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIGJ1aWxkLWRhdGEiPgogIDxoMT4KICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KICAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSB2YXJpYWJsZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKQEAgLTI0LDExICsyMCwxMCBAQAogICB7JWVuZGlmJX0KICA8L2gxPgogIDwvZGl2PgotPC9kaXY+CiAKIDwhLS0gY29uZmlndXJhdGlvbiB0YWJsZSAtLT4KLTxkaXYgY2xhc3M9InJvdy1mbHVpZCBwdWxsLXJpZ2h0IHNwYW4xMCIgaWQ9Im5hdlRhYiI+Ci0gIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+Cis8ZGl2IGlkPSJuYXZUYWIiPgorICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyI+CiAgICAgPGxpIGNsYXNzPSIiPjxhIGhyZWY9InslIHVybCAnY29uZmlndXJhdGlvbicgYnVpbGQuaWQgJX0iPlN1bW1hcnk8L2E+PC9saT4KICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0iIyIgPkJpdEJha2UgdmFyaWFibGVzPC9hPjwvbGk+CiAgIDwvdWw+CkBAIC0zNywxNCArMzIsMjEgQEAKICAgPGRpdiBpZD0idmFyaWFibGVzIiBjbGFzcz0idGFiLXBhbmUiPgogCiAgIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KLSAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KLSAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KLSAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+Ci0gICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9Ci0gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+Ci0gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgdmFyaWFibGVzPC9idXR0b24+Ci0gICAgICAgIDwvZm9ybT4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgZm9ybS1pbmxpbmUiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHZhbHVlPSJ7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz4KKyAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIHRhYmluZGV4PSItMSI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmVtb3ZlLXNlYXJjaC1idG4tdmFyaWFibGVzIGdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlLWNpcmNsZSI+PC9zcGFuPgorICAgICAgICAgIDwvYT4KKyAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2Rpdj4KICAgICAgIDwvZGl2PgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHZhcmlhYmxlczwvYnV0dG9uPgorICAgIDwvZm9ybT4KICAgPC9kaXY+CiAKICAgeyUgZWxzZSAlfQpAQCAtNTMsODEgKzU1LDkxIEBACiAgIHslIGZvciB2YXJpYWJsZSBpbiBvYmplY3RzICV9CiAgICAgPHRyIGNsYXNzPSJkYXRhIj4KICAgICAgICAgPHRkIGNsYXNzPSJ2YXJpYWJsZV9uYW1lIj48YSBkYXRhLXRvZ2dsZT0ibW9kYWwiIGhyZWY9IiN2YXJpYWJsZS17e3ZhcmlhYmxlLnBrfX0iPnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0idmFyaWFibGVfdmFsdWUiPjxhIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaHJlZj0iI3ZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSI+e3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXx0cnVuY2F0ZWNoYXJzOjE1M319PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZmlsZSI+PGEgZGF0YS10b2dnbGU9Im1vZGFsIiBocmVmPSIjdmFyaWFibGUte3t2YXJpYWJsZS5wa319Ij4KKyAgICAgICAgPHRkIGNsYXNzPSJ2YXJpYWJsZV92YWx1ZSI+e3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXx0cnVuY2F0ZWNoYXJzOjE1M319PC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJmaWxlIj4KICAgICAgICAgICAgIHslIGlmIHZhcmlhYmxlLnZoaXN0b3J5LmFsbCAlfQogICAgICAgICAgICAgICAgIHslIGZvciBwYXRoIGluIHZhcmlhYmxlLnZoaXN0b3J5LmFsbHxmaWx0ZXJfc2V0aW5fZmlsZXM6ZmlsZV9maWx0ZXIgJX0KICAgICAgICAgICAgICAgICAgICAge3twYXRofX08YnIvPgogICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgPC9hPjwvdGQ+CisgICAgICAgIDwvdGQ+CiAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUuZGVzY3JpcHRpb24gJX0KICAgICAgICAgICAgICAgICB7e3ZhcmlhYmxlLmRlc2NyaXB0aW9ufX0KICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci17e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV8dmFyaWFibGVfcGFyZW50X25hbWV9fSIgdGFyZ2V0PSJfYmxhbmsiPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+PC9hPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW5ldy13aW5kb3cgZ2V0LWluZm8iPjwvc3Bhbj48L2E+CiAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICA8L3RkPgogICAgIDwvdHI+CiB7JSBlbmRmb3IgJX0KLQorPC90Ym9keT4KKzwvdGFibGU+Cis8L2Rpdj4gPCEtLSB0YWJsZS1yZXNwb25zaXZlIC0tPgogeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQogeyUgZW5kaWYgJX0KIDwvZGl2PiA8IS0tIGVuZHZhcmlhYmxlcyAtLT4KIAogPCEtLSBmaWxlIGxpc3QgcG9wdXBzIC0tPgogeyUgZm9yIHZhcmlhYmxlIGluIG9iamVjdHMgJX0KLSAgICB7JSBpZiB2YXJpYWJsZS52aGlzdG9yeS5jb3VudCAlfQotICAgIDxkaXYgaWQ9InZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgotICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgotICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KLSAgICAgICAgICAgIDxoMz5IaXN0b3J5IG9mIHt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19PC9oMz4KK3slIGlmIHZhcmlhYmxlLnZoaXN0b3J5LmNvdW50ICV9Cis8ZGl2IGlkPSJ2YXJpYWJsZS17e3ZhcmlhYmxlLnBrfX0iIGNsYXNzPSJtb2RhbCBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgorICAgICAgICA8aDM+SGlzdG9yeSBvZiB7e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fTwvaDM+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICB7JSBpZiB2YXJpYWJsZS52YXJpYWJsZV92YWx1ZSAlfQorICAgICAgICB7JSBpZiB2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXxsZW5ndGggPCA1NzAgJX0KKyAgICAgICAgPGg0Pnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19IHZhbHVlIGlzOjwvaDQ+CisgICAgICAgIDxwPgorICAgICAgICB7e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfX0KKyAgICAgICAgPC9wPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgIDxoND57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fSB2YWx1ZSBpczo8L2g0PgorICAgICAgICA8cD4KKyAgICAgICAgPHNwYW4+e3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXxzdHJpbmdfc2xpY2U6Jzo1NzAnfX0KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZnVsbCI+IHt7dmFyaWFibGUudmFyaWFibGVfdmFsdWV8c3RyaW5nX3NsaWNlOic1NzA6J319CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJmdWxsLXNob3ciPi4uLjwvYT4KKyAgICAgICAgPC9zcGFuPgorICAgICAgICA8L3A+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJmdWxsLWhpZGUiPkNvbGxhcHNlIHZhcmlhYmxlIHZhbHVlIDxpIGNsYXNzPSJpY29uLWNhcmV0LXVwIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj5UaGUgdmFsdWUgb2YgPHN0cm9uZz57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fTwvc3Ryb25nPiBpcyBhbiBlbXB0eSBzdHJpbmc8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPGg0PlRoZSB2YWx1ZSB3YXMgc2V0IGluIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBmaWxlczo8L2g0PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlIj4KKyAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0aD5PcmRlcjwvdGg+CisgICAgICAgICAgICAgICAgPHRoPkNvbmZpZ3VyYXRpb24gZmlsZTwvdGg+CisgICAgICAgICAgICAgICAgPHRoPk9wZXJhdGlvbjwvdGg+CisgICAgICAgICAgICAgICAgPHRoPkxpbmU8L3RoPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgeyUgZm9yIHZoIGluIHZhcmlhYmxlLnZoaXN0b3J5LmFsbCAlfQorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPnt7Zm9ybG9vcC5jb3VudGVyfX08L3RkPjx0ZCBjbGFzcz0iZmlsZSI+e3t2aC5maWxlX25hbWV9fTwvdGQ+PHRkPnt7dmgub3BlcmF0aW9ufX08L3RkPjx0ZD57e3ZoLmxpbmVfbnVtYmVyfX08L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICB7JWVuZGZvciV9CisgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KLSAgICAgICAgICAgIHslIGlmIHZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlICV9Ci0gICAgICAgICAgICAgIHslIGlmIHZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfGxlbmd0aCA8IDU3MCAlfQotICAgICAgICAgICAgICAgIDxoND57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fSB2YWx1ZSBpczo8L2g0PgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgICB7e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfX0KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgIHslIGVsc2UgJX0KLSAgICAgICAgICAgICAgICA8aDQ+e3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX0gdmFsdWUgaXM6PC9oND4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXxzdHJpbmdfc2xpY2U6Jzo1NzAnfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmdWxsIj4ge3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXxzdHJpbmdfc2xpY2U6JzU3MDonfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLW1pbmkgZnVsbC1zaG93Ij4uLi48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tbWluaSBmdWxsLWhpZGUiPkNvbGxhcHNlIHZhcmlhYmxlIHZhbHVlIDxpIGNsYXNzPSJpY29uLWNhcmV0LXVwIj48L2k+Ci0gICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPlRoZSB2YWx1ZSBvZiA8c3Ryb25nPnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19PC9zdHJvbmc+IGlzIGFuIGVtcHR5IHN0cmluZzwvZGl2PgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIDxoND5UaGUgdmFsdWUgd2FzIHNldCBpbiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXM6PC9oND4KLSAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgotICAgICAgICAgICAgICAgIDx0aGVhZD4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk9yZGVyPC90aD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Db25maWd1cmF0aW9uIGZpbGU8L3RoPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk9wZXJhdGlvbjwvdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGg+TGluZSBudW1iZXI8L3RoPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDwvdGhlYWQ+Ci0gICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICB7JSBmb3IgdmggaW4gdmFyaWFibGUudmhpc3RvcnkuYWxsICV9Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2Zvcmxvb3AuY291bnRlcn19PC90ZD48dGQ+e3t2aC5maWxlX25hbWV9fTwvdGQ+PHRkPnt7dmgub3BlcmF0aW9ufX08L3RkPjx0ZD57e3ZoLmxpbmVfbnVtYmVyfX08L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICB7JWVuZGZvciV9Ci0gICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotICAgIHslIGVuZGlmICV9CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj48IS0tIC8ubW9kYWwtY29udGVudCAtLT4KKyAgPC9kaXY+PCEtLSAvLm1vZGFsLWRpYWxvZyAtLT4KKzwvZGl2PjwhLS0gLy5tb2RhbCAtLT4KK3slIGVuZGlmICV9CiB7JSBlbmRmb3IgJX0KIAogPC9kaXY+IDwhLS0gYnVpbGRpbmZvbWFpbiAtLT4KIAorPC9kaXY+IDwhLS0gZW5kIDEwLWNvbHVtbiBzZWN0aW9uIC0tPgorCiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY3VzdG9taXNlX2J0bi5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY3VzdG9taXNlX2J0bi5odG1sCmluZGV4IDJlNTRhOWQuLjM4YzI1OGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2N1c3RvbWlzZV9idG4uaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jdXN0b21pc2VfYnRuLmh0bWwKQEAgLTEsMTUgKzEsMTUgQEAKLTxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXItZXhpc3RzLXt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0gY3VzdG9taXNlLWJ0biIgIGRhdGEtcmVjaXBlPSJ7e2RhdGEucGt9fSIKKzxidXR0b24gY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2sgbGF5ZXItZXhpc3RzLXt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0gY3VzdG9taXNlLWJ0biIgIGRhdGEtcmVjaXBlPSJ7e2RhdGEucGt9fSIKICAgICB7JSBpZiBkYXRhLmxheWVyX3ZlcnNpb24ucGsgbm90IGluIGV4dHJhLmN1cnJlbnRfbGF5ZXJzICV9CiAgICAgc3R5bGU9ImRpc3BsYXk6bm9uZTsiCiAgICAgeyUgZW5kaWYgJX0KICAgPgogICBDdXN0b21pc2UKIDwvYnV0dG9uPgotPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1hZGQte3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSBsYXllcmJ0biIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEubGF5ZXJfdmVyc2lvbi5wa319LCAibmFtZSI6ICAie3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24ucGslfSJ9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIgorPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBsYXllci1hZGQte3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSBsYXllcmJ0biIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEubGF5ZXJfdmVyc2lvbi5wa319LCAibmFtZSI6ICAie3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24ucGslfSJ9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIgogICAgIHslIGlmIGRhdGEubGF5ZXJfdmVyc2lvbi5wayBpbiBleHRyYS5jdXJyZW50X2xheWVycyAlfQogICAgIHN0eWxlPSJkaXNwbGF5Om5vbmU7IgogICAgIHslIGVuZGlmICV9CiAgID4KLSAgPGkgY2xhc3M9Imljb24tcGx1cyI+PC9pPgorICA8aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzIj48L2k+CiAgIEFkZCBsYXllcgogPC9idXR0b24+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jdXN0b21yZWNpcGUuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2N1c3RvbXJlY2lwZS5odG1sCmluZGV4IGVhM2M5YzcuLjk0NWZjOTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2N1c3RvbXJlY2lwZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2N1c3RvbXJlY2lwZS5odG1sCkBAIC00LDcgKzQsNyBAQAogeyUgbG9hZCBzdGF0aWMgJX0KIHslIGJsb2NrIHBhZ2Vjb250ZW50ICV9CiAKLTxkaXYgY2xhc3M9InNlY3Rpb24iPgoreyUgd2l0aCByZWNpcGUuZ2V0X2Jhc2VfcmVjaXBlX2ZpbGUgYXMgYmFzZV9yZWNpcGVfZmlsZSAlfQogICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgogICAgIDxsaT4KICAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+e3twcm9qZWN0Lm5hbWV9fTwvYT4KQEAgLTE3LDcgKzE3LDYgQEAKICAgICAgIHt7cmVjaXBlLm5hbWV9fSAoe3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0pCiAgICAgPC9saT4KICAgPC91bD4KLTwvZGl2PgogCiA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9jdXN0b21yZWNpcGUuanMnICV9Ij48L3NjcmlwdD4KIDxzY3JpcHQ+CkBAIC0yOSw2ICsyOCw3IEBACiAgICAgICAgIGluY2x1ZGVkUGFja2FnZXNDb3VudDoge3tyZWNpcGUuaW5jbHVkZXNfc2V0LmNvdW50fX0sCiAgICAgICAgIGJhc2VSZWNpcGVJZDoge3tyZWNpcGUuYmFzZV9yZWNpcGUucGt9fSwKICAgICAgICAgeGhyUGFja2FnZUxpc3RVcmw6ICJ7JSB1cmwgJ3hocl9jdXN0b21yZWNpcGVfcGFja2FnZXMnIHJlY2lwZS5wayAlfSIsCisgICAgICAgIHhockN1c3RvbVJlY2lwZVVybDogInslIHVybCAneGhyX2N1c3RvbXJlY2lwZV9pZCcgcmVjaXBlLnBrICV9IiwKICAgICAgIH0KICAgICB9OwogCkBAIC00MCw5NSArNDAsMTM3IEBACiAgICAgfQogICB9KTsKIDwvc2NyaXB0PgorCis8IS0tIERlbGV0ZSByZWNpcGUgbW9kYWwgLS0+Cis8ZGl2IGlkPSJkZWxldGUtcmVjaXBlLW1vZGFsIiBjbGFzcz0ibW9kYWwgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibXlNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0iZmFsc2UiPgorICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciPgorICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgIDxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIDxzdHJvbmc+e3tyZWNpcGUubmFtZX19PC9zdHJvbmc+CisgICAgICAgICBjdXN0b20gaW1hZ2U/PC9wPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImRlbGV0ZS1jdXN0b20tcmVjaXBlLWNvbmZpcm1lZCI+CisgICAgICAgICAgPHNwYW4gZGF0YS1yb2xlPSJzdWJtaXQtc3RhdGUiPkRlbGV0ZSBjdXN0b20gaW1hZ2U8L3NwYW4+CisgICAgICAgICAgPHNwYW4gZGF0YS1yb2xlPSJsb2FkaW5nLXN0YXRlIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmYS1wdWxzZSI+CisgICAgICAgICAgICA8aSBjbGFzcz0iZmEtcHVsc2UgaWNvbi1zcGlubmVyIj48L2k+CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgJm5ic3A7RGVsZXRpbmcgY3VzdG9tIGltYWdlLi4uCisgICAgICAgICAgPC9zcGFuPgorICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+PCEtLSAvLm1vZGFsLWNvbnRlbnQgLS0+CisgIDwvZGl2PjwhLS0gLy5tb2RhbC1kaWFsb2cgLS0+Cis8L2Rpdj48IS0tIC8ubW9kYWwgLS0+Cis8IS0tIGVuZCBkZWxldGUgcmVjaXBlIG1vZGFsIC0tPgorCiA8IS0tIHBhY2thZ2UgZGVwZW5kZW5jaWVzIG1vZGFsIC0tPgotPGRpdiBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0icGFja2FnZS1kZXBzLW1vZGFsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIGluIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJteU1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJmYWxzZSI+Ci0gIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+Ci0gICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KLSAgICA8aDM+PHNwYW4gY2xhc3M9InBhY2thZ2UtdG8tYWRkLW5hbWUiPjwvc3Bhbj4gZGVwZW5kZW5jaWVzPC9oMz4KLSAgPC9kaXY+Ci0gIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgotICAgIDxwPkJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gYSBwcmV2aW91cyBidWlsZCBpdCBpcyBsaWtlbHkgdGhhdCBhZGRpbmcgPHN0cm9uZyBjbGFzcz0icGFja2FnZS10by1hZGQtbmFtZSI+PC9zdHJvbmc+IHdpbGwgYWxzbyBhZGQgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyB0byB5b3VyIGN1c3RvbSBpbWFnZTo8L3A+Ci0gICAgPHVsIGlkPSJwYWNrYWdlLWFkZC1kZXAtbGlzdCI+Ci0gICAgPC91bD4KLSAgPC9kaXY+Ci0gIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgPHAgY2xhc3M9ImhlbHAtYmxvY2sgdGV4dC1sZWZ0Ij5Ub3RhbCBwYWNrYWdlIHNpemU6IDxzdHJvbmcgaWQ9InBhY2thZ2UtZGVwcy10b3RhbC1zaXplIj48L3N0cm9uZz48L3A+Ci0gICAgPGJ1dHRvbiBpZD0iYWRkLXBhY2thZ2UtZGVwcy1tb2RhbC1idG4iIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+QWRkIHBhY2thZ2U8L2J1dHRvbj4KLSAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgotICA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0icGFja2FnZS1kZXBzLW1vZGFsIiBjbGFzcz0ibW9kYWwgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibXlNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0iZmFsc2UiPgorICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciPgorICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgICAgPGgzPjxzcGFuIGNsYXNzPSJwYWNrYWdlLXRvLWFkZC1uYW1lIj48L3NwYW4+IGRlcGVuZGVuY2llczwvaDM+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICA8cD5CYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIGEgcHJldmlvdXMgYnVpbGQgaXQgaXMgbGlrZWx5IHRoYXQgYWRkaW5nIDxzdHJvbmcgY2xhc3M9InBhY2thZ2UtdG8tYWRkLW5hbWUiPjwvc3Ryb25nPiB3aWxsIGFsc28gYWRkIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgdG8geW91ciBjdXN0b20gaW1hZ2U6CisgICAgICAgIDwvcD4KKyAgICAgICAgPHVsIGlkPSJwYWNrYWdlLWFkZC1kZXAtbGlzdCI+CisgICAgICAgIDwvdWw+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CisgICAgICAgIDxwIGNsYXNzPSJoZWxwLWJsb2NrIHRleHQtbGVmdCI+VG90YWwgcGFja2FnZSBzaXplOiA8c3Ryb25nIGlkPSJwYWNrYWdlLWRlcHMtdG90YWwtc2l6ZSI+PC9zdHJvbmc+PC9wPgorICAgICAgICA8YnV0dG9uIGlkPSJhZGQtcGFja2FnZS1kZXBzLW1vZGFsLWJ0biIgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5BZGQgcGFja2FnZXM8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PjwhLS0gLy5tb2RhbC1jb250ZW50IC0tPgorICA8L2Rpdj48IS0tIC8ubW9kYWwtZGlhbG9nIC0tPgorPC9kaXY+PCEtLSAvLm1vZGFsIC0tPgogPCEtLSBlbmQgcGFja2FnZSBkZXBlbmRlbmNpZXMgbW9kYWwgLS0+CiAKIDwhLS0gcGFja2FnZSByZXZlcnNlIGRlcGVuZGVuY2llcyBtb2RhbCAtLT4KLTxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9InBhY2thZ2UtcmV2ZXJzZS1kZXBzLW1vZGFsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIGluIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJteU1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJmYWxzZSI+Ci0gIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+Ci0gICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KLSAgICA8aDM+PHNwYW4gY2xhc3M9InBhY2thZ2UtdG8tcm0tbmFtZSI+PC9zcGFuPiByZXZlcnNlIGRlcGVuZGVuY2llczwvaDM+Ci0gIDwvZGl2PgotICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KLSAgICA8cD4gPHN0cm9uZyBjbGFzcz0icmV2ZXJzZS1kZXBzLWNvdW50Ij48L3N0cm9uZz4gPHNwYW4gY2xhc3M9InJldmVyc2UtZGVwcy1wYWNrYWdlIj48L3NwYW4+IGluIHlvdXIgaW1hZ2UgPHNwYW4gY2xhc3M9InJldmVyc2UtZGVwcy1kZXBlbmRzIj48L3NwYW4+IG9uIDxzdHJvbmcgY2xhc3M9InBhY2thZ2UtdG8tcm0tbmFtZSI+PC9zdHJvbmc+OjwvcD4KLSAgICA8dWwgaWQ9InBhY2thZ2UtcmV2ZXJzZS1kZXAtbGlzdCI+Ci0gICAgPC91bD4KLSAgICA8cD5JbiBvcmRlciB0byByZW1vdmUgPHN0cm9uZyBjbGFzcz0icGFja2FnZS10by1ybS1uYW1lIj48L3N0cm9uZz4sIHlvdSBtdXN0IHJlbW92ZSA8c3BhbiBjbGFzcz0icmV2ZXJzZS1kZXBzLXRoaXMiPjwvc3Bhbj4gPHN0cm9uZyBjbGFzcz0icmV2ZXJzZS1kZXBzLWNvdW50Ij48L3N0cm9uZz4gPHNwYW4gY2xhc3M9InJldmVyc2UtZGVwcy1wYWNrYWdlIj48L3NwYW4+IGFzIHdlbGwuPC9wPgotICA8L2Rpdj4KLSAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICA8cCBjbGFzcz0iaGVscC1ibG9jayB0ZXh0LWxlZnQiPlRvdGFsIHBhY2thZ2Ugc2l6ZTogPHN0cm9uZyBpZD0icGFja2FnZS1yZXZlcnNlLWRlcHMtdG90YWwtc2l6ZSI+PC9zdHJvbmc+PC9wPgotICAgIDxidXR0b24gaWQ9InJtLXBhY2thZ2UtcmV2ZXJzZS1kZXBzLW1vZGFsLWJ0biIgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5SZW1vdmUgYWxsIDxzcGFuIGNsYXNzPSJyZXZlcnNlLWRlcHMtY291bnQtcGx1czEiPjwvYnV0dG9uPgotICAgIDxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2FuY2VsPC9idXR0b24+Ci0gIDwvZGl2PgotPC9kaXY+Cis8ZGl2IHN0eWxlPSJkaXNwbGF5Om5vbmUiIGlkPSJwYWNrYWdlLXJldmVyc2UtZGVwcy1tb2RhbCIgY2xhc3M9Im1vZGFsIGZhZGUgaW4iIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im15TW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49ImZhbHNlIj4KKyAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICAgIDxoMz48c3BhbiBjbGFzcz0icGFja2FnZS10by1ybS1uYW1lIj48L3NwYW4+IHJldmVyc2UgZGVwZW5kZW5jaWVzPC9oMz4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgIDxwPiA8c3Ryb25nIGNsYXNzPSJyZXZlcnNlLWRlcHMtY291bnQiPjwvc3Ryb25nPiA8c3BhbiBjbGFzcz0icmV2ZXJzZS1kZXBzLXBhY2thZ2UiPjwvc3Bhbj4gaW4geW91ciBpbWFnZSA8c3BhbiBjbGFzcz0icmV2ZXJzZS1kZXBzLWRlcGVuZHMiPjwvc3Bhbj4gb24gPHN0cm9uZyBjbGFzcz0icGFja2FnZS10by1ybS1uYW1lIj48L3N0cm9uZz46PC9wPgorICAgICAgICA8dWwgaWQ9InBhY2thZ2UtcmV2ZXJzZS1kZXAtbGlzdCI+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxwPkluIG9yZGVyIHRvIHJlbW92ZSA8c3Ryb25nIGNsYXNzPSJwYWNrYWdlLXRvLXJtLW5hbWUiPjwvc3Ryb25nPiwgeW91IG11c3QgcmVtb3ZlIDxzcGFuIGNsYXNzPSJyZXZlcnNlLWRlcHMtdGhpcyI+PC9zcGFuPiA8c3Ryb25nIGNsYXNzPSJyZXZlcnNlLWRlcHMtY291bnQiPjwvc3Ryb25nPiA8c3BhbiBjbGFzcz0icmV2ZXJzZS1kZXBzLXBhY2thZ2UiPjwvc3Bhbj4gYXMgd2VsbC48L3A+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CisgICAgICAgIDxwIGNsYXNzPSJoZWxwLWJsb2NrIHRleHQtbGVmdCI+VG90YWwgcGFja2FnZSBzaXplOiA8c3Ryb25nIGlkPSJwYWNrYWdlLXJldmVyc2UtZGVwcy10b3RhbC1zaXplIj48L3N0cm9uZz48L3A+CisgICAgICAgIDxidXR0b24gaWQ9InJtLXBhY2thZ2UtcmV2ZXJzZS1kZXBzLW1vZGFsLWJ0biIgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5SZW1vdmUgYWxsIDxzcGFuIGNsYXNzPSJyZXZlcnNlLWRlcHMtY291bnQtcGx1czEiPjwvYnV0dG9uPgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+PCEtLSAvLm1vZGFsLWNvbnRlbnQgLS0+CisgIDwvZGl2PjwhLS0gLy5tb2RhbC1kaWFsb2cgLS0+Cis8L2Rpdj48IS0tIC8ubW9kYWwgLS0+CiA8IS0tIGVuZCBwYWNrYWdlIGRlcGVuZGVuY2llcyBtb2RhbCAtLT4KIAotCi08ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjExIj4KLSAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyBsZWFkIiBpZD0iaW1hZ2UtY3JlYXRlZC1ub3RpZmljYXRpb24iIHN0eWxlPSJtYXJnaW4tdG9wOiAxNXB4OyBkaXNwbGF5OiBub25lIj4KLSAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1kaXNtaXNzPSJhbGVydCIgY2xhc3M9ImNsb3NlIj54PC9idXR0b24+Ci0gICAgWW91ciBjdXN0b20gaW1hZ2UgPHN0cm9uZz57e3JlY2lwZS5uYW1lfX08L3N0cm9uZz4gaGFzIGJlZW4gY3JlYXRlZC4gWW91IGNhbiBub3cgYWRkIG9yIHJlbW92ZSBwYWNrYWdlcyBhcyBuZWVkZWQuCi0gIDwvZGl2PgotICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciBhaXIiPgotICAgIDxoMT4KLSAgICAgIHt7cmVjaXBlLm5hbWV9fQotICAgICAgPHNtYWxsPih7e3JlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSk8L3NtYWxsPgotICAgIDwvaDE+Ci0gIDwvZGl2PgorPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyBhbGVydC1kaXNtaXNzaWJsZSBjaGFuZ2Utbm90aWZpY2F0aW9uIiBpZD0iaW1hZ2UtY3JlYXRlZC1ub3RpZmljYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKwk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1kaXNtaXNzPSJhbGVydCIgY2xhc3M9ImNsb3NlIj4mdGltZXM7PC9idXR0b24+CisJPHA+WW91ciBjdXN0b20gaW1hZ2UgPHN0cm9uZz57e3JlY2lwZS5uYW1lfX08L3N0cm9uZz4gaGFzIGJlZW4gY3JlYXRlZC4gWW91IGNhbiBub3cgYWRkIG9yIHJlbW92ZSBwYWNrYWdlcyBhcyBuZWVkZWQuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgIDxoMT4KKyAgICB7e3JlY2lwZS5uYW1lfX0KKyAgICA8c21hbGw+KHt7cmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19KTwvc21hbGw+CisgIDwvaDE+CiA8L2Rpdj4KIAotPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMSI+Ci0gIDxkaXYgY2xhc3M9InNwYW44Ij4KKzxkaXYgY2xhc3M9InJvdyI+CisgIDxkaXYgY2xhc3M9ImNvbC1tZC04Ij4KICAgICA8ZGl2IGNsYXNzPSJidXR0b24tcGxhY2UgYnRuLWdyb3VwIiBzdHlsZT0id2lkdGg6IDEwMCUiPgotICAgICAgPGEgY2xhc3M9ImJ0biBidG4tbGFyZ2Ugc3BhbjYgYnVpbGQtY3VzdG9tLWltYWdlIiBocmVmPSIjIiBzdHlsZT0id2lkdGg6IDUwJSI+CisgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZyBidWlsZC1jdXN0b20taW1hZ2UiIGhyZWY9IiMiIHN0eWxlPSJ3aWR0aDogNTAlIj4KICAgICAgICAgQnVpbGQge3tyZWNpcGUubmFtZX19CiAgICAgICA8L2E+Ci0gICAgICA8YSBocmVmPSJ7JSB1cmwgJ2N1c3RvbXJlY2lwZWRvd25sb2FkJyBwcm9qZWN0LmlkIHJlY2lwZS5pZCAlfSIgY2xhc3M9ImJ0biBidG4tbGFyZ2Ugc3BhbjYiIHN0eWxlPSJ3aWR0aDogNTAlIj4KKyAgICAgIDxhIGhyZWY9InslIHVybCAnY3VzdG9tcmVjaXBlZG93bmxvYWQnIHByb2plY3QuaWQgcmVjaXBlLmlkICV9IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZyIgc3R5bGU9IndpZHRoOiA1MCUiCisgICAgICAgICAgICAgICB7JSBpZiBub3QgYmFzZV9yZWNpcGVfZmlsZSAlfQorICAgICAgICAgICAgICAgZGlzYWJsZWQ9ImRpc2FibGVkIgorICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0+CiAgICAgICAgIERvd25sb2FkIHJlY2lwZSBmaWxlCisgICAgICAgIHslIGlmIG5vdCBiYXNlX3JlY2lwZV9maWxlICV9CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiCisgICAgICAgICAgIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlRoZSByZWNpcGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCwgc28geW91IGNhbm5vdCBkb3dubG9hZCBpdC4gWW91IG5lZWQgdG8gYnVpbGQgeW91ciBjdXN0b20gaW1hZ2UgZmlyc3QiPjwvaT4KKyAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgIDwvYT4KICAgICA8L2Rpdj4KLSAgICA8ZGl2IGlkPSJuby1yZXN1bHRzLXNwZWNpYWwte3t0YWJsZV9uYW1lfX0iIGNsYXNzPSJhaXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICA8ZGl2IGlkPSJuby1yZXN1bHRzLXNwZWNpYWwte3t0YWJsZV9uYW1lfX0iIGNsYXNzPSJ0b3AtYWlyIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KICAgICAgICAgPGgzPk5vIHBhY2thZ2VzIGZvdW5kPC9oMz4KLSAgICAgICAgPHA+WW91IG1pZ2h0IGNvbnNpZGVyIDxhIGhyZWY9eyUgdXJsICdwcm9qZWN0c29mdHdhcmVyZWNpcGVzJyBwcm9qZWN0LmlkICV9PnNlYXJjaGluZyB0aGUgbGlzdCBvZiByZWNpcGVzPC9hPiBpbnN0ZWFkLiBJZiB5b3UgZmluZCBhIHJlY2lwZSB0aGF0IG1hdGNoZXMgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgeW91IHdhbnQ6PC9wPgorICAgICAgICA8cD5Zb3UgbWlnaHQgY29uc2lkZXIgPGEgaHJlZj17JSB1cmwgJ3Byb2plY3Rzb2Z0d2FyZXJlY2lwZXMnIHByb2plY3QuaWQgJX0+c2VhcmNoaW5nIHRoZSBsaXN0IG9mIHJlY2lwZXM8L2E+IGluc3RlYWQuPC9wPiAKKyAgICAgICAgPHA+SWYgeW91IGZpbmQgYSByZWNpcGUgdGhhdCBtYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHlvdSB3YW50OjwvcD4KICAgICAgICAgPG9sPgogICAgICAgICAgIDxsaT5BZGQgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRvIHlvdXIgcHJvamVjdDwvbGk+CiAgICAgICAgICAgPGxpPkJ1aWxkIHRoZSByZWNpcGU8L2xpPgogICAgICAgICAgIDxsaT5PbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIGNvbWUgYmFjayB0byB0aGlzIHBhZ2UgYW5kIHNlYXJjaCBmb3IgdGhlIHBhY2thZ2U8L2xpPgogICAgICAgICA8L29sPgotICAgICAgICA8Zm9ybSBjbGFzcz0iaW5wdXQtYXBwZW5kIG5vLXJlc3VsdHMiPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIG5vLXJlc3VsdHMtc2VhcmNoLWlucHV0IiBpZD0ibm8tcmVzdWx0cy1zZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIC8+Ci0gICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImFkZC1vbiBidG4iIGlkPSJuby1yZXN1bHRzLXJlbW92ZS1zZWFyY2gtYnRuIiB0YWJpbmRleD0iLTEiPgotICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+Ci0gICAgICAgICAgPC9hPgotICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzZWFyY2gtc3VibWl0LXt7dGFibGVfbmFtZX19Ij5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIG5vLXJlc3VsdHMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIj4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wgbm8tcmVzdWx0cy1zZWFyY2gtaW5wdXQiIGlkPSJuby1yZXN1bHRzLXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgLz4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IGdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlLWNpcmNsZSIgaWQ9Im5vLXJlc3VsdHMtcmVtb3ZlLXNlYXJjaC1idG4iIHRhYmluZGV4PSItMSI+PC9zcGFuPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iPlNlYXJjaDwvYnV0dG9uPgogICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgaWQ9Im5vLXJlc3VsdHMtc2hvdy1hbGwtcGFja2FnZXMiPlNob3cgYWxsIHBhY2thZ2VzPC9idXR0b24+CiAgICAgICAgIDwvZm9ybT4KICAgICAgIDwvZGl2PgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGlkPSJyZXN1bHRzLWZvdW5kLXt7dGFibGVfbmFtZX19Ij4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJyZXN1bHRzLWZvdW5kLXt7dGFibGVfbmFtZX19Ij4KICAgICAgIDxkaXYgaWQ9InBhY2thZ2VzLXRhYmxlIj4KICAgICAgICAgeyUgaWYgcmVjaXBlLmdldF9hbGxfcGFja2FnZXMuY291bnQgPT0gMCBhbmQgbGFzdF9idWlsZCA9PSBOb25lICV9CiAgICAgICAgIDxoMj4gQWRkIHwgUmVtb3ZlIHBhY2thZ2VzIDwvaDI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gYWlyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CiAgICAgICAgICAgPHAgY2xhc3M9ImxlYWQiPlRvYXN0ZXIgaGFzIG5vIHBhY2thZ2UgaW5mb3JtYXRpb24gZm9yIHt7cmVjaXBlLm5hbWV9fS4gVG8gZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiwgYnVpbGQge3tyZWNpcGUubmFtZX19PC9wPgotICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4taW5mbyBidG4tbGFyZ2UgYnVpbGQtY3VzdG9tLWltYWdlIiBzdHlsZT0ibWFyZ2luOjIwcHggMCAxMHB4IDA7Ij5CdWlsZCB7e3JlY2lwZS5uYW1lfX08L2J1dHRvbj4KKyAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWluZm8gYnRuLWxnIGJ1aWxkLWN1c3RvbS1pbWFnZSIgc3R5bGU9Im1hcmdpbjoyMHB4IDAgMTBweCAwOyI+QnVpbGQge3tyZWNpcGUubmFtZX19PC9idXR0b24+CiAgICAgICAgIDwvZGl2PgogICAgICAgICB7JSBlbHNlICV9CiAgICAgICAgIHsjIFRvYXN0ZXJUYWJsZSBmb3IgQWRkaW5nIHJlbW92ZSBwYWNrYWdlcyAjfQpAQCAtMTM3LDg3ICsxNzksOTAgQEAKICAgICAgICAgeyUgaW5jbHVkZSAidG9hc3RlcnRhYmxlLmh0bWwiICV9CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICA8L2Rpdj4KLSAgICAgIDwvZGl2PgogICAgIDwvZGl2PgotICAgIDxkaXYgY2xhc3M9InNwYW40IHdlbGwiPgotICAgICAgPGgyIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwcHg7Ij5BYm91dCB7e3JlY2lwZS5uYW1lfX08L2gyPgorICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPgorICAgIDxkaXYgY2xhc3M9IndlbGwiPgorICAgICAgPGgyPkFib3V0IHt7cmVjaXBlLm5hbWV9fTwvaDI+CiAKLSAgICAgIDxkbD4KKyAgICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KICAgICAgICAgPGR0PgotICAgICAgICAgIEFwcHJveC4gcGFja2FnZXMgaW5jbHVkZWQKLSAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUaGUgbnVtYmVyIG9mIHBhY2thZ2VzIGluY2x1ZGVkIGlzIGJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gcHJldmlvdXMgYnVpbGRzIGFuZCBmcm9tIHBhcnNpbmcgbGF5ZXJzLCBzbyB3ZSBjYW4gbmV2ZXIgYmUgc3VyZSBpdCBpcyAxMDAlIGFjY3VyYXRlIj48L2k+CisgICAgICAgIEFwcHJveC4gcGFja2FnZXMgaW5jbHVkZWQKKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iVGhlIG51bWJlciBvZiBwYWNrYWdlcyBpbmNsdWRlZCBpcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIHByZXZpb3VzIGJ1aWxkcyBhbmQgZnJvbSBwYXJzaW5nIGxheWVycywgc28gd2UgY2FuIG5ldmVyIGJlIHN1cmUgaXQgaXMgMTAwJSBhY2N1cmF0ZSI+PC9zcGFuPgogICAgICAgICA8L2R0PgogICAgICAgICA8ZGQgaWQ9InRvdGFsLW51bS1wYWNrYWdlcyI+e3tyZWNpcGUuZ2V0X2FsbF9wYWNrYWdlcy5jb3VudH19PC9kZD4KICAgICAgICAgPGR0PgotICAgICAgICAgIEFwcHJveC4gcGFja2FnZSBzaXplCi0gICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iUGFja2FnZSBzaXplIGlzIGJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gcHJldmlvdXMgYnVpbGRzLCBzbyB3ZSBjYW4gbmV2ZXIgYmUgc3VyZSBpdCBpcyAxMDAlIGFjY3VyYXRlIj48L2k+CisgICAgICAgIEFwcHJveC4gcGFja2FnZSBzaXplCisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJQYWNrYWdlIHNpemUgaXMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBwcmV2aW91cyBidWlsZHMsIHNvIHdlIGNhbiBuZXZlciBiZSBzdXJlIGl0IGlzIDEwMCUgYWNjdXJhdGUiPjwvc3Bhbj4KICAgICAgICAgPC9kdD4KICAgICAgICAgPGRkIGlkPSJ0b3RhbC1zaXplLXBhY2thZ2VzIj57e2FwcHJveF9wa2dfc2l6ZS5zaXplX19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvZGQ+CiAgICAgICAgIHslIGlmIGxhc3RfYnVpbGQgJX0KICAgICAgICAgPGR0Pkxhc3QgYnVpbGQ8L2R0PgogICAgICAgICA8ZGQ+Ci0gICAgICAgICAgPGkgY2xhc3M9Imljb24tb2stc2lnbiBzdWNjZXNzIj48L2k+Ci0gICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBwcm9qZWN0LmlkJX0iPnt7bGFzdF9idWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1vay1jaXJjbGUiPjwvc3Bhbj4KKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBwcm9qZWN0LmlkJX0iPnt7bGFzdF9idWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPgogICAgICAgICA8L2RkPgogICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICA8ZHQ+TGF5ZXI8L2R0PgotICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIHByb2plY3QuaWQgcmVjaXBlLmxheWVyX3ZlcnNpb24ucGsgJX0iPnt7cmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC9hPjwvZGQ+CiAgICAgICAgIDxkdD5CYXNlZCBvbjwvZHQ+CiAgICAgICAgIDxkZD48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZWRldGFpbHMnIHByb2plY3QuaWQgcmVjaXBlLmJhc2VfcmVjaXBlLnBrICV9Ij57e3JlY2lwZS5iYXNlX3JlY2lwZS5uYW1lfX08L2E+PC9kZD4KICAgICAgICAgeyUgaWYgcmVjaXBlLmdldF9sYXN0X3N1Y2Nlc3NmdWxfYnVpbHRfdGFyZ2V0ICV9CiAgICAgICAgIHslIHdpdGggcmVjaXBlLmdldF9sYXN0X3N1Y2Nlc3NmdWxfYnVpbHRfdGFyZ2V0IGFzIGxhc3RfYnVpbGRfdGFyZ2V0ICV9CiAgICAgICAgIDxkdD5MYXN0IGJ1aWxkPC9kdD4KICAgICAgICAgPGRkPgotICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW9rLXNpZ24gc3VjY2VzcyI+PC9pPgotICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRkYXNoYm9hcmQnIGxhc3RfYnVpbGRfdGFyZ2V0LmJ1aWxkLnBrICV9Ij4KLSAgICAgICAgICAgIHt7bGFzdF9idWlsZF90YXJnZXQuYnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tb2stY2lyY2xlIj48L3NwYW4+CisgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRkYXNoYm9hcmQnIGxhc3RfYnVpbGRfdGFyZ2V0LmJ1aWxkLnBrICV9Ij4KKyAgICAgICAgICB7e2xhc3RfYnVpbGRfdGFyZ2V0LmJ1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+CiAgICAgICAgIDwvZGQ+CiAgICAgICAgIHslIGVuZHdpdGggJX0KICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgYmFzZV9yZWNpcGVfZmlsZSAlfQogICAgICAgICA8ZHQ+UmVjaXBlIGZpbGU8L2R0PgogICAgICAgICA8ZGQ+Ci0gICAgICAgICAgPGNvZGU+e3tyZWNpcGUubmFtZX19X3t7cmVjaXBlLnZlcnNpb259fS5iYjwvY29kZT4KLSAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2N1c3RvbXJlY2lwZWRvd25sb2FkJyBwcm9qZWN0LnBrIHJlY2lwZS5wayAlfSI+PGkgY2xhc3M9Imljb24tc2hhcmUiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlZpZXcgcmVjaXBlIGZpbGUiPjwvaT48L2E+CisgICAgICAgIDxjb2RlPnt7cmVjaXBlLm5hbWV9fV97e3JlY2lwZS52ZXJzaW9ufX0uYmI8L2NvZGU+CisgICAgICAgIDxhIGhyZWY9InslIHVybCAnY3VzdG9tcmVjaXBlZG93bmxvYWQnIHByb2plY3QucGsgcmVjaXBlLnBrICV9Ij48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1kb3dubG9hZC1hbHQiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRG93bmxvYWQgcmVjaXBlIGZpbGUiPjwvc3Bhbj48L2E+CiAgICAgICAgIDwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgIDxkdD5MYXllcjwvZHQ+CiAgICAgICAgIDxkZD48YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgcHJvamVjdC5pZCByZWNpcGUubGF5ZXJfdmVyc2lvbi5wayAlfSI+e3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L2E+PC9kZD4KICAgICAgICAgeyUgaWYgcmVjaXBlLnN1bW1hcnkgJX0KICAgICAgICAgPGR0PgotICAgICAgICAgIFN1bW1hcnkKKyAgICAgICAgU3VtbWFyeQogICAgICAgICA8L2R0PgogICAgICAgICA8ZGQ+Ci0gICAgICAgICAge3tyZWNpcGUuc3VtbWFyeX19CisgICAgICAgIHt7cmVjaXBlLnN1bW1hcnl9fQogICAgICAgICA8L2RkPgogICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICB7JSBpZiByZWNpcGUuZGVzY3JpcHRpb24gJX0KICAgICAgICAgPGR0PgotICAgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgIERlc2NyaXB0aW9uCiAgICAgICAgIDwvZHQ+CiAgICAgICAgIDxkZD4KLSAgICAgICAgICB7e3JlY2lwZS5kZXNjcmlwdGlvbn19CisgICAgICAgIHt7cmVjaXBlLmRlc2NyaXB0aW9ufX0KICAgICAgICAgPC9kZD4KICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgPGR0PlZlcnNpb248L2R0PgogICAgICAgICA8ZGQ+Ci0gICAgICAgICAge3tyZWNpcGUudmVyc2lvbn19CisgICAgICAgIHt7cmVjaXBlLnZlcnNpb259fQogICAgICAgICA8L2RkPgogICAgICAgICB7JSBpZiByZWNpcGUuc2VjdGlvbiAlfQogICAgICAgICA8ZHQ+U2VjdGlvbjwvZHQ+CiAgICAgICAgIDxkZD4KLSAgICAgICAgICB7e3JlY2lwZS5zZWN0aW9ufX0KKyAgICAgICAge3tyZWNpcGUuc2VjdGlvbn19CiAgICAgICAgIDwvZGQ+CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KICAgICAgICAgPGRkPgotICAgICAgICAgIHt7cmVjaXBlLmxpY2Vuc2V9fQotICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkFsbCBjdXN0b20gaW1hZ2VzIGhhdmUgdGhlaXIgbGljZW5zZSBzZXQgdG8gTUlULiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRoZSByZWNpcGUgKC5iYikgZmlsZSwgYW5kIG5vdCB0byB0aGUgaW1hZ2UgaXRzZWxmLiBUbyBzZWUgd2hpY2ggbGljZW5zZXMgYXBwbHkgdG8gdGhlIGltYWdlIHlvdSBtdXN0IGNoZWNrIHRoZSBsaWNlbnNlIG1hbmlmZXN0IGdlbmVyYXRlZCB3aXRoIGVhY2ggYnVpbGQiPjwvaT4KLSAgICAgICAgICA8L2RkPgorICAgICAgICB7e3JlY2lwZS5saWNlbnNlfX0KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkFsbCBjdXN0b20gaW1hZ2VzIGhhdmUgdGhlaXIgbGljZW5zZSBzZXQgdG8gTUlULiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRoZSByZWNpcGUgKC5iYikgZmlsZSwgYW5kIG5vdCB0byB0aGUgaW1hZ2UgaXRzZWxmLiBUbyBzZWUgd2hpY2ggbGljZW5zZXMgYXBwbHkgdG8gdGhlIGltYWdlIHlvdSBtdXN0IGNoZWNrIHRoZSBsaWNlbnNlIG1hbmlmZXN0IGdlbmVyYXRlZCB3aXRoIGVhY2ggYnVpbGQiPjwvaT4KKyAgICAgICAgPC9kZD4KICAgICAgIDwvZGw+Ci0gICAgICA8IS0tCi0gICAgICA8aSBjbGFzcz0iaWNvbi10cmFzaCBuby10b29sdGlwIj48L2k+Ci0gICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZXJyb3IiIGlkPSJkZWxldGUiPkRlbGV0ZSBjdXN0b20gaW1hZ2U8L2E+Ci0gICAgICAgIC0tPgorICAgICAgPGkgY2xhc3M9Imljb24tdHJhc2ggdGV4dC1kYW5nZXIiPjwvaT4KKyAgICAgIDxhIGhyZWY9IiNkZWxldGUtcmVjaXBlLW1vZGFsIiBkYXRhLXRhcmdldD0iI2RlbGV0ZS1yZWNpcGUtbW9kYWwiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgY2xhc3M9InRleHQtZGFuZ2VyIiBpZD0iZGVsZXRlLXJlY2lwZSI+CisgICAgICAgIERlbGV0ZSBjdXN0b20gaW1hZ2UKKyAgICAgIDwvYT4KICAgICA8L2Rpdj4KICAgPC9kaXY+Cis8L2Rpdj4KIAotICB7JSBlbmRibG9jayAlfQoreyUgZW5kd2l0aCAlfXsjIGVuZCBiYXNlX3JlY2lwZV9maWxlICN9Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3BhZ2luYXRpb25fYm90dG9tLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbAppbmRleCBmNDBjMjFkLi4xNWFkZmJjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbApAQCAtNiw4ICs2LDggQEAKIAogeyMgb25seSBwYWdpbmF0ZSBpZiAxMCBvciBtb3JlIHJvd3MgdW5maWx0ZXJlZCwgYWxsIHBhZ2VzICN9CiB7JSBpZiBvYmplY3RfY291bnQgPj0gMTAgJX0KLTxkaXYgY2xhc3M9InBhZ2luYXRpb24iPgotICA8dWw+Cis8ZGl2IGlkPSJwYWdpbmF0aW9uLWRldGFpbCI+CisgIDx1bCBjbGFzcz0icGFnaW5hdGlvbiI+CiB7JWlmIG9iamVjdHMuaGFzX3ByZXZpb3VzICV9CiAgICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7b2JqZWN0cy5wcmV2aW91c19wYWdlX251bWJlcn19fSkiPiZsYXF1bzs8L2E+PC9saT4KIHslZWxzZSV9CkBAIC0yMywxNiArMjMsMTggQEAKIHslZW5kaWYlfQogICA8L3VsPgogCi0gIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgotICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctYm90dG9tOjEwcHg7Ij5TaG93IHJvd3M6PC9zcGFuPgotICAgIDxzZWxlY3QgY2xhc3M9InBhZ2VzaXplIj4KLSAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICA8Zm9ybSBjbGFzcz0ibmF2YmFyLWZvcm0gbmF2YmFyLXJpZ2h0Ij4KKyAgICA8ZGl2IGNsYXNzPWZvcm0tZ3JvdXAiPgorICAgICAgPGxhYmVsPlNob3cgcm93czo8L2xhYmVsPgorICAgICAgPHNlbGVjdCBjbGFzcz0icGFnZXNpemUgZm9ybS1jb250cm9sIj4KKyAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CiAgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CiAgICAgICAgIHslIGVuZGZvciAlfQotICAgICAgeyUgZW5kd2l0aCAlfQotICAgIDwvc2VsZWN0PgotICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgPC9zZWxlY3Q+CisgICAgPC9kaXY+CisgIDwvZm9ybT4KIDwvZGl2PgogCiA8IS0tIFVwZGF0ZSBwYWdlIGRpc3BsYXkgc2V0dGluZ3MgLS0+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NlYXJjaF9oZWFkZXIuaHRtbAppbmRleCA3YmVhM2Y0Li43YTk4NjU5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwKQEAgLTE4LDUxICsxOCw1NSBAQAogICB9KTsKIH0pOwogPC9zY3JpcHQ+Ci08ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorCiB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDEwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCAlfQogICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9Ci0gIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KLSAgICA8aDM+Tm8ge3tzZWFyY2hfd2hhdH19IGZvdW5kPC9oMz4KLSAgICA8Zm9ybSBpZD0ic2VhcmNoZm9ybSIgY2xhc3M9ImlucHV0LWFwcGVuZCI+Ci0gIHslIGVsc2UgJX0KLSAgICA8Zm9ybSBpZD0ic2VhcmNoZm9ybSIgY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCI+Ci0gIHslIGVuZGlmICV9Ci0KLSAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteGxhcmdlIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7c2VhcmNoX3doYXR9fSIgbmFtZT0ic2VhcmNoIiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ij4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJuYW1lOisiIG5hbWU9Im9yZGVyYnkiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9ImwiIG5hbWU9InBhZ2UiPgotICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KLSAgICAgIDxhIGNsYXNzPSJhZGQtb24gYnRuIHNlYXJjaC1jbGVhciI+Ci0gICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgotICAgICAgPC9hPgotICB7JSBlbmRpZiAlfQotICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4iPlNlYXJjaDwvYnV0dG9uPgotICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9Ci0gICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tbGluayBzZWFyY2gtY2xlYXIiPgotICAgICAgICBTaG93IGFsbCB7e3NlYXJjaF93aGF0fX0KLSAgICAgIDwvYnV0dG9uPgotICB7JSBlbmRpZiAlfQotICAgIDwvZm9ybT4KLXslIGVuZGlmICV9Ci0KLXslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KLSAgPC9kaXY+IHsjIGVuZCBhbGVydCAjfQoteyUgZWxzZSAlfQotICB7JSBpZiBvYmplY3RfY291bnQgPiAxMCAlfQotICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KLSAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgotICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplIj4KLSAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KLSAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KLSAgICAgICAgeyUgaWYgcmVxdWVzdC5zZXNzaW9uLmxpbWl0ID09IGkgJX0KLSAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19IiBzZWxlY3RlZD57e2l9fTwvb3B0aW9uPgotICAgICAgICB7JSBlbHNlICV9Ci0gICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgICAgPGg0Pk5vIHt7c2VhcmNoX3doYXR9fSBmb3VuZDwvaDQ+CisgICAgPGZvcm0gaWQ9InNlYXJjaGZvcm0iIGNsYXNzPSJmb3JtLWlubGluZSI+CisgICAgICB7JSBlbHNlICV9CisgICAgICA8Zm9ybSBpZD0ic2VhcmNoZm9ybSIgY2xhc3M9Im5hdmJhci1mb3JtIG5hdmJhci1sZWZ0IGRldGFpbC1wYWdlLWNvbnRyb2xzIj4KICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgIHslIGVuZGZvciAlfQotICAgIHslIGVuZHdpdGggJX0KLSAgICA8L3NlbGVjdD4KLSAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBjbGFzcz0iZm9ybS1jb250cm9sIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7c2VhcmNoX3doYXR9fSIgbmFtZT0ic2VhcmNoIiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ij4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJuYW1lOisiIG5hbWU9Im9yZGVyYnkiPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9ImwiIG5hbWU9InBhZ2UiPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmVtb3ZlLXNlYXJjaC1idG4tZGV0YWlsLXNlYXJjaCBzZWFyY2gtY2xlYXIgZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmUtY2lyY2xlIj48L3NwYW4+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1saW5rIHNlYXJjaC1jbGVhciI+CisgICAgICAgICAgU2hvdyBhbGwge3tzZWFyY2hfd2hhdH19CisgICAgICAgIDwvYnV0dG9uPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgPC9mb3JtPgorICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICA8L2Rpdj4geyMgZW5kIGFsZXJ0ICN9CisgIHslIGVsc2UgJX0KKyAgeyUgaWYgb2JqZWN0X2NvdW50ID4gMTAgJX0KKyAgPGZvcm0gY2xhc3M9Im5hdmJhci1mb3JtIG5hdmJhci1yaWdodCI+CisgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICA8bGFiZWw+U2hvdyByb3dzOjwvbGFiZWw+CisgICAgICA8c2VsZWN0IGNsYXNzPSJwYWdlc2l6ZSBmb3JtLWNvbnRyb2wiPgorICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICB7JSBpZiByZXF1ZXN0LnNlc3Npb24ubGltaXQgPT0gaSAlfQorICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSIgc2VsZWN0ZWQ+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgIDwvc2VsZWN0PgorICAgIDwvZGl2PgorICA8L2Zvcm0+CiAgIHslIGVuZGlmICV9CiB7JSBlbmRpZiAlfQotPC9kaXY+IHsjIHJvdy1mbHVpZCAjfQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc29ydGVkX2hlYWRlci5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NvcnRlZF9oZWFkZXIuaHRtbAppbmRleCA2Y2UyOTJlLi40NDM0ZGY0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc29ydGVkX2hlYWRlci5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zb3J0ZWRfaGVhZGVyLmh0bWwKQEAgLTEwLDE0ICsxMCwxNCBAQAogICAgICAgICA8IS0tIFRhYmxlIGhlYWRlciByb3c7IGdlbmVyYXRlZCBmcm9tICJ0YWJsZWNvbHMiIGVudHJ5IGluIHRoZSBjb250ZXh0IGRpY3QgLS0+CiAgICAgICAgIDx0cj4KICAgICAgICAgICAgIHslIGZvciB0YyBpbiB0YWJsZWNvbHMgJX08dGggY2xhc3M9InslaWYgdGMuZGNsYXNzJX17e3RjLmRjbGFzc319eyUgZW5kaWYgJX0geyVpZiB0Yy5jbGFzcyAlfXt7dGMuY2xjbGFzc319eyUgZW5kaWYgJX0iPgotICAgICAgICAgICAgICAgIHslaWYgdGMucWhlbHAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJ7e3RjLnFoZWxwfX0iPjwvaT57JWVuZGlmJX0KLSAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyZmllbGQlfTxhIHslaWYgdGMub3JkZXJpY29uJX0gY2xhc3M9InNvcnRlZCIgeyVlbmRpZiV9aHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6IDEsICdvcmRlcmJ5JyA6ICd7e3RjLm9yZGVyZmllbGR9fScgfSkiPnt7dGMubmFtZX19PC9hPnslZWxzZSV9PHNwYW4gY2xhc3M9Im11dGVkIj57e3RjLm5hbWV9fTwvc3Bhbj57JWVuZGlmJX0KLSAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L3NwYW4+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmZpZWxkJX08YSB7JWlmIHRjLm9yZGVyaWNvbiV9IGNsYXNzPSJzb3J0ZWQiIHslZW5kaWYlfWhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOiAxLCAnb3JkZXJieScgOiAne3t0Yy5vcmRlcmZpZWxkfX0nIH0pIj57e3RjLm5hbWV9fTwvYT57JWVsc2UlfTxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj57e3RjLm5hbWV9fTwvc3Bhbj57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxzcGFuIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvc3Bhbj57JWVuZGlmJX0KICAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIGZvcmxvb3AuZmlyc3QgJX0KICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWluZm8iPnt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgIHslaWYgdGMuZmlsdGVyJX08ZGl2IGNsYXNzPSJidG4tZ3JvdXAgcHVsbC1yaWdodCI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNmaWx0ZXJfe3t0Yy5maWx0ZXIuY2xhc3N9fSIgcm9sZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1taW5pIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyJX17e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX2ljb246cmVxdWVzdC5HRVQuZmlsdGVyfX0geyVlbmRpZiV9IiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgdGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXIgJX0gdGl0bGU9IjxwPnt7dGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXJ9fTwvcD48cD48YSBjbGFzcz0nYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeScgaHJlZj1qYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydmaWx0ZXInOicnfSk+U2hvdyBhbGwgeyUgaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5ICV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl9fXslIGVsc2UgJX17e29iamVjdG5hbWV9fXslIGVuZGlmICV9PC9hPjwvcD4iIHslZW5kaWYlfSBkYXRhLXRvZ2dsZT0ibW9kYWwiPiA8aSBjbGFzcz0iaWNvbi1maWx0ZXIgZmlsdGVyZWQiPjwvaT4gPC9hPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmlsdGVyX3t7dGMuZmlsdGVyLmNsYXNzfX0iIHJvbGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbWluaSB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciV9e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF9pY29uOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZW5kaWYlfSIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIHRjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyICV9IHRpdGxlPSI8cD57e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyfX08L3A+PHA+PGEgY2xhc3M9J2J0biBidG4tc20gYnRuLXByaW1hcnknIGhyZWY9amF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsnZmlsdGVyJzonJ30pPlNob3cgYWxsIHslIGlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSAlfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fX17JSBlbHNlICV9e3tvYmplY3RuYW1lfX17JSBlbmRpZiAlfTwvYT48L3A+IiB7JWVuZGlmJX0gZGF0YS10b2dnbGU9Im1vZGFsIj4gPGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZmlsdGVyIGZpbHRlcmVkIj48L2k+IDwvYT4KICAgICAgICAgICAgICAgICA8L2Rpdj57JWVuZGlmJX0KICAgICAgICAgICAgIDwvdGg+eyUgZW5kZm9yICV9CiAgICAgICAgIDwvdHI+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXJpbmZvLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXJpbmZvLmh0bWwKaW5kZXggZWNiNDZiZi4uYWI4OWUyNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlyaW5mby5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RpcmluZm8uaHRtbApAQCAtMTgsNiArMTgsMTMgQEAKIHslIGxvYWQgcHJvamVjdHRhZ3MgJX0KIAogPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgorICB2YXIgY3R4ID0ge307CisgIGN0eC50YXJnZXQgPSAie3t0YXJnZXQudGFyZ2V0fX0iOworCisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CisgICAgJCgiI21lbnUtIitjdHgudGFyZ2V0KS5hZGRDbGFzcygiYWN0aXZlIik7CisgIH0pOworCiAgICAgZnVuY3Rpb24gc2V0dXBUcmVldGFibGUoKSB7CiAgICAgICAgICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSh7CiAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLApAQCAtNTksOSArNjYsNiBAQAogICAgIGZ1bmN0aW9uIGZvcm1hdFJvdyhvKSB7CiAgICAgICAgIC8qIHNldHVwIHRyLXdpZGUgZm9ybWF0dGluZyAqLwogICAgICAgICB2YXIgdHIgPSAnPHRyIGNsYXNzPSInOwotICAgICAgICBpZiAoby5saW5rX3RvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyICs9ICdtdXRlZCAnOwotICAgICAgICB9CiAgICAgICAgIGlmIChvLmlzZGlyICYmIG8uY2hpbGRjb3VudCkgewogICAgICAgICAgICAgdHIgKz0gJ2JyYW5jaCIgZGF0YS10dC1icmFuY2g9InRydWUiICc7CiAgICAgICAgIH0KQEAgLTc1LDcgKzc5LDcgQEAKICAgICAgICAgdHIgKz0gJz4nOwogCiAgICAgICAgIC8qIHNldHVwIHRkIHNwZWNpZmljIGZvcm1hdHRpbmcgKi8KLSAgICAgICAgdmFyIGxpbmtfdG8gPSB0ZChvLmxpbmtfdG8pOworCQkJCXZhciBsaW5rX3RvID0gJzx0ZCBjbGFzcz0idGV4dC1tdXRlZCI+JyArIG8ubGlua190byArICc8L3RkPic7CiAgICAgICAgIHZhciBzaXplID0gJzx0ZCBjbGFzcyA9ICJzaXplY29sIj4nICsgby5zaXplICsgJzwvdGQ+JwogICAgICAgICB2YXIgcGVybWlzc2lvbiA9IHRkKG8ucGVybWlzc2lvbik7CiAgICAgICAgIHZhciBvd25lciA9IHRkKG8ub3duZXIpOwpAQCAtOTYsNyArMTAwLDcgQEAKICAgICAgICAgICAgIGlmIChvLmNoaWxkY291bnQpIHsKICAgICAgICAgICAgICAgICBuYW1lICs9ICc8YSBocmVmPSIiPic7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBuYW1lICs9ICc8aSBjbGFzcz0iaWNvbi1mb2xkZXItY2xvc2UiPjwvaT4nOworICAgICAgICAgICAgbmFtZSArPSAnPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZm9sZGVyLWNsb3NlIj48L3NwYW4+JzsKICAgICAgICAgICAgIG5hbWUgKz0gJyZuYnNwOycgKyBvLm5hbWU7CiAgICAgICAgICAgICBpZiAoby5jaGlsZGNvdW50KSB7CiAgICAgICAgICAgICAgICAgbmFtZSArPSAnPC9hPic7CkBAIC0xMTAsMTAgKzExNCwxMCBAQAogICAgICAgICAgICAgICAgICAgbmFtZXNwYW4gPSAzOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2YXIgY29sc3BhbiA9ICdjb2xzcGFuPSInICsgbmFtZXNwYW4gKyAnIic7Ci0gICAgICAgICAgICAgICAgbmFtZSA9ICc8dGQgJyArIGNvbHNwYW4gKyAnPjxpIGNsYXNzPSJpY29uLWZpbGUiPjwvaT4nOworICAgICAgICAgICAgICAgIG5hbWUgPSAnPHRkICcgKyBjb2xzcGFuICsgJz48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1maWxlIj48L3NwYW4+JzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5hbWUgPSAnPHRkPjxpIGNsYXNzPSJpY29uLWhhbmQtcmlnaHQiPjwvaT4nOworICAgICAgICAgICAgICAgIG5hbWUgPSAnPHRkIGNsYXNzPSJ0ZXh0LW11dGVkIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1oYW5kLXJpZ2h0Ij48L3NwYW4+JzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5hbWUgKz0gJyZuYnNwOycgKyBvLm5hbWU7CiAgICAgICAgICAgICBuYW1lICs9ICc8L3RkPic7CkBAIC0xMzQsMTAgKzEzOCwxMCBAQAogICAgICAgICAgICAgcGFja2FnZSArPSAnPC9hPic7CiAgICAgICAgICAgICBpZiAoby5pbnN0YWxsZWRfcGFja2FnZSAhPSBvLnBhY2thZ2UpIHsKICAgICAgICAgICAgICAgICAvKiBtYWtlIGNsYXNzIG11dGVkIGFuZCBhZGQgaG92ZXIgaGVscCAqLwotICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJzxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzICcgKyBvLmluc3RhbGxlZF9wYWNrYWdlICsgJyA8L3NwYW4+JzsKLSAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiICc7CisgICAgICAgICAgICAgICAgcGFja2FnZSArPSAnPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPiBhcyAnICsgby5pbnN0YWxsZWRfcGFja2FnZSArICcgPC9zcGFuPic7CisgICAgICAgICAgICAgICAgcGFja2FnZSArPSAnPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiAnOwogICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJ3RpdGxlPSInICsgby5wYWNrYWdlICsgJyB3YXMgcmVuYW1lZCBhdCBwYWNrYWdpbmcgdGltZSBhbmQgd2FzIGluc3RhbGxlZCBpbiB5b3VyIGltYWdlIGFzICcgKyBvLmluc3RhbGxlZF9wYWNrYWdlICsgJyI+JzsKLSAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICc8L2k+JzsKKyAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICc8L3NwYW4+JzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwYWNrYWdlID0gdGQocGFja2FnZSk7CkBAIC0xODQsMjIgKzE4OCwyMiBAQAogICAgIH0KIDwvc2NyaXB0PgogCi08ZGl2IGNsYXNzPSJzcGFuMTAiPgorPGRpdiBjbGFzcz0iY29sLW1kLTEwIj4KIAotICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciBidWlsZC1kYXRhIj4KICAgICAgICAgPGgxPiB7e3RhcmdldC50YXJnZXR9fSA8L2gxPgogICAgIDwvZGl2PgogCi0gICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KLSAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi10YWJzIj4KKyAgICAgICAgPGxpPgogICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLmlkIHRhcmdldC5pZCAlfSI+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT2YgYWxsIHRoZSBwYWNrYWdlcyBidWlsdCwgdGhlIHN1YnNldCBpbnN0YWxsZWQgaW4gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhpcyBpbWFnZSI+PC9pPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9mIGFsbCB0aGUgcGFja2FnZXMgYnVpbHQsIHRoZSBzdWJzZXQgaW5zdGFsbGVkIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBQYWNrYWdlcyBpbmNsdWRlZCAoe3t0YXJnZXQucGFja2FnZV9jb3VudH19IC0ge3twYWNrYWdlc19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkKICAgICAgICAgICAgIDwvYT4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgogICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdkaXJpbmZvJyBidWlsZC5pZCB0YXJnZXQuaWQgJX0iPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGlzIGltYWdlIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgRGlyZWN0b3J5IHN0cnVjdHVyZQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgpAQCAtMjM1LDcgKzIzOSw3IEBACiAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICA8L3RhYmxlPgogICAgIDwvZGl2PiA8IS0tIGRpcmVjdG9yeS1zdHJ1Y3R1cmUgLS0+Ci08L2Rpdj4gPCEtLSBzcGFuMTAgLS0+Cis8L2Rpdj4gPCEtLSBjb2wtbWQtMTAgLS0+CiAKIHslIGVuZGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZWRpdGN1c3RvbWltYWdlX21vZGFsLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9lZGl0Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbAppbmRleCA4MDQ2YzA4Li5iYWEzNmMwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9lZGl0Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9lZGl0Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbApAQCAtNiwzMiArNiwzNiBAQAogcmVxdWlyZWQgY29udGV4dDoKICAgYnVpbGQgLSBhIEJ1aWxkIG9iamVjdAogLS0+Ci08ZGl2IGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUgaW4iIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImVkaXQtY3VzdG9tLWltYWdlLW1vZGFsIj4KLSAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KLSAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+w5c8L2J1dHRvbj4KLSAgICA8aDM+V2hpY2ggaW1hZ2UgZG8geW91IHdhbnQgdG8gZWRpdD88L2gzPgotICA8L2Rpdj4KKzxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImVkaXQtY3VzdG9tLWltYWdlLW1vZGFsIj4KKyAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj7DlzwvYnV0dG9uPgorICAgICAgICA8aDM+V2hpY2ggaW1hZ2UgZG8geW91IHdhbnQgdG8gZWRpdD88L2gzPgorICAgICAgPC9kaXY+CiAKLSAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+Ci0gICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KLSAgICAgIHslIGZvciByZWNpcGUgaW4gYnVpbGQuZ2V0X2N1c3RvbV9pbWFnZV9yZWNpcGVzICV9Ci0gICAgICAgIDxsYWJlbCBjbGFzcz0icmFkaW8iPgotICAgICAgICAgIHt7cmVjaXBlLm5hbWV9fQotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9ImZvcm0tY29udHJvbCIgbmFtZT0ic2VsZWN0LWN1c3RvbS1pbWFnZSIKLSAgICAgICAgICAgICAgICAgZGF0YS11cmw9InslIHVybCAnY3VzdG9tcmVjaXBlJyBidWlsZC5wcm9qZWN0LmlkIHJlY2lwZS5pZCAlfSI+Ci0gICAgICAgIDwvbGFiZWw+Ci0gICAgICB7JSBlbmRmb3IgJX0KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICB7JSBmb3IgcmVjaXBlIGluIGJ1aWxkLmdldF9jdXN0b21faW1hZ2VfcmVjaXBlcyAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJzZWxlY3QtY3VzdG9tLWltYWdlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVybD0ieyUgdXJsICdjdXN0b21yZWNpcGUnIGJ1aWxkLnByb2plY3QuaWQgcmVjaXBlLmlkICV9Ij4KKyAgICAgICAgICAgIHt7cmVjaXBlLm5hbWV9fQorICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgdGV4dC1kYW5nZXIiIGlkPSJpbnZhbGlkLWN1c3RvbS1pbWFnZS1oZWxwIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICBQbGVhc2Ugc2VsZWN0IGEgY3VzdG9tIGltYWdlIHRvIGVkaXQuCisgICAgICAgIDwvc3Bhbj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxnIiBkYXRhLXVybD0iIyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hY3Rpb249ImVkaXQtY3VzdG9tLWltYWdlIiBkaXNhYmxlZD4KKyAgICAgICAgICBFZGl0IGN1c3RvbSBpbWFnZQorICAgICAgICA8L2J1dHRvbj4KKyAgICAgIDwvZGl2PgogICAgIDwvZGl2PgotICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIGVycm9yIiBpZD0iaW52YWxpZC1jdXN0b20taW1hZ2UtaGVscCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Ci0gICAgICBQbGVhc2Ugc2VsZWN0IGEgY3VzdG9tIGltYWdlIHRvIGVkaXQuCi0gICAgPC9zcGFuPgotICA8L2Rpdj4KLQotICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIGRhdGEtdXJsPSIjIgotICAgICAgIGRhdGEtYWN0aW9uPSJlZGl0LWN1c3RvbS1pbWFnZSIgZGlzYWJsZWQ+Ci0gICAgICBFZGl0IGN1c3RvbSBpbWFnZQotICAgIDwvYnV0dG9uPgogICA8L2Rpdj4KIDwvZGl2PgogCkBAIC00Niw3ICs1MCw3IEBACiAgICAgcmV0dXJuICQoJ1tuYW1lPSJzZWxlY3QtY3VzdG9tLWltYWdlIl06Y2hlY2tlZCcpOwogICB9OwogCi0gIHJhZGlvcy5jaGFuZ2UoZnVuY3Rpb24gKCkgeworICBmdW5jdGlvbiBlbmFibGVTdWJtaXQoKSB7CiAgICAgaWYgKGdldFNlbGVjdGVkUmFkaW9zKCkubGVuZ3RoID09PSAxKSB7CiAgICAgICBlZGl0Q3VzdG9tSW1hZ2VCdXR0b24ucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKICAgICAgIGVycm9yLmhpZGUoKTsKQEAgLTU1LDYgKzU5LDE0IEBACiAgICAgICBlZGl0Q3VzdG9tSW1hZ2VCdXR0b24uYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKICAgICAgIGVycm9yLnNob3coKTsKICAgICB9CisgIH07CisKKyAgJCgiI2VkaXQtY3VzdG9tLWltYWdlLW1vZGFsIikub24oInNob3duLmJzLm1vZGFsIiwgZnVuY3Rpb24oKSB7CisgICAgZW5hYmxlU3VibWl0KCk7CisgIH0pOworCisgIHJhZGlvcy5jaGFuZ2UoZnVuY3Rpb24gKCkgeworICAgIGVuYWJsZVN1Ym1pdCgpOwogICB9KTsKIAogICBlZGl0Q3VzdG9tSW1hZ2VCdXR0b24uY2xpY2soZnVuY3Rpb24gKCkgewpAQCAtNjcsNSArNzksMTAgQEAKICAgICAgIGVycm9yLnNob3coKTsKICAgICB9CiAgIH0pOworCisgIC8vIFNlbGVjdCB0aGUgZmlyc3QgY3VzdG9tIGltYWdlIGxpc3RlZC4gUmFkaW8gYnV0dG9uIGdyb3VwcworICAvLyBzaG91bGQgYWx3YXlzIGhhdmUgYW4gb3B0aW9uIHNlbGVjdGVkIGJ5IGRlZmF1bHQKKyAgJCgiaW5wdXQ6cmFkaW86Zmlyc3QiKS5hdHRyKCJjaGVja2VkIiwgImNoZWNrZWQiKTsKKwogfSk7CiA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ZpbHRlcnNuaXBwZXQuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ZpbHRlcnNuaXBwZXQuaHRtbAppbmRleCAxMTAxYWE4Li4xMjg2Y2EzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9maWx0ZXJzbmlwcGV0Lmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZmlsdGVyc25pcHBldC5odG1sCkBAIC0xLDU3ICsxLDcyIEBACiB7JSBsb2FkIHByb2plY3R0YWdzICV9CiA8IS0tICd7e2YuY2xhc3N9fScgZmlsdGVyIC0tPgogeyUgd2l0aCBmLmNsYXNzIGFzICBrZXkgJX0KLTxmb3JtIGlkPSJmaWx0ZXJfe3tmLmNsYXNzfX0iIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CisKKzxkaXYgaWQ9ImZpbHRlcl97e2YuY2xhc3N9fSIgY2xhc3M9Im1vZGFsIGZhZGUiICB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1oaWRkZW49InRydWUiPgorICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciPgorICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgPGZvcm0+CiAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNlYXJjaCIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslZW5kaWYlfSIvPgogICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgotICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KLSAgICAgICAgICAgIHslIGlmIHNlYXJjaF90ZXJtICV9Ci0gICAgICAgICAgICAgICAgIDxoMz5GaWx0ZXIge3t0b3RhbF9jb3VudH19IHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfSBtYXRjaGluZyAne3tzZWFyY2hfdGVybX19JyBieSAne3t0Yy5uYW1lfX0nPC9oMz4KLSAgICAgICAgICAgIHslIGVsc2UgJX0KLSAgICAgICAgICAgICAgICA8aDM+RmlsdGVyIHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfSBieSAne3t0Yy5uYW1lfX0nPC9oMz4KLSAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgICAgICB7JSBpZiBzZWFyY2hfdGVybSAlfQorICAgICAgICAgIDxoMz5GaWx0ZXIge3t0b3RhbF9jb3VudH19IHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfSBtYXRjaGluZyAne3tzZWFyY2hfdGVybX19JyBieSAne3t0Yy5uYW1lfX0nPC9oMz4KKyAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgPGgzPkZpbHRlciB7JWlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl8dGl0bGV9fXslZWxzZSV9e3tvYmplY3RuYW1lfHRpdGxlfX17JWVuZGlmJX0gYnkgJ3t7dGMubmFtZX19JzwvaDM+CisgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgotICAgICAgICAgICAgPHA+e3tmLmxhYmVsfX08L3A+Ci0gICAgICAgICAgICA8bGFiZWwgY2xhc3M9InJhZGlvIj4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIlfXt7Zi5vcHRpb25zfGNoZWNrX2ZpbHRlcl9zdGF0dXM6cmVxdWVzdC5HRVQuZmlsdGVyfX0geyVlbHNlJX0gY2hlY2tlZCB7JWVuZGlmJX0gdmFsdWU9IiIgZGF0YS1rZXk9Int7a2V5fX0iPiAgQWxsIHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfQorICAgICAgICAgIDxwPnt7Zi5sYWJlbH19PC9wPgorICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGlvIj4KKyAgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyJX17e2Yub3B0aW9uc3xjaGVja19maWx0ZXJfc3RhdHVzOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZWxzZSV9IGNoZWNrZWQgeyVlbmRpZiV9IHZhbHVlPSIiIGRhdGEta2V5PSJ7e2tleX19Ij4gIEFsbCB7JWlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl8dGl0bGV9fXslZWxzZSV9e3tvYmplY3RuYW1lfHRpdGxlfX17JWVuZGlmJX0KICAgICAgICAgICAgIDwvbGFiZWw+Ci0gICAgICAgICAgICB7JSBmb3Igb3B0aW9uIGluIGYub3B0aW9ucyAlfQotICAgICAgICAgICAgICAgIHslIGlmIG9wdGlvbi4xID09ICdkYXRlcmFuZ2UnICV9Ci0gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWlubGluZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiBpZD0iZmlsdGVyX3ZhbHVlX3t7a2V5fX0iIHslaWYga2V5ID09IGRhdGVyYW5nZV9zZWxlY3RlZCAlfWNoZWNrZWR7JWVuZGlmJX0gdmFsdWU9Int7b3B0aW9uLjF9fSIgZGF0YS1rZXk9Int7a2V5fX0iPiB7e29wdGlvbi4wfX0KLSAgICAgICAgICAgICAgICB7JSBlbHNlICV9Ci0gICAgICAgICAgICAgICAgICB7JSBpZiAxICV9Ci0gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciA9PSBvcHRpb24uMSAlfWNoZWNrZWR7JWVuZGlmJX0gIHZhbHVlPSJ7e29wdGlvbi4xfX0iIGRhdGEta2V5PSJ7e2tleX19Ij4ge3tvcHRpb24uMH19Ci0gICAgICAgICAgICAgICAgICB7JSBjb21tZW50ICJkbyBub3QgZGlzYWJsZSByYWRpbyBzZWxlY3Rpb25zIGJ5IGNvdW50IGZvciBub3ciICV9eyUgZWxzZSAlfQotICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icmFkaW8gbXV0ZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgZGlzYWJsZWQgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgPT0gb3B0aW9uLjEgJX1jaGVja2VkeyVlbmRpZiV9ICB2YWx1ZT0ie3tvcHRpb24uMX19IiBkYXRhLWtleT0ie3trZXl9fSI+IHt7b3B0aW9uLjB9fQorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIHslIGZvciBvcHRpb24gaW4gZi5vcHRpb25zICV9CisgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaW8iPgorICAgICAgICAgICAgeyUgaWYgb3B0aW9uLjEgPT0gJ2RhdGVyYW5nZScgJX0KKyAgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIGlkPSJmaWx0ZXJfdmFsdWVfe3trZXl9fSIgeyVpZiBrZXkgPT0gZGF0ZXJhbmdlX3NlbGVjdGVkICV9Y2hlY2tlZHslZW5kaWYlfSB2YWx1ZT0ie3tvcHRpb24uMX19IiBkYXRhLWtleT0ie3trZXl9fSI+IHt7b3B0aW9uLjB9fQorICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgIHslIGlmIDEgJX0KKyAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciA9PSBvcHRpb24uMSAlfWNoZWNrZWR7JWVuZGlmJX0gIHZhbHVlPSJ7e29wdGlvbi4xfX0iIGRhdGEta2V5PSJ7e2tleX19Ij4ge3tvcHRpb24uMH19CisgICAgICAgICAgICAgICAgeyUgY29tbWVudCAiZG8gbm90IGRpc2FibGUgcmFkaW8gc2VsZWN0aW9ucyBieSBjb3VudCBmb3Igbm93IiAlfXslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InRleHQtbXV0ZWQiPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIGRpc2FibGVkIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyID09IG9wdGlvbi4xICV9Y2hlY2tlZHslZW5kaWYlfSAgdmFsdWU9Int7b3B0aW9uLjF9fSIgZGF0YS1rZXk9Int7a2V5fX0iPiB7e29wdGlvbi4wfX0KICAgICAgICAgICAgICAgICAgIHslIGVuZGNvbW1lbnQgJX17JSBlbmRpZiAlfQotICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICAgICAgeyUgaWYgb3B0aW9uLjMgJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLXBsYWNlbWVudD0icmlnaHQiIHRpdGxlPSJ7e29wdGlvbi4zfX0iPjwvaT57JSBlbmRpZiAlfQotICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICB7JSBpZiBvcHRpb24uMyAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIGRhdGEtcGxhY2VtZW50PSJyaWdodCIgdGl0bGU9Int7b3B0aW9uLjN9fSI+PC9pPnslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgPC9sYWJlbD48L2Rpdj4KICAgICAgICAgICAgICAgICB7JSBpZiBvcHRpb24uMSA9PSAnZGF0ZXJhbmdlJyAlfQotICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlX2Zyb21fe3trZXl9fSIgbmFtZT0iZGF0ZV9mcm9tX3t7a2V5fX0iIGRpc2FibGVkIGNsYXNzPSJpbnB1dC1zbWFsbCIgLz48bGFiZWwgY2xhc3M9ImhlbHAtaW5saW5lIj50bzwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImRhdGVfdG9fe3trZXl9fSIgbmFtZT0iZGF0ZV90b197e2tleX19IiBkaXNhYmxlZCBjbGFzcz0iaW5wdXQtc21hbGwiICAvPgotICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJoZWxwLWlubGluZSBnZXQtaGVscCIgPihkZC9tbS95eXl5KTwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlX2Zyb21fe3trZXl9fSIgbmFtZT0iZGF0ZV9mcm9tX3t7a2V5fX0iIGRpc2FibGVkIGNsYXNzPSJpbnB1dC1zbSIgLz48bGFiZWwgY2xhc3M9ImhlbHAtaW5saW5lIj50bzwvbGFiZWw+CisgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlX3RvX3t7a2V5fX0iIG5hbWU9ImRhdGVfdG9fe3trZXl9fSIgZGlzYWJsZWQgY2xhc3M9ImlucHV0LXNtIiAgLz4KKyAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImhlbHAtaW5saW5lIGdldC1oZWxwIiA+KGRkL21tL3l5eXkpPC9sYWJlbD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICA8IS0tIGRhdGVyYW5nZSBwZXJzaXN0ZW5jZSAtLT4KICAgICAgICAgeyUgaWYgbGFzdF9kYXRlX2Zyb20gYW5kIGxhc3RfZGF0ZV90byAlfQogICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ibGFzdF9kYXRlX2Zyb21fe3trZXl9fSIgbmFtZT0ibGFzdF9kYXRlX2Zyb20iIHZhbHVlPSJ7e2xhc3RfZGF0ZV9mcm9tfX0iLz4KICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Imxhc3RfZGF0ZV90b197e2tleX19IiBuYW1lPSJsYXN0X2RhdGVfdG8iICAgdmFsdWU9Int7bGFzdF9kYXRlX3RvfX0iLz4KICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTYiPgorICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWtleT0ie3trZXl9fSI+QXBwbHk8L2J1dHRvbj4KICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgZGF0YS1rZXk9Int7a2V5fX0iPkFwcGx5PC9idXR0b24+Ci0gICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgJX0KLSAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXJ8c3RyaW5nX3JlbW92ZV9yZWdleDonOi4qJyAhPSBmLm9wdGlvbnMuMC4xfHN0cmluZ19yZW1vdmVfcmVnZXg6JzouKicgJX0KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUgcHVsbC1sZWZ0Ij5Zb3UgY2FuIG9ubHkgYXBwbHkgb25lIGZpbHRlciB0byB0aGUgdGFibGUuIFRoaXMgZmlsdGVyIHdpbGwgb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZmlsdGVyLjwvc3Bhbj4KLSAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTYiPgorICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciAlfQorICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlcnxzdHJpbmdfcmVtb3ZlX3JlZ2V4Oic6LionICE9IGYub3B0aW9ucy4wLjF8c3RyaW5nX3JlbW92ZV9yZWdleDonOi4qJyAlfQorICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXJpZ2h0IHRleHQtbXV0ZWQiPllvdSBjYW4gb25seSBhcHBseSBvbmUgZmlsdGVyIHRvIHRoZSB0YWJsZS4gVGhpcyBmaWx0ZXIgd2lsbCBvdmVycmlkZSB0aGUgY3VycmVudCBmaWx0ZXIuPC9wPgorICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgPC9kaXY+Ci08L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAgIDwvZm9ybT4KKyAgPC9kaXY+PCEtLSAvLm1vZGFsLWNvbnRlbnQgLS0+Cis8L2Rpdj48IS0tIC8ubW9kYWwtZGlhbG9nIC0tPgorPC9kaXY+IDwhLS0vLm1vZGFsIC0tPgogeyUgZW5kd2l0aCAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZ2VuZXJpYy10b2FzdGVydGFibGUtcGFnZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZ2VuZXJpYy10b2FzdGVydGFibGUtcGFnZS5odG1sCmluZGV4IDMzYWE4Y2UuLmIzZWFiZTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2dlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9nZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwKQEAgLTcsNyArNyw3IEBACiAKIDxoMj57e3RpdGxlfX0gKDxzcGFuIGNsYXNzPSJ0YWJsZS1jb3VudC17e3RhYmxlX25hbWV9fSI+PC9zcGFuPikKICAgeyUgaWYgcHJvamVjdC5yZWxlYXNlICV9Ci0gIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iVGhpcyBwYWdlIGxpc3RzIHt7dGl0bGV9fSBjb21wYXRpYmxlIHdpdGggdGhlIHJlbGVhc2Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCwgd2hpY2ggaXMge3twcm9qZWN0LnJlbGVhc2UuZGVzY3JpcHRpb259fSI+PC9pPgorICA8aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyBwYWdlIGxpc3RzIHt7dGl0bGV8bG93ZXJ9fSBjb21wYXRpYmxlIHdpdGggdGhlIHJlbGVhc2Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCwgd2hpY2ggaXMge3twcm9qZWN0LnJlbGVhc2UuZGVzY3JpcHRpb259fSI+PC9pPgogICB7JSBlbmRpZiAlfQogPC9oMj4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvaW1wb3J0bGF5ZXIuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ltcG9ydGxheWVyLmh0bWwKaW5kZXggMTg0OGY0MS4uMWY0MjY5NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvaW1wb3J0bGF5ZXIuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9pbXBvcnRsYXllci5odG1sCkBAIC01LDEzNSArNSwxNjMgQEAKIHslIGJsb2NrIHRpdGxlICV9IEltcG9ydCBsYXllciAtIHt7cHJvamVjdC5uYW1lfX0gLSBUb2FzdGVyIHslIGVuZGJsb2NrICV9CiB7JSBibG9jayBwYWdlY29udGVudCAlfQogCi17JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9Cis8ZGl2IGNsYXNzPSJyb3ciPgorICB7JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9CisgIHslIGlmIHByb2plY3QgYW5kIHByb2plY3QucmVsZWFzZSAlfQorICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckRlcHNNb2RhbC5qcycgJX0iPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9pbXBvcnRsYXllci5qcycgJX0iPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKXsKKyAgICB2YXIgY3R4ID0geworICAgICAgeGhySW1wb3J0TGF5ZXJVcmwgOiAieyUgdXJsICd4aHJfaW1wb3J0bGF5ZXInICV9IiwKKyAgICB9OwogCisgICAgdHJ5IHsKKyAgICAgIGltcG9ydExheWVyUGFnZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiU29ycnksIEFuIGVycm9yIGhhcyBvY2N1cnJlZCBsb2FkaW5nIHRoaXMgcGFnZSIpOworICAgICAgY29uc29sZS53YXJuKGUpOworICAgIH0KKyAgfSk7CisgIDwvc2NyaXB0PgogCi0gICAgICAgIHslIGlmIHByb2plY3QgYW5kIHByb2plY3QucmVsZWFzZSAlfQotICAgICAgICAgICAgICAgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJEZXBzTW9kYWwuanMnICV9Ij48L3NjcmlwdD4KLSAgICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2ltcG9ydGxheWVyLmpzJyAlfSI+PC9zY3JpcHQ+Ci0gICAgICAgICAgICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKXsKLSAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgeGhySW1wb3J0TGF5ZXJVcmwgOiAieyUgdXJsICd4aHJfaW1wb3J0bGF5ZXInICV9IiwKLSAgICAgICAgICAgICAgICAgICAgICB9OworICA8Zm9ybSBjbGFzcz0iY29sLW1kLTExIj4KKyAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+VGhlIGxheWVyIHlvdSBhcmUgaW1wb3J0aW5nIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIDxzdHJvbmc+e3twcm9qZWN0LnJlbGVhc2UuZGVzY3JpcHRpb259fTwvc3Ryb25nPiwgd2hpY2ggaXMgdGhlIHJlbGVhc2UgeW91IGFyZSB1c2luZyBpbiB0aGlzIHByb2plY3QuPC9zcGFuPgorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIiBpZD0iaW1wb3J0LWVycm9yIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0iYWxlcnQiPiZ0aW1lczs8L2J1dHRvbj4KKyAgICAgIDxoMz4mbmJzcDs8L2gzPgorICAgICAgPHA+PC9wPgorICAgICAgPHVsPjwvdWw+CisgICAgPC9kaXY+CisgICAgPGZpZWxkc2V0PgorICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCIgaWQ9ImxheWVyLW5hbWUtY3RybCI+CisgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCIgZm9yPSJpbXBvcnQtbGF5ZXItbmFtZSI+CisgICAgICAgICAgTGF5ZXIgbmFtZQorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTb21ldGhpbmcgbGlrZSAnbWV0YS1teWxheWVyJy4gWW91ciBsYXllciBuYW1lIG11c3QgYmUgdW5pcXVlIGFuZCBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMgYW5kIGRhc2hlcyI+PC9zcGFuPgorICAgICAgICA8L2xhYmVsPgorICAgICAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImltcG9ydC1sYXllci1uYW1lIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZCBhdXRvZm9jdXMgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiPgorICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiBpZD0iaW52YWxpZC1sYXllci1uYW1lLWhpbnQiPkEgdmFsaWQgbGF5ZXIgbmFtZSBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMgYW5kIGRhc2hlczwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIGlkPSJkdXBsaWNhdGVkLWxheWVyLW5hbWUtaGludCI+PC9zcGFuPgorICAgICAgPC9kaXY+CisgICAgPC9maWVsZHNldD4KKyAgICA8ZGl2IGlkPSJkdXBsaWNhdGUtbGF5ZXItaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAgICAgICAgPGgzPkEgbGF5ZXIgY2FsbGVkIDxhIGhyZWY9IiIgY2xhc3M9ImR1cC1sYXllci1saW5rIj48c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj48L2E+IGFscmVhZHkgZXhpc3RzPC9oMz4KKyAgICAgICAgPHA+TGF5ZXIgbmFtZXMgbXVzdCBiZSB1bnFpdWUuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgbGF5ZXIgbmFtZS48L3A+CisgICAgICAgIDxkbCBpZD0iZ2l0LWxheWVyLWR1cCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgIDxkdD4KKyAgICAgICAgICBUaGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IHJlcG9zaXRvcnkgdXJsIGlzCisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgPHNwYW4gaWQ9ImR1cC1sYXllci12Y3MtdXJsIj48L3NwYW4+CisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8ZHQ+CisgICAgICAgICAgVGhlIDxzcGFuIGNsYXNzPSJkdXAtbGF5ZXItbmFtZSI+PC9zcGFuPiByZXZpc2lvbiBpcworICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgIDxzcGFuIGlkPSJkdXAtbGF5ZXItcmV2aXNpb24iPjwvc3Bhbj4KKyAgICAgICAgICA8L2RkPgorICAgICAgICA8L2RsPgorCTxkbCBpZD0ibG9jYWwtbGF5ZXItZHVwIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisJICA8ZHQ+CisJICAgIFRoZSA8c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj4gZGlyZWN0b3J5IGlzCisJICA8L2R0PgorCSAgPGRkPgorCSAgICA8c3BhbiBpZD0iZHVwLWxvY2FsLXNvdXJjZS1kaXItbmFtZSI+PC9zcGFuPgorCSAgPC9kZD4KKwk8L2RsPgorICAgICAgICA8cD48YSBocmVmPSIiIGNsYXNzPSJkdXAtbGF5ZXItbGluayI+VmlldyB0aGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IGxheWVyIGluZm9ybWF0aW9uPC9hPjwvcD4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSIgaWQ9InJlcG8tc2VsZWN0Ij4KKyAgICAgIDxsZWdlbmQgY2xhc3M9InJhZGlvTGVnZW5kIj5XaGVyZSBpcyB0aGUgbGF5ZXIgc291cmNlIGNvZGU/PC9sZWdlbmQ+CisgICAgICA8ZGl2IGNsYXNzPSJyYWRpbyI+CisJPGxhYmVsPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9ImdpdC1yZXBvLXJhZGlvIiBuYW1lPSJyZXBvIiB2YWx1ZT0iZ2l0IiBjaGVja2VkPSJjaGVja2VkIj4KKwkgIEluIGEgPHN0cm9uZz5HaXQgcmVwb3NpdG9yeTwvc3Ryb25nPgorCTwvbGFiZWw+CisJPHAgY2xhc3M9ImhlbHAtYmxvY2sgcmFkaW8taGVscCI+VG8gYnVpbGQgdGhlIGxheWVyIFRvYXN0ZXIgbXVzdCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgR2l0IHJlcG9zaXRvcnksIG90aGVyd2lzZSBidWlsZHMgd2lsbCBmYWlsLiBUb2FzdGVyIHdpbGwgZmV0Y2ggYW5kIGNoZWNrb3V0IHlvdXIgY2hvc2VuIEdpdCByZXZpc2lvbiBldmVyeSB0aW1lIHlvdSBzdGFydCBhIGJ1aWxkLjwvcD4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0icmFkaW8iPgorCTxsYWJlbD4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJsb2NhbC1kaXItcmFkaW8iIG5hbWU9InJlcG8iIHZhbHVlPSJsb2NhbCI+CisJICBJbiBhIDxzdHJvbmc+ZGlyZWN0b3J5PC9zdHJvbmc+CisJPC9sYWJlbD4KKwk8cCBjbGFzcz0iaGVscC1ibG9jayByYWRpby1oZWxwIj5Vc2UgdGhpcyBvcHRpb24gZm9yIHF1aWNrIGxheWVyIGRldmVsb3BtZW50LCBieSBzaW1wbHkgcHJvdmlkaW5nIHRoZSBwYXRoIHRvIHRoZSBsYXllciBzb3VyY2UgY29kZS48L3A+CisgICAgICA8L2Rpdj4KKyAgICA8L2ZpZWxkc2V0PgorICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSIgaWQ9ImdpdC1yZXBvIj4KKyAgICAgIDxsZWdlbmQ+R2l0IHJlcG9zaXRvcnkgaW5mb3JtYXRpb248L2xlZ2VuZD4KKyAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8bGFiZWwgZm9yPSJsYXllci1naXQtcmVwby11cmwiPgorICAgICAgICAgIEdpdCByZXBvc2l0b3J5IFVSTAorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGZXRjaC9jbG9uZSBVUkwgb2YgdGhlIHJlcG9zaXRvcnkuIEN1cnJlbnRseSwgVG9hc3RlciBvbmx5IHN1cHBvcnRzIEdpdCByZXBvc2l0b3JpZXMuIiA+PC9zcGFuPgorICAgICAgICA8L2xhYmVsPgorICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImxheWVyLWdpdC1yZXBvLXVybCIgY2xhc3M9ImZvcm0tY29udHJvbCIgcmVxdWlyZWQ+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8bGFiZWwgZm9yPSJsYXllci1zdWJkaXIiPgorICAgICAgICAgIFJlcG9zaXRvcnkgc3ViZGlyZWN0b3J5CisgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPihvcHRpb25hbCk8L3NwYW4+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQsIGlmIG5vdCBpbiB0aGUgcm9vdCAodXN1YWxseSBvbmx5IHVzZWQgaWYgdGhlIHJlcG9zaXRvcnkgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBsYXllcikiPjwvc3Bhbj4KKyAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJsYXllci1zdWJkaXIiPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIiBpZD0ibGF5ZXItcmV2aXNpb24tY3RybCI+CisgICAgICAgIDxsYWJlbCBmb3I9ImxheWVyLWdpdC1yZWYiPgorICAgICAgICAgIEdpdCByZXZpc2lvbgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJZb3UgY2FuIHByb3ZpZGUgYSBHaXQgYnJhbmNoLCBhIHRhZyBvciBhIGNvbW1pdCBTSEEgYXMgdGhlIHJldmlzaW9uIj48L3NwYW4+CisgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibGF5ZXItZ2l0LXJlZiIgcmVxdWlyZWQ+CisgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIGlkPSJpbnZhbGlkLWxheWVyLXJldmlzaW9uLWhpbnQiPjwvc3Bhbj4KKyAgICAgIDwvZGl2PgorICAgIDwvZmllbGRzZXQ+CiAKLSAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0TGF5ZXJQYWdlSW5pdChjdHgpOwotICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJTb3JyeSwgQW4gZXJyb3IgaGFzIG9jY3VycmVkIGxvYWRpbmcgdGhpcyBwYWdlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgIDwvc2NyaXB0PgorICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSIgaWQ9ImxvY2FsLWRpciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgPGxlZ2VuZD5MYXllciBkaXJlY3RvcnkgaW5mb3JtYXRpb248L2xlZ2VuZD4KKyAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8bGFiZWwgZm9yPSJsb2NhbC1kaXItcGF0aCIgY2xhc3M9ImNvbnRyb2wtbGFiZWwiPkVudGVyIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXllciBkaXJlY3Rvcnk8L2xhYmVsPgorICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImxvY2FsLWRpci1wYXRoIiByZXF1aXJlZC8+CisgICAgICAgIDxwIGNsYXNzPSJoZWxwLWJsb2NrIiBpZD0iaGludEVycm9yLWRpci1wYXRoLXN0YXJ0cy13aXRoLXNsYXNoIiBzdHlsZT0iZGlzcGxheTpub25lOyI+VGhlIGFic29sdXRlIHBhdGggbXVzdCBzdGFydCB3aXRoICIvIi48L3A+CisgICAgICAgIDxwIGNsYXNzPSJoZWxwLWJsb2NrIiBpZD0iaGludEVycm9yLWRpci1wYXRoIiBzdHlsZT0iZGlzcGxheTpub25lOyI+VGhlIGRpcmVjdG9yeSBwYXRoIGNhbm5vdCBpbmNsdWRlIHNwYWNlcyBvciBhbnkgb2YgdGhlc2UgY2hhcmFjdGVyczogLiBcID8gJSAqIDogfCAiICIgJmx0OyAmZ3Q7PC9wPgorICAgICAgPC9kaXY+CisgICAgPC9maWVsZHNldD4KIAotICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJzcGFuMTEiPgotICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KLSAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPkxheWVyIHJlcG9zaXRvcnkgaW5mb3JtYXRpb248L2xlZ2VuZD4KLSAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+VGhlIGxheWVyIHlvdSBhcmUgaW1wb3J0aW5nIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIDxzdHJvbmc+e3twcm9qZWN0LnJlbGVhc2UuZGVzY3JpcHRpb259fTwvc3Ryb25nPiwgd2hpY2ggaXMgdGhlIHJlbGVhc2UgeW91IGFyZSB1c2luZyBpbiB0aGlzIHByb2plY3QuPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIiBpZD0iaW1wb3J0LWVycm9yIiBzdHlsZT0iZGlzcGxheTpub25lIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0iYWxlcnQiPiZ0aW1lczs8L2J1dHRvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4mbmJzcDs8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHA+PC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgPHVsPjwvdWw+Ci0gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIj4KKyAgICAgIDxsZWdlbmQ+CisgICAgICAgIExheWVyIGRlcGVuZGVuY2llcworICAgICAgICA8c21hbGwgY2xhc3M9InRleHQtbXV0ZWQiPihvcHRpb25hbCk8L3NtYWxsPgorICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9Ik90aGVyIGxheWVycyB0aGlzIGxheWVyIGRlcGVuZHMgdXBvbiI+PC9zcGFuPgorICAgICAgPC9sZWdlbmQ+CisgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgbGVhZCIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+CisgICAgICA8L3VsPgorICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pbmxpbmUiPgorICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgcGxhY2Vob2xkZXI9IlR5cGUgYSBsYXllciBuYW1lIiBpZD0ibGF5ZXItZGVwZW5kZW5jeSIgY2xhc3M9ImZvcm0tY29udHJvbCI+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGlkPSJhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iPgorICAgICAgICAgIEFkZCBsYXllcgorICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIj5Zb3UgY2FuIG9ubHkgYWRkIGxheWVycyBUb2FzdGVyIGtub3dzIGFib3V0PC9zcGFuPgorICAgIDwvZmllbGRzZXQ+CisgICAgPGRpdiBjbGFzcz0idG9wLWFpciBmaWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIiBpZD0iZm9ybS1hY3Rpb25zIj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGciIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaWQ9ImltcG9ydC1hbmQtYWRkLWJ0biIgZGF0YS10YXJnZXQ9IiNkZXBlbmRlbmNpZXMtbWVzc2FnZSIgZGlzYWJsZWQ+SW1wb3J0IGFuZCBhZGQgdG8gcHJvamVjdDwvYnV0dG9uPgorICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBpZD0iaW1wb3J0LWdpdC1sYXllci1hbmQtYWRkLWhpbnQiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+VG8gaW1wb3J0IGEgbGF5ZXIgeW91IG5lZWQgdG8gZW50ZXIgYSBsYXllciBuYW1lLCBhIEdpdCByZXBvc2l0b3J5IFVSTCBhbmQgYSBHaXQgcmV2aXNpb24gKGJyYW5jaCwgdGFnIG9yIGNvbW1pdCk8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIGlkPSJpbXBvcnQtbG9jYWwtZGlyLWFuZC1hZGQtaGludCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7ZGlzcGxheTpub25lOyI+VG8gaW1wb3J0IGEgbGF5ZXIgeW91IG5lZWQgdG8gZW50ZXIgYSBsYXllciBuYW1lIGFuZCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5ZXIgZGlyZWN0b3J5PC9zcGFuPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZm9ybT4KIAotICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiIGlkPSJsYXllci1uYW1lLWN0cmwiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIGFpciIgZm9yPSJpbXBvcnQtbGF5ZXItbmFtZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXIgbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTb21ldGhpbmcgbGlrZSAnbWV0YS1teWxheWVyJy4gWW91ciBsYXllciBuYW1lIG11c3QgYmUgdW5pcXVlIGFuZCBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMgYW5kIGRhc2hlcyI+PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJpbXBvcnQtbGF5ZXItbmFtZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQgYXV0b2ZvY3VzIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIGlkPSJpbnZhbGlkLWxheWVyLW5hbWUtaGludCI+QSB2YWxpZCBsYXllciBuYW1lIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycyBhbmQgZGFzaGVzPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgaWQ9ImR1cGxpY2F0ZWQtbGF5ZXItbmFtZS1oaW50Ij48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgeyUgZWxzZSAlfSB7I3Byb2plY3QgYW5kIHByb2plY3QgcmVsZWFzZSN9CisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICA8aDE+SW1wb3J0IGxheWVyPC9oMT4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIGlkPSJpbXBvcnQtZXJyb3IiID4KKyAgICA8aDM+VW5zdXBwb3J0ZWQgcHJvamVjdCB0eXBlPC9oMz4KKyAgICA8cD5UaGlzIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCBpbXBvcnRpbmcgbGF5ZXJzLjwvcD4KKyAgICA8dWw+PC91bD4KKyAgPC9kaXY+CiAKLSAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJkdXBsaWNhdGUtbGF5ZXItaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCB3YXJuaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkEgbGF5ZXIgY2FsbGVkIDxhIGhyZWY9IiIgY2xhc3M9ImR1cC1sYXllci1saW5rIj48c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj48L2E+IGFscmVhZHkgZXhpc3RzPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+TGF5ZXIgbmFtZXMgbXVzdCBiZSB1bnFpdWUuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgbGF5ZXIgbmFtZS48L3A+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj4gcmVwb3NpdG9yeSB1cmwgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkdXAtbGF5ZXItdmNzLXVybCI+PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IHJldmlzaW9uIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZHVwLWxheWVyLXJldmlzaW9uIj48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2RsPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cD48YSBocmVmPSIiIGNsYXNzPSJkdXAtbGF5ZXItbGluayI+VmlldyB0aGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IGxheWVyIGluZm9ybWF0aW9uPC9hPjwvcD4KLQotICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotCi0gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJsYXllci1naXQtcmVwby11cmwiIGNsYXNzPSJwcm9qZWN0LWZvcm0iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IFVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGZXRjaC9jbG9uZSBVUkwgb2YgdGhlIHJlcG9zaXRvcnkuIEN1cnJlbnRseSwgVG9hc3RlciBvbmx5IHN1cHBvcnRzIEdpdCByZXBvc2l0b3JpZXMuIiA+PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJsYXllci1naXQtcmVwby11cmwiIGNsYXNzPSJpbnB1dC14eGxhcmdlIiByZXF1aXJlZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIiBmb3I9ImxheWVyLXN1YmRpciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3NpdG9yeSBzdWJkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiPihvcHRpb25hbCk8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQsIGlmIG5vdCBpbiB0aGUgcm9vdCAodXN1YWxseSBvbmx5IHVzZWQgaWYgdGhlIHJlcG9zaXRvcnkgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBsYXllcikiPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgIGlkPSJsYXllci1zdWJkaXIiPgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiIGlkPSJsYXllci1yZXZpc2lvbi1jdHJsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwgcHJvamVjdC1mb3JtIiBmb3I9ImxheWVyLWdpdC1yZWYiPkdpdCByZXZpc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IllvdSBjYW4gcHJvdmlkZSBhIEdpdCBicmFuY2gsIGEgdGFnIG9yIGEgY29tbWl0IFNIQSBhcyB0aGUgcmV2aXNpb24iPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ic3BhbjMiIGlkPSJsYXllci1naXQtcmVmIiByZXF1aXJlZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlhcGx5Om5vbmU7IiBpZD0iaW52YWxpZC1sYXllci1yZXZpc2lvbi1oaW50Ij48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLQotICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgotCi0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiPgotICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImFpciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyIGRlcGVuZGVuY2llcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+KG9wdGlvbmFsKTwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9Ik90aGVyIGxheWVycyB0aGlzIGxheWVyIGRlcGVuZHMgdXBvbiI+PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9sZWdlbmQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIGNvbmZpZ3VyYXRpb24tbGlzdCIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgotICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgcGxhY2Vob2xkZXI9IlR5cGUgYSBsYXllciBuYW1lIiBpZD0ibGF5ZXItZGVwZW5kZW5jeSIgY2xhc3M9ImlucHV0LXhsYXJnZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgaWQ9ImFkZC1sYXllci1kZXBlbmRlbmN5LWJ0biI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBsYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIj5Zb3UgY2FuIG9ubHkgYWRkIGxheWVycyBUb2FzdGVyIGtub3dzIGFib3V0PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhaXIiIGlkPSJmb3JtLWFjdGlvbnMiPgotICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaWQ9ImltcG9ydC1hbmQtYWRkLWJ0biIgZGF0YS10YXJnZXQ9IiNkZXBlbmRlbmNpZXMtbWVzc2FnZSIgZGlzYWJsZWQ+SW1wb3J0IGFuZCBhZGQgdG8gcHJvamVjdDwvYnV0dG9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBpZD0iaW1wb3J0LWFuZC1hZGQtaGludCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5UbyBpbXBvcnQgYSBsYXllciB5b3UgbmVlZCB0byBlbnRlciBhIGxheWVyIG5hbWUsIGEgR2l0IHJlcG9zaXRvcnkgVVJMIGFuZCBhIHJldmlzaW9uIChicmFuY2gsIHRhZyBvciBjb21taXQpPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgPC9mb3JtPgotCi0gICAgICAgICAgeyUgZWxzZSAlfSB7I3Byb2plY3QgYW5kIHByb2plY3QgcmVsZWFzZSN9Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgotICAgICAgICAgICAgICAgICAgICA8aDE+SW1wb3J0IGxheWVyPC9oMT4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBpZD0iaW1wb3J0LWVycm9yIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aDM+VW5zdXBwb3J0ZWQgcHJvamVjdCB0eXBlPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgcHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0IGltcG9ydGluZyBsYXllcnMuPC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgPHVsPjwvdWw+Ci0gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0KLSAgICAgICAgICB7JSBlbmRpZiAlfQorICB7JSBlbmRpZiAlfQorPC9kaXY+CiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sCmluZGV4IGExYjVjZGMuLjQ5ODY2MzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmcuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nLmh0bWwKQEAgLTYsMjQgKzYsMjIgQEAKIAogeyUgYmxvY2sgdGl0bGUgJX0gV2VsY29tZSB0byBUb2FzdGVyIHslIGVuZGJsb2NrICV9CiB7JSBibG9jayBwYWdlY29udGVudCAlfQotICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+Ci0gICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLXVuaXQgc3BhbjEyIHdlbGwtdHJhbnNwYXJlbnQiPgotICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJqdW1ib3Ryb24gd2VsbC10cmFuc3BhcmVudCI+CiAKLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW42Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC02Ij4KICAgICAgICAgICAgICAgPGgxPlRoaXMgaXMgVG9hc3RlcjwvaDE+CiAKICAgICAgICAgICAgICAgPHA+QSB3ZWIgaW50ZXJmYWNlIHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZyI+T3BlbkVtYmVkZGVkPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9iaXRiYWtlIj5CaXRCYWtlPC9hPiwgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyI+WW9jdG8gUHJvamVjdDwvYT4gYnVpbGQgc3lzdGVtLjwvcD4KIAogCQkgICAgICAgICAgeyUgaWYgbHZzX25vcyAlfQotCQkgICAgICAgICAgICA8cCBjbGFzcz0iaGVyby1hY3Rpb25zIj4KLQkJICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICduZXdwcm9qZWN0JyAlfSI+CisJCSAgICAgICAgICAgIDxwIGNsYXNzPSJ0b3AtYWlyIj4KKwkJICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyIgaHJlZj0ieyUgdXJsICduZXdwcm9qZWN0JyAlfSI+CiAJCQkgICAgICAgICAgICAgIFRvIHN0YXJ0IGJ1aWxkaW5nLCBjcmVhdGUgeW91ciBmaXJzdCBUb2FzdGVyIHByb2plY3QKIAkJICAgICAgICAgICAgICA8L2E+CiAJCSAgICAgICAgICAgIDwvcD4KIAkJICAgICAgICAgIHslIGVsc2UgJX0KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQgYWlyIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQgdG9wLWFpciI+CiAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGhhcyBubyBsYXllciBpbmZvcm1hdGlvbi4gV2l0aG91dCBsYXllciBpbmZvcm1hdGlvbiwgeW91IGNhbm5vdCBydW4gYnVpbGRzLiBUbyBnZW5lcmF0ZSBsYXllciBpbmZvcm1hdGlvbiB5b3UgY2FuOgogICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICA8bGk+CkBAIC0zNiw3ICszNCw3IEBACiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgIHslIGVuZGlmICV9CiAKLSAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCI+CisgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCBsZWFkIj4KICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCI+CiAgICAgICAgICAgICAgICAgICAgIFJlYWQgdGhlIFRvYXN0ZXIgbWFudWFsCkBAIC01MSwxMiArNDksMTEgQEAKICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgIDwvZGl2PgogCi0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuNiI+Ci0gICAgICAgICAgICAgIDxpbWcgYWx0PSJZb2N0byBQcm9qZWN0IiBjbGFzcz0idGh1bWJuYWlsIiBzcmM9InslIHN0YXRpYyAnaW1nL3RvYXN0ZXJfYncucG5nJyAlfSIvPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTYiPgorICAgICAgICAgICAgICA8aW1nIGFsdD0iWW9jdG8gUHJvamVjdCBUb2FzdGVyIiBjbGFzcz0iaW1nLXRodW1ibmFpbCIgc3JjPSJ7JSBzdGF0aWMgJ2ltZy90b2FzdGVyX2J3LnBuZycgJX0iLz4KICAgICAgICAgICAgIDwvZGl2PgogCi0gICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZGl2PgogICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+CisKIHslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nX25vdF9tYW5hZ2VkLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nX25vdF9tYW5hZ2VkLmh0bWwKaW5kZXggOWIzN2Y1NS4uYmFhNGI3MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZ19ub3RfbWFuYWdlZC5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmdfbm90X21hbmFnZWQuaHRtbApAQCAtOCw4ICs4LDggQEAKIAogeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KIAotICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgotICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgPCEtLSBFbXB0eSAtIG5vIGJ1aWxkIG1vZHVsZSAtLT4KICAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KICAgICAgPGgxPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJfYnRuLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbAppbmRleCAxMGRlMzdkLi5iMmY3M2ViIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbApAQCAtMSwxNyArMSwxNyBAQAotPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIgYnRuLWJsb2NrIGxheWVyLWV4aXN0cy17e2RhdGEucGt9fSBsYXllcmJ0biIgIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLnBrfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLnBrJX0ifScgZGF0YS1kaXJlY3RpdmU9InJlbW92ZSIKKzxhIGNsYXNzPSJidG4gYnRuLWRhbmdlciBidG4tYmxvY2sgbGF5ZXItZXhpc3RzLXt7ZGF0YS5wa319IGxheWVyYnRuIiAgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEucGt9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEucGslfSJ9JyBkYXRhLWRpcmVjdGl2ZT0icmVtb3ZlIgogICAgIHslIGlmIGRhdGEucGsgbm90IGluIGV4dHJhLmN1cnJlbnRfbGF5ZXJzICV9CiAgICAgc3R5bGU9ImRpc3BsYXk6bm9uZTsiCiAgICAgeyUgZW5kaWYgJX0KICAgPgotICA8aSBjbGFzcz0iaWNvbi10cmFzaCI+PC9pPgorICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10cmFzaCI+PC9zcGFuPgogICBSZW1vdmUgbGF5ZXIKLTwvYnV0dG9uPgotPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1hZGQte3tkYXRhLnBrfX0gbGF5ZXJidG4iIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLnBrfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLnBrJX0ifScgZGF0YS1kaXJlY3RpdmU9ImFkZCIKKzwvYT4KKzxhIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGxheWVyLWFkZC17e2RhdGEucGt9fSBsYXllcmJ0biIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEucGt9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEucGslfSJ9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIgogICAgIHslIGlmIGRhdGEucGsgaW4gZXh0cmEuY3VycmVudF9sYXllcnMgJX0KICAgICBzdHlsZT0iZGlzcGxheTpub25lOyIKICAgICB7JSBlbmRpZiAlfQogICA+Ci0gIDxpIGNsYXNzPSJpY29uLXBsdXMiPjwvaT4KKyAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGx1cyI+PC9zcGFuPgogICBBZGQgbGF5ZXIKLTwvYnV0dG9uPgorPC9hPgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcmRldGFpbHMuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sCmluZGV4IDgyYmUzNzAuLmYxNTY5YmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sCkBAIC02LDI3MCArNiwzNjcgQEAKIHslIGJsb2NrIHRpdGxlICV9IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSAtIHt7cHJvamVjdC5uYW1lfX0gLSBUb2FzdGVyIHslIGVuZGJsb2NrICV9CiB7JSBibG9jayBwYWdlY29udGVudCAlfQogCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLSAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KLSAgICA8bGk+Ci0gICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPnt7cHJvamVjdC5uYW1lfX08L2E+Ci0gICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPgotICAgIDwvbGk+Ci0gICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5pZCAlfSI+Q29tcGF0aWJsZSBsYXllcnM8L2E+Ci0gICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPgotICAgIDwvbGk+Ci0gICAgPGxpIGNsYXNzPSJhY3RpdmUiPgotICAgICAge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19ICh7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZXx0cnVuY2F0ZWNoYXJzOjEzfX0pCi0gICAgPC9saT4KLSAgPC91bD4KKzxkaXYgaWQ9ImRlbGV0ZS1sYXllci1tb2RhbCIgY2xhc3M9Im1vZGFsIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIgorICAgIGRhdGEta2V5Ym9hcmQ9ImZhbHNlIiBkYXRhLWJhY2tkcm9wPSJzdGF0aWMiPgorICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorCQkgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIDxzdHJvbmc+e3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19PC9zdHJvbmc+IGxheWVyPworICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImxheWVyLWRlbGV0ZS1jb25maXJtZWQiIGNsYXNzPSJidG4KKyAgICAgICAgICAgIGJ0bi1wcmltYXJ5Ij5EZWxldGUgbGF5ZXI8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWxpbmsiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgogPC9kaXY+CiAKLXsjIElmIHRoaXMgaXMgbm90IGFuIGltcG9ydGVkIGxheWVyIHRoZW4gaGlkZSB0aGUgZWRpdCB1aSAjfQoteyUgaWYgbm90IGxheWVydmVyc2lvbi5sYXllcl9zb3VyY2VfaWQgb3IgbGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZS5zb3VyY2V0eXBlICE9IGxheWVydmVyc2lvbi5sYXllcl9zb3VyY2UuVFlQRV9JTVBPUlRFRCAlfQotPHN0eWxlIHNjb3BlZD4KLSAuaWNvbi1wZW5jaWwgewotICAgZGlzcGxheTpub25lOwotIH0KLS5kZWxldGUtY3VycmVudC12YWx1ZXsKLSAgZGlzcGxheTogbm9uZTsKLX0KLSBsaSAuaWNvbi10cmFzaCB7Ci0gICBkaXNwbGF5Om5vbmU7Ci0gfQotIC5hZGQtZGVwcyB7Ci0gICBkaXNwbGF5Om5vbmU7Ci0gfQotPC9zdHlsZT4KLXslIGVuZGlmICV9Cis8ZGl2IGNsYXNzPSJyb3ciPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgorICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+e3twcm9qZWN0Lm5hbWV9fTwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4KKyAgICAgIDwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LmlkICV9Ij5Db21wYXRpYmxlIGxheWVyczwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4KKyAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgICAgIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSAoe3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V8dHJ1bmNhdGVjaGFyczoxM319KQorICAgICAgPC9saT4KKyAgICA8L3VsPgogCi0KLTxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyZGV0YWlscy5qcycgJX0iPjwvc2NyaXB0PgotPHNjcmlwdD4KLQotICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKXsKLSAgICB2YXIgY3R4ID0gewotICAgICAgeGhyVXBkYXRlTGF5ZXJVcmwgOiAieyUgdXJsICd4aHJfdXBkYXRlbGF5ZXInICV9IiwKLSAgICAgIGxheWVyVmVyc2lvbiA6IHsKLSAgICAgICAgbmFtZSA6ICJ7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0iLAotICAgICAgICBpZCA6IHt7bGF5ZXJ2ZXJzaW9uLmlkfX0sCi0gICAgICAgIGNvbW1pdDogInt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX0iLAotICAgICAgeyVpZiBsYXllcnZlcnNpb24uaWQgaW4gcHJvamVjdGxheWVycyAlfQotICAgICAgICBpbkN1cnJlbnRQcmogOiB0cnVlLAotICAgICAgeyUgZWxzZSAlfQotICAgICAgICBpbkN1cnJlbnRQcmogOiBmYWxzZSwKLSAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgIGxheWVyZGV0YWlsdXJsIDogInslIHVybCAnbGF5ZXJkZXRhaWxzJyBwcm9qZWN0LmlkIGxheWVydmVyc2lvbi5pZCAgJX0iLAotICAgICAgICBzb3VyY2VJZDoge3tsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlX2lkfGpzb259fSwKLSAgICAgIH0KLSAgICB9OwotCi0gICAgdHJ5IHsKLSAgICAgIGxheWVyRGV0YWlsc1BhZ2VJbml0KGN0eCk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgZG9jdW1lbnQud3JpdGUoIlNvcnJ5LCBBbiBlcnJvciBoYXMgb2NjdXJyZWQgbG9hZGluZyB0aGlzIHBhZ2UiKTsKLSAgICAgIGNvbnNvbGUud2FybihlKTsKKyAgICB7IyBJZiB0aGlzIGlzIG5vdCBhbiBpbXBvcnRlZCBsYXllciB0aGVuIGhpZGUgdGhlIGVkaXQgdWkgI30KKyAgICB7JSBpZiBsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlICE9IGxheWVyX3NvdXJjZS5UWVBFX0lNUE9SVEVEICV9CisgICAgPHN0eWxlIHNjb3BlZD4KKyAgICAuZ2x5cGhpY29uLWVkaXQgeworICAgICAgZGlzcGxheTpub25lOwogICAgIH0KLSAgfSk7Ci08L3NjcmlwdD4KKyAgICAuZGVsZXRlLWN1cnJlbnQtdmFsdWV7CisgICAgICBkaXNwbGF5OiBub25lOworICAgIH0KKyAgICBsaSAuZ2x5cGhpY29uLXRyYXNoIHsKKyAgICAgIGRpc3BsYXk6bm9uZTsKKyAgICB9CisgICAgLmFkZC1kZXBzIHsKKyAgICAgZGlzcGxheTpub25lOworICAgIH0KKyAgICA8L3N0eWxlPgorICAgIHslIGVuZGlmICV9CiAKLTxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTEiPgotICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+Ci0gICAgPGgxPnt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8c21hbGwgY2xhc3M9ImNvbW1pdCIKLSAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V8bGVuZ3RoID4gMTMgJX0KLSAgICAgICAgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19IgotICAgICAgICB7JSBlbmRpZiAlfT4KLSAgICAgICAgKHt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfHRydW5jYXRlY2hhcnM6MTN9fSk8L3NtYWxsPjwvaDE+Ci0gIDwvZGl2PgotPC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJkZXRhaWxzLmpzJyAlfSI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KIAotPCEtLSBjb250YWluZXIgZm9yIHRhYnMgLS0+Ci08ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjcgdGFiYmFibGUiPgotICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQiIGlkPSJhbGVydC1hcmVhIiBzdHlsZT0iZGlzcGxheTpub25lIj4KLSAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBpZD0iZGlzbWlzcy1hbGVydCI+JnRpbWVzOzwvYnV0dG9uPgotICAgIDxzcGFuIGlkPSJhbGVydC1tc2ciPjwvc3Bhbj4KLSAgPC9kaXY+Ci0gIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+Ci0gICAgPGxpIGNsYXNzPSJhY3RpdmUiPgotICAgICAgPGEgZGF0YS10b2dnbGU9InRhYiIgaHJlZj0iI2luZm9ybWF0aW9uIiBpZD0iZGV0YWlscy10YWIiPkxheWVyIGRldGFpbHM8L2E+Ci0gICAgPC9saT4KLSAgICA8bGk+Ci0gICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjcmVjaXBlcyIgY2xhc3M9Im11dGVkIiBpZD0idGFyZ2V0cy10YWIiPlJlY2lwZXMgKDxzcGFuIGNsYXNzPSJ0YWJsZS1jb3VudC1yZWNpcGVzdGFibGUiPjwvc3Bhbj4pPC9hPgotICAgIDwvbGk+Ci0gICAgPGxpPgotICAgICAgPGEgZGF0YS10b2dnbGU9InRhYiIgaHJlZj0iI21hY2hpbmVzIiBjbGFzcz0ibXV0ZWQiIGlkPSJtYWNoaW5lcy10YWIiPk1hY2hpbmVzICg8c3BhbiBjbGFzcz0idGFibGUtY291bnQtbWFjaGluZXN0YWJsZSI+PC9zcGFuPik8L2E+Ci0gICAgPC9saT4KLSAgPC91bD4KLSAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgotICAgIDxzcGFuIGNsYXNzPSJidXR0b24tcGxhY2UiPgotICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmlkIG5vdCBpbiBwcm9qZWN0bGF5ZXJzICV9Ci0gICAgICA8YnV0dG9uIGlkPSJhZGQtcmVtb3ZlLWxheWVyLWJ0biIgZGF0YS1kaXJlY3RpdmU9ImFkZCIgY2xhc3M9ImJ0biBidG4tbGFyZ2UgYnRuLWJsb2NrIj4KLSAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcGx1cyI+PC9zcGFuPgotICAgICAgICBBZGQgdGhlIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciB0byB5b3VyIHByb2plY3QKLSAgICAgIDwvYnV0dG9uPgotICAgICAgeyUgZWxzZSAlfQotICAgICAgPGJ1dHRvbiBpZD0iYWRkLXJlbW92ZS1sYXllci1idG4iIGRhdGEtZGlyZWN0aXZlPSJyZW1vdmUiIGNsYXNzPSJidG4gYnRuLWJsb2NrIGJ0bi1sYXJnZSBidG4tZGFuZ2VyIj4KLSAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tdHJhc2giPjwvc3Bhbj4KLSAgICAgICAgUmVtb3ZlIHRoZSB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgZnJvbSB5b3VyIHByb2plY3QKLSAgICAgIDwvYnV0dG9uPgotICAgICAgeyUgZW5kaWYgJX0KLSAgICA8L3NwYW4+Ci0KLSAgICA8IS0tIGxheWVyIGRldGFpbHMgcGFuZSAtLT4KLSAgICA8ZGl2IGlkPSJpbmZvcm1hdGlvbiIgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSI+Ci0gICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgotICAgICAgICA8ZHQgY2xhc3M9IiI+Ci0gICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZldGNoL2Nsb25lIFVSTCBvZiB0aGUgcmVwb3NpdG9yeSI+PC9pPgotICAgICAgICAgIFJlcG9zaXRvcnkgVVJMCi0gICAgICAgIDwvZHQ+Ci0gICAgICAgIDxkZD4KLSAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24ubGF5ZXIudmNzX3VybH19PC9zcGFuPgotICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5nZXRfdmNzX2xpbmtfdXJsICV9Ci0gICAgICAgICAgPGEgaHJlZj0ie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19saW5rX3VybH19LyIgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iIHRhcmdldD0iX2JsYW5rIj48L2E+CisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKKyAgICAgIHZhciBjdHggPSB7CisgICAgICAgIHhoclVwZGF0ZUxheWVyVXJsIDogInslIHVybCAneGhyX2xheWVyJyBwcm9qZWN0LmlkIGxheWVydmVyc2lvbi5wayAlfSIsCisgICAgICAgIGxheWVyVmVyc2lvbiA6IHsKKyAgICAgICAgICBuYW1lIDogInt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSIsCisgICAgICAgICAgaWQgOiB7e2xheWVydmVyc2lvbi5pZH19LAorICAgICAgICAgIGNvbW1pdDogInt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX0iLAorICAgICAgICAgIHslaWYgbGF5ZXJ2ZXJzaW9uLmlkIGluIHByb2plY3RsYXllcnMgJX0KKyAgICAgICAgICBpbkN1cnJlbnRQcmogOiB0cnVlLAorICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICBpbkN1cnJlbnRQcmogOiBmYWxzZSwKICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcmVwby1mb3JtIiBjbGFzcz0iY29udHJvbC1ncm91cCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmxheWVyLnZjc191cmx9fSI+Ci0gICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWxheWVyLXByb3A9InZjc191cmwiIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiID48L2k+Ci0gICAgICAgICAgPC9kZD4KLSAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZCwgaWYgbm90IGluIHRoZSByb290ICh1c3VhbGx5IG9ubHkgdXNlZCBpZiB0aGUgcmVwb3NpdG9yeSBjb250YWlucyBtb3JlIHRoYW4gb25lIGxheWVyKSI+PC9pPgotICAgICAgICAgICAgUmVwb3NpdG9yeSBzdWJkaXJlY3RvcnkKLSAgICAgICAgICA8L2R0PgotICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Tm90IHNldDwvc3Bhbj4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5kaXJwYXRofX08L3NwYW4+Ci0gICAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24uZ2V0X3Zjc19kaXJwYXRoX2xpbmtfdXJsICV9Ci0gICAgICAgICAgICA8YSBocmVmPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX2RpcnBhdGhfbGlua191cmx9fSIgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iIHRhcmdldD0iX2JsYW5rIj48L2E+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1zdWJkaXItZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tsYXllcnZlcnNpb24uZGlycGF0aH19Ij4KLSAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1sYXllci1wcm9wPSJkaXJwYXRoIiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9mb3JtPgotICAgICAgICAgICAgICA8aSBpZD0iY2hhbmdlLXN1YmRpciIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgYnJhbmNoLCB0YWcgb3IgY29tbWl0Ij48L2k+Ci0gICAgICAgICAgICAgIEdpdCByZXZpc2lvbgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX08L3NwYW4+Ci0gICAgICAgICAgICAgIDxmb3JtIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgotICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19Ij4KLSAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgZGF0YS1sYXllci1wcm9wPSJjb21taXQiIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+Ci0gICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+Ci0gICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT3RoZXIgbGF5ZXJzIHRoaXMgbGF5ZXIgZGVwZW5kcyB1cG9uIj48L2k+Ci0gICAgICAgICAgICAgICAgTGF5ZXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgbGF5ZXJkZXRhaWx1cmwgOiAieyUgdXJsICdsYXllcmRldGFpbHMnIHByb2plY3QuaWQgbGF5ZXJ2ZXJzaW9uLmlkICAlfSIsCisgICAgICAgICAgbGF5ZXJfc291cmNlOiB7e2xheWVydmVyc2lvbi5sYXllcl9zb3VyY2V8anNvbn19LAorICAgICAgICB9LAorICAgICAgICBsYXllclNvdXJjZVR5cGVzOiB7e2xheWVyX3NvdXJjZXxqc29ufX0sCisgICAgICB9OworCisgICAgICB0cnkgeworICAgICAgICBsYXllckRldGFpbHNQYWdlSW5pdChjdHgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBkb2N1bWVudC53cml0ZSgiU29ycnksIEFuIGVycm9yIGhhcyBvY2N1cnJlZCBsb2FkaW5nIHRoaXMgcGFnZSIpOworICAgICAgICBjb25zb2xlLndhcm4oZSk7CisgICAgICB9CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisKKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICB7JSBpZiBsYXllcnZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2RpciAlfQorICAgICAgPGgxPnt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8c21hbGwgY2xhc3M9ImNvbW1pdCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvc21hbGw+CisgICAgICA8L2gxPgorICAgICAgeyUgZWxzZSAlfQorICAgICAgPGgxPnt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8c21hbGwgY2xhc3M9ImNvbW1pdCIKKyAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfGxlbmd0aCA+IDEzICV9CisgICAgICAgICAgIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V9fSIKKyAgICAgICAgeyUgZW5kaWYgJX0+KHt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfHRydW5jYXRlY2hhcnM6MTN9fSk8L3NtYWxsPgorICAgICAgPC9oMT4KKyAgICAgIHslIGVuZGlmICV9CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgIDwhLS0gY29udGFpbmVyIGZvciB0YWJzIC0tPgorICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTggdGFiYmFibGUiPgorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQiIGlkPSJhbGVydC1hcmVhIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBpZD0iZGlzbWlzcy1hbGVydCI+JnRpbWVzOzwvYnV0dG9uPgorICAgICAgICAgIDxzcGFuIGlkPSJhbGVydC1tc2ciPjwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmlkIG5vdCBpbiBwcm9qZWN0bGF5ZXJzICV9CisgICAgICAgICA8YnV0dG9uIGlkPSJhZGQtcmVtb3ZlLWxheWVyLWJ0biIgZGF0YS1kaXJlY3RpdmU9ImFkZCIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tbGcgYnRuLWJsb2NrIj4KKyAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGx1cyI+PC9zcGFuPgorICAgICAgICAgICBBZGQgdGhlIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciB0byB5b3VyIHByb2plY3QKKyAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgPGJ1dHRvbiBpZD0iYWRkLXJlbW92ZS1sYXllci1idG4iIGRhdGEtZGlyZWN0aXZlPSJyZW1vdmUiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1sZyBidG4tZGFuZ2VyIj4KKyAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2giPjwvc3Bhbj4KKyAgICAgICAgICAgUmVtb3ZlIHRoZSB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgZnJvbSB5b3VyIHByb2plY3QKKyAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyI+CisgICAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgICAgICAgICAgPGEgZGF0YS10b2dnbGU9InRhYiIgaHJlZj0iI2luZm9ybWF0aW9uIiBpZD0iZGV0YWlscy10YWIiPkxheWVyIGRldGFpbHM8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjcmVjaXBlcyIgY2xhc3M9InRleHQtbXV0ZWQiIGlkPSJ0YXJnZXRzLXRhYiI+UmVjaXBlcyAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LXJlY2lwZXN0YWJsZSI+PC9zcGFuPik8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjbWFjaGluZXMiIGNsYXNzPSJ0ZXh0LW11dGVkIiBpZD0ibWFjaGluZXMtdGFiIj5NYWNoaW5lcyAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LW1hY2hpbmVzdGFibGUiPjwvc3Bhbj4pPC9hPgorICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKworICAgICAgICAgIDwhLS0gbGF5ZXIgZGV0YWlscyBwYW5lIC0tPgorICAgICAgICAgIDxkaXYgaWQ9ImluZm9ybWF0aW9uIiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICAgICAgICAgPGgzPkxheWVyIHNvdXJjZSBjb2RlIGxvY2F0aW9uPC9oMz4KKyAgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgJX0KKyAgICAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIiBpZD0iZGlyZWN0b3J5LWluZm8iPgorICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIGxheWVyIGRpcmVjdG9yeQorICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgPGNvZGU+e3tsYXllcnZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2Rpcn19PC9jb2RlPgorICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCIgaWQ9ImdpdC1yZXBvLWluZm8iPgorICAgICAgICAgICAgICA8ZHQgY2xhc3M9IiI+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGZXRjaC9jbG9uZSBVUkwgb2YgdGhlIHJlcG9zaXRvcnkiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgUmVwb3NpdG9yeSBVUkwKICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY3VycmVudC12YWx1ZSIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+Ci0gICAgICAgICAgICAgICAgICB7JSBmb3IgbGQgaW4gbGF5ZXJ2ZXJzaW9uLmRlcGVuZGVuY2llcy5hbGwgJX0KLSAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWxheWVyLWlkPSJ7e2xkLmRlcGVuZHNfb24uaWR9fSI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tsZC5kZXBlbmRzX29uLmxheWVyLnZjc191cmx9fSB8IHt7bGQuZGVwZW5kc19vbi5nZXRfdmNzX3JlZmVyZW5jZX19IiBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgcHJvamVjdC5pZCBsZC5kZXBlbmRzX29uLmlkICV9Ij57e2xkLmRlcGVuZHNfb24ubGF5ZXIubmFtZX19PC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCAiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQgYWRkLWRlcHMiPgotICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLW1pbkxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgIHBsYWNlaG9sZGVyPSJUeXBlIGEgbGF5ZXIgbmFtZSIgaWQ9ImxheWVyLWRlcC1pbnB1dCI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIGlkPSJhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iID4KLSAgICAgICAgICAgICAgICAgICAgICBBZGQgbGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBhZGQtZGVwcyI+WW91IGNhbiBvbmx5IGFkZCBsYXllcnMgVG9hc3RlciBrbm93cyBhYm91dDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24ubGF5ZXIudmNzX3VybH19PC9zcGFuPgorICAgICAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24uZ2V0X3Zjc19saW5rX3VybCAlfQorICAgICAgICAgICAgICA8YSBocmVmPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX2xpbmtfdXJsfX0vIiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1uZXctd2luZG93IiB0YXJnZXQ9Il9ibGFuayI+PC9hPgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLXJlcG8tZm9ybSIgY2xhc3M9ImZvcm0taW5saW5lIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiB2YWx1ZT0ie3tsYXllcnZlcnNpb24ubGF5ZXIudmNzX3VybH19Ij4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5kaXJwYXRoICV9CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQsIGlmIG5vdCBpbiB0aGUgcm9vdCAodXN1YWxseSBvbmx5IHVzZWQgaWYgdGhlIHJlcG9zaXRvcnkgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBsYXllcikiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgUmVwb3NpdG9yeSBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Tm90IHNldDwvc3Bhbj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmRpcnBhdGh9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmdldF92Y3NfZGlycGF0aF9saW5rX3VybCAlfQorICAgICAgICAgICAgICA8YSBocmVmPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX2RpcnBhdGhfbGlua191cmx9fSIgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tbmV3LXdpbmRvdyIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1zdWJkaXItZm9ybSIgY2xhc3M9ImZvcm0taW5saW5lIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmRpcnBhdGh9fSI+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBicmFuY2gsIHRhZyBvciBjb21taXQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgR2l0IHJldmlzaW9uCisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX08L3NwYW4+CisgICAgICAgICAgICAgIDxmb3JtIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBjbGFzcz0iZm9ybS1pbmxpbmUiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHZhbHVlPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19Ij4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlID09IGxheWVyX3NvdXJjZS5UWVBFX0lNUE9SVEVEICV9CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWxnIiBpZD0iZWRpdC1sYXllci1zb3VyY2UiIHN0eWxlPSJtYXJnaW4tbGVmdDoyMjBweDsiPkVkaXQgbGF5ZXIgc291cmNlIGNvZGUgbG9jYXRpb248L2J1dHRvbj4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgIDxmb3JtIGlkPSJlZGl0LWxheWVyLXNvdXJjZS1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgPGZpZWxkc2V0PgorICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz0icmFkaW9MZWdlbmQiPldoZXJlIGlzIHRoZSBsYXllciBzb3VyY2UgY29kZT88L2xlZ2VuZD4KKyAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGlvIj4KKyAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic291cmNlLWxvY2F0aW9uIiBpZD0icmVwbyIgdmFsdWU9InJlcG8iPgorICAgICAgICAgICAgICAgICAgIEluIGEgPHN0cm9uZz5HaXQgcmVwb3NpdG9yeTwvc3Ryb25nPgorICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaGVscC1ibG9jayIgc3R5bGU9Im1hcmdpbi1sZWZ0OjIwcHg7d2lkdGg6NzAlOyI+VG8gYnVpbGQgdGhlIGxheWVyIFRvYXN0ZXIgbXVzdCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgR2l0IHJlcG9zaXRvcnksIG90aGVyd2lzZSBidWlsZHMgd2lsbCBmYWlsLiBUb2FzdGVyIHdpbGwgZmV0Y2ggYW5kIGNoZWNrb3V0IHlvdXIgY2hvc2VuIEdpdCByZXZpc2lvbiBldmVyeSB0aW1lIHlvdSBzdGFydCBhIGJ1aWxkLjwvcD4KKyAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaW8iIHN0eWxlPSJtYXJnaW4tdG9wOjE1cHg7Ij4KKyAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic291cmNlLWxvY2F0aW9uIiBpZD0iZGlyIiB2YWx1ZT0iZGlyIiBjaGVja2VkPgorICAgICAgICAgICAgICAgICAgIEluIGEgPHN0cm9uZz5kaXJlY3Rvcnk8L3N0cm9uZz4KKyAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImhlbHAtYmxvY2siIHN0eWxlPSJtYXJnaW4tbGVmdDoyMHB4O3dpZHRoOjcwJTsiPlVzZSB0aGlzIG9wdGlvbiBmb3IgcXVpY2sgbGF5ZXIgZGV2ZWxvcG1lbnQsIGJ5IHNpbXBseSBwcm92aWRpbmcgdGhlIHBhdGggdG8gdGhlIGxheWVyIHNvdXJjZSBjb2RlLjwvcD4KKyAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgIDwvZmllbGRzZXQ+CisKKyAgICAgICAgICAgICA8ZmllbGRzZXQgaWQ9ImxheWVyLWdpdCI+CisgICAgICAgICAgICAgICA8bGVnZW5kPkdpdCByZXBvc2l0b3J5IGluZm9ybWF0aW9uPC9sZWdlbmQ+CisgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibGF5ZXItZ2l0LXJlcG8tdXJsIj4KKyAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBVUkwKKyAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRmV0Y2gvY2xvbmUgVVJMIG9mIHRoZSByZXBvc2l0b3J5LiBDdXJyZW50bHksIFRvYXN0ZXIgb25seSBzdXBwb3J0cyBHaXQgcmVwb3NpdG9yaWVzLiIgPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJsYXllci1naXQtcmVwby11cmwiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHZhbHVlPSJ7e2xheWVydmVyc2lvbi5sYXllci52Y3NfdXJsfGRlZmF1bHRfaWZfbm9uZTonJ319Ij4KKyAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImxheWVyLXN1YmRpciI+CisgICAgICAgICAgICAgICAgICAgUmVwb3NpdG9yeSBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+KG9wdGlvbmFsKTwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZCwgaWYgbm90IGluIHRoZSByb290ICh1c3VhbGx5IG9ubHkgdXNlZCBpZiB0aGUgcmVwb3NpdG9yeSBjb250YWlucyBtb3JlIHRoYW4gb25lIGxheWVyKSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImxheWVyLXN1YmRpciIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmRpcnBhdGh8ZGVmYXVsdF9pZl9ub25lOicnfX0iPgorICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIiBpZD0ibGF5ZXItcmV2aXNpb24tY3RybCI+CisgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImxheWVyLWdpdC1yZWYiPkdpdCByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJZb3UgY2FuIHByb3ZpZGUgYSBHaXQgYnJhbmNoLCBhIHRhZyBvciBhIGNvbW1pdCBTSEEgYXMgdGhlIHJldmlzaW9uIj48L3NwYW4+CisgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibGF5ZXItZ2l0LXJlZiIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfGRlZmF1bHRfaWZfbm9uZTonJ319Ij4KKyAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlzcGxheTpub25lOyIgaWQ9ImludmFsaWQtbGF5ZXItcmV2aXNpb24taGludCI+PC9zcGFuPgorICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgPC9maWVsZHNldD4KKworICAgICAgICAgICAgIDxmaWVsZHNldCBpZD0ibGF5ZXItZGlyIj4KKyAgICAgICAgICAgICAgIDxsZWdlbmQ+TGF5ZXIgZGlyZWN0b3J5IGluZm9ybWF0aW9uPC9sZWdlbmQ+CisgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibGF5ZXItZGlyLXBhdGgiPgorICAgICAgICAgICAgICAgICAgIEVudGVyIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXllciBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJsYXllci1kaXItcGF0aC1pbi1kZXRhaWxzIiBjbGFzcz0iZm9ybS1jb250cm9sIiB2YWx1ZT0ie3tsYXllcnZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2Rpcn19IiByZXF1aXJlZD4KKyAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgIDwvZmllbGRzZXQ+CisKKyAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjI1cHg7Ij4KKyAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxnIiBpZD0ic2F2ZS1jaGFuZ2VzLWZvci1zd2l0Y2giPlNhdmUgY2hhbmdlczwvYT4KKyAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJidG4gYnRuLWxpbmsgYnRuLWxnIiBpZD0iY2FuY2VsLWNoYW5nZXMtZm9yLXN3aXRjaCI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICA8L2Zvcm0+CisKKyAgICAgICAgICAgPGgzIGNsYXNzPSJ0b3AtYWlyIj5MYXllciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT3RoZXIgbGF5ZXJzIHRoaXMgbGF5ZXIgZGVwZW5kcyB1cG9uIj48L3NwYW4+CisgICAgICAgICAgIDwvaDM+CisKKyAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIGN1cnJlbnQtdmFsdWUgbGVhZCIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+CisgICAgICAgICAgICAgeyUgZm9yIGxkIGluIGxheWVydmVyc2lvbi5kZXBlbmRlbmNpZXMuYWxsICV9CisgICAgICAgICAgICAgPGxpIGRhdGEtbGF5ZXItaWQ9Int7bGQuZGVwZW5kc19vbi5pZH19Ij4KKyAgICAgICAgICAgICA8YSBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9Int7bGQuZGVwZW5kc19vbi5sYXllci52Y3NfdXJsfX0gfCB7e2xkLmRlcGVuZHNfb24uZ2V0X3Zjc19yZWZlcmVuY2V9fSIgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIHByb2plY3QuaWQgbGQuZGVwZW5kc19vbi5pZCAlfSI+e3tsZC5kZXBlbmRzX29uLmxheWVyLm5hbWV9fTwvYT4KKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10cmFzaCAiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+CisgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIGFkZC1kZXBzIj4KKyAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgZGF0YS1taW5MZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiICBwbGFjZWhvbGRlcj0iVHlwZSBhIGxheWVyIG5hbWUiIGlkPSJsYXllci1kZXAtaW5wdXQiPgorICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGlkPSJhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iIGRpc2FibGVkPSJkaXNhYmxlZCI+CisgICAgICAgICAgICAgICBBZGQgbGF5ZXIKKyAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgYWRkLWRlcHMiPllvdSBjYW4gb25seSBhZGQgbGF5ZXJzIFRvYXN0ZXIga25vd3MgYWJvdXQ8L3NwYW4+CisgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwhLS0gZW5kIGxheWVyZGV0YWlscyB0YWIgLS0+CisgICAgICAgICAgPCEtLSB0YXJnZXRzIHRhYiAtLT4KKyAgICAgICAgICA8ZGl2IGlkPSJyZWNpcGVzIiBjbGFzcz0idGFiLXBhbmUiPgorICAgICAgICAgICAgPCEtLSBSZWNpcGUgdGFibGUgLS0+CisgICAgICAgICAgICA8ZGl2IGlkPSJuby1yZWNpcGVzLXlldCIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGRvZXMgbm90IGhhdmUgcmVjaXBlIGluZm9ybWF0aW9uIGZvciB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgbGVhcm5zIGFib3V0IGxheWVycyB3aGVuIHlvdSBidWlsZCB0aGVtLiBJZiB0aGlzIGxheWVyIHByb3ZpZGVzIGFueSByZWNpcGVzLCB0aGV5IHdpbGwgYmUgbGlzdGVkIGhlcmUgYWZ0ZXIgeW91IGJ1aWxkIHRoZSA8c3Ryb25nPiB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPC9zdHJvbmc+IGxheWVyLjwvcD4KICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPCEtLSBlbmQgbGF5ZXJkZXRhaWxzIHRhYiAtLT4KLSAgICAgICAgICAgIDwhLS0gdGFyZ2V0cyB0YWIgLS0+Ci0gICAgICAgICAgICA8ZGl2IGlkPSJyZWNpcGVzIiBjbGFzcz0idGFiLXBhbmUiPgotICAgICAgICAgICAgICA8IS0tIFJlY2lwZSB0YWJsZSAtLT4KLSAgICAgICAgICAgICAgPGRpdiBpZD0ibm8tcmVjaXBlcy15ZXQiIGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KLSAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGRvZXMgbm90IGhhdmUgcmVjaXBlIGluZm9ybWF0aW9uIGZvciB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+Ci0gICAgICAgICAgICAgICAgPHA+VG9hc3RlciBsZWFybnMgYWJvdXQgbGF5ZXJzIHdoZW4geW91IGJ1aWxkIHRoZW0uIElmIHRoaXMgbGF5ZXIgcHJvdmlkZXMgYW55IHJlY2lwZXMsIHRoZXkgd2lsbCBiZSBsaXN0ZWQgaGVyZSBhZnRlciB5b3UgYnVpbGQgdGhlIDxzdHJvbmc+IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8L3N0cm9uZz4gbGF5ZXIuPC9wPgotICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIHVybCAnbGF5ZXJyZWNpcGVzdGFibGUnIHByb2plY3QuaWQgbGF5ZXJ2ZXJzaW9uLmlkICBhcyB4aHJfdGFibGVfdXJsICV9CisgICAgICAgICAgICB7JSB3aXRoICJyZWNpcGVzdGFibGUiIGFzIHRhYmxlX25hbWUgJX0KKyAgICAgICAgICAgIHslIHdpdGggIlJlY2lwZXMiIGFzIHRpdGxlICV9CisgICAgICAgICAgICB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtc2ltcGxlLmh0bWwnICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgPC9kaXY+CiAKKyAgICAgICAgICA8ZGl2IGlkPSJtYWNoaW5lcyIgY2xhc3M9InRhYi1wYW5lIj4KIAotCi0gICAgICAgICAgICAgIHslIHVybCAnbGF5ZXJyZWNpcGVzdGFibGUnIHByb2plY3QuaWQgbGF5ZXJ2ZXJzaW9uLmlkICBhcyB4aHJfdGFibGVfdXJsICV9Ci0gICAgICAgICAgICAgIHslIHdpdGggInJlY2lwZXN0YWJsZSIgYXMgdGFibGVfbmFtZSAlfQotICAgICAgICAgICAgICB7JSB3aXRoICJSZWNpcGVzIiBhcyB0aXRsZSAlfQotICAgICAgICAgICAgICB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtc2ltcGxlLmh0bWwnICV9Ci0gICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgPGRpdiBpZD0ibm8tbWFjaGluZXMteWV0IiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgZG9lcyBub3QgaGF2ZSBtYWNoaW5lIGluZm9ybWF0aW9uIGZvciB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgIDxwPlNhZGx5LCBtYWNoaW5lIGluZm9ybWF0aW9uIGNhbm5vdCBiZSBvYnRhaW5lZCBmcm9tIGJ1aWxkcywgc28gdGhpcyBwYWdlIHdpbGwgcmVtYWluIGVtcHR5LjwvcD4KICAgICAgICAgICAgIDwvZGl2PgogCi0gICAgICAgICAgICA8ZGl2IGlkPSJtYWNoaW5lcyIgY2xhc3M9InRhYi1wYW5lIj4KIAotICAgICAgICAgICAgICA8ZGl2IGlkPSJuby1tYWNoaW5lcy15ZXQiIGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KLSAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGRvZXMgbm90IGhhdmUgbWFjaGluZSBpbmZvcm1hdGlvbiBmb3IgdGhlIDxzdHJvbmc+IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8L3N0cm9uZz4gbGF5ZXIuPC9wPgotICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgbGVhcm5zIGFib3V0IGxheWVycyB3aGVuIHlvdSBidWlsZCB0aGVtLiBJZiB0aGlzIGxheWVyIHByb3ZpZGVzIGFueSBtYWNoaW5lcywgdGhleSB3aWxsIGJlIGxpc3RlZCBoZXJlIGFmdGVyIHlvdSBidWlsZCB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+Ci0gICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPCEtLSBNYWNoaW5lcyB0YWJsZSAtLT4KKyAgICAgICAgICAgIHslIHVybCAnbGF5ZXJtYWNoaW5lc3RhYmxlJyBwcm9qZWN0LmlkIGxheWVydmVyc2lvbi5pZCAgYXMgeGhyX3RhYmxlX3VybCAlfQorICAgICAgICAgICAgeyUgd2l0aCAibWFjaGluZXN0YWJsZSIgYXMgdGFibGVfbmFtZSAgJX0KKyAgICAgICAgICAgIHslIHdpdGggIk1hY2hpbmVzIiBhcyB0aXRsZSAgJX0KKyAgICAgICAgICAgIHslIGluY2x1ZGUgJ3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbCcgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYiBjb250ZW50IC0tPgorICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYmFibGUgLS0+CiAKLQotICAgICAgICAgICAgICA8IS0tIE1hY2hpbmVzIHRhYmxlIC0tPgotICAgICAgICAgICAgICB7JSB1cmwgJ2xheWVybWFjaGluZXN0YWJsZScgcHJvamVjdC5pZCBsYXllcnZlcnNpb24uaWQgIGFzIHhocl90YWJsZV91cmwgJX0KLSAgICAgICAgICAgICAgeyUgd2l0aCAibWFjaGluZXN0YWJsZSIgYXMgdGFibGVfbmFtZSAgJX0KLSAgICAgICAgICAgICAgeyUgd2l0aCAiTWFjaGluZXMiIGFzIHRpdGxlICAlfQotICAgICAgICAgICAgICB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtc2ltcGxlLmh0bWwnICV9Ci0gICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYiBjb250ZW50IC0tPgotICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiYWJsZSAtLT4KLQotICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjQgd2VsbCI+IDwhLS0gaW5mbyBzaWRlIHBhbmVsIC0tPgorICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPiA8IS0tIGluZm8gc2lkZSBwYW5lbCAtLT4KKyAgICAgICAgPGRpdiBjbGFzcz0id2VsbCI+CiAgICAgICAgICAgPGgyPkFib3V0IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fTwvaDI+CiAgICAgICAgICAgPGRsIGNsYXNzPSJpdGVtLWluZm8iPgogCiAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgIFN1bW1hcnkKLSAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBsYXllciI+PC9pPgorICAgICAgICAgICAgU3VtbWFyeQorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBsYXllciI+PC9zcGFuPgogICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIiBzdHlsZT0iZGlzcGxheTpub25lIj5Ob3Qgc2V0PC9zcGFuPgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24ubGF5ZXIuc3VtbWFyeXxkZWZhdWx0X2lmX25vbmU6Jyd9fTwvc3Bhbj4KLSAgICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsgbWFyZ2luLWJvdHRvbToyMHB4Ij4KLSAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9InNwYW4xMiIgcm93cz0iMiI+eyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLnN1bW1hcnkgJX17e2xheWVydmVyc2lvbi5sYXllci5zdW1tYXJ5fX17JSBlbmRpZiAlfTwvdGV4dGFyZWE+Ci0gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIGRhdGEtbGF5ZXItcHJvcD0ic3VtbWFyeSIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KLSAgICAgICAgICAgICAgPC9mb3JtPgotICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tdHJhc2ggZGVsZXRlLWN1cnJlbnQtdmFsdWUiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Tm90IHNldDwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci5zdW1tYXJ5fGRlZmF1bHRfaWZfbm9uZTonJ319PC9zcGFuPgorICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsgbWFyZ2luLWJvdHRvbToyMHB4OyBtYXJnaW4tdG9wOjVweDsiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCIgcm93cz0iMiI+eyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLnN1bW1hcnkgJX17e2xheWVydmVyc2lvbi5sYXllci5zdW1tYXJ5fX17JSBlbmRpZiAlfTwvdGV4dGFyZWE+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgY2hhbmdlLWJ0biIgZGF0YS1sYXllci1wcm9wPSJzdW1tYXJ5IiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXQiPjwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgogICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICAgICAgIERlc2NyaXB0aW9uCiAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPk5vdCBzZXQ8L3NwYW4+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbnxkZWZhdWx0X2lmX25vbmU6Jyd9fTwvc3Bhbj4KLSAgICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsgbWFyZ2luLWJvdHRvbToyMHB4Ij4KLSAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9InNwYW4xMiIgcm93cz0iNiI+eyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9uICV9e3tsYXllcnZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb259fXslIGVuZGlmICV9PC90ZXh0YXJlYT4KLSAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgZGF0YS1sYXllci1wcm9wPSJkZXNjcmlwdGlvbiIgdHlwZT0iYnV0dG9uIiA+U2F2ZTwvYnV0dG9uPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+Ci0gICAgICAgICAgICAgIDwvZm9ybT4KLSAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+Ci0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPk5vdCBzZXQ8L3NwYW4+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb258ZGVmYXVsdF9pZl9ub25lOicnfX08L3NwYW4+CisgICAgICAgICAgICA8Zm9ybSBzdHlsZT0iZGlzcGxheTpub25lOyBtYXJnaW4tYm90dG9tOjIwcHg7IG1hcmdpbi10b3A6NXB4OyI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iZm9ybS1jb250cm9sIiByb3dzPSI2Ij57JSBpZiBsYXllcnZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb24gJX17e2xheWVydmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbn19eyUgZW5kaWYgJX08L3RleHRhcmVhPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGNoYW5nZS1idG4iIGRhdGEtbGF5ZXItcHJvcD0iZGVzY3JpcHRpb24iIHR5cGU9ImJ1dHRvbiIgPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXQiPjwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgogICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5sYXllci51cF9pZCAlfQorICAgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZSA9PSBsYXllcl9zb3VyY2UuVFlQRV9MQVlFUklOREVYICAlfQogICAgICAgICAgICAgPGR0PkxheWVyIGluZGV4PC9kdD4KICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYnJhbmNoL3t7bGF5ZXJ2ZXJzaW9uLnVwX2JyYW5jaC5uYW1lfX0vbGF5ZXIve3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19Ij5sYXllciBpbmRleCBsaW5rPC9hPgotCi0gICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2JyYW5jaC97e2xheWVydmVyc2lvbi5yZWxlYXNlLm5hbWV9fS9sYXllci97e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0iPkxheWVyIGluZGV4IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fTwvYT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDwvZGw+CisgICAgICAgICAgeyMgT25seSBzaG93IGRlbGV0ZSBsaW5rIGZvciBpbXBvcnRlZCBsYXllcnMgI30KKyAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlID09IGxheWVyX3NvdXJjZS5UWVBFX0lNUE9SVEVEICV9CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tdHJhc2ggdGV4dC1kYW5nZXIiPjwvaT4KKyAgICAgICAgICA8YSBocmVmPSIjZGVsZXRlLWxheWVyLW1vZGFsIiAgcm9sZT0iYnV0dG9uIiBjbGFzcz0idGV4dC1kYW5nZXIiCisgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNkZWxldGUtbGF5ZXItbW9kYWwiPkRlbGV0ZSBsYXllcjwvYT4KICAgICAgICAgICB7JSBlbmRpZiAlfQotCi0gICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgogICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PiA8IS0tIGNsb3NlIGNvbHVtbiAxMiBkaXYgLS0+Cis8L2Rpdj4gPCEtLSBjbG9zZSB0b3Agcm93IGRpdiAtLT4KIAotICAgICAgeyUgZW5kYmxvY2sgJX0KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tYWNoaW5lX2J0bi5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbWFjaGluZV9idG4uaHRtbAppbmRleCA3YjA4ZjZhLi41ZDkzZDdhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tYWNoaW5lX2J0bi5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21hY2hpbmVfYnRuLmh0bWwKQEAgLTEsMTYgKzEsMTYgQEAKLTxhIGhyZWY9InslIHVybCAncHJvamVjdCcgZXh0cmEucGlkICV9P3NldE1hY2hpbmU9e3tkYXRhLm5hbWV9fSIgY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXItZXhpc3RzLXt7ZGF0YS5sYXllcl92ZXJzaW9uLmlkfX0iCis8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIGV4dHJhLnBpZCAlfT9zZXRNYWNoaW5lPXt7ZGF0YS5uYW1lfX0iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGxheWVyLWV4aXN0cy17e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19IgogICAgIHslIGlmIGRhdGEubGF5ZXJfdmVyc2lvbi5wayBub3QgaW4gZXh0cmEuY3VycmVudF9sYXllcnMgJX0KICAgICBzdHlsZT0iZGlzcGxheTpub25lOyIKICAgICB7JSBlbmRpZiAlfQogPgogICBTZWxlY3QgbWFjaGluZTwvYT4KLTxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXJidG4gbGF5ZXItYWRkLXt7ZGF0YS5sYXllcl92ZXJzaW9uLmlkfX0iIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLmxheWVyX3ZlcnNpb24uaWR9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5sYXllcl92ZXJzaW9uLmlkICV9In0nIGRhdGEtZGlyZWN0aXZlPSJhZGQiCis8YSBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBsYXllcmJ0biBsYXllci1hZGQte3tkYXRhLmxheWVyX3ZlcnNpb24uaWR9fSIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19LCAibmFtZSI6ICAie3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24uaWQgJX0ifScgZGF0YS1kaXJlY3RpdmU9ImFkZCIKICAgICB7JSBpZiBkYXRhLmxheWVyX3ZlcnNpb24ucGsgaW4gZXh0cmEuY3VycmVudF9sYXllcnMgJX0KICAgICBzdHlsZT0iZGlzcGxheTpub25lOyIKICAgICB7JSBlbmRpZiAlfQogPgotICA8aSBjbGFzcz0iaWNvbi1wbHVzIj48L2k+CisgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMiPjwvc3Bhbj4KICAgQWRkIGxheWVyCi0gIDxpIHRpdGxlPSIiIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlRvIGVuYWJsZSB0aGlzIG1hY2hpbmUsIHlvdSBtdXN0IGZpcnN0IGFkZCB0aGUge3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IGxheWVyIHRvIHlvdXIgcHJvamVjdCI+PC9pPgotPC9idXR0b24+CisgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUbyBzZWxlY3QgdGhpcyBtYWNoaW5lLCB5b3UgbXVzdCBmaXJzdCBhZGQgdGhlIHt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciB0byB5b3VyIHByb2plY3QiPjwvaT4KKzwvYT4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbXJiX3NlY3Rpb24uaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21yYl9zZWN0aW9uLmh0bWwKaW5kZXggYjVlNzk4ZC4uYjc2MWZmZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbXJiX3NlY3Rpb24uaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tcmJfc2VjdGlvbi5odG1sCkBAIC0xLDggKzEsMjYzIEBACiB7JSBsb2FkIHN0YXRpYyAlfQoteyUgbG9hZCBwcm9qZWN0dGFncyAlfQoteyUgbG9hZCBwcm9qZWN0X3VybF90YWcgJX0KIHslIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgcHJvamVjdF91cmxfdGFnICV9CiA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9tcmJzZWN0aW9uLmpzJyAlfSI+PC9zY3JpcHQ+CisKK3slIGlmIG1ydSAlfQorICB7JSBpZiBtcmJfdHlwZSA9PSAncHJvamVjdCcgJX0KKyAgICA8aDI+CisgICAgICBMYXRlc3QgcHJvamVjdCBidWlsZHMKKworICAgICAgeyUgaWYgcHJvamVjdC5pc19kZWZhdWx0ICV9CisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJCdWlsZHMgaW4gdGhpcyBwcm9qZWN0IGNhbm5vdCBiZSBzdGFydGVkIGZyb20gVG9hc3RlcjogdGhleSBhcmUgc3RhcnRlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUiPjwvc3Bhbj4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICA8L2gyPgorICB7JSBlbHNlICV9CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgPGgxPkxhdGVzdCBidWlsZHM8L2gxPgorICAgIDwvZGl2PgorICB7JSBlbmRpZiAlfQorCisgIDxkaXYgaWQ9ImxhdGVzdC1idWlsZHMiPgorICAgIHslIGZvciBidWlsZCBpbiBtcnUgJX0KKyAgICAgIDxkaXYgZGF0YS1sYXRlc3QtYnVpbGQtcmVzdWx0PSJ7e2J1aWxkLmlkfX0iIGNsYXNzPSJhbGVydCBidWlsZC1yZXN1bHQgeyUgaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX1hbGVydC1zdWNjZXNzeyUgZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfWFsZXJ0LWRhbmdlcnslIGVsc2UgJX1hbGVydC1pbmZveyUgZW5kaWYgJX0iPgorICAgICAgICA8IS0tIHByb2plY3QgdGl0bGUgLS0+CisgICAgICAgIHslIGlmIG1yYl90eXBlICE9ICdwcm9qZWN0JyAlfQorICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBwcm9qZWN0LW5hbWUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KKyAgICAgICAgICAgICAgPHNtYWxsPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJhbGVydC1saW5rIHRleHQtdXBwZXJjYXNlIiBocmVmPSJ7JSBwcm9qZWN0X3VybCBidWlsZC5wcm9qZWN0ICV9Ij4KKyAgICAgICAgICAgICAgICAgIHt7YnVpbGQucHJvamVjdC5uYW1lfX0KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvc21hbGw+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciIGRhdGEtcm9sZT0iYnVpbGQtc3RhdHVzLWNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KKyAgICAgICAgICAgIExvYWRpbmcuLi4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICB7JSBlbmRmb3IgJX0KKyAgPC9kaXY+Cit7JSBlbmRpZiAlfQorCis8IS0tIGJ1aWxkIG1haW4gdGVtcGxhdGUgLS0+Cis8c2NyaXB0IGlkPSJidWlsZC10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTMiPgorICAgIDwhLS0gb25seSBzaG93IGxpbmsgZm9yIGNvbXBsZXRlZCBidWlsZHMgLS0+CisgICAgPCVpZiBzdGF0ZSA9PSAnU3VjY2VlZGVkJyB8fCBzdGF0ZSA9PSAnRmFpbGVkJyU+CisgICAgICA8YSBjbGFzcz0iYWxlcnQtbGluayIgaHJlZj0iPCU6ZGFzaGJvYXJkX3VybCU+Ij4KKyAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9InRvb2x0aXAiIGRhdGEtcm9sZT0idGFyZ2V0cy10ZXh0IiB0aXRsZT0iUmVjaXBlczogPCU6dGFyZ2V0cyU+Ij4KKyAgICAgICAgICA8JTp0YXJnZXRzX2FiYnJldmlhdGVkJT4KKyAgICAgICAgPC9zcGFuPgorICAgICAgPC9hPgorICAgIDwlZWxzZSB0YXJnZXRzX2FiYnJldmlhdGVkICE9PSAnJyU+CisgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1yb2xlPSJ0YXJnZXRzLXRleHQiIHRpdGxlPSJSZWNpcGVzOiA8JTp0YXJnZXRzJT4iPgorICAgICAgICA8JTp0YXJnZXRzX2FiYnJldmlhdGVkJT4KKyAgICAgIDwvc3Bhbj4KKyAgICA8JWVsc2UlPgorICAgICAgRmV0Y2hpbmcgcmVjaXBlIG5hbWVzLi4uCisgICAgPCUvaWYlPgorICA8L2Rpdj4KKworICA8ZGl2IGRhdGEtYnVpbGQtc3RhdGU9IjwlOnN0YXRlJT4iPgorICAgIDwlaWYgc3RhdGUgPT0gJ1BhcnNpbmcnJT4KKyAgICAgIDwlaW5jbHVkZSB0bXBsPScjcGFyc2luZy1yZWNpcGVzLWJ1aWxkLXRlbXBsYXRlJy8lPgorICAgIDwlZWxzZSBzdGF0ZSA9PSAnUXVldWVkJyU+CisgICAgICA8JWluY2x1ZGUgdG1wbD0nI3F1ZXVlZC1idWlsZC10ZW1wbGF0ZScvJT4KKyAgICA8JWVsc2Ugc3RhdGUgPT0gJ1N1Y2NlZWRlZCcgfHwgc3RhdGUgPT0gJ0ZhaWxlZCclPgorICAgICAgPCVpbmNsdWRlIHRtcGw9JyNzdWNjZWVkZWQtb3ItZmFpbGVkLWJ1aWxkLXRlbXBsYXRlJy8lPgorICAgIDwlZWxzZSBzdGF0ZSA9PSAnQ2FuY2VsbGluZyclPgorICAgICAgPCVpbmNsdWRlIHRtcGw9JyNjYW5jZWxsaW5nLWJ1aWxkLXRlbXBsYXRlJy8lPgorICAgIDwlZWxzZSBzdGF0ZSA9PSAnU3RhcnRpbmcnJT4KKyAgICAgIDwlaW5jbHVkZSB0bXBsPScjc3RhcnRpbmctdGVtcGxhdGUnLyU+CisgICAgPCVlbHNlIHN0YXRlID09ICdJbiBQcm9ncmVzcyclPgorICAgICAgPCVpbmNsdWRlIHRtcGw9JyNpbi1wcm9ncmVzcy1idWlsZC10ZW1wbGF0ZScvJT4KKyAgICA8JWVsc2Ugc3RhdGUgPT0gJ0NhbmNlbGxlZCclPgorICAgICAgPCVpbmNsdWRlIHRtcGw9JyNjYW5jZWxsZWQtYnVpbGQtdGVtcGxhdGUnLyU+CisgICAgPCUvaWYlPgorICA8L2Rpdj4KKzwvc2NyaXB0PgorCis8IS0tIHF1ZXVlZCBidWlsZCAtLT4KKzxzY3JpcHQgaWQ9InF1ZXVlZC1idWlsZC10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTUiPgorICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIKKyAgICAgICAgICB0aXRsZT0iVGhpcyBidWlsZCBpcyB3YWl0aW5nIGZvciB0aGUgYnVpbGQgZGlyZWN0b3J5IHRvIGJlY29tZSBhdmFpbGFibGUiPgorICAgIDwvc3Bhbj4KKworICAgIEJ1aWxkIHF1ZXVlZAorICA8L2Rpdj4KKworICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCI+CisgICAgPCEtLSBjYW5jZWwgYnV0dG9uIC0tPgorICAgIDwlaW5jbHVkZSB0bXBsPScjY2FuY2VsLXRlbXBsYXRlJy8lPgorICA8L2Rpdj4KKzwvc2NyaXB0PgorCis8IS0tIHBhcnNpbmcgcmVjaXBlcyBidWlsZCAtLT4KKzxzY3JpcHQgaWQ9InBhcnNpbmctcmVjaXBlcy1idWlsZC10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPCEtLSBwcm9ncmVzcyBiYXIgYW5kIHBhcnNlIGNvbXBsZXRpb24gcGVyY2VudGFnZSAtLT4KKyAgPGRpdiBkYXRhLXJvbGU9ImJ1aWxkLXN0YXR1cyIgY2xhc3M9ImNvbC1tZC00IGNvbC1tZC1vZmZzZXQtMSBwcm9ncmVzcy1pbmZvIj4KKyAgICA8IS0tIHByb2dyZXNzIGJhciAtLT4KKyAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CisgICAgICA8ZGl2IGlkPSJyZWNpcGVzLXBhcnNlZC1wZXJjZW50YWdlLWJhci08JTppZCU+IgorICAgICAgICAgICBzdHlsZT0id2lkdGg6IDwlOnJlY2lwZXNfcGFyc2VkX3BlcmNlbnRhZ2UlPiU7IgorICAgICAgICAgICBjbGFzcz0icHJvZ3Jlc3MtYmFyIj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKworICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCBwcm9ncmVzcy1pbmZvIj4KKyAgICA8IS0tIHBhcnNlIGNvbXBsZXRpb24gcGVyY2VudGFnZSAtLT4KKyAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGdldC1oZWxwLWJsdWUiCisgICAgICAgICAgdGl0bGU9IkJpdEJha2UgaXMgcGFyc2luZyB0aGUgbGF5ZXJzIHJlcXVpcmVkIGZvciB5b3VyIGJ1aWxkIj4KKyAgICA8L3NwYW4+CisKKyAgICBQYXJzaW5nIDxzcGFuIGlkPSJyZWNpcGVzLXBhcnNlZC1wZXJjZW50YWdlLTwlOmlkJT4iPjwlOnJlY2lwZXNfcGFyc2VkX3BlcmNlbnRhZ2UlPjwvc3Bhbj4lIGNvbXBsZXRlCisKKyAgICA8JWluY2x1ZGUgdG1wbD0nI2NhbmNlbC10ZW1wbGF0ZScvJT4KKyAgPC9kaXY+Cis8L3NjcmlwdD4KKworPCEtLSBpbiBwcm9ncmVzcyBidWlsZDsgdGFza3Mgc3RpbGwgc3RhcnRpbmcgLS0+Cis8c2NyaXB0IGlkPSJzdGFydGluZy10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTUiPgorICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIKKyAgICAgICAgICB0aXRsZT0iVGhpcyBidWlsZCBpcyB3YWl0aW5nIGZvciB0YXNrcyB0byBzdGFydCI+CisgICAgPC9zcGFuPgorCisgICAgVGFza3Mgc3RhcnRpbmcuLi4KKyAgPC9kaXY+CisKKyAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPgorICAgIDwhLS0gY2FuY2VsIGJ1dHRvbiAtLT4KKyAgICA8JWluY2x1ZGUgdG1wbD0nI2NhbmNlbC10ZW1wbGF0ZScvJT4KKyAgPC9kaXY+Cis8L3NjcmlwdD4KKworPCEtLSBpbiBwcm9ncmVzcyBidWlsZDsgYXQgbGVhc3Qgb25lIHRhc2sgZmluaXNoZWQgLS0+Cis8c2NyaXB0IGlkPSJpbi1wcm9ncmVzcy1idWlsZC10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPCEtLSBwcm9ncmVzcyBiYXIgYW5kIHRhc2sgY29tcGxldGlvbiBwZXJjZW50YWdlIC0tPgorICA8ZGl2IGRhdGEtcm9sZT0iYnVpbGQtc3RhdHVzIiBjbGFzcz0iY29sLW1kLTQgY29sLW1kLW9mZnNldC0xIHByb2dyZXNzLWluZm8iPgorICAgIDwhLS0gcHJvZ3Jlc3MgYmFyIC0tPgorICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIiBpZD0iYnVpbGQtcGMtZG9uZS10aXRsZS08JTppZCU+Ij4KKyAgICAgIDxkaXYgaWQ9ImJ1aWxkLXBjLWRvbmUtYmFyLTwlOmlkJT4iCisgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogPCU6dGFza3NfY29tcGxldGVfcGVyY2VudGFnZSU+JTsiCisgICAgICAgICAgIGNsYXNzPSJwcm9ncmVzcy1iYXIiPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorCisgIDxkaXYgY2xhc3M9ImNvbC1tZC00IHByb2dyZXNzLWluZm8iPgorICAgIDwhLS0gdGFzayBjb21wbGV0aW9uIHBlcmNlbnRhZ2UgLS0+CisgICAgPHNwYW4gaWQ9ImJ1aWxkLXBjLWRvbmUtPCU6aWQlPiI+PCU6dGFza3NfY29tcGxldGVfcGVyY2VudGFnZSU+PC9zcGFuPiUgb2YKKyAgICB0YXNrcyBjb21wbGV0ZQorCisgICAgPCEtLSBjYW5jZWwgYnV0dG9uIC0tPgorICAgIDwlaW5jbHVkZSB0bXBsPScjY2FuY2VsLXRlbXBsYXRlJy8lPgorICA8L2Rpdj4KKzwvc2NyaXB0PgorCis8IS0tIGNhbmNlbGxpbmcgYnVpbGQgLS0+Cis8c2NyaXB0IGlkPSJjYW5jZWxsaW5nLWJ1aWxkLXRlbXBsYXRlIiB0eXBlPSJ0ZXh0L3gtanNyZW5kZXIiPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtOSI+CisgICAgQ2FuY2VsbGluZyB0aGUgYnVpbGQgLi4uCisgIDwvZGl2PgorPC9zY3JpcHQ+CisKKzwhLS0gc3VjY2VlZGVkIG9yIGZhaWxlZCBidWlsZCAtLT4KKzxzY3JpcHQgaWQ9InN1Y2NlZWRlZC1vci1mYWlsZWQtYnVpbGQtdGVtcGxhdGUiIHR5cGU9InRleHQveC1qc3JlbmRlciI+CisgIDwhLS0gY29tcGxldGVkX29uIC0tPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtMiI+CisgICAgPCU6Y29tcGxldGVkX29uJT4KKyAgPC9kaXY+CisKKyAgPCEtLSBlcnJvcnMgLS0+CisgIDxkaXYgY2xhc3M9ImNvbC1tZC0yIj4KKyAgICA8JWlmIGVycm9ycyU+CisgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1taW51cy1zaWduIj48L3NwYW4+CisgICAgICA8YSBocmVmPSI8JTpkYXNoYm9hcmRfZXJyb3JzX3VybCU+IiBjbGFzcz0iYWxlcnQtbGluayI+CisgICAgICAgIDwlOmVycm9ycyU+IGVycm9yPCU6ZXJyb3JzX3BsdXJhbGlzZSU+CisgICAgICA8L2E+CisgICAgPCUvaWYlPgorICA8L2Rpdj4KKworICA8IS0tIHdhcm5pbmdzIC0tPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtMiI+CisgICAgPCVpZiB3YXJuaW5ncyU+CisgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi13YXJuaW5nLXNpZ24gYnVpbGQtd2FybmluZ3MiPjwvc3Bhbj4KKyAgICAgIDxhIGhyZWY9IjwlOmRhc2hib2FyZF93YXJuaW5nc191cmwlPiIgY2xhc3M9ImFsZXJ0LWxpbmsgYnVpbGQtd2FybmluZ3MiPgorICAgICAgICA8JTp3YXJuaW5ncyU+IHdhcm5pbmc8JTp3YXJuaW5nc19wbHVyYWxpc2UlPgorICAgICAgPC9hPgorICAgIDwlL2lmJT4KKyAgPC9kaXY+CisKKyAgPCEtLSBidWlsZCB0aW1lIC0tPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtMyI+CisgICAgQnVpbGQgdGltZToKKworICAgIDxzcGFuIGRhdGEtcm9sZT0iZGF0YS1yZWNlbnQtYnVpbGQtYnVpbGR0aW1lLWZpZWxkIj4KKyAgICAgIDwlaWYgc3RhdGUgPT0gJ1N1Y2NlZWRlZCclPgorICAgICAgICA8YSBjbGFzcz0iYWxlcnQtbGluayIgaHJlZj0iPCU6YnVpbGR0aW1lX3VybCU+Ij48JTpidWlsZHRpbWUlPjwvYT4KKyAgICAgIDwlZWxzZSU+CisgICAgICAgIDwlOmJ1aWxkdGltZSU+CisgICAgICA8JS9pZiU+CisgICAgPC9zcGFuPgorCisgICAgPCEtLSByZWJ1aWxkIGJ1dHRvbiAtLT4KKyAgICA8JWluY2x1ZGUgdG1wbD0nI3JlYnVpbGQtdGVtcGxhdGUnLyU+CisgIDwvZGl2PgorPC9zY3JpcHQ+CisKKzwhLS0gY2FuY2VsbGVkIGJ1aWxkIC0tPgorPHNjcmlwdCBpZD0iY2FuY2VsbGVkLWJ1aWxkLXRlbXBsYXRlIiB0eXBlPSJ0ZXh0L3gtanNyZW5kZXIiPgorICA8IS0tIGJ1aWxkIGNhbmNlbGxlZCBtZXNzYWdlIC0tPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiI+CisgICAgQnVpbGQgY2FuY2VsbGVkCisgIDwvZGl2PgorCisgIDwhLS0gcmVidWlsZCBidXR0b24gLS0+CisgIDxkaXYgY2xhc3M9ImNvbC1tZC0zIj4KKyAgICA8JWluY2x1ZGUgdG1wbD0nI3JlYnVpbGQtdGVtcGxhdGUnLyU+CisgIDwvZGl2PgorPC9zY3JpcHQ+CisKKzwhLS0gcmVidWlsZCBidXR0b24gb3Igbm8gcmVidWlsZCBpY29uIC0tPgorPHNjcmlwdCBpZD0icmVidWlsZC10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPCVpZiBpc19kZWZhdWx0X3Byb2plY3RfYnVpbGQlPgorICAgIDwhLS0gbm8gcmVidWlsZCBpbmZvIGljb24gLS0+CisgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQgZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIDwlaWYgc3RhdGUgPT0gJ1N1Y2NlZWRlZCclPmdldC1oZWxwLWdyZWVuPCVlbHNlIHN0YXRlID09ICdGYWlsZWQnJT5nZXQtaGVscC1yZWQ8JWVsc2UlPmdldC1oZWxwLWJsdWU8JS9pZiU+IgorICAgIHRpdGxlPSJCdWlsZHMgaW4gdGhpcyBwcm9qZWN0IGNhbm5vdCBiZSBzdGFydGVkIGZyb20gVG9hc3RlcjogdGhleSBhcmUgc3RhcnRlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUiPgorICAgIDwvc3Bhbj4KKyAgPCVlbHNlJT4KKyAgICA8IS0tIHJlYnVpbGQgYnV0dG9uIC0tPgorICAgIDxzcGFuIGNsYXNzPSJyZWJ1aWxkLWJ0biBhbGVydC1saW5rIDwlaWYgc3RhdGUgPT0gJ1N1Y2Nlc3MnJT5zdWNjZXNzPCVlbHNlIHN0YXRlID09ICdGYWlsZWQnJT5kYW5nZXI8JWVsc2UlPmluZm88JS9pZiU+IHB1bGwtcmlnaHQiCisgICAgZGF0YS1yZXF1ZXN0LXVybD0iPCU6cmVidWlsZF91cmwlPiIgZGF0YS10YXJnZXQ9JzwlOmJ1aWxkX3RhcmdldHNfanNvbiU+Jz4KKyAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXJlcGVhdCI+PC9zcGFuPgorICAgICAgUmVidWlsZAorICAgIDwvc3Bhbj4KKyAgPCUvaWYlPgorPC9zY3JpcHQ+CisKKzwhLS0gY2FuY2VsIGJ1dHRvbiBvciBubyBjYW5jZWwgaWNvbiAtLT4KKzxzY3JpcHQgaWQ9ImNhbmNlbC10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPCVpZiBpc19kZWZhdWx0X3Byb2plY3RfYnVpbGQlPgorICAgIDwhLS0gbm8gY2FuY2VsIGljb24gLS0+CisgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBnZXQtaGVscC1ibHVlIHB1bGwtcmlnaHQiIHRpdGxlPSJCdWlsZHMgaW4gdGhpcyBwcm9qZWN0IGNhbm5vdCBiZSBjYW5jZWxsZWQgZnJvbSBUb2FzdGVyOiB0aGV5IGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUiPjwvc3Bhbj4KKyAgPCVlbHNlJT4KKyAgICA8IS0tIGNhbmNlbCBidXR0b24gLS0+CisgICAgPHNwYW4gY2xhc3M9ImNhbmNlbC1idWlsZC1idG4gcHVsbC1yaWdodCBhbGVydC1saW5rIgorICAgIGRhdGEtYnVpbGRyZXF1ZXN0LWlkPSI8JTpidWlsZHJlcXVlc3RfaWQlPiIgZGF0YS1yZXF1ZXN0LXVybD0iPCU6Y2FuY2VsX3VybCU+Ij4KKyAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUiPjwvc3Bhbj4KKyAgICAgIENhbmNlbAorICAgIDwvc3Bhbj4KKyAgPCUvaWYlPgorPC9zY3JpcHQ+CisKIDxzY3JpcHQ+CiAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICB2YXIgY3R4ID0gewpAQCAtMTcsMTYyICsyNzIsMyBAQAogICAgIH0KICAgfSk7CiA8L3NjcmlwdD4KLQoteyVpZiBtcnUgYW5kIG1ydS5jb3VudCA+IDAlfQotCi0gIHslaWYgbXJiX3R5cGUgPT0gJ3Byb2plY3QnICV9Ci0gICAgICA8aDIgY2xhc3M9InBhZ2UtaGVhZGVyIj4KLSAgICAgIExhdGVzdCBwcm9qZWN0IGJ1aWxkcwotCi0gICAgICB7JSBpZiBwcm9qZWN0LmlzX2RlZmF1bHQgJX0KLSAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iQnVpbGRzIGluIHRoaXMgcHJvamVjdCBjYW5ub3QgYmUgc3RhcnRlZCBmcm9tIFRvYXN0ZXI6IHRoZXkgYXJlIHN0YXJ0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIj48L2k+Ci0gICAgICB7JSBlbmRpZiAlfQotICAgICAgPC9oMj4KLSAgeyUgZWxzZSAlfQotICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIHRvcC1haXIiPgotICAgICAgPGgxPgotICAgICAgTGF0ZXN0IGJ1aWxkcwotICAgICAgPC9oMT4KLSAgICA8L2Rpdj4KLSAgeyUgZW5kaWYgJX0KLSAgPGRpdiBpZD0ibGF0ZXN0LWJ1aWxkcyI+Ci0gIHslIGZvciBidWlsZCBpbiBtcnUgJX0KLSAgPGRpdiBkYXRhLWxhdGVzdC1idWlsZC1yZXN1bHQ9Int7IGJ1aWxkLmlkIH19IiBjbGFzcz0iYWxlcnQgYnVpbGQtcmVzdWx0IHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfWFsZXJ0LXN1Y2Nlc3N7JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfWFsZXJ0LWVycm9yeyVlbHNlJX1hbGVydC1pbmZveyVlbmRpZiV9eyUgaWYgbXJiX3R5cGUgIT0gJ3Byb2plY3QnICV9IHByb2plY3QtbmFtZXslIGVuZGlmICV9Ij4KLSAgICAgIHslIGlmIG1yYl90eXBlICE9ICdwcm9qZWN0JyAlfQotICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9bGFiZWwtc3VjY2Vzc3slZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9bGFiZWwtaW1wb3J0YW50eyVlbHNlJX1sYWJlbC1pbmZveyVlbmRpZiV9Ij4KLSAgICAgICAgICAgIDxhIGhyZWY9eyUgcHJvamVjdF91cmwgYnVpbGQucHJvamVjdCAlfT4KLSAgICAgICAgICAgICAgICB7e2J1aWxkLnByb2plY3QubmFtZX19Ci0gICAgICAgICAgICA8L2E+Ci0gICAgICAgIDwvc3Bhbj4KLSAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Ci0gICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjMgbGVhZCI+Ci0gICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCBvciBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQotICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iIGNsYXNzPSJ7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9c3VjY2Vzc3slZWxzZSV9ZXJyb3J7JWVuZGlmJX0iPgotICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICB7JSBpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDAgJX0KLSAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIKLSAgICAgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSAlfQotICAgICAgICAgICAgICAgICAgICB7e2J1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QuMC50YXJnZXR9fQotICAgICAgICAgICAgICAgICAgICB0aXRsZT0iUmVjaXBlczoKLSAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHRhcmdldCBpbiBidWlsZC5nZXRfc29ydGVkX3RhcmdldF9saXN0ICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXJnZXQudGFzayAlfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFyZ2V0LnRhcmdldH19Ont7dGFyZ2V0LnRhc2t9fQotICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFyZ2V0LnRhcmdldH19Ci0gICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0iCi0gICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgICAgID4KLSAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC50YXJnZXRfc2V0LmFsbC4wLnRhc2sgJX0KLSAgICAgICAgICAgICAgICAgICAge3tidWlsZC5nZXRfc29ydGVkX3RhcmdldF9saXN0LjAudGFyZ2V0fX06e3tidWlsZC50YXJnZXRfc2V0LmFsbC4wLnRhc2t9fQotICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KLSAgICAgICAgICAgICAgICAgICAge3tidWlsZC5nZXRfc29ydGVkX3RhcmdldF9saXN0LjAudGFyZ2V0fX0KLSAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSAlfQotICAgICAgICAgICAgICAgICAgICAoK3t7YnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSkKLSAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KLSAgICAgICAgICAgICAgICA8L2E+Ci0gICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIDwvZGl2PgotICAgIHslIGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEIG9yIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMiBsZWFkIj4KLSAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC5jb21wbGV0ZWRfb258Zm9ybWF0X2J1aWxkX2RhdGUgICV9Ci0gICAgICAgICAgICAgICAgICAgIHt7IGJ1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOidkL20veSBIOmknIH19Ci0gICAgICAgICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgICAgICAgICB7eyBidWlsZC5jb21wbGV0ZWRfb258ZGF0ZTonSDppJyB9fQotICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICB7JSBlbmRpZiAlfQotICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4yIGxlYWQiPgotICAgICAgeyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gcmVkIj48L2k+IDxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSNlcnJvcnMiIGNsYXNzPSJlcnJvciI+e3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPgotICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjIgbGVhZCI+Ci0gICAgICB7JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX0KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24geWVsbG93Ij48L2k+IDxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSN3YXJuaW5ncyIgY2xhc3M9Indhcm5pbmciPnt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fTwvYT4KLSAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlYWQgIj4KLSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxlYWQiPgotICAgICAgICAgICAgICAgICAgQnVpbGQgdGltZTogPGEgaHJlZj0ieyUgdXJsICdidWlsZHRpbWUnIGJ1aWxkLnBrICV9Ij57eyBidWlsZC50aW1lc3BlbnRfc2Vjb25kc3xzZWN0b2htcyB9fTwvYT4KLSAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICB7JSBpZiBidWlsZC5wcm9qZWN0LmlzX2RlZmF1bHQgJX0KLSAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJwdWxsLXJpZ2h0IGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscAotICAgICAgICAgICAgICAgICAgeyUgaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX0KLSAgICAgICAgICAgICAgICAgICAgICBnZXQtaGVscC1ncmVlbgotICAgICAgICAgICAgICAgICAgeyUgZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQotICAgICAgICAgICAgICAgICAgICAgIGdldC1oZWxwLXJlZAotICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgICAgICAgICAgIGdldC1oZWxwLWJsdWUKLSAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICAgICAgICAiIHRpdGxlPSJCdWlsZHMgaW4gdGhpcyBwcm9qZWN0IGNhbm5vdCBiZSBzdGFydGVkIGZyb20gVG9hc3RlcjogdGhleSBhcmUgc3RhcnRlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUiPgotICAgICAgICAgICAgICAgICAgPC9pPgotICAgICAgICAgICAgICB7JSBlbHNlICV9Ci0gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJydW4tYWdhaW4tYnRuIGJ0bgotICAgICAgICAgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bi1zdWNjZXNzCi0gICAgICAgICAgICAgICAgICAgICAgeyUgZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQotICAgICAgICAgICAgICAgICAgICAgICAgICBidG4tZGFuZ2VyCi0gICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgICAgICAgICAgICAgICBidG4taW5mbwotICAgICAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQotICAgICAgICAgICAgICAgICAgICAgIHB1bGwtcmlnaHQiCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YS1yZXF1ZXN0LXVybD0ieyUgdXJsICd4aHJfYnVpbGRyZXF1ZXN0JyBidWlsZC5wcm9qZWN0LnBrICV9IgotICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGFyZ2V0PSd7e2J1aWxkLnRhcmdldF9zZXQuYWxsfGdldF90YXNrc3xqc29ufX0nPgotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlYnVpbGQKLSAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgotICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgPC9kaXY+Ci0gICAgeyVlbmRpZiV9Ci0gICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLklOX1BST0dSRVNTICV9Ci0gICAgPGRpdiBjbGFzcz0ic3BhbjQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGlkPSJjYW5jZWxsaW5nLW1zZy17e2J1aWxkLmJ1aWxkcmVxdWVzdC5wa319Ij4KLSAgICAgIDxwIGNsYXNzPSJsZWFkIj5DYW5jZWxsaW5nIHRoZSBidWlsZCAuLi48L3A+Ci0gICAgPC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0ic3BhbjQgb2Zmc2V0MSBwcm9ncmVzcy1pbmZvIj4KLSAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIiBpZD0iYnVpbGQtcGMtZG9uZS10aXRsZS17e2J1aWxkLnBrfX0iIHN0eWxlPSJtYXJnaW4tdG9wOjVweDsiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tidWlsZC5jb21wbGV0ZXBlcn19JSBvZiB0YXNrcyBjb21wbGV0ZSI+Ci0gICAgICAgIDxkaXYgaWQ9ImJ1aWxkLXBjLWRvbmUtYmFyLXt7YnVpbGQucGt9fSIgc3R5bGU9IndpZHRoOiB7e2J1aWxkLmNvbXBsZXRlcGVyfX0lOyIgY2xhc3M9ImJhciI+PC9kaXY+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJsZWFkIHNwYW4zIHByb2dyZXNzLWluZm8iPjxzcGFuIGlkPSJidWlsZC1wYy1kb25lLXt7YnVpbGQucGt9fSI+e3tidWlsZC5jb21wbGV0ZXBlcn19PC9zcGFuPiUgb2YgdGFza3MgY29tcGxldGU8L2Rpdj4KLSAgICB7IyBObyBidWlsZCBjYW5jZWwgZm9yIGNvbW1hbmQgbGluZSBidWlsZHMgcHJvamVjdCAjfQotICAgIHslIGlmIGJ1aWxkLnByb2plY3QuaXNfZGVmYXVsdCAlfQotICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSBwdWxsLXJpZ2h0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJCdWlsZHMgaW4gdGhpcyBwcm9qZWN0IGNhbm5vdCBiZSBjYW5jZWxsZWQgZnJvbSBUb2FzdGVyOiB0aGV5IGNhbiBvbmx5IGJlIGNhbmNhbGxlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUiPjwvaT4KLSAgICB7JSBlbHNlICV9Ci0gICAgPGRpdiBjbGFzcz0ibGVhZCBwdWxsLXJpZ2h0IHByb2dyZXNzLWluZm8iPgotICAgICAgPGJ1dHRvbiBjbGFzcz0iY2FuY2VsLWJ1aWxkLWJ0biBidG4gYnRuLWluZm8gcHVsbC1yaWdodCIKLSAgICAgICAgICBkYXRhLWJ1aWxkcmVxdWVzdC1pZD17e2J1aWxkLmJ1aWxkcmVxdWVzdC5wa319Ci0gICAgICAgICAgZGF0YS1yZXF1ZXN0LXVybD0ieyUgdXJsICd4aHJfYnVpbGRyZXF1ZXN0JyBidWlsZC5wcm9qZWN0LnBrICV9IiA+Ci0gICAgICAgIENhbmNlbAotICAgICAgPC9idXR0b24+Ci0gICAgPC9kaXY+Ci0gICAgeyUgZW5kaWYgJX0KLQotICAgIHslZW5kaWYlfSB7IyBlbmQgaWYgaW4gcHJvZ3Jlc3MgI30KLQotICAgIHslIGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuQ0FOQ0VMTEVEICV9Ci0gICAgPGRpdiBjbGFzcz0ic3BhbjQiPgotICAgICAgPHAgY2xhc3M9ImxlYWQiPkJ1aWxkIGNhbmNlbGxlZDwvcD4KLSAgICA8L2Rpdj4KLSAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWluZm8gcHVsbC1yaWdodCBydW4tYWdhaW4tYnRuIgotICAgICAgICBkYXRhLXJlcXVlc3QtdXJsPSJ7JSB1cmwgJ3hocl9idWlsZHJlcXVlc3QnIGJ1aWxkLnByb2plY3QucGsgJX0iCi0gICAgICAgIGRhdGEtdGFyZ2V0PSd7e2J1aWxkLnRhcmdldF9zZXQuYWxsfGdldF90YXNrc3xqc29ufX0nPgotICAgICAgUmVidWlsZAotCi0gICAgPC9idXR0b24+Ci0gICAgeyUgZW5kaWYgJX0KLSAgPC9kaXY+Ci08L2Rpdj4KLQotICB7JSBlbmRmb3IgJX0KLSAgPC9kaXY+Ci0KLXslZW5kaWYlfQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdjdXN0b21pbWFnZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbmV3Y3VzdG9taW1hZ2UuaHRtbAppbmRleCA0NmFlZDkwLi45ODAxNzlhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdjdXN0b21pbWFnZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld2N1c3RvbWltYWdlLmh0bWwKQEAgLTUsMTAgKzUsMTcgQEAKIHslIGJsb2NrIHBhZ2Vjb250ZW50ICV9CiAKIHslIGluY2x1ZGUgIm5ld2N1c3RvbWltYWdlX21vZGFsLmh0bWwiICV9Ci17JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9CiAKLXslIHVybCB0YWJsZV9uYW1lIHByb2plY3QuaWQgYXMgeGhyX3RhYmxlX3VybCAlfQotPGgyPnt7dGl0bGV9fSAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LXt7dGFibGVfbmFtZX19Ij4wPC9zcGFuPik8L2gyPgoteyUgaW5jbHVkZSAidG9hc3RlcnRhYmxlLmh0bWwiICV9Cis8ZGl2IGNsYXNzPSJyb3ciPgorCisgIHslIGluY2x1ZGUgInByb2plY3R0b3BiYXIuaHRtbCIgJX0KKworICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgorICAgIHslIHVybCB0YWJsZV9uYW1lIHByb2plY3QuaWQgYXMgeGhyX3RhYmxlX3VybCAlfQorICAgIDxoMj57e3RpdGxlfX0gKDxzcGFuIGNsYXNzPSJ0YWJsZS1jb3VudC17e3RhYmxlX25hbWV9fSI+MDwvc3Bhbj4pPC9oMj4KKyAgICB7JSBpbmNsdWRlICJ0b2FzdGVydGFibGUuaHRtbCIgJX0KKyAgPC9kaXY+CisKKzwvZGl2PgogCiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbmV3Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld2N1c3RvbWltYWdlX21vZGFsLmh0bWwKaW5kZXggY2FlYjMwMi4uZDQ0OGQzYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbmV3Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdjdXN0b21pbWFnZV9tb2RhbC5odG1sCkBAIC0xMiwzNyArMTIsNDkgQEAKICAgfSk7CiA8L3NjcmlwdD4KIAotPGRpdiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIGluIiBpZD0ibmV3LWN1c3RvbS1pbWFnZS1tb2RhbCIgYXJpYS1oaWRkZW49ImZhbHNlIj4KLSAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KLSAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+w5c8L2J1dHRvbj4KLSAgICA8aDM+TmV3IGN1c3RvbSBpbWFnZTwvaDM+Ci0gIDwvZGl2PgorPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9Im5ldy1jdXN0b20taW1hZ2UtbW9kYWwiIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+w5c8L2J1dHRvbj4KKyAgICAgICAgPGgzPk5ldyBjdXN0b20gaW1hZ2U8L2gzPgorICAgICAgPC9kaXY+CiAKLSAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+Ci0gICAgPCEtLQotICAgIHRoaXMgY29udGFpbmVyIGlzIHZpc2libGUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGltYWdlIHJlY2lwZXMgd2hpY2ggY291bGQKLSAgICBiZSB1c2VkIGFzIGEgYmFzaXMgZm9yIHRoZSBuZXcgY3VzdG9tIGltYWdlOyByYWRpbyBidXR0b25zIGFyZSBhZGRlZCB0byBpdAotICAgIHZpYSBuZXdDdXN0b21JbWFnZU1vZGFsU2V0UmVjaXBlcygpIGFzIHJlcXVpcmVkCi0gICAgLS0+Ci0gICAgPGRpdiBkYXRhLXJvbGU9ImltYWdlLXNlbGVjdG9yIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gICAgICA8aDQ+V2hpY2ggaW1hZ2UgZG8geW91IHdhbnQgdG8gY3VzdG9taXNlPzwvaDQ+Ci0gICAgICA8ZGl2IGRhdGEtcm9sZT0iaW1hZ2Utc2VsZWN0b3ItcmFkaW9zIj48L2Rpdj4KLSAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIGVycm9yIiBpZD0iaW52YWxpZC1yZWNpcGUtaGVscCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9zcGFuPgotICAgICAgPGRpdiBjbGFzcz0iYWlyIj48L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICA8IS0tCisgICAgICAgICAgdGhpcyBjb250YWluZXIgaXMgdmlzaWJsZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgaW1hZ2UgcmVjaXBlcyB3aGljaCBjb3VsZAorICAgICAgICAgIGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgdGhlIG5ldyBjdXN0b20gaW1hZ2U7IHJhZGlvIGJ1dHRvbnMgYXJlIGFkZGVkIHRvIGl0CisgICAgICAgICAgdmlhIG5ld0N1c3RvbUltYWdlTW9kYWxTZXRSZWNpcGVzKCkgYXMgcmVxdWlyZWQKKyAgICAgICAgLS0+CisgICAgICAgIDxkaXYgZGF0YS1yb2xlPSJpbWFnZS1zZWxlY3RvciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgIDxoND5XaGljaCBpbWFnZSBkbyB5b3Ugd2FudCB0byBjdXN0b21pc2U/PC9oND4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayB0ZXh0LWRhbmdlciIgaWQ9ImludmFsaWQtcmVjaXBlLWhlbHAiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvc3Bhbj4KKyAgICAgICAgICA8ZGl2IGRhdGEtcm9sZT0iaW1hZ2Utc2VsZWN0b3ItcmFkaW9zIj48L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJhaXIiPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8aDQ+TmFtZSB5b3VyIGN1c3RvbSBpbWFnZTwvaDQ+CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTAiPgorICAgICAgICAgICAgPHAgY2xhc3M9ImhlbHAtYmxvY2siPkltYWdlIG5hbWVzIG11c3QgYmUgdW5pcXVlLiBUaGV5IHNob3VsZCBub3QgY29udGFpbiBzcGFjZXMgb3IgY2FwaXRhbCBsZXR0ZXJzLCBhbmQgdGhlIG9ubHkgYWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlciBpcyBkYXNoICgtKS4KKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCBpbnB1dC1sZyIgcGxhY2Vob2xkZXI9IlR5cGUgdGhlIGN1c3RvbSBpbWFnZSBuYW1lIiByZXF1aXJlZD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgdGV4dC1kYW5nZXIiIGlkPSJpbnZhbGlkLW5hbWUtaGVscCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9zcGFuPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICA8YnV0dG9uIGlkPSJjcmVhdGUtbmV3LWN1c3RvbS1pbWFnZS1idG4iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIiBkaXNhYmxlZD4KKyAgICAgICAgICA8c3BhbiBkYXRhLXJvbGU9InN1Ym1pdC1zdGF0ZSI+Q3JlYXRlIGN1c3RvbSBpbWFnZTwvc3Bhbj4KKyAgICAgICAgICA8c3BhbiBkYXRhLXJvbGU9ImxvYWRpbmctc3RhdGUiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXB1bHNlIGljb24tc3Bpbm5lciI+PC9pPiZuYnNwO0NyZWF0aW5nIGN1c3RvbSBpbWFnZS4uLgorICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgPC9idXR0b24+CisgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLQotICAgIDxoND5OYW1lIHlvdXIgY3VzdG9tIGltYWdlPC9oND4KLQotICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Ci0gICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBzcGFuOCI+SW1hZ2UgbmFtZXMgbXVzdCBiZSB1bmlxdWUuIFRoZXkgc2hvdWxkIG5vdCBjb250YWluIHNwYWNlcyBvciBjYXBpdGFsIGxldHRlcnMsIGFuZCB0aGUgb25seSBhbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVyIGlzIGRhc2ggKC0pLjxwPjwvcD4KLSAgICAgIDwvc3Bhbj48L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIGNvbnRyb2xzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaHVnZSIgcGxhY2Vob2xkZXI9IlR5cGUgdGhlIGN1c3RvbSBpbWFnZSBuYW1lIiByZXF1aXJlZD4KLSAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIGVycm9yIiBpZD0iaW52YWxpZC1uYW1lLWhlbHAiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvc3Bhbj4KLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci0KLSAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICA8YnV0dG9uIGlkPSJjcmVhdGUtbmV3LWN1c3RvbS1pbWFnZS1idG4iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIHRpdGxlPSIiIGRpc2FibGVkPkNyZWF0ZSBjdXN0b20gaW1hZ2U8L2J1dHRvbj4KICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld3Byb2plY3QuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld3Byb2plY3QuaHRtbAppbmRleCBlODNiMmJlLi5hY2I2MTRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdwcm9qZWN0Lmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbmV3cHJvamVjdC5odG1sCkBAIC01LDI0ICs1LDIxIEBACiB7JSBibG9jayB0aXRsZSAlfSBDcmVhdGUgYSBuZXcgcHJvamVjdCAtIFRvYXN0ZXIgeyUgZW5kYmxvY2sgJX0KIAogeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KLTxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Cis8ZGl2IGNsYXNzPSJyb3ciPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KICAgICAgICAgICA8aDE+Q3JlYXRlIGEgbmV3IHByb2plY3Q8L2gxPgogICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICB7JSBpZiBhbGVydCAlfQotICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3Igcm93LWZsdWlkIiByb2xlPSJhbGVydCI+e3thbGVydH19PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiIHJvbGU9ImFsZXJ0Ij57e2FsZXJ0fX08L2Rpdj4KICAgICB7JSBlbmRpZiAlfQotICAgICAgICA8L2Rpdj4KIAotICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KLSAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjYiPgogICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiPnslIGNzcmZfdG9rZW4gJX0KLQotICAgICAgICAgICAgPGZpZWxkc2V0PgotICAgICAgICAgICAgICA8bGFiZWw+UHJvamVjdCBuYW1lIDxzcGFuIGNsYXNzPSJtdXRlZCI+KHJlcXVpcmVkKTwvc3Bhbj48L2xhYmVsPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgcmVxdWlyZWQgaWQ9Im5ldy1wcm9qZWN0LW5hbWUiIG5hbWU9InByb2plY3RuYW1lIj4KLSAgICAgICAgICAgIDwvZmllbGRzZXQ+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCIgaWQ9InZhbGlkYXRlLXByb2plY3QtbmFtZSI+CisgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwiPlByb2plY3QgbmFtZSA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+KHJlcXVpcmVkKTwvc3Bhbj48L2xhYmVsPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHJlcXVpcmVkIGlkPSJuZXctcHJvamVjdC1uYW1lIiBuYW1lPSJwcm9qZWN0bmFtZSI+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHAgY2xhc3M9ImhlbHAtYmxvY2sgdGV4dC1kYW5nZXIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgaWQ9ImhpbnQtZXJyb3ItcHJvamVjdC1uYW1lIj5BIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUgZXhpc3RzLiBQcm9qZWN0IG5hbWVzIG11c3QgYmUgdW5pcXVlLjwvcD4KIDwhLS0KICAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSI+UHJvamVjdCB0eXBlPC9sYWJlbD4KQEAgLTM1LDEzICszMiwxMyBAQAogICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwdHlwZSIgdmFsdWU9ImJ1aWxkIiAvPgogCiAgICAgICAgIHslIGlmIHJlbGVhc2VzLmNvdW50ID4gMCAlfQotICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJyZWxlYXNlIj4KKwkJCQk8ZGl2IGNsYXNzPSJyZWxlYXNlIGZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgeyUgaWYgcmVsZWFzZXMuY291bnQgPiAxICV9Ci0gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIj4KKyAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIj4KICAgICAgICAgICAgICAgICBSZWxlYXNlCi0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBzeXN0ZW0geW91IHdhbnQgdG8gdXNlIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBzeXN0ZW0geW91IHdhbnQgdG8gdXNlIj48L3NwYW4+CiAgICAgICAgICAgICAgIDwvbGFiZWw+Ci0gICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0icHJvamVjdHZlcnNpb24iIGlkPSJwcm9qZWN0dmVyc2lvbiI+CisgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0icHJvamVjdHZlcnNpb24iIGlkPSJwcm9qZWN0dmVyc2lvbiIgY2xhc3M9ImZvcm0tY29udHJvbCI+CiAgICAgICAgICAgICAgICAgeyUgZm9yIHJlbGVhc2UgaW4gcmVsZWFzZXMgJX0KICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tyZWxlYXNlLmlkfX0iCiAgICAgICAgICAgICAgICAgICAgICAgICB7JWlmIGRlZmF1bHRicmFuY2ggPT0gcmVsZWFzZS5uYW1lICV9CkBAIC01MCwyNSArNDcsMjggQEAKICAgICAgICAgICAgICAgICAgICAgID57e3JlbGVhc2UuZGVzY3JpcHRpb259fTwvb3B0aW9uPgogICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCI+CiAgICAgICAgICAgICAgICAgeyUgZm9yIHJlbGVhc2UgaW4gcmVsZWFzZXMgJX0KLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIGhlbHB0ZXh0IiBpZD0iZGVzY3JpcHRpb24te3tyZWxlYXNlLmlkfX0iIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBzcGFuNSI+e3tyZWxlYXNlLmhlbHB0ZXh0fHNhZmV9fTwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwdGV4dCIgaWQ9ImRlc2NyaXB0aW9uLXt7cmVsZWFzZS5pZH19IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIj57e3JlbGVhc2UuaGVscHRleHR8c2FmZX19PC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgICAgICAgICB7JSBlbHNlICV9CiAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InByb2plY3R2ZXJzaW9uIiB2YWx1ZT0ie3tyZWxlYXNlcy4wLmlkfX0iLz4KICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgeyUgZW5kaWYgJX0KLQotICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1hY3Rpb25zIj4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgaWQ9ImNyZWF0ZS1wcm9qZWN0LWJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIHZhbHVlPSJDcmVhdGUgcHJvamVjdCIvPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wLWFpciI+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJjcmVhdGUtcHJvamVjdC1idXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxnIiB2YWx1ZT0iQ3JlYXRlIHByb2plY3QiLz4KICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlOyI+VG8gY3JlYXRlIGEgcHJvamVjdCwgeW91IG5lZWQgdG8gZW50ZXIgYSBwcm9qZWN0IG5hbWU8L3NwYW4+CiAgICAgICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8L2Zvcm0+Ci0gICAgICAgIDwvZGl2PgogICAgICAgICA8IS0tCi0gICAgICAgIDxkaXYgY2xhc3M9InNwYW41IHdlbGwiPgorICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSB3ZWxsIj4KICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+CiAgICAgICAgICAgICAgICAgIDxoND5Ub2FzdGVyIHByb2plY3QgdHlwZXM8L2g0PgogICAgICAgICAgICAgICAgICA8cD5XaXRoIGEgPHN0cm9uZz5idWlsZCBwcm9qZWN0PC9zdHJvbmc+IHlvdSBjb25maWd1cmUgYW5kIHJ1biB5b3VyIGJ1aWxkcyBmcm9tIFRvYXN0ZXIuPC9wPgpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgICAgICA8cD5JZiB5b3UgY3JlYXRlIGEgPHN0cm9uZz5idWlsZCBwcm9qZWN0PC9zdHJvbmc+LCB5b3Ugd2lsbCBuZWVkIHRvIHNlbGVjdCBhIDxzdHJvbmc+cmVsZWFzZTwvc3Ryb25nPiwKICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbSB5b3Ugd2FudCB0byB1c2UgdG8gcnVuIHlvdXIgYnVpbGRzLjwvcD4KICAgICAgICAgICAgICA8L2Rpdj4gLS0+Ci0gICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiAKICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CkBAIC0xMTMsNiArMTEzLDExIEBACiAgICAgICAgICAgICAgICAgJCgnI2Rlc2NyaXB0aW9uLScgKyBuZXdfcmVsZWFzZSkuZmFkZUluKCk7CiAgICAgICAgICAgICB9KTsKIAorICAgICAgICAgICAgbGlidG9hc3Rlci5tYWtlUHJvamVjdE5hbWVWYWxpZGF0aW9uKCQoIiNuZXctcHJvamVjdC1uYW1lIiksCisgICAgICAgICAgICAgICAgICQoIiNoaW50LWVycm9yLXByb2plY3QtbmFtZSIpLCAkKCIjdmFsaWRhdGUtcHJvamVjdC1uYW1lIiksCisgICAgICAgICAgICAgICAgICQoIi5idG4tcHJpbWFyeSIpKTsKKworCiAvKgkJCS8vIEhpZGUgdGhlIHByb2plY3QgcmVsZWFzZSB3aGVuIHlvdSBzZWxlY3QgYW4gYW5hbHlzaXMgcHJvamVjdAogCQkJZnVuY3Rpb24gcHJvamVjdFR5cGUoKSB7CiAJCQkJaWYgKCQoImlucHV0W3R5cGU9J3JhZGlvJ106Y2hlY2tlZCIpLnZhbCgpID09ICdidWlsZCcpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcy5odG1sCmluZGV4IGU2ZjIwYzMuLmE1ZDU4OTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbApAQCAtMiwxNiArMiwxNiBAQAogeyUgbG9hZCBwcm9qZWN0dGFncyAlfQogCiB7JSBibG9jayB0YWJjb250ZW50ICV9Ci0gICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdi10YWJzIj4KICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJyBidWlsZC5pZCBwYWNrYWdlLmlkICV9Ij4KLSAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNob3dzIHRoZSBmaWxlcyBwcm9kdWNlZCBieSB0aGlzIHBhY2thZ2UuIj48L2k+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTaG93cyB0aGUgZmlsZXMgcHJvZHVjZWQgYnkgdGhpcyBwYWNrYWdlLiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgZmlsZXMgKHt7cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnR9fSkKICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgogICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHBhY2thZ2UuaWQgJX0iPgotICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU2hvd3MgdGhlIHJ1bnRpbWUgcGFja2FnZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLiI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU2hvd3MgdGhlIHJ1bnRpbWUgcGFja2FnZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBSdW50aW1lIGRlcGVuZGVuY2llcyAoe3tkZXBlbmRlbmN5X2NvdW50fX0pCiAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgPC9saT4KQEAgLTI0LDE0ICsyNCwxNCBAQAogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgeyUgZWxzZSAlfQogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpcyA8c3Ryb25nPm5vdCBpbmNsdWRlZDwvc3Ryb25nPiBpbiBhbnkgaW1hZ2UuIFRoaXMgcGFnZSBzaG93cyB5b3UgdGhlIHByb2plY3RlZCBydW50aW1lIGRlcGVuZGVuY2llcyBpZiB5b3UgaW5jbHVkZSA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpbiBmdXR1cmUgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpcyA8c3Ryb25nPm5vdCBpbmNsdWRlZDwvc3Ryb25nPiBpbiBhbnkgaW1hZ2UuIFRoaXMgcGFnZSBzaG93cyB5b3UgdGhlIHByb2plY3RlZCBydW50aW1lIGRlcGVuZGVuY2llcyBpZiB5b3Ugd2VyZSB0byBpbmNsdWRlIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGluIGFuIGltYWdlLgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgogICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5WZXJzaW9uPC90aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpemVjb2wgc3BhbjIiPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2l6ZWNvbCBjb2wtbWQtMiI+U2l6ZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CkBAIC02Miw5ICs2Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5WZXJzaW9uPC90aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpemVjb2wgc3BhbjIiPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2l6ZWNvbCBjb2wtbWQtMiI+U2l6ZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRml2ZSByZWxhdGlvbnNoaXAgdHlwZXMgZXhpc3Q6IHJlY29tbWVuZHMsIHN1Z2dlc3RzLCBwcm92aWRlcywgcmVwbGFjZXMgYW5kIGNvbmZsaWN0cyI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRml2ZSByZWxhdGlvbnNoaXAgdHlwZXMgZXhpc3Q6IHJlY29tbWVuZHMsIHN1Z2dlc3RzLCBwcm92aWRlcywgcmVwbGFjZXMgYW5kIGNvbmZsaWN0cyI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGlvbnNoaXAgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+e3tvdGhlcl9kZXAuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLmRlcF90eXBlX2Rpc3BsYXl9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e290aGVyX2RlcC5kZXBfdHlwZV9oZWxwfX0iID48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgCXslIGVuZGZvciAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGV0YWlsLmh0bWwKaW5kZXggOWJlOGNjYi4uMGJkYmMyYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RldGFpbC5odG1sCkBAIC02LDEzICs2LDEzIEBACiAgICAgICAgIDwhLS0gR2VuZXJhdGVkIEZpbGVzIC0tPgogICAgICAgICB7JSBpZiBwYWNrYWdlLmJ1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlLmNvdW50ID09IDAgJX0KICAgICAgICAgICAgIHsjIE5vdCBpbmNsdWRlZCBjYXNlICN9Ci0gICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMiPgogICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4gPGEgaHJlZj0iIyI+Ci0gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGaWxlcyBhZGRlZCB0byBhIHJvb3QgZmlsZSBzeXN0ZW0gd2hlbiB5b3UgaW5jbHVkZSB7e3BhY2thZ2UubmFtZX19IGluIGFuIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGaWxlcyBhZGRlZCB0byBhIHJvb3QgZmlsZSBzeXN0ZW0gd2hlbiB5b3UgaW5jbHVkZSB7e3BhY2thZ2UubmFtZX19IGluIGFuIGltYWdlIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBmaWxlcyAoe3twYWNrYWdlRmlsZUNvdW50fX0pCiAgICAgICAgICAgICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPjxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHBhY2thZ2UuaWQgJX0iPgotICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUHJvamVjdGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHdoZW4geW91IGluY2x1ZGUge3twYWNrYWdlLm5hbWV9fSBpbiBhbiBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUHJvamVjdGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHdoZW4geW91IGluY2x1ZGUge3twYWNrYWdlLm5hbWV9fSBpbiBhbiBpbWFnZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBSdW50aW1lIGRlcGVuZGVuY2llcyAoe3tkZXBlbmRlbmN5X2NvdW50fX0pCiAgICAgICAgICAgICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICA8L3VsPgpAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgPCEtLSBQYWNrYWdlIGZpbGUgbGlzdCBvciBpZiBlbXB0eSwgYWxlcnQgcGFuZSAtLT4KICAgICAgICAgICAgIHslIGlmIHBhY2thZ2VGaWxlQ291bnQgPiAwICV9CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGlzIDxzdHJvbmc+bm90IGluY2x1ZGVkPC9zdHJvbmc+IGluIGFueSBpbWFnZS4gVGhpcyBwYWdlIHNob3dzIHlvdSB0aGUgZmlsZXMgYWRkZWQgdG8gYW4gaW1hZ2Ugcm9vdCBmaWxlIHN5c3RlbSBpZiB5b3UgaW5jbHVkZSA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpbiBmdXR1cmUgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpcyA8c3Ryb25nPm5vdCBpbmNsdWRlZDwvc3Ryb25nPiBpbiBhbnkgaW1hZ2UuIFRoaXMgcGFnZSBzaG93cyB5b3UgdGhlIGZpbGVzIHRoYXQgd291bGQgYmUgYWRkZWQgdG8gYW4gaW1hZ2Ugcm9vdCBmaWxlIHN5c3RlbSB3aXRoIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGluY2x1ZGVkIGluIGl0LgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgInRhYmxlc29ydC5odG1sIiAlfQogICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwKaW5kZXggOWZhMjhhOC4uNjZmOGU3ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9kZXRhaWxfYmFzZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbApAQCAtMTQsOCArMTQsOCBAQAogICAgIGZ1bmN0aW9uIGZtdEFsaWFzSGVscChwYWNrYWdlX25hbWUsIGFsaWFzLCBob3ZlcikgewogICAgICAgICB2YXIgciA9IG51bGw7CiAgICAgICAgIGlmIChhbGlhcyAhPSBudWxsICYmIGFsaWFzICE9ICcnKSB7Ci0gICAgICAgICAgICByID0gJzxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzICcgKyBhbGlhcyArICcmbmJzcCc7Ci0gICAgICAgICAgICByICs9ICc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwJzsKKyAgICAgICAgICAgIHIgPSAnPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPiBhcyAnICsgYWxpYXMgKyAnJm5ic3AnOworICAgICAgICAgICAgciArPSAnPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCc7CiAgICAgICAgICAgICBpZiAoaG92ZXIpIHsKICAgICAgICAgICAgICAgICByKz0gJyBob3Zlci1oZWxwJzsKICAgICAgICAgICAgIH0KQEAgLTIzLDkgKzIzLDkgQEAKICAgICAgICAgICAgICAgICByKz0gJyBoZWFkaW5nLWhlbHAnOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgciArPSAnIic7Ci0gICAgICAgICAgICB0aXRsZSA9IHBhY2thZ2VfbmFtZSArICcgd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kIHdhcyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYXMgJyArIGFsaWFzOworICAgICAgICAgICAgdGl0bGUgPSAnPGNvZGU+JyArIHBhY2thZ2VfbmFtZSArICc8L2NvZGU+IHdhcyByZW5hbWVkIGF0IHBhY2thZ2luZyB0aW1lIGFuZCB3YXMgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFzIDxjb2RlPicgKyBhbGlhcyArICc8L2NvZGU+JzsKICAgICAgICAgICAgIHIgKz0gJyB0aXRsZT0iJyArIHRpdGxlICsgJyI+JzsKLSAgICAgICAgICAgIHIgKz0gJzwvaT4nOworICAgICAgICAgICAgciArPSAnPC9zcGFuPic7CiAgICAgICAgICAgICByICs9ICc8L3NwYW4+JzsKICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKHIpOwogICAgICAgICB9CkBAIC00MywyOCArNDMsMzIgQEAKIHslIGVuZGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQogCiB7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KLSAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjExIj4KLSAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciBidWlsZC1kYXRhIj4KICAgICAgICAgICAgIHslIGJsb2NrIG1haW5oZWFkaW5nICV9CiAgICAgICAgICAgICA8aDE+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9oMT4KICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CiAgICAgICAgIDwvZGl2PiA8IS0tIHBhZ2UtaGVhZGVyIC0tPgotICAgIDwvZGl2PiA8IS0tIHJvdyBzcGFuMTEgcGFnZS1oZWFkZXIgLS0+CisgICAgICA8L2Rpdj4gPCEtLSBjb2wtbWQtMTIgcGFnZS1oZWFkZXIgLS0+CisgICAgPC9kaXY+IDwhLS0gZW5kIHJvdyAtLT4KIAogICAgIHslIGJsb2NrIHR3b2NvbHVtbnMgJX0KLSAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjcgdGFiYmFibGUiPgorICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgPGRpdiBjbGFzcz0iY29sLW1kLTggdGFiYmFibGUiPgogICAgICAgICB7JSBibG9jayB0YWJjb250ZW50ICV9CiAgICAgICAgIHslIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KLSAgICA8L2Rpdj4gPCEtLSByb3cgc3BhbjcgLS0+CisgICAgPC9kaXY+IDwhLS0gcm93IGNvbC1tZC04IC0tPgogCi0gICAgPGRpdiBjbGFzcz0icm93IHNwYW40IHdlbGwiPgorICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00Ij4KKyAgICAgIDxkaXYgY2xhc3M9IndlbGwiPgogICAgICAgICA8aDI+UGFja2FnZSBpbmZvcm1hdGlvbjwvaDI+CiAKICAgICAgICAgPCEtLSBpbmZvIHByZXNlbnRlZCBhcyBkZWZpbml0aW9uIGxpc3QgLS0+CiAgICAgICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICBTaXplCi0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBzaXplIG9mIHRoZSBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBzaXplIG9mIHRoZSBwYWNrYWdlIj48L3NwYW4+CiAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgIHslIGNvbW1lbnQgJX0KQEAgLTgxLDcgKzg1LDcgQEAKIAogICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgIExpY2Vuc2UKLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhpcyBwYWNrYWdlIGlzIGRpc3RyaWJ1dGVkIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoaXMgcGFja2FnZSBpcyBkaXN0cmlidXRlZCI+PC9zcGFuPgogICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgIDxkZD57e3BhY2thZ2UubGljZW5zZX19PC9kZD4KIApAQCAtOTcsNyArMTAxLDcgQEAKIAogICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgIFJlY2lwZQotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoaXMgcGFja2FnZSI+PC9zcGFuPgogICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZV9pZCA+IDAgJX0KQEAgLTEwOSwxMyArMTEzLDEzIEBACiAKICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICBSZWNpcGUgdmVyc2lvbgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoaXMgcGFja2FnZSI+PC9zcGFuPgogICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgIDxkZD57e3BhY2thZ2UucmVjaXBlLnZlcnNpb259fTwvZGQ+CiAKICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICBMYXllcgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGlzIHBhY2thZ2UiPjwvc3Bhbj4KICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAge3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fQpAQCAtMTI0LDI2ICsxMjgsNDIgQEAKICAgICAgICAgICAgICAgICAgICAgIyBSZW1vdmVkIHBlciB0ZWFtIG1lZXRpbmcgb2YgMS8yOS8yMDE0IHVudGlsCiAgICAgICAgICAgICAgICAgICAgICMgZGVjaXNpb24gb24gaW5kZXggc2VhcmNoIGFsZ29yaXRobQogICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmciICB0YXJnZXQ9Il9ibGFuayI+Ci0gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CiAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQogICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5icmFuY2ggJX0KICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICBMYXllciBicmFuY2gKLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBicmFuY2ggb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhpcyBwYWNrYWdlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgeyVpZiBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgJX0KKwkJPGRkPgorCQk8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+Tm90IGFwcGxpY2FibGU8L3NwYW4+CisJCTxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc291cmNlIGNvZGUgb2Yge3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSBpcyBub3QgaW4gYSBHaXQgcmVwb3NpdG9yeSwgc28gdGhlcmUgaXMgbm8gYnJhbmNoIGFzc29jaWF0ZWQgd2l0aCBpdCI+PC9zcGFuPgorCQk8L2RkPgorCQl7JSBlbmRpZiAlfQogICAgICAgICAgICAgPC9kdD4KKwkgICAgeyUgaWYgbm90IHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2RpciAlfQogICAgICAgICAgICAgPGRkPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5icmFuY2h9fTwvZGQ+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQorCSAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgIExheWVyIGNvbW1pdAotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgY29tbWl0IG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGlzIHBhY2thZ2UiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICB7JWlmIHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2RpciAlfQorCQk8ZGQ+CisJCTxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj5Ob3QgYXBwbGljYWJsZTwvc3Bhbj4KKwkJPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBzb3VyY2UgY29kZSBvZiB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IGlzIG5vdCBpbiBhIEdpdCByZXBvc2l0b3J5LCBzbyB0aGVyZSBpcyBubyBjb21taXQgYXNzb2NpYXRlZCB3aXRoIGl0Ij48L3NwYW4+CisJCTwvZGQ+CisJCXslIGVuZGlmICV9CiAgICAgICAgICAgICA8L2R0PgogCisJICAgIHslIGlmIG5vdCBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgJX0KICAgICAgICAgICAgIDxkZCBjbGFzcz0iaXNjb21taXQiPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR9fTwvZGQ+CisJICAgIHslIGVuZGlmICV9CiAKICAgICAgICAgPC9kbD4KLSAgICA8L2Rpdj4gPCEtLSByb3c0IHdlbGwgLS0+CisgICAgICA8ZGl2PiA8IS0tIGVuZCB3ZWxsIC0tPgorICAgIDwvZGl2PiA8IS0tIGVuZCA0LWNvbHVtbiBzZWN0aW9uIC0tPgogICAgIHslIGVuZGJsb2NrIHR3b2NvbHVtbnMgJX0KKyAgPC9kaXY+IDwhLS0gZW5kIHJvdyAtLT4KIHslIGVuZGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLmh0bWwKaW5kZXggOGEwNTA4ZS4uOTVlNTZkZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcy5odG1sCkBAIC0yMCwxMSArMjAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSdzaXplY29sIHNwYW4yJz5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0nc2l6ZWNvbCBjb2wtbWQtMic+U2l6ZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0JCQkJCXslIGZvciBydW50aW1lX2RlcCBpbiBydW50aW1lX2RlcHMgJX0KKyAgICAgICAgICAgICAgICAgIHslIGZvciBydW50aW1lX2RlcCBpbiBydW50aW1lX2RlcHMgJX0KICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7e3J1bnRpbWVfZGVwLnNpemV8Zm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzfX0gPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHJ1bnRpbWVfZGVwLnNpemUgIT0gLTEgJX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cnVudGltZV9kZXAudmVyc2lvbn19Jm5ic3A7PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J3NpemVjb2wnPnt7cnVudGltZV9kZXAuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19Jm5ic3A7PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0JCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICB7JSBlbHNlICV9CkBAIC01NywxNSArNTcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSdzaXplY29sIHNwYW4yJz5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0nc2l6ZWNvbCBjb2wtbWQtMic+U2l6ZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZpdmUgcmVsYXRpb25zaGlwIHR5cGVzIGV4aXN0OiByZWNvbW1lbmRzLCBzdWdnZXN0cywgcHJvdmlkZXMsIHJlcGxhY2VzIGFuZCBjb25mbGljdHMiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRml2ZSByZWxhdGlvbnNoaXAgdHlwZXMgZXhpc3Q6IHJlY29tbWVuZHMsIHN1Z2dlc3RzLCBwcm92aWRlcywgcmVwbGFjZXMgYW5kIGNvbmZsaWN0cyI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aW9uc2hpcCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgPHRib2R5PgotCQkJCQl7JSBmb3Igb3RoZXJfZGVwIGluIG90aGVyX2RlcHMgJX0KKyAgICAgICAgICAgICAgICAgIHslIGZvciBvdGhlcl9kZXAgaW4gb3RoZXJfZGVwcyAlfQogICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgb3RoZXJfZGVwLmluc3RhbGxlZCAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7e290aGVyX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBvdGhlcl9kZXAuc2l6ZSAhPSAtMSAlfQpAQCAtODYsMjEgKzg2LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nc2l6ZWNvbCc+e3tvdGhlcl9kZXAuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19Jm5ic3A7PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAuZGVwX3R5cGVfZGlzcGxheX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e290aGVyX2RlcC5kZXBfdHlwZV9oZWxwfX0iID48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e290aGVyX2RlcC5kZXBfdHlwZV9oZWxwfX0iID48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Im11dGVkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAubmFtZX19PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b3RoZXJfZGVwLnZlcnNpb259fTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5kZXBfdHlwZV9kaXNwbGF5fX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KLQkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgeyUgZW5kaWZub3RlcXVhbCAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbAppbmRleCA5NThhYTg4Li5lODlmYTIxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbApAQCAtMSwxMiArMSwxMiBAQAogCi0gICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyI+CiAgICAgeyUgaWYgYWN0aXZlX3RhYiA9PSAiZGV0YWlsIiAlfQogICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CiAgICAgeyUgZWxzZSAlfQogICAgICAgICA8bGkgY2xhc3M9IiI+CiAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGZpbGVzIHRoaXMgcGFja2FnZSBhZGRzIHRvIHRoZSBpbWFnZSByb290IGZpbGUgc3lzdGVtIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBmaWxlcyB0aGlzIHBhY2thZ2UgYWRkcyB0byB0aGUgaW1hZ2Ugcm9vdCBmaWxlIHN5c3RlbSI+PC9zcGFuPgogICAgICAgICAgICAgICAgIEZpbGVzIGluIHJvb3QgZmlsZSBzeXN0ZW0gKHt7cGFja2FnZUZpbGVDb3VudH19KQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgpAQCAtMTYsNyArMTYsNyBAQAogICAgICAgICA8bGkgY2xhc3M9IiI+CiAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGFja2FnZSBydW50aW1lIGRlcGVuZGVuY2llcyI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJQYWNrYWdlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgUnVudGltZSBkZXBlbmRlbmNpZXMgKHt7ZGVwZW5kZW5jeV9jb3VudH19KQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICA8bGkgY2xhc3M9IiI+CiAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZSBydW50aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSBwYWNrYWdlcyBpbiB0aGlzIGltYWdlIHRoYXQgZGVwZW5kIG9uIHRoaXMgcGFja2FnZSkuIFJldmVyc2UgZGVwZW5kZW5jaWVzIHJlZmxlY3Qgb25seSB0aGUgJ2RlcGVuZHMnIGRlcGVuZGVuY3kgdHlwZSI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZSBydW50aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSBwYWNrYWdlcyBpbiB0aGlzIGltYWdlIHRoYXQgZGVwZW5kIG9uIHRoaXMgcGFja2FnZSkuIFJldmVyc2UgZGVwZW5kZW5jaWVzIHJlZmxlY3Qgb25seSB0aGUgJ2RlcGVuZHMnIGRlcGVuZGVuY3kgdHlwZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgIFJldmVyc2UgcnVudGltZSBkZXBlbmRlbmNpZXMgKHt7cmV2ZXJzZV9jb3VudH19KQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGtnX2FkZF9ybV9idG4uaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BrZ19hZGRfcm1fYnRuLmh0bWwKaW5kZXggMGFlZmM1Ni4uMzAzZmFlYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGtnX2FkZF9ybV9idG4uaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wa2dfYWRkX3JtX2J0bi5odG1sCkBAIC0xLDEyICsxLDEyIEBACiB7IyBUT0RPIG1vdmUgdG8gc25pcHBldHMgZGlyICN9CiB7JSBpZiBkYXRhLmlzX2xvY2FsZV9wYWNrYWdlICV9CiA8cCBjbGFzcz0idGV4dC1jZW50ZXIiPgotICA8c3BhbiBjbGFzcz0ibXV0ZWQiPkxvY2FsZSBwYWNrYWdlPC9zcGFuPgotICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSIiCi0gICAgICBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUaGlzIHBhY2thZ2UgaXMgaW5jbHVkZWQgaW4geW91ciBpbWFnZQorICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+TG9jYWxlIHBhY2thZ2U8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIKKyAgICAgIHRpdGxlPSJUaGlzIHBhY2thZ2UgaXMgaW5jbHVkZWQgaW4geW91ciBpbWFnZQogICAgICAgYmFzZWQgb24gdGhlIGxvY2FsZSBzcGVjaWZpZWQgaW4gdGhlIElNQUdFX0xJTkdVQVMgdmFyaWFibGUiCiAgICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyI+Ci0gIDwvaT4KKyAgPC9zcGFuPgogPC9wPgogCiB7JSBlbHNlICV9CkBAIC0yMSwxMiArMjEsMTIgQEAKICAgICA8aSBjbGFzcz0iaWNvbi10cmFzaCBuby10b29sdGlwIj48L2k+CiAgICAgUmVtb3ZlIHBhY2thZ2UKICAgPC9idXR0b24+Ci0gIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgYWRkLXJtLXBhY2thZ2UtYnRuIiBkYXRhLWRpcmVjdGl2ZT0iYWRkIiBkYXRhLWlkPSJ7e2RhdGEucGt9fSIgZGF0YS1wYWNrYWdlLXVybD0ieyUgdXJsICd4aHJfY3VzdG9tcmVjaXBlX3BhY2thZ2VzJyBleHRyYS5yZWNpcGVfaWQgZGF0YS5wayAlfSIgZGF0YS1uYW1lPSJ7e2RhdGEubmFtZX19IiBzdHlsZT0iCisgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2sgYWRkLXJtLXBhY2thZ2UtYnRuIiBkYXRhLWRpcmVjdGl2ZT0iYWRkIiBkYXRhLWlkPSJ7e2RhdGEucGt9fSIgZGF0YS1wYWNrYWdlLXVybD0ieyUgdXJsICd4aHJfY3VzdG9tcmVjaXBlX3BhY2thZ2VzJyBleHRyYS5yZWNpcGVfaWQgZGF0YS5wayAlfSIgZGF0YS1uYW1lPSJ7e2RhdGEubmFtZX19IiBzdHlsZT0iCiAgICAgICB7JSBpZiBkYXRhLnBrIGluIGV4dHJhLmN1cnJlbnRfcGFja2FnZXMgJX0KICAgICAgIGRpc3BsYXk6bm9uZQogICAgICAgeyUgZW5kaWYgJX0KICAgICAgICI+Ci0gICAgPGkgY2xhc3M9Imljb24tcGx1cyI+PC9pPgorICAgIDxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMiPjwvaT4KICAgICBBZGQgcGFja2FnZQogICA8L2J1dHRvbj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdC5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdC5odG1sCmluZGV4IDEyNTY3NjguLjVhYmUyNDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3QuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Lmh0bWwKQEAgLTI0LDQ0ICsyNCw1NSBAQAogICB9KTsKIDwvc2NyaXB0PgogCi08IS0tIENvbW1lbnQgb3V0IHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgcHJvamVjdCByZWxlYXNlLCB1bnRpbCB3ZSBkZWNpZGUgd2hhdCB0byBkbyB0aGlzIGZ1bmN0aW9uYWxpdHkgLS0+Ci0KLTwhLS1kaXYgaWQ9ImNoYW5nZS1yZWxlYXNlLW1vZGFsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIGluIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJjaGFuZ2UtcmVsZWFzZS1tb2RhbCIgYXJpYS1oaWRkZW49ImZhbHNlIj4KLSAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KLSAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgotICAgIDxoMz5DaGFuZ2luZyBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdG8gPHNwYW4gY2xhc3M9InByb3Bvc2VkLXJlbGVhc2UtY2hhbmdlLW5hbWUiPjwvc3Bhbj48L2gzPgotICA8L2Rpdj4KLSAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+Ci0gICAgPHA+VGhlIGZvbGxvd2luZyBhZGRlZCBsYXllcnMgZG8gbm90IGV4aXN0IGZvciA8c3BhbiBjbGFzcz0icHJvcG9zZWQtcmVsZWFzZS1jaGFuZ2UtbmFtZSI+PC9zcGFuPjogPC9wPgotICAgIDx1bCBpZD0ibGF5ZXJzLXRvLXJlbW92ZS1saXN0Ij4KLSAgICA8L3VsPgotICAgIDxwPklmIHlvdSBjaGFuZ2UgdGhlIFlvY3RvIFByb2plY3QgcmVsZWFzZSB0byA8c3BhbiBjbGFzcz0icHJvcG9zZWQtcmVsZWFzZS1jaGFuZ2UtbmFtZSI+PC9zcGFuPiwgdGhlIGFib3ZlIGxheWVycyB3aWxsIGJlIGRlbGV0ZWQgZnJvbSB5b3VyIGFkZGVkIGxheWVycy48L3A+Ci0gIDwvZGl2PgotICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgIDxidXR0b24gaWQ9ImNoYW5nZS1yZWxlYXNlLWFuZC1ybS1sYXllcnMiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+Q2hhbmdlIHJlbGVhc2UgYW5kIGRlbGV0ZSBsYXllcnM8L2J1dHRvbj4KLSAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj5DYW5jZWw8L2J1dHRvbj4KLSAgPC9kaXY+Ci08L2Rpdi0tPgorPGRpdiBpZD0iZGVsZXRlLXByb2plY3QtbW9kYWwiIGNsYXNzPSJtb2RhbCBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgZGF0YS1iYWNrZHJvcD0ic3RhdGljIiBkYXRhLWtleWJvYXJkPSJmYWxzZSI+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICA8aDQ+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHByb2plY3Q/PC9oND4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgIDxwPkRlbGV0aW5nIHRoZSA8c3Ryb25nIGNsYXNzPSJwcm9qZWN0LW5hbWUiPjwvc3Ryb25nPiBwcm9qZWN0CisgICAgICAgIHdpbGw6PC9wPgorICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPkNhbmNlbCBpdHMgYnVpbGRzIGN1cnJlbnRseSBpbiBwcm9ncmVzczwvbGk+CisgICAgICAgICAgPGxpPlJlbW92ZSBpdHMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbjwvbGk+CisgICAgICAgICAgPGxpPlJlbW92ZSBpdHMgaW1wb3J0ZWQgbGF5ZXJzPC9saT4KKyAgICAgICAgICA8bGk+UmVtb3ZlIGl0cyBjdXN0b20gaW1hZ2VzPC9saT4KKyAgICAgICAgICA8bGk+UmVtb3ZlIGFsbCBpdHMgYnVpbGQgaW5mb3JtYXRpb248L2xpPgorICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImRlbGV0ZS1wcm9qZWN0LWNvbmZpcm1lZCI+CisgICAgICAgICAgPHNwYW4gZGF0YS1yb2xlPSJzdWJtaXQtc3RhdGUiPkRlbGV0ZSBwcm9qZWN0PC9zcGFuPgorICAgICAgICAgIDxzcGFuIGRhdGEtcm9sZT0ibG9hZGluZy1zdGF0ZSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmEtcHVsc2UiPgorICAgICAgICAgICAgPGkgY2xhc3M9ImZhLXB1bHNlIGljb24tc3Bpbm5lciI+PC9pPgorICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICZuYnNwO0RlbGV0aW5nIHByb2plY3QuLi4KKyAgICAgICAgICA8L3NwYW4+CisgICAgICAgIDwvYnV0dG9uPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2FuY2VsPC9idXR0b24+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj48IS0tIC8ubW9kYWwtY29udGVudCAtLT4KKyAgPC9kaXY+PCEtLSAvLm1vZGFsLWRpYWxvZyAtLT4KKzwvZGl2PgogCiAKLTxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9InByb2plY3QtcGFnZSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Ci0gIDxkaXYgY2xhc3M9InNwYW42Ij4KKzxkaXYgY2xhc3M9InJvdyIgaWQ9InByb2plY3QtcGFnZSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgIDxkaXYgY2xhc3M9ImNvbC1tZC02Ij4KICAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHdlbGwtdHJhbnNwYXJlbnQiIGlkPSJtYWNoaW5lLXNlY3Rpb24iPgogICAgICAgPGgzPk1hY2hpbmU8L2gzPgogCi0gICAgICA8cCBjbGFzcz0ibGVhZCI+PHNwYW4gaWQ9InByb2plY3QtbWFjaGluZS1uYW1lIj48L3NwYW4+IDxpIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IiIgaWQ9ImNoYW5nZS1tYWNoaW5lLXRvZ2dsZSIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+PC9wPgorICAgICAgPHAgY2xhc3M9ImxlYWQiPjxzcGFuIGlkPSJwcm9qZWN0LW1hY2hpbmUtbmFtZSI+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0IiBpZD0iY2hhbmdlLW1hY2hpbmUtdG9nZ2xlIj48L3NwYW4+PC9wPgogCi0gICAgICA8Zm9ybSBpZD0ic2VsZWN0LW1hY2hpbmUtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KLSAgICAgICAgICA8c3Ryb25nPk1hY2hpbmUgY2hhbmdlcyBoYXZlIGEgYmlnIGltcGFjdCBvbiBidWlsZCBvdXRjb21lLjwvc3Ryb25nPiBZb3UgY2Fubm90IHJlYWxseSBjb21wYXJlIHRoZSBidWlsZHMgZm9yIHRoZSBuZXcgbWFjaGluZSB3aXRoIHRoZSBwcmV2aW91cyBvbmVzLgorICAgICAgPGZvcm0gaWQ9InNlbGVjdC1tYWNoaW5lLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBjbGFzcz0iZm9ybS1pbmxpbmUiPgorICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+TWFjaGluZSBzdWdnZXN0aW9ucyBjb21lIGZyb20gdGhlIGxpc3Qgb2YgbGF5ZXJzIGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gSWYgeW91IGRvbid0IHNlZSB0aGUgbWFjaGluZSB5b3UgYXJlIGxvb2tpbmcgZm9yLCA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RtYWNoaW5lcycgcHJvamVjdC5pZCAlfSI+Y2hlY2sgdGhlIGZ1bGwgbGlzdCBvZiBtYWNoaW5lczwvYT48L3NwYW4+CisgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibWFjaGluZS1jaGFuZ2UtaW5wdXQiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0iIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgZGF0YS1taW5sZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIHR5cGU9InRleHQiPgogICAgICAgICA8L2Rpdj4KLQotICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgotICAgICAgICAgIDxpbnB1dCBpZD0ibWFjaGluZS1jaGFuZ2UtaW5wdXQiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0iIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgZGF0YS1taW5sZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIHR5cGU9InRleHQiPgotICAgICAgICAgICAgPGJ1dHRvbiBpZD0ibWFjaGluZS1jaGFuZ2UtYnRuIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4gPGEgaHJlZj0iIyIgaWQ9ImNhbmNlbC1tYWNoaW5lLWNoYW5nZSIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9hPgotICAgICAgICA8L2Rpdj4KLQotICAgICAgICA8cD48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RtYWNoaW5lcycgcHJvamVjdC5pZCAlfSIgY2xhc3M9ImxpbmsiPlZpZXcgY29tcGF0aWJsZSBtYWNoaW5lczwvYT48L3A+CisgICAgICAgIDxidXR0b24gaWQ9Im1hY2hpbmUtY2hhbmdlLWJ0biIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJjYW5jZWwtbWFjaGluZS1jaGFuZ2UiIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYT4KKyAgICAgICAgPHAgY2xhc3M9ImZvcm0tbGluayI+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bWFjaGluZXMnIHByb2plY3QuaWQgJX0iPlZpZXcgY29tcGF0aWJsZSBtYWNoaW5lczwvYT48L3A+CiAgICAgICA8L2Zvcm0+CiAgICAgPC9kaXY+CiAKQEAgLTY5LDExICs4MCwxMSBAQAogICAgICAgPGgzPk1vc3QgYnVpbHQgcmVjaXBlczwvaDM+CiAKICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGlkPSJuby1tb3N0LWJ1aWx0Ij4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlbid0IGJ1aWx0IGFueSByZWNpcGVzIHlldDwvc3Bhbj4KLSAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RpbWFnZXJlY2lwZXMnIHByb2plY3QuaWQgJX0iPkNob29zZSBhIHJlY2lwZSB0byBidWlsZDwvYT48L3A+CisgICAgICAgIDxoND5Zb3UgaGF2ZW4ndCBidWlsdCBhbnkgcmVjaXBlcyB5ZXQ8L2g0PgorICAgICAgICA8cCBjbGFzcz0iZm9ybS1saW5rIj48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RpbWFnZXJlY2lwZXMnIHByb2plY3QuaWQgJX0iPkNob29zZSBhIHJlY2lwZSB0byBidWlsZDwvYT48L3A+CiAgICAgICA8L2Rpdj4KIAotICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCBjb25maWd1cmF0aW9uLWxpc3QiIGlkPSJmcmVxLWJ1aWxkLWxpc3QiPgorICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIGxlYWQiIGlkPSJmcmVxLWJ1aWxkLWxpc3QiPgogICAgICAgPC91bD4KICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImZyZXEtYnVpbGQtYnRuIiBkaXNhYmxlZD0iZGlzYWJsZWQiPkJ1aWxkIHNlbGVjdGVkIHJlY2lwZXM8L2J1dHRvbj4KICAgICA8L2Rpdj4KQEAgLTk3LDQ0ICsxMDgsMzcgQEAKICAgICA8L2Rpdj4KICAgPC9kaXY+CiAKLSAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiI+CiAgICAgPGRpdiBjbGFzcz0id2VsbCB3ZWxsLXRyYW5zcGFyZW50IiBpZD0ibGF5ZXItY29udGFpbmVyIj4KLSAgICAgIDxoMz5MYXllcnMgPHNwYW4gY2xhc3M9Im11dGVkIGNvdW50ZXIiPig8c3BhbiBpZD0icHJvamVjdC1sYXllcnMtY291bnQiPjwvc3Bhbj4pPC9zcGFuPgotICAgICAgICA8aSBkYXRhLW9yaWdpbmFsLXRpdGxlPSJPcGVuRW1iZWRkZWQgb3JnYW5pc2VzIG1ldGFkYXRhIGludG8gbW9kdWxlcyBjYWxsZWQgJ2xheWVycycuIExheWVycyBhbGxvdyB5b3UgdG8gaXNvbGF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgY3VzdG9taXphdGlvbnMgZnJvbSBlYWNoIG90aGVyLiA8YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2Rldi1tYW51YWwvZGV2LW1hbnVhbC5odG1sI3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycycgdGFyZ2V0PSdfYmxhbmsnPk1vcmUgb24gbGF5ZXJzPC9hPiIgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSIiPjwvaT4KKyAgICAgIDxoMz5MYXllcnMgPHNwYW4gY2xhc3M9ImNvdW50ZXIiPig8c3BhbiBpZD0icHJvamVjdC1sYXllcnMtY291bnQiPjwvc3Bhbj4pPC9zcGFuPgorICAgICAgICA8c3BhbiB0aXRsZT0iT3BlbkVtYmVkZGVkIG9yZ2FuaXNlcyByZWNpcGVzIGFuZCBtYWNoaW5lcyBpbnRvIHRoZW1hdGljIGdyb3VwcyBjYWxsZWQgPHN0cm9uZz5sYXllcnM8L3N0cm9uZz4uIENsaWNrIG9uIGEgbGF5ZXIgbmFtZSB0byBzZWUgdGhlIHJlY2lwZXMgYW5kIG1hY2hpbmVzIGl0IGluY2x1ZGVzLiIgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCI+PC9zcGFuPgogICAgICAgPC9oMz4KIAotICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgbGVhZCIgaWQ9Im5vLWxheWVycy1pbi1wcm9qZWN0IiBzdHlsZT0iZGlzcGxheTpub25lIj4KLSAgICAgICAgWW91IG5lZWQgdG8gYWRkIHNvbWUgbGF5ZXJzLiBGb3IgdGhhdCB5b3UgY2FuOgorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyIgaWQ9Im5vLWxheWVycy1pbi1wcm9qZWN0IiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgPGg0PlRoaXMgcHJvamVjdCBoYXMgbm8gbGF5ZXJzPC9oND4KKyAgICAgICAgSW4gb3JkZXIgdG8gYnVpbGQgdGhpcyBwcm9qZWN0IHlvdSBuZWVkIHRvIGFkZCBzb21lIGxheWVycyBmaXJzdC4gRm9yIHRoYXQgeW91IGNhbjoKICAgICAgICAgPHVsPgotICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iPlZpZXcgYWxsIGxheWVycyBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9qZWN0PC9hPjwvbGk+CisgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5pZCAlfSI+Q2hvb3NlIGZyb20gdGhlIGxheWVycyBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9qZWN0PC9hPjwvbGk+CiAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnaW1wb3J0bGF5ZXInIHByb2plY3QuaWQgJX0iPkltcG9ydCBhIGxheWVyPC9hPjwvbGk+CiAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvZGV2LW1hbnVhbC9kZXYtbWFudWFsLmh0bWwjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBhYm91dCBsYXllcnMgaW4gdGhlIGRvY3VtZW50YXRpb248L2E+PC9saT4KKyAgICAgICAgICA8bGk+T3IgdHlwZSBhIGxheWVyIG5hbWUgYmVsb3c8L2xpPgogICAgICAgICA8L3VsPgotICAgICAgICA8cD5PciB0eXBlIGEgbGF5ZXIgbmFtZSBiZWxvdy48L3A+CiAgICAgICA8L2Rpdj4KIAotICAgICAgPGZvcm0gc3R5bGU9Im1hcmdpbi10b3A6MjBweCI+Ci0gICAgICAgIDwhLS1kaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAgZXJyb3IiLS0+Ci0KLSAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KLSAgICAgICAgICA8aW5wdXQgaWQ9ImxheWVyLWFkZC1pbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUeXBlIGEgbGF5ZXIgbmFtZSIgZGF0YS1taW5sZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIiBkYXRhLXNvdXJjZT0iIiB0eXBlPSJ0ZXh0Ij4KLSAgICAgICAgICAgIDxidXR0b24gaWQ9ImFkZC1sYXllci1idG4iIGNsYXNzPSJidG4iIGRpc2FibGVkPkFkZDwvYnV0dG9uPgorICAgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgPGlucHV0IGlkPSJsYXllci1hZGQtaW5wdXQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVHlwZSBhIGxheWVyIG5hbWUiIGRhdGEtbWlubGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgZGF0YS1zb3VyY2U9IiIgdHlwZT0idGV4dCI+CiAgICAgICAgIDwvZGl2PgotCi0gICAgICAgIDxkaXYgaWQ9ImltcG9ydC1hbGVydCIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgICBUb2FzdGVyIGRvZXMgbm90IGtub3cgYWJvdXQgdGhpcyBsYXllci4gUGxlYXNlIDxhIGhyZWY9IiMiPmltcG9ydCBpdDwvYT4KLSAgICAgICAgPC9kaXY+Ci0KLSAgICAgICAgPHA+CisgICAgICAgIDxidXR0b24gaWQ9ImFkZC1sYXllci1idG4iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGRpc2FibGVkPkFkZCBsYXllcjwvYnV0dG9uPgorICAgICAgICA8cCBjbGFzcz0iZm9ybS1saW5rIj4KICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iIGlkPSJ2aWV3LWNvbXBhdGlibGUtbGF5ZXJzIj5WaWV3IGNvbXBhdGlibGUgbGF5ZXJzPC9hPgotICAgICAgICAgIDxpIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlZpZXcgYWxsIHRoZSBsYXllcnMgeW91IGNhbiBidWlsZCB3aXRoIHRoZSByZWxlYXNlIHNlbGVjdGVkIGZvciB0aGlzIHByb2plY3QsIHdoaWNoIGlzIFlvY3RvIFByb2plY3QgbWFzdGVyIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iIj48L2k+Ci0gICAgICAgICAgfCA8YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij5JbXBvcnQgbGF5ZXI8L2E+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPnw8L3NwYW4+CisgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdpbXBvcnRsYXllcicgcHJvamVjdC5pZCAlfSI+SW1wb3J0IGxheWVyPC9hPgogICAgICAgICA8L3A+CiAgICAgICA8L2Zvcm0+CiAKLSAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0ibGF5ZXJzLWluLXByb2plY3QtbGlzdCI+CisgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgbGVhZCIgaWQ9ImxheWVycy1pbi1wcm9qZWN0LWxpc3QiPgogICAgICAgPC91bD4KLSAgICA8L2Rpdj4KICAgPC9kaXY+CiA8L2Rpdj4KIHslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0YnVpbGRzLXRvYXN0ZXJ0YWJsZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy10b2FzdGVydGFibGUuaHRtbAppbmRleCA2ZDdlMTBiLi5hNWZlZDJkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0YnVpbGRzLXRvYXN0ZXJ0YWJsZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RidWlsZHMtdG9hc3RlcnRhYmxlLmh0bWwKQEAgLTMsNTQgKzMsNjMgQEAKIHslIGxvYWQgc3RhdGljICV9CiAKIHslIGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9qcXVlcnktdWkubWluLmNzcycgJX0iIHR5cGU9J3RleHQvY3NzJz4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9qcXVlcnktdWkuc3RydWN0dXJlLm1pbi5jc3MnICV9IiB0eXBlPSd0ZXh0L2Nzcyc+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvanF1ZXJ5LXVpLnRoZW1lLm1pbi5jc3MnICV9IiB0eXBlPSd0ZXh0L2Nzcyc+Ci0gIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2pxdWVyeS11aS5taW4uanMnICV9Ij4KLSAgPC9zY3JpcHQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2pxdWVyeS11aS5taW4uY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9qcXVlcnktdWkuc3RydWN0dXJlLm1pbi5jc3MnICV9IiB0eXBlPSd0ZXh0L2Nzcyc+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnPgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvanF1ZXJ5LXVpLm1pbi5qcycgJX0iPgorPC9zY3JpcHQ+CiB7JSBlbmRibG9jayAlfQogCiB7JSBibG9jayB0aXRsZSAlfSB7e3RpdGxlfX0gLSB7e3Byb2plY3QubmFtZX19IC0gVG9hc3RlciB7JSBlbmRibG9jayAlfQogCiB7JSBibG9jayBwYWdlY29udGVudCAlfQorPGRpdiBjbGFzcz0icm93Ij4KIAogICB7JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9CiAKLSAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KICAgICB7JSB3aXRoIG1ydT1tcnUgbXJiX3R5cGU9bXJiX3R5cGUgJX0KLSAgICAgIHslIGluY2x1ZGUgJ21yYl9zZWN0aW9uLmh0bWwnICV9CisgICAgeyUgaW5jbHVkZSAnbXJiX3NlY3Rpb24uaHRtbCcgJX0KICAgICB7JSBlbmR3aXRoICV9CiAKLSAgICA8aDIgY2xhc3M9InBhZ2UtaGVhZGVyIHRvcC1haXIiIGRhdGEtcm9sZT0icGFnZS10aXRsZSI+PC9oMj4KKyAgICA8aDIgY2xhc3M9InRvcC1haXIiIGRhdGEtcm9sZT0icGFnZS10aXRsZSI+PC9oMj4KIAorICAgIHslIGlmIG5vdCBidWlsZF9pbl9wcm9ncmVzc19ub25lX2NvbXBsZXRlZCAlfQogICAgIHslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCBhcyB4aHJfdGFibGVfdXJsICV9CiAgICAgeyUgaW5jbHVkZSAndG9hc3RlcnRhYmxlLmh0bWwnICV9CisgICAgeyUgZW5kaWYgJX0KICAgPC9kaXY+CiAKLSAgPHNjcmlwdD4KLSAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7Ci0gICAgICAvLyB0aXRsZQotICAgICAgdmFyIHRhYmxlRWx0ID0gJCgiI3t7dGFibGVfbmFtZX19Iik7Ci0gICAgICB2YXIgdGl0bGVFbHQgPSAkKCJbZGF0YS1yb2xlPSdwYWdlLXRpdGxlJ10iKTsKKyA8c2NyaXB0PgorICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgIC8vIHRpdGxlCisgICB2YXIgdGFibGVFbHQgPSAkKCIje3t0YWJsZV9uYW1lfX0iKTsKKyAgIHZhciB0aXRsZUVsdCA9ICQoIltkYXRhLXJvbGU9J3BhZ2UtdGl0bGUnXSIpOwogCi0gICAgICB0YWJsZUVsdC5vbigidGFibGUtZG9uZSIsIGZ1bmN0aW9uIChlLCB0b3RhbCwgdGFibGVQYXJhbXMpIHsKLSAgICAgICAgdmFyIHRpdGxlID0gIkFsbCBwcm9qZWN0IGJ1aWxkcyI7CisgICB0YWJsZUVsdC5vbigidGFibGUtZG9uZSIsIGZ1bmN0aW9uIChlLCB0b3RhbCwgdGFibGVQYXJhbXMpIHsKKyAgICAgdmFyIHRpdGxlID0gIkFsbCBwcm9qZWN0IGJ1aWxkcyI7CiAKLSAgICAgICAgaWYgKHRhYmxlUGFyYW1zLnNlYXJjaCB8fCB0YWJsZVBhcmFtcy5maWx0ZXIpIHsKLSAgICAgICAgICBpZiAodG90YWwgPT09IDApIHsKLSAgICAgICAgICAgIHRpdGxlID0gIk5vIHByb2plY3QgYnVpbGRzIGZvdW5kIjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodG90YWwgPiAwKSB7Ci0gICAgICAgICAgICB0aXRsZSA9IHRvdGFsICsgIiBwcm9qZWN0IGJ1aWxkIiArICh0b3RhbCA+IDEgPyAncycgOiAnJykgKyAiIGZvdW5kIjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgaWYgKHRhYmxlUGFyYW1zLnNlYXJjaCB8fCB0YWJsZVBhcmFtcy5maWx0ZXIpIHsKKyAgICAgICBpZiAodG90YWwgPT09IDApIHsKKyAgICAgICAgIHRpdGxlID0gIk5vIHByb2plY3QgYnVpbGRzIGZvdW5kIjsKKyAgICAgICB9CisgICAgICAgZWxzZSBpZiAodG90YWwgPiAwKSB7CisgICAgICAgICB0aXRsZSA9IHRvdGFsICsgIiBwcm9qZWN0IGJ1aWxkIiArICh0b3RhbCA+IDEgPyAncycgOiAnJykgKyAiIGZvdW5kIjsKKyAgICAgICB9CisgICAgIH0KIAotICAgICAgICB0aXRsZUVsdC50ZXh0KHRpdGxlKTsKLSAgICAgIH0pOworICAgICBpZiAodG90YWwgPT09IDApIHsKKyAgICAgICB0aXRsZUVsdC5oaWRlKCk7CisgICAgIH0gZWxzZSB7CisgICAgICAgdGl0bGVFbHQuc2hvdygpOworICAgICAgIHRpdGxlRWx0LnRleHQodGl0bGUpOworICAgICB9CisgICB9KTsKIAotICAgICAgLy8gaGlnaGxpZ2h0IGJ1aWxkcyB0YWIKLSAgICAgICQoIiN0b3BiYXItYnVpbGRzLXRhYiIpLmFkZENsYXNzKCJhY3RpdmUiKQotICAgIH0pOwotICA8L3NjcmlwdD4KKyAgIC8vIGhpZ2hsaWdodCBidWlsZHMgdGFiCisgICAkKCIjdG9wYmFyLWJ1aWxkcy10YWIiKS5hZGRDbGFzcygiYWN0aXZlIikKKyB9KTsKKyA8L3NjcmlwdD4KIAorPC9kaXY+CiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy5odG1sCmluZGV4IDM0MDJmYzQuLjUwNjk3YTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RidWlsZHMuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0YnVpbGRzLmh0bWwKQEAgLTM5LDEwICszOSwxMCBAQAogCiAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQogICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgb3IgcmVxdWVzdC5HRVQuc2VhcmNoICV9Ci0gICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgogICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KLSAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tyZXF1ZXN0LkdFVC5zZWFyY2h9fSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7cmVxdWVzdC5HRVQuc2VhcmNofX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJpbnB1dC1hcHBlbmQtYWRkb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIGJ1aWxkczwvYnV0dG9uPgogICAgICAgICA8L2Zvcm0+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Y29uZi5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGNvbmYuaHRtbAppbmRleCAyN2E4OThiLi5mY2Y2ZGYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Y29uZi5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3Rjb25mLmh0bWwKQEAgLTYsOTQ1ICs2LDEwMzQgQEAKIHslIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQogCiA8aDI+Qml0YmFrZSB2YXJpYWJsZXM8L2gyPgorPGRpdj4KKyAgPGRsPgorICAgIHslIGlmIGRpc3Ryb19kZWZpbmVkICV9CisgICAgPGR0PgorICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPkRJU1RSTzwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZCI+PC9zcGFuPgorICAgIDwvZHQ+CisgICAgPGRkIGNsYXNzPSJ2YXJpYWJsZS1saXN0Ij4KKyAgICA8c3BhbiBjbGFzcz0ibGVhZCIgaWQ9ImRpc3RybyI+e3tkaXN0cm99fTwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0IiBpZD0iY2hhbmdlLWRpc3Ryby1pY29uIj48L3NwYW4+CisgICAgPGZvcm0gaWQ9ImNoYW5nZS1kaXN0cm8tZm9ybSIgY2xhc3M9ImZvcm0taW5saW5lIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICA8ZGl2IGlkPSJlZGl0LWRpc3Ryby1uYW1lLWRpdiIgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9Im5ldy1kaXN0cm8iIHZhbHVlPSJ7e2Rpc3Ryb319Ij4KKyAgICAgIDwvZGl2PgorICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWRpc3RybyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLWRpc3RybyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIiBpZD0iZGlzdHJvLWVycm9yLW1lc3NhZ2UiPjwvc3Bhbj4KKyAgICA8L2Zvcm0+CisgICAgPC9kZD4KKyAgICB7JSBlbmRpZiAlfQogCi0gICAgPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjE5cHg7Ij4KKyAgICB7JSBpZiBkbF9kaXJfZGVmaW5lZCAlfQorICAgIDxkdD4KKyAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5ETF9ESVI8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB1c2VkIHRvIHN0b3JlIGRvd25sb2FkcyByZXF1aXJlZCBmb3IgeW91ciBidWlsZHMuIEJ5IGRlZmF1bHQsIFRvYXN0ZXIgcHJvamVjdHMgc2hhcmUgdGhlIHNhbWUgZG93bmxvYWRzIGRpcmVjdG9yeSI+PC9zcGFuPgorICAgIDwvZHQ+CisgICAgPGRkIGNsYXNzPSJ2YXJpYWJsZS1saXN0Ij4KKyAgICA8c3BhbiBpZD0iZGxfZGlyIiBjbGFzcz0ibGVhZCB7JSBpZiBub3QgZGxfZGlyICV9IHRleHQtbXV0ZWQgeyUgZW5kaWYgJX0iPnslIGlmIGRsX2RpciAlfXt7ZGxfZGlyfX17JWVsc2UlfU5vdCBzZXR7JWVuZGlmJX08L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZWRpdCIgaWQ9ImNoYW5nZS1kbF9kaXItaWNvbiI+PC9zcGFuPgorICAgIDxmb3JtIGlkPSJjaGFuZ2UtZGxfZGlyLWZvcm0iIGNsYXNzPSJmb3JtLWlubGluZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCIgaWQ9InZhbGlkYXRlLWRsX2RpciI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibmV3LWRsX2RpciIgcGxhY2Vob2xkZXI9IlR5cGUgYW4gYWJzb2x1dGUgcGF0aCI+CisgICAgICA8L2Rpdj4KKyAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1kbF9kaXIiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1kbF9kaXIiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICA8cCBjbGFzcz0iaGVscC1ibG9jayIgaWQ9ImhpbnRFcnJvci1kbF9kaXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij5UaGUgZGlyZWN0b3J5IHBhdGggY2Fubm90IGluY2x1ZGUgc3BhY2VzIG9yIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJzOiAuIFwgPyAlICogOiB8ICIgIiAmbHQ7ICZndDs8L3A+CisgICAgICA8cCBjbGFzcz0iaGVscC1ibG9jayIgaWQ9ImhpbnRFcnJvci1pbml0aWFsQ2hhci1kbF9kaXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij5UaGUgZGlyZWN0b3J5IHBhdGggc2hvdWxkIGVpdGhlciBzdGFydCB3aXRoIGEgLywgZS5nLiAvaG9tZS90b2FzdGVyL2Rvd25sb2Fkczsgb3Igd2l0aCBhIHZhcmlhYmxlLCBlLmcuICR7VE9QRElSfS9kb3dubG9hZHMuPC9wPgorICAgIDwvZm9ybT4KKyAgICA8L2RkPgorICAgIHslIGVuZGlmICV9CiAKLSAgICAgICAgPGRsIGNsYXNzPSJkbC12ZXJ0aWNhbCI+Ci0gICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPkRJU1RSTzwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZC4gPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURJU1RSTycgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+Ci0gICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImRpc3RybyI+e3tkaXN0cm99fTwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtZGlzdHJvLWljb24iPjwvaT4KLSAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLWRpc3Ryby1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgaWQ9ImVkaXQtZGlzdHJvLW5hbWUtZGl2IiBjbGFzcz0iY29udHJvbC1ncm91cCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJuZXctZGlzdHJvIiB2YWx1ZT0ie3tkaXN0cm99fSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWRpc3RybyIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1kaXN0cm8iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBlcnJvciIgaWQ9ImRpc3Ryby1lcnJvci1tZXNzYWdlIj48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDwvZm9ybT4KLSAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgIHslIGlmIGZzdHlwZXNfZGVmaW5lZCAlfQorICAgIDxkdD4KKyAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5JTUFHRV9GU1RZUEVTPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGb3JtYXRzIG9mIHJvb3QgZmlsZSBzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gY3JlYXRlIj48L3NwYW4+CisgICAgPC9kdD4KKyAgICA8ZGQgY2xhc3M9InZhcmlhYmxlLWxpc3QiPgorICAgIDxzcGFuIGNsYXNzPSJsZWFkIiBpZD0iaW1hZ2VfZnN0eXBlcyI+e3tmc3R5cGVzfX08L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZWRpdCIgaWQ9ImNoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24iPjwvc3Bhbj4KKyAgICA8Zm9ybSBpZD0iY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgPGxhYmVsPlR5cGUgdGhlIGltYWdlIHR5cGVzIHlvdSB3YW50IHRvIGJ1aWxkOjwvbGFiZWw+CisgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGZvcm0taW5saW5lIiBpZD0idmFsaWRhdGUtaW1hZ2VfZnN0eXBlcyI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sICJpZD0ibmV3LWltYWdlZnNfdHlwZXMiPgorICAgICAgICA8YnV0dG9uIGlkPSJhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0Ij5TYXZlPC9idXR0b24+CisgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2UtaW1hZ2VfZnN0eXBlcyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgIDwvZGl2PgorICAgICAgPHAgY2xhc3M9ImhlbHAtYmxvY2sgdGV4dC1kYW5nZXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBpZD0iaGludEVycm9yLWltYWdlLWZzX3R5cGUiPkEgdmFsaWQgaW1hZ2UgdHlwZSBjYW5ub3QgaW5jbHVkZSB1bmRlcnNjb3JlczwvcD4KKyAgICAgIDxsYWJlbD5PciBjaG9vc2UgZnJvbSBrbm93biBpbWFnZSB0eXBlczo8L2xhYmVsPgorICAgICAgPGlucHV0IGlkPSJmaWx0ZXItaW1hZ2VfZnN0eXBlcyIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBpbWFnZSB0eXBlcyIgY2xhc3M9ImZvcm0tY29udHJvbCI+CisgICAgICA8ZGl2IGlkPSJhbGwtaW1hZ2VfZnN0eXBlcyIgY2xhc3M9InNjcm9sbGluZyI+PC9kaXY+CisgICAgPC9mb3JtPgorICAgIDwvZGQ+CisgICAgeyUgZW5kaWYgJX0KIAotICAgICAgICAgICAgeyUgaWYgZGxfZGlyX2RlZmluZWQgJX0KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5ETF9ESVI8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB1c2VkIHRvIHN0b3JlIGRvd25sb2FkcyByZXF1aXJlZCBmb3IgeW91ciBidWlsZHMuIEJ5IGRlZmF1bHQsIFRvYXN0ZXIgcHJvamVjdHMgc2hhcmUgdGhlIHNhbWUgZG93bmxvYWRzIGRpcmVjdG9yeS48YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8yLjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURMX0RJUicgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+Ci0gICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImRsX2RpciJ7JSBpZiBkbF9kaXIgJX17JWVsc2UlfSBjbGFzcz0ibXV0ZWQieyVlbmRpZiV9PnslIGlmIGRsX2RpciAlfXt7ZGxfZGlyfX17JWVsc2UlfU5vdCBzZXR7JWVuZGlmJX08L3NwYW4+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBpZD0iY2hhbmdlLWRsX2Rpci1pY29uIj48L2k+Ci0gICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1kbF9kaXItZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgc3BhbjQiPlRvIHNldCBETF9ESVIgdHlwZSB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZG93bmxvYWQgZm9sZGVyLjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCIgaWQ9InZhbGlkYXRlLWRsX2RpciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgaWQ9Im5ldy1kbF9kaXIiIHBsYWNlaG9sZGVyPSJUeXBlIGFic29sdXRlIHBhdGggb2YgdGhlIERMX0RJUiBmb2xkZXIiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWRsX2RpciIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLWRsX2RpciIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KLQkJCTwvYnI+PHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgZXJyb3IiIGlkPSJoaW50RXJyb3ItZGxfZGlyIj5BIHZhbGlkIGRpcmVjdG9yeSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMgb3IgYW55IG9mIHRoZXNlIGNoYXJhY3RlcnM6IC4gXCA/ICUgKiA6IHwgIiAiIDwgPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9mb3JtPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0KLSAgICAgICAgICAgIHslIGlmIGZzdHlwZXNfZGVmaW5lZCAlfQotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPklNQUdFX0ZTVFlQRVM8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZvcm1hdHMgb2Ygcm9vdCBmaWxlIHN5c3RlbSBpbWFnZXMgdGhhdCB5b3Ugd2FudCB0byBoYXZlIGNyZWF0ZWQgPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLUlNQUdFX0ZTVFlQRVMnIHRhcmdldD0nX2JsYW5rJz5SZWFkIG1vcmUgaW4gdGhlIG1hbnVhbDwvYT4iPjwvaT4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQgY2xhc3M9ImxlYWQiPgotICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJpbWFnZV9mc3R5cGVzIj57e2ZzdHlwZXN9fTwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uIj48L2k+Ci0gICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJmaWx0ZXItaW1hZ2VfZnN0eXBlcyIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBpbWFnZSB0eXBlcyIgY2xhc3M9InNwYW40Ij4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iYWxsLWltYWdlX2ZzdHlwZXMiIGNsYXNzPSJzY3JvbGxpbmciPgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2siIGlkPSJmc3R5cGVzLWVycm9yLW1lc3NhZ2UiPllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaW1hZ2UgdHlwZTwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biI+U2F2ZTwvYnV0dG9uPgotICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLWltYWdlX2ZzdHlwZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgPC9mb3JtPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0KLSAgICAgICAgICAgIHslIGlmIGltYWdlX2luc3RhbGxfYXBwZW5kX2RlZmluZWQgJX0KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5JTUFHRV9JTlNUQUxMX2FwcGVuZDwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlLiBJZiB5b3VyIGJ1aWxkIGNyZWF0ZXMgbW9yZSB0aGFuIG9uZSBpbWFnZSwgdGhlIHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkIGluIDxzdHJvbmc+YWxsIG9mIHRoZW08L3N0cm9uZz4gPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLUlNQUdFX0lOU1RBTEwnIHRhcmdldD0nX2JsYW5rJz5SZWFkIG1vcmUgaW4gdGhlIG1hbnVhbDwvYT4iPjwvaT4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQgY2xhc3M9ImxlYWQiPgotICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJpbWFnZV9pbnN0YWxsInslIGlmIGltYWdlX2luc3RhbGxfYXBwZW5kICV9eyVlbHNlJX0gY2xhc3M9Im11dGVkInslZW5kaWYlfT57JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfXt7aW1hZ2VfaW5zdGFsbF9hcHBlbmR9fXslZWxzZSV9Tm90IHNldHslZW5kaWYlfTwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uIj48L2k+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tdHJhc2giIGlkPSJkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uIiB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfXslZWxzZSV9c3R5bGU9ImRpc3BsYXk6bm9uZTsieyVlbmRpZiV9PjwvaT4KLSAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgc3BhbjQiPlRvIHNldCBJTUFHRV9JTlNUQUxMX2FwcGVuZCB0byBtb3JlIHRoYW4gb25lIHBhY2thZ2UsIHR5cGUgdGhlIHBhY2thZ2UgbmFtZXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ibmV3LWltYWdlX2luc3RhbGwiIHBsYWNlaG9sZGVyPSJUeXBlIG9uZSBvciBtb3JlIHBhY2thZ2UgbmFtZXMiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWltYWdlX2luc3RhbGwiIGNsYXNzPSJidG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1pbWFnZV9pbnN0YWxsIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYnV0dG9uPgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLQotICAgICAgICAgICAgeyUgaWYgcGFja2FnZV9jbGFzc2VzX2RlZmluZWQgJX0KLSAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5QQUNLQUdFX0NMQVNTRVM8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNwZWNpZmllcyB0aGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSB3aGVuIHBhY2thZ2luZyBkYXRhIDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1QQUNLQUdFX0NMQVNTRVMnIHRhcmdldD0nX2JsYW5rJz5SZWFkIG1vcmUgaW4gdGhlIG1hbnVhbDwvYT4iPjwvaT4KLSAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQgY2xhc3M9ImxlYWQiPgotICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJwYWNrYWdlX2NsYXNzZXMiPnt7cGFja2FnZV9jbGFzc2VzfX08L3NwYW4+Ci0gICAgICAgICAgICAgICAgPGkgaWQ9ImNoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbiIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+Ci0gICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICBSb290IGZpbGUgc3lzdGVtIHBhY2thZ2UgZm9ybWF0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHBhY2thZ2UgZm9ybWF0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJvb3QgZmlsZSBzeXN0ZW0uIE9wdGlvbnMgYXJlIDxjb2RlPmRldjwvY29kZT4sIDxjb2RlPmlwazwvY29kZT4gYW5kIDxjb2RlPnJwbTwvY29kZT4iPjwvaT4KLSAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0icGFja2FnZV9jbGFzc2VzLXNlbGVjdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnBhY2thZ2VfZGViPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnBhY2thZ2VfaXBrPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnBhY2thZ2VfcnBtPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIHBhY2thZ2UgZm9ybWF0cwotICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkV4dHJhIHBhY2thZ2UgZm9ybWF0cyB0byBidWlsZCI+PC9pPgotICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfZGViCi0gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzIiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9pcGsKLSAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZy10b3A6MTBweDsiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLXBhY2thZ2VfY2xhc3NlcyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIj5TYXZlPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLXBhY2thZ2VfY2xhc3NlcyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9mb3JtPgotICAgICAgICAgICAgPC9kZD4KLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0KLSAgICAgICAgICAgIHslIGlmIHNzdGF0ZV9kaXJfZGVmaW5lZCAlfQotICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPlNTVEFURV9ESVI8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB1c2VkIHRvIHN0b3JlIHNoYXJlZCBzdGF0ZSBjYWNoZSBmaWxlcy4gVGhlc2UgZmlsZXMgYXJlIHJldXNlZCBhY3Jvc3MgdGhlIGJ1aWxkcywgd2hpY2ggbWFrZXMgdGhlIGJ1aWxkcyBmYXN0ZXIuIEJ5IGRlZmF1bHQsIFRvYXN0ZXIgcHJvamVjdHMgc2hhcmUgdGhlIHNhbWUgY2FjaGUgZGlyZWN0b3J5LjxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzIuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItU1NUQVRFX0RJUicgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgotICAgICAgICAgICAgPC9kdD4KLSAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+Ci0gICAgICAgICAgICAgICAgPHNwYW4gaWQ9InNzdGF0ZV9kaXIieyUgaWYgc3N0YXRlX2RpciAlfXslZWxzZSV9IGNsYXNzPSJtdXRlZCJ7JWVuZGlmJX0+eyUgaWYgc3N0YXRlX2RpciAlfXt7c3N0YXRlX2Rpcn19eyVlbHNlJX1Ob3Qgc2V0eyVlbmRpZiV9PC9zcGFuPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCIgaWQ9ImNoYW5nZS1zc3RhdGVfZGlyLWljb24iPjwvaT4KLSAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLXNzdGF0ZV9kaXItZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgc3BhbjQiPlRvIHNldCBTU1RBVEVfRElSIHR5cGUgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGRvd25sb2FkIGZvbGRlci48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiIGlkPSJ2YWxpZGF0ZS1zc3RhdGVfZGlyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ibmV3LXNzdGF0ZV9kaXIiIHBsYWNlaG9sZGVyPSJUeXBlIGFic29sdXRlIHBhdGggb2YgdGhlIFNTVEFURV9ESVIgZm9sZGVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciI+QSB2YWxpZCBkaXJlY3RvcnkgbmFtZSByZXF1aXJlZDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1zc3RhdGVfZGlyIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2Utc3N0YXRlX2RpciIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KLQkJCTwvYnI+PHAgY2xhc3M9ImhlbHAtYmxvY2sgZXJyb3IiIGlkPSJoaW50RXJyb3Itc3N0YXRlX2RpciI+QSB2YWxpZCBkaXJlY3RvcnkgY2Fubm90IGluY2x1ZGUgc3BhY2VzIG9yIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJzOiAuIFwgPyAlICogOiB8ICIgIiA8ID48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDwvZm9ybT4KLSAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICA8L2RsPgotCi0gICAgICAgIDwhLS0gPHVsIGNsYXNzPSJ1bnN0eWxlZCBjb25maWd1cmF0aW9uLWxpc3QiIGlkPSJjb25maWd2YXItbGlzdCI+IC0tPgotICAgICAgICA8ZGwgaWQ9ImNvbmZpZ3Zhci1saXN0Ij4KLSAgICAgICAgICAgIDwhLS0gdGhlIGFkZGVkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBpbnNlcnRlZCBoZXJlIC0tPgotICAgICAgICA8L2RsPgotCi0gICAgICAgIDwhLS0gcGFzcyB0aGUgZnN0eXBlcyBsaXN0LCBibGFjayBsaXN0LCBhbmQgZXh0ZXJuYWxseSBtYW5hZ2VkIHZhcmlhYmxlcyBoZXJlIC0tPgotICAgICAgICB7JSBmb3IgZnN0eXBlIGluIHZhcnNfZnN0eXBlcyAlfQotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9ImpzLWNoZWNrYm94LWZzdHlwZXMtbGlzdCIgdmFsdWU9Int7ZnN0eXBlfX0iPgotICAgICAgICB7JSBlbmRmb3IgJX0KLSAgICAgICAgeyUgZm9yIGIgaW4gdmFyc19ibGFja2xpc3QgJX0KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJqcy1jb25maWctYmxhY2tsaXN0LW5hbWUiIHZhbHVlPSJ7e2J9fSI+Ci0gICAgICAgIHslIGVuZGZvciAlfQotICAgICAgICB7JSBmb3IgYiBpbiB2YXJzX21hbmFnZWQgJX0KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJqcy1jb25maWctbWFuYWdlZC1uYW1lIiB2YWx1ZT0ie3tifX0iPgotICAgICAgICB7JSBlbmRmb3IgJX0KLQotICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgICAgICAgIDxmb3JtIGlkPSJ2YXJpYWJsZS1mb3JtIj4KLSAgICAgICAgICAgIDxmaWVsZHNldCBzdHlsZT0icGFkZGluZy1sZWZ0OjBweDsiPgotICAgICAgICAgICAgICAgIDxsZWdlbmQ+QWRkIHZhcmlhYmxlPC9sZWdlbmQ+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjMiIHN0eWxlPSJtYXJnaW4tbGVmdDowcHg7Ij4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGlkPSJhZGQtY29uZmlndmFyLW5hbWUtZGl2IiBjbGFzcz0iY29udHJvbC1ncm91cCI+Ci0gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpIHRpdGxlPSIiIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLXRpdGxlPSJWYXJpYWJsZSBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5ub3QgaGF2ZSBzcGFjZXMsIGFuZCBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZGFzaGVzIj48L2k+Ci0gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlR5cGUgdmFyaWFibGUgbmFtZSIgaWQ9InZhcmlhYmxlIj4KLSAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBlcnJvciIgaWQ9Im5ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlIj48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlZhbHVlPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlR5cGUgdmFyaWFibGUgdmFsdWUiPjxwPgotICAgICAgICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYWRkLWNvbmZpZ3Zhci1idXR0b24iIGNsYXNzPSJidG4gc2F2ZSIgdHlwZT0iYnV0dG9uIiBkaXNhYmxlZD5BZGQgdmFyaWFibGU8L2J1dHRvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjUgaGVscC1ibG9jayI+Ci0gICAgICAgICAgICAgICAgICAgIDxoNT5Tb21lIHZhcmlhYmxlcyBhcmUgcmVzZXJ2ZWQgZnJvbSBUb2FzdGVyPC9oNT4KLSAgICAgICAgICAgICAgICAgICAgPHA+VG9hc3RlciBjYW5ub3Qgc2V0IGFueSB2YXJpYWJsZXMgdGhhdCBpbXBhY3QgMSkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1aWxkIHNlcnZlcnMsCi0gICAgICAgICAgICAgICAgICAgIG9yIDIpIHdoZXJlIGFydGlmYWN0cyBwcm9kdWNlZCBieSB0aGUgYnVpbGQgYXJlIHN0b3JlZC4gU3VjaCB2YXJpYWJsZXMgaW5jbHVkZTogPC9wPgotICAgICAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLUJCX0RJU0tNT05fRElSUyIgdGFyZ2V0PSJfYmxhbmsiPkJCX0RJU0tNT05fRElSUzwvYT48L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1CQl9OVU1CRVJfVEhSRUFEUyIgdGFyZ2V0PSJfYmxhbmsiPkJCX05VTUJFUl9USFJFQURTPC9hPjwvY29kZT4KLSAgICAgICAgICAgICAgICAgICAgPGNvZGU+Q1ZTX1BST1hZX0hPU1Q8L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlPkNWU19QUk9YWV9QT1JUPC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItUEFSQUxMRUxfTUFLRSIgdGFyZ2V0PSJfYmxhbmsiPlBBUkFMTEVMX01BS0U8L2E+PC9jb2RlPgotICAgICAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItU1NUQVRFX01JUlJPUlMiIHRhcmdldD0iX2JsYW5rIj5TU1RBVEVfTUlSUk9SUzwvYT48L2NvZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1UTVBESVIiIHRhcmdldD0iX2JsYW5rIj5UTVBESVI8L2E+PC9jb2RlPjwvcD4KLSAgICAgICAgICAgICAgICAgICAgPHA+UGx1cyB0aGUgZm9sbG93aW5nIHN0YW5kYXJkIHNoZWxsIGVudmlyb25tZW50IHZhcmlhYmxlczo8L3A+Ci0gICAgICAgICAgICAgICAgICAgIDxwPjxjb2RlPmh0dHBfcHJveHk8L2NvZGU+IDxjb2RlPmZ0cF9wcm94eTwvY29kZT4gPGNvZGU+aHR0cHNfcHJveHk8L2NvZGU+IDxjb2RlPmFsbF9wcm94eTwvY29kZT48L3A+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2ZpZWxkc2V0PgotICAgICAgICAgIDwvZm9ybT4KKyAgICB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkICV9CisgICAgPGR0PgorICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPklNQUdFX0lOU1RBTExfYXBwZW5kPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UuIElmIHlvdXIgYnVpbGQgY3JlYXRlcyBtb3JlIHRoYW4gb25lIGltYWdlLCB0aGUgcGFja2FnZXMgd2lsbCBiZSBpbnN0YWxsZWQgaW4gYWxsIG9mIHRoZW0iPjwvc3Bhbj4KKyAgICA8L2R0PgorICAgIDxkZCBjbGFzcz0idmFyaWFibGUtbGlzdCI+CisgICAgPHNwYW4gaWQ9ImltYWdlX2luc3RhbGwiIGNsYXNzPSJsZWFkIHslIGlmIG5vdCBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfSB0ZXh0LW11dGVkIHslZW5kaWYlfSI+eyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmQgJX17e2ltYWdlX2luc3RhbGxfYXBwZW5kfX17JWVsc2UlfU5vdCBzZXR7JWVuZGlmJX08L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZWRpdCIgaWQ9ImNoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24iPjwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10cmFzaCIgaWQ9ImRlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24iIHslIGlmIGltYWdlX2luc3RhbGxfYXBwZW5kICV9eyVlbHNlJX1zdHlsZT0iZGlzcGxheTpub25lOyJ7JWVuZGlmJX0+PC9zcGFuPgorICAgIDxmb3JtIGlkPSJjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIiBjbGFzcz0iZm9ybS1pbmxpbmUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00Ij4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+VG8gc2V0IElNQUdFX0lOU1RBTExfYXBwZW5kIHRvIG1vcmUgdGhhbiBvbmUgcGFja2FnZSwgdHlwZSB0aGUgcGFja2FnZSBuYW1lcyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS48L3NwYW4+CiAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJuZXctaW1hZ2VfaW5zdGFsbCIgcGxhY2Vob2xkZXI9IlR5cGUgb25lIG9yIG1vcmUgcGFja2FnZSBuYW1lcyI+CisgICAgICA8L2Rpdj4KKyAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICA8L2Zvcm0+CisgICAgPC9kZD4KKyAgICB7JSBlbmRpZiAlfQogCi0gICAgPC9kaXY+CisgICAgeyUgaWYgcGFja2FnZV9jbGFzc2VzX2RlZmluZWQgJX0KKyAgICA8ZHQ+CisgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+UEFDS0FHRV9DTEFTU0VTPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YSI+PC9zcGFuPgorICAgIDwvZHQ+CisgICAgPGRkIGNsYXNzPSJ2YXJpYWJsZS1saXN0Ij4KKyAgICA8c3BhbiBjbGFzcz0ibGVhZCIgaWQ9InBhY2thZ2VfY2xhc3NlcyI+e3twYWNrYWdlX2NsYXNzZXN9fTwvc3Bhbj4KKyAgICA8c3BhbiBpZD0iY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uIiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0Ij48L3NwYW4+CisgICAgPGZvcm0gaWQ9ImNoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCI+CisgICAgICAgICAgUm9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdAorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZSBmb3JtYXQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcm9vdCBmaWxlIHN5c3RlbS4gT3B0aW9ucyBhcmUgPGNvZGU+ZGViPC9jb2RlPiwgPGNvZGU+aXBrPC9jb2RlPiBhbmQgPGNvZGU+cnBtPC9jb2RlPiI+PC9pPgorICAgICAgICA8L2xhYmVsPgorICAgICAgICA8c2VsZWN0IGlkPSJwYWNrYWdlX2NsYXNzZXMtc2VsZWN0IiBjbGFzcz0iZm9ybS1jb250cm9sIj4KKyAgICAgICAgICA8b3B0aW9uPnBhY2thZ2VfZGViPC9vcHRpb24+CisgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX2lwazwvb3B0aW9uPgorICAgICAgICAgIDxvcHRpb24+cGFja2FnZV9ycG08L29wdGlvbj4KKyAgICAgICAgPC9zZWxlY3Q+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwiPgorICAgICAgICAgIEFkZGl0aW9uYWwgcGFja2FnZSBmb3JtYXRzCisgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkV4dHJhIHBhY2thZ2UgZm9ybWF0cyB0byBidWlsZCI+PC9zcGFuPgorICAgICAgICA8L2xhYmVsPgorICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveCI+CisgICAgICAgICAgPGxhYmVsIGlkPSJwYWNrYWdlX2NsYXNzXzEiPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xX2lucHV0Ij4gcGFja2FnZV9kZWIKKyAgICAgICAgICA8L2xhYmVsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3giPgorICAgICAgICAgIDxsYWJlbCBpZD0icGFja2FnZV9jbGFzc18yIj4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfaXBrCisgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCI+U2F2ZTwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgPC9mb3JtPgorICAgIDwvZGQ+CisgICAgeyUgZW5kaWYgJX0KIAotICAgIDxzY3JpcHQ+CisgICAgeyUgaWYgc3N0YXRlX2Rpcl9kZWZpbmVkICV9CisgICAgPGR0PgorICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPlNTVEFURV9ESVI8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB1c2VkIHRvIHN0b3JlIHNoYXJlZCBzdGF0ZSBjYWNoZSBmaWxlcy4gVGhlc2UgZmlsZXMgYXJlIHJldXNlZCBhY3Jvc3MgdGhlIGJ1aWxkcywgd2hpY2ggbWFrZXMgdGhlIGJ1aWxkcyBmYXN0ZXIuIEJ5IGRlZmF1bHQsIFRvYXN0ZXIgcHJvamVjdHMgc2hhcmUgdGhlIHNhbWUgY2FjaGUgZGlyZWN0b3J5Ij48L3NwYW4+CisgICAgPC9kdD4KKyAgICA8ZGQgY2xhc3M9InZhcmlhYmxlLWxpc3QiPgorICAgIDxzcGFuIGlkPSJzc3RhdGVfZGlyIiBjbGFzcz0ibGVhZCB7JSBpZiBub3Qgc3N0YXRlX2RpciAlfSB0ZXh0LW11dGVkIHslIGVuZGlmICV9Ij57JSBpZiBzc3RhdGVfZGlyICV9e3tzc3RhdGVfZGlyfX17JWVsc2UlfU5vdCBzZXR7JWVuZGlmJX08L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZWRpdCIgaWQ9ImNoYW5nZS1zc3RhdGVfZGlyLWljb24iPjwvc3Bhbj4KKyAgICA8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUiIGlkPSJjaGFuZ2Utc3N0YXRlX2Rpci1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIiBpZD0idmFsaWRhdGUtc3N0YXRlX2RpciI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibmV3LXNzdGF0ZV9kaXIiIHBsYWNlaG9sZGVyPSJUeXBlIGFuIGFic29sdXRlIHBhdGgiPgorICAgICAgPC9kaXY+CisgICAgICA8YnV0dG9uIGlkPSJhcHBseS1jaGFuZ2Utc3N0YXRlX2RpciIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLXNzdGF0ZV9kaXIiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICA8cCBjbGFzcz0iaGVscC1ibG9jayIgaWQ9ImhpbnRFcnJvci1zc3RhdGVfZGlyIiBzdHlsZT0iZGlzcGxheTpub25lOyI+VGhlIGRpcmVjdG9yeSBwYXRoIGNhbm5vdCBpbmNsdWRlIHNwYWNlcyBvciBhbnkgb2YgdGhlc2UgY2hhcmFjdGVyczogLiBcID8gJSAqIDogfCAiICIgJmx0OyAmZ3Q7PC9wPgorICAgICAgPHAgY2xhc3M9ImhlbHAtYmxvY2siIGlkPSJoaW50RXJyb3ItaW5pdGlhbENoYXItc3N0YXRlX2RpciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPlRoZSBkaXJlY3RvcnkgcGF0aCBzaG91bGQgZWl0aGVyIHN0YXJ0IHdpdGggYSAvLCBlLmcuIC9ob21lL3RvYXN0ZXIvc3N0YXRlLWNhY2hlOyBvciB3aXRoIGEgdmFyaWFibGUsIGUuZy4gJHtUT1BESVJ9L3NzdGF0ZS1jYWNoZS48L3A+CisgICAgPC9mb3JtPgorICAgIDwvZGQ+CisgICAgeyUgZW5kaWYgJX0KKyAgPC9kbD4KIAotICAgICAgICAvLyBnbG9iYWwgdmFyaWFibGVzCi0gICAgICAgIHZhciBkb19yZWxvYWQ9ZmFsc2U7CisgIDwhLS0gPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIGNvbmZpZ3VyYXRpb24tbGlzdCIgaWQ9ImNvbmZpZ3Zhci1saXN0Ij4gLS0+CisgIDxkbCBpZD0iY29uZmlndmFyLWxpc3QiPgorICAgIDwhLS0gdGhlIGFkZGVkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBpbnNlcnRlZCBoZXJlIC0tPgorICA8L2RsPgogCi0gICAgICAgIC8vIHZhbGlkYXRlIG5ldyB2YXJpYWJsZSBuYW1lCi0gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlX25ld192YXJpYWJsZSgpIHsKLSAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9ICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCk7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgICAgPSAkKCJpbnB1dCN2YWx1ZSIpLnZhbCgpOworICA8IS0tIHBhc3MgdGhlIGZzdHlwZXMgbGlzdCwgYmxhY2sgbGlzdCwgYW5kIGV4dGVybmFsbHkgbWFuYWdlZCB2YXJpYWJsZXMgaGVyZSAtLT4KKyAgeyUgZm9yIGZzdHlwZSBpbiB2YXJzX2ZzdHlwZXMgJX0KKyAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9ImpzLWNoZWNrYm94LWZzdHlwZXMtbGlzdCIgdmFsdWU9Int7ZnN0eXBlfX0iPgorICB7JSBlbmRmb3IgJX0KKyAgeyUgZm9yIGIgaW4gdmFyc19ibGFja2xpc3QgJX0KKyAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9ImpzLWNvbmZpZy1ibGFja2xpc3QtbmFtZSIgdmFsdWU9Int7Yn19Ij4KKyAgeyUgZW5kZm9yICV9CisgIHslIGZvciBiIGluIHZhcnNfbWFuYWdlZCAlfQorICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0ianMtY29uZmlnLW1hbmFnZWQtbmFtZSIgdmFsdWU9Int7Yn19Ij4KKyAgeyUgZW5kZm9yICV9CiAKLSAgICAgICAgICAgIC8vIHByZXN1bWVkIGlubm9jZW5jZQotICAgICAgICAgICAgJCgnI25ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7Ci0gICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0gIiI7CisgIDxmb3JtIGlkPSJ2YXJpYWJsZS1mb3JtIj4KKyAgICA8ZmllbGRzZXQ+CisgICAgICA8bGVnZW5kPkFkZCB2YXJpYWJsZTwvbGVnZW5kPgorICAgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTMiPgorICAgICAgICAgIDxkaXYgaWQ9ImFkZC1jb25maWd2YXItbmFtZS1kaXYiIGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCI+CisgICAgICAgICAgICAgIFZhcmlhYmxlCisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiCisgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJWYXJpYWJsZSBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUsCisgICAgICAgICAgICAgICAgICAgIGNhbm5vdCBoYXZlIHNwYWNlcywgYW5kIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGRhc2hlcyI+PC9zcGFuPgorICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iVHlwZSB0aGUgdmFyaWFibGUgbmFtZSIgaWQ9InZhcmlhYmxlIj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cCBjbGFzcz0iaGVscC1ibG9jayIgaWQ9Im5ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlIj48L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgICA8bGFiZWwgY2xhcz0iY29udHJvbC1sYWJlbCI+VmFsdWU8L2xhYmVsPgorICAgICAgICAgICAgPGlucHV0IGlkPSJ2YWx1ZSIgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9IlR5cGUgdGhlIHZhcmlhYmxlIHZhbHVlIj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8YnV0dG9uIGlkPSJhZGQtY29uZmlndmFyLWJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBzYXZlIiB0eXBlPSJidXR0b24iIGRpc2FibGVkPkFkZCB2YXJpYWJsZTwvYnV0dG9uPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUgaGVscC1ibG9jayI+CisgICAgICAgICAgPGg1PlNvbWUgdmFyaWFibGVzIGNhbm5vdCBiZSBzZXQgZnJvbSBUb2FzdGVyPC9oNT4KKyAgICAgICAgICA8cD5Ub2FzdGVyIGNhbm5vdCBzZXQgYW55IHZhcmlhYmxlcyB0aGF0IGltcGFjdCAxKSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYnVpbGQgc2VydmVycywKKyAgICAgICAgICBvciAyKSB3aGVyZSBhcnRpZmFjdHMgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkIGFyZSBzdG9yZWQuIFN1Y2ggdmFyaWFibGVzIGluY2x1ZGU6IDwvcD4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItQkJfRElTS01PTl9ESVJTIiB0YXJnZXQ9Il9ibGFuayI+QkJfRElTS01PTl9ESVJTPC9hPjwvY29kZT4KKyAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItQkJfTlVNQkVSX1RIUkVBRFMiIHRhcmdldD0iX2JsYW5rIj5CQl9OVU1CRVJfVEhSRUFEUzwvYT48L2NvZGU+CisgICAgICAgICAgPGNvZGU+Q1ZTX1BST1hZX0hPU1Q8L2NvZGU+CisgICAgICAgICAgPGNvZGU+Q1ZTX1BST1hZX1BPUlQ8L2NvZGU+CisgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLVBBUkFMTEVMX01BS0UiIHRhcmdldD0iX2JsYW5rIj5QQVJBTExFTF9NQUtFPC9hPjwvY29kZT4KKyAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItVE1QRElSIiB0YXJnZXQ9Il9ibGFuayI+VE1QRElSPC9hPjwvY29kZT48L3A+CisgICAgICAgICAgPHA+UGx1cyB0aGUgZm9sbG93aW5nIHN0YW5kYXJkIHNoZWxsIGVudmlyb25tZW50IHZhcmlhYmxlczo8L3A+CisgICAgICAgICAgPHA+PGNvZGU+aHR0cF9wcm94eTwvY29kZT4gPGNvZGU+ZnRwX3Byb3h5PC9jb2RlPiA8Y29kZT5odHRwc19wcm94eTwvY29kZT4gPGNvZGU+YWxsX3Byb3h5PC9jb2RlPjwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2ZpZWxkc2V0PgorICA8L2Zvcm0+Cis8L2Rpdj4KIAotICAgICAgICAgICAgdmFyIGV4aXN0aW5nX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctdmFyLW5hbWUnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBleGlzdGluZ19jb25maWd2YXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nX2NvbmZpZ3ZhcnNbaV0uaW5uZXJIVE1MLnRvVXBwZXJDYXNlKCkgPT0gdmFyaWFibGUudG9VcHBlckNhc2UoKSkgewotICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiVGhpcyB2YXJpYWJsZSBpcyBhbHJlYWR5IHNldCBpbiB0aGlzIHBhZ2UsIGVkaXQgaXRzIHZhbHVlIGluc3RlYWQiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKzwvZGl2PgogCi0gICAgICAgICAgICB2YXIgYmxhY2tsaXN0X2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctYmxhY2tsaXN0LW5hbWUnKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBibGFja2xpc3RfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChibGFja2xpc3RfY29uZmlndmFyc1tpXS52YWx1ZS50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIllvdSBjYW5ub3QgZWRpdCB0aGlzIHZhcmlhYmxlIGluIFRvYXN0ZXIgYmVjYXVzZSBpdCBpcyBzZXQgYnkgdGhlIGJ1aWxkIHNlcnZlcnMiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKzxzY3JpcHQ+CiAKLSAgICAgICAgICAgIHZhciBtYW5hZ2VkX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctbWFuYWdlZC1uYW1lJyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbWFuYWdlZF9jb25maWd2YXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hbmFnZWRfY29uZmlndmFyc1tpXS52YWx1ZS50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIllvdSBjYW5ub3Qgc2V0IHRoaXMgdmFyaWFibGUgaGVyZS4gUGxlYXNlIHNldCBpdCBpbiB0aGUgPGEgaHJlZj1cInslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfVwiPnByb2plY3QgbWFpbiBwYWdlPC9hPiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorLy8gZ2xvYmFsIHZhcmlhYmxlcwordmFyIGRvX3JlbG9hZD1mYWxzZTsKIAotICAgICAgICAgICAgdmFyIGJhZF9jaGFycyAgPSAvW15hLXpBLVowLTlcLV9dLy50ZXN0KHZhcmlhYmxlKTsKLSAgICAgICAgICAgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFyaWFibGUuaW5kZXhPZigiICIpKTsKLSAgICAgICAgICAgIHZhciBvbmx5X3NwYWNlcyA9ICgwIDwgdmFyaWFibGUubGVuZ3RoKSAmJiAoMCA9PSB2YXJpYWJsZS50cmltKCkubGVuZ3RoKTsKKy8vIHZhbGlkYXRlIG5ldyB2YXJpYWJsZSBuYW1lCitmdW5jdGlvbiB2YWxpZGF0ZV9uZXdfdmFyaWFibGUoKSB7CisgIHZhciB2YXJpYWJsZSA9ICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCk7CisgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I3ZhbHVlIikudmFsKCk7CiAKLSAgICAgICAgICAgIGlmIChvbmx5X3NwYWNlcykgewotICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJBIHZhbGlkIHZhcmlhYmxlIG5hbWUgY2Fubm90IGluY2x1ZGUgc3BhY2VzIjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYmFkX2NoYXJzICYmIGhhc19zcGFjZXMpIHsKLSAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCB2YXJpYWJsZSBuYW1lIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMsIGRhc2hlcywgYW5kIGNhbm5vdCBpbmNsdWRlIHNwYWNlcyI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJhZF9jaGFycykgewotICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJBIHZhbGlkIHZhcmlhYmxlIG5hbWUgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgYW5kIGRhc2hlcyI7Ci0gICAgICAgICAgICB9CisgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAkKCcjbmV3LXZhcmlhYmxlLWVycm9yLW1lc3NhZ2UnKS50ZXh0KCIiKTsKKyAgdmFyIGVycm9yX21zZyA9ICIiOwogCi0gICAgICAgICAgICBpZiAoIiIgIT0gZXJyb3JfbXNnKSB7Ci0gICAgICAgICAgICAgICAgJCgnI25ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlJykuaHRtbChlcnJvcl9tc2cpOwotICAgICAgICAgICAgICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICB2YXIgZXhpc3RpbmdfY29uZmlndmFycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWNvbmZpZy12YXItbmFtZScpOworICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZXhpc3RpbmdfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGlmIChleGlzdGluZ19jb25maWd2YXJzW2ldLmlubmVySFRNTC50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKKyAgICAgIGVycm9yX21zZyA9ICJUaGlzIHZhcmlhYmxlIGlzIGFscmVhZHkgc2V0IGluIHRoaXMgcGFnZS4gRWRpdCBpdHMgdmFsdWUgaW5zdGVhZCI7CisgICAgfQorICB9CiAKLSAgICAgICAgICAgICAgICAvLyBhZGQgb25lIChhbmQgb25seSBvbmUpIGVycm9yIGNsYXNzIGFwcGVuZAotICAgICAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZC1jb25maWd2YXItbmFtZS1kaXYiKTsKLSAgICAgICAgICAgICAgICBkLmNsYXNzTmFtZSA9IGQuY2xhc3NOYW1lLnJlcGxhY2UoIiBlcnJvciIsIiIpOwotICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUgKyAiIGVycm9yIjsKKyAgdmFyIGJsYWNrbGlzdF9jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLWJsYWNrbGlzdC1uYW1lJyk7CisgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBibGFja2xpc3RfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGlmIChibGFja2xpc3RfY29uZmlndmFyc1tpXS52YWx1ZS50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKKyAgICAgIGVycm9yX21zZyA9ICJZb3UgY2Fubm90IGVkaXQgdGhpcyB2YXJpYWJsZSBpbiBUb2FzdGVyIGJlY2F1c2UgaXQgaXMgc2V0IGJ5IHRoZSBidWlsZCBzZXJ2ZXJzIjsKKyAgICB9CisgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSB2YXJpYWJsZS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9CisgIHZhciBtYW5hZ2VkX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctbWFuYWdlZC1uYW1lJyk7CisgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBtYW5hZ2VkX2NvbmZpZ3ZhcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICBpZiAobWFuYWdlZF9jb25maWd2YXJzW2ldLnZhbHVlLnRvVXBwZXJDYXNlKCkgPT0gdmFyaWFibGUudG9VcHBlckNhc2UoKSkgeworICAgICAgZXJyb3JfbXNnID0gIllvdSBjYW5ub3Qgc2V0IHRoaXMgdmFyaWFibGUgaGVyZS4gUGxlYXNlIHNldCBpdCBpbiB0aGUgPGEgaHJlZj1cInslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfVwiPnByb2plY3QgbWFpbiBwYWdlPC9hPiI7CisgICAgfQorICB9CiAKLSAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZC1jb25maWd2YXItbmFtZS1kaXYiKTsKLSAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgIHZhciBiYWRfY2hhcnMgID0gL1teYS16QS1aMC05XC1fL10vLnRlc3QodmFyaWFibGUpOworICB2YXIgaGFzX3NwYWNlcyA9ICgwIDw9IHZhcmlhYmxlLmluZGV4T2YoIiAiKSk7CisgIHZhciBvbmx5X3NwYWNlcyA9ICgwIDwgdmFyaWFibGUubGVuZ3RoKSAmJiAoMCA9PSB2YXJpYWJsZS50cmltKCkubGVuZ3RoKTsKIAotICAgICAgICAgICAgLy8gbm93IHNldCB0aGUgIlNhdmUiIGVuYWJsZW1lbnQgaWYgJ3ZhbHVlJyBhbHNvIHBhc3NlcwotICAgICAgICAgICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgIH0KKyAgaWYgKG9ubHlfc3BhY2VzKSB7CisgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICB9IGVsc2UgaWYgKGJhZF9jaGFycyAmJiBoYXNfc3BhY2VzKSB7CisgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMgYW5kIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgPGNvZGU+IF8gLSAvPC9jb2RlPi4gVmFyaWFibGUgbmFtZXMgY2Fubm90IGluY2x1ZGUgc3BhY2VzIjsKKyAgfSBlbHNlIGlmIChiYWRfY2hhcnMpIHsKKyAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCB2YXJpYWJsZSBuYW1lIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycyBhbmQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyA8Y29kZT5fIC0gLzwvY29kZT4iOworICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICBpZiAoIiIgIT0gZXJyb3JfbXNnKSB7CisgICAgJCgnI25ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlJykuaHRtbChlcnJvcl9tc2cpOworICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworCisgICAgLy8gYWRkIG9uZSAoYW5kIG9ubHkgb25lKSBlcnJvciBjbGFzcyBhcHBlbmQKKyAgICAkKCIjYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIpLmFkZENsYXNzKCJoYXMtZXJyb3IiKTsKKyAgICAkKCIjbmV3LXZhcmlhYmxlLWVycm9yLW1lc3NhZ2UiKS5hZGRDbGFzcygidGV4dC1kYW5nZXIiKTsKKworICAgIHJldHVybiBmYWxzZTsKKyAgfSBlbHNlIGlmICgwID09IHZhcmlhYmxlLmxlbmd0aCkgeworICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgICQoIiNhZGQtY29uZmlndmFyLW5hbWUtZGl2IikucmVtb3ZlQ2xhc3MoImhhcy1lcnJvciIpOworCisgIC8vIG5vdyBzZXQgdGhlICJTYXZlIiBlbmFibGVtZW50IGlmICd2YWx1ZScgYWxzbyBwYXNzZXMKKyAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7CisgICAgJCgiLnNhdmUiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICB9IGVsc2UgeworICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHZhbGlkYXRlIGRpc3RybyBuYW1lCitmdW5jdGlvbiB2YWxpZGF0ZV9kaXN0cm9fbmFtZSgpIHsKKyAgdmFyIHZhbHVlICAgID0gJCgiaW5wdXQjbmV3LWRpc3RybyIpLnZhbCgpOworCisgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAkKCcjZGlzdHJvLWVycm9yLW1lc3NhZ2UnKS50ZXh0KCIiKTsKKyAgdmFyIGVycm9yX21zZyA9ICIiOworCisgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFsdWUuaW5kZXhPZigiICIpKTsKKworICBpZiAoaGFzX3NwYWNlcykgeworICAgIGVycm9yX21zZyA9ICJBIHZhbGlkIGRpc3RybyBuYW1lIGNhbm5vdCBpbmNsdWRlIHNwYWNlcyI7CisgIH0gZWxzZSBpZiAoMCA9PSB2YWx1ZS5sZW5ndGgpIHsKKyAgICBlcnJvcl9tc2cgPSAiICI7CisgIH0KKworICBpZiAoIiIgIT0gZXJyb3JfbXNnKSB7CisgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dChlcnJvcl9tc2cpOworICAgICQoIiNhcHBseS1jaGFuZ2UtZGlzdHJvIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworCisgICAgLy8gYWRkIG9uZSAoYW5kIG9ubHkgb25lKSBlcnJvciBjbGFzcyBhcHBlbmQKKyAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuYWRkQ2xhc3MoImhhcy1lcnJvciIpOworCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgJCgiI2NoYW5nZS1kaXN0cm8tZm9ybSIpLnJlbW92ZUNsYXNzKCJoYXMtZXJyb3IiKTsKKyAgJCgiI2FwcGx5LWNoYW5nZS1kaXN0cm8iKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVGVzdCB0byBpbnN1cmUgYXQgbGVhc3Qgb25lIEZTIFR5cGUgaXMgY2hlY2tlZAorZnVuY3Rpb24gZW5hYmxlRnNUeXBlc1NhdmUoKSB7CisgIHZhciBhbnlfY2hlY2tlZCA9IDA7CisgICQoIi5mcy1jaGVja2JveC1mc3R5cGVzOmNoZWNrZWQiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgYW55X2NoZWNrZWQgPSAxOworICB9KTsKKyAgaWYgKCAwID09IGFueV9jaGVja2VkICkgeworICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcyIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAkKCcuc2Nyb2xsaW5nJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICQoJyNmc3R5cGVzLWVycm9yLW1lc3NhZ2UnKS5zaG93KCk7CisgIH0KKyAgZWxzZSB7CisgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAkKCcuc2Nyb2xsaW5nJykucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICQoJyNmc3R5cGVzLWVycm9yLW1lc3NhZ2UnKS5oaWRlKCk7CisgIH0KK30KKworLy8gUHJlc2V0IG9yIHJlc2V0IHRoZSBQYWNrYWdlIENsYXNzIGNoZWNrYm94IGxhYmVscworZnVuY3Rpb24gdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpIHsKKyAgJCgnI3BhY2thZ2VfY2xhc3NfMSwgI3BhY2thZ2VfY2xhc3NfMicpLmhpZGUoKTsKKyAgaWYgKCQoJ3NlbGVjdCcpLnZhbCgpID09ICdwYWNrYWdlX2RlYicpIHsKKyAgICAkKCcjcGFja2FnZV9jbGFzc18xJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xX2lucHV0Ij4gcGFja2FnZV9pcGsnKTsKKyAgICAkKCcjcGFja2FnZV9jbGFzc18yJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9ycG0nKTsKKyAgfQorICBpZiAoJCgnc2VsZWN0JykudmFsKCkgPT0gJ3BhY2thZ2VfaXBrJykgeworICAgICQoJyNwYWNrYWdlX2NsYXNzXzEnKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYicpOworICAgICQoJyNwYWNrYWdlX2NsYXNzXzInKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiPiBwYWNrYWdlX3JwbScpOworICB9CisgIGlmICgkKCdzZWxlY3QnKS52YWwoKSA9PSAncGFja2FnZV9ycG0nKSB7CisgICAgJCgnI3BhY2thZ2VfY2xhc3NfMScpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfZGViJyk7CisgICAgJCgnI3BhY2thZ2VfY2xhc3NfMicpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfaXBrJyk7CisgIH0KKyAgJCgnI3BhY2thZ2VfY2xhc3NfMSwgI3BhY2thZ2VfY2xhc3NfMicpLmZhZGVJbigxNTAwKTsKK30KKworLy8gUmUtYXNzZXJ0IGhhbmRsZXJzIHdoZW4gdGhlIHBhZ2UgaXMgc2VydmVkIGFuZC9vciByZWZyZXNoZWQgdmlhIEFqYXgKK2Z1bmN0aW9uIHNldEV2ZW50SGFuZGxlcnNGb3JEeW5hbWljRWxlbWVudHMoKSB7CisKKyAgLy8gY2hhbmdlIHZhcmlhYmxlIHZhbHVlCisgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgIHZhciBwayA9ICQodGhpcykuYXR0cigieC1kYXRhIik7CisgICAgdmFyIGN1cnJlbnRfdmFsID0gJCgiI2NvbmZpZ192YXJfdmFsdWVfIitwaykudGV4dCgpOworICAgICQoIiNjb25maWdfdmFyX3ZhbHVlXyIrcGspLmhpZGUoKTsKKyAgICAkKCIjY29uZmlnX3Zhcl90cmFzaF8iK3BrKS5oaWRlKCk7CisgICAgJCgiLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXJbeC1kYXRhPSIrcGsrIl0iKS5oaWRlKCk7CisgICAgJCgiI2NoYW5nZS1jb25maWdfdmFyLWZvcm1fIitwaykuc2xpZGVEb3duKCk7CisgICAgJCgiI25ldy1jb25maWdfdmFyXyIrcGspLnZhbChjdXJyZW50X3ZhbCk7CisgICAgaWYgKCAkKCIjbmV3LWNvbmZpZ192YXJfIitwaykudmFsKCkubGVuZ3RoICkgeworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1jb25maWdfdmFyXyIrcGspLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1jb25maWdfdmFyXyIrcGspLmF0dHIoImRpc2FibGVkIik7CisgICAgfQorICB9KTsKKworICAkKCcuanMtY2FuY2VsLWNoYW5nZS1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgIHZhciBwayA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWU7CisgICAgJCgiI2NoYW5nZS1jb25maWdfdmFyLWZvcm1fIitwaykuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICQoIiNjb25maWdfdmFyX3RyYXNoXyIrcGspLnNob3coKTsKKyAgICAgICQoJyNjb25maWdfdmFyX3ZhbHVlXycrcGspLnNob3coKTsKKyAgICAgICQoIi5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyW3gtZGF0YT0iK3BrKyJdIikuc2hvdygpOworICAgIH0pOworICB9KTsKKworICAkKCIuanMtbmV3LWNvbmZpZ192YXIiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpeworICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA9PSAwKSB7CisgICAgICAkKHRoaXMpLnBhcmVudCgiZGl2IikubmV4dCgiLmJ0bi1kZWZhdWx0IikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICQodGhpcykucGFyZW50KCJkaXYiKS5uZXh0KCIuYnRuLWRlZmF1bHQiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0KKyAgfSk7CisKKyAgJCgnLmpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgIHZhciB4ZGF0YSAgICA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWUuc3BsaXQoIjoiKTsKKyAgICB2YXIgcGsgICAgICAgPSB4ZGF0YVswXTsKKyAgICB2YXIgdmFyaWFibGUgPSB4ZGF0YVsxXTsKKyAgICB2YXIgdmFsICAgICAgPSAkKCcjbmV3LWNvbmZpZ192YXJfJytwaykudmFsKCk7CisgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiB2YXJpYWJsZSsnOicrdmFsfSk7CisgICAgJCgiI2NoYW5nZS1jb25maWdfdmFyLWZvcm1fIitwaykuc2xpZGVVcCgpOworICAgICQoIiNjb25maWdfdmFyX3RyYXNoXyIrcGspLmZhZGVJbigpOworICAgICQoJyNjb25maWdfdmFyX3ZhbHVlXycrcGspLmZhZGVJbigpOworICAgICQoIi5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyW3gtZGF0YT0iK3BrKyJdIikuZmFkZUluKCk7CisgIH0pOworCisgIC8vIGRlbGV0ZSB2YXJpYWJsZQorICAkKCIuanMtaWNvbi10cmFzaC1jb25maWdfdmFyIikuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgIHZhciBwayA9ICQodGhpcykuYXR0cigieC1kYXRhIik7CisKKyAgICAvLyBmYWRlIG91dCB0aGUgdmFyaWFibGUrdmFsdWUgZGl2LCB0aGVuIHJlZnJlc2ggdGhlIHZhcmlhYmxlIGxpc3QKKyAgICAkKHRoaXMpLmZhZGVPdXQoKTsKKyAgICAkKHRoaXMpLnRvb2x0aXAoImhpZGUiKTsKKyAgICAkKCJjb25maWdfdmFyX2VudHJ5XyIrcGspLmZhZGVPdXQoKTsKKyAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5wYXJlbnQoImRkIikuZmFkZU91dCgpOworICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJEZWwiOiBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlfSk7CisgIH0pOworCit9CisKK2Z1bmN0aW9uIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSkgeworICAvLyB1cGRhdGUgdGFyZ2V0cworICB2YXIgaTsgdmFyIG9yaWdodG1sID0gIiI7CisKKyAgdmFyIGNvbmZpZ3ZhcnNfc29ydGVkID0gZGF0YS5jb25maWd2YXJzLnNvcnQoZnVuY3Rpb24oYSwgYil7cmV0dXJuIGFbMF0gPiBiWzBdfSk7CisKKyAgdmFyIG1hbmFnZWRfY29uZmlndmFycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lJyk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ3ZhcnNfc29ydGVkLmxlbmd0aDsgaSsrKSB7CisgICAgLy8gc2tpcCBpZiB0aGUgdmFyaWFibGUgbmFtZSBoYXMgYSBzcGVjaWFsIGNvbnRleHQgKG5vdCB1c2VyIGRlZmluZWQpCisgICAgdmFyIHZhcl9jb250ZXh0PXVuZGVmaW5lZDsKKyAgICBmb3IgKHZhciBqID0gMCwgbGVuZ3RoID0gbWFuYWdlZF9jb25maWd2YXJzLmxlbmd0aDsgaiA8IGxlbmd0aDsgaisrKSB7CisgICAgICBpZiAoKG1hbmFnZWRfY29uZmlndmFyc1tqXS5pbm5lckhUTUwgPT0gY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pIHx8CisgICAgICAgICAgKG1hbmFnZWRfY29uZmlndmFyc1tqXS52YWx1ZSAgICAgPT0gY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pICkgeworICAgICAgICB2YXJfY29udGV4dD0nbSc7CisgICAgICB9CisgICAgfQorICAgIGlmICh2YXJfY29udGV4dCA9PSB1bmRlZmluZWQpIHsKKyAgICAgIG9yaWdodG1sICs9ICc8ZHQ+PHNwYW4gaWQ9ImNvbmZpZ192YXJfZW50cnlfJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIj48L3NwYW4+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2gganMtaWNvbi10cmFzaC1jb25maWdfdmFyIiBpZD0iY29uZmlnX3Zhcl90cmFzaF8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIj48L3NwYW4+IDwvZHQ+JworICAgICAgICBvcmlnaHRtbCArPSAnPGRkIGNsYXNzPSJ2YXJpYWJsZS1saXN0Ij4nCisgICAgICAgIG9yaWdodG1sICs9ICcgICAgPHNwYW4gY2xhc3M9ImxlYWQiIGlkPSJjb25maWdfdmFyX3ZhbHVlXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyI+PC9zcGFuPicKKyAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0IGpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIj48L3NwYW4+JworICAgICAgICBvcmlnaHRtbCArPSAnICAgIDxmb3JtIGNsYXNzPSJmb3JtLWlubGluZSIgaWQ9ImNoYW5nZS1jb25maWdfdmFyLWZvcm1fJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+JworICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4nCisgICAgICAgIG9yaWdodG1sICs9ICcgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCBqcy1uZXctY29uZmlnX3ZhciIgaWQ9Im5ldy1jb25maWdfdmFyXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgdmFsdWU9IiI+PC9kaXY+JworICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWNvbmZpZ192YXJfJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyIiB0eXBlPSJidXR0b24iIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnOicrY29uZmlndmFyc19zb3J0ZWRbaV1bMF0rJyIgZGlzYWJsZWQ+U2F2ZTwvYnV0dG9uPicKKyAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhciIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPkNhbmNlbDwvYnV0dG9uPicKKyAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICA8L2Zvcm0+JworICAgICAgICBvcmlnaHRtbCArPSAnPC9kZD4nCisgICAgfQorICB9CisKKyAgLy8gdXBkYXRlIGNvbmZpZ3ZhcnMgbGlzdCBIVE1MIGZyYW1ld29yaworICAkKCJkbCNjb25maWd2YXItbGlzdCIpLmh0bWwob3JpZ2h0bWwpOworCisgIC8vIGluc2VydCB0aGUgbmFtZS92YWx1ZSBwYWlycyBzYWZlbHkgYXMgbm9uLUhUTUwKKyAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ3ZhcnNfc29ydGVkLmxlbmd0aDsgaSsrKSB7CisgICAgJCgnI2NvbmZpZ192YXJfZW50cnlfJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSkudGV4dChjb25maWd2YXJzX3NvcnRlZFtpXVswXSk7CisgICAgJCgnI2NvbmZpZ192YXJfdmFsdWVfJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSkudGV4dChjb25maWd2YXJzX3NvcnRlZFtpXVsxXSk7CisgIH0KKworICAvLyBBZGQgdGhlIHRvb2x0aXBzCisgICQoIi5qcy1pY29uLXRyYXNoLWNvbmZpZ192YXIiKS5lYWNoKCBmdW5jdGlvbigpeyBzZXREZWxldGVUb29sdGlwKCQodGhpcykpOyB9KTsKKyAgJCgiLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiKS5lYWNoKGZ1bmN0aW9uKCl7IHNldENoYW5nZVRvb2x0aXAoJCh0aGlzKSk7IH0pOworCisgIC8vIHJlLWFzc2VydCB0aGVzZSBldmVudCBoYW5kbGVycworICBzZXRFdmVudEhhbmRsZXJzRm9yRHluYW1pY0VsZW1lbnRzKCk7Cit9CisKK2Z1bmN0aW9uIG9uRWRpdEFqYXhTdWNjZXNzKGRhdGEsIHRleHRzdGF0dXMpIHsKKyAgY29uc29sZS5sb2coIlhIUiByZXR1cm5lZDoiLCBkYXRhLCAiKCIgKyB0ZXh0c3RhdHVzICsgIikiKTsKKyAgaWYgKGRhdGEuZXJyb3IgIT0gIm9rIikgeworICAgIGFsZXJ0KCJlcnJvciBvbiByZXF1ZXN0OlxuIiArIGRhdGEuZXJyb3IpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIGRlbGF5ZWQgcGFnZSByZWxvYWQ/CisgIGlmIChkb19yZWxvYWQpIHsKKyAgICBkb19yZWxvYWQ9ZmFsc2U7CisgICAgbG9jYXRpb24ucmVsb2FkKHRydWUpOworICB9IGVsc2UgeworICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7CisgIH0KK30KKworZnVuY3Rpb24gb25FZGl0QWpheEVycm9yKGpxWEhSLCB0ZXh0c3RhdHVzLCBlcnJvcikgeworICBhbGVydCgiWEhSIGVycm9yZWQ6XG4iICsgZXJyb3IgKyAiXG4oIiArIHRleHRzdGF0dXMgKyAiKSIpOworICAvLyByZS1hc3NlcnQgdGhlIGV2ZW50IGhhbmRsZXJzCit9CisKKy8qIGVuc3VyZSBjb29raWUgZXhpc3RzIHslIGNzcmZfdG9rZW4gJX0gKi8KK2Z1bmN0aW9uIHBvc3RFZGl0QWpheFJlcXVlc3QocmVxZGF0YSkgeworICB2YXIgYWpheCA9ICQuYWpheCh7CisgICAgdHlwZToiUE9TVCIsCisgICAgZGF0YTogJC5wYXJhbShyZXFkYXRhKSwKKyAgICB1cmw6InslIHVybCAneGhyX2NvbmZpZ3ZhcmVkaXQnIHByb2plY3QuaWQlfSIsCisgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nOiAkLmNvb2tpZSgiY3NyZnRva2VuIil9LAorICAgIHN1Y2Nlc3M6IG9uRWRpdEFqYXhTdWNjZXNzLAorICAgIGVycm9yOiBvbkVkaXRBamF4RXJyb3IsCisgIH0pCit9CisKK2Z1bmN0aW9uIHNldERlbGV0ZVRvb2x0aXAob2JqZWN0KSB7CisgIG9iamVjdC50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogNDAwfSwgdGl0bGU6ICJEZWxldGUiIH0pOworfQorZnVuY3Rpb24gc2V0Q2hhbmdlVG9vbHRpcChvYmplY3QpIHsKKyAgb2JqZWN0LnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiA0MDB9LCB0aXRsZTogIkNoYW5nZSIgfSk7Cit9CisKKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworCisgIC8vCisgIC8vIFJlZ2lzdGVyIGhhbmRsZXJzIGZvciBzdGF0aWMgZWxlbWVudHMKKyAgLy8KKworICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQorICAvLyBjaGFuZ2UgZGlzdHJvIHZhcmlhYmxlCisgICQoJyNjaGFuZ2UtZGlzdHJvLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAkKCcjY2hhbmdlLWRpc3Ryby1pY29uLCAjZGlzdHJvJykuaGlkZSgpOworICAgICQoIiNjaGFuZ2UtZGlzdHJvLWZvcm0iKS5zbGlkZURvd24oKTsKKyAgICAkKCIjbmV3LWRpc3RybyIpLnZhbCggJCgnI2Rpc3RybycpLnRleHQoKSApOworICAgICQoIiNhcHBseS1jaGFuZ2UtZGlzdHJvIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgJCgnI2NhbmNlbC1jaGFuZ2UtZGlzdHJvJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNkaXN0cm8sICNjaGFuZ2UtZGlzdHJvLWljb24nKS5zaG93KCk7CisKKyAgICAgIC8vIHJlc2V0IGFueSBkYW5nbGluZyBlcnJvciBzdGF0ZQorICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikucmVtb3ZlQ2xhc3MoImhhcy1lcnJvciIpOworICAgIH0pOworICB9KTsKKworICAvLyB2YWxpZGF0ZSBuZXcgZGlzdHJvIG5hbWUKKyAgJCgiaW5wdXQjbmV3LWRpc3RybyIpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uIChldnQpIHsKKyAgICB2YWxpZGF0ZV9kaXN0cm9fbmFtZSgpOworICB9KTsKKworICAkKCcjYXBwbHktY2hhbmdlLWRpc3RybycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgLy8kKCcjcmVwbycpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHQtZ28nKTsKKyAgICB2YXIgbmFtZSA9ICQoJyNuZXctZGlzdHJvJykudmFsKCk7CisgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnRElTVFJPOicrbmFtZX0pOworICAgICQoJyNkaXN0cm8nKS50ZXh0KG5hbWUpOworICAgICQoIiNjaGFuZ2UtZGlzdHJvLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uICgpIHsKKyAgICAgICQoJyNkaXN0cm8sICNjaGFuZ2UtZGlzdHJvLWljb24nKS5zaG93KCk7CisgICAgfSk7CisgIH0pOworICB7JSBlbmRpZiAlfQorCisgIHslIGlmIGRsX2Rpcl9kZWZpbmVkICV9CisKKyAgLy8gY2hhbmdlIERMX0RJUiB2YXJpYWJsZQorICAkKCcjY2hhbmdlLWRsX2Rpci1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgJCgnI2NoYW5nZS1kbF9kaXItZm9ybScpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKTsKKyAgICAvLyBwcmVzZXQgdGhlIGVkaXQgdmFsdWUKKyAgICB2YXIgY3VycmVudF92YWwgPSAkKCIjZGxfZGlyIikudGV4dCgpLnRyaW0oKTsKKyAgICBpZiAoY3VycmVudF92YWwgPT0gIk5vdCBzZXQiKSB7CisgICAgICBjdXJyZW50X3ZhbD0iIjsKKyAgICAgICQoIiNhcHBseS1jaGFuZ2UtZGxfZGlyIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIH0KKyAgICAkKCJpbnB1dCNuZXctZGxfZGlyIikudmFsKGN1cnJlbnRfdmFsKTsKKyAgICAvLyBlbmFibGUgLyBkaXNhYmxlIHRoZSBzYXZlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgaW5wdXQgdmFsdWUKKyAgICBpZiAoIGN1cnJlbnRfdmFsLmxlbmd0aCApIHsKKyAgICAgICQoIiNhcHBseS1jaGFuZ2UtZGxfZGlyIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAkKCIjYXBwbHktY2hhbmdlLWRsX2RpciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICB9CisKKyAgICAkKCcjY2hhbmdlLWRsX2Rpci1pY29uLCAjZGxfZGlyJykuaGlkZSgpOworICAgICQoIiNjaGFuZ2UtZGxfZGlyLWZvcm0iKS5zbGlkZURvd24oKTsKKyAgfSk7CisKKyAgJCgnI2NhbmNlbC1jaGFuZ2UtZGxfZGlyJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjaGludEVycm9yLWRsX2RpciIpLmhpZGUoKTsKKyAgICAkKCIjaGludEVycm9yLWluaXRpYWxDaGFyLWRsX2RpciIpLmhpZGUoKTsKKyAgICAkKCIjY2hhbmdlLWRsX2Rpci1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNkbF9kaXIsICNjaGFuZ2UtZGxfZGlyLWljb24nKS5zaG93KCk7CisgICAgfSk7CisgIH0pOworCisgICQoIiNuZXctZGxfZGlyIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICBpZiAoJCh0aGlzKS52YWwoKS50cmltKCkubGVuZ3RoID09IDApIHsKKyAgICAgICQoIiNhcHBseS1jaGFuZ2UtZGxfZGlyIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgJCgnI2NoYW5nZS1kbF9kaXItZm9ybScpLmFkZENsYXNzKCdoYXMtZXJyb3InKTsKKyAgICAgICQoJyNoaW50RXJyb3ItZGxfZGlyJykuaGlkZSgpOworICAgICAgJCgnI2hpbnRFcnJvci1pbml0aWFsQ2hhci1kbF9kaXInKS5oaWRlKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdmFyIGlucHV0ID0gJCh0aGlzKTsKKyAgICAgIHZhciByZUJlZ2luV2l0aFNsYXNoID0gL15cLy87CisgICAgICB2YXIgcmVDaGVja1ZhcmlhYmxlID0gL15cJC87CisgICAgICB2YXIgcmUgPSAvKFsgPD5cXHwiOlwuJVw/XCpdKykvOworICAgICAgdmFyIGludmFsaWREaXIgPSByZS50ZXN0KGlucHV0LnZhbCgpKTsKKyAgICAgIHZhciBpbnZhbGlkU2xhc2ggPSByZUJlZ2luV2l0aFNsYXNoLnRlc3QoaW5wdXQudmFsKCkpOworICAgICAgdmFyIGludmFsaWRWYXIgPSByZUNoZWNrVmFyaWFibGUudGVzdChpbnB1dC52YWwoKSk7CisgICAgICBpZiAoIWludmFsaWRTbGFzaCAmJiAhaW52YWxpZFZhcikgeworICAgICAgICAkKCcjY2hhbmdlLWRsX2Rpci1mb3JtJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRsX2RpciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgJCgnI2hpbnRFcnJvci1pbml0aWFsQ2hhci1kbF9kaXInKS5zaG93KCk7CisgICAgICB9IGVsc2UgaWYgKGludmFsaWREaXIpIHsKKyAgICAgICAgJCgnI2NoYW5nZS1kbF9kaXItZm9ybScpLmFkZENsYXNzKCdoYXMtZXJyb3InKTsKKyAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1kbF9kaXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICQoJyNoaW50RXJyb3ItZGxfZGlyJykuc2hvdygpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJCgnI2NoYW5nZS1kbF9kaXItZm9ybScpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKTsKKyAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1kbF9kaXIiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAkKCcjaGludEVycm9yLWRsX2RpcicpLmhpZGUoKTsKKyAgICAgICAgJCgnI2hpbnRFcnJvci1pbml0aWFsQ2hhci1kbF9kaXInKS5oaWRlKCk7CisgICAgICB9CisgICAgfQorICB9KTsKKworICAkKCcjYXBwbHktY2hhbmdlLWRsX2RpcicpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIHZhbHVlID0gJCgnI25ldy1kbF9kaXInKS52YWwoKS50cmltKCk7CisgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnRExfRElSOicrdmFsdWV9KTsKKyAgICAkKCcjZGxfZGlyJykudGV4dCh2YWx1ZSk7CisgICAgJCgnI2RsX2RpcicpLnJlbW92ZUNsYXNzKCdtdXRlZCcpOworICAgICQoIiNjaGFuZ2UtZGxfZGlyLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uICgpIHsKKyAgICAgICQoJyNkbF9kaXIsICNjaGFuZ2UtZGxfZGlyLWljb24nKS5zaG93KCk7CisgICAgfSk7CisgIH0pOworCisgIHslIGVuZGlmICV9CisKKyAgeyUgaWYgZnN0eXBlc19kZWZpbmVkICV9CisgIC8vIGNoYW5nZSBJTUFHRV9GU1RZUEVTIHZhcmlhYmxlCisKKyAgLy8gZ2V0IHZhbHVlIG9mIGZzdHlwZXMgYW5kIGFkZCB0byB0aGUgdGV4dGJveAorICAkKCIjbmV3LWltYWdlZnNfdHlwZXMiKS52YWwoInt7ZnN0eXBlc319Iik7CisKKyAgLy8gSWYgdmFsdWUgb2YgbmV3LWltYWdlZnNfdHlwZXMgaXMgZW1wdHkgZGlzYWJsZSBzYXZlIGJ1dHRvbgorICAkKCIjbmV3LWltYWdlZnNfdHlwZXMiKS5vbigiaW5wdXQiLCBmdW5jdGlvbigpIHsKKyAgICAkKHRoaXMpLnZhbCgkKHRoaXMpLnZhbCgpLnJlcGxhY2UoL1xzKy9nLCcgJykpOworICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA9PT0gMCkgeworICAgICAgLy8kKCcjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgJCgnI2FwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzJykuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8kKCcjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICQoJyNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgfQorCisgICAgLypJZiB1c2VyIHR5cGVzIGltYWdlZnMgZG8gdGhlIGFjdGlvbiBvbiBjaGVja2JveGVzLgorICAgICAgTGV0cyBzYXkgaWYgYW4gaW1hZ2Vmc3R5cGUgdHlwZWQgYnkgdXNlciBhbmQgdGhlIHNhbWUKKyAgICAgIGltYWdlZnMgaXMgdW5jaGVja2VkIGluIHRoZSBjaGVja2JveCwgdGhlbiBjaGVja2JveCBuZWVkcworICAgICAgdG8gZ2V0IGNoZWNrZWQuIFNpbWlsYXJseSB3aGVuIHVzZXIgZGVsZXRlcyBpbWFnZWZzIGZyb20KKyAgICAgIHRleHRib3ggdGhlIGNoZWNrYm94IHdoaWNoIGlzIGNoZWNrZWQgZ2V0cyB1bmNoZWNrZWQuCisgICAgICovCisgICAgJCgnI2FsbC1pbWFnZV9mc3R5cGVzIGlucHV0JykuZWFjaChmdW5jdGlvbigpeworICAgICAgdmFyIGltYWdlZnNfdXNlcnZhbCA9ICQoJyNuZXctaW1hZ2Vmc190eXBlcycpLnZhbCgpOworICAgICAgaWYoIGltYWdlZnNfdXNlcnZhbC5pbmRleE9mKCQodGhpcykudmFsKCkpID4gLTEpIHsKKyAgICAgICAgJCh0aGlzKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBWYWxpZGF0ZSB1bmRlcnNjb3JlIGluIGltYWdlIGZzIHR5cGVzCisgICAgaWYgKCQodGhpcykudmFsKCkuaW5kZXhPZignXycpID4gLTEpIHsKKyAgICAgICQoJyN2YWxpZGF0ZS1pbWFnZV9mc3R5cGVzJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgJCgnI2hpbnRFcnJvci1pbWFnZS1mc190eXBlJykuc2hvdygpOworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIikucHJvcCgiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgnI3ZhbGlkYXRlLWltYWdlX2ZzdHlwZXMnKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJyk7CisgICAgICAkKCcjaGludEVycm9yLWltYWdlLWZzX3R5cGUnKS5oaWRlKCk7CisgICAgfQorICB9KTsKKworICAkKCcjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICQoJyNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uLCAjaW1hZ2VfZnN0eXBlcycpLmhpZGUoKTsKKyAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlRG93bigpOworICAgIC8vIGF2b2lkIGZhbHNlIHN1YnN0cmluZyBtYXRjaGVzIGJ5IGluY2x1ZGluZyBzcGFjZSBzZXBhcmF0b3JzCisgICAgdmFyIGh0bWwgICAgICAgICA9ICIiOworICAgIHZhciBmc3R5cGVzICAgICAgPSAiICIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1hZ2VfZnN0eXBlcyIpLmlubmVySFRNTCArICIgIjsKKyAgICB2YXIgZnN0eXBlc19saXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY2hlY2tib3gtZnN0eXBlcy1saXN0Jyk7CisgICAgLy8gQWRkIHRoZSBjaGVja2VkIGJveGVzIGZpcnN0CisgICAgaWYgKCIgICIgIT0gZnN0eXBlcykgeworICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGZzdHlwZXNfbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoMCA8PSBmc3R5cGVzLmluZGV4T2YoIiAiK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsiICIpKSB7CisgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2hlY2tib3giPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJmcy1jaGVja2JveC1mc3R5cGVzIiB2YWx1ZT0iJytmc3R5cGVzX2xpc3RbaV0udmFsdWUrJyIgY2hlY2tlZD0iY2hlY2tlZCI+Jytmc3R5cGVzX2xpc3RbaV0udmFsdWUrJzwvbGFiZWw+PC9kaXY+JzsKICAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICAvLyBBZGQgdGhlIHVuLWNoZWNrZWQgYm94ZXMgc2Vjb25kCisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGZzdHlwZXNfbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgaWYgKDAgID4gZnN0eXBlcy5pbmRleE9mKCIgIitmc3R5cGVzX2xpc3RbaV0udmFsdWUrIiAiKSkgeworICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjaGVja2JveCI+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImZzLWNoZWNrYm94LWZzdHlwZXMiIHZhbHVlPSInK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnIj4nK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnPC9sYWJlbD48L2Rpdj4nOworICAgICAgfQorICAgIH0KKyAgICAvLyBBZGQgdGhlICdubyBzZWFyY2ggbWF0Y2hlcycgbGluZSBsYXN0CisgICAgaHRtbCArPSAnPGxhYmVsIGlkPSJuby1tYXRjaC1mc3R5cGVzIiBjbGFzcz0idGV4dC1tdXRlZCI+Tm8gaW1hZ2UgdHlwZXMgZm91bmQ8L2xhYmVsPlxuJzsKKyAgICAvLyBEaXNwbGF5IHRoZSBsaXN0CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbC1pbWFnZV9mc3R5cGVzIikuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAkKCcjbm8tbWF0Y2gtZnN0eXBlcycpLmhpZGUoKTsKIAotICAgICAgICAvLyB2YWxpZGF0ZSBkaXN0cm8gbmFtZQotICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZV9kaXN0cm9fbmFtZSgpIHsKLSAgICAgICAgICAgICB2YXIgdmFsdWUgICAgPSAkKCJpbnB1dCNuZXctZGlzdHJvIikudmFsKCk7CisgICAgLy8gY2xlYXIgdGhlIHByZXZpb3VzIGZpbHRlciB2YWx1ZXMgYW5kIHdhcm5pbmcgbWVzc2FnZXMKKyAgICAkKCJpbnB1dCNmaWx0ZXItaW1hZ2VfZnN0eXBlcyIpLnZhbCgiIik7CisgIH0pOwogCi0gICAgICAgICAgICAvLyBwcmVzdW1lZCBpbm5vY2VuY2UKLSAgICAgICAgICAgICQoJyNkaXN0cm8tZXJyb3ItbWVzc2FnZScpLnRleHQoIiIpOwotICAgICAgICAgICAgdmFyIGVycm9yX21zZyA9ICIiOworICAvLyBXaGVuIGNoZWNrYm94IGlzIGNoZWNrZWQvdW5jaGVja2VkIGtpbmRseSB1cGRhdGUgdGhlIHRleHQKKyAgJChkb2N1bWVudCkub24oImNoYW5nZSIsICIjYWxsLWltYWdlX2ZzdHlwZXMgOmNoZWNrYm94IiwgZnVuY3Rpb24oKSB7CisgICAgdmFyIGltYWdlZnMgPSAkKHRoaXMpOworICAgIHZhciBpbWFnZWZzX29iaiA9ICQoJyNuZXctaW1hZ2Vmc190eXBlcycpOworICAgIHZhciBpbWFnZWZzX3VzZXJ2YWwgPSBpbWFnZWZzX29iai52YWwoKTsKKyAgICBpZiAoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSkgeworICAgICAgaWYgKGltYWdlZnNfdXNlcnZhbC5pbmRleE9mKCQoaW1hZ2VmcykudmFsKCkpID09PSAtMSkgeworICAgICAgICBpbWFnZWZzX29iai52YWwoaW1hZ2Vmc191c2VydmFsICsgIiAiICsgJChpbWFnZWZzKS52YWwoKSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChpbWFnZWZzX3VzZXJ2YWwuaW5kZXhPZigkKGltYWdlZnMpLnZhbCgpKSA+IC0xKSB7CisgICAgICAgIGltYWdlZnNfb2JqLnZhbChpbWFnZWZzX3VzZXJ2YWwucmVwbGFjZSgkKGltYWdlZnMpLnZhbCgpLCAnJykudHJpbSgpKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCQoJyNuZXctaW1hZ2Vmc190eXBlcycpLnZhbCgpLmxlbmd0aCA9PT0gMCkgeworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIikucHJvcCgiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIikucHJvcCgiZGlzYWJsZWQiLCBmYWxzZSk7CisgICAgfQorICB9KTsKIAotICAgICAgICAgICAgdmFyIGhhc19zcGFjZXMgPSAoMCA8PSB2YWx1ZS5pbmRleE9mKCIgIikpOworICAkKCcjY2FuY2VsLWNoYW5nZS1pbWFnZV9mc3R5cGVzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjbmV3LWltYWdlZnNfdHlwZXMiKS52YWwoInt7ZnN0eXBlc319Iik7CisgICAgJCgiI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI2ltYWdlX2ZzdHlwZXMsICNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uJykuc2hvdygpOworICAgIH0pOworICB9KTsKIAotICAgICAgICAgICAgaWYgKGhhc19zcGFjZXMpIHsKLSAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCBkaXN0cm8gbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOwotICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHZhbHVlLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIgIjsKLSAgICAgICAgICAgIH0KKyAgJCgnI2ZpbHRlci1pbWFnZV9mc3R5cGVzJykub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICB2YXIgdmFsVGhpcyA9ICQodGhpcykudmFsKCkudG9Mb3dlckNhc2UoKTsKKyAgICB2YXIgbWF0Y2hDb3VudD0wOworICAgICQoJyNhbGwtaW1hZ2VfZnN0eXBlcyBsYWJlbCcpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgIHZhciB0ZXh0ID0gJCh0aGlzKS50ZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgIHZhciBtYXRjaCA9IHRleHQuaW5kZXhPZih2YWxUaGlzKTsKKyAgICAgIGlmIChtYXRjaCA+PSAwKSB7CisgICAgICAgICQodGhpcykuc2hvdygpOworICAgICAgICBtYXRjaENvdW50ICs9IDE7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgICB9CisgICAgfSk7CisgICAgaWYgKG1hdGNoQ291bnQgPT09IDApIHsKKyAgICAgICQoJyNuby1tYXRjaC1mc3R5cGVzJykuc2hvdygpOworICAgIH0gZWxzZSB7CisgICAgICAkKCcjbm8tbWF0Y2gtZnN0eXBlcycpLmhpZGUoKTsKKyAgICB9CisgIH0pOwogCi0gICAgICAgICAgICBpZiAoIiIgIT0gZXJyb3JfbXNnKSB7Ci0gICAgICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dChlcnJvcl9tc2cpOwotICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtZGlzdHJvIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAkKCcjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMnKS5jbGljayhmdW5jdGlvbigpeworICAgIHZhciBmc3R5cGVzID0gJCgnI25ldy1pbWFnZWZzX3R5cGVzJykudmFsKCk7CiAKLSAgICAgICAgICAgICAgICAvLyBhZGQgb25lIChhbmQgb25seSBvbmUpIGVycm9yIGNsYXNzIGFwcGVuZAotICAgICAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQtZGlzdHJvLW5hbWUtZGl2Iik7Ci0gICAgICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKLSAgICAgICAgICAgICAgICBkLmNsYXNzTmFtZSA9IGQuY2xhc3NOYW1lICsgIiBlcnJvciI7CisgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnSU1BR0VfRlNUWVBFUzonK2ZzdHlwZXN9KTsKKyAgICAkKCcjaW1hZ2VfZnN0eXBlcycpLnRleHQoZnN0eXBlcyk7CisgICAgJCgnI2ltYWdlX2ZzdHlwZXMnKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KKyAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjaW1hZ2VfZnN0eXBlcywgI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKS5zaG93KCk7CisgICAgfSk7CisgIH0pOworICB7JSBlbmRpZiAlfQogCi0gICAgICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0LWRpc3Ryby1uYW1lLWRpdiIpOwotICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKLSAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtZGlzdHJvIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CiAKLSAgICAgICAgLy8gVGVzdCB0byBpbnN1cmUgYXQgbGVhc3Qgb25lIEZTIFR5cGUgaXMgY2hlY2tlZAotICAgICAgICBmdW5jdGlvbiBlbmFibGVGc1R5cGVzU2F2ZSgpIHsKLSAgICAgICAgICAgIHZhciBhbnlfY2hlY2tlZCA9IDA7Ci0gICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlczpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIGFueV9jaGVja2VkID0gMTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKCAwID09IGFueV9jaGVja2VkICkgewotICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcyIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICAkKCcjZnN0eXBlcy1lcnJvci1tZXNzYWdlJykuc2hvdygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICAkKCcjZnN0eXBlcy1lcnJvci1tZXNzYWdlJykuaGlkZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgIHslIGlmIGltYWdlX2luc3RhbGxfYXBwZW5kX2RlZmluZWQgJX0KIAotICAgICAgICAvLyBQcmVzZXQgb3IgcmVzZXQgdGhlIFBhY2thZ2UgQ2xhc3MgY2hlY2tib3ggbGFiZWxzCi0gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKSB7Ci0gICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18xLCAjcGFja2FnZV9jbGFzc18yJykuaGlkZSgpOwotICAgICAgICAgICAgaWYgKCQoJ3NlbGVjdCcpLnZhbCgpID09ICdwYWNrYWdlX2RlYicpIHsKLSAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18xJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xX2lucHV0Ij4gcGFja2FnZV9pcGsnKTsKLSAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18yJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9ycG0nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgkKCdzZWxlY3QnKS52YWwoKSA9PSAncGFja2FnZV9pcGsnKSB7Ci0gICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMScpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfZGViJyk7Ci0gICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMicpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfcnBtJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJCgnc2VsZWN0JykudmFsKCkgPT0gJ3BhY2thZ2VfcnBtJykgewotICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEnKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYicpOwotICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzInKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiPiBwYWNrYWdlX2lwaycpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMSwgI3BhY2thZ2VfY2xhc3NfMicpLmZhZGVJbigxNTAwKTsKLSAgICAgICAgfQorICAvLyBpbml0IElNQUdFX0lOU1RBTExfYXBwZW5kIHRyYXNoIGljb24KKyAgc2V0RGVsZXRlVG9vbHRpcCgkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpKTsKIAotICAgICAgICAvLyBSZS1hc3NlcnQgaGFuZGxlcnMgd2hlbiB0aGUgcGFnZSBpcyBzZXJ2ZWQgYW5kL29yIHJlZnJlc2hlZCB2aWEgQWpheAotICAgICAgICBmdW5jdGlvbiBzZXRFdmVudEhhbmRsZXJzRm9yRHluYW1pY0VsZW1lbnRzKCkgeworICAvLyBjaGFuZ2UgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdmFyaWFibGUKKyAgJCgnI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAvLyBwcmVzZXQgdGhlIGVkaXQgdmFsdWUKKyAgICB2YXIgY3VycmVudF92YWwgPSAkKCJzcGFuI2ltYWdlX2luc3RhbGwiKS50ZXh0KCkudHJpbSgpOworICAgIGlmIChjdXJyZW50X3ZhbCA9PSAiTm90IHNldCIpIHsKKyAgICAgIGN1cnJlbnRfdmFsPSIiOworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBpbnN1cmUgdGhlc2Ugbm9uLWVtcHR5IHZhbHVlcyBoYXZlIHNpbmdsZSBzcGFjZSBwcmVmaXgKKyAgICAgIGN1cnJlbnRfdmFsPSIgIiArIGN1cnJlbnRfdmFsOworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICB9CisgICAgJCgiaW5wdXQjbmV3LWltYWdlX2luc3RhbGwiKS52YWwoY3VycmVudF92YWwpOwogCi0gICAgICAgICAgICAvLyBjaGFuZ2UgdmFyaWFibGUgdmFsdWUKLSAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgICAgIHZhciBwayA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWU7Ci0gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsID0gJCgic3BhbiNjb25maWdfdmFyX3ZhbHVlXyIrcGspLnRleHQoKTsKLSAgICAgICAgICAgICAgICAkKCcuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciwgLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciwgI2NvbmZpZ192YXJfdmFsdWVfJytwaykuaGlkZSgpOwotICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlRG93bigpOwotICAgICAgICAgICAgICAgICQoImlucHV0I25ldy1jb25maWdfdmFyXyIrcGspLnZhbChjdXJyZW50X3ZhbCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAkKCcjY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbiwgI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24sICNpbWFnZV9pbnN0YWxsJykuaGlkZSgpOworICAgICQoIiNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIikuc2xpZGVEb3duKCk7CisgIH0pOwogCi0gICAgICAgICAgICAkKCcuanMtY2FuY2VsLWNoYW5nZS1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgICAgIHZhciBwayA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWU7Ci0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1jb25maWdfdmFyLWZvcm1fIitwaykuc2xpZGVVcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgJCgnLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIsIC5qcy1pY29uLXRyYXNoLWNvbmZpZ192YXIsICNjb25maWdfdmFyX3ZhbHVlXycrcGspLnNob3coKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOworICAkKCcjY2FuY2VsLWNoYW5nZS1pbWFnZV9pbnN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCwgI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICBpZiAoJCgic3BhbiNpbWFnZV9pbnN0YWxsIikudGV4dCgpICE9ICJOb3Qgc2V0IikgeworICAgICAgICAkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpLnNob3coKTsKKyAgICAgICAgc2V0RGVsZXRlVG9vbHRpcCgkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfSk7CiAKLSAgICAgICAgICAgICQoIi5qcy1uZXctY29uZmlnX3ZhciIpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgJCgiLmpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgJCgiLmpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKKyAgJCgiI25ldy1pbWFnZV9pbnN0YWxsIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICBpZiAoJCh0aGlzKS52YWwoKS50cmltKCkubGVuZ3RoID09IDApIHsKKyAgICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2luc3RhbGwiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0KKyAgfSk7CiAKLSAgICAgICAgICAgICQoJy5qcy1hcHBseS1jaGFuZ2UtY29uZmlnX3ZhcicpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgeGRhdGEgICAgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlLnNwbGl0KCI6Iik7Ci0gICAgICAgICAgICAgICAgdmFyIHBrICAgICAgID0geGRhdGFbMF07Ci0gICAgICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0geGRhdGFbMV07Ci0gICAgICAgICAgICAgICAgdmFyIHZhbCAgICAgID0gJCgnI25ldy1jb25maWdfdmFyXycrcGspLnZhbCgpOwotICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogdmFyaWFibGUrJzonK3ZhbH0pOwotICAgICAgICAgICAgICAgICQoJyNjb25maWdfdmFyX3ZhbHVlXycrcGspLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdtdXRlZCcpOwotICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlVXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyLCAuanMtaWNvbi10cmFzaC1jb25maWdfdmFyLCAjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKKyAgJCgnI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAvLyBpbnN1cmUgdGhlc2Ugbm9uLWVtcHR5IHZhbHVlcyBoYXZlIHNpbmdsZSBzcGFjZSBwcmVmaXgKKyAgICB2YXIgdmFsdWUgPSAiICIgKyAkKCcjbmV3LWltYWdlX2luc3RhbGwnKS52YWwoKS50cmltKCk7CisgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnSU1BR0VfSU5TVEFMTF9hcHBlbmQ6Jyt2YWx1ZX0pOworICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCh2YWx1ZSk7CisgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5yZW1vdmVDbGFzcygndGV4dC1tdXRlZCcpOworICAgICQoIiNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIikuc2xpZGVVcChmdW5jdGlvbiAoKSB7CisgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCwgI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICBpZiAodmFsdWUubGVuZ3RoID4gLTEpIHsKKyAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgIHNldERlbGV0ZVRvb2x0aXAoJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKSk7CisgICAgICB9CisgICAgfSk7CisgIH0pOwogCi0gICAgICAgICAgICAvLyBkZWxldGUgdmFyaWFibGUKLSAgICAgICAgICAgICQoIi5qcy1pY29uLXRyYXNoLWNvbmZpZ192YXIiKS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHhkYXRhICAgID0gZXZ0LnRhcmdldC5hdHRyaWJ1dGVzWyJ4LWRhdGEiXS52YWx1ZS5zcGxpdCgiOiIpOwotICAgICAgICAgICAgICAgIHZhciBwayAgICAgICA9IHhkYXRhWzBdOworICAvLyBkZWxldGUgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdmFyaWFibGUgdmFsdWUKKyAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5jbGljayhmdW5jdGlvbigpeworICAgICQodGhpcykudG9vbHRpcCgnaGlkZScpOworICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0lNQUdFX0lOU1RBTExfYXBwZW5kOicrJyd9KTsKKyAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLnBhcmVudCgpLmZhZGVPdXQoMTAwMCwgZnVuY3Rpb24oKXsKKyAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykuYWRkQ2xhc3MoJ3RleHQtbXV0ZWQnKTsKKyAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCgnTm90IHNldCcpOworICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5oaWRlKCk7CisgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLnBhcmVudCgpLmZhZGVJbigxMDAwKTsKKyAgICB9KTsKKyAgfSk7CisgIHslIGVuZGlmICV9CiAKLSAgICAgICAgICAgICAgICAvLyBoaWRlIHRoZSBkYW5nbGluZyB0cmFzaCB0b29sdGlwCi0gICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfdHJhc2hfJytwaykuaGlkZSgpOwogCi0gICAgICAgICAgICAgICAgLy8gZmFkZSBvdXQgdGhlIHZhcmlhYmxlK3ZhbHVlIGRpdiwgdGhlbiByZWZyZXNoIHRoZSB2YXJpYWJsZSBsaXN0Ci0gICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfZW50cnlfJytwaykucGFyZW50KCkucGFyZW50KCkuZmFkZU91dCgxMDAwLCBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckRlbCI6IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWV9KTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgeyUgaWYgcGFja2FnZV9jbGFzc2VzX2RlZmluZWQgJX0KKyAgLy8gY2hhbmdlIFBBQ0tBR0VfQ0xBU1NFUyB2YXJpYWJsZQorICAkKCcjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgJCgnI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbiwgI3BhY2thZ2VfY2xhc3NlcycpLmhpZGUoKTsKKyAgICAkKCIjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1mb3JtIikuc2xpZGVEb3duKCk7CiAKLSAgICAgICAgICAgIH0pOworICAgIC8vIGluaXRpYWxpemUgdGhlIHB1bGxkb3duIGFuZCBjaGVja2JveGVzCisgICAgdmFyIHZhbHVlID0gJCgiI3BhY2thZ2VfY2xhc3NlcyIpLnRleHQoKTsKKyAgICBpZiAoIHZhbHVlLmluZGV4T2YoInBhY2thZ2VfZGViIikgPT0gMCApIHsKKyAgICAgICQoIiNwYWNrYWdlX2NsYXNzZXMtc2VsZWN0IikucHJvcCgnc2VsZWN0ZWRJbmRleCcsIDApOworICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfaXBrIikgPiAwICkgeworICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18xX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICB9CisgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9ycG0iKSA+IDAgKSB7CisgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgfQorICAgIGlmICggdmFsdWUuaW5kZXhPZigicGFja2FnZV9pcGsiKSA9PSAwICkgeworICAgICAgJCgiI3BhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKS5wcm9wKCdzZWxlY3RlZEluZGV4JywgMSk7CisgICAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7CisgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9kZWIiKSA+IDAgKSB7CisgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzFfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgIH0KKyAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX3JwbSIpID4gMCApIHsKKyAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMl9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgfQorICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBvbkVkaXRQYWdlVXBkYXRlKGRhdGEpIHsKLSAgICAgICAgICAgIC8vIHVwZGF0ZSB0YXJnZXRzCi0gICAgICAgICAgICB2YXIgaTsgdmFyIG9yaWdodG1sID0gIiI7CisgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJwYWNrYWdlX3JwbSIpID09IDAgKSB7CisgICAgICAkKCIjcGFja2FnZV9jbGFzc2VzLXNlbGVjdCIpLnByb3AoJ3NlbGVjdGVkSW5kZXgnLCAyKTsKKyAgICAgIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKTsKKyAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX2RlYiIpID4gMCApIHsKKyAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgfQorICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfaXBrIikgPiAwICkgeworICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18yX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICB9CisgICAgfQorICB9KTsKIAotICAgICAgICAgICAgdmFyIGNvbmZpZ3ZhcnNfc29ydGVkID0gZGF0YS5jb25maWd2YXJzLnNvcnQoZnVuY3Rpb24oYSwgYil7cmV0dXJuIGFbMF0gPiBiWzBdfSk7CisgICQoJyNjYW5jZWwtY2hhbmdlLXBhY2thZ2VfY2xhc3NlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgJCgiI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjcGFja2FnZV9jbGFzc2VzLCAjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uJykuc2hvdygpOworICAgIH0pOworICB9KTsKIAotICAgICAgICAgICAgdmFyIG1hbmFnZWRfY29uZmlndmFycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lJyk7CisgICQoJ3NlbGVjdCcpLmNoYW5nZShmdW5jdGlvbigpIHsKKyAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7CisgIH0pOwogCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAvLyBza2lwIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGhhcyBhIHNwZWNpYWwgY29udGV4dCAobm90IHVzZXIgZGVmaW5lZCkKLSAgICAgICAgICAgICAgICB2YXIgdmFyX2NvbnRleHQ9dW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsZW5ndGggPSBtYW5hZ2VkX2NvbmZpZ3ZhcnMubGVuZ3RoOyBqIDwgbGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtYW5hZ2VkX2NvbmZpZ3ZhcnNbal0uaW5uZXJIVE1MID09IGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKG1hbmFnZWRfY29uZmlndmFyc1tqXS52YWx1ZSAgICAgPT0gY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2NvbnRleHQ9J20nOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YXJfY29udGV4dCA9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJzxkaXY+IDxkdD48c3BhbiBpZD0iY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUiPjwvc3Bhbj48aSBjbGFzcz0iaWNvbi10cmFzaCBqcy1pY29uLXRyYXNoLWNvbmZpZ192YXIiIGlkPSJjb25maWdfdmFyX3RyYXNoXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvaT4gPC9kdD4nCi0gICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8ZGQgY2xhc3M9ImxlYWQiPicKLSAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICA8c3BhbiBpZD0iY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvc3Bhbj4nCi0gICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIGpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIj48L2k+JwotICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDxmb3JtIGlkPSJjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPicKLSAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4nCi0gICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBqcy1uZXctY29uZmlnX3ZhciIgaWQ9Im5ldy1jb25maWdfdmFyXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgdmFsdWU9IiI+JwotICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyIiB0eXBlPSJidXR0b24iIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnOicrY29uZmlndmFyc19zb3J0ZWRbaV1bMF0rJyIgZGlzYWJsZWQ+U2F2ZTwvYnV0dG9uPicKLSAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhciIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPkNhbmNlbDwvYnV0dG9uPicKLSAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPC9kaXY+JwotICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDwvZm9ybT4nCi0gICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8L2RkPiA8L2Rpdj4nCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAkKCcjYXBwbHktY2hhbmdlLXBhY2thZ2VfY2xhc3NlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIGUgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYWNrYWdlX2NsYXNzZXMtc2VsZWN0Iik7CisgICAgdmFyIHZhbCA9IGUub3B0aW9uc1tlLnNlbGVjdGVkSW5kZXhdLnRleHQ7CiAKLSAgICAgICAgICAgIC8vIHVwZGF0ZSBjb25maWd2YXJzIGxpc3QgSFRNTCBmcmFtZXdvcmsKLSAgICAgICAgICAgICQoImRsI2NvbmZpZ3Zhci1saXN0IikuaHRtbChvcmlnaHRtbCk7CisgICAgcGMxX2NoZWNrZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFja2FnZV9jbGFzc18xX2lucHV0IikuY2hlY2tlZDsKKyAgICBwYzJfY2hlY2tlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5jaGVja2VkOworICAgIGlmICh2YWwgPT0gInBhY2thZ2VfZGViIikgeworICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfaXBrIjsKKyAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX3JwbSI7CisgICAgfQorICAgIGlmICh2YWwgPT0gInBhY2thZ2VfaXBrIikgeworICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfZGViIjsKKyAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX3JwbSI7CisgICAgfQorICAgIGlmICh2YWwgPT0gInBhY2thZ2VfcnBtIikgeworICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfZGViIjsKKyAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX2lwayI7CisgICAgfQogCi0gICAgICAgICAgICAvLyBpbnNlcnQgdGhlIG5hbWUvdmFsdWUgcGFpcnMgc2FmZWx5IGFzIG5vbi1IVE1MCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKTsKLSAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzFdKTsKLSAgICAgICAgICAgIH0KKyAgICAkKCcjcGFja2FnZV9jbGFzc2VzJykudGV4dCh2YWwpOworICAgIC8vJCgnI3BhY2thZ2VfY2xhc3NlcycpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdtdXRlZCcpOworICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ1BBQ0tBR0VfQ0xBU1NFUzonK3ZhbH0pOworICAgICQoIiNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI3BhY2thZ2VfY2xhc3NlcywgI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbicpLnNob3coKTsKKyAgICB9KTsKKyAgfSk7CisgIHslIGVuZGlmICV9CiAKLSAgICAgICAgICAgIC8vIEFkZCB0aGUgdG9vbHRpcHMKLSAgICAgICAgICAgICQoIi5qcy1pY29uLXRyYXNoLWNvbmZpZ192YXIiKS5lYWNoKCBmdW5jdGlvbigpeyBzZXREZWxldGVUb29sdGlwKCQodGhpcykpOyB9KTsKLSAgICAgICAgICAgICQoIi5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyIikuZWFjaChmdW5jdGlvbigpeyBzZXRDaGFuZ2VUb29sdGlwKCQodGhpcykpOyB9KTsKKyAgeyUgaWYgc3N0YXRlX2Rpcl9kZWZpbmVkICV9CiAKLSAgICAgICAgICAgIC8vIHJlLWFzc2VydCB0aGVzZSBldmVudCBoYW5kbGVycwotICAgICAgICAgICAgc2V0RXZlbnRIYW5kbGVyc0ZvckR5bmFtaWNFbGVtZW50cygpOwotICAgICAgICB9CisgIC8vIGNoYW5nZSBTU1RBVEVfRElSIHZhcmlhYmxlCisgICQoJyNjaGFuZ2Utc3N0YXRlX2Rpci1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgJCgnI2NoYW5nZS1zc3RhdGVfZGlyLWZvcm0nKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJyk7CisgICAgLy8gcHJlc2V0IHRoZSBlZGl0IHZhbHVlCisgICAgdmFyIGN1cnJlbnRfdmFsID0gJCgic3BhbiNzc3RhdGVfZGlyIikudGV4dCgpLnRyaW0oKTsKKyAgICBpZiAoY3VycmVudF92YWwgPT0gIk5vdCBzZXQiKSB7CisgICAgICBjdXJyZW50X3ZhbD0iIjsKKyAgICAgICQoIiNhcHBseS1jaGFuZ2Utc3N0YXRlX2RpciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICB9CisgICAgJCgiaW5wdXQjbmV3LXNzdGF0ZV9kaXIiKS52YWwoY3VycmVudF92YWwpOwogCi0gICAgICAgIGZ1bmN0aW9uIG9uRWRpdEFqYXhTdWNjZXNzKGRhdGEsIHRleHRzdGF0dXMpIHsKLSAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCJYSFIgcmV0dXJuZWQ6IiwgZGF0YSwgIigiICsgdGV4dHN0YXR1cyArICIpIik7Ci0gICAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7Ci0gICAgICAgICAgICAgICAgYWxlcnQoImVycm9yIG9uIHJlcXVlc3Q6XG4iICsgZGF0YS5lcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgIC8vIGVuYWJsZSAvIGRpc2FibGUgdGhlIHNhdmUgYnV0dG9uIGJhc2VkIG9uIHRoZSBpbnB1dCB2YWx1ZQorICAgIGlmICggY3VycmVudF92YWwubGVuZ3RoICkgeworICAgICAgJCgiI2FwcGx5LWNoYW5nZS1zc3RhdGVfZGlyIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAkKCIjYXBwbHktY2hhbmdlLXNzdGF0ZV9kaXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgfQogCi0gICAgICAgICAgICAvLyBkZWxheWVkIHBhZ2UgcmVsb2FkPwotICAgICAgICAgICAgaWYgKGRvX3JlbG9hZCkgewotICAgICAgICAgICAgICAgIGRvX3JlbG9hZD1mYWxzZTsKLSAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQodHJ1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAkKCcjY2hhbmdlLXNzdGF0ZV9kaXItaWNvbiwgI3NzdGF0ZV9kaXInKS5oaWRlKCk7CisgICAgJCgiI2NoYW5nZS1zc3RhdGVfZGlyLWZvcm0iKS5zbGlkZURvd24oKTsKKyAgfSk7CiAKLSAgICAgICAgZnVuY3Rpb24gb25FZGl0QWpheEVycm9yKGpxWEhSLCB0ZXh0c3RhdHVzLCBlcnJvcikgewotICAgICAgICAgICAgYWxlcnQoIlhIUiBlcnJvcmVkOlxuIiArIGVycm9yICsgIlxuKCIgKyB0ZXh0c3RhdHVzICsgIikiKTsKLSAgICAgICAgICAgIC8vIHJlLWFzc2VydCB0aGUgZXZlbnQgaGFuZGxlcnMKLSAgICAgICAgfQorICAkKCcjY2FuY2VsLWNoYW5nZS1zc3RhdGVfZGlyJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjaGludEVycm9yLXNzdGF0ZV9kaXIiKS5oaWRlKCk7CisgICAgJCgiI2hpbnRFcnJvci1pbml0aWFsQ2hhci1zc3RhdGVfZGlyIikuaGlkZSgpOworICAgICQoIiNjaGFuZ2Utc3N0YXRlX2Rpci1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNzc3RhdGVfZGlyLCAjY2hhbmdlLXNzdGF0ZV9kaXItaWNvbicpLnNob3coKTsKKyAgICB9KTsKKyAgfSk7CiAKLSAgICAgICAgLyogZW5zdXJlIGNvb2tpZSBleGlzdHMgeyUgY3NyZl90b2tlbiAlfSAqLwotICAgICAgICBmdW5jdGlvbiBwb3N0RWRpdEFqYXhSZXF1ZXN0KHJlcWRhdGEpIHsKLSAgICAgICAgICAgIHZhciBhamF4ID0gJC5hamF4KHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZToiUE9TVCIsCi0gICAgICAgICAgICAgICAgICAgIGRhdGE6ICQucGFyYW0ocmVxZGF0YSksCi0gICAgICAgICAgICAgICAgICAgIHVybDoieyUgdXJsICd4aHJfY29uZmlndmFyZWRpdCcgcHJvamVjdC5pZCV9IiwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nOiAkLmNvb2tpZSgiY3NyZnRva2VuIil9LAotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBvbkVkaXRBamF4U3VjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9uRWRpdEFqYXhFcnJvciwKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0KKyAgJCgiI25ldy1zc3RhdGVfZGlyIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICBpZiAoJCh0aGlzKS52YWwoKS50cmltKCkubGVuZ3RoID09IDApIHsKKyAgICAgICQoIiNhcHBseS1jaGFuZ2Utc3N0YXRlX2RpciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICQoJyNjaGFuZ2Utc3N0YXRlX2Rpci1mb3JtJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgJCgnI2hpbnRFcnJvci1zc3RhdGVfZGlyJykuaGlkZSgpOworICAgICAgJCgnI2hpbnRFcnJvci1pbml0aWFsQ2hhci1zc3RhdGVfZGlyJykuaGlkZSgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7CisgICAgICB2YXIgcmVCZWdpbldpdGhTbGFzaCA9IC9eXC8vOworICAgICAgdmFyIHJlQ2hlY2tWYXJpYWJsZSA9IC9eXCQvOworICAgICAgdmFyIHJlID0gLyhbIDw+XFx8IjpcLiVcP1wqXSspLzsKKyAgICAgIHZhciBpbnZhbGlkRGlyID0gcmUudGVzdChpbnB1dC52YWwoKSk7CisgICAgICB2YXIgaW52YWxpZFNsYXNoID0gcmVCZWdpbldpdGhTbGFzaC50ZXN0KGlucHV0LnZhbCgpKTsKKyAgICAgIHZhciBpbnZhbGlkVmFyID0gcmVDaGVja1ZhcmlhYmxlLnRlc3QoaW5wdXQudmFsKCkpOworICAgICAgaWYgKCFpbnZhbGlkU2xhc2ggJiYgIWludmFsaWRWYXIpIHsKKyAgICAgICAgJCgnI2NoYW5nZS1zc3RhdGVfZGlyLWZvcm0nKS5hZGRDbGFzcygnaGFzLWVycm9yJyk7CisgICAgICAgICQoIiNhcHBseS1jaGFuZ2Utc3N0YXRlX2RpciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgJCgnI2hpbnRFcnJvci1pbml0aWFsQ2hhci1zc3RhdGVfZGlyJykuc2hvdygpOworICAgICAgfSBlbHNlIGlmIChpbnZhbGlkRGlyKSB7CisgICAgICAgICAgJCgnI2NoYW5nZS1zc3RhdGVfZGlyLWZvcm0nKS5hZGRDbGFzcygnaGFzLWVycm9yJyk7CisgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1zc3RhdGVfZGlyIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICQoJyNoaW50RXJyb3Itc3N0YXRlX2RpcicpLnNob3coKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICQoJyNjaGFuZ2Utc3N0YXRlX2Rpci1mb3JtJykucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpOworICAgICAgICAkKCIjYXBwbHktY2hhbmdlLXNzdGF0ZV9kaXIiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAkKCcjaGludEVycm9yLXNzdGF0ZV9kaXInKS5oaWRlKCk7CisgICAgICAgICQoJyNoaW50RXJyb3ItaW5pdGlhbENoYXItc3N0YXRlX2RpcicpLmhpZGUoKTsKKyAgICAgIH0KKyAgICB9CisgIH0pOwogCi0gICAgICAgIGZ1bmN0aW9uIHNldERlbGV0ZVRvb2x0aXAob2JqZWN0KSB7Ci0gICAgICAgICAgICBvYmplY3QudG9vbHRpcCh7IGNvbnRhaW5lcjogJ2JvZHknLCBodG1sOiB0cnVlLCBkZWxheToge3Nob3c6IDQwMH0sIHRpdGxlOiAiRGVsZXRlIiB9KTsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBzZXRDaGFuZ2VUb29sdGlwKG9iamVjdCkgewotICAgICAgICAgICAgb2JqZWN0LnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiA0MDB9LCB0aXRsZTogIkNoYW5nZSIgfSk7Ci0gICAgICAgIH0KKyAgJCgnI2FwcGx5LWNoYW5nZS1zc3RhdGVfZGlyJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICB2YXIgdmFsdWUgPSAkKCcjbmV3LXNzdGF0ZV9kaXInKS52YWwoKS50cmltKCk7CisgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnU1NUQVRFX0RJUjonK3ZhbHVlfSk7CisgICAgJCgnI3NzdGF0ZV9kaXInKS50ZXh0KHZhbHVlKTsKKyAgICAkKCcjc3N0YXRlX2RpcicpLnJlbW92ZUNsYXNzKCd0ZXh0LW11dGVkJyk7CisgICAgJCgiI2NoYW5nZS1zc3RhdGVfZGlyLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uICgpIHsKKyAgICAgICQoJyNzc3RhdGVfZGlyLCAjY2hhbmdlLXNzdGF0ZV9kaXItaWNvbicpLnNob3coKTsKKyAgICB9KTsKKyAgfSk7CiAKLSAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgIHslIGVuZGlmICV9CiAKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBSZWdpc3RlciBoYW5kbGVycyBmb3Igc3RhdGljIGVsZW1lbnRzCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQotICAgICAgICAgICAgLy8gY2hhbmdlIGRpc3RybyB2YXJpYWJsZQotICAgICAgICAgICAgJCgnI2NoYW5nZS1kaXN0cm8taWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtZGlzdHJvLWljb24sICNkaXN0cm8nKS5oaWRlKCk7Ci0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1kaXN0cm8tZm9ybSIpLnNsaWRlRG93bigpOwotICAgICAgICAgICAgICAgICQoIiNuZXctZGlzdHJvIikudmFsKCAkKCcjZGlzdHJvJykudGV4dCgpICk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtZGlzdHJvJykuY2xpY2soZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3RybywgI2NoYW5nZS1kaXN0cm8taWNvbicpLnNob3coKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBhbnkgZGFuZ2xpbmcgZXJyb3Igc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQtZGlzdHJvLW5hbWUtZGl2Iik7Ci0gICAgICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgLy8gdmFsaWRhdGUgbmV3IGRpc3RybyBuYW1lCi0gICAgICAgICAgICAkKCJpbnB1dCNuZXctZGlzdHJvIikub24oJ2lucHV0JywgZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgICAgIHZhbGlkYXRlX2Rpc3Ryb19uYW1lKCk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1kaXN0cm8nKS5jbGljayhmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIC8vJCgnI3JlcG8nKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaGlnaGxpZ2h0LWdvJyk7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjbmV3LWRpc3RybycpLnZhbCgpOwotICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0RJU1RSTzonK25hbWV9KTsKLSAgICAgICAgICAgICAgICAkKCcjZGlzdHJvJykudGV4dChuYW1lKTsKLSAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoJyNkaXN0cm8sICNjaGFuZ2UtZGlzdHJvLWljb24nKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0KLSAgICAgICAgICAgIHslIGlmIGRsX2Rpcl9kZWZpbmVkICV9Ci0KLSAgICAgICAgICAgIC8vIGNoYW5nZSBETF9ESVIgdmFyaWFibGUKLSAgICAgICAgICAgICQoJyNjaGFuZ2UtZGxfZGlyLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAkKCcjaGludEVycm9yLWRsX2RpcicpLmhpZGUoKTsKLQkgICAgICAgIC8vIHByZXNldCB0aGUgZWRpdCB2YWx1ZQotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X3ZhbCA9ICQoInNwYW4jZGxfZGlyIikudGV4dCgpLnRyaW0oKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudF92YWwgPT0gIk5vdCBzZXQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmFsPSIiOwotICAgICAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRsX2RpciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJCgiaW5wdXQjbmV3LWRsX2RpciIpLnZhbChjdXJyZW50X3ZhbCk7Ci0KLSAgICAgICAgICAgICAgICAkKCcjY2hhbmdlLWRsX2Rpci1pY29uLCAjZGxfZGlyJykuaGlkZSgpOwotICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtZGxfZGlyLWZvcm0iKS5zbGlkZURvd24oKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAkKCcjY2FuY2VsLWNoYW5nZS1kbF9kaXInKS5jbGljayhmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtZGxfZGlyLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAkKCcjZGxfZGlyLCAjY2hhbmdlLWRsX2Rpci1pY29uJykuc2hvdygpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICQoIiNuZXctZGxfZGlyIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKLQkgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLnRyaW0oKS5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRsX2RpciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IC9eXC8oW14gPD5cXHwiOlwuJVw/XCpdKykkLzsKLQkgICAgICAgICAgICB2YXIgaW52YWxpZERpciA9IHJlLnRlc3QoaW5wdXQudmFsKCkpOwotCQkgICAgY29uc29sZS5sb2coaW52YWxpZERpcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggaW52YWxpZERpciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQoJyN2YWxpZGF0ZS1kbF9kaXInKS5yZW1vdmVDbGFzcygnY29udHJvbC1ncm91cCBlcnJvcicpOwotCQkJJCgiI2FwcGx5LWNoYW5nZS1kbF9kaXIiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2hpbnRFcnJvci1kbF9kaXInKS5oaWRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkKCcjdmFsaWRhdGUtZGxfZGlyJykuYWRkQ2xhc3MoJ2NvbnRyb2wtZ3JvdXAgZXJyb3InKTsKLQkJCSQoIiNhcHBseS1jaGFuZ2UtZGxfZGlyIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2hpbnRFcnJvci1kbF9kaXInKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1kbF9kaXInKS5jbGljayhmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICQoJyNuZXctZGxfZGlyJykudmFsKCkudHJpbSgpOwotICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0RMX0RJUjonK3ZhbHVlfSk7Ci0gICAgICAgICAgICAgICAgJCgnI2RsX2RpcicpLnRleHQodmFsdWUpOwotICAgICAgICAgICAgICAgICQoJyNkbF9kaXInKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKLSAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRsX2Rpci1mb3JtIikuc2xpZGVVcChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoJyNkbF9kaXIsICNjaGFuZ2UtZGxfZGlyLWljb24nKS5zaG93KCk7Ci0gICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICB7JSBlbmRpZiAlfQotCi0gICAgICAgICAgICB7JSBpZiBmc3R5cGVzX2RlZmluZWQgJX0KLSAgICAgICAgICAgIC8vIGNoYW5nZSBJTUFHRV9GU1RZUEVTIHZhcmlhYmxlCi0KLSAgICAgICAgICAgICQoJyNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24sICNpbWFnZV9mc3R5cGVzJykuaGlkZSgpOwotICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1mb3JtIikuc2xpZGVEb3duKCk7Ci0gICAgICAgICAgICAgICAgLy8gYXZvaWQgZmFsc2Ugc3Vic3RyaW5nIG1hdGNoZXMgYnkgaW5jbHVkaW5nIHNwYWNlIHNlcGFyYXRvcnMKLSAgICAgICAgICAgICAgICB2YXIgaHRtbCAgICAgICAgID0gIiI7Ci0gICAgICAgICAgICAgICAgdmFyIGZzdHlwZXMgICAgICA9ICIgIiArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbWFnZV9mc3R5cGVzIikuaW5uZXJIVE1MICsgIiAiOwotICAgICAgICAgICAgICAgIHZhciBmc3R5cGVzX2xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jaGVja2JveC1mc3R5cGVzLWxpc3QnKTsKLSAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGNoZWNrZWQgYm94ZXMgZmlyc3QKLSAgICAgICAgICAgICAgICBpZiAoIiAgIiAhPSBmc3R5cGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmc3R5cGVzX2xpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwIDw9IGZzdHlwZXMuaW5kZXhPZigiICIrZnN0eXBlc19saXN0W2ldLnZhbHVlKyIgIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxhYmVsIGNsYXNzPSJjaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZnMtY2hlY2tib3gtZnN0eXBlcyIgdmFsdWU9IicrZnN0eXBlc19saXN0W2ldLnZhbHVlKyciIGNoZWNrZWQ9ImNoZWNrZWQiPicrZnN0eXBlc19saXN0W2ldLnZhbHVlKyc8L2xhYmVsPlxuJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHVuLWNoZWNrZWQgYm94ZXMgc2Vjb25kCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGZzdHlwZXNfbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoMCAgPiBmc3R5cGVzLmluZGV4T2YoIiAiK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsiICIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8bGFiZWwgY2xhc3M9ImNoZWNrYm94Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJmcy1jaGVja2JveC1mc3R5cGVzIiB2YWx1ZT0iJytmc3R5cGVzX2xpc3RbaV0udmFsdWUrJyI+Jytmc3R5cGVzX2xpc3RbaV0udmFsdWUrJzwvbGFiZWw+XG4nOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgJ25vIHNlYXJjaCBtYXRjaGVzJyBsaW5lIGxhc3QKLSAgICAgICAgICAgICAgICBodG1sICs9ICc8bGFiZWwgaWQ9Im5vLW1hdGNoLWZzdHlwZXMiPk5vIGltYWdlIHR5cGVzIGZvdW5kPC9sYWJlbD5cbic7Ci0gICAgICAgICAgICAgICAgLy8gRGlzcGxheSB0aGUgbGlzdAotICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGwtaW1hZ2VfZnN0eXBlcyIpLmlubmVySFRNTCA9IGh0bWw7Ci0gICAgICAgICAgICAgICAgJCgnI25vLW1hdGNoLWZzdHlwZXMnKS5oaWRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXYXRjaCBlbGVtZW50cyB0byBkaXNhYmxlIFNhdmUgd2hlbiBub25lIGFyZSBjaGVja2VkCi0gICAgICAgICAgICAgICAgJCgiLmZzLWNoZWNrYm94LWZzdHlwZXMiKS5lYWNoKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVGc1R5cGVzU2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIC8vIGNsZWFyIHRoZSBwcmV2aW91cyBmaWx0ZXIgdmFsdWVzIGFuZCB3YXJuaW5nIG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgJCgiaW5wdXQjZmlsdGVyLWltYWdlX2ZzdHlwZXMiKS52YWwoIiIpOwotICAgICAgICAgICAgICAgICQoJyNmc3R5cGVzLWVycm9yLW1lc3NhZ2UnKS5oaWRlKCk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLmNsaWNrKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfZnN0eXBlcywgI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgJCgnI2ZpbHRlci1pbWFnZV9mc3R5cGVzJykub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9ICQodGhpcykudmFsKCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2hDb3VudD0wOwotICAgICAgICAgICAgICAgICQoJyNhbGwtaW1hZ2VfZnN0eXBlcyBsYWJlbCcpLmVhY2goZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSAkKHRoaXMpLnRleHQoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0LmluZGV4T2YodmFsVGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnNob3coKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoQ291bnQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuaGlkZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoQ291bnQgPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAkKCcjbm8tbWF0Y2gtZnN0eXBlcycpLnNob3coKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICQoJyNuby1tYXRjaC1mc3R5cGVzJykuaGlkZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAkKCcjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMnKS5jbGljayhmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIHNlbGVjdGVkIGZzdHlwZXMgYW5kIHNvcnQgdGhlbQotICAgICAgICAgICAgICAgIHZhciBmc3R5cGVzX2FycmF5ID0gW107Ci0gICAgICAgICAgICAgICAgdmFyIGNoZWNrYm94ZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmcy1jaGVja2JveC1mc3R5cGVzJyk7Ci0gICAgICAgICAgICAgICAgJCgiLmZzLWNoZWNrYm94LWZzdHlwZXM6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgZnN0eXBlc19hcnJheS5wdXNoKCQodGhpcykudmFsKCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGZzdHlwZXNfYXJyYXkuc29ydCgpOwotCi0gICAgICAgICAgICAgICAgLy8gbm93IG1ha2UgYSBzdHJpbmcgb2YgdGhlbQotICAgICAgICAgICAgICAgIHZhciBmc3R5cGVzID0gJyc7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGZzdHlwZXNfYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZnN0eXBlcyArPSBmc3R5cGVzX2FycmF5W2ldICsgJyAnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmc3R5cGVzID0gZnN0eXBlcy50cmltKCk7Ci0KLSAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdJTUFHRV9GU1RZUEVTOicrZnN0eXBlc30pOwotICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzJykudGV4dChmc3R5cGVzKTsKLSAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfZnN0eXBlcycpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdtdXRlZCcpOwotCi0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfZnN0eXBlcywgI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0KLQotICAgICAgICAgICAgeyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmRfZGVmaW5lZCAlfQotCi0gICAgICAgICAgICAvLyBpbml0IElNQUdFX0lOU1RBTExfYXBwZW5kIHRyYXNoIGljb24KLSAgICAgICAgICAgIHNldERlbGV0ZVRvb2x0aXAoJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKSk7Ci0KLSAgICAgICAgICAgIC8vIGNoYW5nZSBJTUFHRV9JTlNUQUxMX2FwcGVuZCB2YXJpYWJsZQotICAgICAgICAgICAgJCgnI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyBwcmVzZXQgdGhlIGVkaXQgdmFsdWUKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudF92YWwgPSAkKCJzcGFuI2ltYWdlX2luc3RhbGwiKS50ZXh0KCkudHJpbSgpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50X3ZhbCA9PSAiTm90IHNldCIpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudF92YWw9IiI7Ci0gICAgICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBpbnN1cmUgdGhlc2Ugbm9uLWVtcHR5IHZhbHVlcyBoYXZlIHNpbmdsZSBzcGFjZSBwcmVmaXgKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudF92YWw9IiAiICsgY3VycmVudF92YWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICQoImlucHV0I25ldy1pbWFnZV9pbnN0YWxsIikudmFsKGN1cnJlbnRfdmFsKTsKLQotICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uLCAjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbiwgI2ltYWdlX2luc3RhbGwnKS5oaWRlKCk7Ci0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWZvcm0iKS5zbGlkZURvd24oKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAkKCcjY2FuY2VsLWNoYW5nZS1pbWFnZV9pbnN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsLCAjY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbicpLnNob3coKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCQoInNwYW4jaW1hZ2VfaW5zdGFsbCIpLnRleHQoKSAhPSAiTm90IHNldCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykuc2hvdygpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGVsZXRlVG9vbHRpcCgkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICQoIiNuZXctaW1hZ2VfaW5zdGFsbCIpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkudHJpbSgpLmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCcpLmNsaWNrKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgLy8gaW5zdXJlIHRoZXNlIG5vbi1lbXB0eSB2YWx1ZXMgaGF2ZSBzaW5nbGUgc3BhY2UgcHJlZml4Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gIiAiICsgJCgnI25ldy1pbWFnZV9pbnN0YWxsJykudmFsKCkudHJpbSgpOwotICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0lNQUdFX0lOU1RBTExfYXBwZW5kOicrdmFsdWV9KTsKLSAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLnRleHQodmFsdWUpOwotICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykucmVtb3ZlQ2xhc3MoJ211dGVkJyk7Ci0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwsICNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uJykuc2hvdygpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykuc2hvdygpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGVsZXRlVG9vbHRpcCgkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgLy8gZGVsZXRlIElNQUdFX0lOU1RBTExfYXBwZW5kIHZhcmlhYmxlIHZhbHVlCi0gICAgICAgICAgICAkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgJCh0aGlzKS50b29sdGlwKCdoaWRlJyk7Ci0gICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnSU1BR0VfSU5TVEFMTF9hcHBlbmQ6JysnJ30pOwotICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykucGFyZW50KCkuZmFkZU91dCgxMDAwLCBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLmFkZENsYXNzKCdtdXRlZCcpOwotICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLnRleHQoJ05vdCBzZXQnKTsKLSAgICAgICAgICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5oaWRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykucGFyZW50KCkuZmFkZUluKDEwMDApOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotCi0KLSAgICAgICAgICAgIHslIGlmIHBhY2thZ2VfY2xhc3Nlc19kZWZpbmVkICV9Ci0gICAgICAgICAgICAvLyBjaGFuZ2UgUEFDS0FHRV9DTEFTU0VTIHZhcmlhYmxlCi0gICAgICAgICAgICAkKCcjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbiwgI3BhY2thZ2VfY2xhc3NlcycpLmhpZGUoKTsKLSAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1mb3JtIikuc2xpZGVEb3duKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIHRoZSBwdWxsZG93biBhbmQgY2hlY2tib3hlcwotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICQoIiNwYWNrYWdlX2NsYXNzZXMiKS50ZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJwYWNrYWdlX2RlYiIpID09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzZXMtc2VsZWN0IikucHJvcCgnc2VsZWN0ZWRJbmRleCcsIDApOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX2lwayIpID4gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzFfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9ycG0iKSA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18yX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoInBhY2thZ2VfaXBrIikgPT0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKS5wcm9wKCdzZWxlY3RlZEluZGV4JywgMSk7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfZGViIikgPiAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX3JwbSIpID4gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigicGFja2FnZV9ycG0iKSA9PSAwICkgewotICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc2VzLXNlbGVjdCIpLnByb3AoJ3NlbGVjdGVkSW5kZXgnLCAyKTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9kZWIiKSA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18xX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfaXBrIikgPiAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMl9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICQoJyNjYW5jZWwtY2hhbmdlLXBhY2thZ2VfY2xhc3NlcycpLmNsaWNrKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzZXMsICNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24nKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgJCgnc2VsZWN0JykuY2hhbmdlKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAkKCcjYXBwbHktY2hhbmdlLXBhY2thZ2VfY2xhc3NlcycpLmNsaWNrKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdmFyIGUgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYWNrYWdlX2NsYXNzZXMtc2VsZWN0Iik7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGUub3B0aW9uc1tlLnNlbGVjdGVkSW5kZXhdLnRleHQ7Ci0KLSAgICAgICAgICAgICAgICBwYzFfY2hlY2tlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiKS5jaGVja2VkOwotICAgICAgICAgICAgICAgIHBjMl9jaGVja2VkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhY2thZ2VfY2xhc3NfMl9pbnB1dCIpLmNoZWNrZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAicGFja2FnZV9kZWIiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYzFfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX2lwayI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX3JwbSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInBhY2thZ2VfaXBrIikgewotICAgICAgICAgICAgICAgICAgICBpZiAocGMxX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9kZWIiOwotICAgICAgICAgICAgICAgICAgICBpZiAocGMyX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9ycG0iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsID09ICJwYWNrYWdlX3JwbSIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfZGViIjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBjMl9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfaXBrIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc2VzJykudGV4dCh2YWwpOwotICAgICAgICAgICAgICAgIC8vJCgnI3BhY2thZ2VfY2xhc3NlcycpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdtdXRlZCcpOwotICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ1BBQ0tBR0VfQ0xBU1NFUzonK3ZhbH0pOwotICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc2VzLCAjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uJykuc2hvdygpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotCi0gICAgICAgICAgICB7JSBpZiBzc3RhdGVfZGlyX2RlZmluZWQgJX0KLQotICAgICAgICAgICAgLy8gY2hhbmdlIFNTVEFURV9ESVIgdmFyaWFibGUKLSAgICAgICAgICAgICQoJyNjaGFuZ2Utc3N0YXRlX2Rpci1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgJCgnI2hpbnRFcnJvci1zc3RhdGVfZGlyJykuaGlkZSgpOwotICAgICAgICAgICAgICAgIC8vIHByZXNldCB0aGUgZWRpdCB2YWx1ZQotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X3ZhbCA9ICQoInNwYW4jc3N0YXRlX2RpciIpLnRleHQoKS50cmltKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfdmFsID09ICJOb3Qgc2V0IikgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZhbD0iIjsKLSAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1zc3RhdGVfZGlyIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAkKCJpbnB1dCNuZXctc3N0YXRlX2RpciIpLnZhbChjdXJyZW50X3ZhbCk7Ci0KLSAgICAgICAgICAgICAgICAkKCcjY2hhbmdlLXNzdGF0ZV9kaXItaWNvbiwgI3NzdGF0ZV9kaXInKS5oaWRlKCk7Ci0gICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1zc3RhdGVfZGlyLWZvcm0iKS5zbGlkZURvd24oKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAkKCcjY2FuY2VsLWNoYW5nZS1zc3RhdGVfZGlyJykuY2xpY2soZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXNzdGF0ZV9kaXItZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoJyNzc3RhdGVfZGlyLCAjY2hhbmdlLXNzdGF0ZV9kaXItaWNvbicpLnNob3coKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAkKCIjbmV3LXNzdGF0ZV9kaXIiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLnRyaW0oKS5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLXNzdGF0ZV9kaXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSAvXlwvKFteIDw+XFx8IjpcLiVcP1wqXSspJC87Ci0JICAgICAgICAgICAgdmFyIGludmFsaWREaXIgPSByZS50ZXN0KGlucHV0LnZhbCgpKTsKLQkJICAgIGNvbnNvbGUubG9nKGludmFsaWREaXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGludmFsaWREaXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkKCcjdmFsaWRhdGUtc3N0YXRlX2RpcicpLnJlbW92ZUNsYXNzKCdjb250cm9sLWdyb3VwIGVycm9yJyk7Ci0JCQkkKCIjYXBwbHktY2hhbmdlLXNzdGF0ZV9kaXIiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2hpbnRFcnJvci1zc3RhdGVfZGlyJykuaGlkZSgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3ZhbGlkYXRlLXNzdGF0ZV9kaXInKS5hZGRDbGFzcygnY29udHJvbC1ncm91cCBlcnJvcicpOwotCQkJJCgiI2FwcGx5LWNoYW5nZS1zc3RhdGVfZGlyIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2hpbnRFcnJvci1zc3RhdGVfZGlyJykuc2hvdygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2Utc3N0YXRlX2RpcicpLmNsaWNrKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJCgnI25ldy1zc3RhdGVfZGlyJykudmFsKCkudHJpbSgpOwotICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ1NTVEFURV9ESVI6Jyt2YWx1ZX0pOwotICAgICAgICAgICAgICAgICQoJyNzc3RhdGVfZGlyJykudGV4dCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgJCgnI3NzdGF0ZV9kaXInKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKLSAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXNzdGF0ZV9kaXItZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAkKCcjc3N0YXRlX2RpciwgI2NoYW5nZS1zc3RhdGVfZGlyLWljb24nKS5zaG93KCk7Ci0gICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICB7JSBlbmRpZiAlfQotCi0gICAgICAgICAgICAvLyBhZGQgbmV3IHZhcmlhYmxlCi0gICAgICAgICAgICAkKCJidXR0b24jYWRkLWNvbmZpZ3Zhci1idXR0b24iKS5jbGljayggZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9ICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlICAgID0gJCgiaW5wdXQjdmFsdWUiKS52YWwoKTsKKyAgLy8gYWRkIG5ldyB2YXJpYWJsZQorICAkKCJidXR0b24jYWRkLWNvbmZpZ3Zhci1idXR0b24iKS5jbGljayggZnVuY3Rpb24gKGV2dCkgeworICAgIHZhciB2YXJpYWJsZSA9ICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCk7CisgICAgdmFyIHZhbHVlICAgID0gJCgiaW5wdXQjdmFsdWUiKS52YWwoKTsKIAotICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJBZGQiIDogdmFyaWFibGUrJzonK3ZhbHVlfSk7CisgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckFkZCIgOiB2YXJpYWJsZSsnOicrdmFsdWV9KTsKIAotICAgICAgICAgICAgICAgIC8vIGNsZWFyIHRoZSBwcmV2aW91cyB2YWx1ZXMKLSAgICAgICAgICAgICAgICAkKCJpbnB1dCN2YXJpYWJsZSIpLnZhbCgiIik7Ci0gICAgICAgICAgICAgICAgJCgiaW5wdXQjdmFsdWUiKS52YWwoIiIpOwotICAgICAgICAgICAgICAgIC8vIERpc2FibGUgYWRkIGJ1dHRvbgotICAgICAgICAgICAgICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIC8vIGNsZWFyIHRoZSBwcmV2aW91cyB2YWx1ZXMKKyAgICAkKCJpbnB1dCN2YXJpYWJsZSIpLnZhbCgiIik7CisgICAgJCgiaW5wdXQjdmFsdWUiKS52YWwoIiIpOworICAgIC8vIERpc2FibGUgYWRkIGJ1dHRvbgorICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwogCi0gICAgICAgICAgICAgICAgLy8gUmVsb2FkIHBhZ2UgaWYgYWRtaW4tcmVtb3ZlZCBjb3JlIG1hbmFnZWQgdmFsdWUgaXMgbWFudWFsbHkgYWRkZWQgYmFjayBpbgotICAgICAgICAgICAgICAgIGlmICgwIDw9ICIgRElTVFJPIERMX0RJUiBJTUFHRV9GU1RZUEVTIElNQUdFX0lOU1RBTExfYXBwZW5kIFBBQ0tBR0VfQ0xBU1NFUyBTU1RBVEVfRElSICIuaW5kZXhPZiggIiAiK3ZhcmlhYmxlKyIgIiApKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRlbGF5ZWQgcmVsb2FkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdpdGggcG9zdEVkaXRBamF4UmVxdWVzdAotICAgICAgICAgICAgICAgICAgICBkb19yZWxvYWQ9dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKKyAgICAvLyBSZWxvYWQgcGFnZSBpZiBhZG1pbi1yZW1vdmVkIGNvcmUgbWFuYWdlZCB2YWx1ZSBpcyBtYW51YWxseSBhZGRlZCBiYWNrIGluCisgICAgaWYgKDAgPD0gIiBESVNUUk8gRExfRElSIElNQUdFX0ZTVFlQRVMgSU1BR0VfSU5TVEFMTF9hcHBlbmQgUEFDS0FHRV9DTEFTU0VTIFNTVEFURV9ESVIgIi5pbmRleE9mKCAiICIrdmFyaWFibGUrIiAiICkpIHsKKyAgICAgIC8vIGRlbGF5ZWQgcmVsb2FkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdpdGggcG9zdEVkaXRBamF4UmVxdWVzdAorICAgICAgZG9fcmVsb2FkPXRydWU7CisgICAgfQorICB9KTsKIAotICAgICAgICAgICAgLy8gdmFsaWRhdGUgbmV3IHZhcmlhYmxlIG5hbWUgYW5kIHZhbHVlCi0gICAgICAgICAgICAkKCIjdmFyaWFibGUsICN2YWx1ZSIpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhbGlkYXRlX25ld192YXJpYWJsZSgpOwotICAgICAgICAgICAgfSk7CisgIC8vIHZhbGlkYXRlIG5ldyB2YXJpYWJsZSBuYW1lIGFuZCB2YWx1ZQorICAkKCIjdmFyaWFibGUsICN2YWx1ZSIpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeworICAgIHZhbGlkYXRlX25ld192YXJpYWJsZSgpOworICB9KTsKIAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGRyYXcgYW5kIHJlZ2lzdGVyIHRoZSBkeW5hbWljIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZCBoYW5kbGVycwotICAgICAgICAgICAgLy8KKyAgLy8KKyAgLy8gZHJhdyBhbmQgcmVnaXN0ZXIgdGhlIGR5bmFtaWMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kIGhhbmRsZXJzCisgIC8vCiAKLSAgICAgICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgICAgIGNvbmZpZ3ZhcnMgOiBbXQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHslIGZvciBjIGluIGNvbmZpZ3ZhcnMgJX0KLSAgICAgICAgICAgICAgICBkYXRhLmNvbmZpZ3ZhcnMucHVzaChbICJ7e2MubmFtZX19Iiwie3tjLnZhbHVlfX0iLCJ7e2MucGt9fSIgXSk7Ci0gICAgICAgICAgICAgICAgeyUgaWYgJycgIT0gdmFyc19jb250ZXh0fGdldF9kaWN0X3ZhbHVlOmMubmFtZSAlfQotICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcnNfY29udGV4dFsgInt7Yy5uYW1lfX0iIF0gPSAie3t2YXJzX2NvbnRleHR8Z2V0X2RpY3RfdmFsdWU6Yy5uYW1lIH19IjsKLSAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgIHZhciBkYXRhID0geworICAgIGNvbmZpZ3ZhcnMgOiBbXQorICB9OworICB7JSBmb3IgYyBpbiBjb25maWd2YXJzICV9CisgIGRhdGEuY29uZmlndmFycy5wdXNoKFsgInt7Yy5uYW1lfX0iLCJ7e2MudmFsdWV9fSIsInt7Yy5wa319IiBdKTsKKyAgeyUgaWYgJycgIT0gdmFyc19jb250ZXh0fGdldF9kaWN0X3ZhbHVlOmMubmFtZSAlfQorICBkYXRhLnZhcnNfY29udGV4dFsgInt7Yy5uYW1lfX0iIF0gPSAie3t2YXJzX2NvbnRleHR8Z2V0X2RpY3RfdmFsdWU6Yy5uYW1lIH19IjsKKyAgeyUgZW5kaWYgJX0KKyAgeyUgZW5kZm9yICV9CiAKLSAgICAgICAgICAgIC8vIGRyYXcgdGhlc2UgZWxlbWVudHMgYW5kIGFzc2VydCB0aGVpciBldmVudCBoYW5kbGVycwotICAgICAgICAgICAgb25FZGl0UGFnZVVwZGF0ZShkYXRhKTsKLSAgICAgICAgfSk7CisgIC8vIGRyYXcgdGhlc2UgZWxlbWVudHMgYW5kIGFzc2VydCB0aGVpciBldmVudCBoYW5kbGVycworICBvbkVkaXRQYWdlVXBkYXRlKGRhdGEpOworfSk7CiAKLSAgICA8L3NjcmlwdD4KKzwvc2NyaXB0PgogCiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHMtdG9hc3RlcnRhYmxlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0cy10b2FzdGVydGFibGUuaHRtbAppbmRleCA1ODE0ZjMyLi5kODAyMGE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0cy10b2FzdGVydGFibGUuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0cy10b2FzdGVydGFibGUuaHRtbApAQCAtNCwzMyArNCwzOSBAQAogCiB7JSBibG9jayBwYWdlY29udGVudCAlfQogCi0gIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIHRvcC1haXIiPgotICAgIDxoMSBkYXRhLXJvbGU9InBhZ2UtdGl0bGUiPjwvaDE+Ci0gIDwvZGl2PgorPGRpdiBjbGFzcz0icm93Ij4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KIAotICB7JSB1cmwgJ3Byb2plY3RzJyBhcyB4aHJfdGFibGVfdXJsICV9Ci0gIHslIGluY2x1ZGUgJ3RvYXN0ZXJ0YWJsZS5odG1sJyAlfQorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgIDxoMSBkYXRhLXJvbGU9InBhZ2UtdGl0bGUiPjwvaDE+CisgICAgPC9kaXY+CiAKLSAgPHNjcmlwdD4KLSAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgdGFibGVFbHQgPSAkKCIje3t0YWJsZV9uYW1lfX0iKTsKLSAgICAgIHZhciB0aXRsZUVsdCA9ICQoIltkYXRhLXJvbGU9J3BhZ2UtdGl0bGUnXSIpOworICAgIHslIHVybCAncHJvamVjdHMnIGFzIHhocl90YWJsZV91cmwgJX0KKyAgICB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUuaHRtbCcgJX0KIAotICAgICAgdGFibGVFbHQub24oInRhYmxlLWRvbmUiLCBmdW5jdGlvbiAoZSwgdG90YWwsIHRhYmxlUGFyYW1zKSB7Ci0gICAgICAgIHZhciB0aXRsZSA9ICJBbGwgcHJvamVjdHMiOworICAgIDxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgdmFyIHRhYmxlRWx0ID0gJCgiI3t7dGFibGVfbmFtZX19Iik7CisgICAgdmFyIHRpdGxlRWx0ID0gJCgiW2RhdGEtcm9sZT0ncGFnZS10aXRsZSddIik7CiAKLSAgICAgICAgaWYgKHRhYmxlUGFyYW1zLnNlYXJjaCB8fCB0YWJsZVBhcmFtcy5maWx0ZXIpIHsKLSAgICAgICAgICBpZiAodG90YWwgPT09IDApIHsKLSAgICAgICAgICAgIHRpdGxlID0gIk5vIHByb2plY3RzIGZvdW5kIjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodG90YWwgPiAwKSB7Ci0gICAgICAgICAgICB0aXRsZSA9IHRvdGFsICsgIiBwcm9qZWN0IiArICh0b3RhbCA+IDEgPyAncycgOiAnJykgKyAiIGZvdW5kIjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICB0YWJsZUVsdC5vbigidGFibGUtZG9uZSIsIGZ1bmN0aW9uIChlLCB0b3RhbCwgdGFibGVQYXJhbXMpIHsKKyAgICAgIHZhciB0aXRsZSA9ICJBbGwgcHJvamVjdHMiOwogCi0gICAgICAgIHRpdGxlRWx0LnRleHQodGl0bGUpOworICAgICAgaWYgKHRhYmxlUGFyYW1zLnNlYXJjaCB8fCB0YWJsZVBhcmFtcy5maWx0ZXIpIHsKKyAgICAgIGlmICh0b3RhbCA9PT0gMCkgeworICAgICAgdGl0bGUgPSAiTm8gcHJvamVjdHMgZm91bmQiOworICAgICAgfQorICAgICAgZWxzZSBpZiAodG90YWwgPiAwKSB7CisgICAgICB0aXRsZSA9IHRvdGFsICsgIiBwcm9qZWN0IiArICh0b3RhbCA+IDEgPyAncycgOiAnJykgKyAiIGZvdW5kIjsKKyAgICAgIH0KKyAgICAgIH0KKworICAgICAgdGl0bGVFbHQudGV4dCh0aXRsZSk7CiAgICAgICB9KTsKICAgICB9KTsKLSAgPC9zY3JpcHQ+CisgICAgPC9zY3JpcHQ+CisKKyAgPC9kaXY+Cis8L2Rpdj4KIAogeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbAppbmRleCAwMDdkZTA2Li43NjhjYTk0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0dG9wYmFyLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHRvcGJhci5odG1sCkBAIC0xNiw2MyArMTYsNjQgQEAKICAgfSk7CiA8L3NjcmlwdD4KIAotPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyBsZWFkIiBpZD0icHJvamVjdC1jcmVhdGVkLW5vdGlmaWNhdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6MTVweDsgZGlzcGxheTpub25lIj4KLSAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJhbGVydCI+w5c8L2J1dHRvbj4KLSAgWW91ciBwcm9qZWN0IDxzdHJvbmc+e3twcm9qZWN0Lm5hbWV9fTwvc3Ryb25nPiBoYXMgYmVlbiBjcmVhdGVkLiBZb3UgY2FuIG5vdyA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RtYWNoaW5lcycgcHJvamVjdC5pZCAlfSI+c2VsZWN0IHlvdXIgdGFyZ2V0IG1hY2hpbmU8L2E+IGFuZCA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RpbWFnZXJlY2lwZXMnIHByb2plY3QuaWQgJX0iPmNob29zZSBpbWFnZSByZWNpcGVzPC9hPiB0byBidWlsZC4KLTwvZGl2PgorPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyBhbGVydC1kaXNtaXNzaWJsZSBjaGFuZ2Utbm90aWZpY2F0aW9uIiBpZD0icHJvamVjdC1jcmVhdGVkLW5vdGlmaWNhdGlvbiIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJhbGVydCI+JnRpbWVzOzwvYnV0dG9uPgorCQk8cD5Zb3VyIHByb2plY3QgPHN0cm9uZz57e3Byb2plY3QubmFtZX19PC9zdHJvbmc+IGhhcyBiZWVuIGNyZWF0ZWQuIFlvdSBjYW4gbm93IDxhIGNsYXNzPSJhbGVydC1saW5rIiBocmVmPSJ7JSB1cmwgJ3Byb2plY3RtYWNoaW5lcycgcHJvamVjdC5pZCAlfSI+c2VsZWN0IHlvdXIgdGFyZ2V0IG1hY2hpbmU8L2E+IGFuZCA8YSBjbGFzcz0iYWxlcnQtbGluayIgaHJlZj0ieyUgdXJsICdwcm9qZWN0aW1hZ2VyZWNpcGVzJyBwcm9qZWN0LmlkICV9Ij5jaG9vc2UgaW1hZ2UgcmVjaXBlczwvYT4gdG8gYnVpbGQuPC9wPgorICA8L2Rpdj4KKyAgPCEtLSBwcm9qZWN0IG5hbWUgLS0+CisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICA8aDEgaWQ9InByb2plY3QtbmFtZS1jb250YWluZXIiPgorICAgICAgPHNwYW4gY2xhc3M9InByb2plY3QtbmFtZSI+e3twcm9qZWN0Lm5hbWV9fTwvc3Bhbj4KIAotPCEtLSBwcm9qZWN0IG5hbWUgLS0+Ci08ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+Ci0gIDxoMSBpZD0icHJvamVjdC1uYW1lLWNvbnRhaW5lciI+Ci0gICAgPHNwYW4gaWQ9InByb2plY3QtbmFtZSI+e3twcm9qZWN0Lm5hbWV9fTwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXQiIGlkPSJwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSI+PC9pPgogCi0gICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIGlkPSJwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSIgdGl0bGU9IiI+PC9pPgorICAgICAgeyUgaWYgcHJvamVjdC5pc19kZWZhdWx0ICV9CisgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyBwcm9qZWN0IHNob3dzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZHMgeW91IHN0YXJ0IGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aGlsZSBUb2FzdGVyIGlzIHJ1bm5pbmciPjwvc3Bhbj4KKyAgICAgIHslIGVuZGlmICV9CisgICAgPC9oMT4KKyAgICA8Zm9ybSBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIiBjbGFzcz0iZm9ybS1pbmxpbmUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CisgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtbGciIHR5cGU9InRleHQiIGlkPSJwcm9qZWN0LW5hbWUtY2hhbmdlLWlucHV0IiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9Int7cHJvamVjdC5uYW1lfX0iPgorICAgICAgPC9kaXY+CisgICAgICA8YnV0dG9uIGlkPSJwcm9qZWN0LW5hbWUtY2hhbmdlLWJ0biIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tbGciIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgPGEgaHJlZj0iIyIgaWQ9InByb2plY3QtbmFtZS1jaGFuZ2UtY2FuY2VsIiBjbGFzcz0iYnRuIGJ0bi1sZyBidG4tbGluayI+Q2FuY2VsPC9hPgorICAgIDwvZm9ybT4KKyAgPC9kaXY+CiAKLSAgICB7JSBpZiBwcm9qZWN0LmlzX2RlZmF1bHQgJX0KLSAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlRoaXMgcHJvamVjdCBzaG93cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVpbGRzIHlvdSBzdGFydCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgVG9hc3RlciBpcyBydW5uaW5nIj48L2k+Ci0gICAgeyUgZW5kaWYgJX0KLSAgPC9oMT4KLSAgPGZvcm0gaWQ9InByb2plY3QtbmFtZS1jaGFuZ2UtZm9ybSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBweDsgZGlzcGxheTogbm9uZTsiPgotICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+Ci0gICAgICA8aW5wdXQgY2xhc3M9Imh1Z2UgaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgaWQ9InByb2plY3QtbmFtZS1jaGFuZ2UtaW5wdXQiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0ie3twcm9qZWN0Lm5hbWV9fSI+Ci0gICAgICAgIDxidXR0b24gaWQ9InByb2plY3QtbmFtZS1jaGFuZ2UtYnRuIiBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+Ci0gICAgICAgIDxhIGhyZWY9IiMiIGlkPSJwcm9qZWN0LW5hbWUtY2hhbmdlLWNhbmNlbCIgY2xhc3M9ImJ0biBidG4tbGFyZ2UgYnRuLWxpbmsiPkNhbmNlbDwvYT4KLSAgICA8L2Rpdj4KLSAgPC9mb3JtPgotPC9kaXY+Ci0KLXslIGlmIG5vdCBwcm9qZWN0LmlzX2RlZmF1bHQgJX0KKyAgeyUgaWYgbm90IHByb2plY3QuaXNfZGVmYXVsdCAlfQogICA8ZGl2IGlkPSJwcm9qZWN0LXRvcGJhciI+Ci0gICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyI+CiAgICAgICA8bGkgaWQ9InRvcGJhci1jb25maWd1cmF0aW9uLXRhYiI+Ci0gICAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+Ci0gICAgICAgICAgQ29uZmlndXJhdGlvbgotICAgICAgICA8L2E+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPgorICAgICAgICBDb25maWd1cmF0aW9uCisgICAgICA8L2E+CiAgICAgICA8L2xpPgogICAgICAgPGxpPgotICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIHByb2plY3QuaWQgJX0iPgotICAgICAgICAgIEJ1aWxkcyAoe3twcm9qZWN0LmdldF9udW1iZXJfb2ZfYnVpbGRzfX0pCi0gICAgICAgIDwvYT4KKyAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCAlfSI+CisgICAgICAgIEJ1aWxkcyAoe3twcm9qZWN0LmdldF9udW1iZXJfb2ZfYnVpbGRzfX0pCisgICAgICA8L2E+CiAgICAgICA8L2xpPgogICAgICAgPGxpPgotICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij4KLSAgICAgICAgICBJbXBvcnQgbGF5ZXIKLSAgICAgICAgPC9hPgorICAgICAgPGEgaHJlZj0ieyUgdXJsICdpbXBvcnRsYXllcicgcHJvamVjdC5pZCAlfSI+CisgICAgICAgIEltcG9ydCBsYXllcgorICAgICAgPC9hPgogICAgICAgPC9saT4KICAgICAgIDxsaT4KLSAgICAgICAgPGEgaHJlZj0ieyUgdXJsICduZXdjdXN0b21pbWFnZScgcHJvamVjdC5pZCAlfSI+Ci0gICAgICAgICAgTmV3IGN1c3RvbSBpbWFnZQotICAgICAgICA8L2E+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ25ld2N1c3RvbWltYWdlJyBwcm9qZWN0LmlkICV9Ij4KKyAgICAgICAgTmV3IGN1c3RvbSBpbWFnZQorICAgICAgPC9hPgogICAgICAgPC9saT4KICAgICAgIDxsaSBjbGFzcz0icHVsbC1yaWdodCI+Ci0gICAgICAgIDxmb3JtIGNsYXNzPSJmb3JtLWlubGluZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MHB4OyI+Ci0gICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIGRhdGEtcGxhY2VtZW50PSJsZWZ0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUeXBlIHRoZSBuYW1lIG9mIG9uZSBvciBtb3JlIHJlY2lwZXMgeW91IHdhbnQgdG8gYnVpbGQsIHNlcGFyYXRlZCBieSBhIHNwYWNlLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHRhc2sgYnkgYXBwZW5kaW5nIGEgY29sb24gYW5kIGEgdGFzayBuYW1lIHRvIHRoZSByZWNpcGUgbmFtZSwgbGlrZSBzbzogPGNvZGU+YnVzeWJveDpjbGVhbjwvY29kZT4iPjwvaT4KLSAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgotICAgICAgICAgICAgPGlucHV0IGlkPSJidWlsZC1pbnB1dCIgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBpbnB1dC1sZyBidWlsZC10YXJnZXQtaW5wdXQiIHBsYWNlaG9sZGVyPSJUeXBlIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkaXNhYmxlZD4KLSAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ1aWxkLWJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UgYnVpbGQtYnV0dG9uIiBkYXRhLXByb2plY3QtaWQ9Int7cHJvamVjdC5pZH19IiBkaXNhYmxlZD5CdWlsZDwvYnV0dG9uPgorICAgICAgICA8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1wbGFjZW1lbnQ9ImxlZnQiIHRpdGxlPSJUeXBlIHRoZSBuYW1lIG9mIG9uZSBvciBtb3JlIHJlY2lwZXMgeW91IHdhbnQgdG8gYnVpbGQsIHNlcGFyYXRlZCBieSBhIHNwYWNlLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHRhc2sgYnkgYXBwZW5kaW5nIGEgY29sb24gYW5kIGEgdGFzayBuYW1lIHRvIHRoZSByZWNpcGUgbmFtZSwgbGlrZSBzbzogPGNvZGU+YnVzeWJveDpjbGVhbjwvY29kZT4iPjwvc3Bhbj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0iYnVpbGQtaW5wdXQiIHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtbGciIHBsYWNlaG9sZGVyPSJUeXBlIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkaXNhYmxlZD4KICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8YnV0dG9uIGlkPSJidWlsZC1idXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxnIiBkYXRhLXByb2plY3QtaWQ9Int7cHJvamVjdC5pZH19IiBkaXNhYmxlZD5CdWlsZDwvYnV0dG9uPgogICAgICAgICA8L2Zvcm0+CiAgICAgICA8L2xpPgogICAgIDwvdWw+CiAgIDwvZGl2PgoteyUgZW5kaWYgJX0KKyAgeyUgZW5kaWYgJX0KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGUuaHRtbAppbmRleCAxZDZkNjRlLi5iZjJjZDcxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGUuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGUuaHRtbApAQCAtMTIsMzUgKzEyLDQzIEBACiAKIDwhLS0gQmVnaW4gY29udGFpbmVyIC0tPgogCi08ZGl2IGNsYXNzPSJyb3cgc3BhbjExIj4KLSAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+Cis8ZGl2IGNsYXNzPSJyb3ciPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIGJ1aWxkLWRhdGEiPgogICAgICAgICA8aDE+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fTwvaDE+CiAgICAgPC9kaXY+CisgIDwvZGl2PgogPC9kaXY+CiAKLTxkaXYgY2xhc3M9InJvdyBzcGFuNyB0YWJiYWJsZSI+Ci0gICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKzxkaXYgY2xhc3M9InJvdyI+CisgIDxkaXYgY2xhc3M9ImNvbC1tZC04IHRhYmJhYmxlIj4KKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyI+CiAgICAgICAgIDxsaSBjbGFzcz0ie3t0YWJfc3RhdGVzLjF9fSI+CiAgICAgICAgICAgICA8YSBocmVmPSIjaW5mb3JtYXRpb24iIGRhdGEtdG9nZ2xlPSJ0YWIiPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iQnVpbGQtcmVsYXRlZAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjaXBlIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgUmVjaXBlIGRldGFpbHMKICAgICAgICAgICAgIDwvYT4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlX3BhY2thZ2VzIiBidWlsZC5wayBvYmplY3QuaWQgJX0iPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHBhY2thZ2VkCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCByZXN1bHRpbmcgZnJvbSBidWlsZGluZyB0aGUgcmVjaXBlIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgUGFja2FnZXMgKHt7cGFja2FnZV9jb3VudH19KQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgogICAgICAgICA8bGkgY2xhc3M9Int7dGFiX3N0YXRlcy4zfX0iPgogICAgICAgICAgICAgPGEgaHJlZj0iI2RlcGVuZGVuY2llcyIgZGF0YS10b2dnbGU9InRhYiI+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlcykiPjwvaT4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGVzKSI+PC9zcGFuPgogICAgICAgICAgICAgICAgIEJ1aWxkIGRlcGVuZGVuY2llcyAoe3tvYmplY3Qucl9kZXBlbmRlbmNpZXNfcmVjaXBlLmFsbC5jb3VudH19KQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgogICAgICAgICA8bGkgY2xhc3M9Int7dGFiX3N0YXRlcy40fX0iPgogICAgICAgICAgICAgPGEgaHJlZj0iI2Jyb3VnaHQtaW4tYnkiIGRhdGEtdG9nZ2xlPSJ0YWIiPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgKGkuZS4gdGhlIHJlY2lwZXMgdGhhdCBkZXBlbmQgb24gdGhpcyByZWNpcGUpIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQtdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcmVjaXBlcyB0aGF0CisgICAgICAgICAgICAgICAgZGVwZW5kIG9uIHRoaXMgcmVjaXBlKSI+PC9zcGFuPgogICAgICAgICAgICAgICAgIFJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICh7e29iamVjdC5yX2RlcGVuZGVuY2llc19kZXBlbmRzLmFsbC5jb3VudH19KQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgpAQCAtNDksMzQgKzU3LDU1IEBACiAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIHt7dGFiX3N0YXRlcy4xfX0iIGlkPSJpbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgogICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBMYXllcgogICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgPGRkPnt7bGF5ZXIubmFtZX19PC9kZD4KIAogICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlBhdGggdG8gdGhlIHJlY2lwZSAuYmIgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSAuYmIgZmlsZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBSZWNpcGUgZmlsZQogICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgPGRkPjxjb2RlPnt7b2JqZWN0LmZpbGVfcGF0aH19IHslIGlmIG9iamVjdC5wYXRoZmxhZ3MgJX08aT4oe3tvYmplY3QucGF0aGZsYWdzfX0pPC9pPnslIGVuZGlmICV9PC9jb2RlPjwvZGQ+Ci0gICAgICAgICAgICAgICAgeyUgaWYgbGF5ZXJfdmVyc2lvbi5icmFuY2ggJX0KICAgICAgICAgICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgTGF5ZXIgYnJhbmNoCiAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICB7JSBpZiBsYXllcl92ZXJzaW9uLmxheWVyLmxvY2FsX3NvdXJjZV9kaXIgJX0KKyAgICAgICAgICAgICAgICA8ZGQ+CisJCSAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPk5vdCBhcHBsaWNhYmxlPC9zcGFuPgorCQkgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc291cmNlCisgICAgICAgICAgICAgICAgICBjb2RlIG9mIHt7bGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gaXMgbm90IGluIGEgZ2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgIHNvIHRoZXJlIGlzIG5vIGJyYW5jaCBhc3NvY2lhdGVkIHdpdGggaXQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KICAgICAgICAgICAgICAgICA8ZGQ+e3tsYXllcl92ZXJzaW9uLmJyYW5jaH19PC9kZD4KLSAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorCQl7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgY29tbWl0IG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0IG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBMYXllciBjb21taXQKICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIHslIGlmIGxheWVyX3ZlcnNpb24ubGF5ZXIubG9jYWxfc291cmNlX2RpciAlfQorCQk8ZGQ+CisJCSAgPHNwYW4gY2xhc3M9InRleHQtbXV0ZWQiPk5vdCBhcHBsaWNhYmxlPC9zcGFuPgorCQkgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc291cmNlCisgICAgICAgICAgICAgICAgICBjb2RlIG9mIHt7bGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gaXMgbm90IGluIGEgZ2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgIHNvIHRoZXJlIGlzIG5vIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggaXQiPjwvc3Bhbj4KKwkJPC9kZD4KKyAgICAgICAgICAgICAgICB7JSBlbHNlICV9CiAgICAgICAgICAgICAgICAgPGRkIGNsYXNzPSJpc2NvbW1pdCI+e3tsYXllcl92ZXJzaW9uLmNvbW1pdH19PC9kZD4KKwkJeyUgZW5kaWYgJX0KICAgICAgICAgICAgICAgICB7JSBpZiBvYmplY3QucHJvdmlkZXNfc2V0LmFsbCAlfQogICAgICAgICAgICAgICAgIDxkdD4KLSAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIKICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJBIGxpc3Qgb2YgYWxpYXNlcyBieSB3aGljaCBhIHBhcnRpY3VsYXIgcmVjaXBlIGNhbiBiZSBrbm93bi4gVGhlIGFkZGl0aW9uYWwgYWxpYXNlcyBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bm9ueW1zIGZvciB0aGUgcmVjaXBlIGFuZCBjYW4gYmUgdXNlZnVsIHNhdGlzZnlpbmcgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMgZHVyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBQUk9WSURFUwogICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD48Y29kZT57JSBmb3IgcHJvdmlkZXIgaW4gb2JqZWN0LnByb3ZpZGVzX3NldC5hbGwgJX17eyBwcm92aWRlci5uYW1lIH19Jm5ic3A7eyUgZW5kZm9yICV9PC9jb2RlPjwvZGQ+CkBAIC04OSwzMCArMTE4LDQ1IEBACiAgICAgICAgICAgICAgICAgPHN0cm9uZz57e29iamVjdC5uYW1lfX1fe3tvYmplY3QudmVyc2lvbn19PC9zdHJvbmc+IGRvZXMgbm90IGhhdmUgYW55IHRhc2tzIGluIHRoaXMgYnVpbGQuCiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLXJlc3BvbnNpdmUiPgogICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CiAgICAgICAgICAgICAgICAgPHRoZWFkPgotCQkgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgPHRoPgotICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBidWlsZCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIKICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgPHRoPgotICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSB0YXNrIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdGFzayI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgVGFzawogICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICA8dGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyB2YWx1ZSB0ZWxscyB5b3UgaWYgYSB0YXNrIGhhZCB0byBydW4gKGV4ZWN1dGVkKSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgdGFzayBvdXRwdXQsIG9yIGlmIHRoZSBvdXRwdXQgd2FzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayBhbmQgdGhlcmVmb3JlIHRoZSB0YXNrIGRpZG4ndCBuZWVkIHRvIHJ1biAobm90IGV4ZWN1dGVkKSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0ZWxscyB5b3UgaWYgYSB0YXNrIGhhZCB0byBydW4gKGV4ZWN1dGVkKSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0LCBvciBpZiB0aGUgb3V0cHV0IHdhcworICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSBhbm90aGVyIHRhc2sgYW5kIHRoZXJlZm9yZSB0aGUgdGFzayBkaWRuJ3QgbmVlZAorICAgICAgICAgICAgICAgIHRvIHJ1biAobm90IGV4ZWN1dGVkKSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZWQKICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgPHRoPgotICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiAnZXhlY3V0ZWQnIHRhc2tzIHN1Y2NlZWRlZCBvciBmYWlsZWQuIFRoZSBjb2x1bW4gYWxzbyB0ZWxscyB5b3Ugd2h5ICdub3QgZXhlY3V0ZWQnIHRhc2tzIGRpZCBub3QgbmVlZCB0byBydW4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIHRlbGxzIHlvdSBpZiAnZXhlY3V0ZWQnIHRhc2tzIHN1Y2NlZWRlZCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrcyBkaWQgbm90IG5lZWQgdG8gcnVuIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICBPdXRjb21lCiAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgIDx0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIGNvbHVtbiB0ZWxscyB5b3UgaWYgYSB0YXNrIHRyaWVkIHRvIHJlc3RvcmUgb3V0cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMsIGFuZCByZXBvcnRzIHRoZSByZXN1bHQ6IFN1Y2NlZWRlZCwgRmFpbGVkIG9yIEZpbGUgbm90IGluIGNhY2hlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiB0ZWxscyB5b3UgaWYgYSB0YXNrIHRyaWVkIHRvIHJlc3RvcmUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXJyb3JzLCBhbmQgcmVwb3J0cyB0aGUgcmVzdWx0OiBTdWNjZWVkZWQsIEZhaWxlZCBvciBGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGluIGNhY2hlIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICBDYWNoZSBhdHRlbXB0CiAgICAgICAgICAgICAgICAgICAgIDwvdGg+Ci0JCSAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICA8dGJvZHk+CiAKQEAgLTEyMCwyNiArMTY0LDMwIEBACiAKICAgICAgICAgICAgICAgICAgICAgPHRyIHt7IHRhc2t8dGFza19jb2xvciB9fSA+CiAKLSAgICAgICAgICAgICAgICAgICAgPHRkPjxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5vcmRlcn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Rhc2sub3JkZXJ9fTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay50YXNrX25hbWV9fTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJ7e3Rhc2suZ2V0X2Rlc2NyaXB0aW9ufX0iPjwvaT4geyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLnRhc2tfbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgdGFzay5nZXRfZGVzY3JpcHRpb24gJX08c3BhbiBjbGFzcz0iZ2x5cGhpY29uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0ie3t0YXNrLmdldF9kZXNjcmlwdGlvbn19Ij48L3NwYW4+IAorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgICAgICAgICAgPC90ZD4KIAotICAgICAgICAgICAgICAgICAgICA8dGQ+PGEge3sgdGFza3x0YXNrX2NvbG9yIH19IGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPnt7dGFzay5nZXRfZXhlY3V0ZWRfZGlzcGxheX19PC90ZD4KIAotICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSB7eyB0YXNrfHRhc2tfY29sb3IgfX0gaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrICV9Ij57e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPHRkPnt7dGFzay5nZXRfb3V0Y29tZV9kaXNwbGF5fX0gCiAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXNrLm91dGNvbWUgPSB0YXNrLk9VVENPTUVfRkFJTEVEICV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQucGsgInRhc2tsb2dmaWxlIiB0YXNrLnBrICV9Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1kb3dubG9hZC1hbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldC1oZWxwIiB0aXRsZT0iRG93bmxvYWQgdGFzayBsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X291dGNvbWVfaGVscH19Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmbm90ZXF1YWwgdGFzay5zc3RhdGVfcmVzdWx0IHRhc2suU1NUQVRFX05BICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSB7eyB0YXNrfHRhc2tfY29sb3IgfX0gaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrICV9Ij57e3Rhc2suZ2V0X3NzdGF0ZV9yZXN1bHRfZGlzcGxheX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFzay5nZXRfc3N0YXRlX3Jlc3VsdF9kaXNwbGF5fX0KICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmbm90ZXF1YWwgJX0KICAgICAgICAgICAgICAgICAgICAgPC90ZD4KIApAQCAtMTQ4LDYgKzE5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICA8L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUge3t0YWJfc3RhdGVzLjN9fSIgaWQ9ImRlcGVuZGVuY2llcyI+CkBAIC0xNzQsMTMgKzIyMywxMyBAQAogICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLmRlcGVuZHNfb24ucGsgJX0iPnt7cnIuZGVwZW5kc19vbi5uYW1lfX08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgcnIudmlhICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+c2F0aXNmaWVkIHZpYSB7e3JyLnZpYS5uYW1lfX08L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+c2F0aXNmaWVkIHZpYSA8Y29kZSBjbGFzcz0idGV4dC1tdXRlZCI+e3tyci52aWEubmFtZX19PC9jb2RlPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IlRoaXMgZGVwZW5kZW5jeSBpcyBzYXRpc2ZpZWQgYnkgdGhlIFBST1ZJREVTIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JyLnZpYS5uYW1lfX0gaW4gdGhlIHt7cnIuZGVwZW5kc19vbi5uYW1lfX0gcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57e3JyLnZpYS5uYW1lfX08L2NvZGU+IGluIHRoZSA8Y29kZT57e3JyLmRlcGVuZHNfb24ubmFtZX19PC9jb2RlPiByZWNpcGUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcnIuZGVwZW5kc19vbi5wayAlfSI+e3tyci5kZXBlbmRzX29uLnZlcnNpb259fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cnIuZGVwZW5kc19vbi52ZXJzaW9ufX08L3RkPgogICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KIApAQCAtMjEzLDEzICsyNjIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByci5yZWNpcGUucGsgJX0iPnt7cnIucmVjaXBlLm5hbWV9fTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHJyLnZpYSAlfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+IHNhdGlzZmllZCB2aWEge3tyci52aWEubmFtZX19PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LW11dGVkIj4gc2F0aXNmaWVkIHZpYSA8Y29kZSBjbGFzcz0idGV4dC1tdXRlZCI+e3tyci52aWEubmFtZX19PC9jb2RlPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJUaGlzIGRlcGVuZGVuY3kgaXMgc2F0aXNmaWVkIGJ5IHRoZSBQUk9WSURFUyB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cnIudmlhLm5hbWV9fSBpbiB0aGUge3tyci5kZXBlbmRzX29uLm5hbWV9fSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3tyci52aWEubmFtZX19PC9jb2RlPiBpbiB0aGUgPGNvZGU+e3tyci5kZXBlbmRzX29uLm5hbWV9fTwvY29kZT4gcmVjaXBlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcnIucmVjaXBlLnBrICV9Ij57e3JyLnJlY2lwZS52ZXJzaW9ufX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3JyLnJlY2lwZS52ZXJzaW9ufX08L3RkPgogICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KIApAQCAtMjMxLDcgKzI4MCw4IEBACiAgICAgPC9kaXY+CiA8L2Rpdj4KIAotPGRpdiBjbGFzcz0icm93IHNwYW40IHdlbGwiPgorPGRpdiBjbGFzcz0iY29sLW1kLTQiPgorICA8ZGl2IGNsYXNzPSJ3ZWxsIj4KICAgICA8aDI+QWJvdXQge3tvYmplY3QubmFtZX19PC9oMj4KICAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CiAgICAgICAgIHslIGlmIG9iamVjdC5zdW1tYXJ5ICV9CkBAIC0yNTMsNyArMzAzLDcgQEAKICAgICAgICAgeyUgaWYgb2JqZWN0LnNlY3Rpb24gJX0KICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgIFNlY3Rpb24KLSAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc2VjdGlvbiBpbiB3aGljaCByZWNpcGVzIHNob3VsZCBiZSBjYXRlZ29yaXplZCI+PC9pPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBzZWN0aW9uIGluIHdoaWNoIHJlY2lwZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkIj48L3NwYW4+CiAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgPGRkPnt7b2JqZWN0LnNlY3Rpb259fTwvZGQ+CiAgICAgICAgIHslIGVuZGlmICV9CkBAIC0yNjIsNiArMzEyLDkgQEAKICAgICAgICAgICAgIDxkZD57e29iamVjdC5saWNlbnNlfX08L2RkPgogICAgICAgICB7JSBlbmRpZiAlfQogICAgIDwvZGw+CisgIDwvZGl2PgogPC9kaXY+CiAKKzwvZGl2PiA8IS0tIGVuZCByb3cgLS0+CisKIHslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfYnRuLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfYnRuLmh0bWwKaW5kZXggYmFhYjA2ZS4uZTM3Mjk2NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX2J0bi5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9idG4uaHRtbApAQCAtMSwxNiArMSwxNyBAQAotPGJ1dHRvbiBkYXRhLXJlY2lwZS1uYW1lPSJ7e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSBidWlsZC1yZWNpcGUtYnRuIiBzdHlsZT0ibWFyZ2luLXRvcDogNXB4OworPGEgZGF0YS1yZWNpcGUtbmFtZT0ie3tkYXRhLm5hbWV9fSIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2sgbGF5ZXItZXhpc3RzLXt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0gYnVpbGQtcmVjaXBlLWJ0biIgc3R5bGU9Im1hcmdpbi10b3A6IDVweDsKICAgeyUgaWYgZGF0YS5sYXllcl92ZXJzaW9uLnBrIG5vdCBpbiBleHRyYS5jdXJyZW50X2xheWVycyAlfQogICAgIGRpc3BsYXk6bm9uZTsKICAgeyUgZW5kaWYgJX0iCiAgPgogICBCdWlsZCByZWNpcGUKLTwvYnV0dG9uPgotPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllcmJ0biBsYXllci1hZGQte3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEubGF5ZXJfdmVyc2lvbi5wa319LCAibmFtZSI6ICAie3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24ucGslfSJ9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIgorPC9hPgorPGEgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2sgbGF5ZXJidG4gbGF5ZXItYWRkLXt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0iIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5sYXllcl92ZXJzaW9uLnBrJX0ifScgZGF0YS1kaXJlY3RpdmU9ImFkZCIKICAgICB7JSBpZiBkYXRhLmxheWVyX3ZlcnNpb24ucGsgaW4gZXh0cmEuY3VycmVudF9sYXllcnMgJX0KICAgICAgc3R5bGU9ImRpc3BsYXk6bm9uZTsiCiAgICAgeyUgZW5kaWYgJX0KID4KLSAgPGkgY2xhc3M9Imljb24tcGx1cyI+PC9pPgorICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzIj48L3NwYW4+CiAgIEFkZCBsYXllcgotICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUbyBidWlsZCB0aGlzIHRhcmdldCwgeW91IG11c3QgZmlyc3QgYWRkIHRoZSB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgdG8geW91ciBwcm9qZWN0Ij48L2k+Ci08L2J1dHRvbj4KKyAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRvIGJ1aWxkIHRoaXMKKyAgICAgIHJlY2lwZSB5b3UgbXVzdCBmaXJzdCBhZGQgdGhlIHt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciB0byB5b3VyIHByb2plY3QiPjwvaT4KKzwvYT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9wYWNrYWdlcy5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX3BhY2thZ2VzLmh0bWwKaW5kZXggZDI1ODQ3Yi4uMzdhNTg2ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX3BhY2thZ2VzLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX3BhY2thZ2VzLmh0bWwKQEAgLTExLDM1ICsxMSw0MyBAQAogCiA8IS0tIEJlZ2luIGNvbnRhaW5lciAtLT4KIAotPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMSI+Ci0gICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorPGRpdiBjbGFzcz0icm93Ij4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciBidWlsZC1kYXRhIj4KICAgICAgICAgPGgxPnt7cmVjaXBlLm5hbWV9fV97e3JlY2lwZS52ZXJzaW9ufX08L2gxPgogICAgIDwvZGl2PgorICA8L2Rpdj4KIDwvZGl2PgogCi08ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjcgdGFiYmFibGUiPgotICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+Cis8ZGl2IGNsYXNzPSJyb3ciPgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtOCB0YWJiYWJsZSI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMiPgogICAgICAgICA8bGk+CiAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLmlkICIxIiAlfSI+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkJ1aWxkLXJlbGF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBSZWNpcGUgZGV0YWlscwogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgogICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+Ci0JCQk8YSBocmVmPSIjcGFja2FnZXMtYnVpbHQiIGRhdGEtdG9nZ2xlPSJ0YWIiPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICA8YSBocmVmPSIjcGFja2FnZXMtYnVpbHQiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZWQKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIHRoZSByZWNpcGUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBQYWNrYWdlcyAoe3tvYmplY3RfY291bnR9fSkKICAgICAgICAgICAgIDwvYT4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiMyIgJX0iPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlcykiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBCdWlsZCBkZXBlbmRlbmNpZXMgKHt7cmVjaXBlLnJfZGVwZW5kZW5jaWVzX3JlY2lwZS5hbGwuY291bnR9fSkKICAgICAgICAgICAgIDwvYT4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiNCIgJX0iPgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgKGkuZS4gdGhlIHJlY2lwZXMgdGhhdCBkZXBlbmQgb24gdGhpcyByZWNpcGUpIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQtdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcmVjaXBlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZCBvbiB0aGlzIHJlY2lwZSkiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoe3tyZWNpcGUucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwuY291bnR9fSkKICAgICAgICAgICAgIDwvYT4KICAgICAgICAgPC9saT4KQEAgLTcyLDggKzgwLDggQEAKIAogICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLm5hbWV9fTwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS52ZXJzaW9ufX1fe3twYWNrYWdlLnJldmlzaW9ufX08L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cGFja2FnZS52ZXJzaW9ufX1fe3twYWNrYWdlLnJldmlzaW9ufX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzaXplY29sIj57e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KICAgICAgICAgICAgICAgICAgICAgPC90cj4KIAogICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CkBAIC04Niw5ICs5NCwxMCBAQAogICAgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgPC9kaXY+IHsjIHRhYi1wYW5lICN9CiAgICAgPC9kaXY+IHsjIHRhYi1jb250ZW50ICN9Ci08L2Rpdj4geyMgc3BhbjcgI30KKzwvZGl2PiB7IyBjb2wtbWQtOCAjfQogCi08ZGl2IGNsYXNzPSJyb3cgc3BhbjQgd2VsbCI+Cis8ZGl2IGNsYXNzPSJjb2wtbWQtNCI+CisgIDxkaXYgY2xhc3M9IndlbGwiPgogICAgIDxoMj5BYm91dCB7e3JlY2lwZS5uYW1lfX08L2gyPgogICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KICAgICAgICAgeyUgaWYgcmVjaXBlLnN1bW1hcnkgJX0KQEAgLTExOSw1ICsxMjgsOCBAQAogICAgICAgICAgICAgPGRkPnt7cmVjaXBlLmxpY2Vuc2V9fTwvZGQ+CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgPC9kbD4KKyAgPC9kaXY+CiA8L2Rpdj4KKworPC9kaXY+IDwhLS0gZW5kIHJvdyAtLT4KIHslIGVuZGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlZGV0YWlscy5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlZGV0YWlscy5odG1sCmluZGV4IDIzYWExNzEuLjY2YzFmN2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZWRldGFpbHMuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVkZXRhaWxzLmh0bWwKQEAgLTQsMjUgKzQsMjMgQEAKIHslIGxvYWQgc3RhdGljICV9CiB7JSBibG9jayBwYWdlY29udGVudCAlfQogCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj4KLSAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KLSAgICA8bGk+Ci0gICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPnt7cHJvamVjdC5uYW1lfX08L2E+Ci0gICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPgotICAgIDwvbGk+Ci0gICAgPGxpPgotICAgICAgeyUgaWYgcmVjaXBlLmlzX2ltYWdlICV9Ci0gICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RpbWFnZXJlY2lwZXMnIHByb2plY3QuaWQgJX0iPkltYWdlIHJlY2lwZXM8L2E+Ci0gICAgICB7JSBlbHNlICV9Ci0gICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3Rzb2Z0d2FyZXJlY2lwZXMnIHByb2plY3QuaWQgJX0iPlNvZnR3YXJlIHJlY2lwZXM8L2E+Ci0gICAgICB7JSBlbmRpZiAlfQotICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4KLSAgICA8L2xpPgotICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KLSAgICAgIHt7cmVjaXBlLm5hbWV9fSAoe3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0pCi0gICAgPC9saT4KLSAgPC91bD4KLTwvZGl2PgorPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgPGxpPgorICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+e3twcm9qZWN0Lm5hbWV9fTwvYT4KKyAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPgorICA8L2xpPgorICA8bGk+CisgICAgeyUgaWYgcmVjaXBlLmlzX2ltYWdlICV9CisgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0aW1hZ2VyZWNpcGVzJyBwcm9qZWN0LmlkICV9Ij5JbWFnZSByZWNpcGVzPC9hPgorICAgIHslIGVsc2UgJX0KKyAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3Rzb2Z0d2FyZXJlY2lwZXMnIHByb2plY3QuaWQgJX0iPlNvZnR3YXJlIHJlY2lwZXM8L2E+CisgICAgeyUgZW5kaWYgJX0KKyAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPgorICA8L2xpPgorICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAge3tyZWNpcGUubmFtZX19ICh7e3JlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSkKKyAgPC9saT4KKzwvdWw+CiAKIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3JlY2lwZWRldGFpbHMuanMnICV9Ij48L3NjcmlwdD4KIDxzY3JpcHQ+CkBAIC01MSw0MiArNDksNDAgQEAKIAogeyUgaW5jbHVkZSAnbmV3Y3VzdG9taW1hZ2VfbW9kYWwuaHRtbCcgJX0KIAotPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMSI+Ci0gIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3MgbGVhZCIgaWQ9ImltYWdlLWNyZWF0ZWQtbm90aWZpY2F0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDogMTVweDsgZGlzcGxheTogbm9uZSI+Ci0gICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtZGlzbWlzcz0iYWxlcnQiIGNsYXNzPSJjbG9zZSI+eDwvYnV0dG9uPgotICAgIFlvdXIgY3VzdG9tIGltYWdlIDxzdHJvbmc+e3tyZWNpcGUubmFtZX19PC9zdHJvbmc+IGhhcyBiZWVuIGNyZWF0ZWQuIFlvdSBjYW4gbm93IGFkZCBvciByZW1vdmUgcGFja2FnZXMgYXMgbmVlZGVkLgotICA8L2Rpdj4KLSAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIgYWlyIj4KLSAgICA8aDE+Ci0gICAgICB7e3JlY2lwZS5uYW1lfX0KLSAgICAgIDxzbWFsbD4oe3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0pPC9zbWFsbD4KLSAgICA8L2gxPgotICA8L2Rpdj4KKzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3MgbGVhZCIgaWQ9ImltYWdlLWNyZWF0ZWQtbm90aWZpY2F0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDogMTVweDsgZGlzcGxheTogbm9uZSI+CisgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWRpc21pc3M9ImFsZXJ0IiBjbGFzcz0iY2xvc2UiPng8L2J1dHRvbj4KKyAgWW91ciBjdXN0b20gaW1hZ2UgPHN0cm9uZz57e3JlY2lwZS5uYW1lfX08L3N0cm9uZz4gaGFzIGJlZW4gY3JlYXRlZC4gWW91IGNhbiBub3cgYWRkIG9yIHJlbW92ZSBwYWNrYWdlcyBhcyBuZWVkZWQuCis8L2Rpdj4KKzxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPgorICAgIHt7cmVjaXBlLm5hbWV9fQorICAgIDxzbWFsbD4oe3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0pPC9zbWFsbD4KKyAgPC9oMT4KIDwvZGl2PgogCi08ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjExIj4KLSAgPGRpdiBjbGFzcz0ic3BhbjgiPgorPGRpdiBjbGFzcz0icm93Ij4KKyAgPGRpdiBjbGFzcz0iY29sLW1kLTgiPgogICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1wbGFjZSBidG4tZ3JvdXAiIGlkPSJjdXN0b21pc2UtYnVpbGQtYnRucyIKICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAlOwogICAgICAgeyUgaWYgbm90IGluX3Byb2plY3QgJX0KICAgICAgIGRpc3BsYXk6bm9uZTsKICAgICAgIHslIGVuZGlmICV9Ij4KLSAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGFyZ2Ugc3BhbjYgYnVpbGQtcmVjaXBlLWJ0biIgc3R5bGU9IndpZHRoOiA1MCUiPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZyBidWlsZC1yZWNpcGUtYnRuIiBzdHlsZT0id2lkdGg6IDUwJSI+CiAgICAgICAgIEJ1aWxkIHt7cmVjaXBlLm5hbWV9fQogICAgICAgPC9idXR0b24+CiAgICAgICB7JSBpZiByZWNpcGUuaXNfaW1hZ2UgJX0KLSAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGFyZ2Ugc3BhbjYgY3VzdG9taXNlLWJ0biIgZGF0YS1yZWNpcGU9Int7cmVjaXBlLnBrfX0iIHN0eWxlPSJ3aWR0aDogNTAlIj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tbGcgY3VzdG9taXNlLWJ0biIgZGF0YS1yZWNpcGU9Int7cmVjaXBlLnBrfX0iIHN0eWxlPSJ3aWR0aDogNTAlIj4KICAgICAgICAgQ3VzdG9taXNlIHt7cmVjaXBlLm5hbWV9fQogICAgICAgPC9idXR0b24+CiAgICAgICB7JSBlbmRpZiAlfQogICAgIDwvZGl2PgogICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1wbGFjZSI+Ci0gICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGJ0bi1sYXJnZSIgaWQ9ImFkZC1sYXllci1idG4iCisgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1sZyIgaWQ9ImFkZC1sYXllci1idG4iCiAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7CiAgICAgICAgICAgeyUgaWYgaW5fcHJvamVjdCAlfQogICAgICAgICAgIGRpc3BsYXk6bm9uZTsKICAgICAgICAgICB7JSBlbmRpZiAlfSI+Ci0gICAgICAgIDxpIGNsYXNzPSJpY29uLXBsdXMiPjwvaT4KKyAgICAgICAgPGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGx1cyI+PC9pPgogICAgICAgICBBZGQgdGhlIHt7cmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IGxheWVyIHRvIHlvdXIgcHJvamVjdCB0byBidWlsZCBvciBjdXN0b21pc2UgdGhpcyBpbWFnZSByZWNpcGUKICAgICAgIDwvYnV0dG9uPgogICAgIDwvZGl2PgpAQCAtMTA2LDcgKzEwMiw3IEBACiAgICAgICAgc3R5bGU9ImRpc3BsYXk6bm9uZSIKICAgICAgIHslIGVuZGlmICV9ID4KICAgICAgICAgPHAgY2xhc3M9ImxlYWQiPlRvYXN0ZXIgaGFzIG5vIHBhY2thZ2UgaW5mb3JtYXRpb24gZm9yIHt7cmVjaXBlLm5hbWV9fS4gVG8gZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiwgYnVpbGQge3tyZWNpcGUubmFtZX19PC9wPgotICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWluZm8gYnRuLWxhcmdlIGJ1aWxkLXJlY2lwZS1idG4iIHN0eWxlPSJtYXJnaW46MjBweCAwIDEwcHggMDsiPkJ1aWxkIHt7cmVjaXBlLm5hbWV9fTwvYnV0dG9uPgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWluZm8gYnRuLWxnIGJ1aWxkLXJlY2lwZS1idG4iIHN0eWxlPSJtYXJnaW46MjBweCAwIDEwcHggMDsiPkJ1aWxkIHt7cmVjaXBlLm5hbWV9fTwvYnV0dG9uPgogICAgICAgPC9kaXY+CiAKICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gYWlyIiBpZD0icGFja2FnZXMtYWxlcnQiCkBAIC0xMTksNTggKzExNSw2MCBAQAogICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiAgIDwvZGl2PgotICA8ZGl2IGNsYXNzPSJzcGFuNCB3ZWxsIj4KLSAgICA8aDIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweDsiPkFib3V0IHt7cmVjaXBlLm5hbWV9fTwvaDI+Ci0gICAgPGRsPgotICAgICAgPGR0PgorICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCI+CisgICAgPGRpdiBjbGFzcz0id2VsbCI+CisgICAgICA8aDI+QWJvdXQge3tyZWNpcGUubmFtZX19PC9oMj4KKyAgICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KKyAgICAgICAgPGR0PgogICAgICAgICBBcHByb3guIHBhY2thZ2VzIGluY2x1ZGVkCi0gICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlRoZSBudW1iZXIgb2YgcGFja2FnZXMgaW5jbHVkZWQgaXMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBwcmV2aW91cyBidWlsZHMgYW5kIGZyb20gcGFyc2luZyBsYXllcnMsIHNvIHdlIGNhbiBuZXZlciBiZSBzdXJlIGl0IGlzIDEwMCUgYWNjdXJhdGUiPjwvaT4KLSAgICAgIDwvZHQ+Ci0gICAgICA8ZGQgY2xhc3M9Im5vLXBhY2thZ2VzIj57e3BhY2thZ2VzLmNvdW50fX08L2RkPgotICAgICAgPGR0PgorICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG51bWJlciBvZiBwYWNrYWdlcyBpbmNsdWRlZCBpcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIHByZXZpb3VzIGJ1aWxkcyBhbmQgZnJvbSBwYXJzaW5nIGxheWVycywgc28gd2UgY2FuIG5ldmVyIGJlIHN1cmUgaXQgaXMgMTAwJSBhY2N1cmF0ZSI+PC9zcGFuPgorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQgY2xhc3M9Im5vLXBhY2thZ2VzIj57e3BhY2thZ2VzLmNvdW50fX08L2RkPgorICAgICAgICA8ZHQ+CiAgICAgICAgIEFwcHJveC4gcGFja2FnZSBzaXplCi0gICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlBhY2thZ2Ugc2l6ZSBpcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIHByZXZpb3VzIGJ1aWxkcywgc28gd2UgY2FuIG5ldmVyIGJlIHN1cmUgaXQgaXMgMTAwJSBhY2N1cmF0ZSI+PC9pPgotICAgICAgPC9kdD4KLSAgICAgIDxkZD57e2FwcHJveF9wa2dfc2l6ZS5zaXplX19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvZGQ+Ci0gICAgICB7JSBpZiBsYXN0X2J1aWxkICV9Ci0gICAgICA8ZHQ+TGFzdCBidWlsZDwvZHQ+Ci0gICAgICA8ZGQ+Ci0gICAgICAgIDxpIGNsYXNzPSJpY29uLW9rLXNpZ24gc3VjY2VzcyI+PC9pPgorICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGFja2FnZSBzaXplIGlzIGJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gcHJldmlvdXMgYnVpbGRzLCBzbyB3ZSBjYW4gbmV2ZXIgYmUgc3VyZSBpdCBpcyAxMDAlIGFjY3VyYXRlIj48L3NwYW4+CisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD57e2FwcHJveF9wa2dfc2l6ZS5zaXplX19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvZGQ+CisgICAgICAgIHslIGlmIGxhc3RfYnVpbGQgJX0KKyAgICAgICAgPGR0Pkxhc3QgYnVpbGQ8L2R0PgorICAgICAgICA8ZGQ+CisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW9rLWNpcmNsZSI+PC9zcGFuPgogICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIHByb2plY3QuaWQlfSI+e3tsYXN0X2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+Ci0gICAgICA8L2RkPgotICAgICAgeyUgZW5kaWYgJX0KLSAgICAgIDxkdD5SZWNpcGUgZmlsZTwvZHQ+Ci0gICAgICA8ZGQ+CisgICAgICAgIDwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDxkdD5SZWNpcGUgZmlsZTwvZHQ+CisgICAgICAgIDxkZD4KICAgICAgICAgPGNvZGU+e3tyZWNpcGUuZmlsZV9wYXRofGN1dF9wYXRoX3ByZWZpeDpyZWNpcGUubGF5ZXJfdmVyc2lvbi5sb2NhbF9wYXRofX08L2NvZGU+Ci0gICAgICAgIDxhIGhyZWY9Int7cmVjaXBlLmdldF92Y3NfcmVjaXBlX2ZpbGVfbGlua191cmx9fSI+PGkgY2xhc3M9Imljb24tc2hhcmUiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlZpZXcgcmVjaXBlIGZpbGUiPjwvaT48L2E+Ci0gICAgICA8L2RkPiAKLSAgICAgIDxkdD5MYXllcjwvZHQ+Ci0gICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIHByb2plY3QuaWQgcmVjaXBlLmxheWVyX3ZlcnNpb24ucGsgJX0iPnt7cmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC9hPjwvZGQ+Ci0gICAgICA8ZHQ+CisgICAgICAgIDxhIGhyZWY9Int7cmVjaXBlLmdldF92Y3NfcmVjaXBlX2ZpbGVfbGlua191cmx9fSI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tbmV3LXdpbmRvdyIgdGl0bGU9IlZpZXcgcmVjaXBlIGZpbGUiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIj48L3NwYW4+PC9hPgorICAgICAgICA8L2RkPiAKKyAgICAgICAgPGR0PkxheWVyPC9kdD4KKyAgICAgICAgPGRkPjxhIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBwcm9qZWN0LmlkIHJlY2lwZS5sYXllcl92ZXJzaW9uLnBrICV9Ij57e3JlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fTwvYT48L2RkPgorICAgICAgICA8ZHQ+CiAgICAgICAgIFN1bW1hcnkKLSAgICAgIDwvZHQ+Ci0gICAgICA8ZGQ+CisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD4KICAgICAgICAge3tyZWNpcGUuc3VtbWFyeX19Ci0gICAgICA8L2RkPgotICAgICAgPGR0PgorICAgICAgICA8L2RkPgorICAgICAgICA8ZHQ+CiAgICAgICAgIERlc2NyaXB0aW9uCi0gICAgICA8L2R0PgotICAgICAgPGRkPgorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+CiAgICAgICAgIHt7cmVjaXBlLmRlc2NyaXB0aW9ufX0KLSAgICAgIDwvZGQ+Ci0gICAgICA8ZHQ+VmVyc2lvbjwvZHQ+Ci0gICAgICA8ZGQ+CisgICAgICAgIDwvZGQ+CisgICAgICAgIDxkdD5WZXJzaW9uPC9kdD4KKyAgICAgICAgPGRkPgogICAgICAgICB7e3JlY2lwZS52ZXJzaW9ufX0KLSAgICAgIDwvZGQ+Ci0gICAgICA8ZHQ+U2VjdGlvbjwvZHQ+Ci0gICAgICA8ZGQ+CisgICAgICAgIDwvZGQ+CisgICAgICAgIDxkdD5TZWN0aW9uPC9kdD4KKyAgICAgICAgPGRkPgogICAgICAgICB7e3JlY2lwZS5zZWN0aW9ufX0KLSAgICAgIDwvZGQ+Ci0gICAgICA8ZHQ+TGljZW5zZTwvZHQ+Ci0gICAgICA8ZGQ+CisgICAgICAgIDwvZGQ+CisgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KKyAgICAgICAgPGRkPgogICAgICAgICB7e3JlY2lwZS5saWNlbnNlfX0KLSAgICAgIDwvZGQ+Ci0gICAgPC9kbD4KKyAgICAgICAgPC9kZD4KKyAgICAgIDwvZGw+CisgICAgPC9kaXY+CiAgIDwvZGl2PgogPC9kaXY+CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZXMuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0NDg5My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAoteyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQotCi17JSBsb2FkIHByb2plY3R0YWdzICV9Ci0KLXslIGJsb2NrIHRpdGxlICV9IFJlY2lwZXMgLSB7e2J1aWxkLnRhcmdldF9zZXQuYWxsfGRpY3Rzb3J0OiJ0YXJnZXQifGpvaW46IiwgIn19IHt7YnVpbGQubWFjaGluZX19IC0ge3tidWlsZC5wcm9qZWN0Lm5hbWV9fSAtIFRvYXN0ZXIgeyUgZW5kYmxvY2sgJX0KLXslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQotPGxpPlJlY2lwZXM8L2xpPgoteyUgZW5kYmxvY2sgJX0KLQoteyUgYmxvY2sgbmF2LXJlY2lwZXMgJX0KLSAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KLXslIGVuZGJsb2NrICV9Ci0KLXslIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KLTxkaXYgY2xhc3M9InNwYW4xMCI+Ci08ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+Ci08aDE+Ci0gIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICAlfQotICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHJlY2lwZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKLSAgeyVlbGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCV9Ci0gICAgICBObyByZWNpcGVzIGZvdW5kCi0gIHslZWxzZSV9Ci0gICAgICBSZWNpcGVzCi0gIHslZW5kaWYlfQotIDwvaDE+Ci08L2Rpdj4KLQoteyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQotICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgotICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgotICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KLSAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2glfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQotICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgotICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHJlY2lwZXM8L2J1dHRvbj4KLSAgICAgICAgPC9mb3JtPgotICAgICAgPC9kaXY+Ci0gIDwvZGl2PgotCi17JSBlbHNlICV9Ci17JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9Ci0KLSAgICB7JSBmb3IgcmVjaXBlIGluIG9iamVjdHMgJX0KLQotICAgIDx0ciBjbGFzcz0iZGF0YSI+Ci0gICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19uYW1lIj4KLSAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0iPnt7cmVjaXBlLm5hbWV9fTwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX3ZlcnNpb24iPgotICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5wayAlfSI+e3tyZWNpcGUudmVyc2lvbn19PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8IS0tIERlcGVuZHMgLS0+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVwZW5kc19vbiI+Ci0gICAgICAgICAgICB7JSB3aXRoIGRlcHM9cmVjaXBlX2RlcHN8Z2V0X2RpY3RfdmFsdWU6cmVjaXBlLnBrICV9Ci0gICAgICAgICAgICB7JSB3aXRoIGNvdW50PWRlcHN8bGVuZ3RoICV9Ci0gICAgICAgICAgICB7JSBpZiBjb3VudCAlfQotICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKLSAgICAgICAgICAgICAgICB0aXRsZT0iPGEgaHJlZj0neyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5wayAlfSNkZXBlbmRlbmNpZXMnPnt7cmVjaXBlLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgotICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+Ci0gICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBkZXBzfGRpY3Rzb3J0OiJkZXBlbmRzX29uLm5hbWUiJX0KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayBpLmRlcGVuZHNfb24ucGsgJX0nPnt7aS5kZXBlbmRzX29uLm5hbWV9fTwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgICAgICAgICAgPC91bD4iPgotICAgICAgICAgICAgICAgIHt7Y291bnR9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPCEtLSAgQnJvdWdodCBpbiBieSAtLT4KLSAgICAgICAgPHRkIGNsYXNzPSJkZXBlbmRzX2J5Ij4KLSAgICAgICAgICAgIHslIHdpdGggcmV2cz1yZWNpcGVfcmV2c3xnZXRfZGljdF92YWx1ZTpyZWNpcGUucGsgJX0KLSAgICAgICAgICAgIHslIHdpdGggY291bnQ9cmV2c3xsZW5ndGggJX0KLSAgICAgICAgICAgIHslIGlmIGNvdW50ICV9Ci0gICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgotICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLnBrICV9I2Jyb3VnaHQtaW4tYnknPnt7cmVjaXBlLm5hbWV9fTwvYT4gcmV2ZXJzZSBkZXBlbmRlbmNpZXMiCi0gICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KLSAgICAgICAgICAgICAgICAgIHslIGZvciBpIGluIHJldnN8ZGljdHNvcnQ6InJlY2lwZS5uYW1lIiAlfQotICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0neyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIGkucmVjaXBlLnBrICV9Jz57e2kucmVjaXBlLm5hbWV9fTwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgICAgICAgICAgPC91bD4iPgotICAgICAgICAgICAgICAgIHt7Y291bnR9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPCEtLSBSZWNpcGUgZmlsZSAtLT4KLSAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfZmlsZSI+e3tyZWNpcGUuZmlsZV9wYXRofX0geyUgaWYgcmVjaXBlLnBhdGhmbGFncyAlfTxpPih7e3JlY2lwZS5wYXRoZmxhZ3N9fSk8L2k+eyUgZW5kaWYgJX08L3RkPgotICAgICAgICA8IS0tIFNlY3Rpb24gLS0+Ci0gICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX3NlY3Rpb24iPnt7cmVjaXBlLnNlY3Rpb259fTwvdGQ+Ci0gICAgICAgIDwhLS0gTGljZW5zZSAtLT4KLSAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbGljZW5zZSI+e3tyZWNpcGUubGljZW5zZX19PC90ZD4KLSAgICAgICAgPCEtLSBMYXllciAtLT4KLSAgICAgICAgPHRkIGNsYXNzPSJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSI+e3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L3RkPgotICAgICAgICA8IS0tIExheWVyIGJyYW5jaCAtLT4KLSAgICAgICAgPHRkIGNsYXNzPSJsYXllcl92ZXJzaW9uX19icmFuY2giPnt7cmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNofX08L3RkPgotICAgICAgICA8IS0tIExheWVyIGNvbW1pdCAtLT4KLSAgICAgICAgPHRkIGNsYXNzPSJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0Ij4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCi0gICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KLSAgICAgICAgICAgICAgICAgIDxsaT57e3JlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdH19PC9saT4KLSAgICAgICAgICAgICAgICA8L3VsPiI+Ci0gICAgICAgICAgICAgICAge3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR8dHJ1bmNhdGVjaGFyczoxM319Ci0gICAgICAgICAgICA8L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLQotICAgIHslIGVuZGZvciAlfQotCi17JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9Ci17JSBlbmRpZiAlfQotPC9kaXY+Ci17JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvc25pcHBldHMvZ2l0cmV2X3BvcG92ZXIuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL2dpdHJldl9wb3BvdmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlM2RhYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL2dpdHJldl9wb3BvdmVyLmh0bWwKQEAgLTAsMCArMSw4IEBACit7JSBsb2FkIHByb2plY3R0YWdzICAlfQoreyUgaWYgdmNzX3JlZnxpc19zaGFpZCAlfQorPGEgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1jb250ZW50PSJ7e3Zjc19yZWZ9fSI+Cisge3t2Y3NfcmVmfHRydW5jYXRlY2hhcnM6MTB9fQorPC9hPgoreyUgZWxzZSAlfQore3t2Y3NfcmVmfX0KK3slIGVuZGlmICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9zbmlwcGV0cy9wa2dfZGVwZW5kZW5jaWVzX3BvcG92ZXIuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL3BrZ19kZXBlbmRlbmNpZXNfcG9wb3Zlci5odG1sCmluZGV4IGEzZmNkYjAuLjI3MzQzN2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL3BrZ19kZXBlbmRlbmNpZXNfcG9wb3Zlci5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL3BrZ19kZXBlbmRlbmNpZXNfcG9wb3Zlci5odG1sCkBAIC0xLDE0ICsxLDM4IEBACiB7IyBQb3BvdmVyIHRoYXQgZGlzcGxheXMgdGhlIGRlcGVuZGVuY2VzIGFuZCBzaXplcyBvZiBhIHBhY2thZ2UgJ2RhdGEnIHVzZWQgaW4gdGhlIFBhY2thZ2VzIHRhYmxlICN9Ci17JSB3aXRoIGRhdGEucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmFsbF9kZXBlbmRzLmNvdW50IGFzIGRlcF9jb3VudCAlfQogeyUgbG9hZCBwcm9qZWN0dGFncyAlfQoteyUgaWYgZGVwX2NvdW50ICV9Ci0gPGEgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KLSAgIHslIGZvciBkZXAgaW4gZGF0YS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuYWxsX2RlcGVuZHMgJX0KLSAgPGxpPnt7ZGVwLmRlcGVuZHNfb24ubmFtZX19IHslIGlmIGRlcC5kZXBlbmRzX29uLnNpemUgPiAwICV9KHt7ZGVwLmRlcGVuZHNfb24uc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KXslIGVuZGlmICV9PC9saT4KLSAgICB7JSBlbmRmb3IgJX0KLSAgPC91bD4iIHRpdGxlPSIiIGNsYXNzPSJidG4iIGRhdGEtb3JpZ2luYWwtdGl0bGU9IgotICA8c3Ryb25nPnt7ZGF0YS5uYW1lfX08L3N0cm9uZz4gZGVwZW5kZW5jaWVzIC0gPHN0cm9uZz57e2RhdGEucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmdldF90b3RhbF9zb3VyY2VfZGVwc19zaXplLmRlcGVuZHNfb25fX3NpemVfX3N1bXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC9zdHJvbmc+Ij4KLSAgICB7e2RlcF9jb3VudH19Ci08L2E+CisKK3slIHdpdGggcGFja2FnZV9kZXBzPWRhdGEucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlfGZvcl90YXJnZXQ6ZXh0cmEudGFyZ2V0X25hbWUgJX0KK3slIHdpdGggY291bnRfcGFja2FnZT1wYWNrYWdlX2RlcHMucGFja2FnZXN8bGVuZ3RoICV9CisKK3slIGlmIGNvdW50X3BhY2thZ2UgPiAwICV9CisgIDxhIGRhdGEtY29udGVudD0nPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KKyAgeyUgZm9yIGRlcCBpbiBwYWNrYWdlX2RlcHMucGFja2FnZXMgJX0KKyAgICAgPGxpPgorICAgICAgeyUgaWYgZXh0cmEuYWRkX2xpbmtzICV9CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBleHRyYS5idWlsZC5wayBleHRyYS50YXJnZXRfaWQgZGVwLmRlcGVuZHNfb24ucGsgJX0iPgorICAgICAge3tkZXAuZGVwZW5kc19vbi5uYW1lfX08L2E+CisgICAgICB7JSBlbHNlICV9CisgICAgICAgIHt7ZGVwLmRlcGVuZHNfb24ubmFtZX19CisgICAgICB7JSBlbmRpZiAlfQorICAgICAgeyUgaWYgZGVwLmRlcGVuZHNfb24uc2l6ZSA+IDAgJX0KKyAgICAgICAgKHt7ZGVwLmRlcGVuZHNfb24uc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KQorICAgICAgeyUgZW5kaWYgJX0KKyAgICAgPC9saT4KKyAgIHslIGVuZGZvciAlfQorICAgPC91bD4nIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHRpdGxlPScKKyAgIDxzdHJvbmc+CisgICAgIHslIGlmIGV4dHJhLmFkZF9saW5rcyAlfQorICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcycgZXh0cmEuYnVpbGQucGsgZXh0cmEudGFyZ2V0X2lkIGRhdGEucGsgJX0iPgorICAgICAge3tkYXRhLm5hbWV9fTwvYT4KKyAgICAgIHslIGVsc2UgJX0KKyAgICAgIHt7ZGF0YS5uYW1lfX0KKyAgICAgIHslIGVuZGlmICV9CisgICAgICA8L3N0cm9uZz4KKyAgICAgIGRlcGVuZGVuY2llcyAtCisgICAgICA8c3Ryb25nPnt7cGFja2FnZV9kZXBzLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvc3Ryb25nPic+CisgICAgICB7e2NvdW50X3BhY2thZ2V9fQorICA8L2E+CiB7JSBlbmRpZiAlfQorCit7JSBlbmR3aXRoICV9CiB7JSBlbmR3aXRoICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9zbmlwcGV0cy9wa2dfcmV2ZGVwZW5kZW5jaWVzX3BvcG92ZXIuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL3BrZ19yZXZkZXBlbmRlbmNpZXNfcG9wb3Zlci5odG1sCmluZGV4IDQ1M2E5ZDAuLmU2ZWY4MTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL3BrZ19yZXZkZXBlbmRlbmNpZXNfcG9wb3Zlci5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3NuaXBwZXRzL3BrZ19yZXZkZXBlbmRlbmNpZXNfcG9wb3Zlci5odG1sCkBAIC0xLDE0ICsxLDM4IEBACi17IyBQb3BvdmVyIHRoYXQgZGlzcGxheXMgdGhlIHJldmVyc2UgZGVwZW5kZW5jaWVzIGFuZCBzaXplcyBvZiBhIHBhY2thZ2UgJ2RhdGEnIHVzZWQgaW4gdGhlIFBhY2thZ2VzIHRhYmxlICN9Ci17JSB3aXRoIGRhdGEucGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0LmFsbF9kZXBlbmRzLmNvdW50IGFzIGRlcF9jb3VudCAlfQoreyMgUG9wb3ZlciB0aGF0IGRpc3BsYXlzIHRoZSByZXZlcnNlIGRlcGVuZGVuY2VzIGFuZCBzaXplcyBvZiBhIHBhY2thZ2UgJ2RhdGEnIHVzZWQgaW4gdGhlIFBhY2thZ2VzIHRhYmxlICN9CiB7JSBsb2FkIHByb2plY3R0YWdzICV9Ci17JSBpZiBkZXBfY291bnQgJX0KLSA8YSBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgotICAgeyUgZm9yIGRlcCBpbiBkYXRhLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldC5hbGxfZGVwZW5kc3xkaWN0c29ydDoncGFja2FnZS5uYW1lJyAlfQotICA8bGk+e3tkZXAucGFja2FnZS5uYW1lfX0geyUgaWYgZGVwLnBhY2thZ2Uuc2l6ZSA+IDAgJX0oe3tkZXAucGFja2FnZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0peyUgZW5kaWYgJX08L2xpPgotICAgIHslIGVuZGZvciAlfQotICA8L3VsPiIgdGl0bGU9IiIgY2xhc3M9ImJ0biIgZGF0YS1vcmlnaW5hbC10aXRsZT0iCi0gIDxzdHJvbmc+e3tkYXRhLm5hbWV9fTwvc3Ryb25nPiByZXZlcnNlIGRlcGVuZGVuY2llcyAtIDxzdHJvbmc+e3tkYXRhLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldC5nZXRfdG90YWxfcmV2ZGVwc19zaXplLnBhY2thZ2VfaWRfX3NpemVfX3N1bXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC9zdHJvbmc+Ij4KLSAgICB7e2RlcF9jb3VudH19Ci08L2E+CisKK3slIHdpdGggcGFja2FnZV9kZXBzPWRhdGEucGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0fGZvcl90YXJnZXQ6ZXh0cmEudGFyZ2V0X25hbWUgJX0KK3slIHdpdGggY291bnRfcGFja2FnZT1wYWNrYWdlX2RlcHMucGFja2FnZXN8bGVuZ3RoICV9CisKK3slIGlmIGNvdW50X3BhY2thZ2UgPiAwICV9CisgIDxhIGRhdGEtY29udGVudD0nPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KKyAgeyUgZm9yIGRlcCBpbiBwYWNrYWdlX2RlcHMucGFja2FnZXN8ZGljdHNvcnQ6InBhY2thZ2UubmFtZSIgJX0KKyAgICAgPGxpPgorICAgICAgeyUgaWYgZXh0cmEuYWRkX2xpbmtzICV9CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBleHRyYS5idWlsZC5wayBleHRyYS50YXJnZXRfaWQgZGVwLnBhY2thZ2UucGsgJX0iPgorICAgICAge3tkZXAucGFja2FnZS5uYW1lfX08L2E+CisgICAgICB7JSBlbHNlICV9CisgICAgICB7e2RlcC5wYWNrYWdlLm5hbWV9fQorICAgICAgeyUgZW5kaWYgJX0KKyAgICAgIHslIGlmIGRlcC5wYWNrYWdlLnNpemUgPiAwICV9CisgICAgICAgICh7e2RlcC5wYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkKKyAgICAgIHslIGVuZGlmICV9CisgICAgIDwvbGk+CisgICB7JSBlbmRmb3IgJX0KKyAgIDwvdWw+JyBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0aXRsZT0nCisgICA8c3Ryb25nPgorICAgICB7JSBpZiBleHRyYS5hZGRfbGlua3MgJX0KKyAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycgZXh0cmEuYnVpbGQucGsgZXh0cmEudGFyZ2V0X2lkIGRhdGEucGsgJX0iPgorICAgICAge3tkYXRhLm5hbWV9fTwvYT4KKyAgICAgIHslIGVsc2UgJX0KKyAgICAgIHt7ZGF0YS5uYW1lfX0KKyAgICAgIHslIGVuZGlmICV9CisgICAgICA8L3N0cm9uZz4KKyAgICAgIGRlcGVuZGVuY2llcyAtCisgICAgICA8c3Ryb25nPnt7cGFja2FnZV9kZXBzLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvc3Ryb25nPic+CisgICAgICB7e2NvdW50X3BhY2thZ2V9fQorICA8L2E+CiB7JSBlbmRpZiAlfQorCit7JSBlbmR3aXRoICV9CiB7JSBlbmR3aXRoICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXJnZXQuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhcmdldC5odG1sCmluZGV4IDRjMzNlYWEuLjE5MjRhMGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhcmdldC5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhcmdldC5odG1sCkBAIC0xNyw5ICsxNyw4IEBACiB7JSBlbmRibG9jayAlfQogCiB7JSBibG9jayBidWlsZGluZm9tYWluICV9Ci0KLTxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAiPgotICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKzxkaXYgY2xhc3M9ImNvbC1tZC0xMCI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIgYnVpbGQtZGF0YSI+CiAgICAgICAgIDxoMT4KICAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CiAgICAgICAgICAgICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHBhY2thZ2V7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCkBAIC0zMCwxMzQgKzI5LDI4IEBACiAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICA8L2gxPgogICAgIDwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InJvdy1mbHVpZCBwdWxsLXJpZ2h0IHNwYW4xMCIgaWQ9Im5hdlRhYiI+Ci0gICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKzxkaXYgaWQ9Im5hdlRhYiI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMiPgogICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CiAgICAgICAgICAgICA8YSBocmVmPSIjdGFyZ2V0Ij4KLSAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJPZiBhbGwgdGhlIHBhY2thZ2VzIGJ1aWx0LCB0aGUgc3Vic2V0IGluc3RhbGxlZCBpbiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGlzIGltYWdlIj48L2k+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT2YgYWxsIHRoZSBwYWNrYWdlcyBidWlsdCwgdGhlIHN1YnNldCBpbnN0YWxsZWQgaW4gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhpcyBpbWFnZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgIFBhY2thZ2VzIGluY2x1ZGVkICh7e3RhcmdldC5wYWNrYWdlX2NvdW50fX0gLSB7e3BhY2thZ2VzX3N1bXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KQogICAgICAgICAgICAgPC9hPgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2RpcmluZm8nIGJ1aWxkLmlkIHRhcmdldC5pZCAlfSI+Ci0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhpcyBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBEaXJlY3Rvcnkgc3RydWN0dXJlCiAgICAgICAgICAgICA8L2E+CiAgICAgICAgIDwvbGk+CiAgICAgPC91bD4KIAogICAgIDxkaXYgaWQ9ImltYWdlLXBhY2thZ2VzIiBjbGFzcz0idGFiLXBhbmUiPgotCi0gICAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQotICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KLSAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgotICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KLSAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+Ci0gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHBhY2thZ2VzPC9idXR0b24+Ci0gICAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotCi0KLSAgICB7JSBlbHNlICV9Ci0gICAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQotICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KLSAgICA8dHI+Ci0gICAgICB7IyBvcmRlciBvZiB0aGUgdGFibGUgZGF0YSBtdXN0IG1hdGNoIHRoZSBjb2x1bW5zIGRlZmluZWQgaW4gdGVtcGxhdGUncyBjb250ZXh0IHRhYmxlY29scyAgI30KLSAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX25hbWUiPgotICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgotICAgICAgICAgICAge3twYWNrYWdlLm5hbWV9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5pbnN0YWxsZWRfbmFtZSBhbmQgcGFja2FnZS5uYW1lICE9IHBhY2thZ2UuaW5zdGFsbGVkX25hbWUgJX0KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzIHt7cGFja2FnZS5pbnN0YWxsZWRfbmFtZX19PC9zcGFuPgotICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ne3twYWNrYWdlLm5hbWV8YWRkOiIgd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kIHdhcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhcyAifGFkZDpwYWNrYWdlLmluc3RhbGxlZF9uYW1lfX0nPjwvaT4KLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV92ZXJzaW9uIj4KLSAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KLSAgICAgICAgICAgIHt7cGFja2FnZS52ZXJzaW9ufGZpbHRlcmVkX3BhY2thZ2V2ZXJzaW9uOnBhY2thZ2UucmV2aXNpb259fQotICAgICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImxpY2Vuc2UiPgotICAgICAgICAgICAge3twYWNrYWdlLmxpY2Vuc2V9fQotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9InNpemUgc2l6ZWNvbCI+Ci0gICAgICAgICAgICB7e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9pbnN0YWxsZWRzaXplOnBhY2thZ2UuaW5zdGFsbGVkX3NpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fQotICAgICAgICA8L3RkPgotCi0gICAgICAgIDx0ZCBjbGFzcz0ic2l6ZV9vdmVyX3RvdGFsIHNpemVjb2wiPgotICAgICAgICAgICAge3twYWNrYWdlfGZpbHRlcl9zaXplb3ZlcnRvdGFsOnBhY2thZ2VzX3N1bX19Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgPHRkIGNsYXNzPSJkZXBlbmRzIj4KLSAgICAgICAgICAgIHslIHdpdGggZGVwcz1wYWNrYWdlLnJ1bnRpbWVfZGVwZW5kZW5jaWVzICV9Ci0gICAgICAgICAgICB7JSB3aXRoIGRlcHNfY291bnQ9ZGVwc3xsZW5ndGggJX0KLSAgICAgICAgICAgIHslIGlmIGRlcHNfY291bnQgPiAwICV9Ci0gICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgotICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzIiBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSc+e3twYWNrYWdlLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgotICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+Ci0gICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBkZXBzfGRpY3Rzb3J0OidkZXBlbmRzX29uLm5hbWUnICV9Ci0gICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsIiBidWlsZC5wayB0YXJnZXQuaWQgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5uYW1lfX08L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQotICAgICAgICAgICAgICAgIDwvdWw+Ij4KLSAgICAgICAgICAgICAgICB7e2RlcHNfY291bnR9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJicm91Z2h0X2luX2J5Ij4KLSAgICAgICAgICAgIHslIHdpdGggcmRlcHM9cGFja2FnZS5yZXZlcnNlX3J1bnRpbWVfZGVwZW5kZW5jaWVzICV9Ci0gICAgICAgICAgICB7JSB3aXRoIHJkZXBzX2NvdW50PXJkZXBzfGxlbmd0aCAlfQotICAgICAgICAgICAgeyUgaWYgcmRlcHNfY291bnQgPiAwICV9Ci0gICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgotICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMiIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Jz57e3BhY2thZ2UubmFtZX19PC9hPiByZXZlcnNlIGRlcGVuZGVuY2llcyIKLSAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgotICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gcmRlcHN8ZGljdHNvcnQ6J3BhY2thZ2UubmFtZScgJX0KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicGFja2FnZV9pbmNsdWRlZF9kZXRhaWwiIGJ1aWxkLmlkIHRhcmdldC5pZCBpLnBhY2thZ2UuaWQgJX0nPnt7aS5wYWNrYWdlLm5hbWV9fTwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgICAgICAgICAgPC91bD4iPgotICAgICAgICAgICAgICAgIHt7cmRlcHNfY291bnR9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbmFtZSI+Ci0gICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9Ci0gICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgotICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUubmFtZSB9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfdmVyc2lvbiI+Ci0gICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9Ci0gICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgotICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUudmVyc2lvbiB9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsYXllcl9uYW1lIj4KLSAgICAgICAgICAgIHt7IHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSB9fQotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImxheWVyX2JyYW5jaCI+Ci0gICAgICAgICAgICB7eyBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfY29tbWl0Ij4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCi0gICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KLSAgICAgICAgICAgICAgICAgIDxsaT57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fX08L2xpPgotICAgICAgICAgICAgICAgIDwvdWw+Ij4KLSAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQotICAgICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgeyUgZW5kZm9yICV9Ci0KLSAgICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9Ci0gICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyMgeGhyX3RhYmxlX3VybCBpcyBqdXN0IHRoZSBjdXJyZW50IHVybCBzbyBsZWF2ZSBpdCBibGFuayAjfQorICAgICAgICB7JSB3aXRoIHhocl90YWJsZV91cmw9JycgJX0KKyAgICAgICAgeyUgaW5jbHVkZSAidG9hc3RlcnRhYmxlLmh0bWwiICV9CisgICAgICAgIHslIGVuZHdpdGggJX0KICAgICA8L2Rpdj4gPCEtLSB0YWJwYW5lIC0tPgotPC9kaXY+IDwhLS1zcGFuIDEwLS0+CisJPC9kaXY+IDwhLS1uYXZUYWIgLS0+Cis8IS0tIGNvbC1tZC0xMCAtLT4KIHslIGVuZGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbAppbmRleCA1NzY4MjYyLi4yMTRjNzc3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXNrLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFzay5odG1sCkBAIC0xMSw2MCArMTEsODggQEAKIAogeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CiAKLTxkaXYgY2xhc3M9InJvdyBzcGFuMTEiPgotICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKzxkaXYgY2xhc3M9InJvdyI+CisgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIgYnVpbGQtZGF0YSI+CiAgICAgICAgIDxoMT48YSBocmVmPSJ7JXVybCAncmVjaXBlJyBidWlsZC5wayB0YXNrLnJlY2lwZS5wayAlfSI+e3t0YXNrLnJlY2lwZS5uYW1lfX1fe3t0YXNrLnJlY2lwZS52ZXJzaW9ufX08L2E+IHt7dGFzay50YXNrX25hbWV9fTwvaDE+CiAgICAgPC9kaXY+CiAKIHsjIE91dGNvbWUgc2VjdGlvbiAjfQogPGgyIHt7IHRhc2t8dGFza19jb2xvcjpUcnVlIH19PgogICAgIHt7dGFzay5nZXRfb3V0Y29tZV9kaXNwbGF5fX0KLSAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9Int7dGFzay5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0YXNrLmdldF9vdXRjb21lX2hlbHB9fSI+PC9pPgogPC9oMj4KIHslaWYgdGFzay50YXNrX2V4ZWN1dGVkICV9CiAgICAgeyMgZXhlY3V0ZWQgdGFza3Mgb3V0Y29tZSAjfQogICAgIHslIGlmIHRhc2subG9nZmlsZSAlfQotICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tbGFyZ2UiIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgdGFzay5wayAlfSIgc3R5bGU9Im1hcmdpbjoxNXB4OyI+RG93bmxvYWQgdGFzayBsb2c8L2E+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZyIKKyAgICAgICAgICAgICAgIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICd0YXNrbG9nZmlsZScgdGFzay5wayAlfSI+CisgICAgICAgICAgICAgIERvd25sb2FkIHRhc2sgbG9nCisgICAgICAgICAgICA8L2E+CiAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgeyMgc2hvdyBzdGFjayB0cmFjZSBmb3IgZmFpbGVkIHRhc2sgI30KICAgICAgICAgeyUgaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9GQUlMRUQgYW5kIGxvZ19oZWFkICV9CiAgICAgICAgICAgICA8aDM+UHl0aG9uIHN0YWNrIHRyYWNlPC9oMz4KICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT0ibWluLWhlaWdodDoxNjBweDsiPgotICAgICAgICAgICAgICAgICAgICA8Y29kZT57e2xvZ19oZWFkfX08L2NvZGU+PGEgaWQ9ImZ1bGwtdHJhY2Utc2hvdyIgZGF0YS10YXJnZXQ9IiNmdWxsdHJhY2UiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgY2xhc3M9ImJ0biBidG4tbWluaSI+Li4uPC9hPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT57e2xvZ19oZWFkfX08L2NvZGU+PGEgaWQ9ImZ1bGwtdHJhY2Utc2hvdyIgZGF0YS10YXJnZXQ9IiNmdWxsdHJhY2UiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgY2xhc3M9ImJ0biBidG4teHMiPi4uLjwvYT4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZnVsbHRyYWNlIiBjbGFzcz0iY29sbGFwc2UiIHN0eWxlPSJtYXJnaW4tdG9wOiAtMjBweDsgaGVpZ2h0OiAwcHg7Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7bG9nX2JvZHl9fTwvY29kZT48YnI+PGEgaWQ9ImZ1bGwtdHJhY2UtaGlkZSIgY2xhc3M9ImJ0biBidG4tbWluaSBjb2xsYXBzZWQiIHN0eWxlPSJmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSIgZGF0YS10YXJnZXQ9IiNmdWxsdHJhY2UiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSI+Q29sbGFwc2Ugc3RhY2sgdHJhY2U8aSBjbGFzcz0iaWNvbi1jYXJldC11cCI+PC9pPjwvYT48L2Rpdj48L3ByZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7bG9nX2JvZHl9fTwvY29kZT48YnI+PGEgaWQ9ImZ1bGwtdHJhY2UtaGlkZSIgY2xhc3M9ImJ0biBidG4teHMgY29sbGFwc2VkIiBzdHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUiIGRhdGEtdGFyZ2V0PSIjZnVsbHRyYWNlIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiPkNvbGxhcHNlIHN0YWNrIHRyYWNlPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiPjwvaT48L2E+PC9kaXY+PC9wcmU+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgeyUgZW5kaWYgJX0KIHslIGVsc2UgJX0KIHsjIG5vdCBleGVjdXRlZCB0YXNrcyBvdXRjb21lICN9CiAgICAgeyUgaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9QUkVCVUlMVCAlfQogICAgICAgICB7JSBpZiBub3Qgc2hvd2luZ19tYXRjaGVzICV9Ci0gICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydzaG93X21hdGNoZXMnIDogJ3RydWUnIH0pIj5NYXRjaCB0byB0YXNrcyBpbiBwcmV2aW91cyBidWlsZHMgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsiIHRpdGxlPSJUaGlzIHNob3dzIHlvdSBhIGxpc3Qgb2YgdGFza3MgZnJvbSBwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQgaW4gdGhlIHByZWJ1aWx0IHRhc2suIEFueSBvZiB0aGVtIGNvdWxkIGJlIHRoZSB0YXNrIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdXRwdXQgdGhpcyBwcmVidWlsdCB0YXNrIGlzIHJldXNpbmciPjwvaT48L2E+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IgorICAgICAgICAgICAgICAgIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3Nob3dfbWF0Y2hlcycgOiAndHJ1ZScKKyAgICAgICAgfSkiPk1hdGNoIHRvIHRhc2tzIGluIHByZXZpb3VzIGJ1aWxkcyA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uCitnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgc2hvd3MgeW91IGEgbGlzdCBvZiB0YXNrcyBmcm9tCitwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQKK2luIHRoZSBwcmVidWlsdCB0YXNrLiBBbnkgb2YgdGhlbSBjb3VsZCBiZSB0aGUgdGFzayB0aGF0IGdlbmVyYXRlZCB0aGUgb3V0cHV0Cit0aGlzIHByZWJ1aWx0IHRhc2sgaXMgcmV1c2luZyI+PC9zcGFuPjwvYT4KICAgICAgICAgeyUgZWxpZiBtYXRjaGluZ190YXNrcyAlfQogICAgICAgICAgICAgPGgzIGNsYXNzPSJkZXRhaWxzIj5QcmVidWlsdCB0YXNrIGNvdWxkIGJlIGJhc2VkIG9uCi0gICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJUaGlzIHRhYmxlIHNob3dzIGEgbGlzdCBvZiB0YXNrcyBmcm9tIHByZXZpb3VzIGJ1aWxkcyB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgc2FtZSBpbnB1dHMgYXMgdXNlZCBpbiB0aGUgcHJlYnVpbHQgdGFzay4gQW55IG9mIHRoZW0gY291bGQgYmUgdGhlIHRhc2sgdGhhdCBnZW5lcmF0ZWQgdGhlIG91dHB1dCB0aGlzIHByZWJ1aWx0IHRhc2sgaXMgcmV1c2luZyI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzCisgICAgICAgICAgICAgICAgICAgIHRhYmxlIHNob3dzIGEgbGlzdCBvZiB0YXNrcyBmcm9tIHByZXZpb3VzIGJ1aWxkcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgc2lnbmF0dXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzYW1lIGlucHV0cyBhcyB1c2VkIGluIHRoZQorICAgICAgICAgICAgcHJlYnVpbHQgdGFzay4gQW55IG9mIHRoZW0gY291bGQgYmUgdGhlIHRhc2sgdGhhdCBnZW5lcmF0ZWQgdGhlCisgICAgICAgIG91dHB1dCB0aGlzIHByZWJ1aWx0IHRhc2sgaXMgcmV1c2luZyI+PC9zcGFuPgogICAgICAgICAgICAgPC9oMz4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtcmVzcG9uc2l2ZSI+CiAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgIDx0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHRhc2sgYXBwbGllcyI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgUmVjaXBlCiAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgIDx0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgdGFzayI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhc2siPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2sKICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgPHRoPgotICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgdmFsdWUgdGVsbHMgeW91IGlmIGEgdGFzayBoYWQgdG8gcnVuIChleGVjdXRlZCkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0LCBvciBpZiB0aGUgb3V0cHV0IHdhcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2sgYW5kIHRoZXJlZm9yZSB0aGUgdGFzayBkaWRuJ3QgbmVlZCB0byBydW4gKG5vdCBleGVjdXRlZCkiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdGVsbHMgeW91IGlmIGEgdGFzayBoYWQgdG8gcnVuIChleGVjdXRlZCkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCwgb3IgaWYgdGhlIG91dHB1dCB3YXMKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGFuZCB0aGVyZWZvcmUgdGhlIHRhc2sgZGlkbid0IG5lZWQKKyAgICAgICAgICAgICAgICB0byBydW4gKG5vdCBleGVjdXRlZCkiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGVkCiAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgIDx0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIGNvbHVtbiB0ZWxscyB5b3UgaWYgJ2V4ZWN1dGVkJyB0YXNrcyBzdWNjZWVkZWQgb3IgZmFpbGVkLiBUaGUgY29sdW1uIGFsc28gdGVsbHMgeW91IHdoeSAnbm90IGV4ZWN1dGVkJyB0YXNrcyBkaWQgbm90IG5lZWQgdG8gcnVuIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIGNvbHVtbiB0ZWxscyB5b3UgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvCisgICAgICAgICAgICAgICAgICAgIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvCisgICAgICAgICAgICAgICAgcnVuIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICBPdXRjb21lCiAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgIDx0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGF0ZSBhbmQgdGltZSB0aGUgYnVpbGQgZmluaXNoZWQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQtaGVscCIgdGl0bGU9IlRoZSBkYXRlIGFuZCB0aW1lIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIGNvbXBsZXRlZCBvbgogICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgIDwvdGhlYWQ+CkBAIC03MiwyNyArMTAwLDM0IEBACiAgICAgICAgICAgICAgICAgICAgIHslIGZvciBtYXRjaCBpbiBtYXRjaGluZ190YXNrcyAlfQogICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHt7IG1hdGNofHRhc2tfY29sb3IgfX0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgbWF0Y2guYnVpbGQucGsgbWF0Y2gucGslfSI+e3ttYXRjaC5yZWNpcGUubmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21hdGNoLnJlY2lwZS5uYW1lfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2gudGFza19uYW1lfX08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X2Rlc2NyaXB0aW9ufX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXItaGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9Int7dGFzay5nZXRfZGVzY3JpcHRpb259fSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgbWF0Y2guYnVpbGQucGsgbWF0Y2gucGslfSI+e3ttYXRjaC5nZXRfZXhlY3V0ZWRfZGlzcGxheX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21hdGNoLmdldF9leGVjdXRlZF9kaXNwbGF5fX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2guZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT48aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e21hdGNoLmdldF9vdXRjb21lX2hlbHB9fSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21hdGNoLmdldF9vdXRjb21lX2Rpc3BsYXl9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldC1oZWxwIGhvdmVyLWhlbHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9Int7bWF0Y2guZ2V0X291dGNvbWVfaGVscH19Ij48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLmJ1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWF0Y2guYnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPC9kaXY+CiAgICAgICAgIHslIGVsc2UgJX0KICAgICAgICAgICAgIDxwIGNsYXNzPSJhbGVydCI+CiAgICAgICAgICAgICAgICAgPHN0cm9uZz4gV2UgaGF2ZSBmb3VuZCBubyB0YXNrcyBtYXRjaGluZyB0aGlzIHByZWJ1aWx0IHRhc2s8L3N0cm9uZz48YnIvPgpAQCAtMTAyLDEwICsxMzcsMTEgQEAKICAgICB7JSBlbGlmIHRhc2sub3V0Y29tZSA9PSB0YXNrLk9VVENPTUVfQ09WRVJFRCAlfQogICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgogICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgdGFzayhzKSBwcm92aWRpbmcgdGhlIG91dGNvbWUgb2YgdGhpcyB0YXNrIj48L2k+IFRhc2sgY292ZXJlZCBieQorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgdGFzayhzKQorICAgICAgICAgICAgICAgICAgICBwcm92aWRpbmcgdGhlIG91dGNvbWUgb2YgdGhpcyB0YXNrIj48L3NwYW4+IFRhc2sgY292ZXJlZCBieQogICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgICAgICAgICAgICAgIHslIGZvciB0IGluIGNvdmVyZWRfYnkgJX0KICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICd0YXNrJyB0LmJ1aWxkLnBrIHQucGslfSIKQEAgLTEyMiw3ICsxNTgsMTAgQEAKICAgICB7JWVsaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9DQUNIRUQlfQogICAgICAgICAgICAgeyUgZm9yIHQgaW4gdGFzay5nZXRfcmVsYXRlZF9zZXRzY2VuZSAlfQogICAgICAgICAgICAgICAgIHslIGlmIGZvcmxvb3AubGFzdCAlfQotICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0LnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCB0YXNrIGxvZzwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tbGciCisgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgdC5wayAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWQgdGFzayBsb2cKKyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KIApAQCAtMTM3LDM4ICsxNzYsNTYgQEAKICAgICB7JSBpZiB0YXNrLnRhc2tfZXhlY3V0ZWQgJX0KICAgICA8aDI+CiAgICAgICAgIEV4ZWN1dGVkCi0gICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iJ0V4ZWN1dGVkJyB0YXNrcyBhcmUgdGhvc2UgdGhhdCBuZWVkIHRvIHJ1biBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgdGFzayBvdXRwdXQiPjwvaT4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIKKyAgICAgICAgICAgIHRpdGxlPSInRXhlY3V0ZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IG5lZWQgdG8gcnVuIGluIG9yZGVyIHRvCisgICAgICAgIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCI+PC9zcGFuPgogICAgIHslIGVsc2UgJX0KLSAgICA8aDIgY2xhc3M9Im11dGVkIj4KKyAgICA8aDI+CiAgICAgICAgIE5vdCBFeGVjdXRlZAotICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IidOb3QgZXhlY3V0ZWQnIHRhc2tzIGRvbid0IG5lZWQgdG8gcnVuIGJlY2F1c2UgdGhlaXIgb3V0Y29tZSBpcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2siPjwvaT4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IidOb3QKKyAgICAgICAgICAgIGV4ZWN1dGVkJyB0YXNrcyBkb24ndCBuZWVkIHRvIHJ1biBiZWNhdXNlIHRoZWlyIG91dGNvbWUgaXMgcHJvdmlkZWQKKyAgICAgICAgYnkgYW5vdGhlciB0YXNrIj48L3NwYW4+CiAgICAgeyUgZW5kaWYgJX0KICAgICA8L2gyPgogCiA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgogICAgIDxkdD4KLSAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRvIG1ha2UgYnVpbGRzIG1vcmUgZWZmaWNpZW50LCB0aGUgYnVpbGQgc3lzdGVtIGRldGVjdHMgY2hhbmdlcyBpbiB0aGUgJ2lucHV0cycgdG8gYSBnaXZlbiB0YXNrIGJ5IGNyZWF0aW5nIGEgJ3Rhc2sgc2lnbmF0dXJlJy4gSWYgdGhlIHNpZ25hdHVyZSBjaGFuZ2VzLCB0aGUgYnVpbGQgc3lzdGVtIGFzc3VtZXMgdGhlIGlucHV0cyBoYXZlIGNoYW5nZWQgYW5kIHRoZSB0YXNrIG5lZWRzIHRvIGJlIHJlcnVuIj48L2k+CisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUbyBtYWtlIGJ1aWxkcyBtb3JlCisgICAgICAgICAgICBlZmZpY2llbnQsIHRoZSBidWlsZCBzeXN0ZW0gZGV0ZWN0cyBjaGFuZ2VzIGluIHRoZSAnaW5wdXRzJyB0byBhCisgICAgICAgIGdpdmVuIHRhc2sgYnkgY3JlYXRpbmcgYSAndGFzayBzaWduYXR1cmUnLiBJZiB0aGUgc2lnbmF0dXJlIGNoYW5nZXMsCisgICAgdGhlIGJ1aWxkIHN5c3RlbSBhc3N1bWVzIHRoZSBpbnB1dHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFzayBuZWVkcyB0byBiZQorcmVydW4iPjwvc3Bhbj4KICAgICAgICAgVGFzayBpbnB1dHMgc2lnbmF0dXJlCiAgICAgPC9kdD4KICAgICA8ZGQ+CiAgICAgICAgIHt7dGFzay5zc3RhdGVfY2hlY2tzdW19fQogICAgIDwvZGQ+Ci08L2RsPgogICAgIHslIGlmIHRhc2suc3N0YXRlX3Jlc3VsdCAhPSB0YXNrLlNTVEFURV9OQSAlfQorICA8L2RsPgogICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj5BdHRlbXB0aW5nIHRvIHJlc3RvcmUgb3V0cHV0IGZyb20gc3N0YXRlIGNhY2hlCi0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGdldC1oZWxwLWJsdWUiIHRpdGxlPSJUaGUgYnVpbGQgc3lzdGVtIGlzIHNlYXJjaGluZyBmb3IgdGhlIHRhc2sgb3V0cHV0IGluIHlvdXIgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3RvcnkgYW5kIG1pcnJvcnMuIElmIHRoZSBidWlsZCBzeXN0ZW0gZmluZHMgdGhlIHRhc2sgb3V0cHV0LCBpdCB3aWxsIHJldXNlIGl0IGluc3RlYWQgb2YgYnVpbGRpbmcgaXQgZnJvbSBzY3JhdGNoIGJ5IHJ1bm5pbmcgdGhlIHJlYWwgdGFzay4gUmV1c2luZyB0aGUgdGFzayBvdXRwdXQgbWFrZXMgdGhlIGJ1aWxkIGZhc3RlciI+PC9pPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscAorICAgICAgICAgICAgICAgIGdldC1oZWxwLWJsdWUiIHRpdGxlPSJUaGUgYnVpbGQgc3lzdGVtIGlzIHNlYXJjaGluZyBmb3IgdGhlCisgICAgICAgICAgICAgICAgdGFzayBvdXRwdXQgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICBtaXJyb3JzLiBJZiB0aGUgYnVpbGQgc3lzdGVtIGZpbmRzIHRoZSB0YXNrIG91dHB1dCwgaXQgd2lsbCByZXVzZSBpdAorICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgYnVpbGRpbmcgaXQgZnJvbSBzY3JhdGNoIGJ5IHJ1bm5pbmcgdGhlIHJlYWwgdGFzay4gUmV1c2luZyB0aGUKKyAgICAgICAgICAgICAgICB0YXNrIG91dHB1dCBtYWtlcyB0aGUgYnVpbGQgZmFzdGVyIj48L3NwYW4+CiAgICAgICAgIDwvZGl2PgogICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgogICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgZmlsZSBzZWFyY2hlZCBmb3IgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQgbWlycm9ycyI+PC9pPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSBzZWFyY2hlZCBmb3IgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgbWlycm9ycyI+PC9zcGFuPgogICAgICAgICAgICAgICAgIEZpbGUgc2VhcmNoZWQgZm9yCiAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgPGRkPjxjb2RlPnt7dGFzay5wYXRoX3RvX3NzdGF0ZV9vYmp9fTwvY29kZT48L2RkPgogICAgICAgICAgICAgPGR0PgotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbG9jYXRpb25zIHNlYXJjaGVkIGZvciB0aGUgYWJvdmUgZmlsZSAoaS5lLiB5b3VyIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IGFuZCBhbnkgbWlycm9ycyB5b3UgaGF2ZSBzZXQgdXApIj48L2k+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoZWQgZm9yIHRoZSBhYm92ZSBmaWxlIChpLmUuIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3RvcnkgYW5kIGFueSBtaXJyb3JzIHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgIHNldCB1cCkiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICBVUkkocykgc2VhcmNoZWQKICAgICAgICAgICAgIDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+PHVsPnslIGZvciB1cmkgaW4gdXJpX2xpc3QgJX08bGk+PGNvZGU+e3t1cml9fTwvY29kZT48L2xpPnslIGVuZGZvciAlfTwvdWw+PC9kZD4KKyAgICAgICAgICAgIDxkZD48dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPnslIGZvciB1cmkgaW4gdXJpX2xpc3QgJX08bGk+PGNvZGU+e3t1cml9fTwvY29kZT48L2xpPnslIGVuZGZvciAlfTwvdWw+PC9kZD4KICAgICAgICAgPC9kbD4KICAgICB7JSBlbmRpZiAlfQogICAgIHslIGlmIHRhc2suc3N0YXRlX3Jlc3VsdCA9PSB0YXNrLlNTVEFURV9NSVNTICV9CkBAIC0xNzYsNyArMjMzLDcgQEAKICAgICAgICAgICAgIDxzdHJvbmc+RmlsZSBub3QgaW4gc3N0YXRlIGNhY2hlLjwvc3Ryb25nPiBSdW5uaW5nIHRoZSByZWFsIHRhc2sgaW5zdGVhZC4KICAgICAgICAgPC9kaXY+CiAgICAgeyUgZWxpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgPT0gdGFzay5TU1RBVEVfRkFJTEVEJX0KLSAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KICAgICAgICAgICAgIDxzdHJvbmc+RmFpbGVkPC9zdHJvbmc+IHRvIHJlc3RvcmUgb3V0cHV0IGZyb20gc3N0YXRlIGNhY2hlLiBUaGUgZmlsZSB3YXMgZm91bmQgYnV0IGNvdWxkIG5vdCBiZSB1bnBhY2tlZC4KICAgICAgICAgPC9kaXY+CiAgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CkBAIC0xOTIsMTMgKzI0OSwxNiBAQAogICAgIHslIGVuZGlmICV9CiAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KICAgICA8ZHQ+Ci0gICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcnVubmluZyBzZXF1ZW5jZSBvZiBlYWNoIHRhc2sgaW4gdGhlIGJ1aWxkIj48L2k+CisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUKKyAgICAgICAgICAgIHJ1bm5pbmcgc2VxdWVuY2Ugb2YgZWFjaCB0YXNrIGluIHRoZSBidWlsZCI+PC9zcGFuPgogICAgICAgICBUYXNrIG9yZGVyCiAgICAgPC9kdD4KLSAgICA8ZGQ+PGEgaHJlZj0ieyV1cmwgInRhc2tzX3Rhc2siIGJ1aWxkLnBrIHRhc2sub3JkZXIgJX0je3t0YXNrLm9yZGVyfX0iPnt7dGFzay5vcmRlcn19PC9hPjwvZGQ+CisgICAgPGRkPjxhIGhyZWY9InsldXJsICJ0YXNrcyIgYnVpbGQucGsgJX0/cGFnZT17e3Rhc2tfaW5fdGFza3NfdGFibGVfcGd9fSZsaW1pdD0yNSN0YXNrLXt7dGFzay5vcmRlcn19Ij57e3Rhc2sub3JkZXJ9fTwvYT48L2RkPgogICAgIHslIGlmIHRhc2sudGFza19leGVjdXRlZCAlfQogICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iSW5kaWNhdGVzIGlmIHRoaXMgdGFzayBleGVjdXRlcyBhIFB5dGhvbiBvciBTaGVsbCBmdW5jdGlvbihzKSI+PC9pPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIKKyAgICAgICAgICAgICAgICB0aXRsZT0iSW5kaWNhdGVzIGlmIHRoaXMgdGFzayBleGVjdXRlcyBhIFB5dGhvbiBvciBTaGVsbAorICAgICAgICAgICAgZnVuY3Rpb24ocykiPjwvc3Bhbj4KICAgICAgICAgICAgIFRhc2sgc2NyaXB0IHR5cGUKICAgICAgICAgPC9kdD4KICAgICAgICAgPGRkPnt7dGFzay5nZXRfc2NyaXB0X3R5cGVfZGlzcGxheX19PC9kZD4KQEAgLTIxMSwyOSArMjcxLDMxIEBACiAgICAgPGRkPjxjb2RlPnt7dGFzay5zb3VyY2VfdXJsfX08L2NvZGU+PC9kZD4KIC0tPgogICAgIDxkdD4KLSAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2sgZGVwZW5kZW5jeSBjaGFpbiAoaS5lLiBvdGhlciB0YXNrcykiPjwvaT4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2sgZGVwZW5kZW5jeSBjaGFpbgorICAgICAgICAgICAgKGkuZS4gb3RoZXIgdGFza3MpIj48L3NwYW4+CiAgICAgICAgIERlcGVuZGVuY2llcwogICAgIDwvZHQ+CiAgICAgPGRkPgotICAgICAgICA8dWw+Ci0gICAgICAgICAgICB7JSBmb3IgZGVwIGluIGRlcHMgJX0KLSAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyV1cmwgJ3Rhc2snIGRlcC5idWlsZC5wayBkZXAucGslfSIgY2xhc3M9InRhc2staW5mbyIgdGl0bGU9Int7ZGVwLmdldF9leGVjdXRlZF9kaXNwbGF5fX0gfCB7e2RlcC5nZXRfb3V0Y29tZV9kaXNwbGF5fX0iPnt7ZGVwLnJlY2lwZS5uYW1lfX1fe3tkZXAucmVjaXBlLnZlcnNpb259fSA8c3BhbiBjbGFzcz0idGFzay1uYW1lIj57e2RlcC50YXNrX25hbWV9fTwvc3Bhbj48L2E+PC9saT4KLSAgICAgICAgICAgIHslIGVtcHR5ICV9Ci0gICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJtdXRlZCI+VGhpcyB0YXNrIGhhcyBubyBkZXBlbmRlbmNpZXM8L2xpPgotICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCI+CisgICAgICAgIHslIGZvciBkZXAgaW4gZGVwcyAlfQorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InsldXJsICd0YXNrJyBkZXAuYnVpbGQucGsgZGVwLnBrJX0iIGNsYXNzPSJ0YXNrLWluZm8iIHRpdGxlPSJ7e2RlcC5nZXRfZXhlY3V0ZWRfZGlzcGxheX19IHwge3tkZXAuZ2V0X291dGNvbWVfZGlzcGxheX19Ij57e2RlcC5yZWNpcGUubmFtZX19X3t7ZGVwLnJlY2lwZS52ZXJzaW9ufX0gPHNwYW4gY2xhc3M9InRhc2stbmFtZSI+e3tkZXAudGFza19uYW1lfX08L3NwYW4+PC9hPjwvbGk+CisgICAgICAgIHslIGVtcHR5ICV9CisgICAgICAgICAgICA8bGkgY2xhc3M9InRleHQtbXV0ZWQiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPlRoaXMgdGFzayBoYXMgbm8gZGVwZW5kZW5jaWVzPC9saT4KKyAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgICAgIDwvdWw+CiAgICAgPC9kZD4KICAgICA8ZHQ+Ci0gICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUYXNrcyB0aGF0IGRlcGVuZCBvbiB0aGlzIHRhc2siPjwvaT4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2tzIHRoYXQgZGVwZW5kIG9uIHRoaXMKKyAgICAgICAgICAgIHRhc2siPjwvc3Bhbj4KICAgICAgICAgUmV2ZXJzZSBkZXBlbmRlbmNpZXMKICAgICA8L2R0PgogICAgIDxkZD4KLSAgICAgICAgPHVsPgotICAgICAgICAgICAgeyUgZm9yIGRlcCBpbiByZGVwcyAlfQotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JXVybCAndGFzaycgZGVwLmJ1aWxkLnBrIGRlcC5wayV9IiBjbGFzcz0idGFzay1pbmZvIiB0aXRsZT0ie3tkZXAuZ2V0X2V4ZWN1dGVkX2Rpc3BsYXl9fSB8IHt7ZGVwLmdldF9vdXRjb21lX2Rpc3BsYXl9fSI+e3tkZXAucmVjaXBlLm5hbWV9fV97e2RlcC5yZWNpcGUudmVyc2lvbn19IDxzcGFuIGNsYXNzPSJ0YXNrLW5hbWUiPnt7ZGVwLnRhc2tfbmFtZX19PC9zcGFuPjwvYT48L2xpPgotICAgICAgICAgICAgeyUgZW1wdHkgJX0KLSAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im11dGVkIj5UaGlzIHRhc2sgaGFzIG5vIHJldmVyc2UgZGVwZW5kZW5jaWVzPC9saT4KLSAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgorICAgICAgICB7JSBmb3IgZGVwIGluIHJkZXBzICV9CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyV1cmwgJ3Rhc2snIGRlcC5idWlsZC5wayBkZXAucGslfSIgY2xhc3M9InRhc2staW5mbyIgdGl0bGU9Int7ZGVwLmdldF9leGVjdXRlZF9kaXNwbGF5fX0gfCB7e2RlcC5nZXRfb3V0Y29tZV9kaXNwbGF5fX0iPnt7ZGVwLnJlY2lwZS5uYW1lfX1fe3tkZXAucmVjaXBlLnZlcnNpb259fSA8c3BhbiBjbGFzcz0idGFzay1uYW1lIj57e2RlcC50YXNrX25hbWV9fTwvc3Bhbj48L2E+PC9saT4KKyAgICAgICAgeyUgZW1wdHkgJX0KKyAgICAgICAgICAgIDxsaSBjbGFzcz0idGV4dC1tdXRlZCI+VGhpcyB0YXNrIGhhcyBubyByZXZlcnNlIGRlcGVuZGVuY2llczwvbGk+CisgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICA8L3VsPgogPC9kbD4KIApAQCAtMjQ0LDI4ICszMDYsMzYgQEAKICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgogICAgICAgICB7JSBpZiB0YXNrLmVsYXBzZWRfdGltZSAlfQogICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iSG93IGxvbmcgaXQgdG9vayB0aGUgdGFzayB0byBmaW5pc2ggaW4gc2Vjb25kcyI+PC9pPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkhvdworICAgICAgICAgICAgICAgIGxvbmcgaXQgdG9vayB0aGUgdGFzayB0byBmaW5pc2ggaW4gc2Vjb25kcyI+PC9zcGFuPgogICAgICAgICAgICAgVGltZSAoc2VjcykKICAgICAgICAgPC9kdD4KICAgICAgICAgPGRkPnt7dGFzay5lbGFwc2VkX3RpbWV8Zm9ybWF0X25vbmVfYW5kX3plcm98ZmxvYXRmb3JtYXQ6Mn19PC9kZD4KICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgeyUgaWYgdGFzay5jcHVfdGltZV91c2VyID4gMCAlfQogICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVG90YWwgYW1vdW50IG9mIHRpbWUgc3BlbnQgZXhlY3V0aW5nIGluIHVzZXIgbW9kZSwgaW4gc2Vjb25kcy4gTm90ZSB0aGF0IHRoaXMgdGltZSBjYW4gYmUgZ3JlYXRlciB0aGFuIHRoZSB0YXNrIHRpbWUgZHVlIHRvIHBhcmFsbGVsIGV4ZWN1dGlvbi4iPjwvaT4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUb3RhbCBhbW91bnQgb2YgdGltZQorICAgICAgICAgICAgICAgIHNwZW50IGV4ZWN1dGluZyBpbiB1c2VyIG1vZGUsIGluIHNlY29uZHMuIE5vdGUgdGhhdCB0aGlzIHRpbWUKKyAgICAgICAgICAgIGNhbiBiZSBncmVhdGVyIHRoYW4gdGhlIHRhc2sgdGltZSBkdWUgdG8gcGFyYWxsZWwKKyAgICAgICAgZXhlY3V0aW9uLiI+PC9zcGFuPgogICAgICAgICAgICAgVXNlciBDUFUgdGltZSAoc2VjcykKICAgICAgICAgPC9kdD4KICAgICAgICAgPGRkPnt7dGFzay5jcHVfdGltZV91c2VyfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fTwvZGQ+CiAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgIHslIGlmIHRhc2suY3B1X3RpbWVfc3lzdGVtID4gMCAlfQogICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVG90YWwgYW1vdW50IG9mIHRpbWUgc3BlbnQgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlLCBpbiBzZWNvbmRzLiBOb3RlIHRoYXQgdGhpcyB0aW1lIGNhbiBiZSBncmVhdGVyIHRoYW4gdGhlIHRhc2sgdGltZSBkdWUgdG8gcGFyYWxsZWwgZXhlY3V0aW9uLiI+PC9pPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRvdGFsIGFtb3VudCBvZiB0aW1lCisgICAgICAgICAgICAgICAgc3BlbnQgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlLCBpbiBzZWNvbmRzLiBOb3RlIHRoYXQgdGhpcyB0aW1lCisgICAgICAgICAgICBjYW4gYmUgZ3JlYXRlciB0aGFuIHRoZSB0YXNrIHRpbWUgZHVlIHRvIHBhcmFsbGVsCisgICAgICAgIGV4ZWN1dGlvbi4iPjwvc3Bhbj4KICAgICAgICAgICAgIFN5c3RlbSBDUFUgdGltZSAoc2VjcykKICAgICAgICAgPC9kdD4KICAgICAgICAgPGRkPnt7dGFzay5jcHVfdGltZV9zeXN0ZW18Zm9ybWF0X25vbmVfYW5kX3plcm98ZmxvYXRmb3JtYXQ6Mn19PC9kZD4KICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgeyUgaWYgdGFzay5kaXNrX2lvID4gMCAlfQogICAgICAgICA8ZHQ+Ci0gICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gYW5kIHJlYWQgZnJvbSB0aGUgZGlzayBkdXJpbmcgdGhlIHRhc2siPjwvaT4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJOdW1iZXIgb2YgYnl0ZXMKKyAgICAgICAgICAgICAgICB3cml0dGVuIHRvIGFuZCByZWFkIGZyb20gdGhlIGRpc2sgZHVyaW5nIHRoZSB0YXNrIj48L3NwYW4+CiAgICAgICAgICAgICBEaXNrIEkvTyAoYnl0ZXMpCiAgICAgICAgIDwvZHQ+CiAgICAgICAgIDxkZD57e3Rhc2suZGlza19pb3xmb3JtYXRfbm9uZV9hbmRfemVyb3xpbnRjb21tYX19PC9kZD4KQEAgLTI3Myw1ICszNDMsNiBAQAogICAgIDwvZGw+CiAKIDwvZGl2PgorCiB7JSBlbmRibG9jayAlfQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXNrcy5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFza3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRiYzEwMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXNrcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLXslIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KLXslIGxvYWQgaHVtYW5pemUgJX0KLXslIGxvYWQgcHJvamVjdHRhZ3MgJX0KLQoteyUgYmxvY2sgdGl0bGUgJX0ge3ttYWluaGVhZGluZ319IC0ge3tidWlsZC50YXJnZXRfc2V0LmFsbHxkaWN0c29ydDoidGFyZ2V0Inxqb2luOiIsICJ9fSB7e2J1aWxkLm1hY2hpbmV9fSAtIHt7YnVpbGQucHJvamVjdC5uYW1lfX0gLSBUb2FzdGVyeyUgZW5kYmxvY2sgJX0KLXslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQotPGxpPnt7bWFpbmhlYWRpbmd9fTwvbGk+Ci17JSBlbmRibG9jayAlfQotCi17JSBibG9jayBuYXYtdGFza3MgJX0KLSAgeyUgaWYgJ1Rhc2tzJyA9PSBtYWluaGVhZGluZyAlfQotICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfSI+VGFza3M8L2E+PC9saT4KLSAgeyUgZWxzZSAlfQotICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfSI+VGFza3M8L2E+PC9saT4KLSAgeyUgZW5kaWYgJX0KLXslIGVuZGJsb2NrICV9Ci17JSBibG9jayBuYXYtYnVpbGR0aW1lICV9Ci0gIHslIGlmICdUaW1lJyA9PSBtYWluaGVhZGluZyAlfQotICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPlRpbWU8L2E+PC9saT4KLSAgeyUgZWxzZSAlfQotICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPlRpbWU8L2E+PC9saT4KLSAgeyUgZW5kaWYgJX0KLXslIGVuZGJsb2NrICV9Ci0KLXslIGJsb2NrIG5hdi1jcHV0aW1lICV9Ci0gIHslIGlmICdDUFUgdGltZScgPT0gbWFpbmhlYWRpbmcgJX0KLSAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdjcHV0aW1lJyBidWlsZC5wayAlfSI+Q1BVIHRpbWU8L2E+PC9saT4KLSAgeyUgZWxzZSAlfQotICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2NwdXRpbWUnIGJ1aWxkLnBrICV9Ij5DUFUgdGltZTwvYT48L2xpPgotICB7JSBlbmRpZiAlfQoteyUgZW5kYmxvY2sgJX0KLQoteyUgYmxvY2sgbmF2LWRpc2tpbyAlfQotICB7JSBpZiAnRGlzayBJL08nID09IG1haW5oZWFkaW5nICV9Ci0gICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnZGlza2lvJyBidWlsZC5wayAlfSI+RGlzayBJL088L2E+PC9saT4KLSAgeyUgZWxzZSAlfQotICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2Rpc2tpbycgYnVpbGQucGsgJX0iPkRpc2sgSS9PPC9hPjwvbGk+Ci0gIHslIGVuZGlmICV9Ci17JSBlbmRibG9jayAlfQotCi17JSBibG9jayBidWlsZGluZm9tYWluICV9Ci08ZGl2IGNsYXNzPSJzcGFuMTAiPgoteyUgaWYgbm90IHJlcXVlc3QuR0VULmZpbHRlciBhbmQgbm90IHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgbm90IG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICV9Ci0gIDwhLS0gRW1wdHkgLSBubyBkYXRhIGluIGRhdGFiYXNlIC0tPgotICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+Ci0gIDxoMT57e21haW5oZWFkaW5nfX08L2gxPgotICA8L2Rpdj4KLSAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIj4KLSAgTm8gZGF0YSB3YXMgcmVjb3JkZWQgZm9yIHRoaXMgYnVpbGQuCi0gIDwvZGl2PgotCi17JSBlbHNlICV9Ci0KLSAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgotICA8aDE+Ci0gIHslIGlmICByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gIDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+ICAwICV9Ci0gICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gdGFza3t7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKLSAgeyVlbGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KLSAgICAgIE5vIHRhc2tzIGZvdW5kCi0gIHslZWxzZSV9Ci0gICAgICB7e21haW5oZWFkaW5nfX0KLSAgeyVlbmRpZiV9Ci0gIDwvaDE+Ci0gIDwvZGl2PgotCi0gIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KLSAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KLSAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KLSAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+Ci0gICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7cmVxdWVzdC5HRVQuc2VhcmNofX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQotICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgotICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHRhc2tzPC9idXR0b24+Ci0gICAgICAgIDwvZm9ybT4KLSAgICAgIDwvZGl2PgotICA8L2Rpdj4KLQotCi0gIHslIGVsc2UgJX0KLSAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQotCi0gICAgeyUgZm9yIHRhc2sgaW4gb2JqZWN0cyAlfQotICAgICAgICA8dHIge3sgdGFza3x0YXNrX2NvbG9yIH19IGlkPSJ7e3Rhc2sub3JkZXJ9fSI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9Im9yZGVyIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2sub3JkZXJ9fTwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9uYW1lIiA+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHRhc2sucmVjaXBlLnBrICV9Ij57e3Rhc2sucmVjaXBlLm5hbWV9fTwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV92ZXJzaW9uIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgdGFzay5yZWNpcGUucGsgJX0iPnt7dGFzay5yZWNpcGUudmVyc2lvbn19PC9hPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFza19uYW1lIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2sudGFza19uYW1lfX08L2E+IHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3t0YXNrLmdldF9kZXNjcmlwdGlvbn19Ij48L2k+IHslIGVuZGlmICV9Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJleGVjdXRlZCI+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJvdXRjb21lIj4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT4KLSAgICAgICAgICAgICAgICB7JSBpZiB0YXNrLm91dGNvbWUgPSB0YXNrLk9VVENPTUVfRkFJTEVEICV9Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICJ0YXNrbG9nZmlsZSIgdGFzay5wayAlfSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+Ci0gICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImNhY2hlX2F0dGVtcHQiPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrJX0iPnt7dGFzay5nZXRfc3N0YXRlX3Jlc3VsdF9kaXNwbGF5fGZvcm1hdF9ub25lX2FuZF96ZXJvfX08L2E+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aW1lX3Rha2VuIj4KLSAgICAgICAgICAgICAgICB7e3Rhc2suZWxhcHNlZF90aW1lfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fQotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iY3B1X3RpbWVfc3lzdGVtIj4KLSAgICAgICAgICAgICAgICB7e3Rhc2suY3B1X3RpbWVfc3lzdGVtfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fQotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iY3B1X3RpbWVfdXNlciI+Ci0gICAgICAgICAgICAgICAge3t0YXNrLmNwdV90aW1lX3VzZXJ8Zm9ybWF0X25vbmVfYW5kX3plcm98ZmxvYXRmb3JtYXQ6Mn19Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJkaXNrX2lvIj4KLSAgICAgICAgICAgICAgICB7e3Rhc2suZGlza19pb3xmb3JtYXRfbm9uZV9hbmRfemVyb3xpbnRjb21tYX19Ci0gICAgICAgICAgICA8L3RkPgotCi0gICAgICAgIDwvdHI+Ci0gICAgeyUgZW5kZm9yICV9Ci0KLSAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQotICB7JSBlbmRpZiAlfSB7IyBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAjfQoteyUgZW5kaWYgJX0geyMgZW1wdHkgI30KLTwvZGl2PgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0KLSAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKLSAgICAgICAgLy8gaGlnaGxpZ2h0IGhlYWRpbmcgb24gdGhlIGNvbHVtbiBmb3IgdGhlIGZpZWxkIHVzZWQgZm9yIG9yZGVyaW5nCi0gICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnIycpID4gLTEpIHsKLSAgICAgICAgICAgIHZhciB0YXNrX29yZGVyID0gbG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzFdOwotICAgICAgICAgICAgJCgiIyIgKyB0YXNrX29yZGVyKS5hZGRDbGFzcygiaGlnaGxpZ2h0Iik7Ci0gICAgICAgIH0KLSAgICB9KTsKLQotPC9zY3JpcHQ+Ci0KLXslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtZmlsdGVyLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtZmlsdGVyLmh0bWwKaW5kZXggNGQyODc5My4uMjVlZWY1MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLWZpbHRlci5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbApAQCAtMSwyMCArMSwyNCBAQAogPCEtLSBmaWx0ZXIgbW9kYWwgLS0+Ci08ZGl2IGlkPSJmaWx0ZXItbW9kYWwte3t0YWJsZV9uYW1lfX0iIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWhpZGRlbj0iZmFsc2UiPgotICA8Zm9ybSBpZD0iZmlsdGVyLW1vZGFsLWZvcm0te3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwcHgiPgotICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+Ci0gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgotICAgICAgPGgzIGlkPSJmaWx0ZXItbW9kYWwtdGl0bGUte3t0YWJsZV9uYW1lfX0iPiZuYnNwOzwvaDM+Ci0gICAgPC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+Ci0gICAgICA8cD5TaG93OjwvcD4KLSAgICAgIDxzcGFuIGlkPSJmaWx0ZXItYWN0aW9ucy17e3RhYmxlX25hbWV9fSI+PC9zcGFuPgotICAgIDwvZGl2PgotICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIHR5cGU9InN1Ym1pdCIgZGF0YS1yb2xlPSJmaWx0ZXItYXBwbHkiPgorPGRpdiBpZD0iZmlsdGVyLW1vZGFsLXt7dGFibGVfbmFtZX19IiBjbGFzcz0ibW9kYWwgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgICAgICA8aDMgaWQ9ImZpbHRlci1tb2RhbC10aXRsZS17e3RhYmxlX25hbWV9fSI+Jm5ic3A7PC9oMz4KKwk8L2Rpdj4KKwk8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKwkgIDxmb3JtIGlkPSJmaWx0ZXItbW9kYWwtZm9ybS17e3RhYmxlX25hbWV9fSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBweCI+CisJICA8cD5TaG93OjwvcD4KKwkgIDxzcGFuIGlkPSJmaWx0ZXItYWN0aW9ucy17e3RhYmxlX25hbWV9fSI+PC9zcGFuPgorCTwvZGl2PgorCTxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CisgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiIGRhdGEtcm9sZT0iZmlsdGVyLWFwcGx5Ij4KICAgICAgICAgQXBwbHkKLSAgICAgIDwvYnV0dG9uPgorCSAgPC9idXR0b24+CisJPC9kaXY+CisgICAgICA8L2Zvcm0+CiAgICAgPC9kaXY+Ci0gIDwvZm9ybT4KKyAgPC9kaXY+CiA8L2Rpdj4KIDxidXR0b24gaWQ9ImNsZWFyLWZpbHRlci1idG4te3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvYnV0dG9uPgogPCEtLSBlbmQgZmlsdGVyIG1vZGFsIC0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLXNpbXBsZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLXNpbXBsZS5odG1sCmluZGV4IDIxMjMxOGIuLjU2Y2QyY2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtc2ltcGxlLmh0bWwKQEAgLTI2LDM3ICsyNiwzOCBAQAogCiB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CiAKLTxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8ZGl2IGNsYXNzPSJhbGVydCI+Ci0gICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KLSAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ibmV3LXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPgotICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+Ci0gICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgotICAgICAgPC9hPgotICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KLSAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayByZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSI+U2hvdyB7e3RpdGxlfGxvd2VyfX0KLSAgICAgIDwvYnV0dG9uPgorPGRpdiBpZD0ibm8tcmVzdWx0cy17e3RhYmxlX25hbWV9fSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGZvcm0taW5saW5lIj4KKyAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibmV3LXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSBnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUiIHRhYmluZGV4PSItMSI+PC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19Ij5TaG93IGFsbCB7e3RpdGxlfGxvd2VyfX08L2J1dHRvbj4KICAgICA8L2Zvcm0+CiAgIDwvZGl2PgogPC9kaXY+CiA8ZGl2IGlkPSJ0YWJsZS1jb250YWluZXIte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iPgogICA8IS0tIGNvbnRyb2wgaGVhZGVyIC0tPgotICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiIGlkPSJ0YWJsZS1jaHJvbWUte3t0YWJsZV9uYW1lfX0iPgotICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLXNlYXJjaCBpbnB1dC1hcHBlbmQgcHVsbC1sZWZ0Ij4KKyAgPGRpdiBpZD0idGFibGUtY2hyb21lLXt7dGFibGVfbmFtZX19Ij4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgZGV0YWlsLXBhZ2UtY29udG9scyI+CisgICAgICA8Zm9ybSBjbGFzcz0ibmF2YmFyLWZvcm0gbmF2YmFyLWxlZnQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJzZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz4KKyAgICAgICAgICAgIDxzcGFuIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJyZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSBnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUiIHRhYmluZGV4PSItMSI+PC9zcGFuPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBpZD0ic2VhcmNoLXN1Ym1pdC17e3RhYmxlX25hbWV9fSIgPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPC9mb3JtPgogCi0gICAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+Ci0gICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgotICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgotICAgICAgICA8L2E+Ci0gICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KLSAgICAgIDwvZGl2PgotCi0gICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KLQotICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Ci0gICAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KLSAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgotICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItZm9ybSBuYXZiYXItcmlnaHQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICA8bGFiZWw+U2hvdyByb3dzOjwvbGFiZWw+CisgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIHBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KICAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQogICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CkBAIC02NCwzMSArNjUsMzYgQEAKICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgPC9kaXY+Ci0gICAgICA8L2Rpdj4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2Rpdj4KICAgPC9kaXY+CiAKICAgPCEtLSBUaGUgYWN0dWFsIHRhYmxlIC0tPgotICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ie3t0YWJsZV9uYW1lfX0iPgotICAgIDx0aGVhZD4KLSAgICAgIDx0cj48dGg+PC90aD48L3RyPgotICAgIDwvdGhlYWQ+Ci0gICAgPHRib2R5PjwvdGJvZHk+Ci0gIDwvdGFibGU+CisgIDxkaXYgY2xhc3M9InRhYmxlLXJlc3BvbnNpdmUiPgorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiIGlkPSJ7e3RhYmxlX25hbWV9fSI+CisgICAgICA8dGhlYWQ+CisgICAgICAgIDx0cj48dGg+PC90aD48L3RyPgorICAgICAgPC90aGVhZD4KKyAgICAgIDx0Ym9keT48L3Rib2R5PgorICAgIDwvdGFibGU+CisgIDwvZGl2PgogCiAgIDwhLS0gUGFnaW5hdGlvbiBjb250cm9scyAtLT4KLSAgPGRpdiBjbGFzcz0icGFnaW5hdGlvbiBwYWdpbmF0aW9uLWNlbnRlcmVkIiBpZD0icGFnaW5hdGlvbi17e3RhYmxlX25hbWV9fSI+Ci0gICAgPHVsIGNsYXNzPSJwYWdpbmF0aW9uIiBzdHlsZT0iZGlzcGxheTogYmxvY2staW5saW5lIj4KKyAgPGRpdiBpZD0icGFnaW5hdGlvbi17e3RhYmxlX25hbWV9fSI+CisgICAgPHVsIGNsYXNzPSJwYWdpbmF0aW9uIj4KICAgICA8L3VsPgogCi0gICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+Ci0gICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgotICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUte3t0YWJsZV9uYW1lfX0iPgotICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KLSAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQotICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KLSAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgIDwvc2VsZWN0PgotICAgIDwvZGl2PgorICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItZm9ybSBuYXZiYXItcmlnaHQiPgorICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgIDxsYWJlbD5TaG93IHJvd3M6PC9sYWJlbD4KKyAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIHBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICA8L3NlbGVjdD4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9ybT4KICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLmh0bWwKaW5kZXggMjFjM2QzNi4uYWExNDg5NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLmh0bWwKQEAgLTI1LDE0ICsyNSwyMCBAQAogCiB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CiAKLTxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8ZGl2IGNsYXNzPSJhbGVydCI+Ci0gICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KLSAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteHhsYXJnZSIgaWQ9Im5ldy1zZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KLSAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgotICAgICAgICA8aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT4KLSAgICAgIDwvYT4KLSAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzZWFyY2gtc3VibWl0LXt7dGFibGVfbmFtZX19Ij4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9ImVtcHR5LXN0YXRlLXt7dGFibGVfbmFtZX19IiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+e3tlbXB0eV9zdGF0ZXxzYWZlfX08L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGlkPSJuby1yZXN1bHRzLXt7dGFibGVfbmFtZX19IiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIj4KKyAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibmV3LXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslZW5kaWYlfSIvPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSBnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUiIHRhYmluZGV4PSItMSI+PC9hPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iPgogICAgICAgICBTZWFyY2gKICAgICAgIDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIHNob3ctYWxsLXt7dGFibGVfbmFtZX19IHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19Ij4KQEAgLTQ0LDYyICs1MCw3NiBAQAogCiA8ZGl2IGlkPSJ0YWJsZS1jb250YWluZXIte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iPgogICA8IS0tIGNvbnRyb2wgaGVhZGVyIC0tPgotICA8ZGl2IGNsYXNzPSJuYXZiYXIiIGlkPSJ0YWJsZS1jaHJvbWUte3t0YWJsZV9uYW1lfX0iPgotICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+Ci0gICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQgc3BhbjYiPgotCi0gICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2glfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KLSAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+Ci0gICAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+Ci0gICAgICAgIDwvYT4KLSAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic2VhcmNoLXN1Ym1pdC17e3RhYmxlX25hbWV9fSIgPlNlYXJjaDwvYnV0dG9uPgorICA8ZGl2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIGlkPSJ0YWJsZS1jaHJvbWUte3t0YWJsZV9uYW1lfX0iPgorICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaGVhZGVyIj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJuYXZiYXItdG9nZ2xlIGNvbGxhcHNlZCIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBkYXRhLXRhcmdldD0iI3RhYmxlLWNocm9tZS1jb2xsYXBzZS17e3RhYmxlX25hbWV9fSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJzci1vbmx5Ij5Ub2dnbGUgbmF2aWdhdGlvbjwvc3Bhbj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgICAgPC9idXR0b24+CiAgICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+Ci0gICAgICAgICAgPGJ1dHRvbiBpZD0iZWRpdC1jb2x1bW5zLWJ1dHRvbiIgY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RWRpdCBjb2x1bW5zCisgICAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2UiIGlkPSJ0YWJsZS1jaHJvbWUtY29sbGFwc2Ute3t0YWJsZV9uYW1lfX0iPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibmF2YmFyLWZvcm0gbmF2YmFyLWxlZnQiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIj4KKyAgICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslZW5kaWYlfSIvPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0gZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmUtY2lyY2xlIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgaWQ9InNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibmF2YmFyLWZvcm0gbmF2YmFyLXJpZ2h0Ij4KKyAgICAgICAgICA8ZGl2IGNsYXM9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgPGxhYmVsPlNob3cgcm93czo8L2xhYmVsPgorICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIHBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAgbmF2YmFyLXJpZ2h0Ij4KKyAgICAgICAgICA8YnV0dG9uIGlkPSJlZGl0LWNvbHVtbnMtYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IG5hdmJhci1idG4gZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkVkaXQgY29sdW1ucwogICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmV0Ij48L3NwYW4+CiAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IGVkaXRjb2wiPgogICAgICAgICAgIDwvdWw+CiAgICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Ci0gICAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KLSAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgotICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KLSAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQotICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQotICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+Ci0gICAgICAgICAgICB7JSBlbmRmb3IgJX0KLSAgICAgICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgPC9kaXY+CiAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KICAgPC9kaXY+CiAKICAgPCEtLSBUaGUgYWN0dWFsIHRhYmxlIC0tPgotICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ie3t0YWJsZV9uYW1lfX0iPgotICAgIDx0aGVhZD4KLSAgICAgIDx0cj48dGg+PC90aD48L3RyPgotICAgIDwvdGhlYWQ+Ci0gICAgPHRib2R5PjwvdGJvZHk+Ci0gIDwvdGFibGU+CisgIDxkaXYgY2xhc3M9InRhYmxlLXJlc3BvbnNpdmUiPgorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiIGlkPSJ7e3RhYmxlX25hbWV9fSI+CisgICAgICA8dGhlYWQ+CisgICAgICAgIDx0cj48dGg+PC90aD48L3RyPgorICAgICAgPC90aGVhZD4KKyAgICAgIDx0Ym9keT48L3Rib2R5PgorICAgIDwvdGFibGU+CisgIDwvZGl2PgogCiAgIDwhLS0gUGFnaW5hdGlvbiBjb250cm9scyAtLT4KLSAgPGRpdiBjbGFzcz0icGFnaW5hdGlvbiBwYWdpbmF0aW9uLWNlbnRlcmVkIiBpZD0icGFnaW5hdGlvbi17e3RhYmxlX25hbWV9fSI+Ci0gICAgPHVsIGNsYXNzPSJwYWdpbmF0aW9uIiBzdHlsZT0iZGlzcGxheTogYmxvY2staW5saW5lIj4KKyAgPGRpdiBpZD0icGFnaW5hdGlvbi17e3RhYmxlX25hbWV9fSI+CisgICAgPHVsIGNsYXNzPSJwYWdpbmF0aW9uIj4KICAgICA8L3VsPgogCi0gICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+Ci0gICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgotICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUte3t0YWJsZV9uYW1lfX0iPgotICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KLSAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQotICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KLSAgICAgICAgeyUgZW5kZm9yICV9Ci0gICAgICAgIHslIGVuZHdpdGggJX0KLSAgICAgIDwvc2VsZWN0PgotICAgIDwvZGl2PgorICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItZm9ybSBuYXZiYXItcmlnaHQiPgorICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgIDxsYWJlbD5TaG93IHJvd3M6PC9sYWJlbD4KKyAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIHBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICA8L3NlbGVjdD4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9ybT4KICAgPC9kaXY+Ci08L2Rpdj4KKworPC9kaXY+IDwhLS1lbmQgdGFibGUgY29udGFpbmVyIC0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdW5hdmFpbGFibGVfYXJ0aWZhY3QuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3VuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwKaW5kZXggMmQzZDAyYy4uZmM3N2U0MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdW5hdmFpbGFibGVfYXJ0aWZhY3QuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy91bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sCkBAIC02LDEwICs2LDEyIEBACiB7JSBibG9jayB0aXRsZSAlfSBCdWlsZCBhcnRpZmFjdCBkb2VzIG5vdCBleGlzdCAtIFRvYXN0ZXIgeyUgZW5kYmxvY2sgJX0KIAogeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KLSAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgYWlyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBzcGFuOCBsZWFkIj4KLSAgICAgICAgICAgIDxwPlRoZSBidWlsZCBhcnRpZmFjdCB5b3UgYXJlIHRyeWluZyB0byBkb3dubG9hZCBkb2VzIG5vdCBleGlzdC48L3A+Ci0gICAgICAgICAgICA8cD48YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5oaXN0b3J5LmJhY2soKSI+QmFjayB0byBwcmV2aW91cyBwYWdlPC9hPjwvcD4KKyAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtOCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQgdG9wLWFpciI+CisgICAgICAgICAgICAgICAgPHA+VGhlIGJ1aWxkIGFydGlmYWN0IHlvdSBhcmUgdHJ5aW5nIHRvIGRvd25sb2FkIGRvZXMgbm90IGV4aXN0LjwvcD4KKyAgICAgICAgICAgICAgICA8cD48YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5oaXN0b3J5LmJhY2soKSI+QmFjayB0byBwcmV2aW91cyBwYWdlPC9hPjwvcD4KKyAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KIHslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9maWVsZF92YWx1ZXNfZmlsdGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvZmllbGRfdmFsdWVzX2ZpbHRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTczYWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvZmllbGRfdmFsdWVzX2ZpbHRlci5weQpAQCAtMCwwICsxLDE4IEBACitmcm9tIGRqYW5nbyBpbXBvcnQgdGVtcGxhdGUKKworcmVnaXN0ZXIgPSB0ZW1wbGF0ZS5MaWJyYXJ5KCkKKworZGVmIGZpZWxkX3ZhbHVlcyhpdGVyYWJsZSwgZmllbGQpOgorICAgICIiIgorICAgIENvbnZlcnQgYW4gaXRlcmFibGUgb2YgbW9kZWxzIGludG8gYSBsaXN0IG9mIHN0cmluZ3MsIG9uZSBmb3IgZWFjaCBtb2RlbCwKKyAgICB3aGVyZSB0aGUgc3RyaW5nIGZvciBlYWNoIG1vZGVsIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgImZpZWxkIi4KKyAgICAiIiIKKyAgICBvYmplY3RzID0gW10KKworICAgIGlmIGZpZWxkOgorICAgICAgICBmb3IgaXRlbSBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKGdldGF0dHIoaXRlbSwgZmllbGQpKQorCisgICAgcmV0dXJuIG9iamVjdHMKKworcmVnaXN0ZXIuZmlsdGVyKCdmaWVsZF92YWx1ZXMnLCBmaWVsZF92YWx1ZXMpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvcHJvamVjdHRhZ3MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9wcm9qZWN0dGFncy5weQppbmRleCA3NWYyMjYxLi5iMTcwYTE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9wcm9qZWN0dGFncy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9wcm9qZWN0dGFncy5weQpAQCAtOTAsNyArOTAsNyBAQAogZGVmIGRpdmlkZSh2YWx1ZSwgYXJnKToKICAgICBpZiBpbnQoYXJnKSA9PSAwOgogICAgICAgICByZXR1cm4gLTEKLSAgICByZXR1cm4gaW50KHZhbHVlKSAvIGludChhcmcpCisgICAgcmV0dXJuIGludCh2YWx1ZSkgLy8gaW50KGFyZykKIAogQHJlZ2lzdGVyLmZpbHRlcgogZGVmIG11bHRpcGx5KHZhbHVlLCBhcmcpOgpAQCAtMTEyLDExICsxMTIsMTEgQEAKICAgICAgICAgc2hvd19ncmVlbiBhcmd1bWVudCBzaG91bGQgYmUgVHJ1ZSB0byBnZXQgZ3JlZW4gY29sb3IuCiAgICAgIiIiCiAgICAgaWYgbm90IHRhc2tfb2JqZWN0LnRhc2tfZXhlY3V0ZWQ6Ci0gICAgICAgIHJldHVybiAnY2xhc3M9bXV0ZWQnCisgICAgICAgIHJldHVybiAnY2xhc3M9dGV4dC1tdXRlZCcKICAgICBlbGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gdGFza19vYmplY3QuT1VUQ09NRV9GQUlMRUQ6Ci0gICAgICAgIHJldHVybiAnY2xhc3M9ZXJyb3InCisgICAgICAgIHJldHVybiAnY2xhc3M9dGV4dC1kYW5nZXInCiAgICAgZWxpZiB0YXNrX29iamVjdC5vdXRjb21lID09IHRhc2tfb2JqZWN0Lk9VVENPTUVfU1VDQ0VTUyBhbmQgc2hvd19ncmVlbjoKLSAgICAgICAgcmV0dXJuICdjbGFzcz1ncmVlbicKKyAgICAgICAgcmV0dXJuICdjbGFzcz10ZXh0LXN1Y2Nlc3MnCiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuICcnCiAKQEAgLTI1MCwxNSArMjUwLDE1IEBACiBAcmVnaXN0ZXIuZmlsdGVyCiBkZWYgZm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzKHNpemUpOgogICAgIGlmIHNpemUgPT0gLTE6Ci0gICAgICAgIHJldHVybiBtYXJrX3NhZmUoJ2NsYXNzPSJtdXRlZCInKQorICAgICAgICByZXR1cm4gbWFya19zYWZlKCdjbGFzcz0idGV4dC1tdXRlZCInKQogICAgIHJldHVybiAnJwogCiBAcmVnaXN0ZXIuZmlsdGVyCiBkZWYgZm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwKG5hbWUpOgogICAgIHIgPSAgbmFtZSArICcmbmJzcDsnCi0gICAgciArPSAnPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIicKKyAgICByICs9ICc8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiJwogICAgIHIgKz0gJyB0aXRsZSA9ICInICsgbmFtZSArICcgaGFzIG5vdCBiZWVuIGJ1aWx0Ij4nCi0gICAgciArPSAnPC9pPicKKyAgICByICs9ICc8L3NwYW4+JwogICAgIHJldHVybiBtYXJrX3NhZmUocikKIAogQHJlZ2lzdGVyLmZpbHRlcgpAQCAtMjcxLDE0ICsyNzEsNiBAQAogICAgICAgICByZXR1cm4gJycKIAogQHJlZ2lzdGVyLmZpbHRlcgotZGVmIGZvcm1hdF9idWlsZF9kYXRlKGNvbXBsZXRlZF9vbik6Ci0gICAgbm93ID0gdGltZXpvbmUubm93KCkKLSAgICBkZWx0YSA9IG5vdyAtIGNvbXBsZXRlZF9vbgotCi0gICAgaWYgZGVsdGEuZGF5cyA+PSAxOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi1AcmVnaXN0ZXIuZmlsdGVyCiBkZWYgaXNfc2hhaWQodGV4dCk6CiAgICAgIiIiIHJldHVybiBUcnVlIGlmIHRleHQgbGVuZ3RoIGlzIDQwIGNoYXJhY3RlcnMgYW5kIGFsbCBoZXgtZGlnaXRzCiAgICAgIiIiCkBAIC0yOTcsMyArMjg5LDExIEBACiAgICAgICAgIGlmIGZ1bGxwYXRoLnN0YXJ0c3dpdGgocHJlZml4KToKICAgICAgICAgICAgIHJldHVybiByZWxwYXRoKGZ1bGxwYXRoLCBwcmVmaXgpCiAgICAgcmV0dXJuIGZ1bGxwYXRoCisKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZvcl90YXJnZXQocGFja2FnZV9kZXBlbmRlbmNpZXMsIHRhcmdldCk6CisgICAgIiIiIGZpbHRlciB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGRpc3BsYXllZCBieSB0aGUgc3VwcGxpZWQgdGFyZ2V0CisgICAgaWYgbm8gZGVwZW5kZW5jZXMgYXJlIGZvdW5kIGZvciB0aGUgdGFyZ2V0IHRoZW4gcmV0dXJuIHRoZSBwcmVkaWN0ZWQKKyAgICBkZXBlbmRlbmNlcyIiIgorICAgIHJldHVybiBwYWNrYWdlX2RlcGVuZGVuY2llcy5mb3JfdGFyZ2V0X29yX25vbmUodGFyZ2V0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZXN0cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVzdHMucHkKaW5kZXggYTRjYWI1OC4uMmI1ODk0ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZXN0cy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3Rlc3RzLnB5CkBAIC0yNSwxMiArMjUsMTMgQEAKIGZyb20gZGphbmdvLnRlc3QuY2xpZW50IGltcG9ydCBSZXF1ZXN0RmFjdG9yeQogZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKIGZyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCiAKIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUmVsZWFzZSwgQml0YmFrZVZlcnNpb24sIFBhY2thZ2UsIExvZ01lc3NhZ2UKLWZyb20gb3JtLm1vZGVscyBpbXBvcnQgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHksIExheWVyU291cmNlLCBMYXllciwgQnVpbGQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UsIExheWVyLCBCdWlsZAogZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllcl9WZXJzaW9uLCBSZWNpcGUsIE1hY2hpbmUsIFByb2plY3RMYXllciwgVGFyZ2V0CiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEN1c3RvbUltYWdlUmVjaXBlLCBQcm9qZWN0VmFyaWFibGUKLWZyb20gb3JtLm1vZGVscyBpbXBvcnQgQnJhbmNoLCBDdXN0b21JbWFnZVBhY2thZ2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQ3VzdG9tSW1hZ2VQYWNrYWdlCiAKIGltcG9ydCB0b2FzdGVybWFpbgogaW1wb3J0IGluc3BlY3QKQEAgLTU3LDcgKzU4LDYgQEAKIAogICAgICAgICBzZWxmLnByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZmlyc3QoKQogICAgICAgICBzZWxmLnJlY2lwZTEgPSBSZWNpcGUub2JqZWN0cy5nZXQocGs9MikKLSAgICAgICAgc2VsZi5yZWNpcGUyID0gUmVjaXBlLm9iamVjdHMubGFzdCgpCiAgICAgICAgIHNlbGYuY3VzdG9tciA9IEN1c3RvbUltYWdlUmVjaXBlLm9iamVjdHMuZmlyc3QoKQogICAgICAgICBzZWxmLmN1c3RfcGFja2FnZSA9IEN1c3RvbUltYWdlUGFja2FnZS5vYmplY3RzLmZpcnN0KCkKICAgICAgICAgc2VsZi5wYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmZpcnN0KCkKQEAgLTc3LDE0ICs3NywxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZVsnQ29udGVudC1UeXBlJ10uc3RhcnRzd2l0aCgnYXBwbGljYXRpb24vanNvbicpKQogCi0gICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZXJyb3IiIGluIGRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YVsiZXJyb3IiXSwgIm9rIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJyb3dzIiBpbiBkYXRhKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb2plY3QubmFtZSBpbiBbeFsibmFtZSJdIGZvciB4IGluIGRhdGFbInJvd3MiXV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiaWQiIGluIGRhdGFbInJvd3MiXVswXSkKKyAgICAgICAgbmFtZV9mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciByb3cgaW4gZGF0YVsicm93cyJdOgorICAgICAgICAgICAgbmFtZV9mb3VuZCA9IHJvd1snbmFtZSddLmZpbmQoc2VsZi5wcm9qZWN0Lm5hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWVfZm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAicHJvamVjdCBuYW1lIG5vdCBmb3VuZCBpbiBwcm9qZWN0cyB0YWJsZSIpCiAKICAgICBkZWYgdGVzdF90eXBlYWhlYWRzKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHR5cGVhaGVhZCBSZVNUIEFQSSIiIgpAQCAtMTAyLDcgKzEwNiw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2VbJ0NvbnRlbnQtVHlwZSddLnN0YXJ0c3dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSkKIAotICAgICAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoImVycm9yIiBpbiBkYXRhKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQpAQCAtMTQ1LDM0ICsxNDksMzQgQEAKIAogICAgIGRlZiB0ZXN0X3hocl9pbXBvcnRfbGF5ZXIoc2VsZik6CiAgICAgICAgICIiIlRlc3QgeGhyX2ltcG9ydGxheWVyIEFQSSIiIgotICAgICAgICBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShzb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfSU1QT1JURUQpCiAgICAgICAgICNUZXN0IGZvciBpbXBvcnRpbmcgYW4gYWxyZWFkeSBleGlzdGluZyBsYXllcgogICAgICAgICBhcmdzID0geyd2Y3NfdXJsJyA6ICJnaXQ6Ly9naXQuZXhhbXBsZS5jb20vdGVzdCIsCiAgICAgICAgICAgICAgICAgJ25hbWUnIDogImJhc2UtbGF5ZXIiLAogICAgICAgICAgICAgICAgICdnaXRfcmVmJzogImMxMmI5NTk2YWZkMjM2MTE2YjI1Y2UyNmRiZTBkNzkzZGU5ZGM3Y2UiLAogICAgICAgICAgICAgICAgICdwcm9qZWN0X2lkJzogc2VsZi5wcm9qZWN0LmlkLAorICAgICAgICAgICAgICAgICdsb2NhbF9zb3VyY2VfZGlyJzogIiIsCiAgICAgICAgICAgICAgICAgJ2Rpcl9wYXRoJyA6ICIvcGF0aC9pbi9yZXBvc2l0b3J5In0KICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQotICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCiAKICAgICAgICAgI1Rlc3QgdG8gdmVyaWZ5IGltcG9ydCBvZiBhIGxheWVyIHN1Y2Nlc3NmdWwKICAgICAgICAgYXJnc1snbmFtZSddID0gIm1ldGEtb2UiCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKLSAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudC5kZWNvZGUoJ3V0Zi04JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhWyJlcnJvciJdLCAib2siKQogCiAgICAgICAgICNUZXN0IGZvciBodG1sIHRhZyBpbiB0aGUgZGF0YQogICAgICAgICBhcmdzWyc8J10gPSAidGVzdGluZyBodG1sIHRhZyIKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQotICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQogCiAgICAgICAgICNFbXB0eSBkYXRhIHBhc3NlZAogICAgICAgICBhcmdzID0ge30KICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQotICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQogCiAgICAgZGVmIHRlc3RfY3VzdG9tX29rKHNlbGYpOgpAQCAtMTgyLDcgKzE4Niw3IEBACiAgICAgICAgICAgICAgICAgICAnYmFzZSc6IHNlbGYucmVjaXBlMS5pZH0KICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHVybCwgcGFyYW1zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCi0gICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFbJ2Vycm9yJ10sICdvaycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndXJsJyBpbiBkYXRhKQogICAgICAgICAjIGdldCByZWNpcGUgZnJvbSB0aGUgZGF0YWJhc2UKQEAgLTE5OCw3ICsyMDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnY3VzdG9tJywgJ3Byb2plY3QnOiBzZWxmLnByb2plY3QuaWR9XToKICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdCh1cmwsIHBhcmFtcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKLSAgICAgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YVsiZXJyb3IiXSwgIm9rIikKIAogICAgIGRlZiB0ZXN0X3hocl9jdXN0b21fd3JvbmdfcHJvamVjdChzZWxmKToKQEAgLTIwNyw3ICsyMTEsNyBAQAogICAgICAgICBwYXJhbXMgPSB7J25hbWUnOiAnY3VzdG9tJywgJ3Byb2plY3QnOiAwLCAiYmFzZSI6IHNlbGYucmVjaXBlMS5pZH0KICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHVybCwgcGFyYW1zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCi0gICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCiAKICAgICBkZWYgdGVzdF94aHJfY3VzdG9tX3dyb25nX2Jhc2Uoc2VsZik6CkBAIC0yMTYsNyArMjIwLDcgQEAKICAgICAgICAgcGFyYW1zID0geyduYW1lJzogJ2N1c3RvbScsICdwcm9qZWN0Jzogc2VsZi5wcm9qZWN0LmlkLCAiYmFzZSI6IDB9CiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdCh1cmwsIHBhcmFtcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQotICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQogCiAgICAgZGVmIHRlc3RfeGhyX2N1c3RvbV9kZXRhaWxzKHNlbGYpOgpAQCAtMjMxLDcgKzIzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9qZWN0X2lkJzogc2VsZi5wcm9qZWN0LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50LmRlY29kZSgndXRmLTgnKSksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfeGhyX2N1c3RvbV9kZWwoc2VsZik6CiAgICAgICAgICIiIlRlc3QgZGVsZXRpbmcgY3VzdG9tIHJlY2lwZSIiIgpAQCAtMjQ0LDEyICsyNDgsMTggQEAKICAgICAgICAgdXJsID0gcmV2ZXJzZSgneGhyX2N1c3RvbXJlY2lwZV9pZCcsIGFyZ3M9KHJlY2lwZS5pZCwpKQogICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmRlbGV0ZSh1cmwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpLCB7ImVycm9yIjogIm9rIn0pCisKKyAgICAgICAgZ290b1VybCA9IHJldmVyc2UoJ3Byb2plY3RjdXN0b21pbWFnZXMnLCBhcmdzPShzZWxmLnByb2plY3QucGssKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudC5kZWNvZGUoJ3V0Zi04JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsiZXJyb3IiOiAib2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290b1VybCI6IGdvdG9Vcmx9KQorCiAgICAgICAgICMgdHJ5IHRvIGRlbGV0ZSBub3QtZXhpc3RlbnQgcmVjaXBlCiAgICAgICAgIHVybCA9IHJldmVyc2UoJ3hocl9jdXN0b21yZWNpcGVfaWQnLCBhcmdzPShyZWNpcGUuaWQsKSkKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5kZWxldGUodXJsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoanNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KVsiZXJyb3IiXSwgIm9rIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKVsiZXJyb3IiXSwgIm9rIikKIAogICAgIGRlZiB0ZXN0X3hocl9jdXN0b21fcGFja2FnZXMoc2VsZik6CiAgICAgICAgICIiIlRlc3QgYWRkaW5nIGFuZCBkZWxldGluZyBwYWNrYWdlIHRvIGEgY3VzdG9tIHJlY2lwZSIiIgpAQCAtMjU5LDcgKzI2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXN0X3BhY2thZ2UuaWQpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7ImVycm9yIjogIm9rIn0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdXN0b21yLmFwcGVuZHNfc2V0LmZpcnN0KCkubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1c3RfcGFja2FnZS5uYW1lKQpAQCAtMjcwLDcgKzI4MCw3IEBACiAKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5kZWxldGUoZGVsX3VybCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCksIHsiZXJyb3IiOiAib2sifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKSwgeyJlcnJvciI6ICJvayJ9KQogICAgICAgICBhbGxfcGFja2FnZXMgPSBzZWxmLmN1c3RvbXIuZ2V0X2FsbF9wYWNrYWdlcygpLnZhbHVlc19saXN0KCdwaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdD1UcnVlKQogCkBAIC0yODIsNyArMjkyLDcgQEAKIAogICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmRlbGV0ZShkZWxfdXJsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoanNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KVsiZXJyb3IiXSwgIm9rIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKVsiZXJyb3IiXSwgIm9rIikKIAogICAgIGRlZiB0ZXN0X3hocl9jdXN0b21fcGFja2FnZXNfZXJyKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGVycm9yIGNvbmRpdGlvbnMgb2YgeGhyX2N1c3RvbXJlY2lwZV9wYWNrYWdlcyIiIgpAQCAtMjkzLDUxICszMDMsNjAgQEAKICAgICAgICAgICAgIGZvciBtZXRob2QgaW4gKHNlbGYuY2xpZW50LnB1dCwgc2VsZi5jbGllbnQuZGVsZXRlKToKICAgICAgICAgICAgICAgICByZXNwb25zZSA9IG1ldGhvZCh1cmwpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoanNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudC5kZWNvZGUoJ3V0Zi04JykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJlcnJvciI6ICJvayJ9KQogCiAgICAgZGVmIHRlc3RfZG93bmxvYWRfY3VzdG9tX3JlY2lwZShzZWxmKToKICAgICAgICAgIiIiRG93bmxvYWQgdGhlIHJlY2lwZSBmaWxlIGdlbmVyYXRlZCBmb3IgdGhlIGN1c3RvbSBpbWFnZSIiIgogCiAgICAgICAgICMgQ3JlYXRlIGEgZHVtbXkgcmVjaXBlIGZpbGUgZm9yIHRoZSBjdXN0b20gaW1hZ2UgZ2VuZXJhdGlvbiB0byByZWFkCi0gICAgICAgIG9wZW4oIi90bXAvYV9yZWNpcGUuYmIiLCAnd2EnKS5jbG9zZSgpCisgICAgICAgIG9wZW4oIi90bXAvYV9yZWNpcGUuYmIiLCAnYScpLmNsb3NlKCkKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnY3VzdG9tcmVjaXBlZG93bmxvYWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYucHJvamVjdC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbXIuaWQpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCiAKLQogICAgIGRlZiB0ZXN0X3NvZnR3YXJlX3JlY2lwZXNfdGFibGUoc2VsZik6CiAgICAgICAgICIiIlRlc3Qgc3RydWN0dXJlIHJldHVybmVkIGZvciBTb2Z0d2FyZSBSZWNpcGVzVGFibGUiIiIKICAgICAgICAgdGFibGUgPSBTb2Z0d2FyZVJlY2lwZXNUYWJsZSgpCiAgICAgICAgIHJlcXVlc3QgPSBSZXF1ZXN0RmFjdG9yeSgpLmdldCgnL2Zvby8nLCB7J2Zvcm1hdCc6ICdqc29uJ30pCiAgICAgICAgIHJlc3BvbnNlID0gdGFibGUuZ2V0KHJlcXVlc3QsIHBpZD1zZWxmLnByb2plY3QuaWQpCi0gICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKQorCisgICAgICAgIHJlY2lwZXMgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoUShpc19pbWFnZT1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocmVjaXBlcykgPiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5lZWQgbW9yZSB0aGFuIG9uZSBzb2Z0d2FyZSByZWNpcGUgdG8gdGVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiU29mdHdhcmVSZWNpcGVzVGFibGUiKQorCisgICAgICAgIHJlY2lwZTEgPSByZWNpcGVzWzBdCisgICAgICAgIHJlY2lwZTIgPSByZWNpcGVzWzFdCiAKICAgICAgICAgcm93cyA9IGRhdGFbJ3Jvd3MnXQotICAgICAgICByb3cxID0gbmV4dCh4IGZvciB4IGluIHJvd3MgaWYgeFsnbmFtZSddID09IHNlbGYucmVjaXBlMS5uYW1lKQotICAgICAgICByb3cyID0gbmV4dCh4IGZvciB4IGluIHJvd3MgaWYgeFsnbmFtZSddID09IHNlbGYucmVjaXBlMi5uYW1lKQorICAgICAgICByb3cxID0gbmV4dCh4IGZvciB4IGluIHJvd3MgaWYgeFsnbmFtZSddID09IHJlY2lwZTEubmFtZSkKKyAgICAgICAgcm93MiA9IG5leHQoeCBmb3IgeCBpbiByb3dzIGlmIHhbJ25hbWUnXSA9PSByZWNpcGUyLm5hbWUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwLCAnc2hvdWxkIGJlIDIwMCBPSyBzdGF0dXMnKQogCiAgICAgICAgICMgY2hlY2sgb3RoZXIgY29sdW1ucyBoYXZlIGJlZW4gcG9wdWxhdGVkIGNvcnJlY3RseQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdzFbJ25hbWUnXSwgc2VsZi5yZWNpcGUxLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93MVsndmVyc2lvbiddLCBzZWxmLnJlY2lwZTEudmVyc2lvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3cxWydnZXRfZGVzY3JpcHRpb25fb3Jfc3VtbWFyeSddLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlMS5kZXNjcmlwdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3cxWydsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlMS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93MlsnbmFtZSddLCBzZWxmLnJlY2lwZTIubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3cyWyd2ZXJzaW9uJ10sIHNlbGYucmVjaXBlMi52ZXJzaW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdzJbJ2dldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGUyLmRlc2NyaXB0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdzJbJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGUyLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlY2lwZTEubmFtZSBpbiByb3cxWyduYW1lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWNpcGUxLnZlcnNpb24gaW4gcm93MVsndmVyc2lvbiddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVjaXBlMS5kZXNjcmlwdGlvbiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgcm93MVsnZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnknXSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVjaXBlMS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdzFbJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlY2lwZTIubmFtZSBpbiByb3cyWyduYW1lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWNpcGUyLnZlcnNpb24gaW4gcm93MlsndmVyc2lvbiddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVjaXBlMi5kZXNjcmlwdGlvbiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgcm93MlsnZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnknXSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVjaXBlMi5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdzJbJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJ10pCiAKICAgICBkZWYgdGVzdF90b2FzdGVyX3RhYmxlcyhzZWxmKToKICAgICAgICAgIiIiVGVzdCBhbGwgVG9hc3RlclRhYmxlcyBpbnN0YW5jZXMiIiIKLSAgICAgICAgY3VycmVudF9yZWNpcGVzID0gc2VsZi5wcm9qZWN0LmdldF9hdmFpbGFibGVfcmVjaXBlcygpCiAKICAgICAgICAgZGVmIGdldF9kYXRhKHRhYmxlLCBvcHRpb25zPXt9KToKICAgICAgICAgICAgICIiIlNlbmQgYSByZXF1ZXN0IGFuZCBwYXJzZSB0aGUganNvbiByZXNwb25zZSIiIgpAQCAtMzU0LDE5ICszNzMsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgJ2xheWVyaWQnOiBzZWxmLmx2ZXIucGssCiAgICAgICAgICAgICAgICAgICAgICdyZWNpcGVpZCc6IHNlbGYucmVjaXBlMS5waywKICAgICAgICAgICAgICAgICAgICAgJ3JlY2lwZV9pZCc6IGltYWdlX3JlY2lwZS5waywKLSAgICAgICAgICAgICAgICAgICAgJ2N1c3RyZWNpcGVpZCc6IHNlbGYuY3VzdG9tci5wawotICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgJ2N1c3RyZWNpcGVpZCc6IHNlbGYuY3VzdG9tci5waywKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWxkX2lkJzogMSwKKyAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9pZCc6IDF9CiAKICAgICAgICAgICAgIHJlc3BvbnNlID0gdGFibGUuZ2V0KHJlcXVlc3QsICoqYXJncykKLSAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKKworICAgICAgICBkZWYgZ2V0X3RleHRfZnJvbV90ZCh0ZCk6CisgICAgICAgICAgICAiIiJJZiB3ZSBoYXZlIGh0bWwgaW4gdGhlIHRkIHRoZW4gZXh0cmFjdCB0aGUgdGV4dCBwb3J0aW9uIiIiCisgICAgICAgICAgICAjIGp1c3Qgc28gd2UgZG9uJ3Qgd2FzdGUgdGltZSBwYXJzaW5nIG5vbiBodG1sCisgICAgICAgICAgICBpZiAiPCIgbm90IGluIHRkOgorICAgICAgICAgICAgICAgIHJldCA9IHRkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldCA9IEJlYXV0aWZ1bFNvdXAodGQsICJodG1sLnBhcnNlciIpLnRleHQKKworICAgICAgICAgICAgaWYgbGVuKHJldCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICIwIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0CiAKICAgICAgICAgIyBHZXQgYSBsaXN0IG9mIGNsYXNzZXMgaW4gdGFibGVzIG1vZHVsZQogICAgICAgICB0YWJsZXMgPSBpbnNwZWN0LmdldG1lbWJlcnModG9hc3Rlcmd1aS50YWJsZXMsIGluc3BlY3QuaXNjbGFzcykKKyAgICAgICAgdGFibGVzLmV4dGVuZChpbnNwZWN0LmdldG1lbWJlcnModG9hc3Rlcmd1aS5idWlsZHRhYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc2NsYXNzKSkKIAogICAgICAgICBmb3IgbmFtZSwgdGFibGVfY2xzIGluIHRhYmxlczoKICAgICAgICAgICAgICMgRmlsdGVyIG91dCB0aGUgbm9uIFRvYXN0ZXJUYWJsZXMgZnJvbSB0aGUgdGFibGVzIG1vZHVsZQogICAgICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3ModGFibGVfY2xzLCB0b2FzdGVyZ3VpLndpZGdldHMuVG9hc3RlclRhYmxlKSBvciBcCi0gICAgICAgICAgICAgICAgdGFibGVfY2xzID09IHRvYXN0ZXJndWkud2lkZ2V0cy5Ub2FzdGVyVGFibGU6CisgICAgICAgICAgICAgICAgdGFibGVfY2xzID09IHRvYXN0ZXJndWkud2lkZ2V0cy5Ub2FzdGVyVGFibGUgb3IgXAorICAgICAgICAgICAgICAgJ01peGluJyBpbiBuYW1lOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICMgR2V0IHRoZSB0YWJsZSBkYXRhIHdpdGhvdXQgYW55IG9wdGlvbnMsIHRoaXMgYWxzbyBkb2VzIHRoZQpAQCAtMzc5LDggKzQxNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgdGVzdCBvbiBhICVzIHRhYmxlIHdpdGggPCAxIHJvdyIgJSBuYW1lKQogCiAgICAgICAgICAgICBpZiB0YWJsZS5kZWZhdWx0X29yZGVyYnk6Ci0gICAgICAgICAgICAgICAgcm93X29uZSA9IGFsbF9kYXRhWydyb3dzJ11bMF1bdGFibGUuZGVmYXVsdF9vcmRlcmJ5LnN0cmlwKCItIildCi0gICAgICAgICAgICAgICAgcm93X3R3byA9IGFsbF9kYXRhWydyb3dzJ11bMV1bdGFibGUuZGVmYXVsdF9vcmRlcmJ5LnN0cmlwKCItIildCisgICAgICAgICAgICAgICAgcm93X29uZSA9IGdldF90ZXh0X2Zyb21fdGQoCisgICAgICAgICAgICAgICAgICAgIGFsbF9kYXRhWydyb3dzJ11bMF1bdGFibGUuZGVmYXVsdF9vcmRlcmJ5LnN0cmlwKCItIildKQorICAgICAgICAgICAgICAgIHJvd190d28gPSBnZXRfdGV4dF9mcm9tX3RkKAorICAgICAgICAgICAgICAgICAgICBhbGxfZGF0YVsncm93cyddWzFdW3RhYmxlLmRlZmF1bHRfb3JkZXJieS5zdHJpcCgiLSIpXSkKIAogICAgICAgICAgICAgICAgIGlmICctJyBpbiB0YWJsZS5kZWZhdWx0X29yZGVyYnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dfb25lID49IHJvd190d28sCkBAIC0zOTksMjggKzQzNywzNiBAQAogICAgICAgICAgICAgICAgICAgICAjIElmIGEgY29sdW1uIGlzIG9yZGVyYWJsZSB0ZXN0IGl0IGluIGJvdGggb3JkZXIKICAgICAgICAgICAgICAgICAgICAgIyBkaXJlY3Rpb25zIG9yZGVyaW5nIG9uIHRoZSBjb2x1bW5zIGZpZWxkX25hbWUKICAgICAgICAgICAgICAgICAgICAgYXNjZW5kaW5nID0gZ2V0X2RhdGEodGFibGVfY2xzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsib3JkZXJieSIgOiBjb2x1bW5bJ2ZpZWxkX25hbWUnXX0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsib3JkZXJieSI6IGNvbHVtblsnZmllbGRfbmFtZSddfSkKIAotICAgICAgICAgICAgICAgICAgICByb3dfb25lID0gYXNjZW5kaW5nWydyb3dzJ11bMF1bY29sdW1uWydmaWVsZF9uYW1lJ11dCi0gICAgICAgICAgICAgICAgICAgIHJvd190d28gPSBhc2NlbmRpbmdbJ3Jvd3MnXVsxXVtjb2x1bW5bJ2ZpZWxkX25hbWUnXV0KKyAgICAgICAgICAgICAgICAgICAgcm93X29uZSA9IGdldF90ZXh0X2Zyb21fdGQoCisgICAgICAgICAgICAgICAgICAgICAgICBhc2NlbmRpbmdbJ3Jvd3MnXVswXVtjb2x1bW5bJ2ZpZWxkX25hbWUnXV0pCisgICAgICAgICAgICAgICAgICAgIHJvd190d28gPSBnZXRfdGV4dF9mcm9tX3RkKAorICAgICAgICAgICAgICAgICAgICAgICAgYXNjZW5kaW5nWydyb3dzJ11bMV1bY29sdW1uWydmaWVsZF9uYW1lJ11dKQogCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dfb25lIDw9IHJvd190d28sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXNjZW5kaW5nIHNvcnQgYXBwbGllZCBidXQgcm93IDAgaXMgbGVzcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhbiByb3cgMSAlcyAlcyAiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW5bJ2ZpZWxkX25hbWUnXSwgbmFtZSkpCi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc2NlbmRpbmcgc29ydCBhcHBsaWVkIGJ1dCByb3cgMDogXCIlc1wiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBsZXNzIHRoYW4gcm93IDE6IFwiJXNcIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgJXMgIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocm93X29uZSwgcm93X3R3bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2ZpZWxkX25hbWUnXSwgbmFtZSkpCiAKICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGluZyA9IGdldF9kYXRhKHRhYmxlX2NscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJvcmRlcmJ5IiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im9yZGVyYnkiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctJytjb2x1bW5bJ2ZpZWxkX25hbWUnXX0pCiAKLSAgICAgICAgICAgICAgICAgICAgcm93X29uZSA9IGRlc2NlbmRpbmdbJ3Jvd3MnXVswXVtjb2x1bW5bJ2ZpZWxkX25hbWUnXV0KLSAgICAgICAgICAgICAgICAgICAgcm93X3R3byA9IGRlc2NlbmRpbmdbJ3Jvd3MnXVsxXVtjb2x1bW5bJ2ZpZWxkX25hbWUnXV0KKyAgICAgICAgICAgICAgICAgICAgcm93X29uZSA9IGdldF90ZXh0X2Zyb21fdGQoCisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjZW5kaW5nWydyb3dzJ11bMF1bY29sdW1uWydmaWVsZF9uYW1lJ11dKQorICAgICAgICAgICAgICAgICAgICByb3dfdHdvID0gZ2V0X3RleHRfZnJvbV90ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRpbmdbJ3Jvd3MnXVsxXVtjb2x1bW5bJ2ZpZWxkX25hbWUnXV0pCiAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJvd19vbmUgPj0gcm93X3R3bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXNjZW5kaW5nIHNvcnQgYXBwbGllZCBidXQgcm93IDAgaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdyZWF0ZXIgdGhhbiByb3cgMSAlcyAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtblsnZmllbGRfbmFtZSddLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXNjZW5kaW5nIHNvcnQgYXBwbGllZCBidXQgcm93IDA6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIGdyZWF0ZXIgdGhhbiByb3cgMTogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgJXMgdGFibGUgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyb3dfb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd190d28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydmaWVsZF9uYW1lJ10sIG5hbWUpKQogCiAgICAgICAgICAgICAgICAgICAgICMgSWYgdGhlIHR3byBzdGFydCByb3dzIGFyZSB0aGUgc2FtZSB3ZSBoYXZlbid0IGFjdHVhbGx5CiAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlZCB0aGUgb3JkZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdHlwZWFoZWFkcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdHlwZWFoZWFkcy5weQppbmRleCBkZDRiN2Y1Li40ZGVkOWFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3R5cGVhaGVhZHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5CkBAIC01NSw2ICs1NSw3IEBACiAgICAgICAgICAgICAgICAgJ3Zjc191cmwnIDogbGF5ZXJfdmVyc2lvbi5sYXllci52Y3NfdXJsLAogICAgICAgICAgICAgICAgICd2Y3NfcmVmZXJlbmNlJyA6IHZjc19yZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgJ2RldGFpbCcgOiBkZXRhaWwsCisgICAgICAgICAgICAgICAgJ2xvY2FsX3NvdXJjZV9kaXInIDogbGF5ZXJfdmVyc2lvbi5sYXllci5sb2NhbF9zb3VyY2VfZGlyLAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChuZWVkZWRfZmllbGRzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5CmluZGV4IDI3YjBiYWEuLmVjZTlhYzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdXJscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkKQEAgLTIxLDggKzIxLDEwIEBACiAKIGZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QKIGZyb20gdG9hc3Rlcmd1aSBpbXBvcnQgdGFibGVzCitmcm9tIHRvYXN0ZXJndWkgaW1wb3J0IGJ1aWxkdGFibGVzCiBmcm9tIHRvYXN0ZXJndWkgaW1wb3J0IHR5cGVhaGVhZHMKIGZyb20gdG9hc3Rlcmd1aSBpbXBvcnQgYXBpCitmcm9tIHRvYXN0ZXJndWkgaW1wb3J0IHdpZGdldHMKIAogdXJscGF0dGVybnMgPSBwYXR0ZXJucygndG9hc3Rlcmd1aS52aWV3cycsCiAgICAgICAgICMgbGFuZGluZyBwYWdlCkBAIC0zNCwxNyArMzYsMjggQEAKIAogICAgICAgICAjIGJ1aWxkIGluZm8gbmF2aWdhdGlvbgogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykkJywgJ2J1aWxkZGFzaGJvYXJkJywgbmFtZT0iYnVpbGRkYXNoYm9hcmQiKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3Rhc2tzLyQnLAorICAgICAgICAgICAgYnVpbGR0YWJsZXMuQnVpbGRUYXNrc1RhYmxlLmFzX3ZpZXcoCisgICAgICAgICAgICAgICAgdGVtcGxhdGVfbmFtZT0iYnVpbGRpbmZvLXRvYXN0ZXJ0YWJsZS5odG1sIiksCisgICAgICAgICAgICBuYW1lPSd0YXNrcycpLAogCi0gICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXNrcy8kJywgJ3Rhc2tzJywgbmFtZT0ndGFza3MnKSwKLSAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3Rhc2tzLyg/UDx0YXNrX2lkPlxkKykvJCcsICd0YXNrc190YXNrJywgbmFtZT0ndGFza3NfdGFzaycpLAogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFzay8oP1A8dGFza19pZD5cZCspJCcsICd0YXNrJywgbmFtZT0ndGFzaycpLAogCi0gICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVzLyQnLCAncmVjaXBlcycsIG5hbWU9J3JlY2lwZXMnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3JlY2lwZXMvJCcsCisgICAgICAgICAgICBidWlsZHRhYmxlcy5CdWlsdFJlY2lwZXNUYWJsZS5hc192aWV3KAorICAgICAgICAgICAgICAgIHRlbXBsYXRlX25hbWU9ImJ1aWxkaW5mby10b2FzdGVydGFibGUuaHRtbCIpLAorICAgICAgICAgICAgbmFtZT0ncmVjaXBlcycpLAorCiAgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspL2FjdGl2ZV90YWIvKD9QPGFjdGl2ZV90YWI+XGR7MX0pJCcsICdyZWNpcGUnLCBuYW1lPSdyZWNpcGUnKSwKKwogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlLyg/UDxyZWNpcGVfaWQ+XGQrKSQnLCAncmVjaXBlJywgbmFtZT0ncmVjaXBlJyksCiAgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVfcGFja2FnZXMvKD9QPHJlY2lwZV9pZD5cZCspJCcsICdyZWNpcGVfcGFja2FnZXMnLCBuYW1lPSdyZWNpcGVfcGFja2FnZXMnKSwKIAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZXMvJCcsICdicGFja2FnZScsIG5hbWU9J3BhY2thZ2VzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlcy8kJywKKyAgICAgICAgICAgIGJ1aWxkdGFibGVzLkJ1aWx0UGFja2FnZXNUYWJsZS5hc192aWV3KAorICAgICAgICAgICAgICAgIHRlbXBsYXRlX25hbWU9ImJ1aWxkaW5mby10b2FzdGVydGFibGUuaHRtbCIpLAorICAgICAgICAgICAgbmFtZT0ncGFja2FnZXMnKSwKKwogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZS8oP1A8cGFja2FnZV9pZD5cZCspJCcsICdwYWNrYWdlX2J1aWx0X2RldGFpbCcsCiAgICAgICAgICAgICAgICAgbmFtZT0ncGFja2FnZV9idWlsdF9kZXRhaWwnKSwKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLyg/UDxwYWNrYWdlX2lkPlxkKykkJywKQEAgLTU2LDE3ICs2OSwzMSBAQAogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy8oP1A8dGFyZ2V0X2lkPlxkKykvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAogICAgICAgICAgICAgJ3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzJyksCiAKLSAgICAgICAgIyBpbWFnZXMgYXJlIGtub3duIGFzIHRhcmdldHMgaW4gdGhlIGludGVybmFsIG1vZGVsCi0gICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspJCcsICd0YXJnZXQnLCBuYW1lPSd0YXJnZXQnKSwKLSAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvdGFyZ2V0cGtnJCcsICd0YXJnZXRwa2cnLCBuYW1lPSd0YXJnZXRwa2cnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykkJywKKyAgICAgICAgICAgIGJ1aWxkdGFibGVzLkluc3RhbGxlZFBhY2thZ2VzVGFibGUuYXNfdmlldygKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZV9uYW1lPSJ0YXJnZXQuaHRtbCIpLAorICAgICAgICAgICAgbmFtZT0ndGFyZ2V0JyksCisKKwogICAgICAgICB1cmwocideZGVudHJpZXMvYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKSQnLCAneGhyX2RpcmluZm8nLCBuYW1lPSdkaXJpbmZvX2FqYXgnKSwKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvZGlyaW5mbyQnLCAnZGlyaW5mbycsIG5hbWU9J2RpcmluZm8nKSwKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvZGlyaW5mb19maWxlcGF0aC9fKD9QPGZpbGVfcGF0aD4oPzovW14vXG5dKykqKSQnLCAnZGlyaW5mbycsIG5hbWU9J2RpcmluZm9fZmlsZXBhdGgnKSwKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NvbmZpZ3VyYXRpb24kJywgJ2NvbmZpZ3VyYXRpb24nLCBuYW1lPSdjb25maWd1cmF0aW9uJyksCiAgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jb25maWd2YXJzJCcsICdjb25maWd2YXJzJywgbmFtZT0nY29uZmlndmFycycpLAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvYnVpbGR0aW1lJCcsICdidWlsZHRpbWUnLCBuYW1lPSdidWlsZHRpbWUnKSwKLSAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NwdXRpbWUkJywgJ2NwdXRpbWUnLCBuYW1lPSdjcHV0aW1lJyksCi0gICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9kaXNraW8kJywgJ2Rpc2tpbycsIG5hbWU9J2Rpc2tpbycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvYnVpbGR0aW1lJCcsCisgICAgICAgICAgICBidWlsZHRhYmxlcy5CdWlsZFRpbWVUYWJsZS5hc192aWV3KAorICAgICAgICAgICAgICAgIHRlbXBsYXRlX25hbWU9ImJ1aWxkaW5mby10b2FzdGVydGFibGUuaHRtbCIpLAorICAgICAgICAgICAgbmFtZT0nYnVpbGR0aW1lJyksCisKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NwdXRpbWUkJywKKyAgICAgICAgICAgIGJ1aWxkdGFibGVzLkJ1aWxkQ1BVVGltZVRhYmxlLmFzX3ZpZXcoCisgICAgICAgICAgICAgICAgdGVtcGxhdGVfbmFtZT0iYnVpbGRpbmZvLXRvYXN0ZXJ0YWJsZS5odG1sIiksCisgICAgICAgICAgICBuYW1lPSdjcHV0aW1lJyksCisKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2Rpc2tpbyQnLAorICAgICAgICAgICAgYnVpbGR0YWJsZXMuQnVpbGRJT1RhYmxlLmFzX3ZpZXcoCisgICAgICAgICAgICAgICAgdGVtcGxhdGVfbmFtZT0iYnVpbGRpbmZvLXRvYXN0ZXJ0YWJsZS5odG1sIiksCisgICAgICAgICAgICBuYW1lPSdkaXNraW8nKSwKIAogICAgICAgICAjIGltYWdlIGluZm9ybWF0aW9uIGRpcgogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKS9wYWNrYWdlZmlsZS8oP1A8cGFja2FnZWZpbGVfaWQ+XGQrKSQnLApAQCAtMTY0LDI3ICsxOTEsNDcgQEAKICAgICAgICAgICAgIG5hbWU9J3hocl9jb25maWd2YXJlZGl0JyksCiAKICAgICAgICAgdXJsKHInXnhocl9pbXBvcnRsYXllci8kJywgJ3hocl9pbXBvcnRsYXllcicsIG5hbWU9J3hocl9pbXBvcnRsYXllcicpLAotICAgICAgICB1cmwocideeGhyX3VwZGF0ZWxheWVyLyQnLCAneGhyX3VwZGF0ZWxheWVyJywgbmFtZT0neGhyX3VwZGF0ZWxheWVyJyksCisKKyAgICAgICAgdXJsKHInXnhocl9sYXllci8oP1A8cGlkPlxkKykvKD9QPGxheWVydmVyc2lvbl9pZD5cZCspJCcsCisgICAgICAgICAgICBhcGkuWGhyTGF5ZXIuYXNfdmlldygpLAorICAgICAgICAgICAgbmFtZT0neGhyX2xheWVyJyksCiAKICAgICAgICAgIyBKUyBVbml0IHRlc3RzCiAgICAgICAgIHVybChyJ15qcy11bml0LXRlc3RzLyQnLCAnanN1bml0dGVzdHMnLCBuYW1lPSdqcy11bml0LXRlc3RzJyksCiAKICAgICAgICAgIyBpbWFnZSBjdXN0b21pc2F0aW9uIGZ1bmN0aW9uYWxpdHkKLSAgICAgICAgdXJsKHInXnhocl9jdXN0b21yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspL3BhY2thZ2VzLyg/UDxwYWNrYWdlX2lkPlxkK3wpJCcsCi0gICAgICAgICAgICAneGhyX2N1c3RvbXJlY2lwZV9wYWNrYWdlcycsIG5hbWU9J3hocl9jdXN0b21yZWNpcGVfcGFja2FnZXMnKSwKKyAgICAgICAgdXJsKHInXnhocl9jdXN0b21yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspJworICAgICAgICAgICAgJy9wYWNrYWdlcy8oP1A8cGFja2FnZV9pZD5cZCt8KSQnLAorICAgICAgICAgICAgYXBpLlhockN1c3RvbVJlY2lwZVBhY2thZ2VzLmFzX3ZpZXcoKSwKKyAgICAgICAgICAgIG5hbWU9J3hocl9jdXN0b21yZWNpcGVfcGFja2FnZXMnKSwKIAogICAgICAgICB1cmwocideeGhyX2N1c3RvbXJlY2lwZS8oP1A8cmVjaXBlX2lkPlxkKykvcGFja2FnZXMvJCcsCi0gICAgICAgICAgICAneGhyX2N1c3RvbXJlY2lwZV9wYWNrYWdlcycsIG5hbWU9J3hocl9jdXN0b21yZWNpcGVfcGFja2FnZXMnKSwKKyAgICAgICAgICAgIGFwaS5YaHJDdXN0b21SZWNpcGVQYWNrYWdlcy5hc192aWV3KCksCisgICAgICAgICAgICBuYW1lPSd4aHJfY3VzdG9tcmVjaXBlX3BhY2thZ2VzJyksCiAKLSAgICAgICAgdXJsKHInXnhocl9jdXN0b21yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspJCcsICd4aHJfY3VzdG9tcmVjaXBlX2lkJywKKyAgICAgICAgdXJsKHInXnhocl9jdXN0b21yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspJCcsCisgICAgICAgICAgICBhcGkuWGhyQ3VzdG9tUmVjaXBlSWQuYXNfdmlldygpLAogICAgICAgICAgICAgbmFtZT0neGhyX2N1c3RvbXJlY2lwZV9pZCcpLAotICAgICAgICB1cmwocideeGhyX2N1c3RvbXJlY2lwZS8nLCAneGhyX2N1c3RvbXJlY2lwZScsCisKKyAgICAgICAgdXJsKHInXnhocl9jdXN0b21yZWNpcGUvJywKKyAgICAgICAgICAgIGFwaS5YaHJDdXN0b21SZWNpcGUuYXNfdmlldygpLAogICAgICAgICAgICAgbmFtZT0neGhyX2N1c3RvbXJlY2lwZScpLAogCiAgICAgICAgIHVybChyJ154aHJfYnVpbGRyZXF1ZXN0L3Byb2plY3QvKD9QPHBpZD5cZCspJCcsCi0gICAgICAgICAgIGFwaS5YaHJCdWlsZFJlcXVlc3QuYXNfdmlldygpLAorICAgICAgICAgICAgYXBpLlhockJ1aWxkUmVxdWVzdC5hc192aWV3KCksCiAgICAgICAgICAgICBuYW1lPSd4aHJfYnVpbGRyZXF1ZXN0JyksCiAKKyAgICAgICAgdXJsKHIneGhyX3Byb2plY3QvKD9QPHByb2plY3RfaWQ+XGQrKSQnLAorICAgICAgICAgICAgYXBpLlhoclByb2plY3QuYXNfdmlldygpLAorICAgICAgICAgICAgbmFtZT0neGhyX3Byb2plY3QnKSwKKworICAgICAgICB1cmwocid4aHJfYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykkJywKKyAgICAgICAgICAgIGFwaS5YaHJCdWlsZC5hc192aWV3KCksCisgICAgICAgICAgICBuYW1lPSd4aHJfYnVpbGQnKSwKKworICAgICAgICB1cmwocidebW9zdHJlY2VudGJ1aWxkcyQnLCB3aWRnZXRzLk1vc3RSZWNlbnRCdWlsZHNWaWV3LmFzX3ZpZXcoKSwKKyAgICAgICAgICAgIG5hbWU9J21vc3RfcmVjZW50X2J1aWxkcycpLAorCiAgICAgICAgICAgIyBkZWZhdWx0IHJlZGlyZWN0aW9uCiAgICAgICAgIHVybChyJ14kJywgUmVkaXJlY3RWaWV3LmFzX3ZpZXcodXJsPSdsYW5kaW5nJywgcGVybWFuZW50PVRydWUpKSwKICkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3ZpZXdzLnB5CmluZGV4IGJkNWJmNjMuLjJlZmIwZmQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS92aWV3cy5weQpAQCAtMTksNDIgKzE5LDM3IEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKLSMgcHlsaW50OiBkaXNhYmxlPW1ldGhvZC1oaWRkZW4KLSMgR2l2ZXMgRTo4NDgsIDQ6IEFuIGF0dHJpYnV0ZSBkZWZpbmVkIGluIGpzb24uZW5jb2RlciBsaW5lIDE2MiBoaWRlcyB0aGlzIG1ldGhvZCAobWV0aG9kLWhpZGRlbikKLSMgd2hpY2ggaXMgYW4gaW52YWxpZCB3YXJuaW5nCiAKLWltcG9ydCBvcGVyYXRvcixyZQoraW1wb3J0IHJlCiAKLWZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgRiwgUSwgU3VtLCBDb3VudCwgTWF4Ci1mcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IsIEVycm9yCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IEYsIFEsIFN1bQorZnJvbSBkamFuZ28uZGIgaW1wb3J0IEludGVncml0eUVycm9yCiBmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlciwgcmVkaXJlY3QsIGdldF9vYmplY3Rfb3JfNDA0Ci1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkLCBUYXJnZXQsIFRhc2ssIExheWVyLCBMYXllcl9WZXJzaW9uLCBSZWNpcGUsIExvZ01lc3NhZ2UsIFZhcmlhYmxlCi1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhc2tfRGVwZW5kZW5jeSwgUmVjaXBlX0RlcGVuZGVuY3ksIFBhY2thZ2UsIFBhY2thZ2VfRmlsZSwgUGFja2FnZV9EZXBlbmRlbmN5Ci1mcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZSwgVGFyZ2V0X0ZpbGUsIFRhcmdldF9JbWFnZV9GaWxlLCBCdWlsZEFydGlmYWN0LCBDdXN0b21JbWFnZVBhY2thZ2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRhcmdldCwgVGFzaywgTGF5ZXIsIExheWVyX1ZlcnNpb24sIFJlY2lwZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMb2dNZXNzYWdlLCBWYXJpYWJsZSwgUGFja2FnZV9EZXBlbmRlbmN5LCBQYWNrYWdlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhc2tfRGVwZW5kZW5jeSwgUGFja2FnZV9GaWxlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZSwgVGFyZ2V0X0ZpbGUKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFyZ2V0S2VybmVsRmlsZSwgVGFyZ2V0U0RLRmlsZSwgVGFyZ2V0X0ltYWdlX0ZpbGUKIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24sIEN1c3RvbUltYWdlUmVjaXBlCi1mcm9tIGJsZGNvbnRyb2wgaW1wb3J0IGJiY29udHJvbGxlcgotZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jYWNoZSBpbXBvcnQgY2FjaGVfY29udHJvbAorCiBmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZSwgcmVzb2x2ZQogZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBNdWx0aXBsZU9iamVjdHNSZXR1cm5lZCwgT2JqZWN0RG9lc05vdEV4aXN0CiBmcm9tIGRqYW5nby5jb3JlLnBhZ2luYXRvciBpbXBvcnQgUGFnaW5hdG9yLCBFbXB0eVBhZ2UsIFBhZ2VOb3RBbkludGVnZXIKLWZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QsIEh0dHBSZXNwb25zZU5vdEZvdW5kCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VOb3RGb3VuZAogZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCi1mcm9tIGRqYW5nby51dGlscy5odG1sIGltcG9ydCBlc2NhcGUKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YSwgZGF0ZXRpbWUKLWZyb20gZGphbmdvLnV0aWxzIGltcG9ydCBmb3JtYXRzCiBmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBqc29uIGFzIGpzb25maWx0ZXIKIGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAogaW1wb3J0IGpzb24KIGltcG9ydCBvcwogZnJvbSBvcy5wYXRoIGltcG9ydCBkaXJuYW1lCi1mcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKLWltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBtaW1ldHlwZXMKIAogaW1wb3J0IGxvZ2dpbmcKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQogCisKIGNsYXNzIE1pbWVUeXBlRmluZGVyKG9iamVjdCk6CiAgICAgIyBzZXR0aW5nIHRoaXMgdG8gRmFsc2UgZW5hYmxlcyBhZGRpdGlvbmFsIG5vbi1zdGFuZGFyZCBtaW1ldHlwZXMKICAgICAjIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBndWVzcwpAQCAtMTYwLDcgKzE1NSw3IEBACiAgICAgcmV0dXJuIHsiaWQiOiB4LnBrLAogICAgICAgICAgICAgIm5hbWUiOiB4LmxheWVyLm5hbWUsCiAgICAgICAgICAgICAidG9vbHRpcCI6ICIlcyB8ICVzIiAlICh4LmxheWVyLnZjc191cmwseC5nZXRfdmNzX3JlZmVyZW5jZSgpKSwKLSAgICAgICAgICAgICJkZXRhaWwiOiAiKCVzIiAlIHgubGF5ZXIudmNzX3VybCArICgiKSIgaWYgeC51cF9icmFuY2ggPT0gTm9uZSBlbHNlICIgfCAiK3guZ2V0X3Zjc19yZWZlcmVuY2UoKSsiKSIpLAorICAgICAgICAgICAgImRldGFpbCI6ICIoJXMiICUgeC5sYXllci52Y3NfdXJsICsgKCIpIiBpZiB4LnJlbGVhc2UgPT0gTm9uZSBlbHNlICIgfCAiK3guZ2V0X3Zjc19yZWZlcmVuY2UoKSsiKSIpLAogICAgICAgICAgICAgImdpdHVybCI6IHgubGF5ZXIudmNzX3VybCwKICAgICAgICAgICAgICJsYXllcmRldGFpbHVybCIgOiByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcmouaWQseC5waykpLAogICAgICAgICAgICAgInJldmlzaW9uIiA6IHguZ2V0X3Zjc19yZWZlcmVuY2UoKSwKQEAgLTIwMCwxNiArMTk1LDE5IEBACiAgICAgcmV0dXJuIE5vbmUKIAogZGVmIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKHZpZXcsIGcsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCAqYXJncywgKiprd2FyZ3MpOgotICAgIGltcG9ydCB1cmxsaWIKKyAgICB0cnk6CisgICAgICAgIGZyb20gdXJsbGliIGltcG9ydCB1bnF1b3RlLCB1cmxlbmNvZGUKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1bnF1b3RlLCB1cmxlbmNvZGUKICAgICB1cmwgPSByZXZlcnNlKHZpZXcsIGt3YXJncz1rd2FyZ3MpCiAgICAgcGFyYW1zID0ge30KICAgICBmb3IgaSBpbiBnOgogICAgICAgICBwYXJhbXNbaV0gPSBnW2ldCiAgICAgZm9yIGkgaW4gbWFuZGF0b3J5X3BhcmFtZXRlcnM6CiAgICAgICAgIGlmIG5vdCBpIGluIHBhcmFtczoKLSAgICAgICAgICAgIHBhcmFtc1tpXSA9IHVybGxpYi51bnF1b3RlKHN0cihtYW5kYXRvcnlfcGFyYW1ldGVyc1tpXSkpCisgICAgICAgICAgICBwYXJhbXNbaV0gPSB1bnF1b3RlKHN0cihtYW5kYXRvcnlfcGFyYW1ldGVyc1tpXSkpCiAKLSAgICByZXR1cm4gcmVkaXJlY3QodXJsICsgIj8lcyIgJSB1cmxsaWIudXJsZW5jb2RlKHBhcmFtcyksIHBlcm1hbmVudCA9IEZhbHNlLCAqKmt3YXJncykKKyAgICByZXR1cm4gcmVkaXJlY3QodXJsICsgIj8lcyIgJSB1cmxlbmNvZGUocGFyYW1zKSwgcGVybWFuZW50ID0gRmFsc2UsICoqa3dhcmdzKQogCiBjbGFzcyBSZWRpcmVjdEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2aWV3LCBnLCBtYW5kYXRvcnlfcGFyYW1ldGVycywgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTIyOSwxMCArMjI3LDE4IEBACiBERVNDRU5ESU5HID0gIi0iCiAKIGRlZiBfX2dldF9xX2Zvcl92YWwobmFtZSwgdmFsdWUpOgotICAgIGlmICJPUiIgaW4gdmFsdWU6Ci0gICAgICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3Iub3JfLCBtYXAobGFtYmRhIHg6IF9fZ2V0X3FfZm9yX3ZhbChuYW1lLCB4KSwgWyB4IGZvciB4IGluIHZhbHVlLnNwbGl0KCJPUiIpIF0pKQorICAgIGlmICJPUiIgaW4gdmFsdWUgb3IgIkFORCIgaW4gdmFsdWU6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgZm9yIHggaW4gdmFsdWUuc3BsaXQoIk9SIik6CisgICAgICAgICAgICAgeCA9IF9fZ2V0X3FfZm9yX3ZhbChuYW1lLCB4KQorICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8IHggaWYgcmVzdWx0IGVsc2UgeAorICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgaWYgIkFORCIgaW4gdmFsdWU6Ci0gICAgICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3IuYW5kXywgbWFwKGxhbWJkYSB4OiBfX2dldF9xX2Zvcl92YWwobmFtZSwgeCksIFsgeCBmb3IgeCBpbiB2YWx1ZS5zcGxpdCgiQU5EIikgXSkpCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgZm9yIHggaW4gdmFsdWUuc3BsaXQoIkFORCIpOgorICAgICAgICAgICAgeCA9IF9fZ2V0X3FfZm9yX3ZhbChuYW1lLCB4KQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYgeCBpZiByZXN1bHQgZWxzZSB4CisgICAgICAgIHJldHVybiByZXN1bHQKICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCJOT1QiKToKICAgICAgICAgdmFsdWUgPSB2YWx1ZVszOl0KICAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOgpAQCAtMjUxLDE0ICsyNTcsMTggQEAKICAgICBhbmRfa2V5cyA9IHNlYXJjaF90ZXJtc1swXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKQogICAgIGFuZF92YWx1ZXMgPSBzZWFyY2hfdGVybXNbMV0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUikKIAotICAgIGFuZF9xdWVyeSA9IFtdCisgICAgYW5kX3F1ZXJ5ID0gTm9uZQogICAgIGZvciBrdiBpbiB6aXAoYW5kX2tleXMsIGFuZF92YWx1ZXMpOgogICAgICAgICBvcl9rZXlzID0ga3ZbMF0uc3BsaXQoT1JfVkFMVUVfU0VQQVJBVE9SKQogICAgICAgICBvcl92YWx1ZXMgPSBrdlsxXS5zcGxpdChPUl9WQUxVRV9TRVBBUkFUT1IpCi0gICAgICAgIHF1ZXJ5ZGljdCA9IGRpY3QoemlwKG9yX2tleXMsIG9yX3ZhbHVlcykpCi0gICAgICAgIGFuZF9xdWVyeS5hcHBlbmQocmVkdWNlKG9wZXJhdG9yLm9yXywgbWFwKGxhbWJkYSB4OiBfX2dldF9xX2Zvcl92YWwoeCwgcXVlcnlkaWN0W3hdKSwgW2sgZm9yIGsgaW4gcXVlcnlkaWN0XSkpKQorICAgICAgICBxdWVyeSA9IE5vbmUKKyAgICAgICAgZm9yIGtleSwgdmFsIGluIHppcChvcl9rZXlzLCBvcl92YWx1ZXMpOgorICAgICAgICAgICAgeCA9IF9fZ2V0X3FfZm9yX3ZhbChrZXksIHZhbCkKKyAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkgfCB4IGlmIHF1ZXJ5IGVsc2UgeAogCi0gICAgcmV0dXJuIHJlZHVjZShvcGVyYXRvci5hbmRfLCBbayBmb3IgayBpbiBhbmRfcXVlcnldKQorICAgICAgICBhbmRfcXVlcnkgPSBhbmRfcXVlcnkgJiBxdWVyeSBpZiBhbmRfcXVlcnkgZWxzZSBxdWVyeQorCisgICAgcmV0dXJuIGFuZF9xdWVyeQogCiBkZWYgX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgb3JkZXJrZXksIHRvZ2dsZV9yZXZlcnNlID0gRmFsc2UpOgogICAgIGlmIHRvZ2dsZV9yZXZlcnNlOgpAQCAtMjk1LDIxICszMDUsMjQgQEAKICAgICAgICAgIyBDaGVjayB3ZSBhcmUgbG9va2luZyBmb3IgYSB2YWxpZCBmaWVsZAogICAgICAgICB2YWxpZF9maWVsZHMgPSBtb2RlbC5fbWV0YS5nZXRfYWxsX2ZpZWxkX25hbWVzKCkKICAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkX2lucHV0X2xpc3RbMF0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUik6Ci0gICAgICAgICAgICBpZiBub3QgcmVkdWNlKGxhbWJkYSB4LCB5OiB4IG9yIHksIFsgZmllbGQuc3RhcnRzd2l0aCh4KSBmb3IgeCBpbiB2YWxpZF9maWVsZHMgXSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIChmaWVsZCwgWyB4IGZvciB4IGluIHZhbGlkX2ZpZWxkcyBdKQorICAgICAgICAgICAgaWYgVHJ1ZSBpbiBbZmllbGQuc3RhcnRzd2l0aCh4KSBmb3IgeCBpbiB2YWxpZF9maWVsZHNdOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIHJldHVybiBOb25lLCAoZmllbGQsIHZhbGlkX2ZpZWxkcykKIAogICAgIHJldHVybiBmaWVsZF9pbnB1dCwgaW52YWxpZAogCiAjIHVzZXMgc2VhcmNoX2FsbG93ZWRfZmllbGRzIGluIG9ybS9tb2RlbHMucHkgdG8gY3JlYXRlIGEgc2VhcmNoIHF1ZXJ5CiAjIGZvciB0aGVzZSBmaWVsZHMgd2l0aCB0aGUgc3VwcGxpZWQgaW5wdXQgdGV4dAogZGVmIF9nZXRfc2VhcmNoX3Jlc3VsdHMoc2VhcmNoX3Rlcm0sIHF1ZXJ5c2V0LCBtb2RlbCk6Ci0gICAgc2VhcmNoX29iamVjdHMgPSBbXQorICAgIHNlYXJjaF9vYmplY3QgPSBOb25lCiAgICAgZm9yIHN0IGluIHNlYXJjaF90ZXJtLnNwbGl0KCIgIik6Ci0gICAgICAgIHFfbWFwID0gbWFwKGxhbWJkYSB4OiBRKCoqe3grJ19faWNvbnRhaW5zJzogc3R9KSwKLSAgICAgICAgICAgICAgICBtb2RlbC5zZWFyY2hfYWxsb3dlZF9maWVsZHMpCisgICAgICAgIHF1ZXJpZXMgPSBOb25lCisgICAgICAgIGZvciBmaWVsZCBpbiBtb2RlbC5zZWFyY2hfYWxsb3dlZF9maWVsZHM6CisgICAgICAgICAgICBxdWVyeSA9IFEoKip7ZmllbGQgKyAnX19pY29udGFpbnMnOiBzdH0pCisgICAgICAgICAgICBxdWVyaWVzID0gcXVlcmllcyB8IHF1ZXJ5IGlmIHF1ZXJpZXMgZWxzZSBxdWVyeQogCi0gICAgICAgIHNlYXJjaF9vYmplY3RzLmFwcGVuZChyZWR1Y2Uob3BlcmF0b3Iub3JfLCBxX21hcCkpCi0gICAgc2VhcmNoX29iamVjdCA9IHJlZHVjZShvcGVyYXRvci5hbmRfLCBzZWFyY2hfb2JqZWN0cykKKyAgICAgICAgc2VhcmNoX29iamVjdCA9IHNlYXJjaF9vYmplY3QgJiBxdWVyaWVzIGlmIHNlYXJjaF9vYmplY3QgZWxzZSBxdWVyaWVzCiAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoc2VhcmNoX29iamVjdCkKIAogICAgIHJldHVybiBxdWVyeXNldApAQCAtNDUyLDQ2ICs0NjUsNTggQEAKICAgICByZWNpcGVDb3VudCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlciggbGF5ZXJfdmVyc2lvbl9faWRfX2luID0gbGF5ZXJWZXJzaW9uSWQgKS5jb3VudCggKTsKICAgICB0Z3RzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBidWlsZF9pZCA9IGJ1aWxkX2lkICkub3JkZXJfYnkoICd0YXJnZXQnICk7CiAKLSAgICAjIwogICAgICMgc2V0IHVwIGN1c3RvbSB0YXJnZXQgbGlzdCB3aXRoIGNvbXB1dGVkIHBhY2thZ2UgYW5kIGltYWdlIGRhdGEKLSAgICAjCi0KLSAgICB0YXJnZXRzID0gWyBdCisgICAgdGFyZ2V0cyA9IFtdCiAgICAgbnRhcmdldHMgPSAwCi0gICAgaGFzSW1hZ2VzID0gRmFsc2UKLSAgICB0YXJnZXRIYXNOb0ltYWdlcyA9IEZhbHNlCisKKyAgICAjIFRydWUgaWYgYXQgbGVhc3Qgb25lIHRhcmdldCBmb3IgdGhpcyBidWlsZCBoYXMgYW4gU0RLIGFydGlmYWN0CisgICAgIyBvciBpbWFnZSBmaWxlCisgICAgaGFzX2FydGlmYWN0cyA9IEZhbHNlCisKICAgICBmb3IgdCBpbiB0Z3RzOgotICAgICAgICBlbGVtID0geyB9Ci0gICAgICAgIGVsZW1bICd0YXJnZXQnIF0gPSB0Ci0gICAgICAgIGlmIHQuaXNfaW1hZ2U6Ci0gICAgICAgICAgICBoYXNJbWFnZXMgPSBUcnVlCisgICAgICAgIGVsZW0gPSB7fQorICAgICAgICBlbGVtWyd0YXJnZXQnXSA9IHQKKworICAgICAgICB0YXJnZXRfaGFzX2ltYWdlcyA9IEZhbHNlCisgICAgICAgIGltYWdlX2ZpbGVzID0gW10KKwogICAgICAgICBucGtnID0gMAogICAgICAgICBwa2dzeiA9IDAKICAgICAgICAgcGFja2FnZSA9IE5vbmUKICAgICAgICAgZm9yIHBhY2thZ2UgaW4gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpZF9faW4gPSBbeC5wYWNrYWdlX2lkIGZvciB4IGluIHQudGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlX3NldC5hbGwoKV0pOgogICAgICAgICAgICAgcGtnc3ogPSBwa2dzeiArIHBhY2thZ2Uuc2l6ZQotICAgICAgICAgICAgaWYgKCBwYWNrYWdlLmluc3RhbGxlZF9uYW1lICk6CisgICAgICAgICAgICBpZiBwYWNrYWdlLmluc3RhbGxlZF9uYW1lOgogICAgICAgICAgICAgICAgIG5wa2cgPSBucGtnICsgMQotICAgICAgICBlbGVtWyAnbnBrZycgXSA9IG5wa2cKLSAgICAgICAgZWxlbVsgJ3BrZ3N6JyBdID0gcGtnc3oKLSAgICAgICAgdGkgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlciggdGFyZ2V0X2lkID0gdC5pZCApCi0gICAgICAgIGltYWdlRmlsZXMgPSBbIF0KKyAgICAgICAgZWxlbVsnbnBrZyddID0gbnBrZworICAgICAgICBlbGVtWydwa2dzeiddID0gcGtnc3oKKyAgICAgICAgdGkgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWQgPSB0LmlkKQogICAgICAgICBmb3IgaSBpbiB0aToKLSAgICAgICAgICAgIG5keCA9IGkuZmlsZV9uYW1lLnJmaW5kKCAnLycgKQotICAgICAgICAgICAgaWYgKCBuZHggPCAwICk6CisgICAgICAgICAgICBuZHggPSBpLmZpbGVfbmFtZS5yZmluZCgnLycpCisgICAgICAgICAgICBpZiBuZHggPCAwOgogICAgICAgICAgICAgICAgIG5keCA9IDA7Ci0gICAgICAgICAgICBmID0gaS5maWxlX25hbWVbIG5keCArIDE6IF0KLSAgICAgICAgICAgIGltYWdlRmlsZXMuYXBwZW5kKHsKKyAgICAgICAgICAgIGYgPSBpLmZpbGVfbmFtZVtuZHggKyAxOl0KKyAgICAgICAgICAgIGltYWdlX2ZpbGVzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgJ2lkJzogaS5pZCwKICAgICAgICAgICAgICAgICAncGF0aCc6IGYsCiAgICAgICAgICAgICAgICAgJ3NpemUnOiBpLmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAnc3VmZml4JzogaS5zdWZmaXgKICAgICAgICAgICAgIH0pCi0gICAgICAgIGlmIHQuaXNfaW1hZ2UgYW5kIChsZW4oaW1hZ2VGaWxlcykgPD0gMCBvciBsZW4odC5saWNlbnNlX21hbmlmZXN0X3BhdGgpIDw9IDApOgotICAgICAgICAgICAgdGFyZ2V0SGFzTm9JbWFnZXMgPSBUcnVlCi0gICAgICAgIGVsZW1bICdpbWFnZUZpbGVzJyBdID0gaW1hZ2VGaWxlcwotICAgICAgICBlbGVtWyAndGFyZ2V0SGFzTm9JbWFnZXMnIF0gPSB0YXJnZXRIYXNOb0ltYWdlcwotICAgICAgICB0YXJnZXRzLmFwcGVuZCggZWxlbSApCisgICAgICAgIGlmIGxlbihpbWFnZV9maWxlcykgPiAwOgorICAgICAgICAgICAgdGFyZ2V0X2hhc19pbWFnZXMgPSBUcnVlCisgICAgICAgIGVsZW1bJ3RhcmdldEhhc0ltYWdlcyddID0gdGFyZ2V0X2hhc19pbWFnZXMKKworICAgICAgICBlbGVtWydpbWFnZUZpbGVzJ10gPSBpbWFnZV9maWxlcworICAgICAgICBlbGVtWyd0YXJnZXRfa2VybmVsX2FydGlmYWN0cyddID0gdC50YXJnZXRrZXJuZWxmaWxlX3NldC5hbGwoKQorCisgICAgICAgIHRhcmdldF9zZGtfZmlsZXMgPSB0LnRhcmdldHNka2ZpbGVfc2V0LmFsbCgpCisgICAgICAgIHRhcmdldF9zZGtfYXJ0aWZhY3RzX2NvdW50ID0gdGFyZ2V0X3Nka19maWxlcy5jb3VudCgpCisgICAgICAgIGVsZW1bJ3RhcmdldF9zZGtfYXJ0aWZhY3RzX2NvdW50J10gPSB0YXJnZXRfc2RrX2FydGlmYWN0c19jb3VudAorICAgICAgICBlbGVtWyd0YXJnZXRfc2RrX2FydGlmYWN0cyddID0gdGFyZ2V0X3Nka19maWxlcworCisgICAgICAgIGlmIHRhcmdldF9oYXNfaW1hZ2VzIG9yIHRhcmdldF9zZGtfYXJ0aWZhY3RzX2NvdW50ID4gMDoKKyAgICAgICAgICAgIGhhc19hcnRpZmFjdHMgPSBUcnVlCisKKyAgICAgICAgdGFyZ2V0cy5hcHBlbmQoZWxlbSkKIAogICAgICMjCiAgICAgIyBob3cgbWFueSBwYWNrYWdlcyBpbiB0aGlzIGJ1aWxkIC0gaWdub3JlIGFub255bW91cyBvbmVzCkBAIC01MDgsNyArNTMzLDcgQEAKICAgICBjb250ZXh0ID0gewogICAgICAgICAgICAgJ2J1aWxkJyAgICAgICAgICAgOiBidWlsZCwKICAgICAgICAgICAgICdwcm9qZWN0JyAgICAgICAgIDogYnVpbGQucHJvamVjdCwKLSAgICAgICAgICAgICdoYXNJbWFnZXMnICAgICAgIDogaGFzSW1hZ2VzLAorICAgICAgICAgICAgJ2hhc0FydGlmYWN0cycgICAgOiBoYXNfYXJ0aWZhY3RzLAogICAgICAgICAgICAgJ250YXJnZXRzJyAgICAgICAgOiBudGFyZ2V0cywKICAgICAgICAgICAgICd0YXJnZXRzJyAgICAgICAgIDogdGFyZ2V0cywKICAgICAgICAgICAgICdyZWNpcGVjb3VudCcgICAgIDogcmVjaXBlQ291bnQsCkBAIC01NzgsNiArNjAzLDcgQEAKICAgICAgICAgICAgICdsb2dfYm9keScgICAgICAgIDogbG9nX2JvZHksCiAgICAgICAgICAgICAnc2hvd2luZ19tYXRjaGVzJyA6IEZhbHNlLAogICAgICAgICAgICAgJ3VyaV9saXN0JyAgICAgICAgOiB1cmlfbGlzdCwKKyAgICAgICAgICAgICd0YXNrX2luX3Rhc2tzX3RhYmxlX3BnJzogIGludCh0YXNrX29iamVjdC5vcmRlciAvIDI1KSArIDEKICAgICB9CiAgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCAnc2hvd19tYXRjaGVzJywgIiIgKToKICAgICAgICAgY29udGV4dFsgJ3Nob3dpbmdfbWF0Y2hlcycgXSA9IFRydWUKQEAgLTY2MiwxNzUgKzY4OCw2IEBACiAgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKICAgICByZXR1cm4gcmVzcG9uc2UKIAotZGVmIHRhcmdldF9jb21tb24oIHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHZhcmlhbnQgKToKLSAgICB0ZW1wbGF0ZSA9ICJ0YXJnZXQuaHRtbCIKLSAgICBkZWZhdWx0X29yZGVyYnkgPSAnbmFtZTorJwotCi0gICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsIGRlZmF1bHRfb3JkZXJieSkKLSAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieSc6IG9yZGVyYnkgfQotICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKLSAgICBpZiByZXR2YWw6Ci0gICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycygKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudCwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICBidWlsZF9pZCA9IGJ1aWxkX2lkLCB0YXJnZXRfaWQgPSB0YXJnZXRfaWQgKQotICAgICggZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZyApID0gX3NlYXJjaF90dXBsZSggcmVxdWVzdCwgUGFja2FnZSApCi0KLSAgICAjIEZVVFVSRTogIGdldCByaWQgb2YgbmVzdGVkIHN1Yi1xdWVyaWVzIHJlcGxhY2luZyB3aXRoIE1hbnlUb01hbnkgZmllbGQKLSAgICBxdWVyeXNldCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoCi0gICAgICAgICAgICAgICAgICAgIHNpemVfX2d0ZSA9IDAsCi0gICAgICAgICAgICAgICAgICAgIGlkX19pbiA9IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9pZD10YXJnZXRfaWQgKS52YWx1ZXMoICdwYWNrYWdlX2lkJyApKQotICAgIHBhY2thZ2VzX3N1bSA9ICBxdWVyeXNldC5hZ2dyZWdhdGUoIFN1bSggJ2luc3RhbGxlZF9zaXplJyApKQotICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldCgKLSAgICAgICAgICAgIFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScgKQotICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuc2VsZWN0X3JlbGF0ZWQoInJlY2lwZSIsICJyZWNpcGVfX2xheWVyX3ZlcnNpb24iLCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllciIpCi0gICAgcGFja2FnZXMgPSBfYnVpbGRfcGFnZV9yYW5nZSggUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSksIHJlcXVlc3QuR0VULmdldCggJ3BhZ2UnLCAxICkpCi0KLSAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KCBwayA9IGJ1aWxkX2lkICkKLQotICAgICMgYnJpbmcgaW4gcGFja2FnZSBkZXBlbmRlbmNpZXMKLSAgICBmb3IgcCBpbiBwYWNrYWdlcy5vYmplY3RfbGlzdDoKLSAgICAgICAgcC5ydW50aW1lX2RlcGVuZGVuY2llcyA9IHAucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmZpbHRlcigKLSAgICAgICAgICAgIHRhcmdldF9pZCA9IHRhcmdldF9pZCwgZGVwX3R5cGU9UGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTICkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iKQotICAgICAgICBwLnJldmVyc2VfcnVudGltZV9kZXBlbmRlbmNpZXMgPSBwLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldC5maWx0ZXIoCi0gICAgICAgICAgICB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUyApLnNlbGVjdF9yZWxhdGVkKCJwYWNrYWdlIikKLSAgICB0Y19wYWNrYWdlID0gewotICAgICAgICAnbmFtZScgICAgICAgOiAnUGFja2FnZScsCi0gICAgICAgICdxaGVscCcgICAgICA6ICdQYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgYSByZWNpcGUgaW5jbHVkZWQgaW4gdGhpcyBpbWFnZScsCi0gICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAibmFtZSIgKSwKLSAgICAgICAgJ29yZGVyaWNvbicgIDogX2dldF90b2dnbGVfb3JkZXJfaWNvbiggcmVxdWVzdCwgIm5hbWUiICksCi0gICAgICAgIH0KLSAgICB0Y19wYWNrYWdlVmVyc2lvbiA9IHsKLSAgICAgICAgJ25hbWUnICAgICAgIDogJ1BhY2thZ2UgdmVyc2lvbicsCi0gICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgcGFja2FnZSB2ZXJzaW9uIGFuZCByZXZpc2lvbicsCi0gICAgICAgIH0KLSAgICB0Y19zaXplID0gewotICAgICAgICAnbmFtZScgICAgICAgOiAnU2l6ZScsCi0gICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgc2l6ZSBvZiB0aGUgcGFja2FnZScsCi0gICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAic2l6ZSIsIFRydWUgKSwKLSAgICAgICAgJ29yZGVyaWNvbicgIDogX2dldF90b2dnbGVfb3JkZXJfaWNvbiggcmVxdWVzdCwgInNpemUiICksCi0gICAgICAgICdvcmRlcmtleScgICA6ICdzaXplJywKLSAgICAgICAgJ2NsY2xhc3MnICAgIDogJ3NpemUnLAotICAgICAgICAnZGNsYXNzJyAgICAgOiAnc3BhbjInLAotICAgICAgICB9Ci0gICAgaWYgKCB2YXJpYW50ID09ICd0YXJnZXQnICk6Ci0gICAgICAgIHRjX3NpemVbICJoaWRkZW4iIF0gPSAwCi0gICAgZWxzZToKLSAgICAgICAgdGNfc2l6ZVsgImhpZGRlbiIgXSA9IDEKLSAgICB0Y19zaXplUGVyY2VudGFnZSA9IHsKLSAgICAgICAgJ25hbWUnICAgICAgIDogJ1NpemUgb3ZlciB0b3RhbCAoJSknLAotICAgICAgICAncWhlbHAnICAgICAgOiAnUHJvcG9ydGlvbiBvZiB0aGUgb3ZlcmFsbCBzaXplIHJlcHJlc2VudGVkIGJ5IHRoaXMgcGFja2FnZScsCi0gICAgICAgICdjbGNsYXNzJyAgICA6ICdzaXplX292ZXJfdG90YWwnLAotICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAotICAgICAgICB9Ci0gICAgdGNfbGljZW5zZSA9IHsKLSAgICAgICAgJ25hbWUnICAgICAgIDogJ0xpY2Vuc2UnLAotICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIHBhY2thZ2UgaXMgZGlzdHJpYnV0ZWQuIFNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdVwKLXNpbmcgfCAocGlwZSkgbWVhbnMgdGhlcmUgaXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4gU2VwYXJhdGUgbGljZW5zZSBuYW1lcyB1c2luZyAmIChhbXBlcnNhbmQpIG1cCi1lYW5zIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0IHRoYXQgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UnLAotICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgImxpY2Vuc2UiICksCi0gICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJsaWNlbnNlIiApLAotICAgICAgICAnb3JkZXJrZXknICAgOiAnbGljZW5zZScsCi0gICAgICAgICdjbGNsYXNzJyAgICA6ICdsaWNlbnNlJywKLSAgICAgICAgfQotICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgotICAgICAgICB0Y19saWNlbnNlWyAiaGlkZGVuIiBdID0gMQotICAgIGVsc2U6Ci0gICAgICAgIHRjX2xpY2Vuc2VbICJoaWRkZW4iIF0gPSAwCi0gICAgdGNfZGVwZW5kZW5jaWVzID0gewotICAgICAgICAnbmFtZScgICAgICAgOiAnRGVwZW5kZW5jaWVzJywKLSAgICAgICAgJ3FoZWxwJyAgICAgIDogIlBhY2thZ2UgcnVudGltZSBkZXBlbmRlbmNpZXMgKG90aGVyIHBhY2thZ2VzKSIsCi0gICAgICAgICdjbGNsYXNzJyAgICA6ICdkZXBlbmRzJywKLSAgICAgICAgfQotICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgotICAgICAgICB0Y19kZXBlbmRlbmNpZXNbICJoaWRkZW4iIF0gPSAwCi0gICAgZWxzZToKLSAgICAgICAgdGNfZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMQotICAgIHRjX3JkZXBlbmRlbmNpZXMgPSB7Ci0gICAgICAgICduYW1lJyAgICAgICA6ICdSZXZlcnNlIGRlcGVuZGVuY2llcycsCi0gICAgICAgICdxaGVscCcgICAgICA6ICdQYWNrYWdlIHJ1bi10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHdoaWNoIG90aGVyIHBhY2thZ2VzIGRlcGVuZCBvbiB0aGlzIHBhY2thZ2UnLAotICAgICAgICAnY2xjbGFzcycgICAgOiAnYnJvdWdodF9pbl9ieScsCi0gICAgICAgIH0KLSAgICBpZiAoIHZhcmlhbnQgPT0gJ3RhcmdldCcgKToKLSAgICAgICAgdGNfcmRlcGVuZGVuY2llc1sgImhpZGRlbiIgXSA9IDAKLSAgICBlbHNlOgotICAgICAgICB0Y19yZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMQotICAgIHRjX3JlY2lwZSA9IHsKLSAgICAgICAgJ25hbWUnICAgICAgIDogJ1JlY2lwZScsCi0gICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKLSAgICAgICAgJ29yZGVyZmllbGQnIDogX2dldF90b2dnbGVfb3JkZXIoIHJlcXVlc3QsICJyZWNpcGVfX25hbWUiICksCi0gICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX25hbWUiICksCi0gICAgICAgICdvcmRlcmtleScgICA6ICJyZWNpcGVfX25hbWUiLAotICAgICAgICAnY2xjbGFzcycgICAgOiAncmVjaXBlX25hbWUnLAotICAgICAgICAnaGlkZGVuJyAgICAgOiAwLAotICAgICAgICB9Ci0gICAgdGNfcmVjaXBlVmVyc2lvbiA9IHsKLSAgICAgICAgJ25hbWUnICAgICAgIDogJ1JlY2lwZSB2ZXJzaW9uJywKLSAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1ZlcnNpb24gYW5kIHJldmlzaW9uIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhlIHBhY2thZ2UnLAotICAgICAgICAnY2xjbGFzcycgICAgOiAncmVjaXBlX3ZlcnNpb24nLAotICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAotICAgICAgICB9Ci0gICAgdGNfbGF5ZXIgPSB7Ci0gICAgICAgICduYW1lJyAgICAgICA6ICdMYXllcicsCi0gICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAotICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiICksCi0gICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiApLAotICAgICAgICAnb3JkZXJrZXknICAgOiAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIsCi0gICAgICAgICdjbGNsYXNzJyAgICA6ICdsYXllcl9uYW1lJywKLSAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKLSAgICAgICAgfQotICAgIHRjX2xheWVyQnJhbmNoID0gewotICAgICAgICAnbmFtZScgICAgICAgOiAnTGF5ZXIgYnJhbmNoJywKLSAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1RoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCi0gICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giICksCi0gICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIgKSwKLSAgICAgICAgJ29yZGVya2V5JyAgIDogInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiwKLSAgICAgICAgJ2NsY2xhc3MnICAgIDogJ2xheWVyX2JyYW5jaCcsCi0gICAgICAgICdoaWRkZW4nICAgICA6IDEsCi0gICAgICAgIH0KLSAgICB0Y19sYXllckNvbW1pdCA9IHsKLSAgICAgICAgJ25hbWUnICAgICAgIDogJ0xheWVyIGNvbW1pdCcsCi0gICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAotICAgICAgICAnY2xjbGFzcycgICAgOiAnbGF5ZXJfY29tbWl0JywKLSAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKLSAgICAgICAgfQotCi0gICAgY29udGV4dCA9IHsKLSAgICAgICAgJ29iamVjdG5hbWUnOiB2YXJpYW50LAotICAgICAgICAnYnVpbGQnICAgICAgICAgICAgICAgIDogYnVpbGQsCi0gICAgICAgICdwcm9qZWN0JyAgICAgICAgICAgICAgOiBidWlsZC5wcm9qZWN0LAotICAgICAgICAndGFyZ2V0JyAgICAgICAgICAgICAgIDogVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBwayA9IHRhcmdldF9pZCApWyAwIF0sCi0gICAgICAgICdvYmplY3RzJyAgICAgICAgICAgICAgOiBwYWNrYWdlcywKLSAgICAgICAgJ3BhY2thZ2VzX3N1bScgICAgICAgICA6IHBhY2thZ2VzX3N1bVsgJ2luc3RhbGxlZF9zaXplX19zdW0nIF0sCi0gICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOiAicGFja2FnZXMgaW5jbHVkZWQiLAotICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyAgICAgIDogZGVmYXVsdF9vcmRlcmJ5LAotICAgICAgICAndGFibGVjb2xzJyAgICAgICAgICAgIDogWwotICAgICAgICAgICAgICAgICAgICB0Y19wYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICB0Y19wYWNrYWdlVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgdGNfbGljZW5zZSwKLSAgICAgICAgICAgICAgICAgICAgdGNfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgdGNfc2l6ZVBlcmNlbnRhZ2UsCi0gICAgICAgICAgICAgICAgICAgIHRjX2RlcGVuZGVuY2llcywKLSAgICAgICAgICAgICAgICAgICAgdGNfcmRlcGVuZGVuY2llcywKLSAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlLAotICAgICAgICAgICAgICAgICAgICB0Y19yZWNpcGVWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICB0Y19sYXllciwKLSAgICAgICAgICAgICAgICAgICAgdGNfbGF5ZXJCcmFuY2gsCi0gICAgICAgICAgICAgICAgICAgIHRjX2xheWVyQ29tbWl0LAotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgfQotCi0KLSAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKLSAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQotICAgIHJldHVybiByZXNwb25zZQotCi1kZWYgdGFyZ2V0KCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkICk6Ci0gICAgcmV0dXJuKCB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCAidGFyZ2V0IiApKQotCi1kZWYgdGFyZ2V0cGtnKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkICk6Ci0gICAgcmV0dXJuKCB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCAidGFyZ2V0cGtnIiApKQotCiBmcm9tIGRqYW5nby5jb3JlLnNlcmlhbGl6ZXJzLmpzb24gaW1wb3J0IERqYW5nb0pTT05FbmNvZGVyCiBmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UKIGRlZiB4aHJfZGlyaW5mbyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkKToKQEAgLTkxMCw4ICs3NjcsOCBAQAogICAgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGVudHJ5KQogCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIHByaW50ICJFeGNlcHRpb24gIiwgZQotICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhlKQorICAgICAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiAiLCBlKQorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAKICAgICAjIHNvcnQgYnkgZGlyZWN0b3JpZXMgZmlyc3QsIHRoZW4gYnkgbmFtZQogICAgIHJzb3J0ZWQgPSBzb3J0ZWQocmVzcG9uc2UsIGtleT1sYW1iZGEgZW50cnkgOiAgZW50cnlbJ25hbWUnXSkKQEAgLTk1MiwxOCArODA5LDI5IEBACiAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKIAogZGVmIF9maW5kX3Rhc2tfZGVwKHRhc2tfb2JqZWN0KToKLSAgICByZXR1cm4gbWFwKGxhbWJkYSB4OiB4LmRlcGVuZHNfb24sIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcih0YXNrPXRhc2tfb2JqZWN0KS5maWx0ZXIoZGVwZW5kc19vbl9fb3JkZXJfX2d0ID0gMCkuZXhjbHVkZShkZXBlbmRzX29uX19vdXRjb21lID0gVGFzay5PVVRDT01FX05BKS5zZWxlY3RfcmVsYXRlZCgiZGVwZW5kc19vbiIpKQotCisgICAgdGRlcHMgPSBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIodGFzaz10YXNrX29iamVjdCkuZmlsdGVyKGRlcGVuZHNfb25fX29yZGVyX19ndD0wKQorICAgIHRkZXBzID0gdGRlcHMuZXhjbHVkZShkZXBlbmRzX29uX19vdXRjb21lPVRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iKQorICAgIHJldHVybiBbeC5kZXBlbmRzX29uIGZvciB4IGluIHRkZXBzXQogCiBkZWYgX2ZpbmRfdGFza19yZXZkZXAodGFza19vYmplY3QpOgotICAgIHRwID0gW10KLSAgICB0cCA9IG1hcChsYW1iZGEgdDogdC50YXNrLCBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIoZGVwZW5kc19vbj10YXNrX29iamVjdCkuZmlsdGVyKHRhc2tfX29yZGVyX19ndD0wKS5leGNsdWRlKHRhc2tfX291dGNvbWUgPSBUYXNrLk9VVENPTUVfTkEpLnNlbGVjdF9yZWxhdGVkKCJ0YXNrIiwgInRhc2tfX3JlY2lwZSIsICJ0YXNrX19idWlsZCIpKQotICAgIHJldHVybiB0cAorICAgIHRkZXBzID0gVGFza19EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKGRlcGVuZHNfb249dGFza19vYmplY3QpLmZpbHRlcih0YXNrX19vcmRlcl9fZ3Q9MCkKKyAgICB0ZGVwcyA9IHRkZXBzLmV4Y2x1ZGUodGFza19fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoInRhc2siLCAidGFza19fcmVjaXBlIiwgInRhc2tfX2J1aWxkIikKKworICAgICMgZXhjbHVkZSBzZWxmLWRlcGVuZGVuY2llcyB0byBwcmV2ZW50IGluZmluaXRlIGRlcGVuZGVuY3kgbG9vcAorICAgICMgaW4gZ2VuZXJhdGVDb3ZlcmVkTGlzdDIoKQorICAgIHRkZXBzID0gdGRlcHMuZXhjbHVkZSh0YXNrPXRhc2tfb2JqZWN0KQorCisgICAgcmV0dXJuIFt0ZGVwLnRhc2sgZm9yIHRkZXAgaW4gdGRlcHNdCiAKIGRlZiBfZmluZF90YXNrX3JldmRlcF9saXN0KHRhc2tsaXN0KToKLSAgICB0cCA9IFtdCi0gICAgdHAgPSBtYXAobGFtYmRhIHQ6IHQudGFzaywgVGFza19EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKGRlcGVuZHNfb25fX2luPXRhc2tsaXN0KS5maWx0ZXIodGFza19fb3JkZXJfX2d0PTApLmV4Y2x1ZGUodGFza19fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoInRhc2siLCAidGFza19fcmVjaXBlIiwgInRhc2tfX2J1aWxkIikpCi0gICAgcmV0dXJuIHRwCisgICAgdGRlcHMgPSBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIoZGVwZW5kc19vbl9faW49dGFza2xpc3QpLmZpbHRlcih0YXNrX19vcmRlcl9fZ3Q9MCkKKyAgICB0ZGVwcyA9IHRkZXBzLmV4Y2x1ZGUodGFza19fb3V0Y29tZT1UYXNrLk9VVENPTUVfTkEpLnNlbGVjdF9yZWxhdGVkKCJ0YXNrIiwgInRhc2tfX3JlY2lwZSIsICJ0YXNrX19idWlsZCIpCisKKyAgICAjIGV4Y2x1ZGUgc2VsZi1kZXBlbmRlbmNpZXMgdG8gcHJldmVudCBpbmZpbml0ZSBkZXBlbmRlbmN5IGxvb3AKKyAgICAjIGluIGdlbmVyYXRlQ292ZXJlZExpc3QyKCkKKyAgICB0ZGVwcyA9IHRkZXBzLmV4Y2x1ZGUodGFzaz1GKCdkZXBlbmRzX29uJykpCisKKyAgICByZXR1cm4gW3RkZXAudGFzayBmb3IgdGRlcCBpbiB0ZGVwc10KIAogZGVmIF9maW5kX3Rhc2tfcHJvdmlkZXIodGFza19vYmplY3QpOgogICAgIHRhc2tfcmV2ZGVwcyA9IF9maW5kX3Rhc2tfcmV2ZGVwKHRhc2tfb2JqZWN0KQpAQCAtOTc2LDM5NiArODQ0LDYgQEAKICAgICAgICAgICAgIHJldHVybiB0cmMKICAgICByZXR1cm4gTm9uZQogCi1kZWYgdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCB2YXJpYW50LCB0YXNrX2FuY2hvcik6Ci0jIFRoaXMgY2xhc3MgaXMgc2hhcmVkIGJldHdlZW4gdGhlc2UgcGFnZXMKLSMKLSMgQ29sdW1uICAgIHRhc2tzICBidWlsZHRpbWUgIGRpc2tpbyAgY3B1dXNhZ2UKLSMgLS0tLS0tLS0tIC0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tCi0jIENhY2hlICAgICAgZGVmCi0jIENQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluIC0KLSMgRGlzayAgICAgICAgICAgICAgICAgICAgICAgICBtaW4gLQotIyBFeGVjdXRlZCAgIGRlZiAgICAgZGVmICAgICAgIGRlZiAgICAgIGRlZgotIyBMb2cKLSMgT3JkZXIgICAgICBkZWYgKwotIyBPdXRjb21lICAgIGRlZiAgICAgZGVmICAgICAgIGRlZiAgICAgIGRlZgotIyBSZWNpcGUgICAgIG1pbiAgICAgbWluICAgICAgIG1pbiAgICAgIG1pbgotIyBWZXJzaW9uCi0jIFRhc2sgICAgICAgbWluICAgICBtaW4gICAgICAgbWluICAgICAgbWluCi0jIFRpbWUgICAgICAgICAgICAgICBtaW4gLQotIwotIyAnbWluJzpvbiBhbHdheXMsICdkZWYnOm9uIGJ5IGRlZmF1bHQsIGVsc2UgaGlkZGVuCi0jICcrJyBkZWZhdWx0IGNvbHVtbiBzb3J0IHVwLCAnLScgZGVmYXVsdCBjb2x1bW4gc29ydCBkb3duCi0KLSAgICBhbmNob3IgPSByZXF1ZXN0LkdFVC5nZXQoJ2FuY2hvcicsICcnKQotICAgIGlmIG5vdCBhbmNob3I6Ci0gICAgICAgIGFuY2hvcj10YXNrX2FuY2hvcgotCi0gICAgIyBkZWZhdWx0IG9yZGVyaW5nIGRlcGVuZHMgb24gdmFyaWFudAotICAgIGRlZmF1bHRfb3JkZXJieSA9IE5vbmUKLSAgICBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXkgPSAndGFza3MnCi0KLSAgICBpZiAnYnVpbGR0aW1lJyA9PSB2YXJpYW50OgotICAgICAgICBkZWZhdWx0X29yZGVyYnkgPSAnZWxhcHNlZF90aW1lOi0nCi0gICAgICAgIHRpdGxlX3ZhcmlhbnQgPSAnVGltZScKLSAgICAgICAgb2JqZWN0X3NlYXJjaF9kaXNwbGF5ID0gJ3RpbWUgZGF0YScKLSAgICBlbGlmICdkaXNraW8nID09IHZhcmlhbnQ6Ci0gICAgICAgIGRlZmF1bHRfb3JkZXJieSA9ICdkaXNrX2lvOi0nCi0gICAgICAgIHRpdGxlX3ZhcmlhbnQgPSAnRGlzayBJL08nCi0gICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheSA9ICdkaXNrIEkvTyBkYXRhJwotICAgIGVsaWYgJ2NwdXRpbWUnID09IHZhcmlhbnQ6Ci0gICAgICAgIGRlZmF1bHRfb3JkZXJieSA9ICdjcHVfdGltZV9zeXN0ZW06LScKLSAgICAgICAgdGl0bGVfdmFyaWFudD0nQ1BVIHRpbWUnCi0gICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheSA9ICdDUFUgdGltZSBkYXRhJwotICAgIGVsc2U6Ci0gICAgICAgIGRlZmF1bHRfb3JkZXJieSA9ICdvcmRlcjorJwotICAgICAgICB0aXRsZV92YXJpYW50ID0gJ1Rhc2tzJwotICAgICAgICBvYmplY3Rfc2VhcmNoX2Rpc3BsYXkgPSAndGFza3MnCi0KLSAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAyNSwgZGVmYXVsdF9vcmRlcmJ5KQotCi0gICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7J2NvdW50JzogcGFnZXNpemUsICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieX0KLQotICAgIHRlbXBsYXRlID0gJ3Rhc2tzLmh0bWwnCi0gICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQotICAgIGlmIHJldHZhbDoKLSAgICAgICAgaWYgdGFza19hbmNob3I6Ci0gICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1snYW5jaG9yJ109dGFza19hbmNob3IKLSAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCi0gICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBUYXNrKQotICAgIHF1ZXJ5c2V0X2FsbCA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpLmV4Y2x1ZGUob3JkZXJfX2lzbnVsbD1UcnVlKS5leGNsdWRlKG91dGNvbWU9VGFzay5PVVRDT01FX05BKQotICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5zZWxlY3RfcmVsYXRlZCgicmVjaXBlIiwgImJ1aWxkIikKLQotICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIE5vbmUgLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnb3JkZXInKQotCi0gICAgaWYgb3JkZXJpbmdfc3RyaW5nLnN0YXJ0c3dpdGgoJ291dGNvbWUnKToKLSAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sICdvcmRlcjorJywgJ29yZGVyJykKLSAgICAgICAgcXVlcnlzZXQgPSBzb3J0ZWQocXVlcnlzZXQsIGtleT1sYW1iZGEgdXI6ICh1ci5vdXRjb21lX3RleHQpLCByZXZlcnNlPW9yZGVyaW5nX3N0cmluZy5lbmRzd2l0aCgnLScpKQotICAgIGVsaWYgb3JkZXJpbmdfc3RyaW5nLnN0YXJ0c3dpdGgoJ3NzdGF0ZV9yZXN1bHQnKToKLSAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sICdvcmRlcjorJywgJ29yZGVyJykKLSAgICAgICAgcXVlcnlzZXQgPSBzb3J0ZWQocXVlcnlzZXQsIGtleT1sYW1iZGEgdXI6ICh1ci5zc3RhdGVfdGV4dCksIHJldmVyc2U9b3JkZXJpbmdfc3RyaW5nLmVuZHN3aXRoKCctJykpCi0gICAgZWxzZToKLSAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ29yZGVyJykKLQotCi0gICAgIyBjb21wdXRlIHRoZSBhbmNob3IncyBwYWdlCi0gICAgaWYgYW5jaG9yOgotICAgICAgICByZXF1ZXN0LkdFVCA9IHJlcXVlc3QuR0VULmNvcHkoKQotICAgICAgICBkZWwgcmVxdWVzdC5HRVRbJ2FuY2hvciddCi0gICAgICAgIGk9MAotICAgICAgICBhPWludChhbmNob3IpCi0gICAgICAgIGNvdW50X3Blcl9wYWdlPWludChwYWdlc2l6ZSkKLSAgICAgICAgZm9yIHRhc2tfb2JqZWN0IGluIHF1ZXJ5c2V0Lml0ZXJhdG9yKCk6Ci0gICAgICAgICAgICBpZiBhID09IHRhc2tfb2JqZWN0Lm9yZGVyOgotICAgICAgICAgICAgICAgIG5ld19wYWdlPSAoaSAvIGNvdW50X3Blcl9wYWdlICkgKyAxCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5HRVQuX19zZXRpdGVtX18oJ3BhZ2UnLCBuZXdfcGFnZSkKLSAgICAgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1sncGFnZSddPW5ld19wYWdlCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCi0gICAgICAgICAgICBpICs9IDEKLQotICAgIHRhc2tfb2JqZWN0cyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQotCi0gICAgIyBkZWZpbmUgKGFuZCBtb2RpZnkgYnkgdmFyaWFudHMpIHRoZSAndGFibGVjb2xzJyBtZW1iZXJzCi0gICAgdGNfb3JkZXI9ewotICAgICAgICAnbmFtZSc6J09yZGVyJywKLSAgICAgICAgJ3FoZWxwJzonVGhlIHJ1bm5pbmcgc2VxdWVuY2Ugb2YgZWFjaCB0YXNrIGluIHRoZSBidWlsZCcsCi0gICAgICAgICdjbGNsYXNzJzogJ29yZGVyJywgJ2hpZGRlbicgOiAxLAotICAgICAgICAnb3JkZXJrZXknIDogJ29yZGVyJywKLSAgICAgICAgJ29yZGVyZmllbGQnOl9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJvcmRlciIpLAotICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJvcmRlciIpfQotICAgIGlmICd0YXNrcycgPT0gdmFyaWFudDoKLSAgICAgICAgdGNfb3JkZXJbJ2hpZGRlbiddPScwJwotICAgICAgICBkZWwgdGNfb3JkZXJbJ2NsY2xhc3MnXQotCi0gICAgdGNfcmVjaXBlPXsKLSAgICAgICAgJ25hbWUnOidSZWNpcGUnLAotICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzJywKLSAgICAgICAgJ29yZGVya2V5JyA6ICdyZWNpcGVfX25hbWUnLAotICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWNpcGVfX25hbWUiKSwKLSAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicmVjaXBlX19uYW1lIiksCi0gICAgfQotICAgIHRjX3JlY2lwZV92ZXJzaW9uPXsKLSAgICAgICAgJ25hbWUnOidSZWNpcGUgdmVyc2lvbicsCi0gICAgICAgICdxaGVscCc6J1RoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUgdG8gd2hpY2ggZWFjaCB0YXNrIGFwcGxpZXMnLAotICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfdmVyc2lvbicsICdoaWRkZW4nIDogMSwKLSAgICB9Ci0gICAgdGNfdGFzaz17Ci0gICAgICAgICduYW1lJzonVGFzaycsCi0gICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSB0YXNrJywKLSAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFza19uYW1lIiksCi0gICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInRhc2tfbmFtZSIpLAotICAgICAgICAnb3JkZXJrZXknIDogJ3Rhc2tfbmFtZScsCi0gICAgfQotICAgIHRjX2V4ZWN1dGVkPXsKLSAgICAgICAgJ25hbWUnOidFeGVjdXRlZCcsCi0gICAgICAgICdxaGVscCc6IlRoaXMgdmFsdWUgdGVsbHMgeW91IGlmIGEgdGFzayBoYWQgdG8gcnVuIChleGVjdXRlZCkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0LCBvciBpZiB0aGUgb3V0cHV0IHdhcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2sgYW5kIHRoZXJlZm9yZSB0aGUgdGFzayBkaWRuJ3QgbmVlZCB0byBydW4gKG5vdCBleGVjdXRlZCkiLAotICAgICAgICAnY2xjbGFzcyc6ICdleGVjdXRlZCcsICdoaWRkZW4nIDogMCwKLSAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFza19leGVjdXRlZCIpLAotICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ0YXNrX2V4ZWN1dGVkIiksCi0gICAgICAgICdvcmRlcmtleScgOiAndGFza19leGVjdXRlZCcsCi0gICAgICAgICdmaWx0ZXInIDogewotICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnZXhlY3V0ZWQnLAotICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCi0gICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRXhlY3V0ZWQgVGFza3MnLCAndGFza19leGVjdXRlZDoxJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfZXhlY3V0ZWQ9MSkuY291bnQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdOb3QgRXhlY3V0ZWQgVGFza3MnLCAndGFza19leGVjdXRlZDowJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfZXhlY3V0ZWQ9MCkuY291bnQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgIH0KLQotICAgIH0KLSAgICB0Y19vdXRjb21lPXsKLSAgICAgICAgJ25hbWUnOidPdXRjb21lJywKLSAgICAgICAgJ3FoZWxwJzoiVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvIHJ1biIsCi0gICAgICAgICdjbGNsYXNzJzogJ291dGNvbWUnLCAnaGlkZGVuJyA6IDAsCi0gICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm91dGNvbWUiKSwKLSAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAib3V0Y29tZSIpLAotICAgICAgICAnb3JkZXJrZXknIDogJ291dGNvbWUnLAotICAgICAgICAnZmlsdGVyJyA6IHsKLSAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ291dGNvbWUnLAotICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCi0gICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnU3VjY2VlZGVkIFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9TVUNDRVNTLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1UYXNrLk9VVENPTUVfU1VDQ0VTUykuY291bnQoKSwgIidTdWNjZWVkZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IHJhbiBhbmQgY29tcGxldGVkIGR1cmluZyB0aGUgYnVpbGQiICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdGYWlsZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0ZBSUxFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0ZBSUxFRCkuY291bnQoKSwgIidGYWlsZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IHJhbiBidXQgZGlkIG5vdCBjb21wbGV0ZSBkdXJpbmcgdGhlIGJ1aWxkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYWNoZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0NBQ0hFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0NBQ0hFRCkuY291bnQoKSwgJ0NhY2hlZCB0YXNrcyByZXN0b3JlIG91dHB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdQcmVidWlsdCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfUFJFQlVJTFQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9QUkVCVUlMVCkuY291bnQoKSwnUHJlYnVpbHQgdGFza3MgZGlkblwndCBuZWVkIHRvIHJ1biBiZWNhdXNlIHRoZWlyIG91dHB1dCB3YXMgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBidWlsZCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQ292ZXJlZCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfQ09WRVJFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0NPVkVSRUQpLmNvdW50KCksICdDb3ZlcmVkIHRhc2tzIGRpZG5cJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRwdXQgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGluIHRoaXMgYnVpbGQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0VtcHR5IFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9FTVBUWSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0VNUFRZKS5jb3VudCgpLCAnRW1wdHkgdGFza3MgaGF2ZSBubyBleGVjdXRhYmxlIGNvbnRlbnQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgfQotCi0gICAgfQotCi0gICAgdGNfY2FjaGU9ewotICAgICAgICAnbmFtZSc6J0NhY2hlIGF0dGVtcHQnLAotICAgICAgICAncWhlbHAnOidUaGlzIGNvbHVtbiB0ZWxscyB5b3UgaWYgYSB0YXNrIHRyaWVkIHRvIHJlc3RvcmUgb3V0cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMsIGFuZCByZXBvcnRzIHRoZSByZXN1bHQ6IFN1Y2NlZWRlZCwgRmFpbGVkIG9yIEZpbGUgbm90IGluIGNhY2hlJywKLSAgICAgICAgJ2NsY2xhc3MnOiAnY2FjaGVfYXR0ZW1wdCcsICdoaWRkZW4nIDogMCwKLSAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic3N0YXRlX3Jlc3VsdCIpLAotICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzc3RhdGVfcmVzdWx0IiksCi0gICAgICAgICdvcmRlcmtleScgOiAnc3N0YXRlX3Jlc3VsdCcsCi0gICAgICAgICdmaWx0ZXInIDogewotICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnY2FjaGVfYXR0ZW1wdCcsCi0gICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKLSAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdUYXNrcyB3aXRoIGNhY2hlIGF0dGVtcHRzJywgJ3NzdGF0ZV9yZXN1bHRfX2d0OiVkJyVUYXNrLlNTVEFURV9OQSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHRfX2d0PVRhc2suU1NUQVRFX05BKS5jb3VudCgpLCAnU2hvdyBhbGwgdGFza3MgdGhhdCB0cmllZCB0byByZXN0b3JlIG91cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlRhc2tzIHdpdGggJ0ZpbGUgbm90IGluIGNhY2hlJyBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9NSVNTLCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfTUlTUykuY291bnQoKSwgJ1Nob3cgdGFza3MgdGhhdCB0cmllZCB0byByZXN0b3JlIG91dHB1dCwgYnV0IGRpZCBub3QgZmluZCBpdCBpbiB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVGFza3Mgd2l0aCAnRmFpbGVkJyBjYWNoZSBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9GQUlMRUQsICBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoc3N0YXRlX3Jlc3VsdD1UYXNrLlNTVEFURV9GQUlMRUQpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgZm91bmQgdGhlIHJlcXVpcmVkIG91dHB1dCBpbiB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycywgYnV0IGNvdWxkIG5vdCByZXN0b3JlIGl0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUYXNrcyB3aXRoICdTdWNjZWVkZWQnIGNhY2hlIGF0dGVtcHRzIiwgJ3NzdGF0ZV9yZXN1bHQ6JWQnJVRhc2suU1NUQVRFX1JFU1RPUkVELCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfUkVTVE9SRUQpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIHRoZSByZXF1aXJlZCBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICB9Ci0gICAgI2lmICAgJ3Rhc2tzJyA9PSB2YXJpYW50OiB0Y19jYWNoZVsnaGlkZGVuJ109JzAnOwotICAgIHRjX3RpbWU9ewotICAgICAgICAnbmFtZSc6J1RpbWUgKHNlY3MpJywKLSAgICAgICAgJ3FoZWxwJzonSG93IGxvbmcgaXQgdG9vayB0aGUgdGFzayB0byBmaW5pc2ggaW4gc2Vjb25kcycsCi0gICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImVsYXBzZWRfdGltZSIsIFRydWUpLAotICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJlbGFwc2VkX3RpbWUiKSwKLSAgICAgICAgJ29yZGVya2V5JyA6ICdlbGFwc2VkX3RpbWUnLAotICAgICAgICAnY2xjbGFzcyc6ICd0aW1lX3Rha2VuJywgJ2hpZGRlbicgOiAxLAotICAgIH0KLSAgICBpZiAnYnVpbGR0aW1lJyA9PSB2YXJpYW50OgotICAgICAgICB0Y190aW1lWydoaWRkZW4nXT0nMCcKLSAgICAgICAgZGVsIHRjX3RpbWVbJ2NsY2xhc3MnXQotICAgICAgICB0Y19jYWNoZVsnaGlkZGVuJ109JzEnCi0KLSAgICB0Y19jcHVfdGltZV9zeXN0ZW09ewotICAgICAgICAnbmFtZSc6J1N5c3RlbSBDUFUgdGltZSAoc2VjcyknLAotICAgICAgICAncWhlbHAnOidUb3RhbCBhbW91bnQgb2YgdGltZSBzcGVudCBleGVjdXRpbmcgaW4ga2VybmVsIG1vZGUsIGluICcgKwotICAgICAgICAgICAgICAgICdzZWNvbmRzLiBOb3RlIHRoYXQgdGhpcyB0aW1lIGNhbiBiZSBncmVhdGVyIHRoYW4gdGhlIHRhc2sgJyArCi0gICAgICAgICAgICAgICAgJ3RpbWUgZHVlIHRvIHBhcmFsbGVsIGV4ZWN1dGlvbi4nLAotICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJjcHVfdGltZV9zeXN0ZW0iLCBUcnVlKSwKLSAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiY3B1X3RpbWVfc3lzdGVtIiksCi0gICAgICAgICdvcmRlcmtleScgOiAnY3B1X3RpbWVfc3lzdGVtJywKLSAgICAgICAgJ2NsY2xhc3MnOiAnY3B1X3RpbWVfc3lzdGVtJywgJ2hpZGRlbicgOiAxLAotICAgIH0KLQotICAgIHRjX2NwdV90aW1lX3VzZXI9ewotICAgICAgICAnbmFtZSc6J1VzZXIgQ1BVIHRpbWUgKHNlY3MpJywKLSAgICAgICAgJ3FoZWxwJzonVG90YWwgYW1vdW50IG9mIHRpbWUgc3BlbnQgZXhlY3V0aW5nIGluIHVzZXIgbW9kZSwgaW4gc2Vjb25kcy4gJyArCi0gICAgICAgICAgICAgICAgJ05vdGUgdGhhdCB0aGlzIHRpbWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiB0aGUgdGFzayB0aW1lIGR1ZSB0byAnICsKLSAgICAgICAgICAgICAgICAncGFyYWxsZWwgZXhlY3V0aW9uLicsCi0gICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImNwdV90aW1lX3VzZXIiLCBUcnVlKSwKLSAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiY3B1X3RpbWVfdXNlciIpLAotICAgICAgICAnb3JkZXJrZXknIDogJ2NwdV90aW1lX3VzZXInLAotICAgICAgICAnY2xjbGFzcyc6ICdjcHVfdGltZV91c2VyJywgJ2hpZGRlbicgOiAxLAotICAgIH0KLQotICAgIGlmICdjcHV0aW1lJyA9PSB2YXJpYW50OgotICAgICAgICB0Y19jcHVfdGltZV9zeXN0ZW1bJ2hpZGRlbiddPScwJwotICAgICAgICB0Y19jcHVfdGltZV91c2VyWydoaWRkZW4nXT0nMCcKLSAgICAgICAgZGVsIHRjX2NwdV90aW1lX3N5c3RlbVsnY2xjbGFzcyddCi0gICAgICAgIGRlbCB0Y19jcHVfdGltZV91c2VyWydjbGNsYXNzJ10KLSAgICAgICAgdGNfY2FjaGVbJ2hpZGRlbiddPScxJwotCi0gICAgdGNfZGlza2lvPXsKLSAgICAgICAgJ25hbWUnOidEaXNrIEkvTyAoYnl0ZXMpJywKLSAgICAgICAgJ3FoZWxwJzonTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gYW5kIHJlYWQgZnJvbSB0aGUgZGlzayBkdXJpbmcgdGhlIHRhc2snLAotICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJkaXNrX2lvIiwgVHJ1ZSksCi0gICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImRpc2tfaW8iKSwKLSAgICAgICAgJ29yZGVya2V5JyA6ICdkaXNrX2lvJywKLSAgICAgICAgJ2NsY2xhc3MnOiAnZGlza19pbycsICdoaWRkZW4nIDogMSwKLSAgICB9Ci0gICAgaWYgJ2Rpc2tpbycgPT0gdmFyaWFudDoKLSAgICAgICAgdGNfZGlza2lvWydoaWRkZW4nXT0nMCcKLSAgICAgICAgZGVsIHRjX2Rpc2tpb1snY2xjbGFzcyddCi0gICAgICAgIHRjX2NhY2hlWydoaWRkZW4nXT0nMScKLQotICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpCi0KLSAgICBjb250ZXh0ID0geyAnb2JqZWN0bmFtZSc6IHZhcmlhbnQsCi0gICAgICAgICAgICAgICAgJ29iamVjdF9zZWFyY2hfZGlzcGxheSc6IG9iamVjdF9zZWFyY2hfZGlzcGxheSwKLSAgICAgICAgICAgICAgICAnZmlsdGVyX3NlYXJjaF9kaXNwbGF5JzogZmlsdGVyX3NlYXJjaF9kaXNwbGF5LAotICAgICAgICAgICAgICAgICdtYWluaGVhZGluZyc6IHRpdGxlX3ZhcmlhbnQsCi0gICAgICAgICAgICAgICAgJ2J1aWxkJzogYnVpbGQsCi0gICAgICAgICAgICAgICAgJ3Byb2plY3QnOiBidWlsZC5wcm9qZWN0LAotICAgICAgICAgICAgICAgICdvYmplY3RzJzogdGFza19vYmplY3RzLAotICAgICAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogZGVmYXVsdF9vcmRlcmJ5LAotICAgICAgICAgICAgICAgICdzZWFyY2hfdGVybSc6IHNlYXJjaF90ZXJtLAotICAgICAgICAgICAgICAgICd0b3RhbF9jb3VudCc6IHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmNvdW50KCksCi0gICAgICAgICAgICAgICAgJ3RhYmxlY29scyc6WwotICAgICAgICAgICAgICAgICAgICB0Y19vcmRlciwKLSAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlLAotICAgICAgICAgICAgICAgICAgICB0Y19yZWNpcGVfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgdGNfdGFzaywKLSAgICAgICAgICAgICAgICAgICAgdGNfZXhlY3V0ZWQsCi0gICAgICAgICAgICAgICAgICAgIHRjX291dGNvbWUsCi0gICAgICAgICAgICAgICAgICAgIHRjX2NhY2hlLAotICAgICAgICAgICAgICAgICAgICB0Y190aW1lLAotICAgICAgICAgICAgICAgICAgICB0Y19jcHVfdGltZV9zeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgIHRjX2NwdV90aW1lX3VzZXIsCi0gICAgICAgICAgICAgICAgICAgIHRjX2Rpc2tpbywKLSAgICAgICAgICAgICAgICBdfQotCi0KLSAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKLSAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQotICAgIHJldHVybiByZXNwb25zZQotCi1kZWYgdGFza3MocmVxdWVzdCwgYnVpbGRfaWQpOgotICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICd0YXNrcycsICcnKQotCi1kZWYgdGFza3NfdGFzayhyZXF1ZXN0LCBidWlsZF9pZCwgdGFza19pZCk6Ci0gICAgcmV0dXJuIHRhc2tzX2NvbW1vbihyZXF1ZXN0LCBidWlsZF9pZCwgJ3Rhc2tzJywgdGFza19pZCkKLQotZGVmIGJ1aWxkdGltZShyZXF1ZXN0LCBidWlsZF9pZCk6Ci0gICAgcmV0dXJuIHRhc2tzX2NvbW1vbihyZXF1ZXN0LCBidWlsZF9pZCwgJ2J1aWxkdGltZScsICcnKQotCi1kZWYgZGlza2lvKHJlcXVlc3QsIGJ1aWxkX2lkKToKLSAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAnZGlza2lvJywgJycpCi0KLWRlZiBjcHV0aW1lKHJlcXVlc3QsIGJ1aWxkX2lkKToKLSAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAnY3B1dGltZScsICcnKQotCi1kZWYgcmVjaXBlcyhyZXF1ZXN0LCBidWlsZF9pZCk6Ci0gICAgdGVtcGxhdGUgPSAncmVjaXBlcy5odG1sJwotICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwMCwgJ25hbWU6KycpCi0gICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9Ci0gICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQotICAgIGlmIHJldHZhbDoKLSAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncmVjaXBlcycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCkKLSAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFJlY2lwZSkKLQotICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpCi0KLSAgICBxdWVyeXNldCA9IGJ1aWxkLmdldF9yZWNpcGVzKCkKLSAgICBxdWVyeXNldCA9IF9nZXRfcXVlcnlzZXQoUmVjaXBlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ25hbWUnKQotCi0gICAgcmVjaXBlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQotCi0gICAgIyBwcmVmZXRjaCB0aGUgZm9yd2FyZCBhbmQgcmV2ZXJzZSByZWNpcGUgZGVwZW5kZW5jaWVzCi0gICAgZGVwcyA9IHsgfQotICAgIHJldnMgPSB7IH0KLSAgICBxdWVyeXNldF9kZXBlbmRlbmN5PVJlY2lwZV9EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKHJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnVpbGRfaWQgPSBidWlsZF9pZCkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iLCAicmVjaXBlIikKLSAgICBmb3IgcmVjaXBlIGluIHJlY2lwZXM6Ci0gICAgICAgIGRlcGxpc3QgPSBbIF0KLSAgICAgICAgZm9yIHJlY2lwZV9kZXAgaW4gW3ggZm9yIHggaW4gcXVlcnlzZXRfZGVwZW5kZW5jeSBpZiB4LnJlY2lwZV9pZCA9PSByZWNpcGUuaWRdOgotICAgICAgICAgICAgZGVwbGlzdC5hcHBlbmQocmVjaXBlX2RlcCkKLSAgICAgICAgZGVwc1tyZWNpcGUuaWRdID0gZGVwbGlzdAotICAgICAgICByZXZsaXN0ID0gWyBdCi0gICAgICAgIGZvciByZWNpcGVfZGVwIGluIFt4IGZvciB4IGluIHF1ZXJ5c2V0X2RlcGVuZGVuY3kgaWYgeC5kZXBlbmRzX29uX2lkID09IHJlY2lwZS5pZF06Ci0gICAgICAgICAgICByZXZsaXN0LmFwcGVuZChyZWNpcGVfZGVwKQotICAgICAgICByZXZzW3JlY2lwZS5pZF0gPSByZXZsaXN0Ci0KLSAgICBjb250ZXh0ID0gewotICAgICAgICAnb2JqZWN0bmFtZSc6ICdyZWNpcGVzJywKLSAgICAgICAgJ2J1aWxkJzogYnVpbGQsCi0gICAgICAgICdwcm9qZWN0JzogYnVpbGQucHJvamVjdCwKLSAgICAgICAgJ29iamVjdHMnOiByZWNpcGVzLAotICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6ICduYW1lOisnLAotICAgICAgICAncmVjaXBlX2RlcHMnIDogZGVwcywKLSAgICAgICAgJ3JlY2lwZV9yZXZzJyA6IHJldnMsCi0gICAgICAgICd0YWJsZWNvbHMnOlsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J1JlY2lwZScsCi0gICAgICAgICAgICAgICAgJ3FoZWxwJzonSW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgcGllY2Ugb2Ygc29mdHdhcmUsIGluY2x1ZGluZyB3aGVyZSB0byBkb3dubG9hZCB0aGUgc291cmNlLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGhvdyB0byBjb21waWxlIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGhvdyB0byBwYWNrYWdlIHRoZSBjb21waWxlZCBvdXRwdXQnLAotICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm5hbWUiKSwKLSAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJuYW1lIiksCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlIHZlcnNpb24nLAotICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSByZWNpcGUgdmVyc2lvbiBhbmQgcmV2aXNpb24nLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J0RlcGVuZGVuY2llcycsCi0gICAgICAgICAgICAgICAgJ3FoZWxwJzonUmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpJywKLSAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdkZXBlbmRzX29uJywgJ2hpZGRlbic6IDEsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICduYW1lJzonUmV2ZXJzZSBkZXBlbmRlbmNpZXMnLAotICAgICAgICAgICAgICAgICdxaGVscCc6J1JlY2lwZSBidWlsZC10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoaXMgcmVjaXBlKScsCi0gICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnZGVwZW5kc19ieScsICdoaWRkZW4nOiAxLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J1JlY2lwZSBmaWxlJywKLSAgICAgICAgICAgICAgICAncWhlbHAnOidQYXRoIHRvIHRoZSByZWNpcGUgLmJiIGZpbGUnLAotICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImZpbGVfcGF0aCIpLAotICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImZpbGVfcGF0aCIpLAotICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnZmlsZV9wYXRoJywKLSAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfZmlsZScsICdoaWRkZW4nOiAwLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J1NlY3Rpb24nLAotICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBzZWN0aW9uIGluIHdoaWNoIHJlY2lwZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkJywKLSAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJzZWN0aW9uIiksCi0gICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic2VjdGlvbiIpLAotICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnc2VjdGlvbicsCi0gICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX3NlY3Rpb24nLCAnaGlkZGVuJzogMCwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOidMaWNlbnNlJywKLSAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBwaXBlIGNoYXJhY3RlciBpbmRpY2F0ZXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIGFtcGVyc2FuZCBjaGFyYWN0ZXIgaW5kaWNhdGVzIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0IHRoYXQgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UnLAotICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImxpY2Vuc2UiKSwKLSAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJsaWNlbnNlIiksCi0gICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdsaWNlbnNlJywKLSAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfbGljZW5zZScsICdoaWRkZW4nOiAwLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyJywKLSAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUnLAotICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiksCi0gICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKSwKLSAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywKLSAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsICdoaWRkZW4nOiAwLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyIGJyYW5jaCcsCi0gICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIEdpdCBicmFuY2ggb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlJywKLSAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJsYXllcl92ZXJzaW9uX19icmFuY2giKSwKLSAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJsYXllcl92ZXJzaW9uX19icmFuY2giKSwKLSAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsCi0gICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ2hpZGRlbic6IDEsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXIgY29tbWl0JywKLSAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUnLAotICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQnLCAnaGlkZGVuJzogMSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdCi0gICAgICAgIH0KLQotICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQotICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCi0gICAgcmV0dXJuIHJlc3BvbnNlCi0KIGRlZiBjb25maWd1cmF0aW9uKHJlcXVlc3QsIGJ1aWxkX2lkKToKICAgICB0ZW1wbGF0ZSA9ICdjb25maWd1cmF0aW9uLmh0bWwnCiAKQEAgLTE0MzcsNyArOTE1LDYgQEAKICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdWYWx1ZScsCiAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgdmFsdWUgYXNzaWduZWQgdG8gdGhlIHZhcmlhYmxlIiwKLSAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICJzcGFuNCIsCiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICB7J25hbWUnOiAnU2V0IGluIGZpbGUnLAogICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGxhc3QgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdG91Y2hlZCB0aGUgdmFyaWFibGUgdmFsdWUiLApAQCAtMTQ3NCw5NiArOTUxLDYgQEAKICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQogICAgIHJldHVybiByZXNwb25zZQogCi1kZWYgYnBhY2thZ2UocmVxdWVzdCwgYnVpbGRfaWQpOgotICAgIHRlbXBsYXRlID0gJ2JwYWNrYWdlLmh0bWwnCi0gICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAwLCAnbmFtZTorJykKLSAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JyA6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9Ci0gICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQotICAgIGlmIHJldHZhbDoKLSAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncGFja2FnZXMnLCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCi0gICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBQYWNrYWdlKQotICAgIHF1ZXJ5c2V0ID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkX2lkKS5maWx0ZXIoc2l6ZV9fZ3RlPTApCi0gICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScpCi0KLSAgICBwYWNrYWdlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQotCi0gICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldCggcGsgPSBidWlsZF9pZCApCi0KLSAgICBjb250ZXh0ID0gewotICAgICAgICAnb2JqZWN0bmFtZSc6ICdwYWNrYWdlcyBidWlsdCcsCi0gICAgICAgICdidWlsZCc6IGJ1aWxkLAotICAgICAgICAncHJvamVjdCc6IGJ1aWxkLnByb2plY3QsCi0gICAgICAgICdvYmplY3RzJyA6IHBhY2thZ2VzLAotICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6ICduYW1lOisnLAotICAgICAgICAndGFibGVjb2xzJzpbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOidQYWNrYWdlJywKLSAgICAgICAgICAgICAgICAncWhlbHAnOidQYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgYSByZWNpcGUnLAotICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm5hbWUiKSwKLSAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJuYW1lIiksCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICduYW1lJzonUGFja2FnZSB2ZXJzaW9uJywKLSAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgcGFja2FnZSB2ZXJzaW9uIGFuZCByZXZpc2lvbicsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICduYW1lJzonU2l6ZScsCi0gICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIHNpemUgb2YgdGhlIHBhY2thZ2UnLAotICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInNpemUiLCBUcnVlKSwKLSAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzaXplIiksCi0gICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdzaXplJywKLSAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdzaXplJywgJ2hpZGRlbic6IDAsCi0gICAgICAgICAgICAgICAgJ2RjbGFzcycgOiAnc3BhbjInLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J0xpY2Vuc2UnLAotICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZSBwYWNrYWdlIGlzIGRpc3RyaWJ1dGVkLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgcGlwZSBjaGFyYWN0ZXIgaW5kaWNhdGVzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBhbXBlcnNhbmQgY2hhcmFjdGVyIGluZGljYXRlcyBtdWx0aXBsZSBsaWNlbnNlcyBleGlzdCB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlJywKLSAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJsaWNlbnNlIiksCi0gICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibGljZW5zZSIpLAotICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbGljZW5zZScsCi0gICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnbGljZW5zZScsICdoaWRkZW4nOiAxLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J1JlY2lwZScsCi0gICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIG5hbWUgb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGUgcGFja2FnZScsCi0gICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVjaXBlX19uYW1lIiksCi0gICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicmVjaXBlX19uYW1lIiksCi0gICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdyZWNpcGVfX25hbWUnLAotICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fbmFtZScsICdoaWRkZW4nOiAwLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J1JlY2lwZSB2ZXJzaW9uJywKLSAgICAgICAgICAgICAgICAncWhlbHAnOidWZXJzaW9uIGFuZCByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKLSAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX3ZlcnNpb24nLCAnaGlkZGVuJzogMSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOidMYXllcicsCi0gICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKLSAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiksCi0gICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLAotICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAncmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsCi0gICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsICdoaWRkZW4nOiAxLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyIGJyYW5jaCcsCi0gICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIEdpdCBicmFuY2ggb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKLSAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIpLAotICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiksCi0gICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsCi0gICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2gnLCAnaGlkZGVuJzogMSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOidMYXllciBjb21taXQnLAotICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBHaXQgY29tbWl0IG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCi0gICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0JywgJ2hpZGRlbic6IDEsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgXQotICAgICAgICB9Ci0KLSAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKLSAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQotICAgIHJldHVybiByZXNwb25zZQotCiBkZWYgYmZpbGUocmVxdWVzdCwgYnVpbGRfaWQsIHBhY2thZ2VfaWQpOgogICAgIHRlbXBsYXRlID0gJ2JmaWxlLmh0bWwnCiAgICAgZmlsZXMgPSBQYWNrYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIocGFja2FnZSA9IHBhY2thZ2VfaWQpCkBAIC0xOTA1LDcgKzEyOTIsNyBAQAogICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aCBpbXBvcnQgYXV0aGVudGljYXRlLCBsb2dpbgogICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5kZWNvcmF0b3JzIGltcG9ydCBsb2dpbl9yZXF1aXJlZAogCi0gICAgZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCcmFuY2gsIExheWVyU291cmNlLCBUb2FzdGVyU2V0dGluZywgUmVsZWFzZSwgTWFjaGluZSwgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeQorICAgIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UsIFRvYXN0ZXJTZXR0aW5nLCBSZWxlYXNlLCBNYWNoaW5lLCBMYXllclZlcnNpb25EZXBlbmRlbmN5CiAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0CiAKICAgICBpbXBvcnQgdHJhY2ViYWNrCkBAIC0xOTM4LDEwICsxMzI1LDEwIEBACiAgICAgICAgICAgICAgICAgaWYgcHR5cGUgPT0gImJ1aWxkIjoKICAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5X2ZpZWxkcy5hcHBlbmQoJ3Byb2plY3R2ZXJzaW9uJykKICAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBoYXZlIHZhbHVlcyBmb3IgYWxsIG1hbmRhdG9yeV9maWVsZHMKLSAgICAgICAgICAgICAgICBpZiByZWR1Y2UoIGxhbWJkYSB4LCB5OiB4IG9yIHksIG1hcChsYW1iZGEgeDogbGVuKHJlcXVlc3QuUE9TVC5nZXQoeCwgJycpKSA9PSAwLCBtYW5kYXRvcnlfZmllbGRzKSk6Ci0gICAgICAgICAgICAgICAgIyBzZXQgYWxlcnQgZm9yIG1pc3NpbmcgZmllbGRzCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZFBhcmFtZXRlckV4Y2VwdGlvbigiRmllbGRzIG1pc3Npbmc6ICIgKwotICAgICAgICAgICAgIiwgIi5qb2luKFt4IGZvciB4IGluIG1hbmRhdG9yeV9maWVsZHMgaWYgbGVuKHJlcXVlc3QuUE9TVC5nZXQoeCwgJycpKSA9PSAwIF0pKQorICAgICAgICAgICAgICAgIG1pc3NpbmcgPSBbZmllbGQgZm9yIGZpZWxkIGluIG1hbmRhdG9yeV9maWVsZHMgaWYgbGVuKHJlcXVlc3QuUE9TVC5nZXQoZmllbGQsICcnKSkgPT0gMF0KKyAgICAgICAgICAgICAgICBpZiBtaXNzaW5nOgorICAgICAgICAgICAgICAgICAgICAjIHNldCBhbGVydCBmb3IgbWlzc2luZyBmaWVsZHMKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmFkUGFyYW1ldGVyRXhjZXB0aW9uKCJGaWVsZHMgbWlzc2luZzogJXMiICUgIiwgIi5qb2luKG1pc3NpbmcpKQogCiAgICAgICAgICAgICAgICAgaWYgbm90IHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCk6CiAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBhdXRoZW50aWNhdGUodXNlcm5hbWUgPSByZXF1ZXN0LlBPU1QuZ2V0KCd1c2VybmFtZScsICdfYW5vbnVzZXInKSwgcGFzc3dvcmQgPSAnbm9wYXNzJykKQEAgLTE5NjQsNyArMTM1MSw4IEBACiAKICAgICAgICAgICAgIGV4Y2VwdCAoSW50ZWdyaXR5RXJyb3IsIEJhZFBhcmFtZXRlckV4Y2VwdGlvbikgYXMgZToKICAgICAgICAgICAgICAgICAjIGZpbGwgaW4gcGFnZSB3aXRoIHByZXZpb3VzbHkgc3VibWl0dGVkIHZhbHVlcwotICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgeDogY29udGV4dC5fX3NldGl0ZW1fXyh4LCByZXF1ZXN0LlBPU1QuZ2V0KHgsICItLSBtaXNzaW5nIikpLCBtYW5kYXRvcnlfZmllbGRzKQorICAgICAgICAgICAgICAgIGZvciBmaWVsZCBpbiBtYW5kYXRvcnlfZmllbGRzOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Ll9fc2V0aXRlbV9fKGZpZWxkLCByZXF1ZXN0LlBPU1QuZ2V0KGZpZWxkLCAiLS0gbWlzc2luZyIpKQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgSW50ZWdyaXR5RXJyb3IpIGFuZCAidXNlcm5hbWUiIGluIHN0cihlKToKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnYWxlcnQnXSA9ICJZb3VyIGNob3NlbiB1c2VybmFtZSBpcyBhbHJlYWR5IHVzZWQiCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTE5NzMsMTI4ICsxMzYxLDExIEBACiAKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgbWV0aG9kIGZvciB0aGlzIHBhZ2UiKQogCi0KLQogICAgICMgU2hvd3MgdGhlIGVkaXQgcHJvamVjdCBwYWdlCi0gICAgQF90ZW1wbGF0ZV9yZW5kZXJlcigncHJvamVjdC5odG1sJykKICAgICBkZWYgcHJvamVjdChyZXF1ZXN0LCBwaWQpOgotICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KGlkID0gcGlkKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHB1c2VyID0gVXNlci5vYmplY3RzLmdldChpZCA9IHByai51c2VyX2lkKQotICAgICAgICBleGNlcHQgVXNlci5Eb2VzTm90RXhpc3Q6Ci0gICAgICAgICAgICBwdXNlciA9IE5vbmUKLQotICAgICAgICAjIGV4ZWN1dGUgUE9TVCByZXF1ZXN0cwotICAgICAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiUE9TVCI6Ci0gICAgICAgICAgICAjIGFkZCBsYXllcnMKLSAgICAgICAgICAgIGlmICdsYXllckFkZCcgaW4gcmVxdWVzdC5QT1NUIGFuZCBsZW4ocmVxdWVzdC5QT1NUWydsYXllckFkZCddKSA+IDA6Ci0gICAgICAgICAgICAgICAgZm9yIGxjIGluIExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIocGtfX2luPVtpIGZvciBpIGluIHJlcXVlc3QuUE9TVFsnbGF5ZXJBZGQnXS5zcGxpdCgiLCIpIGlmIGxlbihpKSA+IDBdKToKLSAgICAgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gcHJqLCBsYXllcmNvbW1pdCA9IGxjKQotCi0gICAgICAgICAgICAjIHJlbW92ZSBsYXllcnMKLSAgICAgICAgICAgIGlmICdsYXllckRlbCcgaW4gcmVxdWVzdC5QT1NUIGFuZCBsZW4ocmVxdWVzdC5QT1NUWydsYXllckRlbCddKSA+IDA6Ci0gICAgICAgICAgICAgICAgZm9yIHQgaW4gcmVxdWVzdC5QT1NUWydsYXllckRlbCddLnN0cmlwKCkuc3BsaXQoIiAiKToKLSAgICAgICAgICAgICAgICAgICAgcHQgPSBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdCA9IHByaiwgbGF5ZXJjb21taXRfaWQgPSBpbnQodCkpLmRlbGV0ZSgpCi0KLSAgICAgICAgICAgIGlmICdwcm9qZWN0TmFtZScgaW4gcmVxdWVzdC5QT1NUOgotICAgICAgICAgICAgICAgIHByai5uYW1lID0gcmVxdWVzdC5QT1NUWydwcm9qZWN0TmFtZSddCi0gICAgICAgICAgICAgICAgcHJqLnNhdmUoKTsKLQotICAgICAgICAgICAgaWYgJ3Byb2plY3RWZXJzaW9uJyBpbiByZXF1ZXN0LlBPU1Q6Ci0gICAgICAgICAgICAgICAgIyBJZiB0aGUgcmVsZWFzZSBpcyB0aGUgY3VycmVudCBwcm9qZWN0IHRoZW4gcmV0dXJuIG5vdwotICAgICAgICAgICAgICAgIGlmIHByai5yZWxlYXNlLnBrID09IGludChyZXF1ZXN0LlBPU1QuZ2V0KCdwcm9qZWN0VmVyc2lvbicsLTEpKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9Ci0KLSAgICAgICAgICAgICAgICBwcmoucmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5nZXQocGsgPSByZXF1ZXN0LlBPU1RbJ3Byb2plY3RWZXJzaW9uJ10pCi0gICAgICAgICAgICAgICAgIyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgYml0YmFrZSB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgcHJqLmJpdGJha2VfdmVyc2lvbiA9IHByai5yZWxlYXNlLmJpdGJha2VfdmVyc2lvbgotICAgICAgICAgICAgICAgIHByai5zYXZlKCkKLSAgICAgICAgICAgICAgICAjIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBsYXllcnMKLSAgICAgICAgICAgICAgICBmb3IgcHJvamVjdCBpbiBwcmoucHJvamVjdGxheWVyX3NldC5hbGwoKToKLSAgICAgICAgICAgICAgICAgICAgIyBmaW5kIGFuZCBhZGQgYSBzaW1pbGFybHktbmFtZWQgbGF5ZXIgb24gdGhlIG5ldyBicmFuY2gKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbnMgPSBwcmouZ2V0X2FsbF9jb21wYXRpYmxlX2xheWVyX3ZlcnNpb25zKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb25zID0gbGF5ZXJfdmVyc2lvbnMuZmlsdGVyKGxheWVyX19uYW1lID0gcHJvamVjdC5sYXllcmNvbW1pdC5sYXllci5uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gcHJqLCBsYXllcmNvbW1pdCA9IGxheWVyX3ZlcnNpb25zLmZpcnN0KCkpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgcmlkIG9mIHRoZSBvbGQgZW50cnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QuZGVsZXRlKCkKLQotICAgICAgICAgICAgaWYgJ21hY2hpbmVOYW1lJyBpbiByZXF1ZXN0LlBPU1Q6Ci0gICAgICAgICAgICAgICAgbWFjaGluZXZhciA9IHByai5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikKLSAgICAgICAgICAgICAgICBtYWNoaW5ldmFyLnZhbHVlPXJlcXVlc3QuUE9TVFsnbWFjaGluZU5hbWUnXQotICAgICAgICAgICAgICAgIG1hY2hpbmV2YXIuc2F2ZSgpCi0KLQotICAgICAgICAjIHdlIHVzZSBpbXBsaWNpdCBrbm93bGVkZ2Ugb2YgdGhlIGN1cnJlbnQgdXNlcidzIHByb2plY3QgdG8gZmlsdGVyIGxheWVyIGluZm9ybWF0aW9uLCBlLmcuCi0gICAgICAgIHBpZCA9IHByai5pZAotCi0gICAgICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXIKLSAgICAgICAgZnJlcXRhcmdldHMgPSBbXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcmVxdGFyZ2V0cyArPSBtYXAobGFtYmRhIHg6IHgudGFyZ2V0LCByZWR1Y2UobGFtYmRhIHgsIHk6IHggKyB5LCAgIG1hcChsYW1iZGEgeDogbGlzdCh4LnRhcmdldF9zZXQuYWxsKCkpLCBCdWlsZC5vYmplY3RzLmZpbHRlcihwcm9qZWN0ID0gcHJqLCBvdXRjb21lX19sdCA9IEJ1aWxkLklOX1BST0dSRVNTKSkpKQotICAgICAgICAgICAgZnJlcXRhcmdldHMgKz0gbWFwKGxhbWJkYSB4OiB4LnRhcmdldCwgcmVkdWNlKGxhbWJkYSB4LCB5OiB4ICsgeSwgICBtYXAobGFtYmRhIHg6IGxpc3QoeC5icnRhcmdldF9zZXQuYWxsKCkpLCBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIocHJvamVjdCA9IHByaiwgc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRCkpKSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZnJlcXRhcmdldHMgPSBDb3VudGVyKGZyZXF0YXJnZXRzKQotICAgICAgICBmcmVxdGFyZ2V0cyA9IHNvcnRlZChmcmVxdGFyZ2V0cywga2V5ID0gbGFtYmRhIHg6IGZyZXF0YXJnZXRzW3hdLCByZXZlcnNlPVRydWUpCi0KLSAgICAgICAgY29udGV4dCA9IHsKLSAgICAgICAgICAgICJwcm9qZWN0IiA6IHByaiwKLSAgICAgICAgICAgICJsdnNfbm9zIiA6IExheWVyX1ZlcnNpb24ub2JqZWN0cy5hbGwoKS5jb3VudCgpLAotICAgICAgICAgICAgImNvbXBsZXRlZGJ1aWxkcyI6IEJ1aWxkLm9iamVjdHMuZXhjbHVkZShvdXRjb21lID0gQnVpbGQuSU5fUFJPR1JFU1MpLmZpbHRlcihwcm9qZWN0X2lkID0gcGlkKSwKLSAgICAgICAgICAgICJwcmoiIDogeyJuYW1lIjogcHJqLm5hbWUsIH0sCi0gICAgICAgICAgICAiYnVpbGRyZXF1ZXN0cyIgOiBwcmouYnVpbGRfc2V0LmZpbHRlcihvdXRjb21lPUJ1aWxkLklOX1BST0dSRVNTKSwKLSAgICAgICAgICAgICJidWlsZHMiIDogQnVpbGQuZ2V0X3JlY2VudChwcmopLAotICAgICAgICAgICAgImxheWVycyIgOiAgbWFwKGxhbWJkYSB4OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiB4LmxheWVyY29tbWl0LnBrLAotICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyaWQiOiB4LnBrLAotICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogeC5sYXllcmNvbW1pdC5sYXllci5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiB4LmxheWVyY29tbWl0LmxheWVyLnZjc191cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAidmNzX3JlZmVyZW5jZSIgOiB4LmxheWVyY29tbWl0LmdldF92Y3NfcmVmZXJlbmNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAidXJsIjogeC5sYXllcmNvbW1pdC5sYXllci5sYXllcl9pbmRleF91cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAibGF5ZXJkZXRhaWx1cmwiOiB4LmxheWVyY29tbWl0LmdldF9kZXRhaWxzcGFnZV91cmwocHJqLnBrKSwKLSAgICAgICAgICAgICAgICAjIFRoaXMgYnJhbmNoIG5hbWUgaXMgYWN0dWFsbHkgdGhlIHJlbGVhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICJicmFuY2giIDogeyAibmFtZSIgOiB4LmxheWVyY29tbWl0LmdldF92Y3NfcmVmZXJlbmNlKCksICJsYXllcnNvdXJjZSIgOiB4LmxheWVyY29tbWl0LnVwX2JyYW5jaC5sYXllcl9zb3VyY2UubmFtZSBpZiB4LmxheWVyY29tbWl0LnVwX2JyYW5jaCAhPSBOb25lIGVsc2UgTm9uZX19LAotICAgICAgICAgICAgICAgICAgICBwcmoucHJvamVjdGxheWVyX3NldC5hbGwoKS5vcmRlcl9ieSgiaWQiKSksCi0gICAgICAgICAgICAidGFyZ2V0cyIgOiBtYXAobGFtYmRhIHg6IHsidGFyZ2V0IiA6IHgudGFyZ2V0LCAidGFzayIgOiB4LnRhc2ssICJwayI6IHgucGt9LCBwcmoucHJvamVjdHRhcmdldF9zZXQuYWxsKCkpLAotICAgICAgICAgICAgInZhcmlhYmxlcyI6IG1hcChsYW1iZGEgeDogKHgubmFtZSwgeC52YWx1ZSksIHByai5wcm9qZWN0dmFyaWFibGVfc2V0LmFsbCgpKSwKLSAgICAgICAgICAgICJmcmVxdGFyZ2V0cyI6IGZyZXF0YXJnZXRzWzo1XSwKLSAgICAgICAgICAgICJyZWxlYXNlcyI6IG1hcChsYW1iZGEgeDogeyJpZCI6IHgucGssICJuYW1lIjogeC5uYW1lLCAiZGVzY3JpcHRpb24iOnguZGVzY3JpcHRpb259LCBSZWxlYXNlLm9iamVjdHMuYWxsKCkpLAotICAgICAgICAgICAgInByb2plY3RfaHRtbCI6IDEsCi0gICAgICAgICAgICAicmVjaXBlc1R5cGVBaGVhZFVybCI6IHJldmVyc2UoJ3hocl9yZWNpcGVzdHlwZWFoZWFkJywgYXJncz0ocHJqLnBrLCkpLAotICAgICAgICAgICAgInByb2plY3RCdWlsZHNVcmwiOiByZXZlcnNlKCdwcm9qZWN0YnVpbGRzJywgYXJncz0ocHJqLnBrLCkpLAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgcHJqLnJlbGVhc2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0WydyZWxlYXNlJ10gPSB7ICJpZCI6IHByai5yZWxlYXNlLnBrLCAibmFtZSI6IHByai5yZWxlYXNlLm5hbWUsICJkZXNjcmlwdGlvbiI6IHByai5yZWxlYXNlLmRlc2NyaXB0aW9ufQotCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29udGV4dFsibWFjaGluZSJdID0geyJuYW1lIjogcHJqLnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KG5hbWU9Ik1BQ0hJTkUiKS52YWx1ZX0KLSAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6Ci0gICAgICAgICAgICBjb250ZXh0WyJtYWNoaW5lIl0gPSBOb25lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRleHRbImRpc3RybyJdID0gcHJqLnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KG5hbWU9IkRJU1RSTyIpLnZhbHVlCi0gICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgotICAgICAgICAgICAgY29udGV4dFsiZGlzdHJvIl0gPSAiLS0gbm90IHNldCB5ZXQiCi0KLSAgICAgICAgcmV0dXJuIGNvbnRleHQKLQotICAgIGRlZiB4aHJfcmVzcG9uc2UoZnVuKToKLSAgICAgICAgIiIiCi0gICAgICAgIERlY29yYXRvciBmb3IgUkVTVCBtZXRob2RzLgotICAgICAgICBjYWxscyBqc29uZmlsdGVyIG9uIHRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGFuZCByZXR1cm5zIHJlc3VsdAotICAgICAgICBhcyBIdHRwUmVzcG9uc2Ugb2JqZWN0IG9mIGNvbnRlbnRfdHlwZSBhcHBsaWNhdGlvbi9qc29uCi0gICAgICAgICIiIgotICAgICAgICBAd3JhcHMoZnVuKQotICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2RzKToKLSAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcihmdW4oKmFyZ3MsICoqa3dkcykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iKQotICAgICAgICByZXR1cm4gd3JhcHBlcgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1waWQpCisgICAgICAgIGNvbnRleHQgPSB7InByb2plY3QiOiBwcm9qZWN0fQorICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJwcm9qZWN0Lmh0bWwiLCBjb250ZXh0KQogCiAgICAgZGVmIGpzdW5pdHRlc3RzKHJlcXVlc3QpOgogICAgICAgICAiIiIgUHJvdmlkZXMgYSBwYWdlIGZvciB0aGUganMgdW5pdCB0ZXN0cyAiIiIKQEAgLTIxNTQsOCArMTQyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHZhbC5hcHBlbmQocHJvamVjdCkKIAogICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlKHsiZXJyb3IiOiJvayIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3dzIiA6IG1hcCggX2x2X3RvX2RpY3QocHJqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgeDogeC5sYXllcmNvbW1pdCwgcmV0dmFsICkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3dzIjogW19sdl90b19kaWN0KHByaikgZm9yIHkgaW4gW3gubGF5ZXJjb21taXQgZm9yIHggaW4gcmV0dmFsXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKQEAgLTIxNjQsMTEgKzE0MzQsMTYgQEAKICAgICBkZWYgeGhyX2NvbmZpZ3ZhcmVkaXQocmVxdWVzdCwgcGlkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChpZCA9IHBpZCkKKyAgICAgICAgICAgICMgVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHVzZXIgY2FuIGFkZCB2YXJpYWJsZXMgd2hpY2ggaG9sZCB2YWx1ZXMKKyAgICAgICAgICAgICMgbGlrZSBodHRwOi8vLCBmaWxlOi8vLyBldGMuIEluIHN1Y2ggY2FzZSBhIHNpbXBsZSBzcGxpdCgiOiIpCisgICAgICAgICAgICAjIHdvdWxkIGZhaWwuIE9uZSBleGFtcGxlIGlzIFNTVEFURV9NSVJST1JTIHZhcmlhYmxlLiBTbyB3ZSB1c2UKKyAgICAgICAgICAgICMgbWF4X3NwbGl0IHZhciB0byBoYW5kbGUgdGhlbS4KKyAgICAgICAgICAgIG1heF9zcGxpdCA9IDEKICAgICAgICAgICAgICMgYWRkIGNvbmYgdmFyaWFibGVzCiAgICAgICAgICAgICBpZiAnY29uZmlndmFyQWRkJyBpbiByZXF1ZXN0LlBPU1Q6CiAgICAgICAgICAgICAgICAgdD1yZXF1ZXN0LlBPU1RbJ2NvbmZpZ3ZhckFkZCddLnN0cmlwKCkKICAgICAgICAgICAgICAgICBpZiAiOiIgaW4gdDoKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHZhbHVlID0gdC5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB2YWx1ZSA9IHQuc3BsaXQoIjoiLCBtYXhfc3BsaXQpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB0CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiIKQEAgLTIxNzgsNyArMTQ1Myw3IEBACiAgICAgICAgICAgICBpZiAnY29uZmlndmFyQ2hhbmdlJyBpbiByZXF1ZXN0LlBPU1Q6CiAgICAgICAgICAgICAgICAgdD1yZXF1ZXN0LlBPU1RbJ2NvbmZpZ3ZhckNoYW5nZSddLnN0cmlwKCkKICAgICAgICAgICAgICAgICBpZiAiOiIgaW4gdDoKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHZhbHVlID0gdC5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB2YWx1ZSA9IHQuc3BsaXQoIjoiLCBtYXhfc3BsaXQpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB0CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiIKQEAgLTIyMDEsNyArMTQ3Niw3IEBACiAKICAgICAgICAgICAgIHJldHVybl9kYXRhID0gewogICAgICAgICAgICAgICAgICJlcnJvciI6ICJvayIsCi0gICAgICAgICAgICAgICAgJ2NvbmZpZ3ZhcnMnICAgOiBtYXAobGFtYmRhIHg6ICh4Lm5hbWUsIHgudmFsdWUsIHgucGspLCBjb25maWd2YXJzX3F1ZXJ5KSwKKyAgICAgICAgICAgICAgICAnY29uZmlndmFycyc6IFsoeC5uYW1lLCB4LnZhbHVlLCB4LnBrKSBmb3IgeCBpbiBjb25maWd2YXJzX3F1ZXJ5XQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybl9kYXRhWydkaXN0cm8nXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIkRJU1RSTyIpLnZhbHVlLApAQCAtMjIzNSwxMCArMTUxMCwxMCBAQAogCiAKICAgICBkZWYgeGhyX2ltcG9ydGxheWVyKHJlcXVlc3QpOgotICAgICAgICBpZiAobm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCd2Y3NfdXJsJykgb3IKLSAgICAgICAgICAgIG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgnbmFtZScpIG9yCi0gICAgICAgICAgICBub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoJ2dpdF9yZWYnKSBvcgotICAgICAgICAgICAgbm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCdwcm9qZWN0X2lkJykpOgorICAgICAgICBpZiAoJ3Zjc191cmwnIG5vdCBpbiByZXF1ZXN0LlBPU1Qgb3IKKyAgICAgICAgICAgICduYW1lJyBub3QgaW4gcmVxdWVzdC5QT1NUIG9yCisgICAgICAgICAgICAnZ2l0X3JlZicgbm90IGluIHJlcXVlc3QuUE9TVCBvcgorICAgICAgICAgICAgJ3Byb2plY3RfaWQnIG5vdCBpbiByZXF1ZXN0LlBPU1QpOgogICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogIk1pc3NpbmcgcGFyYW1ldGVyczsgcmVxdWlyZXMgdmNzX3VybCwgbmFtZSwgZ2l0X3JlZiBhbmQgcHJvamVjdF9pZCJ9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQogCiAgICAgICAgIGxheWVyc19hZGRlZCA9IFtdOwpAQCAtMjI1MywxOCArMTUyOCwxMiBAQAogICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPXJlcXVlc3QuUE9TVFsncHJvamVjdF9pZCddKQogCiAgICAgICAgICMgU3RyaXAgdHJhaWxpbmcvbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHZhbHVlcwotICAgICAgICAjIHB1dCBpbnRvIGEgbmV3IGRpY3QgYmVjYXVzZSBQT1NUIG9uZSBpcyBpbW11dGFibGUKKyAgICAgICAgIyBwdXQgaW50byBhIG5ldyBkaWN0IGJlY2F1c2UgUE9TVCBvbmUgaXMgaW1tdXRhYmxlLgogICAgICAgICBwb3N0X2RhdGEgPSBkaWN0KCkKLSAgICAgICAgZm9yIGtleSx2YWwgaW4gcmVxdWVzdC5QT1NULml0ZXJpdGVtcygpOgorICAgICAgICBmb3Iga2V5LHZhbCBpbiByZXF1ZXN0LlBPU1QuaXRlbXMoKToKICAgICAgICAgICBwb3N0X2RhdGFba2V5XSA9IHZhbC5zdHJpcCgpCiAKIAotICAgICAgICAjIFdlIG5lZWQgdG8ga25vdyB3aGF0IHJlbGVhc2UgdGhlIGN1cnJlbnQgcHJvamVjdCBpcyBzbyB0aGF0IHdlCi0gICAgICAgICMgY2FuIHNldCB0aGUgaW1wb3J0ZWQgbGF5ZXIncyB1cF9icmFuY2hfaWQKLSAgICAgICAgcHJqX2JyYW5jaF9uYW1lID0gUmVsZWFzZS5vYmplY3RzLmdldChwaz1wcmoucmVsZWFzZV9pZCkuYnJhbmNoX25hbWUKLSAgICAgICAgdXBfYnJhbmNoLCBicmFuY2hfY3JlYXRlZCA9IEJyYW5jaC5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1wcmpfYnJhbmNoX25hbWUsIGxheWVyX3NvdXJjZV9pZD1MYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEKQotCi0gICAgICAgIGxheWVyX3NvdXJjZSA9IExheWVyU291cmNlLm9iamVjdHMuZ2V0KHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGF5ZXIsIGxheWVyX2NyZWF0ZWQgPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1wb3N0X2RhdGFbJ25hbWUnXSkKICAgICAgICAgZXhjZXB0IE11bHRpcGxlT2JqZWN0c1JldHVybmVkOgpAQCAtMjI3Miw4ICsxNTQxLDggQEAKIAogICAgICAgICBpZiBsYXllcjoKICAgICAgICAgICAgIGlmIGxheWVyX2NyZWF0ZWQ6Ci0gICAgICAgICAgICAgICAgbGF5ZXIubGF5ZXJfc291cmNlID0gbGF5ZXJfc291cmNlCi0gICAgICAgICAgICAgICAgbGF5ZXIudmNzX3VybCA9IHBvc3RfZGF0YVsndmNzX3VybCddCisgICAgICAgICAgICAgICAgbGF5ZXIudmNzX3VybCA9IHBvc3RfZGF0YS5nZXQoJ3Zjc191cmwnKQorICAgICAgICAgICAgICAgIGxheWVyLmxvY2FsX3NvdXJjZV9kaXIgPSBwb3N0X2RhdGEuZ2V0KCdsb2NhbF9zb3VyY2VfZGlyJykKICAgICAgICAgICAgICAgICBsYXllci51cF9kYXRlID0gdGltZXpvbmUubm93KCkKICAgICAgICAgICAgICAgICBsYXllci5zYXZlKCkKICAgICAgICAgICAgIGVsc2U6CkBAIC0yMjgzLDE4ICsxNTUyLDMwIEBACiAgICAgICAgICAgICAgICAgaWYgbGF5ZXIudmNzX3VybCAhPSBwb3N0X2RhdGFbJ3Zjc191cmwnXToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiaGludC1sYXllci1leGlzdHMtd2l0aC1kaWZmZXJlbnQtdXJsIiAsICJjdXJyZW50X3VybCIgOiBsYXllci52Y3NfdXJsLCAiY3VycmVudF9pZCI6IGxheWVyLmlkIH0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCiAKLQotICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbiwgdmVyc2lvbl9jcmVhdGVkID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlPWxheWVyX3NvdXJjZSwgbGF5ZXI9bGF5ZXIsIHByb2plY3Q9cHJqLCB1cF9icmFuY2hfaWQ9dXBfYnJhbmNoLmlkLGJyYW5jaD1wb3N0X2RhdGFbJ2dpdF9yZWYnXSwgIGNvbW1pdD1wb3N0X2RhdGFbJ2dpdF9yZWYnXSwgZGlycGF0aD1wb3N0X2RhdGFbJ2Rpcl9wYXRoJ10pCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLCB2ZXJzaW9uX2NyZWF0ZWQgPSBcCisgICAgICAgICAgICAgICAgTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcl9zb3VyY2U9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyPWxheWVyLCBwcm9qZWN0PXByaiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2U9cHJqLnJlbGVhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2g9cG9zdF9kYXRhWydnaXRfcmVmJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQ9cG9zdF9kYXRhWydnaXRfcmVmJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJwYXRoPXBvc3RfZGF0YVsnZGlyX3BhdGgnXSkKIAogICAgICAgICAgICAgaWYgbGF5ZXJfdmVyc2lvbjoKICAgICAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbl9jcmVhdGVkOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJoaW50LWxheWVyLXZlcnNpb24tZXhpc3RzIiwgImV4aXN0aW5nX2xheWVyX3ZlcnNpb24iOiBsYXllcl92ZXJzaW9uLmlkIH0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGludC1sYXllci12ZXJzaW9uLWV4aXN0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4aXN0aW5nX2xheWVyX3ZlcnNpb24iOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uaWQgfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllcl9zb3VyY2UgPSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVECiAKICAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnVwX2RhdGUgPSB0aW1lem9uZS5ub3coKQogICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uc2F2ZSgpCiAKICAgICAgICAgICAgICAgICAjIEFkZCB0aGUgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBmb3IgdGhpcyBuZXcgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiAocG9zdF9kYXRhLmhhc19rZXkoImxheWVyX2RlcHMiKSBhbmQKKyAgICAgICAgICAgICAgICBpZiAoJ2xheWVyX2RlcHMnIGluIHBvc3RfZGF0YSBhbmQKICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9jcmVhdGVkIGFuZAogICAgICAgICAgICAgICAgICAgICBsZW4ocG9zdF9kYXRhWyJsYXllcl9kZXBzIl0pID4gMCk6CiAgICAgICAgICAgICAgICAgICAgIGZvciBsYXllcl9kZXBfaWQgaW4gcG9zdF9kYXRhWyJsYXllcl9kZXBzIl0uc3BsaXQoIiwiKToKQEAgLTIzNDMsMjMxICsxNjI0LDYgQEAKIAogICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoanNvbl9yZXNwb25zZSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKIAotICAgIGRlZiB4aHJfdXBkYXRlbGF5ZXIocmVxdWVzdCk6Ci0KLSAgICAgICAgZGVmIGVycm9yX3Jlc3BvbnNlKGVycm9yKToKLSAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogZXJyb3J9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQotCi0gICAgICAgIGlmIG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgibGF5ZXJfdmVyc2lvbl9pZCIpOgotICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJQbGVhc2Ugc3BlY2lmeSBhIGxheWVyIHZlcnNpb24gaWQiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsYXllcl92ZXJzaW9uX2lkID0gcmVxdWVzdC5QT1NUWyJsYXllcl92ZXJzaW9uX2lkIl0KLSAgICAgICAgICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KGlkPWxheWVyX3ZlcnNpb25faWQpCi0gICAgICAgIGV4Y2VwdCBMYXllcl9WZXJzaW9uLkRvZXNOb3RFeGlzdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiQ2Fubm90IGZpbmQgbGF5ZXIgdG8gdXBkYXRlIikKLQotCi0gICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJ2Y3NfdXJsIik6Ci0gICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLnZjc191cmwgPSByZXF1ZXN0LlBPU1RbInZjc191cmwiXQotICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgiZGlycGF0aCIpOgotICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5kaXJwYXRoID0gcmVxdWVzdC5QT1NUWyJkaXJwYXRoIl0KLSAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImNvbW1pdCIpOgotICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5jb21taXQgPSByZXF1ZXN0LlBPU1RbImNvbW1pdCJdCi0gICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJ1cF9icmFuY2giKToKLSAgICAgICAgICAgIGxheWVyX3ZlcnNpb24udXBfYnJhbmNoX2lkID0gaW50KHJlcXVlc3QuUE9TVFsidXBfYnJhbmNoIl0pCi0KLSAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImFkZF9kZXAiKToKLSAgICAgICAgICAgIGx2ZCA9IExheWVyVmVyc2lvbkRlcGVuZGVuY3kobGF5ZXJfdmVyc2lvbj1sYXllcl92ZXJzaW9uLCBkZXBlbmRzX29uX2lkPXJlcXVlc3QuUE9TVFsiYWRkX2RlcCJdKQotICAgICAgICAgICAgbHZkLnNhdmUoKQotCi0gICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJybV9kZXAiKToKLSAgICAgICAgICAgIHJtX2RlcCA9IExheWVyVmVyc2lvbkRlcGVuZGVuY3kub2JqZWN0cy5nZXQobGF5ZXJfdmVyc2lvbj1sYXllcl92ZXJzaW9uLCBkZXBlbmRzX29uX2lkPXJlcXVlc3QuUE9TVFsicm1fZGVwIl0pCi0gICAgICAgICAgICBybV9kZXAuZGVsZXRlKCkKLQotICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgic3VtbWFyeSIpOgotICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci5zdW1tYXJ5ID0gcmVxdWVzdC5QT1NUWyJzdW1tYXJ5Il0KLSAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImRlc2NyaXB0aW9uIik6Ci0gICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9uID0gcmVxdWVzdC5QT1NUWyJkZXNjcmlwdGlvbiJdCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci5zYXZlKCkKLSAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uc2F2ZSgpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiQ291bGQgbm90IHVwZGF0ZSBsYXllciB2ZXJzaW9uIGVudHJ5OiAlcyIgJSBlKQotCi0gICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogIm9rIix9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQotCi0gICAgQHhocl9yZXNwb25zZQotICAgIGRlZiB4aHJfY3VzdG9tcmVjaXBlKHJlcXVlc3QpOgotICAgICAgICAiIiIKLSAgICAgICAgQ3VzdG9tIGltYWdlIHJlY2lwZSBSRVNUIEFQSQotCi0gICAgICAgIEVudHJ5IHBvaW50OiAveGhyX2N1c3RvbXJlY2lwZS8KLSAgICAgICAgTWV0aG9kOiBQT1NUCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIG5hbWU6IG5hbWUgb2YgY3VzdG9tIHJlY2lwZSB0byBjcmVhdGUKLSAgICAgICAgICAgIHByb2plY3Q6IHRhcmdldCBwcm9qZWN0IGlkIG9mIG9ybS5tb2RlbHMuUHJvamVjdAotICAgICAgICAgICAgYmFzZTogYmFzZSByZWNpcGUgaWQgb2Ygb3JtLm1vZGVscy5SZWNpcGUKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgeyJlcnJvciI6ICJvayIsCi0gICAgICAgICAgICAgInVybCI6IDx1cmwgb2YgdGhlIGNyZWF0ZWQgcmVjaXBlPn0KLSAgICAgICAgICAgIG9yCi0gICAgICAgICAgICB7ImVycm9yIjogPGVycm9yIG1lc3NhZ2U+fQotICAgICAgICAiIiIKLSAgICAgICAgIyBjaGVjayBpZiByZXF1ZXN0IGhhcyBhbGwgcmVxdWlyZWQgcGFyYW1ldGVycwotICAgICAgICBmb3IgcGFyYW0gaW4gKCduYW1lJywgJ3Byb2plY3QnLCAnYmFzZScpOgotICAgICAgICAgICAgaWYgcGFyYW0gbm90IGluIHJlcXVlc3QuUE9TVDoKLSAgICAgICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJNaXNzaW5nIHBhcmFtZXRlciAnJXMnIiAlIHBhcmFtfQotCi0gICAgICAgICMgZ2V0IHByb2plY3QgYW5kIGJhc2VyZWNpcGUgb2JqZWN0cwotICAgICAgICBwYXJhbXMgPSB7fQotICAgICAgICBmb3IgbmFtZSwgbW9kZWwgaW4gWygicHJvamVjdCIsIFByb2plY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYmFzZSIsIFJlY2lwZSldOgotICAgICAgICAgICAgdmFsdWUgPSByZXF1ZXN0LlBPU1RbbmFtZV0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXJhbXNbbmFtZV0gPSBtb2RlbC5vYmplY3RzLmdldChpZD12YWx1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBtb2RlbC5Eb2VzTm90RXhpc3Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsiZXJyb3IiOiAiSW52YWxpZCAlcyBpZCAlcyIgJSAobmFtZSwgdmFsdWUpfQotCi0gICAgICAgICMgY3JlYXRlIGN1c3RvbSByZWNpcGUKLSAgICAgICAgdHJ5OgotCi0gICAgICAgICAgICAjIE9ubHkgYWxsb3dlZCBjaGFycyBpbiBuYW1lIGFyZSBhLXosIDAtOSBhbmQgLQotICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHInW15hLXp8MC05fC1dJywgcmVxdWVzdC5QT1NUWyJuYW1lIl0pOgotICAgICAgICAgICAgICAgIHJldHVybiB7ImVycm9yIjogImludmFsaWQtbmFtZSJ9Ci0KLSAgICAgICAgICAgIGN1c3RvbV9pbWFnZXMgPSBDdXN0b21JbWFnZVJlY2lwZS5vYmplY3RzLmFsbCgpCi0KLSAgICAgICAgICAgICMgQXJlIHRoZXJlIGFueSByZWNpcGVzIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgaW4gb3VyIHByb2plY3Q/Ci0gICAgICAgICAgICBleGlzdGluZ19pbWFnZV9yZWNpcGVzX2luX3Byb2plY3QgPSBjdXN0b21faW1hZ2VzLmZpbHRlcigKLSAgICAgICAgICAgICAgICBuYW1lPXJlcXVlc3QuUE9TVFsibmFtZSJdLCBwcm9qZWN0PXBhcmFtc1sicHJvamVjdCJdKQotCi0gICAgICAgICAgICBpZiBleGlzdGluZ19pbWFnZV9yZWNpcGVzX2luX3Byb2plY3QuY291bnQoKSA+IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsiZXJyb3IiOiAiaW1hZ2UtYWxyZWFkeS1leGlzdHMifQotCi0gICAgICAgICAgICAjIEFyZSB0aGVyZSBhbnkgcmVjaXBlcyB3aXRoIHRoaXMgbmFtZSB3aGljaCBhcmVuJ3QgY3VzdG9tCi0gICAgICAgICAgICAjIGltYWdlIHJlY2lwZXM/Ci0gICAgICAgICAgICBjdXN0b21faW1hZ2VfaWRzID0gY3VzdG9tX2ltYWdlcy52YWx1ZXNfbGlzdCgnaWQnLCBmbGF0PVRydWUpCi0gICAgICAgICAgICBleGlzdGluZ19ub25faW1hZ2VfcmVjaXBlcyA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcigKLSAgICAgICAgICAgICAgICBRKG5hbWU9cmVxdWVzdC5QT1NUWyJuYW1lIl0pICYgflEocGtfX2luPWN1c3RvbV9pbWFnZV9pZHMpCi0gICAgICAgICAgICApCi0KLSAgICAgICAgICAgIGlmIGV4aXN0aW5nX25vbl9pbWFnZV9yZWNpcGVzLmNvdW50KCkgPiAwOgotICAgICAgICAgICAgICAgIHJldHVybiB7ImVycm9yIjogInJlY2lwZS1hbHJlYWR5LWV4aXN0cyJ9Ci0KLSAgICAgICAgICAgICMgY3JlYXRlIGxheWVyICdDdXN0b20gbGF5ZXInIGFuZCB2ZXJpb24gaWYgbmVlZGVkCi0gICAgICAgICAgICBsYXllciA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSgKLSAgICAgICAgICAgICAgICBuYW1lPUN1c3RvbUltYWdlUmVjaXBlLkxBWUVSX05BTUUsCi0gICAgICAgICAgICAgICAgc3VtbWFyeT0iTGF5ZXIgZm9yIGN1c3RvbSByZWNpcGVzIiwKLSAgICAgICAgICAgICAgICB2Y3NfdXJsPSJmaWxlOi8vL3RvYXN0ZXJfY3JlYXRlZF9sYXllciIpWzBdCi0KLSAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSBhIGxheWVyIHZlcnNpb24gYWxyZWFkeQotICAgICAgICAgICAgIyBXZSBkb24ndCB1c2UgZ2V0X29yX2NyZWF0ZSBoZXJlIGJlY2F1c2UgdGhlIGRpcnBhdGggd2lsbCBjaGFuZ2UKLSAgICAgICAgICAgICMgYW5kIGlzIGEgcmVxdWlyZWQgZmllbGQKLSAgICAgICAgICAgIGx2ZXIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKFEocHJvamVjdD1wYXJhbXNbJ3Byb2plY3QnXSkgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShsYXllcj1sYXllcikgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShidWlsZD1Ob25lKSkubGFzdCgpCi0gICAgICAgICAgICBpZiBsdmVyID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgbHZlciwgY3JlYXRlZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBwcm9qZWN0PXBhcmFtc1sncHJvamVjdCddLAotICAgICAgICAgICAgICAgICAgICBsYXllcj1sYXllciwKLSAgICAgICAgICAgICAgICAgICAgZGlycGF0aD0idG9hc3Rlcl9jcmVhdGVkX2xheWVyIikKLQotICAgICAgICAgICAgIyBBZGQgYSBkZXBlbmRlbmN5IG9uIG91ciBsYXllciB0byB0aGUgYmFzZSByZWNpcGUncyBsYXllcgotICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmdldF9vcl9jcmVhdGUoCi0gICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbj1sdmVyLAotICAgICAgICAgICAgICAgIGRlcGVuZHNfb249cGFyYW1zWyJiYXNlIl0ubGF5ZXJfdmVyc2lvbikKLQotICAgICAgICAgICAgIyBBZGQgaXQgdG8gb3VyIGN1cnJlbnQgcHJvamVjdCBpZiBuZWVkZWQKLSAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdD1wYXJhbXNbJ3Byb2plY3QnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb21taXQ9bHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw9RmFsc2UpCi0KLSAgICAgICAgICAgICMgQ3JlYXRlIHRoZSBhY3R1YWwgcmVjaXBlCi0gICAgICAgICAgICByZWNpcGUsIGNyZWF0ZWQgPSBDdXN0b21JbWFnZVJlY2lwZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoCi0gICAgICAgICAgICAgICAgbmFtZT1yZXF1ZXN0LlBPU1RbIm5hbWUiXSwKLSAgICAgICAgICAgICAgICBiYXNlX3JlY2lwZT1wYXJhbXNbImJhc2UiXSwKLSAgICAgICAgICAgICAgICBwcm9qZWN0PXBhcmFtc1sicHJvamVjdCJdLAotICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb249bHZlciwKLSAgICAgICAgICAgICAgICBpc19pbWFnZT1UcnVlKQotCi0gICAgICAgICAgICAjIElmIHdlIGNyZWF0ZWQgdGhlIG9iamVjdCB0aGVuIHNldHVwIHRoZXNlIGZpZWxkcy4gVGhleSBtYXkgZ2V0Ci0gICAgICAgICAgICAjIG92ZXJ3cml0dGVuIGxhdGVyIG9uIGFuZCBjYXVzZSB0aGUgZ2V0X29yX2NyZWF0ZSB0byBjcmVhdGUgYQotICAgICAgICAgICAgIyBkdXBsaWNhdGUgaWYgdGhleSd2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgaWYgY3JlYXRlZDoKLSAgICAgICAgICAgICAgICByZWNpcGUuZmlsZV9wYXRoID0gcmVxdWVzdC5QT1NUWyJuYW1lIl0KLSAgICAgICAgICAgICAgICByZWNpcGUubGljZW5zZSA9ICJNSVQiCi0gICAgICAgICAgICAgICAgcmVjaXBlLnZlcnNpb24gPSAiMC4xIgotICAgICAgICAgICAgICAgIHJlY2lwZS5zYXZlKCkKLQotICAgICAgICBleGNlcHQgRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgcmV0dXJuIHsiZXJyb3IiOiAiQ2FuJ3QgY3JlYXRlIGN1c3RvbSByZWNpcGU6ICVzIiAlIGVycn0KLQotICAgICAgICAjIEZpbmQgdGhlIHBhY2thZ2UgbGlzdCBmcm9tIHRoZSBsYXN0IGJ1aWxkIG9mIHRoaXMgcmVjaXBlL3RhcmdldAotICAgICAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoUShidWlsZF9fb3V0Y29tZT1CdWlsZC5TVUNDRUVERUQpICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoYnVpbGRfX3Byb2plY3Q9cGFyYW1zWydwcm9qZWN0J10pICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChRKHRhcmdldD1wYXJhbXNbJ2Jhc2UnXS5uYW1lKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSh0YXJnZXQ9cmVjaXBlLm5hbWUpKSkubGFzdCgpCi0gICAgICAgIGlmIHRhcmdldDoKLSAgICAgICAgICAgICMgQ29weSBpbiBldmVyeSBwYWNrYWdlCi0gICAgICAgICAgICAjIFdlIGRvbid0IHdhbnQgdGhlc2UgcGFja2FnZXMgdG8gYmUgbGlua2VkIHRvIGFueXRoaW5nIGJlY2F1c2UKLSAgICAgICAgICAgICMgdGhhdCB1bmRlcmx5aW5nIGRhdGEgbWF5IGNoYW5nZSBlLmcuIGRlbGV0ZSBhIGJ1aWxkCi0gICAgICAgICAgICBmb3IgdHBhY2thZ2UgaW4gdGFyZ2V0LnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZV9zZXQuYWxsKCk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBidWlsdF9wYWNrYWdlID0gdHBhY2thZ2UucGFja2FnZQotICAgICAgICAgICAgICAgICAgICAjIFRoZSBwYWNrYWdlIGhhZCBubyByZWNpcGUgaW5mb3JtYXRpb24gc28gaXMgYSBnaG9zdAotICAgICAgICAgICAgICAgICAgICAjIHBhY2thZ2Ugc2tpcCBpdAotICAgICAgICAgICAgICAgICAgICBpZiBidWlsdF9wYWNrYWdlLnJlY2lwZSA9PSBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BhY2thZ2UgPSBDdXN0b21JbWFnZVBhY2thZ2Uub2JqZWN0cy5nZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWJ1aWx0X3BhY2thZ2UubmFtZSkKLQotICAgICAgICAgICAgICAgICAgICByZWNpcGUuaW5jbHVkZXNfc2V0LmFkZChjb25maWdfcGFja2FnZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJFcnJvciBhZGRpbmcgcGFja2FnZSAlcyAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHBhY2thZ2UucGFja2FnZS5uYW1lLCBlKSkKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHJldHVybiB7ImVycm9yIjogIm9rIiwKLSAgICAgICAgICAgICAgICAicGFja2FnZXMiIDogcmVjaXBlLmdldF9hbGxfcGFja2FnZXMoKS5jb3VudCgpLAotICAgICAgICAgICAgICAgICJ1cmwiOiByZXZlcnNlKCdjdXN0b21yZWNpcGUnLCBhcmdzPShwYXJhbXNbJ3Byb2plY3QnXS5waywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmlkKSl9Ci0KLSAgICBAeGhyX3Jlc3BvbnNlCi0gICAgZGVmIHhocl9jdXN0b21yZWNpcGVfaWQocmVxdWVzdCwgcmVjaXBlX2lkKToKLSAgICAgICAgIiIiCi0gICAgICAgIFNldCBvZiBSZVNUIEFQSSBwcm9jZXNzb3JzIHdvcmtpbmcgd2l0aCByZWNpcGUgaWQuCi0KLSAgICAgICAgRW50cnkgcG9pbnQ6IC94aHJfY3VzdG9tcmVjaXBlLzxyZWNpcGVfaWQ+Ci0KLSAgICAgICAgTWV0aG9kczoKLSAgICAgICAgICAgIEdFVCAtIEdldCBkZXRhaWxzIG9mIGN1c3RvbSBpbWFnZSByZWNpcGUKLSAgICAgICAgICAgIERFTEVURSAtIERlbGV0ZSBjdXN0b20gaW1hZ2UgcmVjaXBlCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEdFVDoKLSAgICAgICAgICAgIHsiZXJyb3IiOiAib2siLAotICAgICAgICAgICAgICJpbmZvIjogZGljdGlvbmFyeSBvZiBmaWVsZCBuYW1lIC0+IHZhbHVlIHBhaXJzCi0gICAgICAgICAgICAgICAgICAgICBvZiB0aGUgQ3VzdG9tSW1hZ2VSZWNpcGUgbW9kZWx9Ci0gICAgICAgICAgICBERUxFVEU6Ci0gICAgICAgICAgICB7ImVycm9yIjogIm9rIn0KLSAgICAgICAgICAgIG9yCi0gICAgICAgICAgICB7ImVycm9yIjogPGVycm9yIG1lc3NhZ2U+fQotICAgICAgICAiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY3VzdG9tX3JlY2lwZSA9IEN1c3RvbUltYWdlUmVjaXBlLm9iamVjdHMuZ2V0KGlkPXJlY2lwZV9pZCkKLSAgICAgICAgZXhjZXB0IEN1c3RvbUltYWdlUmVjaXBlLkRvZXNOb3RFeGlzdDoKLSAgICAgICAgICAgIHJldHVybiB7ImVycm9yIjogIkN1c3RvbSByZWNpcGUgd2l0aCBpZD0lcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZm91bmQiICUgcmVjaXBlX2lkfQotCi0gICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdHRVQnOgotICAgICAgICAgICAgaW5mbyA9IHsiaWQiIDogY3VzdG9tX3JlY2lwZS5pZCwKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogY3VzdG9tX3JlY2lwZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAiYmFzZV9yZWNpcGVfaWQiOiBjdXN0b21fcmVjaXBlLmJhc2VfcmVjaXBlLmlkLAotICAgICAgICAgICAgICAgICAgICAicHJvamVjdF9pZCI6IGN1c3RvbV9yZWNpcGUucHJvamVjdC5pZCwKLSAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB7ImVycm9yIjogIm9rIiwgImluZm8iOiBpbmZvfQotCi0gICAgICAgIGVsaWYgcmVxdWVzdC5tZXRob2QgPT0gJ0RFTEVURSc6Ci0gICAgICAgICAgICBjdXN0b21fcmVjaXBlLmRlbGV0ZSgpCi0gICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJvayJ9Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJNZXRob2QgJXMgaXMgbm90IHN1cHBvcnRlZCIgJSByZXF1ZXN0Lm1ldGhvZH0KLQogICAgIGRlZiBjdXN0b21yZWNpcGVfZG93bmxvYWQocmVxdWVzdCwgcGlkLCByZWNpcGVfaWQpOgogICAgICAgICByZWNpcGUgPSBnZXRfb2JqZWN0X29yXzQwNChDdXN0b21JbWFnZVJlY2lwZSwgcGs9cmVjaXBlX2lkKQogCkBAIC0yNTgwLDIzMCArMTYzNiw2IEBACiAKICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAKLSAgICBkZWYgX3RyYXZlcnNlX2RlcGVuZGVudHMobmV4dF9wYWNrYWdlX2lkLCByZXZfZGVwcywgYWxsX2N1cnJlbnRfcGFja2FnZXMsIHRyZWVfbGV2ZWw9MCk6Ci0gICAgICAgICIiIgotICAgICAgICBSZWN1cnNlIHRocm91Z2ggcmV2ZXJzZSBkZXBlbmRlbmN5IHRyZWUgZm9yIG5leHRfcGFja2FnZV9pZC4KLSAgICAgICAgTGltaXQgdGhlIHJldmVyc2UgZGVwZW5kZW5jeSBzZWFyY2ggdG8gcGFja2FnZXMgbm90IGFscmVhZHkgc2Nhbm5lZCwKLSAgICAgICAgdGhhdCBpcywgbm90IGFscmVhZHkgaW4gcmV2X2RlcHMuCi0gICAgICAgIExpbWl0IHRoZSBzY2FuIHRvIGEgZGVwdGggKHRyZWVfbGV2ZWwpIG5vdCBleGNlZWRpbmcgdGhlIGNvdW50IG9mCi0gICAgICAgIGFsbCBwYWNrYWdlcyBpbiB0aGUgY3VzdG9tIGltYWdlLCBhbmQgaWYgdGhhdCBkZXB0aCBpcyBleGNlZWRlZAotICAgICAgICByZXR1cm4gRmFsc2UsIHBvcCBvdXQgb2YgdGhlIHJlY3Vyc2lvbiwgYW5kIHdyaXRlIGEgd2FybmluZwotICAgICAgICB0byB0aGUgbG9nLCBidXQgdGhpcyBpcyB1bmxpa2VseSwgc3VnZ2VzdGluZyBhIGRlcGVuZGVuY3kgbG9vcAotICAgICAgICBub3QgY2F1Z2h0IGJ5IGJpdGJha2UuCi0gICAgICAgIE9uIHJldHVybiwgdGhlIGlucHV0L291dHB1dCBhcmcgcmV2X2RlcHMgaXMgYXBwZW5kZWQgd2l0aCBxdWVyeXNldAotICAgICAgICBkaWN0aW9uYXJ5IGVsZW1lbnRzLCBhbm5vdGF0ZWQgZm9yIHVzZSBpbiB0aGUgY3VzdG9taW1hZ2UgdGVtcGxhdGUuCi0gICAgICAgIFRoZSBsaXN0IGhhcyB1bnNvcnRlZCwgYnV0IHVuaXF1ZSBlbGVtZW50cy4KLSAgICAgICAgIiIiCi0gICAgICAgIG1heF9kZXBlbmRlbmN5X3RyZWVfZGVwdGggPSBhbGxfY3VycmVudF9wYWNrYWdlcy5jb3VudCgpCi0gICAgICAgIGlmIHRyZWVfbGV2ZWwgPj0gbWF4X2RlcGVuZGVuY3lfdHJlZV9kZXB0aDoKLSAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKAotICAgICAgICAgICAgICAgICJUaGUgbnVtYmVyIG9mIHJldmVyc2UgZGVwZW5kZW5jaWVzICIKLSAgICAgICAgICAgICAgICAiZm9yIHRoaXMgcGFja2FnZSBleGNlZWRzICIgKyBtYXhfZGVwZW5kZW5jeV90cmVlX2RlcHRoICsKLSAgICAgICAgICAgICAgICAiIGFuZCB0aGUgcmVtYWluaW5nIHJldmVyc2UgZGVwZW5kZW5jaWVzIHdpbGwgbm90IGJlIHJlbW92ZWQiKQotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBwYWNrYWdlID0gQ3VzdG9tSW1hZ2VQYWNrYWdlLm9iamVjdHMuZ2V0KGlkPW5leHRfcGFja2FnZV9pZCkKLSAgICAgICAgZGVwZW5kZW50cyA9IFwKLSAgICAgICAgICAgIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0LmFubm90YXRlKAotICAgICAgICAgICAgICAgIG5hbWU9RigncGFja2FnZV9fbmFtZScpLAotICAgICAgICAgICAgICAgIHBrPUYoJ3BhY2thZ2VfX3BrJyksCi0gICAgICAgICAgICAgICAgc2l6ZT1GKCdwYWNrYWdlX19zaXplJyksCi0gICAgICAgICAgICApLnZhbHVlcygibmFtZSIsICJwayIsICJzaXplIikuZXhjbHVkZSgKLSAgICAgICAgICAgICAgICB+UShwa19faW49YWxsX2N1cnJlbnRfcGFja2FnZXMpCi0gICAgICAgICAgICApCi0KLSAgICAgICAgZm9yIHBrZyBpbiBkZXBlbmRlbnRzOgotICAgICAgICAgICAgaWYgcGtnIGluIHJldl9kZXBzOgotICAgICAgICAgICAgICAgICMgYWxyZWFkeSBzZWVuLCBza2lwIGRlcGVuZGVudCBzZWFyY2gKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICByZXZfZGVwcy5hcHBlbmQocGtnKQotICAgICAgICAgICAgaWYgKF90cmF2ZXJzZV9kZXBlbmRlbnRzKAotICAgICAgICAgICAgICAgIHBrZ1sicGsiXSwgcmV2X2RlcHMsIGFsbF9jdXJyZW50X3BhY2thZ2VzLCB0cmVlX2xldmVsKzEpKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9nZXRfYWxsX2RlcGVuZGVudHMocGFja2FnZV9pZCwgYWxsX2N1cnJlbnRfcGFja2FnZXMpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJucyBzb3J0ZWQgbGlzdCBvZiByZWN1cnNpdmUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VfaWQsCi0gICAgICAgIGFzIGEgbGlzdCBvZiBkaWN0aW9uYXJ5IGl0ZW1zLCBieSByZWN1cnNpbmcgdGhyb3VnaCBkZXBlbmRlbmN5Ci0gICAgICAgIHJlbGF0aW9uc2hpcHMuCi0gICAgICAgICIiIgotICAgICAgICByZXZfZGVwcyA9IFtdCi0gICAgICAgIF90cmF2ZXJzZV9kZXBlbmRlbnRzKHBhY2thZ2VfaWQsIHJldl9kZXBzLCBhbGxfY3VycmVudF9wYWNrYWdlcykKLSAgICAgICAgcmV2X2RlcHMgPSBzb3J0ZWQocmV2X2RlcHMsIGtleT1sYW1iZGEgeDogeFsibmFtZSJdKQotICAgICAgICByZXR1cm4gcmV2X2RlcHMKLQotICAgIEB4aHJfcmVzcG9uc2UKLSAgICBkZWYgeGhyX2N1c3RvbXJlY2lwZV9wYWNrYWdlcyhyZXF1ZXN0LCByZWNpcGVfaWQsIHBhY2thZ2VfaWQpOgotICAgICAgICAiIiIKLSAgICAgICAgUmVTVCBBUEkgdG8gYWRkL3JlbW92ZSBwYWNrYWdlcyB0by9mcm9tIGN1c3RvbSByZWNpcGUuCi0KLSAgICAgICAgRW50cnkgcG9pbnQ6IC94aHJfY3VzdG9tcmVjaXBlLzxyZWNpcGVfaWQ+L3BhY2thZ2VzLzxwYWNrYWdlX2lkPgotCi0gICAgICAgIE1ldGhvZHM6Ci0gICAgICAgICAgICBQVVQgLSBBZGQgcGFja2FnZSB0byB0aGUgcmVjaXBlCi0gICAgICAgICAgICBERUxFVEUgLSBEZWxldGUgcGFja2FnZSBmcm9tIHRoZSByZWNpcGUKLSAgICAgICAgICAgIEdFVCAtIEdldCBwYWNrYWdlIGluZm9ybWF0aW9uCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIHsiZXJyb3IiOiAib2sifQotICAgICAgICAgICAgb3IKLSAgICAgICAgICAgIHsiZXJyb3IiOiA8ZXJyb3IgbWVzc2FnZT59Ci0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZWNpcGUgPSBDdXN0b21JbWFnZVJlY2lwZS5vYmplY3RzLmdldChpZD1yZWNpcGVfaWQpCi0gICAgICAgIGV4Y2VwdCBDdXN0b21JbWFnZVJlY2lwZS5Eb2VzTm90RXhpc3Q6Ci0gICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJDdXN0b20gcmVjaXBlIHdpdGggaWQ9JXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGZvdW5kIiAlIHJlY2lwZV9pZH0KLQotICAgICAgICBpZiBwYWNrYWdlX2lkOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBDdXN0b21JbWFnZVBhY2thZ2Uub2JqZWN0cy5nZXQoaWQ9cGFja2FnZV9pZCkKLSAgICAgICAgICAgIGV4Y2VwdCBQYWNrYWdlLkRvZXNOb3RFeGlzdDoKLSAgICAgICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJQYWNrYWdlIHdpdGggaWQ9JXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBmb3VuZCIgJSBwYWNrYWdlX2lkfQotCi0gICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdHRVQnOgotICAgICAgICAgICAgIyBJZiBubyBwYWNrYWdlX2lkIHRoZW4gbGlzdCB0aGUgY3VycmVudCBwYWNrYWdlcwotICAgICAgICAgICAgaWYgbm90IHBhY2thZ2VfaWQ6Ci0gICAgICAgICAgICAgICAgdG90YWxfc2l6ZSA9IDAKLSAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IHJlY2lwZS5nZXRfYWxsX3BhY2thZ2VzKCkudmFsdWVzKCJpZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSIpCi0gICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6Ci0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VbJ3NpemVfZm9ybWF0dGVkJ10gPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQocGFja2FnZVsnc2l6ZSddKQotICAgICAgICAgICAgICAgICAgICB0b3RhbF9zaXplICs9IHBhY2thZ2VbJ3NpemUnXQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsiZXJyb3IiOiAib2siLAotICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VzIiA6IGxpc3QocGFja2FnZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgInRvdGFsIiA6IGxlbihwYWNrYWdlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAidG90YWxfc2l6ZSIgOiB0b3RhbF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgInRvdGFsX3NpemVfZm9ybWF0dGVkIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdCh0b3RhbF9zaXplKQotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsbF9jdXJyZW50X3BhY2thZ2VzID0gcmVjaXBlLmdldF9hbGxfcGFja2FnZXMoKQotCi0gICAgICAgICAgICAgICAgIyBEZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2Ugd2hpY2ggYXJlbid0IHNhdGlzZmllZCBieSB0aGUKLSAgICAgICAgICAgICAgICAjIGN1cnJlbnQgcGFja2FnZXMgaW4gdGhlIGN1c3RvbSBpbWFnZSByZWNpcGUKLSAgICAgICAgICAgICAgICBkZXBzID0gcGFja2FnZS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuYW5ub3RhdGUoCi0gICAgICAgICAgICAgICAgICAgIG5hbWU9RignZGVwZW5kc19vbl9fbmFtZScpLAotICAgICAgICAgICAgICAgICAgICBwaz1GKCdkZXBlbmRzX29uX19waycpLAotICAgICAgICAgICAgICAgICAgICBzaXplPUYoJ2RlcGVuZHNfb25fX3NpemUnKSwKLSAgICAgICAgICAgICAgICApLnZhbHVlcygibmFtZSIsICJwayIsICJzaXplIikuZmlsdGVyKAotICAgICAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSB0d28gZGVwZW5kcyB0eXBlcyB3ZSBkb24ndCBrbm93IHdoeQotICAgICAgICAgICAgICAgICAgICAoUShkZXBfdHlwZT1QYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMpIHwKLSAgICAgICAgICAgICAgICAgICAgUShkZXBfdHlwZT1QYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SREVQRU5EUykpICYKLSAgICAgICAgICAgICAgICAgICAgflEocGtfX2luPWFsbF9jdXJyZW50X3BhY2thZ2VzKQotICAgICAgICAgICAgICAgICkKLQotICAgICAgICAgICAgICAgICMgUmV2ZXJzZSBkZXBlbmRlbmNpZXMgd2hpY2ggYXJlIG5lZWRlZCBieSBwYWNrYWdlcyB0aGF0IGFyZQotICAgICAgICAgICAgICAgICMgaW4gdGhlIGltYWdlLiBSZWN1cnNpdmUgc2VhcmNoIHByb3ZpZGluZyBhbGwgZGVwZW5kZW50cywKLSAgICAgICAgICAgICAgICAjIG5vdCBqdXN0IGltbWVkaWF0ZSBkZXBlbmRlbnRzLgotICAgICAgICAgICAgICAgIHJldmVyc2VfZGVwcyA9IF9nZXRfYWxsX2RlcGVuZGVudHMocGFja2FnZV9pZCwgYWxsX2N1cnJlbnRfcGFja2FnZXMpCi0gICAgICAgICAgICAgICAgdG90YWxfc2l6ZV9kZXBzID0gMAotICAgICAgICAgICAgICAgIHRvdGFsX3NpemVfcmV2ZXJzZV9kZXBzID0gMAotCi0gICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgotICAgICAgICAgICAgICAgICAgICBkZXBbJ3NpemVfZm9ybWF0dGVkJ10gPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQoZGVwWydzaXplJ10pCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsX3NpemVfZGVwcyArPSBkZXBbJ3NpemUnXQotCi0gICAgICAgICAgICAgICAgZm9yIGRlcCBpbiByZXZlcnNlX2RlcHM6Ci0gICAgICAgICAgICAgICAgICAgIGRlcFsnc2l6ZV9mb3JtYXR0ZWQnXSA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdChkZXBbJ3NpemUnXSkKLSAgICAgICAgICAgICAgICAgICAgdG90YWxfc2l6ZV9yZXZlcnNlX2RlcHMgKz0gZGVwWydzaXplJ10KLQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsiZXJyb3IiOiAib2siLAotICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogcGFja2FnZS5waywKLSAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogcGFja2FnZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiBwYWNrYWdlLnZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAidW5zYXRpc2ZpZWRfZGVwZW5kZW5jaWVzIjogbGlzdChkZXBzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ1bnNhdGlzZmllZF9kZXBlbmRlbmNpZXNfc2l6ZSI6IHRvdGFsX3NpemVfZGVwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICJ1bnNhdGlzZmllZF9kZXBlbmRlbmNpZXNfc2l6ZV9mb3JtYXR0ZWQiOgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQodG90YWxfc2l6ZV9kZXBzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXZlcnNlX2RlcGVuZGVuY2llcyI6IGxpc3QocmV2ZXJzZV9kZXBzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXZlcnNlX2RlcGVuZGVuY2llc19zaXplIjogdG90YWxfc2l6ZV9yZXZlcnNlX2RlcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAicmV2ZXJzZV9kZXBlbmRlbmNpZXNfc2l6ZV9mb3JtYXR0ZWQiOgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQodG90YWxfc2l6ZV9yZXZlcnNlX2RlcHMpfQotCi0gICAgICAgIGluY2x1ZGVkX3BhY2thZ2VzID0gcmVjaXBlLmluY2x1ZGVzX3NldC52YWx1ZXNfbGlzdCgncGsnLCBmbGF0PVRydWUpCi0KLSAgICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gJ1BVVCc6Ci0gICAgICAgICAgICAjIElmIHdlJ3JlIGFkZGluZyBiYWNrIGEgcGFja2FnZSB3aGljaCB1c2VkIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMKLSAgICAgICAgICAgICMgaW1hZ2UgYWxsIHdlIG5lZWQgdG8gZG8gaXMgcmVtb3ZlIGl0IGZyb20gdGhlIGV4Y2x1ZGVzCi0gICAgICAgICAgICBpZiBwYWNrYWdlLnBrIGluIGluY2x1ZGVkX3BhY2thZ2VzOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICByZWNpcGUuZXhjbHVkZXNfc2V0LnJlbW92ZShwYWNrYWdlKQotICAgICAgICAgICAgICAgICAgIHJldHVybiB7ImVycm9yIjogIm9rIn0KLSAgICAgICAgICAgICAgICBleGNlcHQgUGFja2FnZS5Eb2VzTm90RXhpc3Q6Ci0gICAgICAgICAgICAgICAgICAgcmV0dXJuIHsiZXJyb3IiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2UgJXMgbm90IGZvdW5kIGluIGV4Y2x1ZGVzIGJ1dCB3YXMgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVkIGxpc3QiICUgcGFja2FnZS5uYW1lfQotCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlY2lwZS5hcHBlbmRzX3NldC5hZGQocGFja2FnZSkKLSAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHBhY2thZ2UgaXMgbm90IGluIHRoZSBleGNsdWRlcyBzZXQKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlY2lwZS5leGNsdWRlc19zZXQucmVtb3ZlKHBhY2thZ2UpCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgIyBBZGQgdGhlIGRlcGVuZGVuY2llcyB3ZSB0aGluayB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAjIGFzIGEgcmVzdWx0IG9mIGFwcGVuZGluZyB0aGlzIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgIyBUT0RPIHRoaXMgc2hvdWxkIHJlY3Vyc2UgZG93biB0aGUgZW50aXJlIGRlcHMgdHJlZQotICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gcGFja2FnZS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuYWxsX2RlcGVuZHMoKToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgY3VzdF9wYWNrYWdlID0gQ3VzdG9tSW1hZ2VQYWNrYWdlLm9iamVjdHMuZ2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZGVwLmRlcGVuZHNfb24ubmFtZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmluY2x1ZGVzX3NldC5hZGQoY3VzdF9wYWNrYWdlKQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2hlbiBhZGRpbmcgdGhlIHByZS1yZXF1aXNpdGUgcGFja2FnZSwgbWFrZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3VyZSBpdCdzIG5vdCBpbiB0aGUgZXhjbHVkZWQgbGlzdCBmcm9tIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW9yIHJlbW92YWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmV4Y2x1ZGVzX3NldC5yZW1vdmUoY3VzdF9wYWNrYWdlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFBhY2thZ2UuRG9lc05vdEV4aXN0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgY2FyZSBpZiB0aGUgcGFja2FnZSBoYWQgbmV2ZXIgYmVlbiBleGNsdWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNvdWxkIG5vdCBhZGQgcGFja2FnZSdzIHN1Z2dlc3RlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXBlbmRlbmNpZXMgdG8gdGhlIGxpc3QiKQotCi0gICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJvayJ9Ci0KLSAgICAgICAgZWxpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnREVMRVRFJzoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIGRlbGV0aW5nIGEgcGFja2FnZSB3aGljaCBpcyBpbmNsdWRlZCB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAgIyBBZGQgaXQgdG8gdGhlIGV4Y2x1ZGVzIGxpc3QuCi0gICAgICAgICAgICAgICAgaWYgcGFja2FnZS5wayBpbiBpbmNsdWRlZF9wYWNrYWdlczoKLSAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmV4Y2x1ZGVzX3NldC5hZGQocGFja2FnZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZWNpcGUuYXBwZW5kc19zZXQucmVtb3ZlKHBhY2thZ2UpCi0gICAgICAgICAgICAgICAgYWxsX2N1cnJlbnRfcGFja2FnZXMgPSByZWNpcGUuZ2V0X2FsbF9wYWNrYWdlcygpCi0gICAgICAgICAgICAgICAgcmV2ZXJzZV9kZXBzX2RpY3RsaXN0ID0gX2dldF9hbGxfZGVwZW5kZW50cyhwYWNrYWdlLnBrLCBhbGxfY3VycmVudF9wYWNrYWdlcykKLSAgICAgICAgICAgICAgICBpZHMgPSBbZW50cnlbJ3BrJ10gZm9yIGVudHJ5IGluIHJldmVyc2VfZGVwc19kaWN0bGlzdF0KLSAgICAgICAgICAgICAgICByZXZlcnNlX2RlcHMgPSBDdXN0b21JbWFnZVBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWRfX2luPWlkcykKLSAgICAgICAgICAgICAgICBmb3IgciBpbiByZXZlcnNlX2RlcHM6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIuaWQgaW4gaW5jbHVkZWRfcGFja2FnZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmV4Y2x1ZGVzX3NldC5hZGQocikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmFwcGVuZHNfc2V0LnJlbW92ZShyKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJvayJ9Ci0gICAgICAgICAgICBleGNlcHQgQ3VzdG9tSW1hZ2VSZWNpcGUuRG9lc05vdEV4aXN0OgotICAgICAgICAgICAgICAgIHJldHVybiB7ImVycm9yIjogIlRyaWVkIHRvIHJlbW92ZSBwYWNrYWdlIHRoYXQgd2Fzbid0IHByZXNlbnQifQotCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4geyJlcnJvciI6ICJNZXRob2QgJXMgaXMgbm90IHN1cHBvcnRlZCIgJSByZXF1ZXN0Lm1ldGhvZH0KLQogICAgIGRlZiBpbXBvcnRsYXllcihyZXF1ZXN0LCBwaWQpOgogICAgICAgICB0ZW1wbGF0ZSA9ICJpbXBvcnRsYXllci5odG1sIgogICAgICAgICBjb250ZXh0ID0gewpAQCAtMjgxMSwyMCArMTY0MywzMyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCiAKKyAgICAjIFRPRE8gbWVyZ2Ugd2l0aCBhcGkgcHNldWRvIGFwaSBoZXJlIGlzIHVzZWQgZm9yIGRlcHMgbW9kYWwKICAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCdsYXllcmRldGFpbHMuaHRtbCcpCiAgICAgZGVmIGxheWVyZGV0YWlscyhyZXF1ZXN0LCBwaWQsIGxheWVyaWQpOgogICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1waWQpCiAgICAgICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPWxheWVyaWQpCiAKLSAgICAgICAgY29udGV4dCA9IHsncHJvamVjdCcgOiBwcm9qZWN0LAotICAgICAgICAgICAgJ2xheWVydmVyc2lvbicgOiBsYXllcl92ZXJzaW9uLAotICAgICAgICAgICAgJ2xheWVyZGVwcycgOiB7Imxpc3QiOiBbeyJpZCI6IGRlcC5pZCwKLSAgICAgICAgICAgICAgICAibmFtZSI6IGRlcC5sYXllci5uYW1lLAotICAgICAgICAgICAgICAgICJsYXllcmRldGFpbHVybCI6IHJldmVyc2UoJ2xheWVyZGV0YWlscycsIGFyZ3M9KHBpZCwgZGVwLnBrKSksCi0gICAgICAgICAgICAgICAgInZjc191cmwiOiBkZXAubGF5ZXIudmNzX3VybCwKLSAgICAgICAgICAgICAgICAidmNzX3JlZmVyZW5jZSI6IGRlcC5nZXRfdmNzX3JlZmVyZW5jZSgpfSBcCi0gICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBsYXllcl92ZXJzaW9uLmdldF9hbGxkZXBzKHByb2plY3QuaWQpXX0sCi0gICAgICAgICAgICAncHJvamVjdGxheWVycyc6IG1hcChsYW1iZGEgcHJqbGF5ZXI6IHByamxheWVyLmxheWVyY29tbWl0LmlkLCBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1wcm9qZWN0KSkKKyAgICAgICAgcHJvamVjdF9sYXllcnMgPSBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICBwcm9qZWN0PXByb2plY3QpLnZhbHVlc19saXN0KCJsYXllcmNvbW1pdF9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXQ9VHJ1ZSkKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ3Byb2plY3QnOiBwcm9qZWN0LAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6IExheWVyU291cmNlLnR5cGVzX2RpY3QoKSwKKyAgICAgICAgICAgICdsYXllcnZlcnNpb24nOiBsYXllcl92ZXJzaW9uLAorICAgICAgICAgICAgJ2xheWVyZGVwcyc6IHsKKyAgICAgICAgICAgICAgICAibGlzdCI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogZGVwLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiBkZXAubGF5ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsYXllcmRldGFpbHVybCI6IHJldmVyc2UoJ2xheWVyZGV0YWlscycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHBpZCwgZGVwLnBrKSksCisgICAgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6IGRlcC5sYXllci52Y3NfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgInZjc19yZWZlcmVuY2UiOiBkZXAuZ2V0X3Zjc19yZWZlcmVuY2UoKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gbGF5ZXJfdmVyc2lvbi5nZXRfYWxsZGVwcyhwcm9qZWN0LmlkKV0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAncHJvamVjdGxheWVycyc6IGxpc3QocHJvamVjdF9sYXllcnMpCiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gY29udGV4dApAQCAtMjgzOSw3ICsxNjg0LDcgQEAKICAgICAgICAgdmFyc19ibGFja2xpc3QgID0gewogICAgICAgICAgICAgJ1BBUkFMTEVMX01BS0UnLCdCQl9OVU1CRVJfVEhSRUFEUycsCiAgICAgICAgICAgICAnQkJfRElTS01PTl9ESVJTJywnQkJfTlVNQkVSX1RIUkVBRFMnLCdDVlNfUFJPWFlfSE9TVCcsJ0NWU19QUk9YWV9QT1JUJywKLSAgICAgICAgICAgICdQQVJBTExFTF9NQUtFJywnU1NUQVRFX01JUlJPUlMnLCdUTVBESVInLAorICAgICAgICAgICAgJ1BBUkFMTEVMX01BS0UnLCdUTVBESVInLAogICAgICAgICAgICAgJ2FsbF9wcm94eScsJ2Z0cF9wcm94eScsJ2h0dHBfcHJveHkgJywnaHR0cHNfcHJveHknCiAgICAgICAgICAgICB9CiAKQEAgLTI4ODcsNyArMTczMiw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNvbnRleHRbJ2RsX2RpciddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiRExfRElSIikudmFsdWUKICAgICAgICAgICAgIGNvbnRleHRbJ2RsX2Rpcl9kZWZpbmVkJ10gPSAiMSIKLSAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3QsQnVpbGRFbnZpcm9ubWVudC5Eb2VzTm90RXhpc3Q6CisgICAgICAgIGV4Y2VwdCAoUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdCwgQnVpbGRFbnZpcm9ubWVudC5Eb2VzTm90RXhpc3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb250ZXh0Wydmc3R5cGVzJ10gPSAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiSU1BR0VfRlNUWVBFUyIpLnZhbHVlCkBAIC0yOTE1LDcgKzE3NjAsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb250ZXh0Wydzc3RhdGVfZGlyJ10gPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJTU1RBVEVfRElSIikudmFsdWUKICAgICAgICAgICAgIGNvbnRleHRbJ3NzdGF0ZV9kaXJfZGVmaW5lZCddID0gIjEiCi0gICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0LCBCdWlsZEVudmlyb25tZW50LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgZXhjZXB0IChQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0LCBCdWlsZEVudmlyb25tZW50LkRvZXNOb3RFeGlzdCk6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgcmV0dXJuIGNvbnRleHQKQEAgLTI5MzYsMTIgKzE3ODEsMjAgQEAKICAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICJpbWFnZWZpbGUiOgogICAgICAgICAgICAgZmlsZV9uYW1lID0gVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5nZXQodGFyZ2V0X19idWlsZCA9IGJ1aWxkLCBwayA9IGFydGlmYWN0X2lkKS5maWxlX25hbWUKIAotICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gImJ1aWxkYXJ0aWZhY3QiOgotICAgICAgICAgICAgZmlsZV9uYW1lID0gQnVpbGRBcnRpZmFjdC5vYmplY3RzLmdldChidWlsZCA9IGJ1aWxkLCBwayA9IGFydGlmYWN0X2lkKS5maWxlX25hbWUKKyAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICJ0YXJnZXRrZXJuZWxhcnRpZmFjdCI6CisgICAgICAgICAgICB0YXJnZXQgPSBUYXJnZXRLZXJuZWxGaWxlLm9iamVjdHMuZ2V0KHBrPWFydGlmYWN0X2lkKQorICAgICAgICAgICAgZmlsZV9uYW1lID0gdGFyZ2V0LmZpbGVfbmFtZQorCisgICAgICAgIGVsaWYgYXJ0aWZhY3RfdHlwZSA9PSAidGFyZ2V0c2RrYXJ0aWZhY3QiOgorICAgICAgICAgICAgdGFyZ2V0ID0gVGFyZ2V0U0RLRmlsZS5vYmplY3RzLmdldChwaz1hcnRpZmFjdF9pZCkKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHRhcmdldC5maWxlX25hbWUKIAogICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gImxpY2Vuc2VtYW5pZmVzdCI6CiAgICAgICAgICAgICBmaWxlX25hbWUgPSBUYXJnZXQub2JqZWN0cy5nZXQoYnVpbGQgPSBidWlsZCwgcGsgPSBhcnRpZmFjdF9pZCkubGljZW5zZV9tYW5pZmVzdF9wYXRoCiAKKyAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICJwYWNrYWdlbWFuaWZlc3QiOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gVGFyZ2V0Lm9iamVjdHMuZ2V0KGJ1aWxkID0gYnVpbGQsIHBrID0gYXJ0aWZhY3RfaWQpLnBhY2thZ2VfbWFuaWZlc3RfcGF0aAorCiAgICAgICAgIGVsaWYgYXJ0aWZhY3RfdHlwZSA9PSAidGFza2xvZ2ZpbGUiOgogICAgICAgICAgICAgZmlsZV9uYW1lID0gVGFzay5vYmplY3RzLmdldChidWlsZCA9IGJ1aWxkLCBwayA9IGFydGlmYWN0X2lkKS5sb2dmaWxlCiAKQEAgLTI5NjcsNyArMTgyMCw3IEBACiAgICAgICAgICAgICApCiAKICAgICAgICAgICAgIGlmIGZpbGVfbmFtZSBhbmQgcmVzcG9uc2VfZmlsZV9uYW1lOgotICAgICAgICAgICAgICAgIGZzb2NrID0gb3BlbihmaWxlX25hbWUsICJyIikKKyAgICAgICAgICAgICAgICBmc29jayA9IG9wZW4oZmlsZV9uYW1lLCAicmIiKQogICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IE1pbWVUeXBlRmluZGVyLmdldF9taW1ldHlwZShmaWxlX25hbWUpCiAKICAgICAgICAgICAgICAgICByZXNwb25zZSA9IEh0dHBSZXNwb25zZShmc29jaywgY29udGVudF90eXBlID0gY29udGVudF90eXBlKQpAQCAtMjk3OCw1ICsxODMxLDUgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAidW5hdmFpbGFibGVfYXJ0aWZhY3QuaHRtbCIpCi0gICAgICAgIGV4Y2VwdCBPYmplY3REb2VzTm90RXhpc3QsIElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCAoT2JqZWN0RG9lc05vdEV4aXN0LCBJT0Vycm9yKToKICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgInVuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwiKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS93aWRnZXRzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS93aWRnZXRzLnB5CmluZGV4IGQyZWY1ZDMuLjAyNjkwM2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3dpZGdldHMucHkKQEAgLTIyLDMwICsyMiw0MSBAQAogZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgVmlldywgVGVtcGxhdGVWaWV3CiBmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNhY2hlIGltcG9ydCBjYWNoZV9jb250cm9sCiBmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IEh0dHBSZXNwb25zZQotZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlQmFkUmVxdWVzdAotZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgc2VyaWFsaXplcnMKIGZyb20gZGphbmdvLmNvcmUuY2FjaGUgaW1wb3J0IGNhY2hlCiBmcm9tIGRqYW5nby5jb3JlLnBhZ2luYXRvciBpbXBvcnQgUGFnaW5hdG9yLCBFbXB0eVBhZ2UKIGZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQotZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBQcm9qZWN0TGF5ZXIsIExheWVyX1ZlcnNpb24KK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgQnVpbGQKIGZyb20gZGphbmdvLnRlbXBsYXRlIGltcG9ydCBDb250ZXh0LCBUZW1wbGF0ZQorZnJvbSBkamFuZ28udGVtcGxhdGUgaW1wb3J0IFZhcmlhYmxlRG9lc05vdEV4aXN0Citmcm9tIGRqYW5nby50ZW1wbGF0ZSBpbXBvcnQgVGVtcGxhdGVTeW50YXhFcnJvcgogZnJvbSBkamFuZ28uY29yZS5zZXJpYWxpemVycy5qc29uIGltcG9ydCBEamFuZ29KU09ORW5jb2RlcgogZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBGaWVsZEVycm9yCi1mcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybCwgcGF0dGVybnMKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSB0b2FzdGVyZ3VpLnRlbXBsYXRldGFncy5wcm9qZWN0dGFncyBpbXBvcnQgc2VjdG9obXMsIGdldF90YXNrcworZnJvbSB0b2FzdGVyZ3VpLnRlbXBsYXRldGFncy5wcm9qZWN0dGFncyBpbXBvcnQganNvbiBhcyB0ZW1wbGF0ZV9qc29uCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBKc29uUmVzcG9uc2UKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCiAKIGltcG9ydCB0eXBlcwogaW1wb3J0IGpzb24KIGltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgcmUKLWltcG9ydCB1cmxsaWIKKwordHJ5OgorICAgIGZyb20gdXJsbGliIGltcG9ydCB1bnF1b3RlX3BsdXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdW5xdW90ZV9wbHVzCiAKIGltcG9ydCBsb2dnaW5nCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCiAKLWZyb20gdG9hc3Rlcmd1aS52aWV3cyBpbXBvcnQgb2JqdG9qc29uCiBmcm9tIHRvYXN0ZXJndWkudGFibGVmaWx0ZXIgaW1wb3J0IFRhYmxlRmlsdGVyTWFwCiAKKworY2xhc3MgTm9GaWVsZE9yRGF0YU5hbWUoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKwogY2xhc3MgVG9hc3RlclRhYmxlKFRlbXBsYXRlVmlldyk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKFRvYXN0ZXJUYWJsZSwgc2VsZikuX19pbml0X18oKQpAQCAtNjMsMjUgKzc0LDIwIEBACiAgICAgICAgIHNlbGYuZW1wdHlfc3RhdGUgPSAiU29ycnkgLSBubyBkYXRhIGZvdW5kIgogICAgICAgICBzZWxmLmRlZmF1bHRfb3JkZXJieSA9ICIiCiAKLSAgICAgICAgIyBhZGQgdGhlICJpZCIgY29sdW1uLCB1bmRpc3BsYXlhYmxlLCBieSBkZWZhdWx0Ci0gICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iSWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWFibGU9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImlkIikKLQogICAgICMgcHJldmVudCBIVFRQIGNhY2hpbmcgb2YgdGFibGUgZGF0YQotICAgIEBjYWNoZV9jb250cm9sKG11c3RfcmV2YWxpZGF0ZT1UcnVlLCBtYXhfYWdlPTAsIG5vX3N0b3JlPVRydWUsIG5vX2NhY2hlPVRydWUpCisgICAgQGNhY2hlX2NvbnRyb2wobXVzdF9yZXZhbGlkYXRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgbWF4X2FnZT0wLCBub19zdG9yZT1UcnVlLCBub19jYWNoZT1UcnVlKQogICAgIGRlZiBkaXNwYXRjaChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gc3VwZXIoVG9hc3RlclRhYmxlLCBzZWxmKS5kaXNwYXRjaCgqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIGNvbnRleHQgPSBzdXBlcihUb2FzdGVyVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCiAgICAgICAgIGNvbnRleHRbJ3RpdGxlJ10gPSBzZWxmLnRpdGxlCi0gICAgICAgIGNvbnRleHRbJ3RhYmxlX25hbWUnXSA9ICB0eXBlKHNlbGYpLl9fbmFtZV9fLmxvd2VyKCkKKyAgICAgICAgY29udGV4dFsndGFibGVfbmFtZSddID0gdHlwZShzZWxmKS5fX25hbWVfXy5sb3dlcigpCisgICAgICAgIGNvbnRleHRbJ2VtcHR5X3N0YXRlJ10gPSBzZWxmLmVtcHR5X3N0YXRlCiAKICAgICAgICAgcmV0dXJuIGNvbnRleHQKIAotCiAgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBpZiByZXF1ZXN0LkdFVC5nZXQoJ2Zvcm1hdCcsIE5vbmUpID09ICdqc29uJzoKIApAQCAtMTAyLDggKzEwOCw2IEBACiAgICAgICAgIHJldHVybiBzdXBlcihUb2FzdGVyVGFibGUsIHNlbGYpLmdldChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgZ2V0X2ZpbHRlcl9pbmZvKHNlbGYsIHJlcXVlc3QsICoqa3dhcmdzKToKLSAgICAgICAgZGF0YSA9IE5vbmUKLQogICAgICAgICBzZWxmLnNldHVwX2ZpbHRlcnMoKiprd2FyZ3MpCiAKICAgICAgICAgc2VhcmNoID0gcmVxdWVzdC5HRVQuZ2V0KCJzZWFyY2giLCBOb25lKQpAQCAtMTE3LDEzICsxMjEsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzPURqYW5nb0pTT05FbmNvZGVyKQogCiAgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cCB0aGUgY29sdW1ucyAiIiIKKyAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cAorICAgICAgICB0aGUgY29sdW1ucyAiIiIKICAgICAgICAgcGFzcworCiAgICAgZGVmIHNldHVwX2ZpbHRlcnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cCB0aGUgZmlsdGVycyAiIiIKKyAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cCB0aGUKKyAgICAgICAgZmlsdGVycyAiIiIKICAgICAgICAgcGFzcworCiAgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlIHF1ZXJ5c2V0IiIiCisgICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlCisgICAgICAgIHF1ZXJ5c2V0IiIiCiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBhZGRfZmlsdGVyKHNlbGYsIHRhYmxlX2ZpbHRlcik6CkBAIC0xMzcsNyArMTQ2LDYgQEAKICAgICBkZWYgYWRkX2NvbHVtbihzZWxmLCB0aXRsZT0iIiwgaGVscF90ZXh0PSIiLAogICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1GYWxzZSwgaGlkZWFibGU9VHJ1ZSwgaGlkZGVuPUZhbHNlLAogICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9IiIsIGZpbHRlcl9uYW1lPU5vbmUsIHN0YXRpY19kYXRhX25hbWU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZT1UcnVlLCBjb21wdXRhdGlvbj1Ob25lLAogICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPU5vbmUpOgogICAgICAgICAiIiJBZGQgYSBjb2x1bW4gdG8gdGhlIHRhYmxlLgogCkBAIC0xNTUsMTggKzE2MywxNSBAQAogICAgICAgICAgICAgICAgIGFzIGRhdGEKICAgICAgICAgIiIiCiAKLSAgICAgICAgc2VsZi5jb2x1bW5zLmFwcGVuZCh7J3RpdGxlJyA6IHRpdGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVscF90ZXh0JyA6IGhlbHBfdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyYWJsZScgOiBvcmRlcmFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaWRlYWJsZScgOiBoaWRlYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbicgOiBoaWRkZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWVsZF9uYW1lJyA6IGZpZWxkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXJfbmFtZScgOiBmaWx0ZXJfbmFtZSwKKyAgICAgICAgc2VsZi5jb2x1bW5zLmFwcGVuZCh7J3RpdGxlJzogdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWxwX3RleHQnOiBoZWxwX3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlcmFibGUnOiBvcmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaWRlYWJsZSc6IGhpZGVhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogaGlkZGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmllbGRfbmFtZSc6IGZpZWxkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXJfbmFtZSc6IGZpbHRlcl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdGljX2RhdGFfbmFtZSc6IHN0YXRpY19kYXRhX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0aWNfZGF0YV90ZW1wbGF0ZSc6IHN0YXRpY19kYXRhX3RlbXBsYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheWFibGUnOiBkaXNwbGF5YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXB1dGF0aW9uJzogY29tcHV0YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRpY19kYXRhX3RlbXBsYXRlJzogc3RhdGljX2RhdGFfdGVtcGxhdGV9KQogCiAgICAgZGVmIHNldF9jb2x1bW5faGlkZGVuKHNlbGYsIHRpdGxlLCBoaWRkZW4pOgogICAgICAgICAiIiIKQEAgLTE5MCw4ICsxOTUsOCBAQAogICAgICAgICAiIiJVdGlsaXR5IGZ1bmN0aW9uIHRvIHJlbmRlciB0aGUgc3RhdGljIGRhdGEgdGVtcGxhdGUiIiIKIAogICAgICAgICBjb250ZXh0ID0gewotICAgICAgICAgICdleHRyYScgOiBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhLAotICAgICAgICAgICdkYXRhJyA6IHJvdywKKyAgICAgICAgICAnZXh0cmEnOiBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhLAorICAgICAgICAgICdkYXRhJzogcm93LAogICAgICAgICB9CiAKICAgICAgICAgY29udGV4dCA9IENvbnRleHQoY29udGV4dCkKQEAgLTIxNiw3ICsyMjEsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbHRlcl9uYW1lLCBhY3Rpb25fbmFtZSA9IGZpbHRlcnMuc3BsaXQoJzonKQotICAgICAgICAgICAgYWN0aW9uX3BhcmFtcyA9IHVybGxpYi51bnF1b3RlX3BsdXMoZmlsdGVyX3ZhbHVlKQorICAgICAgICAgICAgYWN0aW9uX3BhcmFtcyA9IHVucXVvdGVfcGx1cyhmaWx0ZXJfdmFsdWUpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuCiAKQEAgLTI0MSwyMCArMjQ2LDI1IEBACiAKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5xdWVyeXNldC5tb2RlbCwgJ3NlYXJjaF9hbGxvd2VkX2ZpZWxkcycpOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJTZWFyY2ggZmllbGRzIGFyZW4ndCBkZWZpbmVkIGluIHRoZSBtb2RlbCAlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5xdWVyeXNldC5tb2RlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYucXVlcnlzZXQubW9kZWwpCiAKLSAgICAgICAgc2VhcmNoX3F1ZXJpZXMgPSBbXQorICAgICAgICBzZWFyY2hfcXVlcmllcyA9IE5vbmUKICAgICAgICAgZm9yIHN0IGluIHNlYXJjaF90ZXJtLnNwbGl0KCIgIik6Ci0gICAgICAgICAgICBxX21hcCA9IFtRKCoqe2ZpZWxkICsgJ19faWNvbnRhaW5zJzogc3R9KQotICAgICAgICAgICAgICAgICAgICAgZm9yIGZpZWxkIGluIHNlbGYucXVlcnlzZXQubW9kZWwuc2VhcmNoX2FsbG93ZWRfZmllbGRzXQorICAgICAgICAgICAgcXVlcmllcyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBmaWVsZCBpbiBzZWxmLnF1ZXJ5c2V0Lm1vZGVsLnNlYXJjaF9hbGxvd2VkX2ZpZWxkczoKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFEoKip7ZmllbGQgKyAnX19pY29udGFpbnMnOiBzdH0pCisgICAgICAgICAgICAgICAgaWYgcXVlcmllczoKKyAgICAgICAgICAgICAgICAgICAgcXVlcmllcyB8PSBxdWVyeQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHF1ZXJpZXMgPSBxdWVyeQogCi0gICAgICAgICAgICBzZWFyY2hfcXVlcmllcy5hcHBlbmQocmVkdWNlKG9wZXJhdG9yLm9yXywgcV9tYXApKQotCi0gICAgICAgIHNlYXJjaF9xdWVyaWVzID0gcmVkdWNlKG9wZXJhdG9yLmFuZF8sIHNlYXJjaF9xdWVyaWVzKQorICAgICAgICAgICAgaWYgc2VhcmNoX3F1ZXJpZXM6CisgICAgICAgICAgICAgICBzZWFyY2hfcXVlcmllcyAmPSBxdWVyaWVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgc2VhcmNoX3F1ZXJpZXMgPSBxdWVyaWVzCiAKICAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQuZmlsdGVyKHNlYXJjaF9xdWVyaWVzKQogCi0KICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcmVxdWVzdCwgKiprd2FyZ3MpOgogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJucyB0aGUgZGF0YSBmb3IgdGhlIHBhZ2UgcmVxdWVzdGVkIHdpdGggdGhlIHNwZWNpZmllZApAQCAtMjYyLDcgKzI3Miw4IEBACiAKICAgICAgICAgZmlsdGVyczogZmlsdGVyIGFuZCBhY3Rpb24gbmFtZSwgZS5nLiAib3V0Y29tZTpidWlsZF9zdWNjZWVkZWQiCiAgICAgICAgIGZpbHRlcl92YWx1ZTogdmFsdWUgdG8gcGFzcyB0byB0aGUgbmFtZWQgZmlsdGVyK2FjdGlvbiwgZS5nLiAib24iCi0gICAgICAgIChmb3IgYSB0b2dnbGUgZmlsdGVyKSBvciAiMjAxNS0xMi0xMSwyMDE1LTEyLTEyIiAoZm9yIGEgZGF0ZSByYW5nZSBmaWx0ZXIpCisgICAgICAgIChmb3IgYSB0b2dnbGUgZmlsdGVyKSBvciAiMjAxNS0xMi0xMSwyMDE1LTEyLTEyIgorICAgICAgICAoZm9yIGEgZGF0ZSByYW5nZSBmaWx0ZXIpCiAgICAgICAgICIiIgogCiAgICAgICAgIHBhZ2VfbnVtID0gcmVxdWVzdC5HRVQuZ2V0KCJwYWdlIiwgMSkKQEAgLTI3NiwxMiArMjg3LDEyIEBACiAgICAgICAgICMgTWFrZSBhIHVuaXF1ZSBjYWNoZSBuYW1lCiAgICAgICAgIGNhY2hlX25hbWUgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogCi0gICAgICAgIGZvciBrZXksIHZhbCBpbiByZXF1ZXN0LkdFVC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGtleSwgdmFsIGluIHJlcXVlc3QuR0VULml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBrZXkgPT0gJ25vY2FjaGUnOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBjYWNoZV9uYW1lID0gY2FjaGVfbmFtZSArIHN0cihrZXkpICsgc3RyKHZhbCkKIAotICAgICAgICBmb3Iga2V5LCB2YWwgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3Iga2V5LCB2YWwgaW4ga3dhcmdzLml0ZW1zKCk6CiAgICAgICAgICAgICBjYWNoZV9uYW1lID0gY2FjaGVfbmFtZSArIHN0cihrZXkpICsgc3RyKHZhbCkKIAogICAgICAgICAjIE5vIHNwZWNpYWwgY2hhcnMgYWxsb3dlZCBpbiB0aGUgY2FjaGUgbmFtZSBhcGFydCBmcm9tIGRhc2gKQEAgLTMxMywxNiArMzI0LDE2IEBACiAgICAgICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UoMSkKIAogICAgICAgICBkYXRhID0gewotICAgICAgICAgICAgJ3RvdGFsJyA6IHNlbGYucXVlcnlzZXQuY291bnQoKSwKLSAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogc2VsZi5kZWZhdWx0X29yZGVyYnksCi0gICAgICAgICAgICAnY29sdW1ucycgOiBzZWxmLmNvbHVtbnMsCi0gICAgICAgICAgICAncm93cycgOiBbXSwKLSAgICAgICAgICAgICdlcnJvcicgOiAib2siLAorICAgICAgICAgICAgJ3RvdGFsJzogc2VsZi5xdWVyeXNldC5jb3VudCgpLAorICAgICAgICAgICAgJ2RlZmF1bHRfb3JkZXJieSc6IHNlbGYuZGVmYXVsdF9vcmRlcmJ5LAorICAgICAgICAgICAgJ2NvbHVtbnMnOiBzZWxmLmNvbHVtbnMsCisgICAgICAgICAgICAncm93cyc6IFtdLAorICAgICAgICAgICAgJ2Vycm9yJzogIm9rIiwKICAgICAgICAgfQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciByb3cgaW4gcGFnZS5vYmplY3RfbGlzdDoKLSAgICAgICAgICAgICAgICAjVXNlIGNvbGxlY3Rpb24gdG8gbWFpbnRhaW4gdGhlIG9yZGVyCisgICAgICAgICAgICBmb3IgbW9kZWxfb2JqIGluIHBhZ2Uub2JqZWN0X2xpc3Q6CisgICAgICAgICAgICAgICAgIyBVc2UgY29sbGVjdGlvbiB0byBtYWludGFpbiB0aGUgb3JkZXIKICAgICAgICAgICAgICAgICByZXF1aXJlZF9kYXRhID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQogCiAgICAgICAgICAgICAgICAgZm9yIGNvbCBpbiBzZWxmLmNvbHVtbnM6CkBAIC0zMzAsNDQgKzM0MSw3MyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmllbGQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGNvbFsnc3RhdGljX2RhdGFfbmFtZSddCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaWVsZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVzdCBzdXBwbHkgYSBmaWVsZF9uYW1lIG9yIHN0YXRpY19kYXRhX25hbWUgZm9yIGNvbHVtbiAlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sY29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vRmllbGRPckRhdGFOYW1lKCJNdXN0IHN1cHBseSBhIGZpZWxkX25hbWUgb3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdGljX2RhdGFfbmFtZSBmb3IgY29sdW1uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGNvbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKwogICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHdlIG5lZWQgdG8gcHJvY2VzcyBzb21lIHN0YXRpYyBkYXRhCiAgICAgICAgICAgICAgICAgICAgIGlmICJzdGF0aWNfZGF0YV9uYW1lIiBpbiBjb2wgYW5kIGNvbFsnc3RhdGljX2RhdGFfbmFtZSddOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YVsic3RhdGljOiVzIiAlIGNvbFsnc3RhdGljX2RhdGFfbmFtZSddXSA9IHNlbGYucmVuZGVyX3N0YXRpY19kYXRhKGNvbFsnc3RhdGljX2RhdGFfdGVtcGxhdGUnXSwgcm93KQotCiAgICAgICAgICAgICAgICAgICAgICAgICAjIE92ZXJ3cml0ZSB0aGUgZmllbGRfbmFtZSB3aXRoIHN0YXRpY19kYXRhX25hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICMgc28gdGhhdCB0aGlzIGNhbiBiZSB1c2VkIGFzIHRoZSBodG1sIGNsYXNzIG5hbWUKLQogICAgICAgICAgICAgICAgICAgICAgICAgY29sWydmaWVsZF9uYW1lJ10gPSBjb2xbJ3N0YXRpY19kYXRhX25hbWUnXQogCi0gICAgICAgICAgICAgICAgICAgICMgY29tcHV0ZSB0aGUgY29tcHV0YXRpb24gb24gdGhlIHJhdyBkYXRhIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gcm93Ci0gICAgICAgICAgICAgICAgICAgIGlmIGNvbFsnY29tcHV0YXRpb24nXToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBjb2xbJ2NvbXB1dGF0aW9uJ10ocm93KQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBUcmF2ZXJzZSB0byBhbnkgZm9yaWVnbiBrZXkgaW4gdGhlIG9iamVjdCBoaWVyYWNoeQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmZpZWxkIGluIGZpZWxkLnNwbGl0KCJfXyIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobW9kZWxfZGF0YSwgc3ViZmllbGQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gZ2V0YXR0cihtb2RlbF9kYXRhLCBzdWJmaWVsZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGZpZWxkIGNvdWxkIGJlIGEgZnVuY3Rpb24gb24gdGhlIG1vZGVsIHNvIGNoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAjIElmIGl0IGlzIHRoZW4gY2FsbCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2RlbF9kYXRhLCB0eXBlcy5NZXRob2RUeXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZGF0YSA9IG1vZGVsX2RhdGEoKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmVuZGVyIHRoZSB0ZW1wbGF0ZSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkX2RhdGFbY29sWydzdGF0aWNfZGF0YV9uYW1lJ11dID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW5kZXJfc3RhdGljX2RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sWydzdGF0aWNfZGF0YV90ZW1wbGF0ZSddLCBtb2RlbF9vYmopCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgKFRlbXBsYXRlU3ludGF4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlRG9lc05vdEV4aXN0KSBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiY291bGQgbm90IHJlbmRlciB0ZW1wbGF0ZSBjb2RlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgJXMgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xbJ3N0YXRpY19kYXRhX3RlbXBsYXRlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkX2RhdGFbY29sWydzdGF0aWNfZGF0YV9uYW1lJ11dID1cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8IS0tZXJyb3ItLT4nCiAKLSAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YVtjb2xbJ2ZpZWxkX25hbWUnXV0gPSBtb2RlbF9kYXRhCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRyYXZlcnNlIHRvIGFueSBmb3JpZWduIGtleSBpbiB0aGUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZS5nLiByZWNpcGVfX2xheWVyX3ZlcnNpb25fX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICJfXyIgaW4gZmllbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmZpZWxkIGluIGZpZWxkLnNwbGl0KCJfXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbW9kZWxfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGZpcnN0IGl0ZXJhdGlvbiBpcyBhbHdheXMgZ29pbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYmUgb24gdGhlIGFjdHVhbCBtb2RlbCBvYmplY3QgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN1YnNlcXVlbnQgb25lcyBhcmUgb24gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGF0LiBlLmcuIGZvcmllbmcga2V5IG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBnZXRhdHRyKG1vZGVsX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZGF0YSA9IGdldGF0dHIobW9kZWxfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmZpZWxkKQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBnZXRhdHRyKG1vZGVsX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xbJ2ZpZWxkX25hbWUnXSkKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBtaWdodCBoYXZlIGEgbW9kZWwgZnVuY3Rpb24gYXMgdGhlIGZpZWxkIHNvCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgaXQgdG8gcmV0dXJuIHRoZSBkYXRhIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2RlbF9kYXRhLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gbW9kZWxfZGF0YSgpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkX2RhdGFbY29sWydmaWVsZF9uYW1lJ11dID0gbW9kZWxfZGF0YQogCiAgICAgICAgICAgICAgICAgZGF0YVsncm93cyddLmFwcGVuZChyZXF1aXJlZF9kYXRhKQogCiAgICAgICAgIGV4Y2VwdCBGaWVsZEVycm9yOgogICAgICAgICAgICAgIyBwYXNzICBpdCB0byB0aGUgdXNlciAtIHByb2dyYW1taW5nLWVycm9yIGhlcmUKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKGRhdGEsIGluZGVudD0yLCBkZWZhdWx0PW9ianRvanNvbikKKworICAgICAgICBkYXRhID0ganNvbi5kdW1wcyhkYXRhLCBpbmRlbnQ9MiwgY2xzPURqYW5nb0pTT05FbmNvZGVyKQogICAgICAgICBjYWNoZS5zZXQoY2FjaGVfbmFtZSwgZGF0YSwgNjAqMzApCiAKICAgICAgICAgcmV0dXJuIGRhdGEKIAogCi0KIGNsYXNzIFRvYXN0ZXJUeXBlQWhlYWQoVmlldyk6CiAgICAgIiIiIEEgdHlwZWFoZWFkIG1lY2hhbmlzbSB0byBzdXBwb3J0IHRoZSBmcm9udCBlbmQgdHlwZWFoZWFkIHdpZGdldHMgIiIiCiAgICAgTUFYX1JFU1VMVFMgPSA2CkBAIC0zODgsMzQgKzQyOCwxNDIgQEAKICAgICAgICAgZXJyb3IgPSAib2siCiAKICAgICAgICAgc2VhcmNoX3Rlcm0gPSByZXF1ZXN0LkdFVC5nZXQoInNlYXJjaCIsIE5vbmUpCi0gICAgICAgIGlmIHNlYXJjaF90ZXJtID09IE5vbmU6CisgICAgICAgIGlmIHNlYXJjaF90ZXJtIGlzIE5vbmU6CiAgICAgICAgICAgICAjIFdlIGdvdCBubyBzZWFyY2ggdmFsdWUgc28gcmV0dXJuIGVtcHR5IHJlcG9uc2UKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZSh7J2Vycm9yJyA6IGVycm9yICwgJ3Jlc3VsdHMnOiBbXX0pCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoeydlcnJvcic6IGVycm9yLCAncmVzdWx0cyc6IFtdfSkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHByaiA9IE5vbmUKIAotICAgICAgICByZXN1bHRzID0gc2VsZi5hcHBseV9zZWFyY2goc2VhcmNoX3Rlcm0sIHByaiwgcmVxdWVzdClbOlRvYXN0ZXJUeXBlQWhlYWQuTUFYX1JFU1VMVFNdCisgICAgICAgIHJlc3VsdHMgPSBzZWxmLmFwcGx5X3NlYXJjaChzZWFyY2hfdGVybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QpWzpUb2FzdGVyVHlwZUFoZWFkLk1BWF9SRVNVTFRTXQogCiAgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+IDA6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9maWVsZHMocmVzdWx0c1swXSkKLSAgICAgICAgICAgIGV4Y2VwdCBNaXNzaW5nRmllbGRzRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgc2VsZi5NaXNzaW5nRmllbGRzRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgZXJyb3IgPSBlCiAKLSAgICAgICAgZGF0YSA9IHsgJ3Jlc3VsdHMnIDogcmVzdWx0cywKLSAgICAgICAgICAgICAgICAnZXJyb3InIDogZXJyb3IsCi0gICAgICAgICAgICAgICB9CisgICAgICAgIGRhdGEgPSB7J3Jlc3VsdHMnOiByZXN1bHRzLAorICAgICAgICAgICAgICAgICdlcnJvcic6IGVycm9yfQogCiAgICAgICAgIHJldHVybiByZXNwb25zZShkYXRhKQogCiAgICAgZGVmIHZhbGlkYXRlX2ZpZWxkcyhzZWxmLCByZXN1bHQpOgotICAgICAgICBpZiAnbmFtZScgaW4gcmVzdWx0ID09IEZhbHNlIG9yICdkZXRhaWwnIGluIHJlc3VsdCA9PSBGYWxzZToKLSAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdGaWVsZHNFeGNlcHRpb24oIm5hbWUgYW5kIGRldGFpbCBhcmUgcmVxdWlyZWQgZmllbGRzIikKKyAgICAgICAgaWYgJ25hbWUnIGluIHJlc3VsdCBpcyBGYWxzZSBvciAnZGV0YWlsJyBpbiByZXN1bHQgaXMgRmFsc2U6CisgICAgICAgICAgICByYWlzZSBzZWxmLk1pc3NpbmdGaWVsZHNFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIm5hbWUgYW5kIGRldGFpbCBhcmUgcmVxdWlyZWQgZmllbGRzIikKIAogICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaik6CiAgICAgICAgICIiIiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBzZWFyY2guIFJldHVybiBhbiBhcnJheSBvZgogICAgICAgICBkaWN0aW9uYXJpZXMgd2l0aCBhIG1pbml1bSBvZiBhIG5hbWUgYW5kIGRldGFpbCBmaWVsZCIiIgogICAgICAgICBwYXNzCisKKworY2xhc3MgTW9zdFJlY2VudEJ1aWxkc1ZpZXcoVmlldyk6CisgICAgZGVmIF93YXNfeWVzdGVyZGF5X29yX2VhcmxpZXIoc2VsZiwgY29tcGxldGVkX29uKToKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgZGVsdGEgPSBub3cgLSBjb21wbGV0ZWRfb24KKworICAgICAgICBpZiBkZWx0YS5kYXlzID49IDE6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgYnVpbGRzIGluIEpTT04gZm9ybWF0LgorICAgICAgICAiIiIKKyAgICAgICAgcHJvamVjdCA9IE5vbmUKKworICAgICAgICBwcm9qZWN0X2lkID0gcmVxdWVzdC5HRVQuZ2V0KCdwcm9qZWN0X2lkJywgTm9uZSkKKyAgICAgICAgaWYgcHJvamVjdF9pZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1wcm9qZWN0X2lkKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgaWYgcHJvamVjdCBsb29rdXAgZmFpbHMsIGFzc3VtZSBubyBwcm9qZWN0CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlY2VudF9idWlsZF9vYmpzID0gQnVpbGQuZ2V0X3JlY2VudChwcm9qZWN0KQorICAgICAgICByZWNlbnRfYnVpbGRzID0gW10KKworICAgICAgICBmb3IgYnVpbGRfb2JqIGluIHJlY2VudF9idWlsZF9vYmpzOgorICAgICAgICAgICAgZGFzaGJvYXJkX3VybCA9IHJldmVyc2UoJ2J1aWxkZGFzaGJvYXJkJywgYXJncz0oYnVpbGRfb2JqLnBrLCkpCisgICAgICAgICAgICBidWlsZHRpbWVfdXJsID0gcmV2ZXJzZSgnYnVpbGR0aW1lJywgYXJncz0oYnVpbGRfb2JqLnBrLCkpCisgICAgICAgICAgICByZWJ1aWxkX3VybCA9IFwKKyAgICAgICAgICAgICAgICByZXZlcnNlKCd4aHJfYnVpbGRyZXF1ZXN0JywgYXJncz0oYnVpbGRfb2JqLnByb2plY3QucGssKSkKKyAgICAgICAgICAgIGNhbmNlbF91cmwgPSBcCisgICAgICAgICAgICAgICAgcmV2ZXJzZSgneGhyX2J1aWxkcmVxdWVzdCcsIGFyZ3M9KGJ1aWxkX29iai5wcm9qZWN0LnBrLCkpCisKKyAgICAgICAgICAgIGJ1aWxkID0ge30KKyAgICAgICAgICAgIGJ1aWxkWydpZCddID0gYnVpbGRfb2JqLnBrCisgICAgICAgICAgICBidWlsZFsnZGFzaGJvYXJkX3VybCddID0gZGFzaGJvYXJkX3VybAorCisgICAgICAgICAgICBidWlsZHJlcXVlc3RfaWQgPSBOb25lCisgICAgICAgICAgICBpZiBoYXNhdHRyKGJ1aWxkX29iaiwgJ2J1aWxkcmVxdWVzdCcpOgorICAgICAgICAgICAgICAgIGJ1aWxkcmVxdWVzdF9pZCA9IGJ1aWxkX29iai5idWlsZHJlcXVlc3QucGsKKyAgICAgICAgICAgIGJ1aWxkWydidWlsZHJlcXVlc3RfaWQnXSA9IGJ1aWxkcmVxdWVzdF9pZAorCisgICAgICAgICAgICBidWlsZFsncmVjaXBlc19wYXJzZWRfcGVyY2VudGFnZSddID0gXAorICAgICAgICAgICAgICAgIGludCgoYnVpbGRfb2JqLnJlY2lwZXNfcGFyc2VkIC8KKyAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX29iai5yZWNpcGVzX3RvX3BhcnNlKSAqIDEwMCkKKworICAgICAgICAgICAgdGFza3NfY29tcGxldGVfcGVyY2VudGFnZSA9IDAKKyAgICAgICAgICAgIGlmIGJ1aWxkX29iai5vdXRjb21lIGluIChCdWlsZC5TVUNDRUVERUQsIEJ1aWxkLkZBSUxFRCk6CisgICAgICAgICAgICAgICAgdGFza3NfY29tcGxldGVfcGVyY2VudGFnZSA9IDEwMAorICAgICAgICAgICAgZWxpZiBidWlsZF9vYmoub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUzoKKyAgICAgICAgICAgICAgICB0YXNrc19jb21wbGV0ZV9wZXJjZW50YWdlID0gYnVpbGRfb2JqLmNvbXBsZXRlcGVyKCkKKyAgICAgICAgICAgIGJ1aWxkWyd0YXNrc19jb21wbGV0ZV9wZXJjZW50YWdlJ10gPSB0YXNrc19jb21wbGV0ZV9wZXJjZW50YWdlCisKKyAgICAgICAgICAgIGJ1aWxkWydzdGF0ZSddID0gYnVpbGRfb2JqLmdldF9zdGF0ZSgpCisKKyAgICAgICAgICAgIGJ1aWxkWydlcnJvcnMnXSA9IGJ1aWxkX29iai5lcnJvcnMuY291bnQoKQorICAgICAgICAgICAgYnVpbGRbJ2Rhc2hib2FyZF9lcnJvcnNfdXJsJ10gPSBkYXNoYm9hcmRfdXJsICsgJyNlcnJvcnMnCisKKyAgICAgICAgICAgIGJ1aWxkWyd3YXJuaW5ncyddID0gYnVpbGRfb2JqLndhcm5pbmdzLmNvdW50KCkKKyAgICAgICAgICAgIGJ1aWxkWydkYXNoYm9hcmRfd2FybmluZ3NfdXJsJ10gPSBkYXNoYm9hcmRfdXJsICsgJyN3YXJuaW5ncycKKworICAgICAgICAgICAgYnVpbGRbJ2J1aWxkdGltZSddID0gc2VjdG9obXMoYnVpbGRfb2JqLnRpbWVzcGVudF9zZWNvbmRzKQorICAgICAgICAgICAgYnVpbGRbJ2J1aWxkdGltZV91cmwnXSA9IGJ1aWxkdGltZV91cmwKKworICAgICAgICAgICAgYnVpbGRbJ3JlYnVpbGRfdXJsJ10gPSByZWJ1aWxkX3VybAorICAgICAgICAgICAgYnVpbGRbJ2NhbmNlbF91cmwnXSA9IGNhbmNlbF91cmwKKworICAgICAgICAgICAgYnVpbGRbJ2lzX2RlZmF1bHRfcHJvamVjdF9idWlsZCddID0gYnVpbGRfb2JqLnByb2plY3QuaXNfZGVmYXVsdAorCisgICAgICAgICAgICBidWlsZFsnYnVpbGRfdGFyZ2V0c19qc29uJ10gPSBcCisgICAgICAgICAgICAgICAgdGVtcGxhdGVfanNvbihnZXRfdGFza3MoYnVpbGRfb2JqLnRhcmdldF9zZXQuYWxsKCkpKQorCisgICAgICAgICAgICAjIGNvbnZlcnQgY29tcGxldGVkX29uIHRpbWUgdG8gdXNlcidzIHRpbWV6b25lCisgICAgICAgICAgICBjb21wbGV0ZWRfb24gPSB0aW1lem9uZS5sb2NhbHRpbWUoYnVpbGRfb2JqLmNvbXBsZXRlZF9vbikKKworICAgICAgICAgICAgY29tcGxldGVkX29uX3RlbXBsYXRlID0gJyVIOiVNJworICAgICAgICAgICAgaWYgc2VsZi5fd2FzX3llc3RlcmRheV9vcl9lYXJsaWVyKGNvbXBsZXRlZF9vbik6CisgICAgICAgICAgICAgICAgY29tcGxldGVkX29uX3RlbXBsYXRlID0gJyVkLyVtLyVZICcgKyBjb21wbGV0ZWRfb25fdGVtcGxhdGUKKyAgICAgICAgICAgIGJ1aWxkWydjb21wbGV0ZWRfb24nXSA9IGNvbXBsZXRlZF9vbi5zdHJmdGltZSgKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb25fdGVtcGxhdGUpCisKKyAgICAgICAgICAgIHRhcmdldHMgPSBbXQorICAgICAgICAgICAgdGFyZ2V0X29ianMgPSBidWlsZF9vYmouZ2V0X3NvcnRlZF90YXJnZXRfbGlzdCgpCisgICAgICAgICAgICBmb3IgdGFyZ2V0X29iaiBpbiB0YXJnZXRfb2JqczoKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXRfb2JqLnRhc2s6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHRhcmdldF9vYmoudGFyZ2V0ICsgJzonICsgdGFyZ2V0X29iai50YXNrKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHRhcmdldF9vYmoudGFyZ2V0KQorICAgICAgICAgICAgYnVpbGRbJ3RhcmdldHMnXSA9ICcgJy5qb2luKHRhcmdldHMpCisKKyAgICAgICAgICAgICMgYWJicmV2aWF0ZWQgZm9ybSBvZiB0aGUgZnVsbCB0YXJnZXQgbGlzdAorICAgICAgICAgICAgYWJicmV2aWF0ZWRfdGFyZ2V0cyA9ICcnCisgICAgICAgICAgICBudW1fdGFyZ2V0cyA9IGxlbih0YXJnZXRzKQorICAgICAgICAgICAgaWYgbnVtX3RhcmdldHMgPiAwOgorICAgICAgICAgICAgICAgIGFiYnJldmlhdGVkX3RhcmdldHMgPSB0YXJnZXRzWzBdCisgICAgICAgICAgICBpZiBudW1fdGFyZ2V0cyA+IDE6CisgICAgICAgICAgICAgICAgYWJicmV2aWF0ZWRfdGFyZ2V0cyArPSAoJyArJXMnICUgKG51bV90YXJnZXRzIC0gMSkpCisgICAgICAgICAgICBidWlsZFsndGFyZ2V0c19hYmJyZXZpYXRlZCddID0gYWJicmV2aWF0ZWRfdGFyZ2V0cworCisgICAgICAgICAgICByZWNlbnRfYnVpbGRzLmFwcGVuZChidWlsZCkKKworICAgICAgICByZXR1cm4gSnNvblJlc3BvbnNlKHJlY2VudF9idWlsZHMsIHNhZmU9RmFsc2UpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkZGVsZXRlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZGRlbGV0ZS5weQppbmRleCBmZjkzZTU0Li4wYmVmOGQ0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkZGVsZXRlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRkZWxldGUucHkKQEAgLTE1LDcgKzE1LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBiID0gQnVpbGQub2JqZWN0cy5nZXQocGsgPSBiaWQpCiAgICAgICAgICAgICBleGNlcHQgT2JqZWN0RG9lc05vdEV4aXN0OgotICAgICAgICAgICAgICAgIHByaW50ICdidWlsZCAlcyBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcuLi4nICUoYmlkKQorICAgICAgICAgICAgICAgIHByaW50KCdidWlsZCAlcyBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcuLi4nICUoYmlkKSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgIyB0aGVvcmV0aWNhbGx5LCBqdXN0IGIuZGVsZXRlKCkgd291bGQgc3VmZmljZQogICAgICAgICAgICAgIyBob3dldmVyIFNRTGl0ZSBydW5zIGludG8gcHJvYmxlbXMgd2hlbiB5b3UgdHJ5IHRvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkc2xpc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkc2xpc3QucHkKaW5kZXggY2FkOTg3Zi4uOGRmZWYwYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRzbGlzdC5weQpAQCAtMTAsNCArMTAsNCBAQAogCiAgICAgZGVmIGhhbmRsZV9ub2FyZ3Moc2VsZiwqKm9wdGlvbnMpOgogICAgICAgICBmb3IgYiBpbiBCdWlsZC5vYmplY3RzLmFsbCgpOgotICAgICAgICAgICAgcHJpbnQgIiVkOiAlcyAlcyAlcyIgJSAoYi5waywgYi5tYWNoaW5lLCBiLmRpc3RybywgIiwiLmpvaW4oW3gudGFyZ2V0IGZvciB4IGluIGIudGFyZ2V0X3NldC5hbGwoKV0pKQorICAgICAgICAgICAgcHJpbnQoIiVkOiAlcyAlcyAlcyIgJSAoYi5waywgYi5tYWNoaW5lLCBiLmRpc3RybywgIiwiLmpvaW4oW3gudGFyZ2V0IGZvciB4IGluIGIudGFyZ2V0X3NldC5hbGwoKV0pKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvZ2V0LWRidXJsLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9nZXQtZGJ1cmwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjNlYjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9nZXQtZGJ1cmwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWZyb20gdG9hc3Rlcm1haW4uc2V0dGluZ3MgaW1wb3J0IGdldERBVEFCQVNFX1VSTAotZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IE5vQXJnc0NvbW1hbmQKLQotY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKLSAgICBhcmdzICAgID0gIiIKLSAgICBoZWxwICAgID0gImdldCBkYXRhYmFzZSB1cmwiCi0KLSAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCoqb3B0aW9ucyk6Ci0gICAgICAgIHByaW50IGdldERBVEFCQVNFX1VSTCgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkKaW5kZXggNzFhNDhlOS4uNmI0NTBiYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9wZXJmLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvcGVyZi5weQpAQCAtMjUsNyArMjUsNyBAQAogCQkJaW5mbyA9IHNlbGYudXJsX2luZm8oZnVsbF91cmwpCiAJCQlzdGF0dXNfY29kZSA9IGluZm9bMF0KIAkJCWxvYWRfdGltZSA9IGluZm9bMV0KLQkJCXByaW50ICdUcnlpbmcgXCcnICsgZnVsbF91cmwgKyAnXCcsICcgKyBzdHIoc3RhdHVzX2NvZGUpICsgJywgJyArIHN0cihsb2FkX3RpbWUpCisJCQlwcmludCgnVHJ5aW5nIFwnJyArIGZ1bGxfdXJsICsgJ1wnLCAnICsgc3RyKHN0YXR1c19jb2RlKSArICcsICcgKyBzdHIobG9hZF90aW1lKSkKIAogICAgIGRlZiBnZXRfZnVsbF91cmwoc2VsZiwgdXJsX3BhdHQsIHVybF9yb290X3Jlcyk6CiAJZnVsbF91cmwgPSBzdHIodXJsX3BhdHQpLnNwbGl0KCdeJylbMV0ucmVwbGFjZSgnJD4nLCAnJykucmVwbGFjZSgnKD9QPGZpbGVfcGF0aD4oPzovWycsICcvYmluL2J1c3lib3gnKS5yZXBsYWNlKCcuKicsICcnKQpAQCAtNTQsNSArNTQsNSBAQAogCiAgICAgZGVmIGVycm9yKHNlbGYsICphcmdzKToKIAlmb3IgYXJnIGluIGFyZ3M6Ci0JICAgIHByaW50ID4+c3lzLnN0ZGVyciwgYXJnLAotCXByaW50ID4+c3lzLnN0ZGVycgorCSAgICBwcmludChhcmcsIGVuZD0nICcsIGZpbGU9c3lzLnN0ZGVycikKKwlwcmludChmaWxlPXN5cy5zdGRlcnIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CmluZGV4IDc0YWI2MDQuLjNkZmEyYjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CkBAIC0yMSw3ICsyMSw3IEBACiAKICMgRGphbmdvIHNldHRpbmdzIGZvciBUb2FzdGVyIHByb2plY3QuCiAKLWltcG9ydCBvcywgcmUKK2ltcG9ydCBvcwogCiBERUJVRyA9IFRydWUKIFRFTVBMQVRFX0RFQlVHID0gREVCVUcKQEAgLTM4LDE0ICszOCwxOSBAQAogCiBNQU5BR0VSUyA9IEFETUlOUwogCitUT0FTVEVSX1NRTElURV9ERUZBVUxUX0RJUiA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnVE9BU1RFUl9ESVInLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGQnKQorCiBEQVRBQkFTRVMgPSB7CiAgICAgJ2RlZmF1bHQnOiB7Ci0gICAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJhY2tlbmRzLnNxbGl0ZTMnLCAjIEFkZCAncG9zdGdyZXNxbF9wc3ljb3BnMicsICdteXNxbCcsICdzcWxpdGUzJyBvciAnb3JhY2xlJy4KLSAgICAgICAgJ05BTUUnOiAndG9hc3Rlci5zcWxpdGUnLCAgICAgICAgICAgICAgICAgICAgICAjIE9yIHBhdGggdG8gZGF0YWJhc2UgZmlsZSBpZiB1c2luZyBzcWxpdGUzLgorICAgICAgICAjIEFkZCAncG9zdGdyZXNxbF9wc3ljb3BnMicsICdteXNxbCcsICdzcWxpdGUzJyBvciAnb3JhY2xlJy4KKyAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsCisgICAgICAgICMgREIgbmFtZSBvciBmdWxsIHBhdGggdG8gZGF0YWJhc2UgZmlsZSBpZiB1c2luZyBzcWxpdGUzLgorICAgICAgICAnTkFNRSc6ICIlcy90b2FzdGVyLnNxbGl0ZSIgJSBUT0FTVEVSX1NRTElURV9ERUZBVUxUX0RJUiwKICAgICAgICAgJ1VTRVInOiAnJywKICAgICAgICAgJ1BBU1NXT1JEJzogJycsCi0gICAgICAgICdIT1NUJzogJzEyNy4wLjAuMScsICAgICAgICAgICAgICAgICAgICAgICMgRW1wdHkgZm9yIGxvY2FsaG9zdCB0aHJvdWdoIGRvbWFpbiBzb2NrZXRzIG9yICcxMjcuMC4wLjEnIGZvciBsb2NhbGhvc3QgdGhyb3VnaCBUQ1AuCi0gICAgICAgICdQT1JUJzogJzMzMDYnLCAgICAgICAgICAgICAgICAgICAgICAjIFNldCB0byBlbXB0eSBzdHJpbmcgZm9yIGRlZmF1bHQuCisgICAgICAgICMnSE9TVCc6ICcxMjcuMC4wLjEnLCAjIGUuZy4gbXlzcWwgc2VydmVyCisgICAgICAgICMnUE9SVCc6ICczMzA2JywgIyBlLmcuIG15c3FsIHBvcnQKICAgICB9CiB9CiAKQEAgLTU1LDU4ICs2MCw2IEBACiBpZiAnc3FsaXRlJyBpbiBEQVRBQkFTRVNbJ2RlZmF1bHQnXVsnRU5HSU5FJ106CiAgICAgREFUQUJBU0VTWydkZWZhdWx0J11bJ09QVElPTlMnXSA9IHsgJ3RpbWVvdXQnOiAyMCB9CiAKLSMgUmVpbnRlcnByZXQgZGF0YWJhc2Ugc2V0dGluZ3MgaWYgd2UgaGF2ZSBEQVRBQkFTRV9VUkwgZW52aXJvbm1lbnQgdmFyaWFibGUgZGVmaW5lZAotCi1pZiAnREFUQUJBU0VfVVJMJyBpbiBvcy5lbnZpcm9uOgotICAgIGRidXJsID0gb3MuZW52aXJvblsnREFUQUJBU0VfVVJMJ10KLQotICAgIGlmIGRidXJsLnN0YXJ0c3dpdGgoJ3NxbGl0ZTM6Ly8nKToKLSAgICAgICAgcmVzdWx0ID0gcmUubWF0Y2goJ3NxbGl0ZTM6Ly8oLiopJywgZGJ1cmwpCi0gICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFUlJPUjogQ291bGQgbm90IHJlYWQgc3FsaXRlIGRhdGFiYXNlIHVybDogJXMiICUgZGJ1cmwpCi0gICAgICAgIERBVEFCQVNFU1snZGVmYXVsdCddID0gewotICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsCi0gICAgICAgICAgICAnTkFNRSc6IHJlc3VsdC5ncm91cCgxKSwKLSAgICAgICAgICAgICdVU0VSJzogJycsCi0gICAgICAgICAgICAnUEFTU1dPUkQnOiAnJywKLSAgICAgICAgICAgICdIT1NUJzogJycsCi0gICAgICAgICAgICAnUE9SVCc6ICcnLAotICAgICAgICB9Ci0gICAgZWxpZiBkYnVybC5zdGFydHN3aXRoKCdteXNxbDovLycpOgotICAgICAgICAjIFVSTCBtdXN0IGJlIGluIHRoaXMgZm9ybTogbXlzcWw6Ly91c2VyOnBhc3NAaG9zdDpwb3J0L25hbWUKLSAgICAgICAgcmVzdWx0ID0gcmUubWF0Y2gociJteXNxbDovLyhbXjpdKik6KFteQF0qKUAoW146XSopOihcZCopLyhbXi9dKikiLCBkYnVybCkKLSAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVSUk9SOiBDb3VsZCBub3QgcmVhZCBteXNxbCBkYXRhYmFzZSB1cmw6ICVzIiAlIGRidXJsKQotICAgICAgICBEQVRBQkFTRVNbJ2RlZmF1bHQnXSA9IHsKLSAgICAgICAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJhY2tlbmRzLm15c3FsJywKLSAgICAgICAgICAgICdOQU1FJzogcmVzdWx0Lmdyb3VwKDUpLAotICAgICAgICAgICAgJ1VTRVInOiByZXN1bHQuZ3JvdXAoMSksCi0gICAgICAgICAgICAnUEFTU1dPUkQnOiByZXN1bHQuZ3JvdXAoMiksCi0gICAgICAgICAgICAnSE9TVCc6IHJlc3VsdC5ncm91cCgzKSwKLSAgICAgICAgICAgICdQT1JUJzogcmVzdWx0Lmdyb3VwKDQpLAotICAgICAgICB9Ci0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogUGxlYXNlIGltcGxlbWVudCBtaXNzaW5nIGRhdGFiYXNlIHVybCBzY2hlbWEgZm9yIHVybDogJXMiICUgZGJ1cmwpCi0KLQotIyBBbGxvd3MgY3VycmVudCBkYXRhYmFzZSBzZXR0aW5ncyB0byBiZSBleHBvcnRlZCBhcyBhIERBVEFCQVNFX1VSTCBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZQotCi1kZWYgZ2V0REFUQUJBU0VfVVJMKCk6Ci0gICAgZCA9IERBVEFCQVNFU1snZGVmYXVsdCddCi0gICAgaWYgZFsnRU5HSU5FJ10gPT0gJ2RqYW5nby5kYi5iYWNrZW5kcy5zcWxpdGUzJzoKLSAgICAgICAgaWYgZFsnTkFNRSddID09ICc6bWVtb3J5Oic6Ci0gICAgICAgICAgICByZXR1cm4gJ3NxbGl0ZTM6Ly86bWVtb3J5OicKLSAgICAgICAgZWxpZiBkWydOQU1FJ10uc3RhcnRzd2l0aCgiLyIpOgotICAgICAgICAgICAgcmV0dXJuICdzcWxpdGUzOi8vJyArIGRbJ05BTUUnXQotICAgICAgICByZXR1cm4gInNxbGl0ZTM6Ly8iICsgb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBkWydOQU1FJ10pCi0KLSAgICBlbGlmIGRbJ0VOR0lORSddID09ICdkamFuZ28uZGIuYmFja2VuZHMubXlzcWwnOgotICAgICAgICByZXR1cm4gIm15c3FsOi8vIiArIGRbJ1VTRVInXSArICI6IiArIGRbJ1BBU1NXT1JEJ10gKyAiQCIgKyBkWydIT1NUJ10gKyAiOiIgKyBkWydQT1JUJ10gKyAiLyIgKyBkWydOQU1FJ10KLQotICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IFBsZWFzZSBpbXBsZW1lbnQgbWlzc2luZyBkYXRhYmFzZSB1cmwgc2NoZW1hIGZvciBlbmdpbmU6ICVzIiAlIGRbJ0VOR0lORSddKQotCi0KLQogIyBIb3N0cy9kb21haW4gbmFtZXMgdGhhdCBhcmUgdmFsaWQgZm9yIHRoaXMgc2l0ZTsgcmVxdWlyZWQgaWYgREVCVUcgaXMgRmFsc2UKICMgU2VlIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjUvcmVmL3NldHRpbmdzLyNhbGxvd2VkLWhvc3RzCiBBTExPV0VEX0hPU1RTID0gW10KQEAgLTEzNCwxNyArODcsMTYgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpbXBvcnQgcHl0egogICAgICAgICAgICAgICAgIGZyb20gcHl0ei5leGNlcHRpb25zIGltcG9ydCBVbmtub3duVGltZVpvbmVFcnJvcgotICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGlmIHB5dHoudGltZXpvbmUoem9uZW5hbWUpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oZmlsZXBhdGgpLnJlYWQoKSkuaGV4ZGlnZXN0KCldID0gem9uZW5hbWUKLSAgICAgICAgICAgICAgICBleGNlcHQgVW5rbm93blRpbWVab25lRXJyb3IsIFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB6b25lZmlsZWxpc3RbaGFzaGxpYi5tZDUob3BlbihmaWxlcGF0aCwgJ3JiJykucmVhZCgpKS5oZXhkaWdlc3QoKV0gPSB6b25lbmFtZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmtub3duVGltZVpvbmVFcnJvciBhcyBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCB0aW1lem9uZSBmYWlsdXJlcyBoZXJlLCBqdXN0IG1vdmUgb3ZlcgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oZmlsZXBhdGgpLnJlYWQoKSkuaGV4ZGlnZXN0KCldID0gem9uZW5hbWUKKyAgICAgICAgICAgICAgICB6b25lZmlsZWxpc3RbaGFzaGxpYi5tZDUob3BlbihmaWxlcGF0aCwgJ3JiJykucmVhZCgpKS5oZXhkaWdlc3QoKV0gPSB6b25lbmFtZQogCi0gICAgVElNRV9aT05FID0gem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oJy9ldGMvbG9jYWx0aW1lJykucmVhZCgpKS5oZXhkaWdlc3QoKV0KKyAgICBUSU1FX1pPTkUgPSB6b25lZmlsZWxpc3RbaGFzaGxpYi5tZDUob3BlbignL2V0Yy9sb2NhbHRpbWUnLCAncmInKS5yZWFkKCkpLmhleGRpZ2VzdCgpXQogCiAjIExhbmd1YWdlIGNvZGUgZm9yIHRoaXMgaW5zdGFsbGF0aW9uLiBBbGwgY2hvaWNlcyBjYW4gYmUgZm91bmQgaGVyZToKICMgaHR0cDovL3d3dy5pMThuZ3V5LmNvbS91bmljb2RlL2xhbmd1YWdlLWlkZW50aWZpZXJzLmh0bWwKQEAgLTMyMSw3ICsyNzMsNyBAQAogZm9yIHQgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoY3VycmVudGRpcikpOgogICAgIG1vZHVsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRbMF0pCiAgICAgI2lmIHdlIGhhdmUgYSB2aXJ0dWFsZW52IHNraXAgaXQgdG8gYXZvaWQgaW5jb3JyZWN0IGltcG9ydHMKLSAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ1ZJUlRVQUxfRU5WJykgYW5kIG9zLmVudmlyb25bJ1ZJUlRVQUxfRU5WJ10gaW4gdFswXToKKyAgICBpZiAnVklSVFVBTF9FTlYnIGluIG9zLmVudmlyb24gYW5kIG9zLmVudmlyb25bJ1ZJUlRVQUxfRU5WJ10gaW4gdFswXToKICAgICAgICAgY29udGludWUKIAogICAgIGlmICgidmlld3MucHkiIGluIHRbMl0gb3IgIm1vZGVscy5weSIgaW4gdFsyXSkgYW5kIG5vdCBtb2R1bGVuYW1lIGluIElOU1RBTExFRF9BUFBTOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vc2V0dGluZ3NfdGVzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMjcxMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzX3Rlc3QucHkKQEAgLTAsMCArMSw0MSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgRGphbmdvIHNldHRpbmdzIGZvciBUb2FzdGVyIHByb2plY3QuCisKKyMgU2V0dGluZ3Mgb3ZlcmxheSB0byB1c2UgZm9yIHJ1bm5pbmcgdGVzdHMKKyMgREpBTkdPX1NFVFRJTkdTX01PRFVMRT10b2FzdGVybWFpbi5zZXR0aW5ncy10ZXN0CisKK2Zyb20gdG9hc3Rlcm1haW4uc2V0dGluZ3MgaW1wb3J0ICoKKworREVCVUcgPSBUcnVlCitURU1QTEFURV9ERUJVRyA9IERFQlVHCisKK0RBVEFCQVNFUyA9IHsKKyAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsCisgICAgICAgICdOQU1FJzogJy90bXAvdG9hc3Rlci10ZXN0LWRiLnNxbGl0ZScsCisgICAgICAgICdURVNUJzogeworICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsCisgICAgICAgICAgICAnTkFNRSc6ICcvdG1wL3RvYXN0ZXItdGVzdC1kYi5zcWxpdGUnLAorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3VybHMucHkKaW5kZXggNTM0Njc5ZC4uMWY4NTk5ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi91cmxzLnB5CkBAIC03MSw3ICs3MSw3IEBACiBjdXJyZW50ZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogZm9yIHQgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoY3VycmVudGRpcikpOgogICAgICNpZiB3ZSBoYXZlIGEgdmlydHVhbGVudiBza2lwIGl0IHRvIGF2b2lkIGluY29ycmVjdCBpbXBvcnRzCi0gICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdWSVJUVUFMX0VOVicpIGFuZCBvcy5lbnZpcm9uWydWSVJUVUFMX0VOViddIGluIHRbMF06CisgICAgaWYgJ1ZJUlRVQUxfRU5WJyBpbiBvcy5lbnZpcm9uIGFuZCBvcy5lbnZpcm9uWydWSVJUVUFMX0VOViddIGluIHRbMF06CiAgICAgICAgIGNvbnRpbnVlCiAKICAgICBpZiAidXJscy5weSIgaW4gdFsyXSBhbmQgdFswXSAhPSBjdXJyZW50ZGlyOgpAQCAtODQsNyArODQsNyBAQAogICAgICAgICBpZiBub3QgY29uZmxpY3Q6CiAgICAgICAgICAgICB1cmxwYXR0ZXJucy5pbnNlcnQoMCwgdXJsKHInXicgKyBtb2R1bGVuYW1lICsgJy8nLCBpbmNsdWRlICggbW9kdWxlbmFtZSArICcudXJscycpKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJNb2R1bGUgXCclc1wnIGhhcyBhIHJlZ2V4cCBjb25mbGljdCwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdXJscGF0dGVybnMiICUgbW9kdWxlbmFtZSkKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJNb2R1bGUgXCclc1wnIGhhcyBhIHJlZ2V4cCBjb25mbGljdCwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdXJscGF0dGVybnMiICUgbW9kdWxlbmFtZSkKIAogZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKICNsb2dnZXIuZGVidWcoInVybHBhdHRlcm5zIGxpc3QgJXMiLCBwZm9ybWF0KHVybHBhdHRlcm5zKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dAppbmRleCAwZThjNzQyLi5lNjFjOGUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0CkBAIC0xLDQgKzEsMyBAQAogRGphbmdvPjEuOCw8MS45Ci1hcmdwYXJzZT09MS4yLjEKLXdzZ2lyZWY9PTAuMS4yCiBiZWF1dGlmdWxzb3VwND49NC40LjAKK3B5dHoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vTWFrZWZpbGUKaW5kZXggNDE4ZDNjYS4uOTA3N2M4MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vTWFrZWZpbGUKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKICAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBcCiAgICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCi0gICAgICAgICAgIGZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nIFwKICAgICAgICAgICAgZmlndXJlcy9kZXZ0b29sLWFkZC1mbG93LnBuZyBmaWd1cmVzL2RldnRvb2wtbW9kaWZ5LWZsb3cucG5nIFwKICAgICAgICAgICAgZmlndXJlcy9kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcgXAogICAgICAgICAgICBlY2xpcHNlCkBAIC0yNDksNyArMjQ5LDggQEAKIAlmaWd1cmVzL2NvbXBhdGlibGUtbGF5ZXJzLnBuZyBmaWd1cmVzL2ltcG9ydC1sYXllci5wbmcgZmlndXJlcy9uZXctcHJvamVjdC5wbmcgXAogCWZpZ3VyZXMvc2RrLWVudmlyb25tZW50LnBuZyBmaWd1cmVzL3Nkay1pbnN0YWxsZWQtc3RhbmRhcmQtc2RrLWRpcmVjdG9yeS5wbmcgXAogCWZpZ3VyZXMvc2RrLWRldnRvb2wtYWRkLWZsb3cucG5nIGZpZ3VyZXMvc2RrLWluc3RhbGxlZC1leHRlbnNpYmxlLXNkay1kaXJlY3RvcnkucG5nIFwKLQlmaWd1cmVzL3Nkay1kZXZ0b29sLW1vZGlmeS1mbG93LnBuZyBmaWd1cmVzL3Nkay1lY2xpcHNlLWRldi1mbG93LnBuZworCWZpZ3VyZXMvc2RrLWRldnRvb2wtbW9kaWZ5LWZsb3cucG5nIGZpZ3VyZXMvc2RrLWVjbGlwc2UtZGV2LWZsb3cucG5nIFwKKwlmaWd1cmVzL3Nkay1kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcKIAllbmRpZgogCiBNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sCkBAIC0yNjksNyArMjcwLDggQEAKIAlmaWd1cmVzL2ltYWdlcy5wbmcgZmlndXJlcy9zZGsucG5nIGZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBcCiAJZmlndXJlcy9wYXRjaGluZy5wbmcgZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgXAogCWZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyBmaWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nIFwKLQlmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyBmaWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZworCWZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nIFwKKwlmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCiBNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCiBGSUdVUkVTID0gZmlndXJlcwogU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcwpAQCAtMjgyLDYgKzI4NCw3IEBACiAgICAgICAgICAgIGZpZ3VyZXMvc2RrLWVudmlyb25tZW50LnBuZyBmaWd1cmVzL3Nkay1pbnN0YWxsZWQtc3RhbmRhcmQtc2RrLWRpcmVjdG9yeS5wbmcgXAogCSAgIGZpZ3VyZXMvc2RrLWluc3RhbGxlZC1leHRlbnNpYmxlLXNkay1kaXJlY3RvcnkucG5nIGZpZ3VyZXMvc2RrLWRldnRvb2wtYWRkLWZsb3cucG5nIFwKIAkgICBmaWd1cmVzL3Nkay1kZXZ0b29sLW1vZGlmeS1mbG93LnBuZyBmaWd1cmVzL3Nkay1lY2xpcHNlLWRldi1mbG93LnBuZyBcCisJICAgZmlndXJlcy9zZGstZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nIFwKICAgICAgICAgICAgZWNsaXBzZQogTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQogRklHVVJFUyA9IGZpZ3VyZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKaW5kZXggYzAwYjM0NS4uMWJiZGI3MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKQEAgLTEwOCw2ICsxMDgsMTEgQEAKICAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE2PC9kYXRlPgogICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTY8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgPC9yZXZoaXN0b3J5PgogCiAgICAgPGNvcHlyaWdodD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKaW5kZXggYjA1NjJjNy4uNGQwYWNlMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKQEAgLTE0NjcsMjAgKzE0NjcsMTkgQEAKIAkgICAgIDUpIE1JUFMgICAgKDMyLWJpdCkKIAkgICAgIDYpIE1JUFM2NCAgKDY0LWJpdCkKICAgICAgMwotICAgICBXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuMSkga2VybmVsPyAoeS9uKSBbZGVmYXVsdDogeV0KKyAgICAgV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikgW2RlZmF1bHQ6IHldCiAgICAgIERvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSBbZGVmYXVsdDogeV0KLSAgICAgR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQuLi4KLSAgICAgUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjogW2RlZmF1bHQ6IHN0YW5kYXJkL2Jhc2VdCisgICAgIEdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjguZ2l0Li4uCisgICAgIFBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiBbZGVmYXVsdDogc3RhbmRhcmQvYmFzZV0KIAkgICAgIDEpIHN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzCiAJICAgICAyKSBzdGFuZGFyZC9iYXNlCi0JICAgICAzKSBzdGFuZGFyZC9iZWFnbGVib2FyZAotCSAgICAgNCkgc3RhbmRhcmQvYmVhZ2xlYm9uZQotCSAgICAgNSkgc3RhbmRhcmQvZWRnZXJvdXRlcgotCSAgICAgNikgc3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYgotCSAgICAgNykgc3RhbmRhcmQvbXRpLW1hbHRhMzIKLQkgICAgIDgpIHN0YW5kYXJkL210aS1tYWx0YTY0Ci0JICAgICA5KSBzdGFuZGFyZC9xZW11YXJtNjQKLQkgICAgIDEwKSBzdGFuZGFyZC9xZW11cHBjCisJICAgICAzKSBzdGFuZGFyZC9iZWFnbGVib25lCisJICAgICA0KSBzdGFuZGFyZC9lZGdlcm91dGVyCisJICAgICA1KSBzdGFuZGFyZC9mc2wtbXBjODMxNWUtcmRiCisJICAgICA2KSBzdGFuZGFyZC9tdGktbWFsdGEzMgorCSAgICAgNykgc3RhbmRhcmQvbXRpLW1hbHRhNjQKKwkgICAgIDgpIHN0YW5kYXJkL3FlbXVhcm02NAorCSAgICAgOSkgc3RhbmRhcmQvcWVtdXBwYwogICAgICAxCiAgICAgIFdvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSBbZGVmYXVsdDogeV0KICAgICAgRG9lcyB5b3VyIEJTUCBoYXZlIGEgdG91Y2hzY3JlZW4/ICh5L24pIFtkZWZhdWx0OiBuXQpAQCAtMTQ5NSw3ICsxNDk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgd2UgdXNlIHRoZSBBUk0gYXJjaGl0ZWN0dXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgdGhlbiBwcm9tcHRzIHlvdSBmb3IgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCA0LjQga2VybmVsIGlzIGFjY2VwdGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgNC44IGtlcm5lbCBpcyBhY2NlcHRhYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvLCB0aGUgZXhhbXBsZSBhY2NlcHRzIHRoZSBkZWZhdWx0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbnRlciAnbicsIHRoZSBzY3JpcHQgcHJvbXB0cyB5b3UgdG8gZnVydGhlciBlbnRlciB0aGUga2VybmVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGRvIHdhbnQgdG8gdXNlLjwvcGFyYT48L2xpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWNvbW1vbi10YXNrcy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbAppbmRleCBmOTI2ZjFkLi4wODZkMGJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbApAQCAtMTI1NCwyNyArMTI1NCw1NyBAQAogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsd2F5cyB3cml0ZSBhIHJlY2lwZSBmcm9tIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgSG93ZXZlciwgdHdvIGNob2ljZXMgZXhpc3QgdGhhdCBjYW4gaGVscCB5b3UgcXVpY2tseSBnZXQgYQorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRocmVlIGNob2ljZXMgZXhpc3QgdGhhdCBjYW4gaGVscCB5b3UgcXVpY2tseSBnZXQgYQogICAgICAgICAgICAgICAgIHN0YXJ0IG9uIGEgbmV3IHJlY2lwZToKICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEEgdG9vbCBwcm92aWRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCB0aGF0IGF1dG9tYXRlcworICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgY29tbWFuZCB0aGF0IGFzc2lzdHMgaW4gY3JlYXRpbmcgYSByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBlbnZpcm9ubWVudCBjb25kdWNpdmUgdG8gZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5yZWNpcGV0b29sIGNyZWF0ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGNvbW1hbmQgcHJvdmlkZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGhhdCBhdXRvbWF0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIGEgYmFzZSByZWNpcGUgYmFzZWQgb24gdGhlIHNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGlzdGluZyBSZWNpcGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FeGlzdGluZyBSZWNpcGVzOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIHJlY2lwZSB0aGF0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgICBzaW1pbGFyIGluIGZ1bmN0aW9uIHRvIHRoZSByZWNpcGUgeW91IG5lZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtY3JlYXRpbmctdGhlLWJhc2UtcmVjaXBlLXVzaW5nLXJlY2lwZXRvb2wnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgQmFzZSBSZWNpcGUgVXNpbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPjwvdGl0bGU+CisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1jcmVhdGluZy10aGUtYmFzZS1yZWNpcGUtdXNpbmctZGV2dG9vbCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBCYXNlIFJlY2lwZSBVc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPjwvdGl0bGU+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiBhdXRvbWF0ZXMgY3JlYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgYSBiYXNlIHJlY2lwZSBnaXZlbiBhIHNldCBvZiBzb3VyY2UgY29kZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgdXNlcyB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICBsb2dpYyBmb3IgYXV0by1jcmVhdGluZyB0aGUgcmVjaXBlIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGV0b29sIGNyZWF0ZTwvZmlsZW5hbWU+LCB3aGljaCBpcyBsaXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgaG93ZXZlciwgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc2V0cyB1cCBhbiBlbnZpcm9ubWVudCB0aGF0IG1ha2VzIGl0IGVhc3kgZm9yIHlvdSB0bworICAgICAgICAgICAgICAgICAgICBwYXRjaCB0aGUgc291cmNlIGFuZCB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHJlY2lwZSBhcworICAgICAgICAgICAgICAgICAgICBpcyBvZnRlbiBuZWNlc3Nhcnkgd2hlbiBhZGRpbmcgYSByZWNpcGUgdG8gYnVpbGQgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgcGllY2Ugb2Ygc29mdHdhcmUgdG8gYmUgaW5jbHVkZWQgaW4gYSBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2UtZGV2dG9vbC10by1pbnRlZ3JhdGUtbmV3LWNvZGUnPlVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiB0byBBZGQgYW4gQXBwbGljYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtY3JlYXRpbmctdGhlLWJhc2UtcmVjaXBlLXVzaW5nLXJlY2lwZXRvb2wnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgQmFzZSBSZWNpcGUgVXNpbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2wgY3JlYXRlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGV0b29sIGNyZWF0ZTwvZmlsZW5hbWU+IGF1dG9tYXRlcyBjcmVhdGlvbgorICAgICAgICAgICAgICAgICAgICBvZiBhIGJhc2UgcmVjaXBlIGdpdmVuIGEgc2V0IG9mIHNvdXJjZSBjb2RlIGZpbGVzLgogICAgICAgICAgICAgICAgICAgICBBcyBsb25nIGFzIHlvdSBjYW4gZXh0cmFjdCBvciBwb2ludCB0byB0aGUgc291cmNlIGZpbGVzLAogICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbCB3aWxsIGNvbnN0cnVjdCBhIHJlY2lwZSBhbmQgYXV0b21hdGljYWxseQogICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgYWxsIHByZS1idWlsZCBpbmZvcm1hdGlvbiBpbnRvIHRoZSByZWNpcGUuCkBAIC0xNTY2LDEyICsxNTk2LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGFicyBhZnRlciB0aGUgc2xhc2ggY2hhcmFjdGVyLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgVmFyaWFibGVzOiA8ZmlsZW5hbWU+JHsuLi59PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4kezxyZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT59PC9maWxlbmFtZT4gc3ludGF4IHRvCisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Vc2luZyBWYXJpYWJsZXM6IDxmaWxlbmFtZT4key4uLn08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPiR7PHJlcGxhY2VhYmxlPlZBUk5BTUU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPiBzeW50YXggdG8KICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgY29udGVudHMgb2YgYSB2YXJpYWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlicG5nL3psaWItJHtQVn0udGFyLmd6IgogICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgdmFsdWUgb2YgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGV4cHJlc3NlZCBpbiB0aGlzIGZvcm0gZG9lcyBub3QgZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWQgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhwYW5zaW9uIG9mIHRoZXNlIGV4cHJlc3Npb25zIGhhcHBlbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbi1kZW1hbmQgbGF0ZXIgKGUuZy4gdXN1YWxseSB3aGVuIGEgZnVuY3Rpb24gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgZXhlY3V0ZXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgZW5zdXJlcyB0aGF0IHRoZSB2YWx1ZXMgYXJlIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBmb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gdGhlIHJhcmUgb2NjYXNpb24gdGhhdCB5b3UgZG8gbmVlZCB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uIHRvIGJlIGV4cGFuZGVkIGltbWVkaWF0ZWx5LCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Oj08L2ZpbGVuYW1lPiBvcGVyYXRvciBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPj08L2ZpbGVuYW1lPiB3aGVuIHlvdSBtYWtlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQsIGJ1dCB0aGlzIGlzIG5vdCBnZW5lcmFsbHkgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UXVvdGUgQWxsIEFzc2lnbm1lbnRzOiA8ZmlsZW5hbWU+IjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQogICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGRvdWJsZSBxdW90ZXMgYXJvdW5kIHRoZSB2YWx1ZSBpbiBhbGwgdmFyaWFibGUKQEAgLTE3NzksMTEgKzE4MjYsMTIgQEAKICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIHBlci1yZWNpcGUgdGVtcG9yYXJ5IHdvcmsgZGlyZWN0b3J5IGlzIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3MgYW5kCi0gICAgICAgICAgICAgICAgZGVwZW5kcyBvbiBzZXZlcmFsIGZhY3RvcnM6CisgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIHBlci1yZWNpcGUgdGVtcG9yYXJ5IHdvcmsgZGlyZWN0b3J5IGRlcGVuZHMKKyAgICAgICAgICAgICAgICBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICBUaGUgcXVpY2tlc3Qgd2F5IHRvIGZpbmQgdGhpcyBwYXRoIGlzIHRvIGhhdmUgQml0QmFrZSByZXR1cm4gaXQKKyAgICAgICAgICAgICAgICBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBCQVNFX1dPUktESVIgPz0gIiR7VE1QRElSfS93b3JrIgotICAgICBXT1JLRElSID0gIiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorICAgICAkIGJpdGJha2UgLWUgPHJlcGxhY2VhYmxlPmJhc2VuYW1lPC9yZXBsYWNlYWJsZT4gfCBncmVwIF5XT1JLRElSPQogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBhc3N1bWUgYSBTb3VyY2UgRGlyZWN0b3J5IHRvcC1sZXZlbCBmb2xkZXIgbmFtZWQKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0CkBAIC0xODE3LDI4ICsxODY1LDYgQEAKICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjY2xvc2VyLWxvb2snPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3VsaW5rPiIKICAgICAgICAgICAgICAgICBjaGFwdGVyIG9mIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCiAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsJ3MgZ2xvc3NhcnkgZm9yIG1vcmUgaW5mb3JtYXRpb246Ci0gICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+OgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvcC1sZXZlbCBidWlsZCBvdXRwdXQgZGlyZWN0b3J5PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L3VsaW5rPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgc3lzdGVtIGlkZW50aWZpZXI8L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+OgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lPC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFTkRQRSc+PGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT48L3VsaW5rPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCAtIChpZgotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc3BlY2lmaWVkLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvciBtb3N0Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLCB0aGVuIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGlzIGJsYW5rKTwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHZlcnNpb248L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+OgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSByZXZpc2lvbjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KIAogICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1mZXRjaGluZy1jb2RlJz4KQEAgLTE5NTksNyArMTk4NSw3IEBACiAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYS9hcG1kL2FwbWRfMy4yLjIub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKLSAgICAgICAgICAgICAgICAke0RFQklBTl9NSVJST1J9L21haW4vYS9hcG1kL2FwbWRfJHtQVn0uZGlmZi5nejtuYW1lPXBhdGNoCisgICAgICAgICAgICAgICAgJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXBtZC9hcG1kXyR7UFZ9LmRpZmYuZ3o7bmFtZT1wYXRjaCIKIAogICAgICBTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJiMWU2MzA5ZTgzMzFlMGY0ZTZlZmQzMTFjMmQ5N2ZhOCIKICAgICAgU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiN2Y3ZDlmNjBiNzc2NmI4NTI4ODFkNDBiOGZmOTFkOGUzOWZjY2IwZDFkOTEzMTAyYTVjNzVhMmRiYjUyMzMyZCIKQEAgLTIyNDEsNiArMjI2Nyw4MyBAQAogCiAgICAgICAgIDwvc2VjdGlvbj4KIAorICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBzb2Z0d2FyZSBwYWNrYWdlcyBoYXZlIGEgc2hvcnQgbGlzdCBvZiBvdGhlciBwYWNrYWdlcworICAgICAgICAgICAgICAgIHRoYXQgdGhleSByZXF1aXJlLCB3aGljaCBhcmUgY2FsbGVkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBUaGVzZSBkZXBlbmRlbmNpZXMgZmFsbCBpbnRvIHR3byBtYWluIGNhdGVnb3JpZXM6IGJ1aWxkLXRpbWUKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIHdoaWNoIGFyZSByZXF1aXJlZCB3aGVuIHRoZSBzb2Z0d2FyZSBpcyBidWlsdDsKKyAgICAgICAgICAgICAgICBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMsIHdoaWNoIGFyZSByZXF1aXJlZCB0byBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICBvbiB0aGUgdGFyZ2V0IGluIG9yZGVyIGZvciB0aGUgc29mdHdhcmUgdG8gcnVuLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gYSByZWNpcGUsIHlvdSBzcGVjaWZ5IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBBbHRob3VnaCBudWFuY2VzIGV4aXN0LCBpdGVtcyBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IHNob3VsZCBiZSBuYW1lcyBvZiBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBzcGVjaWZ5IGFsbCBidWlsZC10aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkuCisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCwgZHVlIHRvIHRoZSBwYXJhbGxlbCBuYXR1cmUgb2YgQml0QmFrZSdzCisgICAgICAgICAgICAgICAgZXhlY3V0aW9uLCB5b3UgY2FuIGVuZCB1cCB3aXRoIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBpcyBwcmVzZW50IGZvciBvbmUgdGFzayBvZiBhIHJlY2lwZSAoZS5nLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgIGFuZCB0aGVuIGdvbmUgd2hlbiB0aGUgbmV4dCB0YXNrIHJ1bnMgKGUuZy4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBjb25zaWRlcmF0aW9uIGlzIHRoYXQgY29uZmlndXJlIHNjcmlwdHMgbWlnaHQKKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNoZWNrIGZvciBvcHRpb25hbCBkZXBlbmRlbmNpZXMgYW5kIGVuYWJsZQorICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25hbGl0eSBpZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGZvdW5kLgorICAgICAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgbWVhbnMgdGhhdCB0byBlbnN1cmUgZGV0ZXJtaW5pc3RpYyByZXN1bHRzIGFuZAorICAgICAgICAgICAgICAgIHRodXMgYXZvaWQgbW9yZSByYWNlIGNvbmRpdGlvbnMsIHlvdSBuZWVkIHRvIGVpdGhlciBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGVzZSBkZXBlbmRlbmNpZXMgYXMgd2VsbCwgb3IgdGVsbCB0aGUgY29uZmlndXJlCisgICAgICAgICAgICAgICAgc2NyaXB0IGV4cGxpY2l0bHkgdG8gZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBtYWtlIGEgcmVjaXBlIHRoYXQgaXMgbW9yZSBnZW5lcmFsbHkgdXNlZnVsCisgICAgICAgICAgICAgICAgKGUuZy4gcHVibGlzaCB0aGUgcmVjaXBlIGluIGEgbGF5ZXIgZm9yIG90aGVycyB0byB1c2UpLAorICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgaGFyZC1kaXNhYmxpbmcgdGhlIGZ1bmN0aW9uYWxpdHksIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFQ09ORklHJz48ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBhbGxvdyBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyB0byBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZCBlYXNpbHkgYnkgb3RoZXIKKyAgICAgICAgICAgICAgICB1c2VycyBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaW1pbGFyIHRvIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLCB5b3Ugc3BlY2lmeSBydW50aW1lCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIHRocm91Z2ggYSB2YXJpYWJsZSAtCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHBhY2thZ2Utc3BlY2lmaWMuCisgICAgICAgICAgICAgICAgQWxsIHZhcmlhYmxlcyB0aGF0IGFyZSBwYWNrYWdlLXNwZWNpZmljIG5lZWQgdG8gaGF2ZSB0aGUgbmFtZQorICAgICAgICAgICAgICAgIG9mIHRoZSBwYWNrYWdlIGFkZGVkIHRvIHRoZSBlbmQgYXMgYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgU2luY2UgdGhlIG1haW4gcGFja2FnZSBmb3IgYSByZWNpcGUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlLCBhbmQgdGhlIHJlY2lwZSdzIG5hbWUgY2FuIGJlIGZvdW5kIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZW4geW91IHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIG1haW4KKyAgICAgICAgICAgICAgICBwYWNrYWdlIGJ5IHNldHRpbmcgPGZpbGVuYW1lPlJERVBFTkRTXyR7UE59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSWYgdGhlIHBhY2thZ2Ugd2VyZSBuYW1lZCA8ZmlsZW5hbWU+JHtQTn0tdG9vbHM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB0aGVuIHlvdSB3b3VsZCBzZXQgPGZpbGVuYW1lPlJERVBFTkRTXyR7UE59LXRvb2xzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21lIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXQKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgdGltZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBkZXBlbmRlbmNpZXMgaW5jbHVkZSBhbnkgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgKGkuZS4gaWYgYSBwYWNrYWdlICJleGFtcGxlIiBjb250YWlucyAibGliZXhhbXBsZSIgYW5kCisgICAgICAgICAgICAgICAgYW5vdGhlciBwYWNrYWdlICJteXBhY2thZ2UiIGNvbnRhaW5zIGEgYmluYXJ5IHRoYXQgbGlua3MgdG8KKyAgICAgICAgICAgICAgICAibGliZXhhbXBsZSIgdGhlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsCisgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZGQgYSBydW50aW1lIGRlcGVuZGVuY3kgdG8gIm15cGFja2FnZSIgb24KKyAgICAgICAgICAgICAgICAiZXhhbXBsZSIpLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYXV0b21hdGljYWxseS1hZGRlZC1ydW50aW1lLWRlcGVuZGVuY2llcyc+QXV0b21hdGljYWxseSBBZGRlZCBSdW50aW1lIERlcGVuZGVuY2llczwvdWxpbms+IgorICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCiAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNvbmZpZ3VyaW5nLXRoZS1yZWNpcGUnPgogICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBSZWNpcGU8L3RpdGxlPgogCkBAIC0yMjUxLDcgKzIzNTQsNyBAQAogICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgd2l0aCBzb21lIG9wdGlvbnMsIG9yIGJ5IG1vZGlmeWluZyBhIGJ1aWxkCiAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgogICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBBcyBvZiBZb2N0byBQcm9qZWN0IFJlbGVhc2UgNy4xLCBzb21lIG9mIHRoZSBjb3JlIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgQXMgb2YgWW9jdG8gUHJvamVjdCBSZWxlYXNlIDEuNywgc29tZSBvZiB0aGUgY29yZSByZWNpcGVzCiAgICAgICAgICAgICAgICAgICAgIHRoYXQgcGFja2FnZSBiaW5hcnkgY29uZmlndXJhdGlvbiBzY3JpcHRzIG5vdyBkaXNhYmxlIHRoZQogICAgICAgICAgICAgICAgICAgICBzY3JpcHRzIGR1ZSB0byB0aGUgc2NyaXB0cyBwcmV2aW91c2x5IHJlcXVpcmluZyBlcnJvci1wcm9uZQogICAgICAgICAgICAgICAgICAgICBwYXRoIHN1YnN0aXR1dGlvbi4KQEAgLTIyOTcsNiArMjQwMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgc3RpbGwgd2FudCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBzZXQKICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VDT05GSUdfQ09ORkFSR1MnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGFzcyBhbnkgbmVlZGVkIGNvbmZpZ3VyZSBvcHRpb25zIHRoYXQgYXJlIHNwZWNpZmljCiAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgcmVjaXBlLjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNNYWtlOjwvZW1waGFzaXM+CkBAIC0yNzcwLDYgKzI4NzUsNTYgQEAKICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctc2hhcmluZy1maWxlcy1iZXR3ZWVuLXJlY2lwZXMnPgorICAgICAgICAgICAgPHRpdGxlPlNoYXJpbmcgRmlsZXMgQmV0d2VlbiBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVjaXBlcyBvZnRlbiBuZWVkIHRvIHVzZSBmaWxlcyBwcm92aWRlZCBieSBvdGhlciByZWNpcGVzIG9uCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIGxpbmtpbmcgdG8gYSBjb21tb24gbGlicmFyeSBuZWVkcworICAgICAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgbGlicmFyeSBpdHNlbGYgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlcnMuCisgICAgICAgICAgICAgICAgVGhlIHdheSB0aGlzIGFjY2VzcyBpcyBhY2NvbXBsaXNoZWQgaXMgYnkgcG9wdWxhdGluZyBzeXNyb290CisgICAgICAgICAgICAgICAgd2l0aCBmaWxlcy4KKyAgICAgICAgICAgICAgICBPbmUgc3lzcm9vdCBleGlzdHMgcGVyICJtYWNoaW5lIiBmb3Igd2hpY2ggdGhlIGltYWdlIGlzCisgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgSW4gcHJhY3RpY2FsIHRlcm1zLCB0aGlzIG1lYW5zIGEgc3lzcm9vdCBleGlzdHMgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBtYWNoaW5lLCBhbmQgYSBzeXNyb290IGV4aXN0cyBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBmaW5kIHRoZSB0ZXJtICJzdGFnaW5nIiB1c2VkIHdpdGhpbiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdCByZWdhcmRpbmcgZmlsZXMgcG9wdWxhdGluZyBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVybSAic3RhZ2luZyIgd2FzIHVzZWQgZm9yIHByZXZpb3VzIHJlbGVhc2VzIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVjaXBlcyBzaG91bGQgbmV2ZXIgcG9wdWxhdGUgdGhlIHN5c3Jvb3QgZGlyZWN0bHkgKGkuZS4gd3JpdGUKKyAgICAgICAgICAgICAgICBmaWxlcyBpbnRvIHN5c3Jvb3QpLgorICAgICAgICAgICAgICAgIEluc3RlYWQsIGZpbGVzIHNob3VsZCBiZSBpbnN0YWxsZWQgaW50byBzdGFuZGFyZCBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRhc2sgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgQSBzdWJzZXQgb2YgdGhlc2UgZmlsZXMgYXV0b21hdGljYWxseSBwb3B1bGF0ZXMgdGhlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBsaW1pdGF0aW9uIGlzIHRoYXQgYWxtb3N0IGFsbCBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgcG9wdWxhdGUgdGhlIHN5c3Jvb3QgYXJlIGNhdGFsb2dlZCBpbiBtYW5pZmVzdHMgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICBlbnN1cmUgdGhlIGZpbGVzIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gYSByZWNpcGUgaXMgZWl0aGVyCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgb3IgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgc3lzcm9vdCBpcyBhYmxlIHRvIHJlbWFpbiBmcmVlIGZyb20gc3RhbGUgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB2YXJpYWJsZXMgeW91IGNhbiB1c2UgdG8gaGVscCBjb250cm9sIGhvdworICAgICAgICAgICAgICAgIGZpbGVzIHN5c3Jvb3QgaXMgcG9wdWxhdGVkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNZU1JPT1RfRElSUyc+PGZpbGVuYW1lPlNZU1JPT1RfRElSUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNZU1JPT1RfRElSU19OQVRJVkUnPjxmaWxlbmFtZT5TWVNST09UX0RJUlNfTkFUSVZFPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1lTUk9PVF9ESVJTX0JMQUNLTElTVCc+PGZpbGVuYW1lPlNZU1JPT1RfRElSU19CTEFDS0xJU1Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKICAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3Blcmx5LXZlcnNpb25pbmctcHJlLXJlbGVhc2UtcmVjaXBlcyc+CiAgICAgICAgICAgICA8dGl0bGU+UHJvcGVybHkgVmVyc2lvbmluZyBQcmUtUmVsZWFzZSBSZWNpcGVzPC90aXRsZT4KIApAQCAtMzAxMSw4ICszMTY2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBhZGQgYSA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHN0ZXAgc2luY2UgYnkgZGVmYXVsdCBCaXRCYWtlCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0cyB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uLgogICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCBhZGRpdGlvbmFsIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gb3B0aW9ucywgeW91IHNob3VsZCBzdG9yZSB0aGVtIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC91bGluaz48L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FTUFLRSc+PGZpbGVuYW1lPkVYVFJBX09FTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VDT05GSUdfQ09ORkFSR1MnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCiAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcGFzc2VzIHRoZXNlIG9wdGlvbnMgaW50byB0aGUgR05VIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gaW52b2NhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGEgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGlzIHN0aWxsIHJlcXVpcmVkLgogICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIEJpdEJha2UgcnVucyBhbiBlbXB0eSA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2sgYnkgZGVmYXVsdC4KQEAgLTMwNDgsNyArMzIwNSw3IEBACiAKICAgICAgUFYgPSAiMS41LjErZ2l0JHtTUkNQVn0iCiAKLSAgICAgUyA9ICIke1dPUktESVJ9L2dpdC8iCisgICAgIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKICAgICAgRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgJ1JBTkxJQj0ke1JBTkxJQn0nICdBUj0ke0FSfScgJ0NGTEFHUz0ke0NGTEFHU30gLUkke1N9L2luY2x1ZGUgLURXSVRIT1VUX1hBVFRSJyAnQlVJTERESVI9JHtTfSciCiAKQEAgLTMxNzksMzggKzMzMzYsMTE0IEBACiAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz4KICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgICBnbG9zc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGEgZ29vZCBpZGVhIGV2ZW4gZm9yIGNvbXBvbmVudHMgZGlzdHJpYnV0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYmluYXJ5IGZvcm0sIGFuZCBpcyBvZnRlbiBuZWNlc3NhcnkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIHNoYXJlZCBsaWJyYXJ5LCBsaXN0aW5nIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IG1ha2VzIHN1cmUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHN0YWdpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCB3aGVuIG90aGVyIHJlY2lwZXMgbGluayBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LCB3aGljaCBtaWdodCBiZSBuZWNlc3NhcnkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgbGlua2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGJldHdlZW4gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgYWRkZWQgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYXV0b21hdGljYWxseS1hZGRlZC1ydW50aW1lLWRlcGVuZGVuY2llcyc+QXV0b21hdGljYWxseSBBZGRlZCBSdW50aW1lIERlcGVuZGVuY2llczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbid0IHVzZSB0aGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbm5vdCB1c2UgdGhlIDxmaWxlbmFtZT5iaW5fcGFja2FnZTwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdSBhcmUgZG9pbmcgdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYSByZWNpcGUgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgcmVjaXBlIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzIGRvIG5vdGhpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdXN1YWxseSBzdWZmaWNpZW50IHRvIGp1c3Qgbm90IGRlZmluZSB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzIGluIHRoZSByZWNpcGUsIGJlY2F1c2UgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgZG8gbm90aGluZyB1bmxlc3MgYSBNYWtlZmlsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gbWlnaHQgY29udGFpbiBhIE1ha2VmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGlmIHlvdSBpbmhlcml0IHNvbWUgY2xhc3MgdGhhdCByZXBsYWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHRhc2tzIGRvIG5vdGhpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB3aXRoIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLCB0aGVuIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5bPC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3ZhcmlhYmxlLWZsYWdzJz48ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT5dPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIHRvIHR1cm4gdGhlIHRhc2tzIGludG8gbm8tb3BzLCBhcyBmb2xsb3dzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKICAgICAgZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gbWFrZSB0aGVzZSB0YXNrcyBhbiBlbXB0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVubGlrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjZGVsZXRpbmctYS10YXNrJz48ZmlsZW5hbWU+ZGVsZXRpbmcgdGhlIHRhc2tzPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgZmxhZyBwcmVzZXJ2ZXMgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L3VsaW5rPiwgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBpbnN0YWxscyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcmllcyBhcHByb3ByaWF0ZWx5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuc3VyZSB0aGF0IHlvdSBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiAodXN1YWxseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+KSB0byBwb2ludCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyB5b3UgaGF2ZSBpbnN0YWxsZWQsIHdoaWNoIG9mIGNvdXJzZSBkZXBlbmRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gd2hlcmUgeW91IGhhdmUgaW5zdGFsbGVkIHRoZW0gYW5kIHdoZXRoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9zZSBmaWxlcyBhcmUgaW4gZGlmZmVyZW50IGxvY2F0aW9ucyB0aGFuIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBvaW50IHRvIHRoZSBmaWxlcyB5b3UgaGF2ZSBpbnN0YWxsZWQsIHdoaWNoIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlIGRlcGVuZHMgb24gd2hlcmUgeW91IGhhdmUgaW5zdGFsbGVkIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2hldGhlciB0aG9zZSBmaWxlcyBhcmUgaW4gZGlmZmVyZW50IGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gdGhlIGRlZmF1bHRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0iZm9sbG93aW5nLXJlY2lwZS1zdHlsZS1ndWlkZWxpbmVzIj4KKyAgICAgICAgICAgIDx0aXRsZT5Gb2xsb3dpbmcgUmVjaXBlIFN0eWxlIEd1aWRlbGluZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHdyaXRpbmcgcmVjaXBlcywgaXQgaXMgZ29vZCB0byBjb25mb3JtIHRvIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgc3R5bGUgZ3VpZGVsaW5lcy4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvd2lraS9TdHlsZWd1aWRlJz5PcGVuRW1iZWRkZWQgU3R5bGVndWlkZTwvdWxpbms+CisgICAgICAgICAgICAgICAgd2lraSBwYWdlIHByb3ZpZGVzIHJvdWdoIGd1aWRlbGluZXMgZm9yIHByZWZlcnJlZCByZWNpcGUgc3R5bGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIGNvbW1vbiBmb3IgZXhpc3RpbmcgcmVjaXBlcyB0byBkZXZpYXRlIGEgYml0IGZyb20gdGhpcworICAgICAgICAgICAgICAgIHN0eWxlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGFpbWluZyBmb3IgYXQgbGVhc3QgYSBjb25zaXN0ZW50IHN0eWxlIGlzIGEgZ29vZCBpZGVhLgorICAgICAgICAgICAgICAgIFNvbWUgcHJhY3RpY2VzLCBzdWNoIGFzIG9taXR0aW5nIHNwYWNlcyBhcm91bmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PTwvZmlsZW5hbWU+IG9wZXJhdG9ycyBpbiBhc3NpZ25tZW50cyBvciBvcmRlcmluZworICAgICAgICAgICAgICAgIHJlY2lwZSBjb21wb25lbnRzIGluIGFuIGVycmF0aWMgd2F5LCBhcmUgd2lkZWx5IHNlZW4gYXMgcG9vcgorICAgICAgICAgICAgICAgIHN0eWxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CiAgICAgPC9zZWN0aW9uPgogCiAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtbmV3bWFjaGluZSI+CkBAIC0zMzg4LDYgKzM2MjEsMTA2IEBACiAgICAgICAgIDwvc2VjdGlvbj4KICAgICA8L3NlY3Rpb24+CiAKKyAgICA8c2VjdGlvbiBpZD0ncGxhdGRldi1idWlsZGluZy10YXJnZXRzLXdpdGgtbXVsdGlwbGUtY29uZmlndXJhdGlvbnMnPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgVGFyZ2V0cyB3aXRoIE11bHRpcGxlIENvbmZpZ3VyYXRpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdGJha2UgYWxzbyBoYXMgZnVuY3Rpb25hbGl0eSB0aGF0IGFsbG93cyB5b3UgdG8gYnVpbGQKKyAgICAgICAgICAgIG11bHRpcGxlIHRhcmdldHMgYXQgdGhlIHNhbWUgdGltZSwgd2hlcmUgZWFjaCB0YXJnZXQgdXNlcworICAgICAgICAgICAgYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gYWNjb21wbGlzaCB0aGlzLCB5b3Ugc2V0dXAgZWFjaCBvZiB0aGUgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgIHlvdSBuZWVkIHRvIHVzZSBpbiBwYXJhbGxlbCBieSBwbGFjaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGluCisgICAgICAgICAgICB5b3VyIGN1cnJlbnQgYnVpbGQgZGlyZWN0b3J5IGFsb25nc2lkZSB0aGUgdXN1YWwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIGd1aWRlbGluZXMgdG8gY3JlYXRlIGFuIGVudmlyb25tZW50IHRoYXQgc3VwcG9ydHMKKyAgICAgICAgICAgIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DcmVhdGUgQ29uZmlndXJhdGlvbiBGaWxlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBlYWNoCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIHdoaWNoIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyB3b3VsZCBjb250YWluIGxpbmVzIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FID0gIkEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzIHdvdWxkIGNvbnRhaW4gYW55IG90aGVyIHZhcmlhYmxlcyB0aGF0IGNhbgorICAgICAgICAgICAgICAgICAgICBiZSBzZXQgYW5kIGJ1aWx0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBub3QgY29uZmxpY3QuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgYmUgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCBidWlsZCBkaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm11bHRpY29uZmlnPC9maWxlbmFtZT4gdW5kZXIgdGhlIGJ1aWxkJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiByZXNpZGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIHJlc3RyaWN0aW9uIGlzIGJlY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBub3QgY29uc3RydWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIGxheWVycyBhcmUgcGFyc2VkLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHVzaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXMgYQorICAgICAgICAgICAgICAgICAgICBwcmUtY29uZmlndXJhdGlvbiBmaWxlIGlzIG5vdCBwb3NzaWJsZSB1bmxlc3MgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QWRkIHRoZSBCaXRCYWtlIE11bHRpLUNvbmZpZyBWYXJpYWJsZSB0byB5b3UgTG9jYWwgQ29uZmlndXJhdGlvbiBGaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCTVVMVElDT05GSUc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgdG8gc3BlY2lmeSBlYWNoIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGxpbmUgdGVsbHMgQml0QmFrZSBpdCBzaG91bGQgbG9hZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tdWx0aWNvbmZpZy9jb25maWdBLmNvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbXVsdGljb25maWcvY29uZmlnQi5jb25mPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tdWx0aWNvbmZpZy9jb25maWdDLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQk1VTFRJQ09ORklHID0gImNvbmZpZ0EgY29uZmlnQiBjb25maWdDIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkxhdW5jaCBCaXRCYWtlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZCBmb3JtIHRvIGxhdW5jaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIFttdWx0aWNvbmZpZzo8cmVwbGFjZWFibGU+bXVsdGljb25maWduYW1lPC9yZXBsYWNlYWJsZT46XTxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbW1ttdWx0aWNvbmZpZzo8cmVwbGFjZWFibGU+bXVsdGljb25maWduYW1lPC9yZXBsYWNlYWJsZT46XTxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPl0gLi4uIF0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB0aGF0IHN1cHBvcnRzIGJ1aWxkaW5nIGEgbWluaW1hbAorICAgICAgICAgICAgICAgICAgICBpbWFnZSBmb3IgY29uZmlndXJhdGlvbiBBIGFsb25nc2lkZSBhIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiwgd2hpY2ggdGFrZXMgaXRzCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJvbSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtdWx0aWNvbmZpZzpjb25maWdBOmNvcmUtaW1hZ2UtbWluaW1hbCBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBpbiB0aGlzIGN1cnJlbnQgcmVsZWFzZSBvZgorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgKCZESVNUUk9fTkFNRTsgJkRJU1RSTzspIGhhcyBzb21lIGtub3duIGlzc3VlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBObyBpbnRlci1tdWx0aS1jb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBleGlzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTaGFyZWQgU3RhdGUgKHNzdGF0ZSkgb3B0aW1pemF0aW9ucyBkbyBub3QgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgdGhlIGJ1aWxkIHVzZXMgdGhlIHNhbWUgb2JqZWN0IHR3aWNlCisgICAgICAgICAgICAgICAgICAgIGluLCBmb3IgZXhhbXBsZSwgdHdvIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMsIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICB3aWxsIGVpdGhlciBsb2FkIGZyb20gYW4gZXhpc3Rpbmcgc3N0YXRlIGNhY2hlIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBzdGFydCBvciBidWlsZCB0aGUgb2JqZWN0IHR3aWNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCiAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtd29ya2luZy13aXRoLWxpYnJhcmllcyI+CiAgICAgICAgIDx0aXRsZT5Xb3JraW5nIFdpdGggTGlicmFyaWVzPC90aXRsZT4KIApAQCAtMzcyNiw2ICs0MDU5LDIzNiBAQAogICAgICAgICA8L3NlY3Rpb24+CiAgICAgPC9zZWN0aW9uPgogCisgICAgPHNlY3Rpb24gaWQ9J2VuYWJsaW5nLWdvYmplY3QtaW50cm9zcGVjdGlvbi1zdXBwb3J0Jz4KKyAgICAgICAgPHRpdGxlPkVuYWJsaW5nIEdPYmplY3QgSW50cm9zcGVjdGlvbiBTdXBwb3J0PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS5nbm9tZS5vcmcvUHJvamVjdHMvR09iamVjdEludHJvc3BlY3Rpb24nPkdPYmplY3QgaW50cm9zcGVjdGlvbjwvdWxpbms+CisgICAgICAgICAgICBpcyB0aGUgc3RhbmRhcmQgbWVjaGFuaXNtIGZvciBhY2Nlc3NpbmcgR09iamVjdC1iYXNlZCBzb2Z0d2FyZQorICAgICAgICAgICAgZnJvbSBydW50aW1lIGVudmlyb25tZW50cy4KKyAgICAgICAgICAgIEdPYmplY3QgaXMgYSBmZWF0dXJlIG9mIHRoZSBHTGliIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBhbiBvYmplY3QKKyAgICAgICAgICAgIGZyYW1ld29yayBmb3IgdGhlIEdOT01FIGRlc2t0b3AgYW5kIHJlbGF0ZWQgc29mdHdhcmUuCisgICAgICAgICAgICBHT2JqZWN0IEludHJvc3BlY3Rpb24gYWRkcyBpbmZvcm1hdGlvbiB0byBHT2JqZWN0IHRoYXQgYWxsb3dzCisgICAgICAgICAgICBvYmplY3RzIGNyZWF0ZWQgd2l0aGluIGl0IHRvIGJlIHJlcHJlc2VudGVkIGFjcm9zcyBkaWZmZXJlbnQKKyAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlcy4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGNvbnN0cnVjdCBHU3RyZWFtZXIgcGlwZWxpbmVzIHVzaW5nIFB5dGhvbiwgb3IKKyAgICAgICAgICAgIGNvbnRyb2wgVVBuUCBpbmZyYXN0cnVjdHVyZSB1c2luZyBKYXZhc2NyaXB0IGFuZCBHVVBuUCwKKyAgICAgICAgICAgIEdPYmplY3QgaW50cm9zcGVjdGlvbiBpcyB0aGUgb25seSB3YXkgdG8gZG8gaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZworICAgICAgICAgICAgYW5kIHBhY2thZ2luZyBHT2JqZWN0IGludHJvc3BlY3Rpb24gZGF0YS4KKyAgICAgICAgICAgIEdPYmplY3QgaW50cm9zcGVjdGlvbiBkYXRhIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICAgICAgICBBUEkgcHJvdmlkZWQgYnkgbGlicmFyaWVzIGJ1aWx0IG9uIHRvcCBvZiBHTGliIGZyYW1ld29yaywKKyAgICAgICAgICAgIGFuZCwgaW4gcGFydGljdWxhciwgdGhhdCBmcmFtZXdvcmsncyBHT2JqZWN0IG1lY2hhbmlzbS4KKyAgICAgICAgICAgIEdPYmplY3QgSW50cm9zcGVjdGlvbiBSZXBvc2l0b3J5IChHSVIpIGZpbGVzIGdvIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzLAorICAgICAgICAgICAgPGZpbGVuYW1lPnR5cGVsaWI8L2ZpbGVuYW1lPiBmaWxlcyBnbyB0byBtYWluIHBhY2thZ2VzIGFzIHRoZXkKKyAgICAgICAgICAgIGFyZSBwYWNrYWdlZCB0b2dldGhlciB3aXRoIGxpYnJhcmllcyB0aGF0IGFyZSBpbnRyb3NwZWN0ZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkYXRhIGlzIGdlbmVyYXRlZCB3aGVuIGJ1aWxkaW5nIHN1Y2ggYSBsaWJyYXJ5LCBieSBsaW5raW5nCisgICAgICAgICAgICB0aGUgbGlicmFyeSB3aXRoIGEgc21hbGwgZXhlY3V0YWJsZSBiaW5hcnkgdGhhdCBhc2tzIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICB0byBkZXNjcmliZSBpdHNlbGYsIGFuZCB0aGVuIGV4ZWN1dGluZyB0aGUgYmluYXJ5IGFuZAorICAgICAgICAgICAgcHJvY2Vzc2luZyBpdHMgb3V0cHV0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBHZW5lcmF0aW5nIHRoaXMgZGF0YSBpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50CisgICAgICAgICAgICBpcyBkaWZmaWN1bHQgYmVjYXVzZSB0aGUgbGlicmFyeSBpcyBwcm9kdWNlZCBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLCBidXQgaXRzIGNvZGUgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgb24gdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICBUaGlzIHByb2JsZW0gaXMgc29sdmVkIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnkKKyAgICAgICAgICAgIHJ1bm5pbmcgdGhlIGNvZGUgdGhyb3VnaCBRRU1VLCB3aGljaCBhbGxvd3MgcHJlY2lzZWx5IHRoYXQuCisgICAgICAgICAgICBVbmZvcnR1bmF0ZWx5LCBRRU1VIGRvZXMgbm90IGFsd2F5cyB3b3JrIHBlcmZlY3RseSBhcyBtZW50aW9uZWQKKyAgICAgICAgICAgIGluIHRoZSB4eHggc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdlbmFibGluZy10aGUtZ2VuZXJhdGlvbi1vZi1pbnRyb3NwZWN0aW9uLWRhdGEnPgorICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIHRoZSBHZW5lcmF0aW9uIG9mIEludHJvc3BlY3Rpb24gRGF0YTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEVuYWJsaW5nIHRoZSBnZW5lcmF0aW9uIG9mIGludHJvc3BlY3Rpb24gZGF0YSAoR0lSIGZpbGVzKQorICAgICAgICAgICAgICAgIGluIHlvdXIgbGlicmFyeSBwYWNrYWdlIGludm9sdmVzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZ29iamVjdC1pbnRyb3NwZWN0aW9uJz48ZmlsZW5hbWU+Z29iamVjdC1pbnRyb3NwZWN0aW9uPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIGludHJvc3BlY3Rpb24gaXMgbm90IGRpc2FibGVkIGFueXdoZXJlIGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIG9yIGZyb20gYW55dGhpbmcgdGhlIHJlY2lwZSBpbmNsdWRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIG1ha2Ugc3VyZSB0aGF0ICJnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YSIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhhdCAicWVtdS11c2VybW9kZSIgaXMgbm90IGluCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGVpdGhlciBvZiB0aGVzZSBjb25kaXRpb25zIGV4aXN0LCBub3RoaW5nIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUcnkgdG8gYnVpbGQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmNvdW50ZXIgYnVpbGQgZXJyb3JzIHRoYXQgbG9vayBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgICBzb21ldGhpbmcgaXMgdW5hYmxlIHRvIGZpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBsaWJyYXJpZXMsIGNoZWNrIHdoZXJlIHRoZXNlCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIHNvdXJjZSB0cmVlIGFuZCBhZGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgdG8gdGhlIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgR0lSX0VYVFJBX0xJQlNfUEFUSCA9ICIke0J9LzxyZXBsYWNlYWJsZT5zb21ldGhpbmc8L3JlcGxhY2VhYmxlPi8ubGlicyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSByZWNpcGVzIGluIHRoZSA8ZmlsZW5hbWU+b2UtY29yZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB0aGF0IHVzZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdJUl9FWFRSQV9MSUJTX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgYW55IG90aGVyIGVycm9ycywgd2hpY2ggcHJvYmFibHkgbWVhbiB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb3NwZWN0aW9uIHN1cHBvcnQgaW4gYSBwYWNrYWdlIGlzIG5vdCBlbnRpcmVseQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQsIGFuZCB0aHVzIGJyZWFrcyBkb3duIGluIGEgY3Jvc3MtY29tcGlsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHN1Y2ggY2FzZXMsIGN1c3RvbS1tYWRlIGZpeGVzIGFyZSBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBBIGdvb2QgcGxhY2UgdG8gYXNrIGFuZCByZWNlaXZlIGhlbHAgaW4gdGhlc2UgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVzb3VyY2VzLW1haWxpbmdsaXN0Jz5Zb2N0byBQcm9qZWN0IG1haWxpbmcgbGlzdHM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIGEgbGlicmFyeSB0aGF0IG5vIGxvbmdlciBidWlsZHMgYWdhaW5zdCB0aGUgbGF0ZXN0CisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSBhbmQgcHJpbnRzIGludHJvc3BlY3Rpb24gcmVsYXRlZAorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgdGhlIHByZXZpb3VzIHByb2NlZHVyZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGlzYWJsaW5nLXRoZS1nZW5lcmF0aW9uLW9mLWludHJvc3BlY3Rpb24tZGF0YSc+CisgICAgICAgICAgICA8dGl0bGU+RGlzYWJsaW5nIHRoZSBHZW5lcmF0aW9uIG9mIEludHJvc3BlY3Rpb24gRGF0YTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBtaWdodCBmaW5kIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgaW50cm9zcGVjdGlvbiBkYXRhLgorICAgICAgICAgICAgICAgIE9yLCBwZXJoYXBzIFFFTVUgZG9lcyBub3Qgd29yayBvbiB5b3VyIGJ1aWxkIGhvc3QgYW5kCisgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZSBjb21iaW5hdGlvbi4KKyAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiB1c2UgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0bworICAgICAgICAgICAgICAgIGRpc2FibGUgR0lSIGZpbGUgZ2VuZXJhdGlvbnM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciBkaXN0cm8gY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQgPSAiZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhpcyBzdGF0ZW1lbnQgZGlzYWJsZXMgZ2VuZXJhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9zcGVjdGlvbiBkYXRhIHVzaW5nIFFFTVUgYnV0IHdpbGwgc3RpbGwgZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBpbnRyb3NwZWN0aW9uIHRvb2xzIGFuZCBsaWJyYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIGJ1aWxkaW5nIHRoZW0gZG9lcyBub3QgcmVxdWlyZSB0aGUgdXNlIG9mIFFFTVUpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgbWFjaGluZSBjb25maWd1cmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQgPSAicWVtdS11c2VybW9kZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGlzIHN0YXRlbWVudCBkaXNhYmxlcyB0aGUgdXNlIG9mIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgcGFja2FnZXMgZm9yIHlvdXIgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgdGhpcyBmZWF0dXJlIGlzIHVzZWQgb25seSBieSBpbnRyb3NwZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IG1pZ2h0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciBmZWF0dXJlcyBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIElmIHlvdSBkaXNhYmxlIGludHJvc3BlY3Rpb24gZGF0YSwgeW91IGNhbiBzdGlsbAorICAgICAgICAgICAgICAgIG9idGFpbiBpdCB0aHJvdWdoIG90aGVyIG1lYW5zIHN1Y2ggYXMgY29weWluZyB0aGUgZGF0YQorICAgICAgICAgICAgICAgIGZyb20gYSBzdWl0YWJsZSBzeXNyb290LCBvciBieSBnZW5lcmF0aW5nIGl0IG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICBwcm92aWRlIHNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZXNlIHRlY2huaXF1ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndGVzdGluZy10aGF0LWludHJvc3BlY3Rpb24td29ya3MtaW4tYW4taW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPlRlc3RpbmcgdGhhdCBJbnRyb3NwZWN0aW9uIFdvcmtzIGluIGFuIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIHRvIHRlc3QgaWYgZ2VuZXJhdGluZworICAgICAgICAgICAgICAgIGludHJvc3BlY3Rpb24gZGF0YSBpcyB3b3JraW5nIGluIGFuIGltYWdlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHRoYXQgImdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhIiBpcyBub3QgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoYXQgInFlbXUtdXNlcm1vZGUiIGlzIG5vdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExhdW5jaCBhIFRlcm1pbmFsIGFuZCB0aGVuIHN0YXJ0IFB5dGhvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIHRoZSBmb2xsb3dpbmcgaW4gdGhlIHRlcm1pbmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA+Pj4gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgICAgID4+PiBHTGliLmdldF9ob3N0X25hbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzb21ldGhpbmcgYSBsaXR0bGUgbW9yZSBhZHZhbmNlZCwgZW50ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9weXRob24tZ3RrLTMtdHV0b3JpYWwucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC9pbnRyb2R1Y3Rpb24uaHRtbAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrbm93bi1pc3N1ZXMnPgorICAgICAgICAgICAgPHRpdGxlPktub3duIElzc3VlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcga25vdyBpc3N1ZXMgZXhpc3QgZm9yCisgICAgICAgICAgICAgICAgR09iamVjdCBJbnRyb3NwZWN0aW9uIFN1cHBvcnQ6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXUtcHBjNjQ8L2ZpbGVuYW1lPiBpbW1lZGlhdGVseSBjcmFzaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2Fubm90IGJ1aWxkIGludHJvc3BlY3Rpb24gZGF0YSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgeDMyIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaW50cm9zcGVjdGlvbiBkYXRhIGlzIGRpc2FibGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG11c2wgY2F1c2VzIHRyYW5zaWVudCBHTGliIGJpbmFyaWVzIHRvIGNyYXNoIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb24gZmFpbHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGdlbmVyYXRpbmcgaW50cm9zcGVjdGlvbiBkYXRhIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIFFFTVUgaXMgbm90IGFibGUgdG8gcnVuIHRoZSBiaW5hcmllcyBjb3JyZWN0bHksCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb3NwZWN0aW9uIGlzIGRpc2FibGVkIGZvciBzb21lIHNwZWNpZmljIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlic2VjcmV0PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndlYmtpdDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBRRU1VIHVzZXJtb2RlIG1pZ2h0IG5vdCB3b3JrIHByb3Blcmx5IHdoZW4gcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgNjQtYml0IGJpbmFyaWVzIHVuZGVyIDMyLWJpdCBob3N0IG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgInFlbXVtaXBzNjQiIGlzIGtub3duIHRvIG5vdCB3b3JrIHVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpNjg2LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKICAgICA8c2VjdGlvbiBpZD0nZGV2LW9wdGlvbmFsbHktdXNpbmctYW4tZXh0ZXJuYWwtdG9vbGNoYWluJz4KICAgICAgICAgPHRpdGxlPk9wdGlvbmFsbHkgVXNpbmcgYW4gRXh0ZXJuYWwgVG9vbGNoYWluPC90aXRsZT4KIApAQCAtMzgwMiwxMCArNDM2NSwxMCBAQAogCSAgICAgICAgaXQgaXMgYmFzZWQgb24gaXMgYnkgZGVmaW5pdGlvbiBpbmNvbXBsZXRlLgogICAgICAgICAgICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgY3VzdG9taXplZCBpbWFnZXMsCiAgICAgICAgICAgICBhbmQgYXMgc3VjaCB3YXMgZGVzaWduZWQgdG8gYmUgY29tcGxldGVseSBleHRlbnNpYmxlIHRocm91Z2ggYQotICAgICAgICAgICAgcGx1Z2luIGludGVyZmFjZS4KKyAgICAgICAgICAgIHBsdWctaW4gaW50ZXJmYWNlLgogICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtcGx1Z2lucyc+UGx1Z2luczwvbGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBwbHVnaW5zLgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtcGx1Z2lucyc+UGx1Zy1pbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgcGx1Zy1pbnMuCiAJICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KQEAgLTQzNjcsMjEgKzQ5MzAsMjEgQEAKICAgICAgICAgPC9zZWN0aW9uPgogCiAgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXBsdWdpbnMnPgotICAgICAgICAgICAgPHRpdGxlPlBsdWdpbnM8L3RpdGxlPgorICAgICAgICAgICAgPHRpdGxlPlBsdWctaW5zPC90aXRsZT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0JICAgICAgICAgICAgUGx1Z2lucyBhbGxvdyA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gZnVuY3Rpb25hbGl0eSB0bworCSAgICAgICAgICAgIFBsdWctaW5zIGFsbG93IDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBmdW5jdGlvbmFsaXR5IHRvCiAJICAgICAgICAgICAgYmUgZXh0ZW5kZWQgYW5kIHNwZWNpYWxpemVkIGJ5IHVzZXJzLgogICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkb2N1bWVudHMgdGhlIHBsdWdpbiBpbnRlcmZhY2UsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgY3VycmVudGx5IHJlc3RyaWN0ZWQgdG8gc291cmNlIHBsdWdpbnMuCisgICAgICAgICAgICAgICAgY3VycmVudGx5IHJlc3RyaWN0ZWQgdG8gc291cmNlIHBsdWcgaW5zLgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KLQkgICAgICAgICAgICBTb3VyY2UgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIHRvIGN1c3RvbWl6ZQorCSAgICAgICAgICAgIFNvdXJjZSBwbHVnIGlucyBwcm92aWRlIGEgbWVjaGFuaXNtIHRvIGN1c3RvbWl6ZQogCSAgICAgICAgICAgIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIGluCiAJICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCBtYWlubHkgdGhlIGNvbnRlbnRzIG9mCiAJICAgICAgICAgICAgcGFydGl0aW9ucy4KLQkgICAgICAgICAgICBUaGUgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBtYXBwaW5nIHZhbHVlcworCSAgICAgICAgICAgIFRoZSBwbHVnIGlucyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBtYXBwaW5nIHZhbHVlcwogCSAgICAgICAgICAgIHNwZWNpZmllZCBpbiA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGZpbGVzIHVzaW5nIHRoZQogCSAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IGtleXdvcmQgdG8gYQogICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgcGx1Z2luIGltcGxlbWVudGF0aW9uIHRoYXQgcG9wdWxhdGVzIGEKQEAgLTczMDQsMjcgKzc4NjcsNDggQEAKICAgICAgICAgICAgICAgICA8dGl0bGU+QnVpbGQgQ29uc2lkZXJhdGlvbnM8L3RpdGxlPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYnVpbGQgY29uc2lkZXJhdGlvbnMgdGhhdCB5b3UgbmVlZAotICAgICAgICAgICAgICAgICAgICB0byBiZSBhd2FyZSBvZiBpbiBvcmRlciB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBidWlsZCBjb25zaWRlcmF0aW9ucyBvZiB3aGljaCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBhd2FyZSBpbiBvcmRlciB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bnRpbWUKICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VtZW50LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBXaGVuIEJpdEJha2UgZ2VuZXJhdGVzIHBhY2thZ2VzIGl0IG5lZWRzIHRvIGtub3cKKyAgICAgICAgICAgICAgICAgICAgV2hlbiBCaXRCYWtlIGdlbmVyYXRlcyBwYWNrYWdlcywgaXQgbmVlZHMgdG8ga25vdwogICAgICAgICAgICAgICAgICAgICB3aGF0IGZvcm1hdCBvciBmb3JtYXRzIHRvIHVzZS4KICAgICAgICAgICAgICAgICAgICAgSW4geW91ciBjb25maWd1cmF0aW9uLCB5b3UgdXNlIHRoZQogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IHRoZSBmb3JtYXQuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaG9vc2UgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGZvcm1hdCBidXQgeW91IG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgYXQgbGVhc3Qgb25lLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgdGhlIGZvcm1hdDoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPn4vcG9reS9idWlsZC9jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoZSBkZXNpcmVkIHBhY2thZ2UgZm9ybWF0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0NMQVNTRVMgPz0g4oCccGFja2FnZV88cmVwbGFjZWFibGU+cGFja2FnZWZvcm1hdDwvcmVwbGFjZWFibGU+4oCdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT5wYWNrYWdlZm9ybWF0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgImlwayIsICJycG0iLCBhbmQgImRlYiIsIHdoaWNoIGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgcGFja2FnZSBmb3JtYXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHRocmVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBwYWNrYWdlIGZvcm1hdHMsIHlvdSBjYW4gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyB0aGUgZmlyc3QgYXJndW1lbnQgd2hlbiBjcmVhdGluZyBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd291bGQgbGlrZSB5b3VyIGltYWdlIHRvIHN0YXJ0IG9mZiB3aXRoIGEgYmFzaWMKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBkYXRhYmFzZSBvZiB0aGUgcGFja2FnZXMgaW4geW91ciBjdXJyZW50IGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgaGF2ZSB0aGUgcmVsZXZhbnQgdG9vbHMgYXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGRhdGFiYXNlIGNvbnRhaW5pbmcgdGhlIHBhY2thZ2VzIGluIHlvdXIgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBidWlsZCBhcyB3ZWxsIGFzIHRvIGhhdmUgdGhlIHJlbGV2YW50IHRvb2xzIGF2YWlsYWJsZSBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGZvciBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCwgeW91IGNhbiBpbmNsdWRlCiAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlLW1hbmFnZW1lbnQiIGluIHRoZQogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KQEAgLTczNTksMjcgKzc5NDMsMzMgQEAKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+c29tZS1wYWNrYWdlPC9yZXBsYWNlYWJsZT4gcGFja2FnZS1pbmRleAogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYmVjYXVzZSBCaXRCYWtlIGRvZXMgbm90IHByb3Blcmx5IHNjaGVkdWxlIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1pbmRleDwvZmlsZW5hbWU+IHRhcmdldCBmdWxseSBhZnRlciBhbnkKLSAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGFyZ2V0IGhhcyBjb21wbGV0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gZm9yIHRoaXMgcmVzdHJpY3Rpb24gaXMgYmVjYXVzZSBCaXRCYWtlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIHByb3Blcmx5IHNjaGVkdWxlIHRoZSA8ZmlsZW5hbWU+cGFja2FnZS1pbmRleDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBmdWxseSBhZnRlciBhbnkgb3RoZXIgdGFyZ2V0IGhhcyBjb21wbGV0ZWQuCiAgICAgICAgICAgICAgICAgICAgIFRodXMsIGJlIHN1cmUgdG8gcnVuIHRoZSBwYWNrYWdlIHVwZGF0ZSBzdGVwIHNlcGFyYXRlbHkuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFzIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldC1pcGsnPlVzaW5nIElQSzwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIGlmIHlvdSBhcmUgdXNpbmcgSVBLIGFzIHlvdXIgcGFja2FnZSBmb3JtYXQsIHlvdQotICAgICAgICAgICAgICAgICAgICBjYW4gbWFrZSB1c2Ugb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0cm8tZmVlZC1jb25maWdzPC9maWxlbmFtZT4gcmVjaXBlIHByb3ZpZGVkCi0gICAgICAgICAgICAgICAgICAgIGJ5IDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gaW4gb3JkZXIgdG8gY29uZmlndXJlIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHRvIHVzZSB5b3VyIElQSyBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9GRUVEX0FSQ0hTJz48ZmlsZW5hbWU+UEFDS0FHRV9GRUVEX0FSQ0hTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfRkVFRF9CQVNFX1BBVEhTJz48ZmlsZW5hbWU+UEFDS0FHRV9GRUVEX0JBU0VfUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfRkVFRF9VUklTJz48ZmlsZW5hbWU+UEFDS0FHRV9GRUVEX1VSSVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBwcmUtY29uZmlndXJlIHRhcmdldCBpbWFnZXMgdG8gdXNlIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBmZWVkLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGVzZSB2YXJpYWJsZXMsIHRoZW4gbWFudWFsIHN0ZXBzCisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgc3Vic2VxdWVudCBzZWN0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNldCB0aGVzZSB2YXJpYWJsZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBwcm9kdWNlIGEgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW1hZ2UuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91ciBidWlsZCBpcyBjb21wbGV0ZSwgeW91ciBwYWNrYWdlcyByZXNpZGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95LzxyZXBsYWNlYWJsZT5wYWNrYWdlLWZvcm1hdDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7VE1QRElSfS9kZXBsb3kvPHJlcGxhY2VhYmxlPnBhY2thZ2Vmb3JtYXQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgaXMgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGFuZCB5b3VyIHNlbGVjdGVkIHBhY2thZ2UgdHlwZQogICAgICAgICAgICAgICAgICAgICBpcyBJUEssIHRoZW4geW91ciBJUEsgcGFja2FnZXMgYXJlIGF2YWlsYWJsZSBpbgogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pcGs8L2ZpbGVuYW1lPi4KQEAgLTczOTAsMTIxICs3OTgwLDM4IEBACiAgICAgICAgICAgICAgICAgPHRpdGxlPkhvc3Qgb3IgU2VydmVyIE1hY2hpbmUgU2V0dXA8L3RpdGxlPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgcGFja2FnZXMgYXJlIHNlcnZlZCBmcm9tIGEgc2VydmVyIHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIEhUVFAuCi0gICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG90aGVyIHByb3RvY29scyBhcmUgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSBIVFRQLCB0aGVuIHNldHVwIGFuZCBjb25maWd1cmUgYQotICAgICAgICAgICAgICAgICAgICB3ZWIgc2VydmVyLCBzdWNoIGFzIEFwYWNoZSAyIG9yIGxpZ2h0dHBkLCBvbiB0aGUgbWFjaGluZQotICAgICAgICAgICAgICAgICAgICBzZXJ2aW5nIHRoZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggb3RoZXIgcHJvdG9jb2xzIGFyZSBwb3NzaWJsZSwgYSBzZXJ2ZXIgdXNpbmcgSFRUUAorICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgc2VydmVzIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgSFRUUCwgdGhlbiBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBhCisgICAgICAgICAgICAgICAgICAgIHdlYiBzZXJ2ZXIgc3VjaCBhcyBBcGFjaGUgMiwgbGlnaHR0cGQsIG9yCisgICAgICAgICAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXIgb24gdGhlIG1hY2hpbmUgc2VydmluZyB0aGUgcGFja2FnZXMuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFzIHByZXZpb3VzbHkgbWVudGlvbmVkLCB0aGUgYnVpbGQgbWFjaGluZSBjYW4gYWN0IGFzIHRoZQotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHNlcnZlci4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyB0aGF0IGRlc2NyaWJlIHNlcnZlciBtYWNoaW5lCi0gICAgICAgICAgICAgICAgICAgIHNldHVwcywgdGhlIGJ1aWxkIG1hY2hpbmUgaXMgYXNzdW1lZCB0byBhbHNvIGJlIHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIHVwIGEgU2ltcGxlSFRUUFNlcnZlciB3ZWIgc2VydmVyIHRvIHNoYXJlIHBhY2thZ2UgZmVlZHMKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgZGV2ZWxvcGVyJ3MgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhpcyBzZXJ2ZXIgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGZvciBhIHByb2R1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHRoZSBzZXR1cCBpcyBzaW1wbGUgYW5kIHN0cmFpZ2h0IGZvcndhcmQuCisgICAgICAgICAgICAgICAgICAgIFNob3VsZCB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgc2VydmVyIG1vcmUgc3VpdGVkIGZvcgorICAgICAgICAgICAgICAgICAgICBwcm9kdWN0aW9uIChlLmcuIEFwYWNoZSAyLCBMaWdodHRwZCwgb3IgTmdpbngpLCB0YWtlIHRoZQorICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBzdGVwcyB0byBkbyBzby4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zZXJ2ZXItYXBhY2hlJz4KLSAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlcnZpbmcgUGFja2FnZXMgdmlhIEFwYWNoZSAyPC90aXRsZT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdSBhcmUgdXNpbmcgdGhlIEFwYWNoZSAyCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIGRpcmVjdG9yeSB0byB5b3VyIEFwYWNoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB3aGljaCB5b3UgY2FuIGZpbmQgYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBjb21tYW5kcyBzaW1pbGFyIHRvIHRoZXNlIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIGV4YW1wbGUgY29tbWFuZHMgYXNzdW1lIGEgdG9wLWxldmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gaW4geW91ciBob21lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYWxzbyBhc3N1bWVzIGFuIFJQTSBwYWNrYWdlIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYSBkaWZmZXJlbnQgcGFja2FnZSB0eXBlLCBzdWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIElQSywgdXNlICJpcGsiIGluIHRoZSBwYXRobmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJmx0O1ZpcnR1YWxIb3N0ICo6ODAmZ3Q7Ci0gICAgICAgLi4uLgotICAgICAgICAgQWxpYXMgL3JwbSB+L3Bva3kvYnVpbGQvdG1wL2RlcGxveS9ycG0KLSAgICAgICAgICZsdDtEaXJlY3RvcnkgIn4vcG9reS9idWlsZC90bXAvZGVwbG95L3JwbSImZ3Q7Ci0gICAgICAgICAgIE9wdGlvbnMgK0luZGV4ZXMKLSAgICAgICAgICZsdDsvRGlyZWN0b3J5Jmd0OwotICAgICAmbHQ7L1ZpcnR1YWxIb3N0Jmd0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxvYWQgdGhlIEFwYWNoZSBjb25maWd1cmF0aW9uIGFzIGRlc2NyaWJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIHN0ZXAuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbGwgY29tbWFuZHMsIGJlIHN1cmUgeW91IGhhdmUgcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2aWxlZ2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIHVzaW5nIEZlZG9yYSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MsIHVzZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgc2VydmljZSBodHRwZCByZWxvYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgVWJ1bnR1IGFuZCBEZWJpYW4sIHVzZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgL2V0Yy9pbml0LmQvYXBhY2hlMiByZWxvYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgT3BlblNVU0UsIHVzZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgL2V0Yy9pbml0LmQvYXBhY2hlMiByZWxvYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBTZWN1cml0eS1FbmhhbmNlZCBMaW51eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0VMaW51eCksIHlvdSBuZWVkIHRvIGxhYmVsIHRoZSBmaWxlcyBhcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBhY2Nlc3NpYmxlIHRocm91Z2ggQXBhY2hlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZyb20gdGhlIGRldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIFJQTSBwYWNrYWdlIHR5cGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgY2hjb24gLVIgLWggLXQgaHR0cGRfc3lzX2NvbnRlbnRfdCB0bXAvZGVwbG95L3JwbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3BhY2thZ2Utc2VydmVyLWxpZ2h0dHBkJz4KLSAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlcnZpbmcgUGFja2FnZXMgdmlhIGxpZ2h0dHBkPC90aXRsZT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgbGlnaHR0cGQsIGFsbCB5b3UgbmVlZAotICAgICAgICAgICAgICAgICAgICAgICAgdG8gZG8gaXMgdG8gcHJvdmlkZSBhIGxpbmsgZnJvbSB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveS88cmVwbGFjZWFibGU+cGFja2FnZS1mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdG8gbGlnaHR0cGQncyBkb2N1bWVudC1yb290LgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXRlcm1pbmUgdGhlIHNwZWNpZmljcyBvZiB5b3VyIGxpZ2h0dHBkCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gYnkgbG9va2luZyB0aHJvdWdoIGl0cyBjb25maWd1cmF0aW9uIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IGZvdW5kIGF0OgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvbGlnaHR0cGQvbGlnaHR0cGQuY29uZjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBJUEssIGxpZ2h0dHBkJ3MKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LXJvb3QgaXMgc2V0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Zhci93d3cvbGlnaHR0cGQ8L2ZpbGVuYW1lPiwgYW5kIHlvdSBoYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZvciBhIHRhcmdldCBuYW1lZCAiQk9BUkQiLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB5b3UgbWlnaHQgY3JlYXRlIGEgbGluayBmcm9tIHlvdXIgYnVpbGQgbG9jYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIGxpZ2h0dHBkJ3MgZG9jdW1lbnQtcm9vdCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICMgbG4gLXMgJChQV0QpL3RtcC9kZXBsb3kvaXBrIC92YXIvd3d3L2xpZ2h0dHBkL0JPQVJELWRpcgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgbmVlZCB0byBzdGFydCB0aGUgbGlnaHR0cGQgc2VydmVyLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGhvZCB1c2VkIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgdmFyaWVzIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBvbmUgYmFzaWMgbWV0aG9kIHRoYXQgc3RhcnRzIGl0IGJ5IGhhbmQgaXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIyBsaWdodHRwZCAtZiAvZXRjL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRnJvbSB3aXRoaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSB3aGVyZSB5b3UgaGF2ZSBidWlsdCBhbgorICAgICAgICAgICAgICAgICAgICBpbWFnZSBiYXNlZCBvbiB5b3VyIHBhY2thZ2luZyBjaG9pY2UgKGkuZS4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNldHRpbmcpLCBzaW1wbHkgc3RhcnQgdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGFzc3VtZXMgYSBidWlsZCBkaXJlY3Rvcnkgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vcG9reS9idWlsZC90bXAvZGVwbG95L3JwbTwvZmlsZW5hbWU+IGFuZCBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPiBzZXR0aW5nIG9mCisgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlX3JwbSI6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQvdG1wL2RlcGxveS9ycG0KKyAgICAgJCBweXRob24gLW0gU2ltcGxlSFRUUFNlcnZlcgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9zZWN0aW9uPgogCiAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQtdGFyZ2V0Jz4KQEAgLTc1MTMsNDIgKzgwMjAsNDYgQEAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB1cCB0aGUgdGFyZ2V0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIHRoZQogICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIFJQTSBhbmQgSVBLLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIFJQTSwgSVBLLCBhbmQgREVCLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtcnBtJz4KICAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIFJQTTwvdGl0bGU+CiAKICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24gZm9yIHBlcmZvcm1pbmcgcnVudGltZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IG9mIFJQTSBwYWNrYWdlcyBvbiB0aGUgdGFyZ2V0IGlzIGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtYXJ0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnNtYXJ0PC9maWxlbmFtZT4gYXBwbGljYXRpb24gcGVyZm9ybXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IG9mIFJQTSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHBlcmZvcm0gYW4gaW5pdGlhbCBzZXR1cCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zbWFydDwvZmlsZW5hbWU+IG9uIHRoZSB0YXJnZXQgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9GRUVEX0FSQ0hTJz48ZmlsZW5hbWU+UEFDS0FHRV9GRUVEX0FSQ0hTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0ZFRURfQkFTRV9QQVRIUyc+PGZpbGVuYW1lPlBBQ0tBR0VfRkVFRF9CQVNFX1BBVEhTPC9maWxlbmFtZT48L3VsaW5rPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9GRUVEX1VSSVMnPjxmaWxlbmFtZT5QQUNLQUdFX0ZFRURfVVJJUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBoYXZlIG5vdCBiZWVuIHNldCBvciB0aGUgdGFyZ2V0IGltYWdlIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQgYmVmb3JlIHRoZSB2YXJpYWJsZXMgd2VyZSBzZXQuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSB0YXJnZXQgbWFjaGluZSwgeW91IG5lZWQgdG8gaW5mb3JtCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c21hcnQ8L2ZpbGVuYW1lPiBvZiBldmVyeSBwYWNrYWdlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB1c2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdXIgdGFyZ2V0IGRldmljZSBjYW4gdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHRocmVlIHBhY2thZ2UgZGF0YWJhc2VzIGZyb20gYSBzZXJ2ZXIgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXJ2ZXIubmFtZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgYXNzdW1lIHRoZSB0YXJnZXQgaXMgYWJsZSB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgcGFja2FnZSBkYXRhYmFzZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWxsPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5pNTg2PC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIEdpdmVuIHRoaXMgZXhhbXBsZSwgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IGZyb20gYSBzZXJ2ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teS5zZXJ2ZXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGluZm9ybSA8ZmlsZW5hbWU+c21hcnQ8L2ZpbGVuYW1lPiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBkYXRhYmFzZXMgYnkgaXNzdWluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBjb21tYW5kcyBvbiB0aGUgdGFyZ2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAjIHNtYXJ0IGNoYW5uZWwgLS1hZGQgYWxsIHR5cGU9cnBtLW1kIGJhc2V1cmw9aHR0cDovL3NlcnZlci5uYW1lL3JwbS9hbGwKLSAgICAgIyBzbWFydCBjaGFubmVsIC0tYWRkIGk1ODUgdHlwZT1ycG0tbWQgYmFzZXVybD1odHRwOi8vc2VydmVyLm5hbWUvcnBtL2k1ODYKLSAgICAgIyBzbWFydCBjaGFubmVsIC0tYWRkIHFlbXV4ODYgdHlwZT1ycG0tbWQgYmFzZXVybD1odHRwOi8vc2VydmVyLm5hbWUvcnBtL3FlbXV4ODYKKyAgICAgIyBzbWFydCBjaGFubmVsIC0tYWRkIGk1ODUgdHlwZT1ycG0tbWQgYmFzZXVybD1odHRwOi8vbXkuc2VydmVyL3JwbS9pNTg2CisgICAgICMgc21hcnQgY2hhbm5lbCAtLWFkZCBxZW11eDg2IHR5cGU9cnBtLW1kIGJhc2V1cmw9aHR0cDovL215LnNlcnZlci9ycG0vcWVtdXg4NgorICAgICAjIHNtYXJ0IGNoYW5uZWwgLS1hZGQgYWxsIHR5cGU9cnBtLW1kIGJhc2V1cmw9aHR0cDovL215LnNlcnZlci9ycG0vYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbHNvIGZyb20gdGhlIHRhcmdldCBtYWNoaW5lLCBmZXRjaCB0aGUgcmVwb3NpdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUgdGFyZ2V0IG1hY2hpbmUsIGZldGNoIHRoZSByZXBvc2l0b3J5OgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAjIHNtYXJ0IHVwZGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgdXNlIHRoZSA8ZmlsZW5hbWU+c21hcnQgcXVlcnk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5zbWFydCBpbnN0YWxsPC9maWxlbmFtZT4gY29tbWFuZHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgYW5kIGluc3RhbGwgcGFja2FnZXMgZnJvbSB0aGUgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgZXZlcnl0aGluZyBpcyBzZXQgdXAsIDxmaWxlbmFtZT5zbWFydDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBhYmxlIHRvIGZpbmQsIGluc3RhbGwsIGFuZCB1cGdyYWRlIHBhY2thZ2VzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzcGVjaWZpZWQgcmVwb3NpdG9yeS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KIApAQCAtNzU1Niw2MSArODA2Nyw5OSBAQAogICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgSVBLPC90aXRsZT4KIAogICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBmb3IgcGVyZm9ybWluZyBydW50aW1lIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgb2YgSVBLIHBhY2thZ2VzIG9uIHRoZSB0YXJnZXQgaXMgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gYXBwbGljYXRpb24gcGVyZm9ybXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IG9mIElQSyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHBlcmZvcm0gYW4gaW5pdGlhbCBzZXR1cCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gb24gdGhlIHRhcmdldCBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0ZFRURfQVJDSFMnPjxmaWxlbmFtZT5QQUNLQUdFX0ZFRURfQVJDSFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfRkVFRF9CQVNFX1BBVEhTJz48ZmlsZW5hbWU+UEFDS0FHRV9GRUVEX0JBU0VfUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0ZFRURfVVJJUyc+PGZpbGVuYW1lPlBBQ0tBR0VfRkVFRF9VUklTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGhhdmUgbm90IGJlZW4gc2V0IG9yIHRoZSB0YXJnZXQgaW1hZ2Ugd2FzCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsdCBiZWZvcmUgdGhlIHZhcmlhYmxlcyB3ZXJlIHNldC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gaW5mb3JtIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGRhdGFiYXNlcyB5b3Ugd2FudCB0byB1c2UsIHNpbXBseSBjcmVhdGUgb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBvciBtb3JlIDxmaWxlbmFtZT4qLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL29wa2c8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb24gdGhlIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IGFwcGxpY2F0aW9uIHVzZXMgdGhlbQotICAgICAgICAgICAgICAgICAgICAgICAgdG8gZmluZCBpdHMgYXZhaWxhYmxlIHBhY2thZ2UgZGF0YWJhc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgY29uZmlndXJlZCB5b3VyIEhUVFAgc2VydmVyCi0gICAgICAgICAgICAgICAgICAgICAgICBvbiB5b3VyIG1hY2hpbmUgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53d3cubXlzaXRlLmNvbTwvZmlsZW5hbWU+IHRvIHNlcnZlIGZpbGVzCi0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGEgPGZpbGVuYW1lPkJPQVJELWRpcjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB1bmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgaXRzIGRvY3VtZW50LXJvb3QuCi0gICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBtaWdodCBjcmVhdGUgYSBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlIG9uIHRoZSB0YXJnZXQgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9vcGtnL2Jhc2UtZmVlZHMuY29uZjwvZmlsZW5hbWU+IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gYXBwbGljYXRpb24gdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB0byBmaW5kIGF2YWlsYWJsZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZpbGUgaW5zaWRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPi9ldGMvb3BrZy88L2ZpbGVuYW1lPiBkaXJlY3Rpb24sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1zIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gb2YgYW55IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIHNlcnZpbmcgcGFja2FnZXMgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aXBrLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmk1ODY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbGw8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IGRhdGFiYXNlcyB0aHJvdWdoIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBIVFRQIHNlcnZlciBuYW1lZCA8ZmlsZW5hbWU+bXkuc2VydmVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0LCBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5teV9yZXBvLmNvbmY8L2ZpbGVuYW1lPikgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvb3BrZy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgc3JjL2d6IGFsbCBodHRwOi8vd3d3Lm15c2l0ZS5jb20vQk9BUkQtZGlyL2FsbAotICAgICBzcmMvZ3ogYXJtdjdhIGh0dHA6Ly93d3cubXlzaXRlLmNvbS9CT0FSRC1kaXIvYXJtdjdhCi0gICAgIHNyYy9neiBiZWFnbGVib25lIGh0dHA6Ly93d3cubXlzaXRlLmNvbS9CT0FSRC1kaXIvYmVhZ2xlYm9uZQorICAgICBzcmMvZ3ogYWxsIGh0dHA6Ly9teS5zZXJ2ZXIvaXBrL2FsbAorICAgICBzcmMvZ3ogaTU4NiBodHRwOi8vbXkuc2VydmVyL2lway9pNTg2CisgICAgIHNyYy9neiBxZW11eDg2IGh0dHA6Ly9teS5zZXJ2ZXIvaXBrL3FlbXV4ODYKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSB3YXkgb2YgbWFraW5nIGl0IGVhc2llciB0byBnZW5lcmF0ZSBhbmQgbWFrZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgSVBLIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXZhaWxhYmxlIG9uIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgc2ltcGx5IGRlZmluZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZFRURfREVQTE9ZRElSX0JBU0VfVVJJJz48ZmlsZW5hbWU+RkVFRF9ERVBMT1lESVJfQkFTRV9VUkk8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB0byBwb2ludCB0byB5b3VyIHNlcnZlciBhbmQgdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LXJvb3Qgd2hpY2ggY29udGFpbnMgdGhlIGRhdGFiYXNlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOiBpZiB5b3UgYXJlIHNlcnZpbmcgeW91ciBwYWNrYWdlcyBvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICBIVFRQLCB5b3VyIHNlcnZlcidzIElQIGFkZHJlc3MgaXMgMTkyLjE2OC43LjEsIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBkYXRhYmFzZXMgYXJlIGxvY2F0ZWQgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qk9BUkQtZGlyPC9maWxlbmFtZT4gdW5kZXJuZWF0aCB5b3VyIEhUVFAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcidzIGRvY3VtZW50LXJvb3QsIHlvdSBuZWVkIHRvIHNldAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFRURfREVQTE9ZRElSX0JBU0VfVVJJPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vMTkyLjE2OC43LjEvQk9BUkQtZGlyPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBhIHNldCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB5b3UKLSAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgdGFyZ2V0IHRvIHdvcmsgd2l0aCB0aGlzIGZlZWQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSB0YXJnZXQgbWFjaGluZSwgZmV0Y2ggKG9yIHJlZnJlc2gpIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiB1c2luZyB0aGlzIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBOZXh0LCBpbnN0cnVjdCA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IHRvIGZldGNoCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgIyBvcGtnIHVwZGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgdXNlIHRoZSA8ZmlsZW5hbWU+b3BrZyBsaXN0PC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BrZyBpbnN0YWxsPC9maWxlbmFtZT4gY29tbWFuZHMgdG8gZmluZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgcGFja2FnZXMgZnJvbSB0aGUgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gYXBwbGljYXRpb24gaXMgbm93IGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZpbmQsIGluc3RhbGwsIGFuZCB1cGdyYWRlIHBhY2thZ2VzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtZGViJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIERFQjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmFwdDwvZmlsZW5hbWU+IGFwcGxpY2F0aW9uIHBlcmZvcm1zCisgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBvZiBERUIgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIHVzZXMgYSBzb3VyY2UgbGlzdCBmaWxlIHRvIGZpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBwYWNrYWdlIGRhdGFiYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHBlcmZvcm0gYW4gaW5pdGlhbCBzZXR1cCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcHQ8L2ZpbGVuYW1lPiBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfRkVFRF9BUkNIUyc+PGZpbGVuYW1lPlBBQ0tBR0VfRkVFRF9BUkNIUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9GRUVEX0JBU0VfUEFUSFMnPjxmaWxlbmFtZT5QQUNLQUdFX0ZFRURfQkFTRV9QQVRIUzwvZmlsZW5hbWU+PC91bGluaz4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfRkVFRF9VUklTJz48ZmlsZW5hbWU+UEFDS0FHRV9GRUVEX1VSSVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaGF2ZSBub3QgYmVlbiBzZXQgb3IgdGhlIHRhcmdldCBpbWFnZSB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGJlZm9yZSB0aGUgdmFyaWFibGVzIHdlcmUgc2V0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBpbmZvcm0gPGZpbGVuYW1lPmFwdDwvZmlsZW5hbWU+IG9mIHRoZSByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB1c2UsIHlvdSBtaWdodCBjcmVhdGUgYSBsaXN0IGZpbGUgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teV9yZXBvLmxpc3Q8L2ZpbGVuYW1lPikgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvYXB0L3NvdXJjZXMubGlzdC5kLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgc2VydmluZyBwYWNrYWdlcyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWIvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aTU4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsbDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gZGF0YWJhc2VzIHRocm91Z2ggYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAgc2VydmVyIG5hbWVkIDxmaWxlbmFtZT5teS5zZXJ2ZXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IGZpbGUgc2hvdWxkIGNvbnRhaW46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlYiBodHRwOi8vbXkuc2VydmVyL2RlYi9hbGwgLi8KKyAgICAgZGViIGh0dHA6Ly9teS5zZXJ2ZXIvZGViL2k1ODYgLi8KKyAgICAgZGViIGh0dHA6Ly9teS5zZXJ2ZXIvZGViL3FlbXV4ODYgLi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIGluc3RydWN0IHRoZSA8ZmlsZW5hbWU+YXB0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHRvIGZldGNoIHRoZSByZXBvc2l0b3J5IGluZm9ybWF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIGFwdC1nZXQgdXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGlzIHN0ZXAsIDxmaWxlbmFtZT5hcHQ8L2ZpbGVuYW1lPiBpcyBhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICB0byBmaW5kLCBpbnN0YWxsLCBhbmQgdXBncmFkZSBwYWNrYWdlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHJlcG9zaXRvcnkuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgICAgICA8L3NlY3Rpb24+CkBAIC04NTYxLDE5ICs5MTEwLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgc2VwYXJhdGVseSBzdGFydGVkIFFFTVUgb3IgYW55CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdmlydHVhbCBtYWNoaW5lIG1hbmFnZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJHdW1taWJvb3RUYXJnZXQiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICJHdW1taWJvb3RUYXJnZXQiIGlmIHlvdXIgaGFyZHdhcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IlN5c3RlbWQtYm9vdFRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIlN5c3RlbWQtYm9vdFRhcmdldCIgaWYgeW91ciBoYXJkd2FyZSBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIEVGSS1iYXNlZCBtYWNoaW5lIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT4gYXMgYm9vdGxvYWRlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZC1ib290PC9maWxlbmFtZT4gYXMgYm9vdGxvYWRlciBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Igc29tZXRoaW5nIHNpbWlsYXIpIGlzIGluc3RhbGxlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCB5b3VyIGhhcmR3YXJlIHVuZGVyIHRlc3QgbXVzdCBiZSBpbiBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREhDUC1lbmFibGVkIG5ldHdvcmsgdGhhdCBnaXZlcyBpdCB0aGUgc2FtZSBJUAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgZm9yIGVhY2ggcmVib290LjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgY2hvb3NlICJHdW1taWJvb3RUYXJnZXQiLCB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgY2hvb3NlICJTeXN0ZW1kLWJvb3RUYXJnZXQiLCB0aGVyZSBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBhbmQgY29uc2lkZXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZWxlY3RpbmctZ3VtbWlib290dGFyZ2V0Jz5TZWxlY3RpbmcgR3VtbWlib290VGFyZ2V0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2VsZWN0aW5nLXN5c3RlbWQtYm9vdHRhcmdldCc+U2VsZWN0aW5nIFN5c3RlbWQtYm9vdFRhcmdldDwvbGluaz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggZm9sbG93cywgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJCZWFnbGVCb25lVGFyZ2V0Ijo8L2VtcGhhc2lzPgpAQCAtODYxOSwxMiArOTE2OCwxMiBAQAogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvc2VjdGlvbj4KIAotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3NlbGVjdGluZy1ndW1taWJvb3R0YXJnZXQnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5TZWxlY3RpbmcgR3VtbWlib290VGFyZ2V0PC90aXRsZT4KKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzZWxlY3Rpbmctc3lzdGVtZC1ib290dGFyZ2V0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2VsZWN0aW5nIFN5c3RlbWQtYm9vdFRhcmdldDwvdGl0bGU+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBub3Qgc2V0IDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+IHRvCi0gICAgICAgICAgICAgICAgICAgICJHdW1taWJvb3RUYXJnZXQiLCB0aGVuIHlvdSBkbyBub3QgbmVlZCBhbnkgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgIlN5c3RlbWQtYm9vdFRhcmdldCIsIHRoZW4geW91IGRvIG5vdCBuZWVkIGFueSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIHNlY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2tpcCBkb3duIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncWVtdS1pbWFnZS1ydW5uaW5nLXRlc3RzJz5SdW5uaW5nIFRlc3RzPC9saW5rPiIKQEAgLTg2MzMsMTQgKzkxODIsMTQgQEAKIAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZGlkIHNldCA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPiB0bwotICAgICAgICAgICAgICAgICAgICAiR3VtbWlib290VGFyZ2V0IiwgeW91IGFsc28gbmVlZCB0byBwZXJmb3JtIGEgb25lLXRpbWUKKyAgICAgICAgICAgICAgICAgICAgIlN5c3RlbWQtYm9vdFRhcmdldCIsIHlvdSBhbHNvIG5lZWQgdG8gcGVyZm9ybSBhIG9uZS10aW1lCiAgICAgICAgICAgICAgICAgICAgIHNldHVwIG9mIHlvdXIgbWFzdGVyIGltYWdlIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IDxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCA8ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhcyBmb2xsb3dzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCIKKyAgICAgRUZJX1BST1ZJREVSID0gInN5c3RlbWQtYm9vdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBtYXN0ZXIgaW1hZ2U6PC9lbXBoYXNpcz4KQEAgLTg3MDQsNyArOTI1Myw3IEBACiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHRoaW5nIHlvdSBuZWVkIHRvIGRvIHdoZW4gc2V0dGluZwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPiB0byAiR3VtbWlib290VGFyZ2V0IiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPiB0byAiU3lzdGVtZC1ib290VGFyZ2V0IiBpcwogICAgICAgICAgICAgICAgICAgICB0byBzZXQgdXAgdGhlIHRlc3QgaW1hZ2U6CiAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOjwvZW1waGFzaXM+CkBAIC04NzEzLDcgKzkyNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgSU1BR0VfRlNUWVBFUyArPSAidGFyLmd6IgogICAgICBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiCi0gICAgIFRFU1RfVEFSR0VUID0gIkd1bW1pYm9vdFRhcmdldCIKKyAgICAgVEVTVF9UQVJHRVQgPSAiU3lzdGVtZC1ib290VGFyZ2V0IgogICAgICBURVNUX1RBUkdFVF9JUCA9ICIxOTIuMTY4LjIuMyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CkBAIC04OTc0LDE4ICs5NTIzLDE3IEBACiAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCiAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIHRoZSBJUCBhZGRyZXNzIHlvdSBuZWVkOgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgVEVTVF9FWFBPUlRfT05MWSA9ICIxIgotICAgICBURVNUX1RBUkdFVCA9ICJzaW1wbGVyZW1vdGUiCisgICAgIElOSEVSSVQgKz0idGVzdGV4cG9ydCIKICAgICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC43LjIiCiAgICAgIFRFU1RfU0VSVkVSX0lQID0gIjE5Mi4xNjguNy4xIgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoZW4gZXhwb3J0IHRoZSB0ZXN0cyB3aXRoIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZQorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RleHBvcnQKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgRXhwb3J0aW5nIHRoZSB0ZXN0cyBwbGFjZXMgdGhlbSBpbiB0aGUKICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gaW4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3Rlc3RleHBvcnQvY29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4sIHdoaWNoCiAgICAgICAgICAgICAgICAgaXMgY29udHJvbGxlZCBieSB0aGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9FWFBPUlRfRElSPC9maWxlbmFtZT4gdmFyaWFibGUuCiAgICAgICAgICAgICA8L3BhcmE+CkBAIC04OTkzLDM3ICs5NTQxLDkgQEAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHJ1biB0aGUgdGVzdHMgb3V0c2lkZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQ6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIHRtcC90ZXN0aW1hZ2UvY29yZS1pbWFnZS1zYXRvCisgICAgICQgY2QgdG1wL3Rlc3RleHBvcnQvY29yZS1pbWFnZS1zYXRvCiAgICAgICQgLi9ydW5leHBvcnRlZC5weSB0ZXN0ZGF0YS5qc29uCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBUaGlzICJleHBvcnQiIGZlYXR1cmUgZG9lcyBub3QgZGVwbG95IG9yIGJvb3QgdGhlIHRhcmdldAotICAgICAgICAgICAgICAgICAgICBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgWW91ciB0YXJnZXQgKGJlIGl0IGEgUWVtdSBvciBoYXJkd2FyZSBvbmUpCi0gICAgICAgICAgICAgICAgICAgIGhhcyB0byBhbHJlYWR5IGJlIHVwIGFuZCBydW5uaW5nIHdoZW4geW91IGNhbGwKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bmV4cG9ydGVkLnB5PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBleHBvcnRlZCBkYXRhIChpLmUuIDxmaWxlbmFtZT50ZXN0ZGF0YS5qc29uPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgY29udGFpbnMgcGF0aHMgdG8gdGhlIEJ1aWxkIERpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjYW4gYmUgbW92ZWQKLSAgICAgICAgICAgICAgICB0byBhbm90aGVyIG1hY2hpbmUgYXMgbG9uZyBhcyB5b3UgdXBkYXRlIHNvbWUgcGF0aHMgaW4gdGhlCi0gICAgICAgICAgICAgICAgSlNPTi4KLSAgICAgICAgICAgICAgICBVc3VhbGx5LCB5b3Ugb25seSBjYXJlIGFib3V0IHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJ9L3JwbTwvZmlsZW5hbWU+IGRpcmVjdG9yeQotICAgICAgICAgICAgICAgIChhc3N1bWluZyB0aGUgUlBNIGFuZCBTbWFydCB0ZXN0cyBhcmUgZW5hYmxlZCkuCi0gICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBydW5uaW5nIHRoZSB0ZXN0cyBvbiBvdGhlciBtYWNoaW5lCi0gICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB5b3UgaGF2ZSB0byBtb3ZlIHRoZSBjb250ZW50cyBhbmQgY2FsbAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5leHBvcnRlZC5weTwvZmlsZW5hbWU+IHdpdGgKLSAgICAgICAgICAgICAgICAiLS1kZXBsb3ktZGlyIDxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iIGFzCi0gICAgICAgICAgICAgICAgZm9sbG93czoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIC4vcnVuZXhwb3J0ZWQucHkgLS1kZXBsb3ktZGlyIC9uZXcvcGF0aC9vbi90aGlzL21hY2hpbmUgdGVzdGRhdGEuanNvbgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuZXhwb3J0ZWQucHk8L2ZpbGVuYW1lPiBhY2NlcHRzIG90aGVyIGFyZ3VtZW50cwotICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgZGVzY3JpYmVkIHVzaW5nIDxmaWxlbmFtZT4tLWhlbHA8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCkBAIC05MTM4LDcgKzk2NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBjb250cm9sbGVyIG9iamVjdCB1c2VkIHRvIGRlcGxveQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXJ0IGFuIGltYWdlIG9uIGEgcGFydGljdWxhciB0YXJnZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIFFlbXVUYXJnZXQsIFNpbXBsZVJlbW90ZSwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdW1taWJvb3RUYXJnZXQpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtZC1ib290VGFyZ2V0KS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RzIHVzdWFsbHkgdXNlIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmlwPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KQEAgLTkxOTgsNiArOTcxOCw3OCBAQAogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLXBhY2thZ2VzLWluLXRoZS1kdXQtd2l0aG91dC10aGUtcGFja2FnZS1tYW5hZ2VyJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIFBhY2thZ2VzIGluIHRoZSBEVVQgV2l0aG91dCB0aGUgUGFja2FnZSBNYW5hZ2VyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBhIHRlc3QgcmVxdWlyZXMgYSBwYWNrYWdlIGJ1aWx0IGJ5IEJpdEJha2UsIGl0IGlzIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgdG8gaW5zdGFsbCB0aGF0IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgSW5zdGFsbGluZyB0aGUgcGFja2FnZSBkb2VzIG5vdCByZXF1aXJlIGEgcGFja2FnZSBtYW5hZ2VyIGJlCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCAoRFVUKS4KKyAgICAgICAgICAgICAgICBJdCBkb2VzLCBob3dldmVyLCByZXF1aXJlIGFuIFNTSCBjb25uZWN0aW9uIGFuZCB0aGUgdGFyZ2V0IG11c3QKKyAgICAgICAgICAgICAgICBiZSB1c2luZyB0aGUgPGZpbGVuYW1lPnNzaGNvbnRyb2w8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgdXNlcyA8ZmlsZW5hbWU+c2NwPC9maWxlbmFtZT4gdG8gY29weSBmaWxlcworICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBob3N0IHRvIHRoZSB0YXJnZXQsIHdoaWNoIGNhdXNlcyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCBhdHRyaWJ1dGVzIHRvIGJlIGxvc3QuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIEpTT04gZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgcGFja2FnZXMgbmVlZGVkIGJ5IGEgdGVzdC4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgbXVzdCBiZSBpbiB0aGUgc2FtZSBwYXRoIGFzIHRoZSBmaWxlIHVzZWQgdG8gZGVmaW5lCisgICAgICAgICAgICAgICAgdGhlIHRlc3RzLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgZmlsZW5hbWUgbXVzdCBtYXAgZGlyZWN0bHkgdG8gdGhlIHRlc3QKKyAgICAgICAgICAgICAgICBtb2R1bGUgbmFtZSB3aXRoIGEgPGZpbGVuYW1lPi5qc29uPC9maWxlbmFtZT4gZXh0ZW5zaW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgSlNPTiBmaWxlIG11c3QgaW5jbHVkZSBhbiBvYmplY3Qgd2l0aCB0aGUgdGVzdCBuYW1lIGFzCisgICAgICAgICAgICAgICAga2V5cyBvZiBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCisgICAgICAgICAgICAgICAgVGhpcyBvYmplY3QgKG9yIGFycmF5IG9mIG9iamVjdHMpIHVzZXMgdGhlIGZvbGxvd2luZyBkYXRhOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4icGtnIiAtIEEgbWFuZGF0b3J5IHN0cmluZyB0aGF0IGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiJybSIgLSBBbiBvcHRpb25hbCBib29sZWFuLCB3aGljaCBkZWZhdWx0cworICAgICAgICAgICAgICAgICAgICAgICAgdG8gImZhbHNlIiwgdGhhdCBzcGVjaWZpZXMgdG8gcmVtb3ZlIHRoZSBwYWNrYWdlIGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ImV4dHJhY3QiIC0gQW4gb3B0aW9uYWwgYm9vbGVhbiwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvICJmYWxzZSIsIHRoYXQgc3BlY2lmaWVzIGlmIHRoZSBwYWNrYWdlIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICJ0cnVlIiwgdGhlIHBhY2thZ2UgaXMgbm90IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbnRvIHRoZSBEVVQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgSlNPTiBmaWxlIHRoYXQgaGFuZGxlcyB0ZXN0ICJmb28iCisgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBwYWNrYWdlICJiYXIiIGFuZCB0ZXN0ICJmb29iYXIiIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICBwYWNrYWdlcyAiZm9vIiBhbmQgImJhciIuCisgICAgICAgICAgICAgICAgT25jZSB0aGUgdGVzdCBpcyBjb21wbGV0ZSwgdGhlIHBhY2thZ2VzIGFyZSByZW1vdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgRFVULgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgeworICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAicGtnIjogImJhciIKKyAgICAgICAgIH0sCisgICAgICAgICAiZm9vYmFyIjogWworICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgInBrZyI6ICJmb28iLAorICAgICAgICAgICAgICAgICAicm0iOiB0cnVlCisgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICJwa2ciOiAiYmFyIiwKKyAgICAgICAgICAgICAgICAgInJtIjogdHJ1ZQorICAgICAgICAgICAgIH0KKyAgICAgICAgIF0KKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAogICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1ZyI+CkBAIC05MjQ0LDE1ICs5ODM2LDYgQEAKICAgICAgICAgICAgIGFzIGFsbCB0aGUgaGVhdnkgZGVidWdnaW5nIGlzIGRvbmUgYnkgdGhlIGhvc3QgR0RCLgogICAgICAgICAgICAgT2ZmbG9hZGluZyB0aGVzZSBwcm9jZXNzZXMgZ2l2ZXMgdGhlIEdkYnNlcnZlciBydW5uaW5nIG9uIHRoZSB0YXJnZXQgYSBjaGFuY2UgdG8gcmVtYWluCiAgICAgICAgICAgICBzbWFsbCBhbmQgZmFzdC4KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHNvdXJjZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcyBpbiBvcmRlciB0byBlbmFibGUgR0RCCi0gICAgICAgICAgICAgICAgdG8gc2hvdyBzb3VyY2UgbGluZXMgaW4gaXRzIG91dHB1dC4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHNhdmUgZnVydGhlciBzcGFjZSBvbiB0aGUgdGFyZ2V0IGJ5IHNldHRpbmcgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnPjxmaWxlbmFtZT5QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICJkZWJ1Zy13aXRob3V0LXNyYyIgc28gdGhhdCB0aGVzZSBwYWNrYWdlcyBkbyBub3QKLSAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBzb3VyY2UgZmlsZXMuCi0gICAgICAgICAgICA8L25vdGU+CiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KQEAgLTkyNzYsMTAgKzk4NTksMjAwIEBACiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc3RlcHMgeW91IG5lZWQgdG8gdGFrZQotICAgICAgICAgICAgdG8gZGVidWcgdXNpbmcgdGhlIEdOVSBwcm9qZWN0IGRlYnVnZ2VyLgotICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIHNob3cgeW91IGhvdyB0byBkZWJ1ZyB1c2luZyB0aGUgR05VIHByb2plY3QKKyAgICAgICAgICAgIGRlYnVnZ2VyLgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNvbmZpZ3VyZSB5b3VyIGJ1aWxkIHN5c3RlbSB0byBjb25zdHJ1Y3QgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbXBhbmlvbiBkZWJ1ZyBmaWxlc3lzdGVtOjwvZW1waGFzaXM+PC9wYXJhPgogCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCBzZXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9HRU5fREVCVUdGUyA9ICIxIgorICAgICBJTUFHRV9GU1RZUEVTX0RFQlVHRlMgPSAidGFyLmJ6MiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBvcHRpb25zIGNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGEgc3BlY2lhbCBjb21wYW5pb24gZmlsZXN5c3RlbSBmcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggY29udGFpbnMgdGhlIG1hdGNoaW5nIHNvdXJjZSBhbmQgZGVidWcgc3ltYm9scyB0bworICAgICAgICAgICAgICAgICAgICB5b3VyIGRlcGxveWFibGUgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkb2VzIHRoaXMgYnkgbG9va2luZyBhdCB3aGF0IGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBkZXBsb3llZCBmaWxlc3lzdGVtLCBhbmQgcHVsbGluZyB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2VzLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgY29tcGFuaW9uIGRlYnVnIGZpbGVzeXN0ZW0gaXMgbm90IGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSwgYnV0IG9ubHkgY29udGFpbnMgdGhlIGRlYnVnIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlc3lzdGVtIG11c3QgYmUgY29tYmluZWQgd2l0aCB0aGUgZnVsbCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGZvciBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgc3RlcHMgaW4gdGhpcyBwcm9jZWR1cmUgc2hvdyBob3cgdG8gY29tYmluZQorICAgICAgICAgICAgICAgICAgICB0aGUgcGFydGlhbCBmaWxlc3lzdGVtIHdpdGggdGhlIGZ1bGwgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q29uZmlndXJlIHRoZSBzeXN0ZW0gdG8gaW5jbHVkZSBHZGJzZXJ2ZXIgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBmaWxlc3lzdGVtOjwvZW1waGFzaXM+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPk1ha2UgdGhlIGZvbGxvd2luZyBhZGRpdGlvbiBpbiBlaXRoZXIgeW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgaW4gYW4gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0g4oCcIGdkYnNlcnZlciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgY2hhbmdlIG1ha2VzIHN1cmUgdGhlIDxmaWxlbmFtZT5nZGJzZXJ2ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGlzIGluY2x1ZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CdWlsZCB0aGUgZW52aXJvbm1lbnQ6PC9lbXBoYXNpcz48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBjb25zdHJ1Y3QgdGhlIGltYWdlIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgY29tcGFuaW9uIERlYnVnIEZpbGVzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIGNyb3NzIEdEQiBjb21wb25lbnQgYW5kIG1ha2UgaXQgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGZvciBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBTREsgdGhhdCBtYXRjaGVzIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgQnVpbGRpbmcgdGhlIFNESyBpcyBiZXN0IGZvciBhIHByb2R1Y3Rpb24gYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBsYXRlciBmb3IgZGVidWdnaW5nLCBlc3BlY2lhbGx5CisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBsb25nIHRlcm0gbWFpbnRlbmFuY2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIHBvcHVsYXRlX3NkayA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFsdGVybmF0aXZlbHksIHlvdSBjYW4gYnVpbGQgdGhlIG1pbmltYWwKKyAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGNvbXBvbmVudHMgdGhhdCBtYXRjaCB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBjcmVhdGVzIGEgc21hbGxlciB0aGFuIHR5cGljYWwgU0RLIGFuZCBvbmx5CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEgbWluaW1hbCBzZXQgb2YgY29tcG9uZW50cyB3aXRoIHdoaWNoIHRvCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHNpbXBsZSB0ZXN0IGFwcGxpY2F0aW9ucywgYXMgd2VsbCBhcyBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkEgZmluYWwgbWV0aG9kIGlzIHRvIGJ1aWxkIEdkYiBpdHNlbGYgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGdkYi1jcm9zcy08cmVwbGFjZWFibGU+YXJjaGl0ZWN0dXJlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBwcm9kdWNlcyBhIHRlbXBvcmFyeSBjb3B5IG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcm9zcy1nZGI8L2ZpbGVuYW1lPiB5b3UgY2FuIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhpcyBpcyB0aGUgcXVpY2tlc3QgYXBwcm9hY2gsIHRoZSB0d28gcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyBpbiB0aGlzIHN0ZXAgYXJlIGJldHRlciB3aGVuIGNvbnNpZGVyaW5nCisgICAgICAgICAgICAgICAgICAgIGxvbmctdGVybSBtYWludGVuYW5jZSBzdHJhdGVnaWVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIGdkYi1jcm9zczwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VnZ2VzdHMgdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgKGUuZy4gPGZpbGVuYW1lPmdkYi1jcm9zcy1pNTg2PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHN1Z2dlc3Rpb24gaXMgdXN1YWxseSB0aGUgYWN0dWFsIG5hbWUgeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZXQgdXAgdGhlPC9lbXBoYXNpcz4mbmJzcDs8ZmlsZW5hbWU+ZGVidWdmczwvZmlsZW5hbWU+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlYnVnZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1rZGlyIGRlYnVnZnMKKyAgICAgJCBjZCBkZWJ1Z2ZzCisgICAgICQgdGFyIHh2ZmogPHJlcGxhY2VhYmxlPmJ1aWxkLWRpcjwvcmVwbGFjZWFibGU+L3RtcC1nbGliYy9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4ucm9vdGZzLnRhci5iejIKKyAgICAgJCB0YXIgeHZmaiA8cmVwbGFjZWFibGU+YnVpbGQtZGlyPC9yZXBsYWNlYWJsZT4vdG1wLWdsaWJjL2RlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPi1kYmcucm9vdGZzLnRhci5iejIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZXQgdXAgR0RCPC9lbXBoYXNpcz48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW5zdGFsbCB0aGUgU0RLIChpZiB5b3UgYnVpbHQgb25lKSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgU291cmNpbmcgdGhlIGVudmlyb25tZW50IGZpbGUgcHV0cyB0aGUgU0RLIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSB1c2luZyB0aGUgYnVpbGQgc3lzdGVtLCBHZGIgaXMKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnVpbGQtZGlyPC9yZXBsYWNlYWJsZT4vdG1wL3N5c3Jvb3RzLzxyZXBsYWNlYWJsZT5ob3N0PC9yZXBsYWNlYWJsZT4vdXNyL2Jpbi88cmVwbGFjZWFibGU+YXJjaGl0ZWN0dXJlPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmFyY2hpdGVjdHVyZTwvcmVwbGFjZWFibGU+LWdkYgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Cb290IHRoZSB0YXJnZXQ6PC9lbXBoYXNpcz48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBydW4gUUVNVSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd2lraS5xZW11Lm9yZy9Eb2N1bWVudGF0aW9uL0dldHRpbmdTdGFydGVkRGV2ZWxvcGVycyc+UUVNVSBEb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB2ZXJpZnkgdGhhdCB5b3VyIGhvc3QgY2FuIGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB2aWEgVENQLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRlYnVnIGEgcHJvZ3JhbTo8L2VtcGhhc2lzPjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5EZWJ1Z2dpbmcgYSBwcm9ncmFtIGludm9sdmVzIHJ1bm5pbmcgR2Ric2VydmVyCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQgYW5kIHRoZW4gcnVubmluZyBHZGIgb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGluIHRoaXMgc3RlcCBkZWJ1Z3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd6aXA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHFlbXV4ODY6fiMgZ2Ric2VydmVyIGxvY2FsaG9zdDoxMjM0IC9iaW4vZ3ppcCDigJRoZWxwCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgR2Ric2VydmVyIG9wdGlvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGIvZG9jdW1lbnRhdGlvbi8nPkdkYiBTZXJ2ZXIgRG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWZ0ZXIgcnVubmluZyBHZGJzZXJ2ZXIgb24gdGhlIHRhcmdldCwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gcnVuIEdkYiBvbiB0aGUgaG9zdCBhbmQgY29uZmlndXJlIGl0IGFuZCBjb25uZWN0IHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGVzZSBjb21tYW5kczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIDxyZXBsYWNlYWJsZT5kaXJlY3RvcnktaG9sZGluZy10aGUtZGVidWdmcy1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgorICAgICAkIDxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tZ2RiCisKKyAgICAgKGdkYikgc2V0IHN5c3Jvb3QgZGVidWdmcworICAgICAoZ2RiKSBzZXQgc3Vic3RpdHV0ZS1wYXRoIC91c3Ivc3JjL2RlYnVnIGRlYnVnZnMvdXNyL3NyYy9kZWJ1ZworICAgICAoZ2RiKSB0YXJnZXQgcmVtb3RlIDxyZXBsYWNlYWJsZT5JUC1vZi10YXJnZXQ8L3JlcGxhY2VhYmxlPjoxMjM0CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgYXV0b21hdGljYWxseSBsb2FkCisgICAgICAgICAgICAgICAgICAgIChpLmUuIG1hdGNoaW5nIGJpbmFyaWVzLCBzeW1ib2xzIGFuZCBoZWFkZXJzKS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgR2RiIDxmaWxlbmFtZT5zZXQ8L2ZpbGVuYW1lPiBjb21tYW5kcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGV4YW1wbGUgY2FuIGJlIHBsYWNlZCBpbnRvIHRoZSB1c2VycworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vLmdkYmluaXQ8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVXBvbiBzdGFydGluZywgR2RiIGF1dG9tYXRpY2FsbHkgcnVucyB3aGF0ZXZlcgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMgYXJlIGluIHRoYXQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5EZXBsb3lpbmcgd2l0aG91dCBhIGZ1bGwgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgcmVidWlsZDo8L2VtcGhhc2lzPjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiBtYW55IGNhc2VzLCBkdXJpbmcgZGV2ZWxvcG1lbnQgeW91IHdhbnQgYQorICAgICAgICAgICAgICAgICAgICBxdWljayBtZXRob2QgdG8gZGVwbG95IGEgbmV3IGJpbmFyeSB0byB0aGUgdGFyZ2V0IGFuZAorICAgICAgICAgICAgICAgICAgICBkZWJ1ZyBpdCwgd2l0aG91dCB3YWl0aW5nIGZvciBhIGZ1bGwgaW1hZ2UgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5PbmUgYXBwcm9hY2ggdG8gc29sdmluZyB0aGlzIHNpdHVhdGlvbiBpcyB0bworICAgICAgICAgICAgICAgICAgICBqdXN0IGJ1aWxkIHRoZSBjb21wb25lbnQgeW91IHdhbnQgdG8gZGVidWcuCisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYnVpbHQgdGhlIGNvbXBvbmVudCwgY29weSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSBkaXJlY3RseSB0byBib3RoIHRoZSB0YXJnZXQgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBob3N0IDxmaWxlbmFtZT5kZWJ1Z2ZzPC9maWxlbmFtZT4uPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHRoZSBiaW5hcnkgaXMgcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGRlYnVnCisgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZyBpbiBPcGVuRW1iZWRkZWQsIHlvdSBzaG91bGQgYWxzbworICAgICAgICAgICAgICAgICAgICBjb3B5IHRoZSBkZWJ1ZyBpdGVtcyAoaS5lLiA8ZmlsZW5hbWU+LmRlYnVnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYW5kIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc3JjL2RlYnVnPC9maWxlbmFtZT4gZmlsZXMpCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGJhc2gKKyAgICAgJCBiaXRiYWtlIC1jIGRldnNoZWxsIGJhc2gKKyAgICAgJCBjZCAuLgorICAgICAkIHNjcCBwYWNrYWdlcy1zcGxpdC9iYXNoL2Jpbi9iYXNoIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPjovYmluL2Jhc2gKKyAgICAgJCBjcCAtYSBwYWNrYWdlcy1zcGxpdC9iYXNoLWRiZy8qIDxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4vZGVidWdmcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPCEtLQogICAgICAgICA8c2VjdGlvbiBpZD0ncGxhdGRldi1nZGItcmVtb3RlZGVidWctc2V0dXAnPgogICAgICAgICAgICAgPHRpdGxlPlNldCBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRGVidWdnaW5nIEVudmlyb25tZW50PC90aXRsZT4KIApAQCAtOTQ1Myw2ICsxMDIyNiw2OSBAQAogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAgICAgPC9zZWN0aW9uPgorLS0+CisKKyAgICA8c2VjdGlvbiBpZD0nZGVidWdnaW5nLXdpdGgtdGhlLWdudS1wcm9qZWN0LWRlYnVnZ2VyLWdkYi1vbi10aGUtdGFyZ2V0Jz4KKyAgICAgICAgPHRpdGxlPkRlYnVnZ2luZyB3aXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBvbiB0aGUgVGFyZ2V0PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzZWN0aW9uIGFkZHJlc3NlZCB1c2luZyBHREIgcmVtb3RlbHkgZm9yIGRlYnVnZ2luZworICAgICAgICAgICAgcHVycG9zZXMsIHdoaWNoIGlzIHRoZSBtb3N0IHVzdWFsIGNhc2UgZHVlIHRvIHRoZSBpbmhlcmVudAorICAgICAgICAgICAgaGFyZHdhcmUgbGltaXRhdGlvbnMgb24gbWFueSBlbWJlZGRlZCBkZXZpY2VzLgorICAgICAgICAgICAgSG93ZXZlciwgZGVidWdnaW5nIGluIHRoZSB0YXJnZXQgaGFyZHdhcmUgaXRzZWxmIGlzIGFsc28gcG9zc2libGUKKyAgICAgICAgICAgIHdpdGggbW9yZSBwb3dlcmZ1bCBkZXZpY2VzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB3aGF0IHlvdSBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIHN1cHBvcnQKKyAgICAgICAgICAgIHVzaW5nIEdEQiB0byBkZWJ1ZyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzdXBwb3J0IHRoaXMga2luZCBvZiBkZWJ1Z2dpbmcsIHlvdSBuZWVkIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRW5zdXJlIHRoYXQgR0RCIGlzIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSBhZGRpbmcgImdkYiIgdG8KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgZ2RiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWRkICJ0b29scy1kZWJ1ZyIgdG8KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0ZFQVRVUkVTX2FwcGVuZCA9ICIgdG9vbHMtZGVidWciCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBFbnN1cmUgdGhhdCBkZWJ1ZyBzeW1ib2xzIGFyZSBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG1ha2Ugc3VyZSB0aGVzZSBzeW1ib2xzIGFyZSBwcmVzZW50IGJ5IGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT4tZGJnIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZyB0byBpbmNsdWRlIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVidWcgc3ltYm9sczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9GRUFUVVJFU19hcHBlbmQgPSAiIGRiZy1wa2dzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUbyBpbXByb3ZlIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBhY2N1cmFjeSwgeW91IGNhbiByZWR1Y2UgdGhlCisgICAgICAgICAgICAgICAgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB3aGVuIGFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgeW91IHdpbGwgcmVkdWNlCisgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uIGZyb20KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRlVMTF9PUFRJTUlaQVRJT04nPjxmaWxlbmFtZT5GVUxMX09QVElNSVpBVElPTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvZiAiLU8yIiB0bworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERUJVR19PUFRJTUlaQVRJT04nPjxmaWxlbmFtZT5ERUJVR19PUFRJTUlaQVRJT048L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb2YgIi1PIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFQlVHX0JVSUxEID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoYXQgdGhpcyB3aWxsIHJlZHVjZSB0aGUgYXBwbGljYXRpb24ncyBwZXJmb3JtYW5jZQorICAgICAgICAgICAgICAgIGFuZCBpcyByZWNvbW1lbmRlZCBvbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CiAKICAgICA8c2VjdGlvbiBpZD0nZGVidWdnaW5nLXBhcmFsbGVsLW1ha2UtcmFjZXMnPgogICAgICAgICA8dGl0bGU+RGVidWdnaW5nIFBhcmFsbGVsIE1ha2UgUmFjZXM8L3RpdGxlPgpAQCAtOTczNiwyNjUgKzEwNTcyLDYgQEAKICAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAotPCEtLQotICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW9wcm9maWxlIj4KLSAgICAgICAgPHRpdGxlPlByb2ZpbGluZyB3aXRoIE9Qcm9maWxlPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvIj5PUHJvZmlsZTwvdWxpbms+IGlzIGEKLSAgICAgICAgICAgIHN0YXRpc3RpY2FsIHByb2ZpbGVyIHdlbGwgc3VpdGVkIGZvciBmaW5kaW5nIHBlcmZvcm1hbmNlCi0gICAgICAgICAgICBib3R0bGVuZWNrcyBpbiBib3RoIHVzZXItc3BhY2Ugc29mdHdhcmUgYW5kIGluIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBUaGlzIHByb2ZpbGVyIHByb3ZpZGVzIGFuc3dlcnMgdG8gcXVlc3Rpb25zIGxpa2UgIldoaWNoIGZ1bmN0aW9ucyBkb2VzIG15IGFwcGxpY2F0aW9uIHNwZW5kCi0gICAgICAgICAgICB0aGUgbW9zdCB0aW1lIGluIHdoZW4gZG9pbmcgWD8iCi0gICAgICAgICAgICBCZWNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlzIHdlbGwgaW50ZWdyYXRlZCB3aXRoIE9Qcm9maWxlLCBpdCBtYWtlcyBwcm9maWxpbmcKLSAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBvbiB0YXJnZXQgaGFyZHdhcmUgc3RyYWlnaHQgZm9yd2FyZC4KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgYW5kIHJ1biBPUHJvZmlsZSwgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtb3Byb2ZpbGUnPm9wcm9maWxlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsLgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUbyB1c2UgT1Byb2ZpbGUsIHlvdSBuZWVkIGFuIGltYWdlIHRoYXQgaGFzIE9Qcm9maWxlIGluc3RhbGxlZC4KLSAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIHdpdGggInRvb2xzLXByb2ZpbGUiIGluIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+SU1BR0VfRkVBVFVSRVM8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgotICAgICAgICAgICAgWW91IGFsc28gbmVlZCBkZWJ1Z2dpbmcgc3ltYm9scyB0byBiZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSB3aGVyZSB0aGUgYW5hbHlzaXMKLSAgICAgICAgICAgIHRha2VzIHBsYWNlLgotICAgICAgICAgICAgWW91IGNhbiBnYWluIGFjY2VzcyB0byB0aGUgc3ltYm9scyBieSB1c2luZyAiZGJnLXBrZ3MiIGluIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUgb3IgYnkKLSAgICAgICAgICAgIGluc3RhbGxpbmcgdGhlIGFwcHJvcHJpYXRlIGRlYnVnICg8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+KQotICAgICAgICAgICAgcGFja2FnZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvciBzdWNjZXNzZnVsIGNhbGwgZ3JhcGggYW5hbHlzaXMsIHRoZSBiaW5hcmllcyBtdXN0IHByZXNlcnZlIHRoZSBmcmFtZQotICAgICAgICAgICAgcG9pbnRlciByZWdpc3RlciBhbmQgc2hvdWxkIGFsc28gYmUgY29tcGlsZWQgd2l0aCB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT4tZm5vLW9taXQtZnJhbWVwb2ludGVyPC9maWxlbmFtZT4gZmxhZy4KLSAgICAgICAgICAgIFlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IHNldHRpbmcgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNFTEVDVEVEX09QVElNSVpBVElPTic+U0VMRUNURURfT1BUSU1JWkFUSU9OPC91bGluaz48L2ZpbGVuYW1lPgotICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMKLSAgICAgLWZuby1vbWl0LWZyYW1lcG9pbnRlcgotICAgICAtZnJlbmFtZS1yZWdpc3RlcnMKLSAgICAgLU8yCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBZb3UgY2FuIGFsc28gYWNoaWV2ZSBpdCBieSBzZXR0aW5nIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERUJVR19CVUlMRCc+REVCVUdfQlVJTEQ8L3VsaW5rPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgotICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgPGZpbGVuYW1lPkRFQlVHX0JVSUxEPC9maWxlbmFtZT4gdmFyaWFibGUsCi0gICAgICAgICAgICB5b3UgYWxzbyBhZGQgZXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRoYXQgY2FuIG1ha2UgdGhlIGRlYnVnCi0gICAgICAgICAgICBwYWNrYWdlcyBsYXJnZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW9wcm9maWxlLXRhcmdldCI+Ci0gICAgICAgICAgICA8dGl0bGU+UHJvZmlsaW5nIG9uIHRoZSBUYXJnZXQ8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVc2luZyBPUHJvZmlsZSwgeW91IGNhbiBwZXJmb3JtIGFsbCB0aGUgcHJvZmlsaW5nIHdvcmsgb24gdGhlIHRhcmdldCBkZXZpY2UuCi0gICAgICAgICAgICAgICAgQSBzaW1wbGUgT1Byb2ZpbGUgc2Vzc2lvbiBtaWdodCBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAjIG9wY29udHJvbCAmZGFzaDsmZGFzaDtyZXNldAotICAgICAjIG9wY29udHJvbCAmZGFzaDsmZGFzaDtzdGFydCAmZGFzaDsmZGFzaDtzZXBhcmF0ZT1saWIgJmRhc2g7JmRhc2g7bm8tdm1saW51eCAtYyA1Ci0gICAgICAgICAgICAgIC4KLSAgICAgICAgICAgICAgLgotICAgICAgICBbZG8gd2hhdGV2ZXIgaXMgYmVpbmcgcHJvZmlsZWRdCi0gICAgICAgICAgICAgIC4KLSAgICAgICAgICAgICAgLgotICAgICAjIG9wY29udHJvbCAmZGFzaDsmZGFzaDtzdG9wCi0gICAgICQgb3ByZXBvcnQgLWNsCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cmVzZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNsZWFycyBhbnkgcHJldmlvdXNseSBwcm9maWxlZCBkYXRhLgotICAgICAgICAgICAgICAgIFRoZSBuZXh0IGNvbW1hbmQgc3RhcnRzIE9Qcm9maWxlLgotICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHVzZWQgd2hlbiBzdGFydGluZyB0aGUgcHJvZmlsZXIgc2VwYXJhdGUgZHluYW1pYyBsaWJyYXJ5IGRhdGEKLSAgICAgICAgICAgICAgICB3aXRoaW4gYXBwbGljYXRpb25zLCBkaXNhYmxlIGtlcm5lbCBwcm9maWxpbmcsIGFuZCBlbmFibGUgY2FsbGdyYXBoaW5nIHVwIHRvCi0gICAgICAgICAgICAgICAgZml2ZSBsZXZlbHMgZGVlcC4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgVG8gcHJvZmlsZSB0aGUga2VybmVsLCB5b3Ugd291bGQgc3BlY2lmeSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZkYXNoOyZkYXNoO3ZtbGludXg9L3BhdGgvdG8vdm1saW51eDwvZmlsZW5hbWU+IG9wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSBpcyB1c3VhbGx5IGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Jvb3QvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZCBtdXN0IG1hdGNoIHRoZSBydW5uaW5nIGtlcm5lbC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBwZXJmb3JtIHlvdXIgcHJvZmlsaW5nIHRhc2tzLCB0aGUgbmV4dCBjb21tYW5kIHN0b3BzIHRoZSBwcm9maWxlci4KLSAgICAgICAgICAgICAgICBBZnRlciB0aGF0LCB5b3UgY2FuIHZpZXcgcmVzdWx0cyB3aXRoIHRoZSA8ZmlsZW5hbWU+b3ByZXBvcnQ8L2ZpbGVuYW1lPiBjb21tYW5kIHdpdGggb3B0aW9ucwotICAgICAgICAgICAgICAgIHRvIHNlZSB0aGUgc2VwYXJhdGUgbGlicmFyeSBzeW1ib2xzIGFuZCBjYWxsZ3JhcGggaW5mb3JtYXRpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIENhbGxncmFwaGluZyBsb2dzIGluZm9ybWF0aW9uIGFib3V0IHRpbWUgc3BlbnQgaW4gZnVuY3Rpb25zIGFuZCBhYm91dCBhIGZ1bmN0aW9uJ3MKLSAgICAgICAgICAgICAgICBjYWxsaW5nIGZ1bmN0aW9uIChwYXJlbnQpIGFuZCBjYWxsZWQgZnVuY3Rpb25zIChjaGlsZHJlbikuCi0gICAgICAgICAgICAgICAgVGhlIGhpZ2hlciB0aGUgY2FsbGdyYXBoaW5nIGRlcHRoLCB0aGUgbW9yZSBhY2N1cmF0ZSB0aGUgcmVzdWx0cy4KLSAgICAgICAgICAgICAgICBIb3dldmVyLCBoaWdoZXIgZGVwdGhzIGFsc28gaW5jcmVhc2UgdGhlIGxvZ2dpbmcgb3ZlcmhlYWQuCi0gICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkIHRha2UgY2FyZSB3aGVuIHNldHRpbmcgdGhlIGNhbGxncmFwaGluZyBkZXB0aC4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgT24gQVJNLCBiaW5hcmllcyBuZWVkIHRvIGhhdmUgdGhlIGZyYW1lIHBvaW50ZXIgZW5hYmxlZCBmb3IgY2FsbGdyYXBoaW5nIHRvIHdvcmsuCi0gICAgICAgICAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyB1c2UgdGhlIDxmaWxlbmFtZT4tZm5vLW9taXQtZnJhbWVwb2ludGVyPC9maWxlbmFtZT4gb3B0aW9uCi0gICAgICAgICAgICAgICAgICAgIHdpdGggPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgT1Byb2ZpbGUsIHNlZSB0aGUgT1Byb2ZpbGUKLSAgICAgICAgICAgICAgICBvbmxpbmUgZG9jdW1lbnRhdGlvbiBhdAotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy8iLz4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS1vcHJvZmlsZXVpIj4KLSAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBPUHJvZmlsZVVJPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIE9Qcm9maWxlIGlzIGFsc28gYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgYW5kIGJ1aWxkIHRoaXMgaW50ZXJmYWNlIGZyb20gdGhlIFlvY3RvIFByb2plY3QgYXQKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvb3Byb2ZpbGV1aS8iPjwvdWxpbms+LgotICAgICAgICAgICAgICAgIElmIHRoZSAidG9vbHMtcHJvZmlsZSIgaW1hZ2UgZmVhdHVyZSBpcyBzZWxlY3RlZCwgYWxsIG5lY2Vzc2FyeSBiaW5hcmllcwotICAgICAgICAgICAgICAgIGFyZSBpbnN0YWxsZWQgb250byB0aGUgdGFyZ2V0IGRldmljZSBmb3IgT1Byb2ZpbGVVSSBpbnRlcmFjdGlvbi4KLSAgICAgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGltYWdlIGZlYXR1cmVzIHRoYXQgc2hpcCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LAotICAgICAgICAgICAgICAgIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWZlYXR1cmVzLWltYWdlJz5JbWFnZSBGZWF0dXJlczwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBkaXJlY3RvcnkgdXN1YWxseSBpbmNsdWRlcyBhbGwgbmVlZGVkIHBhdGNoZXMgb24gdGhlIHRhcmdldCBkZXZpY2UsIHlvdQotICAgICAgICAgICAgICAgIG1pZ2h0IGZpbmQgeW91IG5lZWQgb3RoZXIgT1Byb2ZpbGUgcGF0Y2hlcyBmb3IgcmVjZW50IE9Qcm9maWxlVUkgZmVhdHVyZXMuCi0gICAgICAgICAgICAgICAgSWYgc28sIHNlZSB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL29wcm9maWxldWkvdHJlZS9SRUFETUUnPgotICAgICAgICAgICAgICAgIE9Qcm9maWxlVUkgUkVBRE1FPC91bGluaz4gZm9yIHRoZSBtb3N0IHJlY2VudCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUtb3Byb2ZpbGV1aS1vbmxpbmUiPgotICAgICAgICAgICAgICAgIDx0aXRsZT5PbmxpbmUgTW9kZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVXNpbmcgT1Byb2ZpbGUgaW4gb25saW5lIG1vZGUgYXNzdW1lcyBhIHdvcmtpbmcgbmV0d29yayBjb25uZWN0aW9uIHdpdGggdGhlIHRhcmdldAotICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGlzIGNvbm5lY3Rpb24sIHlvdSBqdXN0IG5lZWQgdG8gcnVuICJvcHJvZmlsZS1zZXJ2ZXIiIG9uIHRoZSBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIE9Qcm9maWxlIGxpc3RlbnMgb24gcG9ydCA0MjI0LgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hhbmdlIHRoZSBwb3J0IHVzaW5nIHRoZSA8ZmlsZW5hbWU+JmRhc2g7JmRhc2g7cG9ydDwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgcHJvZ3JhbSBpcyBjYWxsZWQgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IGFuZCBpdHMgVUkgaXMgcmVsYXRpdmVseQotICAgICAgICAgICAgICAgICAgICBzdHJhaWdodCBmb3J3YXJkLgotICAgICAgICAgICAgICAgICAgICBZb3UgYWNjZXNzIGtleSBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGhlIGJ1dHRvbnMgb24gdGhlIHRvb2xiYXIsIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgIGFyZSBkdXBsaWNhdGVkIGluIHRoZSBtZW51cy4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGJ1dHRvbnM6Ci0gICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbm5lY3Q6PC9lbXBoYXNpcz4gQ29ubmVjdHMgdG8gdGhlIHJlbW90ZSBob3N0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzdXBwbHkgdGhlIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRpc2Nvbm5lY3Q6PC9lbXBoYXNpcz4gRGlzY29ubmVjdHMgZnJvbSB0aGUgdGFyZ2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydDo8L2VtcGhhc2lzPiBTdGFydHMgcHJvZmlsaW5nIG9uIHRoZSBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0b3A6PC9lbXBoYXNpcz4gU3RvcHMgcHJvZmlsaW5nIG9uIHRoZSBkZXZpY2UgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRzIHRoZSBkYXRhIHRvIHRoZSBsb2NhbCBob3N0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3BwaW5nIHRoZSBwcm9maWxlciBnZW5lcmF0ZXMgdGhlIHByb2ZpbGUgYW5kIGRpc3BsYXlzIGl0IGluIHRoZSB2aWV3ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvd25sb2FkOjwvZW1waGFzaXM+IERvd25sb2FkcyB0aGUgZGF0YSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBhbmQgZ2VuZXJhdGVzIHRoZSBwcm9maWxlLCB3aGljaCBhcHBlYXJzIGluIHRoZSB2aWV3ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlc2V0OjwvZW1waGFzaXM+IFJlc2V0cyB0aGUgc2FtcGxlIGRhdGEgb24gdGhlIGRldmljZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldHRpbmcgdGhlIGRhdGEgcmVtb3ZlcyBzYW1wbGUgaW5mb3JtYXRpb24gY29sbGVjdGVkIGZyb20gcHJldmlvdXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZyBydW5zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IHJlc2V0IHRoZSBkYXRhIGlmIHlvdSBkbyBub3Qgd2FudCB0byBpbmNsdWRlIG9sZCBzYW1wbGUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNhdmU6PC9lbXBoYXNpcz4gU2F2ZXMgdGhlIGRhdGEgZG93bmxvYWRlZCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0byBhbm90aGVyIGRpcmVjdG9yeSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW46PC9lbXBoYXNpcz4gTG9hZHMgcHJldmlvdXNseSBzYXZlZCBkYXRhLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNsaWVudCBkb3dubG9hZHMgdGhlIGNvbXBsZXRlIHByb2ZpbGUgYXJjaGl2ZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgdG8gdGhlIGhvc3QgZm9yIHByb2Nlc3NpbmcuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1wbGUgZGF0YSwgdGhlIG9iamVjdCBmaWxlcywKLSAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG9iamVjdCBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGFyY2hpdmUgaXMgdGhlbiBjb252ZXJ0ZWQgdXNpbmcgdGhlIDxmaWxlbmFtZT5vcGFyY2hjb252PC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaCBpcwotICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCB1c2VzIDxmaWxlbmFtZT5vcGltcG9ydDwvZmlsZW5hbWU+IHRvIGNvbnZlcnQgdGhlIGFyY2hpdmUgZnJvbQotICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgb24gdGhlIGhvc3QuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIERvd25sb2FkZWQgYXJjaGl2ZXMgcmVzaWRlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gaW4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGFuZCBhcmUgY2xlYXJlZCB1cCB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciBpbiB1c2UuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIHBlcmZvcm0ga2VybmVsIHByb2ZpbGluZywgeW91IG5lZWQgdG8gYmUgc3VyZQotICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSB0aGF0IG1hdGNoZXMgdGhlIHJ1bm5pbmcga2VybmVsIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHNvdXJjZSBkaXJlY3RvcnksIHRoYXQgZmlsZSBpcyB1c3VhbGx5IGxvY2F0ZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ib290L3ZtbGludXgtPHJlcGxhY2VhYmxlPmtlcm5lbHZlcnNpb248L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LCB3aGVyZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmtlcm5lbHZlcnNpb248L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyBzZXBhcmF0ZSA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZvciBlYWNoIGtlcm5lbCBpdCBidWlsZHMuCi0gICAgICAgICAgICAgICAgICAgIFRodXMsIGl0IHNob3VsZCBqdXN0IGJlIGEgcXVlc3Rpb24gb2YgbWFraW5nIHN1cmUgYSBtYXRjaGluZyBwYWNrYWdlIGlzCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCAoZS5nLiA8ZmlsZW5hbWU+b3BrZyBpbnN0YWxsIGtlcm5lbC12bWxpbnV4PC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGludG8gZGV2ZWxvcG1lbnQgYW5kIHByb2ZpbGluZyBpbWFnZXMKLSAgICAgICAgICAgICAgICAgICAgYWxvbmdzaWRlIE9Qcm9maWxlLgotICAgICAgICAgICAgICAgICAgICBBIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGV4aXN0cyB3aXRoaW4gdGhlIE9Qcm9maWxlVUkgc2V0dGluZ3MgcGFnZSB0aGF0IHlvdSBjYW4gdXNlIHRvCi0gICAgICAgICAgICAgICAgICAgIGVudGVyIHRoZSBsb2NhdGlvbiBvZiB0aGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBXYWl0aW5nIGZvciBkZWJ1ZyBzeW1ib2xzIHRvIHRyYW5zZmVyIGZyb20gdGhlIGRldmljZSBjYW4gYmUgc2xvdywgYW5kIGl0Ci0gICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhbHdheXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IGhhdmUgdGhlbSBvbiB0aGUgZGV2aWNlIGZvciBPUHJvZmlsZSB1c2UuCi0gICAgICAgICAgICAgICAgICAgIEFsbCB0aGF0IGlzIG5lZWRlZCBpcyBhIGNvcHkgb2YgdGhlIGZpbGVzeXN0ZW0gd2l0aCB0aGUgZGVidWcgc3ltYm9scyBwcmVzZW50Ci0gICAgICAgICAgICAgICAgICAgIG9uIHRoZSB2aWV3ZXIgc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICBUaGUgIjxsaW5rIGxpbmtlbmQ9J3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGInPkxhdW5jaCBHREIgb24gdGhlIEhvc3QgQ29tcHV0ZXI8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGNvdmVycyBob3cgdG8gY3JlYXRlIHN1Y2ggYSBkaXJlY3Rvcnkgd2l0aGluCi0gICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZCBob3cgdG8gdXNlIHRoZSBPUHJvZmlsZVVJIFNldHRpbmdzCi0gICAgICAgICAgICAgICAgICAgIERpYWxvZyB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgdGhlIGRpcmVjdG9yeSwgaXQgd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGZpbGUgY2hlY2tzdW1zCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoIHRob3NlIG9uIHRoZSBzeXN0ZW0geW91IGFyZSBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS1vcHJvZmlsZXVpLW9mZmxpbmUiPgotICAgICAgICAgICAgICAgIDx0aXRsZT5PZmZsaW5lIE1vZGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIG5ldHdvcmsgYWNjZXNzIHRvIHRoZSB0YXJnZXQgaXMgdW5hdmFpbGFibGUsIHlvdSBjYW4gZ2VuZXJhdGUKLSAgICAgICAgICAgICAgICAgICAgYW4gYXJjaGl2ZSBmb3IgcHJvY2Vzc2luZyBpbiA8ZmlsZW5hbWU+b3Byb2ZpbGUtdmlld2VyPC9maWxlbmFtZT4gYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAjIG9wY29udHJvbCAmZGFzaDsmZGFzaDtyZXNldAotICAgICAjIG9wY29udHJvbCAmZGFzaDsmZGFzaDtzdGFydCAmZGFzaDsmZGFzaDtzZXBhcmF0ZT1saWIgJmRhc2g7JmRhc2g7bm8tdm1saW51eCAtYyA1Ci0gICAgICAgICAgICAuCi0gICAgICAgICAgICAuCi0gICAgIFtkbyB3aGF0ZXZlciBpcyBiZWluZyBwcm9maWxlZF0KLSAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4KLSAgICAgIyBvcGNvbnRyb2wgJmRhc2g7JmRhc2g7c3RvcAotICAgICAjIG9wYXJjaGl2ZSAtbyBteV9hcmNoaXZlCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIDxmaWxlbmFtZT5teV9hcmNoaXZlPC9maWxlbmFtZT4gaXMgdGhlIG5hbWUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIGFyY2hpdmUgZGlyZWN0b3J5IHdoZXJlIHlvdSB3b3VsZCBsaWtlIHRoZSBwcm9maWxlIGFyY2hpdmUgdG8gYmUga2VwdC4KLSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCB5b3UgY2FuIGNvcHkgaXQgdG8gYW5vdGhlciBob3N0IGFuZCBsb2FkIGl0Ci0gICAgICAgICAgICAgICAgICAgIHVzaW5nIDxmaWxlbmFtZT5vcHJvZmlsZS12aWV3ZXI8L2ZpbGVuYW1lPiBvcGVuIGZ1bmN0aW9uYWxpdHkuCi0gICAgICAgICAgICAgICAgICAgIElmIG5lY2Vzc2FyeSwgdGhlIGFyY2hpdmUgaXMgY29udmVydGVkLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLS0tPgotCiAgICAgPHNlY3Rpb24gaWQ9J21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPgogICAgICAgICA8dGl0bGU+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3RpdGxlPgogCkBAIC0xMDExMywxMiArMTA2OTAsMzEgQEAKICAgICAgICAgICAgICAgICB0YXJiYWxscyBmb3IgbGljZW5zZXMgdGhhdCByZXF1aXJlIHRoZSByZWxlYXNlIG9mCiAgICAgICAgICAgICAgICAgc291cmNlLgogICAgICAgICAgICAgICAgIExldCB1cyBhc3N1bWUgeW91IGFyZSBvbmx5IGNvbmNlcm5lZCB3aXRoIEdQTCBjb2RlIGFzCi0gICAgICAgICAgICAgICAgaWRlbnRpZmllZCB3aXRoIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllZCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgc2NyaXB0OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBjZCBwb2t5L2J1aWxkL3RtcC9kZXBsb3kvc291cmNlcwotICAgICAkIG1rZGlyIH4vZ3BsX3NvdXJjZV9yZWxlYXNlCi0gICAgICQgZm9yIGRpciBpbiAqLypHUEwqOyBkbyBjcCAtciAkZGlyIH4vZ3BsX3NvdXJjZV9yZWxlYXNlOyBkb25lCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAjIFNjcmlwdCB0byBhcmNoaXZlIGEgc3Vic2V0IG9mIHBhY2thZ2VzIG1hdGNoaW5nIHNwZWNpZmljIGxpY2Vuc2UocykKKyAgICAgIyBTb3VyY2UgYW5kIGxpY2Vuc2UgZmlsZXMgYXJlIGNvcGllZCBpbnRvIHN1YiBmb2xkZXJzIG9mIHBhY2thZ2UgZm9sZGVyCisgICAgICMgTXVzdCBiZSBydW4gZnJvbSBidWlsZCBmb2xkZXIKKyAgICAgIyEvYmluL2Jhc2gKKyAgICAgc3JjX3JlbGVhc2VfZGlyPSJzb3VyY2UtcmVsZWFzZSIKKyAgICAgbWtkaXIgLXAgJHNyY19yZWxlYXNlX2RpcgorICAgICBmb3IgYSBpbiB0bXAvZGVwbG95L3NvdXJjZXMvKjsgZG8KKyAgICAgICAgZm9yIGQgaW4gJGEvKjsgZG8KKyAgICAgICAgICAgIyBHZXQgcGFja2FnZSBuYW1lIGZyb20gcGF0aAorICAgICAgICAgICBwPWBiYXNlbmFtZSAkZGAKKyAgICAgICAgICAgcD0ke3AlLSp9CisgICAgICAgICAgIHA9JHtwJS0qfQorICAgICAgICAgICAjIE9ubHkgYXJjaGl2ZSBHUEwgcGFja2FnZXMgKHVwZGF0ZSAqR1BMKiByZWdleCBmb3IgeW91ciBsaWNlbnNlIGNoZWNrKQorICAgICAgICAgICBudW1maWxlcz1gbHMgdG1wL2RlcGxveS9saWNlbnNlcy8kcC8qR1BMKiAyPiAvZGV2L251bGwgfCB3YyAtbGAKKyAgICAgICAgICAgaWYgWyAkbnVtZmlsZXMgLWd0IDEgXTsgdGhlbgorICAgICAgICAgICAgICBlY2hvIEFyY2hpdmluZyAkcAorICAgICAgICAgICAgICBta2RpciAtcCAkc3JjX3JlbGVhc2VfZGlyLyRwL3NvdXJjZQorICAgICAgICAgICAgICBjcCAkZC8qICRzcmNfcmVsZWFzZV9kaXIvJHAvc291cmNlIDI+IC9kZXYvbnVsbAorICAgICAgICAgICAgICBta2RpciAtcCAkc3JjX3JlbGVhc2VfZGlyLyRwL2xpY2Vuc2UKKyAgICAgICAgICAgICAgY3AgdG1wL2RlcGxveS9saWNlbnNlcy8kcC8qICRzcmNfcmVsZWFzZV9kaXIvJHAvbGljZW5zZSAyPiAvZGV2L251bGwKKyAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICBkb25lICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgY291bGQgY3JlYXRlIGEgdGFyYmFsbCBmcm9tIHRoZQogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncGxfc291cmNlX3JlbGVhc2U8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kCiAgICAgICAgICAgICAgICAgcHJvdmlkZSB0aGF0IHRvIHRoZSBlbmQgdXNlci4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sCmluZGV4IGZmNDRhM2YuLjEwMDhlMTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW1vZGVsLnhtbApAQCAtNjQ2LDE2ICs2NDYsMjAgQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZXNlIHdvcmtmbG93cy4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtZGV2dG9vbC1yZWZlcmVuY2UnPjxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4mbmJzcDtRdWljayBSZWZlcmVuY2U8L3VsaW5rPiIKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gcXVpY2sgcmVmZXJlbmNlLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHNlY3Rpb24gaWQ9J3VzZS1kZXZ0b29sLXRvLWludGVncmF0ZS1uZXctY29kZSc+Ci0gICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHRvIEludGVncmF0ZSBOZXcgQ29kZTwvdGl0bGU+CisgICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHRvIEFkZCBhbiBBcHBsaWNhdGlvbjwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGdlbmVyYXRlcwogICAgICAgICAgICAgICAgIGEgbmV3IHJlY2lwZSBiYXNlZCBvbiBleGlzdGluZyBzb3VyY2UgY29kZS4KICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtdGhlLXdvcmtzcGFjZS1sYXllci1zdHJ1Y3R1cmUnPndvcmtzcGFjZTwvbGluaz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXZ0b29sLXRoZS13b3Jrc3BhY2UtbGF5ZXItc3RydWN0dXJlJz53b3Jrc3BhY2U8L3VsaW5rPgogICAgICAgICAgICAgICAgIGxheWVyIHRoYXQgbWFueSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmRzCiAgICAgICAgICAgICAgICAgdXNlLgogICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGZsZXhpYmxlIGVub3VnaCB0byBhbGxvdyB5b3UgdG8gZXh0cmFjdCBzb3VyY2UKQEAgLTcyMSw3ICs3MjUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVlZHMgdG8gYmUgZXh0cmFjdGVkIHRvIHNvbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgYXJlYSAtIHRoaXMgdGltZSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYWx3YXlzLCBpZiByZXF1aXJlZCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNyZWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgcmVxdWlyZWQsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx3YXlzIGNyZWF0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBHaXQgcmVwb3NpdG9yeSBsb2NhbGx5IGR1cmluZyB0aGUgZXh0cmFjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gaW4gdGhpcyBjYXNlCkBAIC03ODgsMTAgKzc5Myw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgbmVlZCB0byB0YWtlIHRoZSBidWlsZCBvdXRwdXQgYW5kIGV2ZW50dWFsbHkKICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUgaXQgdG8gdGhlIHRhcmdldCBoYXJkd2FyZSwgeW91IHdvdWxkIHVzZQogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjb3VsZCB1c2UgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiB0byBidWlsZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgYXMgd2VsbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBkZXZ0b29sIGJ1aWxkIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KQEAgLTgzMSw0OSArODMyLDQ0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGRvZXMgbm90IHByb3ZpZGUgYQogICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gZG8gdGhpcy4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wdGlvbmFsbHkgVXBkYXRlIHRoZSBSZWNpcGUgV2l0aCBQYXRjaCBGaWxlczwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSByZWNpcGUsIGlmIHlvdSBoYXZlIG1hZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFueSBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgdHJlZSB0aGF0IHlvdSB3YW50IHRvIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQgYnkgdGhlIHJlY2lwZSwgeW91IG5lZWQgdG8gZ2VuZXJhdGUgcGF0Y2hlcwotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aG9zZSBjaGFuZ2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIHRoaXMgYmVmb3JlIG1vdmluZyB0aGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgICAgICB0byBpdHMgZmluYWwgbGF5ZXIgYW5kIGNsZWFuaW5nIHVwIHRoZSB3b3Jrc3BhY2UgYXJlYQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB1c2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb25hbCBzdGVwIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQgaWYgeW91IGFyZQotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgb3IgYWRkaW5nIHRoaXJkLXBhcnR5IHNvZnR3YXJlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvIGNvbnZlcnQgY29tbWl0cyBjcmVhdGVkIHVzaW5nIEdpdCB0byBwYXRjaCBmaWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaW5pc2ggWW91ciBXb3JrIFdpdGggdGhlIFJlY2lwZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMgY29ycmVzcG9uZGluZyB0byBjb21taXRzIGluIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIG1vdmVzIHRoZSBuZXcgcmVjaXBlIHRvIGEgbW9yZSBwZXJtYW5lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLCBhbmQgdGhlbiByZXNldHMgdGhlIHJlY2lwZSBzbyB0aGF0IHRoZSByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IG5vcm1hbGx5IHJhdGhlciB0aGFuIGZyb20gdGhlIHdvcmtzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGZpbmlzaCA8cmVwbGFjZWFibGU+cmVjaXBlIGxheWVyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBjaGFuZ2VzIHlvdSB3YW50IHRvIHR1cm4gaW50byBwYXRjaGVzIG11c3QgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWQgdG8gdGhlIEdpdCByZXBvc2l0b3J5IGluIHRoZSBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFzIG1lbnRpb25lZCwgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG1vdmVzIHRoZSBmaW5hbCByZWNpcGUgdG8gaXRzIHBlcm1hbmVudCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgYSBmaW5hbCBwcm9jZXNzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3RhbmRhcmQgbGF5ZXJzIGFuZCB0aGUgdXBzdHJlYW0gc291cmNlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlZCBzbyB0aGF0IHlvdSBjYW4gYnVpbGQgdGhlIHJlY2lwZSBmcm9tIHRob3NlCisgICAgICAgICAgICAgICAgICAgICAgICBhcmVhcyByYXRoZXIgdGhhbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHB1dCB0aGluZ3MgYmFjayBzaG91bGQgeW91IGRlY2lkZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3Qgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciB3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyB1c2UgdGhpcyBjb21tYW5kLCByZWFsaXplIHRoYXQgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgaXMgcHJlc2VydmVkLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1vdmUgdGhlIFJlY2lwZSB0byBpdHMgUGVybWFuZW50IExheWVyPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgY2xlYW5pbmcgdXAgdGhlIHdvcmtzcGFjZSwgeW91IG5lZWQgdG8gbW92ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIHJlY2lwZSB0byBpdHMgcGVybWFuZW50IGxheWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgZG8gdGhpcyBiZWZvcmUgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgaWYgeW91IHdhbnQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbiB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVzZXQgdGhlIFJlY2lwZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSBmaW5hbCBzdGVwLCB5b3UgY2FuIHJlc3RvcmUgdGhlIHN0YXRlIHN1Y2ggdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgbGF5ZXJzIGFuZCB0aGUgdXBzdHJlYW0gc291cmNlIGlzIHVzZWQgdG8gYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgcmF0aGVyIHRoYW4gZGF0YSBpbiB0aGUgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgVG8gcmVzZXQgdGhlIHJlY2lwZSwgdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgcmVzZXQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKICAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtdXNlLWRldnRvb2wtbW9kaWZ5LXRvLWVuYWJsZS13b3JrLW9uLWNvZGUtYXNzb2NpYXRlZC13aXRoLWFuLWV4aXN0aW5nLXJlY2lwZSc+Ci0gICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IHRvIEVuYWJsZSBXb3JrIG9uIENvZGUgQXNzb2NpYXRlZCB3aXRoIGFuIEV4aXN0aW5nIFJlY2lwZTwvdGl0bGU+CisgICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IHRvIE1vZGlmeSB0aGUgU291cmNlIG9mIGFuIEV4aXN0aW5nIENvbXBvbmVudDwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIHByZXBhcmVzIHRoZQpAQCAtMTAyOCwxNyArMTAyNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBSZWNpcGU8L2VtcGhhc2lzPjoKICAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdXBkYXRlZCB0aGUgc291cmNlIGZpbGVzLCB5b3UgY2FuIGJ1aWxkCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIgbWV0aG9kIHByb2R1Y2VzIGJ1aWxkIG91dHB1dCB0aGF0IGlzIHN0b3JlZAotICAgICAgICAgICAgICAgICAgICAgICAgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBCdWlsZCBPdXRwdXQ8L2VtcGhhc2lzPjoKICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvciA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IHRvIGJ1aWxkIG91dCB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNlZSBpZiB0aGUgcmVzdWx0aW5nIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgd29ya3MgYXMgZXhwZWN0ZWQgb24gdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBidWlsZCBvdXQgeW91ciByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNlZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHJlc3VsdGluZyBidWlsZCBvdXRwdXQgd29ya3MgYXMgZXhwZWN0ZWQgb24gdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBhc3N1bWVzIHlvdSBoYXZlIGEgcHJldmlvdXNseSBidWlsdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBlaXRoZXIgcnVubmluZyBpbiBRRU1VIG9yCkBAIC0xMDYyLDQyICsxMDUzLDQzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGRvZXMgbm90IHByb3ZpZGUgYQogICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gZG8gdGhpcy4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wdGlvbmFsbHkgQ3JlYXRlIFBhdGNoIEZpbGVzIGZvciBZb3VyIENoYW5nZXM8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIGRlYnVnZ2VkIHlvdXIgY2hhbmdlcywgeW91IGNhbgotICAgICAgICAgICAgICAgICAgICAgICAgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPiB0bwotICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgcGF0Y2ggZmlsZXMgZm9yIGFsbCB0aGUgY29tbWl0cyB5b3UgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgbWFkZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGNoIGZpbGVzIGFyZSBnZW5lcmF0ZWQgb25seSBmb3IgY2hhbmdlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIGNvbW1pdHRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkZpbmlzaCBZb3VyIFdvcmsgV2l0aCB0aGUgUmVjaXBlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgcGF0Y2hlcyBjb3JyZXNwb25kaW5nIHRvIGNvbW1pdHMgaW4gdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSwgdXBkYXRlcyB0aGUgcmVjaXBlIHRvIHBvaW50IHRvIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIChvciBjcmVhdGVzIGEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgdG8gZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmllZCBkZXN0aW5hdGlvbiBsYXllciksIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiByZXNldHMgdGhlIHJlY2lwZSBzbyB0aGF0IHRoZSByZWNpcGUgaXMgYnVpbHQgbm9ybWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGZyb20gdGhlIHdvcmtzcGFjZS4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICQgZGV2dG9vbCBmaW5pc2ggPHJlcGxhY2VhYmxlPnJlY2lwZSBsYXllcjwvcmVwbGFjZWFibGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBwYXRjaCBmaWxlcyBpbiBhIGZvbGRlciBuYW1lZCB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHJlY2lwZSBiZW5lYXRoIHRoZSBmb2xkZXIgaW4gd2hpY2ggdGhlIHJlY2lwZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzaWRlcywgYW5kIHVwZGF0ZXMgdGhlIHJlY2lwZSdzCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgdG8gcG9pbnQgdG8gdGhlIGdlbmVyYXRlZCBwYXRjaCBmaWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWFwcGVuZCA8cmVwbGFjZWFibGU+TEFZRVJESVI8L3JlcGxhY2VhYmxlPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gdG8gY2F1c2UgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIGFwcGVuZCBmaWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgc3BlY2lmaWMgbGF5ZXIgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IHdhbnQgdG8gdHVybiBpbnRvIHBhdGNoZXMgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZCB0byB0aGUgR2l0IHJlcG9zaXRvcnkgaW4gdGhlIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QmVjYXVzZSB0aGVyZSBpcyBubyBuZWVkIHRvIG1vdmUgdGhlIHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGVpdGhlciB1cGRhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgcmVjaXBlIGluIHRoZSBvcmlnaW5hbCBsYXllciBvciB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBpbiBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYXMgcHJvdmlkZWQgYnkgPHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFzIGEgZmluYWwgcHJvY2VzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQsIHRoZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN0YW5kYXJkIGxheWVycyBhbmQgdGhlIHVwc3RyZWFtIHNvdXJjZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZWQgc28gdGhhdCB5b3UgY2FuIGJ1aWxkIHRoZSByZWNpcGUgZnJvbSB0aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgYXJlYXMgcmF0aGVyIHRoYW4gdGhlIHdvcmtzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBwdXQgdGhpbmdzIGJhY2sgc2hvdWxkIHlvdSBkZWNpZGUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IHdhbnQgdG8gcHJvY2VlZCB3aXRoIHlvdXIgd29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gdXNlIHRoaXMgY29tbWFuZCwgcmVhbGl6ZSB0aGF0IHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlIGlzIHByZXNlcnZlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlc3RvcmUgdGhlIFdvcmtzcGFjZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gcmVzdG9yZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSBzbyB0aGF0IHN0YW5kYXJkIGxheWVycyBhbmQgdXBzdHJlYW0gc291cmNlcyBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgdGhlIHJlY2lwZSByYXRoZXIgdGhhbiB3aGF0IGlzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgcmVzZXQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CkBAIC0xMjI5LDYzMyArMTIyMSw0MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBkb2VzIG5vdCBwcm92aWRlIGEKICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGNvbW1hbmQgdGhhdCBhbGxvd3MgeW91IHRvIGRvIHRoaXMuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcHRpb25hbGx5IENyZWF0ZSBQYXRjaCBGaWxlcyBmb3IgWW91ciBDaGFuZ2VzPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBkZWJ1Z2dlZCB5b3VyIGNoYW5nZXMsIHlvdSBjYW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIHBhdGNoIGZpbGVzIGZvciBhbGwgdGhlIGNvbW1pdHMgeW91IGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hZGUuCisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaW5pc2ggWW91ciBXb3JrIFdpdGggdGhlIFJlY2lwZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMgY29ycmVzcG9uZGluZyB0byBjb21taXRzIGluIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIG1vdmVzIHRoZSBuZXcgcmVjaXBlIHRvIGEgbW9yZSBwZXJtYW5lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLCBhbmQgdGhlbiByZXNldHMgdGhlIHJlY2lwZSBzbyB0aGF0IHRoZSByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IG5vcm1hbGx5IHJhdGhlciB0aGFuIGZyb20gdGhlIHdvcmtzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGEgZGVzdGluYXRpb24gbGF5ZXIgdGhhdCBpcyB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIHNvdXJjZSwgdGhlbiB0aGUgb2xkIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgYW5kIGFzc29jaWF0ZWQgZmlsZXMgd2lsbCBiZSByZW1vdmVkIHByaW9yIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpbmcgdGhlIG5ldyB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgZmluaXNoIDxyZXBsYWNlYWJsZT5yZWNpcGUgbGF5ZXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0Y2ggZmlsZXMgYXJlIGdlbmVyYXRlZCBvbmx5IGZvciBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgY29tbWl0dGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBjaGFuZ2VzIHlvdSB3YW50IHRvIHR1cm4gaW50byBwYXRjaGVzIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWQgdG8gdGhlIEdpdCByZXBvc2l0b3J5IGluIHRoZSBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BcyBhIGZpbmFsIHByb2Nlc3Mgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBmaW5pc2g8L2ZpbGVuYW1lPiBjb21tYW5kLCB0aGUgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzdGFuZGFyZCBsYXllcnMgYW5kIHRoZSB1cHN0cmVhbSBzb3VyY2UgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVkIHNvIHRoYXQgeW91IGNhbiBidWlsZCB0aGUgcmVjaXBlIGZyb20gdGhvc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFzIHJhdGhlciB0aGFuIHRoZSB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gcHV0IHRoaW5ncyBiYWNrIHNob3VsZCB5b3UgZGVjaWRlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHVzZSB0aGlzIGNvbW1hbmQsIHJlYWxpemUgdGhhdCB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSBpcyBwcmVzZXJ2ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCB1cGRhdGUtcmVjaXBlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyB0aGUgcGF0Y2ggZmlsZXMgaW4gYSBmb2xkZXIgbmFtZWQgdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSByZWNpcGUgYmVuZWF0aCB0aGUgZm9sZGVyIGluIHdoaWNoIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc2lkZXMsIGFuZCB1cGRhdGVzIHRoZSByZWNpcGUncwotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IHRvIHBvaW50IHRvIHRoZSBnZW5lcmF0ZWQgcGF0Y2ggZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Nb3ZlIHRoZSBSZWNpcGUgdG8gaXRzIFBlcm1hbmVudCBMYXllcjwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIGNsZWFuaW5nIHVwIHRoZSB3b3Jrc3BhY2UsIHlvdSBuZWVkIHRvIG1vdmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCByZWNpcGUgdG8gaXRzIHBlcm1hbmVudCBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZWl0aGVyIG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgcmVjaXBlIG9yIHlvdSBjYW4KLSAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXkgdGhlIHVwZ3JhZGVkIHJlY2lwZSBpbnRvIGEgc2VwYXJhdGUgbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBkbyB0aGlzIGJlZm9yZSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCBpZiB5b3Ugd2FudCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluIHRoZSB1cGdyYWRlZCByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZXN0b3JlIHRoZSBXb3Jrc3BhY2U8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IHJlc3RvcmVzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgc28gdGhhdCBzdGFuZGFyZCBsYXllcnMgYW5kIHVwc3RyZWFtIHNvdXJjZXMgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoZSByZWNpcGUgcmF0aGVyIHRoYW4gd2hhdCBpcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIHJlc2V0IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXF1aWNrLXJlZmVyZW5jZSc+Ci0gICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IFF1aWNrIFJlZmVyZW5jZTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGhhcyBtb3JlIGZ1bmN0aW9uYWxpdHkgdGhhbiBzaW1wbHkKLSAgICAgICAgICAgIGFkZGluZyBhIG5ldyByZWNpcGUgYW5kIHRoZSBzdXBwb3J0aW5nIE1ldGFkYXRhIHRvIGEgdGVtcG9yYXJ5Ci0gICAgICAgICAgICB3b3Jrc3BhY2UgbGF5ZXIuCi0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBzaG9ydCByZWZlcmVuY2Ugb24KLSAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gYW5kIGl0cyBjb21tYW5kcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWdldHRpbmctaGVscCc+Ci0gICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBIZWxwPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIGdldCBoZWxwIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWhlbHA8L2ZpbGVuYW1lPiBvcHRpb246Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICB1c2FnZTogZGV2dG9vbCBbLS1iYXNlcGF0aCBCQVNFUEFUSF0gWy0tYmJwYXRoIEJCUEFUSF0gWy1kXSBbLXFdCi0gICAgICAgICAgICAgICAgICAgIFstLWNvbG9yIENPTE9SXSBbLWhdCi0gICAgICAgICAgICAgICAgICAgICZsdDtzdWJjb21tYW5kJmd0OyAuLi4KLQotICAgICBPcGVuRW1iZWRkZWQgZGV2ZWxvcG1lbnQgdG9vbAotCi0gICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKLSAgICAgICAtLWJhc2VwYXRoIEJBU0VQQVRIICBCYXNlIGRpcmVjdG9yeSBvZiBTREsgLyBidWlsZCBkaXJlY3RvcnkKLSAgICAgICAtLWJicGF0aCBCQlBBVEggICAgICBFeHBsaWNpdGx5IHNwZWNpZnkgdGhlIEJCUEFUSCwgcmF0aGVyIHRoYW4gZ2V0dGluZyBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIG1ldGFkYXRhCi0gICAgICAgLWQsIC0tZGVidWcgICAgICAgICAgRW5hYmxlIGRlYnVnIG91dHB1dAotICAgICAgIC1xLCAtLXF1aWV0ICAgICAgICAgIFByaW50IG9ubHkgZXJyb3JzCi0gICAgICAgLS1jb2xvciBDT0xPUiAgICAgICAgQ29sb3JpemUgb3V0cHV0ICh3aGVyZSBDT0xPUiBpcyBhdXRvLCBhbHdheXMsIG5ldmVyKQotICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLQotICAgICBzdWJjb21tYW5kczoKLSAgICAgICBCZWdpbm5pbmcgd29yayBvbiBhIHJlY2lwZToKLSAgICAgICAgIGFkZCAgICAgICAgICAgICAgICAgIEFkZCBhIG5ldyByZWNpcGUKLSAgICAgICAgIG1vZGlmeSAgICAgICAgICAgICAgIE1vZGlmeSB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUKLSAgICAgICAgIHVwZ3JhZGUgICAgICAgICAgICAgIFVwZ3JhZGUgYW4gZXhpc3RpbmcgcmVjaXBlCi0gICAgICAgR2V0dGluZyBpbmZvcm1hdGlvbjoKLSAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgIFNob3cgd29ya3NwYWNlIHN0YXR1cwotICAgICAgICAgc2VhcmNoICAgICAgICAgICAgICAgU2VhcmNoIGF2YWlsYWJsZSByZWNpcGVzCi0gICAgICAgV29ya2luZyBvbiBhIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlOgotICAgICAgICAgYnVpbGQgICAgICAgICAgICAgICAgQnVpbGQgYSByZWNpcGUKLSAgICAgICAgIGVkaXQtcmVjaXBlICAgICAgICAgIEVkaXQgYSByZWNpcGUgZmlsZSBpbiB5b3VyIHdvcmtzcGFjZQotICAgICAgICAgY29uZmlndXJlLWhlbHAgICAgICAgR2V0IGhlbHAgb24gY29uZmlndXJlIHNjcmlwdCBvcHRpb25zCi0gICAgICAgICB1cGRhdGUtcmVjaXBlICAgICAgICBBcHBseSBjaGFuZ2VzIGZyb20gZXh0ZXJuYWwgc291cmNlIHRyZWUgdG8gcmVjaXBlCi0gICAgICAgICByZXNldCAgICAgICAgICAgICAgICBSZW1vdmUgYSByZWNpcGUgZnJvbSB5b3VyIHdvcmtzcGFjZQotICAgICAgIFRlc3RpbmcgY2hhbmdlcyBvbiB0YXJnZXQ6Ci0gICAgICAgICBkZXBsb3ktdGFyZ2V0ICAgICAgICBEZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyB0byBsaXZlIHRhcmdldCBtYWNoaW5lCi0gICAgICAgICB1bmRlcGxveS10YXJnZXQgICAgICBVbmRlcGxveSByZWNpcGUgb3V0cHV0IGZpbGVzIGluIGxpdmUgdGFyZ2V0IG1hY2hpbmUKLSAgICAgICAgIGJ1aWxkLWltYWdlICAgICAgICAgIEJ1aWxkIGltYWdlIGluY2x1ZGluZyB3b3Jrc3BhY2UgcmVjaXBlIHBhY2thZ2VzCi0gICAgICAgQWR2YW5jZWQ6Ci0gICAgICAgICBjcmVhdGUtd29ya3NwYWNlICAgICBTZXQgdXAgd29ya3NwYWNlIGluIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uCi0gICAgICAgICBleHRyYWN0ICAgICAgICAgICAgICBFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZQotICAgICAgICAgc3luYyAgICAgICAgICAgICAgICAgU3luY2hyb25pemUgdGhlIHNvdXJjZSB0cmVlIGZvciBhbiBleGlzdGluZyByZWNpcGUKLSAgICAgVXNlIGRldnRvb2wgJmx0O3N1YmNvbW1hbmQmZ3Q7IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFzIGRpcmVjdGVkIGluIHRoZSBnZW5lcmFsIGhlbHAgb3V0cHV0LCB5b3UgY2FuIGdldCBtb3JlCi0gICAgICAgICAgICAgICAgc3ludGF4IG9uIGEgc3BlY2lmaWMgY29tbWFuZCBieSBwcm92aWRpbmcgdGhlIGNvbW1hbmQKLSAgICAgICAgICAgICAgICBuYW1lIGFuZCB1c2luZyA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgYWRkIC0taGVscAotICAgICB1c2FnZTogZGV2dG9vbCBhZGQgWy1oXSBbLS1zYW1lLWRpciB8IC0tbm8tc2FtZS1kaXJdIFstLWZldGNoIFVSSV0KLSAgICAgICAgICAgICAgICAgICAgICAgIFstLXZlcnNpb24gVkVSU0lPTl0gWy0tbm8tZ2l0XSBbLS1iaW5hcnldIFstLWFsc28tbmF0aXZlXQotICAgICAgICAgICAgICAgICAgICAgICAgWy0tc3JjLXN1YmRpciBTVUJESVJdCi0gICAgICAgICAgICAgICAgICAgICAgICBbcmVjaXBlbmFtZV0gW3NyY3RyZWVdIFtmZXRjaHVyaV0KLQotICAgICBBZGRzIGEgbmV3IHJlY2lwZSB0byB0aGUgd29ya3NwYWNlIHRvIGJ1aWxkIGEgc3BlY2lmaWVkIHNvdXJjZSB0cmVlLiBDYW4KLSAgICAgb3B0aW9uYWxseSBmZXRjaCBhIHJlbW90ZSBVUkkgYW5kIHVucGFjayBpdCB0byBjcmVhdGUgdGhlIHNvdXJjZSB0cmVlLgotCi0gICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgotICAgICAgIHJlY2lwZW5hbWUgICAgICAgICAgICBOYW1lIGZvciBuZXcgcmVjaXBlIHRvIGFkZCAoanVzdCBuYW1lIC0gbm8gdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBvciBleHRlbnNpb24pLiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGF0dGVtcHQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0by1kZXRlY3QgaXQuCi0gICAgICAgc3JjdHJlZSAgICAgICAgICAgICAgIFBhdGggdG8gZXh0ZXJuYWwgc291cmNlIHRyZWUuIElmIG5vdCBzcGVjaWZpZWQsIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvd29ya3NwYWNlL3NvdXJjZXMgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkLgotICAgICAgIGZldGNodXJpICAgICAgICAgICAgICBGZXRjaCB0aGUgc3BlY2lmaWVkIFVSSSBhbmQgZXh0cmFjdCBpdCB0byBjcmVhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlCi0KLSAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgotICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0gICAgICAgLS1zYW1lLWRpciwgLXMgICAgICAgIEJ1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZQotICAgICAgIC0tbm8tc2FtZS1kaXIgICAgICAgICBGb3JjZSBidWlsZCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeQotICAgICAgIC0tZmV0Y2ggVVJJLCAtZiBVUkkgICBGZXRjaCB0aGUgc3BlY2lmaWVkIFVSSSBhbmQgZXh0cmFjdCBpdCB0byBjcmVhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlIChkZXByZWNhdGVkIC0gcGFzcyBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQpCi0gICAgICAgLS12ZXJzaW9uIFZFUlNJT04sIC1WIFZFUlNJT04KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiB0byB1c2Ugd2l0aGluIHJlY2lwZSAoUFYpCi0gICAgICAgLS1uby1naXQsIC1nICAgICAgICAgIElmIGZldGNoaW5nIHNvdXJjZSwgZG8gbm90IHNldCB1cCBzb3VyY2UgdHJlZSBhcyBhIGdpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5Ci0gICAgICAgLS1iaW5hcnksIC1iICAgICAgICAgIFRyZWF0IHRoZSBzb3VyY2UgdHJlZSBhcyBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHZlcmJhdGltIChubyBjb21waWxhdGlvbiwgc2FtZSBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKS4gVXNlZnVsIHdpdGggYmluYXJ5IHBhY2thZ2VzIGUuZy4gUlBNcy4KLSAgICAgICAtLWFsc28tbmF0aXZlICAgICAgICAgQWxzbyBhZGQgbmF0aXZlIHZhcmlhbnQgKGkuZS4gc3VwcG9ydCBidWlsZGluZyByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBidWlsZCBob3N0IGFzIHdlbGwgYXMgdGhlIHRhcmdldCBtYWNoaW5lKQotICAgICAgIC0tc3JjLXN1YmRpciBTVUJESVIgICBTcGVjaWZ5IHN1YmRpcmVjdG9yeSB3aXRoaW4gc291cmNlIHRyZWUgdG8gdXNlCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtdGhlLXdvcmtzcGFjZS1sYXllci1zdHJ1Y3R1cmUnPgotICAgICAgICAgICAgPHRpdGxlPlRoZSBXb3Jrc3BhY2UgTGF5ZXIgU3RydWN0dXJlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB1c2VzIGEgIldvcmtzcGFjZSIgbGF5ZXIKLSAgICAgICAgICAgICAgICBpbiB3aGljaCB0byBhY2NvbXBsaXNoIGJ1aWxkcy4KLSAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGlzIG5vdCBzcGVjaWZpYyB0byBhbnkgc2luZ2xlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBjb21tYW5kIGJ1dCBpcyByYXRoZXIgYSBjb21tb24KLSAgICAgICAgICAgICAgICB3b3JraW5nIGFyZWEgdXNlZCBhY3Jvc3MgdGhlIHRvb2wuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB3b3Jrc3BhY2Ugc3RydWN0dXJlOgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmciCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIGFsaWduPSJsZWZ0IiBzY2FsZT0iNzAiIC8+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgYXR0aWMgLSBBIGRpcmVjdG9yeSBjcmVhdGVkIGlmIGRldnRvb2wgYmVsaWV2ZXMgaXQgcHJlc2VydmUKLSAgICAgICAgICAgICBhbnl0aGluZyB3aGVuIHlvdSBydW4gImRldnRvb2wgcmVzZXQiLiAgRm9yIGV4YW1wbGUsIGlmIHlvdQotICAgICAgICAgICAgIHJ1biAiZGV2dG9vbCBhZGQiLCBtYWtlIGNoYW5nZXMgdG8gdGhlIHJlY2lwZSwgYW5kIHRoZW4KLSAgICAgICAgICAgICBydW4gImRldnRvb2wgcmVzZXQiLCBkZXZ0b29sIHRha2VzIG5vdGljZSB0aGF0IHRoZSBmaWxlIGhhcwotICAgICAgICAgICAgIGJlZW4gY2hhbmdlZCBhbmQgbW92ZXMgaXQgaW50byB0aGUgYXR0aWMgc2hvdWxkIHlvdSBzdGlsbAotICAgICAgICAgICAgIHdhbnQgdGhlIHJlY2lwZS4KLQotICAgICBSRUFETUUgLSBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB3aGF0IGlzIGluIHdvcmtzcGFjZSBsYXllciBhbmQgaG93IHRvCi0gICAgICAgICAgICAgIG1hbmFnZSBpdC4KLQotICAgICAuZGV2dG9vbF9tZDUgLSBBIGNoZWNrc3VtIGZpbGUgdXNlZCBieSBkZXZ0b29sLgotCi0gICAgIGFwcGVuZHMgLSBBIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zICouYmJhcHBlbmQgZmlsZXMsIHdoaWNoIHBvaW50IHRvCi0gICAgICAgICAgICAgICBleHRlcm5hbCBzb3VyY2UuCi0KLSAgICAgY29uZiAtIEEgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgbGF5ZXIuY29uZiBmaWxlLgotCi0gICAgIHJlY2lwZXMgLSBBIGRpcmVjdG9yeSBjb250YWluaW5nIHJlY2lwZXMuICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhCi0gICAgICAgICAgICAgICBmb2xkZXIgZm9yIGVhY2ggZGlyZWN0b3J5IGFkZGVkIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGF0IG9mIHRoZQotICAgICAgICAgICAgICAgYWRkZWQgcmVjaXBlLiAgZGV2dG9vbCBwbGFjZXMgdGhlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPi5iYiBmaWxlCi0gICAgICAgICAgICAgICB3aXRoaW4gdGhhdCBzdWItZGlyZWN0b3J5LgotCi0gICAgIHNvdXJjZXMgLSBBIGRpcmVjdG9yeSBjb250YWluaW5nIGEgd29ya2luZyBjb3B5IG9mIHRoZSBzb3VyY2UgZmlsZXMgdXNlZAotICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyB0aGUgcmVjaXBlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBkaXJlY3RvcnkgdXNlZAotICAgICAgICAgICAgICAgYXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzb3VyY2UgdHJlZSB3aGVuIHlvdSBkbyBub3QgcHJvdmlkZSBhCi0gICAgICAgICAgICAgICBzb3VyY2UgdHJlZSBwYXRoLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYSBmb2xkZXIgZm9yIGVhY2gKLSAgICAgICAgICAgICAgIHNldCBvZiBzb3VyY2UgZmlsZXMgbWF0Y2hlZCB0byBhIGNvcnJlc3BvbmRpbmcgcmVjaXBlLgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+Ci0gICAgICAgICAgICA8dGl0bGU+QWRkaW5nIGEgTmV3IFJlY2lwZSB0byB0aGUgV29ya3NwYWNlIExheWVyPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGFkZCBhIG5ldyByZWNpcGUKLSAgICAgICAgICAgICAgICB0byB0aGUgd29ya3NwYWNlIGxheWVyLgotICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgeW91IGFkZCBzaG91bGQgbm90IGV4aXN0IC0KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNyZWF0ZXMgaXQgZm9yIHlvdS4KLSAgICAgICAgICAgICAgICBUaGUgc291cmNlIGZpbGVzIHRoZSByZWNpcGUgdXNlcyBzaG91bGQgZXhpc3QgaW4gYW4gZXh0ZXJuYWwKLSAgICAgICAgICAgICAgICBhcmVhLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhbmQgYWRkcyBhIG5ldyByZWNpcGUgbmFtZWQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+amFja3NvbjwvZmlsZW5hbWU+IHRvIGEgd29ya3NwYWNlIGxheWVyIHRoZSB0b29sIGNyZWF0ZXMuCi0gICAgICAgICAgICAgICAgVGhlIHNvdXJjZSBjb2RlIGJ1aWx0IGJ5IHRoZSByZWNpcGVzIHJlc2lkZXMgaW4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvc291cmNlcy9qYWNrc29uPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgYWRkIGphY2tzb24gL2hvbWUvc2NvdHRyaWYvc291cmNlcy9qYWNrc29uCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJZiB5b3UgYWRkIGEgcmVjaXBlIGFuZCB0aGUgd29ya3NwYWNlIGxheWVyIGRvZXMgbm90IGV4aXN0LAotICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGNyZWF0ZXMgdGhlIGxheWVyIGFuZCBwb3B1bGF0ZXMgaXQgYXMKLSAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4KLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGV2dG9vbC10aGUtd29ya3NwYWNlLWxheWVyLXN0cnVjdHVyZSc+VGhlIFdvcmtzcGFjZSBMYXllciBTdHJ1Y3R1cmU8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gd2hlbiB0aGUKLSAgICAgICAgICAgICAgICB3b3Jrc3BhY2UgbGF5ZXIgZXhpc3RzIGNhdXNlcyB0aGUgdG9vbCB0byBhZGQgdGhlIHJlY2lwZSwKLSAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZXMsIGFuZCBzb3VyY2UgZmlsZXMgaW50byB0aGUgZXhpc3Rpbmcgd29ya3NwYWNlIGxheWVyLgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpcyBjcmVhdGVkIHRvIHBvaW50Ci0gICAgICAgICAgICAgICAgdG8gdGhlIGV4dGVybmFsIHNvdXJjZSB0cmVlLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZXh0cmFjdGluZy10aGUtc291cmNlLWZvci1hbi1leGlzdGluZy1yZWNpcGUnPgotICAgICAgICAgICAgPHRpdGxlPkV4dHJhY3RpbmcgdGhlIFNvdXJjZSBmb3IgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBleHRyYWN0PC9maWxlbmFtZT4gY29tbWFuZCB0bwotICAgICAgICAgICAgICAgIGV4dHJhY3QgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlLgotICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGlzIGNvbW1hbmQsIHlvdSBtdXN0IHN1cHBseSB0aGUgcm9vdCBuYW1lCi0gICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSAoaS5lLiBubyB2ZXJzaW9uLCBwYXRocywgb3IgZXh0ZW5zaW9ucyksIGFuZAotICAgICAgICAgICAgICAgIHlvdSBtdXN0IHN1cHBseSB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHlvdSB3YW50IHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICBleHRyYWN0ZWQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgY29tbWFuZCBvcHRpb25zIGxldCB5b3UgY29udHJvbCB0aGUgbmFtZSBvZiBhCi0gICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnJhbmNoIGludG8gd2hpY2ggeW91IGNhbiBjaGVja291dCB0aGUgc291cmNlCi0gICAgICAgICAgICAgICAgYW5kIHdoZXRoZXIgb3Igbm90IHRvIGtlZXAgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCB3aGljaCBpcwotICAgICAgICAgICAgICAgIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtc3luY2hyb25pemluZy1hLXJlY2lwZXMtZXh0cmFjdGVkLXNvdXJjZS10cmVlJz4KLSAgICAgICAgICAgIDx0aXRsZT5TeW5jaHJvbml6aW5nIGEgUmVjaXBlJ3MgRXh0cmFjdGVkIFNvdXJjZSBUcmVlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzeW5jPC9maWxlbmFtZT4gY29tbWFuZCB0bwotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplIGEgcHJldmlvdXNseSBleHRyYWN0ZWQgc291cmNlIHRyZWUgZm9yIGFuCi0gICAgICAgICAgICAgICAgZXhpc3RpbmcgcmVjaXBlLgotICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGlzIGNvbW1hbmQsIHlvdSBtdXN0IHN1cHBseSB0aGUgcm9vdCBuYW1lCi0gICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSAoaS5lLiBubyB2ZXJzaW9uLCBwYXRocywgb3IgZXh0ZW5zaW9ucyksIGFuZAotICAgICAgICAgICAgICAgIHlvdSBtdXN0IHN1cHBseSB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHlvdSB3YW50IHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICBleHRyYWN0ZWQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgY29tbWFuZCBvcHRpb25zIGxldCB5b3UgY29udHJvbCB0aGUgbmFtZSBvZiBhCi0gICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnJhbmNoIGludG8gd2hpY2ggeW91IGNhbiBjaGVja291dCB0aGUgc291cmNlCi0gICAgICAgICAgICAgICAgYW5kIHdoZXRoZXIgb3Igbm90IHRvIGtlZXAgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCB3aGljaCBpcwotICAgICAgICAgICAgICAgIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtbW9kaWZ5aW5nLWEtcmVjaXBlJz4KLSAgICAgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGJlZ2luCi0gICAgICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBzb3VyY2Ugb2YgYW4gZXhpc3RpbmcgcmVjaXBlLgotICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZGV2dG9vbC1hZGRpbmctYS1uZXctcmVjaXBlLXRvLXRoZS13b3Jrc3BhY2UnPjxmaWxlbmFtZT5hZGQ8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICBjb21tYW5kIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IHBoeXNpY2FsbHkgY3JlYXRlIHRoZQotICAgICAgICAgICAgICAgIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlIGxheWVyIGJlY2F1c2UgdGhlIHJlY2lwZSBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgZXhpc3RzIGluIGFuIGFub3RoZXIgbGF5ZXIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIGV4dHJhY3RzIHRoZQotICAgICAgICAgICAgICAgIHNvdXJjZSBmb3IgYSByZWNpcGUsIHNldHMgaXQgdXAgYXMgYSBHaXQgcmVwb3NpdG9yeSBpZiB0aGUKLSAgICAgICAgICAgICAgICBzb3VyY2UgaGFkIG5vdCBhbHJlYWR5IGJlZW4gZmV0Y2hlZCBmcm9tIEdpdCwgY2hlY2tzIG91dCBhCi0gICAgICAgICAgICAgICAgYnJhbmNoIGZvciBkZXZlbG9wbWVudCwgYW5kIGFwcGxpZXMgYW55IHBhdGNoZXMgZnJvbSB0aGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgYXMgY29tbWl0cyBvbiB0b3AuCi0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGNoZWNrb3V0IHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICBmaWxlczoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBtb2RpZnkgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBhYm92ZSBjb21tYW5kIGZvcm0sIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdXNlcwotICAgICAgICAgICAgICAgIHRoZSBleGlzdGluZyByZWNpcGUncwotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgdG8gbG9jYXRlIHRoZSB1cHN0cmVhbSBzb3VyY2UsIGV4dHJhY3RzIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICBpbnRvIHRoZSBkZWZhdWx0IHNvdXJjZXMgbG9jYXRpb24gaW4gdGhlIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBkZXZlbG9wbWVudCBicmFuY2ggdXNlZCBpcyAiZGV2dG9vbCIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1lZGl0LWFuLWV4aXN0aW5nLXJlY2lwZSc+Ci0gICAgICAgICAgICA8dGl0bGU+RWRpdCBhbiBFeGlzdGluZyBSZWNpcGU8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGVkaXQtcmVjaXBlPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgZGVmYXVsdCBlZGl0b3IsIHdoaWNoIGlzIGlkZW50aWZpZWQgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVESVRPUjwvZmlsZW5hbWU+IHZhcmlhYmxlLCBvbiB0aGUgc3BlY2lmaWVkIHJlY2lwZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBlZGl0LXJlY2lwZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY29tbWFuZCwgeW91IG11c3Qgc3VwcGx5IHRoZSByb290IG5hbWUgb2YgdGhlIHJlY2lwZQotICAgICAgICAgICAgICAgIChpLmUuIG5vIHZlcnNpb24sIHBhdGhzLCBvciBleHRlbnNpb25zKS4KLSAgICAgICAgICAgICAgICBBbHNvLCB0aGUgcmVjaXBlIGZpbGUgaXRzZWxmIG11c3QgcmVzaWRlIGluIHRoZSB3b3Jrc3BhY2UKLSAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGdyYWRlPC9maWxlbmFtZT4gY29tbWFuZHMuCi0gICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBvdmVycmlkZSB0aGF0IHJlcXVpcmVtZW50IGJ5IHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICItYSIgb3IgIi0tYW55LXJlY2lwZSIgb3B0aW9uLgotICAgICAgICAgICAgICAgIFVzaW5nIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zIGFsbG93cyB5b3UgdG8gZWRpdCBhbnkgcmVjaXBlCi0gICAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiBpdHMgbG9jYXRpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC11cGRhdGluZy1hLXJlY2lwZSc+Ci0gICAgICAgICAgICA8dGl0bGU+VXBkYXRpbmcgYSBSZWNpcGU8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCi0gICAgICAgICAgICAgICAgdXBkYXRlIHlvdXIgcmVjaXBlIHdpdGggcGF0Y2hlcyB0aGF0IHJlZmxlY3QgY2hhbmdlcyB5b3UgbWFrZQotICAgICAgICAgICAgICAgIHRvIHRoZSBzb3VyY2UgZmlsZXMuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBrbm93IHlvdSBhcmUgZ29pbmcgdG8gd29yayBvbiBzb21lCi0gICAgICAgICAgICAgICAgY29kZSwgeW91IGNvdWxkIGZpcnN0IHVzZSB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLW1vZGlmeWluZy1hLXJlY2lwZSc+PGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgY29tbWFuZCB0byBleHRyYWN0IHRoZSBjb2RlIGFuZCBzZXQgdXAgdGhlIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICBBZnRlciB3aGljaCwgeW91IGNvdWxkIG1vZGlmeSwgY29tcGlsZSwgYW5kIHRlc3QgdGhlIGNvZGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgcmVzdWx0cyBhbmQgeW91IGhhdmUgY29tbWl0dGVkCi0gICAgICAgICAgICAgICAgeW91ciBjaGFuZ2VzIHRvIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiB0aGVuCi0gICAgICAgICAgICAgICAgcnVuIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4gdG8gY3JlYXRlIHRoZQotICAgICAgICAgICAgICAgIHBhdGNoZXMgYW5kIHVwZGF0ZSB0aGUgcmVjaXBlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIElmIHlvdSBydW4gdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHdpdGhvdXQgY29tbWl0dGluZyB5b3VyIGNoYW5nZXMsIHRoZSBjb21tYW5kIGlnbm9yZXMgdGhlCi0gICAgICAgICAgICAgICAgY2hhbmdlcy4KLSAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgT2Z0ZW4sIHlvdSBtaWdodCB3YW50IHRvIGFwcGx5IGN1c3RvbWl6YXRpb25zIG1hZGUgdG8geW91cgotICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpbiB5b3VyIG93biBsYXllciByYXRoZXIgdGhhbiBhcHBseSB0aGVtIHRvIHRoZQotICAgICAgICAgICAgICAgICBvcmlnaW5hbCByZWNpcGUuCi0gICAgICAgICAgICAgICAgIElmIHNvLCB5b3UgY2FuIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1hPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi0tYXBwZW5kPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgb3B0aW9uIHdpdGggdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICBjb21tYW5kLgotICAgICAgICAgICAgICAgICBUaGVzZSBvcHRpb25zIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoZSBsYXllciBpbnRvIHdoaWNoIHRvCi0gICAgICAgICAgICAgICAgIHdyaXRlIGFuIGFwcGVuZCBmaWxlOgotICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCB1cGRhdGUtcmVjaXBlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiAtYSA8cmVwbGFjZWFibGU+YmFzZS1sYXllci1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaXMgY3JlYXRlZCBhdCB0aGUKLSAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgcGF0aCB3aXRoaW4gdGhlIHNwZWNpZmllZCBsYXllciBkaXJlY3RvcnksIHdoaWNoCi0gICAgICAgICAgICAgICAgIG1heSBvciBtYXkgbm90IGJlIGluIHlvdXIgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICBmaWxlLgotICAgICAgICAgICAgICAgICBJZiBhbiBhcHBlbmQgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlIGNvbW1hbmQgdXBkYXRlcyBpdAotICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5LgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtdXBncmFkaW5nLWEtcmVjaXBlJz4KLSAgICAgICAgICAgIDx0aXRsZT5VcGdyYWRpbmcgYSBSZWNpcGU8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZ3JhZGU8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgdG8gdXBncmFkZSBhbiBleGlzdGluZyByZWNpcGUgdG8gYSBuZXcgdXBzdHJlYW0gdmVyc2lvbi4KLSAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBwdXRzIHRoZSB1cGdyYWRlZCByZWNpcGUgZmlsZSBpbnRvIHRoZQotICAgICAgICAgICAgICAgIHdvcmtzcGFjZSBhbG9uZyB3aXRoIGFueSBhc3NvY2lhdGVkIGZpbGVzLCBhbmQgZXh0cmFjdHMKLSAgICAgICAgICAgICAgICB0aGUgc291cmNlIHRyZWUgdG8gYSBzcGVjaWZpZWQgbG9jYXRpb24gc2hvdWxkIHBhdGNoZXMKLSAgICAgICAgICAgICAgICBuZWVkIHJlYmFzZWQgb3IgYWRkZWQgdG8gYXMgYSByZXN1bHQgb2YgdGhlIHVwZ3JhZGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+IGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgeW91IG11c3Qgc3VwcGx5IHRoZSByb290IG5hbWUgb2YgdGhlIHJlY2lwZSAoaS5lLiBubyB2ZXJzaW9uLAotICAgICAgICAgICAgICAgIHBhdGhzLCBvciBleHRlbnNpb25zKSwgYW5kIHlvdSBtdXN0IHN1cHBseSB0aGUgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgdG8gd2hpY2ggeW91IHdhbnQgdGhlIHNvdXJjZSBleHRyYWN0ZWQuCi0gICAgICAgICAgICAgICAgQWRkaXRpb25hbCBjb21tYW5kIG9wdGlvbnMgbGV0IHlvdSBjb250cm9sIHRoaW5ncyBzdWNoIGFzCi0gICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gbnVtYmVyIHRvIHdoaWNoIHlvdSB3YW50IHRvIHVwZ3JhZGUgKGkuZS4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+KSwKLSAgICAgICAgICAgICAgICB0aGUgc291cmNlIHJldmlzaW9uIHRvIHdoaWNoIHlvdSB3YW50IHRvIHVwZ3JhZGUgKGkuZS4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC91bGluaz4sCi0gICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdG8gYXBwbHkgcGF0Y2hlcywgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtcmVzZXR0aW5nLWEtcmVjaXBlJz4KLSAgICAgICAgICAgIDx0aXRsZT5SZXNldHRpbmcgYSBSZWNpcGU8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCB0byByZW1vdmUgYQotICAgICAgICAgICAgICAgIHJlY2lwZSBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gKGUuZy4gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSkgZnJvbSB0aGUgd29ya3NwYWNlIGxheWVyLgotICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCB0aGlzIGNvbW1hbmQgZGVsZXRlcyB0aGUgcmVjaXBlIGFuZCB0aGUKLSAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZS4KLSAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBkb2VzIG5vdCBwaHlzaWNhbGx5IG1vdmUgdGhlbSBmb3IgeW91LgotICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgYmUgc3VyZSB0byBwaHlzaWNhbGx5IHJlbG9jYXRlIHlvdXIKLSAgICAgICAgICAgICAgICB1cGRhdGVkIHJlY2lwZSBhbmQgdGhlIGFwcGVuZCBmaWxlIG91dHNpZGUgb2YgdGhlIHdvcmtzcGFjZQotICAgICAgICAgICAgICAgIGxheWVyIGJlZm9yZSBydW5uaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY29tbWFuZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCBkZXRlY3RzIHRoYXQKLSAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIG9yIHRoZSBhcHBlbmQgZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLCB0aGUKLSAgICAgICAgICAgICAgICBjb21tYW5kIHByZXNlcnZlcyB0aGUgbW9kaWZpZWQgZmlsZXMgaW4gYSBzZXBhcmF0ZSAiYXR0aWMiCi0gICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHJlc2V0cyB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSB0aGF0Ci0gICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIDxmaWxlbmFtZT5tdHI8L2ZpbGVuYW1lPiByZWNpcGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgcmVzZXQgbXRyCi0gICAgIE5PVEU6IENsZWFuaW5nIHN5c3Jvb3QgZm9yIHJlY2lwZSBtdHIuLi4KLSAgICAgTk9URTogTGVhdmluZyBzb3VyY2UgdHJlZSAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3dvcmtzcGFjZS9zb3VyY2VzL210ciBhcy1pczsgaWYgeW91IG5vCi0gICAgICAgIGxvbmdlciBuZWVkIGl0IHRoZW4gcGxlYXNlIGRlbGV0ZSBpdCBtYW51YWxseQotICAgICAkCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtYnVpbGRpbmcteW91ci1yZWNpcGUnPgotICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIFlvdXIgUmVjaXBlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY2F1c2UgdGhlCi0gICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB5b3VyIHJlY2lwZS4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kLAotICAgICAgICAgICAgICAgIHlvdSBtdXN0IHN1cHBseSB0aGUgcm9vdCBuYW1lIG9mIHRoZSByZWNpcGUgKGkuZS4gbm8gdmVyc2lvbiwKLSAgICAgICAgICAgICAgICBwYXRocywgb3IgZXh0ZW5zaW9ucykuCi0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgZWl0aGVyIHRoZSAiLXMiIG9yIHRoZSAiLS1kaXNhYmxlLXBhcmFsbGVsLW1ha2UiCi0gICAgICAgICAgICAgICAgb3B0aW9uIHRvIGRpc2FibGUgcGFyYWxsZWwgbWFrZXMgZHVyaW5nIHRoZSBidWlsZC4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgYnVpbGQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtYnVpbGRpbmcteW91ci1pbWFnZSc+Ci0gICAgICAgICAgICA8dGl0bGU+QnVpbGRpbmcgWW91ciBJbWFnZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQtaW1hZ2U8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgdG8gYnVpbGQgYW4gaW1hZ2UsIGV4dGVuZGluZyBpdCB0byBpbmNsdWRlIHBhY2thZ2VzIGZyb20KLSAgICAgICAgICAgICAgICByZWNpcGVzIGluIHRoZSB3b3Jrc3BhY2UuCi0gICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBjb21tYW5kIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IGFuIGltYWdlIHRoYXQKLSAgICAgICAgICAgICAgICByZWFkeSBmb3IgaW1tZWRpYXRlIGRlcGxveW1lbnQgb250byBhIGRldmljZSBmb3IgdGVzdGluZy4KLSAgICAgICAgICAgICAgICBGb3IgcHJvcGVyIGludGVncmF0aW9uIGludG8gYSBmaW5hbCBpbWFnZSwgeW91IG5lZWQgdG8KLSAgICAgICAgICAgICAgICBlZGl0IHlvdXIgY3VzdG9tIGltYWdlIHJlY2lwZSBhcHByb3ByaWF0ZWx5LgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkLWltYWdlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjb21tYW5kLCB5b3UgbXVzdCBzdXBwbHkgdGhlIG5hbWUgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBoYXMgbm8gY29tbWFuZCBsaW5lIG9wdGlvbnM6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgYnVpbGQtaW1hZ2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1kZXBsb3lpbmcteW91ci1zb2Z0d2FyZS1vbi10aGUtdGFyZ2V0LW1hY2hpbmUnPgotICAgICAgICAgICAgPHRpdGxlPkRlcGxveWluZyBZb3VyIFNvZnR3YXJlIG9uIHRoZSBUYXJnZXQgTWFjaGluZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KLSAgICAgICAgICAgICAgICBkZXBsb3kgdGhlIHJlY2lwZSdzIGJ1aWxkIG91dHB1dCB0byB0aGUgbGl2ZSB0YXJnZXQgbWFjaGluZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGlzIHRoZSBhZGRyZXNzIG9mIHRoZQotICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lLCB3aGljaCBtdXN0IGJlIHJ1bm5pbmcgYW4gU1NIIHNlcnZlciAoaS5lLgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51c2VyQGhvc3RuYW1lWzpkZXN0ZGlyXTwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGRlcGxveXMgYWxsIGZpbGVzIGluc3RhbGxlZCBkdXJpbmcgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgIHRhc2suCi0gICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHlvdSBkbyBub3QgbmVlZCB0byBoYXZlIHBhY2thZ2UgbWFuYWdlbWVudCBlbmFibGVkCi0gICAgICAgICAgICAgICAgd2l0aGluIHRoZSB0YXJnZXQgbWFjaGluZS4KLSAgICAgICAgICAgICAgICBJZiB5b3UgZG8sIHRoZSBwYWNrYWdlIG1hbmFnZXIgaXMgYnlwYXNzZWQuCi0gICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBpcyBmb3IgZGV2ZWxvcG1lbnQgb25seS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbmV2ZXIgdXNlIGl0IHRvIHVwZGF0ZSBhbiBpbWFnZSB0aGF0IHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gcHJvZHVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXJlbW92aW5nLXlvdXItc29mdHdhcmUtZnJvbS10aGUtdGFyZ2V0LW1hY2hpbmUnPgotICAgICAgICAgICAgPHRpdGxlPlJlbW92aW5nIFlvdXIgU29mdHdhcmUgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmU8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KLSAgICAgICAgICAgICAgICByZW1vdmUgZGVwbG95ZWQgYnVpbGQgb3V0cHV0IGZyb20gdGhlIHRhcmdldCBtYWNoaW5lLgotICAgICAgICAgICAgICAgIEZvciB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZCB0bwotICAgICAgICAgICAgICAgIHdvcmssIHlvdSBtdXN0IGhhdmUgcHJldmlvdXNseSB1c2VkIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtZGVwbG95aW5nLXlvdXItc29mdHdhcmUtb24tdGhlLXRhcmdldC1tYWNoaW5lJz48ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgY29tbWFuZC4KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCB1bmRlcGxveS10YXJnZXQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCi0gICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUsIHdoaWNoIG11c3QgYmUgcnVubmluZyBhbiBTU0ggc2VydmVyIChpLmUuCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJAaG9zdG5hbWU8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1jcmVhdGluZy10aGUtd29ya3NwYWNlJz4KLSAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgV29ya3NwYWNlIExheWVyIGluIGFuIEFsdGVybmF0aXZlIExvY2F0aW9uPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlPC9maWxlbmFtZT4gY29tbWFuZCB0bwotICAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgaW4geW91cgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KLSAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBuZXcgd29ya3NwYWNlIGxheWVyLCBpdCBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb25seS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGNyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheWVyIGluIHlvdXIKLSAgICAgICAgICAgICAgICBjdXJyZW50IHdvcmtpbmcgYW5kIGJ5IGRlZmF1bHQgbmFtZXMgdGhlIHdvcmtzcGFjZSBsYXllcgotICAgICAgICAgICAgICAgICJ3b3Jrc3BhY2UiOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgd29ya3NwYWNlIGxheWVyIGFueXdoZXJlIGJ5IHN1cHBseWluZwotICAgICAgICAgICAgICAgIGEgcGF0aG5hbWUgd2l0aCB0aGUgY29tbWFuZC4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgbmFtZWQKLSAgICAgICAgICAgICAgICAibmV3LXdvcmtzcGFjZSI6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAvaG9tZS9zY290dHJpZi9uZXctd29ya3NwYWNlCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZ2V0LXRoZS1zdGF0dXMtb2YtdGhlLXJlY2lwZXMtaW4teW91ci13b3Jrc3BhY2UnPgotICAgICAgICAgICAgPHRpdGxlPkdldCB0aGUgU3RhdHVzIG9mIHRoZSBSZWNpcGVzIGluIFlvdXIgV29ya3NwYWNlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzdGF0dXM8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCi0gICAgICAgICAgICAgICAgbGlzdCB0aGUgcmVjaXBlcyBjdXJyZW50bHkgaW4geW91ciB3b3Jrc3BhY2UuCi0gICAgICAgICAgICAgICAgSW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIHBhdGhzIHRvIHRoZWlyIHJlc3BlY3RpdmUKLSAgICAgICAgICAgICAgICBleHRlcm5hbCBzb3VyY2UgdHJlZXMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzdGF0dXM8L2ZpbGVuYW1lPiBjb21tYW5kIGhhcyBubwotICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb25zOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZGV2dG9vbCBzdGF0dXMKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHNhbXBsZSBvdXRwdXQgYWZ0ZXIgdXNpbmcKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+PGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdG8gY3JlYXRlIGFuZCBhZGQgdGhlIDxmaWxlbmFtZT5tdHJfMC44Ni5iYjwvZmlsZW5hbWU+IHJlY2lwZQotICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+d29ya3NwYWNlPC9maWxlbmFtZT4gZGlyZWN0b3J5OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIHN0YXR1cwotICAgICBtdHI6IC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvd29ya3NwYWNlL3NvdXJjZXMvbXRyICgvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3dvcmtzcGFjZS9yZWNpcGVzL210ci9tdHJfMC44Ni5iYikKLSAgICAgJAotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXNlYXJjaC1mb3ItYXZhaWxhYmxlLXRhcmdldC1yZWNpcGVzJz4KLSAgICAgICAgICAgIDx0aXRsZT5TZWFyY2ggZm9yIEF2YWlsYWJsZSBUYXJnZXQgUmVjaXBlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgc2VhcmNoPC9maWxlbmFtZT4gY29tbWFuZCB0bwotICAgICAgICAgICAgICAgIHNlYXJjaCBmb3IgYXZhaWxhYmxlIHRhcmdldCByZWNpcGVzLgotICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIG1hdGNoZXMgdGhlIHJlY2lwZSBuYW1lLCBwYWNrYWdlIG5hbWUsCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sIGFuZCBpbnN0YWxsZWQgZmlsZXMuCi0gICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgZGlzcGxheXMgdGhlIHJlY2lwZSBuYW1lIGFzIGEgcmVzdWx0IG9mIGEKLSAgICAgICAgICAgICAgICBtYXRjaC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzZWFyY2g8L2ZpbGVuYW1lPiBjb21tYW5kLAotICAgICAgICAgICAgICAgIHlvdSBtdXN0IHN1cHBseSBhIDxyZXBsYWNlYWJsZT5rZXl3b3JkPC9yZXBsYWNlYWJsZT4uCi0gICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgdXNlcyB0aGUgPHJlcGxhY2VhYmxlPmtleXdvcmQ8L3JlcGxhY2VhYmxlPiB3aGVuCi0gICAgICAgICAgICAgICAgc2VhcmNoaW5nIGZvciBhIG1hdGNoLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCiAgICAgPHNlY3Rpb24gaWQ9InVzaW5nLWEtcXVpbHQtd29ya2Zsb3ciPgogICAgICAgICA8dGl0bGU+VXNpbmcgUXVpbHQgaW4gWW91ciBXb3JrZmxvdzwvdGl0bGU+CiAKQEAgLTIxOTIsNCArMTU5Myw2MiBAQAogICAgIDwvbm90ZT4KIDwvc2VjdGlvbj4KIAorPHNlY3Rpb24gaWQ9InBsYXRkZXYtYXBwZGV2LWRldnB5c2hlbGwiPgorICAgIDx0aXRsZT5Vc2luZyBhIERldmVsb3BtZW50IFB5dGhvbiBTaGVsbDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU2ltaWxhciB0byB3b3JraW5nIHdpdGhpbiBhIGRldmVsb3BtZW50IHNoZWxsIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICB0aGUgcHJldmlvdXMgc2VjdGlvbiwgeW91IGNhbiBhbHNvIHNwYXduIGFuZCB3b3JrIHdpdGhpbiBhbgorICAgICAgICBpbnRlcmFjdGl2ZSBQeXRob24gZGV2ZWxvcG1lbnQgc2hlbGwuCisgICAgICAgIFdoZW4gZGVidWdnaW5nIGNlcnRhaW4gY29tbWFuZHMgb3IgZXZlbiB3aGVuIGp1c3QgZWRpdGluZyBwYWNrYWdlcywKKyAgICAgICAgPGZpbGVuYW1lPmRldnB5c2hlbGw8L2ZpbGVuYW1lPiBjYW4gYmUgYSB1c2VmdWwgdG9vbC4KKyAgICAgICAgV2hlbiB5b3UgaW52b2tlIDxmaWxlbmFtZT5kZXZweXNoZWxsPC9maWxlbmFtZT4sIGFsbCB0YXNrcyB1cCB0byBhbmQKKyAgICAgICAgaW5jbHVkaW5nCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICBhcmUgcnVuIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldC4KKyAgICAgICAgVGhlbiBhIG5ldyB0ZXJtaW5hbCBpcyBvcGVuZWQuCisgICAgICAgIEFkZGl0aW9uYWxseSwga2V5IFB5dGhvbiBvYmplY3RzIGFuZCBjb2RlIGFyZSBhdmFpbGFibGUgaW4gdGhlIHNhbWUKKyAgICAgICAgd2F5IHRoZXkgYXJlIHRvIEJpdEJha2UgdGFza3MsIGluIHBhcnRpY3VsYXIsIHRoZSBkYXRhIHN0b3JlICdkJy4KKyAgICAgICAgU28sIGNvbW1hbmRzIHN1Y2ggYXMgdGhlIGZvbGxvd2luZyBhcmUgdXNlZnVsIHdoZW4gZXhwbG9yaW5nIHRoZSBkYXRhCisgICAgICAgIHN0b3JlIGFuZCBydW5uaW5nIGZ1bmN0aW9uczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweWRldnNoZWxsPiBkLmdldFZhcigiU1RBR0lOR19ESVIiLCBUcnVlKQorICAgICAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cycKKyAgICAgcHlkZXZzaGVsbD4gZC5nZXRWYXIoIlNUQUdJTkdfRElSIiwgRmFsc2UpCisgICAgICcke1RNUERJUn0vc3lzcm9vdHMnCisgICAgIHB5ZGV2c2hlbGw+IGQuc2V0VmFyKCJGT08iLCAiYmFyIikKKyAgICAgcHlkZXZzaGVsbD4gZC5nZXRWYXIoIkZPTyIsIFRydWUpCisgICAgICdiYXInCisgICAgIHB5ZGV2c2hlbGw+IGQuZGVsVmFyKCJGT08iKQorICAgICBweWRldnNoZWxsPiBkLmdldFZhcigiRk9PIiwgVHJ1ZSkKKyAgICAgcHlkZXZzaGVsbD4gYmIuYnVpbGQuZXhlY19mdW5jKCJkb191bnBhY2siLCBkKQorICAgICBweWRldnNoZWxsPgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFRoZSBjb21tYW5kcyBleGVjdXRlIGp1c3QgYXMgaWYgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2VyZSBleGVjdXRpbmcgdGhlbS4KKyAgICAgICAgQ29uc2VxdWVudGx5LCB3b3JraW5nIHRoaXMgd2F5IGNhbiBiZSBoZWxwZnVsIHdoZW4gZGVidWdnaW5nIGEgYnVpbGQgb3IgcHJlcGFyaW5nCisgICAgICAgIHNvZnR3YXJlIHRvIGJlIHVzZWQgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIDxmaWxlbmFtZT5kZXZweXNoZWxsPC9maWxlbmFtZT4gb24gYSB0YXJnZXQgbmFtZWQKKyAgICAgICAgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3A8L2ZpbGVuYW1lPjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBkZXZweXNoZWxsCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjb21tYW5kIHNwYXducyBhIHRlcm1pbmFsIGFuZCBwbGFjZXMgeW91IGluIGFuIGludGVyYWN0aXZlCisgICAgICAgIFB5dGhvbiBpbnRlcnByZXRlciB3aXRoaW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PRV9URVJNSU5BTCc+PGZpbGVuYW1lPk9FX1RFUk1JTkFMPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSBjb250cm9scyB3aGF0IHR5cGUgb2Ygc2hlbGwgaXMgb3BlbmVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQgdXNpbmcgPGZpbGVuYW1lPmRldnB5c2hlbGw8L2ZpbGVuYW1lPiwgeW91CisgICAgICAgIGNhbiBleGl0IHRoZSBzaGVsbCBlaXRoZXIgYnkgdXNpbmcgQ3RybCtkIG9yIGNsb3NpbmcgdGhlIHRlcm1pbmFsCisgICAgICAgIHdpbmRvdy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKIDwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwueG1sCmluZGV4IDc5MWE4Y2IuLjAwMTJhYWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLnhtbApAQCAtODYsNiArODYsMTEgQEAKICAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE2PC9kYXRlPgogICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTY8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgPC9yZXZoaXN0b3J5PgogCiAgICAgPGNvcHlyaWdodD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLWFkZC1mbG93LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLWFkZC1mbG93LnBuZwppbmRleCBjMDllNjBlLi45ODVhYzMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC1hZGQtZmxvdy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2RldnRvb2wtYWRkLWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLW1vZGlmeS1mbG93LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLW1vZGlmeS1mbG93LnBuZwppbmRleCBjZDdmNGQwLi5mZDY4NGZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC1tb2RpZnktZmxvdy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2RldnRvb2wtbW9kaWZ5LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nCmluZGV4IGQyNTE2OGMuLjY1NDc0ZGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2RldnRvb2wtdXBncmFkZS1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29tbW9uLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCmluZGV4IDI2MTQ3MWMuLmE5YWFmZDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCkBAIC0zODQsOSArMzg0LDEwIEBACiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzCi0gICAgICAgICAgICAgICAgbG9jYXRlZCBpbgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gdW5kZXIgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+fS1idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZSBidWlsZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCBleHBhbmRzIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPjxmaWxlbmFtZT4vbGludXgtPC9maWxlbmFtZT48ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0FSQ0gnPjxmaWxlbmFtZT5QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0tJHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+PGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LWJ1aWxkPC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGVudGlyZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYXMgdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYXMgZGVzY3JpYmVkIGluIHRoZQogICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L2xpbms+IiBzZWN0aW9uLgpAQCAtMzk0LDYgKzM5NSwxNiBAQAogICAgICAgICAgICAgICAgIHNlZSB0aGUKICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctbWVudWNvbmZpZyc+VXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+IgogICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRldGVybWluZSB3aGF0IGEgdmFyaWFibGUgZXhwYW5kcyB0byBieSBsb29raW5nCisgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBvdXRwdXQgb2YgdGhlIDxmaWxlbmFtZT5iaXRiYWtlIC1lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUgdmlydHVhbC9rZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZWFyY2ggdGhlIG91dHB1dCBmb3IgdGhlIHZhcmlhYmxlIGluIHdoaWNoIHlvdSBhcmUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RlZCB0byBzZWUgZXhhY3RseSBob3cgaXQgaXMgZXhwYW5kZWQgYW5kIHVzZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KQEAgLTUxMiw4ICs1MjMsMTQgQEAKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgVGFraW5nIHRoaXMgc3RlcCBlbnN1cmVzIHlvdSBoYXZlIHRoZSBzb3VyY2VzIHByZXBhcmVkCiAgICAgICAgICAgICAgICAgYW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbXBsZXRlZC4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0vbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBzb3VyY2VzIGluIHRoZSBidWlsZCBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zb3VyY2UvPC9maWxlbmFtZT4gZGlyZWN0b3J5LCB3aGljaCBpcyBhIHN5bWxpbmsKKyAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS9zb3VyY2U8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zb3VyY2UvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGV4cGFuZHMgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+PGZpbGVuYW1lPi9saW51eC08L2ZpbGVuYW1lPjxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS0kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0tYnVpbGQvc291cmNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zb3VyY2UvPC9maWxlbmFtZT4gc3ltbGluayBpcyBhbHNvIGtub3duIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1RBR0lOR19LRVJORUxfRElSJz48ZmlsZW5hbWU+U1RBR0lOR19LRVJORUxfRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi54bWwKaW5kZXggZmIxMWRkMS4uMTI4MjhkMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sCkBAIC03MSw2ICs3MSwxMSBAQAogICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTY8L2RhdGU+CiAgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICA8L3Jldmhpc3Rvcnk+CiAKICAgICA8Y29weXJpZ2h0PgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGstZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGstZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NDc0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1tYW51YWwueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1tYW51YWwueG1sCmluZGV4IDE1NGUzNjkuLmMxNmU5MjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC54bWwKQEAgLTU1LDYgKzU1LDExIEBACiAgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNjwvZGF0ZT4KICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE2PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgPC9yZXZoaXN0b3J5PgogCiAgICAgPGNvcHlyaWdodD4KQEAgLTExMSwxMyArMTE2LDE3IEBACiAgICAgPHhpOmluY2x1ZGUKICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Nkay1tYW51YWwvc2RrLWludHJvLnhtbCIvPgogICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9zZGstbWFudWFsL3Nkay1leHRlbnNpYmxlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCiAgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9zZGstbWFudWFsL3Nkay11c2luZy54bWwiLz4KICAgICA8eGk6aW5jbHVkZQotICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vc2RrLW1hbnVhbC9zZGstZXh0ZW5zaWJsZS54bWwiLz4KKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Nkay1tYW51YWwvc2RrLXdvcmtpbmctcHJvamVjdHMueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUKICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LW9idGFpbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZQogICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtY3VzdG9taXppbmcueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LW1hcnMueG1sIi8+CiAKIDwhLS0gSW5jbHVkZXMgYnNwLWd1aWRlIHRpdGxlIGltYWdlIGFuZCB0aGVuIGJzcC1ndWlkZSBjaGFwdGVycyAtLT4KIApAQCAtMTkxLDYgKzIwMCw5IEBACiAgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwiLz4KIAogICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1kZXZ0b29sLXJlZmVyZW5jZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCiAgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sIi8+CiAKICAgICA8eGk6aW5jbHVkZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcG9reS5lbnQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudAppbmRleCA2NzNhYjIzLi5iMzZjMjM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudApAQCAtMSwxMCArMSwxMCBAQAotPCFFTlRJVFkgRElTVFJPICIyLjEiPgotPCFFTlRJVFkgRElTVFJPX0NPTVBSRVNTRUQgIjIxIj4KLTwhRU5USVRZIERJU1RST19OQU1FX05PX0NBUCAia3JvZ290aCI+Ci08IUVOVElUWSBESVNUUk9fTkFNRSAiS3JvZ290aCI+Ci08IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMi4xIj4KLTwhRU5USVRZIFBPS1lWRVJTSU9OICIxNS4wLjAiPgotPCFFTlRJVFkgUE9LWVZFUlNJT05fQ09NUFJFU1NFRCAiMTUwMCI+Cis8IUVOVElUWSBESVNUUk8gIjIuMiI+Cis8IUVOVElUWSBESVNUUk9fQ09NUFJFU1NFRCAiMjIiPgorPCFFTlRJVFkgRElTVFJPX05BTUVfTk9fQ0FQICJtb3J0eSI+Cis8IUVOVElUWSBESVNUUk9fTkFNRSAiTW9ydHkiPgorPCFFTlRJVFkgWU9DVE9fRE9DX1ZFUlNJT04gIjIuMiI+Cis8IUVOVElUWSBQT0tZVkVSU0lPTiAiMTcuMC4wIj4KKzwhRU5USVRZIFBPS1lWRVJTSU9OX0NPTVBSRVNTRUQgIjE3MDAiPgogPCFFTlRJVFkgWU9DVE9fUE9LWSAicG9reS0mRElTVFJPX05BTUVfTk9fQ0FQOy0mUE9LWVZFUlNJT047Ij4KIDwhRU5USVRZIENPUFlSSUdIVF9ZRUFSICIyMDEwLTIwMTYiPgogPCFFTlRJVFkgWU9DVE9fRExfVVJMICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmciPgpAQCAtNjIsNyArNjIsNyBAQAogPCFFTlRJVFkgT0VfSU5JVF9GSUxFICJvZS1pbml0LWJ1aWxkLWVudiI+CiA8IUVOVElUWSBVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgd2dldCBnaXQtY29yZSBkaWZmc3RhdCB1bnppcCB0ZXhpbmZvIGdjYy1tdWx0aWxpYiBcCiAgICAgIGJ1aWxkLWVzc2VudGlhbCBjaHJwYXRoIHNvY2F0Ij4KLTwhRU5USVRZIEZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayBtYWtlIHdnZXQgdGFyIGJ6aXAyIGd6aXAgcHl0aG9uIHVuemlwIHBlcmwgcGF0Y2ggXAorPCFFTlRJVFkgRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIG1ha2Ugd2dldCB0YXIgYnppcDIgZ3ppcCBweXRob24zIHVuemlwIHBlcmwgcGF0Y2ggXAogICAgICBkaWZmdXRpbHMgZGlmZnN0YXQgZ2l0IGNwcCBnY2MgZ2NjLWMrKyBnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggXAogICAgICBjY2FjaGUgcGVybC1EYXRhLUR1bXBlciBwZXJsLVRleHQtUGFyc2VXb3JkcyBwZXJsLVRocmVhZC1RdWV1ZSBwZXJsLWJpZ251bSBzb2NhdCBcCiAgICAgIGZpbmR1dGlscyB3aGljaCI+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1pbnRyby54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1pbnRyby54bWwKaW5kZXggY2M0N2Y1Mi4uZDM4ZDYxYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtaW50cm8ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApAQCAtNjcsOCArNjcsMTAgQEAKICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgWW9jdG8gYnVpbGQgc3lzdGVtIHN0cmlwcyBzeW1ib2xzIGZyb20gdGhlCiAgICAgICAgICAgICAgICAgYmluYXJpZXMgaXQgcGFja2FnZXMsIHdoaWNoIG1ha2VzIGl0IGRpZmZpY3VsdCB0byB1c2Ugc29tZQogICAgICAgICAgICAgICAgIG9mIHRoZSB0b29scy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PHBhcmE+WW91IGNhbiBwcmV2ZW50IHRoYXQgYnkgcHV0dGluZyB0aGUgZm9sbG93aW5nCi0gICAgICAgICAgICAgICAgaW4geW91ciBsb2NhbC5jb25mIHdoZW4geW91IGJ1aWxkIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICA8L3BhcmE+PHBhcmE+WW91IGNhbiBwcmV2ZW50IHRoYXQgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5ISUJJVF9QQUNLQUdFX1NUUklQJz48ZmlsZW5hbWU+SU5ISUJJVF9QQUNLQUdFX1NUUklQPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2U6CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sCmluZGV4IDMxMGU4ZjAuLmMwODczZTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC11c2FnZS54bWwKQEAgLTYwLDggKzYwLDExIEBACiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB5b3UnbGwgZ2V0IHRoZSBtb3N0IG1pbGVhZ2Ugb3V0IG9mIHBlcmYgaWYgeW91Ci0gICAgICAgICAgICBwcm9maWxlIGFuIGltYWdlIGJ1aWx0IHdpdGggSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiIGluIHlvdXIKLSAgICAgICAgICAgIGxvY2FsLmNvbmYuCisgICAgICAgICAgICBwcm9maWxlIGFuIGltYWdlIGJ1aWx0IHdpdGggdGhlIGZvbGxvd2luZyBpbiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTkhJQklUX1BBQ0tBR0VfU1RSSVAnPklOSElCSVRfUEFDS0FHRV9TVFJJUDwvdWxpbms+ID0gIjEiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KQEAgLTM1NSwxMCArMzU4LDEwIEBACiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIE9uZSB3YXkgYXJvdW5kIHRoYXQgaXMgdG8gcHV0IHRoZSBmb2xsb3dpbmcgaW4geW91ciBsb2NhbC5jb25mCi0gICAgICAgICAgICAgICAgd2hlbiB5b3UgYnVpbGQgdGhlIGltYWdlOgorICAgICAgICAgICAgICAgIE9uZSB3YXkgYXJvdW5kIHRoYXQgaXMgdG8gcHV0IHRoZSBmb2xsb3dpbmcgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2U6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOSElCSVRfUEFDS0FHRV9TVFJJUCc+SU5ISUJJVF9QQUNLQUdFX1NUUklQPC91bGluaz4gPSAiMSIKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgSG93ZXZlciwgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlIHdpdGggdGhlIGJpbmFyaWVzIHN0cmlwcGVkLAogICAgICAgICAgICAgICAgIHNvIHdoYXQgY2FuIHdlIGRvIHRvIGdldCBwZXJmIHRvIHJlc29sdmUgdGhlIHN5bWJvbHM/IEJhc2ljYWxseQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwueG1sCmluZGV4IDFlMGNjYzEuLjQ3MTc5MDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC54bWwKQEAgLTcxLDYgKzcxLDExIEBACiAgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNjwvZGF0ZT4KICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE2PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgIDwvcmV2aGlzdG9yeT4KIAogICAgIDxjb3B5cmlnaHQ+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2Nsb3Nlci1sb29rLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sCmluZGV4IDg0ZmY1ODQuLmI3M2U1OWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sCkBAIC04ODgsNyArODg4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYnkgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJR19DT05GQVJHUyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUdfQ09ORkFSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSB3b3JrcyB3aXRoaW4KICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2xhc3MsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgpAQCAtMTIwOSw2ICsxMjExLDE5OSBAQAogICAgICAgICAgICAgICAgIHdoaWNoIGluY2x1ZGVzIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc3RhbXAtZmlsZXMtYW5kLXRoZS1yZXJ1bm5pbmctb2YtdGFza3MnPgorICAgICAgICAgICAgPHRpdGxlPlN0YW1wIEZpbGVzIGFuZCB0aGUgUmVydW5uaW5nIG9mIFRhc2tzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGVhY2ggdGFzayB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIEJpdEJha2Ugd3JpdGVzIGEKKyAgICAgICAgICAgICAgICBzdGFtcCBmaWxlIGludG8gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QU19ESVInPjxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0YW1wIGZpbGUncyBmaWxlbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUgZW5kIG9mIHRoZSBuYW1lIGNvbnNpc3RzIG9mIHRoZSB0YXNrJ3MgbmFtZQorICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNjaGVja3N1bXMnPmlucHV0IGNoZWNrc3VtPC91bGluaz4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmFtaW5nIHNjaGVtZSBhc3N1bWVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXItQkJfU0lHTkFUVVJFX0hBTkRMRVInPjxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgIk9FQmFzaWNIYXNoIiwgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZSBpbgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50IE9wZW5FbWJlZGRlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVG8gZGV0ZXJtaW5lIGlmIGEgdGFzayBuZWVkcyB0byBiZSByZXJ1biwgQml0QmFrZSBjaGVja3MgaWYgYQorICAgICAgICAgICAgICAgIHN0YW1wIGZpbGUgd2l0aCBhIG1hdGNoaW5nIGlucHV0IGNoZWNrc3VtIGV4aXN0cyBmb3IgdGhlIHRhc2suCisgICAgICAgICAgICAgICAgSWYgc3VjaCBhIHN0YW1wIGZpbGUgZXhpc3RzLCB0aGUgdGFzaydzIG91dHB1dCBpcyBhc3N1bWVkIHRvCisgICAgICAgICAgICAgICAgZXhpc3QgYW5kIHN0aWxsIGJlIHZhbGlkLgorICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdGFzayBpcyByZXJ1bi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHN0YW1wIG1lY2hhbmlzbSBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgIHN0YXRlIChzc3RhdGUpIGNhY2hlIG1lY2hhbmlzbSBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXRzY2VuZS10YXNrcy1hbmQtc2hhcmVkLXN0YXRlJz5TZXRzY2VuZSBUYXNrcyBhbmQgU2hhcmVkIFN0YXRlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhdm9pZHMgcmVydW5uaW5nIGFueSB0YXNrIHRoYXQgaGFzIGEgdmFsaWQKKyAgICAgICAgICAgICAgICAgICAgc3RhbXAgZmlsZSwgbm90IGp1c3QgdGFza3MgdGhhdCBjYW4gYmUgYWNjZWxlcmF0ZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICB0aGUgc3N0YXRlIGNhY2hlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SG93ZXZlciwgeW91IHNob3VsZCByZWFsaXplIHRoYXQgc3RhbXAgZmlsZXMgb25seQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZSBhcyBhIG1hcmtlciB0aGF0IHNvbWUgd29yayBoYXMgYmVlbiBkb25lIGFuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZXNlIGZpbGVzIGRvIG5vdCByZWNvcmQgdGFzayBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgdGFzayBvdXRwdXQgd291bGQgdXN1YWxseSBiZSBzb21ld2hlcmUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoZS5nLiBpbiBzb21lIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPi4pCisgICAgICAgICAgICAgICAgICAgIFdoYXQgdGhlIHNzdGF0ZSBjYWNoZSBtZWNoYW5pc20gYWRkcyBpcyBhIHdheSB0byBjYWNoZSB0YXNrCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCB0aGF0IGNhbiB0aGVuIGJlIHNoYXJlZCBiZXR3ZWVuIGJ1aWxkIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIFNpbmNlIDxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT4gaXMgdXN1YWxseSBhIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiwgcmVtb3ZpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gd2lsbCBhbHNvIHJlbW92ZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT4sIHdoaWNoIG1lYW5zIHRhc2tzIHdpbGwKKyAgICAgICAgICAgICAgICBwcm9wZXJseSBiZSByZXJ1biB0byByZXBvcHVsYXRlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgc29tZSB0YXNrIHRvIGFsd2F5cyBiZSBjb25zaWRlcmVkICJvdXQgb2YgZGF0ZSIsCisgICAgICAgICAgICAgICAgeW91IGNhbiBtYXJrIGl0IHdpdGggdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXJpYWJsZS1mbGFncyc+PGZpbGVuYW1lPm5vc3RhbXA8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyZmxhZy4KKyAgICAgICAgICAgICAgICBJZiBzb21lIG90aGVyIHRhc2sgZGVwZW5kcyBvbiBzdWNoIGEgdGFzaywgdGhlbiB0aGF0IHRhc2sgd2lsbAorICAgICAgICAgICAgICAgIGFsc28gYWx3YXlzIGJlIGNvbnNpZGVyZWQgb3V0IG9mIGRhdGUsIHdoaWNoIG1pZ2h0IG5vdCBiZSB3aGF0CisgICAgICAgICAgICAgICAgeW91IHdhbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIGhvdyB0byB2aWV3IGluZm9ybWF0aW9uIGFib3V0IGEgdGFzaydzCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS12aWV3aW5nLXRhc2stdmFyaWFibGUtZGVwZW5kZW5jaWVzJz5WaWV3aW5nIFRhc2sgVmFyaWFibGUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHNjZW5lLXRhc2tzLWFuZC1zaGFyZWQtc3RhdGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHNjZW5lIFRhc2tzIGFuZCBTaGFyZWQgU3RhdGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gb2YgdGFza3Mgc28gZmFyIGFzc3VtZXMgdGhhdCBCaXRCYWtlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgYnVpbGQgZXZlcnl0aGluZyBhbmQgdGhlcmUgYXJlIG5vIHByZWJ1aWx0IG9iamVjdHMgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBzdXBwb3J0IHNraXBwaW5nIHRhc2tzIGlmIHByZWJ1aWx0IG9iamVjdHMgYXJlCisgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIFRoZXNlIG9iamVjdHMgYXJlIHVzdWFsbHkgbWFkZSBhdmFpbGFibGUgaW4gdGhlIGZvcm0gb2YgYQorICAgICAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBjYWNoZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHZhcmlhYmxlcyBhZmZlY3Rpbmcgc3N0YXRlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGlkZWEgb2YgYSBzZXRzY2VuZSB0YXNrIChpLmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT5fc2V0c2NlbmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBpcyBhIHZlcnNpb24gb2YgdGhlIHRhc2sgd2hlcmUKKyAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGJ1aWxkaW5nIHNvbWV0aGluZywgQml0QmFrZSBjYW4gc2tpcCB0byB0aGUgZW5kCisgICAgICAgICAgICAgICAgcmVzdWx0IGFuZCBzaW1wbHkgcGxhY2UgYSBzZXQgb2YgZmlsZXMgaW50byBzcGVjaWZpYyBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcywgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIHNldHNjZW5lIHRhc2sgdmFyaWFudAorICAgICAgICAgICAgICAgIChlLmcuIGdlbmVyYXRpbmcgcGFja2FnZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4gdGFzaykuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgY2FzZXMsIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIChlLmcuIGEKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzaykgc2luY2UgdGhlIHdvcmsgaW52b2x2ZWQgd291bGQgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuCisgICAgICAgICAgICAgICAgdGhlIHVuZGVybHlpbmcgdGFzay4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHRoZSBjb21tb24gdGFza3MgdGhhdCBoYXZlCisgICAgICAgICAgICAgICAgc2V0c2NlbmUgdmFyaWFudHMgYXJlIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWRlcGxveSc+PGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc3lzcm9vdCc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgdGhlc2UgYXJlIG1vc3Qgb2YgdGhlIHRhc2tzIHdob3NlIG91dHB1dCBpcyBhbgorICAgICAgICAgICAgICAgIGVuZCByZXN1bHQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBrbm93bGVkZ2Ugb2YgdGhlIHJlbGF0aW9uc2hpcAorICAgICAgICAgICAgICAgIGJldHdlZW4gdGhlc2UgdGFza3MgYW5kIG90aGVyIHRhc2tzIHRoYXQgcHJlY2VkZSB0aGVtLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBCaXRCYWtlIHJ1bnMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZTwvZmlsZW5hbWU+IGZvcgorICAgICAgICAgICAgICAgIHNvbWV0aGluZywgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHJ1bm5pbmcgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiBuZWVkcyB0byBiZSBydW4sCisgICAgICAgICAgICAgICAgQml0QmFrZSB3b3VsZCBuZWVkIHRvIHJ1biB0aG9zZSBvdGhlciB0YXNrcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgYmVjb21lcyBtb3JlIGNvbXBsaWNhdGVkIGlmIGV2ZXJ5dGhpbmcgY2FuIGNvbWUgZnJvbSBhbgorICAgICAgICAgICAgICAgIHNzdGF0ZSBjYWNoZSBiZWNhdXNlIHNvbWUgb2JqZWN0cyBhcmUgc2ltcGx5IG5vdCByZXF1aXJlZCBhdAorICAgICAgICAgICAgICAgIGFsbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGRvIG5vdCBuZWVkIGEgY29tcGlsZXIgb3IgbmF0aXZlIHRvb2xzLCBzdWNoCisgICAgICAgICAgICAgICAgYXMgcXVpbHQsIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGlsZSBvciBwYXRjaC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+IHBhY2thZ2VzIGFyZQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmcm9tIHNzdGF0ZSwgQml0QmFrZSBkb2VzIG5vdCBuZWVkIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzayBkYXRhLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYW5kbGUgYWxsIHRoZXNlIGNvbXBsZXhpdGllcywgQml0QmFrZSBydW5zIGluIHR3byBwaGFzZXMuCisgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGlzIHRoZSAic2V0c2NlbmUiIHN0YWdlLgorICAgICAgICAgICAgICAgIER1cmluZyB0aGlzIHN0YWdlLCBCaXRCYWtlIGZpcnN0IGNoZWNrcyB0aGUgc3N0YXRlIGNhY2hlIGZvcgorICAgICAgICAgICAgICAgIGFueSB0YXJnZXRzIGl0IGlzIHBsYW5uaW5nIHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBvYmplY3QgZXhpc3RzIHJhdGhlcgorICAgICAgICAgICAgICAgIHRoYW4gYSBjb21wbGV0ZSBkb3dubG9hZC4KKyAgICAgICAgICAgICAgICBJZiBub3RoaW5nIGV4aXN0cywgdGhlIHNlY29uZCBwaGFzZSwgd2hpY2ggaXMgdGhlIHNldHNjZW5lCisgICAgICAgICAgICAgICAgc3RhZ2UsIGNvbXBsZXRlcyBhbmQgdGhlIG1haW4gYnVpbGQgcHJvY2VlZHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIG9iamVjdHMgYXJlIGZvdW5kIGluIHRoZSBzc3RhdGUgY2FjaGUsIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gd29ya3MgYmFja3dhcmRzIGZyb20gdGhlIGVuZCB0YXJnZXRzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGJ5IHRoZSB1c2VyLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhbiBpbWFnZSBpcyBiZWluZyBidWlsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSBmaXJzdCBsb29rcyBmb3IgdGhlIHBhY2thZ2VzIG5lZWRlZCBmb3IgdGhhdCBpbWFnZSBhbmQKKyAgICAgICAgICAgICAgICB0aGUgdG9vbHMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBJZiB0aG9zZSBhcmUgYXZhaWxhYmxlLCB0aGUgY29tcGlsZXIgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29tcGlsZXIgaXMgbm90IGV2ZW4gZG93bmxvYWRlZC4KKyAgICAgICAgICAgICAgICBJZiBzb21ldGhpbmcgd2FzIGZvdW5kIHRvIGJlIHVuYXZhaWxhYmxlLCBvciB0aGUgZG93bmxvYWQgb3IKKyAgICAgICAgICAgICAgICBzZXRzY2VuZSB0YXNrIGZhaWxzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0aGVuIHRyaWVzCisgICAgICAgICAgICAgICAgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgdGhlIGNvbXBpbGVyLCBmcm9tIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGF2YWlsYWJpbGl0eSBvZiBvYmplY3RzIGluIHRoZSBzc3RhdGUgY2FjaGUgaXMgaGFuZGxlZCBieQorICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiB0aGUgb2JqZWN0cyB0aGF0IGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSBmb2xsb3dlZCwgYW5kIHdoZXRoZXIgZm9yIGFueSBnaXZlbgorICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcCB0aGUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcGFzc2VkLgorICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgVHJ1ZSBvciBGYWxzZSB2YWx1ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGUgc2V0c2NlbmUgcHJvY2VzcyBjb21wbGV0ZXMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gaGFzIGEgbGlzdCBvZiB0YXNrcyB0aGF0IGl0IGJlbGlldmVzIGl0IGNhbiAiYWNjZWxlcmF0ZSIKKyAgICAgICAgICAgICAgICBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IG5lZWQgdG8gcnVuLgorICAgICAgICAgICAgICAgIFRoZXJlIGlzIGEgZmluYWwgZnVuY3Rpb24gY2FsbCB0byB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjInPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRoYXQgaXMgYWJsZSB0byByZXF1aXJlIHRoZSB0YXNrcyB0byBiZSBydW4gdGhhdAorICAgICAgICAgICAgICAgIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW5pdGlhbGx5IHdhcyBnb2luZyB0bworICAgICAgICAgICAgICAgIHNraXAuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KICAgICA8L3NlY3Rpb24+CiAKICAgICA8c2VjdGlvbiBpZD0naW1hZ2VzLWRldi1lbnZpcm9ubWVudCc+CkBAIC0xNDAzLDYgKzE1OTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHBhY2thZ2VkYXRhIHdpbGwgYmUgaW5jbHVkZWQgaW4KICAgICAgICAgICAgICAgICAgICAgdGhlIGV4dGVuc2libGUgU0RLIGZvciBhbGwgcmVjaXBlcyBpbiB0aGUgIndvcmxkIiB0YXJnZXQuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLX0lOQ0xVREVfVE9PTENIQUlOJz48ZmlsZW5hbWU+U0RLX0lOQ0xVREVfVE9PTENIQUlOPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIHRvb2xjaGFpbiB3aWxsIGJlIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgdGhlIGV4dGVuc2libGUgU0RLLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES19MT0NBTF9DT05GX1dISVRFTElTVCc+PGZpbGVuYW1lPlNES19MT0NBTF9DT05GX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPjoKICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHZhcmlhYmxlcyBhbGxvd2VkIHRocm91Z2ggZnJvbSB0aGUgYnVpbGQgc3lzdGVtCiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgZXh0ZW5zaWJsZSBTREsgY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmFxLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmFxLnhtbAppbmRleCBkMmU0ZThlLi41ZjNmMTczIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZhcS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCkBAIC0zMyw5ICszMyw3IEBACiAgICAgICAgICAgICA8cGFyYSBpZD0nZmFxLW5vdC1tZWV0aW5nLXJlcXVpcmVtZW50cyc+CiAgICAgICAgICAgICAgICAgTXkgZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IG1lZXQgdGhlCiAgICAgICAgICAgICAgICAgcmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gdmVyc2lvbnMuCi0gICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgSSBkbyBub3QgaGF2ZSBQeXRob24gMi43LjMgb3IgZ3JlYXRlciwgb3IKLSAgICAgICAgICAgICAgICBJIGRvIGhhdmUgUHl0aG9uIDMueCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IG5vdCBzdXBwb3J0ZWQgYnkKLSAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBJIGRvIG5vdCBoYXZlIFB5dGhvbiAzLjQuMCBvciBncmVhdGVyLgogICAgICAgICAgICAgICAgIENhbiBJIHN0aWxsIHVzZSB0aGUgWW9jdG8gUHJvamVjdD8KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9xdWVzdGlvbj4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sCmluZGV4IGNlOGZhNWMuLjkwZDk2NWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvaW50cm9kdWN0aW9uLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5Jz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz46PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICBQcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgY29tcG9uZW50cyB0aGF0IG1ha2UgdXAgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBpbmZvcm1hdGlvbiBhYm91dCBkZWJ1Z25nIGltYWdlcyBjcmVhdGVkIGluIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IGluZm9ybWF0aW9uIGFib3V0IGRlYnVnZ2luZyBpbWFnZXMgY3JlYXRlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY2xvc2VyLWxvb2snPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+OjwvZW1waGFzaXM+CkBAIC04MCw2ICs4MCwxMSBAQAogICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgdGFza3MgZGVmaW5lZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWRldnRvb2wtcmVmZXJlbmNlJz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IFF1aWNrIFJlZmVyZW5jZTwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBhIHF1aWNrIHJlZmVyZW5jZSBmb3IgdGhlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtcWEtY2hlY2tzJz5RQSBFcnJvciBhbmQgV2FybmluZyBNZXNzYWdlczwvbGluaz46PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICBMaXN0cyBhbmQgZGVzY3JpYmVzIFFBIHdhcm5pbmcgYW5kIGVycm9yIG1lc3NhZ2VzLgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgpAQCAtMjUyLDEyICsyNTcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIG1ha2UgeHNsdHByb2MgZG9jYm9vay11dGlscyBmb3AgZGJsYXRleCB4bWx0bwogICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNESyBJbnN0YWxsZXIgRXh0cmFzOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCBvciBleHRlbnNpYmxlIFNESzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGxpYmdsaWIyLjAtZGV2IGxpYmFyY2hpdmUtZGV2Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3BlbkVtYmVkZGVkIFNlbGYtVGVzdCAoPGZpbGVuYW1lPm9lLXNlbGZ0ZXN0PC9maWxlbmFtZT4pOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBydW4KICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1zZWxmdGVzdDwvZmlsZW5hbWU+OgpAQCAtMjk2LDE3ICsyOTUsMTEgQEAKICAgICAgJCBzdWRvIGRuZiBpbnN0YWxsIG1ha2UgZG9jYm9vay1zdHlsZS1kc3NzbCBkb2Nib29rLXN0eWxlLXhzbCBcCiAgICAgIGRvY2Jvb2stZHRkcyBkb2Nib29rLXV0aWxzIGZvcCBsaWJ4c2x0IGRibGF0ZXggeG1sdG8geHNsdHByb2MKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TREsgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZCBvciBleHRlbnNpYmxlIFNESzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIGRuZiBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZ2xpYjItZGV2ZWwgbGliYXJjaGl2ZS1kZXZlbAotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW5FbWJlZGRlZCBTZWxmLVRlc3QgKDxmaWxlbmFtZT5vZS1zZWxmdGVzdDwvZmlsZW5hbWU+KTo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gcnVuCiAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2Utc2VsZnRlc3Q8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIGRuZiBpbnN0YWxsIEdpdFB5dGhvbgorICAgICAkIHN1ZG8gZG5mIGluc3RhbGwgcHl0aG9uMy1HaXRQeXRob24KICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMzM5LDEyICszMzIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHN1ZG8genlwcGVyIGluc3RhbGwgbWFrZSBmb3AgeHNsdHByb2MgZGJsYXRleCB4bWx0bwogICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNESyBJbnN0YWxsZXIgRXh0cmFzOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIG9yIGV4dGVuc2libGUgU0RLOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHN1ZG8genlwcGVyIGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBnbGliMi1kZXZlbCBsaWJhcmNoaXZlLWRldmVsCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3BlbkVtYmVkZGVkIFNlbGYtVGVzdCAoPGZpbGVuYW1lPm9lLXNlbGZ0ZXN0PC9maWxlbmFtZT4pOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBydW4KICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1zZWxmdGVzdDwvZmlsZW5hbWU+OgpAQCAtMzk0LDEyICszODEsNiBAQAogICAgICAkIHN1ZG8geXVtIGluc3RhbGwgbWFrZSBkb2Nib29rLXN0eWxlLWRzc3NsIGRvY2Jvb2stc3R5bGUteHNsIFwKICAgICAgZG9jYm9vay1kdGRzIGRvY2Jvb2stdXRpbHMgZm9wIGxpYnhzbHQgZGJsYXRleCB4bWx0byB4c2x0cHJvYwogICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNESyBJbnN0YWxsZXIgRXh0cmFzOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIG9yIGV4dGVuc2libGUgU0RLOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHN1ZG8geXVtIGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBnbGliMi1kZXZlbCBsaWJhcmNoaXZlLWRldmVsCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3BlbkVtYmVkZGVkIFNlbGYtVGVzdCAoPGZpbGVuYW1lPm9lLXNlbGZ0ZXN0PC9maWxlbmFtZT4pOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBydW4KICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1zZWxmdGVzdDwvZmlsZW5hbWU+OgpAQCAtNDIyLDggKzQwMyw3IEBACiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HaXQgMS44LjMuMSBvciBncmVhdGVyPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPnRhciAxLjI0IG9yIGdyZWF0ZXI8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHl0aG9uIDIuNy4zIG9yIGdyZWF0ZXIgbm90IGluY2x1ZGluZwotICAgICAgICAgICAgICAgICAgICBQeXRob24gMy54LCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QeXRob24gMy40LjAgb3IgZ3JlYXRlcjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9taWdyYXRpb24ueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9taWdyYXRpb24ueG1sCmluZGV4IGU2YzBhYTMuLjNlN2U2YjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvbWlncmF0aW9uLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwKQEAgLTI0NDcsOCArMjQ0Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZC5kZWxWYXIoJzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4nKTwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZC5zZXRWYXIoJzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4nLCBOb25lKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kLmRlbFZhcignPC9maWxlbmFtZT48cmVwbGFjZWFibGU+VkFSTkFNRTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPicpPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kLnNldFZhcignPC9maWxlbmFtZT48cmVwbGFjZWFibGU+VkFSTkFNRTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPicsIE5vbmUpPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGluIHRoZSB2YXJpYWJsZSBhbmQgYWxsIG9mIGl0cyBvdmVycmlkZXMgYmVpbmcKICAgICAgICAgICAgICAgICAgICAgY2xlYXJlZCBvdXQuCiAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB0aGUgY2hhbmdlLCBvbmx5IHRoZSBub24tb3ZlcnJpZGRlbiB2YWx1ZXMKQEAgLTI3NDAsMTMgKzI3NDAsMTMgQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFZhcmlhYmxlIGV4cHJlc3Npb25zLCBzdWNoIGFzCi0gICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5WQVJOQU1FPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CiAgICAgICAgICAgICBubyBsb25nZXIgZXhwYW5kIGF1dG9tYXRpY2FsbHkgd2l0aGluIFB5dGhvbiBmdW5jdGlvbnMuCiAgICAgICAgICAgICBTdXBwcmVzc2luZyBleHBhbnNpb24gd2FzIGRvbmUgdG8gYWxsb3cgUHl0aG9uIGZ1bmN0aW9ucyB0bwogICAgICAgICAgICAgY29uc3RydWN0IHNoZWxsIHNjcmlwdHMgb3Igb3RoZXIgY29kZSBmb3Igc2l0dWF0aW9ucyBpbiB3aGljaCB5b3UKICAgICAgICAgICAgIGRvIG5vdCB3YW50IHN1Y2ggZXhwcmVzc2lvbnMgZXhwYW5kZWQuCiAgICAgICAgICAgICBGb3IgYW55IGV4aXN0aW5nIGNvZGUgdGhhdCByZWxpZXMgb24gdGhlc2UgZXhwYW5zaW9ucywgeW91IG5lZWQgdG8KLSAgICAgICAgICAgIGNoYW5nZSB0aGUgZXhwYW5zaW9ucyB0byBlaXRoZXIgZXhwYW5kIHRoZSB2YWx1ZSBvZiBpbmRpdmlkdWFsCisgICAgICAgICAgICBjaGFuZ2UgdGhlIGV4cGFuc2lvbnMgdG8gZXhwYW5kIHRoZSB2YWx1ZSBvZiBpbmRpdmlkdWFsCiAgICAgICAgICAgICB2YXJpYWJsZXMgdGhyb3VnaCA8ZmlsZW5hbWU+ZC5nZXRWYXIoKTwvZmlsZW5hbWU+LgogICAgICAgICAgICAgVG8gYWx0ZXJuYXRpdmVseSBleHBhbmQgbW9yZSBjb21wbGV4IGV4cHJlc3Npb25zLAogICAgICAgICAgICAgdXNlIDxmaWxlbmFtZT5kLmV4cGFuZCgpPC9maWxlbmFtZT4uCkBAIC0yODgwLDcgKzI4ODAsNyBAQAogICAgICAgICAgICAgdG8gYWxsb3cgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcyB0byB3b3JrIHN1Y2ggdGhhdAogICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9yZWNvbmY8L2ZpbGVuYW1lPiBzdWNjZWVkcyBhbmQgcHJvZHVjZXMgYSB3b3JraW5nCi0gICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0KSwgYW5kIHRvIHJlbW92ZSB0aGUKKyAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQsIGFuZCB0byByZW1vdmUgdGhlCiAgICAgICAgICAgICBvdmVycmlkZGVuIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiB0YXNrIHN1Y2ggdGhhdCB0aGUKICAgICAgICAgICAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBnZXQgdXNlZC4KICAgICAgICAgPC9wYXJhPgpAQCAtMjkxMCw3ICsyOTEwLDggQEAKICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPiwgeW91IHNob3VsZCBtYWtlIGVkaXRzIHNvIHRoYXQKICAgICAgICAgICAgIHRob3NlIHRhc2tzIGFyZSBhZnRlciB0aGUKICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbWFnZS1jb21wbGV0ZSc+PGZpbGVuYW1lPmRvX2ltYWdlX2NvbXBsZXRlPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB0YXNrIHJhdGhlciB0aGFuIGJlZm9yZSB0aGUgdGFzayBzbyB0aGF0IHRoZSB5b3VyIGFkZGVkIHRhc2tzCisgICAgICAgICAgICB0YXNrIHJhdGhlciB0aGFuIGFmdGVyIDxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgc28gdGhhdCB0aGUgeW91ciBhZGRlZCB0YXNrcwogICAgICAgICAgICAgcnVuIGF0IHRoZSBjb3JyZWN0IHRpbWUuCiAgICAgICAgIDwvcGFyYT4KIApAQCAtMzA1Nyw2ICszMDU4LDEwIEBACiAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstZXh0ZW5zaWJsZSc+ZXh0ZW5zaWJsZSBTREs8L3VsaW5rPi4KICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBTREtzIGFuZCBob3cgdG8gYnVpbGQgYW5kIHVzZSB0aGVtLCBzZWUgdGhlCiAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstaW50cm8nPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBFY2xpcHNlIElERSBQbHVnLWluIGlzIHN0aWxsIHN1cHBvcnRlZCBhbmQKKyAgICAgICAgICAgICAgICBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuCisgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTMxMjgsNyArMzEzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFRoZSBzZXBhcmF0ZSA8ZmlsZW5hbWU+cG9reS10aW55PC9maWxlbmFtZT4gZGlzdHJpYnV0aW9uCiAgICAgICAgICAgICAgICAgICAgIG5vdyB1c2VzIHRoZSBtdXNsIEMgbGlicmFyeSBpbnN0ZWFkIG9mIGEgaGVhdmlseSBwYXJlZAogICAgICAgICAgICAgICAgICAgICBkb3duIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiByZXN1bHRzIGluIGEgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICBVc2luZyBtdXNsIHJlc3VsdHMgaW4gYSBzbWFsbGVyCiAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBhbmQgZmFjaWxpdGF0ZXMgbXVjaCBncmVhdGVyIG1haW50YWluYWJpbGl0eQogICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIG11c2wgaXMgZGVzaWduZWQgdG8gaGF2ZSBhIHNtYWxsIGZvb3RwcmludC48L3BhcmE+CiAKQEAgLTMxOTQsNiArMzE5OSwyMSBAQAogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0yLjEtc3VwcG9ydGluZy1nb2JqZWN0LWludHJvc3BlY3Rpb24nPgorICAgICAgICA8dGl0bGU+U3VwcG9ydGluZyBHT2JqZWN0IEludHJvc3BlY3Rpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyByZWxlYXNlIHN1cHBvcnRzIGdlbmVyYXRpb24gb2YgR0xpYiBJbnRyb3NwZWN0aXZlCisgICAgICAgICAgICBSZXBvc2l0b3J5IChHSVIpIGZpbGVzIHRocm91Z2ggR09iamVjdCBpbnRyb3NwZWN0aW9uLCB3aGljaCBpcworICAgICAgICAgICAgdGhlIHN0YW5kYXJkIG1lY2hhbmlzbSBmb3IgYWNjZXNzaW5nIEdPYmplY3QtYmFzZWQgc29mdHdhcmUgZnJvbQorICAgICAgICAgICAgcnVudGltZSBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICBZb3UgY2FuIGVuYWJsZSwgZGlzYWJsZSwgYW5kIHRlc3QgdGhlIGdlbmVyYXRpb24gb2YgdGhpcyBkYXRhLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2VuYWJsaW5nLWdvYmplY3QtaW50cm9zcGVjdGlvbi1zdXBwb3J0Jz5FbmFibGluZyBHT2JqZWN0IEludHJvc3BlY3Rpb24gU3VwcG9ydDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKwogICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi4xLW1pc2NlbGxhbmVvdXMtY2hhbmdlcyc+CiAgICAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIENoYW5nZXM8L3RpdGxlPgogCkBAIC0zMjA1LDYgKzMyMjUsOSBAQAogICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGhvc3QgZGlzdHJpYnV0aW9uIGRvZXMgbm90IHByb3ZpZGUgYSBzdWZmaWNpZW50bHkKICAgICAgICAgICAgICAgICAgICAgcmVjZW50IHZlcnNpb24sIHlvdSBjYW4gaW5zdGFsbCB0aGUgYnVpbGR0b29scywgd2hpY2gKICAgICAgICAgICAgICAgICAgICAgd2lsbCBwcm92aWRlIGl0LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYnVpbGR0b29scyB0YXJiYWxsLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFRoZSBidWdneSBhbmQgaW5jb21wbGV0ZSBzdXBwb3J0IGZvciB0aGUgUlBNIHZlcnNpb24gNApAQCAtMzIxMyw2ICszMjM2LDI1IEBACiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbnMuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmlvdXNseSwgdGhlIGZvbGxvd2luZyBsaXN0IG9mIHBhY2thZ2VzIHdlcmUgcmVtb3ZlZAorICAgICAgICAgICAgICAgICAgICBpZiBwYWNrYWdlLW1hbmFnZW1lbnQgd2FzIG5vdCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiBhbnkgZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHVwZGF0ZS1yYy5kCisgICAgIGJhc2UtcGFzc3dkCisgICAgIHNoYWRvdworICAgICB1cGRhdGUtYWx0ZXJuYXRpdmVzCisgICAgIHJ1bi1wb3N0aW5zdHMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMSByZWxlYXNlLCB0aGVzZSBwYWNrYWdlcyBhcmUgb25seQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGlmICJyZWFkLW9ubHktcm9vdGZzIiBpcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiwgc2luY2UgdGhleSBtaWdodAorICAgICAgICAgICAgICAgICAgICBzdGlsbCBiZSBuZWVkZWQgZm9yIGEgcmVhZC13cml0ZSBpbWFnZSBldmVuIGluIHRoZSBhYnNlbmNlCisgICAgICAgICAgICAgICAgICAgIG9mIGEgcGFja2FnZSBtYW5hZ2VyIChlLmcuIGlmIHVzZXJzIG5lZWQgdG8gYmUgYWRkZWQsCisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkLCBvciByZW1vdmVkIGF0IHJ1bnRpbWUpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFRoZQogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstZGV2dG9vbC11c2UtZGV2dG9vbC1tb2RpZnktdG8tbW9kaWZ5LXRoZS1zb3VyY2Utb2YtYW4tZXhpc3RpbmctY29tcG9uZW50Jz48ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPjwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbm93IGRlZmF1bHRzIHRvIGV4dHJhY3RpbmcgdGhlIHNvdXJjZSBzaW5jZSB0aGF0CkBAIC0zMjIwLDcgKzMyNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICBUaGUgIi14IiBvciAiLS1leHRyYWN0IiBvcHRpb25zIGFyZSBub3cgbm8tb3BzLgogICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBwcm92aWRlIHlvdXIgb3duIGV4aXN0aW5nIHNvdXJjZSB0cmVlLCB5b3UKICAgICAgICAgICAgICAgICAgICAgd2lsbCBub3cgbmVlZCB0byBzcGVjaWZ5IGVpdGhlciB0aGUgIi1uIiBvcgotICAgICAgICAgICAgICAgICAgICAiLS1uby1leHRyYWN0IiBvcHRpb24gd2hlbiBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICItLW5vLWV4dHJhY3QiIG9wdGlvbnMgd2hlbiBydW5uaW5nCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CkBAIC0zMjI4LDEwICszMjcwLDggQEAKICAgICAgICAgICAgICAgICAgICAgb3IgZG9lcyBub3Qgc3BlY2lmeSB3aGV0aGVyIGEga2V5Ym9hcmQgaXMgYXR0YWNoZWQsIHRoZW4KICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgaXMgdG8gYXNzdW1lIGEga2V5Ym9hcmQgaXMgYXR0YWNoZWQgcmF0aGVyCiAgICAgICAgICAgICAgICAgICAgIHRoYW4gYXNzdW1lIG5vIGtleWJvYXJkLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIHByaW1hcmlseSBhZmZlY3RzIHRoZSBTYXRvIFVJLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBwcmltYXJpbHkgYWZmZWN0cyB0aGUgU2F0byBVSS4KKyAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LmRlYnVnPC9maWxlbmFtZT4gZGlyZWN0b3J5IHBhY2thZ2luZyBpcwogICAgICAgICAgICAgICAgICAgICBub3cgYXV0b21hdGljLgpAQCAtMzI0OCw4ICszMjg4LDggQEAKICAgICAgICAgICAgICAgICAgICAgVGhpcyBkYXRhIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdldHJ1c2FnZSgpPC9maWxlbmFtZT4gZGF0YSBhbmQgY29ycmVjdGVkIElPCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuCi0gICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gdXBkYXRlIGNvZGUgdGhhdCByZWFkcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkc3RhdHM8L2ZpbGVuYW1lPiBkYXRhLgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIHVwZGF0ZSBhbnkgY3VzdG9tIGNvZGUgdGhhdCByZWFkcworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJ1aWxkc3RhdHM8L2ZpbGVuYW1lPiBkYXRhLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFRoZQpAQCAtMzI3Miw4ICszMzEyLDYyMiBAQAogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBsYXllci4KICAgICAgICAgICAgICAgICAgICAgTW9zdCBtb2Rlcm4geDg2IGJvYXJkcyBkbyBub3QgcmVseSBvbiB0aGlzIGZpbGUgYW5kIGl0IG9ubHkKICAgICAgICAgICAgICAgICAgICAgYWRkcyBrZXJuZWwgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIHN0YXJ0dXAuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBzdGlsbCBuZWVkIHRoZSBmaWxlLCB5b3UgY2FuIHNpbXBseSBhZGQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnY4NmQ8L2ZpbGVuYW1lPiB0byB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gc3RpbGwgbmVlZCB0byBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51dmVzYWZiPC9maWxlbmFtZT4sIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgc2ltcGx5IGFkZCA8ZmlsZW5hbWU+djg2ZDwvZmlsZW5hbWU+IHRvIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHN5c3Jvb3QgcGF0aHMgYXJlIG5vdyByZW1vdmVkIGZyb20gZGVidWcgc3ltYm9sCisgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgIFJlbW92aW5nIHRoZXNlIHBhdGhzIG1lYW5zIHRoYXQgcmVtb3RlIEdEQiB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgICAgdW5zdHJpcHBlZCBidWlsZCBzeXN0ZW0gc3lzcm9vdCB3aWxsIG5vIGxvbmdlciB3b3JrCisgICAgICAgICAgICAgICAgICAgICAoYWx0aG91Z2ggdGhpcyB3YXMgbmV2ZXIgZG9jdW1lbnRlZCB0byB3b3JrKS4KKyAgICAgICAgICAgICAgICAgICAgIFRoZSBzdXBwb3J0ZWQgbWV0aG9kIHRvIGFjY29tcGxpc2ggc29tZXRoaW5nIHNpbWlsYXIgaXMKKyAgICAgICAgICAgICAgICAgICAgIHRvIHNldCA8ZmlsZW5hbWU+SU1BR0VfR0VOX0RFQlVHRlM8L2ZpbGVuYW1lPiB0byAiMSIsCisgICAgICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIGdlbmVyYXRlIGEgY29tcGFuaW9uIGRlYnVnIGltYWdlCisgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHVuc3RyaXBwZWQgYmluYXJpZXMgYW5kIGFzc29jaWF0ZWQgZGVidWcKKyAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMgYWxvbmdzaWRlIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMi4yLXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMi4yIFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAyLjIgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi4yLW1pbmltdW0ta2VybmVsLXZlcnNpb24nPgorICAgICAgICA8dGl0bGU+TWluaW11bSBLZXJuZWwgVmVyc2lvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWluaW11bSBrZXJuZWwgdmVyc2lvbiBmb3IgdGhlIHRhcmdldCBzeXN0ZW0gYW5kIGZvciBTREsKKyAgICAgICAgICAgIGlzIG5vdyAzLjIuMCwgZHVlIHRvIHRoZSB1cGdyYWRlCisgICAgICAgICAgICB0byA8ZmlsZW5hbWU+Z2xpYmMgMi4yNDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgU3BlY2lmaWNhbGx5LCBmb3IgQUFyY2g2NC1iYXNlZCB0YXJnZXRzIHRoZSB2ZXJzaW9uIGlzCisgICAgICAgICAgICAzLjE0LgorICAgICAgICAgICAgRm9yIE5pb3MgSUktYmFzZWQgdGFyZ2V0cywgdGhlIG1pbmltdW0ga2VybmVsIHZlcnNpb24gaXMgMy4xOS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciB4ODYgYW5kIHg4Nl82NCwgeW91IGNhbiByZXNldAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PTERFU1RfS0VSTkVMJz48ZmlsZW5hbWU+T0xERVNUX0tFUk5FTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRvIGFueXRoaW5nIGRvd24gdG8gMi42LjMyIGlmIGRlc2lyZWQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi1zdGFnaW5nLWRpcmVjdG9yaWVzLWluLXN5c3Jvb3Qtc2ltcGxpZmllZCc+CisgICAgICAgIDx0aXRsZT5TdGFnaW5nIERpcmVjdG9yaWVzIGluIFN5c3Jvb3QgSGFzIEJlZW4gU2ltcGxpZmllZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgd2F5IGRpcmVjdG9yaWVzIGFyZSBzdGFnZWQgaW4gc3lzcm9vdCBoYXMgYmVlbiBzaW1wbGlmaWVkIGFuZAorICAgICAgICAgICAgaW50cm9kdWNlcyB0aGUgbmV3CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTUk9PVF9ESVJTJz48ZmlsZW5hbWU+U1lTUk9PVF9ESVJTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1JPT1RfRElSU19OQVRJVkUnPjxmaWxlbmFtZT5TWVNST09UX0RJUlNfTkFUSVZFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTUk9PVF9ESVJTX0JMQUNLTElTVCc+PGZpbGVuYW1lPlNZU1JPT1RfRElSU19CTEFDS0xJU1Q8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNi1NYXkvMTIxMzY1Lmh0bWwnPnYyIHBhdGNoIHNlcmllcyBvbiB0aGUgT0UtQ29yZSBNYWlsaW5nIExpc3Q8L3VsaW5rPgorICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi1yZW1vdmFsLW9mLW9sZC1pbWFnZXMtZnJvbS10bXAtZGVwbG95LW5vdy1lbmFibGVkJz4KKyAgICAgICAgPHRpdGxlPlJlbW92YWwgb2YgT2xkIEltYWdlcyBhbmQgT3RoZXIgRmlsZXMgaW4gPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBOb3cgRW5hYmxlZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZW1vdmFsIG9mIG9sZCBpbWFnZXMgYW5kIG90aGVyIGZpbGVzIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS88L2ZpbGVuYW1lPiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0IGR1ZQorICAgICAgICAgICAgdG8gYSBuZXcgc3RhZ2luZyBtZXRob2QgdXNlZCBmb3IgdGhvc2UgZmlsZXMuCisgICAgICAgICAgICBBcyBhIHJlc3VsdCBvZiB0aGlzIGNoYW5nZSwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Uk1fT0xEX0lNQUdFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgbm93IHJlZHVuZGFudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi4yLXB5dGhvbi1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPlB5dGhvbiBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBmb3IgUHl0aG9uIG9jY3VycmVkOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0yLjItYml0YmFrZS1ub3ctcmVxdWlyZXMtcHl0aG9uLTMuNCc+CisgICAgICAgICAgICA8dGl0bGU+Qml0QmFrZSBOb3cgUmVxdWlyZXMgUHl0aG9uIDMuNCs8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHJlcXVpcmVzIFB5dGhvbiAzLjQgb3IgZ3JlYXRlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi4yLXV0Zi04LWxvY2FsZS1yZXF1aXJlZC1vbi1idWlsZC1ob3N0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5VVEYtOCBMb2NhbGUgUmVxdWlyZWQgb24gQnVpbGQgSG9zdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgVVRGLTggbG9jYWxlIGlzIHJlcXVpcmVkIG9uIHRoZSBidWlsZCBob3N0IGR1ZSB0byBQeXRob24gMy4KKyAgICAgICAgICAgICAgICBTaW5jZSBDLlVURi04IGlzIG5vdCBhIHN0YW5kYXJkLCB0aGUgZGVmYXVsdCBpcyBlbl9VUy5VVEYtOC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi4yLW1ldGFkYXRhLW5vdy1tdXN0LXVzZS1weXRob24tMy1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPk1ldGFkYXRhIE11c3QgTm93IFVzZSBQeXRob24gMyBTeW50YXg8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgaXMgbm93IHJlcXVpcmVkIHRvIHVzZSBQeXRob24gMyBzeW50YXguCisgICAgICAgICAgICAgICAgRm9yIGhlbHAgcHJlcGFyaW5nIG1ldGFkYXRhLCBzZWUgYW55IG9mIHRoZSBtYW55IFB5dGhvbiAzIHBvcnRpbmcKKyAgICAgICAgICAgICAgICBndWlkZXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcmVmZXJlbmNlIHRoZSBjb252ZXJzaW9uIGNvbW1pdHMgZm9yIEJpdGJha2UKKyAgICAgICAgICAgICAgICBhbmQgeW91IGNhbiB1c2UgT0UtQ29yZSBhcyBhIGd1aWRlIGZvciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgcGFydGljdWxhciBhcmVhcyBvZiBpbnRlcmVzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICogc3VicHJvY2VzcyBjb21tYW5kLWxpbmUgcGlwZXMgbmVlZGluZyBsb2NhbGUgZGVjb2RpbmcKKyAgICAgKiB0aGUgc3ludGF4IGZvciBvY3RhbCB2YWx1ZXMgY2hhbmdlZAorICAgICAqIHRoZSA8ZmlsZW5hbWU+aXRlciooKTwvZmlsZW5hbWU+IGZ1bmN0aW9ucyBjaGFuZ2VkIG5hbWUKKyAgICAgKiBpdGVyYXRvcnMgbm93IHJldHVybiB2aWV3cywgbm90IGxpc3RzCisgICAgICogY2hhbmdlZCBuYW1lcyBmb3IgUHl0aG9uIG1vZHVsZXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi10YXJnZXQtcHl0aG9uLXJlY2lwZXMtc3dpdGNoZWQtdG8tcHl0aG9uLTMnPgorICAgICAgICAgICAgPHRpdGxlPlRhcmdldCBQeXRob24gUmVjaXBlcyBTd2l0Y2hlZCB0byBQeXRob24gMzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1vc3QgdGFyZ2V0IFB5dGhvbiByZWNpcGVzIGhhdmUgbm93IGJlZW4gc3dpdGNoZWQgdG8gUHl0aG9uIDMuCisgICAgICAgICAgICAgICAgVW5mb3J0dW5hdGVseSwgc3lzdGVtcyB1c2luZyBSUE0gYXMgYSBwYWNrYWdlIG1hbmFnZXIgYW5kCisgICAgICAgICAgICAgICAgcHJvdmlkaW5nIG9ubGluZSBwYWNrYWdlLW1hbmFnZXIgc3VwcG9ydCB0aHJvdWdoIFNNQVJUIHN0aWxsCisgICAgICAgICAgICAgICAgcmVxdWlyZSBQeXRob24gMi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgUHl0aG9uIDIgYW5kIHJlY2lwZXMgdGhhdCB1c2UgaXQgY2FuIHN0aWxsIGJlIGJ1aWx0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFzIHdpdGggcHJldmlvdXMgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0yLjItYnVpbGR0b29scy10YXJiYWxsLWluY2x1ZGVzLXB5dGhvbi0zJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGR0b29scy10YXJiYWxsPC9maWxlbmFtZT4gSW5jbHVkZXMgUHl0aG9uIDM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGR0b29scy10YXJiYWxsPC9maWxlbmFtZT4gbm93IGluY2x1ZGVzIFB5dGhvbiAzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0yLjItdWNsaWJjLXJlcGxhY2VkLWJ5LW11c2wnPgorICAgICAgICA8dGl0bGU+dUNsaWJjIFJlcGxhY2VkIGJ5IG11c2w8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdUNsaWJjIGhhcyBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YgbXVzbC4KKyAgICAgICAgICAgIE11c2wgaGFzIG1hdHVyZWQsIGlzIGJldHRlciBtYWludGFpbmVkLCBhbmQgaXMgY29tcGF0aWJsZSB3aXRoIGEKKyAgICAgICAgICAgIHdpZGVyIHJhbmdlIG9mIGFwcGxpY2F0aW9ucyBhcyBjb21wYXJlZCB0byB1Q2xpYmMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi1CLW5vLWxvbmdlci1kZWZhdWx0LXdvcmtpbmctZGlyZWN0b3J5LWZvci10YXNrcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IE5vIExvbmdlciBEZWZhdWx0IFdvcmtpbmcgRGlyZWN0b3J5IGZvciBUYXNrczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIG5vIGxvbmdlciB0aGUgZGVmYXVsdCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGFza3MuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIGFueSBjdXN0b20gdGFza3MgeW91IGRlZmluZSBub3cgbmVlZCB0byBlaXRoZXIKKyAgICAgICAgICAgIGhhdmUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+WzwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXJpYWJsZS1mbGFncyc+PGZpbGVuYW1lPmRpcnM8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPl08L2ZpbGVuYW1lPiBmbGFnIHNldCwgb3IgdGhlIHRhc2sgbmVlZHMgdG8gY2hhbmdlIGludG8gdGhlCisgICAgICAgICAgICBhcHByb3ByaWF0ZSB3b3JraW5nIGRpcmVjdG9yeSBtYW51YWxseSAoZS5nIHVzaW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2Q8L2ZpbGVuYW1lPiBmb3IgYSBzaGVsbCB0YXNrKS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBwcmVmZXJyZWQgbWV0aG9kIGlzIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+W2RpcnNdPC9maWxlbmFtZT4gZmxhZy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi4yLXJ1bnFlbXUtcG9ydGVkLXRvLXB5dGhvbic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IFBvcnRlZCB0byBQeXRob248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBoYXMgYmVlbiBwb3J0ZWQgdG8gUHl0aG9uIGFuZCBoYXMKKyAgICAgICAgICAgIGNoYW5nZWQgYmVoYXZpb3IgaW4gc29tZSBjYXNlcy4KKyAgICAgICAgICAgIFByZXZpb3VzIHVzYWdlIHBhdHRlcm5zIGNvbnRpbnVlZCB0byBiZSBzdXBwb3J0ZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBuZXcgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBpcyBhIFB5dGhvbiBzY3JpcHQuCisgICAgICAgICAgICBNYWNoaW5lIGtub3dsZWRnZSBpcyBubyBsb25nZXIgaGFyZGNvZGVkIGludG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4uCisgICAgICAgICAgICBZb3UgY2FuIGNob29zZSB0byB1c2UgdGhlIDxmaWxlbmFtZT5xZW11Ym9vdDwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGVmaW5lIHRoZSBCU1AncyBvd24gYXJndW1lbnRzIGFuZCB0byBtYWtlCisgICAgICAgICAgICBpdCBib290YWJsZSB3aXRoIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4uCisgICAgICAgICAgICBJZiB5b3UgdXNlIGEgY29uZmlndXJhdGlvbiBmaWxlLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+aW1hZ2UtbmFtZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4ucWVtdWJvb3QuY29uZgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBlbmFibGVzIGZpbmUtZ3JhaW5lZCB0dW5pbmcgb2Ygb3B0aW9ucworICAgICAgICAgICAgcGFzc2VkIHRvIFFFTVUgd2l0aG91dCB0aGUgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgIGhhcmQtY29kaW5nIGFueSBrbm93bGVkZ2UgYWJvdXQgZGlmZmVyZW50IG1hY2hpbmVzLgorICAgICAgICAgICAgVXNpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUgaXMgcGFydGljdWxhcmx5IGNvbnZlbmllbnQgd2hlbiB0cnlpbmcKKyAgICAgICAgICAgIHRvIHVzZSBRRU1VIHdpdGggbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11KjwvZmlsZW5hbWU+IG1hY2hpbmVzIGluIE9FLUNvcmUuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnFlbXVib290LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIGdlbmVyYXRlZCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11Ym9vdDwvZmlsZW5hbWU+CisgICAgICAgICAgICBjbGFzcyB3aGVuIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgYmVpbmcgYnVpbGQgKGkuZS4KKyAgICAgICAgICAgIGJ1aWxkIHJvb3RmcykuCisgICAgICAgICAgICBRRU1VIGJvb3QgYXJndW1lbnRzIGNhbiBiZSBzZXQgaW4gQlNQJ3MgY29uZmlndXJhdGlvbiBmaWxlIGFuZAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5xZW11Ym9vdDwvZmlsZW5hbWU+IGNsYXNzIHdpbGwgc2F2ZSB0aGVtIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWJvb3QuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHdpdGhvdXQgYQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSA8cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5yb290ZnM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+a2VybmVsPC9yZXBsYWNlYWJsZT4gWzxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT5dCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBTdXBwb3J0ZWQgPHJlcGxhY2VhYmxlPm1hY2hpbmVzPC9yZXBsYWNlYWJsZT4gYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHFlbXVhcm0KKyAgICAgcWVtdWFybTY0CisgICAgIHFlbXV4ODYKKyAgICAgcWVtdXg4Ni02NAorICAgICBxZW11cHBjCisgICAgIHFlbXVtaXBzCisgICAgIHFlbXVtaXBzNjQKKyAgICAgcWVtdW1pcHNlbAorICAgICBxZW11bWlwczY0ZWwKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LTY0PC9maWxlbmFtZT4gbWFjaGluZSwKKyAgICAgICAgICAgIHByb3ZpZGVzIGEgcm9vdCBmaWxlc3lzdGVtLCBwcm92aWRlcyBhbiBpbWFnZSwgYW5kIHVzZXMKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bm9ncmFwaGljPC9maWxlbmFtZT4gb3B0aW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorJCBydW5xZW11IHFlbXV4ODYtNjQgdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni02NC9jb3JlLWltYWdlLW1pbmltYWwtcWVtdXg4Ni02NC5leHQ0IHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQvYnpJbWFnZSBub2dyYXBoaWMKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgbGlzdCBvZiB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgc2V0IGluIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIHN1Y2ggYXMgPGZpbGVuYW1lPmJzcC5jb25mPC9maWxlbmFtZT4gdG8gZW5hYmxlIHRoZSBCU1AKKyAgICAgICAgICAgIHRvIGJlIGJvb3RlZCBieSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgIlFCIiBtZWFucyAiUUVNVSBCb290Ii4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUUJfU1lTVEVNX05BTUU6IFFFTVUgbmFtZSAoZS5nLiAicWVtdS1zeXN0ZW0taTM4NiIpCisgICAgIFFCX09QVF9BUFBFTkQ6IE9wdGlvbnMgdG8gYXBwZW5kIHRvIFFFTVUgKGUuZy4gIi1zaG93LWN1cnNvciIpCisgICAgIFFCX0RFRkFVTFRfS0VSTkVMOiBEZWZhdWx0IGtlcm5lbCB0byBib290IChlLmcuICJiekltYWdlIikKKyAgICAgUUJfREVGQVVMVF9GU1RZUEU6IERlZmF1bHQgRlNUWVBFIHRvIGJvb3QgKGUuZy4gImV4dDQiKQorICAgICBRQl9NRU06IE1lbW9yeSAoZS5nLiAiLW0gNTEyIikKKyAgICAgUUJfTUFDSElORTogUUVNVSBtYWNoaW5lIChlLmcuICItbWFjaGluZSB2aXJ0IikKKyAgICAgUUJfQ1BVOiBRRU1VIGNwdSAoZS5nLiAiLWNwdSBxZW11MzIiKQorICAgICBRQl9DUFVfS1ZNOiBTaW1pbGFyIHRvIFFCX0NQVSBleGNlcHQgdXNlZCBmb3Iga3ZtIHN1cHBvcnQgKGUuZy4gIi1jcHUga3ZtNjQiKQorICAgICBRQl9LRVJORUxfQ01ETElORV9BUFBFTkQ6IE9wdGlvbnMgdG8gYXBwZW5kIHRvIHRoZSBrZXJuZWwncyAtYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIChlLmcuICJjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5IikKKyAgICAgUUJfRFRCOiBRRU1VIGR0YiBuYW1lCisgICAgIFFCX0FVRElPX0RSVjogUUVNVSBhdWRpbyBkcml2ZXIgKGUuZy4gImFsc2EiLCBzZXQgaXQgd2hlbiBzdXBwb3J0IGF1ZGlvKQorICAgICBRQl9BVURJT19PUFQ6IFFFTVUgYXVkaW8gb3B0aW9uIChlLmcuICItc291bmRodyBhYzk3LGVzMTM3MCIpLCB3aGljaCBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgd2hlbiBRQl9BVURJT19EUlYgaXMgc2V0LgorICAgICBRQl9LRVJORUxfUk9PVDogS2VybmVsJ3Mgcm9vdCAoZS5nLiAvZGV2L3ZkYSkKKyAgICAgUUJfVEFQX09QVDogTmV0d29yayBvcHRpb24gZm9yICd0YXAnIG1vZGUgKGUuZy4KKyAgICAgICAgICAgICAgICAgIi1uZXRkZXYgdGFwLGlkPW5ldDAsaWZuYW1lPUBUQVBALHNjcmlwdD1ubyxkb3duc2NyaXB0PW5vIC1kZXZpY2UgdmlydGlvLW5ldC1kZXZpY2UsbmV0ZGV2PW5ldDAiKS4KKyAgICAgICAgICAgICAgICAgIHJ1bnFlbXUgd2lsbCByZXBsYWNlICJAVEFQQCIgd2l0aCB0aGUgb25lIHRoYXQgaXMgdXNlZCwgc3VjaCBhcyB0YXAwLCB0YXAxIC4uLgorICAgICBRQl9TTElSUF9PUFQ6IE5ldHdvcmsgb3B0aW9uIGZvciBTTElSUCBtb2RlIChlLmcuICItbmV0ZGV2IHVzZXIsaWQ9bmV0MCAtZGV2aWNlIHZpcnRpby1uZXQtZGV2aWNlLG5ldGRldj1uZXQwIikKKyAgICAgUUJfUk9PVEZTX09QVDogVXNlZCBhcyByb290ZnMgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgIi1kcml2ZSBpZD1kaXNrMCxmaWxlPUBST09URlNALGlmPW5vbmUsZm9ybWF0PXJhdyAtZGV2aWNlIHZpcnRpby1ibGstZGV2aWNlLGRyaXZlPWRpc2swIikuCisgICAgICAgICAgICAgICAgICAgIHJ1bnFlbXUgd2lsbCByZXBsYWNlICJAUk9PVEZTQCIgd2l0aCB0aGUgb25lIHdoaWNoIGlzIHVzZWQsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgY29yZS1pbWFnZS1taW5pbWFsLXFlbXVhcm02NC5leHQ0LgorICAgICBRQl9TRVJJQUxfT1BUOiBTZXJpYWwgcG9ydCAoZS5nLiAiLXNlcmlhbCBtb246c3RkaW8iKQorICAgICBRQl9UQ1BTRVJJQUxfT1BUOiB0Y3Agc2VyaWFsIHBvcnQgb3B0aW9uIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICIgLWRldmljZSB2aXJ0aW8tc2VyaWFsLWRldmljZSAtY2hhcmRldiBzb2NrZXQsaWQ9dmlydGNvbixwb3J0PUBQT1JUQCxob3N0PTEyNy4wLjAuMSAtZGV2aWNlICAgICAgdmlydGNvbnNvbGUsY2hhcmRldj12aXJ0Y29uIgorICAgICAgICAgICAgICAgICAgICAgICBydW5xZW11IHdpbGwgcmVwbGFjZSAiQFBPUlRAIiB3aXRoIHRoZSBwb3J0IG51bWJlciB3aGljaCBpcyB1c2VkLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyB1c2UgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiwgc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPklNQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFzIGZvbGxvd3MgYW5kIHJ1biA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGNvbW1hbmQtbGluZSBzeW50YXgsIHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11IGhlbHA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfQ0xBU1NFUyArPSAicWVtdWJvb3QiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi1kZWZhdWx0LWxpbmtlci1oYXNoLXN0eWxlLWNoYW5nZWQnPgorICAgICAgICA8dGl0bGU+RGVmYXVsdCBMaW5rZXIgSGFzaCBTdHlsZSBDaGFuZ2VkPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGxpbmtlciBoYXNoIHN0eWxlIGZvciA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIG5vdyAic3lzdiIgaW4gb3JkZXIgdG8gY2F0Y2ggcmVjaXBlcyB0aGF0IGFyZSBidWlsZGluZyBzb2Z0d2FyZQorICAgICAgICAgICAgd2l0aG91dCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBUaGlzIGNoYW5nZSBjb3VsZCByZXN1bHQgaW4gc2VlaW5nIHNvbWUgIk5vIEdOVV9IQVNIIGluIHRoZSBlbGYKKyAgICAgICAgICAgIGJpbmFyeSIgUUEgaXNzdWVzIHdoZW4gYnVpbGRpbmcgc3VjaCByZWNpcGVzLgorICAgICAgICAgICAgWW91IG5lZWQgdG8gZml4IHRoZXNlIHJlY2lwZXMgc28gdGhhdCB0aGV5IHVzZSB0aGUgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT4uCisgICAgICAgICAgICBEZXBlbmRpbmcgb24gaG93IHRoZSBzb2Z0d2FyZSBpcyBidWlsdCwgdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5CisgICAgICAgICAgICB0aGUgc29mdHdhcmUgKGUuZy4gYSBNYWtlZmlsZSkgbWlnaHQgbmVlZCB0byBiZSBwYXRjaGVkLgorICAgICAgICAgICAgSG93ZXZlciwgc29tZXRpbWVzIG1ha2luZyB0aGlzIGZpeCBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZQorICAgICAgICAgICAgZm9sbG93aW5nIHRvIHRoZSByZWNpcGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0yLjItYml0YmFrZS1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2UgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgdG9vayBwbGFjZSBmb3IgQml0QmFrZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgImdvZ2dsZSIgVUkgYW5kIHN0YW5kYWxvbmUgaW1hZ2Utd3JpdGVyIHRvb2wgaGF2ZQorICAgICAgICAgICAgICAgICAgICBiZWVuIHJlbW92ZWQgYXMgdGhleSBib3RoIHJlcXVpcmUgR1RLKyAyLjAgYW5kCisgICAgICAgICAgICAgICAgICAgIHdlcmUgbm90IGJlaW5nIG1haW50YWluZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFBlcmZvcmNlIGZldGNoZXIgbm93IHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHNwZWNpZnlpbmcgdGhlIHNvdXJjZSByZXZpc2lvbiB0byB1c2UsIGJlIGl0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUFVVE9SRVYnPjxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlbGlzdCBudW1iZXIsIHA0ZGF0ZSwgb3IgbGFiZWwsIGluIHByZWZlcmVuY2UgdG8KKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGVzZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjaGFuZ2UgaXMgbW9yZSBpbi1saW5lIHdpdGggaG93IHRoZSBvdGhlciBmZXRjaGVycworICAgICAgICAgICAgICAgICAgICB3b3JrIGZvciBzb3VyY2UgY29udHJvbCBzeXN0ZW1zLgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgZmV0Y2ggZnJvbSBQZXJmb3JjZSB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZAorICAgICAgICAgICAgICAgICAgICB0byB1c2UgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IGluIHBsYWNlIG9mIHNwZWNpZnlpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSByZXZpc2lvbiB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTb21lIG9mIEJpdEJha2UncyBpbnRlcm5hbCBjb2RlIHN0cnVjdHVyZXMgZm9yIGFjY2Vzc2luZworICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGNhY2hlIG5lZWRlZCB0byBiZSBjaGFuZ2VkIHRvIHN1cHBvcnQgdGhlIG5ldworICAgICAgICAgICAgICAgICAgICBtdWx0aS1jb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNoYW5nZXMgd2lsbCBhZmZlY3QgZXh0ZXJuYWwgdG9vbHMgdGhhdCB1c2UgQml0QmFrZSdzCisgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgY2hhbmdlcywgc2VlIHRoZSBjaGFuZ2VzIG1hZGUgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdHMgc3VwcGxpZWQgd2l0aCBPcGVuRW1iZWRkZWQtQ29yZToKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9jb21taXQvP2lkPTE4OTM3MWY4MzkzOTcxZDAwYmNhMGZjZWZmZDY3Y2MwNzc4NGY2ZWUnPjE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9jb21taXQvP2lkPTRhNWFhN2VhNGQwN2MyYzkwYTE2NTRiMTc0ODczYWJiMDE4YWNjNjcnPjI8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFzayBtYW5hZ2VtZW50IGNvZGUgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGF2b2lkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIElEIGluZGlyZWN0aW9uIGluIG9yZGVyIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGlzIHVubGlrZWx5IHRvIGNhdXNlIGFueSBwcm9ibGVtcyBmb3IgbW9zdAorICAgICAgICAgICAgICAgICAgICB1c2Vycy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIHNldHNjZW5lIHZlcmlmaWNhdGlvbiBmdW5jdGlvbiBhcyBwb2ludGVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ5IDxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBuZWVkZWQgdG8gY2hhbmdlIHNpZ25hdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBhIG5ldyB2YXJpYWJsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04yJz48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OMjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gYWRkZWQgYWxsb3dpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICB0byB3b3JrIHdpdGggc3VpdGFibHkgd3JpdHRlbiBtZXRhZGF0YSwgd2hpY2ggaW5jbHVkZXMKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkLUNvcmUgYW5kIFBva3kuCisgICAgICAgICAgICAgICAgICAgIEFueW9uZSB3aXRoIGN1c3RvbSBCaXRCYWtlIHRhc2sgc2NoZWR1bGVyIGNvZGUgbWlnaHQgYWxzbworICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIHVwZGF0ZSB0aGUgY29kZSB0byBoYW5kbGUgdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi1zd2FiYmVyLWhhcy1iZWVuLXJlbW92ZWQnPgorICAgICAgICA8dGl0bGU+U3dhYmJlciBoYXMgQmVlbiBSZW1vdmVkPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN3YWJiZXIsIGEgdG9vbCB0aGF0IHdhcyBpbnRlbmRlZCB0byBkZXRlY3QgaG9zdCBjb250YW1pbmF0aW9uIGluCisgICAgICAgICAgICB0aGUgYnVpbGQgcHJvY2VzcywgaGFzIGJlZW4gcmVtb3ZlZCwgYXMgaXQgaGFzIGJlZW4gdW5tYWludGFpbmVkCisgICAgICAgICAgICBhbmQgdW51c2VkIGZvciBzb21lIHRpbWUgYW5kIHdhcyBuZXZlciBwYXJ0aWN1bGFybHkgZWZmZWN0aXZlLgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIHNpbmNlIGluY29ycG9yYXRlZCBhIG51bWJlciBvZgorICAgICAgICAgICAgbWVjaGFuaXNtcyBpbmNsdWRpbmcgZW5oYW5jZWQgUUEgY2hlY2tzIHRoYXQgbWVhbiB0aGF0IHRoZXJlIGlzCisgICAgICAgICAgICBsZXNzIG9mIGEgbmVlZCBmb3Igc3VjaCBhIHRvb2wuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi1yZW1vdmVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXVnZWFzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQgYW5kIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGZiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFVubWFpbnRhaW5lZCBhbmQgaGFzIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgNC45IHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIFZlcnNpb25zIDUuNCBhbmQgNi4yIGFyZSBzdGlsbCBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbm9tZS1kb2MtdXRpbHM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgTm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3RrLWRvYy1zdHViPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IDxmaWxlbmFtZT5ndGstZG9jPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd0ay1lbmdpbmVzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQgYW5kIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd0ay1zYXRvLWVuZ2luZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBCZWNhbWUgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmdsYWRlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQgYW5kIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYm1hZDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBVbm1haW50YWluZWQgYW5kIGZ1bmN0aW9uYWxseSByZXBsYWNlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlibXBnMTIzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJtYWQ8L2ZpbGVuYW1lPiBoYXMgYmVlbiBtb3ZlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJvd2w8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQmVjYW1lIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJ4c2V0dGluZ3MtY2xpZW50PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9oLXB1enpsZXM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGx5IHJlcGxhY2VkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wdXp6bGVzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxldWk8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQmVjYW1lIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICBPUHJvZmlsZSBoYXMgYmVlbiBsYXJnZWx5IHN1cHBsYW50ZWQgYnkgcGVyZi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1kaXJlY3RmYi5iYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2ludGVyY2FsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQgYW5kIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB5dGhvbi1pbWFnaW5nPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQgYW5kIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXB5dGhvbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB5dGhvbi1weXJleDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBObyBsb25nZXIgbmVlZGVkIGFuZCBtb3ZlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1weXRob248L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2F0by1pY29uLXRoZW1lPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEJlY2FtZSBvYnNvbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3dhYmJlci1uYXRpdmU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgU3dhYmJlciBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21pZ3JhdGlvbi0yLjItc3dhYmJlci1oYXMtYmVlbi1yZW1vdmVkJz5lbnRyeSBvbiBTd2FiYmVyPC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dHNsaWI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgTm8gbG9uZ2VyIG5lZWRlZCBhbmQgaGFzIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWNsaWJjPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgaW4gZmF2b3Igb2YgbXVzbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eHRzY2FsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQgYW5kIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi4yLXJlbW92ZWQtY2xhc3Nlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmVkIENsYXNzZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGhhdmUgYmVlbiByZW1vdmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0dXRpbHMtbmF0aXZlLWJhc2U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgTm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHV0aWxzMy1uYXRpdmUtYmFzZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBObyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZGw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgT25seSBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0VDVElPTic+PGZpbGVuYW1lPlNFQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBiZXR0ZXIgc2V0IHdpdGhpbiB0aGUgcmVjaXBlIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNpcDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBNb3N0bHkgdW51c2VkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zd2FiYmVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWlncmF0aW9uLTIuMi1zd2FiYmVyLWhhcy1iZWVuLXJlbW92ZWQnPmVudHJ5IG9uIFN3YWJiZXI8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0yLjItbWlub3ItcGFja2FnaW5nLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+TWlub3IgUGFja2FnaW5nIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtaW5vciBwYWNrYWdpbmcgY2hhbmdlcyBoYXZlIG9jY3VycmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncnViPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwbGl0IDxmaWxlbmFtZT5ncnViLWVkaXRlbnY8L2ZpbGVuYW1lPiBpbnRvIGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTcGxpdCBjb250YWluZXIgYW5kIHZtIHJlbGF0ZWQgdW5pdHMgaW50byBhIG5ldyBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWNvbnRhaW5lci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXRpbC1saW51eDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBNb3ZlZCA8ZmlsZW5hbWU+cHJsaW1pdDwvZmlsZW5hbWU+IHRvIGEgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnV0aWwtbGludXgtcHJsaW1pdDwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuMi1taXNjZWxsYW5lb3VzLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbWlzY2VsbGFuZW91cyBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VfcmVnZXguaW5jPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSB0aGUgZGVmaW5pdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VfcmVnZXguaW5jPC9maWxlbmFtZT4gcHJldmlvdXNseSBjb250YWluZWQKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIG1vdmVkIHRvIHRoZWlyIHJlc3BlY3RpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCb3RoIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBldG9vbCBjcmVhdGU8L2ZpbGVuYW1lPiBub3cgdXNlIGEgZml4ZWQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0IHdoZW4gZmV0Y2hpbmcgZnJvbSBhIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgaW4gZWl0aGVyIGNhc2UgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUFVVE9SRVYnPjxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+LWE8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JmRhc2g7JmRhc2g7YXV0b3JldjwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdGNjPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEdUSysgVUkgaXMgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgUGlnbGl0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJlbmFtZWQgQ09NUFJFU1MoSU9OKSB0byBDT05WRVJTSU9OLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01QUkVTU0lPTlRZUEVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01QUkVTU19ERVBFTkRTPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01QUkVTU19DTUQ8L2ZpbGVuYW1lPiBhcmUgZGVwcmVjYXRlZCBpbiBmYXZvcgorICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+Q09OVkVSU0lPTlRZUEVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT05WRVJTSU9OX0RFUEVORFM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTlZFUlNJT05fQ01EPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Q09NUFJFU1MqPC9maWxlbmFtZT4gdmFyaWFibGUgbmFtZXMgd2lsbAorICAgICAgICAgICAgICAgICAgICBzdGlsbCB3b3JrIGluIHRoZSAyLjIgcmVsZWFzZSBidXQgbWV0YWRhdGEgdGhhdCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGJhY2t3YXJkcy1jb21wYXRpYmxlIHNob3VsZCBiZSBjaGFuZ2VkIHRvCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgbmV3IG5hbWVzIGFzIHRoZSA8ZmlsZW5hbWU+Q09NUFJFU1MqPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb25lcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBBIGZ1bGwgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+IGlzIG5vdworICAgICAgICAgICAgICAgICAgICBtYWRlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc29tZSBvbGQgc29mdHdhcmUgbWlnaHQgbm90IGJlIGNhcGFibGUgb2YgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNoYW5nZSByZWNpcGVzIHRoYXQgYnVpbGQgc3VjaCBzb2Z0d2FyZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZXkgZXhwbGljaXRseSBkaXNhYmxlIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICA8L3BhcmE+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1jbGFzc2VzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCmluZGV4IGU5MTliZDcuLjIzNDRhMDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCkBAIC0xNjEsMTMgKzE2MSwxNyBAQAogICAgICAgICAgICAgICAgIGNyb3NzLWNvbXBpbGF0aW9uLgogICAgICAgICAgICAgICAgIFlvdSBjYW4gcGFzcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8KICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gdGhyb3VnaCB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+RVhUUkFfT0VDT05GPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz5FWFRSQV9PRUNPTkY8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFQ09ORklHX0NPTkZBUkdTJz48ZmlsZW5hbWU+UEFDS0FHRUNPTkZJR19DT05GQVJHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4gLQogICAgICAgICAgICAgICAgIFJ1bnMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB3aXRoIGFyZ3VtZW50cyB0aGF0IHNwZWNpZnkgdGhlCiAgICAgICAgICAgICAgICAgY29tcGlsZXIgYW5kIGxpbmtlci4KICAgICAgICAgICAgICAgICBZb3UgY2FuIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdGhyb3VnaAotICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+IC0KICAgICAgICAgICAgICAgICBSdW5zIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiBhbmQgcGFzc2VzIGluCkBAIC0xOTQsNyArMTk4LDE0IEBACiAgICAgICAgIGNsYXNzIG9yIHRoZQogICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KICAgICAgICAgVGhlIGNsYXNzIGFsc28gY29udGFpbnMgc29tZSBjb21tb25seSB1c2VkIGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlPC9maWxlbmFtZT4sIHdoaWNoIHJ1bnMKKyAgICAgICAgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB3aXRoIHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRU1BS0UnPjxmaWxlbmFtZT5FWFRSQV9PRU1BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgYXMgd2VsbCBhcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBkaXJlY3RseSB0bwogICAgICAgICA8ZmlsZW5hbWU+b2VfcnVubWFrZTwvZmlsZW5hbWU+LgogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KQEAgLTEwOTIsMzYgKzExMDMsNiBAQAogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWd1bW1pYm9vdCc+Ci0gICAgPHRpdGxlPjxmaWxlbmFtZT5ndW1taWJvb3QuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgPGZpbGVuYW1lPmd1bW1pYm9vdDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9ucyBzcGVjaWZpYwotICAgICAgICB0byB0aGUgZ3VtbWlib290IGJvb3Rsb2FkZXIgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KLSAgICAgICAgVGhpcyBpcyBhbiBpbnRlcm5hbCBjbGFzcyBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlCi0gICAgICAgIHVzZWQgZGlyZWN0bHkuCi0gICAgICAgIFNldCB0aGUKLSAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICB2YXJpYWJsZSB0byAiZ3VtbWlib290IiB0byB1c2UgdGhpcyBjbGFzcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIG1vcmUgdmFyaWFibGVzIHVzZWQgYW5kIHN1cHBvcnRlZCBpbiB0aGlzIGNsYXNzLAotICAgICAgICBzZWUgdGhlCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HVU1NSUJPT1RfQ0ZHJz48ZmlsZW5hbWU+R1VNTUlCT09UX0NGRzwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdVTU1JQk9PVF9FTlRSSUVTJz48ZmlsZW5hbWU+R1VNTUlCT09UX0VOVFJJRVM8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgIGFuZAotICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1VNTUlCT09UX1RJTUVPVVQnPjxmaWxlbmFtZT5HVU1NSUJPT1RfVElNRU9VVDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICB2YXJpYWJsZXMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCi0gICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9ndW1taWJvb3QvJz5HdW1taWJvb3QgZG9jdW1lbnRhdGlvbjwvdWxpbms+Ci0gICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQogPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWd6aXBuYXRpdmUnPgogICAgIDx0aXRsZT48ZmlsZW5hbWU+Z3ppcG5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgogCkBAIC0xMzgxLDIyICsxMzYyLDYgQEAKICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS1zd2FiJz4KLSAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLXN3YWIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLXN3YWI8L2ZpbGVuYW1lPiBjbGFzcyBlbmFibGVzIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9zd2FiYmVyJz5Td2FiYmVyPC91bGluaz4KLSAgICAgICAgdG9vbCBpbiBvcmRlciB0byBkZXRlY3QgYW5kIGxvZyBhY2Nlc3NlcyB0byB0aGUgaG9zdCBzeXN0ZW0gZHVyaW5nCi0gICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgcHJvY2Vzcy4KLSAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSB1bm1haW50YWluZWQuCi0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IHBhY2thZ2UgbmVlZHMgdG8gYmUgaW5zdGFsbGVkCi0gICAgICAgICAgICBpbiB0aGUgYnVpbGQgaG9zdCBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgdG9vbC4KLSAgICAgICAgPC9ub3RlPgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQogPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLXZtJz4KICAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLXZtLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CiAKQEAgLTE1OTksNiArMTU2NCwxNyBAQAogICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzIHRoYXQgY29udGFpbiAiLy8iLCB3aGljaCBpcyBpbnZhbGlkLgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aG9zdC11c2VyLWNvbnRhbWluYXRlZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgbm8gcGFja2FnZSBwcm9kdWNlZCBieSB0aGUgcmVjaXBlIGNvbnRhaW5zIGFueQorICAgICAgICAgICAgICAgIGZpbGVzIG91dHNpZGUgb2YgPGZpbGVuYW1lPi9ob21lPC9maWxlbmFtZT4gd2l0aCBhIHVzZXIgb3IKKyAgICAgICAgICAgICAgICBncm91cCBJRCB0aGF0IG1hdGNoZXMgdGhlIHVzZXIgcnVubmluZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgIEEgbWF0Y2ggdXN1YWxseSBpbmRpY2F0ZXMgdGhhdCB0aGUgZmlsZXMgYXJlIGJlaW5nIGluc3RhbGxlZAorICAgICAgICAgICAgICAgIHdpdGggYW4gaW5jb3JyZWN0IFVJRC9HSUQsIHNpbmNlIHRhcmdldCBJRHMgYXJlIGluZGVwZW5kZW50CisgICAgICAgICAgICAgICAgZnJvbSBob3N0IElEcy4KKyAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc2VlIHRoZSBzZWN0aW9uIGRlc2NyaWJpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmluY29tcGF0aWJsZS1saWNlbnNlOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICBSZXBvcnQgd2hlbiBwYWNrYWdlcyBhcmUgZXhjbHVkZWQgZnJvbSBiZWluZyBjcmVhdGVkIGR1ZSB0bwogICAgICAgICAgICAgICAgIGJlaW5nIG1hcmtlZCB3aXRoIGEgbGljZW5zZSB0aGF0IGlzIGluCkBAIC0xNjI2LDYgKzE2MDIsMjUgQEAKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGlmIHRoZSBmaWxlcyBhcmUgbm90CiAgICAgICAgICAgICAgICAgbmVlZGVkIGluIGFueSBwYWNrYWdlLgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aW52YWxpZC1jaGFyczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgdGhlIHJlY2lwZSBtZXRhZGF0YSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1VNTUFSWSc+PGZpbGVuYW1lPlNVTU1BUlk8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TRUNUSU9OJz48ZmlsZW5hbWU+U0VDVElPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGRvIG5vdCBjb250YWluIG5vbi1VVEYtOCBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgIFNvbWUgcGFja2FnZSBtYW5hZ2VycyBkbyBub3Qgc3VwcG9ydCBzdWNoIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5pbnZhbGlkLXBhY2thZ2Vjb25maWc6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IG5vIHVuZGVmaW5lZCBmZWF0dXJlcyBhcmUgYmVpbmcgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFueSBuYW1lICJmb28iIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGZvcm0KKyAgICAgICAgICAgICAgICBkb2VzIG5vdCBleGlzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VDT05GSUdbZm9vXSA9ICIuLi4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGE6PC9maWxlbmFtZT48L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgIENoZWNrcyA8ZmlsZW5hbWU+LmxhPC9maWxlbmFtZT4gZmlsZXMgZm9yIGFueSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICBwYXRocy4KQEAgLTMyOTQsNiArMzI4OSw0MyBAQAogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIAorPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXN5c3RlbWQtYm9vdCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zeXN0ZW1kLWJvb3QuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnN5c3RlbWQtYm9vdDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9ucyBzcGVjaWZpYworICAgICAgICB0byB0aGUgc3lzdGVtZC1ib290IGJvb3Rsb2FkZXIgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKyAgICAgICAgVGhpcyBpcyBhbiBpbnRlcm5hbCBjbGFzcyBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zeXN0ZW1kLWJvb3Q8L2ZpbGVuYW1lPiBjbGFzcyBpcyBhIHJlc3VsdCBmcm9tCisgICAgICAgICAgICBtZXJnaW5nIHRoZSA8ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT4gY2xhc3MgdXNlZCBpbiBwcmV2aW91cworICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlcyB3aXRoIHRoZSA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+CisgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICA8L25vdGU+CisgICAgICAgIFNldCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSB0byAic3lzdGVtZC1ib290IiB0byB1c2UgdGhpcyBjbGFzcy4KKyAgICAgICAgRG9pbmcgc28gY3JlYXRlcyBhIHN0YW5kYWxvbmUgRUZJIGJvb3Rsb2FkZXIgdGhhdCBpcyBub3QgZGVwZW5kZW50CisgICAgICAgIG9uIHN5c3RlbWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBtb3JlIHZhcmlhYmxlcyB1c2VkIGFuZCBzdXBwb3J0ZWQgaW4gdGhpcyBjbGFzcywKKyAgICAgICAgc2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTVEVNRF9CT09UX0NGRyc+PGZpbGVuYW1lPlNZU1RFTURfQk9PVF9DRkc8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNURU1EX0JPT1RfRU5UUklFUyc+PGZpbGVuYW1lPlNZU1RFTURfQk9PVF9FTlRSSUVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1RFTURfQk9PVF9USU1FT1VUJz48ZmlsZW5hbWU+U1lTVEVNRF9CT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3N5c3RlbWQvc3lzdGVtZC1ib290Lyc+U3lzdGVtZC1ib290IGRvY3VtZW50YXRpb248L3VsaW5rPgorICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKIDxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10ZXJtaW5hbCc+CiAgICAgPHRpdGxlPjxmaWxlbmFtZT50ZXJtaW5hbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgogCkBAIC0zNjk4LDcgKzM3MzAsOSBAQAogICAgICAgICBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIFdhZiBidWlsZCBzeXN0ZW0uCiAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQogICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgcGFzc2VkIG9uCisgICAgICAgIG9yCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFQ09ORklHX0NPTkZBUkdTJz48ZmlsZW5hbWU+UEFDS0FHRUNPTkZJR19DT05GQVJHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBwYXNzZWQgb24KICAgICAgICAgdGhlIFdhZiBjb21tYW5kIGxpbmUuCiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZGV2dG9vbC1yZWZlcmVuY2UueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZGV2dG9vbC1yZWZlcmVuY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjRmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1kZXZ0b29sLXJlZmVyZW5jZS54bWwKQEAgLTAsMCArMSw2MDcgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtZGV2dG9vbC1yZWZlcmVuY2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IFF1aWNrIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY29tbWFuZC1saW5lIHRvb2wgcHJvdmlkZXMgYSBudW1iZXIKKyAgICAgICAgb2YgZmVhdHVyZXMgdGhhdCBoZWxwIHlvdSBidWlsZCwgdGVzdCwgYW5kIHBhY2thZ2Ugc29mdHdhcmUuCisgICAgICAgIFRoaXMgY29tbWFuZCBpcyBhdmFpbGFibGUgYWxvbmdzaWRlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgIGNvbW1hbmQuCisgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY29tbWFuZCBpcyBhIGtleQorICAgICAgICBwYXJ0IG9mIHRoZSBleHRlbnNpYmxlIFNESy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGEgUXVpY2sgUmVmZXJlbmNlIGZvciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYXBwbHkgdGhlIGNvbW1hbmQgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgZXh0ZW5zaWJsZSBTREssIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1leHRlbnNpYmxlJz5Vc2luZyB0aGUgRXh0ZW5zaWJsZSBTREs8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykgRGV2ZWxvcGVyJ3MKKyAgICAgICAgR3VpZGUuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZ2V0dGluZy1oZWxwJz4KKyAgICAgICAgPHRpdGxlPkdldHRpbmcgSGVscDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUgaXMgb3JnYW5pemVkCisgICAgICAgICAgICBzaW1pbGFybHkgdG8gR2l0IGluIHRoYXQgaXQgaGFzIGEgbnVtYmVyIG9mIHN1Yi1jb21tYW5kcyBmb3IKKyAgICAgICAgICAgIGVhY2ggZnVuY3Rpb24uCisgICAgICAgICAgICBZb3UgY2FuIHJ1biA8ZmlsZW5hbWU+ZGV2dG9vbCAtLWhlbHA8L2ZpbGVuYW1lPiB0byBzZWUgYWxsCisgICAgICAgICAgICB0aGUgY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCAtLWhlbHAKKyAgICAgdXNhZ2U6IGRldnRvb2wgWy0tYmFzZXBhdGggQkFTRVBBVEhdIFstLWJicGF0aCBCQlBBVEhdIFstZF0gWy1xXQorICAgICAgICAgICAgICAgICAgICBbLS1jb2xvciBDT0xPUl0gWy1oXQorICAgICAgICAgICAgICAgICAgICAmbHQ7c3ViY29tbWFuZCZndDsgLi4uCisKKyAgICAgT3BlbkVtYmVkZGVkIGRldmVsb3BtZW50IHRvb2wKKworICAgICBvcHRpb25zOgorICAgICAgIC0tYmFzZXBhdGggQkFTRVBBVEggIEJhc2UgZGlyZWN0b3J5IG9mIFNESyAvIGJ1aWxkIGRpcmVjdG9yeQorICAgICAgIC0tYmJwYXRoIEJCUEFUSCAgICAgIEV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgQkJQQVRILCByYXRoZXIgdGhhbiBnZXR0aW5nIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgbWV0YWRhdGEKKyAgICAgICAtZCwgLS1kZWJ1ZyAgICAgICAgICBFbmFibGUgZGVidWcgb3V0cHV0CisgICAgICAgLXEsIC0tcXVpZXQgICAgICAgICAgUHJpbnQgb25seSBlcnJvcnMKKyAgICAgICAtLWNvbG9yIENPTE9SICAgICAgICBDb2xvcml6ZSBvdXRwdXQgKHdoZXJlIENPTE9SIGlzIGF1dG8sIGFsd2F5cywgbmV2ZXIpCisgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCisgICAgIHN1YmNvbW1hbmRzOgorICAgICAgIEJlZ2lubmluZyB3b3JrIG9uIGEgcmVjaXBlOgorICAgICAgICAgYWRkICAgICAgICAgICAgICAgICAgQWRkIGEgbmV3IHJlY2lwZQorICAgICAgICAgbW9kaWZ5ICAgICAgICAgICAgICAgTW9kaWZ5IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZQorICAgICAgICAgdXBncmFkZSAgICAgICAgICAgICAgVXBncmFkZSBhbiBleGlzdGluZyByZWNpcGUKKyAgICAgICBHZXR0aW5nIGluZm9ybWF0aW9uOgorICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgU2hvdyB3b3Jrc3BhY2Ugc3RhdHVzCisgICAgICAgICBzZWFyY2ggICAgICAgICAgICAgICBTZWFyY2ggYXZhaWxhYmxlIHJlY2lwZXMKKyAgICAgICBXb3JraW5nIG9uIGEgcmVjaXBlIGluIHRoZSB3b3Jrc3BhY2U6CisgICAgICAgICBlZGl0LXJlY2lwZSAgICAgICAgICBFZGl0IGEgcmVjaXBlIGZpbGUgaW4geW91ciB3b3Jrc3BhY2UKKyAgICAgICAgIGNvbmZpZ3VyZS1oZWxwICAgICAgIEdldCBoZWxwIG9uIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucworICAgICAgICAgYnVpbGQgICAgICAgICAgICAgICAgQnVpbGQgYSByZWNpcGUKKyAgICAgICAgIHVwZGF0ZS1yZWNpcGUgICAgICAgIEFwcGx5IGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgdHJlZSB0byByZWNpcGUKKyAgICAgICAgIHJlc2V0ICAgICAgICAgICAgICAgIFJlbW92ZSBhIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlCisgICAgICAgICBmaW5pc2ggICAgICAgICAgICAgICBGaW5pc2ggd29ya2luZyBvbiBhIHJlY2lwZSBpbiB5b3VyIHdvcmtzcGFjZQorICAgICAgIFRlc3RpbmcgY2hhbmdlcyBvbiB0YXJnZXQ6CisgICAgICAgICBkZXBsb3ktdGFyZ2V0ICAgICAgICBEZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyB0byBsaXZlIHRhcmdldCBtYWNoaW5lCisgICAgICAgICB1bmRlcGxveS10YXJnZXQgICAgICBVbmRlcGxveSByZWNpcGUgb3V0cHV0IGZpbGVzIGluIGxpdmUgdGFyZ2V0IG1hY2hpbmUKKyAgICAgICAgIGJ1aWxkLWltYWdlICAgICAgICAgIEJ1aWxkIGltYWdlIGluY2x1ZGluZyB3b3Jrc3BhY2UgcmVjaXBlIHBhY2thZ2VzCisgICAgICAgQWR2YW5jZWQ6CisgICAgICAgICBjcmVhdGUtd29ya3NwYWNlICAgICBTZXQgdXAgd29ya3NwYWNlIGluIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uCisgICAgICAgICBleHRyYWN0ICAgICAgICAgICAgICBFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZQorICAgICAgICAgc3luYyAgICAgICAgICAgICAgICAgU3luY2hyb25pemUgdGhlIHNvdXJjZSB0cmVlIGZvciBhbiBleGlzdGluZyByZWNpcGUKKyAgICAgVXNlIGRldnRvb2wgJmx0O3N1YmNvbW1hbmQmZ3Q7IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGRpcmVjdGVkIGluIHRoZSBnZW5lcmFsIGhlbHAgb3V0cHV0LCB5b3UgY2FuIGdldCBtb3JlCisgICAgICAgICAgICAgICAgc3ludGF4IG9uIGEgc3BlY2lmaWMgY29tbWFuZCBieSBwcm92aWRpbmcgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBuYW1lIGFuZCB1c2luZyA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBhZGQgLS1oZWxwCisgICAgIHVzYWdlOiBkZXZ0b29sIGFkZCBbLWhdIFstLXNhbWUtZGlyIHwgLS1uby1zYW1lLWRpcl0gWy0tZmV0Y2ggVVJJXQorICAgICAgICAgICAgICAgICAgICAgICAgWy0tdmVyc2lvbiBWRVJTSU9OXSBbLS1uby1naXRdIFstLWF1dG9yZXZdIFstLWJpbmFyeV0KKyAgICAgICAgICAgICAgICAgICAgICAgIFstLWFsc28tbmF0aXZlXSBbLS1zcmMtc3ViZGlyIFNVQkRJUl0KKyAgICAgICAgICAgICAgICAgICAgICAgIFtyZWNpcGVuYW1lXSBbc3JjdHJlZV0gW2ZldGNodXJpXQorCisgICAgIEFkZHMgYSBuZXcgcmVjaXBlIHRvIHRoZSB3b3Jrc3BhY2UgdG8gYnVpbGQgYSBzcGVjaWZpZWQgc291cmNlIHRyZWUuIENhbgorICAgICBvcHRpb25hbGx5IGZldGNoIGEgcmVtb3RlIFVSSSBhbmQgdW5wYWNrIGl0IHRvIGNyZWF0ZSB0aGUgc291cmNlIHRyZWUuCisKKyAgICAgYXJndW1lbnRzOgorICAgICAgIHJlY2lwZW5hbWUgICAgICAgICAgICBOYW1lIGZvciBuZXcgcmVjaXBlIHRvIGFkZCAoanVzdCBuYW1lIC0gbm8gdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBvciBleHRlbnNpb24pLiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGF0dGVtcHQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0by1kZXRlY3QgaXQuCisgICAgICAgc3JjdHJlZSAgICAgICAgICAgICAgIFBhdGggdG8gZXh0ZXJuYWwgc291cmNlIHRyZWUuIElmIG5vdCBzcGVjaWZpZWQsIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvd29ya3NwYWNlL3NvdXJjZXMgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkLgorICAgICAgIGZldGNodXJpICAgICAgICAgICAgICBGZXRjaCB0aGUgc3BlY2lmaWVkIFVSSSBhbmQgZXh0cmFjdCBpdCB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlCisKKyAgICAgb3B0aW9uczoKKyAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tc2FtZS1kaXIsIC1zICAgICAgICBCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UKKyAgICAgICAtLW5vLXNhbWUtZGlyICAgICAgICAgRm9yY2UgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkKKyAgICAgICAtLWZldGNoIFVSSSwgLWYgVVJJICAgRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkkgYW5kIGV4dHJhY3QgaXQgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgdHJlZSAoZGVwcmVjYXRlZCAtIHBhc3MgYXMgcG9zaXRpb25hbCBhcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkKQorICAgICAgIC0tdmVyc2lvbiBWRVJTSU9OLCAtViBWRVJTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKQorICAgICAgIC0tbm8tZ2l0LCAtZyAgICAgICAgICBJZiBmZXRjaGluZyBzb3VyY2UsIGRvIG5vdCBzZXQgdXAgc291cmNlIHRyZWUgYXMgYSBnaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeQorICAgICAgIC0tYXV0b3JldiwgLWEgICAgICAgICBXaGVuIGZldGNoaW5nIGZyb20gYSBnaXQgcmVwb3NpdG9yeSwgc2V0IFNSQ1JFViBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIGEgZmxvYXRpbmcgcmV2aXNpb24gaW5zdGVhZCBvZiBmaXhlZAorICAgICAgIC0tYmluYXJ5LCAtYiAgICAgICAgICBUcmVhdCB0aGUgc291cmNlIHRyZWUgYXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCB2ZXJiYXRpbSAobm8gY29tcGlsYXRpb24sIHNhbWUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkuIFVzZWZ1bCB3aXRoIGJpbmFyeSBwYWNrYWdlcyBlLmcuIFJQTXMuCisgICAgICAgLS1hbHNvLW5hdGl2ZSAgICAgICAgIEFsc28gYWRkIG5hdGl2ZSB2YXJpYW50IChpLmUuIHN1cHBvcnQgYnVpbGRpbmcgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdCBhcyB3ZWxsIGFzIHRoZSB0YXJnZXQgbWFjaGluZSkKKyAgICAgICAtLXNyYy1zdWJkaXIgU1VCRElSICAgU3BlY2lmeSBzdWJkaXJlY3Rvcnkgd2l0aGluIHNvdXJjZSB0cmVlIHRvIHVzZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtdGhlLXdvcmtzcGFjZS1sYXllci1zdHJ1Y3R1cmUnPgorICAgICAgICA8dGl0bGU+VGhlIFdvcmtzcGFjZSBMYXllciBTdHJ1Y3R1cmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB1c2VzIGEgIldvcmtzcGFjZSIgbGF5ZXIKKyAgICAgICAgICAgIGluIHdoaWNoIHRvIGFjY29tcGxpc2ggYnVpbGRzLgorICAgICAgICAgICAgVGhpcyBsYXllciBpcyBub3Qgc3BlY2lmaWMgdG8gYW55IHNpbmdsZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBjb21tYW5kIGJ1dCBpcyByYXRoZXIgYSBjb21tb24KKyAgICAgICAgICAgIHdvcmtpbmcgYXJlYSB1c2VkIGFjcm9zcyB0aGUgdG9vbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHdvcmtzcGFjZSBzdHJ1Y3R1cmU6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyIKKyAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNWluIiBhbGlnbj0ibGVmdCIgc2NhbGU9IjcwIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGF0dGljIC0gQSBkaXJlY3RvcnkgY3JlYXRlZCBpZiBkZXZ0b29sIGJlbGlldmVzIGl0IHByZXNlcnZlCisgICAgICAgICAgICAgYW55dGhpbmcgd2hlbiB5b3UgcnVuICJkZXZ0b29sIHJlc2V0Ii4gIEZvciBleGFtcGxlLCBpZiB5b3UKKyAgICAgICAgICAgICBydW4gImRldnRvb2wgYWRkIiwgbWFrZSBjaGFuZ2VzIHRvIHRoZSByZWNpcGUsIGFuZCB0aGVuCisgICAgICAgICAgICAgcnVuICJkZXZ0b29sIHJlc2V0IiwgZGV2dG9vbCB0YWtlcyBub3RpY2UgdGhhdCB0aGUgZmlsZSBoYXMKKyAgICAgICAgICAgICBiZWVuIGNoYW5nZWQgYW5kIG1vdmVzIGl0IGludG8gdGhlIGF0dGljIHNob3VsZCB5b3Ugc3RpbGwKKyAgICAgICAgICAgICB3YW50IHRoZSByZWNpcGUuCisKKyAgICAgUkVBRE1FIC0gUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gd2hhdCBpcyBpbiB3b3Jrc3BhY2UgbGF5ZXIgYW5kIGhvdyB0bworICAgICAgICAgICAgICBtYW5hZ2UgaXQuCisKKyAgICAgLmRldnRvb2xfbWQ1IC0gQSBjaGVja3N1bSBmaWxlIHVzZWQgYnkgZGV2dG9vbC4KKworICAgICBhcHBlbmRzIC0gQSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyAqLmJiYXBwZW5kIGZpbGVzLCB3aGljaCBwb2ludCB0bworICAgICAgICAgICAgICAgZXh0ZXJuYWwgc291cmNlLgorCisgICAgIGNvbmYgLSBBIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGxheWVyLmNvbmYgZmlsZS4KKworICAgICByZWNpcGVzIC0gQSBkaXJlY3RvcnkgY29udGFpbmluZyByZWNpcGVzLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYQorICAgICAgICAgICAgICAgZm9sZGVyIGZvciBlYWNoIGRpcmVjdG9yeSBhZGRlZCB3aG9zZSBuYW1lIG1hdGNoZXMgdGhhdCBvZiB0aGUKKyAgICAgICAgICAgICAgIGFkZGVkIHJlY2lwZS4gIGRldnRvb2wgcGxhY2VzIHRoZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4uYmIgZmlsZQorICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgc3ViLWRpcmVjdG9yeS4KKworICAgICBzb3VyY2VzIC0gQSBkaXJlY3RvcnkgY29udGFpbmluZyBhIHdvcmtpbmcgY29weSBvZiB0aGUgc291cmNlIGZpbGVzIHVzZWQKKyAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgdGhlIHJlY2lwZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHVzZWQKKyAgICAgICAgICAgICAgIGFzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc291cmNlIHRyZWUgd2hlbiB5b3UgZG8gbm90IHByb3ZpZGUgYQorICAgICAgICAgICAgICAgc291cmNlIHRyZWUgcGF0aC4gIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgZm9sZGVyIGZvciBlYWNoCisgICAgICAgICAgICAgICBzZXQgb2Ygc291cmNlIGZpbGVzIG1hdGNoZWQgdG8gYSBjb3JyZXNwb25kaW5nIHJlY2lwZS4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+CisgICAgICAgIDx0aXRsZT5BZGRpbmcgYSBOZXcgUmVjaXBlIHRvIHRoZSBXb3Jrc3BhY2UgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGFkZCBhIG5ldyByZWNpcGUKKyAgICAgICAgICAgIHRvIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICBUaGUgcmVjaXBlIHlvdSBhZGQgc2hvdWxkIG5vdCBleGlzdCAtCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNyZWF0ZXMgaXQgZm9yIHlvdS4KKyAgICAgICAgICAgIFRoZSBzb3VyY2UgZmlsZXMgdGhlIHJlY2lwZSB1c2VzIHNob3VsZCBleGlzdCBpbiBhbiBleHRlcm5hbAorICAgICAgICAgICAgYXJlYS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGNyZWF0ZXMgYW5kIGFkZHMgYSBuZXcgcmVjaXBlIG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+amFja3NvbjwvZmlsZW5hbWU+IHRvIGEgd29ya3NwYWNlIGxheWVyIHRoZSB0b29sIGNyZWF0ZXMuCisgICAgICAgICAgICBUaGUgc291cmNlIGNvZGUgYnVpbHQgYnkgdGhlIHJlY2lwZXMgcmVzaWRlcyBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0cmlmL3NvdXJjZXMvamFja3NvbjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIGphY2tzb24gL2hvbWUvc2NvdHRyaWYvc291cmNlcy9qYWNrc29uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBhZGQgYSByZWNpcGUgYW5kIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgZG9lcyBub3QgZXhpc3QsCisgICAgICAgICAgICB0aGUgY29tbWFuZCBjcmVhdGVzIHRoZSBsYXllciBhbmQgcG9wdWxhdGVzIGl0IGFzCisgICAgICAgICAgICBkZXNjcmliZWQgaW4KKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXZ0b29sLXRoZS13b3Jrc3BhY2UtbGF5ZXItc3RydWN0dXJlJz5UaGUgV29ya3NwYWNlIExheWVyIFN0cnVjdHVyZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHdoZW4gdGhlCisgICAgICAgICAgICB3b3Jrc3BhY2UgbGF5ZXIgZXhpc3RzIGNhdXNlcyB0aGUgdG9vbCB0byBhZGQgdGhlIHJlY2lwZSwKKyAgICAgICAgICAgIGFwcGVuZCBmaWxlcywgYW5kIHNvdXJjZSBmaWxlcyBpbnRvIHRoZSBleGlzdGluZyB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaXMgY3JlYXRlZCB0byBwb2ludAorICAgICAgICAgICAgdG8gdGhlIGV4dGVybmFsIHNvdXJjZSB0cmVlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZXh0cmFjdGluZy10aGUtc291cmNlLWZvci1hbi1leGlzdGluZy1yZWNpcGUnPgorICAgICAgICA8dGl0bGU+RXh0cmFjdGluZyB0aGUgU291cmNlIGZvciBhbiBFeGlzdGluZyBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBleHRyYWN0PC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgZXh0cmFjdCB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUuCisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBjb21tYW5kLCB5b3UgbXVzdCBzdXBwbHkgdGhlIHJvb3QgbmFtZQorICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSAoaS5lLiBubyB2ZXJzaW9uLCBwYXRocywgb3IgZXh0ZW5zaW9ucyksIGFuZAorICAgICAgICAgICAgeW91IG11c3Qgc3VwcGx5IHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggeW91IHdhbnQgdGhlIHNvdXJjZQorICAgICAgICAgICAgZXh0cmFjdGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZGRpdGlvbmFsIGNvbW1hbmQgb3B0aW9ucyBsZXQgeW91IGNvbnRyb2wgdGhlIG5hbWUgb2YgYQorICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnJhbmNoIGludG8gd2hpY2ggeW91IGNhbiBjaGVja291dCB0aGUgc291cmNlCisgICAgICAgICAgICBhbmQgd2hldGhlciBvciBub3QgdG8ga2VlcCBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIHdoaWNoIGlzCisgICAgICAgICAgICB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXN5bmNocm9uaXppbmctYS1yZWNpcGVzLWV4dHJhY3RlZC1zb3VyY2UtdHJlZSc+CisgICAgICAgIDx0aXRsZT5TeW5jaHJvbml6aW5nIGEgUmVjaXBlJ3MgRXh0cmFjdGVkIFNvdXJjZSBUcmVlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgc3luYzwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgIHN5bmNocm9uaXplIGEgcHJldmlvdXNseSBleHRyYWN0ZWQgc291cmNlIHRyZWUgZm9yIGFuCisgICAgICAgICAgICBleGlzdGluZyByZWNpcGUuCisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBjb21tYW5kLCB5b3UgbXVzdCBzdXBwbHkgdGhlIHJvb3QgbmFtZQorICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSAoaS5lLiBubyB2ZXJzaW9uLCBwYXRocywgb3IgZXh0ZW5zaW9ucyksIGFuZAorICAgICAgICAgICAgeW91IG11c3Qgc3VwcGx5IHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggeW91IHdhbnQgdGhlIHNvdXJjZQorICAgICAgICAgICAgZXh0cmFjdGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZGRpdGlvbmFsIGNvbW1hbmQgb3B0aW9ucyBsZXQgeW91IGNvbnRyb2wgdGhlIG5hbWUgb2YgYQorICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnJhbmNoIGludG8gd2hpY2ggeW91IGNhbiBjaGVja291dCB0aGUgc291cmNlCisgICAgICAgICAgICBhbmQgd2hldGhlciBvciBub3QgdG8ga2VlcCBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIHdoaWNoIGlzCisgICAgICAgICAgICB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLW1vZGlmeWluZy1hLXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gY29tbWFuZCB0byBiZWdpbgorICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBzb3VyY2Ugb2YgYW4gZXhpc3RpbmcgcmVjaXBlLgorICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIHZlcnkgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RldnRvb2wtYWRkaW5nLWEtbmV3LXJlY2lwZS10by10aGUtd29ya3NwYWNlJz48ZmlsZW5hbWU+YWRkPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgY29tbWFuZCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBwaHlzaWNhbGx5IGNyZWF0ZSB0aGUKKyAgICAgICAgICAgIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlIGxheWVyIGJlY2F1c2UgdGhlIHJlY2lwZSBhbHJlYWR5CisgICAgICAgICAgICBleGlzdHMgaW4gYW4gYW5vdGhlciBsYXllci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQgZXh0cmFjdHMgdGhlCisgICAgICAgICAgICBzb3VyY2UgZm9yIGEgcmVjaXBlLCBzZXRzIGl0IHVwIGFzIGEgR2l0IHJlcG9zaXRvcnkgaWYgdGhlCisgICAgICAgICAgICBzb3VyY2UgaGFkIG5vdCBhbHJlYWR5IGJlZW4gZmV0Y2hlZCBmcm9tIEdpdCwgY2hlY2tzIG91dCBhCisgICAgICAgICAgICBicmFuY2ggZm9yIGRldmVsb3BtZW50LCBhbmQgYXBwbGllcyBhbnkgcGF0Y2hlcyBmcm9tIHRoZSByZWNpcGUKKyAgICAgICAgICAgIGFzIGNvbW1pdHMgb24gdG9wLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGNoZWNrb3V0IHRoZSBzb3VyY2UKKyAgICAgICAgICAgIGZpbGVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgbW9kaWZ5IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVXNpbmcgdGhlIGFib3ZlIGNvbW1hbmQgZm9ybSwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB1c2VzCisgICAgICAgICAgICB0aGUgZXhpc3RpbmcgcmVjaXBlJ3MKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgc3RhdGVtZW50IHRvIGxvY2F0ZSB0aGUgdXBzdHJlYW0gc291cmNlLCBleHRyYWN0cyB0aGUgc291cmNlCisgICAgICAgICAgICBpbnRvIHRoZSBkZWZhdWx0IHNvdXJjZXMgbG9jYXRpb24gaW4gdGhlIHdvcmtzcGFjZS4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRldmVsb3BtZW50IGJyYW5jaCB1c2VkIGlzICJkZXZ0b29sIi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWVkaXQtYW4tZXhpc3RpbmctcmVjaXBlJz4KKyAgICAgICAgPHRpdGxlPkVkaXQgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgZWRpdC1yZWNpcGU8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICB0byBydW4gdGhlIGRlZmF1bHQgZWRpdG9yLCB3aGljaCBpcyBpZGVudGlmaWVkIHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPkVESVRPUjwvZmlsZW5hbWU+IHZhcmlhYmxlLCBvbiB0aGUgc3BlY2lmaWVkIHJlY2lwZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBlZGl0LXJlY2lwZTwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb21tYW5kLCB5b3UgbXVzdCBzdXBwbHkgdGhlIHJvb3QgbmFtZSBvZiB0aGUgcmVjaXBlCisgICAgICAgICAgICAoaS5lLiBubyB2ZXJzaW9uLCBwYXRocywgb3IgZXh0ZW5zaW9ucykuCisgICAgICAgICAgICBBbHNvLCB0aGUgcmVjaXBlIGZpbGUgaXRzZWxmIG11c3QgcmVzaWRlIGluIHRoZSB3b3Jrc3BhY2UKKyAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+IGNvbW1hbmRzLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBvdmVycmlkZSB0aGF0IHJlcXVpcmVtZW50IGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgIi1hIiBvciAiLS1hbnktcmVjaXBlIiBvcHRpb24uCisgICAgICAgICAgICBVc2luZyBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBhbGxvd3MgeW91IHRvIGVkaXQgYW55IHJlY2lwZQorICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiBpdHMgbG9jYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC11cGRhdGluZy1hLXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5VcGRhdGluZyBhIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICB1cGRhdGUgeW91ciByZWNpcGUgd2l0aCBwYXRjaGVzIHRoYXQgcmVmbGVjdCBjaGFuZ2VzIHlvdSBtYWtlCisgICAgICAgICAgICB0byB0aGUgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBrbm93IHlvdSBhcmUgZ29pbmcgdG8gd29yayBvbiBzb21lCisgICAgICAgICAgICBjb2RlLCB5b3UgY291bGQgZmlyc3QgdXNlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2dG9vbC1tb2RpZnlpbmctYS1yZWNpcGUnPjxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIGNvbW1hbmQgdG8gZXh0cmFjdCB0aGUgY29kZSBhbmQgc2V0IHVwIHRoZSB3b3Jrc3BhY2UuCisgICAgICAgICAgICBBZnRlciB3aGljaCwgeW91IGNvdWxkIG1vZGlmeSwgY29tcGlsZSwgYW5kIHRlc3QgdGhlIGNvZGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgcmVzdWx0cyBhbmQgeW91IGhhdmUgY29tbWl0dGVkCisgICAgICAgICAgICB5b3VyIGNoYW5nZXMgdG8gdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIHRoZW4KKyAgICAgICAgICAgIHJ1biB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+IHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgIHBhdGNoZXMgYW5kIHVwZGF0ZSB0aGUgcmVjaXBlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIElmIHlvdSBydW4gdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgd2l0aG91dCBjb21taXR0aW5nIHlvdXIgY2hhbmdlcywgdGhlIGNvbW1hbmQgaWdub3JlcyB0aGUKKyAgICAgICAgICAgIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9mdGVuLCB5b3UgbWlnaHQgd2FudCB0byBhcHBseSBjdXN0b21pemF0aW9ucyBtYWRlIHRvIHlvdXIKKyAgICAgICAgICAgIHNvZnR3YXJlIGluIHlvdXIgb3duIGxheWVyIHJhdGhlciB0aGFuIGFwcGx5IHRoZW0gdG8gdGhlCisgICAgICAgICAgICBvcmlnaW5hbCByZWNpcGUuCisgICAgICAgICAgICBJZiBzbywgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LWE8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LS1hcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb3B0aW9uIHdpdGggdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYWxsb3cgeW91IHRvIHNwZWNpZnkgdGhlIGxheWVyIGludG8gd2hpY2ggdG8KKyAgICAgICAgICAgIHdyaXRlIGFuIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4gLWEgPHJlcGxhY2VhYmxlPmJhc2UtbGF5ZXItZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaXMgY3JlYXRlZCBhdCB0aGUKKyAgICAgICAgICAgIGFwcHJvcHJpYXRlIHBhdGggd2l0aGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIgZGlyZWN0b3J5LCB3aGljaAorICAgICAgICAgICAgbWF5IG9yIG1heSBub3QgYmUgaW4geW91ciA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgSWYgYW4gYXBwZW5kIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb21tYW5kIHVwZGF0ZXMgaXQKKyAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC11cGdyYWRpbmctYS1yZWNpcGUnPgorICAgICAgICA8dGl0bGU+VXBncmFkaW5nIGEgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgIHRvIHVwZ3JhZGUgYW4gZXhpc3RpbmcgcmVjaXBlIHRvIGEgbmV3IHVwc3RyZWFtIHZlcnNpb24uCisgICAgICAgICAgICBUaGUgY29tbWFuZCBwdXRzIHRoZSB1cGdyYWRlZCByZWNpcGUgZmlsZSBpbnRvIHRoZQorICAgICAgICAgICAgd29ya3NwYWNlIGFsb25nIHdpdGggYW55IGFzc29jaWF0ZWQgZmlsZXMsIGFuZCBleHRyYWN0cworICAgICAgICAgICAgdGhlIHNvdXJjZSB0cmVlIHRvIGEgc3BlY2lmaWVkIGxvY2F0aW9uIHNob3VsZCBwYXRjaGVzCisgICAgICAgICAgICBuZWVkIHJlYmFzZWQgb3IgYWRkZWQgdG8gYXMgYSByZXN1bHQgb2YgdGhlIHVwZ3JhZGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICB5b3UgbXVzdCBzdXBwbHkgdGhlIHJvb3QgbmFtZSBvZiB0aGUgcmVjaXBlIChpLmUuIG5vIHZlcnNpb24sCisgICAgICAgICAgICBwYXRocywgb3IgZXh0ZW5zaW9ucyksIGFuZCB5b3UgbXVzdCBzdXBwbHkgdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgdG8gd2hpY2ggeW91IHdhbnQgdGhlIHNvdXJjZSBleHRyYWN0ZWQuCisgICAgICAgICAgICBBZGRpdGlvbmFsIGNvbW1hbmQgb3B0aW9ucyBsZXQgeW91IGNvbnRyb2wgdGhpbmdzIHN1Y2ggYXMKKyAgICAgICAgICAgIHRoZSB2ZXJzaW9uIG51bWJlciB0byB3aGljaCB5b3Ugd2FudCB0byB1cGdyYWRlIChpLmUuIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgdGhlIHNvdXJjZSByZXZpc2lvbiB0byB3aGljaCB5b3Ugd2FudCB0byB1cGdyYWRlIChpLmUuIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIGFwcGx5IHBhdGNoZXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXJlc2V0dGluZy1hLXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5SZXNldHRpbmcgYSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gcmVtb3ZlIGEKKyAgICAgICAgICAgIHJlY2lwZSBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gKGUuZy4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlKSBmcm9tIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICBSZWFsaXplIHRoYXQgdGhpcyBjb21tYW5kIGRlbGV0ZXMgdGhlIHJlY2lwZSBhbmQgdGhlCisgICAgICAgICAgICBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgIFRoZSBjb21tYW5kIGRvZXMgbm90IHBoeXNpY2FsbHkgbW92ZSB0aGVtIGZvciB5b3UuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IGJlIHN1cmUgdG8gcGh5c2ljYWxseSByZWxvY2F0ZSB5b3VyCisgICAgICAgICAgICB1cGRhdGVkIHJlY2lwZSBhbmQgdGhlIGFwcGVuZCBmaWxlIG91dHNpZGUgb2YgdGhlIHdvcmtzcGFjZQorICAgICAgICAgICAgbGF5ZXIgYmVmb3JlIHJ1bm5pbmcgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgZGV0ZWN0cyB0aGF0CisgICAgICAgICAgICB0aGUgcmVjaXBlIG9yIHRoZSBhcHBlbmQgZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLCB0aGUKKyAgICAgICAgICAgIGNvbW1hbmQgcHJlc2VydmVzIHRoZSBtb2RpZmllZCBmaWxlcyBpbiBhIHNlcGFyYXRlICJhdHRpYyIKKyAgICAgICAgICAgIHN1YmRpcmVjdG9yeSB1bmRlciB0aGUgd29ya3NwYWNlIGxheWVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCByZXNldHMgdGhlIHdvcmtzcGFjZSBkaXJlY3RvcnkgdGhhdAorICAgICAgICAgICAgY29udGFpbnMgdGhlIDxmaWxlbmFtZT5tdHI8L2ZpbGVuYW1lPiByZWNpcGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCByZXNldCBtdHIKKyAgICAgTk9URTogQ2xlYW5pbmcgc3lzcm9vdCBmb3IgcmVjaXBlIG10ci4uLgorICAgICBOT1RFOiBMZWF2aW5nIHNvdXJjZSB0cmVlIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvd29ya3NwYWNlL3NvdXJjZXMvbXRyIGFzLWlzOyBpZiB5b3Ugbm8KKyAgICAgICAgbG9uZ2VyIG5lZWQgaXQgdGhlbiBwbGVhc2UgZGVsZXRlIGl0IG1hbnVhbGx5CisgICAgICQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWJ1aWxkaW5nLXlvdXItcmVjaXBlJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIFlvdXIgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNhdXNlIHRoZQorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4gY29tbWFuZCwKKyAgICAgICAgICAgIHlvdSBtdXN0IHN1cHBseSB0aGUgcm9vdCBuYW1lIG9mIHRoZSByZWNpcGUgKGkuZS4gbm8gdmVyc2lvbiwKKyAgICAgICAgICAgIHBhdGhzLCBvciBleHRlbnNpb25zKS4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIGVpdGhlciB0aGUgIi1zIiBvciB0aGUgIi0tZGlzYWJsZS1wYXJhbGxlbC1tYWtlIgorICAgICAgICAgICAgb3B0aW9uIHRvIGRpc2FibGUgcGFyYWxsZWwgbWFrZXMgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGJ1aWxkIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtYnVpbGRpbmcteW91ci1pbWFnZSc+CisgICAgICAgIDx0aXRsZT5CdWlsZGluZyBZb3VyIEltYWdlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQtaW1hZ2U8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICB0byBidWlsZCBhbiBpbWFnZSwgZXh0ZW5kaW5nIGl0IHRvIGluY2x1ZGUgcGFja2FnZXMgZnJvbQorICAgICAgICAgICAgcmVjaXBlcyBpbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgVXNpbmcgdGhpcyBjb21tYW5kIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IGFuIGltYWdlIHRoYXQKKyAgICAgICAgICAgIHJlYWR5IGZvciBpbW1lZGlhdGUgZGVwbG95bWVudCBvbnRvIGEgZGV2aWNlIGZvciB0ZXN0aW5nLgorICAgICAgICAgICAgRm9yIHByb3BlciBpbnRlZ3JhdGlvbiBpbnRvIGEgZmluYWwgaW1hZ2UsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICBlZGl0IHlvdXIgY3VzdG9tIGltYWdlIHJlY2lwZSBhcHByb3ByaWF0ZWx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkLWltYWdlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmQsIHlvdSBtdXN0IHN1cHBseSB0aGUgbmFtZSBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaGFzIG5vIGNvbW1hbmQgbGluZSBvcHRpb25zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYnVpbGQtaW1hZ2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWRlcGxveWluZy15b3VyLXNvZnR3YXJlLW9uLXRoZS10YXJnZXQtbWFjaGluZSc+CisgICAgICAgIDx0aXRsZT5EZXBsb3lpbmcgWW91ciBTb2Z0d2FyZSBvbiB0aGUgVGFyZ2V0IE1hY2hpbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgZGVwbG95IHRoZSByZWNpcGUncyBidWlsZCBvdXRwdXQgdG8gdGhlIGxpdmUgdGFyZ2V0IG1hY2hpbmU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lLCB3aGljaCBtdXN0IGJlIHJ1bm5pbmcgYW4gU1NIIHNlcnZlciAoaS5lLgorICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJAaG9zdG5hbWVbOmRlc3RkaXJdPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZGVwbG95cyBhbGwgZmlsZXMgaW5zdGFsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB5b3UgZG8gbm90IG5lZWQgdG8gaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZW5hYmxlZAorICAgICAgICAgICAgd2l0aGluIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgIElmIHlvdSBkbywgdGhlIHBhY2thZ2UgbWFuYWdlciBpcyBieXBhc3NlZC4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgaXMgZm9yIGRldmVsb3BtZW50IG9ubHkuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbmV2ZXIgdXNlIGl0IHRvIHVwZGF0ZSBhbiBpbWFnZSB0aGF0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiBwcm9kdWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXJlbW92aW5nLXlvdXItc29mdHdhcmUtZnJvbS10aGUtdGFyZ2V0LW1hY2hpbmUnPgorICAgICAgICA8dGl0bGU+UmVtb3ZpbmcgWW91ciBTb2Z0d2FyZSBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgIHJlbW92ZSBkZXBsb3llZCBidWlsZCBvdXRwdXQgZnJvbSB0aGUgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICBGb3IgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgIHdvcmssIHlvdSBtdXN0IGhhdmUgcHJldmlvdXNseSB1c2VkIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2dG9vbC1kZXBsb3lpbmcteW91ci1zb2Z0d2FyZS1vbi10aGUtdGFyZ2V0LW1hY2hpbmUnPjxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lLCB3aGljaCBtdXN0IGJlIHJ1bm5pbmcgYW4gU1NIIHNlcnZlciAoaS5lLgorICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJAaG9zdG5hbWU8L2ZpbGVuYW1lPikuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1jcmVhdGluZy10aGUtd29ya3NwYWNlJz4KKyAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBXb3Jrc3BhY2UgTGF5ZXIgaW4gYW4gQWx0ZXJuYXRpdmUgTG9jYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgY3JlYXRlIGEgbmV3IHdvcmtzcGFjZSBsYXllciBpbiB5b3VyCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgbmV3IHdvcmtzcGFjZSBsYXllciwgaXQgaXMgcG9wdWxhdGVkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvbmx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgaW4geW91cgorICAgICAgICAgICAgY3VycmVudCB3b3JraW5nIGFuZCBieSBkZWZhdWx0IG5hbWVzIHRoZSB3b3Jrc3BhY2UgbGF5ZXIKKyAgICAgICAgICAgICJ3b3Jrc3BhY2UiOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBhIHdvcmtzcGFjZSBsYXllciBhbnl3aGVyZSBieSBzdXBwbHlpbmcKKyAgICAgICAgICAgIGEgcGF0aG5hbWUgd2l0aCB0aGUgY29tbWFuZC4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHdvcmtzcGFjZSBsYXllciBuYW1lZAorICAgICAgICAgICAgIm5ldy13b3Jrc3BhY2UiOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAvaG9tZS9zY290dHJpZi9uZXctd29ya3NwYWNlCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1nZXQtdGhlLXN0YXR1cy1vZi10aGUtcmVjaXBlcy1pbi15b3VyLXdvcmtzcGFjZSc+CisgICAgICAgIDx0aXRsZT5HZXQgdGhlIFN0YXR1cyBvZiB0aGUgUmVjaXBlcyBpbiBZb3VyIFdvcmtzcGFjZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHN0YXR1czwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgIGxpc3QgdGhlIHJlY2lwZXMgY3VycmVudGx5IGluIHlvdXIgd29ya3NwYWNlLgorICAgICAgICAgICAgSW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIHBhdGhzIHRvIHRoZWlyIHJlc3BlY3RpdmUKKyAgICAgICAgICAgIGV4dGVybmFsIHNvdXJjZSB0cmVlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIHN0YXR1czwvZmlsZW5hbWU+IGNvbW1hbmQgaGFzIG5vCisgICAgICAgICAgICBjb21tYW5kLWxpbmUgb3B0aW9uczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIHN0YXR1cworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIHNhbXBsZSBvdXRwdXQgYWZ0ZXIgdXNpbmcKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RldnRvb2wtYWRkaW5nLWEtbmV3LXJlY2lwZS10by10aGUtd29ya3NwYWNlJz48ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB0byBjcmVhdGUgYW5kIGFkZCB0aGUgPGZpbGVuYW1lPm10cl8wLjg2LmJiPC9maWxlbmFtZT4gcmVjaXBlCisgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPndvcmtzcGFjZTwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIHN0YXR1cworICAgICBtdHI6IC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvd29ya3NwYWNlL3NvdXJjZXMvbXRyICgvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3dvcmtzcGFjZS9yZWNpcGVzL210ci9tdHJfMC44Ni5iYikKKyAgICAgJAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtc2VhcmNoLWZvci1hdmFpbGFibGUtdGFyZ2V0LXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+U2VhcmNoIGZvciBBdmFpbGFibGUgVGFyZ2V0IFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzZWFyY2g8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICBzZWFyY2ggZm9yIGF2YWlsYWJsZSB0YXJnZXQgcmVjaXBlcy4KKyAgICAgICAgICAgIFRoZSBjb21tYW5kIG1hdGNoZXMgdGhlIHJlY2lwZSBuYW1lLCBwYWNrYWdlIG5hbWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbiwgYW5kIGluc3RhbGxlZCBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBjb21tYW5kIGRpc3BsYXlzIHRoZSByZWNpcGUgbmFtZSBhcyBhIHJlc3VsdCBvZiBhCisgICAgICAgICAgICBtYXRjaC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzZWFyY2g8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgeW91IG11c3Qgc3VwcGx5IGEgPHJlcGxhY2VhYmxlPmtleXdvcmQ8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgIFRoZSBjb21tYW5kIHVzZXMgdGhlIDxyZXBsYWNlYWJsZT5rZXl3b3JkPC9yZXBsYWNlYWJsZT4gd2hlbgorICAgICAgICAgICAgc2VhcmNoaW5nIGZvciBhIG1hdGNoLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1mZWF0dXJlcy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1mZWF0dXJlcy54bWwKaW5kZXggZmQ3NjkzNS4uY2QxYmNiMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZmVhdHVyZXMueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbApAQCAtMTQ0LDYgKzE0NCwyNyBAQAogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmJsdWV0b290aDo8L2VtcGhhc2lzPiBJbmNsdWRlCiAgICAgICAgICAgICAgICAgICAgIGJsdWV0b290aCBzdXBwb3J0IChpbnRlZ3JhdGVkIEJUIG9ubHkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ymx1ZXo1OjwvZW1waGFzaXM+IEluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgQmx1ZVogVmVyc2lvbiA1LCB3aGljaCBwcm92aWRlcyBjb3JlIEJsdWV0b290aCBsYXllcnMgYW5kCisgICAgICAgICAgICAgICAgICAgIHByb3RvY29scyBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk8gRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluY2x1ZGVzICJibHVldG9vdGgiLCB3aGljaCBjYXVzZXMgYmx1ZXo1CisgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBiYWNrZmlsbGVkIGluIGZvciBibHVldG9vdGggc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCBibHVlejUgYmFja2ZpbGxlZCBhbmQgd291bGQgcmF0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgYmx1ZXo0LCB5b3UgbmVlZCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQgPSAiYmx1ZXo1IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0aGF0IHlvdSBoYXZlIGNvbnNpZGVyZWQgYnV0IHJ1bGVkCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgdXNpbmcgdGhlIGJsdWV6NSBmZWF0dXJlIGFuZCB0aGF0IGJsdWV6NCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y3JhbWZzOjwvZW1waGFzaXM+IEluY2x1ZGUgQ3JhbUZTCiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kaXJlY3RmYjo8L2VtcGhhc2lzPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC54bWwKaW5kZXggNjgzNGQ1Zi4uMDlmMzRmYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwueG1sCkBAIC0xMDIsNiArMTAyLDExIEBACiAgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNjwvZGF0ZT4KICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE2PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgIDwvcmV2aGlzdG9yeT4KIAogICAgIDxjb3B5cmlnaHQ+CkBAIC0xNDAsNiArMTQ1LDggQEAKIAogICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi10YXNrcy54bWwiLz4KIAorICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1kZXZ0b29sLXJlZmVyZW5jZS54bWwiLz4KKwogICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1xYS1jaGVja3MueG1sIi8+CiAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtaW1hZ2VzLnhtbCIvPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXFhLWNoZWNrcy54bWwKaW5kZXggNGZjZjFkYi4uODY0NTZiZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sCkBAIC05MTgsNyArOTE4LDggQEAKICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSB1cHN0cmVhbSBjaGFuZ2UgbG9nIG9yIHJlbGVhc2Ugbm90ZXMuCiAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgd29ya2VkIG91dCB3aGF0IHRoZSBhcHByb3ByaWF0ZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgaXMsIHlvdSBjYW4gdXBkYXRlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VDT05GSUdfQ09ORkFSR1MnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT48L2xpbms+LAogICAgICAgICAgICAgICAgICAgICBvciB0aGUgaW5kaXZpZHVhbAogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIHZhbHVlcyBhY2NvcmRpbmdseS4KQEAgLTExMDcsNyArMTEwOCw3IEBACiAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWluc3RhbGxlZC12cy1zaGlwcGVkJz4KICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAmbHQ7cmVjaXBlbmFtZSZndDs6IEZpbGVzL2RpcmVjdG9yaWVzIHdlcmUgaW5zdGFsbGVkIGJ1dCBub3Qgc2hpcHBlZCBbaW5zdGFsbGVkLXZzLXNoaXBwZWRdCisgICAgICAmbHQ7cmVjaXBlbmFtZSZndDs6IEZpbGVzL2RpcmVjdG9yaWVzIHdlcmUgaW5zdGFsbGVkIGJ1dCBub3Qgc2hpcHBlZCBpbiBhbnkgcGFja2FnZSBbaW5zdGFsbGVkLXZzLXNoaXBwZWRdCiAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0cnVjdHVyZS54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sCmluZGV4IGU1MWNlYjEuLjU0MWE0N2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0cnVjdHVyZS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbApAQCAtNjYwLDkgKzY2MCwyMSBAQAogICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9jYWNoZS88L2ZpbGVuYW1lPjwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIEJpdEJha2UgcGFyc2VzIHRoZSBtZXRhZGF0YSwgaXQgY3JlYXRlcyBhIGNhY2hlIGZpbGUgb2YgdGhlIHJlc3VsdCB0aGF0IGNhbgotICAgICAgICAgICAgYmUgdXNlZCB3aGVuIHN1YnNlcXVlbnRseSBydW5uaW5nIGNvbW1hbmRzLgotICAgICAgICAgICAgQml0QmFrZSBzdG9yZXMgdGhlc2UgcmVzdWx0cyBoZXJlIG9uIGEgcGVyLW1hY2hpbmUgYmFzaXMuCisgICAgICAgICAgICBXaGVuIEJpdEJha2UgcGFyc2VzIHRoZSBtZXRhZGF0YSAocmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyksCisgICAgICAgICAgICBpdCBjYWNoZXMgdGhlIHJlc3VsdHMgaW4gPGZpbGVuYW1lPmJ1aWxkL3RtcC9jYWNoZS88L2ZpbGVuYW1lPgorICAgICAgICAgICAgdG8gc3BlZWQgdXAgZnV0dXJlIGJ1aWxkcy4KKyAgICAgICAgICAgIFRoZSByZXN1bHRzIGFyZSBzdG9yZWQgb24gYSBwZXItbWFjaGluZSBiYXNpcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIHN1YnNlcXVlbnQgYnVpbGRzLCBCaXRCYWtlIGNoZWNrcyBlYWNoIHJlY2lwZSAodG9nZXRoZXIKKyAgICAgICAgICAgIHdpdGgsIGZvciBleGFtcGxlLCBhbnkgZmlsZXMgaW5jbHVkZWQgb3IgYXBwZW5kZWQgdG8gaXQpIHRvIHNlZQorICAgICAgICAgICAgaWYgdGhleSBoYXZlIGJlZW4gbW9kaWZpZWQuCisgICAgICAgICAgICBDaGFuZ2VzIGNhbiBiZSBkZXRlY3RlZCwgZm9yIGV4YW1wbGUsIHRocm91Z2ggZmlsZSBtb2RpZmljYXRpb24KKyAgICAgICAgICAgIHRpbWUgKG10aW1lKSBjaGFuZ2VzIGFuZCBoYXNoaW5nIG9mIGZpbGUgY29udGVudHMuCisgICAgICAgICAgICBJZiBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlIGFyZSBkZXRlY3RlZCwgdGhlbiB0aGUgcGFyc2VkIHJlc3VsdAorICAgICAgICAgICAgc3RvcmVkIGluIHRoZSBjYWNoZSBpcyByZXVzZWQuCisgICAgICAgICAgICBJZiB0aGUgZmlsZSBoYXMgY2hhbmdlZCwgaXQgaXMgcmVwYXJzZWQuCiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTgwMSw4ICs4MTMsOSBAQAogICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9zdGFtcHMvPC9maWxlbmFtZT48L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaG9sZHMgaW5mb3JtYXRpb24gdGhhdCBCaXRCYWtlIHVzZXMgZm9yIGFjY291bnRpbmcgcHVycG9zZXMKLSAgICAgICAgICAgIHRvIHRyYWNrIHdoYXQgdGFza3MgaGF2ZSBydW4gYW5kIHdoZW4gdGhleSBoYXZlIHJ1bi4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGhvbGRzIGluZm9ybWF0aW9uIHRoYXQgQml0QmFrZSB1c2VzIGZvcgorICAgICAgICAgICAgYWNjb3VudGluZyBwdXJwb3NlcyB0byB0cmFjayB3aGF0IHRhc2tzIGhhdmUgcnVuIGFuZCB3aGVuIHRoZXkKKyAgICAgICAgICAgIGhhdmUgcnVuLgogICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpcyBzdWItZGl2aWRlZCBieSBhcmNoaXRlY3R1cmUsIHBhY2thZ2UgbmFtZSwgYW5kCiAgICAgICAgICAgICB2ZXJzaW9uLgogICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGU6CkBAIC04MTIsNiArODI1LDEzIEBACiAgICAgICAgICAgICBBbHRob3VnaCB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgZW1wdHkgb2YgZGF0YSwKICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgZmlsZW5hbWVzIGFuZCB0aW1lc3RhbXBzIGZvciB0cmFja2luZyBwdXJwb3Nlcy4KICAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyBCaXRCYWtlIHVzZXMgc3RhbXAgZmlsZXMgdG8gZGV0ZXJtaW5lIGlmCisgICAgICAgICAgICBhIHRhc2sgc2hvdWxkIGJlIHJlcnVuLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RhbXAtZmlsZXMtYW5kLXRoZS1yZXJ1bm5pbmctb2YtdGFza3MnPlN0YW1wIEZpbGVzIGFuZCB0aGUgUmVydW5uaW5nIG9mIFRhc2tzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKICAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1sb2cnPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sCmluZGV4IGM0NmRlYmIuLmU5ODU5YzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwKQEAgLTE5LDYgKzE5LDEwIEBACiAgICAgPHBhcmE+CiAgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgbm9ybWFsIHRhc2tzIGFzc29jaWF0ZWQgd2l0aCBidWlsZGluZwogICAgICAgICBhIHJlY2lwZS4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGFza3MgYW5kIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN0YXNrcyc+VGFza3M8L3VsaW5rPiIgYW5kCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2RlcGVuZGVuY2llcyc+RGVwZW5kZW5jaWVzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb25zIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgogICAgIDwvcGFyYT4KIAogICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtYnVpbGQnPgpAQCAtMzEsNDMgKzM1LDIzIEBACiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKLSAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNoZWNrcGtnJz4KLSAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jaGVja3BrZzwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUgaW5jbHVkaW5nIGl0cyB1cHN0cmVhbQotICAgICAgICAgICAgdmVyc2lvbiBhbmQgc3RhdHVzLgotICAgICAgICAgICAgVGhlIHVwc3RyZWFtIHZlcnNpb24gYW5kIHN0YXR1cyByZXZlYWxzIHdoZXRoZXIgb3Igbm90IGEgdmVyc2lvbgotICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSBleGlzdHMgdXBzdHJlYW0gYW5kIGEgc3RhdHVzIG9mIG5vdCB1cGRhdGVkLCB1cGRhdGVkLAotICAgICAgICAgICAgb3IgdW5rbm93bi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jaGVja3BrZzwvZmlsZW5hbWU+IHRhc2sgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb2RhdGEnPjxmaWxlbmFtZT5kaXN0cm9kYXRhPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICBjbGFzcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVG8gYnVpbGQgdGhlIDxmaWxlbmFtZT5jaGVja3BrZzwvZmlsZW5hbWU+IHRhc2ssIHVzZSB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB3aXRoIHRoZSAiLWMiIG9wdGlvbiBhbmQKLSAgICAgICAgICAgIHRhc2sgbmFtZToKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbCAtYyBjaGVja3BrZwotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHJlc3VsdHMgYXJlIHN0b3JlZCBpbgotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxPR19ESVInPjxmaWxlbmFtZT4kTE9HX0RJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPiRCVUlMRF9ESVIvdG1wL2xvZzwvZmlsZW5hbWU+KS4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQogICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY29tcGlsZSc+CiAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIENvbXBpbGVzIHRoZSBzb3VyY2UgaW4gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSwgd2hpY2ggaXMgcG9pbnRlZAotICAgICAgICAgICAgdG8gYnkgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICBDb21waWxlcyB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICBUaGlzIHRhc2sgcnVucyB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNldAorICAgICAgICAgICAgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhpcyB0YXNrIGlzIHRvIHJ1biB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlPC9maWxlbmFtZT4gZnVuY3Rpb24gaWYgYSBtYWtlZmlsZQorICAgICAgICAgICAgKDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+bWFrZWZpbGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5HTlVtYWtlZmlsZTwvZmlsZW5hbWU+KSBpcyBmb3VuZC4KKyAgICAgICAgICAgIElmIG5vIHN1Y2ggZmlsZSBpcyBmb3VuZCwgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRhc2sgZG9lcyBub3RoaW5nLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC04Niw2ICs3MCwyMCBAQAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIENvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGFueSBidWlsZC10aW1lIGFuZAogICAgICAgICAgICAgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICBUaGUgdGFzayBydW5zIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2V0IHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoaXMgdGFzayBpcyB0byBydW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlIGNsZWFuPC9maWxlbmFtZT4gaWYgYSBtYWtlZmlsZQorICAgICAgICAgICAgKDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+bWFrZWZpbGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5HTlVtYWtlZmlsZTwvZmlsZW5hbWU+KSBpcyBmb3VuZCBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DTEVBTkJST0tFTic+PGZpbGVuYW1lPkNMRUFOQlJPS0VOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBpcyBub3Qgc2V0IHRvICIxIi4KKyAgICAgICAgICAgIElmIG5vIHN1Y2ggZmlsZSBpcyBmb3VuZCBvciB0aGUgPGZpbGVuYW1lPkNMRUFOQlJPS0VOPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byAiMSIsIHRoZSA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRhc2sgZG9lcyBub3RoaW5nLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0xMDIsMTggKzEwMCw2MiBAQAogICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+PC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdyaXRlcyBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgdG8gYmUgZGVwbG95ZWQgdG8gdGhlIGRlcGxveQotICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBkZWZpbmVkIGJ5IHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWURJUic+PGZpbGVuYW1lPkRFUExPWURJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBXcml0ZXMgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHRvIGJlIGRlcGxveWVkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgdGFzayBydW5zIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2V0IHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT4gdGFzayBpcyBhCi0gICAgICAgICAgICBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgdGFzaywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdGFzayBjYW4KLSAgICAgICAgICAgIGJlIGFjY2VsZXJhdGVkIHRocm91Z2ggc3N0YXRlIHVzZS4KLSAgICAgICAgICAgIFJlYWxpemUgYWxzbyB0aGF0IGlmIHRoZSB0YXNrIGlzIHJlLWV4ZWN1dGVkLCBhbnkgcHJldmlvdXMgb3V0cHV0Ci0gICAgICAgICAgICBpcyByZW1vdmVkIChpLmUuICJjbGVhbmVkIikuCisgICAgICAgICAgICBSZWNpcGVzIGltcGxlbWVudGluZyB0aGlzIHRhc2sgc2hvdWxkIGluaGVyaXQgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZXBsb3knPjxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGFuZCBzaG91bGQgd3JpdGUgdGhlIG91dHB1dCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZRElSJz48ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGNsYXNzIHNldHMgdXAKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPiBhcyBhIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSB0YXNrIHRoYXQKKyAgICAgICAgICAgIGNhbiBiZSBhY2NlbGVyYXRlZCB0aHJvdWdoIHNzdGF0ZSB1c2UuCisgICAgICAgICAgICBUaGUgc3N0YXRlIG1lY2hhbmlzbSB0YWtlcyBjYXJlIG9mIGNvcHlpbmcgdGhlIG91dHB1dCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHtERVBMT1lESVJ9PC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJfSU1BR0V9PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDx0aXRsZT5DYXV0aW9uPC90aXRsZT4KKyAgICAgICAgICAgICAgICBEbyBub3Qgd3JpdGUgdGhlIG91dHB1dCBkaXJlY3RseSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJfSU1BR0V9PC9maWxlbmFtZT4sIGFzIHRoaXMgY2F1c2VzCisgICAgICAgICAgICAgICAgdGhlIHNzdGF0ZSBtZWNoYW5pc20gdG8gbWFsZnVuY3Rpb24uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT4gdGFzayBpcyBub3QgYWRkZWQgYXMgYSB0YXNrCisgICAgICAgICAgICBieSBkZWZhdWx0IGFuZCBjb25zZXF1ZW50bHkgbmVlZHMgdG8gYmUgYWRkZWQgbWFudWFsbHkuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGUgdGFzayB0byBydW4gYWZ0ZXIKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIHlvdSBjYW4gYWRkIGl0IGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2NvbXBpbGUKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFkZGluZyA8ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT4gYWZ0ZXIgb3RoZXIgdGFza3Mgd29ya3MgdGhlCisgICAgICAgICAgICBzYW1lIHdheS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBhZGQgPGZpbGVuYW1lPmJlZm9yZSBkb19idWlsZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZCAodGhvdWdoIGl0IGlzCisgICAgICAgICAgICAgICAgaGFybWxlc3MpLCBiZWNhdXNlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2J1aWxkW3JlY3JkZXB0YXNrXSArPSAiZG9fZGVwbG95IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjZGVwZW5kZW5jaWVzJz5EZXBlbmRlbmNpZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+IHRhc2sgcmUtZXhlY3V0ZXMsIGFueQorICAgICAgICAgICAgcHJldmlvdXMgb3V0cHV0IGlzIHJlbW92ZWQgKGkuZS4gImNsZWFuZWQiKS4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIApAQCAtMjEzLDExICsyNTUsNTkgQEAKICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQ29waWVzIGZpbGVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSwgd2hpY2ggaXMgZGVmaW5lZCBieQotICAgICAgICAgICAgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUsCi0gICAgICAgICAgICB0byBhIGhvbGRpbmcgYXJlYSBkZWZpbmVkIGJ5IHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgQ29waWVzIGZpbGVzIHRoYXQgYXJlIHRvIGJlIHBhY2thZ2VkIGludG8gdGhlIGhvbGRpbmcgYXJlYQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhpcyB0YXNrIHJ1bnMgd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzZXQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIHdoaWNoIGlzIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrLCBhcyB3ZWxsIGFzIG90aGVyIHRhc2tzCisgICAgICAgICAgICB0aGF0IGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGRlcGVuZCBvbiB0aGUgaW5zdGFsbGVkIGZpbGVzCisgICAgICAgICAgICAoZS5nLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfZGViJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgIHJ1biB1bmRlcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZmFrZXJvb3QtYW5kLXBzZXVkbyc+ZmFrZXJvb3Q8L2xpbms+LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNhdXRpb248L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5zdGFsbGluZyBmaWxlcywgYmUgY2FyZWZ1bCBub3QgdG8gc2V0IHRoZSBvd25lciBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgSURzIG9mIHRoZSBpbnN0YWxsZWQgZmlsZXMgdG8gdW5pbnRlbmRlZCB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIFNvbWUgbWV0aG9kcyBvZiBjb3B5aW5nIGZpbGVzLCBub3RhYmx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA8ZmlsZW5hbWU+Y3A8L2ZpbGVuYW1lPiBjb21tYW5kLCBjYW4gcHJlc2VydmUgdGhlCisgICAgICAgICAgICAgICAgICAgIFVJRCBhbmQvb3IgR0lEIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IG5vdAorICAgICAgICAgICAgICAgICAgICB3aGF0IHlvdSB3YW50LgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aG9zdC11c2VyLWNvbnRhbWluYXRlZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBRQSBjaGVjayBjaGVja3MgZm9yIGZpbGVzIHRoYXQgcHJvYmFibHkgaGF2ZSB0aGUgd3JvbmcKKyAgICAgICAgICAgICAgICAgICAgb3duZXJzaGlwLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTYWZlIG1ldGhvZHMgZm9yIGluc3RhbGxpbmcgZmlsZXMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5zdGFsbDwvZmlsZW5hbWU+IHV0aWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB1dGlsaXR5IGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y3A8L2ZpbGVuYW1lPiBjb21tYW5kIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbm8tcHJlc2VydmU9b3duZXJzaGlwIiBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT50YXI8L2ZpbGVuYW1lPiBjb21tYW5kIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbm8tc2FtZS1vd25lciIgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0yMzQsOCArMzI0LDI2IEBACiAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFuYWx5emVzIHRoZSBjb250ZW50IG9mIHRoZSBob2xkaW5nIGFyZWEgYW5kIHNwbGl0cyBpdCBpbnRvIHN1YnNldHMKLSAgICAgICAgICAgIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgZmlsZXMuCisgICAgICAgICAgICBBbmFseXplcyB0aGUgY29udGVudCBvZiB0aGUgaG9sZGluZyBhcmVhCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCBzcGxpdHMgdGhlIGNvbnRlbnQgaW50byBzdWJzZXRzIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcworICAgICAgICAgICAgYW5kIGZpbGVzLgorICAgICAgICAgICAgVGhpcyB0YXNrIG1ha2VzIHVzZSBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+IHRhc2ssIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzaywgYWxzbyBzYXZlcyBzb21lIGltcG9ydGFudCBwYWNrYWdlIG1ldGFkYXRhLgorICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dERVNUV09SSyc+PGZpbGVuYW1lPlBLR0RFU1RXT1JLPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXV0b21hdGljYWxseS1hZGRlZC1ydW50aW1lLWRlcGVuZGVuY2llcyc+QXV0b21hdGljYWxseSBBZGRlZCBSdW50aW1lIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0zMDksOCArNDE3LDExIEBACiAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBDcmVhdGVzIHBhY2thZ2UgbWV0YWRhdGEgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGdlbmVyYXRlIHRoZQotICAgICAgICAgICAgZmluYWwgcGFja2FnZXMuCisgICAgICAgICAgICBTYXZlcyBwYWNrYWdlIG1ldGFkYXRhIGdlbmVyYXRlZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvIG1ha2UgaXQgYXZhaWxhYmxlIGdsb2JhbGx5LgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0zNDksMTYgKzQ2MCwyNSBAQAogICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBDb3BpZXMgYSBzdWJzZXQgb2YgdGhlIGZpbGVzIGluc3RhbGxlZCBieSB0aGUKKyAgICAgICAgICAgIFN0YWdlcyAoY29waWVzKSBhIHN1YnNldCBvZiB0aGUgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoZQogICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB0YXNrIGludG8gdGhlIHN5c3Jvb3QgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSB0byBvdGhlciByZWNpcGVzLgotICAgICAgICAgICAgRmlsZXMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgbm90IGJlIG5lZWRlZCBieSBvdGhlciByZWNpcGVzIGF0IGJ1aWxkCi0gICAgICAgICAgICB0aW1lIGFyZSBza2lwcGVkLgotICAgICAgICAgICAgU2tpcHBlZCBmaWxlcyBpbmNsdWRlIGZpbGVzIGluc3RhbGxlZCBpbnRvCi0gICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy48L2ZpbGVuYW1lPgotICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHdoYXQgZmlsZXMgYXJlIGNvcGllZCwgc2VlIHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3RhZ2luZyc+PGZpbGVuYW1lPnN0YWdpbmc8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgdGFzayBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzeXNyb290LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBhY2Nlc3MgdGhlc2UgZmlsZXMgZnJvbSBvdGhlciByZWNpcGVzLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUio8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIERpcmVjdG9yaWVzIHRoYXQgd291bGQgdHlwaWNhbGx5IG5vdCBiZSBuZWVkZWQgYnkgb3RoZXIgcmVjaXBlcyBhdAorICAgICAgICAgICAgYnVpbGQgdGltZSAoZS5nLiA8ZmlsZW5hbWU+L2V0YzwvZmlsZW5hbWU+KSBhcmUgbm90IGNvcGllZCBieQorICAgICAgICAgICAgZGVmYXVsdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHdoYXQgZGlyZWN0b3JpZXMgYXJlIGNvcGllZCBieSBkZWZhdWx0LCBzZWUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTUk9PVF9ESVJTJz48ZmlsZW5hbWU+U1lTUk9PVF9ESVJTKjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgWW91IGNhbiBjaGFuZ2UgdGhlc2UgdmFyaWFibGVzIGluc2lkZSB5b3VyIHJlY2lwZSBpZiB5b3UgbmVlZAorICAgICAgICAgICAgdG8gbWFrZSBhZGRpdGlvbmFsIChvciBmZXdlcikgZGlyZWN0b3JpZXMgYXZhaWxhYmxlIHRvIG90aGVyCisgICAgICAgICAgICByZWNpcGVzIGF0IGJ1aWxkIHRpbWUuCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KQEAgLTQxNyw2ICs1MzcsMzYgQEAKICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWM8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uKToKICAgICA8L3BhcmE+CiAKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNoZWNrcGtnJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jaGVja3BrZzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUgaW5jbHVkaW5nIGl0cyB1cHN0cmVhbQorICAgICAgICAgICAgdmVyc2lvbiBhbmQgc3RhdHVzLgorICAgICAgICAgICAgVGhlIHVwc3RyZWFtIHZlcnNpb24gYW5kIHN0YXR1cyByZXZlYWxzIHdoZXRoZXIgb3Igbm90IGEgdmVyc2lvbgorICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSBleGlzdHMgdXBzdHJlYW0gYW5kIGEgc3RhdHVzIG9mIG5vdCB1cGRhdGVkLCB1cGRhdGVkLAorICAgICAgICAgICAgb3IgdW5rbm93bi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jaGVja3BrZzwvZmlsZW5hbWU+IHRhc2sgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb2RhdGEnPjxmaWxlbmFtZT5kaXN0cm9kYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gYnVpbGQgdGhlIDxmaWxlbmFtZT5jaGVja3BrZzwvZmlsZW5hbWU+IHRhc2ssIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB3aXRoIHRoZSAiLWMiIG9wdGlvbiBhbmQKKyAgICAgICAgICAgIHRhc2sgbmFtZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbCAtYyBjaGVja3BrZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHJlc3VsdHMgYXJlIHN0b3JlZCBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxPR19ESVInPjxmaWxlbmFtZT4kTE9HX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPiRCVUlMRF9ESVIvdG1wL2xvZzwvZmlsZW5hbWU+KS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKwogICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY2hlY2t1cmknPgogICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NoZWNrdXJpPC9maWxlbmFtZT48L3RpdGxlPgogCkBAIC01NDEsNiArNjkxLDIyIEBACiAgICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0aW9uPgogCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1kZXZweXNoZWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19kZXZweXNoZWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3RhcnRzIGEgc2hlbGwgaW4gd2hpY2ggYW4gaW50ZXJhY3RpdmUgUHl0aG9uIGludGVycHJldGVyIGFsbG93cworICAgICAgICAgICAgeW91IHRvIGludGVyYWN0IHdpdGggdGhlIEJpdEJha2UgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBGcm9tIHdpdGhpbiB0aGlzIHNoZWxsLCB5b3UgY2FuIGRpcmVjdGx5IGV4YW1pbmUgYW5kIHNldAorICAgICAgICAgICAgYml0cyBmcm9tIHRoZSBkYXRhIHN0b3JlIGFuZCBleGVjdXRlIGZ1bmN0aW9ucyBhcyBpZiB3aXRoaW4KKyAgICAgICAgICAgIHRoZSBCaXRCYWtlIGVudmlyb25tZW50LgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtYXBwZGV2LWRldnB5c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgUHl0aG9uIFNoZWxsPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgPGZpbGVuYW1lPmRldnB5c2hlbGw8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKwogICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZGV2c2hlbGwnPgogICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2RldnNoZWxsPC9maWxlbmFtZT48L3RpdGxlPgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbAppbmRleCBkNTViY2NkLi5jZTMzMWQ4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwKQEAgLTUzNiw3ICs1MzYsNyBAQAogICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRpcmVjdG9yeSBpcyB0aGUgc2FtZSBhcyB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggaXMgZGVmaW5lZCBhczoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTID0gIiR7V09SS0RJUn0vJHtCUH0vIgorICAgICBTID0gIiR7V09SS0RJUn0vJHtCUH0iCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKQEAgLTk5NSw2ICs5OTUsMjkgQEAKICAgICAgQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKICAgICAgQkJDTEFTU0VYVEVORCA9KyAibXVsdGlsaWI6PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxseSwgdGhlIDxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSBnZW5lcmF0ZXMgcmVjaXBlIHZhcmlhbnRzIGJ5IHJld3JpdGluZworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzIGFuZCBhcHBseWluZyBvdmVycmlkZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9jbGFzcy1uYXRpdmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBnZW5lcmF0ZSBhIG5hdGl2ZSB2ZXJzaW9uIG9mIGEgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvbiAiZm9vIiBpcyByZXdyaXR0ZW4gdG8gYSA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvbiAiZm9vLW5hdGl2ZSIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRXZlbiB3aGVuIHVzaW5nIDxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT4sIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGlzIG9ubHkgcGFyc2VkIG9uY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBQYXJzaW5nIG9uY2UgYWRkcyBzb21lIGxpbWl0YXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBhIGRpZmZlcmVudCBmaWxlIGRlcGVuZGluZyBvbiB0aGUgdmFyaWFudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmNlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gc3RhdGVtZW50cyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB3aGVuIHRoZSByZWNpcGUgaXMgcGFyc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTEyMDIsNiArMTIyNSw0MiBAQAogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJNVUxUSUNPTkZJRyc+PGdsb3NzdGVybT5CQk1VTFRJQ09ORklHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQk1VTFRJQ09ORklHW2RvY10gPSAiU3BlY2lmaWVzIGVhY2ggc2VwYXJhdGUgY29uZmlndXJhdGlvbiB3aGVuIHlvdSBhcmUgYnVpbGRpbmcgdGFyZ2V0cyB3aXRoIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBlYWNoIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gd2hlbiB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHRhcmdldHMgd2l0aCBtdWx0aXBsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IGEgPHJlcGxhY2VhYmxlPm11bHRpY29uZmlnbmFtZTwvcmVwbGFjZWFibGU+IGZvcgorICAgICAgICAgICAgICAgICAgICBlYWNoIGNvbmZpZ3VyYXRpb24gZmlsZSB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNwZWNpZmllcyB0aHJlZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTVVMVElGT05GSUcgPSAiY29uZmlnQSBjb25maWdCIGNvbmZpZ0MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRWFjaCBjb25maWd1cmF0aW9uIGZpbGUgeW91IHVzZSBtdXN0IHJlc2lkZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3RvcnknczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL211bHRpY29uZmlnPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5idWlsZF9kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4vY29uZi9tdWx0aWNvbmZpZy9jb25maWdBLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQk1VTFRJQ09ORklHPC9maWxlbmFtZT4gaW4gYW4gZW52aXJvbm1lbnQgdGhhdAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyBidWlsZGluZyB0YXJnZXRzIHdpdGggbXVsdGlwbGUgY29uZmlndXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtYnVpbGRpbmctdGFyZ2V0cy13aXRoLW11bHRpcGxlLWNvbmZpZ3VyYXRpb25zJz5CdWlsZGluZyBUYXJnZXRzIHdpdGggTXVsdGlwbGUgQ29uZmlndXJhdGlvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJQQVRIJz48Z2xvc3N0ZXJtPkJCUEFUSDwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgQkJQQVRIW2RvY10gPSAiVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZSAuYmJjbGFzcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlIFBBVEggdmFyaWFibGUuIgpAQCAtMTMzNiwyOCArMTM5NSwyNSBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlBOJz48Z2xvc3N0ZXJtPkJQTjwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgQlBOW2RvY10gPSAiVGhlIGJhcmUgbmFtZSBvZiB0aGUgcmVjaXBlLiBUaGlzIHZhcmlhYmxlIGlzIGEgdmVyc2lvbiBvZiB0aGUgUE4gdmFyaWFibGUgYnV0IHJlbW92ZXMgY29tbW9uIHN1ZmZpeGVzIGFuZCBwcmVmaXhlcy4iCisgICAgICAgICAgICAgICAgQlBOW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBpcyBhIHZlcnNpb24gb2YgdGhlIFBOIHZhcmlhYmxlIGJ1dCByZW1vdmVzIGNvbW1vbiBzdWZmaXhlcyBhbmQgcHJlZml4ZXMuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGJhcmUgbmFtZSBvZiB0aGUgcmVjaXBlLgogICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGEgdmVyc2lvbiBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYnV0IHJlbW92ZXMgY29tbW9uIHN1ZmZpeGVzIHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1jcm9zczwvZmlsZW5hbWU+IGFzIHdlbGwKLSAgICAgICAgICAgICAgICAgICAgYXMgcmVtb3ZlcyBjb21tb24gcHJlZml4ZXMgc3VjaCBhcyBtdWx0aWxpYidzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggY29tbW9uIHByZWZpeGVzIGFuZCBzdWZmaXhlcworICAgICAgICAgICAgICAgICAgICByZW1vdmVkLCBzdWNoIGFzIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tY3Jvc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPiwgYW5kIG11bHRpbGliJ3MKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYjY0LTwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliMzItPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgIFRoZSBleGFjdCBsaXN0IG9mIHN1ZmZpeGVzIHJlbW92ZWQgaXMgc3BlY2lmaWVkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1BFQ0lBTF9QS0dTVUZGSVgnPjxmaWxlbmFtZT5TUEVDSUFMX1BLR1NVRkZJWDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGV4YWN0IGxpc3Qgb2YgcHJlZml4ZXMgcmVtb3ZlZCBpcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFjdCBsaXN0cyBvZiBwcmVmaXhlcyBhbmQgc3VmZml4ZXMgcmVtb3ZlZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUxQUkVGSVgnPjxmaWxlbmFtZT5NTFBSRUZJWDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgUHJlZml4ZXMgYXJlIHJlbW92ZWQgZm9yIDxmaWxlbmFtZT5tdWx0aWxpYjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bmF0aXZlc2RrLTwvZmlsZW5hbWU+IGNhc2VzLgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNQRUNJQUxfUEtHU1VGRklYJz48ZmlsZW5hbWU+U1BFQ0lBTF9QS0dTVUZGSVg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLCByZXNwZWN0aXZlbHkuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtMTk3MiwyMiArMjAyOCwzNiBAQAogICAgICAgICAgICAgICAgICAgICBBbiBpbnRlcm5hbCB2YXJpYWJsZSBzcGVjaWZ5aW5nIHRoZSBzcGVjaWFsIGNsYXNzIG92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGN1cnJlbnRseSBhcHBseSAoZS5nLiAiY2xhc3MtdGFyZ2V0IiwKICAgICAgICAgICAgICAgICAgICAgImNsYXNzLW5hdGl2ZSIsIGFuZCBzbyBmb3J0aCkuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzc2VzIHRoYXQgdXNlIHRoaXMgdmFyaWFibGUgc2V0IGl0IHRvCi0gICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzZXMgdGhhdCB1c2UgdGhpcyB2YXJpYWJsZSAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1uYXRpdmUnPjxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW5hdGl2ZXNkayc+PGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKSBzZXQgdGhlIHZhcmlhYmxlIHRvIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q0xBU1NPVkVSUklERTwvZmlsZW5hbWU+IGdldHMgaXRzIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcy10YXJnZXQiIHZhbHVlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5vcm1hbGx5IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhpcyB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkNMQVNTT1ZFUlJJREU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBnb2VzIGludG8KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBjYW4gYmUgdXNlZCBhcyBhbiBvdmVycmlkZS4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlICJweXRob24tbmF0aXZlIiBpcyBhZGRlZCB0bwotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgb25seSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPiBjYXNlOgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIG92ZXJyaWRlIGFsbG93cyB5b3UgdG8gaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICBleHRyYSBmaWxlcywgYnV0IG9ubHkgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldDoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHB5dGhvbi1uYXRpdmUiCisgICAgIGRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAgICAgIGluc3RhbGwgbXktZXh0cmEtZmlsZSAke0R9JHtzeXNjb25mZGlyfQorICAgICB9CiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gIm5hdGl2ZSIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QsIGFuZAorICAgICAgICAgICAgICAgICAgICB0byAib3RoZXIiIHdoZW4gbm90IGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGT09fY2xhc3MtbmF0aXZlID0gIm5hdGl2ZSIKKyAgICAgRk9PID0gIm90aGVyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBiZWhpbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNMQVNTT1ZFUlJJREU8L2ZpbGVuYW1lPiBpcyBzaW1wbHkgdGhhdCBpdCBpcworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTI1NzQsOCArMjY0NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICB0YXNrLgogICAgICAgICAgICAgICAgICAgICBUaGlzIGxvY2F0aW9uIGRlZmF1bHRzIHRvOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICR7V09SS0RJUn0vaW1hZ2UKKyAgICAgJHs8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz59L2ltYWdlCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPkNhdXRpb248L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGFza3MgdGhhdCByZWFkIGZyb20gb3Igd3JpdGUgdG8gdGhpcyBkaXJlY3Rvcnkgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBydW4gdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Zha2Vyb290LWFuZC1wc2V1ZG8nPmZha2Vyb290PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTI3NDgsMzQgKzI4MjMsMTE3IEBACiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgotICAgICAgICAgICAgICAgICAgICBMaXN0cyBhIHJlY2lwZSdzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICAgICAgICAgIChpLmUuIG90aGVyIHJlY2lwZSBmaWxlcykuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGxpc3RlZAotICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gYnVpbHQgYW5kIGhhdmUgdGhlaXIgY29udGVudHMgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgICAgICAgICAgIHN5c3Jvb3RzIGJlZm9yZSB0aGUgcmVjaXBlJ3MgY29uZmlndXJlIHRhc2sgaXMgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGFyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgcmVjaXBlcyB3aG9zZQorICAgICAgICAgICAgICAgICAgICBjb250ZW50cyAoZS5nLiBoZWFkZXJzIGFuZCBzaGFyZWQgbGlicmFyaWVzKSBhcmUgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSByZWNpcGUgYXQgYnVpbGQgdGltZS4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAotICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBwYWNrYWdlcy4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXBwZWFycyBpbiB0aGUgImEiIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgYSByZWNpcGUgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBhc3NpZ25tZW50OgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIERFUEVORFMgPSAiYiIKKyAgICAgREVQRU5EUyA9ICJiYXIiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBUaGUgcHJhY3RpY2FsIGVmZmVjdCBvZiB0aGUgcHJldmlvdXMgYXNzaWdubWVudCBpcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGFsbCBmaWxlcyBpbnN0YWxsZWQgYnkgYmFyIHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBzdGFnaW5nIHN5c3Jvb3QsIGdpdmVuIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVInPjxmaWxlbmFtZT5TVEFHSU5HX0RJUio8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLCBieSB0aGUgdGltZSB0aGUKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB0YXNrIGZvciByZWNpcGUgImEiIGRlcGVuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIHRhc2sgZm9yIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPiBydW5zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IGRlcGVuZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBhbnl0aGluZyB0aGF0IHJlY2lwZSAiYiIgcHV0cyBpbnRvIHN5c3Jvb3QKLSAgICAgICAgICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHdoZW4gcmVjaXBlICJhIiBpcyBjb25maWd1cmluZyBpdHNlbGYuCisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgZWFjaCByZWNpcGUgbGlzdGVkIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WzwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXJpYWJsZS1mbGFncyc+PGZpbGVuYW1lPmRlcHRhc2s8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPl08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmFzZSc+PGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgc2VsZG9tIGlzIG5lY2Vzc2FyeSB0byByZWZlcmVuY2UsIGZvciBleGFtcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPiBleHBsaWNpdGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHN0YW5kYXJkIGNsYXNzZXMgYW5kIGJ1aWxkLXJlbGF0ZWQgdmFyaWFibGVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB0byBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgYXBwcm9wcmlhdGUgc3RhZ2luZworICAgICAgICAgICAgICAgICAgICAgICAgc3lzcm9vdHMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW5vdGhlciBleGFtcGxlLCA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGNhbiBhbHNvCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgdG8gYWRkIHV0aWxpdGllcyB0aGF0IHJ1biBvbiB0aGUgYnVpbGQgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSByZWNpcGUgdGhhdCBtYWtlcyB1c2Ugb2YgYSBjb2RlIGdlbmVyYXRvcgorICAgICAgICAgICAgICAgICAgICBidWlsdCBieSB0aGUgcmVjaXBlIDxmaWxlbmFtZT5jb2RlZ2VuPC9maWxlbmFtZT4gbWlnaHQgaGF2ZQorICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFMgPSAiY29kZWdlbi1uYXRpdmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbmF0aXZlJz48ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBTkFUSVZFUEFUSCc+PGZpbGVuYW1lPkVYVFJBTkFUSVZFUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gaXMgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IsIHRvIGJlIG1vcmUgcHJlY2lzZSwgaXQgaXMgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUk9WSURFUyc+PGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLCB3aGljaCB1c3VhbGx5IG1hdGNoIHJlY2lwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0dGluZyBhIHBhY2thZ2UgbmFtZSBzdWNoIGFzICJmb28tZGV2IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGRvZXMgbm90IG1ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSAiZm9vIiBpbnN0ZWFkLCBhcyB0aGlzIHdpbGwgcHV0IGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYWxsIHRoZSBwYWNrYWdlcyB0aGF0IG1ha2UgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+LCB3aGljaCBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9zZSBmcm9tIDxmaWxlbmFtZT5mb28tZGV2PC9maWxlbmFtZT4sIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25lIHJlY2lwZSBoYXZpbmcgYW5vdGhlciByZWNpcGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBkb2VzIG5vdCBieSBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGFueSBydW50aW1lIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBwcm9kdWNlZCBieSB0aGUgdHdvIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGFzIGV4cGxhaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2F1dG9tYXRpY2FsbHktYWRkZWQtcnVudGltZS1kZXBlbmRlbmNpZXMnPkF1dG9tYXRpY2FsbHkgQWRkZWQgUnVudGltZSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCBydW50aW1lIGRlcGVuZGVuY2llcyB3aWxsIG9mdGVuIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIGF1dG9tYXRpY2FsbHksIG1lYW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBhbG9uZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaWNpZW50IGZvciBtb3N0IHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlcmludHVpdGl2ZWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGlzIG9mdGVuIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuIGZvciByZWNpcGVzIHRoYXQgaW5zdGFsbCBwcmVjb21waWxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgPGZpbGVuYW1lPmxpYmZvbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGEgcHJlY29tcGlsZWQgbGlicmFyeSB0aGF0IGxpbmtzIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmJhcjwvZmlsZW5hbWU+LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtpbmcgYWdhaW5zdCA8ZmlsZW5hbWU+bGliZm9vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMgYm90aCA8ZmlsZW5hbWU+bGliZm9vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5saWJiYXI8L2ZpbGVuYW1lPiB0byBiZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgYSA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB0aGF0IGluc3RhbGxzIDxmaWxlbmFtZT5saWJmb288L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgcmVjaXBlIHRoYXQgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmJhcjwvZmlsZW5hbWU+LCBvdGhlciByZWNpcGVzIG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwgdG8gbGluayBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJmb288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVudGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Rhc2tzJz5UYXNrczwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjZGVwZW5kZW5jaWVzJz5EZXBlbmRlbmNpZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwgZm9yIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gdGFza3MgYW5kIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0zMDcyLDE1ICszMjMwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGJ5IFVVSUQgdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBsb2NhdGUgdGhlIHJvb3QgZGV2aWNlCiAgICAgICAgICAgICAgICAgICAgIGV2ZW4gaWYgdGhlIGRldmljZSBuYW1lIGNoYW5nZXMgZHVlIHRvIGRpZmZlcmVuY2VzIGluCiAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5TWVNMSU5VWF9ST09UPC9maWxlbmFtZT4gaXMgc2V0CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5ST09UX1ZNPC9maWxlbmFtZT4gaXMgc2V0CiAgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgU1lTTElOVVhfUk9PVCA9ICJyb290PS9kZXYvc2RhMiIKKyAgICAgUk9PVF9WTSA/PSAicm9vdD0vZGV2L3NkYTIiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBjaGFuZ2UgdGhpcyB0byBsb2NhdGUgdGhlIHJvb3QgZGV2aWNlCiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBkaXNrIHNpZ25hdHVyZSBpbnN0ZWFkOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNZU0xJTlVYX1JPT1QgPSAicm9vdD1QQVJUVVVJRD0ke0RJU0tfU0lHTkFUVVJFfS0wMiIKKyAgICAgUk9PVF9WTSA9ICJyb290PVBBUlRVVUlEPSR7RElTS19TSUdOQVRVUkV9LTAyIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCkBAIC0zMzQxLDIwICszNDk5LDI4IEBACiAKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9PVkVSUklERVMnPjxnbG9zc3Rlcm0+RElTVFJPT1ZFUlJJREVTPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgICBESVNUUk9PVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLiBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhlIERJU1RSTyB2YXJpYWJsZS4iCisgICAgICAgICAgICAgICAgRElTVFJPT1ZFUlJJREVTW2RvY10gPSAiQSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgbGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhcmlhYmxlIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+RElTVFJPPC9saW5rPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGV4dGVuZCB0aGUgdmFyaWFibGUgdG8gYXBwbHkgYW55IHZhcmlhYmxlIG92ZXJyaWRlcwotICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCBhcyBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24gYW5kIGFyZSBub3QKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBpbiA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdGhyb3VnaAotICAgICAgICAgICAgICAgICAgICBzb21lIG90aGVyIG1lYW5zLgorICAgICAgICAgICAgICAgICAgICBBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBleHRlbmQgPGZpbGVuYW1lPkRJU1RST09WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBleHRyYSBvdmVycmlkZXMgdGhhdCBzaG91bGQgYXBwbHkgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIGJlaGluZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPT1ZFUlJJREVTPC9maWxlbmFtZT4gaXMgc2ltcGx5IHRoYXQgaXQKKyAgICAgICAgICAgICAgICAgICAgaXMgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0zNDYzLDEzICszNjI5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPiksCiAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT4gdmFyaWFibGUgc3BlY2lmaWVzCiAgICAgICAgICAgICAgICAgICAgIHRoZSBFRkkgYm9vdGxvYWRlciB0byB1c2UuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICJncnViLWVmaSIsIGJ1dCAiZ3VtbWlib290IiBjYW4gYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiZ3J1Yi1lZmkiLCBidXQgInN5c3RlbWQtYm9vdCIgY2FuIGJlIHVzZWQKICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZC1ib290Jz48ZmlsZW5hbWU+c3lzdGVtZC1ib290PC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CkBAIC0zODkzLDYgKzQwNTksMjcgQEAKICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAorICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBTkFUSVZFUEFUSCc+PGdsb3NzdGVybT5FWFRSQU5BVElWRVBBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBTkFUSVZFUEFUSFtkb2NdID0gIkEgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyBvZiAke1NUQUdJTkdfQklORElSX05BVElWRX0gYWRkZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEFUSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19CSU5ESVJfTkFUSVZFJz48ZmlsZW5hbWU+U1RBR0lOR19CSU5ESVJfTkFUSVZFPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHByZXBlbmRzCisgICAgICAgICAgICAgICAgICAgICIke1NUQUdJTkdfQklORElSX05BVElWRX0vZm9vOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9iYXI6IgorICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBTkFUSVZFUEFUSCA9ICJmb28gYmFyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfT0VDTUFLRSc+PGdsb3NzdGVybT5FWFRSQV9PRUNNQUtFPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KICAgICAgICAgICAgICAgICBFWFRSQV9PRUNNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBjbWFrZSBvcHRpb25zLiIKQEAgLTM5MTMsNiArNDEwMCwxMCBAQAogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gc2NyaXB0IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJR19DT05GQVJHUyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUdfQ09ORkFSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gcGFzc2luZyBjb25maWd1cmUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtMzkzMiw2ICs0MTIzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICIiLCB5b3UgbmVlZCB0byBzZXQgdGhlIHZhcmlhYmxlIHRvIHNwZWNpZnkgYW55IHJlcXVpcmVkCiAgICAgICAgICAgICAgICAgICAgIEdOVSBvcHRpb25zLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFsc28gbWFrZSB1c2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYVFJBX09FTUFLRTwvZmlsZW5hbWU+IHRvIHBhc3MgdGhlIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgIGZsYWdzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIApAQCAtNDA2MSwxMiArNDI2MSwxNiBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVMnPjxnbG9zc3Rlcm0+RklMRVM8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIEZJTEVTW2RvY10gPSAiVGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdGhhdCBhcmUgcGxhY2VkIGluIHBhY2thZ2VzLiIKKyAgICAgICAgICAgICAgICBGSUxFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgYXJlIHBsYWNlZCBpbiBhIHBhY2thZ2UuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdGhhdCBhcmUgcGxhY2VkIGluIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgcGxhY2VkIGluIGEKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGxpc3RzIHRoZSBwYWNrYWdlcyBnZW5lcmF0ZWQgYnkgYSByZWNpcGUuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+CkBAIC00MDc3LDcgKzQyODEsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgcGFja2FnZS4KICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEZJTEVTXyR7UE59ICs9ICIke2JpbmRpcn0vbXlkaXIxLyAke2JpbmRpcn0vbXlkaXIyL215ZmlsZSIKKyAgICAgRklMRVNfJHtQTn0gKz0gIiR7YmluZGlyfS9teWRpcjEgJHtiaW5kaXJ9L215ZGlyMi9teWZpbGUiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKQEAgLTQwOTIsNiArNDI5Niw4IEBACiAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlc2UgdmFyaWFibGVzIGF0IHRoZSB0b3Agb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBhbHNvIGZpbmQgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSB2YXJpb3VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18qPC9maWxlbmFtZT4gdmFyaWFibGVzIGluIHRoaXMgZmlsZS4KICAgICAgICAgICAgICAgICA8L25vdGU+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KQEAgLTQxMDYsNyArNDMxMiw2IEBACiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgdGhlc2UgZmlsZXMgdG8KICAgICAgICAgICAgICAgICAgICAgdGhlIFBNUy4KICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIApAQCAtNDM2MSw2ICs0NTY2LDI1IEBACiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GT1JDRV9ST19SRU1PVkUnPjxnbG9zc3Rlcm0+Rk9SQ0VfUk9fUkVNT1ZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGT1JDRV9ST19SRU1PVkVbZG9jXSA9ICJGb3JjZXMgdGhlIHJlbW92YWwgb2YgdGhlIHBhY2thZ2VzIGxpc3RlZCBpbiBST09URlNfUk9fVU5ORUVERUQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSByb290IGZpbGVzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yY2VzIHRoZSByZW1vdmFsIG9mIHRoZSBwYWNrYWdlcyBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJPT1RGU19ST19VTk5FRURFRDwvZmlsZW5hbWU+IGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIHRvICIxIiB0byBmb3JjZSB0aGUgcmVtb3ZhbCBvZiB0aGVzZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GVUxMX09QVElNSVpBVElPTic+PGdsb3NzdGVybT5GVUxMX09QVElNSVpBVElPTjwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgRlVMTF9PUFRJTUlaQVRJT05bZG9jXT0gIlRoZSBvcHRpb25zIHRvIHBhc3MgaW4gVEFSR0VUX0NGTEFHUyBhbmQgQ0ZMQUdTIHdoZW4gY29tcGlsaW5nIGFuIG9wdGltaXplZCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJy1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMicuIgpAQCAtNDU3MCw5MiArNDc5NCw2IEBACiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HVU1NSUJPT1RfQ0ZHJz48Z2xvc3N0ZXJtPkdVTU1JQk9PVF9DRkc8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIEdVTU1JQk9PVF9DRkdbZG9jXSA9ICJXaGVuIEVGSV9QUk9WSURFUiBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZSBHVU1NSUJPT1RfQ0ZHIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgc2hvdWxkIGJlIHVzZWQuIgotICAgICAgICAgICAgPC9pbmZvPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgotPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRUZJX1BST1ZJREVSJz48ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HVU1NSUJPT1RfQ0ZHPC9maWxlbmFtZT4gdmFyaWFibGUgc3BlY2lmaWVzIHRoZQotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBzaG91bGQgYmUgdXNlZC4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWd1bW1pYm9vdCc+PGZpbGVuYW1lPmd1bW1pYm9vdDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBjbGFzcyBzZXRzIHRoZSA8ZmlsZW5hbWU+R1VNTUlCT09UX0NGRzwvZmlsZW5hbWU+IGFzCi0gICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgR1VNTUlCT09UX0NGRyA/PSAiJHs8bGluayBsaW5rZW5kPSd2YXItUyc+UzwvbGluaz59L2xvYWRlci5jb25mIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHdW1taWJvb3QsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdC8nPkd1bW1pYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9nbG9zc2RlZj4KLSAgICAgICAgPC9nbG9zc2VudHJ5PgotCi0gICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1VNTUlCT09UX0VOVFJJRVMnPjxnbG9zc3Rlcm0+R1VNTUlCT09UX0VOVFJJRVM8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIEdVTU1JQk9PVF9FTlRSSUVTW2RvY10gPSAiV2hlbiBFRklfUFJPVklERVIgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUgR1VNTUlCT09UX0VOVFJJRVMgdmFyaWFibGUgc3BlY2lmaWVzIGEgbGlzdCBvZiBlbnRyeSBmaWxlcyAoKi5jb25mKSB0byBiZSBpbnN0YWxsZWQgY29udGFpbmluZyBvbmUgYm9vdCBlbnRyeSBwZXIgZmlsZS4iCi0gICAgICAgICAgICA8L2luZm8+Ci0gICAgICAgICAgICA8Z2xvc3NkZWY+Ci0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Ci08IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgotICAgICAgICAgICAgICAgICAgICBXaGVuCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdVTU1JQk9PVF9FTlRSSUVTPC9maWxlbmFtZT4gdmFyaWFibGUgc3BlY2lmaWVzCi0gICAgICAgICAgICAgICAgICAgIGEgbGlzdCBvZiBlbnRyeSBmaWxlcwotICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPiouY29uZjwvZmlsZW5hbWU+KSB0byBiZSBpbnN0YWxsZWQKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyBvbmUgYm9vdCBlbnRyeSBwZXIgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWd1bW1pYm9vdCc+PGZpbGVuYW1lPmd1bW1pYm9vdDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBjbGFzcyBzZXRzIHRoZSA8ZmlsZW5hbWU+R1VNTUlCT09UX0VOVFJJRVM8L2ZpbGVuYW1lPiBhcwotICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEdVTU1JQk9PVF9FTlRSSUVTID89ICIiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEd1bW1pYm9vdCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290Lyc+R3VtbWlib290IGRvY3VtZW50YXRpb248L3VsaW5rPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KLSAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HVU1NSUJPT1RfVElNRU9VVCc+PGdsb3NzdGVybT5HVU1NSUJPT1RfVElNRU9VVDwvZ2xvc3N0ZXJtPgotICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgR1VNTUlCT09UX1RJTUVPVVRbZG9jXSA9ICJXaGVuIEVGSV9QUk9WSURFUiBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZSBHVU1NSUJPT1RfVElNRU9VVCB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGJvb3QgbWVudSB0aW1lb3V0IGluIHNlY29uZHMuIgotICAgICAgICAgICAgPC9pbmZvPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgotPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRUZJX1BST1ZJREVSJz48ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HVU1NSUJPT1RfVElNRU9VVDwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcwotICAgICAgICAgICAgICAgICAgICB0aGUgYm9vdCBtZW51IHRpbWVvdXQgaW4gc2Vjb25kcy4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWd1bW1pYm9vdCc+PGZpbGVuYW1lPmd1bW1pYm9vdDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBjbGFzcyBzZXRzIHRoZSA8ZmlsZW5hbWU+R1VNTUlCT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPiBhcwotICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEdVTU1JQk9PVF9USU1FT1VUID89ICIxMCIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR3VtbWlib290LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9ndW1taWJvb3QvJz5HdW1taWJvb3QgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvZ2xvc3NkZWY+Ci0gICAgICAgIDwvZ2xvc3NlbnRyeT4KLQogICAgIDwvZ2xvc3NkaXY+CiAKICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1oJz48dGl0bGU+SDwvdGl0bGU+CkBAIC01OTQwLDcgKzYwNzgsNyBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUJz48Z2xvc3N0ZXJtPklOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVDwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgSU5ISUJJVF9QQUNLQUdFX1NUUklQW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLiIKKyAgICAgICAgICAgICAgICBJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVRbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBwcmV2ZW50cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmcm9tIHNwbGl0dGluZyBvdXQgZGVidWcgaW5mb3JtYXRpb24gZHVyaW5nIHBhY2thZ2luZyIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KQEAgLTU5NzYsNyArNjExNCwxOSBAQAogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbgorICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgcGFja2FnZXMgYW5kIHByZXZlbnRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2UgZnJvbSBjb250YWluaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdHJpcHMKKyAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzIGFuZCBwdXRzIHRoZSBkZWJ1Z2dpbmcgc3ltYm9scyBpbnRvCisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0tZGJnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgbm90IHNldAorICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSElCSVRfUEFDS0FHRV9TVFJJUDwvZmlsZW5hbWU+IHdoZW4geW91IHBsYW4KKyAgICAgICAgICAgICAgICAgICAgIHRvIGRlYnVnIGluIGdlbmVyYWwuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtNTk5NCw3MiArNjE0NCwxMDggQEAKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLCB3aGljaCBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGlzICJjcGlvLmd6Ii4KKyAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IGtlcm5lbCdzIGluaXRyYW1mcyBtZWNoYW5pc20sIGFzIG9wcG9zZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgUkFNIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW5pdHJkJz5pbml0cmQ8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20sIGV4cGVjdHMgYW4gb3B0aW9uYWxseSBjb21wcmVzc2VkIGNwaW8KKyAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUUkFNRlNfSU1BR0UnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0lNQUdFPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgICBJTklUUkFNRlNfSU1BR0VbZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYW4gYWRkaXRpb25hbCByZWNpcGUgYXMgYSBkZXBlbmRlbmN5IHRvIHlvdXIgcm9vdCBmaWxlc3lzdGVtIHJlY2lwZSAoZS5nLiBjb3JlLWltYWdlLXNhdG8pLiIKKyAgICAgICAgICAgICAgICBJTklUUkFNRlNfSU1BR0VbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIFBST1ZJREVTIG5hbWUgb2YgYW4gaW1hZ2UgcmVjaXBlIHRoYXQgaXMgdXNlZCB0byBidWlsZCBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpIGltYWdlLiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+Ci0gICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCBhbiBhZGRpdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciByb290IGZpbGVzeXN0ZW0gcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBhZGRpdGlvbmFsIHJlY2lwZSBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBpbml0aWFsIFJBTSBkaXNrCi0gICAgICAgICAgICAgICAgICAgIChpbml0cmFtZnMpIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbCBib290IG9mCi0gICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIHRvIGFjY29tcGxpc2ggc3VjaCB0aGluZ3MgYXMgbG9hZGluZwotICAgICAgICAgICAgICAgICAgICBrZXJuZWwgbW9kdWxlcyBwcmlvciB0byBtb3VudGluZyB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJPVklERVMnPjxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBuYW1lIG9mIGFuIGltYWdlIHJlY2lwZSB0aGF0IGlzIHVzZWQgdG8gYnVpbGQgYW4gaW5pdGlhbAorICAgICAgICAgICAgICAgICAgICBSQU0gZGlzayAoaW5pdHJhbWZzKSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgQW4gaW5pdHJhbWZzIHByb3ZpZGVzIGEgdGVtcG9yYXJ5IHJvb3QgZmlsZXN5c3RlbSB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgICBlYXJseSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gKGUuZy4gbG9hZGluZyBvZiBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgIG5lZWRlZCB0byBsb2NhdGUgYW5kIG1vdW50IHRoZSAicmVhbCIgcm9vdCBmaWxlc3lzdGVtKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCByZWNpcGUgaXMgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gcmVjaXBlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGV4YW1wbGUgaW5pdHJhbWZzIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gc2VsZWN0IHRoaXMgcmVjaXBlIHRvIHByb3ZpZGUgdGhlIGluaXRyYW1mcywKKyAgICAgICAgICAgICAgICAgICAgc2V0IDxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0U8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluaXRyYW1mcyBpbWFnZSByZWNpcGUgc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSVRSQU1GU19GU1RZUEVTJz48ZmlsZW5hbWU+SU5JVFJBTUZTX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHRoZSB2YXJpYWJsZSwgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIHlvdSB3YW50IGNyZWF0ZWQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2hpY2ggaXMgc2V0IGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSwgY2F1c2VzCi0gICAgICAgICAgICAgICAgICAgIGEgc2VwYXJhdGUgcmVjaXBlIHRvIGJlIGNyZWF0ZWQgdGhhdCByZXN1bHRzIGluIGFuCi0gICAgICAgICAgICAgICAgICAgIGluaXRyYW1mcyBpbWFnZSBuYW1lZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvLWluaXRyYW1mcy5iYjwvZmlsZW5hbWU+IHRvIGJlCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgSU5JVFJBTUZTX0lNQUdFID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYnkgcmVmZXJlbmNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3Bva3kvY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UnPjxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgYW5kIHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPjxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGlzIHZhcmlhYmxlIHRvIGEgbnVsbCBzdHJpbmcgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBJTklUUkFNRlNfSU1BR0UgPSAiIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRvIHNlZSBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT4gdmFyaWFibGUuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEtcG9reS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkJz48ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQ8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MnPjxmaWxlbmFtZT5rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgZmlsZSB0byBzZWUgaG93IHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT4gaXMgZW1wdHksIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0LCB0aGVuIG5vIGluaXRyYW1mcyBpcyBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgZm9yIG1vcmUgaW5mb3JtYXRpb24geW91IGNhbiBhbHNvIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSVRSQU1GU19JTUFHRV9CVU5ETEUnPjxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0VfQlVORExFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBhbGxvd3MgdGhlIGdlbmVyYXRlZCBpbWFnZSB0byBiZSBidW5kbGVkCisgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUga2VybmVsIGltYWdlLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAogICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSQU1GU19JTUFHRV9CVU5ETEUnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRVtkb2NdID0gIkNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSByZWNpcGUgc3BlY2lmaWVkIGJ5IElOSVRSQU1GU19JTUFHRSBpcyBydW4gdGhyb3VnaCBhbiBleHRyYSBwYXNzIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24gaW4gb3JkZXIgdG8gYnVpbGQgYSBzaW5nbGUgYmluYXJ5IHRoYXQgY29udGFpbnMgYm90aCB0aGUga2VybmVsIGltYWdlIGFuZCB0aGUgaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKS4iCisgICAgICAgICAgICAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRVtkb2NdID0gIkNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSByZWNpcGUgc3BlY2lmaWVkIGJ5IElOSVRSQU1GU19JTUFHRSBpcyBydW4gdGhyb3VnaCBhbiBleHRyYSBwYXNzIChkb19idW5kbGVfaW5pdHJhbWZzKSBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uIGluIG9yZGVyIHRvIGJ1aWxkIGEgc2luZ2xlIGJpbmFyeSB0aGF0IGNvbnRhaW5zIGJvdGggdGhlIGtlcm5lbCBpbWFnZSBhbmQgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGltYWdlIHJlY2lwZSBzcGVjaWZpZWQgYnkKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSVRSQU1GU19JTUFHRSc+PGZpbGVuYW1lPklOSVRSQU1GU19JTUFHRTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBpcyBydW4gdGhyb3VnaCBhbiBleHRyYSBwYXNzIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24KLSAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gYnVpbGQgYSBzaW5nbGUgYmluYXJ5IHRoYXQgY29udGFpbnMgYm90aCB0aGUKLSAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGFuZCB0aGUgaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKS4KLSAgICAgICAgICAgICAgICAgICAgVXNpbmcgYW4gZXh0cmEgY29tcGlsYXRpb24gcGFzcyBlbnN1cmVzIHRoYXQgd2hlbiBhIGtlcm5lbAotICAgICAgICAgICAgICAgICAgICBhdHRlbXB0cyB0byB1c2UgYW4gaW5pdHJhbWZzLCBpdCBkb2VzIG5vdCBlbmNvdW50ZXIKLSAgICAgICAgICAgICAgICAgICAgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHNob3VsZCB0aGUgaW5pdHJhbWZzIGluY2x1ZGUga2VybmVsCi0gICAgICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgICAgIGlzIHJ1biB0aHJvdWdoIGFuIGV4dHJhIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1idW5kbGVfaW5pdHJhbWZzJz48ZmlsZW5hbWU+ZG9fYnVuZGxlX2luaXRyYW1mczwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbiBpbiBvcmRlciB0byBidWlsZCBhIHNpbmdsZSBiaW5hcnkKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyBib3RoIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHRoZSBpbml0aWFsIFJBTSBkaXNrCisgICAgICAgICAgICAgICAgICAgIChpbml0cmFtZnMpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ha2VzIHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTkZJR19JTklUUkFNRlNfU09VUkNFJz48ZmlsZW5hbWU+Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgYW4gZXh0cmEgY29tcGlsYXRpb24gcGFzcyB0byBidW5kbGUgdGhlIGluaXRyYW1mcworICAgICAgICAgICAgICAgICAgICAgICAgYXZvaWRzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoZSBrZXJuZWwgcmVjaXBlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluaXRyYW1mcyByZWNpcGUgc2hvdWxkIHRoZSBpbml0cmFtZnMgaW5jbHVkZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTaG91bGQgdGhhdCBiZSB0aGUgY2FzZSwgdGhlIGluaXRyYW1mcyByZWNpcGUgZGVwZW5kcyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBmb3IgdGhlIGtlcm5lbCBtb2R1bGVzLCBhbmQgdGhlIGtlcm5lbCBkZXBlbmRzCisgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgaW5pdHJhbWZzIHJlY2lwZSBzaW5jZSB0aGUgaW5pdHJhbWZzIGlzIGJ1bmRsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+CkBAIC02MDcwLDkgKzYyNTYsMTEgQEAKICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgdmFyaWFibGUgdG8gIjEiIGluIGEgY29uZmlndXJhdGlvbiBmaWxlIGNhdXNlcwotICAgICAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBtYWtlIHRoZSBleHRyYSBwYXNzIGR1cmluZwotICAgICAgICAgICAgICAgICAgICBrZXJuZWwgY29tcGlsYXRpb246CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIHZhcmlhYmxlIHRvICIxIiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgYSBrZXJuZWwgaW1hZ2Ugd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5JVFJBTUZTX0lNQUdFJz48ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZWQgd2l0aGluOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIElOSVRSQU1GU19JTUFHRV9CVU5ETEUgPSAiMSIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgpAQCAtNjA4MCw3ICs2MjY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz48ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhpcyB2YXJpYWJsZSB0byBhIG51bGwgc3RyaW5nIGFzIGZvbGxvd3M6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA9ICIiCisgICAgIElOSVRSQU1GU19JTUFHRV9CVU5ETEUgPz0gIiIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUKQEAgLTc3MjcsMzYgKzc5MTUsNDEgQEAKIAogICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVPVkVSUklERVMnPjxnbG9zc3Rlcm0+TUFDSElORU9WRVJSSURFUzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgTUFDSElORU9WRVJSSURFU1tkb2NdID0gIkxpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBtYWNoaW5lLiBCeSBkZWZhdWx0LCB0aGlzIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIE1BQ0hJTkUuIgorICAgICAgICAgICAgICAgIE1BQ0hJTkVPVkVSUklERVNbZG9jXSA9ICJBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIG92ZXJyaWRlcyB0aGF0IGFwcGx5IHRvIHRoZSBjdXJyZW50IG1hY2hpbmUuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG1hY2hpbmUuCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NQUNISU5FPC9saW5rPjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGV4dGVuZCB0aGUgbGlzdCB0byBhcHBseSB2YXJpYWJsZSBvdmVycmlkZXMgZm9yCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgb2YgbWFjaGluZXMuCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhbGwgUUVNVSBlbXVsYXRlZCBtYWNoaW5lcyAoZS5nLiBxZW11YXJtLAotICAgICAgICAgICAgICAgICAgICBxZW11eDg2LCBhbmQgc28gZm9ydGgpIGluY2x1ZGUgYSBjb21tb24gZmlsZSBuYW1lZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHRoYXQgcHJlcGVuZHMgPGZpbGVuYW1lPk1BQ0hJTkVPVkVSUklERVM8L2ZpbGVuYW1lPiB3aXRoCi0gICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgb3ZlcnJpZGU6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICBNQUNISU5FT1ZFUlJJREVTID0uICJxZW11YWxsOiIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIG92ZXJyaWRlcyB0aGF0IGFwcGx5IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBcHBseWluZyBhbiBvdmVycmlkZSBsaWtlIDxmaWxlbmFtZT5xZW11YWxsPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgYWZmZWN0cyBhbGwgUUVNVSBlbXVsYXRlZCBtYWNoaW5lcyBlbHNld2hlcmUuCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29ubm1hbi1jb25mPC9maWxlbmFtZT4gcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGV4dGVuZCA8ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBleHRyYSBvdmVycmlkZXMgdGhhdCBzaG91bGQgYXBwbHkgdG8gYSBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWxsIG1hY2hpbmVzIGVtdWxhdGVkIGluIFFFTVUgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKSBpbmNsdWRlIGEgZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgcHJlcGVuZHMgdGhlIGZvbGxvd2luZyBvdmVycmlkZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgU1JDX1VSSV9hcHBlbmRfcWVtdWFsbCA9ICJmaWxlOi8vd2lyZWQuY29uZmlnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXJlZC1zZXR1cCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKyAgICAgTUFDSElORU9WRVJSSURFUyA9LiAicWVtdWFsbDoiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBvdmVycmlkZSBhbGxvd3MgdmFyaWFibGVzIHRvIGJlIG92ZXJyaWRlbiBmb3IgYWxsCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzIGVtdWxhdGVkIGluIFFFTVUsIGxpa2UgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5jb25ubWFuLWNvbmY8L2ZpbGVuYW1lPiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSV9hcHBlbmRfcWVtdWFsbCA9ICJmaWxlOi8vd2lyZWQuY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lyZWQtc2V0dXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBiZWhpbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkVPVkVSUklERVM8L2ZpbGVuYW1lPiBpcyBzaW1wbHkgdGhhdCBpdCBpcworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTc4MTcsNiArODAxMCwzOSBAQAogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlKS4KICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1MUFJFRklYPC9maWxlbmFtZT4gZ2V0cyBzZXQgd2hlbiBhIHByZWZpeCBoYXMgYmVlbgogICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgIk1MIiBpbiA8ZmlsZW5hbWU+TUxQUkVGSVg8L2ZpbGVuYW1lPiBzdGFuZHMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAiTXVsdGlMaWIiLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZXByZXNlbnRhdGlvbiBpcyBoaXN0b3JpY2FsIGFuZCBjb21lcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICBhIHRpbWUgd2hlbiA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gd2FzIGEgc3VmZml4CisgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBhIHByZWZpeCBvbiB0aGUgcmVjaXBlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiB3YXMgdHVybmVkIGludG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBpdCBtYWRlIHNlbnNlIHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1MUFJFRklYPC9maWxlbmFtZT4gZm9yIGl0IGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gaGVscCB1bmRlcnN0YW5kIHdoZW4gPGZpbGVuYW1lPk1MUFJFRklYPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWlnaHQgYmUgbmVlZGVkLCBjb25zaWRlciB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIHByb3ZpZGUgYSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiBhIHJlY2lwZSBpbiBhZGRpdGlvbiB0byB0aGUgdGFyZ2V0IHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgcmVjaXBlIGRlY2xhcmVzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIG9uIHRhc2tzIGluCisgICAgICAgICAgICAgICAgICAgIG90aGVyIHJlY2lwZXMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB0aGVuIGEgZGVwZW5kZW5jeSBvbiAiZm9vIiB3aWxsIGF1dG9tYXRpY2FsbHkgZ2V0IHJld3JpdHRlbgorICAgICAgICAgICAgICAgICAgICB0byBhIGRlcGVuZGVuY3kgb24gIm5hdGl2ZXNkay1mb28iLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBkZXBlbmRlbmNpZXMgbGlrZSB0aGUgZm9sbG93aW5nIHdpbGwgbm90IGdldAorICAgICAgICAgICAgICAgICAgICByZXdyaXR0ZW4gYXV0b21hdGljYWxseToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19mb29bZGVwZW5kc10gKz0gIjxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPjpkb19mb28iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgc3VjaCBhIGRlcGVuZGVuY3kgdG8gYWxzbyBnZXQgdHJhbnNmb3JtZWQsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19mb29bZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9PHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+OmRvX2ZvbyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTc5NTYsNiArODE4MiwzMSBAQAogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTVVMVElNQUNIX0hPU1RfU1lTJz48Z2xvc3N0ZXJtPk1VTFRJTUFDSF9IT1NUX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTVVMVElNQUNIX0hPU1RfU1lTW2RvY10gPSAiU2VwYXJhdGVzIGZpbGVzIGZvciBkaWZmZXJlbnQgbWFjaGluZXMgc3VjaCB0aGF0IHlvdSBjYW4gYnVpbGQgZm9yIG11bHRpcGxlIGhvc3QgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBidXQgZm9yIHRoZSAiSE9TVCIgc3lzdGVtLCBpbiBzaXR1YXRpb25zIHRoYXQgaW52b2x2ZSBhCisgICAgICAgICAgICAgICAgICAgICJIT1NUIiBhbmQgYSAiVEFSR0VUIiBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX1RBUkdFVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX1RBUkdFVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1BBQ0tBR0VfQVJDSH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGdsb3NzdGVybT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgTVVMVElNQUNIX1RBUkdFVF9TWVNbZG9jXSA9ICJTZXBhcmF0ZXMgZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcyBzdWNoIHRoYXQgeW91IGNhbiBidWlsZCBmb3IgbXVsdGlwbGUgdGFyZ2V0IG1hY2hpbmVzIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBkaXJlY3Rvcmllcy4iCkBAIC03OTYzLDEwICs4MjE0LDMzIEBACiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgotICAgICAgICAgICAgICAgICAgICBTZXBhcmF0ZXMgZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcyBzdWNoIHRoYXQgeW91IGNhbiBidWlsZAotICAgICAgICAgICAgICAgICAgICBmb3IgbXVsdGlwbGUgdGFyZ2V0IG1hY2hpbmVzIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBkaXJlY3Rvcmllcy4KLSAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiB0aGUgdGFyZ2V0IHN5c3RlbSBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggcGFja2FnZXMgYXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFsbG93cyBvdXRwdXQgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyB0byBiZSBwdXQgaW50byBkaWZmZXJlbnQgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1BBQ0tBR0VfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFNvbWUgY2xhc3NlcyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jcm9zcy1jYW5hZGlhbic+PGZpbGVuYW1lPmNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBtb2RpZnkgdGhlIDxmaWxlbmFtZT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZmlsZW5hbWU+IHZhbHVlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTVVMVElNQUNIX0hPU1RfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX0hPU1RfU1lTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBjb3JyZXNwb25kaW5nIHZhcmlhYmxlIGZvciB0aGUgaG9zdCBzeXN0ZW0gaW4KKyAgICAgICAgICAgICAgICAgICAgc2l0dWF0aW9ucyB0aGF0IGludm9sdmUgYSAiSE9TVCIgYW5kIGEgIlRBUkdFVCIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9UQVJHRVQnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9UQVJHRVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtODMwNCwxOCArODU3OCw2MCBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPk9WRVJSSURFUzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgT1ZFUlJJREVTW2RvY10gPSAiQml0QmFrZSB1c2VzIE9WRVJSSURFUyB0byBjb250cm9sIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UgcGFyc2VzIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorICAgICAgICAgICAgICAgIE9WRVJSSURFU1tkb2NdID0gIkEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2Ygb3ZlcnJpZGVzIHRoYXQgY3VycmVudGx5IGFwcGx5LiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+Ci0gICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29udHJvbAotICAgICAgICAgICAgICAgICAgICB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcwotICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgb3ZlcnJpZGVzIGFyZSBoYW5kbGVkCi0gICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIG92ZXJyaWRlcyB0aGF0IGN1cnJlbnRseSBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVzIGFyZSBhIEJpdEJha2UgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIHZhcmlhYmxlcyB0bworICAgICAgICAgICAgICAgICAgICBiZSBzZWxlY3RpdmVseSBvdmVycmlkZGVuIGF0IHRoZSBlbmQgb2YgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBvdmVycmlkZXMgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgdGhlICJzdGF0ZSIgZHVyaW5nIGJ1aWxkaW5nLCB3aGljaCBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCByZWNpcGUgYmVpbmcgYnVpbHQsIHRoZSBtYWNoaW5lIGZvciB3aGljaAorICAgICAgICAgICAgICAgICAgICBpdCBpcyBiZWluZyBidWlsdCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBpZiB0aGUgc3RyaW5nICJhbi1vdmVycmlkZSIgYXBwZWFycyBhcyBhbgorICAgICAgICAgICAgICAgICAgICBlbGVtZW50IGluIHRoZSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sIHRoZW4gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50IHdpbGwgb3ZlcnJpZGUgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICJvdmVycmlkZGVuIiBhdCB0aGUgZW5kIG9mIHBhcnNpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PX2FuLW92ZXJyaWRlID0gIm92ZXJyaWRkZW4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgb3ZlcnJpZGVzIG1lY2hhbmlzbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSB2YWx1ZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DTEFTU09WRVJSSURFJz48ZmlsZW5hbWU+Q0xBU1NPVkVSUklERTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVPVkVSUklERVMnPjxmaWxlbmFtZT5NQUNISU5FT1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST09WRVJSSURFUyc+PGZpbGVuYW1lPkRJU1RST09WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgaW1wb3J0YW50IG92ZXJyaWRlIGluY2x1ZGVkIGJ5IGRlZmF1bHQgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBuLSR7UE59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgb3ZlcnJpZGUgYWxsb3dzIHZhcmlhYmxlcyB0byBiZSBzZXQgZm9yIGEgc2luZ2xlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB3aXRoaW4gY29uZmlndXJhdGlvbiAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PX3BuLW15cmVjaXBlID0gIm15cmVjaXBlLXNwZWNpZmljIHZhbHVlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgQW4gZWFzeSB3YXkgdG8gc2VlIHdoYXQgb3ZlcnJpZGVzIGFwcGx5IGlzIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiBpbiB0aGUgb3V0cHV0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctdmlld2luZy12YXJpYWJsZS12YWx1ZXMnPlZpZXdpbmcgVmFyaWFibGUgVmFsdWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC04ODYzLDEwICs5MTc5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgYXJndW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFQ09ORklHX0NPTkZBUkdTJz48ZmlsZW5hbWU+UEFDS0FHRUNPTkZJR19DT05GQVJHUzwvZmlsZW5hbWU+PC9saW5rPikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dHJhIGFyZ3VtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIDxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcwpAQCAtODk1MCw2ICs5MjY5LDUwIEBACiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFQ09ORklHX0NPTkZBUkdTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VDT05GSUdfQ09ORkFSR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VDT05GSUdfQ09ORkFSR1NbZG9jXSA9ICJBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBnZW5lcmF0ZWQgZnJvbSBQQUNLQUdFQ09ORklHLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IG9mIG9wdGlvbnMgaGVscHMgb3RoZXIgY2xhc3NlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyB0YWtlIGFkdmFudGFnZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBtZWNoYW5pc20gd2l0aG91dAorICAgICAgICAgICAgICAgICAgICBoYXZpbmcgdG8gaW5jbHVkZSBvcHRpb25zIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT4sIGNvbnNpZGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX0NPTkZBUkdTID0gIiBcCisgICAgICAgICAgLXByZWZpeCAke3ByZWZpeH0gXAorICAgICAgICAgIC1zeXNyb290ICR7U1RBR0lOR19ESVJfTkFUSVZFfSBcCisgICAgICAgICAgLW5vLWdjYy1zeXNyb290CisgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJR19DT05GQVJHUzwvZmlsZW5hbWU+IGlzIHNldCB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRocmVlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4gbWVjaGFuaXNtLCB0aHVzCisgICAgICAgICAgICAgICAgICAgIGF2b2lkaW5nIGhhdmluZyB0byB1c2UgPGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSc+PGdsb3NzdGVybT5QQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KICAgICAgICAgICAgICAgICBQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZW2RvY10gPSAiUHJldmVudHMgYXV0b21hdGljIGNyZWF0aW9uIG9mIHRoZSBub3JtYWwgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBzdWNoIGFzIC1kZXYgYW5kIC1kYmcgaW4gYSBwYWNrYWdlZ3JvdXAgcmVjaXBlLiIKQEAgLTg5ODQsNiArOTM0NywzMSBAQAogICAgICAke1BOfS1kYmcgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRldiAke1BOfS1kb2MgJHtQTn0tbG9jYWxlICR7UEFDS0FHRV9CRUZPUkVfUE59ICR7UE59CiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHBhY2thZ2luZywgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGdvZXMgdGhyb3VnaCA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiBhbmQgdXNlcworICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byBlYWNoIHBhY2thZ2UgdG8gYXNzaWduIGZpbGVzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiBhIGZpbGUgbWF0Y2hlcyB0aGUgPGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgdGhhbiBvbmUgcGFja2FnZSBpbiA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZWFybGllc3QgKGxlZnRtb3N0KSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBpbiB0aGUgdmFyaWFibGUncyBsaXN0IHRoYXQgYXJlIGVtcHR5IChpLmUuIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIG5vbmUgb2YgdGhlIHBhdHRlcm5zIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5wa2c8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICBtYXRjaCBhbnkgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzaykgYXJlIG5vdCBnZW5lcmF0ZWQsIHVubGVzcyBnZW5lcmF0aW9uIGlzIGZvcmNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQUxMT1dfRU1QVFknPjxmaWxlbmFtZT5BTExPV19FTVBUWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKQEAgLTkwNjgsNiArOTQ1NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICB3aGVyZSA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+IHJlcHJlc2VudHMgdGhlIG1heGltdW0KICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHBhcmFsbGVsIHRocmVhZHMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjYW4KICAgICAgICAgICAgICAgICAgICAgcnVuLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Q2F1dGlvbjwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgPGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPiB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlLCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IG11c3QgYmUgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRU1BS0UnPjxmaWxlbmFtZT5FWFRSQV9PRU1BS0U8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQW4gZWFzeSB3YXkgdG8gZW5zdXJlIHRoaXMgaXMgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lX3J1bm1ha2U8L2ZpbGVuYW1lPiBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgpAQCAtOTExNCwxNiArOTUxMCwyNCBAQAogICAgICAgICAgICAgICAgICAgICB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uLgogICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4uCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGV4cGVyaWVuY2VzIGRlcGVuZGVuY3kKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlcyBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlcyBhbmQgQ2F1dGlvbnM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW4gb3JkZXIgZm9yIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFSU5TVDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlLCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IG11c3QgYmUgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRU1BS0UnPjxmaWxlbmFtZT5FWFRSQV9PRU1BS0U8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQW4gZWFzeSB3YXkgdG8gZW5zdXJlIHRoaXMgaXMgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lX3J1bm1ha2U8L2ZpbGVuYW1lPiBmdW5jdGlvbi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBleHBlcmllbmNlcworICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIHRoYXQgcmVzdWx0IGluCiAgICAgICAgICAgICAgICAgICAgICAgICByYWNlIGNvbmRpdGlvbnMsIHlvdSBjYW4gY2xlYXIgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRUlOU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoaW4KICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgYXMgYSB3b3JrYXJvdW5kLgogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGVidWdnaW5nLXBhcmFsbGVsLW1ha2UtcmFjZXMnPkRlYnVnZ2luZyBQYXJhbGxlbCBNYWtlIFJhY2VzPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLjwvcGFyYT4KICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CkBAIC05MjAxLDYgKzk2MDUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUKICAgICAgICAgICAgICAgICAgICAgd2F5LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0UnPjxmaWxlbmFtZT5QS0dFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIApAQCAtOTMxNiwxNCArOTcyNiwxNiBAQAogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgICAgICAgICB0YXNrIHBhY2thZ2VzIGRhdGEgZm9yIGVhY2ggcmVjaXBlIGFuZCBpbnN0YWxscyBpdCBpbnRvCiAgICAgICAgICAgICAgICAgICAgIHRoaXMgdGVtcG9yYXJ5LCBzaGFyZWQgYXJlYS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgZGVmYXVsdHMgdG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgZGVmYXVsdHMgdG8gdGhlIGZvbGxvd2luZywgd2hpY2ggeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICBub3QgY2hhbmdlOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YQogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb2YgaG93IHRoaXMgZGF0YSBpcyB1c2VkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdhdXRvbWF0aWNhbGx5LWFkZGVkLXJ1bnRpbWUtZGVwZW5kZW5jaWVzJz5BdXRvbWF0aWNhbGx5IEFkZGVkIFJ1bnRpbWUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2aWV3aW5nLXBhY2thZ2UtaW5mb3JtYXRpb24td2l0aC1vZS1wa2dkYXRhLXV0aWwnPlZpZXdpbmcgUGFja2FnZSBJbmZvcm1hdGlvbiB3aXRoIDxmaWxlbmFtZT5vZS1wa2dkYXRhLXV0aWw8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtOTM1NCw0NSArOTc2Niw0MSBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHREVTVFdPUksnPjxnbG9zc3Rlcm0+UEtHREVTVFdPUks8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIFBLR0RFU1RXT1JLW2RvY10gPSAiUG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSB1c2VkIGJ5IHRoZSBkb19wYWNrYWdlIHRhc2sgdG8gd3JpdGUgb3V0cHV0IGZyb20gdGhlIGRvX3BhY2thZ2VkYXRhIHRhc2suIgorICAgICAgICAgICAgICAgIFBLR0RFU1RXT1JLW2RvY10gPSAiUG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSB3aGVyZSB0aGUgZG9fcGFja2FnZSB0YXNrIHNhdmVzIHBhY2thZ2UgbWV0YWRhdGEuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHdoZXJlIHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdGFzayB0byB3cml0ZSBvdXRwdXQgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2VkYXRhJz48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBzYXZlcyBwYWNrYWdlIG1ldGFkYXRhLgogICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBLR0RFU1RXT1JLPC9maWxlbmFtZT4gbG9jYXRpb24gZGVmYXVsdHMgdG8KICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAke1dPUktESVJ9L3BrZ2RhdGEKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4gdGFzayB0aGVuIHBhY2thZ2VzCi0gICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhIGluIHRoZSB0ZW1wb3Jhcnkgd29yayBhcmVhIGFuZCBpbnN0YWxscyBpdCBpbnRvIGEKLSAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBEbyBub3QgY2hhbmdlIHRoaXMgZGVmYXVsdC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgY29waWVzIHRoZSBwYWNrYWdlIG1ldGFkYXRhIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBLR0RFU1RXT1JLPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdG8gbWFrZSBpdCBhdmFpbGFibGUgZ2xvYmFsbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHRSc+PGdsb3NzdGVybT5QS0dFPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgICBQS0dFW2RvY10gPSAiVGhlIGVwb2NoIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICAgICAgUEtHRVtkb2NdID0gIlRoZSBlcG9jaCBvZiB0aGUgcGFja2FnZShzKSBidWlsdCBieSB0aGUgcmVjaXBlLiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgcGFja2FnZShzKSBidWlsdCBieSB0aGUgcmVjaXBlLgogICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+UEtHRTwvZmlsZW5hbWU+IGlzIHNldCB0bwogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC9saW5rPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC05NDAxLDEzICs5ODA5LDEyIEBACiAKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dSJz48Z2xvc3N0ZXJtPlBLR1I8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIFBLR1JbZG9jXSA9ICJUaGUgcmV2aXNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgICAgICBQS0dSW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSBwYWNrYWdlKHMpIGJ1aWx0IGJ5IHRoZSByZWNpcGUuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBwYWNrYWdlKHMpIGJ1aWx0IGJ5IHRoZSByZWNpcGUuCiAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5QS0dSPC9maWxlbmFtZT4gaXMgc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KQEAgLTk0MTYsMTMgKzk4MjMsMTMgQEAKIAogICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR1YnPjxnbG9zc3Rlcm0+UEtHVjwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgUEtHVltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICAgICAgUEtHVltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlKHMpIGJ1aWx0IGJ5IHRoZSByZWNpcGUuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZShzKSBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgogICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+IGlzIHNldCB0bwogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPi4KICAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtOTU1OSw4ICs5OTY2LDUwIEBACiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgotICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHJlY2lwZS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUgaXMgInIwIi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzICJyMCIuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgcmV2aXNpb25zIG9mIHRoZSByZWNpcGUgY29udmVudGlvbmFsbHkgaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzICJyMSIsICJyMiIsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbmNyZWFzZXMsIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGlzIGNvbnZlbnRpb25hbGx5IHJlc2V0CisgICAgICAgICAgICAgICAgICAgIHRvICJyMCIuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3QgbmVlZCB0aGUgYWlkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB0byBrbm93IHdoZW4gdG8gcmVidWlsZCBhCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjY2hlY2tzdW1zJz5pbnB1dCBjaGVja3N1bXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1idWlsZC10bXAtc3RhbXBzJz5zdGFtcDwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zaGFyZWQgc3RhdGUgY2FjaGU8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc21zLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwcmltYXJpbHkgYmVjb21lcworICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudCB3aGVuIGEgcGFja2FnZSBtYW5hZ2VyIGR5bmFtaWNhbGx5IGluc3RhbGxzCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIG9uIGFuIGFscmVhZHkgYnVpbHQgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dSJz48ZmlsZW5hbWU+UEtHUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgaGVscHMgdGhlIHBhY2thZ2UgbWFuYWdlciBkaXN0aW5ndWlzaCB3aGljaCBwYWNrYWdlIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICBtb3N0IHJlY2VudCBvbmUgaW4gY2FzZXMgd2hlcmUgbWFueSBwYWNrYWdlcyBoYXZlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IChpLmUuIDxmaWxlbmFtZT5QS0dWPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBBIGNvbXBvbmVudCBoYXZpbmcgbWFueSBwYWNrYWdlcyB3aXRoIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IHVzdWFsbHkgbWVhbnMgdGhhdCB0aGUgcGFja2FnZXMgYWxsCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgdGhlIHNhbWUgdXBzdHJlYW0gdmVyc2lvbiwgYnV0IHdpdGggbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+KSB2ZXJzaW9uIHBhY2thZ2VzIGluY2x1ZGluZworICAgICAgICAgICAgICAgICAgICBwYWNrYWdpbmcgZml4ZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gZG9lcyBub3QgbmVlZCB0byBiZSBpbmNyZWFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjaGFuZ2VzIHRoYXQgZG8gbm90IGNoYW5nZSB0aGUgcGFja2FnZSBjb250ZW50cyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBtYW51YWxseSBtYW5hZ2luZyA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgY3VtYmVyc29tZSBhbmQgZXJyb3ItcHJvbmUsIGFuIGF1dG9tYXRlZCBzb2x1dGlvbiBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPldvcmtpbmcgV2l0aCBhIFBSIFNlcnZpY2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC05NjE5LDkgKzEwMDY4LDM0IEBACiAgICAgICAgICAgICAgICAgICAgIG51bWJlcnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlczoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQUkVGRVJSRURfVkVSU0lPTl9weXRob24gPSAiMi43LjMiCisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIzLjQuMCIKICAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiMy4xOSUiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHZlcnNpb24gaXMgbWF0Y2hlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1hdGNoIHRoZSB2ZXJzaW9uIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUncyBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0d28gcmVjaXBlcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjIuYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fZ2l0LmJiPC9maWxlbmFtZT4gd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fZ2l0LmJiPC9maWxlbmFtZT4gY29udGFpbnMgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFYgPSAiMS4xK2dpdCR7U1JDUFZ9IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgY29ycmVjdCB3YXkgdG8gc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vX2dpdC5iYjwvZmlsZW5hbWU+IGlzIGJ5IHVzaW5nIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50IHN1Y2ggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fZm9vID0gIjEuMStnaXQlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZSB0aGF0IHByZXZpb3VzIGV4YW1wbGUgYWdhaW5zdCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvcnJlY3QgZXhhbXBsZSwgd2hpY2ggZG9lcyBub3Qgd29yazoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fZm9vID0gImdpdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgdGhlIDxmaWxlbmFtZT5QUkVGRVJSRURfVkVSU0lPTjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNhbiBiZSBzZXQgYnkgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBhIHdheSB0aGF0CiAgICAgICAgICAgICAgICAgICAgIGlzIGhhcmQgdG8gY2hhbmdlLgpAQCAtOTYzOSw2ICsxMDExMywxMyBAQAogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX2ZvcmNldmFyaWFibGUgPSAiMy40JSIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+X2ZvcmNldmFyaWFibGU8L2ZpbGVuYW1lPiBvdmVycmlkZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgbm90IGhhbmRsZWQgc3BlY2lhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvdmVycmlkZSBvbmx5IHdvcmtzIGJlY2F1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzICJmb3JjZXZhcmlhYmxlIi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTk3NTEsNiArMTAyMzIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgIGxpYnBsZHM0LnNvIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdhdXRvbWF0aWNhbGx5LWFkZGVkLXJ1bnRpbWUtZGVwZW5kZW5jaWVzJz5BdXRvbWF0aWNhbGx5IEFkZGVkIFJ1bnRpbWUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKQEAgLTk3ODQsNiArMTAyNzEsNTEgQEAKICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCByZXN1bHRzIGluCiAgICAgICAgICAgICAgICAgICAgIHRoZSAibGliYXYiIHJlY2lwZSBhbHNvIGJlaW5nIGtub3duIGFzICJsaWJwb3N0cHJvYyIuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHByb3ZpZGluZyByZWNpcGVzIHVuZGVyIGFsdGVybmF0ZSBuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IG1lY2hhbmlzbSBpcyBhbHNvIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gaW1wbGVtZW50IHZpcnR1YWwgdGFyZ2V0cy4KKyAgICAgICAgICAgICAgICAgICAgQSB2aXJ0dWFsIHRhcmdldCBpcyBhIG5hbWUgdGhhdCBjb3JyZXNwb25kcyB0byBzb21lCisgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSAoZS5nLiBhIExpbnV4IGtlcm5lbCkuCisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgdGhhdCBwcm92aWRlIHRoZSBmdW5jdGlvbmFsaXR5IGluIHF1ZXN0aW9uIGxpc3QgdGhlCisgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdGFyZ2V0IGluIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBmdW5jdGlvbmFsaXR5IGluIHF1ZXN0aW9uIGNhbgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSB2aXJ0dWFsIHRhcmdldCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdG8gbGVhdmUgdGhlIGNob2ljZSBvZiBwcm92aWRlciBvcGVuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb252ZW50aW9uYWxseSwgdmlydHVhbCB0YXJnZXRzIGhhdmUgbmFtZXMgb24gdGhlIGZvcm0KKyAgICAgICAgICAgICAgICAgICAgInZpcnR1YWwvZnVuY3Rpb24iIChlLmcuICJ2aXJ0dWFsL2tlcm5lbCIpLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2xhc2ggaXMgc2ltcGx5IHBhcnQgb2YgdGhlIG5hbWUgYW5kIGhhcyBubworICAgICAgICAgICAgICAgICAgICBzeW50YWN0aWNhbCBzaWduaWZpY2FuY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHVzZWQgdG8gc2VsZWN0IHdoaWNoIHBhcnRpY3VsYXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGEgdmlydHVhbCB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QSBjb3JyZXNwb25kaW5nIG1lY2hhbmlzbSBmb3IgdmlydHVhbCBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgKHBhY2thZ2VzKSBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgbWVjaGFuaXNtIGRvZXMgbm90IGRlcGVuZCBvbiBhbnkgc3BlY2lhbAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBiZXlvbmQgb3JkaW5hcnkgdmFyaWFibGUgYXNzaWdubWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5WSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJzIHRvIHRoZSBwYWNrYWdlIG9mIHRoZSBjb21wb25lbnQgdGhhdCBtYW5hZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZXR0aW5nIHRoZSAicHJlZmVycmVkIHByb3ZpZGVyIiBmb3IgcnVudGltZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGlzIGFzIHNpbXBsZSBhcyB1c2luZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50IGluIGEgY29uZmlndXJhdGlvbiBmaWxlOjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gInVkZXYiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKQEAgLTk4NDYsMTIgKzEwMzc4LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCiAgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuCiAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcmVjaXBlIGlzIG5hbWVkCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHBhdF8yLjAuMS5iYjwvZmlsZW5hbWU+LCB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgIjIuMC4xIi4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4cGF0XzIuMC4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gd2lsbCBiZSAiMi4wLjEiLgogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiBpcyBnZW5lcmFsbHkgbm90IG92ZXJyaWRkZW4gd2l0aGluCi0gICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlIHVubGVzcyBpdCBpcyBidWlsZGluZyBhbiB1bnN0YWJsZSAoaS5lLiBkZXZlbG9wbWVudCkgdmVyc2lvbiBmcm9tIGEgc291cmNlIGNvZGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSB1bmxlc3MgaXQgaXMgYnVpbGRpbmcgYW4gdW5zdGFibGUgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQpIHZlcnNpb24gZnJvbSBhIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkKICAgICAgICAgICAgICAgICAgICAgKGUuZy4gR2l0IG9yIFN1YnZlcnNpb24pLgogICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dWJz48ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIApAQCAtOTk5Myw0MCArMTA1MzIsNTkgQEAKIAogICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJERVBFTkRTJz48Z2xvc3N0ZXJtPlJERVBFTkRTPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgICBSREVQRU5EU1tkb2NdID0gIkxpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKSB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGZvciB0aGUgcGFja2FnZSB0byBiZSBidWlsdC4gVGhleSBtdXN0IGJlIHRoZSBuYW1lcyBvZiBvdGhlciBwYWNrYWdlcyBhcyBsaXN0ZWQgaW4gdGhlIFBBQ0tBR0VTIHZhcmlhYmxlLCBub3QgcmVjaXBlIG5hbWVzIChQTikuIgorICAgICAgICAgICAgICAgIFJERVBFTkRTW2RvY10gPSAiTGlzdHMgcnVudGltZSBkZXBlbmRlbmNpZXMgb2YgYSBwYWNrYWdlLiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+Ci0gICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKQotICAgICAgICAgICAgICAgICAgICB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGluIG9yZGVyIGZvciB0aGUgYnVpbHQgcGFja2FnZSB0byBydW4KLSAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5LgotICAgICAgICAgICAgICAgICAgICBJZiBhIHBhY2thZ2UgaW4gdGhpcyBsaXN0IGNhbm5vdCBiZSBmb3VuZCBkdXJpbmcgdGhlIGJ1aWxkLAotICAgICAgICAgICAgICAgICAgICB5b3Ugd2lsbCBnZXQgYSBidWlsZCBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcnVudGltZSBkZXBlbmRlbmNpZXMgb2YgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIG90aGVyIHBhY2thZ2VzIHRoYXQgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBwYWNrYWdlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBhc3NpZ25tZW50IGRlY2xhcmVzIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+IG5lZWRzIHRoZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5iYXo8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICBiZSBpbnN0YWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfZm9vID0gImJhciBiYXoiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHR5cGVzIG9mIHBhY2thZ2UgcnVudGltZSBkZXBlbmRlbmNpZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYW5kIGFkZGVkLgorICAgICAgICAgICAgICAgICAgICBUaGVyZWZvcmUsIG1vc3QgcmVjaXBlcyBkbyBub3QgbmVlZCB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdhdXRvbWF0aWNhbGx5LWFkZGVkLXJ1bnRpbWUtZGVwZW5kZW5jaWVzJz5BdXRvbWF0aWNhbGx5IEFkZGVkIFJ1bnRpbWUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICBpbiBhIHJlY2lwZSwgeW91IGFyZSBlc3NlbnRpYWxseSBzdGF0aW5nIHRoYXQgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmFjdGljYWwgZWZmZWN0IG9mIHRoZSBhYm92ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBhc3NpZ25tZW50IGlzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhcjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YmF6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBkZWNsYXJlZCBhcyBkZXBlbmRlbmNpZXMgaW5zaWRlIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPiB3aGVuIGl0IGlzIHdyaXR0ZW4gb3V0IGJ5IG9uZSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfZGViJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBFeGFjdGx5IGhvdyB0aGlzIGlzIGRvbmUgZGVwZW5kcyBvbiB3aGljaCBwYWNrYWdlIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICBpcyB1c2VkLCB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcGFja2FnZSBtYW5hZ2VyIGluc3RhbGxzIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCBpdCB3aWxsIGtub3cgdG8gYWxzbyBpbnN0YWxsIHRoZSBwYWNrYWdlcyBvbgorICAgICAgICAgICAgICAgICAgICB3aGljaCBpdCBkZXBlbmRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBlbnN1cmUgdGhhdCB0aGUgcGFja2FnZXMgPGZpbGVuYW1lPmJhcjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmF6PC9maWxlbmFtZT4gZ2V0IGJ1aWx0LCB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gYXNzaWdubWVudCBhbHNvIGNhdXNlcyBhIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSB0byBiZSBhZGRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkZXBlbmRlbmN5IGlzIGZyb20gdGhlIHJlY2lwZSdzCiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1idWlsZCc+PGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHRhc2sgZGVwZW5kcyBvbiB0aGUgZXhpc3RlbmNlIG9mIGEgc3BlY2lmaWMgcGFja2FnZS4KLSAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAotICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBJUEsgcGFja2FnZXMuCi0gICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBhcHBlYXJzIGluIHRoZSAiYSIgcmVjaXBlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFJERVBFTkRTXyR7UE59ID0gImIiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIGZvciByZWNpcGUgImEiIGRlcGVuZHMKLSAgICAgICAgICAgICAgICAgICAgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2lwayc+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfaXBrPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyB0aGUgcGFja2FnZSBmaWxlIGZvciAiYiIgbXVzdCBiZSBhdmFpbGFibGUgd2hlbgotICAgICAgICAgICAgICAgICAgICB0aGUgb3V0cHV0IGZvciByZWNpcGUgImEiIGhhcyBiZWVuIGNvbXBsZXRlbHkgYnVpbHQuCi0gICAgICAgICAgICAgICAgICAgIE1vcmUgaW1wb3J0YW50bHksIHBhY2thZ2UgImEiIHdpbGwgYmUgbWFya2VkIGFzIGRlcGVuZGluZwotICAgICAgICAgICAgICAgICAgICBvbiBwYWNrYWdlICJiIiBpbiBhIG1hbm5lciB0aGF0IGlzIHVuZGVyc3Rvb2QgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICAgICAgKG5vdCB0byBiZSBjb25mdXNlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgdGFzayB0byB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCA8ZmlsZW5hbWU+YmFyPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXo8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KQEAgLTEwMDQ2LDcgKzEwNjA0LDggQEAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGUgYXBwbGllcwogICAgICAgICAgICAgICAgICAgICB0byBwYWNrYWdlcyBiZWluZyBidWlsdCwgeW91IHNob3VsZCBhbHdheXMgdXNlIHRoZSB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICBpbiBhIGZvcm0gd2l0aCBhbiBhdHRhY2hlZCBwYWNrYWdlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB3aXRoIGFuIGF0dGFjaGVkIHBhY2thZ2UgbmFtZSAocmVtZW1iZXIgdGhhdCBhCisgICAgICAgICAgICAgICAgICAgIHNpbmdsZSByZWNpcGUgY2FuIGJ1aWxkIG11bHRpcGxlIHBhY2thZ2VzKS4KICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgdGhhdCBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCiAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nCkBAIC0xMDA1OSwzOCArMTA2MTgsMzMgQEAKICAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyB0aGUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgbmFtZSBhcyBwYXJ0IG9mIHRoZQogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q2F1dGlvbjwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfJHtQTn0tZGV2PC9maWxlbmFtZT4gaW5jbHVkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkZWZhdWx0IGlzIHNldCBpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIGNhcmVmdWwgbm90IHRvIGFjY2lkZW50YWxseSByZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IHdoZW4gbW9kaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfJHtQTn0tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlICIrPSIgb3BlcmF0b3IgcmF0aGVyIHRoYW4gdGhlICI9IiBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBuYW1lIHlvdSBhdHRhY2ggdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG11c3QgYXBwZWFyCi0gICAgICAgICAgICAgICAgICAgIGFzIGl0IHdvdWxkIGluIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgYmVmb3JlIGFueSByZW5hbWluZyBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnkKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBsaWtlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSW4gbWFueSBjYXNlcyB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBhZGQKLSAgICAgICAgICAgICAgICAgICAgcnVudGltZSBkZXBlbmRlbmNpZXMgdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gc2luY2Ugc29tZSBhdXRvbWF0aWMKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcgb2NjdXJzOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2hsaWJkZXBzPC9maWxlbmFtZT48L2VtcGhhc2lzPjogIElmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBydW50aW1lIHBhY2thZ2UgY29udGFpbnMgYSBzaGFyZWQgbGlicmFyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4pLCB0aGUgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXMgdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIG90aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIHRvIHdoaWNoIGl0IGlzIGR5bmFtaWNhbGx5IGxpbmtlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBhZGRzIHRoZXNlIGxpYnJhcmllcyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHdoZW4gY3JlYXRpbmcgdGhlIHJ1bnRpbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGNkZXBzPC9maWxlbmFtZT48L2VtcGhhc2lzPjogIElmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2Ugc2hpcHMgYSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZmlsZSwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGlzIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZGQgaXRlbXMgdG8gdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gY3JlYXRlIHRoZSBydW50aW1lIHBhY2thZ2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgbmFtZXMgeW91IHVzZSB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IG11c3QgYXBwZWFyIGFzIHRoZXkgd291bGQgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLRyc+PGZpbGVuYW1lPlBLRzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbGxvd3MgYSBkaWZmZXJlbnQgbmFtZSB0byBiZSB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgZmluYWwgcGFja2FnZSAoZS5nLiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGViaWFuJz48ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhpcyB0byByZW5hbWUgcGFja2FnZXMpLCBidXQgdGhpcyBmaW5hbCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG5hbWUgY2Fubm90IGJlIHVzZWQgd2l0aCA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gaXMgbWVhbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgaW5kZXBlbmRlbnQgb2YgdGhlIHBhY2thZ2UgZm9ybWF0IHVzZWQuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+CkBAIC0xMDEyMyw2ICsxMDY3NywxMSBAQAogICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN0YXNrcyc+VGFza3M8L3VsaW5rPiIgYW5kCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2RlcGVuZGVuY2llcyc+RGVwZW5kZW5jaWVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGZvciBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIHRhc2tzIGFuZCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtMTAxNTAsMjggKzEwNzA5LDYgQEAKICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAotICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJNX09MRF9JTUFHRSc+PGdsb3NzdGVybT5STV9PTERfSU1BR0U8L2dsb3NzdGVybT4KLSAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIFJNX09MRF9JTUFHRVtkb2NdID0gIlJlY2xhaW1zIGRpc2sgc3BhY2UgYnkgcmVtb3ZpbmcgcHJldmlvdXNseSBidWlsdCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBpbWFnZSBmcm9tIHRoZSBpbWFnZXMgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlIERFUExPWV9ESVIgdmFyaWFibGUuIgotICAgICAgICAgICAgPC9pbmZvPgotICAgICAgICAgICAgPGdsb3NzZGVmPgotICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgotPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMSIgaW4geW91cgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gcmVtb3ZlIHRoZXNlCi0gICAgICAgICAgICAgICAgICAgIGltYWdlcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2dsb3NzZGVmPgotICAgICAgICA8L2dsb3NzZW50cnk+Ci0KICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1STV9XT1JLX0VYQ0xVREUnPjxnbG9zc3Rlcm0+Uk1fV09SS19FWENMVURFPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KICAgICAgICAgICAgICAgICBSTV9XT1JLX0VYQ0xVREVbZG9jXSA9ICJXaXRoIHJtX3dvcmsgZW5hYmxlZCwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhY2thZ2VzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiIKQEAgLTEwODAyLDYgKzExMzM5LDMzIEBACiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfSU5DTFVERV9UT09MQ0hBSU4nPjxnbG9zc3Rlcm0+U0RLX0lOQ0xVREVfVE9PTENIQUlOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfSU5DTFVERV9UT09MQ0hBSU5bZG9jXSA9ICJXaGVuIHNldCB0byAiMSIsIHNwZWNpZmllcyB0byBpbmNsdWRlIHRoZSB0b29sY2hhaW4gaW4gdGhlIGV4dGVuc2libGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICIxIiwgc3BlY2lmaWVzIHRvIGluY2x1ZGUgdGhlIHRvb2xjaGFpbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaWJsZSBTREsuCisgICAgICAgICAgICAgICAgICAgIEluY2x1ZGluZyB0aGUgdG9vbGNoYWluIGlzIHVzZWZ1bCBwYXJ0aWN1bGFybHkgd2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0VYVF9UWVBFJz48ZmlsZW5hbWU+U0RLX0VYVF9UWVBFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAibWluaW1hbCIgdG8ga2VlcCB0aGUgU0RLIHJlYXNvbmFibHkgc21hbGwKKyAgICAgICAgICAgICAgICAgICAgYnV0IHlvdSBzdGlsbCB3YW50IHRvIHByb3ZpZGUgYSB1c2FibGUgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3Ugd2FudCB0byB1c2UgdGhlIHRvb2xjaGFpbiBmcm9tIGFuCisgICAgICAgICAgICAgICAgICAgIElERSAoZS5nLiBFY2xpcHNlKSBvciBmcm9tIG90aGVyIHRvb2xzIGFuZCB5b3UgZG8gbm90CisgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHN0ZXBzIHRvIGluc3RhbGwgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TREtfSU5DTFVERV9UT09MQ0hBSU48L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byAiMCIgaWYgPGZpbGVuYW1lPlNES19FWFRfVFlQRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAibWluaW1hbCIsIGFuZCBkZWZhdWx0cyB0byAiMSIgaWYKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNES19FWFRfVFlQRTwvZmlsZW5hbWU+IGlzIHNldCB0byAiZnVsbCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX0lOSEVSSVRfQkxBQ0tMSVNUJz48Z2xvc3N0ZXJtPlNES19JTkhFUklUX0JMQUNLTElTVDwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgU0RLX0lOSEVSSVRfQkxBQ0tMSVNUW2RvY10gPSAiQSBsaXN0IG9mIGNsYXNzZXMgdG8gcmVtb3ZlIGZyb20gdGhlIElOSEVSSVQgdmFsdWUgZ2xvYmFsbHkgd2l0aGluIHRoZSBleHRlbnNpYmxlIFNESyBjb25maWd1cmF0aW9uLiIKQEAgLTExMzM2LDE1ICsxMTkwMCwyNCBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VSSUFMX0NPTlNPTEVTX0NIRUNLJz48Z2xvc3N0ZXJtPlNFUklBTF9DT05TT0xFU19DSEVDSzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgU0VSSUFMX0NPTlNPTEVTX0NIRUNLW2RvY10gPSAiU2ltaWxhciB0byBTRVJJQUxfQ09OU09MRVMgZXhjZXB0IHRoZSBkZXZpY2UgaXMgY2hlY2tlZCBmb3IgZXhpc3RlbmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGVuYWJsZSBpdC4gU3VwcG9ydGVkIG9ubHkgYnkgU3lzVmluaXQuIgorICAgICAgICAgICAgICAgIFNFUklBTF9DT05TT0xFU19DSEVDS1tkb2NdID0gIlNlbGVjdGVkIFNFUklBTF9DT05TT0xFUyB0byBjaGVjayBhZ2FpbnN0IC9wcm9jL2NvbnNvbGUgYmVmb3JlIGVuYWJsaW5nIHVzaW5nIGdldHR5LiBTdXBwb3J0ZWQgb25seSBieSBTeXNWaW5pdC4iCiAgICAgICAgICAgICA8L2luZm8+CiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgotICAgICAgICAgICAgICAgICAgICBTaW1pbGFyIHRvCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TRVJJQUxfQ09OU09MRVMnPjxmaWxlbmFtZT5TRVJJQUxfQ09OU09MRVM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHRoZSBkZXZpY2UgaXMgY2hlY2tlZCBmb3IgZXhpc3RlbmNlIGJlZm9yZSBhdHRlbXB0aW5nCi0gICAgICAgICAgICAgICAgICAgIHRvIGVuYWJsZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHNlcmlhbCBjb25zb2xlcywgd2hpY2ggbXVzdCBiZSBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFUklBTF9DT05TT0xFUyc+PGZpbGVuYW1lPlNFUklBTF9DT05TT0xFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdG8gY2hlY2sgYWdhaW5zdCA8ZmlsZW5hbWU+L3Byb2MvY29uc29sZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBlbmFibGluZyB0aGVtIHVzaW5nIGdldHR5LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFsbG93cyBhbGlhc2luZyBpbiB0aGUgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICAmbHQ7ZGV2aWNlJmd0OzombHQ7YWxpYXMmZ3Q7LgorICAgICAgICAgICAgICAgICAgICBJZiBhIGRldmljZSB3YXMgbGlzdGVkIGFzICJzY2xwX2xpbmUwIgorICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+L2Rldi88L2ZpbGVuYW1lPiBhbmQgInR0eVMwIiB3YXMgbGlzdGVkCisgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT4vcHJvYy9jb25zb2xlPC9maWxlbmFtZT4sIHlvdSB3b3VsZCBkbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNFUklBTF9DT05TT0xFU19DSEVDSyA9ICJzbGNwX2xpbmUwOnR0eVMwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIHdpdGggU3lzVmluaXQKICAgICAgICAgICAgICAgICAgICAgKGkuZS4gbm90IHdpdGggc3lzdGVtZCkuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtMTE5ODIsNyArMTI1NTUsNyBAQAogICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlLgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIFNTVEFURV9NSVJST1JTID89ICJcCi0gICAgIGZpbGU6Ly8uKiBodHRwOi8vPHJlcGxhY2VhYmxlPnNvbWVzZXJ2ZXI8L3JlcGxhY2VhYmxlPi50bGQvc2hhcmUvc3N0YXRlL1BBVEggXG4gXAorICAgICBmaWxlOi8vLiogaHR0cDovLzxyZXBsYWNlYWJsZT5zb21lc2VydmVyPC9yZXBsYWNlYWJsZT4udGxkL3NoYXJlL3NzdGF0ZS9QQVRIO2Rvd25sb2FkZmlsZW5hbWU9UEFUSCBcbiBcCiAgICAgIGZpbGU6Ly8uKiBmaWxlOi8vLzxyZXBsYWNlYWJsZT5zb21lLWxvY2FsLWRpcjwvcmVwbGFjZWFibGU+L3NzdGF0ZS9QQVRIIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtMTIxMjksMjggKzEyNzAyLDcxIEBACiAKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSX0hPU1Q8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIFNUQUdJTkdfRElSX0hPU1RbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHByaW1hcnkgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHdoaWNoIHRoZSB0YXJnZXQgaXMgYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgICAgIFNUQUdJTkdfRElSX0hPU1RbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgc3lzdGVtIHRoYXQgdGhlIGNvbXBvbmVudCBpcyBidWlsdCB0byBydW4gb24uIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBwcmltYXJ5IHN5c3Jvb3QgZGlyZWN0b3J5IGZvcgotICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgdGFyZ2V0IGlzIGJlaW5nIGJ1aWx0LgotICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgcmVjaXBlIGFuZCB0aGUgYnVpbGQgdGFyZ2V0LCB0aGUKLSAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgdmFsdWUgaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBjb21wb25lbnQgaXMgYnVpbHQgdG8gcnVuIG9uICh0aGUgc3lzdGVtIHRoYXQgaG9zdHMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbXBvbmVudCkuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3N0IHJlY2lwZXMsIHRoaXMgc3lzcm9vdCBpcyB0aGUgb25lIHRoYXQgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGNvcGllcyBmaWxlcyBpbnRvLgorICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25zIGluY2x1ZGUgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPiByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPiB0YXNrCisgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgdXNlcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfTkFUSVZFJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfTkFUSVZFPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgcmVjaXBlIGFuZCB0aGUgYnVpbGQgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+IGNhbiBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgdmFsdWVzOgogICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciByZWNpcGVzIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCB0aGUgdmFsdWUgaXMgIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0iLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSwgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7PGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSJz5TVEFHSU5HX0RJUjwvbGluaz59LyR7PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPk1BQ0hJTkU8L2xpbms+fSIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIG5hdGl2ZSByZWNpcGVzIGJ1aWxkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIGhvc3QsIHRoZSB2YWx1ZSBpcyBlbXB0eSBnaXZlbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VtcHRpb24gdGhhdCB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBob3N0J3Mgb3duIGRpcmVjdG9yaWVzIHNob3VsZCBiZSB1c2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdCwgdGhlIHZhbHVlIGlzIGVtcHR5IGdpdmVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VtcHRpb24gdGhhdCB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgaG9zdCdzIG93biBkaXJlY3RvcmllcyBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPiByZWNpcGVzIGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGludG8gaG9zdCBwYXRocyBsaWtlIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB0aGVzZSByZWNpcGVzIGFyZSBpbnN0YWxsZWQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19ESVJfTkFUSVZFPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gY29tcGlsaW5nIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgc3RhbmRhcmQgYnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNQUEZMQUdTJz48ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHNldCB1cCBzbyB0aGF0IGJvdGggaG9zdCBwYXRocyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfRElSX05BVElWRTwvZmlsZW5hbWU+IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hlZCBmb3IgbGlicmFyaWVzIGFuZCBoZWFkZXJzIHVzaW5nLCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgR0NDJ3MgPGZpbGVuYW1lPi1pc3lzdGVtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIGVtcGhhc2l6ZXMgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfRElSKjwvZmlsZW5hbWU+IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgdmlld2VkIGFzIGlucHV0IHZhcmlhYmxlcyBieSB0YXNrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGF2aW5nIHRoZSByZWFsIHN5c3RlbSByb290IGNvcnJlc3BvbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPiBtYWtlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jZXB0dWFsIHNlbnNlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZXMsIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXkgbWFrZSB1c2Ugb2YgaG9zdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIG5hdGl2ZSBTREsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgdGhhdCBidWlsZCBmb3IgdGhlIFNESwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiksIHRoZSB2YWx1ZSBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtTVEFHSU5HX0RJUn0vJHs8bGluayBsaW5rZW5kPSd2YXItTVVMVElNQUNIX0hPU1RfU1lTJz5NVUxUSU1BQ0hfSE9TVF9TWVM8L2xpbms+fSIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtMTIxNTksMjcgKzEyNzc1LDI5IEBACiAKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19ESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgICBTVEFHSU5HX0RJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSB1c2VkIHdoZW4gYnVpbGRpbmcgY29tcG9uZW50cyB0aGF0IHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBpdHNlbGYuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIGNvbXBvbmVudHMgdGhhdCBydW4gb24gdGhlIGJ1aWxkIGhvc3QgaXRzZWxmLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAogICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfRElSX1RBUkdFVCc+PGdsb3NzdGVybT5TVEFHSU5HX0RJUl9UQVJHRVQ8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIFNUQUdJTkdfRElSX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBiZWluZyBidWlsdC4iCisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIHRoZSBzeXN0ZW0gZm9yIHdoaWNoIHRoZSBjb21wb25lbnQgZ2VuZXJhdGVzIGNvZGUuIgogICAgICAgICAgICAgPC9pbmZvPgogICAgICAgICAgICAgPGdsb3NzZGVmPgogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LgotICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGlzIHBhdGggaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgc3lzcm9vdCB1c2VkIGZvciB0aGUgc3lzdGVtIGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgY29tcG9uZW50IGdlbmVyYXRlcyBjb2RlLgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcG9uZW50cyB0aGF0IGRvIG5vdCBnZW5lcmF0ZSBjb2RlLCB3aGljaCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFqb3JpdHksIDxmaWxlbmFtZT5TVEFHSU5HX0RJUl9UQVJHRVQ8L2ZpbGVuYW1lPiBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgdG8gbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIApAQCAtMTIxOTAsMTAgKzEyODA4LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRlcm1pbm9sb2d5IGZyb20gR05VLCB0aGUgcHJpbWFyeSBzeXN0ZW0gaXMgcmVmZXJyZWQKICAgICAgICAgICAgICAgICAgICAgdG8gYXMgdGhlICJIT1NUIiBhbmQgdGhlIHNlY29uZGFyeSwgb3IgZGlmZmVyZW50LCBzeXN0ZW0gaXMKICAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYXMgdGhlICJUQVJHRVQiLgotICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYmluYXJpZXMgcnVuIG9uIHRoZSAiSE9TVCIgc3lzdGVtIGFuZAorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYmluYXJpZXMgcnVuIG9uIHRoZSAiSE9TVCIgc3lzdGVtCiAgICAgICAgICAgICAgICAgICAgIGFuZCBnZW5lcmF0ZSBiaW5hcmllcyBmb3IgdGhlICJUQVJHRVQiIHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfRElSX1RBUkdFVDwvZmlsZW5hbWU+IHBvaW50cyB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCB1c2VkIGZvciB0aGUgIlRBUkdFVCIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwb2ludHMKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHN5c3Jvb3QgdXNlZCBmb3IgdGhlICJIT1NUIiBzeXN0ZW0sIHdoaWxlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFHSU5HX0RJUl9UQVJHRVQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHN5c3Jvb3QgdXNlZCBmb3IgdGhlICJUQVJHRVQiIHN5c3RlbS4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xMjMzNSw2ICsxMjk1NSwxMyBAQAogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IEJpdEJha2UgdXNlcyBzdGFtcCBmaWxlcyB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgYSB0YXNrIHNob3VsZCBiZSByZXJ1biwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RhbXAtZmlsZXMtYW5kLXRoZS1yZXJ1bm5pbmctb2YtdGFza3MnPlN0YW1wIEZpbGVzIGFuZCB0aGUgUmVydW5uaW5nIG9mIFRhc2tzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgU2VlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUFNfRElSJz48ZmlsZW5hbWU+U1RBTVBTX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX1RBUkdFVF9TWVM8L2ZpbGVuYW1lPjwvbGluaz4sCiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+LApAQCAtMTI1MTksNiArMTMxNDYsOTUgQEAKICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAorICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU1JPT1RfRElSUyc+PGdsb3NzdGVybT5TWVNST09UX0RJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU1JPT1RfRElSU1tkb2NdID0gIkRpcmVjdG9yaWVzIHRoYXQgYXJlIHN0YWdlZCBpbnRvIHRoZSBzeXNyb290IGJ5IHRoZSBkb19wb3B1bGF0ZV9zeXNyb290IHRhc2suIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3JpZXMgdGhhdCBhcmUgc3RhZ2VkIGludG8gdGhlIHN5c3Jvb3QgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIGFyZSBzdGFnZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTUk9PVF9ESVJTID0gIiBcCisgICAgICAgICAke2luY2x1ZGVkaXJ9IFwKKyAgICAgICAgICR7bGliZGlyfSBcCisgICAgICAgICAke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICR7ZGF0YWRpcn0gXAorICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNST09UX0RJUlNfQkxBQ0tMSVNUJz48Z2xvc3N0ZXJtPlNZU1JPT1RfRElSU19CTEFDS0xJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU1JPT1RfRElSU19CTEFDS0xJU1RbZG9jXSA9ICJEaXJlY3RvcmllcyB0aGF0IGFyZSBub3Qgc3RhZ2VkIGludG8gdGhlIHN5c3Jvb3QgYnkgdGhlIGRvX3BvcHVsYXRlX3N5c3Jvb3QgdGFzay4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyB0aGF0IGFyZSBub3Qgc3RhZ2VkIGludG8gdGhlIHN5c3Jvb3QgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGV4Y2x1ZGUgY2VydGFpbiBzdWJkaXJlY3RvcmllcworICAgICAgICAgICAgICAgICAgICBvZiBkaXJlY3RvcmllcyBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1JPT1RfRElSUyc+PGZpbGVuYW1lPlNZU1JPT1RfRElSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmcm9tIHN0YWdpbmcuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgYXJlIG5vdCBzdGFnZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTUk9PVF9ESVJTX0JMQUNLTElTVCA9ICIgXAorICAgICAgICAgJHttYW5kaXJ9IFwKKyAgICAgICAgICR7ZG9jZGlyfSBcCisgICAgICAgICAke2luZm9kaXJ9IFwKKyAgICAgICAgICR7ZGF0YWRpcn0vbG9jYWxlIFwKKyAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zIFwKKyAgICAgICAgICR7ZGF0YWRpcn0vZm9udHMgXAorICAgICAgICAgJHtkYXRhZGlyfS9waXhtYXBzIFwKKyAgICAgIgorICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU1JPT1RfRElSU19OQVRJVkUnPjxnbG9zc3Rlcm0+U1lTUk9PVF9ESVJTX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTUk9PVF9ESVJTX05BVElWRVtkb2NdID0gIkV4dHJhIGRpcmVjdG9yaWVzIHN0YWdlZCBpbnRvIHRoZSBzeXNyb290IGJ5IHRoZSBkb19wb3B1bGF0ZV9zeXNyb290IHRhc2sgZm9yIC1uYXRpdmUgcmVjaXBlcywgaW4gYWRkaXRpb24gdG8gdGhvc2Ugc3BlY2lmaWVkIGluIFNZU1JPT1RfRElSUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBFeHRyYSBkaXJlY3RvcmllcyBzdGFnZWQgaW50byB0aGUgc3lzcm9vdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZm9yIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gcmVjaXBlcywgaW4gYWRkaXRpb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGhvc2Ugc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNST09UX0RJUlMnPjxmaWxlbmFtZT5TWVNST09UX0RJUlM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBmb2xsb3dpbmcgZXh0cmEgZGlyZWN0b3JpZXMgYXJlIHN0YWdlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNST09UX0RJUlNfTkFUSVZFID0gIiBcCisgICAgICAgICAke2JpbmRpcn0gXAorICAgICAgICAgJHtzYmluZGlyfSBcCisgICAgICAgICAke2Jhc2VfYmluZGlyfSBcCisgICAgICAgICAke2Jhc2Vfc2JpbmRpcn0gXAorICAgICAgICAgJHtsaWJleGVjZGlyfSBcCisgICAgICAgICAke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyBidWlsdCBieSA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBzeXNyb290CisgICAgICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX05BVElWRSc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX05BVElWRTwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB3aHkgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBjb250YWluaW5nIHByb2dyYW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGFuZCBzdXBwb3J0aW5nIGZpbGVzIG5lZWQgdG8gYmUgc3RhZ2VkLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTJz48Z2xvc3N0ZXJtPlNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTW2RvY10gPSAiQSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIGFmdGVyIGZpbGVzIGFyZSBzdGFnZWQgaW50byB0aGUgc3lzcm9vdC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IHVzZWQgdG8gYXBwbHkgYWRkaXRpb25hbCBwcm9jZXNzaW5nIG9uIHRoZSBzdGFnZWQgZmlsZXMsIG9yIHRvIHN0YWdlIGFkZGl0aW9uYWwgZmlsZXMuIgpAQCAtMTI1NjUsNiArMTMyODEsOTIgQEAKICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAorICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU1RFTURfQk9PVF9DRkcnPjxnbG9zc3Rlcm0+U1lTVEVNRF9CT09UX0NGRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTVEVNRF9CT09UX0NGR1tkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAic3lzdGVtZC1ib290IiwgdGhlIFNZU1RFTURfQk9PVF9DRkcgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBzaG91bGQgYmUgdXNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJzeXN0ZW1kLWJvb3QiLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNZU1RFTURfQk9PVF9DRkc8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHNob3VsZCBiZSB1c2VkLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZC1ib290Jz48ZmlsZW5hbWU+c3lzdGVtZC1ib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5TWVNURU1EX0JPT1RfQ0ZHPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNURU1EX0JPT1RfQ0ZHID89ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1TJz5TPC9saW5rPn0vbG9hZGVyLmNvbmYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIFN5c3RlbWQtYm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3N5c3RlbWQvc3lzdGVtZC1ib290Lyc+U3lzdGVtZC1ib290IGRvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNURU1EX0JPT1RfRU5UUklFUyc+PGdsb3NzdGVybT5TWVNURU1EX0JPT1RfRU5UUklFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTVEVNRF9CT09UX0VOVFJJRVNbZG9jXSA9ICJXaGVuIEVGSV9QUk9WSURFUiBpcyBzZXQgdG8gInN5c3RlbWQtYm9vdCIsIHRoZSBTWVNURU1EX0JPT1RfRU5UUklFUyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIGVudHJ5IGZpbGVzICgqLmNvbmYpIHRvIGJlIGluc3RhbGxlZCBjb250YWluaW5nIG9uZSBib290IGVudHJ5IHBlciBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gInN5c3RlbWQtYm9vdCIsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1lTVEVNRF9CT09UX0VOVFJJRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgYSBsaXN0IG9mIGVudHJ5IGZpbGVzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4pIHRvIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIG9uZSBib290IGVudHJ5IHBlciBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZC1ib290Jz48ZmlsZW5hbWU+c3lzdGVtZC1ib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5TWVNURU1EX0JPT1RfRU5UUklFUzwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9CT09UX0VOVFJJRVMgPz0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gU3lzdGVtZC1ib290LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZC9zeXN0ZW1kLWJvb3QvJz5TeXN0ZW1kLWJvb3QgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU1RFTURfQk9PVF9USU1FT1VUJz48Z2xvc3N0ZXJtPlNZU1RFTURfQk9PVF9USU1FT1VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNURU1EX0JPT1RfVElNRU9VVFtkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAic3lzdGVtZC1ib290IiwgdGhlIFNZU1RFTURfQk9PVF9USU1FT1VUIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYm9vdCBtZW51IHRpbWVvdXQgaW4gc2Vjb25kcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJzeXN0ZW1kLWJvb3QiLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNZU1RFTURfQk9PVF9USU1FT1VUPC9maWxlbmFtZT4gdmFyaWFibGUgc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBib290IG1lbnUgdGltZW91dCBpbiBzZWNvbmRzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZC1ib290Jz48ZmlsZW5hbWU+c3lzdGVtZC1ib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5TWVNURU1EX0JPT1RfVElNRU9VVDwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9CT09UX1RJTUVPVVQgPz0gIjEwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBTeXN0ZW1kLWJvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kL3N5c3RlbWQtYm9vdC8nPlN5c3RlbWQtYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTVEVNRF9QQUNLQUdFUyc+PGdsb3NzdGVybT5TWVNURU1EX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KICAgICAgICAgICAgICAgICBTWVNURU1EX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGxvY2F0ZXMgdGhlIHN5c3RlbWQgdW5pdCBmaWxlcyB3aGVuIHRoZXkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWFpbiByZWNpcGUncyBwYWNrYWdlLiIKQEAgLTE0MjU1LDcgKzE1MDU3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgdGFzay4KICAgICAgICAgICAgICAgICAgICAgTm9ybWFsbHksIGludmFsaWQgY29uZmlndXJlIG9wdGlvbnMgYXJlIHNpbXBseSBub3QgcGFzc2VkCiAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IChlLmcuIHNob3VsZCBiZSByZW1vdmVkIGZyb20KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VDT05GSUdfQ09ORkFSR1MnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT48L2xpbms+KS4KICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgY29tbW9uIG9wdGlvbnMsIGZvciBleGFtcGxlLCBleGlzdCB0aGF0IGFyZSBwYXNzZWQKICAgICAgICAgICAgICAgICAgICAgdG8gYWxsIGNvbmZpZ3VyZSBzY3JpcHRzIGF0IGEgY2xhc3MgbGV2ZWwgdGhhdCBtaWdodCBub3QKICAgICAgICAgICAgICAgICAgICAgYmUgdmFsaWQgZm9yIHNvbWUgY29uZmlndXJlIHNjcmlwdHMuCkBAIC0xNDMwMCw2ICsxNTEwNCw4NCBAQAogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVgnPjxnbG9zc3Rlcm0+VVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVhbZG9jXSA9ICJGaWx0ZXJzIHJlbGV2YW50IEdpdCB0YWdzIHdoZW4gZmV0Y2hpbmcgc291cmNlIGZyb20gYW4gdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHJvZGF0YSc+PGZpbGVuYW1lPmRpc3Ryb2RhdGE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaXMgZW5hYmxlZCBnbG9iYWxseSwgeW91IGNhbiBwZXJmb3JtIGEgcGVyLXJlY2lwZQorICAgICAgICAgICAgICAgICAgICBjaGVjayBmb3Igd2hhdCB0aGUgbGF0ZXN0IHVwc3RyZWFtIHNvdXJjZSBjb2RlIHZlcnNpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgYnkgY2FsbGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBjaGVja3BrZzwvZmlsZW5hbWU+IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHJlY2lwZSBzb3VyY2UgY29kZSBpcyBwcm92aWRlZCBmcm9tIEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGxhdGVzdCB1cHN0cmVhbSB2ZXJzaW9uIGJ5IHBpY2tpbmcgdGhlIGxhdGVzdCB0YWcgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiBhbGwgcmVwb3NpdG9yeSB0YWdzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gcHJvdmlkZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgb25seSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgdGFncyBzaG91bGQgdGhlIGRlZmF1bHQgZmlsdGVyIG5vdCB3b3JrCisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJnaXRfdGFnX3JlZ2V4IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVBTVFJFQU1fQ0hFQ0tfUkVHRVgnPjxnbG9zc3Rlcm0+VVBTVFJFQU1fQ0hFQ0tfUkVHRVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVBTVFJFQU1fQ0hFQ0tfUkVHRVhbZG9jXSA9ICJUaGUgcmVndWxhciBleHByZXNzaW9uIHRoZSBwYWNrYWdlIGNoZWNraW5nIHN5c3RlbSB1c2VzIHRvIHBhcnNlIHRoZSBwYWdlIHBvaW50ZWQgdG8gYnkgVVBTVFJFQU1fQ0hFQ0tfVVJJLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb2RhdGEnPjxmaWxlbmFtZT5kaXN0cm9kYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGlzIGVuYWJsZWQgZ2xvYmFsbHksIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVQU1RSRUFNX0NIRUNLX1JFR0VYPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBhIGRpZmZlcmVudCByZWd1bGFyIGV4cHJlc3Npb24gaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBvbmUgd2hlbiB0aGUgcGFja2FnZSBjaGVja2luZyBzeXN0ZW0gaXMgcGFyc2luZworICAgICAgICAgICAgICAgICAgICB0aGUgcGFnZSBmb3VuZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVBTVFJFQU1fQ0hFQ0tfVVJJJz48ZmlsZW5hbWU+VVBTVFJFQU1fQ0hFQ0tfVVJJPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gInBhY2thZ2VfcmVnZXgiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VUFNUUkVBTV9DSEVDS19VUkknPjxnbG9zc3Rlcm0+VVBTVFJFQU1fQ0hFQ0tfVVJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVQU1RSRUFNX0NIRUNLX1VSSVtkb2NdID0gIlRoZSBVUkwgdXNlZCBieSB0aGUgcGFja2FnZSBjaGVja2luZyBzeXN0ZW0gdG8gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSB3aGVuIHNvdXJjZSBmaWxlcyBhcmUgZmV0Y2hlZCBmcm9tIGFuIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb2RhdGEnPjxmaWxlbmFtZT5kaXN0cm9kYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGlzIGVuYWJsZWQgZ2xvYmFsbHksIHlvdSBjYW4gcGVyZm9ybSBhIHBlci1yZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sgZm9yIHdoYXQgdGhlIGxhdGVzdCB1cHN0cmVhbSBzb3VyY2UgY29kZSB2ZXJzaW9uIGlzCisgICAgICAgICAgICAgICAgICAgIGJ5IGNhbGxpbmcgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2hlY2twa2c8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzb3VyY2UgY29kZSBpcyBwcm92aWRlZCBmcm9tIHRhcmJhbGxzLCB0aGUgbGF0ZXN0CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gaXMgZGV0ZXJtaW5lZCBieSBmZXRjaGluZyB0aGUgZGlyZWN0b3J5IGxpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHRhcmJhbGwgaXMgYW5kIGF0dGVtcHRpbmcgdG8gZmluZCBhIGxhdGVyIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhpcyBhcHByb2FjaCBkb2VzIG5vdCB3b3JrLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VVBTVFJFQU1fQ0hFQ0tfVVJJPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRpZmZlcmVudCBVUkkgdGhhdCBjb250YWlucyB0aGUgbGluayB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGF0ZXN0IHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVBTVFJFQU1fQ0hFQ0tfVVJJID0gInJlY2lwZV91cmwiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VfREVWRlMnPjxnbG9zc3Rlcm0+VVNFX0RFVkZTPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KICAgICAgICAgICAgICAgIFVTRV9ERVZGU1tkb2NdID0gIkRldGVybWluZXMgaWYgZGV2dG1wZnMgaXMgdXNlZCBmb3IgL2RldiBwb3B1bGF0aW9uLiIKQEAgLTE0MzgxLDE2ICsxNTI2MywxOCBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFERF9FUlJPUl9EWU5BTUlDJz48Z2xvc3N0ZXJtPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICBVU0VSQUREX0VSUk9SX0RZTkFNSUNbZG9jXSA9ICJGb3JjZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcHJvZHVjZSBhbiBlcnJvciBpZiB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiAodWlkKSBhbmQgZ3JvdXAgaWRlbnRpZmljYXRpb24gKGdpZCkgdmFsdWVzIGFyZSBub3QgZGVmaW5lZCBpbiBmaWxlcy9wYXNzd2QgYW5kIGZpbGVzL2dyb3VwIGZpbGVzLiIKKyAgICAgICAgICAgICAgIFVTRVJBRERfRVJST1JfRFlOQU1JQ1tkb2NdID0gIklmIHNldCB0byAnZXJyb3InLCBmb3JjZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcHJvZHVjZSBhbiBlcnJvciBpZiB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiAodWlkKSBhbmQgZ3JvdXAgaWRlbnRpZmljYXRpb24gKGdpZCkgdmFsdWVzIGFyZSBub3QgZGVmaW5lZCBpbiBmaWxlcy9wYXNzd2QgYW5kIGZpbGVzL2dyb3VwIGZpbGVzLiBJZiBzZXQgdG8gJ3dhcm4nLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgaW5zdGVhZC4iCiAgICAgICAgICAgICA8L2luZm8+CiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgotICAgICAgICAgICAgICAgICAgICBGb3JjZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcHJvZHVjZSBhbiBlcnJvcgotICAgICAgICAgICAgICAgICAgICBpZiB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KSBhbmQKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXAgaWRlbnRpZmljYXRpb24gKDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPikgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgIGFyZSBub3QgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+ZmlsZXMvcGFzc3dkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICJlcnJvciIsIGZvcmNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgICAgICBwcm9kdWNlIGFuIGVycm9yIGlmIHRoZSB1c2VyIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIGFuZCBncm91cCBpZGVudGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+KSB2YWx1ZXMgYXJlIG5vdCBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5maWxlcy9wYXNzd2Q8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmZpbGVzL2dyb3VwPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAid2FybiIsIGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZCBpbnN0ZWFkLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgpAQCAtMTQ0MDYsNyArMTUyOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBhcwogICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFVTRVJBRERfRVJST1JfRFlOQU1JQyA9ICIxIgorICAgICBVU0VSQUREX0VSUk9SX0RZTkFNSUMgPSAiZXJyb3IiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpbXBsaWVzIHlvdSBhcmUgZ29pbmcgdG8KICAgICAgICAgICAgICAgICAgICAgYWxzbyB0YWtlIHN0ZXBzIHRvIHNldCBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZApAQCAtMTQ1NjIsNyArMTU0NDYsNyBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGdsb3NzdGVybT5VU0VSQURERVhURU5TSU9OPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgIFVTRVJBRERFWFRFTlNJT05bZG9jXSA9ICJXaGVuIHNldCB0byAidXNlcmFkZC1zdGF0aWNpZHMiLCBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYmFzZSBhbGwgdXNlciBhbmQgZ3JvdXAgYWRkaXRpb25zIG9uIGEgc3RhdGljIHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgZm91bmQgaW4gQkJQQVRILiIKKyAgICAgICAgICAgICAgIFVTRVJBRERFWFRFTlNJT05bZG9jXSA9ICJXaGVuIHNldCB0byAndXNlcmFkZC1zdGF0aWNpZHMnLCBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYmFzZSBhbGwgdXNlciBhbmQgZ3JvdXAgYWRkaXRpb25zIG9uIGEgc3RhdGljIHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgZm91bmQgaW4gQkJQQVRILiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbAppbmRleCBkM2Y4NzMyLi41NDUyNGQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJsb2NhbGl0eS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFybG9jYWxpdHkueG1sCkBAIC0xNzYsMTYgKzE3NiwxOCBAQAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBleHRyYSBidWlsZCBpbmZvcm1hdGlvbiBmb3IgcmVjaXBlcy4KICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPkRFRkFVTFRfUFJFRkVSRU5DRQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ01BS0UnPkVYVFJBX09FQ01BS0U8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPkVYVFJBX09FQ09ORjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC9saW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJR19DT05GQVJHUyc+UEFDS0FHRUNPTkZJR19DT05GQVJHUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+REVGQVVMVF9QUkVGRVJFTkNFCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbAppbmRleCBmMDYzODJhLi45YmIwOWZiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbApAQCAtNjkwLDYgKzY5MCwxMjUgQEAKICAgICAgYWRkdGFzayBkb19kZXBsb3lfc2V0c2NlbmUKICAgICAgZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IgogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGV4cGxhaW5zIHRoZSBwcmV2aW91cyBleGFtcGxlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGluZyAiZG9fZGVwbG95IiB0byA8ZmlsZW5hbWU+U1NUQVRFVEFTS1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhZGRzIHNvbWUgcmVxdWlyZWQgc3N0YXRlLXJlbGF0ZWQgcHJvY2Vzc2luZywgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNzdGF0ZSc+PGZpbGVuYW1lPnNzdGF0ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdG8gYmVmb3JlIGFuZCBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWRlcGxveSc+PGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZGVwbG95W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7REVQTE9ZRElSfSI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkZWNsYXJlcyB0aGF0IDxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPiBwbGFjZXMgaXRzCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBpbiA8ZmlsZW5hbWU+JHtERVBMT1lESVJ9PC9maWxlbmFtZT4gd2hlbiBydW4KKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsbHkgKGkuZS4gd2hlbiBub3QgdXNpbmcgdGhlIHNzdGF0ZSBjYWNoZSkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgb3V0cHV0IGJlY29tZXMgdGhlIGlucHV0IHRvIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19kZXBsb3lbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0iPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGluZSBjYXVzZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgY29waWVkIHRvIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJfSU1BR0V9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+IGlzIG5vdCBhbHJlYWR5IGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlIG9yIGlmIGl0cyBpbnB1dCBjaGVja3N1bQorICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgaGFzIGNoYW5nZWQgZnJvbSB3aGVuIHRoZSBvdXRwdXQgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQsIHRoZSB0YXNrIHdpbGwgYmUgcnVuIHRvIHBvcHVsYXRlIHRoZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIGNhY2hlLCBhZnRlciB3aGljaCB0aGUgY29udGVudHMgb2YgdGhlIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgY2FjaGUgaXMgY29waWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtERVBMT1lfRElSX0lNQUdFfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+IGlzIGluIHRoZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIGNhY2hlIGFuZCBpdHMgc2lnbmF0dXJlIGluZGljYXRlcyB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkIG91dHB1dCBpcyBzdGlsbCB2YWxpZCAoaS5lLiBpZiBubworICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgdGFzayBpbnB1dHMgaGF2ZSBjaGFuZ2VkKSwgdGhlbiB0aGUgY29udGVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUgd2lsbCBiZSBjb3BpZWQgZGlyZWN0bHkgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJfSU1BR0V9PC9maWxlbmFtZT4gYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZGVwbG95X3NldHNjZW5lPC9maWxlbmFtZT4gdGFzayBpbnN0ZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBpbmcgdGhlIDxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyB0YXNrIGRlZmluaXRpb24gaXMgZ2x1ZSBsb2dpYyBuZWVkZWQgdG8gbWFrZQorICAgICAgICAgICAgICAgICAgICB0aGUgcHJldmlvdXMgc2V0dGluZ3MgZWZmZWN0aXZlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiBkb19kZXBsb3lfc2V0c2NlbmUgKCkgeworICAgICAgICAgc3N0YXRlX3NldHNjZW5lKGQpCisgICAgIH0KKyAgICAgYWRkdGFzayBkb19kZXBsb3lfc2V0c2NlbmUKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3N0YXRlX3NldHNjZW5lKCk8L2ZpbGVuYW1lPiB0YWtlcyB0aGUgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgYWJvdmUgYXMgaW5wdXQgYW5kIGFjY2VsZXJhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT4gdGFzayB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUgY2FjaGUgaWYgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSB0YXNrIHdhcyBhY2NlbGVyYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzdGF0ZV9zZXRzY2VuZSgpPC9maWxlbmFtZT4gcmV0dXJucyBUcnVlLgorICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIGl0IHJldHVybnMgRmFsc2UsIGFuZCB0aGUgbm9ybWFsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPiB0YXNrIHJ1bnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3NldHNjZW5lJz5zZXRzY2VuZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpbmUgY3JlYXRlcyA8ZmlsZW5hbWU+JHtERVBMT1lESVJ9PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0J9PC9maWxlbmFtZT4gYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT4gdGFzayBydW5zLCBhbmQgYWxzbyBzZXRzCisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXJpYWJsZS1mbGFncyc+VmFyaWFibGUgRmxhZ3M8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzdGF0ZS1pbnB1dGRpcnM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc3RhdGUtb3V0cHV0ZGlyczwvZmlsZW5hbWU+IHdvdWxkIGJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc3RhdGUtcGxhaW5kaXJzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gcHJlc2VydmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQS0dEfTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UEtHREVTVH08L2ZpbGVuYW1lPiBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzaywgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLXBsYWluZGlyc10gPSAiJHtQS0dEfSAke1BLR0RFU1R9IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc3RhdGUtaW5wdXRkaXJzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3N0YXRlLW91dHB1dGRpcnM8L2ZpbGVuYW1lPiBjYW4gYWxzbyBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgICB3aXRoIG11bHRpcGxlIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZGVjbGFyZXMKKyAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QS0dERVNUV09SSzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNITElCV09SSzwvZmlsZW5hbWU+IGFzIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgaW5wdXQgZGlyZWN0b3JpZXMsIHdoaWNoIHBvcHVsYXRlcyB0aGUgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICBjYWNoZSwgYW5kIDxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNITElCU0RJUjwvZmlsZW5hbWU+IGFzIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUgb3V0cHV0IGRpcmVjdG9yaWVzOgorICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYWNrYWdlW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHREVTVFdPUkt9ICR7U0hMSUJTV09SS0RJUn0iCisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7UEtHREFUQV9ESVJ9ICR7U0hMSUJTRElSfSIKKyAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBUaGVzZSBtZXRob2RzIGFsc28gaW5jbHVkZSB0aGUgYWJpbGl0eSB0byB0YWtlIGEgbG9ja2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgIHdoZW4gbWFuaXB1bGF0aW5nIHNoYXJlZCBzdGF0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgIGZvciBjYXNlcyB3aGVyZSBmaWxlIGFkZGl0aW9ucyBvciByZW1vdmFscyBhcmUgc2Vuc2l0aXZlOgorICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYWNrYWdlW3NzdGF0ZS1sb2NrZmlsZV0gPSAiJHtQQUNLQUdFTE9DS30iCisgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKzwhLS0KKyAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHdlIGFkZCBzb21lIGV4dHJhIGZsYWdzIHRvIHRoZSB0YXNrLCBhIG5hbWUgZmllbGQgKCJkZXBsb3kiKSwgYW4KICAgICAgICAgICAgIGlucHV0IGRpcmVjdG9yeSB3aGVyZSB0aGUgdGFzayBzZW5kcyBkYXRhLCBhbmQgdGhlIG91dHB1dAogICAgICAgICAgICAgZGlyZWN0b3J5IHdoZXJlIHRoZSBkYXRhIGZyb20gdGhlIHRhc2sgc2hvdWxkIGV2ZW50dWFsbHkgYmUgY29waWVkLgpAQCAtNzEzLDYgKzgzMiw3IEBACiAgICAgICAgICAgICBzaGFyZWQgc3RhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZXMgc2luY2Ugc29tZSBjYXNlcyBhcmUgc2Vuc2l0aXZlIHRvIGZpbGUKICAgICAgICAgICAgIGFkZGl0aW9ucyBvciByZW1vdmFscy4KICAgICAgICAgPC9wYXJhPgorLS0+CiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBCZWhpbmQgdGhlIHNjZW5lcywgdGhlIHNoYXJlZCBzdGF0ZSBjb2RlIHdvcmtzIGJ5IGxvb2tpbmcgaW4KQEAgLTcyMiw3ICs4NDIsNyBAQAogICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBTU1RBVEVfTUlSUk9SUyA/PSAiXAotICAgICBmaWxlOi8vLiogaHR0cDovL3NvbWVzZXJ2ZXIudGxkL3NoYXJlL3NzdGF0ZS9QQVRIIFxuIFwKKyAgICAgZmlsZTovLy4qIGh0dHA6Ly9zb21lc2VydmVyLnRsZC9zaGFyZS9zc3RhdGUvUEFUSDtkb3dubG9hZGZpbGVuYW1lPVBBVEggXG4gXAogICAgICBmaWxlOi8vLiogZmlsZTovLy9zb21lL2xvY2FsL2Rpci9zc3RhdGUvUEFUSCIKICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgIDxub3RlPgpAQCAtNzgxLDU2ICs5MDEsMTUgQEAKICAgICAgICAgICAgIDx0aXRsZT5EZWJ1Z2dpbmc8L3RpdGxlPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBXaGVuIHRoaW5ncyBnbyB3cm9uZywgZGVidWdnaW5nIG5lZWRzIHRvIGJlIHN0cmFpZ2h0Zm9yd2FyZC4KLSAgICAgICAgICAgICAgICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBZb2N0byBQcm9qZWN0IGluY2x1ZGVzIHN0cm9uZyBkZWJ1Z2dpbmcKLSAgICAgICAgICAgICAgICB0b29sczoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbmV2ZXIgYSBzaGFyZWQgc3RhdGUgcGFja2FnZSBpcyB3cml0dGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgaW50byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+LnNpZ2luZm88L2ZpbGVuYW1lPiBmaWxlIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBhbHNvIHdyaXR0ZW4uCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgYSBwaWNrbGVkIFB5dGhvbiBkYXRhYmFzZSBvZiBhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBNZXRhZGF0YSB0aGF0IHdlbnQgaW50byBjcmVhdGluZyB0aGUgaGFzaCBmb3IgYQotICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gc2hhcmVkIHN0YXRlIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBXaGVuZXZlciBhIHN0YW1wIGlzIHdyaXR0ZW4gaW50byB0aGUgc3RhbXAgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+LnNpZ2RhdGE8L2ZpbGVuYW1lPiBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICBpcyBjcmVhdGVkIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgaGFzaCBkYXRhIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGVkIHRoZSBleGVjdXRlZCB0YXNrLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIHVzZSBCaXRCYWtlIHRvIGR1bXAgb3V0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIGNvbnN0cnVjdGlvbiBpbmZvcm1hdGlvbiB3aXRob3V0IGV4ZWN1dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgdGFza3MgYnkgdXNpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgQml0QmFrZQotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICZkYXNoOyZkYXNoO2R1bXAtc2lnbmF0dXJlcz08cmVwbGFjZWFibGU+U0lHTkFUVVJFX0hBTkRMRVI8L3JlcGxhY2VhYmxlPgotICAgICAtUyA8cmVwbGFjZWFibGU+U0lHTkFUVVJFX0hBTkRMRVI8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHdvIGNvbW1vbiB2YWx1ZXMgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlNJR05BVFVSRV9IQU5ETEVSPC9yZXBsYWNlYWJsZT4gYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmUiIGFuZCAicHJpbnRkaWZmIiB0byBvbmx5IGR1bXAgdGhlIHNpZ25hdHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRvIGNvbXBhcmUgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQgb25lLCByZXNwZWN0aXZlbHkuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBVc2luZyBCaXRCYWtlIHdpdGggZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMgY2F1c2VzCi0gICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHRvIGR1bXAgb3V0IDxmaWxlbmFtZT4uc2lnZGF0YTwvZmlsZW5hbWU+IGZpbGVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc3RhbXAgZGlyZWN0b3J5IGZvciBldmVyeSB0YXNrIGl0IHdvdWxkIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkIGluc3RlYWQgb2YgYnVpbGRpbmcgdGhlIHNwZWNpZmllZCB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZXJlIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWRpZmZzaWdzPC9maWxlbmFtZT4gY29tbWFuZCB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW4gcHJvY2VzcyA8ZmlsZW5hbWU+LnNpZ2RhdGE8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc2lnaW5mbzwvZmlsZW5hbWU+IGZpbGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgb25lIG9mIHRoZXNlIGZpbGVzLCBCaXRCYWtlIGR1bXBzIG91dAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gaW4gdGhlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugc3BlY2lmeSB0d28gZmlsZXMsIEJpdEJha2UgY29tcGFyZXMgdGhlIHR3bwotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgYW5kIGR1bXBzIG91dCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtb3JlIGVhc2lseSBoZWxwcyBhbnN3ZXIgdGhlIHF1ZXN0aW9uIG9mICJXaGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIGJldHdlZW4gWCBhbmQgWT8iPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgU2VlaW5nIHdoYXQgbWV0YWRhdGEgd2VudCBpbnRvIGNyZWF0aW5nIHRoZSBpbnB1dCBzaWduYXR1cmUKKyAgICAgICAgICAgICAgICBvZiBhIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSB0YXNrIGNhbiBiZSBhIHVzZWZ1bCBkZWJ1Z2dpbmcgYWlkLgorICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHNpZ25hdHVyZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+c2lnaW5mbzwvZmlsZW5hbWU+KSBmaWxlcyBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHZpZXcgYW5kIGludGVycHJldCBpbmZvcm1hdGlvbiBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaWdpbmZvPC9maWxlbmFtZT4gZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5LXZpZXdpbmctdGFzay12YXJpYWJsZS1kZXBlbmRlbmNpZXMnPlZpZXdpbmcgVGFzayBWYXJpYWJsZSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KIApAQCAtOTAwLDYgKzk3OSwyMjIgQEAKICAgICA8L3NlY3Rpb24+CiA8L3NlY3Rpb24+CiAKKzxzZWN0aW9uIGlkPSdhdXRvbWF0aWNhbGx5LWFkZGVkLXJ1bnRpbWUtZGVwZW5kZW5jaWVzJz4KKyAgICA8dGl0bGU+QXV0b21hdGljYWxseSBBZGRlZCBSdW50aW1lIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBhZGRzIGNvbW1vbiB0eXBlcyBvZgorICAgICAgICBydW50aW1lIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBhY2thZ2VzLCB3aGljaCBtZWFucyB0aGF0IHlvdSBkbyBub3QKKyAgICAgICAgbmVlZCB0byBleHBsaWNpdGx5IGRlY2xhcmUgdGhlIHBhY2thZ2VzIHVzaW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBUaHJlZSBhdXRvbWF0aWMgbWVjaGFuaXNtcyBleGlzdCAoPGZpbGVuYW1lPnNobGliZGVwczwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+cGNkZXBzPC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+ZGVwY2hhaW5zPC9maWxlbmFtZT4pIHRoYXQKKyAgICAgICAgaGFuZGxlIHNoYXJlZCBsaWJyYXJpZXMsIHBhY2thZ2UgY29uZmlndXJhdGlvbiAocGtnLWNvbmZpZykgbW9kdWxlcywKKyAgICAgICAgYW5kIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZXMsCisgICAgICAgIHJlc3BlY3RpdmVseS4KKyAgICAgICAgRm9yIG90aGVyIHR5cGVzIG9mIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCB5b3UgbXVzdCBtYW51YWxseSBkZWNsYXJlCisgICAgICAgIHRoZSBkZXBlbmRlbmNpZXMuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNobGliZGVwczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIGVhY2ggcmVjaXBlLCBhbGwgc2hhcmVkIGxpYnJhcmllcyBpbnN0YWxsZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIGFyZSBsb2NhdGVkLgorICAgICAgICAgICAgICAgIEZvciBlYWNoIHNoYXJlZCBsaWJyYXJ5LCB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBzaGFyZWQKKyAgICAgICAgICAgICAgICBsaWJyYXJ5IGlzIHJlZ2lzdGVyZWQgYXMgcHJvdmlkaW5nIHRoZSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICAgICBNb3JlIHNwZWNpZmljYWxseSwgdGhlIHBhY2thZ2UgaXMgcmVnaXN0ZXJlZCBhcyBwcm92aWRpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU29uYW1lJz5zb25hbWU8L3VsaW5rPgorICAgICAgICAgICAgICAgIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgc2hhcmVkLWxpYnJhcnktdG8tcGFja2FnZSBtYXBwaW5nCisgICAgICAgICAgICAgICAgaXMgc2F2ZWQgZ2xvYmFsbHkgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHREFUQV9ESVInPjxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzay48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5TaW11bHRhbmVvdXNseSwgYWxsIGV4ZWN1dGFibGVzIGFuZCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGUgYXJlIGluc3BlY3RlZCB0byBzZWUgd2hhdCBzaGFyZWQKKyAgICAgICAgICAgICAgICBsaWJyYXJpZXMgdGhleSBsaW5rIGFnYWluc3QuCisgICAgICAgICAgICAgICAgRm9yIGVhY2ggc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jeSB0aGF0IGlzIGZvdW5kLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+IGlzIHF1ZXJpZWQgdG8KKyAgICAgICAgICAgICAgICBzZWUgaWYgc29tZSBwYWNrYWdlIChsaWtlbHkgZnJvbSBhIGRpZmZlcmVudCByZWNpcGUpIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgdGhlIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgICAgIElmIHN1Y2ggYSBwYWNrYWdlIGlzIGZvdW5kLCBhIHJ1bnRpbWUgZGVwZW5kZW5jeSBpcyBhZGRlZCBmcm9tCisgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UgdGhhdCBkZXBlbmRzIG9uIHRoZSBzaGFyZWQgbGlicmFyeSB0byB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGxpYnJhcnkuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGF1dG9tYXRpY2FsbHkgYWRkZWQgcnVudGltZSBkZXBlbmRlbmN5IGFsc28gaW5jbHVkZXMKKyAgICAgICAgICAgICAgICBhIHZlcnNpb24gcmVzdHJpY3Rpb24uCisgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIHJlc3RyaWN0aW9uIHNwZWNpZmllcyB0aGF0IGF0IGxlYXN0IHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSB0aGF0IHByb3ZpZGVzIHRoZSBzaGFyZWQgbGlicmFyeSBtdXN0IGJlCisgICAgICAgICAgICAgICAgdXNlZCwgYXMgaWYKKyAgICAgICAgICAgICAgICAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPj0gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgaGFkIGJlZW4gYWRkZWQgdG8KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICBUaGlzIGZvcmNlcyBhbiB1cGdyYWRlIG9mIHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlIHNoYXJlZAorICAgICAgICAgICAgICAgIGxpYnJhcnkgd2hlbiBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIHRoYXQgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICBsaWJyYXJ5LCBpZiBuZWVkZWQuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHdhbnQgdG8gYXZvaWQgYSBwYWNrYWdlIGJlaW5nIHJlZ2lzdGVyZWQgYXMKKyAgICAgICAgICAgICAgICBwcm92aWRpbmcgYSBwYXJ0aWN1bGFyIHNoYXJlZCBsaWJyYXJ5IChlLmcuIGJlY2F1c2UgdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICAgICBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkpLCB0aGVuIGFkZCB0aGUgbGlicmFyeSB0bworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUklWQVRFX0xJQlMnPjxmaWxlbmFtZT5QUklWQVRFX0xJQlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIHBhY2thZ2UncyByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBjZGVwczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIGVhY2ggcmVjaXBlLCBhbGwgcGtnLWNvbmZpZyBtb2R1bGVzCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4qLnBjPC9maWxlbmFtZT4gZmlsZXMpIGluc3RhbGxlZCBieSB0aGUgcmVjaXBlIGFyZQorICAgICAgICAgICAgICAgIGxvY2F0ZWQuCisgICAgICAgICAgICAgICAgRm9yIGVhY2ggbW9kdWxlLCB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUgaXMKKyAgICAgICAgICAgICAgICByZWdpc3RlcmVkIGFzIHByb3ZpZGluZyB0aGUgbW9kdWxlLgorICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgbW9kdWxlLXRvLXBhY2thZ2UgbWFwcGluZyBpcyBzYXZlZCBnbG9iYWxseSBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYnkgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2VkYXRhJz48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlNpbXVsdGFuZW91c2x5LCBhbGwgcGtnLWNvbmZpZyBtb2R1bGVzIGluc3RhbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUgYXJlIGluc3BlY3RlZCB0byBzZWUgd2hhdCBvdGhlciBwa2ctY29uZmlnIG1vZHVsZXMgdGhleQorICAgICAgICAgICAgICAgIGRlcGVuZCBvbi4KKyAgICAgICAgICAgICAgICBBIG1vZHVsZSBpcyBzZWVuIGFzIGRlcGVuZGluZyBvbiBhbm90aGVyIG1vZHVsZSBpZiBpdCBjb250YWlucworICAgICAgICAgICAgICAgIGEgIlJlcXVpcmVzOiIgbGluZSB0aGF0IHNwZWNpZmllcyB0aGUgb3RoZXIgbW9kdWxlLgorICAgICAgICAgICAgICAgIEZvciBlYWNoIG1vZHVsZSBkZXBlbmRlbmN5LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+IGlzIHF1ZXJpZWQgdG8gc2VlIGlmIHNvbWUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIGNvbnRhaW5zIHRoZSBtb2R1bGUuCisgICAgICAgICAgICAgICAgSWYgc3VjaCBhIHBhY2thZ2UgaXMgZm91bmQsIGEgcnVudGltZSBkZXBlbmRlbmN5IGlzIGFkZGVkIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgcGFja2FnZSB0aGF0IGRlcGVuZHMgb24gdGhlIG1vZHVsZSB0byB0aGUgcGFja2FnZSB0aGF0CisgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wY2RlcHM8L2ZpbGVuYW1lPiBtZWNoYW5pc20gbW9zdCBvZnRlbiBpbmZlcnMKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGJldHdlZW4gPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGNoYWluczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT4gZGVwZW5kcyBvbiBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFyPC9maWxlbmFtZT4sIHRoZW4gPGZpbGVuYW1lPmZvby1kZXY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Zm9vLWRiZzwvZmlsZW5hbWU+IGFyZSBhbHNvIG1hZGUgdG8gZGVwZW5kIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhci1kZXY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmJhci1kYmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgVGFraW5nIHRoZSA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIGFzIGFuIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5iYXItZGV2PC9maWxlbmFtZT4gcGFja2FnZSBtaWdodCBwcm92aWRlCisgICAgICAgICAgICAgICAgaGVhZGVycyBhbmQgc2hhcmVkIGxpYnJhcnkgc3ltbGlua3MgbmVlZGVkIGJ5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvby1kZXY8L2ZpbGVuYW1lPiwgd2hpY2ggc2hvd3MgdGhlIG5lZWQKKyAgICAgICAgICAgICAgICBmb3IgYSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHBhY2thZ2VzLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgPGZpbGVuYW1lPmRlcGNoYWluczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYXJlIGluIHRoZSBmb3JtIG9mCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5mb28tZGV2PC9maWxlbmFtZT4gYWxzbyBoYXMgYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4tc3R5bGUgZGVwZW5kZW5jeSBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT4sIGJlY2F1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTXyR7UE59LWRldjwvZmlsZW5hbWU+IChzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+KSBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICAiJHtQTn0iLgorICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UbyBlbnN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBuZXZlciBicm9rZW4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFyZSBhbHdheXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQsIGV2ZW4gaWYgdGhlIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgdHVybiBvdXQgdG8gYmUgZW1wdHkuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BTExPV19FTVBUWSc+PGZpbGVuYW1lPkFMTE9XX0VNUFRZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiB0YXNrIGRlcGVuZHMgb24gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2sgb2YgZWFjaCByZWNpcGUgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRocm91Z2ggdXNlIG9mIGEKKyAgICAgICAgPGZpbGVuYW1lPls8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyaWFibGUtZmxhZ3MnPjxmaWxlbmFtZT5kZXB0YXNrPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT5dPC9maWxlbmFtZT4KKyAgICAgICAgZGVjbGFyYXRpb24sIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgcmVxdWlyZWQKKyAgICAgICAgc2hhcmVkLWxpYnJhcnkvbW9kdWxlLXRvLXBhY2thZ2UgbWFwcGluZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZQorICAgICAgICB3aGVuIG5lZWRlZCBhcyBsb25nIGFzIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gaGFzIGJlZW4KKyAgICAgICAgY29ycmVjdGx5IHNldC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdmYWtlcm9vdC1hbmQtcHNldWRvJz4KKyAgICA8dGl0bGU+RmFrZXJvb3QgYW5kIFBzZXVkbzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU29tZSB0YXNrcyBhcmUgZWFzaWVyIHRvIGltcGxlbWVudCB3aGVuIGFsbG93ZWQgdG8gcGVyZm9ybSBjZXJ0YWluCisgICAgICAgIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm9ybWFsbHkgcmVzZXJ2ZWQgZm9yIHRoZSByb290IHVzZXIuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2sgYmVuZWZpdHMgZnJvbSBiZWluZyBhYmxlIHRvIHNldCB0aGUgVUlEIGFuZCBHSUQgb2YgaW5zdGFsbGVkIGZpbGVzCisgICAgICAgIHRvIGFyYml0cmFyeSB2YWx1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE9uZSBhcHByb2FjaCB0byBhbGxvd2luZyB0YXNrcyB0byBwZXJmb3JtIHJvb3Qtb25seSBvcGVyYXRpb25zCisgICAgICAgIHdvdWxkIGJlIHRvIHJlcXVpcmUgQml0QmFrZSB0byBydW4gYXMgcm9vdC4KKyAgICAgICAgSG93ZXZlciwgdGhpcyBtZXRob2QgaXMgY3VtYmVyc29tZSBhbmQgaGFzIHNlY3VyaXR5IGlzc3Vlcy4KKyAgICAgICAgVGhlIGFwcHJvYWNoIHRoYXQgaXMgYWN0dWFsbHkgdXNlZCBpcyB0byBydW4gdGFza3MgdGhhdCBiZW5lZml0IGZyb20KKyAgICAgICAgcm9vdCBwcml2aWxlZ2VzIGluIGEgImZha2UiIHJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgIFdpdGhpbiB0aGlzIGVudmlyb25tZW50LCB0aGUgdGFzayBhbmQgaXRzIGNoaWxkIHByb2Nlc3NlcyBiZWxpZXZlIHRoYXQKKyAgICAgICAgdGhleSBhcmUgcnVubmluZyBhcyB0aGUgcm9vdCB1c2VyLCBhbmQgc2VlIGFuIGludGVybmFsbHkgY29uc2lzdGVudAorICAgICAgICB2aWV3IG9mIHRoZSBmaWxlc3lzdGVtLgorICAgICAgICBBcyBsb25nIGFzIGdlbmVyYXRpbmcgdGhlIGZpbmFsIG91dHB1dCAoZS5nLiBhIHBhY2thZ2Ugb3IgYW4gaW1hZ2UpCisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzLCB0aGUgZmFjdCB0aGF0IHNvbWUgZWFybGllciBzdGVwcyByYW4KKyAgICAgICAgaW4gYSBmYWtlIHJvb3QgZW52aXJvbm1lbnQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjYXBhYmlsaXR5IHRvIHJ1biB0YXNrcyBpbiBhIGZha2Ugcm9vdCBlbnZpcm9ubWVudCBpcyBrbm93biBhcworICAgICAgICAiZmFrZXJvb3QiLCB3aGljaCBpcyBkZXJpdmVkIGZyb20gdGhlIEJpdEJha2Uga2V5d29yZC92YXJpYWJsZQorICAgICAgICBmbGFnIHRoYXQgcmVxdWVzdHMgYSBmYWtlIHJvb3QgZW52aXJvbm1lbnQgZm9yIGEgdGFzay4KKyAgICAgICAgSW4gY3VycmVudCB2ZXJzaW9ucyBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwKKyAgICAgICAgdGhlIHByb2dyYW0gdGhhdCBpbXBsZW1lbnRzIGZha2Vyb290IGlzIGtub3duIGFzIFBzZXVkby4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUHNldWRvIG92ZXJyaWRlcyBzeXN0ZW0gY2FsbHMgdGhyb3VnaCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPkxEX1BSRUxPQUQ8L2ZpbGVuYW1lPiBtZWNoYW5pc20gdG8gZ2l2ZSB0aGUKKyAgICAgICAgaWxsdXNpb24gb2YgcnVubmluZyBhcyByb290LgorICAgICAgICBUbyBrZWVwIHRyYWNrIG9mICJmYWtlIiBmaWxlIG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMgcmVzdWx0aW5nIGZyb20KKyAgICAgICAgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgcm9vdCBwZXJtaXNzaW9ucywgYW4gc3FsaXRlMworICAgICAgICBkYXRhYmFzZSBpcyB1c2VkLgorICAgICAgICBUaGlzIGRhdGFiYXNlIGlzIHN0b3JlZCBpbgorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59L3BzZXVkby9maWxlcy5kYjwvZmlsZW5hbWU+CisgICAgICAgIGZvciBpbmRpdmlkdWFsIHJlY2lwZXMuCisgICAgICAgIFN0b3JpbmcgdGhlIGRhdGFiYXNlIGluIGEgZmlsZSBhcyBvcHBvc2VkIHRvIGluIG1lbW9yeQorICAgICAgICBnaXZlcyBwZXJzaXN0ZW5jZSBiZXR3ZWVuIHRhc2tzLCBhbmQgZXZlbiBiZXR3ZWVuIGJ1aWxkcy4KKyAgICAgICAgPG5vdGU+PHRpdGxlPkNhdXRpb248L3RpdGxlPgorICAgICAgICAgICAgSWYgeW91IGFkZCB5b3VyIG93biB0YXNrIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHNhbWUgZmlsZXMgb3IKKyAgICAgICAgICAgIGRpcmVjdG9yaWVzIGFzIGEgZmFrZXJvb3QgdGFzaywgdGhlbiB0aGF0IHRhc2sgc2hvdWxkIGFsc28gcnVuCisgICAgICAgICAgICB1bmRlciBmYWtlcm9vdC4KKyAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIHRhc2sgd2lsbCBub3QgYmUgYWJsZSB0byBydW4gcm9vdC1vbmx5IG9wZXJhdGlvbnMsCisgICAgICAgICAgICBhbmQgd2lsbCBub3Qgc2VlIHRoZSBmYWtlIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucyBzZXQgYnkgdGhlCisgICAgICAgICAgICBvdGhlciB0YXNrLgorICAgICAgICAgICAgWW91IHNob3VsZCBhbHNvIGFkZCBhIGRlcGVuZGVuY3kgb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT52aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4sCisgICAgICAgICAgICBnaXZpbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICBmYWtlcm9vdCBkb19teXRhc2sgKCkgeworICAgICAgICAgICAuLi4KKyAgICAgICB9CisgICAgICAgZG9fbXl0YXNrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L25vdGU+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUZBS0VST09UJz48ZmlsZW5hbWU+RkFLRVJPT1QqPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZXMgaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhpcworICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWJyYXJ5L29zLWFhcHNldWRvMS9pbmRleC5odG1sJz5Qc2V1ZG88L3VsaW5rPgorICAgICAgICBhcnRpY2xlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKwogPHNlY3Rpb24gaWQ9J3gzMic+CiAgICAgPHRpdGxlPngzMjwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbAppbmRleCBhN2JmMzJkLi5mNzM0NTU0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3VzaW5ncG9reS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC91c2luZ3Bva3kueG1sCkBAIC0xMTksOCArMTE5LDggQEAKICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nJz4KLSAgICA8dGl0bGU+RGVidWdnaW5nIEJ1aWxkIEZhaWx1cmVzPC90aXRsZT4KKzxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLXRvb2xzLWFuZC10ZWNobmlxdWVzJz4KKyAgICA8dGl0bGU+RGVidWdnaW5nIFRvb2xzIGFuZCBUZWNobmlxdWVzPC90aXRsZT4KIAogICAgIDxwYXJhPgogICAgICAgICBUaGUgZXhhY3QgbWV0aG9kIGZvciBkZWJ1Z2dpbmcgYnVpbGQgZmFpbHVyZXMgZGVwZW5kcyBvbiB0aGUgbmF0dXJlIG9mCkBAIC0xNjMsMjMgKzE2Myw0MjAgQEAKICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsJz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCiAgICAgPC9ub3RlPgogCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctdmlld2luZy1sb2dzLWZyb20tZmFpbGVkLXRhc2tzJz4KKyAgICAgICAgPHRpdGxlPlZpZXdpbmcgTG9ncyBmcm9tIEZhaWxlZCBUYXNrczwvdGl0bGU+CiAKLSAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZy10YXNrZmFpbHVyZXMnPgotICAgICAgICA8dGl0bGU+VGFzayBGYWlsdXJlczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+VGhlIGxvZyBmaWxlIGZvciBzaGVsbCB0YXNrcyBpcyBhdmFpbGFibGUgaW4KLSAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvXzxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+LnBpZDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHRhc2sgZm9yIHRoZSBRRU1VIG1pbmltYWwgaW1hZ2UgZm9yIHRoZSB4ODYKLSAgICAgICAgICAgIG1hY2hpbmUgKDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4pIG1pZ2h0IGJlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvdGVtcC9sb2cuZG9fY29tcGlsZS4yMDgzMDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgVG8gc2VlIHdoYXQKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+Ci0gICAgICAgICAgICBydW5zIHRvIGdlbmVyYXRlIHRoYXQgbG9nLCBsb29rIGF0IHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICA8ZmlsZW5hbWU+cnVuLmRvXzxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+LnBpZDwvZmlsZW5hbWU+IGZpbGUgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBsb2cgZm9yIGEgdGFzayBpbiB0aGUgZmlsZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS90ZW1wL2xvZy5kb188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBsb2cgZm9yIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIG9mIHRoZSBRRU1VIG1pbmltYWwgaW1hZ2UgZm9yIHRoZSB4ODYgbWFjaGluZQorICAgICAgICAgICAgKDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4pIG1pZ2h0IGJlIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvdGVtcC9sb2cuZG9fY29tcGlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVG8gc2VlIHRoZSBjb21tYW5kcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4gcmFuCisgICAgICAgICAgICB0byBnZW5lcmF0ZSBhIGxvZywgbG9vayBhdCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi5kb188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgUHJlc2VudGx5LCB0aGUgb3V0cHV0IGZyb20gUHl0aG9uIHRhc2tzIGlzIHNlbnQgZGlyZWN0bHkgdG8gdGhlIGNvbnNvbGUuCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9nLmRvXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuLmRvXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIGFyZSBhY3R1YWxseSBzeW1ib2xpYyBsaW5rcyB0bworICAgICAgICAgICAgPGZpbGVuYW1lPmxvZy5kb188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi48L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5waWQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9nLnJ1bl88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi48L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5waWQ8L3JlcGxhY2VhYmxlPiwKKyAgICAgICAgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT5waWQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgUElEIHRoZSB0YXNrIGhhZCB3aGVuCisgICAgICAgICAgICBpdCByYW4uCisgICAgICAgICAgICBUaGUgc3ltbGlua3MgYWx3YXlzIHBvaW50IHRvIHRoZSBmaWxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb3N0CisgICAgICAgICAgICByZWNlbnQgcnVuLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctdmlld2luZy12YXJpYWJsZS12YWx1ZXMnPgorICAgICAgICA8dGl0bGU+Vmlld2luZyBWYXJpYWJsZSBWYWx1ZXM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UncyA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBvcHRpb24gaXMgdXNlZCB0byBkaXNwbGF5CisgICAgICAgICAgICB2YXJpYWJsZSB2YWx1ZXMgYWZ0ZXIgcGFyc2luZy4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBkaXNwbGF5cyB0aGUgdmFyaWFibGUgdmFsdWVzIGFmdGVyIHRoZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyAoaS5lLiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGgpIGhhdmUgYmVlbgorICAgICAgICAgICAgcGFyc2VkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBkaXNwbGF5cyB2YXJpYWJsZSB2YWx1ZXMgYWZ0ZXIgYSBzcGVjaWZpYworICAgICAgICAgICAgcmVjaXBlIGhhcyBiZWVuIHBhcnNlZC4KKyAgICAgICAgICAgIFRoZSB2YXJpYWJsZXMgaW5jbHVkZSB0aG9zZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGFzIHdlbGw6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtZSByZWNpcGVuYW1lCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT48cGFyYT4KKyAgICAgICAgICAgICAgICBFYWNoIHJlY2lwZSBoYXMgaXRzIG93biBwcml2YXRlIHNldCBvZiB2YXJpYWJsZXMgKGRhdGFzdG9yZSkuCisgICAgICAgICAgICAgICAgSW50ZXJuYWxseSwgYWZ0ZXIgcGFyc2luZyB0aGUgY29uZmlndXJhdGlvbiwgYSBjb3B5IG9mIHRoZQorICAgICAgICAgICAgICAgIHJlc3VsdGluZyBkYXRhc3RvcmUgaXMgbWFkZSBwcmlvciB0byBwYXJzaW5nIGVhY2ggcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoaXMgY29weWluZyBpbXBsaWVzIHRoYXQgdmFyaWFibGVzIHNldCBpbiBvbmUgcmVjaXBlIHdpbGwKKyAgICAgICAgICAgICAgICBub3QgYmUgdmlzaWJsZSB0byBvdGhlciByZWNpcGVzLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPkxpa2V3aXNlLCBlYWNoIHRhc2sgd2l0aGluIGEgcmVjaXBlIGdldHMgYSBwcml2YXRlCisgICAgICAgICAgICAgICAgZGF0YXN0b3JlIGJhc2VkIG9uIHRoZSByZWNpcGUgZGF0YXN0b3JlLCB3aGljaCBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAgdmFyaWFibGVzIHNldCB3aXRoaW4gb25lIHRhc2sgd2lsbCBub3QgYmUgdmlzaWJsZSB0bworICAgICAgICAgICAgICAgIG90aGVyIHRhc2tzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gdGhlIG91dHB1dCBvZiA8ZmlsZW5hbWU+Yml0YmFrZSAtZTwvZmlsZW5hbWU+LCBlYWNoIHZhcmlhYmxlIGlzCisgICAgICAgICAgICBwcmVjZWRlZCBieSBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUgdmFyaWFibGUgZ290IGl0cyB2YWx1ZSwKKyAgICAgICAgICAgIGluY2x1ZGluZyB0ZW1wb3JhcnkgdmFsdWVzIHRoYXQgd2VyZSBsYXRlciBvdmVycmlkZW4uCisgICAgICAgICAgICBUaGlzIGRlc2NyaXB0aW9uIGFsc28gaW5jbHVkZXMgdmFyaWFibGUgZmxhZ3MgKHZhcmZsYWdzKSBzZXQgb24KKyAgICAgICAgICAgIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgIFRoZSBvdXRwdXQgY2FuIGJlIHZlcnkgaGVscGZ1bCBkdXJpbmcgZGVidWdnaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYXJpYWJsZXMgdGhhdCBhcmUgZXhwb3J0ZWQgdG8gdGhlIGVudmlyb25tZW50IGFyZSBwcmVjZWRlZCBieQorICAgICAgICAgICAgPGZpbGVuYW1lPmV4cG9ydDwvZmlsZW5hbWU+IGluIHRoZSBvdXRwdXQgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1lPC9maWxlbmFtZT4uCisgICAgICAgICAgICBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgQ0M9Imk1ODYtcG9reS1saW51eC1nY2MgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUvdWxmL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHZhcmlhYmxlIHZhbHVlcywgdGhlIG91dHB1dCBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtZTwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICBjb21tYW5kcyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgc3RhcnRzIHdpdGggYSB0cmVlIGxpc3RpbmcgYWxsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgYW5kIGNsYXNzZXMgaW5jbHVkZWQgZ2xvYmFsbHksIHJlY3Vyc2l2ZWx5IGxpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzIHRoZXkgaW5jbHVkZSBvciBpbmhlcml0IGluIHR1cm4uCisgICAgICAgICAgICAgICAgICAgIE11Y2ggb2YgdGhlIGJlaGF2aW9yIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIChpbmNsdWRpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdub3JtYWwtcmVjaXBlLWJ1aWxkLXRhc2tzJz5ub3JtYWwgcmVjaXBlIGJ1aWxkIHRhc2tzPC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgaXMgaW1wbGVtZW50ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB0aGUgY2xhc3NlcyBpdCBpbmhlcml0cywgcmF0aGVyIHRoYW4gYmVpbmcgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgaW50byBCaXRCYWtlIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGUgdmFyaWFibGUgdmFsdWVzLCBhbGwgZnVuY3Rpb25zIGFwcGVhciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBGb3Igc2hlbGwgZnVuY3Rpb25zLCB2YXJpYWJsZXMgcmVmZXJlbmNlZCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJvZHkgYXJlIGV4cGFuZGVkLgorICAgICAgICAgICAgICAgICAgICBJZiBhIGZ1bmN0aW9uIGhhcyBiZWVuIG1vZGlmaWVkIHVzaW5nIG92ZXJyaWRlcyBvcgorICAgICAgICAgICAgICAgICAgICB1c2luZyBvdmVycmlkZS1zdHlsZSBvcGVyYXRvcnMgbGlrZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPiwgdGhlbiB0aGUgZmluYWwgYXNzZW1ibGVkCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJvZHkgYXBwZWFycyBpbiB0aGUgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3ZpZXdpbmctcGFja2FnZS1pbmZvcm1hdGlvbi13aXRoLW9lLXBrZ2RhdGEtdXRpbCc+CisgICAgICAgIDx0aXRsZT5WaWV3aW5nIFBhY2thZ2UgSW5mb3JtYXRpb24gd2l0aCA8ZmlsZW5hbWU+b2UtcGtnZGF0YS11dGlsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5vZS1wa2dkYXRhLXV0aWw8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgIHV0aWxpdHkgdG8gcXVlcnkKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgZGlzcGxheSB2YXJpb3VzIHBhY2thZ2UtcmVsYXRlZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgdXRpbGl0eSwgeW91IG11c3QgdXNlIGl0IHRvIHZpZXcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIG9uIHBhY2thZ2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgYSBmZXcgb2YgdGhlIGF2YWlsYWJsZQorICAgICAgICAgICAgPGZpbGVuYW1lPm9lLXBrZ2RhdGEtdXRpbDwvZmlsZW5hbWU+IHN1YmNvbW1hbmRzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHN0YW5kYXJkICogYW5kID8gZ2xvYmJpbmcgd2lsZGNhcmRzIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWVzIGFuZCBwYXRocy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyBbPC9maWxlbmFtZT48cmVwbGFjZWFibGU+cGF0dGVybjwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPl08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgYWxsIHBhY2thZ2VzIHRoYXQgaGF2ZSBiZWVuIGJ1aWx0LCBvcHRpb25hbGx5CisgICAgICAgICAgICAgICAgICAgIGxpbWl0aW5nIHRoZSBtYXRjaCB0byBwYWNrYWdlcyB0aGF0IG1hdGNoCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyZuYnNwOzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4mbmJzcDsuLi48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjb250YWluZWQgaW4gdGhlIGdpdmVuCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBkaWZmZXJlbnQgd2F5IHRvIHZpZXcgdGhlIGNvbnRlbnRzIG9mIGEgcGFja2FnZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgdG8gbG9vayBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vcGFja2FnZXMtc3BsaXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSByZWNpcGUgdGhhdCBnZW5lcmF0ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaXMgY3JlYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhbmQgaGFzIG9uZSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggcGFja2FnZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBnZW5lcmF0ZXMsIHdoaWNoIGNvbnRhaW5zIHRoZSBmaWxlcyBzdG9yZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgcGFja2FnZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGluc3BlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS9wYWNrYWdlcy1zcGxpdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz48ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGVuYWJsZWQgd2hlbiB5b3UgYnVpbGQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtcGtnZGF0YS11dGlsIGZpbmQtcGF0aCZuYnNwOzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4mbmJzcDsuLi48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIG5hbWVzIG9mIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gdGhlIGdpdmVuCisgICAgICAgICAgICAgICAgICAgIHBhdGhzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0ZWxscyB1cyB0aGF0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NoYXJlL21hbi9tYW4xL21ha2UuMTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIGNvbnRhaW5lZCBpbiB0aGUgPGZpbGVuYW1lPm1ha2UtZG9jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG9lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL3Vzci9zaGFyZS9tYW4vbWFuMS9tYWtlLjEKKyAgICAgbWFrZS1kb2M6IC91c3Ivc2hhcmUvbWFuL21hbjEvbWFrZS4xCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUmbmJzcDs8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+Jm5ic3A7Li4uPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBuYW1lIG9mIHRoZSByZWNpcGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSB0aGUgZ2l2ZW4gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+b2UtcGtnZGF0YS11dGlsPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmQsIHVzZSB0aGUgaGVscCBmYWNpbGl0eToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBvZS1wa2dkYXRhLXV0aWwgJmRhc2g7JmRhc2g7aGVscAorICAgICAkIG9lLXBrZ2RhdGEtdXRpbCA8cmVwbGFjZWFibGU+c3ViY29tbWFuZDwvcmVwbGFjZWFibGU+IC0taGVscAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS12aWV3aW5nLWRlcGVuZGVuY2llcy1iZXR3ZWVuLXJlY2lwZXMtYW5kLXRhc2tzJz4KKyAgICAgICAgPHRpdGxlPlZpZXdpbmcgRGVwZW5kZW5jaWVzIEJldHdlZW4gUmVjaXBlcyBhbmQgVGFza3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzIGl0IGNhbiBiZSBoYXJkIHRvIHNlZSB3aHkgQml0QmFrZSB3YW50cyB0byBidWlsZCBvdGhlcgorICAgICAgICAgICAgcmVjaXBlcyBiZWZvcmUgdGhlIG9uZSB5b3UgaGF2ZSBzcGVjaWZpZWQuCisgICAgICAgICAgICBEZXBlbmRlbmN5IGluZm9ybWF0aW9uIGNhbiBoZWxwIHlvdSB1bmRlcnN0YW5kIHdoeSBhIHJlY2lwZSBpcworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZm9yIGEgcmVjaXBlLCBydW4gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgY29tbWFuZDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1nIDxyZXBsYWNlYWJsZT5yZWNpcGVuYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgY29tbWFuZCB3cml0ZXMgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBuLWJ1aWxkbGlzdDwvZmlsZW5hbWU+OiBBIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy90YXJnZXRzIGludm9sdmVkIGluIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5yZWNpcGVuYW1lPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgICJJbnZvbHZlZCIgaGVyZSBtZWFucyB0aGF0IGF0IGxlYXN0IG9uZSB0YXNrIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICByZWNpcGUgbmVlZHMgdG8gcnVuIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPiBmcm9tIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIFRhcmdldHMgdGhhdCBhcmUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFTU1VNRV9QUk9WSURFRCc+PGZpbGVuYW1lPkFTU1VNRV9QUk9WSURFRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhcmUgbm90IGxpc3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG4tZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPjogQSBncmFwaCBzaG93aW5nCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGJ1aWxkLXRpbWUgdGFyZ2V0cyAocmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2UtZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPjogQSBncmFwaCBzaG93aW5nCisgICAgICAgICAgICAgICAgICAgIGtub3duIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHJ1bnRpbWUgdGFyZ2V0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFzay1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+OiBBIGdyYXBoIHNob3dpbmcKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGFza3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBncmFwaHMgYXJlIGluCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ET1RfJTI4Z3JhcGhfZGVzY3JpcHRpb25fbGFuZ3VhZ2UlMjknPkRPVDwvdWxpbms+CisgICAgICAgICAgICBmb3JtYXQgYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW1hZ2VzIChlLmcuIHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRvdDwvZmlsZW5hbWU+IHRvb2wgZnJvbQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5ncmFwaHZpei5vcmcvJz5HcmFwaHZpejwvdWxpbms+KS4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRE9UIGZpbGVzIHVzZSBhIHBsYWluIHRleHQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdyYXBocyBnZW5lcmF0ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtZzwvZmlsZW5hbWU+IGNvbW1hbmQgYXJlIG9mdGVuIHNvCisgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZSBhcyB0byBiZSBkaWZmaWN1bHQgdG8gcmVhZCB3aXRob3V0IHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBydW5pbmcgKGUuZy4gd2l0aCBCaXRiYWtlJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tSTwvZmlsZW5hbWU+IG9wdGlvbikgYW5kIHByb2Nlc3NpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBEZXNwaXRlIHRoZSBmb3JtIGFuZCBzaXplIG9mIHRoZSBncmFwaHMsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+LmRvdDwvZmlsZW5hbWU+IGZpbGVzIGNhbiBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgcG9zc2libGUgdG8gcmVhZCBhbmQgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFzIGFuIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRhc2stZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJsaWJ4c2x0LmRvX2NvbmZpZ3VyZSIgLT4gImxpYnhtbDIuZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhYm92ZSBleGFtcGxlIGxpbmUgcmV2ZWFscyB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBpbiA8ZmlsZW5hbWU+bGlieHNsdDwvZmlsZW5hbWU+IGRlcGVuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc3lzcm9vdCc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4gPGZpbGVuYW1lPmxpYnhtbDI8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYSBub3JtYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoZSB0d28gcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBob3cgPGZpbGVuYW1lPi5kb3Q8L2ZpbGVuYW1lPiBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHByb2Nlc3NlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvY29udHJpYi9ncmFwaC10b29sPC9maWxlbmFtZT4gUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQsIHdoaWNoIGZpbmRzIGFuZCBkaXNwbGF5cyBwYXRocyBiZXR3ZWVuIGdyYXBoCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSBhIGRpZmZlcmVudCBtZXRob2QgdG8gdmlldyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uCisgICAgICAgICAgICBieSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtZyAtdSBkZXBleHAgPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBjb21tYW5kIGRpc3BsYXlzIGEgR1VJIHdpbmRvdyBmcm9tIHdoaWNoIHlvdSBjYW4gdmlldworICAgICAgICAgICAgYnVpbGQtdGltZSBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSByZWNpcGVzIGludm9sdmVkIGluCisgICAgICAgICAgICBidWlsZGluZyA8cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS12aWV3aW5nLXRhc2stdmFyaWFibGUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPlZpZXdpbmcgVGFzayBWYXJpYWJsZSBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLCBCaXRCYWtlIHRyaWVzIHRvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIGRldGVybWluZSB3aGF0IHZhcmlhYmxlcyBhIHRhc2sgZGVwZW5kcyBvbiBzbyB0aGF0IGl0IGNhbiByZXJ1bgorICAgICAgICAgICAgdGhlIHRhc2sgaWYgYW55IHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzIGNoYW5nZS4KKyAgICAgICAgICAgIFRoaXMgZGV0ZXJtaW5hdGlvbiBpcyB1c3VhbGx5IHJlbGlhYmxlLgorICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGRvIHRoaW5ncyBsaWtlIGNvbnN0cnVjdCB2YXJpYWJsZSBuYW1lcyBhdCBydW50aW1lLAorICAgICAgICAgICAgdGhlbiB5b3UgbWlnaHQgaGF2ZSB0byBtYW51YWxseSBkZWNsYXJlIGRlcGVuZGVuY2llcyBvbiB0aG9zZQorICAgICAgICAgICAgdmFyaWFibGVzIHVzaW5nIDxmaWxlbmFtZT52YXJkZXBzPC9maWxlbmFtZT4gYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyaWFibGUtZmxhZ3MnPlZhcmlhYmxlIEZsYWdzPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHVuc3VyZSB3aGV0aGVyIGEgdmFyaWFibGUgZGVwZW5kZW5jeSBpcyBiZWluZyBwaWNrZWQgdXAKKyAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZm9yIGEgZ2l2ZW4gdGFzaywgeW91IGNhbiBsaXN0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgZGVwZW5kZW5jaWVzIEJpdEJha2UgaGFzIGRldGVybWluZWQgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSByZWNpcGUgY29udGFpbmluZyB0aGUgdGFzazoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVBTX0RJUic+PGZpbGVuYW1lPlNUQU1QU19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCBmaW5kIHRoZSBzaWduYXR1cmUgZGF0YQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnNpZ2RhdGE8L2ZpbGVuYW1lPikgZmlsZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnNpZ2RhdGE8L2ZpbGVuYW1lPiBmaWxlcyBjb250YWluIGEgcGlja2xlZAorICAgICAgICAgICAgICAgICAgICBQeXRob24gZGF0YWJhc2Ugb2YgYWxsIHRoZSBtZXRhZGF0YSB0aGF0IHdlbnQgaW50byBjcmVhdGluZworICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXQgY2hlY2tzdW0gZm9yIHRoZSB0YXNrLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgdGhlIDxmaWxlbmFtZT5kYjwvZmlsZW5hbWU+IHJlY2lwZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaWdkYXRhPC9maWxlbmFtZT4gZmlsZSBtaWdodCBiZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGxvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7QlVJTERESVJ9L3RtcC9zdGFtcHMvaTU4Ni1wb2t5LWxpbnV4L2RiLzYuMC4zMC1yMS5kb19mZXRjaC5zaWdkYXRhLjdjMDQ4YzE4MjIyYjE2ZmYwYmNlZTIwMDBlZjY0OGIxCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRhc2tzIHRoYXQgYXJlIGFjY2VsZXJhdGVkIHRocm91Z2ggdGhlIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zc3RhdGU8L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBjYWNoZSwgYW4gYWRkaXRpb25hbCA8ZmlsZW5hbWU+c2lnaW5mbzwvZmlsZW5hbWU+IGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiBpbnRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBjYWNoZWQgdGFzayBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2lnaW5mbzwvZmlsZW5hbWU+IGZpbGVzIGNvbnRhaW4gZXhhY3RseSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBpbmZvcm1hdGlvbiBhcyA8ZmlsZW5hbWU+c2lnZGF0YTwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJ1biA8ZmlsZW5hbWU+Yml0YmFrZS1kdW1wc2lnPC9maWxlbmFtZT4gb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaWdkYXRhPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNpZ2luZm88L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlLWR1bXBzaWcgJHtCVUlMRERJUn0vdG1wL3N0YW1wcy9pNTg2LXBva3ktbGludXgvZGIvNi4wLjMwLXIxLmRvX2ZldGNoLnNpZ2RhdGEuN2MwNDhjMTgyMjJiMTZmZjBiY2VlMjAwMGVmNjQ4YjEKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgb3V0cHV0IG9mIHRoZSBhYm92ZSBjb21tYW5kLCB5b3Ugd2lsbCBmaW5kIGEgbGluZQorICAgICAgICAgICAgICAgICAgICBsaWtlIHRoZSBmb2xsb3dpbmcsIHdoaWNoIGxpc3RzIGFsbCB0aGUgKGluZmVycmVkKSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgZm9yIHRoZSB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGxpc3QgYWxzbyBpbmNsdWRlcyBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZGVwZW5kaW5nIG9uIG90aGVyIHZhcmlhYmxlcywgcmVjdXJzaXZlbHkuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVGFzayBkZXBlbmRlbmNpZXM6IFsnUFYnLCAnU1JDUkVWJywgJ1NSQ19VUkknLCAnU1JDX1VSSVttZDVzdW1dJywgJ1NSQ19VUklbc2hhMjU2c3VtXScsICdiYXNlX2RvX2ZldGNoJ10KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyAoZS5nLiA8ZmlsZW5hbWU+YmFzZV9kb19mZXRjaDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBjb3VudCBhcyB2YXJpYWJsZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgaW4gdHVybiBkZXBlbmQgb24gdGhlIHZhcmlhYmxlcyB0aGV5CisgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG91dHB1dCBvZiA8ZmlsZW5hbWU+Yml0YmFrZS1kdW1wc2lnPC9maWxlbmFtZT4gYWxzbyBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgZWFjaCB2YXJpYWJsZSBoYWQsIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9IQVNIQkFTRV9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9IQVNIQkFTRV9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGlzIGFsc28gYSA8ZmlsZW5hbWU+Yml0YmFrZS1kaWZmc2lnczwvZmlsZW5hbWU+IGNvbW1hbmQgZm9yCisgICAgICAgICAgICBjb21wYXJpbmcgdHdvIDxmaWxlbmFtZT5zaWdpbmZvPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zaWdkYXRhPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY2FuIGJlIGhlbHBmdWwgd2hlbiB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGF0IGNoYW5nZWQKKyAgICAgICAgICAgIGJldHdlZW4gdHdvIHZlcnNpb25zIG9mIGEgdGFzay4KKyAgICAgICAgICAgIElmIHlvdSBjYWxsIDxmaWxlbmFtZT5iaXRiYWtlLWRpZmZzaWdzPC9maWxlbmFtZT4gd2l0aCBqdXN0IG9uZQorICAgICAgICAgICAgZmlsZSwgdGhlIGNvbW1hbmQgYmVoYXZlcyBsaWtlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1kdW1wc2lnPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgQml0QmFrZSB0byBkdW1wIG91dCB0aGUgc2lnbmF0dXJlIGNvbnN0cnVjdGlvbgorICAgICAgICAgICAgaW5mb3JtYXRpb24gd2l0aG91dCBleGVjdXRpbmcgdGFza3MgYnkgdXNpbmcgZWl0aGVyIG9mIHRoZQorICAgICAgICAgICAgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZC1saW5lIG9wdGlvbnM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZkYXNoOyZkYXNoO2R1bXAtc2lnbmF0dXJlcz08cmVwbGFjZWFibGU+U0lHTkFUVVJFX0hBTkRMRVI8L3JlcGxhY2VhYmxlPgorICAgICAtUyA8cmVwbGFjZWFibGU+U0lHTkFUVVJFX0hBTkRMRVI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVHdvIGNvbW1vbiB2YWx1ZXMgZm9yCisgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlNJR05BVFVSRV9IQU5ETEVSPC9yZXBsYWNlYWJsZT4gYXJlICJub25lIiBhbmQKKyAgICAgICAgICAgICAgICAicHJpbnRkaWZmIiwgd2hpY2ggZHVtcCBvbmx5IHRoZSBzaWduYXR1cmUgb3IgY29tcGFyZSB0aGUKKyAgICAgICAgICAgICAgICBkdW1wZWQgc2lnbmF0dXJlIHdpdGggdGhlIGNhY2hlZCBvbmUsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIFVzaW5nIEJpdEJha2Ugd2l0aCBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBjYXVzZXMgQml0QmFrZSB0byBkdW1wCisgICAgICAgICAgICBvdXQgPGZpbGVuYW1lPnNpZ2RhdGE8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFtcHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZm9yIGV2ZXJ5IHRhc2sgaXQgd291bGQgaGF2ZQorICAgICAgICAgICAgZXhlY3V0ZWQgaW5zdGVhZCBvZiBidWlsZGluZyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYWNrYWdlLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0xODcsNyArNTg0LDcgQEAKICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgU3BlY2lmaWMgVGFza3M8L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQW55IGdpdmVuIHBhY2thZ2UgY29uc2lzdHMgb2YgYSBzZXQgb2YgdGFza3MuCisgICAgICAgICAgICBBbnkgZ2l2ZW4gcmVjaXBlIGNvbnNpc3RzIG9mIGEgc2V0IG9mIHRhc2tzLgogICAgICAgICAgICAgVGhlIHN0YW5kYXJkIEJpdEJha2UgYmVoYXZpb3IgaW4gbW9zdCBjYXNlcyBpczoKICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+LAogICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3VucGFjazwvZmlsZW5hbWU+LApAQCAtMjA5LDE1ICs2MDYsMzkgQEAKICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gcmVydW4gYSB0YXNrLCB1c2UgdGhlIDxmaWxlbmFtZT4tZjwvZmlsZW5hbWU+IGZvcmNlCi0gICAgICAgICAgICBvcHRpb24uCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBmb3JjZXMgcmVjb21waWxhdGlvbiBhZnRlcgotICAgICAgICAgICAgY2hhbmdpbmcgZmlsZXMgaW4gdGhlIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4tYzwvZmlsZW5hbWU+IG9wdGlvbiByZXNwZWN0cyB0YXNrIGRlcGVuZGVuY2llcywKKyAgICAgICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgYWxsIG90aGVyIHRhc2tzIChpbmNsdWRpbmcgdGFza3MgZnJvbSBvdGhlcgorICAgICAgICAgICAgcmVjaXBlcykgdGhhdCB0aGUgc3BlY2lmaWVkIHRhc2sgZGVwZW5kcyBvbiB3aWxsIGJlIHJ1biBiZWZvcmUgdGhlCisgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgRXZlbiB3aGVuIHlvdSBtYW51YWxseSBzcGVjaWZ5IGEgdGFzayB0byBydW4gd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPi1jPC9maWxlbmFtZT4sIEJpdEJha2Ugd2lsbCBvbmx5IHJ1biB0aGUgdGFzayBpZiBpdAorICAgICAgICAgICAgY29uc2lkZXJzIGl0ICJvdXQgb2YgZGF0ZSIuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RhbXAtZmlsZXMtYW5kLXRoZS1yZXJ1bm5pbmctb2YtdGFza3MnPlN0YW1wIEZpbGVzIGFuZCB0aGUgUmVydW5uaW5nIG9mIFRhc2tzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGhvdyBCaXRCYWtlIGRldGVybWluZXMgd2hldGhlciBhIHRhc2sgaXMgIm91dCBvZiBkYXRlIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgYW4gdXAtdG8tZGF0ZSB0YXNrIHRvIGJlIHJlcnVuIChlLmcuCisgICAgICAgICAgICBiZWNhdXNlIHlvdSBtYWRlIG1hbnVhbCBtb2RpZmljYXRpb25zIHRvIHRoZSByZWNpcGUncworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0aGF0IHlvdSB3YW50IHRvIHRyeSBvdXQpLCB0aGVuIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3B0aW9uLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBpcyBuZXZlciByZXF1aXJlZCB3aGVuCisgICAgICAgICAgICAgICAgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZGV2c2hlbGwnPjxmaWxlbmFtZT5kb19kZXZzaGVsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgaXMgYmVjYXVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WzwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXJpYWJsZS1mbGFncyc+PGZpbGVuYW1lPm5vc3RhbXA8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPl08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZsYWcgaXMgYWxyZWFkeSBzZXQgZm9yIHRoZSB0YXNrLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIG9uZSB3YXkgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBvcHRpb246CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCiAgICAgICAgICAgICAgICAuCiAgICAgICAgICAgICAgICAuCi0gICAgICAgIDxyZXBsYWNlYWJsZT5tYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhlIHdvcmsgZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgbWFrZSBzb21lIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoZSB3b3JrIGRpcmVjdG9yeQogICAgICAgICAgICAgICAgLgogICAgICAgICAgICAgICAgLgogICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBjb21waWxlIC1mCkBAIC0yMzYsNiArNjU3LDUwIEBACiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFub3RoZXIsIHNob3J0ZXIgd2F5IHRvIHJlcnVuIGEgdGFzayBhbmQgYWxsCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdub3JtYWwtcmVjaXBlLWJ1aWxkLXRhc2tzJz5ub3JtYWwgcmVjaXBlIGJ1aWxkIHRhc2tzPC9saW5rPgorICAgICAgICAgICAgdGhhdCBkZXBlbmQgb24gaXQgaXMgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+LUM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb3B0aW9uLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgdXBwZXItY2FzZWQgYW5kIGlzIHNlcGFyYXRlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1jPC9maWxlbmFtZT4gb3B0aW9uLCB3aGljaCBpcyBsb3dlci1jYXNlZC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIFVzaW5nIHRoaXMgb3B0aW9uIGludmFsaWRhdGVzIHRoZSBnaXZlbiB0YXNrIGFuZCB0aGVuIHJ1bnMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtYnVpbGQnPjxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzaywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdGFzayBpZiBubyB0YXNrIGlzIGdpdmVuLCBhbmQgdGhlCisgICAgICAgICAgICB0YXNrcyBvbiB3aGljaCBpdCBkZXBlbmRzLgorICAgICAgICAgICAgWW91IGNvdWxkIHJlcGxhY2UgdGhlIGZpbmFsIHR3byBjb21tYW5kcyBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZQorICAgICAgICAgICAgd2l0aCB0aGUgZm9sbG93aW5nIHNpbmdsZSBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtQyBjb21waWxlCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbnRlcm5hbGx5LCB0aGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+LUM8L2ZpbGVuYW1lPiBvcHRpb25zIHdvcmsgYnkgdGFpbnRpbmcgKG1vZGlmeWluZykgdGhlCisgICAgICAgICAgICBpbnB1dCBjaGVja3N1bSBvZiB0aGUgc3BlY2lmaWVkIHRhc2suCisgICAgICAgICAgICBUaGlzIHRhaW50aW5nIGluZGlyZWN0bHkgY2F1c2VzIHRoZSB0YXNrIGFuZCBpdHMKKyAgICAgICAgICAgIGRlcGVuZGVudCB0YXNrcyB0byBiZSByZXJ1biB0aHJvdWdoIHRoZSBub3JtYWwgdGFzayBkZXBlbmRlbmN5CisgICAgICAgICAgICBtZWNoYW5pc21zLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQml0QmFrZSBleHBsaWNpdGx5IGtlZXBzIHRyYWNrIG9mIHdoaWNoIHRhc2tzIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgIHRhaW50ZWQgaW4gdGhpcyBmYXNoaW9uLCBhbmQgd2lsbCBwcmludCB3YXJuaW5ncyBzdWNoIGFzIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3IgYnVpbGRzIGludm9sdmluZyBzdWNoIHRhc2tzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV0FSTklORzogL2hvbWUvdWxmL3Bva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wXzIuMS5iYi5kb19jb21waWxlIGlzIHRhaW50ZWQgZnJvbSBhIGZvcmNlZCBydW4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhlIHdhcm5pbmcgaXMgdG8gbGV0IHlvdSBrbm93IHRoYXQgdGhlIHdvcmsKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIGJ1aWxkIG91dHB1dCBtaWdodCBub3QgYmUgaW4gdGhlIGNsZWFuIHN0YXRlIHRoZXkKKyAgICAgICAgICAgICAgICB3b3VsZCBiZSBpbiBmb3IgYSAibm9ybWFsIiBidWlsZCwgZGVwZW5kaW5nIG9uIHdoYXQgYWN0aW9ucworICAgICAgICAgICAgICAgIHlvdSB0b29rLgorICAgICAgICAgICAgICAgIFRvIGdldCByaWQgb2Ygc3VjaCB3YXJuaW5ncywgeW91IGNhbiByZW1vdmUgdGhlIHdvcmsgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgYW5kIHJlYnVpbGQgdGhlIHJlY2lwZSwgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGNsZWFuCisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBZb3UgY2FuIHZpZXcgYSBsaXN0IG9mIHRhc2tzIGluIGEgZ2l2ZW4gcGFja2FnZSBieSBydW5uaW5nIHRoZQogICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2xpc3R0YXNrczwvZmlsZW5hbWU+IHRhc2sgYXMgZm9sbG93czoKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KQEAgLTI0NiwyNCArNzExLDc3IEBACiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKLSAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZy1kZXBlbmRlbmNpZXMnPgotICAgICAgICA8dGl0bGU+RGVwZW5kZW5jeSBHcmFwaHM8L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSdjaGVja2luZy1mb3ItbWlzc2luZy1idWlsZC10aW1lLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5DaGVja2luZyBmb3IgTWlzc2luZyBCdWlsZC1UaW1lIERlcGVuZGVuY2llczwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTb21ldGltZXMgaXQgY2FuIGJlIGhhcmQgdG8gc2VlIHdoeSBCaXRCYWtlIHdhbnRzIHRvIGJ1aWxkCi0gICAgICAgICAgICBvdGhlciBwYWNrYWdlcyBiZWZvcmUgYnVpbGRpbmcgYSBnaXZlbiBwYWNrYWdlIHlvdSBoYXZlIHNwZWNpZmllZC4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZyA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgY3JlYXRlcyB0aGUgPGZpbGVuYW1lPnBuLWJ1aWxkbGlzdDwvZmlsZW5hbWU+LAotICAgICAgICAgICAgPGZpbGVuYW1lPnBuLWRlcGVuZHMuZG90PC9maWxlbmFtZT4sCi0gICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+LCBhbmQKLSAgICAgICAgICAgIDxmaWxlbmFtZT50YXNrLWRlcGVuZHMuZG90PC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgIGRpcmVjdG9yeS4KLSAgICAgICAgICAgIFRoZXNlIGZpbGVzIHNob3cgd2hhdCB3aWxsIGJlIGJ1aWx0IGFuZCB0aGUgcGFja2FnZSBhbmQgdGFzawotICAgICAgICAgICAgZGVwZW5kZW5jaWVzLCB3aGljaCBhcmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHJvYmxlbXMuCi0gICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1nIC11IGRlcGV4cCA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgIGNvbW1hbmQgdG8gZGlzcGxheSB0aGUgcmVzdWx0cyBpbiBhIG1vcmUgaHVtYW4tcmVhZGFibGUgZm9ybS4KKyAgICAgICAgICAgIEEgcmVjaXBlIG1pZ2h0IGJ1aWxkIHN1Y2Nlc3NmdWxseSBldmVuIHRob3VnaCBzb21lIG9mIGl0cworICAgICAgICAgICAgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcgZnJvbQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0aGUgdHdvIG1vc3QgY29tbW9uIHdheXMgaW4gd2hpY2ggdGhhdCBjYW4gaGFwcGVuOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZC10aW1lIGRlcGVuZGVuY3kganVzdCBoYXBwZW5zIHRvIGFscmVhZHkgZXhpc3QgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHN0YWdpbmcgc3lzcm9vdAorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBieSB0aGUgdGltZSB0aGUgcmVjaXBlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmN5IGlzCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGVhcmxpZXIgZHVyaW5nIHJlY2lwZSBwcm9jZXNzaW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21wb25lbnQgYnVpbHQgYnkgdGhlIHJlY2lwZSBjb25kaXRpb25hbGx5IGVuYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBjYW4gZmluZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQtdGltZSBkZXBlbmRlbmN5IGluIHRoZSBzdGFnaW5nIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY3kgaXMgbWlzc2luZywgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gaXMga25vd24gYXMgYSAiZmxvYXRpbmcgZGVwZW5kZW5jeSIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgZGVhbGluZyB3aXRoIHRoZSBzZWNvbmQgY2FzZSBpcyBtb3JlIGNvbXBsZXgsIGZvY3VzIHdpbGwKKyAgICAgICAgICAgIGJlIG9uIHRoZSBmaXJzdCBjYXNlLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5idWlsZC1kZXBzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBRQSBjaGVjayBjaGVja3MgdGhhdCBldmVyeSBsaWJyYXJ5IHRoZSBjb21wb25lbnQgbGlua2VkIGFnYWluc3QgaXMKKyAgICAgICAgICAgIGRlY2xhcmVkIGFzIGEgYnVpbGQtdGltZSBkZXBlbmRlbmN5LgorICAgICAgICAgICAgSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHRoZW4gdGhlIGZpcnN0IHNpdHVhdGlvbiBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICBwcmV2aW91cyBsaXN0IGV4aXN0cywgYW5kIDxmaWxlbmFtZT5idWlsZC1kZXBzPC9maWxlbmFtZT4gcmVwb3J0cworICAgICAgICAgICAgYSBtaXNzaW5nIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciwgbW9yZSBtYW51YWwsIHdheSB0byBjaGVjayBhIHJlY2lwZSBmb3IgbWlzc2luZyBidWlsZC10aW1lCisgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpcnN0IHR5cGUgaXMgdG8gYnVpbGQgd2l0aCBhbiBlbXB0eSBzdGFnaW5nCisgICAgICAgICAgICBzeXNyb290LgorICAgICAgICAgICAgVGhpcyBtZXRob2QgY2FuIGFsc28gZmluZCBtaXNzaW5nIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICB0aGF0IGFyZSBub3QgaW4gdGhlIGZvcm0gb2YgbGlicmFyaWVzLCB3aGljaCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC1kZXBzPC9maWxlbmFtZT4gUUEgY2hlY2sgaXMgdW5hYmxlIHRvIGZpbmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFuIGVhc3kgd2F5IHRvIGVtcHR5IHRoZSBzdGFnaW5nIHN5c3Jvb3RzIGlzIHRvIHNpbXBseSByZW1vdmUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5CisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRERJUic+PGZpbGVuYW1lPkJVSUxERElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vdG1wPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhcyBpdCBpbmNsdWRlcyB0aGUgc3RhZ2luZyBzeXNyb290cy4KKyAgICAgICAgICAgIEFub3RoZXIsIGZhc3RlciBtZXRob2QgdG8gZW1wdHkgdGhlIHN0YWdpbmcgc3lzcm9vdHMgaXMgdG8gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvd2lwZS1zeXNyb290PC9maWxlbmFtZT4gc2NyaXB0LAorICAgICAgICAgICAgd2hpY2ggcmVtb3ZlcyBqdXN0IHRoZSBzdGFnaW5nIHN5c3Jvb3RzIGFuZCBrZWVwcyBldmVyeXRoaW5nIGVsc2UKKyAgICAgICAgICAgIGluIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NyaXB0cy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYXBwZWFycyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gYWZ0ZXIgcnVubmluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWJpbGl0eSB0byB0byBydW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2lwZS1zeXNyb290PC9maWxlbmFtZT4gaW1tZWRpYXRlbHkuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKwogICAgIDwvc2VjdGlvbj4KIAogICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLWJpdGJha2UnPgpAQCAtMzM2LDQ4ICs4NTQsNzYgQEAKICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLXZhcmlhYmxlcyc+Ci0gICAgICAgIDx0aXRsZT5WYXJpYWJsZXM8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBCaXRCYWtlIG9wdGlvbiB0bwotICAgICAgICAgICAgZGlzcGxheSB0aGUgcGFyc2luZyBlbnZpcm9ubWVudCBmb3IgYSBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaXNwbGF5cyB0aGUgZ2VuZXJhbCBwYXJzaW5nIGVudmlyb25tZW50OgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgLWUKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIHNob3dzIHRoZSBwYXJzaW5nIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljCi0gICAgICAgICAgICByZWNpcGU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSAtZSA8cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KICAgICA8c2VjdGlvbiBpZD0ncmVjaXBlLWxvZ2dpbmctbWVjaGFuaXNtcyc+CiAgICAgICAgIDx0aXRsZT5SZWNpcGUgTG9nZ2luZyBNZWNoYW5pc21zPC90aXRsZT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCZXN0IHByYWN0aWNlcyBleGlzdCB3aGlsZSB3cml0aW5nIHJlY2lwZXMgdGhhdCBib3RoIGxvZyBidWlsZCBwcm9ncmVzcyBhbmQKLSAgICAgICAgICAgIGFjdCBvbiBidWlsZCBjb25kaXRpb25zIHN1Y2ggYXMgd2FybmluZ3MgYW5kIGVycm9ycy4KLSAgICAgICAgICAgIEJvdGggUHl0aG9uIGFuZCBCYXNoIGxhbmd1YWdlIGJpbmRpbmdzIGV4aXN0IGZvciB0aGUgbG9nZ2luZyBtZWNoYW5pc206CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBzZXZlcmFsIGxvZ2dpbmcgZnVuY3Rpb25zIGZvciBwcm9kdWNpbmcKKyAgICAgICAgICAgIGRlYnVnZ2luZyBvdXRwdXQgYW5kIHJlcG9ydGluZyBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgICAgICAgICAgRm9yIFB5dGhvbiBmdW5jdGlvbnMsIHRoZSBmb2xsb3dpbmcgbG9nZ2luZyBmdW5jdGlvbnMgZXhpc3QuCisgICAgICAgICAgICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGxvZyB0bworICAgICAgICAgICAgPGZpbGVuYW1lPiR7VH0vbG9nLmRvXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2s8L3JlcGxhY2VhYmxlPiwKKyAgICAgICAgICAgIGFuZCBjYW4gYWxzbyBsb2cgdG8gc3RhbmRhcmQgb3V0cHV0IChzdGRvdXQpIHdpdGggdGhlIHJpZ2h0CisgICAgICAgICAgICBzZXR0aW5nczoKICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QeXRob246PC9lbXBoYXNpcz4gRm9yIFB5dGhvbiBmdW5jdGlvbnMsIEJpdEJha2UKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgc2V2ZXJhbCBsb2dsZXZlbHM6IDxmaWxlbmFtZT5iYi5mYXRhbDwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXJyb3I8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJiLndhcm48L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLm5vdGU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJiLnBsYWluPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+YmIuZGVidWc8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJhc2g6PC9lbXBoYXNpcz4gRm9yIEJhc2ggZnVuY3Rpb25zLCB0aGUgc2FtZSBzZXQKLSAgICAgICAgICAgICAgICAgICAgb2YgbG9nbGV2ZWxzIGV4aXN0IGFuZCBhcmUgYWNjZXNzZWQgd2l0aCBhIHNpbWlsYXIgc3ludGF4OgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJmYXRhbDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmJlcnJvcjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJ3YXJuPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYm5vdGU8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJicGxhaW48L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT5iYmRlYnVnPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIucGxhaW4oPC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXNnPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+KTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBXcml0ZXMgPHJlcGxhY2VhYmxlPm1zZzwvcmVwbGFjZWFibGU+IGFzIGlzIHRvIHRoZSBsb2cgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgYWxzbyBsb2dnaW5nIHRvIHN0ZG91dC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIubm90ZSg8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tc2c8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4pPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFdyaXRlcyAiTk9URTogPHJlcGxhY2VhYmxlPm1zZzwvcmVwbGFjZWFibGU+IiB0byB0aGUgbG9nLgorICAgICAgICAgICAgICAgICAgICBBbHNvIGxvZ3MgdG8gc3Rkb3V0IGlmIEJpdEJha2UgaXMgY2FsbGVkIHdpdGggIi12Ii4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZGVidWcoPC9maWxlbmFtZT48cmVwbGFjZWFibGU+bGV2ZWw8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4sJm5ic3A7PC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXNnPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+KTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBXcml0ZXMgIkRFQlVHOiA8cmVwbGFjZWFibGU+bXNnPC9yZXBsYWNlYWJsZT4iIHRvIHRoZSBsb2cuCisgICAgICAgICAgICAgICAgICAgIEFsc28gbG9ncyB0byBzdGRvdXQgaWYgdGhlIGxvZyBsZXZlbCBpcyBncmVhdGVyIHRoYW4gb3IKKyAgICAgICAgICAgICAgICAgICAgZXF1YWwgdG8gPHJlcGxhY2VhYmxlPmxldmVsPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdXNhZ2UtYW5kLXN5bnRheCc+LUQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi53YXJuKDwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1zZzwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPik8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgV3JpdGVzICJXQVJOSU5HOiA8cmVwbGFjZWFibGU+bXNnPC9yZXBsYWNlYWJsZT4iIHRvIHRoZSBsb2cKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgYWxzbyBsb2dnaW5nIHRvIHN0ZG91dC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXJyb3IoPC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXNnPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+KTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBXcml0ZXMgIkVSUk9SOiA8cmVwbGFjZWFibGU+bXNnPC9yZXBsYWNlYWJsZT4iIHRvIHRoZSBsb2cKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgYWxzbyBsb2dnaW5nIHRvIHN0ZG91dC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2F1c2UgdGhlIHRhc2sgdG8gZmFpbC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5mYXRhbCg8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tc2c8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4pPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9nZ2luZyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5lcnJvcig8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tc2c8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4pPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYnV0IGFsc28gY2F1c2VzIHRoZSBjYWxsaW5nIHRhc2sgdG8gZmFpbC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZmF0YWwoKTwvZmlsZW5hbWU+IHJhaXNlcyBhbiBleGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBtZWFucyB5b3UgZG8gbm90IG5lZWQgdG8gcHV0IGEgInJldHVybiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBhZnRlciB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9yIGd1aWRhbmNlIG9uIGhvdyBsb2dnaW5nIGlzIGhhbmRsZWQgaW4gYm90aCBQeXRob24gYW5kIEJhc2ggcmVjaXBlcywgc2VlIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPmxvZ2dpbmcuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICBUaGUgc2FtZSBsb2dnaW5nIGZ1bmN0aW9ucyBhcmUgYWxzbyBhdmFpbGFibGUgaW4gc2hlbGwgZnVuY3Rpb25zLAorICAgICAgICAgICAgdW5kZXIgdGhlIG5hbWVzCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJwbGFpbjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmJub3RlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJkZWJ1ZzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmJ3YXJuPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJlcnJvcjwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPmJiZmF0YWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbG9nZ2luZyc+PGZpbGVuYW1lPmxvZ2dpbmc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGltcGxlbWVudHMgdGhlc2UgZnVuY3Rpb25zLgorICAgICAgICAgICAgU2VlIHRoYXQgY2xhc3MgaW4gdGhlCiAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4gZm9sZGVyIG9mIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24uCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8c2VjdGlvbiBpZD0nbG9nZ2luZy13aXRoLXB5dGhvbic+CkBAIC00NTYsMTggKzEwMDIsOTIgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIG90aGVyIHRpcHMgdGhhdCB5b3UgbWlnaHQgZmluZCB1c2VmdWw6CiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuIGFkZGluZyBuZXcgcGFja2FnZXMsIGl0IGlzIHdvcnRoIHdhdGNoaW5nIGZvcgotICAgICAgICAgICAgICAgICAgICB1bmRlc2lyYWJsZSBpdGVtcyBtYWtpbmcgdGhlaXIgd2F5IGludG8gY29tcGlsZXIgY29tbWFuZCBsaW5lcy4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBkbyBub3Qgd2FudCByZWZlcmVuY2VzIHRvIGxvY2FsIHN5c3RlbSBmaWxlcyBsaWtlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYi88L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBhZGRpbmcgbmV3IHBhY2thZ2VzLCBpdCBpcyB3b3J0aCB3YXRjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdW5kZXNpcmFibGUgaXRlbXMgbWFraW5nIHRoZWlyIHdheSBpbnRvIGNvbXBpbGVyIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgZG8gbm90IHdhbnQgcmVmZXJlbmNlcyB0byBsb2NhbCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgbGlrZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWIvPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvaW5jbHVkZS88L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoZSA8ZmlsZW5hbWU+cHNwbGFzaDwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGJvb3Qgc3BsYXNoc2NyZWVuLAotICAgICAgICAgICAgICAgICAgICBhZGQgPGZpbGVuYW1lPnBzcGxhc2g9ZmFsc2U8L2ZpbGVuYW1lPiB0byAgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgICAgIGFkZCA8ZmlsZW5hbWU+cHNwbGFzaD1mYWxzZTwvZmlsZW5hbWU+IHRvICB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGluZS4KICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gcHJldmVudHMgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPiBmcm9tIGxvYWRpbmcKICAgICAgICAgICAgICAgICAgICAgYW5kIHRodXMgYWxsb3dzIHlvdSB0byBzZWUgdGhlIGNvbnNvbGUuCiAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3dpdGNoIG91dCBvZiB0aGUgc3BsYXNoc2NyZWVuIGJ5Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaGluZyB0aGUgdmlydHVhbCBjb25zb2xlIChlLmcuIEZuK0xlZnQgb3IgRm4rUmlnaHQgb24gYSBaYXVydXMpLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2hpbmcgdGhlIHZpcnR1YWwgY29uc29sZSAoZS5nLiBGbitMZWZ0IG9yIEZuK1JpZ2h0CisgICAgICAgICAgICAgICAgICAgIG9uIGEgWmF1cnVzKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmluZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICh1c3VhbGx5IDxmaWxlbmFtZT50bXAvPC9maWxlbmFtZT4sIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgY2FuIG9mdGVuIGZpeCB0ZW1wb3JhcnkgYnVpbGQgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICBSZW1vdmluZyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gaXMgdXN1YWxseSBhCisgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlbHkgY2hlYXAgb3BlcmF0aW9uLCBiZWNhdXNlIHRhc2sgb3V0cHV0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAodXN1YWxseSA8ZmlsZW5hbWU+c3N0YXRlLWNhY2hlLzwvZmlsZW5hbWU+LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBhbHNvIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkpLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92aW5nIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBtaWdodCBiZSBhCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrYXJvdW5kIHJhdGhlciB0aGFuIGEgZml4LgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSB1bmRlcmx5aW5nIGNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBvZiBhbiBpc3N1ZSBiZWZvcmUgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBpcyBhIGdvb2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkZWEuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIGhvdyBhIGZlYXR1cmUgaXMgdXNlZCBpbiBwcmFjdGljZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgcmVjaXBlcyBjYW4gYmUgdmVyeSBoZWxwZnVsLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb25maWd1cmUgc29tZSBtZXRob2QgdGhhdAorICAgICAgICAgICAgICAgICAgICBhbGxvd3MgeW91IHRvIHF1aWNrbHkgc2VhcmNoIHRocm91Z2ggZmlsZXMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nIEdOVSBHcmVwLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHNoZWxsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvIHJlY3Vyc2l2ZWx5IHNlYXJjaCB0aHJvdWdoIGNvbW1vbgorICAgICAgICAgICAgICAgICAgICByZWNpcGUtcmVsYXRlZCBmaWxlcywgc2tpcHBpbmcgYmluYXJ5IGZpbGVzLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmdpdDwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSAoYXNzdW1pbmcgaXRzIG5hbWUgc3RhcnRzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgImJ1aWxkIik6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZygpIHsKKyAgICAgICAgIGdyZXAgLUlyIFwKKyAgICAgICAgICAgICAgLS1leGNsdWRlLWRpcj0uZ2l0IFwKKyAgICAgICAgICAgICAgLS1leGNsdWRlLWRpcj0nYnVpbGQqJyBcCisgICAgICAgICAgICAgIC0taW5jbHVkZT0nKi5iYionIFwKKyAgICAgICAgICAgICAgLS1pbmNsdWRlPScqLmluYyonIFwKKyAgICAgICAgICAgICAgLS1pbmNsdWRlPScqLmNvbmYqJyBcCisgICAgICAgICAgICAgIC0taW5jbHVkZT0nKi5weSonIFwKKyAgICAgICAgICAgICAgIiRAIgorICAgICB9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIHVzYWdlIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZyBGT08gICAgIyBTZWFyY2ggcmVjdXJzaXZlbHkgZm9yICJGT08iCisgICAgICQgZyAtaSBmb28gIyBTZWFyY2ggcmVjdXJzaXZlbHkgZm9yICJmb28iLCBpZ25vcmluZyBjYXNlCisgICAgICQgZyAtdyBGT08gIyBTZWFyY2ggcmVjdXJzaXZlbHkgZm9yICJGT08iIGFzIGEgd29yZCwgaWdub3JpbmcgZS5nLiAiRk9PQkFSIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIGZpZ3VyaW5nIG91dCBob3cgc29tZSBmZWF0dXJlIHdvcmtzIHJlcXVpcmVzIGEgbG90IG9mCisgICAgICAgICAgICAgICAgICAgIHNlYXJjaGluZywgaXQgbWlnaHQgaW5kaWNhdGUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgYmUgZXh0ZW5kZWQgb3IgaW1wcm92ZWQuCisgICAgICAgICAgICAgICAgICAgIEluIHN1Y2ggY2FzZXMsIGNvbnNpZGVyIGZpbGluZyBhIGRvY3VtZW50YXRpb24gYnVnIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8nPkJ1Z3ppbGxhPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzdWJtaXQgYSBidWcgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdHJhY2tpbmctYnVncyc+VHJhY2tpbmcgQnVnczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFudWFscyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvY3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdGhhdCBhcmUgcHVyZWx5IGludGVybmFsIGFuZCBoYXZlIGEgbGltaXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUgKGUuZy4gaW50ZXJuYWwgdmFyaWFibGVzIHVzZWQgdG8gaW1wbGVtZW50IGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICA8L3BhcmE+CkBAIC05NTEsNiArMTU3MSwxOSBAQAogICAgICAgICAqIFBSIGNoYW5nZWQgZnJvbSAicjAiIHRvICJyMSIKICAgICAgICAgKiBQViBjaGFuZ2VkIGZyb20gIjAuMS4xMCIgdG8gIjAuMS4xMiIKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWRpZmY8L2ZpbGVuYW1lPiB0b29sIHJlcXVpcmVzCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+R2l0UHl0aG9uPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBpbnN0YWxsIGl0IHVzaW5nIFBpcDMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgJCBwaXAzIGluc3RhbGwgR2l0UHl0aG9uIC0tdXNlcgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHl0aG9uMy1naXQ8L2ZpbGVuYW1lPiB1c2luZyB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIHBhY2thZ2UgbWFuYWdlciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXB0LWdldDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG5mPC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT56aXBwZXI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvZmlndXJlcy9zZGstZGV2dG9vbC1hZGQtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL2ZpZ3VyZXMvc2RrLWRldnRvb2wtYWRkLWZsb3cucG5nCmluZGV4IGMwOWU2MGUuLjk4NWFjMzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvZmlndXJlcy9zZGstZGV2dG9vbC1hZGQtZmxvdy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9maWd1cmVzL3Nkay1kZXZ0b29sLWFkZC1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL2ZpZ3VyZXMvc2RrLWRldnRvb2wtbW9kaWZ5LWZsb3cucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9maWd1cmVzL3Nkay1kZXZ0b29sLW1vZGlmeS1mbG93LnBuZwppbmRleCBjZDA2YzAxLi5mZDY4NGZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL2ZpZ3VyZXMvc2RrLWRldnRvb2wtbW9kaWZ5LWZsb3cucG5nCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvZmlndXJlcy9zZGstZGV2dG9vbC1tb2RpZnktZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9maWd1cmVzL3Nkay1kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL2ZpZ3VyZXMvc2RrLWRldnRvb2wtdXBncmFkZS1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTQ3NGRhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9maWd1cmVzL3Nkay1kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtY3VzdG9taXppbmcueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtY3VzdG9taXppbmcueG1sCmluZGV4IDc5MzI2MDcuLmU4YThiOGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LWN1c3RvbWl6aW5nLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1hcHBlbmRpeC1jdXN0b21pemluZy54bWwKQEAgLTM4MSw2ICszODEsMTkgQEAKICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgIDwvbm90ZT4KICAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBleHBsaWNpdGx5IGNvbnRyb2wgd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgdG9vbGNoYWluCisgICAgICAgIHdoZW4geW91IGJ1aWxkIGFuIFNESyBieSBzZXR0aW5nIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0RLX0lOQ0xVREVfVE9PTENIQUlOJz48ZmlsZW5hbWU+U0RLX0lOQ0xVREVfVE9PTENIQUlOPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSB0byAiMSIuCisgICAgICAgIEluIHBhcnRpY3VsYXIsIGl0IGlzIHVzZWZ1bCB0byBpbmNsdWRlIHRoZSB0b29sY2hhaW4gd2hlbiB5b3UKKyAgICAgICAgaGF2ZSBzZXQgPGZpbGVuYW1lPlNES19FWFRfVFlQRTwvZmlsZW5hbWU+IHRvCisgICAgICAgICJtaW5pbWFsIiwgd2hpY2ggYnkgZGVmYXVsdCwgZXhjbHVkZXMgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgQWxzbywgaXQgaXMgaGVscGZ1bCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgc21hbGwgU0RLIGZvciB1c2Ugd2l0aAorICAgICAgICBhbiBJREUsIHN1Y2ggYXMgRWNsaXBzZSwgb3Igc29tZSBvdGhlciB0b29sIHdoZXJlIHlvdSBkbyBub3Qgd2FudAorICAgICAgICB0byB0YWtlIGV4dHJhIHN0ZXBzIHRvIGluc3RhbGwgYSB0b29sY2hhaW4uCisgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogPC9hcHBlbmRpeD4KIDwhLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LW1hcnMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtbWFycy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0ZTA3MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LW1hcnMueG1sCkBAIC0wLDAgKzEsODcxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8YXBwZW5kaXggaWQ9J3Nkay1hcHBlbmRpeC1tYXJzJz4KKyAgICA8dGl0bGU+VXNpbmcgRWNsaXBzZSBNYXJzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgYm90aCB0aGUgTmVvbiBhbmQgTWFycworICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgIFRoaXMgYXBwZW5kaXggcHJlc2VudHMgaW5mb3JtYXRpb24gdGhhdCBkZXNjcmliZXMgaG93IHRvIG9idGFpbiBhbmQKKyAgICAgICAgY29uZmlndXJlIHRoZSBNYXJzIHZlcnNpb24gb2YgRWNsaXBzZS4KKyAgICAgICAgSXQgYWxzbyBwcm92aWRlcyBhIGJhc2ljIHByb2plY3QgZXhhbXBsZSB0aGF0IHlvdSBjYW4gd29yayB0aHJvdWdoCisgICAgICAgIGZyb20gc3RhcnQgdG8gZmluaXNoLgorICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgRWNsaXBzZSBJREUgYW5kIHRoZSBZb2N0bworICAgICAgICBQcm9qZWN0IEVjbGlwc2UgUGx1Zy1Jbiwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWRldmVsb3BpbmctYXBwbGljYXRpb25zLXVzaW5nLWVjbGlwc2UnPkRldmVsb3BpbmcgQXBwbGljYXRpb25zIFVzaW5nIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFycy1zZXR0aW5nLXVwLXRoZS1lY2xpcHNlLWlkZSc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBNYXJzIFZlcnNpb24gb2YgdGhlIEVjbGlwc2UgSURFPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGRldmVsb3Agd2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdGFsbCB0aGUgTWFycyB2ZXJzaW9uIG9mIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJlIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCBFY2xpcHNlIGZyb20geW91ciBkaXN0cmlidXRpb24ncyBwYWNrYWdlCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGluc3RhbGwgRWNsaXBzZSBmcm9tIHRoZSBvZmZpY2lhbCBFY2xpcHNlCisgICAgICAgICAgICAgICAgZG93bmxvYWQgc2l0ZSBhcyBkaXJlY3RlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21hcnMtaW5zdGFsbGluZy1lY2xpcHNlLWlkZSc+CisgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgTWFycyBFY2xpcHNlIElERTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBsb2NhdGUsIGluc3RhbGwsIGFuZCBjb25maWd1cmUKKyAgICAgICAgICAgICAgICBNYXJzIEVjbGlwc2U6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxvY2F0ZSB0aGUgTWFycyBEb3dubG9hZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT3BlbiBhIGJyb3dzZXIgYW5kIGdvIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL21hcnMvJz5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL21hcnMvPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCB0aGUgVGFyYmFsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJEb3dubG9hZCIgYnV0dG9uIGFuZCB0aGVuIHVzZSB0aGUgIkxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgRWNsaXBzZSBJREUgZm9yIEMrKyBEZXZlbG9wZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgZm9yIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvZG93bmxvYWQucGhwP2ZpbGU9L3RlY2hub2xvZ3kvZXBwL2Rvd25sb2Fkcy9yZWxlYXNlL21hcnMvMi9lY2xpcHNlLWNwcC1tYXJzLTItbGludXgtZ3RrLXg4Nl82NC50YXIuZ3onPjY0LWJpdCB1bmRlciBMaW51eCBmb3IgRWNsaXBzZSBJREUgZm9yIEMrKyBEZXZlbG9wZXJzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIGEgTGludXggNjQtYml0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5VbnBhY2sgdGhlIFRhcmJhbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gYSBjbGVhbiBkaXJlY3RvcnkgYW5kIHVucGFjayB0aGUgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgdGFyIC14enZmIH4vRG93bmxvYWRzL2VjbGlwc2UtY3BwLW1hcnMtMi1saW51eC1ndGsteDg2XzY0LnRhci5negorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRXZlcnl0aGluZyB1bnBhY2tzIGludG8gYSBmb2xkZXIgbmFtZWQgIkVjbGlwc2UiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGF1bmNoIEVjbGlwc2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZSBjbGljayB0aGUgIkVjbGlwc2UiIGZpbGUgaW4gdGhlIGZvbGRlciB0bworICAgICAgICAgICAgICAgICAgICAgICAgbGF1bmNoIEVjbGlwc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21hcnMtY29uZmlndXJpbmctdGhlLW1hcnMtZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBNYXJzIEVjbGlwc2UgSURFPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGNvbmZpZ3VyZSB0aGUgTWFycyBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIGhvdyB5b3UgaW5zdGFsbGVkIEVjbGlwc2UgYW5kIHdoYXQgeW91IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBkb25lLCBzb21lIG9mIHRoZSBvcHRpb25zIHdpbGwgbm90IGFwcGVhci4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbm5vdCBmaW5kIGFuIG9wdGlvbiBhcyBkaXJlY3RlZCBieSB0aGUgbWFudWFsLAorICAgICAgICAgICAgICAgICAgICBpdCBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSBFY2xpcHNlIGlzIHJ1bm5pbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIGluIHlvdXIgd29ya2JlbmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIkhlbHAiIHB1bGwtZG93biBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICJNYXJzIC0gaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL21hcnMiCisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiV29yayB3aXRoOiIgcHVsbC1kb3duIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCB0aGUgYm94IG5leHQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICJMaW51eCBUb29scyIgYW5kIHNlbGVjdCAiQy9DKysgUmVtb3RlCisgICAgICAgICAgICAgICAgICAgICAgICAoT3ZlciBUQ0YvVEUpIFJ1bi9EZWJ1ZyBMYXVuY2hlciIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAiVE0gVGVybWluYWwiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgdGhlIGJveCBuZXh0IHRvICJNb2JpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UgRGV2ZWxvcG1lbnQiIGFuZCBzZWxlY3QgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgYm94ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEMvQysrIFJlbW90ZSAoT3ZlciBUQ0YvVEUpIFJ1bi9EZWJ1ZyBMYXVuY2hlcgorICAgICBSZW1vdGUgU3lzdGVtIEV4cGxvcmVyIFVzZXIgQWN0aW9ucworICAgICBUTSBUZXJtaW5hbAorICAgICBUQ0YgUmVtb3RlIFN5c3RlbSBFeHBsb3JlciBhZGQtaW4KKyAgICAgVENGIFRhcmdldCBFeHBsb3JlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgdGhlIGJveCBuZXh0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIiBhbmQgc2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGJveGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDL0MrKyBBdXRvdG9vbHMgU3VwcG9ydAorICAgICBDL0MrKyBEZXZlbG9wbWVudCBUb29scyBTREsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIGJ5IGNsaWNraW5nIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlICJOZXh0IiBhbmQgIkZpbmlzaCIgYnV0dG9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWFycy1pbnN0YWxsaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgb3IgQWNjZXNzaW5nIHRoZSBNYXJzIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gaW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGludG8gdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICBJREUgb25lIG9mIHR3byB3YXlzOiAgdXNlIHRoZSBZb2N0byBQcm9qZWN0J3MgRWNsaXBzZQorICAgICAgICAgICAgICAgIFVwZGF0ZSBzaXRlIHRvIGluc3RhbGwgdGhlIHByZS1idWlsdCBwbHVnLWluIG9yIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgIGluc3RhbGwgdGhlIHBsdWctaW4gZnJvbSB0aGUgbGF0ZXN0IHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbWFycy1uZXctc29mdHdhcmUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBQcmUtYnVpbHQgUGx1Zy1pbiBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IEVjbGlwc2UgVXBkYXRlIFNpdGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgdGhlIE1hcnMgRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICBzaXRlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFydCB1cCB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gRWNsaXBzZSwgc2VsZWN0ICJJbnN0YWxsIE5ldworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQWRkLi4uIiBpbiB0aGUgIldvcmsgd2l0aDoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZFQ0xJUFNFX0RMX1BMVUdJTl9VUkw7L21hcnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBVUkwgZmllbGQgYW5kIHByb3ZpZGUgYSBtZWFuaW5nZnVsIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgIk5hbWUiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJPSyIgdG8gaGF2ZSB0aGUgZW50cnkgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCB0aGUgZW50cnkgZm9yIHRoZSBwbHVnLWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoZWNrIHRoZSBib3hlcyBuZXh0IHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBZb2N0byBQcm9qZWN0IFNESyBQbHVnLWluCisgICAgIFlvY3RvIFByb2plY3QgRG9jdW1lbnRhdGlvbiBwbHVnLWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbXBsZXRlIHRoZSByZW1haW5pbmcgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gc3RlcHMgYW5kIHRoZW4gcmVzdGFydCB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElERSB0byBmaW5pc2ggdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zIHVuc2lnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J21hcnMtemlwLWZpbGUtbWV0aG9kJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUGx1Zy1pbiBVc2luZyB0aGUgTGF0ZXN0IFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBpbnN0YWxsIHRoZSBNYXJzIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBmcm9tIHRoZSBsYXRlc3QKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgSkRLIDEuNysKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5pbnN0YWxsIFgxMS1yZWxhdGVkIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCB4YXV0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiBhIG5ldyB0ZXJtaW5hbCBzaGVsbCwgY3JlYXRlIGEgR2l0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB3aXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2VjbGlwc2UtcG9reQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgR2l0IHRvIGNoZWNrb3V0IHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2VjbGlwc2UtcG9reQorICAgICAkIGdpdCBjaGVja291dCBtYXJzL3lvY3RvLSZESVNUUk87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcHV0cyB5b3UgaW4gYSBkZXRhY2hlZCBIRUFEIHN0YXRlLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZpbmUgc2luY2UgeW91IGFyZSBvbmx5IGdvaW5nIHRvIGJlIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBkZXZlbG9waW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5nZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpdGhpbiB0aGUgR2l0IHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHJ1bm5pbmcgdGhlIHNldHVwIHNjcmlwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9zZXR1cC5zaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBzY3JpcHQgZmluaXNoZXMgZXhlY3V0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHByb21wdHMgeW91IHdpdGggaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsc28gaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIEdpdCByZXBvc2l0b3J5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXJsaWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgYXMgZGlyZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIHRoZSB0YWcgbmFtZSwgZG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgYW5kIGEgcmVsZWFzZSBuYW1lLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgRUNMSVBTRV9IT01FPS9ob21lL3Njb3R0cmlmL2VjbGlwc2UtcG9reS9zY3JpcHRzL2VjbGlwc2UgLi9idWlsZC5zaCAtbCBtYXJzL3lvY3RvLSZESVNUUk87IG1hc3RlciB5b2N0by0mRElTVFJPOyAyPiZhbXA7MSB8IHRlZSBidWlsZC5sb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgY29tbWFuZCBhZGRzIHRoZSB0YWcgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZCBmb3IgPGZpbGVuYW1lPm1hcnMveW9jdG8tJkRJU1RSTzs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5IRUFEPC9maWxlbmFtZT4sIHRoZW4gdGVsbHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc2NyaXB0IHRvIHVzZSB0aGUgbG9jYWwgKC1sKSBHaXQgY2hlY2tvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIHNjcmlwdCwgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3JnLnlvY3RvLnNkay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmRhdGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiBuZWNlc3NhcnksIHN0YXJ0IHRoZSBFY2xpcHNlIElERQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBiZSBzdXJlIHlvdSBhcmUgaW4gdGhlIFdvcmtiZW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJIZWxwIiBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQWRkIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGFueXRoaW5nIHlvdSB3YW50IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lIiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQXJjaGl2ZSIgYW5kIGJyb3dzZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBaSVAgZmlsZSB5b3UgYnVpbHQgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFpJUCBmaWxlIHNob3VsZCBub3QgYmUgInVuemlwcGVkIiwgYW5kIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0aGUgPGZpbGVuYW1lPiphcmNoaXZlLnppcDwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGJ5IHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrIHRoZSAiT0siIGJ1dHRvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGVjayB0aGUgYm94ZXMgdGhhdCBhcHBlYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFsbGF0aW9uIHdpbmRvdyB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFlvY3RvIFByb2plY3QgU0RLIFBsdWctaW4KKyAgICAgWW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluaXNoIHRoZSBpbnN0YWxsYXRpb24gYnkgY2xpY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBhcHByb3ByaWF0ZSBidXR0b25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zIHVuc2lnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0YXJ0IHRoZSBFY2xpcHNlIElERSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIFlvY3RvIFBsdWctaW4gYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFycy1jb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgTWFycyBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtYXJzLWNvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBNYXJzIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyaW5nIHRoZSBNYXJzIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBpbnZvbHZlcyBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgIENyb3NzIENvbXBpbGVyIG9wdGlvbnMgYW5kIHRoZSBUYXJnZXQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbnMgeW91IGNob29zZSBiZWNvbWUgdGhlIGRlZmF1bHQgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICBmb3IgYWxsIHByb2plY3RzLgorICAgICAgICAgICAgICAgIFlvdSBkbyBoYXZlIG9wcG9ydHVuaXRpZXMgdG8gY2hhbmdlIHRoZW0gbGF0ZXIgd2hlbgorICAgICAgICAgICAgICAgIHlvdSBjb25maWd1cmUgdGhlIHByb2plY3QgKHNlZSB0aGUgZm9sbG93aW5nIHNlY3Rpb24pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBzdGFydCwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyBmcm9tIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICBFY2xpcHNlIElERToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2hvb3NlICJQcmVmZXJlbmNlcyIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJXaW5kb3ciIG1lbnUgdG8gZGlzcGxheSB0aGUgUHJlZmVyZW5jZXMgRGlhbG9nLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiWW9jdG8gUHJvamVjdCBTREsiIHRvIGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIHNjcmVlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3ViLXNlY3Rpb25zIGRlc2NyaWJlIGhvdyB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAgdGhlIHBsdWctaW4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRocm91Z2hvdXQgdGhlIGRlc2NyaXB0aW9ucywgYSBzdGFydC10by1maW5pc2ggZXhhbXBsZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgcHJlcGFyaW5nIGEgUUVNVSBpbWFnZSBmb3IgdXNlIHdpdGggRWNsaXBzZSBpcyByZWZlcmVuY2VkCisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSAid2lraSIgYW5kIGlzIGxpbmtlZCB0byB0aGUgZXhhbXBsZSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPiBDb29rYm9vayBndWlkZSB0byBNYWtpbmcgYW4gRWNsaXBzZSBEZWJ1ZyBDYXBhYmxlIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J21hcnMtY29uZmlndXJpbmctdGhlLWNyb3NzLWNvbXBpbGVyLW9wdGlvbnMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgQ3Jvc3MtQ29tcGlsZXIgT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ3Jvc3MgQ29tcGlsZXIgb3B0aW9ucyBlbmFibGUgRWNsaXBzZSB0byB1c2UgeW91ciBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBjcm9zcyBjb21waWxlciB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFRvIGNvbmZpZ3VyZSB0aGVzZSBvcHRpb25zLCB5b3UgbXVzdCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgdGhlIHR5cGUgb2YgdG9vbGNoYWluLCBwb2ludCB0byB0aGUgdG9vbGNoYWluLCBzcGVjaWZ5CisgICAgICAgICAgICAgICAgICAgIHRoZSBzeXNyb290IGxvY2F0aW9uLCBhbmQgc2VsZWN0IHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3RpbmcgdGhlIFRvb2xjaGFpbiBUeXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3RhbmRhbG9uZSBwcmUtYnVpbHQgdG9vbGNoYWluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgQ3Jvc3MgQ29tcGlsZXIgT3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN0YW5kYWxvbmUgUHJlLWJ1aWx0IFRvb2xjaGFpbjo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgdHlwZSB3aGVuIHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0YW5kLWFsb25lIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcGVyIGFuZCBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJ1aWxkIGEgdGFyZ2V0IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RlYWQsIHlvdSBqdXN0IHdhbnQgdG8gdXNlIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRvb2xjaGFpbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4aXN0aW5nIGtlcm5lbCBhbmQgdGFyZ2V0IHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB5b3UgaGF2ZSBkb3dubG9hZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGluc3RhbGxlZCBhIHByZS1idWlsdCB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhpc3RpbmcgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIFN5c3RlbSBEZXJpdmVkIFRvb2xjaGFpbjo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgdHlwZSBpZiB5b3UgYnVpbHQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZyB0aGUgdG9vbGNoYWluIGJ1aWx0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZWQgaW5zaWRlIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGNyZWF0ZWQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRhYmxlIGltYWdlIHVzaW5nIHRoZSBzdGVwcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+d2lraTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB5b3Ugd291bGQgc2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBzeXN0ZW0gZGVyaXZlZCB0b29sY2hhaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwZWNpZnkgdGhlIFRvb2xjaGFpbiBSb290IExvY2F0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhIHN0YW5kLWFsb25lIHByZS1idWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiwgeW91IHNob3VsZCBiZSBwb2ludGluZyB0byB3aGVyZSBpdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstaW5zdGFsbGluZy10aGUtc2RrJz5JbnN0YWxsaW5nIHRoZSBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgU0RLIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIHVzaW5nIGEgYnVpbGQgc3lzdGVtIGRlcml2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHRoZSBwYXRoIHlvdSBwcm92aWRlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VG9vbGNoYWluIFJvb3QgTG9jYXRpb248L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHlvdSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIChlLmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZDwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWJ1aWxkaW5nLWFuLXNkay1pbnN0YWxsZXInPkJ1aWxkaW5nIGFuIFNESyBJbnN0YWxsZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwZWNpZnkgU3lzcm9vdCBMb2NhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gaXMgd2hlcmUgdGhlIHJvb3QgZmlsZXN5c3RlbSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IGhhcmR3YXJlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoaXMgbG9jYXRpb24gZGVwZW5kcyBvbiB3aGVyZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IHByZXBhcmVkIGFuIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc28sIHRoZSA8ZmlsZW5hbWU+TVlfUUVNVV9ST09URlM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSB3b3VsZCBicm93c2UgdG8gYW5kIHNlbGVjdCB0aGF0IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT4vaG9tZS9zY290dHJpZi9idWlsZC9NWV9RRU1VX1JPT1RGUzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGFuZCBvbiBob3cgdG8gZXh0cmFjdCBhbmQgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyb290IGZpbGVzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWJ1aWxkaW5nLWFuLXNkay1pbnN0YWxsZXInPkJ1aWxkaW5nIGFuIFNESyBJbnN0YWxsZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlbGVjdCB0aGUgVGFyZ2V0IEFyY2hpdGVjdHVyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHRoZSB0eXBlIG9mIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBnb2luZyB0byB1c2Ugb3IgZW11bGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHB1bGwtZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UYXJnZXQgQXJjaGl0ZWN0dXJlPC9maWxlbmFtZT4gbWVudQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2UgeW91ciBzZWxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHB1bGwtZG93biBtZW51IHNob3VsZCBoYXZlIHRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmNoaXRlY3R1cmUgeW91IG5lZWQgaXMgbm90IGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51LCB5b3Ugd2lsbCBuZWVkIHRvIGJ1aWxkIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+d2lraTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdtYXJzLWNvbmZpZ3VyaW5nLXRoZS10YXJnZXQtb3B0aW9ucyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBUYXJnZXQgT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaG9vc2UgdG8gZW11bGF0ZSBoYXJkd2FyZSB1c2luZyB0aGUgUUVNVQorICAgICAgICAgICAgICAgICAgICBlbXVsYXRvciwgb3IgeW91IGNhbiBjaG9vc2UgdG8gcnVuIHlvdXIgaW1hZ2Ugb24gYWN0dWFsCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5RRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyB0aGUgZW11bGF0b3IsIHlvdSBhbHNvIG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGtlcm5lbCBhbmQgc3BlY2lmeSBhbnkgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHNlbGVjdGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBzeXN0ZW0gZGVyaXZlZCB0b29sY2hhaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IGtlcm5lbCB5b3UgYnVpbHQgd2lsbCBiZSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBwZXJmb3JtZWQgdGhlIHN0ZXBzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPndpa2k8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBzcGVjaWZ5IHlvdXIgQnVpbGQgRGlyZWN0b3J5IHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgaW1hZ2UgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZC90bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2L2J6SW1hZ2UtcWVtdXg4Ni5iaW48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBzZWxlY3RlZCB0aGUgc3RhbmRhbG9uZSBwcmUtYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHRoZSBwcmUtYnVpbHQgaW1hZ2UgeW91IGRvd25sb2FkZWQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZSBkaXJlY3RvcnkgeW91IHNwZWNpZmllZCB3aGVuIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkZWQgdGhlIGltYWdlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Nb3N0IGN1c3RvbSBvcHRpb25zIGFyZSBmb3IgYWR2YW5jZWQgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzIHRvIGZ1cnRoZXIgY3VzdG9taXplIHRoZWlyIFFFTVUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2Ugb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGJldHdlZW4gcGFpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVkIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCBvdXRzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlcmlhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ub2dyYXBoaWM8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmt2bTwvZmlsZW5hbWU+IG11c3QgYWxsIGJlIG91dHNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+bWFuIHFlbXU8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGhlbHAgb24gYWxsIHRoZSBvcHRpb25zIGFuZCB0aGVpciB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIHNlcmlhbCDigJgmbHQ7LW0gMjU2IC1mdWxsLXNjcmVlbiZndDvigJkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIG1vZGUsIFN5c3Jvb3QgaXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgQ3Jvc3MtQ29tcGlsZXIgT3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN5c3Jvb3QgTG9jYXRpb246PC9maWxlbmFtZT4gZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4dGVybmFsIEhXOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3aWxsIGJlIHVzaW5nIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJBcHBseSIgYW5kICJPSyIgdG8gc2F2ZSB5b3VyIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21hcnMtY3JlYXRpbmctdGhlLXByb2plY3QnPgorICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIFByb2plY3Q8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdHdvIHR5cGVzIG9mIHByb2plY3RzOiAgQXV0b3Rvb2xzLWJhc2VkLCBvcgorICAgICAgICAgICAgTWFrZWZpbGUtYmFzZWQuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUgQXV0b3Rvb2xzLWJhc2VkIHByb2plY3RzCisgICAgICAgICAgICBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgTWFrZWZpbGUtYmFzZWQgcHJvamVjdHMgaW4gYQorICAgICAgICAgICAgdGVybWluYWwgd2luZG93LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFrZWZpbGUtYmFzZWQtcHJvamVjdHMnPk1ha2VmaWxlLUJhc2VkIFByb2plY3RzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBEbyBub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBwcm9qZWN0IG5hbWVzCisgICAgICAgICAgICAgICAgKGUuZy4gc3BhY2VzLCB1bmRlcnNjb3JlcywgZXRjLikuICBEb2luZyBzbyBjYW4KKyAgICAgICAgICAgICAgICBjYXVzZSBjb25maWd1cmF0aW9uIHRvIGZhaWwuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNyZWF0ZSBhIHByb2plY3QgYmFzZWQgb24gYSBZb2N0byB0ZW1wbGF0ZSBhbmQgdGhlbiBkaXNwbGF5CisgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJDIFByb2plY3QiIGZyb20gdGhlICJGaWxlIC0+IE5ldyIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBTREsgQXV0b3Rvb2xzIFByb2plY3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCA8ZmlsZW5hbWU+SGVsbG8gV29ybGQgQU5TSSBDIEF1dG90b29scyBQcm9qZWN0czwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0IGJhc2VkIG9uIGEgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QdXQgYSBuYW1lIGluIHRoZSA8ZmlsZW5hbWU+UHJvamVjdCBuYW1lOjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIGh5cGhlbnMgYXMgcGFydCBvZiB0aGUgbmFtZQorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+aGVsbG88L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiTmV4dCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gaW4gdGhlIHZhcmlvdXMKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkZpbmlzaCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB0aGUgIm9wZW4gcGVyc3BlY3RpdmUiIHByb21wdCBhcHBlYXJzLAorICAgICAgICAgICAgICAgICAgICBjbGljayAiWWVzIiBzbyB0aGF0IHlvdSBpbiB0aGUgQy9DKysgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgbGVmdC1oYW5kIG5hdmlnYXRpb24gcGFuZSBzaG93cyB5b3VyCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzcGxheSB5b3VyIHNvdXJjZSBieSBkb3VibGUgY2xpY2tpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QncyBzb3VyY2UgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21hcnMtY29uZmlndXJpbmctdGhlLWNyb3NzLXRvb2xjaGFpbnMnPgorICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLVRvb2xjaGFpbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGVhcmxpZXIgc2VjdGlvbiwKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYXJzLWNvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPkNvbmZpZ3VyaW5nIHRoZSBNYXJzIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iLAorICAgICAgICAgICAgc2V0cyB1cCB0aGUgZGVmYXVsdCBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGVzZSBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwcm9qZWN0IGJ5IGZvbGxvd2luZworICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiWW9jdG8gUHJvamVjdCBTZXR0aW5ncyIgZnJvbQorICAgICAgICAgICAgICAgICAgICB0aGUgIlByb2plY3QgLT4gUHJvcGVydGllcyIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gYnJpbmdzIHVwIHRoZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgIERpYWxvZyBhbmQgYWxsb3dzIHlvdSB0byBtYWtlIGNoYW5nZXMgc3BlY2lmaWMgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCBwcm9qZWN0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QnkgZGVmYXVsdCwgdGhlIENyb3NzIENvbXBpbGVyIE9wdGlvbnMgYW5kIFRhcmdldAorICAgICAgICAgICAgICAgICAgICBPcHRpb25zIGZvciBhIHByb2plY3QgYXJlIGluaGVyaXRlZCBmcm9tIHNldHRpbmdzIHlvdQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCB1c2luZyB0aGUgUHJlZmVyZW5jZXMgRGlhbG9nIGFzIGRlc2NyaWJlZAorICAgICAgICAgICAgICAgICAgICBlYXJsaWVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFycy1jb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgTWFycyBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyBEaWFsb2cgYWxsb3dzIHlvdSB0byBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICB0aG9zZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhIGdpdmVuIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIG9yIHZlcmlmeSB5b3VyIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBhbmQgY2xpY2sgIk9LIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJpZ2h0LWNsaWNrIGluIHRoZSBuYXZpZ2F0aW9uIHBhbmUgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdCAiUmVjb25maWd1cmUgUHJvamVjdCIgZnJvbSB0aGUgcG9wLXVwIG1lbnUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VsZWN0aW9uIHJlY29uZmlndXJlcyB0aGUgcHJvamVjdCBieSBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvZ2VuLnNoPC9maWxlbmFtZT4gaW4gdGhlIHdvcmtzcGFjZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGFsc28gcnVucyA8ZmlsZW5hbWU+bGlidG9vbGl6ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9oZWFkZXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9tYWtlIC0tYTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIENsaWNrIG9uIHRoZSAiQ29uc29sZSIgdGFiIGJlbmVhdGggeW91ciBzb3VyY2UgY29kZSB0bworICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIHJlc3VsdHMgb2YgcmVjb25maWd1cmluZyB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYXJzLWJ1aWxkaW5nLXRoZS1wcm9qZWN0Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIHRoZSBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGJ1aWxkIHRoZSBwcm9qZWN0IHNlbGVjdCAiQnVpbGQgQWxsIiBmcm9tIHRoZQorICAgICAgICAgICAgIlByb2plY3QiIG1lbnUuCisgICAgICAgICAgICBUaGUgY29uc29sZSBzaG91bGQgdXBkYXRlIGFuZCB5b3UgY2FuIG5vdGUgdGhlIGNyb3NzLWNvbXBpbGVyCisgICAgICAgICAgICB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyAiWW9jdG8gUHJvamVjdCBTREsgQXV0b3Rvb2xzIiBwcm9qZWN0cywgdGhlCisgICAgICAgICAgICAgICAgRWNsaXBzZSBJREUgbWlnaHQgZGlzcGxheSBlcnJvciBtZXNzYWdlcyBmb3IKKyAgICAgICAgICAgICAgICBGdW5jdGlvbnMvU3ltYm9scy9UeXBlcyB0aGF0IGNhbm5vdCBiZSAicmVzb2x2ZWQiLCBldmVuIHdoZW4KKyAgICAgICAgICAgICAgICB0aGUgcmVsYXRlZCBpbmNsdWRlIGZpbGUgaXMgbGlzdGVkIGF0IHRoZSBwcm9qZWN0IG5hdmlnYXRvciBhbmQKKyAgICAgICAgICAgICAgICB3aGVuIHRoZSBwcm9qZWN0IGlzIGFibGUgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzIG9ubHksIGl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBhIG5ldyBsaW5rZWQKKyAgICAgICAgICAgICAgICBmb2xkZXIgdG8gdGhlIGFwcHJvcHJpYXRlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgVXNlIHRoZXNlIHN0ZXBzIHRvIGFkZCB0aGUgbGlua2VkIGZvbGRlcjoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIkZvbGRlciIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GaWxlID4gTmV3PC9maWxlbmFtZT4gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgIk5ldyBGb2xkZXIiIERpYWxvZywgc2VsZWN0ICJMaW5rIHRvIGFsdGVybmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gKGxpbmtlZCBmb2xkZXIpIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiQnJvd3NlIiB0byBuYXZpZ2F0ZSB0byB0aGUgaW5jbHVkZSBmb2xkZXIgaW5zaWRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBzeXNyb290IGxvY2F0aW9uIHNlbGVjdGVkIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJPSyIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkZpbmlzaCIgdG8gc2F2ZSB0aGUgbGlua2VkIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFycy1zdGFydGluZy1xZW11LWluLXVzZXItc3BhY2UtbmZzLW1vZGUnPgorICAgICAgICA8dGl0bGU+U3RhcnRpbmcgUUVNVSBpbiBVc2VyLVNwYWNlIE5GUyBNb2RlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yIGZyb20gd2l0aGluIEVjbGlwc2UsIGZvbGxvdyB0aGVzZQorICAgICAgICAgICAgc3RlcHM6CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsCisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3NlIGFuZCBzZWxlY3QgIkV4dGVybmFsIFRvb2xzCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb25zIC4uLiIgZnJvbSB0aGUgIlJ1biAtPiBFeHRlcm5hbCBUb29scyIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMb2NhdGUgYW5kIHNlbGVjdCB5b3VyIGltYWdlIGluIHRoZSBuYXZpZ2F0aW9uIHBhbmVsIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBsZWZ0IChlLmcuIDxmaWxlbmFtZT5xZW11X2k1ODYtcG9reS1saW51eDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDbGljayAiUnVuIiB0byBsYXVuY2ggUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaG9zdCBvbiB3aGljaCB5b3UgYXJlIHJ1bm5pbmcgUUVNVSBtdXN0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+IHV0aWxpdHkgcnVubmluZyB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgYWJsZSB0byBtYWtlIFJQQyBjYWxscyBvbiBhIHNlcnZlciBvbiB0aGF0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBRRU1VIGRvZXMgbm90IGludm9rZSBhbmQgeW91IHJlY2VpdmUgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGludm9sdmluZyA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+LCBmb2xsb3cgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyB0byBnZXQgdGhlIHNlcnZpY2UgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIG9uIGEgbmV3IFVidW50dSAxNi4wNCBMVFMgaW5zdGFsbGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgZG8gdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBnZXQgUUVNVSB0bworICAgICAgICAgICAgICAgICAgICAgICAgbGF1bmNoOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHJwY2JpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIGluc3RhbGxpbmcgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiwgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9pbml0LmQvcnBjYmluZDwvZmlsZW5hbWU+IGZpbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBPUFRJT05TPSItaSAtdyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIG1vZGlmeWluZyB0aGUgZmlsZSwgeW91IG5lZWQgdG8gc3RhcnQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gc2VydmljZSBwb3J0bWFwIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgbmVlZGVkLCBlbnRlciB5b3VyIGhvc3Qgcm9vdCBwYXNzd29yZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgc2hlbGwgd2luZG93IGF0IHRoZSBwcm9tcHQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2V0cyB1cCBhIDxmaWxlbmFtZT5UYXAgMDwvZmlsZW5hbWU+IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkIGZvciBydW5uaW5nIGluIHVzZXItc3BhY2UgTkZTIG1vZGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XYWl0IGZvciBRRU1VIHRvIGxhdW5jaC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgUUVNVSBsYXVuY2hlcywgeW91IGNhbiBiZWdpbiBvcGVyYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIE9uZSB1c2VmdWwgdGFzayBhdCB0aGlzIHBvaW50IHdvdWxkIGJlIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgSVAgQWRkcmVzcyBmb3IgdGhlIHVzZXItc3BhY2UgTkZTIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgUUVNVSBtYWNoaW5lIGFwcGVhcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHh0ZXJtIHdpbmRvdy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBhZGRyZXNzIHRvIGhlbHAgeW91IHNlZSB3aGljaCBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgIElQIGFkZHJlc3MgdGhlIGluc3RhbmNlIG9mIFFFTVUgaXMgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYXJzLWRlcGxveWluZy1hbmQtZGVidWdnaW5nLXRoZS1hcHBsaWNhdGlvbic+CisgICAgICAgIDx0aXRsZT5EZXBsb3lpbmcgYW5kIERlYnVnZ2luZyB0aGUgQXBwbGljYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB0aGUgUUVNVSBlbXVsYXRvciBpcyBydW5uaW5nIHRoZSBpbWFnZSwgeW91IGNhbiBkZXBsb3kKKyAgICAgICAgICAgIHlvdXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIEVjbGlwc2UgSURFIGFuZCB0aGVuIHVzZQorICAgICAgICAgICAgdGhlIGVtdWxhdG9yIHRvIHBlcmZvcm0gZGVidWdnaW5nLgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIEVjbGlwc2UgZG9lcyBub3Qgc3VwcG9ydCBTU0ggcG9ydCBmb3J3YXJkaW5nLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IG5lZWQgdG8gcnVuIG9yIGRlYnVnIGEgcmVtb3RlCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gdXNpbmcgdGhlIGhvc3QgZGlzcGxheSwgeW91IG11c3QgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICB0dW5uZWxpbmcgY29ubmVjdGlvbiBmcm9tIG91dHNpZGUgRWNsaXBzZSBhbmQga2VlcAorICAgICAgICAgICAgICAgIHRoYXQgY29ubmVjdGlvbiBhbGl2ZSBkdXJpbmcgeW91ciB3b3JrLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBhIG5ldyB0ZXJtaW5hbCwgcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCAtWFkgPHJlcGxhY2VhYmxlPnVzZXJfbmFtZTwvcmVwbGFjZWFibGU+QDxyZXBsYWNlYWJsZT5yZW1vdGVfaG9zdF9pcDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBhYm92ZSBmb3JtLCBoZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCAtWFkgcm9vdEAxOTIuMTY4LjcuMgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBjb21tYW5kLCBhZGQgdGhlIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQKKyAgICAgICAgICAgICAgICBpbiBFY2xpcHNlJ3MgcnVuIGNvbmZpZ3VyYXRpb24gYmVmb3JlIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgRElTUExBWT06MTAuMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIG5vdCBkZXN0cm95IHRoZSBjb25uZWN0aW9uIGR1cmluZyB5b3VyIFFFTVUKKyAgICAgICAgICAgICAgICBzZXNzaW9uIChpLmUuIGRvIG5vdAorICAgICAgICAgICAgICAgIGV4aXQgb3V0IG9mIG9yIGNsb3NlIHRoYXQgc2hlbGwpLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkRlYnVnIENvbmZpZ3VyYXRpb25zLi4uIiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAiUnVuIiBtZW51LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgbGVmdCBhcmVhLCBleHBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkMvQysrUmVtb3RlIEFwcGxpY2F0aW9uPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Mb2NhdGUgeW91ciBwcm9qZWN0IGFuZCBzZWxlY3QgaXQgdG8gYnJpbmcKKyAgICAgICAgICAgICAgICAgICAgdXAgYSBuZXcgdGFiYmVkIHZpZXcgaW4gdGhlIERlYnVnIENvbmZpZ3VyYXRpb25zIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrIG9uIHRoZSAiRGVidWdnZXIiIHRhYiB0byBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2wgZGVidWdnZXIgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBjaGFuZ2UgdG8gdGhlIGRlYnVnZ2VyIHBlcnNwZWN0aXZlIGluIEVjbGlwc2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayBvbiB0aGUgIk1haW4iIHRhYi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBRRU1VIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgIGJ5IGNsaWNraW5nIG9uICJuZXciLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgPGZpbGVuYW1lPlNTSDwvZmlsZW5hbWU+LCB3aGljaCBtZWFucworICAgICAgICAgICAgICAgICAgICBTZWN1cmUgU29ja2V0IFNoZWxsLgorICAgICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIHNlbGVjdCBhbiBUQ0YgY29ubmVjdGlvbiBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk5leHQiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xlYXIgb3V0IHRoZSAiQ29ubmVjdGlvbiBuYW1lIiBmaWVsZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZW50ZXIgYW55IG5hbWUgeW91IHdhbnQgZm9yIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHV0IHRoZSBJUCBhZGRyZXNzIGZvciB0aGUgY29ubmVjdGlvbiBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgIkhvc3QiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICBGb3IgUUVNVSwgdGhlIGRlZmF1bHQgaXMgPGZpbGVuYW1lPjE5Mi4xNjguNy4yPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGEgcHJldmlvdXMgUUVNVSBzZXNzaW9uIGRpZCBub3QgZXhpdAorICAgICAgICAgICAgICAgICAgICBjbGVhbmx5LCB0aGUgSVAgYWRkcmVzcyBpbmNyZW1lbnRzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4xOTIuMTY4LjcuMzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIElQIGFkZHJlc3MgZm9yIHRoZSBjdXJyZW50IFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24gYnkgbG9va2luZyBpbiB0aGUgeHRlcm0gdGhhdCBvcGVucyB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbGF1bmNoIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVudGVyIDxmaWxlbmFtZT5yb290PC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBkZWZhdWx0IGZvciBRRU1VLCBmb3IgdGhlICJVc2VyIiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBsZWF2ZSB0aGUgcGFzc3dvcmQgZmllbGQgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRmluaXNoIiB0byBjbG9zZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgTmV3IENvbm5lY3Rpb25zIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIG5lY2Vzc2FyeSwgdXNlIHRoZSBkcm9wLWRvd24gbWVudSBub3cgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIiBmaWVsZCBhbmQgcGljayB0aGUgSVAgQWRkcmVzcyB5b3UgZW50ZXJlZC4KKyAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Bc3N1bWluZyB5b3UgYXJlIGNvbm5lY3RpbmcgYXMgdGhlIHJvb3QgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZm9yIFFFTVUgeDg2LTY0IFNESyBpbWFnZXMgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QsIGluIHRoZSAiUmVtb3RlIEFic29sdXRlIEZpbGUgUGF0aCBmb3IKKyAgICAgICAgICAgICAgICAgICAgQy9DKysgQXBwbGljYXRpb24iIGZpZWxkLCBicm93c2UgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Jvb3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIGFsc28gYnJvd3NlIHRvIGFueSBvdGhlciBwYXRoIHlvdSBoYXZlIHdyaXRlCisgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0byBvbiB0aGUgdGFyZ2V0IHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gaXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiB3aWxsIGJlIGxvY2F0ZWQgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIFFFTVUgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmFpbCB0byBicm93c2UgdG8gYW5kIHNwZWNpZnkgYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sIFFFTVUgd2lsbCBub3QgdW5kZXJzdGFuZCB3aGF0IHRvIHJlbW90ZWx5CisgICAgICAgICAgICAgICAgICAgIGxhdW5jaC4KKyAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBpcyBoZWxwZnVsIGluIHRoYXQgaXQgYXV0byBmaWxscyB5b3VyIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIG5hbWUgZm9yIHlvdSBhc3N1bWluZyB5b3UgYnJvd3NlZCB0byBhIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHByb21wdGVkIHRvIHByb3ZpZGUgYSB1c2VybmFtZSBhbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsbHkgc2V0IGEgcGFzc3dvcmQsIGJlIHN1cmUgeW91IHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJyb290IiBhcyB0aGUgdXNlcm5hbWUgYW5kIHlvdSBsZWF2ZSB0aGUgcGFzc3dvcmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGJsYW5rLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgY2hhbmdlIHRvIHRoZSAiRGVidWciIHBlcnNwZWN0aXZlIGluIEVjbGlwc2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRGVidWciCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BY2NlcHQgdGhlIGRlYnVnIHBlcnNwZWN0aXZlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFycy11c2luZy1MaW51eHRvb2xzJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIExpbnV4dG9vbHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIgaW4gdGhlIG1hbnVhbCwgcGVyZm9ybWFuY2UgdG9vbHMgZXhpc3QKKyAgICAgICAgICAgIChMaW51eHRvb2xzKSB0aGF0IGVuaGFuY2UgeW91ciBkZXZlbG9wbWVudCBleHBlcmllbmNlLgorICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIGFpZHMgaW4gZGV2ZWxvcGluZyBhbmQgZGVidWdnaW5nIGFwcGxpY2F0aW9ucyBhbmQKKyAgICAgICAgICAgIGltYWdlcy4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoZXNlIHRvb2xzIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlIElERSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgIkxpbnV4dG9vbHMiIG1lbnUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIGFuZCB1c2UgdGhlc2UgdG9vbHMsIHNlZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLyc+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLzwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9hcHBlbmRpeD4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtb2J0YWluLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LW9idGFpbi54bWwKaW5kZXggM2Q0ZTM2NC4uMzE1NmY3NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtb2J0YWluLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1hcHBlbmRpeC1vYnRhaW4ueG1sCkBAIC0xMywyMCArMTMsMjAgQEAKICAgICAgICAgWW91IGNhbiB1c2UgZXhpc3RpbmcsIHByZS1idWlsdCB0b29sY2hhaW5zIGJ5IGxvY2F0aW5nIGFuZCBydW5uaW5nCiAgICAgICAgIGFuIFNESyBpbnN0YWxsZXIgc2NyaXB0IHRoYXQgc2hpcHMgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KICAgICAgICAgVXNpbmcgdGhpcyBtZXRob2QsIHlvdSBzZWxlY3QgYW5kIGRvd25sb2FkIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYwotICAgICAgICB0b29sY2hhaW4gaW5zdGFsbGVyIGFuZCB0aGVuIHJ1biB0aGUgc2NyaXB0IHRvIGhhbmQtaW5zdGFsbCB0aGUKKyAgICAgICAgU0RLIGluc3RhbGxlciBhbmQgdGhlbiBydW4gdGhlIHNjcmlwdCB0byBoYW5kLWluc3RhbGwgdGhlCiAgICAgICAgIHRvb2xjaGFpbi4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KICAgICAgICAgWW91IGNhbiBmaW5kIFNESyBpbnN0YWxsZXJzIGhlcmU6CiAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YW5kYXJkIFNESyBJbnN0YWxsZXJzPC9lbXBoYXNpcz4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhbmRhcmQgU0RLIEluc3RhbGxlcnM6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICBHbyB0byA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjwvdWxpbms+CiAgICAgICAgICAgICAgICAgYW5kIGZpbmQgdGhlIGZvbGRlciB0aGF0IG1hdGNoZXMgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbQogICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5pNjg2PC9maWxlbmFtZT4gZm9yIDMyLWJpdCBtYWNoaW5lcyBvcgogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54ODZfNjQ8L2ZpbGVuYW1lPiBmb3IgNjQtYml0IG1hY2hpbmVzKS48L3BhcmE+CiAKLSAgICAgICAgICAgICAgICA8cGFyYT5HbyBpbnRvIHRoYXQgZm9sZGVyIGFuZCBkb3dubG9hZCB0aGUgdG9vbGNoYWluIGluc3RhbGxlcgorICAgICAgICAgICAgICAgIDxwYXJhPkdvIGludG8gdGhhdCBmb2xkZXIgYW5kIGRvd25sb2FkIHRoZSBTREsgaW5zdGFsbGVyCiAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBpbmNsdWRlcyB0aGUgYXBwcm9wcmlhdGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KICAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWlucyBwcm92aWRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBhcmUgYmFzZWQgb2ZmIG9mCiAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSBhbmQgY29udGFpbgpAQCAtMzksOSArMzksMTQgQEAKICAgICAgcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHRlbnNpYmxlIFNESyBJbnN0YWxsZXJzPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBJbnN0YWxsZXJzIGZvciB0aGUgZXh0ZW5zaWJsZSBTREsgYXJlIGluCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4dGVuc2libGUgU0RLIEluc3RhbGxlcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBJbnN0YWxsZXJzIGZvciB0aGUgZXh0ZW5zaWJsZSBTREsgYXJlIGFsc28gbG9jYXRlZCBpbgogICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19UT09MQ0hBSU5fRExfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgVGhlc2UgaW5zdGFsbGVycyBoYXZlIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0PC9maWxlbmFtZT4gYXMgcGFydCBvZiB0aGVpciBuYW1lczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1jb3JlMi02NC10b29sY2hhaW4tZXh0LSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICA8L3BhcmE+CkBAIC01MSw4ICs1Niw4IEBACiAgICAgPHRpdGxlPkJ1aWxkaW5nIGFuIFNESyBJbnN0YWxsZXI8L3RpdGxlPgogCiAgICAgPHBhcmE+Ci0gICAgICAgIEFzIGFuIGFsdGVybmF0aXZlIHRvIGxvY2F0aW5nIGFuZCBkb3dubG9hZGluZyBhIHRvb2xjaGFpbiBpbnN0YWxsZXIsCi0gICAgICAgIHlvdSBjYW4gYnVpbGQgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgYXNzdW1pbmcgeW91IGhhdmUgZmlyc3Qgc291cmNlZAorICAgICAgICBBcyBhbiBhbHRlcm5hdGl2ZSB0byBsb2NhdGluZyBhbmQgZG93bmxvYWRpbmcgYSBTREsgaW5zdGFsbGVyLAorICAgICAgICB5b3UgY2FuIGJ1aWxkIHRoZSBTREsgaW5zdGFsbGVyIGFzc3VtaW5nIHlvdSBoYXZlIGZpcnN0IHNvdXJjZWQKICAgICAgICAgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KICAgICAgICAgU2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgpAQCAtNjksNyArNzQsNyBAQAogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgICBUbyBidWlsZCB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBmb3IgYSBzdGFuZGFyZCBTREsgYW5kIHBvcHVsYXRlCisgICAgICAgIFRvIGJ1aWxkIHRoZSBTREsgaW5zdGFsbGVyIGZvciBhIHN0YW5kYXJkIFNESyBhbmQgcG9wdWxhdGUKICAgICAgICAgdGhlIFNESyBpbWFnZSwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gLWMgcG9wdWxhdGVfc2RrCkBAIC03OCwyOCArODMsMzggQEAKICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gLWMgcG9wdWxhdGVfc2RrX2V4dAogICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIFRoZXNlIGNvbW1hbmRzIHJlc3VsdCBpbiBhIHRvb2xjaGFpbiBpbnN0YWxsZXIgdGhhdCBjb250YWlucyB0aGUgc3lzcm9vdAorICAgICAgICBUaGVzZSBjb21tYW5kcyByZXN1bHQgaW4gYSBTREsgaW5zdGFsbGVyIHRoYXQgY29udGFpbnMgdGhlIHN5c3Jvb3QKICAgICAgICAgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbS4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbXBsZXRlcywgdGhlIHRvb2xjaGFpbgorICAgICAgICBXaGVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgY29tcGxldGVzLCB0aGUgU0RLCiAgICAgICAgIGluc3RhbGxlciB3aWxsIGJlIGluCiAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L3NkazwvZmlsZW5hbWU+IGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCi0gICAgICAgIDxub3RlPgotICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyB0b29sY2hhaW4gZG9lcyBub3QgYnVpbGQgc3RhdGljIGJpbmFyaWVzLgotICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSB0b29sY2hhaW4gdG8gYnVpbGQgdGhlc2UgdHlwZXMgb2YgbGlicmFyaWVzLAotICAgICAgICAgICAgeW91IG5lZWQgdG8gYmUgc3VyZSB5b3VyIGltYWdlIGhhcyB0aGUgYXBwcm9wcmlhdGUgc3RhdGljCi0gICAgICAgICAgICBkZXZlbG9wbWVudCBsaWJyYXJpZXMuCi0gICAgICAgICAgICBVc2UgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZSBpbnNpZGUgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8KLSAgICAgICAgICAgIGluc3RhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgcGFja2FnZXMuCi0gICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB1c2luZyA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiBzdGF0aWMKLSAgICAgICAgICAgIGRldmVsb3BtZW50IGxpYnJhcmllczoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHRvb2xjaGFpbiBkb2VzIG5vdCBidWlsZCBzdGF0aWMgYmluYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgdG9vbGNoYWluIHRvIGJ1aWxkIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcywgeW91IG5lZWQgdG8gYmUgc3VyZSB5b3VyIGltYWdlIGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgc3RhdGljIGRldmVsb3BtZW50IGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluc2lkZSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICB0byBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJ5IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB1c2luZyA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZGV2ZWxvcG1lbnQgbGlicmFyaWVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBnbGliYy1zdGF0aWNkZXYiCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBidWlsZGluZyB0aGUgaW5zdGFsbGVyLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz5Db29rYm9vayBndWlkZSB0byBNYWtpbmcgYW4gRWNsaXBzZSBEZWJ1ZyBDYXBhYmxlIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICA8L25vdGU+CiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgpAQCAtMTY4LDcgKzE4Myw3IEBACiAKICAgICA8cGFyYT4KICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHJlc3VsdGluZyBkaXJlY3Rvcnkgc3RydWN0dXJlIGFmdGVyCi0gICAgICAgIHlvdSBpbnN0YWxsIHRoZSBTdGFuZGFyZCBTREsgYnkgcnVubmluZyB0aGUgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+CisgICAgICAgIHlvdSBpbnN0YWxsIHRoZSBTdGFuZGFyZCBTREsgYnkgcnVubmluZyB0aGUgPGZpbGVuYW1lPiouc2g8L2ZpbGVuYW1lPgogICAgICAgICBTREsgaW5zdGFsbGF0aW9uIHNjcmlwdDoKICAgICA8L3BhcmE+CiAKQEAgLTE5MSw3ICsyMDYsNyBAQAogICAgICAgICBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBTREsgaXMgaW5zdGFsbGVkLgogICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRpcmVjdG9yeSBpcyA8ZmlsZW5hbWU+L29wdC9wb2t5LzwvZmlsZW5hbWU+LgogICAgICAgICBBbmQsIDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4gcmVwcmVzZW50cyB0aGUgc3BlY2lmaWMKLSAgICAgICAgc25hcHNob3Qgb2YgdGhlIFNESyAoZS5nLiA8ZmlsZW5hbWU+JkRJU1RSTzsrc25hcHNob3Q8L2ZpbGVuYW1lPikuCisgICAgICAgIHNuYXBzaG90IG9mIHRoZSBTREsgKGUuZy4gPGZpbGVuYW1lPiZESVNUUk87PC9maWxlbmFtZT4pLgogICAgICAgICBGdXJ0aGVybW9yZSwgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IHJlcHJlc2VudHMgdGhlIHRhcmdldAogICAgICAgICBhcmNoaXRlY3R1cmUgKGUuZy4gPGZpbGVuYW1lPmk1ODY8L2ZpbGVuYW1lPikgYW5kCiAgICAgICAgIDxyZXBsYWNlYWJsZT5ob3N0PC9yZXBsYWNlYWJsZT4gcmVwcmVzZW50cyB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtJ3MKQEAgLTIwOSw3ICsyMjQsNyBAQAogCiAgICAgPHBhcmE+CiAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSByZXN1bHRpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZSBhZnRlcgotICAgICAgICB5b3UgaW5zdGFsbCB0aGUgRXh0ZW5zaWJsZSBTREsgYnkgcnVubmluZyB0aGUgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+CisgICAgICAgIHlvdSBpbnN0YWxsIHRoZSBFeHRlbnNpYmxlIFNESyBieSBydW5uaW5nIHRoZSA8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+CiAgICAgICAgIFNESyBpbnN0YWxsYXRpb24gc2NyaXB0OgogICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstZXh0ZW5zaWJsZS54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1leHRlbnNpYmxlLnhtbAppbmRleCAzZTExZmM5Li4xNDk2NDc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1leHRlbnNpYmxlLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1leHRlbnNpYmxlLnhtbApAQCAtNCw2MyArNCwxNTQgQEAKIAogPGNoYXB0ZXIgaWQ9J3Nkay1leHRlbnNpYmxlJz4KIAotPHRpdGxlPlVzaW5nIHRoZSBFeHRlbnNpYmxlIFNESzwvdGl0bGU+Ci0KLTxwYXJhPgotICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgdGhlIGV4dGVuc2libGUgU0RLIGFuZCBob3cgdG8gdXNlIGl0LgotICAgIFRoZSBleHRlbnNpYmxlIFNESyBtYWtlcyBpdCBlYXN5IHRvIGFkZCBuZXcgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMKLSAgICB0byBhbiBpbWFnZSwgbW9kaWZ5IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIGNvbXBvbmVudCwgdGVzdAotICAgIGNoYW5nZXMgb24gdGhlIHRhcmdldCBoYXJkd2FyZSwgYW5kIGVhc2UgaW50ZWdyYXRpb24gaW50byB0aGUgcmVzdCBvZiB0aGUKLSAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgotPC9wYXJhPgotCi08cGFyYT4KLSAgICBJbmZvcm1hdGlvbiBpbiB0aGlzIGNoYXB0ZXIgY292ZXJzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZQotICAgIHN0YW5kYXJkIFNESy4KLSAgICBJbiBvdGhlciB3b3JkcywgdGhlIGNoYXB0ZXIgcHJlc2VudHMgaW5mb3JtYXRpb24gdW5pcXVlIHRvIHRoZQotICAgIGV4dGVuc2libGUgU0RLIG9ubHkuCi0gICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIHN0YW5kYXJkIFNESywgc2VlIHRoZQotICAgICI8bGluayBsaW5rZW5kPSdzZGstdXNpbmctdGhlLXN0YW5kYXJkLXNkayc+VXNpbmcgdGhlIFN0YW5kYXJkIFNESzwvbGluaz4iCi0gICAgY2hhcHRlci4KLTwvcGFyYT4KLQotPHNlY3Rpb24gaWQ9J3Nkay1zZXR0aW5nLXVwLXRvLXVzZS10aGUtZXh0ZW5zaWJsZS1zZGsnPgotICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgRXh0ZW5zaWJsZSBTREs8L3RpdGxlPgorICAgIDx0aXRsZT5Vc2luZyB0aGUgRXh0ZW5zaWJsZSBTREs8L3RpdGxlPgogCiAgICAgPHBhcmE+Ci0gICAgICAgIEdldHRpbmcgc2V0IHVwIHRvIHVzZSB0aGUgZXh0ZW5zaWJsZSBTREsgaXMgaWRlbnRpY2FsIHRvIGdldHRpbmcgc2V0Ci0gICAgICAgIHVwIHRvIHVzZSB0aGUgc3RhbmRhcmQgU0RLLgotICAgICAgICBZb3Ugc3RpbGwgbmVlZCB0byBsb2NhdGUgYW5kIHJ1biB0aGUgaW5zdGFsbGVyIGFuZCB0aGVuIHJ1biB0aGUKLSAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBleHRlbnNpYmxlIFNESyBhbmQgaG93IHRvIGluc3RhbGwgaXQuCisgICAgICAgIEluZm9ybWF0aW9uIGNvdmVycyB0aGUgcGllY2VzIG9mIHRoZSBTREssIGhvdyB0byBpbnN0YWxsIGl0LCBhbmQKKyAgICAgICAgcHJlc2VudHMgYSBsb29rIGF0IHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+CisgICAgICAgIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIFRoZSBleHRlbnNpYmxlIFNESyBtYWtlcyBpdCBlYXN5IHRvIGFkZCBuZXcgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMKKyAgICAgICAgdG8gYW4gaW1hZ2UsIG1vZGlmeSB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyBjb21wb25lbnQsIHRlc3QKKyAgICAgICAgY2hhbmdlcyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlLCBhbmQgZWFzZSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSByZXN0IG9mCisgICAgICAgIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEZvciBhIHNpZGUtYnktc2lkZSBjb21wYXJpc29uIG9mIG1haW4gZmVhdHVyZXMgc3VwcG9ydGVkIGZvciBhbgorICAgICAgICAgICAgZXh0ZW5zaWJsZSBTREsgYXMgY29tcGFyZWQgdG8gYSBzdGFuZGFyZCBTREssIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstbWFudWFsLWludHJvJz5JbnRyb2R1Y3Rpb248L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUgdGhyb3VnaAorICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LCB5b3UgY2FuIGFsdGVybmF0aXZlbHkgbWFrZSB1c2Ugb2YgdGhlCisgICAgICAgIHRvb2xjaGFpbiBkaXJlY3RseSwgZm9yIGV4YW1wbGUgZnJvbSBNYWtlZmlsZSwgQXV0b3Rvb2xzLCBhbmQKKyAgICAgICAgRWNsaXBzZS1iYXNlZCBwcm9qZWN0cy4KICAgICAgICAgU2VlIHRoZQotICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxpbmctdGhlLXNkayc+SW5zdGFsbGluZyB0aGUgU0RLPC9saW5rPiIKLSAgICAgICAgYW5kIHRoZQotICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLXJ1bm5pbmctdGhlLXNkay1lbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQnPlJ1bm5pbmcgdGhlIFNESyBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQ8L2xpbms+IgotICAgICAgICBzZWN0aW9ucyBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbi4KLSAgICAgICAgVGhlIGZvbGxvd2luZyBpdGVtcyBoaWdobGlnaHQgdGhlIG9ubHkgZGlmZmVyZW5jZXMgYmV0d2VlbiBnZXR0aW5nCi0gICAgICAgIHNldCB1cCB0byB1c2UgdGhlIGV4dGVuc2libGUgU0RLIGFzIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBTREs6Ci0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlZmF1bHQgSW5zdGFsbGF0aW9uIERpcmVjdG9yeTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBleHRlbnNpYmxlIFNESyBpbnN0YWxscyBpbnRvIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5X3NkazwvZmlsZW5hbWU+IGZvbGRlciBvZiB5b3VyIGhvbWUgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgIEFzIHdpdGggdGhlIHN0YW5kYXJkIFNESywgeW91IGNhbiBjaG9vc2UgdG8gaW5zdGFsbCB0aGUKLSAgICAgICAgICAgICAgICBleHRlbnNpYmxlIFNESyBpbiBhbnkgbG9jYXRpb24gd2hlbiB5b3UgcnVuIHRoZSBpbnN0YWxsZXIuCi0gICAgICAgICAgICAgICAgSG93ZXZlciwgdW5saWtlIHRoZSBzdGFuZGFyZCBTREssIHRoZSBsb2NhdGlvbiB5b3UgY2hvb3NlIG5lZWRzCi0gICAgICAgICAgICAgICAgdG8gYmUgd3JpdGFibGUgZm9yIHdoaWNoZXZlciB1c2VycyBuZWVkIHRvIHVzZSB0aGUgU0RLLAotICAgICAgICAgICAgICAgIHNpbmNlIGZpbGVzIHdpbGwgbmVlZCB0byBiZSB3cml0dGVuIHVuZGVyIHRoYXQgZGlyZWN0b3J5IGR1cmluZwotICAgICAgICAgICAgICAgIHRoZSBub3JtYWwgY291cnNlIG9mIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgVG9vbHMgYW5kIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFRoZSBleHRlbnNpYmxlIFNESyBpbnN0YWxsZXIgcGVyZm9ybXMgYWRkaXRpb25hbCB0YXNrcyBhcwotICAgICAgICAgICAgICAgIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBTREsgaW5zdGFsbGVyLgotICAgICAgICAgICAgICAgIFRoZSBleHRlbnNpYmxlIFNESyBpbnN0YWxsZXIgZXh0cmFjdHMgYnVpbGQgdG9vbHMgc3BlY2lmaWMKLSAgICAgICAgICAgICAgICB0byB0aGUgU0RLIGFuZCB0aGUgaW5zdGFsbGVyIGFsc28gcHJlcGFyZXMgdGhlIGludGVybmFsIGJ1aWxkCi0gICAgICAgICAgICAgICAgc3lzdGVtIHdpdGhpbiB0aGUgU0RLLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgZXhhbXBsZSBvdXRwdXQgZm9yIHJ1bm5pbmcgdGhlIGV4dGVuc2libGUgU0RLCi0gICAgICAgICAgICAgICAgaW5zdGFsbGVyOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCAuL3Bva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2UtbWluaW1hbC1jb3JlMi02NC10b29sY2hhaW4tZXh0LTIuMStzbmFwc2hvdC5zaAotICAgICBQb2t5IChZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBEaXN0cm8pIEV4dGVuc2libGUgU0RLIGluc3RhbGxlciB2ZXJzaW9uIDIuMStzbmFwc2hvdAorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLXdvcmtpbmctcHJvamVjdHMnPlVzaW5nIHRoZSBTREsgVG9vbGNoYWluIERpcmVjdGx5PC9saW5rPiIKKyAgICAgICAgY2hhcHRlciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc2RrLWV4dGVuc2libGUtc2RrLWludHJvJz4KKyAgICAgICAgPHRpdGxlPldoeSB1c2UgdGhlIEV4dGVuc2libGUgU0RLIGFuZCBXaGF0IGlzIGluIEl0PzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXh0ZW5zaWJsZSBTREsgcHJvdmlkZXMgYSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gYW5kCisgICAgICAgICAgICBsaWJyYXJpZXMgdGFpbG9yZWQgdG8gdGhlIGNvbnRlbnRzIG9mIGEgc3BlY2lmaWMgaW1hZ2UuCisgICAgICAgICAgICBZb3Ugd291bGQgdXNlIHRoZSBFeHRlbnNpYmxlIFNESyBpZiB5b3Ugd2FudCBhIHRvb2xjaGFpbiBleHBlcmllbmNlCisgICAgICAgICAgICBzdXBwbGVtZW50ZWQgd2l0aCB0aGUgcG93ZXJmdWwgc2V0IG9mIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmRzIHRhaWxvcmVkIGZvciB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGluc3RhbGxlZCBleHRlbnNpYmxlIFNESyBjb25zaXN0cyBvZiBzZXZlcmFsIGZpbGVzIGFuZAorICAgICAgICAgICAgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBCYXNpY2FsbHksIGl0IGNvbnRhaW5zIGFuIFNESyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIHNvbWUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuIGludGVybmFsIGJ1aWxkIHN5c3RlbSwgYW5kIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBmdW5jdGlvbmFsaXR5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Nkay1zZXR0aW5nLXVwLXRvLXVzZS10aGUtZXh0ZW5zaWJsZS1zZGsnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0byBVc2UgdGhlIEV4dGVuc2libGUgU0RLPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyBpbnN0YWxsIHRoZSBTREsgb24geW91ciBob3N0CisgICAgICAgICAgICBkZXZlbG9wbWVudCBtYWNoaW5lIGJ5IHJ1bm5pbmcgdGhlIDxmaWxlbmFtZT4qLnNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluc3RhbGxhdGlvbiBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgYSB0YXJiYWxsIGluc3RhbGxlciwgd2hpY2ggaW5jbHVkZXMgdGhlCisgICAgICAgICAgICBwcmUtYnVpbHQgdG9vbGNoYWluLCB0aGUgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgc2NyaXB0LCB0aGUgaW50ZXJuYWwgYnVpbGQgc3lzdGVtLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgYW5kIHN1cHBvcnQgZmlsZXMgZnJvbSB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IHVuZGVyCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjwvdWxpbms+LgorICAgICAgICAgICAgVG9vbGNoYWlucyBhcmUgYXZhaWxhYmxlIGZvciAzMi1iaXQgYW5kIDY0LWJpdCB4ODYgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIHN5c3RlbXMgZnJvbSB0aGUgPGZpbGVuYW1lPmk2ODY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT54ODZfNjQ8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcywgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgVGhlIHRvb2xjaGFpbnMgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYXJlIGJhc2VkIG9mZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSBhbmQgY29udGFpbgorICAgICAgICAgICAgbGlicmFyaWVzIGFwcHJvcHJpYXRlIGZvciBkZXZlbG9waW5nIGFnYWluc3QgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgIEVhY2ggdHlwZSBvZiBkZXZlbG9wbWVudCBzeXN0ZW0gc3VwcG9ydHMgZml2ZSBvciBtb3JlIHRhcmdldAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG5hbWVzIG9mIHRoZSB0YXJiYWxsIGluc3RhbGxlciBzY3JpcHRzIGFyZSBzdWNoIHRoYXQgYQorICAgICAgICAgICAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaG9zdCBzeXN0ZW0gYXBwZWFycyBmaXJzdCBpbiB0aGUKKyAgICAgICAgICAgIGZpbGVuYW1lIGFuZCB0aGVuIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgc3RyaW5nCisgICAgICAgICAgICByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICBBbiBleHRlbnNpYmxlIFNESyBoYXMgdGhlIHN0cmluZyAiLWV4dCIgYXMgcGFydCBvZiB0aGUgbmFtZS4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS1nbGliYy08cmVwbGFjZWFibGU+aG9zdF9zeXN0ZW08L3JlcGxhY2VhYmxlPi08cmVwbGFjZWFibGU+aW1hZ2VfdHlwZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tdG9vbGNoYWluLWV4dC08cmVwbGFjZWFibGU+cmVsZWFzZV92ZXJzaW9uPC9yZXBsYWNlYWJsZT4uc2gKKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5ob3N0X3N5c3RlbTwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB5b3VyIGRldmVsb3BtZW50IHN5c3RlbToKKworICAgICAgICAgICAgICAgICAgICBpNjg2IG9yIHg4Nl82NC4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmltYWdlX3R5cGU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgaW1hZ2UgZm9yIHdoaWNoIHRoZSBTREsgd2FzIGJ1aWx0LgorCisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHVuZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKworICAgICAgICAgICAgICAgICAgICBpNTg2LCB4ODZfNjQsIHBvd2VycGMsIG1pcHMsIGFybXY3YSBvciBhcm12NXRlCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5yZWxlYXNlX3ZlcnNpb248L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlbGVhc2UgbnVtYmVyIG9mIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6CisKKyAgICAgICAgICAgICAgICAgICAgJkRJU1RSTzssICZESVNUUk87K3NuYXBzaG90CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBTREsgaW5zdGFsbGVyIGlzIGZvciBhIDY0LWJpdAorICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaG9zdCBzeXN0ZW0gYW5kIGEgaTU4Ni10dW5lZCB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICBiYXNlZCBvZmYgdGhlIFNESyBmb3IgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgdXNpbmcgdGhlIGN1cnJlbnQgJkRJU1RSTzsgc25hcHNob3Q6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi1leHQtJkRJU1RSTzsuc2gKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlIHRvIGRvd25sb2FkaW5nIGFuIFNESywgeW91IGNhbiBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICBTREsgaW5zdGFsbGVyLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZGluZyB0aGUgaW5zdGFsbGVyLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEFub3RoZXIgaGVscGZ1bCByZXNvdXJjZSBmb3IgYnVpbGRpbmcgYW4gaW5zdGFsbGVyIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz5Db29rYm9vayBndWlkZSB0byBNYWtpbmcgYW4gRWNsaXBzZSBEZWJ1ZyBDYXBhYmxlIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCisgICAgICAgICAgICAgICAgVGhpcyB3aWtpIHBhZ2UgZm9jdXNlcyBvbiBkZXZlbG9wbWVudCB3aGVuIHVzaW5nIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgSURFLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgU0RLIGFuZCB0b29sY2hhaW5zIGFyZSBzZWxmLWNvbnRhaW5lZCBhbmQgYnkgZGVmYXVsdCBhcmUKKyAgICAgICAgICAgIGluc3RhbGxlZCBpbnRvIHRoZSA8ZmlsZW5hbWU+cG9reV9zZGs8L2ZpbGVuYW1lPiBmb2xkZXIgaW4geW91cgorICAgICAgICAgICAgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICBZb3UgY2FuIGNob29zZSB0byBpbnN0YWxsIHRoZSBleHRlbnNpYmxlIFNESyBpbiBhbnkgbG9jYXRpb24gd2hlbgorICAgICAgICAgICAgeW91IHJ1biB0aGUgaW5zdGFsbGVyLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIGxvY2F0aW9uIHlvdSBjaG9vc2UgbmVlZHMgdG8gYmUgd3JpdGFibGUgZm9yIHdoaWNoZXZlcgorICAgICAgICAgICAgdXNlcnMgbmVlZCB0byB1c2UgdGhlIFNESywgc2luY2UgZmlsZXMgd2lsbCBuZWVkIHRvIGJlIHdyaXR0ZW4KKyAgICAgICAgICAgIHVuZGVyIHRoYXQgZGlyZWN0b3J5IGR1cmluZyB0aGUgbm9ybWFsIGNvdXJzZSBvZiBvcGVyYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBzaG93cyBob3cgdG8gcnVuIHRoZSBpbnN0YWxsZXIgZ2l2ZW4gYQorICAgICAgICAgICAgdG9vbGNoYWluIHRhcmJhbGwgZm9yIGEgNjQtYml0IHg4NiBkZXZlbG9wbWVudCBob3N0IHN5c3RlbSBhbmQKKyAgICAgICAgICAgIGEgNjQtYml0IHg4NiB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGUgU0RLIGluc3RhbGxlciBpcyBsb2NhdGVkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+fi9Eb3dubG9hZHMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBpbnRvIHdoaWNoIHlvdSBhcmUgaW5zdGFsbGluZyB0aGUgU0RLLCB0aGUgaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgbm90aWZpZXMgeW91IGFuZCBleGl0cy4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIGluIHRoZSBkaXJlY3RvcnkgYW5kCisgICAgICAgICAgICAgICAgcnVuIHRoZSBpbnN0YWxsZXIgYWdhaW4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9wb2t5LWdsaWJjLXg4Nl82NC1jb3JlLWltYWdlLW1pbmltYWwtY29yZTItNjQtdG9vbGNoYWluLWV4dC0mRElTVFJPOy5zaAorICAgICBQb2t5IChZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBEaXN0cm8pIEV4dGVuc2libGUgU0RLIGluc3RhbGxlciB2ZXJzaW9uICZESVNUUk87CiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIEVudGVyIHRhcmdldCBkaXJlY3RvcnkgZm9yIFNESyAoZGVmYXVsdDogfi9wb2t5X3Nkayk6CiAgICAgIFlvdSBhcmUgYWJvdXQgdG8gaW5zdGFsbCB0aGUgU0RLIHRvICIvaG9tZS9zY290dHJpZi9wb2t5X3NkayIuIFByb2NlZWRbWS9uXT8gWQpAQCAtNzIsMTIzMiArMTYzLDE0NjkgQEAKICAgICAgU0RLIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdXAgYW5kIGlzIHJlYWR5IHRvIGJlIHVzZWQuCiAgICAgIEVhY2ggdGltZSB5b3Ugd2lzaCB0byB1c2UgdGhlIFNESyBpbiBhIG5ldyBzaGVsbCBzZXNzaW9uLCB5b3UgbmVlZCB0byBzb3VyY2UgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBlLmcuCiAgICAgICAkIC4gL2hvbWUvc2NvdHRyaWYvcG9reV9zZGsvZW52aXJvbm1lbnQtc2V0dXAtY29yZTItNjQtcG9reS1saW51eAotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgogCi0gICAgPHBhcmE+Ci0gICAgICAgIEFmdGVyIGluc3RhbGxpbmcgdGhlIFNESywgeW91IG5lZWQgdG8gcnVuIHRoZSBTREsgZW52aXJvbm1lbnQgc2V0dXAKLSAgICAgICAgc2NyaXB0LgotICAgICAgICBIZXJlIGlzIHRoZSBvdXRwdXQ6Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICA8c2VjdGlvbiBpZD0nc2RrLXJ1bm5pbmctdGhlLWV4dGVuc2libGUtc2RrLWVudmlyb25tZW50LXNldHVwLXNjcmlwdCc+CisgICAgICAgIDx0aXRsZT5SdW5uaW5nIHRoZSBFeHRlbnNpYmxlIFNESyBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgU0RLIGluc3RhbGxlZCwgeW91IG11c3QgcnVuIHRoZSBTREsgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHNldHVwIHNjcmlwdCBiZWZvcmUgeW91IGNhbiBhY3R1YWxseSB1c2UgaXQuCisgICAgICAgICAgICBUaGlzIHNldHVwIHNjcmlwdCByZXNpZGVzIGluIHRoZSBkaXJlY3RvcnkgeW91IGNob3NlIHdoZW4geW91CisgICAgICAgICAgICBpbnN0YWxsZWQgdGhlIFNESywgd2hpY2ggaXMgZWl0aGVyIHRoZSBkZWZhdWx0CisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reV9zZGs8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb3IgdGhlIGRpcmVjdG9yeSB5b3UKKyAgICAgICAgICAgIGNob3NlIGR1cmluZyBpbnN0YWxsYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlZm9yZSBydW5uaW5nIHRoZSBzY3JpcHQsIGJlIHN1cmUgaXQgaXMgdGhlIG9uZSB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgICAgICBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgZGV2ZWxvcGluZy4KKyAgICAgICAgICAgIEVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgYmVnaW4gd2l0aCB0aGUgc3RyaW5nCisgICAgICAgICAgICAiPGZpbGVuYW1lPmVudmlyb25tZW50LXNldHVwPC9maWxlbmFtZT4iIGFuZCBpbmNsdWRlIGFzIHBhcnQgb2YKKyAgICAgICAgICAgIHRoZWlyIG5hbWUgdGhlIHR1bmVkIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHNldCB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICAgIHRvIHdoZXJlIHRoZSBTREsgd2FzIGluc3RhbGxlZCBhbmQgdGhlbiBzb3VyY2UgdGhlIGVudmlyb25tZW50CisgICAgICAgICAgICBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBzZXR1cCBzY3JpcHQgaXMgZm9yIGFuIElBLWJhc2VkCisgICAgICAgICAgICB0YXJnZXQgbWFjaGluZSB1c2luZyBpNTg2IHR1bmluZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAvaG9tZS9zY290dHJpZi9wb2t5X3NkawogICAgICAkIHNvdXJjZSBlbnZpcm9ubWVudC1zZXR1cC1jb3JlMi02NC1wb2t5LWxpbnV4CiAgICAgIFNESyBlbnZpcm9ubWVudCBub3cgc2V0IHVwOyBhZGRpdGlvbmFsbHkgeW91IG1heSBub3cgcnVuIGRldnRvb2wgdG8gcGVyZm9ybSBkZXZlbG9wbWVudCB0YXNrcy4KICAgICAgUnVuIGRldnRvb2wgLS1oZWxwIGZvciBmdXJ0aGVyIGRldGFpbHMuCi0gICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgT25jZSB5b3UgcnVuIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIHlvdSBoYXZlCi0gICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gYXZhaWxhYmxlLgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGUgc2V0dXAgc2NyaXB0LCBtYW55IGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgICAgIGRlZmluZWQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TREtUQVJHRVRTWVNST09UJz48ZmlsZW5hbWU+U0RLVEFSR0VUU1lTUk9PVDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgcGF0aCB0byB0aGUgc3lzcm9vdCB1c2VkIGZvciBjcm9zcy1jb21waWxhdGlvbgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEtHX0NPTkZJR19QQVRIJz48ZmlsZW5hbWU+UEtHX0NPTkZJR19QQVRIPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBwYXRoIHRvIHRoZSB0YXJnZXQgcGtnLWNvbmZpZyBmaWxlcworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09ORklHX1NJVEUnPjxmaWxlbmFtZT5DT05GSUdfU0lURTwvZmlsZW5hbWU+PC91bGluaz4gLSBBIEdOVSBhdXRvY29uZiBzaXRlIGZpbGUgcHJlY29uZmlndXJlZCBmb3IgdGhlIHRhcmdldAorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0MnPjxmaWxlbmFtZT5DQzwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDIGNvbXBpbGVyCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DWFgnPjxmaWxlbmFtZT5DWFg8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQysrIGNvbXBpbGVyCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DUFAnPjxmaWxlbmFtZT5DUFA8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUFTJz48ZmlsZW5hbWU+QVM8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgYXNzZW1ibGVyCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MRCc+PGZpbGVuYW1lPkxEPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIGxpbmtlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItR0RCJz48ZmlsZW5hbWU+R0RCPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEdOVSBEZWJ1Z2dlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1RSSVAnPjxmaWxlbmFtZT5TVFJJUDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdzdHJpcCcsIHdoaWNoIHN0cmlwcyBzeW1ib2xzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SQU5MSUInPjxmaWxlbmFtZT5SQU5MSUI8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAncmFubGliJworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0JKQ09QWSc+PGZpbGVuYW1lPk9CSkNPUFk8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnb2JqY29weScKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU9CSkRVTVAnPjxmaWxlbmFtZT5PQkpEVU1QPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ29iamR1bXAnCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1BUic+PGZpbGVuYW1lPkFSPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ2FyJworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTk0nPjxmaWxlbmFtZT5OTTwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdubScKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCBmb3IgdGhlIHRhcmdldCB0b29scworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1JPU1NfQ09NUElMRSc+PGZpbGVuYW1lPkNST1NTX0NPTVBJTEU8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IGZvciB0aGUgdGFyZ2V0IHRvb2xzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT05GSUdVUkVfRkxBR1MnPjxmaWxlbmFtZT5DT05GSUdVUkVfRkxBR1M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgYXJndW1lbnRzIGZvciBHTlUgY29uZmlndXJlCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gU3VnZ2VzdGVkIEMgZmxhZ3MKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNYWEZMQUdTJz48ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gU3VnZ2VzdGVkIEMrKyBmbGFncworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gU3VnZ2VzdGVkIGxpbmtlciBmbGFncyB3aGVuIHlvdSB1c2UgQ0MgdG8gbGluaworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1BQRkxBR1MnPjxmaWxlbmFtZT5DUFBGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgcHJlcHJvY2Vzc29yIGZsYWdzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSd1c2luZy1kZXZ0b29sLWluLXlvdXItc2RrLXdvcmtmbG93Jz4KLSAgICA8dGl0bGU+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBpbiBZb3VyIFNESyBXb3JrZmxvdzwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIGNvcm5lcnN0b25lIG9mIHRoZSBleHRlbnNpYmxlIFNESyBpcyBhIGNvbW1hbmQtbGluZSB0b29sCi0gICAgICAgIGNhbGxlZCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LgotICAgICAgICBUaGlzIHRvb2wgcHJvdmlkZXMgYSBudW1iZXIgb2YgZmVhdHVyZXMgdGhhdCBoZWxwCi0gICAgICAgIHlvdSBidWlsZCwgdGVzdCBhbmQgcGFja2FnZSBzb2Z0d2FyZSB3aXRoaW4gdGhlIGV4dGVuc2libGUgU0RLLCBhbmQKLSAgICAgICAgb3B0aW9uYWxseSBpbnRlZ3JhdGUgaXQgaW50byBhbiBpbWFnZSBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCi0gICAgICAgIHN5c3RlbS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lIGlzIG9yZ2FuaXplZCBzaW1pbGFybHkKLSAgICAgICAgdG8KLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiBpbiB0aGF0IGl0IGhhcyBhCi0gICAgICAgIG51bWJlciBvZiBzdWItY29tbWFuZHMgZm9yIGVhY2ggZnVuY3Rpb24uCi0gICAgICAgIFlvdSBjYW4gcnVuIDxmaWxlbmFtZT5kZXZ0b29sIC0taGVscDwvZmlsZW5hbWU+IHRvIHNlZSBhbGwgdGhlCi0gICAgICAgIGNvbW1hbmRzLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBUd28gPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBzdWJjb21tYW5kcyB0aGF0IHByb3ZpZGUKLSAgICAgICAgZW50cnktcG9pbnRzIGludG8gZGV2ZWxvcG1lbnQgYXJlOgotICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgIEFzc2lzdHMgaW4gYWRkaW5nIG5ldyBzb2Z0d2FyZSB0byBiZSBidWlsdC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT48L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICBTZXRzIHVwIGFuIGVudmlyb25tZW50IHRvIGVuYWJsZSB5b3UgdG8gbW9kaWZ5IHRoZSBzb3VyY2Ugb2YKLSAgICAgICAgICAgICAgICBhbiBleGlzdGluZyBjb21wb25lbnQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICBBcyB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCAicmVjaXBlcyIgcmVwcmVzZW50IHNvZnR3YXJlCi0gICAgICAgIHBhY2thZ2VzIHdpdGhpbiA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LgotICAgICAgICBXaGVuIHlvdSB1c2UgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4sIGEgcmVjaXBlIGlzCi0gICAgICAgIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC4KLSAgICAgICAgV2hlbiB5b3UgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+LCB0aGUgc3BlY2lmaWVkCi0gICAgICAgIGV4aXN0aW5nIHJlY2lwZSBpcyB1c2VkIGluIG9yZGVyIHRvIGRldGVybWluZSB3aGVyZSB0byBnZXQgdGhlIHNvdXJjZQotICAgICAgICBjb2RlIGFuZCBob3cgdG8gcGF0Y2ggaXQuCi0gICAgICAgIEluIGJvdGggY2FzZXMsIGFuIGVudmlyb25tZW50IGlzIHNldCB1cCBzbyB0aGF0IHdoZW4geW91IGJ1aWxkIHRoZQotICAgICAgICByZWNpcGUgYSBzb3VyY2UgdHJlZSB0aGF0IGlzIHVuZGVyIHlvdXIgY29udHJvbCBpcyB1c2VkIGluIG9yZGVyIHRvCi0gICAgICAgIGFsbG93IHlvdSB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSBhcyBkZXNpcmVkLgotICAgICAgICBCeSBkZWZhdWx0LCBib3RoIG5ldyByZWNpcGVzIGFuZCB0aGUgc291cmNlIGdvIGludG8gYSAid29ya3NwYWNlIgotICAgICAgICBkaXJlY3RvcnkgdW5kZXIgdGhlIFNESy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlCi0gICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGFuZAotICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiB3b3JrZmxvd3MuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9J3Nkay11c2UtZGV2dG9vbC10by1hZGQtYW4tYXBwbGljYXRpb24nPgotICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHRvIEFkZCBhbiBBcHBsaWNhdGlvbjwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWRldnRvb2wtaW4teW91ci1zZGstd29ya2Zsb3cnPgorICAgICAgICA8dGl0bGU+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBpbiBZb3VyIFNESyBXb3JrZmxvdzwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBnZW5lcmF0ZXMKLSAgICAgICAgICAgIGEgbmV3IHJlY2lwZSBiYXNlZCBvbiBleGlzdGluZyBzb3VyY2UgY29kZS4KLSAgICAgICAgICAgIFRoaXMgY29tbWFuZCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXZ0b29sLXRoZS13b3Jrc3BhY2UtbGF5ZXItc3RydWN0dXJlJz53b3Jrc3BhY2U8L3VsaW5rPgotICAgICAgICAgICAgbGF5ZXIgdGhhdCBtYW55IDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY29tbWFuZHMKLSAgICAgICAgICAgIHVzZS4KLSAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGZsZXhpYmxlIGVub3VnaCB0byBhbGxvdyB5b3UgdG8gZXh0cmFjdCBzb3VyY2UKLSAgICAgICAgICAgIGNvZGUgaW50byBib3RoIHRoZSB3b3Jrc3BhY2Ugb3IgYSBzZXBhcmF0ZSBsb2NhbCBHaXQgcmVwb3NpdG9yeQotICAgICAgICAgICAgYW5kIHRvIHVzZSBleGlzdGluZyBjb2RlIHRoYXQgZG9lcyBub3QgbmVlZCB0byBiZSBleHRyYWN0ZWQuCisgICAgICAgICAgICBUaGUgY29ybmVyc3RvbmUgb2YgdGhlIGV4dGVuc2libGUgU0RLIGlzIGEgY29tbWFuZC1saW5lIHRvb2wKKyAgICAgICAgICAgIGNhbGxlZCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhpcyB0b29sIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIHRoYXQgaGVscAorICAgICAgICAgICAgeW91IGJ1aWxkLCB0ZXN0IGFuZCBwYWNrYWdlIHNvZnR3YXJlIHdpdGhpbiB0aGUgZXh0ZW5zaWJsZSBTREssIGFuZAorICAgICAgICAgICAgb3B0aW9uYWxseSBpbnRlZ3JhdGUgaXQgaW50byBhbiBpbWFnZSBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgc2NlbmFyaW8sIHRoZSBhcmd1bWVudHMgYW5kIG9wdGlvbnMKLSAgICAgICAgICAgIHlvdSB1c2Ugd2l0aCA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBmb3JtIGRpZmZlcmVudAotICAgICAgICAgICAgY29tYmluYXRpb25zLgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHNob3dzIGNvbW1vbiBkZXZlbG9wbWVudCBmbG93cwotICAgICAgICAgICAgeW91IHdvdWxkIHVzZSB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgY29tbWFuZDoKKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZSBpcyBvcmdhbml6ZWQKKyAgICAgICAgICAgIHNpbWlsYXJseSB0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiBpbiB0aGF0IGl0IGhhcyBhCisgICAgICAgICAgICBudW1iZXIgb2Ygc3ViLWNvbW1hbmRzIGZvciBlYWNoIGZ1bmN0aW9uLgorICAgICAgICAgICAgWW91IGNhbiBydW4gPGZpbGVuYW1lPmRldnRvb2wgLS1oZWxwPC9maWxlbmFtZT4gdG8gc2VlIGFsbCB0aGUKKyAgICAgICAgICAgIGNvbW1hbmRzLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc2RrLWRldnRvb2wtYWRkLWZsb3cucG5nIiBhbGlnbj0iY2VudGVyIiAvPgorICAgICAgICAgICAgVGhyZWUgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBzdWJjb21tYW5kcyB0aGF0IHByb3ZpZGUKKyAgICAgICAgICAgIGVudHJ5LXBvaW50cyBpbnRvIGRldmVsb3BtZW50IGFyZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgQXNzaXN0cyBpbiBhZGRpbmcgbmV3IHNvZnR3YXJlIHRvIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBTZXRzIHVwIGFuIGVudmlyb25tZW50IHRvIGVuYWJsZSB5b3UgdG8gbW9kaWZ5IHRoZSBzb3VyY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgYW4gZXhpc3RpbmcgY29tcG9uZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2dG9vbCB1cGdyYWRlPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgVXBkYXRlcyBhbiBleGlzdGluZyByZWNpcGUgc28gdGhhdCB5b3UgY2FuIGJ1aWxkIGl0IGZvcgorICAgICAgICAgICAgICAgICAgICBhbiB1cGRhdGVkIHNldCBvZiBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBBcyB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCAicmVjaXBlcyIgcmVwcmVzZW50IHNvZnR3YXJlCisgICAgICAgICAgICBwYWNrYWdlcyB3aXRoaW4gPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFdoZW4geW91IHVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiwgYSByZWNpcGUgaXMKKyAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC4KKyAgICAgICAgICAgIFdoZW4geW91IHVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiwgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgZXhpc3RpbmcgcmVjaXBlIGlzIHVzZWQgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGdldCB0aGUgc291cmNlCisgICAgICAgICAgICBjb2RlIGFuZCBob3cgdG8gcGF0Y2ggaXQuCisgICAgICAgICAgICBJbiBib3RoIGNhc2VzLCBhbiBlbnZpcm9ubWVudCBpcyBzZXQgdXAgc28gdGhhdCB3aGVuIHlvdSBidWlsZCB0aGUKKyAgICAgICAgICAgIHJlY2lwZSBhIHNvdXJjZSB0cmVlIHRoYXQgaXMgdW5kZXIgeW91ciBjb250cm9sIGlzIHVzZWQgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgIGFsbG93IHlvdSB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSBhcyBkZXNpcmVkLgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgYm90aCBuZXcgcmVjaXBlcyBhbmQgdGhlIHNvdXJjZSBnbyBpbnRvIGEgIndvcmtzcGFjZSIKKyAgICAgICAgICAgIGRpcmVjdG9yeSB1bmRlciB0aGUgU0RLLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0aW5nIHRoZSBOZXcgUmVjaXBlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSB0b3AgcGFydCBvZiB0aGUgZmxvdyBzaG93cyB0aHJlZSBzY2VuYXJpb3MgYnkgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgeW91IGNvdWxkIHVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiB0bwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSBhIHJlY2lwZSBiYXNlZCBvbiBleGlzdGluZyBzb3VyY2UgY29kZS48L3BhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+IHdvcmtmbG93cy4KKyAgICAgICAgPC9wYXJhPgogCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPkluIGEgc2hhcmVkIGRldmVsb3BtZW50IGVudmlyb25tZW50LCBpdCBpcwotICAgICAgICAgICAgICAgICAgICB0eXBpY2FsIHdoZXJlIG90aGVyIGRldmVsb3BlcnMgYXJlIHJlc3BvbnNpYmxlIGZvcgotICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGFyZWFzIG9mIHNvdXJjZSBjb2RlLgotICAgICAgICAgICAgICAgICAgICBBcyBhIGRldmVsb3BlciwgeW91IGFyZSBwcm9iYWJseSBpbnRlcmVzdGVkIGluIHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgc291cmNlIGNvZGUgYXMgcGFydCBvZiB5b3VyIGRldmVsb3BtZW50IHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICBBbGwgeW91IG5lZWQgaXMgYWNjZXNzIHRvIHRoZSBjb2RlLCBhIHJlY2lwZSwgYW5kIGEKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlZCBhcmVhIGluIHdoaWNoIHRvIGRvIHlvdXIgd29yay48L3BhcmE+CisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstdXNlLWRldnRvb2wtdG8tYWRkLWFuLWFwcGxpY2F0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2UgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gdG8gQWRkIGFuIEFwcGxpY2F0aW9uPC90aXRsZT4KIAotICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gdGhlIGRpYWdyYW0sIHRocmVlIHBvc3NpYmxlIHNjZW5hcmlvcwotICAgICAgICAgICAgICAgICAgICBmZWVkIGludG8gdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHdvcmtmbG93OgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MZWZ0PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxlZnQgc2NlbmFyaW8gcmVwcmVzZW50cyBhIGNvbW1vbiBzaXR1YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgc291cmNlIGNvZGUgZG9lcyBub3QgZXhpc3QgbG9jYWxseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuZWVkcyB0byBiZSBleHRyYWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHlvdSBqdXN0IGxldCBpdCBnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgdG8gdGhlIGRlZmF1bHQgd29ya3NwYWNlIC0geW91IGRvIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgaXQgaW4gc29tZSBzcGVjaWZpYyBsb2NhdGlvbiBvdXRzaWRlIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBldmVyeXRoaW5nIHlvdSBuZWVkIHdpbGwgYmUgbG9jYXRlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgZ2VuZXJhdGVzCisgICAgICAgICAgICAgICAgYSBuZXcgcmVjaXBlIGJhc2VkIG9uIGV4aXN0aW5nIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2dG9vbC10aGUtd29ya3NwYWNlLWxheWVyLXN0cnVjdHVyZSc+d29ya3NwYWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICBsYXllciB0aGF0IG1hbnkgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBjb21tYW5kcworICAgICAgICAgICAgICAgIHVzZS4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBpcyBmbGV4aWJsZSBlbm91Z2ggdG8gYWxsb3cgeW91IHRvIGV4dHJhY3Qgc291cmNlCisgICAgICAgICAgICAgICAgY29kZSBpbnRvIGJvdGggdGhlIHdvcmtzcGFjZSBvciBhIHNlcGFyYXRlIGxvY2FsIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgYW5kIHRvIHVzZSBleGlzdGluZyBjb2RlIHRoYXQgZG9lcyBub3QgbmVlZCB0byBiZSBleHRyYWN0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgc2NlbmFyaW8sIHRoZSBhcmd1bWVudHMgYW5kIG9wdGlvbnMKKyAgICAgICAgICAgICAgICB5b3UgdXNlIHdpdGggPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gZm9ybSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICBjb21iaW5hdGlvbnMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHNob3dzIGNvbW1vbiBkZXZlbG9wbWVudCBmbG93cworICAgICAgICAgICAgICAgIHlvdSB3b3VsZCB1c2Ugd2l0aCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc2RrLWRldnRvb2wtYWRkLWZsb3cucG5nIiBhbGlnbj0iY2VudGVyIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2VuZXJhdGluZyB0aGUgTmV3IFJlY2lwZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvcCBwYXJ0IG9mIHRoZSBmbG93IHNob3dzIHRocmVlIHNjZW5hcmlvcyBieSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNvdWxkIHVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYSByZWNpcGUgYmFzZWQgb24gZXhpc3Rpbmcgc291cmNlIGNvZGUuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiBhIHNoYXJlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGljYWwgd2hlcmUgb3RoZXIgZGV2ZWxvcGVycyBhcmUgcmVzcG9uc2libGUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGFyZWFzIG9mIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSBkZXZlbG9wZXIsIHlvdSBhcmUgcHJvYmFibHkgaW50ZXJlc3RlZCBpbiB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzb3VyY2UgY29kZSBhcyBwYXJ0IG9mIHlvdXIgZGV2ZWxvcG1lbnQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHlvdSBuZWVkIGlzIGFjY2VzcyB0byB0aGUgY29kZSwgYSByZWNpcGUsIGFuZCBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVkIGFyZWEgaW4gd2hpY2ggdG8gZG8geW91ciB3b3JrLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIHRoZSBkaWFncmFtLCB0aHJlZSBwb3NzaWJsZSBzY2VuYXJpb3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQgaW50byB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gd29ya2Zsb3c6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVmdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVmdCBzY2VuYXJpbyByZXByZXNlbnRzIGEgY29tbW9uIHNpdHVhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgc291cmNlIGNvZGUgZG9lcyBub3QgZXhpc3QgbG9jYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVlZHMgdG8gYmUgZXh0cmFjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgeW91IGp1c3QgbGV0IGl0IGdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgdG8gdGhlIGRlZmF1bHQgd29ya3NwYWNlIC0geW91IGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IGl0IGluIHNvbWUgc3BlY2lmaWMgbG9jYXRpb24gb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBldmVyeXRoaW5nIHlvdSBuZWVkIHdpbGwgYmUgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgZGV2dG9vbCBhZGQgPHJlcGxhY2VhYmxlPnJlY2lwZSBmZXRjaHVyaTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBjb21tYW5kLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhIHJlY2lwZSBhbmQgYW4gYXBwZW5kIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlIGFzIHdlbGwgYXMgZXh0cmFjdHMgdGhlIHVwc3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGludG8gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSA8ZmlsZW5hbWU+c291cmNlczwvZmlsZW5hbWU+IGZvbGRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWlkZGxlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1pZGRsZSBzY2VuYXJpbyBhbHNvIHJlcHJlc2VudHMgYSBzaXR1YXRpb24gd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUgZG9lcyBub3QgZXhpc3QgbG9jYWxseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjb2RlIGlzIGFnYWluIHVwc3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5lZWRzIHRvIGJlIGV4dHJhY3RlZCB0byBzb21lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgYXJlYSAtIHRoaXMgdGltZSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFsd2F5cywgaWYgcmVxdWlyZWQgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBjcmVhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBHaXQgcmVwb3NpdG9yeSBsb2NhbGx5IGR1cmluZyB0aGUgZXh0cmFjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+c3JjdHJlZTwvcmVwbGFjZWFibGU+IGluIHRoaXMgY2FzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXMgd2hlcmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgbG9jYXRlIHRoZSBleHRyYWN0ZWQgY29kZSBvdXRzaWRlIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGlzIGNvbW1hbmQsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhIHJlY2lwZSBhbmQgYW4gYXBwZW5kIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZSBhcyB3ZWxsIGFzIGV4dHJhY3RzIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgaW50byBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSA8ZmlsZW5hbWU+c291cmNlczwvZmlsZW5hbWU+IGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NaWRkbGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1pZGRsZSBzY2VuYXJpbyBhbHNvIHJlcHJlc2VudHMgYSBzaXR1YXRpb24gd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBjb2RlIGRvZXMgbm90IGV4aXN0IGxvY2FsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvZGUgaXMgYWdhaW4gdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5lZWRzIHRvIGJlIGV4dHJhY3RlZCB0byBzb21lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGFyZWEgLSB0aGlzIHRpbWUgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHJlcXVpcmVkLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5cyBjcmVhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgbG9jYWxseSBkdXJpbmcgdGhlIGV4dHJhY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+c3JjdHJlZTwvcmVwbGFjZWFibGU+IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVzIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgbG9jYXRlIHRoZSBleHRyYWN0ZWQgY29kZSBvdXRzaWRlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBkZXZ0b29sIGFkZCA8cmVwbGFjZWFibGU+cmVjaXBlIHNyY3RyZWUgZmV0Y2h1cmk8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBzdW1tYXJ5LCB0aGUgc291cmNlIGNvZGUgaXMgcHVsbGVkIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+ZmV0Y2h1cmk8L3JlcGxhY2VhYmxlPiBhbmQgZXh0cmFjdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgbG9jYXRpb24gZGVmaW5lZCBieQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gYXMgYSBsb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBzdW1tYXJ5LCB0aGUgc291cmNlIGNvZGUgaXMgcHVsbGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmZldGNodXJpPC9yZXBsYWNlYWJsZT4gYW5kIGV4dHJhY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBsb2NhdGlvbiBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gYXMgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS48L3BhcmE+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gd29ya3NwYWNlLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBib3RoIHRoZSByZWNpcGUgYW5kIGFuIGFwcGVuZCBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJpZ2h0PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJpZ2h0IHNjZW5hcmlvIHJlcHJlc2VudHMgYSBzaXR1YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgc291cmNlIHRyZWUgKHNyY3RyZWUpIGhhcyBiZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBwcmVwYXJlZCBvdXRzaWRlIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIHdvcmtzcGFjZSwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGJvdGggdGhlIHJlY2lwZSBhbmQgYW4gYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmlnaHQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJpZ2h0IHNjZW5hcmlvIHJlcHJlc2VudHMgYSBzaXR1YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNvdXJjZSB0cmVlIChzcmN0cmVlKSBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHByZXBhcmVkIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgbmFtZXMgdGhlIHJlY2lwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpZGVudGlmaWVzIHdoZXJlIHRoZSBleGlzdGluZyBzb3VyY2UgdHJlZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGxvY2F0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgbmFtZXMgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaWRlbnRpZmllcyB3aGVyZSB0aGUgZXhpc3Rpbmcgc291cmNlIHRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbG9jYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGRldnRvb2wgYWRkIDxyZXBsYWNlYWJsZT5yZWNpcGUgc3JjdHJlZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGV4YW1pbmVzIHRoZSBzb3VyY2UgY29kZSBhbmQgY3JlYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlIGZvciBpdCBwbGFjaW5nIHRoZSByZWNpcGUgaW50byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGV4YW1pbmVzIHRoZSBzb3VyY2UgY29kZSBhbmQgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSBmb3IgaXQgcGxhY2luZyB0aGUgcmVjaXBlIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZS48L3BhcmE+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWNhdXNlIHRoZSBleHRyYWN0ZWQgc291cmNlIGNvZGUgYWxyZWFkeSBleGlzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBkb2VzIG5vdCB0cnkgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxvY2F0ZSBpdCBpbnRvIHRoZSB3b3Jrc3BhY2UgLSBqdXN0IHRoZSBuZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGlzIHBsYWNlZCBpbiB0aGUgd29ya3NwYWNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QmVjYXVzZSB0aGUgZXh0cmFjdGVkIHNvdXJjZSBjb2RlIGFscmVhZHkgZXhpc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGRvZXMgbm90IHRyeSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxvY2F0ZSBpdCBpbnRvIHRoZSB3b3Jrc3BhY2UgLSBqdXN0IHRoZSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBpcyBwbGFjZWQgaW4gdGhlIHdvcmtzcGFjZS48L3BhcmE+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Bc2lkZSBmcm9tIGEgcmVjaXBlIGZvbGRlciwgdGhlIGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIGNyZWF0ZXMgYW4gYXBwZW5kIGZvbGRlciBhbmQgcGxhY2VzIGFuIGluaXRpYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+IHdpdGhpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RWRpdCB0aGUgUmVjaXBlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4gdXNlIDxmaWxlbmFtZT5kZXZ0b29sIGVkaXQtcmVjaXBlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdG8gb3BlbiB1cCB0aGUgZWRpdG9yIGFzIGRlZmluZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kRURJVE9SPC9maWxlbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgYW5kIG1vZGlmeSB0aGUgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgZWRpdC1yZWNpcGUgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgRnJvbSB3aXRoaW4gdGhlIGVkaXRvciwgeW91IGNhbiBtYWtlIG1vZGlmaWNhdGlvbnMgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSB0aGF0IHRha2UgYWZmZWN0IHdoZW4geW91IGJ1aWxkIGl0IGxhdGVyLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBSZWNpcGUgb3IgUmVidWlsZCB0aGUgSW1hZ2U8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCBpbiB0aGUgZmxvdywgdGhlIG5leHQgc3RlcCB5b3UKLSAgICAgICAgICAgICAgICAgICAgdGFrZSBkZXBlbmRzIG9uIHdoYXQgeW91IGFyZSBnb2luZyB0byBkbyB3aXRoCi0gICAgICAgICAgICAgICAgICAgIHRoZSBuZXcgY29kZS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBuZWVkIHRvIHRha2UgdGhlIGJ1aWxkIG91dHB1dCBhbmQgZXZlbnR1YWxseQotICAgICAgICAgICAgICAgICAgICBtb3ZlIGl0IHRvIHRoZSB0YXJnZXQgaGFyZHdhcmUsIHlvdSB3b3VsZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgYnVpbGQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ugd2FudCBhbiBpbWFnZSB0bwotICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSByZWNpcGUncyBwYWNrYWdlcyBmb3IgaW1tZWRpYXRlIGRlcGxveW1lbnQKLSAgICAgICAgICAgICAgICAgICAgb250byBhIGRldmljZSAoZS5nLiBmb3IgdGVzdGluZyBwdXJwb3NlcyksIHlvdSBjYW4gdXNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1pbWFnZTwvZmlsZW5hbWU+IGNvbW1hbmQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIGJ1aWxkLWltYWdlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXBsb3kgdGhlIEJ1aWxkIE91dHB1dDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBidWlsZCBvdXQgeW91ciByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvCi0gICAgICAgICAgICAgICAgICAgIHNlZSBpZiB0aGUgcmVzdWx0aW5nIGJ1aWxkIG91dHB1dCB3b3JrcyBhcyBleHBlY3RlZCBvbiB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdGVwIGFzc3VtZXMgeW91IGhhdmUgYSBwcmV2aW91c2x5IGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSB0aGF0IGlzIGFscmVhZHkgZWl0aGVyIHJ1bm5pbmcgaW4gUUVNVSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBvbiBhY3R1YWwgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoYXQgZm9yIGRlcGxveW1lbnQgb2YgdGhlIGltYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgdGFyZ2V0LCBTU0ggaXMgaW5zdGFsbGVkIGluIHRoZSBpbWFnZSBhbmQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBpcyBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmUgdGhhdCB5b3UgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayBhY2Nlc3MgdG8gYW5kIGZyb20geW91ciBkZXZlbG9wbWVudCBtYWNoaW5lLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGVwbG95IHlvdXIgYnVpbGQgb3V0cHV0IHRvIHRoYXQgdGFyZ2V0IGhhcmR3YXJlIGJ5Ci0gICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZDoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgZGVwbG95LXRhcmdldCA8cmVwbGFjZWFibGU+cmVjaXBlIHRhcmdldDwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyBhIGxpdmUgdGFyZ2V0IG1hY2hpbmUKLSAgICAgICAgICAgICAgICAgICAgcnVubmluZyBhcyBhbiBTU0ggc2VydmVyLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuLCBvZiBjb3Vyc2UsIGFsc28gZGVwbG95IHRoZSBpbWFnZSB5b3UgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkLWltYWdlPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICB0byBhY3R1YWwgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZG9lcyBub3QgcHJvdmlkZSBhCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGNvbW1hbmQgdGhhdCBhbGxvd3MgeW91IHRvIGRvIHRoaXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3B0aW9uYWxseSBVcGRhdGUgdGhlIFJlY2lwZSBXaXRoIFBhdGNoIEZpbGVzPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgcmVjaXBlLCBpZiB5b3UgaGF2ZSBtYWRlCi0gICAgICAgICAgICAgICAgICAgIGFueSBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgdHJlZSB0aGF0IHlvdSB3YW50IHRvIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgYXBwbGllZCBieSB0aGUgcmVjaXBlLCB5b3UgbmVlZCB0byBnZW5lcmF0ZSBwYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgIGZyb20gdGhvc2UgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgWW91IGRvIHRoaXMgYmVmb3JlIG1vdmluZyB0aGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgIHRvIGl0cyBmaW5hbCBsYXllciBhbmQgY2xlYW5pbmcgdXAgdGhlIHdvcmtzcGFjZSBhcmVhCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdXNlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb25hbCBzdGVwIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQgaWYgeW91IGFyZQotICAgICAgICAgICAgICAgICAgICB1c2luZyBvciBhZGRpbmcgdGhpcmQtcGFydHkgc29mdHdhcmUuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBjb252ZXJ0IGNvbW1pdHMgY3JlYXRlZCB1c2luZyBHaXQgdG8gcGF0Y2ggZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IHdhbnQgdG8gdHVybiBpbnRvIHBhdGNoZXMgbXVzdCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVkIHRvIHRoZSBHaXQgcmVwb3NpdG9yeSBpbiB0aGUgc291cmNlIHRyZWUuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1vdmUgdGhlIFJlY2lwZSB0byBpdHMgUGVybWFuZW50IExheWVyPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIEJlZm9yZSBjbGVhbmluZyB1cCB0aGUgd29ya3NwYWNlLCB5b3UgbmVlZCB0byBtb3ZlIHRoZQotICAgICAgICAgICAgICAgICAgICBmaW5hbCByZWNpcGUgdG8gaXRzIHBlcm1hbmVudCBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgZG8gdGhpcyBiZWZvcmUgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCBpZiB5b3Ugd2FudCB0bwotICAgICAgICAgICAgICAgICAgICByZXRhaW4gdGhlIHJlY2lwZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZXNldCB0aGUgUmVjaXBlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIEFzIGEgZmluYWwgc3RlcCwgeW91IGNhbiByZXN0b3JlIHRoZSBzdGF0ZSBzdWNoIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgbGF5ZXJzIGFuZCB0aGUgdXBzdHJlYW0gc291cmNlIGlzIHVzZWQgdG8gYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSByYXRoZXIgdGhhbiBkYXRhIGluIHRoZSB3b3Jrc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgIFRvIHJlc2V0IHRoZSByZWNpcGUsIHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBjb21tYW5kOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCByZXNldCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2RrLWRldnRvb2wtdXNlLWRldnRvb2wtbW9kaWZ5LXRvLW1vZGlmeS10aGUtc291cmNlLW9mLWFuLWV4aXN0aW5nLWNvbXBvbmVudCc+Ci0gICAgICAgIDx0aXRsZT5Vc2UgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gdG8gTW9kaWZ5IHRoZSBTb3VyY2Ugb2YgYW4gRXhpc3RpbmcgQ29tcG9uZW50PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIHByZXBhcmVzIHRoZQotICAgICAgICAgICAgd2F5IHRvIHdvcmsgb24gZXhpc3RpbmcgY29kZSB0aGF0IGFscmVhZHkgaGFzIGEgcmVjaXBlIGluCi0gICAgICAgICAgICBwbGFjZS4KLSAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGZsZXhpYmxlIGVub3VnaCB0byBhbGxvdyB5b3UgdG8gZXh0cmFjdCBjb2RlLAotICAgICAgICAgICAgc3BlY2lmeSB0aGUgZXhpc3RpbmcgcmVjaXBlLCBhbmQga2VlcCB0cmFjayBvZiBhbmQgZ2F0aGVyIGFueQotICAgICAgICAgICAgcGF0Y2ggZmlsZXMgZnJvbSBvdGhlciBkZXZlbG9wZXJzIHRoYXQgYXJlCi0gICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvZGUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgc2NlbmFyaW8sIHRoZSBhcmd1bWVudHMgYW5kIG9wdGlvbnMKLSAgICAgICAgICAgIHlvdSB1c2Ugd2l0aCA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBmb3JtIGRpZmZlcmVudAotICAgICAgICAgICAgY29tYmluYXRpb25zLgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHNob3dzIGNvbW1vbiBkZXZlbG9wbWVudCBmbG93cwotICAgICAgICAgICAgeW91IHdvdWxkIHVzZSB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgY29tbWFuZDoKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay1kZXZ0b29sLW1vZGlmeS1mbG93LnBuZyIgYWxpZ249ImNlbnRlciIgLz4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyaW5nIHRvIE1vZGlmeSB0aGUgQ29kZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICBUaGUgdG9wIHBhcnQgb2YgdGhlIGZsb3cgc2hvd3MgdGhyZWUgc2NlbmFyaW9zIGJ5IHdoaWNoCi0gICAgICAgICAgICAgICAgICAgIHlvdSBjb3VsZCB1c2UgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAgICAgcHJlcGFyZSB0byB3b3JrIG9uIHNvdXJjZSBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgRWFjaCBzY2VuYXJpbyBhc3N1bWVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlY2lwZSBleGlzdHMgaW4gc29tZSBsYXllciBleHRlcm5hbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc291cmNlIGZpbGVzIGV4aXN0IHVwc3RyZWFtIGluIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4tZXh0cmFjdGVkIHN0YXRlIG9yIGxvY2FsbHkgaW4gYSBwcmV2aW91c2x5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHR5cGljYWwgc2l0dWF0aW9uIGlzIHdoZXJlIGFub3RoZXIgZGV2ZWxvcGVyIGhhcwotICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIHNvbWUgbGF5ZXIgZm9yIHVzZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGFuZAotICAgICAgICAgICAgICAgICAgICB0aGVpciByZWNpcGUgYWxyZWFkeSByZXNpZGVzIGluIHRoYXQgbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGVpciBzb3VyY2UgY29kZSBpcyByZWFkaWx5IGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICBlaXRoZXIgdXBzdHJlYW0gb3IgbG9jYWxseS4KLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVmdDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZWZ0IHNjZW5hcmlvIHJlcHJlc2VudHMgYSBjb21tb24gc2l0dWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGRvZXMgbm90IGV4aXN0IGxvY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVlZHMgdG8gYmUgZXh0cmFjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgc291cmNlIGlzIGV4dHJhY3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRlZmF1bHQgd29ya3NwYWNlIGxvY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUsIGluIHRoaXMgc2NlbmFyaW8sIGlzIGluIGl0cyBvd24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBvdXRzaWRlIHRoZSB3b3Jrc3BhY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVybmFtZTwvcmVwbGFjZWFibGU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgaWRlbnRpZmllcyB0aGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJ5IGRlZmF1bHQgZXh0cmFjdHMgdGhlIHNvdXJjZSBmaWxlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBtb2RpZnkgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPmxvY2F0ZXMgdGhlIHJlY2lwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCB1c2VzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgdGhlIHNvdXJjZSBjb2RlIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBsb2NhbCBwYXRjaCBmaWxlcyBmcm9tIG90aGVyIGRldmVsb3BlcnMgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBwcm92aWRlIGFuIFVSTCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPiB3aGVuIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgc2NlbmFyaW8sIGhvd2V2ZXIsIHNpbmNlIG5vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPiBhcmd1bWVudCBleGlzdHMsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQgYnkgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RzIHRoZSBzb3VyY2UgZmlsZXMgdG8gYSBHaXQgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgbG9jYXRpb24gZm9yIHRoZSBleHRyYWN0ZWQgc291cmNlIGlzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgYXJlYSB3aXRoaW4gdGhlIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIGNvbW1hbmQgc2V0cyB1cCBib3RoIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIGFuZCBhbiBhcHBlbmQgZmlsZSB3aXRoaW4gdGhlIHdvcmtzcGFjZSB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSByZW1haW5pbmcgaW4gaXRzIG9yaWdpbmFsIGxvY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NaWRkbGU8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWlkZGxlIHNjZW5hcmlvIHJlcHJlc2VudHMgYSBzaXR1YXRpb24gd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUgYWxzbyBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvZGUgaXMgYWdhaW4gdXBzdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVlZHMgdG8gYmUgZXh0cmFjdGVkIHRvIHNvbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBhcmVhIGFzIGEgR2l0IHJlcG9zaXRvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSwgaW4gdGhpcyBzY2VuYXJpbywgaXMgYWdhaW4gaW4gaXRzIG93bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIG91dHNpZGUgdGhlIHdvcmtzcGFjZS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHdoYXQgcmVjaXBlIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byB3b3JrIGFuZCwgaW4gdGhpcyBjYXNlLCBpZGVudGlmaWVzIGEgbG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhIGZvciB0aGUgZXh0cmFjdGVkIHNvdXJjZSBmaWxlcyB0aGF0IGlzIG91dHNpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZGVmYXVsdCB3b3Jrc3BhY2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgbW9kaWZ5IDxyZXBsYWNlYWJsZT5yZWNpcGUgc3JjdHJlZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIGV4dHJhY3Rpb25zLCB0aGUgY29tbWFuZCB1c2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSdzIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdG8gbG9jYXRlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBmaWxlcyBhcmUgbG9jYXRlZCwgdGhlIGNvbW1hbmQgYnkgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RzIHRoZW0uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkaW5nIHRoZSA8cmVwbGFjZWFibGU+c3JjdHJlZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgaW5zdHJ1Y3RzIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZSB0aGUgZXh0cmFjdGVkIHNvdXJjZS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gd29ya3NwYWNlLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlIHJlY2lwZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHJlbWFpbnMgaW4gaXRzIG9yaWdpbmFsIGxvY2F0aW9uIGJ1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMgYXJlIGV4dHJhY3RlZCB0byB0aGUgbG9jYXRpb24geW91Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgd2l0aCA8cmVwbGFjZWFibGU+c3JjdHJlZTwvcmVwbGFjZWFibGU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SaWdodDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByaWdodCBzY2VuYXJpbyByZXByZXNlbnRzIGEgc2l0dWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNvdXJjZSB0cmVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4pIGV4aXN0cyBhcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBleHRyYWN0ZWQgR2l0IHN0cnVjdHVyZSBvdXRzaWRlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHJlY2lwZSBhbHNvIGV4aXN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V3aGVyZSBpbiBpdHMgb3duIGxheWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdGhlIHJlY2lwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggd2hpY2ggdG8gd29yaywgdXNlcyB0aGUgIi1uIiBvcHRpb24gdG8gaW5kaWNhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgZG9lcyBub3QgbmVlZCB0byBiZSBleHRyYWN0ZWQsIGFuZCB1c2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPiB0byBwb2ludCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGV4dHJhY3RlZCBzb3VyY2UgZmlsZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgbW9kaWZ5IC1uIDxyZXBsYWNlYWJsZT5yZWNpcGUgc3JjdHJlZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uY2UgdGhlIGNvbW1hbmQgZmluaXNoZXMsIGl0IGNyZWF0ZXMgb25seQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFwcGVuZCBmaWxlIGZvciB0aGUgcmVjaXBlIGluIHRoZSB3b3Jrc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBhbmQgdGhlIHNvdXJjZSBjb2RlIHJlbWFpbiBpbiB0aGVpcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIGxvY2F0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXNpZGUgZnJvbSBhIHJlY2lwZSBmb2xkZXIsIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gY3JlYXRlcyBhbiBhcHBlbmQgZm9sZGVyIGFuZCBwbGFjZXMgYW4gaW5pdGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+IHdpdGhpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FZGl0IHRoZSBTb3VyY2U8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB1c2VkIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCB5b3UgYXJlIGZyZWUgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFueSBlZGl0b3IgeW91IGxpa2UgdG8gbWFrZSBhbmQgc2F2ZQotICAgICAgICAgICAgICAgICAgICB5b3VyIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIFJlY2lwZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHVwZGF0ZWQgdGhlIHNvdXJjZSBmaWxlcywgeW91IGNhbiBidWlsZAotICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlcGxveSB0aGUgQnVpbGQgT3V0cHV0PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGJ1aWxkIG91dCB5b3VyIHJlY2lwZSwgeW91IHByb2JhYmx5IHdhbnQgdG8gc2VlCi0gICAgICAgICAgICAgICAgICAgIGlmIHRoZSByZXN1bHRpbmcgYnVpbGQgb3V0cHV0IHdvcmtzIGFzIGV4cGVjdGVkIG9uIHRhcmdldAotICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgYXNzdW1lcyB5b3UgaGF2ZSBhIHByZXZpb3VzbHkgYnVpbHQKLSAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBlaXRoZXIgcnVubmluZyBpbiBRRU1VIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIGFjdHVhbCBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhhdCBmb3IgZGVwbG95bWVudCBvZiB0aGUgaW1hZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB0YXJnZXQsIFNTSCBpcyBpbnN0YWxsZWQgaW4gdGhlIGltYWdlIGFuZCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIGlzIHJ1bm5pbmcgb24gcmVhbCBoYXJkd2FyZSB0aGF0IHlvdSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrIGFjY2VzcyB0byBhbmQgZnJvbSB5b3VyIGRldmVsb3BtZW50IG1hY2hpbmUuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXBsb3kgeW91ciBidWlsZCBvdXRwdXQgdG8gdGhhdCB0YXJnZXQgaGFyZHdhcmUgYnkKLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FZGl0IHRoZSBSZWNpcGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4gdXNlIDxmaWxlbmFtZT5kZXZ0b29sIGVkaXQtcmVjaXBlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIG9wZW4gdXAgdGhlIGVkaXRvciBhcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiRFRElUT1I8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1vZGlmeSB0aGUgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGVkaXQtcmVjaXBlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB3aXRoaW4gdGhlIGVkaXRvciwgeW91IGNhbiBtYWtlIG1vZGlmaWNhdGlvbnMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgdGhhdCB0YWtlIGFmZmVjdCB3aGVuIHlvdSBidWlsZCBpdCBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBSZWNpcGUgb3IgUmVidWlsZCB0aGUgSW1hZ2U8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQgaW4gdGhlIGZsb3csIHRoZSBuZXh0IHN0ZXAgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB0YWtlIGRlcGVuZHMgb24gd2hhdCB5b3UgYXJlIGdvaW5nIHRvIGRvIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXcgY29kZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgbmVlZCB0byB0YWtlIHRoZSBidWlsZCBvdXRwdXQgYW5kIGV2ZW50dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUgaXQgdG8gdGhlIHRhcmdldCBoYXJkd2FyZSwgeW91IHdvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGJ1aWxkIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ugd2FudCBhbiBpbWFnZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbiB0aGUgcmVjaXBlJ3MgcGFja2FnZXMgZm9yIGltbWVkaWF0ZSBkZXBsb3ltZW50CisgICAgICAgICAgICAgICAgICAgICAgICBvbnRvIGEgZGV2aWNlIChlLmcuIGZvciB0ZXN0aW5nIHB1cnBvc2VzKSwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1pbWFnZTwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBidWlsZC1pbWFnZSA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBCdWlsZCBPdXRwdXQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBidWlsZCBvdXQgeW91ciByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgaWYgdGhlIHJlc3VsdGluZyBidWlsZCBvdXRwdXQgd29ya3MgYXMgZXhwZWN0ZWQgb24gdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBhc3N1bWVzIHlvdSBoYXZlIGEgcHJldmlvdXNseSBidWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBlaXRoZXIgcnVubmluZyBpbiBRRU1VIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBvbiBhY3R1YWwgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgaXQgaXMgYXNzdW1lZCB0aGF0IGZvciBkZXBsb3ltZW50IG9mIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB0YXJnZXQsIFNTSCBpcyBpbnN0YWxsZWQgaW4gdGhlIGltYWdlIGFuZCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBpcyBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmUgdGhhdCB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgYWNjZXNzIHRvIGFuZCBmcm9tIHlvdXIgZGV2ZWxvcG1lbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGVwbG95IHlvdXIgYnVpbGQgb3V0cHV0IHRvIHRoYXQgdGFyZ2V0IGhhcmR3YXJlIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGUgdGFyZ2V0PC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGlzIGEgbGl2ZSB0YXJnZXQgbWFjaGluZQotICAgICAgICAgICAgICAgICAgICBydW5uaW5nIGFzIGFuIFNTSCBzZXJ2ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyBhIGxpdmUgdGFyZ2V0IG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYXMgYW4gU1NIIHNlcnZlci48L3BhcmE+CiAKLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiwgb2YgY291cnNlLCBhbHNvIGRlcGxveSB0aGUgaW1hZ2UgeW91IGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1pbWFnZTwvZmlsZW5hbWU+IGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgICAgdG8gYWN0dWFsIGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGRvZXMgbm90IHByb3ZpZGUgYQotICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byBkbyB0aGlzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wdGlvbmFsbHkgQ3JlYXRlIFBhdGNoIEZpbGVzIGZvciBZb3VyIENoYW5nZXM8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgZGVidWdnZWQgeW91ciBjaGFuZ2VzLCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgICAgIHVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgcGF0Y2ggZmlsZXMgZm9yIGFsbCB0aGUgY29tbWl0cyB5b3UgaGF2ZQotICAgICAgICAgICAgICAgICAgICBtYWRlLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFBhdGNoIGZpbGVzIGFyZSBnZW5lcmF0ZWQgb25seSBmb3IgY2hhbmdlcwotICAgICAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgY29tbWl0dGVkLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgdGhlIHBhdGNoIGZpbGVzIGluIGEgZm9sZGVyIG5hbWVkIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIGFzIHRoZSByZWNpcGUgYmVuZWF0aCB0aGUgZm9sZGVyIGluIHdoaWNoIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgcmVzaWRlcywgYW5kIHVwZGF0ZXMgdGhlIHJlY2lwZSdzCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IHRvIHBvaW50IHRvIHRoZSBnZW5lcmF0ZWQgcGF0Y2ggZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiLS1hcHBlbmQgPHJlcGxhY2VhYmxlPkxBWUVSRElSPC9yZXBsYWNlYWJsZT4iCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gdG8gY2F1c2UgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIGFwcGVuZCBmaWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBzcGVjaWZpYyBsYXllciByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGxheWVyLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVzdG9yZSB0aGUgV29ya3NwYWNlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IHJlc3RvcmVzIHRoZQotICAgICAgICAgICAgICAgICAgICBzdGF0ZSBzbyB0aGF0IHN0YW5kYXJkIGxheWVycyBhbmQgdXBzdHJlYW0gc291cmNlcyBhcmUKLSAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGUgcmVjaXBlIHJhdGhlciB0aGFuIHdoYXQgaXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgcmVzZXQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuLCBvZiBjb3Vyc2UsIGFsc28gZGVwbG95IHRoZSBpbWFnZSB5b3UgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1pbWFnZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZG9lcyBub3QgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaW5pc2ggWW91ciBXb3JrIFdpdGggdGhlIFJlY2lwZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMgY29ycmVzcG9uZGluZyB0byBjb21taXRzIGluIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIG1vdmVzIHRoZSBuZXcgcmVjaXBlIHRvIGEgbW9yZSBwZXJtYW5lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLCBhbmQgdGhlbiByZXNldHMgdGhlIHJlY2lwZSBzbyB0aGF0IHRoZSByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IG5vcm1hbGx5IHJhdGhlciB0aGFuIGZyb20gdGhlIHdvcmtzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGZpbmlzaCA8cmVwbGFjZWFibGU+cmVjaXBlIGxheWVyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBjaGFuZ2VzIHlvdSB3YW50IHRvIHR1cm4gaW50byBwYXRjaGVzIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWQgdG8gdGhlIEdpdCByZXBvc2l0b3J5IGluIHRoZSBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFzIG1lbnRpb25lZCwgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG1vdmVzIHRoZSBmaW5hbCByZWNpcGUgdG8gaXRzIHBlcm1hbmVudCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgYSBmaW5hbCBwcm9jZXNzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3RhbmRhcmQgbGF5ZXJzIGFuZCB0aGUgdXBzdHJlYW0gc291cmNlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlZCBzbyB0aGF0IHlvdSBjYW4gYnVpbGQgdGhlIHJlY2lwZSBmcm9tIHRob3NlCisgICAgICAgICAgICAgICAgICAgICAgICBhcmVhcyByYXRoZXIgdGhhbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHB1dCB0aGluZ3MgYmFjayBzaG91bGQgeW91IGRlY2lkZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3Qgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciB3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyB1c2UgdGhpcyBjb21tYW5kLCByZWFsaXplIHRoYXQgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgaXMgcHJlc2VydmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2dG9vbC11c2UtZGV2dG9vbC1tb2RpZnktdG8tbW9kaWZ5LXRoZS1zb3VyY2Utb2YtYW4tZXhpc3RpbmctY29tcG9uZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2UgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gdG8gTW9kaWZ5IHRoZSBTb3VyY2Ugb2YgYW4gRXhpc3RpbmcgQ29tcG9uZW50PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQgcHJlcGFyZXMgdGhlCisgICAgICAgICAgICAgICAgd2F5IHRvIHdvcmsgb24gZXhpc3RpbmcgY29kZSB0aGF0IGFscmVhZHkgaGFzIGEgcmVjaXBlIGluCisgICAgICAgICAgICAgICAgcGxhY2UuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgaXMgZmxleGlibGUgZW5vdWdoIHRvIGFsbG93IHlvdSB0byBleHRyYWN0IGNvZGUsCisgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgZXhpc3RpbmcgcmVjaXBlLCBhbmQga2VlcCB0cmFjayBvZiBhbmQgZ2F0aGVyIGFueQorICAgICAgICAgICAgICAgIHBhdGNoIGZpbGVzIGZyb20gb3RoZXIgZGV2ZWxvcGVycyB0aGF0IGFyZQorICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29kZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHlvdXIgcGFydGljdWxhciBzY2VuYXJpbywgdGhlIGFyZ3VtZW50cyBhbmQgb3B0aW9ucworICAgICAgICAgICAgICAgIHlvdSB1c2Ugd2l0aCA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBmb3JtIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGRpYWdyYW0gc2hvd3MgY29tbW9uIGRldmVsb3BtZW50IGZsb3dzCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIHVzZSB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQ6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zZGstZGV2dG9vbC1tb2RpZnktZmxvdy5wbmciIGFsaWduPSJjZW50ZXIiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJpbmcgdG8gTW9kaWZ5IHRoZSBDb2RlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9wIHBhcnQgb2YgdGhlIGZsb3cgc2hvd3MgdGhyZWUgc2NlbmFyaW9zIGJ5IHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY291bGQgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVwYXJlIHRvIHdvcmsgb24gc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBzY2VuYXJpbyBhc3N1bWVzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVjaXBlIGV4aXN0cyBpbiBzb21lIGxheWVyIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHdvcmtzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzb3VyY2UgZmlsZXMgZXhpc3QgdXBzdHJlYW0gaW4gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4tZXh0cmFjdGVkIHN0YXRlIG9yIGxvY2FsbHkgaW4gYSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0eXBpY2FsIHNpdHVhdGlvbiBpcyB3aGVyZSBhbm90aGVyIGRldmVsb3BlciBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgc29tZSBsYXllciBmb3IgdXNlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciByZWNpcGUgYWxyZWFkeSByZXNpZGVzIGluIHRoYXQgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlaXIgc291cmNlIGNvZGUgaXMgcmVhZGlseSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciB1cHN0cmVhbSBvciBsb2NhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlZnQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxlZnQgc2NlbmFyaW8gcmVwcmVzZW50cyBhIGNvbW1vbiBzaXR1YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGRvZXMgbm90IGV4aXN0IGxvY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5lZWRzIHRvIGJlIGV4dHJhY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBzb3VyY2UgaXMgZXh0cmFjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRlZmF1bHQgd29ya3NwYWNlIGxvY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlLCBpbiB0aGlzIHNjZW5hcmlvLCBpcyBpbiBpdHMgb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIG91dHNpZGUgdGhlIHdvcmtzcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcm5hbWU8L3JlcGxhY2VhYmxlPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgaWRlbnRpZmllcyB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBieSBkZWZhdWx0IGV4dHJhY3RzIHRoZSBzb3VyY2UgZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIG1vZGlmeSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT5sb2NhdGVzIHRoZSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gbG9jYXRlIHRoZSBzb3VyY2UgY29kZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IGxvY2FsIHBhdGNoIGZpbGVzIGZyb20gb3RoZXIgZGV2ZWxvcGVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHByb3ZpZGUgYW4gVVJMIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPiB3aGVuIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgc2NlbmFyaW8sIGhvd2V2ZXIsIHNpbmNlIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gYXJndW1lbnQgZXhpc3RzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gY29tbWFuZCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RzIHRoZSBzb3VyY2UgZmlsZXMgdG8gYSBHaXQgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGxvY2F0aW9uIGZvciB0aGUgZXh0cmFjdGVkIHNvdXJjZSBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBhcmVhIHdpdGhpbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIGNvbW1hbmQgc2V0cyB1cCBib3RoIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSBhbmQgYW4gYXBwZW5kIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHJlbWFpbmluZyBpbiBpdHMgb3JpZ2luYWwgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWlkZGxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtaWRkbGUgc2NlbmFyaW8gcmVwcmVzZW50cyBhIHNpdHVhdGlvbiB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUgYWxzbyBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjb2RlIGlzIGFnYWluIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuZWVkcyB0byBiZSBleHRyYWN0ZWQgdG8gc29tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBhcmVhIGFzIGEgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUsIGluIHRoaXMgc2NlbmFyaW8sIGlzIGFnYWluIGluIGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgb3V0c2lkZSB0aGUgd29ya3NwYWNlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB3aGF0IHJlY2lwZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIHdvcmsgYW5kLCBpbiB0aGlzIGNhc2UsIGlkZW50aWZpZXMgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhIGZvciB0aGUgZXh0cmFjdGVkIHNvdXJjZSBmaWxlcyB0aGF0IGlzIG91dHNpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgd29ya3NwYWNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBtb2RpZnkgPHJlcGxhY2VhYmxlPnJlY2lwZSBzcmN0cmVlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyB3aXRoIGFsbCBleHRyYWN0aW9ucywgdGhlIGNvbW1hbmQgdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlJ3MgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB0byBsb2NhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgZmlsZXMgYXJlIGxvY2F0ZWQsIHRoZSBjb21tYW5kIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdHMgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkaW5nIHRoZSA8cmVwbGFjZWFibGU+c3JjdHJlZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50IGluc3RydWN0cyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlIHRoZSBleHRyYWN0ZWQgc291cmNlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gd29ya3NwYWNlLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgcmVtYWlucyBpbiBpdHMgb3JpZ2luYWwgbG9jYXRpb24gYnV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMgYXJlIGV4dHJhY3RlZCB0byB0aGUgbG9jYXRpb24geW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHdpdGggPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SaWdodDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmlnaHQgc2NlbmFyaW8gcmVwcmVzZW50cyBhIHNpdHVhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgc291cmNlIHRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4pIGV4aXN0cyBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgZXh0cmFjdGVkIEdpdCBzdHJ1Y3R1cmUgb3V0c2lkZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHJlY2lwZSBhbHNvIGV4aXN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNld2hlcmUgaW4gaXRzIG93biBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB3aGljaCB0byB3b3JrLCB1c2VzIHRoZSAiLW4iIG9wdGlvbiB0byBpbmRpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgZG9lcyBub3QgbmVlZCB0byBiZSBleHRyYWN0ZWQsIGFuZCB1c2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gdG8gcG9pbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgZXh0cmFjdGVkIHNvdXJjZSBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgbW9kaWZ5IC1uIDxyZXBsYWNlYWJsZT5yZWNpcGUgc3JjdHJlZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uY2UgdGhlIGNvbW1hbmQgZmluaXNoZXMsIGl0IGNyZWF0ZXMgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIGFuZCB0aGUgc291cmNlIGNvZGUgcmVtYWluIGluIHRoZWlyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIGxvY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FZGl0IHRoZSBTb3VyY2U8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdXNlZCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHlvdSBhcmUgZnJlZSB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbnkgZWRpdG9yIHlvdSBsaWtlIHRvIG1ha2UgYW5kIHNhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBSZWNpcGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdXBkYXRlZCB0aGUgc291cmNlIGZpbGVzLCB5b3UgY2FuIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBCdWlsZCBPdXRwdXQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBidWlsZCBvdXQgeW91ciByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNlZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHJlc3VsdGluZyBidWlsZCBvdXRwdXQgd29ya3MgYXMgZXhwZWN0ZWQgb24gdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBhc3N1bWVzIHlvdSBoYXZlIGEgcHJldmlvdXNseSBidWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBlaXRoZXIgcnVubmluZyBpbiBRRU1VIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBvbiBhY3R1YWwgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgaXQgaXMgYXNzdW1lZCB0aGF0IGZvciBkZXBsb3ltZW50IG9mIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB0YXJnZXQsIFNTSCBpcyBpbnN0YWxsZWQgaW4gdGhlIGltYWdlIGFuZCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBpcyBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmUgdGhhdCB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgYWNjZXNzIHRvIGFuZCBmcm9tIHlvdXIgZGV2ZWxvcG1lbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGVwbG95IHlvdXIgYnVpbGQgb3V0cHV0IHRvIHRoYXQgdGFyZ2V0IGhhcmR3YXJlIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGUgdGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gaXMgYSBsaXZlIHRhcmdldCBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIGFzIGFuIFNTSCBzZXJ2ZXIuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuLCBvZiBjb3Vyc2UsIGFsc28gZGVwbG95IHRoZSBpbWFnZSB5b3UgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1pbWFnZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZG9lcyBub3QgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaW5pc2ggWW91ciBXb3JrIFdpdGggdGhlIFJlY2lwZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMgY29ycmVzcG9uZGluZyB0byBjb21taXRzIGluIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIHVwZGF0ZXMgdGhlIHJlY2lwZSB0byBwb2ludCB0byB0aGVtCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRvIGRvCisgICAgICAgICAgICAgICAgICAgICAgICBzbywgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpZWQgZGVzdGluYXRpb24gbGF5ZXIpLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gcmVzZXRzIHRoZSByZWNpcGUgc28gdGhhdCB0aGUgcmVjaXBlIGlzIGJ1aWx0IG5vcm1hbGx5CisgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBmcm9tIHRoZSB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBmaW5pc2ggPHJlcGxhY2VhYmxlPnJlY2lwZSBsYXllcjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgY2hhbmdlcyB5b3Ugd2FudCB0byB0dXJuIGludG8gcGF0Y2hlcyBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVkIHRvIHRoZSBHaXQgcmVwb3NpdG9yeSBpbiB0aGUgc291cmNlIHRyZWUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gbW92ZSB0aGUgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gZWl0aGVyIHVwZGF0ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCByZWNpcGUgaW4gdGhlIG9yaWdpbmFsIGxheWVyIG9yIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGluIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBhcyBwcm92aWRlZCBieSA8cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgYSBmaW5hbCBwcm9jZXNzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3RhbmRhcmQgbGF5ZXJzIGFuZCB0aGUgdXBzdHJlYW0gc291cmNlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlZCBzbyB0aGF0IHlvdSBjYW4gYnVpbGQgdGhlIHJlY2lwZSBmcm9tIHRob3NlCisgICAgICAgICAgICAgICAgICAgICAgICBhcmVhcyByYXRoZXIgdGhhbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHB1dCB0aGluZ3MgYmFjayBzaG91bGQgeW91IGRlY2lkZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3Qgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciB3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyB1c2UgdGhpcyBjb21tYW5kLCByZWFsaXplIHRoYXQgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgaXMgcHJlc2VydmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2dG9vbC11c2UtZGV2dG9vbC11cGdyYWRlLXRvLWNyZWF0ZS1hLXZlcnNpb24tb2YtdGhlLXJlY2lwZS10aGF0LXN1cHBvcnRzLWEtbmV3ZXItdmVyc2lvbi1vZi10aGUtc29mdHdhcmUnPgorICAgICAgICAgICAgPHRpdGxlPlVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGdyYWRlPC9maWxlbmFtZT4gdG8gQ3JlYXRlIGEgVmVyc2lvbiBvZiB0aGUgUmVjaXBlIHRoYXQgU3VwcG9ydHMgYSBOZXdlciBWZXJzaW9uIG9mIHRoZSBTb2Z0d2FyZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGdyYWRlPC9maWxlbmFtZT4gY29tbWFuZCB1cGRhdGVzCisgICAgICAgICAgICAgICAgYW4gZXhpc3RpbmcgcmVjaXBlIHNvIHRoYXQgeW91IGNhbiBidWlsZCBpdCBmb3IgYW4gdXBkYXRlZAorICAgICAgICAgICAgICAgIHNldCBvZiBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgaXMgZmxleGlibGUgZW5vdWdoIHRvIGFsbG93IHlvdSB0byBzcGVjaWZ5CisgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgcmV2aXNpb24gYW5kIHZlcnNpb25pbmcgc2NoZW1lcywgZXh0cmFjdCBjb2RlIGludG8KKyAgICAgICAgICAgICAgICBvciBvdXQgb2YgdGhlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd29ya3NwYWNlLCBhbmQKKyAgICAgICAgICAgICAgICB3b3JrIHdpdGggYW55IHNvdXJjZSBmaWxlIGZvcm1zIHRoYXQgdGhlIGZldGNoZXJzIHN1cHBvcnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgc2NlbmFyaW8sIHRoZSBhcmd1bWVudHMgYW5kIG9wdGlvbnMKKyAgICAgICAgICAgICAgICB5b3UgdXNlIHdpdGggPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+IGZvcm0gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgY29tYmluYXRpb25zLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZGlhZ3JhbSBzaG93cyBhIGNvbW1vbiBkZXZlbG9wbWVudCBmbG93CisgICAgICAgICAgICAgICAgeW91IHdvdWxkIHVzZSB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQ6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zZGstZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nIiBhbGlnbj0iY2VudGVyIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5pdGlhdGUgdGhlIFVwZ3JhZGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AgcGFydCBvZiB0aGUgZmxvdyBzaG93cyBhIHR5cGljYWwgc2NlbmFyaW8gYnkgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjb3VsZCB1c2UgPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlY2lwZSBleGlzdHMgaW4gc29tZSBsYXllciBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc291cmNlIGZpbGVzIGZvciB0aGUgbmV3IHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QgYWRqYWNlbnQgdG8gdGhlIHNhbWUgbG9jYXRpb24gcG9pbnRlZCB0byBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSByZWNpcGUgKGUuZy4gYSB0YXJiYWxsIHdpdGggdGhlIG5ldyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBpbiB0aGUgbmFtZSwgb3IgYXMgYSBkaWZmZXJlbnQgcmV2aXNpb24gaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIHNpdHVhdGlvbiBpcyB3aGVyZSB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyZ29uZSBhIHJldmlzaW9uIHNvIHRoYXQgaXQgaGFzIGJlZW4gdXBncmFkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHlvdSBoYXZlIGFjY2VzcyB0byBpcyBsaWtlbHkgaW4geW91ciBvd24gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCB5b3UgbmVlZCB0byB1cGdyYWRlIHRoZSByZWNpcGUgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCB1cGdyYWRlIC1WIDxyZXBsYWNlYWJsZT52ZXJzaW9uIHJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBncmFkZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RzIHNvdXJjZSBjb2RlIGludG8gdGhlIDxmaWxlbmFtZT5zb3VyY2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIGNvZGUgZXh0cmFjdGVkIHRvIGFueSBvdGhlciBsb2NhdGlvbiwgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIHByb3ZpZGUgdGhlIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnQgd2l0aCB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdXBncmFkZSAtViA8cmVwbGFjZWFibGU+dmVyc2lvbiByZWNpcGUgc3JjdHJlZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBpbiB0aGlzIGV4YW1wbGUsIHRoZSAiLVYiIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXcgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzb3VyY2UgZmlsZXMgcG9pbnRlZCB0byBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGluIHRoZSByZWNpcGUgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIEdpdCByZXBvc2l0b3J5LCB5b3UgbXVzdCBwcm92aWRlIHRoZSAiLVMiIG9wdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYSByZXZpc2lvbiBmb3IgdGhlIHNvZnR3YXJlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+T25jZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGxvY2F0ZXMgdGhlIHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IHVzZXMgdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gbG9jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUgYW5kIGFueSBsb2NhbCBwYXRjaCBmaWxlcyBmcm9tIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIGFyZSBsb2NhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBjb21tYW5kIHNldHMgdXAgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgY29kZSwgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSByZWNpcGUsIGFuZCBhbiBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgYWxsIHdpdGhpbiB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVzb2x2ZSBhbnkgQ29uZmxpY3RzIGNyZWF0ZWQgYnkgdGhlIFVwZ3JhZGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHRoZXJlIGNvdWxkIGJlIHNvbWUgY29uZmxpY3RzIGR1ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGJlaW5nIHVwZ3JhZGVkIHRvIGEgbmV3IHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHdvdWxkIG9jY3VyIGlmIHlvdXIgcmVjaXBlIHNwZWNpZmllcyBzb21lIHBhdGNoIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBtYWRlIGluIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGVkaXRpbmcgdGhlIHNvdXJjZSBhbmQgZm9sbG93aW5nIHRoZSBub3JtYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgcmViYXNlPC9maWxlbmFtZT4gY29uZmxpY3QgcmVzb2x1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWZvcmUgbW92aW5nIG9udG8gdGhlIG5leHQgc3RlcCwgYmUgc3VyZSB0byByZXNvbHZlIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBjb25mbGljdHMgY3JlYXRlZCB0aHJvdWdoIHVzZSBvZiBhIG5ld2VyIG9yIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgUmVjaXBlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHlvdXIgcmVjaXBlIGluIG9yZGVyLCB5b3UgY2FuIGJ1aWxkIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIgbWV0aG9kIHByb2R1Y2VzIGJ1aWxkIG91dHB1dCB0aGF0IGlzIHN0b3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBCdWlsZCBPdXRwdXQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvciA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IHRvIGJ1aWxkIG91dCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNlZSBpZiB0aGUgcmVzdWx0aW5nIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgd29ya3MgYXMgZXhwZWN0ZWQgb24gdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdGVwIGFzc3VtZXMgeW91IGhhdmUgYSBwcmV2aW91c2x5IGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdGhhdCBpcyBhbHJlYWR5IGVpdGhlciBydW5uaW5nIGluIFFFTVUgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoYXQgZm9yIGRlcGxveW1lbnQgb2YgdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHRhcmdldCwgU1NIIGlzIGluc3RhbGxlZCBpbiB0aGUgaW1hZ2UgYW5kIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIGlzIHJ1bm5pbmcgb24gcmVhbCBoYXJkd2FyZSB0aGF0IHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayBhY2Nlc3MgdG8gYW5kIGZyb20geW91ciBkZXZlbG9wbWVudCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXBsb3kgeW91ciBidWlsZCBvdXRwdXQgdG8gdGhhdCB0YXJnZXQgaGFyZHdhcmUgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGRlcGxveS10YXJnZXQgPHJlcGxhY2VhYmxlPnJlY2lwZSB0YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyBhIGxpdmUgdGFyZ2V0IG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYXMgYW4gU1NIIHNlcnZlci48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuLCBvZiBjb3Vyc2UsIGFsc28gZGVwbG95IHRoZSBpbWFnZSB5b3UgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1pbWFnZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZG9lcyBub3QgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaW5pc2ggWW91ciBXb3JrIFdpdGggdGhlIFJlY2lwZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMgY29ycmVzcG9uZGluZyB0byBjb21taXRzIGluIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIG1vdmVzIHRoZSBuZXcgcmVjaXBlIHRvIGEgbW9yZSBwZXJtYW5lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLCBhbmQgdGhlbiByZXNldHMgdGhlIHJlY2lwZSBzbyB0aGF0IHRoZSByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IG5vcm1hbGx5IHJhdGhlciB0aGFuIGZyb20gdGhlIHdvcmtzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGEgZGVzdGluYXRpb24gbGF5ZXIgdGhhdCBpcyB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIHNvdXJjZSwgdGhlbiB0aGUgb2xkIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgYW5kIGFzc29jaWF0ZWQgZmlsZXMgd2lsbCBiZSByZW1vdmVkIHByaW9yIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpbmcgdGhlIG5ldyB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgZmluaXNoIDxyZXBsYWNlYWJsZT5yZWNpcGUgbGF5ZXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IHdhbnQgdG8gdHVybiBpbnRvIHBhdGNoZXMgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZCB0byB0aGUgR2l0IHJlcG9zaXRvcnkgaW4gdGhlIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFzIGEgZmluYWwgcHJvY2VzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQsIHRoZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN0YW5kYXJkIGxheWVycyBhbmQgdGhlIHVwc3RyZWFtIHNvdXJjZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZWQgc28gdGhhdCB5b3UgY2FuIGJ1aWxkIHRoZSByZWNpcGUgZnJvbSB0aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgYXJlYXMgcmF0aGVyIHRoYW4gdGhlIHdvcmtzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBwdXQgdGhpbmdzIGJhY2sgc2hvdWxkIHlvdSBkZWNpZGUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IHdhbnQgdG8gcHJvY2VlZCB3aXRoIHlvdXIgd29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gdXNlIHRoaXMgY29tbWFuZCwgcmVhbGl6ZSB0aGF0IHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlIGlzIHByZXNlcnZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KICAgICA8L3NlY3Rpb24+Ci08L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSdzZGstYS1jbG9zZXItbG9vay1hdC1kZXZ0b29sLWFkZCc+Ci0gICAgPHRpdGxlPkEgQ2xvc2VyIExvb2sgYXQgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT48L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhCi0gICAgICAgIHJlY2lwZSBiYXNlZCBvbiB0aGUgc291cmNlIHRyZWUgd2l0aCB3aGljaCB5b3UgcHJvdmlkZSBpdC4KLSAgICAgICAgQ3VycmVudGx5LCB0aGUgY29tbWFuZCBoYXMgc3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICBBdXRvdG9vbHMgKDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIENNYWtlCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgU2NvbnMKLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIFBsYWluIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgT3V0LW9mLXRyZWUga2VybmVsIG1vZHVsZQotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIEJpbmFyeSBwYWNrYWdlIChpLmUuICItYiIgb3B0aW9uKQotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIE5vZGUuanMgbW9kdWxlIHRocm91Z2gKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bnBtPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICBQeXRob24gbW9kdWxlcyB0aGF0IHVzZSA8ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBBcGFydCBmcm9tIGJpbmFyeSBwYWNrYWdlcywgdGhlIGRldGVybWluYXRpb24gb2YgaG93IGEgc291cmNlIHRyZWUKLSAgICAgICAgc2hvdWxkIGJlIHRyZWF0ZWQgaXMgYXV0b21hdGljIGJhc2VkIG9uIHRoZSBmaWxlcyBwcmVzZW50IHdpdGhpbgotICAgICAgICB0aGF0IHNvdXJjZSB0cmVlLgotICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYSA8ZmlsZW5hbWU+Q01ha2VMaXN0cy50eHQ8L2ZpbGVuYW1lPiBmaWxlIGlzIGZvdW5kLAotICAgICAgICB0aGVuIHRoZSBzb3VyY2UgdHJlZSBpcyBhc3N1bWVkIHRvIGJlIHVzaW5nCi0gICAgICAgIENNYWtlIGFuZCBpcyB0cmVhdGVkIGFjY29yZGluZ2x5LgotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIEluIG1vc3QgY2FzZXMsIHlvdSBuZWVkIHRvIGVkaXQgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCi0gICAgICAgICAgICByZWNpcGUgaW4gb3JkZXIgdG8gbWFrZSBpdCBidWlsZCBwcm9wZXJseS4KLSAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIGdvIHRocm91Z2ggc2V2ZXJhbCBlZGl0IGFuZCBidWlsZCBjeWNsZXMKLSAgICAgICAgICAgIHVudGlsIHlvdSBjYW4gYnVpbGQgdGhlIHJlY2lwZS4KLSAgICAgICAgICAgIE9uY2UgdGhlIHJlY2lwZSBjYW4gYmUgYnVpbHQsIHlvdSBjb3VsZCB1c2UgcG9zc2libGUgZnVydGhlcgotICAgICAgICAgICAgaXRlcmF0aW9ucyB0byB0ZXN0IHRoZSByZWNpcGUgb24gdGhlIHRhcmdldCBkZXZpY2UuCi0gICAgICAgIDwvbm90ZT4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gY292ZXJzIHNwZWNpZmljcyByZWdhcmRpbmcgaG93IHBhcnRzCi0gICAgICAgIG9mIHRoZSByZWNpcGUgYXJlIGdlbmVyYXRlZC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2RrLW5hbWUtYW5kLXZlcnNpb24nPgotICAgICAgICA8dGl0bGU+TmFtZSBhbmQgVmVyc2lvbjwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J3Nkay1hLWNsb3Nlci1sb29rLWF0LWRldnRvb2wtYWRkJz4KKyAgICAgICAgPHRpdGxlPkEgQ2xvc2VyIExvb2sgYXQgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT48L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgbmFtZSBhbmQgdmVyc2lvbiBvbiB0aGUgY29tbWFuZAotICAgICAgICAgICAgbGluZSwgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gYXR0ZW1wdHMgdG8gZGV0ZXJtaW5lCi0gICAgICAgICAgICB0aGUgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQgZnJvbQotICAgICAgICAgICAgdmFyaW91cyBtZXRhZGF0YSB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLgotICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBjb21tYW5kIHNldHMgdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZWQgcmVjaXBlCi0gICAgICAgICAgICBmaWxlIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgSWYgdGhlIG5hbWUgb3IgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHByaW50cyBhbiBlcnJvciBhbmQKLSAgICAgICAgICAgIHlvdSBtdXN0IHJlLXJ1biB0aGUgY29tbWFuZCB3aXRoIGJvdGggdGhlIG5hbWUgYW5kIHZlcnNpb24KLSAgICAgICAgICAgIG9yIGp1c3QgdGhlIG5hbWUgb3IgdmVyc2lvbiBzcGVjaWZpZWQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYQorICAgICAgICAgICAgcmVjaXBlIGJhc2VkIG9uIHRoZSBzb3VyY2UgdHJlZSB3aXRoIHdoaWNoIHlvdSBwcm92aWRlIGl0LgorICAgICAgICAgICAgQ3VycmVudGx5LCB0aGUgY29tbWFuZCBoYXMgc3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdXRvdG9vbHMgKDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDTWFrZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNjb25zCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQbGFpbiA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE91dC1vZi10cmVlIGtlcm5lbCBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaW5hcnkgcGFja2FnZSAoaS5lLiAiLWIiIG9wdGlvbikKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBOb2RlLmpzIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBtb2R1bGVzIHRoYXQgdXNlIDxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFNvbWV0aW1lcyB0aGUgbmFtZSBvciB2ZXJzaW9uIGRldGVybWluZWQgZnJvbSB0aGUgc291cmNlIHRyZWUKLSAgICAgICAgICAgIG1pZ2h0IGJlIGluY29ycmVjdC4KLSAgICAgICAgICAgIEZvciBzdWNoIGEgY2FzZSwgeW91IG11c3QgcmVzZXQgdGhlIHJlY2lwZToKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgIEFwYXJ0IGZyb20gYmluYXJ5IHBhY2thZ2VzLCB0aGUgZGV0ZXJtaW5hdGlvbiBvZiBob3cgYSBzb3VyY2UgdHJlZQorICAgICAgICAgICAgc2hvdWxkIGJlIHRyZWF0ZWQgaXMgYXV0b21hdGljIGJhc2VkIG9uIHRoZSBmaWxlcyBwcmVzZW50IHdpdGhpbgorICAgICAgICAgICAgdGhhdCBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIDxmaWxlbmFtZT5DTWFrZUxpc3RzLnR4dDwvZmlsZW5hbWU+IGZpbGUgaXMgZm91bmQsCisgICAgICAgICAgICB0aGVuIHRoZSBzb3VyY2UgdHJlZSBpcyBhc3N1bWVkIHRvIGJlIHVzaW5nCisgICAgICAgICAgICBDTWFrZSBhbmQgaXMgdHJlYXRlZCBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEluIG1vc3QgY2FzZXMsIHlvdSBuZWVkIHRvIGVkaXQgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgcmVjaXBlIGluIG9yZGVyIHRvIG1ha2UgaXQgYnVpbGQgcHJvcGVybHkuCisgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgZ28gdGhyb3VnaCBzZXZlcmFsIGVkaXQgYW5kIGJ1aWxkIGN5Y2xlcworICAgICAgICAgICAgICAgIHVudGlsIHlvdSBjYW4gYnVpbGQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSByZWNpcGUgY2FuIGJlIGJ1aWx0LCB5b3UgY291bGQgdXNlIHBvc3NpYmxlIGZ1cnRoZXIKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIHRvIHRlc3QgdGhlIHJlY2lwZSBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gY292ZXJzIHNwZWNpZmljcyByZWdhcmRpbmcgaG93IHBhcnRzCisgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIGFyZSBnZW5lcmF0ZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2RrLW5hbWUtYW5kLXZlcnNpb24nPgorICAgICAgICAgICAgPHRpdGxlPk5hbWUgYW5kIFZlcnNpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBuYW1lIGFuZCB2ZXJzaW9uIG9uIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgbGluZSwgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gYXR0ZW1wdHMgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgdGhlIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGZyb20KKyAgICAgICAgICAgICAgICB2YXJpb3VzIG1ldGFkYXRhIHdpdGhpbiB0aGUgc291cmNlIHRyZWUuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBjb21tYW5kIHNldHMgdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZWQgcmVjaXBlCisgICAgICAgICAgICAgICAgZmlsZSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgICAgICBJZiB0aGUgbmFtZSBvciB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHByaW50cyBhbiBlcnJvciBhbmQKKyAgICAgICAgICAgICAgICB5b3UgbXVzdCByZS1ydW4gdGhlIGNvbW1hbmQgd2l0aCBib3RoIHRoZSBuYW1lIGFuZCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgb3IganVzdCB0aGUgbmFtZSBvciB2ZXJzaW9uIHNwZWNpZmllZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIHRoZSBuYW1lIG9yIHZlcnNpb24gZGV0ZXJtaW5lZCBmcm9tIHRoZSBzb3VyY2UgdHJlZQorICAgICAgICAgICAgICAgIG1pZ2h0IGJlIGluY29ycmVjdC4KKyAgICAgICAgICAgICAgICBGb3Igc3VjaCBhIGNhc2UsIHlvdSBtdXN0IHJlc2V0IHRoZSByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGRldnRvb2wgcmVzZXQgLW4gPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgQWZ0ZXIgcnVubmluZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQ8L2ZpbGVuYW1lPiBjb21tYW5kLAotICAgICAgICAgICAgeW91IG5lZWQgdG8gcnVuIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGFnYWluIGFuZAotICAgICAgICAgICAgcHJvdmlkZSB0aGUgbmFtZSBvciB0aGUgdmVyc2lvbi4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWZ0ZXIgcnVubmluZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQ8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHJ1biA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBhZ2FpbiBhbmQKKyAgICAgICAgICAgICAgICBwcm92aWRlIHRoZSBuYW1lIG9yIHRoZSB2ZXJzaW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICA8c2VjdGlvbiBpZD0nc2RrLWRlcGVuZGVuY3ktZGV0ZWN0aW9uLWFuZC1tYXBwaW5nJz4KLSAgICAgICAgPHRpdGxlPkRlcGVuZGVuY3kgRGV0ZWN0aW9uIGFuZCBNYXBwaW5nPC90aXRsZT4KKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1kZXBlbmRlbmN5LWRldGVjdGlvbi1hbmQtbWFwcGluZyc+CisgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jeSBEZXRlY3Rpb24gYW5kIE1hcHBpbmc8L3RpdGxlPgogCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgYXR0ZW1wdHMgdG8KLSAgICAgICAgICAgIGRldGVjdCBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBhbmQgbWFwIHRoZW0gdG8gb3RoZXIgcmVjaXBlcwotICAgICAgICAgICAgaW4gdGhlIHN5c3RlbS4KLSAgICAgICAgICAgIER1cmluZyB0aGlzIG1hcHBpbmcsIHRoZSBjb21tYW5kIGZpbGxzIGluIHRoZSBuYW1lcyBvZiB0aG9zZQotICAgICAgICAgICAgcmVjaXBlcyBpbiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIHZhbHVlIHdpdGhpbiB0aGUgcmVjaXBlLgotICAgICAgICAgICAgSWYgYSBkZXBlbmRlbmN5IGNhbm5vdCBiZSBtYXBwZWQsIHRoZW4gYSBjb21tZW50IGlzIHBsYWNlZCBpbgotICAgICAgICAgICAgdGhlIHJlY2lwZSBpbmRpY2F0aW5nIHN1Y2guCi0gICAgICAgICAgICBUaGUgaW5hYmlsaXR5IHRvIG1hcCBhIGRlcGVuZGVuY3kgbWlnaHQgYmUgY2F1c2VkIGJlY2F1c2UgdGhlCi0gICAgICAgICAgICBuYW1pbmcgaXMgbm90IHJlY29nbml6ZWQgb3IgYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBzaW1wbHkgaXMKLSAgICAgICAgICAgIG5vdCBhdmFpbGFibGUuCi0gICAgICAgICAgICBGb3IgY2FzZXMgd2hlcmUgdGhlIGRlcGVuZGVuY3kgaXMgbm90IGF2YWlsYWJsZSwgeW91IG11c3QgdXNlCi0gICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCB0byBhZGQgYW4KLSAgICAgICAgICAgIGFkZGl0aW9uYWwgcmVjaXBlIHRvIHNhdGlzZnkgdGhlIGRlcGVuZGVuY3kgYW5kIHRoZW4gY29tZQotICAgICAgICAgICAgYmFjayB0byB0aGUgZmlyc3QgcmVjaXBlIGFuZCBhZGQgaXRzIG5hbWUgdG8KLSAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uCi0gICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgZGV0ZWN0IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIGFuZCBtYXAgdGhlbSB0byBvdGhlciByZWNpcGVzCisgICAgICAgICAgICAgICAgaW4gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhpcyBtYXBwaW5nLCB0aGUgY29tbWFuZCBmaWxscyBpbiB0aGUgbmFtZXMgb2YgdGhvc2UKKyAgICAgICAgICAgICAgICByZWNpcGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YWx1ZSB3aXRoaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBJZiBhIGRlcGVuZGVuY3kgY2Fubm90IGJlIG1hcHBlZCwgdGhlbiBhIGNvbW1lbnQgaXMgcGxhY2VkIGluCisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBpbmRpY2F0aW5nIHN1Y2guCisgICAgICAgICAgICAgICAgVGhlIGluYWJpbGl0eSB0byBtYXAgYSBkZXBlbmRlbmN5IG1pZ2h0IGJlIGNhdXNlZCBiZWNhdXNlIHRoZQorICAgICAgICAgICAgICAgIG5hbWluZyBpcyBub3QgcmVjb2duaXplZCBvciBiZWNhdXNlIHRoZSBkZXBlbmRlbmN5IHNpbXBseSBpcworICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgRm9yIGNhc2VzIHdoZXJlIHRoZSBkZXBlbmRlbmN5IGlzIG5vdCBhdmFpbGFibGUsIHlvdSBtdXN0IHVzZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGFkZCBhbgorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgcmVjaXBlIHRvIHNhdGlzZnkgdGhlIGRlcGVuZGVuY3kgYW5kIHRoZW4gY29tZQorICAgICAgICAgICAgICAgIGJhY2sgdG8gdGhlIGZpcnN0IHJlY2lwZSBhbmQgYWRkIGl0cyBuYW1lIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGFkZCBydW50aW1lIGRlcGVuZGVuY2llcywgeW91IGNhbiBkbyBzbyBieQotICAgICAgICAgICAgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91ciByZWNpcGU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBhZGQgcnVudGltZSBkZXBlbmRlbmNpZXMsIHlvdSBjYW4gZG8gc28gYnkKKyAgICAgICAgICAgICAgICBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB5b3VyIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIFJERVBFTkRTXyR7UE59ICs9ICJkZXBlbmRlbmN5MSBkZXBlbmRlbmN5MiAuLi4iCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBvZnRlbiBjYW5ub3QKLSAgICAgICAgICAgICAgICBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1hbmRhdG9yeSBhbmQgb3B0aW9uYWwgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgc29tZSBvZiB0aGUgZGV0ZWN0ZWQgZGVwZW5kZW5jaWVzIG1pZ2h0Ci0gICAgICAgICAgICAgICAgaW4gZmFjdCBiZSBvcHRpb25hbC4KLSAgICAgICAgICAgICAgICBXaGVuIGluIGRvdWJ0LCBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIG9yIHRoZSBjb25maWd1cmUKLSAgICAgICAgICAgICAgICBzY3JpcHQgZm9yIHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nIGZvciBmdXJ0aGVyCi0gICAgICAgICAgICAgICAgZGV0YWlscy4KLSAgICAgICAgICAgICAgICBJbiBzb21lIGNhc2VzLCB5b3UgbWlnaHQgZmluZCB5b3UgY2FuIHN1YnN0aXR1dGUgdGhlCi0gICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBmb3IgYW4gb3B0aW9uIHRvIGRpc2FibGUgdGhlIGFzc29jaWF0ZWQKLSAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IHBhc3NlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdC4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIG9mdGVuIGNhbm5vdAorICAgICAgICAgICAgICAgICAgICBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1hbmRhdG9yeSBhbmQgb3B0aW9uYWwgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHNvbWUgb2YgdGhlIGRldGVjdGVkIGRlcGVuZGVuY2llcyBtaWdodAorICAgICAgICAgICAgICAgICAgICBpbiBmYWN0IGJlIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluIGRvdWJ0LCBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIG9yIHRoZSBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGZvciB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcyBidWlsZGluZyBmb3IgZnVydGhlcgorICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLgorICAgICAgICAgICAgICAgICAgICBJbiBzb21lIGNhc2VzLCB5b3UgbWlnaHQgZmluZCB5b3UgY2FuIHN1YnN0aXR1dGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgZm9yIGFuIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgcGFzc2VkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgogCi0gICAgPHNlY3Rpb24gaWQ9J3Nkay1saWNlbnNlLWRldGVjdGlvbic+Ci0gICAgICAgIDx0aXRsZT5MaWNlbnNlIERldGVjdGlvbjwvdGl0bGU+CisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstbGljZW5zZS1kZXRlY3Rpb24nPgorICAgICAgICAgICAgPHRpdGxlPkxpY2Vuc2UgRGV0ZWN0aW9uPC90aXRsZT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGF0dGVtcHRzIHRvCi0gICAgICAgICAgICBkZXRlcm1pbmUgaWYgdGhlIHNvZnR3YXJlIHlvdSBhcmUgYWRkaW5nIGlzIGFibGUgdG8gYmUKLSAgICAgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIGEgY29tbW9uIG9wZW4tc291cmNlIGxpY2Vuc2UgYW5kIHNldHMgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElDRU5TRSc+PGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICB2YWx1ZSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgIFlvdSBzaG91bGQgZG91YmxlLWNoZWNrIHRoaXMgdmFsdWUgYWdhaW5zdCB0aGUgZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgb3Igc291cmNlIGZpbGVzIGZvciB0aGUgc29mdHdhcmUgeW91IGFyZSBidWlsZGluZyBhbmQgdXBkYXRlCi0gICAgICAgICAgICB0aGF0IDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gdmFsdWUgaWYgbmVjZXNzYXJ5LgotICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgIGRldGVybWluZSBpZiB0aGUgc29mdHdhcmUgeW91IGFyZSBhZGRpbmcgaXMgYWJsZSB0byBiZQorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIGEgY29tbW9uIG9wZW4tc291cmNlIGxpY2Vuc2UgYW5kIHNldHMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhbHVlIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZG91YmxlLWNoZWNrIHRoaXMgdmFsdWUgYWdhaW5zdCB0aGUgZG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgIG9yIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHNvZnR3YXJlIHlvdSBhcmUgYnVpbGRpbmcgYW5kIHVwZGF0ZQorICAgICAgICAgICAgICAgIHRoYXQgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiB2YWx1ZSBpZiBuZWNlc3NhcnkuCisgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBhbHNvIHNldHMgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElDX0ZJTEVTX0NIS1NVTSc+PGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICB2YWx1ZSB0byBwb2ludCB0byBhbGwgZmlsZXMgdGhhdCBhcHBlYXIgdG8gYmUgbGljZW5zZS1yZWxhdGVkLgotICAgICAgICAgICAgSG93ZXZlciwgbGljZW5zZSBzdGF0ZW1lbnRzIG9mdGVuIGFwcGVhciBpbiBjb21tZW50cyBhdCB0aGUgdG9wCi0gICAgICAgICAgICBvZiBzb3VyY2UgZmlsZXMgb3Igd2l0aGluIGRvY3VtZW50YXRpb24uCi0gICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtaWdodCBuZWVkIHRvIGFtZW5kIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBwb2ludCB0byBvbmUKLSAgICAgICAgICAgIG9yIG1vcmUgb2YgdGhvc2UgY29tbWVudHMgaWYgcHJlc2VudC4KLSAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiBpcyBwYXJ0aWN1bGFybHkKLSAgICAgICAgICAgIGltcG9ydGFudCBmb3IgdGhpcmQtcGFydHkgc29mdHdhcmUuCi0gICAgICAgICAgICBUaGUgbWVjaGFuaXNtIGF0dGVtcHRzIHRvIGVuc3VyZSBjb3JyZWN0IGxpY2Vuc2luZyBzaG91bGQgeW91Ci0gICAgICAgICAgICB1cGdyYWRlIHRoZSByZWNpcGUgdG8gYSBuZXdlciB1cHN0cmVhbSB2ZXJzaW9uIGluIGZ1dHVyZS4KLSAgICAgICAgICAgIEFueSBjaGFuZ2UgaW4gbGljZW5zaW5nIGlzIGRldGVjdGVkIGFuZCB5b3UgcmVjZWl2ZSBhbiBlcnJvcgotICAgICAgICAgICAgcHJvbXB0aW5nIHlvdSB0byBjaGVjayB0aGUgbGljZW5zZSB0ZXh0IGFnYWluLgotICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBhbHNvIHNldHMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ19GSUxFU19DSEtTVU0nPjxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhbHVlIHRvIHBvaW50IHRvIGFsbCBmaWxlcyB0aGF0IGFwcGVhciB0byBiZSBsaWNlbnNlLXJlbGF0ZWQuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgbGljZW5zZSBzdGF0ZW1lbnRzIG9mdGVuIGFwcGVhciBpbiBjb21tZW50cyBhdCB0aGUgdG9wCisgICAgICAgICAgICAgICAgb2Ygc291cmNlIGZpbGVzIG9yIHdpdGhpbiBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG1pZ2h0IG5lZWQgdG8gYW1lbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBwb2ludCB0byBvbmUKKyAgICAgICAgICAgICAgICBvciBtb3JlIG9mIHRob3NlIGNvbW1lbnRzIGlmIHByZXNlbnQuCisgICAgICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IGlzIHBhcnRpY3VsYXJseQorICAgICAgICAgICAgICAgIGltcG9ydGFudCBmb3IgdGhpcmQtcGFydHkgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgVGhlIG1lY2hhbmlzbSBhdHRlbXB0cyB0byBlbnN1cmUgY29ycmVjdCBsaWNlbnNpbmcgc2hvdWxkIHlvdQorICAgICAgICAgICAgICAgIHVwZ3JhZGUgdGhlIHJlY2lwZSB0byBhIG5ld2VyIHVwc3RyZWFtIHZlcnNpb24gaW4gZnV0dXJlLgorICAgICAgICAgICAgICAgIEFueSBjaGFuZ2UgaW4gbGljZW5zaW5nIGlzIGRldGVjdGVkIGFuZCB5b3UgcmVjZWl2ZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgIHByb21wdGluZyB5b3UgdG8gY2hlY2sgdGhlIGxpY2Vuc2UgdGV4dCBhZ2Fpbi4KKyAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNhbm5vdAotICAgICAgICAgICAgZGV0ZXJtaW5lIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+IHZhbHVlIGlzIHNldCB0byAiQ0xPU0VEIiBhbmQgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhdWxlIHJlbWFpbnMgdW5zZXQuCi0gICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGFsbG93cyB5b3UgdG8gY29udGludWUgd2l0aCBkZXZlbG9wbWVudCBidXQgaXMKLSAgICAgICAgICAgIHVubGlrZWx5IHRvIGJlIGNvcnJlY3QgaW4gYWxsIGNhc2VzLgotICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZQotICAgICAgICAgICAgZmlsZXMgZm9yIHRoZSBzb2Z0d2FyZSB5b3UgYXJlIGJ1aWxkaW5nIHRvIGRldGVybWluZSB0aGUgYWN0dWFsCi0gICAgICAgICAgICBsaWNlbnNlLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgY2Fubm90CisgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiB2YWx1ZSBpcyBzZXQgdG8gIkNMT1NFRCIgYW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFsdWUgcmVtYWlucyB1bnNldC4KKyAgICAgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGFsbG93cyB5b3UgdG8gY29udGludWUgd2l0aCBkZXZlbG9wbWVudCBidXQgaXMKKyAgICAgICAgICAgICAgICB1bmxpa2VseSB0byBiZSBjb3JyZWN0IGluIGFsbCBjYXNlcy4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb3Igc291cmNlCisgICAgICAgICAgICAgICAgZmlsZXMgZm9yIHRoZSBzb2Z0d2FyZSB5b3UgYXJlIGJ1aWxkaW5nIHRvIGRldGVybWluZSB0aGUgYWN0dWFsCisgICAgICAgICAgICAgICAgbGljZW5zZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgogCi0gICAgPHNlY3Rpb24gaWQ9J3Nkay1hZGRpbmctbWFrZWZpbGUtb25seS1zb2Z0d2FyZSc+Ci0gICAgICAgIDx0aXRsZT5BZGRpbmcgTWFrZWZpbGUtT25seSBTb2Z0d2FyZTwvdGl0bGU+CisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstYWRkaW5nLW1ha2VmaWxlLW9ubHktc29mdHdhcmUnPgorICAgICAgICAgICAgPHRpdGxlPkFkZGluZyBNYWtlZmlsZS1Pbmx5IFNvZnR3YXJlPC90aXRsZT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSB1c2Ugb2YgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBieSBpdHNlbGYgaXMgdmVyeSBjb21tb24KLSAgICAgICAgICAgIGluIGJvdGggcHJvcHJpZXRhcnkgYW5kIG9wZW4gc291cmNlIHNvZnR3YXJlLgotICAgICAgICAgICAgVW5mb3J0dW5hdGVseSwgTWFrZWZpbGVzIGFyZSBvZnRlbiBub3Qgd3JpdHRlbiB3aXRoCi0gICAgICAgICAgICBjcm9zcy1jb21waWxhdGlvbiBpbiBtaW5kLgotICAgICAgICAgICAgVGh1cywgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gb2Z0ZW4gY2Fubm90IGRvIHZlcnkKLSAgICAgICAgICAgIG11Y2ggdG8gZW5zdXJlIHRoYXQgdGhlc2UgTWFrZWZpbGVzIGJ1aWxkIGNvcnJlY3RseS4KLSAgICAgICAgICAgIEl0IGlzIHZlcnkgY29tbW9uLCBmb3IgZXhhbXBsZSwgdG8gZXhwbGljaXRseSBjYWxsCi0gICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gaW5zdGVhZCBvZiB1c2luZyB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5DQzwvZmlsZW5hbWU+IHZhcmlhYmxlLgotICAgICAgICAgICAgVXN1YWxseSwgaW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwKLSAgICAgICAgICAgIDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPiBpcyB0aGUgY29tcGlsZXIgZm9yIHRoZSBidWlsZCBob3N0Ci0gICAgICAgICAgICBhbmQgdGhlIGNyb3NzLWNvbXBpbGVyIGlzIG5hbWVkIHNvbWV0aGluZyBzaW1pbGFyIHRvCi0gICAgICAgICAgICA8ZmlsZW5hbWU+YXJtLXBva3ktbGludXgtZ251ZWFiaS1nY2M8L2ZpbGVuYW1lPiBhbmQgbWlnaHQKLSAgICAgICAgICAgIHJlcXVpcmUgc29tZSBhcmd1bWVudHMgKGUuZy4gdG8gcG9pbnQgdG8gdGhlIGFzc29jaWF0ZWQgc3lzcm9vdAotICAgICAgICAgICAgZm9yIHRoZSB0YXJnZXQgbWFjaGluZSkuCi0gICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSB1c2Ugb2YgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBieSBpdHNlbGYgaXMgdmVyeSBjb21tb24KKyAgICAgICAgICAgICAgICBpbiBib3RoIHByb3ByaWV0YXJ5IGFuZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICBVbmZvcnR1bmF0ZWx5LCBNYWtlZmlsZXMgYXJlIG9mdGVuIG5vdCB3cml0dGVuIHdpdGgKKyAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxhdGlvbiBpbiBtaW5kLgorICAgICAgICAgICAgICAgIFRodXMsIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IG9mdGVuIGNhbm5vdCBkbyB2ZXJ5CisgICAgICAgICAgICAgICAgbXVjaCB0byBlbnN1cmUgdGhhdCB0aGVzZSBNYWtlZmlsZXMgYnVpbGQgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgIEl0IGlzIHZlcnkgY29tbW9uLCBmb3IgZXhhbXBsZSwgdG8gZXhwbGljaXRseSBjYWxsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGluc3RlYWQgb2YgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNDJz48ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgVXN1YWxseSwgaW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gaXMgdGhlIGNvbXBpbGVyIGZvciB0aGUgYnVpbGQgaG9zdAorICAgICAgICAgICAgICAgIGFuZCB0aGUgY3Jvc3MtY29tcGlsZXIgaXMgbmFtZWQgc29tZXRoaW5nIHNpbWlsYXIgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXJtLXBva3ktbGludXgtZ251ZWFiaS1nY2M8L2ZpbGVuYW1lPiBhbmQgbWlnaHQKKyAgICAgICAgICAgICAgICByZXF1aXJlIHNvbWUgYXJndW1lbnRzIChlLmcuIHRvIHBvaW50IHRvIHRoZSBhc3NvY2lhdGVkIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldCBtYWNoaW5lKS4KKyAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gd3JpdGluZyBhIHJlY2lwZSBmb3IgTWFrZWZpbGUtb25seSBzb2Z0d2FyZSwga2VlcCB0aGUKLSAgICAgICAgICAgIGZvbGxvd2luZyBpbiBtaW5kOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBwcm9iYWJseSBuZWVkIHRvIHBhdGNoIHRoZSBNYWtlZmlsZSB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGluc3RlYWQgb2YgaGFyZGNvZGluZyB0b29scyB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBzdWNoIGFzIDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmcrKzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHJ1bnMKLSAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHVwIHdpdGggdmFyaW91cyBzdGFuZGFyZCB2YXJpYWJsZXMgZm9yCi0gICAgICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uIChlLmcuIDxmaWxlbmFtZT5DQzwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q1hYPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkgaW4gYSBzaW1pbGFyCi0gICAgICAgICAgICAgICAgICAgIG1hbm5lciB0byB0aGUgZW52aXJvbm1lbnQgc2V0IHVwIGJ5IHRoZSBTREsncwotICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgIE9uZSBlYXN5IHdheSB0byBzZWUgdGhlc2UgdmFyaWFibGVzIGlzIHRvIHJ1biB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICByZWNpcGUgYW5kIHRoZW4gbG9vayBpbgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtbG9ncy9ydW4uZG9fY29tcGlsZTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBUb3dhcmRzIHRoZSB0b3Agb2YgdGhpcyBmaWxlIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YKLSAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGJlaW5nIHNldC4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZSB2YXJpYWJsZXMgd2l0aGluIHRoZQotICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgTWFrZWZpbGUgc2V0cyBhIGRlZmF1bHQgZm9yIGEgdmFyaWFibGUgdXNpbmcgIj0iLAotICAgICAgICAgICAgICAgICAgICB0aGF0IGRlZmF1bHQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBzZXQgaW4gdGhlIGVudmlyb25tZW50LAotICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IG5vdCBkZXNpcmFibGUuCi0gICAgICAgICAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB5b3UgY2FuIGVpdGhlciBwYXRjaCB0aGUgTWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgc28gaXQgc2V0cyB0aGUgZGVmYXVsdCB1c2luZyB0aGUgIj89IiBvcGVyYXRvciwgb3IKLSAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhbHRlcm5hdGl2ZWx5IGZvcmNlIHRoZSB2YWx1ZSBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIFRvIGZvcmNlIHRoZSB2YWx1ZSBvbiB0aGUgY29tbWFuZCBsaW5lLCBhZGQgdGhlCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldHRpbmcgdG8KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FTUFLRSc+PGZpbGVuYW1lPkVYVFJBX09FTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByZWNpcGUgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBFWFRSQV9PRU1BS0UgKz0gIidDQz0ke0NDfScgJ0NYWD0ke0NYWH0nIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCBzaW5nbGUgcXVvdGVzIGFyZSB1c2VkIGFyb3VuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZ3MgYXMgdGhlIHZhbHVlcyBhcmUgbGlrZWx5IHRvIGNvbnRhaW4KLSAgICAgICAgICAgICAgICAgICAgc3BhY2VzIGJlY2F1c2UgcmVxdWlyZWQgZGVmYXVsdCBvcHRpb25zIGFyZSBwYXNzZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgdGhlIGNvbXBpbGVyLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEhhcmRjb2RpbmcgcGF0aHMgaW5zaWRlIE1ha2VmaWxlcyBpcyBvZnRlbiBwcm9ibGVtYXRpYwotICAgICAgICAgICAgICAgICAgICBpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50LgotICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGJlY2F1c2UgdGhvc2UgaGFyZGNvZGVkIHBhdGhzCi0gICAgICAgICAgICAgICAgICAgIG9mdGVuIHBvaW50IHRvIGxvY2F0aW9ucyBvbiB0aGUgYnVpbGQgaG9zdCBhbmQgdGh1cwotICAgICAgICAgICAgICAgICAgICB3aWxsIGVpdGhlciBiZSByZWFkLW9ubHkgb3Igd2lsbCBpbnRyb2R1Y2UKLSAgICAgICAgICAgICAgICAgICAgY29udGFtaW5hdGlvbiBpbnRvIHRoZSBjcm9zcy1jb21waWxhdGlvbiBieSB2aXJ0dWUgb2YKLSAgICAgICAgICAgICAgICAgICAgYmVpbmcgc3BlY2lmaWMgdG8gdGhlIGJ1aWxkIGhvc3QgcmF0aGVyIHRoYW4gdGhlIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgUGF0Y2hpbmcgdGhlIE1ha2VmaWxlIHRvIHVzZSBwcmVmaXggdmFyaWFibGVzIG9yIG90aGVyCi0gICAgICAgICAgICAgICAgICAgIHBhdGggdmFyaWFibGVzIGlzIHVzdWFsbHkgdGhlIHdheSB0byBoYW5kbGUgdGhpcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgYSBNYWtlZmlsZSBydW5zIHRhcmdldC1zcGVjaWZpYyBjb21tYW5kcyBzdWNoCi0gICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5sZGNvbmZpZzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBGb3Igc3VjaCBjYXNlcywgeW91IG1pZ2h0IGJlIGFibGUgdG8gc2ltcGx5IGFwcGx5Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgdGhhdCByZW1vdmUgdGhlc2UgY29tbWFuZHMgZnJvbSB0aGUgTWFrZWZpbGUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2RrLWFkZGluZy1uYXRpdmUtdG9vbHMnPgotICAgICAgICA8dGl0bGU+QWRkaW5nIE5hdGl2ZSBUb29sczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBPZnRlbiwgeW91IG5lZWQgdG8gYnVpbGQgYWRkaXRpb25hbCB0b29scyB0aGF0IHJ1biBvbiB0aGUKLSAgICAgICAgICAgIGJ1aWxkIGhvc3Qgc3lzdGVtIGFzIG9wcG9zZWQgdG8gdGhlIHRhcmdldC4KLSAgICAgICAgICAgIFlvdSBzaG91bGQgaW5kaWNhdGUgdGhpcyB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzCi0gICAgICAgICAgICB3aGVuIHlvdSBydW4gPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT46Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgcmVjaXBlIHN1Y2ggdGhhdCBpdCBlbmRzCi0gICAgICAgICAgICAgICAgICAgIHdpdGggIi1uYXRpdmUiLgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZSBuYW1lIGxpa2UgdGhpcyBwcm9kdWNlcyBhIHJlY2lwZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIG9ubHkgYnVpbGRzIGZvciB0aGUgYnVpbGQgaG9zdC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IHRoZSAiJmRhc2g7JmRhc2g7YWxzby1uYXRpdmUiIG9wdGlvbiB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoaXMgb3B0aW9uIGNyZWF0ZXMgYSByZWNpcGUgZmlsZSB0aGF0IHN0aWxsCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkcyBmb3IgdGhlIHRhcmdldCBidXQgYWxzbyBjcmVhdGVzIGEgdmFyaWFudCB3aXRoCi0gICAgICAgICAgICAgICAgICAgIGEgIi1uYXRpdmUiIHN1ZmZpeCB0aGF0IGJ1aWxkcyBmb3IgdGhlIGJ1aWxkIGhvc3QuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBhZGQgYSB0b29sIHRoYXQgaXMgc2hpcHBlZCBhcyBwYXJ0IG9mIGEKLSAgICAgICAgICAgICAgICBzb3VyY2UgdHJlZSB0aGF0IGJ1aWxkcyBjb2RlIGZvciB0aGUgdGFyZ2V0LCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgdHlwaWNhbGx5IGFjY29tcGxpc2ggdGhpcyBieSBidWlsZGluZyB0aGUgbmF0aXZlIGFuZCB0YXJnZXQKLSAgICAgICAgICAgICAgICBwYXJ0cyBzZXBhcmF0ZWx5IHJhdGhlciB0aGFuIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbgotICAgICAgICAgICAgICAgIHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgUmVhbGl6ZSB0aG91Z2ggdGhhdCB3aXRoIHRoZSAiJmRhc2g7JmRhc2g7YWxzby1uYXRpdmUiIG9wdGlvbiwgeW91Ci0gICAgICAgICAgICAgICAgY2FuIGFkZCB0aGUgdG9vbCB1c2luZyBqdXN0IG9uZSByZWNpcGUgZmlsZS4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdzZGstYWRkaW5nLW5vZGUtanMtbW9kdWxlcyc+Ci0gICAgICAgIDx0aXRsZT5BZGRpbmcgTm9kZS5qcyBNb2R1bGVzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGluIHRoZQotICAgICAgICAgICAgZm9sbG93aW5nIGZvcm0gdG8gYWRkIE5vZGUuanMgbW9kdWxlczoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIGFkZCAibnBtOi8vcmVnaXN0cnkubnBtanMub3JnO25hbWU9Zm9yZXZlcjt2ZXJzaW9uPTAuMTUuMSIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRoZSBuYW1lIGFuZCB2ZXJzaW9uIHBhcmFtZXRlcnMgYXJlIG1hbmRhdG9yeS4KLSAgICAgICAgICAgIExvY2tkb3duIGFuZCBzaHJpbmt3cmFwIGZpbGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHBvaW50ZWQgdG8gYnkKLSAgICAgICAgICAgIHRoZSByZWNpcGUgaW4gb3JkZXIgdG8gZnJlZXplIHRoZSB2ZXJzaW9uIHRoYXQgaXMgZmV0Y2hlZCBmb3IKLSAgICAgICAgICAgIHRoZSBkZXBlbmRlbmNpZXMgYWNjb3JkaW5nIHRvIHRoZSBmaXJzdCB0aW1lLgotICAgICAgICAgICAgVGhpcyBhbHNvIHNhdmVzIGNoZWNrc3VtcyB0aGF0IGFyZSB2ZXJpZmllZCBvbiBmdXR1cmUgZmV0Y2hlcy4KLSAgICAgICAgICAgIFRvZ2V0aGVyLCB0aGVzZSBiZWhhdmlvcnMgZW5zdXJlIHRoZSByZXByb2R1Y2liaWxpdHkgYW5kCi0gICAgICAgICAgICBpbnRlZ3JpdHkgb2YgdGhlIGJ1aWxkLgotICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gd3JpdGluZyBhIHJlY2lwZSBmb3IgTWFrZWZpbGUtb25seSBzb2Z0d2FyZSwga2VlcCB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW4gbWluZDoKICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgcXVvdGVzIGFyb3VuZCB0aGUgVVJMLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGRvZXMgbm90IHJlcXVpcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBxdW90ZXMsIGJ1dCB0aGUgc2hlbGwgY29uc2lkZXJzICI7IiBhcyBhIHNwbGl0dGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIG11bHRpcGxlIGNvbW1hbmRzLgotICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgd2l0aG91dCB0aGUgcXVvdGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gZG9lcyBub3QgcmVjZWl2ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHBhcnRzLCB3aGljaCByZXN1bHRzIGluIHNldmVyYWwgImNvbW1hbmQgbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCIgZXJyb3JzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHByb2JhYmx5IG5lZWQgdG8gcGF0Y2ggdGhlIE1ha2VmaWxlIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGluc3RlYWQgb2YgaGFyZGNvZGluZyB0b29scyB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gc3VjaCBhcyA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZysrPC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCBhZGRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUuanMgbW9kdWxlcywgYQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5vZGVqczwvZmlsZW5hbWU+IHJlY2lwZSBtdXN0IGJlIHBhcnQgb2YgeW91cgotICAgICAgICAgICAgICAgICAgICAgICAgU0RLIGluIG9yZGVyIHRvIHByb3ZpZGUgTm9kZS5qcwotICAgICAgICAgICAgICAgICAgICAgICAgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IGluIHdoaWNoIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gcnVucworICAgICAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHVwIHdpdGggdmFyaW91cyBzdGFuZGFyZCB2YXJpYWJsZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxhdGlvbiAoZS5nLiA8ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DWFg8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKSBpbiBhIHNpbWlsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbm5lciB0byB0aGUgZW52aXJvbm1lbnQgc2V0IHVwIGJ5IHRoZSBTREsncworICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgT25lIGVhc3kgd2F5IHRvIHNlZSB0aGVzZSB2YXJpYWJsZXMgaXMgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGFuZCB0aGVuIGxvb2sgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1sb2dzL3J1bi5kb19jb21waWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUb3dhcmRzIHRoZSB0b3Agb2YgdGhpcyBmaWxlIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBiZWluZyBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZXNlIHZhcmlhYmxlcyB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgTWFrZWZpbGUgc2V0cyBhIGRlZmF1bHQgZm9yIGEgdmFyaWFibGUgdXNpbmcgIj0iLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBkZWZhdWx0IG92ZXJyaWRlcyB0aGUgdmFsdWUgc2V0IGluIHRoZSBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgbm90IGRlc2lyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB5b3UgY2FuIGVpdGhlciBwYXRjaCB0aGUgTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvIGl0IHNldHMgdGhlIGRlZmF1bHQgdXNpbmcgdGhlICI/PSIgb3BlcmF0b3IsIG9yCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFsdGVybmF0aXZlbHkgZm9yY2UgdGhlIHZhbHVlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBmb3JjZSB0aGUgdmFsdWUgb24gdGhlIGNvbW1hbmQgbGluZSwgYWRkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FTUFLRSc+PGZpbGVuYW1lPkVYVFJBX09FTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRUNPTkZJR19DT05GQVJHUyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUdfQ09ORkFSR1M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2luZyA8ZmlsZW5hbWU+RVhUUkFfT0VNQUtFPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBX09FTUFLRSArPSAiJ0NDPSR7Q0N9JyAnQ1hYPSR7Q1hYfSciCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgc2luZ2xlIHF1b3RlcyBhcmUgdXNlZCBhcm91bmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzZXR0aW5ncyBhcyB0aGUgdmFsdWVzIGFyZSBsaWtlbHkgdG8gY29udGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzIGJlY2F1c2UgcmVxdWlyZWQgZGVmYXVsdCBvcHRpb25zIGFyZSBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIYXJkY29kaW5nIHBhdGhzIGluc2lkZSBNYWtlZmlsZXMgaXMgb2Z0ZW4gcHJvYmxlbWF0aWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGJlY2F1c2UgdGhvc2UgaGFyZGNvZGVkIHBhdGhzCisgICAgICAgICAgICAgICAgICAgICAgICBvZnRlbiBwb2ludCB0byBsb2NhdGlvbnMgb24gdGhlIGJ1aWxkIGhvc3QgYW5kIHRodXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgZWl0aGVyIGJlIHJlYWQtb25seSBvciB3aWxsIGludHJvZHVjZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFtaW5hdGlvbiBpbnRvIHRoZSBjcm9zcy1jb21waWxhdGlvbiBieSB2aXJ0dWUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHNwZWNpZmljIHRvIHRoZSBidWlsZCBob3N0IHJhdGhlciB0aGFuIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGluZyB0aGUgTWFrZWZpbGUgdG8gdXNlIHByZWZpeCB2YXJpYWJsZXMgb3Igb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggdmFyaWFibGVzIGlzIHVzdWFsbHkgdGhlIHdheSB0byBoYW5kbGUgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgYSBNYWtlZmlsZSBydW5zIHRhcmdldC1zcGVjaWZpYyBjb21tYW5kcyBzdWNoCisgICAgICAgICAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+bGRjb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzdWNoIGNhc2VzLCB5b3UgbWlnaHQgYmUgYWJsZSB0byBzaW1wbHkgYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgdGhhdCByZW1vdmUgdGhlc2UgY29tbWFuZHMgZnJvbSB0aGUgTWFrZWZpbGUuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstYWRkaW5nLW5hdGl2ZS10b29scyc+CisgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIE5hdGl2ZSBUb29sczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9mdGVuLCB5b3UgbmVlZCB0byBidWlsZCBhZGRpdGlvbmFsIHRvb2xzIHRoYXQgcnVuIG9uIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3Qgc3lzdGVtIGFzIG9wcG9zZWQgdG8gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGluZGljYXRlIHRoaXMgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcworICAgICAgICAgICAgICAgIHdoZW4geW91IHJ1biA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSByZWNpcGUgc3VjaCB0aGF0IGl0IGVuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggIi1uYXRpdmUiLgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGUgbmFtZSBsaWtlIHRoaXMgcHJvZHVjZXMgYSByZWNpcGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgb25seSBidWlsZHMgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgdGhlICImZGFzaDsmZGFzaDthbHNvLW5hdGl2ZSIgb3B0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGlzIG9wdGlvbiBjcmVhdGVzIGEgcmVjaXBlIGZpbGUgdGhhdCBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzIGZvciB0aGUgdGFyZ2V0IGJ1dCBhbHNvIGNyZWF0ZXMgYSB2YXJpYW50IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgIi1uYXRpdmUiIHN1ZmZpeCB0aGF0IGJ1aWxkcyBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gYWRkIGEgdG9vbCB0aGF0IGlzIHNoaXBwZWQgYXMgcGFydCBvZiBhCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlIHRoYXQgYnVpbGRzIGNvZGUgZm9yIHRoZSB0YXJnZXQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgdHlwaWNhbGx5IGFjY29tcGxpc2ggdGhpcyBieSBidWlsZGluZyB0aGUgbmF0aXZlIGFuZCB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgcGFydHMgc2VwYXJhdGVseSByYXRoZXIgdGhhbiB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgUmVhbGl6ZSB0aG91Z2ggdGhhdCB3aXRoIHRoZSAiJmRhc2g7JmRhc2g7YWxzby1uYXRpdmUiIG9wdGlvbiwgeW91CisgICAgICAgICAgICAgICAgICAgIGNhbiBhZGQgdGhlIHRvb2wgdXNpbmcganVzdCBvbmUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1hZGRpbmctbm9kZS1qcy1tb2R1bGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BZGRpbmcgTm9kZS5qcyBNb2R1bGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgdHdvCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IHdheXMgdG8gYWRkIE5vZGUuanMgbW9kdWxlczogMSkgVGhyb3VnaAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ucG08L2ZpbGVuYW1lPiBhbmQsIDIpIGZyb20gYSByZXBvc2l0b3J5IG9yIGxvY2FsCisgICAgICAgICAgICAgICAgc291cmNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBmb3JtIHRvIGFkZCBOb2RlLmpzIG1vZHVsZXMgdGhyb3VnaAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ucG08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBhZGQgIm5wbTovL3JlZ2lzdHJ5Lm5wbWpzLm9yZztuYW1lPWZvcmV2ZXI7dmVyc2lvbj0wLjE1LjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBuYW1lIGFuZCB2ZXJzaW9uIHBhcmFtZXRlcnMgYXJlIG1hbmRhdG9yeS4KKyAgICAgICAgICAgICAgICBMb2NrZG93biBhbmQgc2hyaW5rd3JhcCBmaWxlcyBhcmUgZ2VuZXJhdGVkIGFuZCBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBpbiBvcmRlciB0byBmcmVlemUgdGhlIHZlcnNpb24gdGhhdCBpcyBmZXRjaGVkIGZvcgorICAgICAgICAgICAgICAgIHRoZSBkZXBlbmRlbmNpZXMgYWNjb3JkaW5nIHRvIHRoZSBmaXJzdCB0aW1lLgorICAgICAgICAgICAgICAgIFRoaXMgYWxzbyBzYXZlcyBjaGVja3N1bXMgdGhhdCBhcmUgdmVyaWZpZWQgb24gZnV0dXJlIGZldGNoZXMuCisgICAgICAgICAgICAgICAgVG9nZXRoZXIsIHRoZXNlIGJlaGF2aW9ycyBlbnN1cmUgdGhlIHJlcHJvZHVjaWJpbGl0eSBhbmQKKyAgICAgICAgICAgICAgICBpbnRlZ3JpdHkgb2YgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlIHF1b3RlcyBhcm91bmQgdGhlIFVSTC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gZG9lcyBub3QgcmVxdWlyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBxdW90ZXMsIGJ1dCB0aGUgc2hlbGwgY29uc2lkZXJzICI7IiBhcyBhIHNwbGl0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiBtdWx0aXBsZSBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCB3aXRob3V0IHRoZSBxdW90ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gZG9lcyBub3QgcmVjZWl2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciBwYXJ0cywgd2hpY2ggcmVzdWx0cyBpbiBzZXZlcmFsICJjb21tYW5kIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIiBlcnJvcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCBhZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlLmpzIG1vZHVsZXMsIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9kZWpzPC9maWxlbmFtZT4gcmVjaXBlIG11c3QgYmUgcGFydCBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RLIGluIG9yZGVyIHRvIHByb3ZpZGUgTm9kZS5qcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgeW91IGNhbiBhbHNvIGFkZCBOb2RlLmpzIG1vZHVsZXMKKyAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIGEgcmVwb3NpdG9yeSBvciBsb2NhbCBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICBUbyBhZGQgbW9kdWxlcyB0aGlzIHdheSwgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGFkZCBodHRwczovL2dpdGh1Yi5jb20vZGl2ZXJzYXJpby9ub2RlLXNzZHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGZldGNoZXMgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5LCBkZXRlY3RzIHRoYXQgdGhlIGNvZGUgaXMgTm9kZS5qcyBjb2RlLCBmZXRjaGVzCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIHVzaW5nIDxmaWxlbmFtZT5ucG08L2ZpbGVuYW1lPiwgYW5kIHNldHMKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2RrLXdvcmtpbmctd2l0aC1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgV2l0aCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYSByZWNpcGUgd2l0aCA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IHRoZQorICAgICAgICAgICAgdHlwaWNhbCBidWlsZCBwcm9ncmVzc2lvbiBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRmV0Y2ggdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVucGFjayB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb21waWxpbmcgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIGJ1aWxkIG91dHB1dAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgdGhlIGluc3RhbGxlZCBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgRm9yIHJlY2lwZXMgaW4gdGhlIHdvcmtzcGFjZSwgZmV0Y2hpbmcgYW5kIHVucGFja2luZyBpcyBkaXNhYmxlZAorICAgICAgICAgICAgYXMgdGhlIHNvdXJjZSB0cmVlIGhhcyBhbHJlYWR5IGJlZW4gcHJlcGFyZWQgYW5kIGlzIHBlcnNpc3RlbnQuCisgICAgICAgICAgICBFYWNoIG9mIHRoZXNlIGJ1aWxkIHN0ZXBzIGlzIGRlZmluZWQgYXMgYSBmdW5jdGlvbiwgdXN1YWxseSB3aXRoIGEKKyAgICAgICAgICAgICJkb18iIHByZWZpeC4KKyAgICAgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdHlwaWNhbGx5IHNoZWxsIHNjcmlwdHMgYnV0IGNhbiBpbnN0ZWFkIGJlIHdyaXR0ZW4KKyAgICAgICAgICAgIGluIFB5dGhvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIGEgcmVjaXBlLCB5b3Ugd2lsbCBzZWUgdGhhdCB0aGUKKyAgICAgICAgICAgIHJlY2lwZSBkb2VzIG5vdCBpbmNsdWRlIGNvbXBsZXRlIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgdGhlCisgICAgICAgICAgICBzb2Z0d2FyZS4KKyAgICAgICAgICAgIEluc3RlYWQsIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGlzIGVuY2Fwc3VsYXRlZCBpbiBjbGFzc2VzIGluaGVyaXRlZAorICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUsIGxlYXZpbmcgdGhlIHJlY2lwZQorICAgICAgICAgICAgdG8gZGVzY3JpYmUganVzdCB0aGUgdGhpbmdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZSB0byBiZQorICAgICAgICAgICAgYnVpbHQuCisgICAgICAgICAgICBBIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgY2xhc3MgZXhpc3RzIHRoYXQgaXMgaW1wbGljaXRseSBpbmhlcml0ZWQgYnkgYWxsIHJlY2lwZXMgYW5kIHByb3ZpZGVzCisgICAgICAgICAgICB0aGUgZnVuY3Rpb25hbGl0eSB0aGF0IG1vc3QgdHlwaWNhbCByZWNpcGVzIG5lZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIHVzZWZ1bCB3aGVuCisgICAgICAgICAgICB3b3JraW5nIHdpdGggcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstZmluZGluZy1sb2dzLWFuZC13b3JrLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5GaW5kaW5nIExvZ3MgYW5kIFdvcmsgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgZGVidWdnaW5nIGEgcmVjaXBlIHRoYXQgeW91IHByZXZpb3VzbHkgY3JlYXRlZCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IG9yIHdob3NlIHNvdXJjZSB5b3UgYXJlIG1vZGlmeWluZworICAgICAgICAgICAgICAgIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kLCBhZnRlcgorICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBydW4gb2YgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiwgeW91IHdpbGwKKyAgICAgICAgICAgICAgICBmaW5kIHNvbWUgc3ltYm9saWMgbGlua3MgY3JlYXRlZCB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1sb2dzPC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGluCisgICAgICAgICAgICAgICAgd2hpY2ggbG9nIGZpbGVzIGFuZCBydW4gc2NyaXB0cyBmb3IgZWFjaCBidWlsZCBzdGVwIGFyZSBjcmVhdGVkCisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5vZS13b3JrZGlyPC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0byB0aGUgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgd29yayBhcmVhIGZvciB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZXNlIGxpbmtzIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uIG9uIHdoYXQgaXMKKyAgICAgICAgICAgICAgICBoYXBwZW5pbmcgYXQgZWFjaCBidWlsZCBzdGVwLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBsb2NhdGlvbnMgdW5kZXIgPGZpbGVuYW1lPm9lLXdvcmtkaXI8L2ZpbGVuYW1lPiBhcmUKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFybHkgdXNlZnVsOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW1hZ2UvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBDb250YWlucyBhbGwgb2YgdGhlIGZpbGVzIGluc3RhbGxlZCBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgV2l0aGluIGEgcmVjaXBlLCB0aGlzIGRpcmVjdG9yeSBpcyByZWZlcnJlZCB0byBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zeXNyb290LWRlc3RkaXIvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBDb250YWlucyBhIHN1YnNldCBvZiBmaWxlcyBpbnN0YWxsZWQgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRoYXQgaGF2ZSBiZWVuIHB1dCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1zaGFyaW5nLWZpbGVzLWJldHdlZW4tcmVjaXBlcyc+U2hhcmluZyBGaWxlcyBCZXR3ZWVuIFJlY2lwZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhY2thZ2VzLXNwbGl0LzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgc3ViZGlyZWN0b3JpZXMgZm9yIGVhY2ggcGFja2FnZSBwcm9kdWNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLXBhY2thZ2luZyc+UGFja2FnaW5nPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1zZXR0aW5nLWNvbmZpZ3VyZS1hcmd1bWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgQ29uZmlndXJlIEFyZ3VtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHRoZSBzb2Z0d2FyZSB5b3VyIHJlY2lwZSBpcyBidWlsZGluZyB1c2VzIEdOVSBhdXRvY29uZiwKKyAgICAgICAgICAgICAgICB0aGVuIGEgZml4ZWQgc2V0IG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQgdG8gaXQgdG8gZW5hYmxlCisgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsYXRpb24gcGx1cyBhbnkgZXh0cmFzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRUNPTkZJR19DT05GQVJHUyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUdfQ09ORkFSR1M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc2V0IHdpdGhpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIHBhc3MgYWRkaXRpb25hbCBvcHRpb25zLCBhZGQgdGhlbSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgT3RoZXIgc3VwcG9ydGVkIGJ1aWxkIHRvb2xzIGhhdmUgc2ltaWxhciB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAoZS5nLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNNQUtFJz48ZmlsZW5hbWU+RVhUUkFfT0VDTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3IgQ01ha2UsCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FU0NPTlMnPjxmaWxlbmFtZT5FWFRSQV9PRVNDT05TPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciBTY29ucywgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIGFueXRoaW5nIG9uIHRoZSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBsaW5lLCB5b3UgY2FuIHVzZSA8ZmlsZW5hbWU+RVhUUkFfT0VNQUtFPC9maWxlbmFtZT4gb3IgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VDT05GSUdfQ09ORkFSR1MnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBkbyBzby4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGNvbmZpZ3VyZS1oZWxwPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgIHRvIGhlbHAgeW91IHNldCB0aGUgYXJndW1lbnRzIGxpc3RlZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGRldGVybWluZXMgdGhlIGV4YWN0IG9wdGlvbnMgYmVpbmcgcGFzc2VkLCBhbmQgc2hvd3MKKyAgICAgICAgICAgICAgICB0aGVtIHRvIHlvdSBhbG9uZyB3aXRoIGFueSBjdXN0b20gYXJndW1lbnRzIHNwZWNpZmllZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUdfQ09ORkFSR1M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJZiBhcHBsaWNhYmxlLCB0aGUgY29tbWFuZCBhbHNvIHNob3dzIHlvdSB0aGUgb3V0cHV0IG9mIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQncyAiJmRhc2g7JmRhc2g7aGVscCIgb3B0aW9uIGFzIGEgcmVmZXJlbmNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1zaGFyaW5nLWZpbGVzLWJldHdlZW4tcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+U2hhcmluZyBGaWxlcyBCZXR3ZWVuIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIG9mdGVuIG5lZWQgdG8gdXNlIGZpbGVzIHByb3ZpZGVkIGJ5IG90aGVyIHJlY2lwZXMgb24KKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYW4gYXBwbGljYXRpb24gbGlua2luZyB0byBhIGNvbW1vbiBsaWJyYXJ5IG5lZWRzCisgICAgICAgICAgICAgICAgYWNjZXNzIHRvIHRoZSBsaWJyYXJ5IGl0c2VsZiBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVycy4KKyAgICAgICAgICAgICAgICBUaGUgd2F5IHRoaXMgYWNjZXNzIGlzIGFjY29tcGxpc2hlZCB3aXRoaW4gdGhlIGV4dGVuc2libGUgU0RLIGlzCisgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICBPbmUgc3lzcm9vdCBleGlzdHMgcGVyICJtYWNoaW5lIiBmb3Igd2hpY2ggdGhlIFNESyBpcyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICBJbiBwcmFjdGljYWwgdGVybXMsIHRoaXMgbWVhbnMgYSBzeXNyb290IGV4aXN0cyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgIG1hY2hpbmUsIGFuZCBhIHN5c3Jvb3QgZXhpc3RzIGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVjaXBlcyBzaG91bGQgbmV2ZXIgd3JpdGUgZmlsZXMgZGlyZWN0bHkgaW50byB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICBJbnN0ZWFkLCBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkIGludG8gc3RhbmRhcmQgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEEgc3Vic2V0IG9mIHRoZXNlIGZpbGVzIGF1dG9tYXRpY2FsbHkgZ28gaW50byB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGxpbWl0YXRpb24gaXMgdGhhdCBhbG1vc3QgYWxsIGZpbGVzIHRoYXQgZ28KKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBzeXNyb290IGFyZSBjYXRhbG9nZWQgaW4gbWFuaWZlc3RzIGluIG9yZGVyIHRvIGVuc3VyZQorICAgICAgICAgICAgICAgIHRoZXkgY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBhIHJlY2lwZSBpcyBtb2RpZmllZCBvciByZW1vdmVkLgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBzeXNyb290IGlzIGFibGUgdG8gcmVtYWluIGZyZWUgZnJvbSBzdGFsZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZGstcGFja2FnaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYWNrYWdpbmcgaXMgbm90IGFsd2F5cyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIGV4dGVuc2libGUgU0RLLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBleGFtaW5lIGhvdyBidWlsZCBvdXRwdXQgZ2V0cyBpbnRvIHRoZSBmaW5hbCBpbWFnZQorICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQgZGV2aWNlLCBpdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UgYXJlIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZgorICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFuZCBub3QgcmVjaXBlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLCBmaWxlcyBpbnN0YWxsZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIGFyZSBzcGxpdCBpbnRvIG9uZSBtYWluIHBhY2thZ2UsIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgbmFtZWQKKyAgICAgICAgICAgICAgICB0aGUgc2FtZSBhcyB0aGUgcmVjaXBlLCBhbmQgc2V2ZXJhbCBvdGhlciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBUaGlzIHNlcGFyYXRpb24gaXMgZG9uZSBiZWNhdXNlIG5vdCBhbGwgb2YgdGhvc2UgaW5zdGFsbGVkIGZpbGVzCisgICAgICAgICAgICAgICAgYXJlIGFsd2F5cyB1c2VmdWwgaW4gZXZlcnkgaW1hZ2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBwcm9iYWJseSBkbyBub3QgbmVlZCBhbnkgb2YgdGhlIGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBwcm9kdWN0aW9uIGltYWdlLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgZm9yIGVhY2ggcmVjaXBlIHRoZSBkb2N1bWVudGF0aW9uIGZpbGVzIGFyZSBzZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICBpbnRvIGEgPGZpbGVuYW1lPi1kb2M8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIFJlY2lwZXMgdGhhdCBwYWNrYWdlIHNvZnR3YXJlIHRoYXQgaGFzIG9wdGlvbmFsIG1vZHVsZXMgb3IKKyAgICAgICAgICAgICAgICBwbHVnaW5zIG1pZ2h0IGRvIGFkZGl0aW9uYWwgcGFja2FnZSBzcGxpdHRpbmcgYXMgd2VsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgYnVpbGRpbmcgYSByZWNpcGUgeW91IGNhbiBzZWUgd2hlcmUgZmlsZXMgaGF2ZSBnb25lIGJ5CisgICAgICAgICAgICAgICAgbG9va2luZyBpbiB0aGUgPGZpbGVuYW1lPm9lLXdvcmtkaXIvcGFja2FnZXMtc3BsaXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggY29udGFpbnMgYSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggcGFja2FnZS4KKyAgICAgICAgICAgICAgICBBcGFydCBmcm9tIHNvbWUgYWR2YW5jZWQgY2FzZXMsIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBjb250cm9scyBzcGxpdHRpbmcuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGxpc3RzIGFsbCBvZiB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlcyB0byBiZSBwcm9kdWNlZCwgd2hpbGUgdGhlIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgc3BlY2lmaWVzIHdoaWNoIGZpbGVzIHRvIGluY2x1ZGUgaW4gZWFjaCBwYWNrYWdlLAorICAgICAgICAgICAgICAgIHVzaW5nIGFuIG92ZXJyaWRlIHRvIHNwZWNpZnkgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+IHNwZWNpZmllcyB0aGUgZmlsZXMKKyAgICAgICAgICAgICAgICB0byBnbyBpbnRvIHRoZSBtYWluIHBhY2thZ2UgKGkuZS4gdGhlIG1haW4gcGFja2FnZSBpcyBuYW1lZCB0aGUKKyAgICAgICAgICAgICAgICBzYW1lIGFzIHRoZSByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZXZhbHVhdGVzIHRvIHRoZSByZWNpcGUgbmFtZSkuCisgICAgICAgICAgICAgICAgVGhlIG9yZGVyIG9mIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiB2YWx1ZSBpcyBzaWduaWZpY2FudC4KKyAgICAgICAgICAgICAgICBGb3IgZWFjaCBpbnN0YWxsZWQgZmlsZSwgdGhlIGZpcnN0IHBhY2thZ2Ugd2hvc2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YWx1ZSBtYXRjaGVzIHRoZSBmaWxlIGlzIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgaW50byB3aGljaCB0aGUgZmlsZSBnb2VzLgorICAgICAgICAgICAgICAgIERlZmF1bHRzIGV4aXN0IGZvciBib3RoIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbWlnaHQgZmluZCB5b3UgZG8gbm90IGV2ZW4gbmVlZCB0byBzZXQgdGhlc2UKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaW4geW91ciByZWNpcGUgdW5sZXNzIHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgYnVpbGRpbmcgaW5zdGFsbHMgZmlsZXMgaW50byBub24tc3RhbmRhcmQgbG9jYXRpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Nkay1yZXN0b3JpbmctdGhlLXRhcmdldC1kZXZpY2UtdG8taXRzLW9yaWdpbmFsLXN0YXRlJz4KKyAgICAgICAgPHRpdGxlPlJlc3RvcmluZyB0aGUgVGFyZ2V0IERldmljZSB0byBpdHMgT3JpZ2luYWwgU3RhdGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb21tYW5kIHRvIHdyaXRlIGEgcmVjaXBlJ3MgYnVpbGQgb3V0cHV0IHRvIHRoZSB0YXJnZXQsIGFuZAorICAgICAgICAgICAgeW91IGFyZSB3b3JraW5nIG9uIGFuIGV4aXN0aW5nIGNvbXBvbmVudCBvZiB0aGUgc3lzdGVtLCB0aGVuIHlvdQorICAgICAgICAgICAgbWlnaHQgZmluZCB5b3Vyc2VsZiBpbiBhIHNpdHVhdGlvbiB3aGVyZSB5b3UgbmVlZCB0byByZXN0b3JlIHRoZQorICAgICAgICAgICAgb3JpZ2luYWwgZmlsZXMgdGhhdCBleGlzdGVkIHByaW9yIHRvIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICBiYWNrcyB1cCBhbnkgZmlsZXMgaXQgb3ZlcndyaXRlcywgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1bmRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiB0byByZXN0b3JlIHRob3NlIGZpbGVzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIGFueSBvdGhlciBmaWxlcyB0aGUgcmVjaXBlIGRlcGxveWVkLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IGxpZ2h0dHBkIHJvb3RAMTkyLjE2OC43LjIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGRlcGxveWVkIG11bHRpcGxlIGFwcGxpY2F0aW9ucywgeW91IGNhbiByZW1vdmUgdGhlbQorICAgICAgICAgICAgYWxsIGF0IG9uY2UgdGh1cyByZXN0b3JpbmcgdGhlIHRhcmdldCBkZXZpY2UgYmFjayB0byBpdHMKKyAgICAgICAgICAgIG9yaWdpbmFsIHN0YXRlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IC1hIHJvb3RAMTkyLjE2OC43LjIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGRlcGxveWVkIHRvIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyBhbnkKKyAgICAgICAgICAgIGJhY2tlZCB1cCBmaWxlcyBhcmUgc3RvcmVkIG9uIHRoZSB0YXJnZXQgaXRzZWxmLgorICAgICAgICAgICAgVGhpcyBzdG9yYWdlIG9mIGNvdXJzZSByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgc3BhY2UKKyAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZCBkbyBub3QKKyAgICAgICAgICAgICAgICBjdXJyZW50bHkgaW50ZXJhY3Qgd2l0aCBhbnkgcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBvbiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgZGV2aWNlIChlLmcuIFJQTSBvciBPUEtHKS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgbm90IGludGVybWluZ2xlIG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gYW5kIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgbWFuYWdlciBvcGVyYXRpb25zIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGNvdWxkIHJlc3VsdCBpbiBhIGNvbmZsaWN0aW5nIHNldCBvZiBmaWxlcy4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KLTwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9J3Nkay13b3JraW5nLXdpdGgtcmVjaXBlcyc+Ci0gICAgPHRpdGxlPldvcmtpbmcgV2l0aCBSZWNpcGVzPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBXaGVuIGJ1aWxkaW5nIGEgcmVjaXBlIHdpdGggPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiB0aGUKLSAgICAgICAgdHlwaWNhbCBidWlsZCBwcm9ncmVzc2lvbiBpcyBhcyBmb2xsb3dzOgotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgRmV0Y2ggdGhlIHNvdXJjZQotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIFVucGFjayB0aGUgc291cmNlCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgQ29uZmlndXJlIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICBDb21waWxpbmcgdGhlIHNvdXJjZQotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIGJ1aWxkIG91dHB1dAotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIFBhY2thZ2UgdGhlIGluc3RhbGxlZCBvdXRwdXQKLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgRm9yIHJlY2lwZXMgaW4gdGhlIHdvcmtzcGFjZSwgZmV0Y2hpbmcgYW5kIHVucGFja2luZyBpcyBkaXNhYmxlZAotICAgICAgICBhcyB0aGUgc291cmNlIHRyZWUgaGFzIGFscmVhZHkgYmVlbiBwcmVwYXJlZCBhbmQgaXMgcGVyc2lzdGVudC4KLSAgICAgICAgRWFjaCBvZiB0aGVzZSBidWlsZCBzdGVwcyBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24sIHVzdWFsbHkgd2l0aCBhCi0gICAgICAgICJkb18iIHByZWZpeC4KLSAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB0eXBpY2FsbHkgc2hlbGwgc2NyaXB0cyBidXQgY2FuIGluc3RlYWQgYmUgd3JpdHRlbgotICAgICAgICBpbiBQeXRob24uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBsb29rIGF0IHRoZSBjb250ZW50cyBvZiBhIHJlY2lwZSwgeW91IHdpbGwgc2VlIHRoYXQgdGhlCi0gICAgICAgIHJlY2lwZSBkb2VzIG5vdCBpbmNsdWRlIGNvbXBsZXRlIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgdGhlCi0gICAgICAgIHNvZnR3YXJlLgotICAgICAgICBJbnN0ZWFkLCBjb21tb24gZnVuY3Rpb25hbGl0eSBpcyBlbmNhcHN1bGF0ZWQgaW4gY2xhc3NlcyBpbmhlcml0ZWQKLSAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUsIGxlYXZpbmcgdGhlIHJlY2lwZQotICAgICAgICB0byBkZXNjcmliZSBqdXN0IHRoZSB0aGluZ3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHNvZnR3YXJlIHRvIGJlCi0gICAgICAgIGJ1aWx0LgotICAgICAgICBBIDx1bGluayB1cmw9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICBjbGFzcyBleGlzdHMgdGhhdCBpcyBpbXBsaWNpdGx5IGluaGVyaXRlZCBieSBhbGwgcmVjaXBlcyBhbmQgcHJvdmlkZXMKLSAgICAgICAgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCBtb3N0IHR5cGljYWwgcmVjaXBlcyBuZWVkLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyBpbmZvcm1hdGlvbiB1c2VmdWwgd2hlbgotICAgICAgICB3b3JraW5nIHdpdGggcmVjaXBlcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2RrLWZpbmRpbmctbG9ncy1hbmQtd29yay1maWxlcyc+Ci0gICAgICAgIDx0aXRsZT5GaW5kaW5nIExvZ3MgYW5kIFdvcmsgRmlsZXM8L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSdzZGstaW5zdGFsbGluZy1hZGRpdGlvbmFsLWl0ZW1zLWludG8tdGhlLWV4dGVuc2libGUtc2RrJz4KKyAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgQWRkaXRpb25hbCBJdGVtcyBJbnRvIHRoZSBFeHRlbnNpYmxlIFNESzwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIHlvdSBhcmUgZGVidWdnaW5nIGEgcmVjaXBlIHRoYXQgeW91IHByZXZpb3VzbHkgY3JlYXRlZCB1c2luZwotICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gb3Igd2hvc2Ugc291cmNlIHlvdSBhcmUgbW9kaWZ5aW5nCi0gICAgICAgICAgICBieSB1c2luZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gY29tbWFuZCwgYWZ0ZXIKLSAgICAgICAgICAgIHRoZSBmaXJzdCBydW4gb2YgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiwgeW91IHdpbGwKLSAgICAgICAgICAgIGZpbmQgc29tZSBzeW1ib2xpYyBsaW5rcyBjcmVhdGVkIHdpdGhpbiB0aGUgc291cmNlIHRyZWU6Ci0gICAgICAgICAgICA8ZmlsZW5hbWU+b2UtbG9nczwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBpbgotICAgICAgICAgICAgd2hpY2ggbG9nIGZpbGVzIGFuZCBydW4gc2NyaXB0cyBmb3IgZWFjaCBidWlsZCBzdGVwIGFyZSBjcmVhdGVkCi0gICAgICAgICAgICBhbmQgPGZpbGVuYW1lPm9lLXdvcmtkaXI8L2ZpbGVuYW1lPiwgd2hpY2ggcG9pbnRzIHRvIHRoZSB0ZW1wb3JhcnkKLSAgICAgICAgICAgIHdvcmsgYXJlYSBmb3IgdGhlIHJlY2lwZS4KLSAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZXNlIGxpbmtzIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uIG9uIHdoYXQgaXMKLSAgICAgICAgICAgIGhhcHBlbmluZyBhdCBlYWNoIGJ1aWxkIHN0ZXAuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZXNlIGxvY2F0aW9ucyB1bmRlciA8ZmlsZW5hbWU+b2Utd29ya2RpcjwvZmlsZW5hbWU+IGFyZQotICAgICAgICAgICAgcGFydGljdWxhcmx5IHVzZWZ1bDoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbWFnZS88L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgYWxsIG9mIHRoZSBmaWxlcyBpbnN0YWxsZWQgYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7cmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICBzdGFnZS4KLSAgICAgICAgICAgICAgICAgICAgV2l0aGluIGEgcmVjaXBlLCB0aGlzIGRpcmVjdG9yeSBpcyByZWZlcnJlZCB0byBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnN5c3Jvb3QtZGVzdGRpci88L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgYSBzdWJzZXQgb2YgZmlsZXMgaW5zdGFsbGVkIHdpdGhpbgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRoYXQgaGF2ZSBiZWVuIHB1dCBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICBzaGFyZWQgc3lzcm9vdC4KLSAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1zaGFyaW5nLWZpbGVzLWJldHdlZW4tcmVjaXBlcyc+U2hhcmluZyBGaWxlcyBCZXR3ZWVuIFJlY2lwZXM8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhY2thZ2VzLXNwbGl0LzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBDb250YWlucyBzdWJkaXJlY3RvcmllcyBmb3IgZWFjaCBwYWNrYWdlIHByb2R1Y2VkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstcGFja2FnaW5nJz5QYWNrYWdpbmc8L2xpbms+IiBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J3Nkay1zZXR0aW5nLWNvbmZpZ3VyZS1hcmd1bWVudHMnPgotICAgICAgICA8dGl0bGU+U2V0dGluZyBDb25maWd1cmUgQXJndW1lbnRzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIElmIHRoZSBzb2Z0d2FyZSB5b3VyIHJlY2lwZSBpcyBidWlsZGluZyB1c2VzIEdOVSBhdXRvY29uZiwKLSAgICAgICAgICAgIHRoZW4gYSBmaXhlZCBzZXQgb2YgYXJndW1lbnRzIGlzIHBhc3NlZCB0byBpdCB0byBlbmFibGUKLSAgICAgICAgICAgIGNyb3NzLWNvbXBpbGF0aW9uIHBsdXMgYW55IGV4dHJhcyBzcGVjaWZpZWQgYnkKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICBzZXQgd2l0aGluIHRoZSByZWNpcGUuCi0gICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBwYXNzIGFkZGl0aW9uYWwgb3B0aW9ucywgYWRkIHRoZW0gdG8KLSAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIE90aGVyIHN1cHBvcnRlZCBidWlsZCB0b29scyBoYXZlIHNpbWlsYXIgdmFyaWFibGVzCi0gICAgICAgICAgICAoZS5nLgotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FQ01BS0UnPjxmaWxlbmFtZT5FWFRSQV9PRUNNQUtFPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgZm9yIENNYWtlLAotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FU0NPTlMnPjxmaWxlbmFtZT5FWFRSQV9PRVNDT05TPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgZm9yIFNjb25zLCBhbmQgc28gZm9ydGgpLgotICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyBhbnl0aGluZyBvbiB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPgotICAgICAgICAgICAgY29tbWFuZCBsaW5lLCB5b3UgY2FuIHVzZSA8ZmlsZW5hbWU+RVhUUkFfT0VNQUtFPC9maWxlbmFtZT4gdG8gZG8KLSAgICAgICAgICAgIHNvLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgY29uZmlndXJlLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICB0byBoZWxwIHlvdSBzZXQgdGhlIGFyZ3VtZW50cyBsaXN0ZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaC4KLSAgICAgICAgICAgIFRoZSBjb21tYW5kIGRldGVybWluZXMgdGhlIGV4YWN0IG9wdGlvbnMgYmVpbmcgcGFzc2VkLCBhbmQgc2hvd3MKLSAgICAgICAgICAgIHRoZW0gdG8geW91IGFsb25nIHdpdGggYW55IGN1c3RvbSBhcmd1bWVudHMgc3BlY2lmaWVkIHRocm91Z2gKLSAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIElmIGFwcGxpY2FibGUsIHRoZSBjb21tYW5kIGFsc28gc2hvd3MgeW91IHRoZSBvdXRwdXQgb2YgdGhlCi0gICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0J3MgIiZkYXNoOyZkYXNoO2hlbHAiIG9wdGlvbiBhcyBhIHJlZmVyZW5jZS4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdzZGstc2hhcmluZy1maWxlcy1iZXR3ZWVuLXJlY2lwZXMnPgotICAgICAgICA8dGl0bGU+U2hhcmluZyBGaWxlcyBCZXR3ZWVuIFJlY2lwZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgUmVjaXBlcyBvZnRlbiBuZWVkIHRvIHVzZSBmaWxlcyBwcm92aWRlZCBieSBvdGhlciByZWNpcGVzIG9uCi0gICAgICAgICAgICB0aGUgYnVpbGQgaG9zdC4KLSAgICAgICAgICAgIEZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbiBsaW5raW5nIHRvIGEgY29tbW9uIGxpYnJhcnkgbmVlZHMKLSAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgbGlicmFyeSBpdHNlbGYgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlcnMuCi0gICAgICAgICAgICBUaGUgd2F5IHRoaXMgYWNjZXNzIGlzIGFjY29tcGxpc2hlZCB3aXRoaW4gdGhlIGV4dGVuc2libGUgU0RLIGlzCi0gICAgICAgICAgICB0aHJvdWdoIHRoZSBzeXNyb290LgotICAgICAgICAgICAgT25lIHN5c3Jvb3QgZXhpc3RzIHBlciAibWFjaGluZSIgZm9yIHdoaWNoIHRoZSBTREsgaXMgYmVpbmcgYnVpbHQuCi0gICAgICAgICAgICBJbiBwcmFjdGljYWwgdGVybXMsIHRoaXMgbWVhbnMgYSBzeXNyb290IGV4aXN0cyBmb3IgdGhlIHRhcmdldAotICAgICAgICAgICAgbWFjaGluZSwgYW5kIGEgc3lzcm9vdCBleGlzdHMgZm9yIHRoZSBidWlsZCBob3N0LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBSZWNpcGVzIHNob3VsZCBuZXZlciB3cml0ZSBmaWxlcyBkaXJlY3RseSBpbnRvIHRoZSBzeXNyb290LgotICAgICAgICAgICAgSW5zdGVhZCwgZmlsZXMgc2hvdWxkIGJlIGluc3RhbGxlZCBpbnRvIHN0YW5kYXJkIGxvY2F0aW9ucwotICAgICAgICAgICAgZHVyaW5nIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgdGFzayB3aXRoaW4gdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICAgICBBIHN1YnNldCBvZiB0aGVzZSBmaWxlcyBhdXRvbWF0aWNhbGx5IGdvIGludG8gdGhlIHN5c3Jvb3QuCi0gICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGxpbWl0YXRpb24gaXMgdGhhdCBhbG1vc3QgYWxsIGZpbGVzIHRoYXQgZ28KLSAgICAgICAgICAgIGludG8gdGhlIHN5c3Jvb3QgYXJlIGNhdGFsb2dlZCBpbiBtYW5pZmVzdHMgaW4gb3JkZXIgdG8gZW5zdXJlCi0gICAgICAgICAgICB0aGV5IGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gYSByZWNpcGUgaXMgbW9kaWZpZWQgb3IgcmVtb3ZlZC4KLSAgICAgICAgICAgIFRodXMsIHRoZSBzeXNyb290IGlzIGFibGUgdG8gcmVtYWluIGZyZWUgZnJvbSBzdGFsZSBmaWxlcy4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdzZGstcGFja2FnaW5nJz4KLSAgICAgICAgPHRpdGxlPlBhY2thZ2luZzwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBQYWNrYWdpbmcgaXMgbm90IGFsd2F5cyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgd2l0aGluIHRoZQotICAgICAgICAgICAgZXh0ZW5zaWJsZSBTREsuCi0gICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgZXhhbWluZSBob3cgYnVpbGQgb3V0cHV0IGdldHMgaW50byB0aGUgZmluYWwgaW1hZ2UKLSAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQgZGV2aWNlLCBpdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBwYWNrYWdpbmcKLSAgICAgICAgICAgIGJlY2F1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbWFnZSBhcmUgZXhwcmVzc2VkIGluIHRlcm1zIG9mCi0gICAgICAgICAgICBwYWNrYWdlcyBhbmQgbm90IHJlY2lwZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIER1cmluZyB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIHRhc2ssIGZpbGVzIGluc3RhbGxlZCBkdXJpbmcgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICB0YXNrIGFyZSBzcGxpdCBpbnRvIG9uZSBtYWluIHBhY2thZ2UsIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgbmFtZWQKLSAgICAgICAgICAgIHRoZSBzYW1lIGFzIHRoZSByZWNpcGUsIGFuZCBzZXZlcmFsIG90aGVyIHBhY2thZ2VzLgotICAgICAgICAgICAgVGhpcyBzZXBhcmF0aW9uIGlzIGRvbmUgYmVjYXVzZSBub3QgYWxsIG9mIHRob3NlIGluc3RhbGxlZCBmaWxlcwotICAgICAgICAgICAgYXJlIGFsd2F5cyB1c2VmdWwgaW4gZXZlcnkgaW1hZ2UuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IHByb2JhYmx5IGRvIG5vdCBuZWVkIGFueSBvZiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgcHJvZHVjdGlvbiBpbWFnZS4KLSAgICAgICAgICAgIENvbnNlcXVlbnRseSwgZm9yIGVhY2ggcmVjaXBlIHRoZSBkb2N1bWVudGF0aW9uIGZpbGVzIGFyZSBzZXBhcmF0ZWQKLSAgICAgICAgICAgIGludG8gYSA8ZmlsZW5hbWU+LWRvYzwvZmlsZW5hbWU+IHBhY2thZ2UuCi0gICAgICAgICAgICBSZWNpcGVzIHRoYXQgcGFja2FnZSBzb2Z0d2FyZSB0aGF0IGhhcyBvcHRpb25hbCBtb2R1bGVzIG9yCi0gICAgICAgICAgICBwbHVnaW5zIG1pZ2h0IGRvIGFkZGl0aW9uYWwgcGFja2FnZSBzcGxpdHRpbmcgYXMgd2VsbC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQWZ0ZXIgYnVpbGRpbmcgYSByZWNpcGUgeW91IGNhbiBzZWUgd2hlcmUgZmlsZXMgaGF2ZSBnb25lIGJ5Ci0gICAgICAgICAgICBsb29raW5nIGluIHRoZSA8ZmlsZW5hbWU+b2Utd29ya2Rpci9wYWNrYWdlcy1zcGxpdDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGNvbnRhaW5zIGEgc3ViZGlyZWN0b3J5IGZvciBlYWNoIHBhY2thZ2UuCi0gICAgICAgICAgICBBcGFydCBmcm9tIHNvbWUgYWR2YW5jZWQgY2FzZXMsIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICBhbmQKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgdmFyaWFibGVzIGNvbnRyb2xzIHNwbGl0dGluZy4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBsaXN0cyBhbGwgb2YgdGhlCi0gICAgICAgICAgICBwYWNrYWdlcyB0byBiZSBwcm9kdWNlZCwgd2hpbGUgdGhlIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICB2YXJpYWJsZSBzcGVjaWZpZXMgd2hpY2ggZmlsZXMgdG8gaW5jbHVkZSBpbiBlYWNoIHBhY2thZ2UsCi0gICAgICAgICAgICB1c2luZyBhbiBvdmVycmlkZSB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+IHNwZWNpZmllcyB0aGUgZmlsZXMKLSAgICAgICAgICAgIHRvIGdvIGludG8gdGhlIG1haW4gcGFja2FnZSAoaS5lLiB0aGUgbWFpbiBwYWNrYWdlIGlzIG5hbWVkIHRoZQotICAgICAgICAgICAgc2FtZSBhcyB0aGUgcmVjaXBlIGFuZAotICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBldmFsdWF0ZXMgdG8gdGhlIHJlY2lwZSBuYW1lKS4KLSAgICAgICAgICAgIFRoZSBvcmRlciBvZiB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdmFsdWUgaXMgc2lnbmlmaWNhbnQuCi0gICAgICAgICAgICBGb3IgZWFjaCBpbnN0YWxsZWQgZmlsZSwgdGhlIGZpcnN0IHBhY2thZ2Ugd2hvc2UKLSAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhbHVlIG1hdGNoZXMgdGhlIGZpbGUgaXMgdGhlIHBhY2thZ2UKLSAgICAgICAgICAgIGludG8gd2hpY2ggdGhlIGZpbGUgZ29lcy4KLSAgICAgICAgICAgIERlZmF1bHRzIGV4aXN0IGZvciBib3RoIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlcy4KLSAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG1pZ2h0IGZpbmQgeW91IGRvIG5vdCBldmVuIG5lZWQgdG8gc2V0IHRoZXNlCi0gICAgICAgICAgICB2YXJpYWJsZXMgaW4geW91ciByZWNpcGUgdW5sZXNzIHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzCi0gICAgICAgICAgICBidWlsZGluZyBpbnN0YWxscyBmaWxlcyBpbnRvIG5vbi1zdGFuZGFyZCBsb2NhdGlvbnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSdzZGstcmVzdG9yaW5nLXRoZS10YXJnZXQtZGV2aWNlLXRvLWl0cy1vcmlnaW5hbC1zdGF0ZSc+Ci0gICAgPHRpdGxlPlJlc3RvcmluZyB0aGUgVGFyZ2V0IERldmljZSB0byBpdHMgT3JpZ2luYWwgU3RhdGU8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPgotICAgICAgICBjb21tYW5kIHRvIHdyaXRlIGEgcmVjaXBlJ3MgYnVpbGQgb3V0cHV0IHRvIHRoZSB0YXJnZXQsIGFuZAotICAgICAgICB5b3UgYXJlIHdvcmtpbmcgb24gYW4gZXhpc3RpbmcgY29tcG9uZW50IG9mIHRoZSBzeXN0ZW0sIHRoZW4geW91Ci0gICAgICAgIG1pZ2h0IGZpbmQgeW91cnNlbGYgaW4gYSBzaXR1YXRpb24gd2hlcmUgeW91IG5lZWQgdG8gcmVzdG9yZSB0aGUKLSAgICAgICAgb3JpZ2luYWwgZmlsZXMgdGhhdCBleGlzdGVkIHByaW9yIHRvIHJ1bm5pbmcgdGhlCi0gICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICBiYWNrcyB1cCBhbnkgZmlsZXMgaXQgb3ZlcndyaXRlcywgeW91IGNhbiB1c2UgdGhlCi0gICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IHRvIHJlc3RvcmUgdGhvc2UgZmlsZXMKLSAgICAgICAgYW5kIHJlbW92ZSBhbnkgb3RoZXIgZmlsZXMgdGhlIHJlY2lwZSBkZXBsb3llZC4KLSAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCB1bmRlcGxveS10YXJnZXQgbGlnaHR0cGQgcm9vdEAxOTIuMTY4LjcuMgotICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIElmIHlvdSBoYXZlIGRlcGxveWVkIG11bHRpcGxlIGFwcGxpY2F0aW9ucywgeW91IGNhbiByZW1vdmUgdGhlbQotICAgICAgICBhbGwgYXQgb25jZSB0aHVzIHJlc3RvcmluZyB0aGUgdGFyZ2V0IGRldmljZSBiYWNrIHRvIGl0cwotICAgICAgICBvcmlnaW5hbCBzdGF0ZToKLSAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IC1hIHJvb3RAMTkyLjE2OC43LjIKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBkZXBsb3llZCB0byB0aGUgdGFyZ2V0IGFzIHdlbGwgYXMgYW55Ci0gICAgICAgIGJhY2tlZCB1cCBmaWxlcyBhcmUgc3RvcmVkIG9uIHRoZSB0YXJnZXQgaXRzZWxmLgotICAgICAgICBUaGlzIHN0b3JhZ2Ugb2YgY291cnNlIHJlcXVpcmVzIHNvbWUgYWRkaXRpb25hbCBzcGFjZQotICAgICAgICBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUuCi0gICAgICAgIDxub3RlPgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgZG8gbm90Ci0gICAgICAgICAgICBjdXJyZW50bHkgaW50ZXJhY3Qgd2l0aCBhbnkgcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBvbiB0aGUKLSAgICAgICAgICAgIHRhcmdldCBkZXZpY2UgKGUuZy4gUlBNIG9yIE9QS0cpLgotICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkIG5vdCBpbnRlcm1pbmdsZSBvcGVyYXRpb25zCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gYW5kIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICBtYW5hZ2VyIG9wZXJhdGlvbnMgb24gdGhlIHRhcmdldCBkZXZpY2UuCi0gICAgICAgICAgICBEb2luZyBzbyBjb3VsZCByZXN1bHQgaW4gYSBjb25mbGljdGluZyBzZXQgb2YgZmlsZXMuCi0gICAgICAgIDwvbm90ZT4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSdzZGstaW5zdGFsbGluZy1hZGRpdGlvbmFsLWl0ZW1zLWludG8tdGhlLWV4dGVuc2libGUtc2RrJz4KLSAgICA8dGl0bGU+SW5zdGFsbGluZyBBZGRpdGlvbmFsIEl0ZW1zIEludG8gdGhlIEV4dGVuc2libGUgU0RLPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgZXh0ZW5zaWJsZSBTREsgdHlwaWNhbGx5IG9ubHkgY29tZXMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiB0b29scwotICAgICAgICBhbmQgbGlicmFyaWVzIG91dCBvZiB0aGUgYm94LgotICAgICAgICBJZiB5b3UgaGF2ZSBhIG1pbmltYWwgU0RLLCB0aGVuIGl0IHN0YXJ0cyBtb3N0bHkgZW1wdHkgYW5kIGlzCi0gICAgICAgIHBvcHVsYXRlZCBvbi1kZW1hbmQuCi0gICAgICAgIEhvd2V2ZXIsIHNvbWV0aW1lcyB5b3Ugd2lsbCBuZWVkIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBleHRyYSBpdGVtcwotICAgICAgICBpbnRvIHRoZSBTREsuCi0gICAgICAgIElmIHlvdSBuZWVkIHRoZXNlIGV4dHJhIGl0ZW1zLCB5b3UgY2FuIGZpcnN0IHNlYXJjaCBmb3IgdGhlIGl0ZW1zCi0gICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzZWFyY2g8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgbmVlZCB0byBsaW5rIHRvIGxpYkdMIGJ1dCB5b3UgYXJlIG5vdCBzdXJlCi0gICAgICAgIHdoaWNoIHJlY2lwZSBwcm92aWRlcyBpdC4KLSAgICAgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGZpbmQgb3V0OgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICBUaGUgZXh0ZW5zaWJsZSBTREsgdHlwaWNhbGx5IG9ubHkgY29tZXMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiB0b29scworICAgICAgICAgICAgYW5kIGxpYnJhcmllcyBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgbWluaW1hbCBTREssIHRoZW4gaXQgc3RhcnRzIG1vc3RseSBlbXB0eSBhbmQgaXMKKyAgICAgICAgICAgIHBvcHVsYXRlZCBvbi1kZW1hbmQuCisgICAgICAgICAgICBIb3dldmVyLCBzb21ldGltZXMgeW91IHdpbGwgbmVlZCB0byBleHBsaWNpdGx5IGluc3RhbGwgZXh0cmEgaXRlbXMKKyAgICAgICAgICAgIGludG8gdGhlIFNESy4KKyAgICAgICAgICAgIElmIHlvdSBuZWVkIHRoZXNlIGV4dHJhIGl0ZW1zLCB5b3UgY2FuIGZpcnN0IHNlYXJjaCBmb3IgdGhlIGl0ZW1zCisgICAgICAgICAgICB1c2luZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgc2VhcmNoPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIHRvIGxpbmsgdG8gbGliR0wgYnV0IHlvdSBhcmUgbm90IHN1cmUKKyAgICAgICAgICAgIHdoaWNoIHJlY2lwZSBwcm92aWRlcyBpdC4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBmaW5kIG91dDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBkZXZ0b29sIHNlYXJjaCBsaWJHTAogICAgICBtZXNhICAgICAgICAgICAgICAgICAgQSBmcmVlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPcGVuR0wgQVBJCi0gICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgT25jZSB5b3Uga25vdyB0aGUgcmVjaXBlIChpLmUuIDxmaWxlbmFtZT5tZXNhPC9maWxlbmFtZT4gaW4gdGhpcwotICAgICAgICBleGFtcGxlKSwgeW91IGNhbiBpbnN0YWxsIGl0OgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHlvdSBrbm93IHRoZSByZWNpcGUgKGkuZS4gPGZpbGVuYW1lPm1lc2E8L2ZpbGVuYW1lPiBpbiB0aGlzCisgICAgICAgICAgICBleGFtcGxlKSwgeW91IGNhbiBpbnN0YWxsIGl0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGRldnRvb2wgc2RrLWluc3RhbGwgbWVzYQotICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBzZGstaW5zdGFsbDwvZmlsZW5hbWU+IGFzc3VtZXMgdGhlCi0gICAgICAgIGl0ZW0gaXMgYXZhaWxhYmxlIGluIHByZS1idWlsdCBmb3JtIGZyb20geW91ciBTREsgcHJvdmlkZXIuCi0gICAgICAgIElmIHRoZSBpdGVtIGlzIG5vdCBhdmFpbGFibGUgYW5kIGl0IGlzIGFjY2VwdGFibGUgdG8gYnVpbGQgdGhlIGl0ZW0KLSAgICAgICAgZnJvbSBzb3VyY2UsIHlvdSBjYW4gYWRkIHRoZSAiLXMiIG9wdGlvbiBhcyBmb2xsb3dzOgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgc2RrLWluc3RhbGw8L2ZpbGVuYW1lPiBhc3N1bWVzIHRoZQorICAgICAgICAgICAgaXRlbSBpcyBhdmFpbGFibGUgaW4gcHJlLWJ1aWx0IGZvcm0gZnJvbSB5b3VyIFNESyBwcm92aWRlci4KKyAgICAgICAgICAgIElmIHRoZSBpdGVtIGlzIG5vdCBhdmFpbGFibGUgYW5kIGl0IGlzIGFjY2VwdGFibGUgdG8gYnVpbGQgdGhlIGl0ZW0KKyAgICAgICAgICAgIGZyb20gc291cmNlLCB5b3UgY2FuIGFkZCB0aGUgIi1zIiBvcHRpb24gYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBkZXZ0b29sIHNkay1pbnN0YWxsIC1zIG1lc2EKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBidWlsZGluZyB0aGUgaXRlbSBmcm9tIHNvdXJjZSB0YWtlcwotICAgICAgICBzaWduaWZpY2FudGx5IGxvbmdlciB0aGFuIGluc3RhbGxpbmcgdGhlIHByZS1idWlsdCBhcnRpZmFjdC4KLSAgICAgICAgQWxzbywgaWYgbm8gcmVjaXBlIGV4aXN0cyBmb3IgdGhlIGl0ZW0geW91IHdhbnQgdG8gYWRkIHRvIHRoZSBTREssIHlvdQotICAgICAgICBtdXN0IGluc3RlYWQgYWRkIGl0IHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJ1aWxkaW5nIHRoZSBpdGVtIGZyb20gc291cmNlIHRha2VzCisgICAgICAgICAgICBzaWduaWZpY2FudGx5IGxvbmdlciB0aGFuIGluc3RhbGxpbmcgdGhlIHByZS1idWlsdCBhcnRpZmFjdC4KKyAgICAgICAgICAgIEFsc28sIGlmIG5vIHJlY2lwZSBleGlzdHMgZm9yIHRoZSBpdGVtIHlvdSB3YW50IHRvIGFkZCB0byB0aGUgU0RLLCB5b3UKKyAgICAgICAgICAgIG11c3QgaW5zdGVhZCBhZGQgaXQgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSdzZGstdXBkYXRpbmctdGhlLWV4dGVuc2libGUtc2RrJz4KLSAgICAgPHRpdGxlPlVwZGF0aW5nIHRoZSBFeHRlbnNpYmxlIFNESzwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J3Nkay11cGRhdGluZy10aGUtZXh0ZW5zaWJsZS1zZGsnPgorICAgICAgICA8dGl0bGU+VXBkYXRpbmcgdGhlIEV4dGVuc2libGUgU0RLPC90aXRsZT4KIAotICAgICA8cGFyYT4KLSAgICAgICAgIElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGFuIGV4dGVuc2libGUgU0RLIHRoYXQgZ2V0cyBvY2Nhc2lvbmFsbHkKLSAgICAgICAgIHVwZGF0ZWQgKGUuZy4gdHlwaWNhbGx5IHdoZW4gdGhhdCBTREsgaGFzIGJlZW4gcHJvdmlkZWQgdG8geW91IGJ5Ci0gICAgICAgICBhbm90aGVyIHBhcnR5KSwgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIG1hbnVhbGx5IHB1bGwgZG93biB0aG9zZQotICAgICAgICAgdXBkYXRlcyB0byB5b3VyIGluc3RhbGxlZCBTREsuCi0gICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhbiBleHRlbnNpYmxlIFNESyB0aGF0IGdldHMgb2NjYXNpb25hbGx5CisgICAgICAgICAgICB1cGRhdGVkIChlLmcuIHR5cGljYWxseSB3aGVuIHRoYXQgU0RLIGhhcyBiZWVuIHByb3ZpZGVkIHRvIHlvdSBieQorICAgICAgICAgICAgYW5vdGhlciBwYXJ0eSksIHRoZW4geW91IHdpbGwgbmVlZCB0byBtYW51YWxseSBwdWxsIGRvd24gdGhvc2UKKyAgICAgICAgICAgIHVwZGF0ZXMgdG8geW91ciBpbnN0YWxsZWQgU0RLLgorICAgICAgICA8L3BhcmE+CiAKLSAgICAgPHBhcmE+Ci0gICAgICAgICBUbyB1cGRhdGUgeW91ciBpbnN0YWxsZWQgU0RLLCBydW4gdGhlIGZvbGxvd2luZzoKLSAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyB1cGRhdGUgeW91ciBpbnN0YWxsZWQgU0RLLCBydW4gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBkZXZ0b29sIHNkay11cGRhdGUKLSAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgIFRoZSBwcmV2aW91cyBjb21tYW5kIGFzc3VtZXMgeW91ciBTREsgcHJvdmlkZXIgaGFzIHNldCB0aGUgZGVmYXVsdAotICAgICAgICAgdXBkYXRlIFVSTCBmb3IgeW91LgotICAgICAgICAgSWYgdGhhdCBVUkwgaGFzIG5vdCBiZWVuIHNldCwgeW91IG5lZWQgdG8gc3BlY2lmeSBpdCB5b3Vyc2VsZiBhcwotICAgICAgICAgZm9sbG93czoKLSAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBjb21tYW5kIGFzc3VtZXMgeW91ciBTREsgcHJvdmlkZXIgaGFzIHNldCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgdXBkYXRlIFVSTCBmb3IgeW91LgorICAgICAgICAgICAgSWYgdGhhdCBVUkwgaGFzIG5vdCBiZWVuIHNldCwgeW91IG5lZWQgdG8gc3BlY2lmeSBpdCB5b3Vyc2VsZiBhcworICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBkZXZ0b29sIHNkay11cGRhdGUgPHJlcGxhY2VhYmxlPnBhdGhfdG9fdXBkYXRlX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICBUaGUgVVJMIG5lZWRzIHRvIHBvaW50IHNwZWNpZmljYWxseSB0byBhIHB1Ymxpc2hlZCBTREsgYW5kIG5vdCBhbgotICAgICAgICAgICAgIFNESyBpbnN0YWxsZXIgdGhhdCB5b3Ugd291bGQgZG93bmxvYWQgYW5kIGluc3RhbGwuCi0gICAgICAgICA8L25vdGU+Ci0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIFVSTCBuZWVkcyB0byBwb2ludCBzcGVjaWZpY2FsbHkgdG8gYSBwdWJsaXNoZWQgU0RLIGFuZCBub3QgYW4KKyAgICAgICAgICAgICAgICBTREsgaW5zdGFsbGVyIHRoYXQgeW91IHdvdWxkIGRvd25sb2FkIGFuZCBpbnN0YWxsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0nc2RrLWNyZWF0aW5nLWEtZGVyaXZhdGl2ZS1zZGstd2l0aC1hZGRpdGlvbmFsLWNvbXBvbmVudHMnPgotICAgIDx0aXRsZT5DcmVhdGluZyBhIERlcml2YXRpdmUgU0RLIFdpdGggQWRkaXRpb25hbCBDb21wb25lbnRzPC90aXRsZT4KKyAgICA8c2VjdGlvbiBpZD0nc2RrLWNyZWF0aW5nLWEtZGVyaXZhdGl2ZS1zZGstd2l0aC1hZGRpdGlvbmFsLWNvbXBvbmVudHMnPgorICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBEZXJpdmF0aXZlIFNESyBXaXRoIEFkZGl0aW9uYWwgQ29tcG9uZW50czwvdGl0bGU+CiAKLSAgICA8cGFyYT4KLSAgICAgICAgWW91IG1pZ2h0IG5lZWQgdG8gcHJvZHVjZSBhbiBTREsgdGhhdCBjb250YWlucyB5b3VyIG93biBjdXN0b20KLSAgICAgICAgbGlicmFyaWVzIGZvciBzZW5kaW5nIHRvIGEgdGhpcmQgcGFydHkgKGUuZy4sIGlmIHlvdSBhcmUgYSB2ZW5kb3Igd2l0aAotICAgICAgICBjdXN0b21lcnMgbmVlZGluZyB0byBidWlsZCB0aGVpciBvd24gc29mdHdhcmUgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0pLgotICAgICAgICBJZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVuIHlvdSBjYW4gcHJvZHVjZSBhIGRlcml2YXRpdmUgU0RLIGJhc2VkIG9uCi0gICAgICAgIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIFNESyBmYWlybHkgZWFzaWx5LgotICAgICAgICBVc2UgdGhlc2Ugc3RlcHM6Ci0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiBuZWNlc3NhcnksIGluc3RhbGwgYW4gZXh0ZW5zaWJsZSBTREsgdGhhdAotICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZSBhcyBhIGJhc2UgZm9yIHlvdXIgZGVyaXZhdGl2ZSBTREsuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U291cmNlIHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgZm9yIHRoZSBTREsuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIHRoZSBleHRyYSBsaWJyYXJpZXMgb3Igb3RoZXIgY29tcG9uZW50cwotICAgICAgICAgICAgICAgIHlvdSB3YW50IGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1zZGs8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIFRoZSBhYm92ZSBwcm9jZWR1cmUgdGFrZXMgdGhlIHJlY2lwZXMgYWRkZWQgdG8gdGhlIHdvcmtzcGFjZSBhbmQKLSAgICAgICAgY29uc3RydWN0cyBhIG5ldyBTREsgaW5zdGFsbGVyIGNvbnRhaW5pbmcgdGhvc2UgcmVjaXBlcyBhbmQgdGhlCi0gICAgICAgIHJlc3VsdGluZyBiaW5hcnkgYXJ0aWZhY3RzLgotICAgICAgICBUaGUgcmVjaXBlcyBnbyBpbnRvIHRoZWlyIG93biBzZXBhcmF0ZSBsYXllciBpbiB0aGUgY29uc3RydWN0ZWQKLSAgICAgICAgZGVyaXZhdGl2ZSBTREssIGxlYXZpbmcgdGhlIHdvcmtzcGFjZSBjbGVhbiBhbmQgcmVhZHkgZm9yIHVzZXJzCi0gICAgICAgIHRvIGFkZCB0aGVpciBvd24gcmVjaXBlcy4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgbWlnaHQgbmVlZCB0byBwcm9kdWNlIGFuIFNESyB0aGF0IGNvbnRhaW5zIHlvdXIgb3duIGN1c3RvbQorICAgICAgICAgICAgbGlicmFyaWVzIGZvciBzZW5kaW5nIHRvIGEgdGhpcmQgcGFydHkgKGUuZy4sIGlmIHlvdSBhcmUgYSB2ZW5kb3Igd2l0aAorICAgICAgICAgICAgY3VzdG9tZXJzIG5lZWRpbmcgdG8gYnVpbGQgdGhlaXIgb3duIHNvZnR3YXJlIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtKS4KKyAgICAgICAgICAgIElmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW4geW91IGNhbiBwcm9kdWNlIGEgZGVyaXZhdGl2ZSBTREsgYmFzZWQgb24KKyAgICAgICAgICAgIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIFNESyBmYWlybHkgZWFzaWx5LgorICAgICAgICAgICAgVXNlIHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiBuZWNlc3NhcnksIGluc3RhbGwgYW4gZXh0ZW5zaWJsZSBTREsgdGhhdAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB1c2UgYXMgYSBiYXNlIGZvciB5b3VyIGRlcml2YXRpdmUgU0RLLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U291cmNlIHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgdGhlIGV4dHJhIGxpYnJhcmllcyBvciBvdGhlciBjb21wb25lbnRzCisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1zZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICBUaGUgYWJvdmUgcHJvY2VkdXJlIHRha2VzIHRoZSByZWNpcGVzIGFkZGVkIHRvIHRoZSB3b3Jrc3BhY2UgYW5kCisgICAgICAgICAgICBjb25zdHJ1Y3RzIGEgbmV3IFNESyBpbnN0YWxsZXIgY29udGFpbmluZyB0aG9zZSByZWNpcGVzIGFuZCB0aGUKKyAgICAgICAgICAgIHJlc3VsdGluZyBiaW5hcnkgYXJ0aWZhY3RzLgorICAgICAgICAgICAgVGhlIHJlY2lwZXMgZ28gaW50byB0aGVpciBvd24gc2VwYXJhdGUgbGF5ZXIgaW4gdGhlIGNvbnN0cnVjdGVkCisgICAgICAgICAgICBkZXJpdmF0aXZlIFNESywgbGVhdmluZyB0aGUgd29ya3NwYWNlIGNsZWFuIGFuZCByZWFkeSBmb3IgdXNlcnMKKyAgICAgICAgICAgIHRvIGFkZCB0aGVpciBvd24gcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KIDwvY2hhcHRlcj4KIDwhLS0KIHZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWludHJvLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWludHJvLnhtbAppbmRleCA4OGFlNzc4Li42ODQwMTY5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1pbnRyby54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstaW50cm8ueG1sCkBAIC0xMSw0MSArMTEsNTMgQEAKICAgICA8cGFyYT4KICAgICAgICAgV2VsY29tZSB0byB0aGUgWW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykKICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCi0gICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQgbGV0cyB5b3UgdXNlIGJvdGggdGhlIHN0YW5kYXJkCi0gICAgICAgIFlvY3RvIFByb2plY3QgU0RLIGFuZCBhbiBleHRlbnNpYmxlIFNESyB0byBkZXZlbG9wIGFwcGxpY2F0aW9ucyBhbmQKLSAgICAgICAgaW1hZ2VzIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IGV4cGxhaW5zIGhvdyB0byB1c2UgYm90aCB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCBleHRlbnNpYmxlIGFuZCBzdGFuZGFyZCBTREtzIHRvIGRldmVsb3AKKyAgICAgICAgYXBwbGljYXRpb25zIGFuZCBpbWFnZXMuCiAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIG1hbnVhbCBhbHNvIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UKICAgICAgICAgdGhlIHBvcHVsYXIgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFIGFzIHBhcnQKLSAgICAgICAgb2YgeW91ciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB3b3JrZmxvdy4KKyAgICAgICAgb2YgeW91ciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB3b3JrZmxvdyB3aXRoaW4gdGhlIFNESyBlbnZpcm9ubWVudC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBQcmlvciB0byB0aGUgMi4wIFJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QsIGFwcGxpY2F0aW9uCisgICAgICAgICAgICBkZXZlbG9wbWVudCB3YXMgcHJpbWFyaWx5IGFjY29tcGxpc2hlZCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlCisgICAgICAgICAgICBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIGFuZCB0aGUgYXZhaWxhYmlsaXR5CisgICAgICAgICAgICBvZiBzdGFuZC1hbG9uZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zIGFuZCBvdGhlciB0b29scy4KKyAgICAgICAgICAgIFdpdGggdGhlIDIuMSBSZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0LCBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudAorICAgICAgICAgICAgaGFzIHRyYW5zaXRpb25lZCB0byB3aXRoaW4gYSB0b29sLXJpY2ggZXh0ZW5zaWJsZSBTREsgYW5kIHRoZSBtb3JlCisgICAgICAgICAgICB0cmFkaXRpb25hbCBzdGFuZGFyZCBTREsuCisgICAgICAgIDwvbm90ZT4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KLSAgICAgICAgUHJpb3IgdG8gdGhlIDIuMCBSZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0LCBhcHBsaWNhdGlvbgotICAgICAgICBkZXZlbG9wbWVudCB3YXMgcHJpbWFyaWx5IGFjY29tcGxpc2hlZCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlCi0gICAgICAgIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgYW5kIHRoZSBhdmFpbGFiaWxpdHkKLSAgICAgICAgb2Ygc3RhbmQtYWxvbmUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhbmQgb3RoZXIgdG9vbHMuCi0gICAgICAgIFdpdGggdGhlIDIuMSBSZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0LCBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudAotICAgICAgICBoYXMgdHJhbnNpdGlvbmVkIHRvIHdpdGhpbiBhIG1vcmUgdHJhZGl0aW9uYWwgU0RLIGFuZCBleHRlbnNpYmxlCi0gICAgICAgIFNESy4KKyAgICAgICAgQWxsIFNES3MgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICBUaGlzIHRvb2xjaGFpbiBjb250YWlucyBhIGNvbXBpbGVyLCBkZWJ1Z2dlciwgYW5kIHZhcmlvdXMKKyAgICAgICAgICAgICAgICBtaXNjZWxsYW5lb3VzIHRvb2xzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MaWJyYXJpZXMsIEhlYWRlcnMsIGFuZCBTeW1ib2xzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgVGhlIGxpYnJhcmllcywgaGVhZGVycywgYW5kIHN5bWJvbHMgYXJlIHNwZWNpZmljIHRvIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgIChpLmUuIHRoZXkgbWF0Y2ggdGhlIGltYWdlKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgVGhpcyA8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+IGZpbGUsIG9uY2UgcnVuLCBzZXRzIHVwIHRoZQorICAgICAgICAgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50IGJ5IGRlZmluaW5nIHZhcmlhYmxlcyBhbmQKKyAgICAgICAgICAgICAgICBwcmVwYXJpbmcgZm9yIFNESyB1c2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgICBBIHN0YW5kYXJkIFNESyBjb25zaXN0cyBvZiBhIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiB0aGF0IGNvbnRhaW5zCi0gICAgICAgIGEgY29tcGlsZXIsIGRlYnVnZ2VyLCBhbmQgdmFyaW91cyBtaXNjZWxsYW5lb3VzIHRvb2xzOyBsaWJyYXJpZXMsCi0gICAgICAgIGhlYWRlcnMsIGFuZCBzeW1ib2xzIHRvIG1hdGNoIGFuIGltYWdlOyBhbmQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgotICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIFNESyB0byBpbmRlcGVuZGVudGx5IGRldmVsb3AgYW5kIHRlc3QgY29kZSB0aGF0IGlzCi0gICAgICAgIGRlc3RpbmVkIHRvIHJ1biBvbiBzb21lIHRhcmdldCBtYWNoaW5lLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBBbiBleHRlbnNpYmxlIFNESyBjb25zaXN0cyBvZiBldmVyeXRoaW5nIHRoYXQgdGhlIHN0YW5kYXJkIFNESyBoYXMgcGx1cwotICAgICAgICB0b29scyB0aGF0IGFsbG93IHlvdSB0byBlYXNpbHkgYWRkIG5ldyBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyB0bwotICAgICAgICBhbiBpbWFnZSwgbW9kaWZ5IHRoZSBzb3VyY2Ugb2YgYW4gZXhpc3RpbmcgY29tcG9uZW50LCB0ZXN0IGNoYW5nZXMgb24KLSAgICAgICAgdGhlIHRhcmdldCBoYXJkd2FyZSwgYW5kIGVhc2lseSBpbnRlZ3JhdGUgYW4gYXBwbGljYXRpb24gaW50byB0aGUKKyAgICAgICAgQWRkaXRpb25hbGx5IGFuIGV4dGVuc2libGUgU0RLIGhhcyB0b29scyB0aGF0IGFsbG93IHlvdSB0byBlYXNpbHkgYWRkCisgICAgICAgIG5ldyBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyB0byBhbiBpbWFnZSwgbW9kaWZ5IHRoZSBzb3VyY2Ugb2YgYW4KKyAgICAgICAgZXhpc3RpbmcgY29tcG9uZW50LCB0ZXN0IGNoYW5nZXMgb24gdGhlIHRhcmdldCBoYXJkd2FyZSwgYW5kIGVhc2lseQorICAgICAgICBpbnRlZ3JhdGUgYW4gYXBwbGljYXRpb24gaW50byB0aGUKICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtc3lzdGVtLXRlcm0nPk9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW08L3VsaW5rPi4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgYW4gU0RLIHRvIGluZGVwZW5kZW50bHkgZGV2ZWxvcCBhbmQgdGVzdCBjb2RlCisgICAgICAgIHRoYXQgaXMgZGVzdGluZWQgdG8gcnVuIG9uIHNvbWUgdGFyZ2V0IG1hY2hpbmUuCiAgICAgICAgIFNES3MgYXJlIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQuCiAgICAgICAgIFRoZSBiaW5hcmllcyBhcmUgbGlua2VkIGFnYWluc3QgdGhlaXIgb3duIGNvcHkgb2YKICAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiwgd2hpY2ggcmVzdWx0cyBpbiBubyBkZXBlbmRlbmNpZXMKQEAgLTU5LDggKzcxLDggQEAKICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KLSAgICAgICAgQW5vdGhlciBmZWF0dXJlIGZvciB0aGUgU0RLcyBpcyB0aGF0IG9ubHkgb25lIHNldCBvZiBjcm9zcy1jYW5hZGlhbgotICAgICAgICB0b29sY2hhaW4gYmluYXJpZXMgYXJlIHByb2R1Y2VkIHBlciBhcmNoaXRlY3R1cmUuCisgICAgICAgIEFub3RoZXIgZmVhdHVyZSBmb3IgdGhlIFNES3MgaXMgdGhhdCBvbmx5IG9uZSBzZXQgb2YgY3Jvc3MtY29tcGlsZXIKKyAgICAgICAgdG9vbGNoYWluIGJpbmFyaWVzIGFyZSBwcm9kdWNlZCBmb3IgYW55IGdpdmVuIGFyY2hpdGVjdHVyZS4KICAgICAgICAgVGhpcyBmZWF0dXJlIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSB0YXJnZXQgaGFyZHdhcmUgY2FuCiAgICAgICAgIGJlIHBhc3NlZCB0byA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gYXMgYSBzZXQgb2YgY29tcGlsZXIgb3B0aW9ucy4KICAgICAgICAgVGhvc2Ugb3B0aW9ucyBhcmUgc2V0IHVwIGJ5IHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgYW5kIGNvbnRhaW5lZCBpbgpAQCAtNzQsNDAgKzg2LDEyMiBAQAogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgICBHb2luZyBiZXlvbmQgdGhlIGFjdHVhbCBTREssIHRoZSBTREsgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgY29uc2lzdHMKLSAgICAgICAgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgVGhlIFNESyBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgogICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjcm9zcy10b29sY2hhaW4gYW5kCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHNlbGYtY29udGFpbmVkIFNESywgd2hpY2ggaXMgYW4KKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY3Jvc3MtdG9vbGNoYWluIGFuZAogICAgICAgICAgICAgICAgIG1hdGNoaW5nIHN5c3Jvb3RzICh0YXJnZXQgYW5kIG5hdGl2ZSkgYWxsIGJ1aWx0IGJ5IHRoZQotICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSAoZS5nLiB0aGUgU0RLKS4KICAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWluIGFuZCBzeXNyb290cyBhcmUgYmFzZWQgb24gYQogICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CiAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhbmQgZXh0ZW5zaW9ucywKICAgICAgICAgICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIGNyb3NzLWRldmVsb3Agb24gdGhlIGhvc3QgbWFjaGluZSBmb3IgdGhlCiAgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIGV4dGVuc2libGUgU0RLIGNvbnRhaW5zIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZnVuY3Rpb25hbGl0eS4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpLCB3aGljaCBsZXRzIHlvdSBzaW11bGF0ZQogICAgICAgICAgICAgICAgIHRhcmdldCBoYXJkd2FyZS4KICAgICAgICAgICAgICAgICBRRU1VIGlzIG5vdCBsaXRlcmFsbHkgcGFydCBvZiB0aGUgU0RLLgogICAgICAgICAgICAgICAgIFlvdSBtdXN0IGJ1aWxkIGFuZCBpbmNsdWRlIHRoaXMgZW11bGF0b3Igc2VwYXJhdGVseS4KICAgICAgICAgICAgICAgICBIb3dldmVyLCBRRU1VIHBsYXlzIGFuIGltcG9ydGFudCByb2xlIGluIHRoZSBkZXZlbG9wbWVudAotICAgICAgICAgICAgICAgIHByb2Nlc3MgdGhhdCByZXZvbHZlcyBhcm91bmQgdXNlIG9mIGFuZCBTREsuCisgICAgICAgICAgICAgICAgcHJvY2VzcyB0aGF0IHJldm9sdmVzIGFyb3VuZCB1c2Ugb2YgdGhlIFNESy4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgRWNsaXBzZSBJREUgWW9jdG8gUGx1Zy1pbi4KLSAgICAgICAgICAgICAgICBUaGlzIHBsdWctaW4gaXMgYWxzbyBhdmFpbGFibGUgZm9yIHlvdSBpZiB5b3UgYXJlIGFuIEVjbGlwc2UKKyAgICAgICAgICAgICAgICBUaGlzIHBsdWctaW4gaXMgYXZhaWxhYmxlIGZvciB5b3UgaWYgeW91IGFyZSBhbiBFY2xpcHNlCiAgICAgICAgICAgICAgICAgdXNlci4KICAgICAgICAgICAgICAgICBJbiB0aGUgc2FtZSBtYW5uZXIgYXMgUUVNVSwgdGhlIHBsdWctaW4gaXMgbm90IGxpdGVyYWxseSBwYXJ0CiAgICAgICAgICAgICAgICAgb2YgdGhlIFNESyBidXQgaXMgcmF0aGVyIGF2YWlsYWJsZSBmb3IgdXNlIGFzIHBhcnQgb2YgdGhlCiAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5WYXJpb3VzIHVzZXItc3BhY2UgdG9vbHMgdGhhdCBncmVhdGx5IGVuaGFuY2UKLSAgICAgICAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGV4cGVyaWVuY2UuCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VmFyaW91cyBwZXJmb3JtYW5jZS1yZWxhdGVkCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzL2luZGV4LnBocCc+dG9vbHM8L3VsaW5rPgorICAgICAgICAgICAgICAgIHRoYXQgY2FuIGVuaGFuY2UgeW91ciBkZXZlbG9wbWVudCBleHBlcmllbmNlLgogICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSBhbHNvIHNlcGFyYXRlIGZyb20gdGhlIGFjdHVhbCBTREsgYnV0IGNhbiBiZQogICAgICAgICAgICAgICAgIGluZGVwZW5kZW50bHkgb2J0YWluZWQgYW5kIHVzZWQgaW4gdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuCiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgIDwvcGFyYT4KIAorICAgIDxwYXJhPgorICAgICAgICBJbiBzdW1tYXJ5LCB0aGUgZXh0ZW5zaWJsZSBhbmQgc3RhbmRhcmQgU0RLIHNoYXJlIG1hbnkgZmVhdHVyZXMuCisgICAgICAgIEhvd2V2ZXIsIHRoZSBleHRlbnNpYmxlIFNESyBoYXMgcG93ZXJmdWwgZGV2ZWxvcG1lbnQgdG9vbHMgdG8gaGVscCB5b3UKKyAgICAgICAgbW9yZSBxdWlja2x5IGRldmVsb3AgYXBwbGljYXRpb25zLgorICAgICAgICBGb2xsb3dpbmcgaXMgYSB0YWJsZSB0aGF0IHN1bW1hcml6ZXMgdGhlIHByaW1hcnkgZGlmZmVyZW5jZXMgYmV0d2VlbgorICAgICAgICB0aGUgc3RhbmRhcmQgYW5kIGV4dGVuc2libGUgU0RLIHR5cGVzIHdoZW4gY29uc2lkZXJpbmcgd2hpY2ggdG8KKyAgICAgICAgYnVpbGQ6CisgICAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSdub25lJz4KKyAgICAgICAgICAgIDx0Z3JvdXAgY29scz0nMycgYWxpZ249J2xlZnQnIGNvbHNlcD0nMScgcm93c2VwPScxJz4KKyAgICAgICAgICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSdjMScgY29sd2lkdGg9JzEqJy8+CisgICAgICAgICAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0nYzInIGNvbHdpZHRoPScxKicvPgorICAgICAgICAgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9J2MzJyBjb2x3aWR0aD0nMSonLz4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxlbXBoYXNpcz5GZWF0dXJlPC9lbXBoYXNpcz48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+U3RhbmRhcmQgU0RLPC9lbXBoYXNpcz48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+RXh0ZW5zaWJsZSBTREs8L2VtcGhhc2lzPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5Ub29sY2hhaW48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5ZZXM8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5ZZXMqPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlYnVnZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+WWVzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+WWVzKjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TaXplPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+MTAwKyBNQnl0ZXM8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij4xKyBHQnl0ZXMgKG9yIDMwMCsgTUJ5dGVzIGZvciBtaW5pbWFsIHcvdG9vbGNoYWluKTwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+Tm88L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5ZZXM8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QnVpbGQgSW1hZ2VzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+Tm88L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5ZZXM8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+VXBkYXRlYWJsZTwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPk5vPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+WWVzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPk1hbmFnZWQgU3lzcm9vdCoqPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+Tm88L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5ZZXM8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+SW5zdGFsbGVkIFBhY2thZ2VzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+Tm8qKio8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5ZZXMqKioqPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkNvbnN0cnVjdGlvbjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlBhY2thZ2VzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2hhcmVkIFN0YXRlPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICA8L2luZm9ybWFsdGFibGU+CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgKiBFeHRlbnNpYmxlIFNESyB3aWxsIGNvbnRhaW4gdGhlIHRvb2xjaGFpbiBhbmQgZGVidWdnZXIgaWYgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNES19FWFRfVFlQRSc+PGZpbGVuYW1lPlNES19FWFRfVFlQRTwvZmlsZW5hbWU+PC91bGluaz4gaXMgImZ1bGwiIG9yIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TREtfSU5DTFVERV9UT09MQ0hBSU4nPjxmaWxlbmFtZT5TREtfSU5DTFVERV9UT09MQ0hBSU48L2ZpbGVuYW1lPjwvdWxpbms+IGlzICIxIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgKiogU3lzcm9vdCBpcyBtYW5hZ2VkIHRocm91Z2ggdXNlIG9mIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4uICBUaHVzLCBpdCBpcyBsZXNzIGxpa2VseSB0aGF0IHlvdSB3aWxsIGNvcnJ1cHQgeW91ciBTREsgc3lzcm9vdCB3aGVuIHlvdSB0cnkgdG8gYWRkIGFkZGl0aW9uYWwgbGlicmFyaWVzLgorCisgICAgICoqKiBSdW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBjYW4gYmUgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIFNESyBidXQgaXQgaXMgbm90IHN1cHBvcnRlZCBieSBkZWZhdWx0LgorCisgICAgICoqKiogWW91IG11c3QgYnVpbGQgYW5kIG1ha2UgdGhlIHNoYXJlZCBzdGF0ZSBhdmFpbGFibGUgdG8gZXh0ZW5zaWJsZSBTREsgdXNlcnMgZm9yICJwYWNrYWdlcyIgeW91IHdhbnQgdG8gZW5hYmxlIHVzZXJzIHRvIGluc3RhbGwuCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+CisKICAgICA8c2VjdGlvbiBpZD0ndGhlLWNyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+CiAgICAgICAgIDx0aXRsZT5UaGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC90aXRsZT4KIApAQCAtMTE3LDcgKzIxMSw5IEBACiAgICAgICAgICAgICBjb25zaXN0cyBvZiBhIGNyb3NzLWNvbXBpbGVyLCBjcm9zcy1saW5rZXIsIGFuZCBjcm9zcy1kZWJ1Z2dlcgogICAgICAgICAgICAgdGhhdCBhcmUgdXNlZCB0byBkZXZlbG9wIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGZvciB0YXJnZXRlZAogICAgICAgICAgICAgaGFyZHdhcmUuCi0gICAgICAgICAgICBUaGlzIHRvb2xjaGFpbiBpcyBjcmVhdGVkIGJ5IHJ1bm5pbmcgYSB0b29sY2hhaW4gaW5zdGFsbGVyIHNjcmlwdAorICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBmb3IgYW4gZXh0ZW5zaWJsZSBTREssIHRoZSB0b29sY2hhaW4gYWxzbyBoYXMKKyAgICAgICAgICAgIGJ1aWx0LWluIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgIFRoaXMgdG9vbGNoYWluIGlzIGNyZWF0ZWQgYnkgcnVubmluZyBhIFNESyBpbnN0YWxsZXIgc2NyaXB0CiAgICAgICAgICAgICBvciB0aHJvdWdoIGEKICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KICAgICAgICAgICAgIHRoYXQgaXMgYmFzZWQgb24geW91ciBNZXRhZGF0YSBjb25maWd1cmF0aW9uIG9yIGV4dGVuc2lvbiBmb3IKQEAgLTE4Myw2OCArMjc5LDM2IEBACiAgICAgICAgICAgICBUaGVzZSBleHRlbnNpb25zIGFsbG93IGZvciBjcm9zcy1jb21waWxhdGlvbiwgZGVwbG95bWVudCwgYW5kCiAgICAgICAgICAgICBleGVjdXRpb24gb2YgeW91ciBvdXRwdXQgaW50byBhIFFFTVUgZW11bGF0aW9uIHNlc3Npb24uCiAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcGVyZm9ybSBjcm9zcy1kZWJ1Z2dpbmcgYW5kIHByb2ZpbGluZy4KLSAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCBhbHNvIHN1cHBvcnRzIGEgc3VpdGUgb2YgdG9vbHMgdGhhdCBhbGxvd3MgeW91IHRvCi0gICAgICAgICAgICBwZXJmb3JtIHJlbW90ZSBwcm9maWxpbmcsIHRyYWNpbmcsIGNvbGxlY3Rpb24gb2YgcG93ZXIgZGF0YSwKLSAgICAgICAgICAgIGNvbGxlY3Rpb24gb2YgbGF0ZW5jeSBkYXRhLCBhbmQgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBkYXRhLgorICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IGFsc28gc3VwcG9ydHMgbWFueSBwZXJmb3JtYW5jZS1yZWxhdGVkCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xpbnV4dG9vbHMvaW5kZXgucGhwJz50b29sczwvdWxpbms+CisgICAgICAgICAgICB0aGF0IGVuaGFuY2UgeW91ciBkZXZlbG9wbWVudCBleHBlcmllbmNlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgUHJldmlvdXMgcmVsZWFzZXMgb2YgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAidXNlci1zcGFjZSB0b29scyIgKGkuZS4gTGF0ZW5jeVRPUCwgUG93ZXJUT1AsIFBlcmYsIFN5c3RlbVRhcCwKKyAgICAgICAgICAgICAgICBhbmQgTHR0bmctdXN0KSB0aGF0IGFsc28gYWRkZWQgdG8gdGhlIGRldmVsb3BtZW50IGV4cGVyaWVuY2UuCisgICAgICAgICAgICAgICAgVGhlc2UgdG9vbHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYmVnaW5uaW5nIHdpdGggdGhpcyByZWxlYXNlCisgICAgICAgICAgICAgICAgb2YgdGhlIHBsdWctaW4uCisgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgd29ya2Zsb3cgdGhhdAogICAgICAgICAgICAgdXNlcyB0aGUgRWNsaXBzZSBJREUgYW5kIGZvciBhIGRldGFpbGVkIGV4YW1wbGUgb2YgaG93IHRvIGluc3RhbGwKICAgICAgICAgICAgIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdCBQbHVnLWluLCBzZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGluaz0nc2RrLWRldmVsb3BpbmctYXBwbGljYXRpb25zLXVzaW5nLWVjbGlwc2UnPkRldmVsb3BpbmcgQXBwbGljYXRpb25zIFVzaW5nIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC9saW5rPiIKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2ZWxvcGluZy1hcHBsaWNhdGlvbnMtdXNpbmctZWNsaXBzZSc+RGV2ZWxvcGluZyBBcHBsaWNhdGlvbnMgVXNpbmcgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L2xpbms+IgogICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSd1c2VyLXNwYWNlLXRvb2xzJz4KLSAgICAgICAgPHRpdGxlPlVzZXItU3BhY2UgVG9vbHM8L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSdwZXJmb3JtYW5jZS1lbmhhbmNpbmctdG9vbHMnPgorICAgICAgICA8dGl0bGU+UGVyZm9ybWFuY2UgRW5oYW5jaW5nIFRvb2xzPC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFVzZXItc3BhY2UgdG9vbHMgYXJlIGF2YWlsYWJsZSBhcyBwYXJ0IG9mIHRoZSBTREsgZGV2ZWxvcG1lbnQKLSAgICAgICAgICAgIHByb2Nlc3MgYW5kIGNhbiBiZSBoZWxwZnVsLgotICAgICAgICAgICAgVGhlIHRvb2xzIGluY2x1ZGUgTGF0ZW5jeVRPUCwgUG93ZXJUT1AsIFBlcmYsIFN5c3RlbVRhcCwKLSAgICAgICAgICAgIGFuZCBMdHRuZy11c3QuCi0gICAgICAgICAgICBUaGVzZSB0b29scyBhcmUgY29tbW9uIGRldmVsb3BtZW50IHRvb2xzIGZvciB0aGUgTGludXggcGxhdGZvcm0uCi0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGF0ZW5jeVRPUDo8L2VtcGhhc2lzPiBMYXRlbmN5VE9QCi0gICAgICAgICAgICAgICAgICAgIGZvY3VzZXMgb24gbGF0ZW5jeSB0aGF0IGNhdXNlcyBza2lwcyBpbiBhdWRpbywgc3R1dHRlcnMgaW4KLSAgICAgICAgICAgICAgICAgICAgeW91ciBkZXNrdG9wIGV4cGVyaWVuY2UsIG9yIHNpdHVhdGlvbnMgdGhhdCBvdmVybG9hZCB5b3VyCi0gICAgICAgICAgICAgICAgICAgIHNlcnZlciBldmVuIHdoZW4geW91IGhhdmUgcGxlbnR5IG9mIENQVSBwb3dlciBsZWZ0LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvd2VyVE9QOjwvZW1waGFzaXM+IEhlbHBzIHlvdQotICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2hhdCBzb2Z0d2FyZSBpcyB1c2luZyB0aGUgbW9zdCBwb3dlci4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IFBvd2VyVE9QIGF0Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vMDEub3JnL3Bvd2VydG9wLyc+PC91bGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QZXJmOjwvZW1waGFzaXM+IFBlcmZvcm1hbmNlIGNvdW50ZXJzCi0gICAgICAgICAgICAgICAgICAgIGZvciBMaW51eCB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgY2VydGFpbiB0eXBlcyBvZiBoYXJkd2FyZQotICAgICAgICAgICAgICAgICAgICBhbmQgc29mdHdhcmUgZXZlbnRzLgotICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0eXBlcyBvZiBjb3VudGVycyBzZWUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9wZXJmLndpa2kua2VybmVsLm9yZy8nPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHNldHVwIGFuZCB1c2UgdGhpcyB0b29sLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtcGVyZic+cGVyZjwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzdGVtVGFwOjwvZW1waGFzaXM+IEEgZnJlZSBzb2Z0d2FyZQotICAgICAgICAgICAgICAgICAgICBpbmZyYXN0cnVjdHVyZSB0aGF0IHNpbXBsaWZpZXMgaW5mb3JtYXRpb24gZ2F0aGVyaW5nIGFib3V0Ci0gICAgICAgICAgICAgICAgICAgIGEgcnVubmluZyBMaW51eCBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaGVscHMgeW91IGRpYWdub3NlIHBlcmZvcm1hbmNlIG9yCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWwgcHJvYmxlbXMuCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbVRhcCBpcyBub3QgYXZhaWxhYmxlIGFzIGEgdXNlci1zcGFjZSB0b29sIHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICAgdGhlIEVjbGlwc2UgSURFIFlvY3RvIFBsdWctaW4uCi0gICAgICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwJz48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTeXN0ZW1UYXAuCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlcyBvbiBob3cgdG8gc2V0dXAgYW5kIHVzZSB0aGlzIHRvb2wsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1zeXN0ZW10YXAnPlN5c3RlbVRhcDwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+THR0bmctdXN0OjwvZW1waGFzaXM+IEEgVXNlci1zcGFjZQotICAgICAgICAgICAgICAgICAgICBUcmFjZXIgZGVzaWduZWQgdG8gcHJvdmlkZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbgotICAgICAgICAgICAgICAgICAgICB1c2VyLXNwYWNlIGFjdGl2aXR5LgotICAgICAgICAgICAgICAgICAgICBTZWUgPHVsaW5rIHVybD0naHR0cDovL2x0dG5nLm9yZy91c3QnPjwvdWxpbms+IGZvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIEx0dG5nLXVzdC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFN1cHBvcnRlZCBwZXJmb3JtYW5jZSBlbmhhbmNpbmcgdG9vbHMgYXJlIGF2YWlsYWJsZSB0aGF0IGxldCB5b3UKKyAgICAgICAgICAgIHByb2ZpbGUsIGRlYnVnLCBhbmQgcGVyZm9ybSB0cmFjaW5nIG9uIHlvdXIgcHJvamVjdHMgZGV2ZWxvcGVkCisgICAgICAgICAgICB1c2luZyBFY2xpcHNlLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHRvb2xzIHNlZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLyc+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLzwvdWxpbms+LgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogPC9zZWN0aW9uPgpAQCAtMjY0LDcgKzMyOCw3IEBACiAgICAgICAgIEEgZGV2ZWxvcGVyIGNhbiBpbmRlcGVuZGVudGx5IGNvbXBpbGUgYW5kIHRlc3QgYW4gb2JqZWN0IG9uIHRoZWlyCiAgICAgICAgIG1hY2hpbmUgYW5kIHRoZW4sIHdoZW4gdGhlIG9iamVjdCBpcyByZWFkeSBmb3IgaW50ZWdyYXRpb24gaW50byBhbgogICAgICAgICBpbWFnZSwgdGhleSBjYW4gc2ltcGx5IG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBtYWNoaW5lIHRoYXQgaGFzIHRoZQotICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgWW9jdG8gUHJvamVjdC4KICAgICAgICAgT25jZSB0aGUgb2JqZWN0IGlzIGF2YWlsYWJsZSwgdGhlIGltYWdlIGNhbiBiZSByZWJ1aWx0IHVzaW5nIHRoZQogICAgICAgICBZb2N0byBQcm9qZWN0IHRvIHByb2R1Y2UgdGhlIG1vZGlmaWVkIGltYWdlLgogICAgIDwvcGFyYT4KQEAgLTI3NCw5ICszMzgsOSBAQAogICAgICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgdGhlIFNESyBmb3IgeW91ciB0YXJnZXQgaGFyZHdhcmU6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIFNESywgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayB1cmw9J3Nkay1pbnN0YWxsaW5nLXRoZS1zZGsnPkluc3RhbGxpbmcgdGhlIFNESzwvbGluaz4iCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1pbnN0YWxsaW5nLXRoZS1zZGsnPkluc3RhbGxpbmcgdGhlIFNESzwvbGluaz4iCiAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG93bmxvYWQgdGhlIFRhcmdldCBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCBvciBCdWlsZCB0aGUgVGFyZ2V0IEltYWdlOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgc2V2ZXJhbCB0YXJnZXQgYXJjaGl0ZWN0dXJlcwogICAgICAgICAgICAgICAgIGFuZCBoYXMgbWFueSBwcmUtYnVpbHQga2VybmVsIGltYWdlcyBhbmQgcm9vdCBmaWxlc3lzdGVtCiAgICAgICAgICAgICAgICAgaW1hZ2VzLjwvcGFyYT4KQEAgLTMwMywxMiArMzY3LDE1IEBACiAgICAgICAgICAgICAgICAgNjQtYml0IGFyY2hpdGVjdHVyZSkuCiAgICAgICAgICAgICAgICAgRG93bmxvYWQga2VybmVsLCByb290IGZpbGVzeXN0ZW0sIGFuZCBhbnkgb3RoZXIgZmlsZXMgeW91CiAgICAgICAgICAgICAgICAgbmVlZCBmb3IgeW91ciBwcm9jZXNzLgotICAgICAgICAgICAgICAgIDxub3RlPkluIG9yZGVyIHRvIHVzZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGluIFFFTVUsIHlvdQotICAgICAgICAgICAgICAgIG5lZWQgdG8gZXh0cmFjdCBpdC4KLSAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIHVybD0nc2RrLWV4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXh0cmFjdCB0aGUgcm9vdAotICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiBRRU1VLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBleHRyYWN0IGl0LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZXh0cmFjdGluZy10aGUtcm9vdC1maWxlc3lzdGVtJz5FeHRyYWN0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXh0cmFjdCB0aGUgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGV2ZWxvcCBhbmQgVGVzdCB5b3VyCiAgICAgICAgICAgICAgICAgQXBwbGljYXRpb246PC9lbXBoYXNpcz4gIEF0IHRoaXMgcG9pbnQsIHlvdSBoYXZlIHRoZSB0b29scwogICAgICAgICAgICAgICAgIHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbi4KQEAgLTMxNiw3ICszODMsNyBAQAogICAgICAgICAgICAgICAgIGVtdWxhdG9yLCB5b3UgY2FuIGdvIHRvCiAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFpbl9QYWdlJz5RRU1VIEhvbWUgUGFnZTwvdWxpbms+CiAgICAgICAgICAgICAgICAgdG8gZG93bmxvYWQgYW5kIGxlYXJuIGFib3V0IHRoZSBlbXVsYXRvci4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICBTZWUgdGhlCiAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+IgogICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsCiAgICAgICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUgd2l0aGluIHRoZSBZb2N0bwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCmluZGV4IGRhZTk5MmMuLmVmYThhODQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTEsMTIgKzEsMTEgQEAKIDw/eG1sIHZlcnNpb249JzEuMCc/PgogPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KIAotPCEtLSAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+Ci0tLT4KLQotICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KIAogPCEtLQorICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCiAgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CiAKIC0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbAppbmRleCAwMzU1NWQ2Li43N2JhNWY1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtNSwxNCArNSwxMiBAQAogCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCiAJdmVyc2lvbj0iMS4wIj4KIAotPCEtLQogICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KLS0tPgorCis8IS0tCiAKICAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KIAotPCEtLQotCiAgIDx4c2w6aW1wb3J0CiAJICBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1tYW51YWwueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstbWFudWFsLnhtbAppbmRleCBjODYwNzgyLi42YzcyYTAzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1tYW51YWwueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLW1hbnVhbC54bWwKQEAgLTM2LDYgKzM2LDExIEBACiAgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNjwvZGF0ZT4KICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE2PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgPC9yZXZoaXN0b3J5PgogCiAgICAgPGNvcHlyaWdodD4KQEAgLTYxLDE0ICs2NiwxOCBAQAogCiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ic2RrLWludHJvLnhtbCIvPgogCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ic2RrLWV4dGVuc2libGUueG1sIi8+CisKICAgICA8eGk6aW5jbHVkZSBocmVmPSJzZGstdXNpbmcueG1sIi8+CiAKLSAgICA8eGk6aW5jbHVkZSBocmVmPSJzZGstZXh0ZW5zaWJsZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJzZGstd29ya2luZy1wcm9qZWN0cy54bWwiLz4KIAogICAgIDx4aTppbmNsdWRlIGhyZWY9InNkay1hcHBlbmRpeC1vYnRhaW4ueG1sIi8+CiAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJzZGstYXBwZW5kaXgtY3VzdG9taXppbmcueG1sIi8+CiAKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJzZGstYXBwZW5kaXgtbWFycy54bWwiLz4KKwogPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KICAgICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CiAgICAgPC9pbmRleD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLXVzaW5nLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLXVzaW5nLnhtbAppbmRleCAxZWE0N2QzLi43MjgxZTgzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay11c2luZy54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstdXNpbmcueG1sCkBAIC0zLDc0ICszLDgyIEBACiBbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CiAKIDxjaGFwdGVyIGlkPSdzZGstdXNpbmctdGhlLXN0YW5kYXJkLXNkayc+Ci0KLTx0aXRsZT5Vc2luZyB0aGUgU3RhbmRhcmQgU0RLPC90aXRsZT4KLQotPHBhcmE+Ci0gICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgc3RhbmRhcmQgU0RLIGFuZCBob3cgdG8gdXNlIGl0LgotICAgIEluZm9ybWF0aW9uIGNvdmVycyB0aGUgcGllY2VzIG9mIHRoZSBTREssIGhvdyB0byBpbnN0YWxsIGl0LCBhbmQgcHJlc2VudHMKLSAgICBzZXZlcmFsIHRhc2stYmFzZWQgcHJvY2VkdXJlcyBjb21tb24gZm9yIGRldmVsb3Bpbmcgd2l0aCBhIHN0YW5kYXJkIFNESy4KLSAgICA8bm90ZT4KLSAgICAgICAgVGhlIHRhc2tzIHlvdSBjYW4gcGVyZm9ybSB1c2luZyBhIHN0YW5kYXJkIFNESyBhcmUgYWxzbyBhcHBsaWNhYmxlCi0gICAgICAgIHdoZW4geW91IGFyZSB1c2luZyBhbiBleHRlbnNpYmxlIFNESy4KLSAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBkaWZmZXJlbmNlcyB3aGVuIHVzaW5nIGFuIGV4dGVuc2libGUgU0RLIGFzCi0gICAgICAgIGNvbXBhcmVkIHRvIGFuIGV4dGVuc2libGUgU0RLLCBzZWUgdGhlCi0gICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZXh0ZW5zaWJsZSc+VXNpbmcgdGhlIEV4dGVuc2libGUgU0RLPC9saW5rPiIKLSAgICAgICAgY2hhcHRlci4KLSAgICA8L25vdGU+Ci08L3BhcmE+Ci0KLTxzZWN0aW9uIGlkPSdzZGstc3RhbmRhcmQtc2RrLWludHJvJz4KLSAgICA8dGl0bGU+V2h5IHVzZSB0aGUgU3RhbmRhcmQgU0RLIGFuZCBXaGF0IGlzIGluIEl0PzwvdGl0bGU+CisgICAgPHRpdGxlPlVzaW5nIHRoZSBTdGFuZGFyZCBTREs8L3RpdGxlPgogCiAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBTdGFuZGFyZCBTREsgcHJvdmlkZXMgYSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gYW5kIGxpYnJhcmllcwotICAgICAgICB0YWlsb3JlZCB0byB0aGUgY29udGVudHMgb2YgYSBzcGVjaWZpYyBpbWFnZS4KLSAgICAgICAgWW91IHdvdWxkIHVzZSB0aGUgU3RhbmRhcmQgU0RLIGlmIHlvdSB3YW50IGEgbW9yZSB0cmFkaXRpb25hbCB0b29sY2hhaW4KLSAgICAgICAgZXhwZXJpZW5jZS4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgc3RhbmRhcmQgU0RLIGFuZCBob3cgdG8gaW5zdGFsbCBpdC4KKyAgICAgICAgSW5mb3JtYXRpb24gaW5jbHVkZXMgdW5pcXVlIGluc3RhbGxhdGlvbiBhbmQgc2V0dXAgYXNwZWN0cyBmb3IgdGhlCisgICAgICAgIHN0YW5kYXJkIFNESy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBGb3IgYSBzaWRlLWJ5LXNpZGUgY29tcGFyaXNvbiBvZiBtYWluIGZlYXR1cmVzIHN1cHBvcnRlZCBmb3IgYQorICAgICAgICAgICAgc3RhbmRhcmQgU0RLIGFzIGNvbXBhcmVkIHRvIGFuIGV4dGVuc2libGUgU0RLLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLW1hbnVhbC1pbnRybyc+SW50cm9kdWN0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvbm90ZT4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGluc3RhbGxlZCBTdGFuZGFyZCBTREsgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCi0gICAgICAgIEJhc2ljYWxseSwgaXQgY29udGFpbnMgYW4gU0RLIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgc29tZQotICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgaG9zdCBhbmQgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydAotICAgICAgICB1c2FnZS4KLSAgICAgICAgWW91IGNhbiBzZWUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW4gdGhlCi0gICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstaW5zdGFsbGVkLXN0YW5kYXJkLXNkay1kaXJlY3Rvcnktc3RydWN0dXJlJz5JbnN0YWxsZWQgU3RhbmRhcmQgU0RLIERpcmVjdG9yeSBTdHJ1Y3R1cmU8L2xpbms+IgotICAgICAgICBzZWN0aW9uLgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9J3Nkay1pbnN0YWxsaW5nLXRoZS1zZGsnPgotICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBTREs8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyBpbnN0YWxsIHRoZSBTREsgb24geW91ciBob3N0Ci0gICAgICAgIGRldmVsb3BtZW50IG1hY2hpbmUgYnkgcnVubmluZyB0aGUgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+Ci0gICAgICAgIGluc3RhbGxhdGlvbiBzY3JpcHQuCisgICAgICAgIFlvdSBjYW4gdXNlIGEgc3RhbmRhcmQgU0RLIHRvIHdvcmsgb24gTWFrZWZpbGUsIEF1dG90b29scywgYW5kCisgICAgICAgIEVjbGlwc2UtYmFzZWQgcHJvamVjdHMuCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay13b3JraW5nLXByb2plY3RzJz5Xb3JraW5nIHdpdGggRGlmZmVyZW50IFR5cGVzIG9mIFByb2plY3RzPC9saW5rPiIKKyAgICAgICAgY2hhcHRlciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICA8L3BhcmE+CiAKLSAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiBkb3dubG9hZCBhIHRhcmJhbGwgaW5zdGFsbGVyLCB3aGljaCBpbmNsdWRlcyB0aGUKLSAgICAgICAgcHJlLWJ1aWx0IHRvb2xjaGFpbiwgdGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KLSAgICAgICAgc2NyaXB0LCBhbmQgc3VwcG9ydCBmaWxlcyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgdW5kZXIKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz48L3VsaW5rPi4KLSAgICAgICAgVG9vbGNoYWlucyBhcmUgYXZhaWxhYmxlIGZvciAzMi1iaXQgYW5kIDY0LWJpdCB4ODYgZGV2ZWxvcG1lbnQKLSAgICAgICAgc3lzdGVtcyBmcm9tIHRoZSA8ZmlsZW5hbWU+aTY4NjwvZmlsZW5hbWU+IGFuZAotICAgICAgICA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4gZGlyZWN0b3JpZXMsIHJlc3BlY3RpdmVseS4KLSAgICAgICAgVGhlIHRvb2xjaGFpbnMgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYXJlIGJhc2VkIG9mZiB0aGUKLSAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIGFuZCBjb250YWluCi0gICAgICAgIGxpYnJhcmllcyBhcHByb3ByaWF0ZSBmb3IgZGV2ZWxvcGluZyBhZ2FpbnN0IHRoYXQgaW1hZ2UuCi0gICAgICAgIEVhY2ggdHlwZSBvZiBkZXZlbG9wbWVudCBzeXN0ZW0gc3VwcG9ydHMgZml2ZSBvciBtb3JlIHRhcmdldAotICAgICAgICBhcmNoaXRlY3R1cmVzLgotICAgIDwvcGFyYT4KKyAgICA8c2VjdGlvbiBpZD0nc2RrLXN0YW5kYXJkLXNkay1pbnRybyc+CisgICAgICAgIDx0aXRsZT5XaHkgdXNlIHRoZSBTdGFuZGFyZCBTREsgYW5kIFdoYXQgaXMgaW4gSXQ/PC90aXRsZT4KIAotICAgIDxwYXJhPgotICAgICAgICBUaGUgbmFtZXMgb2YgdGhlIHRhcmJhbGwgaW5zdGFsbGVyIHNjcmlwdHMgYXJlIHN1Y2ggdGhhdCBhCi0gICAgICAgIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGhvc3Qgc3lzdGVtIGFwcGVhcnMgZmlyc3QgaW4gdGhlCi0gICAgICAgIGZpbGVuYW1lIGFuZCB0aGVuIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgc3RyaW5nCi0gICAgICAgIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KLSAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTdGFuZGFyZCBTREsgcHJvdmlkZXMgYSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gYW5kCisgICAgICAgICAgICBsaWJyYXJpZXMgdGFpbG9yZWQgdG8gdGhlIGNvbnRlbnRzIG9mIGEgc3BlY2lmaWMgaW1hZ2UuCisgICAgICAgICAgICBZb3Ugd291bGQgdXNlIHRoZSBTdGFuZGFyZCBTREsgaWYgeW91IHdhbnQgYSBtb3JlIHRyYWRpdGlvbmFsCisgICAgICAgICAgICB0b29sY2hhaW4gZXhwZXJpZW5jZSBhcyBjb21wYXJlZCB0byB0aGUgZXh0ZW5zaWJsZSBTREssIHdoaWNoCisgICAgICAgICAgICBwcm92aWRlcyBhbiBpbnRlcm5hbCBidWlsZCBzeXN0ZW0gYW5kIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBmdW5jdGlvbmFsaXR5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaW5zdGFsbGVkIFN0YW5kYXJkIFNESyBjb25zaXN0cyBvZiBzZXZlcmFsIGZpbGVzIGFuZAorICAgICAgICAgICAgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBCYXNpY2FsbHksIGl0IGNvbnRhaW5zIGFuIFNESyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIHNvbWUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBob3N0IGFuZCB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtcyB0bworICAgICAgICAgICAgc3VwcG9ydCB1c2FnZS4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1pbnN0YWxsZWQtc3RhbmRhcmQtc2RrLWRpcmVjdG9yeS1zdHJ1Y3R1cmUnPkluc3RhbGxlZCBTdGFuZGFyZCBTREsgRGlyZWN0b3J5IFN0cnVjdHVyZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Nkay1pbnN0YWxsaW5nLXRoZS1zZGsnPgorICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgU0RLPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyBpbnN0YWxsIHRoZSBTREsgb24geW91ciBob3N0CisgICAgICAgICAgICBkZXZlbG9wbWVudCBtYWNoaW5lIGJ5IHJ1bm5pbmcgdGhlIDxmaWxlbmFtZT4qLnNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluc3RhbGxhdGlvbiBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgYSB0YXJiYWxsIGluc3RhbGxlciwgd2hpY2ggaW5jbHVkZXMgdGhlCisgICAgICAgICAgICBwcmUtYnVpbHQgdG9vbGNoYWluLCB0aGUgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgc2NyaXB0LCBhbmQgc3VwcG9ydCBmaWxlcyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgdW5kZXIKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19UT09MQ0hBSU5fRExfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICBUb29sY2hhaW5zIGFyZSBhdmFpbGFibGUgZm9yIDMyLWJpdCBhbmQgNjQtYml0IHg4NiBkZXZlbG9wbWVudAorICAgICAgICAgICAgc3lzdGVtcyBmcm9tIHRoZSA8ZmlsZW5hbWU+aTY4NjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICBUaGUgdG9vbGNoYWlucyB0aGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBhcmUgYmFzZWQgb2ZmIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIGFuZCBjb250YWluCisgICAgICAgICAgICBsaWJyYXJpZXMgYXBwcm9wcmlhdGUgZm9yIGRldmVsb3BpbmcgYWdhaW5zdCB0aGF0IGltYWdlLgorICAgICAgICAgICAgRWFjaCB0eXBlIG9mIGRldmVsb3BtZW50IHN5c3RlbSBzdXBwb3J0cyBmaXZlIG9yIG1vcmUgdGFyZ2V0CisgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbmFtZXMgb2YgdGhlIHRhcmJhbGwgaW5zdGFsbGVyIHNjcmlwdHMgYXJlIHN1Y2ggdGhhdCBhCisgICAgICAgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBob3N0IHN5c3RlbSBhcHBlYXJzIGZpcnN0IGluIHRoZQorICAgICAgICAgICAgZmlsZW5hbWUgYW5kIHRoZW4gaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBzdHJpbmcKKyAgICAgICAgICAgIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgcG9reS1nbGliYy08cmVwbGFjZWFibGU+aG9zdF9zeXN0ZW08L3JlcGxhY2VhYmxlPi08cmVwbGFjZWFibGU+aW1hZ2VfdHlwZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tdG9vbGNoYWluLTxyZXBsYWNlYWJsZT5yZWxlYXNlX3ZlcnNpb248L3JlcGxhY2VhYmxlPi5zaAogCiAgICAgIFdoZXJlOgpAQCAtODgsMTM3OCArOTYsMTA5IEBACiAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdDoKIAogICAgICAgICAgICAgICAgICAgICAmRElTVFJPOywgJkRJU1RSTzsrc25hcHNob3QKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0b29sY2hhaW4gaW5zdGFsbGVyIGlzIGZvciBhIDY0LWJpdAotICAgICAgICBkZXZlbG9wbWVudCBob3N0IHN5c3RlbSBhbmQgYSBpNTg2LXR1bmVkIHRhcmdldCBhcmNoaXRlY3R1cmUKLSAgICAgICAgYmFzZWQgb2ZmIHRoZSBTREsgZm9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgdXNpbmcgdGhlIGN1cnJlbnQgJkRJU1RSTzsgc25hcHNob3Q6Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCi0gICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIFNESyBhbmQgdG9vbGNoYWlucyBhcmUgc2VsZi1jb250YWluZWQgYW5kIGJ5IGRlZmF1bHQgYXJlIGluc3RhbGxlZAotICAgICAgICBpbnRvIDxmaWxlbmFtZT4vb3B0L3Bva3k8L2ZpbGVuYW1lPi4KLSAgICAgICAgSG93ZXZlciwgd2hlbiB5b3UgcnVuIHRoZSBTREsgaW5zdGFsbGVyLCB5b3UgY2FuIGNob29zZSBhbgotICAgICAgICBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIFlvdSBtdXN0IGNoYW5nZSB0aGUgcGVybWlzc2lvbnMgb24gdGhlIHRvb2xjaGFpbgotICAgICAgICAgICAgaW5zdGFsbGVyIHNjcmlwdCBzbyB0aGF0IGl0IGlzIGV4ZWN1dGFibGU6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2htb2QgK3ggcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLTIuMS5zaAogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8L25vdGU+Ci0gICAgPC9wYXJhPgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgU0RLIGluc3RhbGxlciBpcyBmb3IgYSA2NC1iaXQKKyAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGFuZCBhIGk1ODYtdHVuZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgYmFzZWQgb2ZmIHRoZSBTREsgZm9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIHVzaW5nIHRoZSBjdXJyZW50ICZESVNUUk87IHNuYXBzaG90OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5LWdsaWJjLXg4Nl82NC1jb3JlLWltYWdlLXNhdG8taTU4Ni10b29sY2hhaW4tJkRJU1RSTzsuc2gKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlIHRvIGRvd25sb2FkaW5nIGFuIFNESywgeW91IGNhbiBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICBTREsgaW5zdGFsbGVyLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZGluZyB0aGUgaW5zdGFsbGVyLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEFub3RoZXIgaGVscGZ1bCByZXNvdXJjZSBmb3IgYnVpbGRpbmcgYW4gaW5zdGFsbGVyIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz5Db29rYm9vayBndWlkZSB0byBNYWtpbmcgYW4gRWNsaXBzZSBEZWJ1ZyBDYXBhYmxlIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCisgICAgICAgICAgICAgICAgVGhpcyB3aWtpIHBhZ2UgZm9jdXNlcyBvbiBkZXZlbG9wbWVudCB3aGVuIHVzaW5nIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgSURFLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CiAKLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIGhvdyB0byBydW4gdGhlIGluc3RhbGxlciBnaXZlbiBhCi0gICAgICAgIHRvb2xjaGFpbiB0YXJiYWxsIGZvciBhIDY0LWJpdCB4ODYgZGV2ZWxvcG1lbnQgaG9zdCBzeXN0ZW0gYW5kCi0gICAgICAgIGEgMzItYml0IHg4NiB0YXJnZXQgYXJjaGl0ZWN0dXJlLgotICAgICAgICBUaGUgZXhhbXBsZSBhc3N1bWVzIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyIGlzIGxvY2F0ZWQgaW4KLSAgICAgICAgPGZpbGVuYW1lPn4vRG93bmxvYWRzLzwvZmlsZW5hbWU+LgotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGRpcmVjdG9yeQotICAgICAgICAgICAgaW50byB3aGljaCB5b3UgYXJlIGluc3RhbGxpbmcgdGhlIFNESywgdGhlIGluc3RhbGxlcgotICAgICAgICAgICAgbm90aWZpZXMgeW91IGFuZCBleGl0cy4KLSAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgaW4gdGhlIGRpcmVjdG9yeSBhbmQKLSAgICAgICAgICAgIHJ1biB0aGUgaW5zdGFsbGVyIGFnYWluLgotICAgICAgICA8L25vdGU+Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCAuL3Bva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0yLjEuc2gKLSAgICAgUG9reSAoWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgRGlzdHJvKSBTREsgaW5zdGFsbGVyIHZlcnNpb24gMi4wCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFNESyBhbmQgdG9vbGNoYWlucyBhcmUgc2VsZi1jb250YWluZWQgYW5kIGJ5IGRlZmF1bHQgYXJlCisgICAgICAgICAgICBpbnN0YWxsZWQgaW50byA8ZmlsZW5hbWU+L29wdC9wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHlvdSBydW4gdGhlIFNESyBpbnN0YWxsZXIsIHlvdSBjYW4gY2hvb3NlIGFuCisgICAgICAgICAgICBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgU0RLCisgICAgICAgICAgICAgICAgaW5zdGFsbGVyIHNjcmlwdCBzbyB0aGF0IGl0IGlzIGV4ZWN1dGFibGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNobW9kICt4IHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIGhvdyB0byBydW4gdGhlIGluc3RhbGxlciBnaXZlbiBhCisgICAgICAgICAgICB0b29sY2hhaW4gdGFyYmFsbCBmb3IgYSA2NC1iaXQgeDg2IGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGFuZAorICAgICAgICAgICAgYSAzMi1iaXQgeDg2IHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICBUaGUgZXhhbXBsZSBhc3N1bWVzIHRoZSBTREsgaW5zdGFsbGVyIGlzIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5+L0Rvd25sb2Fkcy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIGludG8gd2hpY2ggeW91IGFyZSBpbnN0YWxsaW5nIHRoZSBTREssIHRoZSBpbnN0YWxsZXIKKyAgICAgICAgICAgICAgICBub3RpZmllcyB5b3UgYW5kIGV4aXRzLgorICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgaW4gdGhlIGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICBydW4gdGhlIGluc3RhbGxlciBhZ2Fpbi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL3Bva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICBQb2t5IChZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBEaXN0cm8pIFNESyBpbnN0YWxsZXIgdmVyc2lvbiAmRElTVFJPOwogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgRW50ZXIgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgU0RLIChkZWZhdWx0OiAvb3B0L3Bva3kvMi4xKToKLSAgICAgWW91IGFyZSBhYm91dCB0byBpbnN0YWxsIHRoZSBTREsgdG8gIi9vcHQvcG9reS8yLjEiLiBQcm9jZWVkW1kvbl0/IFkKKyAgICAgRW50ZXIgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgU0RLIChkZWZhdWx0OiAvb3B0L3Bva3kvJkRJU1RSTzspOgorICAgICBZb3UgYXJlIGFib3V0IHRvIGluc3RhbGwgdGhlIFNESyB0byAiL29wdC9wb2t5LyZESVNUUk87Ii4gUHJvY2VlZFtZL25dPyBZCiAgICAgIEV4dHJhY3RpbmcgU0RLLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5kb25lCiAgICAgIFNldHRpbmcgaXQgdXAuLi5kb25lCiAgICAgIFNESyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IHVwIGFuZCBpcyByZWFkeSB0byBiZSB1c2VkLgogICAgICBFYWNoIHRpbWUgeW91IHdpc2ggdG8gdXNlIHRoZSBTREsgaW4gYSBuZXcgc2hlbGwgc2Vzc2lvbiwgeW91IG5lZWQgdG8gc291cmNlIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgZS5nLgotICAgICAgJCAuIC9vcHQvcG9reS8yLjEvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4Ci0gICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgQWdhaW4sIHJlZmVyZW5jZSB0aGUKLSAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1pbnN0YWxsZWQtc3RhbmRhcmQtc2RrLWRpcmVjdG9yeS1zdHJ1Y3R1cmUnPkluc3RhbGxlZCBTdGFuZGFyZCBTREsgRGlyZWN0b3J5IFN0cnVjdHVyZTwvbGluaz4iCi0gICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVzdWx0aW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YKLSAgICAgICAgdGhlIGluc3RhbGxlZCBTREsuCi0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0nc2RrLXJ1bm5pbmctdGhlLXNkay1lbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQnPgotICAgIDx0aXRsZT5SdW5uaW5nIHRoZSBTREsgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBTREsgaW5zdGFsbGVkLCB5b3UgbXVzdCBydW4gdGhlIFNESyBlbnZpcm9ubWVudAotICAgICAgICBzZXR1cCBzY3JpcHQgYmVmb3JlIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGl0LgotICAgICAgICBUaGlzIHNldHVwIHNjcmlwdCByZXNpZGVzIGluIHRoZSBkaXJlY3RvcnkgeW91IGNob3NlIHdoZW4geW91IGluc3RhbGxlZAotICAgICAgICB0aGUgU0RLLgotICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gd2hlcmUgdGhpcyBzZXR1cCBzY3JpcHQgY2FuIHJlc2lkZSwgc2VlIHRoZQotICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWFwcGVuZGl4LW9idGFpbic+T2J0YWluaW5nIHRoZSBTREs8L2xpbms+IgotICAgICAgICBBcHBlbmRpeC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgQmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCwgYmUgc3VyZSBpdCBpcyB0aGUgb25lIHRoYXQgbWF0Y2hlcyB0aGUKLSAgICAgICAgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGRldmVsb3BpbmcuCi0gICAgICAgIEVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgYmVnaW4gd2l0aCB0aGUgc3RyaW5nCi0gICAgICAgICI8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXA8L2ZpbGVuYW1lPiIgYW5kIGluY2x1ZGUgYXMgcGFydCBvZiB0aGVpcgotICAgICAgICBuYW1lIHRoZSB0dW5lZCB0YXJnZXQgYXJjaGl0ZWN0dXJlLgotICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQgdG8gc291cmNlIGEgc2V0dXAgc2NyaXB0IGZvciBhbiBJQS1iYXNlZAotICAgICAgICB0YXJnZXQgbWFjaGluZSB1c2luZyBpNTg2IHR1bmluZyBhbmQgbG9jYXRlZCBpbiB0aGUgZGVmYXVsdCBTREsKLSAgICAgICAgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBpcyBhcyBmb2xsb3dzOgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgc291cmNlIC9vcHQvcG9reS8mRElTVFJPOy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBXaGVuIHlvdSBydW4gdGhlIHNldHVwIHNjcmlwdCwgbWFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCi0gICAgICAgIGRlZmluZWQ6Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNES1RBUkdFVFNZU1JPT1QnPjxmaWxlbmFtZT5TREtUQVJHRVRTWVNST09UPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QS0dfQ09ORklHX1BBVEgnPjxmaWxlbmFtZT5QS0dfQ09ORklHX1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHBhdGggdG8gdGhlIHRhcmdldCBwa2ctY29uZmlnIGZpbGVzCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT05GSUdfU0lURSc+PGZpbGVuYW1lPkNPTkZJR19TSVRFPC9maWxlbmFtZT48L3VsaW5rPiAtIEEgR05VIGF1dG9jb25mIHNpdGUgZmlsZSBwcmVjb25maWd1cmVkIGZvciB0aGUgdGFyZ2V0Ci0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DQyc+PGZpbGVuYW1lPkNDPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMgY29tcGlsZXIKLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNYWCc+PGZpbGVuYW1lPkNYWDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDKysgY29tcGlsZXIKLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNQUCc+PGZpbGVuYW1lPkNQUDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgotICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQVMnPjxmaWxlbmFtZT5BUzwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBhc3NlbWJsZXIKLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxEJz48ZmlsZW5hbWU+TEQ8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgbGlua2VyCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1HREInPjxmaWxlbmFtZT5HREI8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgR05VIERlYnVnZ2VyCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVFJJUCc+PGZpbGVuYW1lPlNUUklQPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3N0cmlwJywgd2hpY2ggc3RyaXBzIHN5bWJvbHMKLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJBTkxJQic+PGZpbGVuYW1lPlJBTkxJQjwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdyYW5saWInCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PQkpDT1BZJz48ZmlsZW5hbWU+T0JKQ09QWTwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpjb3B5JwotICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0JKRFVNUCc+PGZpbGVuYW1lPk9CSkRVTVA8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnb2JqZHVtcCcKLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUFSJz48ZmlsZW5hbWU+QVI8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnYXInCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1OTSc+PGZpbGVuYW1lPk5NPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ25tJwotICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEFSR0VUX1BSRUZJWCc+PGZpbGVuYW1lPlRBUkdFVF9QUkVGSVg8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IGZvciB0aGUgdGFyZ2V0IHRvb2xzCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DUk9TU19DT01QSUxFJz48ZmlsZW5hbWU+Q1JPU1NfQ09NUElMRTwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggZm9yIHRoZSB0YXJnZXQgdG9vbHMKLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR1VSRV9GTEFHUyc+PGZpbGVuYW1lPkNPTkZJR1VSRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBhcmd1bWVudHMgZm9yIEdOVSBjb25maWd1cmUKLSAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgQyBmbGFncwotICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgQysrIGZsYWdzCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgbGlua2VyIGZsYWdzIHdoZW4geW91IHVzZSBDQyB0byBsaW5rCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBwcmVwcm9jZXNzb3IgZmxhZ3MKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9J2F1dG90b29scy1iYXNlZC1wcm9qZWN0cyc+Ci0gICAgPHRpdGxlPkF1dG90b29scy1CYXNlZCBQcm9qZWN0czwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgT25jZSB5b3UgaGF2ZSBhIHN1aXRhYmxlIGNyb3NzLXRvb2xjaGFpbiBpbnN0YWxsZWQsIGl0IGlzIHZlcnkgZWFzeSB0bwotICAgICAgICBkZXZlbG9wIGEgcHJvamVjdCBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgotICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgYSBzaW1wbGUgIkhlbGxvd29ybGQiIGV4YW1wbGUgdGhhdCBzaG93cyBob3cKLSAgICAgICAgdG8gc2V0IHVwLCBjb21waWxlLCBhbmQgcnVuIHRoZSBwcm9qZWN0LgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hbmQtcnVubmluZy1hLXByb2plY3QtYmFzZWQtb24tZ251LWF1dG90b29scyc+Ci0gICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUnVubmluZyBhIFByb2plY3QgQmFzZWQgb24gR05VIEF1dG90b29sczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgc2ltcGxlIEF1dG90b29scy1iYXNlZCBwcm9qZWN0OgotICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHlvdXIgZGlyZWN0b3J5OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIGNsZWFuIGRpcmVjdG9yeSBmb3IgeW91ciBwcm9qZWN0IGFuZCB0aGVuIG1ha2UKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBkaXJlY3RvcnkgeW91ciB3b3JraW5nIGxvY2F0aW9uOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgbWtkaXIgJEhPTUUvaGVsbG93b3JsZAotICAgICAkIGNkICRIT01FL2hlbGxvd29ybGQKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UG9wdWxhdGUgdGhlIGRpcmVjdG9yeTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBDcmVhdGUgPGZpbGVuYW1lPmhlbGxvLmM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Y29uZmlndXJlLmluPC9maWxlbmFtZT4gZmlsZXMgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgPGZpbGVuYW1lPmhlbGxvLmM8L2ZpbGVuYW1lPiwgaW5jbHVkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGxpbmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7Ci0KLSAgICAgbWFpbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZXNlIGxpbmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgYmluX1BST0dSQU1TID0gaGVsbG8KLSAgICAgaGVsbG9fU09VUkNFUyA9IGhlbGxvLmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIDxmaWxlbmFtZT5jb25maWd1cmUuaW48L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZXNlIGxpbmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQUNfSU5JVChoZWxsby5jKQotICAgICBBTV9JTklUX0FVVE9NQUtFKGhlbGxvLDAuMSkKLSAgICAgQUNfUFJPR19DQwotICAgICBBQ19QUk9HX0lOU1RBTEwKLSAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgdGhlIGNyb3NzLXRvb2xjaGFpbgotICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBmaWxlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEluc3RhbGxhdGlvbiBvZiB0aGUgY3Jvc3MtdG9vbGNoYWluIGNyZWF0ZXMgYSBjcm9zcy10b29sY2hhaW4KLSAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGluIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgU0RLCi0gICAgICAgICAgICAgICAgICAgIHdhcyBpbnN0YWxsZWQuCi0gICAgICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgdG9vbHMgdG8gZGV2ZWxvcCB5b3VyIHByb2plY3QsIHlvdSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0aGlzIHNldHVwIHNjcmlwdC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBiZWdpbnMgd2l0aCB0aGUgc3RyaW5nICJlbnZpcm9ubWVudC1zZXR1cCIgYW5kIGNvbnRhaW5zCi0gICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgZm9sbG93ZWQgYnkgdGhlIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAicG9reS1saW51eCIuCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNvdXJjZXMgYSBzY3JpcHQgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBTREsgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSB0aGF0IHVzZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDMyLWJpdCBJbnRlbCB4ODYgQXJjaGl0ZWN0dXJlIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgJkRJU1RST19OQU1FOyBZb2N0byBQcm9qZWN0IHJlbGVhc2U6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzb3VyY2UgL29wdC9wb2t5LyZESVNUUk87L2Vudmlyb25tZW50LXNldHVwLWk1ODYtcG9reS1saW51eAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgbG9jYWwgYWNsb2NhbC5tNAotICAgICAgICAgICAgICAgICAgICBmaWxlcyBhbmQgY3JlYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgR05VIEF1dG90b29scyBnZW5lcmF0ZSB0aGUgbG9jYWwKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFjbG9jYWwubTQ8L2ZpbGVuYW1lPiBmaWxlcyBhbmQgY3JlYXRlIHRoZQotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYWNsb2NhbAotICAgICAkIGF1dG9jb25mCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIGZpbGVzIG5lZWRlZCBieSBHTlUKLSAgICAgICAgICAgICAgICAgICAgY29kaW5nIHN0YW5kYXJkczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBHTlUgY29kaW5nIHN0YW5kYXJkcyByZXF1aXJlIGNlcnRhaW4gZmlsZXMgaW4gb3JkZXIgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IHRvIGJlIGNvbXBsaWFudC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgdGhvc2UgZmlsZXM6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCB0b3VjaCBORVdTIFJFQURNRSBBVVRIT1JTIENoYW5nZUxvZwotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgY29uZmlndXJlCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGdlbmVyYXRlcyB0aGUgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYXV0b21ha2UgLWEKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3Jvc3MtY29tcGlsZSB0aGUgcHJvamVjdDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY29tcGlsZXMgdGhlIHByb2plY3QgdXNpbmcgdGhlIGNyb3NzLWNvbXBpbGVyLgotICAgICAgICAgICAgICAgICAgICBUaGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR1VSRV9GTEFHUyc+PGZpbGVuYW1lPkNPTkZJR1VSRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgcHJvdmlkZXMgdGhlIG1pbmltYWwgYXJndW1lbnRzIGZvcgotICAgICAgICAgICAgICAgICAgICBHTlUgY29uZmlndXJlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgLi9jb25maWd1cmUgJHtDT05GSUdVUkVfRkxBR1N9Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgYW5kIGluc3RhbGwgdGhlIHByb2plY3Q6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgdHdvIGNvbW1hbmRzIGdlbmVyYXRlIGFuZCBpbnN0YWxsIHRoZSBwcm9qZWN0IGludG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGRpcmVjdG9yeToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIG1ha2UKLSAgICAgJCBtYWtlIGluc3RhbGwgREVTVERJUj0uL3RtcAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WZXJpZnkgdGhlIGluc3RhbGxhdGlvbjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYSBzaW1wbGUgd2F5IHRvIHZlcmlmeSB0aGUgaW5zdGFsbGF0aW9uCi0gICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgUnVubmluZyB0aGUgY29tbWFuZCBwcmludHMgdGhlIGFyY2hpdGVjdHVyZSBvbiB3aGljaAotICAgICAgICAgICAgICAgICAgICB0aGUgYmluYXJ5IGZpbGUgY2FuIHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsZWQgY3Jvc3MtdG9vbGNoYWluIHN1cHBvcnRzLgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZmlsZSAuL3RtcC91c3IvbG9jYWwvYmluL2hlbGxvCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4ZWN1dGUgeW91ciBwcm9qZWN0OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRvIGV4ZWN1dGUgdGhlIHByb2plY3QgaW4gdGhlIHNoZWxsLCBzaW1wbHkgZW50ZXIgdGhlIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBhbHNvIGNvcHkgdGhlIGJpbmFyeSB0byB0aGUgYWN0dWFsIHRhcmdldCBoYXJkd2FyZQotICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSBwcm9qZWN0IHRoZXJlIGFzIHdlbGw6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCAuL2hlbGxvCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgQXMgZXhwZWN0ZWQsIHRoZSBwcm9qZWN0IGRpc3BsYXlzIHRoZSAiSGVsbG8gV29ybGQhIiBtZXNzYWdlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ncGFzc2luZy1ob3N0LW9wdGlvbnMnPgotICAgICAgICA8dGl0bGU+UGFzc2luZyBIb3N0IE9wdGlvbnM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9yIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0LCB5b3UgY2FuIHVzZSB0aGUgY3Jvc3MtdG9vbGNoYWluIGJ5IGp1c3QKLSAgICAgICAgICAgIHBhc3NpbmcgdGhlIGFwcHJvcHJpYXRlIGhvc3Qgb3B0aW9uIHRvIDxmaWxlbmFtZT5jb25maWd1cmUuc2g8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIFRoZSBob3N0IG9wdGlvbiB5b3UgdXNlIGlzIGRlcml2ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgc2V0dXAKLSAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIGNyb3NzLXRvb2xjaGFpbi4KLSAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgaG9zdCBvcHRpb24gZm9yIGFuIEFSTS1iYXNlZCB0YXJnZXQgdGhhdCB1c2VzIHRoZSBHTlUgRUFCSQotICAgICAgICAgICAgaXMgPGZpbGVuYW1lPmFybXY1dGUtcG9reS1saW51eC1nbnVlYWJpPC9maWxlbmFtZT4uCi0gICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0IGlzCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXAtYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIFRodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3b3JrcyB0byB1cGRhdGUgeW91ciBwcm9qZWN0IGFuZAotICAgICAgICAgICAgcmVidWlsZCBpdCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgY3Jvc3MtdG9vbGNoYWluIHRvb2xzOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIC4vY29uZmlndXJlIC0taG9zdD1hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaSBcCi0gICAgICAgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9PHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4KKyAgICAgICQgLiAvb3B0L3Bva3kvJkRJU1RSTzsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IHNjcmlwdCByZXN1bHRzIGluIHByb2JsZW1zIHJlY29nbml6aW5nIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXdpdGgtbGlidG9vbC1zeXNyb290PTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnN5c3Jvb3QtZGlyPC9yZXBsYWNlYWJsZT4gb3B0aW9uLAotICAgICAgICAgICAgICAgIHJlZ2VuZXJhdGUgdGhlIHNjcmlwdCB0byBlbmFibGUgdGhlIHN1cHBvcnQgYnkgZG9pbmcgdGhlIGZvbGxvd2luZyBhbmQgdGhlbgotICAgICAgICAgICAgICAgIHJ1biB0aGUgc2NyaXB0IGFnYWluOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBsaWJ0b29saXplIC0tYXV0b21ha2UKLSAgICAgJCBhY2xvY2FsIC1JICR7T0VDT1JFX05BVElWRV9TWVNST09UfS91c3Ivc2hhcmUvYWNsb2NhbCBcCi0gICAgICAgIFstSSA8cmVwbGFjZWFibGU+ZGlyX2NvbnRhaW5pbmdfeW91cl9wcm9qZWN0LXNwZWNpZmljX200X21hY3JvczwvcmVwbGFjZWFibGU+XQotICAgICAkIGF1dG9jb25mCi0gICAgICQgYXV0b2hlYWRlcgotICAgICAkIGF1dG9tYWtlIC1hCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0nbWFrZWZpbGUtYmFzZWQtcHJvamVjdHMnPgotICAgIDx0aXRsZT5NYWtlZmlsZS1CYXNlZCBQcm9qZWN0czwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgRm9yIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLCB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgICBlc3RhYmxpc2hlZCBieSBydW5uaW5nIHRoZSBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0Ci0gICAgICAgIGFyZSBzdWJqZWN0IHRvIGdlbmVyYWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBydWxlcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVG8gaWxsdXN0cmF0ZSB0aGlzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGZvdXIgY3Jvc3MtdG9vbGNoYWluCi0gICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlczoKLSAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0MnPkNDPC91bGluaz49aTU4Ni1wb2t5LWxpbnV4LWdjYyAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vb3B0L3Bva3kvMS44L3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eAotICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEQnPkxEPC91bGluaz49aTU4Ni1wb2t5LWxpbnV4LWxkIC0tc3lzcm9vdD0vb3B0L3Bva3kvMS44L3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eAotICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz5DRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCi0gICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DWFhGTEFHUyc+Q1hYRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCi0gICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgTm93LCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRocmVlIGNhc2VzOgotICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DYXNlIDEgLSBObyBWYXJpYWJsZXMgU2V0IGluIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBub3Qgc3BlY2lmaWNhbGx5IHNldCBpbiB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiwgdGhlIHZhcmlhYmxlcyByZXRhaW4gdGhlaXIKLSAgICAgICAgICAgICAgICB2YWx1ZXMgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DYXNlIDIgLSBWYXJpYWJsZXMgU2V0IGluIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFNwZWNpZmljYWxseSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBkdXJpbmcgdGhlIGJ1aWxkIHJlc3VsdHMgaW4gdGhlCi0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2YgdGhlIHZhcmlhYmxlcyBiZWluZyBvdmVyd3JpdHRlbi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2FzZSAzIC0gVmFyaWFibGVzIFNldCB3aGVuIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBpcyBFeGVjdXRlZCBmcm9tIHRoZSBDb21tYW5kIExpbmU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBFeGVjdXRpbmcgdGhlIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+IGZyb20gdGhlIGNvbW1hbmQKLSAgICAgICAgICAgICAgICBsaW5lIHJlc3VsdHMgaW4gdGhlIHZhcmlhYmxlcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoCi0gICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIGNvbnRlbnQgcmVnYXJkbGVzcyBvZiB3aGF0IGlzIGJlaW5nIHNldCBpbiB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IGNvbnNpZGVyZWQgdW5sZXNzCi0gICAgICAgICAgICAgICAgeW91IHVzZSB0aGUgIi1lIiBmbGFnIGR1cmluZyB0aGUgYnVpbGQ6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIG1ha2UgLWUgPHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgZmxhZywgdGhlbiB0aGUgZW52aXJvbm1lbnQgdmFsdWVzIG9mIHRoZQotICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBvdmVycmlkZSBhbnkgdmFyaWFibGVzIHNwZWNpZmljYWxseSBzZXQgaW4gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIEZvciB0aGUgbGlzdCBvZiB2YXJpYWJsZXMgc2V0IHVwIGJ5IHRoZSBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQKLSAgICAgICAgICAgIHNldHVwIHNjcmlwdCwgc2VlIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1ydW5uaW5nLXRoZS1zZGstZW52aXJvbm1lbnQtc2V0dXAtc2NyaXB0Jz5SdW5uaW5nIHRoZSBTREsgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0PC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgIDwvbm90ZT4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSdzZGstZGV2ZWxvcGluZy1hcHBsaWNhdGlvbnMtdXNpbmctZWNsaXBzZSc+Ci0gICAgPHRpdGxlPkRldmVsb3BpbmcgQXBwbGljYXRpb25zIFVzaW5nIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhlIHBvcHVsYXIgRWNsaXBzZSBJREUsIHlvdSBjYW4gdXNlIGFuCi0gICAgICAgIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiB0byBhbGxvdyB5b3UgdG8gZGV2ZWxvcCwgZGVwbG95LCBhbmQgdGVzdCB5b3VyCi0gICAgICAgIGFwcGxpY2F0aW9uIGFsbCBmcm9tIHdpdGhpbiBFY2xpcHNlLgotICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGdlbmVyYWwgd29ya2Zsb3cgdXNpbmcgdGhlIFNESyBhbmQgRWNsaXBzZQotICAgICAgICBhbmQgaG93IHRvIGNvbmZpZ3VyZSBhbmQgc2V0IHVwIEVjbGlwc2UuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9J3dvcmtmbG93LXVzaW5nLWVjbGlwc2UnPgotCi0gICAgICAgIDx0aXRsZT5Xb3JrZmxvdyBVc2luZyA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPjwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBhbmQgc3VwcG9ydGluZyBsaXN0IHN1bW1hcml6ZSB0aGUgYXBwbGljYXRpb24KLSAgICAgICAgICAgIGRldmVsb3BtZW50IGdlbmVyYWwgd29ya2Zsb3cgdGhhdCBlbXBsb3lzIGJvdGggdGhlIFNESyBFY2xpcHNlLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc2RrLWVjbGlwc2UtZGV2LWZsb3cucG5nIgotICAgICAgICAgICAgICAgIHdpZHRoPSI3aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgdGhlIGhvc3Qgc3lzdGVtIGZvciB0aGUgWW9jdG8gUHJvamVjdDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICBTZWUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIgc2VjdGlvbnMgYm90aAotICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciByZXF1aXJlbWVudHMuCi0gICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGJlIHN1cmUgeW91ciBob3N0IHN5c3RlbSBoYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54dGVybTwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbGVkLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlY3VyZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdGFyZ2V0IGltYWdlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGhhdmUgYSB0YXJnZXQga2VybmVsIGltYWdlIHRoYXQgaGFzIGJlZW4gYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZAotICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5EZXBlbmRpbmcgb24gd2hldGhlciB0aGUgWW9jdG8gUHJvamVjdCBoYXMgYSBwcmUtYnVpbHQgaW1hZ2UgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgd2hlcmUgeW91IGFyZSBnb2luZyB0byBydW4gdGhlIGltYWdlIHdoaWxlIHlvdSBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgKFFFTVUgb3IgcmVhbCBoYXJkd2FyZSksIHRoZSBhcmVhIGZyb20gd2hpY2ggeW91IGdldCB0aGUgaW1hZ2UgZGlmZmVycy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvd25sb2FkIHRoZSBpbWFnZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48ZmlsZW5hbWU+bWFjaGluZXM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzdXBwb3J0ZWQgYW5kIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGVzdCB5b3VyIGFwcGxpY2F0aW9uIG9uIGFjdHVhbCBoYXJkd2FyZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG93bmxvYWQgdGhlIGltYWdlIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoaW5lcy9xZW11PC9maWxlbmFtZT48L3VsaW5rPiBpZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgUUVNVQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXVsYXRvci48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgeW91ciBpbWFnZSBpZiB5b3UgY2Fubm90IGZpbmQgYSBwcmUtYnVpbHQgaW1hZ2UgdGhhdCBtYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHNpbWlsYXIgdG8gYSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeSB0aGUga2VybmVsIGltYWdlIGJlZm9yZSB5b3UgYnVpbGQgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWwgZm9yIGFuIGV4YW1wbGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBpbmZvcm1hdGlvbiBvbiBwcmUtYnVpbHQga2VybmVsIGltYWdlIG5hbWluZyBzY2hlbWVzIGZvciBpbWFnZXMKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gcnVuIG9uIHRoZSBRRU1VIGVtdWxhdG9yLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1tYW51YWwnPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCB0aGUgU0RLPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBTREsgcHJvdmlkZXMgYSB0YXJnZXQtc3BlY2lmaWMgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluLCB0aGUgcm9vdCBmaWxlc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICB0aGUgUUVNVSBlbXVsYXRvciwgYW5kIG90aGVyIHRvb2xzIHRoYXQgY2FuIGhlbHAgeW91IGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZSBTREssIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1pbnN0YWxsaW5nLXRoZS1zZGsnPkluc3RhbGxpbmcgdGhlIFNESzwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2VjdXJlIHRoZSB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGZpbmQgYW5kIGRvd25sb2FkIHRoZSBhcHByb3ByaWF0ZSByb290IGZpbGVzeXN0ZW0gYW5kCi0gICAgICAgICAgICAgICAgICAgIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4uPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgdGhlIHRhcmJhbGxzIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGluIHRoZSBzYW1lIGFyZWEgdXNlZAotICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGtlcm5lbCBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGltYWdlIHlvdSBhcmUgcnVubmluZywgdGhlIHJvb3QgZmlsZXN5c3RlbSB5b3UgbmVlZCBkaWZmZXJzLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBkZXZlbG9waW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgcnVucyBvbiBhbiBpbWFnZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIFNhdG8sIHlvdSBuZWVkIHRvIGdldCBhIHJvb3QgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIFNhdG8uPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgYXQKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz48ZmlsZW5hbWU+dG9vbGNoYWluczwvZmlsZW5hbWU+PC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gZ2V0IHRoZSBjb3JyZWN0IHRvb2xjaGFpbiBmb3IgeW91ciBkZXZlbG9wbWVudCBob3N0IGFuZCB5b3VyCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUuCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3Nkay1sb2NhdGluZy1wcmUtYnVpbHQtc2RrLWluc3RhbGxlcnMnPkxvY2F0aW5nIFByZS1CdWlsdCBTREsgSW5zdGFsbGVyczwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1pbnN0YWxsaW5nLXRoZS1zZGsnPkluc3RhbGxpbmcgdGhlIFNESzwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluc3RhbGxhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYW5kIGJ1aWxkIHlvdXIgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IG5lZWQgdG8gaGF2ZSBzb3VyY2UgZmlsZXMgZm9yIHlvdXIgYXBwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZpbGVzLCB5b3UgY2FuIHVzZSB0aGUgRWNsaXBzZSBJREUgdG8gaW1wb3J0IHRoZW0gYW5kIGJ1aWxkIHRoZQotICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBFY2xpcHNlLCB5b3UgbmVlZCB0byB1c2UgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIHlvdSBoYXZlCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCB0byBjcmVhdGUgdGhlIGltYWdlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBpbWFnZSB3aXRoIHRoZSBhcHBsaWNhdGlvbjwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBFY2xpcHNlIElERSwgeW91IGNhbiBkZXBsb3kgeW91ciBpbWFnZSB0byB0aGUgaGFyZHdhcmUgb3IgdG8KLSAgICAgICAgICAgICAgICAgICAgUUVNVSB0aHJvdWdoIHRoZSBwcm9qZWN0J3MgcHJlZmVyZW5jZXMuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBFY2xpcHNlIElERSwgdGhlbiB5b3UgbmVlZCB0byBkZXBsb3kgdGhlIGFwcGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSBoYXJkd2FyZSB1c2luZyBvdGhlciBtZXRob2RzLgotICAgICAgICAgICAgICAgICAgICBPciwgaWYgeW91IGFyZSB1c2luZyBRRU1VLCB5b3UgbmVlZCB0byB1c2UgdGhhdCB0b29sIGFuZAotICAgICAgICAgICAgICAgICAgICBsb2FkIHlvdXIgaW1hZ2UgaW4gZm9yIHRlc3RpbmcuCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAotICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZXN0IGFuZCBkZWJ1ZyB0aGUgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgT25jZSB5b3VyIGFwcGxpY2F0aW9uIGlzIGRlcGxveWVkLCB5b3UgbmVlZCB0byB0ZXN0IGl0LgotICAgICAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgY2FuIHVzZSB0aGUgZGVidWdnaW5nIGVudmlyb25tZW50IGFsb25nIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgIHNldCBvZiBpbnN0YWxsZWQgdXNlci1zcGFjZSB0b29scyB0byBkZWJ1ZyB5b3VyIGFwcGxpY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZSBzYW1lIHVzZXItc3BhY2UgdG9vbHMgYXJlIGF2YWlsYWJsZSBzZXBhcmF0ZWx5IGlmIHlvdSBjaG9vc2UKLSAgICAgICAgICAgICAgICAgICAgbm90IHRvIHVzZSB0aGUgRWNsaXBzZSBJREUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICBBZ2FpbiwgcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1pbnN0YWxsZWQtc3RhbmRhcmQtc2RrLWRpcmVjdG9yeS1zdHJ1Y3R1cmUnPkluc3RhbGxlZCBTdGFuZGFyZCBTREsgRGlyZWN0b3J5IFN0cnVjdHVyZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlc3VsdGluZyBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mCisgICAgICAgICAgICB0aGUgaW5zdGFsbGVkIFNESy4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSdhZHQtZWNsaXBzZSc+Ci0gICAgICAgIDx0aXRsZT5Xb3JraW5nIFdpdGhpbiBFY2xpcHNlPC90aXRsZT4KKyAgICA8c2VjdGlvbiBpZD0nc2RrLXJ1bm5pbmctdGhlLXNkay1lbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQnPgorICAgICAgICA8dGl0bGU+UnVubmluZyB0aGUgU0RLIEVudmlyb25tZW50IFNldHVwIFNjcmlwdDwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgRWNsaXBzZSBJREUgaXMgYSBwb3B1bGFyIGRldmVsb3BtZW50IGVudmlyb25tZW50IGFuZCBpdCBmdWxseQotICAgICAgICAgICAgc3VwcG9ydHMgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGlzIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgYm90aCB0aGUgTHVuYQotICAgICAgICAgICAgICAgIGFuZCBLZXBsZXIgdmVyc2lvbnMgb2YgdGhlIEVjbGlwc2UgSURFLgotICAgICAgICAgICAgICAgIFRodXMsIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcHJvdmlkZXMgc2V0dXAgaW5mb3JtYXRpb24gZm9yCi0gICAgICAgICAgICAgICAgYm90aCB2ZXJzaW9ucy4KLSAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIFNESyBpbnN0YWxsZWQsIHlvdSBtdXN0IHJ1biB0aGUgU0RLIGVudmlyb25tZW50CisgICAgICAgICAgICBzZXR1cCBzY3JpcHQgYmVmb3JlIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGl0LgorICAgICAgICAgICAgVGhpcyBzZXR1cCBzY3JpcHQgcmVzaWRlcyBpbiB0aGUgZGlyZWN0b3J5IHlvdSBjaG9zZSB3aGVuIHlvdQorICAgICAgICAgICAgaW5zdGFsbGVkIHRoZSBTREsuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gd2hlcmUgdGhpcyBzZXR1cCBzY3JpcHQgY2FuIHJlc2lkZSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1hcHBlbmRpeC1vYnRhaW4nPk9idGFpbmluZyB0aGUgU0RLPC9saW5rPiIKKyAgICAgICAgICAgIEFwcGVuZGl4LgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIHlvdSBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdCBQbHVnLWluCi0gICAgICAgICAgICBpbnRvIHRoZSBFY2xpcHNlIElERSwgeW91IG1heGltaXplIHlvdXIgWW9jdG8gUHJvamVjdCBleHBlcmllbmNlLgotICAgICAgICAgICAgSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIFBsdWctaW4gcmVzdWx0cyBpbiBhbiBlbnZpcm9ubWVudAotICAgICAgICAgICAgdGhhdCBoYXMgZXh0ZW5zaW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gbGV0IHlvdSBtb3JlIGVhc2lseQotICAgICAgICAgICAgZGV2ZWxvcCBzb2Z0d2FyZS4KLSAgICAgICAgICAgIFRoZXNlIGV4dGVuc2lvbnMgYWxsb3cgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCBkZXBsb3ltZW50LCBhbmQKLSAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiB5b3VyIG91dHB1dCBpbnRvIGEgUUVNVSBlbXVsYXRpb24gc2Vzc2lvbiBhcyB3ZWxsIGFzCi0gICAgICAgICAgICBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlLgotICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBlcmZvcm0gY3Jvc3MtZGVidWdnaW5nIGFuZCBwcm9maWxpbmcuCi0gICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgYWxzbyBzdXBwb3J0cyBhIHN1aXRlIG9mIHRvb2xzIHRoYXQgYWxsb3dzIHlvdQotICAgICAgICAgICAgdG8gcGVyZm9ybSByZW1vdGUgcHJvZmlsaW5nLCB0cmFjaW5nLCBjb2xsZWN0aW9uIG9mIHBvd2VyIGRhdGEsCi0gICAgICAgICAgICBjb2xsZWN0aW9uIG9mIGxhdGVuY3kgZGF0YSwgYW5kIGNvbGxlY3Rpb24gb2YgcGVyZm9ybWFuY2UgZGF0YS4KKyAgICAgICAgICAgIEJlZm9yZSBydW5uaW5nIHRoZSBzY3JpcHQsIGJlIHN1cmUgaXQgaXMgdGhlIG9uZSB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgICAgICBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgZGV2ZWxvcGluZy4KKyAgICAgICAgICAgIEVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgYmVnaW4gd2l0aCB0aGUgc3RyaW5nCisgICAgICAgICAgICAiPGZpbGVuYW1lPmVudmlyb25tZW50LXNldHVwPC9maWxlbmFtZT4iIGFuZCBpbmNsdWRlIGFzIHBhcnQgb2YKKyAgICAgICAgICAgIHRoZWlyIG5hbWUgdGhlIHR1bmVkIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQgdG8gc291cmNlIGEgc2V0dXAgc2NyaXB0IGZvciBhbiBJQS1iYXNlZAorICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUgdXNpbmcgaTU4NiB0dW5pbmcgYW5kIGxvY2F0ZWQgaW4gdGhlIGRlZmF1bHQgU0RLCisgICAgICAgICAgICBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIC9vcHQvcG9reS8mRElTVFJPOy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGUgc2V0dXAgc2NyaXB0LCB0aGUgc2FtZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCisgICAgICAgICAgICBkZWZpbmVkIGFzIGFyZSB3aGVuIHlvdSBydW4gdGhlIHNldHVwIHNjcmlwdCBmb3IgYW4gZXh0ZW5zaWJsZSBTREsuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLXJ1bm5pbmctdGhlLWV4dGVuc2libGUtc2RrLWVudmlyb25tZW50LXNldHVwLXNjcmlwdCc+UnVubmluZyB0aGUgRXh0ZW5zaWJsZSBTREsgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBJREUKLSAgICAgICAgICAgIFlvY3RvIFBsdWctaW4gYW5kIGhvdyB0byB1c2UgaXQgdG8gZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtdGhlLWVjbGlwc2UtaWRlJz4KLSAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBFY2xpcHNlIElERTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIGRldmVsb3Agd2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0YWxsIHRoZSBvcHRpbWFsIHZlcnNpb24gb2YgdGhlIEVjbGlwc2UKLSAgICAgICAgICAgICAgICAgICAgICAgSURFLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJlIHRoZSBFY2xpcHNlIElERS4KLSAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4uCi0gICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJlIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4uCi0gICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIEVjbGlwc2UgZnJvbSB5b3VyIGRpc3RyaWJ1dGlvbidzIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBpbnN0YWxsIEVjbGlwc2UgZnJvbSB0aGUgb2ZmaWNpYWwgRWNsaXBzZQotICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCBzaXRlIGFzIGRpcmVjdGVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0naW5zdGFsbGluZy1lY2xpcHNlLWlkZSc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIEVjbGlwc2UgSURFPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBoYXZlIHRoZSBMdW5hIFNSMiAoNC40LjIpCi0gICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIEVjbGlwc2UgSURFIGluc3RhbGxlZCBvbiB5b3VyIGRldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGN1cnJlbnRseSBoYXZlIHRoZSBLZXBsZXIgNC4zLjIgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYW5kIHlvdSBkbyBub3Qgd2FudCB0byB1cGdyYWRlIHRoZSBJREUsIHlvdSBjYW4KLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIEtlcGxlciB0byB3b3JrIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB0aGUgTHVuYSBTUjIgKDQuNC4yKSBFY2xpcHNlIElERQotICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQsIHlvdSBjYW4gZmluZCB0aGUgdGFyYmFsbCBhdAotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmRUNMSVBTRV9NQUlOX1VSTDsnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICBGcm9tIHRoYXQgc2l0ZSwgY2hvb3NlIHRoZSBhcHByb3ByaWF0ZSBkb3dubG9hZCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAiRWNsaXBzZSBJREUgZm9yIEMvQysrIERldmVsb3BlcnMiLgotICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIEVjbGlwc2UgUGxhdGZvcm0sIHRoZSBKYXZhCi0gICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IFRvb2xzIChKRFQpLCBhbmQgdGhlIFBsdWctaW4gRGV2ZWxvcG1lbnQKLSAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgZG93bmxvYWRlZCB0aGUgdGFyYmFsbCwgZXh0cmFjdCBpdCBpbnRvIGEKLSAgICAgICAgICAgICAgICAgICAgY2xlYW4gZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB1bnBhY2sgYW5kIGluc3RhbGwgdGhlCi0gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkZWQgRWNsaXBzZSBJREUgdGFyYmFsbCBpbnRvIGEgY2xlYW4gZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBkZWZhdWx0IG5hbWUgPGZpbGVuYW1lPmVjbGlwc2U8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIH4KLSAgICAgJCB0YXIgLXh6dmYgfi9Eb3dubG9hZHMvZWNsaXBzZS1jcHAtbHVuYS1TUjItbGludXgtZ3RrLXg4Nl82NC50YXIuZ3oKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLWlkZSc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBFY2xpcHNlIElERTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBzdGVwcyBuZWVkZWQgdG8gY29uZmlndXJlIHRoZQotICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQmVmb3JlIGluc3RhbGxpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4sCi0gICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBJREUuCi0gICAgICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBnZW5lcmFsIHN0ZXBzOgotICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RhcnQgdGhlIEVjbGlwc2UgSURFLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2Ugc3VyZSB5b3UgYXJlIGluIHlvdXIgV29ya2JlbmNoIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCAiSW5zdGFsbCBOZXcgU29mdHdhcmUiIGZyb20gdGhlICJIZWxwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwtZG93biBtZW51LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MdW5hIC0gJkVDTElQU0VfTFVOQV9VUkw7PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiV29yayB3aXRoOiIgcHVsbC1kb3duIG1lbnUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBLZXBsZXIsIHNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S2VwbGVyIC0gJkVDTElQU0VfS0VQTEVSX1VSTDs8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgdGhlIGJveCBuZXh0IHRvICJMaW51eCBUb29scyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZWN0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MaW51eCBUb29scyBMVFRuZyBUcmFjZXIgQ29udHJvbDwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MaW51eCBUb29scyBMVFRuZyBVc2Vyc3BhY2UgQW5hbHlzaXM8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TFRUbmcgS2VybmVsIEFuYWx5c2lzPC9maWxlbmFtZT4gYm94ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlc2Ugc2VsZWN0aW9ucyBkbyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbWVhbnMgdGhlIGl0ZW1zIGFyZSBhbHJlYWR5IGluc3RhbGxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEtlcGxlciwgc2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MVFRuZyAtIExpbnV4IFRyYWNpbmcgVG9vbGtpdDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwYW5kIHRoZSBib3ggbmV4dCB0byAiTW9iaWxlIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSBEZXZlbG9wbWVudCIgYW5kIHNlbGVjdCB0aGUgZm9sbG93aW5nIGJveGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFnYWluLCBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBpdGVtcyBhcmUgbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24sIHRoYXQgbWVhbnMgdGhlIGl0ZW1zIGFyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW5zdGFsbGVkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Qy9DKysgUmVtb3RlIExhdW5jaCAoUmVxdWlyZXMgUlNFIFJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIpPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5SZW1vdGUgU3lzdGVtIEV4cGxvcmVyIEVuZC11c2VyIFJ1bnRpbWU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgVXNlciBBY3Rpb25zPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5UYXJnZXQgTWFuYWdlbWVudCBUZXJtaW5hbCAoQ29yZSBTREspPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5UQ0YgUmVtb3RlIFN5c3RlbSBFeHBsb3JlciBhZGQtaW48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlRDRiBUYXJnZXQgRXhwbG9yZXI8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCB0aGUgYm94IG5leHQgdG8gIlByb2dyYW1taW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2VzIiBhbmQgc2VsZWN0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DL0MrKyBBdXRvdG9vbHMgU3VwcG9ydDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5DL0MrKyBEZXZlbG9wbWVudCBUb29sczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEx1bmEsIHRoZXNlIGl0ZW1zIGRvIG5vdCBhcHBlYXIgb24gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGV5IGFyZSBhbHJlYWR5IGluc3RhbGxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIGFuZCByZXN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEVjbGlwc2UgSURFLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2luc3RhbGxpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgb3IgQWNjZXNzaW5nIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW48L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gaW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGludG8gdGhlIEVjbGlwc2UKLSAgICAgICAgICAgICAgICAgICAgSURFIG9uZSBvZiB0d28gd2F5czogIHVzZSB0aGUgWW9jdG8gUHJvamVjdCdzIEVjbGlwc2UKLSAgICAgICAgICAgICAgICAgICAgVXBkYXRlIHNpdGUgdG8gaW5zdGFsbCB0aGUgcHJlLWJ1aWx0IHBsdWctaW4gb3IgYnVpbGQgYW5kCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbGwgdGhlIHBsdWctaW4gZnJvbSB0aGUgbGF0ZXN0IHNvdXJjZSBjb2RlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctc29mdHdhcmUnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUHJlLWJ1aWx0IFBsdWctaW4gZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBFY2xpcHNlIFVwZGF0ZSBTaXRlPC90aXRsZT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBmcm9tIHRoZSB1cGRhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpdGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RhcnQgdXAgdGhlIEVjbGlwc2UgSURFLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gRWNsaXBzZSwgc2VsZWN0ICJJbnN0YWxsIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSIgZnJvbSB0aGUgIkhlbHAiIG1lbnUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQWRkLi4uIiBpbiB0aGUgIldvcmsgd2l0aDoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZWEuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW50ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZFQ0xJUFNFX0RMX1BMVUdJTl9VUkw7L2x1bmE8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgVVJMIGZpZWxkIGFuZCBwcm92aWRlIGEgbWVhbmluZ2Z1bCBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSAiTmFtZSIgZmllbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBLZXBsZXIsIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZFQ0xJUFNFX0RMX1BMVUdJTl9VUkw7L2tlcGxlcjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgVVJMIGZpZWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJPSyIgdG8gaGF2ZSB0aGUgZW50cnkgYWRkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlICJXb3JrIHdpdGg6IiBkcm9wLWRvd24gbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCB0aGUgZW50cnkgZm9yIHRoZSBwbHVnLWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlICJXb3JrIHdpdGg6IiBkcm9wLWRvd24gbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoZWNrIHRoZSBib3hlcyBuZXh0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IEFEVCBQbHVnLWluPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IEJpdGJha2UgQ29tbWFuZGVyIFBsdWctaW48L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IERvY3VtZW50YXRpb24gcGx1Zy1pbjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgdGhlIHJlbWFpbmluZyBzb2Z0d2FyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gc3RlcHMgYW5kIHRoZW4gcmVzdGFydCB0aGUgRWNsaXBzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJREUgdG8gZmluaXNoIHRoZSBpbnN0YWxsYXRpb24gb2YgdGhlIHBsdWctaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgc29mdHdhcmUgdGhhdCBjb250YWlucyB1bnNpZ25lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd6aXAtZmlsZS1tZXRob2QnPgotICAgICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBQbHVnLWluIFVzaW5nIHRoZSBMYXRlc3QgU291cmNlIENvZGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUbyBpbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4gZnJvbSB0aGUgbGF0ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSwgZm9sbG93IHRoZXNlIHN0ZXBzOgotICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCB1c2luZyBPcGVuSkRLIHRvIGJ1aWxkIHRoZSBwbHVnLWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIE9yYWNsZSBKREsuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvbid0IGhhdmUgdGhhdCwgZ28gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvamF2YS9qYXZhc2UvZG93bmxvYWRzL2pkazctZG93bmxvYWRzLTE4ODAyNjAuaHRtbCc+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZG93bmxvYWQgdGhlIGxhdGVzdCBhcHByb3ByaWF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEphdmEgU0UgRGV2ZWxvcG1lbnQgS2l0IHRhcmJhbGwgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdCBpdCBpbnRvIHlvdXIgaG9tZSBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNoZWxsIHlvdSBhcmUgZ29pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkbyB5b3VyIHdvcmssIGV4cG9ydCB0aGUgbG9jYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgT3JhY2xlIEphdmEuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIHN0ZXAgY3JlYXRlcyBhIG5ldyBmb2xkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGV4dHJhY3RlZCBzb2Z0d2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byB1c2UgdGhlIGZvbGxvd2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHBvcnQ8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHByb3ZpZGUgdGhlIHNwZWNpZmljIGxvY2F0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZXhwb3J0IFBBVEg9fi88cmVwbGFjZWFibGU+ZXh0cmFjdGVkX2pka19sb2NhdGlvbjwvcmVwbGFjZWFibGU+L2JpbjokUEFUSAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBzYW1lIHNoZWxsLCBjcmVhdGUgYSBHaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB3aXRoOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2QgfgotICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9lY2xpcHNlLXBva3kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB0byBjaGVja291dCB0aGUgY29ycmVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIEx1bmEsIGRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBnaXQgY2hlY2tvdXQgbHVuYS95b2N0by0mRElTVFJPOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcHV0cyB5b3UgaW4gYSBkZXRhY2hlZCBIRUFEIHN0YXRlLCB3aGljaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmaW5lIHNpbmNlIHlvdSBhcmUgb25seSBnb2luZyB0byBiZSBidWlsZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGRldmVsb3BpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBidWlsZGluZyBrZXBsZXIsIGNoZWNrb3V0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcGxlci95b2N0by0mRElTVFJPOzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5nZSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZSBHaXQgcmVwb3NpdG9yeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIHNjcmlwdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBydW5uaW5nIHRoZSBzZXR1cCBzY3JpcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCAuL3NldHVwLnNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gdGhlIHNjcmlwdCBmaW5pc2hlcyBleGVjdXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHByb21wdHMgeW91IHdpdGggaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBydW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5idWlsZC5zaDwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWxzbyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIEdpdCByZXBvc2l0b3J5IGNyZWF0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGFzIGRpcmVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgdGhlIHRhZyBuYW1lLCBkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgYW5kIGEgcmVsZWFzZSBuYW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bHVuYS95b2N0by0mRElTVFJPOzwvZmlsZW5hbWU+IHRhZywgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYXN0ZXI8L2ZpbGVuYW1lPiBkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUVfTk9fQ0FQOzwvZmlsZW5hbWU+IGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgRUNMSVBTRV9IT01FPS9ob21lL3Njb3R0cmlmL2VjbGlwc2UtcG9reS9zY3JpcHRzL2VjbGlwc2UgLi9idWlsZC5zaCBsdW5hL3lvY3RvLSZESVNUUk87IG1hc3RlciAmRElTVFJPX05BTUVfTk9fQ0FQOyAyPiZhbXA7MSB8IHRlZSAtYSBidWlsZC5sb2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBzY3JpcHQsIHRoZSBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcmcueW9jdG8uc2RrLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJlbGVhc2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZGF0ZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi1hcmNoaXZlLnppcDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIG5lY2Vzc2FyeSwgc3RhcnQgdGhlIEVjbGlwc2UgSURFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBiZSBzdXJlIHlvdSBhcmUgaW4gdGhlIFdvcmtiZW5jaC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiSW5zdGFsbCBOZXcgU29mdHdhcmUiIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJIZWxwIiBwdWxsLWRvd24gbWVudS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJBZGQiLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGFueXRoaW5nIHlvdSB3YW50IGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZSIgZmllbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQXJjaGl2ZSIgYW5kIGJyb3dzZSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWklQIGZpbGUgeW91IGJ1aWx0IGluIHN0ZXAgZWlnaHQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgWklQIGZpbGUgc2hvdWxkIG5vdCBiZSAidW56aXBwZWQiLCBhbmQgbXVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0aGUgPGZpbGVuYW1lPiphcmNoaXZlLnppcDwvZmlsZW5hbWU+IGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBieSBydW5uaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQuc2g8L2ZpbGVuYW1lPiBzY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayB0aGUgIk9LIiBidXR0b24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGVjayB0aGUgYm94ZXMgdGhhdCBhcHBlYXIgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxhdGlvbiB3aW5kb3cgdG8gaW5zdGFsbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIFBsdWctaW48L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQml0YmFrZSBDb21tYW5kZXIgUGx1Zy1pbjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IERvY3VtZW50YXRpb24gcGx1Zy1pbjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluaXNoIHRoZSBpbnN0YWxsYXRpb24gYnkgY2xpY2tpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgYnV0dG9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zIHVuc2lnbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0YXJ0IHRoZSBFY2xpcHNlIElERSBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBZb2N0byBQbHVnLWluIGFzIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgotICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBDb25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGludm9sdmVzIHNldHRpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIENyb3NzIENvbXBpbGVyIG9wdGlvbnMgYW5kIHRoZSBUYXJnZXQgb3B0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb25zIHlvdSBjaG9vc2UgYmVjb21lIHRoZSBkZWZhdWx0IHNldHRpbmdzCi0gICAgICAgICAgICAgICAgICAgIGZvciBhbGwgcHJvamVjdHMuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBkbyBoYXZlIG9wcG9ydHVuaXRpZXMgdG8gY2hhbmdlIHRoZW0gbGF0ZXIgd2hlbgotICAgICAgICAgICAgICAgICAgICB5b3UgY29uZmlndXJlIHRoZSBwcm9qZWN0IChzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uKS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVG8gc3RhcnQsIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgZnJvbSB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNob29zZSAiUHJlZmVyZW5jZXMiIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmRvdyIgbWVudSB0byBkaXNwbGF5IHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIllvY3RvIFByb2plY3QgQURUIiB0byBkaXNwbGF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gc2NyZWVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWNyb3NzLWNvbXBpbGVyLW9wdGlvbnMnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLUNvbXBpbGVyIE9wdGlvbnM8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZSBDcm9zcyBDb21waWxlciBPcHRpb25zLCB5b3UgbXVzdCBzZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRvb2xjaGFpbiwgcG9pbnQgdG8gdGhlIHRvb2xjaGFpbiwgc3BlY2lmeQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgbG9jYXRpb24sIGFuZCBzZWxlY3QgdGhlIHRhcmdldAotICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlbGVjdGluZyB0aGUgVG9vbGNoYWluIFR5cGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIGJldHdlZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN0YW5kYWxvbmUgcHJlLWJ1aWx0IHRvb2xjaGFpbjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIENyb3NzIENvbXBpbGVyIE9wdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIFByZS1idWlsdCBUb29sY2hhaW46PC9maWxlbmFtZT48L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBtb2RlIHdoZW4geW91IGFyZSB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0YW5kLWFsb25lIGNyb3NzLXRvb2xjaGFpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgYW5kIGRvIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJ1aWxkIGEgdGFyZ2V0IGltYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB5b3UganVzdCB3YW50IHRvIHVzZSBhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG9vbGNoYWluIG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4aXN0aW5nIGtlcm5lbCBhbmQgdGFyZ2V0IHJvb3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBTeXN0ZW0gRGVyaXZlZCBUb29sY2hhaW46PC9maWxlbmFtZT48L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBtb2RlIGlmIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4gaGFzIGJlZW4gaW5zdGFsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBidWlsdCBhcyBwYXJ0IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIHVzaW5nIHRoZSB0b29sY2hhaW4gYnVuZGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIEJ1aWxkIERpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb2ludCB0byB0aGUgVG9vbGNoYWluOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYSBzdGFuZC1hbG9uZSBwcmUtYnVpbHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB5b3Ugc2hvdWxkIGJlIHBvaW50aW5nIHRvIHdoZXJlIGl0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxpbmctdGhlLXNkayc+SW5zdGFsbGluZyB0aGUgU0RLPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBTREsgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSB1c2luZyBhIHN5c3RlbS1kZXJpdmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiwgdGhlIHBhdGggeW91IHByb3ZpZGUgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VG9vbGNoYWluIFJvb3QgTG9jYXRpb248L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWJ1aWxkaW5nLWFuLXNkay1pbnN0YWxsZXInPkJ1aWxkaW5nIGFuIFNESyBJbnN0YWxsZXI8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3BlY2lmeSB0aGUgU3lzcm9vdCBMb2NhdGlvbjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGxvY2F0aW9uIGlzIHdoZXJlIHRoZSByb290IGZpbGVzeXN0ZW0gZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgaGFyZHdhcmUgcmVzaWRlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgbG9jYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgZmlsZXN5c3RlbSBkZXBlbmRzIG9uIHdoZXJlIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gYW5kIG9uIGhvdyB0byBleHRyYWN0IGFuZCBpbnN0YWxsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyb290IGZpbGVzeXN0ZW0sIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3QgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgdGhlIHR5cGUgb2YgaGFyZHdhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBnb2luZyB0byB1c2Ugb3IgZW11bGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBwdWxsLWRvd24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRhcmdldCBBcmNoaXRlY3R1cmU8L2ZpbGVuYW1lPiBtZW51Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2UgeW91ciBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwdWxsLWRvd24gbWVudSBzaG91bGQgaGF2ZSB0aGUgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmNoaXRlY3R1cmUgeW91IG5lZWQgaXMgbm90IGxpc3RlZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWVudSwgeW91IHdpbGwgbmVlZCB0byBidWlsZCB0aGUgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS10YXJnZXQtb3B0aW9ucyc+Ci0gICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgVGFyZ2V0IE9wdGlvbnM8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaG9vc2UgdG8gZW11bGF0ZSBoYXJkd2FyZSB1c2luZyB0aGUgUUVNVQotICAgICAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IsIG9yIHlvdSBjYW4gY2hvb3NlIHRvIHJ1biB5b3VyIGltYWdlIG9uIGFjdHVhbAotICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UUVNVTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgZW11bGF0b3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGVtdWxhdG9yLCB5b3UgYWxzbyBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZSB0aGUga2VybmVsIGFuZCBzcGVjaWZ5IGFueSBjdXN0b20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBzZWxlY3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQga2VybmVsIHlvdSBidWlsdCB3aWxsIGJlIGxvY2F0ZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNlbGVjdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIHByZS1idWlsdCB0b29sY2hhaW48L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZS1idWlsdCBpbWFnZSB5b3UgZG93bmxvYWRlZCBpcyBsb2NhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkaXJlY3RvcnkgeW91IHNwZWNpZmllZCB3aGVuIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkIHRoZSBpbWFnZS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk1vc3QgY3VzdG9tIG9wdGlvbnMgYXJlIGZvciBhZHZhbmNlZCBRRU1VCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzIHRvIGZ1cnRoZXIgY3VzdG9taXplIHRoZWlyIFFFTVUgaW5zdGFuY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBiZXR3ZWVuIHBhaXJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZWQgYnJhY2tldHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCBvdXRzaWRlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFja2V0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlcmlhbDwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9ncmFwaGljPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a3ZtPC9maWxlbmFtZT4gbXVzdCBhbGwgYmUgb3V0c2lkZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPm1hbiBxZW11PC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgaGVscCBvbiBhbGwgdGhlIG9wdGlvbnMgYW5kIHRoZWlyIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICBzZXJpYWwg4oCYJmx0Oy1tIDI1NiAtZnVsbC1zY3JlZW4mZ3Q74oCZCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBtb2RlLCBTeXNyb290IGlzIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBDcm9zcy1Db21waWxlciBPcHRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TeXNyb290IExvY2F0aW9uOjwvZmlsZW5hbWU+IGZpZWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4dGVybmFsIEhXOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2lsbCBiZSB1c2luZyBhY3R1YWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJPSyIgdG8gc2F2ZSB5b3VyIHBsdWctaW4gY29uZmlndXJhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctdGhlLXByb2plY3QnPgotICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBQcm9qZWN0PC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdHdvIHR5cGVzIG9mIHByb2plY3RzOiAgQXV0b3Rvb2xzLWJhc2VkLCBvcgotICAgICAgICAgICAgICAgIE1ha2VmaWxlLWJhc2VkLgotICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBBdXRvdG9vbHMtYmFzZWQgcHJvamVjdHMKLSAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUuCi0gICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzIGluIGEKLSAgICAgICAgICAgICAgICB0ZXJtaW5hbCB3aW5kb3csIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFrZWZpbGUtYmFzZWQtcHJvamVjdHMnPk1ha2VmaWxlLUJhc2VkIFByb2plY3RzPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBwcm9qZWN0IG5hbWVzCi0gICAgICAgICAgICAgICAgICAgIChlLmcuIHNwYWNlcywgdW5kZXJzY29yZXMsIGV0Yy4pLiAgRG9pbmcgc28gY2FuCi0gICAgICAgICAgICAgICAgICAgIGNhdXNlIGNvbmZpZ3VyYXRpb24gdG8gZmFpbC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIHByb2plY3QgYmFzZWQgb24gYSBZb2N0byB0ZW1wbGF0ZSBhbmQgdGhlbiBkaXNwbGF5Ci0gICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJQcm9qZWN0IiBmcm9tIHRoZSAiRmlsZSAtPiBOZXciIG1lbnUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvdWJsZSBjbGljayA8ZmlsZW5hbWU+Q0MrKzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3VibGUgY2xpY2sgPGZpbGVuYW1lPkMgUHJvamVjdDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIHByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCA8ZmlsZW5hbWU+SGVsbG8gV29ybGQgQU5TSSBDIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0IGJhc2VkIG9uIGEgWW9jdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHV0IGEgbmFtZSBpbiB0aGUgPGZpbGVuYW1lPlByb2plY3QgbmFtZTo8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIGh5cGhlbnMgYXMgcGFydCBvZiB0aGUgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk5leHQiLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGluZm9ybWF0aW9uIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkF1dGhvcjwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNvcHlyaWdodCBub3RpY2U8L2ZpbGVuYW1lPiBmaWVsZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgdGhlIDxmaWxlbmFtZT5MaWNlbnNlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIGNvcnJlY3QuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRmluaXNoIi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHRoZSAib3BlbiBwZXJzcGVjdGl2ZSIgcHJvbXB0IGFwcGVhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGljayAiWWVzIiBzbyB0aGF0IHlvdSBpbiB0aGUgQy9DKysgcGVyc3BlY3RpdmUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBsZWZ0LWhhbmQgbmF2aWdhdGlvbiBwYW5lIHNob3dzIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRpc3BsYXkgeW91ciBzb3VyY2UgYnkgZG91YmxlIGNsaWNraW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCdzIHNvdXJjZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWNyb3NzLXRvb2xjaGFpbnMnPgotICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBDcm9zcy1Ub29sY2hhaW5zPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGVhcmxpZXIgc2VjdGlvbiwKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iLAotICAgICAgICAgICAgICAgIHNldHMgdXAgdGhlIGRlZmF1bHQgcHJvamVjdCBjb25maWd1cmF0aW9ucy4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGZvciBhIGdpdmVuIHByb2plY3QgYnkgZm9sbG93aW5nCi0gICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJDaGFuZ2UgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyIgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJQcm9qZWN0IiBtZW51LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gYnJpbmdzIHVwIHRoZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzCi0gICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cgYW5kIGFsbG93cyB5b3UgdG8gbWFrZSBjaGFuZ2VzIHNwZWNpZmljIHRvIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIHByb2plY3QuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QnkgZGVmYXVsdCwgdGhlIENyb3NzIENvbXBpbGVyIE9wdGlvbnMgYW5kIFRhcmdldAotICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyBmb3IgYSBwcm9qZWN0IGFyZSBpbmhlcml0ZWQgZnJvbSBzZXR0aW5ncyB5b3UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHVzaW5nIHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cgYXMgZGVzY3JpYmVkCi0gICAgICAgICAgICAgICAgICAgICAgICBlYXJsaWVyIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPkNvbmZpZ3VyaW5nIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IiBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgU2V0dGluZ3MgRGlhbG9nIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRob3NlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSB5b3VyIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgcHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNsaWNrICJPSyIuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJpZ2h0LWNsaWNrIGluIHRoZSBuYXZpZ2F0aW9uIHBhbmUgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgIlJlY29uZmlndXJlIFByb2plY3QiIGZyb20gdGhlIHBvcC11cCBtZW51LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gcmVjb25maWd1cmVzIHRoZSBwcm9qZWN0IGJ5IHJ1bm5pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvZ2VuLnNoPC9maWxlbmFtZT4gaW4gdGhlIHdvcmtzcGFjZSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgYWxzbyBydW5zIDxmaWxlbmFtZT5saWJ0b29saXplPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbDwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2hlYWRlcjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9tYWtlIC0tYTwvZmlsZW5hbWU+LCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgb24gdGhlICJDb25zb2xlIiB0YWIgYmVuZWF0aCB5b3VyIHNvdXJjZSBjb2RlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIHJlc3VsdHMgb2YgcmVjb25maWd1cmluZyB5b3VyIHByb2plY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLXRoZS1wcm9qZWN0Jz4KLSAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyB0aGUgUHJvamVjdDwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIGJ1aWxkIHRoZSBwcm9qZWN0IHNlbGVjdCAiQnVpbGQgUHJvamVjdCIgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAiUHJvamVjdCIgbWVudS4KLSAgICAgICAgICAgICAgICBUaGUgY29uc29sZSBzaG91bGQgdXBkYXRlIGFuZCB5b3UgY2FuIG5vdGUgdGhlIGNyb3NzLWNvbXBpbGVyCi0gICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyAiWW9jdG8gUHJvamVjdCBBRFQgQXV0b3Rvb2xzIiBwcm9qZWN0cywgdGhlIEVjbGlwc2UKLSAgICAgICAgICAgICAgICAgICAgSURFIG1pZ2h0IGRpc3BsYXkgZXJyb3IgbWVzc2FnZXMgZm9yIEZ1bmN0aW9ucy9TeW1ib2xzL1R5cGVzCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgY2Fubm90IGJlICJyZXNvbHZlZCIsIGV2ZW4gd2hlbiB0aGUgcmVsYXRlZCBpbmNsdWRlIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgaXMgbGlzdGVkIGF0IHRoZSBwcm9qZWN0IG5hdmlnYXRvciBhbmQgd2hlbiB0aGUgcHJvamVjdCBpcwotICAgICAgICAgICAgICAgICAgICBhYmxlIHRvIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMgb25seSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWRkIGEgbmV3IGxpbmtlZAotICAgICAgICAgICAgICAgICAgICBmb2xkZXIgdG8gdGhlIGFwcHJvcHJpYXRlIHN5c3Jvb3QuCi0gICAgICAgICAgICAgICAgICAgIFVzZSB0aGVzZSBzdGVwcyB0byBhZGQgdGhlIGxpbmtlZCBmb2xkZXI6Ci0gICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhlIHByb2plY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0ICJGb2xkZXIiIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZpbGUgPiBOZXc8L2ZpbGVuYW1lPiBtZW51LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSAiTmV3IEZvbGRlciIgRGlhbG9nLCBzZWxlY3QgIkxpbmsgdG8gYWx0ZXJuYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gKGxpbmtlZCBmb2xkZXIpIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiQnJvd3NlIiB0byBuYXZpZ2F0ZSB0byB0aGUgaW5jbHVkZSBmb2xkZXIgaW5zaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgc3lzcm9vdCBsb2NhdGlvbiBzZWxlY3RlZCBpbiB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIk9LIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiRmluaXNoIiB0byBzYXZlIHRoZSBsaW5rZWQgZm9sZGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdzdGFydGluZy1xZW11LWluLXVzZXItc3BhY2UtbmZzLW1vZGUnPgotICAgICAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIFFFTVUgaW4gVXNlci1TcGFjZSBORlMgTW9kZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yIGZyb20gd2l0aGluIEVjbGlwc2UsIGZvbGxvdyB0aGVzZQotICAgICAgICAgICAgICAgIHN0ZXBzOgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKLSAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3NlIGFuZCBzZWxlY3QgIkV4dGVybmFsIFRvb2xzIiBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgIlJ1biIgbWVudS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgaW1hZ2Ugc2hvdWxkIGFwcGVhciBhcyBhIHNlbGVjdGFibGUgbWVudSBpdGVtLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgeW91ciBpbWFnZSBmcm9tIHRoZSBtZW51IHRvIGxhdW5jaAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVtdWxhdG9yIGluIGEgbmV3IHdpbmRvdy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgbmVlZGVkLCBlbnRlciB5b3VyIGhvc3Qgcm9vdCBwYXNzd29yZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNoZWxsIHdpbmRvdyBhdCB0aGUgcHJvbXB0LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXRzIHVwIGEgPGZpbGVuYW1lPlRhcCAwPC9maWxlbmFtZT4gY29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIGZvciBydW5uaW5nIGluIHVzZXItc3BhY2UgTkZTIG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldhaXQgZm9yIFFFTVUgdG8gbGF1bmNoLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+T25jZSBRRU1VIGxhdW5jaGVzLCB5b3UgY2FuIGJlZ2luIG9wZXJhdGluZwotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBPbmUgdXNlZnVsIHRhc2sgYXQgdGhpcyBwb2ludCB3b3VsZCBiZSB0byBkZXRlcm1pbmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBJUCBBZGRyZXNzIGZvciB0aGUgdXNlci1zcGFjZSBORlMgYnkgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pZmNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZGVwbG95aW5nLWFuZC1kZWJ1Z2dpbmctdGhlLWFwcGxpY2F0aW9uJz4KLSAgICAgICAgICAgIDx0aXRsZT5EZXBsb3lpbmcgYW5kIERlYnVnZ2luZyB0aGUgQXBwbGljYXRpb248L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBPbmNlIHRoZSBRRU1VIGVtdWxhdG9yIGlzIHJ1bm5pbmcgdGhlIGltYWdlLCB5b3UgY2FuIGRlcGxveQotICAgICAgICAgICAgICAgIHlvdXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIEVjbGlwc2UgSURFIGFuZCB0aGVuIHVzZQotICAgICAgICAgICAgICAgIHRoZSBlbXVsYXRvciB0byBwZXJmb3JtIGRlYnVnZ2luZy4KLSAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gZGVwbG95IHRoZSBhcHBsaWNhdGlvbi4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5LCBFY2xpcHNlIGRvZXMgbm90IHN1cHBvcnQgU1NIIHBvcnQgZm9yd2FyZGluZy4KLSAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgbmVlZCB0byBydW4gb3IgZGVidWcgYSByZW1vdGUKLSAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gdXNpbmcgdGhlIGhvc3QgZGlzcGxheSwgeW91IG11c3QgY3JlYXRlIGEKLSAgICAgICAgICAgICAgICAgICAgdHVubmVsaW5nIGNvbm5lY3Rpb24gZnJvbSBvdXRzaWRlIEVjbGlwc2UgYW5kIGtlZXAKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBjb25uZWN0aW9uIGFsaXZlIGR1cmluZyB5b3VyIHdvcmsuCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBhIG5ldyB0ZXJtaW5hbCwgcnVuIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgc3NoIC1YWSB1c2VyX25hbWVAcmVtb3RlX2hvc3RfaXAKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBjb21tYW5kLCBhZGQgdGhlIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQKLSAgICAgICAgICAgICAgICAgICAgaW4gRWNsaXBzZSdzIHJ1biBjb25maWd1cmF0aW9uIGJlZm9yZSB0aGUgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBleHBvcnQgRElTUExBWT06MTAuMAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiRGVidWcgQ29uZmlndXJhdGlvbnMuLi4iIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiUnVuIiBtZW51LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIGxlZnQgYXJlYSwgZXhwYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qy9DKytSZW1vdGUgQXBwbGljYXRpb248L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TG9jYXRlIHlvdXIgcHJvamVjdCBhbmQgc2VsZWN0IGl0IHRvIGJyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB1cCBhIG5ldyB0YWJiZWQgdmlldyBpbiB0aGUgRGVidWcgQ29uZmlndXJhdGlvbnMgRGlhbG9nLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbnRlciB0aGUgYWJzb2x1dGUgcGF0aCBpbnRvIHdoaWNoIHlvdSB3YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB0byBkZXBsb3kgdGhlIGFwcGxpY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSAiUmVtb3RlIEFic29sdXRlIEZpbGUgUGF0aCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIEMvQysrQXBwbGljYXRpb246IiBmaWVsZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBlbnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluLzxyZXBsYWNlYWJsZT5wcm9ncmFtbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrIG9uIHRoZSAiRGVidWdnZXIiIHRhYiB0byBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sIGRlYnVnZ2VyIHlvdSBhcmUgdXNpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayBvbiB0aGUgIk1haW4iIHRhYi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBRRU1VIGluc3RhbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICBieSBjbGlja2luZyBvbiAibmV3Ii48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCA8ZmlsZW5hbWU+VENGPC9maWxlbmFtZT4sIHdoaWNoIG1lYW5zCi0gICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiTmV4dCIuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGVhciBvdXQgdGhlICJob3N0IG5hbWUiIGZpZWxkIGFuZCBlbnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIElQIEFkZHJlc3MgZGV0ZXJtaW5lZCBlYXJsaWVyLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkZpbmlzaCIgdG8gY2xvc2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBOZXcgQ29ubmVjdGlvbnMgRGlhbG9nLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIHRoZSBkcm9wLWRvd24gbWVudSBub3cgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiIgZmllbGQgYW5kIHBpY2sgdGhlIElQIEFkZHJlc3MgeW91IGVudGVyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRGVidWciIHRvIGJyaW5nIHVwIGEgbG9naW4gc2NyZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgbG9naW4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BY2NlcHQgdGhlIGRlYnVnIHBlcnNwZWN0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdydW5uaW5nLXVzZXItc3BhY2UtdG9vbHMnPgotICAgICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgVXNlci1TcGFjZSBUb29sczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyIGluIHRoZSBtYW51YWwsIHNldmVyYWwgdG9vbHMgZXhpc3QgdGhhdAotICAgICAgICAgICAgICAgIGVuaGFuY2UgeW91ciBkZXZlbG9wbWVudCBleHBlcmllbmNlLgotICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSBhaWRzIGluIGRldmVsb3BpbmcgYW5kIGRlYnVnZ2luZyBhcHBsaWNhdGlvbnMKLSAgICAgICAgICAgICAgICBhbmQgaW1hZ2VzLgotICAgICAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoZXNlIHVzZXItc3BhY2UgdG9vbHMgZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UKLSAgICAgICAgICAgICAgICBJREUgdGhyb3VnaCB0aGUgIllvY3RvUHJvamVjdFRvb2xzIiBtZW51LgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBPbmNlIHlvdSBwaWNrIGEgdG9vbCwgeW91IG5lZWQgdG8gY29uZmlndXJlIGl0IGZvciB0aGUgcmVtb3RlCi0gICAgICAgICAgICAgICAgdGFyZ2V0LgotICAgICAgICAgICAgICAgIEV2ZXJ5IHRvb2wgbmVlZHMgdG8gaGF2ZSB0aGUgY29ubmVjdGlvbiBjb25maWd1cmVkLgotICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNlbGVjdCBhbiBleGlzdGluZyBUQ0YtYmFzZWQgUlNFIGNvbm5lY3Rpb24gdG8gdGhlCi0gICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldC4KLSAgICAgICAgICAgICAgICBJZiBvbmUgZG9lcyBub3QgZXhpc3QsIGNsaWNrICJOZXciIHRvIGNyZWF0ZSBvbmUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgc3BlY2lmaWNzIGFib3V0IHRoZSByZW1vdGUgdG9vbHM6Ci0gICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+THR0bmcyLjAgdHJhY2UgaW1wb3J0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGluZyB0aGlzIHRvb2wgdHJhbnNmZXJzIHRoZSByZW1vdGUgdGFyZ2V0J3MKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MdHRuZzwvZmlsZW5hbWU+IHRyYWNpbmcgZGF0YSBiYWNrIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgaG9zdCBtYWNoaW5lIGFuZCB1c2VzIHRoZSBMdHRuZyBFY2xpcHNlIHBsdWctaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdyYXBoaWNhbGx5IGRpc3BsYXkgdGhlIG91dHB1dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIEx0dG5nIHRvIHRyYWNlIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlZSA8dWxpbmsgdXJsPSdodHRwOi8vbHR0bmcub3JnL2RvY3VtZW50YXRpb24nPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I2x0dG5nLWxpbnV4LXRyYWNlLXRvb2xraXQtbmV4dC1nZW5lcmF0aW9uJz5MVFRuZyAoTGludXggVHJhY2UgVG9vbGtpdCwgbmV4dCBnZW5lcmF0aW9uKTwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggaXMgaW4gdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2luZyBNYW51YWwuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5EbyBub3QgdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkx0dG5nLXVzZXIgc3BhY2UgKGxlZ2FjeSk8L2ZpbGVuYW1lPiB0b29sLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBubyBsb25nZXIgaGFzIGFueSB1cHN0cmVhbSBzdXBwb3J0Ljwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkJlZm9yZSB5b3UgdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkx0dG5nMi4wIHRyYWNlIGltcG9ydDwvZmlsZW5hbWU+IHRvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBzZXR1cCB0aGUgTHR0bmcgRWNsaXBzZSBwbHVnLWluIGFuZCBjcmVhdGUgYQotICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2luZyBwcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgRG8gdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJPcGVuIFBlcnNwZWN0aXZlIiBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2luZG93IiBtZW51IGFuZCB0aGVuIHNlbGVjdCAiT3RoZXIuLi4iIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaW5nIHVwIGEgbWVudSBvZiBvdGhlciBwZXJzcGVjdGl2ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiVHJhY2luZyIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiT0siIHRvIGNoYW5nZSB0aGUgRWNsaXBzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzcGVjdGl2ZSBpbnRvIHRoZSBUcmFjaW5nIHBlcnNwZWN0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgbmV3IFRyYWNpbmcgcHJvamVjdCBieQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RpbmcgIlByb2plY3QiIGZyb20gdGhlICJGaWxlIC0+IE5ldyIgbWVudS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNob29zZSAiVHJhY2luZyBQcm9qZWN0IiBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhY2luZyIgbWVudSBhbmQgY2xpY2sgIk5leHQiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhIG5hbWUgZm9yIHlvdXIgdHJhY2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGFuZCBjbGljayAiRmluaXNoIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdlbmVyYXRlIHlvdXIgdHJhY2luZyBkYXRhIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUgdGFyZ2V0LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkx0dG5nMi4wIHRyYWNlIGltcG9ydCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIllvY3RvIFByb2plY3QgVG9vbHMiIG1lbnUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgdGhlIGRhdGEgaW1wb3J0IHByb2Nlc3MuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNwZWNpZnkgeW91ciByZW1vdGUgY29ubmVjdGlvbiBuYW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIHRoZSBVc3QgZGlyZWN0b3J5IHBhdGgsIHNwZWNpZnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2F0aW9uIG9mIHlvdXIgcmVtb3RlIHRyYWNpbmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHRoZSBsb2NhdGlvbiBlbmRzIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzdDwvZmlsZW5hbWU+IChlLmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL215c2Vzc2lvbi91c3Q8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiT0siIHRvIGNvbXBsZXRlIHRoZSBpbXBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGEgaXMgbm93IGluIHRoZSBsb2NhbCB0cmFjaW5nIHByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNyZWF0ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJpZ2h0IGNsaWNrIG9uIHRoZSBkYXRhIGFuZCB0aGVuIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWVudSB0byBTZWxlY3QgIkdlbmVyaWMgQ1RGIFRyYWNlIiBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhY2UgVHlwZS4uLiAtPiBDb21tb24gVHJhY2UgRm9ybWF0IiBtZW51IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCB0aGUgdHJhY2luZyB0eXBlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SaWdodCBjbGljayB0aGUgbW91c2UgYW5kIHNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3BlbiIgdG8gYnJpbmcgdXAgdGhlIEVjbGlwc2UgTHR0bmcgVHJhY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlld2VyIHNvIHlvdSB2aWV3IHRoZSB0cmFjaW5nIGRhdGEuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+UG93ZXJUT1A8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW5nIHRoaXMgdG9vbCBydW5zIFBvd2VyVE9QIG9uIHRoZSByZW1vdGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIGFuZCBkaXNwbGF5cyB0aGUgcmVzdWx0cyBpbiBhIG5ldyB2aWV3IGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXJUT1AuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlICJUaW1lIHRvIGdhdGhlciBkYXRhKHNlYyk6IiBmaWVsZCBpcyB0aGUgdGltZQotICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGluIHNlY29uZHMgYmVmb3JlIGRhdGEgaXMgZ2F0aGVyZWQgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSB0YXJnZXQgZm9yIGFuYWx5c2lzLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSAic2hvdyBwaWRzIGluIHdha2V1cHMgbGlzdDoiIGZpZWxkIGNvcnJlc3BvbmRzCi0gICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPi1wPC9maWxlbmFtZT4gYXJndW1lbnQgcGFzc2VkIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UG93ZXJUT1A8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+TGF0ZW5jeVRPUCBhbmQgUGVyZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBMYXRlbmN5VE9QIGlkZW50aWZpZXMgc3lzdGVtIGxhdGVuY3ksIHdoaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICBQZXJmIG1vbml0b3JzIHRoZSBzeXN0ZW0ncyBwZXJmb3JtYW5jZSBjb3VudGVyCi0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RpbmcgZWl0aGVyIG9mIHRoZXNlIHRvb2xzIGNhdXNlcyBhbiBSU0UgdGVybWluYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgdG8gYXBwZWFyIGZyb20gd2hpY2ggeW91IGNhbiBydW4gdGhlIHRvb2xzLgotICAgICAgICAgICAgICAgICAgICAgICAgQm90aCB0b29scyByZWZyZXNoIHRoZSBlbnRpcmUgc2NyZWVuIHRvIGRpc3BsYXkgcmVzdWx0cwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdGhleSBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBlcmY8L2ZpbGVuYW1lPiwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1wZXJmJz5wZXJmPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZwotICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlN5c3RlbVRhcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW10YXAgaXMgYSB0b29sIHRoYXQgbGV0cyB5b3UgY3JlYXRlIGFuZCByZXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyB0byBleGFtaW5lIHRoZSBhY3Rpdml0aWVzIG9mIGEgbGl2ZSBMaW51eAotICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBlYXNpbHkgZXh0cmFjdCwgZmlsdGVyLCBhbmQgc3VtbWFyaXplIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaGVscHMgeW91IGRpYWdub3NlIGNvbXBsZXggcGVyZm9ybWFuY2Ugb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWwgcHJvYmxlbXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN5c3RlbVRhcDwvZmlsZW5hbWU+LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcC9kb2N1bWVudGF0aW9uLmh0bWwnPlN5c3RlbVRhcCBEb2N1bWVudGF0aW9uPC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gdG9vbCBsZXRzIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgcXVpY2tseSBzZXQgdXAgYSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbCByZXF1aXJlcyBhIE1ldGFkYXRhIGxvY2F0aW9uLCBidWlsZCBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBuYW1lLCBCU1Agb3V0cHV0IGxvY2F0aW9uLCBhbmQgYSBrZXJuZWwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHRvb2wgb3V0c2lkZSBvZiBFY2xpcHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBuZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KLTwvc2VjdGlvbj4KLQogPC9jaGFwdGVyPgogPCEtLQogdmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstd29ya2luZy1wcm9qZWN0cy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay13b3JraW5nLXByb2plY3RzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjI0YWVmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstd29ya2luZy1wcm9qZWN0cy54bWwKQEAgLTAsMCArMSwxNDYwIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nc2RrLXdvcmtpbmctcHJvamVjdHMnPgorCisgICAgPHRpdGxlPlVzaW5nIHRoZSBTREsgVG9vbGNoYWluIERpcmVjdGx5PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgU0RLIHRvb2xjaGFpbiBkaXJlY3RseSB3aXRoIE1ha2VmaWxlLAorICAgICAgICBBdXRvdG9vbHMsIGFuZCA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPiBiYXNlZAorICAgICAgICBwcm9qZWN0cy4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGNvdmVycyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBlYWNoIG9mIHRoZXNlIHR5cGVzIG9mCisgICAgICAgIHByb2plY3RzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdhdXRvdG9vbHMtYmFzZWQtcHJvamVjdHMnPgorICAgICAgICA8dGl0bGU+QXV0b3Rvb2xzLUJhc2VkIFByb2plY3RzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYSBzdWl0YWJsZSBjcm9zcy10b29sY2hhaW4gaW5zdGFsbGVkLCBpdCBpcyB2ZXJ5IGVhc3kKKyAgICAgICAgICAgIHRvIGRldmVsb3AgYSBwcm9qZWN0IG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgYSBzaW1wbGUgIkhlbGxvd29ybGQiIGV4YW1wbGUgdGhhdCBzaG93cyBob3cKKyAgICAgICAgICAgIHRvIHNldCB1cCwgY29tcGlsZSwgYW5kIHJ1biB0aGUgcHJvamVjdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hbmQtcnVubmluZy1hLXByb2plY3QtYmFzZWQtb24tZ251LWF1dG90b29scyc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYW5kIFJ1bm5pbmcgYSBQcm9qZWN0IEJhc2VkIG9uIEdOVSBBdXRvdG9vbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgc2ltcGxlIEF1dG90b29scy1iYXNlZCBwcm9qZWN0OgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyZWF0ZSB5b3VyIGRpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgY2xlYW4gZGlyZWN0b3J5IGZvciB5b3VyIHByb2plY3QgYW5kIHRoZW4gbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBkaXJlY3RvcnkgeW91ciB3b3JraW5nIGxvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1rZGlyICRIT01FL2hlbGxvd29ybGQKKyAgICAgJCBjZCAkSE9NRS9oZWxsb3dvcmxkCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlBvcHVsYXRlIHRoZSBkaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSA8ZmlsZW5hbWU+aGVsbG8uYzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmNvbmZpZ3VyZS5hYzwvZmlsZW5hbWU+IGZpbGVzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5oZWxsby5jPC9maWxlbmFtZT4sIGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisKKyAgICAgbWFpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYmluX1BST0dSQU1TID0gaGVsbG8KKyAgICAgaGVsbG9fU09VUkNFUyA9IGhlbGxvLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+Y29uZmlndXJlLmluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUNfSU5JVChoZWxsbywwLjEpCisgICAgIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorICAgICBBQ19QUk9HX0NDCisgICAgIEFDX1BST0dfSU5TVEFMTAorICAgICBBQ19PVVRQVVQoTWFrZWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U291cmNlIHRoZSBjcm9zcy10b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoZSBtYW51YWwsIGluc3RhbGxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4gY3JlYXRlcyBhIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGluIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgU0RLCisgICAgICAgICAgICAgICAgICAgICAgICB3YXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSB0b29scyB0byBkZXZlbG9wIHlvdXIgcHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBtdXN0IHNvdXJjZSB0aGlzIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgYmVnaW5zIHdpdGggdGhlIHN0cmluZyAiZW52aXJvbm1lbnQtc2V0dXAiCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY29udGFpbnMgdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIHN0cmluZyAicG9reS1saW51eCIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzb3VyY2VzIGEgc2NyaXB0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IFNESyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBJbnRlbCB4ODYgQXJjaGl0ZWN0dXJlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICZESVNUUk9fTkFNRTsgWW9jdG8gUHJvamVjdCByZWxlYXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAvb3B0L3Bva3kvJkRJU1RSTzsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBsb2NhbCBhY2xvY2FsLm00CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBhbmQgY3JlYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIEdOVSBBdXRvdG9vbHMgZ2VuZXJhdGUgdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbC5tNDwvZmlsZW5hbWU+IGZpbGVzIGFuZCBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFjbG9jYWwKKyAgICAgJCBhdXRvY29uZgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5HZW5lcmF0ZSBmaWxlcyBuZWVkZWQgYnkgR05VIGNvZGluZworICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBHTlUgY29kaW5nIHN0YW5kYXJkcyByZXF1aXJlIGNlcnRhaW4gZmlsZXMgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcHJvamVjdCB0byBiZSBjb21wbGlhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyB0aG9zZSBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB0b3VjaCBORVdTIFJFQURNRSBBVVRIT1JTIENoYW5nZUxvZworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgY29uZmlndXJlIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBnZW5lcmF0ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYXV0b21ha2UgLWEKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3Jvc3MtY29tcGlsZSB0aGUgcHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNvbXBpbGVzIHRoZSBwcm9qZWN0IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT05GSUdVUkVfRkxBR1MnPjxmaWxlbmFtZT5DT05GSUdVUkVfRkxBR1M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcm92aWRlcyB0aGUgbWluaW1hbCBhcmd1bWVudHMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBHTlUgY29uZmlndXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vY29uZmlndXJlICR7Q09ORklHVVJFX0ZMQUdTfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5NYWtlIGFuZCBpbnN0YWxsIHRoZSBwcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSB0d28gY29tbWFuZHMgZ2VuZXJhdGUgYW5kIGluc3RhbGwgdGhlIHByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlCisgICAgICQgbWFrZSBpbnN0YWxsIERFU1RESVI9Li90bXAKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VmVyaWZ5IHRoZSBpbnN0YWxsYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyBhIHNpbXBsZSB3YXkgdG8gdmVyaWZ5IHRoZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bm5pbmcgdGhlIGNvbW1hbmQgcHJpbnRzIHRoZSBhcmNoaXRlY3R1cmUgb24gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiaW5hcnkgZmlsZSBjYW4gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFsbGVkIGNyb3NzLXRvb2xjaGFpbiBzdXBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBmaWxlIC4vdG1wL3Vzci9sb2NhbC9iaW4vaGVsbG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RXhlY3V0ZSB5b3VyIHByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGV4ZWN1dGUgdGhlIHByb2plY3QgaW4gdGhlIHNoZWxsLCBzaW1wbHkgZW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIGFsc28gY29weSB0aGUgYmluYXJ5IHRvIHRoZSBhY3R1YWwgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSBhbmQgcnVuIHRoZSBwcm9qZWN0IHRoZXJlIGFzIHdlbGw6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9oZWxsbworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgZXhwZWN0ZWQsIHRoZSBwcm9qZWN0IGRpc3BsYXlzIHRoZSAiSGVsbG8gV29ybGQhIgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFzc2luZy1ob3N0LW9wdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPlBhc3NpbmcgSG9zdCBPcHRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0LCB5b3UgY2FuIHVzZSB0aGUgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgICAgICAgICAgYnkganVzdCBwYXNzaW5nIHRoZSBhcHByb3ByaWF0ZSBob3N0IG9wdGlvbiB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25maWd1cmUuc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgaG9zdCBvcHRpb24geW91IHVzZSBpcyBkZXJpdmVkIGZyb20gdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGZvdW5kIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHRoZSBjcm9zcy10b29sY2hhaW4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBob3N0IG9wdGlvbiBmb3IgYW4gQVJNLWJhc2VkIHRhcmdldCB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICB0aGUgR05VIEVBQkkgaXMgPGZpbGVuYW1lPmFybXY1dGUtcG9reS1saW51eC1nbnVlYWJpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IHdpbGwgbm90aWNlIHRoYXQgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lbnZpcm9ubWVudC1zZXR1cC1hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3b3JrcyB0byB1cGRhdGUgeW91ciBwcm9qZWN0IGFuZAorICAgICAgICAgICAgICAgIHJlYnVpbGQgaXQgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGNyb3NzLXRvb2xjaGFpbiB0b29sczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9jb25maWd1cmUgLS1ob3N0PWFybXY1dGUtcG9reS1saW51eC1nbnVlYWJpIFwKKyAgICAgICAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD08cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBzY3JpcHQgcmVzdWx0cyBpbgorICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcyByZWNvZ25pemluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9PC9maWxlbmFtZT48cmVwbGFjZWFibGU+c3lzcm9vdC1kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHJlZ2VuZXJhdGUgdGhlIHNjcmlwdCB0byBlbmFibGUgdGhlIHN1cHBvcnQgYnkKKyAgICAgICAgICAgICAgICAgICAgZG9pbmcgdGhlIGZvbGxvd2luZyBhbmQgdGhlbiBydW4gdGhlIHNjcmlwdCBhZ2FpbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxpYnRvb2xpemUgLS1hdXRvbWFrZQorICAgICAkIGFjbG9jYWwgLUkgJHtPRUNPUkVfVEFSR0VUX1NZU1JPT1R9L3Vzci9zaGFyZS9hY2xvY2FsIFstSSA8cmVwbGFjZWFibGU+ZGlyX2NvbnRhaW5pbmdfeW91cl9wcm9qZWN0LXNwZWNpZmljX200X21hY3JvczwvcmVwbGFjZWFibGU+XQorICAgICAkIGF1dG9jb25mCisgICAgICQgYXV0b2hlYWRlcgorICAgICAkIGF1dG9tYWtlIC1hCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFrZWZpbGUtYmFzZWQtcHJvamVjdHMnPgorICAgICAgICA8dGl0bGU+TWFrZWZpbGUtQmFzZWQgUHJvamVjdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLCB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50CisgICAgICAgICAgICB2YXJpYWJsZXMgZXN0YWJsaXNoZWQgYnkgcnVubmluZyB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50CisgICAgICAgICAgICBzZXR1cCBzY3JpcHQgYXJlIHN1YmplY3QgdG8gZ2VuZXJhbCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICBydWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSB0aGlzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGZvdXIgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DQyc+Q0M8L3VsaW5rPj1pNTg2LXBva3ktbGludXgtZ2NjIC1tMzIgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9vcHQvcG9reS8mRElTVFJPOy9zeXNyb290cy9pNTg2LXBva3ktbGludXgKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxEJz5MRDwvdWxpbms+PWk1ODYtcG9reS1saW51eC1sZCAtLXN5c3Jvb3Q9L29wdC9wb2t5LyZESVNUUk87L3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eAorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz5DRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DWFhGTEFHUyc+Q1hYRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3csIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdGhyZWUgY2FzZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNhc2UgMSAtIE5vIFZhcmlhYmxlcyBTZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBub3Qgc3BlY2lmaWNhbGx5IHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4sIHRoZSB2YXJpYWJsZXMgcmV0YWluIHRoZWlyCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNhc2UgMiAtIFZhcmlhYmxlcyBTZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmljYWxseSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gZHVyaW5nIHRoZSBidWlsZCByZXN1bHRzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCBzZXR0aW5ncyBvZiB0aGUgdmFyaWFibGVzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DYXNlIDMgLSBWYXJpYWJsZXMgU2V0IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+IGlzIEV4ZWN1dGVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIENvbW1hbmQgTGluZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBFeGVjdXRpbmcgdGhlIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSByZXN1bHRzIGluIHRoZSB2YXJpYWJsZXMgYmVpbmcgb3ZlcndyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCBjb21tYW5kLWxpbmUgY29udGVudCByZWdhcmRsZXNzIG9mIHdoYXQgaXMgYmVpbmcgc2V0CisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBjb25zaWRlcmVkCisgICAgICAgICAgICAgICAgICAgIHVubGVzcyB5b3UgdXNlIHRoZSAiLWUiIGZsYWcgZHVyaW5nIHRoZSBidWlsZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1ha2UgLWUgPHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhpcyBmbGFnLCB0aGVuIHRoZSBlbnZpcm9ubWVudCB2YWx1ZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBvdmVycmlkZSBhbnkgdmFyaWFibGVzIHNwZWNpZmljYWxseSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIHRoZSBsaXN0IG9mIHZhcmlhYmxlcyBzZXQgdXAgYnkgdGhlIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstcnVubmluZy10aGUtc2RrLWVudmlyb25tZW50LXNldHVwLXNjcmlwdCc+UnVubmluZyB0aGUgU0RLIEVudmlyb25tZW50IFNldHVwIFNjcmlwdDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2ZWxvcGluZy1hcHBsaWNhdGlvbnMtdXNpbmctZWNsaXBzZSc+CisgICAgICAgIDx0aXRsZT5EZXZlbG9waW5nIEFwcGxpY2F0aW9ucyBVc2luZyA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhlIHBvcHVsYXIgRWNsaXBzZSBJREUsIHlvdSBjYW4gdXNlIGFuCisgICAgICAgICAgICBFY2xpcHNlIFlvY3RvIFBsdWctaW4gdG8gYWxsb3cgeW91IHRvIGRldmVsb3AsIGRlcGxveSwgYW5kIHRlc3QgeW91cgorICAgICAgICAgICAgYXBwbGljYXRpb24gYWxsIGZyb20gd2l0aGluIEVjbGlwc2UuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGdlbmVyYWwgd29ya2Zsb3cgdXNpbmcgdGhlIFNESyBhbmQgRWNsaXBzZQorICAgICAgICAgICAgYW5kIGhvdyB0byBjb25maWd1cmUgYW5kIHNldCB1cCBFY2xpcHNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dvcmtmbG93LXVzaW5nLWVjbGlwc2UnPgorICAgICAgICAgICAgPHRpdGxlPldvcmtmbG93IFVzaW5nIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgYW5kIHN1cHBvcnRpbmcgbGlzdCBzdW1tYXJpemUgdGhlCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZ2VuZXJhbCB3b3JrZmxvdyB0aGF0IGVtcGxveXMgYm90aCB0aGUKKyAgICAgICAgICAgICAgICBTREsgRWNsaXBzZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay1lY2xpcHNlLWRldi1mbG93LnBuZyIKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjdpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UHJlcGFyZSB0aGUgaG9zdCBzeXN0ZW0gZm9yIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucyBib3RoIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBiZSBzdXJlIHlvdXIgaG9zdCBzeXN0ZW0gaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnh0ZXJtPC9maWxlbmFtZT4gcGFja2FnZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNlY3VyZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaGF2ZSBhIHRhcmdldCBrZXJuZWwgaW1hZ2UgdGhhdCBoYXMgYmVlbiBidWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+RGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIFlvY3RvIFByb2plY3QgaGFzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZS1idWlsdCBpbWFnZSB0aGF0IG1hdGNoZXMgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2hlcmUgeW91IGFyZSBnb2luZyB0byBydW4gdGhlIGltYWdlIHdoaWxlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uIChRRU1VIG9yIHJlYWwgaGFyZHdhcmUpLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZWEgZnJvbSB3aGljaCB5b3UgZ2V0IHRoZSBpbWFnZSBkaWZmZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkIHRoZSBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48ZmlsZW5hbWU+bWFjaGluZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzdXBwb3J0ZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcCBhbmQgdGVzdCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIG9uIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZCB0aGUgaW1hZ2UgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUUVNVV9ETF9VUkw7Jz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hY2hpbmVzL3FlbXU8L2ZpbGVuYW1lPjwvdWxpbms+IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzdXBwb3J0ZWQgYW5kIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZ29pbmcgdG8gZGV2ZWxvcCBhbmQgdGVzdCB5b3VyIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHlvdXIgaW1hZ2UgaWYgeW91IGNhbm5vdCBmaW5kIGEgcHJlLWJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzaW1pbGFyIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSwgeW91IGNhbiBtb2RpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZSBiZWZvcmUgeW91IGJ1aWxkIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIHRoZSBTREs8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBTREsgcHJvdmlkZXMgYSB0YXJnZXQtc3BlY2lmaWMgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiwgdGhlIHJvb3QgZmlsZXN5c3RlbSwgdGhlIFFFTVUgZW11bGF0b3IsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdG9vbHMgdGhhdCBjYW4gaGVscCB5b3UgZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZSBTREssIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstaW5zdGFsbGluZy10aGUtc2RrJz5JbnN0YWxsaW5nIHRoZSBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2VjdXJlIHRoZSB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIENyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZmluZCBhbmQgZG93bmxvYWQgdGhlIGFwcHJvcHJpYXRlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gYW5kIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSB0YXJiYWxscyBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgYXJlYSB1c2VkIGZvciB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGltYWdlIHlvdSBhcmUgcnVubmluZywgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0geW91IG5lZWQgZGlmZmVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGRldmVsb3BpbmcgYW4gYXBwbGljYXRpb24gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgcnVucyBvbiBhbiBpbWFnZSB0aGF0IHN1cHBvcnRzIFNhdG8sIHlvdSBuZWVkIHRvIGdldCBhCisgICAgICAgICAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0gdGhhdCBzdXBwb3J0cyBTYXRvLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz48ZmlsZW5hbWU+dG9vbGNoYWluczwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGdldCB0aGUgY29ycmVjdCB0b29sY2hhaW4gZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3QgYW5kIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3Nkay1sb2NhdGluZy1wcmUtYnVpbHQtc2RrLWluc3RhbGxlcnMnPkxvY2F0aW5nIFByZS1CdWlsdCBTREsgSW5zdGFsbGVyczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxpbmctdGhlLXNkayc+SW5zdGFsbGluZyB0aGUgU0RLPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluc3RhbGxhdGlvbiBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlIHRvIGRvd25sb2FkaW5nIGFuIFNESywgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSBTREsgaW5zdGFsbGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZGluZyB0aGUgaW5zdGFsbGVyLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgaGVscGZ1bCByZXNvdXJjZSBmb3IgYnVpbGRpbmcgYW4gaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPkNvb2tib29rIGd1aWRlIHRvIE1ha2luZyBhbiBFY2xpcHNlIERlYnVnIENhcGFibGUgSW1hZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIGFuZCBidWlsZCB5b3VyIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgbmVlZCB0byBoYXZlIHNvdXJjZSBmaWxlcyBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBmaWxlcywgeW91IGNhbiB1c2UgdGhlIEVjbGlwc2UgSURFCisgICAgICAgICAgICAgICAgICAgICAgICB0byBpbXBvcnQgdGhlbSBhbmQgYnVpbGQgdGhlIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBFY2xpcHNlLCB5b3UgbmVlZCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29scyB5b3UgaGF2ZSBpbnN0YWxsZWQgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5EZXBsb3kgdGhlIGltYWdlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIEVjbGlwc2UgSURFLCB5b3UgY2FuIGRlcGxveSB5b3VyIGltYWdlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgb3IgdG8gUUVNVSB0aHJvdWdoIHRoZSBwcm9qZWN0J3MgcHJlZmVyZW5jZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIEVjbGlwc2UgdG8gbG9hZCBhbmQgdGVzdCB5b3VyIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBRRU1VLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBRRU1VLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UZXN0IGFuZCBkZWJ1ZyB0aGUgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBhcHBsaWNhdGlvbiBpcyBkZXBsb3llZCwgeW91IG5lZWQgdG8gdGVzdCBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGhpbiB0aGUgRWNsaXBzZSBJREUsIHlvdSBjYW4gdXNlIHRoZSBkZWJ1Z2dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGFsb25nIHdpdGggc3VwcG9ydGVkIHBlcmZvcm1hbmNlIGVuaGFuY2luZworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLyc+TGludXggVG9vbHM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYWR0LWVjbGlwc2UnPgorICAgICAgICAgICAgPHRpdGxlPldvcmtpbmcgV2l0aGluIEVjbGlwc2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgRWNsaXBzZSBJREUgaXMgYSBwb3B1bGFyIGRldmVsb3BtZW50IGVudmlyb25tZW50IGFuZCBpdAorICAgICAgICAgICAgICAgIGZ1bGx5IHN1cHBvcnRzIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIFBsdWctaW4gaW50byB0aGUgRWNsaXBzZSBJREUsIHlvdSBtYXhpbWl6ZSB5b3VyIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBleHBlcmllbmNlLgorICAgICAgICAgICAgICAgIEluc3RhbGxpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBQbHVnLWluIHJlc3VsdHMgaW4gYW4KKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB0aGF0IGhhcyBleHRlbnNpb25zIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBsZXQKKyAgICAgICAgICAgICAgICB5b3UgbW9yZSBlYXNpbHkgZGV2ZWxvcCBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBleHRlbnNpb25zIGFsbG93IGZvciBjcm9zcy1jb21waWxhdGlvbiwgZGVwbG95bWVudCwgYW5kCisgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHlvdXIgb3V0cHV0IGludG8gYSBRRU1VIGVtdWxhdGlvbiBzZXNzaW9uIGFzIHdlbGwKKyAgICAgICAgICAgICAgICBhcyBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwZXJmb3JtIGNyb3NzLWRlYnVnZ2luZyBhbmQgcHJvZmlsaW5nLgorICAgICAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCBhbHNvIHN1cHBvcnRzIHBlcmZvcm1hbmNlIGVuaGFuY2luZworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGludXh0b29scy8nPnRvb2xzPC91bGluaz4KKyAgICAgICAgICAgICAgICB0aGF0IGFsbG93IHlvdSB0byBwZXJmb3JtIHJlbW90ZSBwcm9maWxpbmcsIHRyYWNpbmcsCisgICAgICAgICAgICAgICAgY29sbGVjdGlvbiBvZiBwb3dlciBkYXRhLCBjb2xsZWN0aW9uIG9mIGxhdGVuY3kgZGF0YSwgYW5kCisgICAgICAgICAgICAgICAgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBkYXRhLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgYm90aCB0aGUgTmVvbgorICAgICAgICAgICAgICAgICAgICBhbmQgTWFycyB2ZXJzaW9ucyBvZiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBOZW9uCisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2Ugd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIE1hcnMgdmVyc2lvbiBvZiBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QsIHNlZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWFwcGVuZGl4LW1hcnMnPkFwcGVuZGl4IEM8L2xpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tc2V0dGluZy11cC10aGUtZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBOZW9uIFZlcnNpb24gb2YgdGhlIEVjbGlwc2UgSURFPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBkZXZlbG9wIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUsIHlvdSBuZWVkIHRvIGRvIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIHRoZSBOZW9uIHZlcnNpb24gb2YgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZSB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIEVjbGlwc2UgZnJvbSB5b3VyIGRpc3RyaWJ1dGlvbidzIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGluc3RhbGwgRWNsaXBzZSBmcm9tIHRoZSBvZmZpY2lhbCBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCBzaXRlIGFzIGRpcmVjdGVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1pbnN0YWxsaW5nLWVjbGlwc2UtaWRlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIE5lb24gRWNsaXBzZSBJREU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGxvY2F0ZSwgaW5zdGFsbCwgYW5kIGNvbmZpZ3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgTmVvbiBFY2xpcHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkxvY2F0ZSB0aGUgTmVvbiBEb3dubG9hZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIGEgYnJvd3NlciBhbmQgZ28gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9tYXJzLyc+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9uZW9uLzwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Eb3dubG9hZCB0aGUgVGFyYmFsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayB0aHJvdWdoIHRoZSAiRG93bmxvYWQiIGJ1dHRvbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlVucGFjayB0aGUgVGFyYmFsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIGEgY2xlYW4gZGlyZWN0b3J5IGFuZCB1bnBhY2sgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCB0YXIgLXh6dmYgfi9Eb3dubG9hZHMvZWNsaXBzZS1pbnN0LWxpbnV4NjQudGFyLmd6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlcnl0aGluZyB1bnBhY2tzIGludG8gYSBmb2xkZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVjbGlwc2UtaW5zdGFsbGVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TGF1bmNoIHRoZSBJbnN0YWxsZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gbGF1bmNoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2VjbGlwc2UtaW5zdGFsbGVyCisgICAgICQgLi9lY2xpcHNlLWluc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWxlY3QgWW91ciBJREU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUgbGlzdCwgc2VsZWN0IHRoZSAiRWNsaXBzZSBJREUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMvQysrIERldmVsb3BlcnMiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5JbnN0YWxsIHRoZSBTb2Z0d2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQgdGhlIGRlZmF1bHQgImNwcC1uZW9uIiBkaXJlY3RvcnkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrICJJbnN0YWxsIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0IGFueSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIGFwcHJvdmUgYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TGF1bmNoIE5lb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJMYXVuY2giIGJ1dHRvbiBhbmQgYWNjZXB0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICJ3b3Jrc3BhY2UiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1jb25maWd1cmluZy10aGUtbWFycy1lY2xpcHNlLWlkZSc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIElERTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gY29uZmlndXJlIHRoZSBOZW9uIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIGhvdyB5b3UgaW5zdGFsbGVkIEVjbGlwc2UgYW5kIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgaGF2ZSBhbHJlYWR5IGRvbmUsIHNvbWUgb2YgdGhlIG9wdGlvbnMgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhcHBlYXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbm5vdCBmaW5kIGFuIG9wdGlvbiBhcyBkaXJlY3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWwsIGl0IGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSBFY2xpcHNlIGlzIHJ1bm5pbmcgYW5kIHlvdSBhcmUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrYmVuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0ICJJbnN0YWxsIE5ldyBTb2Z0d2FyZSIgZnJvbSB0aGUgIkhlbHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwtZG93biBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVvbiAtIGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9uZW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiV29yayB3aXRoOiIgcHVsbC1kb3duIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kIHRoZSBib3ggbmV4dCB0byAiTGludXggVG9vbHMiIGFuZCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDL0MrKyBSZW1vdGUgKE92ZXIgVENGL1RFKSBSdW4vRGVidWcgTGF1bmNoZXIKKyAgICAgVE0gVGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZCB0aGUgYm94IG5leHQgdG8gIk1vYmlsZSBhbmQgRGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IiBhbmQgc2VsZWN0IHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQy9DKysgUmVtb3RlIChPdmVyIFRDRi9URSkgUnVuL0RlYnVnIExhdW5jaGVyCisgICAgIFJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgVXNlciBBY3Rpb25zCisgICAgIFRNIFRlcm1pbmFsCisgICAgIFRDRiBSZW1vdGUgU3lzdGVtIEV4cGxvcmVyIGFkZC1pbgorICAgICBUQ0YgVGFyZ2V0IEV4cGxvcmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmQgdGhlIGJveCBuZXh0IHRvICJQcm9ncmFtbWluZyBMYW5ndWFnZXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxlY3QgdGhlIGZvbGxvd2luZyBib3g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQy9DKysgRGV2ZWxvcG1lbnQgVG9vbHMgU0RLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIGJ5IGNsaWNraW5nIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgIk5leHQiIGFuZCAiRmluaXNoIiBidXR0b25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1pbnN0YWxsaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyBvciBBY2Nlc3NpbmcgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gaW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERSBvbmUgb2YgdHdvIHdheXM6ICB1c2UgdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBVcGRhdGUgc2l0ZSB0byBpbnN0YWxsIHRoZSBwcmUtYnVpbHQgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYnVpbGQgYW5kIGluc3RhbGwgdGhlIHBsdWctaW4gZnJvbSB0aGUgbGF0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLW5ldy1zb2Z0d2FyZSc+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUHJlLWJ1aWx0IFBsdWctaW4gZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBFY2xpcHNlIFVwZGF0ZSBTaXRlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW4gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUgc2l0ZSwgZm9sbG93IHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdXAgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIEVjbGlwc2UsIHNlbGVjdCAiSW5zdGFsbCBOZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiQWRkLi4uIiBpbiB0aGUgIldvcmsgd2l0aDoiIGFyZWEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRUNMSVBTRV9ETF9QTFVHSU5fVVJMOy9uZW9uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBVUkwgZmllbGQgYW5kIHByb3ZpZGUgYSBtZWFuaW5nZnVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIGluIHRoZSAiTmFtZSIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIk9LIiB0byBoYXZlIHRoZSBlbnRyeSBhZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlICJXb3JrIHdpdGg6IiBkcm9wLWRvd24gbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhlIGVudHJ5IGZvciB0aGUgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrIHRoZSBib3hlcyBuZXh0IHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFlvY3RvIFByb2plY3QgU0RLIFBsdWctaW4KKyAgICAgWW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0ZSB0aGUgcmVtYWluaW5nIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gc3RlcHMgYW5kIHRoZW4gcmVzdGFydCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFIHRvIGZpbmlzaCB0aGUgaW5zdGFsbGF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29udGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi16aXAtZmlsZS1tZXRob2QnPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIFBsdWctaW4gVXNpbmcgdGhlIExhdGVzdCBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0IHNvdXJjZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgSkRLIDEuOCsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIFgxMS1yZWxhdGVkIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHhhdXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gYSBuZXcgdGVybWluYWwgc2hlbGwsIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSB3aXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZWNsaXBzZS1wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIEdpdCB0byBjcmVhdGUgdGhlIGNvcnJlY3QgdGFnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vZWNsaXBzZS1wb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IG5lb24veW9jdG8tJkRJU1RSTzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY3JlYXRlcyBhIGxvY2FsIHRhZyBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5lb24veW9jdG8tJkRJU1RSTzs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9yaWdpbi9uZW9uLW1hc3RlcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBwdXQgaW50byBhIGRldGFjaGVkIEhFQUQgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBmaW5lIHNpbmNlIHlvdSBhcmUgb25seSBnb2luZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYnVpbGRpbmcgYW5kIG5vdCBkZXZlbG9waW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSB0byB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpdGhpbiB0aGUgR2l0IHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgc2NyaXB0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB1cCB0aGUgbG9jYWwgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHJ1bm5pbmcgdGhlIHNldHVwIHNjcmlwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL3NldHVwLnNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBzY3JpcHQgZmluaXNoZXMgZXhlY3V0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgcHJvbXB0cyB5b3Ugd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4gdGhlIDxmaWxlbmFtZT5idWlsZC5zaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQsIHdoaWNoIGlzIGFsc28gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCByZXBvc2l0b3J5IGNyZWF0ZWQgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gdGhlIDxmaWxlbmFtZT5idWlsZC5zaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgYXMgZGlyZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgdGhlIHRhZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBicmFuY2gsIGFuZCBhIHJlbGVhc2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgRUNMSVBTRV9IT01FPS9ob21lL3Njb3R0cmlmL2VjbGlwc2UtcG9reS9zY3JpcHRzL2VjbGlwc2UgLi9idWlsZC5zaCAtbCBuZW9uL3lvY3RvLSZESVNUUk87IG1hc3RlciB5b2N0by0mRElTVFJPOyAyPiZhbXA7MSB8IHRlZSBidWlsZC5sb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGNvbW1hbmQgYWRkcyB0aGUgdGFnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYXJzL3lvY3RvLSZESVNUUk87PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5IRUFEPC9maWxlbmFtZT4sIHRoZW4gdGVsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzY3JpcHQgdG8gdXNlIHRoZSBsb2NhbCAoLWwpIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tvdXQgZm9yIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIHNjcmlwdCwgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcmcueW9jdG8uc2RrLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJlbGVhc2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZGF0ZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi1hcmNoaXZlLnppcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbmVjZXNzYXJ5LCBzdGFydCB0aGUgRWNsaXBzZSBJREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBiZSBzdXJlIHlvdSBhcmUgaW4gdGhlIFdvcmtiZW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIkhlbHAiIHB1bGwtZG93biBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJBZGQiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgYW55dGhpbmcgeW91IHdhbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZSIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkFyY2hpdmUiIGFuZCBicm93c2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaSVAgZmlsZSB5b3UgYnVpbHQgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgWklQIGZpbGUgc2hvdWxkIG5vdCBiZSAidW56aXBwZWQiLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+KmFyY2hpdmUuemlwPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBieSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoZSAiT0siIGJ1dHRvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVjayB0aGUgYm94ZXMgdGhhdCBhcHBlYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsYXRpb24gd2luZG93IHRvIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFlvY3RvIFByb2plY3QgU0RLIFBsdWctaW4KKyAgICAgWW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5pc2ggdGhlIGluc3RhbGxhdGlvbiBieSBjbGlja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgYnV0dG9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsaW5nIHNvZnR3YXJlIHRoYXQgY29udGFpbnMgdW5zaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdGFydCB0aGUgRWNsaXBzZSBJREUgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21hcnMtY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW48L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJpbmcgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluIGludm9sdmVzCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIHRoZSBDcm9zcyBDb21waWxlciBvcHRpb25zIGFuZCB0aGUgVGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb25zIHlvdSBjaG9vc2UgYmVjb21lIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyBmb3IgYWxsIHByb2plY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIGhhdmUgb3Bwb3J0dW5pdGllcyB0byBjaGFuZ2UgdGhlbSBsYXRlciB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY29uZmlndXJlIHRoZSBwcm9qZWN0IChzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gc3RhcnQsIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgZnJvbSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIlByZWZlcmVuY2VzIiBmcm9tIHRoZSAiV2luZG93IiBtZW51IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIFByZWZlcmVuY2VzIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiWW9jdG8gUHJvamVjdCBTREsiIHRvIGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gc2NyZWVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdWItc2VjdGlvbnMgZGVzY3JpYmUgaG93IHRvIGNvbmZpZ3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBsdWctaW4uCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdWdob3V0IHRoZSBkZXNjcmlwdGlvbnMsIGEgc3RhcnQtdG8tZmluaXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSBmb3IgcHJlcGFyaW5nIGEgUUVNVSBpbWFnZSBmb3IgdXNlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIGlzIHJlZmVyZW5jZWQgYXMgdGhlICJ3aWtpIiBhbmQgaXMgbGlua2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGV4YW1wbGUgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPiBDb29rYm9vayBndWlkZSB0byBNYWtpbmcgYW4gRWNsaXBzZSBEZWJ1ZyBDYXBhYmxlIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1jb25maWd1cmluZy10aGUtY3Jvc3MtY29tcGlsZXItb3B0aW9ucyc+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLUNvbXBpbGVyIE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcm9zcyBDb21waWxlciBvcHRpb25zIGVuYWJsZSBFY2xpcHNlIHRvIHVzZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgY3Jvc3MgY29tcGlsZXIgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNvbmZpZ3VyZSB0aGVzZSBvcHRpb25zLCB5b3UgbXVzdCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZSBvZiB0b29sY2hhaW4sIHBvaW50IHRvIHRoZSB0b29sY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgc3lzcm9vdCBsb2NhdGlvbiwgYW5kIHNlbGVjdCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWxlY3RpbmcgdGhlIFRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIHByZS1idWlsdCB0b29sY2hhaW48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBDcm9zcyBDb21waWxlciBPcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN0YW5kYWxvbmUgUHJlLWJ1aWx0IFRvb2xjaGFpbjo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyB0eXBlIHdoZW4geW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0YW5kLWFsb25lIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJ1aWxkIGEgdGFyZ2V0IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB5b3UganVzdCB3YW50IHRvIHVzZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG9vbGNoYWluIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4aXN0aW5nIGtlcm5lbCBhbmQgdGFyZ2V0IHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBoYXZlIGRvd25sb2FkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGluc3RhbGxlZCBhIHByZS1idWlsdCB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGV4aXN0aW5nIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIFN5c3RlbSBEZXJpdmVkIFRvb2xjaGFpbjo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyB0eXBlIGlmIHlvdSBidWlsdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgdXNpbmcgdGhlIHRvb2xjaGFpbiBidWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYnVuZGxlZCBpbnNpZGUgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGNyZWF0ZWQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0YWJsZSBpbWFnZSB1c2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB5b3Ugd291bGQgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNwZWNpZnkgdGhlIFRvb2xjaGFpbiBSb290CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhIHN0YW5kLWFsb25lIHByZS1idWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB5b3Ugc2hvdWxkIGJlIHBvaW50aW5nIHRvIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBpbnN0YWxsZWQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxpbmctdGhlLXNkayc+SW5zdGFsbGluZyB0aGUgU0RLPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgU0RLIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSB1c2luZyBhIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZlZCB0b29sY2hhaW4sIHRoZSBwYXRoIHlvdSBwcm92aWRlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VG9vbGNoYWluIFJvb3QgTG9jYXRpb248L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHlvdSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgKGUuZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNwZWNpZnkgU3lzcm9vdCBMb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGxvY2F0aW9uIGlzIHdoZXJlIHRoZSByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIGxvY2F0aW9uIGRlcGVuZHMgb24gd2hlcmUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBwcmVwYXJlZCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdXNpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPndpa2k8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNvLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NWV9RRU1VX1JPT1RGUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgeW91IHdvdWxkIGJyb3dzZSB0byBhbmQgc2VsZWN0IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvTVlfUUVNVV9ST09URlM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgdGhlIHRvb2xjaGFpbiBhbmQgb24gaG93IHRvIGV4dHJhY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpbnN0YWxsIHRoZSBzeXNyb290IGZpbGVzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstYnVpbGRpbmctYW4tc2RrLWluc3RhbGxlcic+QnVpbGRpbmcgYW4gU0RLIEluc3RhbGxlcjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWxlY3QgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgdGhlIHR5cGUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIHlvdSBhcmUgZ29pbmcgdG8gdXNlIG9yIGVtdWxhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHB1bGwtZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRhcmdldCBBcmNoaXRlY3R1cmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudSB0byBtYWtlIHlvdXIgc2VsZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHB1bGwtZG93biBtZW51IHNob3VsZCBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJjaGl0ZWN0dXJlIHlvdSBuZWVkIGlzIG5vdCBsaXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBtZW51LCB5b3Ugd2lsbCBuZWVkIHRvIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPndpa2k8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tY29uZmlndXJpbmctdGhlLXRhcmdldC1vcHRpb25zJz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgVGFyZ2V0IE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNob29zZSB0byBlbXVsYXRlIGhhcmR3YXJlIHVzaW5nIHRoZSBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IsIG9yIHlvdSBjYW4gY2hvb3NlIHRvIHJ1biB5b3VyIGltYWdlIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5RRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyB0aGUgZW11bGF0b3IsIHlvdSBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGxvY2F0ZSB0aGUga2VybmVsIGFuZCBzcGVjaWZ5IGFueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tIG9wdGlvbnMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHNlbGVjdGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBrZXJuZWwgeW91IGJ1aWx0IHdpbGwgYmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgcGVyZm9ybWVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+d2lraTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugc3BlY2lmeSB5b3VyIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgcGF0aCBmb2xsb3dlZCBieSB0aGUgaW1hZ2UgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYvYnpJbWFnZS1xZW11eDg2LmJpbjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBzZWxlY3RlZCB0aGUgc3RhbmRhbG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlLWJ1aWx0IHRvb2xjaGFpbiwgdGhlIHByZS1idWlsdCBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGRvd25sb2FkZWQgaXMgbG9jYXRlZCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugc3BlY2lmaWVkIHdoZW4geW91IGRvd25sb2FkZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Nb3N0IGN1c3RvbSBvcHRpb25zIGFyZSBmb3IgYWR2YW5jZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgdXNlcnMgdG8gZnVydGhlciBjdXN0b21pemUgdGhlaXIgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgYmV0d2VlbiBwYWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlZCBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCBvdXRzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlcmlhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5vZ3JhcGhpYzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rdm08L2ZpbGVuYW1lPiBtdXN0IGFsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0c2lkZSB0aGUgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5tYW4gcWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGdldCBoZWxwIG9uIGFsbCB0aGUgb3B0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIHNlcmlhbCDigJgmbHQ7LW0gMjU2IC1mdWxsLXNjcmVlbiZndDvigJkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIG1vZGUsIFN5c3Jvb3QgaXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBDcm9zcy1Db21waWxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyBjb25maWd1cmF0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN5c3Jvb3QgTG9jYXRpb246PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FeHRlcm5hbCBIVzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3aWxsIGJlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoZSAiQXBwbHkiIGFuZCAiT0siIHRvIHNhdmUgeW91ciBwbHVnLWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWNyZWF0aW5nLXRoZS1wcm9qZWN0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIFByb2plY3Q8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHR3byB0eXBlcyBvZiBwcm9qZWN0czogIEF1dG90b29scy1iYXNlZCwgb3IKKyAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGUtYmFzZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBBdXRvdG9vbHMtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdHMgZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgTWFrZWZpbGUtYmFzZWQgcHJvamVjdHMgaW4gYQorICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCB3aW5kb3csIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21ha2VmaWxlLWJhc2VkLXByb2plY3RzJz5NYWtlZmlsZS1CYXNlZCBQcm9qZWN0czwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IHVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gcHJvamVjdCBuYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gc3BhY2VzLCB1bmRlcnNjb3JlcywgZXRjLikuICBEb2luZyBzbyBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlIGNvbmZpZ3VyYXRpb24gdG8gZmFpbC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBjcmVhdGUgYSBwcm9qZWN0IGJhc2VkIG9uIGEgWW9jdG8gdGVtcGxhdGUgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCAiQyBQcm9qZWN0IiBmcm9tIHRoZSAiRmlsZSAtPiBOZXciIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgU0RLIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IDxmaWxlbmFtZT5IZWxsbyBXb3JsZCBBTlNJIEMgQXV0b3Rvb2xzIFByb2plY3RzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhbiBBdXRvdG9vbHMtYmFzZWQgcHJvamVjdCBiYXNlZCBvbiBhIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0IGEgbmFtZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UHJvamVjdCBuYW1lOjwvZmlsZW5hbWU+IGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgaHlwaGVucyBhcyBwYXJ0IG9mIHRoZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmhlbGxvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJOZXh0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gaW4gdGhlIHZhcmlvdXMgZmllbGRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJGaW5pc2giLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSAib3BlbiBwZXJzcGVjdGl2ZSIgcHJvbXB0IGFwcGVhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2sgIlllcyIgc28gdGhhdCB5b3UgaW4gdGhlIEMvQysrIHBlcnNwZWN0aXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBsZWZ0LWhhbmQgbmF2aWdhdGlvbiBwYW5lIHNob3dzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzcGxheSB5b3VyIHNvdXJjZSBieSBkb3VibGUgY2xpY2tpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCdzIHNvdXJjZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tY29uZmlndXJpbmctdGhlLWNyb3NzLXRvb2xjaGFpbnMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgQ3Jvc3MtVG9vbGNoYWluczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVhcmxpZXIgc2VjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25lb24tY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIsCisgICAgICAgICAgICAgICAgICAgIHNldHMgdXAgdGhlIGRlZmF1bHQgcHJvamVjdCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGVzZSBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwcm9qZWN0IGJ5CisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCAiWW9jdG8gUHJvamVjdCBTZXR0aW5ncyIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAiUHJvamVjdCAtPiBQcm9wZXJ0aWVzIiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VsZWN0aW9uIGJyaW5ncyB1cCB0aGUgWW9jdG8gUHJvamVjdCBTZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWxvZyBhbmQgYWxsb3dzIHlvdSB0byBtYWtlIGNoYW5nZXMgc3BlY2lmaWMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbmRpdmlkdWFsIHByb2plY3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkJ5IGRlZmF1bHQsIHRoZSBDcm9zcyBDb21waWxlciBPcHRpb25zIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBPcHRpb25zIGZvciBhIHByb2plY3QgYXJlIGluaGVyaXRlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgeW91IHByb3ZpZGVkIHVzaW5nIHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBkZXNjcmliZWQgZWFybGllciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmVvbi1jb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgU2V0dGluZ3MgRGlhbG9nIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSB0aG9zZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlIG9yIHZlcmlmeSB5b3VyIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGFuZCBjbGljayAiT0siLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJpZ2h0LWNsaWNrIGluIHRoZSBuYXZpZ2F0aW9uIHBhbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICJSZWNvbmZpZ3VyZSBQcm9qZWN0IiBmcm9tIHRoZSBwb3AtdXAgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdGlvbiByZWNvbmZpZ3VyZXMgdGhlIHByb2plY3QgYnkgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvZ2VuLnNoPC9maWxlbmFtZT4gaW4gdGhlIHdvcmtzcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBhbHNvIHJ1bnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidG9vbGl6ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hY2xvY2FsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9oZWFkZXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b21ha2UgLS1hPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIG9uIHRoZSAiQ29uc29sZSIgdGFiIGJlbmVhdGggeW91ciBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNlZSB0aGUgcmVzdWx0cyBvZiByZWNvbmZpZ3VyaW5nIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWJ1aWxkaW5nLXRoZS1wcm9qZWN0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QnVpbGRpbmcgdGhlIFByb2plY3Q8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGJ1aWxkIHRoZSBwcm9qZWN0IHNlbGVjdCAiQnVpbGQgQWxsIiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAiUHJvamVjdCIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnNvbGUgc2hvdWxkIHVwZGF0ZSBhbmQgeW91IGNhbiBub3RlIHRoZQorICAgICAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxlciB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgIllvY3RvIFByb2plY3QgU0RLIEF1dG90b29scyIgcHJvamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUgbWlnaHQgZGlzcGxheSBlcnJvciBtZXNzYWdlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucy9TeW1ib2xzL1R5cGVzIHRoYXQgY2Fubm90IGJlICJyZXNvbHZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBldmVuIHdoZW4gdGhlIHJlbGF0ZWQgaW5jbHVkZSBmaWxlIGlzIGxpc3RlZCBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgbmF2aWdhdG9yIGFuZCB3aGVuIHRoZSBwcm9qZWN0IGlzIGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzIG9ubHksIGl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBhIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VkIGZvbGRlciB0byB0aGUgYXBwcm9wcmlhdGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGVzZSBzdGVwcyB0byBhZGQgdGhlIGxpbmtlZCBmb2xkZXI6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhlIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0ICJGb2xkZXIiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GaWxlID4gTmV3PC9maWxlbmFtZT4gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgIk5ldyBGb2xkZXIiIERpYWxvZywgc2VsZWN0ICJMaW5rIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0ZSBsb2NhdGlvbiAobGlua2VkIGZvbGRlcikiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJCcm93c2UiIHRvIG5hdmlnYXRlIHRvIHRoZSBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlciBpbnNpZGUgdGhlIHNhbWUgc3lzcm9vdCBsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBpbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJPSyIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkZpbmlzaCIgdG8gc2F2ZSB0aGUgbGlua2VkIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1zdGFydGluZy1xZW11LWluLXVzZXItc3BhY2UtbmZzLW1vZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TdGFydGluZyBRRU1VIGluIFVzZXItU3BhY2UgTkZTIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yIGZyb20gd2l0aGluIEVjbGlwc2UsIGZvbGxvdworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3NlIGFuZCBzZWxlY3QgIkV4dGVybmFsIFRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbnMgLi4uIiBmcm9tIHRoZSAiUnVuIC0+IEV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9vbHMiIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRlIGFuZCBzZWxlY3QgeW91ciBpbWFnZSBpbiB0aGUgbmF2aWdhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsIHRvIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnFlbXVfaTU4Ni1wb2t5LWxpbnV4PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJSdW4iIHRvIGxhdW5jaCBRRU1VLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaG9zdCBvbiB3aGljaCB5b3UgYXJlIHJ1bm5pbmcgUUVNVSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdGhlIDxmaWxlbmFtZT5ycGNiaW5kPC9maWxlbmFtZT4gdXRpbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIHRvIGJlIGFibGUgdG8gbWFrZSBSUEMgY2FsbHMgb24gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgb24gdGhhdCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBRRU1VIGRvZXMgbm90IGludm9rZSBhbmQgeW91IHJlY2VpdmUgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMgaW52b2x2aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ycGNiaW5kPC9maWxlbmFtZT4sIGZvbGxvdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgdG8gZ2V0IHRoZSBzZXJ2aWNlIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIG9uIGEgbmV3IFVidW50dSAxNi4wNCBMVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLCB5b3UgbXVzdCBkbyB0aGUgZm9sbG93aW5nIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIGdldCBRRU1VIHRvIGxhdW5jaDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHJwY2JpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBpbnN0YWxsaW5nIDxmaWxlbmFtZT5ycGNiaW5kPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2luaXQuZC9ycGNiaW5kPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBPUFRJT05TPSItaSAtdyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBtb2RpZnlpbmcgdGhlIGZpbGUsIHlvdSBuZWVkIHRvIHN0YXJ0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBzZXJ2aWNlIHBvcnRtYXAgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5lZWRlZCwgZW50ZXIgeW91ciBob3N0IHJvb3QgcGFzc3dvcmQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2hlbGwgd2luZG93IGF0IHRoZSBwcm9tcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXRzIHVwIGEgPGZpbGVuYW1lPlRhcCAwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG5lZWRlZCBmb3IgcnVubmluZyBpbiB1c2VyLXNwYWNlIE5GUworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FpdCBmb3IgUUVNVSB0byBsYXVuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBRRU1VIGxhdW5jaGVzLCB5b3UgY2FuIGJlZ2luIG9wZXJhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGF0IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZSB1c2VmdWwgdGFzayBhdCB0aGlzIHBvaW50IHdvdWxkIGJlIHRvIGRldGVybWluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJUCBBZGRyZXNzIGZvciB0aGUgdXNlci1zcGFjZSBORlMgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmlmY29uZmlnPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgUUVNVSBtYWNoaW5lIGFwcGVhcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRlcm0gd2luZG93LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgYWRkcmVzcyB0byBoZWxwIHlvdSBzZWUgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVAgYWRkcmVzcyB0aGUgaW5zdGFuY2Ugb2YgUUVNVSBpcyB1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWRlcGxveWluZy1hbmQtZGVidWdnaW5nLXRoZS1hcHBsaWNhdGlvbic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkRlcGxveWluZyBhbmQgRGVidWdnaW5nIHRoZSBBcHBsaWNhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgUUVNVSBlbXVsYXRvciBpcyBydW5uaW5nIHRoZSBpbWFnZSwgeW91IGNhbiBkZXBsb3kKKyAgICAgICAgICAgICAgICAgICAgeW91ciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgRWNsaXBzZSBJREUgYW5kIHRoZW4gdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSBlbXVsYXRvciB0byBwZXJmb3JtIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5LCBFY2xpcHNlIGRvZXMgbm90IHN1cHBvcnQgU1NIIHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGlmIHlvdSBuZWVkIHRvIHJ1biBvciBkZWJ1ZyBhIHJlbW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gdXNpbmcgdGhlIGhvc3QgZGlzcGxheSwgeW91IG11c3QgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHR1bm5lbGluZyBjb25uZWN0aW9uIGZyb20gb3V0c2lkZSBFY2xpcHNlIGFuZCBrZWVwCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbm5lY3Rpb24gYWxpdmUgZHVyaW5nIHlvdXIgd29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBhIG5ldyB0ZXJtaW5hbCwgcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1YWSA8cmVwbGFjZWFibGU+dXNlcl9uYW1lPC9yZXBsYWNlYWJsZT5APHJlcGxhY2VhYmxlPnJlbW90ZV9ob3N0X2lwPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBhYm92ZSBmb3JtLCBoZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1YWSByb290QDE5Mi4xNjguNy4yCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBjb21tYW5kLCBhZGQgdGhlIGNvbW1hbmQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkIGluIEVjbGlwc2UncyBydW4gY29uZmlndXJhdGlvbiBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgRElTUExBWT06MTAuMAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBub3QgZGVzdHJveSB0aGUgY29ubmVjdGlvbiBkdXJpbmcgeW91ciBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uIChpLmUuIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBvdXQgb2Ygb3IgY2xvc2UgdGhhdCBzaGVsbCkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCAiRGVidWcgQ29uZmlndXJhdGlvbnMuLi4iIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1biIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgbGVmdCBhcmVhLCBleHBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qy9DKytSZW1vdGUgQXBwbGljYXRpb248L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGUgeW91ciBwcm9qZWN0IGFuZCBzZWxlY3QgaXQgdG8gYnJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCBhIG5ldyB0YWJiZWQgdmlldyBpbiB0aGUgRGVidWcgQ29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgb24gdGhlICJEZWJ1Z2dlciIgdGFiIHRvIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sIGRlYnVnZ2VyIHlvdSBhcmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBjaGFuZ2UgdG8gdGhlIGRlYnVnZ2VyIHBlcnNwZWN0aXZlIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayBvbiB0aGUgIk1haW4iIHRhYi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgYSBuZXcgY29ubmVjdGlvbiB0byB0aGUgUUVNVSBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGNsaWNraW5nIG9uICJuZXciLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCA8ZmlsZW5hbWU+U1NIPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbnMgU2VjdXJlIFNvY2tldCBTaGVsbCBhbmQgdGhlbiBjbGljayAiT0siLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc2VsZWN0IGFuIFRDRiBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhciBvdXQgdGhlICJDb25uZWN0aW9uIG5hbWUiIGZpZWxkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVyIGFueSBuYW1lIHlvdSB3YW50IGZvciB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXQgdGhlIElQIGFkZHJlc3MgZm9yIHRoZSBjb25uZWN0aW9uIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJIb3N0IiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgUUVNVSwgdGhlIGRlZmF1bHQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+MTkyLjE2OC43LjI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBhIHByZXZpb3VzIFFFTVUgc2Vzc2lvbiBkaWQgbm90IGV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbmx5LCB0aGUgSVAgYWRkcmVzcyBpbmNyZW1lbnRzIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjE5Mi4xNjguNy4zPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIElQIGFkZHJlc3MgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgc2Vzc2lvbiBieSBsb29raW5nIGluIHRoZSB4dGVybSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zIHdoZW4geW91IGxhdW5jaCBRRU1VLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRlciA8ZmlsZW5hbWU+cm9vdDwvZmlsZW5hbWU+LCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBkZWZhdWx0IGZvciBRRU1VLCBmb3IgdGhlICJVc2VyIiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGxlYXZlIHRoZSBwYXNzd29yZCBmaWVsZCBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiRmluaXNoIiB0byBjbG9zZSB0aGUgTmV3IENvbm5lY3Rpb25zIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBuZWNlc3NhcnksIHVzZSB0aGUgZHJvcC1kb3duIG1lbnUgbm93IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIiBmaWVsZCBhbmQgcGljayB0aGUgSVAgQWRkcmVzcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRlcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgYXJlIGNvbm5lY3RpbmcgYXMgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBmb3IgUUVNVSB4ODYtNjQgU0RLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIHByb3ZpZGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVtb3RlIEFic29sdXRlIEZpbGUgUGF0aCBmb3IgQy9DKysgQXBwbGljYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQsIGJyb3dzZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9yb290LzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPlByb2plY3ROYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+L2hvbWUvcm9vdC9oZWxsbzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY291bGQgYWxzbyBicm93c2UgdG8gYW55IG90aGVyIHBhdGggeW91IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSBhY2Nlc3MgdG8gb24gdGhlIHRhcmdldCBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBpcyB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIG9uIHRoZSBRRU1VIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmFpbCB0byBicm93c2UgdG8gYW5kIHNwZWNpZnkgYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwgUUVNVSB3aWxsIG5vdCB1bmRlcnN0YW5kIHdoYXQgdG8gcmVtb3RlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXVuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBpcyBoZWxwZnVsIGluIHRoYXQgaXQgYXV0byBmaWxscyB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gbmFtZSBmb3IgeW91IGFzc3VtaW5nIHlvdSBicm93c2VkIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcHJvbXB0ZWQgdG8gcHJvdmlkZSBhIHVzZXJuYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvcHRpb25hbGx5IHNldCBhIHBhc3N3b3JkLCBiZSBzdXJlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlICJyb290IiBhcyB0aGUgdXNlcm5hbWUgYW5kIHlvdSBsZWF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFzc3dvcmQgZmllbGQgYmxhbmsuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGNoYW5nZSB0byB0aGUgIkRlYnVnIiBwZXJzcGVjdGl2ZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkRlYnVnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdCB0aGUgZGVidWcgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi11c2luZy1MaW51eHRvb2xzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgTGludXh0b29sczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIgaW4gdGhlIG1hbnVhbCwgcGVyZm9ybWFuY2UgdG9vbHMgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgKExpbnV4dG9vbHMpIHRoYXQgZW5oYW5jZSB5b3VyIGRldmVsb3BtZW50IGV4cGVyaWVuY2UuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSBhaWRzIGluIGRldmVsb3BpbmcgYW5kIGRlYnVnZ2luZworICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgYW5kIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlc2UgdG9vbHMgZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgdGhlICJMaW51eHRvb2xzIiBtZW51LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbmZpZ3VyZSBhbmQgdXNlIHRoZXNlIHRvb2xzLAorICAgICAgICAgICAgICAgICAgICBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLyc+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLzwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sCmluZGV4IGVlMWRjYmEuLmE0MDgwMjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWludHJvLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwKQEAgLTExMSw2ICsxMTEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGFuIG92ZXJ2aWV3IG9mIFRvYXN0ZXIgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0ICZESVNUUk87CisgICAgICAgICAgICBSZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly95b3V0dS5iZS9CbFhkT1lMZ1B4QSc+VG9hc3RlciAtIFlvY3RvIFByb2plY3QgMi4yPC91bGluaz4iCisgICAgICAgICAgICB2aWRlby4KKyAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIAogICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWluc3RhbGxhdGlvbi1vcHRpb25zJz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwKaW5kZXggOTYzYjIxMS4uOTY2YzM1ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkPC9maWxlbmFtZT4pLCBzdGFydCBUb2FzdGVyIHVzaW5nIHRoaXMKICAgICAgICAgICAgIGNvbW1hbmQ6CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgc291cmNlIC4uL2JpdGJha2UvYmluL3RvYXN0ZXIKKyAgICAgJCBzb3VyY2UgdG9hc3RlciBzdGFydAogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgWW91IGNhbiBub3cgcnVuIHlvdXIgYnVpbGRzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3Igd2l0aAogICAgICAgICAgICAgVG9hc3RlciBhcyBleHBsYWluZWQgaW4gc2VjdGlvbgpAQCAtNTYsNyArNTYsMjMgQEAKICAgICAgICAgICAgIHNldCBhIGRpZmZlcmVudCBwb3J0LgogICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBzZXRzIHRoZSBwb3J0IHRvICI4NDAwIjoKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzb3VyY2UgLi4vYml0YmFrZS9iaW4vdG9hc3RlciB3ZWJwb3J0PTg0MDAKKyAgICAgJCBzb3VyY2UgdG9hc3RlciBzdGFydCB3ZWJwb3J0PTg0MDAKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLWEtZGlmZmVyZW50LWFkZHJlc3MnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBhIERpZmZlcmVudCBBZGRyZXNzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIFRvYXN0ZXIgYmluZHMgdG8gdGhlIGxvb3AgYmFjayBhZGRyZXNzCisgICAgICAgICAgICAoaS5lLiBsb2NhbGhvc3QpLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5XRUJQT1JUPC9maWxlbmFtZT4gcGFyYW1ldGVyIHRvCisgICAgICAgICAgICBzZXQgYSBkaWZmZXJlbnQgaG9zdC4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgc2V0cyB0aGUgaG9zdCBhbmQgcG9ydAorICAgICAgICAgICAgdG8gIjAuMC4wLjA6ODQwMCI6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIHRvYXN0ZXIgc3RhcnQgd2VicG9ydD0wLjAuMC4wOjg0MDAKICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KQEAgLTExNiwxMiArMTMyLDE0IEBACiAgICAgICAgICAgICBjcmVhdGUgYSBzdXBlcnVzZXIgYnkgZm9sbG93aW5nIHRoZXNlIHN0ZXBzOgogICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgogICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlZCA8ZmlsZW5hbWU+dmlydHVhbGVudjwvZmlsZW5hbWU+LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZWQgPGZpbGVuYW1lPnBpcDM8L2ZpbGVuYW1lPiwgd2hpY2ggaXMKICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkLCB0byBzZXQgdXAgdGhlIFRvYXN0ZXIgc3lzdGVtIGRlcGVuZGVuY2llcywKLSAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGJlIHN1cmUgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZhdGVkLgotICAgICAgICAgICAgICAgICAgVG8gYWN0aXZhdGUgdGhpcyBlbnZpcm9ubWVudCwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGJlIHN1cmUgdGhlIGxvY2FsIHVzZXIgcGF0aCBpcyBpbiB5b3VyCisgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGxpc3QuCisgICAgICAgICAgICAgICAgICBUbyBhcHBlbmQgdGhlIHBpcDMgbG9jYWwgdXNlciBwYXRoLCB1c2UgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgY29tbWFuZDoKICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICQgc291cmNlIHZlbnYvYmluL2FjdGl2YXRlCisgICAkIGV4cG9ydCBQQVRIPSRQQVRIOiRIT01FLy5sb2NhbC9iaW4KICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CkBAIC0yMTEsMTYgKzIyOSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgTXlzcWwgZGF0YWJhc2Ugc2VydmVyLgogICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgVWJ1bnR1IDE0LjA0LjMsIHJ1biB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgVWJ1bnR1IDE2LjA0LCBydW4gdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGFwYWNoZTIgbGliYXBhY2hlMi1tb2Qtd3NnaSBteXNxbC1zZXJ2ZXIgdmlydHVhbGVudiBsaWJteXNxbGNsaWVudC1kZXYKKyAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgYXBhY2hlMiBsaWJhcGFjaGUyLW1vZC13c2dpLXB5MyBteXNxbC1zZXJ2ZXIgcHl0aG9uMy1waXAgbGlibXlzcWxjbGllbnQtZGV2CiAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgRmVkb3JhIDIyIG9yIGEgUmVkSGF0IGRpc3RyaWJ1dGlvbiwgcnVuCisgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBGZWRvcmEgMjQgb3IgYSBSZWRIYXQgZGlzdHJpYnV0aW9uLCBydW4KICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgogICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICQgc3VkbyBkbmYgaW5zdGFsbCBodHRwZCBtb2Rfd3NnaSBweXRob24tdmlydHVhbGVudiBnY2MgbXlzcWwtZGV2ZWwKKyAgICQgc3VkbyBkbmYgaW5zdGFsbCBodHRwZCBweXRob24zLW1vZF93c2dpIHB5dGhvbjMtcGlwIG1hcmlhZGItc2VydmVyIG1hcmlhZGItZGV2ZWwgcHl0aG9uMy1kZXZlbAorICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIG9wZW5TVVNFIExlYXAgNDIuMSwgcnVuCisgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAkIHN1ZG8genlwcGVyIGluc3RhbGwgYXBhY2hlMiBhcGFjaGUyLW1vZF93c2dpLXB5dGhvbjMgcHl0aG9uMy1waXAgbWFyaWFkYiBtYXJpYWRiLWNsaWVudCBweXRob24zLWRldmVsCiAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KQEAgLTIzNCwyOCArMjU5LDMxIEBACiAgICAgICAgICAgICAgIFBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwcyB0byBpbnN0YWxsIFRvYXN0ZXI6CiAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgdG9hc3RlciB1c2VyIGFuZCBzZXQgaXRzIGhvbWUgZGlyZWN0b3J5IHRvCisgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi92YXIvd3d3L3RvYXN0ZXI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgJCBzdWRvIC91c3Ivc2Jpbi91c2VyYWRkIHRvYXN0ZXIgLW1kIC92YXIvd3d3L3RvYXN0ZXIgLXMgL2Jpbi9mYWxzZQorICAgICQgc3VkbyBzdSAtIHRvYXN0ZXIgLXMgL2Jpbi9iYXNoCisgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgIENoZWNrb3V0IGEgY29weSBvZiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgd2ViIHNlcnZlciBkaXJlY3RvcnkuCiAgICAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgYmUgdXNpbmcgPGZpbGVuYW1lPi92YXIvd3d3L3RvYXN0ZXI8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAkIG1rZGlyIC1wIC92YXIvd3d3L3RvYXN0ZXIKLSAgICQgY2QgL3Zhci93d3cvdG9hc3Rlci8KICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKICAgICQgZ2l0IGNoZWNrb3V0ICZESVNUUk9fTkFNRV9OT19DQVA7CiAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemUgYSB2aXJ0dWFsIGVudmlyb25tZW50IGFuZCBpbnN0YWxsIFRvYXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgICAgICAgVXNpbmcgYSB2aXJ0dWFsIGVudmlyb25tZW50IGtlZXBzIHRoZSBQeXRob24gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgdXNpbmcgdGhlIC0tdXNlciBmbGFnIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAga2VlcHMgdGhlIFB5dGhvbiBwYWNrYWdlcwogICAgICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkIGZyb20geW91ciBzeXN0ZW0tcHJvdmlkZWQgcGFja2FnZXM6CiAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgJCBjZCAvdmFyL3d3dy90b2FzdGVyLwotICAgJCB2aXJ0dWFsZW52IHZlbnYKLSAgICQgc291cmNlIC4vdmVudi9iaW4vYWN0aXZhdGUKLSAgICQgcGlwIGluc3RhbGwgLXIgLi9wb2t5L2JpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0Ci0gICAkIHBpcCBpbnN0YWxsIG15c3FsCi0gICAkIHBpcCBpbnN0YWxsIE15U1FMLXB5dGhvbgorICAgJCBwaXAzIGluc3RhbGwgLS11c2VyIC1yIC4vcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dAorICAgJCBwaXAzIGluc3RhbGwgLS11c2VyIG15c3FsY2xpZW50CiAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICBJc29sYXRpbmcgdGhlc2UgcGFja2FnZXMgaXMgbm90IHJlcXVpcmVkIGJ1dCBpcwpAQCAtMjcwLDcgKzI5OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+REFUQUJBU0U8L2ZpbGVuYW1lPiBzZXR0aW5nczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjgvcmVmL3NldHRpbmdzLyNzdGQ6c2V0dGluZy1TRUNSRVRfS0VZJz5EQVRBQkFTRTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgIERBVEFCQVNFUyA9IHsKICAgICAgICAnZGVmYXVsdCc6IHsKQEAgLTI4NSwxMyArMzE1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCB0aGUgPGZpbGVuYW1lPlNFQ1JFVF9LRVk8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjgvcmVmL3NldHRpbmdzLyNzdGQ6c2V0dGluZy1TRUNSRVRfS0VZJz5TRUNSRVRfS0VZPC91bGluaz46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICBTRUNSRVRfS0VZID0gJzxyZXBsYWNlYWJsZT55b3VyX3NlY3JldF9rZXk8L3JlcGxhY2VhYmxlPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+U1RBVElDX1JPT1Q8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjgvcmVmL3NldHRpbmdzLyNzdGQ6c2V0dGluZy1TRUNSRVRfS0VZJz5TVEFUSUNfUk9PVDwvdWxpbms+OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgU1RBVElDX1JPT1QgPSAnL3Zhci93d3cvdG9hc3Rlci9zdGF0aWNfZmlsZXMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgpAQCAtMzE0LDkgKzM0Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBkYXRhLCBhbmQgZ2F0aGVyIHRoZSBzdGF0aWNhbGx5LXNlcnZlZCBmaWxlczoKICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAkIGNkICAvdmFyL3d3dy90b2FzdGVyL3Bva3kvCi0gICAkIC4vYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiCiAgICAkIC4vYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZQotICAgJCBUT0FTVEVSX0RJUj1gcHdkYCBUT0FTVEVSX0NPTkY9Li9tZXRhLXBva3kvY29uZi90b2FzdGVyY29uZi5qc29uIC4vYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY2hlY2tzZXR0aW5ncworICAgJCBUT0FTVEVSX0RJUj1gcHdkYCBUT0FTVEVSX0NPTkY9Li9tZXRhLXBva3kvY29uZi90b2FzdGVyY29uZi5qc29uIFwKKyAgICAgLi9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBjaGVja3NldHRpbmdzCiAgICAkIC4vYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY29sbGVjdHN0YXRpYwogICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC0zMjQsOCArMzU2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBhYm92ZSBzZXQgb2YgY29tbWFuZHMsIGFmdGVyIG1vdmluZyB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBkaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+c3luY2RiPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5taWdyYXRlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMgZW5zdXJlIHRoZSBkYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1pZ3JhdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGVuc3VyZXMgdGhlIGRhdGFiYXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYSBoYXMgaGFkIGNoYW5nZXMgcHJvcGFnYXRlZCBjb3JyZWN0bHkgKGkuZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlncmF0aW9ucykuCiAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtMzY1LDcgKzM5Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIHRoZSA8ZmlsZW5hbWU+Y29sbGVjdHN0YXRpYzwvZmlsZW5hbWU+IGNvbW1hbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYSBEamFuZ28gZnJhbWV3b3JrIGNvbW1hbmQgdGhhdCBjb2xsZWN0cyBhbGwgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY2FsbHkgc2VydmVkIGZpbGVzIGludG8gYSBkZXNpZ25hdGVkIGRpcmVjdG9yeSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzZXJ2ZWQgdXAgYnkgdGhlIEFwYWNoZSB3ZWIgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzZXJ2ZWQgdXAgYnkgdGhlIEFwYWNoZSB3ZWIgc2VydmVyIGFzIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQVRJQ19ST09UPC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFuIEFwYWNoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIFRvYXN0ZXIgdG8geW91ciBBcGFjaGUgd2ViCkBAIC0zNzgsMjEgKzQxMSwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgIC9ldGMvaHR0cGQvY29uZi5kL3RvYXN0ZXIuY29uZgogICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIE9wZW5TVVNFLCBwdXQgaXQgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAvZXRjL2FwYWNoZTIvY29uZi5kL3RvYXN0ZXIuY29uZgorICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBzYW1wbGUgQXBhY2hlIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGZvbGxvdzoKICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICBBbGlhcyAvc3RhdGljIC92YXIvd3d3L3RvYXN0ZXIvc3RhdGljX2ZpbGVzCiAgICAmbHQ7RGlyZWN0b3J5IC92YXIvd3d3L3RvYXN0ZXIvc3RhdGljX2ZpbGVzJmd0OwotICAgICAgICAgICBPcmRlciBhbGxvdyxkZW55Ci0gICAgICAgICAgIEFsbG93IGZyb20gYWxsCi0gICAgICAgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgICAgICAgJmx0O0lmTW9kdWxlIG1vZF9hY2Nlc3NfY29tcGF0LmMmZ3Q7CisgICAgICAgICAgICAgICAgICAgT3JkZXIgYWxsb3csZGVueQorICAgICAgICAgICAgICAgICAgIEFsbG93IGZyb20gYWxsCisgICAgICAgICAgICZsdDsvSWZNb2R1bGUmZ3Q7CisgICAgICAgICAgICZsdDtJZk1vZHVsZSAhbW9kX2FjY2Vzc19jb21wYXQuYyZndDsKKyAgICAgICAgICAgICAgICAgICBSZXF1aXJlIGFsbCBncmFudGVkCisgICAgICAgICAgICZsdDsvSWZNb2R1bGUmZ3Q7CiAgICAmbHQ7L0RpcmVjdG9yeSZndDsKIAotICAgV1NHSURhZW1vblByb2Nlc3MgdG9hc3Rlcl93c2dpIHB5dGhvbi1wYXRoPS92YXIvd3d3L3RvYXN0ZXIvcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyOi92YXIvd3d3L3RvYXN0ZXIvdmVudi9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMKKyAgICZsdDtEaXJlY3RvcnkgL3Zhci93d3cvdG9hc3Rlci9wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4mZ3Q7CisgICAgICAgICAgICZsdDtGaWxlcyAid3NnaS5weSImZ3Q7CisgICAgICAgICAgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgICAgICAgJmx0Oy9GaWxlcyZndDsKKyAgICZsdDsvRGlyZWN0b3J5Jmd0OworCisgICBXU0dJRGFlbW9uUHJvY2VzcyB0b2FzdGVyX3dzZ2kgcHl0aG9uLXBhdGg9L3Zhci93d3cvdG9hc3Rlci9wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXI6L3Zhci93d3cvdG9hc3Rlci8ubG9jYWwvbGliL3B5dGhvbjMuNC9zaXRlLXBhY2thZ2VzCiAKICAgIFdTR0lTY3JpcHRBbGlhcyAvICIvdmFyL3d3dy90b2FzdGVyL3Bva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5IgogICAgJmx0O0xvY2F0aW9uIC8mZ3Q7Ci0gICAgICAgV1NHSVByb2Nlc3NHcm91cCB0b2FzdGVybl93c2dpCisgICAgICAgV1NHSVByb2Nlc3NHcm91cCB0b2FzdGVyX3dzZ2kKICAgICZsdDsvTG9jYXRpb24mZ3Q7CiAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgVWJ1bnR1IG9yIERlYmlhbiwKQEAgLTQwNCw3ICs0NTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCByZXN0YXJ0IEFwYWNoZSB0byBtYWtlIHN1cmUgYWxsIG5ldyBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgaXMgbG9hZGVkLgotICAgICAgICAgICAgICAgICAgICAgIEZvciBVYnVudHUgYW5kIERlYmlhbiB1c2U6CisgICAgICAgICAgICAgICAgICAgICAgRm9yIFVidW50dSwgRGViaWFuLCBhbmQgT3BlblNVU0UgdXNlOgogICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICQgc3VkbyBzZXJ2aWNlIGFwYWNoZTIgcmVzdGFydAogICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KQEAgLTQxNCwyMiArNDYxLDUzIEBACiAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIGJ1aWxkIHJ1bm5lciBzZXJ2aWNlLgotICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VydmljZSBuZWVkcyB0byBiZSBydW5uaW5nIGluIG9yZGVyIHRvIGRpc3BhdGNoCi0gICAgICAgICAgICAgICAgICAgICAgYnVpbGRzLgotICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgUHJlcGFyZSB0aGUgc3lzdGVtZCBzZXJ2aWNlIHRvIHJ1biBUb2FzdGVyIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIHNlcnZpY2U6CiAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgL3Zhci93d3cvdG9hc3Rlci9wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHJ1bmJ1aWxkcworICAgW1VuaXRdCisgICBEZXNjcmlwdGlvbj1Ub2FzdGVyIHJ1bmJ1aWxkcworCisgICBbU2VydmljZV0KKyAgIFR5cGU9Zm9ya2luZworICAgVXNlcj10b2FzdGVyCisgICBFeGVjU3RhcnQ9L3Vzci9iaW4vc2NyZWVuIC1kIC1tIC1TIHJ1bmJ1aWxkcyAvdmFyL3d3dy90b2FzdGVyL3Bva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ydW5idWlsZHMtc2VydmljZS5zaCBzdGFydAorICAgRXhlY1N0b3A9L3Vzci9iaW4vc2NyZWVuIC1TIHJ1bmJ1aWxkcyAtWCBxdWl0CisgICBXb3JraW5nRGlyZWN0b3J5PS92YXIvd3d3L3RvYXN0ZXIvcG9reQorCisgICBbSW5zdGFsbF0KKyAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICBQcmVwYXJlIHRoZSA8ZmlsZW5hbWU+cnVuYnVpbGRzLXNlcnZpY2Uuc2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCB0aGF0IHlvdSBuZWVkIHRvIHBsYWNlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdmFyL3d3dy90b2FzdGVyL3Bva3kvYml0YmFrZS9saWIvdG9hc3Rlci88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBieSBzZXR0aW5nIHVwIGV4ZWN1dGFibGUgcGVybWlzc2lvbnM6CiAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgIyEvYmluL3NoCi0gICAjIHRvYXN0ZXIgcnVuIGJ1aWxkcyBkaXNwYXRjaGVyCi0gICBjZCAvdmFyL3d3dy90b2FzdGVyLwotICAgc291cmNlIC4vdmVudi9iaW4vYWN0aXZhdGUKLSAgIC4vYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgcnVuYnVpbGRzCisgICAjIS9iaW4vYmFzaAorCisgICAjZXhwb3J0IGh0dHBfcHJveHk9aHR0cDovL3Byb3h5Lmhvc3QuY29tOjgwODAKKyAgICNleHBvcnQgaHR0cHNfcHJveHk9aHR0cDovL3Byb3h5Lmhvc3QuY29tOjgwODAKKyAgICNleHBvcnQgR0lUX1BST1hZX0NPTU1BTkQ9JEhPTUUvYmluL2dpdHByb3h5CisKKyAgIGNkIH4vcG9reS8KKyAgIHNvdXJjZSAuL29lLWluaXQtYnVpbGQtZW52IGJ1aWxkCisgICBzb3VyY2UgLi4vYml0YmFrZS9iaW4vdG9hc3RlciAkMSBub3dlYgorICAgWyAiJDEiID09ICdzdGFydCcgXSAmYW1wOyZhbXA7IC9iaW4vYmFzaAogICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICBSdW4gdGhlIHNlcnZpY2U6CisgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIyBzZXJ2aWNlIHJ1bmJ1aWxkcyBzdGFydAorICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICBTaW5jZSB0aGUgc2VydmljZSBpcyBydW5uaW5nIGluIGEgZGV0YWNoZWQgc2NyZWVuCisgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbiwgeW91IGNhbiBhdHRhY2ggdG8gaXQgdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICQgc3VkbyBzdSAtIHRvYXN0ZXIKKyAgICQgc2NyZWVuIC1yUyBydW5idWlsZHMKKyAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXRhY2ggZnJvbSB0aGUgc2VydmljZSBhZ2FpbiB1c2luZyAiQ3RybC1hIgorICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5ICJkIiBrZXkgY29tYmluYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IG9wZW4gdXAgYSBicm93c2VyIGFuZCBzdGFydCB1c2luZyBUb2FzdGVyLgogICAgICAgICAgIDwvcGFyYT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbAppbmRleCBkYWVmYTc5Li5jNWM2Nzk1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sCkBAIC0yMiw2ICsyMiwxMSBAQAogICAgICAgICAgICAgYW5kCiAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNyZWxlYXNlcyc+WW9jdG8gUHJvamVjdCBSZWxlYXNlPC91bGluaz4iCiAgICAgICAgICAgICBzZWN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAJICAgIEZvciBVYnVudHUvRGViaWFuLCB5b3UgbWlnaHQgYWxzbyBuZWVkIHRvIGRvIGFuIGFkZGl0aW9uYWwgaW5zdGFsbAorICAgICAgICAgICAgb2YgcGlwMy4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgcHl0aG9uMy1waXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTQyLDU2ICs0Nyw2IEBACiAgICAgICAgICAgICBpbnN0YWxsLWNvbXBhdGlibGUgZm9ybWF0LgogICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItdmlydHVhbC1lbnZpcm9ubWVudCc+Ci0gICAgICAgICAgICA8dGl0bGU+U2V0IFVwIGEgUHl0aG9uIFZpcnR1YWwgRW52aXJvbm1lbnQ8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBTZXQgdXAgYSBQeXRob24gdmlydHVhbCBlbnZpcm9ubWVudCB0aGF0IGFsbG93cyB5b3UKLSAgICAgICAgICAgICAgICB0byBtYWludGFpbiBhIGRlZGljYXRlZCBQeXRob24gZXhlY3V0YWJsZSBhbmQgaXRzIG93bgotICAgICAgICAgICAgICAgIHNldCBvZiBpbnN0YWxsZWQgbW9kdWxlcy4KLSAgICAgICAgICAgICAgICBEb2luZyBzbyBzZXBhcmF0ZXMgdGhlIGV4ZWN1dGFibGUgZnJvbSBQeXRob24gYW5kIHRoZQotICAgICAgICAgICAgICAgIG1vZHVsZXMgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgVGhpcyBzZXBhcmF0aW9uIGF2b2lkcyBhbnkgdmVyc2lvbiBjb25mbGljdHMuCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBub3QgYWJzb2x1dGVseQotICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGRvaW5nIHNvIGlzIGhpZ2hseSByZWNvbW1lbmRlZC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgeW91ciB2aXJ0dWFsIGVudmlyb25tZW50LgotICAgICAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGFzc3VtZSBhIFVidW50dSBkaXN0cmlidXRpb246Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgPGZpbGVuYW1lPnZpcnR1YWxlbnY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbCB0aGUgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHl0aG9uLXZpcnR1YWxlbnY8L2ZpbGVuYW1lPiBwYWNrYWdlIGZyb20geW91cgotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIHJhdGhlciB0aGFuIHVzaW5nIDxmaWxlbmFtZT5waXA8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBweXRob24tdmlydHVhbGVudgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGFuZCBBY3RpdmF0ZSBhIFZpcnR1YWwgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCB2aXJ0dWFsZW52IHZlbnYKLSAgICAgJCBzb3VyY2UgdmVudi9iaW4vYWN0aXZhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIEFmdGVyIHNldHRpbmcgdXAgYSB2aXJ0dWFsIGVudmlyb25tZW50IGluCi0gICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIHJ1biBUb2FzdGVyLCB5b3UgbXVzdCBpbml0aWFsaXplIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudCBlYWNoIHRpbWUgeW91IHdhbnQgdG8gc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgZW52aXJvbm1lbnQganVzdAotICAgICAgICAgICAgICAgICAgICBiZWZvcmUgeW91IHN0YXJ0IFRvYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzb3VyY2UgdmVudi9iaW4vYWN0aXZhdGUKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCiAgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWxvYWQtcGFja2FnZXMnPgogICAgICAgICAgICAgPHRpdGxlPkluc3RhbGwgVG9hc3RlciBQYWNrYWdlczwvdGl0bGU+CiAKQEAgLTk5LDcgKzU0LDIxIEBACiAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgcGFja2FnZXMgdGhhdCBUb2FzdGVyIHJlcXVpcmVzLgogICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQ6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHBpcCBpbnN0YWxsIC1yIGJpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0CisgICAgICQgJCBwaXAzIGluc3RhbGwgLS11c2VyIC1yIGJpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBjb21tYW5kIGluc3RhbGxzIHRoZSBuZWNlc3NhcnkgVG9hc3RlciBtb2R1bGVzCisgICAgICAgICAgICAgICAgaW50byBhIGxvY2FsIHB5dGhvbiAzIGNhY2hlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JEhPTUU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIGNhY2hlcyBpcyBhY3R1YWxseSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiRIT01FLy5sb2NhbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRvIHNlZSB3aGF0IHBhY2thZ2VzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW50byB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiRIT01FPC9maWxlbmFtZT4gZGlyZWN0b3J5LCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBwaXAzIGxpc3QgaW5zdGFsbGVkIC0tbG9jYWwKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcmVtb3ZlIHNvbWV0aGluZywgdGhlIGZvbGxvd2luZyB3b3JrczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcGlwMyB1bmluc3RhbGwgUGFja2FnZU5hbWVUb1VuaW5zdGFsbAogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sCmluZGV4IDdhODkxMmEuLjM4NmM1MWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwKQEAgLTQ2LDYgKzQ2LDExIEBACiAgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNjwvZGF0ZT4KICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE2PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgPC9yZXZoaXN0b3J5PgogCiAgICAgPGNvcHlyaWdodD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZAppbmRleCA1YTNiZGY5Li5iNmQyNjVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9tZWdhLW1hbnVhbC5zZWQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvbWVnYS1tYW51YWwuc2VkCkBAIC0yLDMyICsyLDMyIEBACiAjIFRoaXMgc3R5bGUgaXMgZm9yIG1hbnVhbCBmb2xkZXJzIGxpa2UgInlvY3RvLXByb2plY3QtcXMiIGFuZCAicG9reS1yZWYtbWFudWFsIi4KICMgVGhpcyBpcyB0aGUgb2xkIHdheSB0aGF0IGRpZCBpdC4gIENhbid0IGRvIHRoYXQgbm93IHRoYXQgd2UgaGF2ZSAiYml0YmFrZS11c2VyLW1hbnVhbCIgc3RyaW5ncwogIyBpbiB0aGUgbWVnYS1tYW51YWwuCi0jIHMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4xXC9bYS16XSotW2Etel0qLVthLXpdKlwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL3Bva3ktcmVmLW1hbnVhbFwvcG9reS1yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKKyMgcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjJcL1thLXpdKi1bYS16XSotW2Etel0qXC9bYS16XSotW2Etel0qLVthLXpdKi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwveW9jdG8tcHJvamVjdC1xc1wveW9jdG8tcHJvamVjdC1xcy5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwvcG9reS1yZWYtbWFudWFsXC9wb2t5LXJlZi1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwogCiAjIFByb2Nlc3NlcyBhbGwgb3RoZXIgbWFudWFscyAoPHdvcmQ+LTx3b3JkPiBzdHlsZSkgZXhjZXB0IGZvciB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbCBiZWNhdXNlCiAjIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWVnYS1tYW51YWwuCiAjIFRoaXMgc3R5bGUgaXMgZm9yIG1hbnVhbCBmb2xkZXJzIHRoYXQgdXNlIHR3byB3b3JkLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgbm93IChlLmcuICJyZWYtbWFudWFsIikuCiAjIFRoaXMgd2FzIHRoZSBvbmUtbGluZXIgdGhhdCB3b3JrZWQgYmVmb3JlIHdlIGludHJvZHVjZWQgdGhlIEJpdEJha2UgVXNlciBNYW51YWwsIHdoaWNoIGlzCiAjIG5vdCBpbiB0aGUgbWVnYS1tYW51YWwuCi0jIHMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4xXC9bYS16XSotW2Etel0qXC9bYS16XSotW2Etel0qLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKKyMgcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjJcL1thLXpdKi1bYS16XSpcL1thLXpdKi1bYS16XSouaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwogCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwvc2RrLW1hbnVhbFwvc2RrLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwvYnNwLWd1aWRlXC9ic3AtZ3VpZGUuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL2Rldi1tYW51YWxcL2Rldi1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL2tlcm5lbC1kZXZcL2tlcm5lbC1kZXYuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL3Byb2ZpbGUtbWFudWFsXC9wcm9maWxlLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwvcmVmLW1hbnVhbFwvcmVmLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwvdG9hc3Rlci1tYW51YWxcL3RvYXN0ZXItbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKLXMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4xXC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4yXC9zZGstbWFudWFsXC9zZGstbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4yXC9ic3AtZ3VpZGVcL2JzcC1ndWlkZS5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwva2VybmVsLWRldlwva2VybmVsLWRldi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwvcHJvZmlsZS1tYW51YWxcL3Byb2ZpbGUtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4yXC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4yXC90b2FzdGVyLW1hbnVhbFwvdG9hc3Rlci1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjJcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwogCiAjIFByb2Nlc3MgY2FzZXMgd2hlcmUganVzdCBhbiBleHRlcm5hbCBtYW51YWwgaXMgcmVmZXJlbmNlZCB3aXRob3V0IGFuIGlkIGFuY2hvcgotcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PFwvYT4vWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwvZwotcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL3Nkay1tYW51YWxcL3Nkay1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTxcL2E+L1lvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlL2cKLXMvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4xXC9ic3AtZ3VpZGVcL2JzcC1ndWlkZS5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPFwvYT4vWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUvZwotcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjFcL3Byb2ZpbGUtbWFudWFsXC9wcm9maWxlLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbC9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwva2VybmVsLWRldlwva2VybmVsLWRldi5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwvcmVmLW1hbnVhbFwvcmVmLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMVwvdG9hc3Rlci1tYW51YWxcL3RvYXN0ZXItbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+VG9hc3RlciBVc2VyIE1hbnVhbDxcL2E+L1RvYXN0ZXIgVXNlciBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjJcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PFwvYT4vWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjJcL3Nkay1tYW51YWxcL3Nkay1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTxcL2E+L1lvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4yXC9ic3AtZ3VpZGVcL2JzcC1ndWlkZS5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPFwvYT4vWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjJcL3Byb2ZpbGUtbWFudWFsXC9wcm9maWxlLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwva2VybmVsLWRldlwva2VybmVsLWRldi5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwvcmVmLW1hbnVhbFwvcmVmLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMlwvdG9hc3Rlci1tYW51YWxcL3RvYXN0ZXItbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+VG9hc3RlciBVc2VyIE1hbnVhbDxcL2E+L1RvYXN0ZXIgVXNlciBNYW51YWwvZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy54bWwKaW5kZXggYzA5ZTk3MS4uZDE4ZjBhZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sCkBAIC0yNTUsOCArMjU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRhciAxLjI0IG9yIGdyZWF0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gMi43LjMgb3IgZ3JlYXRlciBleGNsdWRpbmcgUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAzLngsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gMy40LjAgb3IgZ3JlYXRlci4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgIElmIHlvdXIgYnVpbGQgaG9zdCBkb2VzIG5vdCBtZWV0IGFueSBvZiB0aGVzZSB0aHJlZSBsaXN0ZWQKQEAgLTM5MSw4ICszOTAsOCBAQAogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgY2FuIHRyeSBvdXQgdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgdGhlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UKLSAgICAgICAgICAgIGJ5IGZpbmlzaGluZyB0aGlzIHF1aWNrIHN0YXJ0LCB3aGljaCBwcmVzZW50cyBzdGVwcyB0aGF0IGxldCB5b3UKKyAgICAgICAgICAgIFRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0aHJvdWdoIHRoZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlLAorICAgICAgICAgICAgZmluaXNoIHRoaXMgcXVpY2sgc3RhcnQsIHdoaWNoIHByZXNlbnRzIHN0ZXBzIHRoYXQgbGV0IHlvdQogICAgICAgICAgICAgZG8gdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgpAQCAtNDAxLDIzMCArNDAwLDIzOSBAQAogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEVhc2lseSBjaGFuZ2UgY29uZmlndXJhdGlvbnMgc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc2Vjb25kIGltYWdlLCB3aGljaCB3b3VsZCBiZSBmb3IgTWlubm93Qm9hcmQKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc2Vjb25kIGltYWdlIHRoYXQgeW91IGNhbiBsb2FkIG9udG8gYm9vdGFibGUKKyAgICAgICAgICAgICAgICAgICAgbWVkaWEgYW5kIGFjdHVhbGx5IGJvb3QgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgdXNlcyB0aGUgTWlubm93Qm9hcmQKICAgICAgICAgICAgICAgICAgICAgTUFYLWNvbXBhdGlibGUgYm9hcmRzLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgVGhlIHN0ZXBzIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgcHJvdmlkZSBkZXRhaWwsIGJ1dCByYXRoZXIKLSAgICAgICAgICAgICAgICBwcm92aWRlIG1pbmltYWwsIHdvcmtpbmcgY29tbWFuZHMgYW5kIGV4YW1wbGVzIGRlc2lnbmVkIHRvCi0gICAgICAgICAgICAgICAganVzdCBnZXQgeW91IHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgVGhlIHN0ZXBzIGluIHRoZSBmb2xsb3dpbmcgdHdvIHNlY3Rpb25zIGRvIG5vdCBwcm92aWRlIGRldGFpbCwKKyAgICAgICAgICAgICAgICBidXQgcmF0aGVyIHByb3ZpZGUgbWluaW1hbCwgd29ya2luZyBjb21tYW5kcyBhbmQgZXhhbXBsZXMKKyAgICAgICAgICAgICAgICBkZXNpZ25lZCB0byBqdXN0IGdldCB5b3Ugc3RhcnRlZC4KICAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIGFwcHJvcHJpYXRlIG1hbnVhbHMgaW4gdGhlCiAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IG1hbnVhbCBzZXQ8L3VsaW5rPi4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gYnVpbGQgeW91ciBpbWFnZS4KLSAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW4gZW50aXJlIExpbnV4Ci0gICAgICAgICAgICBkaXN0cmlidXRpb24sIGluY2x1ZGluZyB0aGUgdG9vbGNoYWluLCBmcm9tIHNvdXJjZS4KLSAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlIGFib3V0IE5ldHdvcmsgUHJveGllczwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBwcm9jZXNzIHNlYXJjaGVzIGZvciBzb3VyY2UgY29kZQotICAgICAgICAgICAgICAgICAgICB1c2luZyBhIHByZS1kZXRlcm1pbmVkIG9yZGVyIHRocm91Z2ggYSBzZXQgb2YKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgYmVoaW5kIGEgZmlyZXdhbGwgYW5kIHlvdXIgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgaG9zdCBpcyBub3Qgc2V0IHVwIGZvciBwcm94aWVzLCB5b3UgY291bGQgZW5jb3VudGVyCi0gICAgICAgICAgICAgICAgICAgIHByb2JsZW1zIHdpdGggdGhlIGJ1aWxkIHByb2Nlc3Mgd2hlbiBmZXRjaGluZyBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgY29kZSAoZS5nLiBmZXRjaGVyIGZhaWx1cmVzIG9yIEdpdCBmYWlsdXJlcykuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctYW4taW1hZ2UtZm9yLWVtdWxhdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGRpbmcgYW4gSW1hZ2UgZm9yIEVtdWxhdGlvbjwvdGl0bGU+CiAKLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBrbm93IHlvdXIgcHJveHkgc2V0dGluZ3MsIGNvbnN1bHQgeW91cgotICAgICAgICAgICAgICAgICAgICBsb2NhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIHJlc291cmNlcyBhbmQgZ2V0IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIEEgZ29vZCBzdGFydGluZyBwb2ludCBjb3VsZCBhbHNvIGJlIHRvIGNoZWNrIHlvdXIgd2ViCi0gICAgICAgICAgICAgICAgICAgIGJyb3dzZXIgc2V0dGluZ3MuCi0gICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIHlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGJlaGluZCBhIGZpcmV3YWxsIGluIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBNYW51YWwKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjaG93LWRvZXMtdGhlLXlvY3RvLXByb2plY3Qtb2J0YWluLXNvdXJjZS1jb2RlLWFuZC13aWxsLWl0LXdvcmstYmVoaW5kLW15LWZpcmV3YWxsLW9yLXByb3h5LXNlcnZlcic+RkFRPC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgYW5kIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Xb3JraW5nX0JlaGluZF9hX05ldHdvcmtfUHJveHknPldvcmtpbmcgQmVoaW5kIGEgTmV0d29yayBQcm94eTwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBidWlsZCB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW4gZW50aXJlIExpbnV4CisgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uLCBpbmNsdWRpbmcgdGhlIHRvb2xjaGFpbiwgZnJvbSBzb3VyY2UuCisgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGUgYWJvdXQgTmV0d29yayBQcm94aWVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgcHJvY2VzcyBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGEgcHJlLWRldGVybWluZWQgb3JkZXIgdGhyb3VnaCBhIHNldCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB3b3JraW5nIGJlaGluZCBhIGZpcmV3YWxsIGFuZCB5b3VyIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0IGlzIG5vdCBzZXQgdXAgZm9yIHByb3hpZXMsIHlvdSBjb3VsZCBlbmNvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2JsZW1zIHdpdGggdGhlIGJ1aWxkIHByb2Nlc3Mgd2hlbiBmZXRjaGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgKGUuZy4gZmV0Y2hlciBmYWlsdXJlcyBvciBHaXQgZmFpbHVyZXMpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CZSBTdXJlIFlvdXIgQnVpbGQgSG9zdCBpcyBTZXQgVXA6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHN0ZXBzIHRvIGJ1aWxkIGFuIGltYWdlIGluIHRoaXMgc2VjdGlvbiBkZXBlbmQgb24KLSAgICAgICAgICAgICAgICAgICAgeW91ciBidWlsZCBob3N0IGJlaW5nIHByb3Blcmx5IHNldCB1cC4KLSAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgaGF2ZSB3b3JrZWQgdGhyb3VnaCB0aGUgcmVxdWlyZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoZWNrIE91dCBZb3VyIEJyYW5jaDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBhcmUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSBhbmQgdGhlbiBjaGVjayBvdXQKLSAgICAgICAgICAgICAgICAgICAgdGhlIGJyYW5jaCBhc3NvY2lhdGVkIHdpdGggdGhlIGxhdGVzdCBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgIFJlbGVhc2U6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGtub3cgeW91ciBwcm94eSBzZXR0aW5ncywgY29uc3VsdCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIHJlc291cmNlcyBhbmQgZ2V0IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgQSBnb29kIHN0YXJ0aW5nIHBvaW50IGNvdWxkIGFsc28gYmUgdG8gY2hlY2sgeW91ciB3ZWIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCB5b3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgYmVoaW5kIGEgZmlyZXdhbGwgaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2hvdy1kb2VzLXRoZS15b2N0by1wcm9qZWN0LW9idGFpbi1zb3VyY2UtY29kZS1hbmQtd2lsbC1pdC13b3JrLWJlaGluZC1teS1maXJld2FsbC1vci1wcm94eS1zZXJ2ZXInPkZBUTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Xb3JraW5nX0JlaGluZF9hX05ldHdvcmtfUHJveHknPldvcmtpbmcgQmVoaW5kIGEgTmV0d29yayBQcm94eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgU3VyZSBZb3VyIEJ1aWxkIEhvc3QgaXMgU2V0IFVwOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RlcHMgdG8gYnVpbGQgYW4gaW1hZ2UgaW4gdGhpcyBzZWN0aW9uIGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBidWlsZCBob3N0IGJlaW5nIHByb3Blcmx5IHNldCB1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd29ya2VkIHRocm91Z2ggdGhlIHJlcXVpcmVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoZWNrIE91dCBZb3VyIEJyYW5jaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSBhbmQgdGhlbiBjaGVjayBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXRlc3QgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBjZCB+L3Bva3kKICAgICAgJCBnaXQgY2hlY2tvdXQgLWIgJkRJU1RST19OQU1FX05PX0NBUDsgb3JpZ2luLyZESVNUUk9fTkFNRV9OT19DQVA7Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgR2l0J3MgPGZpbGVuYW1lPmNoZWNrb3V0PC9maWxlbmFtZT4gY29tbWFuZCBjaGVja3Mgb3V0Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IFlvY3RvIFByb2plY3QgcmVsZWFzZSBpbnRvIGEgbG9jYWwgYnJhbmNoCi0gICAgICAgICAgICAgICAgICAgIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUgcmVsZWFzZSAoaS5lLgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkRJU1RST19OQU1FX05PX0NBUDs8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhbCBicmFuY2ggdHJhY2tzIHRoZSB1cHN0cmVhbSBicmFuY2ggb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIHNhbWUgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRpbmcgeW91ciBvd24gYnJhbmNoIGJhc2VkIG9uIHRoZSByZWxlYXNlZAotICAgICAgICAgICAgICAgICAgICBicmFuY2ggZW5zdXJlcyB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgZmlsZXMgZm9yCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgcmVsZWFzZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Jbml0aWFsaXplIHRoZSBCdWlsZCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBSdW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgdG8gZGVmaW5lIHRoZSBPcGVuRW1iZWRkZWQKLSAgICAgICAgICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQgb24geW91ciBidWlsZCBob3N0LgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBHaXQncyA8ZmlsZW5hbWU+Y2hlY2tvdXQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNoZWNrcyBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IFlvY3RvIFByb2plY3QgcmVsZWFzZSBpbnRvIGEgbG9jYWwgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAgICB3aG9zZSBuYW1lIG1hdGNoZXMgdGhlIHJlbGVhc2UgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUVfTk9fQ0FQOzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhbCBicmFuY2ggdHJhY2tzIHRoZSB1cHN0cmVhbSBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyB5b3VyIG93biBicmFuY2ggYmFzZWQgb24gdGhlIHJlbGVhc2VkCisgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2ggZW5zdXJlcyB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgZmlsZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Jbml0aWFsaXplIHRoZSBCdWlsZCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgdG8gZGVmaW5lIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IG9uIHlvdXIgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKLSAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4gdGhpcyBjYXNlCi0gICAgICAgICAgICAgICAgICAgIGFuZCBpcyBsb2NhdGVkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBzY3JpcHQgcnVucywgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICBMYXRlciwgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCB0aGUgQnVpbGQgRGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIGEgbWVtb3J5LXJlc2lkZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz5CaXRCYWtlPC91bGluaz4sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0LgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhhbWluZSBZb3VyIExvY2FsIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50LCBhIGxvY2FsCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGJlY29tZXMgYXZhaWxhYmxlIGluCi0gICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHVzaW5nIEJpdEJha2UgdG8gc3RhcnQgdGhlIGJ1aWxkLCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhpcyBmaWxlIGFuZCBiZSBzdXJlIHlvdXIgZ2VuZXJhbAotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBhcmUgaG93IHlvdSB3YW50IHRoZW06Ci0gICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gaGVscCBjb25zZXJ2ZSBkaXNrIHNwYWNlIGR1cmluZyBidWlsZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgdG8geW91cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QncyBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGZvciB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL2NvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGlzIHN0YXRlbWVudCBkZWxldGVzIHRoZSB3b3JrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHVzZWQgZm9yIGJ1aWxkaW5nIGEgcmVjaXBlIG9uY2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGlzIGJ1aWx0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFtb25nIG90aGVyIHRoaW5ncywgdGhlIHNjcmlwdCBjcmVhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGUgc2NyaXB0IHJ1bnMsIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBMYXRlciwgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCB0aGUgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhbGwgdGhlIGZpbGVzIGNyZWF0ZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIGEgbWVtb3J5LXJlc2lkZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNpbmdwb2t5LWNvbXBvbmVudHMtYml0YmFrZSc+Qml0QmFrZTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4YW1pbmUgWW91ciBMb2NhbCBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNldCB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBiZWNvbWVzIGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB1c2luZyBCaXRCYWtlIHRvIHN0YXJ0IHRoZSBidWlsZCwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgbG9vayBhdCB0aGlzIGZpbGUgYW5kIGJlIHN1cmUgeW91ciBnZW5lcmFsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBhcmUgaG93IHlvdSB3YW50IHRoZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gaGVscCBjb25zZXJ2ZSBkaXNrIHNwYWNlIGR1cmluZyBidWlsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IHRvIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCdzIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC9jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoaXMgc3RhdGVtZW50IGRlbGV0ZXMgdGhlIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHVzZWQgZm9yIGJ1aWxkaW5nIGEgcmVjaXBlIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpcyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBJTkhFUklUICs9ICJybV93b3JrIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdGFyZ2V0IG1hY2hpbmUgZm9yIHRoZSBidWlsZCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcHJvZHVjZXMgYW4gaW1hZ2UgdGhhdCBjYW4gYmUgdXNlZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yIGFuZCBpcyB0YXJnZXRlZCBhdCBhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0IGJhc2VkIGFyY2hpdGVjdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVyIG9uIGluIHRoaXMgZXhhbXBsZSwgdGhpcyBkZWZhdWx0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzaWx5IGNoYW5nZWQgdGhyb3VnaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhbiBpbWFnZSBmb3IgYSBkaWZmZXJlbnQgbWFjaGluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm90aGVyIGNvbnNpZGVyYXRpb24gYmVmb3JlIHlvdSBidWlsZCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBzZWxlY3RzIHRoZSBSUE0gcGFja2FnZSBtYW5hZ2VyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY29udHJvbCB0aGlzIGNvbmZpZ3VyYXRpb24gYnkgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+U2VsZWN0aW9uIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIgaXMgc2VwYXJhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHdoZXRoZXIgcGFja2FnZSBtYW5hZ2VtZW50IGlzIHVzZWQgYXQgcnVudGltZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSB0YXJnZXQgaW1hZ2UuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBhZGRpdGlvbmFsIHBhY2thZ2UgbWFuYWdlciBzZWxlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IHRoZSBCdWlsZDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBDb250aW51ZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBidWlsZCBhbiBPUyBpbWFnZQotICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldCwgd2hpY2ggaXMKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGluIHRoaXMgZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIGFuZCBjb3JlcywgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQgb2YgUkFNLCB0aGUgc3BlZWQgb2YgeW91ciBJbnRlcm5ldCBjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXIgZmFjdG9ycywgdGhlIGJ1aWxkIHByb2Nlc3MgY291bGQgdGFrZSBzZXZlcmFsCi0gICAgICAgICAgICAgICAgICAgICAgICBob3VycyB0aGUgZmlyc3QgdGltZSB5b3UgcnVuIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCBidWlsZHMgcnVuIG11Y2ggZmFzdGVyIHNpbmNlIHBhcnRzIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYXJlIGNhY2hlZC4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdGFyZ2V0IG1hY2hpbmUgZm9yIHRoZSBidWlsZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBwcm9kdWNlcyBhbiBpbWFnZSB0aGF0IGNhbiBiZSB1c2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yIGFuZCBpcyB0YXJnZXRlZCBhdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi1iaXQgYmFzZWQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVyIG9uIGluIHRoaXMgZXhhbXBsZSwgdGhpcyBkZWZhdWx0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc2lseSBjaGFuZ2VkIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYW4gaW1hZ2UgZm9yIGEgZGlmZmVyZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBjb25zaWRlcmF0aW9uIGJlZm9yZSB5b3UgYnVpbGQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2VsZWN0cyB0aGUgUlBNIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjb250cm9sIHRoaXMgY29uZmlndXJhdGlvbiBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZWxlY3Rpb24gb2YgdGhlIHBhY2thZ2UgbWFuYWdlciBpcyBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHdoZXRoZXIgcGFja2FnZSBtYW5hZ2VtZW50IGlzIHVzZWQgYXQgcnVudGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgdGFyZ2V0IGltYWdlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGFkZGl0aW9uYWwgcGFja2FnZSBtYW5hZ2VyIHNlbGVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IHRoZSBCdWlsZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGludWUgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYnVpbGQgYW4gT1MgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGluIHRoaXMgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgYW5kIGNvcmVzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQgb2YgUkFNLCB0aGUgc3BlZWQgb2YgeW91ciBJbnRlcm5ldCBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIGZhY3RvcnMsIHRoZSBidWlsZCBwcm9jZXNzIGNvdWxkIHRha2Ugc2V2ZXJhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzIHRoZSBmaXJzdCB0aW1lIHlvdSBydW4gaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCBidWlsZHMgcnVuIG11Y2ggZmFzdGVyIHNpbmNlIHBhcnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFyZSBjYWNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNpbmdwb2t5LWNvbXBvbmVudHMtYml0YmFrZSc+Qml0QmFrZTwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwsIG9yIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbC1jb21tYW5kJz5CaXRCYWtlIENvbW1hbmQ8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIG90aGVyIHRhcmdldHMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2ltdWxhdGUgWW91ciBJbWFnZSBVc2luZyBRRU1VOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgdGhpcyBwYXJ0aWN1bGFyIGltYWdlIGlzIGJ1aWx0LCB5b3UgY2FuIHN0YXJ0IFFFTVUKLSAgICAgICAgICAgICAgICAgICAgYW5kIHJ1biB0aGUgaW1hZ2U6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzaW5ncG9reS1jb21wb25lbnRzLWJpdGJha2UnPkJpdEJha2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCwgb3Igc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbC1jb21tYW5kJz5CaXRCYWtlIENvbW1hbmQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gb3RoZXIgdGFyZ2V0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2ltdWxhdGUgWW91ciBJbWFnZSBVc2luZyBRRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoaXMgcGFydGljdWxhciBpbWFnZSBpcyBidWlsdCwgeW91IGNhbiBzdGFydCBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBydW5xZW11IHFlbXV4ODYKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBsZWFybiBtb3JlIGFib3V0IHJ1bm5pbmcgUUVNVSwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1xZW11Ij5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4aXQgUUVNVTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBFeGl0IFFFTVUgYnkgZWl0aGVyIGNsaWNraW5nIG9uIHRoZSBzaHV0ZG93biBpY29uIG9yIGJ5Ci0gICAgICAgICAgICAgICAgICAgIG9wZW5pbmcgYSB0ZXJtaW5hbCwgdHlwaW5nCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb3dlcm9mZjwvZmlsZW5hbWU+LCBhbmQgdGhlbiBwcmVzc2luZyAiRW50ZXIiLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGxlYXJuIG1vcmUgYWJvdXQgcnVubmluZyBRRU1VLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1xZW11Ij5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4aXQgUUVNVTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRXhpdCBRRU1VIGJ5IGVpdGhlciBjbGlja2luZyBvbiB0aGUgc2h1dGRvd24gaWNvbiBvciBieQorICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmluZyBhIHRlcm1pbmFsLCB0eXBpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb3dlcm9mZjwvZmlsZW5hbWU+LCBhbmQgdGhlbiBwcmVzc2luZyAiRW50ZXIiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgogCi0gICAgICAgIDxwYXJhIGlkPSdxcy1taW5ub3dib2FyZC1leGFtcGxlJz4KLSAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RlcHMgc2hvdyBob3cgZWFzeSBpdCBpcyB0byBzZXQgdXAgdG8gYnVpbGQgYW4KLSAgICAgICAgICAgIGltYWdlIGZvciBhIG5ldyBtYWNoaW5lLgotICAgICAgICAgICAgVGhlc2Ugc3RlcHMgYnVpbGQgYW4gaW1hZ2UgZm9yIHRoZSBNaW5ub3dCb2FyZCBNQVgsIHdoaWNoIGlzCi0gICAgICAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgYW5kIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiA8ZmlsZW5hbWU+aW50ZWwtY29yZWk3LTY0PC9maWxlbmFtZT4KLSAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+aW50ZWwtY29yZTItMzI8L2ZpbGVuYW1lPiBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzCi0gICAgICAgICAgICAoQlNQcykuCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgTWlubm93Qm9hcmQgTUFYIHNoaXBzIHdpdGggNjQtYml0IGZpcm13YXJlLgotICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgYm9hcmQgaW4gMzItYml0IG1vZGUsIHlvdSBtdXN0Ci0gICAgICAgICAgICAgICAgZG93bmxvYWQgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2Zpcm13YXJlLmludGVsLmNvbS9wcm9qZWN0cy9taW5ub3dib2FyZC1tYXgnPjMyLWJpdCBmaXJtd2FyZTwvdWxpbms+LgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZGluZy1hbi1pbWFnZS1mb3ItaGFyZHdhcmUnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIGFuIEltYWdlIGZvciBIYXJkd2FyZTwvdGl0bGU+CiAKLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBMb2NhbCBDb3B5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IFJlcG9zaXRvcnk6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQnVpbGRpbmcgYW4gaW1hZ2UgZm9yIHRoZSBNaW5ub3dCb2FyZCBNQVggcmVxdWlyZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmdpdCBjbG9uZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgIGEgbG9jYWwgY29weSBvZiB0aGUgcmVwb3NpdG9yeSBpbnNpZGUgeW91cgotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCi0gICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gaW4gdGhpcyBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICA8cGFyYSBpZD0ncXMtbWlubm93Ym9hcmQtZXhhbXBsZSc+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBzaG93IGhvdyBlYXN5IGl0IGlzIHRvIHNldCB1cCB0byBidWlsZCBhbgorICAgICAgICAgICAgICAgIGltYWdlIGZvciBhIG5ldyBtYWNoaW5lLgorICAgICAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGJ1aWxkIGFuIGltYWdlIGZvciB0aGUgTWlubm93Qm9hcmQgTUFYLCB3aGljaCBpcworICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiA8ZmlsZW5hbWU+aW50ZWwtY29yZWk3LTY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmludGVsLWNvcmUyLTMyPC9maWxlbmFtZT4gQm9hcmQgU3VwcG9ydCBQYWNrYWdlcworICAgICAgICAgICAgICAgIChCU1BzKS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE1pbm5vd0JvYXJkIE1BWCBzaGlwcyB3aXRoIDY0LWJpdCBmaXJtd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBib2FyZCBpbiAzMi1iaXQgbW9kZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9maXJtd2FyZS5pbnRlbC5jb20vcHJvamVjdHMvbWlubm93Ym9hcmQtbWF4Jz4zMi1iaXQgZmlybXdhcmU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBMb2NhbCBDb3B5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSBmb3IgdGhlIE1pbm5vd0JvYXJkIE1BWCByZXF1aXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBsb2NhbCBjb3B5IG9mIHRoZSByZXBvc2l0b3J5IGluc2lkZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGluIHRoaXMgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBjZCAkSE9NRS9wb2t5CiAgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtaW50ZWwKICAgICAgQ2xvbmluZyBpbnRvICdtZXRhLWludGVsJy4uLgpAQCAtNjM0LDEyMSArNjQyLDEzMyBAQAogICAgICByZW1vdGU6IFRvdGFsIDExOTg4IChkZWx0YSA2ODgxKSwgcmV1c2VkIDExNzUyIChkZWx0YSA2NjQ1KQogICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICg2ODgxLzY4ODEpLCBkb25lLgogICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0IHdoZW4geW91IGNsb25lIGEgR2l0IHJlcG9zaXRvcnksIHRoZQotICAgICAgICAgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggaXMgY2hlY2tlZCBvdXQuCi0gICAgICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgYnVpbGQgeW91ciBpbWFnZSB0aGF0IHVzZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIsIHlvdSBtdXN0IGJlCi0gICAgICAgICAgICAgICAgICAgIHN1cmUgdGhhdCBib3RoIHJlcG9zaXRvcmllcwotICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgYXJlIHVzaW5nIHRoZSBzYW1lIHJlbGVhc2VzLgotICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBuZWVkIHRvIGNoZWNrb3V0IG91dCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT4mRElTVFJPX05BTUVfTk9fQ0FQOzwvZmlsZW5hbWU+IiByZWxlYXNlIGFmdGVyCi0gICAgICAgICAgICAgICAgICAgIGNsb25pbmcgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCB3aGVuIHlvdSBjbG9uZSBhIEdpdCByZXBvc2l0b3J5LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGJyYW5jaCBpcyBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgYnVpbGQgeW91ciBpbWFnZSB0aGF0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyLCB5b3UgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0aGF0IGJvdGggcmVwb3NpdG9yaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGFyZSB1c2luZyB0aGUgc2FtZSByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG5lZWQgdG8gY2hlY2tvdXQgb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT4mRElTVFJPX05BTUVfTk9fQ0FQOzwvZmlsZW5hbWU+IiByZWxlYXNlIGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uaW5nIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgY2QgJEhPTUUvcG9reS9tZXRhLWludGVsCiAgICAgICQgZ2l0IGNoZWNrb3V0ICZESVNUUk9fTkFNRV9OT19DQVA7CiAgICAgIEJyYW5jaCAmRElTVFJPX05BTUVfTk9fQ0FQOyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAmRElTVFJPX05BTUVfTk9fQ0FQOyBmcm9tIG9yaWdpbi4KICAgICAgU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICcmRElTVFJPX05BTUVfTk9fQ0FQOycKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmZpZ3VyZSB0aGUgQnVpbGQ6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZSBidWlsZCwgeW91IGVkaXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZXMsIGJvdGggb2Ygd2hpY2ggYXJlCi0gICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIDxmaWxlbmFtZT5idWlsZC9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmUgdGhlIEJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBjb25maWd1cmUgdGhlIGJ1aWxkLCB5b3UgZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGVzLCBib3RoIG9mIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPmJ1aWxkL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhIHF1aWNrIHdheSB0byBtYWtlIHRoZSBlZGl0cy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGNvbW1hbmQgdXNlcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzIGFkZC1sYXllcjwvZmlsZW5hbWU+IGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgICAgdG8gYWRkIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyLCB3aGljaCBjb250YWlucyB0aGUgPGZpbGVuYW1lPmludGVsLWNvcmUqPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgQlNQcyB0byB0aGUgYnVpbGQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgY29tbWFuZCBzZWxlY3RzIHRoZSBCU1AgYnkgc2V0dGluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhIHF1aWNrIHdheSB0byBtYWtlIHRoZSBlZGl0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBjb21tYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgYWRkLWxheWVyPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWRkIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciwgd2hpY2ggY29udGFpbnMgdGhlIDxmaWxlbmFtZT5pbnRlbC1jb3JlKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBCU1BzIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgY29tbWFuZCBzZWxlY3RzIHRoZSBCU1AgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGNkICRIT01FL3Bva3kvYnVpbGQKICAgICAgJCBiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgIiRIT01FL3Bva3kvbWV0YS1pbnRlbCIKICAgICAgJCBlY2hvICdNQUNISU5FID0gImludGVsLWNvcmVpNy02NCInID4+IGNvbmYvbG9jYWwuY29uZgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgYSA2NC1iaXQgYnVpbGQsIHVzZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IGEgNjQtYml0IGJ1aWxkLCB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgZWNobyAnTUFDSElORSA9ICJpbnRlbC1jb3JlaTctNjQiJyA+PiBjb25mL2xvY2FsLmNvbmYKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IDMyLWJpdCBpbWFnZXMsIHVzZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgMzItYml0IGltYWdlcywgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGVjaG8gJ01BQ0hJTkUgPSAiaW50ZWwtY29yZTItMzIiJyA+PiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBhbiBJbWFnZSBmb3IgTWlubm93Qm9hcmQgTUFYOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiBpbWFnZSB5b3UgYnVpbGQgZGVwZW5kcyBvbiB5b3VyIGdvYWxzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBwcmV2aW91cyBidWlsZCBjcmVhdGVkIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSwgd2hpY2ggaXMgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHdpdGggU2F0byBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gYnVpbGQgbWFueSBpbWFnZSB0eXBlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBNaW5ub3dCb2FyZCBNQVguCisgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHBvc3NpYmlsaXRpZXMgYXJlIDxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2U8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGEgY29uc29sZS1vbmx5IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBjaG9pY2UgY291bGQgYmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4sIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGNvbnNvbGUtb25seSBpbWFnZSBidXQgaGFzIG1vcmUgZnVsbC1mZWF0dXJlcworICAgICAgICAgICAgICAgICAgICAgICAgTGludXggc3lzdGVtIGZ1bmN0aW9uYWxpdHkgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHR5cGVzIG9mIGltYWdlcyB5b3UgY2FuIGJ1aWxkIHVzaW5nIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkJlY2F1c2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtaW5pbWFsIHRvIHNldCB1cAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgc2Vjb25kIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlLXVzZSBmaWxlcyBmcm9tIHByZXZpb3VzIGJ1aWxkcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgUmUtdXNpbmcgZmlsZXMgbWVhbnMgdGhpcyBzZWNvbmQgYnVpbGQgd2lsbCBiZSBtdWNoIGZhc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBhbiBpbml0aWFsIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaXMgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLWJhc2UKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgYSBNaW5pbWFsIEltYWdlIGZvciBNaW5ub3dCb2FyZCBNQVg6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBidWlsZCB0aGUgbWluaW1hbCBpbWFnZSBmb3IKLSAgICAgICAgICAgICAgICAgICAgTWlubm93Qm9hcmQgTUFYLgotICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhcmUgbWluaW1hbCB0byBzZXQgdXAgZm9yCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgc2Vjb25kIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4KLSAgICAgICAgICAgICAgICAgICAgcmUtdXNlIGZpbGVzIGZyb20gcHJldmlvdXMgYnVpbGRzIGFzIG11Y2ggYXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgIFJlLXVzaW5nIGZpbGVzIG1lYW5zIHRoaXMgc2Vjb25kIGJ1aWxkIHdpbGwgYmUgbXVjaCBmYXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgdGhhbiBhbiBpbml0aWFsIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSByZXN1bHRpbmcgYmFzaWMgY29uc29sZSBpbWFnZQotICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgaGVyZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICB0bXAvZGVwbG95L2ltYWdlcy9pbnRlbC1jb3JlaTctNjQvY29yZS1pbWFnZS1taW5pbWFsLWludGVsLWNvcmVpNy02NC5oZGRpbWcKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPldyaXRlIHRoZSBJbWFnZTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHdyaXRlIHRoZSBpbWFnZSB0byBhIFVTQiBrZXksIFNBVEEgZHJpdmUsIG9yIFNECi0gICAgICAgICAgICAgICAgICAgIGNhcmQgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPiBzY3JpcHQsCi0gICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGluY2x1ZGVkIGluIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYXQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHN1ZG8gJEhPTUUvc291cmNlL3Bva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaCA8cmVwbGFjZWFibGU+SE9TVF9ERVZJQ0U8L3JlcGxhY2VhYmxlPiBcCi0gICAgICAgIHRtcC9kZXBsb3kvaW1hZ2VzL2ludGVsLWNvcmVpNy02NC9jb3JlLWltYWdlLW1pbmltYWwtaW50ZWwtY29yZWk3LTY0LmhkZGltZyA8cmVwbGFjZWFibGU+VEFSR0VUX0RFVklDRTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5IT1NUX0RFVklDRTwvcmVwbGFjZWFibGU+IGlzIHRoZSBkZXZpY2Ugbm9kZQotICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYnVpbGQgaG9zdCAoZS5nLiA8ZmlsZW5hbWU+L2Rldi9zZGM8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9tbWNibGswPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+VEFSR0VUX0RFVklDRTwvcmVwbGFjZWFibGU+IGlzIHRoZSBuYW1lIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICBkZXZpY2UgYXMgdGhlIE1pbm5vd0JvYXJkIE1BWCBzZWVzIGl0IChlLmcuCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L3NkYTwvZmlsZW5hbWU+IG9yCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L21tY2JsazA8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qm9vdCB0aGUgSGFyZHdhcmU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGUgYm9vdCBkZXZpY2UgcHJvdmlzaW9uZWQsIHlvdSBjYW4gaW5zZXJ0IHRoZQotICAgICAgICAgICAgICAgICAgICBtZWRpYSBpbnRvIHRoZSBNaW5ub3dCb2FyZCBNQVggYW5kIGJvb3QgdGhlIGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICBUaGUgYm9hcmQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBtZWRpYSBhbmQgYm9vdCB0bwotICAgICAgICAgICAgICAgICAgICB0aGUgYm9vdGxvYWRlciBhbmQgc3Vic2VxdWVudGx5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSByZXN1bHRpbmcgY29uc29sZS1vbmx5IGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG1wL2RlcGxveS9pbWFnZXMvaW50ZWwtY29yZWk3LTY0L2NvcmUtaW1hZ2UtYmFzZS1pbnRlbC1jb3JlaTctNjQuaGRkaW1nCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Xcml0ZSB0aGUgSW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gd3JpdGUgdGhlIGltYWdlIGp1c3QgYnVpbHQgdG8gYSBib290YWJsZSBtZWRpYQorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gYSBVU0Iga2V5LCBTQVRBIGRyaXZlLCBTRCBjYXJkLCBldGMuKSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZDwvZmlsZW5hbWU+IHV0aWxpdHk6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBkZCBpZj10bXAvZGVwbG95L2ltYWdlcy9pbnRlbC1jb3JlaTctNjQvY29yZS1pbWFnZS1taW5pbWFsLWludGVsLWNvcmVpNy02NC53aWMgb2Y9VEFSR0VUX0RFVklDRQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGNvbW1hbmQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9ERVZJQ0U8L2ZpbGVuYW1lPiBpcyB0aGUgZGV2aWNlIG5vZGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0IG1hY2hpbmUgKGUuZy4gPGZpbGVuYW1lPi9kZXYvc2RjPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3N0IGxpa2VseSBhIFVTQiBzdGljaywgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L21tY2JsazA8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNEIGNhcmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb290IHRoZSBIYXJkd2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGUgYm9vdCBkZXZpY2UgcHJvdmlzaW9uZWQsIHlvdSBjYW4gaW5zZXJ0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEgaW50byB0aGUgTWlubm93Qm9hcmQgTUFYIGFuZCBib290IHRoZSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBib2FyZCBzaG91bGQgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIG1lZGlhIGFuZCBib290IHRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYm9vdGxvYWRlciBhbmQgc3Vic2VxdWVudGx5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHRoZSBib2FyZCBkb2VzIG5vdCBib290IGF1dG9tYXRpY2FsbHksIHlvdSBjYW4KLSAgICAgICAgICAgICAgICAgICAgYm9vdCBpdCBtYW51YWxseSBmcm9tIHRoZSBFRkkgc2hlbGwgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgdGhlIGJvYXJkIGRvZXMgbm90IGJvb3QgYXV0b21hdGljYWxseSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdCBpdCBtYW51YWxseSBmcm9tIHRoZSBFRkkgc2hlbGwgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgU2hlbGw+IGNvbm5lY3QgLXIKICAgICAgU2hlbGw+IG1hcCAtcgogICAgICBTaGVsbD4gZnMwOgogICAgICBTaGVsbD4gYm9vdHg2NAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgMzItYml0IGltYWdlIHVzZSB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTaGVsbD4gYm9vdGlhMzIKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIDMyLWJpdCBpbWFnZSB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNoZWxsPiBib290aWEzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KICAgICA8L3NlY3Rpb24+CiAKICAgICA8c2VjdGlvbiBpZD0ncXMtbmV4dC1zdGVwcyc+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYwppbmRleCBkYmMzM2ZjLi5kYjk1MTExIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKQEAgLTQwLDM0ICs0MCw0MyBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tYXByID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHItdXRpbCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYXB0ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFzcGVsbCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHQtbmF0aXZlID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFyZ3Atc3RhbmRhbG9uZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFzY2lpZG9jID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXNwZWxsID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYXQtc3BpMi1hdGsgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdC1zcGkyLWNvcmUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdGsgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdHRyID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hdWdlYXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvY29uZiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvZ2VuLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvbWFrZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hdmFoaSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWF2YWhpLXVpID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXZhaGkgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdmFoaS11aSA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhYmVsdHJhY2UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNlLWZpbGVzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYmFzZS1wYXNzd2QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNoID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iYyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNoLWNvbXBsZXRpb24gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYmR3Z2MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1iZWVjcnlwdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYmlncmVxc3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYmluZCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW5kID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzLWNyb3NzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzLWNyb3Nzc2RrID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpc29uID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1iamFtLW5hdGl2ZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJsa3Rvb2wgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ibGt0b29sID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYmxrdHJhY2UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ibHVlejUgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYm1hcC10b29scyA9ICJFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ib29zdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJvb3RjaGFydDIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ic2QtaGVhZGVycyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ0cmZzLXRvb2xzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtYXBwbGlhbmNlLWltYWdlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtY29tcGFyZSA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKQEAgLTc5LDE1ICs4OCwxNyBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tY2EtY2VydGlmaWNhdGVzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tY2Fpcm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jYWxpYnJhdGVwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNjYWNoZSA9ICJXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jZHJ0b29scy1uYXRpdmUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jaGtjb25maWcgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmUgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY2hycGF0aCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNhbnRhcmVsbC1mb250cyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNjYWNoZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jZHJ0b29scy1uYXRpdmUgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jaGtjb25maWcgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZSA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNocnBhdGggPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNsdXR0ZXItZ3N0LTMuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNsdXR0ZXItZ3RrLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNtYWtlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY21ha2UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbWFrZS1uYXRpdmUgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb2dsLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbXBvc2l0ZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tY29ubm1hbiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCkBAIC0xMTIsMjIgKzEyMywzMSBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1zYXRvID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1zYXRvLWRldiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXNhdG8tc2RrLXB0ZXN0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utd2VzdG9uID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS14MTEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JldXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNwaW8gPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyYWNrbGliID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcmVhdGVyZXBvID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jcm9uaWUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3JvbmllID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyeXB0b2Rldi1saW51eCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcnlwdG9kZXYtbW9kdWxlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyeXB0b2Rldi10ZXN0cyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jdXBzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jdXJsID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1jd2F1dG9tYWNyb3MgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZGFtYWdlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kYiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYiA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cy1nbGliID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzLXRlc3QgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMtd2FpdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGViaWFudXRpbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGVwbW9kd3JhcHBlci1jcm9zcyA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRoY3AgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpZmZzdGF0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCkBAIC0xMzUsMzIgKzE1NSwzOCBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tZGlyZWN0ZmIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpcmVjdGZiLWV4YW1wbGVzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXN0Y2MgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpc3RjYy1jb25maWcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXN0Y2MtY29uZmlnID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG1pZGVjb2RlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZG14cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzLW5hdGl2ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stdXRpbHMtbmF0aXZlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay14bWwtZHRkNCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZG9zZnN0b29scyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjUtbmF0aXZlID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay11dGlscy1uYXRpdmUgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXhtbC1kdGQ0ID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay14c2wtc3R5bGVzaGVldHMgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb3Nmc3Rvb2xzID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZHBrZyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcmkycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcmkzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kcm9wYmVhciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyb3BiZWFyID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZHRjID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZTJmc3Byb2dzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWVkID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZWVlLWFjcGktc2NyaXB0cyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWVmaWxpbnV4ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZWdsaW5mby1mYiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVnbGluZm8teDExID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZWZpbGludXggPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1lbGZ1dGlscyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZW5jaGFudCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1lbmNvZGluZ3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1lcGlwaGFueSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWV0aHRvb2wgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZXVkZXYgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZXhwYXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1leHBhdCA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWV4cGVjdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZmbXBlZyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZpbGUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZmluZHV0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1maXhlc3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgpAQCAtMTc0LDggKzIwMCwxNCBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tZm9ybWZhY3RvciA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1mcmVldHlwZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZzdGVzdHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mdHMgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nYXdrID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLWNyb3NzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1jcm9zcy1jYW5hZGlhbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtY3Jvc3MtaW5pdGlhbCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtY3Jvc3NzZGsgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLWNyb3Nzc2RrLWluaXRpYWwgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLXJ1bnRpbWUgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLXNhbml0aXplcnMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLXNvdXJjZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCkBAIC0xODMsMTAgKzIxNSwxMiBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NvbmYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY3IgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGIgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RiLWNyb3NzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdkYi1jcm9zcy1jYW5hZGlhbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGJtID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RrLXBpeGJ1ZiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdldHRleHQgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZSA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2V0dGV4dCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZXR0ZXh0LW1pbmltYWwtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdob3N0c2NyaXB0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1naXQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xldyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKQEAgLTE5NCwyMSArMjI4LDI4IEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliLW5ldHdvcmtpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYy1pbml0aWFsID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWJjLWxvY2FsZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYy1tdHJhY2UgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYmMtc2NyaXB0cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ21wID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWNvbW1vbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AtdGVzdGluZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtZG9jLXV0aWxzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtdGhlbWVzLXN0YW5kYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ251LWNvbmZpZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnUtZWZpID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudXBnID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnV0bHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nb2JqZWN0LWludHJvc3BlY3Rpb24gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncGVyZiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdwZ21lID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3BnbWUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdwdGZkaXNrID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ3JlcCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ3JvZmYgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdydWIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncnViID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3J1Yi1lZmkgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0LXBsYXllciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCkBAIC0yMjIsNyArMjYzLDcgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGsrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrKzMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstZG9jLXN0dWIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstZG9jID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWVuZ2luZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstaWNvbi11dGlscy1uYXRpdmUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstc2F0by1lbmdpbmUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCkBAIC0yMzcsMTMgKzI3OCwxOSBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4taG9zdGFwLWNvbmYgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4taG9zdGFwLXV0aWxzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWh3bGF0ZGV0ZWN0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taTJjLXRvb2xzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taWNvbi1uYW1pbmctdXRpbHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1pY3UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pZnVwZG93biA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0LWlmdXBkb3duID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1ib290ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWZyYW1ld29yayA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1saXZlLWJvb3QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmkgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3RmcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRzY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4taW5wdXRwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWludGx0b29sID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgpAQCAtMjU0LDggKzMwMSw4IEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1pc28tY29kZXMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1pdyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJqcGVnLXR1cmJvID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWpzb24tYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWpzb24tZ2xpYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWpzb24tYyA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWpzb24tZ2xpYiA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWtiZCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWticHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1rY29uZmlnLWZyb250ZW5kcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKQEAgLTI2NSwxMCArMzEyLDExIEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXhlYy10b29scyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWtleW1hcHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1rbW9kID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rbW9kLW5hdGl2ZSA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbDNhZnBhZCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxhbWUgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxhdGVuY3l0b3AgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1sZGNvbmZpZy1uYXRpdmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sZWFmcGFkID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGVzcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhNTIgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFjcGkgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgpAQCAtMjgwLDM0ICszMjgsMzggQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmF2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYnNkID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNhcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjYXAtbmcgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2dyb3VwID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2hlY2sgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY29udmVydC1hc24xLXBlcmwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY29udmVydC1hc24xLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY3JvY28gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkYWVtb24gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkbXggPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkcm0gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkdW1wdmFsdWUtcGVybCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlbnYtcGVybCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkdW1wdmFsdWUtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlbnYtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlcG94eSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVyYXRpb24tZm9udHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlcnJvci1wZXJsID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV2ZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZXZlbnQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJleGlmID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmFrZWtleSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZmaSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmlsZS1jaGVja3RyZWUtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmbSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZtLWV4dHJhID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZm9udGVuYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdjYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnY2MtaW5pdGlhbCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnY3J5cHQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdmb3J0cmFuID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdsYWRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2x1ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ3BnLWVycm9yID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaTE4bi1jb2xsYXRlLXBlcmwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ3BnLWVycm9yID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJndWRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmkxOG4tY29sbGF0ZS1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmljYWwgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNvbnYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCkBAIC0zMTYsNyArMzY4LDYgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmlucHV0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlianNvbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmtzYmEgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtYWQgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1hdGNoYm94ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibXBjID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5ld3QgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKQEAgLTMzNSwzMyArMzg2LDM3IEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwZm00ID0gIk1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicG5nID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBuZzEyID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBvZC1wbGFpbmVyLXBlcmwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicG9kLXBsYWluZXItcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwcm94eSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwdGhyZWFkLXN0dWJzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicnN2ZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNhbXBsZXJhdGUwID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZGwgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2RsMiA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZGwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2RsMiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZWNyZXQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzbSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNuZGZpbGUxID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzb2x2ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNvdXAtMi40ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGFzbjEgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGhlb3JhID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGltZWRhdGUtcGVybCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aW1lZGF0ZS1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRpcnBjID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRvb2wgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidG9vbC1jcm9zcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0b29sLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1bmlzdHJpbmcgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidW53aW5kID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVyY3UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1cmktcGVybCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2ItY29tcGF0ID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzYjEgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXJpLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXNiLWNvbXBhdCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzYjEgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2VyID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnZvcmJpcyA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlid2VicCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnduY2szID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExLWRpZXQgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExLWRpZXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4YXUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y2FsaWJyYXRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGNiID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgpAQCAtMzc3LDExICs0MzIsMTIgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhpbmVyYW1hID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGtiY29tbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGtiZmlsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXBhcnNlci1wZXJsID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1wZXJsID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1zYXgtcGVybCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtc2ltcGxlLXBlcmwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtcGFyc2VyLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXNheC1iYXNlLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXNheC1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1zaW1wbGUtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwyID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bXUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cG0gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCkBAIC00MDgsMTQgKzQ2NCwxNCBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgteW9jdG8tZGV2ID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXJ0ID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXhkb2MtdG9vbHMtbmF0aXZlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXhkb2MtdG9vbHMtbmF0aXZlID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbG9ncm90YXRlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxyenN6ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzYiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbHNiaW5pdHNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2J0ZXN0ID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2J0ZXN0ID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbHNvZiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHAgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHRwID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctbW9kdWxlcyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHRuZy10b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHRuZy11c3QgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgpAQCAtNDIzLDcgKzQ3OSw4IEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1sem8gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1sem9wID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbTQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWFpbHggPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbTQtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1haWx4ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbWFrZWRlcGVuZCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWtlZGV2cyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgpAQCAtNDQ1LDkgKzUwMiwxMyBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tbWVzYSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lc2EtZGVtb3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXNhLWdsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS1lbnZpcm9ubWVudCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLWVudmlyb25tZW50LWV4dHNkayA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLWV4dHNkay10b29sY2hhaW4gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS1pZGUtc3VwcG9ydCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtdG9vbGNoYWluID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWluZ2V0dHkgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS13b3JsZC1wa2dkYXRhID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1pbmdldHR5ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1pbmkteC1zZXNzaW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbWluaWNvbSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2VsZmltYWdlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgpAQCAtNDU1LDE3ICs1MTYsMjQgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rZm9udHNjYWxlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbWtsaWJzLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta3RlbXAgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbW1jLXV0aWxzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vZHV0aWxzLWluaXRzY3JpcHRzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZWcyZGVjID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbXBmciA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tcGcxMjMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1tc210cCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZC11dGlscyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbXRvb2xzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW11c2wgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1teC0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXNtID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hdGl2ZXNkay1idWlsZHRvb2xzLXBlcmwtZHVtbXkgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLWxpYnRvb2wgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hdGl2ZXNkay1xZW11LWhlbHBlciA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5jdXJzZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lYXJkID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lb24gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgpAQCAtNDczLDI0ICs1NDEsMjQgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5ldGJhc2UgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0dGxlID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbmZzLWV4cG9ydC1yb290ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5mcy11dGlscyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZnMtdXRpbHMgPSAiTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tbnB0aCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5zcHIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1uc3MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uc3MtbXlob3N0bmFtZSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1vZm9ubyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1vaC1wdXp6bGVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbmphZGUtbmF0aXZlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNwID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNzaCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5qYWRlLW5hdGl2ZSA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zcCA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zc2ggPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGVuc3NsID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZyA9ICJBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctYXJjaC1jb25maWcgPSAiQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnLWtleXJpbmdzID0gIkFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZy11dGlscyA9ICJBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3Byb2ZpbGV1aSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxldWktc2VydmVyID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tb3JjID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9zLXJlbGVhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1vc3NwLXV1aWQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wMTEta2l0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZS1pbmRleCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKQEAgLTUwMCw2ICs1NjgsNyBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1ZyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWxzYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLW5mcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKQEAgLTUxNCwyNyArNTgzLDMyIEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYW5nbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhcnRlZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGF0Y2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhdGNoZWxmID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBheCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGF4LXV0aWxzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYnppcDIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wY2l1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGNtYW5mbSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wY21hbmZtID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGNtY2lhdXRpbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGVyZiA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wZXJsID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBlcmwtbmF0aXZlID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpZ2xpdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGVybC1uYXRpdmUgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGlnbGl0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGlneiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcGluZW50cnkgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1waXhtYW4gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waXh6ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBrZ2NvbmZpZyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wbS11dGlscyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb2ludGVyY2FsID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcG9pbnRlcmNhbC14aW5wdXQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb25nLWNsb2NrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcG9wdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvcHQgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3J0bWFwID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvd2VydG9wID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcHBwID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCkBAIC01NDQsNDIgKzYxOCw1NSBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tcHJvY3BzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcHNldWRvID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc21pc2MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wc3BsYXNoID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHNwbGFzaCA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB0ZXN0LXJ1bm5lciA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wdWxzZWF1ZGlvID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8gPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB1enpsZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW5hdGl2ZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tYXN5bmMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWRidXMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWRvY3V0aWxzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1naXQgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWdpdGRiID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1pbWFnaW5nID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1tYWtvID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1hc3luYyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1naXQgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1naXRkYiA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWltYWdpbmcgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1tYWtvID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbmF0aXZlID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1ub3NlID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1udW1weSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcGV4cGVjdCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHljYWlybyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHljdXJsID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWdvYmplY3QgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Z3RrID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weXJleCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2NvbnMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNjb25zLW5hdGl2ZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2V0dXB0b29scyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21hcnRwbSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21tYXAgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW5vc2UgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1udW1weSA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXBleHBlY3QgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1wdHlwcm9jZXNzID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHljYWlybyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Y3VybCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Z3RrID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlyZXggPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zY29ucyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNjb25zLW5hdGl2ZSA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNldHVwdG9vbHMgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zaXggPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zbWFydHBtID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21tYXAgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1kaXN0cmlidXRlID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtYXN5bmMgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWRidXMgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWRpc3RyaWJ1dGUgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWRvY3V0aWxzID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1naXQgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWdpdGRiID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1tYWtvID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1uYXRpdmUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1waXAgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1zZXR1cHRvb2xzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtbm9zZSA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtbnVtcHkgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLXBpcCA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtcHlnb2JqZWN0ID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1zZXR1cHRvb2xzID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1zaXggPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLXNtbWFwID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcWVtdSA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1xZW11LWhlbHBlci1uYXRpdmUgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcWVtdXdyYXBwZXItY3Jvc3MgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcXVpbHQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXVpbHQtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXF1b3RhID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJhbmRycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZWFkbGluZSA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgpAQCAtNTkwLDExICs2NzcsMTIgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlc291cmNlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZ2IgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ycGNiaW5kID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ybmctdG9vbHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tcnBtID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ycG1yZXNvbHZlID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1yc3luYyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydC10ZXN0cyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ1YnkgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnVieSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ1bi1wb3N0aW5zdHMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1yeHZ0LXVuaWNvZGUgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zYXRvLWljb24tdGhlbWUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgpAQCAtNjAzLDE2ICs2OTEsMjAgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNjcmVlbiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zY3Juc2F2ZXJwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNlZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2VyZiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXRzZXJpYWwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc2V0dGluZ3MtZGFlbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc2dtbC1jb21tb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zZ21sc3BsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2dtbC1jb21tb24gPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZ21sLWNvbW1vbi1uYXRpdmUgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZ21sc3BsID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2dtbHNwbC1uYXRpdmUgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFkb3cgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zZWN1cmV0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zeXNyb290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFyZWQtbWltZS1pbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc2h1dGRvd24tZGVza3RvcCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNsYW5nID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNpZ25pbmcta2V5cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zbGFuZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zb2NhdCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc3BlZXggPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNwZWV4ZHNwID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCkBAIC02MjEsMTYgKzcxMywxOSBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4tc3RhcnR1cC1ub3RpZmljYXRpb24gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdGF0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdHJhY2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3RyZXNzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN1YnZlcnNpb24gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc3VkbyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc3dhYmJlci1uYXRpdmUgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zd2lnID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN3aWcgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNmc3V0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNrbG9nZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzbGludXggPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNwcm9mID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZC1ib290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXN0ZW1kLWJvb3RjaGFydCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZC1jb21wYXQtdW5pdHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQtc2VyaWFsZ2V0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgpAQCAtNjQzLDE1ICs3MzgsMTcgQEAKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjZi1hZ2VudCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi10Y3Atd3JhcHBlcnMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGVzdGV4cG9ydC10YXJiYWxsID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRleGkyaHRtbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi10ZXhpbmZvID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRleGluZm8gPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZXhpbmZvLWR1bW15LW5hdGl2ZSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRpZmYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi10aW1lID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRpbnktaW5pdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRyYWNlLWNtZCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRyZW1vciA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tdHNsaWIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi10dGYtYml0c3RyZWFtLXZlcmEgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHRmLWJpdHN0cmVhbS12ZXJhID0gIk1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAbGludXguaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXR6Y29kZS1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tdHpkYXRhID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXUtYm9vdCA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVuaXNAZGVuaXgub3JnPiIKQEAgLTY1OSwyOCArNzU2LDMyIEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi11LWJvb3QtbWtpbWFnZSA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVuaXNAZGVuaXgub3JnPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVib290Y2hhcnQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi11Y2xpYmMgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11Y2xpYmMtaW5pdGlhbCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVkZXYtZXh0cmFjb25mID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuZnMzID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tdW5pZmRlZiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuemlwID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuaW5hdGl2ZS10YXJiYWxsID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuemlwID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tdXBkYXRlLXJjLmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi11c2Jpbml0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tdXNidXRpbHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLWxpbnV4ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLW1hY3JvcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXY4NmQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi12YWxhID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmFsYSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXZhbGdyaW5kID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4tdmlkZW9wcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXZvbGF0aWxlLWJpbmRzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi12dGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi13YWZmbGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi13YXRjaGRvZyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdheWxhbmQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13YXlsYW5kLXByb3RvY29scyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlYmtpdGd0ayA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlc3RvbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlc3Rvbi1pbml0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4td2dldCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi13aGljaCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13aGljaCA9ICJNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGxpbnV4LmludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi13aXJlbGVzcy10b29scyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi13cGEtc3VwcGxpY2FudCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTEtY29tbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgpAQCAtNzAyLDYgKzgwMyw3IEBACiBSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXllcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtZXZkZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LWtleWJvYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1saWJpbnB1dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtbW91c2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LXN5bmFwdGljcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKIFJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtdm1tb3VzZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKQEAgLTc0Miw4ICs4NDQsNyBAQAogUkVDSVBFX01BSU5UQUlORVJfcG4teHZpbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgogUkVDSVBFX01BSU5UQUlORVJfcG4teHdpbmluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi14eiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teWFzbSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXlhc20gPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi16aXAgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXppc29mcy10b29scy1uYXRpdmUgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCiBSRUNJUEVfTUFJTlRBSU5FUl9wbi16bGliID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zdHJlc3MgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbW1jLXV0aWxzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vaW5jbHVkZS9wb2t5LWZsb2F0aW5nLXJldmlzaW9ucy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jCmluZGV4IGUxYWJkM2EuLmEzZGEwNDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vaW5jbHVkZS9wb2t5LWZsb2F0aW5nLXJldmlzaW9ucy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYwpAQCAtMTksNyArMTksNiBAQAogU1JDUkVWX3BuLXNldHRpbmdzLWRhZW1vbiA/PSAiJHtBVVRPUkVWfSIKIFNSQ1JFVl9wbi1zY3JlZW5zaG90ID89ICIke0FVVE9SRVZ9IgogU1JDUkVWX3BuLWxpYmZha2VrZXkgPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfcG4tb3Byb2ZpbGV1aSA/PSAiJHtBVVRPUkVWfSIKIFNSQ1JFVl9wbi1wc3BsYXNoID89ICIke0FVVE9SRVZ9IgogU1JDUkVWX3BuLWd0ay1zYXRvLWVuZ2luZSA/PSAiJHtBVVRPUkVWfSIKIFNSQ1JFVl9wbi1tYXRjaGJveC10aGVtZS1zYXRvID89ICIke0FVVE9SRVZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LXRpbnkuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vcG9reS10aW55LmNvbmYKaW5kZXggYWMwNTQyMC4uMDhiZDQ5NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LXRpbnkuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mCkBAIC04MCwxMSArODAsMTMgQEAKIERJU1RST19GRUFUVVJFU19jbGFzcy1uYXRpdmUgPSAiJHtESVNUUk9fRkVBVFVSRVNfREVGQVVMVH0gJHtESVNUUk9fRkVBVFVSRVNfTElCQ30gJHtQT0tZX0RFRkFVTFRfRElTVFJPX0ZFQVRVUkVTfSIKIERJU1RST19GRUFUVVJFU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtESVNUUk9fRkVBVFVSRVNfREVGQVVMVH0gJHtESVNUUk9fRkVBVFVSRVNfTElCQ30gJHtQT0tZX0RFRkFVTFRfRElTVFJPX0ZFQVRVUkVTfSIKIAotIyBVc2UgdG1wZGV2ZnMgYW5kIHRoZSBidXN5Ym94IHJ1bnRpbWUgc2VydmljZXMKLVZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA9ICIiCi1WSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlciA9ICIiCi1WSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID0gInRpbnktaW5pdCIKLVZJUlRVQUwtUlVOVElNRV9rZXltYXBzID0gIiIKKyMgZW5hYmxlIG1kZXYvYnVzeWJveCBmb3IgaW5pdAorVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gImJ1c3lib3gtbWRldiIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID0gImJ1c3lib3giCitWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID0gImJ1c3lib3giCitWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPSAiaW5pdHNjcmlwdHMiCitWSVJUVUFMLVJVTlRJTUVfa2V5bWFwcyA9ICJrZXltYXBzIgorRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQgKz0gInN5c3Zpbml0IgogCiAjIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgIm1vZHVsZXMiIHRvIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIHVzaW5nIHRoYXQgaW4KICMgcGFja2FnZWdyb3VwLWNvcmUtYmFzZSB0byBzZWxlY3QgbW9kdXRpbHMtaW5pdHNjcmlwdHMgb3Igbm90LiAgU2ltaWxhciB3aXRoICJuZXQiIGFuZApAQCAtOTYsNiArOTgsOCBAQAogIyBjaGFyYWN0ZXIgc3VwcG9ydC4KIElNQUdFX0ZTVFlQRVMgPSAiY3Bpby5neiIKIAorUUJfREVGQVVMVF9GU1RZUEUgPSAiJHtJTUFHRV9GU1RZUEVTfSIKKwogIyBEcm9wIHY4NmQgZnJvbSBxZW11IGRlcGVuZGVuY3kgbGlzdCAod2Ugc3VwcG9ydCBzZXJpYWwpCiAjIERyb3AgZ3J1YiBmcm9tIG1ldGEtaW50ZWwgQlNQcwogIyBGSVhNRTogQSBkaWZmZXJlbnQgbWVjaGFuaXNtIGlzIG5lZWRlZCBoZXJlLiBXZSBjb3VsZCBkZWZpbmUgLXRpbnkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vcG9reS5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKaW5kZXggNzIyYmJmMS4uZGRmMDMwYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKQEAgLTEsNyArMSw3IEBACiBESVNUUk8gPSAicG9reSIKIERJU1RST19OQU1FID0gIlBva3kgKFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIERpc3RybykiCi1ESVNUUk9fVkVSU0lPTiA9ICIyLjEiCi1ESVNUUk9fQ09ERU5BTUUgPSAia3JvZ290aCIKK0RJU1RST19WRVJTSU9OID0gIjIuMiIKK0RJU1RST19DT0RFTkFNRSA9ICJtb3J0eSIKIFNES19WRU5ET1IgPSAiLXBva3lzZGsiCiBTREtfVkVSU0lPTiA6PSAiJHtAJyR7RElTVFJPX1ZFUlNJT059Jy5yZXBsYWNlKCdzbmFwc2hvdC0ke0RBVEV9Jywnc25hcHNob3QnKX0iCiAKQEAgLTIxLDEzICsyMSwxMyBAQAogCiBESVNUUk9fRkVBVFVSRVMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9ICR7UE9LWV9ERUZBVUxUX0RJU1RST19GRUFUVVJFU30iCiAKLVBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjQlIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXg4NiA/PSAiNC40JSIKLVBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYtNjQgPz0gIjQuNCUiCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11YXJtID89ICI0LjQlIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHMgPz0gIjQuNCUiCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11bWlwczY0ID89ICI0LjQlIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXBwYyA/PSAiNC40JSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjglIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXg4NiA/PSAiNC44JSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYtNjQgPz0gIjQuOCUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11YXJtID89ICI0LjglIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHMgPz0gIjQuOCUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11bWlwczY0ID89ICI0LjglIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXBwYyA/PSAiNC44JSIKIAogU0RLX05BTUUgPSAiJHtESVNUUk99LSR7VENMSUJDfS0ke1NES19BUkNIfS0ke0lNQUdFX0JBU0VOQU1FfS0ke1RVTkVfUEtHQVJDSH0iCiBTREtQQVRIID0gIi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IgpAQCAtNzAsMjEgKzcwLDIyIEBACiBDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyA/PSAiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vIgogCiBTQU5JVFlfVEVTVEVEX0RJU1RST1MgPz0gIiBcCi0gICAgICAgICAgICBwb2t5LTEuNyBcbiBcCiAgICAgICAgICAgICBwb2t5LTEuOCBcbiBcCiAgICAgICAgICAgICBwb2t5LTIuMCBcbiBcCisgICAgICAgICAgICBwb2t5LTIuMSBcbiBcCisgICAgICAgICAgICBwb2t5LTIuMiBcbiBcCiAgICAgICAgICAgICBVYnVudHUtMTQuMDQgXG4gXAogICAgICAgICAgICAgVWJ1bnR1LTE0LjEwIFxuIFwKICAgICAgICAgICAgIFVidW50dS0xNS4wNCBcbiBcCiAgICAgICAgICAgICBVYnVudHUtMTUuMTAgXG4gXAotICAgICAgICAgICAgRmVkb3JhLTIxIFxuIFwKKyAgICAgICAgICAgIFVidW50dS0xNi4wNCBcbiBcCiAgICAgICAgICAgICBGZWRvcmEtMjIgXG4gXAogICAgICAgICAgICAgRmVkb3JhLTIzIFxuIFwKLSAgICAgICAgICAgIENlbnRPUy02LiogXG4gXAotICAgICAgICAgICAgQ2VudE9TLTcuKiBcbiBcCi0gICAgICAgICAgICBEZWJpYW4tNy4qIFxuIFwKKyAgICAgICAgICAgIEZlZG9yYS0yNCBcbiBcCisgICAgICAgICAgICBDZW50T1NMaW51eC03LiogXG4gXAogICAgICAgICAgICAgRGViaWFuLTguKiBcbiBcCi0gICAgICAgICAgICBvcGVuU1VTRS1wcm9qZWN0LTEzLjIgXG4gXAorICAgICAgICAgICAgb3BlblNVU0UtMTMuMiBcbiBcCisgICAgICAgICAgICBTVVNFTElOVVgtNDIuMSBcbiBcCiAgICAgICAgICAgICAiCiAjCiAjIE9FTEFZT1VUX0FCSSBhbGxvd3MgdXMgdG8gbm90aWZ5IHVzZXJzIHdoZW4gdGhlIGZvcm1hdCBvZiBUTVBESVIgY2hhbmdlcyBpbiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9sb2NhbC5jb25mLnNhbXBsZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9sb2NhbC5jb25mLnNhbXBsZQppbmRleCBhN2IyZDgwLi4zNjViNmViIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvbG9jYWwuY29uZi5zYW1wbGUKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlCkBAIC0xNTIsOCArMTUyLDcgQEAKICMgICAtICdpbWFnZS1zd2FiJyB0byBwZXJmb3JtIGhvc3Qgc3lzdGVtIGludHJ1c2lvbiBkZXRlY3Rpb24KICMgTk9URTogaWYgbGlzdGluZyBta2xpYnMgJiBwcmVsaW5rIGJvdGgsIHRoZW4gbWFrZSBzdXJlIG1rbGlicyBpcyBiZWZvcmUgcHJlbGluawogIyBOT1RFOiBta2xpYnMgYWxzbyBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQgZm9yIGEgZ2l2ZW4gaW1hZ2UsIHNlZSBsb2NhbC5jb25mLmV4dGVuZGVkCi0jIGltYWdlLXByZWxpbmsgZGlzYWJsZWQgZm9yIG5vdyBkdWUgdG8gaXNzdWVzIHdpdGggSUZVTkMgc3ltYm9sIHJlbG9jYXRpb24KLVVTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMiCitVU0VSX0NMQVNTRVMgPz0gImJ1aWxkc3RhdHMgaW1hZ2UtbWtsaWJzIGltYWdlLXByZWxpbmsiCiAKICMKICMgUnVudGltZSB0ZXN0aW5nIG9mIGltYWdlcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkCmluZGV4IGFhN2I0MmYuLmQ0MDdmZmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQKQEAgLTI2NSw5ICsyNjUsNiBAQAogI0NPUFlMRUZUX1JFQ0lQRV9UWVBFUyA9ICd0YXJnZXQnCiAjCiAKLSMgUmVtb3ZlIHRoZSBvbGQgaW1hZ2UgYmVmb3JlIHRoZSBuZXcgb25lIGdlbmVyYXRlZCB0byBzYXZlIGRpc2sgc3BhY2UKLSNSTV9PTERfSU1BR0UgPSAiMSIKLQogIwogIyBHQ0MvTEQgRkxBR1MgdG8gZW5hYmxlIG1vcmUgc2VjdXJlIGNvZGUgZ2VuZXJhdGlvbgogIwpAQCAtMzcxLDE2ICszNjgsNiBAQAogI0lQS19ISUVSQVJDSElDQUxfRkVFRCA9ICIxIgogIwogCi0jIFVzaW5nIFJQTTQKLSMKLSMgQ3VycmVudGx5IHRoZSByb290ZnNfcnBtIGNvZGUgaGFzIGEgaGFyZCBkZXBlbmRzIG9uIHJwbXJlc29sdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCwKLSMgd2hlbiB1c2luZyBycG00IHRoZSBycG1yZXNvbHZlIGNvZGUgd2lsbCBub3QgY29tcGlsZSBkdWUgdG8gYSBtaXNzaW5nIGhlYWRlciBmaWxlLgotIyBUaGF0IGRlcGVuZGVuY3kgbmVlZHMgdG8gYmUgcmVtb3ZlZCB3aGVuIHVzaW5nIFJQTTQsIGFsc28gdGhlIFBSRUZFUlJFRF9WRVJTSU9OIG5lZWRzCi0jIHRvIGJlIHNldC4gVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byBlbmFibGUgcnBtNAotIyBQUkVGRVJSRURfVkVSU0lPTl9ycG0gPSAiNC4xMS4yIgotIyBQUkVGRVJSRURfVkVSU0lPTl9ycG0tbmF0aXZlID0gIjQuMTEuMiIKLSMgUlBNUk9PVEZTREVQRU5EU19yZW1vdmUgPSAicnBtcmVzb2x2ZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKLQogIwogIyBVc2UgYnVzeWJveC9tZGV2IGZvciBzeXN0ZW0gaW5pdGlhbGl6YXRpb24KICMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi90b2FzdGVyY29uZi5qc29uIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL3RvYXN0ZXJjb25mLmpzb24KaW5kZXggNjA2YWFjNy4uOTNmYjkyOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL3RvYXN0ZXJjb25mLmpzb24KKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL3RvYXN0ZXJjb25mLmpzb24KQEAgLTQwLDEzICs0MCwxMyBAQAogICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAogICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKLSAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImpldGhybyIsICJrcm9nb3RoIl0KKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIl0KICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImltcG9ydGVkIiwKICAgICAgICAgICAgICJhcGl1cmwiOiAiIiwKLSAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImpldGhybyIsICJrcm9nb3RoIiwgIkhFQUQiXQorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiSEVBRCJdCiAKICAgICAgICAgfQogICAgIF0sCkBAIC01OCwxOCArNTgsNiBAQAogICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKICAgICAgICAgfSwKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiamV0aHJvIiwKLSAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCi0gICAgICAgICAgICAiYnJhbmNoIjogImpldGhybyIsCi0gICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJrcm9nb3RoIiwKLSAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCi0gICAgICAgICAgICAiYnJhbmNoIjogImtyb2dvdGgiLAotICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKLSAgICAgICAgfSwKLSAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiSEVBRCIsCiAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAogICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKQEAgLTkwLDI0ICs3OCw2IEBACiAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvXCI+WW9jdG8gUHJvamVjdCBtYXN0ZXIgYnJhbmNoPC9hPiwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKICAgICAgICAgfSwKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiamV0aHJvIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IDIuMCBKZXRocm8iLAotICAgICAgICAgICAgImJpdGJha2UiOiAiamV0aHJvIiwKLSAgICAgICAgICAgICJicmFuY2giOiAiamV0aHJvIiwKLSAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiLCAibWV0YS15b2N0byIsICJtZXRhLXlvY3RvLWJzcCJdLAotICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKLSAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWpldGhyb1wiPllvY3RvIFByb2plY3QgMi4wIFwiSmV0aHJvXCI8L2E+IGJyYW5jaC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImtyb2dvdGgiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgMi4xIEtyb2dvdGgiLAotICAgICAgICAgICAgImJpdGJha2UiOiAia3JvZ290aCIsCi0gICAgICAgICAgICAiYnJhbmNoIjogImtyb2dvdGgiLAotICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXBva3kiLCAibWV0YS15b2N0by1ic3AiXSwKLSAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCi0gICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1rcm9nb3RoXCI+WW9jdG8gUHJvamVjdCAyLjEgXCJLcm9nb3RoXCI8L2E+IGJyYW5jaC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImxvY2FsIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhbCBZb2N0byBQcm9qZWN0IiwKICAgICAgICAgICAgICJiaXRiYWtlIjogIkhFQUQiLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL2RldnRvb2wvdGVzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2xpYi9kZXZ0b29sL3Rlc3QucHkKaW5kZXggYjc0NzRiNS4uMzExOTBmNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL2RldnRvb2wvdGVzdC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9saWIvZGV2dG9vbC90ZXN0LnB5CkBAIC0yLDcgKzIsNyBAQAogCiBkZWYgc2VsZnRlc3RfcmV2ZXJzZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgICIiIlJldmVyc2UgdGhlIHZhbHVlIHBhc3NlZCB0byB2ZXJpZnkgdGhlIHBsdWdpbiBpcyBleGVjdXRpbmcuIiIiCi0gICAgcHJpbnQgYXJncy52YWx1ZVs6Oi0xXQorICAgIHByaW50KGFyZ3MudmFsdWVbOjotMV0pCiAKIGRlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKICAgICBwYXJzZXJfYnVpbGQgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3NlbGZ0ZXN0LXJldmVyc2UnLCBoZWxwPSdSZXZlcnNlIHZhbHVlIChmb3Igc2VsZnRlc3QpJywKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2xpYi9vZXFhL3J1bnRpbWUvc2VsZnRlc3QuanNvbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2xpYi9vZXFhL3J1bnRpbWUvc2VsZnRlc3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWFlNDZlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL29lcWEvcnVudGltZS9zZWxmdGVzdC5qc29uCkBAIC0wLDAgKzEsNiBAQAoreworICAgICJ0ZXN0X2luc3RhbGxfcGFja2FnZSI6IHsKKyAgICAgICAgInBrZyI6ICJzb2NhdCIsCisgICAgICAgICJybSI6IHRydWUKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9saWIvb2VxYS9ydW50aW1lL3NlbGZ0ZXN0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL29lcWEvcnVudGltZS9zZWxmdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2U1OGFiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL29lcWEvcnVudGltZS9zZWxmdGVzdC5weQpAQCAtMCwwICsxLDU1IEBACitpbXBvcnQgb3MKKworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2NsYXNzIFNlbGZ0ZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3NoIikKKyAgICBAdGFnKCJzZWxmdGVzdF9wYWNrYWdlX2luc3RhbGwiKQorICAgIGRlZiB0ZXN0X2luc3RhbGxfcGFja2FnZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGJhc2ljIHBhY2thZ2UgaW5zdGFsbGF0aW9uIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIEV4cGVjdGVkOiAxLiBCZWZvcmUgdGhlIHRlc3Qgc29jYXQgbXVzdCBiZSBpbnN0YWxsZWQgdXNpbmcgc2NwLgorICAgICAgICAgICAgICAgICAgMi4gQWZ0ZXIgdGhlIHRlc3Qgc29jYXQgbXVzdCBiZSB1bmlzdGFsbGVkIHVzaW5nIHNzaC4KKyAgICAgICAgICAgICAgICAgICAgIFRoaXMgY2FuJ3QgYmUgY2hlY2tlZCBpbiB0aGlzIHRlc3QuCisgICAgICAgIFByb2R1Y3Q6IG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigic29jYXQgLVYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzb2NhdCBpcyBub3QgaW5zdGFsbGVkIikKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X2luc3RhbGxfcGFja2FnZSIpCisgICAgQHRhZygic2VsZnRlc3RfcGFja2FnZV9pbnN0YWxsIikKKyAgICBkZWYgdGVzdF92ZXJpZnlfdW5pc3RhbGwoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiBDaGVjayBiYXNpYyBwYWNrYWdlIGluc3RhbGxhdGlvbiBmdW5jdGlvbmFsaXR5LgorICAgICAgICBFeHBlY3RlZDogMS4gdGVzdF9pbnN0YWxsX3BhY2thZ2UgbXVzdCB1bmlzdGFsbCBzb2NhdC4KKyAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGVzdCBpcyBqdXN0IHRvIHZlcmlmeSB0aGF0LgorICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInNvY2F0IC1WIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0dXMsIDAsIG1zZz0ic29jYXQgaXMgc3RpbGwgaW5zdGFsbGVkIikKKworICAgIEB0YWcoInNlbGZ0ZXN0X3NkayIpCisgICAgZGVmIHRlc3Rfc2RrKHNlbGYpOgorCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiZW52IC0wIikKKyAgICAgICAgc2RrX3BhdGggPSBzZWFyY2hfc2RrX3BhdGgocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNka19wYXRoLCBtc2c9IkNhbid0IGZpbmQgU0RLIHBhdGgiKQorCisgICAgICAgIHRhcl9jbWQgPSBvcy5wYXRoLmpvaW4oc2RrX3BhdGgsICJ0YXIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoIiVzIC0taGVscCIgJSB0YXJfY21kKQorCitkZWYgc2VhcmNoX3Nka19wYXRoKGVudik6CisgICAgZm9yIGxpbmUgaW4gZW52LnNwbGl0KCJcMCIpOgorICAgICAgICAoa2V5LCBfLCB2YWx1ZSkgPSBsaW5lLnBhcnRpdGlvbigiPSIpCisgICAgICAgIGlmIGtleSA9PSAiUEFUSCI6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiB2YWx1ZS5zcGxpdCgiOiIpOgorICAgICAgICAgICAgICAgIGlmICJwb2t5c2RrIiBpbiBwYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0aAorICAgIHJldHVybiAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIKaW5kZXggYTI5NGJhNy4uOWU5M2I4ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiCkBAIC01LDkgKzUsMTAgQEAKIElNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCAke1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQfSIKIAogSU1BR0VfRlNUWVBFUyA9ICJ3aWMiCi1STV9PTERfSU1BR0UgPSAiMSIKIAotREVQRU5EUyA9ICJzeXNsaW51eCBzeXNsaW51eC1uYXRpdmUgcGFydGVkLW5hdGl2ZSBkb3Nmc3Rvb2xzLW5hdGl2ZSBtdG9vbHMtbmF0aXZlIGdwdGZkaXNrLW5hdGl2ZSIKK0RFUEVORFMgPSAic3lzbGludXggc3lzbGludXgtbmF0aXZlIGRvc2ZzdG9vbHMtbmF0aXZlIG10b29scy1uYXRpdmUgZ3B0ZmRpc2stbmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKIAogIyBjb3JlLWltYWdlLW1pbmltYWwgaXMgcmVmZXJlbmNlZCBpbiAud2tzLCBzbyB3ZSBuZWVkIGl0cyByb290ZnMKICMgdG8gYmUgcmVhZHkgYmVmb3JlIG91ciByb290ZnMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlXzAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlXzAuMS5iYgppbmRleCBjNWNkN2E5Li42NDE2NjE4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZV8wLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2VfMC4xLmJiCkBAIC05LDcgKzksNyBAQAogCSAgICIKIAogZG9fY29tcGlsZSAoKSB7Ci0JJHtDQ30gJHtXT1JLRElSfS9za2VsZXRvbl90ZXN0LmMgLW8gJHtXT1JLRElSfS9za2VsZXRvbi10ZXN0CisJJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30gJHtXT1JLRElSfS9za2VsZXRvbl90ZXN0LmMgLW8gJHtXT1JLRElSfS9za2VsZXRvbi10ZXN0CiB9CiAKIGRvX2luc3RhbGwgKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9iZWFnbGVib25lLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgppbmRleCAxNzlkMTM1Li5jNDg3YmQ4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgpAQCAtNiw3ICs2LDcgQEAKIFhTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCiAgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAogICAgICAgICAgICB4Zjg2LWlucHV0LW1vdXNlIFwKLSAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tbW9kZXNldHRpbmcgXAogICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIgogCiBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyBrZXJuZWwtZGV2aWNldHJlZSIKQEAgLTE2LDEzICsxNiwxNiBAQAogREVGQVVMVFRVTkUgPz0gImNvcnRleGE4aGYtbmVvbiIKIGluY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMKIAotSU1BR0VfRlNUWVBFUyArPSAidGFyLmJ6MiBqZmZzMiIKK0lNQUdFX0ZTVFlQRVMgKz0gInRhci5iejIgamZmczIgd2ljIgogRVhUUkFfSU1BR0VDTURfamZmczIgPSAiLWxucCAiCitXS1NfRklMRSA9ICJzZGltYWdlLWJvb3RwYXJ0LndrcyIKK0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBrZXJuZWwtZGV2aWNldHJlZSBrZXJuZWwtaW1hZ2UtemltYWdlIgorZG9faW1hZ2Vfd2ljW2RlcGVuZHNdICs9ICJtdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgZG9zZnN0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKIAogU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eU8wIgogCiBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjQuNCUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC44JSIKIAogS0VSTkVMX0lNQUdFVFlQRSA9ICJ6SW1hZ2UiCiBLRVJORUxfREVWSUNFVFJFRSA9ICJhbTMzNXgtYm9uZS5kdGIgYW0zMzV4LWJvbmVibGFjay5kdGIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2VkZ2Vyb3V0ZXIuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCmluZGV4IDYzNDNkZmMuLjcyMGE5NDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCkBAIC0xMSwxMiArMTEsMTYgQEAKIEtFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OUyAgPSAiLmNvbW1lbnQiCiAKIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAibGludXgteW9jdG8iCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC40JSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjglIgogCiBTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCiBVU0VfVlQgPz0gIjAiCiAKIE1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgogCi1JTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiB3aWMiCiBKRkZTMl9FUkFTRUJMT0NLID0gIjB4MTAwMDAiCisKK1dLU19GSUxFID89ICJzZGltYWdlLWJvb3RwYXJ0LndrcyIKK0lNQUdFX0JPT1RfRklMRVMgPz0gInZtbGludXg7dm1saW51eC42NCIKK2RvX2ltYWdlX3dpY1tkZXBlbmRzXSArPSAibXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGRvc2ZzdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYtNjQuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCmluZGV4IGY3NmUzNWEuLmQ4NDNmZDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCkBAIC02LDMgKzYsNyBAQAogREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgogcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwogcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMKKworUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fZ2VuZXJpY3g4Ni02NCA/PSAiNC44JSIKKworU0VSSUFMX0NPTlNPTEVTX0NIRUNLID0gInR0eVMwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgppbmRleCA3OThiNjJlLi4wNGE3ZTBiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgpAQCAtOCwzICs4LDUgQEAKIHJlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCiAKIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJnbWE1MDAtZ2Z4LWNoZWNrIgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19nZW5lcmljeDg2ID89ICI0LjglIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9pbmNsdWRlL2dlbmVyaWN4ODYtY29tbW9uLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMKaW5kZXggMTZiNjg5ZC4uMmU1OWE5NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9pbmNsdWRlL2dlbmVyaWN4ODYtY29tbW9uLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCkBAIC0xLDQgKzEsNSBAQAogaW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QteDg2LmluYwogTUFDSElORV9GRUFUVVJFUyArPSAid2lmaSBlZmkgcGNiaW9zIgogCiBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgpAQCAtMTgsMyArMTksOCBAQAogR0xJQkNfQURET05TID0gIm5wdGwiCiAKIEVYVFJBX09FQ09ORl9hcHBlbmRfcG4tbWF0Y2hib3gtcGFuZWwtMiA9ICIgLS13aXRoLWJhdHRlcnk9YWNwaSIKKworSU1BR0VfRlNUWVBFUyArPSAid2ljIgorV0tTX0ZJTEUgPz0gIm1rZWZpZGlzay53a3MiCitkb19pbWFnZV93aWNbZGVwZW5kc10gKz0gImdwdGZkaXNrLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2Vfd2ljW3JlY3JkZXB0YXNrXSArPSAiZG9fYm9vdGltZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvbXBjODMxNWUtcmRiLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL21wYzgzMTVlLXJkYi5jb25mCmluZGV4IGYzYWQxMmQuLmEyZmYwN2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvbXBjODMxNWUtcmRiLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9tcGM4MzE1ZS1yZGIuY29uZgpAQCAtMTQsNyArMTQsNyBAQAogCiBNQUNISU5FX0ZFQVRVUkVTID0gImtleWJvYXJkIHBjaSBleHQyIGV4dDMgc2VyaWFsIgogCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC40JSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjglIgogUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvIgogCiBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCkBAIC0yMiw3ICsyMiw2IEBACiAgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKICAgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCiAKLVBSRUZFUlJFRF9WRVJTSU9OX3UtYm9vdCA/PSAidjIwMTMuMDclIgogVUJPT1RfRU5UUllQT0lOVCA9ICIweDAwMDAwMDAwIgogCiBLRVJORUxfREVWSUNFVFJFRSA9ICJtcGM4MzE1ZXJkYi5kdGIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3Qvc3lzdGVtZF9ib290LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L3N5c3RlbWRfYm9vdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2Y3NGRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L3N5c3RlbWRfYm9vdC5weQpAQCAtMCwwICsxLDU2IEBACitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQoraW1wb3J0IHJlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCisKKworY2xhc3MgU3lzdGVtZGJvb3Qob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgX2NvbW1vbl9zZXR1cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbW1vbiBzZXR1cCBmb3IgdGVzdCBjYXNlczogMTQ0NSwgWFhYWAorICAgICAgICAiIiIKKworICAgICAgICAjIFNldCBFRklfUFJPVklERVIgPSAiZ3VtbWlib290IiBhbmQgTUFDSElORSA9ICJnZW5lcmljeDg2LTY0IiBpbiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgZmVhdHVyZXMgPSAnRUZJX1BST1ZJREVSID0gInN5c3RlbWQtYm9vdCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ01BQ0hJTkUgPSAiZ2VuZXJpY3g4Ni02NCInCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgIGRlZiBfY29tbW9uX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tbW9uIGJ1aWxkIGZvciB0ZXN0IGNhc2VzOiAxNDQ1ICwgWFhYWAorICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgZ2VuZXJpY3g4Ni02NC9lZmkgZ3VtbWlib290IGltYWdlCisgICAgICAgIGJpdGJha2UoJ210b29scy1uYXRpdmUgY29yZS1pbWFnZS1taW5pbWFsJykKKworCisgICAgQHRlc3RjYXNlKDE0NDUpCisgICAgZGVmIHRlc3RfZWZpX3N5c3RlbWRib290X2ltYWdlc19jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgc3lzdGVtZC1ib290IGltYWdlcyBjYW4gYmUgYnVpbHQgY29ycmVjdGx5CisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBGaWxlIHN5c3RlbWQtYm9vdC5lZmkgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiAkcG9reS9idWlsZC90bXAvZGVwbG95L2ltYWdlcy9nZW5lcmljeDg2LTY0CisgICAgICAgICAgICAgICAgICAgICAyLiAnc3lzdGVtZC1ib290IiBjYW4gYmUgYnVpbHQgY29ycmVjdGx5CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBKb3NlIFBlcmV6IENhcnJhbnphIDxqb3NlLnBlcmV6LmNhcnJhbnphQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IEpvc2UgUGVyZXogQ2FycmFuemEgPGpvc2UucGVyZXouY2FycmFuemFAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIFdlJ2QgdXNlIERFUExPWV9ESVJfSU1BR0UgaGVyZSwgZXhjZXB0IHRoYXQgd2UgbmVlZCBpdHMgdmFsdWUgZm9yCisgICAgICAgICMgTUFDSElORT0iZ2VuZXJpY3g4Ni02NCB3aGljaCBpcyBwcm9iYWJseSBub3QgdGhlIG9uZSBjb25maWd1cmVkCisgICAgICAgIHN5c3RlbWRib290ZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdERVBMT1lfRElSJyksICdpbWFnZXMnLCAnZ2VuZXJpY3g4Ni02NCcsICdzeXN0ZW1kLWJvb3R4NjQuZWZpJykKKworICAgICAgICBzZWxmLl9jb21tb25fc2V0dXAoKQorCisgICAgICAgICMgRW5zdXJlIHdlJ3JlIGFjdHVhbGx5IHRlc3RpbmcgdGhhdCB0aGlzIGdldHMgYnVpbHQgYW5kIG5vdCB0aGF0CisgICAgICAgICMgaXQgd2FzIGFyb3VuZCBmcm9tIGFuIGVhcmxpZXIgYnVpbGQKKyAgICAgICAgYml0YmFrZSgnLWMgY2xlYW5zc3RhdGUgc3lzdGVtZC1ib290JykKKyAgICAgICAgcnVuQ21kKCdybSAtZiAlcycgJSBzeXN0ZW1kYm9vdGZpbGUpCisKKyAgICAgICAgc2VsZi5fY29tbW9uX2J1aWxkKCkKKworICAgICAgICBmb3VuZCA9IG9zLnBhdGguaXNmaWxlKHN5c3RlbWRib290ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnU3lzdGVtZC1Cb290IGZpbGUgJXMgbm90IGZvdW5kJyAlIHN5c3RlbWRib290ZmlsZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYtNjQvdUNsaWJjLm1hY2hpbmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNWRjNjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYtNjQvdUNsaWJjLm1hY2hpbmUKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIEZyaSBOb3YgMjMgMTU6NDk6MzMgMjAwNwotIwotIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAotIyBUQVJHRVRfYXJtIGlzIG5vdCBzZXQKLSMgVEFSR0VUX2JmaW4gaXMgbm90IHNldAotIyBUQVJHRVRfY3JpcyBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9lMSBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9mcnYgaXMgbm90IHNldAotIyBUQVJHRVRfaDgzMDAgaXMgbm90IHNldAotIyBUQVJHRVRfaHBwYSBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9pMzg2PXkKLSMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAotIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKLSMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAotIyBUQVJHRVRfbWlwcyBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKLSMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKLSMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAotIyBUQVJHRVRfc2ggaXMgbm90IHNldAotIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0Ci0jIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKLSMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0Ci1UQVJHRVRfeDg2XzY0PXkKLQotIwotIyBUYXJnZXQgQXJjaGl0ZWN0dXJlIEZlYXR1cmVzIGFuZCBPcHRpb25zCi0jCi1UQVJHRVRfQVJDSD0ieDg2XzY0IgotRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15Ci0jIENPTkZJR19HRU5FUklDXzM4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR18zODYgaXMgbm90IHNldAotIyBDT05GSUdfNDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHXzU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR181ODZNTVggaXMgbm90IHNldAotIyBDT05GSUdfNjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFTlRJVU1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRU5USVVNSUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFTlRJVU00IGlzIG5vdCBzZXQKLSMgQ09ORklHX0s2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0s3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JVU09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkNISVBDNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5DSElQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DWVJJWElJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUhFTUlBSCBpcyBub3Qgc2V0Ci1UQVJHRVRfU1VCQVJDSD0iIgotCi0jCi0jIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAotIwotQVJDSF9MSVRUTEVfRU5ESUFOPXkKLQotIwotIyBVc2luZyBMaXR0bGUgRW5kaWFuCi0jCi1BUkNIX0hBU19NTVU9eQotQVJDSF9VU0VfTU1VPXkKLVVDTElCQ19IQVNfRkxPQVRTPXkKLVVDTElCQ19IQVNfRlBVPXkKLURPX0M5OV9NQVRIPXkKLUtFUk5FTF9IRUFERVJTPSIvdXNyL2luY2x1ZGUiCi1IQVZFX0RPVF9DT05GSUc9eQotCi1VQ0xJQkNfSEFTX0ZFTlY9eQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYvdUNsaWJjLm1hY2hpbmUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRmMTVmOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgRnJpIE5vdiAyMyAxNTo0OTozMyAyMDA3Ci0jCi0jIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9hcm0gaXMgbm90IHNldAotIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKLSMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKLSMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKLVRBUkdFVF9pMzg2PXkKLSMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAotIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKLSMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAotIyBUQVJHRVRfbWlwcyBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKLSMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKLSMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAotIyBUQVJHRVRfc2ggaXMgbm90IHNldAotIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0Ci0jIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0Ci0jIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKLSMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0Ci0jIFRBUkdFVF94ODZfNjQgaXMgbm90IHNldAotCi0jCi0jIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKLSMKLVRBUkdFVF9BUkNIPSJpMzg2IgotRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15Ci1DT05GSUdfR0VORVJJQ18zODY9eQotIyBDT05GSUdfMzg2IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR181ODYgaXMgbm90IHNldAotIyBDT05GSUdfNTg2TU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHXzY4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRU5USVVNSUkgaXMgbm90IHNldAotIyBDT05GSUdfUEVOVElVTUlJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRU5USVVNNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSVVNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5DSElQQzYgaXMgbm90IHNldAotIyBDT05GSUdfV0lOQ0hJUDIgaXMgbm90IHNldAotIyBDT05GSUdfQ1lSSVhJSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkVIRU1JQUggaXMgbm90IHNldAotVEFSR0VUX1NVQkFSQ0g9IiIKLQotIwotIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKLSMKLUFSQ0hfTElUVExFX0VORElBTj15Ci0KLSMKLSMgVXNpbmcgTGl0dGxlIEVuZGlhbgotIwotQVJDSF9IQVNfTU1VPXkKLUFSQ0hfVVNFX01NVT15Ci1VQ0xJQkNfSEFTX0ZMT0FUUz15Ci1VQ0xJQkNfSEFTX0ZQVT15Ci1ET19DOTlfTUFUSD15Ci1LRVJORUxfSEVBREVSUz0iL3Vzci9pbmNsdWRlIgotSEFWRV9ET1RfQ09ORklHPXkKLQotVUNMSUJDX0hBU19GRU5WPXkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiYXBwZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmQ5OTFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZAppbmRleCBiMjBhMThiLi43NGI5YzdjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKQEAgLTcsMTEgKzcsMTEgQEAKIEtNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKIEtNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKIAotU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiAgICA/PSAiMzA0Y2FhOTQ4MGYxOTg3NWU3MTdmYWYzY2FkOGNiN2VjZDc1ODczMyIKLVNSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gIjMwNGNhYTk0ODBmMTk4NzVlNzE3ZmFmM2NhZDhjYjdlY2Q3NTg3MzMiCi1TUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICI3OWEzMWI5ZDIzZGIxMjZmOGE2YmUzZWI4OGZkNjgzMDU2YTIxM2YxIgotU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZSA/PSAiZWZiNmZmYjJjYTk2YTM2NGY5MTZjOTg5MGFkMDIzZmM1OTVlMGU2ZSIKLVNSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiNzlhMzFiOWQyM2RiMTI2ZjhhNmJlM2ViODhmZDY4MzA1NmEyMTNmMSIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgICAgPz0gImY0ZDA5MDBiMjg1MWU4MjllOTkwZTBmNjRiMDllZDNiOGUzNTVmYWUiCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICJmNGQwOTAwYjI4NTFlODI5ZTk5MGUwZjY0YjA5ZWQzYjhlMzU1ZmFlIgorU1JDUkVWX21hY2hpbmVfZWRnZXJvdXRlciA/PSAiZjRkMDkwMGIyODUxZTgyOWU5OTBlMGY2NGIwOWVkM2I4ZTM1NWZhZSIKK1NSQ1JFVl9tYWNoaW5lX2JlYWdsZWJvbmUgPz0gIjEyNTMyZTc1M2I1MDk5NzY5MDkyM2UwM2VkYjNhYzMzNjg4MTdhMjYiCitTUkNSRVZfbWFjaGluZV9tcGM4MzE1ZS1yZGIgPz0gImY0ZDA5MDBiMjg1MWU4MjllOTkwZTBmNjRiMDllZDNiOGUzNTVmYWUiCiAKIENPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCiBDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA9ICJnZW5lcmljeDg2LTY0IgpAQCAtMTksNSArMTksOCBAQAogQ09NUEFUSUJMRV9NQUNISU5FX2JlYWdsZWJvbmUgPSAiYmVhZ2xlYm9uZSIKIENPTVBBVElCTEVfTUFDSElORV9tcGM4MzE1ZS1yZGIgPSAibXBjODMxNWUtcmRiIgogCi1MSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYgPSAiNC4xLjE4IgotTElOVVhfVkVSU0lPTl9nZW5lcmljeDg2LTY0ID0gIjQuMS4xOCIKK0xJTlVYX1ZFUlNJT05fZ2VuZXJpY3g4NiA9ICI0LjEuMzMiCitMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYtNjQgPSAiNC4xLjMzIgorTElOVVhfVkVSU0lPTl9lZGdlcm91dGVyID0gIjQuMS4zMyIKK0xJTlVYX1ZFUlNJT05fYmVhZ2xlYm9uZSA9ICI0LjEuMzMiCitMSU5VWF9WRVJTSU9OX21wYzgzMTVlLXJkYiA9ICI0LjEuMzMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZAppbmRleCBlMzFiMGM4Li4zZjBjNGRhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKQEAgLTcsMTEgKzcsMTEgQEAKIEtCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgogS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKIAotU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiAgICA/PSAiM2QyNDU1ZjlkYTMwZjkyM2M2YmQ2OTAxNGZhZDRjYzRlYTczOGJlNiIKLVNSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gIjNkMjQ1NWY5ZGEzMGY5MjNjNmJkNjkwMTRmYWQ0Y2M0ZWE3MzhiZTYiCi1TUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICJmZjRjNGVmMTViNTFmNDViOTEwNmQ3MWJmMWY2MmZlN2MwMmU2M2MyIgotU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZSA/PSAiZmY0YzRlZjE1YjUxZjQ1YjkxMDZkNzFiZjFmNjJmZTdjMDJlNjNjMiIKLVNSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiZGYwMDg3N2VmOTM4N2IzOGI5NjAxYzgyZGI1N2RlMmExYjIzY2U1MyIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgICAgPz0gImNhNmEwOGJkN2Y4NmViZWYxMWY3NjNkMjZmNzg3ZjdkNjUyNzA0NzMiCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICJjYTZhMDhiZDdmODZlYmVmMTFmNzYzZDI2Zjc4N2Y3ZDY1MjcwNDczIgorU1JDUkVWX21hY2hpbmVfZWRnZXJvdXRlciA/PSAiY2E2YTA4YmQ3Zjg2ZWJlZjExZjc2M2QyNmY3ODdmN2Q2NTI3MDQ3MyIKK1NSQ1JFVl9tYWNoaW5lX2JlYWdsZWJvbmUgPz0gImNhNmEwOGJkN2Y4NmViZWYxMWY3NjNkMjZmNzg3ZjdkNjUyNzA0NzMiCitTUkNSRVZfbWFjaGluZV9tcGM4MzE1ZS1yZGIgPz0gIjdmYTQyYWQ5YTQzY2E0YmIxZTU3OGUyMDhmZmVkZGFlMmQ2MTUwZTIiCiAKIENPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCiBDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA9ICJnZW5lcmljeDg2LTY0IgpAQCAtMTksNSArMTksOCBAQAogQ09NUEFUSUJMRV9NQUNISU5FX2JlYWdsZWJvbmUgPSAiYmVhZ2xlYm9uZSIKIENPTVBBVElCTEVfTUFDSElORV9tcGM4MzE1ZS1yZGIgPSAibXBjODMxNWUtcmRiIgogCi1MSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYgPSAiNC40LjMiCi1MSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYtNjQgPSAiNC40LjMiCitMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYgPSAiNC40LjI2IgorTElOVVhfVkVSU0lPTl9nZW5lcmljeDg2LTY0ID0gIjQuNC4yNiIKK0xJTlVYX1ZFUlNJT05fZWRnZXJvdXRlciA9ICI0LjQuMjYiCitMSU5VWF9WRVJTSU9OX2JlYWdsZWJvbmUgPSAiNC40LjI2IgorTElOVVhfVkVSU0lPTl9tcGM4MzE1ZS1yZGIgPSAiNC40LjI2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmYTM4YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9nZW5lcmljeDg2LTY0ICA9ICJzdGFuZGFyZC9iYXNlIgorCitLTUFDSElORV9nZW5lcmljeDg2ID89ICJjb21tb24tcGMiCitLTUFDSElORV9nZW5lcmljeDg2LTY0ID89ICJjb21tb24tcGMtNjQiCitLQlJBTkNIX2VkZ2Vyb3V0ZXIgPSAic3RhbmRhcmQvZWRnZXJvdXRlciIKK0tCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgorS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiAgICA/PSAiMWFkZjlkMzYzMzhkYzNjNjNjZGJmNmY5OGJjYmRjN2JiYTQyYTc5NCIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gIjFhZGY5ZDM2MzM4ZGMzYzYzY2RiZjZmOThiY2JkYzdiYmE0MmE3OTQiCitTUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICIxYWRmOWQzNjMzOGRjM2M2M2NkYmY2Zjk4YmNiZGM3YmJhNDJhNzk0IgorU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZSA/PSAiMWFkZjlkMzYzMzhkYzNjNjNjZGJmNmY5OGJjYmRjN2JiYTQyYTc5NCIKK1NSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiNGJlODhiMDNmNjY0ODAwNGU3NGI2ODA0NGZhMmIwNWU4MWNmOWExYiIKKworQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYgPSAiZ2VuZXJpY3g4NiIKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2LTY0ID0gImdlbmVyaWN4ODYtNjQiCitDT01QQVRJQkxFX01BQ0hJTkVfZWRnZXJvdXRlciA9ICJlZGdlcm91dGVyIgorQ09NUEFUSUJMRV9NQUNISU5FX2JlYWdsZWJvbmUgPSAiYmVhZ2xlYm9uZSIKK0NPTVBBVElCTEVfTUFDSElORV9tcGM4MzE1ZS1yZGIgPSAibXBjODMxNWUtcmRiIgorCitMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYgPSAiNC44LjMiCitMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYtNjQgPSAiNC44LjMiCitMSU5VWF9WRVJTSU9OX2VkZ2Vyb3V0ZXIgPSAiNC44LjMiCitMSU5VWF9WRVJTSU9OX2JlYWdsZWJvbmUgPSAiNC44LjMiCitMSU5VWF9WRVJTSU9OX21wYzgzMTVlLXJkYiA9ICI0LjguMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MKaW5kZXggMjA4Y2RlNi4uZGRjMmE4NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MKQEAgLTE3LDYgKzE3LDcgQEAKIAogICAgICAgICAjIFNldCB0aGVzZSB0byBhIGNvbW1vbiBzZXQgb2YgdmFsdWVzLCB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcgdGhlbSBvdGhlciB0aGF0IGZvciBXT1JLRElSIGRpcmVjdG9yeQogICAgICAgICAjIG5hbWluZyBhbnl3YXkKKyAgICAgICAgZC5zZXRWYXIoImJhc2VsaWIiLCAibGliIikKICAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9BUkNIIiwgImFsbGFyY2giKQogICAgICAgICBkLnNldFZhcigiVEFSR0VUX09TIiwgImxpbnV4IikKICAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9DQ19BUkNIIiwgIm5vbmUiKQpAQCAtNDEsNiArNDIsMTAgQEAKICAgICAgICAgZC5zZXRWYXIoIkVYQ0xVREVfRlJPTV9TSExJQlMiLCAiMSIpCiAgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQiLCAiMSIpCiAgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1BBQ0tBR0VfU1RSSVAiLCAiMSIpCisKKyAgICAgICAgIyBUaGVzZSBtdWx0aWxpYiB2YWx1ZXMgc2hvdWxkbid0IGNoYW5nZSBhbGxhcmNoIHBhY2thZ2VzIHNvIGV4Y2x1ZGUgdGhlbQorICAgICAgICBkLnNldFZhckZsYWcoImVtaXRfcGtnZGF0YSIsICJ2YXJkZXBzZXhjbHVkZSIsICJNVUxUSUxJQl9WQVJJQU5UUyIpCisgICAgICAgIGQuc2V0VmFyRmxhZygid3JpdGVfc3BlY2ZpbGUiLCAidmFyZGVwc2V4Y2x1ZGUiLCAiTVVMVElMSUJTIikKICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CiAgICAgICAgIGJiLmVycm9yKCJQbGVhc2UgZW5zdXJlIHJlY2lwZSAlcyBzZXRzIFBBQ0tBR0VfQVJDSCBiZWZvcmUgaW5oZXJpdCBwYWNrYWdlZ3JvdXAiICUgZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwppbmRleCAyZjNiMjc4Li45MjM5OTgzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FyY2hpdmVyLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzCkBAIC0xMzIsNyArMTMyLDI2IEBACiAKICAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKICAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS4uLicpCi0gICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgdXJscyA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgVHJ1ZSkuc3BsaXQoKQorICAgICMgZGVzdHN1ZmZpeCAoZ2l0IGZldGNoZXIpIGFuZCBzdWJkaXIgKGV2ZXJ5dGhpbmcgZWxzZSkgYXJlIGFsbG93ZWQgdG8gYmUKKyAgICAjIGFic29sdXRlIHBhdGhzIChmb3IgZXhhbXBsZSwgZGVzdHN1ZmZpeD0ke1N9L2Zvb2JhcikuCisgICAgIyBUaGF0IG1lc3NlcyB3aXRoIHVucGFja2luZyBpbnNpZGUgb3VyIHRtcGRpciBiZWxvdywgYmVjYXVzZSB0aGUgZmV0Y2hlcnMKKyAgICAjIHdpbGwgdGhlbiB1bnBhY2sgaW4gdGhhdCBkaXJlY3RvcnkgYW5kIGNvbXBsZXRlbHkgaWdub3JlIHRoZSB0bXBkaXIuCisgICAgIyBUaGF0IGJyZWFrcyBwYXJhbGxlbCB0YXNrcyByZWx5aW5nIG9uICR7U30sIGxpa2UgZG9fY29tcGlsZS4KKyAgICAjCisgICAgIyBUbyBzb2x2ZSB0aGlzLCB3ZSByZW1vdmUgdGhlc2UgcGFyYW1ldGVycyBmcm9tIGFsbCBVUkxzLgorICAgICMgV2UgZG8gdGhpcyBldmVuIGZvciByZWxhdGl2ZSBwYXRocyBiZWNhdXNlIGl0IG1ha2VzIHRoZSBjb250ZW50IG9mIHRoZQorICAgICMgYXJjaGl2ZXMgbW9yZSB1c2VmdWwgKG5vIGV4dHJhIHBhdGhzIHRoYXQgYXJlIG9ubHkgdXNlZCBkdXJpbmcKKyAgICAjIGNvbXBpbGF0aW9uKS4KKyAgICBmb3IgaSwgdXJsIGluIGVudW1lcmF0ZSh1cmxzKToKKyAgICAgICAgZGVjb2RlZCA9IGJiLmZldGNoMi5kZWNvZGV1cmwodXJsKQorICAgICAgICBmb3IgcGFyYW0gaW4gKCdkZXN0c3VmZml4JywgJ3N1YmRpcicpOgorICAgICAgICAgICAgaWYgcGFyYW0gaW4gZGVjb2RlZFs1XToKKyAgICAgICAgICAgICAgICBkZWwgZGVjb2RlZFs1XVtwYXJhbV0KKyAgICAgICAgZW5jb2RlZCA9IGJiLmZldGNoMi5lbmNvZGV1cmwoZGVjb2RlZCkKKyAgICAgICAgdXJsc1tpXSA9IGVuY29kZWQKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaCh1cmxzLCBkKQorICAgIHRhcmJhbGxfc3VmZml4ID0ge30KICAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CiAgICAgICAgIGxvY2FsID0gZmV0Y2gubG9jYWxwYXRoKHVybCkucnN0cmlwKCIvIik7CiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGxvY2FsKToKQEAgLTE0MCw3ICsxNTksMjEgQEAKICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGxvY2FsKToKICAgICAgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPWQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCiAgICAgICAgICAgICBmZXRjaC51bnBhY2sodG1wZGlyLCAodXJsLCkpCi0gICAgICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCB0bXBkaXIgKyAnLy4nLCAnJywgYXJfb3V0ZGlyKQorICAgICAgICAgICAgIyBUbyBoYW5kbGUgcmVjaXBlcyB3aXRoIG1vcmUgdGhhbiBvbmUgc291cmNlLCB3ZSBhZGQgdGhlICJuYW1lIgorICAgICAgICAgICAgIyBVUkwgcGFyYW1ldGVyIGFzIHN1ZmZpeC4gV2UgdHJlYXQgaXQgYXMgYW4gZXJyb3Igd2hlbgorICAgICAgICAgICAgIyB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgVVJMIHdpdGhvdXQgYSBuYW1lLCBvciBhIG5hbWUgZ2V0cyByZXVzZWQuCisgICAgICAgICAgICAjIFRoaXMgaXMgYW4gYWRkaXRpb25hbCBzYWZldHkgbmV0LCBpbiBwcmFjdGljZSB0aGUgbmFtZSBoYXMKKyAgICAgICAgICAgICMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgdGhlIGdpdCBmZXRjaGVyLCBvdGhlcndpc2UgU1JDUkVWIGNhbm5vdAorICAgICAgICAgICAgIyBiZSBzZXQgc2VwYXJhdGVseSBmb3IgZWFjaCBVUkwuCisgICAgICAgICAgICBwYXJhbXMgPSBiYi5mZXRjaDIuZGVjb2RldXJsKHVybClbNV0KKyAgICAgICAgICAgIG5hbWUgPSBwYXJhbXMuZ2V0KCduYW1lJywgJycpCisgICAgICAgICAgICBpZiBuYW1lIGluIHRhcmJhbGxfc3VmZml4OgorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGRldGVybWluZSBhcmNoaXZlIG5hbWVzIGZvciBvcmlnaW5hbCBzb3VyY2UgYmVjYXVzZSAnbmFtZScgVVJMIHBhcmFtZXRlciBpcyB1bnNldCBpbiBtb3JlIHRoYW4gb25lIFVSTC4gQWRkIGl0IHRvIGF0IGxlYXN0IG9uZSBvZiB0aGVzZTogJXMgJXMiICUgKHRhcmJhbGxfc3VmZml4W25hbWVdLCB1cmwpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZGV0ZXJtaW5lIGFyY2hpdmUgbmFtZXMgZm9yIG9yaWdpbmFsIHNvdXJjZSBiZWNhdXNlICduYW1lPScgVVJMIHBhcmFtZXRlciAnJXMnIGlzIHVzZWQgdHdpY2UuIE1ha2UgaXQgdW5pcXVlIGluOiAlcyAlcyIgJSAodGFyYmFsbF9zdWZmaXhbbmFtZV0sIHVybCkpCisgICAgICAgICAgICB0YXJiYWxsX3N1ZmZpeFtuYW1lXSA9IHVybAorICAgICAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgdG1wZGlyICsgJy8uJywgbmFtZSwgYXJfb3V0ZGlyKQogCiAgICAgIyBFbWl0IHBhdGNoIHNlcmllcyBmaWxlcyBmb3IgJ29yaWdpbmFsJwogICAgIGJiLm5vdGUoJ1dyaXRpbmcgcGF0Y2ggc2VyaWVzIGZpbGVzLi4uJykKQEAgLTI3MCw5ICszMDMsMTAgQEAKICAgICAgICAgcmV0dXJuCiAgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCiAgICAgYXJfd29ya2RpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCiAKICAgICAjIFRoZSBrZXJuZWwgY2xhc3MgZnVuY3Rpb25zIHJlcXVpcmUgaXQgdG8gYmUgb24gd29yay1zaGFyZWQsIHNvIHdlIGRvbnQgY2hhbmdlIFdPUktESVIKLSAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgZCk6CisgICAgaWYgbm90IChiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKSBvciBwbi5zdGFydHN3aXRoKCdnY2Mtc291cmNlJykpOgogICAgICAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX3VucGFjayBkb19wYXRjaCBydW4gaW4gYW5vdGhlciBkaXIuCiAgICAgICAgIGQuc2V0VmFyKCdXT1JLRElSJywgYXJfd29ya2RpcikKIApAQCAtMjkwLDcgKzMyNCw3IEBACiAgICAgICAgIG9lLnBhdGguY29weXRyZWUoc3JjLCBzcmNfb3JpZykKIAogICAgICMgTWFrZSBzdXJlIGdjYyBhbmQga2VybmVsIHNvdXJjZXMgYXJlIHBhdGNoZWQgb25seSBvbmNlCi0gICAgaWYgbm90ICgoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSA9PSAiIiBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKSkpOgorICAgIGlmIG5vdCAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSA9PSAiIiBvciAoYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgZCkgb3IgcG4uc3RhcnRzd2l0aCgnZ2NjLXNvdXJjZScpKSk6CiAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fcGF0Y2gnLCBkKQogCiAgICAgIyBDcmVhdGUgdGhlIHBhdGNoZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzCmluZGV4IDY2NDlmNWQuLmM0M2VhOWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpAQCAtMTksMTUgKzE5LDEzIEBACiAKICAgICByZXR1cm4gZGVwcyArICdnbnUtY29uZmlnLW5hdGl2ZSAnCiAKLUVYVFJBX09FTUFLRSA9ICIiCi0KIERFUEVORFNfcHJlcGVuZCA9ICIke0BhdXRvdG9vbHNfZGVwX3ByZXBlbmQoZCl9ICIKIAogaW5oZXJpdCBzaXRlaW5mbwogCiAjIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHNoZWxsIHNjcmlwdHMgd2l0aCB2YXJpYWJsZXMgZGVmaW5lZCB0byBzdXBwbHkgdGVzdAogIyByZXN1bHRzIGZvciBhdXRvY29uZiB0ZXN0cyB3ZSBjYW5ub3QgcnVuIGF0IGJ1aWxkIHRpbWUuCi1leHBvcnQgQ09ORklHX1NJVEUgPSAiJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIEZhbHNlKX0iCitleHBvcnQgQ09ORklHX1NJVEUgPSAiJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQpfSIKIAogYWNwYXRocyA9ICJkZWZhdWx0IgogRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50IgpAQCAtNzcsNiArNzUsOCBAQAogCQkgICR7QGFwcGVuZF9saWJ0b29sX3N5c3Jvb3QoZCl9IgogQ09ORklHVVJFT1BUX0RFUFRSQUNLID89ICItLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyIKIAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPz0gIiIKKwogQVVUT1RPT0xTX1NDUklQVF9QQVRIID89ICIke1N9IgogQ09ORklHVVJFX1NDUklQVCA/PSAiJHtBVVRPVE9PTFNfU0NSSVBUX1BBVEh9L2NvbmZpZ3VyZSIKIApAQCAtODUsNyArODUsNyBAQAogb2VfcnVuY29uZiAoKSB7CiAJIyBVc2UgcmVsYXRpdmUgcGF0aCB0byBhdm9pZCBidWlsZHBhdGhzIGluIGZpbGVzCiAJY2Znc2NyaXB0X25hbWU9ImBiYXNlbmFtZSAke0NPTkZJR1VSRV9TQ1JJUFR9YCIKLQljZmdzY3JpcHQ9YHB5dGhvbiAtYyAiaW1wb3J0IG9zOyBwcmludCBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKCcke0NPTkZJR1VSRV9TQ1JJUFR9JyksICcuJykiYC8kY2Znc2NyaXB0X25hbWUKKwljZmdzY3JpcHQ9YHB5dGhvbjMgLWMgImltcG9ydCBvczsgcHJpbnQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZSgnJHtDT05GSUdVUkVfU0NSSVBUfScpLCAnLicpKSJgLyRjZmdzY3JpcHRfbmFtZQogCWlmIFsgLXggIiRjZmdzY3JpcHQiIF0gOyB0aGVuCiAJCWJibm90ZSAiUnVubmluZyAkY2Znc2NyaXB0ICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9ICRAIgogCQlpZiAhICR7Q0FDSEVEX0NPTkZJR1VSRVZBUlN9ICRjZmdzY3JpcHQgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0gIiRAIjsgdGhlbgpAQCAtMTI5LDEyICsxMjksMTYgQEAKIAogRVhUUkFDT05GRlVOQ1MgPz89ICIiCiAKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiICR7UEFDS0FHRUNPTkZJR19DT05GQVJHU30iCisKIGRvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImF1dG90b29sc19wcmVjb25maWd1cmUgYXV0b3Rvb2xzX2NvcHlfYWNsb2NhbHMgJHtFWFRSQUNPTkZGVU5DU30iCiBkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiYXV0b3Rvb2xzX3Bvc3Rjb25maWd1cmUiCiAKLUFDTE9DQUxESVIgPSAiJHtCfS9hY2xvY2FsLWNvcHkiCitBQ0xPQ0FMRElSID0gIiR7V09SS0RJUn0vYWNsb2NhbC1jb3B5IgogCiBweXRob24gYXV0b3Rvb2xzX2NvcHlfYWNsb2NhbHMgKCkgeworICAgIGltcG9ydCBjb3B5CisKICAgICBzID0gZC5nZXRWYXIoIkFVVE9UT09MU19TQ1JJUFRfUEFUSCIsIFRydWUpCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHMgKyAiL2NvbmZpZ3VyZS5pbiIpIGFuZCBub3Qgb3MucGF0aC5leGlzdHMocyArICIvY29uZmlndXJlLmFjIik6CiAgICAgICAgIGlmIG5vdCBkLmdldFZhcigiQVVUT1RPT0xTX0NPUFlBQ0xPQ0FMIiwgRmFsc2UpOgpAQCAtMTYzLDM2ICsxNjcsNjMgQEAKICAgICBpZiBzdGFydCBpcyBOb25lOgogICAgICAgICBiYi5mYXRhbCgiQ291bGRuJ3QgZmluZCBvdXJzZWxmIGluIEJCX1RBU0tERVBEQVRBPyIpCiAKLSAgICAjIFdlIG5lZWQgdG8gZmluZCBjb25maWd1cmUgdGFza3Mgd2hpY2ggYXJlIGVpdGhlciBmcm9tIDx0YXJnZXQ+IC0+IDx0YXJnZXQ+Ci0gICAgIyBvciA8bmF0aXZlPiAtPiA8bmF0aXZlPiBidXQgbm90IDx0YXJnZXQ+IC0+IDxuYXRpdmU+IHVubGVzcyB0aGV5J3JlIGRpcmVjdAotICAgICMgZGVwZW5kZW5jaWVzLiBUaGlzIG1pcnJvcnMgd2hhdCB3b3VsZCBnZXQgcmVzdG9yZWQgZnJvbSBzc3RhdGUuCi0gICAgZG9uZSA9IFtzdGFydF0KLSAgICBuZXh0ID0gW3N0YXJ0XQorICAgICMgV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG00IGZpbGVzIHdlIG5lZWQgdG8gZXhwb3NlIHRvIHRoaXMgZG9fY29uZmlndXJlIHRhc2suCisgICAgIyBUaGlzIG5lZWRzIHRvIG1hdGNoIHdoYXQgd291bGQgZ2V0IHJlc3RvcmVkIGZyb20gc3N0YXRlLCB3aGljaCBpcyBjb250cm9sbGVkIAorICAgICMgdWx0aW1hdGVseSBieSBjYWxscyBmcm9tIGJpdGJha2UgdG8gc2V0c2NlbmVfZGVwdmFsaWQoKS4KKyAgICAjIFRoYXQgZnVuY3Rpb24gZXhwZWN0cyBhIHNldHNjZW5lIGRlcGVuZGVuY3kgdHJlZS4gV2UgYnVpbGQgYSBkZXBlbmRlbmN5IHRyZWUgCisgICAgIyBjb25kZW5zZWQgdG8gZG9fcG9wdWxhdGVfc3lzcm9vdCAtPiBkb19wb3B1bGF0ZV9zeXNyb290IGRlcGVuZGVuY2llcywgc2ltaWxhciB0byAKKyAgICAjIHRoYXQgdXNlZCBieSBzZXRzY2VuZSB0YXNrcy4gV2UgY2FuIHRoZW4gY2FsbCBpbnRvIHNldHNjZW5lX2RlcHZhbGlkKCkgYW5kIGRlY2lkZQorICAgICMgd2hpY2ggZGVwZW5kZW5jaWVzIHdlIGNhbiAic2VlIiBhbmQgc2hvdWxkIGV4cG9zZSB0aGUgbTQgZmlsZXMgZm9yLgorICAgIHNldHNjZW5lZGVwcyA9IGNvcHkuZGVlcGNvcHkodGFza2RlcGRhdGEpCisKKyAgICBzdGFydCA9IHNldChbc3RhcnRdKQorCisgICAgIyBDcmVhdGUgY29sbGFwc2VkIGRvX3BvcHVsYXRlX3N5c3Jvb3QgLT4gZG9fcG9wdWxhdGVfc3lzcm9vdCB0cmVlCisgICAgZm9yIGRlcCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgZGF0YSA9IHNldHNjZW5lZGVwc1tkZXBdICAgICAgICAKKyAgICAgICAgaWYgZGF0YVsxXSAhPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCI6CisgICAgICAgICAgICBmb3IgZGVwMiBpbiBzZXRzY2VuZWRlcHM6CisgICAgICAgICAgICAgICAgZGF0YTIgPSBzZXRzY2VuZWRlcHNbZGVwMl0KKyAgICAgICAgICAgICAgICBpZiBkZXAgaW4gZGF0YTJbM106CisgICAgICAgICAgICAgICAgICAgIGRhdGEyWzNdLnVwZGF0ZShzZXRzY2VuZWRlcHNbZGVwXVszXSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YTJbM10ucmVtb3ZlKGRlcCkKKyAgICAgICAgICAgIGlmIGRlcCBpbiBzdGFydDoKKyAgICAgICAgICAgICAgICBzdGFydC51cGRhdGUoc2V0c2NlbmVkZXBzW2RlcF1bM10pCisgICAgICAgICAgICAgICAgc3RhcnQucmVtb3ZlKGRlcCkKKyAgICAgICAgICAgIGRlbCBzZXRzY2VuZWRlcHNbZGVwXQorCisgICAgIyBSZW1vdmUgY2lyY3VsYXIgcmVmZXJlbmNlcworICAgIGZvciBkZXAgaW4gc2V0c2NlbmVkZXBzOgorICAgICAgICBpZiBkZXAgaW4gc2V0c2NlbmVkZXBzW2RlcF1bM106CisgICAgICAgICAgICBzZXRzY2VuZWRlcHNbZGVwXVszXS5yZW1vdmUoZGVwKQorCisgICAgIyBEaXJlY3QgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBwcmVzZW50IGFuZCBjYW4gYmUgZGVwZW5kZWQgdXBvbgorICAgIGZvciBkZXAgaW4gc3RhcnQ6CisgICAgICAgIGNvbmZpZ3VyZWRlcHMuYXBwZW5kKHNldHNjZW5lZGVwc1tkZXBdWzBdKQorCisgICAgIyBDYWxsIGludG8gc2V0c2NlbmVfZGVwdmFsaWQgZm9yIGVhY2ggc3ViLWRlcGVuZGVuY3kgYW5kIG9ubHkgY29weSBtNCBmaWxlcworICAgICMgZm9yIG9uZXMgdGhhdCB3b3VsZCBiZSByZXN0b3JlZCBmcm9tIHNzdGF0ZS4KKyAgICBkb25lID0gbGlzdChzdGFydCkKKyAgICBuZXh0ID0gbGlzdChzdGFydCkKICAgICB3aGlsZSBuZXh0OgogICAgICAgICBuZXcgPSBbXQogICAgICAgICBmb3IgZGVwIGluIG5leHQ6Ci0gICAgICAgICAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICAgICAgICAgZGF0YSA9IHNldHNjZW5lZGVwc1tkZXBdCiAgICAgICAgICAgICBmb3IgZGF0YWRlcCBpbiBkYXRhWzNdOgogICAgICAgICAgICAgICAgIGlmIGRhdGFkZXAgaW4gZG9uZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBpZiAobm90IGRhdGFbMF0uZW5kc3dpdGgoIi1uYXRpdmUiKSkgYW5kIHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdLmVuZHN3aXRoKCItbmF0aXZlIikgYW5kIGRlcCAhPSBzdGFydDoKKyAgICAgICAgICAgICAgICB0YXNrZGVwcyA9IHt9CisgICAgICAgICAgICAgICAgdGFza2RlcHNbZGVwXSA9IHNldHNjZW5lZGVwc1tkZXBdWzoyXQorICAgICAgICAgICAgICAgIHRhc2tkZXBzW2RhdGFkZXBdID0gc2V0c2NlbmVkZXBzW2RhdGFkZXBdWzoyXQorICAgICAgICAgICAgICAgIHJldHZhbCA9IHNldHNjZW5lX2RlcHZhbGlkKGRhdGFkZXAsIHRhc2tkZXBzLCBbXSwgZCkKKyAgICAgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlNraXBwaW5nIHNldHNjZW5lIGRlcGVuZGVuY3kgJXMgZm9yIG00IG1hY3JvIGNvcHlpbmciICUgZGF0YWRlcCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChkYXRhZGVwKQogICAgICAgICAgICAgICAgIG5ldy5hcHBlbmQoZGF0YWRlcCkKLSAgICAgICAgICAgICAgICBpZiB0YXNrZGVwZGF0YVtkYXRhZGVwXVsxXSA9PSAiZG9fY29uZmlndXJlIjoKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZGVwcy5hcHBlbmQodGFza2RlcGRhdGFbZGF0YWRlcF1bMF0pCisgICAgICAgICAgICAgICAgY29uZmlndXJlZGVwcy5hcHBlbmQoc2V0c2NlbmVkZXBzW2RhdGFkZXBdWzBdKQogICAgICAgICBuZXh0ID0gbmV3CiAKLSAgICAjY29uZmlndXJlZGVwczIgPSBbXQotICAgICNmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgotICAgICMgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KLSAgICAjICAgIGlmIGRhdGFbMV0gPT0gImRvX2NvbmZpZ3VyZSIgYW5kIGRhdGFbMF0gIT0gcG46Ci0gICAgIyAgICAgICAgY29uZmlndXJlZGVwczIuYXBwZW5kKGRhdGFbMF0pCi0gICAgI2NvbmZpZ3VyZWRlcHMuc29ydCgpCi0gICAgI2NvbmZpZ3VyZWRlcHMyLnNvcnQoKQotICAgICNiYi53YXJuKHN0cihjb25maWd1cmVkZXBzKSkKLSAgICAjYmIud2FybihzdHIoY29uZmlndXJlZGVwczIpKQotCiAgICAgY3AgPSBbXQogICAgIGlmIG5vZGVwczoKICAgICAgICAgYmIud2FybigiYXV0b3Rvb2xzOiBVbmFibGUgdG8gZmluZCB0YXNrIGRlcGVuZGVuY2llcywgLWIgYmVpbmcgdXNlZD8gUHVsbGluZyBpbiBhbGwgbTQgZmlsZXMiKQpAQCAtMjIyLDExICsyNTMsMTQgQEAKICAgICAgICAgdCA9IG9zLnBhdGguam9pbihhY2xvY2FsZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGMpKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModCk6CiAgICAgICAgICAgICBvcy5zeW1saW5rKGMsIHQpCi0gICAgICAgICAgICAKLSAgICBkLnNldFZhcigiQ09ORklHX1NJVEUiLCBzaXRlaW5mb19nZXRfZmlsZXMoZCwgRmFsc2UpKQorCisgICAgIyBSZWZyZXNoIHZhcmlhYmxlIHdpdGggY2FjaGUgZmlsZXMKKyAgICBkLnNldFZhcigiQ09ORklHX1NJVEUiLCBzaXRlaW5mb19nZXRfZmlsZXMoZCwgYWNsb2NhbGNhY2hlPVRydWUpKQogfQogYXV0b3Rvb2xzX2NvcHlfYWNsb2NhbHNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJNQUNISU5FIFNES19BUkNIIEJVSUxEX0FSQ0ggU0RLX09TIEJCX1RBU0tERVBEQVRBIgogCitDT05GSUdVUkVfRklMRVMgPSAiJHtTfS9jb25maWd1cmUuaW4gJHtTfS9jb25maWd1cmUuYWMgJHtTfS9jb25maWcuaC5pbiAke1N9L2FjaW5jbHVkZS5tNCBNYWtlZmlsZS5hbSIKKwogYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZSgpIHsKIAkjIFdBUk5JTkc6IGdyb3NzIGhhY2sgZm9sbG93czoKIAkjIEFuIGF1dG90b29scyBidWlsdCBwYWNrYWdlIGdlbmVyYWxseSBuZWVkcyB0aGVzZSBzY3JpcHRzLCBob3dldmVyIG9ubHkKQEAgLTIzNiw2ICsyNzAsOSBAQAogCSMgZm9yIGEgcGFja2FnZSB3aG9zZSBhdXRvdG9vbHMgYXJlIG9sZCwgb24gYW4geDg2XzY0IG1hY2hpbmUsIHdoaWNoIHRoZSBvbGQKIAkjIGNvbmZpZy5zdWIgZG9lcyBub3Qgc3VwcG9ydC4gIFdvcmsgYXJvdW5kIHRoaXMgYnkgaW5zdGFsbGluZyB0aGVtIG1hbnVhbGx5CiAJIyByZWdhcmRsZXNzLgorCisJUFJVTkVfTTQ9IiIKKwogCWZvciBhYyBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1uYW1lIGNvbmZpZ3VyZS5pbiAtbyAtbmFtZSBjb25maWd1cmUuYWNgOyBkbwogCQlybSAtZiBgZGlybmFtZSAkYWNgL2NvbmZpZ3VyZQogCWRvbmUKQEAgLTI0Niw3ICsyODMsNyBAQAogCQlpZiBbIHgiJHthY3BhdGhzfSIgPSB4ZGVmYXVsdCBdOyB0aGVuCiAJCQlhY3BhdGhzPQogCQkJZm9yIGkgaW4gYGZpbmQgJHtBVVRPVE9PTFNfU0NSSVBUX1BBVEh9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1tYXhkZXB0aCAyIC1uYW1lIFwqLm00fGdyZXAgLXYgJ2FjbG9jYWwubTQnfCBcCi0JCQkJZ3JlcCAtdiAnYWNpbmNsdWRlLm00JyB8IGdyZXAgLXYgJ2FjbG9jYWwtY29weScgfCBzZWQgLWUgJ3MsXCguKi9cKS4qJCxcMSwnfHNvcnQgLXVgOyBkbworCQkJCWdyZXAgLXYgJ2FjaW5jbHVkZS5tNCcgfCBzZWQgLWUgJ3MsXCguKi9cKS4qJCxcMSwnfHNvcnQgLXVgOyBkbwogCQkJCWFjcGF0aHM9IiRhY3BhdGhzIC1JICRpIgogCQkJZG9uZQogCQllbHNlCkBAIC0yODUsMTcgKzMyMiwyMiBAQAogCQkJCQljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbiAke1N9L3BvLwogCQkJCWZpCiAJCQlmaQotCQkJZm9yIGkgaW4gZ2V0dGV4dC5tNCBpY29udi5tNCBsaWItbGQubTQgbGliLWxpbmsubTQgbGliLXByZWZpeC5tNCBubHMubTQgcG8ubTQgcHJvZ3Rlc3QubTQ7IGRvCi0JCQkJZm9yIGogaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSAkaSB8IGdyZXAgLXYgYWNsb2NhbC1jb3B5YDsgZG8KLQkJCQkJcm0gJGoKLQkJCQlkb25lCi0JCQlkb25lCisJCQlQUlVORV9NND0iJFBSVU5FX000IGdldHRleHQubTQgaWNvbnYubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbmxzLm00IHBvLm00IHByb2d0ZXN0Lm00IgogCQlmaQogCQlta2RpciAtcCBtNAogCQlpZiBncmVwICJeW1s6c3BhY2U6XV0qW0FJXVtDVF1fUFJPR19JTlRMVE9PTCIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQlpZiAhIGVjaG8gIiR7REVQRU5EU30iIHwgZ3JlcCAtcSBpbnRsdG9vbC1uYXRpdmU7IHRoZW4KKwkJCQliYndhcm4gIk1pc3NpbmcgREVQRU5EUyBvbiBpbnRsdG9vbC1uYXRpdmUiCisJCQlmaQorCQkJUFJVTkVfTTQ9IiRQUlVORV9NNCBpbnRsdG9vbC5tNCIKIAkJCWJibm90ZSBFeGVjdXRpbmcgaW50bHRvb2xpemUgLS1jb3B5IC0tZm9yY2UgLS1hdXRvbWFrZQogCQkJaW50bHRvb2xpemUgLS1jb3B5IC0tZm9yY2UgLS1hdXRvbWFrZQogCQlmaQorCisJCWZvciBpIGluICRQUlVORV9NNDsgZG8KKwkJCWZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSAkaSAtZGVsZXRlCisJCWRvbmUKKwogCQliYm5vdGUgRXhlY3V0aW5nIEFDTE9DQUw9XCIkQUNMT0NBTFwiIGF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMKIAkJQUNMT0NBTD0iJEFDTE9DQUwiIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgJHtFWFRSQV9BVVRPUkVDT05GfSAkYWNwYXRocyB8fCBkaWUgImF1dG9yZWNvbmYgZXhlY3V0aW9uIGZhaWxlZC4iCiAJCWNkICRvbGRkaXIKQEAgLTMwNyw2ICszNDksMTAgQEAKIAlmaQogfQogCithdXRvdG9vbHNfZG9fY29tcGlsZSgpIHsKKyAgICBvZV9ydW5tYWtlCit9CisKIGF1dG90b29sc19kb19pbnN0YWxsKCkgewogCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAogCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCkBAIC0zMTcsNiArMzYzLDYgQEAKIAogaW5oZXJpdCBzaXRlY29uZmlnCiAKLUVYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2luc3RhbGwKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbAogCiBCID0gIiR7V09SS0RJUn0vYnVpbGQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCmluZGV4IGE3Y2EzYTYuLjAyNGZlNDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCkBAIC0xMCw3ICsxMCw3IEBACiBpbmhlcml0IG1ldGFkYXRhX3NjbQogaW5oZXJpdCBsb2dnaW5nCiAKLU9FX0lNUE9SVFMgKz0gIm9zIHN5cyB0aW1lIG9lLnBhdGggb2UudXRpbHMgb2UuZGF0YSBvZS5wYWNrYWdlIG9lLnBhY2thZ2Vncm91cCBvZS5zc3RhdGVzaWcgb2UubHNiIG9lLmNhY2hlZHBhdGgiCitPRV9JTVBPUlRTICs9ICJvcyBzeXMgdGltZSBvZS5wYXRoIG9lLnV0aWxzIG9lLnR5cGVzIG9lLnBhY2thZ2Ugb2UucGFja2FnZWdyb3VwIG9lLnNzdGF0ZXNpZyBvZS5sc2Igb2UuY2FjaGVkcGF0aCIKIE9FX0lNUE9SVFNbdHlwZV0gPSAibGlzdCIKIAogZGVmIG9lX2ltcG9ydChkKToKQEAgLTEwNSwxMiArMTA1LDE1IEBACiAgICAgICAgICMgYW55IG90aGVycyBzaG91bGQgYmUgY292ZXJlZCBieSBTUkNfVVJJLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwYXRoID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybClbMl0KKyAgICAgICAgICAgIGlmIG5vdCBwYXRoOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoLk1hbGZvcm1lZFVybCh1cmwpCisKICAgICAgICAgICAgIGlmIHBhdGhbMF0gPT0gJy8nOgogICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCh0bXBkaXIpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChwYXRoICsgIjoiICsgc3RyKG9zLnBhdGguZXhpc3RzKHBhdGgpKSkKICAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKLSAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKyAiOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAiICsgdXJsKQorICAgICAgICAgICAgYmIuZmF0YWwoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKyAiOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAiICsgdXJsKQogICAgIHJldHVybiAiICIuam9pbihmaWxlbGlzdCkKIAogYWRkdGFzayBmZXRjaApAQCAtMTI4LDMwICsxMzEsMjggQEAKICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQogICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKICAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24gYXMgZToKLSAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZChlKQorICAgICAgICBiYi5mYXRhbChzdHIoZSkpCiB9CiAKIGFkZHRhc2sgdW5wYWNrIGFmdGVyIGRvX2ZldGNoCiBkb191bnBhY2tbZGlyc10gPSAiJHtXT1JLRElSfSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUycsIFRydWUpICE9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ2NsZWFuZGlycycsICcke1N9JykKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFjaycsICdjbGVhbmRpcnMnLCBvcy5wYXRoLmpvaW4oJyR7U30nLCAncGF0Y2hlcycpKQorfQogcHl0aG9uIGJhc2VfZG9fdW5wYWNrKCkgewogICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgogICAgICAgICByZXR1cm4KIAotICAgIHJvb3RkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCi0KLSAgICAjIEVuc3VyZSB0aGF0IHdlIGNsZWFudXAgJHtTfS9wYXRjaGVzCi0gICAgIyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB3ZSBjYW4gcmVtb3ZlCi0gICAgIyB0aGUgZW50aXJlICR7U30gaW4gdGhpcyBjYXNlLgotICAgIHNfZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQotICAgIHBfZGlyID0gb3MucGF0aC5qb2luKHNfZGlyLCAncGF0Y2hlcycpCi0gICAgYmIudXRpbHMucmVtb3ZlKHBfZGlyLCBUcnVlKQotCiAgICAgdHJ5OgogICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCi0gICAgICAgIGZldGNoZXIudW5wYWNrKHJvb3RkaXIpCisgICAgICAgIGZldGNoZXIudW5wYWNrKGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkpCiAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKKyAgICAgICAgYmIuZmF0YWwoc3RyKGUpKQogfQogCiBkZWYgcGtnYXJjaF9tYXBwaW5nKGQpOgpAQCAtMzA4LDcgKzMwOSw3IEBACiB9CiAKIGFkZHRhc2sgaW5zdGFsbCBhZnRlciBkb19jb21waWxlCi1kb19pbnN0YWxsW2RpcnNdID0gIiR7RH0gJHtCfSIKK2RvX2luc3RhbGxbZGlyc10gPSAiJHtCfSIKICMgUmVtb3ZlIGFuZCByZS1jcmVhdGUgJHtEfSBzbyB0aGF0IGlzIGl0IGd1YXJhbnRlZWQgdG8gYmUgZW1wdHkKIGRvX2luc3RhbGxbY2xlYW5kaXJzXSA9ICIke0R9IgogCkBAIC00MzAsMTIgKzQzMSw2IEBACiAgICAgICAgIGFwcGVuZFZhcignUkRFUEVORFNfJHtQTn0nLCBleHRyYXJkZXBzKQogICAgICAgICBhcHBlbmRWYXIoJ1BBQ0tBR0VDT05GSUdfQ09ORkFSR1MnLCBleHRyYWNvbmYpCiAKLSAgICAgICAgIyBUT0RPOiBvbmNlIGFsbCByZWNpcGVzL2NsYXNzZXMgYWJ1c2luZyBFWFRSQV9PRUNPTkYKLSAgICAgICAgIyB0byBnZXQgUEFDS0FHRUNPTkZJRyBvcHRpb25zIGFyZSBmaXhlZCB0byB1c2UgUEFDS0FHRUNPTkZJR19DT05GQVJHUwotICAgICAgICAjIG1vdmUgdGhpcyBhcHBlbmRWYXIgdG8gYXV0b3Rvb2xzLmJiY2xhc3MuCi0gICAgICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjbWFrZScsIGQpOgotICAgICAgICAgICAgYXBwZW5kVmFyKCdFWFRSQV9PRUNPTkYnLCBleHRyYWNvbmYpCi0KICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCiAgICAgbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKICAgICBpZiBsaWNlbnNlID09ICJJTlZBTElEIjoKQEAgLTQ3Nyw3ICs0NzIsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIG1hY2hpbmUgJXMgKG5vdCBpbiBDT01QQVRJQkxFX01BQ0hJTkUpIiAlIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpCiAKLSAgICBzb3VyY2VfbWlycm9yX2ZldGNoID0gZC5nZXRWYXIoJ1NPVVJDRV9NSVJST1JfRkVUQ0gnLCAwKQorICAgIHNvdXJjZV9taXJyb3JfZmV0Y2ggPSBkLmdldFZhcignU09VUkNFX01JUlJPUl9GRVRDSCcsIEZhbHNlKQogICAgIGlmIG5vdCBzb3VyY2VfbWlycm9yX2ZldGNoOgogICAgICAgICBuZWVkX2hvc3QgPSBkLmdldFZhcignQ09NUEFUSUJMRV9IT1NUJywgVHJ1ZSkKICAgICAgICAgaWYgbmVlZF9ob3N0OgpAQCAtNDkwLDcgKzQ4NSw3IEBACiAKICAgICAgICAgY2hlY2tfbGljZW5zZSA9IEZhbHNlIGlmIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSBlbHNlIFRydWUKICAgICAgICAgZm9yIHQgaW4gWyItbmF0aXZlIiwgIi1jcm9zcy0ke1RBUkdFVF9BUkNIfSIsICItY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIsCi0gICAgICAgICAgICAgICItY3Jvc3NzZGstJHtTREtfQVJDSH0iLCAiLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfQVJDSH0iLAorICAgICAgICAgICAgICAiLWNyb3Nzc2RrLSR7U0RLX1NZU30iLCAiLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfU1lTfSIsCiAgICAgICAgICAgICAgICItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSJdOgogICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoZC5leHBhbmQodCkpOgogICAgICAgICAgICAgICAgIGNoZWNrX2xpY2Vuc2UgPSBGYWxzZQpAQCAtNTQyLDYgKzUzNywxOSBAQAogICAgICAgICAgICAgICAgIGlmIHBuIGluIGluY29tcGF0d2w6CiAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklOQ0xVRElORyAiICsgcG4gKyAiIGFzIGJ1aWxkYWJsZSBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIGJlY2F1c2UgaXQgaGFzIGJlZW4gd2hpdGVsaXN0ZWQiKQogCisgICAgICAgICMgVHJ5IHRvIHZlcmlmeSBwZXItcGFja2FnZSAoTElDRU5TRV88cGtnPikgdmFsdWVzLiBMSUNFTlNFIHNob3VsZCBiZSBhCisgICAgICAgICMgc3VwZXJzZXQgb2YgYWxsIHBlci1wYWNrYWdlIGxpY2Vuc2VzLiBXZSBkbyBub3QgZG8gYWR2YW5jZWQgKHBhdHRlcm4pCisgICAgICAgICMgbWF0Y2hpbmcgb2YgbGljZW5zZSBleHByZXNzaW9ucyAtIGp1c3QgY2hlY2sgdGhhdCBhbGwgbGljZW5zZSBzdHJpbmdzCisgICAgICAgICMgaW4gTElDRU5TRV88cGtnPiBhcmUgZm91bmQgaW4gTElDRU5TRS4KKyAgICAgICAgbGljZW5zZV9zZXQgPSBvZS5saWNlbnNlLmxpc3RfbGljZW5zZXMobGljZW5zZSkKKyAgICAgICAgZm9yIHBrZyBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgcGtnX2xpY2Vuc2UgPSBkLmdldFZhcignTElDRU5TRV8nICsgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgcGtnX2xpY2Vuc2U6CisgICAgICAgICAgICAgICAgdW5saXN0ZWQgPSBvZS5saWNlbnNlLmxpc3RfbGljZW5zZXMocGtnX2xpY2Vuc2UpIC0gbGljZW5zZV9zZXQKKyAgICAgICAgICAgICAgICBpZiB1bmxpc3RlZDoKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiTElDRU5TRV8lcyBpbmNsdWRlcyBsaWNlbnNlcyAoJXMpIHRoYXQgYXJlIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3RlZCBpbiBMSUNFTlNFIiAlIChwa2csICcgJy5qb2luKHVubGlzdGVkKSkpCisKICAgICBuZWVkc3JjcmV2ID0gRmFsc2UKICAgICBzcmN1cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpCiAgICAgZm9yIHVyaSBpbiBzcmN1cmkuc3BsaXQoKToKQEAgLTU2Niw2ICs1NzQsMTAgQEAKICAgICAgICAgICAgIG5lZWRzcmNyZXYgPSBUcnVlCiAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2ZldGNoJywgJ2RlcGVuZHMnLCAnIG1lcmN1cmlhbC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCiAKKyAgICAgICAgIyBQZXJmb3JjZSBwYWNrYWdlcyBzdXBwb3J0IFNSQ1JFViA9ICIke0FVVE9SRVZ9IgorICAgICAgICBlbGlmIHNjaGVtZSA9PSAicDQiOgorICAgICAgICAgICAgbmVlZHNyY3JldiA9IFRydWUKKwogICAgICAgICAjIE9TQyBwYWNrYWdlcyBzaG91bGQgREVQRU5EIG9uIG9zYy1uYXRpdmUKICAgICAgICAgZWxpZiBzY2hlbWUgPT0gIm9zYyI6CiAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2ZldGNoJywgJ2RlcGVuZHMnLCAnIG9zYy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCkBAIC02NTgsOCArNjcwLDggQEAKICAgICB0cnk6CiAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKICAgICAgICAgZmV0Y2hlci5jbGVhbigpCi0gICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgotICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGJiLmZhdGFsKHN0cihlKSkKIH0KIGRvX2NsZWFuYWxsW25vc3RhbXBdID0gIjEiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzaC1jb21wbGV0aW9uLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2gtY29tcGxldGlvbi5iYmNsYXNzCmluZGV4IDc0YTg3OGUuLjgwZWU5YjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzaC1jb21wbGV0aW9uLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9iYXNoLWNvbXBsZXRpb24uYmJjbGFzcwpAQCAtMSwzICsxLDUgQEAKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgYmFzaC1jb21wbGV0aW9uIgorCiBQQUNLQUdFUyArPSAiJHtQTn0tYmFzaC1jb21wbGV0aW9uIgogCiBGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24gJHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCmluZGV4IDU4MWQ1MzIuLjNhNWJjMmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9idWlsZGhpc3RvcnkuYmJjbGFzcwpAQCAtNTcsNiArNTcsOSBAQAogIyBjbGFzcy4KIEJVSUxESElTVE9SWV9QUkVTRVJWRSA9ICJsYXRlc3QgbGF0ZXN0X3NyY3JldiIKIAorUEFUQ0hfR0lUX1VTRVJfRU1BSUwgPz0gImJ1aWxkaGlzdG9yeUBvZSIKK1BBVENIX0dJVF9VU0VSX05BTUUgPz0gIk9wZW5FbWJlZGRlZCIKKwogIwogIyBXcml0ZSBvdXQgbWV0YWRhdGEgYWJvdXQgdGhpcyBwYWNrYWdlIGZvciBjb21wYXJpc29uIHdoZW4gd3JpdGluZyBmdXR1cmUgcGFja2FnZXMKICMKQEAgLTE0NSw3ICsxNDgsNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUkNPTkZMSUNUUyI6CiAgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucmNvbmZsaWN0cyA9IHZhbHVlCiAgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dTSVpFIjoKLSAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5zaXplID0gbG9uZyh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5zaXplID0gaW50KHZhbHVlKQogICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiRklMRVMiOgogICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLmZpbGVzID0gdmFsdWUKICAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIkZJTEVMSVNUIjoKQEAgLTIzMyw3ICsyMzYsNyBAQAogICAgICAgICAgICAgICAgIGtleSA9IGl0ZW1bMF0KICAgICAgICAgICAgICAgICBpZiBrZXkuZW5kc3dpdGgoJ18nICsgcGtnKToKICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5WzotbGVuKHBrZyktMV0KLSAgICAgICAgICAgICAgICBwa2dkYXRhW2tleV0gPSBpdGVtWzFdLmRlY29kZSgndXRmLTgnKS5kZWNvZGUoJ3N0cmluZ19lc2NhcGUnKQorICAgICAgICAgICAgICAgIHBrZ2RhdGFba2V5XSA9IGl0ZW1bMV0KIAogICAgICAgICBwa2dlID0gcGtnZGF0YS5nZXQoJ1BLR0UnLCAnMCcpCiAgICAgICAgIHBrZ3YgPSBwa2dkYXRhWydQS0dWJ10KQEAgLTI3NCw3ICsyNzcsNyBAQAogICAgICAgICAjIEdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdlZCBmaWxlcwogICAgICAgICB2YWwgPSBwa2dkYXRhLmdldCgnRklMRVNfSU5GTycsICcnKQogICAgICAgICBkaWN0dmFsID0ganNvbi5sb2Fkcyh2YWwpCi0gICAgICAgIGZpbGVsaXN0ID0gZGljdHZhbC5rZXlzKCkKKyAgICAgICAgZmlsZWxpc3QgPSBsaXN0KGRpY3R2YWwua2V5cygpKQogICAgICAgICBmaWxlbGlzdC5zb3J0KCkKICAgICAgICAgcGtnaW5mby5maWxlbGlzdCA9ICIgIi5qb2luKGZpbGVsaXN0KQogCkBAIC0yODgsMTQgKzI5MSwxMiBAQAogCiAKIGRlZiB3cml0ZV9yZWNpcGVoaXN0b3J5KHJjcGluZm8sIGQpOgotICAgIGltcG9ydCBjb2RlY3MKLQogICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHJlY2lwZSBoaXN0b3J5IikKIAogICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKIAogICAgIGluZm9maWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICJsYXRlc3QiKQotICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb2ZpbGUsICJ3IiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgIHdpdGggb3BlbihpbmZvZmlsZSwgInciKSBhcyBmOgogICAgICAgICBpZiByY3BpbmZvLnBlICE9ICIwIjoKICAgICAgICAgICAgIGYud3JpdGUodSJQRSA9ICVzXG4iICUgIHJjcGluZm8ucGUpCiAgICAgICAgIGYud3JpdGUodSJQViA9ICVzXG4iICUgIHJjcGluZm8ucHYpCkBAIC0zMDUsOCArMzA2LDYgQEAKIAogCiBkZWYgd3JpdGVfcGtnaGlzdG9yeShwa2dpbmZvLCBkKToKLSAgICBpbXBvcnQgY29kZWNzCi0KICAgICBiYi5kZWJ1ZygyLCAiV3JpdGluZyBwYWNrYWdlIGhpc3RvcnkgZm9yIHBhY2thZ2UgJXMiICUgcGtnaW5mby5uYW1lKQogCiAgICAgcGtnaGlzdGRpciA9IGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRElSX1BBQ0tBR0UnLCBUcnVlKQpAQCAtMzE2LDIyICszMTUsMjAgQEAKICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ3BhdGgpCiAKICAgICBpbmZvZmlsZSA9IG9zLnBhdGguam9pbihwa2dwYXRoLCAibGF0ZXN0IikKLSAgICB3aXRoIGNvZGVjcy5vcGVuKGluZm9maWxlLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICB3aXRoIG9wZW4oaW5mb2ZpbGUsICJ3IikgYXMgZjoKICAgICAgICAgaWYgcGtnaW5mby5wZSAhPSAiMCI6CiAgICAgICAgICAgICBmLndyaXRlKHUiUEUgPSAlc1xuIiAlICBwa2dpbmZvLnBlKQogICAgICAgICBmLndyaXRlKHUiUFYgPSAlc1xuIiAlICBwa2dpbmZvLnB2KQogICAgICAgICBmLndyaXRlKHUiUFIgPSAlc1xuIiAlICBwa2dpbmZvLnByKQogCi0gICAgICAgIHBrZ3ZhcnMgPSB7fQotICAgICAgICBwa2d2YXJzWydQS0cnXSA9IHBrZ2luZm8ucGtnIGlmIHBrZ2luZm8ucGtnICE9IHBrZ2luZm8ubmFtZSBlbHNlICcnCi0gICAgICAgIHBrZ3ZhcnNbJ1BLR0UnXSA9IHBrZ2luZm8ucGtnZSBpZiBwa2dpbmZvLnBrZ2UgIT0gcGtnaW5mby5wZSBlbHNlICcnCi0gICAgICAgIHBrZ3ZhcnNbJ1BLR1YnXSA9IHBrZ2luZm8ucGtndiBpZiBwa2dpbmZvLnBrZ3YgIT0gcGtnaW5mby5wdiBlbHNlICcnCi0gICAgICAgIHBrZ3ZhcnNbJ1BLR1InXSA9IHBrZ2luZm8ucGtnciBpZiBwa2dpbmZvLnBrZ3IgIT0gcGtnaW5mby5wciBlbHNlICcnCi0gICAgICAgIGZvciBwa2d2YXIgaW4gcGtndmFyczoKLSAgICAgICAgICAgIHZhbCA9IHBrZ3ZhcnNbcGtndmFyXQotICAgICAgICAgICAgaWYgdmFsOgotICAgICAgICAgICAgICAgIGYud3JpdGUodSIlcyA9ICVzXG4iICUgKHBrZ3ZhciwgdmFsKSkKLQorICAgICAgICBpZiBwa2dpbmZvLnBrZyAhPSBwa2dpbmZvLm5hbWU6CisgICAgICAgICAgICBmLndyaXRlKHUiUEtHID0gJXNcbiIgJSBwa2dpbmZvLnBrZykKKyAgICAgICAgaWYgcGtnaW5mby5wa2dlICE9IHBrZ2luZm8ucGU6CisgICAgICAgICAgICBmLndyaXRlKHUiUEtHRSA9ICVzXG4iICUgcGtnaW5mby5wa2dlKQorICAgICAgICBpZiBwa2dpbmZvLnBrZ3YgIT0gcGtnaW5mby5wdjoKKyAgICAgICAgICAgIGYud3JpdGUodSJQS0dWID0gJXNcbiIgJSBwa2dpbmZvLnBrZ3YpCisgICAgICAgIGlmIHBrZ2luZm8ucGtnciAhPSBwa2dpbmZvLnByOgorICAgICAgICAgICAgZi53cml0ZSh1IlBLR1IgPSAlc1xuIiAlIHBrZ2luZm8ucGtncikKICAgICAgICAgZi53cml0ZSh1IlJQUk9WSURFUyA9ICVzXG4iICUgIHBrZ2luZm8ucnByb3ZpZGVzKQogICAgICAgICBmLndyaXRlKHUiUkRFUEVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJkZXBlbmRzKQogICAgICAgICBmLndyaXRlKHUiUlJFQ09NTUVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJyZWNvbW1lbmRzKQpAQCAtMzQ5LDcgKzM0Niw3IEBACiAgICAgICAgIGZpbGV2YXJwYXRoID0gb3MucGF0aC5qb2luKHBrZ3BhdGgsICJsYXRlc3QuJXMiICUgZmlsZXZhcikKICAgICAgICAgdmFsID0gcGtnaW5mby5maWxldmFyc1tmaWxldmFyXQogICAgICAgICBpZiB2YWw6Ci0gICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGV2YXJwYXRoLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxldmFycGF0aCwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUodmFsKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXZhcnBhdGgpOgpAQCAtNTY1LDExICs1NjIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgdGFza3NpemVzW3Rhc2tdID0gb3JpZ3RvdGFsICsgZnNpemUKICAgICAgICAgICAgICAgICAgICAgZmlsZXNpemVzW2ZuXSA9IGZzaXplCiAgICAgICAgIHdpdGggb3BlbihkLmV4cGFuZCgnJHtCVUlMREhJU1RPUllfRElSX1NES30vc3N0YXRlLXBhY2thZ2Utc2l6ZXMudHh0JyksICd3JykgYXMgZjoKLSAgICAgICAgICAgIGZpbGVzaXplc19zb3J0ZWQgPSBzb3J0ZWQoZmlsZXNpemVzLml0ZW1zKCksIGtleT1vcGVyYXRvci5pdGVtZ2V0dGVyKDEpLCByZXZlcnNlPVRydWUpCisgICAgICAgICAgICBmaWxlc2l6ZXNfc29ydGVkID0gc29ydGVkKGZpbGVzaXplcy5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxLCAwKSwgcmV2ZXJzZT1UcnVlKQogICAgICAgICAgICAgZm9yIGZuLCBzaXplIGluIGZpbGVzaXplc19zb3J0ZWQ6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgnJTEwZCBLaUIgJXNcbicgJSAoc2l6ZSwgZm4pKQogICAgICAgICB3aXRoIG9wZW4oZC5leHBhbmQoJyR7QlVJTERISVNUT1JZX0RJUl9TREt9L3NzdGF0ZS10YXNrLXNpemVzLnR4dCcpLCAndycpIGFzIGY6Ci0gICAgICAgICAgICB0YXNrc2l6ZXNfc29ydGVkID0gc29ydGVkKHRhc2tzaXplcy5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxKSwgcmV2ZXJzZT1UcnVlKQorICAgICAgICAgICAgdGFza3NpemVzX3NvcnRlZCA9IHNvcnRlZCh0YXNrc2l6ZXMuaXRlbXMoKSwga2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMSwgMCksIHJldmVyc2U9VHJ1ZSkKICAgICAgICAgICAgIGZvciB0YXNrLCBzaXplIGluIHRhc2tzaXplc19zb3J0ZWQ6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgnJTEwZCBLaUIgJXNcbicgJSAoc2l6ZSwgdGFzaykpCiB9CkBAIC02NDUsNyArNjQyLDcgQEAKICAgICBzZGt2YXJzID0gIkRJU1RSTyBESVNUUk9fVkVSU0lPTiBTREtfTkFNRSBTREtfVkVSU0lPTiBTREtNQUNISU5FIFNES0lNQUdFX0ZFQVRVUkVTIEJBRF9SRUNPTU1FTkRBVElPTlMgTk9fUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSIKICAgICBpZiBkLmdldFZhcignQkJfQ1VSUkVOVFRBU0snLCBUcnVlKSA9PSAncG9wdWxhdGVfc2RrX2V4dCc6CiAgICAgICAgICMgRXh0ZW5zaWJsZSBTREsgdXNlcyBzb21lIGFkZGl0aW9uYWwgdmFyaWFibGVzCi0gICAgICAgIHNka3ZhcnMgKz0gIiBTREtfTE9DQUxfQ09ORl9XSElURUxJU1QgU0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUIFNES19JTkhFUklUX0JMQUNLTElTVCBTREtfVVBEQVRFX1VSTCBTREtfRVhUX1RZUEUgU0RLX1JFQ1JERVBfVEFTS1MiCisgICAgICAgIHNka3ZhcnMgKz0gIiBTREtfTE9DQUxfQ09ORl9XSElURUxJU1QgU0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUIFNES19JTkhFUklUX0JMQUNLTElTVCBTREtfVVBEQVRFX1VSTCBTREtfRVhUX1RZUEUgU0RLX1JFQ1JERVBfVEFTS1MgU0RLX0lOQ0xVREVfUEtHREFUQSBTREtfSU5DTFVERV9UT09MQ0hBSU4iCiAgICAgbGlzdHZhcnMgPSAiU0RLSU1BR0VfRkVBVFVSRVMgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUgU0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUIFNES19MT0NBTF9DT05GX0JMQUNLTElTVCBTREtfSU5IRVJJVF9CTEFDS0xJU1QiCiAgICAgcmV0dXJuIG91dHB1dHZhcnMoc2RrdmFycywgbGlzdHZhcnMsIGQpCiAKQEAgLTcxNCwxNSArNzExLDkgQEAKIAkJCWdpdCB0YWcgLWYgYnVpbGQtbWludXMtMiBidWlsZC1taW51cy0xID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQogCQkJZ2l0IHRhZyAtZiBidWlsZC1taW51cy0xID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQogCQlmaQotCQkjIElmIHRoZSB1c2VyIGhhc24ndCBzZXQgdXAgdGhlaXIgbmFtZS9lbWFpbCwgc2V0IHNvbWUgZGVmYXVsdHMKLQkJIyBqdXN0IGZvciB0aGlzIHJlcG8gKG90aGVyd2lzZSB0aGUgY29tbWl0IHdpbGwgZmFpbCB3aXRoIG9sZGVyCi0JCSMgdmVyc2lvbnMgb2YgZ2l0KQotCQlpZiAhIGdpdCBjb25maWcgdXNlci5lbWFpbCA+IC9kZXYvbnVsbCA7IHRoZW4KLQkJCWdpdCBjb25maWcgLS1sb2NhbCB1c2VyLmVtYWlsICJidWlsZGhpc3RvcnlAJHtESVNUUk99IgotCQlmaQotCQlpZiAhIGdpdCBjb25maWcgdXNlci5uYW1lID4gL2Rldi9udWxsIDsgdGhlbgotCQkJZ2l0IGNvbmZpZyAtLWxvY2FsIHVzZXIubmFtZSAiYnVpbGRoaXN0b3J5IgotCQlmaQorCisJCWNoZWNrX2dpdF9jb25maWcKKwogCQkjIENoZWNrIGlmIHRoZXJlIGFyZSBuZXcvY2hhbmdlZCBmaWxlcyB0byBjb21taXQgKG90aGVyIHRoYW4gbWV0YWRhdGEtcmV2cykKIAkJcmVwb3N0YXR1cz1gZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB8IGdyZXAgLXYgIiBtZXRhZGF0YS1yZXZzJCJgCiAJCUhPU1ROQU1FPWBob3N0bmFtZSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCkBAIC04NDIsNyArODMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgU1JDUkVWXyVzID0gIiVzIlxuJyAlIChuYW1lLCBvcmlnX3NyY3JldikpCiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1JFVl8lcyA9ICIlcyJcbicgJSAobmFtZSwgc3JjcmV2KSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgnU1JDUkVWID0gIiVzIlxuJyAlIHNyY3JldnMuaXRlcnZhbHVlcygpLm5leHQoKSkKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNSRVYgPSAiJXMiXG4nICUgc3JjcmV2cy52YWx1ZXMoKSkKICAgICAgICAgICAgIGlmIGxlbih0YWdfc3JjcmV2cykgPiAwOgogICAgICAgICAgICAgICAgIGZvciBuYW1lLCBzcmNyZXYgaW4gdGFnX3NyY3JldnMuaXRlbXMoKToKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnIyB0YWdfJXMgPSAiJXMiXG4nICUgKG5hbWUsIHNyY3JldikpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLXN1bW1hcnkuYmJjbGFzcwppbmRleCBkNzMzNTBiLi5iODZhYmNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3MKQEAgLTMwLDcgKzMwLDExIEBACiAgICAgICAgICAgICAgICAgaGVhZGVyX3ByaW50ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgYmIubm90ZSgiQnVpbGQgY29tcGxldGlvbiBzdW1tYXJ5OiIpCiAKLSAgICAgICAgICAgIGJiLm5vdGUoIiAgezB9OiB7MX0lIHNzdGF0ZSByZXVzZSAoezJ9IHNldHNjZW5lLCB7M30gc2NyYXRjaCkiLmZvcm1hdCh0LCAxMDAqbGVuKHNzdGF0ZSkvKGxlbihzc3RhdGUpK2xlbihub19zc3RhdGUpKSwgbGVuKHNzdGF0ZSksIGxlbihub19zc3RhdGUpKSkKKyAgICAgICAgICAgIHNzdGF0ZV9jb3VudCA9IGxlbihzc3RhdGUpCisgICAgICAgICAgICBub19zc3RhdGVfY291bnQgPSBsZW4obm9fc3N0YXRlKQorICAgICAgICAgICAgdG90YWxfY291bnQgPSBzc3RhdGVfY291bnQgKyBub19zc3RhdGVfY291bnQKKyAgICAgICAgICAgIGJiLm5vdGUoIiAgezB9OiB7MTouMWZ9JSBzc3RhdGUgcmV1c2UoezJ9IHNldHNjZW5lLCB7M30gc2NyYXRjaCkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICB0LCByb3VuZCgxMDAgKiBzc3RhdGVfY291bnQgLyB0b3RhbF9jb3VudCwgMSksIHNzdGF0ZV9jb3VudCwgbm9fc3N0YXRlX2NvdW50KSkKIH0KIGFkZGhhbmRsZXIgYnVpbGRzdGF0c19zdW1tYXJ5CiBidWlsZHN0YXRzX3N1bW1hcnlbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MKaW5kZXggMzRlY2IwMy4uNTk5YTIxOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MKQEAgLTE2Myw4ICsxNjMsMTMgQEAKICAgICAgICAgICAgIGJzID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJzLCAiYSIpIGFzIGY6CiAgICAgICAgICAgICAgICAgcm9vdGZzID0gZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpCi0gICAgICAgICAgICAgICAgcm9vdGZzX3NpemUgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZHUiLCAiLXNoIiwgcm9vdGZzXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIlVuY29tcHJlc3NlZCBSb290ZnMgc2l6ZTogJXMiICUgcm9vdGZzX3NpemUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihyb290ZnMpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfc2l6ZSA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZHUiLCAiLXNoIiwgcm9vdGZzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIlVuY29tcHJlc3NlZCBSb290ZnMgc2l6ZTogJXMiICUgcm9vdGZzX3NpemUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gZ2V0IHJvb3RmcyBzaXplOiAlcyIgJSBlcnIub3V0cHV0LmRlY29kZSgndXRmLTgnKSkKIAogICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrRmFpbGVkKToKICAgICAgICAgIyBDYW4gaGF2ZSBhIGZhaWx1cmUgYmVmb3JlIFRhc2tTdGFydGVkIHNvIG5lZWQgdG8gbWtkaXIgaGVyZSB0b28KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NjYWNoZS5iYmNsYXNzCmluZGV4IDJjZGNlNDYuLjJlOTgzN2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jY2FjaGUuYmJjbGFzcwpAQCAtNCw1ICs0LDMgQEAKIAogZG9fY29uZmlndXJlW2RpcnNdID0rICIke0NDQUNIRV9ESVJ9IgogZG9fa2VybmVsX2NvbmZpZ21lW2RpcnNdID0rICIke0NDQUNIRV9ESVJ9IgotCi1kb19jbGVhbltjbGVhbmRpcnNdICs9ICIke0NDQUNIRV9ESVJ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jaHJwYXRoLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcwppbmRleCA5YzY4ODU1Li4zYjVjZDM3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcwpAQCAtNSwxNSArNSwxNyBAQAogICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgogCiAgICAgcCA9IHN1Yi5Qb3BlbihbY21kLCAnLWwnLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKLSAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQotICAgICMgSWYgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNzZnVsbHksIHByb2Nlc3Mgc3Rkb3V0IGZvciByZXN1bHRzCiAgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CiAgICAgICAgIHJldHVybgogCisgICAgb3V0ID0gb3V0LmRlY29kZSgndXRmLTgnKQorCiAgICAgIyBIYW5kbGUgUlVOUEFUSCBhcyB3ZWxsIGFzIFJQQVRICi0gICAgZXJyID0gZXJyLnJlcGxhY2UoIlJVTlBBVEg9IiwiUlBBVEg9IikKKyAgICBvdXQgPSBvdXQucmVwbGFjZSgiUlVOUEFUSD0iLCJSUEFUSD0iKQogICAgICMgVGhyb3cgYXdheSBldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIHJwYXRoIGxpc3QKLSAgICBjdXJyX3JwYXRoID0gZXJyLnBhcnRpdGlvbigiUlBBVEg9IilbMl0KKyAgICBjdXJyX3JwYXRoID0gb3V0LnBhcnRpdGlvbigiUlBBVEg9IilbMl0KICAgICAjYmIubm90ZSgiQ3VycmVudCBycGF0aCBmb3IgJXMgaXMgJXMiICUgKGZwYXRoLCBjdXJyX3JwYXRoLnN0cmlwKCkpKQogICAgIHJwYXRocyA9IGN1cnJfcnBhdGguc3BsaXQoIjoiKQogICAgIG5ld19ycGF0aHMgPSBbXQpAQCAtMzcsMTggKzM5LDE3IEBACiAgICAgICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1yJywgYXJncywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCiAgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCiAgICAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgotICAgICAgICAgICAgYmIuZXJyb3IoIiVzOiBjaHJwYXRoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkOlxuJXMlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHAucmV0dXJuY29kZSwgb3V0LCBlcnIpKQotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZAorICAgICAgICAgICAgYmIuZmF0YWwoIiVzOiBjaHJwYXRoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkOlxuJXMlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHAucmV0dXJuY29kZSwgb3V0LCBlcnIpKQogCiBkZWYgcHJvY2Vzc19maWxlX2RhcndpbihjbWQsIGZwYXRoLCByb290ZGlyLCBiYXNlcHJlZml4LCB0bXBkaXIsIGQpOgogICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgogCiAgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1MJywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCi0gICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKLSAgICAjIElmIHJldHVybmVkIHN1Y2Nlc3NmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICMgSWYgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LCBwcm9jZXNzIHN0ZG91dCBmb3IgcmVzdWx0cwogICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgogICAgICAgICByZXR1cm4KLSAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgZm9yIGwgaW4gb3V0LnNwbGl0KCJcbiIpOgogICAgICAgICBpZiAiKGNvbXBhdGliaWxpdHkiIG5vdCBpbiBsOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgcnBhdGggPSBsLnBhcnRpdGlvbigiKGNvbXBhdGliaWxpdHkiKVswXS5zdHJpcCgpCkBAIC01Nyw3ICs1OCw3IEBACiAKICAgICAgICAgbmV3cGF0aCA9ICJAbG9hZGVyX3BhdGgvIiArIG9zLnBhdGgucmVscGF0aChycGF0aCwgb3MucGF0aC5kaXJuYW1lKGZwYXRoLnJlcGxhY2Uocm9vdGRpciwgIi8iKSkpCiAgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfWluc3RhbGxfbmFtZV90b29sIiksICctY2hhbmdlJywgcnBhdGgsIG5ld3BhdGgsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQotICAgICAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogCiBkZWYgcHJvY2Vzc19kaXIgKHJvb3RkaXIsIGRpcmVjdG9yeSwgZCk6CiAgICAgaW1wb3J0IHN0YXQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcwppbmRleCAwMmYzMTNhLi4zZTc2MmRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWFrZS5iYmNsYXNzCkBAIC04NCw2ICs4NCw4IEBACiAKIGFkZHRhc2sgZ2VuZXJhdGVfdG9vbGNoYWluX2ZpbGUgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQogCitDT05GSUdVUkVfRklMRVMgPSAiQ01ha2VMaXN0cy50eHQiCisKIGNtYWtlX2RvX2NvbmZpZ3VyZSgpIHsKIAlpZiBbICIke09FQ01BS0VfQlVJTERQQVRIfSIgXTsgdGhlbgogCQliYm5vdGUgImNtYWtlLmJiY2xhc3Mgbm8gbG9uZ2VyIHVzZXMgT0VDTUFLRV9CVUlMRFBBVEguICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm93IG91dC1vZi10cmVlIGJ1aWxkcyB3aXRoIEI9V09SS0RJUi9idWlsZC4iCkBAIC0xMDgsMjUgKzExMCwyNyBAQAogCSAgJHtPRUNNQUtFX1NJVEVGSUxFfSBcCiAJICAke09FQ01BS0VfU09VUkNFUEFUSH0gXAogCSAgLURDTUFLRV9JTlNUQUxMX1BSRUZJWDpQQVRIPSR7cHJlZml4fSBcCi0JICAtRENNQUtFX0lOU1RBTExfQklORElSOlBBVEg9JHtiaW5kaXJ9IFwKLQkgIC1EQ01BS0VfSU5TVEFMTF9TQklORElSOlBBVEg9JHtzYmluZGlyfSBcCi0JICAtRENNQUtFX0lOU1RBTExfTElCRVhFQ0RJUjpQQVRIPSR7bGliZXhlY2Rpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0JJTkRJUjpQQVRIPSR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignYmluZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdwcmVmaXgnLCBUcnVlKSl9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9TQklORElSOlBBVEg9JHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzYmluZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdwcmVmaXgnLCBUcnVlKSl9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJFWEVDRElSOlBBVEg9JHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJleGVjZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdwcmVmaXgnLCBUcnVlKSl9IFwKIAkgIC1EQ01BS0VfSU5TVEFMTF9TWVNDT05GRElSOlBBVEg9JHtzeXNjb25mZGlyfSBcCi0JICAtRENNQUtFX0lOU1RBTExfU0hBUkVEU1RBVEVESVI6UEFUSD0ke3NoYXJlZHN0YXRlZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU0hBUkVEU1RBVEVESVI6UEFUSD0ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3NoYXJlZHN0YXRlZGlyJywgVHJ1ZSksIGQuICBnZXRWYXIoJ3ByZWZpeCcsIFRydWUpKX0gXAogCSAgLURDTUFLRV9JTlNUQUxMX0xPQ0FMU1RBVEVESVI6UEFUSD0ke2xvY2Fsc3RhdGVkaXJ9IFwKLQkgIC1EQ01BS0VfSU5TVEFMTF9MSUJESVI6UEFUSD0ke2xpYmRpcn0gXAotCSAgLURDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVI6UEFUSD0ke2luY2x1ZGVkaXJ9IFwKLQkgIC1EQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUjpQQVRIPSR7ZGF0YWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xJQkRJUjpQQVRIPSR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdwcmVmaXgnLCBUcnVlKSl9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9JTkNMVURFRElSOlBBVEg9JHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdpbmNsdWRlZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdwcmVmaXgnLCBUcnVlKSl9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUjpQQVRIPSR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcigncHJlZml4JywgVHJ1ZSkpfSBcCiAJICAtRENNQUtFX0lOU1RBTExfU09fTk9fRVhFPTAgXAogCSAgLURDTUFLRV9UT09MQ0hBSU5fRklMRT0ke1dPUktESVJ9L3Rvb2xjaGFpbi5jbWFrZSBcCiAJICAtRENNQUtFX1ZFUkJPU0VfTUFLRUZJTEU9MSBcCisJICAtRENNQUtFX05PX1NZU1RFTV9GUk9NX0lNUE9SVEVEPTEgXAogCSAgJHtFWFRSQV9PRUNNQUtFfSBcCiAJICAtV25vLWRldgogfQogCitkb19jb21waWxlW3Byb2dyZXNzXSA9ICJwZXJjZW50IgogY21ha2VfZG9fY29tcGlsZSgpICB7CiAJY2QgJHtCfQotCWJhc2VfZG9fY29tcGlsZQorCWJhc2VfZG9fY29tcGlsZSBWRVJCT1NFPTEKIH0KIAogY21ha2VfZG9faW5zdGFsbCgpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKaW5kZXggYjVkYzAyOC4uNTgzNDgwNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKQEAgLTQyLDYgKzQyLDcgQEAKIH0KIGRvX21lbnVjb25maWdbZGVwZW5kc10gKz0gIm5jdXJzZXMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCiBkb19tZW51Y29uZmlnW25vc3RhbXBdID0gIjEiCitkb19tZW51Y29uZmlnW2RpcnNdID0gIiR7Qn0iCiBhZGR0YXNrIG1lbnVjb25maWcgYWZ0ZXIgZG9fY29uZmlndXJlCiAKIHB5dGhvbiBkb19kaWZmY29uZmlnKCkgewpAQCAtNzMsNCArNzQsNSBAQAogfQogCiBkb19kaWZmY29uZmlnW25vc3RhbXBdID0gIjEiCitkb19kaWZmY29uZmlnW2RpcnNdID0gIiR7Qn0iCiBhZGR0YXNrIGRpZmZjb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKaW5kZXggNzA1Y2FkOC4uODQzMTQ0MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKQEAgLTIsOSArMiw2IEBACiAjCiAjIENvcHlyaWdodCAoQykgMjAwNy0yMDExIExpbnV4IEZvdW5kYXRpb24KIAotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCi0KICMgSU1BR0VfRkVBVFVSRVMgY29udHJvbCBjb250ZW50IG9mIHRoZSBjb3JlIHJlZmVyZW5jZSBpbWFnZXMKICMgCiAjIEJ5IGRlZmF1bHQgd2UgaW5zdGFsbCBwYWNrYWdlZ3JvdXAtY29yZS1ib290IGFuZCBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCBwYWNrYWdlczsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcwppbmRleCBlMDdiMWJkLi4yMTkyMWIzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy1jYW5hZGlhbi5iYmNsYXNzCkBAIC0xNSw3ICsxNSw4IEBACiAjIFVwZGF0ZSBCQVNFX1BBQ0tBR0VfQVJDSCBhbmQgUEFDS0FHRV9BUkNIUwogIwogUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKLUNBTkFESUFORVhUUkFPUyA9ICJsaW51eC11Y2xpYmMgbGludXgtbXVzbCIKK0JBU0VDQU5BRElBTkVYVFJBT1MgPz0gImxpbnV4LXVjbGliYyBsaW51eC1tdXNsIgorQ0FOQURJQU5FWFRSQU9TID0gIiR7QkFTRUNBTkFESUFORVhUUkFPU30iCiBDQU5BRElBTkVYVFJBVkVORE9SID0gIiIKIE1PRElGWVRPUyA/Pz0gIjEiCiBweXRob24gKCkgewpAQCAtMzQsOCArMzUsMTMgQEAKIAogICAgIHRvcyA9IGQuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKQogICAgIHdoaXRlbGlzdCA9IFtdCisgICAgZXh0cmFsaWJjcyA9IFsiIl0KKyAgICBpZiAidWNsaWJjIiBpbiBkLmdldFZhcigiQkFTRUNBTkFESUFORVhUUkFPUyIsIFRydWUpOgorICAgICAgICBleHRyYWxpYmNzLmFwcGVuZCgidWNsaWJjIikKKyAgICBpZiAibXVzbCIgaW4gZC5nZXRWYXIoIkJBU0VDQU5BRElBTkVYVFJBT1MiLCBUcnVlKToKKyAgICAgICAgZXh0cmFsaWJjcy5hcHBlbmQoIm11c2wiKQogICAgIGZvciB2YXJpYW50IGluIFsiIiwgInNwZSIsICJ4MzIiLCAiZWFiaSIsICJuMzIiXToKLSAgICAgICAgZm9yIGxpYmMgaW4gWyIiLCAidWNsaWJjIiwgIm11c2wiXToKKyAgICAgICAgZm9yIGxpYmMgaW4gZXh0cmFsaWJjczoKICAgICAgICAgICAgIGVudHJ5ID0gImxpbnV4IgogICAgICAgICAgICAgaWYgdmFyaWFudCBhbmQgbGliYzoKICAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi0iICsgbGliYyArIHZhcmlhbnQKQEAgLTU5LDE1ICs2NSwyMiBAQAogICAgIGlmIHRhcmNoID09ICJ4ODZfNjQiOgogICAgICAgICBkLnNldFZhcigiTElCQ0VYVEVOU0lPTiIsICIiKQogICAgICAgICBkLnNldFZhcigiQUJJRVhURU5TSU9OIiwgIiIpCi0gICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudXgzMiBsaW51eC11Y2xpYmN4MzIgbGludXgtbXVzbHgzMiIpCisgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudXgzMiIpCisgICAgICAgIGZvciBleHRyYW9zIGluIGQuZ2V0VmFyKCJCQVNFQ0FOQURJQU5FWFRSQU9TIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiICIgKyBleHRyYW9zICsgIngzMiIpCiAgICAgZWxpZiB0YXJjaCA9PSAicG93ZXJwYyI6CiAgICAgICAgICMgUG93ZXJQQyBjYW4gYnVpbGQgImxpbnV4IiBhbmQgImxpbnV4LWdudXNwZSIKICAgICAgICAgZC5zZXRWYXIoIkxJQkNFWFRFTlNJT04iLCAiIikKICAgICAgICAgZC5zZXRWYXIoIkFCSUVYVEVOU0lPTiIsICIiKQotICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVzcGUgbGludXgtdWNsaWJjc3BlIGxpbnV4LW11c2xzcGUiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVzcGUiKQorICAgICAgICBmb3IgZXh0cmFvcyBpbiBkLmdldFZhcigiQkFTRUNBTkFESUFORVhUUkFPUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiAiICsgZXh0cmFvcyArICJzcGUiKQogICAgIGVsaWYgdGFyY2ggPT0gIm1pcHM2NCI6Ci0gICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudW4zMiBsaW51eC11Y2xpYmNuMzIgbGludXgtbXVzbG4zMiIpCisgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudW4zMiIpCisgICAgICAgIGZvciBleHRyYW9zIGluIGQuZ2V0VmFyKCJCQVNFQ0FOQURJQU5FWFRSQU9TIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiICIgKyBleHRyYW9zICsgIm4zMiIpCiAgICAgaWYgdGFyY2ggPT0gImFybSIgb3IgdGFyY2ggPT0gImFybWViIjoKKyAgICAgICAgZC5hcHBlbmRWYXIoIkNBTkFESUFORVhUUkFPUyIsICIgbGludXgtZ251ZWFiaSBsaW51eC1tdXNsZWFiaSBsaW51eC11Y2xpYmNlYWJpIikKICAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9PUyIsICJsaW51eC1nbnVlYWJpIikKICAgICBlbHNlOgogICAgICAgICBkLnNldFZhcigiVEFSR0VUX09TIiwgImxpbnV4IikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MuYmJjbGFzcwppbmRleCA4MWQxYzlkLi4wMWIwOTMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCkBAIC0xNyw2ICsxNyw4IEBACiBIT1NUX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKIEhPU1RfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgogCitleHBvcnQgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgPSAiJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IC9saWIgL2xpYjY0IC91c3IvbGliIC91c3IvbGliNjQiCisKIFNUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKIAogUEFDS0FHRV9BUkNIID0gIiR7QlVJTERfQVJDSH0iCkBAIC02OCw0ICs3MCwxNiBAQAogCiBVU0VfTkxTID0gIm5vIgogCitleHBvcnQgQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgQ1hYID0gIiR7QlVJTERfQ1hYfSIKK2V4cG9ydCBGQyA9ICIke0JVSUxEX0ZDfSIKK2V4cG9ydCBDUFAgPSAiJHtCVUlMRF9DUFB9IgorZXhwb3J0IExEID0gIiR7QlVJTERfTER9IgorZXhwb3J0IENDTEQgPSAiJHtCVUlMRF9DQ0xEfSIKK2V4cG9ydCBBUiA9ICIke0JVSUxEX0FSfSIKK2V4cG9ydCBBUyA9ICIke0JVSUxEX0FTfSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtCVUlMRF9SQU5MSUJ9IgorZXhwb3J0IFNUUklQID0gIiR7QlVJTERfU1RSSVB9IgorZXhwb3J0IE5NID0gIiR7QlVJTERfTk19IgorCiBpbmhlcml0IG5vcGFja2FnZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3ZlLWNoZWNrLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2N2ZS1jaGVjay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjVhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2N2ZS1jaGVjay5iYmNsYXNzCkBAIC0wLDAgKzEsMjY1IEBACisjIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayByZWNpcGVzIGFnYWluc3QgcHVibGljIENWRXMuCisjCisjIEluIG9yZGVyIHRvIHVzZSB0aGlzIGNsYXNzIGp1c3QgaW5oZXJpdCB0aGUgY2xhc3MgaW4gdGhlCisjIGxvY2FsLmNvbmYgZmlsZSBhbmQgaXQgd2lsbCBhZGQgdGhlIGN2ZV9jaGVjayB0YXNrIGZvcgorIyBldmVyeSByZWNpcGUuIFRoZSB0YXNrIGNhbiBiZSB1c2VkIHBlciByZWNpcGUsIHBlciBpbWFnZSwKKyMgb3IgdXNpbmcgdGhlIHNwZWNpYWwgY2FzZXMgIndvcmxkIiBhbmQgInVuaXZlcnNlIi4gVGhlCisjIGN2ZV9jaGVjayB0YXNrIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGZvciBldmVyeSB1bnBhdGNoZWQKKyMgQ1ZFIGZvdW5kIGFuZCBnZW5lcmF0ZSBhIGZpbGUgaW4gdGhlIHJlY2lwZSBXT1JLRElSL2N2ZQorIyBkaXJlY3RvcnkuIElmIGFuIGltYWdlIGlzIGJ1aWxkIGl0IHdpbGwgZ2VuZXJhdGUgYSByZXBvcnQKKyMgaW4gREVQTE9ZX0RJUl9JTUFHRSBmb3IgYWxsIHRoZSBwYWNrYWdlcyB1c2VkLgorIworIyBFeGFtcGxlOgorIyAgIGJpdGJha2UgLWMgY3ZlX2NoZWNrIG9wZW5zc2wKKyMgICBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworIyAgIGJpdGJha2UgLWsgLWMgY3ZlX2NoZWNrIHVuaXZlcnNlCisjCisjIERJU0NMQUlNRVIKKyMKKyMgVGhpcyBjbGFzcy90b29sIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgc3VwcG9ydCBhbmQgbm90CisjIHRoZSBvbmx5IG1ldGhvZCB0byBjaGVjayBhZ2FpbnN0IENWRXMuIFJ1bm5pbmcgdGhpcyB0b29sCisjIGRvZXNuJ3QgZ3VhcmFudGVlIHlvdXIgcGFja2FnZXMgYXJlIGZyZWUgb2YgQ1ZFcy4KKworQ1ZFX0NIRUNLX0RCX0RJUiA/PSAiJHtETF9ESVJ9L0NWRV9DSEVDSyIKK0NWRV9DSEVDS19EQl9GSUxFID89ICIke0NWRV9DSEVDS19EQl9ESVJ9L252ZC5kYiIKKworQ1ZFX0NIRUNLX0xPQ0FMX0RJUiA/PSAiJHtXT1JLRElSfS9jdmUiCitDVkVfQ0hFQ0tfTE9DQUxfRklMRSA/PSAiJHtDVkVfQ0hFQ0tfTE9DQUxfRElSfS9jdmUubG9nIgorQ1ZFX0NIRUNLX1RNUF9GSUxFID89ICIke1RNUERJUn0vY3ZlX2NoZWNrIgorCitDVkVfQ0hFQ0tfRElSID8/PSAiJHtERVBMT1lfRElSfS9jdmUiCitDVkVfQ0hFQ0tfTUFOSUZFU1QgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmN2ZSIKK0NWRV9DSEVDS19DT1BZX0ZJTEVTID8/PSAiMSIKK0NWRV9DSEVDS19DUkVBVEVfTUFOSUZFU1QgPz89ICIxIgorCisjIFdoaXRlbGlzdCBmb3IgcGFja2FnZXMgKFBOKQorQ1ZFX0NIRUNLX1BOX1dISVRFTElTVCA9ICJcCisgICAgZ2xpYmMtbG9jYWxlIFwKKyIKKworIyBXaGl0ZWxpc3QgZm9yIENWRSBhbmQgdmVyc2lvbiBvZiBwYWNrYWdlCitDVkVfQ0hFQ0tfQ1ZFX1dISVRFTElTVCA9ICJ7XAorICAgICdDVkUtMjAxNC0yNTI0JzogKCc2LjMnLCksIFwKK30iCisKK3B5dGhvbiBkb19jdmVfY2hlY2sgKCkgeworICAgICIiIgorICAgIENoZWNrIHJlY2lwZSBmb3IgcGF0Y2hlZCBhbmQgdW5wYXRjaGVkIENWRXMKKyAgICAiIiIKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfVE1QX0ZJTEUiLCBUcnVlKSk6CisgICAgICAgIHBhdGNoZWRfY3ZlcyA9IGdldF9wYXRjaGVzX2N2ZXMoZCkKKyAgICAgICAgcGF0Y2hlZCwgdW5wYXRjaGVkID0gY2hlY2tfY3ZlcyhkLCBwYXRjaGVkX2N2ZXMpCisgICAgICAgIGlmIHBhdGNoZWQgb3IgdW5wYXRjaGVkOgorICAgICAgICAgICAgY3ZlX2RhdGEgPSBnZXRfY3ZlX2luZm8oZCwgcGF0Y2hlZCArIHVucGF0Y2hlZCkKKyAgICAgICAgICAgIGN2ZV93cml0ZV9kYXRhKGQsIHBhdGNoZWQsIHVucGF0Y2hlZCwgY3ZlX2RhdGEpCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiRmFpbGVkIHRvIHVwZGF0ZSBDVkUgZGF0YWJhc2UsIHNraXBwaW5nIENWRSBjaGVjayIpCit9CisKK2FkZHRhc2sgY3ZlX2NoZWNrIGFmdGVyIGRvX3VucGFjayBiZWZvcmUgZG9fYnVpbGQKK2RvX2N2ZV9jaGVja1tkZXBlbmRzXSA9ICJjdmUtY2hlY2stdG9vbC1uYXRpdmU6ZG9fcG9wdWxhdGVfY3ZlX2RiIgorZG9fY3ZlX2NoZWNrW25vc3RhbXBdID0gIjEiCisKK3B5dGhvbiBjdmVfY2hlY2tfY2xlYW51cCAoKSB7CisgICAgIiIiCisgICAgRGVsZXRlIHRoZSBmaWxlIHVzZWQgdG8gZ2F0aGVyIGFsbCB0aGUgQ1ZFIGluZm9ybWF0aW9uLgorICAgICIiIgorCisgICAgYmIudXRpbHMucmVtb3ZlKGUuZGF0YS5nZXRWYXIoIkNWRV9DSEVDS19UTVBfRklMRSIsIFRydWUpKQorfQorCithZGRoYW5kbGVyIGN2ZV9jaGVja19jbGVhbnVwCitjdmVfY2hlY2tfY2xlYW51cFtldmVudG1hc2tdID0gImJiLmNvb2tlci5Db29rZXJFeGl0IgorCitweXRob24gY3ZlX2NoZWNrX3dyaXRlX3Jvb3Rmc19tYW5pZmVzdCAoKSB7CisgICAgIiIiCisgICAgQ3JlYXRlIENWRSBtYW5pZmVzdCB3aGVuIGJ1aWxkaW5nIGFuIGltYWdlCisgICAgIiIiCisKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmdldFZhcigiQ1ZFX0NIRUNLX1RNUF9GSUxFIiwgVHJ1ZSkpOgorICAgICAgICBiYi5ub3RlKCJXcml0aW5nIHJvb3RmcyBDVkUgbWFuaWZlc3QiKQorICAgICAgICBkZXBsb3lfZGlyID0gZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKQorICAgICAgICBsaW5rX25hbWUgPSBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkKKyAgICAgICAgbWFuaWZlc3RfbmFtZSA9IGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfTUFOSUZFU1QiLCBUcnVlKQorICAgICAgICBjdmVfdG1wX2ZpbGUgPSBkLmdldFZhcigiQ1ZFX0NIRUNLX1RNUF9GSUxFIiwgVHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weWZpbGUoY3ZlX3RtcF9maWxlLCBtYW5pZmVzdF9uYW1lKQorCisgICAgICAgIGlmIG1hbmlmZXN0X25hbWUgYW5kIG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0X25hbWUpOgorICAgICAgICAgICAgbWFuaWZlc3RfbGluayA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyLCAiJXMuY3ZlIiAlIGxpbmtfbmFtZSkKKyAgICAgICAgICAgICMgSWYgd2UgYWxyZWFkeSBoYXZlIGFub3RoZXIgbWFuaWZlc3QsIHVwZGF0ZSBzeW1saW5rcworICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5yZWFscGF0aChtYW5pZmVzdF9saW5rKSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG1hbmlmZXN0X2xpbmspCisgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUobWFuaWZlc3RfbmFtZSksIG1hbmlmZXN0X2xpbmspCisgICAgICAgICAgICBiYi5wbGFpbigiSW1hZ2UgQ1ZFIHJlcG9ydCBzdG9yZWQgaW46ICVzIiAlIG1hbmlmZXN0X25hbWUpCit9CisKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX3ByZXBlbmQgPSAiJHtAJ2N2ZV9jaGVja193cml0ZV9yb290ZnNfbWFuaWZlc3Q7ICcgaWYgZC5nZXRWYXIoJ0NWRV9DSEVDS19DUkVBVEVfTUFOSUZFU1QnLCBUcnVlKSA9PSAnMScgZWxzZSAnJ30iCisKK2RlZiBnZXRfcGF0Y2hlc19jdmVzKGQpOgorICAgICIiIgorICAgIEdldCBwYXRjaGVzIHRoYXQgc29sdmUgQ1ZFcyB1c2luZyB0aGUgIkNWRTogIiB0YWcuCisgICAgIiIiCisKKyAgICBpbXBvcnQgcmUKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBjdmVfbWF0Y2ggPSByZS5jb21waWxlKCJDVkU6KCBDVkVcLVxkezR9XC1cZCspKyIpCisgICAgcGF0Y2hlZF9jdmVzID0gc2V0KCkKKyAgICBiYi5kZWJ1ZygyLCAiTG9va2luZyBmb3IgcGF0Y2hlcyB0aGF0IHNvbHZlcyBDVkVzIGZvciAlcyIgJSBwbikKKyAgICBmb3IgdXJsIGluIHNyY19wYXRjaGVzKGQpOgorICAgICAgICBwYXRjaF9maWxlID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybClbMl0KKyAgICAgICAgd2l0aCBvcGVuKHBhdGNoX2ZpbGUsICJyIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXRjaF90ZXh0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkZhaWxlZCB0byByZWFkIHBhdGNoICVzIHVzaW5nIFVURi04IGVuY29kaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB0cnlpbmcgd2l0aCBpc284ODU5LTEiICUgIHBhdGNoX2ZpbGUpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGNoX2ZpbGUsICJyIiwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHBhdGNoX3RleHQgPSBmLnJlYWQoKQorCisgICAgICAgICMgU2VhcmNoIGZvciB0aGUgIkNWRTogIiBsaW5lCisgICAgICAgIG1hdGNoID0gY3ZlX21hdGNoLnNlYXJjaChwYXRjaF90ZXh0KQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICMgR2V0IG9ubHkgdGhlIENWRXMgd2l0aG91dCB0aGUgIkNWRTogIiB0YWcKKyAgICAgICAgICAgIGN2ZXMgPSBwYXRjaF90ZXh0W21hdGNoLnN0YXJ0KCkrNTptYXRjaC5lbmQoKV0KKyAgICAgICAgICAgIGZvciBjdmUgaW4gY3Zlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJQYXRjaCAlcyBzb2x2ZXMgJXMiICUgKHBhdGNoX2ZpbGUsIGN2ZSkpCisgICAgICAgICAgICAgICAgcGF0Y2hlZF9jdmVzLmFkZChjdmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiUGF0Y2ggJXMgZG9lc24ndCBzb2x2ZSBDVkVzIiAlIHBhdGNoX2ZpbGUpCisKKyAgICByZXR1cm4gcGF0Y2hlZF9jdmVzCisKK2RlZiBjaGVja19jdmVzKGQsIHBhdGNoZWRfY3Zlcyk6CisgICAgIiIiCisgICAgUnVuIGN2ZS1jaGVjay10b29sIGxvb2tpbmcgZm9yIHBhdGNoZWQgYW5kIHVucGF0Y2hlZCBDVkVzLgorICAgICIiIgorCisgICAgaW1wb3J0IGFzdCwgY3N2LCB0ZW1wZmlsZSwgc3VicHJvY2VzcywgaW8KKworICAgIGN2ZXNfcGF0Y2hlZCA9IFtdCisgICAgY3Zlc191bnBhdGNoZWQgPSBbXQorICAgIGJwbiA9IGQuZ2V0VmFyKCJCUE4iLCBUcnVlKQorICAgIHB2ID0gZC5nZXRWYXIoIlBWIiwgVHJ1ZSkuc3BsaXQoImdpdCsiKVswXQorICAgIGN2ZXMgPSAiICIuam9pbihwYXRjaGVkX2N2ZXMpCisgICAgY3ZlX2RiX2RpciA9IGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfREJfRElSIiwgVHJ1ZSkKKyAgICBjdmVfd2hpdGVsaXN0ID0gYXN0LmxpdGVyYWxfZXZhbChkLmdldFZhcigiQ1ZFX0NIRUNLX0NWRV9XSElURUxJU1QiLCBUcnVlKSkKKyAgICBjdmVfY21kID0gImN2ZS1jaGVjay10b29sIgorICAgIGNtZCA9IFtjdmVfY21kLCAiLS1uby1odG1sIiwgIi0tY3N2IiwgIi0tbm90LWFmZmVjdGVkIiwgIi10IiwgImZhdXgiLCAiLWQiLCBjdmVfZGJfZGlyXQorCisgICAgIyBJZiB0aGUgcmVjaXBlIGhhcyBiZWVuIHdoaXRsaXN0ZWQgd2UgcmV0dXJuIGVtcHR5IGxpc3RzCisgICAgaWYgZC5nZXRWYXIoIlBOIiwgVHJ1ZSkgaW4gZC5nZXRWYXIoIkNWRV9DSEVDS19QTl9XSElURUxJU1QiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBiYi5ub3RlKCJSZWNpcGUgaGFzIGJlZW4gd2hpdGVsaXN0ZWQsIHNraXBwaW5nIGNoZWNrIikKKyAgICAgICAgcmV0dXJuIChbXSwgW10pCisKKyAgICAjIEl0IGlzIG5lZWRlZCB0byBleHBvcnQgdGhlIHByb3hpZXMgdG8gZG93bmxvYWQgdGhlIGRhdGFiYXNlIHVzaW5nIEhUVFAKKyAgICBiYi51dGlscy5leHBvcnRfcHJveGllcyhkKQorCisgICAgdHJ5OgorICAgICAgICAjIFdyaXRlIHRoZSBmYXV4IENTViBmaWxlIHRvIGJlIHVzZWQgd2l0aCBjdmUtY2hlY2stdG9vbAorICAgICAgICBmZCwgZmF1eCA9IHRlbXBmaWxlLm1rc3RlbXAocHJlZml4PSJjdmUtZmF1eC0iKQorICAgICAgICB3aXRoIG9zLmZkb3BlbihmZCwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiJXMsJXMsJXMsIiAlIChicG4sIHB2LCBjdmVzKSkKKyAgICAgICAgY21kLmFwcGVuZChmYXV4KQorCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgYmIuZGVidWcoMiwgIk91dHB1dCBvZiBjb21tYW5kICVzOlxuJXMiICUgKCJcbiIuam9pbihjbWQpLCBvdXRwdXQpKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBiYi53YXJuKCJDb3VsZG4ndCBjaGVjayBmb3IgQ1ZFczogJXMgKG91dHB1dCAlcykiICUgKGUsIGUub3V0cHV0KSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5yZW1vdmUoZmF1eCkKKworICAgIGZvciByb3cgaW4gY3N2LnJlYWRlcihpby5TdHJpbmdJTyhvdXRwdXQpKToKKyAgICAgICAgIyBUaGlyZCByb3cgaGFzIHRoZSB1bnBhdGNoZWQgQ1ZFcworICAgICAgICBpZiByb3dbMl06CisgICAgICAgICAgICBmb3IgY3ZlIGluIHJvd1syXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICMgU2tpcCBpZiB0aGUgQ1ZFIGhhcyBiZWVuIHdoaXRsaXN0ZWQgZm9yIHRoZSBjdXJyZW50IHZlcnNpb24KKyAgICAgICAgICAgICAgICBpZiBwdiBpbiBjdmVfd2hpdGVsaXN0LmdldChjdmUsW10pOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCIlcy0lcyBoYXMgYmVlbiB3aGl0ZWxpc3RlZCBmb3IgJXMiICUgKGJwbiwgcHYsIGN2ZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3Zlc191bnBhdGNoZWQuYXBwZW5kKGN2ZSkKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIiVzLSVzIGlzIG5vdCBwYXRjaGVkIGZvciAlcyIgJSAoYnBuLCBwdiwgY3ZlKSkKKyAgICAgICAgIyBGb3VydGggcm93IGhhcyBwYXRjaGVkIENWRXMKKyAgICAgICAgaWYgcm93WzNdOgorICAgICAgICAgICAgZm9yIGN2ZSBpbiByb3dbM10uc3BsaXQoKToKKyAgICAgICAgICAgICAgICBjdmVzX3BhdGNoZWQuYXBwZW5kKGN2ZSkKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiJXMtJXMgaXMgcGF0Y2hlZCBmb3IgJXMiICUgKGJwbiwgcHYsIGN2ZSkpCisKKyAgICByZXR1cm4gKGN2ZXNfcGF0Y2hlZCwgY3Zlc191bnBhdGNoZWQpCisKK2RlZiBnZXRfY3ZlX2luZm8oZCwgY3Zlcyk6CisgICAgIiIiCisgICAgR2V0IENWRSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhYmFzZSB1c2VkIGJ5IGN2ZS1jaGVjay10b29sLgorCisgICAgVW5mb3J0dW5hdGVseSB0aGUgb25seSB3YXkgdG8gZ2V0IENWRSBpbmZvIGlzIHNldCB0aGUgb3V0cHV0IHRvCisgICAgaHRtbCAoaGFyZCB0byBwYXJzZSkgb3IgcXVlcnkgZGlyZWN0bHkgdGhlIGRhdGFiYXNlLgorICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgc3FsaXRlMworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSBweXNxbGl0ZTIgaW1wb3J0IGRiYXBpMiBhcyBzcWxpdGUzCisKKyAgICBjdmVfZGF0YSA9IHt9CisgICAgZGJfZmlsZSA9IGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfREJfRklMRSIsIFRydWUpCisgICAgcGxhY2Vob2xkZXIgPSAiLCIuam9pbigiPyIgKiBsZW4oY3ZlcykpCisgICAgcXVlcnkgPSAiU0VMRUNUICogRlJPTSBOVkQgV0hFUkUgaWQgSU4gKCVzKSIgJSBwbGFjZWhvbGRlcgorICAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoZGJfZmlsZSkKKyAgICBjdXIgPSBjb25uLmN1cnNvcigpCisgICAgZm9yIHJvdyBpbiBjdXIuZXhlY3V0ZShxdWVyeSwgdHVwbGUoY3ZlcykpOgorICAgICAgICBjdmVfZGF0YVtyb3dbMF1dID0ge30KKyAgICAgICAgY3ZlX2RhdGFbcm93WzBdXVsic3VtbWFyeSJdID0gcm93WzFdCisgICAgICAgIGN2ZV9kYXRhW3Jvd1swXV1bInNjb3JlIl0gPSByb3dbMl0KKyAgICAgICAgY3ZlX2RhdGFbcm93WzBdXVsibW9kaWZpZWQiXSA9IHJvd1szXQorICAgICAgICBjdmVfZGF0YVtyb3dbMF1dWyJ2ZWN0b3IiXSA9IHJvd1s0XQorICAgIGNvbm4uY2xvc2UoKQorCisgICAgcmV0dXJuIGN2ZV9kYXRhCisKK2RlZiBjdmVfd3JpdGVfZGF0YShkLCBwYXRjaGVkLCB1bnBhdGNoZWQsIGN2ZV9kYXRhKToKKyAgICAiIiIKKyAgICBXcml0ZSBDVkUgaW5mb3JtYXRpb24gaW4gV09SS0RJUjsgYW5kIHRvIENWRV9DSEVDS19ESVIsIGFuZAorICAgIENWRSBtYW5pZmVzdCBpZiBlbmFibGVkLgorICAgICIiIgorCisgICAgY3ZlX2ZpbGUgPSBkLmdldFZhcigiQ1ZFX0NIRUNLX0xPQ0FMX0ZJTEUiLCBUcnVlKQorICAgIG52ZF9saW5rID0gImh0dHBzOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD0iCisgICAgd3JpdGVfc3RyaW5nID0gIiIKKyAgICBmaXJzdF9hbGVydCA9IFRydWUKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIkNWRV9DSEVDS19MT0NBTF9ESVIiLCBUcnVlKSkKKworICAgIGZvciBjdmUgaW4gc29ydGVkKGN2ZV9kYXRhKToKKyAgICAgICAgd3JpdGVfc3RyaW5nICs9ICJQQUNLQUdFIE5BTUU6ICVzXG4iICUgZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICAgICAgd3JpdGVfc3RyaW5nICs9ICJQQUNLQUdFIFZFUlNJT046ICVzXG4iICUgZC5nZXRWYXIoIlBWIiwgVHJ1ZSkKKyAgICAgICAgd3JpdGVfc3RyaW5nICs9ICJDVkU6ICVzXG4iICUgY3ZlCisgICAgICAgIGlmIGN2ZSBpbiBwYXRjaGVkOgorICAgICAgICAgICAgd3JpdGVfc3RyaW5nICs9ICJDVkUgU1RBVFVTOiBQYXRjaGVkXG4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3cml0ZV9zdHJpbmcgKz0gIkNWRSBTVEFUVVM6IFVucGF0Y2hlZFxuIgorICAgICAgICAgICAgaWYgZmlyc3RfYWxlcnQ6CisgICAgICAgICAgICAgICAgYmIud2FybigiRm91bmQgdW5wYXRjaGVkIENWRSwgZm9yIG1vcmUgaW5mb3JtYXRpb24gY2hlY2sgJXMiICUgY3ZlX2ZpbGUpCisgICAgICAgICAgICAgICAgZmlyc3RfYWxlcnQgPSBGYWxzZQorICAgICAgICB3cml0ZV9zdHJpbmcgKz0gIkNWRSBTVU1NQVJZOiAlc1xuIiAlIGN2ZV9kYXRhW2N2ZV1bInN1bW1hcnkiXQorICAgICAgICB3cml0ZV9zdHJpbmcgKz0gIkNWU1MgdjIgQkFTRSBTQ09SRTogJXNcbiIgJSBjdmVfZGF0YVtjdmVdWyJzY29yZSJdCisgICAgICAgIHdyaXRlX3N0cmluZyArPSAiVkVDVE9SOiAlc1xuIiAlIGN2ZV9kYXRhW2N2ZV1bInZlY3RvciJdCisgICAgICAgIHdyaXRlX3N0cmluZyArPSAiTU9SRSBJTkZPUk1BVElPTjogJXMlc1xuXG4iICUgKG52ZF9saW5rLCBjdmUpCisKKyAgICB3aXRoIG9wZW4oY3ZlX2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgYmIubm90ZSgiV3JpdGluZyBmaWxlICVzIHdpdGggQ1ZFIGluZm9ybWF0aW9uIiAlIGN2ZV9maWxlKQorICAgICAgICBmLndyaXRlKHdyaXRlX3N0cmluZykKKworICAgIGlmIGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfQ09QWV9GSUxFUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgY3ZlX2RpciA9IGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfRElSIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGN2ZV9kaXIpCisgICAgICAgIGRlcGxveV9maWxlID0gb3MucGF0aC5qb2luKGN2ZV9kaXIsIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorICAgICAgICB3aXRoIG9wZW4oZGVwbG95X2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUod3JpdGVfc3RyaW5nKQorCisgICAgaWYgZC5nZXRWYXIoIkNWRV9DSEVDS19DUkVBVEVfTUFOSUZFU1QiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHdpdGggb3BlbihkLmdldFZhcigiQ1ZFX0NIRUNLX1RNUF9GSUxFIiwgVHJ1ZSksICJhIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIiVzIiAlIHdyaXRlX3N0cmluZykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcwppbmRleCAzNDFkOWMwLi5iZTcxYWZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXZzaGVsbC5iYmNsYXNzCkBAIC02NSw5ICs2NSw2IEBACiAgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKICAgICAgICAgb3MuZHVwMihtLCBzeXMuc3RkZXJyLmZpbGVubygpKQogCi0gICAgICAgIHN5cy5zdGRvdXQgPSBvcy5mZG9wZW4oc3lzLnN0ZG91dC5maWxlbm8oKSwgJ3cnLCAwKQotICAgICAgICBzeXMuc3RkaW4gPSBvcy5mZG9wZW4oc3lzLnN0ZGluLmZpbGVubygpLCAncicsIDApCi0KICAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzeXMuc3Rkb3V0KQogICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHN5cy5zdGRlcnIpCiAgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc3lzLnN0ZGluKQpAQCAtOTMsNiArOTAsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwcm9tcHQgPSBwczEKICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocHJvbXB0KQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKICAgICAgICAgIyBSZXN0b3JlIEN0cmwrQyBzaW5jZSBiaXRiYWtlIG1hc2tzIHRoaXMKICAgICAgICAgZGVmIHNpZ25hbF9oYW5kbGVyKHNpZ25hbCwgZnJhbWUpOgpAQCAtMTE0LDYgKzExMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAxMToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3Ryb2RhdGEuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzCmluZGV4IDUxYmZjMWUuLmZiYjc0MDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzCkBAIC0xLDQgKzEsMyBAQAotaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCiBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCiBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYwogaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtY29tbW9uLWJhc2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWNvbW1vbi1iYXNlLmJiY2xhc3MKaW5kZXggMDg1MTFmNS4uODI0YTFiNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtY29tbW9uLWJhc2UuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzCkBAIC0xLDcgKzEsMyBAQAotaW5oZXJpdCBweXRob24tZGlyCi0KLUVYVFJBX09FTUFLRSA9ICIiCi0KIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUgogZXhwb3J0IFNUQUdJTkdfTElCRElSCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1uYXRpdmUtYmFzZS5iYmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDljYjk1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWluaGVyaXQgZGlzdHV0aWxzLWNvbW1vbi1iYXNlCi0KLURFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUiLCAiIl1bKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpID09ICcnKV19IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtdG9vbHMuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLXRvb2xzLmJiY2xhc3MKaW5kZXggOGQ5YjNmNy4uM2VmOWNjNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtdG9vbHMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzCkBAIC04LDE0ICs4LDEyIEBACiBkaXN0dXRpbHNfZG9fY29tcGlsZSgpIHsKICAgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKICAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKLSAgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAogICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKICAgICAgICAgIGJiZmF0YWxfbG9nICIke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGRfZXh0IGV4ZWN1dGlvbiBmYWlsZWQuIgogfQogCiBkaXN0dXRpbHNfc3RhZ2VfaGVhZGVycygpIHsKICAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KLSAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCiAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgJHtESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTfSB8fCBcCiAgICAgICAgIGJiZmF0YWxfbG9nICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgogfQpAQCAtMjUsNyArMjMsNiBAQAogICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCiAgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CiAgICAgICAgIFBZVEhPTlBBVEg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKLSAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCiAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsICR7RElTVFVUSUxTX1NUQUdFX0FMTF9BUkdTfSB8fCBcCiAgICAgICAgIGJiZmF0YWxfbG9nICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgogfQpAQCAtMzcsNyArMzQsNiBAQAogICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCiAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKICAgICAgICAgUFlUSE9OUEFUSD0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKLSAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCiAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKICAgICAgICAgYmJmYXRhbF9sb2cgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMuYmJjbGFzcwppbmRleCBkYTQ4YTJlLi44NTc1NzJkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MKQEAgLTEwLDE0ICsxMCwxMiBAQAogZGlzdHV0aWxzX2RvX2NvbXBpbGUoKSB7CiAgICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCiAgICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0gICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCiAgICAgICAgICBiYmZhdGFsX2xvZyAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkIGV4ZWN1dGlvbiBmYWlsZWQuIgogfQogCiBkaXN0dXRpbHNfc3RhZ2VfaGVhZGVycygpIHsKICAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KLSAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCiAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgJHtESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTfSB8fCBcCiAgICAgICAgIGJiZmF0YWxfbG9nICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgogfQpAQCAtMjcsNyArMjUsNiBAQAogICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCiAgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CiAgICAgICAgIFBZVEhPTlBBVEg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKLSAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCiAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsICR7RElTVFVUSUxTX1NUQUdFX0FMTF9BUkdTfSB8fCBcCiAgICAgICAgIGJiZmF0YWxfbG9nICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgogfQpAQCAtMzcsNyArMzQsNiBAQAogICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCiAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKICAgICAgICAgUFlUSE9OUEFUSD0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAotICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgLS1pbnN0YWxsLWxpYj0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9ICR7RElTVFVUSUxTX0lOU1RBTExfQVJHU30gfHwgXAogICAgICAgICBiYmZhdGFsX2xvZyAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtYmFzZS5iYmNsYXNzCmluZGV4IDJhMDkzZDMuLjgyYWI2YTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLWJhc2UuYmJjbGFzcwpAQCAtMSw4ICsxLDUgQEAKIERFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUgJHtQWVRIT05fUE59IiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKIFJERVBFTkRTXyR7UE59ICs9ICIke0BbJycsICcke1BZVEhPTl9QTn0tY29yZSddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IgogCi1QWVRIT05fQkFTRVZFUlNJT04gPSAiMy41IgotUFlUSE9OX0FCSSA9ICJtIgotCiBpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZSBweXRob24zbmF0aXZlCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1uYXRpdmUtYmFzZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOWExYTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVBZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjUiCi1QWVRIT05fQUJJID0gIm0iCi0KLWluaGVyaXQgZGlzdHV0aWxzLW5hdGl2ZS1iYXNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzCmluZGV4IDRmNmNhNDQuLmE2NzIwYzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzCkBAIC05LDE0ICs5LDggQEAKICAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCiAKIGRpc3R1dGlsczNfZG9fY29tcGlsZSgpIHsKLSAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgotICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KLSAgICAgICAgZmkKICAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAogICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0gICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IFwKICAgICAgICAgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAogICAgICAgICBiYmZhdGFsX2xvZyAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkX2V4dCBleGVjdXRpb24gZmFpbGVkLiIKQEAgLTI1LDI4ICsxOSwxNiBAQAogCiBkaXN0dXRpbHMzX3N0YWdlX2hlYWRlcnMoKSB7CiAgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ci0gICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KLSAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9Ci0gICAgICAgIGZpCi0gICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyAke0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1N9IHx8IFwKICAgICAgICAgYmJmYXRhbF9sb2cgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgZXhlY3V0aW9uIGZhaWxlZC4iCiB9CiBkaXN0dXRpbHMzX3N0YWdlX2hlYWRlcnNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCiAKIGRpc3R1dGlsczNfc3RhZ2VfYWxsKCkgewotICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCi0gICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQotICAgICAgICBmaQogICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCiAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKICAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KICAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAotICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7U1lTfSBcCiAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsICR7RElTVFVUSUxTX1NUQUdFX0FMTF9BUkdTfSB8fCBcCiAgICAgICAgIGJiZmF0YWxfbG9nICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgogfQpAQCAtNTQsMTUgKzM2LDkgQEAKIAogZGlzdHV0aWxzM19kb19pbnN0YWxsKCkgewogICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQotICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCi0gICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQotICAgICAgICBmaQogICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCiAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKICAgICAgICAgUFlUSE9OUEFUSD0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAotICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7U1lTfSBcCiAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKICAgICAgICAgYmJmYXRhbF9sb2cgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3MKaW5kZXggZGE3ZWI0Ny4uMzE5MDhjMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpAQCAtMjksNiArMjksMjMgQEAKIAogcHl0aG9uICgpIHsKICAgICBleHRlcm5hbHNyYyA9IGQuZ2V0VmFyKCdFWFRFUk5BTFNSQycsIFRydWUpCisKKyAgICAjIElmIHRoaXMgaXMgdGhlIGJhc2UgcmVjaXBlIGFuZCBFWFRFUk5BTFNSQyBpcyBzZXQgZm9yIGl0IG9yIGFueSBvZiBpdHMKKyAgICAjIGRlcml2YXRpdmVzLCB0aGVuIGVuYWJsZSBCQl9ET05UX0NBQ0hFIHRvIGZvcmNlIHRoZSByZWNpcGUgdG8gYWx3YXlzIGJlCisgICAgIyByZS1wYXJzZWQgc28gdGhhdCB0aGUgZmlsZS1jaGVja3N1bXMgZnVuY3Rpb24gZm9yIGRvX2NvbXBpbGUgaXMgcnVuIGV2ZXJ5CisgICAgIyB0aW1lLgorICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIGlmIGJwbiA9PSBkLmdldFZhcignUE4nLCBUcnVlKToKKyAgICAgICAgY2xhc3NleHRlbmQgPSAoZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgICAgICBpZiAoZXh0ZXJuYWxzcmMgb3IKKyAgICAgICAgICAgICAgICAoJ25hdGl2ZScgaW4gY2xhc3NleHRlbmQgYW5kCisgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdFWFRFUk5BTFNSQ19wbi0lcy1uYXRpdmUnICUgYnBuLCBUcnVlKSkgb3IKKyAgICAgICAgICAgICAgICAoJ25hdGl2ZXNkaycgaW4gY2xhc3NleHRlbmQgYW5kCisgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdFWFRFUk5BTFNSQ19wbi1uYXRpdmVzZGstJXMnICUgYnBuLCBUcnVlKSkgb3IKKyAgICAgICAgICAgICAgICAoJ2Nyb3NzJyBpbiBjbGFzc2V4dGVuZCBhbmQKKyAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0VYVEVSTkFMU1JDX3BuLSVzLWNyb3NzJyAlIGJwbiwgVHJ1ZSkpKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCQl9ET05UX0NBQ0hFJywgJzEnKQorCiAgICAgaWYgZXh0ZXJuYWxzcmM6CiAgICAgICAgIGQuc2V0VmFyKCdTJywgZXh0ZXJuYWxzcmMpCiAgICAgICAgIGV4dGVybmFsc3JjYnVpbGQgPSBkLmdldFZhcignRVhURVJOQUxTUkNfQlVJTEQnLCBUcnVlKQpAQCAtODUsMTAgKzEwMiw4IEBACiAgICAgICAgIGQucHJlcGVuZFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAncHJlZnVuY3MnLCAiZXh0ZXJuYWxzcmNfY29tcGlsZV9wcmVmdW5jICIpCiAgICAgICAgIGQucHJlcGVuZFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdwcmVmdW5jcycsICJleHRlcm5hbHNyY19jb25maWd1cmVfcHJlZnVuYyAiKQogCi0gICAgICAgICMgRm9yY2UgdGhlIHJlY2lwZSB0byBiZSBhbHdheXMgcmUtcGFyc2VkIHNvIHRoYXQgdGhlIGZpbGVfY2hlY2tzdW1zCi0gICAgICAgICMgZnVuY3Rpb24gaXMgcnVuIGV2ZXJ5IHRpbWUKLSAgICAgICAgZC5zZXRWYXIoJ0JCX0RPTlRfQ0FDSEUnLCAnMScpCiAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fY29tcGlsZScsICdmaWxlLWNoZWNrc3VtcycsICcke0BzcmN0cmVlX2hhc2hfZmlsZXMoZCl9JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZmlsZS1jaGVja3N1bXMnLCAnJHtAc3JjdHJlZV9jb25maWd1cmVfaGFzaF9maWxlcyhkKX0nKQogCiAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0aGUgd29ya2RpciB0byBnbyBhd2F5CiAgICAgICAgIGQuYXBwZW5kVmFyKCdSTV9XT1JLX0VYQ0xVREUnLCAnICcgKyBkLmdldFZhcignUE4nLCBUcnVlKSkKQEAgLTE0NSwxMCArMTYwLDMxIEBACiAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICAgICAgZW52WydHSVRfSU5ERVhfRklMRSddID0gdG1wX2luZGV4Lm5hbWUKICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZ2l0JywgJ2FkZCcsICcuJ10sIGN3ZD1zX2RpciwgZW52PWVudikKLSAgICAgICAgICAgIHNoYTEgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dpdCcsICd3cml0ZS10cmVlJ10sIGN3ZD1zX2RpciwgZW52PWVudikKKyAgICAgICAgICAgIHNoYTEgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dpdCcsICd3cml0ZS10cmVlJ10sIGN3ZD1zX2RpciwgZW52PWVudikuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgIHdpdGggb3BlbihvZV9oYXNoX2ZpbGUsICd3JykgYXMgZm9iajoKICAgICAgICAgICAgIGZvYmoud3JpdGUoc2hhMSkKICAgICAgICAgcmV0ID0gb2VfaGFzaF9maWxlICsgJzpUcnVlJwogICAgIGVsc2U6CiAgICAgICAgIHJldCA9IGQuZ2V0VmFyKCdFWFRFUk5BTFNSQycsIFRydWUpICsgJy8qOlRydWUnCiAgICAgcmV0dXJuIHJldAorCitkZWYgc3JjdHJlZV9jb25maWd1cmVfaGFzaF9maWxlcyhkKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBzaG91bGQgdHJpZ2dlciBkb19jb25maWd1cmUgdG8gcmUtZXhlY3V0ZSwKKyAgICBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgQ09ORklHVVJFX0ZJTEVTCisgICAgIiIiCisgICAgaW5fZmlsZXMgPSAoZC5nZXRWYXIoJ0NPTkZJR1VSRV9GSUxFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgb3V0X2l0ZW1zID0gW10KKyAgICBzZWFyY2hfZmlsZXMgPSBbXQorICAgIGZvciBlbnRyeSBpbiBpbl9maWxlczoKKyAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgb3V0X2l0ZW1zLmFwcGVuZCgnJXM6JXMnICUgKGVudHJ5LCBvcy5wYXRoLmV4aXN0cyhlbnRyeSkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VhcmNoX2ZpbGVzLmFwcGVuZChlbnRyeSkKKyAgICBpZiBzZWFyY2hfZmlsZXM6CisgICAgICAgIHNfZGlyID0gZC5nZXRWYXIoJ0VYVEVSTkFMU1JDJywgVHJ1ZSkKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc19kaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZiBpbiBzZWFyY2hfZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIG91dF9pdGVtcy5hcHBlbmQoJyVzOlRydWUnICUgb3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgIHJldHVybiAnICcuam9pbihvdXRfaXRlbXMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhLmJiY2xhc3MKaW5kZXggYjFiZGQyNi4uMmVmNjg0NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEuYmJjbGFzcwpAQCAtMyw3ICszLDUgQEAKICMKICMgSXQgc2hvdWxkIGJlIHVzZWQgaW4gcmVjaXBlcyB0byBkZXRlcm1pbmUgd2hldGhlciBpbnRyb3NwZWN0aW9uIGRhdGEgc2hvdWxkIGJlIGJ1aWx0LAogIyBzbyB0aGF0IHFlbXUgdXNlIGNhbiBiZSBhdm9pZGVkIHdoZW4gbmVjZXNzYXJ5LgotR0lfREFUQV9FTkFCTEVEID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEnLCBcCitHSV9EQVRBX0VOQUJMRUQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEnLCBcCiAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncWVtdS11c2VybW9kZScsICdUcnVlJywgJ0ZhbHNlJywgZCksICdGYWxzZScsIGQpfSIKLQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvYmplY3QtaW50cm9zcGVjdGlvbi5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nb2JqZWN0LWludHJvc3BlY3Rpb24uYmJjbGFzcwppbmRleCAyZDczZTQwLi4zNzM4OWNiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvYmplY3QtaW50cm9zcGVjdGlvbi5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ29iamVjdC1pbnRyb3NwZWN0aW9uLmJiY2xhc3MKQEAgLTEsMjIgKzEsMjggQEAKICMgSW5oZXJpdCB0aGlzIGNsYXNzIGluIHJlY2lwZXMgdG8gZW5hYmxlIGJ1aWxkaW5nIHRoZWlyIGludHJvc3BlY3Rpb24gZmlsZXMKIAotIyBUaGlzIHNldHMgdXAgYXV0b2NvbmYtYmFzZWQgcmVjaXBlcyB0byBidWlsZCBpbnRyb3NwZWN0aW9uIGRhdGEgKG9yIG5vdCksCisjIHB5dGhvbjNuYXRpdmUgaXMgaW5oZXJpdGVkIHRvIHByZXZlbnQgaW50cm9zcGVjdGlvbiB0b29scyBiZWluZyBydW4gd2l0aAorIyBob3N0J3MgcHl0aG9uIDMgKHRoZXkgbmVlZCB0byBiZSBydW4gd2l0aCBuYXRpdmUgcHl0aG9uIDMpCisjCisjIFRoaXMgYWxzbyBzZXRzIHVwIGF1dG9jb25mLWJhc2VkIHJlY2lwZXMgdG8gYnVpbGQgaW50cm9zcGVjdGlvbiBkYXRhIChvciBub3QpLAogIyBkZXBlbmRpbmcgb24gZGlzdHJvIGFuZCBtYWNoaW5lIGZlYXR1cmVzIChzZWUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEgY2xhc3MpLgotaW5oZXJpdCBnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YQotRVhUUkFfT0VDT05GX3ByZXBlbmQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0dJX0RBVEFfRU5BQkxFRCcsICdUcnVlJywgJy0tZW5hYmxlLWludHJvc3BlY3Rpb24nLCAnLS1kaXNhYmxlLWludHJvc3BlY3Rpb24nLCBkKX0gIgoraW5oZXJpdCBweXRob24zbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhCitFWFRSQV9PRUNPTkZfcHJlcGVuZF9jbGFzcy10YXJnZXQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0dJX0RBVEFfRU5BQkxFRCcsICdUcnVlJywgJy0tZW5hYmxlLWludHJvc3BlY3Rpb24nLCAnLS1kaXNhYmxlLWludHJvc3BlY3Rpb24nLCBkKX0gIgorCisjIFdoZW4gYnVpbGRpbmcgbmF0aXZlIHJlY2lwZXMsIGRpc2FibGUgaW50cm9zcGVjdGlvbiwgYXMgaXQgaXMgbm90IG5lY2Vzc2FyeSwKKyMgcHVsbHMgaW4gYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMsIGFuZCBtYWtlcyBidWlsZCB0aW1lcyBsb25nZXIKK0VYVFJBX09FQ09ORl9wcmVwZW5kX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiAiCitFWFRSQV9PRUNPTkZfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gIgogCiBVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1RfYXBwZW5kID0gIiAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgogCiAjIEdlbmVyYXRpbmcgaW50cm9zcGVjdGlvbiBkYXRhIGRlcGVuZHMgb24gYSBjb21iaW5hdGlvbiBvZiBuYXRpdmUgYW5kIHRhcmdldAogIyBpbnRyb3NwZWN0aW9uIHRvb2xzLCBhbmQgcWVtdSB0byBydW4gdGhlIHRhcmdldCB0b29scy4KLURFUEVORFNfYXBwZW5kID0gIiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ29iamVjdC1pbnRyb3NwZWN0aW9uLW5hdGl2ZSBxZW11LW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGdvYmplY3QtaW50cm9zcGVjdGlvbi1uYXRpdmUgcWVtdS1uYXRpdmUiCiAKLSMgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHB5dGhvbiBzY3JpcHRzIHRvIHN1Y2NlZWQgLSBkaXN0dXRpbHMgZmFpbHMgaWYgdGhlc2UKLSMgYXJlIG5vdCBzZXQKLWV4cG9ydCBCVUlMRF9TWVMKLWV4cG9ydCBIT1NUX1NZUwotZXhwb3J0IFNUQUdJTkdfSU5DRElSCi1leHBvcnQgU1RBR0lOR19MSUJESVIKKyMgRXZlbiB0aG91Z2ggaW50cm9zcGVjdGlvbiBpcyBkaXNhYmxlZCBvbiAtbmF0aXZlLCBnb2JqZWN0LWludHJvc3BlY3Rpb24gcGFja2FnZSBpcyBzdGlsbAorIyBuZWVkZWQgZm9yIG00IG1hY3Jvcy4KK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLW5hdGl2ZSIKIAogIyBUaGlzIGlzIHVzZWQgYnkgaW50cm9zcGVjdGlvbiB0b29scyB0byBmaW5kIC5naXIgaW5jbHVkZXMKIGV4cG9ydCBYREdfREFUQV9ESVJTID0gIiR7U1RBR0lOR19EQVRBRElSfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwppbmRleCA0Y2UzZDI4Li4xNzQxN2JhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dydWItZWZpLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzCkBAIC00NSw2ICs0NSw4IEBACiAJCUdSVUJfSU1BR0U9ImJvb3R4NjQuZWZpIgogCWZpCiAJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtHUlVCX0lNQUdFfSAke0RFU1R9JHtFRklESVJ9CisJRUZJUEFUSD0kKGVjaG8gIiR7RUZJRElSfSIgfCBzZWQgJ3MvXC8vXFwvZycpCisJcHJpbnRmICdmczA6JXNcJXNcbicgIiRFRklQQVRIIiAiJEdSVUJfSU1BR0UiID4ke0RFU1R9L3N0YXJ0dXAubnNoCiAKIAlpbnN0YWxsIC1tIDA2NDQgJHtHUlVCX0NGR30gJHtERVNUfSR7RUZJRElSfS9ncnViLmNmZwogfQpAQCAtNTcsNyArNTksNyBAQAogCWNwICRpc29fZGlyLyR7RUZJRElSfS8qICR7RUZJSU1HRElSfSR7RUZJRElSfQogCWNwICRpc29fZGlyL3ZtbGludXogJHtFRklJTUdESVJ9CiAJRUZJUEFUSD0kKGVjaG8gIiR7RUZJRElSfSIgfCBzZWQgJ3MvXC8vXFwvZycpCi0JZWNobyAiZnMwOiR7RUZJUEFUSH1cXCR7R1JVQl9JTUFHRX0iID4gJHtFRklJTUdESVJ9L3N0YXJ0dXAubnNoCisJcHJpbnRmICdmczA6JXNcJXNcbicgIiRFRklQQVRIIiAiJEdSVUJfSU1BR0UiID4gJHtFRklJTUdESVJ9L3N0YXJ0dXAubnNoCiAJaWYgWyAtZiAiJGlzb19kaXIvaW5pdHJkIiBdIDsgdGhlbgogCQljcCAkaXNvX2Rpci9pbml0cmQgJHtFRklJTUdESVJ9CiAJZmkKQEAgLTg4LDEyICs5MCwxMiBAQAogCiAgICAgY2ZpbGUgPSBkLmdldFZhcignR1JVQl9DRkcnLCBUcnVlKQogICAgIGlmIG5vdCBjZmlsZToKLSAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnVW5hYmxlIHRvIHJlYWQgR1JVQl9DRkcnKQorICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHJlYWQgR1JVQl9DRkcnKQogCiAgICAgdHJ5OgotICAgICAgICAgY2ZnZmlsZSA9IGZpbGUoY2ZpbGUsICd3JykKKyAgICAgICAgIGNmZ2ZpbGUgPSBvcGVuKGNmaWxlLCAndycpCiAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisgICAgICAgIGJiLmZhdGFsKCdVbmFibGUgdG8gb3BlbiAlcycgJSBjZmlsZSkKIAogICAgIGNmZ2ZpbGUud3JpdGUoJyMgQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IE9FXG4nKQogCkBAIC0xMTIsNyArMTE0LDcgQEAKIAogICAgIHJvb3QgPSBkLmdldFZhcignR1JVQl9ST09UJywgVHJ1ZSkKICAgICBpZiBub3Qgcm9vdDoKLSAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnR1JVQl9ST09UIG5vdCBkZWZpbmVkJykKKyAgICAgICAgYmIuZmF0YWwoJ0dSVUJfUk9PVCBub3QgZGVmaW5lZCcpCiAKICAgICBpZiBnZnhzZXJpYWwgPT0gIjEiOgogICAgICAgICBidHlwZXMgPSBbIFsgIiBncmFwaGljcyBjb25zb2xlIiwgIiIgXSwKQEAgLTEyNSw3ICsxMjcsNyBAQAogCiAgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpCiAgICAgICAgIGlmIG5vdCBvdmVycmlkZXM6Ci0gICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQorICAgICAgICAgICAgYmIuZmF0YWwoJ09WRVJSSURFUyBub3QgZGVmaW5lZCcpCiAKICAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQpAQCAtMTQ0LDcgKzE0Niw4IEBACiAKICAgICAgICAgICAgIGlmIGFwcGVuZDoKICAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKLSAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcycgJSAoYXBwZW5kKSkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCcgJXMnICUgKGFwcGVuZCkpCisKICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyAlcycgJSBidHlwZVsxXSkKICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xuJykKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstZG9jLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcwppbmRleCBlMzJmOThkLi4yOTdlYWM2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcwpAQCAtMSwyNSArMSw2OSBAQAotIyBIZWxwZXIgY2xhc3MgdG8gcHVsbCBpbiB0aGUgcmlnaHQgZ3RrLWRvYyBkZXBlbmRlbmNpZXMgYW5kIGRpc2FibGUKLSMgZ3RrLWRvYy4KKyMgSGVscGVyIGNsYXNzIHRvIHB1bGwgaW4gdGhlIHJpZ2h0IGd0ay1kb2MgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmUKKyMgZ3RrLWRvYyB0byBlbmFibGUgb3IgZGlzYWJsZSBkb2N1bWVudGF0aW9uIGJ1aWxkaW5nICh3aGljaCByZXF1cmllcyB0aGUKKyMgdXNlIG9mIHVzZXJtb2RlIHFlbXUpLgorCisjIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIFRydWUgaWYgYXBpLWRvY3VtZW50YXRpb24gaXMgaW4KKyMgRElTVFJPX0ZFQVRVUkVTIGFuZCBxZW11LXVzZXJtb2RlIGlzIGluIE1BQ0hJTkVfRkVBVFVSRVMsIGFuZCBGYWxzZSBvdGhlcndpc2UuCiAjCi0jIExvbmctdGVybSBpdCB3b3VsZCBiZSBncmVhdCBpZiB0aGlzIGNsYXNzIGNvdWxkIGJlIHRvZ2dsZWQgYmV0d2VlbgotIyBndGstZG9jLXN0dWItbmF0aXZlIGFuZCB0aGUgcmVhbCBndGstZG9jLW5hdGl2ZSwgd2hpY2ggd291bGQgZW5hYmxlCi0jIHJlLWdlbmVyYXRpb24gb2YgZG9jdW1lbnRhdGlvbi4gIEZvciBub3csIHdlJ2xsIG1ha2UgZG8gd2l0aCB0aGlzIHdoaWNoCi0jIHBhY2thZ2VzIHVwIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIChzbyBmcm9tIHRhcmJhbGwgYnVpbGRzKS4KKyMgSXQgc2hvdWxkIGJlIHVzZWQgaW4gcmVjaXBlcyB0byBkZXRlcm1pbmUgd2hldGhlciBndGstZG9jIGJhc2VkIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGJ1aWx0LAorIyBzbyB0aGF0IHFlbXUgdXNlIGNhbiBiZSBhdm9pZGVkIHdoZW4gbmVjZXNzYXJ5LgorR1RLRE9DX0VOQUJMRUQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYXBpLWRvY3VtZW50YXRpb24nLCBcCisgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncWVtdS11c2VybW9kZScsICdUcnVlJywgJ0ZhbHNlJywgZCksICdGYWxzZScsIGQpfSIKKworRVhUUkFfT0VDT05GX3ByZXBlbmRfY2xhc3MtdGFyZ2V0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHVEtET0NfRU5BQkxFRCcsICdUcnVlJywgJy0tZW5hYmxlLWd0ay1kb2MgLS1lbmFibGUtZ3RrLWRvYy1odG1sIC0tZGlzYWJsZS1ndGstZG9jLXBkZicsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtZ3RrLWRvYycsIGQpfSAiCisKKyMgV2hlbiBidWlsZGluZyBuYXRpdmUgcmVjaXBlcywgZGlzYWJsZSBndGtkb2MsIGFzIGl0IGlzIG5vdCBuZWNlc3NhcnksCisjIHB1bGxzIGluIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBhbmQgbWFrZXMgYnVpbGQgdGltZXMgbG9uZ2VyCitFWFRSQV9PRUNPTkZfcHJlcGVuZF9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWd0ay1kb2MgIgorRVhUUkFfT0VDT05GX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIi0tZGlzYWJsZS1ndGstZG9jICIKKworREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBndGstZG9jLW5hdGl2ZSBxZW11LW5hdGl2ZSIKKworIyBFdmVuIHRob3VnaCBndGtkb2MgaXMgZGlzYWJsZWQgb24gLW5hdGl2ZSwgZ3RrLWRvYyBwYWNrYWdlIGlzIHN0aWxsCisjIG5lZWRlZCBmb3IgbTQgbWFjcm9zLgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBndGstZG9jLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgZ3RrLWRvYy1uYXRpdmUiCiAKICMgVGhlIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LCB3aGVyZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgd2lsbCBiZSBjb3BpZWQuCiAjIGd0a2RvY2l6ZSBoYXMgYSBkZWZhdWx0IG9mICIuIiBzbyB0byBoYW5kbGUgb3V0LW9mLXRyZWUgYnVpbGRzIHNldCB0aGlzIHRvICRTLgogR1RLRE9DX0RPQ0RJUiA/PSAiJHtTfSIKIAotREVQRU5EU19hcHBlbmQgPSAiIGd0ay1kb2Mtc3R1Yi1uYXRpdmUiCi0KLUVYVFJBX09FQ09ORl9hcHBlbmQgPSAiXAotICAtLWRpc2FibGUtZ3RrLWRvYyBcCi0gIC0tZGlzYWJsZS1ndGstZG9jLWh0bWwgXAotICAtLWRpc2FibGUtZ3RrLWRvYy1wZGYgXAotIgotCiBkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0JKCBjZCAke1N9OyBndGtkb2NpemUgLS1kb2NkaXIgJHtHVEtET0NfRE9DRElSfSApCisJKCBjZCAke1N9OyBndGtkb2NpemUgLS1kb2NkaXIgJHtHVEtET0NfRE9DRElSfSB8fCB0cnVlICkKIH0KIAoraW5oZXJpdCBxZW11CisKK2V4cG9ydCBTVEFHSU5HX0RJUl9IT1NUCisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCisgICAgICAgICMgV3JpdGUgb3V0IGEgcWVtdSB3cmFwcGVyIHRoYXQgd2lsbCBiZSBnaXZlbiB0byBndGtkb2Mtc2NhbmdvYmogc28gdGhhdCBpdAorICAgICAgICAjIGNhbiBydW4gdGFyZ2V0IGhlbHBlciBiaW5hcmllcyB0aHJvdWdoIHRoYXQuCisgICAgICAgIHFlbXVfYmluYXJ5PSIke0BxZW11X3dyYXBwZXJfY21kbGluZShkLCAnJFNUQUdJTkdfRElSX0hPU1QnLCBbJ1wkR0lSX0VYVFJBX0xJQlNfUEFUSCcsJyRTVEFHSU5HX0RJUl9IT1NULyR7bGliZGlyfScsJyRTVEFHSU5HX0RJUl9IT1NULyR7YmFzZV9saWJkaXJ9J10pfSIKKyAgICAgICAgY2F0ID4gJHtCfS9ndGtkb2MtcWVtdXdyYXBwZXIgPDwgRU9GCisjIS9iaW4vc2gKKyMgVXNlIGEgbW9kdWxlcyBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBleGlzdCBzbyB3ZSBkb24ndCBsb2FkIHJhbmRvbSB0aGluZ3MKKyMgd2hpY2ggbWF5IHRoZW4gZ2V0IGRlbGV0ZWQgKG9yIHRoZWlyIGRlcGVuZGVuY2llcykgYW5kIHBvdGVudGlhbGx5IHNlZ2ZhdWx0CitleHBvcnQgR0lPX01PRFVMRV9ESVI9JHtTVEFHSU5HX0xJQkRJUn0vZ2lvL21vZHVsZXMtZHVtbXkKKworR0lSX0VYVFJBX0xJQlNfUEFUSD1cYGZpbmQgJHtCfSAtbmFtZSAubGlic3wgdHIgJ1xuJyAnOidcYFwkR0lSX0VYVFJBX0xJQlNfUEFUSAorCitpZiB0ZXN0IC1kICIubGlicyI7IHRoZW4KKyAgICAkcWVtdV9iaW5hcnkgIi5saWJzL1wkQCIKK2Vsc2UKKyAgICAkcWVtdV9iaW5hcnkgIlwkQCIKK2ZpCisKK2lmIFsgXCQ/IC1uZSAwIF07IHRoZW4KKyAgICBlY2hvICJJZiB0aGUgYWJvdmUgZXJyb3IgbWVzc2FnZSBpcyBhYm91dCBtaXNzaW5nIC5zbyBsaWJyYXJpZXMsIHRoZW4gc2V0dGluZyB1cCBHSVJfRVhUUkFfTElCU19QQVRIIGluIHRoZSByZWNpcGUgc2hvdWxkIGhlbHAuIgorICAgIGVjaG8gIih0eXBpY2FsbHkgbGlrZSB0aGlzOiBHSVJfRVhUUkFfTElCU19QQVRIPVwiJCIie0J9L3NvbWV0aGluZy8ubGlic1wiICkiCisgICAgZXhpdCAxCitmaQorRU9GCisgICAgICAgIGNobW9kICt4ICR7Qn0vZ3RrZG9jLXFlbXV3cmFwcGVyCit9CisKKwogaW5oZXJpdCBwa2djb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKaW5kZXggYzA5OWNkMy4uZWJiYzlkZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKQEAgLTE1LDcgKzE1LDggQEAKICAgICAgICAgICAgICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtMi4wJyl9IFwKICAgICAgICAgICAgICAgICAkSU1GSUxFUyA+ICREJHtsaWJkaXJ9L2d0ay0yLjAvMi4xMC4wL2ltbW9kdWxlcy5jYWNoZSAyPi9kZXYvbnVsbCAmJgogICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAiczokRDo6IiAkRCR7bGliZGlyfS9ndGstMi4wLzIuMTAuMC9pbW1vZHVsZXMuY2FjaGUKLSAgICAgICAgZWxpZiBbIC14ICREJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtMy4wIF07IHRoZW4KKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLTMuMCBdOyB0aGVuCiAgICAgICAgICAgICBJTUZJTEVTPSQobHMgJEQke2xpYmRpcn0vZ3RrLTMuMC8qL2ltbW9kdWxlcy8qLnNvKQogICAgICAgICAgICAgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAnKX0gXAogICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQke2xpYmRpcn0vZ3RrLTMuMC8zLjAuMC9pbW1vZHVsZXMuY2FjaGUgMj4vZGV2L251bGwgJiYKQEAgLTQwLDcgKzQxLDggQEAKICAgICAgICAgICAgICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtMi4wJyl9IFwKICAgICAgICAgICAgICAgICAkSU1GSUxFUyA+ICREJHtsaWJkaXJ9L2d0ay0yLjAvMi4xMC4wL2ltbW9kdWxlcy5jYWNoZSAyPi9kZXYvbnVsbCAmJgogICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAiczokRDo6IiAkRCR7bGliZGlyfS9ndGstMi4wLzIuMTAuMC9pbW1vZHVsZXMuY2FjaGUKLSAgICAgICAgZWxpZiBbIC14ICREJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtMy4wIF07IHRoZW4KKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLTMuMCBdOyB0aGVuCiAgICAgICAgICAgICBJTUZJTEVTPSQobHMgJEQke2xpYmRpcn0vZ3RrLTMuMC8qL2ltbW9kdWxlcy8qLnNvKQogICAgICAgICAgICAgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAnKX0gXAogICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQke2xpYmRpcn0vZ3RrLTMuMC8zLjAuMC9pbW1vZHVsZXMuY2FjaGUgMj4vZGV2L251bGwgJiYKQEAgLTgyLDYgKzg0LDYgQEAKICAgICAgICAgZ3RraW1tb2R1bGVzX2NoZWNrID0gZC5nZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsIEZhbHNlKQogICAgICAgICBpZiBub3QgZ3RraW1tb2R1bGVzX2NoZWNrOgogICAgICAgICAgICAgYmJfZmlsZW5hbWUgPSBkLmdldFZhcignRklMRScsIEZhbHNlKQotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiRVJST1I6ICVzIGluaGVyaXRzIGd0ay1pbW1vZHVsZXMtY2FjaGUgYnV0IGRvZXNuJ3Qgc2V0IEdUS0lNTU9EVUxFU19QQUNLQUdFUyIgJSBiYl9maWxlbmFtZSkKKyAgICAgICAgICAgIGJiLmZhdGFsKCJFUlJPUjogJXMgaW5oZXJpdHMgZ3RrLWltbW9kdWxlcy1jYWNoZSBidXQgZG9lc24ndCBzZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIiAlIGJiX2ZpbGVuYW1lKQogfQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d1bW1pYm9vdC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcwppbmRleCAxZWJiOTQ2Li40ZjJkZWE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d1bW1pYm9vdC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3VtbWlib290LmJiY2xhc3MKQEAgLTM0LDYgKzM0LDggQEAKICAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9L2xvYWRlcgogICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0vbG9hZGVyL2VudHJpZXMKICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtFRklfSU1BR0V9ICR7REVTVH0ke0VGSURJUn0vJHtERVNUX0VGSV9JTUFHRX0KKyAgICAgICAgRUZJUEFUSD0kKGVjaG8gIiR7RUZJRElSfSIgfCBzZWQgJ3MvXC8vXFwvZycpCisgICAgICAgIHByaW50ZiAnZnMwOiVzXCVzXG4nICIkRUZJUEFUSCIgIiRERVNUX0VGSV9JTUFHRSIgPiR7REVTVH0vc3RhcnR1cC5uc2gKICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7R1VNTUlCT09UX0NGR30gJHtERVNUfS9sb2FkZXIvbG9hZGVyLmNvbmYKICAgICAgICAgZm9yIGkgaW4gJHtHVU1NSUJPT1RfRU5UUklFU307IGRvCiAgICAgICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtpfSAke0RFU1R9L2xvYWRlci9lbnRyaWVzCkBAIC03Miw3ICs3NCw3IEBACiAgICAgdHJ5OgogICAgICAgICAgY2ZnZmlsZSA9IG9wZW4oY2ZpbGUsICd3JykKICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcmFpc2UgYmIuYnVpbGQuZnVuY0ZhaWxlZCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgKGNmaWxlKSkKKyAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBvcGVuICVzJyAlIGNmaWxlKQogCiAgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCiAgICAgY2ZnZmlsZS53cml0ZSgnZGVmYXVsdCAlc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCkBAIC04OCwxNCArOTAsMTQgQEAKIAogICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQogICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKyAgICAgICAgICAgIGJiLmZhdGFsKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQogCiAgICAgICAgIGVudHJ5ZmlsZSA9ICIlcy8lcy5jb25mIiAlIChzLCBsYWJlbCkKICAgICAgICAgZC5hcHBlbmRWYXIoIkdVTU1JQk9PVF9FTlRSSUVTIiwgIiAiICsgZW50cnlmaWxlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbnRyeWNmZyA9IG9wZW4oZW50cnlmaWxlLCAidyIpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuZnVuY0ZhaWxlZCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgKGVudHJ5ZmlsZSkpCisgICAgICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgZW50cnlmaWxlKQogICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcwppbmRleCBlMWMwNmM0Li5hODM3ODk0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pY2VjYy5iYmNsYXNzCkBAIC00Nyw3ICs0Nyw4IEBACiAKICAgICAjIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGJ5IHRoZSBzaGVsbCBpZiBuZWNlc3NhcnkKICAgICBpZiAnYCcgaW4ga2VybmVsX2NjIG9yICckKCcgaW4ga2VybmVsX2NjOgotICAgICAgICBrZXJuZWxfY2MgPSBvcy5wb3BlbigiZWNobyAlcyIgJSBrZXJuZWxfY2MpLnJlYWQoKVs6LTFdCisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGtlcm5lbF9jYyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJlY2hvICVzIiAlIGtlcm5lbF9jYywgc2hlbGw9VHJ1ZSkuZGVjb2RlKCJ1dGYtOCIpWzotMV0KIAogICAgIGtlcm5lbF9jYyA9IGQuZXhwYW5kKGtlcm5lbF9jYykKICAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2MucmVwbGFjZSgnY2NhY2hlJywgJycpLnN0cmlwKCkKQEAgLTIyMCw5ICsyMjEsMTQgQEAKICAgICAjIFBBVEggb3IgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgd2lsbCBzaWxlbnRseSBjcmVhdGUgYW4gaW52YWxpZAogICAgICMgY29tcGlsZXIgZW52aXJvbm1lbnQgcGFja2FnZS4KICAgICB0ID0gaWNlY2NfZ2V0X3Rvb2woYmIsIGQsIHRvb2wpCi0gICAgaWYgdCBhbmQgb3MucG9wZW4oInJlYWRsaW5rIC1mICVzIiAlIHQpLnJlYWQoKVs6LTFdID09IGdldF9pY2VjYyhkKToKLSAgICAgICAgYmIuZXJyb3IoIiVzIGlzIGEgc3ltbGluayB0byAlcyBpbiBQQVRIIGFuZCB0aGlzIHByZXZlbnRzIGljZWNjIGZyb20gd29ya2luZyIgJSAodCwgZ2V0X2ljZWNjKGQpKSkKLSAgICAgICAgcmV0dXJuICIiCisgICAgaWYgdDoKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgbGlua19wYXRoID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoInJlYWRsaW5rIC1mICVzIiAlIHQsIHNoZWxsPVRydWUpLmRlY29kZSgidXRmLTgiKVs6LTFdCisgICAgICAgIGlmIGxpbmtfcGF0aCA9PSBnZXRfaWNlY2MoZCk6CisgICAgICAgICAgICBiYi5lcnJvcigiJXMgaXMgYSBzeW1saW5rIHRvICVzIGluIFBBVEggYW5kIHRoaXMgcHJldmVudHMgaWNlY2MgZnJvbSB3b3JraW5nIiAlICh0LCBnZXRfaWNlY2MoZCkpKQorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiB0CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLWJ1aWxkaW5mby5iYmNsYXNzCmluZGV4IDE5N2IyNDIuLjMwMDNmNWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1idWlsZGluZm8uYmJjbGFzcwpAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAgICAgICAgIHJldHVybiAiIgotICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwgZXg6CisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4OgogICAgICAgICAjIFNpbGVudGx5IHRyZWF0IGVycm9ycyBhcyAibW9kaWZpZWQiLCB3aXRob3V0IGNoZWNraW5nIGZvciB0aGUKICAgICAgICAgIyAoZXhwZWN0ZWQpIHJldHVybiBjb2RlIDEgaW4gYSBtb2RpZmllZCBnaXQgcmVwby4gRm9yIGV4YW1wbGUsIHdlIGdldAogICAgICAgICAjIG91dHB1dCBhbmQgYSAxMjkgcmV0dXJuIGNvZGUgd2hlbiBhIGxheWVyIGlzbid0IGEgZ2l0IHJlcG8gYXQgYWxsLgpAQCAtNzEsNyArNzEsOSBAQAogTGF5ZXIgUmV2aXNpb25zOiAgICAgIHwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAnJycsCi0gICAgICAgICAgICBnZXRfbGF5ZXJfcmV2cyhkKQorICAgICAgICAgICAgZ2V0X2xheWVyX3JldnMoZCksCisgICAgICAgICAgICAnJycKKycnJwogICAgICAgICkpCiB9CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKaW5kZXggYzhhODYxMC4uNGE2MzRkYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKQEAgLTQzLDcgKzQzLDcgQEAKIElOSVRSRF9JTUFHRV9MSVZFID89ICJjb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIgogSU5JVFJEX0xJVkUgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0VfTElWRX0tJHtNQUNISU5FfS5jcGlvLmd6IgogCi1ST09URlMgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmV4dDQiCitST09URlMgPz0gIiR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX0xJTktfTkFNRX0uZXh0NCIKIAogSU1BR0VfVFlQRURFUF9saXZlID0gImV4dDQiCiBJTUFHRV9UWVBFREVQX2lzbyA9ICJleHQ0IgpAQCAtNTYsNyArNTYsNyBAQAogICAgIGlmIGltYWdlX2IgPT0gaW5pdHJkX2k6CiAgICAgICAgIGJiLmVycm9yKCdJTklUUkRfSU1BR0VfTElWRSAlcyBjYW5ub3QgdXNlIGltYWdlIGxpdmUsIGhkZGltZyBvciBpc28uJyAlIGluaXRyZF9pKQogICAgICAgICBiYi5mYXRhbCgnQ2hlY2sgSU1BR0VfRlNUWVBFUyBhbmQgSU5JVFJBTUZTX0ZTVFlQRVMgc2V0dGluZ3MuJykKLSAgICBlbHNlOgorICAgIGVsaWYgaW5pdHJkX2k6CiAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYm9vdGltZycsICdkZXBlbmRzJywgJyAlczpkb19pbWFnZV9jb21wbGV0ZScgJSBpbml0cmRfaSkKIH0KIApAQCAtMTQ0LDE0ICsxNDQsMTQgQEAKIAlpZiBbICIke1BDQklPU30iID0gIjEiIF0gJiYgWyAiJHtFRkl9IiAhPSAiMSIgXSA7IHRoZW4KIAkJIyBQQ0JJT1Mgb25seSBtZWRpYQogCQlta2lzb2ZzIC1WICR7Qk9PVElNR19WT0xVTUVfSUR9IFwKLQkJICAgICAgICAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaXNvIFwKKwkJICAgICAgICAtbyAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfS5pc28gXAogCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAogCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyBcCiAJCQkke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsICR7SVNPRElSfQogCWVsc2UKIAkJIyBFRkkgb25seSBPUiBFRkkrUENCSU9TCiAJCW1raXNvZnMgLUEgJHtCT09USU1HX1ZPTFVNRV9JRH0gLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAotCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkgICAgICAgIC1vICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9LmlzbyBcCiAJCQktYiAke0lTT19CT09USU1HfSAtYyAke0lTT19CT09UQ0FUfSBcCiAJCQkkbWtpc29mc19jb21wcmVzc19vcHRzICR7TUtJU09GU19PUFRJT05TfSAkbWtpc29mc19pc29fbGV2ZWwgXAogCQkJLWVsdG9yaXRvLWFsdC1ib290IC1lbHRvcml0by1wbGF0Zm9ybSBlZmkgXApAQCAtMTYwLDcgKzE2MCw3IEBACiAJCWlzb2h5YnJpZF9hcmdzPSItdSIKIAlmaQogCi0JaXNvaHlicmlkICRpc29oeWJyaWRfYXJncyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaXNvCisJaXNvaHlicmlkICRpc29oeWJyaWRfYXJncyAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfS5pc28KIH0KIAogYnVpbGRfZmF0X2ltZygpIHsKQEAgLTIwMiwxMiArMjAyLDYgQEAKIAkjIERldGVybWluZSB0aGUgZmluYWwgc2l6ZSBpbiBibG9ja3MgYWNjb3VudGluZyBmb3Igc29tZSBwYWRkaW5nCiAJQkxPQ0tTPSQoZXhwciAkKGV4cHIgJFNFQ1RPUlMgLyAyKSArICR7Qk9PVElNR19FWFRSQV9TUEFDRX0pCiAKLQkjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgotCSMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKLQkjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCi0JIyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuCi0JQkxPQ0tTPSQoZXhwciAkQkxPQ0tTICsgJChleHByIDE2IC0gJChleHByICRCTE9DS1MgJSAxNikpKQotCiAJIyBta2Rvc2ZzIHdpbGwgc29tZXRpbWVzIHVzZSBGQVQxNiB3aGVuIGl0IGlzIG5vdCBhcHByb3ByaWF0ZSwKIAkjIHJlc3VsdGluZyBpbiBhIGJvb3QgZmFpbHVyZSBmcm9tIFNZU0xJTlVYLiBVc2UgRkFUMzIgZm9yCiAJIyBpbWFnZXMgbGFyZ2VyIHRoYW4gNTEyTUIsIG90aGVyd2lzZSBsZXQgbWtkb3NmcyBkZWNpZGUuCkBAIC0yNTgsMTMgKzI1MiwxMyBAQAogCQkJZmkKIAkJZmkKIAotCQlidWlsZF9mYXRfaW1nICR7SERERElSfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkaW1nCisJCWJ1aWxkX2ZhdF9pbWcgJHtIRERESVJ9ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9LmhkZGltZwogCiAJCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgogCQkJc3lzbGludXhfaGRkaW1nX2luc3RhbGwKIAkJZmkKIAotCQljaG1vZCA2NDQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGltZworCQljaG1vZCA2NDQgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0uaGRkaW1nCiAJZmkKIH0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXN3YWIuYmJjbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIwMmNhZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXN3YWIuYmJjbGFzcworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLUhPU1RfREFUQSA/PSAiJHtUTVBESVJ9L2hvc3QtY29udGFtaW5hdGlvbi1kYXRhLyIKLVNXQUJCRVJfUkVQT1JUID89ICIke0xPR19ESVJ9L3N3YWJiZXIvIgotU1dBQkJFUl9MT0dTID89ICIke0xPR19ESVJ9L2NvbnRhbWluYXRpb24tbG9ncyIKLVRSQUNFX0xPR0RJUiA/PSAiJHtTV0FCQkVSX0xPR1N9LyR7UEFDS0FHRV9BUkNIfSIKLVRSQUNFX0xPR0ZJTEUgPSAiJHtUUkFDRV9MT0dESVJ9LyR7UE59LSR7UFZ9IgotCi1TV0FCX09SSUdfVEFTSyA6PSAiJHtCQl9ERUZBVUxUX1RBU0t9IgotQkJfREVGQVVMVF9UQVNLID0gImdlbmVyYXRlX3N3YWJiZXJfcmVwb3J0IgotCi0jIFNldmVyYWwgcmVjaXBlcyBkb24ndCBidWlsZCB3aXRoIHBhcmFsbGVsIG1ha2Ugd2hlbiBydW4gdW5kZXIgc3RyYWNlCi0jIElkZWFsbHkgdGhlc2Ugc2hvdWxkIGJlIGZpeGVkIGJ1dCBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlIGRpc2FibGUgcGFyYWxsZWwKLSMgYnVpbGRzIGZvciB0cm91Ymxlc29tZSByZWNpcGVzCi1QQVJBTExFTF9NQUtFX3BuLW9wZW5zc2wgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1nbGliYyA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLWdsaWItMi4wID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tbGlieG1sMiA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLXJlYWRsaW5lID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tdXRpbC1saW51eCA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLWJpbnV0aWxzID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tYmlzb24gPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1jbWFrZSA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLWVsZnV0aWxzID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tZ2NjID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tZ2NjLXJ1bnRpbWUgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1tNCA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLW9wa2cgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1wa2djb25maWcgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1wcmVsaW5rID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tcnBtID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tdGNsID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tYmVlY3J5cHQgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1jdXJsID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tZ21wID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tbGlibXBjID0gIiIKLVBBUkFMTEVMX01BS0VfcG4tbGlieHNsdCA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLWx6byA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLXBvcHQgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1saW51eC13cnMgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1saWJnY3J5cHQgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1ncGdtZSA9ICIiCi1QQVJBTExFTF9NQUtFX3BuLXVkZXYgPSAiIgotUEFSQUxMRUxfTUFLRV9wbi1nbnV0bHMgPSAiIgotCi1weXRob24oKSB7Ci0gICAgIyBOT1RFOiBJdCBtaWdodCBiZSB1c2VmdWwgdG8gZGV0ZWN0IGhvc3QgaW5mZWN0aW9uIG9uIG5hdGl2ZSBhbmQgY3Jvc3MKLSAgICAjIHBhY2thZ2VzIGJ1dCBhcyBpdCB0dXJucyBvdXQgdG8gYmUgcHJldHR5IGhhcmQgdG8gZG8gdGhpcyBmb3IgYWxsIG5hdGl2ZQotICAgICMgYW5kIGNyb3NzIHBhY2thZ2VzIHdoaWNoIGFyZW4ndCBzd2FiYmVyLW5hdGl2ZSBvciBvbmUgb2YgaXRzIGRlcGVuZGVuY2llcwotICAgICMgSSBoYXZlIGlnbm9yZWQgdGhlbSBmb3Igbm93Li4uCi0gICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgotICAgICAgICBkZXBzID0gKGQuZ2V0VmFyRmxhZygnZG9fc2V0c2NlbmUnLCAnZGVwZW5kcycsIFRydWUpIG9yICIiKS5zcGxpdCgpCi0gICAgICAgIGRlcHMuYXBwZW5kKCdzdHJhY2UtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQotICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3NldHNjZW5lJywgJ2RlcGVuZHMnLCAiICIuam9pbihkZXBzKSkKLSAgICAgICAgbG9nZGlyID0gZC5leHBhbmQoIiR7VFJBQ0VfTE9HRElSfSIpCi0gICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dkaXIpCi0gICAgZWxzZToKLSAgICAgICAgZC5zZXRWYXIoJ1NUUkFDRUZVTkMnLCAnJykKLX0KLQotU1RSQUNFUElEID0gIiR7QG9zLmdldHBpZCgpfSIKLVNUUkFDRUZVTkMgPSAiaW1hZ2Vzd2FiX2F0dGFjaHN0cmFjZSIKLQotZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiJHtTVFJBQ0VGVU5DfSIKLWRvX2NvbXBpbGVbcHJlZnVuY3NdICs9ICIke1NUUkFDRUZVTkN9IgotCi1pbWFnZXN3YWJfYXR0YWNoc3RyYWNlICgpIHsKLQlTVFJBQ0U9YHdoaWNoIHN0cmFjZWAKLQotCWlmIFsgLXggIiRTVFJBQ0UiIF07IHRoZW4KLQkJc3dhYmJlci1zdHJhY2UtYXR0YWNoICIkU1RSQUNFIC1mIC1vICR7VFJBQ0VfTE9HRklMRX0tJHtCQl9DVVJSRU5UVEFTS30ubG9nIC1lIHRyYWNlPW9wZW4sZXhlY3ZlIC1wICR7U1RSQUNFUElEfSIgIiR7VFJBQ0VfTE9HRklMRX0tdHJhY2VhdHRhY2gtJHtCQl9DVVJSRU5UVEFTS30ubG9nIgotCWZpCi19Ci0KLWRvX2dlbmVyYXRlX3N3YWJiZXJfcmVwb3J0ICgpIHsKLQotCXVwZGF0ZV9kaXN0cm8gJHtIT1NUX0RBVEF9Ci0KLQkjIFN3YWJiZXIgY2FuJ3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHVzCi0JbWtkaXIgLXAgJHtTV0FCQkVSX1JFUE9SVH0KLQotCVJFUE9SVFNUQU1QPSR7U1dBQl9PUklHX1RBU0t9LWBkYXRlICslMm0lMmQlMkglMk0lWWAKLQotCWlmIFsgYHdoaWNoIGNjYWNoZWAgXSA7IHRoZW4KLQkJQ0NBQ0hFX0RJUj1gKCBjY2FjaGUgLXMgfCBncmVwICJjYWNoZSBkaXJlY3RvcnkiIHwgZ3JlcCAtbyAnW14gXSokJyAyPiAvZGV2L251bGwgKWAKLSAJZmkKLQotCWlmIFsgIiQobHMgLUEgJHtIT1NUX0RBVEF9KSIgXTsgdGhlbgotCQllY2hvICJHZW5lcmF0aW5nIHN3YWJiZXIgcmVwb3J0IgotCQlzd2FiYmVyIC1kICR7SE9TVF9EQVRBfSAtbCAke1NXQUJCRVJfTE9HU30gLW8gJHtTV0FCQkVSX1JFUE9SVH0vcmVwb3J0LSR7UkVQT1JUU1RBTVB9LnR4dCAtciAke1NXQUJCRVJfUkVQT1JUfS9leHRyYV9yZXBvcnQtJHtSRVBPUlRTVEFNUH0udHh0IC1jIGFsbCAtcCAke1RPUERJUn0gLWYgJHtPRVJPT1R9L21ldGEvY29uZi9zd2FiYmVyICR7VE9QRElSfSAke09FUk9PVH0gJHtDQ0FDSEVfRElSfQotCWVsc2UKLQkJZWNobyAiTm8gaG9zdCBkYXRhLCBjYW5ub3QgZ2VuZXJhdGUgc3dhYmJlciByZXBvcnQuIgotCWZpCi19Ci1hZGR0YXNrIGdlbmVyYXRlX3N3YWJiZXJfcmVwb3J0IGFmdGVyIGRvXyR7U1dBQl9PUklHX1RBU0t9Ci1kb19nZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydFtkZXBlbmRzXSA9ICJzd2FiYmVyLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCmluZGV4IDQ3ZjczMjYuLjJmMzVkNmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2Utdm0uYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MKQEAgLTIzLDIzICsyMywyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2xpbnV4LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ZWQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn06ZG9faW1hZ2VfZXh0NCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn06ZG9faW1hZ2VfJHtWTV9ST09URlNfVFlQRX0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKIAotSU1BR0VfVFlQRURFUF92bWRrID0gImV4dDQiCi1JTUFHRV9UWVBFREVQX3ZkaSA9ICJleHQ0IgotSU1BR0VfVFlQRURFUF9xY293MiA9ICJleHQ0IgotSU1BR0VfVFlQRURFUF9oZGRkaXJlY3QgPSAiZXh0NCIKK0lNQUdFX1RZUEVERVBfdm1kayA9ICIke1ZNX1JPT1RGU19UWVBFfSIKK0lNQUdFX1RZUEVERVBfdmRpID0gIiR7Vk1fUk9PVEZTX1RZUEV9IgorSU1BR0VfVFlQRURFUF9xY293MiA9ICIke1ZNX1JPT1RGU19UWVBFfSIKK0lNQUdFX1RZUEVERVBfaGRkZGlyZWN0ID0gIiR7Vk1fUk9PVEZTX1RZUEV9IgogSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJ2bWRrIHZkaSBxY293MiBoZGRkaXJlY3QiCiAKLVJPT1RGUyA/PSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uZXh0NCIKK1ZNX1JPT1RGU19UWVBFID89ICJleHQ0IgorUk9PVEZTID89ICIke0lNR0RFUExPWURJUn0vJHtJTUFHRV9MSU5LX05BTUV9LiR7Vk1fUk9PVEZTX1RZUEV9IgogCiAjIFVzZWQgYnkgYm9vdGxvYWRlcgogTEFCRUxTX1ZNID89ICJib290IgogUk9PVF9WTSA/PSAicm9vdD0vZGV2L3NkYTIiCiAjIFVzaW5nIGFuIGluaXRyYW1mcyBpcyBvcHRpb25hbC4gRW5hYmxlIGl0IGJ5IHNldHRpbmcgSU5JVFJEX0lNQUdFX1ZNLgogSU5JVFJEX0lNQUdFX1ZNID89ICIiCi1JTklUUkRfVk0gPz0gIiR7QCcke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJEX0lNQUdFX1ZNfS0ke01BQ0hJTkV9LmNwaW8uZ3onIGlmICcke0lOSVRSRF9JTUFHRV9WTX0nIGVsc2UgJyd9IgorSU5JVFJEX1ZNID89ICIke0AnJHtJTUdERVBMT1lESVJ9LyR7SU5JVFJEX0lNQUdFX1ZNfS0ke01BQ0hJTkV9LmNwaW8uZ3onIGlmICcke0lOSVRSRF9JTUFHRV9WTX0nIGVsc2UgJyd9IgogZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7QCcke0lOSVRSRF9JTUFHRV9WTX06ZG9faW1hZ2VfY29tcGxldGUnIGlmICcke0lOSVRSRF9JTUFHRV9WTX0nIGVsc2UgJyd9IgogCiBCT09URERfVk9MVU1FX0lEICAgPz0gImJvb3QiCkBAIC01MSw3ICs1Miw3IEBACiBidWlsZF9ib290X2RkKCkgewogCUhERERJUj0iJHtTfS9oZGQvYm9vdCIKIAlIRERJTUc9IiR7U30vaGRkLmltYWdlIgotCUlNQUdFPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QKKwlJTUFHRT0ke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QKIAogCXBvcHVsYXRlX2tlcm5lbCAkSERERElSCiAKQEAgLTY1LDEyICs2Niw2IEBACiAJQkxPQ0tTPWBkdSAtYmtzICRIRERESVIgfCBjdXQgLWYgMWAKIAlCTE9DS1M9YGV4cHIgJEJMT0NLUyArICR7Qk9PVEREX0VYVFJBX1NQQUNFfWAKIAotCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCi0JIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQotCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKLQkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KLQlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCi0KIAkjIFJlbW92ZSBpdCBzaW5jZSBta2Rvc2ZzIHdvdWxkIGZhaWwgd2hlbiBpdCBleGlzdHMKIAlybSAtZiAkSERESU1HCiAJbWtkb3NmcyAtbiAke0JPT1RERF9WT0xVTUVfSUR9IC1TIDUxMiAtQyAkSERESU1HICRCTE9DS1MgCkBAIC0xMDksOSArMTA0LDkgQEAKIAlkZCBpZj0kSERESU1HIG9mPSRJTUFHRSBjb252PW5vdHJ1bmMgc2Vlaz0xIGJzPTUxMgogCWRkIGlmPSR7Uk9PVEZTfSBvZj0kSU1BR0UgY29udj1ub3RydW5jIHNlZWs9JE9GRlNFVCBicz01MTIKIAotCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KLQlybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5oZGRkaXJlY3QKLQlsbiAtcyAke0lNQUdFX05BTUV9LmhkZGRpcmVjdCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5oZGRkaXJlY3QKKwljZCAke0lNR0RFUExPWURJUn0KKworCWxuIC1zZiAke0lNQUdFX05BTUV9LmhkZGRpcmVjdCAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAogfSAKIAogcHl0aG9uIGRvX2Jvb3RkaXJlY3RkaXNrKCkgewpAQCAtMTQ2LDggKzE0MSw5IEBACiAKIHJ1bl9xZW11X2ltZyAoKXsKICAgICB0eXBlPSIkMSIKLSAgICBxZW11LWltZyBjb252ZXJ0IC1PICR0eXBlICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uJHR5cGUKLSAgICBsbiAtc2YgJHtJTUFHRV9OQU1FfS4kdHlwZSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS4kdHlwZQorICAgIHFlbXUtaW1nIGNvbnZlcnQgLU8gJHR5cGUgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTElOS19OQU1FfS5oZGRkaXJlY3QgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0uJHR5cGUKKworICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LiR0eXBlICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX0xJTktfTkFNRX0uJHR5cGUKIH0KIGNyZWF0ZV92bWRrX2ltYWdlICgpIHsKICAgICBydW5fcWVtdV9pbWcgdm1kawpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzCmluZGV4IDhiZmQyNDEuLjYxMTFmNmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLmJiY2xhc3MKQEAgLTc0LDYgKzc0LDggQEAKIGV4cG9ydCBQQUNLQUdFX0lOU1RBTEwgPz0gIiR7SU1BR0VfSU5TVEFMTH0gJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9ICR7RkVBVFVSRV9JTlNUQUxMfSIKIFBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSA/PSAiJHtGRUFUVVJFX0lOU1RBTExfT1BUSU9OQUx9IgogCitJTUdERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0taW1hZ2UtY29tcGxldGUiCisKICMgSW1hZ2VzIGFyZSBnZW5lcmFsbHkgYnVpbHQgZXhwbGljaXRseSwgZG8gbm90IG5lZWQgdG8gYmUgcGFydCBvZiB3b3JsZC4KIEVYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgogCkBAIC0xMTQsMTEgKzExNiwxMSBAQAogCiBkZWYgcm9vdGZzX3ZhcmlhYmxlcyhkKToKICAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgdmFyaWFibGVfZGVwZW5kcwotICAgIHZhcmlhYmxlcyA9IFsnSU1BR0VfREVWSUNFX1RBQkxFUycsJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywnSU1BR0VfVFlQRVNfTUFTS0VEJywnSU1BR0VfUk9PVEZTX0FMSUdOTUVOVCcsJ0lNQUdFX09WRVJIRUFEX0ZBQ1RPUicsJ0lNQUdFX1JPT1RGU19TSVpFJywnSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJywKLSAgICAgICAgICAgICAgICAgJ0lNQUdFX1JPT1RGU19NQVhTSVpFJywnSU1BR0VfTkFNRScsJ0lNQUdFX0xJTktfTkFNRScsJ0lNQUdFX01BTklGRVNUJywnREVQTE9ZX0RJUl9JTUFHRScsJ1JNX09MRF9JTUFHRScsJ0lNQUdFX0ZTVFlQRVMnLCdJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCdJTUFHRV9MSU5HVUFTJywKKyAgICB2YXJpYWJsZXMgPSBbJ0lNQUdFX0RFVklDRV9UQUJMRScsJ0lNQUdFX0RFVklDRV9UQUJMRVMnLCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsJ0lNQUdFX1RZUEVTX01BU0tFRCcsJ0lNQUdFX1JPT1RGU19BTElHTk1FTlQnLCdJTUFHRV9PVkVSSEVBRF9GQUNUT1InLCdJTUFHRV9ST09URlNfU0laRScsJ0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRScsCisgICAgICAgICAgICAgICAgICdJTUFHRV9ST09URlNfTUFYU0laRScsJ0lNQUdFX05BTUUnLCdJTUFHRV9MSU5LX05BTUUnLCdJTUFHRV9NQU5JRkVTVCcsJ0RFUExPWV9ESVJfSU1BR0UnLCdJTUFHRV9GU1RZUEVTJywnSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywnSU1BR0VfTElOR1VBUycsCiAgICAgICAgICAgICAgICAgICdNVUxUSUxJQlJFX0FMTE9XX1JFUCcsJ01VTFRJTElCX1RFTVBfUk9PVEZTJywnTVVMVElMSUJfVkFSSUFOVFMnLCdNVUxUSUxJQlMnLCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsJ01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUycsJ0JBRF9SRUNPTU1FTkRBVElPTlMnLCdOT19SRUNPTU1FTkRBVElPTlMnLAogICAgICAgICAgICAgICAgICAnUEFDS0FHRV9BUkNIUycsJ1BBQ0tBR0VfQ0xBU1NFUycsJ1RBUkdFVF9WRU5ET1InLCdUQVJHRVRfQVJDSCcsJ1RBUkdFVF9PUycsJ09WRVJSSURFUycsJ0JCRVhURU5EVkFSSUFOVCcsJ0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJJywnSU5URVJDRVBUX0RJUicsJ1VTRV9ERVZGUycsCi0gICAgICAgICAgICAgICAgICdDT01QUkVTU0lPTlRZUEVTJywgJ0lNQUdFX0dFTl9ERUJVR0ZTJywgJ1JPT1RGU19ST19VTk5FRURFRCddCisgICAgICAgICAgICAgICAgICdDT05WRVJTSU9OVFlQRVMnLCAnSU1BR0VfR0VOX0RFQlVHRlMnLCAnUk9PVEZTX1JPX1VOTkVFREVEJywgJ0lNR0RFUExPWURJUicsICdQQUNLQUdFX0VYQ0xVREVfQ09NUExFTUVOVEFSWSddCiAgICAgdmFyaWFibGVzLmV4dGVuZChyb290ZnNfY29tbWFuZF92YXJpYWJsZXMoZCkpCiAgICAgdmFyaWFibGVzLmV4dGVuZCh2YXJpYWJsZV9kZXBlbmRzKGQpKQogICAgIHJldHVybiAiICIuam9pbih2YXJpYWJsZXMpCkBAIC0xNjYsNyArMTY4LDcgQEAKICAgICAgICAgaWYgdGVtcDoKICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBjb250YWlucyBjb25mbGljdGluZyBJTUFHRV9GRUFUVVJFUyAlcyAlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGZlYXR1cmUsICcgJy5qb2luKGxpc3QodGVtcCkpKSkKIAotICAgIGQuc2V0VmFyKCdJTUFHRV9GRUFUVVJFUycsICcgJy5qb2luKGxpc3QocmVtYWluX2ZlYXR1cmVzKSkpCisgICAgZC5zZXRWYXIoJ0lNQUdFX0ZFQVRVUkVTJywgJyAnLmpvaW4oc29ydGVkKGxpc3QocmVtYWluX2ZlYXR1cmVzKSkpKQogCiAgICAgY2hlY2tfaW1hZ2VfZmVhdHVyZXMoZCkKICAgICBpbml0cmFtZnNfaW1hZ2UgPSBkLmdldFZhcignSU5JVFJBTUZTX0lNQUdFJywgVHJ1ZSkgb3IgIiIKQEAgLTE5OCw2ICsyMDAsMTcgQEAKICAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgY3JlYXRlX3Jvb3RmcwogICAgIGZyb20gb2UubWFuaWZlc3QgaW1wb3J0IGNyZWF0ZV9tYW5pZmVzdAogCisgICAgIyBOT1RFOiBpZiB5b3UgYWRkLCByZW1vdmUgb3Igc2lnbmlmaWNhbnRseSByZWZhY3RvciB0aGUgc3RhZ2VzIG9mIHRoaXMKKyAgICAjIHByb2Nlc3MgdGhlbiB5b3Ugc2hvdWxkIHJlY2FsY3VsYXRlIHRoZSB3ZWlnaHRpbmdzIGhlcmUuIFRoaXMgaXMgcXVpdGUKKyAgICAjIGVhc3kgdG8gZG8gLSBqdXN0IGNoYW5nZSB0aGUgTXVsdGlTdGFnZVByb2dyZXNzUmVwb3J0ZXIgbGluZSB0ZW1wb3JhcmlseQorICAgICMgdG8gcGFzcyBkZWJ1Zz1UcnVlIGFzIHRoZSBsYXN0IHBhcmFtZXRlciBhbmQgeW91J2xsIGdldCBhIHByaW50b3V0IG9mCisgICAgIyB0aGUgd2VpZ2h0aW5ncyBhcyB3ZWxsIGFzIGEgbWFwIHRvIHRoZSBsaW5lcyB3aGVyZSBuZXh0X3N0YWdlKCkgd2FzCisgICAgIyBjYWxsZWQuIE9mIGNvdXJzZSB0aGlzIGlzbid0IGNyaXRpY2FsLCBidXQgaXQgaGVscHMgdG8ga2VlcCB0aGUgcHJvZ3Jlc3MKKyAgICAjIHJlcG9ydGluZyBhY2N1cmF0ZS4KKyAgICBzdGFnZV93ZWlnaHRzID0gWzEsIDIwMywgMzU0LCAxODYsIDY1LCA0MjI4LCAxLCAzNTMsIDQ5LCAzMzAsIDM4MiwgMjMsIDFdCisgICAgcHJvZ3Jlc3NfcmVwb3J0ZXIgPSBiYi5wcm9ncmVzcy5NdWx0aVN0YWdlUHJvZ3Jlc3NSZXBvcnRlcihkLCBzdGFnZV93ZWlnaHRzKQorICAgIHByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgIyBIYW5kbGUgcGFja2FnZSBleGNsdXNpb25zCiAgICAgZXhjbF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfRVhDTFVERSIsIFRydWUpLnNwbGl0KCkKICAgICBpbnN0X3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgVHJ1ZSkuc3BsaXQoKQpAQCAtMjMwLDExICsyNDMsMTUgQEAKICAgICAjIEdlbmVyYXRlIHRoZSBpbml0aWFsIG1hbmlmZXN0CiAgICAgY3JlYXRlX21hbmlmZXN0KGQpCiAKLSAgICAjIEdlbmVyYXRlIHJvb3RmcwotICAgIGNyZWF0ZV9yb290ZnMoZCkKKyAgICBwcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKworICAgICMgZ2VuZXJhdGUgcm9vdGZzCisgICAgY3JlYXRlX3Jvb3RmcyhkLCBwcm9ncmVzc19yZXBvcnRlcj1wcm9ncmVzc19yZXBvcnRlcikKKworICAgIHByb2dyZXNzX3JlcG9ydGVyLmZpbmlzaCgpCiB9CiBkb19yb290ZnNbZGlyc10gPSAiJHtUT1BESVJ9IgotZG9fcm9vdGZzW2NsZWFuZGlyc10gKz0gIiR7U30iCitkb19yb290ZnNbY2xlYW5kaXJzXSArPSAiJHtTfSAke0lNR0RFUExPWURJUn0iCiBkb19yb290ZnNbdW1hc2tdID0gIjAyMiIKIGFkZHRhc2sgcm9vdGZzIGJlZm9yZSBkb19idWlsZAogCkBAIC0yNTgsOCArMjc1LDQzIEBACiB9CiBkb19pbWFnZV9jb21wbGV0ZVtkaXJzXSA9ICIke1RPUERJUn0iCiBkb19pbWFnZV9jb21wbGV0ZVt1bWFza10gPSAiMDIyIgorU1NUQVRFVEFTS1MgKz0gImRvX2ltYWdlX2NvbXBsZXRlIgorU1NUQVRFX1NLSVBfQ1JFQVRJT05fdGFzay1pbWFnZS1jb21wbGV0ZSA9ICcxJworZG9faW1hZ2VfY29tcGxldGVbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtJTUdERVBMT1lESVJ9IgorZG9faW1hZ2VfY29tcGxldGVbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0iCitkb19pbWFnZV9jb21wbGV0ZVtzdGFtcC1leHRyYS1pbmZvXSA9ICIke01BQ0hJTkV9IgogYWRkdGFzayBkb19pbWFnZV9jb21wbGV0ZSBhZnRlciBkb19pbWFnZSBiZWZvcmUgZG9fYnVpbGQKIAorIyBBZGQgaW1hZ2UtbGV2ZWwgUUEvc2FuaXR5IGNoZWNrcyB0byBJTUFHRV9RQV9DT01NQU5EUworIworIyBJTUFHRV9RQV9DT01NQU5EUyArPSAiIFwKKyMgICAgIGltYWdlX2NoZWNrX2V2ZXJ5dGhpbmdfb2sgXAorIyAiCisjIFRoaXMgdGFzayBydW5zIGFsbCBmdW5jdGlvbnMgaW4gSU1BR0VfUUFfQ09NTUFORFMgYWZ0ZXIgdGhlIGltYWdlCisjIGNvbnN0cnVjdGlvbiBoYXMgY29tcGxldGVkIGluIG9yZGVyIHRvIHZhbGlkYXRlIHRoZSByZXN1bHRpbmcgaW1hZ2UuCitmYWtlcm9vdCBweXRob24gZG9faW1hZ2VfcWEgKCkgeworICAgIGZyb20gb2UudXRpbHMgaW1wb3J0IEltYWdlUUFGYWlsZWQKKworICAgIHFhX2NtZHMgPSAoZC5nZXRWYXIoJ0lNQUdFX1FBX0NPTU1BTkRTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBxYW1zZyA9ICIiCisKKyAgICBmb3IgY21kIGluIHFhX2NtZHM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhjbWQsIGQpCisgICAgICAgIGV4Y2VwdCBvZS51dGlscy5JbWFnZVFBRmFpbGVkIGFzIGU6CisgICAgICAgICAgICBxYW1zZyA9IHFhbXNnICsgJ1x0SW1hZ2UgUUEgZnVuY3Rpb24gJXMgZmFpbGVkOiAlc1xuJyAlIChlLm5hbWUsIGUuZGVzY3JpcHRpb24pCisgICAgICAgIGV4Y2VwdCBiYi5idWlsZC5GdW5jRmFpbGVkIGFzIGU6CisgICAgICAgICAgICBxYW1zZyA9IHFhbXNnICsgJ1x0SW1hZ2UgUUEgZnVuY3Rpb24gJXMgZmFpbGVkJyAlIGUubmFtZQorICAgICAgICAgICAgaWYgZS5sb2dmaWxlOgorICAgICAgICAgICAgICAgIHFhbXNnID0gcWFtc2cgKyAnIChsb2cgZmlsZSBpcyBsb2NhdGVkIGF0ICVzKScgJSBlLmxvZ2ZpbGUKKyAgICAgICAgICAgIHFhbXNnID0gcWFtc2cgKyAnXG4nCisKKyAgICBpZiBxYW1zZzoKKyAgICAgICAgaW1nbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSkKKyAgICAgICAgYmIuZmF0YWwoIlFBIGVycm9ycyBmb3VuZCB3aGlsc3QgdmFsaWRhdGluZyBpbWFnZTogJXNcbiVzIiAlIChpbWduYW1lLCBxYW1zZykpCit9CithZGR0YXNrIGRvX2ltYWdlX3FhIGFmdGVyIGRvX2ltYWdlX2NvbXBsZXRlIGJlZm9yZSBkb19idWlsZAorCiAjCiAjIFdyaXRlIGVudmlyb25tZW50IHZhcmlhYmxlcyB1c2VkIGJ5IHdpYwogIyB0byB0bXAvc3lzcm9vdHMvPG1hY2hpbmU+L2ltZ2RhdGEvPGltYWdlPi5lbnYKQEAgLTI4Nyw2ICszMzksNyBAQAogICAgIGQuYXBwZW5kVmFyKCdJTUFHRV9ST09URlMnLCAnLWRiZycpCiAgICAgZC5hcHBlbmRWYXIoJ0lNQUdFX0xJTktfTkFNRScsICctZGJnJykKICAgICBkLmFwcGVuZFZhcignSU1BR0VfTkFNRScsJy1kYmcnKQorICAgIGQuc2V0VmFyKCdJTUFHRV9CVUlMRElOR19ERUJVR0ZTJywgJ3RydWUnKQogICAgIGRlYnVnZnNfaW1hZ2VfZnN0eXBlcyA9IGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTX0RFQlVHRlMnLCBUcnVlKQogICAgIGlmIGRlYnVnZnNfaW1hZ2VfZnN0eXBlczoKICAgICAgICAgZC5zZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBkZWJ1Z2ZzX2ltYWdlX2ZzdHlwZXMpCkBAIC0yOTcsOCArMzUwLDE2IEBACiAKIHB5dGhvbiAoKSB7CiAgICAgdmFyZGVwcyA9IHNldCgpCi0gICAgY3R5cGVzID0gZC5nZXRWYXIoJ0NPTVBSRVNTSU9OVFlQRVMnLCBUcnVlKS5zcGxpdCgpCi0gICAgb2xkX292ZXJyaWRlcyA9IGQuZ2V0VmFyKCdPVkVSUklERVMnLCAwKQorICAgICMgV2UgYWxsb3cgQ09OVkVSU0lPTlRZUEVTIHRvIGhhdmUgZHVwbGljYXRlcy4gVGhhdCBhdm9pZHMgYnJlYWtpbmcKKyAgICAjIGRlcml2ZWQgZGlzdHJvcyB3aGVuIE9FLWNvcmUgb3Igc29tZSBvdGhlciBsYXllciBpbmRlcGVuZGVudGx5IGFkZHMKKyAgICAjIHRoZSBzYW1lIHR5cGUuIFRoZXJlIGlzIHN0aWxsIG9ubHkgb25lIGNvbW1hbmQgZm9yIGVhY2ggdHlwZSwgYnV0CisgICAgIyBwcmVzdW1hYmx5IHRoZSBjb21tYW5kcyB3aWxsIGRvIHRoZSBzYW1lIHdoZW4gdGhlIHR5cGUgaXMgdGhlIHNhbWUsCisgICAgIyBldmVuIHdoZW4gYWRkZWQgaW4gZGlmZmVyZW50IHBsYWNlcy4KKyAgICAjCisgICAgIyBXaXRob3V0IGRlLWR1cGxpY2F0aW9uLCBnZW5fY29udmVyc2lvbl9jbWRzKCkgYmVsb3cKKyAgICAjIHdvdWxkIGNyZWF0ZSB0aGUgc2FtZSBjb21wcmVzc2lvbiBjb21tYW5kIG11bHRpcGxlIHRpbWVzLgorICAgIGN0eXBlcyA9IHNldChkLmdldFZhcignQ09OVkVSU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKSkKKyAgICBvbGRfb3ZlcnJpZGVzID0gZC5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKQogCiAgICAgZGVmIF9pbWFnZV9iYXNlX3R5cGUodHlwZSk6CiAgICAgICAgIGJhc2V0eXBlID0gdHlwZQpAQCAtMzU0LDYgKzQxNSw3IEBACiAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbWFnZScsICd2YXJkZXBzJywgJyAnLmpvaW4odmFyZGVwcykpCiAKICAgICBtYXNrZWR0eXBlcyA9IChkLmdldFZhcignSU1BR0VfVFlQRVNfTUFTS0VEJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtYXNrZWR0eXBlcyA9IFtkYmcgKyB0IGZvciB0IGluIG1hc2tlZHR5cGVzIGZvciBkYmcgaW4gKCIiLCAiZGVidWdmc18iKV0KIAogICAgIGZvciB0IGluIGJhc2V0eXBlczoKICAgICAgICAgdmFyZGVwcyA9IHNldCgpCkBAIC0zODYsMjEgKzQ0OCwzMCBAQAogICAgICAgICAgICAgY21kcy5hcHBlbmQoIlx0IiArIGltYWdlX2NtZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBJTUFHRV9DTUQgZGVmaW5lZCBmb3IgSU1BR0VfRlNUWVBFUyBlbnRyeSAnJXMnIC0gcG9zc2libHkgaW52YWxpZCB0eXBlIG5hbWUgb3IgbWlzc2luZyBzdXBwb3J0IGNsYXNzIiAlIHQpCi0gICAgICAgIGNtZHMuYXBwZW5kKGxvY2FsZGF0YS5leHBhbmQoIlx0Y2QgJHtERVBMT1lfRElSX0lNQUdFfSIpKQorICAgICAgICBjbWRzLmFwcGVuZChsb2NhbGRhdGEuZXhwYW5kKCJcdGNkICR7SU1HREVQTE9ZRElSfSIpKQorCisgICAgICAgICMgU2luY2UgYSBjb3B5IG9mIElNQUdFX0NNRF94eHggd2lsbCBiZSBpbmxpbmVkIHdpdGhpbiBkb19pbWFnZV94eHgsCisgICAgICAgICMgcHJldmVudCBhIHJlZHVuZGFudCBjb3B5IG9mIElNQUdFX0NNRF94eHggYmVpbmcgZW1pdHRlZCBhcyBhIGZ1bmN0aW9uLgorICAgICAgICBkLmRlbFZhckZsYWcoJ0lNQUdFX0NNRF8nICsgcmVhbHQsICdmdW5jJykKIAogICAgICAgICBybV90bXBfaW1hZ2VzID0gc2V0KCkKICAgICAgICAgZGVmIGdlbl9jb252ZXJzaW9uX2NtZHMoYnQpOgogICAgICAgICAgICAgZm9yIGN0eXBlIGluIGN0eXBlczoKLSAgICAgICAgICAgICAgICBpZiBidC5lbmRzd2l0aCgiLiIgKyBjdHlwZSk6CisgICAgICAgICAgICAgICAgaWYgYnRbYnQuZmluZCgnLicpICsgMTpdID09IGN0eXBlOgogICAgICAgICAgICAgICAgICAgICB0eXBlID0gYnRbMDotbGVuKGN0eXBlKSAtIDFdCiAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUuc3RhcnRzd2l0aCgiZGVidWdmc18iKToKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlWzg6XQogICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBpbnB1dCBpbWFnZSBmaXJzdC4KICAgICAgICAgICAgICAgICAgICAgZ2VuX2NvbnZlcnNpb25fY21kcyh0eXBlKQogICAgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCd0eXBlJywgdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQoIlx0IiArIGxvY2FsZGF0YS5nZXRWYXIoIkNPTVBSRVNTX0NNRF8iICsgY3R5cGUsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBjbWQgPSAiXHQiICsgKGxvY2FsZGF0YS5nZXRWYXIoIkNPTlZFUlNJT05fQ01EXyIgKyBjdHlwZSwgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcigiQ09NUFJFU1NfQ01EXyIgKyBjdHlwZSwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIGNtZCBub3QgaW4gY21kczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMuYXBwZW5kKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgdmFyZGVwcy5hZGQoJ0NPTlZFUlNJT05fQ01EXycgKyBjdHlwZSkKICAgICAgICAgICAgICAgICAgICAgdmFyZGVwcy5hZGQoJ0NPTVBSRVNTX0NNRF8nICsgY3R5cGUpCi0gICAgICAgICAgICAgICAgICAgIHN1YmltYWdlcy5hcHBlbmQodHlwZSArICIuIiArIGN0eXBlKQorICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZSA9IHR5cGUgKyAiLiIgKyBjdHlwZQorICAgICAgICAgICAgICAgICAgICBpZiBzdWJpbWFnZSBub3QgaW4gc3ViaW1hZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VzLmFwcGVuZChzdWJpbWFnZSkKICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSBub3QgaW4gYWxsdHlwZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICBybV90bXBfaW1hZ2VzLmFkZChsb2NhbGRhdGEuZXhwYW5kKCIke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSIpKQogCkBAIC00NjcsNiArNTM4LDEyIEBACiAgICAgYmFzZV9zaXplICs9IHJvb3Rmc19hbGlnbm1lbnQgLSAxCiAgICAgYmFzZV9zaXplIC09IGJhc2Vfc2l6ZSAlIHJvb3Rmc19hbGlnbm1lbnQKIAorICAgICMgRG8gbm90IGNoZWNrIGltYWdlIHNpemUgb2YgdGhlIGRlYnVnZnMgaW1hZ2UuIFRoaXMgaXMgbm90IHN1cHBvc2VkCisgICAgIyB0byBiZSBkZXBsb3llZCwgZXRjLiBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbGltaXQgdGhlIHNpemUKKyAgICAjIG9mIHRoZSBkZWJ1Zy4KKyAgICBpZiAoZC5nZXRWYXIoJ0lNQUdFX0JVSUxESU5HX0RFQlVHRlMnLCBUcnVlKSBvciAiIikgPT0gInRydWUiOgorICAgICAgICByZXR1cm4gYmFzZV9zaXplCisKICAgICAjIENoZWNrIHRoZSByb290ZnMgc2l6ZSBhZ2FpbnN0IElNQUdFX1JPT1RGU19NQVhTSVpFIChpZiBzZXQpCiAgICAgaWYgcm9vdGZzX21heHNpemU6CiAgICAgICAgIHJvb3Rmc19tYXhzaXplX2ludCA9IGludChyb290ZnNfbWF4c2l6ZSkKQEAgLTQ5NSwyOCArNTcyLDI2IEBACiAjCiBweXRob24gY3JlYXRlX3N5bWxpbmtzKCkgewogCi0gICAgZGVwbG95X2RpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICBkZXBsb3lfZGlyID0gZC5nZXRWYXIoJ0lNR0RFUExPWURJUicsIFRydWUpCiAgICAgaW1nX25hbWUgPSBkLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpCiAgICAgbGlua19uYW1lID0gZC5nZXRWYXIoJ0lNQUdFX0xJTktfTkFNRScsIFRydWUpCiAgICAgbWFuaWZlc3RfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9NQU5JRkVTVCcsIFRydWUpCiAgICAgdGFza25hbWUgPSBkLmdldFZhcigiQkJfQ1VSUkVOVFRBU0siLCBUcnVlKQogICAgIHN1YmltYWdlcyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrbmFtZSwgJ3N1YmltYWdlcycsIEZhbHNlKSBvciAiIikuc3BsaXQoKQogICAgIGltZ3N1ZmZpeCA9IGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2tuYW1lLCAnaW1nc3VmZml4JywgVHJ1ZSkgb3IgZC5leHBhbmQoIiR7SU1BR0VfTkFNRV9TVUZGSVh9LiIpCi0gICAgb3MuY2hkaXIoZGVwbG95X2RpcikKIAogICAgIGlmIG5vdCBsaW5rX25hbWU6CiAgICAgICAgIHJldHVybgogICAgIGZvciB0eXBlIGluIHN1YmltYWdlczoKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW1nX25hbWUgKyBpbWdzdWZmaXggKyB0eXBlKToKLSAgICAgICAgICAgIGRzdCA9IGRlcGxveV9kaXIgKyAiLyIgKyBsaW5rX25hbWUgKyAiLiIgKyB0eXBlCi0gICAgICAgICAgICBzcmMgPSBpbWdfbmFtZSArIGltZ3N1ZmZpeCArIHR5cGUKKyAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsIGxpbmtfbmFtZSArICIuIiArIHR5cGUpCisgICAgICAgIHNyYyA9IGltZ19uYW1lICsgaW1nc3VmZml4ICsgdHlwZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGVwbG95X2Rpciwgc3JjKSk6CiAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBzeW1saW5rOiAlcyAtPiAlcyIgJSAoZHN0LCBzcmMpKQogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZHN0KToKLSAgICAgICAgICAgICAgICBpZiBkLmdldFZhcignUk1fT0xEX0lNQUdFJywgVHJ1ZSkgPT0gIjEiIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLnJlYWxwYXRoKGRzdCkpOgotICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5yZWFscGF0aChkc3QpKQogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCiAgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZHN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIubm90ZSgiU2tpcHBpbmcgc3ltbGluaywgc291cmNlIGRvZXMgbm90IGV4aXN0OiAlcyAtPiAlcyIgJSAoZHN0LCBzcmMpKQogfQogCiBNVUxUSUxJQlJFX0FMTE9XX1JFUCA9LiAiJHtiYXNlX2JpbmRpcn18JHtiYXNlX3NiaW5kaXJ9fCR7YmluZGlyfXwke3NiaW5kaXJ9fCR7bGliZXhlY2Rpcn18JHtzeXNjb25mZGlyfXwke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXZ8L2xpYi9tb2R1bGVzL1teL10qL21vZHVsZXMuKnwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MKaW5kZXggNTNhZjdjYS4uMWNlODMzNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcwpAQCAtMTEsNDEgKzExLDQwIEBACiAKIGRlZiBpbWFnZXR5cGVzX2dldGRlcGVuZHMoZCk6CiAgICAgZGVmIGFkZGRlcChkZXBzdHIsIGRlcHMpOgotICAgICAgICBmb3IgaSBpbiAoZGVwc3RyIG9yICIiKS5zcGxpdCgpOgotICAgICAgICAgICAgaWYgaSBub3QgaW4gZGVwczoKLSAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChpKQorICAgICAgICBmb3IgZCBpbiAoZGVwc3RyIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgIyBBZGQgdGFzayBkZXBlbmRlbmN5IGlmIG5vdCBhbHJlYWR5IHByZXNlbnQKKyAgICAgICAgICAgIGlmICI6IiBub3QgaW4gZDoKKyAgICAgICAgICAgICAgICBkICs9ICI6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICAgICAgICAgIGRlcHMuYWRkKGQpCiAKLSAgICBkZXBzID0gW10KLSAgICBjdHlwZXMgPSBkLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKICAgICBmc3R5cGVzID0gc2V0KChkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpKQogICAgIGZzdHlwZXMgfD0gc2V0KChkLmdldFZhcignSU1BR0VfRlNUWVBFU19ERUJVR0ZTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCi0gICAgZm9yIHR5cGUgaW4gZnN0eXBlczoKLSAgICAgICAgaWYgdHlwZSBpbiBbInZtZGsiLCAidmRpIiwgInFjb3cyIiwgImhkZGRpcmVjdCIsICJsaXZlIiwgImlzbyIsICJoZGRpbWciXToKLSAgICAgICAgICAgIHR5cGUgPSAiZXh0NCIKLSAgICAgICAgYmFzZXR5cGUgPSB0eXBlCi0gICAgICAgIGZvciBjdHlwZSBpbiBjdHlwZXM6Ci0gICAgICAgICAgICBpZiB0eXBlLmVuZHN3aXRoKCIuIiArIGN0eXBlKToKLSAgICAgICAgICAgICAgICBiYXNldHlwZSA9IHR5cGVbOi1sZW4oIi4iICsgY3R5cGUpXQotICAgICAgICAgICAgICAgIGFkZGRlcChkLmdldFZhcigiQ09NUFJFU1NfREVQRU5EU18lcyIgJSBjdHlwZSwgVHJ1ZSksIGRlcHMpCi0gICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlcHMgPSBzZXQoKQorICAgIGZvciB0eXBlc3RyaW5nIGluIGZzdHlwZXM6CisgICAgICAgIHR5cGVzID0gdHlwZXN0cmluZy5zcGxpdCgiLiIpCisgICAgICAgIGJhc2V0eXBlLCByZXN0dHlwZXMgPSB0eXBlc1swXSwgdHlwZXNbMTpdCisKKyAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIGJhc2V0eXBlLCBUcnVlKSAsIGRlcHMpCiAgICAgICAgIGZvciB0eXBlZGVwZW5kcyBpbiAoZC5nZXRWYXIoIklNQUdFX1RZUEVERVBfJXMiICUgYmFzZXR5cGUsIFRydWUpIG9yICIiKS5zcGxpdCgpOgogICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIHR5cGVkZXBlbmRzLCBUcnVlKSAsIGRlcHMpCi0gICAgICAgIGFkZGRlcChkLmdldFZhcignSU1BR0VfREVQRU5EU18lcycgJSBiYXNldHlwZSwgVHJ1ZSkgLCBkZXBzKQorICAgICAgICBmb3IgY3R5cGUgaW4gcmVzdHR5cGVzOgorICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCJDT05WRVJTSU9OX0RFUEVORFNfJXMiICUgY3R5cGUsIFRydWUpLCBkZXBzKQorICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCJDT01QUkVTU19ERVBFTkRTXyVzIiAlIGN0eXBlLCBUcnVlKSwgZGVwcykKIAotICAgIGRlcHN0ciA9ICIiCi0gICAgZm9yIGRlcCBpbiBkZXBzOgotICAgICAgICBkZXBzdHIgKz0gIiAiICsgZGVwICsgIjpkb19wb3B1bGF0ZV9zeXNyb290IgotICAgIHJldHVybiBkZXBzdHIKKyAgICAjIFNvcnQgdGhlIHNldCBzbyB0aGF0IG9yZGVyaW5nIGlzIGNvbnNpc3RhbnQKKyAgICByZXR1cm4gIiAiLmpvaW4oc29ydGVkKGRlcHMpKQogCi0KLVhaX0NPTVBSRVNTSU9OX0xFVkVMID89ICItZSAtNiIKK1haX0NPTVBSRVNTSU9OX0xFVkVMID89ICItMyIKIFhaX0lOVEVHUklUWV9DSEVDSyA/PSAiY3JjMzIiCiBYWl9USFJFQURTID89ICItVCAwIgogCi1KRkZTMl9TVU1fRVhUUkFfQVJHUyA/PSAiIgotSU1BR0VfQ01EX2pmZnMyID0gIm1rZnMuamZmczIgLS1yb290PSR7SU1BR0VfUk9PVEZTfSAtLWZha2V0aW1lIC0tb3V0cHV0PSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmpmZnMyICR7RVhUUkFfSU1BR0VDTUR9IgorWklQX0NPTVBSRVNTSU9OX0xFVkVMID89ICItOSIKIAotSU1BR0VfQ01EX2NyYW1mcyA9ICJta2ZzLmNyYW1mcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uY3JhbWZzICR7RVhUUkFfSU1BR0VDTUR9IgorSkZGUzJfU1VNX0VYVFJBX0FSR1MgPz0gIiIKK0lNQUdFX0NNRF9qZmZzMiA9ICJta2ZzLmpmZnMyIC0tcm9vdD0ke0lNQUdFX1JPT1RGU30gLS1mYWtldGltZSAtLW91dHB1dD0ke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmpmZnMyICR7RVhUUkFfSU1BR0VDTUR9IgorCitJTUFHRV9DTURfY3JhbWZzID0gIm1rZnMuY3JhbWZzICR7SU1BR0VfUk9PVEZTfSAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmNyYW1mcyAke0VYVFJBX0lNQUdFQ01EfSIKIAogb2VfbWtleHQyMzRmcyAoKSB7CiAJZnN0eXBlPSQxCkBAIC02NSw4ICs2NCw4IEBACiAJCWV2YWwgQ09VTlQ9XCIkTUlOX0NPVU5UXCIKIAlmaQogCSMgQ3JlYXRlIGEgc3BhcnNlIGltYWdlIGJsb2NrCi0JZGQgaWY9L2Rldi96ZXJvIG9mPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiRmc3R5cGUgc2Vlaz0kUk9PVEZTX1NJWkUgY291bnQ9JENPVU5UIGJzPTEwMjQKLQlta2ZzLiRmc3R5cGUgLUYgJGV4dHJhX2ltYWdlY21kICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiRmc3R5cGUgLWQgJHtJTUFHRV9ST09URlN9CisJZGQgaWY9L2Rldi96ZXJvIG9mPSR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJGZzdHlwZSBzZWVrPSRST09URlNfU0laRSBjb3VudD0kQ09VTlQgYnM9MTAyNAorCW1rZnMuJGZzdHlwZSAtRiAkZXh0cmFfaW1hZ2VjbWQgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4kZnN0eXBlIC1kICR7SU1BR0VfUk9PVEZTfQogfQogCiBJTUFHRV9DTURfZXh0MiA9ICJvZV9ta2V4dDIzNGZzIGV4dDIgJHtFWFRSQV9JTUFHRUNNRH0iCkBAIC03NiwxNiArNzUsMTYgQEAKIE1JTl9CVFJGU19TSVpFID89ICIxNjM4NCIKIElNQUdFX0NNRF9idHJmcyAoKSB7CiAJaWYgWyAke1JPT1RGU19TSVpFfSAtZ3QgJHtNSU5fQlRSRlNfU0laRX0gXTsgdGhlbgotCQlkZCBpZj0vZGV2L3plcm8gb2Y9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uYnRyZnMgY291bnQ9JHtST09URlNfU0laRX0gYnM9MTAyNAotCQlta2ZzLmJ0cmZzICR7RVhUUkFfSU1BR0VDTUR9IC1yICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5idHJmcworCQlkZCBpZj0vZGV2L3plcm8gb2Y9JHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5idHJmcyBjb3VudD0ke1JPT1RGU19TSVpFfSBicz0xMDI0CisJCW1rZnMuYnRyZnMgJHtFWFRSQV9JTUFHRUNNRH0gLXIgJHtJTUFHRV9ST09URlN9ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uYnRyZnMKIAllbHNlCiAJCWJiZmF0YWwgIlJvb3RmcyBpcyB0b28gc21hbGwgZm9yIEJUUkZTIChSb290ZnMgQWN0dWFsIFNpemU6ICR7Uk9PVEZTX1NJWkV9LCBCVFJGUyBNaW5pbXVtIFNpemU6ICR7TUlOX0JUUkZTX1NJWkV9KSIKIAlmaQogfQogCi1JTUFHRV9DTURfc3F1YXNoZnMgPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uc3F1YXNoZnMgJHtFWFRSQV9JTUFHRUNNRH0gLW5vYXBwZW5kIgotSU1BR0VfQ01EX3NxdWFzaGZzLXh6ID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LnNxdWFzaGZzLXh6ICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCB4eiIKLUlNQUdFX0NNRF9zcXVhc2hmcy1sem8gPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uc3F1YXNoZnMtbHpvICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCBsem8iCitJTUFHRV9DTURfc3F1YXNoZnMgPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5zcXVhc2hmcyAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQiCitJTUFHRV9DTURfc3F1YXNoZnMteHogPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5zcXVhc2hmcy14eiAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQgLWNvbXAgeHoiCitJTUFHRV9DTURfc3F1YXNoZnMtbHpvID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uc3F1YXNoZnMtbHpvICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCBsem8iCiAKICMgQnkgZGVmYXVsdCwgdGFyIGZyb20gdGhlIGhvc3QgaXMgdXNlZCwgd2hpY2ggY2FuIGJlIHF1aXRlIG9sZC4gSWYKICMgeW91IG5lZWQgc3BlY2lhbCBwYXJhbWV0ZXJzIChsaWtlIC0teGF0dHJzKSB3aGljaCBhcmUgb25seSBzdXBwb3J0ZWQKQEAgLTk4LDE4ICs5NywyNSBAQAogIyBJbiBwcmFjdGljZSwgaXQgdHVybmVkIG91dCB0byBiZSBub3QgbmVlZGVkIHdoZW4gY3JlYXRpbmcgYXJjaGl2ZXMgYW5kCiAjIHJlcXVpcmVkIHdoZW4gZXh0cmFjdGluZywgYnV0IGl0IHNlZW1zIHBydWRlbnQgdG8gdXNlIGl0IGluIGJvdGggY2FzZXMuCiBJTUFHRV9DTURfVEFSID89ICJ0YXIiCi1JTUFHRV9DTURfdGFyID0gIiR7SU1BR0VfQ01EX1RBUn0gLWN2ZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS50YXIgLUMgJHtJTUFHRV9ST09URlN9IC4iCitJTUFHRV9DTURfdGFyID0gIiR7SU1BR0VfQ01EX1RBUn0gLWN2ZiAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LnRhciAtQyAke0lNQUdFX1JPT1RGU30gLiIKIAogZG9faW1hZ2VfY3Bpb1tjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2NwaW9fYXBwZW5kIgogSU1BR0VfQ01EX2NwaW8gKCkgewotCShjZCAke0lNQUdFX1JPT1RGU30gJiYgZmluZCAuIHwgY3BpbyAtbyAtSCBuZXdjID4ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5jcGlvKQotCWlmIFsgISAtTCAke0lNQUdFX1JPT1RGU30vaW5pdCAtYSAhIC1lICR7SU1BR0VfUk9PVEZTfS9pbml0IF07IHRoZW4KLQkJaWYgWyAtTCAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0IC1vIC1lICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgXTsgdGhlbgotCQkJbG4gLXNmIC9zYmluL2luaXQgJHtXT1JLRElSfS9jcGlvX2FwcGVuZC9pbml0Ci0JCWVsc2UKLQkJCXRvdWNoICR7V09SS0RJUn0vY3Bpb19hcHBlbmQvaW5pdAorCShjZCAke0lNQUdFX1JPT1RGU30gJiYgZmluZCAuIHwgY3BpbyAtbyAtSCBuZXdjID4ke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmNwaW8pCisJIyBXZSBvbmx5IG5lZWQgdGhlIC9pbml0IHN5bWxpbmsgaWYgd2UncmUgYnVpbGRpbmcgdGhlIHJlYWwKKwkjIGltYWdlLiBUaGUgLWRiZyBpbWFnZSBkb2Vzbid0IG5lZWQgaXQhIEJ5IGJlaW5nIGNsZXZlcgorCSMgYWJvdXQgdGhpcyB3ZSBhbHNvIGF2b2lkICd0b3VjaCcgYmVsb3cgZmFpbGluZywgYXMgaXQKKwkjIG1pZ2h0IGJlIHRyeWluZyB0byB0b3VjaCAvc2Jpbi9pbml0IG9uIHRoZSBob3N0IHNpbmNlIGJvdGgKKwkjIHRoZSBub3JtYWwgYW5kIHRoZSAtZGJnIGltYWdlIHNoYXJlIHRoZSBzYW1lIFdPUktESVIKKwlpZiBbICIke0lNQUdFX0JVSUxESU5HX0RFQlVHRlN9IiAhPSAidHJ1ZSIgXTsgdGhlbgorCQlpZiBbICEgLUwgJHtJTUFHRV9ST09URlN9L2luaXQgXSAmJiBbICEgLWUgJHtJTUFHRV9ST09URlN9L2luaXQgXTsgdGhlbgorCQkJaWYgWyAtTCAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0IF0gfHwgWyAtZSAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0IF07IHRoZW4KKwkJCQlsbiAtc2YgL3NiaW4vaW5pdCAke1dPUktESVJ9L2NwaW9fYXBwZW5kL2luaXQKKwkJCWVsc2UKKwkJCQl0b3VjaCAke1dPUktESVJ9L2NwaW9fYXBwZW5kL2luaXQKKwkJCWZpCisJCQkoY2QgICR7V09SS0RJUn0vY3Bpb19hcHBlbmQgJiYgZWNobyAuL2luaXQgfCBjcGlvIC1vQSAtSCBuZXdjIC1GICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uY3BpbykKIAkJZmkKLQkJKGNkICAke1dPUktESVJ9L2NwaW9fYXBwZW5kICYmIGVjaG8gLi9pbml0IHwgY3BpbyAtb0EgLUggbmV3YyAtRiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5jcGlvKQogCWZpCiB9CiAKQEAgLTExNyw4ICsxMjMsOCBAQAogRUxGX0FQUEVORCA/PSAicmFtZGlza19zaXplPTMyNzY4IHJvb3Q9L2Rldi9yYW0wIHJ3IGNvbnNvbGU9IgogCiBJTUFHRV9DTURfZWxmICgpIHsKLQl0ZXN0IC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmVsZiAmJiBybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5lbGYKLQlta2VsZkltYWdlIC0ta2VybmVsPSR7RUxGX0tFUk5FTH0gLS1pbml0cmQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uY3Bpby5neiAtLW91dHB1dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5lbGYgLS1hcHBlbmQ9JyR7RUxGX0FQUEVORH0nICR7RVhUUkFfSU1BR0VDTUR9CisJdGVzdCAtZiAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmVsZiAmJiBybSAtZiAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmVsZgorCW1rZWxmSW1hZ2UgLS1rZXJuZWw9JHtFTEZfS0VSTkVMfSAtLWluaXRyZD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5jcGlvLmd6IC0tb3V0cHV0PSR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uZWxmIC0tYXBwZW5kPScke0VMRl9BUFBFTkR9JyAke0VYVFJBX0lNQUdFQ01EfQogfQogCiBJTUFHRV9UWVBFREVQX2VsZiA9ICJjcGlvLmd6IgpAQCAtMTM2LDIwICsxNDIsMjAgQEAKIAogCWVjaG8gXFt1Ymlmc1xdID4gdWJpbml6ZSR7dm5hbWV9LSR7SU1BR0VfTkFNRX0uY2ZnCiAJZWNobyBtb2RlPXViaSA+PiB1YmluaXplJHt2bmFtZX0tJHtJTUFHRV9OQU1FfS5jZmcKLQllY2hvIGltYWdlPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9JHtJTUFHRV9OQU1FX1NVRkZJWH0udWJpZnMgPj4gdWJpbml6ZSR7dm5hbWV9LSR7SU1BR0VfTkFNRX0uY2ZnCisJZWNobyBpbWFnZT0ke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9JHtJTUFHRV9OQU1FX1NVRkZJWH0udWJpZnMgPj4gdWJpbml6ZSR7dm5hbWV9LSR7SU1BR0VfTkFNRX0uY2ZnCiAJZWNobyB2b2xfaWQ9MCA+PiB1YmluaXplJHt2bmFtZX0tJHtJTUFHRV9OQU1FfS5jZmcKIAllY2hvIHZvbF90eXBlPWR5bmFtaWMgPj4gdWJpbml6ZSR7dm5hbWV9LSR7SU1BR0VfTkFNRX0uY2ZnCiAJZWNobyB2b2xfbmFtZT0ke1VCSV9WT0xOQU1FfSA+PiB1YmluaXplJHt2bmFtZX0tJHtJTUFHRV9OQU1FfS5jZmcKIAllY2hvIHZvbF9mbGFncz1hdXRvcmVzaXplID4+IHViaW5pemUke3ZuYW1lfS0ke0lNQUdFX05BTUV9LmNmZwotCW1rZnMudWJpZnMgLXIgJHtJTUFHRV9ST09URlN9IC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9JHtJTUFHRV9OQU1FX1NVRkZJWH0udWJpZnMgJHtta3ViaWZzX2FyZ3N9Ci0JdWJpbml6ZSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfSR7SU1BR0VfTkFNRV9TVUZGSVh9LnViaSAke3ViaW5pemVfYXJnc30gdWJpbml6ZSR7dm5hbWV9LSR7SU1BR0VfTkFNRX0uY2ZnCisJbWtmcy51YmlmcyAtciAke0lNQUdFX1JPT1RGU30gLW8gJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfSR7SU1BR0VfTkFNRV9TVUZGSVh9LnViaWZzICR7bWt1Ymlmc19hcmdzfQorCXViaW5pemUgLW8gJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfSR7SU1BR0VfTkFNRV9TVUZGSVh9LnViaSAke3ViaW5pemVfYXJnc30gdWJpbml6ZSR7dm5hbWV9LSR7SU1BR0VfTkFNRX0uY2ZnCiAKIAkjIENsZWFudXAgY2ZnIGZpbGUKLQltdiB1YmluaXplJHt2bmFtZX0tJHtJTUFHRV9OQU1FfS5jZmcgJHtERVBMT1lfRElSX0lNQUdFfS8KKwltdiB1YmluaXplJHt2bmFtZX0tJHtJTUFHRV9OQU1FfS5jZmcgJHtJTUdERVBMT1lESVJ9LwogCiAJIyBDcmVhdGUgb3duIHN5bWxpbmtzIGZvciAnbmFtZWQnIHZvbHVtZXMKIAlpZiBbIC1uICIkdm5hbWUiIF07IHRoZW4KLQkJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCQljZCAke0lNR0RFUExPWURJUn0KIAkJaWYgWyAtZSAke0lNQUdFX05BTUV9JHt2bmFtZX0ke0lNQUdFX05BTUVfU1VGRklYfS51YmlmcyBdOyB0aGVuCiAJCQlsbiAtc2YgJHtJTUFHRV9OQU1FfSR7dm5hbWV9JHtJTUFHRV9OQU1FX1NVRkZJWH0udWJpZnMgXAogCQkJJHtJTUFHRV9MSU5LX05BTUV9JHt2bmFtZX0udWJpZnMKQEAgLTE3Niw5ICsxODIsOSBAQAogCW11bHRpdWJpX21rZnMgIiR7TUtVQklGU19BUkdTfSIgIiR7VUJJTklaRV9BUkdTfSIKIH0KIAotSU1BR0VfQ01EX3ViaWZzID0gIm1rZnMudWJpZnMgLXIgJHtJTUFHRV9ST09URlN9IC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LnViaWZzICR7TUtVQklGU19BUkdTfSIKK0lNQUdFX0NNRF91YmlmcyA9ICJta2ZzLnViaWZzIC1yICR7SU1BR0VfUk9PVEZTfSAtbyAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LnViaWZzICR7TUtVQklGU19BUkdTfSIKIAotV0tTX0ZJTEUgPz0gIiR7SU1BR0VfQkFTRU5BTUV9LiR7TUFDSElORX0ud2tzIgorV0tTX0ZJTEUgPz89ICIke0lNQUdFX0JBU0VOQU1FfS4ke01BQ0hJTkV9LndrcyIKIFdLU19GSUxFUyA/PSAiJHtXS1NfRklMRX0gJHtJTUFHRV9CQVNFTkFNRX0ud2tzIgogV0tTX1NFQVJDSF9QQVRIID89ICIke1RISVNESVJ9OiR7QCc6Jy5qb2luKCclcy9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcycgJSBsIGZvciBsIGluICcke0JCUEFUSH06JHtDT1JFQkFTRX0nLnNwbGl0KCc6JykpfSIKIFdLU19GVUxMX1BBVEggPSAiJHtAd2tzX3NlYXJjaCgnJHtXS1NfRklMRVN9Jy5zcGxpdCgpLCAnJHtXS1NfU0VBUkNIX1BBVEh9Jykgb3IgJyd9IgpAQCAtMTkzLDIyICsxOTksNzYgQEAKICAgICAgICAgICAgIGlmIHNlYXJjaGVkOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWFyY2hlZAogCitXSUNfQ1JFQVRFX0VYVFJBX0FSR1MgPz0gIiIKKwogSU1BR0VfQ01EX3dpYyAoKSB7Ci0Jb3V0PSIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0iCisJb3V0PSIke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSIKIAl3a3M9IiR7V0tTX0ZVTExfUEFUSH0iCiAJaWYgWyAteiAiJHdrcyIgXTsgdGhlbgogCQliYmZhdGFsICJObyBraWNrc3RhcnQgZmlsZXMgZnJvbSBXS1NfRklMRVMgd2VyZSBmb3VuZDogJHtXS1NfRklMRVN9LiBQbGVhc2Ugc2V0IFdLU19GSUxFIG9yIFdLU19GSUxFUyBhcHByb3ByaWF0ZWx5LiIKIAlmaQogCi0JQlVJTERESVI9IiR7VE9QRElSfSIgd2ljIGNyZWF0ZSAiJHdrcyIgLS12YXJzICIke1NUQUdJTkdfRElSX1RBUkdFVH0vaW1nZGF0YS8iIC1lICIke0lNQUdFX0JBU0VOQU1FfSIgLW8gIiRvdXQvIgorCUJVSUxERElSPSIke1RPUERJUn0iIHdpYyBjcmVhdGUgIiR3a3MiIC0tdmFycyAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9L2ltZ2RhdGEvIiAtZSAiJHtJTUFHRV9CQVNFTkFNRX0iIC1vICIkb3V0LyIgJHtXSUNfQ1JFQVRFX0VYVFJBX0FSR1N9CiAJbXYgIiRvdXQvYnVpbGQvJChiYXNlbmFtZSAiJHt3a3MlLndrc30iKSIqLmRpcmVjdCAiJG91dCR7SU1BR0VfTkFNRV9TVUZGSVh9LndpYyIKIAlybSAtcmYgIiRvdXQvIgogfQogSU1BR0VfQ01EX3dpY1t2YXJkZXBzZXhjbHVkZV0gPSAiV0tTX0ZVTExfUEFUSCBXS1NfRklMRVMiCiAKICMgUmVidWlsZCB3aGVuIHRoZSB3a3MgZmlsZSBvciB2YXJzIGluIFdJQ1ZBUlMgY2hhbmdlCi1VU0lOR19XSUMgPSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdJTUFHRV9GU1RZUEVTJywgJ3dpYyAnICsgJyAnLmpvaW4oJ3dpYy4lcycgJSBjIGZvciBjIGluICcke0NPTVBSRVNTSU9OVFlQRVN9Jy5zcGxpdCgpKSwgJzEnLCAnJywgZCl9IgotZG9faW1hZ2Vfd2ljW2ZpbGUtY2hlY2tzdW1zXSArPSAiJHtAJyR7V0tTX0ZVTExfUEFUSH06JXMnICUgb3MucGF0aC5leGlzdHMoJyR7V0tTX0ZVTExfUEFUSH0nKSBpZiAnJHtVU0lOR19XSUN9JyBlbHNlICcnfSIKK1VTSU5HX1dJQyA9ICIke0BiYi51dGlscy5jb250YWluc19hbnkoJ0lNQUdFX0ZTVFlQRVMnLCAnd2ljICcgKyAnICcuam9pbignd2ljLiVzJyAlIGMgZm9yIGMgaW4gJyR7Q09OVkVSU0lPTlRZUEVTfScuc3BsaXQoKSksICcxJywgJycsIGQpfSIKK1dLU19GSUxFX0NIRUNLU1VNID0gIiR7QCcke1dLU19GVUxMX1BBVEh9OiVzJyAlIG9zLnBhdGguZXhpc3RzKCcke1dLU19GVUxMX1BBVEh9JykgaWYgJyR7VVNJTkdfV0lDfScgZWxzZSAnJ30iCitkb19pbWFnZV93aWNbZmlsZS1jaGVja3N1bXNdICs9ICIke1dLU19GSUxFX0NIRUNLU1VNfSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignVVNJTkdfV0lDJywgVHJ1ZSkgYW5kICdkb19ib290aW1nJyBpbiBkOgorICAgICAgICBiYi5idWlsZC5hZGR0YXNrKCdkb19pbWFnZV93aWMnLCAnJywgJ2RvX2Jvb3RpbWcnLCBkKQorfQorCitweXRob24gZG9fd3JpdGVfd2tzX3RlbXBsYXRlICgpIHsKKyAgICAiIiJXcml0ZSBvdXQgZXhwYW5kZWQgdGVtcGxhdGUgY29udGVudHMgdG8gV0tTX0ZVTExfUEFUSC4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgIHRlbXBsYXRlX2JvZHkgPSBkLmdldFZhcignX1dLU19URU1QTEFURScsIFRydWUpCisKKyAgICAjIFJlbW92ZSBhbnkgcmVtbmFudCB2YXJpYWJsZSByZWZlcmVuY2VzIGxlZnQgYmVoaW5kIGJ5IHRoZSBleHBhbnNpb24KKyAgICAjIGR1ZSB0byB1bmRlZmluZWQgdmFyaWFibGVzCisgICAgZXhwYW5kX3Zhcl9yZWdleHAgPSByZS5jb21waWxlKHIiXCR7W157fUBcblx0IDpdK30iKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIG5ld19ib2R5ID0gcmUuc3ViKGV4cGFuZF92YXJfcmVnZXhwLCAnJywgdGVtcGxhdGVfYm9keSkKKyAgICAgICAgaWYgbmV3X2JvZHkgPT0gdGVtcGxhdGVfYm9keToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZW1wbGF0ZV9ib2R5ID0gbmV3X2JvZHkKKworICAgIHdrc19maWxlID0gZC5nZXRWYXIoJ1dLU19GVUxMX1BBVEgnLCBUcnVlKQorICAgIHdpdGggb3Blbih3a3NfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKHRlbXBsYXRlX2JvZHkpCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1VTSU5HX1dJQycsIFRydWUpOgorICAgICAgICB3a3NfZmlsZV91ID0gZC5nZXRWYXIoJ1dLU19GVUxMX1BBVEgnLCBGYWxzZSkKKyAgICAgICAgd2tzX2ZpbGUgPSBkLmV4cGFuZCh3a3NfZmlsZV91KQorICAgICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHdrc19maWxlKQorICAgICAgICBpZiBleHQgPT0gJy5pbicgYW5kIG9zLnBhdGguZXhpc3RzKHdrc19maWxlKToKKyAgICAgICAgICAgIHdrc19vdXRfZmlsZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCBvcy5wYXRoLmJhc2VuYW1lKGJhc2UpKQorICAgICAgICAgICAgZC5zZXRWYXIoJ1dLU19GVUxMX1BBVEgnLCB3a3Nfb3V0X2ZpbGUpCisgICAgICAgICAgICBkLnNldFZhcignV0tTX1RFTVBMQVRFX1BBVEgnLCB3a3NfZmlsZV91KQorICAgICAgICAgICAgZC5zZXRWYXIoJ1dLU19GSUxFX0NIRUNLU1VNJywgJyR7V0tTX1RFTVBMQVRFX1BBVEh9OlRydWUnKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHdrc19maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFByZXZpb3VzbHksIEkgdXNlZCBleHBhbmRXaXRoUmVmcyB0byBnZXQgdGhlIGRlcGVuZGVuY3kgbGlzdAorICAgICAgICAgICAgICAgICMgYW5kIGFkZCBpdCB0byBXSUNWQVJTLCBidXQgdGhlcmUncyBubyBwb2ludCByZS1wYXJzaW5nIHRoZQorICAgICAgICAgICAgICAgICMgZmlsZSBpbiBwcm9jZXNzX3drc190ZW1wbGF0ZSBhcyB3ZWxsLCBzbyBqdXN0IHB1dCBpdCBpbgorICAgICAgICAgICAgICAgICMgYSB2YXJpYWJsZSBhbmQgbGV0IHRoZSBtZXRhZGF0YSBkZWFsIHdpdGggdGhlIGRlcHMuCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ19XS1NfVEVNUExBVEUnLCBib2R5KQorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmFkZHRhc2soJ2RvX3dyaXRlX3drc190ZW1wbGF0ZScsICdkb19pbWFnZV93aWMnLCBOb25lLCBkKQorfQogCiBFWFRSQV9JTUFHRUNNRCA9ICIiCiAKQEAgLTI2MiwyNSArMzIyLDM1IEBACiAgICAgd2ljIHdpYy5neiB3aWMuYnoyIHdpYy5sem1hIFwKICIKIAotQ09NUFJFU1NJT05UWVBFUyA9ICJneiBiejIgbHptYSB4eiBsejQgc3VtIG1kNXN1bSBzaGExc3VtIHNoYTIyNHN1bSBzaGEyNTZzdW0gc2hhMzg0c3VtIHNoYTUxMnN1bSIKLUNPTVBSRVNTX0NNRF9sem1hID0gImx6bWEgLWsgLWYgLTcgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0iCi1DT01QUkVTU19DTURfZ3ogPSAiZ3ppcCAtZiAtOSAtYyAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9Lmd6IgotQ09NUFJFU1NfQ01EX2J6MiA9ICJwYnppcDIgLWYgLWsgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0iCi1DT01QUkVTU19DTURfeHogPSAieHogLWYgLWsgLWMgJHtYWl9DT01QUkVTU0lPTl9MRVZFTH0gJHtYWl9USFJFQURTfSAtLWNoZWNrPSR7WFpfSU5URUdSSVRZX0NIRUNLfSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9Lnh6IgotQ09NUFJFU1NfQ01EX2x6NCA9ICJsejRjIC05IC1jICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0ubHo0IgotQ09NUFJFU1NfQ01EX3N1bSA9ICJzdW10b29sIC1pICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9IC1vICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnN1bSAke0pGRlMyX1NVTV9FWFRSQV9BUkdTfSIKLUNPTVBSRVNTX0NNRF9tZDVzdW0gPSAibWQ1c3VtICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0ubWQ1c3VtIgotQ09NUFJFU1NfQ01EX3NoYTFzdW0gPSAic2hhMXN1bSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnNoYTFzdW0iCi1DT01QUkVTU19DTURfc2hhMjI0c3VtID0gInNoYTIyNHN1bSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnNoYTIyNHN1bSIKLUNPTVBSRVNTX0NNRF9zaGEyNTZzdW0gPSAic2hhMjU2c3VtICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0uc2hhMjU2c3VtIgotQ09NUFJFU1NfQ01EX3NoYTM4NHN1bSA9ICJzaGEzODRzdW0gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gPiAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfS5zaGEzODRzdW0iCi1DT01QUkVTU19DTURfc2hhNTEyc3VtID0gInNoYTUxMnN1bSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnNoYTUxMnN1bSIKLUNPTVBSRVNTX0RFUEVORFNfbHptYSA9ICJ4ei1uYXRpdmUiCi1DT01QUkVTU19ERVBFTkRTX2d6ID0gIiIKLUNPTVBSRVNTX0RFUEVORFNfYnoyID0gInBiemlwMi1uYXRpdmUiCi1DT01QUkVTU19ERVBFTkRTX3h6ID0gInh6LW5hdGl2ZSIKLUNPTVBSRVNTX0RFUEVORFNfbHo0ID0gImx6NC1uYXRpdmUiCi1DT01QUkVTU19ERVBFTkRTX3N1bSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorIyBDb21wcmVzc2lvbiBpcyBhIHNwZWNpYWwgY2FzZSBvZiBjb252ZXJzaW9uLiBUaGUgb2xkIHZhcmlhYmxlCisjIG5hbWVzIGFyZSBzdGlsbCBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuIFdoZW4gZGVmaW5pbmcKKyMgbmV3IGNvbXByZXNzaW9uIG9yIGNvbnZlcnNpb24gY29tbWFuZHMsIHVzZSBDT05WRVJTSU9OVFlQRVMgYW5kCisjIENPTlZFUlNJT05fQ01EL0RFUEVORFMuCitDT01QUkVTU0lPTlRZUEVTID89ICIiCisKK0NPTlZFUlNJT05UWVBFUyA9ICJneiBiejIgbHptYSB4eiBsejQgemlwIHN1bSBtZDVzdW0gc2hhMXN1bSBzaGEyMjRzdW0gc2hhMjU2c3VtIHNoYTM4NHN1bSBzaGE1MTJzdW0gYm1hcCAke0NPTVBSRVNTSU9OVFlQRVN9IgorQ09OVkVSU0lPTl9DTURfbHptYSA9ICJsem1hIC1rIC1mIC03ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9IgorQ09OVkVSU0lPTl9DTURfZ3ogPSAiZ3ppcCAtZiAtOSAtYyAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9Lmd6IgorQ09OVkVSU0lPTl9DTURfYnoyID0gInBiemlwMiAtZiAtayAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSIKK0NPTlZFUlNJT05fQ01EX3h6ID0gInh6IC1mIC1rIC1jICR7WFpfQ09NUFJFU1NJT05fTEVWRUx9ICR7WFpfVEhSRUFEU30gLS1jaGVjaz0ke1haX0lOVEVHUklUWV9DSEVDS30gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gPiAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfS54eiIKK0NPTlZFUlNJT05fQ01EX2x6NCA9ICJsejRjIC05IC1jICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0ubHo0IgorQ09OVkVSU0lPTl9DTURfemlwID0gInppcCAke1pJUF9DT01QUkVTU0lPTl9MRVZFTH0gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0uemlwICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9IgorQ09OVkVSU0lPTl9DTURfc3VtID0gInN1bXRvb2wgLWkgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gLW8gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0uc3VtICR7SkZGUzJfU1VNX0VYVFJBX0FSR1N9IgorQ09OVkVSU0lPTl9DTURfbWQ1c3VtID0gIm1kNXN1bSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9Lm1kNXN1bSIKK0NPTlZFUlNJT05fQ01EX3NoYTFzdW0gPSAic2hhMXN1bSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnNoYTFzdW0iCitDT05WRVJTSU9OX0NNRF9zaGEyMjRzdW0gPSAic2hhMjI0c3VtICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0uc2hhMjI0c3VtIgorQ09OVkVSU0lPTl9DTURfc2hhMjU2c3VtID0gInNoYTI1NnN1bSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnNoYTI1NnN1bSIKK0NPTlZFUlNJT05fQ01EX3NoYTM4NHN1bSA9ICJzaGEzODRzdW0gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gPiAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfS5zaGEzODRzdW0iCitDT05WRVJTSU9OX0NNRF9zaGE1MTJzdW0gPSAic2hhNTEyc3VtICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0uc2hhNTEyc3VtIgorQ09OVkVSU0lPTl9DTURfYm1hcCA9ICJibWFwdG9vbCBjcmVhdGUgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gLW8gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0uYm1hcCIKK0NPTlZFUlNJT05fREVQRU5EU19sem1hID0gInh6LW5hdGl2ZSIKK0NPTlZFUlNJT05fREVQRU5EU19neiA9ICIiCitDT05WRVJTSU9OX0RFUEVORFNfYnoyID0gInBiemlwMi1uYXRpdmUiCitDT05WRVJTSU9OX0RFUEVORFNfeHogPSAieHotbmF0aXZlIgorQ09OVkVSU0lPTl9ERVBFTkRTX2x6NCA9ICJsejQtbmF0aXZlIgorQ09OVkVSU0lPTl9ERVBFTkRTX3ppcCA9ICJ6aXAtbmF0aXZlIgorQ09OVkVSU0lPTl9ERVBFTkRTX3N1bSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorQ09OVkVSU0lPTl9ERVBFTkRTX2JtYXAgPSAiYm1hcC10b29scy1uYXRpdmUiCiAKIFJVTk5BQkxFX0lNQUdFX1RZUEVTID89ICJleHQyIGV4dDMgZXh0NCIKIFJVTk5BQkxFX01BQ0hJTkVfUEFUVEVSTlMgPz0gInFlbXUiCkBAIC0yOTYsNCArMzY2LDQgQEAKIAogIyBUaGUgV0lDVkFSUyB2YXJpYWJsZSBpcyB1c2VkIHRvIGRlZmluZSBsaXN0IG9mIGJpdGJha2UgdmFyaWFibGVzIHVzZWQgaW4gd2ljIGNvZGUKICMgdmFyaWFibGVzIGZyb20gdGhpcyBsaXN0IGlzIHdyaXR0ZW4gdG8gPGltYWdlPi5lbnYgZmlsZQotV0lDVkFSUyA/PSAiQkJMQVlFUlMgREVQTE9ZX0RJUl9JTUFHRSBIRERESVIgSU1BR0VfQkFTRU5BTUUgSU1BR0VfQk9PVF9GSUxFUyBJTUFHRV9MSU5LX05BTUUgSU1BR0VfUk9PVEZTIElOSVRSQU1GU19GU1RZUEVTIElOSVRSRCBJU09ESVIgTUFDSElORV9BUkNIIFJPT1RGU19TSVpFIFNUQUdJTkdfREFUQURJUiBTVEFHSU5HX0RJUl9OQVRJVkUgU1RBR0lOR19MSUJESVIgVEFSR0VUX1NZUyIKK1dJQ1ZBUlMgPz0gIkJCTEFZRVJTIElNR0RFUExPWURJUiBERVBMT1lfRElSX0lNQUdFIEhERERJUiBJTUFHRV9CQVNFTkFNRSBJTUFHRV9CT09UX0ZJTEVTIElNQUdFX0xJTktfTkFNRSBJTUFHRV9ST09URlMgSU5JVFJBTUZTX0ZTVFlQRVMgSU5JVFJEIElTT0RJUiBNQUNISU5FX0FSQ0ggUk9PVEZTX1NJWkUgU1RBR0lOR19EQVRBRElSIFNUQUdJTkdfRElSX05BVElWRSBTVEFHSU5HX0xJQkRJUiBUQVJHRVRfU1lTIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzCmluZGV4IDE5ZTRhYTIuLjZjOGMxZmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzX3Vib290LmJiY2xhc3MKQEAgLTIsMjUgKzIsMjUgQEAKIAogb2VfbWtpbWFnZSAoKSB7CiAgICAgbWtpbWFnZSAtQSAke1VCT09UX0FSQ0h9IC1PIGxpbnV4IC1UIHJhbWRpc2sgLUMgJDIgLW4gJHtJTUFHRV9OQU1FfSBcCi0gICAgICAgIC1kICR7REVQTE9ZX0RJUl9JTUFHRX0vJDEgJHtERVBMT1lfRElSX0lNQUdFfS8kMS51LWJvb3QKKyAgICAgICAgLWQgJHtJTUdERVBMT1lESVJ9LyQxICR7SU1HREVQTE9ZRElSfS8kMS51LWJvb3QKICAgICBpZiBbIHgkMyA9IHgiY2xlYW4iIF07IHRoZW4KICAgICAgICAgcm0gJDEKICAgICBmaQogfQogCi1DT01QUkVTU0lPTlRZUEVTICs9ICJnei51LWJvb3QgYnoyLnUtYm9vdCBsem1hLnUtYm9vdCB1LWJvb3QiCitDT05WRVJTSU9OVFlQRVMgKz0gImd6LnUtYm9vdCBiejIudS1ib290IGx6bWEudS1ib290IHUtYm9vdCIKIAotQ09NUFJFU1NfREVQRU5EU191LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgotQ09NUFJFU1NfQ01EX3UtYm9vdCAgICAgID0gIm9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSBub25lIgorQ09OVkVSU0lPTl9ERVBFTkRTX3UtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT05WRVJTSU9OX0NNRF91LWJvb3QgICAgICA9ICJvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gbm9uZSIKIAotQ09NUFJFU1NfREVQRU5EU19nei51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgotQ09NUFJFU1NfQ01EX2d6LnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2d6fTsgb2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmd6IGd6aXAgY2xlYW4iCitDT05WRVJTSU9OX0RFUEVORFNfZ3oudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTlZFUlNJT05fQ01EX2d6LnUtYm9vdCAgICAgID0gIiR7Q09OVkVSU0lPTl9DTURfZ3p9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uZ3ogZ3ppcCBjbGVhbiIKIAotQ09NUFJFU1NfREVQRU5EU19iejIudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKLUNPTVBSRVNTX0NNRF9iejIudS1ib290ICAgICAgPSAiJHtDT01QUkVTU19DTURfYnoyfTsgb2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9LmJ6MiBiemlwMiBjbGVhbiIKK0NPTlZFUlNJT05fREVQRU5EU19iejIudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTlZFUlNJT05fQ01EX2J6Mi51LWJvb3QgICAgICA9ICIke0NPTlZFUlNJT05fQ01EX2J6Mn07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5iejIgYnppcDIgY2xlYW4iCiAKLUNPTVBSRVNTX0RFUEVORFNfbHptYS51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgotQ09NUFJFU1NfQ01EX2x6bWEudS1ib290ICAgICAgPSAiJHtDT01QUkVTU19DTURfbHptYX07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5sem1hIGx6bWEgY2xlYW4iCitDT05WRVJTSU9OX0RFUEVORFNfbHptYS51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09OVkVSU0lPTl9DTURfbHptYS51LWJvb3QgICAgICA9ICIke0NPTlZFUlNJT05fQ01EX2x6bWF9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0ubHptYSBsem1hIGNsZWFuIgogCiBJTUFHRV9UWVBFUyArPSAiZXh0Mi51LWJvb3QgZXh0Mi5nei51LWJvb3QgZXh0Mi5iejIudS1ib290IGV4dDIubHptYS51LWJvb3QgZXh0My5nei51LWJvb3QgZXh0NC5nei51LWJvb3QgY3Bpby5nei51LWJvb3QiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCmluZGV4IGM1N2IyMTcuLjFkNzM3NzggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbnNhbmUuYmJjbGFzcwpAQCAtNTQsOCArNTQsOCBAQAogIyBmZWVsIGZyZWUgdG8gYWRkIGFuZCBjb3JyZWN0LgogIwogIyAgICAgICAgICAgVEFSR0VUX09TICBUQVJHRVRfQVJDSCAgIE1BQ0hJTkUsIE9TQUJJLCBBQklWRVJTSU9OLCBMaXR0bGUgRW5kaWFuLCAzMmJpdD8KLWRlZiBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKToKLSAgICByZXR1cm4geworZGVmIHBhY2thZ2VfcWFfZ2V0X21hY2hpbmVfZGljdChkKToKKyAgICBtYWNoZGF0YSA9IHsKICAgICAgICAgICAgICJkYXJ3aW45IiA6IHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICB9LApAQCAtNjYsNiArNjYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiIDogICAgICAoMywgICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJlcGlwaGFueSI6ICAgKDQ2NDMsICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgImxpbnV4IiA6IHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NCIgOiAgICgxODMsICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKQEAgLTg3LDYgKzg5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAogICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2lzYTMycjYiOiAgICggOCwgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzaXNhMzJyNmVsIjogKCA4LCAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNpc2E2NHI2IjogICAoIDgsICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2lzYTY0cjZlbCI6ICggOCwgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJuaW9zMiI6ICAgICAgKDExMywgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgInMzOTAiOiAgICAgICAoMjIsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKQEAgLTE2OCwxOCArMTc0LDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgfQogCisgICAgIyBBZGQgaW4gYW55IGV4dHJhIHVzZXIgc3VwcGxpZWQgZGF0YSB3aGljaCBtYXkgY29tZSBmcm9tIGEgQlNQIGxheWVyLCByZW1vdmluZyB0aGUKKyAgICAjIG5lZWQgdG8gYWx3YXlzIGNoYW5nZSB0aGlzIGNsYXNzIGRpcmVjdGx5CisgICAgZXh0cmFfbWFjaGRhdGEgPSAoZC5nZXRWYXIoIlBBQ0tBR0VRQV9FWFRSQV9NQUNIREVGRlVOQ1MiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZvciBtIGluIGV4dHJhX21hY2hkYXRhOgorICAgICAgICBjYWxsID0gbSArICIobWFjaGRhdGEsIGQpIgorICAgICAgICBsb2NzID0geyAibWFjaGRhdGEiIDogbWFjaGRhdGEsICJkIiA6IGR9CisgICAgICAgIG1hY2hkYXRhID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKIAotZGVmIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpOgotICAgICIiIiBSZW1vdmUgdGhlIGNvbW1vbiBwcmVmaXggZnJvbSB0aGUgcGF0aC4gSW4gdGhpcyBjYXNlIGl0IGlzIHRoZSBUTVBESVIiIiIKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKGQuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSArICIvIiwgIiIpCisgICAgcmV0dXJuIG1hY2hkYXRhCisKKworZGVmIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLCBkLCBwa2c9Tm9uZSk6CisgICAgIiIiCisgICAgUmVtb3ZlIHJlZHVuZGFudCBwYXRocyBmcm9tIHRoZSBwYXRoIGZvciBkaXNwbGF5LiAgSWYgcGtnIGlzbid0IHNldCB0aGVuCisgICAgVE1QRElSIGlzIHN0cmlwcGVkLCBvdGhlcndpc2UgUEtHREVTVC9wa2cgaXMgc3RyaXBwZWQuCisgICAgIiIiCisgICAgaWYgcGtnOgorICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKG9zLnBhdGguam9pbihkLmdldFZhcigiUEtHREVTVCIsIFRydWUpLCBwa2cpLCAiLyIpCisgICAgcmV0dXJuIHBhdGgucmVwbGFjZShkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSksICIvIikucmVwbGFjZSgiLy8iLCAiLyIpCiAKIGRlZiBwYWNrYWdlX3FhX3dyaXRlX2Vycm9yKHR5cGUsIGVycm9yLCBkKToKICAgICBsb2dmaWxlID0gZC5nZXRWYXIoJ1FBX0xPR0ZJTEUnLCBUcnVlKQogICAgIGlmIGxvZ2ZpbGU6CiAgICAgICAgIHAgPSBkLmdldFZhcignUCcsIFRydWUpCi0gICAgICAgIGYgPSBmaWxlKCBsb2dmaWxlLCAiYSsiKQotICAgICAgICBwcmludCA+PiBmLCAiJXM6ICVzIFslc10iICUgKHAsIGVycm9yLCB0eXBlKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhKyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCIlczogJXMgWyVzXVxuIiAlIChwLCBlcnJvciwgdHlwZSkpCiAKIGRlZiBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcihlcnJvcl9jbGFzcywgZXJyb3JfbXNnLCBkKToKICAgICBwYWNrYWdlX3FhX3dyaXRlX2Vycm9yKGVycm9yX2NsYXNzLCBlcnJvcl9tc2csIGQpCkBAIC00MDAsNyArNDIwLDcgQEAKICAgICAgICAgc3lzcm9vdF9wYXRoX3VzciA9IHN5c3Jvb3RfcGF0aCArIGV4ZWNfcHJlZml4CiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGRkX291dHB1dCA9IGJiLnByb2Nlc3MuUG9wZW4oWyJwcmVsaW5rLXJ0bGQiLCAiLS1yb290Iiwgc3lzcm9vdF9wYXRoLCBwYXRoXSwgc3Rkb3V0PXN1Yi5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICBsZGRfb3V0cHV0ID0gYmIucHJvY2Vzcy5Qb3BlbihbInByZWxpbmstcnRsZCIsICItLXJvb3QiLCBzeXNyb290X3BhdGgsIHBhdGhdLCBzdGRvdXQ9c3ViLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yOgogICAgICAgICAgICAgZXJyb3JfbXNnID0gcG4gKyAiOiBwcmVsaW5rLXJ0bGQgYWJvcnRlZCB3aGVuIHByb2Nlc3NpbmcgJXMiICUgcGF0aAogICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIiwgZXJyb3JfbXNnLCBkKQpAQCAtNDk1LDYgKzUxNSw4IEBACiAgICAgIiIiCiAgICAgQ2hlY2sgaWYgYXJjaHMgYXJlIGNvbXBhdGlibGUKICAgICAiIiIKKyAgICBpbXBvcnQgcmUKKwogICAgIGlmIG5vdCBlbGY6CiAgICAgICAgIHJldHVybgogCkBAIC01MjAsMTUgKzU0MiwxNSBAQAogCiAgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCiAgICAgKG1hY2hpbmUsIG9zYWJpLCBhYml2ZXJzaW9uLCBsaXR0bGVlbmRpYW4sIGJpdHMpIFwKLSAgICAgICAgPSBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKVt0YXJnZXRfb3NdW3RhcmdldF9hcmNoXQorICAgICAgICA9IHBhY2thZ2VfcWFfZ2V0X21hY2hpbmVfZGljdChkKVt0YXJnZXRfb3NdW3RhcmdldF9hcmNoXQogCiAgICAgIyBDaGVjayB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBlbmRpYW5uZXMgb2YgdGhlIGJpbmFyeQotICAgIGlmIG5vdCAoKG1hY2hpbmUgPT0gZWxmLm1hY2hpbmUoKSkgb3IgXAotICAgICAgICAoKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSApIGFuZCAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHRhcmdldF9vcyA9PSAibGludXgtZ251bjMyIikpKToKLSAgICAgICAgcGFja2FnZV9xYV9hZGRfbWVzc2FnZShtZXNzYWdlcywgImFyY2giLCAiQXJjaGl0ZWN0dXJlIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSBvbiAlcyIgJSBcCi0gICAgICAgICAgICAgICAgIChtYWNoaW5lLCBlbGYubWFjaGluZSgpLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkpCi0gICAgZWxpZiBub3QgKChiaXRzID09IGVsZi5hYmlTaXplKCkpIG9yICBcCi0gICAgICAgICgoKCJ2aXJ0dWFsL2tlcm5lbCIgaW4gcHJvdmlkZXMpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZSIsIGQpICkgYW5kICh0YXJnZXRfb3MgPT0gImxpbnV4LWdudXgzMiIgb3IgdGFyZ2V0X29zID09ICJsaW51eC1nbnVuMzIiKSkpOgorICAgIGlzXzMyID0gKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSkgYW5kIFwKKyAgICAgICAgICAgICh0YXJnZXRfb3MgPT0gImxpbnV4LWdudXgzMiIgb3IgcmUubWF0Y2goJ21pcHM2NC4qMzInLCBkLmdldFZhcignREVGQVVMVFRVTkUnLCBUcnVlKSkpCisgICAgaWYgbm90ICgobWFjaGluZSA9PSBlbGYubWFjaGluZSgpKSBvciBpc18zMik6CisgICAgICAgIHBhY2thZ2VfcWFfYWRkX21lc3NhZ2UobWVzc2FnZXMsICJhcmNoIiwgIkFyY2hpdGVjdHVyZSBkaWQgbm90IG1hdGNoICglcywgZXhwZWN0ZWQgJXMpIG9uICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZyhlbGYubWFjaGluZSgpKSwgb2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKG1hY2hpbmUpLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkpCisgICAgZWxpZiBub3QgKChiaXRzID09IGVsZi5hYmlTaXplKCkpIG9yIGlzXzMyKToKICAgICAgICAgcGFja2FnZV9xYV9hZGRfbWVzc2FnZShtZXNzYWdlcywgImFyY2giLCAiQml0IHNpemUgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpICVzIG9uICVzIiAlIFwKICAgICAgICAgICAgICAgICAgKGJpdHMsIGVsZi5hYmlTaXplKCksIGJwbiwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpKQogICAgIGVsaWYgbm90IGxpdHRsZWVuZGlhbiA9PSBlbGYuaXNMaXR0bGVFbmRpYW4oKToKQEAgLTY3MiwyMyArNjk0LDI0IEBACiAgICAgICAgICAgICAgICAgdHJpbW1lZCA9IHBhdGgucmVwbGFjZShvcy5wYXRoLmpvaW4gKGQuZ2V0VmFyKCJQS0dERVNUIiwgVHJ1ZSksIG5hbWUpLCAiIikKICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2FkZF9tZXNzYWdlKG1lc3NhZ2VzLCAic3ltbGluay10by1zeXNyb290IiwgIlN5bWxpbmsgJXMgaW4gJXMgcG9pbnRzIHRvIFRNUERJUiIgJSAodHJpbW1lZCwgbmFtZSkpCiAKLWRlZiBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6CisjIENoZWNrIGxpY2Vuc2UgdmFyaWFibGVzCitkb19wb3B1bGF0ZV9saWNbcG9zdGZ1bmNzXSArPSAicG9wdWxhdGVfbGljX3FhX2NoZWNrc3VtIgorcHl0aG9uIHBvcHVsYXRlX2xpY19xYV9jaGVja3N1bSgpIHsKICAgICAiIiIKLSAgICBDaGVjayBmb3IgY2hhbmdlcyBpbiB0aGUgbGljZW5zZSBmaWxlcyAKKyAgICBDaGVjayBmb3IgY2hhbmdlcyBpbiB0aGUgbGljZW5zZSBmaWxlcy4KICAgICAiIiIKICAgICBpbXBvcnQgdGVtcGZpbGUKICAgICBzYW5lID0gVHJ1ZQogCi0gICAgbGljX2ZpbGVzID0gZC5nZXRWYXIoJ0xJQ19GSUxFU19DSEtTVU0nLCBUcnVlKQorICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNfQ0hLU1VNJywgVHJ1ZSkgb3IgJycKICAgICBsaWMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCiAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQogCiAgICAgaWYgbGljID09ICJDTE9TRUQiOgogICAgICAgICByZXR1cm4KIAotICAgIGlmIG5vdCBsaWNfZmlsZXM6Ci0gICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJsaWNlbnNlLWNoZWNrc3VtIiwgcG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlvbiAoTElDX0ZJTEVTX0NIS1NVTSkiLCBkKQotICAgICAgICByZXR1cm4KKyAgICBpZiBub3QgbGljX2ZpbGVzIGFuZCBkLmdldFZhcignU1JDX1VSSScsIFRydWUpOgorICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpY2Vuc2UtY2hlY2tzdW0iLCBwbiArICI6IFJlY2lwZSBmaWxlIGZldGNoZXMgZmlsZXMgYW5kIGRvZXMgbm90IGhhdmUgbGljZW5zZSBmaWxlIGluZm9ybWF0aW9uIChMSUNfRklMRVNfQ0hLU1VNKSIsIGQpCiAKICAgICBzcmNkaXIgPSBkLmdldFZhcignUycsIFRydWUpCiAKQEAgLTY5Niw3ICs3MTksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKQogICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgotICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpY2Vuc2UtY2hlY2tzdW0iLCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICIgKyB1cmwsIGQpCisgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpY2Vuc2UtY2hlY2tzdW0iLCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICIgKyB1cmwsIGQpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBzcmNsaWNmaWxlID0gb3MucGF0aC5qb2luKHNyY2RpciwgcGF0aCkKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNyY2xpY2ZpbGUpOgpAQCAtNzIwLDcgKzc0Myw3IEBACiAgICAgICAgICAgICBsaW5lc291dCA9IDAKICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpOgogICAgICAgICAgICAgICAgIGxpbmVubyArPSAxCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVubyA+PSBiZWdpbmxpbmUpOiAKKyAgICAgICAgICAgICAgICBpZiAobGluZW5vID49IGJlZ2lubGluZSk6CiAgICAgICAgICAgICAgICAgICAgIGlmICgobGluZW5vIDw9IGVuZGxpbmUpIG9yIG5vdCBlbmRsaW5lKToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvLndyaXRlKGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc291dCArPSAxCkBAIC03NTIsNyArNzc1LDExIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1zZyA9IHBuICsgIjogTElDX0ZJTEVTX0NIS1NVTSBpcyBub3Qgc3BlY2lmaWVkIGZvciAiICsgIHVybAogICAgICAgICAgICAgICAgIG1zZyA9IG1zZyArICJcbiIgKyBwbiArICI6IFRoZSBtZDUgY2hlY2tzdW0gaXMgIiArIG1kNWNoa3N1bQotICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpY2Vuc2UtY2hlY2tzdW0iLCBtc2csIGQpCisgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpY2Vuc2UtY2hlY2tzdW0iLCBtc2csIGQpCisKKyAgICBpZiBub3Qgc2FuZToKKyAgICAgICAgYmIuZmF0YWwoIkZhdGFsIFFBIGVycm9ycyBmb3VuZCwgZmFpbGluZyB0YXNrLiIpCit9CiAKIGRlZiBwYWNrYWdlX3FhX2NoZWNrX3N0YWdlZChwYXRoLGQpOgogICAgICIiIgpAQCAtOTg0LDEyICsxMDExLDEyIEBACiAgICAgcmV0dXJuIHNhbmUKIAogZGVmIHBhY2thZ2VfcWFfY2hlY2tfZW5jb2Rpbmcoa2V5cywgZW5jb2RlLCBkKToKLSAgICBkZWYgY2hlY2tfZW5jb2Rpbmcoa2V5LGVuYyk6CisgICAgZGVmIGNoZWNrX2VuY29kaW5nKGtleSwgZW5jKToKICAgICAgICAgc2FuZSA9IFRydWUKICAgICAgICAgdmFsdWUgPSBkLmdldFZhcihrZXksIFRydWUpCiAgICAgICAgIGlmIHZhbHVlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHMgPSB1bmljb2RlKHZhbHVlLCBlbmMpCisgICAgICAgICAgICAgICAgcyA9IHZhbHVlLmVuY29kZShlbmMpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGhhcyBub24gJXMgY2hhcmFjdGVycyIgJSAoa2V5LGVuYykKICAgICAgICAgICAgICAgICBzYW5lID0gRmFsc2UKQEAgLTEyMDgsMTIgKzEyMzUsNiBAQAogTWlzc2luZyBpbmhlcml0IGdldHRleHQ/IiIiICUgKGd0LCBjb25maWcpKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyBDaGVjayBsaWNlbnNlIHZhcmlhYmxlcwotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgcGFja2FnZV9xYV9jaGVja19saWNlbnNlKHdvcmtkaXIsIGQpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAjIENoZWNrIHVucmVjb2duaXNlZCBjb25maWd1cmUgb3B0aW9ucyAod2l0aCBhIHdoaXRlIGxpc3QpCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiYXV0b3Rvb2xzIiwgZCk6CkBAIC0xMjIxLDcgKzEyNDIsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmbGFnID0gIldBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiIKICAgICAgICAgICAgIGxvZyA9IG9zLnBhdGguam9pbihkLmdldFZhcignQicsIFRydWUpLCAnY29uZmlnLmxvZycpCi0gICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dyZXAnLCAnLUYnLCBmbGFnLCBsb2ddKS5yZXBsYWNlKCcsICcsICcgJykKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZ3JlcCcsICctRicsIGZsYWcsIGxvZ10pLmRlY29kZSgidXRmLTgiKS5yZXBsYWNlKCcsICcsICcgJykKICAgICAgICAgICAgIG9wdGlvbnMgPSBzZXQoKQogICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IHNldChsaW5lLnBhcnRpdGlvbihmbGFnKVsyXS5zcGxpdCgpKQpAQCAtMTI1MCwxMCArMTI3MSw5IEBACiB9CiAKIHB5dGhvbiBkb19xYV91bnBhY2soKSB7Ci0gICAgYmIubm90ZSgiQ2hlY2tpbmcgaGFzICR7U30gYmVlbiBjcmVhdGVkIikKLQorICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpCiAgICAgc19kaXIgPSBkLmdldFZhcignUycsIFRydWUpCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNfZGlyKToKKyAgICBpZiBzcmNfdXJpIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoc19kaXIpOgogICAgICAgICBiYi53YXJuKCclczogdGhlIGRpcmVjdG9yeSAlcyAoJXMpIHBvaW50ZWQgdG8gYnkgdGhlIFMgdmFyaWFibGUgZG9lc25cJ3QgZXhpc3QgLSBwbGVhc2Ugc2V0IFMgd2l0aGluIHRoZSByZWNpcGUgdG8gcG9pbnQgdG8gd2hlcmUgdGhlIHNvdXJjZSBoYXMgYmVlbiB1bnBhY2tlZCB0bycgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGQuZ2V0VmFyKCdTJywgRmFsc2UpLCBzX2RpcikpCiB9CiAKQEAgLTEyNjEsOCArMTI4MSw4IEBACiAjYWRkdGFzayBxYV9zdGFnaW5nIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QgYmVmb3JlIGRvX2J1aWxkCiBkb19wb3B1bGF0ZV9zeXNyb290W3Bvc3RmdW5jc10gKz0gImRvX3FhX3N0YWdpbmcgIgogCi0jIENoZWNrIGJyb2tlbiBjb25maWcubG9nIGZpbGVzLCBmb3IgcGFja2FnZXMgcmVxdWlyaW5nIEdldHRleHQgd2hpY2ggZG9uJ3QKLSMgaGF2ZSBpdCBpbiBERVBFTkRTIGFuZCBmb3IgY29ycmVjdCBMSUNfRklMRVNfQ0hLU1VNCisjIENoZWNrIGJyb2tlbiBjb25maWcubG9nIGZpbGVzLCBmb3IgcGFja2FnZXMgcmVxdWlyaW5nIEdldHRleHQgd2hpY2gKKyMgZG9uJ3QgaGF2ZSBpdCBpbiBERVBFTkRTLgogI2FkZHRhc2sgcWFfY29uZmlndXJlIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQogZG9fY29uZmlndXJlW3Bvc3RmdW5jc10gKz0gImRvX3FhX2NvbmZpZ3VyZSAiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcwppbmRleCAzZWQ1OTg2Li5lYTk3NmM2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtYXJjaC5iYmNsYXNzCkBAIC0xNCw3ICsxNCw3IEBACiAgICAgICAgICAgICAgICBwYXJpc2MgczM5MCAgdjg1MCBcCiAgICAgICAgICAgICAgICBhdnIzMiBibGFja2ZpbiBcCiAgICAgICAgICAgICAgICBtaWNyb2JsYXplIFwKLSAgICAgICAgICAgICAgIG5pb3MyIgorICAgICAgICAgICAgICAgbmlvczIgYXJjIHh0ZW5zYSIKIAogZGVmIG1hcF9rZXJuZWxfYXJjaChhLCBkKToKICAgICBpbXBvcnQgcmUKQEAgLTI1LDcgKzI1LDcgQEAKICAgICBlbGlmIHJlLm1hdGNoKCdhcm1lYiQnLCBhKTogICAgICAgICAgICAgICAgIHJldHVybiAnYXJtJwogICAgIGVsaWYgcmUubWF0Y2goJ2FhcmNoNjQkJywgYSk6ICAgICAgICAgICAgICAgcmV0dXJuICdhcm02NCcKICAgICBlbGlmIHJlLm1hdGNoKCdhYXJjaDY0X2JlJCcsIGEpOiAgICAgICAgICAgIHJldHVybiAnYXJtNjQnCi0gICAgZWxpZiByZS5tYXRjaCgnbWlwcyhlbHw2NHw2NGVsKSQnLCBhKTogICAgICByZXR1cm4gJ21pcHMnCisgICAgZWxpZiByZS5tYXRjaCgnbWlwcyhpc2F8KSgzMnw2NHwpKHI2fCkoZWx8KSQnLCBhKTogICAgICByZXR1cm4gJ21pcHMnCiAgICAgZWxpZiByZS5tYXRjaCgncChwY3xvd2VycGMpKHw2NCknLCBhKTogICAgICByZXR1cm4gJ3Bvd2VycGMnCiAgICAgZWxpZiByZS5tYXRjaCgnc2goM3w0KSQnLCBhKTogICAgICAgICAgICAgICByZXR1cm4gJ3NoJwogICAgIGVsaWYgcmUubWF0Y2goJ2JmaW4nLCBhKTogICAgICAgICAgICAgICAgICAgcmV0dXJuICdibGFja2ZpbicKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzCmluZGV4IDMzMjM4NGQuLjA1YmUxZjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcwpAQCAtMSw0ICsxLDQgQEAKLWluaGVyaXQga2VybmVsLXVib290Citpbmhlcml0IGtlcm5lbC11Ym9vdCB1Ym9vdC1zaWduCiAKIHB5dGhvbiBfX2Fub255bW91cyAoKSB7CiAgICAga2VybmVsdHlwZXMgPSBkLmdldFZhcignS0VSTkVMX0lNQUdFVFlQRVMnLCBUcnVlKSBvciAiIgpAQCAtNywxNyArNywyOCBAQAogICAgICAgICBkZXBlbmRzID0gIiVzIHUtYm9vdC1ta2ltYWdlLW5hdGl2ZSBkdGMtbmF0aXZlIiAlIGRlcGVuZHMKICAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCBkZXBlbmRzKQogCisgICAgICAgIGlmIGQuZ2V0VmFyKCJVQk9PVF9BUkNIIiwgVHJ1ZSkgPT0gIng4NiI6CisgICAgICAgICAgICByZXBsYWNlbWVudHR5cGUgPSAiYnpJbWFnZSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcGxhY2VtZW50dHlwZSA9ICJ6SW1hZ2UiCisKIAkjIE92ZXJyaWRlIEtFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UgdmFyaWFibGUsIHdoaWNoIGlzIGludGVybmFsCiAJIyB0byBrZXJuZWwuYmJjbGFzcyAuIFdlIGhhdmUgdG8gb3ZlcnJpZGUgaXQsIHNpbmNlIHdlIHBhY2sgekltYWdlCiAJIyAoYXQgbGVhc3QgZm9yIG5vdykgaW50byB0aGUgZml0SW1hZ2UgLgogICAgICAgICB0eXBlZm9ybWFrZSA9IGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgVHJ1ZSkgb3IgIiIKICAgICAgICAgaWYgJ2ZpdEltYWdlJyBpbiB0eXBlZm9ybWFrZS5zcGxpdCgpOgotICAgICAgICAgICAgZC5zZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UnLCB0eXBlZm9ybWFrZS5yZXBsYWNlKCdmaXRJbWFnZScsICd6SW1hZ2UnKSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFJywgdHlwZWZvcm1ha2UucmVwbGFjZSgnZml0SW1hZ2UnLCByZXBsYWNlbWVudHR5cGUpKQogCiAgICAgICAgIGltYWdlID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19JTUFHRScsIFRydWUpCiAgICAgICAgIGlmIGltYWdlOgogICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19hc3NlbWJsZV9maXRpbWFnZV9pbml0cmFtZnMnLCAnZGVwZW5kcycsICcgJHtJTklUUkFNRlNfSU1BR0V9OmRvX2ltYWdlX2NvbXBsZXRlJykKIAorICAgICAgICAjIFZlcmlmaWVkIGJvb3Qgd2lsbCBzaWduIHRoZSBmaXRJbWFnZSBhbmQgYXBwZW5kIHRoZSBwdWJsaWMga2V5IHRvCisgICAgICAgICMgVS1ib290IGR0Yi4gV2UgZW5zdXJlIHRoZSBVLUJvb3QgZHRiIGlzIGRlcGxveWVkIGJlZm9yZSBhc3NlbWJsaW5nCisgICAgICAgICMgdGhlIGZpdEltYWdlOgorICAgICAgICBpZiBkLmdldFZhcignVUJPT1RfU0lHTl9FTkFCTEUnLCBUcnVlKToKKyAgICAgICAgICAgIHVib290X3BuID0gZC5nZXRWYXIoJ1BSRUZFUlJFRF9QUk9WSURFUl91LWJvb3QnLCBUcnVlKSBvciAndS1ib290JworICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19hc3NlbWJsZV9maXRpbWFnZScsICdkZXBlbmRzJywgJyAlczpkb19kZXBsb3knICUgdWJvb3RfcG4pCiB9CiAKICMgT3B0aW9ucyBmb3IgdGhlIGRldmljZSB0cmVlIGNvbXBpbGVyIHBhc3NlZCB0byBta2ltYWdlICctRCcgZmVhdHVyZToKQEAgLTEzMiw2ICsxNDMsMzMgQEAKIH0KIAogIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMgc2V0dXAgc2VjdGlvbgorIworIyAkMSAuLi4gLml0cyBmaWxlbmFtZQorIyAkMiAuLi4gSW1hZ2UgY291bnRlcgorIyAkMyAuLi4gUGF0aCB0byBzZXR1cCBpbWFnZQorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX3NldHVwKCkgeworCisJc2V0dXBfY3N1bT0ic2hhMSIKKworCWNhdCA8PCBFT0YgPj4gJHsxfQorICAgICAgICAgICAgICAgIHNldHVwQCR7Mn0geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiTGludXggc2V0dXAuYmluIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAvaW5jYmluLygiJHszfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJ4ODZfc2V0dXAiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJjaCA9ICIke1VCT09UX0FSQ0h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zID0gImxpbnV4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gIm5vbmUiOworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IDwweDAwMDkwMDAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gPDB4MDAwOTAwMDA+OworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke3NldHVwX2NzdW19IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKK0VPRgorfQorCisjCiAjIEVtaXQgdGhlIGZpdEltYWdlIElUUyByYW1kaXNrIHNlY3Rpb24KICMKICMgJDEgLi4uIC5pdHMgZmlsZW5hbWUKQEAgLTE5MywyOSArMjMxLDM0IEBACiAjICQyIC4uLiBMaW51eCBrZXJuZWwgSUQKICMgJDMgLi4uIERUQiBpbWFnZSBJRAogIyAkNCAuLi4gcmFtZGlzayBJRAorIyAkNSAuLi4gY29uZmlnIElECiBmaXRpbWFnZV9lbWl0X3NlY3Rpb25fY29uZmlnKCkgewogCiAJY29uZl9jc3VtPSJzaGExIgorCWlmIFsgLW4gIiR7VUJPT1RfU0lHTl9FTkFCTEV9IiBdIDsgdGhlbgorCQljb25mX3NpZ25fa2V5bmFtZT0iJHtVQk9PVF9TSUdOX0tFWU5BTUV9IgorCWZpCiAKIAkjIFRlc3QgaWYgd2UgaGF2ZSBhbnkgRFRCcyBhdCBhbGwKLQlpZiBbIC16ICIkezN9IiAtYSAteiAiJHs0fSIgXSA7IHRoZW4KLQkJY29uZl9kZXNjPSJCb290IExpbnV4IGtlcm5lbCIKLQkJZmR0X2xpbmU9IiIKLQkJcmFtZGlza19saW5lPSIiCi0JZWxpZiBbIC16ICIkezR9IiBdOyB0aGVuCi0JCWNvbmZfZGVzYz0iQm9vdCBMaW51eCBrZXJuZWwgd2l0aCBGRFQgYmxvYiIKKwljb25mX2Rlc2M9IkxpbnV4IGtlcm5lbCIKKwlrZXJuZWxfbGluZT0ia2VybmVsID0gXCJrZXJuZWxAJHsyfVwiOyIKKwlmZHRfbGluZT0iIgorCXJhbWRpc2tfbGluZT0iIgorCisJaWYgWyAtbiAiJHszfSIgXTsgdGhlbgorCQljb25mX2Rlc2M9IiR7Y29uZl9kZXNjfSwgRkRUIGJsb2IiCiAJCWZkdF9saW5lPSJmZHQgPSBcImZkdEAkezN9XCI7IgotCQlyYW1kaXNrX2xpbmU9IiIKLQllbGlmIFsgLXogIiR7M30iIF07IHRoZW4KLQkJY29uZl9kZXNjPSJCb290IExpbnV4IGtlcm5lbCB3aXRoIHJhbWRpc2siCi0JCWZkdF9saW5lPSIiCi0JCXJhbWRpc2tfbGluZT0icmFtZGlzayA9IFwicmFtZGlza0AkezR9XCI7IgotCWVsc2UKLQkJY29uZl9kZXNjPSJCb290IExpbnV4IGtlcm5lbCB3aXRoIEZEVCBibG9iLCByYW1kaXNrIgotCQlmZHRfbGluZT0iZmR0ID0gXCJmZHRAJHszfVwiOyIKKwlmaQorCisJaWYgWyAtbiAiJHs0fSIgXTsgdGhlbgorCQljb25mX2Rlc2M9IiR7Y29uZl9kZXNjfSwgcmFtZGlzayIKIAkJcmFtZGlza19saW5lPSJyYW1kaXNrID0gXCJyYW1kaXNrQCR7NH1cIjsiCiAJZmkKLQlrZXJuZWxfbGluZT0ia2VybmVsID0gXCJrZXJuZWxAJHsyfVwiOyIKKworCWlmIFsgLW4gIiR7NX0iIF07IHRoZW4KKwkJY29uZl9kZXNjPSIke2NvbmZfZGVzY30sIHNldHVwIgorCQlzZXR1cF9saW5lPSJzZXR1cCA9IFwic2V0dXBAJHs1fVwiOyIKKwlmaQogCiAJY2F0IDw8IEVPRiA+PiAkezF9CiAgICAgICAgICAgICAgICAgZGVmYXVsdCA9ICJjb25mQDEiOwpAQCAtMjI0LDkgKzI2Nyw0MCBAQAogCQkJJHtrZXJuZWxfbGluZX0KIAkJCSR7ZmR0X2xpbmV9CiAJCQkke3JhbWRpc2tfbGluZX0KKwkJCSR7c2V0dXBfbGluZX0KICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtjb25mX2NzdW19IjsKICAgICAgICAgICAgICAgICAgICAgICAgIH07CitFT0YKKworCWlmIFsgISAteiAiJHtjb25mX3NpZ25fa2V5bmFtZX0iIF0gOyB0aGVuCisKKwkJc2lnbl9saW5lPSJzaWduLWltYWdlcyA9IFwia2VybmVsXCIiCisKKwkJaWYgWyAtbiAiJHszfSIgXTsgdGhlbgorCQkJc2lnbl9saW5lPSIke3NpZ25fbGluZX0sIFwiZmR0XCIiCisJCWZpCisKKwkJaWYgWyAtbiAiJHs0fSIgXTsgdGhlbgorCQkJc2lnbl9saW5lPSIke3NpZ25fbGluZX0sIFwicmFtZGlza1wiIgorCQlmaQorCisJCWlmIFsgLW4gIiR7NX0iIF07IHRoZW4KKwkJCXNpZ25fbGluZT0iJHtzaWduX2xpbmV9LCBcInNldHVwXCIiCisJCWZpCisKKwkJc2lnbl9saW5lPSIke3NpZ25fbGluZX07IgorCisJCWNhdCA8PCBFT0YgPj4gJHsxfQorICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlQDEgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvID0gIiR7Y29uZl9jc3VtfSxyc2EyMDQ4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LW5hbWUtaGludCA9ICIke2NvbmZfc2lnbl9rZXluYW1lfSI7CisJCQkJJHtzaWduX2xpbmV9CisgICAgICAgICAgICAgICAgICAgICAgICB9OworRU9GCisJZmkKKworCWNhdCA8PCBFT0YgPj4gJHsxfQogICAgICAgICAgICAgICAgIH07CiBFT0YKIH0KQEAgLTI0MSw2ICszMTUsNyBAQAogCWtlcm5lbGNvdW50PTEKIAlkdGJjb3VudD0iIgogCXJhbWRpc2tjb3VudD0kezN9CisJc2V0dXBjb3VudD0iIgogCXJtIC1mICR7MX0gYXJjaC8ke0FSQ0h9L2Jvb3QvJHsyfQogCiAJZml0aW1hZ2VfZW1pdF9maXRfaGVhZGVyICR7MX0KQEAgLTI3NCw3ICszNDksMTUgQEAKIAlmaQogCiAJIwotCSMgU3RlcCAzOiBQcmVwYXJlIGEgcmFtZGlzayBzZWN0aW9uLgorCSMgU3RlcCAzOiBQcmVwYXJlIGEgc2V0dXAgc2VjdGlvbi4gKEZvciB4ODYpCisJIworCWlmIHRlc3QgLWUgYXJjaC8ke0FSQ0h9L2Jvb3Qvc2V0dXAuYmluIDsgdGhlbgorCQlzZXR1cGNvdW50PTEKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX3NldHVwICR7MX0gIiR7c2V0dXBjb3VudH0iIGFyY2gvJHtBUkNIfS9ib290L3NldHVwLmJpbgorCWZpCisKKwkjCisJIyBTdGVwIDQ6IFByZXBhcmUgYSByYW1kaXNrIHNlY3Rpb24uCiAJIwogCWlmIFsgIngke3JhbWRpc2tjb3VudH0iID0gIngxIiBdIDsgdGhlbgogCQkjIEZpbmQgYW5kIHVzZSB0aGUgZmlyc3QgaW5pdHJhbWZzIGltYWdlIGFyY2hpdmUgdHlwZSB3ZSBmaW5kCkBAIC0yOTIsMjYgKzM3NSwzOSBAQAogCiAJIyBGb3JjZSB0aGUgZmlyc3QgS2VybmVsIGFuZCBEVEIgaW4gdGhlIGRlZmF1bHQgY29uZmlnCiAJa2VybmVsY291bnQ9MQotCWR0YmNvdW50PTEKKwlpZiB0ZXN0IC1uICIke2R0YmNvdW50fSI7IHRoZW4KKwkJZHRiY291bnQ9MQorCWZpCiAKIAkjCi0JIyBTdGVwIDQ6IFByZXBhcmUgYSBjb25maWd1cmF0aW9ucyBzZWN0aW9uCisJIyBTdGVwIDU6IFByZXBhcmUgYSBjb25maWd1cmF0aW9ucyBzZWN0aW9uCiAJIwogCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCAkezF9IGNvbmZzdGFydAogCi0JZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2NvbmZpZyAkezF9ICR7a2VybmVsY291bnR9ICR7ZHRiY291bnR9ICR7cmFtZGlza2NvdW50fQorCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9jb25maWcgJHsxfSAiJHtrZXJuZWxjb3VudH0iICIke2R0YmNvdW50fSIgIiR7cmFtZGlza2NvdW50fSIgIiR7c2V0dXBjb3VudH0iCiAKIAlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgJHsxfSBzZWN0ZW5kCiAKIAlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgJHsxfSBmaXRlbmQKIAogCSMKLQkjIFN0ZXAgNTogQXNzZW1ibGUgdGhlIGltYWdlCisJIyBTdGVwIDY6IEFzc2VtYmxlIHRoZSBpbWFnZQogCSMKIAl1Ym9vdC1ta2ltYWdlIFwKIAkJJHtAJy1EICIke1VCT09UX01LSU1BR0VfRFRDT1BUU30iJyBpZiBsZW4oJyR7VUJPT1RfTUtJTUFHRV9EVENPUFRTfScpIGVsc2UgJyd9IFwKIAkJLWYgJHsxfSBcCiAJCWFyY2gvJHtBUkNIfS9ib290LyR7Mn0KKworCSMKKwkjIFN0ZXAgNzogU2lnbiB0aGUgaW1hZ2UgYW5kIGFkZCBwdWJsaWMga2V5IHRvIFUtQm9vdCBkdGIKKwkjCisJaWYgWyAieCR7VUJPT1RfU0lHTl9FTkFCTEV9IiA9ICJ4MSIgXSA7IHRoZW4KKwkJdWJvb3QtbWtpbWFnZSBcCisJCQkke0AnLUQgIiR7VUJPT1RfTUtJTUFHRV9EVENPUFRTfSInIGlmIGxlbignJHtVQk9PVF9NS0lNQUdFX0RUQ09QVFN9JykgZWxzZSAnJ30gXAorCQkJLUYgLWsgIiR7VUJPT1RfU0lHTl9LRVlESVJ9IiBcCisJCQktSyAiJHtERVBMT1lfRElSX0lNQUdFfS8ke1VCT09UX0RUQl9CSU5BUll9IiBcCisJCQktciBhcmNoLyR7QVJDSH0vYm9vdC8kezJ9CisJZmkKIH0KIAogZG9fYXNzZW1ibGVfZml0aW1hZ2UoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCmluZGV4IGUxYTcwZTYuLjA4ZDIyNjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCkBAIC0zMCwxNiArMzAsMTIgQEAKIAogS0VSTkVMX01PRFVMRVNfTUVUQV9QQUNLQUdFID89ICJrZXJuZWwtbW9kdWxlcyIKIAorS0VSTkVMX01PRFVMRV9QQUNLQUdFX1BSRUZJWCA/PSAiIgorCiBweXRob24gc3BsaXRfa2VybmVsX21vZHVsZV9wYWNrYWdlcyAoKSB7CiAgICAgaW1wb3J0IHJlCiAKICAgICBtb2RpbmZvZXhwID0gcmUuY29tcGlsZSgiKFtePV0rKT0oLiopIikKLSAgICBrZXJ2ZXJyZXhwID0gcmUuY29tcGlsZSgnXiguKi1oaC4qKVtcLlwrXS4qJCcpCi0gICAgZGVwbW9kcGF0MCA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6Li4qJCIpCi0gICAgZGVwbW9kcGF0MSA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqJCIpCi0gICAgZGVwbW9kcGF0MiA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqXFxcJCIpCi0gICAgZGVwbW9kcGF0MyA9IHJlLmNvbXBpbGUoIl5cdCguKlwuaz9vKVxzKlxcXCQiKQotICAgIGRlcG1vZHBhdDQgPSByZS5jb21waWxlKCJeXHQoLipcLms/bylccyokIikKIAogICAgIGRlZiBleHRyYWN0X21vZGluZm8oZmlsZSk6CiAgICAgICAgIGltcG9ydCB0ZW1wZmlsZSwgc3VicHJvY2VzcwpAQCAtNjEsNjggKzU3LDYgQEAKICAgICAgICAgICAgIHZhbHNbbS5ncm91cCgxKV0gPSBtLmdyb3VwKDIpCiAgICAgICAgIHJldHVybiB2YWxzCiAKLSAgICBkZWYgcGFyc2VfZGVwbW9kKCk6Ci0KLSAgICAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKLQotICAgICAgICBrZXJuZWx2ZXIgPSBkLmdldFZhcignS0VSTkVMX1ZFUlNJT04nLCBUcnVlKQotICAgICAgICBrZXJuZWx2ZXJfc3RyaXBwZWQgPSBrZXJuZWx2ZXIKLSAgICAgICAgbSA9IGtlcnZlcnJleHAubWF0Y2goa2VybmVsdmVyKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAga2VybmVsdmVyX3N0cmlwcGVkID0gbS5ncm91cCgxKQotICAgICAgICBzdGFnaW5nX2tlcm5lbF9kaXIgPSBkLmdldFZhcigiU1RBR0lOR19LRVJORUxfQlVJTERESVIiLCBUcnVlKQotICAgICAgICBzeXN0ZW1fbWFwX2ZpbGUgPSAiJXMvYm9vdC9TeXN0ZW0ubWFwLSVzIiAlIChkdmFyLCBrZXJuZWx2ZXIpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzeXN0ZW1fbWFwX2ZpbGUpOgotICAgICAgICAgICAgc3lzdGVtX21hcF9maWxlID0gIiVzL1N5c3RlbS5tYXAtJXMiICUgKHN0YWdpbmdfa2VybmVsX2Rpciwga2VybmVsdmVyKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN5c3RlbV9tYXBfZmlsZSk6Ci0gICAgICAgICAgICAgICAgYmIuZmF0YWwoIlN5c3RlbS5tYXAtJXMgZG9lcyBub3QgZXhpc3QgaW4gJyVzL2Jvb3QnIG5vciBTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiAnJXMnIiAlIChrZXJuZWx2ZXIsIGR2YXIsIHN0YWdpbmdfa2VybmVsX2RpcikpCi0KLSAgICAgICAgY21kID0gImRlcG1vZCAtbiAtYSAtYiAlcyAtRiAlcyAlcyIgJSAoZHZhciwgc3lzdGVtX21hcF9maWxlLCBrZXJuZWx2ZXJfc3RyaXBwZWQpCi0gICAgICAgIGYgPSBvcy5wb3BlbihjbWQsICdyJykKLQotICAgICAgICBkZXBzID0ge30KLSAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICB3aGlsZSBsaW5lOgotICAgICAgICAgICAgaWYgbm90IGRlcG1vZHBhdDAubWF0Y2gobGluZSk6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBtMSA9IGRlcG1vZHBhdDEubWF0Y2gobGluZSkKLSAgICAgICAgICAgIGlmIG0xOgotICAgICAgICAgICAgICAgIGRlcHNbbTEuZ3JvdXAoMSldID0gbTEuZ3JvdXAoMikuc3BsaXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtMiA9IGRlcG1vZHBhdDIubWF0Y2gobGluZSkKLSAgICAgICAgICAgICAgICBpZiBtMjoKLSAgICAgICAgICAgICAgICAgICAgZGVwc1ttMi5ncm91cCgxKV0gPSBtMi5ncm91cCgyKS5zcGxpdCgpCi0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICAgICAgbTMgPSBkZXBtb2RwYXQzLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIG0zOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVwc1ttMi5ncm91cCgxKV0uZXh0ZW5kKG0zLmdyb3VwKDEpLnNwbGl0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBtMyA9IGRlcG1vZHBhdDMubWF0Y2gobGluZSkKLSAgICAgICAgICAgICAgICAgICAgbTQgPSBkZXBtb2RwYXQ0Lm1hdGNoKGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGRlcHNbbTIuZ3JvdXAoMSldLmV4dGVuZChtNC5ncm91cCgxKS5zcGxpdCgpKQotICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIGRlcHMKLQotICAgIGRlZiBnZXRfZGVwZW5kZW5jaWVzKGZpbGUsIHBhdHRlcm4sIGZvcm1hdCk6Ci0gICAgICAgICMgZmlsZSBubyBsb25nZXIgaW5jbHVkZXMgUEtHRAotICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkgb3IgJycsICcnLCAxKQotICAgICAgICAjIGluc3RlYWQgaXMgcHJlZml4ZWQgd2l0aCAvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0KLSAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiL2xpYi9tb2R1bGVzLyVzLyIgJSBkLmdldFZhcignS0VSTkVMX1ZFUlNJT04nLCBUcnVlKSBvciAnJywgJycsIDEpCi0KLSAgICAgICAgaWYgZmlsZSBpbiBtb2R1bGVfZGVwczoKLSAgICAgICAgICAgIGRlcGVuZGVuY2llcyA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiBtb2R1bGVfZGVwc1tmaWxlXToKLSAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgb3MucGF0aC5iYXNlbmFtZShpKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBvbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCi0gICAgICAgICAgICAgICAgZGVwZW5kZW5jeV9wa2cgPSBmb3JtYXQgJSBvbgotICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoZGVwZW5kZW5jeV9wa2cpCi0gICAgICAgICAgICByZXR1cm4gZGVwZW5kZW5jaWVzCi0gICAgICAgIHJldHVybiBbXQotCiAgICAgZGVmIGZyb2JfbWV0YWRhdGEoZmlsZSwgcGtnLCBwYXR0ZXJuLCBmb3JtYXQsIGJhc2VuYW1lKToKICAgICAgICAgdmFscyA9IGV4dHJhY3RfbW9kaW5mbyhmaWxlKQogCkBAIC0xNzEsNyArMTA1LDEzIEBACiAgICAgICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgb2xkX2Rlc2MgKyAiOyAiICsgdmFsc1siZGVzY3JpcHRpb24iXSkKIAogICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCi0gICAgICAgIGZvciBkZXAgaW4gZ2V0X2RlcGVuZGVuY2llcyhmaWxlLCBwYXR0ZXJuLCBmb3JtYXQpOgorICAgICAgICBtb2RpbmZvX2RlcHMgPSBbXQorICAgICAgICBpZiAiZGVwZW5kcyIgaW4gdmFscyBhbmQgdmFsc1siZGVwZW5kcyJdICE9ICIiOgorICAgICAgICAgICAgZm9yIGRlcCBpbiB2YWxzWyJkZXBlbmRzIl0uc3BsaXQoIiwiKToKKyAgICAgICAgICAgICAgICBvbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKGRlcCkKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5X3BrZyA9IGZvcm1hdCAlIG9uCisgICAgICAgICAgICAgICAgbW9kaW5mb19kZXBzLmFwcGVuZChkZXBlbmRlbmN5X3BrZykKKyAgICAgICAgZm9yIGRlcCBpbiBtb2RpbmZvX2RlcHM6CiAgICAgICAgICAgICBpZiBub3QgZGVwIGluIHJkZXBlbmRzOgogICAgICAgICAgICAgICAgIHJkZXBlbmRzW2RlcF0gPSBbXQogICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCkBAIC0xNzksOSArMTE5LDEwIEBACiAgICAgICAgICMgQXZvaWQgYXV0b21hdGljIC1kZXYgcmVjb21tZW5kYXRpb25zIGZvciBtb2R1bGVzIGVuZGluZyB3aXRoIC1kZXYuCiAgICAgICAgIGQuc2V0VmFyRmxhZygnUlJFQ09NTUVORFNfJyArIHBrZywgJ25vZGVwcnJlY3MnLCAxKQogCi0gICAgbW9kdWxlX2RlcHMgPSBwYXJzZV9kZXBtb2QoKQogICAgIG1vZHVsZV9yZWdleCA9ICdeKC4qKVwuaz9vJCcKLSAgICBtb2R1bGVfcGF0dGVybiA9ICdrZXJuZWwtbW9kdWxlLSVzJworCisgICAgbW9kdWxlX3BhdHRlcm5fcHJlZml4ID0gZC5nZXRWYXIoJ0tFUk5FTF9NT0RVTEVfUEFDS0FHRV9QUkVGSVgnLCBUcnVlKQorICAgIG1vZHVsZV9wYXR0ZXJuID0gbW9kdWxlX3BhdHRlcm5fcHJlZml4ICsgJ2tlcm5lbC1tb2R1bGUtJXMnCiAKICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfbW9kdWxlcycsIFRydWUpCiAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fbW9kdWxlcycsIFRydWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVpbWFnZS5iYmNsYXNzCmluZGV4IDJhMTg3ZjUuLjM0MDUwM2EgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVpbWFnZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVpbWFnZS5iYmNsYXNzCkBAIC0xNCw4ICsxNCw3IEBACiAgICAgICAgIGlmIGQuZ2V0VmFyKCJLRUVQVUlNQUdFIiwgVHJ1ZSkgIT0gJ3llcyc6CiAgICAgICAgICAgICB0eXBlZm9ybWFrZSA9IGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgVHJ1ZSkgb3IgIiIKICAgICAgICAgICAgIGlmICJ1SW1hZ2UiIGluIHR5cGVmb3JtYWtlLnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgdHlwZWZvcm1ha2UucmVwbGFjZSgndUltYWdlJywgJ3ZtbGludXgnKQotICAgICAgICAgICAgZC5zZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UnLCB0eXBlZm9ybWFrZSkKKyAgICAgICAgICAgICAgICBkLnNldFZhcignS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRScsIHR5cGVmb3JtYWtlLnJlcGxhY2UoJ3VJbWFnZScsICd2bWxpbnV4JykpCiB9CiAKIGRvX3Vib290X21raW1hZ2UoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC15b2N0by5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwteW9jdG8uYmJjbGFzcwppbmRleCBmODZiM2VmLi42MTYwYTI5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC15b2N0by5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKQEAgLTEsNSArMSw3IEBACiAjIHJlbW92ZSB0YXNrcyB0aGF0IG1vZGlmeSB0aGUgc291cmNlIHRyZWUgaW4gY2FzZSBleHRlcm5hbHNyYyBpcyBpbmhlcml0ZWQKLVNSQ1RSRUVDT1ZFUkVEVEFTS1MgKz0gImRvX2tlcm5lbF9jb25maWdtZSBkb192YWxpZGF0ZV9icmFuY2hlcyBkb19rZXJuZWxfY29uZmlnY2hlY2sgZG9fa2VybmVsX2NoZWNrb3V0IGRvX3NoYXJlZF93b3JrZGlyIGRvX2ZldGNoIGRvX3VucGFjayBkb19wYXRjaCIKK1NSQ1RSRUVDT1ZFUkVEVEFTS1MgKz0gImRvX2tlcm5lbF9jb25maWdtZSBkb192YWxpZGF0ZV9icmFuY2hlcyBkb19rZXJuZWxfY29uZmlnY2hlY2sgZG9fa2VybmVsX2NoZWNrb3V0IGRvX2ZldGNoIGRvX3VucGFjayBkb19wYXRjaCIKK1BBVENIX0dJVF9VU0VSX0VNQUlMID89ICJrZXJuZWwteW9jdG9Ab2UiCitQQVRDSF9HSVRfVVNFUl9OQU1FID89ICJPcGVuRW1iZWRkZWQiCiAKICMgcmV0dXJucyBsb2NhbCAoYWJzb2x1dGUpIHBhdGggbmFtZXMgZm9yIGFsbCB2YWxpZCBwYXRjaGVzIGluIHRoZQogIyBzcmNfdXJpCkBAIC0xMTksNzIgKzEyMSw1NCBAQAogCXBhdGNoZXM9IiR7QCIgIi5qb2luKGZpbmRfcGF0Y2hlcyhkKSl9IgogCWZlYXRfZGlycz0iJHtAIiAiLmpvaW4oZmluZF9rZXJuZWxfZmVhdHVyZV9kaXJzKGQpKX0iCiAKLQkjIGFkZCBhbnkgZXhwbGljaXRseSByZWZlcmVuY2VkIGZlYXR1cmVzIG9udG8gdGhlIGVuZCBvZiB0aGUgZmVhdHVyZQotCSMgbGlzdCB0aGF0IGlzIHBhc3NlZCB0byB0aGUga2VybmVsIGJ1aWxkIHNjcmlwdHMuCi0JaWYgWyAtbiAiJHtLRVJORUxfRkVBVFVSRVN9IiBdOyB0aGVuCi0JCWZvciBmZWF0IGluICR7S0VSTkVMX0ZFQVRVUkVTfTsgZG8KLQkJCWFkZG9uX2ZlYXR1cmVzPSIkYWRkb25fZmVhdHVyZXMgLS1mZWF0dXJlICRmZWF0IgotCQlkb25lCi0JZmkKLQogCSMgY2hlY2sgZm9yIGZlYXR1cmUgZGlyZWN0b3JpZXMvcmVwb3MvYnJhbmNoZXMgdGhhdCB3ZXJlIHBhcnQgb2YgdGhlCiAJIyBTUkNfVVJJLiBJZiB0aGV5IHdlcmUgc3VwcGxpZWQsIHdlIGNvbnZlcnQgdGhlbSBpbnRvIGluY2x1ZGUgZGlyZWN0aXZlcwogCSMgZm9yIHRoZSB1cGRhdGUgcGFydCBvZiB0aGUgcHJvY2VzcwotCWlmIFsgLW4gIiR7ZmVhdF9kaXJzfSIgXTsgdGhlbgotCSAgICBmb3IgZiBpbiAke2ZlYXRfZGlyc307IGRvCisJZm9yIGYgaW4gJHtmZWF0X2RpcnN9OyBkbwogCQlpZiBbIC1kICIke1dPUktESVJ9LyRmL21ldGEiIF07IHRoZW4KLQkJICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkke1dPUktESVJ9LyRmL21ldGEiCi0JCWVsaWYgWyAtZCAiJHtXT1JLRElSfS8kZiIgXTsgdGhlbgotCQkgICAgaW5jbHVkZXM9IiRpbmNsdWRlcyAtSSR7V09SS0RJUn0vJGYiCisJCQlpbmNsdWRlcz0iJGluY2x1ZGVzIC1JJHtXT1JLRElSfS8kZi9rZXJuZWwtbWV0YSIKKwkgICAgICAgIGVsaWYgWyAtZCAiJHtXT1JLRElSfS8kZiIgXTsgdGhlbgorCQkJaW5jbHVkZXM9IiRpbmNsdWRlcyAtSSR7V09SS0RJUn0vJGYiCiAJCWZpCi0JICAgIGRvbmUKKwlkb25lCisJZm9yIHMgaW4gJHtzY2NzfSAke3BhdGNoZXN9OyBkbworCQlzZGlyPSQoZGlybmFtZSAkcykKKwkJaW5jbHVkZXM9IiRpbmNsdWRlcyAtSSR7c2Rpcn0iCisgICAgICAgICAgICAgICAgIyBpZiBhIFNSQ19VUkkgcGFzc2VkIHBhdGNoIG9yIC5zY2MgaGFzIGEgc3ViZGlyIG9mICJrZXJuZWwtbWV0YSIsCisgICAgICAgICAgICAgICAgIyB0aGVuIHdlIGFkZCBpdCB0byB0aGUgc2VhcmNoIHBhdGgKKyAgICAgICAgICAgICAgICBpZiBbIC1kICIke3NkaXJ9L2tlcm5lbC1tZXRhIiBdOyB0aGVuCisJCQlpbmNsdWRlcz0iJGluY2x1ZGVzIC1JJHtzZGlyfS9rZXJuZWwtbWV0YSIKKyAgICAgICAgICAgICAgICBmaQorCWRvbmUKKworCSMgZXhwYW5kIGtlcm5lbCBmZWF0dXJlcyBpbnRvIHRoZWlyIGZ1bGwgcGF0aCBlcXVpdmFsZW50cworCWJzcF9kZWZpbml0aW9uPSQoc3BwICR7aW5jbHVkZXN9IC0tZmluZCAtREtNQUNISU5FPSR7S01BQ0hJTkV9IC1ES1RZUEU9JHtMSU5VWF9LRVJORUxfVFlQRX0pCisJbWV0YV9kaXI9JChrZ2l0IC0tbWV0YSkKKworCSMgcnVuMTogcHVsbCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBubyBtYXR0ZXIgd2hlcmUgdGhleSBjb21lIGZyb20KKwllbGVtZW50cz0iYGVjaG8gLW4gJHtic3BfZGVmaW5pdGlvbn0gJHtzY2NzfSAke3BhdGNoZXN9ICR7S0VSTkVMX0ZFQVRVUkVTfWAiCisJaWYgWyAtbiAiJHtlbGVtZW50c30iIF07IHRoZW4KKwkJc2NjIC0tZm9yY2UgLW8gJHtTfS8ke21ldGFfZGlyfTpjZmcsbWV0YSAke2luY2x1ZGVzfSAke2JzcF9kZWZpbml0aW9ufSAke3NjY3N9ICR7cGF0Y2hlc30gJHtLRVJORUxfRkVBVFVSRVN9CiAJZmkKIAotCSMgdXBkYXRlcyBvciBnZW5lcmF0ZXMgdGhlIHRhcmdldCBkZXNjcmlwdGlvbgotCXVwZGF0ZW1lICR7dXBkYXRlbWVfZmxhZ3N9IC1ES0RFU0M9JHtLTUFDSElORX06JHtMSU5VWF9LRVJORUxfVFlQRX0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZXN9ICR7YWRkb25fZmVhdHVyZXN9ICR7QVJDSH0gJHtLTUFDSElORX0gJHtzY2NzfSAke3BhdGNoZXN9Ci0JaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0JCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgdXBkYXRlICR7bWFjaGluZV9icmFuY2h9IgorCSMgcnVuMjogb25seSBnZW5lcmF0ZSBwYXRjaGVzIGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgb24gdGhlIFNSQ19VUkkKKwllbGVtZW50cz0iYGVjaG8gLW4gJHtzY2NzfSAke3BhdGNoZXN9ICR7S0VSTkVMX0ZFQVRVUkVTfWAiCisJaWYgWyAtbiAiJHtlbGVtZW50c30iIF07IHRoZW4KKwkJc2NjIC0tZm9yY2UgLW8gJHtTfS8ke21ldGFfZGlyfTpwYXRjaCAtLWNtZHMgcGF0Y2ggJHtpbmNsdWRlc30gJHtzY2NzfSAke3BhdGNoZXN9ICR7S0VSTkVMX0ZFQVRVUkVTfQogCWZpCiB9CiAKIGRvX3BhdGNoKCkgewogCWNkICR7U30KIAotCSMgZXhlY3V0ZXMgYW5kIG1vZGlmaWVzIHRoZSBzb3VyY2UgdHJlZSBhcyByZXF1aXJlZAotCXBhdGNobWUgJHtLTUFDSElORX0KLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQkJYmJlcnJvciAiQ291bGQgbm90IGFwcGx5IHBhdGNoZXMgZm9yICR7S01BQ0hJTkV9LiIKLQkJYmJmYXRhbF9sb2cgIlBhdGNoIGZhaWx1cmVzIGNhbiBiZSByZXNvbHZlZCBpbiB0aGUgbGludXggc291cmNlIGRpcmVjdG9yeSAke1N9KSIKLQlmaQotCi0JIyBjaGVjayB0byBzZWUgaWYgdGhlIHNwZWNpZmllZCBTUkNSRVYgaXMgcmVhY2hhYmxlIGZyb20gdGhlIGZpbmFsIGJyYW5jaC4KLQkjIGlmIGl0IHdhc24ndCBzb21ldGhpbmcgd3JvbmcgaGFzIGhhcHBlbmVkLCBhbmQgd2Ugc2hvdWxkIGVycm9yLgotCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVl9tYWNoaW5lfSIKLQlpZiBbIC16ICIke21hY2hpbmVfc3JjcmV2fSIgXTsgdGhlbgotCQkjIGZhbGxiYWNrIHRvIFNSQ1JFViBpZiBhIG5vbiBtYWNoaW5lX21ldGEgdHJlZSBpcyBiZWluZyBidWlsdAotCQltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZ9IgotCQkjIGlmIFNSQ1JFViBjYW5ub3QgYmUgcmVhY2hlZCBzb21ldGhpbmcgaXMgd3JvbmcuCi0JCWlmIFsgLXogIiR7bWFjaGluZV9zcmNyZXZ9IiBdOyB0aGVuCi0JCQliYmZhdGFsICJOZWl0aGVyIFNSQ1JFVl9tYWNoaW5lIG9yIFNSQ1JFViB3YXMgc3BlY2lmaWVkISIKLQkJZmkKLQlmaQotCi0gICAgICAgIGN1cnJlbnRfYnJhbmNoPWBnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEYAotICAgICAgICBtYWNoaW5lX2JyYW5jaD0iJHtAIGdldF9tYWNoaW5lX2JyYW5jaChkLCAiJHtLQlJBTkNIfSIgKX0iCi0gICAgICAgIGlmIFsgIiR7Y3VycmVudF9icmFuY2h9IiAhPSAiJHttYWNoaW5lX2JyYW5jaH0iIF07IHRoZW4KLSAgICAgICAgICAgIGJid2FybiAiQWZ0ZXIgbWV0YSBkYXRhIGFwcGxpY2F0aW9uLCB0aGUga2VybmVsIHRyZWUgYnJhbmNoIGlzICR7Y3VycmVudF9icmFuY2h9LiBUaGUiCi0gICAgICAgICAgICBiYndhcm4gIlNSQ19VUkkgc3BlY2lmaWVkIGJyYW5jaCAke21hY2hpbmVfYnJhbmNofS4gVGhlIGJyYW5jaCB3aWxsIGJlIGZvcmNlZCB0byAke21hY2hpbmVfYnJhbmNofSwiCi0gICAgICAgICAgICBiYndhcm4gImJ1dCB0aGlzIG1lYW5zIHRoZSBib2FyZCBtZXRhIGRhdGEgKC5zY2MgZmlsZXMpIGRvIG5vdCBtYXRjaCB0aGUgU1JDX1VSSSBzcGVjaWZpY2F0aW9uLiIKLSAgICAgICAgICAgIGJid2FybiAiVGhlIG1ldGEgZGF0YSBhbmQgYnJhbmNoICR7bWFjaGluZV9icmFuY2h9IHNob3VsZCBiZSBpbnNwZWN0ZWQgdG8gZW5zdXJlIHRoZSBwcm9wZXIiCi0gICAgICAgICAgICBiYndhcm4gImtlcm5lbCBpcyBiZWluZyBidWlsdC4iCi0gICAgICAgICAgICBnaXQgY2hlY2tvdXQgLWYgJHttYWNoaW5lX2JyYW5jaH0KLSAgICAgICAgZmkKLQotCWlmIFsgIiR7bWFjaGluZV9zcmNyZXZ9IiAhPSAiQVVUT0lOQyIgXTsgdGhlbgotCQlpZiAhIFsgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAke21hY2hpbmVfc3JjcmV2fX4wKSIgPSAiJChnaXQgbWVyZ2UtYmFzZSAke21hY2hpbmVfc3JjcmV2fSBIRUFEKSIgXTsgdGhlbgotCQkJYmJlcnJvciAiU1JDUkVWICR7bWFjaGluZV9zcmNyZXZ9IHdhcyBzcGVjaWZpZWQsIGJ1dCBpcyBub3QgcmVhY2hhYmxlIgotCQkJYmJmYXRhbCAiQ2hlY2sgdGhlIEJTUCBkZXNjcmlwdGlvbiBmb3IgaW5jb3JyZWN0IGJyYW5jaCBzZWxlY3Rpb24sIG9yIG90aGVyIGVycm9ycy4iCisJY2hlY2tfZ2l0X2NvbmZpZworCW1ldGFfZGlyPSQoa2dpdCAtLW1ldGEpCisJKGNkICR7bWV0YV9kaXJ9OyBsbiAtc2YgcGF0Y2gucXVldWUgc2VyaWVzKQorCWlmIFsgLWYgIiR7bWV0YV9kaXJ9L3NlcmllcyIgXTsgdGhlbgorCQlrZ2l0LXMycSAtLWdlbiAtdiAtLXBhdGNoZXMgLmtlcm5lbC1tZXRhLworCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWJiZXJyb3IgIkNvdWxkIG5vdCBhcHBseSBwYXRjaGVzIGZvciAke0tNQUNISU5FfS4iCisJCQliYmZhdGFsX2xvZyAiUGF0Y2ggZmFpbHVyZXMgY2FuIGJlIHJlc29sdmVkIGluIHRoZSBsaW51eCBzb3VyY2UgZGlyZWN0b3J5ICR7U30pIgogCQlmaQogCWZpCiB9CkBAIC0yNTMsMjYgKzIzNywzNyBAQAogCiBkb19rZXJuZWxfY29uZmlnbWVbZGlyc10gKz0gIiR7U30gJHtCfSIKIGRvX2tlcm5lbF9jb25maWdtZSgpIHsKLQliYm5vdGUgImtlcm5lbCBjb25maWdtZSIKLQlleHBvcnQgS01FVEE9JHtLTUVUQX0KKwlzZXQgK2UKIAotCWlmIFsgLW4gIiR7S0NPTkZJR19NT0RFfSIgXTsgdGhlbgotCQljb25maWdtZWZsYWdzPSR7S0NPTkZJR19NT0RFfQotCWVsc2UKLQkJIyBJZiBhIGRlZmNvbmZpZyB3YXMgcGFzc2VkLCB1c2UgPW4gYXMgdGhlIGJhc2VsaW5lLCB3aGljaCBpcyBhY2hpZXZlZAotCQkjIHZpYSAtLWFsbG5vY29uZmlnCisJIyB0cmFuc2xhdGUgdGhlIGtjb25maWdfbW9kZSBpbnRvIHNvbWV0aGluZyB0aGF0IG1lcmdlX2NvbmZpZy5zaAorCSMgdW5kZXJzdGFuZHMKKwljYXNlICR7S0NPTkZJR19NT0RFfSBpbgorCQkqYWxsbm9jb25maWcpCisJCQljb25maWdfZmxhZ3M9Ii1uIgorCQkJOzsKKwkJKmFsbGRlZmNvbmZpZykKKwkJCWNvbmZpZ19mbGFncz0iIgorCQkJOzsKKwkgICAgKikKIAkJaWYgWyAtZiAke1dPUktESVJ9L2RlZmNvbmZpZyBdOyB0aGVuCi0JCQljb25maWdtZWZsYWdzPSItLWFsbG5vY29uZmlnIgorCQkJY29uZmlnX2ZsYWdzPSItbiIKIAkJZmkKLQlmaQorCSAgICA7OworCWVzYWMKIAogCWNkICR7U30KLQlQQVRIPSR7UEFUSH06JHtTfS9zY3JpcHRzL3V0aWwKLQljb25maWdtZSAke2NvbmZpZ21lZmxhZ3N9IC0tcmVjb25maWcgLS1vdXRwdXQgJHtCfSAke0xJTlVYX0tFUk5FTF9UWVBFfSAke0tNQUNISU5FfQorCisJbWV0YV9kaXI9JChrZ2l0IC0tbWV0YSkKKwljb25maWdzPSIkKHNjYyAtLWNvbmZpZ3MgLW8gJHttZXRhX2Rpcn0pIgorCWlmIFsgLXogIiR7Y29uZmlnc30iIF07IHRoZW4KKwkJYmJmYXRhbF9sb2cgIkNvdWxkIG5vdCBmaW5kIGNvbmZpZ3VyYXRpb24gcXVldWUgKCR7bWV0YV9kaXJ9L2NvbmZpZy5xdWV1ZSkiCisJZmkKKworCUNGTEFHUz0iJHtDRkxBR1N9ICR7VE9PTENIQUlOX09QVElPTlN9IglBUkNIPSR7QVJDSH0gbWVyZ2VfY29uZmlnLnNoIC1PICR7Qn0gJHtjb25maWdfZmxhZ3N9ICR7Y29uZmlnc30gPiAke21ldGFfZGlyfS9jZmcvbWVyZ2VfY29uZmlnX2J1aWxkLmxvZyAyPiYxCiAJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAJCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgY29uZmlndXJlICR7S01BQ0hJTkV9LSR7TElOVVhfS0VSTkVMX1RZUEV9IgogCWZpCi0JCisKIAllY2hvICIjIEdsb2JhbCBzZXR0aW5ncyBmcm9tIGxpbnV4IHJlY2lwZSIgPj4gJHtCfS8uY29uZmlnCiAJZWNobyAiQ09ORklHX0xPQ0FMVkVSU0lPTj0iXCIke0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OfVwiID4+ICR7Qn0vLmNvbmZpZwogfQpAQCAtMjkwLDM2ICsyODUsMjMgQEAKICAgICAgICAga21ldGEgPSAiLiIgKyBrbWV0YQogCiAgICAgcGF0aHByZWZpeCA9ICJleHBvcnQgUEFUSD0lczolczsgIiAlIChkLmdldFZhcignUEFUSCcsIFRydWUpLCAiJHtTfS9zY3JpcHRzL3V0aWwvIikKLSAgICBjbWQgPSBkLmV4cGFuZCgiY2QgJHtTfTsga2NvbmZfY2hlY2sgLWNvbmZpZyAlcy9tZXRhLXNlcmllcyAke1N9ICR7Qn0iICUga21ldGEpCisKKyAgICBjbWQgPSBkLmV4cGFuZCgic2NjIC0tY29uZmlncyAtbyAke1N9Ly5rZXJuZWwtbWV0YSIpCisgICAgcmV0LCBjb25maWdzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIlcyVzIiAlIChwYXRocHJlZml4LCBjbWQpKQorCisgICAgY21kID0gZC5leHBhbmQoImNkICR7U307IGtjb25mX2NoZWNrIC0tcmVwb3J0IC1vICR7U30vJXMvY2ZnLyAke0J9Ly5jb25maWcgJHtTfSAlcyIgJSAoa21ldGEsY29uZmlncykpCiAgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiVzJXMiICUgKHBhdGhwcmVmaXgsIGNtZCkpCiAKICAgICBjb25maWdfY2hlY2tfdmlzaWJpbGl0eSA9IGludChkLmdldFZhciggIktDT05GX0FVRElUX0xFVkVMIiwgVHJ1ZSApIG9yIDApCiAgICAgYnNwX2NoZWNrX3Zpc2liaWxpdHkgPSBpbnQoZC5nZXRWYXIoICJLQ09ORl9CU1BfQVVESVRfTEVWRUwiLCBUcnVlICkgb3IgMCkKIAogICAgICMgaWYgY29uZmlnIGNoZWNrIHZpc2liaWxpdHkgaXMgbm9uLXplcm8sIHJlcG9ydCBkcm9wcGVkIGNvbmZpZ3VyYXRpb24gdmFsdWVzCi0gICAgbWlzbWF0Y2hfZmlsZSA9ICIke1N9LyIgKyBrbWV0YSArICIvIiArICJtaXNtYXRjaC5jZmciCisgICAgbWlzbWF0Y2hfZmlsZSA9IGQuZXhwYW5kKCIke1N9LyVzL2NmZy9taXNtYXRjaC50eHQiICUga21ldGEpCiAgICAgaWYgb3MucGF0aC5leGlzdHMobWlzbWF0Y2hfZmlsZSk6CiAgICAgICAgIGlmIGNvbmZpZ19jaGVja192aXNpYmlsaXR5OgogICAgICAgICAgICAgd2l0aCBvcGVuIChtaXNtYXRjaF9maWxlLCAiciIpIGFzIG15ZmlsZToKICAgICAgICAgICAgICAgICByZXN1bHRzID0gbXlmaWxlLnJlYWQoKQogICAgICAgICAgICAgICAgIGJiLndhcm4oICJba2VybmVsIGNvbmZpZ106IHNwZWNpZmllZCB2YWx1ZXMgZGlkIG5vdCBtYWtlIGl0IGludG8gdGhlIGtlcm5lbCdzIGZpbmFsIGNvbmZpZ3VyYXRpb246XG5cbiVzIiAlIHJlc3VsdHMpCi0KLSAgICAjIGlmIGNvbmZpZyBjaGVjayB2aXNpYmlsaXR5IGlzIGxldmVsIDIgb3IgaGlnaGVyLCByZXBvcnQgbm9uLWhhcmR3YXJlIG9wdGlvbnMKLSAgICBub25od19maWxlID0gIiR7U30vIiArIGttZXRhICsgIi8iICsgIm5vbmh3X3JlcG9ydC5jZmciCi0gICAgaWYgb3MucGF0aC5leGlzdHMobm9uaHdfZmlsZSk6Ci0gICAgICAgIGlmIGNvbmZpZ19jaGVja192aXNpYmlsaXR5ID4gMToKLSAgICAgICAgICAgIHdpdGggb3BlbiAobm9uaHdfZmlsZSwgInIiKSBhcyBteWZpbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0cyA9IG15ZmlsZS5yZWFkKCkKLSAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbCBjb25maWddOiBCU1Agc3BlY2lmaWVkIG5vbi1odyBjb25maWd1cmF0aW9uOlxuXG4lcyIgJSByZXN1bHRzKQotCi0gICAgYnNwX2Rlc2MgPSAiJHtTfS8iICsga21ldGEgKyAiLyIgKyAidG9wX3RndCIKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhic3BfZGVzYykgYW5kIGJzcF9jaGVja192aXNpYmlsaXR5ID4gMToKLSAgICAgICAgd2l0aCBvcGVuIChic3BfZGVzYywgInIiKSBhcyBteWZpbGU6Ci0gICAgICAgICAgICBic3BfdGd0ID0gbXlmaWxlLnJlYWQoKQotICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeKC4qKXNjcmF0Y2gub2JqKC4qKSQiLCBic3BfdGd0KQotICAgICAgICAgICAgaWYgbm90IG0gaXMgTm9uZToKLSAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbF06IEFuIGF1dG8gZ2VuZXJhdGVkIEJTUCBkZXNjcmlwdGlvbiB3YXMgdXNlZCwgdGhpcyBub3JtYWxseSBpbmRpY2F0ZXMgYSBtaXNjb25maWd1cmF0aW9uLlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkNoZWNrIHRoYXQgeW91ciBtYWNoaW5lICglcykgaGFzIGFuIGFzc29jaWF0ZWQga2VybmVsIGRlc2NyaXB0aW9uLiIgJSAiJHtNQUNISU5FfSIgKQogfQogCiAjIEVuc3VyZSB0aGF0IHRoZSBicmFuY2hlcyAoQlNQIGFuZCBtZXRhKSBhcmUgb24gdGhlIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzCmluZGV4IGU3ZTJjYjMuLjI1YTE1M2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcwpAQCAtMSw3ICsxLDcgQEAKIGluaGVyaXQgbGludXgta2VybmVsLWJhc2Uga2VybmVsLW1vZHVsZS1zcGxpdAogCiBQUk9WSURFUyArPSAidmlydHVhbC9rZXJuZWwiCi1ERVBFTkRTICs9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2Mga21vZC1uYXRpdmUgZGVwbW9kd3JhcHBlci1jcm9zcyBiYy1uYXRpdmUiCitERVBFTkRTICs9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2Mga21vZC1uYXRpdmUgZGVwbW9kd3JhcHBlci1jcm9zcyBiYy1uYXRpdmUgbHpvcC1uYXRpdmUiCiAKIFMgPSAiJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgogQiA9ICIke1dPUktESVJ9L2J1aWxkIgpAQCAtMTI3LDkgKzEyNyw5IEBACiBleHBvcnQgT1MgPSAiJHtUQVJHRVRfT1N9IgogZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKIAotS0VSTkVMX1BSSU9SSVRZID89ICIke0BpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVswXSkgKiAxMDAwMCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50KGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbMV0pICogMTAwICsgXAotICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVstMV0pfSIKK0tFUk5FTF9QUklPUklUWSA/PSAiJHtAaW50KGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCctJylbMF0uc3BsaXQoJysnKVswXS5zcGxpdCgnLicpWzBdKSAqIDEwMDAwICsgXAorICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbMV0pICogMTAwICsgXAorICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbLTFdKX0iCiAKIEtFUk5FTF9SRUxFQVNFID89ICIke0tFUk5FTF9WRVJTSU9OfSIKIApAQCAtMTQwLDcgKzE0MCw3IEBACiAjCiAjIGNvbmZpZ3VyYXRpb24KICMKLWV4cG9ydCBDTURMSU5FX0NPTlNPTEUgPSAiY29uc29sZT0ke0BkLmdldFZhcigiS0VSTkVMX0NPTlNPTEUiLDEpIG9yICJ0dHlTMCJ9IgorZXhwb3J0IENNRExJTkVfQ09OU09MRSA9ICJjb25zb2xlPSR7QGQuZ2V0VmFyKCJLRVJORUxfQ09OU09MRSIsIFRydWUpIG9yICJ0dHlTMCJ9IgogCiBLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKCcke0J9Jyl9IgogCkBAIC0xNTYsMTAgKzE1Niw3IEBACiAjIFNvbWUgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUKIEtFUk5FTF9FWFRSQV9BUkdTID89ICIiCiAKLSMgRm9yIHRoZSBrZXJuZWwsIHdlIGRvbid0IHdhbnQgdGhlICctZSBNQUtFRkxBR1M9JyBpbiBFWFRSQV9PRU1BS0UuCi0jIFdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUga2VybmVsIE1ha2VmaWxlIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudAotRVhUUkFfT0VNQUtFID0gIiIKLQorRVhUUkFfT0VNQUtFID0gIiBIT1NUQ0M9IiR7QlVJTERfQ0N9IiBIT1NUQ1BQPSIke0JVSUxEX0NQUH0iIgogS0VSTkVMX0FMVF9JTUFHRVRZUEUgPz89ICIiCiAKIGNvcHlfaW5pdHJhbWZzKCkgewpAQCAtMjAzLDcgKzIwMCw3IEBACiAJZWNobyAiRmluaXNoZWQgY29weSBvZiBpbml0cmFtZnMgaW50byAuL3VzciIKIH0KIAotSU5JVFJBTUZTX0JBU0VfTkFNRSA9ICJpbml0cmFtZnMtJHtQVn0tJHtQUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKK0lOSVRSQU1GU19CQVNFX05BTUUgPz0gImluaXRyYW1mcy0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgogSU5JVFJBTUZTX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCiBkb19idW5kbGVfaW5pdHJhbWZzICgpIHsKIAlpZiBbICEgLXogIiR7SU5JVFJBTUZTX0lNQUdFfSIgLWEgeCIke0lOSVRSQU1GU19JTUFHRV9CVU5ETEV9IiA9IHgxIF07IHRoZW4KQEAgLTIzMiw4ICsyMjksNyBAQAogCQkJaWYgWyAtbiAiJHJlYWxwYXRoIiBdOyB0aGVuCiAJCQkJbXYgLWYgJHJlYWxwYXRoICRyZWFscGF0aC5pbml0cmFtZnMKIAkJCQltdiAtZiAkcmVhbHBhdGguYmFrICRyZWFscGF0aAotCQkJCWNkICR7Qn0vJHtLRVJORUxfT1VUUFVUX0RJUn0KLQkJCQlsbiAtc2YgJGxpbmtwYXRoLmluaXRyYW1mcworCQkJCWxuIC1zZiAkbGlua3BhdGguaW5pdHJhbWZzICR7Qn0vJHtLRVJORUxfT1VUUFVUX0RJUn0vJHR5cGUuaW5pdHJhbWZzCiAJCQllbHNlCiAJCQkJbXYgLWYgJHtLRVJORUxfT1VUUFVUX0RJUn0vJHR5cGUgJHtLRVJORUxfT1VUUFVUX0RJUn0vJHR5cGUuaW5pdHJhbWZzCiAJCQkJbXYgLWYgJHtLRVJORUxfT1VUUFVUX0RJUn0vJHR5cGUuYmFrICR7S0VSTkVMX09VVFBVVF9ESVJ9LyR0eXBlCkBAIC0yNDcsNiArMjQzLDcgQEAKIAkJZG9uZQogCWZpCiB9Citkb19idW5kbGVfaW5pdHJhbWZzW2RpcnNdID0gIiR7Qn0iCiAKIHB5dGhvbiBkb19kZXZzaGVsbF9wcmVwZW5kICgpIHsKICAgICBvcy5lbnZpcm9uWyJMREZMQUdTIl0gPSAnJwpAQCAtMjkxLDcgKzI4OCw3IEBACiAJCSMgZXh0ZXJuYWwga2VybmVsIG1vZHVsZXMgaGFzIGEgZGVwZW5kZW5jeSBvbgogCQkjIG90aGVyIGtlcm5lbCBtb2R1bGVzIGFuZCB3aWxsIGxvb2sgYXQgdGhpcwogCQkjIGZpbGUgdG8gZG8gc3ltYm9sIGxvb2t1cHMKLQkJY3AgTW9kdWxlLnN5bXZlcnMgJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0vCisJCWNwICR7Qn0vTW9kdWxlLnN5bXZlcnMgJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0vCiAJZWxzZQogCQliYm5vdGUgIm5vIG1vZHVsZXMgdG8gY29tcGlsZSIKIAlmaQpAQCAtMzMwLDYgKzMyNywzNiBAQAogfQogZG9faW5zdGFsbFtwcmVmdW5jc10gKz0gInBhY2thZ2VfZ2V0X2F1dG9fcHIiCiAKKyMgTXVzdCBiZSByYW4gbm8gZWFybGllciB0aGFuIGFmdGVyIGRvX2tlcm5lbF9jaGVja291dCBvciBlbHNlIE1ha2VmaWxlIHdvbid0IGJlIGluICR7U30vTWFrZWZpbGUKK2RvX2tlcm5lbF92ZXJzaW9uX3Nhbml0eV9jaGVjaygpIHsKKwkjIFRoZSBNYWtlZmlsZSBkZXRlcm1pbmVzIHRoZSBrZXJuZWwgdmVyc2lvbiBzaG93biBhdCBydW50aW1lCisJIyBEb24ndCB1c2UgS0VSTkVMX1ZFUlNJT04gYmVjYXVzZSB0aGUgaGVhZGVycyBpdCBncmFicyB0aGUgdmVyc2lvbiBmcm9tIGFyZW4ndCBnZW5lcmF0ZWQgdW50aWwgZG9fY29tcGlsZQorCVZFUlNJT049JChncmVwICJeVkVSU0lPTiA9IiAke1N9L01ha2VmaWxlIHwgc2VkIHMvLio9XCAqLy8pCisJUEFUQ0hMRVZFTD0kKGdyZXAgIl5QQVRDSExFVkVMID0iICR7U30vTWFrZWZpbGUgfCBzZWQgcy8uKj1cICovLykKKwlTVUJMRVZFTD0kKGdyZXAgIl5TVUJMRVZFTCA9IiAke1N9L01ha2VmaWxlIHwgc2VkIHMvLio9XCAqLy8pCisJRVhUUkFWRVJTSU9OPSQoZ3JlcCAiXkVYVFJBVkVSU0lPTiA9IiAke1N9L01ha2VmaWxlIHwgc2VkIHMvLio9XCAqLy8pCisKKwkjIEJ1aWxkIGEgc3RyaW5nIGZvciByZWdleCBhbmQgYSBwbGFpbiB2ZXJzaW9uIHN0cmluZworCXJlZz0iXiR7VkVSU0lPTn1cLiR7UEFUQ0hMRVZFTH0iCisJdmVycz0iJHtWRVJTSU9OfS4ke1BBVENITEVWRUx9IgorCWlmIFsgLW4gIiR7U1VCTEVWRUx9IiBdOyB0aGVuCisJCSMgSWdub3JpbmcgYSBTVUJMRVZFTCBvZiB6ZXJvIGlzIGZpbmUKKwkJaWYgWyAiJHtTVUJMRVZFTH0iID0gIjAiIF07IHRoZW4KKwkJCXJlZz0iJHtyZWd9KFwuJHtTVUJMRVZFTH0pPyIKKwkJZWxzZQorCQkJcmVnPSIke3JlZ31cLiR7U1VCTEVWRUx9IgorCQkJdmVycz0iJHt2ZXJzfS4ke1NVQkxFVkVMfSIKKwkJZmkKKwlmaQorCXZlcnM9IiR7dmVyc30ke0VYVFJBVkVSU0lPTn0iCisJcmVnPSIke3JlZ30ke0VYVFJBVkVSU0lPTn0iCisKKwlpZiBbIC16IGBlY2hvICR7UFZ9IHwgZ3JlcCAtRSAiJHtyZWd9ImAgXTsgdGhlbgorCQliYmZhdGFsICJQYWNrYWdlIFZlcnNpb24gKCR7UFZ9KSBkb2VzIG5vdCBtYXRjaCBvZiBrZXJuZWwgYmVpbmcgYnVpbHQgKCR7dmVyc30pLiBQbGVhc2UgdXBkYXRlIHRoZSBQViB2YXJpYWJsZSB0byBtYXRjaCB0aGUga2VybmVsIHNvdXJjZS4iCisJZmkKKwlleGl0IDAKK30KKwogYWRkdGFzayBzaGFyZWRfd29ya2RpciBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19jb21waWxlX2tlcm5lbG1vZHVsZXMKIGFkZHRhc2sgc2hhcmVkX3dvcmtkaXJfc2V0c2NlbmUKIApAQCAtMzY0LDYgKzM5MSwxNCBAQAogCWNwIC5jb25maWcgJGtlcm5lbGRpci8KIAlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvY29uZmlnCiAJY3AgaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgJGtlcm5lbGRpci9pbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZQorCWlmIFsgLWUgY2VydHMvc2lnbmluZ19rZXkucGVtIF07IHRoZW4KKwkJIyBUaGUgc2lnbmluZ19rZXkuKiBmaWxlcyBhcmUgc3RvcmVkIGluIHRoZSBjZXJ0cy8gZGlyIGluCisJCSMgbmV3ZXIgTGludXgga2VybmVscworCQlta2RpciAtcCAka2VybmVsZGlyL2NlcnRzCisJCWNwIGNlcnRzL3NpZ25pbmdfa2V5LiogJGtlcm5lbGRpci9jZXJ0cy8KKwllbGlmIFsgLWUgc2lnbmluZ19rZXkucHJpdiBdOyB0aGVuCisJCWNwIHNpZ25pbmdfa2V5LiogJGtlcm5lbGRpci8KKwlmaQogCiAJIyBXZSBjYW4gYWxzbyBjb3B5IG92ZXIgYWxsIHRoZSBnZW5lcmF0ZWQgZmlsZXMgYW5kIGF2b2lkIHNwZWNpYWwgY2FzZXMKIAkjIGxpa2UgdmVyc2lvbi5oLCBidXQgd2UndmUgb3B0ZWQgdG8ga2VlcCB0aGlzIHNtYWxsIHVudGlsIGZpbGUgY3JlZXAgc3RhcnRzCkBAIC00MzQsNiArNDY5LDcgQEAKIH0KIAogZG9fc2F2ZWRlZmNvbmZpZygpIHsKKwliYnBsYWluICJTYXZpbmcgZGVmY29uZmlnIHRvOlxuJHtCfS9kZWZjb25maWciCiAJb2VfcnVubWFrZSAtQyAke0J9IHNhdmVkZWZjb25maWcKIH0KIGRvX3NhdmVkZWZjb25maWdbbm9zdGFtcF0gPSAiMSIKQEAgLTQ4NCwxNSArNTIwLDE4IEBACiB9CiAKICMgTWFueSBzY3JpcHRzIHdhbnQgdG8gbG9vayBpbiBhcmNoLyRhcmNoL2Jvb3QgZm9yIHRoZSBib290YWJsZQotIyBpbWFnZS4gVGhpcyBwb3NlcyBhIHByb2JsZW0gZm9yIHZtbGludXggYmFzZWQgYm9vdGluZy4gVGhpcyAKLSMgdGFzayBhcnJhbmdlcyB0byBoYXZlIHZtbGludXggYXBwZWFyIGluIHRoZSBub3JtYWxpemVkIGRpcmVjdG9yeQotIyBsb2NhdGlvbi4KLWRvX2tlcm5lbF9saW5rX3ZtbGludXgoKSB7CisjIGltYWdlLiBUaGlzIHBvc2VzIGEgcHJvYmxlbSBmb3Igdm1saW51eCBhbmQgdm1saW51eiBiYXNlZAorIyBib290aW5nLiBUaGlzIHRhc2sgYXJyYW5nZXMgdG8gaGF2ZSB2bWxpbnV4IGFuZCB2bWxpbnV6IGFwcGVhcgorIyBpbiB0aGUgbm9ybWFsaXplZCBkaXJlY3RvcnkgbG9jYXRpb24uCitkb19rZXJuZWxfbGlua19pbWFnZXMoKSB7CiAJaWYgWyAhIC1kICIke0J9L2FyY2gvJHtBUkNIfS9ib290IiBdOyB0aGVuCiAJCW1rZGlyICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKIAlmaQogCWNkICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKIAlsbiAtc2YgLi4vLi4vLi4vdm1saW51eAorCWlmIFsgLWYgLi4vLi4vLi4vdm1saW51eiBdOyB0aGVuCisJCWxuIC1zZiAuLi8uLi8uLi92bWxpbnV6CisJZmkKIH0KIAogZG9fc3RyaXAoKSB7CkBAIC01MjIsNyArNTYxLDcgQEAKIH0KIGRvX3N0cmlwW2RpcnNdID0gIiR7Qn0iCiAKLWFkZHRhc2sgZG9fc3RyaXAgYmVmb3JlIGRvX3NpemVjaGVjayBhZnRlciBkb19rZXJuZWxfbGlua192bWxpbnV4CithZGR0YXNrIGRvX3N0cmlwIGJlZm9yZSBkb19zaXplY2hlY2sgYWZ0ZXIgZG9fa2VybmVsX2xpbmtfaW1hZ2VzCiAKICMgU3VwcG9ydCBjaGVja2luZyB0aGUga2VybmVsIHNpemUgc2luY2Ugc29tZSBrZXJuZWxzIG5lZWQgdG8gcmVzaWRlIGluIHBhcnRpdGlvbnMKICMgd2l0aCBhIGZpeGVkIGxlbmd0aCBvciB0aGVyZSBpcyBhIGxpbWl0IGluIHRyYW5zZmVycmluZyB0aGUga2VybmVsIHRvIG1lbW9yeQpAQCAtNTgzLDggKzYyMiw3IEBACiAJCQlpbml0cmFtZnNfYmFzZV9uYW1lPSR7dHlwZX0tJHtJTklUUkFNRlNfQkFTRV9OQU1FfQogCQkJaW5pdHJhbWZzX3N5bWxpbmtfbmFtZT0ke3R5cGV9LWluaXRyYW1mcy0ke01BQ0hJTkV9CiAJCQlpbnN0YWxsIC1tIDA2NDQgJHtLRVJORUxfT1VUUFVUX0RJUn0vJHt0eXBlfS5pbml0cmFtZnMgJHtERVBMT1lESVJ9LyR7aW5pdHJhbWZzX2Jhc2VfbmFtZX0uYmluCi0JCQljZCAke0RFUExPWURJUn0KLQkJCWxuIC1zZiAke2luaXRyYW1mc19iYXNlX25hbWV9LmJpbiAke2luaXRyYW1mc19zeW1saW5rX25hbWV9LmJpbgorCQkJbG4gLXNmICR7aW5pdHJhbWZzX2Jhc2VfbmFtZX0uYmluICR7REVQTE9ZRElSfS8ke2luaXRyYW1mc19zeW1saW5rX25hbWV9LmJpbgogCQlmaQogCWRvbmUKIH0KQEAgLTU5NSw0ICs2MzMsMyBAQAogYWRkdGFzayBkZXBsb3kgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAogCiBFWFBPUlRfRlVOQ1RJT05TIGRvX2RlcGxveQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MKaW5kZXggYmJjODAxNi4uMTFiMDA2NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJjLWNvbW1vbi5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcwpAQCAtNCwxNCArNCwxMiBAQAogCQloPWBlY2hvICRyfHNlZCAtZSdzLFwueCQsLmgsJ2AKIAkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vc3VucnBjL3JwY3N2Yy8kaCAke0R9LyR7aW5jbHVkZWRpcn0vcnBjc3ZjLwogCWRvbmUKLQlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS8gCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZXRjL2xkLnNvLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9LworCWluc3RhbGwgLURtIDA2NDQgJHtXT1JLRElSfS9ldGMvbGQuc28uY29uZiAke0R9LyR7c3lzY29uZmRpcn0vbGQuc28uY29uZgogCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxlZGlyfQogCW1ha2UgLWYgJHtXT1JLRElSfS9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsgSU49IiR7U30vbG9jYWxlZGF0YS9TVVBQT1JURUQiIE9VVD0iJHtXT1JLRElSfS9TVVBQT1JURUQiCiAJIyBnZXQgcmlkIG9mIHNvbWUgYnJva2VuIGZpbGVzLi4uCiAJZm9yIGkgaW4gJHtHTElCQ19CUk9LRU5fTE9DQUxFU307IGRvCi0JCWdyZXAgLXYgJGkgJHtXT1JLRElSfS9TVVBQT1JURUQgPiAke1dPUktESVJ9L1NVUFBPUlRFRC50bXAKLQkJbXYgJHtXT1JLRElSfS9TVVBQT1JURUQudG1wICR7V09SS0RJUn0vU1VQUE9SVEVECisJCXNlZCAtaSAiLyRpL2QiICR7V09SS0RJUn0vU1VQUE9SVEVECiAJZG9uZQogCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L3JwYwogCXJtIC1yZiAke0R9JHtkYXRhZGlyfS96b25laW5mbwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJjLXBhY2thZ2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliYy1wYWNrYWdlLmJiY2xhc3MKaW5kZXggNDY3ZDU2Ny4uMmRjOTBjNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJjLXBhY2thZ2UuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzCkBAIC00NywxNSArNDcsNiBAQAogCiBPVkVSUklERVNfYXBwZW5kID0gIjoke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30iCiAKLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgICAgICBpZiBbIC1lICR7U30vZWxmL2xkZC5iYXNoLmluIF07IHRoZW4KLSAgICAgICAgICAgICAgICBzZWQgLWUgInMjQEJBU0hAIy9iaW4vc2gjIiAtaSAke1N9L2VsZi9sZGQuYmFzaC5pbgotICAgICAgICBmaQotfQotCi0KLQotIyBpbmRlbnRhdGlvbiByZW1vdmVkIG9uIHB1cnBvc2UKIGxvY2FsZV9iYXNlX3Bvc3RpbnN0KCkgewogIyEvYmluL3NoCiAKQEAgLTYzLDMzICs1NCwxNCBAQAogCWV4aXQgMQogZmkKIAotcm0gLXJmICR7VE1QX0xPQ0FMRX0KLW1rZGlyIC1wICR7VE1QX0xPQ0FMRX0KLWlmIFsgLWYgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlIF07IHRoZW4KLSAgICAgICAgY3AgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlICR7VE1QX0xPQ0FMRX0vCi1maQotbG9jYWxlZGVmIC0taW5wdXRmaWxlPSR7ZGF0YWRpcn0vaTE4bi9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAtLXByZWZpeD0vdG1wL2xvY2FsZSAlcwotbWtkaXIgLXAgJHtsb2NhbGVkaXJ9LwotbXYgJHtUTVBfTE9DQUxFfS9sb2NhbGUtYXJjaGl2ZSAke2xvY2FsZWRpcn0vCi1ybSAtcmYgJHtUTVBfTE9DQUxFfQorbG9jYWxlZGVmIC0taW5wdXRmaWxlPSR7ZGF0YWRpcn0vaTE4bi9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAlcwogfQogCi0jIGluZGVudGF0aW9uIHJlbW92ZWQgb24gcHVycG9zZQogbG9jYWxlX2Jhc2VfcG9zdHJtKCkgewogIyEvYmluL3NoCi0KLXJtIC1yZiAke1RNUF9MT0NBTEV9Ci1ta2RpciAtcCAke1RNUF9MT0NBTEV9Ci1pZiBbIC1mICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSBdOyB0aGVuCi0JY3AgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlICR7VE1QX0xPQ0FMRX0vCi1maQotbG9jYWxlZGVmIC0tZGVsZXRlLWZyb20tYXJjaGl2ZSAtLWlucHV0ZmlsZT0ke2RhdGFkaXJ9L2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzIC0tcHJlZml4PS90bXAvbG9jYWxlICVzCi1tdiAke1RNUF9MT0NBTEV9L2xvY2FsZS1hcmNoaXZlICR7bG9jYWxlZGlyfS8KLXJtIC1yZiAke1RNUF9MT0NBTEV9Citsb2NhbGVkZWYgLS1kZWxldGUtZnJvbS1hcmNoaXZlIC0taW5wdXRmaWxlPSR7ZGF0YWRpcn0vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgJXMKIH0KIAotCi1UTVBfTE9DQUxFPSIvdG1wL2xvY2FsZSR7bG9jYWxlZGlyfSIKIExPQ0FMRVRSRUVTUkMgPz0gIiR7UEtHRH0iCiAKIGRvX3ByZXBfbG9jYWxlX3RyZWUoKSB7CkBAIC0xNTAsNiArMTIyLDcgQEAKICAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCiAgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQogICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbCA9IGwuZGVjb2RlKCJsYXRpbi0xIikKICAgICAgICAgICAgIG0gPSBjX3JlLm1hdGNoKGwpIG9yIGlfcmUubWF0Y2gobCkKICAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgZHAgPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJXMlcy1nY29udi0lcycgJSAobWxwcmVmaXgsIGJwbiwgbS5ncm91cCgxKSkpCkBAIC0xNzEsNiArMTQ0LDcgQEAKICAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCiAgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQogICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbCA9IGwuZGVjb2RlKCJsYXRpbi0xIikKICAgICAgICAgICAgIG0gPSBjX3JlLm1hdGNoKGwpIG9yIGlfcmUubWF0Y2gobCkKICAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgZHAgPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJXMlcy1jaGFybWFwLSVzJyAlIChtbHByZWZpeCwgYnBuLCBtLmdyb3VwKDEpKSkKQEAgLTE5MSw2ICsxNjUsNyBAQAogICAgICAgICBjX3JlID0gcmUuY29tcGlsZSgnXmNvcHkgIiguKikiJykKICAgICAgICAgaV9yZSA9IHJlLmNvbXBpbGUoJ15pbmNsdWRlICIoXHcrKSIuKicpCiAgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBsID0gbC5kZWNvZGUoImxhdGluLTEiKQogICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQogICAgICAgICAgICAgaWYgbToKICAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG1scHJlZml4K2JwbisnLWxvY2FsZWRhdGEtJXMnICUgbS5ncm91cCgxKSkKQEAgLTIyMyw3ICsxOTgsNyBAQAogICAgICMgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyB2YXIgc3BlY2lmaWVzIHdoaWNoIGxvY2FsZXMgdG8gYmUgZ2VuZXJhdGVkLiBlbXB0eSBvciAiYWxsIiBtZWFucyBhbGwgbG9jYWxlcwogICAgIHRvX2dlbmVyYXRlID0gZC5nZXRWYXIoJ0dMSUJDX0dFTkVSQVRFX0xPQ0FMRVMnLCBUcnVlKQogICAgIGlmIG5vdCB0b19nZW5lcmF0ZSBvciB0b19nZW5lcmF0ZSA9PSAnYWxsJzoKLSAgICAgICAgdG9fZ2VuZXJhdGUgPSBzdXBwb3J0ZWQua2V5cygpCisgICAgICAgIHRvX2dlbmVyYXRlID0gc29ydGVkKHN1cHBvcnRlZC5rZXlzKCkpCiAgICAgZWxzZToKICAgICAgICAgdG9fZ2VuZXJhdGUgPSB0b19nZW5lcmF0ZS5zcGxpdCgpCiAgICAgICAgIGZvciBsb2NhbGUgaW4gdG9fZ2VuZXJhdGU6CkBAIC0yNzQsOSArMjQ5LDEzIEBACiAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKICAgICAgICAgICAgICAgICAicG93ZXJwYzY0IjogIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgXAogICAgICAgICAgICAgICAgICJtaXBzIjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgIm1pcHNpc2EzMnI2IjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCiAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAibWlwc2lzYTY0cjYiOiAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCiAgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAibWlwc2lzYTMycjZlbCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJtaXBzaXNhNjRyNmVsIjoiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKICAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAogICAgICAgICAgICAgICAgICJpNjg2IjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCiAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIgIH0KQEAgLTI4NSw5ICsyNjQsOSBAQAogICAgICAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzID0gbG9jYWxlX2FyY2hfb3B0aW9uc1t0YXJnZXRfYXJjaF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYmIuZXJyb3IoImxvY2FsZV9hcmNoX29wdGlvbnMgbm90IGZvdW5kIGZvciB0YXJnZXRfYXJjaD0iICsgdGFyZ2V0X2FyY2gpCi0gICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5rbm93biBhcmNoOiIgKyB0YXJnZXRfYXJjaCArICIgZm9yIGxvY2FsZV9hcmNoX29wdGlvbnMiKQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJ1bmtub3duIGFyY2g6IiArIHRhcmdldF9hcmNoICsgIiBmb3IgbG9jYWxlX2FyY2hfb3B0aW9ucyIpCiAKLSAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzICs9ICIgLS1mb3JjZSAtLW9sZC1zdHlsZSAtLW5vLWFyY2hpdmUgLS1wcmVmaXg9JXMgXAorICAgICAgICAgICAgbG9jYWxlZGVmX29wdHMgKz0gIiAtLWZvcmNlICAtLW5vLWFyY2hpdmUgLS1wcmVmaXg9JXMgXAogICAgICAgICAgICAgICAgIC0taW5wdXRmaWxlPSVzLyVzL2kxOG4vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgJXMvJXMiIFwKICAgICAgICAgICAgICAgICAlICh0cmVlZGlyLCB0cmVlZGlyLCBkYXRhZGlyLCBsb2NhbGUsIGVuY29kaW5nLCBvdXRwdXRwYXRoLCBuYW1lKQogCkBAIC0yOTUsNyArMjc0LDcgQEAKICAgICAgICAgICAgICAgICAocGF0aCwgaTE4bnBhdGgsIGdjb252cGF0aCwgbG9jYWxlZGVmX29wdHMpCiAgICAgICAgIGVsc2U6ICMgZWFybGllciBzbG93ZXIgcWVtdSB3YXkgCiAgICAgICAgICAgICBxZW11ID0gcWVtdV90YXJnZXRfYmluYXJ5KGQpIAotICAgICAgICAgICAgbG9jYWxlZGVmX29wdHMgPSAiLS1mb3JjZSAtLW9sZC1zdHlsZSAtLW5vLWFyY2hpdmUgLS1wcmVmaXg9JXMgXAorICAgICAgICAgICAgbG9jYWxlZGVmX29wdHMgPSAiLS1mb3JjZSAtLW5vLWFyY2hpdmUgLS1wcmVmaXg9JXMgXAogICAgICAgICAgICAgICAgIC0taW5wdXRmaWxlPSVzL2kxOG4vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgJXMiIFwKICAgICAgICAgICAgICAgICAlICh0cmVlZGlyLCBkYXRhZGlyLCBsb2NhbGUsIGVuY29kaW5nLCBuYW1lKQogCkBAIC0zODgsNCArMzY3LDMgQEAKIHB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ3BhY2thZ2VfZG9fc3BsaXRfZ2NvbnZzJywgZCkKIH0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpY2Vuc2UuYmJjbGFzcwppbmRleCA0Mzk0NGU2Li5kYTRmYzNlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpY2Vuc2UuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpY2Vuc2UuYmJjbGFzcwpAQCAtMTgxLDggKzE4MSwxMCBAQAogICAgICAgICAgICAgICAgIGtleSx2YWwgPSBsaW5lLnNwbGl0KCI6ICIsIDEpCiAgICAgICAgICAgICAgICAgbWFuX2RpY1tkZXBdW2tleV0gPSB2YWxbOi0xXQogCi0gICAgaW1hZ2VfbGljZW5zZV9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDRU5TRV9ESVJFQ1RPUlknLCBUcnVlKSwKLSAgICAgICAgICAgIGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSksICdpbWFnZV9saWNlbnNlLm1hbmlmZXN0JykKKyAgICBsaWNfbWFuaWZlc3RfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobGljX21hbmlmZXN0X2RpcikKKyAgICBpbWFnZV9saWNlbnNlX21hbmlmZXN0ID0gb3MucGF0aC5qb2luKGxpY19tYW5pZmVzdF9kaXIsICdpbWFnZV9saWNlbnNlLm1hbmlmZXN0JykKICAgICB3cml0ZV9saWNlbnNlX2ZpbGVzKGQsIGltYWdlX2xpY2Vuc2VfbWFuaWZlc3QsIG1hbl9kaWMpCiAKIGRlZiBnZXRfZGVwbG95ZWRfZGVwZW5kZW5jaWVzKGQpOgpAQCAtMTk4LDcgKzIwMCw3IEBACiAgICAgIyBpdCBtaWdodCBjb250YWluIHRoZSBib290bG9hZGVyLgogICAgIHRhc2tkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCiAgICAgZGVwZW5kcyA9IGxpc3Qoc2V0KFtkZXBbMF0gZm9yIGRlcAotICAgICAgICAgICAgICAgICAgICBpbiB0YXNrZGF0YS5pdGVydmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW4gbGlzdCh0YXNrZGF0YS52YWx1ZXMoKSkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcFswXS5lbmRzd2l0aCgiLW5hdGl2ZSIpXSkpCiAgICAgZXh0cmFfZGVwZW5kcyA9IGQuZ2V0VmFyKCJFWFRSQV9JTUFHRURFUEVORFMiLCBUcnVlKQogICAgIGJvb3RfZGVwZW5kcyA9IGdldF9ib290X2RlcGVuZGVuY2llcyhkKQpAQCAtMjU5LDcgKzI2MSw3IEBACiAgICAgICAgICAgICBkZXBlbmRzLmFwcGVuZChkZXApCiAgICAgICAgICMgV2UgbmVlZCB0byBzZWFyY2ggZm9yIHRoZSBwcm92aWRlciBvZiB0aGUgZGVwZW5kZW5jeQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIHRhc2tkZXAgaW4gdGFza2RlcGRhdGEuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgZm9yIHRhc2tkZXAgaW4gdGFza2RlcGRhdGEudmFsdWVzKCk6CiAgICAgICAgICAgICAgICAgIyBUaGUgZmlmdGggZmllbGQgY29udGFpbnMgd2hhdCB0aGUgdGFzayBwcm92aWRlcwogICAgICAgICAgICAgICAgIGlmIGRlcCBpbiB0YXNrZGVwWzRdOgogICAgICAgICAgICAgICAgICAgICBpbmZvX2ZpbGUgPSBvcy5wYXRoLmpvaW4oCkBAIC0zNDAsNiArMzQyLDcgQEAKIAogZGVmIGNvcHlfbGljZW5zZV9maWxlcyhsaWNfZmlsZXNfcGF0aHMsIGRlc3RkaXIpOgogICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgZXJybm8KIAogICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQogICAgIGZvciAoYmFzZW5hbWUsIHBhdGgpIGluIGxpY19maWxlc19wYXRoczoKQEAgLTM0OCwxMiArMzUxLDIxIEBACiAgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgYmFzZW5hbWUpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCi0gICAgICAgICAgICBpZiBvcy5hY2Nlc3Moc3JjLCBvcy5XX09LKSBhbmQgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0ZGlyKS5zdF9kZXYpOgotICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICBjYW5saW5rID0gb3MuYWNjZXNzKHNyYywgb3MuV19PSykgYW5kIChvcy5zdGF0KHNyYykuc3RfZGV2ID09IG9zLnN0YXQoZGVzdGRpcikuc3RfZGV2KQorICAgICAgICAgICAgaWYgY2FubGluazoKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmNob3duKGRzdCwwLDApCisgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCiAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVYREVWOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBDb3B5IGxpY2Vuc2UgZmlsZXMgaWYgaGFyZC1saW5rIGlzIG5vdCBwb3NzaWJsZSBldmVuIGlmIHN0X2RldiBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc2FtZSBvbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIChkb2NrZXIgY29udGFpbmVyIHdpdGggZGV2aWNlLW1hcHBlcj8pCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5saW5rID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBjYW5saW5rOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2hvd24oZHN0LDAsMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyBpbiAoZXJybm8uRVBFUk0sIGVycm5vLkVJTlZBTCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIFN1cHByZXNzICJPcGVyYXRpb24gbm90IHBlcm1pdHRlZCIgZXJyb3IsIGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAjIHNvbWV0aW1lcyB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBleGVjdXRlZCB1bmRlciBwc2V1ZG8uCkBAIC0zNjIsNyArMzc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGNhbmxpbms6CiAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZHN0KQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY29weSBsaWNlbnNlIGZpbGUgJXMgdG8gJXM6ICVzIiAlIChzcmMsIGRzdCwgZSkpCkBAIC0zNzMsMjEgKzM4NSw4IEBACiAgICAgIiIiCiAgICAgaW1wb3J0IHNodXRpbAogICAgIGltcG9ydCBvZS5saWNlbnNlCisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QsIE9yZGVyZWREaWN0CiAKLSAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCi0gICAgZm9yIHBhY2thZ2UgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSk6Ci0gICAgICAgIGlmIGQuZ2V0VmFyKCdMSUNFTlNFXycgKyBwYWNrYWdlLCBUcnVlKToKLSAgICAgICAgICAgIGxpY2Vuc2VfdHlwZXMgPSBsaWNlbnNlX3R5cGVzICsgJyAmICcgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0xJQ0VOU0VfJyArIHBhY2thZ2UsIFRydWUpCi0KLSAgICAjSWYgd2UgZ2V0IGhlcmUgd2l0aCBubyBsaWNlbnNlIHR5cGVzLCB0aGVuIHRoYXQgbWVhbnMgd2UgaGF2ZSBhIHJlY2lwZSAKLSAgICAjbGV2ZWwgbGljZW5zZS4gSWYgc28sIHdlIGdyYWIgb25seSB0aG9zZS4KLSAgICB0cnk6Ci0gICAgICAgIGxpY2Vuc2VfdHlwZXMKLSAgICBleGNlcHQgTmFtZUVycm9yOiAgICAgICAgCi0gICAgICAgICMgQWxsIHRoZSBsaWNlbnNlIHR5cGVzIGF0IHRoZSByZWNpcGUgbGV2ZWwKLSAgICAgICAgbGljZW5zZV90eXBlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKLSAKICAgICAjIEFsbCB0aGUgbGljZW5zZSBmaWxlcyBmb3IgdGhlIHBhY2thZ2UKICAgICBsaWNfZmlsZXMgPSBkLmdldFZhcignTElDX0ZJTEVTX0NIS1NVTScsIFRydWUpCiAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQpAQCAtMzk3LDYgKzM5Niw4IEBACiAgICAgZ2VuZXJpY19kaXJlY3RvcnkgPSBkLmdldFZhcignQ09NTU9OX0xJQ0VOU0VfRElSJywgVHJ1ZSkKICAgICAjIExpc3Qgb2YgYmFzZW5hbWUsIHBhdGggdHVwbGVzCiAgICAgbGljX2ZpbGVzX3BhdGhzID0gW10KKyAgICAjIEVudHJpZXMgZnJvbSBMSUNfRklMRVNfQ0hLU1VNCisgICAgbGljX2Noa3N1bXMgPSB7fQogICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMgPSBbXQogICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMuYXBwZW5kKGdlbmVyaWNfZGlyZWN0b3J5KQogICAgIHRyeToKQEAgLTQyNiw3ICs0MjcsNiBAQAogICAgICAgICBsaWNlbnNlX3NvdXJjZSA9IE5vbmUKICAgICAgICAgIyBJZiB0aGUgZ2VuZXJpYyBkb2VzIG5vdCBleGlzdCB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBTUERYIG1hcHBpbmcgdG8gaXQsCiAgICAgICAgICMgdW5sZXNzIE5PX0dFTkVSSUNfTElDRU5TRSBpcyBzZXQuCi0KICAgICAgICAgZm9yIGxpY19kaXIgaW4gbGljZW5zZV9zb3VyY2VfZGlyczoKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2RpciwgbGljZW5zZV90eXBlKSk6CiAgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2VfdHlwZSwgVHJ1ZSkgIT0gTm9uZToKQEAgLTQ0MCw2ICs0NDAsNyBAQAogICAgICAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gbGljX2RpcgogICAgICAgICAgICAgICAgIGJyZWFrCiAKKyAgICAgICAgbm9uX2dlbmVyaWNfbGljID0gZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUsIFRydWUpCiAgICAgICAgIGlmIHNwZHhfZ2VuZXJpYyBhbmQgbGljZW5zZV9zb3VyY2U6CiAgICAgICAgICAgICAjIHdlIHJlYWxseSBzaG91bGQgY29weSB0byBnZW5lcmljXyArIHNwZHhfZ2VuZXJpYywgaG93ZXZlciwgdGhhdCBlbmRzIHVwIG1lc3NpbmcgdGhlIG1hbmlmZXN0CiAgICAgICAgICAgICAjIGF1ZGl0IHVwLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiBlbWl0X3BrZ2RhdGEgKG9yLCB3ZSBhY3R1YWxseSBnb3QgYW5kIGZpeCBhbGwgdGhlIHJlY2lwZXMpCkBAIC00NTEsMTMgKzQ1MiwxMSBAQAogICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUsIFRydWUpOgogICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiAlcyBpcyBhIGdlbmVyaWMgbGljZW5zZSwgcGxlYXNlIGRvbid0IHVzZSBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIGl0LiIgJSAocG4sIGxpY2Vuc2VfdHlwZSkpCiAKLSAgICAgICAgZWxpZiBkLmdldFZhckZsYWcoJ05PX0dFTkVSSUNfTElDRU5TRScsIGxpY2Vuc2VfdHlwZSwgVHJ1ZSk6CisgICAgICAgIGVsaWYgbm9uX2dlbmVyaWNfbGljIGFuZCBub25fZ2VuZXJpY19saWMgaW4gbGljX2Noa3N1bXM6CiAgICAgICAgICAgICAjIGlmIE5PX0dFTkVSSUNfTElDRU5TRSBpcyBzZXQsIHdlIGNvcHkgdGhlIGxpY2Vuc2UgZmlsZXMgZnJvbSB0aGUgZmV0Y2hlZCBzb3VyY2UKICAgICAgICAgICAgICMgb2YgdGhlIHBhY2thZ2UgcmF0aGVyIHRoYW4gdGhlIGxpY2Vuc2Vfc291cmNlX2RpcnMuCi0gICAgICAgICAgICBmb3IgKGJhc2VuYW1lLCBwYXRoKSBpbiBsaWNfZmlsZXNfcGF0aHM6Ci0gICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUsIFRydWUpID09IGJhc2VuYW1lOgotICAgICAgICAgICAgICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKCgiZ2VuZXJpY18iICsgbGljZW5zZV90eXBlLCBwYXRoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGxpY19maWxlc19wYXRocy5hcHBlbmQoKCJnZW5lcmljXyIgKyBsaWNlbnNlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3JjZGlyLCBub25fZ2VuZXJpY19saWMpKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQWRkIGV4cGxpY2l0eSBhdm9pZCBvZiBDTE9TRUQgbGljZW5zZSBiZWNhdXNlIHRoaXMgaXNuJ3QgZ2VuZXJpYwogICAgICAgICAgICAgaWYgbGljZW5zZV90eXBlICE9ICdDTE9TRUQnOgpAQCAtNDY2LDcgKzQ2NSw3IEBACiAgICAgICAgICAgICBwYXNzCiAKICAgICBpZiBub3QgZ2VuZXJpY19kaXJlY3Rvcnk6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkNPTU1PTl9MSUNFTlNFX0RJUiBpcyB1bnNldC4gUGxlYXNlIHNldCB0aGlzIGluIHlvdXIgZGlzdHJvIGNvbmZpZyIpCisgICAgICAgIGJiLmZhdGFsKCJDT01NT05fTElDRU5TRV9ESVIgaXMgdW5zZXQuIFBsZWFzZSBzZXQgdGhpcyBpbiB5b3VyIGRpc3RybyBjb25maWciKQogCiAgICAgaWYgbm90IGxpY19maWxlczoKICAgICAgICAgIyBObyByZWNpcGUgc2hvdWxkIGhhdmUgYW4gaW52YWxpZCBsaWNlbnNlIGZpbGUuIFRoaXMgaXMgY2hlY2tlZCBlbHNlCkBAIC00NzgsMTkgKzQ3NywzMiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKQogICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICAlcyIgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIHVybCkpCisgICAgICAgICAgICBiYi5mYXRhbCgiJXM6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICAlcyIgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIHVybCkpCiAgICAgICAgICMgV2Ugd2FudCB0aGUgbGljZW5zZSBmaWxlbmFtZSBhbmQgcGF0aAotICAgICAgICBzcmNsaWNmaWxlID0gb3MucGF0aC5qb2luKHNyY2RpciwgcGF0aCkKLSAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgob3MucGF0aC5iYXNlbmFtZShwYXRoKSwgc3JjbGljZmlsZSkpCisgICAgICAgIGNoa3N1bSA9IHBhcm1bJ21kNSddIGlmICdtZDUnIGluIHBhcm0gZWxzZSBwYXJtWydzaGEyNTYnXQorICAgICAgICBsaWNfY2hrc3Vtc1twYXRoXSA9IGNoa3N1bQogCiAgICAgdiA9IEZpbmRWaXNpdG9yKCkKICAgICB0cnk6Ci0gICAgICAgIHYudmlzaXRfc3RyaW5nKGxpY2Vuc2VfdHlwZXMpCisgICAgICAgIHYudmlzaXRfc3RyaW5nKGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkpCiAgICAgZXhjZXB0IG9lLmxpY2Vuc2UuSW52YWxpZExpY2Vuc2UgYXMgZXhjOgogICAgICAgICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUEYnLCBUcnVlKSwgZXhjKSkKICAgICBleGNlcHQgU3ludGF4RXJyb3I6CiAgICAgICAgIGJiLndhcm4oIiVzOiBGYWlsZWQgdG8gcGFyc2UgaXQncyBMSUNFTlNFIGZpZWxkLiIgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpKQogCisgICAgIyBBZGQgZmlsZXMgZnJvbSBMSUNfRklMRVNfQ0hLU1VNIHRvIGxpc3Qgb2YgbGljZW5zZSBmaWxlcworICAgIGxpY19jaGtzdW1fcGF0aHMgPSBkZWZhdWx0ZGljdChPcmRlcmVkRGljdCkKKyAgICBmb3IgcGF0aCwgY2hrc3VtIGluIGxpY19jaGtzdW1zLml0ZW1zKCk6CisgICAgICAgIGxpY19jaGtzdW1fcGF0aHNbb3MucGF0aC5iYXNlbmFtZShwYXRoKV1bY2hrc3VtXSA9IG9zLnBhdGguam9pbihzcmNkaXIsIHBhdGgpCisgICAgZm9yIGJhc2VuYW1lLCBmaWxlcyBpbiBsaWNfY2hrc3VtX3BhdGhzLml0ZW1zKCk6CisgICAgICAgIGlmIGxlbihmaWxlcykgPT0gMToKKyAgICAgICAgICAgIGxpY19maWxlc19wYXRocy5hcHBlbmQoKGJhc2VuYW1lLCBsaXN0KGZpbGVzLnZhbHVlcygpKVswXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBkaWZmZXJlbnQgbGljZW5zZSBmaWxlcyB3aXRoIGlkZW50aWNhbAorICAgICAgICAgICAgIyBiYXNlbmFtZXMgd2UgcmVuYW1lIHRoZW0gdG8gPGZpbGU+LjAsIDxmaWxlPi4xLCAuLi4KKyAgICAgICAgICAgIGZvciBpLCBwYXRoIGluIGVudW1lcmF0ZShmaWxlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgoIiVzLiVkIiAlIChiYXNlbmFtZSwgaSksIHBhdGgpKQorCiAgICAgcmV0dXJuIGxpY19maWxlc19wYXRocwogCiBkZWYgcmV0dXJuX3NwZHgoZCwgbGljZW5zZSk6CkBAIC02MzMsNyArNjQ1LDcgQEAKICAgICBsaWNlbnNlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKICAgICBmcm9tIG9lLmxpY2Vuc2UgaW1wb3J0IGxpY2Vuc2Vfb3BlcmF0b3IsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMsIGxpY2Vuc2VfcGF0dGVybgogCi0gICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlcykpCisgICAgZWxlbWVudHMgPSBsaXN0KGZpbHRlcihsYW1iZGEgeDogeC5zdHJpcCgpLCBsaWNlbnNlX29wZXJhdG9yLnNwbGl0KGxpY2Vuc2VzKSkpCiAgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgogICAgICAgICBpZiBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudCk6CiAgICAgICAgICAgICBpZiBwb3MgPiAwIGFuZCBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudHNbcG9zIC0gMV0pOgpAQCAtNjU2LDggKzY2OCw2IEBACiBJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EX3ByZXBlbmQgPSAid3JpdGVfZGVwbG95X21hbmlmZXN0OyAiCiBkb19pbWFnZVtyZWNyZGVwdGFza10gKz0gImRvX3BvcHVsYXRlX2xpYyIKIAotZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lW2RpcnNdID0gIiR7TElDU1NUQVRFRElSfS8ke1BOfSIKLWRvX3BvcHVsYXRlX2xpY19zZXRzY2VuZVtjbGVhbmRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKIHB5dGhvbiBkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmUgKCkgewogICAgIHNzdGF0ZV9zZXRzY2VuZShkKQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saW51eGxvYWRlci5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saW51eGxvYWRlci5iYmNsYXNzCmluZGV4IDVjNGRjNWMuLjExN2IwMzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXhsb2FkZXIuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpbnV4bG9hZGVyLmJiY2xhc3MKQEAgLTEsNyArMSwxMyBAQAogCiBsaW51eGxvYWRlciAoKSB7CiAJY2FzZSAke1RBUkdFVF9BUkNIfSBpbgotCQlwb3dlcnBjIHwgbWlwcyB8IG1pcHNlbCB8IG1pY3JvYmxhemUgKQorCQlwb3dlcnBjIHwgbWljcm9ibGF6ZSApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQuc28uMSIKKwkJCTs7CisJCW1pcHNpc2EzMnI2ZWwgfCBtaXBzaXNhMzJyNiB8IG1pcHNpc2E2NHI2ZWwgfCBtaXBzaXNhNjRyNikKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC1saW51eC1taXBzbjguc28uMSIKKwkJCTs7CisJCW1pcHMqICkKIAkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC5zby4xIgogCQkJOzsKIAkJcG93ZXJwYzY0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saXZlLXZtLWNvbW1vbi5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saXZlLXZtLWNvbW1vbi5iYmNsYXNzCmluZGV4IGM3NTEzODUuLjczNDY5N2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGl2ZS12bS1jb21tb24uYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpdmUtdm0tY29tbW9uLmJiY2xhc3MKQEAgLTMxLDE0ICszMSwxOCBAQAogaW5oZXJpdCAke1BDQklPU19DTEFTU30KIAogS0VSTkVMX0lNQUdFVFlQRSA/Pz0gImJ6SW1hZ2UiCitWTV9ERUZBVUxUX0tFUk5FTCA/Pz0gIiR7S0VSTkVMX0lNQUdFVFlQRX0iCiAKIHBvcHVsYXRlX2tlcm5lbCgpIHsKIAlkZXN0PSQxCiAJaW5zdGFsbCAtZCAkZGVzdAogCiAJIyBJbnN0YWxsIGJ6SW1hZ2UsIGluaXRyZCwgYW5kIHJvb3Rmcy5pbWcgaW4gREVTVCBmb3IgYWxsIGxvYWRlcnMgdG8gdXNlLgotCWlmIFsgLWUgJHtERVBMT1lfRElSX0lNQUdFfS8ke0tFUk5FTF9JTUFHRVRZUEV9IF07IHRoZW4KLQkJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtLRVJORUxfSU1BR0VUWVBFfSAkZGVzdC92bWxpbnV6CisJYmJub3RlICJUcnlpbmcgdG8gaW5zdGFsbCAke0RFUExPWV9ESVJfSU1BR0V9LyR7Vk1fREVGQVVMVF9LRVJORUx9IGFzICRkZXN0L3ZtbGludXoiCisJaWYgWyAtZSAke0RFUExPWV9ESVJfSU1BR0V9LyR7Vk1fREVGQVVMVF9LRVJORUx9IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtWTV9ERUZBVUxUX0tFUk5FTH0gJGRlc3Qvdm1saW51egorCWVsc2UKKwkJYmJ3YXJuICIke0RFUExPWV9ESVJfSU1BR0V9LyR7Vk1fREVGQVVMVF9LRVJORUx9IGRvZXNuJ3QgZXhpc3QiCiAJZmkKIAogCSMgaW5pdHJkIGlzIG1hZGUgb2YgY29uY2F0ZW5hdGlvbiBvZiBtdWx0aXBsZSBmaWxlc3lzdGVtIGltYWdlcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWV0YWRhdGFfc2NtLmJiY2xhc3MKaW5kZXggMGY3ZjQyMy4uMmU2ZmFjMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21ldGFkYXRhX3NjbS5iYmNsYXNzCkBAIC00LDggKzQsNyBAQAogZGVmIGJhc2VfZGV0ZWN0X3JldmlzaW9uKGQpOgogICAgIHBhdGggPSBiYXNlX2dldF9zY21iYXNlcGF0aChkKQogCi0gICAgc2NtcyA9IFtiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24sIFwKLSAgICAgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX3N2bl9yZXZpc2lvbl0KKyAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbl0KIAogICAgIGZvciBzY20gaW4gc2NtczoKICAgICAgICAgcmV2ID0gc2NtKHBhdGgsIGQpCkBAIC0yNyw3ICsyNiw3IEBACiAgICAgcmV0dXJuICI8dW5rbm93bj4iCiAKIGRlZiBiYXNlX2dldF9zY21iYXNlcGF0aChkKToKLSAgICByZXR1cm4gZC5nZXRWYXIoICdDT1JFQkFTRScsIFRydWUpCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihkLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKSwgJ21ldGEnKQogCiBkZWYgYmFzZV9nZXRfbWV0YWRhdGFfbW9ub3RvbmVfYnJhbmNoKHBhdGgsIGQpOgogICAgIG1vbm90b25lX2JyYW5jaCA9ICI8dW5rbm93bj4iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21pcnJvcnMuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCmluZGV4IDllNmQ0ODMuLjExODQ3MDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCkBAIC0yMSwxMyArMjEsMTMgQEAKICR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnRyLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAogJHtHTlVfTUlSUk9SfQlmdHA6Ly9taXJyb3JzLmtlcm5lbC5vcmcvZ251IFxuIFwKICR7S0VSTkVMT1JHX01JUlJPUn0JaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1YiBcbiBcCi1mdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGZ0cDovL2Z0cC5mcmFua2VuLmRlL3B1Yi9jcnlwdC9taXJyb3IvZnRwLmdudXBnLm9yZy9nY3J5cHQvIFxuIFwKLWZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgZnRwOi8vZnRwLnN1cmZuZXQubmwvcHViL3NlY3VyaXR5L2dudXBnLyBcbiBcCi1mdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGh0dHA6Ly9ndWx1cy5VU2hlcmJyb29rZS5jYS9wdWIvYXBwbC9HbnVQRy8gXG4gXAorJHtHTlVQR19NSVJST1J9CWZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0IFxuIFwKKyR7R05VUEdfTUlSUk9SfQlmdHA6Ly9mdHAuZnJhbmtlbi5kZS9wdWIvY3J5cHQvbWlycm9yL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0IFxuIFwKKyR7R05VUEdfTUlSUk9SfQlmdHA6Ly9taXJyb3JzLmRvdHNyYy5vcmcvZ2NyeXB0IFxuIFwKIGZ0cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGZ0cDovL2Z0cC5mdS1iZXJsaW4uZGUvdGV4L0NUQU4gXG4gXAogZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgaHR0cDovL3N1bnNpdGUuc3V0LmFjLmpwL3B1Yi9hcmNoaXZlcy9jdGFuLyBcbiBcCiBmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJjaGl2ZSBodHRwOi8vY3Rhbi51bnN3LmVkdS5hdS8gXG4gXAotZnRwOi8vZnRwLmdudXRscy5vcmcvZ2NyeXB0L2dudXRscyBmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9nbnV0bHMvIFxuIFwKK2Z0cDovL2Z0cC5nbnV0bHMub3JnL2djcnlwdC9nbnV0bHMgJHtHTlVQR19NSVJST1J9IFxuIFwKIGh0dHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy8gaHR0cDovL21pcnJvci5zd2l0Y2guY2gvZnRwL21pcnJvci9pbmZvemlwL3NyYy8gXG4gXAogaHR0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjLyBmdHA6Ly9zdW5zaXRlLmljbS5lZHUucGwvcHViL3VuaXgvYXJjaGl2aW5nL2luZm8temlwL3NyYy8gXG4gXAogZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5jZXJpYXMucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9zeXN1dGlscy9sc29mLyBcbiBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwppbmRleCAwMWM5MzA5Li42OGUzZDM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbW9kdWxlLmJiY2xhc3MKQEAgLTgsNiArOCwxNSBAQAogCiBNT0RVTEVTX0lOU1RBTExfVEFSR0VUID89ICJtb2R1bGVzX2luc3RhbGwiCiAKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSkKKyAgICBleHRyYV9zeW1ib2xzID0gW10KKyAgICBmb3IgZGVwIGluIGRlcGVuZHMuc3BsaXQoKToKKyAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgoImtlcm5lbC1tb2R1bGUtIik6CisgICAgICAgICAgICBleHRyYV9zeW1ib2xzLmFwcGVuZCgiJHtTVEFHSU5HX0lOQ0RJUn0vIiArIGRlcCArICIvTW9kdWxlLnN5bXZlcnMiKQorICAgIGQuc2V0VmFyKCdLQlVJTERfRVhUUkFfU1lNQk9MUycsICIgIi5qb2luKGV4dHJhX3N5bWJvbHMpKQorfQorCiBtb2R1bGVfZG9fY29tcGlsZSgpIHsKIAl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUwogCW9lX3J1bm1ha2UgS0VSTkVMX1BBVEg9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICAgXApAQCAtMTUsNiArMjQsNyBAQAogCQkgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCiAJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKIAkgICAgICAgICAgIE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gXAorCQkgICBLQlVJTERfRVhUUkFfU1lNQk9MUz0iJHtLQlVJTERfRVhUUkFfU1lNQk9MU30iIFwKIAkJICAgJHtNQUtFX1RBUkdFVFN9CiB9CiAKQEAgLTI0LDYgKzM0LDExIEBACiAJICAgICAgICAgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCiAJICAgICAgICAgICBPPSR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IFwKIAkgICAgICAgICAgICR7TU9EVUxFU19JTlNUQUxMX1RBUkdFVH0KKworCWluc3RhbGwgLWQgLW0wNzU1ICR7RH0ke2luY2x1ZGVkaXJ9LyR7QlBOfQorCWNwIC1hIC0tbm8tcHJlc2VydmU9b3duZXJzaGlwICR7Qn0vTW9kdWxlLnN5bXZlcnMgJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59CisJIyBpdCBkb2Vzbid0IGFjdHVhbGx5IHNlZW0gdG8gbWF0dGVyIHdoaWNoIHBhdGggaXMgc3BlY2lmaWVkIGhlcmUKKwlzZWQgLWUgJ3M6JHtCfS86OmcnIC1pICR7RH0ke2luY2x1ZGVkaXJ9LyR7QlBOfS9Nb2R1bGUuc3ltdmVycwogfQogCiBFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9nbG9iYWwuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MKaW5kZXggNjdkYzcyYi4uMTFhZTI2OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9nbG9iYWwuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2dsb2JhbC5iYmNsYXNzCkBAIC03Miw2ICs3Miw3IEBACiAgICAgICAgICAgICBwa2cgPSBwa2cucmVwbGFjZSgidmlydHVhbC8iLCAiIikKICAgICAgICAgICAgIHZpcnQgPSAidmlydHVhbC8iCiAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgbmV3dmFsID0gTm9uZQogICAgICAgICAgICAgaWYgcGtnICE9ICJrZXJuZWwiOgogICAgICAgICAgICAgICAgIG5ld3ZhbCA9IHAgKyAiLSIgKyB2YWwKIApAQCAtODYsNyArODcsNyBAQAogCiAgICAgICAgICAgICAjIGltcGxlbWVudCBhbHRlcm5hdGl2ZSBtdWx0aWxpYiBuYW1lCiAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCgiUFJFRkVSUkVEX1BST1ZJREVSXyIgKyB2aXJ0ICsgcCArICItIiArIHBrZykKLSAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpIGFuZCBuZXd2YWwgIT0gTm9uZToKICAgICAgICAgICAgICAgICBkLnNldFZhcihuZXduYW1lLCBsb2NhbGRhdGEuZXhwYW5kKG5ld3ZhbCkpCiAgICAgICAgICMgQXZvaWQgZnV0dXJlIHZhcmlhYmxlIGtleSBleHBhbnNpb24KICAgICAgICAgcHJvdmV4cCA9IGQuZXhwYW5kKHByb3YpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9oZWFkZXIuYmJjbGFzcwppbmRleCA1ZWUwYTJkLi4zMDRjMjhlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfaGVhZGVyLmJiY2xhc3MKQEAgLTUyLDMgKzUyLDggQEAKIG9lX211bHRpbGliX2hlYWRlcl9jbGFzcy1uYXRpdmUgKCkgewogCXJldHVybgogfQorCisjIE5vciBkbyB3ZSBuZWVkIG11bHRpbGliIGhlYWRlcnMgZm9yIG5hdGl2ZXNkayBidWlsZHMuCitvZV9tdWx0aWxpYl9oZWFkZXJfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwlyZXR1cm4KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZS5iYmNsYXNzCmluZGV4IGY2N2VmMDAuLjE0M2Y4YTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwpAQCAtODcsOCArODcsNyBAQAogCiBiYXNlbGliID0gImxpYiIKIAotIyBMaWJ0b29sJ3MgZGVmYXVsdCBwYXRocyBhcmUgY29ycmVjdCBmb3IgdGhlIG5hdGl2ZSBtYWNoaW5lCi1sdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1t1bmV4cG9ydF0gPSAiMSIKK2V4cG9ydCBsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyA9ICIke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0gL2xpYiAvbGliNjQgL3Vzci9saWIgL3Vzci9saWI2NCIKIAogTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPz0gIiIKIGJpbmRpciAuPSAiJHtOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWH0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZXNkay5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcwppbmRleCBmNzRkYTYyLi5hNzgyNTdjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZXNkay5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlc2RrLmJiY2xhc3MKQEAgLTEwLDYgKzEwLDggQEAKIENMQVNTT1ZFUlJJREUgPSAiY2xhc3MtbmF0aXZlc2RrIgogTUFDSElORU9WRVJSSURFUyA9ICIiCiAKK01VTFRJTElCUyA9ICIiCisKICMKICMgVXBkYXRlIFBBQ0tBR0VfQVJDSCBhbmQgUEFDS0FHRV9BUkNIUwogIwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ub3BhY2thZ2VzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25vcGFja2FnZXMuYmJjbGFzcwppbmRleCAwYzI3NjFiLi41NTlmNTA3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25vcGFja2FnZXMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25vcGFja2FnZXMuYmJjbGFzcwpAQCAtNCwzICs0LDkgQEAKIGRlbHRhc2sgZG9fcGFja2FnZV93cml0ZV9kZWIKIGRlbHRhc2sgZG9fcGFja2FnZV9xYQogZGVsdGFzayBkb19wYWNrYWdlZGF0YQorZGVsdGFzayBkb19wYWNrYWdlX3NldHNjZW5lCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfcnBtX3NldHNjZW5lCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrX3NldHNjZW5lCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfZGViX3NldHNjZW5lCitkZWx0YXNrIGRvX3BhY2thZ2VfcWFfc2V0c2NlbmUKK2RlbHRhc2sgZG9fcGFja2FnZWRhdGFfc2V0c2NlbmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbnBtLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25wbS5iYmNsYXNzCmluZGV4IDk4NDNlODcuLmZjZTRjMTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbnBtLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ucG0uYmJjbGFzcwpAQCAtMSw5ICsxLDI1IEBACiBERVBFTkRTX3ByZXBlbmQgPSAibm9kZWpzLW5hdGl2ZSAiCitSREVQRU5EU18ke1BOfV9wcmVwZW5kID0gIm5vZGVqcyAiCiBTID0gIiR7V09SS0RJUn0vbnBtcGtnIgogCiBOUE1fSU5TVEFMTERJUiA9ICIke0R9JHtsaWJkaXJ9L25vZGVfbW9kdWxlcy8ke1BOfSIKIAorIyBmdW5jdGlvbiBtYXBzIGFyY2ggbmFtZXMgdG8gbnBtIGFyY2ggbmFtZXMKK2RlZiBucG1fb2VfYXJjaF9tYXAodGFyZ2V0X2FyY2gsIGQpOgorICAgIGltcG9ydCByZQorICAgIGlmICAgcmUubWF0Y2goJ3AocGN8b3dlcnBjKSh8NjQpJywgdGFyZ2V0X2FyY2gpOiByZXR1cm4gJ3BwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JCcsIHRhcmdldF9hcmNoKTogcmV0dXJuICdpYTMyJworICAgIGVsaWYgcmUubWF0Y2goJ3g4Nl82NCQnLCB0YXJnZXRfYXJjaCk6IHJldHVybiAneDY0JworICAgIGVsaWYgcmUubWF0Y2goJ2FybTY0JCcsIHRhcmdldF9hcmNoKTogcmV0dXJuICdhcm0nCisgICAgcmV0dXJuIHRhcmdldF9hcmNoCisKK05QTV9BUkNIID89ICIke0BucG1fb2VfYXJjaF9tYXAoZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKwogbnBtX2RvX2NvbXBpbGUoKSB7CisJIyBDb3B5IGluIGFueSBhZGRpdGlvbmFsbHkgZmV0Y2hlZCBtb2R1bGVzCisJaWYgWyAtZCAke1dPUktESVJ9L25vZGVfbW9kdWxlcyBdIDsgdGhlbgorCQljcCAtYSAke1dPUktESVJ9L25vZGVfbW9kdWxlcyAke1N9LworCWZpCiAJIyBjaGFuZ2luZyB0aGUgaG9tZSBkaXJlY3RvcnkgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0aGUgLm5wbXJjIHdpbGwKIAkjIGJlIGNyZWF0ZWQgaW4gdGhpcyBkaXJlY3RvcnkKIAlleHBvcnQgSE9NRT0ke1dPUktESVJ9CkBAIC0xMiw3ICsyOCw3IEBACiAJIyBjbGVhciBjYWNoZSBiZWZvcmUgZXZlcnkgYnVpbGQKIAlucG0gY2FjaGUgY2xlYXIKIAkjIEluc3RhbGwgcGtnIGludG8gJHtTfSB3aXRob3V0IGdvaW5nIHRvIHRoZSByZWdpc3RyeQotCW5wbSAtLWFyY2g9JHtUQVJHRVRfQVJDSH0gLS1wcm9kdWN0aW9uIC0tbm8tcmVnaXN0cnkgaW5zdGFsbAorCW5wbSAtLWFyY2g9JHtOUE1fQVJDSH0gLS10YXJnZXRfYXJjaD0ke05QTV9BUkNIfSAtLXByb2R1Y3Rpb24gLS1uby1yZWdpc3RyeSBpbnN0YWxsCiB9CiAKIG5wbV9kb19pbnN0YWxsKCkgewpAQCAtMzUsMTAgKzUxLDEwIEBACiAgICAgICAgIGlmIHBkYXRhOgogICAgICAgICAgICAgdmVyc2lvbiA9IHBkYXRhLmdldCgndmVyc2lvbicsIE5vbmUpCiAgICAgICAgICAgICBpZiB2ZXJzaW9uOgotICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdQS0dWXyVzJyAlIGV4cGFuZGVkX3BrZ25hbWUsIHZlcnNpb24uZW5jb2RlKCJ1dGY4IikpCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR1ZfJXMnICUgZXhwYW5kZWRfcGtnbmFtZSwgdmVyc2lvbikKICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gcGRhdGEuZ2V0KCdkZXNjcmlwdGlvbicsIE5vbmUpCiAgICAgICAgICAgICBpZiBkZXNjcmlwdGlvbjoKLSAgICAgICAgICAgICAgICBkLnNldFZhcignU1VNTUFSWV8lcycgJSBleHBhbmRlZF9wa2duYW1lLCBkZXNjcmlwdGlvbi5yZXBsYWNlKHUiXHUyMDE4IiwgIiciKS5yZXBsYWNlKHUiXHUyMDE5IiwgIiciKS5lbmNvZGUoInV0ZjgiKSkKKyAgICAgICAgICAgICAgICBkLnNldFZhcignU1VNTUFSWV8lcycgJSBleHBhbmRlZF9wa2duYW1lLCBkZXNjcmlwdGlvbi5yZXBsYWNlKHUiXHUyMDE4IiwgIiciKS5yZXBsYWNlKHUiXHUyMDE5IiwgIiciKSkKICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSksICcgJXMnICUgJyAnLmpvaW4ocGtnbmFtZXMpLnJlcGxhY2UoJ18nLCAnLScpKQogfQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL29lbGludC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9vZWxpbnQuYmJjbGFzcwppbmRleCAxYjA1MWNhLi5jNGZlYmMyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL29lbGludC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIGRlZiBmaW5kS2V5KHBhdGgsIGtleSk6CiAgICAgICAgIHJldCA9IFRydWUKLSAgICAgICAgZiA9IGZpbGUoJyVzJyAlIHBhdGgsIG1vZGUgPSAncicpCisgICAgICAgIGYgPSBvcGVuKCclcycgJSBwYXRoLCBtb2RlID0gJ3InKQogICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCiAgICAgICAgIHdoaWxlIGxpbmU6CiAgICAgICAgICAgICBpZiBsaW5lLmZpbmQoa2V5KSAhPSAtMToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MKaW5kZXggNzZiOWY4Ni4uYTZmMGE3YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MKQEAgLTYzLDcgKzYzLDcgQEAKICAgICBkZWYgZml4dXRmKG0pOgogICAgICAgICBjcCA9IG0uZ3JvdXAoMSkKICAgICAgICAgaWYgY3A6Ci0gICAgICAgICAgICByZXR1cm4gKCdcdSVzJyAlIGNwKS5kZWNvZGUoJ3VuaWNvZGVfZXNjYXBlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICByZXR1cm4gKCdcXHUlcycgJSBjcCkuZW5jb2RlKCdsYXRpbi0xJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCiAKICAgICAjIEhhbmRsZSB1bmljb2RlIGNvZGVwb2ludHMgZW5jb2RlZCBhcyA8VTAxMjM+LCBhcyBpbiBnbGliYyBsb2NhbGUgZmlsZXMuCiAgICAgcyA9IHJlLnN1YignPFUoWzAtOUEtRmEtZl17MSw0fSk+JywgZml4dXRmLCBzKQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKIAogICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQotICAgIHNwbGl0X3BhY2thZ2VzID0gW10KKyAgICBzcGxpdF9wYWNrYWdlcyA9IHNldCgpCiAKICAgICBpZiBwb3N0aW5zdDoKICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nICsgcG9zdGluc3QgKyAnXG4nCkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIG9uID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKICAgICAgICAgcGtnID0gb3V0cHV0X3BhdHRlcm4gJSBvbgotICAgICAgICBzcGxpdF9wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBzcGxpdF9wYWNrYWdlcy5hZGQocGtnKQogICAgICAgICBpZiBub3QgcGtnIGluIHBhY2thZ2VzOgogICAgICAgICAgICAgaWYgcHJlcGVuZDoKICAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IFtwa2ddICsgcGFja2FnZXMKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgICAgICAgICAgaG9vayhmLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBtLmdyb3VwKDEpKQogCiAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZXMpKQotICAgIHJldHVybiBzcGxpdF9wYWNrYWdlcworICAgIHJldHVybiBsaXN0KHNwbGl0X3BhY2thZ2VzKQogCiBQQUNLQUdFX0RFUEVORFMgKz0gImZpbGUtbmF0aXZlIgogCkBAIC0yNTksMTQgKzI1OSwzMCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGZpbGVzLmFwcGVuZChmKQogCi0gICAgZm9yIGYgaW4gZmlsZXM6CisgICAgc3ltbGlua19wYXRocyA9IFtdCisgICAgZm9yIGluZCwgZiBpbiBlbnVtZXJhdGUoZmlsZXMpOgorICAgICAgICAjIEhhbmRsZSBkaXJlY3Rvcnkgc3ltbGlua3MuIFRydW5jYXRlIHBhdGggdG8gdGhlIGxvd2VzdCBsZXZlbCBzeW1saW5rCisgICAgICAgIHBhcmVudCA9ICcnCisgICAgICAgIGZvciBkaXJuYW1lIGluIGYuc3BsaXQoJy8nKVs6LTFdOgorICAgICAgICAgICAgcGFyZW50ID0gb3MucGF0aC5qb2luKHBhcmVudCwgZGlybmFtZSkKKyAgICAgICAgICAgIGlmIGRpcm5hbWUgPT0gJy4nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBjcGF0aC5pc2xpbmsocGFyZW50KToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCJGSUxFUyBjb250YWlucyBmaWxlICclcycgd2hpY2ggcmVzaWRlcyB1bmRlciBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3Rvcnkgc3ltbGluay4gUGxlYXNlIGZpeCB0aGUgcmVjaXBlIGFuZCB1c2UgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZWFsIHBhdGggZm9yIHRoZSBmaWxlLiIgJSBmWzE6XSkKKyAgICAgICAgICAgICAgICBzeW1saW5rX3BhdGhzLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGZpbGVzW2luZF0gPSBwYXJlbnQKKyAgICAgICAgICAgICAgICBmID0gcGFyZW50CisgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICBpZiBub3QgY3BhdGguaXNsaW5rKGYpOgogICAgICAgICAgICAgaWYgY3BhdGguaXNkaXIoZik6CiAgICAgICAgICAgICAgICAgbmV3ZmlsZXMgPSBbIG9zLnBhdGguam9pbihmLHgpIGZvciB4IGluIG9zLmxpc3RkaXIoZikgXQogICAgICAgICAgICAgICAgIGlmIG5ld2ZpbGVzOgogICAgICAgICAgICAgICAgICAgICBmaWxlcyArPSBuZXdmaWxlcwogCi0gICAgcmV0dXJuIGZpbGVzCisgICAgcmV0dXJuIGZpbGVzLCBzeW1saW5rX3BhdGhzCiAKICMgQ2FsbGVkIGluIHBhY2thZ2VfPHJwbSxpcGssZGViPi5iYmNsYXNzIHRvIGdldCB0aGUgY29ycmVjdCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMKIGRlZiBnZXRfY29uZmZpbGVzKHBrZywgZCk6CkBAIC0yODEsNyArMjk3LDcgQEAKICAgICBpZiBjb25mZmlsZXMgPT0gTm9uZToKICAgICAgICAgY29uZmZpbGVzID0gIiIKICAgICBjb25mZmlsZXMgPSBjb25mZmlsZXMuc3BsaXQoKQotICAgIGNvbmZfb3JpZ19saXN0ID0gZmlsZXNfZnJvbV9maWxldmFycyhjb25mZmlsZXMpCisgICAgY29uZl9vcmlnX2xpc3QgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKGNvbmZmaWxlcylbMF0KIAogICAgICMgUmVtb3ZlIGxpbmtzIGFuZCBkaXJlY3RvcmllcyBmcm9tIGNvbmZfb3JpZ19saXN0IHRvIGdldCBjb25mX2xpc3Qgd2hpY2ggb25seSBjb250YWlucyBub3JtYWwgZmlsZXMKICAgICBjb25mX2xpc3QgPSBbXQpAQCAtODQxLDYgKzg1Nyw5IEBACiAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCiAKKyAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorICAgIG9zLmNoZGlyKGR2YXIpCisKICAgICAjIFdlIGRlZmF1bHQgdG8gJy5kZWJ1Zycgc3R5bGUKICAgICBpZiBkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy1maWxlLWRpcmVjdG9yeSc6CiAgICAgICAgICMgU2luZ2xlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IHN0eWxlIGRlYnVnIGluZm8KQEAgLTg2NCw4ICs4ODMsNiBAQAogICAgIHNvdXJjZWZpbGUgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9kZWJ1Z3NvdXJjZXMubGlzdCIpCiAgICAgYmIudXRpbHMucmVtb3ZlKHNvdXJjZWZpbGUpCiAKLSAgICBvcy5jaGRpcihkdmFyKQotCiAgICAgIyBSZXR1cm4gdHlwZSAoYml0cyk6CiAgICAgIyAwIC0gbm90IGVsZgogICAgICMgMSAtIEVMRgpAQCAtOTAzLDcgKzkyMCw4IEBACiAgICAgaW5vZGVzID0ge30KICAgICBsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSkKICAgICBiYXNlbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGR2YXIgKyBvcy5zZXAgKyBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSkKLSAgICBpZiAoZC5nZXRWYXIoJ0lOSElCSVRfUEFDS0FHRV9TVFJJUCcsIFRydWUpICE9ICcxJyk6CisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfU1RSSVAnLCBUcnVlKSAhPSAnMScgb3IgXAorICAgICAgICAgICAgZC5nZXRWYXIoJ0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCcsIFRydWUpICE9ICcxJyk6CiAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKGR2YXIpOgogICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQpAQCAtMTA1MSw2ICsxMDY5LDcgQEAKICAgICAjCiAgICAgIyBFbmQgb2Ygc3RyaXAKICAgICAjCisgICAgb3MuY2hkaXIob2xkY3dkKQogfQogCiBweXRob24gcG9wdWxhdGVfcGFja2FnZXMgKCkgewpAQCAtMTEwOCw3ICsxMTI3LDcgQEAKICAgICAgICAgICAgIGZpbGVzdmFyLnJlcGxhY2UoIi8vIiwgIi8iKQogCiAgICAgICAgIG9yaWdmaWxlcyA9IGZpbGVzdmFyLnNwbGl0KCkKLSAgICAgICAgZmlsZXMgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKG9yaWdmaWxlcykKKyAgICAgICAgZmlsZXMsIHN5bWxpbmtfcGF0aHMgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKG9yaWdmaWxlcykKIAogICAgICAgICBpZiBhdXRvZGVidWcgYW5kIHBrZy5lbmRzd2l0aCgiLWRiZyIpOgogICAgICAgICAgICAgZmlsZXMuZXh0ZW5kKGRlYnVnKQpAQCAtMTE0OSwxMyArMTE2OCwxOSBAQAogICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQogICAgICAgICAgICAgaWYgbm90IGNwYXRoLmlzbGluayhmaWxlKToKICAgICAgICAgICAgICAgICBvcy5saW5rKGZpbGUsIGZwYXRoKQotICAgICAgICAgICAgICAgIGZzdGF0ID0gY3BhdGguc3RhdChmaWxlKQotICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBmc3RhdC5zdF9tb2RlKQotICAgICAgICAgICAgICAgIG9zLmNob3duKGZwYXRoLCBmc3RhdC5zdF91aWQsIGZzdGF0LnN0X2dpZCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmV0ID0gYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZnBhdGgpCiAgICAgICAgICAgICBpZiByZXQgaXMgRmFsc2Ugb3IgcmV0ID09IDA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiRmlsZSBwb3B1bGF0aW9uIGZhaWxlZCIpCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZpbGUgcG9wdWxhdGlvbiBmYWlsZWQiKQorCisgICAgICAgICMgQ2hlY2sgaWYgc3ltbGluayBwYXRocyBleGlzdAorICAgICAgICBmb3IgZmlsZSBpbiBzeW1saW5rX3BhdGhzOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihyb290LGZpbGUpKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmlsZSAnJXMnIGNhbm5vdCBiZSBwYWNrYWdlZCBpbnRvICclcycgYmVjYXVzZSBpdHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZSBkb2VzIG5vdCBleGlzdC4gT25lIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXRzIHBhcmVudCBkaXJlY3RvcmllcyBpcyBhIHN5bWxpbmsgd2hvc2UgdGFyZ2V0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0b3J5IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZS4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgcGtnKSkKIAogICAgIG9zLnVtYXNrKG9sZHVtYXNrKQogICAgIG9zLmNoZGlyKHdvcmtkaXIpCkBAIC0xMjU4LDggKzEyODMsOCBAQAogICAgIGRlZiB3cml0ZV9pZl9leGlzdHMoZiwgcGtnLCB2YXIpOgogICAgICAgICBkZWYgZW5jb2RlKHN0cik6CiAgICAgICAgICAgICBpbXBvcnQgY29kZWNzCi0gICAgICAgICAgICBjID0gY29kZWNzLmdldGVuY29kZXIoInN0cmluZ19lc2NhcGUiKQotICAgICAgICAgICAgcmV0dXJuIGMoc3RyKVswXQorICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXRlbmNvZGVyKCJ1bmljb2RlX2VzY2FwZSIpCisgICAgICAgICAgICByZXR1cm4gYyhzdHIpWzBdLmRlY29kZSgibGF0aW4xIikKIAogICAgICAgICB2YWwgPSBkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkKICAgICAgICAgaWYgdmFsOgpAQCAtMTQ2NSw3ICsxNDkwLDcgQEAKICAgICBpbXBvcnQgcmUsIHBpcGVzCiAgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCiAKLSAgICBleGNsdWRlX3NobGlicyA9IGQuZ2V0VmFyKCdFWENMVURFX0ZST01fU0hMSUJTJywgMCkKKyAgICBleGNsdWRlX3NobGlicyA9IGQuZ2V0VmFyKCdFWENMVURFX0ZST01fU0hMSUJTJywgRmFsc2UpCiAgICAgaWYgZXhjbHVkZV9zaGxpYnM6CiAgICAgICAgIGJiLm5vdGUoIm5vdCBnZW5lcmF0aW5nIHNobGlicyIpCiAgICAgICAgIHJldHVybgpAQCAtMTUwMyw3ICsxNTI4LDcgQEAKICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrUlBBVEhccysoW15cc10qKSIsIGwpCiAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgIHJwYXRocyA9IG0uZ3JvdXAoMSkucmVwbGFjZSgiJE9SSUdJTiIsIGxkaXIpLnNwbGl0KCI6IikKLSAgICAgICAgICAgICAgICBycGF0aCA9IG1hcChvcy5wYXRoLm5vcm1wYXRoLCBycGF0aHMpCisgICAgICAgICAgICAgICAgcnBhdGggPSBsaXN0KG1hcChvcy5wYXRoLm5vcm1wYXRoLCBycGF0aHMpKQogICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrTkVFREVEXHMrKFteXHNdKikiLCBsKQogICAgICAgICAgICAgaWYgbToKQEAgLTE1NTQsMTkgKzE1NzksMTkgQEAKICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgnLmR5bGliJykgb3IgZmlsZS5lbmRzd2l0aCgnLnNvJyk6CiAgICAgICAgICAgICBycGF0aCA9IFtdCiAgICAgICAgICAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1vdG9vbCIpLCAnLWwnLCBmaWxlXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQotICAgICAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LCBwcm9jZXNzIHN0ZG91dCBmb3IgcmVzdWx0cwogICAgICAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6Ci0gICAgICAgICAgICAgICAgZm9yIGwgaW4gZXJyLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIGZvciBsIGluIG91dC5zcGxpdCgiXG4iKToKICAgICAgICAgICAgICAgICAgICAgbCA9IGwuc3RyaXAoKQogICAgICAgICAgICAgICAgICAgICBpZiBsLnN0YXJ0c3dpdGgoJ3BhdGggJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBycGF0aC5hcHBlbmQobC5zcGxpdCgpWzFdKQogCiAgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfW90b29sIiksICctTCcsIGZpbGVdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCi0gICAgICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIElmIHJldHVybmVkIHN1Y2Nlc3NmdWxseSwgcHJvY2VzcyBzdGRvdXQgZm9yIHJlc3VsdHMKICAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6Ci0gICAgICAgICAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBmb3IgbCBpbiBvdXQuc3BsaXQoIlxuIik6CiAgICAgICAgICAgICAgICAgbCA9IGwuc3RyaXAoKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsIG9yIGwuZW5kc3dpdGgoIjoiKToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTE2NzMsNyArMTY5OCw3IEBACiAgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgJyVzOiBEZXBlbmRlbmN5ICVzIGNvdmVyZWQgYnkgUFJJVkFURV9MSUJTJyAlIChwa2csIG5bMF0pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBuWzBdIGluIHNobGliX3Byb3ZpZGVyLmtleXMoKToKLSAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcl9wYXRoID0gbGlzdCgpCisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJfcGF0aCA9IFtdCiAgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2hsaWJfcHJvdmlkZXJbblswXV0ua2V5cygpOgogICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcl9wYXRoLmFwcGVuZChrKQogICAgICAgICAgICAgICAgIG1hdGNoID0gTm9uZQpAQCAtMjEyOCw0ICsyMTUzLDMgQEAKICAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSREVQRU5EUyIsIHBrZywgZCkKICAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSUkVDT01NRU5EUyIsIHBrZywgZCkKICAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSU1VHR0VTVFMiLCBwa2csIGQpCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9kZWIuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9kZWIuYmJjbGFzcwppbmRleCBlMWQwNWE3Li5mYjYwMzRjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzCkBAIC01Miw2ICs1Miw5IEBACiAgICAgaW1wb3J0IHJlLCBjb3B5CiAgICAgaW1wb3J0IHRleHR3cmFwCiAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMKKworICAgIG9sZGN3ZCA9IG9zLmdldGN3ZCgpCiAKICAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQogICAgIGlmIG5vdCB3b3JrZGlyOgpAQCAtMTE3LDEzICsxMjAsMTMgQEAKIAogICAgICAgICBjb250cm9sZGlyID0gb3MucGF0aC5qb2luKHJvb3QsICdERUJJQU4nKQogICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY29udHJvbGRpcikKLSAgICAgICAgb3MuY2htb2QoY29udHJvbGRpciwgMDc1NSkKKyAgICAgICAgb3MuY2htb2QoY29udHJvbGRpciwgMG83NTUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKICAgICAgICAgICAgIGN0cmxmaWxlID0gY29kZWNzLm9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb250cm9sJyksICd3JywgJ3V0Zi04JykKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBiYi5mYXRhbCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nIikKIAogICAgICAgICBmaWVsZHMgPSBbXQogICAgICAgICBwZSA9IGQuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkKQEAgLTE3Myw3ICsxNzYsNyBAQAogICAgICAgICAgICAgICAgICMgU3BlY2lhbCBiZWhhdmlvciBmb3IgZGVzY3JpcHRpb24uLi4KICAgICAgICAgICAgICAgICBpZiAnREVTQ1JJUFRJT04nIGluIGZzOgogICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgotICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJ0Rlc2NyaXB0aW9uOiAlc1xuJyAlIHVuaWNvZGUoc3VtbWFyeSwndXRmLTgnKSkKKyAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCdEZXNjcmlwdGlvbjogJXNcbicgJSBzdW1tYXJ5KQogICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgogICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXh0d3JhcC5kZWRlbnQoZGVzY3JpcHRpb24pLnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICAgIGlmICdcXG4nIGluIGRlc2NyaXB0aW9uOgpAQCAtMTgyLDI5ICsxODUsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBsaW1pdCB0aGUgd2lkdGggd2hlbiBtYW51YWxseSBpbmRlbnQsIGJ1dCB3ZSBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5lZWQgdGhlIHRleHR3cmFwLmZpbGwoKSB0byBzZXQgdGhlIGluaXRpYWxfaW5kZW50IGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnNlcXVlbnRfaW5kZW50LCBzbyBzZXQgYSBsYXJnZSB3aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB1bmljb2RlKHRleHR3cmFwLmZpbGwodCwgd2lkdGg9MTAwMDAwLCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJyksJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwodCwgd2lkdGg9MTAwMDAwLCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJykpCiAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICMgQXV0byBpbmRlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB1bmljb2RlKHRleHR3cmFwLmZpbGwoZGVzY3JpcHRpb24uc3RyaXAoKSwgd2lkdGg9NzQsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSwndXRmLTgnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB0ZXh0d3JhcC5maWxsKGRlc2NyaXB0aW9uLnN0cmlwKCksIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJykpCiAKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUodW5pY29kZShjICUgdHVwbGUocHVsbERhdGEoZnMsIGxvY2FsZGF0YSkpLCd1dGYtOCcpKQorICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoYyAlIHR1cGxlKHB1bGxEYXRhKGZzLCBsb2NhbGRhdGEpKSkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCiAgICAgICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJNaXNzaW5nIGZpZWxkIGZvciBkZWIgZ2VuZXJhdGlvbjogJXMiICUgdmFsdWUpCi0gICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6Ci0gICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQotICAgICAgICAgICAgY3RybGZpbGUuY2xvc2UoKQotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiTm9uIFVURi04IGNoYXJhY3RlcnMgZm91bmQgaW4gb25lIG9mIHRoZSBmaWVsZHMiKQorICAgICAgICAgICAgYmIuZmF0YWwoIk1pc3NpbmcgZmllbGQgZm9yIGRlYiBnZW5lcmF0aW9uOiAlcyIgJSB2YWx1ZSkKIAogICAgICAgICAjIG1vcmUgZmllbGRzCiAKICAgICAgICAgY3VzdG9tX2ZpZWxkc19jaHVuayA9IGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEoImRlYiIsIGxvY2FsZGF0YSkKICAgICAgICAgaWYgY3VzdG9tX2ZpZWxkc19jaHVuayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKHVuaWNvZGUoY3VzdG9tX2ZpZWxkc19jaHVuaykpCisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZShjdXN0b21fZmllbGRzX2NodW5rKQogICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlxuIikKIAogICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKQEAgLTIzNCw3ICsyMzMsNyBAQAogCiAgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJERVBFTkRTIiwgVHJ1ZSkgb3IgIiIpCiAgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmRlcGVuZHMpCi0gICAgICAgIGZvciBkZXAgaW4gcmRlcGVuZHMua2V5cygpOgorICAgICAgICBmb3IgZGVwIGluIGxpc3QocmRlcGVuZHMua2V5cygpKToKICAgICAgICAgICAgICAgICBpZiBkZXAgPT0gcGtnOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJkZXBlbmRzW2RlcF0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0yNDIsMzAgKzI0MSwzMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJkZXBlbmRzW2RlcF0KICAgICAgICAgcnJlY29tbWVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSBvciAiIikKICAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVjb21tZW5kcykKLSAgICAgICAgZm9yIGRlcCBpbiBycmVjb21tZW5kcy5rZXlzKCk6CisgICAgICAgIGZvciBkZXAgaW4gbGlzdChycmVjb21tZW5kcy5rZXlzKCkpOgogICAgICAgICAgICAgICAgIGlmICcqJyBpbiBkZXA6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcnJlY29tbWVuZHNbZGVwXQogICAgICAgICByc3VnZ2VzdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlNVR0dFU1RTIiwgVHJ1ZSkgb3IgIiIpCiAgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnN1Z2dlc3RzKQogICAgICAgICAjIERlbGliZXJhdGVseSBkcm9wIHZlcnNpb24gaW5mb3JtYXRpb24gaGVyZSwgbm90IHdhbnRlZC9zdXBwb3J0ZWQgYnkgZGViCiAgICAgICAgIHJwcm92aWRlcyA9IGRpY3QuZnJvbWtleXMoYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJQUk9WSURFUyIsIFRydWUpIG9yICIiKSwgW10pCisgICAgICAgIHJwcm92aWRlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KHNvcnRlZChycHJvdmlkZXMuaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzBdKSkKICAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycHJvdmlkZXMpCiAgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVQTEFDRVMiLCBUcnVlKSBvciAiIikKICAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVwbGFjZXMpCiAgICAgICAgIHJjb25mbGljdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkNPTkZMSUNUUyIsIFRydWUpIG9yICIiKQogICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJjb25mbGljdHMpCiAgICAgICAgIGlmIHJkZXBlbmRzOgotICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkRlcGVuZHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMpKSkKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJEZXBlbmRzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcykpCiAgICAgICAgIGlmIHJzdWdnZXN0czoKLSAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJTdWdnZXN0czogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhyc3VnZ2VzdHMpKSkKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJTdWdnZXN0czogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnN1Z2dlc3RzKSkKICAgICAgICAgaWYgcnJlY29tbWVuZHM6Ci0gICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVjb21tZW5kczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjb21tZW5kcykpKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlY29tbWVuZHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZWNvbW1lbmRzKSkKICAgICAgICAgaWYgcnByb3ZpZGVzOgotICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlByb3ZpZGVzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcykpKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlByb3ZpZGVzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMpKQogICAgICAgICBpZiBycmVwbGFjZXM6Ci0gICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVwbGFjZXM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnJlcGxhY2VzKSkpCisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVwbGFjZXM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZXBsYWNlcykpCiAgICAgICAgIGlmIHJjb25mbGljdHM6Ci0gICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiQ29uZmxpY3RzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJjb25mbGljdHMpKSkKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJDb25mbGljdHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJjb25mbGljdHMpKQogICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCiAKICAgICAgICAgZm9yIHNjcmlwdCBpbiBbInByZWluc3QiLCAicG9zdGluc3QiLCAicHJlcm0iLCAicG9zdHJtIl06CkBAIC0yNzcsNyArMjc3LDcgQEAKICAgICAgICAgICAgICAgICBzY3JpcHRmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgJ3cnKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKLSAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiAlcyBzY3JpcHQgZmlsZSBmb3Igd3JpdGluZy4iICUgc2NyaXB0KQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJ1bmFibGUgdG8gb3BlbiAlcyBzY3JpcHQgZmlsZSBmb3Igd3JpdGluZyIgJSBzY3JpcHQpCiAKICAgICAgICAgICAgIGlmIHNjcmlwdHZhci5zdGFydHN3aXRoKCIjISIpOgogICAgICAgICAgICAgICAgIHBvcyA9IHNjcmlwdHZhci5maW5kKCJcbiIpICsgMQpAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcltwb3M6XSkKICAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoJ1xuJykKICAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQotICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgMG83NTUpCiAKICAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKICAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKQEAgLTMwMSw3ICszMDEsNyBAQAogICAgICAgICAgICAgICAgIGNvbmZmaWxlcyA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb25mZmlsZXMnKSwgJ3cnKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKLSAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb25mZmlsZXMgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nIikKICAgICAgICAgICAgIGZvciBmIGluIGNvbmZmaWxlc19zdHIuc3BsaXQoKToKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4ocm9vdCwgZikpOgogICAgICAgICAgICAgICAgICAgICBjb25mZmlsZXMud3JpdGUoJyVzXG4nICUgZikKQEAgLTMxMSwxMCArMzExLDExIEBACiAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiUEFUSD1cIiVzXCIgZHBrZy1kZWIgLWIgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiLCBUcnVlKSwgcm9vdCwgcGtnb3V0ZGlyKSwgc2hlbGw9VHJ1ZSkKICAgICAgICAgaWYgcmV0ICE9IDA6CiAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiZHBrZy1kZWIgZXhlY3V0aW9uIGZhaWxlZCIpCisgICAgICAgICAgICBiYi5mYXRhbCgiZHBrZy1kZWIgZXhlY3V0aW9uIGZhaWxlZCIpCiAKICAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICBvcy5jaGRpcihvbGRjd2QpCiB9CiAjIEluZGlyZWN0IHJlZmVyZW5jZXMgdG8gdGhlc2UgdmFycwogZG9fcGFja2FnZV93cml0ZV9kZWJbdmFyZGVwc10gKz0gIlBLR1YgUEtHUiBQS0dWIERFU0NSSVBUSU9OIFNFQ1RJT04gUFJJT1JJVFkgTUFJTlRBSU5FUiBEUEtHX0FSQ0ggUE4gSE9NRVBBR0UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MKaW5kZXggZjFhZDFkNS4uZWIwMDkzMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2lway5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcwpAQCAtMjAsNiArMjAsOSBAQAogICAgIGltcG9ydCByZSwgY29weQogICAgIGltcG9ydCB0ZXh0d3JhcAogICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IGNvbGxlY3Rpb25zCisKKyAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQogCiAgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKICAgICBvdXRkaXIgPSBkLmdldFZhcignUEtHV1JJVEVESVJJUEsnLCBUcnVlKQpAQCAtMTA1LDcgKzEwOCw3IEBACiAgICAgICAgICAgICBjdHJsZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb250cm9sJyksICd3JykKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBiYi5mYXRhbCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nIikKIAogICAgICAgICBmaWVsZHMgPSBbXQogICAgICAgICBwZSA9IGQuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkKQEAgLTE1OSw3ICsxNjIsNyBAQAogICAgICAgICAgICAgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCi0gICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJNaXNzaW5nIGZpZWxkIGZvciBpcGsgZ2VuZXJhdGlvbjogJXMiICUgdmFsdWUpCisgICAgICAgICAgICBiYi5mYXRhbCgiTWlzc2luZyBmaWVsZCBmb3IgaXBrIGdlbmVyYXRpb246ICVzIiAlIHZhbHVlKQogICAgICAgICAjIG1vcmUgZmllbGRzCiAKICAgICAgICAgY3VzdG9tX2ZpZWxkc19jaHVuayA9IGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEoImlwayIsIGxvY2FsZGF0YSkKQEAgLTE5MCw2ICsxOTMsNyBAQAogICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJzdWdnZXN0cykKICAgICAgICAgIyBEZWxpYmVyYXRlbHkgZHJvcCB2ZXJzaW9uIGluZm9ybWF0aW9uIGhlcmUsIG5vdCB3YW50ZWQvc3VwcG9ydGVkIGJ5IGlwawogICAgICAgICBycHJvdmlkZXMgPSBkaWN0LmZyb21rZXlzKGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUFJPVklERVMiLCBUcnVlKSBvciAiIiksIFtdKQorICAgICAgICBycHJvdmlkZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdChzb3J0ZWQocnByb3ZpZGVzLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFswXSkpCiAgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnByb3ZpZGVzKQogICAgICAgICBycmVwbGFjZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFUExBQ0VTIiwgVHJ1ZSkgb3IgIiIpCiAgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlcGxhY2VzKQpAQCAtMjIyLDEwICsyMjYsMTAgQEAKICAgICAgICAgICAgICAgICBzY3JpcHRmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgJ3cnKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKLSAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiAlcyBzY3JpcHQgZmlsZSBmb3Igd3JpdGluZy4iICUgc2NyaXB0KQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJ1bmFibGUgdG8gb3BlbiAlcyBzY3JpcHQgZmlsZSBmb3Igd3JpdGluZyIgJSBzY3JpcHQpCiAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcikKICAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQotICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgMG83NTUpCiAKICAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKICAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKQEAgLTIzMyw3ICsyMzcsNyBAQAogICAgICAgICAgICAgICAgIGNvbmZmaWxlcyA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb25mZmlsZXMnKSwgJ3cnKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKLSAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb25mZmlsZXMgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nIikKICAgICAgICAgICAgIGZvciBmIGluIGNvbmZmaWxlc19zdHIuc3BsaXQoKToKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4ocm9vdCwgZikpOgogICAgICAgICAgICAgICAgICAgICBjb25mZmlsZXMud3JpdGUoJyVzXG4nICUgZikKQEAgLTI0MSwxMCArMjQ1LDEwIEBACiAKICAgICAgICAgb3MuY2hkaXIoYmFzZWRpcikKICAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJQQVRIPVwiJXNcIiAlcyAlcyAlcyIgJSAobG9jYWxkYXRhLmdldFZhcigiUEFUSCIsIFRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJPUEtHQlVJTERDTUQiLDEpLCBwa2csIHBrZ291dGRpciksIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIk9QS0dCVUlMRENNRCIsIFRydWUpLCBwa2csIHBrZ291dGRpciksIHNoZWxsPVRydWUpCiAgICAgICAgIGlmIHJldCAhPSAwOgogICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKLSAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIm9wa2ctYnVpbGQgZXhlY3V0aW9uIGZhaWxlZCIpCisgICAgICAgICAgICBiYi5mYXRhbCgib3BrZy1idWlsZCBleGVjdXRpb24gZmFpbGVkIikKIAogICAgICAgICBpZiBkLmdldFZhcignSVBLX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CiAgICAgICAgICAgICBpcGt2ZXIgPSAiJXMtJXMiICUgKGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSksIGQuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpCkBAIC0yNTQsNiArMjU4LDcgQEAKICAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKIAorICAgIG9zLmNoZGlyKG9sZGN3ZCkKIH0KICMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgogZG9fcGFja2FnZV9pcGtbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9ycG0uYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9ycG0uYmJjbGFzcwppbmRleCA3ZDUyM2ExLi5jNDMxNTQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzCkBAIC01OCwxMiArNTgsMTIgQEAKICAgICB0cnk6CiAgICAgICAgIGRlcGVuZHNmaWxlID0gb3BlbihvdXRkZXBlbmRzLCAndycpCiAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZy4iKQorICAgICAgICBiYi5mYXRhbCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nIikKIAogICAgIGR1bXBfZmlsZXJkZXBzKCdSREVQRU5EUycsIGRlcGVuZHNmaWxlLCBkKQogCiAgICAgZGVwZW5kc2ZpbGUuY2xvc2UoKQotICAgIG9zLmNobW9kKG91dGRlcGVuZHMsIDA3NTUpCisgICAgb3MuY2htb2Qob3V0ZGVwZW5kcywgMG83NTUpCiAKICAgICAjIE9FLWNvcmUgLyBSUE0gUHJvdmlkZXMKICAgICBvdXRwcm92aWRlcyA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5wcm92aWRlcyIKQEAgLTcxLDEyICs3MSwxMiBAQAogICAgIHRyeToKICAgICAgICAgcHJvdmlkZXNmaWxlID0gb3BlbihvdXRwcm92aWRlcywgJ3cnKQogICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgYmIuZmF0YWwoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZyIpCiAKICAgICBkdW1wX2ZpbGVyZGVwcygnUlBST1ZJREVTJywgcHJvdmlkZXNmaWxlLCBkKQogCiAgICAgcHJvdmlkZXNmaWxlLmNsb3NlKCkKLSAgICBvcy5jaG1vZChvdXRwcm92aWRlcywgMDc1NSkKKyAgICBvcy5jaG1vZChvdXRwcm92aWRlcywgMG83NTUpCiAKICAgICByZXR1cm4gKG91dGRlcGVuZHMsIG91dHByb3ZpZGVzKQogCkBAIC02MTcsNyArNjE3LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHNwZWNmaWxlID0gb3BlbihvdXRzcGVjZmlsZSwgJ3cnKQogICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgYmIuZmF0YWwoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZyIpCiAKICAgICAjIFJQTVNQRUNfUFJFQU1CTEUgaXMgYSB3YXkgdG8gYWRkIGFyYml0cmFyeSB0ZXh0IHRvIHRoZSB0b3AKICAgICAjIG9mIHRoZSBnZW5lcmF0ZWQgc3BlYyBmaWxlCkBAIC03MDIsNyArNzAyLDcgQEAKICAgICBwa2dhcmNoID0gZC5leHBhbmQoJyR7UEFDS0FHRV9BUkNIX0VYVEVORH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9JykKICAgICBtYWdpY2ZpbGUgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0vbWlzYy9tYWdpYy5tZ2MnKQogICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2d3cml0ZWRpcikKLSAgICBvcy5jaG1vZChwa2d3cml0ZWRpciwgMDc1NSkKKyAgICBvcy5jaG1vZChwa2d3cml0ZWRpciwgMG83NTUpCiAKICAgICBjbWQgPSBycG1idWlsZAogICAgIGNtZCA9IGNtZCArICIgLS1ub2RlcHMgLS1zaG9ydC1jaXJjdWl0IC0tdGFyZ2V0ICIgKyBwa2dhcmNoICsgIiAtLWJ1aWxkcm9vdCAiICsgcGtnZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzCmluZGV4IDg1NGU2NDUuLmUyMTc4MTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfdGFyLmJiY2xhc3MKQEAgLTQsNiArNCw5IEBACiAKIHB5dGhvbiBkb19wYWNrYWdlX3RhciAoKSB7CiAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIG9sZGN3ZCA9IG9zLmdldGN3ZCgpCisKICAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQogICAgIGlmIG5vdCB3b3JrZGlyOgogICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQpAQCAtNDksNiArNTIsOCBAQAogICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoYXJncyArIFt0YXJmbl0gKyBkbGlzdCkKICAgICAgICAgaWYgcmV0ICE9IDA6CiAgICAgICAgICAgICBiYi5lcnJvcigiQ3JlYXRpb24gb2YgdGFyICVzIGZhaWxlZC4iICUgdGFyZm4pCisKKyAgICBvcy5jaGRpcihvbGRjd2QpCiB9CiAKIHB5dGhvbiAoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VmZWVkLXN0YWJpbGl0eS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZmVlZC1zdGFiaWxpdHkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTAxZGVmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZmVlZC1zdGFiaWxpdHkuYmJjbGFzcwpAQCAtMCwwICsxLDI1MiBAQAorIyBDbGFzcyB0byBhdm9pZCBjb3B5aW5nIHBhY2thZ2VzIGludG8gdGhlIGZlZWQgaWYgdGhleSBoYXZlbid0IG1hdGVyaWFsbHkgY2hhbmdlZAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMpCisjCisjIFRoaXMgY2xhc3MgZWZmZWN0aXZlbHkgaW50ZXJjZXB0cyBwYWNrYWdlcyBhcyB0aGV5IGFyZSB3cml0dGVuIG91dCBieQorIyBkb19wYWNrYWdlX3dyaXRlXyosIGNhdXNpbmcgdGhlbSB0byBiZSB3cml0dGVuIGludG8gYSBkaWZmZXJlbnQKKyMgZGlyZWN0b3J5IHdoZXJlIHdlIGNhbiBjb21wYXJlIHRoZW0gdG8gd2hhdGV2ZXIgb2xkZXIgcGFja2FnZXMgbWlnaHQKKyMgYmUgaW4gdGhlICJyZWFsIiBwYWNrYWdlIGZlZWQgZGlyZWN0b3J5LCBhbmQgYXZvaWQgY29weWluZyB0aGUgbmV3CisjIHBhY2thZ2UgdG8gdGhlIGZlZWQgaWYgaXQgaGFzIG5vdCBtYXRlcmlhbGx5IGNoYW5nZWQuIFRoZSBpZGVhIGlzIHRvCisjIGF2b2lkIHVubmVjZXNzYXJ5IGNodXJuIGluIHRoZSBwYWNrYWdlcyB3aGVuIGRlcGVuZGVuY2llcyB0cmlnZ2VyIHRhc2sKKyMgcmVleGVjdXRpb24gKGFuZCB0aHVzIHJlcGFja2FnaW5nKS4gRW5hYmxpbmcgdGhlIGNsYXNzIGlzIHNpbXBsZToKKyMKKyMgSU5IRVJJVCArPSAicGFja2FnZWZlZWQtc3RhYmlsaXR5IgorIworIyBDYXZlYXRzOgorIyAxKSBMYXRlc3QgUFIgdmFsdWVzIGluIHRoZSBidWlsZCBzeXN0ZW0gbWF5IG5vdCBtYXRjaCB0aG9zZSBpbiBwYWNrYWdlcworIyAgICBzZWVuIG9uIHRoZSB0YXJnZXQgKG5hdHVyYWxseSkKKyMgMikgSWYgeW91IHJlYnVpbGQgZnJvbSBzc3RhdGUgd2l0aG91dCB0aGUgZXhpc3RpbmcgcGFja2FnZSBmZWVkIHByZXNlbnQsCisjICAgIHlvdSB3aWxsIGxvc2UgdGhlICJzdGF0ZSIgb2YgdGhlIHBhY2thZ2UgZmVlZCBpLmUuIHRoZSBwcmVzZXJ2ZWQgb2xkCisjICAgIHBhY2thZ2UgdmVyc2lvbnMuIE5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZCwgYnV0IHdvdWxkIG5lZ2F0ZSB0aGUKKyMgICAgZW50aXJlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcy4KKyMKKyMgTm90ZSB0aGF0IHJ1bm5pbmcgLWMgY2xlYW5hbGwgb24gYSByZWNpcGUgd2lsbCBwdXJwb3NlbHkgZGVsZXRlIHRoZSBvbGQKKyMgcGFja2FnZSBmaWxlcyBzbyB0aGV5IHdpbGwgZGVmaW5pdGVseSBiZSBjb3BpZWQgdGhlIG5leHQgdGltZS4KKworcHl0aG9uKCkgeworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIHJldHVybgorICAgICMgUGFja2FnZSBiYWNrZW5kIGFnbm9zdGljIGludGVyY2VwdAorICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHBhY2thZ2Vfd3JpdGUgdGFzayBpcyBjYWxsZWQgcGFja2FnZV93cml0ZV88cGtndHlwZT4KKyAgICAjIGFuZCB0aGF0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIHdyaXR0ZW4gaXMKKyAgICAjIHBvaW50ZWQgdG8gYnkgdGhlIHZhcmlhYmxlIERFUExPWV9ESVJfPFBLR1RZUEU+CisgICAgZm9yIHBrZ2NsYXNzIGluIChkLmdldFZhcignUEFDS0FHRV9DTEFTU0VTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGlmIHBrZ2NsYXNzLnN0YXJ0c3dpdGgoJ3BhY2thZ2VfJyk6CisgICAgICAgICAgICBwa2d0eXBlID0gcGtnY2xhc3Muc3BsaXQoJ18nLCAxKVsxXQorICAgICAgICAgICAgcGtnd3JpdGVmdW5jID0gJ2RvX3BhY2thZ2Vfd3JpdGVfJXMnICUgcGtndHlwZQorICAgICAgICAgICAgc3N0YXRlX291dHB1dGRpcnMgPSBkLmdldFZhckZsYWcocGtnd3JpdGVmdW5jLCAnc3N0YXRlLW91dHB1dGRpcnMnLCBGYWxzZSkKKyAgICAgICAgICAgIGRlcGxveWRpcnZhciA9ICdERVBMT1lfRElSXyVzJyAlIHBrZ3R5cGUudXBwZXIoKQorICAgICAgICAgICAgZGVwbG95ZGlydmFycmVmID0gJyR7JyArIGRlcGxveWRpcnZhciArICd9JworICAgICAgICAgICAgcGtnY29tcGFyZWZ1bmMgPSAnZG9fcGFja2FnZV9jb21wYXJlXyVzJyAlIHBrZ3R5cGUKKworICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycsICcgJyArIHBrZ2NvbXBhcmVmdW5jKQorCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwb3B1bGF0ZV9zZGtfYmFzZScsIGQpOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ3JlY3JkZXB0YXNrJywgJyAnICsgcGtnY29tcGFyZWZ1bmMpCisKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BvcHVsYXRlX3Nka19leHQnLCBkKToKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BvcHVsYXRlX3Nka19leHQnLCAncmVjcmRlcHRhc2snLCAnICcgKyBwa2djb21wYXJlZnVuYykKKworICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idWlsZCcsICdyZWNyZGVwdGFzaycsICcgJyArIHBrZ2NvbXBhcmVmdW5jKQorCisgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcocGtnd3JpdGVmdW5jLCAnbm9leGVjJywgVHJ1ZSkgb3Igbm90IGQuZ2V0VmFyRmxhZyhwa2d3cml0ZWZ1bmMsICd0YXNrJywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgIyBQYWNrYWdpbmcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgcmVjaXBlLCB3ZSBzaG91bGRuJ3QgZG8gYW55dGhpbmcKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBkZXBsb3lkaXJ2YXJyZWYgaW4gc3N0YXRlX291dHB1dGRpcnM6CisgICAgICAgICAgICAgICAgZGVwbG9yX2Rpcl9wa2d0eXBlID0gZC5leHBhbmQoZGVwbG95ZGlydmFycmVmICsgJy1wcmVkaWZmJykKKyAgICAgICAgICAgICAgICAjIFNldCBpbnRlcm1lZGlhdGUgb3V0cHV0IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZyhwa2d3cml0ZWZ1bmMsICdzc3RhdGUtb3V0cHV0ZGlycycsIHNzdGF0ZV9vdXRwdXRkaXJzLnJlcGxhY2UoZGVwbG95ZGlydmFycmVmLCBkZXBsb3JfZGlyX3BrZ3R5cGUpKQorICAgICAgICAgICAgICAgICMgVXBkYXRlIFNTVEFURV9EVVBXSElURUxJU1QgdG8gYXZvaWQgc2hhcmVkIGxvY2F0aW9uIGNvbmZsaWN0ZWQgZXJyb3IKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignU1NUQVRFX0RVUFdISVRFTElTVCcsICcgJXMnICUgZGVwbG9yX2Rpcl9wa2d0eXBlKQorCisgICAgICAgICAgICBkLnNldFZhcihwa2djb21wYXJlZnVuYywgZC5nZXRWYXIoJ2RvX3BhY2thZ2VfY29tcGFyZScsIEZhbHNlKSkKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZ3MocGtnY29tcGFyZWZ1bmMsIGQuZ2V0VmFyRmxhZ3MoJ2RvX3BhY2thZ2VfY29tcGFyZScsIEZhbHNlKSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZyhwa2djb21wYXJlZnVuYywgJ2RlcGVuZHMnLCAnIGJ1aWxkLWNvbXBhcmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICAgICAgYmIuYnVpbGQuYWRkdGFzayhwa2djb21wYXJlZnVuYywgJ2RvX2J1aWxkJywgJ2RvX3BhY2thZ2VkYXRhICcgKyBwa2d3cml0ZWZ1bmMsIGQpCit9CisKKyMgVGhpcyBpc24ndCB0aGUgcmVhbCB0YXNrIGZ1bmN0aW9uIC0gaXQncyBhIHRlbXBsYXRlIHRoYXQgd2UgdXNlIGluIHRoZQorIyBhbm9ueW1vdXMgcHl0aG9uIGNvZGUgYWJvdmUKK2Zha2Vyb290IHB5dGhvbiBkb19wYWNrYWdlX2NvbXBhcmUgKCkgeworICAgIGN1cnJlbnR0YXNrID0gZC5nZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgVHJ1ZSkKKyAgICBwa2d0eXBlID0gY3VycmVudHRhc2sucnNwbGl0KCdfJywgMSlbMV0KKyAgICBwYWNrYWdlX2NvbXBhcmVfaW1wbChwa2d0eXBlLCBkKQorfQorCitkZWYgcGFja2FnZV9jb21wYXJlX2ltcGwocGtndHlwZSwgZCk6CisgICAgaW1wb3J0IGVycm5vCisgICAgaW1wb3J0IGZubWF0Y2gKKyAgICBpbXBvcnQgZ2xvYgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IG9lLnNzdGF0ZXNpZworCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGRlcGxveWRpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSXyVzJyAlIHBrZ3R5cGUudXBwZXIoKSwgVHJ1ZSkKKyAgICBwcmVwYXRoID0gZGVwbG95ZGlyICsgJy1wcmVkaWZmLycKKworICAgICMgRmluZCBvdXQgUEtHUiB2YWx1ZXMgYXJlCisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgcGFja2FnZXMgPSBbXQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhZGlyLCBwbiksICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQUNLQUdFUzonKToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgcGFzcworCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICBiYi5kZWJ1ZygyLCAnJXM6IG5vIHBhY2thZ2VzLCBub3RoaW5nIHRvIGRvJyAlIHBuKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ3J2YWx1ZXMgPSB7fQorICAgIHJwa2duYW1lcyA9IHt9CisgICAgcmRlcGVuZHMgPSB7fQorICAgIHBrZ3Z2YWx1ZXMgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgJ3J1bnRpbWUnLCBwa2cpLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUEtHUjonKToKKyAgICAgICAgICAgICAgICAgICAgcGtncnZhbHVlc1twa2ddID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BLR1Y6Jyk6CisgICAgICAgICAgICAgICAgICAgIHBrZ3Z2YWx1ZXNbcGtnXSA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BLR18lczonICUgcGtnKToKKyAgICAgICAgICAgICAgICAgICAgcnBrZ25hbWVzW3BrZ10gPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdSREVQRU5EU18lczonICUgcGtnKToKKyAgICAgICAgICAgICAgICAgICAgcmRlcGVuZHNbcGtnXSA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisKKyAgICAjIFByZXBhcmUgYSBsaXN0IG9mIHRoZSBydW50aW1lIHBhY2thZ2UgbmFtZXMgZm9yIHBhY2thZ2VzIHRoYXQgd2VyZQorICAgICMgYWN0dWFsbHkgcHJvZHVjZWQKKyAgICBycGtnbGlzdCA9IFtdCisgICAgZm9yIHBrZywgcnBrZyBpbiBycGtnbmFtZXMuaXRlbXMoKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsICdydW50aW1lJywgcGtnICsgJy5wYWNrYWdlZCcpKToKKyAgICAgICAgICAgIHJwa2dsaXN0LmFwcGVuZCgocnBrZywgcGtnKSkKKyAgICBycGtnbGlzdC5zb3J0KGtleT1sYW1iZGEgeDogbGVuKHhbMF0pLCByZXZlcnNlPVRydWUpCisKKyAgICBwdnUgPSBkLmdldFZhcignUFYnLCBGYWxzZSkKKyAgICBpZiAnJCcgKyAne1NSQ1BWfScgaW4gcHZ1OgorICAgICAgICBwdnByZWZpeCA9IHB2dS5zcGxpdCgnJCcgKyAne1NSQ1BWfScsIDEpWzBdCisgICAgZWxzZToKKyAgICAgICAgcHZwcmVmaXggPSBOb25lCisKKyAgICBwa2d3cml0ZXRhc2sgPSAncGFja2FnZV93cml0ZV8lcycgJSBwa2d0eXBlCisgICAgZmlsZXMgPSBbXQorICAgIGRvY29weSA9IEZhbHNlCisgICAgbWFuaWZlc3QsIF8gPSBvZS5zc3RhdGVzaWcuc3N0YXRlX2dldF9tYW5pZmVzdF9maWxlbmFtZShwa2d3cml0ZXRhc2ssIGQpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgICMgQ29weSByZWNpcGUncyBhbGwgcGFja2FnZXMgaWYgb25lIG9mIHRoZSBwYWNrYWdlcyBhcmUgZGlmZmVyZW50IHRvIG1ha2UKKyAgICAjIHRoZXkgaGF2ZSB0aGUgc2FtZSBQUi4KKyAgICB3aXRoIG9wZW4obWFuaWZlc3QsICdyJykgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChwcmVwYXRoKToKKyAgICAgICAgICAgICAgICBzcmNwYXRoID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNyY3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXBsb3lkaXIsIG9zLnBhdGgucmVscGF0aChzcmNwYXRoLCBwcmVwYXRoKSkKKworICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgY3J1ZGUgYnV0IHNob3VsZCB3b3JrIGFzc3VtaW5nIHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgIyBwYWNrYWdlIGZpbGUgbmFtZSBzdGFydHMgd2l0aCB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICMgYW5kIHJwa2dsaXN0IGlzIHNvcnRlZCBieSBsZW5ndGggKGRlc2NlbmRpbmcpCisgICAgICAgICAgICAgICAgICAgIHBrZ2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkZXN0cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcGtnbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJwa2csIHBrZyBpbiBycGtnbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1scHJlZml4IGFuZCBwa2d0eXBlID09ICdycG0nIGFuZCBycGtnLnN0YXJ0c3dpdGgobWxwcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwa2cgPSBycGtnW2xlbihtbHByZWZpeCk6XQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnYmFzZW5hbWUuc3RhcnRzd2l0aChycGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dyID0gcGtncnZhbHVlc1twa2ddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHBhdGhzcGVjID0gZGVzdHBhdGgucmVwbGFjZShwa2dyLCAnKicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHZwcmVmaXg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3YgPSBwa2d2dmFsdWVzW3BrZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtndi5zdGFydHN3aXRoKHB2cHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3ZzdWZmaXggPSBwa2d2W2xlbihwdnByZWZpeCk6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJysnIGluIHBrZ3ZzdWZmaXg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtndiA9IHB2cHJlZml4ICsgJyorJyArIHBrZ3ZzdWZmaXguc3BsaXQoJysnLCAxKVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RwYXRoc3BlYyA9IGRlc3RwYXRoc3BlYy5yZXBsYWNlKHBrZ3YsIG5ld3BrZ3YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnbmFtZSA9IHBrZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdVbmFibGUgdG8gbWFwICVzIGJhY2sgdG8gcGFja2FnZScgJSBwa2diYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RwYXRoc3BlYyA9IGRlc3RwYXRoCisKKyAgICAgICAgICAgICAgICAgICAgb2xkZmlsZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRvY29weToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZGZpbGVzID0gZ2xvYi5nbG9iKGRlc3RwYXRoc3BlYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9sZGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGZpbGUgPSBvbGRmaWxlc1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoWydwa2ctZGlmZi5zaCcsIG9sZGZpbGUsIHNyY3BhdGhdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCAhPSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NvcHkgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIiVzIGFuZCAlcyBhcmUgZGlmZmVyZW50LCB3aWxsIGNvcHkgcGFja2FnZXMiICUgKG9sZGZpbGUsIHNyY3BhdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NvcHkgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiTm8gb2xkIHBhY2thZ2VzIGZvdW5kIGZvciAlcywgd2lsbCBjb3B5IHBhY2thZ2VzIiAlIHBrZ25hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKChwa2duYW1lLCBwa2diYXNlbmFtZSwgc3JjcGF0aCwgZGVzdHBhdGgpKQorCisgICAgIyBSZW1vdmUgYWxsIHRoZSBvbGQgZmlsZXMgYW5kIGNvcHkgYWdhaW4gaWYgZG9jb3B5CisgICAgaWYgZG9jb3B5OgorICAgICAgICBiYi5wbGFpbignQ29weWluZyBwYWNrYWdlcyBmb3IgcmVjaXBlICVzJyAlIHBuKQorICAgICAgICBwY21hbmlmZXN0ID0gb3MucGF0aC5qb2luKHByZXBhdGgsIGQuZXhwYW5kKCdwa2ctY29tcGFyZS1tYW5pZmVzdC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS0ke1BOfScpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ocGNtYW5pZmVzdCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGZuID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBmbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnUmVtb3ZlZCBvbGQgcGFja2FnZSAlcycgJSBmbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIENyZWF0ZSBuZXcgbWFuaWZlc3QKKyAgICAgICAgd2l0aCBvcGVuKHBjbWFuaWZlc3QsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGZvciBwa2duYW1lLCBwa2diYXNlbmFtZSwgc3JjcGF0aCwgZGVzdHBhdGggaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShkZXN0cGF0aCkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICAgICAgICAgICAgICAjIFJlbW92ZSBhbGxhcmNoIHJwbSBwa2cgaWYgaXQgaXMgYWxyZWFkeSBleGlzdGVkIChmb3IKKyAgICAgICAgICAgICAgICAjIG11bHRpbGliKSwgdGhleSdyZSBpZGVudGljYWwgaW4gdGhlb3J5LCBidXQgc3N0YXRlLmJiY2xhc3MKKyAgICAgICAgICAgICAgICAjIGNvcGllcyBpdCBhZ2Fpbiwgc28ga2VlcCBhbGlnbiB3aXRoIHRoYXQuCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdHBhdGgpIGFuZCBwa2d0eXBlID09ICdycG0nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0cGF0aCkKKyAgICAgICAgICAgICAgICBpZiAob3Muc3RhdChzcmNwYXRoKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0ZGlyKS5zdF9kZXYpOgorICAgICAgICAgICAgICAgICAgICAjIFVzZSBhIGhhcmQgbGluayB0byBzYXZlIHNwYWNlCisgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjcGF0aCwgZGVzdHBhdGgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyY3BhdGgsIGRlc3RwYXRoKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzXG4nICUgZGVzdHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgYmIucGxhaW4oJ05vdCBjb3B5aW5nIHBhY2thZ2VzIGZvciByZWNpcGUgJXMnICUgcG4pCisKK2RvX2NsZWFuc3N0YXRlW3Bvc3RmdW5jc10gKz0gInBmc19jbGVhbnBrZ3MiCitweXRob24gcGZzX2NsZWFucGtncyAoKSB7CisgICAgaW1wb3J0IGVycm5vCisgICAgZm9yIHBrZ2NsYXNzIGluIChkLmdldFZhcignUEFDS0FHRV9DTEFTU0VTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGlmIHBrZ2NsYXNzLnN0YXJ0c3dpdGgoJ3BhY2thZ2VfJyk6CisgICAgICAgICAgICBwa2d0eXBlID0gcGtnY2xhc3Muc3BsaXQoJ18nLCAxKVsxXQorICAgICAgICAgICAgZGVwbG95ZGlyID0gZC5nZXRWYXIoJ0RFUExPWV9ESVJfJXMnICUgcGtndHlwZS51cHBlcigpLCBUcnVlKQorICAgICAgICAgICAgcHJlcGF0aCA9IGRlcGxveWRpciArICctcHJlZGlmZicKKyAgICAgICAgICAgIHBjbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4ocHJlcGF0aCwgZC5leHBhbmQoJ3BrZy1jb21wYXJlLW1hbmlmZXN0LSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LSR7UE59JykpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBjbWFuaWZlc3QsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHBjbWFuaWZlc3QpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICBwYXNzCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZ3JvdXAuYmJjbGFzcwppbmRleCAzOGJkYmQzLi4zOTI4YzhhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWdyb3VwLmJiY2xhc3MKQEAgLTE0LDYgKzE0LDggQEAKICMgRnVsbHkgZXhwYW5kZWQgLSBzbyBpdCBhcHBsaWVzIHRoZSBvdmVycmlkZXMgYXMgd2VsbAogUEFDS0FHRV9BUkNIX0VYUEFOREVEIDo9ICIke1BBQ0tBR0VfQVJDSH0iCiAKK0xJQ0VOU0UgPz0gIk1JVCIKKwogaW5oZXJpdCAke0BvZS51dGlscy5pZmVsc2UoZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFBBTkRFRCcsIFRydWUpID09ICdhbGwnLCAnYWxsYXJjaCcsICcnKX0KIAogIyBUaGlzIGF1dG9tYXRpY2FsbHkgYWRkcyAtZGJnIGFuZCAtZGV2IGZsYXZvdXJzIG9mIGFsbCBQQUNLQUdFUwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzCmluZGV4IDNkMjJhZDguLjFmNjkyN2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGF0Y2guYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MKQEAgLTUsNiArNSw5IEBACiAKIFBBVENIREVQRU5ERU5DWSA9ICIke1BBVENIVE9PTH0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCiAKK1BBVENIX0dJVF9VU0VSX05BTUUgPz0gIk9wZW5FbWJlZGRlZCIKK1BBVENIX0dJVF9VU0VSX0VNQUlMID89ICJvZS5wYXRjaEBvZSIKKwogaW5oZXJpdCB0ZXJtaW5hbAogCiBkZWYgc3JjX3BhdGNoZXMoZCwgYWxsID0gRmFsc2UgKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGl4YnVmY2FjaGUuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGl4YnVmY2FjaGUuYmJjbGFzcwppbmRleCBkYmUxMWUxLi4zZjQ4YTBmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzCkBAIC01NCw2ICs1NCw3IEBACiAjIEFuIGVycm9yIGV4aXQgZHVyaW5nIHBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgYWxsb3dzIGJpdGJha2UgdG8KICMgdHJ5IHRvIHJlY292ZXIgYnkgcmUtYnVpbGRpbmcgdGhlIHBhY2thZ2UuCiAjCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGdkay1waXhidWYtbmF0aXZlIgogU1NUQVRFUE9TVElOU1RGVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBwaXhidWZjYWNoZV9zc3RhdGVfcG9zdGluc3QiCiAKICMgU2VlIGJhc2UuYmJjbGFzcyBmb3IgdGhlIG90aGVyIGhhbGYgb2YgdGhpcwpAQCAtNjEsNyArNjIsOCBAQAogCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiBdOyB0aGVuCiAJCSR7Z2RrcGl4YnVmX2NvbXBsZXRlfQogCWVsaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF07IHRoZW4KLQkJZWNobyAiJHtnZGtwaXhidWZfY29tcGxldGV9IiA+PiAke1NUQUdJTkdfRElSfS9zc3RhdGVjb21wbGV0aW9ucworCQlpZiBbIC14ICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgXTsgdGhlbgorCQkJZWNobyAiJHtnZGtwaXhidWZfY29tcGxldGV9IiA+PiAke1NUQUdJTkdfRElSfS9zc3RhdGVjb21wbGV0aW9ucworCQlmaQogCWZpCiB9Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcwppbmRleCAwMDhiYjU3Li40NDYyYjUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfYmFzZS5iYmNsYXNzCkBAIC0yNiw2ICsyNiw4IEBACiBTREtfT1VUUFVUID0gIiR7U0RLX0RJUn0vaW1hZ2UiCiBTREtfREVQTE9ZID0gIiR7REVQTE9ZX0RJUn0vc2RrIgogCitTREtERVBMT1lESVIgPSAiJHtXT1JLRElSfS8ke1NES01BQ0hJTkV9LWRlcGxveS0ke1BOfS1wb3B1bGF0ZS1zZGsiCisKIEJfdGFzay1wb3B1bGF0ZS1zZGsgPSAiJHtTREtfRElSfSIKIAogU0RLVEFSR0VUU1lTUk9PVCA9ICIke1NES1BBVEh9L3N5c3Jvb3RzLyR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30iCkBAIC01OCw4ICs2MCw4IEBACiBTREtFWFRQQVRIID89ICJ+LyR7QGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX1fc2RrIgogU0RLX1RJVExFID89ICIke0BkLmdldFZhcignRElTVFJPX05BTUUnLCBUcnVlKSBvciBkLmdldFZhcignRElTVFJPJywgVHJ1ZSl9IFNESyIKIAotU0RLX1RBUkdFVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhcmdldC5tYW5pZmVzdCIKLVNES19IT1NUX01BTklGRVNUID0gIiR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uaG9zdC5tYW5pZmVzdCIKK1NES19UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtERVBMT1lESVJ9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhcmdldC5tYW5pZmVzdCIKK1NES19IT1NUX01BTklGRVNUID0gIiR7U0RLREVQTE9ZRElSfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5ob3N0Lm1hbmlmZXN0IgogcHl0aG9uIHdyaXRlX3RhcmdldF9zZGtfbWFuaWZlc3QgKCkgewogICAgIGZyb20gb2Uuc2RrIGltcG9ydCBzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKICAgICBmcm9tIG9lLnV0aWxzIGltcG9ydCBmb3JtYXRfcGtnX2xpc3QKQEAgLTkwLDkgKzkyLDkgQEAKICMgU29tZSBhcmNocyBvdmVycmlkZSB0aGlzLCB3ZSBuZWVkIHRoZSBuYXRpdmVzZGsgdmVyc2lvbgogIyB0dXJucyBvdXQgdGhpcyBpcyBoYXJkIHRvIGdldCBmcm9tIHRoZSBkYXRhc3RvcmUgZHVlIHRvIFRSQU5TTEFURURfVEFSR0VUX0FSQ0gKICMgbWFuaXB1bGF0aW9uLgotU0RLX09MREVTVF9LRVJORUwgPSAiMi42LjMyIgorU0RLX09MREVTVF9LRVJORUwgPSAiMy4yLjAiCiAKLWZha2Vyb290IHB5dGhvbiBkb19wb3B1bGF0ZV9zZGsoKSB7CitkZWYgcG9wdWxhdGVfc2RrX2NvbW1vbihkKToKICAgICBmcm9tIG9lLnNkayBpbXBvcnQgcG9wdWxhdGVfc2RrCiAgICAgZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgY3JlYXRlX21hbmlmZXN0LCBNYW5pZmVzdAogCkBAIC0xMTQsNyArMTE2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3R5cGU9TWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQogCiAgICAgcG9wdWxhdGVfc2RrKGQpCisKK2Zha2Vyb290IHB5dGhvbiBkb19wb3B1bGF0ZV9zZGsoKSB7CisgICAgcG9wdWxhdGVfc2RrX2NvbW1vbihkKQogfQorU1NUQVRFVEFTS1MgKz0gImRvX3BvcHVsYXRlX3NkayIKK1NTVEFURV9TS0lQX0NSRUFUSU9OX3Rhc2stcG9wdWxhdGUtc2RrID0gJzEnCitkb19wb3B1bGF0ZV9zZGtbY2xlYW5kaXJzXSA9ICIke1NES0RFUExPWURJUn0iCitkb19wb3B1bGF0ZV9zZGtbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTREtERVBMT1lESVJ9IgorZG9fcG9wdWxhdGVfc2RrW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NES19ERVBMT1l9IgorZG9fcG9wdWxhdGVfc2RrW3N0YW1wLWV4dHJhLWluZm9dID0gIiR7TUFDSElORX0ke1NES01BQ0hJTkV9IgogCiBmYWtlcm9vdCBjcmVhdGVfc2RrX2ZpbGVzKCkgewogCWNwICR7Q09SRUJBU0V9L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8KQEAgLTEzNiw3ICsxNDcsOCBAQAogICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKHBhdGgpCiAKICAgICAjIEdldCBzY2FuIHJvb3QKLSAgICBTQ0FOX1JPT1QgPSBub3JtX3BhdGgoIiR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9zeXNyb290cy8iKQorICAgIFNDQU5fUk9PVCA9IG5vcm1fcGF0aCgiJXMvJXMvc3lzcm9vdHMvIiAlIChkLmdldFZhcignU0RLX09VVFBVVCcsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignU0RLUEFUSCcsIFRydWUpKSkKIAogICAgIGJiLm5vdGUoJ0NoZWNraW5nIFNESyBzeXNyb290cyBhdCAnICsgU0NBTl9ST09UKQogCkBAIC0xODAsMTQgKzE5MiwxNCBAQAogCiBmYWtlcm9vdCB0YXJfc2RrKCkgewogCSMgUGFja2FnZSBpdCB1cAotCW1rZGlyIC1wICR7U0RLX0RFUExPWX0KKwlta2RpciAtcCAke1NES0RFUExPWURJUn0KIAljZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KLQl0YXIgJHtTREtUQVJPUFRTfSAtY2YgLSAuIHwgcGl4eiA+ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLnh6CisJdGFyICR7U0RLVEFST1BUU30gLWNmIC0gLiB8IHBpeHogPiAke1NES0RFUExPWURJUn0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLnh6CiB9CiAKIGZha2Vyb290IGNyZWF0ZV9zaGFyKCkgewogCSMgY29weSBpbiB0aGUgdGVtcGxhdGUgc2hhciBleHRyYWN0b3Igc2NyaXB0Ci0JY3AgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1leHRyYWN0LnNoICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKwljcCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2ggJHtTREtERVBMT1lESVJ9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCiAKIAlybSAtZiAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQgJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZAogCkBAIC0yMDMsNyArMjE1LDcgQEAKIEVPRgogCXNlZCAtaSAtZSAnL0BTREtfUFJFX0lOU1RBTExfQ09NTUFOREAvciAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQnIFwKIAkJLWUgJy9AU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQC9yICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQnIFwKLQkJJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCQkke1NES0RFUExPWURJUn0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKIAogCSMgc3Vic3RpdHV0ZSB2YXJpYWJsZXMKIAlzZWQgLWkgLWUgJ3MjQFNES19BUkNIQCMke1NES19BUkNIfSNnJyBcCkBAIC0yMTUsMTYgKzIyNywxNiBAQAogCQktZSAncyNAU0RLX1ZFUlNJT05AIyR7U0RLX1ZFUlNJT059I2cnIFwKIAkJLWUgJy9AU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRAL2QnIFwKIAkJLWUgJy9AU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQC9kJyBcCi0JCSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKwkJJHtTREtERVBMT1lESVJ9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCiAKIAkjIGFkZCBleGVjdXRpb24gcGVybWlzc2lvbgotCWNobW9kICt4ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKwljaG1vZCAreCAke1NES0RFUExPWURJUn0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKIAogCSMgYXBwZW5kIHRoZSBTREsgdGFyYmFsbAotCWNhdCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci54eiA+PiAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisJY2F0ICR7U0RLREVQTE9ZRElSfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIueHogPj4gJHtTREtERVBMT1lESVJ9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCiAKIAkjIGRlbGV0ZSB0aGUgb2xkIHRhcmJhbGwsIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZQotCXJtICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLnh6CisJcm0gJHtTREtERVBMT1lESVJ9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci54egogfQogCiBwb3B1bGF0ZV9zZGtfbG9nX2NoZWNrKCkgewpAQCAtMjUxLDcgKzI2Myw3IEBACiBkZWYgc2RrX3ZhcmlhYmxlcyhkKToKICAgICB2YXJpYWJsZXMgPSBbJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywnU0RLX09TJywnU0RLX09VVFBVVCcsJ1NES1BBVEhOQVRJVkUnLCdTREtUQVJHRVRTWVNST09UJywnU0RLX0RJUicsJ1NES19WRU5ET1InLCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCdTREtfUEFDS0FHRV9BUkNIUycsJ1NES19PVVRQVVQnLAogICAgICAgICAgICAgICAgICAnU0RLVEFSR0VUU1lTUk9PVCcsJ01VTFRJTElCX1ZBUklBTlRTJywnTVVMVElMSUJTJywnQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMnLCdNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMnLCdCQURfUkVDT01NRU5EQVRJT05TJywnTk9fUkVDT01NRU5EQVRJT05TJywnUEFDS0FHRV9BUkNIUycsCi0gICAgICAgICAgICAgICAgICdQQUNLQUdFX0NMQVNTRVMnLCdUQVJHRVRfVkVORE9SJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9BUkNIJywnVEFSR0VUX09TJywnQkJFWFRFTkRWQVJJQU5UJywnRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknXQorICAgICAgICAgICAgICAgICAnUEFDS0FHRV9DTEFTU0VTJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9WRU5ET1InLCdUQVJHRVRfQVJDSCcsJ1RBUkdFVF9PUycsJ0JCRVhURU5EVkFSSUFOVCcsJ0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJJywgJ1BBQ0tBR0VfRVhDTFVERV9DT01QTEVNRU5UQVJZJ10KICAgICB2YXJpYWJsZXMuZXh0ZW5kKHNka19jb21tYW5kX3ZhcmlhYmxlcyhkKSkKICAgICByZXR1cm4gIiAiLmpvaW4odmFyaWFibGVzKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCmluZGV4IDg3NTE4ZDEuLjBmMDUyNWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCkBAIC0yMCwzNCArMjAsNDMgQEAKIAogIyBPcHRpb25zIGFyZSBmdWxsIG9yIG1pbmltYWwKIFNES19FWFRfVFlQRSA/PSAiZnVsbCIKK1NES19JTkNMVURFX1BLR0RBVEEgPz0gIjAiCitTREtfSU5DTFVERV9UT09MQ0hBSU4gPz0gIiR7QCcxJyBpZiBkLmdldFZhcignU0RLX0VYVF9UWVBFJywgVHJ1ZSkgPT0gJ2Z1bGwnIGVsc2UgJzAnfSIKIAogU0RLX1JFQ1JERVBfVEFTS1MgPz0gIiIKIAogU0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUID89ICIiCiBTREtfTE9DQUxfQ09ORl9CTEFDS0xJU1QgPz0gIkNPTkZfVkVSU0lPTiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJCX05VTUJFUl9USFJFQURTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVJBTExFTF9NQUtFIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJTRVJWX0hPU1QgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU1RBVEVfTUlSUk9SUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERMX0RJUiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTVEFURV9ESVIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTVBESVIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKIFNES19JTkhFUklUX0JMQUNLTElTVCA/PSAiYnVpbGRoaXN0b3J5IGljZWNjIgogU0RLX1VQREFURV9VUkwgPz0gIiIKIAogU0RLX1RBUkdFVFMgPz0gIiR7UE59IgogCi1kZWYgZ2V0X3Nka19pbnN0YWxsX3RhcmdldHMoZCk6CitkZWYgZ2V0X3Nka19pbnN0YWxsX3RhcmdldHMoZCwgaW1hZ2VzX29ubHk9RmFsc2UpOgogICAgIHNka19pbnN0YWxsX3RhcmdldHMgPSAnJwotICAgIGlmIGQuZ2V0VmFyKCdTREtfRVhUX1RZUEUnLCBUcnVlKSAhPSAnbWluaW1hbCc6CisgICAgaWYgaW1hZ2VzX29ubHkgb3IgZC5nZXRWYXIoJ1NES19FWFRfVFlQRScsIFRydWUpICE9ICdtaW5pbWFsJzoKICAgICAgICAgc2RrX2luc3RhbGxfdGFyZ2V0cyA9IGQuZ2V0VmFyKCdTREtfVEFSR0VUUycsIFRydWUpCiAKICAgICAgICAgZGVwZCA9IGQuZ2V0VmFyKCdCQl9UQVNLREVQREFUQScsIEZhbHNlKQotICAgICAgICBmb3IgdiBpbiBkZXBkLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgZm9yIHYgaW4gZGVwZC52YWx1ZXMoKToKICAgICAgICAgICAgIGlmIHZbMV0gPT0gJ2RvX2ltYWdlX2NvbXBsZXRlJzoKICAgICAgICAgICAgICAgICBpZiB2WzBdIG5vdCBpbiBzZGtfaW5zdGFsbF90YXJnZXRzOgogICAgICAgICAgICAgICAgICAgICBzZGtfaW5zdGFsbF90YXJnZXRzICs9ICcge30nLmZvcm1hdCh2WzBdKQogCi0gICAgaWYgZC5nZXRWYXIoJ1NES19JTkNMVURFX1BLR0RBVEEnLCBUcnVlKSA9PSAnMSc6Ci0gICAgICAgIHNka19pbnN0YWxsX3RhcmdldHMgKz0gJyBtZXRhLXdvcmxkLXBrZ2RhdGE6ZG9fYWxscGFja2FnZWRhdGEnCisgICAgaWYgbm90IGltYWdlc19vbmx5OgorICAgICAgICBpZiBkLmdldFZhcignU0RLX0lOQ0xVREVfUEtHREFUQScsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHNka19pbnN0YWxsX3RhcmdldHMgKz0gJyBtZXRhLXdvcmxkLXBrZ2RhdGE6ZG9fYWxscGFja2FnZWRhdGEnCisgICAgICAgIGlmIGQuZ2V0VmFyKCdTREtfSU5DTFVERV9UT09MQ0hBSU4nLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICBzZGtfaW5zdGFsbF90YXJnZXRzICs9ICcgbWV0YS1leHRzZGstdG9vbGNoYWluOmRvX3BvcHVsYXRlX3N5c3Jvb3QnCiAKICAgICByZXR1cm4gc2RrX2luc3RhbGxfdGFyZ2V0cwogCkBAIC03Niw2ICs4NSw2NyBAQAogCiBTREtfVElUTEVfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7QGQuZ2V0VmFyKCdESVNUUk9fTkFNRScsIFRydWUpIG9yIGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX0gRXh0ZW5zaWJsZSBTREsiCiAKK2RlZiBjbGVhbl9lc2RrX2J1aWxkZGlyKGQsIHNka2Jhc2VwYXRoKToKKyAgICAiIiJDbGVhbiB1cCB0cmFjZXMgb2YgdGhlIGZha2UgYnVpbGQgZm9yIGNyZWF0ZV9maWx0ZXJlZF90YXNrbGlzdCgpIiIiCisgICAgaW1wb3J0IHNodXRpbAorICAgIGNsZWFucGF0aHMgPSAnY2FjaGUgY29uZi9zYW5pdHlfaW5mbyBjb25mL3RlbXBsYXRlY29uZi5jZmcgdG1wJy5zcGxpdCgpCisgICAgZm9yIHB0aCBpbiBjbGVhbnBhdGhzOgorICAgICAgICBmdWxscHRoID0gb3MucGF0aC5qb2luKHNka2Jhc2VwYXRoLCBwdGgpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbHB0aCk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZ1bGxwdGgpCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoZnVsbHB0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZnVsbHB0aCkKKworZGVmIGNyZWF0ZV9maWx0ZXJlZF90YXNrbGlzdChkLCBzZGtiYXNlcGF0aCwgdGFza2xpc3RmaWxlLCBjb25mX2luaXRwYXRoKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSBmaWx0ZXJlZCBsaXN0IG9mIHRhc2tzLiBBbHNvIGRvdWJsZS1jaGVja3MgdGhhdCB0aGUgYnVpbGQgc3lzdGVtCisgICAgd2l0aGluIHRoZSBTREsgYmFzaWNhbGx5IHdvcmtzIGFuZCByZXF1aXJlZCBzc3RhdGUgYXJ0aWZhY3RzIGFyZSBhdmFpbGFibGUuCisgICAgIiIiCisgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBvZS5jb3B5X2J1aWxkc3lzdGVtCisKKyAgICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBidWlsZCBkaXJlY3RvcnkgdGhhdCB3ZSBjYW4gcGFzcyB0byB0aGUgZW52IHNldHVwIHNjcmlwdAorICAgIHNodXRpbC5jb3B5ZmlsZShzZGtiYXNlcGF0aCArICcvY29uZi9sb2NhbC5jb25mJywgc2RrYmFzZXBhdGggKyAnL2NvbmYvbG9jYWwuY29uZi5iYWsnKQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKHNka2Jhc2VwYXRoICsgJy9jb25mL2xvY2FsLmNvbmYnLCAnYScpIGFzIGY6CisgICAgICAgICAgICAjIEZvcmNlIHRoZSB1c2Ugb2Ygc3N0YXRlIGZyb20gdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgZi53cml0ZSgnXG5TU1RBVEVfRElSX2ZvcmNldmFyaWFibGUgPSAiJXMiXG4nICUgZC5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKSkKKyAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTX2ZvcmNldmFyaWFibGUgPSAiIlxuJykKKyAgICAgICAgICAgICMgRW5zdXJlIFRNUERJUiBpcyB0aGUgZGVmYXVsdCBzbyB0aGF0IGNsZWFuX2VzZGtfYnVpbGRkaXIoKSBjYW4gZGVsZXRlIGl0CisgICAgICAgICAgICBmLndyaXRlKCdUTVBESVJfZm9yY2V2YXJpYWJsZSA9ICIke1RPUERJUn0vdG1wIlxuJykKKyAgICAgICAgICAgICMgRHJvcCB1bmluYXRpdmUgaWYgdGhlIGJ1aWxkIGlzbid0IHVzaW5nIGl0IChvciBlbHNlIE5BVElWRUxTQlNUUklORyB3aWxsCisgICAgICAgICAgICAjIGJlIGRpZmZlcmVudCBhbmQgd2Ugd29uJ3QgYmUgYWJsZSB0byBmaW5kIG91ciBuYXRpdmUgc3N0YXRlKQorICAgICAgICAgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3VuaW5hdGl2ZScsIGQpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ0lOSEVSSVRfcmVtb3ZlID0gInVuaW5hdGl2ZSJcbicpCisKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHRoZSBkZWZhdWx0IFNES1BBVEggKG9yIGV2ZW4gYSBjdXN0b20gdmFsdWUpIG1heSBjb250YWluIGNoYXJhY3RlcnMgdGhhdCBiaXRiYWtlCisgICAgICAgICMgd2lsbCBub3QgYWxsb3cgaW4gaXRzIENPUkVCQVNFIHBhdGgsIHNvIHdlIG5lZWQgdG8gcmVuYW1lIHRoZSBkaXJlY3RvcnkgdGVtcG9yYXJpbHkKKyAgICAgICAgdGVtcF9zZGtiYXNlcGF0aCA9IGQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkgKyAnL3RtcC1yZW5hbWVkLXNkaycKKyAgICAgICAgIyBEZWxldGUgYW55IGV4aXN0aW5nIHRlbXAgZGlyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcF9zZGtiYXNlcGF0aCkKKyAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5yZW5hbWUoc2RrYmFzZXBhdGgsIHRlbXBfc2RrYmFzZXBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZHByZWZpeCA9ICcuICVzIC47ICcgJSBjb25mX2luaXRwYXRoCisgICAgICAgICAgICBsb2dmaWxlID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSArICcvdGFza2xpc3RfYmJfbG9nLnR4dCcKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLmNoZWNrX3NzdGF0ZV90YXNrX2xpc3QoZCwgZ2V0X3Nka19pbnN0YWxsX3RhcmdldHMoZCksIHRhc2tsaXN0ZmlsZSwgY21kcHJlZml4PWNtZHByZWZpeCwgY3dkPXRlbXBfc2RrYmFzZXBhdGgsIGxvZ2ZpbGU9bG9nZmlsZSkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgbXNnID0gJ0ZhaWxlZCB0byBnZW5lcmF0ZSBmaWx0ZXJlZCB0YXNrIGxpc3QgZm9yIGV4dGVuc2libGUgU0RLOlxuJXMnICUgIGUuc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgJ2F0dGVtcHRlZCB0byBleGVjdXRlIHVuZXhwZWN0ZWRseSBhbmQgc2hvdWxkIGhhdmUgYmVlbiBzZXRzY2VuZWQnIGluIGUuc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJ1xuLS0tLS0tLS0tLVxuXG5OT1RFOiAiYXR0ZW1wdGVkIHRvIGV4ZWN1dGUgdW5leHBlY3RlZGx5IGFuZCBzaG91bGQgaGF2ZSBiZWVuIHNldHNjZW5lZCIgZXJyb3JzIGluZGljYXRlIHRoaXMgbWF5IGJlIGNhdXNlZCBieSBtaXNzaW5nIHNzdGF0ZSBhcnRpZmFjdHMgdGhhdCB3ZXJlIGxpa2VseSBwcm9kdWNlZCBpbiBlYXJsaWVyIGJ1aWxkcywgYnV0IGhhdmUgYmVlbiBzdWJzZXF1ZW50bHkgZGVsZXRlZCBmb3Igc29tZSByZWFzb24uXG4nCisgICAgICAgICAgICAgICAgYmIuZmF0YWwobXNnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVuYW1lKHRlbXBfc2RrYmFzZXBhdGgsIHNka2Jhc2VwYXRoKQorICAgICAgICAjIENsZWFuIG91dCByZXNpZHVlIG9mIHJ1bm5pbmcgYml0YmFrZSwgd2hpY2ggY2hlY2tfc3N0YXRlX3Rhc2tfbGlzdCgpCisgICAgICAgICMgd2lsbCBlZmZlY3RpdmVseSBkbworICAgICAgICBjbGVhbl9lc2RrX2J1aWxkZGlyKGQsIHNka2Jhc2VwYXRoKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLnJlcGxhY2Uoc2RrYmFzZXBhdGggKyAnL2NvbmYvbG9jYWwuY29uZi5iYWsnLCBzZGtiYXNlcGF0aCArICcvY29uZi9sb2NhbC5jb25mJykKKwogcHl0aG9uIGNvcHlfYnVpbGRzeXN0ZW0gKCkgewogICAgIGltcG9ydCByZQogICAgIGltcG9ydCBzaHV0aWwKQEAgLTEyNSw4ICsxOTUsOCBAQAogICAgIGQuc2V0VmFyKCdzY3JpcHRyZWxwYXRoJywgc2NyaXB0cmVscGF0aCkKIAogICAgICMgV3JpdGUgb3V0IGNvbmZpZyBmaWxlIGZvciBkZXZ0b29sCi0gICAgaW1wb3J0IENvbmZpZ1BhcnNlcgotICAgIGNvbmZpZyA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKyAgICBpbXBvcnQgY29uZmlncGFyc2VyCisgICAgY29uZmlnID0gY29uZmlncGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQogICAgIGNvbmZpZy5hZGRfc2VjdGlvbignR2VuZXJhbCcpCiAgICAgY29uZmlnLnNldCgnR2VuZXJhbCcsICdiaXRiYWtlX3N1YmRpcicsIGNvbmZfYmJwYXRoKQogICAgIGNvbmZpZy5zZXQoJ0dlbmVyYWwnLCAnaW5pdF9wYXRoJywgY29uZl9pbml0cGF0aCkKQEAgLTE3MCw2ICsyNDAsMTQgQEAKICAgICAgICAgZi53cml0ZSgnICAgICQnICsgJ3tTREtCQVNFTUVUQVBBVEh9L3dvcmtzcGFjZSBcXFxuJykKICAgICAgICAgZi53cml0ZSgnICAgICJcbicpCiAKKyAgICAjIENvcHkgdW5pbmF0aXZlIHRhcmJhbGwKKyAgICAjIEZvciBub3cgdGhpcyBpcyB3aGVyZSB1bmluYXRpdmUuYmJjbGFzcyBleHBlY3RzIHRoZSB0YXJiYWxsCisgICAgdW5pbmF0aXZlX2ZpbGUgPSBkLmV4cGFuZCgnJHtTREtfREVQTE9ZfS8ke0JVSUxEX0FSQ0h9LW5hdGl2ZXNkay1saWJjLnRhci5iejInKQorICAgIHVuaW5hdGl2ZV9jaGVja3N1bSA9IGJiLnV0aWxzLnNoYTI1Nl9maWxlKHVuaW5hdGl2ZV9maWxlKQorICAgIHVuaW5hdGl2ZV9vdXRkaXIgPSAnJXMvZG93bmxvYWRzL3VuaW5hdGl2ZS8lcycgJSAoYmFzZW91dHBhdGgsIHVuaW5hdGl2ZV9jaGVja3N1bSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIodW5pbmF0aXZlX291dGRpcikKKyAgICBzaHV0aWwuY29weSh1bmluYXRpdmVfZmlsZSwgdW5pbmF0aXZlX291dGRpcikKKwogICAgIGVudl93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ0JCX0VOVl9FWFRSQVdISVRFJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKICAgICBlbnZfd2hpdGVsaXN0X3ZhbHVlcyA9IHt9CiAKQEAgLTIwNCw3ICsyODIsMTAgQEAKICAgICAgICAgICAgICMgV3JpdGUgYSBuZXdsaW5lIGp1c3QgaW4gY2FzZSB0aGVyZSdzIG5vbmUgYXQgdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwKICAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKIAotICAgICAgICAgICAgZi53cml0ZSgnSU5IRVJJVCArPSAiJXMiXG5cbicgJSAndW5pbmF0aXZlJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0RMX0RJUiA9ICIke1RPUERJUn0vZG93bmxvYWRzIlxuJykKKworICAgICAgICAgICAgZi53cml0ZSgnSU5IRVJJVCArPSAiJXMiXG4nICUgJ3VuaW5hdGl2ZScpCisgICAgICAgICAgICBmLndyaXRlKCdVTklOQVRJVkVfQ0hFQ0tTVU1bJXNdID0gIiVzIlxuXG4nICUgKGQuZ2V0VmFyKCdCVUlMRF9BUkNIJywgVHJ1ZSksIHVuaW5hdGl2ZV9jaGVja3N1bSkpCiAgICAgICAgICAgICBmLndyaXRlKCdDT05GX1ZFUlNJT04gPSAiJXMiXG5cbicgJSBkLmdldFZhcignQ09ORl9WRVJTSU9OJywgRmFsc2UpKQogCiAgICAgICAgICAgICAjIFNvbWUgY2xhc3NlcyBhcmUgbm90IHN1aXRhYmxlIGZvciBTREssIHJlbW92ZSB0aGVtIGZyb20gSU5IRVJJVApAQCAtMjE5LDkgKzMwMCwxMiBAQAogICAgICAgICAgICAgIyB3YXJuaW5nLgogICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfU1NUQVRFX0VYSVNUU19DSEVDSyA9ICJub25lIlxuXG4nKQogCi0gICAgICAgICAgICAjIEVycm9yIGlmIHRoZSBzaWdzIGluIHRoZSBsb2NrZWQtc2lnbmF0dXJlIGZpbGUgZG9uJ3QgbWF0Y2gKKyAgICAgICAgICAgICMgV2FybiBpZiB0aGUgc2lncyBpbiB0aGUgbG9ja2VkLXNpZ25hdHVyZSBmaWxlIGRvbid0IG1hdGNoCiAgICAgICAgICAgICAjIHRoZSBzaWcgY29tcHV0ZWQgZnJvbSB0aGUgbWV0YWRhdGEuCi0gICAgICAgICAgICBmLndyaXRlKCdTSUdHRU5fTE9DS0VEU0lHU19UQVNLU0lHX0NIRUNLID0gImVycm9yIlxuXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfVEFTS1NJR19DSEVDSyA9ICJ3YXJuIlxuXG4nKQorCisgICAgICAgICAgICAjIFNldCB1cCB3aGl0ZWxpc3QgZm9yIHJ1biBvbiBpbnN0YWxsCisgICAgICAgICAgICBmLndyaXRlKCdCQl9TRVRTQ0VORV9FTkZPUkNFX1dISVRFTElTVCA9ICIlOiogKjpkb19zaGFyZWRfd29ya2RpciAqOmRvX3JtX3dvcmsiXG5cbicpCiAKICAgICAgICAgICAgICMgSGlkZSB0aGUgY29uZmlnIGluZm9ybWF0aW9uIGZyb20gYml0YmFrZSBvdXRwdXQgKHNpbmNlIGl0J3MgZml4ZWQgd2l0aGluIHRoZSBTREspCiAgICAgICAgICAgICBmLndyaXRlKCdCVUlMRENGR19IRUFERVIgPSAiIlxuJykKQEAgLTI2Myw3ICszNDcsNyBAQAogICAgICMgRW5zdXJlIGFueSB2YXJpYWJsZXMgc2V0IGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IChieSB3YXkgb2YKICAgICAjIEJCX0VOVl9FWFRSQVdISVRFKSBhcmUgc2V0IGluIHRoZSBTREsncyBjb25maWd1cmF0aW9uCiAgICAgZXh0cmFsaW5lcyA9IFtdCi0gICAgZm9yIG5hbWUsIHZhbHVlIGluIGVudl93aGl0ZWxpc3RfdmFsdWVzLml0ZXJpdGVtcygpOgorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBlbnZfd2hpdGVsaXN0X3ZhbHVlcy5pdGVtcygpOgogICAgICAgICBhY3R1YWx2YWx1ZSA9IGQuZ2V0VmFyKG5hbWUsIFRydWUpIG9yICcnCiAgICAgICAgIGlmIHZhbHVlICE9IGFjdHVhbHZhbHVlOgogICAgICAgICAgICAgZXh0cmFsaW5lcy5hcHBlbmQoJyVzID0gIiVzIlxuJyAlIChuYW1lLCBhY3R1YWx2YWx1ZSkpCkBAIC0yNzYsNyArMzYwLDcgQEAKICAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKIAogICAgICMgRmlsdGVyIHRoZSBsb2NrZWQgc2lnbmF0dXJlcyBmaWxlIHRvIGp1c3QgdGhlIHNzdGF0ZSB0YXNrcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbgotICAgIGV4Y2x1ZGVkX3RhcmdldHMgPSBkLmdldFZhcignU0RLX1RBUkdFVFMnLCBUcnVlKQorICAgIGV4Y2x1ZGVkX3RhcmdldHMgPSBnZXRfc2RrX2luc3RhbGxfdGFyZ2V0cyhkLCBpbWFnZXNfb25seT1UcnVlKQogICAgIHNpZ2ZpbGUgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpICsgJy9sb2NrZWQtc2lncy5pbmMnCiAgICAgbG9ja2Vkc2lnc19wcnVuZWQgPSBiYXNlb3V0cGF0aCArICcvY29uZi9sb2NrZWQtc2lncy5pbmMnCiAgICAgb2UuY29weV9idWlsZHN5c3RlbS5wcnVuZV9sb2NrZWRzaWdzKFtdLApAQCAtMjg5LDYgKzM3MywxNSBAQAogICAgICMgdW5pbmF0aXZlLmJiY2xhc3Mgc2V0cyBOQVRJVkVMU0JTVFJJTkcgdG8gJ3VuaXZlcnNhbCcKICAgICBmaXhlZGxzYnN0cmluZyA9ICd1bml2ZXJzYWwnCiAKKyAgICBzZGtfaW5jbHVkZV90b29sY2hhaW4gPSAoZC5nZXRWYXIoJ1NES19JTkNMVURFX1RPT0xDSEFJTicsIFRydWUpID09ICcxJykKKyAgICBzZGtfZXh0X3R5cGUgPSBkLmdldFZhcignU0RLX0VYVF9UWVBFJywgVHJ1ZSkKKyAgICBpZiBzZGtfZXh0X3R5cGUgIT0gJ21pbmltYWwnIG9yIHNka19pbmNsdWRlX3Rvb2xjaGFpbiBvciBkZXJpdmF0aXZlOgorICAgICAgICAjIENyZWF0ZSB0aGUgZmlsdGVyZWQgdGFzayBsaXN0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNzdGF0ZSBjYWNoZSBzaGlwcGVkIHdpdGggdGhlIFNESworICAgICAgICB0YXNrbGlzdGZuID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSArICcvdGFza2xpc3QudHh0JworICAgICAgICBjcmVhdGVfZmlsdGVyZWRfdGFza2xpc3QoZCwgYmFzZW91dHBhdGgsIHRhc2tsaXN0Zm4sIGNvbmZfaW5pdHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgdGFza2xpc3RmbiA9IE5vbmUKKwogICAgICMgQWRkIHBhY2thZ2VkYXRhIGlmIGVuYWJsZWQKICAgICBpZiBkLmdldFZhcignU0RLX0lOQ0xVREVfUEtHREFUQScsIFRydWUpID09ICcxJzoKICAgICAgICAgbG9ja2Vkc2lnc19iYXNlID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSArICcvbG9ja2VkLXNpZ3MtYmFzZS5pbmMnCkBAIC0zMDAsNyArMzkzLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRzaWdzX3BydW5lZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHNpZ3NfY29weSkKIAotICAgIGlmIGQuZ2V0VmFyKCdTREtfRVhUX1RZUEUnLCBUcnVlKSA9PSAnbWluaW1hbCc6CisgICAgaWYgc2RrX2luY2x1ZGVfdG9vbGNoYWluOgorICAgICAgICBsb2NrZWRzaWdzX2Jhc2UgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpICsgJy9sb2NrZWQtc2lncy1iYXNlMi5pbmMnCisgICAgICAgIGxvY2tlZHNpZ3NfdG9vbGNoYWluID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX0hPU1QnLCBUcnVlKSArICcvbG9ja2VkLXNpZ3MvbG9ja2VkLXNpZ3MtZXh0c2RrLXRvb2xjaGFpbi5pbmMnCisgICAgICAgIHNodXRpbC5tb3ZlKGxvY2tlZHNpZ3NfcHJ1bmVkLCBsb2NrZWRzaWdzX2Jhc2UpCisgICAgICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0ubWVyZ2VfbG9ja2Vkc2lncyhbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHNpZ3NfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHNpZ3NfdG9vbGNoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2Vkc2lnc19wcnVuZWQpCisgICAgICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0uY3JlYXRlX2xvY2tlZF9zc3RhdGVfY2FjaGUobG9ja2Vkc2lnc190b29sY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3RhdGVfb3V0LCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkbHNic3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmZpbGU9dGFza2xpc3RmbikKKworICAgIGlmIHNka19leHRfdHlwZSA9PSAnbWluaW1hbCc6CiAgICAgICAgIGlmIGRlcml2YXRpdmU6CiAgICAgICAgICAgICAjIEFzc3VtZSB0aGUgdXNlciBpcyBub3QgZ29pbmcgdG8gc2V0IHVwIGFuIGFkZGl0aW9uYWwgc3N0YXRlCiAgICAgICAgICAgICAjIG1pcnJvciwgdGh1cyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGFkZGl0aW9uYWwgYXJ0aWZhY3RzIChmcm9tCkBAIC0zMTYsMTIgKzQyMywxNCBAQAogICAgICAgICAgICAgICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0uY3JlYXRlX2xvY2tlZF9zc3RhdGVfY2FjaGUobG9ja2Vkc2lnc19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3RhdGVfb3V0LCBkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRsc2JzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZGxzYnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmZpbGU9dGFza2xpc3RmbikKICAgICBlbHNlOgogICAgICAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLmNyZWF0ZV9sb2NrZWRfc3N0YXRlX2NhY2hlKGxvY2tlZHNpZ3NfcHJ1bmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3N0YXRlX291dCwgZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZGxzYnN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZGxzYnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJmaWxlPXRhc2tsaXN0Zm4pCiAKICAgICAjIFdlIGRvbid0IG5lZWQgc3N0YXRlIGRvX3BhY2thZ2UgZmlsZXMKICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhzc3RhdGVfb3V0KToKQEAgLTM0NiwzOCArNDU1LDk4IEBACiAgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcdCVzXG4nICUgKGNoa3N1bSwgb3MucGF0aC5yZWxwYXRoKGZuLCBiYXNlb3V0cGF0aCkpKQogfQogCi1kZWYgZXh0c2RrX2dldF9idWlsZHRvb2xzX2ZpbGVuYW1lKGQpOgotICAgIHJldHVybiAnKi1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSouc2gnCitkZWYgZ2V0X2N1cnJlbnRfYnVpbGR0b29scyhkKToKKyAgICAiIiJHZXQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgY3VycmVudCBidWlsZHRvb2xzIGluc3RhbGxlciIiIgorICAgIGltcG9ydCBnbG9iCisgICAgYnRmaWxlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1NES19ERVBMT1knLCBUcnVlKSwgJyotYnVpbGR0b29scy1uYXRpdmVzZGstc3RhbmRhbG9uZS0qLnNoJykpCisgICAgYnRmaWxlcy5zb3J0KGtleT1vcy5wYXRoLmdldGN0aW1lKQorICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKGJ0ZmlsZXNbLTFdKQorCitkZWYgZ2V0X3Nka19yZXF1aXJlZF91dGlsaXRpZXMoYnVpbGR0b29sc19mbiwgZCk6CisgICAgIiIiRmluZCByZXF1aXJlZCB1dGlsaXRpZXMgdGhhdCBhcmVuJ3QgcHJvdmlkZWQgYnkgdGhlIGJ1aWxkdG9vbHMiIiIKKyAgICBzYW5pdHlfcmVxdWlyZWRfdXRpbGl0aWVzID0gKGQuZ2V0VmFyKCdTQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBzYW5pdHlfcmVxdWlyZWRfdXRpbGl0aWVzLmFwcGVuZChkLmV4cGFuZCgnJHtCVUlMRF9QUkVGSVh9Z2NjJykpCisgICAgc2FuaXR5X3JlcXVpcmVkX3V0aWxpdGllcy5hcHBlbmQoZC5leHBhbmQoJyR7QlVJTERfUFJFRklYfWcrKycpKQorICAgIGJ1aWxkdG9vbHNfaW5zdGFsbGVyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdTREtfREVQTE9ZJywgVHJ1ZSksIGJ1aWxkdG9vbHNfZm4pCisgICAgZmlsZWxpc3QsIF8gPSBiYi5wcm9jZXNzLnJ1bignJXMgLWwnICUgYnVpbGR0b29sc19pbnN0YWxsZXIpCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbG9jYWxkYXRhLnNldFZhcignU0RLUEFUSCcsICcuJykKKyAgICBzZGtwYXRobmF0aXZlID0gbG9jYWxkYXRhLmdldFZhcignU0RLUEFUSE5BVElWRScsIFRydWUpCisgICAgc2RrYmluZGlycyA9IFtsb2NhbGRhdGEuZ2V0VmFyKCdiaW5kaXJfbmF0aXZlc2RrJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEuZ2V0VmFyKCdzYmluZGlyX25hdGl2ZXNkaycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgbG9jYWxkYXRhLmdldFZhcignYmFzZV9iaW5kaXJfbmF0aXZlc2RrJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEuZ2V0VmFyKCdiYXNlX3NiaW5kaXJfbmF0aXZlc2RrJywgVHJ1ZSldCisgICAgZm9yIGxpbmUgaW4gZmlsZWxpc3Quc3BsaXRsaW5lcygpOgorICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPiA1OgorICAgICAgICAgICAgZm4gPSBzcGxpdGxpbmVbNV0KKyAgICAgICAgICAgIGlmIG5vdCBmbi5zdGFydHN3aXRoKCcuLycpOgorICAgICAgICAgICAgICAgIGZuID0gJy4vJXMnICUgZm4KKyAgICAgICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoc2RrcGF0aG5hdGl2ZSk6CisgICAgICAgICAgICAgICAgcmVscHRoID0gJy8nICsgb3MucGF0aC5yZWxwYXRoKGZuLCBzZGtwYXRobmF0aXZlKQorICAgICAgICAgICAgICAgIGZvciBiaW5kaXIgaW4gc2RrYmluZGlyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVscHRoLnN0YXJ0c3dpdGgoYmluZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbHB0aCA9IG9zLnBhdGgucmVscGF0aChyZWxwdGgsIGJpbmRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbHB0aCBpbiBzYW5pdHlfcmVxdWlyZWRfdXRpbGl0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbml0eV9yZXF1aXJlZF91dGlsaXRpZXMucmVtb3ZlKHJlbHB0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuICcgJy5qb2luKHNhbml0eV9yZXF1aXJlZF91dGlsaXRpZXMpCiAKIGluc3RhbGxfdG9vbHMoKSB7CiAJaW5zdGFsbCAtZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9Ci0JbG5yICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8ke3NjcmlwdHJlbHBhdGh9L2RldnRvb2wgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS9kZXZ0b29sCi0JbG5yICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8ke3NjcmlwdHJlbHBhdGh9L3JlY2lwZXRvb2wgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS9yZWNpcGV0b29sCisJc2NyaXB0cz0iZGV2dG9vbCByZWNpcGV0b29sIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgcnVucWVtdSoiCisJZm9yIHNjcmlwdCBpbiAkc2NyaXB0czsgZG8KKwkJZm9yIHNjcmlwdGZuIGluIGBmaW5kICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8ke3NjcmlwdHJlbHBhdGh9IC1tYXhkZXB0aCAxIC1leGVjdXRhYmxlIC1uYW1lICIkc2NyaXB0ImA7IGRvCisJCQlsbnIgJHtzY3JpcHRmbn0gJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS9gYmFzZW5hbWUgJHNjcmlwdGZuYAorCQlkb25lCisJZG9uZQorCSMgV2UgY2FuJ3QgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyBhYm92ZSBiZWNhdXNlIGZpbGVzIGluIHRoZSBzeXNyb290IHdvbid0IGV4aXN0IGF0IHRoaXMgcG9pbnQKKwkjICh0aGV5IGdldCBwb3B1bGF0ZWQgZnJvbSBzc3RhdGUgb24gaW5zdGFsbGF0aW9uKQorCWlmIFsgIiR7U0RLX0lOQ0xVREVfVE9PTENIQUlOfSIgPT0gIjEiIF0gOyB0aGVuCisJCWJpbnJlbHBhdGg9JHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLFRydWUpLCBkLmdldFZhcignVE9QRElSJywgVHJ1ZSkpfQorCQlsbnIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9LyRiaW5yZWxwYXRoL3VuZnNkICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vdW5mc2QKKwlmaQogCXRvdWNoICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8uZGV2dG9vbGJhc2UKIAotCWxvY2FsY29uZj0ke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vY29uZi9sb2NhbC5jb25mCi0KIAkjIGZpbmQgbGF0ZXN0IGJ1aWxkdG9vbHMtdGFyYmFsbCBhbmQgaW5zdGFsbCBpdAotCWJ1aWxkdG9vbHNfcGF0aD1gbHMgLXQxICR7U0RLX0RFUExPWX0vJHtAZXh0c2RrX2dldF9idWlsZHRvb2xzX2ZpbGVuYW1lKGQpfSB8IGhlYWQgLW4xYAotCWluc3RhbGwgJGJ1aWxkdG9vbHNfcGF0aCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KLQotCSMgRm9yIG5vdyB0aGlzIGlzIHdoZXJlIHVuaW5hdGl2ZS5iYmNsYXNzIGV4cGVjdHMgdGhlIHRhcmJhbGwKLQljaGtzdW09YHNoYTI1NnN1bSAke1NES19ERVBMT1l9LyR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMudGFyLmJ6MiB8IGN1dCAtZiAxIC1kICcgJ2AKLQlpbnN0YWxsIC1kICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9kb3dubG9hZHMvdW5pbmF0aXZlLyRjaGtzdW0vCi0JaW5zdGFsbCAke1NES19ERVBMT1l9LyR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMudGFyLmJ6MiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZG93bmxvYWRzL3VuaW5hdGl2ZS8kY2hrc3VtLwotCWVjaG8gIlVOSU5BVElWRV9DSEVDS1NVTVske0JVSUxEX0FSQ0h9XSA9ICckY2hrc3VtJyIgPj4gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2NvbmYvbG9jYWwuY29uZgorCWluc3RhbGwgJHtTREtfREVQTE9ZfS8ke1NES19CVUlMRFRPT0xTX0lOU1RBTExFUn0gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CiAKIAlpbnN0YWxsIC1tIDA2NDQgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9leHQtc2RrLXByZXBhcmUucHkgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CiB9CiBkb19wb3B1bGF0ZV9zZGtfZXh0W2ZpbGUtY2hlY2tzdW1zXSArPSAiJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9leHQtc2RrLXByZXBhcmUucHk6VHJ1ZSIKIAotIyBTaW5jZSBiaXRiYWtlIHdvbid0IHJ1biBhcyByb290IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cnkgYW5kIGluc3RhbGwKLSMgdGhlIGV4dGVuc2libGUgc2RrIGFzIHJvb3QuCiBzZGtfZXh0X3ByZWluc3QoKSB7CisJIyBTaW5jZSBiaXRiYWtlIHdvbid0IHJ1biBhcyByb290IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cnkgYW5kIGluc3RhbGwKKwkjIHRoZSBleHRlbnNpYmxlIHNkayBhcyByb290LgogCWlmIFsgImBpZCAtdWAiID0gIjAiIF07IHRoZW4KIAkJZWNobyAiRVJST1I6IFRoZSBleHRlbnNpYmxlIHNkayBjYW5ub3QgYmUgaW5zdGFsbGVkIGFzIHJvb3QuIgogCQlleGl0IDEKIAlmaQorCWlmICEgY29tbWFuZCAtdiBsb2NhbGUgPiAvZGV2L251bGw7IHRoZW4KKwkJZWNobyAiRVJST1I6IFRoZSBpbnN0YWxsZXIgcmVxdWlyZXMgdGhlIGxvY2FsZSBjb21tYW5kLCBwbGVhc2UgaW5zdGFsbCBpdCBmaXJzdCIKKwkJZXhpdCAxCisJZmkKKyAgICAgICAgIyBDaGVjayBzZXR0aW5nIG9mIExDX0FMTCBzZXQgYWJvdmUKKwljYW5vbmljYWxpc2VkX2xvY2FsZT1gZWNobyAkTENfQUxMIHwgc2VkICdzL1VURi04L3V0ZjgvJ2AKKwlpZiAhIGxvY2FsZSAtYSB8IGdyZXAgLXEgJGNhbm9uaWNhbGlzZWRfbG9jYWxlIDsgdGhlbgorCQllY2hvICJFUlJPUjogdGhlIGluc3RhbGxlciByZXF1aXJlcyB0aGUgJExDX0FMTCBsb2NhbGUgdG8gYmUgaW5zdGFsbGVkIChidXQgbm90IHNlbGVjdGVkKSwgcGxlYXNlIGluc3RhbGwgaXQgZmlyc3QiCisJCWV4aXQgMQorCWZpCisJIyBUaGUgcmVsb2NhdGlvbiBzY3JpcHQgdXNlZCBieSBidWlsZHRvb2xzIGluc3RhbGxlciByZXF1aXJlcyBweXRob24KKwlpZiAhIGNvbW1hbmQgLXYgcHl0aG9uID4gL2Rldi9udWxsOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBUaGUgaW5zdGFsbGVyIHJlcXVpcmVzIHB5dGhvbiwgcGxlYXNlIGluc3RhbGwgaXQgZmlyc3QiCisJCWV4aXQgMQorCWZpCisJbWlzc2luZ191dGlscz0iIgorCWZvciB1dGlsIGluICR7U0RLX1JFUVVJUkVEX1VUSUxJVElFU307IGRvCisJCWlmICEgY29tbWFuZCAtdiAkdXRpbCA+IC9kZXYvbnVsbDsgdGhlbgorCQkJbWlzc2luZ191dGlscz0iJG1pc3NpbmdfdXRpbHMgJHV0aWwiCisJCWZpCisJZG9uZQorCWlmIFsgLW4gIiRtaXNzaW5nX3V0aWxzIiBdIDsgdGhlbgorCQllY2hvICJFUlJPUjogdGhlIFNESyByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1pc3NpbmcgdXRpbGl0aWVzLCBwbGVhc2UgaW5zdGFsbCB0aGVtOiAkbWlzc2luZ191dGlscyIKKwkJZXhpdCAxCisJZmkKIAlTREtfRVhURU5TSUJMRT0iMSIKIAlpZiBbICIkcHVibGlzaCIgPSAiMSIgXSA7IHRoZW4KIAkJRVhUUkFfVEFSX09QVElPTlM9IiRFWFRSQV9UQVJfT1BUSU9OUyAtLWV4Y2x1ZGU9ZXh0LXNkay1wcmVwYXJlLnB5IgpAQCAtMzkyLDE0ICs1NjEsMTYgQEAKIHNka19leHRfcG9zdGluc3QoKSB7CiAJcHJpbnRmICJcbkV4dHJhY3RpbmcgYnVpbGR0b29scy4uLlxuIgogCWNkICR0YXJnZXRfc2RrX2RpcgotCXByaW50ZiAiYnVpbGR0b29sc1xueSIgfCAuLypidWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lKiA+IC9kZXYvbnVsbCB8fCAoIHByaW50ZiAnRVJST1I6IGJ1aWxkdG9vbHMgaW5zdGFsbGF0aW9uIGZhaWxlZFxuJyA7IGV4aXQgMSApCisJZW52X3NldHVwX3NjcmlwdD0iJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLSR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisJcHJpbnRmICJidWlsZHRvb2xzXG55IiB8IC4vJHtTREtfQlVJTERUT09MU19JTlNUQUxMRVJ9ID4gYnVpbGR0b29scy5sb2cgfHwgeyBwcmludGYgJ0VSUk9SOiBidWlsZHRvb2xzIGluc3RhbGxhdGlvbiBmYWlsZWQ6XG4nIDsgY2F0IGJ1aWxkdG9vbHMubG9nIDsgZWNobyAicHJpbnRmICdFUlJPUjogdGhpcyBTREsgd2FzIG5vdCBmdWxseSBpbnN0YWxsZWQgYW5kIG5lZWRzIHJlaW5zdGFsbGluZ1xuJyIgPj4gJGVudl9zZXR1cF9zY3JpcHQgOyBleGl0IDEgOyB9CiAKIAkjIERlbGV0ZSB0aGUgYnVpbGR0b29scyB0YXIgZmlsZSBzaW5jZSBpdCB3b24ndCBiZSB1c2VkIGFnYWluCi0Jcm0gLi8qYnVpbGR0b29scy1uYXRpdmVzZGstc3RhbmRhbG9uZSouc2ggLWYKKwlybSAtZiAuLyR7U0RLX0JVSUxEVE9PTFNfSU5TVEFMTEVSfQorCSMgV2UgZG9uJ3QgbmVlZCB0aGUgbG9nIGVpdGhlciBzaW5jZSBpdCBzdWNjZWVkZWQKKwlybSAtZiBidWlsZHRvb2xzLmxvZwogCiAJIyBNYWtlIHN1cmUgd2hlbiB0aGUgdXNlciBzZXRzIHVwIHRoZSBlbnZpcm9ubWVudCwgdGhleSBhbHNvIGdldAogCSMgdGhlIGJ1aWxkdG9vbHMtdGFyYmFsbCB0b29scyBpbiB0aGVpciBwYXRoLgotCWVudl9zZXR1cF9zY3JpcHQ9IiR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cC0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9IgogCWVjaG8gIi4gJHRhcmdldF9zZGtfZGlyL2J1aWxkdG9vbHMvZW52aXJvbm1lbnQtc2V0dXAqIiA+PiAkZW52X3NldHVwX3NjcmlwdAogCiAJIyBBbGxvdyBiaXRiYWtlIGVudmlyb25tZW50IHNldHVwIHRvIGJlIHJhbiBhcyBwYXJ0IG9mIHRoaXMgc2RrLgpAQCAtNDIwLDcgKzU5MSw3IEBACiAJCSMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIGZpcnN0IHJhbiwgbm9yIHdpbGwgaXQgc2V0ICQxIHdoZW4KIAkJIyBzb3VyY2luZyBhIHNjcmlwdC4gVGhhdCBpcyB3aHkgdGhpcyBoYXMgdG8gbG9vayBzbyB1Z2x5LgogCQlMT0dGSUxFPSIkdGFyZ2V0X3Nka19kaXIvcHJlcGFyaW5nX2J1aWxkX3N5c3RlbS5sb2ciCi0JCXNoIC1jICIuIGJ1aWxkdG9vbHMvZW52aXJvbm1lbnQtc2V0dXAqID4gJExPR0ZJTEUgJiYgY2QgJHRhcmdldF9zZGtfZGlyL2BkaXJuYW1lICR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH1gICYmIHNldCAkdGFyZ2V0X3Nka19kaXIgJiYgLiAkdGFyZ2V0X3Nka19kaXIvJHtvZV9pbml0X2J1aWxkX2Vudl9wYXRofSAkdGFyZ2V0X3Nka19kaXIgPj4gJExPR0ZJTEUgJiYgcHl0aG9uICR0YXJnZXRfc2RrX2Rpci9leHQtc2RrLXByZXBhcmUucHkgJyR7U0RLX0lOU1RBTExfVEFSR0VUU30nID4+ICRMT0dGSUxFIDI+JjEiIHx8IHsgZWNobyAiRVJST1I6IFNESyBwcmVwYXJhdGlvbiBmYWlsZWQ6IHNlZSAkTE9HRklMRSI7IGVjaG8gInByaW50ZiAnRVJST1I6IHRoaXMgU0RLIHdhcyBub3QgZnVsbHkgaW5zdGFsbGVkIGFuZCBuZWVkcyByZWluc3RhbGxpbmdcbiciID4+ICRlbnZfc2V0dXBfc2NyaXB0IDsgZXhpdCAxIDsgfQorCQlzaCAtYyAiLiBidWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwKiA+ICRMT0dGSUxFICYmIGNkICR0YXJnZXRfc2RrX2Rpci9gZGlybmFtZSAke29lX2luaXRfYnVpbGRfZW52X3BhdGh9YCAmJiBzZXQgJHRhcmdldF9zZGtfZGlyICYmIC4gJHRhcmdldF9zZGtfZGlyLyR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH0gJHRhcmdldF9zZGtfZGlyID4+ICRMT0dGSUxFICYmIHB5dGhvbiAkdGFyZ2V0X3Nka19kaXIvZXh0LXNkay1wcmVwYXJlLnB5ICRMT0dGSUxFICcke1NES19JTlNUQUxMX1RBUkdFVFN9JyIgfHwgeyBlY2hvICJwcmludGYgJ0VSUk9SOiB0aGlzIFNESyB3YXMgbm90IGZ1bGx5IGluc3RhbGxlZCBhbmQgbmVlZHMgcmVpbnN0YWxsaW5nXG4nIiA+PiAkZW52X3NldHVwX3NjcmlwdCA7IGV4aXQgMSA7IH0KIAkJcm0gJHRhcmdldF9zZGtfZGlyL2V4dC1zZGstcHJlcGFyZS5weQogCWZpCiAJZWNobyBkb25lCkBAIC00MzgsMTIgKzYwOSwyMiBAQAogICAgICAgICBiYi5mYXRhbCgnVGhlIGV4dGVuc2libGUgU0RLIGNhbiBjdXJyZW50bHkgb25seSBiZSBidWlsdCBmb3IgdGhlIHNhbWUgYXJjaGl0ZWN0dXJlIGFzIHRoZSBtYWNoaW5lIGJlaW5nIGJ1aWx0IG9uIC0gU0RLX0FSQ0ggaXMgc2V0IHRvICVzIChsaWtlbHkgdmlhIHNldHRpbmcgU0RLTUFDSElORSkgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgYnVpbGQgbWFjaGluZSAoJXMpLiBVbmFibGUgdG8gY29udGludWUuJyAlIChkLmdldFZhcignU0RLX0FSQ0gnLCBUcnVlKSwgZC5nZXRWYXIoJ0JVSUxEX0FSQ0gnLCBUcnVlKSkpCiAKICAgICBkLnNldFZhcignU0RLX0lOU1RBTExfVEFSR0VUUycsIGdldF9zZGtfaW5zdGFsbF90YXJnZXRzKGQpKQorICAgIGJ1aWxkdG9vbHNfZm4gPSBnZXRfY3VycmVudF9idWlsZHRvb2xzKGQpCisgICAgZC5zZXRWYXIoJ1NES19SRVFVSVJFRF9VVElMSVRJRVMnLCBnZXRfc2RrX3JlcXVpcmVkX3V0aWxpdGllcyhidWlsZHRvb2xzX2ZuLCBkKSkKKyAgICBkLnNldFZhcignU0RLX0JVSUxEVE9PTFNfSU5TVEFMTEVSJywgYnVpbGR0b29sc19mbikKKyAgICBkLnNldFZhcignU0RLREVQTE9ZRElSJywgJyR7U0RLRVhUREVQTE9ZRElSfScpCiAKLSAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BvcHVsYXRlX3NkayIsIGQpCisgICAgcG9wdWxhdGVfc2RrX2NvbW1vbihkKQogfQogCiBkZWYgZ2V0X2V4dF9zZGtfZGVwZW5kcyhkKToKLSAgICByZXR1cm4gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAnZGVwZW5kcycsIFRydWUpICsgJyAnICsgZC5nZXRWYXJGbGFnKCdkb19idWlsZCcsICdkZXBlbmRzJywgVHJ1ZSkKKyAgICAjIE5vdGU6IHRoZSBkZXBzIHZhcmZsYWcgaXMgYSBsaXN0IG5vdCBhIHN0cmluZywgc28gd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGFuZD1GYWxzZQorICAgIGRlcHMgPSBkLmdldFZhckZsYWcoJ2RvX2ltYWdlX2NvbXBsZXRlJywgJ2RlcHMnLCBGYWxzZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgZGVwbGlzdCA9IFsnJXM6JXMnICUgKHBuLCBkZXApIGZvciBkZXAgaW4gZGVwc10KKyAgICBmb3IgdGFzayBpbiBbJ2RvX2ltYWdlX2NvbXBsZXRlJywgJ2RvX3Jvb3RmcycsICdkb19idWlsZCddOgorICAgICAgICBkZXBsaXN0LmV4dGVuZCgoZC5nZXRWYXJGbGFnKHRhc2ssICdkZXBlbmRzJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkpCisgICAgcmV0dXJuICcgJy5qb2luKGRlcGxpc3QpCiAKIHB5dGhvbiBkb19zZGtfZGVwZW5kcygpIHsKICAgICAjIFdlIGhhdmUgdG8gZG8gdGhpcyBzZXBhcmF0ZWx5IGluIGl0cyBvd24gdGFzayBzbyB3ZSBhdm9pZCByZWN1cnNpbmcgaW50bwpAQCAtNDcxLDcgKzY1Miw4IEBACiAKIGRvX3BvcHVsYXRlX3Nka19leHRbZGVwZW5kc10gPSAiJHtAZC5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAnZGVwZW5kcycsIEZhbHNlKX0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHRvb2xzLXRhcmJhbGw6ZG9fcG9wdWxhdGVfc2RrIHVuaW5hdGl2ZS10YXJiYWxsOmRvX3BvcHVsYXRlX3NkayBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7QCdtZXRhLXdvcmxkLXBrZ2RhdGE6ZG9fY29sbGVjdF9wYWNrYWdlZGF0YScgaWYgZC5nZXRWYXIoJ1NES19JTkNMVURFX1BLR0RBVEEnLCBUcnVlKSA9PSAnMScgZWxzZSAnJ30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7QCdtZXRhLXdvcmxkLXBrZ2RhdGE6ZG9fY29sbGVjdF9wYWNrYWdlZGF0YScgaWYgZC5nZXRWYXIoJ1NES19JTkNMVURFX1BLR0RBVEEnLCBUcnVlKSA9PSAnMScgZWxzZSAnJ30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0AnbWV0YS1leHRzZGstdG9vbGNoYWluOmRvX2xvY2tlZF9zaWdzJyBpZiBkLmdldFZhcignU0RLX0lOQ0xVREVfVE9PTENIQUlOJywgVHJ1ZSkgPT0gJzEnIGVsc2UgJyd9IgogCiBkb19wb3B1bGF0ZV9zZGtfZXh0W3JkZXBlbmRzXSArPSAiJHtAJyAnLmpvaW4oW3ggKyAnOmRvX2J1aWxkJyBmb3IgeCBpbiBkLmdldFZhcignU0RLX1RBUkdFVFMnLCBUcnVlKS5zcGxpdCgpXSl9IgogCkBAIC00ODQsNCArNjY2LDEzIEBACiAjIGFsd2F5cyBydW5zLgogZG9fcG9wdWxhdGVfc2RrX2V4dFtub3N0YW1wXSA9ICIxIgogCitTREtFWFRERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0tcG9wdWxhdGUtc2RrLWV4dCIKKworU1NUQVRFVEFTS1MgKz0gImRvX3BvcHVsYXRlX3Nka19leHQiCitTU1RBVEVfU0tJUF9DUkVBVElPTl90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAnMScKK2RvX3BvcHVsYXRlX3Nka19leHRbY2xlYW5kaXJzXSA9ICIke1NES0RFUExPWURJUn0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U0RLRVhUREVQTE9ZRElSfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U0RLX0RFUExPWX0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W3N0YW1wLWV4dHJhLWluZm9dID0gIiR7TUFDSElORX0iCisKIGFkZHRhc2sgcG9wdWxhdGVfc2RrX2V4dCBhZnRlciBkb19zZGtfZGVwZW5kcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24tZGlyLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcwppbmRleCBlYmZhNGIzLi5hMTFkYzM1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcwpAQCAtMSw1ICsxLDUgQEAKLVBZVEhPTl9CQVNFVkVSU0lPTiA/PSAiMi43IgotUFlUSE9OX0FCSSA/PSAiIgorUFlUSE9OX0JBU0VWRVJTSU9OID0gIjIuNyIKK1BZVEhPTl9BQkkgPSAiIgogUFlUSE9OX0RJUiA9ICJweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iCi1QWVRIT05fUE4gPSAicHl0aG9uJHtAJycgaWYgJyR7UFlUSE9OX0JBU0VWRVJTSU9OfScuc3RhcnRzd2l0aCgnMicpIGVsc2UgJzMnfSIKK1BZVEhPTl9QTiA9ICJweXRob24iCiBQWVRIT05fU0lURVBBQ0tBR0VTX0RJUiA9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24zLWRpci5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24zLWRpci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmIwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbjMtZGlyLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACitQWVRIT05fQkFTRVZFUlNJT04gPSAiMy41IgorUFlUSE9OX0FCSSA9ICJtIgorUFlUSE9OX0RJUiA9ICJweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iCitQWVRIT05fUE4gPSAicHl0aG9uMyIKK1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSID0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzCmluZGV4IDhlYzZiNzYuLmVmNDY4YjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzCkBAIC0xLDcgKzEsMTMgQEAKLVBZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjUiCi0KLWluaGVyaXQgcHl0aG9uLWRpcgoraW5oZXJpdCBweXRob24zLWRpcgogCiBQWVRIT049IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSIKIEVYVFJBTkFUSVZFUEFUSCArPSAiJHtQWVRIT05fUE59LW5hdGl2ZSIKLURFUEVORFMgKz0gIiAke1BZVEhPTl9QTn0tbmF0aXZlICIKK0RFUEVORFNfYXBwZW5kID0gIiAke1BZVEhPTl9QTn0tbmF0aXZlICIKKworIyBweXRob24tY29uZmlnIGFuZCBvdGhlciBzY3JpcHRzIGFyZSB1c2luZyBkaXN0dXRpbHMgbW9kdWxlcworIyB3aGljaCB3ZSBwYXRjaCB0byBhY2Nlc3MgdGhlc2UgdmFyaWFibGVzCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCisjIGF1dG9jb25mIG1hY3JvcyB3aWxsIHVzZSB0aGVpciBpbnRlcm5hbCBkZWZhdWx0IHByZWZlcmVuY2Ugb3RoZXJ3aXNlCitleHBvcnQgUFlUSE9OCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbm5hdGl2ZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcwppbmRleCA5NzAyOWRjLi40ZTAzODFiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbm5hdGl2ZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9ubmF0aXZlLmJiY2xhc3MKQEAgLTUsNCArNSwxMiBAQAogIyBQWVRIT05fRVhFQ1VUQUJMRSBpcyB1c2VkIGJ5IGNtYWtlCiBQWVRIT05fRVhFQ1VUQUJMRT0iJHtQWVRIT059IgogRVhUUkFOQVRJVkVQQVRIICs9ICIke1BZVEhPTl9QTn0tbmF0aXZlIgotREVQRU5EUyArPSAiICR7UFlUSE9OX1BOfS1uYXRpdmUgIgorREVQRU5EU19hcHBlbmQgPSAiICR7UFlUSE9OX1BOfS1uYXRpdmUgIgorCisjIHB5dGhvbi1jb25maWcgYW5kIG90aGVyIHNjcmlwdHMgYXJlIHVzaW5nIGRpc3R1dGlscyBtb2R1bGVzCisjIHdoaWNoIHdlIHBhdGNoIHRvIGFjY2VzcyB0aGVzZSB2YXJpYWJsZXMKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKKyMgYXV0b2NvbmYgbWFjcm9zIHdpbGwgdXNlIHRoZWlyIGludGVybmFsIGRlZmF1bHQgcHJlZmVyZW5jZSBvdGhlcndpc2UKK2V4cG9ydCBQWVRIT04KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11LmJiY2xhc3MKaW5kZXggNzU3MzlkYi4uZjJkNGQxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11LmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11LmJiY2xhc3MKQEAgLTQsNiArNCwxMSBAQAogIwogCiBkZWYgcWVtdV90YXJnZXRfYmluYXJ5KGRhdGEpOgorICAgIHBhY2thZ2VfYXJjaCA9IGRhdGEuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBUcnVlKQorICAgIHFlbXVfdGFyZ2V0X2JpbmFyeSA9IChkYXRhLmdldFZhcigiUUVNVV9UQVJHRVRfQklOQVJZXyVzIiAlIHBhY2thZ2VfYXJjaCwgVHJ1ZSkgb3IgIiIpCisgICAgaWYgcWVtdV90YXJnZXRfYmluYXJ5OgorICAgICAgICByZXR1cm4gcWVtdV90YXJnZXRfYmluYXJ5CisKICAgICB0YXJnZXRfYXJjaCA9IGRhdGEuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpCiAgICAgaWYgdGFyZ2V0X2FyY2ggaW4gKCJpNDg2IiwgImk1ODYiLCAiaTY4NiIpOgogICAgICAgICB0YXJnZXRfYXJjaCA9ICJpMzg2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11Ym9vdC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11Ym9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Y2M5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FlbXVib290LmJiY2xhc3MKQEAgLTAsMCArMSw4MiBAQAorIyBIZWxwIHJ1bnFlbXUgYm9vdCB0YXJnZXQgYm9hcmQsICJRQiIgbWVhbnMgUWVtdSBCb290LCB0aGUgZm9sbG93aW5nCisjIHZhcnMgY2FuIGJlIHNldCBpbiBjb25mIGZpbGVzLCBzdWNoIGFzIDxic3AuY29uZj4gdG8gbWFrZSBpdCBjYW4gYmUKKyMgYm9vdCBieSBydW5xZW11OgorIworIyBRQl9TWVNURU1fTkFNRTogcWVtdSBuYW1lLCBlLmcuLCAicWVtdS1zeXN0ZW0taTM4NiIKKyMgUUJfT1BUX0FQUEVORDogb3B0aW9ucyB0byBhcHBlbmQgdG8gcWVtdSwgZS5nLiwgIi1zaG93LWN1cnNvciIKKyMgUUJfREVGQVVMVF9LRVJORUw6IGRlZmF1bHQga2VybmVsIHRvIGJvb3QsIGUuZy4sICJiekltYWdlIgorIyBRQl9ERUZBVUxUX0ZTVFlQRTogZGVmYXVsdCBGU1RZUEUgdG8gYm9vdCwgZS5nLiwgImV4dDQiCisjIFFCX01FTTogbWVtb3J5LCBlLmcuLCAiLW0gNTEyIgorIyBRQl9NQUNISU5FOiBxZW11IG1hY2hpbmUsIGUuZy4sICItbWFjaGluZSB2aXJ0IgorIyBRQl9DUFU6IHFlbXUgY3B1LCBlLmcuLCAiLWNwdSBxZW11MzIiCisjIFFCX0NQVV9LVk06IHRoZSBzaW1pbGFyIHRvIFFCX0NQVSwgYnV0IHVzZWQgd2hlbiBrdm0sIGUuZy4sICctY3B1IGt2bTY0JywKKyMgICAgICAgICAgICAgc2V0IGl0IHdoZW4gc3VwcG9ydCBrdm0uCisjIFFCX0tFUk5FTF9DTURMSU5FX0FQUEVORDogb3B0aW9ucyB0byBhcHBlbmQgdG8ga2VybmVsJ3MgLWFwcGVuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgZS5nLiwgImNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkiCisjIFFCX0RUQjogcWVtdSBkdGIgbmFtZQorIyBRQl9BVURJT19EUlY6IHFlbXUgYXVkaW8gZHJpdmVyLCBlLmcuLCAiYWxzYSIsIHNldCBpdCB3aGVuIHN1cHBvcnQgYXVkaW8KKyMgUUJfQVVESU9fT1BUOiBxZW11IGF1ZGlvIG9wdGlvbiwgZS5nLiwgIi1zb3VuZGh3IGFjOTcsZXMxMzcwIiwgdXNlZAorIyAgICAgICAgICAgICAgIHdoZW4gUUJfQVVESU9fRFJWIGlzIHNldC4KKyMgUUJfS0VSTkVMX1JPT1Q6IGtlcm5lbCdzIHJvb3QsIGUuZy4sIC9kZXYvdmRhCisjIFFCX1RBUF9PUFQ6IG5ldG93cmsgb3B0aW9uIGZvciAndGFwJyBtb2RlLCBlLmcuLAorIyAgICAgICAgICAgICAiLW5ldGRldiB0YXAsaWQ9bmV0MCxpZm5hbWU9QFRBUEAsc2NyaXB0PW5vLGRvd25zY3JpcHQ9bm8gLWRldmljZSB2aXJ0aW8tbmV0LWRldmljZSxuZXRkZXY9bmV0MCIKKyMgICAgICAgICAgICAgIE5vdGUsIHJ1bnFlbXUgd2lsbCByZXBsYWNlICJAVEFQQCIgd2l0aCB0aGUgb25lIHdoaWNoIGlzIHVzZWQsIHN1Y2ggYXMgdGFwMCwgdGFwMSAuLi4KKyMgUUJfU0xJUlBfT1BUOiBuZXR3b3JrIG9wdGlvbiBmb3IgU0xJUlAgbW9kZSwgZS5nLiwKKyMgICAgICAgICAgICAgIi1uZXRkZXYgdXNlcixpZD1uZXQwIC1kZXZpY2UgdmlydGlvLW5ldC1kZXZpY2UsbmV0ZGV2PW5ldDAiCisjIFFCX1JPT1RGU19PUFQ6IHVzZWQgYXMgcm9vdGZzLCBlLmcuLAorIyAgICAgICAgICAgICAgICItZHJpdmUgaWQ9ZGlzazAsZmlsZT1AUk9PVEZTQCxpZj1ub25lLGZvcm1hdD1yYXcgLWRldmljZSB2aXJ0aW8tYmxrLWRldmljZSxkcml2ZT1kaXNrMCIKKyMgICAgICAgICAgICAgIE5vdGUsIHJ1bnFlbXUgd2lsbCByZXBsYWNlICJAUk9PVEZTQCIgd2l0aCB0aGUgb25lIHdoaWNoIGlzIHVzZWQsIHN1Y2ggYXMgY29yZS1pbWFnZS1taW5pbWFsLXFlbXVhcm02NC5leHQ0LgorIyBRQl9TRVJJQUxfT1BUOiBzZXJpYWwgcG9ydCwgZS5nLiwgIi1zZXJpYWwgbW9uOnN0ZGlvIgorIyBRQl9UQ1BTRVJJQUxfT1BUOiB0Y3Agc2VyaWFsIHBvcnQgb3B0aW9uLCBlLmcuLAorIyAgICAgICAgICAgICAgICAgICAiIC1kZXZpY2UgdmlydGlvLXNlcmlhbC1kZXZpY2UgLWNoYXJkZXYgc29ja2V0LGlkPXZpcnRjb24scG9ydD1AUE9SVEAsaG9zdD0xMjcuMC4wLjEgLWRldmljZSB2aXJ0Y29uc29sZSxjaGFyZGV2PXZpcnRjb24iCisjICAgICAgICAgICAgICAgICAgIE5vdGUsIHJ1bnFlbXUgd2lsbCByZXBsYWNlICJAUE9SVEAiIHdpdGggdGhlIHBvcnQgbnVtYmVyIHdoaWNoIGlzIHVzZWQuCisjCisjIFVzYWdlOgorIyBJTUFHRV9DTEFTU0VTICs9ICJxZW11Ym9vdCIKKyMgU2VlICJydW5xZW11IGhlbHAiIGZvciBtb3JlIGluZm8KKworUUJfTUVNID89ICItbSAyNTYiCitRQl9TRVJJQUxfT1BUID89ICItc2VyaWFsIG1vbjpzdGRpbyAtc2VyaWFsIG51bGwiCitRQl9ERUZBVUxUX0tFUk5FTCA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfSIKK1FCX0RFRkFVTFRfRlNUWVBFID89ICJleHQ0IgorUUJfT1BUX0FQUEVORCA/PSAiLXNob3ctY3Vyc29yIgorCisjIENyZWF0ZSBxZW11Ym9vdC5jb25mCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAid3JpdGVfcWVtdWJvb3RfY29uZjsgIgorCitweXRob24gd3JpdGVfcWVtdWJvb3RfY29uZigpIHsKKyAgICBpbXBvcnQgY29uZmlncGFyc2VyCisKKyAgICBidWlsZF92YXJzID0gWydNQUNISU5FJywgJ1RVTkVfQVJDSCcsICdERVBMT1lfRElSX0lNQUdFJywgXAorICAgICAgICAgICAgICAgICdLRVJORUxfSU1BR0VUWVBFJywgJ0lNQUdFX05BTUUnLCAnSU1BR0VfTElOS19OQU1FJywgXAorICAgICAgICAgICAgICAgICdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgXAorICAgICAgICAgICAgICAgICdTVEFHSU5HX0RJUl9IT1NUJ10KKworICAgICMgVmFycyBmcm9tIGJzcAorICAgIHFiX3ZhcnMgPSBbXQorICAgIGZvciBrIGluIGQua2V5cygpOgorICAgICAgICBpZiBrLnN0YXJ0c3dpdGgoJ1FCXycpOgorICAgICAgICAgICAgcWJfdmFycy5hcHBlbmQoaykKKworICAgIHFlbXVib290ID0gIiVzLyVzLnFlbXVib290LmNvbmYiICUgKGQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSksIGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSkpCisgICAgcWVtdWJvb3RfbGluayA9ICIlcy8lcy5xZW11Ym9vdC5jb25mIiAlIChkLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpLCBkLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSkpCisgICAgY2YgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICBjZi5hZGRfc2VjdGlvbignY29uZmlnX2JzcCcpCisgICAgZm9yIGsgaW4gYnVpbGRfdmFycyArIHFiX3ZhcnM6CisgICAgICAgIGNmLnNldCgnY29uZmlnX2JzcCcsIGssICclcycgJSBkLmdldFZhcihrLCBUcnVlKSkKKworICAgICMgUUJfREVGQVVMVF9LRVJORUwncyB2YWx1ZSBvZiBLRVJORUxfSU1BR0VUWVBFIGlzIHRoZSBuYW1lIG9mIGEgc3ltbGluaworICAgICMgdG8gdGhlIGtlcm5lbCBmaWxlLCB3aGljaCBoaW5kZXJzIHJlbG9jYXRhYmlsaXR5IG9mIHRoZSBxYiBjb25mLgorICAgICMgUmVhZCB0aGUgbGluayBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBmdWxsIGZpbGVuYW1lIG9mIHRoZSB0YXJnZXQuCisgICAga2VybmVsX2xpbmsgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0RFUExPWV9ESVJfSU1BR0UnLCBUcnVlKSwgZC5nZXRWYXIoJ1FCX0RFRkFVTFRfS0VSTkVMJywgVHJ1ZSkpCisgICAga2VybmVsID0gb3MucGF0aC5yZWFscGF0aChrZXJuZWxfbGluaykKKyAgICBjZi5zZXQoJ2NvbmZpZ19ic3AnLCAnUUJfREVGQVVMVF9LRVJORUwnLCBrZXJuZWwpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHFlbXVib290KSkKKyAgICB3aXRoIG9wZW4ocWVtdWJvb3QsICd3JykgYXMgZjoKKyAgICAgICAgY2Yud3JpdGUoZikKKworICAgIGlmIG9zLnBhdGgubGV4aXN0cyhxZW11Ym9vdF9saW5rKToKKyAgICAgICBvcy5yZW1vdmUocWVtdWJvb3RfbGluaykKKyAgICBvcy5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUocWVtdWJvb3QpLCBxZW11Ym9vdF9saW5rKQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcwppbmRleCAyOTU2MTFmLi5hZGQzNGRmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcwpAQCAtOCw3ICs4LDcgQEAKICAgICAgICAgcmV0dXJuCiAKICAgICBmb3IgdmFyIGluIGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfYmFkcnVudGltZXZhcnMiLCBUcnVlKS5zcGxpdCgpOgotICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIDApCisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgRmFsc2UpCiAgICAgICAgIGlmIHZhbCBhbmQgdmFsICE9IGNmZ2RhdGEuZ2V0KHZhcik6CiAgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSAlc18ke1BOfSIgJSAodmFyLCB2YXIpLCBkKQogCkBAIC0xNiwxMSArMTYsMTEgQEAKIF9fcmVjaXBlX3Nhbml0eV9yZXFkaWZmdmFycyA9ICIiCiBkZWYgcmVxX3ZhcnMoY2ZnZGF0YSwgZCk6CiAgICAgZm9yIHZhciBpbiBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlcXZhcnMiLCBUcnVlKS5zcGxpdCgpOgotICAgICAgICBpZiBub3QgZC5nZXRWYXIodmFyLCAwKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKHZhciwgRmFsc2UpOgogICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgc2V0IiAlIHZhciwgZCkKIAogICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZXFkaWZmdmFycyIsIFRydWUpLnNwbGl0KCk6Ci0gICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgMCkKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCBGYWxzZSkKICAgICAgICAgY2ZndmFsID0gY2ZnZGF0YS5nZXQodmFyKQogCiAgICAgICAgIGlmIG5vdCB2YWw6CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBkZWZpbmVkIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGRlZmF1bHQgKCVzKSIgJSAodmFyLCBjZmd2YWwpLCBkKQogCiBkZWYgdmFyX3JlbmFtZXNfb3ZlcndyaXRlKGNmZ2RhdGEsIGQpOgotICAgIHJlbmFtZXMgPSBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCAwKQorICAgIHJlbmFtZXMgPSBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCBGYWxzZSkKICAgICBpZiByZW5hbWVzOgogICAgICAgICBmb3IgKGtleSwgbmV3a2V5LCBvbGR2YWx1ZSwgbmV3dmFsdWUpIGluIHJlbmFtZXM6CiAgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZSBhbmQgb2xkdmFsdWUgIT0gY2ZnZGF0YS5nZXQobmV3a2V5KToKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgaWYgY2ZnLmZpbmQoaSkgIT0gLTE6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGZvciBjbHNmaWxlIGluIGQuZ2V0VmFyKCJfX2luaGVyaXRfY2FjaGUiLCAwKToKKyAgICBmb3IgY2xzZmlsZSBpbiBkLmdldFZhcigiX19pbmhlcml0X2NhY2hlIiwgRmFsc2UpOgogICAgICAgICAoYmFzZSwgXykgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoY2xzZmlsZSkpCiAgICAgICAgIGlmIGNmZy5maW5kKCIlc19kb19jb25maWd1cmUiICUgYmFzZSkgIT0gLTE6CiAgICAgICAgICAgICBfX25vdGUoImF1dG90b29sc19iYXNlIHVzYWdlIG5lZWRzIHZlcmlmaWNhdGlvbiwgc3BvdHRlZCAlc19kb19jb25maWd1cmUiICUgYmFzZSwgZCkKQEAgLTYwLDcgKzYwLDcgQEAKIGRlZiBjYW5fZGVsZXRlX0ZJTEVTUEFUSChjZmdkYXRhLCBkKToKICAgICBleHBlY3RlZCA9IGNmZ2RhdGEuZ2V0KCJGSUxFU1BBVEgiKQogICAgIGV4cGVjdGVkcGF0aHMgPSBkLmV4cGFuZChleHBlY3RlZCkKLSAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoIkZJTEVTUEFUSCIsIDApCisgICAgdW5leHBhbmRlZCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCBGYWxzZSkKICAgICBmaWxlc3BhdGggPSBkLmdldFZhcigiRklMRVNQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKQogICAgIGZpbGVzcGF0aCA9IFtvcy5wYXRoLm5vcm1wYXRoKGYpIGZvciBmIGluIGZpbGVzcGF0aCBpZiBvcy5wYXRoLmV4aXN0cyhmKV0KICAgICBmb3IgZnAgaW4gZmlsZXNwYXRoOgpAQCAtNzMsNyArNzMsNyBAQAogZGVmIGNhbl9kZWxldGVfRklMRVNESVIoY2ZnZGF0YSwgZCk6CiAgICAgZXhwZWN0ZWQgPSBjZmdkYXRhLmdldCgiRklMRVNESVIiKQogICAgICNleHBlY3RlZCA9ICIke0BiYi51dGlscy53aGljaChkLmdldFZhcignRklMRVNQQVRIJywgVHJ1ZSksICcuJyl9IgotICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcigiRklMRVNESVIiLCAwKQorICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcigiRklMRVNESVIiLCBGYWxzZSkKICAgICBpZiB1bmV4cGFuZGVkIGlzIE5vbmU6CiAgICAgICAgIHJldHVybiBGYWxzZQogCkBAIC05MCw3ICs5MCw3IEBACiAgICAgZm9yIGsgaW4gWyJTIiwgIlBWIiwgIlBOIiwgIkRFU0NSSVBUSU9OIiwgIkRFUEVORFMiLAogICAgICAgICAgICAgICAiU0VDVElPTiIsICJQQUNLQUdFUyIsICJFWFRSQV9PRUNPTkYiLCAiRVhUUkFfT0VNQUtFIl06CiAgICAgI2ZvciBrIGluIGNmZ2RhdGE6Ci0gICAgICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcihrLCAwKQorICAgICAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoaywgRmFsc2UpCiAgICAgICAgIGNmZ3VuZXhwYW5kZWQgPSBjZmdkYXRhLmdldChrKQogICAgICAgICBpZiBub3QgY2ZndW5leHBhbmRlZDoKICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgIyhjYW5fdXNlX2F1dG90b29sc19iYXNlLCAiY2FuZGlkYXRlIGZvciB1c2Ugb2YgYXV0b3Rvb2xzX2Jhc2UiKSwKICAgICAgICAgKGluY29ycmVjdF9ub25lbXB0eV9QQUNLQUdFUywgIm5hdGl2ZSBvciBjcm9zcyByZWNpcGUgd2l0aCBub24tZW1wdHkgUEFDS0FHRVMiKSwKICAgICBdCi0gICAgY2ZnZGF0YSA9IGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIDApCisgICAgY2ZnZGF0YSA9IGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIEZhbHNlKQogCiAgICAgZm9yIChmdW5jLCBtc2cpIGluIHNhbml0eWNoZWNrczoKICAgICAgICAgaWYgZnVuYyhjZmdkYXRhLCBkKToKQEAgLTE0Myw4ICsxNDMsOCBAQAogCiAgICAgY2ZnZGF0YSA9IHt9CiAgICAgZm9yIGsgaW4gZC5rZXlzKCk6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGQuZ2V0VmFyKGssIDApLCBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCk6Ci0gICAgICAgICAgICBjZmdkYXRhW2tdID0gZC5nZXRWYXIoaywgMCkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZC5nZXRWYXIoaywgRmFsc2UpLCBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCk6CisgICAgICAgICAgICBjZmdkYXRhW2tdID0gZC5nZXRWYXIoaywgRmFsc2UpCiAKICAgICBkLnNldFZhcigiX19yZWNpcGVfc2FuaXR5X2NmZ2RhdGEiLCBjZmdkYXRhKQogICAgICNkLnNldFZhcigiX19yZWNpcGVfc2FuaXR5X2NmZ2RhdGEiLCBkKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZXBvcnQtZXJyb3IuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVwb3J0LWVycm9yLmJiY2xhc3MKaW5kZXggODJiNWJjZC4uNWJiMjMxZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZXBvcnQtZXJyb3IuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCkBAIC00Miw4ICs0Miw4IEBACiAgICAgICAgICAgICBkYXRhWydkaXN0cm8nXSA9IGUuZGF0YS5nZXRWYXIoIkRJU1RSTyIsIFRydWUpCiAgICAgICAgICAgICBkYXRhWyd0YXJnZXRfc3lzJ10gPSBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfU1lTIiwgVHJ1ZSkKICAgICAgICAgICAgIGRhdGFbJ2ZhaWx1cmVzJ10gPSBbXQotICAgICAgICAgICAgZGF0YVsnY29tcG9uZW50J10gPSBlLmdldFBrZ3MoKVswXQotICAgICAgICAgICAgZGF0YVsnYnJhbmNoX2NvbW1pdCddID0gYmFzZV9kZXRlY3RfYnJhbmNoKGUuZGF0YSkgKyAiOiAiICsgYmFzZV9kZXRlY3RfcmV2aXNpb24oZS5kYXRhKQorICAgICAgICAgICAgZGF0YVsnY29tcG9uZW50J10gPSAiICIuam9pbihlLmdldFBrZ3MoKSkKKyAgICAgICAgICAgIGRhdGFbJ2JyYW5jaF9jb21taXQnXSA9IHN0cihiYXNlX2RldGVjdF9icmFuY2goZS5kYXRhKSkgKyAiOiAiICsgc3RyKGJhc2VfZGV0ZWN0X3JldmlzaW9uKGUuZGF0YSkpCiAgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQogICAgICAgICAgICAgZXJyb3JyZXBvcnRfc2F2ZWRhdGEoZSwgZGF0YSwgImVycm9yLXJlcG9ydC50eHQiKQogICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQpAQCAtNTgsNiArNTgsMTMgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGxvZ0ZpbGUgPSBjb2RlY3Mub3Blbihsb2csICdyJywgJ3V0Zi04JykKICAgICAgICAgICAgICAgICAgICAgbG9nZGF0YSA9IGxvZ0ZpbGUucmVhZCgpCisKKyAgICAgICAgICAgICAgICAgICAgIyBSZXBsYWNlIGhvc3Qtc3BlY2lmaWMgcGF0aHMgc28gdGhlIGxvZ3MgYXJlIGNsZWFuZXIKKyAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gKCJUT1BESVIiLCAiVE1QRElSIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gZS5kYXRhLmdldFZhcihkLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dkYXRhID0gbG9nZGF0YS5yZXBsYWNlKHMsIGQpCisKICAgICAgICAgICAgICAgICAgICAgbG9nRmlsZS5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICBsb2dkYXRhID0gIlVuYWJsZSB0byByZWFkIGxvZyBmaWxlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcwppbmRleCBjNjQ3ZDg4Li5iNzFhOWQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcwpAQCAtMTUsNiArMTUsOSBAQAogIyB0byB0cnkgYW5kIHJlZHVjZSBkaXNrIHVzYWdlCiBCQl9TQ0hFRFVMRVIgPz0gImNvbXBsZXRpb24iCiAKKyMgUnVuIHRoZSBybV93b3JrIHRhc2sgaW4gdGhlIGlkbGUgc2NoZWR1bGluZyBjbGFzcworQkJfVEFTS19JT05JQ0VfTEVWRUxfdGFzay1ybV93b3JrID0gIjMuMCIKKwogUk1XT1JLX09SSUdfVEFTSyA6PSAiJHtCQl9ERUZBVUxUX1RBU0t9IgogQkJfREVGQVVMVF9UQVNLID0gInJtX3dvcmtfYWxsIgogCkBAIC02MywxNCArNjYsMTAgQEAKICAgICAgICAgICAgICAgICBpPWR1bW15CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKmRvX3Jvb3RmcyopCi0gICAgICAgICAgICAgICBpPWR1bW15Ci0gICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICpkb19pbWFnZSopCi0gICAgICAgICAgICAgICBpPWR1bW15Ci0gICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpkb19yb290ZnMqfCpkb19pbWFnZSp8KmRvX2Jvb3RpbWcqfCpkb19ib290ZGlyZWN0ZGlzayp8KmRvX3ZtaW1nKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgKmRvX2J1aWxkKikKICAgICAgICAgICAgICAgICBpPWR1bW15CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTExOSw2ICsxMTgsOCBAQAogcm1fd29ya19yb290ZnNbY2xlYW5kaXJzXSA9ICIke1dPUktESVJ9L3Jvb3RmcyIKIAogcHl0aG9uICgpIHsKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKToKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJNX1dPUktfRVhDTFVERSIsICcgJyArIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQogICAgICMgSWYgdGhlIHJlY2lwZSBuYW1lIGlzIGluIHRoZSBSTV9XT1JLX0VYQ0xVREUsIHNraXAgdGhlIHJlY2lwZS4KICAgICBleGNsdWRlcyA9IChkLmdldFZhcigiUk1fV09SS19FWENMVURFIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmcy1wb3N0Y29tbWFuZHMuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzLXBvc3Rjb21tYW5kcy5iYmNsYXNzCmluZGV4IDk1ZDI4YWYuLjBjN2NlZWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzLXBvc3Rjb21tYW5kcy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzLXBvc3Rjb21tYW5kcy5iYmNsYXNzCkBAIC0xNSwxMyArMTUsMTMgQEAKIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsICJyZWFkX29ubHlfcm9vdGZzX2hvb2s7ICIsICIiLGQpfScKIAogIyBXcml0ZSBtYW5pZmVzdAotSU1BR0VfTUFOSUZFU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5tYW5pZmVzdCIKK0lNQUdFX01BTklGRVNUID0gIiR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5tYW5pZmVzdCIKIFJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgPSsgIndyaXRlX2ltYWdlX21hbmlmZXN0IDsgIgogIyBTZXQgZGVmYXVsdCBwb3N0aW5zdCBsb2cgZmlsZQogUE9TVElOU1RfTE9HRklMRSA/PSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvcG9zdGluc3RhbGwubG9nIgogIyBTZXQgZGVmYXVsdCB0YXJnZXQgZm9yIHN5c3RlbWQgaW1hZ2VzCiBTWVNURU1EX0RFRkFVTFRfVEFSR0VUID89ICcke0BiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAieDExLWJhc2UiLCAiZ3JhcGhpY2FsLnRhcmdldCIsICJtdWx0aS11c2VyLnRhcmdldCIsIGQpfScKLVJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3RlbWQiLCAic2V0X3N5c3RlbWRfZGVmYXVsdF90YXJnZXQ7ICIsICIiLCBkKX0nCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgInNldF9zeXN0ZW1kX2RlZmF1bHRfdGFyZ2V0OyBzeXN0ZW1kX2NyZWF0ZV91c2VyczsiLCAiIiwgZCl9JwogCiBST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnZW1wdHlfdmFyX3ZvbGF0aWxlOycKIApAQCAtMzAsNyArMzAsMzQgQEAKIFNTSF9ESVNBQkxFX0ROU19MT09LVVAgPz0gIiBzc2hfZGlzYWJsZV9kbnNfbG9va3VwIDsgIgogUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRfYXBwZW5kX3FlbXVhbGwgPSAiJHtTU0hfRElTQUJMRV9ETlNfTE9PS1VQfSIKIAotCitzeXN0ZW1kX2NyZWF0ZV91c2VycyAoKSB7CisJZm9yIGNvbmZmaWxlIGluICR7SU1BR0VfUk9PVEZTfS91c3IvbGliL3N5c3VzZXJzLmQvc3lzdGVtZC5jb25mICR7SU1BR0VfUk9PVEZTfS91c3IvbGliL3N5c3VzZXJzLmQvc3lzdGVtZC1yZW1vdGUuY29uZjsgZG8KKwkJWyAtZSAkY29uZmZpbGUgXSB8fCBjb250aW51ZQorCQlncmVwIC12ICJeIyIgJGNvbmZmaWxlIHwgc2VkIC1lICcvXiQvZCcgfCB3aGlsZSByZWFkIHR5cGUgbmFtZSBpZCBjb21tZW50OyBkbworCQlpZiBbICIkdHlwZSIgPSAidSIgXTsgdGhlbgorCQkJdXNlcmFkZF9wYXJhbXM9Ii0tc2hlbGwgL3NiaW4vbm9sb2dpbiIKKwkJCVsgIiRpZCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLXVpZCAkaWQiCisJCQlbICIkY29tbWVudCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLWNvbW1lbnQgJGNvbW1lbnQiCisJCQl1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tc3lzdGVtICRuYW1lIgorCQkJZXZhbCB1c2VyYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJHVzZXJhZGRfcGFyYW1zIHx8IHRydWUKKwkJZWxpZiBbICIkdHlwZSIgPSAiZyIgXTsgdGhlbgorCQkJZ3JvdXBhZGRfcGFyYW1zPSIiCisJCQlbICIkaWQiICE9ICItIiBdICYmIGdyb3VwYWRkX3BhcmFtcz0iJGdyb3VwYWRkX3BhcmFtcyAtLWdpZCAkaWQiCisJCQlncm91cGFkZF9wYXJhbXM9IiRncm91cGFkZF9wYXJhbXMgLS1zeXN0ZW0gJG5hbWUiCisJCQlldmFsIGdyb3VwYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJGdyb3VwYWRkX3BhcmFtcyB8fCB0cnVlCisJCWVsaWYgWyAiJHR5cGUiID0gIm0iIF07IHRoZW4KKwkJCWdyb3VwPSRpZAorCQkJaWYgWyAhIGBncmVwIC1xICJeJHtncm91cH06IiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2dyb3VwYCBdOyB0aGVuCisJCQkJZXZhbCBncm91cGFkZCAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC0tc3lzdGVtICRncm91cAorCQkJZmkKKwkJCWlmIFsgISBgZ3JlcCAtcSAiXiR7bmFtZX06IiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3Bhc3N3ZGAgXTsgdGhlbgorCQkJCWV2YWwgdXNlcmFkZCAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC0tc2hlbGwgL3NiaW4vbm9sb2dpbiAtLXN5c3RlbSAkbmFtZQorCQkJZmkKKwkJCWV2YWwgdXNlcm1vZCAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC1hIC1HICRncm91cCAkbmFtZQorCQlmaQorCQlkb25lCisJZG9uZQorfQogCiAjCiAjIEEgaG9vayBmdW5jdGlvbiB0byBzdXBwb3J0IHJlYWQtb25seS1yb290ZnMgSU1BR0VfRkVBVFVSRVMKQEAgLTczLDI3ICsxMDAsNiBAQAogCQkJJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2gKIAkJZmkKIAlmaQotCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgInRydWUiLCAiZmFsc2UiLCBkKX07IHRoZW4KLQkgICAgIyBVcGRhdGUgdXNlciBkYXRhYmFzZSBmaWxlcyBzbyB0aGF0IHNlcnZpY2VzIGRvbid0IGZhaWwgZm9yIGEgcmVhZC1vbmx5IHN5c3RlbWQgc3lzdGVtCi0JICAgIGZvciBjb25mZmlsZSBpbiAke0lNQUdFX1JPT1RGU30vdXNyL2xpYi9zeXN1c2Vycy5kL3N5c3RlbWQuY29uZiAke0lNQUdFX1JPT1RGU30vdXNyL2xpYi9zeXN1c2Vycy5kL3N5c3RlbWQtcmVtb3RlLmNvbmY7IGRvCi0JCVsgLWUgJGNvbmZmaWxlIF0gfHwgY29udGludWUKLQkJZ3JlcCAtdiAiXiMiICRjb25mZmlsZSB8IHNlZCAtZSAnL14kL2QnIHwgd2hpbGUgcmVhZCB0eXBlIG5hbWUgaWQgY29tbWVudDsgZG8KLQkJICAgIGlmIFsgIiR0eXBlIiA9ICJ1IiBdOyB0aGVuCi0JCQl1c2VyYWRkX3BhcmFtcz0iIgotCQkJWyAiJGlkIiAhPSAiLSIgXSAmJiB1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tdWlkICRpZCIKLQkJCVsgIiRjb21tZW50IiAhPSAiLSIgXSAmJiB1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tY29tbWVudCAkY29tbWVudCIKLQkJCXVzZXJhZGRfcGFyYW1zPSIkdXNlcmFkZF9wYXJhbXMgLS1zeXN0ZW0gJG5hbWUiCi0JCQlldmFsIHVzZXJhZGQgLS1yb290ICR7SU1BR0VfUk9PVEZTfSAkdXNlcmFkZF9wYXJhbXMgfHwgdHJ1ZQotCQkgICAgZWxpZiBbICIkdHlwZSIgPSAiZyIgXTsgdGhlbgotCQkJZ3JvdXBhZGRfcGFyYW1zPSIiCi0JCQlbICIkaWQiICE9ICItIiBdICYmIGdyb3VwYWRkX3BhcmFtcz0iJGdyb3VwYWRkX3BhcmFtcyAtLWdpZCAkaWQiCi0JCQlncm91cGFkZF9wYXJhbXM9IiRncm91cGFkZF9wYXJhbXMgLS1zeXN0ZW0gJG5hbWUiCi0JCQlldmFsIGdyb3VwYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJGdyb3VwYWRkX3BhcmFtcyB8fCB0cnVlCi0JCSAgICBmaQotCQlkb25lCi0JICAgIGRvbmUKLQlmaQogfQogCiAjCkBAIC0yMTEsNyArMjE3LDcgQEAKICAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKICAgICBmcm9tIG9lLnV0aWxzIGltcG9ydCBmb3JtYXRfcGtnX2xpc3QKIAotICAgIGRlcGxveV9kaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgZGVwbG95X2RpciA9IGQuZ2V0VmFyKCdJTUdERVBMT1lESVInLCBUcnVlKQogICAgIGxpbmtfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9MSU5LX05BTUUnLCBUcnVlKQogICAgIG1hbmlmZXN0X25hbWUgPSBkLmdldFZhcignSU1BR0VfTUFOSUZFU1QnLCBUcnVlKQogCkBAIC0yMjYsOSArMjMyLDYgQEAKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdF9uYW1lKToKICAgICAgICAgbWFuaWZlc3RfbGluayA9IGRlcGxveV9kaXIgKyAiLyIgKyBsaW5rX25hbWUgKyAiLm1hbmlmZXN0IgogICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMobWFuaWZlc3RfbGluayk6Ci0gICAgICAgICAgICBpZiBkLmdldFZhcignUk1fT0xEX0lNQUdFJywgVHJ1ZSkgPT0gIjEiIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGgucmVhbHBhdGgobWFuaWZlc3RfbGluaykpOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLnJlYWxwYXRoKG1hbmlmZXN0X2xpbmspKQogICAgICAgICAgICAgb3MucmVtb3ZlKG1hbmlmZXN0X2xpbmspCiAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5iYXNlbmFtZShtYW5pZmVzdF9uYW1lKSwgbWFuaWZlc3RfbGluaykKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MKaW5kZXggMGQyZTg5Ny4uMzc3MzBhNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MKQEAgLTUsOCArNSw4IEBACiBST09URlNfUEtHTUFOQUdFID0gInJwbSBzbWFydHBtIgogUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgPSAicnVuLXBvc3RpbnN0cyIKIAotIyBBZGQgNTBNZWcgb2YgZXh0cmEgc3BhY2UgZm9yIFNtYXJ0Ci1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJQQUNLQUdFX0lOU1RBTEwiLCAic21hcnRwbSIsICIgKyA1MTIwMCIsICIiICxkKX0iCisjIEFkZCAxMDBNZWcgb2YgZXh0cmEgc3BhY2UgZm9yIFNtYXJ0CitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJQQUNLQUdFX0lOU1RBTEwiLCAic21hcnRwbSIsICIgKyAxMDI0MDAiLCAiIiAsZCl9IgogCiAjIFNtYXJ0IGlzIHB5dGhvbiBiYXNlZCwgc28gYmUgc3VyZSBweXRob24tbmF0aXZlIGlzIGF2YWlsYWJsZSB0byB1cy4KIEVYVFJBTkFUSVZFUEFUSCArPSAicHl0aG9uLW5hdGl2ZSIKQEAgLTI0LDExICsyNCw2IEBACiBkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKIGRvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCiAKLSMgUlBNIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpcGxlIHJvb3RmcyBnZW5lcmF0aW9uIGF0IG9uY2UgZHVlIHRvIGNvbGxpc2lvbnMgaW4gdGhlIHVzZSBvZiBmaWxlcyAKLSMgaW4gJHtERVBMT1lfRElSX1JQTX0uIFRoaXMgY2FuIGJlIHJlbW92ZWQgaWYgcGFja2FnZV91cGRhdGVfaW5kZXhfcnBtIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5Ci1kb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCi1kb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCi0KIHB5dGhvbiAoKSB7CiAgICAgaWYgZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSk6CiAgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snLCBUcnVlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2FuaXR5LmJiY2xhc3MKaW5kZXggNzc4MTNlNC4uNzY4MmZmYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzCkBAIC0xMzUsOCArMTM1LDcgQEAKICAgICAgICAgYmIubm90ZSgiWW91ciBjb25mL2JibGF5ZXJzLmNvbmYgaGFzIGJlZW4gYXV0b21hdGljYWxseSB1cGRhdGVkLiIpCiAgICAgICAgIHJldHVybgogCi0gICAgICAgIGlmIG5vdCBzdGF0dXMucmVwYXJzZToKLSAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCkKIAogICAgIGVsaWYgY3VycmVudF9sY29uZiA9PSA2IGFuZCBsY29uZl92ZXJzaW9uID4gNjoKICAgICAgICAgIyBIYW5kbGUgcmVuYW1lIG9mIG1ldGEteW9jdG8gLT4gbWV0YS1wb2t5CkBAIC00NTksMTkgKzQ1OCwxOSBAQAogCiAgICAgICAgICMgQ2hlY2sgaWYgR0NDIGNvdWxkIHdvcmsgd2l0aG91dCBtYXJjaAogICAgICAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKQorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChzYW5pdHlfZGF0YS5leHBhbmQoIiR7QlVJTERfQ0N9IGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKSkKICAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CiAKICAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyAtbWFyY2g9bmF0aXZlIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKQorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChzYW5pdHlfZGF0YS5leHBhbmQoIiR7QlVJTERfQ0N9IC1tYXJjaD1uYXRpdmUgZ2NjX3Rlc3QuYyAtbyBnY2NfdGVzdCIpKQogICAgICAgICAgICAgaWYgc3RhdHVzID09IDA6CiAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJCVUlMRF9DRkxBR1NfYXBwZW5kID0gXCIgLW1hcmNoPW5hdGl2ZVwiIgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CiAKICAgICAgICAgaWYgbm90IHJlc3VsdDoKICAgICAgICAgICAgIGJ1aWxkX2FyY2ggPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ0JVSUxEX0FSQ0gnLCBUcnVlKQotICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIC1tYXJjaD0lcyBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IiAlIGJ1aWxkX2FyY2gpCisgICAgICAgICAgICBzdGF0dXMscmVzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KHNhbml0eV9kYXRhLmV4cGFuZCgiJHtCVUlMRF9DQ30gLW1hcmNoPSVzIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiICUgYnVpbGRfYXJjaCkpCiAgICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9JXNcIiIgJSBidWlsZF9hcmNoCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKQEAgLTU1NywyMCArNTU2LDE3IEBACiAgICAgICAgIHJldHVybiAiUmVxdWlyZWQgcGVybCBtb2R1bGUocykgbm90IGZvdW5kOiAlc1xuXG4lc1xuIiAlIChyZXQsIGVycnJlc3VsdCkKICAgICByZXR1cm4gTm9uZQogCi1kZWYgc2FuaXR5X2NoZWNrX2NvbmZmaWxlcyhzdGF0dXMsIGQpOgorZGVmIHNhbml0eV9jaGVja19jb25mZmlsZXMoZCk6CiAgICAgZnVuY3MgPSBkLmdldFZhcignQkJMQVlFUlNfQ09ORl9VUERBVEVfRlVOQ1MnLCBUcnVlKS5zcGxpdCgpCiAgICAgZm9yIGZ1bmMgaW4gZnVuY3M6CiAgICAgICAgIGNvbmZmaWxlLCBjdXJyZW50X3ZlcnNpb24sIHJlcXVpcmVkX3ZlcnNpb24sIGZ1bmMgPSBmdW5jLnNwbGl0KCI6IikKICAgICAgICAgaWYgY2hlY2tfY29uZl9leGlzdHMoY29uZmZpbGUsIGQpIGFuZCBkLmdldFZhcihjdXJyZW50X3ZlcnNpb24sIFRydWUpIGlzIG5vdCBOb25lIGFuZCBcCiAgICAgICAgICAgICAgICAgZC5nZXRWYXIoY3VycmVudF92ZXJzaW9uLCBUcnVlKSAhPSBkLmdldFZhcihyZXF1aXJlZF92ZXJzaW9uLCBUcnVlKToKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQsIHB5dGhvbmV4Y2VwdGlvbj1UcnVlKQogICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KHN0cihlKSkKLSAgICAgICAgICAgIGlmIHN1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgc3RhdHVzLnJlcGFyc2UgPSBUcnVlCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCJCQl9JTlZBTElEQ09ORiIsIFRydWUpCiAKIGRlZiBzYW5pdHlfaGFuZGxlX2FiaWNoYW5nZXMoc3RhdHVzLCBkKToKICAgICAjCkBAIC02NzMsMTEgKzY2OSwxMSBAQAogICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCIke01BS0V9IiwgZCk6CiAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIkdOVSBtYWtlLCIKIAotICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCcke0JVSUxEX1BSRUZJWH1nY2MnLCBkKToKLSAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQyBDb21waWxlciAoJXNnY2MpLCIgJSBkLmdldFZhcigiQlVJTERfUFJFRklYIiwgVHJ1ZSkKKyAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygnJHtCVUlMRF9DQ30nLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQyBDb21waWxlciAoJXMpLCIgJSBkLmdldFZhcigiQlVJTERfQ0MiLCBUcnVlKQogCi0gICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoJyR7QlVJTERfUFJFRklYfWcrKycsIGQpOgotICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICJDKysgQ29tcGlsZXIgKCVzZysrKSwiICUgZC5nZXRWYXIoIkJVSUxEX1BSRUZJWCIsIFRydWUpCisgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoJyR7QlVJTERfQ1hYfScsIGQpOgorICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICJDKysgQ29tcGlsZXIgKCVzKSwiICUgZC5nZXRWYXIoIkJVSUxEX0NYWCIsIFRydWUpCiAKICAgICByZXF1aXJlZF91dGlsaXRpZXMgPSBkLmdldFZhcignU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUycsIFRydWUpCiAKQEAgLTc0Niw3ICs3NDIsNyBAQAogICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91IGhhdmUgYSAzMi1iaXQgbGliYywgYnV0IG5vIDMyLWJpdCBoZWFkZXJzLiAgWW91IG11c3QgaW5zdGFsbCB0aGUgMzItYml0IGxpYmMgaGVhZGVycy5cbiIpCiAKICAgICBiYnBhdGhzID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLnNwbGl0KCI6IikKLSAgICBpZiAoIi4iIGluIGJicGF0aHMgb3IgIi4vIiBpbiBiYnBhdGhzIG9yICIiIGluIGJicGF0aHMpIGFuZCBub3Qgc3RhdHVzLnJlcGFyc2U6CisgICAgaWYgKCIuIiBpbiBiYnBhdGhzIG9yICIuLyIgaW4gYmJwYXRocyBvciAiIiBpbiBiYnBhdGhzKToKICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiQkJQQVRIIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBlaXRoZXIgdGhyb3VnaCAiICAgIFwKICAgICAgICAgICAgICAgICAiYW4gZW1wdHkgZW50cnksIGEgJy4vJyBvciBhICcuJy5cblx0IFRoaXMgaXMgdW5zYWZlIGFuZCBtZWFucyB5b3VyICJcCiAgICAgICAgICAgICAgICAgImxheWVyIGNvbmZpZ3VyYXRpb24gaXMgYWRkaW5nIGVtcHR5IGVsZW1lbnRzIHRvIEJCUEFUSC5cblx0ICJcCkBAIC03NjUsNiArNzYxLDE2IEBACiAgICAgIyBDaGVjayB0aGF0IFRNUERJUiBpc24ndCBsb2NhdGVkIG9uIG5mcwogICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfbm90X25mcyh0bXBkaXIsICJUTVBESVIiKSkKIAorZGVmIHNhbml0eV9jaGVja19sb2NhbGUoZCk6CisgICAgIiIiCisgICAgQ3VycmVudGx5IGJpdGJha2Ugc3dpdGNoZXMgbG9jYWxlIHRvIGVuX1VTLlVURi04IHNvIGNoZWNrIHRoYXQgdGhpcyBsb2NhbGUgYWN0dWFsbHkgZXhpc3RzLgorICAgICIiIgorICAgIGltcG9ydCBsb2NhbGUKKyAgICB0cnk6CisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgImVuX1VTLlVURi04IikKKyAgICBleGNlcHQgbG9jYWxlLkVycm9yOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIllvdSBzeXN0ZW0gbmVlZHMgdG8gc3VwcG9ydCB0aGUgZW5fVVMuVVRGLTggbG9jYWxlLiIsIGQpCisKIGRlZiBjaGVja19zYW5pdHlfZXZlcnlidWlsZChzdGF0dXMsIGQpOgogICAgIGltcG9ydCBvcywgc3RhdAogICAgICMgU2FuaXR5IHRlc3RzIHdoaWNoIHRlc3QgdGhlIHVzZXJzIGVudmlyb25tZW50IHNvIG5lZWQgdG8gcnVuIGF0IGVhY2ggYnVpbGQgKG9yIGFyZSBzbyBjaGVhcApAQCAtNzg0LDcgKzc5MCw3IEBACiAgICAgaWYgKExvb3NlVmVyc2lvbihiYi5fX3ZlcnNpb25fXykgPCBMb29zZVZlcnNpb24obWludmVyc2lvbikpOgogICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdCaXRiYWtlIHZlcnNpb24gJXMgaXMgcmVxdWlyZWQgYW5kIHZlcnNpb24gJXMgd2FzIGZvdW5kXG4nICUgKG1pbnZlcnNpb24sIGJiLl9fdmVyc2lvbl9fKSkKIAotICAgIHNhbml0eV9jaGVja19jb25mZmlsZXMoc3RhdHVzLCBkKQorICAgIHNhbml0eV9jaGVja19sb2NhbGUoZCkKIAogICAgIHBhdGhzID0gZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCiAgICAgaWYgIi4iIGluIHBhdGhzIG9yICIuLyIgaW4gcGF0aHMgb3IgIiIgaW4gcGF0aHM6CkBAIC04MjksOCArODM1LDggQEAKIAogICAgIGNoZWNrX3N1cHBvcnRlZF9kaXN0cm8oZCkKIAotICAgIG9tYXNrID0gb3MudW1hc2soMDIyKQotICAgIGlmIG9tYXNrICYgMDc1NToKKyAgICBvbWFzayA9IG9zLnVtYXNrKDBvMDIyKQorICAgIGlmIG9tYXNrICYgMG83NTU6CiAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBsZWFzZSB1c2UgYSB1bWFzayB3aGljaCBhbGxvd3MgYStyeCBhbmQgdStyd3hcbiIpCiAgICAgb3MudW1hc2sob21hc2spCiAKQEAgLTg5MSwxMyArODk3LDEzIEBACiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgbWlycm9yLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKToKLSAgICAgICAgICAgICAgICBpbXBvcnQgdXJscGFyc2UKLSAgICAgICAgICAgICAgICBjaGVja19zeW1saW5rKHVybHBhcnNlLnVybHBhcnNlKG1pcnJvcikucGF0aCwgZCkKKyAgICAgICAgICAgICAgICBpbXBvcnQgdXJsbGliCisgICAgICAgICAgICAgICAgY2hlY2tfc3ltbGluayh1cmxsaWIucGFyc2UudXJscGFyc2UobWlycm9yKS5wYXRoLCBkKQogICAgICAgICAgICAgICAgICMgU1NUQVRFX01JUlJPUiBlbmRzIHdpdGggYSAvUEFUSCBzdHJpbmcKICAgICAgICAgICAgICAgICBpZiBtaXJyb3IuZW5kc3dpdGgoJy9QQVRIJyk6CiAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIC9QQVRIJCBmcm9tIFNTVEFURV9NSVJST1IgdG8gZ2V0IGEgd29ya2luZwogICAgICAgICAgICAgICAgICAgICAjIGJhc2UgZGlyZWN0b3J5IHBhdGgKLSAgICAgICAgICAgICAgICAgICAgbWlycm9yX2Jhc2UgPSB1cmxwYXJzZS51cmxwYXJzZShtaXJyb3JbOi0xKmxlbignL1BBVEgnKV0pLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgbWlycm9yX2Jhc2UgPSB1cmxsaWIucGFyc2UudXJscGFyc2UobWlycm9yWzotMSpsZW4oJy9QQVRIJyldKS5wYXRoCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3N5bWxpbmsobWlycm9yX2Jhc2UsIGQpCiAKICAgICAjIENoZWNrIHRoYXQgVE1QRElSIGhhc24ndCBjaGFuZ2VkIGxvY2F0aW9uIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBydW4KQEAgLTkyMCwxNyArOTI2LDE3IEBACiAgICAgICAgIHdpdGggb3BlbihjaGVja2ZpbGUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodG1wZGlyKQogCi0gICAgIyBDaGVjayAvYmluL3NoIGxpbmtzIHRvIGRhc2ggb3IgYmFzaAotICAgIHJlYWxfc2ggPSBvcy5wYXRoLnJlYWxwYXRoKCcvYmluL3NoJykKLSAgICBpZiBub3QgcmVhbF9zaC5lbmRzd2l0aCgnL2Rhc2gnKSBhbmQgbm90IHJlYWxfc2guZW5kc3dpdGgoJy9iYXNoJyk6Ci0gICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCAvYmluL3NoIGxpbmtzIHRvICVzLCBtdXN0IGJlIGRhc2ggb3IgYmFzaFxuIiAlIHJlYWxfc2gpCisgICAgIyBJZiAvYmluL3NoIGlzIGEgc3ltbGluaywgY2hlY2sgdGhhdCBpdCBwb2ludHMgdG8gZGFzaCBvciBiYXNoCisgICAgaWYgb3MucGF0aC5pc2xpbmsoJy9iaW4vc2gnKToKKyAgICAgICAgcmVhbF9zaCA9IG9zLnBhdGgucmVhbHBhdGgoJy9iaW4vc2gnKQorICAgICAgICBpZiBub3QgcmVhbF9zaC5lbmRzd2l0aCgnL2Rhc2gnKSBhbmQgbm90IHJlYWxfc2guZW5kc3dpdGgoJy9iYXNoJyk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgL2Jpbi9zaCBsaW5rcyB0byAlcywgbXVzdCBiZSBkYXNoIG9yIGJhc2hcbiIgJSByZWFsX3NoKQogCiBkZWYgY2hlY2tfc2FuaXR5KHNhbml0eV9kYXRhKToKICAgICBjbGFzcyBTYW5pdHlTdGF0dXMob2JqZWN0KToKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5tZXNzYWdlcyA9ICIiCiAgICAgICAgICAgICBzZWxmLm5ldHdvcmtfZXJyb3IgPSBGYWxzZQotICAgICAgICAgICAgc2VsZi5yZXBhcnNlID0gRmFsc2UKIAogICAgICAgICBkZWYgYWRkcmVzdWx0KHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICAgICAgaWYgbWVzc2FnZToKQEAgLTk4Niw3ICs5OTIsNiBAQAogCiAgICAgaWYgc3RhdHVzLm1lc3NhZ2VzICE9ICIiOgogICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3Ioc2FuaXR5X2RhdGEuZXhwYW5kKHN0YXR1cy5tZXNzYWdlcyksIHNhbml0eV9kYXRhLCBzdGF0dXMubmV0d29ya19lcnJvcikKLSAgICByZXR1cm4gc3RhdHVzLnJlcGFyc2UKIAogIyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBkYXRhc3RvcmUgYW5kIGZpbmFsaXNlIGl0IHRvIGVuc3VyZSBhcHBlbmRzIGFuZCAKICMgb3ZlcnJpZGVzIGFyZSBzZXQgLSB0aGUgZGF0YXN0b3JlIGhhcyB5ZXQgdG8gYmUgZmluYWxpc2VkIGF0IENvbmZpZ1BhcnNlZApAQCAtOTk1LDE1ICsxMDAwLDIwIEBACiAgICAgc2FuaXR5X2RhdGEuZmluYWxpemUoKQogICAgIHJldHVybiBzYW5pdHlfZGF0YQogCithZGRoYW5kbGVyIGNvbmZpZ19yZXBhcnNlX2V2ZW50aGFuZGxlcgorY29uZmlnX3JlcGFyc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgorcHl0aG9uIGNvbmZpZ19yZXBhcnNlX2V2ZW50aGFuZGxlcigpIHsKKyAgICBzYW5pdHlfY2hlY2tfY29uZmZpbGVzKGUuZGF0YSkKK30KKwogYWRkaGFuZGxlciBjaGVja19zYW5pdHlfZXZlbnRoYW5kbGVyCiBjaGVja19zYW5pdHlfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuU2FuaXR5Q2hlY2sgYmIuZXZlbnQuTmV0d29ya1Rlc3QiCiBweXRob24gY2hlY2tfc2FuaXR5X2V2ZW50aGFuZGxlcigpIHsKICAgICBpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJTYW5pdHlDaGVjayI6CiAgICAgICAgIHNhbml0eV9kYXRhID0gY29weV9kYXRhKGUpCisgICAgICAgIGNoZWNrX3Nhbml0eShzYW5pdHlfZGF0YSkKICAgICAgICAgaWYgZS5nZW5lcmF0ZWV2ZW50czoKICAgICAgICAgICAgIHNhbml0eV9kYXRhLnNldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCAiMSIpCi0gICAgICAgIHJlcGFyc2UgPSBjaGVja19zYW5pdHkoc2FuaXR5X2RhdGEpCi0gICAgICAgIGUuZGF0YS5zZXRWYXIoIkJCX0lOVkFMSURDT05GIiwgcmVwYXJzZSkKICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCgpLCBlLmRhdGEpCiAgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJOZXR3b3JrVGVzdCI6CiAgICAgICAgIHNhbml0eV9kYXRhID0gY29weV9kYXRhKGUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MKaW5kZXggMTU3OWIwNS4uYjlhZTE5ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zY29ucy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcwpAQCAtMTAsNyArMTAsNyBAQAogfQogCiBzY29uc19kb19pbnN0YWxsKCkgewotICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgUFJFRklYPSR7RH0ke3ByZWZpeH0gcHJlZml4PSR7RH0ke3ByZWZpeH0gaW5zdGFsbCAke0VYVFJBX09FU0NPTlN9fHwgXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgaW5zdGFsbF9yb290PSR7RH0ke3ByZWZpeH0gUFJFRklYPSR7cHJlZml4fSBwcmVmaXg9JHtwcmVmaXh9ICR7RVhUUkFfT0VTQ09OU30gaW5zdGFsbCB8fCBcCiAgICAgICAgIGRpZSAic2NvbnMgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKIH0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZGwuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2RsLmJiY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMzEyODguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZGwuYmJjbGFzcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIwotIyAoQykgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+Ci0jCi0KLURFUEVORFMgKz0gInZpcnR1YWwvbGlic2RsIGxpYnNkbC1taXhlciBsaWJzZGwtaW1hZ2UiCi1TRUNUSU9OID0gIngxMS9nYW1lcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lwLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpcC5iYmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWQyYTEzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lwLmJiY2xhc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0jIEJ1aWxkIENsYXNzIGZvciBTaXAgYmFzZWQgUHl0aG9uIEJpbmRpbmdzCi0jIChDKSBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KLSMKLVNUQUdJTkdfU0lQRElSID89ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3NpcCIKLQotREVQRU5EUyAgPSsgInNpcC1uYXRpdmUiCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNpcCIKLQotIyBkZWZhdWx0IHN0dWZmLCBkbyBub3QgdW5jb21tZW50Ci0jIEVYVFJBX1NJUFRBR1MgPSAiLXRXU19YMTEgLXRRdF80XzNfMCIKLQotIyBkb19nZW5lcmF0ZSBpcyBiZWZvcmUgZG9fY29uZmlndXJlIHNvIGVuc3VyZSB0aGF0IHNpcF9uYXRpdmUgaXMgcG9wdWxhdGVkIGluIHN5c3Jvb3QgYmVmb3JlIGV4ZWN1dGluZyBpdAotZG9fZ2VuZXJhdGVbZGVwZW5kc10gKz0gInNpcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKLQotc2lwX2RvX2dlbmVyYXRlKCkgewotCWlmIFsgLXogIiR7U0lQX01PRFVMRVN9IiBdOyB0aGVuIAotCQlNT0RVTEVTPSJgbHMgc2lwLyptb2Quc2lwYCIKLQllbHNlCi0JCU1PRFVMRVM9IiR7U0lQX01PRFVMRVN9IgotCWZpCi0KLQlpZiBbIC16ICIkTU9EVUxFUyIgXTsgdGhlbgotCQlkaWUgIlNJUF9NT0RVTEVTIG5vdCBzZXQgYW5kIG5vIG1vZHVsZXMgZm91bmQgaW4gJFBXRCIKLSAgICAgICAgZWxzZQotCQliYm5vdGUgInVzaW5nIG1vZHVsZXMgJyR7U0lQX01PRFVMRVN9JyBhbmQgdGFncyAnJHtFWFRSQV9TSVBUQUdTfSciCi0JZmkKLQotCWlmIFsgLXogIiR7RVhUUkFfU0lQVEFHU30iIF07IHRoZW4KLQkJZGllICJFWFRSQV9TSVBUQUdTIG5lZWRzIHRvIGJlIHNldCEiCi0JZWxzZQotCQlTSVBUQUdTPSIke0VYVFJBX1NJUFRBR1N9IgotCWZpCi0KLQlpZiBbICEgLXogIiR7U0lQX0ZFQVRVUkVTfSIgXTsgdGhlbgotCQlGRUFUVVJFUz0iLXogJHtTSVBfRkVBVFVSRVN9IgotCQliYm5vdGUgInNpcCBmZWF0dXJlIGZpbGU6ICR7U0lQX0ZFQVRVUkVTfSIKLQlmaQotCi0JZm9yIG1vZHVsZSBpbiAkTU9EVUxFUwotCWRvCi0JCWluc3RhbGwgLWQgJHttb2R1bGV9LwotCQllY2hvICJjYWxsaW5nICdzaXA0IC1JIHNpcCAtSSAke1NUQUdJTkdfU0lQRElSfSAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnByby5pbiBzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAnIgotCQlzaXA0IC1JICR7U1RBR0lOR19TSVBESVJ9IC1JIHNpcCAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnNiZiBcCi0JCQlzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAgfHwgZGllICJFcnJvciBjYWxsaW5nIHNpcCBvbiAke21vZHVsZX0iCi0JCXNlZCAtZSAncyx0YXJnZXQsVEFSR0VULCcgLWUgJ3Msc291cmNlcyxTT1VSQ0VTLCcgLWUgJ3MsaGVhZGVycyxIRUFERVJTLCcgXAotCQkJJHttb2R1bGV9LyR7bW9kdWxlfS5zYmYgfCBzZWQgcywibW9jX0hFQURFUlMgPSIsIkhFQURFUlMgKz0iLCBcCi0JCQk+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KLQkJZWNobyAiVEVNUExBVEU9bGliIiA+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCi0JCVsgIiR7bW9kdWxlfSIgPSAicXQiIF0gCQkmJiBlY2hvICIiIAkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybwotCQlbICIke21vZHVsZX0iID0gInF0Y2FudmFzIiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCi0JCVsgIiR7bW9kdWxlfSIgPSAicXR0YWJsZSIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybwotCQlbICIke21vZHVsZX0iID0gInF3dCIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybwotCQlbICIke21vZHVsZX0iID0gInF0cGUiIF0gICAgICAgICYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KLQkJWyAiJHttb2R1bGV9IiA9ICJxdHBlIiBdICAgICAgICAmJiBlY2hvICJMSUJTKz0tbHFwZSIJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybwotCQl0cnVlCi0JZG9uZQotfQotCi1FWFBPUlRfRlVOQ1RJT05TIGRvX2dlbmVyYXRlCi0KLWFkZHRhc2sgZ2VuZXJhdGUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcwppbmRleCA1MDE0MWEzLi42ZWNhMDA0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVpbmZvLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzCkBAIC0zNiw3ICszNiwxMSBAQAogICAgICAgICAibWlwcyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBtaXBzLWNvbW1vbiIsCiAgICAgICAgICJtaXBzNjQiOiAiZW5kaWFuLWJpZyBiaXQtNjQgbWlwcy1jb21tb24iLAogICAgICAgICAibWlwczY0ZWwiOiAiZW5kaWFuLWxpdHRsZSBiaXQtNjQgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwc2lzYTY0cjYiOiAiZW5kaWFuLWJpZyBiaXQtNjQgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwc2lzYTY0cjZlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC02NCBtaXBzLWNvbW1vbiIsCiAgICAgICAgICJtaXBzZWwiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwc2lzYTMycjYiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwc2lzYTMycjZlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBtaXBzLWNvbW1vbiIsCiAgICAgICAgICJwb3dlcnBjIjogImVuZGlhbi1iaWcgYml0LTMyIHBvd2VycGMtY29tbW9uIiwKICAgICAgICAgIm5pb3MyIjogImVuZGlhbi1saXR0bGUgYml0LTMyIG5pb3MyLWNvbW1vbiIsCiAgICAgICAgICJwb3dlcnBjNjQiOiAiZW5kaWFuLWJpZyBiaXQtNjQgcG93ZXJwYy1jb21tb24iLApAQCAtMTA3LDYgKzExMSwxNCBAQAogICAgICAgICAieDg2XzY0LW1pbmd3MzIiOiAiYml0LTY0IiwKICAgICB9CiAKKyAgICAjIEFkZCBpbiBhbnkgZXh0cmEgdXNlciBzdXBwbGllZCBkYXRhIHdoaWNoIG1heSBjb21lIGZyb20gYSBCU1AgbGF5ZXIsIHJlbW92aW5nIHRoZQorICAgICMgbmVlZCB0byBhbHdheXMgY2hhbmdlIHRoaXMgY2xhc3MgZGlyZWN0bHkKKyAgICBleHRyYV9zaXRlaW5mbyA9IChkLmdldFZhcigiU0lURUlORk9fRVhUUkFfREFUQUZVTkNTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgbSBpbiBleHRyYV9zaXRlaW5mbzoKKyAgICAgICAgY2FsbCA9IG0gKyAiKGFyY2hpbmZvLCBvc2luZm8sIHRhcmdldGluZm8sIGQpIgorICAgICAgICBsb2NzID0geyAiYXJjaGluZm8iIDogYXJjaGluZm8sICJvc2luZm8iIDogb3NpbmZvLCAidGFyZ2V0aW5mbyIgOiB0YXJnZXRpbmZvLCAiZCIgOiBkfQorICAgICAgICBhcmNoaW5mbywgb3NpbmZvLCB0YXJnZXRpbmZvID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKwogICAgIGhvc3RhcmNoID0gZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpCiAgICAgaG9zdG9zID0gZC5nZXRWYXIoIkhPU1RfT1MiLCBUcnVlKQogICAgIHRhcmdldCA9ICIlcy0lcyIgJSAoaG9zdGFyY2gsIGhvc3RvcykKQEAgLTE0NSw3ICsxNTcsNyBAQAogICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGFkZCB5b3VyIGFyY2hpdGVjdHVyZSB0byBzaXRlaW5mby5iYmNsYXNzIikKIH0KIAotZGVmIHNpdGVpbmZvX2dldF9maWxlcyhkLCBub19jYWNoZSA9IEZhbHNlKToKK2RlZiBzaXRlaW5mb19nZXRfZmlsZXMoZCwgYWNsb2NhbGNhY2hlID0gRmFsc2UpOgogICAgIHNpdGVkYXRhID0gc2l0ZWluZm9fZGF0YShkKQogICAgIHNpdGVmaWxlcyA9ICIiCiAgICAgZm9yIHBhdGggaW4gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCI6Iik6CkBAIC0xNTQsMTEgKzE2NiwxNyBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgogICAgICAgICAgICAgICAgIHNpdGVmaWxlcyArPSBmaWxlbmFtZSArICIgIgogCi0gICAgaWYgbm9fY2FjaGU6IHJldHVybiBzaXRlZmlsZXMKKyAgICBpZiBub3QgYWNsb2NhbGNhY2hlOgorICAgICAgICByZXR1cm4gc2l0ZWZpbGVzCiAKLSAgICAjIE5vdyBjaGVjayBmb3Igc2l0ZWNvbmZpZyBjYWNoZSBmaWxlcwotICAgICMgVXNlIHRoZSBmaWxlcyBjb3BpZWQgdG8gdGhlIGFjbG9jYWwgY2FjaGUgZ2VuZXJhdGVkIGJ5IGF1dG90b29scy5iYmNsYXNzCi0gICAgIyB0byBhdm9pZCByYWNlcworICAgICMgTm93IGNoZWNrIGZvciBzaXRlY29uZmlnIGNhY2hlIGZpbGVzIGluIHRoZSBkaXJlY3Rvcnkgc2V0dXAgYnkgYXV0b3Rvb2xzLmJiY2xhc3MgdG8KKyAgICAjIGF2b2lkIHJhY2VzLgorICAgICMKKyAgICAjIEFDTE9DQUxESVIgbWF5IG9yIG1heSBub3QgZXhpc3Qgc28gY2FjaGUgc2hvdWxkIG9ubHkgYmUgc2V0IHRvIFRydWUgZnJvbSBhdXRvdG9vbHMuYmJjbGFzcworICAgICMgYWZ0ZXIgZmlsZXMgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIHRoaXMgbG9jYXRpb24uIFRvIGRvIG90aGVyd2lzZSByaXNrcyBwYXJzaW5nL3NpZ25hdHVyZQorICAgICMgaXNzdWVzIGFuZCB0aGUgZGlyZWN0b3J5IGJlaW5nIGNyZWF0ZWQvcmVtb3ZlZCB3aGlsc3QgdGhpcyBjb2RlIGV4ZWN1dGVzLiBUaGlzIGNhbiBoYXBwZW4KKyAgICAjIHdoZW4gYSBtdWx0aWxpYiByZWNpcGUgaXMgcGFyc2VkIGFsb25nIHdpdGggaXRzIGJhc2UgdmFyaWFudCB3aGljaCBtYXkgYmUgcnVubmluZyBhdCB0aGUgdGltZQorICAgICMgY2F1c2luZyByYXJlIGJ1dCBuYXN0eSBmYWlsdXJlcwogICAgIHBhdGhfc2l0ZWNvbmZpZyA9IGQuZ2V0VmFyKCdBQ0xPQ0FMRElSJywgVHJ1ZSkKICAgICBpZiBwYXRoX3NpdGVjb25maWcgYW5kIG9zLnBhdGguaXNkaXIocGF0aF9zaXRlY29uZmlnKToKICAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihwYXRoX3NpdGVjb25maWcpOgpAQCAtMTY2LDcgKzE4NCw2IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGhfc2l0ZWNvbmZpZywgaSkKICAgICAgICAgICAgIHNpdGVmaWxlcyArPSBmaWxlbmFtZSArICIgIgotCiAgICAgcmV0dXJuIHNpdGVmaWxlcwogCiAjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzCmluZGV4IDBjOTI3NjUuLjg5Mzk0ZDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzCkBAIC0yMTksMTQgKzIxOSwxMyBAQAogZGVmIHJ1bl9mb3Nzb2xvZ3koZm9zc19jb21tYW5kLCBmdWxsX3NwZHgpOgogICAgIGltcG9ydCBzdHJpbmcsIHJlCiAgICAgaW1wb3J0IHN1YnByb2Nlc3MKLSAgICAKLSAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihmb3NzX2NvbW1hbmQuc3BsaXQoKSwKLSAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICBmb3NzX291dHB1dCwgZm9zc19lcnJvciA9IHAuY29tbXVuaWNhdGUoKQotICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorCisgICAgdHJ5OgorICAgICAgICBmb3NzX291dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGZvc3NfY29tbWFuZC5zcGxpdCgpLAorICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuZGVjb2RlKCd1dGYtOCcpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBmb3NzX291dHB1dCA9IHVuaWNvZGUoZm9zc19vdXRwdXQsICJ1dGYtOCIpCiAgICAgZm9zc19vdXRwdXQgPSBzdHJpbmcucmVwbGFjZShmb3NzX291dHB1dCwgJ1xyJywgJycpCiAKICAgICAjIFBhY2thZ2UgaW5mbwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zc3RhdGUuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3N0YXRlLmJiY2xhc3MKaW5kZXggOGM2MjMyNy4uMTcyMzg0YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zc3RhdGUuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCkBAIC0xNyw2ICsxNyw5IEBACiBTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkQgPSAiIgogU1NUQVRFX1BBVEhTUEVDICAgPSAiJHtTU1RBVEVfRElSfS8ke1NTVEFURV9FWFRSQVBBVEhXSUxEQ0FSRH0qLyR7U1NUQVRFX1BLR1NQRUN9IgogCisjIGV4cGxpY2l0bHkgbWFrZSBQViB0byBkZXBlbmQgb24gZXZhbHVhdGVkIHZhbHVlIG9mIFBWIHZhcmlhYmxlCitQVlt2YXJkZXB2YWx1ZV0gPSAiJHtQVn0iCisKICMgV2UgZG9uJ3Qgd2FudCB0aGUgc3N0YXRlIHRvIGRlcGVuZCBvbiB0aGluZ3MgbGlrZSB0aGUgZGlzdHJvIHN0cmluZwogIyBvZiB0aGUgc3lzdGVtLCB3ZSBsZXQgdGhlIHNzdGF0ZSBwYXRocyB0YWtlIGNhcmUgb2YgdGhpcy4KIFNTVEFURV9FWFRSQVBBVEhbdmFyZGVwdmFsdWVdID0gIiIKQEAgLTI3LDYgKzMwLDggQEAKIFNTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9zZ21sICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vc2dtbCIKICMgQXJjaGl2ZSB0aGUgc291cmNlcyBmb3IgbWFueSBhcmNoaXRlY3R1cmVzIGluIG9uZSBkZXBsb3kgZm9sZGVyCiBTU1RBVEVfRFVQV0hJVEVMSVNUICs9ICIke0RFUExPWV9ESVJfU1JDfSIKKyMgSWdub3JlIG92ZXJsYXBwaW5nIFJFQURNRQorU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtERVBMT1lfRElSfS9zZGsvUkVBRE1FXy1fRE9fTk9UX0RFTEVURV9GSUxFU19JTl9USElTX0RJUkVDVE9SWS50eHQiCiAKIFNTVEFURV9TQ0FOX0ZJTEVTID89ICIqLmxhICotY29uZmlnICpfY29uZmlnIgogU1NUQVRFX1NDQU5fQ01EID89ICdmaW5kICR7U1NUQVRFX0JVSUxERElSfSBcKCAtbmFtZSAiJHtAIlwiIC1vIC1uYW1lIFwiIi5qb2luKGQuZ2V0VmFyKCJTU1RBVEVfU0NBTl9GSUxFUyIsIFRydWUpLnNwbGl0KCkpfSIgXCkgLXR5cGUgZicKQEAgLTk1LDcgKzEwMCw3IEBACiAgICAgICAgIHNjYW5fY21kID0gImdyZXAgLUlybCAke1NUQUdJTkdfRElSfSAke1NTVEFURV9CVUlMRERJUn0iCiAgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfU0NBTl9DTUQnLCBzY2FuX2NtZCkKIAotICAgIHVuaXF1ZV90YXNrcyA9IHNldCgoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgdW5pcXVlX3Rhc2tzID0gc29ydGVkKHNldCgoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpKQogICAgIGQuc2V0VmFyKCdTU1RBVEVUQVNLUycsICIgIi5qb2luKHVuaXF1ZV90YXNrcykpCiAgICAgZm9yIHRhc2sgaW4gdW5pcXVlX3Rhc2tzOgogICAgICAgICBkLnByZXBlbmRWYXJGbGFnKHRhc2ssICdwcmVmdW5jcycsICJzc3RhdGVfdGFza19wcmVmdW5jICIpCkBAIC0xNzAsNiArMTc1LDggQEAKICAgICBpZiBvcy5hY2Nlc3MobWFuaWZlc3QsIG9zLlJfT0spOgogICAgICAgICBiYi5mYXRhbCgiUGFja2FnZSBhbHJlYWR5IHN0YWdlZCAoJXMpPyEiICUgbWFuaWZlc3QpCiAKKyAgICBkLnNldFZhcigiU1NUQVRFX0lOU1RfUE9TVFJNIiwgbWFuaWZlc3QgKyAiLnBvc3RybSIpCisKICAgICBsb2NrcyA9IFtdCiAgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcy1zaGFyZWQnXToKICAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2ssIFRydWUpKQpAQCAtMjAwLDYgKzIwNyw3IEBACiAgICAgICAgICAgICBmID0gb3MucGF0aC5ub3JtcGF0aChmKQogICAgICAgICAgICAgcmVhbG1hdGNoID0gVHJ1ZQogICAgICAgICAgICAgZm9yIHcgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIHcgPSBvcy5wYXRoLm5vcm1wYXRoKHcpCiAgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHcpOgogICAgICAgICAgICAgICAgICAgICByZWFsbWF0Y2ggPSBGYWxzZQogICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtNDAyLDYgKzQxMCwxMyBAQAogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgIHBvc3RybSA9IG1hbmlmZXN0ICsgIi5wb3N0cm0iCisgICAgaWYgb3MucGF0aC5leGlzdHMobWFuaWZlc3QgKyAiLnBvc3RybSIpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBvcy5jaG1vZChwb3N0cm0sIDBvNzU1KQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwocG9zdHJtLCBzaGVsbD1UcnVlKQorICAgICAgICBvZS5wYXRoLnJlbW92ZShwb3N0cm0pCisKICAgICBvZS5wYXRoLnJlbW92ZShtYW5pZmVzdCkKIAogZGVmIHNzdGF0ZV9jbGVhbihzcywgZCk6CkBAIC01NjMsNiArNTc4LDggQEAKICAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN0YXRlWzFdKToKICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGQuZ2V0VmFyKCdTU1RBVEVfU0tJUF9DUkVBVElPTicsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHNyY2Jhc2UgPSBzdGF0ZVswXS5yc3RyaXAoIi8iKS5yc3BsaXQoJy8nLCAxKVswXQogICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3RhdGVbMV0pOgogICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CkBAIC02MjMsMTAgKzY0MCwxMCBAQAogCiAgICAgIyBUcnkgYSBmZXRjaCBmcm9tIHRoZSBzc3RhdGUgbWlycm9yLCBpZiBpdCBmYWlscyBqdXN0IHJldHVybiBhbmQKICAgICAjIHdlIHdpbGwgYnVpbGQgdGhlIHBhY2thZ2UKLSAgICB1cmlzID0gWydmaWxlOi8vezB9Jy5mb3JtYXQoc3N0YXRlZmV0Y2gpLAotICAgICAgICAgICAgJ2ZpbGU6Ly97MH0uc2lnaW5mbycuZm9ybWF0KHNzdGF0ZWZldGNoKV0KKyAgICB1cmlzID0gWydmaWxlOi8vezB9O2Rvd25sb2FkZmlsZW5hbWU9ezB9Jy5mb3JtYXQoc3N0YXRlZmV0Y2gpLAorICAgICAgICAgICAgJ2ZpbGU6Ly97MH0uc2lnaW5mbztkb3dubG9hZGZpbGVuYW1lPXswfS5zaWdpbmZvJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQogICAgIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoIlNTVEFURV9WRVJJRllfU0lHIiwgVHJ1ZSksIEZhbHNlKToKLSAgICAgICAgdXJpcyArPSBbJ2ZpbGU6Ly97MH0uc2lnJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQorICAgICAgICB1cmlzICs9IFsnZmlsZTovL3swfS5zaWc7ZG93bmxvYWRmaWxlbmFtZT17MH0uc2lnJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQogCiAgICAgZm9yIHNyY3VyaSBpbiB1cmlzOgogICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNfVVJJJywgc3JjdXJpKQpAQCAtNjM0LDEyICs2NTEsNiBAQAogICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbc3JjdXJpXSwgbG9jYWxkYXRhLCBjYWNoZT1GYWxzZSkKICAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQogCi0gICAgICAgICAgICAjIE5lZWQgdG8gb3B0aW1pc2UgdGhpcywgaWYgdXNpbmcgZmlsZTovLyB1cmxzLCB0aGUgZmV0Y2hlciBqdXN0IGNoYW5nZXMgdGhlIGxvY2FsIHBhdGgKLSAgICAgICAgICAgICMgRm9yIG5vdyB3b3JrIGFyb3VuZCBieSBzeW1saW5raW5nCi0gICAgICAgICAgICBsb2NhbHBhdGggPSBiYi5kYXRhLmV4cGFuZChmZXRjaGVyLmxvY2FscGF0aChzcmN1cmkpLCBsb2NhbGRhdGEpCi0gICAgICAgICAgICBpZiBsb2NhbHBhdGggIT0gc3N0YXRlcGtnIGFuZCBvcy5wYXRoLmV4aXN0cyhsb2NhbHBhdGgpIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlcGtnKToKLSAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxvY2FscGF0aCwgc3N0YXRlcGtnKQotCiAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbjoKICAgICAgICAgICAgIGJyZWFrCiAKQEAgLTY0Nyw3ICs2NTgsNyBAQAogICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQogICAgIGFjY2VsZXJhdGUgPSBzc3RhdGVfaW5zdGFsbHBrZyhzaGFyZWRfc3RhdGUsIGQpCiAgICAgaWYgbm90IGFjY2VsZXJhdGU6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk5vIHN1aXRhYmxlIHN0YWdpbmcgcGFja2FnZSBmb3VuZCIpCisgICAgICAgIGJiLmZhdGFsKCJObyBzdWl0YWJsZSBzdGFnaW5nIHBhY2thZ2UgZm91bmQiKQogCiBweXRob24gc3N0YXRlX3Rhc2tfcHJlZnVuYyAoKSB7CiAgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCkBAIC02NjEsOSArNjcyLDkgQEAKICAgICBzc3RhdGVfaW5zdGFsbChzaGFyZWRfc3RhdGUsIGQpCiAgICAgZm9yIGludGVyY2VwdCBpbiBzaGFyZWRfc3RhdGVbJ2ludGVyY2VwdGZ1bmNzJ106CiAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhpbnRlcmNlcHQsIGQsIChkLmdldFZhcigiV09SS0RJUiIsIFRydWUpLCkpCi0gICAgb21hc2sgPSBvcy51bWFzaygwMDIpCi0gICAgaWYgb21hc2sgIT0gMDAyOgotICAgICAgIGJiLm5vdGUoIlVzaW5nIHVtYXNrIDAwMiAobm90ICUwbykgZm9yIHNzdGF0ZSBwYWNrYWdpbmciICUgb21hc2spCisgICAgb21hc2sgPSBvcy51bWFzaygwbzAwMikKKyAgICBpZiBvbWFzayAhPSAwbzAwMjoKKyAgICAgICBiYi5ub3RlKCJVc2luZyB1bWFzayAwbzAwMiAobm90ICUwbykgZm9yIHNzdGF0ZSBwYWNrYWdpbmciICUgb21hc2spCiAgICAgc3N0YXRlX3BhY2thZ2Uoc2hhcmVkX3N0YXRlLCBkKQogICAgIG9zLnVtYXNrKG9tYXNrKQogfQpAQCAtNzI1LDYgKzczNiw3IEBACiAKICAgICByZXQgPSBbXQogICAgIG1pc3NlZCA9IFtdCisgICAgbWlzc2luZyA9IFtdCiAgICAgZXh0ZW5zaW9uID0gIi50Z3oiCiAgICAgaWYgc2lnaW5mbzoKICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uICsgIi5zaWdpbmZvIgpAQCAtNzQ2LDYgKzc1OCwxOCBAQAogCiAgICAgICAgIHJldHVybiBzcGVjLCBleHRyYXBhdGgsIHRuYW1lCiAKKyAgICBkZWYgc3N0YXRlX3BrZ190b19wbihwa2csIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJhbnNsYXRlIGFuIHNzdGF0ZSBmaWxlbmFtZSB0byBhIFBOIHZhbHVlIGJ5IHdheSBvZiBTU1RBVEVfUEtHU1BFQy4gVGhpcyBpcyBzbGlnaHRseSBoYWNreSBidXQKKyAgICAgICAgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gZXZlcnl0aGluZyBpbiB0aGlzIGNvbnRleHQuCisgICAgICAgICIiIgorICAgICAgICBwa2dzcGVjID0gZC5nZXRWYXIoJ1NTVEFURV9QS0dTUEVDJywgRmFsc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlkeCA9IHBrZ3NwZWMuc3BsaXQoJzonKS5pbmRleCgnJHtQTn0nKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGJiLmZhdGFsKCdVbmFibGUgdG8gZmluZCAke1BOfSBpbiBTU1RBVEVfUEtHU1BFQycpCisgICAgICAgIHJldHVybiBwa2cuc3BsaXQoJzonKVtpZHhdCisKIAogICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgogCkBAIC03ODAsNiArODA0LDggQEAKICAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcignQkJfTk9fTkVUV09SSycsIFRydWUpID09ICIxIiBhbmQgbG9jYWxkYXRhLmdldFZhcignU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiOgogICAgICAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignQkJfTk9fTkVUV09SSycpCiAKKyAgICAgICAgd2hpdGVsaXN0ID0gYmIucnVucXVldWUuZ2V0X3NldHNjZW5lX2VuZm9yY2Vfd2hpdGVsaXN0KGQpCisKICAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoQ29ubmVjdGlvbkNhY2hlCiAgICAgICAgIGRlZiBjaGVja3N0YXR1c19pbml0KHRocmVhZF93b3JrZXIpOgogICAgICAgICAgICAgdGhyZWFkX3dvcmtlci5jb25uZWN0aW9uX2NhY2hlID0gRmV0Y2hDb25uZWN0aW9uQ2FjaGUoKQpAQCAtODA2LDcgKzgzMiwxNCBAQAogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIG1pc3NlZC5hcHBlbmQodGFzaykKICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBVbnN1Y2Nlc3NmdWwgZmV0Y2ggdGVzdCBmb3IgJXMiICUgc3JjdXJpKQotICAgICAgICAgICAgICAgIHBhc3MgICAgIAorICAgICAgICAgICAgICAgIGlmIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgcG4gPSBzc3RhdGVfcGtnX3RvX3BuKHNzdGF0ZWZpbGUsIGQpCisgICAgICAgICAgICAgICAgICAgIHRhc2tuYW1lID0gc3FfdGFza1t0YXNrXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYmIucnVucXVldWUuY2hlY2tfc2V0c2NlbmVfZW5mb3JjZV93aGl0ZWxpc3QocG4sIHRhc2tuYW1lLCB3aGl0ZWxpc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCdTc3RhdGUgYXJ0aWZhY3QgdW5hdmFpbGFibGUgZm9yICVzLiVzJyAlIChwbiwgdGFza25hbWUpKQorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUHJvY2Vzc1Byb2dyZXNzKCJDaGVja2luZyBzc3RhdGUgbWlycm9yIG9iamVjdCBhdmFpbGFiaWxpdHkiLCBsZW4odGFza2xpc3QpIC0gdGhyZWFkX3dvcmtlci50YXNrcy5xc2l6ZSgpKSwgZCkKIAogICAgICAgICB0YXNrbGlzdCA9IFtdCiAgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgpAQCAtODE3LDE2ICs4NTAsMjMgQEAKICAgICAgICAgICAgIHRhc2tsaXN0LmFwcGVuZCgodGFzaywgc3N0YXRlZmlsZSkpCiAKICAgICAgICAgaWYgdGFza2xpc3Q6Ci0gICAgICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBzc3RhdGUgbWlycm9yIG9iamVjdCBhdmFpbGFiaWxpdHkgKGZvciAlcyBvYmplY3RzKSIgJSBsZW4odGFza2xpc3QpKQorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Qcm9jZXNzU3RhcnRlZCgiQ2hlY2tpbmcgc3N0YXRlIG1pcnJvciBvYmplY3QgYXZhaWxhYmlsaXR5IiwgbGVuKHRhc2tsaXN0KSksIGQpCisKICAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKICAgICAgICAgICAgIG5wcm9jID0gbWluKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgbGVuKHRhc2tsaXN0KSkKIAorICAgICAgICAgICAgYmIuZXZlbnQuZW5hYmxlX3RocmVhZGxvY2soKQogICAgICAgICAgICAgcG9vbCA9IG9lLnV0aWxzLlRocmVhZGVkUG9vbChucHJvYywgbGVuKHRhc2tsaXN0KSwKICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2luaXQ9Y2hlY2tzdGF0dXNfaW5pdCwgd29ya2VyX2VuZD1jaGVja3N0YXR1c19lbmQpCiAgICAgICAgICAgICBmb3IgdCBpbiB0YXNrbGlzdDoKICAgICAgICAgICAgICAgICBwb29sLmFkZF90YXNrKGNoZWNrc3RhdHVzLCB0KQogICAgICAgICAgICAgcG9vbC5zdGFydCgpCiAgICAgICAgICAgICBwb29sLndhaXRfY29tcGxldGlvbigpCisgICAgICAgICAgICBiYi5ldmVudC5kaXNhYmxlX3RocmVhZGxvY2soKQorCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlByb2Nlc3NGaW5pc2hlZCgiQ2hlY2tpbmcgc3N0YXRlIG1pcnJvciBvYmplY3QgYXZhaWxhYmlsaXR5IiksIGQpCisgICAgICAgICAgICBpZiB3aGl0ZWxpc3QgYW5kIG1pc3Npbmc6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ1JlcXVpcmVkIGFydGlmYWN0cyB3ZXJlIHVuYXZhaWxhYmxlIC0gZXhpdGluZycpCiAKICAgICBpbmhlcml0bGlzdCA9IGQuZ2V0VmFyKCJJTkhFUklUIiwgVHJ1ZSkKICAgICBpZiAidG9hc3RlciIgaW4gaW5oZXJpdGxpc3Q6CkBAIC05MDUsNiArOTQ1LDkgQEAKICAgICAgICAgICAgICMgTm90aGluZyBuZWVkIGRlcGVuZCBvbiBsaWJjLWluaXRpYWwvZ2NjLWNyb3NzLWluaXRpYWwKICAgICAgICAgICAgIGlmICItaW5pdGlhbCIgaW4gdGFza2RlcGVuZGVlc1t0YXNrXVswXToKICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBGb3IgbWV0YS1leHRzZGstdG9vbGNoYWluIHdlIHdhbnQgYWxsIHN5c3Jvb3QgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW2RlcF1bMF0gPT0gJ21ldGEtZXh0c2RrLXRvb2xjaGFpbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAjIE5hdGl2ZS9Dcm9zcyBwb3B1bGF0ZV9zeXNyb290IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbdGFza11bMF0pIGFuZCBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbZGVwXVswXSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC05ODIsNiArMTAyNSw4IEBACiAgICAgICAgIGZvciByIGluIHRvcmVtb3ZlOgogICAgICAgICAgICAgKHN0YW1wLCBtYW5pZmVzdCwgd29ya2RpcikgPSByLnNwbGl0KCkKICAgICAgICAgICAgIGZvciBtIGluIGdsb2IuZ2xvYihtYW5pZmVzdCArICIuKiIpOgorICAgICAgICAgICAgICAgIGlmIG0uZW5kc3dpdGgoIi5wb3N0cm0iKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobSwgZCkKICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCArICIqIikKICAgICAgICAgICAgIGlmIHJlbW92ZXdvcmtkaXI6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCmluZGV4IGJjNWRmYTguLmEwYjA5YTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCkBAIC0xLDMgKzEsMzcgQEAKKyMgVGhlc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBzdGFnZWQgaW4gdGhlIHN5c3Jvb3QKK1NZU1JPT1RfRElSUyA9ICIgXAorICAgICR7aW5jbHVkZWRpcn0gXAorICAgICR7bGliZGlyfSBcCisgICAgJHtiYXNlX2xpYmRpcn0gXAorICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0gXAorICAgICR7ZGF0YWRpcn0gXAorIgorCisjIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSBhbHNvIHN0YWdlZCBpbiB0aGUgc3lzcm9vdCB3aGVuIHRoZXkgY29udGFpbiBmaWxlcyB0aGF0CisjIGFyZSB1c2FibGUgb24gdGhlIGJ1aWxkIHN5c3RlbQorU1lTUk9PVF9ESVJTX05BVElWRSA9ICIgXAorICAgICR7YmluZGlyfSBcCisgICAgJHtzYmluZGlyfSBcCisgICAgJHtiYXNlX2JpbmRpcn0gXAorICAgICR7YmFzZV9zYmluZGlyfSBcCisgICAgJHtsaWJleGVjZGlyfSBcCisgICAgJHtzeXNjb25mZGlyfSBcCisgICAgJHtsb2NhbHN0YXRlZGlyfSBcCisiCitTWVNST09UX0RJUlNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgJHtTWVNST09UX0RJUlNfTkFUSVZFfSIKK1NZU1JPT1RfRElSU19hcHBlbmRfY2xhc3MtY3Jvc3MgPSAiICR7U1lTUk9PVF9ESVJTX05BVElWRX0iCitTWVNST09UX0RJUlNfYXBwZW5kX2NsYXNzLWNyb3Nzc2RrID0gIiAke1NZU1JPT1RfRElSU19OQVRJVkV9IgorCisjIFRoZXNlIGRpcmVjdG9yaWVzIHdpbGwgbm90IGJlIHN0YWdlZCBpbiB0aGUgc3lzcm9vdAorU1lTUk9PVF9ESVJTX0JMQUNLTElTVCA9ICIgXAorICAgICR7bWFuZGlyfSBcCisgICAgJHtkb2NkaXJ9IFwKKyAgICAke2luZm9kaXJ9IFwKKyAgICAke2RhdGFkaXJ9L2xvY2FsZSBcCisgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMgXAorICAgICR7ZGF0YWRpcn0vZm9udHMgXAorICAgICR7ZGF0YWRpcn0vcGl4bWFwcyBcCisiCiAKIHN5c3Jvb3Rfc3RhZ2VfZGlyKCkgewogCXNyYz0iJDEiCkBAIC0xNCw0MyArNDgsMTggQEAKIAkpCiB9CiAKLXN5c3Jvb3Rfc3RhZ2VfbGliZGlyKCkgewotCXNyYz0iJDEiCi0JZGVzdD0iJDIiCi0KLQlzeXNyb290X3N0YWdlX2RpciAkc3JjICRkZXN0Ci19Ci0KIHN5c3Jvb3Rfc3RhZ2VfZGlycygpIHsKIAlmcm9tPSIkMSIKIAl0bz0iJDIiCiAKLQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7aW5jbHVkZWRpcn0gJHRvJHtpbmNsdWRlZGlyfQotCWlmIFsgIiR7QlVJTERfU1lTfSIgPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KLQkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2JpbmRpcn0gJHRvJHtiaW5kaXJ9Ci0JCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzYmluZGlyfSAkdG8ke3NiaW5kaXJ9Ci0JCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtiYXNlX2JpbmRpcn0gJHRvJHtiYXNlX2JpbmRpcn0KLQkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2Jhc2Vfc2JpbmRpcn0gJHRvJHtiYXNlX3NiaW5kaXJ9Ci0JCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsaWJleGVjZGlyfSAkdG8ke2xpYmV4ZWNkaXJ9Ci0JCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzeXNjb25mZGlyfSAkdG8ke3N5c2NvbmZkaXJ9Ci0JCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsb2NhbHN0YXRlZGlyfSAkdG8ke2xvY2Fsc3RhdGVkaXJ9Ci0JZmkKLQlpZiBbIC1kICRmcm9tJHtsaWJkaXJ9IF0KLQl0aGVuCi0JCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtsaWJkaXJ9ICR0byR7bGliZGlyfQotCWZpCi0JaWYgWyAtZCAkZnJvbSR7YmFzZV9saWJkaXJ9IF0KLQl0aGVuCi0JCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtiYXNlX2xpYmRpcn0gJHRvJHtiYXNlX2xpYmRpcn0KLQlmaQotCWlmIFsgLWQgJGZyb20ke25vbmFyY2hfYmFzZV9saWJkaXJ9IF0KLQl0aGVuCi0JCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtub25hcmNoX2Jhc2VfbGliZGlyfSAkdG8ke25vbmFyY2hfYmFzZV9saWJkaXJ9Ci0JZmkKLQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7ZGF0YWRpcn0gJHRvJHtkYXRhZGlyfQotCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCBkb2NzL2luZm8vbWFucGFnZXMvbG9jYWxlcwotCXJtIC1yZiAkdG8ke21hbmRpcn0vICR0byR7ZG9jZGlyfS8gJHRvJHtpbmZvZGlyfS8gJHt0b30ke2RhdGFkaXJ9L2xvY2FsZS8KLQlybSAtcmYgJHRvJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvICR0byR7ZGF0YWRpcn0vZm9udHMvICR0byR7ZGF0YWRpcn0vcGl4bWFwcy8KKwlmb3IgZGlyIGluICR7U1lTUk9PVF9ESVJTfTsgZG8KKwkJc3lzcm9vdF9zdGFnZV9kaXIgIiRmcm9tJGRpciIgIiR0byRkaXIiCisJZG9uZQorCisJIyBSZW1vdmUgZGlyZWN0b3JpZXMgd2UgZG8gbm90IGNhcmUgYWJvdXQKKwlmb3IgZGlyIGluICR7U1lTUk9PVF9ESVJTX0JMQUNLTElTVH07IGRvCisJCXJtIC1yZiAiJHRvJGRpciIKKwlkb25lCiB9CiAKIHN5c3Jvb3Rfc3RhZ2VfYWxsKCkgewpAQCAtMTcyLDEzICsxODEsMjYgQEAKIGRvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gInN5c3Jvb3RfY2xlYW5zc3RhdGUiCiAKIAorQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OMiA9ICJzeXNyb290X2NoZWNraGFzaGVzMiIKKworZGVmIHN5c3Jvb3RfY2hlY2toYXNoZXMyKGNvdmVyZWQsIHRhc2tuYW1lcywgZm5zLCBkLCBpbnZhbGlkdGFza3MpOgorICAgIHByb2JsZW1zID0gc2V0KCkKKyAgICBjb25maWd1cmVmbnMgPSBzZXQoKQorICAgIGZvciB0aWQgaW4gaW52YWxpZHRhc2tzOgorICAgICAgICBpZiB0YXNrbmFtZXNbdGlkXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgdGlkIG5vdCBpbiBjb3ZlcmVkOgorICAgICAgICAgICAgY29uZmlndXJlZm5zLmFkZChmbnNbdGlkXSkKKyAgICBmb3IgdGlkIGluIGNvdmVyZWQ6CisgICAgICAgIGlmIHRhc2tuYW1lc1t0aWRdID09ICJkb19wb3B1bGF0ZV9zeXNyb290IiBhbmQgZm5zW3RpZF0gaW4gY29uZmlndXJlZm5zOgorICAgICAgICAgICAgcHJvYmxlbXMuYWRkKHRpZCkKKyAgICByZXR1cm4gcHJvYmxlbXMKKwogQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OID0gInN5c3Jvb3RfY2hlY2toYXNoZXMiCiAKIGRlZiBzeXNyb290X2NoZWNraGFzaGVzKGNvdmVyZWQsIHRhc2tuYW1lcywgZm5pZHMsIGZucywgZCwgaW52YWxpZHRhc2tzID0gTm9uZSk6CiAgICAgcHJvYmxlbXMgPSBzZXQoKQogICAgIGNvbmZpZ3VyZWZuaWRzID0gc2V0KCkKICAgICBpZiBub3QgaW52YWxpZHRhc2tzOgotICAgICAgICBpbnZhbGlkdGFza3MgPSB4cmFuZ2UobGVuKHRhc2tuYW1lcykpCisgICAgICAgIGludmFsaWR0YXNrcyA9IHJhbmdlKGxlbih0YXNrbmFtZXMpKQogICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKICAgICAgICAgaWYgdGFza25hbWVzW3Rhc2tdID09ICJkb19jb25maWd1cmUiIGFuZCB0YXNrIG5vdCBpbiBjb3ZlcmVkOgogICAgICAgICAgICAgY29uZmlndXJlZm5pZHMuYWRkKGZuaWRzW3Rhc2tdKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzCmluZGV4IDRmY2IwYzUuLjc3NzhmZDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzbGludXguYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MKQEAgLTMwLDYgKzMwLDcgQEAKIFNZU0xJTlVYX1BST01QVCA/PSAiMCIKIFNZU0xJTlVYX1RJTUVPVVQgPz0gIjUwIgogQVVUT19TWVNMSU5VWE1FTlUgPz0gIjEiCitTWVNMSU5VWF9BTExPV09QVElPTlMgPz0gIjEiCiBTWVNMSU5VWF9ST09UID89ICIke1JPT1R9IgogU1lTTElOVVhfQ0ZHX1ZNICA/PSAiJHtTfS9zeXNsaW51eF92bS5jZmciCiBTWVNMSU5VWF9DRkdfTElWRSA/PSAiJHtTfS9zeXNsaW51eF9saXZlLmNmZyIKQEAgLTcxLDcgKzcyLDcgQEAKIH0KIAogc3lzbGludXhfaGRkaW1nX2luc3RhbGwoKSB7Ci0Jc3lzbGludXggJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGltZworCXN5c2xpbnV4ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9LmhkZGltZwogfQogCiBzeXNsaW51eF9oZGRkaXJlY3RfaW5zdGFsbCgpIHsKQEAgLTk5LDEyICsxMDAsMTIgQEAKIAogICAgIGNmaWxlID0gZC5nZXRWYXIoJ1NZU0xJTlVYX0NGRycsIFRydWUpCiAgICAgaWYgbm90IGNmaWxlOgotICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdVbmFibGUgdG8gcmVhZCBTWVNMSU5VWF9DRkcnKQorICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHJlYWQgU1lTTElOVVhfQ0ZHJykKIAogICAgIHRyeToKLSAgICAgICAgY2ZnZmlsZSA9IGZpbGUoY2ZpbGUsICd3JykKKyAgICAgICAgY2ZnZmlsZSA9IG9wZW4oY2ZpbGUsICd3JykKICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcmFpc2UgYmIuYnVpbGQuZnVuY0ZhaWxlZCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgKGNmaWxlKSkKKyAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBvcGVuICVzJyAlIGNmaWxlKQogCiAgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCiAKQEAgLTExNCw3ICsxMTUsMTIgQEAKICAgICAgICAgZm9yIG9wdCBpbiBvcHRzLnNwbGl0KCc7Jyk6CiAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclc1xuJyAlIG9wdCkKIAotICAgIGNmZ2ZpbGUud3JpdGUoJ0FMTE9XT1BUSU9OUyAxXG4nKTsKKyAgICBhbGxvd29wdGlvbnMgPSBkLmdldFZhcignU1lTTElOVVhfQUxMT1dPUFRJT05TJywgVHJ1ZSkKKyAgICBpZiBhbGxvd29wdGlvbnM6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0FMTE9XT1BUSU9OUyAlc1xuJyAlIGFsbG93b3B0aW9ucykKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdBTExPV09QVElPTlMgMVxuJykKKwogICAgIHN5c2xpbnV4X2RlZmF1bHRfY29uc29sZSA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUnLCBUcnVlKQogICAgIHN5c2xpbnV4X3NlcmlhbF90dHkgPSBkLmdldFZhcignU1lTTElOVVhfU0VSSUFMX1RUWScsIFRydWUpCiAgICAgc3lzbGludXhfc2VyaWFsID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1NFUklBTCcsIFRydWUpCkBAIC0xNTQsNyArMTYwLDcgQEAKIAogICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQogICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKyAgICAgICAgICAgIGJiLmZhdGFsKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQogCiAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQogICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKQEAgLTE2Niw3ICsxNzIsNyBAQAogCiAgICAgICAgIHJvb3Q9IGQuZ2V0VmFyKCdTWVNMSU5VWF9ST09UJywgVHJ1ZSkKICAgICAgICAgaWYgbm90IHJvb3Q6Ci0gICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdTWVNMSU5VWF9ST09UIG5vdCBkZWZpbmVkJykKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTWVNMSU5VWF9ST09UIG5vdCBkZWZpbmVkJykKIAogICAgICAgICBmb3IgYnR5cGUgaW4gYnR5cGVzOgogICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnTEFCRUwgJXMlc1xuS0VSTkVMIC92bWxpbnV6XG4nICUgKGJ0eXBlWzBdLCBsYWJlbCkpCkBAIC0xOTAsMyArMTk2LDQgQEAKIAogICAgIGNmZ2ZpbGUuY2xvc2UoKQogfQorYnVpbGRfc3lzbGludXhfY2ZnW2RpcnNdID0gIiR7U30iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQtYm9vdC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXN0ZW1kLWJvb3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTI0NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXN0ZW1kLWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDEyNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgc3lzdGVtZC1ib290LmJiY2xhc3MgLSBUaGUgInN5c3RlbWQtYm9vdCIgaXMgZXNzZW50aWFsbHkgdGhlIGd1bW1pYm9vdCBtZXJnZWQgaW50byBzeXN0ZW1kLgorIyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBzdGFuZGFsb25lIGd1bW1pYm9vdCBwcm9qZWN0IGlzIGRlYWQgd2l0aG91dCBhbnkgbW9yZQorIyAgICAgICAgICAgICAgICAgICAgICAgIG1haW50ZW5hbmNlLiBBcyBhIHN0YXJ0IHBvaW50LCB3ZSByZXBsYWNlIGFsbCBndW1taXRib290IG9jY3VycmVuY2VzCisjICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzeXN0ZW1kLWJvb3QgaW4gZ3VtbWlib290LmJiY2xhc3MgdG8gaGF2ZSBhIGJhc2UgdmVyc2lvbiBvZiB0aGlzCisjICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtZC1ib290LmJiY2xhc3MuCisjCisjIFNldCBFRklfUFJPVklERVIgPSAic3lzdGVtZC1ib290IiB0byB1c2Ugc3lzdGVtZC1ib290IG9uIHlvdXIgbGl2ZSBpbWFnZXMgaW5zdGVhZCBvZiBncnViLWVmaQorIyAoaW1hZ2VzIGJ1aWx0IGJ5IGltYWdlLWxpdmUuYmJjbGFzcyBvciBpbWFnZS12bS5iYmNsYXNzKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfXN5c3RlbWQtYm9vdDpkb19kZXBsb3kiCitkb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiJHtNTFBSRUZJWH1zeXN0ZW1kLWJvb3Q6ZG9fZGVwbG95IgorCitFRklESVIgPSAiL0VGSS9CT09UIgorCitTWVNURU1EX0JPT1RfQ0ZHID89ICIke1N9L2xvYWRlci5jb25mIgorU1lTVEVNRF9CT09UX0VOVFJJRVMgPz0gIiIKK1NZU1RFTURfQk9PVF9USU1FT1VUID89ICIxMCIKKworIyBOZWVkIFVVSUQgdXRpbGl0eSBjb2RlLgoraW5oZXJpdCBmcy11dWlkCisKK2VmaV9wb3B1bGF0ZSgpIHsKKyAgICAgICAgREVTVD0kMQorCisgICAgICAgIEVGSV9JTUFHRT0ic3lzdGVtZC1ib290aWEzMi5lZmkiCisgICAgICAgIERFU1RfRUZJX0lNQUdFPSJib290aWEzMi5lZmkiCisgICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07IHRoZW4KKyAgICAgICAgICAgIEVGSV9JTUFHRT0ic3lzdGVtZC1ib290eDY0LmVmaSIKKyAgICAgICAgICAgIERFU1RfRUZJX0lNQUdFPSJib290eDY0LmVmaSIKKyAgICAgICAgZmkKKworICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0ke0VGSURJUn0KKyAgICAgICAgIyBzeXN0ZW1kLWJvb3QgcmVxdWlyZXMgdGhlc2UgcGF0aHMgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAgICAgICAgIyB0aGV5IGFyZSBub3QgY3VzdG9taXphYmxlIHNvIG5vIHBvaW50IGluIG5ldyB2YXJzCisgICAgICAgIGluc3RhbGwgLWQgJHtERVNUfS9sb2FkZXIKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9L2xvYWRlci9lbnRyaWVzCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9LyR7RUZJX0lNQUdFfSAke0RFU1R9JHtFRklESVJ9LyR7REVTVF9FRklfSU1BR0V9CisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1NZU1RFTURfQk9PVF9DRkd9ICR7REVTVH0vbG9hZGVyL2xvYWRlci5jb25mCisgICAgICAgIGZvciBpIGluICR7U1lTVEVNRF9CT09UX0VOVFJJRVN9OyBkbworICAgICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7aX0gJHtERVNUfS9sb2FkZXIvZW50cmllcworICAgICAgICBkb25lCit9CisKK2VmaV9pc29fcG9wdWxhdGUoKSB7CisgICAgICAgIGlzb19kaXI9JDEKKyAgICAgICAgZWZpX3BvcHVsYXRlICRpc29fZGlyCisgICAgICAgIG1rZGlyIC1wICR7RUZJSU1HRElSfS8ke0VGSURJUn0KKyAgICAgICAgY3AgJGlzb19kaXIvJHtFRklESVJ9LyogJHtFRklJTUdESVJ9JHtFRklESVJ9CisgICAgICAgIGNwICRpc29fZGlyL3ZtbGludXogJHtFRklJTUdESVJ9CisgICAgICAgIEVGSVBBVEg9JChlY2hvICIke0VGSURJUn0iIHwgc2VkICdzL1wvL1xcL2cnKQorICAgICAgICBlY2hvICJmczA6JHtFRklQQVRIfVxcJHtERVNUX0VGSV9JTUFHRX0iID4gJHtFRklJTUdESVJ9L3N0YXJ0dXAubnNoCisgICAgICAgIGlmIFsgLWYgIiRpc29fZGlyL2luaXRyZCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKyAgICAgICAgZmkKK30KKworZWZpX2hkZGltZ19wb3B1bGF0ZSgpIHsKKyAgICAgICAgZWZpX3BvcHVsYXRlICQxCit9CisKK3B5dGhvbiBidWlsZF9lZmlfY2ZnKCkgeworICAgIHMgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgbGFiZWxzID0gZC5nZXRWYXIoJ0xBQkVMUycsIFRydWUpCisgICAgaWYgbm90IGxhYmVsczoKKyAgICAgICAgYmIuZGVidWcoMSwgIkxBQkVMUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdTWVNURU1EX0JPT1RfQ0ZHJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gb3BlbihjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgY2ZpbGUpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKyAgICBjZmdmaWxlLndyaXRlKCdkZWZhdWx0ICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKyAgICB0aW1lb3V0ID0gZC5nZXRWYXIoJ1NZU1RFTURfQk9PVF9USU1FT1VUJywgVHJ1ZSkKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCd0aW1lb3V0ICVzXG4nICUgdGltZW91dCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCd0aW1lb3V0IDEwXG4nKQorICAgIGNmZ2ZpbGUuY2xvc2UoKQorCisgICAgZm9yIGxhYmVsIGluIGxhYmVscy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBvdmVycmlkZXM6CisgICAgICAgICAgICBiYi5mYXRhbCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBlbnRyeWZpbGUgPSAiJXMvJXMuY29uZiIgJSAocywgbGFiZWwpCisgICAgICAgIGQuYXBwZW5kVmFyKCJTWVNURU1EX0JPT1RfRU5UUklFUyIsICIgIiArIGVudHJ5ZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnljZmcgPSBvcGVuKGVudHJ5ZmlsZSwgInciKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGJiLmZhdGFsKCdVbmFibGUgdG8gb3BlbiAlcycgJSBlbnRyeWZpbGUpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBlbnRyeWNmZy53cml0ZSgndGl0bGUgJXNcbicgJSBsYWJlbCkKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ2xpbnV4IC92bWxpbnV6XG4nKQorCisgICAgICAgIGFwcGVuZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0FQUEVORCcsIFRydWUpCisgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgZW50cnljZmcud3JpdGUoJ2luaXRyZCAvaW5pdHJkXG4nKQorICAgICAgICBsYiA9IGxhYmVsCisgICAgICAgIGlmIGxhYmVsID09ICJpbnN0YWxsIjoKKyAgICAgICAgICAgIGxiID0gImluc3RhbGwtZWZpIgorICAgICAgICBlbnRyeWNmZy53cml0ZSgnb3B0aW9ucyBMQUJFTD0lcyAnICUgbGIpCisgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgIGFwcGVuZCA9IHJlcGxhY2Vfcm9vdGZzX3V1aWQoZCwgYXBwZW5kKQorICAgICAgICAgICAgZW50cnljZmcud3JpdGUoJyVzJyAlIGFwcGVuZCkKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ1xuJykKKyAgICAgICAgZW50cnljZmcuY2xvc2UoKQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXN0ZW1kLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwppbmRleCBkYjc4NzNmLi5kNTZjNzYwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwpAQCAtMTY1LDggKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgaWYgcGF0aF9mb3VuZCAhPSAnJzoKICAgICAgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoX2ZvdW5kLCBzZXJ2aWNlLCBrZXlzKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIlNZU1RFTURfU0VSVklDRV8lcyB2YWx1ZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAocGtnX3N5c3RlbWQsIHNlcnZpY2UpKQorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiU1lTVEVNRF9TRVJWSUNFXyVzIHZhbHVlICVzIGRvZXMgbm90IGV4aXN0IiAlIChwa2dfc3lzdGVtZCwgc2VydmljZSkpCiAKICAgICAjIFJ1biBhbGwgbW9kaWZpY2F0aW9ucyBvbmNlIHdoZW4gY3JlYXRpbmcgcGFja2FnZQogICAgIGlmIG9zLnBhdGguZXhpc3RzKGQuZ2V0VmFyKCJEIiwgVHJ1ZSkpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzCmluZGV4IDlmNGMyNGUuLmE5NGY3NTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVybWluYWwuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgYmIuZGF0YS5lbWl0X2Z1bmMoY21kX2Z1bmMsIHNjcmlwdCwgZW52ZGF0YSkKICAgICAgICAgc2NyaXB0LndyaXRlKGNtZF9mdW5jKQogICAgICAgICBzY3JpcHQud3JpdGUoIlxuIikKLSAgICBvcy5jaG1vZChydW5maWxlLCAwNzU1KQorICAgIG9zLmNobW9kKHJ1bmZpbGUsIDBvNzU1KQogCiAgICAgcmV0dXJuIHJ1bmZpbGUKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0ZXhwb3J0LmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RleHBvcnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQ3MDIwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0ZXhwb3J0LmJiY2xhc3MKQEAgLTAsMCArMSwyMDYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorIworIworIyB0ZXN0ZXhwb3J0LmJiY2xhc3MgYWxsb3dzIHRvIGV4ZWN1dGUgcnVudGltZSB0ZXN0IG91dHNpZGUgT0UgZW52aXJvbm1lbnQuCisjIE1vc3Qgb2YgdGhlIHRlc3RzIGFyZSBjb21tYW5kcyBydW4gb24gdGFyZ2V0IGltYWdlIG92ZXIgc3NoLgorIyBUbyB1c2UgaXQgYWRkIHRlc3RleHBvcnQgdG8gZ2xvYmFsIGluaGVyaXQgYW5kIGNhbGwgeW91ciB0YXJnZXQgaW1hZ2Ugd2l0aCAtYyB0ZXN0ZXhwb3J0CisjIFlvdSBjYW4gdHJ5IGl0IG91dCBsaWtlIHRoaXM6CisjIC0gRmlyc3QgYnVpbGQgYW4gaW1hZ2UuIGkuZS4gY29yZS1pbWFnZS1zYXRvCisjIC0gQWRkIElOSEVSSVQgKz0gInRlc3RleHBvcnQiIGluIGxvY2FsLmNvbmYKKyMgLSBUaGVuIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RleHBvcnQuIFRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZQorIyAgIHRvIGV4ZWN1dGUgdGhlIHJ1bnRpbWUgdGVzdHMgdXNpbmcgcnVuZXhwb3J0ZWQucHkuCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRFU1RfU1VJVEVTIGNoZWNrIHRlc3RpbWFnZSBjbGFzcy4KKworVEVTVF9MT0dfRElSID89ICIke1dPUktESVJ9L3Rlc3RleHBvcnQiCitURVNUX0VYUE9SVF9ESVIgPz0gIiR7VE1QRElSfS90ZXN0ZXhwb3J0LyR7UE59IgorVEVTVF9FWFBPUlRfUEFDS0FHRURfRElSID89ICJwYWNrYWdlcy9wYWNrYWdlZCIKK1RFU1RfRVhQT1JUX0VYVFJBQ1RFRF9ESVIgPz0gInBhY2thZ2VzL2V4dHJhY3RlZCIKKworVEVTVF9UQVJHRVQgPz0gInNpbXBsZXJlbW90ZSIKK1RFU1RfVEFSR0VUX0lQID89ICIiCitURVNUX1NFUlZFUl9JUCA/PSAiIgorCitURVNUX0VYUE9SVF9TREtfUEFDS0FHRVMgPz0gIiIKK1RFU1RfRVhQT1JUX1NES19FTkFCTEVEID89ICIwIgorVEVTVF9FWFBPUlRfU0RLX05BTUUgPz0gInRlc3RleHBvcnQtdG9vbHMtbmF0aXZlc2RrIgorVEVTVF9FWFBPUlRfU0RLX0RJUiA/PSAic2RrIgorCitURVNUX0VYUE9SVF9ERVBFTkRTID0gIiIKK1RFU1RfRVhQT1JUX0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9QS0dUWVBFJywgJ3JwbScsICdjcGlvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywgJycsIGQpfSIKK1RFU1RfRVhQT1JUX0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdURVNUX0VYUE9SVF9TREtfRU5BQkxFRCcsICcxJywgJ3Rlc3RleHBvcnQtdGFyYmFsbDpkb19wb3B1bGF0ZV9zZGsnLCAnJywgZCl9IgorVEVTVF9FWFBPUlRfTE9DSyA9ICIke1RNUERJUn0vdGVzdGltYWdlLmxvY2siCisKK3B5dGhvbiBkb190ZXN0ZXhwb3J0KCkgeworICAgIHRlc3RleHBvcnRfbWFpbihkKQorfQorCithZGR0YXNrIHRlc3RleHBvcnQKK2RvX3Rlc3RleHBvcnRbbm9zdGFtcF0gPSAiMSIKK2RvX3Rlc3RleHBvcnRbZGVwZW5kc10gKz0gIiR7VEVTVF9FWFBPUlRfREVQRU5EU30gJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RleHBvcnRbbG9ja2ZpbGVzXSArPSAiJHtURVNUX0VYUE9SVF9MT0NLfSIKKworZGVmIGV4cG9ydFRlc3RzKGQsdGMpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBwa2d1dGlsCisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIGV4cG9ydHBhdGggPSBkLmdldFZhcigiVEVTVF9FWFBPUlRfRElSIiwgVHJ1ZSkKKworICAgIHNhdmVkYXRhID0ge30KKyAgICBzYXZlZGF0YVsiZCJdID0ge30KKyAgICBzYXZlZGF0YVsidGFyZ2V0Il0gPSB7fQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXVsiaXAiXSA9IHRjLnRhcmdldC5pcCBvciBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXVsic2VydmVyX2lwIl0gPSB0Yy50YXJnZXQuc2VydmVyX2lwIG9yIGQuZ2V0VmFyKCJURVNUX1NFUlZFUl9JUCIsIFRydWUpCisKKyAgICBrZXlzID0gWyBrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoIl8iKSBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJCQiIpIFwKKyAgICAgICAgICAgIGFuZCBub3Qga2V5LnN0YXJ0c3dpdGgoIkJfcG4iKSBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJkb18iKSBhbmQgbm90IGQuZ2V0VmFyRmxhZyhrZXksICJmdW5jIiwgVHJ1ZSldCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzYXZlZGF0YVsiZCJdW2tleV0gPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yOgorICAgICAgICAgICAgIyB3ZSBkb24ndCBjYXJlIGFib3V0IHRob3NlIGFueXdheQorICAgICAgICAgICAgcGFzcworCisgICAganNvbl9maWxlID0gb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJ0ZXN0ZGF0YS5qc29uIikKKyAgICB3aXRoIG9wZW4oanNvbl9maWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBqc29uLmR1bXAoc2F2ZWRhdGEsIGYsIHNraXBrZXlzPVRydWUsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICMgUmVwbGFjZSBhYnNvbHV0ZSBwYXRoIHdpdGggcmVsYXRpdmUgaW4gdGhlIGZpbGUKKyAgICBleGNsdWRlX3BhdGggPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkNPUkVCQVNFIiwgVHJ1ZSksJ21ldGEnLCdsaWInLCdvZXFhJykKKyAgICBmMSA9IG9wZW4oanNvbl9maWxlLCdyJykucmVhZCgpCisgICAgZjIgPSBvcGVuKGpzb25fZmlsZSwndycpCisgICAgbSA9IGYxLnJlcGxhY2UoZXhjbHVkZV9wYXRoLCdvZXFhJykKKyAgICBmMi53cml0ZShtKQorICAgIGYyLmNsb3NlKCkKKworICAgICMgbm93IHN0YXJ0IGNvcHlpbmcgZmlsZXMKKyAgICAjIHdlJ2xsIGJhc2ljYWxseSBjb3B5IGV2ZXJ5dGhpbmcgdW5kZXIgbWV0YS9saWIvb2VxYSwgd2l0aCB0aGVzZSBleGNlcHRpb25zCisgICAgIyAgLSBvZXFhL3RhcmdldGNvbnRyb2wucHkgLSBub3QgbmVlZGVkCisgICAgIyAgLSBvZXFhL3NlbGZ0ZXN0IC0gc29tZXRoaW5nIGVsc2UKKyAgICAjIFRoYXQgbWVhbnM6CisgICAgIyAgIC0gYWxsIHRlc3RzIGZyb20gb2VxYS9ydW50aW1lIGRlZmluZWQgaW4gVEVTVF9TVUlURVMgKGluY2x1ZGluZyBmcm9tIG90aGVyIGxheWVycykKKyAgICAjICAgLSB0aGUgY29udGVudHMgb2Ygb2VxYS91dGlscyBhbmQgb2VxYS9ydW50aW1lL2ZpbGVzCisgICAgIyAgIC0gb2VxYS9vZXRlc3QucHkgYW5kIG9lcWEvcnVuZXhwb3J0LnB5ICh0aGlzIHdpbGwgZ2V0IGNvcGllZCB0byBleHBvcnRwYXRoIG5vdCBleHBvcnRwYXRoL29lcWEpCisgICAgIyAgIC0gX19pbml0X18ucHkgZmlsZXMKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUvZmlsZXMiKSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3V0aWxzIikpCisgICAgIyBjb3B5IHRlc3QgbW9kdWxlcywgdGhpcyBzaG91bGQgY292ZXIgdGVzdHMgaW4gb3RoZXIgbGF5ZXJzIHRvbworICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgnOicpCisgICAgZm9yIHQgaW4gdGMudGVzdHNsaXN0OgorICAgICAgICBpc2ZvbGRlciA9IEZhbHNlCisgICAgICAgIGlmIHJlLnNlYXJjaCgiXHcrXC5cdytcLnRlc3RfXFMrIiwgdCk6CisgICAgICAgICAgICB0ID0gJy4nLmpvaW4odC5zcGxpdCgnLicpWzozXSkKKyAgICAgICAgbW9kID0gcGtndXRpbC5nZXRfbG9hZGVyKHQpCisgICAgICAgICMgTW9yZSBkZXB0aCB0aGFuIHVzdWFsPworICAgICAgICBpZiAodC5jb3VudCgnLicpID4gMik6CisgICAgICAgICAgICBmb3IgcCBpbiBiYnBhdGg6CisgICAgICAgICAgICAgICAgZm9sZGVybmFtZSA9IG9zLnBhdGguam9pbihwLCAnbGliJywgIG9zLnNlcC5qb2luKHQuc3BsaXQoJy4nKSkucnNwbGl0KG9zLnNlcCwgMSlbMF0pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihmb2xkZXJuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgaXNmb2xkZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9mb2xkZXIgPSBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEiLCAicnVudGltZSIsIG9zLnBhdGguYmFzZW5hbWUoZm9sZGVybmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfZm9sZGVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9lLnBhdGguY29weXRyZWUoZm9sZGVybmFtZSwgdGFyZ2V0X2ZvbGRlcikKKyAgICAgICAgaWYgbm90IGlzZm9sZGVyOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG1vZC5wYXRoLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZSIpKQorICAgICAgICAgICAganNvbl9maWxlID0gIiVzLmpzb24iICUgbW9kLnBhdGgucnNwbGl0KCIuIiwgMSlbMF0KKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGpzb25fZmlsZSk6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKGpzb25fZmlsZSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUiKSkKKyAgICAjIEdldCBtZXRhIGxheWVyCisgICAgZm9yIGxheWVyIGluIGQuZ2V0VmFyKCJCQkxBWUVSUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUobGF5ZXIpID09ICJtZXRhIjoKKyAgICAgICAgICAgIG1ldGFfbGF5ZXIgPSBsYXllcgorICAgICAgICAgICAgYnJlYWsKKyAgICAjIGNvcHkgb2VxYS9vZXRlc3QucHkgYW5kIG9lcWEvcnVuZXhwb3J0ZWQucHkKKyAgICBvZXFhZGlyID0gb3MucGF0aC5qb2luKG1ldGFfbGF5ZXIsICJsaWIvb2VxYSIpCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAib2V0ZXN0LnB5IiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYSIpKQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bmV4cG9ydGVkLnB5IiksIGV4cG9ydHBhdGgpCisgICAgIyBjb3B5IG9lcWEvdXRpbHMvKi5weQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihvZXFhZGlyLCAidXRpbHMiKSk6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgiLnB5Iik6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihyb290LCBmKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3V0aWxzIikpCisgICAgIyBjb3B5IG9lcWEvcnVudGltZS9maWxlcy8qCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKG9lcWFkaXIsICJydW50aW1lL2ZpbGVzIikpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ocm9vdCwgZiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lL2ZpbGVzIikpCisKKyAgICAjIENyZWF0ZSB0YXIgZmlsZSBmb3IgY29tbW9uIHBhcnRzIG9mIHRlc3RleHBvcnQKKyAgICBjcmVhdGVfdGFyYmFsbChkLCAidGVzdGV4cG9ydC50YXIuZ3oiLCBkLmdldFZhcigiVEVTVF9FWFBPUlRfRElSIiwgVHJ1ZSkpCisKKyAgICAjIENvcHkgcGFja2FnZXMgbmVlZGVkIGZvciBydW50aW1lIHRlc3RpbmcKKyAgICB0ZXN0X3BrZ19kaXIgPSBkLmdldFZhcigiVEVTVF9ORUVERURfUEFDS0FHRVNfRElSIiwgVHJ1ZSkKKyAgICBpZiBvcy5saXN0ZGlyKHRlc3RfcGtnX2Rpcik6CisgICAgICAgIGV4cG9ydF9wa2dfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSwgInBhY2thZ2VzIikKKyAgICAgICAgb2UucGF0aC5jb3B5dHJlZSh0ZXN0X3BrZ19kaXIsIGV4cG9ydF9wa2dfZGlyKQorICAgICAgICAjIENyZWF0ZSB0YXIgZmlsZSBmb3IgcGFja2FnZXMgbmVlZGVkIGJ5IHRoZSBEVVQKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgInRlc3RleHBvcnRfcGFja2FnZXNfJXMudGFyLmd6IiAlIGQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSksIGV4cG9ydF9wa2dfZGlyKQorCisgICAgIyBDb3B5IFNESworICAgIGlmIGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9TREtfRU5BQkxFRCIsIFRydWUpID09ICIxIjoKKyAgICAgICAgc2RrX2RlcGxveSA9IGQuZ2V0VmFyKCJTREtfREVQTE9ZIiwgVHJ1ZSkKKyAgICAgICAgdGFyYmFsbF9uYW1lID0gIiVzLnNoIiAlIGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9TREtfTkFNRSIsIFRydWUpCisgICAgICAgIHRhcmJhbGxfcGF0aCA9IG9zLnBhdGguam9pbihzZGtfZGVwbG95LCB0YXJiYWxsX25hbWUpCisgICAgICAgIGV4cG9ydF9zZGtfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIlRFU1RfRVhQT1JUX1NES19ESVIiLCBUcnVlKSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGV4cG9ydF9zZGtfZGlyKQorICAgICAgICBzaHV0aWwuY29weTIodGFyYmFsbF9wYXRoLCBleHBvcnRfc2RrX2RpcikKKworICAgICAgICAjIENyZWF0ZSB0YXIgZmlsZSBmb3IgdGhlIHNkaworICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCAidGVzdGV4cG9ydF9zZGtfJXMudGFyLmd6IiAlIGQuZ2V0VmFyKCJTREtfQVJDSCIsIFRydWUpLCBleHBvcnRfc2RrX2RpcikKKworICAgIGJiLnBsYWluKCJFeHBvcnRlZCB0ZXN0cyB0bzogJXMiICUgZXhwb3J0cGF0aCkKKworZGVmIHRlc3RleHBvcnRfbWFpbihkKToKKyAgICBmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBFeHBvcnRUZXN0Q29udGV4dAorICAgIGZyb20gb2VxYS50YXJnZXRjb250cm9sIGltcG9ydCBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIKKyAgICBmcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgZ2V0X2hvc3RfZHVtcGVyCisKKyAgICB0ZXN0X2NyZWF0ZV9leHRyYWN0X2RpcnMoZCkKKyAgICBleHBvcnRfZGlyID0gZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKSkKKyAgICBiYi51dGlscy5yZW1vdmUoZXhwb3J0X2RpciwgcmVjdXJzZT1UcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihleHBvcnRfZGlyKQorCisgICAgIyB0aGUgcm9ib3QgZGFuY2UKKyAgICB0YXJnZXQgPSBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIoZCkKKworICAgICMgdGVzdCBjb250ZXh0CisgICAgdGMgPSBFeHBvcnRUZXN0Q29udGV4dChkLCB0YXJnZXQpCisKKyAgICAjIHRoaXMgaXMgYSBkdW1teSBsb2FkIG9mIHRlc3RzCisgICAgIyB3ZSBhcmUgZG9pbmcgdGhhdCB0byBmaW5kIGNvbXBpbGUgZXJyb3JzIGluIHRoZSB0ZXN0cyB0aGVtc2VsdmVzCisgICAgIyBiZWZvcmUgYm9vdGluZyB0aGUgaW1hZ2UKKyAgICB0cnk6CisgICAgICAgIHRjLmxvYWRUZXN0cygpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGJiLmZhdGFsKCJMb2FkaW5nIHRlc3RzIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKyAgICB0Yy5leHRyYWN0X3BhY2thZ2VzKCkKKyAgICBleHBvcnRUZXN0cyhkLHRjKQorCitkZWYgY3JlYXRlX3RhcmJhbGwoZCwgdGFyX25hbWUsIHNyY19kaXIpOgorCisgICAgaW1wb3J0IHRhcmZpbGUKKworICAgIHRhcl9wYXRoID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSwgdGFyX25hbWUpCisgICAgY3VycmVudF9kaXIgPSBvcy5nZXRjd2QoKQorICAgIHNyY19kaXIgPSBzcmNfZGlyLnJzdHJpcCgnLycpCisgICAgZGlyX25hbWUgPSBvcy5wYXRoLmRpcm5hbWUoc3JjX2RpcikKKyAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyY19kaXIpCisKKyAgICBvcy5jaGRpcihkaXJfbmFtZSkKKyAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFyX3BhdGgsICJ3Omd6IikKKyAgICB0YXIuYWRkKGJhc2VfbmFtZSkKKyAgICB0YXIuY2xvc2UoKQorICAgIG9zLmNoZGlyKGN1cnJlbnRfZGlyKQorCisKK3Rlc3RleHBvcnRfbWFpblt2YXJkZXBzZXhjbHVkZV0gPSsgIkJCX09SSUdFTlYiCisKK2luaGVyaXQgdGVzdGltYWdlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UuYmJjbGFzcwppbmRleCBlNzdiYjExLi42YjY3ODFkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKQEAgLTgsNyArOCw3IEBACiAjIFRvIHVzZSBpdCBhZGQgdGVzdGltYWdlIHRvIGdsb2JhbCBpbmhlcml0IGFuZCBjYWxsIHlvdXIgdGFyZ2V0IGltYWdlIHdpdGggLWMgdGVzdGltYWdlCiAjIFlvdSBjYW4gdHJ5IGl0IG91dCBsaWtlIHRoaXM6CiAjIC0gZmlyc3QgYnVpbGQgYSBxZW11IGNvcmUtaW1hZ2Utc2F0bwotIyAtIGFkZCBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiIGluIGxvY2FsLmNvbmYKKyMgLSBhZGQgSU1BR0VfQ0xBU1NFUyArPSAidGVzdGltYWdlIiBpbiBsb2NhbC5jb25mCiAjIC0gdGhlbiBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UuIFRoYXQgd2lsbCBydW4gYSBzdGFuZGFyZCBzdWl0ZSBvZiB0ZXN0cy4KIAogIyBZb3UgY2FuIHNldCAob3IgYXBwZW5kIHRvKSBURVNUX1NVSVRFUyBpbiBsb2NhbC5jb25mIHRvIHNlbGVjdCB0aGUgdGVzdHMKQEAgLTMwLDcgKzMwLDEwIEBACiBURVNUX0xPR19ESVIgPz0gIiR7V09SS0RJUn0vdGVzdGltYWdlIgogCiBURVNUX0VYUE9SVF9ESVIgPz0gIiR7VE1QRElSfS90ZXN0aW1hZ2UvJHtQTn0iCi1URVNUX0VYUE9SVF9PTkxZID89ICIwIgorVEVTVF9JTlNUQUxMX1RNUF9ESVIgPz0gIiR7V09SS0RJUn0vdGVzdGltYWdlL2luc3RhbGxfdG1wIgorVEVTVF9ORUVERURfUEFDS0FHRVNfRElSID89ICIke1dPUktESVJ9L3Rlc3RpbWFnZS9wYWNrYWdlcyIKK1RFU1RfRVhUUkFDVEVEX0RJUiA/PSAiJHtURVNUX05FRURFRF9QQUNLQUdFU19ESVJ9L2V4dHJhY3RlZCIKK1RFU1RfUEFDS0FHRURfRElSID89ICIke1RFU1RfTkVFREVEX1BBQ0tBR0VTX0RJUn0vcGFja2FnZWQiCiAKIFJQTVRFU1RTVUlURSA9ICIke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdycG0nLCAnc21hcnQgcnBtJywgJycsIGQpfSIKIE1JTlRFU1RTVUlURSA9ICJwaW5nIgpAQCAtNDgsMjUgKzUxLDMzIEBACiBERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiJHtORVRURVNUU1VJVEV9IGNvbm5tYW4geG9yZyBwZXJsIHB5dGhvbiBcCiAgICAgJHtERVZURVNUU1VJVEV9IHBhcnNlbG9ncyAke1JQTVRFU1RTVUlURX0iCiBERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbHNiLWRldiA9ICIke05FVFRFU1RTVUlURX0gcGFtIHBlcmwgcHl0aG9uIHBhcnNlbG9ncyAke1JQTVRFU1RTVUlURX0iCi1ERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICIke05FVFRFU1RTVUlURX0gYnVpbGRjdnMgYnVpbGRpcHRhYmxlcyBidWlsZHN1ZG9rdSBcCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICIke05FVFRFU1RTVUlURX0gYnVpbGRjdnMgYnVpbGRpcHRhYmxlcyBidWlsZGdhbGN1bGF0b3IgXAogICAgIGNvbm5tYW4gJHtERVZURVNUU1VJVEV9IHBhbSBwZXJsIHB5dGhvbiBwYXJzZWxvZ3MgJHtSUE1URVNUU1VJVEV9IgogREVGQVVMVF9URVNUX1NVSVRFU19wbi1tZXRhLXRvb2xjaGFpbiA9ICJhdXRvIgogCiAjIGFhcmNoNjQgaGFzIG5vIGdyYXBoaWNzCiBERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9hYXJjaDY0ID0gInhvcmciCiAKLSNxZW11bWlwcyBpcyB0b28gc2xvdyBmb3IgYnVpbGRzdWRva3UKLURFRkFVTFRfVEVTVF9TVUlURVNfcmVtb3ZlX3FlbXVtaXBzID0gImJ1aWxkc3Vkb2t1IgorIyBxZW11bWlwcyBpcyBxdWl0ZSBzbG93IGFuZCBoYXMgcmVhY2hlZCB0aGUgdGltZW91dCBsaW1pdCBzZXZlcmFsIHRpbWVzIG9uIHRoZSBZUCBidWlsZCBjbHVzdGVyLAorIyBtaXRpZ2F0ZSB0aGlzIGJ5IHJlbW92aW5nIGJ1aWxkIHRlc3RzIGZvciBxZW11bWlwcyBtYWNoaW5lcy4KK01JUFNSRU1PVkUgPz89ICJidWlsZGN2cyBidWlsZGlwdGFibGVzIGJ1aWxkZ2FsY3VsYXRvciIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcmVtb3ZlX3FlbXVtaXBzID0gIiR7TUlQU1JFTU9WRX0iCitERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9xZW11bWlwczY0ID0gIiR7TUlQU1JFTU9WRX0iCiAKIFRFU1RfU1VJVEVTID89ICIke0RFRkFVTFRfVEVTVF9TVUlURVN9IgogCiBURVNUX1FFTVVCT09UX1RJTUVPVVQgPz0gIjEwMDAiCiBURVNUX1RBUkdFVCA/PSAicWVtdSIKLVRFU1RfVEFSR0VUX0lQID89ICIiCi1URVNUX1NFUlZFUl9JUCA/PSAiIgogCiBURVNUSU1BR0VERVBFTkRTID0gIiIKIFRFU1RJTUFHRURFUEVORFNfcWVtdWFsbCA9ICJxZW11LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHFlbXUtaGVscGVyLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorVEVTVElNQUdFREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX1BLR1RZUEUnLCAncnBtJywgJ2NwaW8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnLCAnJywgZCl9IgorVEVTVElNQUdFREVQRU5EU19xZW11YWxsICs9ICIke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdycG0nLCAnY3Bpby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcsICcnLCBkKX0iCitURVNUSU1BR0VERVBFTkRTX3FlbXVhbGwgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9QS0dUWVBFJywgJ3JwbScsICdjcmVhdGVyZXBvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywgJycsIGQpfSIKK1RFU1RJTUFHRURFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9QS0dUWVBFJywgJ3JwbScsICdweXRob24tc21hcnRwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcsICcnLCBkKX0iCitURVNUSU1BR0VERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdpcGsnLCAnb3BrZy11dGlscy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcsICcnLCBkKX0iCitURVNUSU1BR0VERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdkZWInLCAnYXB0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywgJycsIGQpfSIKKwogCiBURVNUSU1BR0VMT0NLID0gIiR7VE1QRElSfS90ZXN0aW1hZ2UubG9jayIKIFRFU1RJTUFHRUxPQ0tfcWVtdWFsbCA9ICIiCkBAIC0xMDMsMTAyICsxMTQsMTIgQEAKIHB5dGhvbiBkb190ZXN0aW1hZ2UoKSB7CiAgICAgdGVzdGltYWdlX21haW4oZCkKIH0KKwogYWRkdGFzayB0ZXN0aW1hZ2UKIGRvX3Rlc3RpbWFnZVtub3N0YW1wXSA9ICIxIgogZG9fdGVzdGltYWdlW2RlcGVuZHNdICs9ICIke1RFU1RJTUFHRURFUEVORFN9IgogZG9fdGVzdGltYWdlW2xvY2tmaWxlc10gKz0gIiR7VEVTVElNQUdFTE9DS30iCiAKLWRlZiBleHBvcnRUZXN0cyhkLHRjKToKLSAgICBpbXBvcnQganNvbgotICAgIGltcG9ydCBzaHV0aWwKLSAgICBpbXBvcnQgcGtndXRpbAotICAgIGltcG9ydCByZQotCi0gICAgZXhwb3J0cGF0aCA9IGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKQotCi0gICAgc2F2ZWRhdGEgPSB7fQotICAgIHNhdmVkYXRhWyJkIl0gPSB7fQotICAgIHNhdmVkYXRhWyJ0YXJnZXQiXSA9IHt9Ci0gICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl0gPSB7fQotICAgIGZvciBrZXkgaW4gdGMuX19kaWN0X186Ci0gICAgICAgICMgc3BlY2lhbCBjYXNlcwotICAgICAgICBpZiBrZXkgbm90IGluIFsnZCcsICd0YXJnZXQnLCAnaG9zdF9kdW1wZXInLCAnc3VpdGUnXToKLSAgICAgICAgICAgIHNhdmVkYXRhW2tleV0gPSBnZXRhdHRyKHRjLCBrZXkpCi0gICAgc2F2ZWRhdGFbInRhcmdldCJdWyJpcCJdID0gdGMudGFyZ2V0LmlwIG9yIGQuZ2V0VmFyKCJURVNUX1RBUkdFVF9JUCIsIFRydWUpCi0gICAgc2F2ZWRhdGFbInRhcmdldCJdWyJzZXJ2ZXJfaXAiXSA9IHRjLnRhcmdldC5zZXJ2ZXJfaXAgb3IgZC5nZXRWYXIoIlRFU1RfU0VSVkVSX0lQIiwgVHJ1ZSkKLQotICAgIGtleXMgPSBbIGtleSBmb3Iga2V5IGluIGQua2V5cygpIGlmIG5vdCBrZXkuc3RhcnRzd2l0aCgiXyIpIGFuZCBub3Qga2V5LnN0YXJ0c3dpdGgoIkJCIikgXAotICAgICAgICAgICAgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiQl9wbiIpIGFuZCBub3Qga2V5LnN0YXJ0c3dpdGgoImRvXyIpIGFuZCBub3QgZC5nZXRWYXJGbGFnKGtleSwgImZ1bmMiLCBUcnVlKV0KLSAgICBmb3Iga2V5IGluIGtleXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNhdmVkYXRhWyJkIl1ba2V5XSA9IGQuZ2V0VmFyKGtleSwgVHJ1ZSkKLSAgICAgICAgZXhjZXB0IGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3I6Ci0gICAgICAgICAgICAjIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhvc2UgYW55d2F5Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBzYXZlZGF0YVsiaG9zdF9kdW1wZXIiXVsicGFyZW50X2RpciJdID0gdGMuaG9zdF9kdW1wZXIucGFyZW50X2RpcgotICAgIHNhdmVkYXRhWyJob3N0X2R1bXBlciJdWyJjbWRzIl0gPSB0Yy5ob3N0X2R1bXBlci5jbWRzCi0KLSAgICBqc29uX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgInRlc3RkYXRhLmpzb24iKQotICAgIHdpdGggb3Blbihqc29uX2ZpbGUsICJ3IikgYXMgZjoKLSAgICAgICAgICAgIGpzb24uZHVtcChzYXZlZGF0YSwgZiwgc2tpcGtleXM9VHJ1ZSwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKQotCi0gICAgIyBSZXBsYWNlIGFic29sdXRlIHBhdGggd2l0aCByZWxhdGl2ZSBpbiB0aGUgZmlsZQotICAgIGV4Y2x1ZGVfcGF0aCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiQ09SRUJBU0UiLCBUcnVlKSwnbWV0YScsJ2xpYicsJ29lcWEnKQotICAgIGYxID0gb3Blbihqc29uX2ZpbGUsJ3InKS5yZWFkKCkKLSAgICBmMiA9IG9wZW4oanNvbl9maWxlLCd3JykKLSAgICBtID0gZjEucmVwbGFjZShleGNsdWRlX3BhdGgsJ29lcWEnKQotICAgIGYyLndyaXRlKG0pCi0gICAgZjIuY2xvc2UoKQotCi0gICAgIyBub3cgc3RhcnQgY29weWluZyBmaWxlcwotICAgICMgd2UnbGwgYmFzaWNhbGx5IGNvcHkgZXZlcnl0aGluZyB1bmRlciBtZXRhL2xpYi9vZXFhLCB3aXRoIHRoZXNlIGV4Y2VwdGlvbnMKLSAgICAjICAtIG9lcWEvdGFyZ2V0Y29udHJvbC5weSAtIG5vdCBuZWVkZWQKLSAgICAjICAtIG9lcWEvc2VsZnRlc3QgLSBzb21ldGhpbmcgZWxzZQotICAgICMgVGhhdCBtZWFuczoKLSAgICAjICAgLSBhbGwgdGVzdHMgZnJvbSBvZXFhL3J1bnRpbWUgZGVmaW5lZCBpbiBURVNUX1NVSVRFUyAoaW5jbHVkaW5nIGZyb20gb3RoZXIgbGF5ZXJzKQotICAgICMgICAtIHRoZSBjb250ZW50cyBvZiBvZXFhL3V0aWxzIGFuZCBvZXFhL3J1bnRpbWUvZmlsZXMKLSAgICAjICAgLSBvZXFhL29ldGVzdC5weSBhbmQgb2VxYS9ydW5leHBvcnQucHkgKHRoaXMgd2lsbCBnZXQgY29waWVkIHRvIGV4cG9ydHBhdGggbm90IGV4cG9ydHBhdGgvb2VxYSkKLSAgICAjICAgLSBfX2luaXRfXy5weSBmaWxlcwotICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZS9maWxlcyIpKQotICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvdXRpbHMiKSkKLSAgICAjIGNvcHkgdGVzdCBtb2R1bGVzLCB0aGlzIHNob3VsZCBjb3ZlciB0ZXN0cyBpbiBvdGhlciBsYXllcnMgdG9vCi0gICAgYmJwYXRoID0gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCc6JykKLSAgICBmb3IgdCBpbiB0Yy50ZXN0c2xpc3Q6Ci0gICAgICAgIGlzZm9sZGVyID0gRmFsc2UKLSAgICAgICAgaWYgcmUuc2VhcmNoKCJcdytcLlx3K1wudGVzdF9cUysiLCB0KToKLSAgICAgICAgICAgIHQgPSAnLicuam9pbih0LnNwbGl0KCcuJylbOjNdKQotICAgICAgICBtb2QgPSBwa2d1dGlsLmdldF9sb2FkZXIodCkKLSAgICAgICAgIyBNb3JlIGRlcHRoIHRoYW4gdXN1YWw/Ci0gICAgICAgIGlmICh0LmNvdW50KCcuJykgPiAyKToKLSAgICAgICAgICAgIGZvciBwIGluIGJicGF0aDoKLSAgICAgICAgICAgICAgICBmb2xkZXJuYW1lID0gb3MucGF0aC5qb2luKHAsICdsaWInLCAgb3Muc2VwLmpvaW4odC5zcGxpdCgnLicpKS5yc3BsaXQob3Muc2VwLCAxKVswXSkKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZvbGRlcm5hbWUpOgotICAgICAgICAgICAgICAgICAgICBpc2ZvbGRlciA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZvbGRlciA9IG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYSIsICJydW50aW1lIiwgb3MucGF0aC5iYXNlbmFtZShmb2xkZXJuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9mb2xkZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGZvbGRlcm5hbWUsIHRhcmdldF9mb2xkZXIpCi0gICAgICAgIGlmIG5vdCBpc2ZvbGRlcjoKLSAgICAgICAgICAgIHNodXRpbC5jb3B5Mihtb2QuZmlsZW5hbWUsIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lIikpCi0gICAgIyBjb3B5IF9faW5pdF9fLnB5IGZpbGVzCi0gICAgb2VxYWRpciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcigib2VxYSIpLmZpbGVuYW1lCi0gICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAiX19pbml0X18ucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhIikpCi0gICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVudGltZS9fX2luaXRfXy5weSIpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZSIpKQotICAgICMgY29weSBvZXFhL29ldGVzdC5weSBhbmQgb2VxYS9ydW5leHBvcnRlZC5weQotICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgIm9ldGVzdC5weSIpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEiKSkKLSAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJydW5leHBvcnRlZC5weSIpLCBleHBvcnRwYXRoKQotICAgICMgY29weSBvZXFhL3V0aWxzLyoucHkKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ob2VxYWRpciwgInV0aWxzIikpOgotICAgICAgICBmb3IgZiBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoIi5weSIpOgotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ocm9vdCwgZiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS91dGlscyIpKQotICAgICMgY29weSBvZXFhL3J1bnRpbWUvZmlsZXMvKgotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVudGltZS9maWxlcyIpKToKLSAgICAgICAgZm9yIGYgaW4gZmlsZXM6Ci0gICAgICAgICAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKHJvb3QsIGYpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZS9maWxlcyIpKQotCi0gICAgYmIucGxhaW4oIkV4cG9ydGVkIHRlc3RzIHRvOiAlcyIgJSBleHBvcnRwYXRoKQotCiBkZWYgdGVzdGltYWdlX21haW4oZCk6CiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgaW1wb3J0IG9zCkBAIC0yMTAsMTEgKzEzMSw4IEBACiAgICAgZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IGdldF9ob3N0X2R1bXBlcgogCiAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQotICAgIGV4cG9ydCA9IG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJURVNUX0VYUE9SVF9PTkxZIiwgIjEiLCBUcnVlLCBGYWxzZSwgZCkKICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpKQotICAgIGlmIGV4cG9ydDoKLSAgICAgICAgYmIudXRpbHMucmVtb3ZlKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSwgcmVjdXJzZT1UcnVlKQotICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpKQorICAgIHRlc3RfY3JlYXRlX2V4dHJhY3RfZGlycyhkKQogCiAgICAgIyB3ZSBuZWVkIHRoZSBob3N0IGR1bXBlciBpbiB0ZXN0IGNvbnRleHQKICAgICBob3N0X2R1bXBlciA9IGdldF9ob3N0X2R1bXBlcihkKQpAQCAtMjM0LDI5ICsxNTIsMzkgQEAKICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawogICAgICAgICBiYi5mYXRhbCgiTG9hZGluZyB0ZXN0cyBmYWlsZWQ6XG4lcyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogCi0gICAgaWYgZXhwb3J0OgorICAgIHRjLmV4dHJhY3RfcGFja2FnZXMoKQorICAgIHRhcmdldC5kZXBsb3koKQorICAgIHRyeToKKyAgICAgICAgYm9vdHBhcmFtcyA9IE5vbmUKKyAgICAgICAgaWYgZC5nZXRWYXIoJ1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXInLCAnJykgPT0gJ3N5c3RlbWQnOgorICAgICAgICAgICAgYm9vdHBhcmFtcyA9ICdzeXN0ZW1kLmxvZ19sZXZlbD1kZWJ1ZyBzeXN0ZW1kLmxvZ190YXJnZXQ9Y29uc29sZScKKyAgICAgICAgdGFyZ2V0LnN0YXJ0KGV4dHJhX2Jvb3RwYXJhbXM9Ym9vdHBhcmFtcykKKyAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgcmVzdWx0ID0gdGMucnVuVGVzdHMoKQorICAgICAgICBzdG9wdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICBiYi5wbGFpbigiJXMgLSBSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlIChwbiwgcmVzdWx0LnRlc3RzUnVuLCByZXN1bHQudGVzdHNSdW4gIT0gMSBhbmQgInMiIG9yICIiLCBzdG9wdGltZSAtIHN0YXJ0dGltZSkpCisgICAgICAgICAgICBtc2cgPSAiJXMgLSBPSyAtIEFsbCByZXF1aXJlZCB0ZXN0cyBwYXNzZWQiICUgcG4KKyAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCisgICAgICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgICAgIG1zZyArPSAiIChza2lwcGVkPSVkKSIgJSBza2lwcGVkCisgICAgICAgICAgICBiYi5wbGFpbihtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgLSBGQUlMRUQgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBzc2ggbG9nIiAlIHBuKQorICAgIGZpbmFsbHk6CiAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHRjLm9yaWdzaWd0ZXJtaGFuZGxlcikKLSAgICAgICAgdGMub3JpZ3NpZ3Rlcm1oYW5kbGVyID0gTm9uZQotICAgICAgICBleHBvcnRUZXN0cyhkLHRjKQotICAgIGVsc2U6Ci0gICAgICAgIHRhcmdldC5kZXBsb3koKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0YXJnZXQuc3RhcnQoKQotICAgICAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIHJlc3VsdCA9IHRjLnJ1blRlc3RzKCkKLSAgICAgICAgICAgIHN0b3B0aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICAgICAgYmIucGxhaW4oIiVzIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAocG4sIHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwgc3RvcHRpbWUgLSBzdGFydHRpbWUpKQotICAgICAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBwbgotICAgICAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCi0gICAgICAgICAgICAgICAgaWYgc2tpcHBlZDoKLSAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKLSAgICAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgc3NoIGxvZyIgJSBwbiApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCB0Yy5vcmlnc2lndGVybWhhbmRsZXIpCi0gICAgICAgICAgICB0YXJnZXQuc3RvcCgpCisgICAgICAgIHRhcmdldC5zdG9wKCkKKworZGVmIHRlc3RfY3JlYXRlX2V4dHJhY3RfZGlycyhkKToKKyAgICBpbnN0YWxsX3BhdGggPSBkLmdldFZhcigiVEVTVF9JTlNUQUxMX1RNUF9ESVIiLCBUcnVlKQorICAgIHBhY2thZ2VfcGF0aCA9IGQuZ2V0VmFyKCJURVNUX1BBQ0tBR0VEX0RJUiIsIFRydWUpCisgICAgZXh0cmFjdGVkX3BhdGggPSBkLmdldFZhcigiVEVTVF9FWFRSQUNURURfRElSIiwgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpKQorICAgIGJiLnV0aWxzLnJlbW92ZShwYWNrYWdlX3BhdGgsIHJlY3Vyc2U9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoaW5zdGFsbF9wYXRoKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihwYWNrYWdlX3BhdGgpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGV4dHJhY3RlZF9wYXRoKQorCiAKIHRlc3RpbWFnZV9tYWluW3ZhcmRlcHNleGNsdWRlXSA9KyAiQkJfT1JJR0VOViIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0c2RrLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RzZGsuYmJjbGFzcwppbmRleCBmNGRjMmMzLi43N2M5MjAzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RzZGsuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RzZGsuYmJjbGFzcwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgICAgIG1zZyArPSAiIChza2lwcGVkPSVkKSIgJSBza2lwcGVkCiAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtIEZBSUxFRCAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIGNvbW1hbmRzIGxvZyIgJSBwbiApCisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgLSBGQUlMRUQgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBjb21tYW5kcyBsb2ciICUgcG4pCiAKIGRlZiB0ZXN0c2RrX21haW4oZCk6CiAgICAgaW1wb3J0IG9zCkBAIC02NSw3ICs2NSw3IEBACiAgICAgdHJ5OgogICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiY2QgJXM7ICVzIDw8RU9GXG4uL3RjXG5ZXG5FT0YiICUgKHNka3Rlc3RkaXIsIHRjbmFtZSksIHNoZWxsPVRydWUpCiAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgICAgIGJiLmZhdGFsKCJDb3VsZG4ndCBpbnN0YWxsIHRoZSBTREs6XG4lcyIgJSBlLm91dHB1dCkKKyAgICAgICAgYmIuZmF0YWwoIkNvdWxkbid0IGluc3RhbGwgdGhlIFNESzpcbiVzIiAlIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkKIAogICAgIHRyeToKICAgICAgICAgcnVuX3Rlc3RfY29udGV4dChTREtUZXN0Q29udGV4dCwgZCwgc2RrdGVzdGRpciwgdGNuYW1lLCBwbikKQEAgLTExMywxMCArMTEzLDE4IEBACiAgICAgdGVzdGRpciA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3Rlc3RzZGtleHQvIikKICAgICBiYi51dGlscy5yZW1vdmUodGVzdGRpciwgVHJ1ZSkKICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdGRpcikKKyAgICBzZGtkaXIgPSBvcy5wYXRoLmpvaW4odGVzdGRpciwgJ3RjJykKICAgICB0cnk6Ci0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCIlcyAteSAtZCAlcy90YyIgJSAodGNuYW1lLCB0ZXN0ZGlyKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoIiVzIC15IC1kICVzIiAlICh0Y25hbWUsIHNka2RpciksIHNoZWxsPVRydWUpCiAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgICAgIGJiLmZhdGFsKCJDb3VsZG4ndCBpbnN0YWxsIHRoZSBTREsgRVhUOlxuJXMiICUgZS5vdXRwdXQpCisgICAgICAgIG1zZyA9ICJDb3VsZG4ndCBpbnN0YWxsIHRoZSBleHRlbnNpYmxlIFNESzpcbiVzIiAlIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKQorICAgICAgICBsb2dmbiA9IG9zLnBhdGguam9pbihzZGtkaXIsICdwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZycpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvZ2ZuKToKKyAgICAgICAgICAgIG1zZyArPSAnXG5cbkNvbnRlbnRzIG9mIHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nOlxuJworICAgICAgICAgICAgd2l0aCBvcGVuKGxvZ2ZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9IGxpbmUKKyAgICAgICAgYmIuZmF0YWwobXNnKQogCiAgICAgdHJ5OgogICAgICAgICBiYi5wbGFpbigiUnVubmluZyBTREsgQ29tcGF0aWJpbGl0eSB0ZXN0cyAuLi4iKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGluZGVyY2xpZW50LmJiY2xhc3MKaW5kZXggMmJjNzVmYy4uOTE3Yjc0ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RpbmRlcmNsaWVudC5iYmNsYXNzCkBAIC0xMCwxMCArMTAsMTAgQEAKICAgICAgICAgICAgIGguZW5kaGVhZGVycygpCiAgICAgICAgICAgICBoLnNlbmQoYm9keSkKICAgICAgICAgICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyA9IGguZ2V0cmVwbHkoKQotICAgICAgICAgICAgI3ByaW50IGVycmNvZGUsIGVycm1zZywgaGVhZGVycworICAgICAgICAgICAgI3ByaW50KGVycmNvZGUsIGVycm1zZywgaGVhZGVycykKICAgICAgICAgICAgIHJldHVybiAoZXJyY29kZSxlcnJtc2csIGhlYWRlcnMsIGguZmlsZSkKICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcHJpbnQgIkVycm9yIHNlbmRpbmcgdGhlIHJlcG9ydCEiCisgICAgICAgICAgICBwcmludCgiRXJyb3Igc2VuZGluZyB0aGUgcmVwb3J0ISIpCiAgICAgICAgICAgICAjIHRyeSBhZ2FpbgogICAgICAgICAgICAgcGFzcwogCkBAIC04Miw3ICs4Miw3IEBACiAgICAgIyB3ZSBvbmx5IG5lZWQgb24gYnVpbGRfc3RhdHVzLnBsIGJ1dCBzZW5kaW5nIGl0CiAgICAgIyBhbHdheXMgZG9lcyBub3QgaHVydAogICAgIHRyeToKLSAgICAgICAgZiA9IGZpbGUoZC5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItbWFjaGluZS5pZCcsICdyJykKKyAgICAgICAgZiA9IG9wZW4oZC5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItbWFjaGluZS5pZCcsICdyJykKICAgICAgICAgaWQgPSBmLnJlYWQoKQogICAgICAgICB2YXJpYWJsZXNbJ21hY2hpbmVfaWQnXSA9IGlkCiAgICAgZXhjZXB0OgpAQCAtMTExLDExICsxMTEsMTEgQEAKIAogICAgIHNlbGVjdG9yID0gdXJsICsgIi94bWwvYnVpbGRfc3RhcnQucGwiCiAKLSAgICAjcHJpbnQgInNlbGVjdG9yICVzIGFuZCB1cmwgJXMiICUgKHNlbGVjdG9yLCB1cmwpCisgICAgI3ByaW50KCJzZWxlY3RvciAlcyBhbmQgdXJsICVzIiAlIChzZWxlY3RvciwgdXJsKSkKIAogICAgICMgbm93IHBvc3QgaXQKICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIGhfZmlsZSA9IHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLHNlbGVjdG9yLGNvbnRlbnRfdHlwZSwgYm9keSkKLSAgICAjcHJpbnQgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzCisgICAgI3ByaW50KGVycmNvZGUsIGVycm1zZywgaGVhZGVycykKICAgICByZXBvcnQgPSBoX2ZpbGUucmVhZCgpCiAKICAgICAjIG5vdyBsZXQgdXMgZmluZCB0aGUgbWFjaGluZSBpZCB0aGF0IHdhcyBhc3NpZ25lZCB0byB1cwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKICAgICAjIG5vdyB3ZSB3aWxsIG5lZWQgdG8gc2F2ZSB0aGUgbWFjaGluZSBudW1iZXIKICAgICAjIHdlIHdpbGwgb3ZlcnJpZGUgYW55IHByZXZpb3VzIG51bWJlcnMKLSAgICBmID0gZmlsZShkLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItbWFjaGluZS5pZCIsICd3JykKKyAgICBmID0gb3BlbihkLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItbWFjaGluZS5pZCIsICd3JykKICAgICBmLndyaXRlKHJlcG9ydCkKIAogCkBAIC0xNDcsOCArMTQ3LDggQEAKICAgICB3aGlsZSBsZW4obmV3X2xvZykgPiAwOgogICAgICAgICBjb250ZW50X3R5cGUsIGJvZHkgPSB0aW5kZXJfZm9ybWF0X2h0dHBfcG9zdChkLHN0YXR1cyxuZXdfbG9nWzA6MTgwMDBdKQogICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIGhfZmlsZSA9IHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLHNlbGVjdG9yLGNvbnRlbnRfdHlwZSwgYm9keSkKLSAgICAgICAgI3ByaW50IGVycmNvZGUsIGVycm1zZywgaGVhZGVycwotICAgICAgICAjcHJpbnQgaC5maWxlLnJlYWQoKQorICAgICAgICAjcHJpbnQoZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzKQorICAgICAgICAjcHJpbnQoaC5maWxlLnJlYWQoKSkKICAgICAgICAgbmV3X2xvZyA9IG5ld19sb2dbMTgwMDA6XQogCiAKQEAgLTI3OCw3ICsyNzgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdHJ1bmNhdGUgdGhlIHRpbmRlciBsb2cgZmlsZQotICAgICAgICAgICAgZiA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9MT0cnLCBUcnVlKSwgJ3cnKQorICAgICAgICAgICAgZiA9IG9wZW4oZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9MT0cnLCBUcnVlKSwgJ3cnKQogICAgICAgICAgICAgZi53cml0ZSgiIikKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBleGNlcHQ6CkBAIC0yODcsNyArMjg3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB3cml0ZSBhIHN0YXR1cyB0byB0aGUgZmlsZS4gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSAtayBvcHRpb24KICAgICAgICAgICAgICMgb2YgQml0QmFrZQotICAgICAgICAgICAgZyA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgICAgIGcgPSBvcGVuKGV2ZW50LmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1zdGF0dXMiLCAndycpCiAgICAgICAgICAgICBnLndyaXRlKCIiKQogICAgICAgICAgICAgZy5jbG9zZSgpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgpAQCAtMzE5LDE0ICszMTksMTQgQEAKICAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBQYWNrYWdlICVzIGZhaWxlZCAoRkFJTFVSRSlcbiIgJSBldmVudC5kYXRhLmdldFZhcignUEYnLCBUcnVlKQogICAgICAgICBzdGF0dXMgPSAyMDAKICAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKLSAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaCA9IG9wZW4oZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKICAgICAgICAgaC53cml0ZSgiMjAwIikKICAgICBlbGlmIG5hbWUgPT0gIkJ1aWxkQ29tcGxldGVkIjoKICAgICAgICAgbG9nICs9ICJCdWlsZCBDb21wbGV0ZWRcbiIKICAgICAgICAgc3RhdHVzID0gMTAwCiAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSBhIG9sZCBzdGF0dXMuLi4KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItc3RhdHVzJywgJ3InKQorICAgICAgICAgICAgaCA9IG9wZW4oZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItc3RhdHVzJywgJ3InKQogICAgICAgICAgICAgc3RhdHVzID0gaW50KGgucmVhZCgpKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICAgICAgbG9nICs9ICJFcnJvcjpXYXMgUnVudGltZTogJWRcbiIgJSBldmVudC5pc1J1bnRpbWUoKQogICAgICAgICBzdGF0dXMgPSAyMDAKICAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKLSAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaCA9IG9wZW4oZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKICAgICAgICAgaC53cml0ZSgiMjAwIikKIAogICAgICMgbm93IHBvc3QgdGhlIGxvZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RvYXN0ZXIuYmJjbGFzcwppbmRleCAxYTcwZjE0Li40YmRkZjM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RvYXN0ZXIuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RvYXN0ZXIuYmJjbGFzcwpAQCAtMzMsNiArMzMsNyBAQAogCiAgICAgZGVmIF9nZXRfZ2l0X2JyYW5jaChsYXllcl9wYXRoKToKICAgICAgICAgYnJhbmNoID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsICIsIGN3ZD1sYXllcl9wYXRoLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIGJyYW5jaCA9IGJyYW5jaC5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgYnJhbmNoID0gYnJhbmNoLnJlcGxhY2UoJ3JlZnMvaGVhZHMvJywgJycpLnJzdHJpcCgpCiAgICAgICAgIHJldHVybiBicmFuY2gKIApAQCAtMTM1LDYwICsxMzYsMTYgQEAKIAogIyAyLiBEdW1wIG91dHB1dCBpbWFnZSBmaWxlcyBpbmZvcm1hdGlvbgogCi1weXRob24gdG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSgpIHsKLSAgICAiIiIKLSAgICBJbWFnZSBmaWxlbmFtZSBmb3Igb3V0cHV0IGltYWdlcyBpcyBub3Qgc3RhbmRhcmRpemVkLgotICAgIGltYWdlX3R5cGVzLmJiY2xhc3Mgd2lsbCBzcGVsbCBvdXQgSU1BR0VfQ01EX3h4eCB2YXJpYWJsZXMgdGhhdCBhY3R1YWxseQotICAgIGhhdmUgaGFyZGNvZGVkIHdheXMgdG8gY3JlYXRlIGltYWdlIGZpbGUgbmFtZXMgaW4gdGhlbS4KLSAgICBTbyB3ZSBsb29rIGZvciBmaWxlcyBzdGFydGluZyB3aXRoIHRoZSBzZXQgbmFtZS4KLQotICAgIFdlIGFsc28gbG9vayBmb3Igb3RoZXIgZmlsZXMgaW4gdGhlIGltYWdlcy8gZGlyZWN0b3J5IHdoaWNoIGRvbid0Ci0gICAgbWF0Y2ggSU1BR0VfTkFNRSwgc3VjaCBhcyB0aGUga2VybmVsIGJ6SW1hZ2UsIG1vZHVsZXMgdGFyYmFsbCBldGMuCi0gICAgIiIiCi0KLSAgICBkaXJfdG9fd2FsayA9IGQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSk7Ci0gICAgaW1hZ2VfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSk7Ci0gICAgaW1hZ2VfaW5mb19kYXRhID0ge30KLSAgICBhcnRpZmFjdF9pbmZvX2RhdGEgPSB7fQotCi0gICAgIyBjb2xsZWN0IGFsbCBpbWFnZXMgYW5kIGFydGlmYWN0cyBpbiB0aGUgaW1hZ2VzIGRpcmVjdG9yeQotICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZGlyX3RvX3dhbGspOgotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZpbGVuYW1lKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoaW1hZ2VfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgICMgaW1hZ2UKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VfaW5mb19kYXRhW2Z1bGxfcGF0aF0gPSBvcy5zdGF0KGZ1bGxfcGF0aCkuc3Rfc2l6ZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgb3RoZXIgbm9uLWltYWdlIGFydGlmYWN0Ci0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RfaW5mb19kYXRhW2Z1bGxfcGF0aF0gPSBvcy5zdGF0KGZ1bGxfcGF0aCkuc3Rfc2l6ZQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIk9TRXJyb3JFeGNlcHRpb24iLCBlKSwgZCkKLQotICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiSW1hZ2VGaWxlU2l6ZSIsIGltYWdlX2luZm9fZGF0YSksIGQpCi0gICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJBcnRpZmFjdEZpbGVTaXplIiwgYXJ0aWZhY3RfaW5mb19kYXRhKSwgZCkKLX0KLQogcHl0aG9uIHRvYXN0ZXJfYXJ0aWZhY3RfZHVtcGRhdGEoKSB7CiAgICAgIiIiCi0gICAgRHVtcCBkYXRhIGFib3V0IGFydGlmYWN0cyBpbiB0aGUgU0RLX0RFUExPWSBkaXJlY3RvcnkKKyAgICBEdW1wIGRhdGEgYWJvdXQgU0RLIHZhcmlhYmxlcwogICAgICIiIgogCi0gICAgZGlyX3RvX3dhbGsgPSBkLmdldFZhcigiU0RLX0RFUExPWSIsIFRydWUpCi0gICAgYXJ0aWZhY3RfaW5mb19kYXRhID0ge30KKyAgICBldmVudF9kYXRhID0geworICAgICAgIlRPT0xDSEFJTl9PVVRQVVROQU1FIjogZC5nZXRWYXIoIlRPT0xDSEFJTl9PVVRQVVROQU1FIiwgVHJ1ZSkKKyAgICB9CiAKLSAgICAjIGNvbGxlY3QgYWxsIGFydGlmYWN0cyBpbiB0aGUgc2RrIGRpcmVjdG9yeQotICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZGlyX3RvX3dhbGspOgotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZpbGVuYW1lKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdF9pbmZvX2RhdGFbZnVsbF9wYXRoXSA9IG9zLnN0YXQoZnVsbF9wYXRoKS5zdF9zaXplCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiT1NFcnJvckV4Y2VwdGlvbiIsIGUpLCBkKQotCi0gICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJBcnRpZmFjdEZpbGVTaXplIiwgYXJ0aWZhY3RfaW5mb19kYXRhKSwgZCkKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIlNES0FydGlmYWN0SW5mbyIsIGV2ZW50X2RhdGEpLCBkKQogfQogCiAjIGNvbGxlY3QgbGlzdCBvZiBidWlsZHN0YXRzIGZpbGVzIGJhc2VkIG9uIGZpcmVkIGV2ZW50czsgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCBjb2xsZWN0IGFsbCBzdGF0cyBhbmQgZmlyZSBhbiBldmVudCB3aXRoIGNvbGxlY3RlZCBkYXRhCkBAIC0zMzEsMTUgKzI4OCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW2RlcGVuZHNuYW1lXSA9IHsnc2l6ZSc6IDAsICdkZXBlbmRzJyA6IFtdfQogICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF1bcG5hbWVdWydkZXBlbmRzJ10uYXBwZW5kKChkZXBlbmRzbmFtZSwgZGVwdHlwZSkpCiAKLSAgICAgICAgICAgIHdpdGggb3BlbigiJXMvZmlsZXMtaW4taW1hZ2UudHh0IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgotICAgICAgICAgICAgICAgICAgICBsYyA9IFsgeCBmb3IgeCBpbiBsaW5lLnN0cmlwKCkuc3BsaXQoIiAiKSBpZiBsZW4oeCkgPiAwIF0KLSAgICAgICAgICAgICAgICAgICAgaWYgbGNbMF0uc3RhcnRzd2l0aCgibCIpOgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnc3ltcyddLmFwcGVuZChsYykKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBsY1swXS5zdGFydHN3aXRoKCJkIik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydkaXJzJ10uYXBwZW5kKGxjKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZmlsZXMnXS5hcHBlbmQobGMpCisgICAgICAgICAgICAjIGZpbGVzLWluLWltYWdlLnR4dCBpcyBvbmx5IGdlbmVyYXRlZCBpZiBhbiBpbWFnZSBmaWxlIGlzIGNyZWF0ZWQsCisgICAgICAgICAgICAjIHNvIHRoZSBmaWxlIGVudHJpZXMgKCdzeW1zJywgJ2RpcnMnLCAnZmlsZXMnKSBmb3IgYSB0YXJnZXQgd2lsbCBiZQorICAgICAgICAgICAgIyBlbXB0eSBmb3Igcm9vdGZzIGJ1aWxkcyBhbmQgb3RoZXIgImltYWdlIiB0YXNrcyB3aGljaCBkb24ndAorICAgICAgICAgICAgIyBwcm9kdWNlIGltYWdlIGZpbGVzCisgICAgICAgICAgICAjIChlLmcuICJiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbCAtYyBwb3B1bGF0ZV9zZGsiKQorICAgICAgICAgICAgZmlsZXNfaW5faW1hZ2VfcGF0aCA9ICIlcy9maWxlcy1pbi1pbWFnZS50eHQiICUgaW5zdGFsbGVkX2ltZ19wYXRoCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlc19pbl9pbWFnZV9wYXRoKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXNfaW5faW1hZ2VfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxjID0gWyB4IGZvciB4IGluIGxpbmUuc3RyaXAoKS5zcGxpdCgiICIpIGlmIGxlbih4KSA+IDAgXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGNbMF0uc3RhcnRzd2l0aCgibCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ3N5bXMnXS5hcHBlbmQobGMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGxjWzBdLnN0YXJ0c3dpdGgoImQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydkaXJzJ10uYXBwZW5kKGxjKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydmaWxlcyddLmFwcGVuZChsYykKIAogICAgICAgICAgICAgZm9yIHBuYW1lIGluIGltYWdlc1t0YXJnZXRdOgogICAgICAgICAgICAgICAgIGlmIG5vdCBwbmFtZSBpbiBhbGxwa2dzOgpAQCAtMzYwLDE1ICszMjQsMTggQEAKIAogfQogCi0jIGR1bXAgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBsaWNlbnNlIG1hbmlmZXN0IHBhdGgKLQotcHl0aG9uIHRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAoKSB7Ci0gICAgZGVwbG95X2RpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSk7Ci0gICAgaW1hZ2VfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSk7Ci0KLSAgICBkYXRhID0geyAnZGVwbG95X2RpcicgOiBkZXBsb3lfZGlyLCAnaW1hZ2VfbmFtZScgOiBpbWFnZV9uYW1lIH0KLQotICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTGljZW5zZU1hbmlmZXN0UGF0aCIsIGRhdGEpLCBkKQorIyBnZXQgbGlzdCBvZiBhcnRpZmFjdHMgZnJvbSBzc3RhdGUgbWFuaWZlc3QKK3B5dGhvbiB0b2FzdGVyX2FydGlmYWN0cygpIHsKKyAgICBpZiBlLnRhc2tuYW1lIGluIFsiZG9fZGVwbG95IiwgImRvX2ltYWdlX2NvbXBsZXRlIiwgImRvX3BvcHVsYXRlX3NkayIsICJkb19wb3B1bGF0ZV9zZGtfZXh0Il06CisgICAgICAgIGQyID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgZDIuc2V0VmFyKCdGSUxFJywgZS50YXNrZmlsZSkKKyAgICAgICAgZDIuc2V0VmFyKCdTU1RBVEVfTUFOTUFDSCcsIGQyLmV4cGFuZCgiJHtNQUNISU5FfSIpKQorICAgICAgICBtYW5pZmVzdCA9IG9lLnNzdGF0ZXNpZy5zc3RhdGVfZ2V0X21hbmlmZXN0X2ZpbGVuYW1lKGUudGFza25hbWVbMzpdLCBkMilbMF0KKyAgICAgICAgaWYgb3MuYWNjZXNzKG1hbmlmZXN0LCBvcy5SX09LKToKKyAgICAgICAgICAgIHdpdGggb3BlbihtYW5pZmVzdCkgYXMgZm1hbmlmZXN0OgorICAgICAgICAgICAgICAgIGFydGlmYWN0cyA9IFtmbmFtZS5zdHJpcCgpIGZvciBmbmFtZSBpbiBmbWFuaWZlc3RdCisgICAgICAgICAgICAgICAgZGF0YSA9IHsidGFzayI6IGUudGFza2lkLCAiYXJ0aWZhY3RzIjogYXJ0aWZhY3RzfQorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiVGFza0FydGlmYWN0cyIsIGRhdGEpLCBkMikKIH0KIAogIyBzZXQgZXZlbnQgaGFuZGxlcnMKQEAgLTM4MSwxNyArMzQ4LDE3IEBACiBhZGRoYW5kbGVyIHRvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXAKIHRvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXBbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKIAorYWRkaGFuZGxlciB0b2FzdGVyX2FydGlmYWN0cwordG9hc3Rlcl9hcnRpZmFjdHNbZXZlbnRtYXNrXSA9ICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTa2lwcGVkIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0NvbXBsZXRlZCIKKwogZG9fcGFja2FnZWRhdGFfc2V0c2NlbmVbcG9zdGZ1bmNzXSArPSAidG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhICIKIGRvX3BhY2thZ2VkYXRhX3NldHNjZW5lW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhICIKIAogZG9fcGFja2FnZVtwb3N0ZnVuY3NdICs9ICJ0b2FzdGVyX3BhY2thZ2VfZHVtcGRhdGEgIgogZG9fcGFja2FnZVt2YXJkZXBzZXhjbHVkZV0gKz0gInRvYXN0ZXJfcGFja2FnZV9kdW1wZGF0YSAiCiAKLWRvX2ltYWdlX2NvbXBsZXRlW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEgIgotZG9faW1hZ2VfY29tcGxldGVbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ0b2FzdGVyX2ltYWdlX2R1bXBkYXRhICIKLQotZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAgIgotZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9saWNlbnNlbWFuaWZlc3RfZHVtcCAiCi0KIGRvX3BvcHVsYXRlX3Nka1twb3N0ZnVuY3NdICs9ICJ0b2FzdGVyX2FydGlmYWN0X2R1bXBkYXRhICIKIGRvX3BvcHVsYXRlX3Nka1t2YXJkZXBzZXhjbHVkZV0gKz0gInRvYXN0ZXJfYXJ0aWZhY3RfZHVtcGRhdGEgIgorCitkb19wb3B1bGF0ZV9zZGtfZXh0W3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfYXJ0aWZhY3RfZHVtcGRhdGEgIgorZG9fcG9wdWxhdGVfc2RrX2V4dFt2YXJkZXBzZXhjbHVkZV0gKz0gInRvYXN0ZXJfYXJ0aWZhY3RfZHVtcGRhdGEgIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMtYmFzZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4OWI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTEgQEAKKyNUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIHZlcnNpb24gaW5mb3JtYXRpb24gZmlsZQordG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvbiAoKSB7CisJbG9jYWwgdmVyc2lvbmZpbGU9JDEKKwlybSAtZiAkdmVyc2lvbmZpbGUKKwl0b3VjaCAkdmVyc2lvbmZpbGUKKwllY2hvICdEaXN0cm86ICR7RElTVFJPfScgPj4gJHZlcnNpb25maWxlCisJZWNobyAnRGlzdHJvIFZlcnNpb246ICR7RElTVFJPX1ZFUlNJT059JyA+PiAkdmVyc2lvbmZpbGUKKwllY2hvICdNZXRhZGF0YSBSZXZpc2lvbjogJHtNRVRBREFUQV9SRVZJU0lPTn0nID4+ICR2ZXJzaW9uZmlsZQorCWVjaG8gJ1RpbWVzdGFtcDogJHtEQVRFVElNRX0nID4+ICR2ZXJzaW9uZmlsZQorfQordG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvblt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MKaW5kZXggMmUyYzkzYS4uMGUxMWYyZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcwpAQCAtMSw0ICsxLDQgQEAKLWluaGVyaXQgc2l0ZWluZm8ga2VybmVsLWFyY2gKK2luaGVyaXQgdG9vbGNoYWluLXNjcmlwdHMtYmFzZSBzaXRlaW5mbyBrZXJuZWwtYXJjaAogCiAjIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIE1VTFRJTUFDSF9UQVJHRVRfU1lTLCBiZWNhdXNlIGl0CiAjIGRvZXNuJ3QgYWx3YXlzIG1hdGNoIG91ciBleHBlY3RhdGlvbnMuLi4gYnV0IHdlIGRlZmF1bHQgdG8gdGhlIHN0b2NrIHZhbHVlCkBAIC02LDkgKzYsMTMgQEAKIFRBUkdFVF9DQ19BUkNIX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLW11Y2xpYmMiCiBUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfbGliYy1tdXNsID0gIiAtbW11c2wiCiAKKyMgZGVmYXVsdCBkZWJ1ZyBwcmVmaXggbWFwIGlzbid0IHZhbGlkIGluIHRoZSBTREsKK0RFQlVHX1BSRUZJWF9NQVAgPSAiIgorCiAjIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQgZm9yIHVzZSBpbiBhIGRlcGxveWFibGUgU0RLCiB0b29sY2hhaW5fY3JlYXRlX3Nka19lbnZfc2NyaXB0ICgpIHsKLQkjIENyZWF0ZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKwkjIENyZWF0ZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuICBSZW1lbWJlciB0aGF0ICRTREtUQVJHRVRTWVNST09UIHNob3VsZAorCSMgb25seSBiZSBleHBhbmRlZCBvbiB0aGUgdGFyZ2V0IGF0IHJ1bnRpbWUuCiAJYmFzZV9zYmluZGlyPSR7MTA6LSR7YmFzZV9zYmluZGlyX25hdGl2ZXNka319CiAJYmFzZV9iaW5kaXI9JHs5Oi0ke2Jhc2VfYmluZGlyX25hdGl2ZXNka319CiAJc2JpbmRpcj0kezg6LSR7c2JpbmRpcl9uYXRpdmVzZGt9fQpAQCAtMjksNyArMzMsNyBAQAogCWVjaG8gImV4cG9ydCBQQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRzYmluZGlyOiRzZGtwYXRobmF0aXZlJGJhc2VfYmluZGlyOiRzZGtwYXRobmF0aXZlJGJhc2Vfc2JpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRQQVRIJyA+PiAkc2NyaXB0CiAJZWNobyAiZXhwb3J0IENDQUNIRV9QQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRDQ0FDSEVfUEFUSCcgPj4gJHNjcmlwdAogCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSRTREtUQVJHRVRTWVNST09UJyA+PiAkc2NyaXB0Ci0JZWNobyAnZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kU0RLVEFSR0VUU1lTUk9PVCciJGxpYmRpciInL3BrZ2NvbmZpZycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1BBVEg9JFNES1RBUkdFVFNZU1JPT1QnIiRsaWJkaXIiJy9wa2djb25maWc6JFNES1RBUkdFVFNZU1JPT1QnIiRwcmVmaXgiJy9zaGFyZS9wa2djb25maWcnID4+ICRzY3JpcHQKIAllY2hvICdleHBvcnQgQ09ORklHX1NJVEU9JHtTREtQQVRIfS9zaXRlLWNvbmZpZy0nIiR7bXVsdGltYWNoX3RhcmdldF9zeXN9IiA+PiAkc2NyaXB0CiAJZWNobyAiZXhwb3J0IE9FQ09SRV9OQVRJVkVfU1lTUk9PVD1cIiRzZGtwYXRobmF0aXZlXCIiID4+ICRzY3JpcHQKIAllY2hvICdleHBvcnQgT0VDT1JFX1RBUkdFVF9TWVNST09UPSIkU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKQEAgLTg5LDE5ICs5MywxOSBAQAogIyBBcHBlbmQgZW52aXJvbm1lbnQgc3Vic2NyaXB0cwogaWYgWyAtZCAiXCRPRUNPUkVfVEFSR0VUX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZCIgXTsgdGhlbgogICAgIGZvciBlbnZmaWxlIGluIFwkT0VDT1JFX1RBUkdFVF9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQvKi5zaDsgZG8KLQkgICAgc291cmNlIFwkZW52ZmlsZQorCSAgICAuIFwkZW52ZmlsZQogICAgIGRvbmUKIGZpCiBpZiBbIC1kICJcJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kIiBdOyB0aGVuCiAgICAgZm9yIGVudmZpbGUgaW4gXCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZC8qLnNoOyBkbwotCSAgICBzb3VyY2UgXCRlbnZmaWxlCisJICAgIC4gXCRlbnZmaWxlCiAgICAgZG9uZQogZmkKIEVPRgogfQogCiAjd2UgZ2V0IHRoZSBjYWNoZWQgc2l0ZSBjb25maWcgaW4gdGhlIHJ1bnRpbWUKLVRPT0xDSEFJTl9DT05GSUdTSVRFX05PQ0FDSEUgPSAiJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIFRydWUpfSIKK1RPT0xDSEFJTl9DT05GSUdTSVRFX05PQ0FDSEUgPSAiJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQpfSIKIFRPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRSA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0vJHt0YXJnZXRfZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kIgogVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRSA/Pz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjIG5jdXJzZXMiCiAKQEAgLTEzMiwxOCArMTM2LDYgQEAKICMgVGhlIGltbWVkaWF0ZSBleHBhbnNpb24gYWJvdmUgY2FuIHJlc3VsdCBpbiB1bndhbnRlZCBwYXRoIGRlcGVuZGVuY2llcyBoZXJlCiB0b29sY2hhaW5fY3JlYXRlX3Nka19zaXRlY29uZmlnW3ZhcmRlcHNleGNsdWRlXSA9ICJUT09MQ0hBSU5fQ09ORklHU0lURV9TWVNST09UQ0FDSEUiCiAKLSNUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIHZlcnNpb24gaW5mb3JtYXRpb24gZmlsZQotdG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvbiAoKSB7Ci0JbG9jYWwgdmVyc2lvbmZpbGU9JDEKLQlybSAtZiAkdmVyc2lvbmZpbGUKLQl0b3VjaCAkdmVyc2lvbmZpbGUKLQllY2hvICdEaXN0cm86ICR7RElTVFJPfScgPj4gJHZlcnNpb25maWxlCi0JZWNobyAnRGlzdHJvIFZlcnNpb246ICR7RElTVFJPX1ZFUlNJT059JyA+PiAkdmVyc2lvbmZpbGUKLQllY2hvICdNZXRhZGF0YSBSZXZpc2lvbjogJHtNRVRBREFUQV9SRVZJU0lPTn0nID4+ICR2ZXJzaW9uZmlsZQotCWVjaG8gJ1RpbWVzdGFtcDogJHtEQVRFVElNRX0nID4+ICR2ZXJzaW9uZmlsZQotfQotdG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvblt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCi0KIHB5dGhvbiBfX2Fub255bW91cyAoKSB7CiAgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCiAgICAgZGVwcyA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1jb25maWcuYmJjbGFzcwppbmRleCBjYjA2MWFmLi4zZjc2MGYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKQEAgLTMsNyArMyw3IEBACiAjIFRoZSBmb3JtYXQgdG8gc3BlY2lmeSBpdCwgaW4gdGhlIG1hY2hpbmUsIGlzOgogIwogIyBVQk9PVF9DT05GSUcgPz89IDxkZWZhdWx0PgotIyBVQk9PVF9DT05GSUdbZm9vXSA9ICJjb25maWcsaW1hZ2VzIgorIyBVQk9PVF9DT05GSUdbZm9vXSA9ICJjb25maWcsaW1hZ2VzLGJpbmFyeSIKICMKICMgb3IKICMKQEAgLTExLDkgKzExLDEzIEBACiAjCiAjIENvcHlyaWdodCAyMDEzLCAyMDE0IChDKSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KIAorVUJPT1RfQklOQVJZID89ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9IgorCiBweXRob24gKCkgewogICAgIHVib290bWFjaGluZSA9IGQuZ2V0VmFyKCJVQk9PVF9NQUNISU5FIiwgVHJ1ZSkKICAgICB1Ym9vdGNvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygnVUJPT1RfQ09ORklHJykKKyAgICB1Ym9vdGJpbmFyeSA9IGQuZ2V0VmFyKCdVQk9PVF9CSU5BUlknLCBUcnVlKQorICAgIHVib290YmluYXJpZXMgPSBkLmdldFZhcignVUJPT1RfQklOQVJJRVMnLCBUcnVlKQogICAgICMgVGhlICJkb2MiIHZhcmZsYWcgaXMgc3BlY2lhbCwgd2UgZG9uJ3Qgd2FudCB0byBzZWUgaXQgaGVyZQogICAgIHVib290Y29uZmlnZmxhZ3MucG9wKCdkb2MnLCBOb25lKQogCkBAIC0yNyw2ICszMSw5IEBACiAgICAgaWYgdWJvb3RtYWNoaW5lIGFuZCB1Ym9vdGNvbmZpZ2ZsYWdzOgogICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiWW91IGNhbm5vdCB1c2UgVUJPT1RfTUFDSElORSBhbmQgVUJPT1RfQ09ORklHIGF0IHRoZSBzYW1lIHRpbWUuIikKIAorICAgIGlmIHVib290Y29uZmlnZmxhZ3MgYW5kIHVib290YmluYXJpZXM6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJZb3UgY2Fubm90IHVzZSBVQk9PVF9CSU5BUklFUyBhcyBpdCBpcyBpbnRlcm5hbCB0byB1Ym9vdF9jb25maWcuYmJjbGFzcy4iKQorCiAgICAgaWYgbm90IHVib290Y29uZmlnZmxhZ3M6CiAgICAgICAgIHJldHVybgogCkBAIC0zNiwxMyArNDMsMTkgQEAKICAgICAgICAgICAgIGZvciBmLCB2IGluIHVib290Y29uZmlnZmxhZ3MuaXRlbXMoKToKICAgICAgICAgICAgICAgICBpZiBjb25maWcgPT0gZjogCiAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gdi5zcGxpdCgnLCcpCi0gICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1zWzBdIGFuZCBsZW4oaXRlbXMpID4gMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCdPbmx5IGNvbmZpZyxpbWFnZXMgY2FuIGJlIHNwZWNpZmllZCEnKQorICAgICAgICAgICAgICAgICAgICBpZiBpdGVtc1swXSBhbmQgbGVuKGl0ZW1zKSA+IDM6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgnT25seSBjb25maWcsaW1hZ2VzLGJpbmFyeSBjYW4gYmUgc3BlY2lmaWVkIScpCiAgICAgICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdVQk9PVF9NQUNISU5FJywgJyAnICsgaXRlbXNbMF0pCiAgICAgICAgICAgICAgICAgICAgICMgSU1BR0VfRlNUWVBFUyBhcHBlbmRpbmcKICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA+IDEgYW5kIGl0ZW1zWzFdOgogICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFwcGVuZGluZyAnJXMnIHRvIElNQUdFX0ZTVFlQRVMuIiAlIGl0ZW1zWzFdKQogICAgICAgICAgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCAnICcgKyBpdGVtc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA+IDIgYW5kIGl0ZW1zWzJdOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFwcGVuZGluZyAnJXMnIHRvIFVCT09UX0JJTkFSSUVTLiIgJSBpdGVtc1syXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdVQk9PVF9CSU5BUklFUycsICcgJyArIGl0ZW1zWzJdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFwcGVuZGluZyAnJXMnIHRvIFVCT09UX0JJTkFSSUVTLiIgJSB1Ym9vdGJpbmFyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdVQk9PVF9CSU5BUklFUycsICcgJyArIHVib290YmluYXJ5KQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgIGVsaWYgbGVuKHVib290Y29uZmlnKSA9PSAwOgogICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCdZb3UgbXVzdCBzZXQgYSBkZWZhdWx0IGluIFVCT09UX0NPTkZJRy4nKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1leHRsaW51eC1jb25maWcuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtZXh0bGludXgtY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5MTM4NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtZXh0bGludXgtY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSwxMjYgQEAKKyMgdWJvb3QtZXh0bGludXgtY29uZmlnLmJiY2xhc3MKKyMKKyMgVGhpcyBjbGFzcyBhbGxvdyB0aGUgZXh0bGludXguY29uZiBnZW5lcmF0aW9uIGZvciBVLUJvb3QgdXNlLiBUaGUKKyMgVS1Cb290IHN1cHBvcnQgZm9yIGl0IGlzIGdpdmVuIHRvIGFsbG93IHRoZSBHZW5lcmljIERpc3RyaWJ1dGlvbgorIyBDb25maWd1cmF0aW9uIHNwZWNpZmljYXRpb24gdXNlIGJ5IE9wZW5FbWJlZGRlZC1iYXNlZCBwcm9kdWN0cy4KKyMKKyMgRXh0ZXJuYWwgdmFyaWFibGVzOgorIworIyBVQk9PVF9FWFRMSU5VWF9DT05TT0xFICAgICAgICAgICAtIFNldCB0byAiY29uc29sZT10dHlYIiB0byBjaGFuZ2Uga2VybmVsIGJvb3QKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGNvbnNvbGUuCisjIFVCT09UX0VYVExJTlVYX0xBQkVMUyAgICAgICAgICAgIC0gQSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlnLgorIyBVQk9PVF9FWFRMSU5VWF9LRVJORUxfQVJHUyAgICAgICAtIEFkZCBhZGRpdGlvbmFsIGtlcm5lbCBhcmd1bWVudHMuCisjIFVCT09UX0VYVExJTlVYX0tFUk5FTF9JTUFHRSAgICAgIC0gS2VybmVsIGltYWdlIG5hbWUuCisjIFVCT09UX0VYVExJTlVYX0ZEVERJUiAgICAgICAgICAgIC0gRGV2aWNlIHRyZWUgZGlyZWN0b3J5LgorIyBVQk9PVF9FWFRMSU5VWF9JTklUUkQgICAgICAgICAgICAtIEluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpLgorIyBVQk9PVF9FWFRMSU5VWF9NRU5VX0RFU0NSSVBUSU9OICAtIE5hbWUgdG8gdXNlIGFzIGRlc2NyaXB0aW9uLgorIyBVQk9PVF9FWFRMSU5VWF9ST09UICAgICAgICAgICAgICAtIFJvb3Qga2VybmVsIGNtZGxpbmUuCisjCisjIElmIHRoZXJlJ3Mgb25seSBvbmUgbGFiZWwgc3lzdGVtIHdpbGwgYm9vdCBhdXRvbWF0aWNhbGx5IGFuZCBtZW51IHdvbid0IGJlCisjIGNyZWF0ZWQuIElmIHlvdSB3YW50IHRvIHVzZSBtb3JlIHRoYW4gb25lIGxhYmVscywgZS5nIGxpbnV4IGFuZCBhbHRlcm5hdGUsCisjIHVzZSBvdmVycmlkZXMgdG8gc2V0IG1lbnUgZGVzY3JpcHRpb24sIGNvbnNvbGUgYW5kIG90aGVycyB2YXJpYWJsZXMuCisjCisjIEV4OgorIworIyBVQk9PVF9FWFRMSU5VWF9MQUJFTFMgPz89ICJkZWZhdWx0IGZhbGxiYWNrIgorIworIyBVQk9PVF9FWFRMSU5VWF9LRVJORUxfSU1BR0VfZGVmYXVsdCA/Pz0gIi4uL3pJbWFnZSIKKyMgVUJPT1RfRVhUTElOVVhfTUVOVV9ERVNDUklQVElPTl9kZWZhdWx0ID8/PSAiTGludXggRGVmYXVsdCIKKyMKKyMgVUJPT1RfRVhUTElOVVhfS0VSTkVMX0lNQUdFX2ZhbGxiYWNrID8/PSAiLi4vekltYWdlLWZhbGxiYWNrIgorIyBVQk9PVF9FWFRMSU5VWF9NRU5VX0RFU0NSSVBUSU9OX2ZhbGxiYWNrID8/PSAiTGludXggRmFsbGJhY2siCisjCisjIFJlc3VsdHM6CisjCisjIG1lbnUgdGl0bGUgU2VsZWN0IHRoZSBib290IG1vZGUKKyMgTEFCRUwgTGludXggRGVmYXVsdAorIyAgIEtFUk5FTCAuLi96SW1hZ2UKKyMgICBGRFRESVIgLi4vCisjICAgQVBQRU5EIHJvb3Q9L2Rldi9tbWNibGsycDIgcm9vdHdhaXQgcncgY29uc29sZT0ke2NvbnNvbGV9CisjIExBQkVMIExpbnV4IEZhbGxiYWNrCisjICAgS0VSTkVMIC4uL3pJbWFnZS1mYWxsYmFjaworIyAgIEZEVERJUiAuLi8KKyMgICBBUFBFTkQgcm9vdD0vZGV2L21tY2JsazJwMiByb290d2FpdCBydyBjb25zb2xlPSR7Y29uc29sZX0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE2LCBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKyMKKyMgVGhlIGtlcm5lbCBoYXMgYW4gaW50ZXJuYWwgZGVmYXVsdCBjb25zb2xlLCB3aGljaCB5b3UgY2FuIG92ZXJyaWRlIHdpdGgKKyMgYSBjb25zb2xlPS4uLnNvbWVfdHR5Li4uCitVQk9PVF9FWFRMSU5VWF9DT05TT0xFID8/PSAiY29uc29sZT0ke2NvbnNvbGV9IgorVUJPT1RfRVhUTElOVVhfTEFCRUxTID8/PSAibGludXgiCitVQk9PVF9FWFRMSU5VWF9GRFRESVIgPz89ICIuLi8iCitVQk9PVF9FWFRMSU5VWF9LRVJORUxfSU1BR0UgPz89ICIuLi8ke0tFUk5FTF9JTUFHRVRZUEV9IgorVUJPT1RfRVhUTElOVVhfS0VSTkVMX0FSR1MgPz89ICJyb290d2FpdCBydyIKK1VCT09UX0VYVExJTlVYX01FTlVfREVTQ1JJUFRJT05fbGludXggPz89ICIke0RJU1RST19OQU1FfSIKKworVUJPT1RfRVhUTElOVVhfQ09ORklHID0gIiR7Qn0vZXh0bGludXguY29uZiIKKworcHl0aG9uIGNyZWF0ZV9leHRsaW51eF9jb25maWcoKSB7CisgICAgaWYgZC5nZXRWYXIoIlVCT09UX0VYVExJTlVYIiwgVHJ1ZSkgIT0gIjEiOgorICAgICAgcmV0dXJuCisKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKToKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKworICAgIGxhYmVscyA9IGQuZ2V0VmFyKCdVQk9PVF9FWFRMSU5VWF9MQUJFTFMnLCBUcnVlKQorICAgIGlmIG5vdCBsYWJlbHM6CisgICAgICAgIGJiLmZhdGFsKCJVQk9PVF9FWFRMSU5VWF9MQUJFTFMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gZG8iKQorCisgICAgaWYgbm90IGxhYmVscy5zdHJpcCgpOgorICAgICAgICBiYi5mYXRhbCgiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ1VCT09UX0VYVExJTlVYX0NPTkZJRycsIFRydWUpCisgICAgaWYgbm90IGNmaWxlOgorICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHJlYWQgVUJPT1RfRVhUTElOVVhfQ09ORklHJykKKworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGNmaWxlLCAndycpIGFzIGNmZ2ZpbGU6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCcjIEdlbmVyaWMgRGlzdHJvIENvbmZpZ3VyYXRpb24gZmlsZSBnZW5lcmF0ZWQgYnkgT3BlbkVtYmVkZGVkXG4nKQorCisgICAgICAgICAgICBpZiBsZW4obGFiZWxzLnNwbGl0KCkpID4gMToKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdtZW51IHRpdGxlIFNlbGVjdCB0aGUgYm9vdCBtb2RlXG4nKQorCisgICAgICAgICAgICBmb3IgbGFiZWwgaW4gbGFiZWxzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQorCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgbGFiZWwgKyAnOicgKyBvdmVycmlkZXMpCisgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgICAgICAgICBleHRsaW51eF9jb25zb2xlID0gbG9jYWxkYXRhLmdldFZhcignVUJPT1RfRVhUTElOVVhfQ09OU09MRScsIFRydWUpCisKKyAgICAgICAgICAgICAgICBtZW51X2Rlc2NyaXB0aW9uID0gbG9jYWxkYXRhLmdldFZhcignVUJPT1RfRVhUTElOVVhfTUVOVV9ERVNDUklQVElPTicsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgbm90IG1lbnVfZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgIG1lbnVfZGVzY3JpcHRpb24gPSBsYWJlbAorCisgICAgICAgICAgICAgICAgcm9vdCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1VCT09UX0VYVExJTlVYX1JPT1QnLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCByb290OgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnVUJPT1RfRVhUTElOVVhfUk9PVCBub3QgZGVmaW5lZCcpCisKKyAgICAgICAgICAgICAgICBrZXJuZWxfaW1hZ2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdVQk9PVF9FWFRMSU5VWF9LRVJORUxfSU1BR0UnLCBUcnVlKQorICAgICAgICAgICAgICAgIGZkdGRpciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1VCT09UX0VYVExJTlVYX0ZEVERJUicsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgZmR0ZGlyOgorICAgICAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdMQUJFTCAlc1xuXHRLRVJORUwgJXNcblx0RkRURElSICVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW51X2Rlc2NyaXB0aW9uLCBrZXJuZWxfaW1hZ2UsIGZkdGRpcikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnTEFCRUwgJXNcblx0S0VSTkVMICVzXG4nICUgKG1lbnVfZGVzY3JpcHRpb24sIGtlcm5lbF9pbWFnZSkpCisKKyAgICAgICAgICAgICAgICBrZXJuZWxfYXJncyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1VCT09UX0VYVExJTlVYX0tFUk5FTF9BUkdTJywgVHJ1ZSkKKworICAgICAgICAgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1VCT09UX0VYVExJTlVYX0lOSVRSRCcsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdcdElOSVRSRCAlc1xuJyUgaW5pdHJkKQorCisgICAgICAgICAgICAgICAga2VybmVsX2FyZ3MgPSByb290ICsgIiAiICsga2VybmVsX2FyZ3MKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdcdEFQUEVORCAlcyAlc1xuJyAlIChrZXJuZWxfYXJncywgZXh0bGludXhfY29uc29sZSkpCisKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCit9CisKK2RvX2luc3RhbGxbcHJlZnVuY3NdICs9ICJjcmVhdGVfZXh0bGludXhfY29uZmlnIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1zaWduLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LXNpZ24uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU2ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1zaWduLmJiY2xhc3MKQEAgLTAsMCArMSw5NSBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBVLUJvb3QgdmVyaWZpZWQgYm9vdCBzdXBwb3J0IGFuZCBpcyBpbnRlbmRlZCB0byBiZQorIyBpbmhlcml0ZWQgZnJvbSB1LWJvb3QgcmVjaXBlIGFuZCBmcm9tIGtlcm5lbC1maXRpbWFnZS5iYmNsYXNzLgorIworIyBUaGUgc2lnbmF0dXJlIHByb2NlZHVyZSByZXF1aXJlcyB0aGUgdXNlciB0byBnZW5lcmF0ZSBhbiBSU0Ega2V5IGFuZAorIyBjZXJ0aWZpY2F0ZSBpbiBhIGRpcmVjdG9yeSBhbmQgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6CisjCisjICAgVUJPT1RfU0lHTl9LRVlESVIgPSAiL2tleXMvZGlyZWN0b3J5IgorIyAgIFVCT09UX1NJR05fS0VZTkFNRSA9ICJkZXYiICMga2V5cyBuYW1lIGluIGtleWRpciAoZWcuICJkZXYuY3J0IiwgImRldi5rZXkiKQorIyAgIFVCT09UX01LSU1BR0VfRFRDT1BUUyA9ICItSSBkdHMgLU8gZHRiIC1wIDIwMDAiCisjICAgVUJPT1RfU0lHTl9FTkFCTEUgPSAiMSIKKyMKKyMgQXMgdmVyaWZpZWQgYm9vdCBkZXBlbmRzIG9uIGZpdEltYWdlIGdlbmVyYXRpb24sIGZvbGxvd2luZyBpcyBhbHNvIHJlcXVpcmVkOgorIworIyAgIEtFUk5FTF9DTEFTU0VTID89ICIga2VybmVsLWZpdGltYWdlICIKKyMgICBLRVJORUxfSU1BR0VUWVBFID89ICJmaXRJbWFnZSIKKyMKKyMgVGhlIHNpZ25hdHVyZSBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gdGhlIHVzZSBvZiBDT05GSUdfT0ZfU0VQQVJBVEUgaW4gVS1Cb290LgorIworIyBUaGUgdGFza3Mgc2VxdWVuY2UgaXMgc2V0IGFzIGJlbG93LCB1c2luZyBERVBMT1lfSU1BR0VfRElSIGFzIGNvbW1vbiBwbGFjZSB0bworIyB0cmVhdCB0aGUgZGV2aWNlIHRyZWUgYmxvYjoKKyMKKyMgICB1LWJvb3Q6ZG9fZGVwbG95X2R0YgorIyAgIHUtYm9vdDpkb19kZXBsb3kKKyMgICB2aXJ0dWFsL2tlcm5lbDpkb19hc3NlbWJsZV9maXRpbWFnZQorIyAgIHUtYm9vdDpkb19jb25jYXRfZHRiCisjICAgdS1ib290OmRvX2luc3RhbGwKKyMKKyMgRm9yIG1vcmUgZGV0YWlscyBvbiBzaWduYXR1cmUgcHJvY2VzcywgcGxlYXNlIHJlZmVyIHRvIFUtYm9vdCBkb2N1bWVudGF0aW9uLgorCisjIFNpZ25hdHVyZSBhY3RpdmF0aW9uLgorVUJPT1RfU0lHTl9FTkFCTEUgPz0gIjAiCisKKyMgRGVmYXVsdCB2YWx1ZSBmb3IgZGVwbG95bWVudCBmaWxlbmFtZXMuCitVQk9PVF9EVEJfSU1BR0UgPz0gInUtYm9vdC0ke01BQ0hJTkV9LSR7UFZ9LSR7UFJ9LmR0YiIKK1VCT09UX0RUQl9CSU5BUlkgPz0gInUtYm9vdC5kdGIiCitVQk9PVF9EVEJfU1lNTElOSyA/PSAidS1ib290LSR7TUFDSElORX0uZHRiIgorVUJPT1RfTk9EVEJfSU1BR0UgPz0gInUtYm9vdC1ub2R0Yi0ke01BQ0hJTkV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSIKK1VCT09UX05PRFRCX0JJTkFSWSA/PSAidS1ib290LW5vZHRiLiR7VUJPT1RfU1VGRklYfSIKK1VCT09UX05PRFRCX1NZTUxJTksgPz0gInUtYm9vdC1ub2R0Yi0ke01BQ0hJTkV9LiR7VUJPT1RfU1VGRklYfSIKKworIworIyBGb2xsb3dpbmcgaXMgcmVsZXZhbnQgb25seSBmb3IgdS1ib290IHJlY2lwZXM6CisjCisKK2RvX2RlcGxveV9kdGIgKCkgeworCW1rZGlyIC1wICR7REVQTE9ZRElSfQorCWNkICR7REVQTE9ZRElSfQorCisJaWYgWyAtZiAke0J9LyR7VUJPT1RfRFRCX0JJTkFSWX0gXTsgdGhlbgorCQlpbnN0YWxsICR7Qn0vJHtVQk9PVF9EVEJfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9EVEJfSU1BR0V9CisJCXJtIC1mICR7VUJPT1RfRFRCX0JJTkFSWX0gJHtVQk9PVF9EVEJfU1lNTElOS30KKwkJbG4gLXNmICR7VUJPT1RfRFRCX0lNQUdFfSAke1VCT09UX0RUQl9TWU1MSU5LfQorCQlsbiAtc2YgJHtVQk9PVF9EVEJfSU1BR0V9ICR7VUJPT1RfRFRCX0JJTkFSWX0KKwlmaQorCWlmIFsgLWYgJHtCfS8ke1VCT09UX05PRFRCX0JJTkFSWX0gXTsgdGhlbgorCQlpbnN0YWxsICR7Qn0vJHtVQk9PVF9OT0RUQl9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX05PRFRCX0lNQUdFfQorCQlybSAtZiAke1VCT09UX05PRFRCX0JJTkFSWX0gJHtVQk9PVF9OT0RUQl9TWU1MSU5LfQorCQlsbiAtc2YgJHtVQk9PVF9OT0RUQl9JTUFHRX0gJHtVQk9PVF9OT0RUQl9TWU1MSU5LfQorCQlsbiAtc2YgJHtVQk9PVF9OT0RUQl9JTUFHRX0gJHtVQk9PVF9OT0RUQl9CSU5BUll9CisJZmkKK30KKworZG9fY29uY2F0X2R0YiAoKSB7CisJIyBDb25jYXRlbmF0ZSBVLUJvb3Qgdy9vIERUQiAmIERUQiB3aXRoIHB1YmxpYyBrZXkKKwkjIChjZi4ga2VybmVsLWZpdGltYWdlLmJiY2xhc3MgZm9yIG1vcmUgZGV0YWlscykKKwlpZiBbICJ4JHtVQk9PVF9TSUdOX0VOQUJMRX0iID0gIngxIiBdOyB0aGVuCisJCWlmIFsgIngke1VCT09UX1NVRkZJWH0iID0gInhpbWciIC1vICJ4JHtVQk9PVF9TVUZGSVh9IiA9ICJ4cm9tIiBdICYmIFwKKwkJCVsgLWUgIiR7REVQTE9ZRElSfS8ke1VCT09UX0RUQl9JTUFHRX0iIF07IHRoZW4KKwkJCWNkICR7Qn0KKwkJCW9lX3J1bm1ha2UgRVhUX0RUQj0ke0RFUExPWURJUn0vJHtVQk9PVF9EVEJfSU1BR0V9CisJCQlpbnN0YWxsICR7U30vJHtVQk9PVF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0lNQUdFfQorCQkJaW5zdGFsbCAke1N9LyR7VUJPT1RfQklOQVJZfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7VUJPT1RfSU1BR0V9CisJCWVsaWYgWyAtZSAiJHtERVBMT1lESVJ9LyR7VUJPT1RfTk9EVEJfSU1BR0V9IiAtYSAtZSAiJHtERVBMT1lESVJ9LyR7VUJPT1RfRFRCX0lNQUdFfSIgXTsgdGhlbgorCQkJY2QgJHtERVBMT1lESVJ9CisJCQljYXQgJHtVQk9PVF9OT0RUQl9JTUFHRX0gJHtVQk9PVF9EVEJfSU1BR0V9IHwgdGVlICR7Qn0vJHtVQk9PVF9CSU5BUll9ID4gJHtVQk9PVF9JTUFHRX0KKwkJZWxzZQorCQkJYmJ3YXJuICJGYWlsdXJlIHdoaWxlIGFkZGluZyBwdWJsaWMga2V5IHRvIHUtYm9vdCBiaW5hcnkuIFZlcmlmaWVkIGJvb3Qgd29uJ3QgYmUgYXZhaWxhYmxlLiIKKwkJZmkKKwlmaQorfQorCitweXRob24gKCkgeworCXVib290X3BuID0gZC5nZXRWYXIoJ1BSRUZFUlJFRF9QUk9WSURFUl91LWJvb3QnLCBUcnVlKSBvciAndS1ib290JworCWlmIGQuZ2V0VmFyKCdVQk9PVF9TSUdOX0VOQUJMRScsIFRydWUpID09ICcxJyBhbmQgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgPT0gdWJvb3RfcG46CisJCWtlcm5lbF9wbiA9IGQuZ2V0VmFyKCdQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwnLCBUcnVlKQorCisJCSMgdS1ib290LmR0YiBhbmQgdS1ib290LW5vZHRiLmJpbiBhcmUgZGVwbG95ZWQgX2JlZm9yZV8gZG9fZGVwbG95CisJCSMgVGh1cywgZG9fZGVwbG95X3NldHNjZW5lIHdpbGwgYWxzbyBwb3B1bGF0ZSB0aGVtIGluIERFUExPWV9JTUFHRV9ESVIKKwkJYmIuYnVpbGQuYWRkdGFzaygnZG9fZGVwbG95X2R0YicsICdkb19kZXBsb3knLCAnZG9fY29tcGlsZScsIGQpCisKKwkJIyBkb19jb25jYXRfZHRiIGlzIHNjaGVkdWxlZCBfYmVmb3JlXyBkb19pbnN0YWxsIGFzIGl0IG92ZXJ3cml0ZSB0aGUKKwkJIyB1LWJvb3QuYmluIGluIGJvdGggREVQTE9ZRElSIGFuZCBERVBMT1lfSU1BR0VfRElSLgorCQliYi5idWlsZC5hZGR0YXNrKCdkb19jb25jYXRfZHRiJywgJ2RvX2luc3RhbGwnLCBOb25lLCBkKQorCQlkLmFwcGVuZFZhckZsYWcoJ2RvX2NvbmNhdF9kdGInLCAnZGVwZW5kcycsICcgJXM6ZG9fYXNzZW1ibGVfZml0aW1hZ2UnICUga2VybmVsX3BuKQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcwppbmRleCA3MGE4MTg1Li4xZmRkNjgxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcwpAQCAtNzEsMTQgKzcxLDE0IEBACiAKICAgICAjIEZpcnN0IGNvbXB1dGUgdGhlbSBmb3Igbm9uX3BrZyB2ZXJzaW9ucwogICAgIGZvciB2IGluIHZhcnM6Ci0gICAgICAgIGZvciBmbGFnIGluIChkLmdldFZhckZsYWdzKHYpIG9yIHt9KToKKyAgICAgICAgZm9yIGZsYWcgaW4gc29ydGVkKChkLmdldFZhckZsYWdzKHYpIG9yIHt9KS5rZXlzKCkpOgogICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIiBvciBmbGFnID09ICJ2YXJkZXBzIiBvciBmbGFnID09ICJ2YXJkZXBzZXhwIjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZC5hcHBlbmRWYXIoJyVzX1ZBUkRFUFMnICUgKHYpLCAnICVzOiVzJyAlIChmbGFnLCBkLmdldFZhckZsYWcodiwgZmxhZywgRmFsc2UpKSkKIAogICAgIGZvciBwIGluIHBrZ3M6CiAgICAgICAgIGZvciB2IGluIHZhcnM6Ci0gICAgICAgICAgICBmb3IgZmxhZyBpbiAoZC5nZXRWYXJGbGFncygiJXNfJXMiICUgKHYscCkpIG9yIHt9KToKKyAgICAgICAgICAgIGZvciBmbGFnIGluIHNvcnRlZCgoZC5nZXRWYXJGbGFncygiJXNfJXMiICUgKHYscCkpIG9yIHt9KS5rZXlzKCkpOgogICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gImRvYyIgb3IgZmxhZyA9PSAidmFyZGVwcyIgb3IgZmxhZyA9PSAidmFyZGVwc2V4cCI6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJyVzX1ZBUkRFUFNfJXMnICUgKHYscCksICcgJXM6JXMnICUgKGZsYWcsIGQuZ2V0VmFyRmxhZygnJXNfJXMnICUgKHYscCksIGZsYWcsIEZhbHNlKSkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MKaW5kZXggMmEwYTc0YS4uMzIxOTI0YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXBkYXRlLXJjLmQuYmJjbGFzcwpAQCAtMSw2ICsxLDcgQEAKIFVQREFURVJDUE4gPz0gIiR7UE59IgogCi1ERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSB1cGRhdGUtcmMuZCBpbml0c2NyaXB0cyIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJyB1cGRhdGUtcmMuZC1uYXRpdmUgdXBkYXRlLXJjLmQgaW5pdHNjcmlwdHMnLCAnJywgZCl9IgorCiBVUERBVEVSQ0QgPSAidXBkYXRlLXJjLmQiCiBVUERBVEVSQ0RfY2xhc3MtY3Jvc3MgPSAiIgogVVBEQVRFUkNEX2NsYXNzLW5hdGl2ZSA9ICIiCkBAIC0xMiw3ICsxMyw3IEBACiAKIHVwZGF0ZXJjZF9wcmVpbnN0KCkgewogaWYgWyAteiAiJEQiIC1hIC1mICIke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSIgXTsgdGhlbgotCSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IHN0b3AKKwkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wIHx8IDoKIGZpCiBpZiB0eXBlIHVwZGF0ZS1yYy5kID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KIAlpZiBbIC1uICIkRCIgXTsgdGhlbgpAQCAtMzYsOCArMzcsOCBAQAogfQogCiB1cGRhdGVyY2RfcHJlcm0oKSB7Ci1pZiBbIC16ICIkRCIgXTsgdGhlbgotCSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IHN0b3AKK2lmIFsgLXogIiREIiAtYSAteCAiJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0iIF07IHRoZW4KKwkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wIHx8IDoKIGZpCiB9CiAKQEAgLTU2LDE1ICs1NywxNSBAQAogZGVmIHVwZGF0ZV9yY19hZnRlcl9wYXJzZShkKToKICAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9QQUNLQUdFUycsIEZhbHNlKSA9PSBOb25lOgogICAgICAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9OQU1FJywgRmFsc2UpID09IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1cGRhdGUtcmMuZCBidXQgZG9lc24ndCBzZXQgSU5JVFNDUklQVF9OQU1FIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGluaGVyaXRzIHVwZGF0ZS1yYy5kIGJ1dCBkb2Vzbid0IHNldCBJTklUU0NSSVBUX05BTUUiICUgZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpCiAgICAgICAgIGlmIGQuZ2V0VmFyKCdJTklUU0NSSVBUX1BBUkFNUycsIEZhbHNlKSA9PSBOb25lOgotICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXBkYXRlLXJjLmQgYnV0IGRvZXNuJ3Qgc2V0IElOSVRTQ1JJUFRfUEFSQU1TIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGluaGVyaXRzIHVwZGF0ZS1yYy5kIGJ1dCBkb2Vzbid0IHNldCBJTklUU0NSSVBUX1BBUkFNUyIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKIAogcHl0aG9uIF9fYW5vbnltb3VzKCkgewogICAgIHVwZGF0ZV9yY19hZnRlcl9wYXJzZShkKQogfQogCi1QQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAiCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAncG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkICcsICcnLCBkKX0iCiBQQUNLQUdFU1BMSVRGVU5DU19yZW1vdmVfY2xhc3MtbmF0aXZlc2RrID0gInBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAiCiAKIHBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZFt2YXJkZXBzXSArPSAidXBkYXRlcmNkX3ByZXJtIHVwZGF0ZXJjZF9wb3N0cm0gdXBkYXRlcmNkX3ByZWluc3QgdXBkYXRlcmNkX3Bvc3RpbnN0IgpAQCAtMTIwLDggKzEyMSw3IEBACiAKICAgICAjIENoZWNrIHRoYXQgdGhpcyBjbGFzcyBpc24ndCBiZWluZyBpbmhpYml0ZWQgKGdlbmVyYWxseSwgYnkKICAgICAjIHN5c3RlbWQuYmJjbGFzcykgYmVmb3JlIGRvaW5nIGFueSB3b3JrLgotICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCkgb3IgXAotICAgICAgIG5vdCBkLmdldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsIFRydWUpOgorICAgIGlmIG5vdCBkLmdldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsIFRydWUpOgogICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFDS0FHRVMnLCBUcnVlKQogICAgICAgICBpZiBwa2dzID09IE5vbmU6CiAgICAgICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1VQREFURVJDUE4nLCBUcnVlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzCmluZGV4IGE5YjUwNmQuLmFmYjU4MGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3MKQEAgLTQsNiArNCw3IEBACiAgICAgaW1wb3J0IGFyZ3BhcnNlCiAgICAgaW1wb3J0IGl0ZXJ0b29scwogICAgIGltcG9ydCByZQorICAgIGltcG9ydCBlcnJubwogCiAgICAgY2xhc3MgbXlBcmd1bWVudFBhcnNlciggYXJncGFyc2UuQXJndW1lbnRQYXJzZXIgKToKICAgICAgICAgZGVmIF9wcmludF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGZpbGU9Tm9uZSk6CkBAIC0xNSw3ICsxNiw3IEBACiAgICAgICAgICAgICBlcnJvcihtZXNzYWdlKQogCiAgICAgICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQobWVzc2FnZSkKKyAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCiAKICAgICBkZWYgbGlzdF9leHRlbmQoaXRlcmFibGUsIGxlbmd0aCwgb2JqID0gTm9uZSk6CiAgICAgICAgICIiIkVuc3VyZSB0aGF0IGl0ZXJhYmxlIGlzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIGJ5IGV4dGVuZGluZyB3aXRoIG9iagpAQCAtMzAsMjIgKzMxLDMzIEBACiAgICAgICAgIGFyZSBzZXQpLiIiIgogICAgICAgICBpZF90YWJsZSA9IGRpY3QoKQogICAgICAgICBmb3IgY29uZiBpbiBmaWxlX2xpc3Quc3BsaXQoKToKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmYpOgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYsICJyIikKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZXJlIGFsd2F5cyBhcmUgYXQgbGVhc3QgZXhwX2ZpZWxkcyBlbGVtZW50cyBpbgotICAgICAgICAgICAgICAgICAgICAjIHRoZSBmaWVsZCBsaXN0LiBUaGlzIGFsbG93cyBmb3IgbGVhdmluZyBvdXQgdHJhaWxpbmcKLSAgICAgICAgICAgICAgICAgICAgIyBjb2xvbnMgaW4gdGhlIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBsaXN0X2V4dGVuZChsaW5lLnJzdHJpcCgpLnNwbGl0KCI6IiksIGV4cF9maWVsZHMpCi0gICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gaWRfdGFibGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZF90YWJsZVtmaWVsZHNbMF1dID0gZmllbGRzCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZF90YWJsZVtmaWVsZHNbMF1dID0gbGlzdChpdGVydG9vbHMuaW1hcChsYW1iZGEgeCwgeTogeCBvciB5LCBmaWVsZHMsIGlkX3RhYmxlW2ZpZWxkc1swXV0pKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYWx3YXlzIGFyZSBhdCBsZWFzdCBleHBfZmllbGRzCisgICAgICAgICAgICAgICAgICAgICAgICAjIGVsZW1lbnRzIGluIHRoZSBmaWVsZCBsaXN0LiBUaGlzIGFsbG93cyBmb3IgbGVhdmluZworICAgICAgICAgICAgICAgICAgICAgICAgIyBvdXQgdHJhaWxpbmcgY29sb25zIGluIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpc3RfZXh0ZW5kKGxpbmUucnN0cmlwKCkuc3BsaXQoIjoiKSwgZXhwX2ZpZWxkcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gaWRfdGFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRfdGFibGVbZmllbGRzWzBdXSA9IGZpZWxkcworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZF90YWJsZVtmaWVsZHNbMF1dID0gbGlzdChtYXAobGFtYmRhIHgsIHk6IHggb3IgeSwgZmllbGRzLCBpZF90YWJsZVtmaWVsZHNbMF1dKSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICByZXR1cm4gaWRfdGFibGUKIAorICAgIGRlZiBoYW5kbGVfbWlzc2luZ19pZChpZCwgdHlwZSwgcGtnKToKKyAgICAgICAgIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2UgYWNjZXB0ICIxIiBpbiBhZGRpdGlvbiB0byAiZXJyb3IiCisgICAgICAgIGlmIGQuZ2V0VmFyKCdVU0VSQUREX0VSUk9SX0RZTkFNSUMnLCBUcnVlKSA9PSAnZXJyb3InIG9yIGQuZ2V0VmFyKCdVU0VSQUREX0VSUk9SX0RZTkFNSUMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICAjYmIuZXJyb3IoIlNraXBwaW5nIHJlY2lwZSAlcywgcGFja2FnZSAlcyB3aGljaCBhZGRzICVzbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIElEIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgIHBrZywgdHlwZSwgaWQpKQorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIC0gJXM6ICVzbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIElEIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCB0eXBlLCBpZCkpCisgICAgICAgIGVsaWYgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycsIFRydWUpID09ICd3YXJuJzoKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIC0gJXM6ICVzbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIElEIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCB0eXBlLCBpZCkpCisKICAgICAjIFdlIHBhcnNlIGFuZCByZXdyaXRlIHRoZSB1c2VyYWRkIGNvbXBvbmVudHMKICAgICBkZWYgcmV3cml0ZV91c2VyYWRkKHBhcmFtcyk6CiAgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb21lcyBmcm9tIC0taGVscCBvbiB1c2VyYWRkIGZyb20gc2hhZG93CkBAIC05Myw5ICsxMDUsOSBAQAogICAgICAgICAgICAgaWYgbm90IHBhcmFtOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdWFhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmUuc3BsaXQoJycnWyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW0pKQorICAgICAgICAgICAgICAgIHVhYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJlLnNwbGl0KCcnJ1sgXHRdKyg/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtKSkKICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlczogVW5hYmxlIHRvIHBhcnNlIGFyZ3VtZW50cyBmb3IgVVNFUkFERF9QQVJBTV8lczogJyVzJyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgcGFyYW0pKQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlczogVW5hYmxlIHRvIHBhcnNlIGFyZ3VtZW50cyBmb3IgVVNFUkFERF9QQVJBTV8lczogJyVzJyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgcGFyYW0pKQogCiAgICAgICAgICAgICAjIFJlYWQgYWxsIHBhc3N3ZCBmaWxlcyBzcGVjaWZpZWQgaW4gVVNFUkFERF9VSURfVEFCTEVTIG9yIGZpbGVzL3Bhc3N3ZAogICAgICAgICAgICAgIyBVc2UgdGhlIHN0YW5kYXJkIHBhc3N3ZCBsYXlvdXQ6CkBAIC0xMTIsNiArMTI0LDggQEAKICAgICAgICAgICAgICAgICB1c2VycyA9IG1lcmdlX2ZpbGVzKGdldF9wYXNzd2RfbGlzdChkKSwgNykKIAogICAgICAgICAgICAgaWYgdWFhcmdzLkxPR0lOIG5vdCBpbiB1c2VyczoKKyAgICAgICAgICAgICAgICBpZiBub3QgdWFhcmdzLnVpZCBvciBub3QgdWFhcmdzLnVpZC5pc2RpZ2l0KCkgb3Igbm90IHVhYXJncy5naWQ6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9taXNzaW5nX2lkKHVhYXJncy5MT0dJTiwgJ3VzZXInLCBwa2cpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgZmllbGQgPSB1c2Vyc1t1YWFyZ3MuTE9HSU5dCkBAIC0xNjEsOSArMTc1LDggQEAKICAgICAgICAgICAgIHVhYXJncy5zaGVsbCA9IGZpZWxkWzZdIG9yIHVhYXJncy5zaGVsbAogCiAgICAgICAgICAgICAjIFNob3VsZCBiZSBhbiBlcnJvciBpZiBhIHNwZWNpZmljIG9wdGlvbiBpcyBzZXQuLi4KLSAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdVU0VSQUREX0VSUk9SX0RZTkFNSUMnLCBUcnVlKSA9PSAnMScgYW5kIG5vdCAoKHVhYXJncy51aWQgYW5kIHVhYXJncy51aWQuaXNkaWdpdCgpKSBhbmQgdWFhcmdzLmdpZCk6Ci0gICAgICAgICAgICAgICAgI2JiLmVycm9yKCJTa2lwcGluZyByZWNpcGUgJXMsIHBhY2thZ2UgJXMgd2hpY2ggYWRkcyB1c2VybmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIHVpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksICBwa2csIHVhYXJncy5MT0dJTikpCi0gICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSAlczogVXNlcm5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyB1aWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIHVhYXJncy5MT0dJTikpCisgICAgICAgICAgICBpZiBub3QgdWFhcmdzLnVpZCBvciBub3QgdWFhcmdzLnVpZC5pc2RpZ2l0KCkgb3Igbm90IHVhYXJncy5naWQ6CisgICAgICAgICAgICAgICAgIGhhbmRsZV9taXNzaW5nX2lkKHVhYXJncy5MT0dJTiwgJ3VzZXInLCBwa2cpCiAKICAgICAgICAgICAgICMgUmVjb25zdHJ1Y3QgdGhlIGFyZ3MuLi4KICAgICAgICAgICAgIG5ld3BhcmFtICA9IFsnJywgJyAtLWRlZmF1bHRzJ11bdWFhcmdzLmRlZmF1bHRzXQpAQCAtMjI3LDkgKzI0MCw5IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIHByb2Nlc3NpbmcgbXVsdGlwbGUgbGluZXMsIHdlIGNvdWxkIGhhdmUgbGVmdCBvdmVyIHZhbHVlcyBoZXJlLi4uCi0gICAgICAgICAgICAgICAgZ2FhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmUuc3BsaXQoJycnWyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW0pKQorICAgICAgICAgICAgICAgIGdhYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJlLnNwbGl0KCcnJ1sgXHRdKyg/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtKSkKICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlczogVW5hYmxlIHRvIHBhcnNlIGFyZ3VtZW50cyBmb3IgR1JPVVBBRERfUEFSQU1fJXM6ICclcyciICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIHBhcmFtKSkKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJXM6IFVuYWJsZSB0byBwYXJzZSBhcmd1bWVudHMgZm9yIEdST1VQQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBwYXJhbSkpCiAKICAgICAgICAgICAgICMgUmVhZCBhbGwgZ3JvdXAgZmlsZXMgc3BlY2lmaWVkIGluIFVTRVJBRERfR0lEX1RBQkxFUyBvciBmaWxlcy9ncm91cAogICAgICAgICAgICAgIyBVc2UgdGhlIHN0YW5kYXJkIGdyb3VwIGxheW91dDoKQEAgLTI0NCw2ICsyNTcsOCBAQAogICAgICAgICAgICAgICAgIGdyb3VwcyA9IG1lcmdlX2ZpbGVzKGdldF9ncm91cF9saXN0KGQpLCA0KQogCiAgICAgICAgICAgICBpZiBnYWFyZ3MuR1JPVVAgbm90IGluIGdyb3VwczoKKyAgICAgICAgICAgICAgICBpZiBub3QgZ2FhcmdzLmdpZCBvciBub3QgZ2FhcmdzLmdpZC5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9taXNzaW5nX2lkKGdhYXJncy5HUk9VUCwgJ2dyb3VwJywgcGtnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGZpZWxkID0gZ3JvdXBzW2dhYXJncy5HUk9VUF0KQEAgLTI1Myw5ICsyNjgsOCBAQAogICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgZ3JvdXBuYW1lICVzJ3MgZ2lkIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBnYWFyZ3MuR1JPVVAsIGdhYXJncy5naWQsIGZpZWxkWzJdKSkKICAgICAgICAgICAgICAgICBnYWFyZ3MuZ2lkID0gZmllbGRbMl0KIAotICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycsIFRydWUpID09ICcxJyBhbmQgbm90IChnYWFyZ3MuZ2lkIGFuZCBnYWFyZ3MuZ2lkLmlzZGlnaXQoKSk6Ci0gICAgICAgICAgICAgICAgI2JiLmVycm9yKCJTa2lwcGluZyByZWNpcGUgJXMsIHBhY2thZ2UgJXMgd2hpY2ggYWRkcyBncm91cG5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyBnaWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCAgcGtnLCBnYWFyZ3MuR1JPVVApKQotICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gJXM6IEdyb3VwbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIGdpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgZ2FhcmdzLkdST1VQKSkKKyAgICAgICAgICAgIGlmIG5vdCBnYWFyZ3MuZ2lkIG9yIG5vdCBnYWFyZ3MuZ2lkLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICBoYW5kbGVfbWlzc2luZ19pZChnYWFyZ3MuR1JPVVAsICdncm91cCcsIHBrZykKIAogICAgICAgICAgICAgIyBSZWNvbnN0cnVjdCB0aGUgYXJncy4uLgogICAgICAgICAgICAgbmV3cGFyYW0gID0gWycnLCAnIC0tZm9yY2UnXVtnYWFyZ3MuZm9yY2VdCkBAIC0yNzEsNiArMjg1LDE5IEBACiAKICAgICAgICAgcmV0dXJuICI7Ii5qb2luKG5ld3BhcmFtcykuc3RyaXAoKQogCisgICAgIyBUaGUgcGFyc2luZyBvZiB0aGUgY3VycmVudCByZWNpcGUgZGVwZW5kcyBvbiB0aGUgY29udGVudCBvZgorICAgICMgdGhlIGZpbGVzIGxpc3RlZCBpbiBVU0VSQUREX1VJRC9HSURfVEFCTEVTLiBXZSBuZWVkIHRvIHRlbGwgYml0YmFrZQorICAgICMgYWJvdXQgdGhhdCBleHBsaWNpdGx5IHRvIHRyaWdnZXIgcmUtcGFyc2luZyBhbmQgdGh1cyByZS1leGVjdXRpb24gb2YKKyAgICAjIHRoaXMgY29kZSB3aGVuIHRoZSBmaWxlcyBjaGFuZ2UuCisgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgZm9yIHZhcm5hbWUsIGRlZmF1bHQgaW4gKCgnVVNFUkFERF9VSURfVEFCTEVTJywgJ2ZpbGVzL3Bhc3N3ZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1VTRVJBRERfR0lEX1RBQkxFUycsICdmaWxlcy9ncm91cCcpKToKKyAgICAgICAgdGFibGVzID0gZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHRhYmxlczoKKyAgICAgICAgICAgIHRhYmxlcyA9IGRlZmF1bHQKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiB0YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGJiLnBhcnNlLm1hcmtfZGVwZW5kZW5jeShkLCBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkpCisKICAgICAjIExvYWQgYW5kIHByb2Nlc3MgdGhlIHVzZXJzIGFuZCBncm91cHMsIHJld3JpdGluZyB0aGUgYWRkdXNlci9hZGRncm91cCBwYXJhbXMKICAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGQuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCmluZGV4IGVlNDAyYWMuLjNjZmYwOGUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCkBAIC0zLDExICszLDcgQEAKICMgYmFzZS1wYXNzd2QtY3Jvc3MgcHJvdmlkZXMgdGhlIGRlZmF1bHQgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBpbiB0aGUKICMgdGFyZ2V0IHN5c3Jvb3QsIGFuZCBzaGFkb3cgLW5hdGl2ZSBhbmQgLXN5c3Jvb3QgcHJvdmlkZSB0aGUgdXRpbGl0aWVzCiAjIGFuZCBzdXBwb3J0IGZpbGVzIG5lZWRlZCB0byBhZGQgYW5kIG1vZGlmeSB1c2VyIGFuZCBncm91cCBhY2NvdW50cwotREVQRU5EU19hcHBlbmQgPSAiJHtVU0VSQUREREVQRU5EU30iCi1VU0VSQUREREVQRU5EUyA9ICIgYmFzZS1maWxlcyBzaGFkb3ctbmF0aXZlIHNoYWRvdy1zeXNyb290IHNoYWRvdyIKLVVTRVJBRERERVBFTkRTX2NsYXNzLWNyb3NzID0gIiIKLVVTRVJBRERERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCi1VU0VSQUREREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBiYXNlLWZpbGVzIHNoYWRvdy1uYXRpdmUgc2hhZG93LXN5c3Jvb3Qgc2hhZG93IgogCiAjIFRoaXMgcHJlaW5zdGFsbCBmdW5jdGlvbiBjYW4gYmUgcnVuIGluIGZvdXIgZGlmZmVyZW50IGNvbnRleHRzOgogIwpAQCAtNTQsMTUgKzUwLDE1IEBACiAJZWNobyAiUnVubmluZyBncm91cGFkZCBjb21tYW5kcy4uLiIKIAkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZ3JvdXBhZGQgZm9yIHBhcmFtZXRlciBsaXN0cwogCSMgc2VwYXJhdGVkIGJ5ICc7JwotCW9wdHM9YGVjaG8gIiRHUk9VUEFERF9QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDFgCi0JcmVtYWluaW5nPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlvcHRzPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxIHwgc2VkIC1lICdzI1sgXHRdKiQjIydgCisJcmVtYWluaW5nPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLSB8IHNlZCAtZSAncyNbIFx0XSokIyMnYAogCXdoaWxlIHRlc3QgIngkb3B0cyIgIT0gIngiOyBkbwogCQlwZXJmb3JtX2dyb3VwYWRkICIkU1lTUk9PVCIgIiRPUFQgJG9wdHMiCiAJCWlmIHRlc3QgIngkb3B0cyIgPSAieCRyZW1haW5pbmciOyB0aGVuCiAJCQlicmVhawogCQlmaQotCQlvcHRzPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMWAKLQkJcmVtYWluaW5nPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxIHwgc2VkIC1lICdzI1sgXHRdKiQjIydgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItIHwgc2VkIC1lICdzI1sgXHRdKiQjIydgCiAJZG9uZQogZmkgCiAKQEAgLTcwLDE1ICs2NiwxNSBAQAogCWVjaG8gIlJ1bm5pbmcgdXNlcmFkZCBjb21tYW5kcy4uLiIKIAkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdXNlcmFkZCBmb3IgcGFyYW1ldGVyIGxpc3RzCiAJIyBzZXBhcmF0ZWQgYnkgJzsnCi0Jb3B0cz1gZWNobyAiJFVTRVJBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAotCXJlbWFpbmluZz1gZWNobyAiJFVTRVJBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlvcHRzPWBlY2hvICIkVVNFUkFERF9QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDEgfCBzZWQgLWUgJ3MjWyBcdF0qJCMjJ2AKKwlyZW1haW5pbmc9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi0gfCBzZWQgLWUgJ3MjWyBcdF0qJCMjJ2AKIAl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KIAkJcGVyZm9ybV91c2VyYWRkICIkU1lTUk9PVCIgIiRPUFQgJG9wdHMiCiAJCWlmIHRlc3QgIngkb3B0cyIgPSAieCRyZW1haW5pbmciOyB0aGVuCiAJCQlicmVhawogCQlmaQotCQlvcHRzPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMWAKLQkJcmVtYWluaW5nPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxIHwgc2VkIC1lICdzI1sgXHRdKiQjIydgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItIHwgc2VkIC1lICdzI1sgXHRdKiQjIydgCiAJZG9uZQogZmkKIApAQCAtODYsMTUgKzgyLDE1IEBACiAJZWNobyAiUnVubmluZyBncm91cG1lbXMgY29tbWFuZHMuLi4iCiAJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGdyb3VwbWVtcyBmb3IgcGFyYW1ldGVyIGxpc3RzCiAJIyBzZXBhcmF0ZWQgYnkgJzsnCi0Jb3B0cz1gZWNobyAiJEdST1VQTUVNU19QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDFgCi0JcmVtYWluaW5nPWBlY2hvICIkR1JPVVBNRU1TX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJb3B0cz1gZWNobyAiJEdST1VQTUVNU19QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDEgfCBzZWQgLWUgJ3MjWyBcdF0qJCMjJ2AKKwlyZW1haW5pbmc9YGVjaG8gIiRHUk9VUE1FTVNfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLSB8IHNlZCAtZSAncyNbIFx0XSokIyMnYAogCXdoaWxlIHRlc3QgIngkb3B0cyIgIT0gIngiOyBkbwogCQlwZXJmb3JtX2dyb3VwbWVtcyAiJFNZU1JPT1QiICIkT1BUICRvcHRzIgogCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgogCQkJYnJlYWsKIAkJZmkKLQkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCi0JCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCQlvcHRzPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMSB8IHNlZCAtZSAncyNbIFx0XSokIyMnYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLSB8IHNlZCAtZSAncyNbIFx0XSokIyMnYAogCWRvbmUKIGZpCiB9CkBAIC0xMDMsNyArOTksNyBAQAogCSMgUHNldWRvIG1heSAoZG9faW5zdGFsbCkgb3IgbWF5IG5vdCAoZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSkgYmUgcnVubmluZyAKIAkjIGF0IHRoaXMgcG9pbnQgc28gd2UncmUgZXhwbGljaXQgYWJvdXQgdGhlIGVudmlyb25tZW50IHNvIHBzZXVkbyBjYW4gbG9hZCBpZiAKIAkjIG5vdCBhbHJlYWR5IHByZXNlbnQuCi0JZXhwb3J0IFBTRVVETz0iJHtGQUtFUk9PVEVOVn0gUFNFVURPX0xPQ0FMU1RBVEVESVI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsb2NhbHN0YXRlZGlyfS9wc2V1ZG8gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJ9L3BzZXVkbyIKKwlleHBvcnQgUFNFVURPPSIke0ZBS0VST09URU5WfSBQU0VVRE9fTE9DQUxTVEFURURJUj0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xvY2Fsc3RhdGVkaXJ9L3BzZXVkbyAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9L3BzZXVkbyIKIAogCSMgRXhwbGljaXRseSBzZXQgJEQgc2luY2UgaXQgaXNuJ3Qgc2V0IHRvIGFueXRoaW5nCiAJIyBiZWZvcmUgZG9faW5zdGFsbApAQCAtMTI5LDU3ICsxMjUsNTMgQEAKIAogdXNlcmRlbF9zeXNyb290X3NzdGF0ZSAoKSB7CiBpZiB0ZXN0ICJ4JHtTVEFHSU5HX0RJUl9UQVJHRVR9IiAhPSAieCI7IHRoZW4KLSAgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAiY29uZmlndXJlIiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gImNsZWFuIiBdOyB0aGVuCi0gICAgICAgIGV4cG9ydCBQU0VVRE89IiR7RkFLRVJPT1RFTlZ9IFBTRVVET19MT0NBTFNUQVRFRElSPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bG9jYWxzdGF0ZWRpcn0vcHNldWRvICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyfS9wc2V1ZG8iCisgICAgaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gImNsZWFuIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBQU0VVRE89IiR7RkFLRVJPT1RFTlZ9IFBTRVVET19MT0NBTFNUQVRFRElSPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bG9jYWxzdGF0ZWRpcn0vcHNldWRvICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vcHNldWRvIgogICAgICAgICBPUFQ9Ii0tcm9vdCAke1NUQUdJTkdfRElSX1RBUkdFVH0iCiAKICAgICAgICAgIyBSZW1vdmUgZ3JvdXBzIGFuZCB1c2VycyBkZWZpbmVkIGZvciBwYWNrYWdlCiAgICAgICAgIEdST1VQQUREX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ2dyb3VwYWRkJyl9IgogICAgICAgICBVU0VSQUREX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ3VzZXJhZGQnKX0iCiAKLSAgICAgICAgaWYgdGVzdCAieGBlY2hvICRVU0VSQUREX1BBUkFNIHwgdHIgLWQgJ1s6c3BhY2U6XSdgIiAhPSAieCI7IHRoZW4KLSAgICAgICAgICAgIHVzZXI9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMSB8IGF3ayAneyBwcmludCAkTkYgfSdgCisgICAgICAgIHVzZXI9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMSB8IGF3ayAneyBwcmludCAkTkYgfSdgCisgICAgICAgIHJlbWFpbmluZz1gZWNobyAiJFVTRVJBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLSAtcyB8IHNlZCAtZSAncyNbIFx0XSokIyMnYAorICAgICAgICB3aGlsZSB0ZXN0ICJ4JHVzZXIiICE9ICJ4IjsgZG8KICAgICAgICAgICAgIHBlcmZvcm1fdXNlcmRlbCAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9IiAiJE9QVCAkdXNlciIKLSAgICAgICAgZmkKKyAgICAgICAgICAgIHVzZXI9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxIHwgYXdrICd7IHByaW50ICRORiB9J2AKKyAgICAgICAgICAgIHJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItIC1zIHwgc2VkIC1lICdzI1sgXHRdKiQjIydgCisgICAgICAgIGRvbmUKIAotICAgICAgICBpZiB0ZXN0ICJ4YGVjaG8gJEdST1VQQUREX1BBUkFNIHwgdHIgLWQgJ1s6c3BhY2U6XSdgIiAhPSAieCI7IHRoZW4KLSAgICAgICAgICAgIGdyb3VwPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxIHwgYXdrICd7IHByaW50ICRORiB9J2AKLSAgICAgICAgICAgIHBlcmZvcm1fZ3JvdXBkZWwgIiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgIiRPUFQgJGdyb3VwIgotICAgICAgICBmaQorICAgICAgICB1c2VyPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxIHwgYXdrICd7IHByaW50ICRORiB9J2AKKyAgICAgICAgcmVtYWluaW5nPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLSAtcyB8IHNlZCAtZSAncyNbIFx0XSokIyMnYAorICAgICAgICB3aGlsZSB0ZXN0ICJ4JHVzZXIiICE9ICJ4IjsgZG8KKyAgICAgICAgICAgIHBlcmZvcm1fZ3JvdXBkZWwgIiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgIiRPUFQgJHVzZXIiCisgICAgICAgICAgICB1c2VyPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMSB8IGF3ayAneyBwcmludCAkTkYgfSdgCisgICAgICAgICAgICByZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLSAtcyB8IHNlZCAtZSAncyNbIFx0XSokIyMnYAorICAgICAgICBkb25lCiAKICAgICBmaQogZmkKIH0KIAotU1NUQVRFQ0xFQU5GVU5DUyA9ICJ1c2VyZGVsX3N5c3Jvb3Rfc3N0YXRlIgotU1NUQVRFQ0xFQU5GVU5DU19jbGFzcy1jcm9zcyA9ICIiCi1TU1RBVEVDTEVBTkZVTkNTX2NsYXNzLW5hdGl2ZSA9ICIiCi1TU1RBVEVDTEVBTkZVTkNTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitTU1RBVEVDTEVBTkZVTkNTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIHVzZXJkZWxfc3lzcm9vdF9zc3RhdGUiCiAKIGRvX2luc3RhbGxbcHJlZnVuY3NdICs9ICIke1NZU1JPT1RGVU5DfSIKLVNZU1JPT1RGVU5DID0gInVzZXJhZGRfc3lzcm9vdCIKLVNZU1JPT1RGVU5DX2NsYXNzLWNyb3NzID0gIiIKLVNZU1JPT1RGVU5DX2NsYXNzLW5hdGl2ZSA9ICIiCi1TWVNST09URlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgotU1NUQVRFUFJFSU5TVEZVTkNTICs9ICIke1NZU1JPT1RQT1NURlVOQ30iCi1TWVNST09UUE9TVEZVTkMgPSAidXNlcmFkZF9zeXNyb290X3NzdGF0ZSIKLVNZU1JPT1RQT1NURlVOQ19jbGFzcy1jcm9zcyA9ICIiCi1TWVNST09UUE9TVEZVTkNfY2xhc3MtbmF0aXZlID0gIiIKLVNZU1JPT1RQT1NURlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgorU1lTUk9PVEZVTkNfY2xhc3MtdGFyZ2V0ID0gInVzZXJhZGRfc3lzcm9vdCIKK1NZU1JPT1RGVU5DID0gIiIKIAotVVNFUkFERFNFVFNDRU5FREVQUyA9ICIke01MUFJFRklYfWJhc2UtcGFzc3dkOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgcHNldWRvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIHNoYWRvdy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSAke01MUFJFRklYfXNoYWRvdy1zeXNyb290OmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiCi1VU0VSQUREU0VUU0NFTkVERVBTX2NsYXNzLWNyb3NzID0gIiIKLVVTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtbmF0aXZlID0gIiIKLVVTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1NTVEFURVBSRUlOU1RGVU5DU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiB1c2VyYWRkX3N5c3Jvb3Rfc3N0YXRlIgorCiBkb19wYWNrYWdlX3NldHNjZW5lW2RlcGVuZHNdICs9ICIke1VTRVJBRERTRVRTQ0VORURFUFN9IgogZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZVtkZXBlbmRzXSArPSAiJHtVU0VSQUREU0VUU0NFTkVERVBTfSIKK1VTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtdGFyZ2V0ID0gIiR7TUxQUkVGSVh9YmFzZS1wYXNzd2Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBwc2V1ZG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgc2hhZG93LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lICR7TUxQUkVGSVh9c2hhZG93LXN5c3Jvb3Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKK1VTRVJBRERTRVRTQ0VORURFUFMgPSAiIgogCiAjIFJlY2lwZSBwYXJzZS10aW1lIHNhbml0eSBjaGVja3MKIGRlZiB1cGRhdGVfdXNlcmFkZF9hZnRlcl9wYXJzZShkKToKICAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKQogCiAgICAgaWYgbm90IHVzZXJhZGRfcGFja2FnZXM6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIGluaGVyaXRzIHVzZXJhZGQgYnV0IGRvZXNuJ3Qgc2V0IFVTRVJBRERfUEFDS0FHRVMiICUgZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpCisgICAgICAgIGJiLmZhdGFsKCIlcyBpbmhlcml0cyB1c2VyYWRkIGJ1dCBkb2Vzbid0IHNldCBVU0VSQUREX1BBQ0tBR0VTIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQogCiAgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CiAgICAgICAgIGlmIG5vdCBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpIGFuZCBub3QgZC5nZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkgYW5kIG5vdCBkLmdldFZhcignR1JPVVBNRU1TX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSk6CkBAIC0yMDMsNyArMTk1LDcgQEAKICAgICBmb3IgcGtnIGluIHVzZXJhZGRfcGFja2FnZXMuc3BsaXQoKToKICAgICAgICAgcGFyYW0gPSBkLmdldFZhcihwYXJhbV90eXBlICUgcGtnLCBUcnVlKQogICAgICAgICBpZiBwYXJhbToKLSAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQocGFyYW0pCisgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKHBhcmFtLnJzdHJpcCgiIDsiKSkKIAogICAgIHJldHVybiAiOyAiLmpvaW4ocGFyYW1zKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkX2Jhc2UuYmJjbGFzcwppbmRleCAwZDgxYWNjLi5iYTg3ZWRjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZF9iYXNlLmJiY2xhc3MKQEAgLTE3LDcgKzE3LDYgQEAKIAlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCiAJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCiAJaWYgdGVzdCAieCRncm91cF9leGlzdHMiID0gIngiOyB0aGVuCi0JCW9wdHM9YGVjaG8gJG9wdHMgfCBzZWQgcy9cJy9cIi9nYAogCQlldmFsIGZsb2NrIC14ICRyb290ZGlyJHtzeXNjb25mZGlyfSAtYyBcIiRQU0VVRE8gZ3JvdXBhZGQgXCRvcHRzXCIgfHwgdHJ1ZQogCQlncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKIAkJaWYgdGVzdCAieCRncm91cF9leGlzdHMiID0gIngiOyB0aGVuCkBAIC0zNSw3ICszNCw2IEBACiAJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCiAJbG9jYWwgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKIAlpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiA9ICJ4IjsgdGhlbgotCQlvcHRzPWBlY2hvICRvcHRzIHwgc2VkIHMvXCcvXCIvZ2AKIAkJZXZhbCBmbG9jayAteCAkcm9vdGRpciR7c3lzY29uZmRpcn0gLWMgIFwiJFBTRVVETyB1c2VyYWRkIFwkb3B0c1wiIHx8IHRydWUKIAkJdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKIAkJaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgPSAieCI7IHRoZW4KQEAgLTUzLDE0ICs1MSw2IEBACiAJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgZm9yIChpID0gMTsgaSA8IE5GOyBpKyspIGlmICgkaSA9PSAiLWciIHx8ICRpID09ICItLWdyb3VwIikgcHJpbnQgJChpKzEpIH0nYAogCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgZm9yIChpID0gMTsgaSA8IE5GOyBpKyspIGlmICgkaSA9PSAiLWEiIHx8ICRpID09ICItLWFkZCIpIHByaW50ICQoaSsxKSB9J2AKIAliYm5vdGUgIiR7UE59OiBSdW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kIHdpdGggZ3JvdXAgJGdyb3VwbmFtZSBhbmQgdXNlciAkdXNlcm5hbWUiCi0JIyBncm91cG1lbXMgZmFpbHMgaWYgL2V0Yy9nc2hhZG93IGRvZXMgbm90IGV4aXN0Ci0JbG9jYWwgZ3NoYWRvdz0iIgotCWlmIFsgLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cgXTsgdGhlbgotCQlnc2hhZG93PSJ5ZXMiCi0JZWxzZQotCQlnc2hhZG93PSJubyIKLQkJdG91Y2ggJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cKLQlmaQogCWxvY2FsIG1lbV9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZTpbXjpdKjpbXjpdKjpcKFteLF0qLFwpKiR1c2VybmFtZVwoLFteLF0qXCkqIiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCiAJaWYgdGVzdCAieCRtZW1fZXhpc3RzIiA9ICJ4IjsgdGhlbgogCQlldmFsIGZsb2NrIC14ICRyb290ZGlyJHtzeXNjb25mZGlyfSAtYyBcIiRQU0VVRE8gZ3JvdXBtZW1zIFwkb3B0c1wiIHx8IHRydWUKQEAgLTcxLDEwICs2MSw2IEBACiAJZWxzZQogCQliYm5vdGUgIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGFscmVhZHkgY29udGFpbnMgJHVzZXJuYW1lLCBub3QgcmUtYWRkaW5nIGl0IgogCWZpCi0JaWYgdGVzdCAieCRnc2hhZG93IiA9ICJ4bm8iOyB0aGVuCi0JCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93Ci0JCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93LQotCWZpCiB9CiAKIHBlcmZvcm1fZ3JvdXBkZWwgKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91dGlsaXR5LXRhc2tzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcwppbmRleCA1YmNmZDBiLi43YmE1NmUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcwpAQCAtNDYsOCArNDYsOCBAQAogICAgIHRyeToKICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQogICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkKLSAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24sIGU6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24gYXMgZToKKyAgICAgICAgYmIuZmF0YWwoc3RyKGUpKQogfQogCiBhZGR0YXNrIGNoZWNrdXJpYWxsIGFmdGVyIGRvX2NoZWNrdXJpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MKaW5kZXggODFiOTJjYi4uZGJiNWU0YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91dGlscy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcwpAQCAtMjQsNiArMjQsNyBAQAogICAgIHJldHVybiBvZS51dGlscy52ZXJzaW9uX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKIAogZGVmIGJhc2VfY29udGFpbnModmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIGJiLm5vdGUoJ2Jhc2VfY29udGFpbnMgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBiYi51dGlscy5jb250YWlucyBpbnN0ZWFkLicpCiAgICAgcmV0dXJuIGJiLnV0aWxzLmNvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQogCiBkZWYgYmFzZV9ib3RoX2NvbnRhaW4odmFyaWFibGUxLCB2YXJpYWJsZTIsIGNoZWNrdmFsdWUsIGQpOgpAQCAtNjEsMTUgKzYyLDE4IEBACiBvZV9zb2luc3RhbGwoKSB7CiAJIyBQdXJwb3NlOiBJbnN0YWxsIHNoYXJlZCBsaWJyYXJ5IGZpbGUgYW5kCiAJIyAgICAgICAgICBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBsaW5rcwotCSMgRXhhbXBsZToKLQkjCi0JIyBvZV8KLQkjCi0JI2Jibm90ZSBpbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJ5ICQxIHRvICQyCi0JIworCSMgRXhhbXBsZTogb2Vfc29pbnN0YWxsIGxpYmZvby5zby4xLjIuMyAke0R9JHtsaWJkaXJ9CiAJbGlibmFtZT1gYmFzZW5hbWUgJDFgCisJY2FzZSAiJGxpYm5hbWUiIGluCisJICAgICouc28pCisJICAgICAgICBiYmZhdGFsICJvZV9zb2luc3RhbGw6IFNoYXJlZCBsaWJyYXJ5IG11c3QgaGF2ZWQgdmVyc2lvbmVkIGZpbGVuYW1lIChlLmcuIGxpYmZvby5zby4xLjIuMykiCisJICAgICAgICA7OworCWVzYWMKIAlpbnN0YWxsIC1tIDc1NSAkMSAkMi8kbGlibmFtZQogCXNvbmFtZWxpbms9YCR7SE9TVF9QUkVGSVh9cmVhZGVsZiAtZCAkMSB8Z3JlcCAnTGlicmFyeSBzb25hbWU6JyB8c2VkIC1lICdzLy4qXFtcKC4qXClcXS4qL1wxLydgCisJaWYgWyAteiAkc29uYW1lbGluayBdOyB0aGVuCisJCWJiZmF0YWwgIm9lX3NvaW5zdGFsbDogJGxpYm5hbWUgaXMgbWlzc2luZyBFTEYgdGFnICdTT05BTUUnLiIKKwlmaQogCXNvbGluaz1gZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKIAlsbiAtc2YgJGxpYm5hbWUgJDIvJHNvbmFtZWxpbmsKIAlsbiAtc2YgJGxpYm5hbWUgJDIvJHNvbGluawpAQCAtMjQ4LDcgKzI1Miw3IEBACiBjcmVhdGVfY21kbGluZV93cmFwcGVyICgpIHsKIAkjIENyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0IHdoZXJlIGNvbW1hbmRsaW5lIG9wdGlvbnMgYXJlIG5lZWRlZAogCSMKLQkjIFRoZXNlIGFyZSB1c2VmdWwgdG8gd29yayBhcm91bmQgcmVsb2NhdGlvbiBpc3N1ZXMsIGJ5IHBhc3NpbmcgZXh0cmEgb3B0aW9ucyAKKwkjIFRoZXNlIGFyZSB1c2VmdWwgdG8gd29yayBhcm91bmQgcmVsb2NhdGlvbiBpc3N1ZXMsIGJ5IHBhc3NpbmcgZXh0cmEgb3B0aW9ucwogCSMgdG8gYSBwcm9ncmFtCiAJIwogCSMgVXNhZ2U6IGNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgRklMRU5BTUUgPGV4dHJhLW9wdGlvbnM+CkBAIC0zMDIsNyArMzA2LDcgQEAKIAogCiBkZWYgY2hlY2tfYXBwX2V4aXN0cyhhcHAsIGQpOgotICAgIGFwcCA9IGQuZXhwYW5kKGFwcCkKKyAgICBhcHAgPSBkLmV4cGFuZChhcHApLnN0cmlwKCkKICAgICBwYXRoID0gZC5nZXRWYXIoJ1BBVEgnLCBkLCBUcnVlKQogICAgIHJldHVybiBib29sKGJiLnV0aWxzLndoaWNoKHBhdGgsIGFwcCkpCiAKQEAgLTMyMiw3ICszMjYsNyBAQAogICAgIG92ZXJyaWRlcy5yZXZlcnNlKCkKICAgICBmb3IgbyBpbiBvdmVycmlkZXM6CiAgICAgICAgIGZvciBwIGluIHBhdGg6Ci0gICAgICAgICAgICBpZiBwICE9ICIiOiAKKyAgICAgICAgICAgIGlmIHAgIT0gIiI6CiAgICAgICAgICAgICAgICAgZmlsZXNwYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ocCwgbykpCiAgICAgcmV0dXJuICI6Ii5qb2luKGZpbGVzcGF0aCkKIApAQCAtMzc4LDMgKzM4Miw1MCBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldCA9IHZhbHVlcwogICAgIHJldHVybiAiICIuam9pbihyZXQpCisKK2RlZiBhbGxfbXVsdGlsaWJfdHVuZV9saXN0KHZhcnMsIGQpOgorICAgICIiIgorICAgIFJldHVybiBhIGxpc3Qgb2YgJHtWQVJ9IGZvciBlYWNoIHZhcmlhYmxlIFZBUiBpbiB2YXJzIGZyb20gZWFjaCAKKyAgICBtdWx0aWxpYiB0dW5lIGNvbmZpZ3VyYXRpb24uCisgICAgSXMgc2FmZSB0byBiZSBjYWxsZWQgZnJvbSBhIG11bHRpbGliIHJlY2lwZS9jb250ZXh0IGFzIGl0IGNhbgorICAgIGZpZ3VyZSBvdXQgdGhlIG9yaWdpbmFsIHR1bmUgYW5kIHJlbW92ZSB0aGUgbXVsdGlsaWIgb3ZlcnJpZGVzLgorICAgICIiIgorICAgIHZhbHVlcyA9IHt9CisgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgdmFsdWVzW3ZdID0gW10KKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKS5zcGxpdCgiOiIpCisgICAgbmV3b3ZlcnJpZGVzID0gW10KKyAgICBmb3IgbyBpbiBvdmVycmlkZXM6CisgICAgICAgIGlmIG5vdCBvLnN0YXJ0c3dpdGgoInZpcnRjbGFzcy1tdWx0aWxpYi0iKToKKyAgICAgICAgICAgIG5ld292ZXJyaWRlcy5hcHBlbmQobykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCAiOiIuam9pbihuZXdvdmVycmlkZXMpKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgIiIpCisgICAgb3JpZ2RlZmF1bHQgPSBsb2NhbGRhdGEuZ2V0VmFyKCJERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTCIsIFRydWUpCisgICAgaWYgb3JpZ2RlZmF1bHQ6CisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgb3JpZ2RlZmF1bHQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgdmFsdWVzWydtbCddID0gWycnXQorICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgIHZhbHVlc1t2XS5hcHBlbmQobG9jYWxkYXRhLmdldFZhcih2LCBUcnVlKSkKKyAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCisgICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgdmFsdWVzW3ZdLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKHYsIFRydWUpKQorICAgICAgICB2YWx1ZXNbJ21sJ10uYXBwZW5kKGl0ZW0pCisgICAgcmV0dXJuIHZhbHVlcworCisjIElmIHRoZSB1c2VyIGhhc24ndCBzZXQgdXAgdGhlaXIgbmFtZS9lbWFpbCwgc2V0IHNvbWUgZGVmYXVsdHMKK2NoZWNrX2dpdF9jb25maWcoKSB7CisJaWYgISBnaXQgY29uZmlnIHVzZXIuZW1haWwgPiAvZGV2L251bGwgOyB0aGVuCisJCWdpdCBjb25maWcgLS1sb2NhbCB1c2VyLmVtYWlsICIke1BBVENIX0dJVF9VU0VSX0VNQUlMfSIKKwlmaQorCWlmICEgZ2l0IGNvbmZpZyB1c2VyLm5hbWUgPiAvZGV2L251bGwgOyB0aGVuCisJCWdpdCBjb25maWcgLS1sb2NhbCB1c2VyLm5hbWUgIiR7UEFUQ0hfR0lUX1VTRVJfTkFNRX0iCisJZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvYml0YmFrZS5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKaW5kZXggNDA3OTZhYS4uNTRhNTg3ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKQEAgLTE1LDcgKzE1LDcgQEAKICMgUGF0aCBwcmVmaXhlcwogZXhwb3J0IGJhc2VfcHJlZml4ID0gIiIKIGV4cG9ydCBwcmVmaXggPSAiL3VzciIKLWV4cG9ydCBleGVjX3ByZWZpeCA9ICIvdXNyIgorZXhwb3J0IGV4ZWNfcHJlZml4ID0gIiR7cHJlZml4fSIKIAogIyBCYXNlIHBhdGhzCiBleHBvcnQgYmFzZV9iaW5kaXIgPSAiJHtiYXNlX3ByZWZpeH0vYmluIgpAQCAtMTI5LDcgKzEyOSw3IEBACiBUQVJHRVRfTERfQVJDSCA9ICIke1RVTkVfTERBUkdTfSIKIFRBUkdFVF9BU19BUkNIID0gIiR7VFVORV9BU0FSR1N9IgogCi1TREtfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorU0RLTUFDSElORSA/Pz0gIng4Nl82NCIKIFNES19PUyA9ICIke0JVSUxEX09TfSIKIFNES19WRU5ET1IgPSAiLW9lc2RrIgogU0RLX1NZUyA9ICIke1NES19BUkNIfSR7U0RLX1ZFTkRPUn0ke0BbJy0nICsgZC5nZXRWYXIoJ1NES19PUycsIFRydWUpLCAnJ11bZC5nZXRWYXIoJ1NES19PUycsIFRydWUpID09ICgnJyBvciAnY3VzdG9tJyldfSIKQEAgLTI0Nyw3ICsyNDcsNyBAQAogREVTQ1JJUFRJT05fJHtQTn0tZG9jID89ICIke0RFU0NSSVBUSU9OfSAgXAogVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24uIgogCi1MSUNFTlNFID0gIklOVkFMSUQiCitMSUNFTlNFID8/PSAiSU5WQUxJRCIKIE1BSU5UQUlORVIgPSAiT0UtQ29yZSBEZXZlbG9wZXJzIDxvcGVuZW1iZWRkZWQtY29yZUBsaXN0cy5vcGVuZW1iZWRkZWQub3JnPiIKIEhPTUVQQUdFID0gIiIKIApAQCAtMjg0LDcgKzI4NCw4IEBACiAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAogICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vKiAke2Jhc2Vfc2JpbmRpcn0vKiBcCiAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS8qJHtTT0xJQlN9IFwKLSAgICAgICAgICAgICR7YmFzZV9wcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgJHtwcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgXAorICAgICAgICAgICAgJHtiYXNlX3ByZWZpeH0vbGliL3VkZXYgJHtwcmVmaXh9L2xpYi91ZGV2IFwKKyAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3VkZXYgJHtsaWJkaXJ9L3VkZXYgXAogICAgICAgICAgICAgJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJkaXJ9LyR7QlBOfS8qIFwKICAgICAgICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCiAgICAgICAgICAgICAke2RhdGFkaXJ9L2lkbCAke2RhdGFkaXJ9L29tZiAke2RhdGFkaXJ9L3NvdW5kcyBcCkBAIC00MDMsOCArNDA0LDE0IEBACiAjIEtlcm5lbCBpbmZvLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLU9MREVTVF9LRVJORUwgPSAiMi42LjMyIgorT0xERVNUX0tFUk5FTCA9ICIzLjIuMCIKIE9MREVTVF9LRVJORUxfYWFyY2g2NCA9ICIzLjE0IgorT0xERVNUX0tFUk5FTF9uaW9zMiA9ICIzLjE5IgorCisjIERlZmluZSB3aGVyZSB0aGUga2VybmVsIGhlYWRlcnMgYXJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0IGFzIHdlbGwgYXMgd2hlcmUKKyMgdGhleSBhcmUgc3RhZ2VkLgorS0VSTkVMX1NSQ19QQVRIID0gIi91c3Ivc3JjL2tlcm5lbCIKKwogU1RBR0lOR19LRVJORUxfRElSID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC8ke01BQ0hJTkV9L2tlcm5lbC1zb3VyY2UiCiBTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvJHtNQUNISU5FfS9rZXJuZWwtYnVpbGQtYXJ0aWZhY3RzIgogCkBAIC00NDQsMTAgKzQ1MSwxMCBAQAogIyBEaXNhYmxlIGNjYWNoZSBleHBsaWNpdGx5IGlmIENDQUNIRSBpcyBudWxsIHNpbmNlIGdjYyBtYXkgYmUgYSBzeW1saW5rCiAjIG9mIGNjYWNoZSBzb21lIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIEZlZG9yYSAxNykuCiBleHBvcnQgQ0NBQ0hFX0RJU0FCTEUgPz89ICIke0BbMCwxXVtkLmdldFZhcignQ0NBQ0hFJywgVHJ1ZSkgPT0gJyddfSIKLSMgQXNzaWduIENDQUNIRV9ESVIgYSBkZWZhdWx0IHZhbHVlIHRvIGZpeCBhIGJ1ZyBvZiBjY2FjaGUgMy4xLjcsCi0jIHNpbmNlIGl0IHdvdWxkIGFsd2F5cyBjcmVhdGUgQ0NBQ0hFX0RJUi8uY2NhY2hlIGV2ZW4gaWYKLSMgQ0NBQ0hFX0RJU0FCTEUgPSAxLgotZXhwb3J0IENDQUNIRV9ESVIgPz89ICIke0Bvcy5nZXRlbnYoJ0hPTUUnKX0iCisjIGNjYWNoZSA8IDMuMS4xMCB3aWxsIGNyZWF0ZSBDQ0FDSEVfRElSIG9uIHN0YXJ0dXAgZXZlbiBpZiBkaXNhYmxlZCwgYW5kCisjIGF1dG9nZW4gc2V0cyBIT01FPS9kZXYvbnVsbCBzbyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgYnVpbGRzIGNhbiBmYWlsLgorIyBFeHBsaWNpdGx5IGV4cG9ydCBDQ0FDSEVfRElSIHVudGlsIHdlIGNhbiBhc3N1bWUgY2NhY2hlID4zLjEuMTAgb24gdGhlIGhvc3QuCitleHBvcnQgQ0NBQ0hFX0RJUiA/Pz0gIiR7QG9zLmdldGVudignSE9NRScpfS8uY2NhY2hlIgogCiBUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSIKIApAQCAtNDY1LDYgKzQ3Miw3IEBACiBleHBvcnQgT0JKRFVNUCA9ICIke0hPU1RfUFJFRklYfW9iamR1bXAiCiBleHBvcnQgU1RSSU5HUyA9ICIke0hPU1RfUFJFRklYfXN0cmluZ3MiCiBleHBvcnQgTk0gPSAiJHtIT1NUX1BSRUZJWH1ubSIKK2V4cG9ydCBSRUFERUxGID0gIiR7SE9TVF9QUkVGSVh9cmVhZGVsZiIKIFBZVEhPTiA9ICIke0BzeXMuZXhlY3V0YWJsZX0iCiAKIGV4cG9ydCBCVUlMRF9DQyA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlMRF9DQ19BUkNIfSIKQEAgLTQ4Miw3ICs0OTAsNyBAQAogZXhwb3J0IE1BS0UgPSAibWFrZSIKIEVYVFJBX09FTUFLRSA9ICIiCiBFWFRSQV9PRUNPTkYgPSAiIgotZXhwb3J0IExDX0FMTCA9ICJDIgorZXhwb3J0IExDX0FMTCA9ICJlbl9VUy5VVEYtOCIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFBhdGNoIGhhbmRsaW5nLgpAQCAtNDk1LDEwICs1MDMsOSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGV4cG9ydCBCVUlMRF9DUFBGTEFHUyA9ICItaXN5c3RlbSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKLUJVSUxEU0RLX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUn0iCitCVUlMRFNES19DUFBGTEFHUyA9ICIiCiBleHBvcnQgQ1BQRkxBR1MgPSAiJHtUQVJHRVRfQ1BQRkxBR1N9IgogZXhwb3J0IFRBUkdFVF9DUFBGTEFHUyA9ICIiCi0jZXhwb3J0IFRBUkdFVF9DUFBGTEFHUyA9ICItaXN5c3RlbSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0iCiAKIGV4cG9ydCBCVUlMRF9DRkxBR1MgPSAiJHtCVUlMRF9DUFBGTEFHU30gJHtCVUlMRF9PUFRJTUlaQVRJT059IgogQlVJTERTREtfQ0ZMQUdTID0gIiR7QlVJTERTREtfQ1BQRkxBR1N9ICR7QlVJTERfT1BUSU1JWkFUSU9OfSIKQEAgLTUxNywxMiArNTI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAogICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1PMSIKIAotQlVJTERTREtfTERGTEFHUyA9ICItTCR7U1RBR0lOR19MSUJESVJ9IFwKLSAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9IFwKLSAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke2xpYmRpcn0gLVdsLC1PMSBcCi0gICAgICAgICAgICAgICAgICAgIC1MJHtTVEFHSU5HX0RJUl9IT1NUfSR7YmFzZV9saWJkaXJ9IFwKLSAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19ESVJfSE9TVH0ke2Jhc2VfbGliZGlyfSBcCi0gICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJHtiYXNlX2xpYmRpcn0gLVdsLC1PMSIKK0JVSUxEU0RLX0xERkxBR1MgPSAiLVdsLC1PMSIKIAogTElOS0VSX0hBU0hfU1RZTEUgPz89ICJnbnUiCiAjIG1pcHMgZG9lcyBub3Qgc3VwcG9ydCBHTlUgaGFzaCBzdHlsZSB0aGVyZWZvcmUgd2Ugb3ZlcnJpZGUKQEAgLTUzMiw2ICs1MzQsMTEgQEAKIExJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsID0gInN5c3YiCiBMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjRuMzIgPSAic3lzdiIKIExJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsbjMyID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzaXNhMzJyNiA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwc2lzYTMycjZlbCA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwc2lzYTY0cjYgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHNpc2E2NHI2ZWwgPSAic3lzdiIKKwogVEFSR0VUX0xJTktfSEFTSF9TVFlMRSA/PSAiJHtAWyctV2wsLS1oYXNoLXN0eWxlPWdudScsJyddW2QuZ2V0VmFyKCdMSU5LRVJfSEFTSF9TVFlMRScsIFRydWUpICE9ICdnbnUnXX0iCiAKIGV4cG9ydCBMREZMQUdTID0gIiR7VEFSR0VUX0xERkxBR1N9IgpAQCAtNTQ5LDExICs1NTYsMTEgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBPcHRpbWl6YXRpb24gZmxhZ3MuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLURFQlVHX0ZMQUdTID89ICItZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgXAotICAgICAgICAgICAgICAgIC1mZGVidWctcHJlZml4LW1hcD0ke1dPUktESVJ9PS91c3Ivc3JjL2RlYnVnLyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0gXAotICAgICAgICAgICAgICAgIC1mZGVidWctcHJlZml4LW1hcD0ke1NUQUdJTkdfRElSX05BVElWRX09IFwKLSAgICAgICAgICAgICAgICAtZmRlYnVnLXByZWZpeC1tYXA9JHtTVEFHSU5HX0RJUl9IT1NUfT0gXAorREVCVUdfUFJFRklYX01BUCA/PSAiLWZkZWJ1Zy1wcmVmaXgtbWFwPSR7V09SS0RJUn09L3Vzci9zcmMvZGVidWcvJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSBcCisgICAgICAgICAgICAgICAgICAgICAtZmRlYnVnLXByZWZpeC1tYXA9JHtTVEFHSU5HX0RJUl9OQVRJVkV9PSBcCisgICAgICAgICAgICAgICAgICAgICAtZmRlYnVnLXByZWZpeC1tYXA9JHtTVEFHSU5HX0RJUl9IT1NUfT0gXAogIgorREVCVUdfRkxBR1MgPz0gIi1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAke0RFQlVHX1BSRUZJWF9NQVB9IgogCiAjIERpc2FibGVkIHVudGlsIHRoZSBvcHRpb24gd29ya3MgcHJvcGVybHkgLWZlbGltaW5hdGUtZHdhcmYyLWR1cHMKIEZVTExfT1BUSU1JWkFUSU9OID0gIi1PMiAtcGlwZSAke0RFQlVHX0ZMQUdTfSIKQEAgLTU3MiwxMiArNTc5LDEzIEBACiAjIERvd25sb2FkIGxvY2F0aW9ucyBhbmQgdXRpbGl0aWVzLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLUFQQUNIRV9NSVJST1IgPSAiaHR0cDovL3d3dy5ldS5hcGFjaGUub3JnL2Rpc3QvIgorQVBBQ0hFX01JUlJPUiA9ICJodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QiCiBERUJJQU5fTUlSUk9SID0gImZ0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIgogR0VOVE9PX01JUlJPUiA9ICJodHRwOi8vZGlzdGZpbGVzLmdlbnRvby5vcmcvZGlzdGZpbGVzIgogR05PTUVfR0lUID0gImdpdDovL2dpdC5nbm9tZS5vcmciCiBHTk9NRV9NSVJST1IgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMiCiBHTlVfTUlSUk9SID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUiCitHTlVQR19NSVJST1IgPSAiaHR0cHM6Ly93d3cuZ251cGcub3JnL2Z0cC9nY3J5cHQiCiBHUEVfTUlSUk9SID0gImh0dHA6Ly9ncGUubGludXh0b2dvLm9yZy9kb3dubG9hZC9zb3VyY2UiCiBLRVJORUxPUkdfTUlSUk9SID0gImh0dHA6Ly9rZXJuZWwub3JnL3B1YiIKIFNPVVJDRUZPUkdFX01JUlJPUiA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldCIKQEAgLTU5NSw2ICs2MDMsNyBAQAogICAgIEdOT01FX0dJVCBcCiAgICAgR05PTUVfTUlSUk9SIFwKICAgICBHTlVfTUlSUk9SIFwKKyAgICBHTlVQR19NSVJST1IgXAogICAgIEdQRV9NSVJST1IgXAogICAgIEtFUk5FTE9SR19NSVJST1IgXAogICAgIFNBVkFOTkFIX0dOVV9NSVJST1IgXApAQCAtNzEzLDYgKzcyMiw3IEBACiBETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCiBTU1RBVEVfRElSID89ICIke1RPUERJUn0vc3N0YXRlLWNhY2hlIgogSU1BR0VfRlNUWVBFUyA/PSAidGFyLmd6IgorSU1BR0VfRlNUWVBFU19ERUJVR0ZTID89ICIke0lNQUdFX0ZTVFlQRVN9IgogCiBJTklUUkFNRlNfRlNUWVBFUyA/PSAiY3Bpby5neiIKICMgVGhlIG1heGltdW0gc2l6ZSBpbiBLYnl0ZXMgZm9yIHRoZSBnZW5lcmF0ZWQgaW5pdHJhbWZzIGltYWdlIHNpemUuCkBAIC03OTgsNyArODA4LDcgQEAKIAogIyBTZXR1cCBvdXIgZGVmYXVsdCBoYXNoIHBvbGljeQogQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gIk9FQmFzaWNIYXNoIgotQkJfSEFTSEJBU0VfV0hJVEVMSVNUID89ICJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFwKK0JCX0hBU0hCQVNFX1dISVRFTElTVCA/PSAiVE1QRElSIEZJTEUgUEFUSCBQV0QgQkJfVEFTS0hBU0ggQkJQQVRIIEJCU0VSVkVSIERMX0RJUiBcCiAgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAogICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKICAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXApAQCAtODA5LDEyICs4MTksMTQgQEAKICAgICBTU0hfQVVUSF9TT0NLIFBTRVVET19CVUlMRCBCQl9FTlZfRVhUUkFXSElURSBESVNBQkxFX1NBTklUWV9DSEVDS1MgXAogICAgIFBBUkFMTEVMX01BS0UgQkJfTlVNQkVSX1RIUkVBRFMgQkJfT1JJR0VOViBCQl9JTlZBTElEQ09ORiBCQklOQ0xVREVEIFwKICAgICBHSVRfUFJPWFlfQ09NTUFORCBBTExfUFJPWFkgYWxsX3Byb3h5IE5PX1BST1hZIG5vX3Byb3h5IEZUUF9QUk9YWSBmdHBfcHJveHkgXAotICAgIEhUVFBfUFJPWFkgaHR0cF9wcm94eSBIVFRQU19QUk9YWSBodHRwc19wcm94eSBTT0NLUzVfVVNFUiBTT0NLUzVfUEFTU1dEIgorICAgIEhUVFBfUFJPWFkgaHR0cF9wcm94eSBIVFRQU19QUk9YWSBodHRwc19wcm94eSBTT0NLUzVfVVNFUiBTT0NLUzVfUEFTU1dEIFwKKyAgICBCQl9TRVRTQ0VORV9FTkZPUkNFIgogQkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1MgPz0gImRvYyBkZXBzIGRlcGVuZHMgXAogICAgIGxvY2tmaWxlcyB0eXBlIHZhcmRlcHNleGNsdWRlIHZhcmRlcHMgdmFyZGVwdmFsdWUgdmFyZGVwdmFsdWVleGNsdWRlIFwKICAgICBmaWxlLWNoZWNrc3VtcyBweXRob24gZnVuYyB0YXNrIGV4cG9ydCB1bmV4cG9ydCBub2V4ZWMgbm9zdGFtcCBkaXJzIGNsZWFuZGlycyBcCiAgICAgc3N0YXRlLWxvY2tmaWxlLXNoYXJlZCBwcmVmdW5jcyBwb3N0ZnVuY3MgZXhwb3J0X2Z1bmMgZGVwdGFzayByZGVwdGFzayBcCi0gICAgcmVjcmRlcHRhc2sgbm9kZXBycmVjcyBzdGFtcC1leHRyYS1pbmZvIHNzdGF0ZS1vdXRwdXRkaXJzIGZpbGVuYW1lIGxpbmVubyIKKyAgICByZWNyZGVwdGFzayBub2RlcHJyZWNzIHN0YW1wLWV4dHJhLWluZm8gc3N0YXRlLW91dHB1dGRpcnMgZmlsZW5hbWUgbGluZW5vIFwKKyAgICBwcm9ncmVzcyIKIAogTUxQUkVGSVggPz89ICIiCiBNVUxUSUxJQl9WQVJJQU5UUyA/Pz0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYwppbmRleCBmYWM0ZGViLi5mN2VkOTQzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCkBAIC0yMyw3ICsyMyw3IEBACiBJTUFHRV9GRUFUVVJFUyA/PSAiIgogCiBXSElURUxJU1RfR1BMLTMuMCA/PSAiIgotTEdQTHYyX1dISVRFTElTVF9HUEwtMy4wID89ICJsaWJpZG4iCitMR1BMdjJfV0hJVEVMSVNUX0dQTC0zLjAgPz0gIiIKIAogQ09NTUVSQ0lBTF9BVURJT19QTFVHSU5TID89ICIiCiAjIENPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA/PSAiZ3N0LXBsdWdpbnMtdWdseS1tYWQgZ3N0LXBsdWdpbnMtdWdseS1tcGVnYXVkaW9wYXJzZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jCmluZGV4IGEwNGVhNzEuLmNjOGM1MzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwpAQCAtMiwxMSArMiw2IEBACiAjIERlZmF1bHQgcHJlZmVycmVkIHZlcnNpb25zCiAjCiAKLSMgRm9yY2UgdGhlIHB5dGhvbiB2ZXJzaW9ucyBpbiBvbmUgcGxhY2UKLVBZVEhPTl9CQVNFVkVSU0lPTiA/PSAiMi43IgotUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uID89ICIyLjcuMTEiCi1QUkVGRVJSRURfVkVSU0lPTl9weXRob24tbmF0aXZlID89ICIyLjcuMTEiCi0KICMgRm9yY2UgdGhlIG9sZGVyIHZlcnNpb24gb2YgbGliZXJhdGlvbi1mb250cyB1bnRpbCB3ZSBmaXggdGhlIGZvbnRmb3JnZSBpc3N1ZQogUFJFRkVSUkVEX1ZFUlNJT05fbGliZXJhdGlvbi1mb250cyA/PSAiMS4wNCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCmluZGV4IGM4ZjkzOTUuLjEwZWZiMDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMKQEAgLTEzLDcgKzEzLDYgQEAKIERJU1RST19QTl9BTElBU19wbi1hbHNhLXV0aWxzLWFsc2Fjb25mID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tYWxzYS11dGlscy1zY3JpcHRzID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tYXRrID0gIkZlZG9yYT1hdGsgT3BlblN1U0U9YXRrIgotRElTVFJPX1BOX0FMSUFTX3BuLWF1Z2VhcyA9ICJVYnVudHU9bGliYXVnZWFzMCBEZWJpYW49bGliYXVnZWFzMCIKIERJU1RST19QTl9BTElBU19wbi1hdmFoaS11aSA9ICJVYnVudHU9YXZhaGktZGlzY292ZXIgRGViaWFuPWF2YWhpLWRpc2NvdmVyIgogRElTVFJPX1BOX0FMSUFTX3BuLWJhYmVsdHJhY2UgPSAiT1NQRFQiCiBESVNUUk9fUE5fQUxJQVNfcG4tYmR3Z2MgPSAiT1NQRFQiCkBAIC00Niw3ICs0NSw2IEBACiBESVNUUk9fUE5fQUxJQVNfcG4tY29uc29sZS10b29scyA9ICJEZWJpYW49Y29uc29sZS10b29scyBVYnVudHU9Y29uc29sZS10b29scyIKIERJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWJhc2UgPSAiT0UtQ29yZSIKIERJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWNsdXR0ZXIgPSAiT0UtQ29yZSIKLURJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWRpcmVjdGZiID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUgPSAiT0UtQ29yZSIKIERJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWtlcm5lbC1kZXYgPSAiT0UtQ29yZSIKIERJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYiA9ICJPRS1Db3JlIgpAQCAtNzUsNyArNzMsNiBAQAogRElTVFJPX1BOX0FMSUFTX3BuLWRidXMtdGVzdCA9ICJGZWRvcmE9ZGJ1cyBVYnVudHU9ZGJ1cyIKIERJU1RST19QTl9BTElBU19wbi1kYnVzLXdhaXQgPSAiT3BlbmVkSGFuZCIKIERJU1RST19QTl9BTElBU19wbi1kZXBtb2R3cmFwcGVyLWNyb3NzID0gIk9FLUNvcmUiCi1ESVNUUk9fUE5fQUxJQVNfcG4tZGlyZWN0ZmItZXhhbXBsZXMgPSAiRGViaWFuPWRpcmVjdGZiIEZlZG9yYT1kaXJlY3RmYiIKIERJU1RST19QTl9BTElBU19wbi1kaXN0Y2MgPSAiRGViaWFuPWRpc3RjYyBGZWRvcmE9ZGlzdGNjIgogRElTVFJPX1BOX0FMSUFTX3BuLWRpc3RjYy1jb25maWcgPSAiT3BlbmVkSGFuZCIKIERJU1RST19QTl9BTElBU19wbi1kbXhwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1kbXhwcm90byBVYnVudHU9eDExcHJvdG8tZG14IERlYmlhbj14MTFwcm90by1kbXgiCkBAIC0xMzQsNyArMTMxLDcgQEAKIERJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiVWJ1bnR1PWdzdHJlYW1lcjAuMTAtcnRzcCBGZWRvcmE9Z3N0cmVhbWVyLXJ0c3AiCiBESVNUUk9fUE5fQUxJQVNfcG4tZ3RrKyA9ICJNZWVnbz1ndGsyIEZlZG9yYT1ndGsyIE9wZW5TdVNFPWd0azIgVWJ1bnR1PWd0aysyLjAgTWFuZHJpdmE9Z3RrKzIuMCBEZWJpYW49Z3RrKzIuMCIKIERJU1RST19QTl9BTElBU19wbi1ndGsrMyA9ICJVYnVudHU9Z3RrKzMuMCBEZWJpYW49Z3RrKzMuMCBGZWRvcmE9Z3RrMyIKLURJU1RST19QTl9BTElBU19wbi1ndGstZG9jLXN0dWIgPSAiRmVkb3JhPWd0ay1kb2MgVWJ1bnR1PWd0ay1kb2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLWRvYyA9ICJGZWRvcmE9Z3RrLWRvYyBVYnVudHU9Z3RrLWRvYyIKIERJU1RST19QTl9BTElBU19wbi1ndGstZW5naW5lcyA9ICJGZWRvcmE9Z3RrMi1lbmdpbmVzIE9wZW5TdVNFPWd0azItZW5naW5lcyBVYnVudHU9Z3RrMi1lbmdpbmVzIE1hbmRyaXZhPWd0ay1lbmdpbmVzMiBEZWJpYW49Z3RrMi1lbmdpbmVzIgogRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1zYXRvLWVuZ2luZSA9ICJPcGVuZWRIYW5kIgogRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1pY29uLXV0aWxzLW5hdGl2ZSA9ICJPU1BEVCIKQEAgLTIxNiw3ICsyMTMsNiBAQAogRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhpID0gIlVidW50dT1saWJ4aSBGZWRvcmE9bGliWGkiCiBESVNUUk9fUE5fQUxJQVNfcG4tbGlieGtiY29tbW9uID0gIkZlZG9yYT1saWJ4a2Jjb21tb24gRGViaWFuPWxpYnhrYmNvbW1vbiIKIERJU1RST19QTl9BTElBU19wbi1saWJ4c2NybnNhdmVyID0gIkZlZG9yYT1saWJYU2NyblNhdmVyIFVidW50dT1saWJ4c3MxIE1hbmRyaXZhPWxpYnhzY3Juc2F2ZXIiCi1ESVNUUk9fUE5fQUxJQVNfcG4tbGlieHNldHRpbmdzLWNsaWVudCA9ICJEZWJpYW49bGlieHNldHRpbmdzLWNsaWVudDAgVWJ1bnR1PWxpYnhzZXR0aW5ncy1jbGllbnQwIE1hbmRyaXZhPWxpYlhzZXR0aW5ncy1jbGllbnQwIgogRElTVFJPX1BOX0FMSUFTX3BuLWxpYnh4Zjg2bWlzYyA9ICJNYW5kcml2YT1saWJ4eGY4Nm1pc2MgRmVkb3JhPWxpYlh4Zjg2bWlzYyIKIERJU1RST19QTl9BTElBU19wbi1saW51eC1kdW1teSA9ICJJbnRlbCIKIERJU1RST19QTl9BTElBU19wbi1saW51eC1maXJtd2FyZSA9ICJGZWRvcmE9bGludXgtZmlybXdhcmUgVWJ1bnR1PWxpbnV4LWZpcm13YXJlIgpAQCAtMjgxLDggKzI3Nyw2IEBACiBESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1ub2dwZyA9ICJPU1BEVCB1cHN0cmVhbT1naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgogRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctdXRpbHMgPSAiT1NQRFQgdXBzdHJlYW09Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKIERJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZSA9ICJEZWJpYW49b3Byb2ZpbGUgRmVkb3JhPW9wcm9maWxlIgotRElTVFJPX1BOX0FMSUFTX3BuLW9wcm9maWxldWkgPSAiRmVkb3JhPW9wcm9maWxldWkgVWJ1bnR1PW9wcm9maWxlLWd1aSBEZWJpYW49b3Byb2ZpbGUtZ3VpIgotRElTVFJPX1BOX0FMSUFTX3BuLW9wcm9maWxldWktc2VydmVyID0gIkZlZG9yYT1vcHJvZmlsZXVpIFVidW50dT1vcHJvZmlsZS1ndWkgRGViaWFuPW9wcm9maWxlLWd1aSIKIERJU1RST19QTl9BTElBU19wbi1vcy1yZWxlYXNlID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWJhc2UgPSAiT0UtQ29yZSIKIERJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZSA9ICJPRS1Db3JlIgpAQCAtMjkwLDcgKzI4NCw2IEBACiBESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgPSAiT0UtQ29yZSIKIERJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsID0gIk9FLUNvcmUiCi1ESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgPSAiT0UtQ29yZSIKIERJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIk9FLUNvcmUiCkBAIC0zMTgsNyArMzExLDYgQEAKIERJU1RST19QTl9BTElBU19wbi1wZXJmID0gIk9TUERUIgogRElTVFJPX1BOX0FMSUFTX3BuLXBpZ2xpdCA9ICJPRS1Db3JlIgogRElTVFJPX1BOX0FMSUFTX3BuLXBrZ2NvbmZpZyA9ICJVYnVudHU9cGtnLWNvbmZpZyBGZWRvcmE9cGtnY29uZmlnIgotRElTVFJPX1BOX0FMSUFTX3BuLXBvaW50ZXJjYWwgPSAiT0UtQ29yZSIKIERJU1RST19QTl9BTElBU19wbi1wb2ludGVyY2FsLXhpbnB1dCA9ICJPRS1Db3JlIgogRElTVFJPX1BOX0FMSUFTX3BuLXBvbmctY2xvY2sgPSAiT3BlbmVkSGFuZCIKIERJU1RST19QTl9BTElBU19wbi1wb3J0bWFwID0gIkRlYmlhbj1ycGNiaW5kIEZlZG9yYT1ycGNiaW5kIgpAQCAtMzM4LDEyICszMzAsMTAgQEAKIERJU1RST19QTl9BTElBU19wbi1weXRob24tZGJ1cyA9ICJVYnVudHU9cHl0aG9uLWRidXMgRGViaWFuPXB5dGhvbi1kYnVzIE1hbmRyaXZhPXB5dGhvbi1kYnVzIgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIk9wZW5zdXNlPXB5dGhvbi1zZXR1cHRvb2xzIEZlZG9yYT1weXRob24tc2V0dXB0b29scyIKIERJU1RST19QTl9BTElBU19wbi1weXRob24tZ2l0ID0gIkRlYmlhbj1weXRob24tZ2l0IEZlZG9yYT1HaXRQeXRob24iCi1ESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWltYWdpbmcgPSAiTWFuZHJpdmE9cHl0aG9uLWltYWdpbmcgRGViaWFuPXB5dGhvbi1pbWFnaW5nIgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1tYWtvID0gIkZlZG9yYT1weXRob24tbWFrbyBPcGVuc3VzZT1weXRob24tTWFrbyIKIERJU1RST19QTl9BTElBU19wbi1weXRob24tcHljYWlybyA9ICJNZWVnbz1weWNhaXJvIEZlZG9yYT1weWNhaXJvIFVidW50dT1weWNhaXJvIERlYmlhbj1weWNhaXJvIgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWN1cmwgPSAiRGViaWFuPXB5dGhvbi1weWN1cmwgVWJ1bnR1PXB5dGhvbi1weWN1cmwiCiBESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Z29iamVjdCA9ICJNZWVnbz1weWdvYmplY3QyIEZlZG9yYT1weWdvYmplY3QyIFVidW50dT1weWdvYmplY3QgRGViaWFuPXB5Z29iamVjdCIKLURJU1RST19QTl9BTElBU19wbi1weXRob24tcHlyZXggPSAiTWFuZHJpdmE9cHl0aG9uLXB5cmV4IFVidW50dT1weXRob24tcHlyZXgiCiBESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNjb25zID0gIkZlZG9yYT1zY29ucyBPcGVuU3VTRT1zY29ucyBVYnVudHU9c2NvbnMgTWFuZHJpdmE9c2NvbnMgRGViaWFuPXNjb25zIgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zZXR1cHRvb2xzID0gIk1hbmRyaXZhPXB5dGhvbi1zZXR1cCBPcGVuU3VTRT1weXRob24tc2V0dXAtZ2l0IgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zbWFydHBtID0gIkRlYmlhbj1zbWFydCBPcGVuU3VTRT1zbWFydCIKQEAgLTM4OCw3ICszNzgsNiBAQAogRElTVFJPX1BOX0FMSUFTX3BuLXRpbnktaW5pdCA9ICJPU1BEVCIKIERJU1RST19QTl9BTElBU19wbi10cmFjZS1jbWQgPSAiTWFuZHJpdmE9dHJhY2UtY21kIFVidW50dT10cmFjZS1jbWQiCiBESVNUUk9fUE5fQUxJQVNfcG4tdHJlbW9yID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93d3cueGlwaC5vcmcvdm9yYmlzLyIKLURJU1RST19QTl9BTElBU19wbi10c2xpYiA9ICJEZWJpYW49dHNsaWIgVWJ1bnR1PXRzbGliIgogRElTVFJPX1BOX0FMSUFTX3BuLXR0Zi1iaXRzdHJlYW0tdmVyYSA9ICJEZWJpYW49dHRmLWJpdHN0cmVhbS12ZXJhIFVidW50dT10dGYtYml0c3RyZWFtLXZlcmEiCiBESVNUUk9fUE5fQUxJQVNfcG4tdHpjb2RlID0gIk9TUERUIgogRElTVFJPX1BOX0FMSUFTX3BuLXUtYm9vdC1mdy11dGlscyA9ICJVYnVudHU9dS1ib290LXRvb2xzIERlYmlhbj11LWJvb3QtdG9vbHMiCkBAIC00NTcsNyArNDQ2LDYgQEAKIERJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtbGl0ZSA9ICJGZWRvcmE9eG9yZy14MTEtc2VydmVyIFVidW50dT14c2VydmVyLXhvcmciCiBESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14b3JnID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKIERJU1RST19QTl9BTElBU19wbi14c2V0ID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMgVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIERlYmlhbj14MTEteHNlcnZlci11dGlscyBPcGVuc3VzZT14b3JnLXgxMSIKLURJU1RST19QTl9BTElBU19wbi14dHNjYWwgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rvd25sb2FkL3NvdXJjZS8iCiBESVNUUk9fUE5fQUxJQVNfcG4teHVzZXItYWNjb3VudCA9ICJPRS1Db3JlIgogRElTVFJPX1BOX0FMSUFTX3BuLXh2aWRlby10ZXN0cyA9ICJPcGVuZWRIYW5kIgogRElTVFJPX1BOX0FMSUFTX3BuLXh2aW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmMxMTU3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIE5PVEU6IFRISVMgRklMRSBJUyBERVBSRUNBVEVELiBQbGVhc2UgYWRkIG5ldyBlbnRyaWVzIHRvIHRoZSByZWNpcGVzIHRoZW1zZWx2ZXMuCi0jCi0jIHBhY2thZ2VfcmVnZXguaW5jIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgdGhhdCB0cmFja3MKLSMgdXBzdHJlYW0gcHJvamVjdCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiByZWNpcGUuIFRoaXMgbGlzdCBpcyBuZWVkZWQKLSMgZm9yIHJlY2lwZXMgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhbiBub3QgYmUgYXV0b21hZ2ljYWxseSBkaXNjb3ZlcmVkLgotIyBBcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nLCB0aGlzIGZpbGUgd2lsbCBzbG93bHkgYmUgcmVkdWNlZC4KLSMiCi0jIFRoaXMgZGF0YSBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdlIHJlcG9ydGluZyBzeXN0ZW0gKHBhY2thZ2VzLnlvY3RvcHJvamVjdC5vcmcpCi0jIgotIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKLSMiCi0jICAgICAgIFVQU1RSRUFNX0NIRUNLX1VSSV9wbi08cmVjaXBlIG5hbWU+ID0gInJlY2lwZV91cmwiCi0jCSAtIFRoaXMgaXMgdGhlIHVybCB1c2VkIGJ5IHRoZSBwYWNrYWdlIGNoZWNraW5nIHN5c3RlbSB0bwotIwkgICBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlCi0jICAgICAgIFVQU1RSRUFNX0NIRUNLX1JFR0VYX3BuLTxyZWNpcGUgbmFtZT4gPSAicGFja2FnZV9yZWdleCIKLSMJIC0gVGhpcyBpcyB0aGUgcmVnZXggdGhlIHBhY2thZ2UgY2hlY2tpbmcgc3lzdGVtIHVzZXMgdG8KLSMJICAgcGFyc2UgdGhlIHBhZ2UgZm91bmQgYXQgVVBTVFJFQU1fQ0hFQ0tfVVJJX3BuLTxyZWNpcGUgbmFtZT4KLSMJVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVhfcG4tPHJlY2lwZSBuYW1lPiA9ICJnaXRfdGFnX3JlZ2V4IgotIwkgLSBXaGVuIHNvdXJjZSBjb2RlIGlzIGZldGNoZWQgZnJvbSBnaXQsIGdpdCB0YWdzIGFyZSB1c2VkIHRvCi0jCSAgIGRldGVybWluZSB0aGUgdXBzdHJlYW0gcmVsZWFzZSB2ZXJzaW9uLiBUaGlzIHJlZ2V4IGNhbiBiZSB1c2VkCi0jCSAgIHRvIGZpbHRlciBvbmx5IHJlbGV2YW50IHRhZ3MuCi0jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCmluZGV4IGZmNWYzNGUuLmVjYTgzNWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCkBAIC05LDggKzksMTEgQEAKICMgLU8wIHdoaWNoIHRoZW4gcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcuCiBsY2xfbWF5YmVfZm9ydGlmeSA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdERUJVR19CVUlMRCcsJzEnLCcnLCctRF9GT1JUSUZZX1NPVVJDRT0yJyxkKX0iCiAKLVNFQ1VSSVRZX0NGTEFHUyA/PSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIC1waWUgLWZwaWUgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCi1TRUNVUklUWV9OT19QSUVfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCisjIEVycm9yIG9uIHVzZSBvZiBmb3JtYXQgc3RyaW5ncyB0aGF0IHJlcHJlc2VudCBwb3NzaWJsZSBzZWN1cml0eSBwcm9ibGVtcworU0VDVVJJVFlfU1RSSU5HRk9STUFUID89ICItV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSAtV2Vycm9yPWZvcm1hdC1zZWN1cml0eSIKKworU0VDVVJJVFlfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgLXBpZSAtZnBpZSAke2xjbF9tYXliZV9mb3J0aWZ5fSAke1NFQ1VSSVRZX1NUUklOR0ZPUk1BVH0iCitTRUNVUklUWV9OT19QSUVfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgJHtsY2xfbWF5YmVfZm9ydGlmeX0gJHtTRUNVUklUWV9TVFJJTkdGT1JNQVR9IgogCiBTRUNVUklUWV9MREZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgLVdsLC16LHJlbHJvLC16LG5vdyIKIFNFQ1VSSVRZX1hfTERGTEFHUyA/PSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIC1XbCwteixyZWxybyIKQEAgLTI2LDcgKzI5LDYgQEAKIFNFQ1VSSVRZX0NGTEFHU19wbi1sdHRuZy10b29sc19hcm0gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1hc3BlbGwgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1iZWVjcnlwdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWJsa3RyYWNlID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tY29yZXV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tY3VwcyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLWRiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCkBAIC0zNywxMCArMzksOSBAQAogU0VDVVJJVFlfQ0ZMQUdTX3BuLWVuY2hhbnQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1leHBlY3QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1mbGFjID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tZmxleCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYy1ydW50aW1lID0gIiIKLVNFQ1VSSVRZX0NGTEFHU19wbi1nY2Mtc2FuaXRpemVycyA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjLXNhbml0aXplcnMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1nZGIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1nbXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1nbnV0bHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKQEAgLTUwLDggKzUxLDYgQEAKIFNFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS14ODYtbmF0aXZlID0gIiIKIFNFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS1pNTg2LW5hdGl2ZSA9ICIiCiBTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkteDg2LTY0LW5hdGl2ZSA9ICIiCi1TRUNVUklUWV9DRkxBR1NfcG4tZ3N0LXBsdWdpbnMtYmFkID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tZ3N0LXBsdWdpbnMtZ2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4taGFyZmJ1enogPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKQEAgLTU5LDI4ICs1OCwzMCBAQAogU0VDVVJJVFlfQ0ZMQUdTX3BuLWlwdGFibGVzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tbGliYWlvID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tbGliY2FwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tbGliZ2NjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJnY2MgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1saWJpZDN0YWcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJuZXd0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlibmV3dC1weXRob24gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1saWJnbHUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1saWJwY2FwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tbGlicGNyZSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnByb3h5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tbHR0bmctdXN0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tbWVzYSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLW1lc2EtZ2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1vcGVuc3NsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tb3BlbnNwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tcHBwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLWltYWdpbmcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tcHljdXJsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLXNtYXJ0cG0gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tbnVtcHkgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24zLW51bXB5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMy1weWNhaXJvID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogIyBSZXZlcnQgUlBNIHRvIHVzaW5nIGludGVybmFsbHkgc3VwcG9ydGVkIHZhbHVlcwogU0VDVVJJVFlfQ0ZMQUdTX3BuLXJwbSA9ICIke2xjbF9tYXliZV9mb3J0aWZ5fSAtZnN0YWNrLXByb3RlY3RvciIKIFNFQ1VSSVRZX0NGTEFHU19wbi1zeXNsaW51eCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXNsYW5nID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tc291cmNlLWhpZ2hsaWdodCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLXRjbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLXRpZmYgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi11Y2xpYmMgPSAiIgpAQCAtODgsMTggKzg5LDIyIEBACiBTRUNVUklUWV9DRkxBR1NfcG4tdmFsZ3JpbmQgPSAiIgogU0VDVVJJVFlfQ0ZMQUdTX3BuLXpsaWIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIAotIyBUaGVzZSAyIGhhdmUgdGV4dCByZWxjbyBlcnJvcnMgd2l0aCB0aGUgcGllIG9wdGlvbnMgZW5hYmxlZAotU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0cCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLXB1bHNlYXVkaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKyMgUmVjaXBlcyB3aGljaCBmYWlsIHRvIGNvbXBpbGUgd2hlbiBlbGV2YXRpbmcgLVdmb3JtYXQtc2VjdXJpdHkgdG8gYW4gZXJyb3IKK1NFQ1VSSVRZX1NUUklOR0ZPUk1BVF9wbi1idXN5Ym94ID0gIiIKK1NFQ1VSSVRZX1NUUklOR0ZPUk1BVF9wbi1jb25zb2xlLXRvb2xzID0gIiIKK1NFQ1VSSVRZX1NUUklOR0ZPUk1BVF9wbi1jbWFrZSA9ICIiCitTRUNVUklUWV9TVFJJTkdGT1JNQVRfcG4tZXhwZWN0ID0gIiIKK1NFQ1VSSVRZX1NUUklOR0ZPUk1BVF9wbi1nY2MgPSAiIgorU0VDVVJJVFlfU1RSSU5HRk9STUFUX3BuLWdldHRleHQgPSAiIgorU0VDVVJJVFlfU1RSSU5HRk9STUFUX3BuLWtleGVjLXRvb2xzID0gIiIKK1NFQ1VSSVRZX1NUUklOR0ZPUk1BVF9wbi1vaC1wdXp6bGVzID0gIiIKIAogVEFSR0VUX0NGTEFHU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke1NFQ1VSSVRZX0NGTEFHU30iCiBUQVJHRVRfTERGTEFHU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke1NFQ1VSSVRZX0xERkxBR1N9IgogCiBTRUNVUklUWV9MREZMQUdTX3JlbW92ZV9wbi1nY2MtcnVudGltZSA9ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciCi1TRUNVUklUWV9MREZMQUdTX3JlbW92ZV9wbi1nY2Mtc2FuaXRpemVycyA9ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciCiBTRUNVUklUWV9MREZMQUdTX3JlbW92ZV9wbi1nbGliYyA9ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciCiBTRUNVUklUWV9MREZMQUdTX3JlbW92ZV9wbi1nbGliYy1pbml0aWFsID0gIi1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyIKLVNFQ1VSSVRZX0xERkxBR1NfcmVtb3ZlX3BuLWxpYmdjYyA9ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciCiBTRUNVUklUWV9MREZMQUdTX3JlbW92ZV9wbi11Y2xpYmMgPSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIgogU0VDVVJJVFlfTERGTEFHU19yZW1vdmVfcG4tdWNsaWJjLWluaXRpYWwgPSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIgogU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy11Y2xpYmMuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGMzY2RiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jCi0jIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uCi0jCi0KLUxJQkNFWFRFTlNJT04gPSAiLXVjbGliYyIKLQotIyBBZGQgdWNsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzLgotTElCQ09WRVJSSURFID0gIjpsaWJjLXVjbGliYyIKLU9WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgotCi1QUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjID89ICJ1Y2xpYmMiCi1QUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAibGliaWNvbnYiCi1QUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJnZXR0ZXh0IgotUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKLVBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgotCi1VU0VfTkxTID89ICJubyIKLQotQ1hYRkxBR1MgKz0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKLQotSU1BR0VfTElOR1VBUyA9ICIiCi0KLUxJQkNfREVQRU5ERU5DSUVTID0gIlwKLSAgICB1Y2xpYmMgXAotICAgIHVjbGliYy1kYmcgXAotICAgIHVjbGliYy1kZXYgXAotICAgIHVjbGliYy10aHJlYWQtZGIgXAotICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKaW5kZXggYzQxMjQyMC4uY2EzYzVlYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKQEAgLTksMTAgKzksMTAgQEAKIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMgPSAiZ2NjLXJ1bnRpbWUiCiBQUkVGRVJSRURfUFJPVklERVJfZ2RiID0gImdkYiIKIAotUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrID89ICJiaW51dGlscy1jcm9zc3Nkay0ke1NES19BUkNIfSIKLVBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MtaW5pdGlhbCA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIKLVBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MgPSAiZ2NjLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IgotUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWcrKyA9ICJnY2MtY3Jvc3NzZGstJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgPz0gImJpbnV0aWxzLWNyb3Nzc2RrLSR7U0RLX1NZU30iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9Z2NjLWluaXRpYWwgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfU1lTfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MgPSAiZ2NjLWNyb3Nzc2RrLSR7U0RLX1NZU30iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9ZysrID0gImdjYy1jcm9zc3Nkay0ke1NES19TWVN9IgogUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWNvbXBpbGVybGlicyA9ICJuYXRpdmVzZGstZ2NjLXJ1bnRpbWUiCiAKICMgRGVmYXVsdCBsaWJjIGNvbmZpZwpAQCAtMjIsMTkgKzIyLDE5IEBACiBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstJHtTREtfUFJFRklYfWxpYmMtaW5pdGlhbCA/PSAibmF0aXZlc2RrLWdsaWJjLWluaXRpYWwiCiBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9nZXR0ZXh0ID8/PSAiZ2V0dGV4dCIKIAotR0NDVkVSU0lPTiA/PSAiNS4zJSIKK0dDQ1ZFUlNJT04gPz0gIjYuMiUiCiBTREtHQ0NWRVJTSU9OID89ICIke0dDQ1ZFUlNJT059IgotQklOVVZFUlNJT04gPz0gIjIuMjYlIgotR0RCVkVSU0lPTiA/PSAiNy4xMCUiCi1HTElCQ1ZFUlNJT04gPz0gIjIuMjMiCitCSU5VVkVSU0lPTiA/PSAiMi4yNyUiCitHREJWRVJTSU9OID89ICI3LjExJSIKK0dMSUJDVkVSU0lPTiA/PSAiMi4yNCIKIFVDTElCQ1ZFUlNJT04gPz0gIjEuMCUiCi1MSU5VWExJQkNWRVJTSU9OID89ICI0LjQiCitMSU5VWExJQkNWRVJTSU9OID89ICI0LjglIgogCiBQUkVGRVJSRURfVkVSU0lPTl9nY2MgPz0gIiR7R0NDVkVSU0lPTn0iCiBQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCiBQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKLVBSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay0ke1NES19BUkNIfSA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKLVBSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9ID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3Nzc2RrLSR7U0RLX1NZU30gPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19TWVN9ID89ICIke1NES0dDQ1ZFUlNJT059IgogUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCiBQUkVGRVJSRURfVkVSU0lPTl9nY2MtcnVudGltZSA/PSAiJHtHQ0NWRVJTSU9OfSIKIFBSRUZFUlJFRF9WRVJTSU9OX2djYy1zYW5pdGl6ZXJzID89ICIke0dDQ1ZFUlNJT059IgpAQCAtNjgsNyArNjgsNyBAQAogUFJFRkVSUkVEX1ZFUlNJT05fdWNsaWJjLWluaXRpYWwgICAgICAgICAgID89ICIke1VDTElCQ1ZFUlNJT059IgogIyBkb24ndCB1c2UgdmVyc2lvbiBlYXJsaWVyIHRoYW4gMS40IGZvciBnemlwLW5hdGl2ZSwgYXMgaXQncyBuZWNlc3NhcnkgZm9yCiAjIHNvbWUgcGFja2FnZXMgdXNpbmcgYW4gYXJjaGl2ZSBmb3JtYXQgaW5jb21wYXRpYmxlIHdpdGggZWFybGllciBnemlwCi1QUkVGRVJSRURfVkVSU0lPTl9nemlwLW5hdGl2ZSA/PSAiMS42IgorUFJFRkVSUkVEX1ZFUlNJT05fZ3ppcC1uYXRpdmUgPz0gIjEuOCIKIAogIyBTZXR1cCBzdWl0YWJsZSB0b29sY2hhaW4gZmxhZ3MKIHJlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMKaW5kZXggYTVmNjM3MS4uZDRiZGRkZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYwpAQCAtNDcsMyArNDcsMTAgQEAKIAogIyBlcnJvcjogJ1JUTERfTkVYVCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCiBFWENMVURFX0ZST01fV09STERfcG4tZ2NjLXNhbml0aXplcnNfbGliYy1tdXNsID0gIjEiCisKKyMgZ2NjIGZhaWxzIHRvIGJ1aWxkIHdoZW4gbGlidXdpbmQgaXMgc3RhZ2VkIGJlZm9yZSBidWlsZGluZyBnY2Mgc2luY2UKKyMgaXQgdGhlbiBmaW5kcyB0aGUgdW53aW5kLmggaGVhZGVyIGZyb20gbGlidW53aW5kIGFuZCBub3QgZnJvbSBsaWJnY2MKKyMgYW5kIG9uIGFybSBzcGVjaWFsbHkgdGhleSBhcmUgZGlmZmVyZW50IHNpbmNlIGxpYmdjYyBkZWZpbmVzIHNvbWUgZnVuY3Rpb25zCisjIGFzIG1hY3JvcyB3aGljaCBhcmUgZnVuY3Rpb25zIGluIGxpYnVud2luZCBhbmQgaXQgZmFpbHMgZHVyaW5nIGxpbmtpbmcKKyMgbGliYmFja3RyYWNlL2JhY2t0cmFjZS5jOjc2OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfVW53aW5kX0dldElQJworRVhDTFVERV9GUk9NX1dPUkxEX3BuLWxpYnVud2luZF9saWJjLW11c2xfYXJtID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3lvY3RvLXVuaW5hdGl2ZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3lvY3RvLXVuaW5hdGl2ZS5pbmMKaW5kZXggODVlNjEzYS4uOTc1ZWRlYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS95b2N0by11bmluYXRpdmUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUveW9jdG8tdW5pbmF0aXZlLmluYwpAQCAtNiw2ICs2LDYgQEAKICMgdG8gdGhlIGRpc3RybyBydW5uaW5nIG9uIHRoZSBidWlsZCBtYWNoaW5lLgogIwogCi1VTklOQVRJVkVfVVJMID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy91bmluYXRpdmUvMC45NS8iCi1VTklOQVRJVkVfQ0hFQ0tTVU1baTY4Nl0gPz0gIjVmMjdkN2UwZjRkZDJlZDgwYTdmZjZhMGQ4OGFmMTA3YjA4ZTAwNzY1YjMxZWQzYWExODBjYzVjZTE1YjA4MTEiCi1VTklOQVRJVkVfQ0hFQ0tTVU1beDg2XzY0XSA/PSAiMjZkNDZjNjFhZDg4Y2MyNDVlMzFjODg1NDk3MTdjMDA5MmE4MzhkMTExYjkzZWMxNjlkODhiMDhjYzAyNzU4MSIKK1VOSU5BVElWRV9VUkwgPz0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy91bmluYXRpdmUvMS40LyIKK1VOSU5BVElWRV9DSEVDS1NVTVtpNjg2XSA/PSAiYjRiYzYwNTExY2U0Nzk3MzY4MDgyNzNmZmEwNDNkZjRlZDJhMjI1NDA3ZGQ3Y2ExNTBhZTYyMjBkOWNlNzZkNSIKK1VOSU5BVElWRV9DSEVDS1NVTVt4ODZfNjRdID89ICIxMDFmZjhmMjU4MGMxOTM0ODhkYjllNzZmOTY0NmZiNmVkMzhiNjVmYjc2ZjQwM2FjYjBlMjE3OGNlNzEyN2NhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZgppbmRleCBkY2MzMjRjLi4wNjUyN2NiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZgpAQCAtMjgsNyArMjgsNyBAQAogZG9fa2VybmVsX2NoZWNrb3V0W2RvY10gPSAiQ2hlY2tzIG91dCBzb3VyY2UvbWV0YSBicmFuY2hlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCiBkb19rZXJuZWxfY29uZmlnY2hlY2tbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKIGRvX2tlcm5lbF9jb25maWdtZVtkb2NdID0gIkFzc2VtYmxlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgotZG9fa2VybmVsX2xpbmtfdm1saW51eFtkb2NdID0gIkNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGluIGFyY2gvJGFyY2gvYm9vdCBmb3Igdm1saW51eCBrZXJuZWwgaW1hZ2VzIgorZG9fa2VybmVsX2xpbmtfaW1hZ2VzW2RvY10gPSAiQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgaW4gYXJjaC8kYXJjaC9ib290IGZvciB2bWxpbnV4IGFuZCB2bWxpbnV6IGtlcm5lbCBpbWFnZXMiCiBkb19saXN0dGFza3NbZG9jXSA9ICJMaXN0cyBhbGwgZGVmaW5lZCB0YXNrcyBmb3IgYSB0YXJnZXQiCiBkb19tZW51Y29uZmlnW2RvY10gPSAiUnVucyAnbWFrZSBtZW51Y29uZmlnJyBmb3IgdGhlIGtlcm5lbCIKIGRvX3BhY2thZ2VbZG9jXSA9ICJBbmFseXplcyB0aGUgY29udGVudCBvZiB0aGUgaG9sZGluZyBhcmVhIGFuZCBzcGxpdHMgaXQgaW50byBzdWJzZXRzIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgZmlsZXMiCkBAIC0zNDksNyArMzQ5LDYgQEAKIFJDT05GTElDVFNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNvbmZsaWN0IHdpdGggYW5vdGhlciBwYWNrYWdlLiBOb3RlIHRoYXQgdGhlIHBhY2thZ2Ugd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIHRoZSBjb25mbGljdGluZyBwYWNrYWdlcyBhcmUgbm90IGZpcnN0IHJlbW92ZWQuIgogUkRFUEVORFNbZG9jXSA9ICJMaXN0cyBhIHBhY2thZ2UncyBydW50aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciBwYWNrYWdlcykgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgdGhlIHBhY2thZ2UgdG8gYmUgYnVpbHQuIFRoZXkgbXVzdCBiZSB0aGUgbmFtZXMgb2Ygb3RoZXIgcGFja2FnZXMgYXMgbGlzdGVkIGluIHRoZSBQQUNLQUdFUyB2YXJpYWJsZSwgbm90IHJlY2lwZSBuYW1lcyAoUE4pLiIKIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGRpc3Ryb19mZWF0dXJlc19jaGVjayBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIHJlY2lwZS4iCi1STV9PTERfSU1BR0VbZG9jXSA9ICJSZWNsYWltcyBkaXNrIHNwYWNlIGJ5IHJlbW92aW5nIHByZXZpb3VzbHkgYnVpbHQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgaW1hZ2UgZnJvbSB0aGUgaW1hZ2VzIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZSBERVBMT1lfRElSIHZhcmlhYmxlLiIKIFJNX1dPUktfRVhDTFVERVtkb2NdID0gIldpdGggcm1fd29yayBlbmFibGVkLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGFja2FnZXMgd2hvc2Ugd29yayBkaXJlY3RvcmllcyBzaG91bGQgbm90IGJlIHJlbW92ZWQuIgogUk9PVEZTW2RvY10gPSAiSW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0uIgogUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJBZGRlZCBieSBjbGFzc2VzIHRvIHJ1biBwb3N0IHByb2Nlc3NpbmcgY29tbWFuZHMgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKQEAgLTQ1Miw4ICs0NTEsMTIgQEAKIFVCT09UX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IHVzZWQgZm9yIGJ1aWxkaW5nIFUtQm9vdC4iCiBVU0VfREVWRlNbZG9jXSA9ICJXaGVuIGJ1aWxkaW5nIGltYWdlcywgc3BlY2lmaWVzIHRvIHBvcHVsYXRlIG9yIG5vdCAvZGV2LiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICcxJyAobGVhdmUgZGlyZWN0b3J5IGVtcHR5LCBzdXJlbHkgYmVjYXVzZSBkZXZ0bXBmcyBkbyB0aGUgam9iKS4gU2V0IGl0IHRvICcwJyB0byB1c2UgbWFrZWRldnMgKG9yIGNvbnNpZGVyIHVzaW5nIGEgY3VzdG9tIGZpbGUgd2l0aCBJTUFHRV9ERVZJQ0VfVEFCTEVTKS4iCiBVU0VSX0NMQVNTRVNbZG9jXSA9ICJMaXN0IG9mIGFkZGl0aW9uYWwgY2xhc3NlcyB0byB1c2Ugd2hlbiBidWlsZGluZyBpbWFnZXMgdGhhdCBlbmFibGUgZXh0cmEgZmVhdHVyZXMuIgorVVNFUkFERF9FUlJPUl9EWU5BTUlDW2RvY10gPSAiSWYgc2V0IHRvICdlcnJvcicsIGZvcmNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwcm9kdWNlIGFuIGVycm9yIGlmIHRoZSB1c2VyIGlkZW50aWZpY2F0aW9uICh1aWQpIGFuZCBncm91cCBpZGVudGlmaWNhdGlvbiAoZ2lkKSB2YWx1ZXMgYXJlIG5vdCBkZWZpbmVkIGluIGFueSBvZiB0aGUgZmlsZXMgbGlzdGVkIGluIFVTRVJBRERfVUlEX1RBQkxFUyBhbmQgVVNFUkFERF9HSURfVEFCTEVTLiBJZiBzZXQgdG8gJ3dhcm4nLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgaW5zdGVhZC4iCitVU0VSQUREX0dJRF9UQUJMRVNbZG9jXSA9ICJTcGVjaWZpZXMgYSBwYXNzd29yZCBmaWxlIHRvIHVzZSBmb3Igb2J0YWluaW5nIHN0YXRpYyBncm91cCBpZGVudGlmaWNhdGlvbiAoZ2lkKSB2YWx1ZXMgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhZGRzIGEgZ3JvdXAgdG8gdGhlIHN5c3RlbSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uIgogVVNFUkFERF9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIHdpdGhpbiB0aGUgcmVjaXBlIHRoYXQgcmVxdWlyZSB1c2VycyBhbmQvb3IgZ3JvdXBzIHRvIGJlIGFkZGVkLiIKIFVTRVJBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSB1c2VyYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgdXNlciB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKK1VTRVJBRERfVUlEX1RBQkxFU1tkb2NdID0gIlNwZWNpZmllcyBhIHBhc3N3b3JkIGZpbGUgdG8gdXNlIGZvciBvYnRhaW5pbmcgc3RhdGljIHVzZXIgaWRlbnRpZmljYXRpb24gKHVpZCkgdmFsdWVzIHdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWRkcyBhIHVzZXIgdG8gdGhlIHN5c3RlbSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uIgorVVNFUkFEREVYVEVOU0lPTltkb2NdID0gIldoZW4gc2V0IHRvICd1c2VyYWRkLXN0YXRpY2lkcycsIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBiYXNlIGFsbCB1c2VyIGFuZCBncm91cCBhZGRpdGlvbnMgb24gZmlsZXMgbGlzdGVkIGluIFVTRVJBRERfVUlEX1RBQkxFUyBhbmQgVVNFUkFERF9HSURfVEFCTEVTLiIKIAogI1cKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9sYXllci5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9sYXllci5jb25mCmluZGV4IDEwYjk4ZjUuLjI0YjRkZjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbGF5ZXIuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2xheWVyLmNvbmYKQEAgLTksNyArOSw3IEBACiAKICMgVGhpcyBzaG91bGQgb25seSBiZSBpbmNyZW1lbnRlZCBvbiBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgd2lsbAogIyBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIG90aGVyIGxheWVycwotTEFZRVJWRVJTSU9OX2NvcmUgPSAiOCIKK0xBWUVSVkVSU0lPTl9jb3JlID0gIjkiCiAKIEJCTEFZRVJTX0xBWUVSSU5ERVhfTkFNRV9jb3JlID0gIm9wZW5lbWJlZGRlZC1jb3JlIgogCkBAIC0yNiw3ICsyNiw2IEBACiAgIGNvbm5tYW4tY29uZiBcCiAgIGZvcm1mYWN0b3IgXAogICB4c2VydmVyLXhmODYtY29uZmlnIFwKLSAgcG9pbnRlcmNhbCBcCiAgIHBvaW50ZXJjYWwteGlucHV0IFwKICAgYmFzZS1maWxlcyBcCiAgIGtleW1hcHMgXApAQCAtNDcsNiArNDYsNyBAQAogICBwcHAtZGlhbGluLT5wcHAgXAogICByZXNvbHZjb25mLT5iYXNoIFwKICAgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtPnBlcmwgXAorICBjYS1jZXJ0aWZpY2F0ZXMtPm9wZW5zc2wgXAogICBpbml0cmFtZnMtZnJhbWV3b3JrLT4ke1ZJUlRVQUwtUlVOVElNRV9iYXNlLXV0aWxzfSBcCiAgIGluaXRyYW1mcy1mcmFtZXdvcmstPnN5c3RlbWQgXAogICBpbml0cmFtZnMtZnJhbWV3b3JrLT5ldWRldiBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCmluZGV4IGJhYWNjZTcuLjQxZTVlMTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCkBAIC0xLDMgKzEsNCBAQAogU0RLX0FSQ0ggPSAiaTU4NiIKIFNES19DQ19BUkNIID0gIi1tYXJjaD1pNTg2IgorQUJJRVhURU5TSU9OX2NsYXNzLW5hdGl2ZXNkayA9ICIiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKaW5kZXggZmZkYjQ2MS4uZmU0MDY5NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKQEAgLTEsMiArMSwzIEBACiBTREtfQVJDSCA9ICJpNjg2IgogU0RLX0NDX0FSQ0ggPSAiLW1hcmNoPWk2ODYiCitBQklFWFRFTlNJT05fY2xhc3MtbmF0aXZlc2RrID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCmluZGV4IDgxMmQ2N2MuLjYxNDM5YjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay94ODZfNjQuY29uZgpAQCAtMSArMSwyIEBACiBTREtfQVJDSCA9ICJ4ODZfNjQiCitBQklFWFRFTlNJT05fY2xhc3MtbmF0aXZlc2RrID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3dmUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjd2ZS5pbmMKaW5kZXggNzllMWVmNi4uZTEzMTU2YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjd2ZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjd2ZS5pbmMKQEAgLTUsOCArNSw3IEBACiBUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjd2ZScsICcgLW1hcmNoPWFybXY3dmUnLCAnJywgZCl9IgogTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjd2ZScsICdhcm12N3ZlOicsICcnICxkKX0iCiAKLXJlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jCi1yZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCiAKICMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKIEFWQUlMVFVORVMgKz0gImFybXY3dmUgYXJtdjd2ZXQgYXJtdjd2ZS12ZnB2M2QxNiBhcm12N3ZldC12ZnB2M2QxNiBhcm12N3ZlLXZmcHYzIGFybXY3dmV0LXZmcHYzIGFybXY3dmUtbmVvbiBhcm12N3ZldC1uZW9uIGFybXY3dmUtbmVvbi12ZnB2NCBhcm12N3ZldC1uZW9uLXZmcHY0IgpAQCAtMzAsOCArMjksOCBAQAogVFVORV9GRUFUVVJFU190dW5lLWFybXY3dmV0LW5lb24gICAgICAgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZXR9IG5lb24iCiBUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZS1uZW9uLXZmcHY0ICA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZlLW5lb259ICB2ZnB2NCIKIFRVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZldC1uZW9uLXZmcHY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3dmV0LW5lb259IHZmcHY0IgotUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmUgICAgICAgICAgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ9ICBhcm12N3ZlIGFybXY3dmUtdmZwIgotUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmV0ICAgICAgICAgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0fSBhcm12N3ZlIGFybXY3dmUtdmZwIGFybXY3dmV0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZSAgICAgICAgICAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9ICBhcm12N3ZlIGFybXY3dmUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmV0ICAgICAgICAgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjd2ZSBhcm12N3ZlLXZmcCBhcm12N3ZldDItdmZwIgogUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmUtdmZwdjNkMTYgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZX0gIGFybXY3dmUtdmZwdjNkMTYiCiBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZXQtdmZwdjNkMTYgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZldH0gYXJtdjd2ZS12ZnB2M2QxNiBhcm12N3ZldDItdmZwdjNkMTYiCiBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZS12ZnB2MyAgICAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlLXZmcHYzZDE2fSAgYXJtdjd2ZS12ZnB2MyIKQEAgLTYzLDggKzYyLDggQEAKIFRVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZldGhmLW5lb24gICAgICAgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZXQtbmVvbn0gICAgICAgY2FsbGNvbnZlbnRpb24taGFyZCIKIFRVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZlaGYtbmVvbi12ZnB2NCAgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZS1uZW9uLXZmcHY0fSAgY2FsbGNvbnZlbnRpb24taGFyZCIKIFRVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZldGhmLW5lb24tdmZwdjQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZXQtbmVvbi12ZnB2NH0gY2FsbGNvbnZlbnRpb24taGFyZCIKLVBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlaGYgICAgICAgICAgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZn0gIGFybXY3dmVoZi12ZnAiCi1QQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZXRoZiAgICAgICAgICAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmfSBhcm12N3ZlaGYtdmZwIGFybXY3dmV0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlaGYgICAgICAgICAgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9ICBhcm12N3ZlaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmV0aGYgICAgICAgICAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGFybXY3dmVoZi12ZnAgYXJtdjd2ZXQyaGYtdmZwIgogUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmVoZi12ZnB2M2QxNiAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlaGZ9ICBhcm12N3ZlaGYtdmZwdjNkMTYiCiBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZXRoZi12ZnB2M2QxNiAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmV0aGZ9IGFybXY3dmVoZi12ZnB2M2QxNiBhcm12N3ZldDJoZi12ZnB2M2QxNiIKIFBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlaGYtdmZwdjMgICAgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZWhmLXZmcHYzZDE2fSAgYXJtdjd2ZWhmLXZmcHYzIgpAQCAtOTYsOCArOTUsOCBAQAogVFVORV9GRUFUVVJFU190dW5lLWFybXY3dmV0Yi1uZW9uICAgICAgID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3dmV0LW5lb259ICAgICAgIGJpZ2VuZGlhbiIKIFRVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZlYi1uZW9uLXZmcHY0ICA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZlLW5lb24tdmZwdjR9ICBiaWdlbmRpYW4iCiBUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZXRiLW5lb24tdmZwdjQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZXQtbmVvbi12ZnB2NH0gYmlnZW5kaWFuIgotUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmViICAgICAgICAgICAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2Yn0gIGFybXY3dmViLXZmcCIKLVBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZldGIgICAgICAgICAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRifSBhcm12N3ZlYi12ZnAgYXJtdjd2ZXQyYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZWIgICAgICAgICAgICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gIGFybXY3dmViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZldGIgICAgICAgICAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yn0gYXJtdjd2ZWItdmZwIGFybXY3dmV0MmItdmZwIgogUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmViLXZmcHYzZDE2ICAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmVifSAgYXJtdjd2ZWItdmZwdjNkMTYiCiBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZXRiLXZmcHYzZDE2ICAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZXRifSBhcm12N3ZlYi12ZnB2M2QxNiBhcm12N3ZldDJiLXZmcHYzZDE2IgogUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmViLXZmcHYzICAgICAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmViLXZmcHYzZDE2fSAgYXJtdjd2ZWItdmZwdjMiCkBAIC0xMjksOCArMTI4LDggQEAKIFRVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZldGhmYi1uZW9uICAgICAgID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3dmV0aGYtbmVvbn0gICAgICAgYmlnZW5kaWFuIgogVFVORV9GRUFUVVJFU190dW5lLWFybXY3dmVoZmItbmVvbi12ZnB2NCAgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZWhmLW5lb24tdmZwdjR9ICBiaWdlbmRpYW4iCiBUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjd2ZXRoZmItbmVvbi12ZnB2NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N3ZldGhmLW5lb24tdmZwdjR9IGJpZ2VuZGlhbiIKLVBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlaGZiICAgICAgICAgICAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2aGZifSAgYXJtdjd2ZWhmYi12ZnAiCi1QQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZXRoZmIgICAgICAgICAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZmJ9IGFybXY3dmVoZmItdmZwIGFybXY3dmV0MmhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZWhmYiAgICAgICAgICAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmJ9ICBhcm12N3ZlaGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZldGhmYiAgICAgICAgICAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmJ9IGFybXY3dmVoZmItdmZwIGFybXY3dmV0MmhmYi12ZnAiCiBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjd2ZWhmYi12ZnB2M2QxNiAgICA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlaGZifSAgYXJtdjd2ZWhmYi12ZnB2M2QxNiIKIFBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZldGhmYi12ZnB2M2QxNiAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmV0aGZifSBhcm12N3ZlaGZiLXZmcHYzZDE2IGFybXY3dmV0MmhmYi12ZnB2M2QxNiIKIFBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N3ZlaGZiLXZmcHYzICAgICAgID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3dmVoZmItdmZwdjNkMTZ9ICBhcm12N3ZlaGZiLXZmcHYzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jCmluZGV4IDUwZDkxNzUuLmIzNGFmOGUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tbmVvbi5pbmMKQEAgLTgsNyArOCw3IEBACiBUVU5FX0NDQVJHU19NRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduZW9uJywgJyBuZW9uJywgJycsIGQpfSIKIAogVFVORVZBTElEW3ZmcHYzZDE2XSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gMyB3aXRoIDE2IHJlZ2lzdGVycyAodmZwdjMtZDE2KSB1bml0LiIKLVRVTkVfQ0NBUkdTX01GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3ZmcHYzZDE2JywgJyB2ZnB2M2QxNicsICcnLCBkKX0iCitUVU5FX0NDQVJHU19NRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd2ZnB2M2QxNicsICcgdmZwdjMtZDE2JywgJycsIGQpfSIKIAogVFVORVZBTElEW3ZmcHYzXSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gMyB3aXRoIDMyIHJlZ2lzdGVycyAodmZwdjMpIHVuaXQuIgogVFVORV9DQ0FSR1NfTUZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndmZwdjMnLCAnIHZmcHYzJywgJycgLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCmluZGV4IDQyNDcyNTUuLjllZjMxZTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCkBAIC02LDcgKzYsNyBAQAogVFVORV9DQ0FSR1NfTUZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndmZwJywgJyB2ZnAnLCAnJywgZCl9IgogCiBUVU5FX0NDQVJHUyAgLj0gIiR7QCAoJyAtbWZwdT0lcyAnICUgZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTX01GUFUnLCBUcnVlKS5zcGxpdCgpWy0xXSkgaWYgKGQuZ2V0VmFyKCdUVU5FX0NDQVJHU19NRlBVJywgVHJ1ZSkgIT0gJycpIGVsc2UgJyd9IgotQVJNUEtHU0ZYX0ZQVSA9ICIke0AgKCctJXMnICAgICAgICAlIGQuZ2V0VmFyKCdUVU5FX0NDQVJHU19NRlBVJywgVHJ1ZSkuc3BsaXQoKVstMV0pIGlmIChkLmdldFZhcignVFVORV9DQ0FSR1NfTUZQVScsIFRydWUpICE9ICcnKSBlbHNlICcnfSIKK0FSTVBLR1NGWF9GUFUgPSAiJHtAICgnLSVzJyAgICAgICAgJSBkLmdldFZhcignVFVORV9DQ0FSR1NfTUZQVScsIFRydWUpLnNwbGl0KClbLTFdLnJlcGxhY2UoJ3ZmcHYzLWQxNicsICd2ZnB2M2QxNicpKSBpZiAoZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTX01GUFUnLCBUcnVlKSAhPSAnJykgZWxzZSAnJ30iCiAKIFRVTkVWQUxJRFtjYWxsY29udmVudGlvbi1oYXJkXSA9ICJFbmFibGUgRUFCSSBoYXJkIGZsb2F0IGNhbGwgY29udmVudGlvbiwgcmVxdWlyZXMgVkZQLiIKIFRVTkVfQ0NBUkdTX01GTE9BVCA9ICIke0AgYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnY2FsbGNvbnZlbnRpb24taGFyZCcsICdoYXJkJywgJ3NvZnRmcCcsIGQpIGlmIChkLmdldFZhcignVFVORV9DQ0FSR1NfTUZQVScsIFRydWUpICE9ICcnKSBlbHNlICcnIH0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCmluZGV4IGMzNzVmMzEuLjYyZmExNTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCkBAIC0xLDMgKzEsNiBAQAorMjAxNi8wOS8zMCAtIFp1YmFpciBMdXRmdWxsYWggS2FrYWtoZWwgPFp1YmFpci5LYWtha2hlbEBpbWd0ZWMuY29tPgorICAtIEFkZCBSZWxlYXNlIDYgc3VwcG9ydAorCiAyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgogICAtIEluaXRpYWwgVmVyc2lvbgogCkBAIC02LDkgKzksMTQgQEAKICAqKSBIYXJkd2FyZS9Tb2Z0d2FyZSBGbG9hdGluZyBQb2ludAogICopIG8zMiwgbjMyLCBuNjQgQUJJCiAKK1JlbGVhc2UgNiBvZiB0aGUgSVNBIGlzIGEgbWFqb3IgcmV2aXNpb24gYW5kIGRvZXNuJ3QgYnVpbGQgdXAgb24gcHJldmlvdXMKK3JlbGVhc2VzIG9mIHRoZSBJU0EuCisKK0ZvciBtb3JlIGRldGFpbHMgYWJvdXQgdHVwbGVzLCBjaGVjayBodHRwczovL3dpa2kuZGViaWFuLm9yZy9NdWx0aWFyY2gvVHVwbGVzCisKIFRVTkVfQVJDSCwgdGhlIEdOVSBjYW5vbmljYWwgYXJjaCwgaXMgZGVmaW5lZCBhczoKIAotbWlwcyR7TUlQU1BLR1NGWF9CWVRFfSR7TUlQU1BLR1NGWF9FTkRJQU59CisibWlwcyR7TUlQU1BLR1NGWF8zMlI2fSR7TUlQU1BLR1NGWF82NFI2fSR7TUlQU1BLR1NGWF9CWVRFfSR7TUlQU1BLR1NGWF9SNn0ke01JUFNQS0dTRlhfRU5ESUFOfSIKIAogVGhlIHBhY2thZ2UgYXJjaCBpcyBkZWZpbmVkIGluIHN1Y2ggYSB3YXkgdG8gZ2VuZXJhdGVkIGEgc3RhbmRhcmQgbmFtaW5nCiBzY2hlbWUuICBUaGUgc2NoZW1lIGlzOiA8bWlwcyB2YXJpYW50PlstbmZdWy1uMzJdCkBAIC0zNCwzICs0MiwxMiBAQAogTUlQU1BLR1NGWF9BQkkgLSBUaGlzIGlzIHVzZWQgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBBQkkgd2hlbiB0aGUgcHJldmlvdXMKIHZhbHVlcyBhcmUgbm90IGVub3VnaCB0byBkaXN0cmluZ3Vpc2ggdGhlIHBhY2thZ2UuICAiLW4zMiIgaXMgYWRkZWQgd2hlbgogYnVpbGRpbmcgZm9yIE4zMiBBQkkuCisKK01JUFNQS0dTRlhfUjYgLSBUaGlzIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcHJlc2VuY2Ugb2YgcmVsZWFzZSA2LgorInI2IiBpcyBhZGRlZCBpbiB0aGUgdHVwbGUgZm9yIHJlbGVhc2UgNiBvZiB0aGUgaXNhLgorCitNSVBTUEtHU0ZYXzY0UjYgLSBUaGlzIGlzIHVzZWQgdG8gc3BlY2lmeSAiaXNhIiBpbiB0aGUgdHVwbGUuCitSZWxlYXNlIDYgb253YXJkcyB3ZSB1c2UgIm1pcHNpc2E2NCIgaW5zdGVhZCBvZiBqdXN0ICJtaXBzNjQiLgorCitNSVBTUEtHU0ZYXzMyUjYgLSAgVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgImlzYTMyIiBpbiB0aGUgdHVwbGUuCitSZWxlYXNlIDYgb253YXJkcyB3ZSB1c2UgIm1pcHNpc2EzMiIgaW5zdGVhZCBvZiBqdXN0ICJtaXBzIi4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYwppbmRleCA4OWQxN2U3Li42MDY5Y2ExIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCkBAIC0yMCw2ICsyMCw5IEBACiBBQklFWFRFTlNJT04gLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ24zMicsICduMzInLCAnJyAsZCl9IgogVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ24zMicsICcgLW1hYmk9bjMyJywgJycsIGQpfSIKIAorIyB1c2VyIG1vZGUgcWVtdSBkb2Vzbid0IHN1cHBvcnQgbWlwczY0IG4zMjogIkludmFsaWQgRUxGIGltYWdlIGZvciB0aGlzIGFyY2hpdGVjdHVyZSIKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRF9hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ24zMicsICdxZW11LXVzZXJtb2RlJywgJycsIGQpfSIKKwogVFVORVZBTElEW242NF0gPSAiTUlQUzY0IG42NCBBQkkiCiBUVU5FQ09ORkxJQ1RTW242NF0gPSAibzMyIG4zMiIKIFRVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduNjQnLCAnIC1tYWJpPTY0JywgJycsIGQpfSIKQEAgLTI5LDE0ICszMiwyMiBAQAogVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2ZwdS1oYXJkJywgJyAtbWhhcmQtZmxvYXQnLCAnIC1tc29mdC1mbG9hdCcsIGQpfSIKIFRBUkdFVF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnZnB1LWhhcmQnLCAnJywgJ3NvZnQnLCBkKX0iCiAKKyMgTUlQUyByNiBBQkkKK1RVTkVWQUxJRFtyNl0gPSAiVXNlIHI2IgorVFVORVZBTElEW21pcHNpc2E2NHI2XSA9ICJVc2UgNjRyNiIKK1RVTkVWQUxJRFttaXBzaXNhMzJyNl0gPSAiVXNlIDMycjYiCisKICMgUGFja2FnZSBuYW1pbmcKIE1JUFNQS0dTRlhfRU5ESUFOID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2JpZ2VuZGlhbicsICcnLCAnZWwnLCBkKX0iCiBNSVBTUEtHU0ZYX0JZVEUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbjY0JyAsICc2NCcsICcnLCBkKX0iCiBNSVBTUEtHU0ZYX0JZVEUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ24zMicgLCAnNjQnLCAnJywgZCl9IgogTUlQU1BLR1NGWF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnZnB1LWhhcmQnICwgJycsICctbmYnLCBkKX0iCiBNSVBTUEtHU0ZYX0FCSSA9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduMzInLCAnLW4zMicsICcnLCBkKX0iCitNSVBTUEtHU0ZYX1I2ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3I2JywgJ3I2JywgJycsIGQpfSIKK01JUFNQS0dTRlhfNjRSNiA9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtaXBzaXNhNjRyNicsICdpc2EnLCAnJywgZCl9IgorTUlQU1BLR1NGWF8zMlI2ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ21pcHNpc2EzMnI2JywgJ2lzYTMyJywgJycsIGQpfSIKIAotVFVORV9BUkNIID0gIm1pcHMke01JUFNQS0dTRlhfQllURX0ke01JUFNQS0dTRlhfRU5ESUFOfSIKK1RVTkVfQVJDSCA9ICJtaXBzJHtNSVBTUEtHU0ZYXzMyUjZ9JHtNSVBTUEtHU0ZYXzY0UjZ9JHtNSVBTUEtHU0ZYX0JZVEV9JHtNSVBTUEtHU0ZYX1I2fSR7TUlQU1BLR1NGWF9FTkRJQU59IgogVFVORV9QS0dBUkNIID0gIiR7TUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtJHtERUZBVUxUVFVORX19JHtNSVBTUEtHU0ZYX0ZQVX0ke01JUFNQS0dTRlhfQUJJfSIKIAogIyBCYXNlIHR1bmVzCkBAIC0xMDAsMyArMTExLDI5IEBACiBCQVNFX0xJQl90dW5lLW1pcHM2NGVsLW5mID0gImxpYjY0IgogTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwtbmYgPSAiJHtUVU5FX0FSQ0h9IgogUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsLW5mID0gIm1pcHM2NGVsLW5mIgorCisjIE1JUFMgNjQgKyBvMzIKK0FWQUlMVFVORVMgKz0gIm1pcHM2NC1vMzIgbWlwczY0ZWwtbzMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW8zMiA9ICJvMzIgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjQtbzMyID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NC1vMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1vMzIgPSAibWlwcyBtaXBzNjQtbzMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbzMyID0gIm8zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbzMyID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsLW8zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbzMyID0gIm1pcHNlbCBtaXBzNjRlbC1vMzIgbWlwczY0ZWwtbzMyIgorCisjIE1JUFMgNjQgbzMyIGFuZCBTb2Z0IEZsb2F0CitBVkFJTFRVTkVTICs9ICJtaXBzNjQtbmYtbzMyIG1pcHM2NGVsLW5mLW8zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uZi1vMzIgPSAibzMyIGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW5mLW8zMiA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQtbmYtbzMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbmYtbzMyID0gIm1pcHMtbmYgbWlwczY0LW5mLW8zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mLW8zMiA9ICJvMzIiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsLW5mLW8zMiA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbC1uZi1vMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsLW5mLW8zMiA9ICJtaXBzZWwtbmYgbWlwczY0ZWwtbmYtbzMyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9mZWF0dXJlLW1pcHMtbWlwczE2ZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2ZlYXR1cmUtbWlwcy1taXBzMTZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTAxMWRlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9mZWF0dXJlLW1pcHMtbWlwczE2ZS5pbmMKQEAgLTAsMCArMSwxNyBAQAorVFVORVZBTElEW21pcHMxNmVdID0gIkJ1aWxkIHRhcmdldCBwYWNrYWdlcyB3aXRoIE1JUFMxNmUgQVNFIGluc3RydWN0aW9ucyIKK01JUFNfTUlQUzE2RV9PUFQgPSAiJHtAWydtbm8tbWlwczE2JywgJ21pcHMxNiddW2QuZ2V0VmFyKCdNSVBTX0lOU1RSVUNUSU9OX1NFVCcsIFRydWUpID09ICdtaXBzMTZlJ119IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ21pcHMxNmUnLCAnIC0ke01JUFNfTUlQUzE2RV9PUFR9JywgJycsIGQpfSIKKworTUlQU1BLR1NGWF9NSVBTMTZFIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtaXBzMTZlJywgJy1tMTYnLCAnJywgZCkgaWYgZC5nZXRWYXIoJ01JUFNfTUlQUzE2RV9PUFQnLCBUcnVlKSA9PSAnbWlwczE2JyBlbHNlICcnfSIKKworIyBXaGV0aGVyIHRvIGNvbXBpbGUgd2l0aCBjb2RlIHRvIGFsbG93IGludGVyd29ya2luZyBiZXR3ZWVuIHRoZSB0d28KKyMgaW5zdHJ1Y3Rpb24gc2V0cy4gVGhpcyBhbGxvd3MgbWlwczE2ZSBjb2RlIHRvIGJlIGV4ZWN1dGVkIG9uIGEgcHJpbWFyaWx5CisjIG1pcHMzMi82NCBzeXN0ZW0gYW5kIHZpY2UgdmVyc2EuIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgRElTVFJPcyBub3QKKyMgdHVybiB0aGlzIG9mZiAtIHRoZSBhY3R1YWwgY29zdCBpcyB2ZXJ5IHNtYWxsLgorVFVORVZBTElEW25vLWludGVybGluay1jb21wcmVzc2VkXSA9ICJEaXNhYmxlIG1peGluZyBvZiBzdGFuZGFyZCBhbmQgTUlQUzE2ZSBjb2RlIgorTUlQUzE2X1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduby1pbnRlcmxpbmstY29tcHJlc3NlZCcsICcgLW1uby1pbnRlcmxpbmstY29tcHJlc3NlZCcsICcgLW1pbnRlcmxpbmstY29tcHJlc3NlZCcsIGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtaXBzMTZlJywgJyAke01JUFMxNl9UVU5FX0NDQVJHU30nLCAnJywgZCl9IgorT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtaXBzMTZlJywgJzptaXBzMTZlJywgJycsIGQpfSIKKworIyBzaG93IHN0YXR1cyAoaWYgY29tcGlsaW5nIGluIE1JUFMxNmUgbW9kZSkKK0JVSUxEQ0ZHX1ZBUlMgKz0gIiR7QFsnJywgJ01JUFNfSU5TVFJVQ1RJT05fU0VUJ11bZC5nZXRWYXIoJ01JUFNfSU5TVFJVQ1RJT05fU0VUJywgVHJ1ZSkgPT0gJ21pcHMxNmUnXX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL3R1bmUtbWlwcy0yNGsuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy90dW5lLW1pcHMtMjRrLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhhY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy90dW5lLW1pcHMtMjRrLmluYwpAQCAtMCwwICsxLDUxIEBACitERUZBVUxUVFVORSA/PSAibWlwczMycjItMjRrYyIKKworTUlQU1BLR1NGWF9NSVBTMTZFID8/PSAiIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvZmVhdHVyZS1taXBzLW1pcHMxNmUuaW5jCisKKworVFVORVZBTElEWzI0a2NdID0gIkVuYWJsZSBNSVBTIDI0S2MgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiMjRrYyIsICIgLW10dW5lPTI0a2MiLCAiIiwgZCl9IgorVFVORVZBTElEWzI0a2VjXSA9ICJFbmFibGUgTUlQUyAyNEtFYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucywgaW5jbHVkaW5nIERTUCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICIyNGtlYyIsICIgLW10dW5lPTI0a2VjIC1tZHNwIiwgIiIsIGQpfSIKKworCitBVkFJTFRVTkVTICs9ICJtaXBzMzJyMi0yNGtjICAgbWlwczMycjItMjRrZWMgICBtaXBzMzJyMi0yNGtlYy1tMTYiCitBVkFJTFRVTkVTICs9ICJtaXBzMzJyMmVsLTI0a2MgbWlwczMycjJlbC0yNGtlYyBtaXBzMzJyMmVsLTI0a2VjLW0xNiIKKworIyBiaWcgZW5kaWFuOiBrYywga2MrZHNwPWtlYywga2MrZHNwK21pcHMxNmU9a2VjLW0xNgorVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyLTI0a2MgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjItbmZ9IDI0a2MiCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjItMjRrZWMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjItbmZ9IDI0a2VjIgorVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyLTI0a2VjLW0xNiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMi0yNGtlY30gbWlwczE2ZSIKKworTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMycjItMjRrYyA9ICJtaXBzMzJyMi0yNGtjIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyLTI0a2MgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMycjItbmZ9IG1pcHMzMnIyLTI0a2MtbmYiCitRRU1VX0VYVFJBT1BUSU9OU19taXBzMzJyMi0yNGtjLW5mID0gIiAtY3B1IDI0S2MiCisKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyLTI0a2VjID0gIm1pcHMzMnIyLTI0a2VjIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyLTI0a2VjID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyLTI0a2N9IG1pcHMzMnIyLTI0a2VjLW5mIgorUUVNVV9FWFRSQU9QVElPTlNfbWlwczMycjItMjRrZWMtbmYgPSAiIC1jcHUgMjRLRWMiCisKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyLTI0a2VjLW0xNiA9ICJtaXBzMzJyMi0yNGtlYyR7TUlQU1BLR1NGWF9NSVBTMTZFfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMi0yNGtlYy1tMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMycjItMjRrZWN9IG1pcHMzMnIyLTI0a2VjLW0xNi1uZiIKK1FFTVVfRVhUUkFPUFRJT05TX21pcHMzMnIyLTI0a2VjLW0xNi1uZiA9ICIgLWNwdSAyNEtFYyIKKworCisjIGxpdHRsZSBlbmRpYW46IGtjLCBrYytkc3A9a2VjLCBrYytkc3ArbWlwczE2ZT1rZWMtbTE2CitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjJlbC0yNGtjID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyZWwtbmZ9IDI0a2MiCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjJlbC0yNGtlYyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMmVsLW5mfSAyNGtlYyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMmVsLTI0a2VjLW0xNiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMmVsLTI0a2VjfSBtaXBzMTZlIgorCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJyMmVsLTI0a2MgPSAibWlwczMycjJlbC0yNGtjIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyZWwtMjRrYyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsLW5mfSBtaXBzMzJyMmVsLTI0a2MtbmYiCitRRU1VX0VYVFJBT1BUSU9OU19taXBzMzJyMmVsLTI0a2MtbmYgPSAiIC1jcHUgMjRLYyIKKworTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMycjJlbC0yNGtlYyA9ICJtaXBzMzJyMmVsLTI0a2VjIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyZWwtMjRrZWMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMycjJlbC0yNGtjfSBtaXBzMzJyMmVsLTI0a2VjLW5mIgorUUVNVV9FWFRSQU9QVElPTlNfbWlwczMycjJlbC0yNGtlYy1uZiA9ICIgLWNwdSAyNEtFYyIKKworTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMycjJlbC0yNGtlYy1tMTYgPSAibWlwczMycjJlbC0yNGtlYyR7TUlQU1BLR1NGWF9NSVBTMTZFfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsLTI0a2VjLW0xNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsLTI0a2VjfSBtaXBzMzJyMmVsLTI0a2VjLW0xNi1uZiIKK1FFTVVfRVhUUkFPUFRJT05TX21pcHMzMnIyZWwtMjRrZWMtbTE2LW5mID0gIiAtY3B1IDI0S0VjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYwppbmRleCA0OTQxOWI2Li5mNzUxYzZiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYwpAQCAtNyw2ICs3LDkgQEAKIFRVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtNjQnLCAnIC1tNjQnLCAnJywgZCl9IgogVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsIFsgJ202NCcgXSwgJ3Bvd2VycGM2NCcsICcnLCBkKX0iCiAKKyMgdXNlciBtb2RlIHFlbXUgZG9lc24ndCBzdXBwb3J0IHBwYzY0CitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtNjQnLCAncWVtdS11c2VybW9kZScsICcnLCBkKX0iCisKIEFWQUlMVFVORVMgKz0gInBvd2VycGM2NCIKIFRVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjNjQgPSAibTY0IGZwdS1oYXJkIgogQkFTRV9MSUJfdHVuZS1wb3dlcnBjNjQgPSAibGliNjQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCmluZGV4IGY0NGRiZTYuLjJiYzRkYzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCkBAIC0yOSwzICsyOSw1IEBACiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3BuLWxpbnV4LXlvY3RvID0gIiBmZWF0dXJlcy9uZnNkL25mc2QtZW5hYmxlLnNjYyIKIAogTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAicm5nLXRvb2xzIgorCitJTUFHRV9DTEFTU0VTICs9ICJxZW11Ym9vdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LW1pcHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QtbWlwcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2MGNmMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LW1pcHMuaW5jCkBAIC0wLDAgKzEsOCBAQAorIyBGb3IgcnVucWVtdQorSU1BR0VfQ0xBU1NFUyArPSAicWVtdWJvb3QiCitRQl9NRU0gPSAiLW0gMjU2IgorUUJfTUFDSElORSA9ICItbWFjaGluZSBtYWx0YSIKK1FCX0tFUk5FTF9DTURMSU5FX0FQUEVORCA9ICJjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5IgorIyBBZGQgdGhlICd2aXJ0aW8tcm5nLXBjaScgZGV2aWNlIG90aGVyd2lzZSB0aGUgZ3Vlc3QgbWF5IHJ1biBvdXQgb2YgZW50cm9weQorUUJfT1BUX0FQUEVORCA9ICItdmdhIGNpcnJ1cyAtc2hvdy1jdXJzb3IgLXVzYiAtdXNiZGV2aWNlIHRhYmxldCAtZGV2aWNlIHZpcnRpby1ybmctcGNpIgorUUJfU1lTVEVNX05BTUUgPSAicWVtdS1zeXN0ZW0tJHtUVU5FX0FSQ0h9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QteDg2LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LXg4Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhYzk4MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LXg4Ni5pbmMKQEAgLTAsMCArMSwxNSBAQAorIyBGb3IgcnVucWVtdQorSU1BR0VfQ0xBU1NFUyArPSAicWVtdWJvb3QiCitRQl9TWVNURU1fTkFNRV94ODYgPSAicWVtdS1zeXN0ZW0taTM4NiIKK1FCX0NQVV94ODYgPSAiLWNwdSBxZW11MzIiCitRQl9DUFVfS1ZNX3g4NiA9ICItY3B1IGt2bTMyIgorCitRQl9TWVNURU1fTkFNRV94ODYtNjQgPSAicWVtdS1zeXN0ZW0teDg2XzY0IgorUUJfQ1BVX3g4Ni02NCA9ICItY3B1IGNvcmUyZHVvIgorUUJfQ1BVX0tWTV94ODYtNjQgPSAiLWNwdSBrdm02NCIKKworUUJfQVVESU9fRFJWID0gImFsc2EiCitRQl9BVURJT19PUFQgPSAiLXNvdW5kaHcgYWM5NyxlczEzNzAiCitRQl9LRVJORUxfQ01ETElORV9BUFBFTkQgPSAidmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIG9wcm9maWxlLnRpbWVyPTEgdXZlc2FmYi50YXNrX3RpbWVvdXQ9LTEiCisjIEFkZCB0aGUgJ3ZpcnRpby1ybmctcGNpJyBkZXZpY2Ugb3RoZXJ3aXNlIHRoZSBndWVzdCBtYXkgcnVuIG91dCBvZiBlbnRyb3B5CitRQl9PUFRfQVBQRU5EID0gIi12Z2Egdm13YXJlIC1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2UgdGFibGV0IC1kZXZpY2UgdmlydGlvLXJuZy1wY2kiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCmluZGV4IDBlOTVlYzguLjVlMzk4Y2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCkBAIC02LDYgKzYsNyBAQAogVFVORUNPTkZMSUNUU1ttaXBzMzJyMl0gPSAibjY0IG4zMiIKIFRVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtaXBzMzJyMicsICcgLW1hcmNoPW1pcHMzMnIyJywgJycsIGQpfSIKIAorIyBoYXJkIGZsb2F0CiBBVkFJTFRVTkVTICs9ICJtaXBzMzJyMiBtaXBzMzJyMmVsIgogCiBUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc30gbWlwczMycjIiCkBAIC0xNSwzICsxNiwxNCBAQAogVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyZWwgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsfSBtaXBzMzJyMiIKIE1JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyZWwgPSAibWlwczMycjJlbCIKIFBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsID0gIm1pcHNlbCBtaXBzMzJlbCBtaXBzMzJyMmVsIgorCisjIHNvZnQgZmxvYXQKK0FWQUlMVFVORVMgKz0gIm1pcHMzMnIyLW5mIG1pcHMzMnIyZWwtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMi1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzLW5mfSBtaXBzMzJyMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyLW5mID0gIm1pcHMzMnIyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyLW5mID0gIm1pcHMtbmYgbWlwczMyLW5mIG1pcHMzMnIyLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjJlbC1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwtbmZ9IG1pcHMzMnIyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMycjJlbC1uZiA9ICJtaXBzMzJyMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyZWwtbmYgPSAibWlwc2VsLW5mIG1pcHMzMmVsLW5mIG1pcHMzMnIyZWwtbmYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnI2LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjEzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnI2LmluYwpAQCAtMCwwICsxLDI5IEBACitERUZBVUxUVFVORSA/PSAibWlwc2lzYTMycjZlbCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMKKworVFVORVZBTElEW21pcHNpc2EzMnI2XSA9ICJFbmFibGUgbWlwc2lzYTMycjYgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW21pcHNpc2EzMnI2XSA9ICJuNjQgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ21pcHNpc2EzMnI2JywgJyAtbWFyY2g9bWlwczMycjYnLCAnJywgZCl9IgorCisjIEJhc2UgVHVuZXMKK0FWQUlMVFVORVMgKz0gIm1pcHNpc2EzMnI2IG1pcHNpc2EzMnI2ZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzaXNhMzJyNiA9ICJiaWdlbmRpYW4gbWlwc2lzYTMycjYgZnB1LWhhcmQgcjYiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzaXNhMzJyNiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2lzYTMycjYgPSAibWlwc2lzYTMycjYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzaXNhMzJyNmVsID0gImZwdS1oYXJkIG1pcHNpc2EzMnI2IHI2IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwc2lzYTMycjZlbCA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2lzYTMycjZlbCA9ICJtaXBzaXNhMzJyNmVsIgorCisjIFNvZnQgRmxvYXQKK0FWQUlMVFVORVMgKz0gIm1pcHNpc2EzMnI2LW5mIG1pcHNpc2EzMnI2ZWwtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzaXNhMzJyNi1uZiA9ICJiaWdlbmRpYW4gbWlwc2lzYTMycjYgcjYiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzaXNhMzJyNi1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2lzYTMycjYtbmYgPSAibWlwc2lzYTMycjYtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzaXNhMzJyNmVsLW5mID0gIm1pcHNpc2EzMnI2IHI2IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwc2lzYTMycjZlbC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2lzYTMycjZlbC1uZiA9ICJtaXBzaXNhMzJyNmVsLW5mIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjRyMi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NHIyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ3NTM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjRyMi5pbmMKQEAgLTAsMCArMSw4NCBAQAorREVGQVVMVFRVTkUgPz0gIm1pcHM2NHIyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworCitUVU5FVkFMSURbbWlwczY0cjJdID0gIkVuYWJsZSBtaXBzNjRyMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtaXBzNjRyMicsICcgLW1hcmNoPW1pcHM2NHIyJywgJycsIGQpfSIKKworIyBCYXNlIHR1bmVzCitBVkFJTFRVTkVTICs9ICJtaXBzNjRyMiBtaXBzNjRyMmVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0cjIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0fSBtaXBzNjRyMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0cjIgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRyMiA9ICJtaXBzNjRyMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRyMiA9ICJtaXBzNjQgbWlwczY0cjIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRyMmVsID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsfSBtaXBzNjRyMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0cjJlbCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NHIyZWwgPSAibWlwczY0cjJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRyMmVsID0gIm1pcHM2NGVsIG1pcHM2NHIyZWwiCisKKyMgTUlQUyA2NHIyIFNvZnQgRmxvYXQKK0FWQUlMVFVORVMgKz0gIm1pcHM2NHIyLW5mIG1pcHM2NHIyZWwtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRyMi1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmZ9IG1pcHM2NHIyIgorQkFTRV9MSUJfdHVuZS1taXBzNjRyMi1uZiA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NHIyLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRyMi1uZiA9ICJtaXBzNjQtbmYgbWlwczY0cjItbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRyMmVsLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mfSBtaXBzNjRyMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0cjJlbC1uZiA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NHIyZWwtbmYgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NHIyZWwtbmYgPSAibWlwczY0ZWwtbmYgbWlwczY0cjJlbC1uZiIKKworIyBNSVBTIDY0cjIgbjMyCitBVkFJTFRVTkVTICs9ICJtaXBzNjRyMi1uMzIgbWlwczY0cjJlbC1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRyMi1uMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW4zMn0gbWlwczY0cjIiCitCQVNFX0xJQl90dW5lLW1pcHM2NHIyLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NHIyLW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0cjItbjMyID0gIm1pcHM2NC1uMzIgbWlwczY0cjItbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0cjJlbC1uMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbjMyfSBtaXBzNjRyMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0cjJlbC1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRyMmVsLW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0cjJlbC1uMzIgPSAibWlwczY0ZWwtbjMyIG1pcHM2NHIyZWwtbjMyIgorCisjIE1JUFMgNjRyMiBuMzIgYW5kIFNvZnQgRmxvYXQKK0FWQUlMVFVORVMgKz0gIm1pcHM2NHIyLW5mLW4zMiBtaXBzNjRyMmVsLW5mLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NHIyLW5mLW4zMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYtbjMyfSBtaXBzNjRyMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0cjItbmYtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0cjItbmYtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRyMi1uZi1uMzIgPSAibWlwczY0LW5mLW4zMiBtaXBzNjRyMi1uZi1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRyMmVsLW5mLW4zMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRlbC1uZi1uMzJ9IG1pcHM2NHIyIgorQkFTRV9MSUJfdHVuZS1taXBzNjRyMmVsLW5mLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NHIyZWwtbmYtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRyMmVsLW5mLW4zMiA9ICJtaXBzNjRlbC1uZi1uMzIgbWlwczY0cjJlbC1uZi1uMzIiCisKKyMgTUlQUyA2NHIyIG8zMgorQVZBSUxUVU5FUyArPSAibWlwczY0cjItbzMyIG1pcHM2NHIyZWwtbzMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0cjItbzMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1vMzJ9IG1pcHM2NHIyIgorQkFTRV9MSUJfdHVuZS1taXBzNjRyMi1vMzIgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0cjItbzMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRyMi1vMzIgPSAibWlwcyBtaXBzNjQtbzMyIG1pcHM2NHIyLW8zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NHIyZWwtbzMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW8zMn0gbWlwczY0cjIiCitCQVNFX0xJQl90dW5lLW1pcHM2NHIyZWwtbzMyID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NHIyZWwtbzMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRyMmVsLW8zMiA9ICJtaXBzZWwgbWlwczY0ZWwtbzMyIG1pcHM2NHIyZWwtbzMyIgorCisjIE1JUFMgNjRyMiBvMzIgYW5kIFNvZnQgRmxvYXQKK0FWQUlMVFVORVMgKz0gIm1pcHM2NHIyLW5mLW8zMiBtaXBzNjRyMmVsLW5mLW8zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NHIyLW5mLW8zMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYtbzMyfSBtaXBzNjRyMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0cjItbmYtbzMyID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NHIyLW5mLW8zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0cjItbmYtbzMyID0gIm1pcHMtbmYgbWlwczY0cjItbmYtbzMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0cjJlbC1uZi1vMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbmYtbzMyfSBtaXBzNjRyMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0cjJlbC1uZi1vMzIgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0cjJlbC1uZi1vMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NHIyZWwtbmYtbzMyID0gIm1pcHNlbC1uZiBtaXBzNjRyMmVsLW5mLW8zMiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0cjYuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjRyNi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhZDU2NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0cjYuaW5jCkBAIC0wLDAgKzEsMzIgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzaXNhNjRyNmVsIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYworCitUVU5FVkFMSURbbWlwc2lzYTY0cjZdID0gIkVuYWJsZSBtaXBzaXNhNjRyNiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdtaXBzaXNhNjRyNicsICcgLW1hcmNoPW1pcHM2NHI2JywgJycsIGQpfSIKKworIyBCYXNlIFR1bmVzCitBVkFJTFRVTkVTICs9ICJtaXBzaXNhNjRyNiBtaXBzaXNhNjRyNmVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2lzYTY0cjYgPSAiYmlnZW5kaWFuIGZwdS1oYXJkIG42NCBtaXBzaXNhNjRyNiByNiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNpc2E2NHI2ID0gIiR7VFVORV9BUkNIfSIKK0JBU0VfTElCX3R1bmUtbWlwc2lzYTY0cjYgPSAibGliNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2lzYTY0cjYgPSAibWlwc2lzYTY0cjYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzaXNhNjRyNmVsID0gImZwdS1oYXJkIHI2IG42NCBtaXBzaXNhNjRyNiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNpc2E2NHI2ZWwgPSAiJHtUVU5FX0FSQ0h9IgorQkFTRV9MSUJfdHVuZS1taXBzaXNhNjRyNmVsID0gImxpYjY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHNpc2E2NHI2ZWwgPSAibWlwc2lzYTY0cjZlbCIKKworIyBTb2Z0IEZsb2F0CitBVkFJTFRVTkVTICs9ICJtaXBzaXNhNjRyNi1uZiBtaXBzaXNhNjRyNmVsLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2lzYTY0cjYtbmYgPSAiYmlnZW5kaWFuIHI2IG42NCBtaXBzaXNhNjRyNiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNpc2E2NHI2LW5mID0gIiR7VFVORV9BUkNIfSIKK0JBU0VfTElCX3R1bmUtbWlwc2lzYTY0cjYtbmYgPSAibGliNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2lzYTY0cjYtbmYgPSAibWlwc2lzYTY0cjYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzaXNhNjRyNmVsLW5mID0gInI2IG42NCBtaXBzaXNhNjRyNiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNpc2E2NHI2ZWwtbmYgPSAiJHtUVU5FX0FSQ0h9IgorQkFTRV9MSUJfdHVuZS1taXBzaXNhNjRyNmVsLW5mID0gImxpYjY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHNpc2E2NHI2ZWwtbmYgPSAibWlwc2lzYTY0cjZlbC1uZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwppbmRleCBhMWNhOWJlLi5iYzI2YTBmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDBtYy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jCkBAIC0xMiwzICsxMiw2IEBACiAKICMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU1MDBtYyBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKIEdMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAncHBjZTUwMG1jJywgJy13aXRoLWNwdT1lNTAwbWMnLCAnJywgZCl9IgorCisjIHBhc3MgLW1jcHU9ZTUwMG1jIGZvciBwcGNlNTAwbWMga2VybmVsIGNyb3NzIGNvbXBpbGUKK1RBUkdFVF9DQ19LRVJORUxfQVJDSCA9ICItbWNwdT1lNTAwbWMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCmluZGV4IGFjZTI2MTQuLmNlYmIyNDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCkBAIC0xOCwzICsxOCw2IEBACiAKICMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU1NTAwIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQogR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdlNTUwMCcsICctLXdpdGgtY3B1PWU1NTAwJywgJycsIGQpfSIKKworIyBRRU1VIHVzZXJtb2RlIGZhaWxzIHdpdGggaW52YWxpZCBpbnN0cnVjdGlvbiBlcnJvciAoWU9DVE86ICMxMDMwNCkKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRF9hcHBlbmQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnZTU1MDAnLCAnIHFlbXUtdXNlcm1vZGUnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYwppbmRleCBkYTFlODY0Li41ZGI3ZTc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYwpAQCAtMTksMyArMTksNiBAQAogIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgZTY1MDAgc3BlY2lmaWMgbGlicmFyeQogR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGM2NCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnZTY1MDAnLCAnLS13aXRoLWNwdT1lNjUwMCcsICcnLCBkKX0iCiBHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnZTY1MDAnLCAnLS13aXRoLWNwdT1lNjUwMCcsICcnLCBkKX0iCisKKyMgUUVNVSB1c2VybW9kZSBmYWlscyB3aXRoIGludmFsaWQgaW5zdHJ1Y3Rpb24gZXJyb3IgKFlPQ1RPOiAjMTAzMDQpCitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2U2NTAwJywgJyBxZW11LXVzZXJtb2RlJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYwppbmRleCA1NjYzMTQ1Li40NzllODllIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCkBAIC0yMCw3ICsyMCw3IEBACiAjIGtlcm5lbC1yZWxhdGVkIHZhcmlhYmxlcwogIwogUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID8/PSAibGludXgteW9jdG8iCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/Pz0gIjQuNCUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/Pz0gIjQuOCUiCiAKICMKICMgWFNFUlZFUiBzdWJjb21wb25lbnRzLCB1c2VkIHRvIGJ1aWxkIHRoZSBYU0VSVkVSIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgppbmRleCBjZGFkMDNmLi4xNzQwMmVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtLmNvbmYKQEAgLTEwLDMgKzEwLDExIEBACiAKIFNFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5QU1BMCAxMTUyMDA7dHR5QU1BMSIKIAorIyBGb3IgcnVucWVtdQorUUJfU1lTVEVNX05BTUUgPSAicWVtdS1zeXN0ZW0tYXJtIgorUUJfTUFDSElORSA9ICItbWFjaGluZSB2ZXJzYXRpbGVwYiIKK1FCX0tFUk5FTF9DTURMSU5FX0FQUEVORCA9ICJjb25zb2xlPXR0eUFNQTAsMTE1MjAwIGNvbnNvbGU9dHR5IgorIyBBZGQgdGhlICd2aXJ0aW8tcm5nLXBjaScgZGV2aWNlIG90aGVyd2lzZSB0aGUgZ3Vlc3QgbWF5IHJ1biBvdXQgb2YgZW50cm9weQorUUJfT1BUX0FQUEVORCA9ICItc2hvdy1jdXJzb3IgLXVzYiAtdXNiZGV2aWNlIHRhYmxldCAtZGV2aWNlIHZpcnRpby1ybmctcGNpIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz89ICI0LjglIgorUUJfRFRCID0gIiR7QGJhc2VfdmVyc2lvbl9sZXNzX29yX2VxdWFsKCdQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0bycsICc0LjcnLCAnJywgJ3pJbWFnZS12ZXJzYXRpbGUtcGIuZHRiJywgZCl9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mCmluZGV4IGY1OWZiMTUuLmQwNzUwNjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybTY0LmNvbmYKQEAgLTgsMyArOCwxNyBAQAogS0VSTkVMX0lNQUdFVFlQRSA9ICJJbWFnZSIKIAogU0VSSUFMX0NPTlNPTEVTID0gIjM4NDAwO3R0eUFNQTAgMzg0MDA7aHZjMCIKKworIyBGb3IgcnVucWVtdQorUUJfU1lTVEVNX05BTUUgPSAicWVtdS1zeXN0ZW0tYWFyY2g2NCIKK1FCX01FTSA9ICItbSA1MTIiCitRQl9NQUNISU5FID0gIi1tYWNoaW5lIHZpcnQiCitRQl9DUFUgPSAiLWNwdSBjb3J0ZXgtYTU3IgorUUJfS0VSTkVMX0NNRExJTkVfQVBQRU5EID0gImNvbnNvbGU9dHR5QU1BMCwzODQwMCIKKyMgQWRkIHRoZSAndmlydGlvLXJuZy1wY2knIGRldmljZSBvdGhlcndpc2UgdGhlIGd1ZXN0IG1heSBydW4gb3V0IG9mIGVudHJvcHkKK1FCX09QVF9BUFBFTkQgPSAiLXNob3ctY3Vyc29yIC1kZXZpY2UgdmlydGlvLXJuZy1wY2kiCitRQl9UQVBfT1BUID0gIi1uZXRkZXYgdGFwLGlkPW5ldDAsaWZuYW1lPUBUQVBALHNjcmlwdD1ubyxkb3duc2NyaXB0PW5vIC1kZXZpY2UgdmlydGlvLW5ldC1kZXZpY2UsbmV0ZGV2PW5ldDAsbWFjPUBNQUNAIgorUUJfU0xJUlBfT1BUID0gIi1uZXRkZXYgdXNlcixpZD1uZXQwIC1kZXZpY2UgdmlydGlvLW5ldC1kZXZpY2UsbmV0ZGV2PW5ldDAiCitRQl9ST09URlNfT1BUID0gIi1kcml2ZSBpZD1kaXNrMCxmaWxlPUBST09URlNALGlmPW5vbmUsZm9ybWF0PXJhdyAtZGV2aWNlIHZpcnRpby1ibGstZGV2aWNlLGRyaXZlPWRpc2swIgorUUJfU0VSSUFMX09QVCA9ICItZGV2aWNlIHZpcnRpby1zZXJpYWwtZGV2aWNlIC1jaGFyZGV2IG51bGwsaWQ9dmlydGNvbiAtZGV2aWNlIHZpcnRjb25zb2xlLGNoYXJkZXY9dmlydGNvbiIKK1FCX1RDUFNFUklBTF9PUFQgPSAiIC1kZXZpY2UgdmlydGlvLXNlcmlhbC1kZXZpY2UgLWNoYXJkZXYgc29ja2V0LGlkPXZpcnRjb24scG9ydD1AUE9SVEAsaG9zdD0xMjcuMC4wLjEgLWRldmljZSB2aXJ0Y29uc29sZSxjaGFyZGV2PXZpcnRjb24iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mCmluZGV4IGZiZjgxMzcuLjMxODJlYTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mCkBAIC00LDYgKzQsNyBAQAogCiByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCiByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LW1pcHMuaW5jCiAKIEtFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKIEtFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzNjQuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwczY0LmNvbmYKaW5kZXggOGMzZjFmZS4uOTUyOWY0YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzNjQuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mCkBAIC00LDYgKzQsNyBAQAogCiByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCiByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11Ym9vdC1taXBzLmluYwogCiBLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCiBLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXBwYy5jb25mCmluZGV4IGJmMDAzOGQuLjg3MDNjMjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpAQCAtMTEsMyArMTEsMTEgQEAKIAogU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCiAKKyMgRm9yIHJ1bnFlbXUKK1FCX1NZU1RFTV9OQU1FID0gInFlbXUtc3lzdGVtLXBwYyIKK1FCX01BQ0hJTkUgPSAiLW1hY2hpbmUgbWFjOTkiCitRQl9DUFUgPSAiLWNwdSBHNCIKK1FCX0tFUk5FTF9DTURMSU5FX0FQUEVORCA9ICJjb25zb2xlPXR0eSBjb25zb2xlPXR0eVMwIgorIyBBZGQgdGhlICd2aXJ0aW8tcm5nLXBjaScgZGV2aWNlIG90aGVyd2lzZSB0aGUgZ3Vlc3QgbWF5IHJ1biBvdXQgb2YgZW50cm9weQorUUJfT1BUX0FQUEVORCA9ICItc2hvdy1jdXJzb3IgLXVzYiAtdXNiZGV2aWNlIHRhYmxldCAtZGV2aWNlIHZpcnRpby1ybmctcGNpIgorUUJfVEFQX09QVCA9ICItbmV0ZGV2IHRhcCxpZD1uZXQwLGlmbmFtZT1AVEFQQCxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyAtZGV2aWNlIHZpcnRpby1uZXQtcGNpLG5ldGRldj1uZXQwLG1hYz1ATUFDQCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LTY0LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni02NC5jb25mCmluZGV4IDQ4OTE5NGEuLmIxOTFkZGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LTY0LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgpAQCAtMTAsNiArMTAsNyBAQAogcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwogREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgogcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11Ym9vdC14ODYuaW5jCiAKIEtFUk5FTF9JTUFHRVRZUEUgPSAiYnpJbWFnZSIKIApAQCAtMjIsNyArMjMsMTAgQEAKICAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCiAgICAgICAgICAgIHhmODYtdmlkZW8tY2lycnVzIFwKICAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCi0gICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorICAgICAgICAgICB4Zjg2LXZpZGVvLXZtd2FyZSBcCisgICAgICAgICAgIHhmODYtdmlkZW8tbW9kZXNldHRpbmcgXAorICAgICAgICAgICB4c2VydmVyLXhvcmctbW9kdWxlLWxpYmludDEwIFwKKyAgICAgICAgICAgIgogCiBNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni5jb25mCmluZGV4IDNjYzgwOTEuLjg1NTVmZDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYuY29uZgpAQCAtOSw2ICs5LDcgQEAKIAogcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwogcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LXg4Ni5pbmMKIAogS0VSTkVMX0lNQUdFVFlQRSA9ICJiekltYWdlIgogCkBAIC0yMSw3ICsyMiwxMCBAQAogICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKICAgICAgICAgICAgeGY4Ni12aWRlby1jaXJydXMgXAogICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKLSAgICAgICAgICAgeGY4Ni12aWRlby12bXdhcmUiCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1tb2Rlc2V0dGluZyBcCisgICAgICAgICAgIHhzZXJ2ZXIteG9yZy1tb2R1bGUtbGliaW50MTAgXAorICAgICAgICAgICAiCiAKIE1BQ0hJTkVfRkVBVFVSRVMgKz0gIng4NiIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tdWx0aWxpYi5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tdWx0aWxpYi5jb25mCmluZGV4IDUwMzAzZmIuLjE0MDNhMDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL211bHRpbGliLmNvbmYKQEAgLTI0LDQgKzI0LDUgQEAKICMgaW5zaWRlIHRoZSBtdWx0aWxpYiBzeXNyb290LiAgRml4IHRoaXMgYnkgZXhwbGljaXRseSBhZGRpbmcgdGhlIE1BQ0hJTkUncwogIyBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcGtnY29uZmlnIGxvY2F0aW9uIHRvIFBLR19DT05GSUdfUEFUSC4KIFBLR19DT05GSUdfUEFUSCAuPSAiOiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0ke2RhdGFkaXJ9L3BrZ2NvbmZpZyIKLVBLR19DT05GSUdfUEFUSFt2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSIKK1BLR19DT05GSUdfUEFUSFt2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSBkYXRhZGlyIFNUQUdJTkdfRElSIgorUEtHX0NPTkZJR19QQVRIW3ZhcmRlcHZhbHVlZXhjbHVkZV0gPSAiOiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0ke2RhdGFkaXJ9L3BrZ2NvbmZpZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc2FuaXR5LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3Nhbml0eS5jb25mCmluZGV4IDcwMjFiZjkuLmRjZjYwYjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc2FuaXR5LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZgpAQCAtMyw3ICszLDcgQEAKICMgU2VlIHNhbml0eS5iYmNsYXNzCiAjCiAjIEV4cGVydCB1c2VycyBjYW4gY29uZmlybSB0aGVpciBzYW5pdHkgd2l0aCAidG91Y2ggY29uZi9zYW5pdHkuY29uZiIKLUJCX01JTl9WRVJTSU9OID0gIjEuMjkuMSIKK0JCX01JTl9WRVJTSU9OID0gIjEuMzEuMiIKIAogU0FOSVRZX0FCSUZJTEUgPSAiJHtUTVBESVJ9L2FiaV92ZXJzaW9uIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvYmxhY2tsaXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2JsYWNrbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZkYjhmMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvYmxhY2tsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1saWJuZW9uMjctZ251dGxzCi1vcGVuamRrLTYtanJlLWhlYWRsZXNzCi1vcGVuamRrLTYtanJlLWxpYgotb3Blbmpkay02LWpyZQotbGliZGJ1cy0xLTMKLWxpYm5lb24yNy1nbnV0bHMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9maWx0ZXJzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDdmNzAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLS91c3IvbG9jYWwvbGliL3B5dGhvbjIuNgotL3Vzci9saWIvcHl0aG9uMi42Ci0vdXNyL2xpYi9weW1vZHVsZXMvcHl0aG9uMi42Ci0vdXNyL2xpYi9wZXJsLzUuMTAKLSMgd2hpY2ggaXMgcGFydCBvZiB0aGUgZGViaWFudXRpbHMgcGFja2FnZXMsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHB1dCB0aGUgZW50aXJlCi0jIGRlYmlhbnV0aWxzIHBhY2thZ2UgaW4gdGhlIHdoaXRlbGlzdC4KLS91c3IvYmluL3doaWNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L3doaXRlbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmZTk2My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotYmFzZS1maWxlcwotZGFzaAotbGliYWNsMQotbGliYXR0cjEKLWxpYmJ6Mi0xLjAKLWxpYmM2Ci1saWJjLWJpbgotbGliZ2xpYjIuMC0wCi1saWJuY3Vyc2VzNQotbGlic2VsaW51eDEKLWxpYnNxbGl0ZTMtMAotbGlic3NsMC45LjgKLW1pbWUtc3VwcG9ydAotcGVybC1iYXNlCi1weXRob24yLjYKLXB5dGhvbjIuNi1taW5pbWFsCi1weXRob24tYXBwb3J0Ci1weXRob24tZ3N0MC4xMAotcHl0aG9uLWltYWdpbmcKLXB5dGhvbi1taW5pbWFsCi1weXRob24tc3VwcG9ydAotcHl0aG9uLXpvcGUuaW50ZXJmYWNlCi16bGliMWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2YmNiNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9ibGFja2xpc3QKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXVkZXYKLWRrcGcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2ZpbHRlcnMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjEwZmNiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2ZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vdG1wCi0vZXRjL2xvY2FsdGltZQotL2V0Yy9sZC5zby5jYWNoZQotL2V0Yy9sZC5zby5jb25mCi0vZXRjL3Bhc3N3ZAotL2V0Yy9ncm91cAotL2V0Yy9uc3N3aXRjaC5jb25mCi0vcHJvYwotL2Rldi9udWxsCi0vZGV2L3R0eQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGVjMmFmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWJhc2gKLWJ6aXAyCi1jY2FjaGUKLWNvcmV1dGlscwotY3BwCi1maWxlCi1maW5kdXRpbHMKLWdhd2sKLWdyZXAKLWhvc3RuYW1lCi1tYWtlCi1zZWQKLXRhcgotdXRpbC1saW51eAotemxpYjFnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24KaW5kZXggYzI3ODgwZS4uNzk2MTI1YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi90b2FzdGVyY29uZi5qc29uCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbgpAQCAtMTMsNyArMTMsNyBAQAogICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgT3BlbkVtYmVkZGVkIiwKICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxvY2FsIiwKICAgICAgICAgICAgICJhcGl1cmwiOiAiLi4vLi4vIiwKLSAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiamV0aHJvIiwgImtyb2dvdGgiXSwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiXSwKICAgICAgICAgICAgICJsYXllcnMiOiBbCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJvcGVuZW1iZWRkZWQtY29yZSIsCkBAIC0yNywxMyArMjcsMTMgQEAKICAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCiAgICAgICAgICAgICAic291cmNldHlwZSI6ICJsYXllcmluZGV4IiwKICAgICAgICAgICAgICJhcGl1cmwiOiAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYXBpLyIsCi0gICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJqZXRocm8iLCAia3JvZ290aCJdCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciJdCiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogIkltcG9ydGVkIGxheWVycyIsCiAgICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCiAgICAgICAgICAgICAiYXBpdXJsIjogIiIsCi0gICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJqZXRocm8iLCAia3JvZ290aCIsICJIRUFEIl0KKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgIkhFQUQiXQogCiAgICAgICAgIH0KICAgICBdLApAQCAtNDUsMTggKzQ1LDYgQEAKICAgICAgICAgICAgICJkaXJwYXRoIjogIiIKICAgICAgICAgfSwKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiamV0aHJvIiwKLSAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCi0gICAgICAgICAgICAiYnJhbmNoIjogIjEuMjgiLAotICAgICAgICAgICAgImRpcnBhdGgiOiAiIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJrcm9nb3RoIiwKLSAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCi0gICAgICAgICAgICAiYnJhbmNoIjogIjEuMzAiLAotICAgICAgICAgICAgImRpcnBhdGgiOiAiIgotICAgICAgICB9LAotICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJIRUFEIiwKICAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCiAgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLApAQCAtNzcsMjQgKzY1LDYgQEAKICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy9cIj5PcGVuRW1iZWRkZWQgbWFzdGVyPC9hPiBicmFuY2gsIHdoZXJlIGFjdGl2ZSBkZXZlbG9wbWVudCB0YWtlcyBwbGFjZS4gVGhpcyBpcyBub3QgYSBzdGFibGUgYnJhbmNoLCBzbyB5b3VyIGJ1aWxkcyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZC4iCiAgICAgICAgIH0sCiAgICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImpldGhybyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3BlbkVtYmVkZGVkIEpldGhybyIsCi0gICAgICAgICAgICAiYml0YmFrZSI6ICJqZXRocm8iLAotICAgICAgICAgICAgImJyYW5jaCI6ICJqZXRocm8iLAotICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKLSAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKLSAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nLz9oPWpldGhyb1wiPk9wZW5FbWJlZGRlZCBcIkpldGhyb1wiPC9hPiBicmFuY2giCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImtyb2dvdGgiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBLcm9nb3RoIiwKLSAgICAgICAgICAgICJiaXRiYWtlIjogImtyb2dvdGgiLAotICAgICAgICAgICAgImJyYW5jaCI6ICJrcm9nb3RoIiwKLSAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCi0gICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCi0gICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8/aD1rcm9nb3RoXCI+T3BlbkVtYmVkZGVkIFwiS3JvZ290aFwiPC9hPiBicmFuY2giCi0gICAgICAgIH0sCi0gICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImxvY2FsIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhbCBPcGVuRW1iZWRkZWQiLAogICAgICAgICAgICAgImJpdGJha2UiOiAiSEVBRCIsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9maWxlcy9leHQtc2RrLXByZXBhcmUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9maWxlcy9leHQtc2RrLXByZXBhcmUucHkKaW5kZXggNjA1ZTJlYi4uNzhjMWQxNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvZmlsZXMvZXh0LXNkay1wcmVwYXJlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2V4dC1zZGstcHJlcGFyZS5weQpAQCAtNSw5MyArNSw2MiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNpZ25hbAogCi1kZWYgZXhlY193YXRjaChjbWQsICoqb3B0aW9ucyk6Ci0gICAgIiIiUnVuIHByb2dyYW0gd2l0aCBzdGRvdXQgc2hvd24gb24gc3lzLnN0ZG91dCIiIgotICAgIGlmIGlzaW5zdGFuY2UoY21kLCBiYXNlc3RyaW5nKSBhbmQgbm90ICJzaGVsbCIgaW4gb3B0aW9uczoKLSAgICAgICAgb3B0aW9uc1sic2hlbGwiXSA9IFRydWUKK2RlZiByZWVuYWJsZV9zaWdpbnQoKToKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfREZMKQogCi0gICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCi0gICAgICAgIGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCAqKm9wdGlvbnMKLSAgICApCitkZWYgcnVuX2NvbW1hbmRfaW50ZXJydXB0aWJsZShjbWQpOgorICAgICIiIgorICAgIFJ1biBhIGNvbW1hbmQgd2l0aCBvdXRwdXQgZGlzcGxheWVkIG9uIHRoZSBjb25zb2xlLCBidXQgZW5zdXJlIGFueSBDdHJsK0MgaXMKKyAgICBwcm9jZXNzZWQgb25seSBieSB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAgICAiIiIKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHRyeToKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSwgcHJlZXhlY19mbj1yZWVuYWJsZV9zaWdpbnQpCisgICAgZmluYWxseToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0RGTCkKKyAgICByZXR1cm4gcmV0CiAKLSAgICBidWYgPSAnJwotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIG91dCA9IHByb2Nlc3Muc3Rkb3V0LnJlYWQoMSkKLSAgICAgICAgaWYgb3V0OgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGJ1ZiArPSBvdXQKLSAgICAgICAgZWxpZiBvdXQgPT0gJycgYW5kIHByb2Nlc3MucG9sbCgpICE9IE5vbmU6Ci0gICAgICAgICAgICBicmVhawotCi0gICAgcmV0dXJuIHByb2Nlc3MucmV0dXJuY29kZSwgYnVmCi0KLWRlZiBjaGVja191bmV4cGVjdGVkKGxpbmVzLCByZWNpcGVzKToKLSAgICAiIiJDaGVjayBmb3IgdW5leHBlY3RlZCBvdXRwdXQgbGluZXMgZnJvbSBkcnkgcnVuIiIiCi0gICAgdW5leHBlY3RlZCA9IFtdCi0gICAgZm9yIGxpbmUgaW4gbGluZXMuc3BsaXRsaW5lcygpOgotICAgICAgICBpZiAnUnVubmluZyB0YXNrJyBpbiBsaW5lOgotICAgICAgICAgICAgZm9yIHJlY2lwZSBpbiByZWNpcGVzOgotICAgICAgICAgICAgICAgIGlmIHJlY2lwZSBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgnUnVubmluZycsIDEpWy0xXQotICAgICAgICAgICAgICAgIGlmICdkb19ybV93b3JrJyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZC5hcHBlbmQobGluZS5yc3RyaXAoKSkKLSAgICAgICAgZWxpZiAnUnVubmluZyBzZXRzY2VuZScgaW4gbGluZToKLSAgICAgICAgICAgIHVuZXhwZWN0ZWQuYXBwZW5kKGxpbmUucnN0cmlwKCkpCi0gICAgcmV0dXJuIHVuZXhwZWN0ZWQKK2RlZiBnZXRfbGFzdF9jb25zb2xlbG9nKCk6CisgICAgJycnUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBjb25zb2xlIGxvZyBmaWxlJycnCisgICAgbG9nZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSksICd0bXAnLCAnbG9nJywgJ2Nvb2tlcicpCisgICAgaWYgb3MucGF0aC5leGlzdHMobG9nZGlyKToKKyAgICAgICAgbWNkaXIgPSBvcy5saXN0ZGlyKGxvZ2RpcikKKyAgICAgICAgaWYgbWNkaXI6CisgICAgICAgICAgICBsb2dkaXIgPSBvcy5wYXRoLmpvaW4obG9nZGlyLCBtY2RpclswXSkKKyAgICAgICAgICAgIGxvZ2ZpbGVzID0gW29zLnBhdGguam9pbihsb2dkaXIsIGZuKSBmb3IgZm4gaW4gb3MubGlzdGRpcihsb2dkaXIpXQorICAgICAgICAgICAgbG9nZmlsZXMuc29ydChrZXk9b3MucGF0aC5nZXRtdGltZSkKKyAgICAgICAgICAgIGlmIGxvZ2ZpbGVzOgorICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obG9nZGlyLCBsb2dmaWxlc1stMV0pCisgICAgcmV0dXJuIE5vbmUKIAogZGVmIG1haW4oKToKICAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKKyAgICAgICAgcHJpbnQoJ1BsZWFzZSBzcGVjaWZ5IG91dHB1dCBsb2cgZmlsZScpCisgICAgICAgIHJldHVybiAxCisgICAgbG9nZmlsZSA9IHN5cy5hcmd2WzFdCisgICAgaWYgbGVuKHN5cy5hcmd2KSA8IDM6CiAgICAgICAgIHNka190YXJnZXRzID0gW10KICAgICBlbHNlOgotICAgICAgICBzZGtfdGFyZ2V0cyA9ICcgJy5qb2luKHN5cy5hcmd2WzE6XSkuc3BsaXQoKQorICAgICAgICBzZGtfdGFyZ2V0cyA9ICcgJy5qb2luKHN5cy5hcmd2WzI6XSkuc3BsaXQoKQogICAgIGlmIG5vdCBzZGtfdGFyZ2V0czoKICAgICAgICAgIyBKdXN0IGRvIGEgcGFyc2Ugc28gdGhlIGNhY2hlIGlzIHByaW1lZAotICAgICAgICByZXQsIF8gPSBleGVjX3dhdGNoKCdiaXRiYWtlIC1wJykKKyAgICAgICAgcmV0ID0gcnVuX2NvbW1hbmRfaW50ZXJydXB0aWJsZSgnYml0YmFrZSAtcCAtLXF1aWV0JykKICAgICAgICAgcmV0dXJuIHJldAogCi0gICAgcHJpbnQoJ1ByZXBhcmluZyBTREsgZm9yICVzLi4uJyAlICcsICcuam9pbihzZGtfdGFyZ2V0cykpCisgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICdhJykgYXMgbG9nZjoKKyAgICAgICAgbG9nZi53cml0ZSgnUHJlcGFyaW5nIFNESyBmb3IgJXMuLi5cbicgJSAnLCAnLmpvaW4oc2RrX3RhcmdldHMpKQogCi0gICAgcmV0LCBvdXQgPSBleGVjX3dhdGNoKCdiaXRiYWtlICVzIC0tc2V0c2NlbmUtb25seScgJSAnICcuam9pbihzZGtfdGFyZ2V0cykpCi0gICAgaWYgcmV0OgotICAgICAgICByZXR1cm4gcmV0Ci0KLSAgICB0YXJnZXRsaXN0ID0gW10KLSAgICBmb3IgdGFyZ2V0IGluIHNka190YXJnZXRzOgotICAgICAgICBpZiAnOicgaW4gdGFyZ2V0OgotICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnNwbGl0KCc6JylbMF0KLSAgICAgICAgaWYgbm90IHRhcmdldCBpbiB0YXJnZXRsaXN0OgotICAgICAgICAgICAgdGFyZ2V0bGlzdC5hcHBlbmQodGFyZ2V0KQotCi0gICAgcmVjaXBlcyA9IFtdCi0gICAgZm9yIHRhcmdldCBpbiB0YXJnZXRsaXN0OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgoJ2JpdGJha2UgLWUgJXMnICUgdGFyZ2V0KS5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBvdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRklMRT0nKToKLSAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCc9JykKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsKSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLmFwcGVuZChzcGxpdHZhbFsxXS5zdHJpcCgnIicpKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHByaW50KCdFUlJPUjogRmFpbGVkIHRvIGdldCByZWNpcGUgZm9yIHRhcmdldCAlczpcbiVzJyAlICh0YXJnZXQsIGUub3V0cHV0KSkKLSAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICB0cnk6Ci0gICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCdiaXRiYWtlICVzIC1uJyAlICcgJy5qb2luKHNka190YXJnZXRzKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQotICAgICAgICB1bmV4cGVjdGVkID0gY2hlY2tfdW5leHBlY3RlZChvdXQsIHJlY2lwZXMpCi0gICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgICAgIHByaW50KCdFUlJPUjogRmFpbGVkIHRvIGV4ZWN1dGUgZHJ5LXJ1bjpcbiVzJyAlIGUub3V0cHV0KQotICAgICAgICByZXR1cm4gMQotCi0gICAgaWYgdW5leHBlY3RlZDoKLSAgICAgICAgcHJpbnQoJ0VSUk9SOiBVbmV4cGVjdGVkIHRhc2tzIG9yIHNldHNjZW5lIGxlZnQgb3ZlciB0byBiZSBleGVjdXRlZDonKQotICAgICAgICBmb3IgbGluZSBpbiB1bmV4cGVjdGVkOgotICAgICAgICAgICAgcHJpbnQoJyAgJyArIGxpbmUpCi0gICAgICAgIHJldHVybiAxCisgICAgICAgIHJldCA9IHJ1bl9jb21tYW5kX2ludGVycnVwdGlibGUoJ0JCX1NFVFNDRU5FX0VORk9SQ0U9MSBiaXRiYWtlIC0tcXVpZXQgJXMnICUgJyAnLmpvaW4oc2RrX3RhcmdldHMpKQorICAgICAgICBsYXN0bG9nID0gZ2V0X2xhc3RfY29uc29sZWxvZygpCisgICAgICAgIGlmIGxhc3Rsb2c6CisgICAgICAgICAgICB3aXRoIG9wZW4obGFzdGxvZywgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGxvZ2Yud3JpdGUobGluZSkKKyAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiBTREsgcHJlcGFyYXRpb24gZmFpbGVkOiBlcnJvciBsb2cgd3JpdHRlbiB0byAlcycgJSBsb2dmaWxlKQorICAgICAgICAgICAgcmV0dXJuIHJldAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRyeToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1leHRyYWN0LnNoCmluZGV4IDM5N2JlMTEuLjkyOTVkZGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaApAQCAtMSw2ICsxLDggQEAKICMhL2Jpbi9zaAogCiBbIC16ICIkRU5WQ0xFQU5FRCIgXSAmJiBleGVjIC91c3IvYmluL2VudiAtaSBFTlZDTEVBTkVEPTEgSE9NRT0iJEhPTUUiIFwKKwlMQ19BTEw9ZW5fVVMuVVRGLTggXAorCVRFUk09JFRFUk0gXAogCWh0dHBfcHJveHk9IiRodHRwX3Byb3h5IiBodHRwc19wcm94eT0iJGh0dHBzX3Byb3h5IiBmdHBfcHJveHk9IiRmdHBfcHJveHkiIFwKIAlub19wcm94eT0iJG5vX3Byb3h5IiBhbGxfcHJveHk9IiRhbGxfcHJveHkiIEdJVF9QUk9YWV9DT01NQU5EPSIkR0lUX1BST1hZX0NPTU1BTkQiICIkMCIgIiRAIgogWyAtZiAvZXRjL2Vudmlyb25tZW50IF0gJiYgLiAvZXRjL2Vudmlyb25tZW50CkBAIC0yNiw3ICsyOCw3IEBACiBpZiBbICIkSU5TVF9BUkNIIiAhPSAiJFNES19BUkNIIiBdOyB0aGVuCiAJIyBBbGxvdyBmb3IgaW5zdGFsbGF0aW9uIG9mIGl4ODYgU0RLIG9uIHg4Nl82NCBob3N0CiAJaWYgWyAiJElOU1RfQVJDSCIgIT0geDg2XzY0IC1vICIkU0RLX0FSQ0giICE9IGl4ODYgXTsgdGhlbgotCQllY2hvICJFcnJvcjogSW5zdGFsbGF0aW9uIG1hY2hpbmUgbm90IHN1cHBvcnRlZCEiCisJCWVjaG8gIkVycm9yOiBJbmNvbXBhdGlibGUgU0RLIGluc3RhbGxlciEgWW91ciBob3N0IGlzICRJTlNUX0FSQ0ggYW5kIHRoaXMgU0RLIHdhcyBidWlsdCBmb3IgJFNES19BUkNIIGhvc3RzLiIKIAkJZXhpdCAxCiAJZmkKIGZpCkBAIC00NSw3ICs0Nyw4IEBACiBzYXZlc2NyaXB0cz0wCiB2ZXJib3NlPTAKIHB1Ymxpc2g9MAotd2hpbGUgZ2V0b3B0cyAiOnlkOm5wRFJTIiBPUFQ7IGRvCitsaXN0Y29udGVudHM9MAord2hpbGUgZ2V0b3B0cyAiOnlkOm5wRFJTbCIgT1BUOyBkbwogCWNhc2UgJE9QVCBpbgogCXkpCiAJCWFuc3dlcj0iWSIKQEAgLTcwLDYgKzczLDkgQEAKIAlTKQogCQlzYXZlc2NyaXB0cz0xCiAJCTs7CisJbCkKKwkJbGlzdGNvbnRlbnRzPTEKKwkJOzsKIAkqKQogCQllY2hvICJVc2FnZTogJChiYXNlbmFtZSAkMCkgWy15XSBbLWQgPGRpcj5dIgogCQllY2hvICIgIC15ICAgICAgICAgQXV0b21hdGljIHllcyB0byBhbGwgcHJvbXB0cyIKQEAgLTgxLDExICs4NywxOCBAQAogCQllY2hvICIgIC1TICAgICAgICAgU2F2ZSByZWxvY2F0aW9uIHNjcmlwdHMiCiAJCWVjaG8gIiAgLVIgICAgICAgICBEbyBub3QgcmVsb2NhdGUgZXhlY3V0YWJsZXMiCiAJCWVjaG8gIiAgLUQgICAgICAgICB1c2Ugc2V0IC14IHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIgorCQllY2hvICIgIC1sICAgICAgICAgbGlzdCBmaWxlcyB0aGF0IHdpbGwgYmUgZXh0cmFjdGVkIgogCQlleGl0IDEKIAkJOzsKIAllc2FjCiBkb25lCiAKK3BheWxvYWRfb2Zmc2V0PSQoKCQoZ3JlcCAtbmEgLW0xICJeTUFSS0VSOiQiICQwfGN1dCAtZCc6JyAtZjEpICsgMSkpCitpZiBbICIkbGlzdGNvbnRlbnRzIiA9ICIxIiBdIDsgdGhlbgorICAgIHRhaWwgLW4gKyRwYXlsb2FkX29mZnNldCAkMHwgdGFyIHR2SiB8fCBleGl0IDEKKyAgICBleGl0CitmaQorCiB0aXRsZXN0cj0iQFNES19USVRMRUAgaW5zdGFsbGVyIHZlcnNpb24gQFNES19WRVJTSU9OQCIKIHByaW50ZiAiJXNcbiIgIiR0aXRsZXN0ciIKIHByaW50ZiAiJSR7I3RpdGxlc3RyfXNcbiIgfCB0ciAiICIgIj0iCkBAIC0xMzAsNiArMTQzLDE2IEBACiAJCSAgICAgImNoYXJhY3RlcnMgc3VjaCBhcyBzcGFjZXMsIEAsIFwkIG9yICsuIEFib3J0ISIKIAkJZXhpdCAxCiAJZmkKKwkjIFRoZSBidWlsZCBzeXN0ZW0gZG9lc24ndCB3b3JrIHdlbGwgd2l0aCAvdG1wIG9uIE5GUworCWZzX2Rldl9wYXRoPSIkdGFyZ2V0X3Nka19kaXIiCisJd2hpbGUgWyAhIC1kICIkZnNfZGV2X3BhdGgiIF0gOyBkbworCQlmc19kZXZfcGF0aD1gZGlybmFtZSAkZnNfZGV2X3BhdGhgCisgICAgICAgIGRvbmUKKwlmc19kZXZfdHlwZT1gc3RhdCAtZiAtYyAnJXQnICIkZnNfZGV2X3BhdGgiYAorCWlmIFsgIiRmc2RldnR5cGUiID0gIjY5NjkiIF0gOyB0aGVuCisJCWVjaG8gIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHBhdGggJHRhcmdldF9zZGtfZGlyIGlzIG9uIE5GUywgdGhpcyBpcyBub3QgcG9zc2libGUuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKIGVsc2UKIAlpZiBbIC1uICIkKGVjaG8gJHRhcmdldF9zZGtfZGlyfGdyZXAgJyAnKSIgXTsgdGhlbgogCQllY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkdGFyZ2V0X3Nka19kaXIpIGNvbnRhaW5zIHNwYWNlcy4gQWJvcnQhIgpAQCAtMTg1LDggKzIwOCw2IEBACiAJJFNVRE9fRVhFQyBta2RpciAtcCAkdGFyZ2V0X3Nka19kaXIgPi9kZXYvbnVsbCAyPiYxCiBmaQogCi1wYXlsb2FkX29mZnNldD0kKCgkKGdyZXAgLW5hIC1tMSAiXk1BUktFUjokIiAkMHxjdXQgLWQnOicgLWYxKSArIDEpKQotCiBwcmludGYgIkV4dHJhY3RpbmcgU0RLLi4uIgogdGFpbCAtbiArJHBheWxvYWRfb2Zmc2V0ICQwfCAkU1VET19FWEVDIHRhciB4SiAtQyAkdGFyZ2V0X3Nka19kaXIgLS1jaGVja3BvaW50PS4yNTAwICRFWFRSQV9UQVJfT1BUSU9OUyB8fCBleGl0IDEKIGVjaG8gImRvbmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoCmluZGV4IGQ0YmNmMGUuLmUzYzEwMDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoCkBAIC0xLDMgKzEsOCBAQAoraWYgISB4YXJncyAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCWVjaG8gInhhcmdzIGlzIHJlcXVpcmVkIGJ5IHRoZSByZWxvY2F0aW9uIHNjcmlwdCwgcGxlYXNlIGluc3RhbGwgaXQgZmlyc3QuIEFib3J0ISIKKwlleGl0IDEKK2ZpCisKICMgZml4IGR5bmFtaWMgbG9hZGVyIHBhdGhzIGluIGFsbCBFTEYgU0RLIGJpbmFyaWVzCiBuYXRpdmVfc3lzcm9vdD0kKCRTVURPX0VYRUMgY2F0ICRlbnZfc2V0dXBfc2NyaXB0IHxncmVwICdPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9J3xjdXQgLWQnPScgLWYyfHRyIC1kICciJykKIGRsX3BhdGg9JCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290L2xpYiAtbmFtZSAibGQtbGludXgqIikKQEAgLTcsNiArMTIsMTAgQEAKIGZpCiBleGVjdXRhYmxlX2ZpbGVzPSQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdCAtdHlwZSBmIFwKIAlcKCAtcGVybSAtMDEwMCAtbyAtcGVybSAtMDAxMCAtbyAtcGVybSAtMDAwMSBcKSAtcHJpbnRmICInJWgvJWYnICIpCitpZiBbICJ4JGV4ZWN1dGFibGVfZmlsZXMiID0gIngiIF07IHRoZW4KKyAgIGVjaG8gIlNESyByZWxvY2F0ZSBmYWlsZWQsIGNvdWxkIG5vdCBnZXQgZXhlY3V0YWxiZSBmaWxlcyIKKyAgIGV4aXQgMQorZmkKIAogdGRpcj1gbWt0ZW1wIC1kYAogaWYgWyB4JHRkaXIgPSB4IF0gOyB0aGVuCkBAIC0xNCw3ICsyMyw3IEBACiAgICBleGl0IDEKIGZpCiBjYXQgPDxFT0YgPj4gJHRkaXIvcmVsb2NhdGVfc2RrLnNoCi0jIS9iaW4vYmFzaAorIyEvYmluL3NoCiBmb3IgcHkgaW4gcHl0aG9uIHB5dGhvbjIgcHl0aG9uMwogZG8KIAlQWVRIT049XGB3aGljaCBcJHtweX0gMj4vZGV2L251bGxcYApAQCAtNTMsOSArNjIsMTggQEAKICAgICAgICAgLWUgInM6XiMhICovdXNyL2Jpbi9wZXJsLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6ZyIgXAogICAgICAgICAtZSAiczogL3Vzci9iaW4vcGVybDogL3Vzci9iaW4vZW52IHBlcmw6ZyIKIAoraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJZWNobyAiRmFpbGVkIHRvIHJlcGxhY2UgcGVybC4gUmVsb2NhdGUgc2NyaXB0IGZhaWxlZC4gQWJvcnQhIgorCWV4aXQgMQorZmkKKwogIyBjaGFuZ2UgYWxsIHN5bWxpbmtzIHBvaW50aW5nIHRvIEBTREtQQVRIQAogZm9yIGwgaW4gJCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290IC10eXBlIGwpOyBkbwogCSRTVURPX0VYRUMgbG4gLXNmbiAkKHJlYWRsaW5rICRsfCRTVURPX0VYRUMgc2VkIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRElSOiR0YXJnZXRfc2RrX2RpcjoiKSAkbAorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQllY2hvICJGYWlsZWQgdG8gc2V0dXAgc3ltbGlua3MuIFJlbG9jYXRlIHNjcmlwdCBmYWlsZWQuIEFib3J0ISIKKwkJZXhpdCAxCisgICAgZmkKIGRvbmUKIAogZWNobyBkb25lCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQppbmRleCA1Mzk1Yzc2Li5iNmMwMjY1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9idWlsZGhpc3RvcnlfYW5hbHlzaXMucHkKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgICAgICBkZWYgcGtnbGlzdF9jb21iaW5lKGRlcHZlcik6CiAgICAgICAgICAgICBwa2dsaXN0ID0gW10KLSAgICAgICAgICAgIGZvciBrLHYgaW4gZGVwdmVyLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIGssdiBpbiBkZXB2ZXIuaXRlbXMoKToKICAgICAgICAgICAgICAgICBpZiB2OgogICAgICAgICAgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZCgiJXMgKCVzKSIgJSAoayx2KSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTkwLDcgKzE5MCw3IEBACiAKIAogZGVmIGJsb2JfdG9fZGljdChibG9iKToKLSAgICBhbGluZXMgPSBibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICBhbGluZXMgPSBbbGluZSBmb3IgbGluZSBpbiBibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXRsaW5lcygpXQogICAgIGFkaWN0ID0ge30KICAgICBmb3IgbGluZSBpbiBhbGluZXM6CiAgICAgICAgIHNwbGl0diA9IFtpLnN0cmlwKCkgZm9yIGkgaW4gbGluZS5zcGxpdCgnPScsMSldCkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICBhZGljdCA9IGZpbGVfbGlzdF90b19kaWN0KGFsaW5lcykKICAgICBiZGljdCA9IGZpbGVfbGlzdF90b19kaWN0KGJsaW5lcykKICAgICBmaWxlY2hhbmdlcyA9IFtdCi0gICAgZm9yIHBhdGgsIHNwbGl0diBpbiBhZGljdC5pdGVyaXRlbXMoKToKKyAgICBmb3IgcGF0aCwgc3BsaXR2IGluIGFkaWN0Lml0ZW1zKCk6CiAgICAgICAgIG5ld3NwbGl0diA9IGJkaWN0LnBvcChwYXRoLCBOb25lKQogICAgICAgICBpZiBuZXdzcGxpdHY6CiAgICAgICAgICAgICAjIENoZWNrIHR5cGUKQEAgLTM1OSw2ICszNTksMjQgQEAKICAgICAgICAgICAgICAgICBpZiAnICcuam9pbihhbGlzdCkgPT0gJyAnLmpvaW4oYmxpc3QpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCisgICAgICAgICAgICBpZiBrZXkgPT0gJ1BLR1InIGFuZCBub3QgcmVwb3J0X2FsbDoKKyAgICAgICAgICAgICAgICB2ZXJzID0gW10KKyAgICAgICAgICAgICAgICAjIHN0cmlwIGxlYWRpbmcgJ3InIGFuZCBkb3RzCisgICAgICAgICAgICAgICAgZm9yIHZlciBpbiAoYXN0ci5zcGxpdCgpWzBdLCBic3RyLnNwbGl0KClbMF0pOgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXIuc3RhcnRzd2l0aCgncicpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyWzE6XQorICAgICAgICAgICAgICAgICAgICB2ZXJzLmFwcGVuZCh2ZXIucmVwbGFjZSgnLicsICcnKSkKKyAgICAgICAgICAgICAgICBtYXhsZW4gPSBtYXgobGVuKHZlcnNbMF0pLCBsZW4odmVyc1sxXSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIHBhZCB3aXRoICcwJyBhbmQgY29udmVydCB0byBpbnQKKyAgICAgICAgICAgICAgICAgICAgdmVycyA9IFtpbnQodmVyLmxqdXN0KG1heGxlbiwgJzAnKSkgZm9yIHZlciBpbiB2ZXJzXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBkZWNyZW1lbnRzIGFuZCBpbmNyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIGlmIGFicyh2ZXJzWzBdIC0gdmVyc1sxXSkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBrZXksIGFzdHIsIGJzdHIsIG1vbml0b3JlZCkKICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKICAgICByZXR1cm4gY2hhbmdlcwpAQCAtMzc4LDM0ICszOTYsMzQgQEAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdsYXRlc3QnOgogICAgICAgICAgICAgICAgIGNoYW5nZXMuZXh0ZW5kKGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBkLmFfYmxvYiwgZC5iX2Jsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpKQogICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6Ci0gICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JyksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JyksIFRydWUpCiAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQogICAgICAgICBlbGlmIHBhdGguc3RhcnRzd2l0aCgnaW1hZ2VzLycpOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYV9ibG9iLnBhdGgpCiAgICAgICAgICAgICBpZiBmaWxlbmFtZSBpbiBpbWdfbW9uaXRvcl9maWxlczoKICAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnZmlsZXMtaW4taW1hZ2UudHh0JzoKLSAgICAgICAgICAgICAgICAgICAgYWxpbmVzID0gZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQotICAgICAgICAgICAgICAgICAgICBibGluZXMgPSBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGFsaW5lcyA9IGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGJsaW5lcyA9IGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzID0gY29tcGFyZV9maWxlX2xpc3RzKGFsaW5lcyxibGluZXMpCiAgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVjaGFuZ2VzOgogICAgICAgICAgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBOb25lLCBOb25lLCBUcnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY2hnLmZpbGVjaGFuZ2VzID0gZmlsZWNoYW5nZXMKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKICAgICAgICAgICAgICAgICBlbGlmIGZpbGVuYW1lID09ICdpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnOgotICAgICAgICAgICAgICAgICAgICBhbGluZXMgPSBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCi0gICAgICAgICAgICAgICAgICAgIGJsaW5lcyA9IGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgYWxpbmVzID0gZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxpbmVzID0gZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMgPSBjb21wYXJlX2xpc3RzKGFsaW5lcyxibGluZXMpCiAgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVjaGFuZ2VzOgogICAgICAgICAgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBOb25lLCBOb25lLCBUcnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY2hnLmZpbGVjaGFuZ2VzID0gZmlsZWNoYW5nZXMKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JyksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JyksIFRydWUpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUgPT0gJ2ltYWdlLWluZm8udHh0JzoKICAgICAgICAgICAgICAgICBjaGFuZ2VzLmV4dGVuZChjb21wYXJlX2RpY3RfYmxvYnMocGF0aCwgZC5hX2Jsb2IsIGQuYl9ibG9iLCByZXBvcnRfYWxsLCByZXBvcnRfdmVyKSkKICAgICAgICAgICAgIGVsaWYgJy9pbWFnZS1maWxlcy8nIGluIHBhdGg6Ci0gICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JyksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JyksIFRydWUpCiAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQogCiAgICAgIyBMb29rIGZvciBhZGRlZCBwcmVpbnN0L3Bvc3RpbnN0L3ByZXJtL3Bvc3RybQpAQCAtNDE5LDcgKzQzNyw3IEBACiAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnbGF0ZXN0JzoKICAgICAgICAgICAgICAgICBhZGRlZHBrZ3MuYXBwZW5kKHBhdGgpCiAgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ2xhdGVzdC4nKToKLSAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWVbNzpdLCAnJywgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZVs3Ol0sICcnLCBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLCBUcnVlKQogICAgICAgICAgICAgICAgIGFkZGVkY2hhbmdlcy5hcHBlbmQoY2hnKQogICAgIGZvciBjaGcgaW4gYWRkZWRjaGFuZ2VzOgogICAgICAgICBmb3VuZCA9IEZhbHNlCkBAIC00MzYsNyArNDU0LDcgQEAKICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKToKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmFfYmxvYi5wYXRoKQogICAgICAgICAgICAgaWYgZmlsZW5hbWUgIT0gJ2xhdGVzdCcgYW5kIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ2xhdGVzdC4nKToKLSAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWVbNzpdLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksICcnLCBUcnVlKQorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZVs3Ol0sIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JyksICcnLCBUcnVlKQogICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKIAogICAgICMgTGluayByZWxhdGVkIGNoYW5nZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc2V4dGVuZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc2V4dGVuZC5weQppbmRleCA1MTA3ZWNkLi40YzhhMDAwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5CkBAIC0xLDMgKzEsNSBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCisKIGNsYXNzIENsYXNzRXh0ZW5kZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0bmFtZSwgZCk6CiAgICAgICAgIHNlbGYuZXh0bmFtZSA9IGV4dG5hbWUKQEAgLTc3LDcgKzc5LDcgQEAKICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkVYVEVORFBLR1YiLCBvcmlnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcykKLSAgICAgICAgbmV3ZGVwcyA9IHt9CisgICAgICAgIG5ld2RlcHMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCiAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKICAgICAgICAgICAgIG5ld2RlcHNbc2VsZi5tYXBfZGVwZW5kcyhkZXApXSA9IGRlcHNbZGVwXQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2xhc3N1dGlscy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5CmluZGV4IDU4MTg4ZmQuLmU3ODU2YzggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5CkBAIC0xLDQgKzEsMTEgQEAKLWNsYXNzIENsYXNzUmVnaXN0cnkodHlwZSk6CisKK2NsYXNzIENsYXNzUmVnaXN0cnlNZXRhKHR5cGUpOgorICAgICIiIkdpdmUgZWFjaCBDbGFzc1JlZ2lzdHJ5IHRoZWlyIG93biByZWdpc3RyeSIiIgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgIGNscy5yZWdpc3RyeSA9IHt9CisgICAgICAgIHR5cGUuX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpCisKK2NsYXNzIENsYXNzUmVnaXN0cnkodHlwZSwgbWV0YWNsYXNzPUNsYXNzUmVnaXN0cnlNZXRhKToKICAgICAiIiJNYWludGFpbiBhIHJlZ2lzdHJ5IG9mIGNsYXNzZXMsIGluZGV4ZWQgYnkgbmFtZS4KIAogTm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhhdCB0aGUgbmFtZXMgYmUgdW5pcXVlLCBhcyBpdCB1c2VzCkBAIC0xMiwxMiArMTksNiBAQAogY29udHJvbCBvdmVyIHdoZXRoZXIgdGhlIGNsYXNzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJlZ2lzdHJ5IChlLmcuIHRvIGtlZXAKIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBvdXQgb2YgdGhlIHJlZ2lzdHJ5KS4iIiIKICAgICBwcmlvcml0eSA9IDAKLSAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgotICAgICAgICAiIiJHaXZlIGVhY2ggQ2xhc3NSZWdpc3RyeSB0aGVpciBvd24gcmVnaXN0cnkiIiIKLSAgICAgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKLSAgICAgICAgICAgIGNscy5yZWdpc3RyeSA9IHt9Ci0gICAgICAgICAgICB0eXBlLl9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKQotCiAgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKICAgICAgICAgc3VwZXIoQ2xhc3NSZWdpc3RyeSwgY2xzKS5fX2luaXRfXyhuYW1lLCBiYXNlcywgYXR0cnMpCiAgICAgICAgIHRyeToKQEAgLTM0LDcgKzM1LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBwcmlvcml0aXplZCh0Y2xzKToKLSAgICAgICAgcmV0dXJuIHNvcnRlZCh0Y2xzLnJlZ2lzdHJ5LnZhbHVlcygpLAorICAgICAgICByZXR1cm4gc29ydGVkKGxpc3QodGNscy5yZWdpc3RyeS52YWx1ZXMoKSksCiAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSB2OiB2LnByaW9yaXR5LCByZXZlcnNlPVRydWUpCiAKICAgICBkZWYgdW5yZWdpc3RlcihjbHMpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2NvcHlfYnVpbGRzeXN0ZW0ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQppbmRleCA3YjlhMGVlLi5hZmFmZjY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQpAQCAtMTcsNyArMTcsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0LCBkKToKICAgICAgICAgc2VsZi5kID0gZAogICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0Ci0gICAgICAgIHNlbGYubGF5ZXJkaXJzID0gZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBzZWxmLmxheWVyZGlycyA9IFtvcy5wYXRoLmFic3BhdGgocHRoKSBmb3IgcHRoIGluIGQuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpLnNwbGl0KCldCiAgICAgICAgIHNlbGYubGF5ZXJzX2V4Y2x1ZGUgPSAoZC5nZXRWYXIoJ1NES19MQVlFUlNfRVhDTFVERScsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAKICAgICBkZWYgY29weV9iaXRiYWtlX2FuZF9sYXllcnMoc2VsZiwgZGVzdGRpciwgd29ya3NwYWNlX25hbWU9Tm9uZSk6CkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQogICAgICAgICBsYXllcnMgPSBsaXN0KHNlbGYubGF5ZXJkaXJzKQogCi0gICAgICAgIGNvcmViYXNlID0gc2VsZi5kLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKQorICAgICAgICBjb3JlYmFzZSA9IG9zLnBhdGguYWJzcGF0aChzZWxmLmQuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpKQogICAgICAgICBsYXllcnMuYXBwZW5kKGNvcmViYXNlKQogCiAgICAgICAgICMgRXhjbHVkZSBsYXllcnMKQEAgLTEyNCw3ICsxMjQsNyBAQAogZGVmIGdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpOgogICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSkpCiAgICAgZGVwZCA9IGQuZ2V0VmFyKCdCQl9UQVNLREVQREFUQScsIEZhbHNlKQotICAgIHRhc2tzID0gWyclcy4lcycgJSAodlsyXSwgdlsxXSkgZm9yIHYgaW4gZGVwZC5pdGVydmFsdWVzKCldCisgICAgdGFza3MgPSBbJyVzLiVzJyAlICh2WzJdLCB2WzFdKSBmb3IgdiBpbiBkZXBkLnZhbHVlcygpXQogICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX2xvY2tlZHNpZ3Moc2lnZmlsZSwgdGFza3MpCiAKIGRlZiBwcnVuZV9sb2NrZWRzaWdzKGV4Y2x1ZGVkX3Rhc2tzLCBleGNsdWRlZF90YXJnZXRzLCBsb2NrZWRzaWdzLCBwcnVuZWRfb3V0cHV0KToKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICAgICAgICAgICAgICBpbnZhbHVlID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCiAKLWRlZiBtZXJnZV9sb2NrZWRzaWdzKGNvcHlfdGFza3MsIGxvY2tlZHNpZ3NfbWFpbiwgbG9ja2Vkc2lnc19leHRyYSwgbWVyZ2VkX291dHB1dCwgY29weV9vdXRwdXQpOgorZGVmIG1lcmdlX2xvY2tlZHNpZ3MoY29weV90YXNrcywgbG9ja2Vkc2lnc19tYWluLCBsb2NrZWRzaWdzX2V4dHJhLCBtZXJnZWRfb3V0cHV0LCBjb3B5X291dHB1dD1Ob25lKToKICAgICBtZXJnZWQgPSB7fQogICAgIGFyY2hfb3JkZXIgPSBbXQogICAgIHdpdGggb3Blbihsb2NrZWRzaWdzX21haW4sICdyJykgYXMgZjoKQEAgLTE5NSwyMyArMTk1LDQ2IEBACiAgICAgICAgICAgICAgICAgICAgIGZ1bGx0eXBlcy5hcHBlbmQodHlwZW5hbWUpCiAgICAgICAgICAgICBmLndyaXRlKCdTSUdHRU5fTE9DS0VEU0lHU19UWVBFUyA9ICIlcyJcbicgJSAnICcuam9pbihmdWxsdHlwZXMpKQogCi0gICAgd3JpdGVfc2lnc19maWxlKGNvcHlfb3V0cHV0LCB0b2NvcHkua2V5cygpLCB0b2NvcHkpCisgICAgaWYgY29weV9vdXRwdXQ6CisgICAgICAgIHdyaXRlX3NpZ3NfZmlsZShjb3B5X291dHB1dCwgbGlzdCh0b2NvcHkua2V5cygpKSwgdG9jb3B5KQogICAgIGlmIG1lcmdlZF9vdXRwdXQ6CiAgICAgICAgIHdyaXRlX3NpZ3NfZmlsZShtZXJnZWRfb3V0cHV0LCBhcmNoX29yZGVyLCBtZXJnZWQpCiAKLWRlZiBjcmVhdGVfbG9ja2VkX3NzdGF0ZV9jYWNoZShsb2NrZWRzaWdzLCBpbnB1dF9zc3RhdGVfY2FjaGUsIG91dHB1dF9zc3RhdGVfY2FjaGUsIGQsIGZpeGVkbHNic3RyaW5nPSIiKToKK2RlZiBjcmVhdGVfbG9ja2VkX3NzdGF0ZV9jYWNoZShsb2NrZWRzaWdzLCBpbnB1dF9zc3RhdGVfY2FjaGUsIG91dHB1dF9zc3RhdGVfY2FjaGUsIGQsIGZpeGVkbHNic3RyaW5nPSIiLCBmaWx0ZXJmaWxlPU5vbmUpOgorICAgIGltcG9ydCBzaHV0aWwKICAgICBiYi5ub3RlKCdHZW5lcmF0aW5nIHNzdGF0ZS1jYWNoZS4uLicpCiAKICAgICBuYXRpdmVsc2JzdHJpbmcgPSBkLmdldFZhcignTkFUSVZFTFNCU1RSSU5HJywgVHJ1ZSkKLSAgICBiYi5wcm9jZXNzLnJ1bigiZ2VuLWxvY2tlZHNpZy1jYWNoZSAlcyAlcyAlcyAlcyIgJSAobG9ja2Vkc2lncywgaW5wdXRfc3N0YXRlX2NhY2hlLCBvdXRwdXRfc3N0YXRlX2NhY2hlLCBuYXRpdmVsc2JzdHJpbmcpKQotICAgIGlmIGZpeGVkbHNic3RyaW5nOgorICAgIGJiLnByb2Nlc3MucnVuKCJnZW4tbG9ja2Vkc2lnLWNhY2hlICVzICVzICVzICVzICVzIiAlIChsb2NrZWRzaWdzLCBpbnB1dF9zc3RhdGVfY2FjaGUsIG91dHB1dF9zc3RhdGVfY2FjaGUsIG5hdGl2ZWxzYnN0cmluZywgZmlsdGVyZmlsZSBvciAnJykpCisgICAgaWYgZml4ZWRsc2JzdHJpbmcgYW5kIG5hdGl2ZWxzYnN0cmluZyAhPSBmaXhlZGxzYnN0cmluZzoKICAgICAgICAgbmF0aXZlZGlyID0gb3V0cHV0X3NzdGF0ZV9jYWNoZSArICcvJyArIG5hdGl2ZWxzYnN0cmluZwogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG5hdGl2ZWRpcik6CiAgICAgICAgICAgICBkZXN0ZGlyID0gb3MucGF0aC5qb2luKG91dHB1dF9zc3RhdGVfY2FjaGUsIGZpeGVkbHNic3RyaW5nKQotICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RkaXIpCisgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhuYXRpdmVkaXIpOgorICAgICAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKGRlc3RkaXIsIG9zLnBhdGgucmVscGF0aChzcmMsIG5hdGl2ZWRpcikpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHJlYWR5IGV4aXN0cywgYW5kIGl0J2xsIGJlIHRoZSBzYW1lIGZpbGUsIHNvIGp1c3QgZGVsZXRlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShkZXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKHNyYywgZGVzdCkKIAotICAgICAgICAgICAgZGlybGlzdCA9IG9zLmxpc3RkaXIobmF0aXZlZGlyKQotICAgICAgICAgICAgZm9yIGkgaW4gZGlybGlzdDoKLSAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4obmF0aXZlZGlyLCBpKQotICAgICAgICAgICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgaSkKLSAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc3JjLCBkZXN0KQorZGVmIGNoZWNrX3NzdGF0ZV90YXNrX2xpc3QoZCwgdGFyZ2V0cywgZmlsdGVyb3V0ZmlsZSwgY21kcHJlZml4PScnLCBjd2Q9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgYmIubm90ZSgnR2VuZXJhdGluZyBzc3RhdGUgdGFzayBsaXN0Li4uJykKKworICAgIGlmIG5vdCBjd2Q6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgaWYgbG9nZmlsZToKKyAgICAgICAgbG9ncGFyYW0gPSAnLWwgJXMnICUgbG9nZmlsZQorICAgIGVsc2U6CisgICAgICAgIGxvZ3BhcmFtID0gJycKKyAgICBjbWQgPSAiJXNCQl9TRVRTQ0VORV9FTkZPUkNFPTEgUFNFVURPX0RJU0FCTEVEPTEgb2UtY2hlY2stc3N0YXRlICVzIC1zIC1vICVzICVzIiAlIChjbWRwcmVmaXgsIHRhcmdldHMsIGZpbHRlcm91dGZpbGUsIGxvZ3BhcmFtKQorICAgIGVudiA9IGRpY3QoZC5nZXRWYXIoJ0JCX09SSUdFTlYnLCBGYWxzZSkpCisgICAgZW52LnBvcCgnQlVJTERESVInLCAnJykKKyAgICBwYXRoaXRlbXMgPSBlbnZbJ1BBVEgnXS5zcGxpdCgnOicpCisgICAgZW52WydQQVRIJ10gPSAnOicuam9pbihbaXRlbSBmb3IgaXRlbSBpbiBwYXRoaXRlbXMgaWYgbm90IGl0ZW0uZW5kc3dpdGgoJy9iaXRiYWtlL2JpbicpXSkKKyAgICBiYi5wcm9jZXNzLnJ1bihjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgZW52PWVudiwgY3dkPWN3ZCwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kYXRhLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkKaW5kZXggZTQ5NTcyMS4uZWU0ODk1MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkKQEAgLTcsMTEgKzcsMTEgQEAKICAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZ3Moa2V5KQogICAgIGlmIGZsYWdzIGlzIG5vdCBOb25lOgogICAgICAgICBmbGFncyA9IGRpY3QoKGZsYWcsIGQuZXhwYW5kKHZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgIGZvciBmbGFnLCB2YWx1ZSBpbiBmbGFncy5pdGVyaXRlbXMoKSkKKyAgICAgICAgICAgICAgICAgICAgIGZvciBmbGFnLCB2YWx1ZSBpbiBsaXN0KGZsYWdzLml0ZW1zKCkpKQogICAgIGVsc2U6CiAgICAgICAgIGZsYWdzID0ge30KIAogICAgIHRyeToKICAgICAgICAgcmV0dXJuIG9lLm1ha2V0eXBlLmNyZWF0ZShkLmdldFZhcihrZXksIFRydWUpIG9yICcnLCB2YXJfdHlwZSwgKipmbGFncykKLSAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvciksIGV4YzoKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXhjOgogICAgICAgICBiYi5tc2cuZmF0YWwoIkRhdGEiLCAiJXM6ICVzIiAlIChrZXksIHN0cihleGMpKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kaXN0cm9fY2hlY2sucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZGlzdHJvX2NoZWNrLnB5CmluZGV4IDg2NTVhNmYuLjg3YzUyZmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kaXN0cm9fY2hlY2sucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQpAQCAtMSw1MyArMSwzNSBAQAogZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgotQGNvbnRleHRtYW5hZ2VyCisKK2Zyb20gYmIudXRpbHMgaW1wb3J0IGV4cG9ydF9wcm94aWVzCisKIGRlZiBjcmVhdGVfc29ja2V0KHVybCwgZCk6CiAgICAgaW1wb3J0IHVybGxpYgotICAgIHNvY2tldCA9IHVybGxpYi51cmxvcGVuKHVybCwgcHJveGllcz1nZXRfcHJveGllcyhkKSkKLSAgICB0cnk6Ci0gICAgICAgIHlpZWxkIHNvY2tldAotICAgIGZpbmFsbHk6Ci0gICAgICAgIHNvY2tldC5jbG9zZSgpCiAKLWRlZiBnZXRfcHJveGllcyhkKToKLSAgICBwcm94aWVzID0ge30KLSAgICBmb3Iga2V5IGluIFsnaHR0cCcsICdodHRwcycsICdmdHAnLCAnZnRwcycsICdubycsICdhbGwnXToKLSAgICAgICAgcHJveHkgPSBkLmdldFZhcihrZXkgKyAnX3Byb3h5JywgVHJ1ZSkKLSAgICAgICAgaWYgcHJveHk6Ci0gICAgICAgICAgICBwcm94aWVzW2tleV0gPSBwcm94eQotICAgIHJldHVybiBwcm94aWVzCisgICAgc29ja2V0ID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgZXhwb3J0X3Byb3hpZXMoZCkKKyAgICAgICAgc29ja2V0ID0gdXJsbGliLnJlcXVlc3QudXJsb3Blbih1cmwpCisgICAgZXhjZXB0OgorICAgICAgICBiYi53YXJuKCJkaXN0cm9fY2hlY2s6IGNyZWF0ZV9zb2NrZXQgdXJsICVzIGNhbid0IGFjY2VzcyIgJSB1cmwpCisKKyAgICByZXR1cm4gc29ja2V0CiAKIGRlZiBnZXRfbGlua3NfZnJvbV91cmwodXJsLCBkKToKICAgICAiUmV0dXJuIGFsbCB0aGUgaHJlZiBsaW5rcyBmb3VuZCBvbiB0aGUgd2ViIGxvY2F0aW9uIgogCi0gICAgaW1wb3J0IHNnbWxsaWIKLSAgICAKLSAgICBjbGFzcyBMaW5rc1BhcnNlcihzZ21sbGliLlNHTUxQYXJzZXIpOgotICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgcyk6Ci0gICAgICAgICAgICAiUGFyc2UgdGhlIGdpdmVuIHN0cmluZyAncycuIgotICAgICAgICAgICAgc2VsZi5mZWVkKHMpCi0gICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcmJvc2U9MCk6Ci0gICAgICAgICAgICAiSW5pdGlhbGlzZSBhbiBvYmplY3QgcGFzc2luZyAndmVyYm9zZScgdG8gdGhlIHN1cGVyY2xhc3MuIgotICAgICAgICAgICAgc2dtbGxpYi5TR01MUGFyc2VyLl9faW5pdF9fKHNlbGYsIHZlcmJvc2UpCi0gICAgICAgICAgICBzZWxmLmh5cGVybGlua3MgPSBbXQotICAgIAotICAgICAgICBkZWYgc3RhcnRfYShzZWxmLCBhdHRyaWJ1dGVzKToKLSAgICAgICAgICAgICJQcm9jZXNzIGEgaHlwZXJsaW5rIGFuZCBpdHMgJ2F0dHJpYnV0ZXMnLiIKLSAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBhdHRyaWJ1dGVzOgotICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gImhyZWYiOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmh5cGVybGlua3MuYXBwZW5kKHZhbHVlLnN0cmlwKCcvJykpCi0gICAgCi0gICAgICAgIGRlZiBnZXRfaHlwZXJsaW5rcyhzZWxmKToKLSAgICAgICAgICAgICJSZXR1cm4gdGhlIGxpc3Qgb2YgaHlwZXJsaW5rcy4iCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5oeXBlcmxpbmtzCisgICAgZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAsIFNvdXBTdHJhaW5lcgogCi0gICAgd2l0aCBjcmVhdGVfc29ja2V0KHVybCxkKSBhcyBzb2NrOgorICAgIGh5cGVybGlua3MgPSBbXQorCisgICAgd2VicGFnZSA9ICcnCisgICAgc29jayA9IGNyZWF0ZV9zb2NrZXQodXJsLGQpCisgICAgaWYgc29jazoKICAgICAgICAgd2VicGFnZSA9IHNvY2sucmVhZCgpCiAKLSAgICBsaW5rc3BhcnNlciA9IExpbmtzUGFyc2VyKCkKLSAgICBsaW5rc3BhcnNlci5wYXJzZSh3ZWJwYWdlKQotICAgIHJldHVybiBsaW5rc3BhcnNlci5nZXRfaHlwZXJsaW5rcygpCisgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAod2VicGFnZSwgImh0bWwucGFyc2VyIiwgcGFyc2Vfb25seT1Tb3VwU3RyYWluZXIoImEiKSkKKyAgICBmb3IgbGluZSBpbiBzb3VwLmZpbmRfYWxsKCdhJywgaHJlZj1UcnVlKToKKyAgICAgICAgaHlwZXJsaW5rcy5hcHBlbmQobGluZVsnaHJlZiddLnN0cmlwKCcvJykpCisgICAgcmV0dXJuIGh5cGVybGlua3MKIAogZGVmIGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSh1cmwsIGQpOgogICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIG51bWVyaWMgcmVsZWFzZSBvbiB0aGUgZ2l2ZW4gdXJsIgpAQCAtMTA0LDggKzg2LDggQEAKIAogICAgIGJiLm5vdGUoIlJlYWRpbmcgJXM6ICVzIiAlICh1cmwsIHNlY3Rpb24pKQogICAgIGxpbmtzID0gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCwgZCkKLSAgICBzcnBtcyA9IGZpbHRlcihpc19zcmNfcnBtLCBsaW5rcykKLSAgICBuYW1lc19saXN0ID0gbWFwKHBhY2thZ2VfbmFtZV9mcm9tX3NycG0sIHNycG1zKQorICAgIHNycG1zID0gbGlzdChmaWx0ZXIoaXNfc3JjX3JwbSwgbGlua3MpKQorICAgIG5hbWVzX2xpc3QgPSBsaXN0KG1hcChwYWNrYWdlX25hbWVfZnJvbV9zcnBtLCBzcnBtcykpCiAKICAgICBuZXdfcGtncyA9IFtdCiAgICAgZm9yIHBrZ3MgaW4gbmFtZXNfbGlzdDoKQEAgLTE2MiwxNCArMTQ0LDE4IEBACiAKIGRlZiBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCBzZWN0aW9uLCBkKToKICAgICAiUmV0dXJuIHRoZSBsaXN0IG9mIHBhY2thZ2UtbmFtZXMgc3RvcmVkIGluIHRoZSBkZWJpYW4gc3R5bGUgU291cmNlcy5neiBmaWxlIgotICAgIHdpdGggY3JlYXRlX3NvY2tldCh1cmwsZCkgYXMgc29jazoKLSAgICAgICAgd2VicGFnZSA9IHNvY2sucmVhZCgpCi0gICAgICAgIGltcG9ydCB0ZW1wZmlsZQotICAgICAgICB0bXBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3diJywgcHJlZml4PSdvZWNvcmUuJywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQotICAgICAgICB0bXBmaWxlbmFtZT10bXBmaWxlLm5hbWUKLSAgICAgICAgdG1wZmlsZS53cml0ZShzb2NrLnJlYWQoKSkKLSAgICAgICAgdG1wZmlsZS5jbG9zZSgpCisgICAgaW1wb3J0IHRlbXBmaWxlCiAgICAgaW1wb3J0IGd6aXAKKworICAgIHdlYnBhZ2UgPSAnJworICAgIHNvY2sgPSBjcmVhdGVfc29ja2V0KHVybCxkKQorICAgIGlmIHNvY2s6CisgICAgICAgIHdlYnBhZ2UgPSBzb2NrLnJlYWQoKQorCisgICAgdG1wZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3YicsIHByZWZpeD0nb2Vjb3JlLicsIHN1ZmZpeD0nLnRtcCcsIGRlbGV0ZT1GYWxzZSkKKyAgICB0bXBmaWxlbmFtZT10bXBmaWxlLm5hbWUKKyAgICB0bXBmaWxlLndyaXRlKHNvY2sucmVhZCgpKQorICAgIHRtcGZpbGUuY2xvc2UoKQogICAgIGJiLm5vdGUoIlJlYWRpbmcgJXM6ICVzIiAlICh1cmwsIHNlY3Rpb24pKQogCiAgICAgZiA9IGd6aXAub3Blbih0bXBmaWxlbmFtZSkKQEAgLTI2Niw5ICsyNTIsOSBAQAogICAgIGltcG9ydCBmY250bAogICAgIHRyeToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRhdGV0aW1lX2ZpbGUpOgotICAgICAgICAgICAgb3BlbihkYXRldGltZV9maWxlLCAndytiJykuY2xvc2UoKSAjIHRvdWNoIHRoZSBmaWxlIHNvIHRoYXQgdGhlIG5leHQgb3BlbiB3b24ndCBmYWlsCisgICAgICAgICAgICBvcGVuKGRhdGV0aW1lX2ZpbGUsICd3KycpLmNsb3NlKCkgIyB0b3VjaCB0aGUgZmlsZSBzbyB0aGF0IHRoZSBuZXh0IG9wZW4gd29uJ3QgZmFpbAogCi0gICAgICAgIGYgPSBvcGVuKGRhdGV0aW1lX2ZpbGUsICJyK2IiKQorICAgICAgICBmID0gb3BlbihkYXRldGltZV9maWxlLCAicisiKQogICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYKQogICAgICAgICBzYXZlZF9kYXRldGltZSA9IGYucmVhZCgpCiAgICAgICAgIGlmIHNhdmVkX2RhdGV0aW1lWzA6OF0gIT0gZGF0ZXRpbWVbMDo4XToKQEAgLTM1Nyw4ICszNDMsOCBAQAogCiAgICAgCiAgICAgaWYgdG1wICE9IE5vbmU6Ci0JbGlzdCA9IHRtcC5zcGxpdCgnICcpCi0JZm9yIGl0ZW0gaW4gbGlzdDoKKyAgICAgICAgbGlzdCA9IHRtcC5zcGxpdCgnICcpCisgICAgICAgIGZvciBpdGVtIGluIGxpc3Q6CiAgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChpdGVtKQogICAgIGJiLm5vdGUoIk1hdGNoaW5nOiAlcyIgJSBtYXRjaGluZ19kaXN0cm9zKQogICAgIHJldHVybiBtYXRjaGluZ19kaXN0cm9zCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZ3BnX3NpZ24ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZ3BnX3NpZ24ucHkKaW5kZXggYjgzZWU4Ni4uMzhlYjBjYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2dwZ19zaWduLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9ncGdfc2lnbi5weQpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UgPSBmb2JqLnJlYWRsaW5lKCk7CiAKICAgICAgICAgICAgIGpvYiA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICAoXywgc3RkZXJyKSA9IGpvYi5jb21tdW5pY2F0ZShwYXNzcGhyYXNlKQorICAgICAgICAgICAgKF8sIHN0ZGVycikgPSBqb2IuY29tbXVuaWNhdGUocGFzc3BocmFzZS5lbmNvZGUoInV0Zi04IikpCiAKICAgICAgICAgICAgIGlmIGpvYi5yZXR1cm5jb2RlOgogICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkdQRyBleGl0ZWQgd2l0aCBjb2RlICVkOiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpvYi5yZXR1cm5jb2RlLCBzdGRlcnIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpvYi5yZXR1cm5jb2RlLCBzdGRlcnIuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgYmIuZXJyb3IoIklPIGVycm9yICglcyk6ICVzIiAlIChlLmVycm5vLCBlLnN0cmVycm9yKSkKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBncGcgdmVyc2lvbiIiIgogICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoKHNlbGYuZ3BnX2JpbiwgIi0tdmVyc2lvbiIpKS5zcGxpdCgpWzJdCisgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoKHNlbGYuZ3BnX2JpbiwgIi0tdmVyc2lvbiIpKS5zcGxpdCgpWzJdLmRlY29kZSgidXRmLTgiKQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkNvdWxkIG5vdCBnZXQgZ3BnIHZlcnNpb246ICVzIiAlIGUpCiAKQEAgLTExMyw0ICsxMTMsMyBAQAogICAgICAgICByZXR1cm4gTG9jYWxTaWduZXIoZCkKICAgICBlbHNlOgogICAgICAgICBiYi5mYXRhbCgiVW5zdXBwb3J0ZWQgc2lnbmluZyBiYWNrZW5kICclcyciICUgYmFja2VuZCkKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2xpY2Vuc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQppbmRleCBmMGY2NjFjLi44ZDJmZDE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQpAQCAtNDcsNyArNDcsNyBAQAogICAgICIiIkdldCBlbGVtZW50cyBiYXNlZCBvbiBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCiAgICAgZGVmIGdldF9lbGVtZW50cyhzZWxmLCBsaWNlbnNlc3RyKToKICAgICAgICAgbmV3X2VsZW1lbnRzID0gW10KLSAgICAgICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlc3RyKSkKKyAgICAgICAgZWxlbWVudHMgPSBsaXN0KFt4IGZvciB4IGluIGxpY2Vuc2Vfb3BlcmF0b3Iuc3BsaXQobGljZW5zZXN0cikgaWYgeC5zdHJpcCgpXSkKICAgICAgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgogICAgICAgICAgICAgaWYgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnQpOgogICAgICAgICAgICAgICAgIGlmIHBvcyA+IDAgYW5kIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50c1twb3MtMV0pOgpAQCAtMTE4LDggKzExOCw4IEBACiAgICAgZGVmIGNob29zZV9saWNlbnNlcyhhbHBoYSwgYmV0YSk6CiAgICAgICAgICIiIlNlbGVjdCB0aGUgb3B0aW9uIGluIGFuIE9SIHdoaWNoIGlzIHRoZSAnYmVzdCcgKGhhcyB0aGUgbW9zdAogICAgICAgICBpbmNsdWRlZCBsaWNlbnNlcykuIiIiCi0gICAgICAgIGFscGhhX3dlaWdodCA9IGxlbihmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBhbHBoYSkpCi0gICAgICAgIGJldGFfd2VpZ2h0ID0gbGVuKGZpbHRlcihpbmNsdWRlX2xpY2Vuc2UsIGJldGEpKQorICAgICAgICBhbHBoYV93ZWlnaHQgPSBsZW4obGlzdChmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBhbHBoYSkpKQorICAgICAgICBiZXRhX3dlaWdodCA9IGxlbihsaXN0KGZpbHRlcihpbmNsdWRlX2xpY2Vuc2UsIGJldGEpKSkKICAgICAgICAgaWYgYWxwaGFfd2VpZ2h0ID4gYmV0YV93ZWlnaHQ6CiAgICAgICAgICAgICByZXR1cm4gYWxwaGEKICAgICAgICAgZWxzZToKQEAgLTEzMiw4ICsxMzIsOCBAQAogICAgICAgICBibGFja2xpc3QgPSBbXQogCiAgICAgbGljZW5zZXMgPSBmbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZXN0ciwgY2hvb3NlX2xpY2Vuc2VzKQotICAgIGV4Y2x1ZGVkID0gZmlsdGVyKGxhbWJkYSBsaWM6IGV4Y2x1ZGVfbGljZW5zZShsaWMpLCBsaWNlbnNlcykKLSAgICBpbmNsdWRlZCA9IGZpbHRlcihsYW1iZGEgbGljOiBpbmNsdWRlX2xpY2Vuc2UobGljKSwgbGljZW5zZXMpCisgICAgZXhjbHVkZWQgPSBbbGljIGZvciBsaWMgaW4gbGljZW5zZXMgaWYgZXhjbHVkZV9saWNlbnNlKGxpYyldCisgICAgaW5jbHVkZWQgPSBbbGljIGZvciBsaWMgaW4gbGljZW5zZXMgaWYgaW5jbHVkZV9saWNlbnNlKGxpYyldCiAgICAgaWYgZXhjbHVkZWQ6CiAgICAgICAgIHJldHVybiBGYWxzZSwgZXhjbHVkZWQKICAgICBlbHNlOgpAQCAtMjE1LDMgKzIxNSwyMSBAQAogICAgIG1hbmlmZXN0LmxpY2Vuc2VzdHIgPSBtYW5pZmVzdC5saWNlbnNlc3RyLnJlcGxhY2UoJ1snLCAnKCcpLnJlcGxhY2UoJ10nLCAnKScpCiAKICAgICByZXR1cm4gKG1hbmlmZXN0LmxpY2Vuc2VzdHIsIG1hbmlmZXN0LmxpY2Vuc2VzKQorCitjbGFzcyBMaXN0VmlzaXRvcihMaWNlbnNlVmlzaXRvcik6CisgICAgIiIiUmVjb3JkIGFsbCBkaWZmZXJlbnQgbGljZW5zZXMgZm91bmQgaW4gdGhlIGxpY2Vuc2Ugc3RyaW5nIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmxpY2Vuc2VzID0gc2V0KCkKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubGljZW5zZXMuYWRkKG5vZGUucykKKworZGVmIGxpc3RfbGljZW5zZXMobGljZW5zZXN0cik6CisgICAgIiIiU2ltcGx5IGdldCBhIGxpc3Qgb2YgYWxsIGxpY2Vuc2VzIG1lbnRpb25lZCBpbiBhIGxpY2Vuc2Ugc3RyaW5nLgorICAgICAgIEJpbmFyeSBvcGVyYXRvcnMgYXJlIG5vdCBhcHBsaWVkIG9yIHRha2VuIGludG8gYWNjb3VudCBpbiBhbnkgd2F5IiIiCisgICAgdmlzaXRvciA9IExpc3RWaXNpdG9yKCkKKyAgICB0cnk6CisgICAgICAgIHZpc2l0b3IudmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgTGljZW5zZVN5bnRheEVycm9yKGxpY2Vuc2VzdHIsIGV4YykKKyAgICByZXR1cm4gdmlzaXRvci5saWNlbnNlcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL21ha2V0eXBlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL21ha2V0eXBlLnB5CmluZGV4IDEzOWYzMzMuLmY4ODk4MWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYWtldHlwZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFrZXR5cGUucHkKQEAgLTYsNyArNiw4IEBACiAiIiIKIAogaW1wb3J0IGluc3BlY3QKLWltcG9ydCB0eXBlcworaW1wb3J0IG9lLnR5cGVzIGFzIHR5cGVzCitpbXBvcnQgY29sbGVjdGlvbnMKIAogYXZhaWxhYmxlX3R5cGVzID0ge30KIApAQCAtNTMsNyArNTQsOSBAQAogICAgIGlmIHR5cGUob2JqKSBpcyB0eXBlOgogICAgICAgICBvYmogPSBvYmouX19pbml0X18KIAotICAgIGFyZ3MsIHZhcmFyZ3MsIGtleXdvcmRzLCBkZWZhdWx0cyA9IGluc3BlY3QuZ2V0YXJnc3BlYyhvYmopCisgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUob2JqKQorICAgIGFyZ3MgPSBsaXN0KHNpZy5wYXJhbWV0ZXJzLmtleXMoKSkKKyAgICBkZWZhdWx0cyA9IGxpc3QocyBmb3IgcyBpbiBzaWcucGFyYW1ldGVycy5rZXlzKCkgaWYgc2lnLnBhcmFtZXRlcnNbc10uZGVmYXVsdCAhPSBpbnNwZWN0LlBhcmFtZXRlci5lbXB0eSkKICAgICBmbGFnbGlzdCA9IFtdCiAgICAgaWYgYXJnczoKICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMSBhbmQgYXJnc1swXSA9PSAnc2VsZic6CkBAIC05Myw3ICs5Niw3IEBACiAgICAgICAgIGNvbnRpbnVlCiAKICAgICBvYmogPSBnZXRhdHRyKHR5cGVzLCBuYW1lKQotICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuQ2FsbGFibGUpOgogICAgICAgICBjb250aW51ZQogCiAgICAgcmVnaXN0ZXIobmFtZSwgb2JqKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL21hbmlmZXN0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL21hbmlmZXN0LnB5CmluZGV4IDQyODMyZjEuLjk1ZjhlYjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFuaWZlc3QucHkKQEAgLTQsMTEgKzQsMTAgQEAKIGltcG9ydCBiYgogCiAKLWNsYXNzIE1hbmlmZXN0KG9iamVjdCk6CitjbGFzcyBNYW5pZmVzdChvYmplY3QsIG1ldGFjbGFzcz1BQkNNZXRhKToKICAgICAiIiIKICAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KICAgICAiIiIKLSAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQogCiAgICAgUEtHX1RZUEVfTVVTVF9JTlNUQUxMID0gIm1pcCIKICAgICBQS0dfVFlQRV9NVUxUSUxJQiA9ICJtbHAiCkBAIC0yMTksNyArMjE4LDcgQEAKICAgICAgICAgICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJzX3RvX3NwbGl0OgogICAgICAgICAgICAgICAgICAgICBzcGxpdF9wa2dzID0gc2VsZi5fc3BsaXRfbXVsdGlsaWIoc2VsZi5kLmdldFZhcih2YXIsIFRydWUpKQogICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdF9wa2dzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QocGtncy5pdGVtcygpICsgc3BsaXRfcGtncy5pdGVtcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QobGlzdChwa2dzLml0ZW1zKCkpICsgbGlzdChzcGxpdF9wa2dzLml0ZW1zKCkpKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHBrZ19saXN0ID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIG5vdCBOb25lOgpAQCAtMjY5LDcgKzI2OCw3IEBACiAgICAgICAgICAgICAgICAgaWYgdmFyIGluIHNlbGYudmFyc190b19zcGxpdDoKICAgICAgICAgICAgICAgICAgICAgc3BsaXRfcGtncyA9IHNlbGYuX3NwbGl0X211bHRpbGliKHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKSkKICAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRfcGtncyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3MgPSBkaWN0KHBrZ3MuaXRlbXMoKSArIHNwbGl0X3BrZ3MuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3MgPSBkaWN0KGxpc3QocGtncy5pdGVtcygpKSArIGxpc3Qoc3BsaXRfcGtncy5pdGVtcygpKSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBwa2dfbGlzdCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQogICAgICAgICAgICAgICAgICAgICBpZiBwa2dfbGlzdCBpcyBub3QgTm9uZToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2UucHkKaW5kZXggMjg4NzY4OS4uMDI2NDJmMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2UucHkKQEAgLTgsNyArOCw3IEBACiAgICAgIyA4IC0gc2hhcmVkIGxpYnJhcnkKICAgICAjIDE2IC0ga2VybmVsIG1vZHVsZQogCi0gICAgaW1wb3J0IGNvbW1hbmRzLCBzdGF0LCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IHN0YXQsIHN1YnByb2Nlc3MKIAogICAgIChmaWxlLCBlbGZ0eXBlLCBzdHJpcCkgPSBhcmcKIApAQCAtNjQsOCArNjQsOCBAQAogCiAgICAgZGVmIHByb2Nlc3NfZGVwcyhwaXBlLCBwa2csIHBrZ2Rlc3QsIHByb3ZpZGVzLCByZXF1aXJlcyk6CiAgICAgICAgIGZvciBsaW5lIGluIHBpcGU6Ci0gICAgICAgICAgICBmID0gbGluZS5zcGxpdCgiICIsIDEpWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNwbGl0KCIgIiwgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgZiA9IGxpbmUuZGVjb2RlKCJ1dGYtOCIpLnNwbGl0KCIgIiwgMSlbMF0uc3RyaXAoKQorICAgICAgICAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCJ1dGYtOCIpLnNwbGl0KCIgIiwgMSlbMV0uc3RyaXAoKQogCiAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlJlcXVpcmVzOiIpOgogICAgICAgICAgICAgICAgIGkgPSByZXF1aXJlcwpAQCAtMTE0LDcgKzExNCwxMiBAQAogICAgICAgICAgICAgbSA9IGxpc3RfcmUubWF0Y2goZmlsZSkKICAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgZGVwX3BrZyA9IG0uZ3JvdXAoMSkKLSAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgZmlsZSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgZmlsZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgRHVyaW5nIGEgYnVpbGQgdW5yZWxhdGVkIHNobGliIGZpbGVzIG1heSBiZSBkZWxldGVkLCBzbworICAgICAgICAgICAgICAgICAgICAjIGhhbmRsZSBmaWxlcyBkaXNhcHBlYXJpbmcgYmV0d2VlbiB0aGUgbGlzdGRpcnMgYW5kIG9wZW4uCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQogICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKICAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKQEAgLTE0OSw3ICsxNTQsNyBAQAogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2ZpbGUpOgogICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZmlsZSwgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMoZi5yZWFkKCkpCi0gICAgICAgICAgICAgICAgcGFja2FnZXNbcGtnbmFtZV0gPSAocmVscHRoLCBkYXRhKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlc1twa2duYW1lXSA9IChyZWxwdGgsIGRhdGEpCiAgICAgIyBXZSB3YW50IHRoZSBtYWluIHBhY2thZ2UgZm9yIGEgbW9kdWxlIHNvcnRlZCAqYWZ0ZXIqIGl0cyBzdWJwYWNrYWdlcwogICAgICMgKHNvIHRoYXQgaXQgZG9lc24ndCBvdGhlcndpc2Ugc3RlYWwgdGhlIGZpbGVzIGZvciB0aGUgc3VicGFja2FnZSksIHNvCiAgICAgIyB0aGlzIGlzIGEgY2hlYXAgd2F5IHRvIGRvIHRoYXQgd2hpbHN0IHN0aWxsIGhhdmluZyBhbiBvdGhlcndpc2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZV9tYW5hZ2VyLnB5CmluZGV4IGI0YjM1OWEuLjNjZWU5NzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weQpAQCAtNSw5ICs1LDExIEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgcmUKK2ltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IGJiCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBvZS51dGlscworaW1wb3J0IG9lLnBhdGgKIGltcG9ydCBzdHJpbmcKIGZyb20gb2UuZ3BnX3NpZ24gaW1wb3J0IGdldF9zaWduZXIKIApAQCAtMTcsMjAgKzE5LDc5IEBACiAKICAgICB0cnk6CiAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyAnJXMnIC4uLiIgJSBpbmRleF9jbWQpCi0gICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGluZGV4X2NtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChpbmRleF9jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgIHJldHVybigiSW5kZXggY3JlYXRpb24gY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVkOlxuJXMiICUKLSAgICAgICAgICAgICAgIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgIGlmIHJlc3VsdDoKICAgICAgICAgYmIubm90ZShyZXN1bHQpCiAKICAgICByZXR1cm4gTm9uZQogCisiIiIKK1RoaXMgbWV0aG9kIHBhcnNlIHRoZSBvdXRwdXQgZnJvbSB0aGUgcGFja2FnZSBtYW5hZ2VyYW5kIHJldHVybgorYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBwYWNrYWdlcy4gVGhpcyBpcyB1c2VkCit3aGVuIHRoZSBwYWNrYWdlcyBhcmUgaW4gZGViIG9yIGlwayBmb3JtYXQuCisiIiIKK2RlZiBvcGtnX3F1ZXJ5KGNtZF9vdXRwdXQpOgorICAgIHZlcnJlZ2V4ID0gcmUuY29tcGlsZSgnIFwoWz08Pl0qIFteICldKlwpJykKKyAgICBvdXRwdXQgPSBkaWN0KCkKKyAgICBwa2cgPSAiIgorICAgIGFyY2ggPSAiIgorICAgIHZlciA9ICIiCisgICAgZmlsZW5hbWUgPSAiIgorICAgIGRlcCA9IFtdCisgICAgcGtnYXJjaCA9ICIiCisgICAgZm9yIGxpbmUgaW4gY21kX291dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgIGlmICc6JyBpbiBsaW5lOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQYWNrYWdlOiAiKToKKyAgICAgICAgICAgICAgICBwa2cgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiQXJjaGl0ZWN0dXJlOiAiKToKKyAgICAgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIlZlcnNpb246ICIpOgorICAgICAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJGaWxlOiAiKSBvciBsaW5lLnN0YXJ0c3dpdGgoIkZpbGVuYW1lOiIpOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgIGlmICIvIiBpbiBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIkRlcGVuZHM6ICIpOgorICAgICAgICAgICAgICAgIGRlcGVuZHMgPSB2ZXJyZWdleC5zdWIoJycsIGxpbmUuc3BsaXQoIjogIilbMV0pCisgICAgICAgICAgICAgICAgZm9yIGRlcGVuZCBpbiBkZXBlbmRzLnNwbGl0KCIsICIpOgorICAgICAgICAgICAgICAgICAgICBkZXAuYXBwZW5kKGRlcGVuZCkKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJSZWNvbW1lbmRzOiAiKToKKyAgICAgICAgICAgICAgICByZWNvbW1lbmRzID0gdmVycmVnZXguc3ViKCcnLCBsaW5lLnNwbGl0KCI6ICIpWzFdKQorICAgICAgICAgICAgICAgIGZvciByZWNvbW1lbmQgaW4gcmVjb21tZW5kcy5zcGxpdCgiLCAiKToKKyAgICAgICAgICAgICAgICAgICAgZGVwLmFwcGVuZCgiJXMgW1JFQ10iICUgcmVjb21tZW5kKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIlBhY2thZ2VBcmNoOiAiKToKKyAgICAgICAgICAgICAgICBwa2dhcmNoID0gbGluZS5zcGxpdCgiOiAiKVsxXQogCi1jbGFzcyBJbmRleGVyKG9iamVjdCk6Ci0gICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKyAgICAgICAgIyBXaGVuIHRoZXJlIGlzIGEgYmxhbmsgbGluZSBzYXZlIHRoZSBwYWNrYWdlIGluZm9ybWF0aW9uCisgICAgICAgIGVsaWYgbm90IGxpbmU6CisgICAgICAgICAgICAjIElQSyBkb2Vzbid0IGluY2x1ZGUgdGhlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiBub3QgZmlsZW5hbWU6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSAiJXNfJXNfJXMuaXBrIiAlIChwa2csIHZlciwgYXJjaCkKKyAgICAgICAgICAgIGlmIHBrZzoKKyAgICAgICAgICAgICAgICBvdXRwdXRbcGtnXSA9IHsiYXJjaCI6YXJjaCwgInZlciI6dmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgImZpbGVuYW1lIjpmaWxlbmFtZSwgImRlcHMiOiBkZXAsICJwa2dhcmNoIjpwa2dhcmNoIH0KKyAgICAgICAgICAgIHBrZyA9ICIiCisgICAgICAgICAgICBhcmNoID0gIiIKKyAgICAgICAgICAgIHZlciA9ICIiCisgICAgICAgICAgICBmaWxlbmFtZSA9ICIiCisgICAgICAgICAgICBkZXAgPSBbXQorICAgICAgICAgICAgcGtnYXJjaCA9ICIiCiAKKyAgICBpZiBwa2c6CisgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gIiVzXyVzXyVzLmlwayIgJSAocGtnLCB2ZXIsIGFyY2gpCisgICAgICAgIG91dHB1dFtwa2ddID0geyJhcmNoIjphcmNoLCAidmVyIjp2ZXIsCisgICAgICAgICAgICAgICAgImZpbGVuYW1lIjpmaWxlbmFtZSwgImRlcHMiOiBkZXAgfQorCisgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIEluZGV4ZXIob2JqZWN0LCBtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIGRlcGxveV9kaXIpOgogICAgICAgICBzZWxmLmQgPSBkCiAgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IGRlcGxveV9kaXIKQEAgLTQyLDEzICsxMDMsOCBAQAogCiBjbGFzcyBScG1JbmRleGVyKEluZGV4ZXIpOgogICAgIGRlZiBnZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KHNlbGYsIGFyY2hfdmFyPU5vbmUsIG9zX3Zhcj1Ob25lKToKLSAgICAgICAgcGFja2FnZV9hcmNocyA9IHsKLSAgICAgICAgICAgICdkZWZhdWx0JzogW10sCi0gICAgICAgIH0KLQotICAgICAgICB0YXJnZXRfb3MgPSB7Ci0gICAgICAgICAgICAnZGVmYXVsdCc6ICIiLAotICAgICAgICB9CisgICAgICAgIHBhY2thZ2VfYXJjaHMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHRhcmdldF9vcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKIAogICAgICAgICBpZiBhcmNoX3ZhciBpcyBub3QgTm9uZSBhbmQgb3NfdmFyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcihhcmNoX3ZhciwgVHJ1ZSkuc3BsaXQoKQpAQCAtNzksNyArMTM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9vc1tlZXh0WzFdXSA9IGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9PUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpLnN0cmlwKCkKIAotICAgICAgICBtbF9wcmVmaXhfbGlzdCA9IGRpY3QoKQorICAgICAgICBtbF9wcmVmaXhfbGlzdCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKICAgICAgICAgZm9yIG1saWIgaW4gcGFja2FnZV9hcmNoczoKICAgICAgICAgICAgIGlmIG1saWIgPT0gJ2RlZmF1bHQnOgogICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdID0gcGFja2FnZV9hcmNoc1ttbGliXQpAQCAtMjgxLDkgKzMzNyw3IEBACiAKIAogCi1jbGFzcyBQa2dzTGlzdChvYmplY3QpOgotICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCi0KK2NsYXNzIFBrZ3NMaXN0KG9iamVjdCwgbWV0YWNsYXNzPUFCQ01ldGEpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCByb290ZnNfZGlyKToKICAgICAgICAgc2VsZi5kID0gZAogICAgICAgICBzZWxmLnJvb3Rmc19kaXIgPSByb290ZnNfZGlyCkBAIC0yOTMsNTcgKzM0Nyw2IEBACiAgICAgICAgIHBhc3MKIAogCi0gICAgIiIiCi0gICAgVGhpcyBtZXRob2QgcGFyc2UgdGhlIG91dHB1dCBmcm9tIHRoZSBwYWNrYWdlIG1hbmFnZXIKLSAgICBhbmQgcmV0dXJuIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUKLSAgICBpbnN0YWxsZWQgcGFja2FnZXMuIFRoaXMgaXMgdXNlZCB3aG5lIHRoZSBwYWNrYWdlcyBhcmUKLSAgICBpbiBkZWIgb3IgaXBrIGZvcm1hdAotICAgICIiIgotICAgIGRlZiBvcGtnX3F1ZXJ5KHNlbGYsIGNtZF9vdXRwdXQpOgotICAgICAgICB2ZXJyZWdleCA9IHJlLmNvbXBpbGUoJyBcKFs9PD5dKiBbXiApXSpcKScpCi0gICAgICAgIG91dHB1dCA9IGRpY3QoKQotICAgICAgICBmaWxlbmFtZSA9ICIiCi0gICAgICAgIGRlcCA9IFtdCi0gICAgICAgIHBrZyA9ICIiCi0gICAgICAgIGZvciBsaW5lIGluIGNtZF9vdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKLSAgICAgICAgICAgIGlmICc6JyBpbiBsaW5lOgotICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUGFja2FnZTogIik6Ci0gICAgICAgICAgICAgICAgICAgIHBrZyA9IGxpbmUuc3BsaXQoIjogIilbMV0KLSAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiQXJjaGl0ZWN0dXJlOiAiKToKLSAgICAgICAgICAgICAgICAgICAgYXJjaCA9IGxpbmUuc3BsaXQoIjogIilbMV0KLSAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiVmVyc2lvbjogIik6Ci0gICAgICAgICAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoIjogIilbMV0KLSAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiRmlsZTogIik6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gbGluZS5zcGxpdCgiOiAiKVsxXQotICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJEZXBlbmRzOiAiKToKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9IHZlcnJlZ2V4LnN1YignJywgbGluZS5zcGxpdCgiOiAiKVsxXSkKLSAgICAgICAgICAgICAgICAgICAgZm9yIGRlcGVuZCBpbiBkZXBlbmRzLnNwbGl0KCIsICIpOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVwLmFwcGVuZChkZXBlbmQpCi0gICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIlJlY29tbWVuZHM6ICIpOgotICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRzID0gdmVycmVnZXguc3ViKCcnLCBsaW5lLnNwbGl0KCI6ICIpWzFdKQotICAgICAgICAgICAgICAgICAgICBmb3IgcmVjb21tZW5kIGluIHJlY29tbWVuZHMuc3BsaXQoIiwgIik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXAuYXBwZW5kKCIlcyBbUkVDXSIgJSByZWNvbW1lbmQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgSVBLIGRvZXNuJ3QgaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICBpZiBub3QgZmlsZW5hbWU6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gIiVzXyVzXyVzLmlwayIgJSAocGtnLCB2ZXIsIGFyY2gpCi0gICAgICAgICAgICAgICAgaWYgcGtnOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRbcGtnXSA9IHsiYXJjaCI6YXJjaCwgInZlciI6dmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlbmFtZSI6ZmlsZW5hbWUsICJkZXBzIjogZGVwIH0KLSAgICAgICAgICAgICAgICBwa2cgPSAiIgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gIiIKLSAgICAgICAgICAgICAgICBkZXAgPSBbXQotCi0gICAgICAgIGlmIHBrZzoKLSAgICAgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9ICIlc18lc18lcy5pcGsiICUgKHBrZywgdmVyLCBhcmNoKQotICAgICAgICAgICAgb3V0cHV0W3BrZ10gPSB7ImFyY2giOmFyY2gsICJ2ZXIiOnZlciwKLSAgICAgICAgICAgICAgICAgICAgImZpbGVuYW1lIjpmaWxlbmFtZSwgImRlcHMiOiBkZXAgfQotCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotCiBjbGFzcyBScG1Qa2dzTGlzdChQa2dzTGlzdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJvb3Rmc19kaXIsIGFyY2hfdmFyPU5vbmUsIG9zX3Zhcj1Ob25lKToKICAgICAgICAgc3VwZXIoUnBtUGtnc0xpc3QsIHNlbGYpLl9faW5pdF9fKGQsIHJvb3Rmc19kaXIpCkBAIC0zNTcsMTAgKzM2MCwxMCBAQAogICAgICAgICAjIERldGVybWluZSBycG0gdmVyc2lvbgogICAgICAgICBjbWQgPSAiJXMgLS12ZXJzaW9uIiAlIHNlbGYucnBtX2NtZAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBiYi5mYXRhbCgiR2V0dGluZyBycG0gdmVyc2lvbiBmYWlsZWQuIENvbW1hbmQgJyVzJyAiCi0gICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgICcnJwogICAgIFRyYW5zbGF0ZSB0aGUgUlBNL1NtYXJ0IGZvcm1hdCBuYW1lcyB0byB0aGUgT0UgbXVsdGlsaWIgZm9ybWF0IG5hbWVzCkBAIC00MDEsMTAgKzQwNCwxMCBAQAogICAgICAgICAgICAgICAgIi10Iiwgc2VsZi5pbWFnZV9ycG1saWJdCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpLmRlY29kZSgidXRmLTgiKQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBwYWNrYWdlIGRlcGVuZGVuY2llcy4gQ29tbWFuZCAnJXMnICIKLSAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCiAKICAgICAgICAgcmV0dXJuIG91dHB1dAogCkBAIC00MTUsMTAgKzQxOCwxMCBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgYmIubm90ZShjbWQpCi0gICAgICAgICAgICB0bXBfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLnN0cmlwKCkKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIGxpc3QuIENvbW1hbmQgJyVzJyAiCi0gICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgICAgICBvdXRwdXQgPSBkaWN0KCkKICAgICAgICAgZGVwcyA9IGRpY3QoKQpAQCAtNDc1LDExICs0NzgsMTMgQEAKICAgICAgICAgIyBvdXRwdXQgc3RyZWFtcyBzZXBhcmF0ZWx5IGFuZCBjaGVjayBmb3IgZW1wdHkgc3RkZXJyLgogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCiAgICAgICAgIGNtZF9vdXRwdXQsIGNtZF9zdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgY21kX291dHB1dCA9IGNtZF9vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIGNtZF9zdGRlcnIgPSBjbWRfc3RkZXJyLmRlY29kZSgidXRmLTgiKQogICAgICAgICBpZiBwLnJldHVybmNvZGUgb3IgY21kX3N0ZGVycjoKICAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAnJXMnICIKICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZCBhbmQgc3RkZXJyOlxuJXMiICUgKGNtZCwgcC5yZXR1cm5jb2RlLCBjbWRfc3RkZXJyKSkKIAotICAgICAgICByZXR1cm4gc2VsZi5vcGtnX3F1ZXJ5KGNtZF9vdXRwdXQpCisgICAgICAgIHJldHVybiBvcGtnX3F1ZXJ5KGNtZF9vdXRwdXQpCiAKIAogY2xhc3MgRHBrZ1BrZ3NMaXN0KFBrZ3NMaXN0KToKQEAgLTQ5MiwxOSArNDk3LDE4IEBACiAgICAgICAgIGNtZC5hcHBlbmQoIi1mPVBhY2thZ2U6ICR7UGFja2FnZX1cbkFyY2hpdGVjdHVyZTogJHtQYWNrYWdlQXJjaH1cblZlcnNpb246ICR7VmVyc2lvbn1cbkZpbGU6ICR7UGFja2FnZX1fJHtWZXJzaW9ufV8ke0FyY2hpdGVjdHVyZX0uZGViXG5EZXBlbmRzOiAke0RlcGVuZHN9XG5SZWNvbW1lbmRzOiAke1JlY29tbWVuZHN9XG5cbiIpCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgY21kX291dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCisgICAgICAgICAgICBjbWRfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgotICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAotICAgICAgICByZXR1cm4gc2VsZi5vcGtnX3F1ZXJ5KGNtZF9vdXRwdXQpCisgICAgICAgIHJldHVybiBvcGtnX3F1ZXJ5KGNtZF9vdXRwdXQpCiAKIAotY2xhc3MgUGFja2FnZU1hbmFnZXIob2JqZWN0KToKK2NsYXNzIFBhY2thZ2VNYW5hZ2VyKG9iamVjdCwgbWV0YWNsYXNzPUFCQ01ldGEpOgogICAgICIiIgogICAgIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIERvIG5vdCBpbnN0YW50aWF0ZSB0aGlzIGRpcmVjdGx5LgogICAgICIiIgotICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CiAgICAgICAgIHNlbGYuZCA9IGQKQEAgLTU5NCwxNSArNTk4LDE1IEBACiAgICAgICAgICAgICAgICBnbG9ic10KICAgICAgICAgZXhjbHVkZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERV9DT01QTEVNRU5UQVJZJywgVHJ1ZSkKICAgICAgICAgaWYgZXhjbHVkZToKLSAgICAgICAgICAgIGNtZC5leHRlbmQoWycteCcsIGV4Y2x1ZGVdKQorICAgICAgICAgICAgY21kLmV4dGVuZChbJy0tZXhjbHVkZT0nICsgJ3wnLmpvaW4oZXhjbHVkZS5zcGxpdCgpKV0pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgY29tcGxlbWVudGFyeSBwYWNrYWdlcyAuLi4iKQogICAgICAgICAgICAgYmIubm90ZSgnUnVubmluZyAlcycgJSBjbWQpCi0gICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGNvbXBsZW1lbnRhcnlfcGtncyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbXB1dGUgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICIKICAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCiAgICAgICAgIHNlbGYuaW5zdGFsbChjb21wbGVtZW50YXJ5X3BrZ3Muc3BsaXQoKSwgYXR0ZW1wdF9vbmx5PVRydWUpCiAgICAgICAgIG9zLnJlbW92ZShpbnN0YWxsZWRfcGtnc19maWxlKQogCkBAIC02MzEsOCArNjM1LDggQEAKICAgICBkZWYgY29uc3RydWN0X3VyaXMoc2VsZiwgdXJpcywgYmFzZV9wYXRocyk6CiAgICAgICAgIGRlZiBfYXBwZW5kKGFycjEsIGFycjIsIHNlcD0nLycpOgogICAgICAgICAgICAgcmVzID0gW10KLSAgICAgICAgICAgIG5hcnIxID0gbWFwKGxhbWJkYSBhOiBzdHJpbmcucnN0cmlwKGEsIHNlcCksIGFycjEpCi0gICAgICAgICAgICBuYXJyMiA9IG1hcChsYW1iZGEgYTogc3RyaW5nLmxzdHJpcChzdHJpbmcucnN0cmlwKGEsIHNlcCksIHNlcCksIGFycjIpCisgICAgICAgICAgICBuYXJyMSA9IFthLnJzdHJpcChzZXApIGZvciBhIGluIGFycjFdCisgICAgICAgICAgICBuYXJyMiA9IFthLnJzdHJpcChzZXApLmxzdHJpcChzZXApIGZvciBhIGluIGFycjJdCiAgICAgICAgICAgICBmb3IgYTEgaW4gbmFycjE6CiAgICAgICAgICAgICAgICAgaWYgYXJyMjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGEyIGluIG5hcnIyOgpAQCAtNjgyLDcgKzY4Niw4IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkJykpOgogICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSkKIAotICAgICAgICBzZWxmLmluZGV4ZXIgPSBScG1JbmRleGVyKHNlbGYuZCwgc2VsZi5kZXBsb3lfZGlyKQorICAgICAgICBwYWNrYWdlaW5kZXhfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgJ3JwbXMnKQorICAgICAgICBzZWxmLmluZGV4ZXIgPSBScG1JbmRleGVyKHNlbGYuZCwgcGFja2FnZWluZGV4X2RpcikKICAgICAgICAgc2VsZi5wa2dzX2xpc3QgPSBScG1Qa2dzTGlzdChzZWxmLmQsIHNlbGYudGFyZ2V0X3Jvb3RmcywgYXJjaF92YXIsIG9zX3ZhcikKIAogICAgICAgICBzZWxmLm1sX3ByZWZpeF9saXN0LCBzZWxmLm1sX29zX2xpc3QgPSBzZWxmLmluZGV4ZXIuZ2V0X21sX3ByZWZpeF9hbmRfb3NfbGlzdChhcmNoX3Zhciwgb3NfdmFyKQpAQCAtNjk3LDE4ICs3MDIsMTkgQEAKICAgICAgICAgICAgIGFyY2hfbGlzdCA9IHNlbGYuZmVlZF9hcmNocy5zcGxpdCgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIExpc3QgbXVzdCBiZSBwcmVmZXJlZCB0byBsZWFzdCBwcmVmZXJyZWQgb3JkZXIKLSAgICAgICAgICAgIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQotICAgICAgICAgICAgcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQorICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSA9IGxpc3QoKQorICAgICAgICAgICAgcGxhdGZvcm1fZXh0cmEgPSBsaXN0KCkKICAgICAgICAgICAgIGJiZXh0ZW5kdmFyaWFudCA9IHNlbGYuZC5nZXRWYXIoJ0JCRVhURU5EVkFSSUFOVCcsIFRydWUpIG9yICIiCiAgICAgICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX29zX2xpc3Q6CiAgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5tbF9wcmVmaXhfbGlzdFttbGliXToKICAgICAgICAgICAgICAgICAgICAgcGx0ID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKSArICctLiotJyArIHNlbGYubWxfb3NfbGlzdFttbGliXQogICAgICAgICAgICAgICAgICAgICBpZiBtbGliID09IGJiZXh0ZW5kdmFyaWFudDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhLmFkZChwbHQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwbHQgbm90IGluIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYS5hcHBlbmQocGx0KQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2V4dHJhLmFkZChwbHQpCi0KLSAgICAgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gcGxhdGZvcm1fZXh0cmEudW5pb24oZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBsdCBub3QgaW4gcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZXh0cmEuYXBwZW5kKHBsdCkKKyAgICAgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSArIHBsYXRmb3JtX2V4dHJhCiAKICAgICAgICAgICAgIGZvciBjYW5vbmljYWxfYXJjaCBpbiBwbGF0Zm9ybV9leHRyYToKICAgICAgICAgICAgICAgICBhcmNoID0gY2Fub25pY2FsX2FyY2guc3BsaXQoJy0nKVswXQpAQCAtNzI0LDcgKzczMCw3IEBACiAgICAgICAgIGZvciB1cmkgaW4gZmVlZF91cmlzOgogICAgICAgICAgICAgaWYgYXJjaF9saXN0OgogICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnTm90ZTogYWRkaW5nIFNtYXJ0IGNoYW5uZWwgdXJsJWQlcyAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ0FkZGluZyBTbWFydCBjaGFubmVsIHVybCVkJXMgKCVzKScgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmlfaXRlcmF0b3IsIGFyY2gsIGNoYW5uZWxfcHJpb3JpdHkpKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgdXJsJWQtJXMgdHlwZT1ycG0tbWQgYmFzZXVybD0lcy8lcyAteScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHVyaV9pdGVyYXRvciwgYXJjaCwgdXJpLCBhcmNoKSkKQEAgLTczMiw3ICs3MzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgLT0gNQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCB1cmwlZCAoJXMpJyAlCisgICAgICAgICAgICAgICAgYmIubm90ZSgnQWRkaW5nIFNtYXJ0IGNoYW5uZWwgdXJsJWQgKCVzKScgJQogICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgY2hhbm5lbF9wcmlvcml0eSkpCiAgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHVybCVkIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMgLXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHVyaV9pdGVyYXRvciwgdXJpKSkKQEAgLTc3NCwxMiArNzgwLDEyIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbXBsZW1lbnRhcnlfcGtncyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICMgYmIubm90ZShjb21wbGVtZW50YXJ5X3BrZ3MpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxlbWVudGFyeV9wa2dzCiAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBpbnZva2Ugc21hcnQuIENvbW1hbmQgIgotICAgICAgICAgICAgICAgICAgICAgIiclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCiAgICAgZGVmIF9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMoc2VsZiwgcGtnLCBmZWVkX2FyY2hzKToKICAgICAgICAgZm9yIGFyY2ggaW4gZmVlZF9hcmNoczoKQEAgLTc5OCw3ICs4MDQsNyBAQAogICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsIHBrZykKICAgICAgICAgY21kICs9ICIgfCBzZWQgLW5lICdzLyAqUHJvdmlkZXM6Ly9wJyIKICAgICAgICAgYmIubm90ZSgnY21kOiAlcycgJSBjbWQpCi0gICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICMgRm91bmQgYSBwcm92aWRlcgogICAgICAgICBpZiBvdXRwdXQ6CiAgICAgICAgICAgICBiYi5ub3RlKCdGb3VuZCBwcm92aWRlcnMgZm9yICVzOiAlcycgJSAocGtnLCBvdXRwdXQpKQpAQCAtODMzLDExICs4MzksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZyA9IHNlbGYuX3NlYXJjaF9wa2dfbmFtZV9pbl9mZWVkcyhzdWJzdCwgZmVlZF9hcmNocykKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld19wa2c6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIEZhaWxlZCB0byB0cmFuc2xhdGUsIHBhY2thZ2Ugbm90IGZvdW5kIQotICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9ICclcyBub3QgZm91bmQgaW4gdGhlICVzIGZlZWRzICglcykuXG4nICUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIG1saWIsICIgIi5qb2luKGZlZWRfYXJjaHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9ICclcyBub3QgZm91bmQgaW4gdGhlICVzIGZlZWRzICglcykgaW4gJXMuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCBtbGliLCAiICIuam9pbihmZWVkX2FyY2hzKSwgc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhdHRlbXB0X29ubHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyArPSAiICIuam9pbihzZWxmLmZ1bGxwa2dsaXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoZXJyX21zZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhpcyBpcyBvZnRlbiBjYXVzZWQgYnkgYW4gZW1wdHkgcGFja2FnZSBkZWNsYXJlZCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gYSByZWNpcGUncyBQQUNLQUdFUyB2YXJpYWJsZS4gKEVtcHR5IHBhY2thZ2VzIGFyZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGNvbnN0cnVjdGVkIHVubGVzcyBBTExPV19FTVBUWV88cGtnPiA9ICcxJyBpcyB1c2VkLikiKQogICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybihlcnJfbXNnKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZ3MuYXBwZW5kKG5ld19wa2cpCkBAIC04NTAsMTEgKzg1OCwxMyBAQAogICAgICAgICAgICAgICAgIGRlZmF1bHRfYXJjaHMgPSBzZWxmLm1sX3ByZWZpeF9saXN0WydkZWZhdWx0J10KICAgICAgICAgICAgICAgICBuZXdfcGtnID0gc2VsZi5fc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHBrZywgZGVmYXVsdF9hcmNocykKICAgICAgICAgICAgICAgICBpZiBub3QgbmV3X3BrZzoKLSAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9ICclcyBub3QgZm91bmQgaW4gdGhlIGJhc2UgZmVlZHMgKCVzKS5cbicgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCAnICcuam9pbihkZWZhdWx0X2FyY2hzKSkKKyAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9ICclcyBub3QgZm91bmQgaW4gdGhlIGZlZWRzICglcykgaW4gJXMuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCAiICIuam9pbihkZWZhdWx0X2FyY2hzKSwgc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKSkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgKz0gIiAiLmpvaW4oc2VsZi5mdWxscGtnbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcihlcnJfbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoaXMgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFuIGVtcHR5IHBhY2thZ2UgZGVjbGFyZWQgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gYSByZWNpcGUncyBQQUNLQUdFUyB2YXJpYWJsZS4gKEVtcHR5IHBhY2thZ2VzIGFyZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgY29uc3RydWN0ZWQgdW5sZXNzIEFMTE9XX0VNUFRZXzxwa2c+ID0gJzEnIGlzIHVzZWQuKSIpCiAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oZXJyX21zZykKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBuZXdfcGtncy5hcHBlbmQobmV3X3BrZykKQEAgLTk0Niw3ICs5NTYsNyBAQAogICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCiAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgYmIuZmF0YWwoIkNyZWF0ZSBycG0gZGF0YWJhc2UgZmFpbGVkLiBDb21tYW5kICclcycgIgotICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCiAgICAgICAgICMgSW1wb3J0IEdQRyBrZXkgdG8gUlBNIGRhdGFiYXNlIG9mIHRoZSB0YXJnZXQgc3lzdGVtCiAgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgogICAgICAgICAgICAgcHVia2V5X3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCkBAIC0xMDA2LDkgKzEwMTYsMTkgQEAKICAgICAgICAgY2hfYWxyZWFkeV9hZGRlZCA9IFtdCiAgICAgICAgIGZvciBjYW5vbmljYWxfYXJjaCBpbiBwbGF0Zm9ybV9leHRyYToKICAgICAgICAgICAgIGFyY2ggPSBjYW5vbmljYWxfYXJjaC5zcGxpdCgnLScpWzBdCi0gICAgICAgICAgICBhcmNoX2NoYW5uZWwgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXJjaF9jaGFubmVsKSBhbmQgbm90IGFyY2ggaW4gY2hfYWxyZWFkeV9hZGRlZDoKLSAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCAlcyAoJXMpJyAlCisgICAgICAgICAgICBhcmNoX2NoYW5uZWwgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLCAncnBtcycsIGFyY2gpCisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShhcmNoX2NoYW5uZWwpCisgICAgICAgICAgICBkZXBsb3lfYXJjaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlcGxveV9hcmNoX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGxvY2tmaWxlbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ0RFUExPWV9ESVJfUlBNJywgVHJ1ZSkgKyAiL3JwbS5sb2NrIgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShsb2NrZmlsZW5hbWUsIEZhbHNlKQorICAgICAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKGRlcGxveV9hcmNoX2RpciwgYXJjaF9jaGFubmVsKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgICAgICAgICAgaWYgbm90IGFyY2ggaW4gY2hfYWxyZWFkeV9hZGRlZDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdBZGRpbmcgU21hcnQgY2hhbm5lbCAlcyAoJXMpJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCiAgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkICVzIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMgLXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGFyY2gsIGFyY2hfY2hhbm5lbCkpCkBAIC0xMDgwLDggKzExMDAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3Jvb3QpCiAgICAgICAgIG9wZW4oc2VsZi5zY3JpcHRsZXRfd3JhcHBlciwgJ3crJykud3JpdGUoc2NyaXB0bGV0X2NvbnRlbnQpCiAKLSAgICAgICAgYmIubm90ZSgiTm90ZTogY29uZmlndXJpbmcgUlBNIGNyb3NzLWluc3RhbGwgc2NyaXB0bGV0X3dyYXBwZXIiKQotICAgICAgICBvcy5jaG1vZChzZWxmLnNjcmlwdGxldF93cmFwcGVyLCAwNzU1KQorICAgICAgICBiYi5ub3RlKCJjb25maWd1cmluZyBSUE0gY3Jvc3MtaW5zdGFsbCBzY3JpcHRsZXRfd3JhcHBlciIpCisgICAgICAgIG9zLmNobW9kKHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIsIDBvNzU1KQogICAgICAgICBjbWQgPSAnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyPSVzJyAlIFwKICAgICAgICAgICAgICAgc2VsZi5zY3JpcHRsZXRfd3JhcHBlcgogICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoY21kKQpAQCAtMTA5OSw3ICsxMTE5LDcgQEAKICAgICAgICAgICAgIHN1Yl9yZGVwID0gc3ViX2RhdGEuZ2V0KCJSREVQRU5EU18iICsgcGtnKQogICAgICAgICAgICAgaWYgbm90IHN1Yl9yZGVwOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBkb25lID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHN1Yl9yZGVwKS5rZXlzKCkKKyAgICAgICAgICAgIGRvbmUgPSBsaXN0KGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzdWJfcmRlcCkua2V5cygpKQogICAgICAgICAgICAgbmV4dCA9IGRvbmUKICAgICAgICAgICAgICMgRmluZCBhbGwgdGhlIHJkZXBlbmRzIG9uIGRlcGVuZGVuY3kgY2hhaW4KICAgICAgICAgICAgIHdoaWxlIG5leHQ6CkBAIC0xMTgyLDYgKzEyMDIsOSBAQAogICAgICAgICAgICAgICAgICAgICBuZXdfZGVwZW5kc1tuZXdfZGVwZW5kXSA9IGRlcHNbZGVwZW5kXQogICAgICAgICAgICAgICAgIHBrZ3MgPSBiYi51dGlscy5qb2luX2RlcHMobmV3X2RlcGVuZHMsIGNvbW1hc2VwPVRydWUpLnNwbGl0KCcsICcpCiAgICAgICAgIHBrZ3MgPSBzZWxmLl9wa2dfdHJhbnNsYXRlX29lX3RvX3NtYXJ0KHBrZ3MsIGF0dGVtcHRfb25seSkKKyAgICAgICAgaWYgbm90IHBrZ3M6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgdG8gaW5zdGFsbCIpCisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKICAgICAgICAgICAgIGJiLm5vdGUoJ3RvIGJlIGluc3RhbGxlZDogJXMnICUgJyAnLmpvaW4ocGtncykpCiAgICAgICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAteSAlcyIgJSBcCkBAIC0xMTkzLDExICsxMjE2LDExIEBACiAgICAgICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAtLWF0dGVtcHQgLXkgJXMiICUgXAogICAgICAgICAgICAgICAgICAgKHNlbGYuc21hcnRfY21kLCBzZWxmLnNtYXJ0X29wdCwgJyAnLmpvaW4ocGtncykpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKLSAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCiAgICAgJycnCiAgICAgUmVtb3ZlIHBrZ3Mgd2l0aCBzbWFydCwgdGhlIHBrZyBuYW1lIGlzIHNtYXJ0L3JwbSBmb3JtYXQKQEAgLTEyMjMsMTEgKzEyNDYsMTEgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBiYi5ub3RlKGNtZCkKLSAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLmRlY29kZSgidXRmLTgiKQogICAgICAgICAgICAgYmIubm90ZShvdXRwdXQpCiAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKLSAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgIGRlZiB1cGdyYWRlKHNlbGYpOgogICAgICAgICBiYi5ub3RlKCdzbWFydCB1cGdyYWRlJykKQEAgLTEzMDAsNyArMTMyMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX3BrZ3MuYXBwZW5kKHBrZykKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBiYi5ub3RlKCJVbmFibGUgdG8gZHVtcCBpbnN0YWxsIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgotICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogICAgICAgICAjIFJlY292ZXJ5IHJwbXN5cyBjaGFubmVsCiAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSBycG1zeXMnKQogICAgICAgICByZXR1cm4gaW5zdGFsbF9wa2dzCkBAIC0xMzQyLDcgKzEzNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3BrZ3MuYXBwZW5kKHBrZy5zdHJpcCgpKQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIGJiLm5vdGUoIlVuYWJsZSB0byBsaXN0IGFsbCBhdmFpbGFibGUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCi0gICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCiAKICAgICAgICAgc2VsZi5mdWxscGtnbGlzdCA9IGF2YWlsYWJsZV9wa2dzCiAKQEAgLTEzNjksMTIgKzEzOTIsMTIgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBiYi5ub3RlKGNtZCkKLSAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5zdHJpcCgpCisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQotICAgICAgICAgICAgb3MuY2htb2Qoc2F2ZWRfZGlyLCAwNzU1KQorICAgICAgICAgICAgb3MuY2htb2Qoc2F2ZWRfZGlyLCAwbzc1NSkKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBiYi5mYXRhbCgiSW52b2tlIHNhdmVfcnBtcG9zdGluc3QgZmFpbGVkLiBDb21tYW5kICclcycgIgotICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCiAKICAgICAnJydXcml0ZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGFyZ2V0IHVzYWdlJycnCiAgICAgZGVmIHJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKHNlbGYpOgpAQCAtMTM5OCw4ICsxNDIxLDE1NyBAQAogICAgICAgICBmb3IgZiBpbiBycG1fZGJfbG9ja3M6CiAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZiwgVHJ1ZSkKIAorICAgICIiIgorICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIHBhY2thZ2UgaW5mby4KKyAgICAiIiIKKyAgICBkZWYgcGFja2FnZV9pbmZvKHNlbGYsIHBrZyk6CisgICAgICAgIGNtZCA9ICIlcyAlcyBpbmZvIC0tdXJscyAlcyIgJSAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBwa2cpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGxpc3QgYXZhaWxhYmxlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCi1jbGFzcyBPcGtnUE0oUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAjIFNldCBkZWZhdWx0IHZhbHVlcyB0byBhdm9pZCBVbmJvdW5kTG9jYWxFcnJvcgorICAgICAgICBhcmNoID0gIiIKKyAgICAgICAgdmVyID0gIiIKKyAgICAgICAgZmlsZW5hbWUgPSAiIgorCisgICAgICAgICNQYXJzZSBvdXRwdXQKKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk5hbWU6Iik6CisgICAgICAgICAgICAgICAgcGtnID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIlZlcnNpb246Iik6CisgICAgICAgICAgICAgICAgdG1wX3N0ciA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICB2ZXIsIGFyY2ggPSB0bXBfc3RyLnNwbGl0KCJAIikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgR2V0IGZpbGVuYW1lCisgICAgICAgIGluZGV4ID0gcmUuc2VhcmNoKCJeVVJMcyIsIG91dHB1dCwgcmUuTVVMVElMSU5FKQorICAgICAgICB0bXBfc3RyID0gb3V0cHV0W2luZGV4LmVuZCgpOl0KKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wX3N0ci5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiAiLyIgaW4gbGluZToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gbGluZS5zcGxpdCgiICIpWzBdCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIFRvIGhhdmUgdGhlIHNhbWUgZGF0YSB0eXBlIHRoYW4gb3RoZXIgcGFja2FnZV9pbmZvIG1ldGhvZHMKKyAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoLCBmaWxlbmFtZSkKKyAgICAgICAgcGtnX2RpY3QgPSB7fQorICAgICAgICBwa2dfZGljdFtwa2ddID0geyJhcmNoIjphcmNoLCAidmVyIjp2ZXIsICJmaWxlbmFtZSI6ZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGVwYXRoIjogZmlsZXBhdGh9CisKKyAgICAgICAgcmV0dXJuIHBrZ19kaWN0CisKKyAgICAiIiIKKyAgICBSZXR1cm5zIHRoZSBwYXRoIHRvIGEgdG1wZGlyIHdoZXJlIHJlc2lkZXMgdGhlIGNvbnRlbnRzIG9mIGEgcGFja2FnZS4KKworICAgIERlbGV0aW5nIHRoZSB0bXBkaXIgaXMgcmVzcG9uc2FiaWxpdHkgb2YgdGhlIGNhbGxlci4KKworICAgICIiIgorICAgIGRlZiBleHRyYWN0KHNlbGYsIHBrZyk6CisgICAgICAgIHBrZ19pbmZvID0gc2VsZi5wYWNrYWdlX2luZm8ocGtnKQorICAgICAgICBpZiBub3QgcGtnX2luZm86CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGdldCBpbmZvcm1hdGlvbiBmb3IgcGFja2FnZSAnJXMnIHdoaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICJ0cnlpbmcgdG8gZXh0cmFjdCB0aGUgcGFja2FnZS4iICAlIHBrZykKKworICAgICAgICBwa2dfcGF0aCA9IHBrZ19pbmZvW3BrZ11bImZpbGVwYXRoIl0KKworICAgICAgICBjcGlvX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudigiUEFUSCIpLCAiY3BpbyIpCisgICAgICAgIHJwbTJjcGlvX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudigiUEFUSCIpLCAicnBtMmNwaW8iKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShwa2dfcGF0aCk6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGV4dHJhY3QgcGFja2FnZSBmb3IgJyVzJy4iCisgICAgICAgICAgICAgICAgICAgICAiRmlsZSAlcyBkb2Vzbid0IGV4aXN0cyIgJSAocGtnLCBwa2dfcGF0aCkpCisKKyAgICAgICAgdG1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBjdXJyZW50X2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcF9kaXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gIiVzICVzIHwgJXMgLWlkbXYiICUgKHJwbTJjcGlvX2NtZCwgcGtnX3BhdGgsIGNwaW9fY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRtcF9kaXIsIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gZXh0cmFjdCAlcyBwYWNrYWdlLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKHBrZ19wYXRoLCBjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh0bXBfZGlyLCByZWN1cnNlPVRydWUpCisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGV4dHJhY3QgJXMgcGFja2FnZS4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIGF0ICVzIiAlIChwa2dfcGF0aCwgY21kLCBlLmVycm5vLCBlLnN0cmVycm9yLCBlLmZpbGVuYW1lKSkKKworICAgICAgICBiYi5ub3RlKCJFeHRyYWN0ZWQgJXMgdG8gJXMiICUgKHBrZ19wYXRoLCB0bXBfZGlyKSkKKyAgICAgICAgb3MuY2hkaXIoY3VycmVudF9kaXIpCisKKyAgICAgICAgcmV0dXJuIHRtcF9kaXIKKworCitjbGFzcyBPcGtnRHBrZ1BNKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKE9wa2dEcGtnUE0sIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBwYWNrYWdlIGluZm8uCisKKyAgICBUaGlzIG1ldGhvZCBleHRyYWN0cyB0aGUgY29tbW9uIHBhcnRzIGZvciBPcGtnIGFuZCBEcGtnCisgICAgIiIiCisgICAgZGVmIHBhY2thZ2VfaW5mbyhzZWxmLCBwa2csIGNtZCk6CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLmRlY29kZSgidXRmLTgiKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gbGlzdCBhdmFpbGFibGUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCisgICAgICAgIHJldHVybiBvcGtnX3F1ZXJ5KG91dHB1dCkKKworICAgICIiIgorICAgIFJldHVybnMgdGhlIHBhdGggdG8gYSB0bXBkaXIgd2hlcmUgcmVzaWRlcyB0aGUgY29udGVudHMgb2YgYSBwYWNrYWdlLgorCisgICAgRGVsZXRpbmcgdGhlIHRtcGRpciBpcyByZXNwb25zYWJpbGl0eSBvZiB0aGUgY2FsbGVyLgorCisgICAgVGhpcyBtZXRob2QgZXh0cmFjdHMgdGhlIGNvbW1vbiBwYXJ0cyBmb3IgT3BrZyBhbmQgRHBrZworICAgICIiIgorICAgIGRlZiBleHRyYWN0KHNlbGYsIHBrZywgcGtnX2luZm8pOgorCisgICAgICAgIGFyX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudigiUEFUSCIpLCAiYXIiKQorICAgICAgICB0YXJfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCJQQVRIIiksICJ0YXIiKQorICAgICAgICBwa2dfcGF0aCA9IHBrZ19pbmZvW3BrZ11bImZpbGVwYXRoIl0KKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocGtnX3BhdGgpOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBleHRyYWN0IHBhY2thZ2UgZm9yICclcycuIgorICAgICAgICAgICAgICAgICAgICAgIkZpbGUgJXMgZG9lc24ndCBleGlzdHMiICUgKHBrZywgcGtnX3BhdGgpKQorCisgICAgICAgIHRtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgY3VycmVudF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBfZGlyKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICIlcyB4ICVzIiAlIChhcl9jbWQsIHBrZ19wYXRoKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBjbWQgPSAiJXMgeGYgZGF0YS50YXIuKiIgJSB0YXJfY21kCisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUodG1wX2RpciwgcmVjdXJzZT1UcnVlKQorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBleHRyYWN0ICVzIHBhY2thZ2UuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAocGtnX3BhdGgsIGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRtcF9kaXIsIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gZXh0cmFjdCAlcyBwYWNrYWdlLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMgYXQgJXMiICUgKHBrZ19wYXRoLCBjbWQsIGUuZXJybm8sIGUuc3RyZXJyb3IsIGUuZmlsZW5hbWUpKQorCisgICAgICAgIGJiLm5vdGUoIkV4dHJhY3RlZCAlcyB0byAlcyIgJSAocGtnX3BhdGgsIHRtcF9kaXIpKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHRtcF9kaXIsICJkZWJpYW4tYmluYXJ5IikpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4odG1wX2RpciwgImNvbnRyb2wudGFyLmd6IikpCisgICAgICAgIG9zLmNoZGlyKGN1cnJlbnRfZGlyKQorCisgICAgICAgIHJldHVybiB0bXBfZGlyCisKKworY2xhc3MgT3BrZ1BNKE9wa2dEcGtnUE0pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXRfcm9vdGZzLCBjb25maWdfZmlsZSwgYXJjaHMsIHRhc2tfbmFtZT0ndGFyZ2V0Jyk6CiAgICAgICAgIHN1cGVyKE9wa2dQTSwgc2VsZikuX19pbml0X18oZCkKIApAQCAtMTQxMSw3ICsxNTgzLDcgQEAKICAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcigiREVQTE9ZX0RJUl9JUEsiLCBUcnVlKQogICAgICAgICBzZWxmLmRlcGxveV9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCAiZGVwbG95LmxvY2siKQogICAgICAgICBzZWxmLm9wa2dfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvcGtnIikKLSAgICAgICAgc2VsZi5vcGtnX2FyZ3MgPSAiLS12b2xhdGlsZS1jYWNoZSAtZiAlcyAtbyAlcyAiICUgKHNlbGYuY29uZmlnX2ZpbGUsIHRhcmdldF9yb290ZnMpCisgICAgICAgIHNlbGYub3BrZ19hcmdzID0gIi0tdm9sYXRpbGUtY2FjaGUgLWYgJXMgLXQgJXMgLW8gJXMgIiAlIChzZWxmLmNvbmZpZ19maWxlLCBzZWxmLmQuZXhwYW5kKCcke1R9L2lwa3RlbXAvJykgLHRhcmdldF9yb290ZnMpCiAgICAgICAgIHNlbGYub3BrZ19hcmdzICs9IHNlbGYuZC5nZXRWYXIoIk9QS0dfQVJHUyIsIFRydWUpCiAKICAgICAgICAgb3BrZ19saWJfZGlyID0gc2VsZi5kLmdldFZhcignT1BLR0xJQkRJUicsIFRydWUpCkBAIC0xNTUyLDEyICsxNzI0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZmVlZF9hcmNocyBpcyBOb25lKSBhbmQgKG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgb3BrZyBmZWVkIHVybC0lcy0lZCAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdBZGRpbmcgb3BrZyBmZWVkIHVybC0lcy0lZCAoJXMpJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsIHVyaV9pdGVyYXRvciwgdXJpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMvZ3ogdXJpLSVzLSVkICVzLyVzXG4iICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCB1cmlfaXRlcmF0b3IsIHVyaSwgYXJjaCkpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnTm90ZTogYWRkaW5nIG9wa2cgZmVlZCB1cmwtJWQgKCVzKScgJQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdBZGRpbmcgb3BrZyBmZWVkIHVybC0lZCAoJXMpJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAodXJpX2l0ZXJhdG9yLCB1cmkpKQogICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZS53cml0ZSgic3JjL2d6IHVyaS0lZCAlc1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmlfaXRlcmF0b3IsIHVyaSkpCkBAIC0xNTc0LDcgKzE3NDYsNyBAQAogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQogICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUgdGhlIHBhY2thZ2UgaW5kZXggZmlsZXMuIENvbW1hbmQgJyVzJyAiCi0gICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKIApAQCAtMTU5NSwxMiArMTc2NywxMiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6ICVzIiAlICcgJy5qb2luKHBrZ3MpKQogICAgICAgICAgICAgYmIubm90ZShjbWQpCi0gICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAoYmIuZmF0YWwsIGJiLm5vdGUpW2F0dGVtcHRfb25seV0oIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCiAgICAgZGVmIHJlbW92ZShzZWxmLCBwa2dzLCB3aXRoX2RlcGVuZGVuY2llcz1UcnVlKToKICAgICAgICAgaWYgd2l0aF9kZXBlbmRlbmNpZXM6CkBAIC0xNjEyLDExICsxNzg0LDExIEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYmIubm90ZShjbWQpCi0gICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKLSAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQpAQCAtMTY1OSwxMCArMTgzMSwxMCBAQAogICAgICAgICAgICAgICAgIHBrZ19pbmZvID0gY21kICsgcGtnCiAKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHBrZ19pbmZvLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChwa2dfaW5mby5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHBhY2thZ2UgaW5mby4gQ29tbWFuZCAnJXMnICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKHBrZ19pbmZvLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKHBrZ19pbmZvLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCiAKICAgICAgICAgICAgICAgICBpZiBvdXRwdXQgPT0gIiI6CiAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklnbm9yZWQgYmFkIHJlY29tbWVuZGF0aW9uOiAnJXMnIGlzICIKQEAgLTE2OTksNyArMTg3MSw3IEBACiAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHVwZGF0ZS4gQ29tbWFuZCAnJXMnICIKLSAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCiAgICAgICAgICMgRHVtbXkgaW5zdGFsbGF0aW9uCiAgICAgICAgIGNtZCA9ICIlcyAlcyAtLW5vYWN0aW9uIGluc3RhbGwgJXMgIiAlIChzZWxmLm9wa2dfY21kLApAQCAtMTcwOSw3ICsxODgxLDcgQEAKICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gZHVtbXkgaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKLSAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCiAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh0ZW1wX3Jvb3RmcywgVHJ1ZSkKIApAQCAtMTczNCw4ICsxOTA2LDM3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGtnX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1UcnVlKQogCisgICAgIiIiCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgcGFja2FnZSBpbmZvLgorICAgICIiIgorICAgIGRlZiBwYWNrYWdlX2luZm8oc2VsZiwgcGtnKToKKyAgICAgICAgY21kID0gIiVzICVzIGluZm8gJXMiICUgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBwa2cpCisgICAgICAgIHBrZ19pbmZvID0gc3VwZXIoT3BrZ1BNLCBzZWxmKS5wYWNrYWdlX2luZm8ocGtnLCBjbWQpCiAKLWNsYXNzIERwa2dQTShQYWNrYWdlTWFuYWdlcik6CisgICAgICAgIHBrZ19hcmNoID0gcGtnX2luZm9bcGtnXVsiYXJjaCJdCisgICAgICAgIHBrZ19maWxlbmFtZSA9IHBrZ19pbmZvW3BrZ11bImZpbGVuYW1lIl0KKyAgICAgICAgcGtnX2luZm9bcGtnXVsiZmlsZXBhdGgiXSA9IFwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBwa2dfYXJjaCwgcGtnX2ZpbGVuYW1lKQorCisgICAgICAgIHJldHVybiBwa2dfaW5mbworCisgICAgIiIiCisgICAgUmV0dXJucyB0aGUgcGF0aCB0byBhIHRtcGRpciB3aGVyZSByZXNpZGVzIHRoZSBjb250ZW50cyBvZiBhIHBhY2thZ2UuCisKKyAgICBEZWxldGluZyB0aGUgdG1wZGlyIGlzIHJlc3BvbnNhYmlsaXR5IG9mIHRoZSBjYWxsZXIuCisgICAgIiIiCisgICAgZGVmIGV4dHJhY3Qoc2VsZiwgcGtnKToKKyAgICAgICAgcGtnX2luZm8gPSBzZWxmLnBhY2thZ2VfaW5mbyhwa2cpCisgICAgICAgIGlmIG5vdCBwa2dfaW5mbzoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gZ2V0IGluZm9ybWF0aW9uIGZvciBwYWNrYWdlICclcycgd2hpbGUgIgorICAgICAgICAgICAgICAgICAgICAgInRyeWluZyB0byBleHRyYWN0IHRoZSBwYWNrYWdlLiIgICUgcGtnKQorCisgICAgICAgIHRtcF9kaXIgPSBzdXBlcihPcGtnUE0sIHNlbGYpLmV4dHJhY3QocGtnLCBwa2dfaW5mbykKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbih0bXBfZGlyLCAiZGF0YS50YXIuZ3oiKSkKKworICAgICAgICByZXR1cm4gdG1wX2RpcgorCitjbGFzcyBEcGtnUE0oT3BrZ0Rwa2dQTSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHRhcmdldF9yb290ZnMsIGFyY2hzLCBiYXNlX2FyY2hzLCBhcHRfY29uZl9kaXI9Tm9uZSk6CiAgICAgICAgIHN1cGVyKERwa2dQTSwgc2VsZikuX19pbml0X18oZCkKICAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzID0gdGFyZ2V0X3Jvb3RmcwpAQCAtMTc0Niw2ICsxOTQ3LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gYXB0X2NvbmZfZGlyCiAgICAgICAgIHNlbGYuYXB0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgImFwdC5jb25mIikKICAgICAgICAgc2VsZi5hcHRfZ2V0X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiYXB0LWdldCIpCisgICAgICAgIHNlbGYuYXB0X2NhY2hlX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiYXB0LWNhY2hlIikKIAogICAgICAgICBzZWxmLmFwdF9hcmdzID0gZC5nZXRWYXIoIkFQVF9BUkdTIiwgVHJ1ZSkKIApAQCAtMTgyMyw3ICsyMDI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHBfZnVsbCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIiVzIGZvciBwYWNrYWdlICVzIGZhaWxlZCB3aXRoICVkOlxuJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1ZmZpeFsxXSwgcGtnX25hbWUsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VmZml4WzFdLCBwa2dfbmFtZSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkX3BrZ3MuYXBwZW5kKHBrZ19uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKIApAQCAtMTg0MSw3ICsyMDQzLDcgQEAKICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUgdGhlIHBhY2thZ2UgaW5kZXggZmlsZXMuIENvbW1hbmQgJyVzJyAiCi0gICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCiAKICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCiAKQEAgLTE4NjAsNyArMjA2Miw3IEBACiAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgKGJiLmZhdGFsLCBiYi5ub3RlKVthdHRlbXB0X29ubHldKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgICAgICAjIHJlbmFtZSAqLmRwa2ctbmV3IGZpbGVzL2RpcnMKICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi50YXJnZXRfcm9vdGZzKToKQEAgLTE4OTEsNyArMjA5Myw3IEBACiAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgotICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCiAgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgogICAgICAgICBzZWxmLmRlcGxveV9kaXJfbG9jaygpCkBAIC0xOTI1LDExICsyMTI3LDExIEBACiAgICAgICAgICAgICBmb3IgdXJpIGluIGZlZWRfdXJpczoKICAgICAgICAgICAgICAgICBpZiBhcmNoX2xpc3Q6CiAgICAgICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBkcGtnIGNoYW5uZWwgYXQgKCVzKScgJSB1cmkpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdBZGRpbmcgZHBrZyBjaGFubmVsIGF0ICglcyknICUgdXJpKQogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlc19maWxlLndyaXRlKCJkZWIgJXMvJXMgLi9cbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmksIGFyY2gpKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBkcGtnIGNoYW5uZWwgYXQgKCVzKScgJSB1cmkpCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ0FkZGluZyBkcGtnIGNoYW5uZWwgYXQgKCVzKScgJSB1cmkpCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXNfZmlsZS53cml0ZSgiZGViICVzIC4vXG4iICUgdXJpKQogCiAgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmLCBhcmNocywgYmFzZV9hcmNocyk6CkBAIC0yMDI0LDExICsyMjI2LDQwIEBACiAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZml4IGJyb2tlbiBkZXBlbmRlbmNpZXMuIENvbW1hbmQgJyVzJyAiCi0gICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmKToKICAgICAgICAgcmV0dXJuIERwa2dQa2dzTGlzdChzZWxmLmQsIHNlbGYudGFyZ2V0X3Jvb3RmcykubGlzdF9wa2dzKCkKIAorICAgICIiIgorICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIHBhY2thZ2UgaW5mby4KKyAgICAiIiIKKyAgICBkZWYgcGFja2FnZV9pbmZvKHNlbGYsIHBrZyk6CisgICAgICAgIGNtZCA9ICIlcyBzaG93ICVzIiAlIChzZWxmLmFwdF9jYWNoZV9jbWQsIHBrZykKKyAgICAgICAgcGtnX2luZm8gPSBzdXBlcihEcGtnUE0sIHNlbGYpLnBhY2thZ2VfaW5mbyhwa2csIGNtZCkKKworICAgICAgICBwa2dfYXJjaCA9IHBrZ19pbmZvW3BrZ11bInBrZ2FyY2giXQorICAgICAgICBwa2dfZmlsZW5hbWUgPSBwa2dfaW5mb1twa2ddWyJmaWxlbmFtZSJdCisgICAgICAgIHBrZ19pbmZvW3BrZ11bImZpbGVwYXRoIl0gPSBcCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgcGtnX2FyY2gsIHBrZ19maWxlbmFtZSkKKworICAgICAgICByZXR1cm4gcGtnX2luZm8KKworICAgICIiIgorICAgIFJldHVybnMgdGhlIHBhdGggdG8gYSB0bXBkaXIgd2hlcmUgcmVzaWRlcyB0aGUgY29udGVudHMgb2YgYSBwYWNrYWdlLgorCisgICAgRGVsZXRpbmcgdGhlIHRtcGRpciBpcyByZXNwb25zYWJpbGl0eSBvZiB0aGUgY2FsbGVyLgorICAgICIiIgorICAgIGRlZiBleHRyYWN0KHNlbGYsIHBrZyk6CisgICAgICAgIHBrZ19pbmZvID0gc2VsZi5wYWNrYWdlX2luZm8ocGtnKQorICAgICAgICBpZiBub3QgcGtnX2luZm86CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGdldCBpbmZvcm1hdGlvbiBmb3IgcGFja2FnZSAnJXMnIHdoaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICJ0cnlpbmcgdG8gZXh0cmFjdCB0aGUgcGFja2FnZS4iICAlIHBrZykKKworICAgICAgICB0bXBfZGlyID0gc3VwZXIoRHBrZ1BNLCBzZWxmKS5leHRyYWN0KHBrZywgcGtnX2luZm8pCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4odG1wX2RpciwgImRhdGEudGFyLnh6IikpCisKKyAgICAgICAgcmV0dXJuIHRtcF9kaXIKIAogZGVmIGdlbmVyYXRlX2luZGV4X2ZpbGVzKGQpOgogICAgIGNsYXNzZXMgPSBkLmdldFZhcignUEFDS0FHRV9DTEFTU0VTJywgVHJ1ZSkucmVwbGFjZSgicGFja2FnZV8iLCAiIikuc3BsaXQoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5CmluZGV4IGJjMGZkMDYuLjIxZDRkZTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlZGF0YS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWRhdGEucHkKQEAgLTgsNyArOCw3IEBACiAgICAgcGtnZGF0YSA9IHt9CiAKICAgICBkZWYgZGVjb2RlKHN0cik6Ci0gICAgICAgIGMgPSBjb2RlY3MuZ2V0ZGVjb2Rlcigic3RyaW5nX2VzY2FwZSIpCisgICAgICAgIGMgPSBjb2RlY3MuZ2V0ZGVjb2RlcigidW5pY29kZV9lc2NhcGUiKQogICAgICAgICByZXR1cm4gYyhzdHIpWzBdCiAKICAgICBpZiBvcy5hY2Nlc3MoZm4sIG9zLlJfT0spOgpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICBiYi53YXJuKCJObyBmaWxlcyBpbiAlcz8iICUgcGtnZGF0YWRpcikKICAgICAgICAgZmlsZXMgPSBbXQogCi0gICAgZm9yIHBuIGluIGZpbHRlcihsYW1iZGEgZjogbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIGYpKSwgZmlsZXMpOgorICAgIGZvciBwbiBpbiBbZiBmb3IgZiBpbiBmaWxlcyBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgZikpXToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGtnZGF0YSA9IHJlYWRfcGtnZGF0YWZpbGUob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIHBuKSkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weQppbmRleCBhNmZlZTVmLi45NzgxOTI3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlZ3JvdXAucHkKQEAgLTE2LDExICsxNiwxMSBAQAogICAgICAgICAgICAgeWllbGQgcGtnCiAKIGRlZiByZXF1aXJlZF9wYWNrYWdlcyhmZWF0dXJlcywgZCk6Ci0gICAgcmVxID0gZmlsdGVyKGxhbWJkYSBmZWF0dXJlOiBub3QgaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIHJlcSA9IFtmZWF0dXJlIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzIGlmIG5vdCBpc19vcHRpb25hbChmZWF0dXJlLCBkKV0KICAgICByZXR1cm4gcGFja2FnZXMocmVxLCBkKQogCiBkZWYgb3B0aW9uYWxfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgotICAgIG9wdCA9IGZpbHRlcihsYW1iZGEgZmVhdHVyZTogaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIG9wdCA9IFtmZWF0dXJlIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzIGlmIGlzX29wdGlvbmFsKGZlYXR1cmUsIGQpXQogICAgIHJldHVybiBwYWNrYWdlcyhvcHQsIGQpCiAKIGRlZiBhY3RpdmVfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5CmluZGV4IDlkMzYxNzIuLjAzMzJmMTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRjaC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0Y2gucHkKQEAgLTExNyw0MyArMTE3LDUwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIHJldHVybiBvcy5zZXAuam9pbihmaWxlc3BsaXRbc3RyaXBsZXZlbDpdKQogCi0gICAgICAgIGNvcGllZG1vZGUgPSBGYWxzZQotICAgICAgICBmaWxlbGlzdCA9IFtdCi0gICAgICAgIHdpdGggb3BlbihwYXRjaGZpbGUpIGFzIGY6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnLS0tICcpOgotICAgICAgICAgICAgICAgICAgICBwYXRjaHB0aCA9IHBhdGNoZWRwYXRoKGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXRjaHB0aDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGlmIGNvcGllZG1vZGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBwYXRjaHB0aAotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBwYXRjaHB0aAotICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcrKysgJyk6Ci0gICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IHBhdGNoZWRwYXRoKGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhZGRlZGZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcqKiogJyk6Ci0gICAgICAgICAgICAgICAgICAgIGNvcGllZG1vZGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRmaWxlID0gcGF0Y2hlZHBhdGgobGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlbW92ZWRmaWxlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZW1vdmVkZmlsZSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gTm9uZQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gWyd1dGYtOCcsICdsYXRpbi0xJ106CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29waWVkbW9kZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihwYXRjaGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy0tLSAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaHB0aCA9IHBhdGNoZWRwYXRoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhdGNocHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvcGllZG1vZGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IHBhdGNocHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBwYXRjaHB0aAorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJysrKyAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhZGRlZGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKioqICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZG1vZGUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZW1vdmVkZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gTm9uZQogCi0gICAgICAgICAgICAgICAgaWYgYWRkZWRmaWxlIGFuZCByZW1vdmVkZmlsZToKLSAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZGZpbGUgPT0gJy9kZXYvbnVsbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ0EnCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYWRkZWRmaWxlID09ICcvZGV2L251bGwnOgotICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICdEJwotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICdNJwotICAgICAgICAgICAgICAgICAgICBpZiBzcmNkaXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oc3JjZGlyLCBhZGRlZGZpbGUpKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBhZGRlZGZpbGUKLSAgICAgICAgICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKChmdWxscGF0aCwgbW9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhZGRlZGZpbGUgYW5kIHJlbW92ZWRmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWRmaWxlID09ICcvZGV2L251bGwnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ0EnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBhZGRlZGZpbGUgPT0gJy9kZXYvbnVsbCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnRCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ00nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3JjZGlyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oc3JjZGlyLCBhZGRlZGZpbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gYWRkZWRmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKChmdWxscGF0aCwgbW9kZSkpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcignVW5hYmxlIHRvIGRlY29kZSAlcycgJSBwYXRjaGZpbGUpCiAKICAgICAgICAgcmV0dXJuIGZpbGVsaXN0CiAKQEAgLTI3NCwzMCArMjgxLDQzIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBkKToKICAgICAgICAgUGF0Y2hUcmVlLl9faW5pdF9fKHNlbGYsIGRpciwgZCkKKyAgICAgICAgc2VsZi5jb21taXR1c2VyID0gZC5nZXRWYXIoJ1BBVENIX0dJVF9VU0VSX05BTUUnLCBUcnVlKQorICAgICAgICBzZWxmLmNvbW1pdGVtYWlsID0gZC5nZXRWYXIoJ1BBVENIX0dJVF9VU0VSX0VNQUlMJywgVHJ1ZSkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZXh0cmFjdFBhdGNoSGVhZGVyKHBhdGNoZmlsZSk6CiAgICAgICAgICIiIgogICAgICAgICBFeHRyYWN0IGp1c3QgdGhlIGhlYWRlciBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgYSBwYXRjaCBmaWxlCiAgICAgICAgICIiIgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHdpdGggb3BlbihwYXRjaGZpbGUsICdyJykgYXMgZjoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdJbmRleDogJykgb3IgbGluZS5zdGFydHN3aXRoKCdkaWZmIC0nKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gWyd1dGYtOCcsICdsYXRpbi0xJ106CisgICAgICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGNoZmlsZSwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnSW5kZXg6ICcpIG9yIGxpbmUuc3RhcnRzd2l0aCgnZGlmZiAtJykgb3IgbGluZS5zdGFydHN3aXRoKCctLS0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcignVW5hYmxlIHRvIGZpbmQgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gZGVjb2RlICVzJyAlIHBhdGNoZmlsZSkKICAgICAgICAgcmV0dXJuIGxpbmVzCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGRlY29kZUF1dGhvcihsaW5lKToKICAgICAgICAgZnJvbSBlbWFpbC5oZWFkZXIgaW1wb3J0IGRlY29kZV9oZWFkZXIKICAgICAgICAgYXV0aG9ydmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkucmVwbGFjZSgnIicsICcnKQotICAgICAgICByZXR1cm4gZGVjb2RlX2hlYWRlcihhdXRob3J2YWwpWzBdWzBdCisgICAgICAgIHJlc3VsdCA9ICBkZWNvZGVfaGVhZGVyKGF1dGhvcnZhbClbMF1bMF0KKyAgICAgICAgaWYgaGFzYXR0cihyZXN1bHQsICdkZWNvZGUnKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBpbnRlcnByZXRQYXRjaEhlYWRlcihoZWFkZXJsaW5lcyk6CiAgICAgICAgIGltcG9ydCByZQogICAgICAgICBhdXRob3JfcmUgPSByZS5jb21waWxlKCdbXFMgXSsgPFxTK0BcUytcLlxTKz4nKQorICAgICAgICBmcm9tX2NvbW1pdF9yZSA9IHJlLmNvbXBpbGUoJ15Gcm9tIFthLXowLTldezQwfSAuKicpCiAgICAgICAgIG91dGxpbmVzID0gW10KICAgICAgICAgYXV0aG9yID0gTm9uZQogICAgICAgICBkYXRlID0gTm9uZQpAQCAtMzI3LDExICszNDcsMzkgQEAKICAgICAgICAgICAgICAgICAjIGdpdCBpcyBmdXNzeSBhYm91dCBhdXRob3IgZm9ybWF0dGluZyBpLmUuIGl0IG11c3QgYmUgTmFtZSA8ZW1haWxAZG9tYWluPgogICAgICAgICAgICAgICAgIGlmIGF1dGhvcl9yZS5tYXRjaChhdXRob3J2YWwpOgogICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSBhdXRob3J2YWwKKyAgICAgICAgICAgIGVsaWYgZnJvbV9jb21taXRfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCB3YW50IHRoZSBGcm9tIDxjb21taXQ+IGxpbmUgLSBpZiBpdCdzIHByZXNlbnQgaXQgd2lsbCBicmVhayByZWJhc2luZworICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQobGluZSkKKworICAgICAgICBpZiBub3Qgc3ViamVjdDoKKyAgICAgICAgICAgIGZpcnN0bGluZSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGhlYWRlcmxpbmVzOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBmaXJzdGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFNlY29uZCBsaW5lIGlzIG5vdCBibGFuaywgdGhlIGZpcnN0IGxpbmUgcHJvYmFibHkgaXNuJ3QgdXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGxpbmUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBmaXJzdGxpbmUgPSBsaW5lCisgICAgICAgICAgICBpZiBmaXJzdGxpbmUgYW5kIG5vdCBmaXJzdGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnSW5kZXg6JywgJ1Vwc3RyZWFtLVN0YXR1czonKSkgYW5kIGxlbihmaXJzdGxpbmUpIDwgMTAwOgorICAgICAgICAgICAgICAgIHN1YmplY3QgPSBmaXJzdGxpbmUKKwogICAgICAgICByZXR1cm4gb3V0bGluZXMsIGF1dGhvciwgZGF0ZSwgc3ViamVjdAogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcmVwYXJlQ29tbWl0KHBhdGNoZmlsZSk6CisgICAgZGVmIGdpdENvbW1hbmRVc2VyT3B0aW9ucyhjbWQsIGNvbW1pdHVzZXI9Tm9uZSwgY29tbWl0ZW1haWw9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgaWYgZDoKKyAgICAgICAgICAgIGNvbW1pdHVzZXIgPSBkLmdldFZhcignUEFUQ0hfR0lUX1VTRVJfTkFNRScsIFRydWUpCisgICAgICAgICAgICBjb21taXRlbWFpbCA9IGQuZ2V0VmFyKCdQQVRDSF9HSVRfVVNFUl9FTUFJTCcsIFRydWUpCisgICAgICAgIGlmIGNvbW1pdHVzZXI6CisgICAgICAgICAgICBjbWQgKz0gWyctYycsICd1c2VyLm5hbWU9IiVzIicgJSBjb21taXR1c2VyXQorICAgICAgICBpZiBjb21taXRlbWFpbDoKKyAgICAgICAgICAgIGNtZCArPSBbJy1jJywgJ3VzZXIuZW1haWw9IiVzIicgJSBjb21taXRlbWFpbF0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJlcGFyZUNvbW1pdChwYXRjaGZpbGUsIGNvbW1pdHVzZXI9Tm9uZSwgY29tbWl0ZW1haWw9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBQcmVwYXJlIGEgZ2l0IGNvbW1pdCBjb21tYW5kIGxpbmUgYmFzZWQgb24gdGhlIGhlYWRlciBmcm9tIGEgcGF0Y2ggZmlsZQogICAgICAgICAodHlwaWNhbGx5IHRoaXMgaXMgdXNlZnVsIGZvciBwYXRjaGVzIHRoYXQgY2Fubm90IGJlIGFwcGxpZWQgd2l0aCAiZ2l0IGFtIiBkdWUgdG8gZm9ybWF0dGluZykKQEAgLTM0MCwyMSArMzg4LDI0IEBACiAgICAgICAgICMgUHJvY2VzcyBwYXRjaCBoZWFkZXIgYW5kIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uCiAgICAgICAgIGxpbmVzID0gR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaEhlYWRlcihwYXRjaGZpbGUpCiAgICAgICAgIG91dGxpbmVzLCBhdXRob3IsIGRhdGUsIHN1YmplY3QgPSBHaXRBcHBseVRyZWUuaW50ZXJwcmV0UGF0Y2hIZWFkZXIobGluZXMpCi0gICAgICAgIGlmIG5vdCBhdXRob3Igb3Igbm90IHN1YmplY3Q6CisgICAgICAgIGlmIG5vdCBhdXRob3Igb3Igbm90IHN1YmplY3Qgb3Igbm90IGRhdGU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJsb2ciLCAiLS1mb3JtYXQ9ZW1haWwiLCAiLS1kaWZmLWZpbHRlcj1BIiwgIi0tIiwgcGF0Y2hmaWxlXQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAibG9nIiwgIi0tZm9ybWF0PWVtYWlsIiwgIi0tZm9sbG93IiwgIi0tZGlmZi1maWx0ZXI9QSIsICItLSIsIHBhdGNoZmlsZV0KICAgICAgICAgICAgICAgICBvdXQgPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIG9zLnBhdGguZGlybmFtZShwYXRjaGZpbGUpKQogICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgogICAgICAgICAgICAgICAgIG91dCA9IE5vbmUKICAgICAgICAgICAgIGlmIG91dDoKICAgICAgICAgICAgICAgICBfLCBuZXdhdXRob3IsIG5ld2RhdGUsIG5ld3N1YmplY3QgPSBHaXRBcHBseVRyZWUuaW50ZXJwcmV0UGF0Y2hIZWFkZXIob3V0LnNwbGl0bGluZXMoKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgYXV0aG9yIG9yIG5vdCBkYXRlOgotICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIHJlYWxseSBuZWVkIHRvIGdvIHRvZ2V0aGVyCisgICAgICAgICAgICAgICAgaWYgbm90IGF1dGhvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSBzZXR0aW5nIHRoZSBhdXRob3IgdGhlbiB0aGUgZGF0ZSBzaG91bGQgYmUgc2V0IGFzIHdlbGwKICAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gbmV3YXV0aG9yCiAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXdkYXRlCisgICAgICAgICAgICAgICAgZWxpZiBub3QgZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBkbyB0aGlzIHdlJ2xsIGdldCB0aGUgY3VycmVudCBkYXRlLCBhdCBsZWFzdCB0aGlzIHdpbGwgYmUgY2xvc2VyCisgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXdkYXRlCiAgICAgICAgICAgICAgICAgaWYgbm90IHN1YmplY3Q6CiAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QgPSBuZXdzdWJqZWN0Ci0gICAgICAgIGlmIHN1YmplY3Q6CisgICAgICAgIGlmIHN1YmplY3QgYW5kIG91dGxpbmVzIGFuZCBub3Qgb3V0bGluZXNbMF0uc3RyaXAoKSA9PSBzdWJqZWN0OgogICAgICAgICAgICAgb3V0bGluZXMuaW5zZXJ0KDAsICclc1xuXG4nICUgc3ViamVjdC5zdHJpcCgpKQogCiAgICAgICAgICMgV3JpdGUgb3V0IGNvbW1pdCBtZXNzYWdlIHRvIGEgZmlsZQpAQCAtMzYzLDcgKzQxNCw5IEBACiAgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRsaW5lczoKICAgICAgICAgICAgICAgICB0Zi53cml0ZShsaW5lKQogICAgICAgICAjIFByZXBhcmUgZ2l0IGNvbW1hbmQKLSAgICAgICAgY21kID0gWyJnaXQiLCAiY29tbWl0IiwgIi1GIiwgdG1wZmlsZV0KKyAgICAgICAgY21kID0gWyJnaXQiXQorICAgICAgICBHaXRBcHBseVRyZWUuZ2l0Q29tbWFuZFVzZXJPcHRpb25zKGNtZCwgY29tbWl0dXNlciwgY29tbWl0ZW1haWwpCisgICAgICAgIGNtZCArPSBbImNvbW1pdCIsICItRiIsIHRtcGZpbGVdCiAgICAgICAgICMgZ2l0IGRvZXNuJ3QgbGlrZSBwbGFpbiBlbWFpbCBhZGRyZXNzZXMgYXMgYXV0aG9ycwogICAgICAgICBpZiBhdXRob3IgYW5kICc8JyBpbiBhdXRob3I6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWF1dGhvcj0iJXMiJyAlIGF1dGhvcikKQEAgLTM4NCwxNiArNDM3LDI0IEBACiAgICAgICAgICAgICBvdXQgPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHRyZWUpCiAgICAgICAgICAgICBpZiBvdXQ6CiAgICAgICAgICAgICAgICAgZm9yIHNyY2ZpbGUgaW4gb3V0LnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMgPSBbXQotICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gTm9uZQotICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoR2l0QXBwbHlUcmVlLnBhdGNoX2xpbmVfcHJlZml4KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IGxpbmUuc3BsaXQoKVstMV0uc3RyaXAoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChHaXRBcHBseVRyZWUuaWdub3JlX2NvbW1pdF9wcmVmaXgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZvciBlbmNvZGluZyBpbiBbJ3V0Zi04JywgJ2xhdGluLTEnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChHaXRBcHBseVRyZWUucGF0Y2hfbGluZV9wcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBsaW5lLnNwbGl0KClbLTFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKEdpdEFwcGx5VHJlZS5pZ25vcmVfY29tbWl0X3ByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcignVW5hYmxlIHRvIGZpbmQgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gZGVjb2RlICVzJyAlIHNyY2ZpbGUpCisKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dGZpbGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShzcmNmaWxlKQogICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dGRpciwgb3V0ZmlsZSksICd3JykgYXMgb2Y6CkBAIC00MzQsMTIgKzQ5NSwxNCBAQAogICAgICAgICAgICAgIyBjaGFuZ2Ugb3RoZXIgcGxhY2VzIHdoaWNoIHJlYWQgaXQgYmFjawogICAgICAgICAgICAgZi53cml0ZSgnZWNobyA+PiAkMVxuJykKICAgICAgICAgICAgIGYud3JpdGUoJ2VjaG8gIiVzOiAkUEFUQ0hGSUxFIiA+PiAkMVxuJyAlIEdpdEFwcGx5VHJlZS5wYXRjaF9saW5lX3ByZWZpeCkKLSAgICAgICAgb3MuY2htb2QoY29tbWl0aG9vaywgMDc1NSkKKyAgICAgICAgb3MuY2htb2QoY29tbWl0aG9vaywgMG83NTUpCiAgICAgICAgIHNodXRpbC5jb3B5Mihjb21taXRob29rLCBhcHBseWhvb2spCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBhdGNoZmlsZXZhciA9ICdQQVRDSEZJTEU9IiVzIicgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWydmaWxlJ10pCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbcGF0Y2hmaWxldmFyLCAiZ2l0IiwgIi0td29yay10cmVlPSVzIiAlIHJlcG9yb290LCAiYW0iLCAiLTMiLCAiLS1rZWVwLWNyIiwgIi1wJXMiICUgcGF0Y2hbJ3N0cmlwcGF0aCddXQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gW3BhdGNoZmlsZXZhciwgImdpdCIsICItLXdvcmstdHJlZT0lcyIgJSByZXBvcm9vdF0KKyAgICAgICAgICAgICAgICBzZWxmLmdpdENvbW1hbmRVc2VyT3B0aW9ucyhzaGVsbGNtZCwgc2VsZi5jb21taXR1c2VyLCBzZWxmLmNvbW1pdGVtYWlsKQorICAgICAgICAgICAgICAgIHNoZWxsY21kICs9IFsiYW0iLCAiLTMiLCAiLS1rZWVwLWNyIiwgIi1wJXMiICUgcGF0Y2hbJ3N0cmlwcGF0aCddXQogICAgICAgICAgICAgICAgIHJldHVybiBfYXBwbHlwYXRjaGhlbHBlcihzaGVsbGNtZCwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCiAgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIGFib3J0IHRoZSBnaXQgYW0sIG9yIHdlJ2xsIHN0aWxsIGJlIHdpdGhpbiBpdCBhdCB0aGUgZW5kCkBAIC00NjksNyArNTMyLDcgQEAKICAgICAgICAgICAgICAgICBzaGVsbGNtZCA9IFsiZ2l0IiwgInJlc2V0IiwgIkhFQUQiLCBzZWxmLnBhdGNoZGlyXQogICAgICAgICAgICAgICAgIG91dHB1dCArPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQogICAgICAgICAgICAgICAgICMgQ29tbWl0IHRoZSByZXN1bHQKLSAgICAgICAgICAgICAgICAodG1wZmlsZSwgc2hlbGxjbWQpID0gc2VsZi5wcmVwYXJlQ29tbWl0KHBhdGNoWydmaWxlJ10pCisgICAgICAgICAgICAgICAgKHRtcGZpbGUsIHNoZWxsY21kKSA9IHNlbGYucHJlcGFyZUNvbW1pdChwYXRjaFsnZmlsZSddLCBzZWxmLmNvbW1pdHVzZXIsIHNlbGYuY29tbWl0ZW1haWwpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzaGVsbGNtZC5pbnNlcnQoMCwgcGF0Y2hmaWxldmFyKQogICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKQEAgLTY3Miw3ICs3MzUsNyBAQAogICAgICAgICAgICAgICAgIGYud3JpdGUoImVjaG8gJ1J1biBcInF1aWx0IHJlZnJlc2hcIiB3aGVuIHBhdGNoIGlzIGNvcnJlY3RlZCwgcHJlc3MgQ1RSTCtEIHRvIGV4aXQuJ1xuIikKICAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICcnXG4iKQogICAgICAgICAgICAgICAgIGYud3JpdGUoIiAiLmpvaW4ocGF0Y2hjbWQpICsgIlxuIikKLSAgICAgICAgICAgIG9zLmNobW9kKHJjZmlsZSwgMDc3NSkKKyAgICAgICAgICAgIG9zLmNobW9kKHJjZmlsZSwgMG83NzUpCiAKICAgICAgICAgICAgIHNlbGYudGVybWluYWwoImJhc2ggLS1yY2ZpbGUgIiArIHJjZmlsZSwgJ1BhdGNoIFJlamVjdHM6IFBsZWFzZSBmaXggcGF0Y2ggcmVqZWN0cyBtYW51YWxseScsIHNlbGYucGF0Y2hzZXQuZCkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGgucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0aC5weQppbmRleCA0MTNlYmZiLi4wNmE1YWYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0aC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0aC5weQpAQCAtNjUsMjIgKzY1LDMwIEBACiAgICAgIyBUaGlzIHdheSB3ZSBhbHNvIHByZXNlcnZlIGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzIGluIHRoZSB0cmVlLgogCiAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKLSAgICBjbWQgPSAndGFyIC1jZiAtIC1DICVzIC1wIC4gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgZHN0KQotICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICBjbWQgPSAidGFyIC0teGF0dHJzIC0teGF0dHJzLWluY2x1ZGU9JyonIC1jZiAtIC1DICVzIC1wIC4gfCB0YXIgLS14YXR0cnMgLS14YXR0cnMtaW5jbHVkZT0nKicgLXhmIC0gLUMgJXMiICUgKHNyYywgZHN0KQorICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogCiBkZWYgY29weWhhcmRsaW5rdHJlZShzcmMsIGRzdCk6CiAgICAgIiIiIE1ha2UgdGhlIGhhcmQgbGluayB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgY29weS4gIiIiCiAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKICAgICBpZiBvcy5wYXRoLmlzZGlyKHNyYykgYW5kIG5vdCBsZW4ob3MubGlzdGRpcihzcmMpKToKLSAgICAgICAgcmV0dXJuCQorICAgICAgICByZXR1cm4KIAogICAgIGlmIChvcy5zdGF0KHNyYykuc3RfZGV2ID09ICBvcy5zdGF0KGRzdCkuc3RfZGV2KToKICAgICAgICAgIyBOZWVkIHRvIGNvcHkgZGlyZWN0b3JpZXMgb25seSB3aXRoIHRhciBmaXJzdCBzaW5jZSBjcCB3aWxsIGVycm9yIGlmIHR3byAKICAgICAgICAgIyB3cml0ZXJzIHRyeSBhbmQgY3JlYXRlIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lIHRpbWUKLSAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXR5cGUgZCAtcHJpbnQgfCB0YXIgLWNmIC0gLUMgJXMgLXAgLS1maWxlcy1mcm9tIC0gLS1uby1yZWN1cnNpb24gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgc3JjLCBkc3QpCi0gICAgICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICVzJyAlIChzcmMsIGRzdCkKLSAgICAgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBjbWQgPSAiY2QgJXM7IGZpbmQgLiAtdHlwZSBkIC1wcmludCB8IHRhciAtLXhhdHRycyAtLXhhdHRycy1pbmNsdWRlPScqJyAtY2YgLSAtQyAlcyAtcCAtLW5vLXJlY3Vyc2lvbiAtLWZpbGVzLWZyb20gLSB8IHRhciAtLXhhdHRycyAtLXhhdHRycy1pbmNsdWRlPScqJyAteGYgLSAtQyAlcyIgJSAoc3JjLCBzcmMsIGRzdCkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHNvdXJjZSA9ICcnCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3JjKToKKyAgICAgICAgICAgIGltcG9ydCBnbG9iCisgICAgICAgICAgICBpZiBsZW4oZ2xvYi5nbG9iKCclcy8uPz8qJyAlIHNyYykpID4gMDoKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSAnJXMvLj8/KiAnICUgc3JjCisgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyAnJXMvKicgJSBzcmMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZSA9IHNyYworICAgICAgICBjbWQgPSAnY3AgLWFmbCAtLXByZXNlcnZlPXhhdHRyICVzICVzJyAlIChzb3VyY2UsIGRzdCkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAgICAgZWxzZToKICAgICAgICAgY29weXRyZWUoc3JjLCBkc3QpCiAKQEAgLTEwNSw0NyArMTEzLDYgQEAKICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Qgb3Igb3MucmVhZGxpbmsoZGVzdGluYXRpb24pICE9IHNvdXJjZToKICAgICAgICAgICAgIHJhaXNlCiAKLWNsYXNzIENhbGxlZFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXRjb2RlLCBjbWQsIG91dHB1dCA9IE5vbmUpOgotICAgICAgICBzZWxmLnJldGNvZGUgPSByZXRjb2RlCi0gICAgICAgIHNlbGYuY21kID0gY21kCi0gICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0Ci0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkIHdpdGggb3V0cHV0ICVzIiAlIChzZWxmLmNtZCwgc2VsZi5yZXRjb2RlLCBzZWxmLm91dHB1dCkKLQotIyBOb3QgbmVlZGVkIHdoZW4gd2UgbW92ZSB0byBweXRob24gMi43Ci1kZWYgY2hlY2tfb3V0cHV0KCpwb3BlbmFyZ3MsICoqa3dhcmdzKToKLSAgICByIiIiUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgYW5kIHJldHVybiBpdHMgb3V0cHV0IGFzIGEgYnl0ZSBzdHJpbmcuCi0KLSAgICBJZiB0aGUgZXhpdCBjb2RlIHdhcyBub24temVybyBpdCByYWlzZXMgYSBDYWxsZWRQcm9jZXNzRXJyb3IuICBUaGUKLSAgICBDYWxsZWRQcm9jZXNzRXJyb3Igb2JqZWN0IHdpbGwgaGF2ZSB0aGUgcmV0dXJuIGNvZGUgaW4gdGhlIHJldHVybmNvZGUKLSAgICBhdHRyaWJ1dGUgYW5kIG91dHB1dCBpbiB0aGUgb3V0cHV0IGF0dHJpYnV0ZS4KLQotICAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgUG9wZW4gY29uc3RydWN0b3IuICBFeGFtcGxlOgotCi0gICAgPj4+IGNoZWNrX291dHB1dChbImxzIiwgIi1sIiwgIi9kZXYvbnVsbCJdKQotICAgICdjcnctcnctcnctIDEgcm9vdCByb290IDEsIDMgT2N0IDE4ICAyMDA3IC9kZXYvbnVsbFxuJwotCi0gICAgVGhlIHN0ZG91dCBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCBhcyBpdCBpcyB1c2VkIGludGVybmFsbHkuCi0gICAgVG8gY2FwdHVyZSBzdGFuZGFyZCBlcnJvciBpbiB0aGUgcmVzdWx0LCB1c2Ugc3RkZXJyPVNURE9VVC4KLQotICAgID4+PiBjaGVja19vdXRwdXQoWyIvYmluL3NoIiwgIi1jIiwKLSAgICAuLi4gICAgICAgICAgICAgICAibHMgLWwgbm9uX2V4aXN0ZW50X2ZpbGUgOyBleGl0IDAiXSwKLSAgICAuLi4gICAgICAgICAgICAgIHN0ZGVycj1TVERPVVQpCi0gICAgJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJwotICAgICIiIgotICAgIGlmICdzdGRvdXQnIGluIGt3YXJnczoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3Rkb3V0IGFyZ3VtZW50IG5vdCBhbGxvd2VkLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uJykKLSAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCAqcG9wZW5hcmdzLCAqKmt3YXJncykKLSAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKLSAgICByZXRjb2RlID0gcHJvY2Vzcy5wb2xsKCkKLSAgICBpZiByZXRjb2RlOgotICAgICAgICBjbWQgPSBrd2FyZ3MuZ2V0KCJhcmdzIikKLSAgICAgICAgaWYgY21kIGlzIE5vbmU6Ci0gICAgICAgICAgICBjbWQgPSBwb3BlbmFyZ3NbMF0KLSAgICAgICAgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yKHJldGNvZGUsIGNtZCwgb3V0cHV0PW91dHB1dCkKLSAgICByZXR1cm4gb3V0cHV0Ci0KIGRlZiBmaW5kKGRpciwgKip3YWxrb3B0aW9ucyk6CiAgICAgIiIiIEdpdmVuIGEgZGlyZWN0b3J5LCByZWN1cnNlcyBpbnRvIHRoYXQgZGlyZWN0b3J5LAogICAgIHJldHVybmluZyBhbGwgZmlsZXMgYXMgYWJzb2x1dGUgcGF0aHMuICIiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Byc2VydmljZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkKaW5kZXggYjBjYmNiMS4uMDA1NGY5NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Byc2VydmljZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcHJzZXJ2aWNlLnB5CkBAIC0xLDcgKzEsNyBAQAogCiBkZWYgcHJzZXJ2X21ha2VfY29ubihkLCBjaGVjayA9IEZhbHNlKToKICAgICBpbXBvcnQgcHJzZXJ2LnNlcnYKLSAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoIlBSU0VSVl9IT1NUIiwgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgaG9zdF9wYXJhbXMgPSBsaXN0KFtfZiBmb3IgX2YgaW4gKGQuZ2V0VmFyKCJQUlNFUlZfSE9TVCIsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpIGlmIF9mXSkKICAgICB0cnk6CiAgICAgICAgIGNvbm4gPSBOb25lCiAgICAgICAgIGNvbm4gPSBwcnNlcnYuc2Vydi5QUlNlcnZlckNvbm5lY3Rpb24oaG9zdF9wYXJhbXNbMF0sIGludChob3N0X3BhcmFtc1sxXSkpCkBAIC05LDcgKzksNyBAQAogICAgICAgICAgICAgaWYgbm90IGNvbm4ucGluZygpOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignc2VydmljZSBub3QgYXZhaWxhYmxlJykKICAgICAgICAgZC5zZXRWYXIoIl9fUFJTRVJWX0NPTk4iLGNvbm4pCi0gICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXhjOgorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgogICAgICAgICBiYi5mYXRhbCgiQ29ubmVjdGluZyB0byBQUiBzZXJ2aWNlICVzOiVzIGZhaWxlZDogJXMiICUgKGhvc3RfcGFyYW1zWzBdLCBob3N0X3BhcmFtc1sxXSwgc3RyKGV4YykpKQogCiAgICAgcmV0dXJuIGNvbm4KQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCiAKIGRlZiBwcnNlcnZfY2hlY2tfYXZhaWwoZCk6Ci0gICAgaG9zdF9wYXJhbXMgPSBmaWx0ZXIoTm9uZSwgKGQuZ2V0VmFyKCJQUlNFUlZfSE9TVCIsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpKQorICAgIGhvc3RfcGFyYW1zID0gbGlzdChbX2YgZm9yIF9mIGluIChkLmdldFZhcigiUFJTRVJWX0hPU1QiLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKSBpZiBfZl0pCiAgICAgdHJ5OgogICAgICAgICBpZiBsZW4oaG9zdF9wYXJhbXMpICE9IDI6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9xYS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9xYS5weQppbmRleCAzY2ZlZWU3Li5mYmU3MTlkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcWEucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3FhLnB5CkBAIC00Myw0OCArNDMsNDggQEAKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNlbGYubmFtZSk6CiAgICAgICAgICAgICByYWlzZSBOb3RFTEZGaWxlRXJyb3IoIiVzIGlzIG5vdCBhIG5vcm1hbCBmaWxlIiAlIHNlbGYubmFtZSkKIAotICAgICAgICBzZWxmLmZpbGUgPSBmaWxlKHNlbGYubmFtZSwgInIiKQotICAgICAgICAjIFJlYWQgNGsgd2hpY2ggc2hvdWxkIGNvdmVyIG1vc3Qgb2YgdGhlIGhlYWRlcnMgd2UncmUgYWZ0ZXIKLSAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5maWxlLnJlYWQoNDA5NikKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYubmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICMgUmVhZCA0ayB3aGljaCBzaG91bGQgY292ZXIgbW9zdCBvZiB0aGUgaGVhZGVycyB3ZSdyZSBhZnRlcgorICAgICAgICAgICAgc2VsZi5kYXRhID0gZi5yZWFkKDQwOTYpCiAKICAgICAgICAgaWYgbGVuKHNlbGYuZGF0YSkgPCBFTEZGaWxlLkVJX05JREVOVCArIDQ6CiAgICAgICAgICAgICByYWlzZSBOb3RFTEZGaWxlRXJyb3IoIiVzIGlzIG5vdCBhbiBFTEYiICUgc2VsZi5uYW1lKQogCi0gICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVswXSwgY2hyKDB4N2YpICkKLSAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzFdLCAnRScpCi0gICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVsyXSwgJ0wnKQotICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbM10sICdGJykKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzBdLCAweDdmKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMV0sIG9yZCgnRScpKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMl0sIG9yZCgnTCcpKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbM10sIG9yZCgnRicpKQogICAgICAgICBpZiBzZWxmLmJpdHMgPT0gMDoKLSAgICAgICAgICAgIGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBjaHIoRUxGRmlsZS5FTEZDTEFTUzMyKToKKyAgICAgICAgICAgIGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBFTEZGaWxlLkVMRkNMQVNTMzI6CiAgICAgICAgICAgICAgICAgc2VsZi5iaXRzID0gMzIKLSAgICAgICAgICAgIGVsaWYgc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdID09IGNocihFTEZGaWxlLkVMRkNMQVNTNjQpOgorICAgICAgICAgICAgZWxpZiBzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10gPT0gRUxGRmlsZS5FTEZDTEFTUzY0OgogICAgICAgICAgICAgICAgIHNlbGYuYml0cyA9IDY0CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgTm90IDMyLWJpdCBvciA2NC4uIGxldHMgYXNzZXJ0CiAgICAgICAgICAgICAgICAgcmFpc2UgTm90RUxGRmlsZUVycm9yKCJFTEYgYnV0IG5vdCAzMiBvciA2NCBiaXQuIikKICAgICAgICAgZWxpZiBzZWxmLmJpdHMgPT0gMzI6Ci0gICAgICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10sIGNocihFTEZGaWxlLkVMRkNMQVNTMzIpKQorICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBFTEZGaWxlLkVMRkNMQVNTMzIpCiAgICAgICAgIGVsaWYgc2VsZi5iaXRzID09IDY0OgotICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBjaHIoRUxGRmlsZS5FTEZDTEFTUzY0KSkKKyAgICAgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSwgRUxGRmlsZS5FTEZDTEFTUzY0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgTm90RUxGRmlsZUVycm9yKCJNdXN0IHNwZWNpZnkgdW5rbm93biwgMzIgb3IgNjQgYml0IHNpemUuIikKLSAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfVkVSU0lPTl0sIGNocihFTEZGaWxlLkVWX0NVUlJFTlQpICkKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfVkVSU0lPTl0sIEVMRkZpbGUuRVZfQ1VSUkVOVCkKIAogICAgICAgICBzZWxmLnNleCA9IHNlbGYuZGF0YVtFTEZGaWxlLkVJX0RBVEFdCi0gICAgICAgIGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEFOT05FKToKKyAgICAgICAgaWYgc2VsZi5zZXggPT0gRUxGRmlsZS5FTEZEQVRBTk9ORToKICAgICAgICAgICAgIHJhaXNlIE5vdEVMRkZpbGVFcnJvcigic2VsZi5zZXggPT0gRUxGREFUQU5PTkUiKQotICAgICAgICBlbGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEEyTFNCKToKKyAgICAgICAgZWxpZiBzZWxmLnNleCA9PSBFTEZGaWxlLkVMRkRBVEEyTFNCOgogICAgICAgICAgICAgc2VsZi5zZXggPSAiPCIKLSAgICAgICAgZWxpZiBzZWxmLnNleCA9PSBjaHIoRUxGRmlsZS5FTEZEQVRBMk1TQik6CisgICAgICAgIGVsaWYgc2VsZi5zZXggPT0gRUxGRmlsZS5FTEZEQVRBMk1TQjoKICAgICAgICAgICAgIHNlbGYuc2V4ID0gIj4iCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBOb3RFTEZGaWxlRXJyb3IoIlVua25vd24gc2VsZi5zZXgiKQogCiAgICAgZGVmIG9zQWJpKHNlbGYpOgotICAgICAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtFTEZGaWxlLkVJX09TQUJJXSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtFTEZGaWxlLkVJX09TQUJJXQogCiAgICAgZGVmIGFiaVZlcnNpb24oc2VsZik6Ci0gICAgICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQUJJVkVSU0lPTl0pCisgICAgICAgIHJldHVybiBzZWxmLmRhdGFbRUxGRmlsZS5FSV9BQklWRVJTSU9OXQogCiAgICAgZGVmIGFiaVNpemUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmJpdHMKQEAgLTE0NCw4ICsxNDQsMjggQEAKICAgICAgICAgICAgIGJiLm5vdGUoIiVzICVzICVzIGZhaWxlZDogJXMiICUgKG9iamR1bXAsIGNtZCwgc2VsZi5uYW1lLCBlKSkKICAgICAgICAgICAgIHJldHVybiAiIgogCitkZWYgZWxmX21hY2hpbmVfdG9fc3RyaW5nKG1hY2hpbmUpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgbmFtZSBvZiBhIGdpdmVuIEVMRiBlX21hY2hpbmUgZmllbGQgb3IgdGhlIGhleCB2YWx1ZSBhcyBhIHN0cmluZworICAgIGlmIGl0IGlzbid0IHJlY29nbmlzZWQuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgMHgwMjogIlNQQVJDIiwKKyAgICAgICAgICAgIDB4MDM6ICJ4ODYiLAorICAgICAgICAgICAgMHgwODogIk1JUFMiLAorICAgICAgICAgICAgMHgxNDogIlBvd2VyUEMiLAorICAgICAgICAgICAgMHgyODogIkFSTSIsCisgICAgICAgICAgICAweDJBOiAiU3VwZXJIIiwKKyAgICAgICAgICAgIDB4MzI6ICJJQS02NCIsCisgICAgICAgICAgICAweDNFOiAieDg2LTY0IiwKKyAgICAgICAgICAgIDB4Qjc6ICJBQXJjaDY0IgorICAgICAgICB9W21hY2hpbmVdCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gIlVua25vd24gKCVzKSIgJSByZXByKG1hY2hpbmUpCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgaW1wb3J0IHN5cwogICAgIGVsZiA9IEVMRkZpbGUoc3lzLmFyZ3ZbMV0pCiAgICAgZWxmLm9wZW4oKQotICAgIHByaW50IGVsZi5pc0R5bmFtaWMoKQorICAgIHByaW50KGVsZi5pc0R5bmFtaWMoKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weQppbmRleCA2YzdhZGI1Li41OGU0MDI4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcmVjaXBldXRpbHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5CkBAIC0yLDcgKzIsNyBAQAogIwogIyBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSB0aGUgT0UgbGF5ZXIgaW5kZXgKICMKLSMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KICMKIAogaW1wb3J0IHN5cwpAQCAtMTEsMzEgKzExLDMyIEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IGRpZmZsaWIKLWltcG9ydCB1dGlscworZnJvbSAuIGltcG9ydCB1dGlscwogaW1wb3J0IHNodXRpbAogaW1wb3J0IHJlCiBpbXBvcnQgZm5tYXRjaAoraW1wb3J0IGdsb2IKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0LCBkZWZhdWx0ZGljdAogCiAKICMgSGVscCB1cyB0byBmaW5kIHBsYWNlcyB0byBpbnNlcnQgdmFsdWVzCi1yZWNpcGVfcHJvZ3Jlc3Npb24gPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJywgJ0xJQ0VOU0UnLCAnTElDX0ZJTEVTX0NIS1NVTScsICdQUk9WSURFUycsICdERVBFTkRTJywgJ1BSJywgJ1BWJywgJ1NSQ1JFVicsICdTUkNfVVJJJywgJ1MnLCAnZG9fZmV0Y2goKScsICdkb191bnBhY2soKScsICdkb19wYXRjaCgpJywgJ0VYVFJBX09FQ09ORicsICdkb19jb25maWd1cmUoKScsICdFWFRSQV9PRU1BS0UnLCAnZG9fY29tcGlsZSgpJywgJ2RvX2luc3RhbGwoKScsICdkb19wb3B1bGF0ZV9zeXNyb290KCknLCAnSU5JVFNDUklQVCcsICdVU0VSQUREJywgJ0dST1VQQUREJywgJ1BBQ0tBR0VTJywgJ0ZJTEVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSUFJPVklERVMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnLCAnQUxMT1dfRU1QVFknLCAnZG9fcGFja2FnZSgpJywgJ2RvX2RlcGxveSgpJ10KK3JlY2lwZV9wcm9ncmVzc2lvbiA9IFsnU1VNTUFSWScsICdERVNDUklQVElPTicsICdIT01FUEFHRScsICdCVUdUUkFDS0VSJywgJ1NFQ1RJT04nLCAnTElDRU5TRScsICdMSUNFTlNFX0ZMQUdTJywgJ0xJQ19GSUxFU19DSEtTVU0nLCAnUFJPVklERVMnLCAnREVQRU5EUycsICdQUicsICdQVicsICdTUkNSRVYnLCAnU1JDUFYnLCAnU1JDX1VSSScsICdTJywgJ2RvX2ZldGNoKCknLCAnZG9fdW5wYWNrKCknLCAnZG9fcGF0Y2goKScsICdFWFRSQV9PRUNPTkYnLCAnRVhUUkFfT0VDTUFLRScsICdFWFRSQV9PRVNDT05TJywgJ2RvX2NvbmZpZ3VyZSgpJywgJ0VYVFJBX09FTUFLRScsICdkb19jb21waWxlKCknLCAnZG9faW5zdGFsbCgpJywgJ2RvX3BvcHVsYXRlX3N5c3Jvb3QoKScsICdJTklUU0NSSVBUJywgJ1VTRVJBREQnLCAnR1JPVVBBREQnLCAnUEFDS0FHRVMnLCAnRklMRVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JQUk9WSURFUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdBTExPV19FTVBUWScsICdwb3B1bGF0ZV9wYWNrYWdlcygpJywgJ2RvX3BhY2thZ2UoKScsICdkb19kZXBsb3koKSddCiAjIFZhcmlhYmxlcyB0aGF0IHNvbWV0aW1lcyBhcmUgYSBiaXQgbG9uZyBidXQgc2hvdWxkbid0IGJlIHdyYXBwZWQKIG5vd3JhcF92YXJzID0gWydTVU1NQVJZJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInLCAnU1JDX1VSSVttZDVzdW1dJywgJ1NSQ19VUklbc2hhMjU2c3VtXSddCiBsaXN0X3ZhcnMgPSBbJ1NSQ19VUkknLCAnTElDX0ZJTEVTX0NIS1NVTSddCiBtZXRhX3ZhcnMgPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJ10KIAogCi1kZWYgcG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pOgorZGVmIHBuX3RvX3JlY2lwZShjb29rZXIsIHBuLCBtYz0nJyk6CiAgICAgIiIiQ29udmVydCBhIHJlY2lwZSBuYW1lIChQTikgdG8gdGhlIHBhdGggdG8gdGhlIHJlY2lwZSBmaWxlIiIiCiAgICAgaW1wb3J0IGJiLnByb3ZpZGVycwogCi0gICAgaWYgcG4gaW4gY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbjoKLSAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHBuLCBjb29rZXIuZGF0YSwgY29va2VyLnJlY2lwZWNhY2hlLCBjb29rZXIucmVjaXBlY2FjaGUucGtnX3BuKQorICAgIGlmIHBuIGluIGNvb2tlci5yZWNpcGVjYWNoZXNbbWNdLnBrZ19wbjoKKyAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHBuLCBjb29rZXIuZGF0YSwgY29va2VyLnJlY2lwZWNhY2hlc1ttY10sIGNvb2tlci5yZWNpcGVjYWNoZXNbbWNdLnBrZ19wbikKICAgICAgICAgcmV0dXJuIGJlc3RbM10KLSAgICBlbGlmIHBuIGluIGNvb2tlci5yZWNpcGVjYWNoZS5wcm92aWRlcnM6Ci0gICAgICAgIGZpbGVuYW1lcyA9IGNvb2tlci5yZWNpcGVjYWNoZS5wcm92aWRlcnNbcG5dCi0gICAgICAgIGVsaWdpYmxlLCBmb3VuZFVuaXF1ZSA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnMoZmlsZW5hbWVzLCBwbiwgY29va2VyLmV4cGFuZGVkX2RhdGEsIGNvb2tlci5yZWNpcGVjYWNoZSkKKyAgICBlbGlmIHBuIGluIGNvb2tlci5yZWNpcGVjYWNoZXNbbWNdLnByb3ZpZGVyczoKKyAgICAgICAgZmlsZW5hbWVzID0gY29va2VyLnJlY2lwZWNhY2hlc1ttY10ucHJvdmlkZXJzW3BuXQorICAgICAgICBlbGlnaWJsZSwgZm91bmRVbmlxdWUgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzKGZpbGVuYW1lcywgcG4sIGNvb2tlci5leHBhbmRlZF9kYXRhLCBjb29rZXIucmVjaXBlY2FjaGVzW21jXSkKICAgICAgICAgZmlsZW5hbWUgPSBlbGlnaWJsZVswXQogICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICBlbHNlOgpAQCAtNDksMTMgKzUwLDE0IEBACiAgICAgcmV0dXJuIHRhc2tkYXRhLmdldF9yZWFzb25zKHBuKQogCiAKLWRlZiBwYXJzZV9yZWNpcGUoZm4sIGFwcGVuZGZpbGVzLCBkKToKK2RlZiBwYXJzZV9yZWNpcGUoY29va2VyLCBmbiwgYXBwZW5kZmlsZXMpOgogICAgICIiIgogICAgIFBhcnNlIGFuIGluZGl2aWR1YWwgcmVjaXBlIGZpbGUsIG9wdGlvbmFsbHkgd2l0aCBhIGxpc3Qgb2YKICAgICBiYmFwcGVuZCBmaWxlcy4KICAgICAiIiIKICAgICBpbXBvcnQgYmIuY2FjaGUKLSAgICBlbnZkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBhcHBlbmRmaWxlcywgZCkKKyAgICBwYXJzZXIgPSBiYi5jYWNoZS5Ob0NhY2hlKGNvb2tlci5kYXRhYnVpbGRlcikKKyAgICBlbnZkYXRhID0gcGFyc2VyLmxvYWREYXRhRnVsbChmbiwgYXBwZW5kZmlsZXMpCiAgICAgcmV0dXJuIGVudmRhdGEKIAogCkBAIC03OCw3ICs4MCw3IEBACiAgICAgICAgIGFwcGVuZGZpbGVzID0gY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQogICAgIGVsc2U6CiAgICAgICAgIGFwcGVuZGZpbGVzID0gTm9uZQotICAgIHJldHVybiBwYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kZmlsZXMsIGQpCisgICAgcmV0dXJuIHBhcnNlX3JlY2lwZShjb29rZXIsIHJlY2lwZWZpbGUsIGFwcGVuZGZpbGVzKQogCiAKIGRlZiBnZXRfdmFyX2ZpbGVzKGZuLCB2YXJsaXN0LCBkKToKQEAgLTE1OCwxNSArMTYwLDE5IEBACiAgICAgcmV0dXJuIG91dGxpc3QKIAogCi1kZWYgcGF0Y2hfcmVjaXBlX2ZpbGUoZm4sIHZhbHVlcywgcGF0Y2g9RmFsc2UsIHJlbHBhdGg9JycpOgotICAgICIiIlVwZGF0ZSBvciBpbnNlcnQgdmFyaWFibGUgdmFsdWVzIGludG8gYSByZWNpcGUgZmlsZSAoYXNzdW1pbmcgeW91Ci0gICAgICAgaGF2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIGV4YWN0IGZpbGUgeW91IHdhbnQgdG8gdXBkYXRlLikKK2RlZiBwYXRjaF9yZWNpcGVfbGluZXMoZnJvbWxpbmVzLCB2YWx1ZXMsIHRyYWlsaW5nX25ld2xpbmU9VHJ1ZSk6CisgICAgIiIiVXBkYXRlIG9yIGluc2VydCB2YXJpYWJsZSB2YWx1ZXMgaW50byBsaW5lcyBmcm9tIGEgcmVjaXBlLgogICAgICAgIE5vdGUgdGhhdCBzb21lIG1hbnVhbCBpbnNwZWN0aW9uL2ludGVydmVudGlvbiBtYXkgYmUgcmVxdWlyZWQKICAgICAgICBzaW5jZSB0aGlzIGNhbm5vdCBoYW5kbGUgYWxsIHNpdHVhdGlvbnMuCiAgICAgIiIiCiAKICAgICBpbXBvcnQgYmIudXRpbHMKIAorICAgIGlmIHRyYWlsaW5nX25ld2xpbmU6CisgICAgICAgIG5ld2xpbmUgPSAnXG4nCisgICAgZWxzZToKKyAgICAgICAgbmV3bGluZSA9ICcnCisKICAgICByZWNpcGVfcHJvZ3Jlc3Npb25fcmVzID0gW10KICAgICByZWNpcGVfcHJvZ3Jlc3Npb25fcmVzdHJzID0gW10KICAgICBmb3IgaXRlbSBpbiByZWNpcGVfcHJvZ3Jlc3Npb246CkBAIC0xOTAsMTQgKzE5NiwxNCBAQAogICAgIHJlbWFpbmluZ25hbWVzID0ge30KICAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgogICAgICAgICByZW1haW5pbmduYW1lc1trXSA9IGdldF9yZWNpcGVfcG9zKGspCi0gICAgcmVtYWluaW5nbmFtZXMgPSBPcmRlcmVkRGljdChzb3J0ZWQocmVtYWluaW5nbmFtZXMuaXRlcml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFsxXSkpCisgICAgcmVtYWluaW5nbmFtZXMgPSBPcmRlcmVkRGljdChzb3J0ZWQocmVtYWluaW5nbmFtZXMuaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzFdKSkKIAogICAgIG1vZGlmeWluZyA9IEZhbHNlCiAKICAgICBkZWYgb3V0cHV0dmFsdWUobmFtZSwgbGluZXMsIHJld2luZGNvbW1lbnRzPUZhbHNlKToKICAgICAgICAgaWYgdmFsdWVzW25hbWVdIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcmF3dGV4dCA9ICclcyA9ICIlcyJcbicgJSAobmFtZSwgdmFsdWVzW25hbWVdKQorICAgICAgICByYXd0ZXh0ID0gJyVzID0gIiVzIiVzJyAlIChuYW1lLCB2YWx1ZXNbbmFtZV0sIG5ld2xpbmUpCiAgICAgICAgIGFkZGxpbmVzID0gW10KICAgICAgICAgaWYgbmFtZSBpbiBub3dyYXBfdmFyczoKICAgICAgICAgICAgIGFkZGxpbmVzLmFwcGVuZChyYXd0ZXh0KQpAQCAtMjA1LDE5ICsyMTEsMTkgQEAKICAgICAgICAgICAgIHNwbGl0dmFsdWUgPSBzcGxpdF92YXJfdmFsdWUodmFsdWVzW25hbWVdLCBhc3NpZ25tZW50PUZhbHNlKQogICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsdWUpID4gMToKICAgICAgICAgICAgICAgICBsaW5lc3BsaXQgPSAnIFxcXG4nICsgKCcgJyAqIChsZW4obmFtZSkgKyA0KSkKLSAgICAgICAgICAgICAgICBhZGRsaW5lcy5hcHBlbmQoJyVzID0gIiVzJXMiXG4nICUgKG5hbWUsIGxpbmVzcGxpdC5qb2luKHNwbGl0dmFsdWUpLCBsaW5lc3BsaXQpKQorICAgICAgICAgICAgICAgIGFkZGxpbmVzLmFwcGVuZCgnJXMgPSAiJXMlcyIlcycgJSAobmFtZSwgbGluZXNwbGl0LmpvaW4oc3BsaXR2YWx1ZSksIGxpbmVzcGxpdCwgbmV3bGluZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGFkZGxpbmVzLmFwcGVuZChyYXd0ZXh0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd3JhcHBlZCA9IHRleHR3cmFwLndyYXAocmF3dGV4dCkKICAgICAgICAgICAgIGZvciB3cmFwbGluZSBpbiB3cmFwcGVkWzotMV06Ci0gICAgICAgICAgICAgICAgYWRkbGluZXMuYXBwZW5kKCclcyBcXFxuJyAlIHdyYXBsaW5lKQotICAgICAgICAgICAgYWRkbGluZXMuYXBwZW5kKCclc1xuJyAlIHdyYXBwZWRbLTFdKQorICAgICAgICAgICAgICAgIGFkZGxpbmVzLmFwcGVuZCgnJXMgXFwlcycgJSAod3JhcGxpbmUsIG5ld2xpbmUpKQorICAgICAgICAgICAgYWRkbGluZXMuYXBwZW5kKCclcyVzJyAlICh3cmFwcGVkWy0xXSwgbmV3bGluZSkpCiAgICAgICAgIGlmIHJld2luZGNvbW1lbnRzOgogICAgICAgICAgICAgIyBFbnN1cmUgd2UgaW5zZXJ0IHRoZSBsaW5lcyBiZWZvcmUgYW55IGxlYWRpbmcgY29tbWVudHMKICAgICAgICAgICAgICMgKHRoYXQgd2UnZCB3YW50IHRvIGVuc3VyZSByZW1haW4gbGVhZGluZyB0aGUgbmV4dCB2YWx1ZSkKICAgICAgICAgICAgIGZvciBpLCBsbiBpbiByZXZlcnNlZChsaXN0KGVudW1lcmF0ZShsaW5lcykpKToKLSAgICAgICAgICAgICAgICBpZiBsblswXSAhPSAnIyc6CisgICAgICAgICAgICAgICAgaWYgbm90IGxuLnN0YXJ0c3dpdGgoJyMnKToKICAgICAgICAgICAgICAgICAgICAgbGluZXNbaSsxOmkrMV0gPSBhZGRsaW5lcwogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZWxzZToKQEAgLTIzMCw3ICsyMzYsNyBAQAogICAgICAgICBpZiBtb2RpZnlpbmc6CiAgICAgICAgICAgICAjIEluc2VydCBhbnl0aGluZyB0aGF0IHNob3VsZCBjb21lIGJlZm9yZSB0aGlzIHZhcmlhYmxlCiAgICAgICAgICAgICBwb3MgPSBnZXRfcmVjaXBlX3Bvcyh2YXJuYW1lKQotICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpWzpdOgorICAgICAgICAgICAgZm9yIGsgaW4gbGlzdChyZW1haW5pbmduYW1lcyk6CiAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nbmFtZXNba10gPiAtMSBhbmQgcG9zID49IHJlbWFpbmluZ25hbWVzW2tdIGFuZCBub3QgayBpbiBleGlzdGluZ25hbWVzOgogICAgICAgICAgICAgICAgICAgICBvdXRwdXR2YWx1ZShrLCBuZXdsaW5lcywgcmV3aW5kY29tbWVudHM9VHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsIHJlbWFpbmluZ25hbWVzW2tdCkBAIC0yNDcsMTkgKzI1MywzMyBAQAogCiAgICAgIyBGaXJzdCBydW4gLSBlc3RhYmxpc2ggd2hpY2ggdmFsdWVzIHdlIHdhbnQgdG8gc2V0IGFyZSBhbHJlYWR5IGluIHRoZSBmaWxlCiAgICAgdmFybGlzdCA9IFtyZS5lc2NhcGUoaXRlbSkgZm9yIGl0ZW0gaW4gdmFsdWVzLmtleXMoKV0KLSAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKLSAgICAgICAgY2hhbmdlZCwgZnJvbWxpbmVzID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShmLCB2YXJsaXN0LCBwYXRjaF9yZWNpcGVfdmFyZnVuYykKKyAgICBiYi51dGlscy5lZGl0X21ldGFkYXRhKGZyb21saW5lcywgdmFybGlzdCwgcGF0Y2hfcmVjaXBlX3ZhcmZ1bmMpCiAgICAgIyBTZWNvbmQgcnVuIC0gYWN0dWFsbHkgc2V0IGV2ZXJ5dGhpbmcKICAgICBtb2RpZnlpbmcgPSBUcnVlCiAgICAgdmFybGlzdC5leHRlbmQocmVjaXBlX3Byb2dyZXNzaW9uX3Jlc3RycykKICAgICBjaGFuZ2VkLCB0b2xpbmVzID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShmcm9tbGluZXMsIHZhcmxpc3QsIHBhdGNoX3JlY2lwZV92YXJmdW5jLCBtYXRjaF9vdmVycmlkZXM9VHJ1ZSkKIAogICAgIGlmIHJlbWFpbmluZ25hbWVzOgotICAgICAgICBpZiB0b2xpbmVzWy0xXS5zdHJpcCgpICE9ICcnOgorICAgICAgICBpZiB0b2xpbmVzIGFuZCB0b2xpbmVzWy0xXS5zdHJpcCgpICE9ICcnOgogICAgICAgICAgICAgdG9saW5lcy5hcHBlbmQoJ1xuJykKICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgogICAgICAgICAgICAgb3V0cHV0dmFsdWUoaywgdG9saW5lcykKIAorICAgIHJldHVybiBjaGFuZ2VkLCB0b2xpbmVzCisKKworZGVmIHBhdGNoX3JlY2lwZV9maWxlKGZuLCB2YWx1ZXMsIHBhdGNoPUZhbHNlLCByZWxwYXRoPScnKToKKyAgICAiIiJVcGRhdGUgb3IgaW5zZXJ0IHZhcmlhYmxlIHZhbHVlcyBpbnRvIGEgcmVjaXBlIGZpbGUgKGFzc3VtaW5nIHlvdQorICAgICAgIGhhdmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBleGFjdCBmaWxlIHlvdSB3YW50IHRvIHVwZGF0ZS4pCisgICAgICAgTm90ZSB0aGF0IHNvbWUgbWFudWFsIGluc3BlY3Rpb24vaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZAorICAgICAgIHNpbmNlIHRoaXMgY2Fubm90IGhhbmRsZSBhbGwgc2l0dWF0aW9ucy4KKyAgICAiIiIKKworICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICBmcm9tbGluZXMgPSBmLnJlYWRsaW5lcygpCisKKyAgICBfLCB0b2xpbmVzID0gcGF0Y2hfcmVjaXBlX2xpbmVzKGZyb21saW5lcywgdmFsdWVzKQorCiAgICAgaWYgcGF0Y2g6CiAgICAgICAgIHJlbGZuID0gb3MucGF0aC5yZWxwYXRoKGZuLCByZWxwYXRoKQogICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZnJvbWxpbmVzLCB0b2xpbmVzLCAnYS8lcycgJSByZWxmbiwgJ2IvJXMnICUgcmVsZm4pCkBAIC0zMTgsNyArMzM4LDcgQEAKICAgICB2YXJmaWxlcyA9IGdldF92YXJfZmlsZXMoZm4sIHZhcmxpc3QsIGQpCiAgICAgbG9jcyA9IGxvY2FsaXNlX2ZpbGVfdmFycyhmbiwgdmFyZmlsZXMsIHZhcmxpc3QpCiAgICAgcGF0Y2hlcyA9IFtdCi0gICAgZm9yIGYsdiBpbiBsb2NzLml0ZXJpdGVtcygpOgorICAgIGZvciBmLHYgaW4gbG9jcy5pdGVtcygpOgogICAgICAgICB2YWxzID0ge2s6IHZhcnZhbHVlc1trXSBmb3IgayBpbiB2fQogICAgICAgICBwYXRjaGRhdGEgPSBwYXRjaF9yZWNpcGVfZmlsZShmLCB2YWxzLCBwYXRjaCwgcmVscGF0aCkKICAgICAgICAgaWYgcGF0Y2g6CkBAIC0zNDcsNiArMzY3LDcgQEAKICAgICAjIENvcHkgbG9jYWwgZmlsZXMgdG8gdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZ2F0aGVyIGFueSByZW1vdGUgZmlsZXMKICAgICBiYl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkgKyBvcy5zZXAKICAgICByZW1vdGVzID0gW10KKyAgICBjb3BpZWQgPSBbXQogICAgIGluY2x1ZGVzID0gW3BhdGggZm9yIHBhdGggaW4gZC5nZXRWYXIoJ0JCSU5DTFVERUQnLCBUcnVlKS5zcGxpdCgpIGlmCiAgICAgICAgICAgICAgICAgcGF0aC5zdGFydHN3aXRoKGJiX2RpcikgYW5kIG9zLnBhdGguZXhpc3RzKHBhdGgpXQogICAgIGZvciBwYXRoIGluIGZldGNoLmxvY2FscGF0aHMoKSArIGluY2x1ZGVzOgpAQCAtMzU4LDEzICszNzksMTQgQEAKICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3ViZGlyKToKICAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoc3ViZGlyKQogICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MihwYXRoLCBvcy5wYXRoLmpvaW4odGd0X2RpciwgcmVscGF0aCkpCisgICAgICAgICAgICAgICAgY29waWVkLmFwcGVuZChyZWxwYXRoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmVtb3Rlcy5hcHBlbmQocGF0aCkKICAgICAjIFNpbXBseSBjb3B5IHdob2xlIG1ldGEgZGlyLCBpZiByZXF1ZXN0ZWQKICAgICBpZiB3aG9sZV9kaXI6CiAgICAgICAgIHNodXRpbC5jb3B5dHJlZShiYl9kaXIsIHRndF9kaXIpCiAKLSAgICByZXR1cm4gcmVtb3RlcworICAgIHJldHVybiBjb3BpZWQsIHJlbW90ZXMKIAogCiBkZWYgZ2V0X3JlY2lwZV9sb2NhbF9maWxlcyhkLCBwYXRjaGVzPUZhbHNlKToKQEAgLTM3OCw4ICs0MDAsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuZXhlY19mbGF0X3B5dGhvbl9mdW5jKCdwYXRjaF9wYXRoJywgdXJpLCBmZXRjaCwgJycpKToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgIyBTa2lwIGZpbGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgYWJzb2x1dGUgcGF0aAotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZmV0Y2gudWRbdXJpXS5iYXNlcGF0aCk6Ci0gICAgICAgICAgICAgICAgcmV0W2ZldGNoLnVkW3VyaV0uYmFzZXBhdGhdID0gZmV0Y2gubG9jYWxwYXRoKHVyaSkKKyAgICAgICAgICAgIGZuYW1lID0gZmV0Y2gudWRbdXJpXS5iYXNlcGF0aAorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2FicyhmbmFtZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgSGFuZGxlIHN1YmRpcj0KKyAgICAgICAgICAgIHN1YmRpciA9IGZldGNoLnVkW3VyaV0ucGFybS5nZXQoJ3N1YmRpcicsICcnKQorICAgICAgICAgICAgaWYgc3ViZGlyOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoc3ViZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguam9pbihzdWJkaXIsIGZuYW1lKQorICAgICAgICAgICAgcmV0W2ZuYW1lXSA9IGZldGNoLmxvY2FscGF0aCh1cmkpCiAgICAgcmV0dXJuIHJldAogCiAKQEAgLTQxOSw4ICs0NDksOCBAQAogZGVmIHZhbGlkYXRlX3BuKHBuKToKICAgICAiIiJQZXJmb3JtIHZhbGlkYXRpb24gb24gYSByZWNpcGUgbmFtZSAoUE4pIGZvciBhIG5ldyByZWNpcGUuIiIiCiAgICAgcmVzZXJ2ZWRfbmFtZXMgPSBbJ2ZvcmNldmFyaWFibGUnLCAnYXBwZW5kJywgJ3ByZXBlbmQnLCAncmVtb3ZlJ10KLSAgICBpZiBub3QgcmUubWF0Y2goJ1swLTlhLXotLl0rJywgcG4pOgotICAgICAgICByZXR1cm4gJ1JlY2lwZSBuYW1lICIlcyIgaXMgaW52YWxpZDogb25seSBjaGFyYWN0ZXJzIDAtOSwgYS16LCAtIGFuZCAuIGFyZSBhbGxvd2VkJyAlIHBuCisgICAgaWYgbm90IHJlLm1hdGNoKCdeWzAtOWEtei0uK10rJCcsIHBuKToKKyAgICAgICAgcmV0dXJuICdSZWNpcGUgbmFtZSAiJXMiIGlzIGludmFsaWQ6IG9ubHkgY2hhcmFjdGVycyAwLTksIGEteiwgLSwgKyBhbmQgLiBhcmUgYWxsb3dlZCcgJSBwbgogICAgIGVsaWYgcG4gaW4gcmVzZXJ2ZWRfbmFtZXM6CiAgICAgICAgIHJldHVybiAnUmVjaXBlIG5hbWUgIiVzIiBpcyBpbnZhbGlkOiBpcyBhIHJlc2VydmVkIGtleXdvcmQnICUgcG4KICAgICBlbGlmIHBuLnN0YXJ0c3dpdGgoJ3BuLScpOgpAQCAtNDMwLDYgKzQ2MCw2MCBAQAogICAgIHJldHVybiAnJwogCiAKK2RlZiBnZXRfYmJmaWxlX3BhdGgoZCwgZGVzdGRpciwgZXh0cmFwYXRoaGludD1Ob25lKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgcGF0aCBmb3IgYSByZWNpcGUgd2l0aGluIGEgbGF5ZXIKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBkOiBSZWNpcGUtc3BlY2lmaWMgZGF0YXN0b3JlCisgICAgICAgIGRlc3RkaXI6IGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4gQ2FuIGJlIHRoZSBwYXRoIHRvIHRoZSBiYXNlIG9mIHRoZSBsYXllciBvciBhCisgICAgICAgICAgICBwYXJ0aWFsIHBhdGggc29tZXdoZXJlIHdpdGhpbiB0aGUgbGF5ZXIuCisgICAgICAgIGV4dHJhcGF0aGhpbnQ6IGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYmFzZSBvZiB0aGUgbGF5ZXIgdG8gdHJ5CisgICAgIiIiCisgICAgaW1wb3J0IGJiLmNvb2tlcmRhdGEKKworICAgIGRlc3RkaXIgPSBvcy5wYXRoLmFic3BhdGgoZGVzdGRpcikKKyAgICBkZXN0bGF5ZXJkaXIgPSBmaW5kX2xheWVyZGlyKGRlc3RkaXIpCisKKyAgICAjIFBhcnNlIHRoZSBzcGVjaWZpZWQgbGF5ZXIncyBsYXllci5jb25mIGZpbGUgZGlyZWN0bHksIGluIGNhc2UgdGhlIGxheWVyIGlzbid0IGluIGJibGF5ZXJzLmNvbmYKKyAgICBjb25mZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgY29uZmRhdGEuc2V0VmFyKCdCQkZJTEVTJywgJycpCisgICAgY29uZmRhdGEuc2V0VmFyKCdMQVlFUkRJUicsIGRlc3RsYXllcmRpcikKKyAgICBkZXN0bGF5ZXJjb25mID0gb3MucGF0aC5qb2luKGRlc3RsYXllcmRpciwgImNvbmYiLCAibGF5ZXIuY29uZiIpCisgICAgY29uZmRhdGEgPSBiYi5jb29rZXJkYXRhLnBhcnNlX2NvbmZpZ19maWxlKGRlc3RsYXllcmNvbmYsIGNvbmZkYXRhKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIGJiZmlsZXNwZWNzID0gKGNvbmZkYXRhLmdldFZhcignQkJGSUxFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgaWYgZGVzdGRpciA9PSBkZXN0bGF5ZXJkaXI6CisgICAgICAgIGZvciBiYmZpbGVzcGVjIGluIGJiZmlsZXNwZWNzOgorICAgICAgICAgICAgaWYgbm90IGJiZmlsZXNwZWMuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgIGZvciBtYXRjaCBpbiBnbG9iLmdsb2IoYmJmaWxlc3BlYyk6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0ZXh0ID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG1hdGNoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRleHRbMV0gPT0gJy5iYic6CisgICAgICAgICAgICAgICAgICAgICAgICBtcG4gPSBzcGxpdGV4dFswXS5zcGxpdCgnXycpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtcG4gPT0gcG46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShtYXRjaCkKKworICAgICMgVHJ5IHRvIG1ha2UgdXAgYSBwYXRoIHRoYXQgbWF0Y2hlcyBCQkZJTEVTCisgICAgIyB0aGlzIGlzIGEgbGl0dGxlIGNydWRlLCBidXQgYmV0dGVyIHRoYW4gbm90aGluZworICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIHJlY2lwZWZuID0gb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcignRklMRScsIFRydWUpKQorICAgIHBhdGhvcHRpb25zID0gW2Rlc3RkaXJdCisgICAgaWYgZXh0cmFwYXRoaGludDoKKyAgICAgICAgcGF0aG9wdGlvbnMuYXBwZW5kKG9zLnBhdGguam9pbihkZXN0ZGlyLCBleHRyYXBhdGhoaW50KSkKKyAgICBpZiBkZXN0ZGlyID09IGRlc3RsYXllcmRpcjoKKyAgICAgICAgcGF0aG9wdGlvbnMuYXBwZW5kKG9zLnBhdGguam9pbihkZXN0ZGlyLCAncmVjaXBlcy0lcycgJSBicG4sIGJwbikpCisgICAgICAgIHBhdGhvcHRpb25zLmFwcGVuZChvcy5wYXRoLmpvaW4oZGVzdGRpciwgJ3JlY2lwZXMnLCBicG4pKQorICAgICAgICBwYXRob3B0aW9ucy5hcHBlbmQob3MucGF0aC5qb2luKGRlc3RkaXIsIGJwbikpCisgICAgZWxpZiBub3QgZGVzdGRpci5lbmRzd2l0aCgoJy8nICsgcG4sICcvJyArIGJwbikpOgorICAgICAgICBwYXRob3B0aW9ucy5hcHBlbmQob3MucGF0aC5qb2luKGRlc3RkaXIsIGJwbikpCisgICAgY2xvc2VwYXRoID0gJycKKyAgICBmb3IgcGF0aG9wdGlvbiBpbiBwYXRob3B0aW9uczoKKyAgICAgICAgYmJmaWxlcGF0aCA9IG9zLnBhdGguam9pbihwYXRob3B0aW9uLCAndGVzdC5iYicpCisgICAgICAgIGZvciBiYmZpbGVzcGVjIGluIGJiZmlsZXNwZWNzOgorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShiYmZpbGVwYXRoLCBiYmZpbGVzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0aG9wdGlvbgorICAgIHJldHVybiBOb25lCisKIGRlZiBnZXRfYmJhcHBlbmRfcGF0aChkLCBkZXN0bGF5ZXJkaXIsIHdpbGRjYXJkdmVyPUZhbHNlKToKICAgICAiIiJEZXRlcm1pbmUgaG93IGEgYmJhcHBlbmQgZm9yIGEgcmVjaXBlIHNob3VsZCBiZSBuYW1lZCBhbmQgbG9jYXRlZCB3aXRoaW4gYW5vdGhlciBsYXllciIiIgogCkBAIC01MzYsNyArNjIwLDcgQEAKICAgICBiYmFwcGVuZGxpbmVzID0gW10KICAgICBpZiBleHRyYWxpbmVzOgogICAgICAgICBpZiBpc2luc3RhbmNlKGV4dHJhbGluZXMsIGRpY3QpOgotICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGV4dHJhbGluZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZXh0cmFsaW5lcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKChuYW1lLCAnPScsIHZhbHVlKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgRG8gb3VyIGJlc3QgdG8gc3BsaXQgaXQKQEAgLTU1MCwxNCArNjM0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCBleHRyYWxpbmVzIHZhbHVlIHBhc3NlZCcpCiAKICAgICBkZWYgcG9wbGluZSh2YXJuYW1lKToKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihiYmFwcGVuZGxpbmVzKSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihiYmFwcGVuZGxpbmVzKSk6CiAgICAgICAgICAgICBpZiBiYmFwcGVuZGxpbmVzW2ldWzBdID09IHZhcm5hbWU6CiAgICAgICAgICAgICAgICAgbGluZSA9IGJiYXBwZW5kbGluZXMucG9wKGkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBhcHBlbmRsaW5lKHZhcm5hbWUsIG9wLCB2YWx1ZSk6Ci0gICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgogICAgICAgICAgICAgaXRlbSA9IGJiYXBwZW5kbGluZXNbaV0KICAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0gdmFybmFtZToKICAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzW2ldID0gKGl0ZW1bMF0sIGl0ZW1bMV0sIGl0ZW1bMl0gKyAnICcgKyB2YWx1ZSkKQEAgLTU3Niw3ICs2NjAsNyBAQAogICAgIGNvcHlmaWxlcyA9IHt9CiAgICAgaWYgc3JjZmlsZXM6CiAgICAgICAgIGluc3RmdW5jbGluZXMgPSBbXQotICAgICAgICBmb3IgbmV3ZmlsZSwgb3JpZ3NyY2ZpbGUgaW4gc3JjZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBuZXdmaWxlLCBvcmlnc3JjZmlsZSBpbiBzcmNmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgc3JjZmlsZSA9IG9yaWdzcmNmaWxlCiAgICAgICAgICAgICBzcmN1cmllbnRyeSA9IE5vbmUKICAgICAgICAgICAgIGlmIG5vdCBzcmNmaWxlOgpAQCAtNjQ0LDcgKzcyOCw3IEBACiAKICAgICAgICAgICAgICAgICBpZiByZW1vdmV2YXIgaW4gcmVtb3ZldmFsdWVzOgogICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSByZW1vdmV2YWx1ZXNbcmVtb3ZldmFyXQotICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlbW92ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVtb3ZlLCBzdHIpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlIGluIHNwbGl0dmFsOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLnJlbW92ZShyZW1vdmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKQEAgLTY3NCw3ICs3NTgsNyBAQAogCiAgICAgICAgIHZhcm5hbWVzID0gW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gYmJhcHBlbmRsaW5lc10KICAgICAgICAgaWYgcmVtb3ZldmFsdWVzOgotICAgICAgICAgICAgdmFybmFtZXMuZXh0ZW5kKHJlbW92ZXZhbHVlcy5rZXlzKCkpCisgICAgICAgICAgICB2YXJuYW1lcy5leHRlbmQobGlzdChyZW1vdmV2YWx1ZXMua2V5cygpKSkKIAogICAgICAgICB3aXRoIG9wZW4oYXBwZW5kcGF0aCwgJ3InKSBhcyBmOgogICAgICAgICAgICAgKHVwZGF0ZWQsIG5ld2xpbmVzKSA9IGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEoZiwgdmFybmFtZXMsIGFwcGVuZGZpbGVfdmFyZnVuYykKQEAgLTY5OSw3ICs3ODMsNyBAQAogICAgIGlmIGNvcHlmaWxlczoKICAgICAgICAgaWYgbWFjaGluZToKICAgICAgICAgICAgIGRlc3RzdWJkaXIgPSBvcy5wYXRoLmpvaW4oZGVzdHN1YmRpciwgbWFjaGluZSkKLSAgICAgICAgZm9yIG5ld2ZpbGUsIHNyY2ZpbGUgaW4gY29weWZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBjb3B5ZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgIGZpbGVkZXN0ID0gb3MucGF0aC5qb2luKGFwcGVuZGRpciwgZGVzdHN1YmRpciwgb3MucGF0aC5iYXNlbmFtZShzcmNmaWxlKSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguYWJzcGF0aChuZXdmaWxlKSAhPSBvcy5wYXRoLmFic3BhdGgoZmlsZWRlc3QpOgogICAgICAgICAgICAgICAgIGJiLm5vdGUoJ0NvcHlpbmcgJXMgdG8gJXMnICUgKG5ld2ZpbGUsIGZpbGVkZXN0KSkKQEAgLTcxMCwxNCArNzk0LDE2IEBACiAKIAogZGVmIGZpbmRfbGF5ZXJkaXIoZm4pOgotICAgICIiIiBGaWd1cmUgb3V0IHJlbGF0aXZlIHBhdGggdG8gYmFzZSBvZiBsYXllciBmb3IgYSBmaWxlIChlLmcuIGEgcmVjaXBlKSIiIgotICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShmbikKKyAgICAiIiIgRmlndXJlIG91dCB0aGUgcGF0aCB0byB0aGUgYmFzZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyBhIGZpbGUgKGUuZy4gYSByZWNpcGUpIiIiCisgICAgcHRoID0gZm4KICAgICBsYXllcmRpciA9ICcnCiAgICAgd2hpbGUgcHRoOgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnY29uZicsICdsYXllci5jb25mJykpOgogICAgICAgICAgICAgbGF5ZXJkaXIgPSBwdGgKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShwdGgpCisgICAgICAgIGlmIHB0aCA9PSAnLyc6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgIHJldHVybiBsYXllcmRpcgogCiAKQEAgLTcyNSwxMiArODExLDEyIEBACiAgICAgIiIiUmVwbGFjZSBjb21tb24gZGlyZWN0b3J5IHBhdGhzIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFibGUgcmVmZXJlbmNlcyAoZS5nLiAvZXRjIGJlY29tZXMgJHtzeXNjb25mZGlyfSkiIiIKICAgICBkaXJ2YXJzID0ge30KICAgICAjIFNvcnQgYnkgbGVuZ3RoIHNvIHdlIGdldCB0aGUgdmFyaWFibGVzIHdlJ3JlIGludGVyZXN0ZWQgaW4gZmlyc3QKLSAgICBmb3IgdmFyIGluIHNvcnRlZChkLmtleXMoKSwga2V5PWxlbik6CisgICAgZm9yIHZhciBpbiBzb3J0ZWQobGlzdChkLmtleXMoKSksIGtleT1sZW4pOgogICAgICAgICBpZiB2YXIuZW5kc3dpdGgoJ2RpcicpIGFuZCB2YXIubG93ZXIoKSA9PSB2YXI6CiAgICAgICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKICAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoJy8nKSBhbmQgbm90ICdcbicgaW4gdmFsdWUgYW5kIHZhbHVlIG5vdCBpbiBkaXJ2YXJzOgogICAgICAgICAgICAgICAgIGRpcnZhcnNbdmFsdWVdID0gdmFyCi0gICAgZm9yIGRpcnBhdGggaW4gc29ydGVkKGRpcnZhcnMua2V5cygpLCByZXZlcnNlPVRydWUpOgorICAgIGZvciBkaXJwYXRoIGluIHNvcnRlZChsaXN0KGRpcnZhcnMua2V5cygpKSwgcmV2ZXJzZT1UcnVlKToKICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShkaXJwYXRoLCAnJHslc30nICUgZGlydmFyc1tkaXJwYXRoXSkKICAgICByZXR1cm4gcGF0aAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvcm9vdGZzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Jvb3Rmcy5weQppbmRleCBhOTVlMWI3Li5hMzQ4Yjk3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvcm9vdGZzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yb290ZnMucHkKQEAgLTEwLDE3ICsxMCwxNyBAQAogaW1wb3J0IHJlCiAKIAotY2xhc3MgUm9vdGZzKG9iamVjdCk6CitjbGFzcyBSb290ZnMob2JqZWN0LCBtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAgIiIiCiAgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4gRG8gbm90IGluc3RhbnRpYXRlIHRoaXMgZGlyZWN0bHkuCiAgICAgIiIiCi0gICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcHJvZ3Jlc3NfcmVwb3J0ZXI9Tm9uZSk6CiAgICAgICAgIHNlbGYuZCA9IGQKICAgICAgICAgc2VsZi5wbSA9IE5vbmUKICAgICAgICAgc2VsZi5pbWFnZV9yb290ZnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQotICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZXBsb3lkaXIgPSBzZWxmLmQuZ2V0VmFyKCdJTUdERVBMT1lESVInLCBUcnVlKQorICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyID0gcHJvZ3Jlc3NfcmVwb3J0ZXIKIAogICAgICAgICBzZWxmLmluc3RhbGxfb3JkZXIgPSBNYW5pZmVzdC5JTlNUQUxMX09SREVSCiAKQEAgLTQwLDUxICs0MCw0NiBAQAogICAgIGRlZiBfbG9nX2NoZWNrKHNlbGYpOgogICAgICAgICBwYXNzCiAKLSAgICBkZWYgX2xvZ19jaGVja193YXJuKHNlbGYpOgotICAgICAgICByID0gcmUuY29tcGlsZSgnXih3YXJufFdhcm58Tk9URTogd2FybnxOT1RFOiBXYXJufFdBUk5JTkc6KScpCisgICAgZGVmIF9sb2dfY2hlY2tfY29tbW9uKHNlbGYsIHR5cGUsIG1hdGNoKToKKyAgICAgICAgIyBJZ25vcmUgYW55IGxpbmVzIGNvbnRhaW5pbmcgbG9nX2NoZWNrIHRvIGF2b2lkIHJlY3Vyc2lvbiwgYW5kIGlnbm9yZQorICAgICAgICAjIGxpbmVzIGJlZ2lubmluZyB3aXRoIGEgKyBzaW5jZSBzaCAteCBtYXkgZW1pdCBjb2RlIHdoaWNoIGlzbid0CisgICAgICAgICMgYWN0dWFsbHkgZXhlY3V0ZWQsIGJ1dCBtYXkgY29udGFpbiBlcnJvciBtZXNzYWdlcworICAgICAgICBleGNsdWRlcyA9IFsgJ2xvZ19jaGVjaycsIHInXlwrJyBdCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2xvZ19jaGVja19leHBlY3RlZF9yZWdleGVzJyk6CisgICAgICAgICAgICBleGNsdWRlcy5leHRlbmQoc2VsZi5sb2dfY2hlY2tfZXhwZWN0ZWRfcmVnZXhlcykKKyAgICAgICAgZXhjbHVkZXMgPSBbcmUuY29tcGlsZSh4KSBmb3IgeCBpbiBleGNsdWRlc10KKyAgICAgICAgciA9IHJlLmNvbXBpbGUobWF0Y2gpCiAgICAgICAgIGxvZ19wYXRoID0gc2VsZi5kLmV4cGFuZCgiJHtUfS9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgbWVzc2FnZXMgPSBbXQogICAgICAgICB3aXRoIG9wZW4obG9nX3BhdGgsICdyJykgYXMgbG9nOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gbG9nOgotICAgICAgICAgICAgICAgIGlmICdsb2dfY2hlY2snIGluIGxpbmUgb3IgJ05PVEU6JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGZvciBlZSBpbiBleGNsdWRlczoKKyAgICAgICAgICAgICAgICAgICAgbSA9IGVlLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgbSA9IHIuc2VhcmNoKGxpbmUpCiAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgYmIud2FybignW2xvZ19jaGVja10gJXM6IGZvdW5kIGEgd2FybmluZyBtZXNzYWdlIGluIHRoZSBsb2dmaWxlIChrZXl3b3JkIFwnJXNcJyk6XG5bbG9nX2NoZWNrXSAlcycKLQkJCQkgICAgJSAoc2VsZi5kLmdldFZhcignUE4nLCBUcnVlKSwgbS5ncm91cCgpLCBsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCdbbG9nX2NoZWNrXSAlcycgJSBsaW5lKQorICAgICAgICBpZiBtZXNzYWdlczoKKyAgICAgICAgICAgIGlmIGxlbihtZXNzYWdlcykgPT0gMToKKyAgICAgICAgICAgICAgICBtc2cgPSAnMSAlcyBtZXNzYWdlJyAlIHR5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gJyVkICVzIG1lc3NhZ2VzJyAlIChsZW4obWVzc2FnZXMpLCB0eXBlKQorICAgICAgICAgICAgbXNnID0gJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCAlcyBpbiB0aGUgbG9nZmlsZTpcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5kLmdldFZhcignUE4nLCBUcnVlKSwgbXNnLCAnJy5qb2luKG1lc3NhZ2VzKSkKKyAgICAgICAgICAgIGlmIHR5cGUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbChtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLndhcm4obXNnKQorCisgICAgZGVmIF9sb2dfY2hlY2tfd2FybihzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2NvbW1vbignd2FybmluZycsICdeKHdhcm58V2FybnxXQVJOSU5HOiknKQogCiAgICAgZGVmIF9sb2dfY2hlY2tfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHIgPSByZS5jb21waWxlKHNlbGYubG9nX2NoZWNrX3JlZ2V4KQotICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCi0gICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6Ci0gICAgICAgICAgICBmb3VuZF9lcnJvciA9IDAKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiXG4iCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6Ci0gICAgICAgICAgICAgICAgaWYgJ2xvZ19jaGVjaycgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2xvZ19jaGVja19leHBlY3RlZF9lcnJvcnNfcmVnZXhlcycpOgotICAgICAgICAgICAgICAgICAgICBtID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBmb3IgZWUgaW4gc2VsZi5sb2dfY2hlY2tfZXhwZWN0ZWRfZXJyb3JzX3JlZ2V4ZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtID0gcmUuc2VhcmNoKGVlLCBsaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQotICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQotICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSBJbiBsaW5lOiBbJXNdJyAlIGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBsb2dmaWxlIChrZXl3b3JkIFwnJXNcJyk6XG5bbG9nX2NoZWNrXSAlcycKLQkJCQkgICAgJSAoc2VsZi5kLmdldFZhcignUE4nLCBUcnVlKSwgbS5ncm91cCgpLCBsaW5lKSkKLQotICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID49IDEgYW5kIGZvdW5kX2Vycm9yIDw9IDU6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gbGluZSArICdcbicKLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgKz0gMQotCi0gICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPT0gNjoKLSAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwobWVzc2FnZSkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2NvbW1vbignZXJyb3InLCBzZWxmLmxvZ19jaGVja19yZWdleCkKIAogICAgIGRlZiBfaW5zZXJ0X2ZlZWRfdXJpcyhzZWxmKToKICAgICAgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsCkBAIC0xMjEsOCArMTE2LDEwIEBACiAKICAgICAgICAgYmIubm90ZSgiICBDb3B5aW5nIGJhY2sgcGFja2FnZSBkYXRhYmFzZS4uLiIpCiAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpcik6CisgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcyArIG9zLnBhdGguZGlybmFtZShkaXIpKQotICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpciwgc2VsZi5pbWFnZV9yb290ZnMgKyBkaXIpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnICsgZGlyLCBzZWxmLmltYWdlX3Jvb3RmcyArIGRpciwgc3ltbGlua3M9VHJ1ZSkKIAogICAgICAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCiAgICAgICAgICMgQ29weSBmaWxlcyBsb2NhdGVkIGluIC91c3IvbGliL2RlYnVnIG9yIC91c3Ivc3JjL2RlYnVnCkBAIC0xODUsMTYgKzE4MiwxOSBAQAogCiAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcykKIAotICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kZXBsb3lfZGlyX2ltYWdlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kZXBsb3lkaXIpCiAKICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyLCBpbnRlcmNlcHRzX2RpcikKIAogICAgICAgICBzaHV0aWwuY29weShzZWxmLmQuZXhwYW5kKCIke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0IiksCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSArCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwbG95ZGlyICsKICAgICAgICAgICAgICAgICAgICAgIi9SRUFETUVfLV9ET19OT1RfREVMRVRFX0ZJTEVTX0lOX1RISVNfRElSRUNUT1JZLnR4dCIpCiAKICAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcHJlX3Byb2Nlc3NfY21kcykKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICAjIGNhbGwgdGhlIHBhY2thZ2UgbWFuYWdlciBkZXBlbmRlbnQgY3JlYXRlIG1ldGhvZAogICAgICAgICBzZWxmLl9jcmVhdGUoKQogCkBAIC0yMDksNiArMjA5LDkgQEAKIAogICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBwb3N0X3Byb2Nlc3NfY21kcykKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CiAgICAgICAgICAgICBkZWxheWVkX3Bvc3RpbnN0cyA9IHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0cygpCkBAIC0yMjIsNiArMjI1LDkgQEAKIAogICAgICAgICBzZWxmLl91bmluc3RhbGxfdW5uZWVkZWQoKQogCisgICAgICAgIGlmIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXI6CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgIHNlbGYuX2luc2VydF9mZWVkX3VyaXMoKQogCiAgICAgICAgIHNlbGYuX3J1bl9sZGNvbmZpZygpCkBAIC0yMzIsNiArMjM4LDEwIEBACiAgICAgICAgIHNlbGYuX2NsZWFudXAoKQogICAgICAgICBzZWxmLl9sb2dfY2hlY2soKQogCisgICAgICAgIGlmIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXI6CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCisKICAgICBkZWYgX3VuaW5zdGFsbF91bm5lZWRlZChzZWxmKToKICAgICAgICAgIyBSZW1vdmUgdW5uZWVkZWQgaW5pdCBzY3JpcHQgc3ltbGlua3MKICAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMgPSBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKQpAQCAtMjQzLDcgKzI1Myw5IEBACiAKICAgICAgICAgaW1hZ2Vfcm9yZnMgPSBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKLSAgICAgICAgaWYgaW1hZ2Vfcm9yZnM6CisgICAgICAgIGltYWdlX3JvcmZzX2ZvcmNlID0gc2VsZi5kLmdldFZhcignRk9SQ0VfUk9fUkVNT1ZFJywgVHJ1ZSkKKworICAgICAgICBpZiBpbWFnZV9yb3JmcyBvciBpbWFnZV9yb3Jmc19mb3JjZSA9PSAiMSI6CiAgICAgICAgICAgICAjIFJlbW92ZSBjb21wb25lbnRzIHRoYXQgd2UgZG9uJ3QgbmVlZCBpZiBpdCdzIGEgcmVhZC1vbmx5IHJvb3RmcwogICAgICAgICAgICAgdW5uZWVkZWRfcGtncyA9IHNlbGYuZC5nZXRWYXIoIlJPT1RGU19ST19VTk5FRURFRCIsIFRydWUpLnNwbGl0KCkKICAgICAgICAgICAgIHBrZ3NfaW5zdGFsbGVkID0gaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoc2VsZi5kKQpAQCAtMzYzLDggKzM3NSw4IEBACiAKIAogY2xhc3MgUnBtUm9vdGZzKFJvb3Rmcyk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6Ci0gICAgICAgIHN1cGVyKFJwbVJvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyLCBwcm9ncmVzc19yZXBvcnRlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoUnBtUm9vdGZzLCBzZWxmKS5fX2luaXRfXyhkLCBwcm9ncmVzc19yZXBvcnRlcikKICAgICAgICAgc2VsZi5sb2dfY2hlY2tfcmVnZXggPSAnKHVucGFja2luZyBvZiBhcmNoaXZlIGZhaWxlZHxDYW5ub3QgZmluZCBwYWNrYWdlJ1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfGV4aXQgMXxFUlJPUjogfEVycm9yOiB8RXJyb3IgfEVSUk9SICdcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3xGYWlsZWQgfEZhaWxlZDogfEZhaWxlZCR8RmFpbGVkXChcZCtcKTopJwpAQCAtNDIyLDExICs0MzQsMTcgQEAKIAogICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBycG1fcHJlX3Byb2Nlc3NfY21kcykKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICBzZWxmLnBtLmR1bXBfYWxsX2F2YWlsYWJsZV9wa2dzKCkKIAogICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9pbmNyZW1lbnRhbChwa2dzX3RvX2luc3RhbGwpCiAKKyAgICAgICAgaWYgc2VsZi5wcm9ncmVzc19yZXBvcnRlcjoKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCisKICAgICAgICAgc2VsZi5wbS51cGRhdGUoKQogCiAgICAgICAgIHBrZ3MgPSBbXQpAQCAtNDM3LDEyICs0NTUsMjQgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCiAKKyAgICAgICAgaWYgc2VsZi5wcm9ncmVzc19yZXBvcnRlcjoKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCisKICAgICAgICAgc2VsZi5wbS5pbnN0YWxsKHBrZ3MpCiAKKyAgICAgICAgaWYgc2VsZi5wcm9ncmVzc19yZXBvcnRlcjoKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCisKICAgICAgICAgc2VsZi5wbS5pbnN0YWxsKHBrZ3NfYXR0ZW1wdCwgVHJ1ZSkKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICBzZWxmLnBtLmluc3RhbGxfY29tcGxlbWVudGFyeSgpCiAKKyAgICAgICAgaWYgc2VsZi5wcm9ncmVzc19yZXBvcnRlcjoKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCisKICAgICAgICAgc2VsZi5fc2V0dXBfZGJnX3Jvb3RmcyhbJy9ldGMvcnBtJywgJy92YXIvbGliL3JwbScsICcvdmFyL2xpYi9zbWFydCddKQogCiAgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHJwbV9wb3N0X3Byb2Nlc3NfY21kcykKQEAgLTQ1NCw2ICs0ODQsMTAgQEAKIAogICAgICAgICBzZWxmLnBtLnJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKCkKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKworCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfZGVwZW5kc19saXN0KCk6CiAgICAgICAgIHJldHVybiBbJ0RFUExPWV9ESVJfUlBNJywgJ0lOQ19SUE1fSU1BR0VfR0VOJywgJ1JQTV9QUkVQUk9DRVNTX0NPTU1BTkRTJywKQEAgLTQ3NCwzMiArNTA4LDYgQEAKICAgICAgICAgIyBhbHJlYWR5IHNhdmVkIGluIC9ldGMvcnBtLXBvc3RpbnN0cwogICAgICAgICBwYXNzCiAKLSAgICBkZWYgX2xvZ19jaGVja19lcnJvcihzZWxmKToKLSAgICAgICAgciA9IHJlLmNvbXBpbGUoJyh1bnBhY2tpbmcgb2YgYXJjaGl2ZSBmYWlsZWR8Q2Fubm90IGZpbmQgcGFja2FnZXxleGl0IDF8RVJSfEZhaWwpJykKLSAgICAgICAgbG9nX3BhdGggPSBzZWxmLmQuZXhwYW5kKCIke1R9L2xvZy5kb19yb290ZnMiKQotICAgICAgICB3aXRoIG9wZW4obG9nX3BhdGgsICdyJykgYXMgbG9nOgotICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAwCi0gICAgICAgICAgICBtZXNzYWdlID0gIlxuIgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gbG9nLnJlYWQoKS5zcGxpdCgnXG4nKToKLSAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICMgc2ggLXggbWF5IGVtaXQgY29kZSB3aGljaCBpc24ndCBhY3R1YWxseSBleGVjdXRlZAotICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgotCQkgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQotICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQotICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IFRoZXJlIHdlcmUgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGxvZ2ZpbGUnKQotICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IE1hdGNoZWQga2V5d29yZDogWyVzXVxuXG4nICUgbS5ncm91cCgpKQotCi0gICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPj0gMSBhbmQgZm91bmRfZXJyb3IgPD0gNToKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBsaW5lICsgJ1xuJwotICAgICAgICAgICAgICAgICAgICBmb3VuZF9lcnJvciArPSAxCi0KLSAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA9PSA2OgotICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChtZXNzYWdlKQotCiAgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CiAgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKICAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKQEAgLTUyNCw4ICs1MzIsOCBAQAogICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoLCBUcnVlKQogCiBjbGFzcyBEcGtnT3BrZ1Jvb3RmcyhSb290ZnMpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKLSAgICAgICAgc3VwZXIoRHBrZ09wa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHByb2dyZXNzX3JlcG9ydGVyPU5vbmUpOgorICAgICAgICBzdXBlcihEcGtnT3BrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCwgcHJvZ3Jlc3NfcmVwb3J0ZXIpCiAKICAgICBkZWYgX2dldF9wa2dzX3Bvc3RpbnN0cyhzZWxmLCBzdGF0dXNfZmlsZSk6CiAgICAgICAgIGRlZiBfZ2V0X3BrZ19kZXBlbmRzX2xpc3QocGtnX2RlcGVuZHMpOgpAQCAtNTY1LDcgKzU3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBrZ19kZXBlbmRzID0gbV9kZXBlbmRzLmdyb3VwKDEpCiAKICAgICAgICAgIyByZW1vdmUgcGFja2FnZSBkZXBlbmRlbmNpZXMgbm90IGluIHBvc3RpbnN0cwotICAgICAgICBwa2dfbmFtZXMgPSBwa2dzLmtleXMoKQorICAgICAgICBwa2dfbmFtZXMgPSBsaXN0KHBrZ3Mua2V5cygpKQogICAgICAgICBmb3IgcGtnX25hbWUgaW4gcGtnX25hbWVzOgogICAgICAgICAgICAgZGVwcyA9IHBrZ3NbcGtnX25hbWVdWzpdCiAKQEAgLTU5OCw3ICs2MDYsNyBAQAogICAgICAgICAgICAgcGtncyA9IHNlbGYuX2dldF9wa2dzX3Bvc3RpbnN0cyhzdGF0dXNfZmlsZSkKICAgICAgICAgaWYgcGtnczoKICAgICAgICAgICAgIHJvb3QgPSAiX19wYWNrYWdlZ3JvdXBfcG9zdGluc3RfXyIKLSAgICAgICAgICAgIHBrZ3Nbcm9vdF0gPSBwa2dzLmtleXMoKQorICAgICAgICAgICAgcGtnc1tyb290XSA9IGxpc3QocGtncy5rZXlzKCkpCiAgICAgICAgICAgICBfZGVwX3Jlc29sdmUocGtncywgcm9vdCwgcGtnX2xpc3QsIFtdKQogICAgICAgICAgICAgcGtnX2xpc3QucmVtb3ZlKHJvb3QpCiAKQEAgLTYxOSwxMCArNjI3LDEwIEBACiAgICAgICAgICAgICBudW0gKz0gMQogCiBjbGFzcyBEcGtnUm9vdGZzKERwa2dPcGtnUm9vdGZzKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKLSAgICAgICAgc3VwZXIoRHBrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyLCBwcm9ncmVzc19yZXBvcnRlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoRHBrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCwgcHJvZ3Jlc3NfcmVwb3J0ZXIpCiAgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJ15FOicKLSAgICAgICAgc2VsZi5sb2dfY2hlY2tfZXhwZWN0ZWRfZXJyb3JzX3JlZ2V4ZXMgPSBcCisgICAgICAgIHNlbGYubG9nX2NoZWNrX2V4cGVjdGVkX3JlZ2V4ZXMgPSBcCiAgICAgICAgIFsKICAgICAgICAgICAgICJeRTogVW5tZXQgZGVwZW5kZW5jaWVzLiIKICAgICAgICAgXQpAQCAtNjQ4LDE1ICs2NTYsMzEgQEAKIAogICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBkZWJfcHJlX3Byb2Nlc3NfY21kcykKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKyAgICAgICAgICAgICMgRG9uJ3Qgc3VwcG9ydCBpbmNyZW1lbnRhbCwgc28gc2tpcCB0aGF0CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgIHNlbGYucG0udXBkYXRlKCkKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICBmb3IgcGtnX3R5cGUgaW4gc2VsZi5pbnN0YWxsX29yZGVyOgogICAgICAgICAgICAgaWYgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgogICAgICAgICAgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRmFsc2UsIFRydWVdW3BrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWV0pCiAKKyAgICAgICAgaWYgc2VsZi5wcm9ncmVzc19yZXBvcnRlcjoKKyAgICAgICAgICAgICMgRG9uJ3Qgc3VwcG9ydCBhdHRlbXB0b25seSwgc28gc2tpcCB0aGF0CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICBzZWxmLnBtLmluc3RhbGxfY29tcGxlbWVudGFyeSgpCiAKKyAgICAgICAgaWYgc2VsZi5wcm9ncmVzc19yZXBvcnRlcjoKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXIubmV4dF9zdGFnZSgpCisKICAgICAgICAgc2VsZi5fc2V0dXBfZGJnX3Jvb3RmcyhbJy92YXIvbGliL2Rwa2cnXSkKIAogICAgICAgICBzZWxmLnBtLmZpeF9icm9rZW5fZGVwZW5kZW5jaWVzKCkKQEAgLTY2Nyw2ICs2OTEsOSBAQAogCiAgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIGRlYl9wb3N0X3Byb2Nlc3NfY21kcykKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2RlcGVuZHNfbGlzdCgpOgogICAgICAgICByZXR1cm4gWydERVBMT1lfRElSX0RFQicsICdERUJfU0RLX0FSQ0gnLCAnQVBUQ09ORl9UQVJHRVQnLCAnQVBUX0FSR1MnLCAnRFBLR19BUkNIJywgJ0RFQl9QUkVQUk9DRVNTX0NPTU1BTkRTJywgJ0RFQl9QT1NUUFJPQ0VTU19DT01NQU5EUyddCkBAIC02OTIsOCArNzE5LDggQEAKIAogCiBjbGFzcyBPcGtnUm9vdGZzKERwa2dPcGtnUm9vdGZzKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKLSAgICAgICAgc3VwZXIoT3BrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyLCBwcm9ncmVzc19yZXBvcnRlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoT3BrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCwgcHJvZ3Jlc3NfcmVwb3J0ZXIpCiAgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJyhleGl0IDF8Q29sbGVjdGVkIGVycm9ycyknCiAKICAgICAgICAgc2VsZi5tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBtYW5pZmVzdF9kaXIpCkBAIC04ODcsMTMgKzkxNCwyNCBAQAogCiAgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcHJlX3Byb2Nlc3NfY21kcykKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKyAgICAgICAgICAgICMgU3RlcHMgYXJlIGEgYml0IGRpZmZlcmVudCBpbiBvcmRlciwgc2tpcCBuZXh0CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgIHNlbGYucG0udXBkYXRlKCkKIAogICAgICAgICBzZWxmLnBtLmhhbmRsZV9iYWRfcmVjb21tZW5kYXRpb25zKCkKIAorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKwogICAgICAgICBpZiBzZWxmLmluY19vcGtnX2ltYWdlX2dlbiA9PSAiMSI6CiAgICAgICAgICAgICBzZWxmLl9yZW1vdmVfZXh0cmFfcGFja2FnZXMocGtnc190b19pbnN0YWxsKQogCisgICAgICAgIGlmIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXI6CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgIGZvciBwa2dfdHlwZSBpbiBzZWxmLmluc3RhbGxfb3JkZXI6CiAgICAgICAgICAgICBpZiBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CiAgICAgICAgICAgICAgICAgIyBGb3IgbXVsdGlsaWIsIHdlIHBlcmZvcm0gYSBzYW5pdHkgdGVzdCBiZWZvcmUgZmluYWwgaW5zdGFsbApAQCAtOTA1LDE1ICs5NDMsMjQgQEAKICAgICAgICAgICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQogCisgICAgICAgIGlmIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXI6CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKIAotICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL3Zhci9saWIvb3BrZyddKQorICAgICAgICBpZiBzZWxmLnByb2dyZXNzX3JlcG9ydGVyOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19yZXBvcnRlci5uZXh0X3N0YWdlKCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL2V0YycsICcvdmFyL2xpYi9vcGtnJywgJy91c3IvbGliL3NzbCddKQogCiAgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcG9zdF9wcm9jZXNzX2NtZHMpCiAKICAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPT0gIjEiOgogICAgICAgICAgICAgc2VsZi5wbS5iYWNrdXBfcGFja2FnaW5nX2RhdGEoKQogCisgICAgICAgIGlmIHNlbGYucHJvZ3Jlc3NfcmVwb3J0ZXI6CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQorCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfZGVwZW5kc19saXN0KCk6CiAgICAgICAgIHJldHVybiBbJ0lQS0dDT05GX1NESycsICdJUEtfRkVFRF9VUklTJywgJ0RFUExPWV9ESVJfSVBLJywgJ0lQS0dDT05GX1RBUkdFVCcsICdJTkNfSVBLX0lNQUdFX0dFTicsICdPUEtHX0FSR1MnLCAnT1BLR0xJQkRJUicsICdPUEtHX1BSRVBST0NFU1NfQ09NTUFORFMnLCAnT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUycsICdPUEtHTElCRElSJ10KQEAgLTk0OSwxNiArOTk2LDE2IEBACiAgICAgY2xzID0gZ2V0X2NsYXNzX2Zvcl90eXBlKGltZ190eXBlKQogICAgIHJldHVybiBjbHMuX2RlcGVuZHNfbGlzdCgpCiAKLWRlZiBjcmVhdGVfcm9vdGZzKGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKK2RlZiBjcmVhdGVfcm9vdGZzKGQsIG1hbmlmZXN0X2Rpcj1Ob25lLCBwcm9ncmVzc19yZXBvcnRlcj1Ob25lKToKICAgICBlbnZfYmtwID0gb3MuZW52aXJvbi5jb3B5KCkKIAogICAgIGltZ190eXBlID0gZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQogICAgIGlmIGltZ190eXBlID09ICJycG0iOgotICAgICAgICBScG1Sb290ZnMoZCwgbWFuaWZlc3RfZGlyKS5jcmVhdGUoKQorICAgICAgICBScG1Sb290ZnMoZCwgbWFuaWZlc3RfZGlyLCBwcm9ncmVzc19yZXBvcnRlcikuY3JlYXRlKCkKICAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgotICAgICAgICBPcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKyAgICAgICAgT3BrZ1Jvb3RmcyhkLCBtYW5pZmVzdF9kaXIsIHByb2dyZXNzX3JlcG9ydGVyKS5jcmVhdGUoKQogICAgIGVsaWYgaW1nX3R5cGUgPT0gImRlYiI6Ci0gICAgICAgIERwa2dSb290ZnMoZCwgbWFuaWZlc3RfZGlyKS5jcmVhdGUoKQorICAgICAgICBEcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpciwgcHJvZ3Jlc3NfcmVwb3J0ZXIpLmNyZWF0ZSgpCiAKICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKICAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Nkay5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zZGsucHkKaW5kZXggZjE1ZmJkYi4uYzc0NTI1ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Nkay5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc2RrLnB5CkBAIC04LDkgKzgsNyBAQAogaW1wb3J0IHRyYWNlYmFjawogCiAKLWNsYXNzIFNkayhvYmplY3QpOgotICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCi0KK2NsYXNzIFNkayhvYmplY3QsIG1ldGFjbGFzcz1BQkNNZXRhKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKICAgICAgICAgc2VsZi5kID0gZAogICAgICAgICBzZWxmLnNka19vdXRwdXQgPSBzZWxmLmQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkKQEAgLTE1NSwxNCArMTUzLDE2IEBACiAKICAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKIAotICAgICAgICBzZWxmLnRhcmdldF9wbS5yZW1vdmVfcGFja2FnaW5nX2RhdGEoKQorICAgICAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoIlNES0lNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgc2VsZi50YXJnZXRfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKIAogICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCiAgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCiAKICAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCiAKLSAgICAgICAgc2VsZi5ob3N0X3BtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisgICAgICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygiU0RLSU1BR0VfRkVBVFVSRVMiLCAicGFja2FnZS1tYW5hZ2VtZW50IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBzZWxmLmhvc3RfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKIAogICAgICAgICAjIE1vdmUgaG9zdCBSUE0gbGlicmFyeSBkYXRhCiAgICAgICAgIG5hdGl2ZV9ycG1fc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKQEAgLTIzMiwxNCArMjMyLDE2IEBACiAKICAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKIAotICAgICAgICBzZWxmLnRhcmdldF9wbS5yZW1vdmVfcGFja2FnaW5nX2RhdGEoKQorICAgICAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoIlNES0lNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgc2VsZi50YXJnZXRfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKIAogICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCiAgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCiAKICAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCiAKLSAgICAgICAgc2VsZi5ob3N0X3BtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisgICAgICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygiU0RLSU1BR0VfRkVBVFVSRVMiLCAicGFja2FnZS1tYW5hZ2VtZW50IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBzZWxmLmhvc3RfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKIAogICAgICAgICB0YXJnZXRfc3lzY29uZmRpciA9IG9zLnBhdGguam9pbihzZWxmLnNka190YXJnZXRfc3lzcm9vdCwgc2VsZi5zeXNjb25mZGlyKQogICAgICAgICBob3N0X3N5c2NvbmZkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfaG9zdF9zeXNyb290LCBzZWxmLnN5c2NvbmZkaXIpCkBAIC0yNDcsMTIgKzI0OSwxMiBAQAogICAgICAgICBzZWxmLm1rZGlyaGllcih0YXJnZXRfc3lzY29uZmRpcikKICAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi50YXJnZXRfY29uZiwgdGFyZ2V0X3N5c2NvbmZkaXIpCiAgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbih0YXJnZXRfc3lzY29uZmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi50YXJnZXRfY29uZikpLCAwNjQ0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzZWxmLnRhcmdldF9jb25mKSksIDBvNjQ0KQogCiAgICAgICAgIHNlbGYubWtkaXJoaWVyKGhvc3Rfc3lzY29uZmRpcikKICAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5ob3N0X2NvbmYsIGhvc3Rfc3lzY29uZmRpcikKICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGhvc3Rfc3lzY29uZmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5ob3N0X2NvbmYpKSwgMDY0NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5ob3N0X2NvbmYpKSwgMG82NDQpCiAKICAgICAgICAgbmF0aXZlX29wa2dfc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsb2NhbHN0YXRlZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCkBAIC0zMTQsNiArMzE2LDkgQEAKIAogICAgICAgICBzZWxmLl9jb3B5X2FwdF9kaXJfdG8ob3MucGF0aC5qb2luKHNlbGYuc2RrX3RhcmdldF9zeXNyb290LCAiZXRjIiwgImFwdCIpKQogCisgICAgICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygiU0RLSU1BR0VfRkVBVFVSRVMiLCAicGFja2FnZS1tYW5hZ2VtZW50IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBzZWxmLnRhcmdldF9wbS5yZW1vdmVfcGFja2FnaW5nX2RhdGEoKQorCiAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKICAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKIApAQCAtMzIyLDYgKzMyNyw5IEBACiAgICAgICAgIHNlbGYuX2NvcHlfYXB0X2Rpcl90byhvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRjIiwgImFwdCIpKQogCisgICAgICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygiU0RLSU1BR0VfRkVBVFVSRVMiLCAicGFja2FnZS1tYW5hZ2VtZW50IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBzZWxmLmhvc3RfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKwogICAgICAgICBuYXRpdmVfZHBrZ19zdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXIiLCAibGliIiwgImRwa2ciKQogICAgICAgICBzZWxmLm1rZGlyaGllcihuYXRpdmVfZHBrZ19zdGF0ZV9kaXIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3NzdGF0ZXNpZy5weQppbmRleCAwMWRjZTY2Li44MjI0ZTNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zc3RhdGVzaWcucHkKQEAgLTEzMCw3ICsxMzAsOSBAQAogICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5zZXRfdGFza2RhdGEoY29yZWRhdGEpCiAKICAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6Ci0gICAgICAgIHNlbGYuZHVtcF9sb2NrZWRzaWdzKCkKKyAgICAgICAgc2lnZmlsZSA9IG9zLmdldGN3ZCgpICsgIi9sb2NrZWQtc2lncy5pbmMiCisgICAgICAgIGJiLnBsYWluKCJXcml0aW5nIGxvY2tlZCBzaWdzIHRvICVzIiAlIHNpZ2ZpbGUpCisgICAgICAgIHNlbGYuZHVtcF9sb2NrZWRzaWdzKHNpZ2ZpbGUpCiAgICAgICAgIHJldHVybiBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3MoZGF0YUNhY2hlLCBvcHRpb25zKQogCiAgICAgZGVmIGdldF90YXNraGFzaChzZWxmLCBmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKToKQEAgLTE4MSwxMSArMTgzLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSkKIAotICAgIGRlZiBkdW1wX2xvY2tlZHNpZ3Moc2VsZiwgc2lnZmlsZT1Ob25lLCB0YXNrZmlsdGVyPU5vbmUpOgotICAgICAgICBpZiBub3Qgc2lnZmlsZToKLSAgICAgICAgICAgIHNpZ2ZpbGUgPSBvcy5nZXRjd2QoKSArICIvbG9ja2VkLXNpZ3MuaW5jIgotCi0gICAgICAgIGJiLnBsYWluKCJXcml0aW5nIGxvY2tlZCBzaWdzIHRvICVzIiAlIHNpZ2ZpbGUpCisgICAgZGVmIGR1bXBfbG9ja2Vkc2lncyhzZWxmLCBzaWdmaWxlLCB0YXNrZmlsdGVyPU5vbmUpOgogICAgICAgICB0eXBlcyA9IHt9CiAgICAgICAgIGZvciBrIGluIHNlbGYucnVudGFza2RlcHM6CiAgICAgICAgICAgICBpZiB0YXNrZmlsdGVyOgpAQCAtMjEwLDcgKzIwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICAgIiArIHNlbGYubG9ja2VkcG5tYXBbZm5dICsgIjoiICsgdGFzayArICI6IiArIHNlbGYudGFza2hhc2hba10gKyAiIFxcXG4iKQogICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICAiXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVNfJXMgPSAiJXMiJyAlIChzZWxmLm1hY2hpbmUsICIgIi5qb2luKHR5cGVzLmtleXMoKSkpKQorICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVNfJXMgPSAiJXMiJyAlIChzZWxmLm1hY2hpbmUsICIgIi5qb2luKGxpc3QodHlwZXMua2V5cygpKSkpKQogCiAgICAgZGVmIGNoZWNraGFzaGVzKHNlbGYsIG1pc3NlZCwgcmV0LCBzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKToKICAgICAgICAgd2Fybl9tc2dzID0gW10KQEAgLTIyMCw3ICsyMTgsNyBAQAogICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc3FfZm4pKToKICAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHJldDoKICAgICAgICAgICAgICAgICBmb3IgcG4gaW4gc2VsZi5sb2NrZWRzaWdzOgotICAgICAgICAgICAgICAgICAgICBpZiBzcV9oYXNoW3Rhc2tdIGluIHNlbGYubG9ja2Vkc2lnc1twbl0uaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBzcV9oYXNoW3Rhc2tdIGluIGl0ZXIoc2VsZi5sb2NrZWRzaWdzW3BuXS52YWx1ZXMoKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcV90YXNrW3Rhc2tdID09ICdkb19zaGFyZWRfd29ya2Rpcic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIHNzdGF0ZV9taXNzaW5nX21zZ3MuYXBwZW5kKCJMb2NrZWQgc2lnIGlzIHNldCBmb3IgJXM6JXMgKCVzKSB5ZXQgbm90IGluIHNzdGF0ZSBjYWNoZT8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVybWluYWwucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVybWluYWwucHkKaW5kZXggNjM0ZGFhOS4uMzkwMWFkMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlcm1pbmFsLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXJtaW5hbC5weQpAQCAtMjUsOSArMjUsNyBAQAogICAgICAgICByZXR1cm4gYm9vbChjbHMuY29tbWFuZCkKIAogCi1jbGFzcyBUZXJtaW5hbChQb3Blbik6Ci0gICAgX19tZXRhY2xhc3NfXyA9IFJlZ2lzdHJ5Ci0KK2NsYXNzIFRlcm1pbmFsKFBvcGVuLCBtZXRhY2xhc3M9UmVnaXN0cnkpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgogICAgICAgICBmbXRfc2hfY21kID0gc2VsZi5mb3JtYXRfY29tbWFuZChzaF9jbWQsIHRpdGxlKQogICAgICAgICB0cnk6CkBAIC00MSw3ICszOSw3IEBACiAKICAgICBkZWYgZm9ybWF0X2NvbW1hbmQoc2VsZiwgc2hfY21kLCB0aXRsZSk6CiAgICAgICAgIGZtdCA9IHsndGl0bGUnOiB0aXRsZSBvciAnVGVybWluYWwnLCAnY29tbWFuZCc6IHNoX2NtZH0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmNvbW1hbmQsIGJhc2VzdHJpbmcpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY29tbWFuZCwgc3RyKToKICAgICAgICAgICAgIHJldHVybiBzaGxleC5zcGxpdChzZWxmLmNvbW1hbmQuZm9ybWF0KCoqZm10KSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBbZWxlbWVudC5mb3JtYXQoKipmbXQpIGZvciBlbGVtZW50IGluIHNlbGYuY29tbWFuZF0KQEAgLTUzLDcgKzUxLDcgQEAKICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoc2VsZi5uYW1lKQogCiBjbGFzcyBHbm9tZShYVGVybWluYWwpOgotICAgIGNvbW1hbmQgPSAnZ25vbWUtdGVybWluYWwgLXQgInt0aXRsZX0iIC0tZGlzYWJsZS1mYWN0b3J5IC14IHtjb21tYW5kfScKKyAgICBjb21tYW5kID0gJ2dub21lLXRlcm1pbmFsIC10ICJ7dGl0bGV9IiAteCB7Y29tbWFuZH0nCiAgICAgcHJpb3JpdHkgPSAyCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKQEAgLTYzLDEyICs2MSwyOCBAQAogICAgICAgICAjIE9uY2UgZml4ZWQgb24gdGhlIGdub21lLXRlcm1pbmFsIHByb2plY3QsIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQuCiAgICAgICAgIGlmIG9zLmdldGVudignTENfQUxMJyk6IG9zLnB1dGVudignTENfQUxMJywnJykKIAotICAgICAgICAjIENoZWNrIHZlcnNpb24KLSAgICAgICAgdmVybnVtID0gY2hlY2tfdGVybWluYWxfdmVyc2lvbigiZ25vbWUtdGVybWluYWwiKQotICAgICAgICBpZiB2ZXJudW0gYW5kIExvb3NlVmVyc2lvbih2ZXJudW0pID49ICczLjEwJzoKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnR25vbWUtVGVybWluYWwgMy4xMCBvciBsYXRlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGlzYWJsZS1mYWN0b3J5JykKLSAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICdnbm9tZS10ZXJtaW5hbCAtdCAie3RpdGxlfSIgLXgge2NvbW1hbmR9JwotICAgICAgICBYVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICAjIFdlIG5lZWQgdG8ga25vdyB3aGVuIHRoZSBjb21tYW5kIGNvbXBsZXRlcyBidXQgZ25vbWUtdGVybWluYWwgZ2l2ZXMgdXMgbm8gd2F5IAorICAgICAgICAjIHRvIGRvIHRoaXMuIFdlIHRoZXJlZm9yZSB3cml0ZSB0aGUgcGlkIHRvIGEgZmlsZSB1c2luZyBhICJwaG9uZWhvbWUiIHdyYXBwZXIKKyAgICAgICAgIyBzY3JpcHQsIHRoZW4gbW9uaXRvciB0aGUgcGlkIHVudGlsIGl0IGV4aXRzLiBUaGFua3MgZ25vbWUhCisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBwaWRmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZSA9IEZhbHNlKS5uYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNoX2NtZCA9ICJvZS1nbm9tZS10ZXJtaW5hbC1waG9uZWhvbWUgIiArIHBpZGZpbGUgKyAiICIgKyBzaF9jbWQKKyAgICAgICAgICAgIFhUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgICAgICB3aGlsZSBvcy5zdGF0KHBpZGZpbGUpLnN0X3NpemUgPD0gMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd2l0aCBvcGVuKHBpZGZpbGUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBwaWQgPSBpbnQoZi5yZWFkbGluZSgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKHBpZGZpbGUpCisKKyAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxsKHBpZCwgMCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgcmV0dXJuCiAKIGNsYXNzIE1hdGUoWFRlcm1pbmFsKToKICAgICBjb21tYW5kID0gJ21hdGUtdGVybWluYWwgLXQgInt0aXRsZX0iIC14IHtjb21tYW5kfScKQEAgLTI0OCw3ICsyNjIsNyBAQAogICAgICAgICBuZXdlbnZbIkxBTkciXSA9ICJDIgogICAgICAgICBwID0gc3ViLlBvcGVuKFsnc2gnLCAnLWMnLCBjbWR2ZXJzaW9uXSwgc3Rkb3V0PXN1Yi5QSVBFLCBzdGRlcnI9c3ViLlBJUEUsIGVudj1uZXdlbnYpCiAgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgIHZlcl9pbmZvID0gb3V0LnJzdHJpcCgpLnNwbGl0KCdcbicpCisgICAgICAgIHZlcl9pbmZvID0gb3V0LmRlY29kZSgpLnJzdHJpcCgpLnNwbGl0KCdcbicpCiAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICBpbXBvcnQgZXJybm8KICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2VsZi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2VsZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjU5MDM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfZWxmLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9lLnFhCisKK2NsYXNzIFRlc3RFbGYodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X21hY2hpbmVfbmFtZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgZWxmX21hY2hpbmVfdG9fc3RyaW5nKCkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MDIpLCAiU1BBUkMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDAzKSwgIng4NiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MDgpLCAiTUlQUyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MTQpLCAiUG93ZXJQQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MjgpLCAiQVJNIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgyQSksICJTdXBlckgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDMyKSwgIklBLTY0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgzRSksICJ4ODYtNjQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweEI3KSwgIkFBcmNoNjQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MDApLCAiVW5rbm93biAoMCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweERFQURCRUVGKSwgIlVua25vd24gKDM3MzU5Mjg1NTkpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoImZvb2JhciIpLCAiVW5rbm93biAoJ2Zvb2JhcicpIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF9wYXRoLnB5CmluZGV4IDNkNDFjZTEuLjQ0ZDA2ODEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfcGF0aC5weQpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBmb3IgZCBpbiBzZWxmLkRJUlM6CiAgICAgICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBkKSkKICAgICAgICAgZm9yIGYgaW4gc2VsZi5GSUxFUzoKLSAgICAgICAgICAgIGZpbGUob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZiksICJ3IikKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZiksICJ3IikKICAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LUzoKICAgICAgICAgICAgIG9zLnN5bWxpbmsobFsxXSwgb3MucGF0aC5qb2luKHNlbGYucm9vdCwgbFswXSkpCiAKQEAgLTg1LDUgKzg1LDUgQEAKIAogICAgIGRlZiB0ZXN0X2xvb3Aoc2VsZik6CiAgICAgICAgIGZvciBlIGluIHNlbGYuRVhDRVBUSU9OUzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKE9TRXJyb3IsIHInXFtFcnJubyAldVxdJyAlIGVbMV0sCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsIHInXFtFcnJubyAldVxdJyAlIGVbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fcmVhbHBhdGgsIGVbMF0sIEZhbHNlLCBGYWxzZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90eXBlcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90eXBlcy5weQppbmRleCA3ZjQ3YzE3Li40YWU1OGFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdHlwZXMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3R5cGVzLnB5CkBAIC0zMyw3ICszMyw3IEBACiAgICAgQWN0cyBhcyBhIG11bHRpcGxlIGNob2ljZSBmb3IgdGhlIHVzZXIuICBUbyB1c2UgdGhpcywgc2V0IHRoZSB2YXJpYWJsZQogICAgIHR5cGUgZmxhZyB0byAnY2hvaWNlJywgYW5kIHNldCB0aGUgJ2Nob2ljZXMnIGZsYWcgdG8gYSBzcGFjZSBzZXBhcmF0ZWQKICAgICBsaXN0IG9mIHZhbGlkIHZhbHVlcy4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2hvaWNlIGFjY2VwdHMgYSBzdHJpbmcsIG5vdCAnJXMnIiAlIHR5cGUodmFsdWUpKQogCiAgICAgdmFsdWUgPSB2YWx1ZS5sb3dlcigpCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICBWYWxpZCB2YWx1ZXMgZm9yIGZhbHNlOiAnbm8nLCAnbicsICdmYWxzZScsICdmJywgJzAnCiAgICAgIiIiCiAKLSAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYm9vbGVhbiBhY2NlcHRzIGEgc3RyaW5nLCBub3QgJyVzJyIgJSB0eXBlKHZhbHVlKSkKIAogICAgIHZhbHVlID0gdmFsdWUubG93ZXIoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5CmluZGV4IDMwZDMwNjIuLmQ2NTQ1YjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS91dGlscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdXRpbHMucHkKQEAgLTIzLDEzICsyMywxMyBAQAogICAgICAgICByZXR1cm4gaWZmYWxzZQogCiBkZWYgY29uZGl0aW9uYWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6Ci0gICAgaWYgZC5nZXRWYXIodmFyaWFibGUsMSkgPT0gY2hlY2t2YWx1ZToKKyAgICBpZiBkLmdldFZhcih2YXJpYWJsZSwgVHJ1ZSkgPT0gY2hlY2t2YWx1ZToKICAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCiAKIGRlZiBsZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgotICAgIGlmIGZsb2F0KGQuZ2V0VmFyKHZhcmlhYmxlLDEpKSA8PSBmbG9hdChjaGVja3ZhbHVlKToKKyAgICBpZiBmbG9hdChkLmdldFZhcih2YXJpYWJsZSwgVHJ1ZSkpIDw9IGZsb2F0KGNoZWNrdmFsdWUpOgogICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB2YWwyID0gZC5nZXRWYXIodmFyaWFibGUyLCBUcnVlKQogICAgIHZhbDEgPSBzZXQodmFsMS5zcGxpdCgpKQogICAgIHZhbDIgPSBzZXQodmFsMi5zcGxpdCgpKQotICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgaWYgaXNpbnN0YW5jZShjaGVja3ZhbHVlLCBzdHIpOgogICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUuc3BsaXQoKSkKICAgICBlbHNlOgogICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUpCkBAIC04NSwxMSArODUsMTEgQEAKIAogZGVmIHN0cl9maWx0ZXIoZiwgc3RyLCBkKToKICAgICBmcm9tIHJlIGltcG9ydCBtYXRjaAotICAgIHJldHVybiAiICIuam9pbihmaWx0ZXIobGFtYmRhIHg6IG1hdGNoKGYsIHgsIDApLCBzdHIuc3BsaXQoKSkpCisgICAgcmV0dXJuICIgIi5qb2luKFt4IGZvciB4IGluIHN0ci5zcGxpdCgpIGlmIG1hdGNoKGYsIHgsIDApXSkKIAogZGVmIHN0cl9maWx0ZXJfb3V0KGYsIHN0ciwgZCk6CiAgICAgZnJvbSByZSBpbXBvcnQgbWF0Y2gKLSAgICByZXR1cm4gIiAiLmpvaW4oZmlsdGVyKGxhbWJkYSB4OiBub3QgbWF0Y2goZiwgeCwgMCksIHN0ci5zcGxpdCgpKSkKKyAgICByZXR1cm4gIiAiLmpvaW4oW3ggZm9yIHggaW4gc3RyLnNwbGl0KCkgaWYgbm90IG1hdGNoKGYsIHgsIDApXSkKIAogZGVmIHBhcmFtX2Jvb2woY2ZnLCBmaWVsZCwgZGZsdCA9IE5vbmUpOgogICAgICIiIkxvb2t1cCA8ZmllbGQ+IGluIDxjZmc+IG1hcCBhbmQgY29udmVydCBpdCB0byBhIGJvb2xlYW47IHRha2UKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgIFBOLWRiZyBQTi1kb2MgUE4tbG9jYWxlLWViLWdiIHJlbW92ZWQuCiAgICAgIiIiCiAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQotICAgIGJsYWNrbGlzdCA9IG1hcChsYW1iZGEgc3VmZml4OiBwbiArIHN1ZmZpeCwgKCcnLCAnLWRiZycsICctZGV2JywgJy1kb2MnLCAnLWxvY2FsZScsICctc3RhdGljZGV2JykpCisgICAgYmxhY2tsaXN0ID0gW3BuICsgc3VmZml4IGZvciBzdWZmaXggaW4gKCcnLCAnLWRiZycsICctZGV2JywgJy1kb2MnLCAnLWxvY2FsZScsICctc3RhdGljZGV2JyldCiAgICAgbG9jYWxlcGtnID0gcG4gKyAiLWxvY2FsZS0iCiAgICAgcGtncyA9IFtdCiAKQEAgLTIzNSw3ICsyMzUsNyBAQAogIyBzbyBpbXBsZW1lbnQgYSB2ZXJzaW9uIGhlcmUKICMKIAotZnJvbSBRdWV1ZSBpbXBvcnQgUXVldWUKK2Zyb20gcXVldWUgaW1wb3J0IFF1ZXVlCiBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCiAKIGNsYXNzIFRocmVhZGVkV29ya2VyKFRocmVhZCk6CkBAIC0yNDksNyArMjQ5LDcgQEAKICAgICAgICAgc2VsZi53b3JrZXJfZW5kID0gd29ya2VyX2VuZAogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgZnJvbSBRdWV1ZSBpbXBvcnQgRW1wdHkKKyAgICAgICAgZnJvbSBxdWV1ZSBpbXBvcnQgRW1wdHkKIAogICAgICAgICBpZiBzZWxmLndvcmtlcl9pbml0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi53b3JrZXJfaW5pdChzZWxmKQpAQCAtMjY0LDggKzI2NCw4IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmdW5jKHNlbGYsICphcmdzLCAqKmthcmdzKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgICAgICBwcmludCBlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcHJpbnQoZSkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi50YXNrcy50YXNrX2RvbmUoKQogCkBAIC0zMDQsMyArMzA0LDE2IEBACiAgICAgd2l0aCBvcGVuKGxkc29jb25mLCAidyIpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkgKyAnXG4nKQogICAgICAgICBmLndyaXRlKGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSArICdcbicpCisKK2NsYXNzIEltYWdlUUFGYWlsZWQoYmIuYnVpbGQuRnVuY0ZhaWxlZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc2NyaXB0aW9uLCBuYW1lPU5vbmUsIGxvZ2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubG9nZmlsZT1sb2dmaWxlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgbXNnID0gJ0Z1bmN0aW9uIGZhaWxlZDogJXMnICUgc2VsZi5uYW1lCisgICAgICAgIGlmIHNlbGYuZGVzY3JpcHRpb246CisgICAgICAgICAgICBtc2cgPSBtc2cgKyAnICglcyknICUgc2VsZi5kZXNjcmlwdGlvbgorCisgICAgICAgIHJldHVybiBtc2cKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvYnVpbGRwZXJmL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvYnVpbGRwZXJmL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNWY0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9idWlsZHBlcmYvX19pbml0X18ucHkKQEAgLTAsMCArMSwxOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKyMKKyIiIkJ1aWxkIHBlcmZvcm1hbmNlIHRlc3RzIiIiCitmcm9tIC5iYXNlIGltcG9ydCAoQnVpbGRQZXJmVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgQnVpbGRQZXJmVGVzdExvYWRlciwKKyAgICAgICAgICAgICAgICAgICBCdWlsZFBlcmZUZXN0UmVzdWx0LAorICAgICAgICAgICAgICAgICAgIEJ1aWxkUGVyZlRlc3RSdW5uZXIsCisgICAgICAgICAgICAgICAgICAgS2VybmVsRHJvcENhY2hlcywKKyAgICAgICAgICAgICAgICAgICBydW5DbWQyKQorZnJvbSAudGVzdF9iYXNpYyBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvYnVpbGRwZXJmL2Jhc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9idWlsZHBlcmYvYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWRkMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvYnVpbGRwZXJmL2Jhc2UucHkKQEAgLTAsMCArMSw1NTEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorIyBtb3JlIGRldGFpbHMuCisjCisiIiJCdWlsZCBwZXJmb3JtYW5jZSB0ZXN0IGJhc2UgY2xhc3NlcyBhbmQgZnVuY3Rpb25hbGl0eSIiIgoraW1wb3J0IGdsb2IKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCByZXNvdXJjZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzCitmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgU2ltcGxlUXVldWUKKworaW1wb3J0IG9lLnBhdGgKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgQ29tbWFuZEVycm9yLCBydW5DbWQsIGdldF9iYl92YXJzCitmcm9tIG9lcWEudXRpbHMuZ2l0IGltcG9ydCBHaXRFcnJvciwgR2l0UmVwbworCisjIEdldCBsb2dnZXIgZm9yIHRoaXMgbW9kdWxlCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignYnVpbGQtcGVyZicpCisKKyMgT3VyIG93biB2ZXJzaW9uIG9mIHJ1bkNtZCB3aGljaCBkb2VzIG5vdCByYWlzZSBBc3NlcnRFcnJvcnMgd2hpY2ggd291bGQgY2F1c2UKKyMgZXJyb3JzIHRvIGludGVycHJldGVkIGFzIGZhaWx1cmVzCitydW5DbWQyID0gcGFydGlhbChydW5DbWQsIGFzc2VydF9lcnJvcj1GYWxzZSkKKworCitjbGFzcyBLZXJuZWxEcm9wQ2FjaGVzKG9iamVjdCk6CisgICAgIiIiQ29udGFpbmVyIG9mIHRoZSBmdW5jdGlvbnMgZm9yIGRyb3BwaW5nIGtlcm5lbCBjYWNoZXMiIiIKKyAgICBzdWRvX3Bhc3N3ZCA9IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjaGVjayhjbHMpOgorICAgICAgICAiIiJDaGVjayBwZXJtc3Npb25zIGZvciBkcm9wcGluZyBrZXJuZWwgY2FjaGVzIiIiCisgICAgICAgIGZyb20gZ2V0cGFzcyBpbXBvcnQgZ2V0cGFzcworICAgICAgICBmcm9tIGxvY2FsZSBpbXBvcnQgZ2V0ZGVmYXVsdGxvY2FsZQorICAgICAgICBjbWQgPSBbJ3N1ZG8nLCAnLWsnLCAnLW4nLCAndGVlJywgJy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyddCisgICAgICAgIHJldCA9IHJ1bkNtZDIoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUsIGRhdGE9YicwJykKKyAgICAgICAgaWYgcmV0Lm91dHB1dC5zdGFydHN3aXRoKCdzdWRvOicpOgorICAgICAgICAgICAgcGFzc19zdHIgPSBnZXRwYXNzKAorICAgICAgICAgICAgICAgICJcblRoZSBzY3JpcHQgcmVxdWlyZXMgc3VkbyBhY2Nlc3MgdG8gZHJvcCBjYWNoZXMgYmV0d2VlbiAiCisgICAgICAgICAgICAgICAgImJ1aWxkcyAoZWNobyAzID4gL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzKS5cbiIKKyAgICAgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHlvdXIgc3VkbyBwYXNzd29yZDogIikKKyAgICAgICAgICAgIGNscy5zdWRvX3Bhc3N3ZCA9IGJ5dGVzKHBhc3Nfc3RyLCBnZXRkZWZhdWx0bG9jYWxlKClbMV0pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZHJvcChjbHMpOgorICAgICAgICAiIiJEcm9wIGtlcm5lbCBjYWNoZXMiIiIKKyAgICAgICAgY21kID0gWydzdWRvJywgJy1rJ10KKyAgICAgICAgaWYgY2xzLnN1ZG9fcGFzc3dkOgorICAgICAgICAgICAgY21kLmFwcGVuZCgnLVMnKQorICAgICAgICAgICAgaW5wdXRfZGF0YSA9IGNscy5zdWRvX3Bhc3N3ZCArIGInXG4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctbicpCisgICAgICAgICAgICBpbnB1dF9kYXRhID0gYicnCisgICAgICAgIGNtZCArPSBbJ3RlZScsICcvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMnXQorICAgICAgICBpbnB1dF9kYXRhICs9IGInMycKKyAgICAgICAgcnVuQ21kMihjbWQsIGRhdGE9aW5wdXRfZGF0YSkKKworCitkZWYgc3RyX3RvX2ZuKHN0cmluZyk6CisgICAgIiIiQ29udmVydCBzdHJpbmcgdG8gYSBzYW5pdGl6ZWQgZmlsZW5hbWUiIiIKKyAgICByZXR1cm4gcmUuc3ViKHInKFxXKyknLCAnLScsIHN0cmluZywgZmxhZ3M9cmUuTE9DQUxFKQorCisKK2NsYXNzIFJlc3VsdHNKc29uRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKyAgICAiIiJFeHRlbmRlZCBlbmNvZGVyIGZvciBidWlsZCBwZXJmIHRlc3QgcmVzdWx0cyIiIgorICAgIHVuaXhfZXBvY2ggPSBkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDApCisKKyAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICAiIiJFbmNvZGVyIGZvciBvdXIgdHlwZXMiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGRhdGV0aW1lKToKKyAgICAgICAgICAgICMgTk9URTogd2UgYXNzdW1lIHRoYXQgYWxsIHRpbWVzdGFtcHMgYXJlIGluIFVUQyB0aW1lCisgICAgICAgICAgICByZXR1cm4gKG9iaiAtIHNlbGYudW5peF9lcG9jaCkudG90YWxfc2Vjb25kcygpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0aW1lZGVsdGEpOgorICAgICAgICAgICAgcmV0dXJuIG9iai50b3RhbF9zZWNvbmRzKCkKKyAgICAgICAgcmV0dXJuIGpzb24uSlNPTkVuY29kZXIuZGVmYXVsdChzZWxmLCBvYmopCisKKworY2xhc3MgQnVpbGRQZXJmVGVzdFJlc3VsdCh1bml0dGVzdC5UZXh0VGVzdFJlc3VsdCk6CisgICAgIiIiUnVubmVyIGNsYXNzIGZvciBleGVjdXRpbmcgdGhlIGluZGl2aWR1YWwgdGVzdHMiIiIKKyAgICAjIExpc3Qgb2YgdGVzdCBjYXNlcyB0byBydW4KKyAgICB0ZXN0X3J1bl9xdWV1ZSA9IFtdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0X2RpciwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoQnVpbGRQZXJmVGVzdFJlc3VsdCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYub3V0X2RpciA9IG91dF9kaXIKKyAgICAgICAgIyBHZXQgR2l0IHBhcmFtZXRlcnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXBvID0gR2l0UmVwbygnLicpCisgICAgICAgIGV4Y2VwdCBHaXRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucmVwbyA9IE5vbmUKKyAgICAgICAgc2VsZi5naXRfY29tbWl0LCBzZWxmLmdpdF9jb21taXRfY291bnQsIHNlbGYuZ2l0X2JyYW5jaCA9IFwKKyAgICAgICAgICAgICAgICBzZWxmLmdldF9naXRfcmV2aXNpb24oKQorICAgICAgICBzZWxmLmhvc3RuYW1lID0gc29ja2V0LmdldGhvc3RuYW1lKCkKKyAgICAgICAgc2VsZi5wcm9kdWN0ID0gb3MuZ2V0ZW52KCdPRV9CVUlMRFBFUkZURVNUX1BST0RVQ1QnLCAnb2UtY29yZScpCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHNlbGYuZWxhcHNlZF90aW1lID0gTm9uZQorICAgICAgICBzZWxmLnN1Y2Nlc3NlcyA9IFtdCisgICAgICAgIGxvZy5pbmZvKCJVc2luZyBHaXQgYnJhbmNoOmNvbW1pdCAlczolcyAoJXMpIiwgc2VsZi5naXRfYnJhbmNoLAorICAgICAgICAgICAgICAgICBzZWxmLmdpdF9jb21taXQsIHNlbGYuZ2l0X2NvbW1pdF9jb3VudCkKKworICAgIGRlZiBnZXRfZ2l0X3JldmlzaW9uKHNlbGYpOgorICAgICAgICAiIiJHZXQgZ2l0IGJyYW5jaCBhbmQgY29tbWl0IHVuZGVyIHRlc3RpbmciIiIKKyAgICAgICAgY29tbWl0ID0gb3MuZ2V0ZW52KCdPRV9CVUlMRFBFUkZURVNUX0dJVF9DT01NSVQnKQorICAgICAgICBjb21taXRfY250ID0gb3MuZ2V0ZW52KCdPRV9CVUlMRFBFUkZURVNUX0dJVF9DT01NSVRfQ09VTlQnKQorICAgICAgICBicmFuY2ggPSBvcy5nZXRlbnYoJ09FX0JVSUxEUEVSRlRFU1RfR0lUX0JSQU5DSCcpCisgICAgICAgIGlmIG5vdCBzZWxmLnJlcG8gYW5kIChub3QgY29tbWl0IG9yIG5vdCBjb21taXRfY250IG9yIG5vdCBicmFuY2gpOgorICAgICAgICAgICAgbG9nLmluZm8oIlRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIEdpdCAiCisgICAgICAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSBjbG9uZS4gWW91IGNhbiBzcGVjaWZ5IGJyYW5jaCBhbmQgY29tbWl0ICIKKyAgICAgICAgICAgICAgICAgICAgICJkaXNwbGF5ZWQgaW4gdGVzdCByZXN1bHRzIHdpdGggT0VfQlVJTERQRVJGVEVTVF9HSVRfQlJBTkNILCAiCisgICAgICAgICAgICAgICAgICAgICAiT0VfQlVJTERQRVJGVEVTVF9HSVRfQ09NTUlUIGFuZCAiCisgICAgICAgICAgICAgICAgICAgICAiT0VfQlVJTERQRVJGVEVTVF9HSVRfQ09NTUlUX0NPVU5UIGVudmlyb25tZW50IHZhcmlhYmxlcyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgY29tbWl0OgorICAgICAgICAgICAgICAgIGNvbW1pdCA9IHNlbGYucmVwby5yZXZfcGFyc2UoJ0hFQUReMCcpCisgICAgICAgICAgICAgICAgY29tbWl0X2NudCA9IHNlbGYucmVwby5ydW5fY21kKFsncmV2LWxpc3QnLCAnLS1jb3VudCcsICdIRUFEXjAnXSkKKyAgICAgICAgICAgIGlmIG5vdCBicmFuY2g6CisgICAgICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5yZXBvLmdldF9jdXJyZW50X2JyYW5jaCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGJyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdDdXJyZW50bHkgb24gZGV0YWNoZWQgSEVBRCcpCisgICAgICAgIHJldHVybiBzdHIoY29tbWl0KSwgc3RyKGNvbW1pdF9jbnQpLCBzdHIoYnJhbmNoKQorCisgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlJlY29yZCByZXN1bHRzIGZyb20gc3VjY2Vzc2Z1bCB0ZXN0cyIiIgorICAgICAgICBzdXBlcihCdWlsZFBlcmZUZXN0UmVzdWx0LCBzZWxmKS5hZGRTdWNjZXNzKHRlc3QpCisgICAgICAgIHNlbGYuc3VjY2Vzc2VzLmFwcGVuZCgodGVzdCwgTm9uZSkpCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICAiIiJQcmUtdGVzdCBob29rIiIiCisgICAgICAgIHRlc3QuYmFzZV9kaXIgPSBzZWxmLm91dF9kaXIKKyAgICAgICAgb3MubWtkaXIodGVzdC5vdXRfZGlyKQorICAgICAgICBsb2cuaW5mbygiRXhlY3V0aW5nIHRlc3QgJXM6ICVzIiwgdGVzdC5uYW1lLCB0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSkKKyAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoIlslWS0lbS0lZCAlSDolTTolU10gIikpCisgICAgICAgIHN1cGVyKEJ1aWxkUGVyZlRlc3RSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQorCisgICAgZGVmIHN0YXJ0VGVzdFJ1bihzZWxmKToKKyAgICAgICAgIiIiUHJlLXJ1biBob29rIiIiCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IGRhdGV0aW1lLnV0Y25vdygpCisKKyAgICBkZWYgc3RvcFRlc3RSdW4oc2VsZik6CisgICAgICAgICIiIlByZS1ydW4gaG9vayIiIgorICAgICAgICBzZWxmLmVsYXBzZWRfdGltZSA9IGRhdGV0aW1lLnV0Y25vdygpIC0gc2VsZi5zdGFydF90aW1lCisgICAgICAgIHNlbGYud3JpdGVfcmVzdWx0c19qc29uKCkKKworICAgIGRlZiBhbGxfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgcmVzdWx0X21hcCA9IHsnU1VDQ0VTUyc6IHNlbGYuc3VjY2Vzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICdGQUlMJzogc2VsZi5mYWlsdXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAnRVJST1InOiBzZWxmLmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAnRVhQX0ZBSUwnOiBzZWxmLmV4cGVjdGVkRmFpbHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgJ1VORVhQX1NVQ0NFU1MnOiBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgJ1NLSVBQRUQnOiBzZWxmLnNraXBwZWR9CisgICAgICAgIGZvciBzdGF0dXMsIHRlc3RzIGluIHJlc3VsdF9tYXAuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgIHlpZWxkIChzdGF0dXMsIHRlc3QpCisKKworICAgIGRlZiB1cGRhdGVfZ2xvYmFscmVzX2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJXcml0ZSByZXN1bHRzIHRvIGdsb2JhbHJlcyBjc3YgZmlsZSIiIgorICAgICAgICAjIE1hcCB0ZXN0IG5hbWVzIHRvIHRpbWUgYW5kIHNpemUgY29sdW1ucyBpbiBnbG9iYWxyZXMKKyAgICAgICAgIyBUaGUgdHVwbGVzIHJlcHJlc2VudCBpbmRleCBhbmQgbGVuZ3RoIG9mIHRpbWVzIGFuZCBzaXplcworICAgICAgICAjIHJlc3BlY3RpdmVseQorICAgICAgICBncl9tYXAgPSB7J3Rlc3QxJzogKCgwLCAxKSwgKDgsIDEpKSwKKyAgICAgICAgICAgICAgICAgICd0ZXN0MTInOiAoKDEsIDEpLCAoTm9uZSwgTm9uZSkpLAorICAgICAgICAgICAgICAgICAgJ3Rlc3QxMyc6ICgoMiwgMSksICg5LCAxKSksCisgICAgICAgICAgICAgICAgICAndGVzdDInOiAoKDMsIDEpLCAoTm9uZSwgTm9uZSkpLAorICAgICAgICAgICAgICAgICAgJ3Rlc3QzJzogKCg0LCAzKSwgKE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgICAgICAgICd0ZXN0NCc6ICgoNywgMSksICgxMCwgMikpfQorCisgICAgICAgIGlmIHNlbGYucmVwbzoKKyAgICAgICAgICAgIGdpdF90YWdfcmV2ID0gc2VsZi5yZXBvLnJ1bl9jbWQoWydkZXNjcmliZScsIHNlbGYuZ2l0X2NvbW1pdF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBnaXRfdGFnX3JldiA9IHNlbGYuZ2l0X2NvbW1pdAorCisgICAgICAgIHZhbHVlcyA9IFsnMCddICogMTIKKyAgICAgICAgZm9yIHN0YXR1cywgKHRlc3QsIG1zZykgaW4gc2VsZi5hbGxfcmVzdWx0cygpOgorICAgICAgICAgICAgaWYgc3RhdHVzIGluIFsnRVJST1InLCAnU0tJUFBFRCddOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAodF9pbmQsIHRfbGVuKSwgKHNfaW5kLCBzX2xlbikgPSBncl9tYXBbdGVzdC5uYW1lXQorICAgICAgICAgICAgaWYgdF9pbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWVzW3RfaW5kOnRfaW5kICsgdF9sZW5dID0gdGVzdC50aW1lcworICAgICAgICAgICAgaWYgc19pbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWVzW3NfaW5kOnNfaW5kICsgc19sZW5dID0gdGVzdC5zaXplcworCisgICAgICAgIGxvZy5kZWJ1ZygiV3JpdGluZyBnbG9iYWxyZXMgbG9nIHRvICVzIiwgZmlsZW5hbWUpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ2EnKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZSgne30se306e30se30sJy5mb3JtYXQoc2VsZi5ob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2l0X2JyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2l0X2NvbW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdF90YWdfcmV2KSkKKyAgICAgICAgICAgIGZvYmoud3JpdGUoJywnLmpvaW4odmFsdWVzKSArICdcbicpCisKKyAgICBkZWYgd3JpdGVfcmVzdWx0c19qc29uKHNlbGYpOgorICAgICAgICAiIiJXcml0ZSB0ZXN0IHJlc3VsdHMgaW50byBhIGpzb24tZm9ybWF0dGVkIGZpbGUiIiIKKyAgICAgICAgcmVzdWx0cyA9IHsndGVzdGVyX2hvc3QnOiBzZWxmLmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICdnaXRfYnJhbmNoJzogc2VsZi5naXRfYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICdnaXRfY29tbWl0Jzogc2VsZi5naXRfY29tbWl0LAorICAgICAgICAgICAgICAgICAgICdnaXRfY29tbWl0X2NvdW50Jzogc2VsZi5naXRfY29tbWl0X2NvdW50LAorICAgICAgICAgICAgICAgICAgICdwcm9kdWN0Jzogc2VsZi5wcm9kdWN0LAorICAgICAgICAgICAgICAgICAgICdzdGFydF90aW1lJzogc2VsZi5zdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiBzZWxmLmVsYXBzZWRfdGltZX0KKworICAgICAgICB0ZXN0cyA9IHt9CisgICAgICAgIGZvciBzdGF0dXMsICh0ZXN0LCByZWFzb24pIGluIHNlbGYuYWxsX3Jlc3VsdHMoKToKKyAgICAgICAgICAgIHRlc3RzW3Rlc3QubmFtZV0gPSB7J25hbWUnOiB0ZXN0Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6IHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRfdGltZSc6IHRlc3Quc3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6IHRlc3QuZWxhcHNlZF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY21kX2xvZ19maWxlJzogb3MucGF0aC5yZWxwYXRoKHRlc3QuY21kX2xvZ19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3V0X2RpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZWFzdXJlbWVudHMnOiB0ZXN0Lm1lYXN1cmVtZW50c30KKyAgICAgICAgcmVzdWx0c1sndGVzdHMnXSA9IHRlc3RzCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLm91dF9kaXIsICdyZXN1bHRzLmpzb24nKSwgJ3cnKSBhcyBmb2JqOgorICAgICAgICAgICAganNvbi5kdW1wKHJlc3VsdHMsIGZvYmosIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjbHM9UmVzdWx0c0pzb25FbmNvZGVyKQorCisKKyAgICBkZWYgZ2l0X2NvbW1pdF9yZXN1bHRzKHNlbGYsIHJlcG9fcGF0aCwgYnJhbmNoPU5vbmUsIHRhZz1Ob25lKToKKyAgICAgICAgIiIiQ29tbWl0IHJlc3VsdHMgaW50byBhIEdpdCByZXBvc2l0b3J5IiIiCisgICAgICAgIHJlcG8gPSBHaXRSZXBvKHJlcG9fcGF0aCwgaXNfdG9wZGlyPVRydWUpCisgICAgICAgIGlmIG5vdCBicmFuY2g6CisgICAgICAgICAgICBicmFuY2ggPSBzZWxmLmdpdF9icmFuY2gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUmVwbGFjZSBrZXl3b3JkcworICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoLmZvcm1hdChnaXRfYnJhbmNoPXNlbGYuZ2l0X2JyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGVyX2hvc3Q9c2VsZi5ob3N0bmFtZSkKKworICAgICAgICBsb2cuaW5mbygiQ29tbWl0dGluZyB0ZXN0IHJlc3VsdHMgaW50byAlcyAlcyIsIHJlcG9fcGF0aCwgYnJhbmNoKQorICAgICAgICB0bXBfaW5kZXggPSBvcy5wYXRoLmpvaW4ocmVwb19wYXRoLCAnLmdpdCcsICdpbmRleC5vZS1idWlsZC1wZXJmJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBDcmVhdGUgbmV3IGNvbW1pdCBvYmplY3QgZnJvbSB0aGUgbmV3IHJlc3VsdHMKKyAgICAgICAgICAgIGVudl91cGRhdGUgPSB7J0dJVF9JTkRFWF9GSUxFJzogdG1wX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnR0lUX1dPUktfVFJFRSc6IHNlbGYub3V0X2Rpcn0KKyAgICAgICAgICAgIHJlcG8ucnVuX2NtZCgnYWRkIC4nLCBlbnZfdXBkYXRlKQorICAgICAgICAgICAgdHJlZSA9IHJlcG8ucnVuX2NtZCgnd3JpdGUtdHJlZScsIGVudl91cGRhdGUpCisgICAgICAgICAgICBwYXJlbnQgPSByZXBvLnJldl9wYXJzZShicmFuY2gpCisgICAgICAgICAgICBtc2cgPSAiUmVzdWx0cyBvZiB7fTp7fVxuIi5mb3JtYXQoc2VsZi5naXRfYnJhbmNoLCBzZWxmLmdpdF9jb21taXQpCisgICAgICAgICAgICBnaXRfY21kID0gWydjb21taXQtdHJlZScsIHRyZWUsICctbScsIG1zZ10KKyAgICAgICAgICAgIGlmIHBhcmVudDoKKyAgICAgICAgICAgICAgICBnaXRfY21kICs9IFsnLXAnLCBwYXJlbnRdCisgICAgICAgICAgICBjb21taXQgPSByZXBvLnJ1bl9jbWQoZ2l0X2NtZCwgZW52X3VwZGF0ZSkKKworICAgICAgICAgICAgIyBVcGRhdGUgYnJhbmNoIGhlYWQKKyAgICAgICAgICAgIGdpdF9jbWQgPSBbJ3VwZGF0ZS1yZWYnLCAncmVmcy9oZWFkcy8nICsgYnJhbmNoLCBjb21taXRdCisgICAgICAgICAgICBpZiBwYXJlbnQ6CisgICAgICAgICAgICAgICAgZ2l0X2NtZC5hcHBlbmQocGFyZW50KQorICAgICAgICAgICAgcmVwby5ydW5fY21kKGdpdF9jbWQpCisKKyAgICAgICAgICAgICMgVXBkYXRlIGN1cnJlbnQgSEVBRCwgaWYgd2UncmUgb24gYnJhbmNoICdicmFuY2gnCisgICAgICAgICAgICBpZiByZXBvLmdldF9jdXJyZW50X2JyYW5jaCgpID09IGJyYW5jaDoKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygiVXBkYXRpbmcgJXMgSEVBRCB0byBsYXRlc3QgY29tbWl0IiwgcmVwb19wYXRoKQorICAgICAgICAgICAgICAgIHJlcG8ucnVuX2NtZCgncmVzZXQgLS1oYXJkJykKKworICAgICAgICAgICAgIyBDcmVhdGUgKGFubm90YXRlZCkgdGFnCisgICAgICAgICAgICBpZiB0YWc6CisgICAgICAgICAgICAgICAgIyBGaW5kIHRhZ3MgbWF0Y2hpbmcgdGhlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICB0YWdfa2V5d29yZHMgPSBkaWN0KGdpdF9icmFuY2g9c2VsZi5naXRfYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2NvbW1pdD1zZWxmLmdpdF9jb21taXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXRfY29tbWl0X2NvdW50PXNlbGYuZ2l0X2NvbW1pdF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rlcl9ob3N0PXNlbGYuaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdfbnVtPSdbMC05XXsxLDV9JykKKyAgICAgICAgICAgICAgICB0YWdfcmUgPSByZS5jb21waWxlKHRhZy5mb3JtYXQoKip0YWdfa2V5d29yZHMpICsgJyQnKQorICAgICAgICAgICAgICAgIHRhZ19rZXl3b3Jkc1sndGFnX251bSddID0gMAorICAgICAgICAgICAgICAgIGZvciBleGlzdGluZ190YWcgaW4gcmVwby5ydW5fY21kKCd0YWcnKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHRhZ19yZS5tYXRjaChleGlzdGluZ190YWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFnX2tleXdvcmRzWyd0YWdfbnVtJ10gKz0gMQorCisgICAgICAgICAgICAgICAgdGFnID0gdGFnLmZvcm1hdCgqKnRhZ19rZXl3b3JkcykKKyAgICAgICAgICAgICAgICBtc2cgPSAiVGVzdCBydW4gI3t9IG9mIHt9Ont9XG4iLmZvcm1hdCh0YWdfa2V5d29yZHNbJ3RhZ19udW0nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdpdF9icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5naXRfY29tbWl0KQorICAgICAgICAgICAgICAgIHJlcG8ucnVuX2NtZChbJ3RhZycsICctYScsICctbScsIG1zZywgdGFnLCBjb21taXRdKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0bXBfaW5kZXgpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayh0bXBfaW5kZXgpCisKKworY2xhc3MgQnVpbGRQZXJmVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGJ1aWxkIHBlcmZvcm1hbmNlIHRlc3RzIiIiCisgICAgU1lTUkVTID0gJ3N5c3JlcycKKyAgICBESVNLVVNBR0UgPSAnZGlza3VzYWdlJworICAgIGJ1aWxkX3RhcmdldCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsZFBlcmZUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLl90ZXN0TWV0aG9kTmFtZQorICAgICAgICBzZWxmLmJhc2VfZGlyID0gTm9uZQorICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuZWxhcHNlZF90aW1lID0gTm9uZQorICAgICAgICBzZWxmLm1lYXN1cmVtZW50cyA9IFtdCisgICAgICAgIHNlbGYuYmJfdmFycyA9IGdldF9iYl92YXJzKCkKKyAgICAgICAgIyBUT0RPOiByZW1vdmUgJ3RpbWVzJyBhbmQgJ3NpemVzJyBhcnJheXMgd2hlbiBnbG9iYWxyZXMgc3VwcG9ydCBpcworICAgICAgICAjIHJlbW92ZWQKKyAgICAgICAgc2VsZi50aW1lcyA9IFtdCisgICAgICAgIHNlbGYuc2l6ZXMgPSBbXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG91dF9kaXIoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5iYXNlX2Rpciwgc2VsZi5uYW1lKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNtZF9sb2dfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLm91dF9kaXIsICdjb21tYW5kcy5sb2cnKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJTZXQtdXAgZml4dHVyZSBmb3IgZWFjaCB0ZXN0IiIiCisgICAgICAgIGlmIHNlbGYuYnVpbGRfdGFyZ2V0OgorICAgICAgICAgICAgc2VsZi5sb2dfY21kX291dHB1dChbJ2JpdGJha2UnLCBzZWxmLmJ1aWxkX3RhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsICdmZXRjaGFsbCddKQorCisgICAgZGVmIHJ1bihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJSdW4gdGVzdCIiIgorICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBkYXRldGltZS5ub3coKQorICAgICAgICBzdXBlcihCdWlsZFBlcmZUZXN0Q2FzZSwgc2VsZikucnVuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5lbGFwc2VkX3RpbWUgPSBkYXRldGltZS5ub3coKSAtIHNlbGYuc3RhcnRfdGltZQorCisgICAgZGVmIGxvZ19jbWRfb3V0cHV0KHNlbGYsIGNtZCk6CisgICAgICAgICIiIlJ1biBhIGNvbW1hbmQgYW5kIGxvZyBpdCdzIG91dHB1dCIiIgorICAgICAgICBjbWRfc3RyID0gY21kIGlmIGlzaW5zdGFuY2UoY21kLCBzdHIpIGVsc2UgJyAnLmpvaW4oY21kKQorICAgICAgICBsb2cuaW5mbygiTG9nZ2luZyBjb21tYW5kOiAlcyIsIGNtZF9zdHIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmNtZF9sb2dfZmlsZSwgJ2EnKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIHJ1bkNtZDIoY21kLCBzdGRvdXQ9Zm9iaikKKyAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBsb2cuZXJyb3IoIkNvbW1hbmQgZmFpbGVkOiAlcyIsIGVyci5yZXRjb2RlKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBtZWFzdXJlX2NtZF9yZXNvdXJjZXMoc2VsZiwgY21kLCBuYW1lLCBsZWdlbmQsIHNhdmVfYnM9RmFsc2UpOgorICAgICAgICAiIiJNZWFzdXJlIHN5c3RlbSByZXNvdXJjZSB1c2FnZSBvZiBhIGNvbW1hbmQiIiIKKyAgICAgICAgZGVmIF93b3JrZXIoZGF0YV9xLCBjbWQsICoqa3dhcmdzKToKKyAgICAgICAgICAgICIiIldvcmtlciBwcm9jZXNzIGZvciBtZWFzdXJpbmcgcmVzb3VyY2VzIiIiCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgICAgICAgICAgcmV0ID0gcnVuQ21kMihjbWQsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIGV0aW1lID0gZGF0ZXRpbWUubm93KCkgLSBzdGFydF90aW1lCisgICAgICAgICAgICAgICAgcnVzYWdlX3N0cnVjdCA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfQ0hJTERSRU4pCisgICAgICAgICAgICAgICAgaW9zdGF0ID0ge30KKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oJy9wcm9jL3t9L2lvJy5mb3JtYXQob3MuZ2V0cGlkKCkpKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmb2JqLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWwgPSBsaW5lLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlvc3RhdFtrZXldID0gaW50KHZhbCkKKyAgICAgICAgICAgICAgICBydXNhZ2UgPSB7fQorICAgICAgICAgICAgICAgICMgU2tpcCB1bnVzZWQgZmllbGRzLCAoaS5lLiAncnVfaXhyc3MnLCAncnVfaWRyc3MnLCAncnVfaXNyc3MnLAorICAgICAgICAgICAgICAgICMgJ3J1X25zd2FwJywgJ3J1X21zZ3NuZCcsICdydV9tc2dyY3YnIGFuZCAncnVfbnNpZ25hbHMnKQorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gWydydV91dGltZScsICdydV9zdGltZScsICdydV9tYXhyc3MnLCAncnVfbWluZmx0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfbWFqZmx0JywgJ3J1X2luYmxvY2snLCAncnVfb3VibG9jaycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X252Y3N3JywgJ3J1X25pdmNzdyddOgorICAgICAgICAgICAgICAgICAgICBydXNhZ2Vba2V5XSA9IGdldGF0dHIocnVzYWdlX3N0cnVjdCwga2V5KQorICAgICAgICAgICAgICAgIGRhdGFfcS5wdXQoeydyZXQnOiByZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0X3RpbWUnOiBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiBldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVzYWdlJzogcnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpb3N0YXQnOiBpb3N0YXR9KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICAgICAgZGF0YV9xLnB1dChlcnIpCisKKyAgICAgICAgY21kX3N0ciA9IGNtZCBpZiBpc2luc3RhbmNlKGNtZCwgc3RyKSBlbHNlICcgJy5qb2luKGNtZCkKKyAgICAgICAgbG9nLmluZm8oIlRpbWluZyBjb21tYW5kOiAlcyIsIGNtZF9zdHIpCisgICAgICAgIGRhdGFfcSA9IFNpbXBsZVF1ZXVlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY21kX2xvZ19maWxlLCAnYScpIGFzIGZvYmo6CisgICAgICAgICAgICAgICAgcHJvYyA9IFByb2Nlc3ModGFyZ2V0PV93b3JrZXIsIGFyZ3M9KGRhdGFfcSwgY21kLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzPXsnc3Rkb3V0JzogZm9ian0pCisgICAgICAgICAgICAgICAgcHJvYy5zdGFydCgpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFfcS5nZXQoKQorICAgICAgICAgICAgICAgIHByb2Muam9pbigpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcmFpc2UgZGF0YQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgbG9nLmVycm9yKCJDb21tYW5kICclcycgZmFpbGVkLCBzZWUgJXMgZm9yIG1vcmUgZGV0YWlscyIsIGNtZF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbWRfbG9nX2ZpbGUpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBldGltZSA9IGRhdGFbJ2VsYXBzZWRfdGltZSddCisKKyAgICAgICAgbWVhc3VyZW1lbnQgPSB7J3R5cGUnOiBzZWxmLlNZU1JFUywKKyAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAnbGVnZW5kJzogbGVnZW5kfQorICAgICAgICBtZWFzdXJlbWVudFsndmFsdWVzJ10gPSB7J3N0YXJ0X3RpbWUnOiBkYXRhWydzdGFydF90aW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVzYWdlJzogZGF0YVsncnVzYWdlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW9zdGF0JzogZGF0YVsnaW9zdGF0J119CisgICAgICAgIGlmIHNhdmVfYnM6CisgICAgICAgICAgICBic19maWxlID0gc2VsZi5zYXZlX2J1aWxkc3RhdHMobGVnZW5kKQorICAgICAgICAgICAgbWVhc3VyZW1lbnRbJ3ZhbHVlcyddWydidWlsZHN0YXRzX2ZpbGUnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5yZWxwYXRoKGJzX2ZpbGUsIHNlbGYuYmFzZV9kaXIpCisKKyAgICAgICAgc2VsZi5tZWFzdXJlbWVudHMuYXBwZW5kKG1lYXN1cmVtZW50KQorCisgICAgICAgICMgQXBwZW5kIHRvICd0aW1lcycgYXJyYXkgZm9yIGdsb2JhbHJlcyBsb2cKKyAgICAgICAgZV9zZWMgPSBldGltZS50b3RhbF9zZWNvbmRzKCkKKyAgICAgICAgc2VsZi50aW1lcy5hcHBlbmQoJ3s6ZH06ezowMmR9Ons6MDUuMmZ9Jy5mb3JtYXQoaW50KGVfc2VjIC8gMzYwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoKGVfc2VjICUgMzYwMCkgLyA2MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV9zZWMgJSA2MCkpCisKKyAgICBkZWYgbWVhc3VyZV9kaXNrX3VzYWdlKHNlbGYsIHBhdGgsIG5hbWUsIGxlZ2VuZCwgYXBwYXJlbnRfc2l6ZT1GYWxzZSk6CisgICAgICAgICIiIkVzdGltYXRlIGRpc2sgdXNhZ2Ugb2YgYSBmaWxlIG9yIGRpcmVjdG9yeSIiIgorICAgICAgICBjbWQgPSBbJ2R1JywgJy1zJywgJy0tYmxvY2stc2l6ZScsICcxMDI0J10KKyAgICAgICAgaWYgYXBwYXJlbnRfc2l6ZToKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tYXBwYXJlbnQtc2l6ZScpCisgICAgICAgIGNtZC5hcHBlbmQocGF0aCkKKworICAgICAgICByZXQgPSBydW5DbWQyKGNtZCkKKyAgICAgICAgc2l6ZSA9IGludChyZXQub3V0cHV0LnNwbGl0KClbMF0pCisgICAgICAgIGxvZy5kZWJ1ZygiU2l6ZSBvZiAlcyBwYXRoIGlzICVzIiwgcGF0aCwgc2l6ZSkKKyAgICAgICAgbWVhc3VyZW1lbnQgPSB7J3R5cGUnOiBzZWxmLkRJU0tVU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAnbGVnZW5kJzogbGVnZW5kfQorICAgICAgICBtZWFzdXJlbWVudFsndmFsdWVzJ10gPSB7J3NpemUnOiBzaXplfQorICAgICAgICBzZWxmLm1lYXN1cmVtZW50cy5hcHBlbmQobWVhc3VyZW1lbnQpCisgICAgICAgICMgQXBwZW5kIHRvICdzaXplcycgYXJyYXkgZm9yIGdsb2JhbHJlcyBsb2cKKyAgICAgICAgc2VsZi5zaXplcy5hcHBlbmQoc3RyKHNpemUpKQorCisgICAgZGVmIHNhdmVfYnVpbGRzdGF0cyhzZWxmLCBsYWJlbD1Ob25lKToKKyAgICAgICAgIiIiU2F2ZSBidWlsZHN0YXRzIiIiCisgICAgICAgIGRlZiBzcGxpdF9uZXZyKG5ldnIpOgorICAgICAgICAgICAgIiIiU3BsaXQgbmFtZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHJlY2lwZSAibmV2ciIgc3RyaW5nIiIiCisgICAgICAgICAgICBuX2VfdiwgcmV2aXNpb24gPSBuZXZyLnJzcGxpdCgnLScsIDEpCisgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInXig/UDxuYW1lPlxTKyktKCg/UDxlcG9jaD5bMC05XXsxLDV9KV8pPyg/UDx2ZXJzaW9uPlswLTldXFMqKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2VfdikKKyAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIG5vdCBhYmxlIHRvIHBhcnNlIGEgdmVyc2lvbiBzdGFydGluZyB3aXRoIGEgbnVtYmVyLCBqdXN0CisgICAgICAgICAgICAgICAgIyB0YWtlIHRoZSBwYXJ0IGFmdGVyIGxhc3QgZGFzaAorICAgICAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocideKD9QPG5hbWU+XFMrKS0oKD9QPGVwb2NoPlswLTldezEsNX0pXyk/KD9QPHZlcnNpb24+W14tXSspJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2VfdikKKyAgICAgICAgICAgIG5hbWUgPSBtYXRjaC5ncm91cCgnbmFtZScpCisgICAgICAgICAgICB2ZXJzaW9uID0gbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKQorICAgICAgICAgICAgZXBvY2ggPSBtYXRjaC5ncm91cCgnZXBvY2gnKQorICAgICAgICAgICAgcmV0dXJuIG5hbWUsIGVwb2NoLCB2ZXJzaW9uLCByZXZpc2lvbgorCisgICAgICAgIGRlZiBic190b19qc29uKGZpbGVuYW1lKToKKyAgICAgICAgICAgICIiIkNvbnZlcnQgKHRhc2spIGJ1aWxkc3RhdHMgZmlsZSBpbnRvIGpzb24gZm9ybWF0IiIiCisgICAgICAgICAgICBic19qc29uID0geydpb3N0YXQnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ3J1c2FnZSc6IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAnY2hpbGRfcnVzYWdlJzoge319CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZvYmo6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZm9iai5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAga2V5LCB2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSkKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICdTdGFydGVkJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGZsb2F0KHZhbCkpCisgICAgICAgICAgICAgICAgICAgICAgICBic19qc29uWydzdGFydF90aW1lJ10gPSBzdGFydF90aW1lCisgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdFbmRlZCc6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGltZSA9IGRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoZmxvYXQodmFsKSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuc3RhcnRzd2l0aCgnSU8gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IGtleS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBic19qc29uWydpb3N0YXQnXVtzcGxpdFsxXV0gPSBpbnQodmFsKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGtleS5maW5kKCdydXNhZ2UnKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBrZXkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcnVfa2V5ID0gc3BsaXRbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBydV9rZXkgaW4gKCdydV9zdGltZScsICdydV91dGltZScpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGZsb2F0KHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gaW50KHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1X3R5cGUgPSAncnVzYWdlJyBpZiBzcGxpdFswXSA9PSAncnVzYWdlJyBlbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hpbGRfcnVzYWdlJworICAgICAgICAgICAgICAgICAgICAgICAgYnNfanNvbltydV90eXBlXVtydV9rZXldID0gdmFsCisgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdTdGF0dXMnOgorICAgICAgICAgICAgICAgICAgICAgICAgYnNfanNvblsnc3RhdHVzJ10gPSB2YWwKKyAgICAgICAgICAgIGJzX2pzb25bJ2VsYXBzZWRfdGltZSddID0gZW5kX3RpbWUgLSBzdGFydF90aW1lCisgICAgICAgICAgICByZXR1cm4gYnNfanNvbgorCisgICAgICAgIGxvZy5pbmZvKCdTYXZpbmcgYnVpbGRzdGF0cyBpbiBKU09OIGZvcm1hdCcpCisgICAgICAgIGJzX2RpcnMgPSBzb3J0ZWQob3MubGlzdGRpcihzZWxmLmJiX3ZhcnNbJ0JVSUxEU1RBVFNfQkFTRSddKSkKKyAgICAgICAgaWYgbGVuKGJzX2RpcnMpID4gMToKKyAgICAgICAgICAgIGxvZy53YXJuaW5nKCJNdWx0aXBsZSBidWlsZHN0YXRzIGZvdW5kIGZvciB0ZXN0ICVzLCBvbmx5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcmNoaXZpbmcgdGhlIGxhc3Qgb25lIiwgc2VsZi5uYW1lKQorICAgICAgICBic19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5iYl92YXJzWydCVUlMRFNUQVRTX0JBU0UnXSwgYnNfZGlyc1stMV0pCisKKyAgICAgICAgYnVpbGRzdGF0cyA9IFtdCisgICAgICAgIGZvciBmbmFtZSBpbiBvcy5saXN0ZGlyKGJzX2Rpcik6CisgICAgICAgICAgICByZWNpcGVfZGlyID0gb3MucGF0aC5qb2luKGJzX2RpciwgZm5hbWUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihyZWNpcGVfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbmFtZSwgZXBvY2gsIHZlcnNpb24sIHJldmlzaW9uID0gc3BsaXRfbmV2cihmbmFtZSkKKyAgICAgICAgICAgIHJlY2lwZV9icyA9IHsnbmFtZSc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vwb2NoJzogZXBvY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbic6IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0YXNrcyc6IHt9fQorICAgICAgICAgICAgZm9yIHRhc2sgaW4gb3MubGlzdGRpcihyZWNpcGVfZGlyKToKKyAgICAgICAgICAgICAgICByZWNpcGVfYnNbJ3Rhc2tzJ11bdGFza10gPSBic190b19qc29uKG9zLnBhdGguam9pbihyZWNpcGVfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2spKQorICAgICAgICAgICAgYnVpbGRzdGF0cy5hcHBlbmQocmVjaXBlX2JzKQorCisgICAgICAgICMgV3JpdGUgYnVpbGRzdGF0cyBpbnRvIGpzb24gZmlsZQorICAgICAgICBwb3N0Zml4ID0gJy4nICsgc3RyX3RvX2ZuKGxhYmVsKSBpZiBsYWJlbCBlbHNlICcnCisgICAgICAgIHBvc3RmaXggKz0gJy5qc29uJworICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5qb2luKHNlbGYub3V0X2RpciwgJ2J1aWxkc3RhdHMnICsgcG9zdGZpeCkKKyAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICd3JykgYXMgZm9iajoKKyAgICAgICAgICAgIGpzb24uZHVtcChidWlsZHN0YXRzLCBmb2JqLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgY2xzPVJlc3VsdHNKc29uRW5jb2RlcikKKyAgICAgICAgcmV0dXJuIG91dGZpbGUKKworICAgIGRlZiBybV90bXAoc2VsZik6CisgICAgICAgICIiIkNsZWFudXAgdGVtcG9yYXJ5L2ludGVybWVkaWF0ZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMiIiIKKyAgICAgICAgbG9nLmRlYnVnKCJSZW1vdmluZyB0ZW1wb3JhcnkgYW5kIGNhY2hlIGZpbGVzIikKKyAgICAgICAgZm9yIG5hbWUgaW4gWydiaXRiYWtlLmxvY2snLCAnY29uZi9zYW5pdHlfaW5mbycsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiX3ZhcnNbJ1RNUERJUiddXToKKyAgICAgICAgICAgIG9lLnBhdGgucmVtb3ZlKG5hbWUsIHJlY3Vyc2U9VHJ1ZSkKKworICAgIGRlZiBybV9zc3RhdGUoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBzc3RhdGUgZGlyZWN0b3J5IiIiCisgICAgICAgIGxvZy5kZWJ1ZygiUmVtb3Zpbmcgc3N0YXRlLWNhY2hlIikKKyAgICAgICAgb2UucGF0aC5yZW1vdmUoc2VsZi5iYl92YXJzWydTU1RBVEVfRElSJ10sIHJlY3Vyc2U9VHJ1ZSkKKworICAgIGRlZiBybV9jYWNoZShzZWxmKToKKyAgICAgICAgIiIiRHJvcCBiaXRiYWtlIGNhY2hlcyIiIgorICAgICAgICBvZS5wYXRoLnJlbW92ZShzZWxmLmJiX3ZhcnNbJ1BFUlNJU1RFTlRfRElSJ10sIHJlY3Vyc2U9VHJ1ZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3luYygpOgorICAgICAgICAiIiJTeW5jIGFuZCBkcm9wIGtlcm5lbCBjYWNoZXMiIiIKKyAgICAgICAgbG9nLmRlYnVnKCJTeW5jaW5nIGFuZCBkcm9wcGluZyBrZXJuZWwgY2FjaGVzIiIiKQorICAgICAgICBLZXJuZWxEcm9wQ2FjaGVzLmRyb3AoKQorICAgICAgICBvcy5zeW5jKCkKKyAgICAgICAgIyBXYWl0IGEgYml0IGZvciBhbGwgdGhlIGRpcnR5IGJsb2NrcyB0byBiZSB3cml0dGVuIG9udG8gZGlzaworICAgICAgICB0aW1lLnNsZWVwKDMpCisKKworY2xhc3MgQnVpbGRQZXJmVGVzdExvYWRlcih1bml0dGVzdC5UZXN0TG9hZGVyKToKKyAgICAiIiJUZXN0IGxvYWRlciBmb3IgYnVpbGQgcGVyZm9ybWFuY2UgdGVzdHMiIiIKKyAgICBzb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKworCitjbGFzcyBCdWlsZFBlcmZUZXN0UnVubmVyKHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKToKKyAgICAiIiJUZXN0IGxvYWRlciBmb3IgYnVpbGQgcGVyZm9ybWFuY2UgdGVzdHMiIiIKKyAgICBzb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRfZGlyLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihCdWlsZFBlcmZUZXN0UnVubmVyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYub3V0X2RpciA9IG91dF9kaXIKKworICAgIGRlZiBfbWFrZVJlc3VsdChzZWxmKToKKyAgICAgICByZXR1cm4gQnVpbGRQZXJmVGVzdFJlc3VsdChzZWxmLm91dF9kaXIsIHNlbGYuc3RyZWFtLCBzZWxmLmRlc2NyaXB0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi90ZXN0X2Jhc2ljLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvYnVpbGRwZXJmL3Rlc3RfYmFzaWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0OGMxZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi90ZXN0X2Jhc2ljLnB5CkBAIC0wLDAgKzEsMTI3IEBACisjIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyMgbW9yZSBkZXRhaWxzLgorIworIiIiQmFzaWMgc2V0IG9mIGJ1aWxkIHBlcmZvcm1hbmNlIHRlc3RzIiIiCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lLnBhdGgKK2Zyb20gb2VxYS5idWlsZHBlcmYgaW1wb3J0IEJ1aWxkUGVyZlRlc3RDYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGdldF9iYl92YXJzCisKKworY2xhc3MgVGVzdDFQMShCdWlsZFBlcmZUZXN0Q2FzZSk6CisgICAgYnVpbGRfdGFyZ2V0ID0gJ2NvcmUtaW1hZ2Utc2F0bycKKworICAgIGRlZiB0ZXN0MShzZWxmKToKKyAgICAgICAgIiIiTWVhc3VyZSB3YWxsIGNsb2NrIG9mIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIGFuZCBzaXplIG9mIHRtcCBkaXIiIiIKKyAgICAgICAgc2VsZi5ybV90bXAoKQorICAgICAgICBzZWxmLnJtX3NzdGF0ZSgpCisgICAgICAgIHNlbGYucm1fY2FjaGUoKQorICAgICAgICBzZWxmLnN5bmMoKQorICAgICAgICBzZWxmLm1lYXN1cmVfY21kX3Jlc291cmNlcyhbJ2JpdGJha2UnLCBzZWxmLmJ1aWxkX3RhcmdldF0sICdidWlsZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlICcgKyBzZWxmLmJ1aWxkX3RhcmdldCwgc2F2ZV9icz1UcnVlKQorICAgICAgICBzZWxmLm1lYXN1cmVfZGlza191c2FnZShzZWxmLmJiX3ZhcnNbJ1RNUERJUiddLCAndG1wZGlyJywgJ3RtcGRpcicpCisKKworY2xhc3MgVGVzdDFQMihCdWlsZFBlcmZUZXN0Q2FzZSk6CisgICAgYnVpbGRfdGFyZ2V0ID0gJ3ZpcnR1YWwva2VybmVsJworCisgICAgZGVmIHRlc3QxMihzZWxmKToKKyAgICAgICAgIiIiTWVhc3VyZSBiaXRiYWtlIHZpcnR1YWwva2VybmVsIiIiCisgICAgICAgICMgQnVpbGQgYW5kIGNsZWFucyBzdGF0ZSBpbiBvcmRlciB0byBnZXQgYWxsIGRlcGVuZGVuY2llcyBwcmUtYnVpbHQKKyAgICAgICAgc2VsZi5sb2dfY21kX291dHB1dChbJ2JpdGJha2UnLCBzZWxmLmJ1aWxkX3RhcmdldF0pCisgICAgICAgIHNlbGYubG9nX2NtZF9vdXRwdXQoWydiaXRiYWtlJywgc2VsZi5idWlsZF90YXJnZXQsICctYycsICdjbGVhbnNzdGF0ZSddKQorCisgICAgICAgIHNlbGYuc3luYygpCisgICAgICAgIHNlbGYubWVhc3VyZV9jbWRfcmVzb3VyY2VzKFsnYml0YmFrZScsIHNlbGYuYnVpbGRfdGFyZ2V0XSwgJ2J1aWxkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgJyArIHNlbGYuYnVpbGRfdGFyZ2V0KQorCisKK2NsYXNzIFRlc3QxUDMoQnVpbGRQZXJmVGVzdENhc2UpOgorICAgIGJ1aWxkX3RhcmdldCA9ICdjb3JlLWltYWdlLXNhdG8nCisKKyAgICBkZWYgdGVzdDEzKHNlbGYpOgorICAgICAgICAiIiJCdWlsZCBjb3JlLWltYWdlLXNhdG8gd2l0aCBybV93b3JrIGVuYWJsZWQiIiIKKyAgICAgICAgcG9zdGZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZGlyLCAncG9zdGZpbGUuY29uZicpCisgICAgICAgIHdpdGggb3Blbihwb3N0ZmlsZSwgJ3cnKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZSgnSU5IRVJJVCArPSAicm1fd29yayJcbicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucm1fdG1wKCkKKyAgICAgICAgICAgIHNlbGYucm1fc3N0YXRlKCkKKyAgICAgICAgICAgIHNlbGYucm1fY2FjaGUoKQorICAgICAgICAgICAgc2VsZi5zeW5jKCkKKyAgICAgICAgICAgIGNtZCA9IFsnYml0YmFrZScsICctUicsIHBvc3RmaWxlLCBzZWxmLmJ1aWxkX3RhcmdldF0KKyAgICAgICAgICAgIHNlbGYubWVhc3VyZV9jbWRfcmVzb3VyY2VzKGNtZCwgJ2J1aWxkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlJyArIHNlbGYuYnVpbGRfdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9icz1UcnVlKQorICAgICAgICAgICAgc2VsZi5tZWFzdXJlX2Rpc2tfdXNhZ2Uoc2VsZi5iYl92YXJzWydUTVBESVInXSwgJ3RtcGRpcicsICd0bXBkaXInKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKHBvc3RmaWxlKQorCisKK2NsYXNzIFRlc3QyKEJ1aWxkUGVyZlRlc3RDYXNlKToKKyAgICBidWlsZF90YXJnZXQgPSAnY29yZS1pbWFnZS1zYXRvJworCisgICAgZGVmIHRlc3QyKHNlbGYpOgorICAgICAgICAiIiJNZWFzdXJlIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHJvb3RmcyB3aXRoIHNzdGF0ZSIiIgorICAgICAgICAjIEJ1aWxkIG9uY2UgaW4gb3JkZXIgdG8gcG9wdWxhdGUgc3N0YXRlIGNhY2hlCisgICAgICAgIHNlbGYubG9nX2NtZF9vdXRwdXQoWydiaXRiYWtlJywgc2VsZi5idWlsZF90YXJnZXRdKQorCisgICAgICAgIHNlbGYucm1fdG1wKCkKKyAgICAgICAgc2VsZi5ybV9jYWNoZSgpCisgICAgICAgIHNlbGYuc3luYygpCisgICAgICAgIGNtZCA9IFsnYml0YmFrZScsIHNlbGYuYnVpbGRfdGFyZ2V0LCAnLWMnLCAncm9vdGZzJ10KKyAgICAgICAgc2VsZi5tZWFzdXJlX2NtZF9yZXNvdXJjZXMoY21kLCAnZG9fcm9vdGZzJywgJ2JpdGJha2UgZG9fcm9vdGZzJykKKworCitjbGFzcyBUZXN0MyhCdWlsZFBlcmZUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdDMoc2VsZik6CisgICAgICAgICIiIlBhcnNpbmcgdGltZSBtZXRyaWNzIChiaXRiYWtlIC1wKSIiIgorICAgICAgICAjIERyb3AgYWxsIGNhY2hlcyBhbmQgcGFyc2UKKyAgICAgICAgc2VsZi5ybV9jYWNoZSgpCisgICAgICAgIG9lLnBhdGgucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLmJiX3ZhcnNbJ1RNUERJUiddLCAnY2FjaGUnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5tZWFzdXJlX2NtZF9yZXNvdXJjZXMoWydiaXRiYWtlJywgJy1wJ10sICdwYXJzZV8xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgLXAgKG5vIGNhY2hlcyknKQorICAgICAgICAjIERyb3AgdG1wL2NhY2hlCisgICAgICAgIG9lLnBhdGgucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLmJiX3ZhcnNbJ1RNUERJUiddLCAnY2FjaGUnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5tZWFzdXJlX2NtZF9yZXNvdXJjZXMoWydiaXRiYWtlJywgJy1wJ10sICdwYXJzZV8yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgLXAgKG5vIHRtcC9jYWNoZSknKQorICAgICAgICAjIFBhcnNlIHdpdGggZnVsbHkgY2FjaGVkIGRhdGEKKyAgICAgICAgc2VsZi5tZWFzdXJlX2NtZF9yZXNvdXJjZXMoWydiaXRiYWtlJywgJy1wJ10sICdwYXJzZV8zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgLXAgKGNhY2hlZCknKQorCisKK2NsYXNzIFRlc3Q0KEJ1aWxkUGVyZlRlc3RDYXNlKToKKyAgICBidWlsZF90YXJnZXQgPSAnY29yZS1pbWFnZS1zYXRvJworCisgICAgZGVmIHRlc3Q0KHNlbGYpOgorICAgICAgICAiIiJlU0RLIG1ldHJpY3MiIiIKKyAgICAgICAgc2VsZi5sb2dfY21kX291dHB1dCgiYml0YmFrZSB7fSAtYyBkb19wb3B1bGF0ZV9zZGtfZXh0Ii5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3RhcmdldCkpCisgICAgICAgIHNlbGYuYmJfdmFycyA9IGdldF9iYl92YXJzKE5vbmUsIHNlbGYuYnVpbGRfdGFyZ2V0KQorICAgICAgICB0bXBfZGlyID0gc2VsZi5iYl92YXJzWydUTVBESVInXQorICAgICAgICBpbnN0YWxsZXIgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICBzZWxmLmJiX3ZhcnNbJ1NES19ERVBMT1knXSwKKyAgICAgICAgICAgIHNlbGYuYmJfdmFyc1snVE9PTENIQUlORVhUX09VVFBVVE5BTUUnXSArICcuc2gnKQorICAgICAgICAjIE1lYXN1cmUgaW5zdGFsbGVyIHNpemUKKyAgICAgICAgc2VsZi5tZWFzdXJlX2Rpc2tfdXNhZ2UoaW5zdGFsbGVyLCAnaW5zdGFsbGVyX2JpbicsICdlU0RLIGluc3RhbGxlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGFyZW50X3NpemU9VHJ1ZSkKKyAgICAgICAgIyBNZWFzdXJlIGRlcGxveW1lbnQgdGltZSBhbmQgZGVwbG95ZWQgc2l6ZQorICAgICAgICBkZXBsb3lfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdlc2RrLWRlcGxveScpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlcGxveV9kaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkZXBsb3lfZGlyKQorICAgICAgICBzZWxmLnN5bmMoKQorICAgICAgICBzZWxmLm1lYXN1cmVfY21kX3Jlc291cmNlcyhbaW5zdGFsbGVyLCAnLXknLCAnLWQnLCBkZXBsb3lfZGlyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcGxveScsICdlU0RLIGRlcGxveScpCisgICAgICAgIHNlbGYubWVhc3VyZV9kaXNrX3VzYWdlKGRlcGxveV9kaXIsICdkZXBsb3lfZGlyJywgJ2RlcGxveSBkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBhcmVudF9zaXplPVRydWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9tYXN0ZXJpbWFnZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5CmluZGV4IDUyMmY5ZWIuLjljZTNiZjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5CkBAIC0yNCw5ICsyNCw3IEBACiAKIGZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAogCi1jbGFzcyBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KG9lcWEudGFyZ2V0Y29udHJvbC5CYXNlVGFyZ2V0KToKLQotICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCitjbGFzcyBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KG9lcWEudGFyZ2V0Y29udHJvbC5CYXNlVGFyZ2V0LCBtZXRhY2xhc3M9QUJDTWV0YSk6CiAKICAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFsndGFyLmd6JywgJ3Rhci5iejInXQogCkBAIC0xOTksMyArMTk3LDQzIEBACiAgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCiAgICAgICAgICMgdGhlcmUgYXJlIGJldHRlciB3YXlzIHRoYW4gYSB0aW1lb3V0IGJ1dCB0aGlzIHNob3VsZCB3b3JrIGZvciBub3cKICAgICAgICAgdGltZS5zbGVlcCgxMjApCisKKworY2xhc3MgU3lzdGVtZGJvb3RUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKFN5c3RlbWRib290VGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICAjIHRoaXMgdGhlIHZhbHVlIHdlIG5lZWQgdG8gc2V0IGluIHRoZSBMb2FkZXJFbnRyeU9uZVNob3QgRUZJIHZhcmlhYmxlCisgICAgICAgICMgc28gdGhlIHN5c3RlbSBib290cyB0aGUgJ3Rlc3QnIGJvb3Rsb2FkZXIgbGFiZWwgYW5kIG5vdCB0aGUgZGVmYXVsdAorICAgICAgICAjIFRoZSBmaXJzdCBmb3VyIGJ5dGVzIGFyZSBFRkkgYml0cywgYW5kIHRoZSByZXN0IGlzIGFuIHV0Zi0xNmxlIHN0cmluZworICAgICAgICAjIChFRkkgdmFycyB2YWx1ZXMgbmVlZCB0byBiZSB1dGYtMTYpCisgICAgICAgICMgJCBlY2hvIC1lbiAidGVzdFwwIiB8IGljb252IC1mIGFzY2lpIC10IHV0Zi0xNmxlIHwgaGV4ZHVtcCAtQworICAgICAgICAjIDAwMDAwMDAwICA3NCAwMCA2NSAwMCA3MyAwMCA3NCAwMCAgMDAgMDAgICAgICAgICAgICAgICAgICAgIHx0LmUucy50Li4ufAorICAgICAgICBzZWxmLmVmaXZhcnZhbHVlID0gcidceDA3XHgwMFx4MDBceDAwXHg3NFx4MDBceDY1XHgwMFx4NzNceDAwXHg3NFx4MDBceDAwXHgwMCcKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IFsKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgYm9vdCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW9kcHJvYmUgZWZpdmFyZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtdCBlZml2YXJmcyBlZml2YXJmcyAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzJywKKyAgICAgICAgICAgICAgICAnY3Agfi90ZXN0LWtlcm5lbCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgJ3ByaW50ZiAiJXMiID4gL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFycy9Mb2FkZXJFbnRyeU9uZVNob3QtNGE2N2IwODItMGE0Yy00MWNmLWI2YzctNDQwYjI5YmI4YzRmJyAlIHNlbGYuZWZpdmFydmFsdWUKKyAgICAgICAgICAgICAgICBdCisKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IG1vdW50ZWQKKyAgICAgICAgc2VsZi5tYXN0ZXIucnVuKCJ1bW91bnQgL2Jvb3Q7IHVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IHVtb3VudCAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzOyIpCisgICAgICAgICMgZnJvbSBub3cgb24sIGV2ZXJ5IGRlcGxveSBjbWQgc2hvdWxkIHJldHVybiAwCisgICAgICAgICMgZWxzZSBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gYnkgc3NoY29udHJvbAorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuIiArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgIyB0aGVyZSBhcmUgYmV0dGVyIHdheXMgdGhhbiBhIHRpbWVvdXQgYnV0IHRoaXMgc2hvdWxkIHdvcmsgZm9yIG5vdworICAgICAgICB0aW1lLnNsZWVwKDEyMCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL29ldGVzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL29ldGVzdC5weQppbmRleCAzZWQ1YmI4Li45NWQzYmY3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvb2V0ZXN0LnB5CkBAIC0xMiw2ICsxMiw4IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzaWduYWwKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBmdW5jdG9vbHMKIHRyeToKICAgICBpbXBvcnQgYmIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTU0LDE4ICs1NiwyOSBAQAogQExvZ1Jlc3VsdHMKIGNsYXNzIG9lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBwc2NtZCA9ICJwcyIKICAgICBsb25nTWVzc2FnZSA9IFRydWUKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBoYXNQYWNrYWdlKHNlbGYsIHBrZyk6Ci0gICAgICAgIGZvciBpdGVtIGluIG9lVGVzdC50Yy5wa2dtYW5pZmVzdC5zcGxpdCgnXG4nKToKLSAgICAgICAgICAgIGlmIHJlLm1hdGNoKHBrZywgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBUcnVlIGlmIHRoZSBmdWxsIHBhY2thZ2UgbmFtZSBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gcGtnIGluIG9lVGVzdC50Yy5wa2dtYW5pZmVzdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhc1BhY2thZ2VNYXRjaChzZWxmLCBtYXRjaCk6CisgICAgICAgICIiIgorICAgICAgICBUcnVlIGlmIG1hdGNoIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gc3Vic3RyaW5nLAorICAgICAgICBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgICIiIgorICAgICAgICBmb3IgcyBpbiBvZVRlc3QudGMucGtnbWFuaWZlc3Q6CisgICAgICAgICAgICBpZiByZS5tYXRjaChtYXRjaCwgcyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgaGFzRmVhdHVyZShzZWxmLGZlYXR1cmUpOgotCiAgICAgICAgIGlmIGZlYXR1cmUgaW4gb2VUZXN0LnRjLmltYWdlZmVhdHVyZXMgb3IgXAogICAgICAgICAgICAgICAgIGZlYXR1cmUgaW4gb2VUZXN0LnRjLmRpc3Ryb2ZlYXR1cmVzOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTc4LDYgKzkxLDkgQEAKICAgICAgICAgc3VwZXIob2VSdW50aW1lVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBJbnN0YWxsIHBhY2thZ2VzIGluIHRoZSBEVVQKKyAgICAgICAgc2VsZi50Yy5pbnN0YWxsX3VuaW5zdGFsbF9wYWNrYWdlcyhzZWxmLmlkKCkpCisKICAgICAgICAgIyBDaGVjayBpZiB0ZXN0IG5lZWRzIHRvIHJ1bgogICAgICAgICBpZiBzZWxmLnRjLnNpZ3Rlcm06CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkdvdCBTSUdURVJNIikKQEAgLTkxLDYgKzEwNyw5IEBACiAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBVbmlzdGFsbCBwYWNrYWdlcyBpbiB0aGUgRFVUCisgICAgICAgIHNlbGYudGMuaW5zdGFsbF91bmluc3RhbGxfcGFja2FnZXMoc2VsZi5pZCgpLCBGYWxzZSkKKwogICAgICAgICByZXMgPSBnZXRSZXN1bHRzKCkKICAgICAgICAgIyBJZiBhIHRlc3QgZmFpbHMgb3IgdGhlcmUgaXMgYW4gZXhjZXB0aW9uIGR1bXAKICAgICAgICAgIyBmb3IgUWVtdVRhcmdldCBvbmx5CkBAIC0xMTcsNiArMTM2LDE1IEBACiAgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzCiAKK2NsYXNzIE9FVGVzdENhbGxlZFByb2Nlc3NFcnJvcihzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgInN0ZGVyciIpOgorICAgICAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQgd2l0aCBvdXRwdXQgJXMgYW5kIHN0ZGVyciAlcyIgJSAoc2VsZi5jbWQsIHNlbGYucmV0dXJuY29kZSwgc2VsZi5vdXRwdXQsIHNlbGYuc3RkZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQgd2l0aCBvdXRwdXQgJXMiICUgKHNlbGYuY21kLCBzZWxmLnJldHVybmNvZGUsIHNlbGYub3V0cHV0KQorCitzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciA9IE9FVGVzdENhbGxlZFByb2Nlc3NFcnJvcgorCiBjbGFzcyBvZVNES1Rlc3Qob2VUZXN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgogICAgICAgICBzZWxmLnNka3Rlc3RkaXIgPSBvZVNES1Rlc3QudGMuc2RrdGVzdGRpcgpAQCAtMTI0LDEzICsxNTIsMTIgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBoYXNIb3N0UGFja2FnZShzZWxmLCBwa2cpOgotCiAgICAgICAgIGlmIHJlLnNlYXJjaChwa2csIG9lVGVzdC50Yy5ob3N0cGtnbWFuaWZlc3QpOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgotICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoIi4gJXMgPiAvZGV2L251bGw7ICVzOyIgJSAoc2VsZi50Yy5zZGtlbnYsIGNtZCksIHNoZWxsPVRydWUpCisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiLiAlcyA+IC9kZXYvbnVsbDsgJXM7IiAlIChzZWxmLnRjLnNka2VudiwgY21kKSwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5kZWNvZGUoInV0Zi04IikKIAogY2xhc3Mgb2VTREtFeHRUZXN0KG9lU0RLVGVzdCk6CiAgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKQEAgLTE0Miw3ICsxNjksNyBAQAogICAgICAgICBlbnZbJ1BBVEgnXSA9IGF2b2lkX3BhdGhzX2luX2Vudmlyb24ocGF0aHNfdG9fYXZvaWQpCiAKICAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCIuICVzID4gL2Rldi9udWxsOyJcCi0gICAgICAgICAgICAiICVzOyIgJSAoc2VsZi50Yy5zZGtlbnYsIGNtZCksIHNoZWxsPVRydWUsIGVudj1lbnYpCisgICAgICAgICAgICAiICVzOyIgJSAoc2VsZi50Yy5zZGtlbnYsIGNtZCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSwgZW52PWVudikuZGVjb2RlKCJ1dGYtOCIpCiAKIGRlZiBnZXRtb2R1bGUocG9zPTIpOgogICAgICMgc3RhY2sgcmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5nIGZyYW1lIGluZm9ybWF0aW9uCkBAIC0xODUsMTUgKzIxMiwyMiBAQAogICAgICAgICBfYnVmZmVyX2xvZ2dlciA9ICIiCiAKIGNsYXNzIFRlc3RDb250ZXh0KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBleHBvcnRlZD1GYWxzZSk6CiAgICAgICAgIHNlbGYuZCA9IGQKIAogICAgICAgICBzZWxmLnRlc3RzdWl0ZXMgPSBzZWxmLl9nZXRfdGVzdF9zdWl0ZXMoKQotICAgICAgICBzZWxmLnRlc3RzbGlzdCA9IHNlbGYuX2dldF90ZXN0c19saXN0KGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgnOicpKQorCisgICAgICAgIGlmIGV4cG9ydGVkOgorICAgICAgICAgICAgcGF0aCA9IFtvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSldCisgICAgICAgICAgICBleHRyYXBhdGggPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgICAgICBleHRyYXBhdGggPSAibGliL29lcWEiCisKKyAgICAgICAgc2VsZi50ZXN0c2xpc3QgPSBzZWxmLl9nZXRfdGVzdHNfbGlzdChwYXRoLCBleHRyYXBhdGgpCiAgICAgICAgIHNlbGYudGVzdHNyZXF1aXJlZCA9IHNlbGYuX2dldF90ZXN0X3N1aXRlc19yZXF1aXJlZCgpCiAKLSAgICAgICAgc2VsZi5maWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKAotICAgICAgICAgICAgb2VxYS5ydW50aW1lLl9fZmlsZV9fKSksICJmaWxlcyIpCisgICAgICAgIHNlbGYuZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAicnVudGltZS9maWxlcyIpCiAgICAgICAgIHNlbGYuaW1hZ2VmZWF0dXJlcyA9IGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKICAgICAgICAgc2VsZi5kaXN0cm9mZWF0dXJlcyA9IGQuZ2V0VmFyKCJESVNUUk9fRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCiAKQEAgLTIxMiw3ICsyNDYsNyBAQAogICAgICAgICByZXR1cm4gIiAiLmpvaW4odGNzKQogCiAgICAgIyByZXR1cm4gdGVzdCBsaXN0IGJ5IHR5cGUgYWxzbyBmaWx0ZXIgaWYgVEVTVF9TVUlURVMgaXMgc3BlY2lmaWVkCi0gICAgZGVmIF9nZXRfdGVzdHNfbGlzdChzZWxmLCBiYnBhdGgpOgorICAgIGRlZiBfZ2V0X3Rlc3RzX2xpc3Qoc2VsZiwgYmJwYXRoLCBleHRyYXBhdGgpOgogICAgICAgICB0ZXN0c2xpc3QgPSBbXQogCiAgICAgICAgIHR5cGUgPSBzZWxmLl9nZXRfdGVzdF9uYW1lc3BhY2UoKQpAQCAtMjI2LDExICsyNjAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCiAgICAgICAgICAgICAgICAgZm9yIHAgaW4gYmJwYXRoOgotICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocCwgJ2xpYicsICdvZXFhJywgdHlwZSwgdGVzdG5hbWUgKyAnLnB5JykpOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocCwgZXh0cmFwYXRoLCB0eXBlLCB0ZXN0bmFtZSArICIucHkiKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKCJvZXFhLiIgKyB0eXBlICsgIi4iICsgdGVzdG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsIHR5cGUsIHRlc3RuYW1lLnNwbGl0KCIuIilbMF0gKyAnLnB5JykpOgorICAgICAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwLCBleHRyYXBhdGgsIHR5cGUsIHRlc3RuYW1lLnNwbGl0KCIuIilbMF0gKyAiLnB5IikpOgogICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNsaXN0LmFwcGVuZCgib2VxYS4iICsgdHlwZSArICIuIiArIHRlc3RuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtMjM5LDggKzI3Myw2IEBACiAKICAgICAgICAgaWYgImF1dG8iIGluIHNlbGYudGVzdHN1aXRlczoKICAgICAgICAgICAgIGRlZiBhZGRfYXV0b19saXN0KHBhdGgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykpOgotICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnVGVzdHMgZGlyZWN0b3J5ICVzIGV4aXN0cyBidXQgaXMgbWlzc2luZyBfX2luaXRfXy5weScgJSBwYXRoKQogICAgICAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIocGF0aCkgaWYgZi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoJ18nKV0pCiAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9ICdvZXFhLicgKyB0eXBlICsgJy4nICsgZls6LTNdCkBAIC0yNTUsNiArMjg3LDUxIEBACiAKICAgICAgICAgcmV0dXJuIHRlc3RzbGlzdAogCisgICAgZGVmIGdldFRlc3RNb2R1bGVzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhbGwgdGhlIHRlc3QgbW9kdWxlcyBpbiB0aGUgdGVzdGxpc3QuCisgICAgICAgICIiIgorCisgICAgICAgIGltcG9ydCBwa2d1dGlsCisKKyAgICAgICAgbW9kdWxlcyA9IFtdCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYudGVzdHNsaXN0OgorICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJcdytcLlx3K1wudGVzdF9cUysiLCB0ZXN0KToKKyAgICAgICAgICAgICAgICB0ZXN0ID0gJy4nLmpvaW4odC5zcGxpdCgnLicpWzozXSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHBrZ3V0aWwuZ2V0X2xvYWRlcih0ZXN0KQorICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQobW9kdWxlKQorCisgICAgICAgIHJldHVybiBtb2R1bGVzCisKKyAgICBkZWYgZ2V0TW9kdWxlZnJvbUlEKHNlbGYsIHRlc3RfaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgdGVzdCBtb2R1bGUgYmFzZWQgb24gYSB0ZXN0IGlkLgorICAgICAgICAiIiIKKworICAgICAgICBtb2R1bGVfbmFtZSA9ICIuIi5qb2luKHRlc3RfaWQuc3BsaXQoIi4iKVs6M10pCisgICAgICAgIG1vZHVsZXMgPSBzZWxmLmdldFRlc3RNb2R1bGVzKCkKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzOgorICAgICAgICAgICAgaWYgbW9kdWxlLm5hbWUgPT0gbW9kdWxlX25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0VGVzdHMoc2VsZiwgdGVzdCk6CisgICAgICAgICcnJ1JldHVybiBhbGwgaW5kaXZpZHVhbCB0ZXN0cyBleGVjdXRlZCB3aGVuIHJ1bm5pbmcgdGhlIHN1aXRlLicnJworICAgICAgICAjIFVuZm9ydHVuYXRlbHkgdW5pdHRlc3QgZG9lcyBub3QgaGF2ZSBhbiBBUEkgZm9yIHRoaXMsIHNvIHdlIGhhdmUKKyAgICAgICAgIyB0byByZWx5IG9uIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFRoaXMgb25seSBuZWVkcyB0byB3b3JrCisgICAgICAgICMgZm9yIFRlc3RTdWl0ZSBjb250YWluaW5nIFRlc3RDYXNlLgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHRlc3QsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKQorICAgICAgICBpZiBtZXRob2Q6CisgICAgICAgICAgICAjIGxlYWYgY2FzZTogYSBUZXN0Q2FzZQorICAgICAgICAgICAgeWllbGQgdGVzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBMb29rIGludG8gVGVzdFN1aXRlLgorICAgICAgICAgICAgdGVzdHMgPSBnZXRhdHRyKHRlc3QsICdfdGVzdHMnLCBbXSkKKyAgICAgICAgICAgIGZvciB0MSBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBmb3IgdDIgaW4gc2VsZi5nZXRUZXN0cyh0MSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHQyCisKICAgICBkZWYgbG9hZFRlc3RzKHNlbGYpOgogICAgICAgICBzZXRhdHRyKG9lVGVzdCwgInRjIiwgc2VsZikKIApAQCAtMjYzLDM2ICszNDAsMjAgQEAKICAgICAgICAgc3VpdGVzID0gW3Rlc3Rsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSkgZm9yIG5hbWUgaW4gc2VsZi50ZXN0c2xpc3RdCiAgICAgICAgIHN1aXRlcyA9IGZpbHRlckJ5VGFnRXhwKHN1aXRlcywgZ2V0YXR0cihzZWxmLCAidGFnZXhwIiwgTm9uZSkpCiAKLSAgICAgICAgZGVmIGdldFRlc3RzKHRlc3QpOgotICAgICAgICAgICAgJycnUmV0dXJuIGFsbCBpbmRpdmlkdWFsIHRlc3RzIGV4ZWN1dGVkIHdoZW4gcnVubmluZyB0aGUgc3VpdGUuJycnCi0gICAgICAgICAgICAjIFVuZm9ydHVuYXRlbHkgdW5pdHRlc3QgZG9lcyBub3QgaGF2ZSBhbiBBUEkgZm9yIHRoaXMsIHNvIHdlIGhhdmUKLSAgICAgICAgICAgICMgdG8gcmVseSBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBUaGlzIG9ubHkgbmVlZHMgdG8gd29yawotICAgICAgICAgICAgIyBmb3IgVGVzdFN1aXRlIGNvbnRhaW5pbmcgVGVzdENhc2UuCi0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHRlc3QsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKQotICAgICAgICAgICAgaWYgbWV0aG9kOgotICAgICAgICAgICAgICAgICMgbGVhZiBjYXNlOiBhIFRlc3RDYXNlCi0gICAgICAgICAgICAgICAgeWllbGQgdGVzdAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIExvb2sgaW50byBUZXN0U3VpdGUuCi0gICAgICAgICAgICAgICAgdGVzdHMgPSBnZXRhdHRyKHRlc3QsICdfdGVzdHMnLCBbXSkKLSAgICAgICAgICAgICAgICBmb3IgdDEgaW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIGZvciB0MiBpbiBnZXRUZXN0cyh0MSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0MgotCiAgICAgICAgICMgRGV0ZXJtaW5lIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1aXRlcyBieSBsb29raW5nIGZvciBAc2tpcFVubGVzc1Bhc3NlZAogICAgICAgICAjIG1ldGhvZCBhbm5vdGF0aW9ucy4gU3VpdGUgQSBkZXBlbmRzIG9uIHN1aXRlIEIgaWYgYW55IG1ldGhvZCBpbiBBCiAgICAgICAgICMgZGVwZW5kcyBvbiBhIG1ldGhvZCBvbiBCLgogICAgICAgICBmb3Igc3VpdGUgaW4gc3VpdGVzOgogICAgICAgICAgICAgc3VpdGUuZGVwZW5kZW5jaWVzID0gW10KICAgICAgICAgICAgIHN1aXRlLmRlcHRoID0gMAotICAgICAgICAgICAgZm9yIHRlc3QgaW4gZ2V0VGVzdHMoc3VpdGUpOgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5nZXRUZXN0cyhzdWl0ZSk6CiAgICAgICAgICAgICAgICAgbWV0aG9kbmFtZSA9IGdldGF0dHIodGVzdCwgJ190ZXN0TWV0aG9kTmFtZScsIE5vbmUpCiAgICAgICAgICAgICAgICAgaWYgbWV0aG9kbmFtZToKICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih0ZXN0LCBtZXRob2RuYW1lKQogICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gZ2V0YXR0cihtZXRob2QsICdfZGVwZW5kc19vbicsIE5vbmUpCiAgICAgICAgICAgICAgICAgICAgIGlmIGRlcGVuZHNfb246CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwX3N1aXRlIGluIHN1aXRlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uIGluIFtnZXRhdHRyKHQsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKSBmb3IgdCBpbiBnZXRUZXN0cyhkZXBfc3VpdGUpXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uIGluIFtnZXRhdHRyKHQsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKSBmb3IgdCBpbiBzZWxmLmdldFRlc3RzKGRlcF9zdWl0ZSldOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBfc3VpdGUgbm90IGluIHN1aXRlLmRlcGVuZGVuY2llcyBhbmQgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBfc3VpdGUgaXMgbm90IHN1aXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGUuZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBfc3VpdGUpCkBAIC0zMTQsNyArMzc1LDE0IEBACiAgICAgICAgIGZvciBpbmRleCwgc3VpdGUgaW4gZW51bWVyYXRlKHN1aXRlcyk6CiAgICAgICAgICAgICBzZXRfc3VpdGVfZGVwdGgoc3VpdGUpCiAgICAgICAgICAgICBzdWl0ZS5pbmRleCA9IGluZGV4Ci0gICAgICAgIHN1aXRlcy5zb3J0KGNtcD1sYW1iZGEgYSxiOiBjbXAoKGEuZGVwdGgsIGEuaW5kZXgpLCAoYi5kZXB0aCwgYi5pbmRleCkpKQorCisgICAgICAgIGRlZiBjbXAoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gKGEgPiBiKSAtIChhIDwgYikKKworICAgICAgICBkZWYgY21wZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBjbXAoKGEuZGVwdGgsIGEuaW5kZXgpLCAoYi5kZXB0aCwgYi5pbmRleCkpCisKKyAgICAgICAgc3VpdGVzLnNvcnQoa2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcGZ1bmMpKQogCiAgICAgICAgIHNlbGYuc3VpdGUgPSB0ZXN0bG9hZGVyLnN1aXRlQ2xhc3Moc3VpdGVzKQogCkBAIC0zMzEsMzUgKzM5OSwyNCBAQAogCiAgICAgICAgIHJldHVybiBydW5uZXIucnVuKHNlbGYuc3VpdGUpCiAKLWNsYXNzIEltYWdlVGVzdENvbnRleHQoVGVzdENvbnRleHQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXQsIGhvc3RfZHVtcGVyKToKLSAgICAgICAgc3VwZXIoSW1hZ2VUZXN0Q29udGV4dCwgc2VsZikuX19pbml0X18oZCkKLQotICAgICAgICBzZWxmLnRhZ2V4cCA9ICBkLmdldFZhcigiVEVTVF9TVUlURVNfVEFHUyIsIFRydWUpCitjbGFzcyBSdW50aW1lVGVzdENvbnRleHQoVGVzdENvbnRleHQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXQsIGV4cG9ydGVkPUZhbHNlKToKKyAgICAgICAgc3VwZXIoUnVudGltZVRlc3RDb250ZXh0LCBzZWxmKS5fX2luaXRfXyhkLCBleHBvcnRlZCkKIAogICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldAotICAgICAgICBzZWxmLmhvc3RfZHVtcGVyID0gaG9zdF9kdW1wZXIKIAorICAgICAgICBzZWxmLnBrZ21hbmlmZXN0ID0ge30KICAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwKICAgICAgICAgICAgICAgICBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAiLm1hbmlmZXN0IikKICAgICAgICAgbm9tYW5pZmVzdCA9IGQuZ2V0VmFyKCJJTUFHRV9OT19NQU5JRkVTVCIsIFRydWUpCiAgICAgICAgIGlmIG5vbWFuaWZlc3QgaXMgTm9uZSBvciBub21hbmlmZXN0ICE9ICIxIjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3QpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucGtnbWFuaWZlc3QgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgYXJjaCwgdmVyc2lvbikgPSBsaW5lLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dtYW5pZmVzdFtwa2ddID0gKHZlcnNpb24sIGFyY2gpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBwYWNrYWdlIG1hbmlmZXN0IGZpbGUgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIGltYWdlP1xuJXMiICUgZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYucGtnbWFuaWZlc3QgPSAiIgotCi0gICAgICAgIHNlbGYuc2lndGVybSA9IEZhbHNlCi0gICAgICAgIHNlbGYub3JpZ3NpZ3Rlcm1oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2VsZi5fc2lndGVybV9leGNlcHRpb24pCi0KLSAgICBkZWYgX3NpZ3Rlcm1fZXhjZXB0aW9uKHNlbGYsIHNpZ251bSwgc3RhY2tmcmFtZSk6Ci0gICAgICAgIGJiLndhcm4oIlRlc3RJbWFnZSByZWNlaXZlZCBTSUdURVJNLCBzaHV0dGluZyBkb3duLi4uIikKLSAgICAgICAgc2VsZi5zaWd0ZXJtID0gVHJ1ZQotICAgICAgICBzZWxmLnRhcmdldC5zdG9wKCkKIAogICAgIGRlZiBfZ2V0X3Rlc3RfbmFtZXNwYWNlKHNlbGYpOgogICAgICAgICByZXR1cm4gInJ1bnRpbWUiCkBAIC0zODIsOCArNDM5LDIyMyBAQAogICAgICAgICByZXR1cm4gW3QgZm9yIHQgaW4gc2VsZi5kLmdldFZhcigiVEVTVF9TVUlURVMiLCBUcnVlKS5zcGxpdCgpIGlmIHQgIT0gImF1dG8iXQogCiAgICAgZGVmIGxvYWRUZXN0cyhzZWxmKToKLSAgICAgICAgc3VwZXIoSW1hZ2VUZXN0Q29udGV4dCwgc2VsZikubG9hZFRlc3RzKCkKLSAgICAgICAgc2V0YXR0cihvZVJ1bnRpbWVUZXN0LCAicHNjbWQiLCAicHMgLWVmIiBpZiBvZVRlc3QuaGFzUGFja2FnZSgicHJvY3BzIikgZWxzZSAicHMiKQorICAgICAgICBzdXBlcihSdW50aW1lVGVzdENvbnRleHQsIHNlbGYpLmxvYWRUZXN0cygpCisgICAgICAgIGlmIG9lVGVzdC5oYXNQYWNrYWdlKCJwcm9jcHMiKToKKyAgICAgICAgICAgIG9lUnVudGltZVRlc3QucHNjbWQgPSAicHMgLWVmIgorCisgICAgZGVmIGV4dHJhY3RfcGFja2FnZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHBhY2thZ2VzIHRoYXQgd2lsbCBiZSBuZWVkZWQgZHVyaW5nIHJ1bnRpbWUuCisgICAgICAgICIiIgorCisgICAgICAgIG1vZHVsZXMgPSBzZWxmLmdldFRlc3RNb2R1bGVzKCkKKyAgICAgICAgYmJwYXRocyA9IHNlbGYuZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCI6IikKKworICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZC5nZXRWYXIoIlRFU1RfRVhUUkFDVEVEX0RJUiIsIFRydWUpKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZC5nZXRWYXIoIlRFU1RfUEFDS0FHRURfRElSIiwgVHJ1ZSkpCisgICAgICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKKyAgICAgICAgICAgIGpzb25fZmlsZSA9IHNlbGYuX2dldEpzb25GaWxlKG1vZHVsZSkKKyAgICAgICAgICAgIGlmIGpzb25fZmlsZToKKyAgICAgICAgICAgICAgICBuZWVkZWRfcGFja2FnZXMgPSBzZWxmLl9nZXROZWVkZWRQYWNrYWdlcyhqc29uX2ZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fcGVyZm9ybV9wYWNrYWdlX2V4dHJhY3Rpb24obmVlZGVkX3BhY2thZ2VzKQorCisgICAgZGVmIF9wZXJmb3JtX3BhY2thZ2VfZXh0cmFjdGlvbihzZWxmLCBuZWVkZWRfcGFja2FnZXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRXh0cmFjdCBwYWNrYWdlcyB0aGF0IHdpbGwgYmUgbmVlZGVkIGR1cmluZyBydW50aW1lLgorICAgICAgICAiIiIKKworICAgICAgICBpbXBvcnQgb2UucGF0aAorCisgICAgICAgIGV4dHJhY3RlZF9wYXRoID0gc2VsZi5kLmdldFZhcigiVEVTVF9FWFRSQUNURURfRElSIiwgVHJ1ZSkKKyAgICAgICAgcGFja2FnZWRfcGF0aCA9IHNlbGYuZC5nZXRWYXIoIlRFU1RfUEFDS0FHRURfRElSIiwgVHJ1ZSkKKworICAgICAgICBmb3Iga2V5LHZhbHVlIGluIG5lZWRlZF9wYWNrYWdlcy5pdGVtcygpOgorICAgICAgICAgICAgcGFja2FnZXMgPSAoKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSAodmFsdWUsICkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSB2YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIHByb2Nlc3MgbmVlZGVkIHBhY2thZ2VzIGZvciAlczsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJWYWx1ZSBtdXN0IGJlIGEgZGljdCBvciBsaXN0IiAlIGtleSkKKworICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgcGtnID0gcGFja2FnZVsicGtnIl0KKyAgICAgICAgICAgICAgICBybSA9IHBhY2thZ2UuZ2V0KCJybSIsIEZhbHNlKQorICAgICAgICAgICAgICAgIGV4dHJhY3QgPSBwYWNrYWdlLmdldCgiZXh0cmFjdCIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgZXh0cmFjdDoKKyAgICAgICAgICAgICAgICAgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbihleHRyYWN0ZWRfcGF0aCwgcGtnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRzdF9kaXIgPSBvcy5wYXRoLmpvaW4ocGFja2FnZWRfcGF0aCkKKworICAgICAgICAgICAgICAgICMgRXh0cmFjdCBwYWNrYWdlIGFuZCBjb3B5IGl0IHRvIFRFU1RfRVhUUkFDVEVEX0RJUgorICAgICAgICAgICAgICAgIHBrZ19kaXIgPSBzZWxmLl9leHRyYWN0X2luX3RtcGRpcihwa2cpCisgICAgICAgICAgICAgICAgaWYgZXh0cmFjdDoKKworICAgICAgICAgICAgICAgICAgICAjIFNhbWUgcGFja2FnZSB1c2VkIGZvciBtb3JlIHRoYW4gb25lIHRlc3QsCisgICAgICAgICAgICAgICAgICAgICMgZG9uJ3QgbmVlZCB0byBleHRyYWN0IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3RfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIG9lLnBhdGguY29weXRyZWUocGtnX2RpciwgZHN0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwa2dfZGlyKQorCisgICAgICAgICAgICAgICAgIyBDb3B5IHBhY2thZ2UgdG8gVEVTVF9QQUNLQUdFRF9ESVIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb3B5X3BhY2thZ2UocGtnKQorCisgICAgZGVmIF9nZXRKc29uRmlsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgSlNPTiBmaWxlIGZvciBhIG1vZHVsZSwgZW1wdHkgaWYgZG9lc24ndCBleGl0c3QuCisgICAgICAgICIiIgorCisgICAgICAgIG1vZHVsZV9maWxlID0gbW9kdWxlLnBhdGgKKyAgICAgICAganNvbl9maWxlID0gIiVzLmpzb24iICUgbW9kdWxlX2ZpbGUucnNwbGl0KCIuIiwgMSlbMF0KKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobW9kdWxlX2ZpbGUpIGFuZCBvcy5wYXRoLmlzZmlsZShqc29uX2ZpbGUpOgorICAgICAgICAgICAgcmV0dXJuIGpzb25fZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgX2dldE5lZWRlZFBhY2thZ2VzKHNlbGYsIGpzb25fZmlsZSwgdGVzdD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgYSBkaWN0IHdpdGggbmVlZGVkIHBhY2thZ2VzIGJhc2VkIG9uIGEgSlNPTiBmaWxlLgorCisKKyAgICAgICAgSWYgYSB0ZXN0IGlzIHNwZWNpZmllZCBpdCB3aWxsIHJldHVybiB0aGUgZGljdCBqdXN0IGZvciB0aGF0IHRlc3QuCisgICAgICAgICIiIgorCisgICAgICAgIGltcG9ydCBqc29uCisKKyAgICAgICAgbmVlZGVkX3BhY2thZ2VzID0ge30KKworICAgICAgICB3aXRoIG9wZW4oanNvbl9maWxlKSBhcyBmOgorICAgICAgICAgICAgdGVzdF9wYWNrYWdlcyA9IGpzb24ubG9hZChmKQorICAgICAgICBmb3Iga2V5LHZhbHVlIGluIHRlc3RfcGFja2FnZXMuaXRlbXMoKToKKyAgICAgICAgICAgIG5lZWRlZF9wYWNrYWdlc1trZXldID0gdmFsdWUKKworICAgICAgICBpZiB0ZXN0OgorICAgICAgICAgICAgaWYgdGVzdCBpbiBuZWVkZWRfcGFja2FnZXM6CisgICAgICAgICAgICAgICAgbmVlZGVkX3BhY2thZ2VzID0gbmVlZGVkX3BhY2thZ2VzW3Rlc3RdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5lZWRlZF9wYWNrYWdlcyA9IHt9CisKKyAgICAgICAgcmV0dXJuIG5lZWRlZF9wYWNrYWdlcworCisgICAgZGVmIF9leHRyYWN0X2luX3RtcGRpcihzZWxmLCBwa2cpOgorICAgICAgICAiIiIiCisgICAgICAgIFJldHVybnMgcGF0aCB0byBhIHRlbXAgZGlyZWN0b3J5IHdoZXJlIHRoZSBwYWNrYWdlIHdhcworICAgICAgICBleHRyYWN0ZWQgd2l0aG91dCBkZXBlbmRlbmNpZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGZyb20gb2VxYS51dGlscy5wYWNrYWdlX21hbmFnZXIgaW1wb3J0IGdldF9wYWNrYWdlX21hbmFnZXIKKworICAgICAgICBwa2dfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCJURVNUX0lOU1RBTExfVE1QX0RJUiIsIFRydWUpLCBwa2cpCisgICAgICAgIHBtID0gZ2V0X3BhY2thZ2VfbWFuYWdlcihzZWxmLmQsIHBrZ19wYXRoKQorICAgICAgICBleHRyYWN0X2RpciA9IHBtLmV4dHJhY3QocGtnKQorICAgICAgICBzaHV0aWwucm10cmVlKHBrZ19wYXRoKQorCisgICAgICAgIHJldHVybiBleHRyYWN0X2RpcgorCisgICAgZGVmIF9jb3B5X3BhY2thZ2Uoc2VsZiwgcGtnKToKKyAgICAgICAgIiIiCisgICAgICAgIENvcHkgdGhlIFJQTSwgREVCIG9yIElQSyBwYWNrYWdlIHRvIGRzdF9kaXIKKyAgICAgICAgIiIiCisKKyAgICAgICAgZnJvbSBvZXFhLnV0aWxzLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgZ2V0X3BhY2thZ2VfbWFuYWdlcgorCisgICAgICAgIHBrZ19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoIlRFU1RfSU5TVEFMTF9UTVBfRElSIiwgVHJ1ZSksIHBrZykKKyAgICAgICAgZHN0X2RpciA9IHNlbGYuZC5nZXRWYXIoIlRFU1RfUEFDS0FHRURfRElSIiwgVHJ1ZSkKKyAgICAgICAgcG0gPSBnZXRfcGFja2FnZV9tYW5hZ2VyKHNlbGYuZCwgcGtnX3BhdGgpCisgICAgICAgIHBrZ19pbmZvID0gcG0ucGFja2FnZV9pbmZvKHBrZykKKyAgICAgICAgZmlsZV9wYXRoID0gcGtnX2luZm9bcGtnXVsiZmlsZXBhdGgiXQorICAgICAgICBzaHV0aWwuY29weTIoZmlsZV9wYXRoLCBkc3RfZGlyKQorICAgICAgICBzaHV0aWwucm10cmVlKHBrZ19wYXRoKQorCisgICAgZGVmIGluc3RhbGxfdW5pbnN0YWxsX3BhY2thZ2VzKHNlbGYsIHRlc3RfaWQsIHBrZ19kaXIsIGluc3RhbGwpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgaWYgdGhlIHRlc3QgcmVxdWlyZXMgYSBwYWNrYWdlIGFuZCBJbnN0YWxsL1VuaXN0YWxsIGl0IGluIHRoZSBEVVQKKyAgICAgICAgIiIiCisKKyAgICAgICAgdGVzdCA9IHRlc3RfaWQuc3BsaXQoIi4iKVs0XQorICAgICAgICBtb2R1bGUgPSBzZWxmLmdldE1vZHVsZWZyb21JRCh0ZXN0X2lkKQorICAgICAgICBqc29uID0gc2VsZi5fZ2V0SnNvbkZpbGUobW9kdWxlKQorICAgICAgICBpZiBqc29uOgorICAgICAgICAgICAgbmVlZGVkX3BhY2thZ2VzID0gc2VsZi5fZ2V0TmVlZGVkUGFja2FnZXMoanNvbiwgdGVzdCkKKyAgICAgICAgICAgIGlmIG5lZWRlZF9wYWNrYWdlczoKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3VuaW5zdGFsbF9wYWNrYWdlcyhuZWVkZWRfcGFja2FnZXMsIHBrZ19kaXIsIGluc3RhbGwpCisKKyAgICBkZWYgX2luc3RhbGxfdW5pbnN0YWxsX3BhY2thZ2VzKHNlbGYsIG5lZWRlZF9wYWNrYWdlcywgcGtnX2RpciwgaW5zdGFsbD1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIEluc3RhbGwvVW5pc3RhbGwgcGFja2FnZXMgaW4gdGhlIERVVCB3aXRob3V0IHVzaW5nIGEgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICIiIgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobmVlZGVkX3BhY2thZ2VzLCBkaWN0KToKKyAgICAgICAgICAgIHBhY2thZ2VzID0gW25lZWRlZF9wYWNrYWdlc10KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5lZWRlZF9wYWNrYWdlcywgbGlzdCk6CisgICAgICAgICAgICBwYWNrYWdlcyA9IG5lZWRlZF9wYWNrYWdlcworCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgcGtnID0gcGFja2FnZVsicGtnIl0KKyAgICAgICAgICAgIHJtID0gcGFja2FnZS5nZXQoInJtIiwgRmFsc2UpCisgICAgICAgICAgICBleHRyYWN0ID0gcGFja2FnZS5nZXQoImV4dHJhY3QiLCBUcnVlKQorICAgICAgICAgICAgc3JjX2RpciA9IG9zLnBhdGguam9pbihwa2dfZGlyLCBwa2cpCisKKyAgICAgICAgICAgICMgSW5zdGFsbCBwYWNrYWdlCisgICAgICAgICAgICBpZiBpbnN0YWxsIGFuZCBleHRyYWN0OgorICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LmNvbm5lY3Rpb24uY29weV9kaXJfdG8oc3JjX2RpciwgIi8iKQorCisgICAgICAgICAgICAjIFVuaXN0YWxsIHBhY2thZ2UKKyAgICAgICAgICAgIGVsaWYgbm90IGluc3RhbGwgYW5kIHJtOgorICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LmNvbm5lY3Rpb24uZGVsZXRlX2Rpcl9zdHJ1Y3R1cmUoc3JjX2RpciwgIi8iKQorCitjbGFzcyBJbWFnZVRlc3RDb250ZXh0KFJ1bnRpbWVUZXN0Q29udGV4dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHRhcmdldCwgaG9zdF9kdW1wZXIpOgorICAgICAgICBzdXBlcihJbWFnZVRlc3RDb250ZXh0LCBzZWxmKS5fX2luaXRfXyhkLCB0YXJnZXQpCisKKyAgICAgICAgc2VsZi50YWdleHAgPSBkLmdldFZhcigiVEVTVF9TVUlURVNfVEFHUyIsIFRydWUpCisKKyAgICAgICAgc2VsZi5ob3N0X2R1bXBlciA9IGhvc3RfZHVtcGVyCisKKyAgICAgICAgc2VsZi5zaWd0ZXJtID0gRmFsc2UKKyAgICAgICAgc2VsZi5vcmlnc2lndGVybWhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdURVJNKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzZWxmLl9zaWd0ZXJtX2V4Y2VwdGlvbikKKworICAgIGRlZiBfc2lndGVybV9leGNlcHRpb24oc2VsZiwgc2lnbnVtLCBzdGFja2ZyYW1lKToKKyAgICAgICAgYmIud2FybigiVGVzdEltYWdlIHJlY2VpdmVkIFNJR1RFUk0sIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBzZWxmLnNpZ3Rlcm0gPSBUcnVlCisgICAgICAgIHNlbGYudGFyZ2V0LnN0b3AoKQorCisgICAgZGVmIGluc3RhbGxfdW5pbnN0YWxsX3BhY2thZ2VzKHNlbGYsIHRlc3RfaWQsIGluc3RhbGw9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayBpZiB0aGUgdGVzdCByZXF1aXJlcyBhIHBhY2thZ2UgYW5kIEluc3RhbGwvVW5pc3RhbGwgaXQgaW4gdGhlIERVVAorICAgICAgICAiIiIKKworICAgICAgICBwa2dfZGlyID0gc2VsZi5kLmdldFZhcigiVEVTVF9FWFRSQUNURURfRElSIiwgVHJ1ZSkKKyAgICAgICAgc3VwZXIoSW1hZ2VUZXN0Q29udGV4dCwgc2VsZikuaW5zdGFsbF91bmluc3RhbGxfcGFja2FnZXModGVzdF9pZCwgcGtnX2RpciwgaW5zdGFsbCkKKworY2xhc3MgRXhwb3J0VGVzdENvbnRleHQoUnVudGltZVRlc3RDb250ZXh0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgdGFyZ2V0LCBleHBvcnRlZD1GYWxzZSwgcGFyc2VkQXJncz17fSk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGNsYXNzIGlzIHVzZWQgd2hlbiBleHBvcnRpbmcgdGVzdHMgYW5kIHdoZW4gYXJlIGV4ZWN1dGVkIG91dHNpZGUgT0UgZW52aXJvbm1lbnQuCisKKyAgICAgICAgcGFyc2VkQXJncyBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgLSB0YWc6ICAgICAgRmlsdGVyIHRlc3QgYnkgdGFnLgorICAgICAgICAiIiIKKyAgICAgICAgc3VwZXIoRXhwb3J0VGVzdENvbnRleHQsIHNlbGYpLl9faW5pdF9fKGQsIHRhcmdldCwgZXhwb3J0ZWQpCisKKyAgICAgICAgdGFnID0gcGFyc2VkQXJncy5nZXQoInRhZyIsIE5vbmUpCisgICAgICAgIHNlbGYudGFnZXhwID0gdGFnIGlmIHRhZyAhPSBOb25lIGVsc2UgZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1RBR1MiLCBUcnVlKQorCisgICAgICAgIHNlbGYuc2lndGVybSA9IE5vbmUKKworICAgIGRlZiBpbnN0YWxsX3VuaW5zdGFsbF9wYWNrYWdlcyhzZWxmLCB0ZXN0X2lkLCBpbnN0YWxsPVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgaWYgdGhlIHRlc3QgcmVxdWlyZXMgYSBwYWNrYWdlIGFuZCBJbnN0YWxsL1VuaXN0YWxsIGl0IGluIHRoZSBEVVQKKyAgICAgICAgIiIiCisKKyAgICAgICAgZXhwb3J0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpKQorICAgICAgICBleHRyYWN0ZWRfZGlyID0gc2VsZi5kLmdldFZhcigiVEVTVF9FWFBPUlRfRVhUUkFDVEVEX0RJUiIsIFRydWUpCisgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oZXhwb3J0X2RpciwgZXh0cmFjdGVkX2RpcikKKyAgICAgICAgc3VwZXIoRXhwb3J0VGVzdENvbnRleHQsIHNlbGYpLmluc3RhbGxfdW5pbnN0YWxsX3BhY2thZ2VzKHRlc3RfaWQsIHBrZ19kaXIsIGluc3RhbGwpCiAKIGNsYXNzIFNES1Rlc3RDb250ZXh0KFRlc3RDb250ZXh0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgc2RrdGVzdGRpciwgc2RrZW52LCB0Y25hbWUsICphcmdzKToKQEAgLTM5Niw4ICs2NjgsMTEgQEAKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3RhcmdldF9tYW5pZmVzdCcpOgogICAgICAgICAgICAgc2VsZi50YXJnZXRfbWFuaWZlc3QgPSBkLmdldFZhcigiU0RLX1RBUkdFVF9NQU5JRkVTVCIsIFRydWUpCiAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGtnbWFuaWZlc3QgPSB7fQogICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYudGFyZ2V0X21hbmlmZXN0KSBhcyBmOgotICAgICAgICAgICAgICAgICBzZWxmLnBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAocGtnLCBhcmNoLCB2ZXJzaW9uKSA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnbWFuaWZlc3RbcGtnXSA9ICh2ZXJzaW9uLCBhcmNoKQogICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHBhY2thZ2UgbWFuaWZlc3QgZmlsZSBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgc2RrIGltYWdlP1xuJXMiICUgZSkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVuZXhwb3J0ZWQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQppbmRleCBjYzg5ZTEzLi43ZTI0NWM0IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAKICMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCkBAIC0zMCw5ICszMCw5IEBACiAKIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJvZXFhIikpKQogCi1mcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBUZXN0Q29udGV4dAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgRXhwb3J0VGVzdENvbnRleHQKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCB1cGRhdGVFbnYKIGZyb20gb2VxYS51dGlscy5zc2hjb250cm9sIGltcG9ydCBTU0hDb250cm9sCi1mcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgZ2V0X2hvc3RfZHVtcGVyCiAKICMgdGhpcyBpc24ndCBwcmV0dHkgYnV0IHdlIG5lZWQgYSBmYWtlIHRhcmdldCBvYmplY3QKICMgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzIGV4dGVybmFsbHkgYXMgd2UgZG9uJ3QgY2FyZQpAQCAtNjksMTAgKzY5LDYgQEAKICAgICBkZWYgZ2V0VmFyKHNlbGYsIGtleSwgdW51c2VkID0gTm9uZSk6CiAgICAgICAgIHJldHVybiBzZWxmLmdldChrZXksICIiKQogCi1jbGFzcyBFeHBvcnRUZXN0Q29udGV4dChUZXN0Q29udGV4dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgotICAgICAgICBzZWxmLmQgPSBkCi0KIGRlZiBtYWluKCk6CiAKICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCkBAIC04NSw2ICs4MSw3IEBACiAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIGpzb24gaWYgdGhhdCBkaXJlY3RvcnkgYWN0dWFsbHkgZXhpc3RzIG9yIGl0IHdpbGwgZXJyb3Igb3V0LiIpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWwiLCAiLS1sb2ctZGlyIiwgZGVzdD0ibG9nX2RpciIsIGhlbHA9IlRoaXMgc2V0cyB0aGUgcGF0aCBmb3IgVEVTVF9MT0dfRElSLiBJZiBub3Qgc3BlY2lmaWVkIFwKICAgICAgICAgICAgIHRoZSBjdXJyZW50IGRpciBpcyB1c2VkLiBUaGlzIGlzIHVzZWQgZm9yIHVzdWFsbHkgY3JlYXRpbmcgYSBzc2ggbG9nIGZpbGUgYW5kIGEgc2NwIHRlc3QgZmlsZS4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1hIiwgIi0tdGFnIiwgZGVzdD0idGFnIiwgaGVscD0iT25seSBydW4gdGVzdCB3aXRoIHNwZWNpZmllZCB0YWcuIikKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJqc29uIiwgaGVscD0iVGhlIGpzb24gZmlsZSBleHBvcnRlZCBieSB0aGUgYnVpbGQgc3lzdGVtIiwgZGVmYXVsdD0idGVzdGRhdGEuanNvbiIsIG5hcmdzPSc/JykKIAogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCkBAIC0xMTEsMzAgKzEwOCw0MSBAQAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkWyJERVBMT1lfRElSIl0pOgogICAgICAgICAgICAgcHJpbnQoIldBUk5JTkc6IFRoZSBwYXRoIHRvIERFUExPWV9ESVIgZG9lcyBub3QgZXhpc3Q6ICVzIiAlIGRbIkRFUExPWV9ESVIiXSkKIAorICAgIHBhcnNlZEFyZ3MgPSB7fQorICAgIHBhcnNlZEFyZ3NbInRhZyJdID0gYXJncy50YWcKKworICAgIGV4dHJhY3Rfc2RrKGQpCiAKICAgICB0YXJnZXQgPSBGYWtlVGFyZ2V0KGQpCiAgICAgZm9yIGtleSBpbiBsb2FkZWRbInRhcmdldCJdLmtleXMoKToKICAgICAgICAgc2V0YXR0cih0YXJnZXQsIGtleSwgbG9hZGVkWyJ0YXJnZXQiXVtrZXldKQogCi0gICAgaG9zdF9kdW1wZXIgPSBnZXRfaG9zdF9kdW1wZXIoZCkKLSAgICBob3N0X2R1bXBlci5wYXJlbnRfZGlyID0gbG9hZGVkWyJob3N0X2R1bXBlciJdWyJwYXJlbnRfZGlyIl0KLSAgICBob3N0X2R1bXBlci5jbWRzID0gbG9hZGVkWyJob3N0X2R1bXBlciJdWyJjbWRzIl0KLQogICAgIHRhcmdldC5leHBvcnRTdGFydCgpCi0gICAgdGMgPSBFeHBvcnRUZXN0Q29udGV4dChkKQotCi0gICAgc2V0YXR0cih0YywgImQiLCBkKQotICAgIHNldGF0dHIodGMsICJ0YXJnZXQiLCB0YXJnZXQpCi0gICAgc2V0YXR0cih0YywgImhvc3RfZHVtcGVyIiwgaG9zdF9kdW1wZXIpCi0gICAgZm9yIGtleSBpbiBsb2FkZWQua2V5cygpOgotICAgICAgICBpZiBrZXkgIT0gImQiIGFuZCBrZXkgIT0gInRhcmdldCIgYW5kIGtleSAhPSAiaG9zdF9kdW1wZXIiOgotICAgICAgICAgICAgc2V0YXR0cih0Yywga2V5LCBsb2FkZWRba2V5XSkKLQorICAgIHRjID0gRXhwb3J0VGVzdENvbnRleHQoZCwgdGFyZ2V0LCBUcnVlLCBwYXJzZWRBcmdzKQogICAgIHRjLmxvYWRUZXN0cygpCiAgICAgdGMucnVuVGVzdHMoKQogCiAgICAgcmV0dXJuIDAKIAorZGVmIGV4dHJhY3Rfc2RrKGQpOgorICAgICIiIgorICAgIEV4dHJhY3QgU0RLIGlmIG5lZWRlZAorICAgICIiIgorCisgICAgZXhwb3J0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKKyAgICB0b29sc19kaXIgPSBkLmdldFZhcigiVEVTVF9FWFBPUlRfU0RLX0RJUiIsIFRydWUpCisgICAgdGFyYmFsbF9uYW1lID0gIiVzLnNoIiAlIGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9TREtfTkFNRSIsIFRydWUpCisgICAgdGFyYmFsbF9wYXRoID0gb3MucGF0aC5qb2luKGV4cG9ydF9kaXIsIHRvb2xzX2RpciwgdGFyYmFsbF9uYW1lKQorICAgIGV4dHJhY3RfcGF0aCA9IG9zLnBhdGguam9pbihleHBvcnRfZGlyLCAic3lzcm9vdCIpCisgICAgaWYgb3MucGF0aC5pc2ZpbGUodGFyYmFsbF9wYXRoKToKKyAgICAgICAgcHJpbnQgKCJGb3VuZCBTREsgdGFyYmFsbCAlcy4gRXh0cmFjdGluZy4uLiIgJSB0YXJiYWxsX3BhdGgpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiJXMgLXkgLWQgJXMiICUgKHRhcmJhbGxfcGF0aCwgZXh0cmFjdF9wYXRoKSkKKyAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihleHRyYWN0X3BhdGgpOgorICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKCJlbnZpcm9ubWVudC1zZXR1cCIpOgorICAgICAgICAgICAgICAgIHByaW50KCJTZXR0aW5nIHVwIFNESyBlbnZpcm9ubWVudC4uLiIpCisgICAgICAgICAgICAgICAgZW52X2ZpbGUgPSBvcy5wYXRoLmpvaW4oZXh0cmFjdF9wYXRoLCBmKQorICAgICAgICAgICAgICAgIHVwZGF0ZUVudihlbnZfZmlsZSkKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0cnk6CiAgICAgICAgIHJldCA9IG1haW4oKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjNmYTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Ci1mcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCi1fX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3B0ZXN0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkKaW5kZXggMDYyMTAyOC4uNzEzMjRkMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkKQEAgLTExLDcgKzExLDcgQEAKIGRlZiBzZXRVcE1vZHVsZSgpOgogICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgogICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQotICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic21hcnRwbSIpOgogICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgc21hcnQgaW5zdGFsbGVkIikKICAgICBpZiAicGFja2FnZV9ycG0iICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlBBQ0tBR0VfQ0xBU1NFUyIsIFRydWUpLnNwbGl0KClbMF06CiAgICAgICAgIHNraXBNb2R1bGUoIlJwbSBpcyBub3QgdGhlIHByaW1hcnkgcGFja2FnZSBtYW5hZ2VyIikKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIGRlZiB0ZXN0X3B0ZXN0cnVubmVyKHNlbGYpOgogICAgICAgICBzZWxmLmFkZF9zbWFydF9jaGFubmVsKCkKICAgICAgICAgKHJ1bm5lcnN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bignd2hpY2ggcHRlc3QtcnVubmVyJywgMCkKLSAgICAgICAgY29uZCA9IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgicHRlc3QtcnVubmVyIikgYW5kIG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicHRlc3QiKSBhbmQgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCItcHRlc3QiKSBhbmQgKHJ1bm5lcnN0YXR1cyAhPSAwKQorICAgICAgICBjb25kID0gb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJwdGVzdC1ydW5uZXIiKSBhbmQgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJwdGVzdCIpIGFuZCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2VNYXRjaCgiLXB0ZXN0IikgYW5kIChydW5uZXJzdGF0dXMgIT0gMCkKICAgICAgICAgaWYgY29uZDoKICAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9wYWNrYWdlcyhzZWxmLmluc3RhbGxfY29tcGxlbWVudGFyeSgiKi1wdGVzdCIpKQogICAgICAgICAgICAgc2VsZi5pbnN0YWxsX3BhY2thZ2VzKFsncHRlc3QtcnVubmVyJ10pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkZ2FsY3VsYXRvci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRnYWxjdWxhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmEyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkZ2FsY3VsYXRvci5weQpAQCAtMCwwICsxLDIzIEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBUYXJnZXRCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCitjbGFzcyBHYWxjdWxhdG9yVGVzdChvZVJ1bnRpbWVUZXN0KToKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2dhbGN1bGF0b3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2plY3QgPSBUYXJnZXRCdWlsZFByb2plY3Qob2VSdW50aW1lVGVzdC50Yy50YXJnZXQsIG9lUnVudGltZVRlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9nYWxjdWxhdG9yLm1uaW0ub3JnL2Rvd25sb2Fkcy9nYWxjdWxhdG9yLTIuMS40LnRhci5iejIiKQorICAgICAgICAgICAgcHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRpcHRhYmxlcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRpcHRhYmxlcy5weQppbmRleCAwOWUyNTJkLi5iYzc1ZDBhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGlwdGFibGVzLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CiAgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAotICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2lwdGFibGVzL2ZpbGVzL2lwdGFibGVzLTEuNC4xMy50YXIuYnoyIikKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvaXB0YWJsZXMtMS40LjEzLnRhci5iejIiKQogICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCiAKICAgICBAdGVzdGNhc2UoMjA2KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMmIwNjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLWZyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKLWZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCi1mcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFRhcmdldEJ1aWxkUHJvamVjdAotCi1kZWYgc2V0VXBNb2R1bGUoKToKLSAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKLSAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCi0KLWNsYXNzIFN1ZG9rdVRlc3Qob2VSdW50aW1lVGVzdCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKLSAgICAgICAgc2VsZi5wcm9qZWN0ID0gVGFyZ2V0QnVpbGRQcm9qZWN0KG9lUnVudGltZVRlc3QudGMudGFyZ2V0LCBvZVJ1bnRpbWVUZXN0LnRjLmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zdWRva3Utc2F2YW50L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC0xLjMvc3Vkb2t1LXNhdmFudC0xLjMudGFyLmJ6MiIpCi0gICAgICAgIHNlbGYucHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKLQotICAgIEB0ZXN0Y2FzZSgyMDcpCi0gICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3NoIikKLSAgICBkZWYgdGVzdF9zdWRva3Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgotICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5CmluZGV4IGJkOWRiYTMuLjAwM2ZlZmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29ubm1hbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nvbm5tYW4ucHkKQEAgLTI3LDUgKzI3LDUgQEAKICAgICBkZWYgdGVzdF9jb25ubWFuZF9ydW5uaW5nKHNlbGYpOgogICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbY11vbm5tYW5kJykKICAgICAgICAgaWYgc3RhdHVzICE9IDA6Ci0gICAgICAgICAgICBwcmludCBzZWxmLnNlcnZpY2Vfc3RhdHVzKCJjb25ubWFuIikKKyAgICAgICAgICAgIHByaW50KHNlbGYuc2VydmljZV9zdGF0dXMoImNvbm5tYW4iKSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gY29ubm1hbmQgcHJvY2VzcyBydW5uaW5nIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5weQppbmRleCBmM2EyMjczLi5mMzg5MjI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnB5CkBAIC0zLDQgKzMsNCBAQAogb3Muc3lzdGVtKCd0b3VjaCAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCiAKIGEgPSA5LjAxZSsyMSAtIDkuMDFlKzIxICsgMC4wMQotcHJpbnQgInRoZSB2YWx1ZSBvZiBhIGlzICVzIiAlIGEKK3ByaW50KCJ0aGUgdmFsdWUgb2YgYSBpcyAlcyIgJSBhKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wYXJzZWxvZ3MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weQppbmRleCBkZWM5ZWJlLi44ZWZlMmQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weQpAQCAtNTUsMTggKzU1LDI1IEBACiAgICAgJ0NvdWxkIG5vdCBlbmFibGUgUG93ZXJCdXR0b24gZXZlbnQnLAogICAgICdwcm9iZSBvZiBMTlhQV1JCTjowMCBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAogICAgICdwbWRfc2V0X2h1Z2U6IENhbm5vdCBzYXRpc2Z5JywKKyAgICAnZmFpbGVkIHRvIHNldHVwIGNhcmQgZGV0ZWN0IGdwaW8nLAorICAgICdhbWRfbmI6IENhbm5vdCBlbnVtZXJhdGUgQU1EIG5vcnRoYnJpZGdlcycsCisgICAgJ2ZhaWxlZCB0byByZXRyaWV2ZSBsaW5rIGluZm8sIGRpc2FibGluZyBlRFAnLAogXSArIGNvbW1vbl9lcnJvcnMKIAogcWVtdXg4Nl9jb21tb24gPSBbCiAgICAgJ3dyb25nIEVMRiBjbGFzcycsCiAgICAgImZhaWwgdG8gYWRkIE1NQ09ORklHIGluZm9ybWF0aW9uLCBjYW4ndCBhY2Nlc3MgZXh0ZW5kZWQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdW5kZXIgdGhpcyBicmlkZ2UuIiwKICAgICAiY2FuJ3QgY2xhaW0gQkFSICIsCisgICAgJ2FtZF9uYjogQ2Fubm90IGVudW1lcmF0ZSBBTUQgbm9ydGhicmlkZ2VzJywKKyAgICAndXZlc2FmYjogNTAwMCBtcyB0YXNrIHRpbWVvdXQsIGluZmluaXRlbHkgd2FpdGluZycsCisgICAgJ3RzYzogSFBFVC9QTVRJTUVSIGNhbGlicmF0aW9uIGZhaWxlZCcsCiBdICsgY29tbW9uX2Vycm9ycwogCiBpZ25vcmVfZXJyb3JzID0geyAKICAgICAnZGVmYXVsdCcgOiBjb21tb25fZXJyb3JzLAogICAgICdxZW11eDg2JyA6IFsKICAgICAgICAgJ0ZhaWxlZCB0byBhY2Nlc3MgcGVyZmN0ciBtc3IgKE1TUicsCisgICAgICAgICdwY2kgMDAwMDowMDowMC4wOiBbRmlybXdhcmUgQnVnXTogcmVnIDB4Li46IGludmFsaWQgQkFSIChjYW5cJ3Qgc2l6ZSknLAogICAgICAgICBdICsgcWVtdXg4Nl9jb21tb24sCiAgICAgJ3FlbXV4ODYtNjQnIDogcWVtdXg4Nl9jb21tb24sCiAgICAgJ3FlbXVtaXBzJyA6IFsKQEAgLTgxLDE2ICs4OCwyOCBAQAogICAgICAgICAnaG9zdCBzaWRlIDgwLXdpcmUgY2FibGUgZGV0ZWN0aW9uIGZhaWxlZCwgbGltaXRpbmcgbWF4IHNwZWVkJywKICAgICAgICAgJ21vZGUgIjY0MHg0ODAiIHRlc3QgZmFpbGVkJywKICAgICAgICAgJ0ZhaWxlZCB0byBsb2FkIG1vZHVsZSAiZ2x4IicsCisgICAgICAgICdjYW5cJ3QgaGFuZGxlIEJBUiBhYm92ZSA0R0InLAorICAgICAgICAnQ2Fubm90IHJlc2VydmUgTGVnYWN5IElPJywKICAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCiAgICAgJ3FlbXVhcm0nIDogWwogICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowNSBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAogICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowYiBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAotICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJworICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJywKKyAgICAgICAgJ09GOiBhbWJhX2RldmljZV9hZGQoKSBmYWlsZWQgKC0xOSkgZm9yIC9hbWJhL3NtY0AxMDEwMDAwMCcsCisgICAgICAgICdPRjogYW1iYV9kZXZpY2VfYWRkKCkgZmFpbGVkICgtMTkpIGZvciAvYW1iYS9tcG1jQDEwMTEwMDAwJywKKyAgICAgICAgJ09GOiBhbWJhX2RldmljZV9hZGQoKSBmYWlsZWQgKC0xOSkgZm9yIC9hbWJhL3NjdGxAMTAxZTAwMDAnLAorICAgICAgICAnT0Y6IGFtYmFfZGV2aWNlX2FkZCgpIGZhaWxlZCAoLTE5KSBmb3IgL2FtYmEvd2F0Y2hkb2dAMTAxZTEwMDAnLAorICAgICAgICAnT0Y6IGFtYmFfZGV2aWNlX2FkZCgpIGZhaWxlZCAoLTE5KSBmb3IgL2FtYmEvc2NpQDEwMWYwMDAwJywKKyAgICAgICAgJ09GOiBhbWJhX2RldmljZV9hZGQoKSBmYWlsZWQgKC0xOSkgZm9yIC9hbWJhL3NzcEAxMDFmNDAwMCcsCisgICAgICAgICdPRjogYW1iYV9kZXZpY2VfYWRkKCkgZmFpbGVkICgtMTkpIGZvciAvYW1iYS9mcGdhL3NjaUBhMDAwJywKKyAgICAgICAgJ0ZhaWxlZCB0byBpbml0aWFsaXplIFwnL2FtYmEvdGltZXJAMTAxZTMwMDBcJzogLTIyJywKKyAgICAgICAgJ2ppdHRlcmVudHJvcHk6IEluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoIGhvc3Qgbm90IGNvbXBsaWFudCB3aXRoIHJlcXVpcmVtZW50czogMicsCiAgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAogICAgICdxZW11YXJtNjQnIDogWwogICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCiAgICAgICAgICcoRUUpIFNlcnZlciB0ZXJtaW5hdGVkIHdpdGggZXJyb3IgKDEpLiBDbG9zaW5nIGxvZyBmaWxlLicsCiAgICAgICAgICdkbWk6IEZpcm13YXJlIHJlZ2lzdHJhdGlvbiBmYWlsZWQuJywKKyAgICAgICAgJ2lycTogdHlwZSBtaXNtYXRjaCwgZmFpbGVkIHRvIG1hcCBod2lycS0yNyBmb3IgL2ludGMnLAogICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKICAgICAnZW1lbmxvdycgOiBbCiAgICAgICAgICdbRmlybXdhcmUgQnVnXTogQUNQSTogTm8gX0JRQyBtZXRob2QsIGNhbm5vdCBkZXRlcm1pbmUgaW5pdGlhbCBicmlnaHRuZXNzJywKQEAgLTExMCwxMSArMTI5LDE5IEBACiAgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSBwc2JkcnYnLAogICAgICAgICAnKEVFKSBvcGVuIC9kZXYvZmIwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JywKICAgICAgICAgJyhFRSkgQUlHTFg6IHJldmVydGluZyB0byBzb2Z0d2FyZSByZW5kZXJpbmcnLAorICAgICAgICAnZG1pOiBGaXJtd2FyZSByZWdpc3RyYXRpb24gZmFpbGVkLicsCisgICAgICAgICdpb3JlbWFwIGVycm9yIGZvciAweDc4JywKICAgICAgICAgXSArIHg4Nl9jb21tb24sCiAgICAgJ2ludGVsLWNvcmVpNy02NCcgOiB4ODZfY29tbW9uLAogICAgICdjcm93bmJheScgOiB4ODZfY29tbW9uLAogICAgICdnZW5lcmljeDg2JyA6IHg4Nl9jb21tb24sCi0gICAgJ2dlbmVyaWN4ODYtNjQnIDogeDg2X2NvbW1vbiwKKyAgICAnZ2VuZXJpY3g4Ni02NCcgOiBbCisgICAgICAgICdEaXJlY3QgZmlybXdhcmUgbG9hZCBmb3IgaTkxNScsCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBpOTE1JywKKyAgICAgICAgJ0ZhaWxlZCB0byBmZXRjaCBHdUMnLAorICAgICAgICAnRmFpbGVkIHRvIGluaXRpYWxpemUgR3VDJywKKyAgICAgICAgJ1RoZSBkcml2ZXIgaXMgYnVpbHQtaW4sIHNvIHRvIGxvYWQgdGhlIGZpcm13YXJlIHlvdSBuZWVkIHRvJywKKyAgICAgICAgXSArIHg4Nl9jb21tb24sCiAgICAgJ2VkZ2Vyb3V0ZXInIDogWwogICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCiAgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLApAQCAtMTUzLDYgKzE4MCw5IEBACiAgICAgZGVmIGdldE1hY2hpbmUoc2VsZik6CiAgICAgICAgIHJldHVybiBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKIAorICAgIGRlZiBnZXRXb3JrZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisKICAgICAjZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIENQVSBvZiB0aGUgbWFjaGluZSB0byBkaXNwbGF5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dC4gVGhpcyBpbmZvIG1pZ2h0IGJlIHVzZWZ1bCBpbiBzb21lIGNhc2VzLgogICAgIGRlZiBnZXRIYXJkd2FyZUluZm8oc2VsZik6CiAgICAgICAgIGh3aSA9ICIiCkBAIC0xOTAsMTYgKzIyMCwxOSBAQAogCiAgICAgI2NvcHkgdGhlIGxvZyBmaWxlcyB0byBiZSBwYXJzZWQgbG9jYWxseQogICAgIGRlZiB0cmFuc2Zlcl9sb2dzKHNlbGYsIGxvZ19saXN0KToKLSAgICAgICAgdGFyZ2V0X2xvZ3MgPSAndGFyZ2V0X2xvZ3MnCisgICAgICAgIHdvcmtkaXIgPSBzZWxmLmdldFdvcmtkaXIoKQorICAgICAgICBzZWxmLnRhcmdldF9sb2dzID0gd29ya2RpciArICcvJyArICd0YXJnZXRfbG9ncycKKyAgICAgICAgdGFyZ2V0X2xvZ3MgPSBzZWxmLnRhcmdldF9sb2dzCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfbG9ncyk6CiAgICAgICAgICAgICBvcy5tYWtlZGlycyh0YXJnZXRfbG9ncykKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYudGFyZ2V0X2xvZ3MgKyAiLyoiKQogICAgICAgICBmb3IgZiBpbiBsb2dfbGlzdDoKICAgICAgICAgICAgIHNlbGYudGFyZ2V0LmNvcHlfZnJvbShmLCB0YXJnZXRfbG9ncykKIAogICAgICNnZXQgdGhlIGxvY2FsIGxpc3Qgb2YgbG9ncwogICAgIGRlZiBnZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZiwgbG9nX2xvY2F0aW9ucyk6CiAgICAgICAgIHNlbGYudHJhbnNmZXJfbG9ncyhzZWxmLmdldExvZ0xpc3QobG9nX2xvY2F0aW9ucykpCi0gICAgICAgIGxvZ3MgPSBbIG9zLnBhdGguam9pbigndGFyZ2V0X2xvZ3MnLGYpIGZvciBmIGluIG9zLmxpc3RkaXIoJ3RhcmdldF9sb2dzJykgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKCd0YXJnZXRfbG9ncycsZikpIF0KKyAgICAgICAgbG9ncyA9IFsgb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X2xvZ3MsIGYpIGZvciBmIGluIG9zLmxpc3RkaXIoc2VsZi50YXJnZXRfbG9ncykgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X2xvZ3MsIGYpKSBdCiAgICAgICAgIHJldHVybiBsb2dzCiAKICAgICAjYnVpbGQgdGhlIGdyZXAgY29tbWFuZCB0byBiZSB1c2VkIHdpdGggZmlsdGVycyBhbmQgZXhjbHVzaW9ucwpAQCAtMjM4LDcgKzI3MSw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSBOb25lCiAgICAgICAgICAgICB0aGVncmVwID0gc2VsZi5idWlsZF9ncmVwY21kKGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9nKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHRoZWdyZXAsIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQodGhlZ3JlcCwgc2hlbGw9VHJ1ZSkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgaWYgKHJlc3VsdCBpcyBub3QgTm9uZSk6CkBAIC0yNDYsNyArMjc5LDcgQEAKICAgICAgICAgICAgICAgICByZXogPSByZXN1bHQuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICAgZm9yIHhyZXogaW4gcmV6OgogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmVwX291dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZ3JlcCcsICctRicsIHhyZXosICctQicsIHN0cihsaW5lc19iZWZvcmUpLCAnLUEnLCBzdHIobGluZXNfYWZ0ZXIpLCBsb2ddKQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcF9vdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dyZXAnLCAnLUYnLCB4cmV6LCAnLUInLCBzdHIobGluZXNfYmVmb3JlKSwgJy1BJywgc3RyKGxpbmVzX2FmdGVyKSwgbG9nXSkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tsb2cucmVwbGFjZSgndGFyZ2V0X2xvZ3MvJywnJyldW3hyZXpdPWdyZXBfb3V0cHV0CkBAIC0yNjIsNyArMjk1LDcgQEAKICAgICAgICAgc2VsZi53cml0ZV9kbWVzZygpCiAgICAgICAgIGxvZ19saXN0ID0gc2VsZi5nZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZi5sb2dfbG9jYXRpb25zKQogICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlX2xvZ3Moc2VsZi5lcnJvcnMsIHNlbGYuaWdub3JlX2Vycm9ycywgbG9nX2xpc3QpCi0gICAgICAgIHByaW50IHNlbGYuZ2V0SGFyZHdhcmVJbmZvKCkKKyAgICAgICAgcHJpbnQoc2VsZi5nZXRIYXJkd2FyZUluZm8oKSkKICAgICAgICAgZXJyY291bnQgPSAwCiAgICAgICAgIGZvciBsb2cgaW4gcmVzdWx0OgogICAgICAgICAgICAgc2VsZi5tc2cgKz0gIkxvZzogIitsb2crIlxuIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5CmluZGV4IDgwYzQ2MDEuLjBmMjc0NDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGluZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkKQEAgLTE0LDcgKzE0LDcgQEAKICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgNjAKICAgICAgICAgd2hpbGUgY291bnQgPCA1IGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CiAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigicGluZyAtYyAxICVzIiAlIHNlbGYudGFyZ2V0LmlwLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgb3V0cHV0ICs9IHByb2MuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgb3V0cHV0ICs9IHByb2MuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgIGlmIHByb2MucG9sbCgpID09IDA6CiAgICAgICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcHl0aG9uLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKaW5kZXggMjZlZGI3YS4uMjlhMjMxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKQEAgLTQsNyArNCw3IEBACiBmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgogCiBkZWYgc2V0VXBNb2R1bGUoKToKLSAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJweXRob24iKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJweXRob24tY29yZSIpOgogICAgICAgICBza2lwTW9kdWxlKCJObyBweXRob24gcGFja2FnZSBpbiB0aGUgaW1hZ2UiKQogCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcnBtLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKaW5kZXggNjI0YzUxNS4uN2Y1MTRjYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKQEAgLTUxLDEyICs1MSwzMiBAQAogICAgIEB0ZXN0Y2FzZSgxMDk2KQogICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCiAgICAgZGVmIHRlc3RfcnBtX3F1ZXJ5X25vbnJvb3Qoc2VsZik6Ci0gICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VzZXJhZGQgdGVzdDEnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdHVzID09IDAsIG1zZz0iRmFpbGVkIHRvIGNyZWF0ZSBuZXcgdXNlcjogIiArIG91dHB1dCkKLSAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBpZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnKHRlc3QxKScgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBleGVjdXRlIGFzIG5ldyB1c2VyIikKLSAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBycG0gLXFhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzOiAlcy4gQ2Fubm90IHJ1biBycG0gLXFhOiAlcyIgJSAoc3RhdHVzLCBvdXRwdXQpKQorCisgICAgICAgIGRlZiBzZXRfdXBfdGVzdF91c2VyKHUpOgorICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiaWQgLXUgJXMiICUgdSkKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigidXNlcmFkZCAlcyIgJSB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0dXMgPT0gMCwgbXNnPSJGYWlsZWQgdG8gY3JlYXRlIG5ldyB1c2VyOiAiICsgb3V0cHV0KQorCisgICAgICAgIGRlZiBleGVjX2FzX3Rlc3RfdXNlcih1KToKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInN1IC1jIGlkICVzIiAlIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIih7MH0pIi5mb3JtYXQodSkgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBleGVjdXRlIGFzIG5ldyB1c2VyIikKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInN1IC1jIFwicnBtIC1xYVwiICVzICIgJSB1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzOiAlcy4gQ2Fubm90IHJ1biBycG0gLXFhOiAlcyIgJSAoc3RhdHVzLCBvdXRwdXQpKQorCisgICAgICAgIGRlZiB1bnNldF91cF90ZXN0X3VzZXIodSk6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJ1c2VyZGVsIC1yICVzIiAlIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdHVzID09IDAsIG1zZz0iRmFpbGVkIHRvIGVyYXNlIHVzZXI6ICVzIiAlIG91dHB1dCkKKworICAgICAgICB0dXNlciA9ICd0ZXN0MScKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXRfdXBfdGVzdF91c2VyKHR1c2VyKQorICAgICAgICAgICAgZXhlY19hc190ZXN0X3VzZXIodHVzZXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB1bnNldF91cF90ZXN0X3VzZXIodHVzZXIpCiAKICAgICBAdGVzdGNhc2UoMTk1KQogICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3JwbV9pbnN0YWxsJykKQEAgLTk4LDQgKzExOCwzIEBACiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CiAgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigncm0gLWYgL3RtcC9ycG0tZG9jLnJwbScpCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NtYXJ0LnB5CmluZGV4IDEyNmQ2MTQuLjZjZGIxMGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zbWFydC5weQpAQCAtMSw1ICsxLDcgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHJlCitpbXBvcnQgb2UKK2ltcG9ydCBzdWJwcm9jZXNzCiBmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCiBmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgogZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCkBAIC03LDcgKzksNyBAQAogZGVmIHNldFVwTW9kdWxlKCk6CiAgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CiAgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZmVhdHVyZSIpCi0gICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic21hcnQiKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJzbWFydHBtIik6CiAgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQogICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKICAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQpAQCAtNTMsOSArNTUsNTAgQEAKIGNsYXNzIFNtYXJ0UmVwb1Rlc3QoU21hcnRUZXN0KToKIAogICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjcmVhdGVfaW5kZXgoc2VsZiwgYXJnKToKKyAgICAgICAgaW5kZXhfY21kID0gYXJnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyAnJXMnIC4uLiIgJSBpbmRleF9jbWQpCisgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChpbmRleF9jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmV0dXJuKCJJbmRleCBjcmVhdGlvbiBjb21tYW5kICclcycgZmFpbGVkIHdpdGggcmV0dXJuIGNvZGUgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKSkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgYmIubm90ZShyZXN1bHQpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKICAgICAgICAgc2VsZi5yZXBvbGlzdCA9IFtdCi0gICAgICAgIHNlbGYucmVwb19zZXJ2ZXIgPSBIVFRQU2VydmljZShvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnNlcnZlcl9pcCkKKworICAgICAgICAjIEluZGV4IFJQTXMKKyAgICAgICAgcnBtX2NyZWF0ZXJlcG8gPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImNyZWF0ZXJlcG8iKQorICAgICAgICBpbmRleF9jbWRzID0gW10KKyAgICAgICAgcnBtX2RpcnNfZm91bmQgPSBGYWxzZQorICAgICAgICBhcmNocyA9IChvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgorICAgICAgICAgICAgcnBtX2RpciA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSX1JQTScsIFRydWUpLCBhcmNoKQorICAgICAgICAgICAgaWR4X3BhdGggPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignV09SS0RJUicsIFRydWUpLCAncnBtJywgYXJjaCkKKyAgICAgICAgICAgIGRiX3BhdGggPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignV09SS0RJUicsIFRydWUpLCAncnBtZGInLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocnBtX2Rpcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRiX3BhdGgpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShkYnBhdGgsIFRydWUpCisgICAgICAgICAgICBsb2NrZmlsZW5hbWUgPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSX1JQTScsIFRydWUpICsgIi9ycG0ubG9jayIKKyAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGVuYW1lLCBGYWxzZSkKKyAgICAgICAgICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShycG1fZGlyLCBpZHhfcGF0aCkKKyAgICAgICAgICAgICMgRnVsbCBpbmRleGVzIG92ZXJsb2FkIGEgMjU2TUIgaW1hZ2Ugc28gcmVkdWNlIHRoZSBudW1iZXIgb2YgcnBtcworICAgICAgICAgICAgIyBpbiB0aGUgZmVlZC4gRmlsdGVyIHRvIHAqIHNpbmNlIHdlIHVzZSB0aGUgcHNwbGFzaCBwYWNrYWdlcyBhbmQKKyAgICAgICAgICAgICMgdGhpcyBsZWF2ZXMgc29tZSBhbGxhcmNoIGFuZCBtYWNoaW5lIGFyY2ggcGFja2FnZXMgdG9vLgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGlkeF9wYXRoICsgIiovW2Etb3Etel0qLnJwbSIpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgaW5kZXhfY21kcy5hcHBlbmQoIiVzIC0tZGJwYXRoICVzIC0tdXBkYXRlIC1xICVzIiAlIChycG1fY3JlYXRlcmVwbywgZGJfcGF0aCwgaWR4X3BhdGgpKQorICAgICAgICAgICAgcnBtX2RpcnNfZm91bmQgPSBUcnVlCisgICAgICAgICAjIENyZWF0ZSByZXBvZGF0YcKsCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKGluZGV4X2NtZHMsIHNlbGYuY3JlYXRlX2luZGV4KQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlciA9IEhUVFBTZXJ2aWNlKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuc2VydmVyX2lwKQogICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0YXJ0KCkKIAogICAgIEBjbGFzc21ldGhvZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXNsb2cucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQppbmRleCAyNjAxZGQ5Li44ZjU1MDMyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQpAQCAtOSw3ICs5LDYgQEAKIGNsYXNzIFN5c2xvZ1Rlc3Qob2VSdW50aW1lVGVzdCk6CiAKICAgICBAdGVzdGNhc2UoMjAxKQotICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19oZWxwIikKICAgICBkZWYgdGVzdF9zeXNsb2dfcnVubmluZyhzZWxmKToKICAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCAtaSBbc115c2xvZ2QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJubyBzeXNsb2dkIHByb2Nlc3MsIHBzIG91dHB1dDogJXMiICUgc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQpWzFdKQpAQCAtMTksOCArMTgsMTYgQEAKICAgICBAdGVzdGNhc2UoMTE0OSkKICAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfcnVubmluZyIpCiAgICAgZGVmIHRlc3Rfc3lzbG9nX2xvZ2dlcihzZWxmKToKLSAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIHRlc3QgLWUgL3Zhci9sb2cvbWVzc2FnZXMgJiYgZ3JlcCBmb29iYXIgL3Zhci9sb2cvbWVzc2FnZXMgfHwgbG9ncmVhZCB8IGdyZXAgZm9vYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iVGVzdCBsb2cgc3RyaW5nIG5vdCBmb3VuZCBpbiAvdmFyL2xvZy9tZXNzYWdlcy4gT3V0cHV0OiAlcyAiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iQ2FuJ3QgbG9nIGludG8gc3lzbG9nLiBPdXRwdXQ6ICVzICIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZ3JlcCBmb29iYXIgL3Zhci9sb2cvbWVzc2FnZXMnKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIGlmIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCAiIikgPT0gInN5c3RlbWQiOgorICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2pvdXJuYWxjdGwgLW8gY2F0IHwgZ3JlcCBmb29iYXInKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dyZWFkIHwgZ3JlcCBmb29iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJUZXN0IGxvZyBzdHJpbmcgbm90IGZvdW5kIGluIC92YXIvbG9nL21lc3NhZ2VzIG9yIGxvZ3JlYWQuIE91dHB1dDogJXMgIiAlIG91dHB1dCkKIAogICAgIEB0ZXN0Y2FzZSgxMTUwKQogICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19ydW5uaW5nIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzdGVtZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzdGVtZC5weQppbmRleCAyYjJmMTBkLi44ZGU3OTljIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHNlbGYuc3lzdGVtY3RsKCctLXZlcnNpb24nKQogCiAgICAgQHRlc3RjYXNlKDU1MSkKLSAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1fYmFzaWMnKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfYmFzaWMnKQogICAgIGRlZiB0ZXN0X3N5c3RlbWRfbGlzdChzZWxmKToKICAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2xpc3QtdW5pdC1maWxlcycpCiAKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICAgICAgICAgaWYgY2hlY2tfbWF0Y2g6IGJyZWFrCiAgICAgICAgICMgcHV0IHRoZSBzdGFydHVwIHRpbWUgaW4gdGhlIHRlc3QgbG9nCiAgICAgICAgIGlmIGNoZWNrX21hdGNoOgotICAgICAgICAgICAgcHJpbnQgIiVzIiAlIGNoZWNrX21hdGNoCisgICAgICAgICAgICBwcmludCgiJXMiICUgY2hlY2tfbWF0Y2gpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJFcnJvciBhdCBvYnRhaW5pbmcgdGhlIGJvb3QgdGltZSBmcm9tIGpvdXJuYWxjdGwiKQogICAgICAgICBib290X3RpbWVfc2VjID0gMApAQCAtMTc0LDUgKzE3NCw1IEBACiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJFcnJvciB3aGVuIHBhcnNpbmcgdGltZSBmcm9tIGJvb3Qgc3RyaW5nIikKICAgICAgICAgI0Fzc2VydCB0aGUgdGFyZ2V0IGJvb3QgdGltZSBhZ2FpbnN0IHN5c3RlbWQncyB1bml0IHN0YXJ0IHRpbWVvdXQKICAgICAgICAgaWYgYm9vdF90aW1lX3NlYyA+IHN5c3RlbWRfVGltZW91dFN0YXJ0U2VjOgotICAgICAgICAgICAgcHJpbnQgIlRhcmdldCBib290IHRpbWUgJXMgZXhjZWVkcyBzeXN0ZW1kJ3MgVGltZW91dFN0YXJ0U2VjICVzIlwKLSAgICAgICAgICAgICAgICAgICAgJShib290X3RpbWVfc2VjLCBzeXN0ZW1kX1RpbWVvdXRTdGFydFNlYykKKyAgICAgICAgICAgIHByaW50KCJUYXJnZXQgYm9vdCB0aW1lICVzIGV4Y2VlZHMgc3lzdGVtZCdzIFRpbWVvdXRTdGFydFNlYyAlcyJcCisgICAgICAgICAgICAgICAgICAgICUoYm9vdF90aW1lX3NlYywgc3lzdGVtZF9UaW1lb3V0U3RhcnRTZWMpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkZ2FsY3VsYXRvci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGdhbGN1bGF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyZmE5YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGdhbGN1bGF0b3IucHkKQEAgLTAsMCArMSwyNyBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IChvZVNES1Rlc3QuaGFzUGFja2FnZSgiZ3RrKzMiKSBvciBvZVNES1Rlc3QuaGFzUGFja2FnZSgibGliZ3RrLTMuMCIpKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIGd0ayszIGluIG1hbmlmZXN0IikKKworY2xhc3MgR2FsY3VsYXRvclRlc3Qob2VTREtUZXN0KToKKyAgICBkZWYgdGVzdF9nYWxjdWxhdG9yKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9nYWxjdWxhdG9yLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lU0RLVGVzdC50Yy5zZGtlbnYsIG9lU0RLVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2dhbGN1bGF0b3IubW5pbS5vcmcvZG93bmxvYWRzL2dhbGN1bGF0b3ItMi4xLjQudGFyLmJ6MiIpCisKKyAgICAgICAgICAgIHByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICAgICAgICAgICMgcmVnZW5lcmF0ZSBjb25maWd1cmUgdG8gZ2V0IHN1cHBvcnQgZm9yIC0td2l0aC1saWJ0b29sLXN5c3Jvb3QKKyAgICAgICAgICAgIGxlZ2FjeV9wcmVjb25mPSgiYXV0b3JlY29uZiAtaSAtZiAtSSAke09FQ09SRV9UQVJHRVRfU1lTUk9PVH0vdXNyL3NoYXJlL2FjbG9jYWwgLUkgbTQ7IikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9qZWN0LnJ1bl9jb25maWd1cmUoZXh0cmFfY21kcz1sZWdhY3lfcHJlY29uZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkaXB0YWJsZXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQppbmRleCAwNjJlNTMxLi5mMGNiOGE0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQpAQCAtOCw3ICs4LDcgQEAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKICAgICAgICAgc2VsZi5wcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9pcHRhYmxlcy8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0xLjQuMTMudGFyLmJ6MiIpCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2lwdGFibGVzLTEuNC4xMy50YXIuYnoyIikKICAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQogCiAgICAgZGVmIHRlc3RfaXB0YWJsZXMoc2VsZik6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYTc3YzYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkc3Vkb2t1LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgotZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKLQotZGVmIHNldFVwTW9kdWxlKCk6Ci0gICAgaWYgbm90IG9lU0RLVGVzdC5oYXNQYWNrYWdlKCJndGtcKyIpOgotICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgZ3RrKyBpbiBtYW5pZmVzdCIpCi0KLWNsYXNzIFN1ZG9rdVRlc3Qob2VTREtUZXN0KToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgotICAgICAgICBzZWxmLnByb2plY3QgPSBTREtCdWlsZFByb2plY3Qob2VTREtUZXN0LnRjLnNka3Rlc3RkaXIgKyAiL3N1ZG9rdS8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKLSAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQotCi0gICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKLSAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nka2V4dC9kZXZ0b29sLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2RldnRvb2wucHkKaW5kZXggYzViYjMxMC4uNjVmNDFmNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2RldnRvb2wucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2RldnRvb2wucHkKQEAgLTEsMzIgKzEsMTA4IEBACiBpbXBvcnQgc2h1dGlsCi0KK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdXJsbGliLnJlcXVlc3QKIGZyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLRXh0VGVzdAogZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKIAogY2xhc3MgRGV2dG9vbFRlc3Qob2VTREtFeHRUZXN0KToKLQogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgogICAgICAgICBzZWxmLm15YXBwX3NyYyA9IG9zLnBhdGguam9pbihzZWxmLnRjLnNka2V4dGZpbGVzZGlyLCAibXlhcHAiKQogICAgICAgICBzZWxmLm15YXBwX2RzdCA9IG9zLnBhdGguam9pbihzZWxmLnRjLnNka3Rlc3RkaXIsICJteWFwcCIpCiAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLm15YXBwX3NyYywgc2VsZi5teWFwcF9kc3QpCiAKKyAgICAgICAgc2VsZi5teWFwcF9jbWFrZV9zcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50Yy5zZGtleHRmaWxlc2RpciwgIm15YXBwX2NtYWtlIikKKyAgICAgICAgc2VsZi5teWFwcF9jbWFrZV9kc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi50Yy5zZGt0ZXN0ZGlyLCAibXlhcHBfY21ha2UiKQorICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5teWFwcF9jbWFrZV9zcmMsIHNlbGYubXlhcHBfY21ha2VfZHN0KQorCisgICAgZGVmIF90ZXN0X2RldnRvb2xfYnVpbGQoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIGFkZCBteWFwcCAlcycgJSBkaXJlY3RvcnkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCBidWlsZCBteWFwcCcpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KGUub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIHJlc2V0IG15YXBwJykKKyAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIHJlc2V0IG15YXBwJykKKworICAgIGRlZiBfdGVzdF9kZXZ0b29sX2J1aWxkX3BhY2thZ2Uoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIGFkZCBteWFwcCAlcycgJSBkaXJlY3RvcnkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCBwYWNrYWdlIG15YXBwJykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoZS5vdXRwdXQpCisgICAgICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgcmVzZXQgbXlhcHAnKQorICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgcmVzZXQgbXlhcHAnKQorCiAgICAgZGVmIHRlc3RfZGV2dG9vbF9sb2NhdGlvbihzZWxmKToKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fcnVuKCd3aGljaCBkZXZ0b29sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RhcnRzd2l0aChzZWxmLnRjLnNka3Rlc3RkaXIpLCBUcnVlLCBcCiAgICAgICAgICAgICBtc2c9IlNlZW1zIHRoYXQgZGV2dG9vbCBpc24ndCB0aGUgZVNESyBvbmU6ICVzIiAlIG91dHB1dCkKLQorICAgIAogICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X2RldnRvb2xfbG9jYXRpb24nKQogICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX3Jlc2V0KHNlbGYpOgogICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgYWRkIG15YXBwICVzJyAlIHNlbGYubXlhcHBfZHN0KQogICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgcmVzZXQgbXlhcHAnKQotCisgICAgCisgICAgQHRlc3RjYXNlKDE0NzMpCiAgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfZGV2dG9vbF9sb2NhdGlvbicpCi0gICAgZGVmIHRlc3RfZGV2dG9vbF9idWlsZChzZWxmKToKLSAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIGFkZCBteWFwcCAlcycgJSBzZWxmLm15YXBwX2RzdCkKLSAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIGJ1aWxkIG15YXBwJykKLSAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIHJlc2V0IG15YXBwJykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2J1aWxkX21ha2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZGV2dG9vbF9idWlsZChzZWxmLm15YXBwX2RzdCkKKyAgICAKKyAgICBAdGVzdGNhc2UoMTQ3NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9kZXZ0b29sX2xvY2F0aW9uJykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2J1aWxkX2VzZGtfcGFja2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9kZXZ0b29sX2J1aWxkX3BhY2thZ2Uoc2VsZi5teWFwcF9kc3QpCisKKyAgICBAdGVzdGNhc2UoMTQ3OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9kZXZ0b29sX2xvY2F0aW9uJykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2J1aWxkX2NtYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2RldnRvb2xfYnVpbGQoc2VsZi5teWFwcF9jbWFrZV9kc3QpCisgICAgCisgICAgQHRlc3RjYXNlKDE0ODIpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfZGV2dG9vbF9sb2NhdGlvbicpCisgICAgZGVmIHRlc3RfZXh0ZW5kX2F1dG90b29sc19yZWNpcGVfY3JlYXRpb24oc2VsZik6CisgICAgICAgIHJlcSA9ICdodHRwczovL2dpdGh1Yi5jb20vcmRmYS9saWJyZGZhJworICAgICAgICByZWNpcGUgPSAiYmJleGFtcGxlIgorICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgYWRkICVzICVzJyAlIChyZWNpcGUsIHJlcSkgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgYnVpbGQgJXMnICUgcmVjaXBlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludChlLm91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCByZXNldCAlcycgJSByZWNpcGUpCisgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCByZXNldCAlcycgJSByZWNpcGUpCisKKyAgICBAdGVzdGNhc2UoMTQ4NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9kZXZ0b29sX2xvY2F0aW9uJykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2tlcm5lbG1vZHVsZShzZWxmKToKKyAgICAgICAgZG9jZmlsZSA9ICdodHRwczovL2dpdGh1Yi5jb20vdW1sYWV1dGUvdjRsMmxvb3BiYWNrLmdpdCcKKyAgICAgICAgcmVjaXBlID0gJ3Y0bDJsb29wYmFjay1kcml2ZXInCisgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCBhZGQgJXMgJXMnICUgKHJlY2lwZSwgZG9jZmlsZSkgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgYnVpbGQgJXMnICUgcmVjaXBlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludChlLm91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCByZXNldCAlcycgJSByZWNpcGUpCisgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCByZXNldCAlcycgJSByZWNpcGUpCisKKyAgICBAdGVzdGNhc2UoMTQ3OCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9kZXZ0b29sX2xvY2F0aW9uJykKKyAgICBkZWYgdGVzdF9yZWNpcGVzX2Zvcl9ub2RlanMoc2VsZik6CisgICAgICAgIHBhY2thZ2Vfbm9kZWpzID0gIm5wbTovL3JlZ2lzdHJ5Lm5wbWpzLm9yZztuYW1lPXdpbnN0b247dmVyc2lvbj0yLjIuMCIKKyAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIGFkZCAlcyAnICUgcGFja2FnZV9ub2RlanMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCBidWlsZCAlcyAnICUgcGFja2FnZV9ub2RlanMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KGUub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5fcnVuKCdkZXZ0b29sIHJlc2V0ICVzJyAlIHBhY2thZ2Vfbm9kZWpzKQorICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgcmVzZXQgJXMgJyUgcGFja2FnZV9ub2RlanMpCisKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgogICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYubXlhcHBfZHN0KQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYubXlhcHBfY21ha2VfZHN0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2ZpbGVzL215YXBwX2NtYWtlL0NNYWtlTGlzdHMudHh0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2ZpbGVzL215YXBwX2NtYWtlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDc3M2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGtleHQvZmlsZXMvbXlhcHBfY21ha2UvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZCAoVkVSU0lPTiAyLjYpCitwcm9qZWN0IChteWFwcCkKKyMgVGhlIHZlcnNpb24gbnVtYmVyLgorc2V0IChteWFwcF9WRVJTSU9OX01BSk9SIDEpCitzZXQgKG15YXBwX1ZFUlNJT05fTUlOT1IgMCkKKworIyBhZGQgdGhlIGV4ZWN1dGFibGUKK2FkZF9leGVjdXRhYmxlIChteWFwcCBteWFwcC5jKQorCitpbnN0YWxsKFRBUkdFVFMgbXlhcHAKKyAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGtleHQvZmlsZXMvbXlhcHBfY21ha2UvbXlhcHAuYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nka2V4dC9maWxlcy9teWFwcF9jbWFrZS9teWFwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjYzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGtleHQvZmlsZXMvbXlhcHBfY21ha2UvbXlhcHAuYwpAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcmludGYoIkhlbGxvIHdvcmxkXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L3Nka191cGRhdGUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGtleHQvc2RrX3VwZGF0ZS5weQppbmRleCA3YTJhNmZlLi4yYWRlODM5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGtleHQvc2RrX3VwZGF0ZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGtleHQvc2RrX3VwZGF0ZS5weQpAQCAtMzAsOSArMzAsNiBAQAogICAgIGRlZiB0ZXN0X3Nka191cGRhdGVfaHR0cChzZWxmKToKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fcnVuKCJkZXZ0b29sIHNkay11cGRhdGUgXCIlc1wiIiAlIHNlbGYuaHR0cF91cmwpCiAKLSAgICBkZWYgdGVzdF9zZGtfdXBkYXRlX2xvY2FsKHNlbGYpOgotICAgICAgICBvdXRwdXQgPSBzZWxmLl9ydW4oImRldnRvb2wgc2RrLXVwZGF0ZSBcIiVzXCIiICUgc2VsZi5wdWJsaXNoX2RpcikKLQogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgogICAgICAgICBzZWxmLmh0dHBfc2VydmljZS5zdG9wKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L190b2FzdGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkKaW5kZXggYzQyNDY1OS4uMTVlYTlkZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkKQEAgLTIsNyArMiw3IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBzaGxleCwgc3VicHJvY2VzcwotaW1wb3J0IHVybGxpYiwgY29tbWFuZHMsIHRpbWUsIGdldHBhc3MsIHJlLCBqc29uLCBzaGxleAoraW1wb3J0IHVybGxpYi5yZXF1ZXN0LCB1cmxsaWIucGFyc2UsIHVybGxpYi5lcnJvciwgc3VicHJvY2VzcywgdGltZSwgZ2V0cGFzcywgcmUsIGpzb24sIHNobGV4CiAKIGltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKIGZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0CkBAIC0yOTAsNyArMjkwLDcgQEAKICAgICAgICAgbGF5ZXJzID0gTGF5ZXIub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ2xheWVyX2luZGV4X3VybCcpCiAgICAgICAgIGNudF9lcnIgPSBbXQogICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgotICAgICAgICAgICAgcmVzcCA9IHVybGxpYi51cmxvcGVuKGxheWVyWydsYXllcl9pbmRleF91cmwnXSkKKyAgICAgICAgICAgIHJlc3AgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKGxheWVyWydsYXllcl9pbmRleF91cmwnXSkKICAgICAgICAgICAgIGlmIChyZXNwLmdldGNvZGUoKSAhPSAyMDApOgogICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGxheWVyWydpZCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgbGF5ZXIgaWQ6ICVzJyAlIGNudF9lcnIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weQppbmRleCBlMTA0NTVlLi4yNmM5M2Y5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Jhc2UucHkKQEAgLTI4LDE3ICsyOCw0NyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSJydW5UZXN0Iik6CiAgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQogICAgICAgICBzZWxmLmxvY2FsY29uZl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKQorICAgICAgICBzZWxmLmxvY2FsY29uZl9iYWNrdXAgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvbG9jYWwuYmsiKQogICAgICAgICBzZWxmLnRlc3RpbmNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9zZWxmdGVzdC5pbmMiKQogICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIHNlbGYubG9jYWxfYmJsYXllcnNfYmFja3VwID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25mL2JibGF5ZXJzLmJrIikKICAgICAgICAgc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuaW5jIikKICAgICAgICAgc2VsZi5tYWNoaW5laW5jX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvbWFjaGluZS5pbmMiKQogICAgICAgICBzZWxmLnRlc3RsYXllcl9wYXRoID0gb2VTZWxmVGVzdC50ZXN0bGF5ZXJfcGF0aAogICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQotICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cCA9IFtzZWxmLnRlc3RpbmNfcGF0aCwgc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIHNlbGYubWFjaGluZWluY19wYXRoXQorICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cCA9IFsKKyAgICAgICAgICAgIHNlbGYudGVzdGluY19wYXRoLCBzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZWluY19wYXRoLCBzZWxmLmxvY2FsY29uZl9iYWNrdXAsCisgICAgICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX2JhY2t1cF0KICAgICAgICAgc3VwZXIob2VTZWxmVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZGRpcikKKyAgICAgICAgIyBDaGVjayBpZiBsb2NhbC5jb25mIG9yIGJibGF5ZXJzLmNvbmYgZmlsZXMgYmFja3VwIGV4aXN0cworICAgICAgICAjIGZyb20gYSBwcmV2aW91cyBmYWlsZWQgdGVzdCBhbmQgcmVzdG9yZSB0aGVtCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYubG9jYWxjb25mX2JhY2t1cCkgb3Igb3MucGF0aC5pc2ZpbGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb2NhbF9iYmxheWVyc19iYWNrdXApOgorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkZvdW5kIGEgbG9jYWwuY29uZiBhbmQvb3IgYmJsYXllcnMuY29uZiBiYWNrdXAgXAorZnJvbSBhIHByZXZpb3VzbHkgYWJvcnRlZCB0ZXN0LiBSZXN0b3JpbmcgdGhlc2UgZmlsZXMgbm93LCBidXQgdGVzdHMgc2hvdWxkIFwKK2JlIHJlLWV4ZWN1dGVkIGZyb20gYSBjbGVhbiBlbnZpcm9ubWVudCB0byBlbnN1cmUgYWNjdXJhdGUgcmVzdWx0cy4iKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLmxvY2FsY29uZl9iYWNrdXAsIHNlbGYubG9jYWxjb25mX3BhdGgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLmxvY2FsX2JibGF5ZXJzX2JhY2t1cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhbF9iYmxheWVyc19wYXRoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgYmFja3VwIGxvY2FsLmNvbmYgYW5kIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLmxvY2FsY29uZl9wYXRoLCBzZWxmLmxvY2FsY29uZl9iYWNrdXApCisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5sb2NhbF9iYmxheWVyc19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYWxfYmJsYXllcnNfYmFja3VwKQorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkNyZWF0aW5nIGxvY2FsLmNvbmYgYW5kIGJibGF5ZXJzLmNvbmYgYmFja3Vwcy4iKQogICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcHJldmlvdXMgdGVzdCBsZWZ0IGFyb3VuZCBpbiBjb25maWcgb3IgaW5jIGZpbGVzCiAgICAgICAgICMgaWYgaXQgZmFpbGVkIHNvIHdlIG5lZWQgYSBmcmVzaCBzdGFydAogICAgICAgICB0cnk6CkBAIC02Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgbWFjaGluZSA9IGN1c3RvbW1hY2hpbmUKICAgICAgICAgICAgIG1hY2hpbmVfY29uZiA9ICdNQUNISU5FID8/PSAiJXMiXG4nICUgbWFjaGluZQogICAgICAgICAgICAgc2VsZi5zZXRfbWFjaGluZV9jb25maWcobWFjaGluZV9jb25mKQotICAgICAgICAgICAgcHJpbnQgJ01BQ0hJTkU6ICVzJyAlIG1hY2hpbmUKKyAgICAgICAgICAgIHByaW50KCdNQUNISU5FOiAlcycgJSBtYWNoaW5lKQogCiAgICAgICAgICMgdGVzdHMgbWlnaHQgbmVlZCB0aGVpciBvd24gc2V0dXAKICAgICAgICAgIyBidXQgaWYgdGhleSBvdmVyd3JpdGUgdGhpcyBvbmUgdGhleSBoYXZlIHRvIGNhbGwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JidGVzdHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5CmluZGV4IDI2NzI4YTQuLmJhYWUxZTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JidGVzdHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weQpAQCAtMjksNyArMjksNyBAQAogICAgIGRlZiB0ZXN0X2V2ZW50X2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUICs9IFwidGVzdF9ldmVudHNcIiIpCiAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ200LW5hdGl2ZScpCi0gICAgICAgIGZpbmRfYnVpbGRfc3RhcnRlZCA9IHJlLnNlYXJjaCgiTk9URTogVGVzdCBmb3IgYmJcLmV2ZW50XC5CdWlsZFN0YXJ0ZWQoXG4uKikqTk9URTogUHJlcGFyaW5nIFJ1blF1ZXVlIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZmluZF9idWlsZF9zdGFydGVkID0gcmUuc2VhcmNoKCJOT1RFOiBUZXN0IGZvciBiYlwuZXZlbnRcLkJ1aWxkU3RhcnRlZChcbi4qKSpOT1RFOiBFeGVjdXRpbmcgUnVuUXVldWUgVGFza3MiLCByZXN1bHQub3V0cHV0KQogICAgICAgICBmaW5kX2J1aWxkX2NvbXBsZXRlZCA9IHJlLnNlYXJjaCgiVGFza3MgU3VtbWFyeTouKihcbi4qKSpOT1RFOiBUZXN0IGZvciBiYlwuZXZlbnRcLkJ1aWxkQ29tcGxldGVkIiwgcmVzdWx0Lm91dHB1dCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfYnVpbGRfc3RhcnRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAgJSByZXN1bHQub3V0cHV0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9idWlsZF9jb21wbGV0ZWQsIG1zZyA9ICJNYXRjaCBmYWlsZWQgaW46XG4lcyIgJSByZXN1bHQub3V0cHV0KQpAQCAtNjQsMTIgKzY0LDE1IEBACiAKICAgICBAdGVzdGNhc2UoMTA4KQogICAgIGRlZiB0ZXN0X2ludmFsaWRfcGF0Y2goc2VsZik6CisgICAgICAgICMgVGhpcyBwYXRjaCBhbHJlYWR5IGV4aXN0cyBpbiBTUkNfVVJJIHNvIGFkZGluZyBpdCBhZ2FpbiB3aWxsIGNhdXNlIHRoZQorICAgICAgICAjIHBhdGNoIHRvIGZhaWwuCiAgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCAnU1JDX1VSSSArPSAiZmlsZTovL21hbi0xLjVoMS1tYWtlLnBhdGNoIicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUX3JlbW92ZSA9IFwicmVwb3J0LWVycm9yXCIiKQogICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtYW4gLWMgcGF0Y2gnLCBpZ25vcmVfc3RhdHVzPVRydWUpCiAgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnbWFuJykKICAgICAgICAgYml0YmFrZSgnLWNjbGVhbiBtYW4nKQogICAgICAgICBsaW5lID0gc2VsZi5nZXRsaW5lKHJlc3VsdCwgIkZ1bmN0aW9uIGZhaWxlZDogcGF0Y2hfZG9fcGF0Y2giKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZSBhbmQgbGluZS5zdGFydHN3aXRoKCJFUlJPUjoiKSwgbXNnID0gIlRob3VnaCBubyBtYW4tMS41aDEtbWFrZS5wYXRjaCBmaWxlIGV4aXN0cywgYml0YmFrZSBkaWRuJ3Qgb3V0cHV0IGFueSBlcnIuIG1lc3NhZ2UuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZSBhbmQgbGluZS5zdGFydHN3aXRoKCJFUlJPUjoiKSwgbXNnID0gIlJlcGVhdGVkIHBhdGNoIGFwcGxpY2F0aW9uIGRpZG4ndCBmYWlsLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKIAogICAgIEB0ZXN0Y2FzZSgxMzU0KQogICAgIGRlZiB0ZXN0X2ZvcmNlX3Rhc2tfMShzZWxmKToKQEAgLTEzMSw2ICsxMzQsNyBAQAogICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgZGF0YSkKICAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgogU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK0lOSEVSSVRfcmVtb3ZlID0gXCJyZXBvcnQtZXJyb3JcIgogIiIiKQogICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiZG93bmxvYWQtc2VsZnRlc3QiKSkKIApAQCAtMTQxLDcgKzE0NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJDb21tYW5kIHN1Y2NlZGVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgZmFpbGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGZXRjaGVyIGZhaWx1cmU6IFVuYWJsZSB0byBmaW5kIGZpbGUgZmlsZTovL2ludmFsaWQgYW55d2hlcmUuIFRoZSBwYXRocyB0aGF0IHdlcmUgc2VhcmNoZWQgd2VyZTonIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKIGRvZXNuJ3QgZXhpc3QsIHlldCBubyBlcnJvciBtZXNzYWdlIGVuY291bnRlcmVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZShyZXN1bHQsICdGdW5jdGlvbiBmYWlsZWQ6IEZldGNoZXIgZmFpbHVyZSBmb3IgVVJMOiBcJ2ZpbGU6Ly9pbnZhbGlkXCcuIFVuYWJsZSB0byBmZXRjaCBVUkwgZnJvbSBhbnkgc291cmNlLicpCisgICAgICAgIGxpbmUgPSBzZWxmLmdldGxpbmUocmVzdWx0LCAnRmV0Y2hlciBmYWlsdXJlIGZvciBVUkw6IFwnZmlsZTovL2ludmFsaWRcJy4gVW5hYmxlIHRvIGZldGNoIFVSTCBmcm9tIGFueSBzb3VyY2UuJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiRVJST1I6IiksIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKIGRvZXNuJ3QgZXhpc3QsIHlldCBmZXRjaGVyIGRpZG4ndCByZXBvcnQgYW55IGVycm9yLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKIApAQCAtMjEyLDYgKzIxNiw3IEBACiAgICAgZGVmIHRlc3RfY29udGludWUoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKIFNTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitJTkhFUklUX3JlbW92ZSA9IFwicmVwb3J0LWVycm9yXCIKICIiIikKICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImRvd25sb2FkLXNlbGZ0ZXN0IikpCiAgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCJcbmRvX2ZhaWxfdGFzayAoKSB7XG5leGl0IDEgXG59XG5cbmFkZHRhc2sgZG9fZmFpbF90YXNrIGJlZm9yZSBkb19mZXRjaFxuIiApCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkKaW5kZXggMzVkNWRmZC4uOTQ4Nzg5OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRvcHRpb25zLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weQpAQCAtMzAsMjIgKzMwLDYgQEAKICAgICAgICAgaW5jcmVtZW50YWxfcmVtb3ZlZCA9IHJlLnNlYXJjaCgiTk9URTogbG9hZCBvbGQgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbFxuTk9URTogY3JlYXRpbmcgbmV3IGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGwoXG4uKikqTk9URTogaW5jcmVtZW50YWwgcmVtb3ZlZDouKm9wZW5zc2gtc3NoZC0uKiIsIGxvZ19kYXRhX3JlbW92ZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNyZW1lbnRhbF9yZW1vdmVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICUgbG9nX2RhdGFfcmVtb3ZlZCkKIAotICAgIEB0ZXN0Y2FzZSg5MjUpCi0gICAgZGVmIHRlc3Rfcm1fb2xkX2ltYWdlKHNlbGYpOgotICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLW1pbmltYWwiKQotICAgICAgICBkZXBsb3lkaXIgPSBnZXRfYmJfdmFyKCJERVBMT1lfRElSX0lNQUdFIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQotICAgICAgICBpbWFnZW5hbWUgPSBnZXRfYmJfdmFyKCJJTUFHRV9MSU5LX05BTUUiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCi0gICAgICAgIGRlcGxveWRpcl9maWxlcyA9IG9zLmxpc3RkaXIoZGVwbG95ZGlyKQotICAgICAgICB0cmFja19vcmlnaW5hbF9maWxlcyA9IFtdCi0gICAgICAgIGZvciBpbWFnZV9maWxlIGluIGRlcGxveWRpcl9maWxlczoKLSAgICAgICAgICAgIGlmIGltYWdlbmFtZSBpbiBpbWFnZV9maWxlIGFuZCBvcy5wYXRoLmlzbGluayhvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWFnZV9maWxlKSk6Ci0gICAgICAgICAgICAgICAgdHJhY2tfb3JpZ2luYWxfZmlsZXMuYXBwZW5kKG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VfZmlsZSkpKQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiUk1fT0xEX0lNQUdFID0gXCIxXCIiKQotICAgICAgICBiaXRiYWtlKCItQyByb290ZnMgY29yZS1pbWFnZS1taW5pbWFsIikKLSAgICAgICAgZGVwbG95ZGlyX2ZpbGVzID0gb3MubGlzdGRpcihkZXBsb3lkaXIpCi0gICAgICAgIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQgPSBbcGF0aCBmb3IgcGF0aCBpbiB0cmFja19vcmlnaW5hbF9maWxlcyBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpIGluIGRlcGxveWRpcl9maWxlc10KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfbm90X2V4cGVjdGVkLCBtc2c9IlxuVGhlIGZvbGxvd2luZyBpbWFnZSBmaWxlcyB3ZXJlIG5vdCByZW1vdmVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgcmVtYWluaW5nX25vdF9leHBlY3RlZCkpKQotCiAgICAgQHRlc3RjYXNlKDI4NikKICAgICBkZWYgdGVzdF9jY2FjaGVfdG9vbChzZWxmKToKICAgICAgICAgYml0YmFrZSgiY2NhY2hlLW5hdGl2ZSIpCkBAIC04OSw4ICs3Myw5IEBACiAgICAgZGVmIHRlc3Rfb3B0aW9uc193YXJucWFfZXJyb3JxYV9zd2l0Y2goc2VsZik6CiAgICAgICAgIGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgLWNjbGVhbnNzdGF0ZSIpCiAKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIklOSEVSSVRfcmVtb3ZlID0gXCJyZXBvcnQtZXJyb3JcIiIpCiAgICAgICAgIGlmICJwYWNrYWdlcy1saXN0IiBub3QgaW4gZ2V0X2JiX3ZhcigiRVJST1JfUUEiKToKLSAgICAgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJFUlJPUl9RQV9hcHBlbmQgPSBcIiBwYWNrYWdlcy1saXN0XCIiKQorICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJFUlJPUl9RQV9hcHBlbmQgPSBcIiBwYWNrYWdlcy1saXN0XCIiKQogCiAgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ1BBQ0tBR0VTICs9IFwiJHtQTn0tZGJnXCInKQogICAgICAgICByZXMgPSBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIiwgaWdub3JlX3N0YXR1cz1UcnVlKQpAQCAtMTk5LDc4ICsxODQsNiBAQAogICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIxXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249VHJ1ZSkKICAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMFwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9VHJ1ZSwgZXJyb3JfcmVnZXg9ZXJyb3IpCiAKLSAgICBAdGVzdGNhc2UoMTM4NikKLSAgICBkZWYgdGVzdF9idWlsZGhpc3RvcnlfZG9lc19ub3RfY2hhbmdlX3NpZ25hdHVyZXMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiAgICAgRW5zdXJlIHRoYXQgYnVpbGRoaXN0b3J5IGRvZXMgbm90IGNoYW5nZSBzaWduYXR1cmVzCi0gICAgICAgIEV4cGVjdGVkOiAgICBPbmx5ICdkb19yb290ZnMnIHRhc2sgc2hvdWxkIGJlIHJlcnVuCi0gICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCi0gICAgICAgIEF1dGhvcjogICAgICBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+Ci0gICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgIHRtcGRpcjFfbmFtZSA9ICd0bXBzaWcxJwotICAgICAgICB0bXBkaXIyX25hbWUgPSAndG1wc2lnMicKLSAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKQotICAgICAgICB0bXBkaXIxID0gb3MucGF0aC5qb2luKGJ1aWxkZGlyLCB0bXBkaXIxX25hbWUpCi0gICAgICAgIHRtcGRpcjIgPSBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsIHRtcGRpcjJfbmFtZSkKLQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRtcGRpcjEpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG1wZGlyMikKLQotICAgICAgICBmZWF0dXJlcyA9ICdUTVBESVIgPSAiJXMiXG4nICUgdG1wZGlyMQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKLSAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsIC1TIG5vbmUgLWMgcm9vdGZzJykKLQotICAgICAgICBmZWF0dXJlcyA9ICdUTVBESVIgPSAiJXMiXG4nICUgdG1wZGlyMgotICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IlxuJwotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKLSAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsIC1TIG5vbmUgLWMgcm9vdGZzJykKLQotICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgotICAgICAgICAgICAgZiA9IFtdCi0gICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKLSAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICAgICAgZi5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGYKLQotICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG1wZGlyMSArICcvc3RhbXBzJykKLSAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRtcGRpcjIgKyAnL3N0YW1wcycpCi0gICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UodG1wZGlyMl9uYW1lLCB0bXBkaXIxX25hbWUpIGZvciB4IGluIGZpbGVzMl0KLQotICAgICAgICBmMSA9IHNldChmaWxlczEpCi0gICAgICAgIGYyID0gc2V0KGZpbGVzMikKLSAgICAgICAgc2lnZGlmZiA9IGYxIC0gZjIKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzaWdkaWZmKSwgMSwgJ0V4cGVjdGVkIDEgc2lnbmF0dXJlIGRpZmZlcmVuY2VzLiBPdXQ6ICVzJyAlIGxpc3Qoc2lnZGlmZikpCi0KLSAgICAgICAgdW5leHBlY3RlZF9kaWZmID0gW10KLQotICAgICAgICAjIE5vIG5ldyBzaWduYXR1cmVzIHNob3VsZCBhcHBlYXIgYXBhcnQgZnJvbSBkb19yb290ZnMKLSAgICAgICAgZm91bmRfZG9fcm9vdGZzX2ZsYWcgPSBGYWxzZQotCi0gICAgICAgIGZvciBzaWcgaW4gc2lnZGlmZjoKLSAgICAgICAgICAgIGlmICdkb19yb290ZnMnIGluIHNpZzoKLSAgICAgICAgICAgICAgICBmb3VuZF9kb19yb290ZnNfZmxhZyA9IFRydWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdW5leHBlY3RlZF9kaWZmLmFwcGVuZChzaWcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kX2RvX3Jvb3Rmc19mbGFnLCAnVGFzayBkb19yb290ZnMgZGlkIG5vdCByZXJ1bi4nKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVuZXhwZWN0ZWRfZGlmZiwgJ0ZvdW5kIHVuZXhwZWN0ZWQgc2lnbmF0dXJlIGRpZmZlcmVuY2VzLiBPdXQ6ICVzJyAlIHVuZXhwZWN0ZWRfZGlmZikKLQotCi1jbGFzcyBCdWlsZEltYWdlc1Rlc3Qob2VTZWxmVGVzdCk6Ci0gICAgQHRlc3RjYXNlKDU2MykKLSAgICBkZWYgdGVzdF9kaXJlY3RmYihzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdGVzdCB0aGUgYnVpbGQgb2YgZGlyZWN0ZmIgaW1hZ2UgZm9yIGFybSBhcmNoLgotICAgICAgICBJbiBlc3NlbmNlIHdlIGJ1aWxkIGEgY29yZWltYWdlZGlyZWN0ZmIgYW5kIHRlc3QgdGhlIGV4aXRjb2RlIG9mIGJpdGJha2UgdGhhdCBpbiBjYXNlIG9mIHN1Y2Nlc3MgaXMgMC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NsZWFudXAtd29ya2RpcicpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJESVNUUk9fRkVBVFVSRVNfcmVtb3ZlID0gXCJ4MTFcIlxuRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9IFwiIGRpcmVjdGZiXCJcbk1BQ0hJTkUgPz89IFwicWVtdWFybVwiIikKLSAgICAgICAgcmVzID0gYml0YmFrZSgiY29yZS1pbWFnZS1kaXJlY3RmYiIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAwLCAiXG5jb3JlaW1hZ2VkaXJlY3RmYiBmYWlsZWQgdG8gYnVpbGQuIFBsZWFzZSBjaGVjayBsb2dzIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQotCiBjbGFzcyBBcmNoaXZlclRlc3Qob2VTZWxmVGVzdCk6CiAgICAgQHRlc3RjYXNlKDkyNikKICAgICBkZWYgdGVzdF9hcmNoX3dvcmtfZGlyX2FuZF9leHBvcnRfc291cmNlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkKaW5kZXggMTMyYTczZC4uZTk5MmRjZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9kZXZ0b29sLnB5CkBAIC01LDEwICs1LDExIEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBnbG9iCitpbXBvcnQgZm5tYXRjaAogCiBpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCiBmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGNyZWF0ZV90ZW1wX2xheWVyLCBydW5xZW11Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgY3JlYXRlX3RlbXBfbGF5ZXIsIHJ1bnFlbXUsIGdldF90ZXN0X2xheWVyCiBmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKIAogY2xhc3MgRGV2dG9vbEJhc2Uob2VTZWxmVGVzdCk6CkBAIC01MCw3ICs1MSw3IEBACiAKIAogICAgICAgICBtaXNzaW5ndmFycyA9IHt9Ci0gICAgICAgIGZvciB2YXIsIHZhbHVlIGluIGNoZWNrdmFycy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gY2hlY2t2YXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBtaXNzaW5ndmFyc1t2YXJdID0gdmFsdWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaXNzaW5ndmFycywge30sICdTb21lIGV4cGVjdGVkIHZhcmlhYmxlcyBub3QgZm91bmQgaW4gcmVjaXBlOiAlcycgJSBjaGVja3ZhcnMpCkBAIC0yMDcsMTIgKzIwOCwxNCBAQAogICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCiAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKICAgICAgICAgcG4gPSAnZGJ1cy13YWl0JworICAgICAgICBzcmNyZXYgPSAnNmNjNjA3N2EzNmZlMjY0OGE1Zjk5M2ZlN2MxNmM5NjMyZjk0NjUxNycKICAgICAgICAgIyBXZSBjaG9vc2UgYW4gaHR0cHM6Ly8gZ2l0IFVSTCBoZXJlIHRvIGNoZWNrIHJld3JpdGluZyB0aGUgVVJMIHdvcmtzCiAgICAgICAgIHVybCA9ICdodHRwczovL2dpdC55b2N0b3Byb2plY3Qub3JnL2dpdC9kYnVzLXdhaXQnCiAgICAgICAgICMgRm9yY2UgZmV0Y2hpbmcgdG8gIm5vbmFtZSIgc3ViZGlyIHNvIHdlIHZlcmlmeSB3ZSdyZSBwaWNraW5nIHVwIHRoZSBuYW1lIGZyb20gYXV0b2NvbmYKICAgICAgICAgIyBpbnN0ZWFkIG9mIHRoZSBkaXJlY3RvcnkgbmFtZQogICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjbG9uZSAlcyBub25hbWUnICUgdXJsLCBjd2Q9dGVtcGRpcikKICAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdub25hbWUnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXNldCAtLWhhcmQgJXMnICUgc3JjcmV2LCBjd2Q9c3JjZGlyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZSBzY3JpcHQgaW4gc291cmNlIGRpcmVjdG9yeScpCiAgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAogICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQpAQCAtMjM1LDcgKzIzOCw3IEBACiAgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JwogICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMC4xK2dpdCR7U1JDUFZ9JwogICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9ICdnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvZGJ1cy13YWl0O3Byb3RvY29sPWh0dHBzJwotICAgICAgICBjaGVja3ZhcnNbJ1NSQ1JFViddID0gJyR7QVVUT1JFVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDUkVWJ10gPSBzcmNyZXYKICAgICAgICAgY2hlY2t2YXJzWydERVBFTkRTJ10gPSBzZXQoWydkYnVzJ10pCiAgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCiAKQEAgLTM0NSw3ICszNDgsNyBAQAogICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQogICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCiAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtYSAtZiAlcycgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmwpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZDogJXMnICUgcmVzdWx0Lm91dHB1dCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdjb25maWd1cmUuYWMnKSksICdVbmFibGUgdG8gZmluZCBjb25maWd1cmUuYWMgaW4gc291cmNlIGRpcmVjdG9yeScpCiAgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cwpAQCAtMzU3LDcgKzM2MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQogICAgICAgICBjaGVja3ZhcnMgPSB7fQogICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKLSAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMTErZ2l0JHtTUkNQVn0nCisgICAgICAgIGNoZWNrdmFyc1snUFYnXSA9ICcxLjEyK2dpdCR7U1JDUFZ9JwogICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybAogICAgICAgICBjaGVja3ZhcnNbJ1NSQ1JFViddID0gJyR7QVVUT1JFVn0nCiAgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCkBAIC00NjUsMTIgKzQ2OCwxMSBAQAogICAgICAgICB0ZXN0cmVjaXBlcyA9ICdwZXJmIGtlcm5lbC1kZXZzcmMgcGFja2FnZS1pbmRleCBjb3JlLWltYWdlLW1pbmltYWwgbWV0YS10b29sY2hhaW4gcGFja2FnZWdyb3VwLWNvcmUtc2RrIG1ldGEtaWRlLXN1cHBvcnQnLnNwbGl0KCkKICAgICAgICAgIyBGaW5kIGFjdHVhbCBuYW1lIG9mIGdjYy1zb3VyY2Ugc2luY2UgaXQgbm93IGluY2x1ZGVzIHRoZSB2ZXJzaW9uIC0gY3J1ZGUsIGJ1dCBnb29kIGVub3VnaCBmb3IgdGhpcyBwdXJwb3NlCiAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1yZWNpcGVzIGdjYy1zb3VyY2UqJykKLSAgICAgICAgcmVhZGluZyA9IEZhbHNlCiAgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCc9PScpOgotICAgICAgICAgICAgICAgIHJlYWRpbmcgPSBUcnVlCi0gICAgICAgICAgICBlbGlmIHJlYWRpbmcgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKLSAgICAgICAgICAgICAgICB0ZXN0cmVjaXBlcy5hcHBlbmQobGluZS5zcGxpdCgnOicpWzBdKQorICAgICAgICAgICAgIyBqdXN0IG1hdGNoIHRob3NlIGxpbmVzIHRoYXQgY29udGFpbiBhIHJlYWwgdGFyZ2V0CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJyg/UDxyZWNpcGU+XlthLXpBLVowLTkuLV0rKSg/UDxjb2xvbj46JCknLCBsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICB0ZXN0cmVjaXBlcy5hcHBlbmQobS5ncm91cCgncmVjaXBlJykpCiAgICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgogICAgICAgICAgICAgIyBDaGVjayBpdCdzIGEgdmFsaWQgcmVjaXBlCiAgICAgICAgICAgICBiaXRiYWtlKCclcyAtZScgJSB0ZXN0cmVjaXBlKQpAQCAtODE2LDI4ICs4MTgsMjggQEAKIAogICAgICAgICAjIENoZWNrIGJiYXBwZW5kIGNvbnRlbnRzCiAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCi0gICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgPSAiJXMiXG4nICUgZ2l0X3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBleHBlY3RlZGxpbmVzID0gc2V0KFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddKQogICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIHNldChmLnJlYWRsaW5lcygpKSkKIAogICAgICAgICAjIENoZWNrIHdlIGNhbiBydW4gaXQgYWdhaW4gYW5kIGJiYXBwZW5kIGlzbid0IG1vZGlmaWVkCiAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKICAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBzZXQoZi5yZWFkbGluZXMoKSkpCiAgICAgICAgICMgRHJvcCBuZXcgY29tbWl0IGFuZCBjaGVjayBTUkNSRVYgY2hhbmdlcwogICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXNldCBIRUFEXicsIGN3ZD10ZW1wc3JjZGlyKQogICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSkpLCAnUGF0Y2ggZGlyZWN0b3J5IHNob3VsZCBub3QgYmUgY3JlYXRlZCcpCiAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCi0gICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgPSAiJXMiXG4nICUgZ2l0X3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBleHBlY3RlZGxpbmVzID0gc2V0KFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddKQogICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIHNldChmLnJlYWRsaW5lcygpKSkKICAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgogICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQogICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgTWFrZWZpbGUiJywgY3dkPXRlbXBzcmNkaXIpCkBAIC04NDYsMTIgKzg0OCwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQogICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQotICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IHNldChbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXSkKICAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBzZXQoZi5yZWFkbGluZXMoKSkpCiAgICAgICAgICMgRGVsZXRpbmcgaXNuJ3QgZXhwZWN0ZWQgdG8gd29yayB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzCiAKICAgICBAdGVzdGNhc2UoMTM3MCkKQEAgLTExODgsMyArMTE5MCwxNTkgQEAKICAgICAgICAgcyA9ICJNaWNyb3NvZnQgTWFkZSBObyBQcm9maXQgRnJvbSBBbnlvbmUncyBadW5lcyBZbyIKICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJkZXZ0b29sIC0tcXVpZXQgc2VsZnRlc3QtcmV2ZXJzZSBcIiVzXCIiICUgcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCBzWzo6LTFdKQorCisgICAgZGVmIF9zZXR1cF90ZXN0X2RldnRvb2xfZmluaXNoX3VwZ3JhZGUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHNlbGYud29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIFVzZSBhICJyZWFsIiByZWNpcGUgZnJvbSBtZXRhLXNlbGZ0ZXN0CisgICAgICAgIHJlY2lwZSA9ICdkZXZ0b29sLXVwZ3JhZGUtdGVzdDEnCisgICAgICAgIG9sZHZlcnNpb24gPSAnMS41LjMnCisgICAgICAgIG5ld3ZlcnNpb24gPSAnMS42LjAnCisgICAgICAgIG9sZHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgcmVjaXBlKQorICAgICAgICByZWNpcGVkaXIgPSBvcy5wYXRoLmRpcm5hbWUob2xkcmVjaXBlZmlsZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC4nLCBjd2Q9cmVjaXBlZGlyKQorICAgICAgICBpZiByZXN1bHQub3V0cHV0LnN0cmlwKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1JlY2lwZSBkaXJlY3RvcnkgZm9yICVzIGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMnICUgcmVjaXBlKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIERvIHRoZSB1cGdyYWRlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGdyYWRlICVzICVzIC1WICVzJyAlIChyZWNpcGUsIHRlbXBkaXIsIG5ld3ZlcnNpb24pKQorICAgICAgICAjIENoZWNrIGRldnRvb2wgc3RhdHVzIGFuZCBtYWtlIHN1cmUgcmVjaXBlIGlzIHByZXNlbnQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgTWFrZSBhIGNoYW5nZSB0byB0aGUgc291cmNlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc2VkIC1pIFwnL14jaW5jbHVkZSAicHYuaCIvYSBcXC8qIEhlcmUgaXMgYSBuZXcgY29tbWVudCAqXFwvXCcgc3JjL3B2L251bWJlci5jJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEluKCdNIHNyYy9wdi9udW1iZXIuYycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCBzcmMvcHYvbnVtYmVyLmMgLW0gIkFkZCBhIGNvbW1lbnQgdG8gdGhlIGNvZGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgICMgQ2hlY2sgaWYgcGF0Y2ggaXMgdGhlcmUKKyAgICAgICAgcmVjaXBlZGlyID0gb3MucGF0aC5kaXJuYW1lKG9sZHJlY2lwZWZpbGUpCisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguam9pbihyZWNpcGVkaXIsIHJlY2lwZSArICctJyArIG9sZHZlcnNpb24pCisgICAgICAgIHBhdGNoZm4gPSAnMDAwMS1BZGQtYS1ub3RlLWxpbmUtdG8tdGhlLXF1aWNrLXJlZmVyZW5jZS5wYXRjaCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihvbGRkaXIsIHBhdGNoZm4pKSwgJ09yaWdpbmFsIHBhdGNoIGZpbGUgZG9lcyBub3QgZXhpc3QnKQorICAgICAgICByZXR1cm4gcmVjaXBlLCBvbGRyZWNpcGVmaWxlLCByZWNpcGVkaXIsIG9sZGRpciwgbmV3dmVyc2lvbiwgcGF0Y2hmbgorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9maW5pc2hfdXBncmFkZV9vcmlnbGF5ZXIoc2VsZik6CisgICAgICAgIHJlY2lwZSwgb2xkcmVjaXBlZmlsZSwgcmVjaXBlZGlyLCBvbGRkaXIsIG5ld3ZlcnNpb24sIHBhdGNoZm4gPSBzZWxmLl9zZXR1cF90ZXN0X2RldnRvb2xfZmluaXNoX3VwZ3JhZGUoKQorICAgICAgICAjIEVuc3VyZSB0aGUgcmVjaXBlIGlzIHdoZXJlIHdlIHRoaW5rIGl0IHNob3VsZCBiZSAoc28gdGhhdCBjbGVhbnVwIGRvZXNuJ3QgdHJhc2ggdGhpbmdzKQorICAgICAgICBzZWxmLmFzc2VydEluKCcvbWV0YS1zZWxmdGVzdC8nLCByZWNpcGVkaXIpCisgICAgICAgICMgVHJ5IGZpbmlzaCB0byB0aGUgb3JpZ2luYWwgbGF5ZXIKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bigncm0gLXJmICVzIDsgY2QgJXMgOyBnaXQgY2hlY2tvdXQgJXMnICUgKHJlY2lwZWRpciwgb3MucGF0aC5kaXJuYW1lKHJlY2lwZWRpciksIHJlY2lwZWRpcikpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBmaW5pc2ggJXMgbWV0YS1zZWxmdGVzdCcgJSByZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCwgJ1JlY2lwZSBzaG91bGQgaGF2ZSBiZWVuIHJlc2V0IGJ5IGZpbmlzaCBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZSkpLCAnUmVjaXBlIGRpcmVjdG9yeSBzaG91bGQgbm90IGV4aXN0IGFmdGVyIGZpbmlzaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob2xkcmVjaXBlZmlsZSksICdPbGQgcmVjaXBlIGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBkZWxldGVkIGJ1dCB3YXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ob2xkZGlyLCBwYXRjaGZuKSksICdPbGQgcGF0Y2ggZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGRlbGV0ZWQgYnV0IHdhc25cJ3QnKQorICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHJlY2lwZWRpciwgJyVzXyVzLmJiJyAlIChyZWNpcGUsIG5ld3ZlcnNpb24pKQorICAgICAgICBuZXdkaXIgPSBvcy5wYXRoLmpvaW4ocmVjaXBlZGlyLCByZWNpcGUgKyAnLScgKyBuZXd2ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMobmV3cmVjaXBlZmlsZSksICdOZXcgcmVjaXBlIGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBjb3BpZWQgaW50byBleGlzdGluZyBsYXllciBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obmV3ZGlyLCBwYXRjaGZuKSksICdQYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY29waWVkIGludG8gbmV3IGRpcmVjdG9yeSBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obmV3ZGlyLCAnMDAwMi1BZGQtYS1jb21tZW50LXRvLXRoZS1jb2RlLnBhdGNoJykpLCAnTmV3IHBhdGNoIGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGJ1dCB3YXNuXCd0JykKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfZmluaXNoX3VwZ3JhZGVfb3RoZXJsYXllcihzZWxmKToKKyAgICAgICAgcmVjaXBlLCBvbGRyZWNpcGVmaWxlLCByZWNpcGVkaXIsIG9sZGRpciwgbmV3dmVyc2lvbiwgcGF0Y2hmbiA9IHNlbGYuX3NldHVwX3Rlc3RfZGV2dG9vbF9maW5pc2hfdXBncmFkZSgpCisgICAgICAgICMgRW5zdXJlIHRoZSByZWNpcGUgaXMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlIChzbyB0aGF0IGNsZWFudXAgZG9lc24ndCB0cmFzaCB0aGluZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy9tZXRhLXNlbGZ0ZXN0LycsIHJlY2lwZWRpcikKKyAgICAgICAgIyBUcnkgZmluaXNoIHRvIGEgZGlmZmVyZW50IGxheWVyIC0gc2hvdWxkIGNyZWF0ZSBhIGJiYXBwZW5kCisgICAgICAgICMgVGhpcyBjbGVhbnVwIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgZG8gaXQgYW55d2F5IGp1c3QgaW4gY2FzZSBpdCBnb2VzIHdyb25nIGFuZCB3cml0ZXMgdG8gaGVyZQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtcmYgJXMgOyBjZCAlcyA7IGdpdCBjaGVja291dCAlcycgJSAocmVjaXBlZGlyLCBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZGlyKSwgcmVjaXBlZGlyKSkKKyAgICAgICAgb2VfY29yZV9kaXIgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEnKQorICAgICAgICBuZXdyZWNpcGVkaXIgPSBvcy5wYXRoLmpvaW4ob2VfY29yZV9kaXIsICdyZWNpcGVzLXRlc3QnLCAnZGV2dG9vbCcpCisgICAgICAgIG5ld3JlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4obmV3cmVjaXBlZGlyLCAnJXNfJXMuYmInICUgKHJlY2lwZSwgbmV3dmVyc2lvbikpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAobmV3cmVjaXBlZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZmluaXNoICVzIG9lLWNvcmUnICUgcmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQsICdSZWNpcGUgc2hvdWxkIGhhdmUgYmVlbiByZXNldCBieSBmaW5pc2ggYnV0IHdhc25cJ3QnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3JlY2lwZXMnLCByZWNpcGUpKSwgJ1JlY2lwZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBleGlzdCBhZnRlciBmaW5pc2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob2xkcmVjaXBlZmlsZSksICdPbGQgcmVjaXBlIGZpbGUgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZGVsZXRlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ob2xkZGlyLCBwYXRjaGZuKSksICdPbGQgcGF0Y2ggZmlsZSBzaG91bGQgbm90IGhhdmUgYmVlbiBkZWxldGVkJykKKyAgICAgICAgbmV3ZGlyID0gb3MucGF0aC5qb2luKG5ld3JlY2lwZWRpciwgcmVjaXBlICsgJy0nICsgbmV3dmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG5ld3JlY2lwZWZpbGUpLCAnTmV3IHJlY2lwZSBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY29waWVkIGludG8gZXhpc3RpbmcgbGF5ZXIgYnV0IHdhc25cJ3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKG5ld2RpciwgcGF0Y2hmbikpLCAnUGF0Y2ggZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIG5ldyBkaXJlY3RvcnkgYnV0IHdhc25cJ3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKG5ld2RpciwgJzAwMDItQWRkLWEtY29tbWVudC10by10aGUtY29kZS5wYXRjaCcpKSwgJ05ldyBwYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBidXQgd2FzblwndCcpCisKKyAgICBkZWYgX3NldHVwX3Rlc3RfZGV2dG9vbF9maW5pc2hfbW9kaWZ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHJlY2lwZSA9ICdtZGFkbScKKyAgICAgICAgb2xkcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCByZWNpcGUpCisgICAgICAgIHJlY2lwZWRpciA9IG9zLnBhdGguZGlybmFtZShvbGRyZWNpcGVmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLicsIGN3ZD1yZWNpcGVkaXIpCisgICAgICAgIGlmIHJlc3VsdC5vdXRwdXQuc3RyaXAoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnUmVjaXBlIGRpcmVjdG9yeSBmb3IgJXMgY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcycgJSByZWNpcGUpCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzICVzJyAlIChyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIE1ha2UgYSBjaGFuZ2UgdG8gdGhlIHNvdXJjZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3NlZCAtaSBcJy9eI2luY2x1ZGUgIm1kYWRtLmgiL2EgXFwvKiBIZXJlIGlzIGEgbmV3IGNvbW1lbnQgKlxcL1wnIG1hcHMuYycsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignTSBtYXBzLmMnLCByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgbWFwcy5jIC1tICJBZGQgYSBjb21tZW50IHRvIHRoZSBjb2RlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBmb3IgZW50cnkgaW4gb3MubGlzdGRpcihyZWNpcGVkaXIpOgorICAgICAgICAgICAgZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ocmVjaXBlZGlyLCBlbnRyeSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZXNkaXIpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuYWJsZSB0byBmaW5kIHJlY2lwZSBmaWxlcyBkaXJlY3RvcnkgZm9yICVzJyAlIHJlY2lwZSkKKyAgICAgICAgcmV0dXJuIHJlY2lwZSwgb2xkcmVjaXBlZmlsZSwgcmVjaXBlZGlyLCBmaWxlc2RpcgorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9maW5pc2hfbW9kaWZ5X29yaWdsYXllcihzZWxmKToKKyAgICAgICAgcmVjaXBlLCBvbGRyZWNpcGVmaWxlLCByZWNpcGVkaXIsIGZpbGVzZGlyID0gc2VsZi5fc2V0dXBfdGVzdF9kZXZ0b29sX2ZpbmlzaF9tb2RpZnkoKQorICAgICAgICAjIEVuc3VyZSB0aGUgcmVjaXBlIGlzIHdoZXJlIHdlIHRoaW5rIGl0IHNob3VsZCBiZSAoc28gdGhhdCBjbGVhbnVwIGRvZXNuJ3QgdHJhc2ggdGhpbmdzKQorICAgICAgICBzZWxmLmFzc2VydEluKCcvbWV0YS8nLCByZWNpcGVkaXIpCisgICAgICAgICMgVHJ5IGZpbmlzaCB0byB0aGUgb3JpZ2luYWwgbGF5ZXIKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bigncm0gLXJmICVzIDsgY2QgJXMgOyBnaXQgY2hlY2tvdXQgJXMnICUgKHJlY2lwZWRpciwgb3MucGF0aC5kaXJuYW1lKHJlY2lwZWRpciksIHJlY2lwZWRpcikpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBmaW5pc2ggJXMgbWV0YScgJSByZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCwgJ1JlY2lwZSBzaG91bGQgaGF2ZSBiZWVuIHJlc2V0IGJ5IGZpbmlzaCBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZSkpLCAnUmVjaXBlIGRpcmVjdG9yeSBzaG91bGQgbm90IGV4aXN0IGFmdGVyIGZpbmlzaCcpCisgICAgICAgIGV4cGVjdGVkX3N0YXR1cyA9IFsoJyBNJywgJy4qLyVzJCcgJSBvcy5wYXRoLmJhc2VuYW1lKG9sZHJlY2lwZWZpbGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnLiovLiotQWRkLWEtY29tbWVudC10by10aGUtY29kZS5wYXRjaCQnKV0KKyAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMocmVjaXBlZGlyLCBleHBlY3RlZF9zdGF0dXMpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2ZpbmlzaF9tb2RpZnlfb3RoZXJsYXllcihzZWxmKToKKyAgICAgICAgcmVjaXBlLCBvbGRyZWNpcGVmaWxlLCByZWNpcGVkaXIsIGZpbGVzZGlyID0gc2VsZi5fc2V0dXBfdGVzdF9kZXZ0b29sX2ZpbmlzaF9tb2RpZnkoKQorICAgICAgICAjIEVuc3VyZSB0aGUgcmVjaXBlIGlzIHdoZXJlIHdlIHRoaW5rIGl0IHNob3VsZCBiZSAoc28gdGhhdCBjbGVhbnVwIGRvZXNuJ3QgdHJhc2ggdGhpbmdzKQorICAgICAgICBzZWxmLmFzc2VydEluKCcvbWV0YS8nLCByZWNpcGVkaXIpCisgICAgICAgIHJlbHB0aCA9IG9zLnBhdGgucmVscGF0aChyZWNpcGVkaXIsIG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnbWV0YScpKQorICAgICAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmpvaW4oZ2V0X3Rlc3RfbGF5ZXIoKSwgcmVscHRoKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGFwcGVuZGRpcikKKyAgICAgICAgIyBUcnkgZmluaXNoIHRvIHRoZSBvcmlnaW5hbCBsYXllcgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtcmYgJXMgOyBjZCAlcyA7IGdpdCBjaGVja291dCAlcycgJSAocmVjaXBlZGlyLCBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZGlyKSwgcmVjaXBlZGlyKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGZpbmlzaCAlcyBtZXRhLXNlbGZ0ZXN0JyAlIHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0LCAnUmVjaXBlIHNob3VsZCBoYXZlIGJlZW4gcmVzZXQgYnkgZmluaXNoIGJ1dCB3YXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSksICdSZWNpcGUgZGlyZWN0b3J5IHNob3VsZCBub3QgZXhpc3QgYWZ0ZXIgZmluaXNoJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC4nLCBjd2Q9cmVjaXBlZGlyKQorICAgICAgICBpZiByZXN1bHQub3V0cHV0LnN0cmlwKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1JlY2lwZSBkaXJlY3RvcnkgZm9yICVzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdW5leHBlY3RlZCBjaGFuZ2VzIGFmdGVyIGZpbmlzaDpcbiVzJyAlIChyZWNpcGUsIHJlc3VsdC5vdXRwdXQuc3RyaXAoKSkpCisgICAgICAgIHJlY2lwZWZuID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG9sZHJlY2lwZWZpbGUpKVswXQorICAgICAgICByZWNpcGVmbiA9IHJlY2lwZWZuLnNwbGl0KCdfJylbMF0gKyAnXyUnCisgICAgICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCByZWNpcGVmbiArICcuYmJhcHBlbmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYXBwZW5kZmlsZSksICdiYmFwcGVuZCAlcyBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgYnV0IHdhc25cJ3QnICUgYXBwZW5kZmlsZSkKKyAgICAgICAgbmV3ZGlyID0gb3MucGF0aC5qb2luKGFwcGVuZGRpciwgcmVjaXBlKQorICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIobmV3ZGlyKQorICAgICAgICBmb3VuZHBhdGNoID0gTm9uZQorICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZm4sICcqLUFkZC1hLWNvbW1lbnQtdG8tdGhlLWNvZGUucGF0Y2gnKToKKyAgICAgICAgICAgICAgICBmb3VuZHBhdGNoID0gZm4KKyAgICAgICAgaWYgbm90IGZvdW5kcGF0Y2g6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ05vIHBhdGNoIGZpbGUgY3JlYXRlZCBuZXh0IHRvIGJiYXBwZW5kJykKKyAgICAgICAgZmlsZXMucmVtb3ZlKGZvdW5kcGF0Y2gpCisgICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIGZpbGUocykgY29waWVkIG5leHQgdG8gYmJhcHBlbmQ6ICVzJyAlICcsICcuam9pbihmaWxlcykpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9lU0RLLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZVNESy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDVjNjgwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZVNESy5weQpAQCAtMCwwICsxLDEwMyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlIAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitmcm9tIG9lcWEudXRpbHMuaHR0cHNlcnZlciBpbXBvcnQgSFRUUFNlcnZpY2UKKworY2xhc3Mgb2VTREtFeHRTZWxmVGVzdChvZVNlbGZUZXN0KToKKyAgICAiIiIKKyAgICAjIEJ1Z3ppbGxhIFRlc3QgUGxhbjogNjAzMworICAgICMgVGhpcyBjb2RlIGlzIHBsYW5uZWQgdG8gYmUgcGFydCBvZiB0aGUgYXV0b21hdGlvbiBmb3IgZVNESyBjb250YWluaWcKKyAgICAjIEluc3RhbGwgbGlicmFyaWVzIGFuZCBoZWFkZXJzLCBpbWFnZSBnZW5lcmF0aW9uIGJpbmFyeSBmZWVkcy4KKyAgICAiIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X2VzZGtfZW52aXJvbm1lbnQoZW52X2VTREssIHRtcGRpcl9lU0RLUUEpOgorICAgICAgICAjIFhYWDogYXQgdGhpcyB0aW1lIHVzZSB0aGUgZmlyc3QgZW52IG5lZWQgdG8gaW52ZXN0aWdhdGUKKyAgICAgICAgIyB3aGF0IGVudmlyb25tZW50IGxvYWQgb2Utc2VsZnRlc3QsIGk1ODYsIHg4Nl82NAorICAgICAgICBwYXR0ZXJuID0gb3MucGF0aC5qb2luKHRtcGRpcl9lU0RLUUEsICdlbnZpcm9ubWVudC1zZXR1cC0qJykKKyAgICAgICAgcmV0dXJuIGdsb2IuZ2xvYihwYXR0ZXJuKVswXQorICAgIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcnVuX2VzZGtfY21kKGVudl9lU0RLLCB0bXBkaXJfZVNES1FBLCBjbWQsIHBvc3Rjb25maWc9Tm9uZSwgKipvcHRpb25zKToKKyAgICAgICAgaWYgcG9zdGNvbmZpZzoKKyAgICAgICAgICAgIGVzZGtfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHRtcGRpcl9lU0RLUUEsICdjb25mJywgJ2xvY2FsLmNvbmYnKQorICAgICAgICAgICAgd2l0aCBvcGVuKGVzZGtfY29uZl9maWxlLCAnYSsnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUocG9zdGNvbmZpZykKKyAgICAgICAgaWYgbm90IG9wdGlvbnM6CisgICAgICAgICAgICBvcHRpb25zID0ge30KKyAgICAgICAgaWYgbm90ICdzaGVsbCcgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIG9wdGlvbnNbJ3NoZWxsJ10gPSBUcnVlCisKKyAgICAgICAgcnVuQ21kKCJjZCAlczsgLiAlczsgJXMiICUgKHRtcGRpcl9lU0RLUUEsIGVudl9lU0RLLCBjbWQpLCAqKm9wdGlvbnMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX2VTREsoaW1hZ2UpOgorICAgICAgICBwbl90YXNrID0gJyVzIC1jIHBvcHVsYXRlX3Nka19leHQnICUgaW1hZ2UKKyAgICAgICAgYml0YmFrZShwbl90YXNrKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRfZVNES190b29sY2hhaW4oaW1hZ2UpOgorICAgICAgICBwbl90YXNrID0gJyVzIC1jIHBvcHVsYXRlX3Nka19leHQnICUgaW1hZ2UKKworICAgICAgICBzZGtfZGVwbG95ID0gZ2V0X2JiX3ZhcignU0RLX0RFUExPWScsIHBuX3Rhc2spCisgICAgICAgIHRvb2xjaGFpbl9uYW1lID0gZ2V0X2JiX3ZhcignVE9PTENIQUlORVhUX09VVFBVVE5BTUUnLCBwbl90YXNrKQorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNka19kZXBsb3ksIHRvb2xjaGFpbl9uYW1lICsgJy5zaCcpCisgICAgCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAjIFN0YXJ0IHRvIHNlcnZlIHNzdGF0ZSBkaXIKKyAgICAgICAgc3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydCVUlMRERJUiddLCAnc3N0YXRlLWNhY2hlJykKKyAgICAgICAgY2xzLmh0dHBfc2VydmljZSA9IEhUVFBTZXJ2aWNlKHNzdGF0ZV9kaXIpCisgICAgICAgIGNscy5odHRwX3NlcnZpY2Uuc3RhcnQoKQorCisgICAgICAgIGh0dHBfdXJsID0gIjEyNy4wLjAuMTolZCIgJSBjbHMuaHR0cF9zZXJ2aWNlLnBvcnQKKyAKKyAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJworCisgICAgICAgIGNscy50bXBkaXJfZVNES1FBID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2VTREtRQScpCisgICAgICAgIG9lU0RLRXh0U2VsZlRlc3QuZ2VuZXJhdGVfZVNESyhpbWFnZSkKKworICAgICAgICAjIEluc3RhbGwgZVNESworICAgICAgICBleHRfc2RrX3BhdGggPSBvZVNES0V4dFNlbGZUZXN0LmdldF9lU0RLX3Rvb2xjaGFpbihpbWFnZSkKKyAgICAgICAgcnVuQ21kKCIlcyAteSAtZCBcIiVzXCIiICUgKGV4dF9zZGtfcGF0aCwgY2xzLnRtcGRpcl9lU0RLUUEpKQorCisgICAgICAgIGNscy5lbnZfZVNESyA9IG9lU0RLRXh0U2VsZlRlc3QuZ2V0X2VzZGtfZW52aXJvbm1lbnQoJycsIGNscy50bXBkaXJfZVNES1FBKQorCisgICAgICAgICMgQ29uZmlndXJlIGVTREsgdG8gdXNlIHNzdGF0ZSBtaXJyb3IgZnJvbSBwb2t5CisgICAgICAgIHNzdGF0ZV9jb25maWc9IiIiCitTREtfTE9DQUxfQ09ORl9XSElURUxJU1QgPSAiU1NUQVRFX01JUlJPUlMiCitTU1RBVEVfTUlSUk9SUyA9ICAiZmlsZTovLy4qIGh0dHA6Ly8lcy9QQVRIIgorICAgICAgICAiIiIgJSBodHRwX3VybAorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNscy50bXBkaXJfZVNES1FBLCAnY29uZicsICdsb2NhbC5jb25mJyksICdhKycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHNzdGF0ZV9jb25maWcpCisKKyAgICAgIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHNodXRpbC5ybXRyZWUoY2xzLnRtcGRpcl9lU0RLUUEpCisgICAgICAgIGNscy5odHRwX3NlcnZpY2Uuc3RvcCgpCisKKyAgICBAdGVzdGNhc2UgKDE0NzEpCisgICAgZGVmIHRlc3RfaW5zdGFsbF9saWJyYXJpZXNfaGVhZGVycyhzZWxmKToKKyAgICAgICAgcG5fc3N0YXRlID0gJ2JjJworICAgICAgICBiaXRiYWtlKHBuX3NzdGF0ZSkKKyAgICAgICAgY21kID0gImRldnRvb2wgc2RrLWluc3RhbGwgJXMgIiAlIHBuX3NzdGF0ZQorICAgICAgICBvZVNES0V4dFNlbGZUZXN0LnJ1bl9lc2RrX2NtZChzZWxmLmVudl9lU0RLLCBzZWxmLnRtcGRpcl9lU0RLUUEsIGNtZCkKKyAgICAKKyAgICBAdGVzdGNhc2UoMTQ3MikKKyAgICBkZWYgdGVzdF9pbWFnZV9nZW5lcmF0aW9uX2JpbmFyeV9mZWVkcyhzZWxmKToKKyAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBjbWQgPSAiZGV2dG9vbCBidWlsZC1pbWFnZSAlcyIgJSBpbWFnZQorICAgICAgICBvZVNES0V4dFNlbGZUZXN0LnJ1bl9lc2RrX2NtZChzZWxmLmVudl9lU0RLLCBzZWxmLnRtcGRpcl9lU0RLUUEsIGNtZCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2VzZGtfcHJlcGFyZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2VzZGtfcHJlcGFyZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMWIzNmEwZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9lc2RrX3ByZXBhcmUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotaW1wb3J0IHNodXRpbCwgdGVtcGZpbGUKLWltcG9ydCBzeXMKLWltcG9ydCBvcwotaW1wb3J0IGltcAotaW1wb3J0IHVuaXR0ZXN0Ci10cnk6Ci0gICAgZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBnZXRfYmJfdmFyCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotCi0jIG1vZHVsZSB1bmRlciB0ZXN0Ci1tb2R1bGVfZmlsZV9uYW1lID0gImV4dC1zZGstcHJlcGFyZS5weSIKLW1vZHVsZV9wYXRoID0gIiIKLQotY2xhc3MgRXh0U2RrUHJlcGFyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiIHVuaXQgdGVzdCBmb3IgZml4IGZvciBZb2N0byAjOTAxOSAiIiIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgotICAgICAgICAjIGNvcHkgbW9kdWxlIHVuZGVyIHRlc3QgdG8gdGVtcCBkaXIKLSAgICAgICAgc2VsZi50ZXN0X2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgICAgICBtb2R1bGVfZGVzdF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdF9kaXIsIG1vZHVsZV9maWxlX25hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNodXRpbC5jb3B5KG1vZHVsZV9wYXRoLCBzZWxmLnRlc3RfZGlyKQotICAgICAgICAgICAgIyBsb2FkIG1vZHVsZSB1bmRlciB0ZXN0Ci0gICAgICAgICAgICBzZWxmLnRlc3RfbW9kID0gaW1wLmxvYWRfc291cmNlKCIiLCBtb2R1bGVfZGVzdF9wYXRoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwcmludCAiZXJyb3I6IHVuYWJsZSB0byBjb3B5IG9yIGxvYWQgJXMgW3NyYzogJXMsIGRzdDogJXNdIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgKG1vZHVsZV9maWxlX25hbWUsIG1vZHVsZV9wYXRoLCBtb2R1bGVfZGVzdF9wYXRoKQotICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIGRlZiB0ZXN0X3ByZXBhcmVfdW5leHBlY3RlZChzZWxmKToKLSAgICAgICAgIyB0ZXN0IGRhdGEKLSAgICAgICAgIyBub3RlOiBwYXRobmFtZXMgaGF2ZSBiZWVuIHRydW5jYXRlZCBmcm9tIHRoZSBhY3R1YWwgYml0YmFrZQotICAgICAgICAjIG91dHB1dCBhcyB0aGV5IGFyZSBub3QgaW1wb3J0YW50IGZvciB0aGUgdGVzdC4KLSAgICAgICAgdGVzdF9kYXRhID0gKCAKLSAgICAgICAgICAgICdOT1RFOiBSdW5uaW5nIG5vZXhlYyB0YXNrIDkgb2YgNjUzOSAoSUQ6IDI4LCBxdWlsdC9xdWlsdC1uYXRpdmVfMC42NC5iYiwgZG9fYnVpbGQpXG4nCi0gICAgICAgICAgICAnTk9URTogUnVubmluZyB0YXNrIDEwIG9mIDY1MzkgKElEOiAyOSwgcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjQuYmIsIGRvX3BhY2thZ2UpXG4nCi0gICAgICAgICAgICAnTk9URTogUnVubmluZyB0YXNrIDExIG9mIDY1MzkgKElEOiAzMCwgcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjQuYmIsIGRvX3JtX3dvcmspXG4nCi0gICAgICAgICAgICAnTk9URTogUnVubmluZyBub2V4ZWMgdGFzayA2NDAyIG9mIDY1MzkgKElEOiAxLCBpbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiLCBkb19wYXRjaClcbicKLSAgICAgICAgICAgICdOT1RFOiBSdW5uaW5nIHRhc2sgNjUzOCBvZiA2NTM5IChJRDogMTQsIGltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIsIGRvX3JtX3dvcmspXG4nCi0gICAgICAgICkKLSAgICAgICAgIyBleHBlY3RlZCB3YXJuaW5nIG91dHB1dAotICAgICAgICBleHBlY3RlZCA9IFsgKCcgdGFzayAxMCBvZiA2NTM5IChJRDogMjksIHF1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiLCBkb19wYWNrYWdlKScpIF0KLSAgICAgICAgIyByZWNpcGUgdG8gdGVzdCwgbWF0Y2hpbmcgdGVzdCBpbnB1dCBkYXRhCi0gICAgICAgIHJlY2lwZXMgPSBbICJjb3JlLWltYWdlLXNhdG8uYmIiIF0KLQotICAgICAgICAjIHJ1biB0aGUgdGVzdAotICAgICAgICBvdXRwdXQgPSBzZWxmLnRlc3RfbW9kLmNoZWNrX3VuZXhwZWN0ZWQodGVzdF9kYXRhLCByZWNpcGVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgZXhwZWN0ZWQpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKLSAgICAgICAgIyByZW1vdmUgdGVtcCBkaXIKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRlc3RfZGlyKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICMgcnVubmluZyBmcm9tIGNvbW1hbmQgbGluZSAtIGkuZS4sIG5vdCB1bmRlciBvZS1zZWxmdGVzdAotICAgICMgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbW9kdWxlIHVuZGVyIHRlc3QgY29tZXMgZnJvbSBjb21tYW5kIGxpbmUKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDIgYW5kIG9zLnBhdGguaXNkaXIoc3lzLmFyZ3ZbMV0pOgotICAgICAgICBtb2R1bGVfcGF0aCA9IG9zLnBhdGguam9pbihzeXMuYXJndlsxXSwgbW9kdWxlX2ZpbGVfbmFtZSkKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEV4dFNka1ByZXBhcmVUZXN0KQotICAgICAgICB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpLnJ1bihzdWl0ZSkKLSAgICBlbHNlOgotICAgICAgICBwcm9nbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHByaW50ICIlczogbWlzc2luZyBkaXJlY3RvcnkgcGF0aCIgJSBwcm9nbmFtZQotICAgICAgICBwcmludCAidXNhZ2U6ICVzIC9wYXRoL3RvL2RpcmVjdG9yeS1vZihleHQtc2RrLXByZXBhcmUucHkpIiAlIHByb2duYW1lCi0gICAgICAgIHN5cy5leGl0KDEpCi1lbHNlOgotICAgICMgcnVubmluZyB1bmRlciBvZS1zZWxmdGVzdAotICAgICMgZGV0ZXJtaW5lIG1vZHVsZSBzb3VyY2UgZGlyIGZyb20gQ09SRUJBU0UgYW5kIGV4cGVjdGVkIHBhdGgKLSAgICBtb2R1bGVfcGF0aCA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJDT1JFQkFTRSIpLCAibWV0YSIsICJmaWxlcyIsIG1vZHVsZV9maWxlX25hbWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weQppbmRleCA4YTUzODk5Li5kMDE1YzQ5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2ltYWdlZmVhdHVyZXMucHkKQEAgLTk4LDMgKzk4LDMwIEBACiAgICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLXdlc3RvbgogICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLXdlc3RvbicpCiAKKyAgICBkZWYgdGVzdF9ibWFwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGJtYXAgc3VwcG9ydAorICAgICAgICBFeHBlY3RlZDogICAgMS4gY29yZS1pbWFnZS1taW5pbWFsIGNhbiBiZSBidWlsZCB3aXRoIGJtYXAgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgMi4gY29yZS1pbWFnZS1taW5pbWFsIGlzIHNwYXJzZQorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0lNQUdFX0ZTVFlQRVMgKz0gIiBleHQ0IGV4dDQuYm1hcCInCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgIGltYWdlX25hbWUgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBiaXRiYWtlKGltYWdlX25hbWUpCisKKyAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBsaW5rX25hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9MSU5LX05BTUUnLCBpbWFnZV9uYW1lKQorICAgICAgICBpbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXJfaW1hZ2UsICIlcy5leHQ0IiAlIGxpbmtfbmFtZSkKKyAgICAgICAgYm1hcF9wYXRoID0gIiVzLmJtYXAiICUgaW1hZ2VfcGF0aAorCisgICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGltYWdlIGFuZCBibWFwIGZpbGUgYXJlIGluIGRlcGxveSBkaXJlY3RvcnkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYm1hcF9wYXRoKSkKKworICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpbWFnZSBpcyBzcGFyc2UKKyAgICAgICAgaW1hZ2Vfc3RhdCA9IG9zLnN0YXQoaW1hZ2VfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGltYWdlX3N0YXQuc3Rfc2l6ZSA+IGltYWdlX3N0YXQuc3RfYmxvY2tzICogNTEyKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGlib2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWJvZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTEzMWViCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGlib2UucHkKQEAgLTAsMCArMSw5MyBAQAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgZ2V0X2JiX3ZhciwgYml0YmFrZSwgcnVuQ21kCitpbXBvcnQgb2UucGF0aAoraW1wb3J0IGdsb2IKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKKworY2xhc3MgTGliT0Uob2VTZWxmVGVzdCk6CisgICAgZGVmIHRlc3RfY29weV90cmVlX3NwZWNpYWwoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICBvZS5wYXRoLmNvcHl0cmVlKCkgc2hvdWxkIGNvcHkgZmlsZXMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcgorICAgICAgICBFeHBlY3RlZDogICAndGVzdCBmaWxlIHdpdGggc3DCo2MhYWwgQG5kIHNwYWNlcycgc2hvdWxkIGV4aXN0IGluCisgICAgICAgICAgICAgICAgICAgIGNvcHkgZGVzdGluYXRpb24KKyAgICAgICAgUHJvZHVjdDogICAgT0UtQ29yZQorICAgICAgICBBdXRob3I6ICAgICBKb3NodWEgTG9jayA8am9zaHVhLmcubG9ja0BpbnRlbC5jb20+CisgICAgICAgICIiIgorICAgICAgICB0bXBfZGlyID0gZ2V0X2JiX3ZhcignVE1QRElSJykKKyAgICAgICAgdGVzdGxvYyA9IG9lLnBhdGguam9pbih0bXBfZGlyLCAnbGlib2V0ZXN0cycpCisgICAgICAgIHNyYyA9IG9lLnBhdGguam9pbih0ZXN0bG9jLCAnc3JjJykKKyAgICAgICAgZHN0ID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdkc3QnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdGxvYykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyYykKKyAgICAgICAgdGVzdGZpbGVuYW1lID0gJ3Rlc3QgZmlsZSB3aXRoIHNwwqNjIWFsIEBuZCBzcGFjZXMnCisKKyAgICAgICAgIyBjcmVhdGUgdGhlIHRlc3QgZmlsZSBhbmQgY29weSBpdAorICAgICAgICBvcGVuKG9lLnBhdGguam9pbihzcmMsIHRlc3RmaWxlbmFtZSksICd3K2InKS5jbG9zZSgpCisgICAgICAgIG9lLnBhdGguY29weXRyZWUoc3JjLCBkc3QpCisKKyAgICAgICAgIyBlbnN1cmUgcGF0aCBleGlzdHMgaW4gZGVzdAorICAgICAgICBmaWxlaW5kc3QgPSBvcy5wYXRoLmlzZmlsZShvZS5wYXRoLmpvaW4oZHN0LCB0ZXN0ZmlsZW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWluZHN0LCAiRmlsZSB3aXRoIHNwYWNlcyBkb2Vzbid0IGV4aXN0IGluIGRzdCIpCisKKyAgICAgICAgb2UucGF0aC5yZW1vdmUodGVzdGxvYykKKworICAgIGRlZiB0ZXN0X2NvcHlfdHJlZV94YXR0cihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgIG9lLnBhdGguY29weXRyZWUoKSBzaG91bGQgcHJlc2VydmUgeGF0dHIgb24gY29waWVkIGZpbGVzCisgICAgICAgIEV4cGVjdGVkOiAgIHRlc3R4YXR0ciBmaWxlIGluIGRlc3RpbmF0aW9uIHNob3VsZCBoYXZlIHVzZXIub2V0ZXN0CisgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZQorICAgICAgICBQcm9kdWN0OiAgICBPRS1Db3JlCisgICAgICAgIEF1dGhvcjogICAgIEpvc2h1YSBMb2NrIDxqb3NodWEuZy5sb2NrQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisgICAgICAgIHRtcF9kaXIgPSBnZXRfYmJfdmFyKCdUTVBESVInKQorICAgICAgICB0ZXN0bG9jID0gb2UucGF0aC5qb2luKHRtcF9kaXIsICdsaWJvZXRlc3RzJykKKyAgICAgICAgc3JjID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdzcmMnKQorICAgICAgICBkc3QgPSBvZS5wYXRoLmpvaW4odGVzdGxvYywgJ2RzdCcpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZXN0bG9jKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3JjKQorICAgICAgICB0ZXN0ZmlsZW5hbWUgPSAndGVzdHhhdHRyJworCisgICAgICAgICMgZW5zdXJlIHdlIGhhdmUgc2V0ZmF0dHIgYXZhaWxhYmxlCisgICAgICAgIGJpdGJha2UoImF0dHItbmF0aXZlIikKKyAgICAgICAgYmluZGlyID0gZ2V0X2JiX3ZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJykKKworICAgICAgICAjIGNyZWF0ZSBhIGZpbGUgd2l0aCB4YXR0ciBhbmQgY29weSBpdAorICAgICAgICBvcGVuKG9lLnBhdGguam9pbihzcmMsIHRlc3RmaWxlbmFtZSksICd3K2InKS5jbG9zZSgpCisgICAgICAgIHJ1bkNtZCgnJXMvc2V0ZmF0dHIgLW4gdXNlci5vZXRlc3QgLXYgInRlc3RpbmcgbGlib2UiICVzJyAlIChiaW5kaXIsIG9lLnBhdGguam9pbihzcmMsIHRlc3RmaWxlbmFtZSkpKQorICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKHNyYywgZHN0KQorCisgICAgICAgICMgZW5zdXJlIGZpbGUgaW4gZGVzdCBoYXMgdXNlci5vZXRlc3QgeGF0dHIKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCclcy9nZXRmYXR0ciAtbiB1c2VyLm9ldGVzdCAlcycgJSAoYmluZGlyLCBvZS5wYXRoLmpvaW4oZHN0LCB0ZXN0ZmlsZW5hbWUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndXNlci5vZXRlc3Q9InRlc3RpbmcgbGlib2UiJywgcmVzdWx0Lm91dHB1dCwgJ0V4dGVuZGVkIGF0dHJpYnV0ZSBub3Qgc2VydCBpbiBkc3QnKQorCisgICAgICAgIG9lLnBhdGgucmVtb3ZlKHRlc3Rsb2MpCisKKyAgICBkZWYgdGVzdF9jb3B5X2hhcmRsaW5rX3RyZWVfY291bnQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoKSBzaG91bGRuJ3QgbWlzcyBvdXQgZmlsZXMKKyAgICAgICAgRXhwZWN0ZWQ6ICAgc3JjIGFuZCBkc3Qgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGZpbGVzCisgICAgICAgIFByb2R1Y3Q6ICAgIE9FLUNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgSm9zaHVhIExvY2sgPGpvc2h1YS5nLmxvY2tAaW50ZWwuY29tPgorICAgICAgICAiIiIKKyAgICAgICAgdG1wX2RpciA9IGdldF9iYl92YXIoJ1RNUERJUicpCisgICAgICAgIHRlc3Rsb2MgPSBvZS5wYXRoLmpvaW4odG1wX2RpciwgJ2xpYm9ldGVzdHMnKQorICAgICAgICBzcmMgPSBvZS5wYXRoLmpvaW4odGVzdGxvYywgJ3NyYycpCisgICAgICAgIGRzdCA9IG9lLnBhdGguam9pbih0ZXN0bG9jLCAnZHN0JykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRlc3Rsb2MpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzcmMpCisgICAgICAgIHRlc3RmaWxlcyA9IFsnZm9vJywgJ2JhcicsICcuYmF6JywgJ3F1dXgnXQorCisgICAgICAgIGRlZiB0b3VjaGZpbGUodGYpOgorICAgICAgICAgICAgb3BlbihvZS5wYXRoLmpvaW4oc3JjLCB0ZiksICd3K2InKS5jbG9zZSgpCisKKyAgICAgICAgZm9yIGYgaW4gdGVzdGZpbGVzOgorICAgICAgICAgICAgdG91Y2hmaWxlKGYpCisKKyAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHNyYywgZHN0KQorCisgICAgICAgIGRzdGNudCA9IGxlbihvcy5saXN0ZGlyKGRzdCkpCisgICAgICAgIHNyY2NudCA9IGxlbihvcy5saXN0ZGlyKHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRzdGNudCwgbGVuKHRlc3RmaWxlcyksICJOdW1iZXIgb2YgZmlsZXMgaW4gZHN0ICglcykgZGlmZmVycyBmcm9tIG51bWJlciBvZiBmaWxlcyBpbiBzcmMoJXMpLiIgJSAoZHN0Y250LCBzcmNjbnQpKQorCisgICAgICAgIG9lLnBhdGgucmVtb3ZlKHRlc3Rsb2MpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKaW5kZXggY2FjNmQ4NC4uMmU4MTM3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGljLWNoZWNrc3VtLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weQpAQCAtMTIsMjAgKzEyLDI0IEBACiAgICAgIyB0aGUgbGljZW5zZSBxYSB0byBmYWlsIGR1ZSB0byBhIG1pc21hdGNoZWQgbWQ1c3VtLgogICAgIEB0ZXN0Y2FzZSgxMTk3KQogICAgIGRlZiB0ZXN0X25vbm1hdGNoaW5nX2NoZWNrc3VtKHNlbGYpOgotICAgICAgICBiaXRiYWtlX2NtZCA9ICctYyBjb25maWd1cmUgZW1wdHl0ZXN0JworICAgICAgICBiaXRiYWtlX2NtZCA9ICctYyBwb3B1bGF0ZV9saWMgZW1wdHl0ZXN0JwogICAgICAgICBlcnJvcl9tc2cgPSAnZW1wdHl0ZXN0OiBUaGUgbmV3IG1kNSBjaGVja3N1bSBpcyA4ZDc3N2YzODVkM2RmZWM4ODE1ZDIwZjc0OTYwMjZkYycKIAogICAgICAgICBsaWNfZmlsZSwgbGljX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKICAgICAgICAgb3MuY2xvc2UobGljX2ZpbGUpCiAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAobGljX3BhdGgpCiAKLSAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ2VtcHR5dGVzdCcsICdJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIicpCi0gICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYygnZW1wdHl0ZXN0JywgJ0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyVzO21kNT1kNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSInICUgbGljX3BhdGgpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdlbXB0eXRlc3QnLCAiIiIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8lczttZDU9ZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiCitTUkNfVVJJID0gImZpbGU6Ly8lczttZDU9ZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiCisiIiIgJSAobGljX3BhdGgsIGxpY19wYXRoKSkKICAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCkKIAogICAgICAgICB3aXRoIG9wZW4obGljX3BhdGgsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoImRhdGEiKQogCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUX3JlbW92ZSA9IFwicmVwb3J0LWVycm9yXCIiKQogICAgICAgICByZXN1bHQgPSBiaXRiYWtlKGJpdGJha2VfY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCiAgICAgICAgIGlmIGVycm9yX21zZyBub3QgaW4gcmVzdWx0Lm91dHB1dDoKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wa2dkYXRhLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQppbmRleCAxMzhiMDNhLi41YTYzZjg5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wa2dkYXRhLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3BrZ2RhdGEucHkKQEAgLTEzMSwxNSArMTMxLDE1IEBACiAgICAgICAgICMgVGVzdCByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lCiAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIHpsaWItZGV2IHpsaWItZG9jJykKICAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQogICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQogICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKICAgICAgICAgIyBUZXN0IHJ1bnRpbWUgcGFja2FnZSBuYW1lCiAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1yIGxpYnoxIGxpYnotZGV2JykKICAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGZpbGVzWydsaWJ6MSddKSwgMSkKICAgICAgICAgbGlic3BlYyA9IG9zLnBhdGguam9pbihiYXNlX2xpYmRpciwgJ2xpYnouc28uMS4qJykKICAgICAgICAgZm91bmQgPSBGYWxzZQpAQCAtMTUyLDEyICsxNTIsMTIgQEAKICAgICAgICAgIyBUZXN0IHJlY2lwZQogICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliJykKICAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3psaWItbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGJnJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZG9jJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItc3RhdGljZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWInLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignemxpYi1sb2NhbGUnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKICAgICAgICAgIyAoaWdub3JlIHB0ZXN0LCBtaWdodCBub3QgYmUgdGhlcmUgZGVwZW5kaW5nIG9uIGNvbmZpZykKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCkBAIC0xNjUsMzYgKzE2NSwzNiBAQAogICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lCiAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXInKQogICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotbG9jYWxlJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQogICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCiAgICAgICAgICMgVGVzdCByZWNpcGUsIHVucGFja2FnZWQKICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtdScpCiAgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snemxpYi1zdGF0aWNkZXYnXSkKICAgICAgICAgIyBUZXN0IHJlY2lwZSwgcnVudGltZSwgdW5wYWNrYWdlZAogICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC1yIC11JykKICAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kYmcnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kb2MnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1zdGF0aWNkZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1sb2NhbGUnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkgIyB0aGlzIGlzIHRoZSBrZXkgb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQogICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcmVjaXBldG9vbC5weQppbmRleCBlNzI5MTFiLi5kYjFmOGRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKQEAgLTEsNyArMSw3IEBACiBpbXBvcnQgb3MKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB1cmxwYXJzZQoraW1wb3J0IHVybGxpYi5wYXJzZQogCiBmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgY3JlYXRlX3RlbXBfbGF5ZXIKIGZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQpAQCAtMjc4LDcgKzI3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCiAgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvZXRjL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wYXRjaGVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnV0FSTklORzogJyk6CisgICAgICAgICAgICBpZiAnV0FSTklORzogJyBpbiBsaW5lOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FkZC1maWxlLnBhdGNoJywgbGluZSwgJ1VuZXhwZWN0ZWQgd2FybmluZyBmb3VuZCBpbiBvdXRwdXQ6XG4lcycgJSBsaW5lKQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6CkBAIC0zODMsMTMgKzM4MywxMyBAQAogICAgIEB0ZXN0Y2FzZSgxMTk0KQogICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdChzZWxmKToKICAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBzaGxpYnMvcGtnZGF0YQotICAgICAgICBiaXRiYWtlKCdsaWJwbmcgcGFuZ28gbGlieDExIGxpYnhleHQganBlZyBsaWJ4c2V0dGluZ3MtY2xpZW50IGxpYmNoZWNrJykKKyAgICAgICAgYml0YmFrZSgnbGlicG5nIHBhbmdvIGxpYngxMSBsaWJ4ZXh0IGpwZWcgbGliY2hlY2snKQogICAgICAgICAjIFRyeSBhZGRpbmcgYSByZWNpcGUKICAgICAgICAgdGVtcHNyYyA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdzcmN0cmVlJykKICAgICAgICAgb3MubWFrZWRpcnModGVtcHNyYykKICAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdsaWJtYXRjaGJveC5iYicpCiAgICAgICAgIHNyY3VyaSA9ICdnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saWJtYXRjaGJveCcKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGNyZWF0ZSAtbyAlcyAlcyAteCAlcycgJSAocmVjaXBlZmlsZSwgc3JjdXJpLCB0ZW1wc3JjKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKFsncmVjaXBldG9vbCcsICdjcmVhdGUnLCAnLW8nLCByZWNpcGVmaWxlLCBzcmN1cmkgKyAiO3Jldj05ZjdjZjg4OTVhZTJkMzljNDY1YzA0Y2M3OGU5MThjMTU3NDIwMjY5IiwgJy14JywgdGVtcHNyY10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSwgJ3JlY2lwZXRvb2wgZGlkIG5vdCBjcmVhdGUgcmVjaXBlIGZpbGU7IG91dHB1dDpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCiAgICAgICAgIGNoZWNrdmFycyA9IHt9CiAgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0xHUEx2Mi4xJwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JwogICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMS4xMStnaXQke1NSQ1BWfScKICAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSBzcmN1cmkKLSAgICAgICAgY2hlY2t2YXJzWydERVBFTkRTJ10gPSBzZXQoWydsaWJjaGVjaycsICdsaWJqcGVnLXR1cmJvJywgJ2xpYnBuZycsICdsaWJ4MTEnLCAnbGlieHNldHRpbmdzLWNsaWVudCcsICdsaWJ4ZXh0JywgJ3BhbmdvJ10pCisgICAgICAgIGNoZWNrdmFyc1snREVQRU5EUyddID0gc2V0KFsnbGliY2hlY2snLCAnbGlianBlZy10dXJibycsICdsaWJwbmcnLCAnbGlieDExJywgJ2xpYnhleHQnLCAncGFuZ28nXSkKICAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scycsICdwa2djb25maWcnXQogICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQogCkBAIC00NDIsNiArNDQyLDQ5IEBACiAgICAgICAgIGluaGVyaXRzID0gWydjbWFrZScsICdweXRob24tZGlyJywgJ2dldHRleHQnLCAncGtnY29uZmlnJ10KICAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKIAorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdGh1YihzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIHNlZSBpZiBnaXRodWIgVVJMIG1hbmdsaW5nIHdvcmtzCisgICAgICAgIHRlbXByZWNpcGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAncmVjaXBlJykKKyAgICAgICAgb3MubWFrZWRpcnModGVtcHJlY2lwZSkKKyAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCAnbWVzb25fZ2l0LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzJyAlICh0ZW1wcmVjaXBlLCBzcmN1cmkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSkpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gc2V0KFsnQXBhY2hlLTIuMCddKQorICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9ICdnaXQ6Ly9naXRodWIuY29tL21lc29uYnVpbGQvbWVzb247cHJvdG9jb2w9aHR0cHMnCisgICAgICAgIGluaGVyaXRzID0gWydzZXR1cHRvb2xzJ10KKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdGh1Yl90YXJiYWxsKHNlbGYpOgorICAgICAgICAjIEJhc2ljIHRlc3QgdG8gZW5zdXJlIGdpdGh1YiBVUkwgbWFuZ2xpbmcgZG9lc24ndCBhcHBseSB0byByZWxlYXNlIHRhcmJhbGxzCisgICAgICAgIHRlbXByZWNpcGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAncmVjaXBlJykKKyAgICAgICAgb3MubWFrZWRpcnModGVtcHJlY2lwZSkKKyAgICAgICAgcHYgPSAnMC4zMi4wJworICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHRlbXByZWNpcGUsICdtZXNvbl8lcy5iYicgJSBwdikKKyAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uL3JlbGVhc2VzL2Rvd25sb2FkLyVzL21lc29uLSVzLnRhci5neicgJSAocHYsIHB2KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzJyAlICh0ZW1wcmVjaXBlLCBzcmN1cmkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSkpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gc2V0KFsnQXBhY2hlLTIuMCddKQorICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9ICdodHRwczovL2dpdGh1Yi5jb20vbWVzb25idWlsZC9tZXNvbi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS9tZXNvbi0ke1BWfS50YXIuZ3onCisgICAgICAgIGluaGVyaXRzID0gWydzZXR1cHRvb2xzJ10KKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdF9odHRwKHNlbGYpOgorICAgICAgICAjIEJhc2ljIHRlc3QgdG8gY2hlY2sgaHR0cCBnaXQgVVJMIG1hbmdsaW5nIHdvcmtzCisgICAgICAgIHRlbXByZWNpcGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAncmVjaXBlJykKKyAgICAgICAgb3MubWFrZWRpcnModGVtcHJlY2lwZSkKKyAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCAnbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvbWF0Y2hib3gtdGVybWluYWwnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMnICUgKHRlbXByZWNpcGUsIHNyY3VyaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSkKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSBzZXQoWydHUEx2MiddKQorICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9ICdnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvbWF0Y2hib3gtdGVybWluYWw7cHJvdG9jb2w9aHR0cCcKKyAgICAgICAgaW5oZXJpdHMgPSBbJ3BrZ2NvbmZpZycsICdhdXRvdG9vbHMnXQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQorCiBjbGFzcyBSZWNpcGV0b29sQXBwZW5kc3JjQmFzZShSZWNpcGV0b29sQmFzZSk6CiAgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBvcHRpb25zLCBleHBlY3RlZGxpbmVzLCBleHBlY3RlZGZpbGVzKToKICAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcyAlcycgJSAob3B0aW9ucywgc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlKQpAQCAtNDcxLDcgKzUxNCw3IEBACiAgICAgICAgICcnJ1JldHVybiB0aGUgZmlyc3QgZmlsZTovLyBpbiBTUkNfVVJJIGZvciB0aGUgc3BlY2lmaWVkIHJlY2lwZS4nJycKICAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCByZWNpcGUpLnNwbGl0KCkKICAgICAgICAgZm9yIHVyaSBpbiBzcmNfdXJpOgotICAgICAgICAgICAgcCA9IHVybHBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgICAgIHAgPSB1cmxsaWIucGFyc2UudXJscGFyc2UodXJpKQogICAgICAgICAgICAgaWYgcC5zY2hlbWUgPT0gJ2ZpbGUnOgogICAgICAgICAgICAgICAgIHJldHVybiBwLm5ldGxvYyArIHAucGF0aAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9ydW50aW1lLXRlc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9ydW50aW1lLXRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNWI0NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3J1bnRpbWUtdGVzdC5weQpAQCAtMCwwICsxLDEwNSBAQAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBydW5xZW11Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKK2ltcG9ydCBvcworCitjbGFzcyBUZXN0RXhwb3J0KG9lU2VsZlRlc3QpOgorCisgICAgZGVmIHRlc3RfdGVzdGV4cG9ydF9iYXNpYyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGJhc2ljIHRlc3RleHBvcnQgZnVuY3Rpb25hbGl0eSB3aXRoIG9ubHkgcGluZyB0ZXN0IGVuYWJsZWQuCisgICAgICAgIEV4cGVjdGVkOiAxLiB0ZXN0ZXhwb3J0IGRpcmVjdG9yeSBtdXN0IGJlIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAyLiBydW5leHBvcnRlZC5weSBtdXN0IHJ1biB3aXRob3V0IGFueSBlcnJvci9leGNlcHRpb24uCisgICAgICAgICAgICAgICAgICAzLiBwaW5nIHRlc3QgbXVzdCBzdWNjZWVkLgorICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gInRlc3RleHBvcnQiXG4nCisgICAgICAgICMgVGhlc2UgYXJlbid0IHRoZSBhY3R1YWwgSVAgYWRkcmVzc2VzIGJ1dCB0ZXN0ZXhwb3J0IGNsYXNzIG5lZWRzIHNvbWV0aGluZyBkZWZpbmVkCisgICAgICAgIGZlYXR1cmVzICs9ICdURVNUX1NFUlZFUl9JUCA9ICIxOTIuMTY4LjcuMSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4xIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9TVUlURVMgPSAicGluZyJcbicKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCB0ZXNleHBvcnQgZm9yIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICBiaXRiYWtlKCctYyB0ZXN0ZXhwb3J0IGNvcmUtaW1hZ2UtbWluaW1hbCcpCisKKyAgICAgICAgIyBWZXJpZnkgaWYgVEVTVF9FWFBPUlRfRElSIHdhcyBjcmVhdGVkCisgICAgICAgIHRlc3RleHBvcnRfZGlyID0gZ2V0X2JiX3ZhcignVEVTVF9FWFBPUlRfRElSJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIGlzZGlyID0gb3MucGF0aC5pc2Rpcih0ZXN0ZXhwb3J0X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc2RpciwgJ0ZhaWxlZCB0byBjcmVhdGUgdGVzdGV4cG9ydCBkaXI6ICVzJyAlIHRlc3RleHBvcnRfZGlyKQorCisgICAgICAgIHdpdGggcnVucWVtdSgnY29yZS1pbWFnZS1taW5pbWFsJykgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBydW4gcnVuZXhwb3J0ZWQucHkgdG8gcGVyZm9ybSBwaW5nIHRlc3QKKyAgICAgICAgICAgIHJ1bmV4cG9ydGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdGV4cG9ydF9kaXIsICJydW5leHBvcnRlZC5weSIpCisgICAgICAgICAgICB0ZXN0ZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RleHBvcnRfZGlyLCAidGVzdGRhdGEuanNvbiIpCisgICAgICAgICAgICBjbWQgPSAiJXMgLXQgJXMgLXMgJXMgJXMiICUgKHJ1bmV4cG9ydGVkX3BhdGgsIHFlbXUuaXAsIHFlbXUuc2VydmVyX2lwLCB0ZXN0ZGF0YV9wYXRoKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgJ3J1bmV4cG9ydGVkLnB5IHJldHVybmVkIGEgbm9uIDAgc3RhdHVzJykKKworICAgICAgICAgICAgIyBWZXJpZnkgcGluZyB0ZXN0IHdhcyBzdWNjZXNmdWwKKyAgICAgICAgICAgIGZhaWx1cmUgPSBUcnVlIGlmICdGQUlMJyBpbiByZXN1bHQub3V0cHV0IGVsc2UgRmFsc2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoVHJ1ZSwgZmFpbHVyZSwgJ3BpbmcgdGVzdCBmYWlsZWQnKQorCisgICAgZGVmIHRlc3RfdGVzdGV4cG9ydF9zZGsoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiBDaGVjayBzZGsgZnVuY3Rpb25hbGl0eSBmb3IgdGVzdGV4cG9ydC4KKyAgICAgICAgRXhwZWN0ZWQ6IDEuIHRlc3RleHBvcnQgZGlyZWN0b3J5IG11c3QgYmUgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgIDIuIFNESyB0YXJiYWxsIG11c3QgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgMy4gVW5jb21wcmVzc2luZyBvZiB0YXJiYWxsIG11c3Qgc3VjY2VlZC4KKyAgICAgICAgICAgICAgICAgIDQuIENoZWNrIGlmIHRoZSBTREsgZGlyZWN0b3J5IGlzIGFkZGVkIHRvIFBBVEguCisgICAgICAgICAgICAgICAgICA1LiBSdW4gdGFyIGZyb20gdGhlIFNESyBkaXJlY3RvcnkuCisgICAgICAgIFByb2R1Y3Q6IG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnSU5IRVJJVCArPSAidGVzdGV4cG9ydCJcbicKKyAgICAgICAgIyBUaGVzZSBhcmVuJ3QgdGhlIGFjdHVhbCBJUCBhZGRyZXNzZXMgYnV0IHRlc3RleHBvcnQgY2xhc3MgbmVlZHMgc29tZXRoaW5nIGRlZmluZWQKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfU0VSVkVSX0lQID0gIjE5Mi4xNjguNy4xIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC43LjEiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdURVNUX1NVSVRFUyA9ICJwaW5nIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9TVUlURVNfVEFHUyA9ICJzZWxmdGVzdF9zZGsiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdURVNUX0VYUE9SVF9TREtfRU5BQkxFRCA9ICIxIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9FWFBPUlRfU0RLX1BBQ0tBR0VTID0gIm5hdGl2ZXNkay10YXIiXG4nCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgICMgQnVpbGQgdGVzZXhwb3J0IGZvciBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgYml0YmFrZSgnLWMgdGVzdGV4cG9ydCBjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgICMgQ2hlY2sgZm9yIFNESworICAgICAgICB0ZXN0ZXhwb3J0X2RpciA9IGdldF9iYl92YXIoJ1RFU1RfRVhQT1JUX0RJUicsICdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICBzZGtfZGlyID0gZ2V0X2JiX3ZhcignVEVTVF9FWFBPUlRfU0RLX0RJUicsICdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICB0YXJiYWxsX25hbWUgPSAiJXMuc2giICUgZ2V0X2JiX3ZhcignVEVTVF9FWFBPUlRfU0RLX05BTUUnLCAnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgdGFyYmFsbF9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RleHBvcnRfZGlyLCBzZGtfZGlyLCB0YXJiYWxsX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5pc2ZpbGUodGFyYmFsbF9wYXRoKSwgVHJ1ZSwgIkNvdWxkbid0IGZpbmQgU0RLIHRhcmJhbGw6ICVzIiAlIHRhcmJhbGxfcGF0aCkKKworICAgICAgICAjIFJ1biBydW5leHBvcnRlZC5weQorICAgICAgICBydW5leHBvcnRlZF9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RleHBvcnRfZGlyLCAicnVuZXhwb3J0ZWQucHkiKQorICAgICAgICB0ZXN0ZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RleHBvcnRfZGlyLCAidGVzdGRhdGEuanNvbiIpCisgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAocnVuZXhwb3J0ZWRfcGF0aCwgdGVzdGRhdGFfcGF0aCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAncnVuZXhwb3J0ZWQucHkgcmV0dXJuZWQgYSBub24gMCBzdGF0dXMnKQorCisKK2NsYXNzIFRlc3RJbWFnZShvZVNlbGZUZXN0KToKKworICAgIGRlZiB0ZXN0X3Rlc3RpbWFnZV9pbnN0YWxsKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogQ2hlY2sgaW5zdGFsbCBwYWNrYWdlcyBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0aW1hZ2UvdGVzdGV4cG9ydC4KKyAgICAgICAgRXhwZWN0ZWQ6IDEuIEltcG9ydCB0ZXN0cyBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gbWV0YS4KKyAgICAgICAgICAgICAgICAgIDIuIENoZWNrIGluc3RhbGwvdW5pc3RhbGwgb2Ygc29jYXQuCisgICAgICAgIFByb2R1Y3Q6IG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnSU5IRVJJVCArPSAidGVzdGltYWdlIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9TVUlURVMgPSAicGluZyBzc2ggc2VsZnRlc3QiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdURVNUX1NVSVRFU19UQUdTID0gInNlbGZ0ZXN0X3BhY2thZ2VfaW5zdGFsbCJcbicKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBjb3JlLWltYWdlLXNhdG8gYW5kIHRlc3RpbWFnZQorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLWZ1bGwtY21kbGluZSBzb2NhdCcpCisgICAgICAgIGJpdGJha2UoJy1jIHRlc3RpbWFnZSBjb3JlLWltYWdlLWZ1bGwtY21kbGluZScpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zaWduaW5nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc2lnbmluZy5weQppbmRleCAxYmFiY2EwLi40YzEyZDZkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zaWduaW5nLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NpZ25pbmcucHkKQEAgLTEyLDMwICsxMiwyMiBAQAogY2xhc3MgU2lnbmluZyhvZVNlbGZUZXN0KToKIAogICAgIGdwZ19kaXIgPSAiIgotICAgIHB1Yl9rZXlfbmFtZSA9ICdrZXkucHViJwotICAgIHNlY3JldF9rZXlfbmFtZSA9ICdrZXkuc2VjcmV0JworICAgIHB1Yl9rZXlfcGF0aCA9ICIiCisgICAgc2VjcmV0X2tleV9wYXRoID0gIiIKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgICMgSW1wb3J0IHRoZSBncGcga2V5cworICAgICAgICAjIENoZWNrIHRoYXQgd2UgY2FuIGZpbmQgdGhlIGdwZyBiaW5hcnkgYW5kIGZhaWwgZWFybHkgaWYgd2UgY2FuJ3QKKyAgICAgICAgaWYgbm90IHNodXRpbC53aGljaCgiZ3BnIik6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGhpcyB0ZXN0IG5lZWRzIEdudVBHIikKIAotICAgICAgICBjbHMuZ3BnX2RpciA9IG9zLnBhdGguam9pbihjbHMudGVzdGxheWVyX3BhdGgsICdmaWxlcy9zaWduaW5nLycpCisgICAgICAgIGNscy5ncGdfaG9tZV9kaXIgPSB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkocHJlZml4PSJvZXFhLXNpZ25pbmctIikKKyAgICAgICAgY2xzLmdwZ19kaXIgPSBjbHMuZ3BnX2hvbWVfZGlyLm5hbWUKIAotICAgICAgICAjIGtleS5zZWNyZXQga2V5LnB1YiBhcmUgbG9jYXRlZCBpbiBncGdfZGlyCi0gICAgICAgIHB1Yl9rZXlfbG9jYXRpb24gPSBjbHMuZ3BnX2RpciArIGNscy5wdWJfa2V5X25hbWUKLSAgICAgICAgc2VjcmV0X2tleV9sb2NhdGlvbiA9IGNscy5ncGdfZGlyICsgY2xzLnNlY3JldF9rZXlfbmFtZQotICAgICAgICBydW5DbWQoJ2dwZyAtLWhvbWVkaXIgJXMgLS1pbXBvcnQgJXMgJXMnICUgKGNscy5ncGdfZGlyLCBwdWJfa2V5X2xvY2F0aW9uLCBzZWNyZXRfa2V5X2xvY2F0aW9uKSkKKyAgICAgICAgY2xzLnB1Yl9rZXlfcGF0aCA9IG9zLnBhdGguam9pbihjbHMudGVzdGxheWVyX3BhdGgsICdmaWxlcycsICdzaWduaW5nJywgImtleS5wdWIiKQorICAgICAgICBjbHMuc2VjcmV0X2tleV9wYXRoID0gb3MucGF0aC5qb2luKGNscy50ZXN0bGF5ZXJfcGF0aCwgJ2ZpbGVzJywgJ3NpZ25pbmcnLCAia2V5LnNlY3JldCIpCiAKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICAjIERlbGV0ZSB0aGUgZmlsZXMgZ2VuZXJhdGVkIGJ5ICdncGcgLS1pbXBvcnQnCi0KLSAgICAgICAgZ3BnX2ZpbGVzID0gZ2xvYi5nbG9iKGNscy5ncGdfZGlyICsgJyouZ3BnKicpCi0gICAgICAgIHJhbmRvbV9zZWVkX2ZpbGUgPSBjbHMuZ3BnX2RpciArICdyYW5kb21fc2VlZCcKLSAgICAgICAgZ3BnX2ZpbGVzLmFwcGVuZChyYW5kb21fc2VlZF9maWxlKQotCi0gICAgICAgIGZvciBncGdfZmlsZSBpbiBncGdfZmlsZXM6Ci0gICAgICAgICAgICBydW5DbWQoJ3JtIC1mICcgKyBncGdfZmlsZSkKKyAgICAgICAgcnVuQ21kKCdncGcgLS1ob21lZGlyICVzIC0taW1wb3J0ICVzICVzJyAlIChjbHMuZ3BnX2RpciwgY2xzLnB1Yl9rZXlfcGF0aCwgY2xzLnNlY3JldF9rZXlfcGF0aCkpCiAKICAgICBAdGVzdGNhc2UoMTM2MikKICAgICBkZWYgdGVzdF9zaWduaW5nX3BhY2thZ2VzKHNlbGYpOgpAQCAtNTcsNyArNDksNyBAQAogICAgICAgICBmZWF0dXJlID0gJ0lOSEVSSVQgKz0gInNpZ25fcnBtIlxuJwogICAgICAgICBmZWF0dXJlICs9ICdSUE1fR1BHX1BBU1NQSFJBU0UgPSAidGVzdDEyMyJcbicKICAgICAgICAgZmVhdHVyZSArPSAnUlBNX0dQR19OQU1FID0gInRlc3R1c2VyIlxuJwotICAgICAgICBmZWF0dXJlICs9ICdSUE1fR1BHX1BVQktFWSA9ICIlcyVzIlxuJyAlIChzZWxmLmdwZ19kaXIsIHNlbGYucHViX2tleV9uYW1lKQorICAgICAgICBmZWF0dXJlICs9ICdSUE1fR1BHX1BVQktFWSA9ICIlcyJcbicgJSBzZWxmLnB1Yl9rZXlfcGF0aAogICAgICAgICBmZWF0dXJlICs9ICdHUEdfUEFUSCA9ICIlcyJcbicgJSBzZWxmLmdwZ19kaXIKIAogICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlKQpAQCAtODEsOCArNzMsOCBAQAogICAgICAgICAjIFVzZSBhIHRlbXBvcmFyeSBycG1kYgogICAgICAgICBycG1kYiA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdvZXFhLXJwbWRiJykKIAotICAgICAgICBydW5DbWQoJyVzL3JwbSAtLWRlZmluZSAiX2RicGF0aCAlcyIgLS1pbXBvcnQgJXMlcycgJQotICAgICAgICAgICAgICAgKHN0YWdpbmdfYmluZGlyX25hdGl2ZSwgcnBtZGIsIHNlbGYuZ3BnX2Rpciwgc2VsZi5wdWJfa2V5X25hbWUpKQorICAgICAgICBydW5DbWQoJyVzL3JwbSAtLWRlZmluZSAiX2RicGF0aCAlcyIgLS1pbXBvcnQgJXMnICUKKyAgICAgICAgICAgICAgIChzdGFnaW5nX2JpbmRpcl9uYXRpdmUsIHJwbWRiLCBzZWxmLnB1Yl9rZXlfcGF0aCkpCiAKICAgICAgICAgcmV0ID0gcnVuQ21kKCclcy9ycG0gLS1kZWZpbmUgIl9kYnBhdGggJXMiIC0tY2hlY2tzaWcgJXMnICUKICAgICAgICAgICAgICAgICAgICAgIChzdGFnaW5nX2JpbmRpcl9uYXRpdmUsIHJwbWRiLCBwa2dfZGVwbG95KSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZXRlc3RzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKaW5kZXggYWNhZjQwNS4uNjY0MjUzOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKQEAgLTIzNyw2ICsyMzcsNyBAQAogQlVJTERfQVJDSCA9ICJ4ODZfNjQiCiBCVUlMRF9PUyA9ICJsaW51eCIKIFNES01BQ0hJTkUgPSAieDg2XzY0IgorUEFDS0FHRV9DTEFTU0VTID0gInBhY2thZ2VfcnBtIHBhY2thZ2VfaXBrIHBhY2thZ2VfZGViIgogIiIiKQogICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKICAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQpAQCAtMjQ2LDYgKzI0Nyw3IEBACiBCVUlMRF9BUkNIID0gImk2ODYiCiBCVUlMRF9PUyA9ICJsaW51eCIKIFNES01BQ0hJTkUgPSAiaTY4NiIKK1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlX3JwbSBwYWNrYWdlX2lwayBwYWNrYWdlX2RlYiIKICIiIikKICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQogICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCkBAIC0yNjQsNyArMjY2LDcgQEAKICAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKICAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKS5yZXBsYWNlKCJpNjg2LWxpbnV4IiwgIng4Nl82NC1saW51eCIpLnJlcGxhY2UoImk2ODYiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICJ4ODZfNjQiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICkgZm9yIHggaW4gZmlsZXMyXQogICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmaWxlczEsIGZpbGVzMikKKyAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKGZpbGVzMSwgZmlsZXMyKQogCiAKICAgICBAdGVzdGNhc2UoMTI3MSkKQEAgLTI5OCw3ICszMDAsNyBAQAogICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iKQogICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpIGZvciB4IGluIGZpbGVzMl0KICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQotICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChmaWxlczEsIGZpbGVzMikKIAogICAgIEB0ZXN0Y2FzZSgxMzY4KQogICAgIGRlZiB0ZXN0X3NzdGF0ZV9hbGxhcmNoX3NhbWVzaWdzKHNlbGYpOgpAQCAtMzA5LDE5ICszMTEsNDggQEAKICAgICAgICAgdGhlIHR3byBNQUNISU5FIHZhbHVlcy4KICAgICAgICAgIiIiCiAKKyAgICAgICAgY29uZmlnQSA9ICIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK01BQ0hJTkUgPSBcInFlbXV4ODYtNjRcIgorIiIiCisgICAgICAgIGNvbmZpZ0IgPSAiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgorTUFDSElORSA9IFwicWVtdWFybVwiCisiIiIKKyAgICAgICAgc2VsZi5zc3RhdGVfYWxsYXJjaF9zYW1lc2lncyhjb25maWdBLCBjb25maWdCKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX2FsbGFyY2hfc2FtZXNpZ3NfbXVsdGlsaWIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBvZiBhbGxhcmNoIG11bHRpbGliIHBhY2thZ2VzIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIKKyAgICAgICAgTUFDSElORSBpcyBzZXQuIENoZWNrIHRoaXMgdXNpbmcgYml0YmFrZSAtUy4KKyAgICAgICAgQWxzbywgcmF0aGVyIHRoYW4gZHVwbGljYXRlIHRoZSB0ZXN0LCBjaGVjayBuYXRpdmVzZGsgc3RhbXBzIGFyZSB0aGUgc2FtZSBiZXR3ZWVuCisgICAgICAgIHRoZSB0d28gTUFDSElORSB2YWx1ZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGNvbmZpZ0EgPSAiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCitNQUNISU5FID0gXCJxZW11eDg2LTY0XCIKK3JlcXVpcmUgY29uZi9tdWx0aWxpYi5jb25mCitNVUxUSUxJQlMgPSBcIm11bHRpbGliOmxpYjMyXCIKK0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9IFwieDg2XCIKKyIiIgorICAgICAgICBjb25maWdCID0gIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKK01BQ0hJTkUgPSBcInFlbXVhcm1cIgorcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKK01VTFRJTElCUyA9IFwiXCIKKyIiIgorICAgICAgICBzZWxmLnNzdGF0ZV9hbGxhcmNoX3NhbWVzaWdzKGNvbmZpZ0EsIGNvbmZpZ0IpCisKKyAgICBkZWYgc3N0YXRlX2FsbGFyY2hfc2FtZXNpZ3Moc2VsZiwgY29uZmlnQSwgY29uZmlnQik6CisKICAgICAgICAgdG9wZGlyID0gZ2V0X2JiX3ZhcignVE9QRElSJykKICAgICAgICAgdGFyZ2V0b3MgPSBnZXRfYmJfdmFyKCdUQVJHRVRfT1MnKQogICAgICAgICB0YXJnZXR2ZW5kb3IgPSBnZXRfYmJfdmFyKCdUQVJHRVRfVkVORE9SJykKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCi1UTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgotTUFDSElORSA9IFwicWVtdXg4NlwiCi0iIiIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGNvbmZpZ0EpCiAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQogICAgICAgICBiaXRiYWtlKCJ3b3JsZCBtZXRhLXRvb2xjaGFpbiAtUyBub25lIikKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCi1UTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKLU1BQ0hJTkUgPSBcInFlbXVhcm1cIgotIiIiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWdCKQogICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCiAgICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQogCkBAIC0zOTMsNyArNDI0LDcgQEAKICAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMiKQogICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpIGZvciB4IGluIGZpbGVzMl0KICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQotICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChmaWxlczEsIGZpbGVzMikKIAogCiAgICAgZGVmIHRlc3Rfc3N0YXRlX25vb3Bfc2FtZXNpZ3Moc2VsZik6CkBAIC00MTEsOSArNDQyLDExIEBACiBETF9ESVIgPSAiJHtUT1BESVJ9L2Rvd25sb2FkMSIKIFRJTUUgPSAiMTExMTExIgogREFURSA9ICIyMDE2MTExMSIKLUlOSEVSSVRfcmVtb3ZlID0gImJ1aWxkc3RhdHMtc3VtbWFyeSBidWlsZGhpc3RvcnkiCitJTkhFUklUX3JlbW92ZSA9ICJidWlsZHN0YXRzLXN1bW1hcnkgYnVpbGRoaXN0b3J5IHVuaW5hdGl2ZSIKK2h0dHBfcHJveHkgPSAiIgogIiIiKQogICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL2Rvd25sb2FkMSIpCiAgICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQogICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKIFRNUERJUiA9ICIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMiIKQEAgLTQyMiw5ICs0NTUsMTMgQEAKIERMX0RJUiA9ICIke1RPUERJUn0vZG93bmxvYWQyIgogVElNRSA9ICIyMjIyMjIiCiBEQVRFID0gIjIwMTYxMjEyIgorIyBBbHdheXMgcmVtb3ZlIHVuaW5hdGl2ZSBhcyB3ZSdyZSBjaGFuZ2luZyBwcm94aWVzCitJTkhFUklUX3JlbW92ZSA9ICJ1bmluYXRpdmUiCiBJTkhFUklUICs9ICJidWlsZHN0YXRzLXN1bW1hcnkgYnVpbGRoaXN0b3J5IgoraHR0cF9wcm94eSA9ICJodHRwOi8vZXhhbXBsZS5jb20vIgogIiIiKQogICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi9kb3dubG9hZDIiKQogICAgICAgICBiaXRiYWtlKCJ3b3JsZCBtZXRhLXRvb2xjaGFpbiAtUyBub25lIikKIAogICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgpAQCAtNDM5LDIzICs0NzYsMjMgQEAKICAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy8iKQogICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iKQogICAgICAgICAjIFJlbW92ZSBpdGVtcyB0aGF0IGFyZSBpZGVudGljYWwgaW4gYm90aCBzZXRzCi0gICAgICAgIGZvciBrLHYgaW4gZmlsZXMxLnZpZXdpdGVtcygpICYgZmlsZXMyLnZpZXdpdGVtcygpOgorICAgICAgICBmb3Igayx2IGluIGZpbGVzMS5pdGVtcygpICYgZmlsZXMyLml0ZW1zKCk6CiAgICAgICAgICAgICBkZWwgZmlsZXMxW2tdCiAgICAgICAgICAgICBkZWwgZmlsZXMyW2tdCiAgICAgICAgIGlmIG5vdCBmaWxlczEgYW5kIG5vdCBmaWxlczI6CiAgICAgICAgICAgICAjIE5vIGNoYW5nZXMsIHNvIHdlJ3JlIGRvbmUKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGZvciBrIGluIGZpbGVzMS52aWV3a2V5cygpIHwgZmlsZXMyLnZpZXdrZXlzKCk6CisgICAgICAgIGZvciBrIGluIGZpbGVzMS5rZXlzKCkgfCBmaWxlczIua2V5cygpOgogICAgICAgICAgICAgaWYgayBpbiBmaWxlczEgYW5kIGsgaW4gZmlsZXMyOgotICAgICAgICAgICAgICAgIHByaW50ICIlcyBkaWZmZXJzOiIgJSBrCi0gICAgICAgICAgICAgICAgcHJpbnQgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoKCJiaXRiYWtlLWRpZmZzaWdzIiwKKyAgICAgICAgICAgICAgICBwcmludCgiJXMgZGlmZmVyczoiICUgaykKKyAgICAgICAgICAgICAgICBwcmludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgoImJpdGJha2UtZGlmZnNpZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIiArIGsgKyAiLiIgKyBmaWxlczFba10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIiArIGsgKyAiLiIgKyBmaWxlczJba10pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIgKyBrICsgIi4iICsgZmlsZXMyW2tdKSkpCiAgICAgICAgICAgICBlbGlmIGsgaW4gZmlsZXMxIGFuZCBrIG5vdCBpbiBmaWxlczI6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIiVzIGluIGZpbGVzMSIgJSBrCisgICAgICAgICAgICAgICAgcHJpbnQoIiVzIGluIGZpbGVzMSIgJSBrKQogICAgICAgICAgICAgZWxpZiBrIG5vdCBpbiBmaWxlczEgYW5kIGsgaW4gZmlsZXMyOgotICAgICAgICAgICAgICAgIHByaW50ICIlcyBpbiBmaWxlczIiICUgaworICAgICAgICAgICAgICAgIHByaW50KCIlcyBpbiBmaWxlczIiICUgaykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYXNzZXJ0ICJzaG91bGRuJ3QgcmVhY2ggaGVyZSIKICAgICAgICAgc2VsZi5mYWlsKCJzc3RhdGUgaGFzaGVzIG5vdCBpZGVudGljYWwuIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3dpYy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3dpYy5weQppbmRleCBhNTY5ZmJmLi5mYWFjMTFlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICMgc2V0VXBDbGFzcyBiZWluZyB1bmF2YWlsYWJsZS4KICAgICAgICAgaWYgbm90IFdpYy5pbWFnZV9pc19yZWFkeToKICAgICAgICAgICAgIGJpdGJha2UoJ3N5c2xpbnV4IHN5c2xpbnV4LW5hdGl2ZSBwYXJ0ZWQtbmF0aXZlIGdwdGZkaXNrLW5hdGl2ZSAnCi0gICAgICAgICAgICAgICAgICAgICdkb3Nmc3Rvb2xzLW5hdGl2ZSBtdG9vbHMtbmF0aXZlJykKKyAgICAgICAgICAgICAgICAgICAgJ2Rvc2ZzdG9vbHMtbmF0aXZlIG10b29scy1uYXRpdmUgYm1hcC10b29scy1uYXRpdmUnKQogICAgICAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKICAgICAgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IFRydWUKIApAQCAtMjc2LDMgKzI3NiwyNiBAQAogICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bl9zZXJpYWwoY29tbWFuZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc3RhdHVzLCAnRmFpbGVkIHRvIHJ1biBjb21tYW5kICIlcyI6ICVzJyAlIChjb21tYW5kLCBvdXRwdXQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICcvZGV2L3Jvb3QgL1xyXG4vZGV2L3ZkYTMgL21udCcpCisKKyAgICBkZWYgdGVzdF9ibWFwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGdlbmVyYXRpb24gb2YgLmJtYXAgZmlsZSIiIgorICAgICAgICBpbWFnZSA9ICJkaXJlY3RkaXNrIgorICAgICAgICBzdGF0dXMgPSBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIC0tYm1hcCIgJSBpbWFnZSkuc3RhdHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0LmJtYXAiICUgaW1hZ2UpKSkKKworICAgIGRlZiB0ZXN0X3N5c3RlbWRfYm9vdGRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2Ygc3lzdGVtZC1ib290ZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJzeXN0ZW1kLWJvb3RkaXNrIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbWFnZSkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKKworICAgIGRlZiB0ZXN0X3NkaW1hZ2VfYm9vdHBhcnQoc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2Ygc2RpbWFnZS1ib290cGFydCBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJzZGltYWdlLWJvb3RwYXJ0IgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU1BR0VfQk9PVF9GSUxFUyA9ICJiekltYWdlIlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW1hZ2UpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIGltYWdlKSkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weQppbmRleCA1NDIyYTYxLi4yNDY2OWY0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3RhcmdldGNvbnRyb2wucHkKQEAgLTQzLDkgKzQzLDcgQEAKICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIoZCkKIAogCi1jbGFzcyBCYXNlVGFyZ2V0KG9iamVjdCk6Ci0KLSAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorY2xhc3MgQmFzZVRhcmdldChvYmplY3QsIG1ldGFjbGFzcz1BQkNNZXRhKToKIAogICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gW10KIApAQCAtNjgsNyArNjYsNyBAQAogICAgICAgICBiYi5ub3RlKCJTU0ggbG9nIGZpbGU6ICVzIiAlICBzZWxmLnNzaGxvZykKIAogICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSwgc3NoPVRydWUpOgorICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSwgc3NoPVRydWUsIGV4dHJhX2Jvb3RwYXJhbXM9Tm9uZSk6CiAgICAgICAgIHBhc3MKIAogICAgIEBhYnN0cmFjdG1ldGhvZApAQCAtMTIxLDEyICsxMTksMTcgQEAKIAogICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZSA9IHNlbGYuZ2V0X2ltYWdlX2ZzdHlwZShkKQogICAgICAgICBzZWxmLnFlbXVsb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAicWVtdV9ib290X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQotICAgICAgICBzZWxmLm9yaWdyb290ZnMgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICcuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQotICAgICAgICBzZWxmLnJvb3RmcyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICctdGVzdGltYWdlLicgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICcuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQogICAgICAgICBzZWxmLmtlcm5lbCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCBkLmdldFZhcigiS0VSTkVMX0lNQUdFVFlQRSIsIEZhbHNlKSArICctJyArIGQuZ2V0VmFyKCdNQUNISU5FJywgRmFsc2UpICsgJy5iaW4nKQogICAgICAgICBkdW1wX3RhcmdldF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX3RhcmdldCIsIFRydWUpCiAgICAgICAgIGR1bXBfaG9zdF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX2hvc3QiLCBUcnVlKQogICAgICAgICBkdW1wX2RpciA9IGQuZ2V0VmFyKCJURVNUSU1BR0VfRFVNUF9ESVIiLCBUcnVlKQorICAgICAgICBpZiBkLmdldFZhcigiUUVNVV9VU0VfS1ZNIiwgRmFsc2UpIGlzIG5vdCBOb25lIFwKKyAgICAgICAgICAgYW5kIGQuZ2V0VmFyKCJRRU1VX1VTRV9LVk0iLCBGYWxzZSkgPT0gIlRydWUiIFwKKyAgICAgICAgICAgYW5kICJ4ODYiIGluIGQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSk6CisgICAgICAgICAgICB1c2Vfa3ZtID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlX2t2bSA9IEZhbHNlCiAKICAgICAgICAgIyBMb2cgUWVtdVJ1bm5lciBsb2cgb3V0cHV0IHRvIGEgZmlsZQogICAgICAgICBpbXBvcnQgb2UucGF0aApAQCAtMTU1LDE3ICsxNTgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkuZ2V0VmFyKCJESVNQTEFZIiwgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmlsZSA9IHNlbGYucWVtdWxvZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290dGltZSA9IGludChkLmdldFZhcigiVEVTVF9RRU1VQk9PVF9USU1FT1VUIiwgVHJ1ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9rdm0gPSB1c2Vfa3ZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfZGlyID0gZHVtcF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpKQogCiAgICAgICAgIHNlbGYudGFyZ2V0X2R1bXBlciA9IFRhcmdldER1bXBlcihkdW1wX3RhcmdldF9jbWRzLCBkdW1wX2Rpciwgc2VsZi5ydW5uZXIpCiAKICAgICBkZWYgZGVwbG95KHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0ZGlyKQotICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYub3JpZ3Jvb3Rmcywgc2VsZi5yb290ZnMpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIGJiLmZhdGFsKCJFcnJvciBjb3B5aW5nIHJvb3RmczogJXMiICUgZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGRpcikKIAogICAgICAgICBxZW11bG9nbGluayA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJxZW11X2Jvb3RfbG9nIikKICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsocWVtdWxvZ2xpbmspOgpAQCAtMTc2LDggKzE3Niw4IEBACiAgICAgICAgIGJiLm5vdGUoIlFlbXUgbG9nIGZpbGU6ICVzIiAlIHNlbGYucWVtdWxvZykKICAgICAgICAgc3VwZXIoUWVtdVRhcmdldCwgc2VsZikuZGVwbG95KCkKIAotICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSwgc3NoPVRydWUpOgotICAgICAgICBpZiBzZWxmLnJ1bm5lci5zdGFydChwYXJhbXMsIGdldF9pcD1zc2gpOgorICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSwgc3NoPVRydWUsIGV4dHJhX2Jvb3RwYXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucnVubmVyLnN0YXJ0KHBhcmFtcywgZ2V0X2lwPXNzaCwgZXh0cmFfYm9vdHBhcmFtcz1leHRyYV9ib290cGFyYW1zKToKICAgICAgICAgICAgIGlmIHNzaDoKICAgICAgICAgICAgICAgICBzZWxmLmlwID0gc2VsZi5ydW5uZXIuaXAKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IHNlbGYucnVubmVyLnNlcnZlcl9pcApAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgZGVmIGRlcGxveShzZWxmKToKICAgICAgICAgc3VwZXIoU2ltcGxlUmVtb3RlVGFyZ2V0LCBzZWxmKS5kZXBsb3koKQogCi0gICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lLCBzc2g9VHJ1ZSk6CisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lLCBzc2g9VHJ1ZSwgZXh0cmFfYm9vdHBhcmFtcz1Ob25lKToKICAgICAgICAgaWYgc3NoOgogICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gU1NIQ29udHJvbChzZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCBwb3J0PXNlbGYucG9ydCkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQppbmRleCA0OGY2NDQxLi41Y2QwZjc0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCiAKICAgICAgICAgc2VsZi5vcHRpb25zID0gZGljdChzZWxmLmRlZmF1bHRvcHRzKQotICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY21kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmNtZCwgc3RyKToKICAgICAgICAgICAgIHNlbGYub3B0aW9uc1sic2hlbGwiXSA9IFRydWUKICAgICAgICAgaWYgc2VsZi5kYXRhOgogICAgICAgICAgICAgc2VsZi5vcHRpb25zWydzdGRpbiddID0gc3VicHJvY2Vzcy5QSVBFCkBAIC03OCw3ICs3OCwxMCBAQAogICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKICAgICAgICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKIAotICAgICAgICBzZWxmLm91dHB1dCA9IHNlbGYub3V0cHV0LnJzdHJpcCgpCisgICAgICAgIGlmIG5vdCBzZWxmLm91dHB1dDoKKyAgICAgICAgICAgIHNlbGYub3V0cHV0ID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYub3V0cHV0ID0gc2VsZi5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIsIGVycm9ycz0ncmVwbGFjZScpLnJzdHJpcCgpCiAgICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5wcm9jZXNzLnBvbGwoKQogCiAgICAgICAgIHNlbGYubG9nLmRlYnVnKCJDb21tYW5kICclcycgcmV0dXJuZWQgJWQgYXMgZXhpdCBjb2RlLiIgJSAoc2VsZi5jbWQsIHNlbGYuc3RhdHVzKSkKQEAgLTEwMyw2ICsxMDYsNyBAQAogICAgIHJlc3VsdC5jb21tYW5kID0gY29tbWFuZAogICAgIHJlc3VsdC5zdGF0dXMgPSBjbWQuc3RhdHVzCiAgICAgcmVzdWx0Lm91dHB1dCA9IGNtZC5vdXRwdXQKKyAgICByZXN1bHQuZXJyb3IgPSBjbWQuZXJyb3IKICAgICByZXN1bHQucGlkID0gY21kLnByb2Nlc3MucGlkCiAKICAgICBpZiByZXN1bHQuc3RhdHVzIGFuZCBub3QgaWdub3JlX3N0YXR1czoKQEAgLTEyMyw3ICsxMjcsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIGV4dHJhX2FyZ3MgPSAiIgogCi0gICAgaWYgaXNpbnN0YW5jZShjb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICBpZiBpc2luc3RhbmNlKGNvbW1hbmQsIHN0cik6CiAgICAgICAgIGNtZCA9ICJiaXRiYWtlICIgKyBleHRyYV9hcmdzICsgIiAiICsgY29tbWFuZAogICAgIGVsc2U6CiAgICAgICAgIGNtZCA9IFsgImJpdGJha2UiIF0gKyBbYSBmb3IgYSBpbiAoY29tbWFuZCArIGV4dHJhX2FyZ3Muc3BsaXQoIiAiKSkgaWYgYSBub3QgaW4gWyIiXV0KQEAgLTE0MSwyMiArMTQ1LDQ1IEBACiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIGJpdGJha2UoIi1lIiwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKS5vdXRwdXQKIAotZGVmIGdldF9iYl92YXIodmFyLCB0YXJnZXQ9Tm9uZSwgcG9zdGNvbmZpZz1Ob25lKToKLSAgICB2YWwgPSBOb25lCitkZWYgZ2V0X2JiX3ZhcnModmFyaWFibGVzPU5vbmUsIHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgICIiIkdldCB2YWx1ZXMgb2YgbXVsdGlwbGUgYml0YmFrZSB2YXJpYWJsZXMiIiIKICAgICBiYmVudiA9IGdldF9iYl9lbnYodGFyZ2V0LCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisKKyAgICB2YXJfcmUgPSByZS5jb21waWxlKHInXihleHBvcnQgKT8oP1A8dmFyPlx3Kyk9Iig/UDx2YWx1ZT4uKikiJCcpCisgICAgdW5zZXRfcmUgPSByZS5jb21waWxlKHInXnVuc2V0ICg/UDx2YXI+XHcrKSQnKQogICAgIGxhc3RsaW5lID0gTm9uZQorICAgIHZhbHVlcyA9IHt9CiAgICAgZm9yIGxpbmUgaW4gYmJlbnYuc3BsaXRsaW5lcygpOgotICAgICAgICBpZiByZS5zZWFyY2goIl4oZXhwb3J0ICk/JXM9IiAlIHZhciwgbGluZSk6Ci0gICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc9JywgMSlbMV0KLSAgICAgICAgICAgIHZhbCA9IHZhbC5zdHJpcCgnXCInKQotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxpZiByZS5tYXRjaCgidW5zZXQgJXMkIiAlIHZhciwgbGluZSk6Ci0gICAgICAgICAgICAjIEhhbmRsZSBbdW5leHBvcnRdIHZhcmlhYmxlcwotICAgICAgICAgICAgaWYgbGFzdGxpbmUuc3RhcnRzd2l0aCgnIyAgICInKToKLSAgICAgICAgICAgICAgICB2YWwgPSBsYXN0bGluZS5zcGxpdCgnXCInKVsxXQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIG1hdGNoID0gdmFyX3JlLm1hdGNoKGxpbmUpCisgICAgICAgIHZhbCA9IE5vbmUKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICB2YWwgPSBtYXRjaC5ncm91cCgndmFsdWUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWF0Y2ggPSB1bnNldF9yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgIyBIYW5kbGUgW3VuZXhwb3J0XSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICBpZiBsYXN0bGluZS5zdGFydHN3aXRoKCcjICAgIicpOgorICAgICAgICAgICAgICAgICAgICB2YWwgPSBsYXN0bGluZS5zcGxpdCgnIicpWzFdCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIHZhciA9IG1hdGNoLmdyb3VwKCd2YXInKQorICAgICAgICAgICAgaWYgdmFyaWFibGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWVzW3Zhcl0gPSB2YWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgdmFyIGluIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3Zhcl0gPSB2YWwKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLnJlbW92ZSh2YXIpCisgICAgICAgICAgICAgICAgIyBTdG9wIGFmdGVyIGFsbCByZXF1aXJlZCB2YXJpYWJsZXMgaGF2ZSBiZWVuIGZvdW5kCisgICAgICAgICAgICAgICAgaWYgbm90IHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgbGFzdGxpbmUgPSBsaW5lCi0gICAgcmV0dXJuIHZhbAorICAgIGlmIHZhcmlhYmxlczoKKyAgICAgICAgIyBGaWxsIGluIG1pc3NpbmcgdmFsdWVzCisgICAgICAgIGZvciB2YXIgaW4gdmFyaWFibGVzOgorICAgICAgICAgICAgdmFsdWVzW3Zhcl0gPSBOb25lCisgICAgcmV0dXJuIHZhbHVlcworCitkZWYgZ2V0X2JiX3Zhcih2YXIsIHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgIHJldHVybiBnZXRfYmJfdmFycyhbdmFyXSwgdGFyZ2V0LCBwb3N0Y29uZmlnKVt2YXJdCiAKIGRlZiBnZXRfdGVzdF9sYXllcigpOgogICAgIGxheWVycyA9IGdldF9iYl92YXIoIkJCTEFZRVJTIikuc3BsaXQoKQpAQCAtMTk2LDcgKzIyMyw3IEBACiAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiLCAiMTAwMCIpCiAgICAgICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscwogICAgICAgICByZWNpcGVmaWxlID0gb2UucmVjaXBldXRpbHMucG5fdG9fcmVjaXBlKHRpbmZvaWwuY29va2VyLCBwbikKLSAgICAgICAgcmVjaXBlZGF0YSA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShyZWNpcGVmaWxlLCBbXSwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgcmVjaXBlZGF0YSA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZSh0aW5mb2lsLmNvb2tlciwgcmVjaXBlZmlsZSwgW10pCiAKICAgICAgICAgIyBUaGUgUWVtdVJ1bm5lciBsb2cgaXMgc2F2ZWQgb3V0LCBidXQgd2UgbmVlZCB0byBlbnN1cmUgaXQgaXMgYXQgdGhlIHJpZ2h0CiAgICAgICAgICMgbG9nIGxldmVsIChhbmQgdGhlbiBlbnN1cmUgdGhhdCBzaW5jZSBpdCdzIGEgY2hpbGQgb2YgdGhlIEJpdEJha2UgbG9nZ2VyLApAQCAtMjM3LDMgKzI2NCwxNSBAQAogICAgICAgICAgICAgcWVtdS5zdG9wKCkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcworCitkZWYgdXBkYXRlRW52KGVudl9maWxlKToKKyAgICAiIiIKKyAgICBTb3VyY2UgYSBmaWxlIGFuZCB1cGRhdGUgZW52aXJvbm1lbnQuCisgICAgIiIiCisKKyAgICBjbWQgPSAiLiAlczsgZW52IC0wIiAlIGVudl9maWxlCisgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCkKKworICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXQoIlwwIik6CisgICAgICAgIChrZXksIF8sIHZhbHVlKSA9IGxpbmUucGFydGl0aW9uKCI9IikKKyAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9kZWNvcmF0b3JzLnB5CmluZGV4IDBkNzkyMjMuLjI1ZjljNTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weQpAQCAtNTcsNiArNTcsNyBAQAogICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBAd3JhcHMoZikKICAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCiAgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIChyZXMuZ2V0RmFpbExpc3QoKSBvciByZXMuZ2V0RXJyb3JMaXN0KCkpOgpAQCAtNzEsNiArNzIsNyBAQAogICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBAd3JhcHMoZikKICAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCiAgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRTa2lwTGlzdCgpOgpAQCAtODUsNiArODcsNyBAQAogICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBAd3JhcHMoZikKICAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCiAgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRTa2lwTGlzdCgpIG9yIFwKQEAgLTk3LDExICsxMDAsMTEgQEAKICAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgogCiBjbGFzcyB0ZXN0Y2FzZShvYmplY3QpOgotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CiAgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCiAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuYyk6CisgICAgICAgIEB3cmFwcyhmdW5jKQogICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHdyYXBwZWRfZi50ZXN0X2Nhc2UgPSBzZWxmLnRlc3RfY2FzZQpAQCAtMTEyLDYgKzExNSw4IEBACiAgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgogICAgICAgICByZXR1cm4gcmVjb3JkLmxldmVsbm8gPT0gMTAwCiAKK2ltcG9ydCBpbnNwZWN0CisKIGRlZiBMb2dSZXN1bHRzKG9yaWdpbmFsX2NsYXNzKToKICAgICBvcmlnX21ldGhvZCA9IG9yaWdpbmFsX2NsYXNzLnJ1bgogCkBAIC0xMjEsNiArMTI2LDE5IEBACiAgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwncmVzdWx0cy0nK2NhbGxlcisnLicrdGltZXN0YW1wKycubG9nJykKICAgICBsaW5rZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwncmVzdWx0cy0nK2NhbGxlcisnLmxvZycpCiAKKyAgICBkZWYgZ2V0X2NsYXNzX3RoYXRfZGVmaW5lZF9tZXRob2QobWV0aCk6CisgICAgICAgIGlmIGluc3BlY3QuaXNtZXRob2QobWV0aCk6CisgICAgICAgICAgICBmb3IgY2xzIGluIGluc3BlY3QuZ2V0bXJvKG1ldGguX19zZWxmX18uX19jbGFzc19fKToKKyAgICAgICAgICAgICAgIGlmIGNscy5fX2RpY3RfXy5nZXQobWV0aC5fX25hbWVfXykgaXMgbWV0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscworICAgICAgICAgICAgbWV0aCA9IG1ldGguX19mdW5jX18gIyBmYWxsYmFjayB0byBfX3F1YWxuYW1lX18gcGFyc2luZworICAgICAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24obWV0aCk6CisgICAgICAgICAgICBjbHMgPSBnZXRhdHRyKGluc3BlY3QuZ2V0bW9kdWxlKG1ldGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRoLl9fcXVhbG5hbWVfXy5zcGxpdCgnLjxsb2NhbHM+JywgMSlbMF0ucnNwbGl0KCcuJywgMSlbMF0pCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNscywgdHlwZSk6CisgICAgICAgICAgICAgICByZXR1cm4gY2xzCisgICAgICAgIHJldHVybiBOb25lCisKICAgICAjcmV3cml0ZSB0aGUgcnVuIG1ldGhvZCBvZiB1bml0dGVzdC5UZXN0Q2FzZSB0byBhZGQgdGVzdGNhc2UgbG9nZ2luZwogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0LCAqYXJncywgKiprd3MpOgogICAgICAgICBvcmlnX21ldGhvZChzZWxmLCByZXN1bHQsICphcmdzLCAqKmt3cykKQEAgLTEzMiw3ICsxNTAsNyBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICB0ZXN0X2Nhc2UgPSBzZWxmLl90ZXN0TWV0aG9kTmFtZQogCi0gICAgICAgIGNsYXNzX25hbWUgPSBzdHIodGVzdE1ldGhvZC5pbV9jbGFzcykuc3BsaXQoIiciKVsxXQorICAgICAgICBjbGFzc19uYW1lID0gc3RyKGdldF9jbGFzc190aGF0X2RlZmluZWRfbWV0aG9kKHRlc3RNZXRob2QpKS5zcGxpdCgiJyIpWzFdCiAKICAgICAgICAgI2NyZWF0ZSBjdXN0b20gbG9nZ2luZyBsZXZlbCBmb3IgZmlsdGVyaW5nLgogICAgICAgICBjdXN0b21fbG9nX2xldmVsID0gMTAwCkBAIC0xNzEsMTAgKzE4OSwyNCBAQAogICAgICAgICBpZiBwYXNzZWQ6CiAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBQQVNTRUQiKQogCisgICAgICAgICMgWFhYOiBJbiBvcmRlciB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiB3aGVuIHRlc3QgaWYgZXhpc3RzIHRoZSBsaW5rZmlsZQorICAgICAgICAjIHVzZSBiYi51dGlscy5sb2NrLCB0aGUgYmVzdCBzb2x1dGlvbiBpcyB0byBjcmVhdGUgYSB1bmlxdWUgbmFtZSBmb3IgdGhlCisgICAgICAgICMgbGluayBmaWxlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgYmIKKyAgICAgICAgICAgIGhhc19iYiA9IFRydWUKKyAgICAgICAgICAgIGxvY2tmaWxlbmFtZSA9IGxpbmtmaWxlICsgJy5sb2NrJworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBoYXNfYmIgPSBGYWxzZQorCisgICAgICAgIGlmIGhhc19iYjoKKyAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGVuYW1lLCBibG9jaz1UcnVlKQogICAgICAgICAjIENyZWF0ZSBzeW1saW5rIHRvIHRoZSBjdXJyZW50IGxvZwotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsaW5rZmlsZSk6CisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhsaW5rZmlsZSk6CiAgICAgICAgICAgICBvcy5yZW1vdmUobGlua2ZpbGUpCiAgICAgICAgIG9zLnN5bWxpbmsobG9nZmlsZSwgbGlua2ZpbGUpCisgICAgICAgIGlmIGhhc19iYjoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCiAKICAgICBvcmlnaW5hbF9jbGFzcy5ydW4gPSBydW4KIApAQCAtMjEyLDcgKzI0NCw3IEBACiAgICAgZGVmIHdyYXBfb2Iob2IpOgogICAgICAgICBmb3IgbmFtZSBpbiBhcmdzOgogICAgICAgICAgICAgc2V0YXR0cihvYiwgX190YWdfcHJlZml4ICsgbmFtZSwgVHJ1ZSkKLSAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGt3YXJncy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGt3YXJncy5pdGVtcygpOgogICAgICAgICAgICAgc2V0YXR0cihvYiwgX190YWdfcHJlZml4ICsgbmFtZSwgdmFsdWUpCiAgICAgICAgIHJldHVybiBvYgogICAgIHJldHVybiB3cmFwX29iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZHVtcC5weQppbmRleCA2M2E1OTFkLi43MTQyMmE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkKQEAgLTMsNyArMyw3IEBACiBpbXBvcnQgZXJybm8KIGltcG9ydCBkYXRldGltZQogaW1wb3J0IGl0ZXJ0b29scwotZnJvbSBjb21tYW5kcyBpbXBvcnQgcnVuQ21kCitmcm9tIC5jb21tYW5kcyBpbXBvcnQgcnVuQ21kCiAKIGRlZiBnZXRfaG9zdF9kdW1wZXIoZCk6CiAgICAgY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IiwgVHJ1ZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2dpdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2dpdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTg1ZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZ2l0LnB5CkBAIC0wLDAgKzEsNjggQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorIworIiIiR2l0IHJlcG9zaXRvcnkgaW50ZXJhY3Rpb25zIiIiCitpbXBvcnQgb3MKKworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKKworCitjbGFzcyBHaXRFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkdpdCBlcnJvciBoYW5kbGluZyIiIgorICAgIHBhc3MKKworY2xhc3MgR2l0UmVwbyhvYmplY3QpOgorICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyBhIEdpdCByZXBvc2l0b3J5IGNsb25lIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGlzX3RvcGRpcj1GYWxzZSk6CisgICAgICAgIHNlbGYudG9wX2RpciA9IHNlbGYuX3J1bl9naXRfY21kX2F0KFsncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoKQorICAgICAgICByZWFscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocGF0aCkKKyAgICAgICAgaWYgaXNfdG9wZGlyIGFuZCByZWFscGF0aCAhPSBzZWxmLnRvcF9kaXI6CisgICAgICAgICAgICByYWlzZSBHaXRFcnJvcigie30gaXMgbm90IGEgR2l0IHRvcCBkaXJlY3RvcnkiLmZvcm1hdChyZWFscGF0aCkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9ydW5fZ2l0X2NtZF9hdChnaXRfYXJncywgY3dkLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJ1biBnaXQgY29tbWFuZCBhdCBhIHNwZWNpZmllZCBkaXJlY3RvcnkiIiIKKyAgICAgICAgZ2l0X2NtZCA9ICdnaXQgJyBpZiBpc2luc3RhbmNlKGdpdF9hcmdzLCBzdHIpIGVsc2UgWydnaXQnXQorICAgICAgICBnaXRfY21kICs9IGdpdF9hcmdzCisgICAgICAgIHJldCA9IHJ1bkNtZChnaXRfY21kLCBpZ25vcmVfc3RhdHVzPVRydWUsIGN3ZD1jd2QsICoqa3dhcmdzKQorICAgICAgICBpZiByZXQuc3RhdHVzOgorICAgICAgICAgICAgY21kX3N0ciA9IGdpdF9jbWQgaWYgaXNpbnN0YW5jZShnaXRfY21kLCBzdHIpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAnICcuam9pbihnaXRfY21kKQorICAgICAgICAgICAgcmFpc2UgR2l0RXJyb3IoIid7fScgZmFpbGVkIHdpdGggZXhpdCBjb2RlIHt9OiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIGNtZF9zdHIsIHJldC5zdGF0dXMsIHJldC5vdXRwdXQpKQorICAgICAgICByZXR1cm4gcmV0Lm91dHB1dC5zdHJpcCgpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGluaXQocGF0aCk6CisgICAgICAgICIiIkluaXRpYWxpemUgYSBuZXcgR2l0IHJlcG9zaXRvcnkiIiIKKyAgICAgICAgR2l0UmVwby5fcnVuX2dpdF9jbWRfYXQoJ2luaXQnLCBjd2Q9cGF0aCkKKyAgICAgICAgcmV0dXJuIEdpdFJlcG8ocGF0aCwgaXNfdG9wZGlyPVRydWUpCisKKyAgICBkZWYgcnVuX2NtZChzZWxmLCBnaXRfYXJncywgZW52X3VwZGF0ZT1Ob25lKToKKyAgICAgICAgIiIiUnVuIEdpdCBjb21tYW5kIiIiCisgICAgICAgIGVudiA9IE5vbmUKKyAgICAgICAgaWYgZW52X3VwZGF0ZToKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICBlbnYudXBkYXRlKGVudl91cGRhdGUpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0X2NtZF9hdChnaXRfYXJncywgc2VsZi50b3BfZGlyLCBlbnY9ZW52KQorCisgICAgZGVmIHJldl9wYXJzZShzZWxmLCByZXZpc2lvbik6CisgICAgICAgICIiIkRvIGdpdCByZXYtcGFyc2UiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVuX2NtZChbJ3Jldi1wYXJzZScsIHJldmlzaW9uXSkKKyAgICAgICAgZXhjZXB0IEdpdEVycm9yOgorICAgICAgICAgICAgIyBSZXZpc2lvbiBkb2VzIG5vdCBleGlzdAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfY3VycmVudF9icmFuY2goc2VsZik6CisgICAgICAgICIiIkdldCBjdXJyZW50IGJyYW5jaCIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFN0cmlwIDExIGNoYXJzLCBpLmUuICdyZWZzL2hlYWRzJyBmcm9tIHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl9jbWQoWydzeW1ib2xpYy1yZWYnLCAnSEVBRCddKVsxMTpdCisgICAgICAgIGV4Y2VwdCBHaXRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2h0dHBzZXJ2ZXIucHkKaW5kZXggNzY1MThkOC4uN2QxMjMzMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5CkBAIC0xLDggKzEsOSBAQAotaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKK2ltcG9ydCBodHRwLnNlcnZlcgogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9zCitmcm9tIHNvY2tldHNlcnZlciBpbXBvcnQgVGhyZWFkaW5nTWl4SW4KIAotY2xhc3MgSFRUUFNlcnZlcihTaW1wbGVIVFRQU2VydmVyLkJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorY2xhc3MgSFRUUFNlcnZlcihUaHJlYWRpbmdNaXhJbiwgaHR0cC5zZXJ2ZXIuSFRUUFNlcnZlcik6CiAKICAgICBkZWYgc2VydmVyX3N0YXJ0KHNlbGYsIHJvb3RfZGlyKToKICAgICAgICAgaW1wb3J0IHNpZ25hbApAQCAtMTAsNyArMTEsNyBAQAogICAgICAgICBvcy5jaGRpcihyb290X2RpcikKICAgICAgICAgc2VsZi5zZXJ2ZV9mb3JldmVyKCkKIAotY2xhc3MgSFRUUFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKK2NsYXNzIEhUVFBSZXF1ZXN0SGFuZGxlcihodHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgogCiAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdF9zdHIsICphcmdzKToKICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5CmluZGV4IDg3YjUwMzUuLmIzNzdkY2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9sb2dwYXJzZXIucHkKQEAgLTMsNyArMyw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IGZ0b29scworZnJvbSAuIGltcG9ydCBmdG9vbHMKIAogCiAjIEEgcGFyc2VyIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgd2VhdGhlciBhIGxpbmUgaXMgYSB0ZXN0IHJlc3VsdCBvciBhIHNlY3Rpb24gc3RhdGVtZW50LgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcGFja2FnZV9tYW5hZ2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcGFja2FnZV9tYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OWVjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9wYWNrYWdlX21hbmFnZXIucHkKQEAgLTAsMCArMSwyOSBAQAorZGVmIGdldF9wYWNrYWdlX21hbmFnZXIoZCwgcm9vdF9wYXRoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGFuIE9FIHBhY2thZ2UgbWFuYWdlciB0aGF0IGNhbiBpbnN0YWxsIHBhY2thZ2VzIGluIHJvb3RfcGF0aC4KKyAgICAiIiIKKyAgICBmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgUnBtUE0sIE9wa2dQTSwgRHBrZ1BNCisKKyAgICBwa2dfY2xhc3MgPSBkLmdldFZhcigiSU1BR0VfUEtHVFlQRSIsIFRydWUpCisgICAgaWYgcGtnX2NsYXNzID09ICJycG0iOgorICAgICAgICBwbSA9IFJwbVBNKGQsCisgICAgICAgICAgICAgICAgICAgcm9vdF9wYXRoLAorICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfVkVORE9SJywgVHJ1ZSkpCisgICAgICAgIHBtLmNyZWF0ZV9jb25maWdzKCkKKworICAgIGVsaWYgcGtnX2NsYXNzID09ICJpcGsiOgorICAgICAgICBwbSA9IE9wa2dQTShkLAorICAgICAgICAgICAgICAgICAgICByb290X3BhdGgsCisgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJJUEtHQ09ORl9UQVJHRVQiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkpCisKKyAgICBlbGlmIHBrZ19jbGFzcyA9PSAiZGViIjoKKyAgICAgICAgcG0gPSBEcGtnUE0oZCwKKyAgICAgICAgICAgICAgICAgICAgcm9vdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignRFBLR19BUkNIJywgVHJ1ZSkpCisKKyAgICBwbS53cml0ZV9pbmRleCgpCisgICAgcG0udXBkYXRlKCkKKworICAgIHJldHVybiBwbQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkKaW5kZXggNzg0Y2Y5Ni4uOGYxYjViOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11cnVubmVyLnB5CkBAIC0yMCwxNiArMjAsMTcgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlFlbXVSdW5uZXIiKQorbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkpCiAKICMgR2V0IFVuaWNvZGUgbm9uIHByaW50YWJsZSBjb250cm9sIGNoYXJzCi1jb250cm9sX3JhbmdlID0gcmFuZ2UoMCwzMikrcmFuZ2UoMTI3LDE2MCkKLWNvbnRyb2xfY2hhcnMgPSBbdW5pY2hyKHgpIGZvciB4IGluIGNvbnRyb2xfcmFuZ2UKLSAgICAgICAgICAgICAgICBpZiB1bmljaHIoeCkgbm90IGluIHN0cmluZy5wcmludGFibGVdCitjb250cm9sX3JhbmdlID0gbGlzdChyYW5nZSgwLDMyKSkrbGlzdChyYW5nZSgxMjcsMTYwKSkKK2NvbnRyb2xfY2hhcnMgPSBbY2hyKHgpIGZvciB4IGluIGNvbnRyb2xfcmFuZ2UKKyAgICAgICAgICAgICAgICBpZiBjaHIoeCkgbm90IGluIHN0cmluZy5wcmludGFibGVdCiByZV9jb250cm9sX2NoYXIgPSByZS5jb21waWxlKCdbJXNdJyAlIHJlLmVzY2FwZSgiIi5qb2luKGNvbnRyb2xfY2hhcnMpKSkKIAogY2xhc3MgUWVtdVJ1bm5lcjoKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwgYm9vdHRpbWUsIGR1bXBfZGlyLCBkdW1wX2hvc3RfY21kcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hY2hpbmUsIHJvb3RmcywgZGlzcGxheSwgdG1wZGlyLCBkZXBsb3lfZGlyX2ltYWdlLCBsb2dmaWxlLCBib290dGltZSwgZHVtcF9kaXIsIGR1bXBfaG9zdF9jbWRzLCB1c2Vfa3ZtKToKIAogICAgICAgICAjIFBvcGVuIG9iamVjdCBmb3IgcnVucWVtdQogICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCkBAIC00OSw2ICs1MCw3IEBACiAgICAgICAgIHNlbGYuYm9vdHRpbWUgPSBib290dGltZQogICAgICAgICBzZWxmLmxvZ2dlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorICAgICAgICBzZWxmLnVzZV9rdm0gPSB1c2Vfa3ZtCiAKICAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCiAgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIgPSBIb3N0RHVtcGVyKGR1bXBfaG9zdF9jbWRzLCBkdW1wX2RpcikKQEAgLTcxLDcgKzczLDggQEAKICAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgogICAgICAgICAgICAgIyBJdCBpcyBuZWVkZWQgdG8gc2FuaXRpemUgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBxZW11CiAgICAgICAgICAgICAjIGJlY2F1c2UgaXMgcG9zc2libGUgdG8gaGF2ZSBjb250cm9sIGNoYXJhY3RlcnMKLSAgICAgICAgICAgIG1zZyA9IHJlX2NvbnRyb2xfY2hhci5zdWIoJycsIHVuaWNvZGUobXNnLCAndXRmLTgnKSkKKyAgICAgICAgICAgIG1zZyA9IG1zZy5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIG1zZyA9IHJlX2NvbnRyb2xfY2hhci5zdWIoJycsIG1zZykKICAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2VsZi5sb2dmaWxlLCAiYSIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXMiICUgbXNnKQogCkBAIC03OSw3ICs4Miw3IEBACiAgICAgICAgIGltcG9ydCBmY250bAogICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKG8sIGZjbnRsLkZfR0VURkwpCiAgICAgICAgIGZjbnRsLmZjbnRsKG8sIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLSAgICAgICAgcmV0dXJuIG9zLnJlYWQoby5maWxlbm8oKSwgMTAwMDAwMCkKKyAgICAgICAgcmV0dXJuIG9zLnJlYWQoby5maWxlbm8oKSwgMTAwMDAwMCkuZGVjb2RlKCJ1dGYtOCIpCiAKIAogICAgIGRlZiBoYW5kbGVTSUdDSExEKHNlbGYsIHNpZ251bSwgZnJhbWUpOgpAQCAtOTEsNyArOTQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAogCi0gICAgZGVmIHN0YXJ0KHNlbGYsIHFlbXVwYXJhbXMgPSBOb25lLCBnZXRfaXAgPSBUcnVlKToKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUsIGdldF9pcCA9IFRydWUsIGV4dHJhX2Jvb3RwYXJhbXMgPSBOb25lKToKICAgICAgICAgaWYgc2VsZi5kaXNwbGF5OgogICAgICAgICAgICAgb3MuZW52aXJvblsiRElTUExBWSJdID0gc2VsZi5kaXNwbGF5CiAgICAgICAgICAgICAjIFNldCB0aGlzIGZsYWcgc28gdGhhdCBRZW11IGRvZXNuJ3QgZG8gYW55IGdyYWJzIGFzIFNETCBncmFicwpAQCAtMTE0LDEyICsxMTcsMTYgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGhyZWFkc29jaywgdGhyZWFkcG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCiAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQsIHNlbGYuc2VydmVycG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldDogJXMiICUgbXNnWzFdKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIAotICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSAnYm9vdHBhcmFtcz0iY29uc29sZT10dHkxIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggcHJpbnRrLnRpbWU9MSIgcWVtdXBhcmFtcz0iLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOnt9IicuZm9ybWF0KHRocmVhZHBvcnQpCisgICAgICAgIGJvb3RwYXJhbXMgPSAnY29uc29sZT10dHkxIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggcHJpbnRrLnRpbWU9MScKKyAgICAgICAgaWYgZXh0cmFfYm9vdHBhcmFtczoKKyAgICAgICAgICAgIGJvb3RwYXJhbXMgPSBib290cGFyYW1zICsgJyAnICsgZXh0cmFfYm9vdHBhcmFtcworCisgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9ICdib290cGFyYW1zPSJ7MH0iIHFlbXVwYXJhbXM9Ii1zZXJpYWwgdGNwOjEyNy4wLjAuMTp7MX0iJy5mb3JtYXQoYm9vdHBhcmFtcywgdGhyZWFkcG9ydCkKICAgICAgICAgaWYgbm90IHNlbGYuZGlzcGxheToKICAgICAgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9ICdub2dyYXBoaWMgJyArIHNlbGYucWVtdXBhcmFtcwogICAgICAgICBpZiBxZW11cGFyYW1zOgpAQCAtMTI4LDcgKzEzNSwxNSBAQAogICAgICAgICBzZWxmLm9yaWdjaGxkaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0NITEQpCiAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYuaGFuZGxlU0lHQ0hMRCkKIAotICAgICAgICBsYXVuY2hfY21kID0gJ3J1bnFlbXUgdGNwc2VyaWFsPSVzICVzICVzICVzJyAlIChzZWxmLnNlcnZlcnBvcnQsIHNlbGYubWFjaGluZSwgc2VsZi5yb290ZnMsIHNlbGYucWVtdXBhcmFtcykKKyAgICAgICAgbGF1bmNoX2NtZCA9ICdydW5xZW11IHNuYXBzaG90ICcKKyAgICAgICAgaWYgc2VsZi51c2Vfa3ZtOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VzaW5nIGt2bSBmb3IgcnVucWVtdScpCisgICAgICAgICAgICBsYXVuY2hfY21kICs9ICdrdm0gJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ05vdCB1c2luZyBrdm0gZm9yIHJ1bnFlbXUnKQorICAgICAgICBsYXVuY2hfY21kICs9ICd0Y3BzZXJpYWw9JXMgJXMgJXMgJXMnICUgKHNlbGYuc2VydmVycG9ydCwgc2VsZi5tYWNoaW5lLCBzZWxmLnJvb3Rmcywgc2VsZi5xZW11cGFyYW1zKQorICAgICAgICBsb2dnZXIuaW5mbygnbGF1bmNoY21kPSVzJyUobGF1bmNoX2NtZCkpCisKICAgICAgICAgIyBGSVhNRTogV2UgcGFzcyBpbiBzdGRpbj1zdWJwcm9jZXNzLlBJUEUgaGVyZSB0byB3b3JrIGFyb3VuZCBzdHR5CiAgICAgICAgICMgYmxvY2tpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcnVucWVtdSBzY3JpcHQgd2hlbiB1c2luZyB0aGlzIHdpdGhpbgogICAgICAgICAjIG9lLXNlbGZ0ZXN0ICh0aGlzIG1ha2VzIHN0dHkgZXJyb3Igb3V0IGltbWVkaWF0ZWx5KS4gVGhlcmUgb3VnaHQKQEAgLTEzNywxMiArMTUyLDEyIEBACiAgICAgICAgIG91dHB1dCA9IHNlbGYucnVucWVtdS5zdGRvdXQKIAogICAgICAgICAjCi0gICAgICAgICMgV2UgbmVlZCB0aGUgcHJlZXhlY19mbiBhYm92ZSBzbyB0aGF0IGFsbCBydW5xZW11IHByb2Nlc3NlcyBjYW4gZWFzaWx5IGJlIGtpbGxlZCAKKyAgICAgICAgIyBXZSBuZWVkIHRoZSBwcmVleGVjX2ZuIGFib3ZlIHNvIHRoYXQgYWxsIHJ1bnFlbXUgcHJvY2Vzc2VzIGNhbiBlYXNpbHkgYmUga2lsbGVkCiAgICAgICAgICMgKGJ5IGtpbGxpbmcgdGhlaXIgcHJvY2VzcyBncm91cCkuIFRoaXMgcHJlc2VudHMgYSBwcm9ibGVtIGlmIHRoaXMgY29udHJvbGxpbmcKLSAgICAgICAgIyBwcm9jZXNzIGl0c2VsZiBpcyBraWxsZWQgaG93ZXZlciBzaW5jZSB0aG9zZSBwcm9jZXNzZXMgZG9uJ3Qgbm90aWNlIHRoZSBkZWF0aCAKKyAgICAgICAgIyBwcm9jZXNzIGl0c2VsZiBpcyBraWxsZWQgaG93ZXZlciBzaW5jZSB0aG9zZSBwcm9jZXNzZXMgZG9uJ3Qgbm90aWNlIHRoZSBkZWF0aAogICAgICAgICAjIG9mIHRoZSBwYXJlbnQgYW5kIG1lcnJpbHkgY29udGludWUgb24uCiAgICAgICAgICMKLSAgICAgICAgIyBSYXRoZXIgdGhhbiBoYWNrIHJ1bnFlbXUgdG8gZGVhbCB3aXRoIHRoaXMsIHdlIGFkZCBzb21ldGhpbmcgaGVyZSBpbnN0ZWFkLiAKKyAgICAgICAgIyBSYXRoZXIgdGhhbiBoYWNrIHJ1bnFlbXUgdG8gZGVhbCB3aXRoIHRoaXMsIHdlIGFkZCBzb21ldGhpbmcgaGVyZSBpbnN0ZWFkLgogICAgICAgICAjIEJhc2ljYWxseSB3ZSBmb3JrIG9mZiBhbm90aGVyIHByb2Nlc3Mgd2hpY2ggaG9sZHMgYW4gb3BlbiBwaXBlIHRvIHRoZSBwYXJlbnQKICAgICAgICAgIyBhbmQgYWxzbyBpcyBzZXRwZ3JwLiBJZi93aGVuIHRoZSBwaXBlIHNlZXMgRU9GIGZyb20gdGhlIHBhcmVudCBkaWVpbmcsIGl0IGtpbGxzCiAgICAgICAgICMgdGhlIHByb2Nlc3MgZ3JvdXAuIFRoaXMgaXMgbGlrZSBwY3RybCdzIFBERUFUSFNJRyBidXQgZm9yIGEgcHJvY2VzcyBncm91cApAQCAtMTkyLDcgKzIwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlwID0gaXBzWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGlwc1sxXQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yLCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW5kZXhFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZG4ndCBnZXQgaXAgZnJvbSBxZW11IHByb2Nlc3MgYXJndW1lbnRzISBIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCBvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQpAQCAtMjE5LDYgKzIzNCw3IEBACiAgICAgICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCiAgICAgICAgICAgICBxZW11c29jayA9IE5vbmUKICAgICAgICAgICAgIGJvb3Rsb2cgPSAnJworICAgICAgICAgICAgZGF0YSA9IGInJwogICAgICAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCBlbmR0aW1lIGFuZCBub3Qgc3RvcHJlYWQ6CiAgICAgICAgICAgICAgICAgc3JlYWQsIHN3cml0ZSwgc2Vycm9yID0gc2VsZWN0LnNlbGVjdChzb2NrbGlzdCwgW10sIFtdLCA1KQogICAgICAgICAgICAgICAgIGZvciBzb2NrIGluIHNyZWFkOgpAQCAtMjI5LDE0ICsyNDUsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzZWxmLnNlcnZlcl9zb2NrZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiAlIGFkZHIpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSArIHNvY2sucmVjdigxMDI0KQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290bG9nICs9IGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goIi4qIGxvZ2luOiIsIGJvb3Rsb2cpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBxZW11c29jawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcmVhZCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZGxvZ2luID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUmVhY2hlZCBsb2dpbiBiYW5uZXIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCJ1dGYtOCIsIGVycm9ycz0ic3Vycm9nYXRlZXNjYXBlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGxvZyArPSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCIuKiBsb2dpbjoiLCBib290bG9nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IHFlbXVzb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcmVhZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWNoZWRsb2dpbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZWFjaGVkIGxvZ2luIGJhbm5lciIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xpc3QucmVtb3ZlKHNvY2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCkBAIC0yNzcsMTMgKzI5OCwxNCBAQAogICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJvcmlnY2hsZGhhbmRsZXIiKToKICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYub3JpZ2NobGRoYW5kbGVyKQogICAgICAgICBpZiBzZWxmLnJ1bnFlbXU6Ci0gICAgICAgICAgICBvcy5raWxsKHNlbGYubW9uaXRvcnBpZCwgc2lnbmFsLlNJR0tJTEwpCi0gICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VuZGluZyBTSUdURVJNIHRvIHJ1bnFlbXUiKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHNlbGYucnVucWVtdS5waWQpLCBzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FU1JDSDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIm1vbml0b3JwaWQiKToKKyAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYubW9uaXRvcnBpZCwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byBydW5xZW11IikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHNlbGYucnVucWVtdS5waWQpLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVTUkNIOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKICAgICAgICAgICAgIHdoaWxlIHNlbGYucnVucWVtdS5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgogICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKQEAgLTMyNSw3ICszNDcsNyBAQAogICAgICAgICAjIFdhbGsgdGhlIHByb2Nlc3MgdHJlZSBmcm9tIHRoZSBwcm9jZXNzIHNwZWNpZmllZCBsb29raW5nIGZvciBhIHFlbXUtc3lzdGVtLiBSZXR1cm4gaXRzIFtwaWQnY21kXQogICAgICAgICAjCiAgICAgICAgIHBzID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BzJywgJ2F4d3cnLCAnLW8nLCAncGlkLHBwaWQsY29tbWFuZCddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgIHByb2Nlc3NlcyA9IHBzLnNwbGl0KCdcbicpCisgICAgICAgIHByb2Nlc3NlcyA9IHBzLmRlY29kZSgidXRmLTgiKS5zcGxpdCgnXG4nKQogICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKICAgICAgICAgcGlkcyA9IHt9CiAgICAgICAgIGNvbW1hbmRzID0ge30KQEAgLTM1NCw5ICszNzYsOSBAQAogICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCiAgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0Ci0gICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICAjcHJpbnQoIkNoaWxkcmVuIG1hdGNoaW5nICVzOiIgJSBzdHIocGFyZW50cykpCiAgICAgICAgIGZvciBwIGluIHBhcmVudHM6Ci0gICAgICAgICAgICAjIE5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIHJ1bnFlbXUtaW50ZXJuYWwgcnVucyAibGRkIHFlbXUtc3lzdGVtLXh4eHgiCisgICAgICAgICAgICAjIE5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIHJ1bnFlbXUgcnVucyAibGRkIHFlbXUtc3lzdGVtLXh4eHgiCiAgICAgICAgICAgICAjIEFsc28sIG9sZCB2ZXJzaW9ucyBvZiBsZGQgKDIuMTEpIHJ1biAiTERfWFhYWCBxZW11LXN5c3RlbS14eHh4IgogICAgICAgICAgICAgYmFzZWNtZCA9IGNvbW1hbmRzW3BdLnNwbGl0KClbMF0KICAgICAgICAgICAgIGJhc2VjbWQgPSBvcy5wYXRoLmJhc2VuYW1lKGJhc2VjbWQpCkBAIC0zNzAsMTQgKzM5MiwxNCBAQAogCiAgICAgICAgIGRhdGEgPSAnJwogICAgICAgICBzdGF0dXMgPSAwCi0gICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5zZW5kYWxsKGNvbW1hbmQpCisgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5zZW5kYWxsKGNvbW1hbmQuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgICBrZWVwcmVhZGluZyA9IFRydWUKICAgICAgICAgd2hpbGUga2VlcHJlYWRpbmc6CiAgICAgICAgICAgICBzcmVhZCwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc2VydmVyX3NvY2tldF0sW10sW10sNSkKICAgICAgICAgICAgIGlmIHNyZWFkOgogICAgICAgICAgICAgICAgIGFuc3dlciA9IHNlbGYuc2VydmVyX3NvY2tldC5yZWN2KDEwMjQpCiAgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgotICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlci5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGhlIHByb21wdCB0byBzdG9wCiAgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgiW2EtekEtWjAtOV0rQFthLXpBLVowLTlcLV0rOn4jIiwgZGF0YSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwcmVhZGluZyA9IEZhbHNlCkBAIC00NDIsNyArNDY0LDcgQEAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RvcHBpbmcgbG9nZ2luZyB0aHJlYWQiKQogICAgICAgICBpZiBzZWxmLnJ1bm5pbmc6Ci0gICAgICAgICAgICBvcy53cml0ZShzZWxmLndyaXRlcGlwZSwgInN0b3AiKQorICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi53cml0ZXBpcGUsIGJ5dGVzKCJzdG9wIiwgInV0Zi04IikpCiAKICAgICBkZWYgdGVhcmRvd24oc2VsZik6CiAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlRlYXJpbmcgZG93biBsb2dnaW5nIHRocmVhZCIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5CmluZGV4IDRmOTUxMDEuLmQ1NTRmMGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5CkBAIC0xMyw3ICsxMyw3IEBACiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgYmIKLWZyb20gcWVtdXJ1bm5lciBpbXBvcnQgUWVtdVJ1bm5lcgorZnJvbSAucWVtdXJ1bm5lciBpbXBvcnQgUWVtdVJ1bm5lcgogCiBjbGFzcyBRZW11VGlueVJ1bm5lcihRZW11UnVubmVyKToKIApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jb25uZWN0KHNlbGYuc29ja2V0ZmlsZSkKICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGVkIGxpc3RlbmluZyBzb2NrZXQgZm9yIHFlbXUgc2VyaWFsIGNvbnNvbGUuIikKICAgICAgICAgICAgICAgICB0cmllcyA9IDAKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldC4iKQogICAgICAgICAgICAgICAgIHRyaWVzIC09IDEKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCiAKLSAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgIGRlZiBzdGFydChzZWxmLCBxZW11cGFyYW1zID0gTm9uZSwgc3NoPVRydWUsIGV4dHJhX2Jvb3RwYXJhbXM9Tm9uZSk6CiAKICAgICAgICAgaWYgc2VsZi5kaXNwbGF5OgogICAgICAgICAgICAgb3MuZW52aXJvblsiRElTUExBWSJdID0gc2VsZi5kaXNwbGF5CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICAgIGJiLm5vdGUoIlFlbXUgcGlkIGRpZG4ndCBhcHBlYXJlZCBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCiAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bnFlbXUuc3Rkb3V0CiAgICAgICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAgICAgYmIubm90ZSgiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIG91dHB1dC5yZWFkKCkpCisgICAgICAgICAgICBiYi5ub3RlKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgb3V0cHV0LnJlYWQoKS5kZWNvZGUoInV0Zi04IikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KICAgICAgICAgIwogICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQotICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5kZWNvZGUoInV0Zi04Iikuc3BsaXQoJ1xuJykKICAgICAgICAgbmZpZWxkcyA9IGxlbihwcm9jZXNzZXNbMF0uc3BsaXQoKSkgLSAxCiAgICAgICAgIHBpZHMgPSB7fQogICAgICAgICBjb21tYW5kcyA9IHt9CkBAIC0xNjAsMTEgKzE2MCwxMSBAQAogICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCiAgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0Ci0gICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICAjcHJpbnQoIkNoaWxkcmVuIG1hdGNoaW5nICVzOiIgJSBzdHIocGFyZW50cykpCiAgICAgICAgIGZvciBwIGluIHBhcmVudHM6Ci0gICAgICAgICAgICAjIE5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIHJ1bnFlbXUtaW50ZXJuYWwgcnVucyAibGRkIHFlbXUtc3lzdGVtLXh4eHgiCisgICAgICAgICAgICAjIE5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIHJ1bnFlbXUgcnVucyAibGRkIHFlbXUtc3lzdGVtLXh4eHgiCiAgICAgICAgICAgICAjIEFsc28sIG9sZCB2ZXJzaW9ucyBvZiBsZGQgKDIuMTEpIHJ1biAiTERfWFhYWCBxZW11LXN5c3RlbS14eHh4IgogICAgICAgICAgICAgYmFzZWNtZCA9IGNvbW1hbmRzW3BdLnNwbGl0KClbMF0KICAgICAgICAgICAgIGJhc2VjbWQgPSBvcy5wYXRoLmJhc2VuYW1lKGJhc2VjbWQpCiAgICAgICAgICAgICBpZiAicWVtdS1zeXN0ZW0iIGluIGJhc2VjbWQgYW5kICItc2VyaWFsIHVuaXgiIGluIGNvbW1hbmRzW3BdOgotICAgICAgICAgICAgICAgIHJldHVybiBbaW50KHApLGNvbW1hbmRzW3BdXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgICAgICAgICAgICByZXR1cm4gW2ludChwKSxjb21tYW5kc1twXV0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9zc2hjb250cm9sLnB5CmluZGV4IDE2NTg3NDQuLjA1ZDY1MDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQpAQCAtMSwzICsxLDQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCiAjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgogIwogIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKQEAgLTUxLDE2ICs1MiwxOSBAQAogICAgICAgICAgICAgZW5kdGltZSA9IHNlbGYuc3RhcnR0aW1lICsgdGltZW91dAogICAgICAgICAgICAgZW9mID0gRmFsc2UKICAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgZW5kdGltZSBhbmQgbm90IGVvZjoKLSAgICAgICAgICAgICAgICBpZiBzZWxlY3Quc2VsZWN0KFtzZWxmLnByb2Nlc3Muc3Rkb3V0XSwgW10sIFtdLCA1KVswXSAhPSBbXToKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5wcm9jZXNzLnN0ZG91dC5maWxlbm8oKSwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVvZiA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZyhkYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgdGltZW91dAotCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxlY3Quc2VsZWN0KFtzZWxmLnByb2Nlc3Muc3Rkb3V0XSwgW10sIFtdLCA1KVswXSAhPSBbXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYucHJvY2Vzcy5zdGRvdXQuZmlsZW5vKCksIDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb2YgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgidXRmLTgiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisgICAgICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICMgcHJvY2VzcyBoYXNuJ3QgcmV0dXJuZWQgeWV0CiAgICAgICAgICAgICBpZiBub3QgZW9mOgpAQCAtMTQ1LDkgKzE0OSw5NyBAQAogICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIHRpbWVvdXQsIHNlbGYuaWdub3JlX3N0YXR1cykKIAogICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6Ci0gICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFtsb2NhbHBhdGgsICclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKV0KLSAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhsb2NhbHBhdGgpOgorICAgICAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKGxvY2FscGF0aCkKKyAgICAgICAgICAgIGRzdF9kaXIsIGRzdF9iYXNlID0gb3MucGF0aC5zcGxpdChyZW1vdGVwYXRoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVuKCJjZCAlczsgbG4gLXMgJXMgJXMiICUgKGRzdF9kaXIsIGxpbmssIGRzdF9iYXNlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFtsb2NhbHBhdGgsICclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKV0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKIAogICAgIGRlZiBjb3B5X2Zyb20oc2VsZiwgcmVtb3RlcGF0aCwgbG9jYWxwYXRoKToKICAgICAgICAgY29tbWFuZCA9IHNlbGYuc2NwICsgWyclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKSwgbG9jYWxwYXRoXQogICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9RmFsc2UpCisKKyAgICBkZWYgY29weV9kaXJfdG8oc2VsZiwgbG9jYWxwYXRoLCByZW1vdGVwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIENvcHkgcmVjdXJzaXZlbHkgbG9jYWxwYXRoIGRpcmVjdG9yeSB0byByZW1vdGVwYXRoIGluIHRhcmdldC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsobG9jYWxwYXRoKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGRpcmVjdG9yaWVzIGluIHRoZSB0YXJnZXQgYXMgbmVlZGVkCisgICAgICAgICAgICBmb3IgZCBpbiBkaXJzOgorICAgICAgICAgICAgICAgIHRtcF9kaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZCkucmVwbGFjZShsb2NhbHBhdGgsICIiKQorICAgICAgICAgICAgICAgIG5ld19kaXIgPSBvcy5wYXRoLmpvaW4ocmVtb3RlcGF0aCwgdG1wX2Rpci5sc3RyaXAoIi8iKSkKKyAgICAgICAgICAgICAgICBjbWQgPSAibWtkaXIgLXAgJXMiICUgbmV3X2RpcgorICAgICAgICAgICAgICAgIHNlbGYucnVuKGNtZCkKKworICAgICAgICAgICAgIyBDb3B5IGZpbGVzIGludG8gdGhlIHRhcmdldAorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgdG1wX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikucmVwbGFjZShsb2NhbHBhdGgsICIiKQorICAgICAgICAgICAgICAgIGRzdF9maWxlID0gb3MucGF0aC5qb2luKHJlbW90ZXBhdGgsIHRtcF9maWxlLmxzdHJpcCgiLyIpKQorICAgICAgICAgICAgICAgIHNyY19maWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICAgICAgc2VsZi5jb3B5X3RvKHNyY19maWxlLCBkc3RfZmlsZSkKKworCisgICAgZGVmIGRlbGV0ZV9maWxlcyhzZWxmLCByZW1vdGVwYXRoLCBmaWxlcyk6CisgICAgICAgICIiIgorICAgICAgICBEZWxldGUgZmlsZXMgaW4gdGFyZ2V0J3MgcmVtb3RlIHBhdGguCisgICAgICAgICIiIgorCisgICAgICAgIGNtZCA9ICJybSIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsZXMsIGxpc3QpOgorICAgICAgICAgICAgZmlsZXMgPSBbZmlsZXNdCisKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMiICUgKGNtZCwgb3MucGF0aC5qb2luKHJlbW90ZXBhdGgsIGYpKQorCisgICAgICAgIHNlbGYucnVuKGNtZCkKKworCisgICAgZGVmIGRlbGV0ZV9kaXIoc2VsZiwgcmVtb3RlcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBEZWxldGUgcmVtb3RlcGF0aCBkaXJlY3RvcnkgaW4gdGFyZ2V0LgorICAgICAgICAiIiIKKworICAgICAgICBjbWQgPSAicm1kaXIgJXMiICUgcmVtb3RlcGF0aAorICAgICAgICBzZWxmLnJ1bihjbWQpCisKKworICAgIGRlZiBkZWxldGVfZGlyX3N0cnVjdHVyZShzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVsZXRlIHJlY3Vyc2l2ZWx5IGxvY2FscGF0aCBzdHJ1Y3R1cmUgZGlyZWN0b3J5IGluIHRhcmdldCdzIHJlbW90ZXBhdGguCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB2ZXJ5IHVzZWZ1bHQgdG8gZGVsZXRlIGEgcGFja2FnZSB0aGF0IGlzIGluc3RhbGxlZCBpbgorICAgICAgICB0aGUgRFVUIGFuZCB0aGUgaG9zdCBydW5uaW5nIHRoZSB0ZXN0IGhhcyBzdWNoIHBhY2thZ2UgZXh0cmFjdGVkIGluIHRtcAorICAgICAgICBkaXJlY3RvcnkuCisKKyAgICAgICAgRXhhbXBsZToKKyAgICAgICAgICAgIHB3ZDogL2hvbWUvdXNlci90bXAKKyAgICAgICAgICAgIHRyZWU6ICAgLgorICAgICAgICAgICAgICAgICAgICDilJTilIDilIAgd29yaworICAgICAgICAgICAgICAgICAgICAgICAg4pSc4pSA4pSAIGRpcjEKKyAgICAgICAgICAgICAgICAgICAgICAgIOKUgsKgwqAg4pSU4pSA4pSAIGZpbGUxCisgICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIAgZGlyMgorCisgICAgICAgICAgICBsb2NhbHBhdGggPSAiL2hvbWUvdXNlci90bXAiIGFuZCByZW1vdGVwYXRoID0gIi9ob21lL3VzZXIiCisKKyAgICAgICAgICAgIFdpdGggdGhlIGFib3ZlIHZhcmlhYmxlcyB0aGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIGRlbGV0ZSB0aGUKKyAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgRFVUIGluIHRoaXMgb3JkZXI6CisgICAgICAgICAgICAgICAgL2hvbWUvdXNlci93b3JrL2RpcjEvZmlsZTEKKyAgICAgICAgICAgICAgICAvaG9tZS91c2VyL3dvcmsvZGlyMSAgICAgICAgKGlmIGRpciBpcyBlbXB0eSkKKyAgICAgICAgICAgICAgICAvaG9tZS91c2VyL3dvcmsvZGlyMiAgICAgICAgKGlmIGRpciBpcyBlbXB0eSkKKyAgICAgICAgICAgICAgICAvaG9tZS91c2VyL3dvcmsgICAgICAgICAgICAgKGlmIGRpciBpcyBlbXB0eSkKKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsobG9jYWxwYXRoLCB0b3Bkb3duPUZhbHNlKToKKyAgICAgICAgICAgICMgRGVsZXRlIGZpbGVzIGZpcnN0CisgICAgICAgICAgICB0bXBkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCkucmVwbGFjZShsb2NhbHBhdGgsICIiKQorICAgICAgICAgICAgcmVtb3RlZGlyID0gb3MucGF0aC5qb2luKHJlbW90ZXBhdGgsIHRtcGRpci5sc3RyaXAoIi8iKSkKKyAgICAgICAgICAgIHNlbGYuZGVsZXRlX2ZpbGVzKHJlbW90ZWRpciwgZmlsZXMpCisKKyAgICAgICAgICAgICMgUmVtb3ZlIGRpcnMgaWYgZW1wdHkKKyAgICAgICAgICAgIGZvciBkIGluIGRpcnM6CisgICAgICAgICAgICAgICAgdG1wZGlyID0gb3MucGF0aC5qb2luKHJvb3QsIGQpLnJlcGxhY2UobG9jYWxwYXRoLCAiIikKKyAgICAgICAgICAgICAgICByZW1vdGVkaXIgPSBvcy5wYXRoLmpvaW4ocmVtb3RlcGF0aCwgdG1wZGlyLmxzdHJpcCgiLyIpKQorICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlX2RpcihyZW1vdGVwYXRoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQppbmRleCBmODUwZDc4Li41OTU5M2Y1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQpAQCAtMTAsMTggKzEwLDE3IEBACiBpbXBvcnQgc3VicHJvY2VzcwogZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCiAKLWNsYXNzIEJ1aWxkUHJvamVjdCgpOgotCi0gICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKK2NsYXNzIEJ1aWxkUHJvamVjdChtZXRhY2xhc3M9QUJDTWV0YSk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgdXJpLCBmb2xkZXJuYW1lPU5vbmUsIHRtcGRpcj0iL3RtcC8iKToKICAgICAgICAgc2VsZi5kID0gZAogICAgICAgICBzZWxmLnVyaSA9IHVyaQogICAgICAgICBzZWxmLmFyY2hpdmUgPSBvcy5wYXRoLmJhc2VuYW1lKHVyaSkKICAgICAgICAgc2VsZi5sb2NhbGFyY2hpdmUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLHNlbGYuYXJjaGl2ZSkKLSAgICAgICAgc2VsZi5mbmFtZSA9IHJlLnN1YihyJy50YXIuYnoyfHRhci5neiQnLCAnJywgc2VsZi5hcmNoaXZlKQogICAgICAgICBpZiBmb2xkZXJuYW1lOgogICAgICAgICAgICAgc2VsZi5mbmFtZSA9IGZvbGRlcm5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZm5hbWUgPSByZS5zdWIocidcLnRhclwuYnoyJHxcLnRhclwuZ3okfFwudGFyXC54eiQnLCAnJywgc2VsZi5hcmNoaXZlKQogCiAgICAgIyBEb3dubG9hZCBzZWxmLmFyY2hpdmUgdG8gc2VsZi5sb2NhbGFyY2hpdmUKICAgICBkZWYgX2Rvd25sb2FkX2FyY2hpdmUoc2VsZik6CkBAIC0xMTgsMTAgKzExNywxMCBAQAogICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQogCiAgICAgICAgICNDaGFuZ2UgdGFyZ2V0ZGlyIHRvIHByb2plY3QgZm9sZGVyCi0gICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gc2VsZi50YXJnZXRkaXIgKyBzZWxmLmZuYW1lCisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0ZGlyLCBzZWxmLmZuYW1lKQogCi0gICAgZGVmIHJ1bl9jb25maWd1cmUoc2VsZiwgY29uZmlndXJlX2FyZ3M9JycpOgotICAgICAgICByZXR1cm4gc3VwZXIoU0RLQnVpbGRQcm9qZWN0LCBzZWxmKS5ydW5fY29uZmlndXJlKGNvbmZpZ3VyZV9hcmdzPShjb25maWd1cmVfYXJncyBvciAnJENPTkZJR1VSRV9GTEFHUycpLCBleHRyYV9jbWRzPScgZ251LWNvbmZpZ2l6ZTsgJykKKyAgICBkZWYgcnVuX2NvbmZpZ3VyZShzZWxmLCBjb25maWd1cmVfYXJncz0nJywgZXh0cmFfY21kcz0nIGdudS1jb25maWdpemU7ICcpOgorICAgICAgICByZXR1cm4gc3VwZXIoU0RLQnVpbGRQcm9qZWN0LCBzZWxmKS5ydW5fY29uZmlndXJlKGNvbmZpZ3VyZV9hcmdzPShjb25maWd1cmVfYXJncyBvciAnJENPTkZJR1VSRV9GTEFHUycpLCBleHRyYV9jbWRzPWV4dHJhX2NtZHMpCiAKICAgICBkZWYgcnVuX2luc3RhbGwoc2VsZiwgaW5zdGFsbF9hcmdzPScnKToKICAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2luc3RhbGwoaW5zdGFsbF9hcmdzPShpbnN0YWxsX2FyZ3Mgb3IgIkRFU1RESVI9JXMvLi4vaW5zdGFsbCIgJSBzZWxmLnRhcmdldGRpcikpCkBAIC0xMzQsNCArMTMzLDMgQEAKICAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgogICAgICAgICBzZWxmLmxvZygiUnVubmluZyAuICVzOyAiICUgc2VsZi5zZGtlbnYgKyBjbWQpCiAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoIi4gJXM7ICIgJSBzZWxmLnNka2VudiArIGNtZCwgc2hlbGw9VHJ1ZSkKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvdGVzdGV4cG9ydC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3Rlc3RleHBvcnQucHkKaW5kZXggMjQzNDYzYi4uNTdiZTJjYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvdGVzdGV4cG9ydC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90ZXN0ZXhwb3J0LnB5CkBAIC02LDcgKzYsNyBAQAogCiBpbXBvcnQgb3MsIHJlLCBnbG9iIGFzIGcsIHNodXRpbCBhcyBzaCxzeXMKIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKLWZyb20gY29tbWFuZHMgaW1wb3J0IHJ1bkNtZAorZnJvbSAuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZAogZnJvbSBkaWZmbGliIGltcG9ydCBTZXF1ZW5jZU1hdGNoZXIgYXMgU00KIAogdHJ5OgpAQCAtMTcsMTMgKzE3LDEzIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGRlZiBwbGFpbihzZWxmLCBtc2cpOgogICAgICAgICAgICAgaWYgbXNnOgotICAgICAgICAgICAgICAgIHByaW50IG1zZworICAgICAgICAgICAgICAgIHByaW50KG1zZykKICAgICAgICAgZGVmIHdhcm4oc2VsZiwgbXNnKToKICAgICAgICAgICAgIGlmIG1zZzoKLSAgICAgICAgICAgICAgICBwcmludCAiV0FSTklORzogIiArIG1zZworICAgICAgICAgICAgICAgIHByaW50KCJXQVJOSU5HOiAiICsgbXNnKQogICAgICAgICBkZWYgZmF0YWwoc2VsZiwgbXNnKToKICAgICAgICAgICAgIGlmIG1zZzoKLSAgICAgICAgICAgICAgICBwcmludCAiRkFUQUw6IiArIG1zZworICAgICAgICAgICAgICAgIHByaW50KCJGQVRBTDoiICsgbXNnKQogICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgYmIgPSBteV9sb2coKSAgICAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvMDAwMS1GaXgtb3V0LW9mLXNvdXJjZS1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkLzAwMDEtRml4LW91dC1vZi1zb3VyY2UtYnVpbGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYWEzYWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvMDAwMS1GaXgtb3V0LW9mLXNvdXJjZS1idWlsZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLUZyb20gNWQzMmI2NWFmNzUwZTIwMDc3MzBmM2Q1NWE1NTJhMTg2YWVkODFhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJNYXhpbiBCLiBKb2huIiA8bWF4aW4uam9obkBpbnRlbC5jb20+Ci1EYXRlOiBXZWQsIDIwIEphbiAyMDE2IDE0OjA4OjI5ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBvdXQgb2Ygc291cmNlIGJ1aWxkCi0KLVNpbmNlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGNvbnRhaW5zIGFub3RoZXIgY29uZmlnLmgsIHRoZSBidWlsZAotZGlyZWN0b3J5IHNob3VsZCBiZSBzZWFyY2hlZCBmaXJzdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLVtodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL2FjcGlkMi90aWNrZXRzLzEwL10KLQotU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+Ci0tLS0KLSBzb2NrLmMgICAgICB8IDIgKy0KLSB1ZF9zb2NrZXQuYyB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NvY2suYyBiL3NvY2suYwotaW5kZXggNjQ0ZDQ2MC4uOWUwNDUwMSAxMDA2NDQKLS0tLSBhL3NvY2suYwotKysrIGIvc29jay5jCi1AQCAtMjEsNyArMjEsNyBAQAotICAqLwotIAotICNpZmRlZiBIQVZFX0NPTkZJR19ICi0tI2luY2x1ZGUgImNvbmZpZy5oIgotKyNpbmNsdWRlIDxjb25maWcuaD4KLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci1kaWZmIC0tZ2l0IGEvdWRfc29ja2V0LmMgYi91ZF9zb2NrZXQuYwotaW5kZXggMTc5MDkxNy4uODNiMmFhOSAxMDA2NDQKLS0tLSBhL3VkX3NvY2tldC5jCi0rKysgYi91ZF9zb2NrZXQuYwotQEAgLTQsNyArNCw3IEBACi0gICovCi0gCi0gI2lmZGVmIEhBVkVfQ09ORklHX0gKLS0jaW5jbHVkZSAiY29uZmlnLmgiCi0rI2luY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotICNpbmNsdWRlIDxzdGRpby5oPgotLS0gCi0yLjQuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzYmQ1MWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWRfMi4wLjI2LmJiCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1yZXF1aXJlIGFjcGlkLmluYwotCi1TUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1GaXgtb3V0LW9mLXNvdXJjZS1idWlsZC5wYXRjaCIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYWNwaWQuaDtlbmRsaW5lPTI0O21kNT0zMjRhOWNmMjI1YWU2OWRkYWFkMWJmOWQ5NDIxMTViNSIKLQotU1JDX1VSSVttZDVzdW1dID0gImY2ZDc3MmUzNWVkOTA3ZjFjYzE0YWQxYTU0NmZkNDczIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzODRmMzdlNGYyNjBmNTAxODNlMmUyMDAzOTgyM2Q4ZjA2YWVkOWRiNTY5MjRmZTkyMDk3YjdlMGIyZTAzNDMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5ZmNmZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkXzIuMC4yNy5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgYWNwaWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FjcGlkLmg7ZW5kbGluZT0yNDttZDU9MzI0YTljZjIyNWFlNjlkZGFhZDFiZjlkOTQyMTE1YjUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNDFiZGY2MjhlMTIyZWRiNDM0MmZjYTQzMmVhN2RiOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MjBjMjIzZTUzY2MxMWQ5ZDcyMjlmYjFmZmMyYzIyMDVmMTA1NDA4MmM4MGY4M2Y1YTRlYzRkZjE2ZDNhNjE2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiCmluZGV4IDRmZjZhZDAuLjgyYzI2NDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZF8zLjIuMi0xNS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWRfMy4yLjItMTUuYmIKQEAgLTksNyArOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcG0uaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTE4O21kNT03ZDRhY2MxMjUwOTEwYTg5Zjg0Y2UzY2M2NTU3YzRjMiIKIERFUEVORFMgPSAibGlidG9vbC1jcm9zcyIKIAotU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYS9hcG1kL2FwbWRfMy4yLjIub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjA3MjhUMDQzNDQzWi9wb29sL21haW4vYS8ke0JQTn0vJHtCUE59XzMuMi4yLm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCiAgICAgICAgICAgIGZpbGU6Ly9sZWdhY3kucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbGlidG9vbC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly91bmxpbnV4LnBhdGNoIFwKQEAgLTI2LDYgKzI2LDcgQEAKIAogIyBmb3IgdGhpcyBwYWNrYWdlIHdlJ3JlIG1vc3RseSBpbnRlcmVzdGVkIGluIHRyYWNraW5nIGRlYmlhbiBwYXRjaGVzLAogIyBhbmQgbm90IGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHdoZXJlIGFsbCBkZXZlbG9wbWVudCBoYXMgZWZmZWN0aXZlbHkgc3RvcHBlZAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvIgogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+KChcZCtcLiopKyktKChcZCtcLiopKykpXC4oZGlmZnxkZWJpYW5cLnRhcilcLihnenx4eikiCiAKIFMgPSAiJHtXT1JLRElSfS9hcG1kLTMuMi4yLm9yaWciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvYWFyY2g2NC1pbml0cGxhdC5jLWZpeC1jb25zdC1xdWFsaWZpZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvYWFyY2g2NC1pbml0cGxhdC5jLWZpeC1jb25zdC1xdWFsaWZpZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1ZjA3NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9hYXJjaDY0LWluaXRwbGF0LmMtZml4LWNvbnN0LXF1YWxpZmllci5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGRjODNiODRkYzhiNGU3MWVmY2U0NzE0MzQ5N2FhYzZjMTI2MDY1Y2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTggSnVsIDIwMTYgMDg6NDA6MjkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliL2FhcmNoNjQvaW5pdHBsYXQuYzogZml4IGNvbnN0IHF1YWxpZmllcgorCitGaXhlZDoKK2luaXRwbGF0LmM6NDQ6MzU6IGVycm9yOiBpbml0aWFsaXphdGlvbiBkaXNjYXJkcyAnY29uc3QnIHF1YWxpZmllciBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUgWy1XZXJyb3I9ZGlzY2FyZGVkLXF1YWxpZmllcnNdCisgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBkZXN0LCAqcSA9IHNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+CitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvYWFyY2g2NC9pbml0cGxhdC5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYWFyY2g2NC9pbml0cGxhdC5jIGIvbGliL2FhcmNoNjQvaW5pdHBsYXQuYworaW5kZXggMmFjMDNhNy4uYWFlN2JlYiAxMDA2NDQKKy0tLSBhL2xpYi9hYXJjaDY0L2luaXRwbGF0LmMKKysrKyBiL2xpYi9hYXJjaDY0L2luaXRwbGF0LmMKK0BAIC00MSw3ICs0MSw4IEBAIHZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgX19TSVpFX1RZUEVfXyBuKQorIAorIHZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIF9fU0laRV9UWVBFX18gbikKKyB7CistICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBkZXN0LCAqcSA9IHNyYzsKKysgICAgdW5zaWduZWQgY2hhciAqcCA9IGRlc3Q7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSBzcmM7CisgCisgICAgIHdoaWxlIChuLS0pCisgICAgICAgICAqcCsrID0gKnErKzsKKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VkMTI4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLUZyb20gOGEzNTZkNGI2YTI0MmNlNjNiNzM5MjBkM2VkMzNmODhmOWUxMmZlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgotRGF0ZTogU3VuLCA2IFNlcCAyMDE1IDA1OjIwOjQzIC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGdudS1lZmk6IE1ha2Ugc2V0am1wLlMgcG9ydGFibGUgdG8gQVJNCi0KLVRoaXMgcGF0Y2ggZml4ZXMgdGhlIGZvbGxvd2luZyBlcnJvcjoKLQotICAuLi4vbGliL2FybS9zZXRqbXAuUzoxODogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgotICAuLi4vbGliL2FybS9zZXRqbXAuUzoyNjogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgotCi1UaGUgcHJvYmxlbSBpcyB0aGUgYXNzZW1ibHkgc3ludGF4IHRoYXQgaXMgdXNlZCBpcyBub3QgcG9ydGFibGUgdG8gQVJNLAotd2hlcmUgdGhlICdAJyBzeW1ib2wgaXMgYSBjb21tZW50OgotCi0gID4gTm90ZSBvbiB0YXJnZXRzIHdoZXJlIHRoZSBAIGNoYXJhY3RlciBpcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50Ci0gID4gKGVnIEFSTSkgdGhlbiBhbm90aGVyIGNoYXJhY3RlciBpcyB1c2VkIGluc3RlYWQuIEZvciBleGFtcGxlIHRoZQotICA+IEFSTSBwb3J0IHVzZXMgdGhlICUgY2hhcmFjdGVyLgotCi0oRnJvbSBodHRwczovL3NvdXJjZXdhcmUub3JnL2JpbnV0aWxzL2RvY3MtMi4yNS9hcy9TZWN0aW9uLmh0bWwjU2VjdGlvbikKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgotLS0tCi0gbGliL2FybS9zZXRqbXAuUyB8IDQgKystLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWIvYXJtL3NldGptcC5TIGIvbGliL2FybS9zZXRqbXAuUwotaW5kZXggNmUzZmJmMC4uODVjODcwNSAxMDA2NDQKLS0tLSBhL2xpYi9hcm0vc2V0am1wLlMKLSsrKyBiL2xpYi9hcm0vc2V0am1wLlMKLUBAIC0xNSw3ICsxNSw3IEBAIEJBU0lTLAotIAkudGV4dAotIAkuYXJtCi0gCS5nbG9ibAlzZXRqbXAKLS0JLnR5cGUJc2V0am1wLCBAZnVuY3Rpb24KLSsJLnR5cGUJc2V0am1wLCAlZnVuY3Rpb24KLSBzZXRqbXA6Ci0gCW1vdglyMywgcjEzCi0gCXN0bWlhCXIwLCB7cjMtcjEyLHIxNH0KLUBAIC0yMyw2ICsyMyw2IEBAIHNldGptcDoKLSAJYngJbHIKLSAKLSAJLmdsb2JsCWxvbmdqbXAKLS0JLnR5cGUJbG9uZ2ptcCwgQGZ1bmN0aW9uCi0rCS50eXBlCWxvbmdqbXAsICVmdW5jdGlvbgotIGxvbmdqbXA6Ci0gCWxkbWlhCXIwLCB7cjMtcjEyLHIxNH0KLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpXzMuMC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpXzMuMC4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2EzNDU5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLVNVTU1BUlkgPSAiTGlicmFyaWVzIGZvciBwcm9kdWNpbmcgRUZJIGJpbmFyaWVzIgotSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nbnUtZWZpLyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkdQTHYyKyB8IEJTRC0yLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2dudWVmaS9jcnQwLWVmaS1hcm0uUztiZWdpbmxpbmU9NDtlbmRsaW5lPTk7bWQ1PTIyNDBkN2JiZGYwOTI4Mjk0YzJmNGE2OGIxNGQ2NTkxIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dudWVmaS9jcnQwLWVmaS1hYXJjaDY0LlM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNjttZDU9ZTU4Mjc2NGE0Nzc2ZTYwYzk1YmY5YWI2MTczNDNkMzYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jL2VmaXNoZWxsaW50Zi5oO2JlZ2lubGluZT0xMztlbmRsaW5lPTIwO21kNT0yMDI3NjZiNzlkNzA4ZWZmM2NjNzBmY2UxNWZiODBjNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxwYXJtLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMTttZDU9NDY4YjEyMzFiMDViYmM4NGJhZTNhMGQ1Nzc0ZTNiYjUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9kaXY2NC5TO2JlZ2lubGluZT02O2VuZGxpbmU9MTI7bWQ1PWE5NmM4NGY1YWQxMmI0ZjAxMWY5OGI1ZDAzOTI0MmYyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vbWF0aC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTA7bWQ1PTY0ZGQxOTg3Y2VlMWRjZjU5ZDExYWE1NzJjZmE2NDRlIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vaW5pdHBsYXQuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTEwO21kNT02NGRkMTk4N2NlZTFkY2Y1OWQxMWFhNTcyY2ZhNjQ0ZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2xpYjFmdW5jcy5TO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PWY1NmQ1ZWJiYzg3MTM2YmM2NmNmZTI0ZGI4MmJjZjAxIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L21hdGguYztiZWdpbmxpbmU9OTtlbmRsaW5lPTMzO21kNT1jZmFkZTRjNTYwZTAzM2E3YmIwMmRhYjI4Mjg3MmM3ZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYWFyY2g2NC9pbml0cGxhdC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PTkwMGNiMWZmYmUzZTFkZWQzNDQxMDJiZTkyMTgzMGYxIFwKLSAgICAgICAgICAgICAgICAgICAiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2djYzQ2LWNvbXBhdGliaWxpdHkucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjE1YTRiY2JjMThhOWE1ZTgxMTBlZDk1NTk3MDYyMmU2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1MzBmMjFhMTVmZDljMjE0ZGQ5MmQyOWE2Y2FhMjBmYWM5ODkyODkyNjc1MTIwMjBiNmRhMWY1ZTZmNWI0Y2IiCi0KLUNPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKiktbGludXgiCi0KLWRlZiBnbnVfZWZpX2FyY2goZCk6Ci0gICAgaW1wb3J0IHJlCi0gICAgdGFyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQotICAgIGlmIHJlLm1hdGNoKCJpWzM0NTY3ODldODYiLCB0YXJjaCk6Ci0gICAgICAgIHJldHVybiAiaWEzMiIKLSAgICByZXR1cm4gdGFyY2gKLQotRVhUUkFfT0VNQUtFID0gIidBUkNIPSR7QGdudV9lZmlfYXJjaChkKX0nICdDQz0ke0NDfScgJ0FTPSR7QVN9JyAnTEQ9JHtMRH0nICdBUj0ke0FSfScgXAotICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyAnT0JKQ09QWT0ke09CSkNPUFl9JyAnUFJFRklYPSR7cHJlZml4fScgJ0xJQkRJUj0ke2xpYmRpcn0nIFwKLSAgICAgICAgICAgICAgICAiCi0KLWRvX2luc3RhbGwoKSB7Ci0gICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0iJHtEfSIKLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLmxkcyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkOGVlNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuNC5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gIkxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIEVGSSBiaW5hcmllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ251LWVmaS8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MisgfCBCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9nbnVlZmkvY3J0MC1lZmktYXJtLlM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNjttZDU9ZTU4Mjc2NGE0Nzc2ZTYwYzk1YmY5YWI2MTczNDNkMzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFhcmNoNjQuUztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT1lNTgyNzY0YTQ3NzZlNjBjOTViZjlhYjYxNzM0M2QzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxpbnRmLmg7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjA7bWQ1PTIwMjc2NmI3OWQ3MDhlZmYzY2M3MGZjZTE1ZmI4MGM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luYy9lZmlzaGVsbHBhcm0uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTExO21kNT00NjhiMTIzMWIwNWJiYzg0YmFlM2EwZDU3NzRlM2JiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL21hdGguYztiZWdpbmxpbmU9MjtlbmRsaW5lPTE1O21kNT04ZWQ3NzI1MDFkYTc3YjJiMzM0NWFhNmRmODc0NGM5ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2luaXRwbGF0LmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xNTttZDU9OGVkNzcyNTAxZGE3N2IyYjMzNDVhYTZkZjg3NDRjOWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FhcmNoNjQvbWF0aC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTU7bWQ1PThlZDc3MjUwMWRhNzdiMmIzMzQ1YWE2ZGY4NzQ0YzllIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L2luaXRwbGF0LmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xNTttZDU9OGVkNzcyNTAxZGE3N2IyYjMzNDVhYTZkZjg3NDRjOWUgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2djYzQ2LWNvbXBhdGliaWxpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWFyY2g2NC1pbml0cGxhdC5jLWZpeC1jb25zdC1xdWFsaWZpZXIucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYxMmUwZjMyN2YzMWM0Yjg0NjhlZjU1ZjRlZWI5NjQ5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxYTAwNDI4YzNjY2I5NmRiMjQwODllZDgzOTQ4NDNjNGY4M2NmOGY0MmM2YTRkZmRkYjRiN2MyM2YyYmY4YWYiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKiktbGludXgiCitDT01QQVRJQkxFX0hPU1RfYXJtdjQgPSAnbnVsbCcKKworZGVmIGdudV9lZmlfYXJjaChkKToKKyAgICBpbXBvcnQgcmUKKyAgICB0YXJjaCA9IGQuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpCisgICAgaWYgcmUubWF0Y2goImlbMzQ1Njc4OV04NiIsIHRhcmNoKToKKyAgICAgICAgcmV0dXJuICJpYTMyIgorICAgIHJldHVybiB0YXJjaAorCitFWFRSQV9PRU1BS0UgPSAiJ0FSQ0g9JHtAZ251X2VmaV9hcmNoKGQpfScgJ0NDPSR7Q0N9JyAnQVM9JHtBU30nICdMRD0ke0xEfScgJ0FSPSR7QVJ9JyBcCisgICAgICAgICAgICAgICAgJ1JBTkxJQj0ke1JBTkxJQn0nICdPQkpDT1BZPSR7T0JKQ09QWX0nICdQUkVGSVg9JHtwcmVmaXh9JyAnTElCRElSPSR7bGliZGlyfScgXAorICAgICAgICAgICAgICAgICIKKworIyBnbnUtZWZpJ3MgTWFrZWZpbGUgdHJlYXRzIHByZWZpeCBhcyB0b29sY2hhaW4gcHJlZml4LCBzbyBkb24ndAorIyBleHBvcnQgaXQuCitwcmVmaXhbdW5leHBvcnRdID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0iJHtEfSIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLmxkcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKyMgSXQgZG9lc24ndCBzdXBwb3J0IHNzZSwgaXRzIG1ha2UuZGVmYXVsdHMgc2V0czoKKyMgQ0ZMQUdTICs9IC1tbm8tbW14IC1tbm8tc3NlCisjIFNvIGFsc28gcmVtb3ZlIC1tZnBtYXRoPXNzZSBmcm9tIFRVTkVfQ0NBUkdTCitUVU5FX0NDQVJHU19yZW1vdmUgPSAiLW1mcG1hdGg9c3NlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLWdydWItY29yZS1nZXR0ZXh0LWdldHRleHQuYy1tYWluX2NvbnRleHQtc2Vjb25kYXJ5X2MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtZ3J1Yi1jb3JlLWdldHRleHQtZ2V0dGV4dC5jLW1haW5fY29udGV4dC1zZWNvbmRhcnlfYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWMyMzYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLWdydWItY29yZS1nZXR0ZXh0LWdldHRleHQuYy1tYWluX2NvbnRleHQtc2Vjb25kYXJ5X2MucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBmMzBjNjkyYzFmOWVmMGU5M2JlZTJiNDA4YTI0YmFhMDE3ZjFjYTlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVmxhZGltaXIgU2VyYmluZW5rbyA8cGhjb2RlckBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDcgTm92IDIwMTMgMDE6MDE6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gCSogZ3J1Yi1jb3JlL2dldHRleHQvZ2V0dGV4dC5jIChtYWluX2NvbnRleHQpLAorIChzZWNvbmRhcnlfY29udGV4dCk6IAlEZWZpbmUgYWZ0ZXIgZGVmaW5pbmcgdHlwZSBhbmQgbm90IGJlZm9yZS4KKworLS0tCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgIHwgNSArKysrKworIGdydWItY29yZS9nZXR0ZXh0L2dldHRleHQuYyB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2dldHRleHQvZ2V0dGV4dC5jIGIvZ3J1Yi1jb3JlL2dldHRleHQvZ2V0dGV4dC5jCitpbmRleCBkZjczNTcwLi40ODgwY2VmIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2dldHRleHQvZ2V0dGV4dC5jCisrKysgYi9ncnViLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LmMKK0BAIC0zNCw4ICszNCw2IEBAIEdSVUJfTU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsKKyAgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvbWFudWFsL2dldHRleHQvTU8tRmlsZXMuaHRtbCAuCisgKi8KKyAKKy1zdGF0aWMgc3RydWN0IGdydWJfZ2V0dGV4dF9jb250ZXh0IG1haW5fY29udGV4dCwgc2Vjb25kYXJ5X2NvbnRleHQ7CistCisgc3RhdGljIGNvbnN0IGNoYXIgKigqZ3J1Yl9nZXR0ZXh0X29yaWdpbmFsKSAoY29uc3QgY2hhciAqcyk7CisgCisgc3RydWN0IGdydWJfZ2V0dGV4dF9tc2cKK0BAIC02OSw2ICs2Nyw4IEBAIHN0cnVjdCBncnViX2dldHRleHRfY29udGV4dAorICAgc3RydWN0IGdydWJfZ2V0dGV4dF9tc2cgKmdydWJfZ2V0dGV4dF9tc2dfbGlzdDsKKyB9OworIAorK3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9nZXR0ZXh0X2NvbnRleHQgbWFpbl9jb250ZXh0LCBzZWNvbmRhcnlfY29udGV4dDsKKysKKyAjZGVmaW5lIE1PX01BR0lDX05VTUJFUiAJCTB4OTUwNDEyZGUKKyAKKyBzdGF0aWMgZ3J1Yl9lcnJfdAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2gKaW5kZXggMDllZjRkYi4uMWZmM2MxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaApAQCAtMTAsNyArMTAsNyBAQAogY29uZmlndXJlOjIwMzIzOiAkPyA9IDEKIGNvbmZpZ3VyZToyMDMyNzogZXJyb3I6IGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vYnVpbGRkaXNrL2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvZW1lbmxvdyBmYWlsZWQgdG8gcHJvZHVjZSBhc3NlbWJseSBjb2RlCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNC8xMwogCiBJbmRleDogZ3J1Yi0yLjAwL2FjaW5jbHVkZS5tNApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoCmluZGV4IGM1NTdmMTMuLmRkMzBkOTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2gKQEAgLTYsNyArNiw3IEBACiBjb25mdGVzdC5jOjE6MDogZXJyb3I6IFNTRSBpbnN0cnVjdGlvbiBzZXQgZGlzYWJsZWQsIHVzaW5nIDM4NyBhcml0aG1ldGljcyBbLVdlcnJvcl0KIGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNC8xMwogCiBJbmRleDogZ3J1Yi0xLjk5L2NvbmZpZ3VyZS5hYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW1vZHVsZS1leHBsaWNpdGx5LWtlZXBzLXN5bWJvbGUtLm1vZHVsZV9saWNlbnNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW1vZHVsZS1leHBsaWNpdGx5LWtlZXBzLXN5bWJvbGUtLm1vZHVsZV9saWNlbnNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNWM0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbW9kdWxlLWV4cGxpY2l0bHkta2VlcHMtc3ltYm9sZS0ubW9kdWxlX2xpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSA3NDYxYTNkZTM4YjY2ZWRiZTJmNTU5M2Y5YmRhYjlmMjcwNGQzMmJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNyBBdWcgMjAxNiAwNDowNjozNCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBncnViIG1vZHVsZSBleHBsaWNpdGx5IGtlZXBzIHN5bWJvbGUgLm1vZHVsZV9saWNlbnNlCisKK1doaWxlIHVzaW5nIG9lLWNvcmUgdG9vbGNoYWluIHRvIHN0cmlwIGdydWIgbW9kdWxlICdhbGxfdmlkZW8ubW9kJywKK2l0IHN0cmlwcGVkIHN5bWJvbCB0YWJsZToKKy0tLS0tLS0tLS0tLS0tCityb290QGxvY2FsaG9zdDp+IyBvYmpkdW1wIC10IGFsbF92aWRlby5tb2QKKworYWxsX3ZpZGVvLm1vZDogICAgIGZpbGUgZm9ybWF0IGVsZjY0LXg4Ni02NAorCitTWU1CT0wgVEFCTEU6CitubyBzeW1ib2xzCistLS0tLS0tLS0tLS0tLQorCitJdCBjYXVzZWQgZ3J1YiB0byBsb2FkIG1vZHVsZSBhbGxfdmlkZW8gZmFpbGVkLgorLS0tLS0tLS0tLS0tLS0KK2dydWI+IGluc21vZCBhbGxfdmlkZW8KK2Vycm9yOiBubyBzeW1ib2wgdGFibGUuCistLS0tLS0tLS0tLS0tLQorCitUd2VhayBzdHJpcCBvcHRpb24gdG8ga2VlcCBzeW1ib2wgLm1vZHVsZV9saWNlbnNlIGNvdWxkIHdvcmthcm91bmQKK3RoZSBpc3N1ZS4KKy0tLS0tLS0tLS0tLS0tCityb290QGxvY2FsaG9zdDp+IyBvYmpkdW1wIC10IGFsbF92aWRlby5tb2QKKworYWxsX3ZpZGVvLm1vZDogICAgIGZpbGUgZm9ybWF0IGVsZjY0LXg4Ni02NAorCitTWU1CT0wgVEFCTEU6CiswMDAwMDAwMDAwMDAwMDAwIGwgICAgZCAgLnRleHQgIDAwMDAwMDAwMDAwMDAwMDAgLnRleHQKKzAwMDAwMDAwMDAwMDAwMDAgbCAgICBkICAuZGF0YSAgMDAwMDAwMDAwMDAwMDAwMCAuZGF0YQorMDAwMDAwMDAwMDAwMDAwMCBsICAgIGQgIC5tb2R1bGVfbGljZW5zZSAgICAgICAgMDAwMDAwMDAwMDAwMDAwMCAubW9kdWxlX2xpY2Vuc2UKKzAwMDAwMDAwMDAwMDAwMDAgbCAgICBkICAuYnNzICAgMDAwMDAwMDAwMDAwMDAwMCAuYnNzCiswMDAwMDAwMDAwMDAwMDAwIGwgICAgZCAgLm1vZGRlcHMgICAgICAgMDAwMDAwMDAwMDAwMDAwMCAubW9kZGVwcworMDAwMDAwMDAwMDAwMDAwMCBsICAgIGQgIC5tb2RuYW1lICAgICAgIDAwMDAwMDAwMDAwMDAwMDAgLm1vZG5hbWUKKy0tLS0tLS0tLS0tLS0tCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBncnViLWNvcmUvZ2VubW9kLnNoLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2dlbm1vZC5zaC5pbiBiL2dydWItY29yZS9nZW5tb2Quc2guaW4KK2luZGV4IDc2ZGYwYmIuLjM5YTljZmMgMTAwNjQ0CistLS0gYS9ncnViLWNvcmUvZ2VubW9kLnNoLmluCisrKysgYi9ncnViLWNvcmUvZ2VubW9kLnNoLmluCitAQCAtNTksNyArNTksNyBAQCBpZiB0ZXN0IHhAVEFSR0VUX0FQUExFX0NDQCAhPSB4MTsgdGhlbgorIAlpZiB0ZXN0IHhAcGxhdGZvcm1AICE9IHhlbXU7IHRoZW4KKyAJICAgIEBTVFJJUEAgLS1zdHJpcC11bm5lZWRlZCBcCisgCQktSyBncnViX21vZF9pbml0IC1LIGdydWJfbW9kX2ZpbmkgXAorLQkJLUsgX2dydWJfbW9kX2luaXQgLUsgX2dydWJfbW9kX2ZpbmkgXAorKwkJLUsgX2dydWJfbW9kX2luaXQgLUsgX2dydWJfbW9kX2ZpbmkgLUsgLm1vZHVsZV9saWNlbnNlIFwKKyAJCS1SIC5ub3RlLmdudS5nb2xkLXZlcnNpb24gLVIgLm5vdGUuR05VLXN0YWNrIFwKKyAJCS1SIC5ub3RlIC1SIC5jb21tZW50ICR0bXBmaWxlIHx8IGV4aXQgMQorIAlmaQorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCmluZGV4IDYyNTlhMWEuLjUxNjhkM2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCkBAIC0xLDEwNCArMSw0NCBAQAorU3ViamVjdDogW1BBVENIXSBncnViMjogcmVtb3ZlIGdydWItc3BhcmM2NC1zZXR1cCBmcm9tIHg4NiBidWlsZHMKKworKiByZW1vdmUgdGhlIGdydWItc3BhcmM2NC1zZXR1cCBmaWxlcyBmcm9tIHRoZSB4ODYgYnVpbGRzLgorCiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQogCi1yZW1vdmUgdGhlIGdydWItc3BhcmM2NC1zZXR1cCBmaWxlcyBmcm9tIHRoZSB4ODYgYnVpbGRzLgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1pbmdsaSBZdSA8bWluZ2xpLnl1QHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS51dGlsLmRlZiB8IDE4IC0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOCBkZWxldGlvbnMoLSkKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK2RpZmYgLS1naXQgYS9NYWtlZmlsZS51dGlsLmRlZiBiL01ha2VmaWxlLnV0aWwuZGVmCitpbmRleCBiODAxODdjLi5hNjcwY2YyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUudXRpbC5kZWYKKysrKyBiL01ha2VmaWxlLnV0aWwuZGVmCitAQCAtMzIxLDI0ICszMjEsNiBAQCBwcm9ncmFtID0geworIH07CisgCisgcHJvZ3JhbSA9IHsKKy0gIG5hbWUgPSBncnViLXNwYXJjNjQtc2V0dXA7CistICBpbnN0YWxsZGlyID0gc2JpbjsKKy0gIG1hbnNlY3Rpb24gPSA4OworLSAgY29tbW9uID0gdXRpbC9ncnViLXNldHVwLmM7CistICBjb21tb24gPSB1dGlsL2x2bS5jOworLSAgY29tbW9uID0gZ3J1Yi1jb3JlL2tlcm4vZW11L2FyZ3BfY29tbW9uLmM7CistICBjb21tb24gPSBncnViLWNvcmUvbGliL3JlZWRfc29sb21vbi5jOworLSAgY29tbW9uID0gdXRpbC9pZWVlMTI3NS9vZnBhdGguYzsKKy0KKy0gIGxkYWRkID0gbGliZ3J1Ym1vZHMuYTsKKy0gIGxkYWRkID0gbGliZ3J1Ymtlcm4uYTsKKy0gIGxkYWRkID0gbGliZ3J1YmdjcnkuYTsKKy0gIGxkYWRkID0gZ3J1Yi1jb3JlL2dudWxpYi9saWJnbnUuYTsKKy0gIGxkYWRkID0gJyQoTElCSU5UTCkgJChMSUJERVZNQVBQRVIpICQoTElCVVRJTCkgJChMSUJaRlMpICQoTElCTlZQQUlSKSAkKExJQkdFT00pJzsKKy0gIGNwcGZsYWdzID0gJy1ER1JVQl9TRVRVUF9TUEFSQzY0PTEnOworLX07CistCistcHJvZ3JhbSA9IHsKKyAgIG5hbWUgPSBncnViLW9mcGF0aG5hbWU7CisgICBpbnN0YWxsZGlyID0gc2JpbjsKKyAgIG1hbnNlY3Rpb24gPSA4OworLS0gCisyLjguMQogCi0tLS0gYS9NYWtlZmlsZS51dGlsLmFtCTIwMTQtMDgtMTUgMTE6NDE6MDIuNDQxMDExMjc4IC0wNzAwCi0rKysgYi9NYWtlZmlsZS51dGlsLmFtCTIwMTQtMDgtMTUgMTE6NDQ6MjYuMjQ1MDIxMTQyIC0wNzAwCi1AQCAtNDY5Miw5ICs0NjkyLDkgQEAKLSBlbmRpZgotIAotIGlmIENPTkRfZW11Ci0tc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKLStzYmluX1BST0dSQU1TICs9Ci0gaWYgQ09ORF9NQU5fUEFHRVMKLS1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAotK21hbl9NQU5TICs9Ci0gCi0gZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAotIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCi1AQCAtNDcxNSw5ICs0NzE1LDkgQEAKLSBlbmRpZgotIAotIGlmIENPTkRfaTM4Nl9wYwotLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCi0rc2Jpbl9QUk9HUkFNUyArPQotIGlmIENPTkRfTUFOX1BBR0VTCi0tbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKLSttYW5fTUFOUyArPQotIAotIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKLSAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAotQEAgLTQ3MzgsOSArNDczOCw5IEBACi0gZW5kaWYKLSAKLSBpZiBDT05EX2kzODZfZWZpCi0tc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKLStzYmluX1BST0dSQU1TICs9Ci0gaWYgQ09ORF9NQU5fUEFHRVMKLS1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAotK21hbl9NQU5TICs9Ci0gCi0gZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAotIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCi1AQCAtNDc2MSw5ICs0NzYxLDkgQEAKLSBlbmRpZgotIAotIGlmIENPTkRfaTM4Nl9xZW11Ci0tc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKLStzYmluX1BST0dSQU1TICs9Ci0gaWYgQ09ORF9NQU5fUEFHRVMKLS1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAotK21hbl9NQU5TICs9Ci0gCi0gZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAotIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCi1AQCAtNDc4NCw5ICs0Nzg0LDkgQEAKLSBlbmRpZgotIAotIGlmIENPTkRfaTM4Nl9jb3JlYm9vdAotLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCi0rc2Jpbl9QUk9HUkFNUyArPQotIGlmIENPTkRfTUFOX1BBR0VTCi0tbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKLSttYW5fTUFOUyArPQotIAotIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKLSAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAotQEAgLTQ4MDcsOSArNDgwNyw5IEBACi0gZW5kaWYKLSAKLSBpZiBDT05EX2kzODZfbXVsdGlib290Ci0tc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKLStzYmluX1BST0dSQU1TICs9Ci0gaWYgQ09ORF9NQU5fUEFHRVMKLS1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAotK21hbl9NQU5TICs9Ci0gCi0gZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAotIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCi1AQCAtNDgzMCw5ICs0ODMwLDkgQEAKLSBlbmRpZgotIAotIGlmIENPTkRfaTM4Nl9pZWVlMTI3NQotLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCi0rc2Jpbl9QUk9HUkFNUyArPQotIGlmIENPTkRfTUFOX1BBR0VTCi0tbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKLSttYW5fTUFOUyArPQotIAotIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKLSAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAotQEAgLTQ4NTMsOSArNDg1Myw5IEBACi0gZW5kaWYKLSAKLSBpZiBDT05EX3g4Nl82NF9lZmkKLS1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAotK3NiaW5fUFJPR1JBTVMgKz0KLSBpZiBDT05EX01BTl9QQUdFUwotLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44Ci0rbWFuX01BTlMgKz0KLSAKLSBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCi0gCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1naXQvMDAwMS1EaXNhYmxlLW1mcG1hdGgtc3NlLWFzLXdlbGwtd2hlbi1TU0UtaXMtZGlzYWJsZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItZ2l0LzAwMDEtRGlzYWJsZS1tZnBtYXRoLXNzZS1hcy13ZWxsLXdoZW4tU1NFLWlzLWRpc2FibGVkLnBhdGNoCmluZGV4IDg3ZWMyOWUuLmNlMzIzOGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1naXQvMDAwMS1EaXNhYmxlLW1mcG1hdGgtc3NlLWFzLXdlbGwtd2hlbi1TU0UtaXMtZGlzYWJsZWQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWdpdC8wMDAxLURpc2FibGUtbWZwbWF0aC1zc2UtYXMtd2VsbC13aGVuLVNTRS1pcy1kaXNhYmxlZC5wYXRjaApAQCAtMjAsNyArMjAsNyBAQAogYXJpdGhtZXRpY3MgWy1XZXJyb3JdCiBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycwogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAtLS0KIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYwppbmRleCAxNDZkZGU2Li5iMTBmNjMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYwpAQCAtMTIsNiArMTIsNyBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCiAKIFNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2dydWIvZ3J1Yi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1tb2R1bGUtZXhwbGljaXRseS1rZWVwcy1zeW1ib2xlLS5tb2R1bGVfbGljZW5zZS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZml4LWlzc3VlLXdpdGgtZmxleC0yLjUuMzcucGF0Y2ggXApAQCAtMzAsOSArMzEsMTAgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LUNWRS0yMDE1LTgzNzAtR3J1YjItdXNlci1wYXNzLXZ1bG5lcmFiaWxpdHkucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1SZW1vdmUtZGlyZWN0LV9sbHNlZWstY29kZS1hbmQtcmVxdWlyZS1sb25nLWZpbGVzeXN0LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2ZpeC10ZXhpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ3J1Yi1jb3JlLWdldHRleHQtZ2V0dGV4dC5jLW1haW5fY29udGV4dC1zZWNvbmRhcnlfYy5wYXRjaCBcCiAgICAgICAgICAgICAiCiAKLURFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgYXV0b2dlbi1uYXRpdmUiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJlOTI3NTQwYjZlZGE4YjAyNGZiMDM5MWVlYWE0MDkxYyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI2NWIzOWEwNTU4ZjhjODAyMjA5YzU3NGY0ZDAyY2EyNjNhODA0ZThhNTY0YmM2Y2FmMWNkMGZkM2IzY2MxMWUzIgpAQCAtNTksMTEgKzYxLDEwIEBACiAJIyBmb3IgaXRzIG93biBwdXJwb3Nlcy4gUmVtb3ZlIHRoZSBPRSB2ZXJzaW9ucyBmcm9tIHRoZSBlbnZpcm9ubWVudCB0bwogCSMgYXZvaWQgY29uZmxpY3RzLgogCXVuc2V0IFRBUkdFVF9DUFBGTEFHUyBUQVJHRVRfQ0ZMQUdTIFRBUkdFVF9DWFhGTEFHUyBUQVJHRVRfTERGTEFHUworCSggY2QgJHtTfQorCSR7U30vYXV0b2dlbi5zaCApCiB9CiAKICMgZ3J1YiBhbmQgZ3J1Yi1lZmkncyBzeXNyb290LyR7ZGF0YWRpcn0vZ3J1Yi9ncnViLW1rY29uZmlnX2xpYiBhcmUKICMgY29uZmxpY3RlZCwgcmVtb3ZlIGl0IHNpbmNlIG5vIG9uZSB1c2VzIGl0LgotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2NsYXNzLXRhcmdldCArPSAicmVtb3ZlX3N5c3Jvb3RfbWtjb25maWdfbGliIgotcmVtb3ZlX3N5c3Jvb3RfbWtjb25maWdfbGliKCkgewotICAgIHJtIC1yICIke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2dydWIvZ3J1Yi1ta2NvbmZpZ19saWIiCi19CitTWVNST09UX0RJUlNfQkxBQ0tMSVNUICs9ICIke2RhdGFkaXJ9L2dydWIvZ3J1Yi1ta2NvbmZpZ19saWIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCmluZGV4IDc3ODA3NGEuLjA3ZTFkMTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCkBAIC0xLDYgKzEsNiBAQAogcmVxdWlyZSBncnViMi5pbmMKIAotUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIGdydWItZWRpdGVudiIKIFBSID0gInIxIgogCiBFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPXBjIC0tZGlzYWJsZS1ncnViLW1rZm9udCAtLXByb2dyYW0tcHJlZml4PSIiIFwKQEAgLTgsNiArOCwxMCBAQAogCiBFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJy0tZW5hYmxlLWxhcmdlZmlsZScsICctLWRpc2FibGUtbGFyZ2VmaWxlJywgZCl9IgogCitQQUNLQUdFUyA9KyAiZ3J1Yi1lZGl0ZW52IgorCitGSUxFU19ncnViLWVkaXRlbnYgPSAiJHtiaW5kaXJ9L2dydWItZWRpdGVudiIKKwogZG9faW5zdGFsbF9hcHBlbmQgKCkgewogICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgppbmRleCA2OTE5YzlhLi40OTNiNjk1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl9naXQuYmIKQEAgLTEsMTQgKzEsMTIgQEAKIHJlcXVpcmUgZ3J1YjIuaW5jCiAKLURFUEVORFMgKz0gImF1dG9nZW4tbmF0aXZlIgotCiBERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCiBERUZBVUxUX1BSRUZFUkVOQ0VfYXJtID0gIjEiCiAKIEZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2dydWItZ2l0OiIKIAogUFYgPSAiMi4wMCske1NSQ1BWfSIKLVNSQ1JFViA9ICJiOTVlOTI2Nzg4ODJmNTYwNTZjNjRhZTI5MDkyYmM5Y2YxMjk5MDVmIgorU1JDUkVWID0gIjdhNWIzMDFlM2FkYjhlMDU0Mjg4NTE4YTMyNTEzNWExODgzYzFjNmMiCiBTUkNfVVJJID0gImdpdDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dydWIuZ2l0IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1tZnBtYXRoLXNzZS1hcy13ZWxsLXdoZW4tU1NFLWlzLWRpc2FibGVkLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaCBcCkBAIC0xOCw2ICsxNiw3IEBACiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0LiopLShsaW51eC4qfGZyZWVic2QuKiknCitDT01QQVRJQkxFX0hPU1RfYXJtdjdhID0gJ251bGwnCiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbwogCkBAIC0zMywxMSArMzIsNiBAQAogCiBFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJy0tZW5hYmxlLWxhcmdlZmlsZScsICctLWRpc2FibGUtbGFyZ2VmaWxlJywgZCl9IgogCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICAoIGNkICR7U30KLSAgICAgICR7U30vYXV0b2dlbi5zaCApCi19Ci0KIGRvX2luc3RhbGxfYXBwZW5kICgpIHsKICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2dydWIuZAogICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaAppbmRleCAyZmVkMzQ0Li44NmExNmMyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xpYmFjcGlfZml4X2Zvcl94MzIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC03LDcgKzcsNyBAQAogCiBQYXRjaCBSZWNlaXZlZCBmcm9tOiAgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNQorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNQogCiBJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoCmluZGV4IGJjYTc1ZmIuLmVmMzc2YWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaApAQCAtNiw3ICs2LDcgQEAKIHwgbWFrZTogKioqIFt0ZXN0LWxpYmFjcGldIEVycm9yIDEKIHwgRVJST1I6IG9lX3J1bm1ha2UgZmFpbGVkCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDcKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDcKIAogSW5kZXg6IGxpYmFjcGktMC4yL01ha2VmaWxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCmluZGV4IGI0NTI5ZjQuLjY4MmYxYzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC05LDcgKzksNyBAQAogfCBzcmMvTWFrZWZpbGUuYW06MTE6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKIAogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDMKIAogSW5kZXg6IGxyenN6LTAuMTIuMjAvY29uZmlndXJlLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuNC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2JlNTI1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuNC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotU1VNTUFSWSA9ICJQQ0kgdXRpbGl0aWVzIgotREVTQ1JJUFRJT04gPSAnVGhlIFBDSSBVdGlsaXRpZXMgcGFja2FnZSBjb250YWlucyBhIGxpYnJhcnkgZm9yIHBvcnRhYmxlIGFjY2VzcyBcCi10byBQQ0kgYnVzIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIHNldmVyYWwgdXRpbGl0aWVzIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4nCi1IT01FUEFHRSA9ICJodHRwOi8vYXRyZXkua2FybGluLm1mZi5jdW5pLmN6L35tai9wY2l1dGlscy5zaHRtbCIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLQotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLURFUEVORFMgPSAiemxpYiBrbW9kIgotCi1TUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvdXRpbHMvcGNpdXRpbHMvcGNpdXRpbHMtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ndWVzcy1maXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzNTc2M2JiMWVhYjdiYzliZjZlYjZlZmI3MmNiYzhhMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4NjU1NTRjYzU2MDRkMTY0NGJkOGRhMzhkOTQ4NDU0MDVlMmEzMTlhNmQ1YWNhYmM2YTAyOTY0MTc2ODRhODJhIgotCi1pbmhlcml0IG11bHRpbGliX2hlYWRlcgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ2h3ZGInLCAnJywgZCl9IgotUEFDS0FHRUNPTkZJR1tod2RiXSA9ICJIV0RCPXllcyxIV0RCPW5vLHVkZXYiCi0KLVBDSV9DT05GX0ZMQUcgPSAiWkxJQj15ZXMgRE5TPXllcyBTSEFSRUQ9eWVzIgotCi0jIHNlZSBjb25maWd1cmUucGF0Y2gKLWRvX2NvbmZpZ3VyZSAoKSB7Ci0JKAotCSAgY2QgbGliICYmIFwKLQkgICMgRVhUUkFfT0VDT05GIGZvciB0aGlzIHJlY2lwZSBjb3VsZCBvbmx5IHBvc3NpYmx5IGNvbnRhaW4gJ0hXREI9eWVzL25vJywgc28gd2UgcHV0IGl0Ci0JICAjIGJlZm9yZSAuL2NvbmZpZ3VyZQotCSAgJHtQQ0lfQ09ORl9GTEFHfSAke0VYVFJBX09FQ09ORn0gLi9jb25maWd1cmUgJHtQVn0gJHtkYXRhZGlyfSAke1RBUkdFVF9PU30gJHtUQVJHRVRfQVJDSH0KLQkpCi19Ci0KLWV4cG9ydCBQUkVGSVggPSAiJHtwcmVmaXh9IgotZXhwb3J0IFNCSU5ESVIgPSAiJHtzYmluZGlyfSIKLWV4cG9ydCBTSEFSRURJUiA9ICIke2RhdGFkaXJ9IgotZXhwb3J0IE1BTkRJUiA9ICIke21hbmRpcn0iCi0KLUVYVFJBX09FTUFLRSA9ICItZSBNQUtFRkxBR1M9ICR7UENJX0NPTkZfRkxBR30iCi0KLSMgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnJlYWtzIGlmIHRoZSBIT1NUIHZhcmlhYmxlIGlzIHNldAotSE9TVFt1bmV4cG9ydF0gPSAiMSIKLQotZG9faW5zdGFsbCAoKSB7Ci0Jb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbCBpbnN0YWxsLWxpYgotCi0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9Ci0JbG4gLXMgLi4vc2Jpbi9sc3BjaSAke0R9JHtiaW5kaXJ9L2xzcGNpCi0KLQlvZV9tdWx0aWxpYl9oZWFkZXIgcGNpL2NvbmZpZy5oCi19Ci0KLVBBQ0tBR0VTID0rICIke1BOfS1pZHMgbGlicGNpIgotRklMRVNfJHtQTn0taWRzID0gIiR7ZGF0YWRpcn0vcGNpLmlkcyoiCi1GSUxFU19saWJwY2kgPSAiJHtsaWJkaXJ9L2xpYnBjaS5zby4qIgotU1VNTUFSWV8ke1BOfS1pZHMgPSAiUENJIHV0aWxpdGllcyAtIGRldmljZSBJRCBkYXRhYmFzZSIKLURFU0NSSVBUSU9OXyR7UE59LWlkcyA9ICJQYWNrYWdlIHByb3ZpZGluZyB0aGUgUENJIGRldmljZSBJRCBkYXRhYmFzZSBmb3IgcGNpdXRpbHMuIgotUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWlkcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuNS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYjExOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuNS4xLmJiCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiUENJIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gJ1RoZSBQQ0kgVXRpbGl0aWVzIHBhY2thZ2UgY29udGFpbnMgYSBsaWJyYXJ5IGZvciBwb3J0YWJsZSBhY2Nlc3MgXAordG8gUENJIGJ1cyBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBzZXZlcmFsIHV0aWxpdGllcyBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuJworSE9NRVBBR0UgPSAiaHR0cDovL2F0cmV5Lmthcmxpbi5tZmYuY3VuaS5jei9+bWovcGNpdXRpbHMuc2h0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitERVBFTkRTID0gInpsaWIga21vZCIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL3V0aWxzL3BjaXV0aWxzL3BjaXV0aWxzLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3Vlc3MtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDg3OWE4ZjdhYzUxZjRlODc0Y2ZjNmIzNTIxYTEzY2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmJmM2E0NjA1YTU2MmZiNmI4Yjc2NzNiZmY4NWE0NzRhNWNmMzgzZWQ3ZTRiZDg4ODZiNGYwOTM5MDEzZDQyZiIKKworaW5oZXJpdCBtdWx0aWxpYl9oZWFkZXIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdod2RiJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaHdkYl0gPSAiSFdEQj15ZXMsSFdEQj1ubyx1ZGV2IgorCitQQ0lfQ09ORl9GTEFHID0gIlpMSUI9eWVzIEROUz15ZXMgU0hBUkVEPXllcyIKKworIyBzZWUgY29uZmlndXJlLnBhdGNoCitkb19jb25maWd1cmUgKCkgeworCSgKKwkgIGNkIGxpYiAmJiBcCisJICAjIFBBQ0tBR0VDT05GSUdfQ09ORkFSR1MgZm9yIHRoaXMgcmVjaXBlIGNvdWxkIG9ubHkgcG9zc2libHkgY29udGFpbiAnSFdEQj15ZXMvbm8nLAorCSAgIyBzbyB3ZSBwdXQgaXQgYmVmb3JlIC4vY29uZmlndXJlCisJICAke1BDSV9DT05GX0ZMQUd9ICR7UEFDS0FHRUNPTkZJR19DT05GQVJHU30gLi9jb25maWd1cmUgJHtQVn0gJHtkYXRhZGlyfSAke1RBUkdFVF9PU30gJHtUQVJHRVRfQVJDSH0KKwkpCit9CisKK2V4cG9ydCBQUkVGSVggPSAiJHtwcmVmaXh9IgorZXhwb3J0IFNCSU5ESVIgPSAiJHtzYmluZGlyfSIKK2V4cG9ydCBTSEFSRURJUiA9ICIke2RhdGFkaXJ9IgorZXhwb3J0IE1BTkRJUiA9ICIke21hbmRpcn0iCisKK0VYVFJBX09FTUFLRSA9ICItZSBNQUtFRkxBR1M9ICR7UENJX0NPTkZfRkxBR30iCisKKyMgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnJlYWtzIGlmIHRoZSBIT1NUIHZhcmlhYmxlIGlzIHNldAorSE9TVFt1bmV4cG9ydF0gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbCBpbnN0YWxsLWxpYgorCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJbG4gLXMgLi4vc2Jpbi9sc3BjaSAke0R9JHtiaW5kaXJ9L2xzcGNpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgcGNpL2NvbmZpZy5oCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1pZHMgbGlicGNpIgorRklMRVNfJHtQTn0taWRzID0gIiR7ZGF0YWRpcn0vcGNpLmlkcyoiCitGSUxFU19saWJwY2kgPSAiJHtsaWJkaXJ9L2xpYnBjaS5zby4qIgorU1VNTUFSWV8ke1BOfS1pZHMgPSAiUENJIHV0aWxpdGllcyAtIGRldmljZSBJRCBkYXRhYmFzZSIKK0RFU0NSSVBUSU9OXyR7UE59LWlkcyA9ICJQYWNrYWdlIHByb3ZpZGluZyB0aGUgUENJIGRldmljZSBJRCBkYXRhYmFzZSBmb3IgcGNpdXRpbHMuIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWlkcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYgppbmRleCAzNTU2YTQ1Li5iZjBmNThhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHNfMDE4LmJiCkBAIC05LDUgKzksMyBAQAogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU3YzI3YmU4ZjA0ZWY0ZDUzNWJjZmE5ODg1NjczMTZjYzU3NjU5ZmU2OTA2ODMyNzQ4NmRhYjUzNzkxZTY1NTgiCiAKIFBSID0gInIxIgotCi1GSUxFU18ke1BOfSArPSAiKi91ZGV2ICovKi91ZGV2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL0NPUFlJTkcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNTI5My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotVGhpcyBpcyBhIGJsYW5rIENPUFlJTkcgZmlsZSwgYW5kIHNob3VsZCBiZSBmaWxsZWQgaW4gYnkgb3JpZ2luYWwgYXV0aG9yIGluIGZ1dHVyZS4KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3BvaW50ZXJjYWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm0vcG9pbnRlcmNhbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkODRjYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkODRjYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY2L3BvaW50ZXJjYWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi04MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ny9wb2ludGVyY2FsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ny9wb2ludGVyY2FsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmQ4NGNhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjcvcG9pbnRlcmNhbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdW1pcHMvcG9pbnRlcmNhbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmQ4NGNhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXBwYy9wb2ludGVyY2FsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmQ2ZTM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni02NC9wb2ludGVyY2FsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwMDUzZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni02NC9wb2ludGVyY2FsCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotMTI4MCAwIDEwMDIgMCA5NjAgMzI4IDY1NTM2CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYvcG9pbnRlcmNhbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwMDUzZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotMTI4MCAwIDEwMDIgMCA5NjAgMzI4IDY1NTM2CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsXzAuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3MzVhNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBkYXRhIgotU0VDVElPTiA9ICJiYXNlIgotUFIgPSAicjExIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjVmY2ZjODdmYjYxNTg2MGQzOThiNWUzODY4NWVkZiIKLQotU1JDX1VSSSA9ICJmaWxlOi8vcG9pbnRlcmNhbCBcCi0gICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIgotCi1TID0gIiR7V09SS0RJUn0iCi0KLWRvX2luc3RhbGwoKSB7Ci0JIyBPbmx5IGluc3RhbGwgZmlsZSBpZiBpdCBoYXMgYSBjb250ZW50cwotCWlmIFsgLXMgJHtTfS9wb2ludGVyY2FsIF07IHRoZW4KLQkgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCi0JICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsICR7RH0ke3N5c2NvbmZkaXJ9LwotCWZpCi19Ci0KLUFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCi1QQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgotSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3N5c3RlbWQtYm9vdC9maWxlcy8wMDAxLXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zeXN0ZW1kLWJvb3QvZmlsZXMvMDAwMS11c2UtbG5yLXdyYXBwZXItaW5zdGVhZC1vZi1sb29raW5nLWZvci1yZWxhdGl2ZS1vcHRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2QyODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zeXN0ZW1kLWJvb3QvZmlsZXMvMDAwMS11c2UtbG5yLXdyYXBwZXItaW5zdGVhZC1vZi1sb29raW5nLWZvci1yZWxhdGl2ZS1vcHRpLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gOWRjZDJjODAzNDc0OTNmNzM4MDBkOGMxY2I1MzlmMWRhZWYxNDM5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IEp1bCAyMDE2IDAzOjU0OjQyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzZSBsbnIgd3JhcHBlciBpbnN0ZWFkIG9mIGxvb2tpbmcgZm9yIC0tcmVsYXRpdmUgb3B0aW9uIGZvciBsbgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICB8IDYgKysrLS0tCisgY29uZmlndXJlLmFjIHwgMiAtLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggMzA1MDk5YS4uZjA4ZDAyMyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTI0Nyw3ICsyNDcsNyBAQCBkZWZpbmUgbW92ZS10by1yb290bGliZGlyCisgCQkkKE1LRElSX1ApICQoREVTVERJUikkKHJvb3RsaWJkaXIpICYmIFwKKyAJCXNvX2ltZ19uYW1lPSQkKHJlYWRsaW5rICQoREVTVERJUikkKGxpYmRpcikvJCRsaWJuYW1lKSAmJiBcCisgCQlybSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyQkbGlibmFtZSAmJiBcCistCQkkKExOX1MpIC0tcmVsYXRpdmUgLWYgJChERVNURElSKSQocm9vdGxpYmRpcikvJCRzb19pbWdfbmFtZSAkKERFU1RESVIpJChsaWJkaXIpLyQkbGlibmFtZSAmJiBcCisrCQlsbnIgJChERVNURElSKSQocm9vdGxpYmRpcikvJCRzb19pbWdfbmFtZSAkKERFU1RESVIpJChsaWJkaXIpLyQkbGlibmFtZSAmJiBcCisgCQltdiAkKERFU1RESVIpJChsaWJkaXIpLyQkbGlibmFtZS4qICQoREVTVERJUikkKHJvb3RsaWJkaXIpOyBcCisgCWZpCisgZW5kZWYKK0BAIC0zMjEsNyArMzIxLDcgQEAgZGVmaW5lIGluc3RhbGwtcmVsYXRpdmUtYWxpYXNlcworIAl3aGlsZSBbIC1uICIkJDEiIF07IGRvIFwKKyAJCSQoTUtESVJfUCkgYGRpcm5hbWUgJChERVNURElSKSQkZGlyLyQkMmAgJiYgXAorIAkJcm0gLWYgJChERVNURElSKSQkZGlyLyQkMiAmJiBcCistCQkkKExOX1MpIC0tcmVsYXRpdmUgJChERVNURElSKSQkMSAkKERFU1RESVIpJCRkaXIvJCQyICYmIFwKKysJCWxuciAkKERFU1RESVIpJCQxICQoREVTVERJUikkJGRpci8kJDIgJiYgXAorIAkJc2hpZnQgMiB8fCBleGl0ICQkPzsgXAorIAlkb25lCisgZW5kZWYKK0BAIC0yOTA2LDcgKzI5MDYsNyBAQCBzeXN0ZW1kX2RidXMxX2dlbmVyYXRvcl9MREFERCA9IFwKKyBkYnVzMS1nZW5lcmF0b3ItaW5zdGFsbC1ob29rOgorIAkkKEFNX1ZfYXQpJChNS0RJUl9QKSAkKERFU1RESVIpJCh1c2VyZ2VuZXJhdG9yZGlyKQorIAkkKEFNX1ZfUk0pcm0gLWYgJChERVNURElSKSQodXNlcmdlbmVyYXRvcmRpcikvc3lzdGVtZC1kYnVzMS1nZW5lcmF0b3IKKy0JJChBTV9WX0xOKSQoTE5fUykgLS1yZWxhdGl2ZSAtZiAkKERFU1RESVIpJChzeXN0ZW1nZW5lcmF0b3JkaXIpL3N5c3RlbWQtZGJ1czEtZ2VuZXJhdG9yICQoREVTVERJUikkKHVzZXJnZW5lcmF0b3JkaXIpL3N5c3RlbWQtZGJ1czEtZ2VuZXJhdG9yCisrCSQoQU1fVl9MTilsbnIgJChERVNURElSKSQoc3lzdGVtZ2VuZXJhdG9yZGlyKS9zeXN0ZW1kLWRidXMxLWdlbmVyYXRvciAkKERFU1RESVIpJCh1c2VyZ2VuZXJhdG9yZGlyKS9zeXN0ZW1kLWRidXMxLWdlbmVyYXRvcgorIAorIGRidXMxLWdlbmVyYXRvci11bmluc3RhbGwtaG9vazoKKyAJcm0gLWYgJChERVNURElSKSQodXNlcmdlbmVyYXRvcmRpcikvc3lzdGVtZC1kYnVzMS1nZW5lcmF0b3IKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMyOTg2MWEuLjUyYzZlM2QgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTExMCw4ICsxMTAsNiBAQCBBQ19QQVRIX1BST0coW1NVTE9HSU5dLCBbc3Vsb2dpbl0sIFsvdXNyL3NiaW4vc3Vsb2dpbl0sIFskUEFUSDovdXNyL3NiaW46L3NiaW5dKQorIEFDX1BBVEhfUFJPRyhbTU9VTlRfUEFUSF0sIFttb3VudF0sIFsvdXNyL2Jpbi9tb3VudF0sIFskUEFUSDovdXNyL3NiaW46L3NiaW5dKQorIEFDX1BBVEhfUFJPRyhbVU1PVU5UX1BBVEhdLCBbdW1vdW50XSwgWy91c3IvYmluL3Vtb3VudF0sIFskUEFUSDovdXNyL3NiaW46L3NiaW5dKQorIAorLUFTX0lGKFshIGxuIC0tcmVsYXRpdmUgLS1oZWxwID4gL2Rldi9udWxsIDI+JjFdLCBbQUNfTVNHX0VSUk9SKFsqKiogbG4gZG9lc24ndCBzdXBwb3J0IC0tcmVsYXRpdmUgKioqXSldKQorLQorIE00X0RFRklORVM9CisgCisgQUNfQ0hFQ0tfVE9PTChPQkpDT1BZLCBvYmpjb3B5KQorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zeXN0ZW1kLWJvb3Qvc3lzdGVtZC1ib290LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc3lzdGVtZC1ib290L3N5c3RlbWQtYm9vdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjExNjRlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc3lzdGVtZC1ib290L3N5c3RlbWQtYm9vdC5iYgpAQCAtMCwwICsxLDM4IEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQuaW5jCisKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIGxpYmNhcCB1dGlsLWxpbnV4IGdudS1lZmkiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0Citpbmhlcml0IGRlcGxveQorCitFWFRSQV9PRUNPTkYgPSAiIC0tZW5hYmxlLWdudWVmaSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1lZmktaW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGRzZGlyPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWVmaS1saWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbWFucGFnZXMgXAorICAgICAgICAgICAgICAgIgorCisjIEltcG9ydGVkIGZyb20gZ3VtbWlib290IHJlY2lwZQorVFVORV9DQ0FSR1NfcmVtb3ZlID0gIi1tZnBtYXRoPXNzZSIKK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qKS1saW51eCIKKworZG9fY29tcGlsZSgpIHsKKwlTWVNURU1EX0JPT1RfRUZJX0FSQ0g9ImlhMzIiCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgorCQlTWVNURU1EX0JPT1RfRUZJX0FSQ0g9Ing2NCIKKwlmaQorCisJb2VfcnVubWFrZSBzeXN0ZW1kLWJvb3Qke1NZU1RFTURfQk9PVF9FRklfQVJDSH0uZWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBCeXBhc3Mgc3lzdGVtZCBpbnN0YWxsYXRpb24gd2l0aCBhIE5PUAorCToKK30KKworZG9fZGVwbG95ICgpIHsKKwlpbnN0YWxsICR7Qn0vc3lzdGVtZC1ib290Ki5lZmkgJHtERVBMT1lESVJ9Cit9CithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE2LjAzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE2LjAzLmJiCmluZGV4IGRmZGE1YzEuLjc5ZjE1NDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtZnctdXRpbHNfMjAxNi4wMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTYuMDMuYmIKQEAgLTQwLDEwICs0MCw3IEBACiAJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmluZGlyX2Nyb3NzfS9md19zZXRlbnYKIH0KIAotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2NsYXNzLWNyb3NzID0gInVib290X2Z3X3V0aWxzX2Nyb3NzIgotdWJvb3RfZndfdXRpbHNfY3Jvc3MoKSB7Ci0Jc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3NzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc30KLX0KK1NZU1JPT1RfRElSU19hcHBlbmRfY2xhc3MtY3Jvc3MgPSAiICR7YmluZGlyX2Nyb3NzfSIKIAogUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKIEJCQ0xBU1NFWFRFTkQgPSAiY3Jvc3MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jCmluZGV4IDNiYTg2NmQuLjI1MmFhZTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jCkBAIC05LDEwICs5LDExIEBACiBTUkNfVVJJID0gImdpdDovL2dpdC5kZW54LmRlL3UtYm9vdC5naXQ7YnJhbmNoPW1hc3RlciIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKIAogUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKIAotaW5oZXJpdCB1Ym9vdC1jb25maWcgZGVwbG95Citpbmhlcml0IHVib290LWNvbmZpZyB1Ym9vdC1leHRsaW51eC1jb25maWcgdWJvb3Qtc2lnbiBkZXBsb3kKIAogRVhUUkFfT0VNQUtFID0gJ0NST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBDQz0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RPT0xDSEFJTl9PUFRJT05TfSIgVj0xJwogRVhUUkFfT0VNQUtFICs9ICdIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IicKQEAgLTMyLDcgKzMzLDYgQEAKICMgYnV0IGVuYWJsZSBpbmRpdmlkdWFsIHJlY2lwZXMgdG8gY2hhbmdlIHRoaXMgdmFsdWUuCiBVQk9PVF9TVUZGSVggPz89ICJiaW4iCiBVQk9PVF9JTUFHRSA/PSAidS1ib290LSR7TUFDSElORX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9IgotVUJPT1RfQklOQVJZID89ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9IgogVUJPT1RfU1lNTElOSyA/PSAidS1ib290LSR7TUFDSElORX0uJHtVQk9PVF9TVUZGSVh9IgogVUJPT1RfTUFLRV9UQVJHRVQgPz0gImFsbCIKIApAQCAtNjUsOSArNjUsMTUgQEAKIFVCT09UX0VOVl9JTUFHRSA/PSAiJHtVQk9PVF9FTlZ9LSR7TUFDSElORX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTlZfU1VGRklYfSIKIFVCT09UX0VOVl9TWU1MSU5LID89ICIke1VCT09UX0VOVn0tJHtNQUNISU5FfS4ke1VCT09UX0VOVl9TVUZGSVh9IgogCisjIFUtQm9vdCBFWFRMSU5VWCB2YXJpYWJsZXMuIFUtQm9vdCBzZWFyY2hlcyBmb3IgL2Jvb3QvZXh0bGludXgvZXh0bGludXguY29uZgorIyB0byBmaW5kIEVYVExJTlVYIGNvbmYgZmlsZS4KK1VCT09UX0VYVExJTlVYX0lOU1RBTExfRElSID89ICIvYm9vdC9leHRsaW51eCIKK1VCT09UX0VYVExJTlVYX0NPTkZfTkFNRSA/PSAiZXh0bGludXguY29uZiIKK1VCT09UX0VYVExJTlVYX1NZTUxJTksgPz0gIiR7VUJPT1RfRVhUTElOVVhfQ09ORl9OQU1FfS0ke01BQ0hJTkV9LSR7UFJ9IgorCiBkb19jb21waWxlICgpIHsKIAlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnbGQtaXMtZ29sZCcsICcnLCBkKX0iID0gImxkLWlzLWdvbGQiIF0gOyB0aGVuCi0JCXNlZCAtaSAncy8kKENST1NTX0NPTVBJTEUpbGQkLyQoQ1JPU1NfQ09NUElMRSlsZC5iZmQvZycgY29uZmlnLm1rCisJCXNlZCAtaSAncy8kKENST1NTX0NPTVBJTEUpbGQkLyQoQ1JPU1NfQ09NUElMRSlsZC5iZmQvZycgJHtTfS9jb25maWcubWsKIAlmaQogCiAJdW5zZXQgTERGTEFHUwpAQCAtNzksNDEgKzg1LDQ4IEBACiAJCWVjaG8gJHtVQk9PVF9MT0NBTFZFUlNJT059ID4gJHtCfS8uc2NtdmVyc2lvbgogCQllY2hvICR7VUJPT1RfTE9DQUxWRVJTSU9OfSA+ICR7U30vLnNjbXZlcnNpb24KIAlmaQotICAgIAotICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisKKyAgICBpZiBbIC1uICIke1VCT09UX0NPTkZJR30iIF0KICAgICB0aGVuCisgICAgICAgIHVuc2V0IGkgaiBrCiAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KLSAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKLSAgICAgICAgICAgIGZvciB0eXBlICBpbiAke1VCT09UX0NPTkZJR307IGRvCi0gICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgaT0kKGV4cHIgJGkgKyAxKTsKKyAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICBqPSQoZXhwciAkaiArIDEpOwogICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KICAgICAgICAgICAgICAgICB0aGVuCi0gICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtjb25maWd9Ci0gICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtVQk9PVF9NQUtFX1RBUkdFVH0KLSAgICAgICAgICAgICAgICAgICAgY3AgICR7U30vJHtjb25maWd9LyR7VUJPT1RfQklOQVJZfSAgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgLUMgJHtTfSBPPSR7Qn0vJHtjb25maWd9ICR7Y29uZmlnfQorICAgICAgICAgICAgICAgICAgICBvZV9ydW5tYWtlIC1DICR7U30gTz0ke0J9LyR7Y29uZmlnfSAke1VCT09UX01BS0VfVEFSR0VUfQorICAgICAgICAgICAgICAgICAgICBmb3IgYmluYXJ5IGluICR7VUJPT1RfQklOQVJJRVN9OyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaz0kKGV4cHIgJGsgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgJGsgLWVxICRpIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCAke0J9LyR7Y29uZmlnfS8ke2JpbmFyeX0gJHtCfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIHVuc2V0IGsKICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgZG9uZQogICAgICAgICAgICAgdW5zZXQgIGoKICAgICAgICAgZG9uZQogICAgICAgICB1bnNldCAgaQogICAgIGVsc2UKLSAgICAgICAgb2VfcnVubWFrZSAke1VCT09UX01BQ0hJTkV9Ci0gICAgICAgIG9lX3J1bm1ha2UgJHtVQk9PVF9NQUtFX1RBUkdFVH0KKyAgICAgICAgb2VfcnVubWFrZSAtQyAke1N9IE89JHtCfSAke1VCT09UX01BQ0hJTkV9CisgICAgICAgIG9lX3J1bm1ha2UgLUMgJHtTfSBPPSR7Qn0gJHtVQk9PVF9NQUtFX1RBUkdFVH0KICAgICBmaQogCiB9CiAKIGRvX2luc3RhbGwgKCkgewotICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgaWYgWyAtbiAiJHtVQk9PVF9DT05GSUd9IiBdCiAgICAgdGhlbgogICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCi0gICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICBpPSQoZXhwciAkaSArIDEpOwogICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbwotICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICBqPSQoZXhwciAkaiArIDEpOwogICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KICAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfS9ib290Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9ICR7RH0vYm9vdC91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtCfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9ICR7RH0vYm9vdC91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0KICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9LSR7dHlwZX0KICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CiAgICAgICAgICAgICAgICAgZmkKQEAgLTEyMywyMSArMTM2LDIxIEBACiAgICAgICAgIHVuc2V0ICBpCiAgICAgZWxzZQogICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAotICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0lNQUdFfQorICAgICAgICBpbnN0YWxsIC1tIDY0NCAke0J9LyR7VUJPT1RfQklOQVJZfSAke0R9L2Jvb3QvJHtVQk9PVF9JTUFHRX0KICAgICAgICAgbG4gLXNmICR7VUJPT1RfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0JJTkFSWX0KICAgICBmaQogCi0gICAgaWYgWyAieCR7VUJPT1RfRUxGfSIgIT0gIngiIF0KKyAgICBpZiBbIC1uICIke1VCT09UX0VMRn0iIF0KICAgICB0aGVuCi0gICAgICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgICAgIGlmIFsgLW4gIiR7VUJPT1RfQ09ORklHfSIgXQogICAgICAgICB0aGVuCiAgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCi0gICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGk9JChleHByICRpICsgMSk7CiAgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbwotICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgIGo9JChleHByICRqICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KICAgICAgICAgICAgICAgICAgICAgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1VCT09UX0VMRn0gJHtEfS9ib290L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQogICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CiAgICAgICAgICAgICAgICAgICAgIGZpCkBAIC0xNDYsNyArMTU5LDcgQEAKICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgIHVuc2V0IGkKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvJHtVQk9PVF9FTEZfSU1BR0V9CisgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke0J9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvJHtVQk9PVF9FTEZfSU1BR0V9CiAgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0VMRl9CSU5BUll9CiAgICAgICAgIGZpCiAgICAgZmkKQEAgLTE1NiwxNyArMTY5LDE3IEBACiAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vZndfZW52LmNvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9md19lbnYuY29uZmlnCiAgICAgZmkKIAotICAgIGlmIFsgIngke1NQTF9CSU5BUll9IiAhPSAieCIgXQorICAgIGlmIFsgLW4gIiR7U1BMX0JJTkFSWX0iIF0KICAgICB0aGVuCi0gICAgICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdICAgCisgICAgICAgIGlmIFsgLW4gIiR7VUJPT1RfQ09ORklHfSIgXQogICAgICAgICB0aGVuCiAgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCi0gICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGk9JChleHByICRpICsgMSk7CiAgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbwotICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgIGo9JChleHByICRqICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KICAgICAgICAgICAgICAgICAgICAgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vJHtTUExfQklOQVJZfSAke0R9L2Jvb3QvJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke0J9LyR7Y29uZmlnfS8ke1NQTF9CSU5BUll9ICR7RH0vYm9vdC8ke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfQogICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0R9L2Jvb3QvJHtTUExfQklOQVJZTkFNRX0tJHt0eXBlfQogICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0R9L2Jvb3QvJHtTUExfQklOQVJZTkFNRX0KICAgICAgICAgICAgICAgICAgICAgZmkKQEAgLTE3NSw2MSArMTg4LDY3IEBACiAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICB1bnNldCAgaQogICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbnN0YWxsICR7U30vJHtTUExfQklOQVJZfSAke0R9L2Jvb3QvJHtTUExfSU1BR0V9CisgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke0J9LyR7U1BMX0JJTkFSWX0gJHtEfS9ib290LyR7U1BMX0lNQUdFfQogICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfSAke0R9L2Jvb3QvJHtTUExfQklOQVJZTkFNRX0KICAgICAgICAgZmkKICAgICBmaQogCi0gICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICBpZiBbIC1uICIke1VCT09UX0VOVn0iIF0KICAgICB0aGVuCi0gICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0VOVl9JTUFHRX0KICAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0R9L2Jvb3QvJHtVQk9PVF9FTlZfQklOQVJZfQogICAgIGZpCisKKyAgICBpZiBbICIke1VCT09UX0VYVExJTlVYfSIgPSAiMSIgXQorICAgIHRoZW4KKyAgICAgICAgaW5zdGFsbCAtRG0gMDY0NCAke1VCT09UX0VYVExJTlVYX0NPTkZJR30gJHtEfS8ke1VCT09UX0VYVExJTlVYX0lOU1RBTExfRElSfS8ke1VCT09UX0VYVExJTlVYX0NPTkZfTkFNRX0KKyAgICBmaQorCiB9CiAKIEZJTEVTXyR7UE59ID0gIi9ib290ICR7c3lzY29uZmRpcn0iCiAKIGRvX2RlcGxveSAoKSB7Ci0gICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICBpZiBbIC1uICIke1VCT09UX0NPTkZJR30iIF0KICAgICB0aGVuCiAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KLSAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgIGk9JChleHByICRpICsgMSk7CiAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCi0gICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGo9JChleHByICRqICsgMSk7CiAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQogICAgICAgICAgICAgICAgIHRoZW4KICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0RFUExPWURJUn0KLSAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS91LWJvb3QtJHt0eXBlfS4ke1VCT09UX1NVRkZJWH0gJHtERVBMT1lESVJ9L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke0J9LyR7Y29uZmlnfS91LWJvb3QtJHt0eXBlfS4ke1VCT09UX1NVRkZJWH0gJHtERVBMT1lESVJ9L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfQogICAgICAgICAgICAgICAgICAgICBjZCAke0RFUExPWURJUn0KICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke1VCT09UX1NZTUxJTkt9LSR7dHlwZX0KICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke1VCT09UX1NZTUxJTkt9CiAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9CSU5BUll9LSR7dHlwZX0KICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke1VCT09UX0JJTkFSWX0KLSAgICAgICAgICAgICAgICBmaSAKLSAgICAgICAgICAgIGRvbmUgCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgIHVuc2V0ICBqCiAgICAgICAgIGRvbmUKICAgICAgICAgdW5zZXQgIGkKICAgICBlbHNlCiAgICAgICAgIGluc3RhbGwgLWQgJHtERVBMT1lESVJ9Ci0gICAgICAgIGluc3RhbGwgJHtTfS8ke1VCT09UX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfSU1BR0V9CisgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtVQk9PVF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0lNQUdFfQogICAgICAgICBjZCAke0RFUExPWURJUn0KICAgICAgICAgcm0gLWYgJHtVQk9PVF9CSU5BUll9ICR7VUJPT1RfU1lNTElOS30KICAgICAgICAgbG4gLXNmICR7VUJPT1RfSU1BR0V9ICR7VUJPT1RfU1lNTElOS30KICAgICAgICAgbG4gLXNmICR7VUJPT1RfSU1BR0V9ICR7VUJPT1RfQklOQVJZfQogICAgZmkKIAotICAgIGlmIFsgIngke1VCT09UX0VMRn0iICE9ICJ4IiBdCisgICAgaWYgWyAtbiAiJHtVQk9PVF9FTEZ9IiBdCiAgICAgdGhlbgotICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgICAgICBpZiBbIC1uICIke1VCT09UX0NPTkZJR30iIF0KICAgICAgICAgdGhlbgogICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbwotICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBpPSQoZXhwciAkaSArIDEpOwogICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KLSAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICBqPSQoZXhwciAkaiArIDEpOwogICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCiAgICAgICAgICAgICAgICAgICAgIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vJHtVQk9PVF9FTEZ9ICR7REVQTE9ZRElSfS91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke0J9LyR7Y29uZmlnfS8ke1VCT09UX0VMRn0gJHtERVBMT1lESVJ9L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0KICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9CSU5BUll9LSR7dHlwZX0KICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9CSU5BUll9CiAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfU1lNTElOS30tJHt0eXBlfQpAQCAtMjQwLDI0ICsyNTksMjQgQEAKICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgIHVuc2V0IGkKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfRUxGfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfSU1BR0V9CisgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke0J9LyR7VUJPT1RfRUxGfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfSU1BR0V9CiAgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9CSU5BUll9CiAgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9TWU1MSU5LfQogICAgICAgICBmaQogICAgIGZpCiAKIAotICAgICBpZiBbICJ4JHtTUExfQklOQVJZfSIgIT0gIngiIF0KKyAgICAgaWYgWyAtbiAiJHtTUExfQklOQVJZfSIgXQogICAgICB0aGVuCi0gICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICAgaWYgWyAtbiAiJHtVQk9PVF9DT05GSUd9IiBdCiAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbwotICAgICAgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICAgICAgIGk9JChleHByICRpICsgMSk7CiAgICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KLSAgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgIGo9JChleHByICRqICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCiAgICAgICAgICAgICAgICAgICAgICB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtjb25maWd9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWU5BTUV9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfS0ke3R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUllOQU1FfS0ke3R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUllOQU1FfQpAQCAtMjY5LDcgKzI4OCw3IEBACiAgICAgICAgICAgICAgZG9uZQogICAgICAgICAgICAgIHVuc2V0ICBpCiAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX0lNQUdFfQorICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtTUExfQklOQVJZfSAke0RFUExPWURJUn0vJHtTUExfSU1BR0V9CiAgICAgICAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWU5BTUV9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQogICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWU5BTUV9CiAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfSAke0RFUExPWURJUn0vJHtTUExfU1lNTElOS30KQEAgLTI3NywxMyArMjk2LDIwIEBACiAgICAgIGZpCiAKIAotICAgIGlmIFsgIngke1VCT09UX0VOVn0iICE9ICJ4IiBdCisgICAgaWYgWyAtbiAiJHtVQk9PVF9FTlZ9IiBdCiAgICAgdGhlbgotICAgICAgICBpbnN0YWxsICR7V09SS0RJUn0vJHtVQk9PVF9FTlZfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfSU1BR0V9CisgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vJHtVQk9PVF9FTlZfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfSU1BR0V9CiAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9TWU1MSU5LfQogICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTlZfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9CSU5BUll9CiAgICAgICAgIGxuIC1zZiAke1VCT09UX0VOVl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX1NZTUxJTkt9CiAgICAgZmkKKworICAgIGlmIFsgIiR7VUJPT1RfRVhUTElOVVh9IiA9ICIxIiBdCisgICAgdGhlbgorICAgICAgICBpbnN0YWxsIC1tIDY0NCAke1VCT09UX0VYVExJTlVYX0NPTkZJR30gJHtERVBMT1lESVJ9LyR7VUJPT1RfRVhUTElOVVhfU1lNTElOS30KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRVhUTElOVVhfU1lNTElOS30gJHtERVBMT1lESVJ9LyR7VUJPT1RfRVhUTElOVVhfQ09ORl9OQU1FfS0ke01BQ0hJTkV9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0VYVExJTlVYX1NZTUxJTkt9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VYVExJTlVYX0NPTkZfTkFNRX0KKyAgICBmaQogfQogCiBhZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FhcmNoNjQtaG9zdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9hYXJjaDY0LWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxZmVkNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9hYXJjaDY0LWhvc3QucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorQWNjZXB0IGFhcmNoNjQgYXMgdmFsaWQgYnVpbGQgaG9zdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiB2ODZkLTAuMS4xMC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2ODZkLTAuMS4xMC5vcmlnL2NvbmZpZ3VyZQorKysrIHY4NmQtMC4xLjEwL2NvbmZpZ3VyZQorQEAgLTI2LDcgKzI2LDcgQEAgY29wdF94ODZlbXVfdGVzdCgpCisgCWxvY2FsIG09YHVuYW1lIC1tYAorIAlpZiBbICIkbSIgPSAiaTY4NiIgLW8gIiRtIiA9ICJpNTg2IiAtbyAiJG0iID0gImk0ODYiIC1vICIkbSIgPSAiaTM4NiIgXTsgdGhlbgorIAkJZWNobyAibiI7CistCWVsaWYgWyAiJG0iID0gIng4Nl82NCIgXTsgdGhlbgorKwllbGlmIFsgIiRtIiA9ICJ4ODZfNjQiIC1vICIkbSIgPSAiYWFyY2g2NCIgXTsgdGhlbgorIAkJZWNobyAieSI7CisgCWVsc2UKKyAJCWVjaG8gIkl0IGxvb2tzIGxpa2UgeW91ciBhcmNoaXRlY3R1cmUgJyRtJyBpc24ndCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHY4NmQuIiA+JjIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZF8wLjEuMTAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiCmluZGV4IGY1MDIwNzIuLjEwNDZkNjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZF8wLjEuMTAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkXzAuMS4xMC5iYgpAQCAtMTMsNyArMTMsOSBAQAogICAgICAgICAgICBmaWxlOi8vVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2Zic2V0dXAgXAogICAgICAgICAgICBmaWxlOi8vdXZlc2FmYi5jb25mIFwKLSAgICAgICAgICAgZmlsZTovL2FyLWZyb20tZW52LnBhdGNoIgorICAgICAgICAgICBmaWxlOi8vYXItZnJvbS1lbnYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWFyY2g2NC1ob3N0LnBhdGNoIFwKKyIKIAogU1JDX1VSSVttZDVzdW1dID0gIjUxYzc5MmJhN2I4NzRhZDhjNDNmMGQzZGE0Y2ZhYmUwIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzNDk2NGFlMThlZjY4Yzg0OTNhZGQyY2UxNTBlM2I0NTAyYmFkZWIwZDkxOTRiNGJkODEyNDFkMjVlNjczNWMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzIuYmIKaW5kZXggMzk2NmI0Yy4uYWMzNjQ2MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMyLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLXVpXzAuNi4zMi5iYgpAQCAtNiwyMiArNiwyMCBAQAogCiByZXF1aXJlIGF2YWhpLmluYwogCi1pbmhlcml0IHB5dGhvbi1kaXIgcHl0aG9ubmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjawotQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzNESVNUUk9GRUFUVVJFU30iCiAKLVBBQ0tBR0VDT05GSUcgPz89ICJkYnVzIHB5dGhvbiIKLVBBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLWVuYWJsZS1weXRob24sLS1kaXNhYmxlLXB5dGhvbixweXRob24tbmF0aXZlIHB5dGhvbiIKLQorU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWluc3RhbGwtR3RrQnVpbGRlci1pbnRlcmZhY2UtZmlsZXMtZm9yLS5wYXRjaCIKIFNSQ19VUklbbWQ1c3VtXSA9ICIyMmI1ZTcwNWQzZWFiYjMxZDI2ZjJlMWU3YjA3NDAxMyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJkNTQ5OTExODVkNTE0YTBhYmE1NGViZWI0MDhkNzU3NWI2MGY1ODE4YTc3MmUyOGZhMGUxOGI5OGJjMWRiNDU0IgogCi1ERVBFTkRTICs9ICJhdmFoaSBndGsrIGxpYmdsYWRlIgorREVQRU5EUyArPSAiYXZhaGkiCiAKLUFWQUhJX0dUSyA9ICItLWVuYWJsZS1ndGsgLS1kaXNhYmxlLWd0azMgLS1kaXNhYmxlLXB5Z3RrIgorQVZBSElfR1RLID0gImd0azMiCiAKIFMgPSAiJHtXT1JLRElSfS9hdmFoaS0ke1BWfSIKIAotUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXRpbHMgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jIHB5dGhvbi1hdmFoaSBhdmFoaS1kaXNjb3ZlciIKK1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LXV0aWxzICR7UE59LWRiZyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRvYyBhdmFoaS1kaXNjb3ZlciIKIAogRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpKi5zby4qIgogRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGliYXZhaGktdWkke1NPTElCU0RFVn0iCkBAIC0yOSwxNCArMjcsMTAgQEAKIAogRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9L2IqICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2IqIgogCi1GSUxFU19weXRob24tYXZhaGkgPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYXZhaGkgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYXZhaGlfZGlzY292ZXIiCiBGSUxFU19hdmFoaS1kaXNjb3ZlciA9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXZhaGkvaW50ZXJmYWNlcy9hdmFoaS1kaXNjb3ZlciogXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9pbnRlcmZhY2VzL2F2YWhpLWRpc2NvdmVyLnVpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXZhaGkvaW50ZXJmYWNlcy9hdmFoaS1kaXNjb3Zlci5nbGFkZSIKLQotUkRFUEVORFNfcHl0aG9uLWF2YWhpID0gInB5dGhvbi1jb3JlIHB5dGhvbi1kYnVzIgotCisgICAgICAgICAgICAgICAgICAgICAgICAiCiAKIGRvX2luc3RhbGxfYXBwZW5kICgpIHsKIAlybSAke0R9JHtzeXNjb25mZGlyfSAtcmYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYwppbmRleCA4MWFhZDc5Li4yMzQ2NDZkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGkuaW5jCkBAIC0yMyw4ICsyMywxNCBAQAogICAgICAgICAgICIKIFVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vbGF0aGlhdC9hdmFoaS9yZWxlYXNlcy8iCiAKLVBBQ0tBR0VDT05GSUcgPz89ICJkYnVzIgorIyBGb3IgZ3RrIHJlbGF0ZWQgUEFDS0FHRUNPTkZJR3M6IGd0aywgZ3RrMyBhbmQgcHlndGsKK0FWQUhJX0dUSyA/PSAiIgorCitQQUNLQUdFQ09ORklHID8/PSAiZGJ1cyAke0FWQUhJX0dUS30iCiBQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLWVuYWJsZS1ndGssLS1kaXNhYmxlLWd0ayxndGsrIgorUEFDS0FHRUNPTkZJR1tndGszXSA9ICItLWVuYWJsZS1ndGszLC0tZGlzYWJsZS1ndGszLGd0ayszIgorUEFDS0FHRUNPTkZJR1tweWd0a10gPSAiLS1lbmFibGUtcHlndGssLS1kaXNhYmxlLXB5Z3RrLCIKIAogVVNFUkFERF9QQUNLQUdFUyA9ICJhdmFoaS1kYWVtb24gYXZhaGktYXV0b2lwZCIKIFVTRVJBRERfUEFSQU1fYXZhaGktZGFlbW9uID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9hdmFoaS1kYWVtb24gXApAQCAtNTEsMTQgKzU3LDEyIEBACiAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9TWVNWSU5JVH0gXAogICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1NZU1RFTUR9IFwKLSAgICAgICAgICAgICAke0FWQUhJX0dUS30gXAogICAgICAgICAgICAiCiAKICMgVGhlIGRpc3RybyBjaG9pY2UgZGV0ZXJtaW5lcyB3aGF0IGluaXQgc2NyaXB0cyBhcmUgaW5zdGFsbGVkCiBFWFRSQV9PRUNPTkZfU1lTVklOSVQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnLS13aXRoLWRpc3Rybz1kZWJpYW4nLCctLXdpdGgtZGlzdHJvPW5vbmUnLGQpfSIKIEVYVFJBX09FQ09ORl9TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJywnLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyJyxkKX0iCiAKLUFWQUhJX0dUSyA/PSAiLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtZ3RrMyIKIAogTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saW50bCIKIExERkxBR1NfYXBwZW5kX3VjbGludXgtdWNsaWJjID0gIiAtbGludGwiCkBAIC03MSw3ICs3NSw3IEBACiB9CiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLSAgICBleHBvcnQgR0lSX0VYVFJBX0xJQlNfUEFUSD0iJHtCfS9hdmFoaS1jb21tb24vLmxpYnM6JHtCfS9hdmFoaS1jbGllbnQvLmxpYnM6JHtCfS9hdmFoaS1nbGliLy5saWJzIgorICAgIGV4cG9ydCBHSVJfRVhUUkFfTElCU19QQVRIPSIke0J9L2F2YWhpLWdvYmplY3QvLmxpYnM6JHtCfS9hdmFoaS1jb21tb24vLmxpYnM6JHtCfS9hdmFoaS1jbGllbnQvLmxpYnM6JHtCfS9hdmFoaS1nbGliLy5saWJzIgogfQogCiBQQUNLQUdFUyA9KyAiYXZhaGktZGFlbW9uIGxpYmF2YWhpLWNvbW1vbiBsaWJhdmFoaS1jb3JlIGxpYmF2YWhpLWNsaWVudCBhdmFoaS1kbnNjb25mZCBsaWJhdmFoaS1nbGliIGxpYmF2YWhpLXVpIGF2YWhpLWF1dG9pcGQgYXZhaGktdXRpbHMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzIuYmIKaW5kZXggNjY3MDEwNi4uYmZhNjMwNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGlfMC42LjMyLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpXzAuNi4zMi5iYgpAQCAtMTIsNiArMTIsOCBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktZGFlbW9uL21haW4uYztlbmRsaW5lPTIxO21kNT05ZWU3NzM2OGM1NDA3YWY3N2NhYWVmMWIwNzI4NTk2OSBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jbGllbnQvY2xpZW50Lmg7ZW5kbGluZT0yMzttZDU9ZjRhYzc0MWEyNWM0ZjQzNDAzOWJhM2UxOGM4Njc0Y2YiCiAKK1NSQ19VUkkgKz0gImZpbGU6Ly9hdmFoaS1maXgtcmVzb3VyY2UtdW5hdmFpYWJsZS5wYXRjaCIKKwogU1JDX1VSSVttZDVzdW1dID0gIjIyYjVlNzA1ZDNlYWJiMzFkMjZmMmUxZTdiMDc0MDEzIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ1NDk5MTE4NWQ1MTRhMGFiYTU0ZWJlYjQwOGQ3NTc1YjYwZjU4MThhNzcyZTI4ZmEwZTE4Yjk4YmMxZGI0NTQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwMDEtY29uZmlndXJlLmFjLWluc3RhbGwtR3RrQnVpbGRlci1pbnRlcmZhY2UtZmlsZXMtZm9yLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwMDEtY29uZmlndXJlLmFjLWluc3RhbGwtR3RrQnVpbGRlci1pbnRlcmZhY2UtZmlsZXMtZm9yLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2NlZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1jb25maWd1cmUuYWMtaW5zdGFsbC1HdGtCdWlsZGVyLWludGVyZmFjZS1maWxlcy1mb3ItLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYTU5ZjEzZmFiMzFhNmUyNWJiMDNiMmMyYmMzYWVhNTc2Zjg1N2I2YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBTdW4sIDEyIEp1biAyMDE2IDE4OjMyOjQ5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogaW5zdGFsbCBHdGtCdWlsZGVyIGludGVyZmFjZSBmaWxlcyBmb3IgR1RLKzMKKyB0b28KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhZWJiNzE2Li40OGJkZjYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05NjUsNyArOTY1LDcgQEAgQUNfU1VCU1QoYXZhaGlfc29ja2V0KQorICMKKyAjIEF2YWhpIGludGVyZmFjZXMgZGlyCisgIworLWlmIHRlc3QgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyIgLW8gIngkSEFWRV9HVEsiID0gInh5ZXMiOyB0aGVuCisraWYgdGVzdCAieCRIQVZFX1BZVEhPTl9EQlVTIiA9ICJ4eWVzIiAtbyAieCRIQVZFX0dUSyIgPSAieHllcyIgLW8gIngkSEFWRV9HVEszIiA9ICJ4eWVzIjsgdGhlbgorIAlpbnRlcmZhY2VzZGlyPSIke2RhdGFkaXJ9LyR7UEFDS0FHRX0vaW50ZXJmYWNlcy8iCisgCUFDX1NVQlNUKGludGVyZmFjZXNkaXIpCisgZmkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGktZml4LXJlc291cmNlLXVuYXZhaWFibGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9hdmFoaS1maXgtcmVzb3VyY2UtdW5hdmFpYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJmZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGktZml4LXJlc291cmNlLXVuYXZhaWFibGUucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBmcm9tOgoraHR0cHM6Ly9naXRodWIuY29tL2V4cGVyaW1lbnRhbC1wbGF0Zm9ybS9wbGF0Zm9ybS1ob3N0bmFtZS1hdmFoaS9wdWxsLzkKKworSXQgc29tZXRpbWVzIGZhaWxzIHRvIHJ1biBhdmFoaSB3aXRoIGVycm9yOiAiQ291bGQgbm90IHJlY2VpdmUgcmV0dXJuIHZhbHVlCitmcm9tIGRhZW1vbiBwcm9jZXNzIi4gSXQgaGFzIHNhbWUgcm9vdCBjYXVzZSB3aXRoCitodHRwczovL2dpdGh1Yi5jb20vbHhjL2x4Yy9pc3N1ZXMvMjUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDUxNTA5ODMxMDJhZDVhZDQzZjBkYWUyMDNjYjMzMmMxNjhlYjVhNzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIaW5uZXJrIEhhYXJkdCA8aGFhcmR0QGluZm9ybWF0aW9uLWNvbnRyb2wuZGU+CitEYXRlOiBUaHUsIDE3IERlYyAyMDE1IDExOjUyOjE5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBgY2hyb290LmM6IGZvcmsoKSBmYWlsZWQ6IFJlc291cmNlIHRlbXBvcmFyaWx5CisgdW5hdmFpbGFibGVgIGFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vbHhjL2x4Yy9pc3N1ZXMvMjUuCisKKy0tLQorIGF2YWhpLWRhZW1vbi9hdmFoaS1kYWVtb24uY29uZiB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hdmFoaS1kYWVtb24vYXZhaGktZGFlbW9uLmNvbmYgYi9hdmFoaS1kYWVtb24vYXZhaGktZGFlbW9uLmNvbmYKK2luZGV4IDk1MTY2ZjguLjNkNWI3YTYgMTAwNjQ0CistLS0gYS9hdmFoaS1kYWVtb24vYXZhaGktZGFlbW9uLmNvbmYKKysrKyBiL2F2YWhpLWRhZW1vbi9hdmFoaS1kYWVtb24uY29uZgorQEAgLTY1LDQgKzY1LDMgQEAgcmxpbWl0LWRhdGE9NDE5NDMwNAorIHJsaW1pdC1mc2l6ZT0wCisgcmxpbWl0LW5vZmlsZT03NjgKKyBybGltaXQtc3RhY2s9NDE5NDMwNAorLXJsaW1pdC1ucHJvYz0zCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtMTI4Nl8yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTEyODZfMi5wYXRjaAppbmRleCBhMzFlYTgxLi41ZjVjYjBkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtMTI4Nl8yLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0xMjg2XzIucGF0Y2gKQEAgLTUsNiArNSw5IEBACiAgZmFpbHVyZSBkdWUgdG8gaW1wcm9wZXIgICAgICAgICAgICAgICAgICAgICAgICAgRE5BTUUgaGFuZGxpbmcgd2hlbiBwYXJzaW5nCiAgZmV0Y2ggcmVwbHkgbWVzc2FnZXMuICAgICAgICAgICAgICAgICAgICAgICAgIChDVkUtMjAxNi0xMjg2KSBbUlQgIzQxNzUzXQogCitDVkU6IENWRS0yMDE2LTEyODYKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKwogKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgMmRlODllZTlkZThjOGRhOWRjMTUzYTc1NGIwMmRjZGJiN2ZlMjM3NCkKIFNpZ25lZC1vZmYtYnk6IFNvbmEgU2FybWFkaSA8c29uYS5zYXJtYWRpQGVuZWEuY29tPgogLS0tCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtMjc3NS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yNzc1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTMwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtMjc3NS5wYXRjaApAQCAtMCwwICsxLDkwIEBACitGcm9tIDlkOGFiYThhNzc3ODcyMWFlMmNlZTZlNDY3MGE4ZTZiZTY1OTBiMDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJrIEFuZHJld3MgPG1hcmthQGlzYy5vcmc+CitEYXRlOiBXZWQsIDEyIE9jdCAyMDE2IDE5OjUyOjU5ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdCis0NDA2LiAgIFtzZWN1cml0eV0gICAgICBnZXRycnNldGJ5bmFtZSB3aXRoIGEgbm9uIGFic29sdXRlIG5hbWUgY291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGJ1ZyBpbiBsd3Jlc2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuYW1lZCB3aXRoIGx3cmVzIGNvbmZpZ3VyZWQgaWYgd2hlbiBjb21iaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIHNlYXJjaCBsaXN0IGVudHJ5IHRoZSByZXN1bHRpbmcgbmFtZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgdG9vIGxvbmcuIChDVkUtMjAxNi0yNzc1KSBbUlQgIzQyNjk0XQorCitCYWNrcG9ydCBjb21taXQgMzhjYzJkMTRlMjE4ZTUzNmUwMTAyZmE3MGRlZWY5OTQ2MTM1NDIzMiBmcm9tIHRoZQordjkuMTEuMF9wYXRjaCBicmFuY2guCisKK0NWRTogQ1ZFLTIwMTYtMjc3NQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiB6aGVuZ3J1b3FpbiA8emhlbmdycS5mbnN0QGNuLmZ1aml0c3UuY29tPgorCistLS0KKyBDSEFOR0VTICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKysrKworIGJpbi9uYW1lZC9sd2RncmJuLmMgICAgICAgICAgICAgIHwgMTYgKysrKysrKysrKy0tLS0tLQorIGJpbi90ZXN0cy9zeXN0ZW0vbHdyZXNkL2x3dGVzdC5jIHwgIDkgKysrKysrKystCisgMyBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKK2luZGV4IGQyZTMzNjAuLmQwYTlkMTIgMTAwNjQ0CistLS0gYS9DSEFOR0VTCisrKysgYi9DSEFOR0VTCitAQCAtMSwzICsxLDkgQEAKKys0NDA2LiAgIFtzZWN1cml0eV0gICAgICBnZXRycnNldGJ5bmFtZSB3aXRoIGEgbm9uIGFic29sdXRlIG5hbWUgY291bGQKKysgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBidWcgaW4gbHdyZXNkCisrICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5hbWVkIHdpdGggbHdyZXMgY29uZmlndXJlZCBpZiB3aGVuIGNvbWJpbmVkCisrICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIHNlYXJjaCBsaXN0IGVudHJ5IHRoZSByZXN1bHRpbmcgbmFtZSBpcworKyAgICAgICAgICAgICAgICAgICAgICAgIHRvbyBsb25nLiAoQ1ZFLTIwMTYtMjc3NSkgW1JUICM0MjY5NF0KKysKKyA0MzIyLiAgW3NlY3VyaXR5XSAgICAgIER1cGxpY2F0ZSBFRE5TIENPT0tJRSBvcHRpb25zIGluIGEgcmVzcG9uc2UgY291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuIChDVkUtMjAxNi0yMDg4KQorICAgICAgICAgICAgICAgICAgICAgICAgW1JUICM0MTgwOV0KK2RpZmYgLS1naXQgYS9iaW4vbmFtZWQvbHdkZ3Jibi5jIGIvYmluL25hbWVkL2x3ZGdyYm4uYworaW5kZXggM2U3YjE1Yi4uZTFlOWFkYyAxMDA2NDQKKy0tLSBhL2Jpbi9uYW1lZC9sd2RncmJuLmMKKysrKyBiL2Jpbi9uYW1lZC9sd2RncmJuLmMKK0BAIC00MDMsMTQgKzQwMywxOCBAQCBzdGFydF9sb29rdXAobnNfbHdkY2xpZW50X3QgKmNsaWVudCkgeworIAlJTlNJU1QoY2xpZW50LT5sb29rdXAgPT0gTlVMTCk7CisgCisgCWRuc19maXhlZG5hbWVfaW5pdCgmYWJzbmFtZSk7CistCXJlc3VsdCA9IG5zX2x3c2VhcmNoY3R4X2N1cnJlbnQoJmNsaWVudC0+c2VhcmNoY3R4LAorLQkJCQkJZG5zX2ZpeGVkbmFtZV9uYW1lKCZhYnNuYW1lKSk7CisrCisgCS8qCistCSAqIFRoaXMgd2lsbCByZXR1cm4gZmFpbHVyZSBpZiByZWxhdGl2ZSBuYW1lICsgc3VmZml4IGlzIHRvbyBsb25nLgorLQkgKiBJbiB0aGlzIGNhc2UsIGp1c3QgZ28gb24gdG8gdGhlIG5leHQgZW50cnkgaW4gdGhlIHNlYXJjaCBwYXRoLgorKyAgICAgICAgICogUGVyZm9ybSBzZWFyY2ggYWNyb3NzIGFsbCBzZWFyY2ggZG9tYWlucyB1bnRpbCBzdWNjZXNzCisrICAgICAgICAgKiBpcyByZXR1cm5lZC4gUmV0dXJuIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAJICovCistCWlmIChyZXN1bHQgIT0gSVNDX1JfU1VDQ0VTUykKKy0JCXN0YXJ0X2xvb2t1cChjbGllbnQpOworKyAgICAgICAgd2hpbGUgKG5zX2x3c2VhcmNoY3R4X2N1cnJlbnQoJmNsaWVudC0+c2VhcmNoY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGRuc19maXhlZG5hbWVfbmFtZSgmYWJzbmFtZSkpICE9IElTQ19SX1NVQ0NFU1MpIHsKKysgICAgICAgICAgICAgICAgaWYgKG5zX2x3c2VhcmNoY3R4X25leHQoJmNsaWVudC0+c2VhcmNoY3R4KSAhPSBJU0NfUl9TVUNDRVNTKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbnNfbHdkY2xpZW50X2Vycm9ycGt0c2VuZChjbGllbnQsIExXUkVTX1JfRkFJTFVSRSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisgCisgCXJlc3VsdCA9IGRuc19sb29rdXBfY3JlYXRlKGNtLT5tY3R4LAorIAkJCQkgICBkbnNfZml4ZWRuYW1lX25hbWUoJmFic25hbWUpLAorZGlmZiAtLWdpdCBhL2Jpbi90ZXN0cy9zeXN0ZW0vbHdyZXNkL2x3dGVzdC5jIGIvYmluL3Rlc3RzL3N5c3RlbS9sd3Jlc2QvbHd0ZXN0LmMKK2luZGV4IGFkOWI1NTEuLjNlYjRhNjYgMTAwNjQ0CistLS0gYS9iaW4vdGVzdHMvc3lzdGVtL2x3cmVzZC9sd3Rlc3QuYworKysrIGIvYmluL3Rlc3RzL3N5c3RlbS9sd3Jlc2QvbHd0ZXN0LmMKK0BAIC03NjgsNyArNzY4LDE0IEBAIG1haW4odm9pZCkgeworIAl0ZXN0X2dldHJyc2V0YnluYW1lKCJlLmV4YW1wbGUxLiIsIDEsIDIsIDEsIDEsIDEpOworIAl0ZXN0X2dldHJyc2V0YnluYW1lKCJlLmV4YW1wbGUxLiIsIDEsIDQ2LCAyLCAwLCAxKTsKKyAJdGVzdF9nZXRycnNldGJ5bmFtZSgiIiwgMSwgMSwgMCwgMCwgMCk7CistCisrICAgICAgICB0ZXN0X2dldHJyc2V0YnluYW1lKCIxMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjM0NTY3ODkiLCAxLCAxLCAwLCAwLCAwKTsKKysgCisgCWlmIChmYWlscyA9PSAwKQorIAkJcHJpbnRmKCJJOm9rXG4iKTsKKyAJcmV0dXJuIChmYWlscyk7CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yNzc2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTI3NzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM4YmY2MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yNzc2LnBhdGNoCkBAIC0wLDAgKzEsMTIzIEBACitGcm9tIDExNzExMTE2NTcwODE5NzA1ODVmOWYwZTAzYjQ3NjM1OGMzM2E2YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJrIEFuZHJld3MgPG1hcmthQGlzYy5vcmc+CitEYXRlOiBXZWQsIDEyIE9jdCAyMDE2IDIwOjM2OjUyICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIAorNDQ2Ny4gICBbc2VjdXJpdHldICAgICAgSXQgd2FzIHBvc3NpYmxlIHRvIHRyaWdnZXIgYW4gYXNzZXJ0aW9uIHdoZW4gCisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcgYSBtZXNzYWdlLiAoQ1ZFLTIwMTYtMjc3NikgW1JUICM0MzEzOV0KKworQmFja3BvcnQgY29tbWl0IDJiZDA5MjJjZjk5NWI5YWMyMDVmYzgzYmFmN2UyMjBiOTVjNmJmMTIgZnJvbSB0aGUKK3Y5LjExLjBfcGF0Y2ggYnJhbmNoLgorCitDVkU6IENWRS0yMDE2LTI3NzYKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogemhlbmdydW9xaW4gPHpoZW5ncnEuZm5zdEBjbi5mdWppdHN1LmNvbT4KKworLS0tCisgQ0hBTkdFUyAgICAgICAgICAgfCAgMyArKysKKyBsaWIvZG5zL21lc3NhZ2UuYyB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DSEFOR0VTIGIvQ0hBTkdFUworaW5kZXggZDBhOWQxMi4uNWM4YzYxYSAxMDA2NDQKKy0tLSBhL0NIQU5HRVMKKysrKyBiL0NIQU5HRVMKK0BAIC0xLDMgKzEsNiBAQAorKzQ0NjcuICAgW3NlY3VyaXR5XSAgICAgIEl0IHdhcyBwb3NzaWJsZSB0byB0cmlnZ2VyIGFuIGFzc2VydGlvbiB3aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nIGEgbWVzc2FnZS4gKENWRS0yMDE2LTI3NzYpIFtSVCAjNDMxMzldCisrCisgNDQwNi4gICBbc2VjdXJpdHldICAgICAgZ2V0cnJzZXRieW5hbWUgd2l0aCBhIG5vbiBhYnNvbHV0ZSBuYW1lIGNvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciBhbiBpbmZpbml0ZSByZWN1cnNpb24gYnVnIGluIGx3cmVzZAorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuYW1lZCB3aXRoIGx3cmVzIGNvbmZpZ3VyZWQgaWYgd2hlbiBjb21iaW5lZAorZGlmZiAtLWdpdCBhL2xpYi9kbnMvbWVzc2FnZS5jIGIvbGliL2Rucy9tZXNzYWdlLmMKK2luZGV4IDZiNWI0YmIuLmI3NGRjODEgMTAwNjQ0CistLS0gYS9saWIvZG5zL21lc3NhZ2UuYworKysrIGIvbGliL2Rucy9tZXNzYWdlLmMKK0BAIC0xNzU0LDcgKzE3NTQsNyBAQCBkbnNfbWVzc2FnZV9yZW5kZXJiZWdpbihkbnNfbWVzc2FnZV90ICptc2csIGRuc19jb21wcmVzc190ICpjY3R4LAorIAlpZiAoci5sZW5ndGggPCBETlNfTUVTU0FHRV9IRUFERVJMRU4pCisgCQlyZXR1cm4gKElTQ19SX05PU1BBQ0UpOworIAorLQlpZiAoci5sZW5ndGggPCBtc2ctPnJlc2VydmVkKQorKyAgICAgICAgaWYgKHIubGVuZ3RoIC0gRE5TX01FU1NBR0VfSEVBREVSTEVOIDwgbXNnLT5yZXNlcnZlZCkKKyAJCXJldHVybiAoSVNDX1JfTk9TUEFDRSk7CisgCisgCS8qCitAQCAtMTg5NSw4ICsxODk1LDI5IEBAIG5vcmVuZGVyX3JkYXRhc2V0KGNvbnN0IGRuc19yZGF0YXNldF90ICpyZGF0YXNldCwgdW5zaWduZWQgaW50IG9wdGlvbnMsCisgCisgCXJldHVybiAoSVNDX1RSVUUpOworIH0KKy0KKyAjZW5kaWYKKysKKytzdGF0aWMgaXNjX3Jlc3VsdF90CisrcmVuZGVyc2V0KGRuc19yZGF0YXNldF90ICpyZGF0YXNldCwgZG5zX25hbWVfdCAqb3duZXJfbmFtZSwKKysgICAgICAgICBkbnNfY29tcHJlc3NfdCAqY2N0eCwgaXNjX2J1ZmZlcl90ICp0YXJnZXQsCisrICAgICAgICAgdW5zaWduZWQgaW50IHJlc2VydmVkLCB1bnNpZ25lZCBpbnQgb3B0aW9ucywgdW5zaWduZWQgaW50ICpjb3VudHApCisreworKyAgICAgICBpc2NfcmVzdWx0X3QgcmVzdWx0OworKworKyAgICAgICAvKgorKyAgICAgICAgKiBTaHJpbmsgdGhlIHNwYWNlIGluIHRoZSBidWZmZXIgYnkgdGhlIHJlc2VydmVkIGFtb3VudC4KKysgICAgICAgICovCisrICAgICAgIGlmICh0YXJnZXQtPmxlbmd0aCAtIHRhcmdldC0+dXNlZCA8IHJlc2VydmVkKQorKyAgICAgICAgICAgICAgIHJldHVybiAoSVNDX1JfTk9TUEFDRSk7CisrCisrICAgICAgIHRhcmdldC0+bGVuZ3RoIC09IHJlc2VydmVkOworKyAgICAgICByZXN1bHQgPSBkbnNfcmRhdGFzZXRfdG93aXJlKHJkYXRhc2V0LCBvd25lcl9uYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjdHgsIHRhcmdldCwgb3B0aW9ucywgY291bnRwKTsKKysgICAgICAgdGFyZ2V0LT5sZW5ndGggKz0gcmVzZXJ2ZWQ7CisrCisrICAgICAgIHJldHVybiAocmVzdWx0KTsKKyt9CisrCisgaXNjX3Jlc3VsdF90CisgZG5zX21lc3NhZ2VfcmVuZGVyc2VjdGlvbihkbnNfbWVzc2FnZV90ICptc2csIGRuc19zZWN0aW9uX3Qgc2VjdGlvbmlkLAorIAkJCSAgdW5zaWduZWQgaW50IG9wdGlvbnMpCitAQCAtMTkzOSw2ICsxOTYwLDggQEAgZG5zX21lc3NhZ2VfcmVuZGVyc2VjdGlvbihkbnNfbWVzc2FnZV90ICptc2csIGRuc19zZWN0aW9uX3Qgc2VjdGlvbmlkLAorIAkvKgorIAkgKiBTaHJpbmsgdGhlIHNwYWNlIGluIHRoZSBidWZmZXIgYnkgdGhlIHJlc2VydmVkIGFtb3VudC4KKyAJICovCisrICAgICAgICBpZiAobXNnLT5idWZmZXItPmxlbmd0aCAtIG1zZy0+YnVmZmVyLT51c2VkIDwgbXNnLT5yZXNlcnZlZCkKKysgICAgICAgICAgICAgICAgcmV0dXJuIChJU0NfUl9OT1NQQUNFKTsKKyAJbXNnLT5idWZmZXItPmxlbmd0aCAtPSBtc2ctPnJlc2VydmVkOworIAorIAl0b3RhbCA9IDA7CitAQCAtMjIxNCw5ICsyMjM3LDggQEAgZG5zX21lc3NhZ2VfcmVuZGVyZW5kKGRuc19tZXNzYWdlX3QgKm1zZykgeworIAkJICogUmVuZGVyLgorIAkJICovCisgCQljb3VudCA9IDA7CistCQlyZXN1bHQgPSBkbnNfcmRhdGFzZXRfdG93aXJlKG1zZy0+b3B0LCBkbnNfcm9vdG5hbWUsCistCQkJCQkgICAgIG1zZy0+Y2N0eCwgbXNnLT5idWZmZXIsIDAsCistCQkJCQkgICAgICZjb3VudCk7CisrICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlbmRlcnNldChtc2ctPm9wdCwgZG5zX3Jvb3RuYW1lLCBtc2ctPmNjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPmJ1ZmZlciwgbXNnLT5yZXNlcnZlZCwgMCwgJmNvdW50KTsKKyAJCW1zZy0+Y291bnRzW0ROU19TRUNUSU9OX0FERElUSU9OQUxdICs9IGNvdW50OworIAkJaWYgKHJlc3VsdCAhPSBJU0NfUl9TVUNDRVNTKQorIAkJCXJldHVybiAocmVzdWx0KTsKK0BAIC0yMjMyLDkgKzIyNTQsOCBAQCBkbnNfbWVzc2FnZV9yZW5kZXJlbmQoZG5zX21lc3NhZ2VfdCAqbXNnKSB7CisgCQlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCisgCQkJcmV0dXJuIChyZXN1bHQpOworIAkJY291bnQgPSAwOworLQkJcmVzdWx0ID0gZG5zX3JkYXRhc2V0X3Rvd2lyZShtc2ctPnRzaWcsIG1zZy0+dHNpZ25hbWUsCistCQkJCQkgICAgIG1zZy0+Y2N0eCwgbXNnLT5idWZmZXIsIDAsCistCQkJCQkgICAgICZjb3VudCk7CisrICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlbmRlcnNldChtc2ctPnRzaWcsIG1zZy0+dHNpZ25hbWUsIG1zZy0+Y2N0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+YnVmZmVyLCBtc2ctPnJlc2VydmVkLCAwLCAmY291bnQpOworIAkJbXNnLT5jb3VudHNbRE5TX1NFQ1RJT05fQURESVRJT05BTF0gKz0gY291bnQ7CisgCQlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCisgCQkJcmV0dXJuIChyZXN1bHQpOworQEAgLTIyNTUsOSArMjI3Niw4IEBAIGRuc19tZXNzYWdlX3JlbmRlcmVuZChkbnNfbWVzc2FnZV90ICptc2cpIHsKKyAJCSAqIHRoZSBvd25lciBuYW1lIG9mIGEgU0lHKDApIGlzIGlycmVsZXZhbnQsIGFuZCB3aWxsIG5vdAorIAkJICogYmUgc2V0IGluIGEgbWVzc2FnZSBiZWluZyByZW5kZXJlZC4KKyAJCSAqLworLQkJcmVzdWx0ID0gZG5zX3JkYXRhc2V0X3Rvd2lyZShtc2ctPnNpZzAsIGRuc19yb290bmFtZSwKKy0JCQkJCSAgICAgbXNnLT5jY3R4LCBtc2ctPmJ1ZmZlciwgMCwKKy0JCQkJCSAgICAgJmNvdW50KTsKKysgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVuZGVyc2V0KG1zZy0+c2lnMCwgZG5zX3Jvb3RuYW1lLCBtc2ctPmNjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPmJ1ZmZlciwgbXNnLT5yZXNlcnZlZCwgMCwgJmNvdW50KTsKKyAJCW1zZy0+Y291bnRzW0ROU19TRUNUSU9OX0FERElUSU9OQUxdICs9IGNvdW50OworIAkJaWYgKHJlc3VsdCAhPSBJU0NfUl9TVUNDRVNTKQorIAkJCXJldHVybiAocmVzdWx0KTsKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoCmluZGV4IDY5ODlkNmQuLmIwMmVjYjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9kb250LXRlc3Qtb24taG9zdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZG9udC10ZXN0LW9uLWhvc3QucGF0Y2gKQEAgLTEsNiArMSw2IEBACiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAotU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CiAKIEluZGV4OiBiaW5kLTkuOS41L2Jpbi9NYWtlZmlsZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMy1QMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjMtUDMuYmIKaW5kZXggMWUzYTIwZi4uNGUyZTg1NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMy1QMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4zLVAzLmJiCkBAIC0yNSw2ICsyNSw4IEBACiAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMjg2XzEucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMTI4Nl8yLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTIwODgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMjc3NS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0yNzc2LnBhdGNoIFwKICAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiYmNmN2U3NzJiNjE2ZjcyNTk0MjBhM2VkYzVkZjM1MGEiCkBAIC01Niw3ICs1OCw3IEBACiAKIFBBUkFMTEVMX01BS0UgPSAiIgogCi1SREVQRU5EU18ke1BOfSA9ICJweXRob24tY29yZSIKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbjMtY29yZSIKIFJERVBFTkRTXyR7UE59LWRldiA9ICIiCiAKIFBBQ0tBR0VfQkVGT1JFX1BOICs9ICIke1BOfS11dGlscyIKQEAgLTgxLDcgKzgzLDcgQEAKIAlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQiCiAJaW5zdGFsbCAtbSA2NDQgJHtTfS9jb25mLyogIiR7RH0ke3N5c2NvbmZkaXJ9L2JpbmQvIgogCWluc3RhbGwgLW0gNzU1ICIke1N9L2luaXQuZCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iaW5kIgotCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbiwjISAvdXNyL2Jpbi9lbnYgcHl0aG9uLCcgJHtEfSR7c2JpbmRpcn0vZG5zc2VjLWNvdmVyYWdlICR7RH0ke3NiaW5kaXJ9L2Ruc3NlYy1jaGVja2RzCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhIC91c3IvYmluL3B5dGhvbjMsJyAke0R9JHtzYmluZGlyfS9kbnNzZWMtY292ZXJhZ2UgJHtEfSR7c2JpbmRpcn0vZG5zc2VjLWNoZWNrZHMKIAogCSMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgZmlsZXMKIAlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCmluZGV4IGE1MDgyMjkuLmVjZWZiN2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCkBAIC0xOCw2ICsxOCw3IEBACiAKIFNSQ19VUkkgPSAiXAogICAgICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvYmx1ZXRvb3RoL2JsdWV6LSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovL291dC1vZi10cmVlLnBhdGNoIFwKICAgICBmaWxlOi8vaW5pdCBcCiAgICAgZmlsZTovL3J1bi1wdGVzdCBcCiAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJycsICdmaWxlOi8vMDAwMS1BbGxvdy11c2luZy1vYmV4ZC13aXRob3V0LXN5c3RlbWQtaW4tdGhlLXVzZXItc2Vzc2lvLnBhdGNoJywgZCl9IFwKQEAgLTI1LDcgKzI2LDcgQEAKICIKIFMgPSAiJHtXT1JLRElSfS9ibHVlei0ke1BWfSIKIAotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGRpc3Ryb19mZWF0dXJlc19jaGVjayBwdGVzdAoraW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHB0ZXN0CiAKIEVYVFJBX09FQ09ORiA9ICJcCiAgIC0tZW5hYmxlLXRvb2xzIFwKQEAgLTYwLDE3ICs2MSwyNSBAQAogCSAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wcm9maWxlcy9pbnB1dC9pbnB1dC5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCiAJZmkKIAorICBpZiBbIC1mICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvYmx1ZXRvb3RoIF07IHRoZW4KKyAgICBzZWQgLWkgLWUgJ3MjQExJQkVYRUNESVJAIyR7bGliZXhlY2Rpcn0jZycgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC9ibHVldG9vdGgKKyAgZmkKKwogCSMgSW5zdGFsbCBkZXNpcmVkIHRvb2xzIHRoYXQgdXBzdHJlYW0gbGVhdmVzIGluIGJ1aWxkIGFyZWEKICAgICAgICAgZm9yIGYgaW4gJHtOT0lOU1RfVE9PTFN9IDsgZG8KIAkgICAgaW5zdGFsbCAtbSA3NTUgJHtCfS8kZiAke0R9LyR7YmluZGlyfQogCWRvbmUKKworICAgICAgICAjIFBhdGNoIHB5dGhvbiB0b29scyB0byB1c2UgUHl0aG9uIDM7IHRoZXkgc2hvdWxkIGJlIHNvdXJjZSBjb21wYXRpYmxlLCBidXQKKyAgICAgICAgIyBzdGlsbCByZWZlciB0byBQeXRob24gMiBpbiB0aGUgc2hlYmFuZworICAgICAgICBzZWQgLWkgLWUgJzFzLCMhLipweXRob24uKiwjISR7YmluZGlyfS9weXRob24zLCcgJHtEfSR7bGliZGlyfS9ibHVlei90ZXN0LyoKIH0KIAogQUxMT1dfRU1QVFlfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIxIgogUEFDS0FHRVMgPSsgImxpYmFzb3VuZC1tb2R1bGUtYmx1ZXogJHtQTn0tdGVzdHRvb2xzICR7UE59LW9iZXggJHtQTn0tbm9pbnN0LXRvb2xzIgogCiBGSUxFU19saWJhc291bmQtbW9kdWxlLWJsdWV6ID0gIiR7bGliZGlyfS9hbHNhLWxpYi9saWIqLnNvICR7ZGF0YWRpcn0vYWxzYSIKLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vYmx1ZXRvb3RoL3BsdWdpbnMvKi5zbyAke2Jhc2VfbGliZGlyfS91ZGV2LyAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvICR7c3lzdGVtZF91bml0ZGlyfS8gJHtkYXRhZGlyfS9kYnVzLTEiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyouc28gJHtzeXN0ZW1kX3VuaXRkaXJ9LyAke2RhdGFkaXJ9L2RidXMtMSIKIEZJTEVTXyR7UE59LWRldiArPSAiXAogICAke2xpYmRpcn0vYmx1ZXRvb3RoL3BsdWdpbnMvKi5sYSBcCiAgICR7bGliZGlyfS9hbHNhLWxpYi8qLmxhIFwKQEAgLTk0LDcgKzEwMyw3IEBACiAKIEZJTEVTXyR7UE59LW5vaW5zdC10b29scyA9ICIke0BnZXRfbm9pbnN0X3Rvb2xzX3BhdGhzKGQsIGJiLCBkLmdldFZhcignTk9JTlNUX1RPT0xTJywgVHJ1ZSkpfSIKIAotUkRFUEVORFNfJHtQTn0tdGVzdHRvb2xzICs9ICJweXRob24gcHl0aG9uLWRidXMgcHl0aG9uLXB5Z29iamVjdCIKK1JERVBFTkRTXyR7UE59LXRlc3R0b29scyArPSAicHl0aG9uMyBweXRob24zLWRidXMgcHl0aG9uMy1weWdvYmplY3QiCiAKIFNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJibHVldG9vdGguc2VydmljZSIKIElOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0iCkBAIC0xMDgsNSArMTE3LDUgQEAKIAogZG9faW5zdGFsbF9wdGVzdCgpIHsKICAgICAgICAgY3AgLXIgJHtCfS91bml0LyAke0R9JHtQVEVTVF9QQVRIfQotICAgICAgICBybSAke0R9JHtQVEVTVF9QQVRIfS91bml0LyouYyAke0R9JHtQVEVTVF9QQVRIfS91bml0LyoubworICAgICAgICBybSAtZiAke0R9JHtQVEVTVF9QQVRIfS91bml0LyoubwogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9pbml0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9pbml0CmluZGV4IDE2MDZhNWMuLjQ4OWU5YjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvaW5pdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2luaXQKQEAgLTMsNyArMyw3IEBACiBQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCiBERVNDPWJsdWV0b290aAogCi1EQUVNT049L3Vzci9saWIvYmx1ZXo1L2JsdWV0b290aC9ibHVldG9vdGhkCitEQUVNT049QExJQkVYRUNESVJAL2JsdWV0b290aC9ibHVldG9vdGhkCiAKICMgSWYgeW91IHdhbnQgdG8gYmUgaWdub3JlIGVycm9yIG9mICJvcmcuZnJlZWRlc2t0b3AuaG9zdG5hbWUxIiwKICMgcGxlYXNlIGVuYWJsZSBOT1BMVUdJTl9PUFRJT04uCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L291dC1vZi10cmVlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9vdXQtb2YtdHJlZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWU3OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9vdXQtb2YtdHJlZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitGcm9tIGVkNTViNDlhMjI2Y2EzOTA5ZjUyNDE2YmUyYWU1Y2UxYzVjYTJjYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogRnJpLCAyMiBBcHIgMjAxNiAxNTo0MDozNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5vYmV4ZDogYWRkIG1pc3NpbmcgbWtkaXIgaW4gYnVpbHRpbi5oIGdlbmVyYXRpb24KKworSW4gcGFyYWxsZWwgb3V0LW9mLXRyZWUgYnVpbGRzIGl0J3MgcG9zc2libGUgdGhhdCBvYmV4ZC9zcmMvYnVpbHRpbi5oIGlzCitnZW5lcmF0ZWQgYmVmb3JlIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGhhcyBiZWVuIGltcGxpY2l0bHkgY3JlYXRlZC4gU29sdmUgdGhpcyBieQorY3JlYXRpbmcgdGhlIGRpcmVjdG9yeSBiZWZvcmUgd3JpdGluZyBpbnRvIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKy0tLQorIE1ha2VmaWxlLm9iZXhkIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5vYmV4ZCBiL01ha2VmaWxlLm9iZXhkCitpbmRleCAyZTMzY2JjLi5jODI4NmYwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUub2JleGQKKysrKyBiL01ha2VmaWxlLm9iZXhkCitAQCAtMTA1LDIgKzEwNSwzIEBAIG9iZXhkL3NyYy9wbHVnaW4uJChPQkpFWFQpOiBvYmV4ZC9zcmMvYnVpbHRpbi5oCisgb2JleGQvc3JjL2J1aWx0aW4uaDogb2JleGQvc3JjL2dlbmJ1aWx0aW4gJChvYmV4ZF9idWlsdGluX3NvdXJjZXMpCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApICQoZGlyICRAKQorIAkkKEFNX1ZfR0VOKSQoc3JjZGlyKS9vYmV4ZC9zcmMvZ2VuYnVpbHRpbiAkKG9iZXhkX2J1aWx0aW5fbW9kdWxlcykgPiAkQAorLS0gCisyLjguMC5yYzMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjM3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjM3LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjIwZjc5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS4zNy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLXJlcXVpcmUgYmx1ZXo1LmluYwotCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiYmx1ZXo1IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzMxNzdlNTc0M2UyNGIyYjM3MzhmNzJiZTY0ZTNmZmIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzE0YmE5ZGRjYjAwNTU1MjIwNzM0NzdiOGZkOGJmMWRkZjVkMjE5ZTc1ZmRmZDQ2OTliN2UwY2U1MzUwZDZiMCIKLQotIyBub2luc3QgcHJvZ3JhbXMgaW4gTWFrZWZpbGUudG9vbHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gUkVBRExJTkUKLSMgc3VwcG9ydAotTk9JTlNUX1RPT0xTX1JFQURMSU5FID89ICIgXAotICAgIGF0dHJpYi9nYXR0dG9vbCBcCi0gICAgdG9vbHMvb2JleC1jbGllbnQtdG9vbCBcCi0gICAgdG9vbHMvb2JleC1zZXJ2ZXItdG9vbCBcCi0gICAgdG9vbHMvYmx1ZXRvb3RoLXBsYXllciBcCi0gICAgdG9vbHMvb2JleGN0bCBcCi0iCi0KLSMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIEVYUEVSSU1FTlRBTAotIyBzdXBwb3J0Ci1OT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID89ICIgXAotICAgIGVtdWxhdG9yL2J0dmlydCBcCi0gICAgZW11bGF0b3IvYjFlZSBcCi0gICAgZW11bGF0b3IvaGZwIFwKLSAgICB0b29scy8zZHNwIFwKLSAgICB0b29scy9tZ210LXRlc3RlciBcCi0gICAgdG9vbHMvZ2FwLXRlc3RlciBcCi0gICAgdG9vbHMvbDJjYXAtdGVzdGVyIFwKLSAgICB0b29scy9zY28tdGVzdGVyIFwKLSAgICB0b29scy9zbXAtdGVzdGVyIFwKLSAgICB0b29scy9oY2ktdGVzdGVyIFwKLSAgICB0b29scy9yZmNvbW0tdGVzdGVyIFwKLSAgICB0b29scy9iZGFkZHIgXAotICAgIHRvb2xzL2F2aW5mbyBcCi0gICAgdG9vbHMvYXZ0ZXN0IFwKLSAgICB0b29scy9zY290ZXN0IFwKLSAgICB0b29scy9hbXB0ZXN0IFwKLSAgICB0b29scy9od2RiIFwKLSAgICB0b29scy9oY2lldmVudG1hc2sgXAotICAgIHRvb2xzL2hjaXNlY2ZpbHRlciBcCi0gICAgdG9vbHMvYnRtZ210IFwKLSAgICB0b29scy9idGluZm8gXAotICAgIHRvb2xzL2J0YXR0YWNoIFwKLSAgICB0b29scy9idHNub29wIFwKLSAgICB0b29scy9idHByb3h5IFwKLSAgICB0b29scy9idGlvdGVzdCBcCi0gICAgdG9vbHMvbWNhcHRlc3QgXAotICAgIHRvb2xzL2NsdGVzdCBcCi0gICAgdG9vbHMvb29idGVzdCBcCi0gICAgdG9vbHMvc2VxMmJzZXEgXAotICAgIHRvb2xzL2liZWFjb24gXAotICAgIHRvb2xzL2J0Z2F0dC1jbGllbnQgXAotICAgIHRvb2xzL2J0Z2F0dC1zZXJ2ZXIgXAotICAgIHRvb2xzL2dhdHQtc2VydmljZSBcCi0gICAgcHJvZmlsZXMvaWFwL2lhcGQgXAotIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjQxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmFhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuNDEuYmIKQEAgLTAsMCArMSw1NSBAQAorcmVxdWlyZSBibHVlejUuaW5jCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJibHVlejUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMTgzNDFiMjE4ODY5ODEzMGFkYjczMjM2ZWU2OTI0NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkZjdkYzQ0NjI0OTRkYWQ0ZTYwYTI5NDMyNDBkNTg0ZjZlNzYwMjM1ZGNhNjRmNWYxMGViYTQ2ZGJhYjdmNWYwIgorCisjIG5vaW5zdCBwcm9ncmFtcyBpbiBNYWtlZmlsZS50b29scyB0aGF0IGFyZSBjb25kaXRpb25hbCBvbiBSRUFETElORQorIyBzdXBwb3J0CitOT0lOU1RfVE9PTFNfUkVBRExJTkUgPz0gIiBcCisgICAgYXR0cmliL2dhdHR0b29sIFwKKyAgICB0b29scy9vYmV4LWNsaWVudC10b29sIFwKKyAgICB0b29scy9vYmV4LXNlcnZlci10b29sIFwKKyAgICB0b29scy9ibHVldG9vdGgtcGxheWVyIFwKKyAgICB0b29scy9vYmV4Y3RsIFwKKyAgICB0b29scy9idG1nbXQgXAorIgorCisjIG5vaW5zdCBwcm9ncmFtcyBpbiBNYWtlZmlsZS50b29scyB0aGF0IGFyZSBjb25kaXRpb25hbCBvbiBFWFBFUklNRU5UQUwKKyMgc3VwcG9ydAorTk9JTlNUX1RPT0xTX0VYUEVSSU1FTlRBTCA/PSAiIFwKKyAgICBlbXVsYXRvci9idHZpcnQgXAorICAgIGVtdWxhdG9yL2IxZWUgXAorICAgIGVtdWxhdG9yL2hmcCBcCisgICAgdG9vbHMvM2RzcCBcCisgICAgdG9vbHMvbWdtdC10ZXN0ZXIgXAorICAgIHRvb2xzL2dhcC10ZXN0ZXIgXAorICAgIHRvb2xzL2wyY2FwLXRlc3RlciBcCisgICAgdG9vbHMvc2NvLXRlc3RlciBcCisgICAgdG9vbHMvc21wLXRlc3RlciBcCisgICAgdG9vbHMvaGNpLXRlc3RlciBcCisgICAgdG9vbHMvcmZjb21tLXRlc3RlciBcCisgICAgdG9vbHMvYmRhZGRyIFwKKyAgICB0b29scy9hdmluZm8gXAorICAgIHRvb2xzL2F2dGVzdCBcCisgICAgdG9vbHMvc2NvdGVzdCBcCisgICAgdG9vbHMvYW1wdGVzdCBcCisgICAgdG9vbHMvaHdkYiBcCisgICAgdG9vbHMvaGNpZXZlbnRtYXNrIFwKKyAgICB0b29scy9oY2lzZWNmaWx0ZXIgXAorICAgIHRvb2xzL2J0aW5mbyBcCisgICAgdG9vbHMvYnRhdHRhY2ggXAorICAgIHRvb2xzL2J0c25vb3AgXAorICAgIHRvb2xzL2J0cHJveHkgXAorICAgIHRvb2xzL2J0aW90ZXN0IFwKKyAgICB0b29scy9tY2FwdGVzdCBcCisgICAgdG9vbHMvY2x0ZXN0IFwKKyAgICB0b29scy9vb2J0ZXN0IFwKKyAgICB0b29scy9zZXEyYnNlcSBcCisgICAgdG9vbHMvaWJlYWNvbiBcCisgICAgdG9vbHMvYnRnYXR0LWNsaWVudCBcCisgICAgdG9vbHMvYnRnYXR0LXNlcnZlciBcCisgICAgdG9vbHMvZ2F0dC1zZXJ2aWNlIFwKKyAgICBwcm9maWxlcy9pYXAvaWFwZCBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1Qb3J0LXRvLUd0azMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1Qb3J0LXRvLUd0azMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZTliNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS8wMDAxLVBvcnQtdG8tR3RrMy5wYXRjaApAQCAtMCwwICsxLDI3NyBAQAorRnJvbSBhNTliMGZhYzAyZTc0YTk3MWFjM2YwOGJmMjhjMTdjZTM2MWE5NTI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMiBNYXIgMjAxNiAxNTo0Nzo0OSArMDIwMAorU3ViamVjdDogW1BBVENIXSBQb3J0IHRvIEd0azMKKworU29tZSB1bnVzZWQgKG9yIG5vdCB1c2VmdWwpIGNvZGUgd2FzIHJlbW92ZWQsIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIHN0YXkKK3RoZSBzYW1lLgorCitDb2RlIHN0aWxsIGNvbnRhaW5zIHF1aXRlIGEgZmV3IHVzZXMgb2YgZGVwcmVjYXRlZCBBUEkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgYXBwbGV0L2FnZW50LmMgICAgICAgIHwgIDMgKy0tCisgYXBwbGV0L21haW4uYyAgICAgICAgIHwgNDMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGFwcGxldC9zdGF0dXMuYyAgICAgICB8ICA4IC0tLS0tLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgIHwgIDMgKy0tCisgcHJvcGVydGllcy9ldGhlcm5ldC5jIHwgMTQgKysrKysrKy0tLS0tLS0KKyBwcm9wZXJ0aWVzL21haW4uYyAgICAgfCAgMiArLQorIHByb3BlcnRpZXMvd2lmaS5jICAgICB8IDEyICsrKysrKy0tLS0tLQorIDcgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hcHBsZXQvYWdlbnQuYyBiL2FwcGxldC9hZ2VudC5jCitpbmRleCA2NWJlZDA4Li4wNGZlODZhIDEwMDY0NAorLS0tIGEvYXBwbGV0L2FnZW50LmMKKysrKyBiL2FwcGxldC9hZ2VudC5jCitAQCAtMTI2LDcgKzEyNiw2IEBAIHN0YXRpYyB2b2lkIHJlcXVlc3RfaW5wdXRfZGlhbG9nKEdIYXNoVGFibGUgKnJlcXVlc3QsCisgCWd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1coZGlhbG9nKSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTsKKyAJZ3RrX3dpbmRvd19zZXRfa2VlcF9hYm92ZShHVEtfV0lORE9XKGRpYWxvZyksIFRSVUUpOworIAlndGtfd2luZG93X3NldF91cmdlbmN5X2hpbnQoR1RLX1dJTkRPVyhkaWFsb2cpLCBUUlVFKTsKKy0JZ3RrX2RpYWxvZ19zZXRfaGFzX3NlcGFyYXRvcihHVEtfRElBTE9HKGRpYWxvZyksIEZBTFNFKTsKKyAJaW5wdXQtPmRpYWxvZyA9IGRpYWxvZzsKKyAKKyAJZ3RrX2RpYWxvZ19hZGRfYnV0dG9uKEdUS19ESUFMT0coZGlhbG9nKSwKK0BAIC0xMzksNyArMTM4LDcgQEAgc3RhdGljIHZvaWQgcmVxdWVzdF9pbnB1dF9kaWFsb2coR0hhc2hUYWJsZSAqcmVxdWVzdCwKKyAJZ3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgNCk7CisgCWd0a190YWJsZV9zZXRfY29sX3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIDIwKTsKKyAJZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIodGFibGUpLCAxMik7CistCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhkaWFsb2cpLT52Ym94KSwgdGFibGUpOworKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYSAoR1RLX0RJQUxPRyhkaWFsb2cpKSksIHRhYmxlKTsKKyAKKyAJbGFiZWwgPSBndGtfbGFiZWxfbmV3KF8oIlBsZWFzZSBwcm92aWRlIHNvbWUgbmV0d29yayBpbmZvcm1hdGlvbjoiKSk7CisgCWd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAwLjAsIDAuMCk7CitkaWZmIC0tZ2l0IGEvYXBwbGV0L21haW4uYyBiL2FwcGxldC9tYWluLmMKK2luZGV4IGYxMmQzNzEuLmNkMTYyODUgMTAwNjQ0CistLS0gYS9hcHBsZXQvbWFpbi5jCisrKysgYi9hcHBsZXQvbWFpbi5jCitAQCAtMTU3LDQ2ICsxNTcsNiBAQCBzdGF0aWMgdm9pZCBuYW1lX293bmVyX2NoYW5nZWQoREJ1c0dQcm94eSAqcHJveHksIGNvbnN0IGNoYXIgKm5hbWUsCisgCX0KKyB9CisgCistc3RhdGljIHZvaWQgb3Blbl91cmkoR3RrV2luZG93ICpwYXJlbnQsIGNvbnN0IGNoYXIgKnVyaSkKKy17CistCUd0a1dpZGdldCAqZGlhbG9nOworLQlHZGtTY3JlZW4gKnNjcmVlbjsKKy0JR0Vycm9yICplcnJvciA9IE5VTEw7CistCWdjaGFyICpjbWRsaW5lOworLQorLQlzY3JlZW4gPSBndGtfd2luZG93X2dldF9zY3JlZW4ocGFyZW50KTsKKy0KKy0JY21kbGluZSA9IGdfc3RyY29uY2F0KCJ4ZGctb3BlbiAiLCB1cmksIE5VTEwpOworLQorLQlpZiAoZ2RrX3NwYXduX2NvbW1hbmRfbGluZV9vbl9zY3JlZW4oc2NyZWVuLAorLQkJCQljbWRsaW5lLCAmZXJyb3IpID09IEZBTFNFKSB7CistCQlkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KHBhcmVudCwKKy0JCQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULCBHVEtfTUVTU0FHRV9FUlJPUiwKKy0JCQkJR1RLX0JVVFRPTlNfQ0xPU0UsICIlcyIsIGVycm9yLT5tZXNzYWdlKTsKKy0JCWd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7CistCQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKKy0JCWdfZXJyb3JfZnJlZShlcnJvcik7CistCX0KKy0KKy0JZ19mcmVlKGNtZGxpbmUpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBhYm91dF91cmxfaG9vayhHdGtBYm91dERpYWxvZyAqZGlhbG9nLAorLQkJCQljb25zdCBnY2hhciAqdXJsLCBncG9pbnRlciBkYXRhKQorLXsKKy0Jb3Blbl91cmkoR1RLX1dJTkRPVyhkaWFsb2cpLCB1cmwpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBhYm91dF9lbWFpbF9ob29rKEd0a0Fib3V0RGlhbG9nICpkaWFsb2csCistCQkJCWNvbnN0IGdjaGFyICplbWFpbCwgZ3BvaW50ZXIgZGF0YSkKKy17CistCWdjaGFyICp1cmk7CistCistCXVyaSA9IGdfc3RyY29uY2F0KCJtYWlsdG86IiwgZW1haWwsIE5VTEwpOworLQlvcGVuX3VyaShHVEtfV0lORE9XKGRpYWxvZyksIHVyaSk7CistCWdfZnJlZSh1cmkpOworLX0KKy0KKyBzdGF0aWMgdm9pZCBhYm91dF9jYWxsYmFjayhHdGtXaWRnZXQgKml0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKKyB7CisgCWNvbnN0IGdjaGFyICphdXRob3JzW10gPSB7CitAQCAtMjA0LDkgKzE2NCw2IEBAIHN0YXRpYyB2b2lkIGFib3V0X2NhbGxiYWNrKEd0a1dpZGdldCAqaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorIAkJTlVMTAorIAl9OworIAorLQlndGtfYWJvdXRfZGlhbG9nX3NldF91cmxfaG9vayhhYm91dF91cmxfaG9vaywgTlVMTCwgTlVMTCk7CistCWd0a19hYm91dF9kaWFsb2dfc2V0X2VtYWlsX2hvb2soYWJvdXRfZW1haWxfaG9vaywgTlVMTCwgTlVMTCk7CistCisgCWd0a19zaG93X2Fib3V0X2RpYWxvZyhOVUxMLCAidmVyc2lvbiIsIFZFUlNJT04sCisgCQkJImNvcHlyaWdodCIsICJDb3B5cmlnaHQgXHhjMlx4YTkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiIsCisgCQkJImNvbW1lbnRzIiwgXygiQSBjb25uZWN0aW9uIG1hbmFnZXIgZm9yIHRoZSBHTk9NRSBkZXNrdG9wIiksCitkaWZmIC0tZ2l0IGEvYXBwbGV0L3N0YXR1cy5jIGIvYXBwbGV0L3N0YXR1cy5jCitpbmRleCBhZWQ2ZjFlLi4wMTVmZjI5IDEwMDY0NAorLS0tIGEvYXBwbGV0L3N0YXR1cy5jCisrKysgYi9hcHBsZXQvc3RhdHVzLmMKK0BAIC0xMDIsOCArMTAyLDYgQEAgc3RhdGljIHZvaWQgaWNvbl9hbmltYXRpb25fc3RhcnQoSWNvbkFuaW1hdGlvbiAqYW5pbWF0aW9uLAorIHsKKyAJYXZhaWxhYmxlID0gVFJVRTsKKyAKKy0JZ3RrX3N0YXR1c19pY29uX3NldF90b29sdGlwKHN0YXR1c2ljb24sIE5VTEwpOworLQorIAlhbmltYXRpb24tPnN0YXJ0ID0gc3RhcnQ7CisgCWFuaW1hdGlvbi0+ZW5kID0gKGVuZCA9PSAwKSA/IGFuaW1hdGlvbi0+Y291bnQgLSAxIDogZW5kOworIAorQEAgLTEyMCw4ICsxMTgsNiBAQCBzdGF0aWMgdm9pZCBpY29uX2FuaW1hdGlvbl9zdG9wKEljb25BbmltYXRpb24gKmFuaW1hdGlvbikKKyB7CisgCWF2YWlsYWJsZSA9IFRSVUU7CisgCistCWd0a19zdGF0dXNfaWNvbl9zZXRfdG9vbHRpcChzdGF0dXNpY29uLCBOVUxMKTsKKy0KKyAJaWYgKGFuaW1hdGlvbi0+aWQgPiAwKQorIAkJZ19zb3VyY2VfcmVtb3ZlKGFuaW1hdGlvbi0+aWQpOworIAorQEAgLTI1MSw4ICsyNDcsNiBAQCB2b2lkIHN0YXR1c191bmF2YWlsYWJsZSh2b2lkKQorIAlhdmFpbGFibGUgPSBGQUxTRTsKKyAKKyAJZ3RrX3N0YXR1c19pY29uX3NldF9mcm9tX3BpeGJ1ZihzdGF0dXNpY29uLCBwaXhidWZfbm90aWZpZXIpOworLQlndGtfc3RhdHVzX2ljb25fc2V0X3Rvb2x0aXAoc3RhdHVzaWNvbiwKKy0JCQkJIkNvbm5lY3Rpb24gTWFuYWdlciBkYWVtb24gaXMgbm90IHJ1bm5pbmciKTsKKyAKKyAJZ3RrX3N0YXR1c19pY29uX3NldF92aXNpYmxlKHN0YXR1c2ljb24sIFRSVUUpOworIH0KK0BAIC0yOTksNyArMjkzLDYgQEAgc3RhdGljIHZvaWQgc2V0X3JlYWR5KGdpbnQgc2lnbmFsKQorIAorIAlpZiAoc2lnbmFsIDwgMCkgeworIAkJZ3RrX3N0YXR1c19pY29uX3NldF9mcm9tX3BpeGJ1ZihzdGF0dXNpY29uLCBwaXhidWZfd2lyZWQpOworLQkJZ3RrX3N0YXR1c19pY29uX3NldF90b29sdGlwKHN0YXR1c2ljb24sIE5VTEwpOworIAkJcmV0dXJuOworIAl9CisgCitAQCAtMzExLDcgKzMwNCw2IEBAIHN0YXRpYyB2b2lkIHNldF9yZWFkeShnaW50IHNpZ25hbCkKKyAJCWluZGV4ID0gNDsKKyAKKyAJZ3RrX3N0YXR1c19pY29uX3NldF9mcm9tX3BpeGJ1ZihzdGF0dXNpY29uLCBwaXhidWZfc2lnbmFsW2luZGV4XSk7CistCWd0a19zdGF0dXNfaWNvbl9zZXRfdG9vbHRpcChzdGF0dXNpY29uLCBOVUxMKTsKKyB9CisgCisgc3RydWN0IHRpbWVvdXRfZGF0YSB7CitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiOTcyZTA3Li5hNGRhZDVkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01NSw4ICs1NSw3IEBAIEFDX1NVQlNUKERCVVNfTElCUykKKyBEQlVTX0JJTkRJTkdfVE9PTD0iZGJ1cy1iaW5kaW5nLXRvb2wiCisgQUNfU1VCU1QoREJVU19CSU5ESU5HX1RPT0wpCisgCistUEtHX0NIRUNLX01PRFVMRVMoR1RLLCBndGsrLTIuMCA+PSAyLjgsIGR1bW15PXllcywKKy0JCQkJQUNfTVNHX0VSUk9SKGd0aysgPj0gMi44IGlzIHJlcXVpcmVkKSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIGd0aystMy4wKQorIEFDX1NVQlNUKEdUS19DRkxBR1MpCisgQUNfU1VCU1QoR1RLX0xJQlMpCisgCitkaWZmIC0tZ2l0IGEvcHJvcGVydGllcy9ldGhlcm5ldC5jIGIvcHJvcGVydGllcy9ldGhlcm5ldC5jCitpbmRleCAzMWRiN2EwLi4wYjZiNDIzIDEwMDY0NAorLS0tIGEvcHJvcGVydGllcy9ldGhlcm5ldC5jCisrKysgYi9wcm9wZXJ0aWVzL2V0aGVybmV0LmMKK0BAIC04Miw3ICs4Miw3IEBAIHZvaWQgYWRkX2V0aGVybmV0X3N3aXRjaF9idXR0b24oR3RrV2lkZ2V0ICptYWluYm94LCBHdGtUcmVlSXRlciAqaXRlciwKKyAJZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIodmJveCksIDI0KTsKKyAJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpbmJveCksIHZib3gsIEZBTFNFLCBGQUxTRSwgMCk7CisgCistCXRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAxLCBUUlVFKTsKKysJdGFibGUgPSBndGtfdGFibGVfbmV3KDEsIDEsIEZBTFNFKTsKKyAJZ3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTApOworIAlndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCAxMCk7CisgCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCB0YWJsZSwgRkFMU0UsIEZBTFNFLCAwKTsKK0BAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBhZGRfZXRoZXJuZXRfc2VydmljZShHdGtXaWRnZXQgKm1haW5ib3gsIEd0a1RyZWVJdGVyICppdGVyLCBzdHJ1Y3QgY29uZmlnX2QKKyAJZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIodmJveCksIDI0KTsKKyAJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpbmJveCksIHZib3gsIEZBTFNFLCBGQUxTRSwgMCk7CisgCistCXRhYmxlID0gZ3RrX3RhYmxlX25ldyg1LCA1LCBUUlVFKTsKKysJdGFibGUgPSBndGtfdGFibGVfbmV3KDUsIDUsIEZBTFNFKTsKKyAJZ3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTApOworIAlndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCAxMCk7CisgCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCB0YWJsZSwgRkFMU0UsIEZBTFNFLCAwKTsKK0BAIC0xNDQsOSArMTQ0LDkgQEAgdm9pZCBhZGRfZXRoZXJuZXRfc2VydmljZShHdGtXaWRnZXQgKm1haW5ib3gsIEd0a1RyZWVJdGVyICppdGVyLCBzdHJ1Y3QgY29uZmlnX2QKKyAJbGFiZWwgPSBndGtfbGFiZWxfbmV3KF8oIkNvbmZpZ3VyYXRpb246IikpOworIAlndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIGxhYmVsLCAxLCAyLCAwLCAxKTsKKyAKKy0JY29tYm8gPSBndGtfY29tYm9fYm94X25ld190ZXh0KCk7CistCWd0a19jb21ib19ib3hfYXBwZW5kX3RleHQoR1RLX0NPTUJPX0JPWChjb21ibyksICJESENQIik7CistCWd0a19jb21ib19ib3hfYXBwZW5kX3RleHQoR1RLX0NPTUJPX0JPWChjb21ibyksICJNQU5VQUwiKTsKKysJY29tYm8gPSBndGtfY29tYm9fYm94X3RleHRfbmV3KCk7CisrCWd0a19jb21ib19ib3hfdGV4dF9hcHBlbmRfdGV4dChHVEtfQ09NQk9fQk9YX1RFWFQoY29tYm8pLCAiREhDUCIpOworKwlndGtfY29tYm9fYm94X3RleHRfYXBwZW5kX3RleHQoR1RLX0NPTUJPX0JPWF9URVhUKGNvbWJvKSwgIk1BTlVBTCIpOworIAlndGtfY29tYm9fYm94X3NldF9yb3dfc2VwYXJhdG9yX2Z1bmMoR1RLX0NPTUJPX0JPWChjb21ibyksCisgCQkJCQlzZXBhcmF0b3JfZnVuY3Rpb24sIE5VTEwsIE5VTEwpOworIAlndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIGNvbWJvLCAyLCA0LCAwLCAxKTsKK0BAIC0yMTksNyArMjE5LDcgQEAgdm9pZCB1cGRhdGVfZXRoZXJuZXRfaXB2NChzdHJ1Y3QgY29uZmlnX2RhdGEgKmRhdGEsIGd1aW50IHBvbGljeSkKKyAJY2FzZSBDT05OTUFOX1BPTElDWV9ESENQOgorIAkJZ3RrX2NvbWJvX2JveF9zZXRfYWN0aXZlKEdUS19DT01CT19CT1goY29tYm8pLCAwKTsKKyAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKy0JCQlndGtfZW50cnlfc2V0X2VkaXRhYmxlKEdUS19FTlRSWShlbnRyeVtpXSksIDApOworKwkJCWd0a19lZGl0YWJsZV9zZXRfZWRpdGFibGUoR1RLX0VESVRBQkxFKGVudHJ5W2ldKSwgMCk7CisgCQkJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGVudHJ5W2ldLCAwKTsKKyAJCQlndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5W2ldKSwgXygiIikpOworIAkJfQorQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIHVwZGF0ZV9ldGhlcm5ldF9pcHY0KHN0cnVjdCBjb25maWdfZGF0YSAqZGF0YSwgZ3VpbnQgcG9saWN5KQorIAljYXNlIENPTk5NQU5fUE9MSUNZX01BTlVBTDoKKyAJCWd0a19jb21ib19ib3hfc2V0X2FjdGl2ZShHVEtfQ09NQk9fQk9YKGNvbWJvKSwgMSk7CisgCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CistCQkJZ3RrX2VudHJ5X3NldF9lZGl0YWJsZShHVEtfRU5UUlkoZW50cnlbaV0pLCAxKTsKKysJCQlndGtfZWRpdGFibGVfc2V0X2VkaXRhYmxlKEdUS19FRElUQUJMRShlbnRyeVtpXSksIDEpOworIAkJCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShlbnRyeVtpXSwgMSk7CisgCQl9CisgCQlicmVhazsKK2RpZmYgLS1naXQgYS9wcm9wZXJ0aWVzL21haW4uYyBiL3Byb3BlcnRpZXMvbWFpbi5jCitpbmRleCBjMDVmNDQzLi42Zjc2MzYxIDEwMDY0NAorLS0tIGEvcHJvcGVydGllcy9tYWluLmMKKysrKyBiL3Byb3BlcnRpZXMvbWFpbi5jCitAQCAtNDI5LDcgKzQyOSw3IEBAIHN0YXRpYyBHdGtXaWRnZXQgKmNyZWF0ZV9pbnRlcmZhY2VzKEd0a1dpZGdldCAqd2luZG93KQorIAorIAlzY3JvbGxlZCA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOworIAlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZCksCistCQkJCUdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisrCQkJCUdUS19QT0xJQ1lfTkVWRVIsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKyAJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfc2hhZG93X3R5cGUoR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZCksCisgCQkJCQkJCUdUS19TSEFET1dfT1VUKTsKKyAJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIHNjcm9sbGVkLCBGQUxTRSwgVFJVRSwgMCk7CitkaWZmIC0tZ2l0IGEvcHJvcGVydGllcy93aWZpLmMgYi9wcm9wZXJ0aWVzL3dpZmkuYworaW5kZXggYmQzMjVlZi4uYTU4MjdlMCAxMDA2NDQKKy0tLSBhL3Byb3BlcnRpZXMvd2lmaS5jCisrKysgYi9wcm9wZXJ0aWVzL3dpZmkuYworQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIGFkZF93aWZpX3N3aXRjaF9idXR0b24oR3RrV2lkZ2V0ICptYWluYm94LCBHdGtUcmVlSXRlciAqaXRlciwKKyAJZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIodmJveCksIDI0KTsKKyAJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpbmJveCksIHZib3gsIEZBTFNFLCBGQUxTRSwgMCk7CisgCistCXRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAxLCBUUlVFKTsKKysJdGFibGUgPSBndGtfdGFibGVfbmV3KDEsIDEsIEZBTFNFKTsKKyAJZ3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTApOworIAlndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCAxMCk7CisgCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCB0YWJsZSwgRkFMU0UsIEZBTFNFLCAwKTsKK0BAIC0xODUsOSArMTg1LDkgQEAgc3RhdGljIHZvaWQgd2lmaV9pcGNvbmZpZyhHdGtXaWRnZXQgKnRhYmxlLCBzdHJ1Y3QgY29uZmlnX2RhdGEgKmRhdGEsIEd0a1RyZWVJdGUKKyAJZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBsYWJlbCwgMSwgMiwgMywgNCk7CisgCWRhdGEtPmlwdjQubGFiZWxbMF0gPSBsYWJlbDsKKyAKKy0JY29tYm8gPSBndGtfY29tYm9fYm94X25ld190ZXh0KCk7CistCWd0a19jb21ib19ib3hfYXBwZW5kX3RleHQoR1RLX0NPTUJPX0JPWChjb21ibyksICJESENQIik7CistCWd0a19jb21ib19ib3hfYXBwZW5kX3RleHQoR1RLX0NPTUJPX0JPWChjb21ibyksICJNYW51YWwiKTsKKysJY29tYm8gPSBndGtfY29tYm9fYm94X3RleHRfbmV3KCk7CisrCWd0a19jb21ib19ib3hfdGV4dF9hcHBlbmRfdGV4dChHVEtfQ09NQk9fQk9YX1RFWFQoY29tYm8pLCAiREhDUCIpOworKwlndGtfY29tYm9fYm94X3RleHRfYXBwZW5kX3RleHQoR1RLX0NPTUJPX0JPWF9URVhUKGNvbWJvKSwgIk1hbnVhbCIpOworIAorIAlndGtfY29tYm9fYm94X3NldF9yb3dfc2VwYXJhdG9yX2Z1bmMoR1RLX0NPTUJPX0JPWChjb21ibyksCisgCQkJc2VwYXJhdG9yX2Z1bmN0aW9uLCBOVUxMLCBOVUxMKTsKK0BAIC0zMzUsMTQgKzMzNSwxNCBAQCB2b2lkIHVwZGF0ZV93aWZpX2lwdjQoc3RydWN0IGNvbmZpZ19kYXRhICpkYXRhLCBndWludCBwb2xpY3kpCisgCWNhc2UgQ09OTk1BTl9QT0xJQ1lfREhDUDoKKyAJCWd0a19jb21ib19ib3hfc2V0X2FjdGl2ZShHVEtfQ09NQk9fQk9YKGNvbWJvKSwgMCk7CisgCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CistCQkJZ3RrX2VudHJ5X3NldF9lZGl0YWJsZShHVEtfRU5UUlkoZW50cnlbaV0pLCAwKTsKKysJCQlndGtfZWRpdGFibGVfc2V0X2VkaXRhYmxlKEdUS19FRElUQUJMRShlbnRyeVtpXSksIDApOworIAkJCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShlbnRyeVtpXSwgMCk7CisgCQl9CisgCQlicmVhazsKKyAJY2FzZSBDT05OTUFOX1BPTElDWV9NQU5VQUw6CisgCQlndGtfY29tYm9fYm94X3NldF9hY3RpdmUoR1RLX0NPTUJPX0JPWChjb21ibyksIDEpOworIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworLQkJCWd0a19lbnRyeV9zZXRfZWRpdGFibGUoR1RLX0VOVFJZKGVudHJ5W2ldKSwgMSk7CisrCQkJZ3RrX2VkaXRhYmxlX3NldF9lZGl0YWJsZShHVEtfRURJVEFCTEUoZW50cnlbaV0pLCAxKTsKKyAJCQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoZW50cnlbaV0sIDEpOworIAkJfQorIAkJYnJlYWs7CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZV8wLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiCmluZGV4IDdiODc1ZjAuLmE1NmJkMzcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZV8wLjcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lXzAuNy5iYgpAQCAtNiw3ICs2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Byb3BlcnRpZXMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTUwYzc3YzgxODcxMzA4YjAzM2FiN2ExNTA0NjI2YWZiIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb25ubWFuLWRidXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1kZTZiNDg1YzBlNzE3YTAyMzY0MDJkMjIwMTg3NzE3YSIKIAotREVQRU5EUyA9ICJndGsrIGRidXMtZ2xpYiBpbnRsdG9vbC1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUiCitERVBFTkRTID0gImd0ayszIGRidXMtZ2xpYiBkYnVzLWdsaWItbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKIAogIyAwLjcgdGFnCiBTUkNSRVYgPSAiY2YzYzMyNWIyM2RhZTg0M2M1NDk5YTExMzU5MWNmYmM5OGFjYjE0MyIKQEAgLTE1LDEyICsxNSwxMyBAQAogICAgICAgICAgICBmaWxlOi8vbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vaW1hZ2VzLyogXAogICAgICAgICAgICBmaWxlOi8vY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVBvcnQtdG8tR3RrMy5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ3RrLWljb24tY2FjaGUgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCitBTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLM0RJU1RST0ZFQVRVUkVTfSIKIAogUkRFUEVORFNfJHtQTn0gPSAiY29ubm1hbiIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMKaW5kZXggYzM3NTI1MS4uMzVhN2VlZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4uaW5jCkBAIC0yNiwxMSArMjYsOSBAQAogICAgIC0tZW5hYmxlLWxvb3BiYWNrIFwKICAgICAtLWVuYWJsZS1ldGhlcm5ldCBcCiAgICAgLS1lbmFibGUtdG9vbHMgXAotICAgIC0tZW5hYmxlLXRlc3QgXAogICAgIC0tZGlzYWJsZS1wb2xraXQgXAogICAgIC0tZW5hYmxlLWNsaWVudCBcCiAiCi1DRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCiAKIFBBQ0tBR0VDT05GSUcgPz89ICJ3aXNwciBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywnc3lzdGVtZCcsICcnLCBkKX0gXApAQCAtMTQwLDEwICsxMzgsNyBAQAogRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3dpc3ByIgogUkRFUEVORFNfJHtQTn0tdG9vbHMgPSIke1BOfSIKIAotRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9LyotdGVzdCAke2xpYmRpcn0vJHtCUE59L3Rlc3QvKiIKLVJERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QgcHl0aG9uLXRleHR1dGlscyBweXRob24tc3VicHJvY2VzcyBweXRob24tZmNudGwgcHl0aG9uLW5ldGNsaWVudCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke1BOfSBcCi0iCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2JpbmRpcn0vKi10ZXN0IgogCiBGSUxFU18ke1BOfS1jbGllbnQgPSAiJHtiaW5kaXJ9L2Nvbm5tYW5jdGwiCiBSREVQRU5EU18ke1BOfS1jbGllbnQgPSIke1BOfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLURldGVjdC1iYWNrdHJhY2UtQVBJLWF2YWlsYWJpbGl0eS1iZWZvcmUtdXNpbmctaXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1EZXRlY3QtYmFja3RyYWNlLUFQSS1hdmFpbGFiaWxpdHktYmVmb3JlLXVzaW5nLWl0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGM2ZmQ2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLURldGVjdC1iYWNrdHJhY2UtQVBJLWF2YWlsYWJpbGl0eS1iZWZvcmUtdXNpbmctaXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi1Gcm9tIDAwZDQ0NDczOTU3MjVhYmFhNjUxZTEyZWQ0MDA5NTA4MWUwNDAxMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogU3VuLCAxMyBTZXAgMjAxNSAxMzoyMjowMSAtMDcwMAotU3ViamVjdDogW1BBVENIIDEvM10gRGV0ZWN0IGJhY2t0cmFjZSgpIEFQSSBhdmFpbGFiaWxpdHkgYmVmb3JlIHVzaW5nIGl0Ci0KLUMgbGlicmFyaWVzIGJlc2lkZXMgZ2xpYmMgZG8gbm90IGhhdmUgYmFja3RyYWNlKCkgaW1wbGVtZW50ZWQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSBjb25maWd1cmUuYWMgfCAyICsrCi0gc3JjL2xvZy5jICAgIHwgNSArKy0tLQotIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA2OWMwZWViLi45MDA5OWYyIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xNzEsNiArMTcxLDggQEAgZmkKLSBBTV9DT05ESVRJT05BTChQUFRQLCB0ZXN0ICIke2VuYWJsZV9wcHRwfSIgIT0gIm5vIikKLSBBTV9DT05ESVRJT05BTChQUFRQX0JVSUxUSU4sIHRlc3QgIiR7ZW5hYmxlX3BwdHB9IiA9ICJidWlsdGluIikKLSAKLStBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKLSsKLSBBQ19DSEVDS19IRUFERVJTKHJlc29sdi5oLCBkdW1teT15ZXMsCi0gCUFDX01TR19FUlJPUihyZXNvbHZlciBoZWFkZXIgZmlsZXMgYXJlIHJlcXVpcmVkKSkKLSBBQ19DSEVDS19MSUIocmVzb2x2LCBuc19pbml0cGFyc2UsIGR1bW15PXllcywgWwotZGlmZiAtLWdpdCBhL3NyYy9sb2cuYyBiL3NyYy9sb2cuYwotaW5kZXggYTY5M2JkMC4uNWI0MGMxZiAxMDA2NDQKLS0tLSBhL3NyYy9sb2cuYwotKysrIGIvc3JjL2xvZy5jCi1AQCAtMzAsNyArMzAsNiBAQAotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN5c2xvZy5oPgotLSNpbmNsdWRlIDxleGVjaW5mby5oPgotICNpbmNsdWRlIDxkbGZjbi5oPgotIAotICNpbmNsdWRlICJjb25ubWFuLmgiCi1AQCAtMjE1LDkgKzIxNCw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhY2t0cmFjZSh1bnNpZ25lZCBpbnQgb2Zmc2V0KQotIHN0YXRpYyB2b2lkIHNpZ25hbF9oYW5kbGVyKGludCBzaWdubykKLSB7Ci0gCWNvbm5tYW5fZXJyb3IoIkFib3J0aW5nIChzaWduYWwgJWQpIFslc10iLCBzaWdubywgcHJvZ3JhbV9leGVjKTsKLS0KLSsjaWZkZWYgSEFWRV9FWEVDSU5GT19ICi0gCXByaW50X2JhY2t0cmFjZSgyKTsKLS0KLSsjZW5kaWYgLyogSEFWRV9FWEVDSU5GT19IICovCi0gCWV4aXQoRVhJVF9GQUlMVVJFKTsKLSB9Ci0gCi0tLSAKLTIuNS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLWlwdGFibGVzLUFkZC1taXNzaW5nLWZ1bmN0aW9uLWl0ZW0tb2YteHRhYmxlcy10by1tYXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1pcHRhYmxlcy1BZGQtbWlzc2luZy1mdW5jdGlvbi1pdGVtLW9mLXh0YWJsZXMtdG8tbWF0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjVhM2U0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLWlwdGFibGVzLUFkZC1taXNzaW5nLWZ1bmN0aW9uLWl0ZW0tb2YteHRhYmxlcy10by1tYXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1Gcm9tIGFjZWEwOGEwZTQyMzRhNGMxYTg3YmVkYzA4N2M3M2ZmMzZkZTBjN2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBXdSBaaGVuZyA8d3UuemhlbmdAaW50ZWwuY29tPgotRGF0ZTogVGh1LCAyOCBKYW4gMjAxNiAxODowNDoxNyArMDgwMAotU3ViamVjdDogW1BBVENIXSBpcHRhYmxlczogQWRkIG1pc3NpbmcgZnVuY3Rpb24gaXRlbSBvZiB4dGFibGVzIHRvIG1hdGNoCi0gaXB0YWJsZXMgMS42Ci0KLVRoZSBzdHJ1Y3Qgb2YgeHRhYmxlc19nbG9iYWxzIGhhcyBiZWVuIG1vZGlmaWVkIGluIGlwdGFibGVzIDEuNi4KLUlmIGNvbm5tYW4gcnVucyB3aXRoIGlwdGFibGVzIDEuNiwgaXQgY2FuIGNyYXNoLgotCi1Qcm9ncmFtIHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHQuCi0weDAwMDAwMDAwIGluID8/ICgpCi0weGI3ZGVhODljIGluIHh0YWJsZXNfZmluZF90YXJnZXQgKCkgZnJvbSAvdXNyL2xpYi9saWJ4dGFibGVzLnNvLjExCi0weGI3ZGVhYzFjIGluID8/ICgpIGZyb20gL3Vzci9saWIvbGlieHRhYmxlcy5zby4xMQotMHhiN2RlYTc5MyBpbiB4dGFibGVzX2ZpbmRfdGFyZ2V0ICgpIGZyb20gL3Vzci9saWIvbGlieHRhYmxlcy5zby4xMQotCi1UaGUgdGhlIG1pc3NpbmcgZnVuY3Rpb24gaXRlbSBvZiB4dGFibGVzIGlzIGFkZGVkIHRvIHh0YWJsZXNfZ2xvYmFscy4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFd1IFpoZW5nIDx3dS56aGVuZ0BpbnRlbC5jb20+Ci0tLS0KLSBzcmMvaXB0YWJsZXMuYyB8IDMgKysrCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL2lwdGFibGVzLmMgYi9zcmMvaXB0YWJsZXMuYwotaW5kZXggYmMwYzc2My4uNWVmNzU3YSAxMDA2NDQKLS0tLSBhL3NyYy9pcHRhYmxlcy5jCi0rKysgYi9zcmMvaXB0YWJsZXMuYwotQEAgLTE1NjYsNiArMTU2Niw5IEBAIHN0cnVjdCB4dGFibGVzX2dsb2JhbHMgaXB0YWJsZXNfZ2xvYmFscyA9IHsKLSAJLm9wdGlvbl9vZmZzZXQgPSAwLAotIAkub3B0cyA9IGlwdGFibGVzX29wdHMsCi0gCS5vcmlnX29wdHMgPSBpcHRhYmxlc19vcHRzLAotKyNpZiBYVEFCTEVTX1ZFUlNJT05fQ09ERSA+IDEwCi0rCS5jb21wYXRfcmV2ID0geHRhYmxlc19jb21wYXRpYmxlX3JldmlzaW9uLAotKyNlbmRpZgotIH07Ci0gCi0gc3RhdGljIHN0cnVjdCB4dGFibGVzX3RhcmdldCAqcHJlcGFyZV90YXJnZXQoc3RydWN0IGNvbm5tYW5faXB0YWJsZXMgKnRhYmxlLAotLS0gCi0yLjQuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMy1GaXgtaGVhZGVyLWluY2x1c2lvbnMtZm9yLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMy1GaXgtaGVhZGVyLWluY2x1c2lvbnMtZm9yLW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmM2ODMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDMtRml4LWhlYWRlci1pbmNsdXNpb25zLWZvci1tdXNsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLUZyb20gNjc2NDVhMDFhMmYzZjUyNjI1ZDhkZDc3ZjI4MTFhOWUyMTNlMWI3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBTdW4sIDEzIFNlcCAyMDE1IDEzOjI4OjIwIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBoZWFkZXIgaW5jbHVzaW9ucyBmb3IgbXVzbAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIGd3ZWIvZ3Jlc29sdi5jICAgICAgICB8IDEgKwotIHBsdWdpbnMvd2lmaS5jICAgICAgICB8IDMgKy0tCi0gc3JjL3RldGhlcmluZy5jICAgICAgIHwgMiAtLQotIHRvb2xzL2RoY3AtdGVzdC5jICAgICB8IDEgLQotIHRvb2xzL2Ruc3Byb3h5LXRlc3QuYyB8IDEgKwotIDUgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1JbmRleDogY29ubm1hbi0xLjMwL2d3ZWIvZ3Jlc29sdi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gY29ubm1hbi0xLjMwLm9yaWcvZ3dlYi9ncmVzb2x2LmMKLSsrKyBjb25ubWFuLTEuMzAvZ3dlYi9ncmVzb2x2LmMKLUBAIC0yOCw2ICsyOCw3IEBACi0gI2luY2x1ZGUgPHN0ZGFyZy5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHJlc29sdi5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotSW5kZXg6IGNvbm5tYW4tMS4zMC9wbHVnaW5zL3dpZmkuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGNvbm5tYW4tMS4zMC5vcmlnL3BsdWdpbnMvd2lmaS5jCi0rKysgY29ubm1hbi0xLjMwL3BsdWdpbnMvd2lmaS5jCi1AQCAtMzAsOSArMzAsOCBAQAotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0gI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLS0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0tI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0gI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgotKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotIAotICNpZm5kZWYgSUZGX0xPV0VSX1VQCi0gI2RlZmluZSBJRkZfTE9XRVJfVVAJMHgxMDAwMAotSW5kZXg6IGNvbm5tYW4tMS4zMC9zcmMvdGV0aGVyaW5nLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBjb25ubWFuLTEuMzAub3JpZy9zcmMvdGV0aGVyaW5nLmMKLSsrKyBjb25ubWFuLTEuMzAvc3JjL3RldGhlcmluZy5jCi1AQCAtMzEsMTAgKzMxLDggQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0gI2luY2x1ZGUgPG5ldC9pZi5oPgotLSNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxmY250bC5oPgotLSNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KLSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KLSAKLUluZGV4OiBjb25ubWFuLTEuMzAvdG9vbHMvZGhjcC10ZXN0LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBjb25ubWFuLTEuMzAub3JpZy90b29scy9kaGNwLXRlc3QuYwotKysrIGNvbm5tYW4tMS4zMC90b29scy9kaGNwLXRlc3QuYwotQEAgLTMzLDcgKzMzLDYgQEAKLSAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0gI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotICNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KLS0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0gCi0gI2luY2x1ZGUgPGdkaGNwL2dkaGNwLmg+Ci0gCi1JbmRleDogY29ubm1hbi0xLjMwL3Rvb2xzL2Ruc3Byb3h5LXRlc3QuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGNvbm5tYW4tMS4zMC5vcmlnL3Rvb2xzL2Ruc3Byb3h5LXRlc3QuYwotKysrIGNvbm5tYW4tMS4zMC90b29scy9kbnNwcm94eS10ZXN0LmMKLUBAIC0yNyw2ICsyNyw3IEBACi0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotSW5kZXg6IGNvbm5tYW4tMS4zMC9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBjb25ubWFuLTEuMzAub3JpZy9jb25maWd1cmUuYWMKLSsrKyBjb25ubWFuLTEuMzAvY29uZmlndXJlLmFjCi1AQCAtMTczLDYgKzE3Myw4IEBAIEFNX0NPTkRJVElPTkFMKFBQVFBfQlVJTFRJTiwgdGVzdCAiJHtlbmEKLSAKLSBBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKLSAKLStBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgaW42X3BrdGluZm8uaXBpNl9hZGRyXSwgW10sIFtdLCBbWyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0pCi0rCi0gQUNfQ0hFQ0tfSEVBREVSUyhyZXNvbHYuaCwgZHVtbXk9eWVzLAotIAlBQ19NU0dfRVJST1IocmVzb2x2ZXIgaGVhZGVyIGZpbGVzIGFyZSByZXF1aXJlZCkpCi0gQUNfQ0hFQ0tfTElCKHJlc29sdiwgbnNfaW5pdHBhcnNlLCBkdW1teT15ZXMsIFsKLUluZGV4OiBjb25ubWFuLTEuMzAvZ2RoY3AvY29tbW9uLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBjb25ubWFuLTEuMzAub3JpZy9nZGhjcC9jb21tb24uaAotKysrIGNvbm5tYW4tMS4zMC9nZGhjcC9jb21tb24uaAotQEAgLTE5LDYgKzE5LDcgQEAKLSAgKgotICAqLwotIAotKyNpbmNsdWRlIDxjb25maWcuaD4KLSAjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgotIAotQEAgLTE3MCw4ICsxNzEsOCBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBkaGNwX29wdGlvbl9sZW5ndGhzCi0gCVtPUFRJT05fVTMyXQk9IDQsCi0gfTsKLSAKLS0vKiBhbHJlYWR5IGRlZmluZWQgd2l0aGluIG5ldGluZXQvaW4uaCBpZiB1c2luZyBHTlUgY29tcGlsZXIgKi8KLS0jaWZuZGVmIF9fVVNFX0dOVQotKy8qIGFscmVhZHkgZGVmaW5lZCB3aXRoaW4gbmV0aW5ldC9pbi5oIGlmIHVzaW5nIEdOVSBvciBtdXNsIGxpYmMgKi8KLSsjaWZuZGVmIEhBVkVfU1RSVUNUX0lONl9QS1RJTkZPX0lQSTZfQUREUgotIHN0cnVjdCBpbjZfcGt0aW5mbyB7Ci0gCXN0cnVjdCBpbjZfYWRkciBpcGk2X2FkZHI7ICAvKiBzcmMvZHN0IElQdjYgYWRkcmVzcyAqLwotIAl1bnNpZ25lZCBpbnQgaXBpNl9pZmluZGV4OyAgLyogc2VuZC9yZWN2IGludGVyZmFjZSBpbmRleCAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2luY2x1ZGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2luY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2IxODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSw0MjMgQEAKK0ZpeCB2YXJpb3VzIGlzc3VlcyB3aGljaCBjYXVzZSBwcm9ibGVtcyB1bmRlciBtdXNsLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSA2MzA1MTZiY2MwMjMzYjA0N2Y2NTY2NWMwMDMyMDFiYTZlNzc0NTNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgOSBBdWcgMjAxNiAxNjoyMjozNiArMDEwMAorU3ViamVjdDogW1BBVENIIDEvM10gVXNlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworCitJbnN0ZWFkIG9mIHVzaW5nICNkZWZpbmUgX0dOVV9TT1VSQ0UgaW4gc29tZSBzb3VyY2UgZmlsZXMgd2hpY2ggY2F1c2VzIHByb2JsZW1zCit3aGVuIGJ1aWxkaW5nIHdpdGggbXVzbCBhcyBtb3JlIGZpbGVzIG5lZWQgdGhlIGRlZmluZSwgc2ltcGx5IHVzZQorQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGluIGNvbmZpZ3VyZS5hYyB0byBnZXQgaXQgZGVmaW5lZCBnbG9iYWxseS4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICB8IDEgKworIGdkaGNwL2NsaWVudC5jICAgICB8IDEgLQorIHBsdWdpbnMvdGlzdC5jICAgICB8IDEgLQorIHNyYy9iYWNrdHJhY2UuYyAgICB8IDEgLQorIHNyYy9pbmV0LmMgICAgICAgICB8IDEgLQorIHNyYy9sb2cuYyAgICAgICAgICB8IDEgLQorIHNyYy9udHAuYyAgICAgICAgICB8IDEgLQorIHNyYy9yZXNvbHZlci5jICAgICB8IDEgLQorIHNyYy9yZmtpbGwuYyAgICAgICB8IDEgLQorIHNyYy9zdGF0cy5jICAgICAgICB8IDEgLQorIHNyYy90aW1lem9uZS5jICAgICB8IDEgLQorIHRvb2xzL3N0YXRzLXRvb2wuYyB8IDEgLQorIHRvb2xzL3RhcC10ZXN0LmMgICB8IDEgLQorIHRvb2xzL3dpc3ByLmMgICAgICB8IDEgLQorIHZwbi9wbHVnaW5zL3Zwbi5jICB8IDEgLQorIDE1IGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNmU2NmFiMy4uYmFjZjVlYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjAsNiArMjAsNyBAQCBBQ19TVUJTVChhYnNfdG9wX3NyY2RpcikKKyBBQ19TVUJTVChhYnNfdG9wX2J1aWxkZGlyKQorIAorIEFDX0xBTkdfQworK0FDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIAorIEFDX1BST0dfQ0MKKyBBTV9QUk9HX0NDX0NfTworZGlmZiAtLWdpdCBhL2dkaGNwL2NsaWVudC5jIGIvZ2RoY3AvY2xpZW50LmMKK2luZGV4IGZiYjQwYWIuLjNhZWIwODkgMTAwNjQ0CistLS0gYS9nZGhjcC9jbGllbnQuYworKysrIGIvZ2RoY3AvY2xpZW50LmMKK0BAIC0yMyw3ICsyMyw2IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitkaWZmIC0tZ2l0IGEvcGx1Z2lucy90aXN0LmMgYi9wbHVnaW5zL3Rpc3QuYworaW5kZXggYWQ1ZWY3OS4uY2MyODAwYSAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvdGlzdC5jCisrKysgYi9wbHVnaW5zL3Rpc3QuYworQEAgLTIzLDcgKzIzLDYgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorZGlmZiAtLWdpdCBhL3NyYy9iYWNrdHJhY2UuYyBiL3NyYy9iYWNrdHJhY2UuYworaW5kZXggNmE2NmMwYS4uNGRiZGRhOCAxMDA2NDQKKy0tLSBhL3NyYy9iYWNrdHJhY2UuYworKysrIGIvc3JjL2JhY2t0cmFjZS5jCitAQCAtMjQsNyArMjQsNiBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK2RpZmYgLS1naXQgYS9zcmMvaW5ldC5jIGIvc3JjL2luZXQuYworaW5kZXggNjlkZWQxOS4uODFkOTJjMiAxMDA2NDQKKy0tLSBhL3NyYy9pbmV0LmMKKysrKyBiL3NyYy9pbmV0LmMKK0BAIC0yNSw3ICsyNSw2IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2xvZy5jIGIvc3JjL2xvZy5jCitpbmRleCA5YmFlNGEzLi5mN2U4MmU1IDEwMDY0NAorLS0tIGEvc3JjL2xvZy5jCisrKysgYi9zcmMvbG9nLmMKK0BAIC0yMyw3ICsyMyw2IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9udHAuYyBiL3NyYy9udHAuYworaW5kZXggZGQyNDZlYi4uZGI4YWU5NiAxMDA2NDQKKy0tLSBhL3NyYy9udHAuYworKysrIGIvc3JjL250cC5jCitAQCAtMjMsNyArMjMsNiBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorZGlmZiAtLWdpdCBhL3NyYy9yZXNvbHZlci5jIGIvc3JjL3Jlc29sdmVyLmMKK2luZGV4IGZiZTRiZTcuLmVmNjFmOTIgMTAwNjQ0CistLS0gYS9zcmMvcmVzb2x2ZXIuYworKysrIGIvc3JjL3Jlc29sdmVyLmMKK0BAIC0yMyw3ICsyMyw2IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KK2RpZmYgLS1naXQgYS9zcmMvcmZraWxsLmMgYi9zcmMvcmZraWxsLmMKK2luZGV4IDJiZmIwOTIuLmFmNDlkMTIgMTAwNjQ0CistLS0gYS9zcmMvcmZraWxsLmMKKysrKyBiL3NyYy9yZmtpbGwuYworQEAgLTIzLDcgKzIzLDYgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorZGlmZiAtLWdpdCBhL3NyYy9zdGF0cy5jIGIvc3JjL3N0YXRzLmMKK2luZGV4IDI2MzQzYjEuLmNmY2RjOTQgMTAwNjQ0CistLS0gYS9zcmMvc3RhdHMuYworKysrIGIvc3JjL3N0YXRzLmMKK0BAIC0yMyw3ICsyMyw2IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3RpbWV6b25lLmMgYi9zcmMvdGltZXpvbmUuYworaW5kZXggZTM0NmIxMS4uOGU5MTI2NyAxMDA2NDQKKy0tLSBhL3NyYy90aW1lem9uZS5jCisrKysgYi9zcmMvdGltZXpvbmUuYworQEAgLTIzLDcgKzIzLDYgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorZGlmZiAtLWdpdCBhL3Rvb2xzL3N0YXRzLXRvb2wuYyBiL3Rvb2xzL3N0YXRzLXRvb2wuYworaW5kZXggYjA3NjQ3OC4uNDI4ZDk0YiAxMDA2NDQKKy0tLSBhL3Rvb2xzL3N0YXRzLXRvb2wuYworKysrIGIvdG9vbHMvc3RhdHMtdG9vbC5jCitAQCAtMjIsNyArMjIsNiBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorZGlmZiAtLWdpdCBhL3Rvb2xzL3RhcC10ZXN0LmMgYi90b29scy90YXAtdGVzdC5jCitpbmRleCBmZGMwOThhLi41NzkxN2Y1IDEwMDY0NAorLS0tIGEvdG9vbHMvdGFwLXRlc3QuYworKysrIGIvdG9vbHMvdGFwLXRlc3QuYworQEAgLTIzLDcgKzIzLDYgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorZGlmZiAtLWdpdCBhL3Rvb2xzL3dpc3ByLmMgYi90b29scy93aXNwci5jCitpbmRleCBkNWY5MzQxLi5lNTZkZmMxIDEwMDY0NAorLS0tIGEvdG9vbHMvd2lzcHIuYworKysrIGIvdG9vbHMvd2lzcHIuYworQEAgLTIzLDcgKzIzLDYgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KK2RpZmYgLS1naXQgYS92cG4vcGx1Z2lucy92cG4uYyBiL3Zwbi9wbHVnaW5zL3Zwbi5jCitpbmRleCA5YTQyMzg1Li40NzljM2E3IDEwMDY0NAorLS0tIGEvdnBuL3BsdWdpbnMvdnBuLmMKKysrKyBiL3Zwbi9wbHVnaW5zL3Zwbi5jCitAQCAtMjMsNyArMjMsNiBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKy0tIAorMi44LjEKKworCitGcm9tIGI4Yjc4NzhlNmNiMmExZWQ0ZmNmYTI1NmY3ZTIzMjUxMWE0MGUzZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogVHVlLCA5IEF1ZyAyMDE2IDE1OjM3OjUwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBDaGVjayBmb3IgaW42X3BrdGluZm8uaXBpNl9hZGRyIGV4cGxpY2l0bHkKKworSW5zdGVhZCBvZiBhc3N1bWluZyB0aGF0IGp1c3QgZ2xpYmMgaGFzIHRoaXMgc3RydWN0dXJlLCBjaGVjayBmb3IgaXQgYXQKK2NvbmZpZ3VyZSBhcyBtdXNsIGFsc28gaGFzIGl0LgorCitCYXNlZCBvbiB3b3JrIGJ5IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+LgorLS0tCisgY29uZmlndXJlLmFjICAgfCAyICsrCisgZ2RoY3AvY29tbW9uLmggfCA1ICsrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJhY2Y1ZWMuLmFkMDA0NTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE4Niw2ICsxODYsOCBAQCBBQ19DSEVDS19MSUIocmVzb2x2LCBuc19pbml0cGFyc2UsIGR1bW15PXllcywgWworIEFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorIEFNX0NPTkRJVElPTkFMKFtCQUNLVFJBQ0VdLCBbdGVzdCAiJHthY19jdl9oZWFkZXJfZXhlY2luZm9faH0iID0gInllcyJdKQorIAorK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpbjZfcGt0aW5mby5pcGk2X2FkZHJdLCBbXSwgW10sIFtbI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dXSkKKysKKyBBQ19DSEVDS19GVU5DKHNpZ25hbGZkLCBkdW1teT15ZXMsCisgCQkJQUNfTVNHX0VSUk9SKHNpZ25hbGZkIHN1cHBvcnQgaXMgcmVxdWlyZWQpKQorIAorZGlmZiAtLWdpdCBhL2dkaGNwL2NvbW1vbi5oIGIvZ2RoY3AvY29tbW9uLmgKK2luZGV4IDc1YWJjMTguLjY4OTk0OTkgMTAwNjQ0CistLS0gYS9nZGhjcC9jb21tb24uaAorKysrIGIvZ2RoY3AvY29tbW9uLmgKK0BAIC0xOSw2ICsxOSw3IEBACisgICoKKyAgKi8KKyAKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyAKK0BAIC0xNzAsOCArMTcxLDggQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgZGhjcF9vcHRpb25fbGVuZ3Roc1tdID0geworIAlbT1BUSU9OX1UzMl0JPSA0LAorIH07CisgCistLyogYWxyZWFkeSBkZWZpbmVkIHdpdGhpbiBuZXRpbmV0L2luLmggaWYgdXNpbmcgR05VIGNvbXBpbGVyICovCistI2lmbmRlZiBfX1VTRV9HTlUKKysvKiBhbHJlYWR5IGRlZmluZWQgd2l0aGluIG5ldGluZXQvaW4uaCBpZiB1c2luZyBnbGliYyBvciBtdXNsICovCisrI2lmbmRlZiBIQVZFX1NUUlVDVF9JTjZfUEtUSU5GT19JUEk2X0FERFIKKyBzdHJ1Y3QgaW42X3BrdGluZm8geworIAlzdHJ1Y3QgaW42X2FkZHIgaXBpNl9hZGRyOyAgLyogc3JjL2RzdCBJUHY2IGFkZHJlc3MgKi8KKyAJdW5zaWduZWQgaW50IGlwaTZfaWZpbmRleDsgIC8qIHNlbmQvcmVjdiBpbnRlcmZhY2UgaW5kZXggKi8KKy0tIAorMi44LjEKKworCitGcm9tIGMwNzI2ZTQzMmZhMDI3NGEyYjljNzAxNzliMDNkZjY3MjA5NzI4MTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogVHVlLCA5IEF1ZyAyMDE2IDE1OjE5OjIzICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBSYXRpb25hbGlzZSBpbmNsdWRlcworCitnd2ViL2dyZXNvbHYuYyB1c2VzIHNucHJpbnRmKCkgYW5kIGlzc3BhY2UoKSBzbyBpdCBzaG91bGQgaW5jbHVkZSBzdGRpby5oIGFuZAorY3R5cGUuaC4KKwordG9vbHMvZG5zcHJveHktdGVzdCB1c2VzIGZ1bmN0aW9ucyBmcm9tIHN0ZGlvLmguCisKK211c2wgd2FybnMgd2hlbiBzeXMvIGhlYWRlcnMgYXJlIGluY2x1ZGVkIHdoZW4gdGhlIG5vbi1zeXMgZm9ybSBzaG91bGQgYmUgdXNlZCwKK3NvIHN3aXRjaCBzeXMvZXJybm8uaCBhbmQgc28gb24gdG8gZXJybm8uaC4KKworbXVzbCBhbHNvIGNhdXNlcyByZWRlZmluaXRpb24gZXJyb3JzIHdoZW4gcGllY2VzIG9mIHRoZSBuZXR3b3JraW5nIGhlYWRlcnMgYXJlCitpbmNsdWRlZCwgc28gcmVtb3ZlIHRoZSByZWR1bmRhbnQgaW5jbHVkZXMuCisKK0Jhc2VkIG9uIHdvcmsgYnkgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4uCistLS0KKyBnd2ViL2dyZXNvbHYuYyAgICAgICAgICAgICAgIHwgMiArKworIHBsdWdpbnMvd2lmaS5jICAgICAgICAgICAgICAgfCAzICstLQorIHNyYy9pcHBvb2wuYyAgICAgICAgICAgICAgICAgfCAxIC0KKyBzcmMvaXB0YWJsZXMuYyAgICAgICAgICAgICAgIHwgMiArLQorIHNyYy90ZXRoZXJpbmcuYyAgICAgICAgICAgICAgfCAyIC0tCisgdG9vbHMvZGhjcC10ZXN0LmMgICAgICAgICAgICB8IDEgLQorIHRvb2xzL2Ruc3Byb3h5LXRlc3QuYyAgICAgICAgfCAxICsKKyB0b29scy9wcml2YXRlLW5ldHdvcmstdGVzdC5jIHwgMiArLQorIHRvb2xzL3RhcC10ZXN0LmMgICAgICAgICAgICAgfCAyICstCisgOSBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nd2ViL2dyZXNvbHYuYyBiL2d3ZWIvZ3Jlc29sdi5jCitpbmRleCA4YTUxYTlmLi5kNTUwMjdjIDEwMDY0NAorLS0tIGEvZ3dlYi9ncmVzb2x2LmMKKysrKyBiL2d3ZWIvZ3Jlc29sdi5jCitAQCAtMjMsMTEgKzIzLDEzIEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8cmVzb2x2Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CitkaWZmIC0tZ2l0IGEvcGx1Z2lucy93aWZpLmMgYi9wbHVnaW5zL3dpZmkuYworaW5kZXggOWQ1NjY3MS4uMTQ4MTMxZCAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvd2lmaS5jCisrKysgYi9wbHVnaW5zL3dpZmkuYworQEAgLTMwLDkgKzMwLDggQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorICNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKysjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyAKKyAjaWZuZGVmIElGRl9MT1dFUl9VUAorICNkZWZpbmUgSUZGX0xPV0VSX1VQCTB4MTAwMDAKK2RpZmYgLS1naXQgYS9zcmMvaXBwb29sLmMgYi9zcmMvaXBwb29sLmMKK2luZGV4IGNlYTFkY2MuLjhhNjQ1ZGEgMTAwNjQ0CistLS0gYS9zcmMvaXBwb29sLmMKKysrKyBiL3NyYy9pcHBvb2wuYworQEAgLTI4LDcgKzI4LDYgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorLSNpbmNsdWRlIDxzeXMvZXJybm8uaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorIAorICNpbmNsdWRlICJjb25ubWFuLmgiCitkaWZmIC0tZ2l0IGEvc3JjL2lwdGFibGVzLmMgYi9zcmMvaXB0YWJsZXMuYworaW5kZXggNWVmNzU3YS4uODJlM2FjNCAxMDA2NDQKKy0tLSBhL3NyYy9pcHRhYmxlcy5jCisrKysgYi9zcmMvaXB0YWJsZXMuYworQEAgLTI4LDcgKzI4LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorLSNpbmNsdWRlIDxzeXMvZXJybm8uaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDx4dGFibGVzLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3RldGhlcmluZy5jIGIvc3JjL3RldGhlcmluZy5jCitpbmRleCAzMTUzMzQ5Li5hZDA2MmQ1IDEwMDY0NAorLS0tIGEvc3JjL3RldGhlcmluZy5jCisrKysgYi9zcmMvdGV0aGVyaW5nLmMKK0BAIC0zMSwxMCArMzEsOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8bmV0L2lmLmg+CistI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CistI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGxpbnV4L2lmX2JyaWRnZS5oPgorIAorZGlmZiAtLWdpdCBhL3Rvb2xzL2RoY3AtdGVzdC5jIGIvdG9vbHMvZGhjcC10ZXN0LmMKK2luZGV4IGMzNGUxMGEuLmVhZTY2ZmMgMTAwNjQ0CistLS0gYS90b29scy9kaGNwLXRlc3QuYworKysrIGIvdG9vbHMvZGhjcC10ZXN0LmMKK0BAIC0zMyw3ICszMyw2IEBACisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyAjaW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+CistI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorIAorICNpbmNsdWRlIDxnZGhjcC9nZGhjcC5oPgorIAorZGlmZiAtLWdpdCBhL3Rvb2xzL2Ruc3Byb3h5LXRlc3QuYyBiL3Rvb2xzL2Ruc3Byb3h5LXRlc3QuYworaW5kZXggNTUxY2FlOS4uMzcxZTJlMiAxMDA2NDQKKy0tLSBhL3Rvb2xzL2Ruc3Byb3h5LXRlc3QuYworKysrIGIvdG9vbHMvZG5zcHJveHktdGVzdC5jCitAQCAtMjQsNiArMjQsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorZGlmZiAtLWdpdCBhL3Rvb2xzL3ByaXZhdGUtbmV0d29yay10ZXN0LmMgYi90b29scy9wcml2YXRlLW5ldHdvcmstdGVzdC5jCitpbmRleCAzZGQxMTViLi4yODI4YmIzIDEwMDY0NAorLS0tIGEvdG9vbHMvcHJpdmF0ZS1uZXR3b3JrLXRlc3QuYworKysrIGIvdG9vbHMvcHJpdmF0ZS1uZXR3b3JrLXRlc3QuYworQEAgLTMyLDcgKzMyLDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKy0jaW5jbHVkZSA8c3lzL3BvbGwuaD4KKysjaW5jbHVkZSA8cG9sbC5oPgorICNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCitkaWZmIC0tZ2l0IGEvdG9vbHMvdGFwLXRlc3QuYyBiL3Rvb2xzL3RhcC10ZXN0LmMKK2luZGV4IDU3OTE3ZjUuLmNiM2VlNjIgMTAwNjQ0CistLS0gYS90b29scy90YXAtdGVzdC5jCisrKysgYi90b29scy90YXAtdGVzdC5jCitAQCAtMjgsNyArMjgsNyBAQAorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisrI2luY2x1ZGUgPHBvbGwuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKy0tIAorMi44LjEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9uby12ZXJzaW9uLXNjcmlwdHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vbm8tdmVyc2lvbi1zY3JpcHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NmUzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vbm8tdmVyc2lvbi1zY3JpcHRzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1dpdGggYmludXRpbHMgMi4yNyBvbiBhdCBsZWFzdCBNSVBTLCBjb25ubWFuZCB3aWxsIGNyYXNoIG9uIHN0YXJ0dXAuICBUaGlzCithcHBlYXJzIHRvIGJlIGR1ZSB0byB0aGUgc3ltYm9sIHZpc2liaWx0eSBzY3JpcHRzIGhpZGluZyBzeW1ib2xzIHRoYXQgc3RkaW8KK2xvb2tzIHVwIGF0IHJ1bnRpbWUsIHJlc3VsdGluZyBpbiBpdCBzZWdmYXVsdGluZy4KKworVGhpcyBjZXJ0YWlubHkgYXBwZWFycyB0byBiZSBhIGJ1ZyBpbiBiaW51dGlscyAyLjI3IGFsdGhvdWdoIHRoZSBwcm9ibGVtIGhhcworYmVlbiBrbm93biBhYm91dCBmb3Igc29tZSB0aW1lOgorCitodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xNzkwOAorCitBcyB0aGUgdmVyc2lvbiBzY3JpcHRzIGFyZSBvbmx5IHVzZWQgdG8gaGlkZSBzeW1ib2xzIGZyb20gcGx1Z2lucyB3ZSBjYW4gc2FmZWx5CityZW1vdmUgdGhlIHNjcmlwdHMgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gdW50aWwgYmludXRpbHMgaXMgZml4ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGQ3MDcyNWMuLjc2YWU0MzIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMzIsMiArMTMyIEBAIHNyY19jb25ubWFuZF9MREFERCA9IGdkYnVzL2xpYmdkYnVzLWludGVybmFsLmxhICQoYnVpbHRpbl9saWJhZGQpIFwKKy1zcmNfY29ubm1hbmRfTERGTEFHUyA9IC1XbCwtLWV4cG9ydC1keW5hbWljIFwKKy0JCQkJLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpL3NyYy9jb25ubWFuLnZlcgorK3NyY19jb25ubWFuZF9MREZMQUdTID0gLVdsLC0tZXhwb3J0LWR5bmFtaWMKK0BAIC0xNjYsMiArMTY1IEBAIHZwbl9jb25ubWFuX3ZwbmRfTERBREQgPSBnZGJ1cy9saWJnZGJ1cy1pbnRlcm5hbC5sYSAkKGJ1aWx0aW5fdnBuX2xpYmFkZCkgXAorLXZwbl9jb25ubWFuX3ZwbmRfTERGTEFHUyA9IC1XbCwtLWV4cG9ydC1keW5hbWljIFwKKy0JCQkJLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpL3Zwbi92cG4udmVyCisrdnBuX2Nvbm5tYW5fdnBuZF9MREZMQUdTID0gLVdsLC0tZXhwb3J0LWR5bmFtaWMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MWQyMjEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1yZXF1aXJlIGNvbm5tYW4uaW5jCi0KLVNSQ19VUkkgID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtRGV0ZWN0LWJhY2t0cmFjZS1BUEktYXZhaWxhYmlsaXR5LWJlZm9yZS11c2luZy1pdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMi1yZXNvbHZlLW11c2wtZG9lcy1ub3QtaW1wbGVtZW50LXJlc19uaW5pdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMy1GaXgtaGVhZGVyLWluY2x1c2lvbnMtZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtaXB0YWJsZXMtQWRkLW1pc3NpbmctZnVuY3Rpb24taXRlbS1vZi14dGFibGVzLXRvLW1hdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vY29ubm1hbiBcCi0gICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiY2IxYzQxM2ZjYzRmNDk0MzAyOTRiYmQ3YTkyZjVmM2MiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODhmY2YwYjZkZjMzNDc5NmI5MGUyZmQyZTQzNGQ2ZjViMzZjZDZmMTNiODg2YTExOWI4YzkwMjc2YjcyYjhlMiIKLQotUlJFQ09NTUVORFNfJHtQTn0gPSAiY29ubm1hbi1jb25mIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTFhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIGNvbm5tYW4uaW5jCisKK1NSQ19VUkkgID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4gXAorICAgICAgICAgICAgZmlsZTovL25vLXZlcnNpb24tc2NyaXB0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZXMucGF0Y2ggXAorICAgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwMi1yZXNvbHZlLW11c2wtZG9lcy1ub3QtaW1wbGVtZW50LXJlc19uaW5pdC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImM1MTkwM2ZkM2U3YTZhMzcxZDEyYWM1ZDcyYTFmYTAxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJjODk0NjAzNmZhNzAxMjRkNjYzMTM2ZjlmNmI2MjM4ZDg5N2NhNDgyNzgyZGY5MDdiMDdhNDI4YjA5ZGY1YTAiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNvbm5tYW4tY29uZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jCmluZGV4IDVlMzk2ZjEuLmFhZmRkMGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLmluYwpAQCAtNDYsNyArNDYsOCBAQAogICAgICAgICAgICAgICAgIC0td2l0aC1jbGktbGVhc2UtZmlsZT0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50LmxlYXNlcyBcCiAgICAgICAgICAgICAgICAgLS13aXRoLWNsaTYtbGVhc2UtZmlsZT0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50Ni5sZWFzZXMgXAogICAgICAgICAgICAgICAgIC0td2l0aC1saWJiaW5kPSR7U1RBR0lOR19MSUJESVJ9LyBcCi0JCS0tZW5hYmxlLXBhcmFub2lhIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1wYXJhbm9pYSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJhbmRvbWRldj0vZGV2L3JhbmRvbSBcCiAgICAgICAgICAgICAgICAiCiAKIGRvX2luc3RhbGxfYXBwZW5kICgpIHsKQEAgLTc4LDYgKzc5LDcgQEAKIAlzZWQgLWkgLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UKIAlzZWQgLWkgLWUgJ3MsQGJhc2VfYmluZGlyQCwke2Jhc2VfYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQogCXNlZCAtaSAtZSAncyxAbG9jYWxzdGF0ZWRpckAsJHtsb2NhbHN0YXRlZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQorICAgICAgIHNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNyZWxheS5zZXJ2aWNlCiB9CiAKIFBBQ0tBR0VTICs9ICJkaGNwLXNlcnZlciBkaGNwLXNlcnZlci1jb25maWcgZGhjcC1jbGllbnQgZGhjcC1yZWxheSBkaGNwLW9tc2hlbGwiCkBAIC05NCw3ICs5Niw2IEBACiBGSUxFU18ke1BOfS1yZWxheSA9ICIke3NiaW5kaXJ9L2RoY3JlbGF5ICR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3AtcmVsYXkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkiCiAKIEZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQgJHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50LXNjcmlwdCAke3N5c2NvbmZkaXJ9L2RoY3AvZGhjbGllbnQuY29uZiIKLVJERVBFTkRTXyR7UE59LWNsaWVudCA9ICJiYXNoIgogCiBGSUxFU18ke1BOfS1vbXNoZWxsID0gIiR7YmluZGlyfS9vbXNoZWxsIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwMS1zaXRlLmgtZW5hYmxlLWdlbnRsZS1zaHV0ZG93bi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAxLXNpdGUuaC1lbmFibGUtZ2VudGxlLXNodXRkb3duLnBhdGNoCmluZGV4IDQzNDQyMTIuLjQ3NDQzYTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAxLXNpdGUuaC1lbmFibGUtZ2VudGxlLXNodXRkb3duLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAxLXNpdGUuaC1lbmFibGUtZ2VudGxlLXNodXRkb3duLnBhdGNoCkBAIC04LDEwICs4LDEwIEBACiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9pbmNsdWRlcy9zaXRlLmggYi9pbmNsdWRlcy9zaXRlLmgKLWluZGV4IDczZmE0ZTguLjljMzNkZTMgMTAwNjQ0CitpbmRleCAxZGQxMjUxLi5hYmI2NmU0IDEwMDY0NAogLS0tIGEvaW5jbHVkZXMvc2l0ZS5oCiArKysgYi9pbmNsdWRlcy9zaXRlLmgKLUBAIC0yODAsNyArMjgwLDcgQEAKK0BAIC0yODksNyArMjg5LDcgQEAKICAgICBzaXR1YXRpb25zLiAgV2UgcGxhbiB0byByZXZpc2l0IHRoaXMgZmVhdHVyZSBhbmQgbWF5CiAgICAgbWFrZSBub24tYmFja3dhcmRzIGNvbXBhdGlibGUgY2hhbmdlcyBpbmNsdWRpbmcgdGhlCiAgICAgcmVtb3ZhbCBvZiB0aGlzIGRlZmluZS4gIFVzZSBhdCB5b3VyIG93biByaXNrLiAgKi8KQEAgLTIxLDUgKzIxLDUgQEAKICAvKiBJbmNsdWRlIG9sZCBlcnJvciBjb2Rlcy4gIFRoaXMgaXMgcHJvdmlkZWQgaW4gY2FzZSB5b3UKICAgICBhcmUgYnVpbGRpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBzaW1pbGFyIHRvIG9tc2hlbGwgZm9yCiAtLSAKLTEuOS4xCisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvQ1ZFLTIwMTUtODYwNS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9DVkUtMjAxNS04NjA1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjNkNWQ1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9DVkUtMjAxNS04NjA1LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotU29sdmVzIENWRS0yMDE1LTg2MDUgdGhhdCBjYXVzZWQgRG9TIHdoZW4gYW4gaW52YWxpZCBsZW5naHQgZmllbGQgaW4gSVB2NCBVRFAKLXdhcyByZWNpdmVkIGJ5IHRoZSBzZXJ2ZXIuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTUtODYwNQotCi1TaWduZWQtb2ZmLWJ5OiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGxpbnV4LmludGVsLmNvbT4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRpZmYgLS1naXQgYS9jb21tb24vcGFja2V0LmMgYi9jb21tb24vcGFja2V0LmMKLWluZGV4IGI1MzA0MzIuLmU2MDBlMzcgMTAwNjQ0Ci0tLS0gYS9jb21tb24vcGFja2V0LmMKLSsrKyBiL2NvbW1vbi9wYWNrZXQuYwotQEAgLTIyMCw3ICsyMjAsMjggQEAgc3NpemVfdCBkZWNvZGVfaHdfaGVhZGVyIChpbnRlcmZhY2UsIGJ1ZiwgYnVmaXgsIGZyb20pCi0gCX0KLSB9Ci0gCi0tLyogVURQIGhlYWRlciBhbmQgSVAgaGVhZGVyIGRlY29kZWQgdG9nZXRoZXIgZm9yIGNvbnZlbmllbmNlLiAqLwotKy8qIQotKyAqCi0rICogXGJyaWVmIFVEUCBoZWFkZXIgYW5kIElQIGhlYWRlciBkZWNvZGVkIHRvZ2V0aGVyIGZvciBjb252ZW5pZW5jZS4KLSsgKgotKyAqIEF0dGVtcHQgdG8gZGVjb2RlIHRoZSBVRFAgYW5kIElQIGhlYWRlcnMgYW5kLCBpZiBuZWNlc3NhcnksIGNoZWNrc3VtCi0rICogdGhlIHBhY2tldC4KLSsgKgotKyAqIFxwYXJhbSBpbnRlZmFjZSAtIHRoZSBpbnRlcmZhY2Ugb24gd2hpY2ggdGhlIHBhY2tldCB3YXMgcmVjZXZpZWQKLSsgKiBccGFyYW0gYnVmIC0gYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgZm9yIHRoZSByZWNlaXZlZCBwYWNrZXQKLSsgKiBccGFyYW0gYnVmaXggLSB3aGVyZSB0byBzdGFydCBwcm9jZXNzaW5nIHRoZSBidWZmZXIsIHByZXZpb3VzCi0rICogICAgICAgICAgICAgICAgcm91dGluZXMgbWF5IGhhdmUgcHJvY2Vzc2VkIHBhcnRzIG9mIHRoZSBidWZmZXIgYWxyZWFkeQotKyAqIFxwYXJhbSBmcm9tIC0gc3BhY2UgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBwYWNrZXQgc2VuZGVyCi0rICogXHBhcmFtIGJ1ZmxlbiAtIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgdGhpcyB3aWxsIGhhdmUgYmVlbgotKyAqICAgICAgICAgICAgICAgICBkZWNyZW1lbnRlZCBieSBidWZpeCBieSB0aGUgY2FsbGVyCi0rICogXHBhcmFtIHJidWZsZW4gLSBzcGFjZSB0byByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcGF5bG9hZCBmcm9tIHRoZSB1ZHAKLSsgKiAgICAgICAgICAgICAgICAgIGhlYWRlcgotKyAqIFxwYXJhbSBjc3VtX3JlYWR5IC0gaW5kaWNhdGlvbiBpZiB0aGUgY2hlY2tzdW0gaXMgdmFsaWQgZm9yIHVzZQotKyAqICAgICAgICAgICAgICAgICAgICAgbm9uLXplcm8gaW5kaWNhdGVzIHRoZSBjaGVja3N1bSBzaG91bGQgYmUgdmFsaWRhdGVkCi0rICoKLSsgKiBccmV0dXJuIC0gdGhlIGluZGV4IHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSB1ZHAgcGF5bG9hZCAodGhhdCBpcyB0aGUKLSsgKiAgICAgICAgICAgc3RhcnQgb2YgdGhlIERIQ1AgcGFja2V0Ci0rICovCi0gCi0gc3NpemVfdAotIGRlY29kZV91ZHBfaXBfaGVhZGVyKHN0cnVjdCBpbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlLAotQEAgLTIzMSw3ICsyNTIsNyBAQCBkZWNvZGVfdWRwX2lwX2hlYWRlcihzdHJ1Y3QgaW50ZXJmYWNlX2luZm8gKmludGVyZmFjZSwKLSAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICBzdHJ1Y3QgaXAgaXA7Ci0gICBzdHJ1Y3QgdWRwaGRyIHVkcDsKLS0gIHVuc2lnbmVkIGNoYXIgKnVwcCwgKmVuZGJ1ZjsKLSsgIHVuc2lnbmVkIGNoYXIgKnVwcDsKLSAgIHVfaW50MzJfdCBpcF9sZW4sIHVsZW4sIHBrdF9sZW47Ci0gICBzdGF0aWMgdW5zaWduZWQgaW50IGlwX3BhY2tldHNfc2VlbiA9IDA7Ci0gICBzdGF0aWMgdW5zaWduZWQgaW50IGlwX3BhY2tldHNfYmFkX2NoZWNrc3VtID0gMDsKLUBAIC0yNDEsMTEgKzI2Miw4IEBAIGRlY29kZV91ZHBfaXBfaGVhZGVyKHN0cnVjdCBpbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlLAotICAgc3RhdGljIHVuc2lnbmVkIGludCB1ZHBfcGFja2V0c19sZW5ndGhfb3ZlcmZsb3cgPSAwOwotICAgdW5zaWduZWQgbGVuOwotIAotLSAgLyogRGVzaWduYXRlIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlciBmb3IgYm91bmRzIGNoZWNrcy4gKi8KLS0gIGVuZGJ1ZiA9IGJ1ZiArIGJ1Zml4ICsgYnVmbGVuOwotLQotICAgLyogQXNzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IGFuIElQIGhlYWRlciB0aGVyZS4gKi8KLS0gIGlmICgoYnVmICsgYnVmaXggKyBzaXplb2YoaXApKSA+IGVuZGJ1ZikKLSsgIGlmIChzaXplb2YoaXApID4gYnVmbGVuKQotIAkgIHJldHVybiAtMTsKLSAKLSAgIC8qIENvcHkgdGhlIElQIGhlYWRlciBpbnRvIGEgc3RhY2sgYWxpZ25lZCBzdHJ1Y3R1cmUgZm9yIGluc3BlY3Rpb24uCi1AQCAtMjU3LDEzICsyNzUsMTcgQEAgZGVjb2RlX3VkcF9pcF9oZWFkZXIoc3RydWN0IGludGVyZmFjZV9pbmZvICppbnRlcmZhY2UsCi0gICBpcF9sZW4gPSAoKnVwcCAmIDB4MGYpIDw8IDI7Ci0gICB1cHAgKz0gaXBfbGVuOwotIAotLSAgLyogQ2hlY2sgdGhlIElQIHBhY2tldCBsZW5ndGguICovCi0rICAvKiBDaGVjayBwYWNrZXQgbGVuZ3RocyBhcmUgd2l0aGluIHRoZSBidWZmZXI6Ci0rICAgKiBmaXJzdCB0aGUgaXAgaGVhZGVyIChpcF9sZW4pCi0rICAgKiB0aGVuIHRoZSBwYWNrZXQgbGVuZ3RoIGZyb20gdGhlIGlwIGhlYWRlciAocGt0X2xlbikKLSsgICAqIHRoZW4gdGhlIHVkcCBoZWFkZXIgKGlwX2xlbiArIHNpemVvZih1ZHApCi0rICAgKiBXZSBhcmUgbGliZXJhbCBpbiB3aGF0IHdlIGFjY2VwdCwgdGhlIHVkcCBwYXlsb2FkIHNob3VsZCBmaXQgd2l0aGluCi0rICAgKiBwa3RfbGVuLCBidXQgd2Ugb25seSBjaGVjayBhZ2FpbnN0IHRoZSBmdWxsIGJ1ZmZlciBzaXplLgotKyAgICovCi0gICBwa3RfbGVuID0gbnRvaHMoaXAuaXBfbGVuKTsKLS0gIGlmIChwa3RfbGVuID4gYnVmbGVuKQotLQlyZXR1cm4gLTE7Ci0tCi0tICAvKiBBc3N1cmUgYWZ0ZXIgaXBfbGVuIGJ5dGVzIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIGEgVURQIGhlYWRlci4gKi8KLS0gIGlmICgodXBwICsgc2l6ZW9mKHVkcCkpID4gZW5kYnVmKQotKyAgaWYgKChpcF9sZW4gPiBidWZsZW4pIHx8Ci0rICAgICAgKHBrdF9sZW4gPiBidWZsZW4pIHx8Ci0rICAgICAgKChpcF9sZW4gKyBzaXplb2YodWRwKSkgPiBidWZsZW4pKQotIAkgIHJldHVybiAtMTsKLSAKLSAgIC8qIENvcHkgdGhlIFVEUCBoZWFkZXIgaW50byBhIHN0YWNrIGFsaWduZWQgc3RydWN0dXJlIGZvciBpbnNwZWN0aW9uLiAqLwotQEAgLTI4NCw3ICszMDYsOCBAQCBkZWNvZGVfdWRwX2lwX2hlYWRlcihzdHJ1Y3QgaW50ZXJmYWNlX2luZm8gKmludGVyZmFjZSwKLSAJcmV0dXJuIC0xOwotIAotICAgdWRwX3BhY2tldHNfbGVuZ3RoX2NoZWNrZWQrKzsKLS0gIGlmICgodXBwICsgdWxlbikgPiBlbmRidWYpIHsKLSsgIC8qIHZlcmlmeSB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBmcm9tIHRoZSB1ZHAgcGFja2V0IGZpdHMgaW4gdGhlIGJ1ZmZlciAqLwotKyAgaWYgKChpcF9sZW4gKyB1bGVuKSA+IGJ1ZmxlbikgewotIAl1ZHBfcGFja2V0c19sZW5ndGhfb3ZlcmZsb3crKzsKLSAJaWYgKCgodWRwX3BhY2tldHNfbGVuZ3RoX2NoZWNrZWQgPiA0KSAmJgotIAkgICAgICh1ZHBfcGFja2V0c19sZW5ndGhfb3ZlcmZsb3cgIT0gMCkpICYmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvQ1ZFLTIwMTYtMjc3NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9DVkUtMjAxNi0yNzc0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODM2ZGJjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9DVkUtMjAxNi0yNzc0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotRnJvbSBiOWY1NmQ1NzhlYmZkNjQ5YjVkODI5OTYwNTQwODU5YWM2Y2E5MzFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQ2F0YWxpbiBFbmFjaGUgPGNhdGFsaW4uZW5hY2hlQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUdWUsIDEyIEFwciAyMDE2IDE4OjIzOjMxICswMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIEFkZCBwYXRjaCB0byBsaW1pdCB0aGUgdmFsdWUgb2YgYW4gZmQgd2UgYWNjZXB0IGZvciBhCi0gY29ubmVjdGlvbi4KLQotQnkgbGltaXRpbmcgdGhlIGhpZ2hlc3QgdmFsdWUgd2UgYWNjZXB0IGZvciBhbiBmZCB3ZSBsaW1pdCB0aGUgbnVtYmVyCi1vZiBjb25uZWN0aW9ucy4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNi0yNzc0Ci0KLUF1dGhvcjogU2hhd24gUm91dGhpZXIgPHNhckBpc2Mub3JnPgotU2lnbmVkLW9mZi1ieTogQ2F0YWxpbiBFbmFjaGUgPGNhdGFsaW4uZW5hY2hlQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBpbmNsdWRlcy9zaXRlLmggICB8IDYgKysrKysrCi0gb21hcGlwL2xpc3RlbmVyLmMgfCA5ICsrKysrKystLQotIDMgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGVzL3NpdGUuaCBiL2luY2x1ZGVzL3NpdGUuaAotaW5kZXggOWMzM2RlMy4uZGYwMjBjOCAxMDA2NDQKLS0tLSBhL2luY2x1ZGVzL3NpdGUuaAotKysrIGIvaW5jbHVkZXMvc2l0ZS5oCi1AQCAtMjkwLDYgKzI5MCwxMiBAQAotICAgIHRoaXMgb3B0aW9uIHdpbGwgYmUgcmVtb3ZlZCBhdCBzb21lIHRpbWUuICovCi0gLyogI2RlZmluZSBJTkNMVURFX09MRF9ESENQX0lTQ19FUlJPUl9DT0RFUyAqLwotIAotKy8qIExpbWl0IHRoZSB2YWx1ZSBvZiBhIGZpbGUgZGVzY3JpcHRvciB0aGUgc2VydmUgd2lsbCB1c2UKLSsgICB3aGVuIGFjY2VwdGluZyBhIGNvbm5lY3RpbmcgcmVxdWVzdC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KLSsgICBsaW1pdCB0aGUgbnVtYmVyIG9mIFRDUCBjb25uZWN0aW9ucyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbAotKyAgIGFsbG93IGF0IG9uZSB0aW1lLiAgQSB2YWx1ZSBvZiAwIG1lYW5zIHRoZXJlIGlzIG5vIGxpbWl0LiovCi0rI2RlZmluZSBNQVhfRkRfVkFMVUUgMjAwCi0rCi0gLyogSW5jbHVkZSBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBvcHRpb25zLiAgSW4gZ2VuZXJhbCB0aGVzZQotICAgIHNob3VsZCBiZSBsZWZ0IGFzIGlzLCBidXQgaWYgeW91IGhhdmUgYWxyZWFkeSBkZWZpbmVkIG9uZQotICAgIG9mIHRoZXNlIGFuZCBwcmVmZXIgeW91ciBkZWZpbml0aW9uIHlvdSBjYW4gY29tbWVudCB0aGUgCi1kaWZmIC0tZ2l0IGEvb21hcGlwL2xpc3RlbmVyLmMgYi9vbWFwaXAvbGlzdGVuZXIuYwotaW5kZXggOGJkY2RiZC4uNjE0NzNjZiAxMDA2NDQKLS0tLSBhL29tYXBpcC9saXN0ZW5lci5jCi0rKysgYi9vbWFwaXAvbGlzdGVuZXIuYwotQEAgLTMsNyArMyw3IEBACi0gICAgU3Vicm91dGluZXMgdGhhdCBzdXBwb3J0IHRoZSBnZW5lcmljIGxpc3RlbmVyIG9iamVjdC4gKi8KLSAKLSAvKgotLSAqIENvcHlyaWdodCAoYykgMjAxMiwyMDE0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0rICogQ29weXJpZ2h0IChjKSAyMDEyLDIwMTQsMjAxNiBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA3LDIwMDkgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMyBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCi0gICoKLUBAIC0yMzMsNyArMjMzLDEyIEBAIGlzY19yZXN1bHRfdCBvbWFwaV9hY2NlcHQgKG9tYXBpX29iamVjdF90ICpoKQotIAkJCXJldHVybiBJU0NfUl9OT1JFU09VUkNFUzsKLSAJCXJldHVybiBJU0NfUl9VTkVYUEVDVEVEOwotIAl9Ci0tCQotKwotKwlpZiAoKE1BWF9GRF9WQUxVRSAhPSAwKSAmJiAoc29ja2V0ID4gTUFYX0ZEX1ZBTFVFKSkgewotKwkJY2xvc2Uoc29ja2V0KTsKLSsJCXJldHVybiAoSVNDX1JfTk9SRVNPVVJDRVMpOwotKwl9Ci0rCi0gI2lmIGRlZmluZWQgKFRSQUNJTkcpCi0gCS8qIElmIHdlJ3JlIHJlY29yZGluZyBhIHRyYWNlLCByZW1lbWJlciB0aGUgY29ubmVjdGlvbi4gKi8KLSAJaWYgKHRyYWNlX3JlY29yZCAoKSkgewotLS0gCi0yLjcuNApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoCmluZGV4IDQ3ZWE1NTUuLjk2MDk1YTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2gKQEAgLTY2LDUgKzY2LDUgQEAKICB9CiAgCiAtLSAKLTEuOC4xLjIKKzIuOC4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2YzVkOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4LWV4dGVybmFsLWJpbmQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLTExLzMwLzIwMTAKLS0td2l0aC1saWJiaW5kPVBBVEggaXMgYXZhaWxhYmxlIGJ1dCBub3QgdXNlZCBieSBNYWtlZmlsZSwKLXRoaXMgcGF0Y2ggaXMgdG8gYWxsb3cgYnVpbGRpbmcgd2l0aCBleHRlcm5hbCBiaW5kCi0KLVNpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgotCi1SZWJhc2UgdGhlIHBhdGNoIHRvIDQuMy4zCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi0tLS0gYS9NYWtlZmlsZS5hbQotKysrIGIvTWFrZWZpbGUuYW0KLUBAIC0yNSw3ICsyNSw3IEBAIEVYVFJBX0RJU1QgPSBSRUxOT1RFUyBMSUNFTlNFIFwKLSAJICAgICBiaW5kL01ha2VmaWxlLmluIGJpbmQvYmluZC50YXIuZ3ogYmluZC92ZXJzaW9uLnRtcCBcCi0gCSAgICAgY29tbW9uL3Rlc3RzL0F0ZmZpbGUgc2VydmVyL3Rlc3RzL0F0ZmZpbGUKLSAKLS1TVUJESVJTID0gYmluZCBpbmNsdWRlcyB0ZXN0cyBjb21tb24gb21hcGlwIGNsaWVudCBkaGNwY3RsIHJlbGF5IHNlcnZlcgotK1NVQkRJUlMgPSBpbmNsdWRlcyB0ZXN0cyBjb21tb24gb21hcGlwIGNsaWVudCBkaGNwY3RsIHJlbGF5IHNlcnZlcgotIAotIG5vYmFzZV9pbmNsdWRlX0hFQURFUlMgPSBkaGNwY3RsL2RoY3BjdGwuaAotIAotZGlmZiAtLWdpdCBhL2NsaWVudC9NYWtlZmlsZS5hbSBiL2NsaWVudC9NYWtlZmlsZS5hbQotLS0tIGEvY2xpZW50L01ha2VmaWxlLmFtCi0rKysgYi9jbGllbnQvTWFrZWZpbGUuYW0KLUBAIC0xMCw4ICsxMCw4IEBAIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYyBkaGM2LmMgXAotIAkJICAgc2NyaXB0cy9ic2RvcyBzY3JpcHRzL2ZyZWVic2Qgc2NyaXB0cy9saW51eCBzY3JpcHRzL21hY29zIFwKLSAJCSAgIHNjcmlwdHMvbmV0YnNkIHNjcmlwdHMvbmV4dHN0ZXAgc2NyaXB0cy9vcGVuYnNkIFwKLSAJCSAgIHNjcmlwdHMvc29sYXJpcyBzY3JpcHRzL29wZW53cnQKLS1kaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAotLQkJIC4uL2JpbmQvbGliL2xpYmRucy5hIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCi0rZGhjbGllbnRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgXAotKwkJICQobGliYmluZCkvbGliZG5zLmEgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCi0gbWFuX01BTlMgPSBkaGNsaWVudC44IGRoY2xpZW50LXNjcmlwdC44IGRoY2xpZW50LmNvbmYuNSBkaGNsaWVudC5sZWFzZXMuNQotIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQotIAotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC02MjMsNiArNjIzLDcgQEAgbm8pCi0gCWZpCQotIAk7OwotIGVzYWMKLStBQ19TVUJTVChbbGliYmluZF0pCi0gCi0gIyBPcGVuTERBUCBzdXBwb3J0LgotIEFDX0FSR19XSVRIKGxkYXAsCi1kaWZmIC0tZ2l0IGEvZGhjcGN0bC9NYWtlZmlsZS5hbSBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KLS0tLSBhL2RoY3BjdGwvTWFrZWZpbGUuYW0KLSsrKyBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KLUBAIC02LDEyICs2LDEyIEBAIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQotIAotIG9tc2hlbGxfU09VUkNFUyA9IG9tc2hlbGwuYwotIG9tc2hlbGxfTERBREQgPSBsaWJkaGNwY3RsLmEgLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCi0tCSAgICAgICAgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAotLQkgICAgICAgIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCi0rCSAgICAgICAgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKLSsJICAgICAgICAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKLSAKLSBsaWJkaGNwY3RsX2FfU09VUkNFUyA9IGRoY3BjdGwuYyBjYWxsYmFjay5jIHJlbW90ZS5jCi0gCi0gY2x0ZXN0X1NPVVJDRVMgPSBjbHRlc3QuYwotIGNsdGVzdF9MREFERCA9IGxpYmRoY3BjdGwuYSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKLS0JICAgICAgIC4uL2JpbmQvbGliL2xpYmlycy5hIC4uL2JpbmQvbGliL2xpYmRucy5hIFwKLS0gICAgICAgICAgICAgICAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQotKwkgICAgICAgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKLSsgICAgICAgICAgICAgICAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKLWRpZmYgLS1naXQgYS9vbWFwaXAvTWFrZWZpbGUuYW0gYi9vbWFwaXAvTWFrZWZpbGUuYW0KLS0tLSBhL29tYXBpcC9NYWtlZmlsZS5hbQotKysrIGIvb21hcGlwL01ha2VmaWxlLmFtCi1AQCAtMTAsNiArMTAsNiBAQCBtYW5fTUFOUyA9IG9tYXBpLjMKLSBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKLSAKLSBzdnRlc3RfU09VUkNFUyA9IHRlc3QuYwotLXN2dGVzdF9MREFERCA9IGxpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAotLQkJLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKLStzdnRlc3RfTERBREQgPSBsaWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCi0rCQkkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKLSAKLWRpZmYgLS1naXQgYS9yZWxheS9NYWtlZmlsZS5hbSBiL3JlbGF5L01ha2VmaWxlLmFtCi0tLS0gYS9yZWxheS9NYWtlZmlsZS5hbQotKysrIGIvcmVsYXkvTWFrZWZpbGUuYW0KLUBAIC0zLDggKzMsOCBAQCBBTV9DUFBGTEFHUyA9IC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCi0gc2Jpbl9QUk9HUkFNUyA9IGRoY3JlbGF5Ci0gZGhjcmVsYXlfU09VUkNFUyA9IGRoY3JlbGF5LmMKLSBkaGNyZWxheV9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAotLQkJIC4uL2JpbmQvbGliL2xpYmlycy5hIC4uL2JpbmQvbGliL2xpYmRucy5hIFwKLS0JCSAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQotKwkJICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCi0rCQkgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCi0gbWFuX01BTlMgPSBkaGNyZWxheS44Ci0gRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCi0gCi1kaWZmIC0tZ2l0IGEvc2VydmVyL01ha2VmaWxlLmFtIGIvc2VydmVyL01ha2VmaWxlLmFtCi0tLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KLSsrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQotQEAgLTE0LDEwICsxNCwxMiBAQCBkaGNwZF9TT1VSQ0VTID0gZGhjcGQuYyBkaGNwLmMgYm9vdHAuYyBjb25mcGFycy5jIGRiLmMgY2xhc3MuYyBmYWlsb3Zlci5jIFwKLSAKLSBkaGNwZF9DRkxBR1MgPSAkKExEQVBfQ0ZMQUdTKQotIGRoY3BkX0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCi0tCSAgICAgIC4uL2RoY3BjdGwvbGliZGhjcGN0bC5hIC4uL2JpbmQvbGliL2xpYmlycy5hIFwKLS0JICAgICAgLi4vYmluZC9saWIvbGliZG5zLmEgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEgXAotKwkgICAgICAuLi9kaGNwY3RsL2xpYmRoY3BjdGwuYSAkKGxpYmJpbmQpL2xpYmlycy5hIFwKLSsJICAgICAgJChsaWJiaW5kKS9saWJkbnMuYSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEgXAotIAkgICAgICAkKExEQVBfTElCUykJCQotIAotKyBkaGNwZF9DRkxBR1MgPSAkKExEQVBfQ0ZMQUdTKQotKwotIG1hbl9NQU5TID0gZGhjcGQuOCBkaGNwZC5jb25mLjUgZGhjcGQubGVhc2VzLjUKLSBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKLSAKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoCmluZGV4IGIzZjhmZGIuLjJmNDQxNDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4c2VwYnVpbGQucGF0Y2gKQEAgLTQsODAgKzQsODggQEAKIAogUlAgMjAxMy8wMy8yMQogCi1SZWJhc2UgdG8gNC4zLjEKK1JlYmFzZSB0byA0LjMuNAorCiBTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CiAtLS0KKyBjbGllbnQvTWFrZWZpbGUuYW0gIHwgNCArKy0tCisgY29tbW9uL01ha2VmaWxlLmFtICB8IDMgKystCisgZGhjcGN0bC9NYWtlZmlsZS5hbSB8IDIgKysKKyBvbWFwaXAvTWFrZWZpbGUuYW0gIHwgMSArCisgcmVsYXkvTWFrZWZpbGUuYW0gICB8IDIgKy0KKyBzZXJ2ZXIvTWFrZWZpbGUuYW0gIHwgMiArLQorIDYgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCiBkaWZmIC0tZ2l0IGEvY2xpZW50L01ha2VmaWxlLmFtIGIvY2xpZW50L01ha2VmaWxlLmFtCi1pbmRleCA4NDExOTYwLi4xNzQwZjcyIDEwMDY0NAoraW5kZXggMmNiODNkOC4uNDczMGJiMyAxMDA2NDQKIC0tLSBhL2NsaWVudC9NYWtlZmlsZS5hbQogKysrIGIvY2xpZW50L01ha2VmaWxlLmFtCi1AQCAtNCw2ICs0LDggQEAKLSAjIHByb2R1Y3Rpb24gY29kZS4gU2FkbHksIHdlIGFyZSBub3QgdGhlcmUgeWV0LgotIFNVQkRJUlMgPSAuIHRlc3RzCitAQCAtNywxMSArNywxMSBAQCBTVUJESVJTID0gLiB0ZXN0cworIEJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCiAgCi0rQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKLSsKKyBBTV9DUFBGTEFHUyA9IC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCistCSAgICAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJworKwkgICAgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCiAgZGlzdF9zeXNjb25mX0RBVEEgPSBkaGNsaWVudC5jb25mLmV4YW1wbGUKICBzYmluX1BST0dSQU1TID0gZGhjbGllbnQKLSBkaGNsaWVudF9TT1VSQ0VTID0gY2xwYXJzZS5jIGRoY2xpZW50LmMgZGhjNi5jIFwKLUBAIC0xNyw4ICsxOSw4IEBAIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQotIAotIGRoY2xpZW50Lm86IGRoY2xpZW50LmMKLSAJJChDT01QSUxFKSAtRENMSUVOVF9QQVRIPSciUEFUSD0kKHNiaW5kaXIpOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIicgXAotLQkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jIGRoY2xpZW50LmMKLSsJCSAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtYyAkKHNyY2RpcikvZGhjbGllbnQuYwotIAotIGRoYzYubzogZGhjNi5jCi0gCSQoQ09NUElMRSkgLURDTElFTlRfUEFUSD0nIlBBVEg9JChzYmluZGlyKTovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiInIFwKLS0JCSAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtYyBkaGM2LmMKLSsJCSAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtYyAkKHNyY2RpcikvZGhjNi5jCistZGhjbGllbnRfU09VUkNFUyA9IGNscGFyc2UuYyBkaGNsaWVudC5jIGRoYzYuYyBcCisrZGhjbGllbnRfU09VUkNFUyA9ICQoc3JjZGlyKS9jbHBhcnNlLmMgJChzcmNkaXIpL2RoY2xpZW50LmMgJChzcmNkaXIpL2RoYzYuYyBcCisgCQkgICBzY3JpcHRzL2JzZG9zIHNjcmlwdHMvZnJlZWJzZCBzY3JpcHRzL2xpbnV4IHNjcmlwdHMvbWFjb3MgXAorIAkJICAgc2NyaXB0cy9uZXRic2Qgc2NyaXB0cy9uZXh0c3RlcCBzY3JpcHRzL29wZW5ic2QgXAorIAkJICAgc2NyaXB0cy9zb2xhcmlzIHNjcmlwdHMvb3BlbndydAogZGlmZiAtLWdpdCBhL2NvbW1vbi9NYWtlZmlsZS5hbSBiL2NvbW1vbi9NYWtlZmlsZS5hbQotaW5kZXggZWRkZWYwNS4uNWNlMDQ1ZiAxMDA2NDQKK2luZGV4IDExM2FlZTguLjBmMjRmYmIgMTAwNjQ0CiAtLS0gYS9jb21tb24vTWFrZWZpbGUuYW0KICsrKyBiL2NvbW1vbi9NYWtlZmlsZS5hbQotQEAgLTEsNCArMSw0IEBACi0tQU1fQ1BQRkxBR1MgPSAtSS4uIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCitAQCAtMSw0ICsxLDUgQEAKKy1BTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJwogK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzIC1JJCh0b3Bfc3JjZGlyKSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworKwogIEFNX0NGTEFHUyA9ICQoTERBUF9DRkxBR1MpCiAgCiAgbm9pbnN0X0xJQlJBUklFUyA9IGxpYmRoY3AuYQogZGlmZiAtLWdpdCBhL2RoY3BjdGwvTWFrZWZpbGUuYW0gYi9kaGNwY3RsL01ha2VmaWxlLmFtCi1pbmRleCAyOTg3YTUzLi5jZDcyZDc1IDEwMDY0NAoraW5kZXggY2ViMGRlMS4uYmE4ZGQ4YiAxMDA2NDQKIC0tLSBhL2RoY3BjdGwvTWFrZWZpbGUuYW0KICsrKyBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KLUBAIC0xLDMgKzEsNSBAQAorQEAgLTEsNSArMSw3IEBACisgQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKKyAKICtBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikKICsKICBiaW5fUFJPR1JBTVMgPSBvbXNoZWxsCiAgbGliX0xJQlJBUklFUyA9IGxpYmRoY3BjdGwuYQogIG5vaW5zdF9QUk9HUkFNUyA9IGNsdGVzdAogZGlmZiAtLWdpdCBhL29tYXBpcC9NYWtlZmlsZS5hbSBiL29tYXBpcC9NYWtlZmlsZS5hbQotaW5kZXggNTA3NDQ3OS4uOWMwZmFiMyAxMDA2NDQKK2luZGV4IDQ0NmE1OTQuLmRkMWFmYTAgMTAwNjQ0CiAtLS0gYS9vbWFwaXAvTWFrZWZpbGUuYW0KICsrKyBiL29tYXBpcC9NYWtlZmlsZS5hbQotQEAgLTEsMyArMSw1IEBACitAQCAtMSw0ICsxLDUgQEAKKyBCSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgogK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCi0rCisgCiAgbGliX0xJQlJBUklFUyA9IGxpYm9tYXBpLmEKICBub2luc3RfUFJPR1JBTVMgPSBzdnRlc3QKLSAKIGRpZmYgLS1naXQgYS9yZWxheS9NYWtlZmlsZS5hbSBiL3JlbGF5L01ha2VmaWxlLmFtCi1pbmRleCBlYzcyYTMxLi5mODQyMDcxIDEwMDY0NAoraW5kZXggMzA2MGVjYS4uNmQ2NTJmNiAxMDA2NDQKIC0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCiArKysgYi9yZWxheS9NYWtlZmlsZS5hbQotQEAgLTEsNCArMSw0IEBACitAQCAtMSw2ICsxLDYgQEAKKyBCSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorIAogLUFNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKICtBTV9DUFBGTEFHUyA9IC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcwogIAogIHNiaW5fUFJPR1JBTVMgPSBkaGNyZWxheQogIGRoY3JlbGF5X1NPVVJDRVMgPSBkaGNyZWxheS5jCiBkaWZmIC0tZ2l0IGEvc2VydmVyL01ha2VmaWxlLmFtIGIvc2VydmVyL01ha2VmaWxlLmFtCi1pbmRleCBhNDQ2ZjBiLi5kMGI4NzNhIDEwMDY0NAoraW5kZXggNTRmZWVkZi4uMzk5MGI5YyAxMDA2NDQKIC0tLSBhL3NlcnZlci9NYWtlZmlsZS5hbQogKysrIGIvc2VydmVyL01ha2VmaWxlLmFtCi1AQCAtNCw3ICs0LDcgQEAKLSAjIHByb2R1Y3Rpb24gY29kZS4gU2FkbHksIHdlIGFyZSBub3QgdGhlcmUgeWV0LgotIFNVQkRJUlMgPSAuIHRlc3RzCitAQCAtNiw3ICs2LDcgQEAgU1VCRElSUyA9IC4gdGVzdHMKKyAKKyBCSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgogIAogLUFNX0NQUEZMQUdTID0gLUkuLiAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJwogK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcwpAQCAtODUsNSArOTMsNSBAQAogIGRpc3Rfc3lzY29uZl9EQVRBID0gZGhjcGQuY29uZi5leGFtcGxlCiAgc2Jpbl9QUk9HUkFNUyA9IGRoY3BkCiAtLSAKLTEuOS4xCisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGlieG1sMi1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGlieG1sMi1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzNTY2MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9saWJ4bWwyLWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitBZGQgY29uZmlndXJlIGFyZ3VtZW50IHRvIG1ha2UgdGhlIGxpYnhtbDIgZGVwZW5kZW5jeSBleHBsaWNpdCBhbmQKK2RldGVybWluaXNpdGljLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKworUmViYXNlIHRvIDQuMy40CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxMSArKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDcyNmM4OGUuLjE2ODRkZjEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcxOCw3ICs3MTgsMTYgQEAgQUNfU1VCU1QoQklORFNSQ0RJUikKKyAKKyAjIFdlIG5lZWQgdG8gZmluZCBsaWJ4bWwyIGlmIGJpbmQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBlbmFibGVkCisgIyBvdGhlcndpc2Ugd2UnbGwgZmFpbCB0byBidWlsZCBvbWFwaXAvdGVzdC5jCistQUNfU0VBUkNIX0xJQlMoeG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudCwgW3htbDJdLCkKKytBQ19BUkdfV0lUSChsaWJ4bWwyLAorKwlBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnhtbDJdLCBbbGluayBhZ2FpbnN0IGxpYnhtbDIuIHRoaXMgaXMgbmVlZGVkIGlmIGJpbmQgd2FzIGJ1aWx0IHdpdGggeG1sMiBzdXBwb3J0IGVuYWJsZWRdKSwKKysJd2l0aF9saWJ4bWwyPSIkd2l0aHZhbCIsIHdpdGhfbGlieG1sMj0ibm8iKQorKworK2lmIHRlc3QgeCR3aXRoX2xpYnhtbDIgIT0geG5vOyB0aGVuCisrICAgIEFDX1NFQVJDSF9MSUJTKHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQsIFt4bWwyXSwKKysgICAgICAgICAgICAgICAgICAgW2lmIHRlc3QgeCR3aXRoX2xpYnhtbDIgIT0geGF1dG87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRkFJTFVSRShbKioqIENhbm5vdCBmaW5kIHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQgd2l0aCAtbHhtbDIgYW5kIGxpYnhtbDIgd2FzIHJlcXVlc3RlZF0pCisrICAgICAgICAgICAgICAgICAgICBmaV0pCisrZmkKKyAKKyAjIE9wZW5MREFQIHN1cHBvcnQuCisgQUNfQVJHX1dJVEgobGRhcCwKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoCmluZGV4IDU3ZTEwYjAuLjBkMGUwZGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9saW5rLXdpdGgtbGNyeXB0by5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2gKQEAgLTUsMTQgKzUsMjAgQEAKIGZyb20gYmluZCB0aGF0IGFyZSBsaW5rZWQgdG8gbGliY3J5cHRvLiBUaGlzIGlzIHdoeSBpIGFkZGVkIGEgcGF0Y2ggaW4gb3JkZXIgdG8gYWRkCiAtbGNyeXB0byB0byBMSUJTLgogCi1TaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KIAotSW5kZXg6IGRoY3AtNC4yLjMtUDItcjAvZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBkaGNwLTQuMi4zLVAyLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDItMDIgMTg6MDQ6MjAuODQzMDIzMTk2ICswMjAwCi0rKysgZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMJMjAxMi0wMi0wMiAxNzo1ODoxNi4wMDAwMDAwMDAgKzAyMDAKLUBAIC00NTYsNiArNDU2LDEwIEBACitSZWJhc2UgdG8gNC4zLjQKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMDk3YjBjMy4uNzI2Yzg4ZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTg0LDYgKzU4NCwxMCBAQCBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbdm9pZCBmb28oKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwogICMgTG9vayBmb3Igb3B0aW9uYWwgaGVhZGVycy4KICBBQ19DSEVDS19IRUFERVJTKHN5cy9zb2NrZXQuaCBuZXQvaWZfZGwuaCBuZXQvaWY2LmggcmVnZXguaCkKICAKQEAgLTIzLDMgKzI5LDYgQEAKICAjIFNvbGFyaXMgbmVlZHMgc29tZSBsaWJyYXJpZXMgZm9yIGZ1bmN0aW9ucwogIEFDX1NFQVJDSF9MSUJTKHNvY2tldCwgW3NvY2tldF0pCiAgQUNfU0VBUkNIX0xJQlMoaW5ldF9udG9hLCBbbnNsXSkKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlbW92ZS1kaGNsaWVudC1zY3JpcHQtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlbW92ZS1kaGNsaWVudC1zY3JpcHQtYmFzaC1kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5N2I5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVtb3ZlLWRoY2xpZW50LXNjcmlwdC1iYXNoLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSA4YWVkMmE5ZmYwOWNiMGQ1ODRhZDBhNzM0MGZlM2E1OTY4NzlkOWIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjEgSnVsIDIwMTYgMTk6MDc6MDIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIGRoY2xpZW50LXNjcmlwdCBiYXNoIGRlcGVuZGVuY3kKKworVGFrZSB0aGUgZGFzaCBjb21wYXRpYmxlIElQdjYgbGluay1sb2NhbCBhZGRyZXNzIHRlc3QgZnJvbSB0aGUgRGViaWFuCit2ZXJzaW9uIG9mIGRoY2xpZW50LXNjcmlwdC4KKworTm90ZSB0aGF0IGFsdGhvdWdoICJlY2hvIC1lIiBpbiB0aGUgT0UgdmVyc2lvbiBvZiBkaGNsaWVudC1zY3JpcHQgaXMKK3RlY2huaWNhbGx5IGJhc2ggc3BlY2lmaWMgdG9vLCBpdCBpcyBzdXBwb3J0ZWQgYnkgQnVzeWJveCBlY2hvIHdoZW4KK0J1c3lib3ggaXMgY29uZmlndXJlZCB3aXRoIENPTkZJR19GRUFUVVJFX0ZBTkNZX0VDSE8gZW5hYmxlZCAod2hpY2gKK2lzIHRoZSBkZWZhdWx0IGluIHRoZSBPRSBCdXN5Ym94IGRlZmNvbmZpZykgdGhlcmVmb3JlIGxlYXZlIGFzLWlzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorLS0tCisgY2xpZW50L3NjcmlwdHMvbGludXggfCA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvbGludXggYi9jbGllbnQvc2NyaXB0cy9saW51eAoraW5kZXggMjMyYTBhYS4uMTM4M2Y0NiAxMDA3NTUKKy0tLSBhL2NsaWVudC9zY3JpcHRzL2xpbnV4CisrKysgYi9jbGllbnQvc2NyaXB0cy9saW51eAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAjIGRoY2xpZW50LXNjcmlwdCBmb3IgTGludXguIERhbiBIYWxiZXJ0LCBNYXJjaCwgMTk5Ny4KKyAjIFVwZGF0ZWQgZm9yIExpbnV4IDIuWzEyXSBieSBCcmlhbiBKLiBNdXJyZWxsLCBKYW51YXJ5IDE5OTkuCisgIyBObyBndWFyYW50ZWVzIGFib3V0IHRoaXMuIEknbSBhIG5vdmljZSBhdCB0aGUgZGV0YWlscyBvZiBMaW51eAorQEAgLTQ3LDExICs0NywxMSBAQCBtYWtlX3Jlc29sdl9jb25mKCkgeworICAgICBpZiBbICJ4JHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH0iICE9IHggXSA7IHRoZW4KKyAgICAgICByZXNvbHZfY29uZj0ic2VhcmNoICR7bmV3X2RoY3A2X2RvbWFpbl9zZWFyY2h9XG4iCisgICAgIGZpCistICAgIHNob3B0IC1zIG5vY2FzZW1hdGNoIAorICAgICBmb3IgbmFtZXNlcnZlciBpbiAke25ld19kaGNwNl9uYW1lX3NlcnZlcnN9IDsgZG8KKyAgICAgICAjIElmIHRoZSBuYW1lc2VydmVyIGhhcyBhIGxpbmstbG9jYWwgYWRkcmVzcworICAgICAgICMgYWRkIGEgPHpvbmVfaWQ+IChpbnRlcmZhY2UgbmFtZSkgdG8gaXQuCistICAgICAgaWYgIFtbICIkbmFtZXNlcnZlciIgPX4gXmZlODA6OiBdXQorKyAgICAgIGlmIFsgIiR7bmFtZXNlcnZlciMjZmU4MDo6fSIgIT0gIiRuYW1lc2VydmVyIiBdIHx8CisrICAgICAgICAgWyAiJHtuYW1lc2VydmVyIyNGRTgwOjp9IiAhPSAiJG5hbWVzZXJ2ZXIiIF0KKyAgICAgICB0aGVuCisgCXpvbmVfaWQ9IiUkaW50ZXJmYWNlIgorICAgICAgIGVsc2UKK0BAIC01OSw3ICs1OSw2IEBAIG1ha2VfcmVzb2x2X2NvbmYoKSB7CisgICAgICAgZmkKKyAgICAgICByZXNvbHZfY29uZj0iJHtyZXNvbHZfY29uZn1uYW1lc2VydmVyICR7bmFtZXNlcnZlcn0kem9uZV9pZFxuIgorICAgICBkb25lCistICAgIHNob3B0IC11IG5vY2FzZW1hdGNoIAorIAorICAgICBlY2hvIC1lICIke3Jlc29sdl9jb25mfSIgPiAvZXRjL3Jlc29sdi5jb25mCisgICBmaQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCmluZGV4IDYxZGQ2YTcuLmQ4NGRmNWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCkBAIC04LDIzICs4LDMyIEBACiAKIFNpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KIAotLS0tIGRoY3AtNC4yLjUtUDEvY2xpZW50L3NjcmlwdHMvbGludXgub3JpZwkyMDEzLTA5LTA0IDEyOjIyOjU1LjAwMDAwMDAwMCArMDUwMAotKysrIGRoY3AtNC4yLjUtUDEvY2xpZW50L3NjcmlwdHMvbGludXgJMjAxMy0wOS0wNCAxMjo1MjoxOS4wNjg3NjE1MTggKzA1MDAKLUBAIC0xMDMsMTcgKzEwMywxMSBAQAorUmViYXNlIHRvIDQuMy40CisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9zY3JpcHRzL2xpbnV4IHwgODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAzNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NsaWVudC9zY3JpcHRzL2xpbnV4IGIvY2xpZW50L3NjcmlwdHMvbGludXgKK2luZGV4IGEwMmNmZDkuLjIzMmEwYWEgMTAwNzU1CistLS0gYS9jbGllbnQvc2NyaXB0cy9saW51eAorKysrIGIvY2xpZW50L3NjcmlwdHMvbGludXgKK0BAIC0xMDEsMTcgKzEwMSwxMSBAQCBmaQogIGlmIFsgeCRvbGRfYnJvYWRjYXN0X2FkZHJlc3MgIT0geCBdOyB0aGVuCiAgICBvbGRfYnJvYWRjYXN0X2FyZz0iYnJvYWRjYXN0ICRvbGRfYnJvYWRjYXN0X2FkZHJlc3MiCiAgZmkKIC1pZiBbIHgkbmV3X3N1Ym5ldF9tYXNrICE9IHggXTsgdGhlbgogLSAgbmV3X3N1Ym5ldF9hcmc9Im5ldG1hc2sgJG5ld19zdWJuZXRfbWFzayIKLS1maQorK2lmIFsgLW4gIiRuZXdfc3VibmV0X21hc2siIF07IHRoZW4KKysgICAgbmV3X21hc2s9Ii8kbmV3X3N1Ym5ldF9tYXNrIgorIGZpCiAtaWYgWyB4JG9sZF9zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KIC0gIG9sZF9zdWJuZXRfYXJnPSJuZXRtYXNrICRvbGRfc3VibmV0X21hc2siCiAtZmkKIC1pZiBbIHgkYWxpYXNfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCiAtICBhbGlhc19zdWJuZXRfYXJnPSJuZXRtYXNrICRhbGlhc19zdWJuZXRfbWFzayIKLStpZiBbIC1uICIkbmV3X3N1Ym5ldF9tYXNrIiBdOyB0aGVuCi0rICAgIG5ld19tYXNrPSIvJG5ld19zdWJuZXRfbWFzayIKLSBmaQorLWZpCiAtaWYgWyB4JG5ld19pbnRlcmZhY2VfbXR1ICE9IHggXTsgdGhlbgogLSAgbXR1X2FyZz0ibXR1ICRuZXdfaW50ZXJmYWNlX210dSIKICtpZiBbIC1uICIkYWxpYXNfc3VibmV0X21hc2siIF07IHRoZW4KQEAgLTMyLDcgKzQxLDcgQEAKICBmaQogIGlmIFsgeCRJRl9NRVRSSUMgIT0geCBdOyB0aGVuCiAgICBtZXRyaWNfYXJnPSJtZXRyaWMgJElGX01FVFJJQyIKLUBAIC0xMjcsOSArMTIxLDkgQEAKK0BAIC0xMjUsOSArMTE5LDkgQEAgZmkKICBpZiBbIHgkcmVhc29uID0geFBSRUlOSVQgXTsgdGhlbgogICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCiAgICAgICMgQnJpbmcgZG93biBhbGlhcyBpbnRlcmZhY2UuIEl0cyByb3V0ZXMgd2lsbCBkaXNhcHBlYXIgdG9vLgpAQCAtNDQsNyArNTMsNyBAQAogIAogICAgIyBXZSBuZWVkIHRvIGdpdmUgdGhlIGtlcm5lbCBzb21lIHRpbWUgdG8gZ2V0IHRoZSBpbnRlcmZhY2UgdXAuCiAgICBzbGVlcCAxCi1AQCAtMTU2LDI1ICsxNTAsMzAgQEAKK0BAIC0xNTQsMjUgKzE0OCwzMCBAQCBpZiBbIHgkcmVhc29uID0geEJPVU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRU5FVyBdIHx8IFwKICAgIGlmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4IF0gJiYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdICYmIFwKICAJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHgkb2xkX2lwX2FkZHJlc3MgXTsgdGhlbgogICAgICAjIFBvc3NpYmxlIG5ldyBhbGlhcy4gUmVtb3ZlIG9sZCBhbGlhcy4KQEAgLTgxLDcgKzkwLDcgQEAKICAgICAgZG9uZQogICAgZWxzZQogICAgICAjIHdlIGhhdmVuJ3QgY2hhbmdlZCB0aGUgYWRkcmVzcywgaGF2ZSB3ZSBjaGFuZ2VkIG90aGVyIG9wdGlvbnMgICAgICAgICAgIAotQEAgLTE4MiwyMSArMTgxLDIzIEBACitAQCAtMTgwLDIxICsxNzksMjMgQEAgaWYgWyB4JHJlYXNvbiA9IHhCT1VORCBdIHx8IFsgeCRyZWFzb24gPSB4UkVORVcgXSB8fCBcCiAgICAgIGlmIFsgeCRuZXdfcm91dGVycyAhPSB4IF0gJiYgWyB4JG5ld19yb3V0ZXJzICE9IHgkb2xkX3JvdXRlcnMgXSA7IHRoZW4KICAgICAgICAjIGlmIHdlJ3ZlIGNoYW5nZWQgcm91dGVycyBkZWxldGUgdGhlIG9sZCBhbmQgYWRkIHRoZSBuZXcuCiAgICAgICAgZm9yIHJvdXRlciBpbiAkb2xkX3JvdXRlcnM7IGRvCkBAIC0xMTIsNyArMTIxLDcgQEAKICAgIGZpCiAgICBtYWtlX3Jlc29sdl9jb25mCiAgICBleGl0X3dpdGhfaG9va3MgMAotQEAgLTIwNiw0MiArMjA3LDQ5IEBACitAQCAtMjA0LDQyICsyMDUsNDkgQEAgaWYgWyB4JHJlYXNvbiA9IHhFWFBJUkUgXSB8fCBbIHgkcmVhc29uID0geEZBSUwgXSB8fCBbIHgkcmVhc29uID0geFJFTEVBU0UgXSBcCiAgICAgfHwgWyB4JHJlYXNvbiA9IHhTVE9QIF07IHRoZW4KICAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgogICAgICAjIFR1cm4gb2ZmIGFsaWFzIGludGVyZmFjZS4KQEAgLTE3NCwzICsxODMsNiBAQAogICAgZXhpdF93aXRoX2hvb2tzIDEKICBmaQogIAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvdHdlYWstdG8tc3VwcG9ydC1leHRlcm5hbC1iaW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3R3ZWFrLXRvLXN1cHBvcnQtZXh0ZXJuYWwtYmluZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2M2YWJiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3R3ZWFrLXRvLXN1cHBvcnQtZXh0ZXJuYWwtYmluZC5wYXRjaApAQCAtMCwwICsxLDExNyBAQAorRnJvbSBhZDdiYjQwMWY0NzcxNGZjMzBjNDA4ODUzYjc5NmNlMGYxYzdlNjVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAxMSBKdW4gMjAxNiAyMjo1MTo0NCAtMDQwMAorU3ViamVjdDogW1BBVENIXSB0d2VhayB0byBzdXBwb3J0IGV4dGVybmFsIGJpbmQKKworVHdlYWsgdGhlIGV4dGVybmFsIGJpbmQgdG8gb2UtY29yZSdzIHN5c3Jvb3QgcmF0aGVyIHRoYW4KK2V4dGVybmFsIGJpbmQgc291cmNlIGJ1aWxkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgPG9lLWNvcmUgc3BlY2lmaWM+CisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9NYWtlZmlsZS5hbSAgICAgICB8IDIgKy0KKyBjbGllbnQvdGVzdHMvTWFrZWZpbGUuYW0gfCAyICstCisgY29tbW9uL3Rlc3RzL01ha2VmaWxlLmFtIHwgMiArLQorIGRoY3BjdGwvTWFrZWZpbGUuYW0gICAgICB8IDIgKy0KKyBvbWFwaXAvTWFrZWZpbGUuYW0gICAgICAgfCAyICstCisgcmVsYXkvTWFrZWZpbGUuYW0gICAgICAgIHwgMiArLQorIHNlcnZlci9NYWtlZmlsZS5hbSAgICAgICB8IDIgKy0KKyBzZXJ2ZXIvdGVzdHMvTWFrZWZpbGUuYW0gfCAyICstCisgOCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jbGllbnQvTWFrZWZpbGUuYW0gYi9jbGllbnQvTWFrZWZpbGUuYW0KK2luZGV4IDQ3MzBiYjMuLjg0ZDgxMzEgMTAwNjQ0CistLS0gYS9jbGllbnQvTWFrZWZpbGUuYW0KKysrKyBiL2NsaWVudC9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBACisgIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KKyBTVUJESVJTID0gLiB0ZXN0cworIAorLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisrQklORExJQkRJUiA9IEBCSU5ERElSQAorIAorIEFNX0NQUEZMQUdTID0gLURDTElFTlRfUEFUSD0nIlBBVEg9JChzYmluZGlyKTovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiInIFwKKyAJICAgICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworZGlmZiAtLWdpdCBhL2NsaWVudC90ZXN0cy9NYWtlZmlsZS5hbSBiL2NsaWVudC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZGE2OWVhOS4uZmUzNWU1NyAxMDA2NDQKKy0tLSBhL2NsaWVudC90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvY2xpZW50L3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyBTVUJESVJTID0gLgorIAorLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisrQklORExJQkRJUiA9IEBCSU5ERElSQAorIAorIEFNX0NQUEZMQUdTID0gJChBVEZfQ0ZMQUdTKSAtRFVOSVRfVEVTVCAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyBBTV9DUFBGTEFHUyArPSAtSUBCSU5ERElSQC9pbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKQorZGlmZiAtLWdpdCBhL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbSBiL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZjhkNmIwZS4uMDVjZDljMSAxMDA2NDQKKy0tLSBhL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvY29tbW9uL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyBTVUJESVJTID0gLgorIAorLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisrQklORExJQkRJUiA9IEBCSU5ERElSQAorIAorIEFNX0NQUEZMQUdTID0gJChBVEZfQ0ZMQUdTKSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKK2RpZmYgLS1naXQgYS9kaGNwY3RsL01ha2VmaWxlLmFtIGIvZGhjcGN0bC9NYWtlZmlsZS5hbQoraW5kZXggYmE4ZGQ4Yi4uOWIyNDg2ZSAxMDA2NDQKKy0tLSBhL2RoY3BjdGwvTWFrZWZpbGUuYW0KKysrKyBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK0BAIC0xLDQgKzEsNCBAQAorLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisrQklORExJQkRJUiA9IEBCSU5ERElSQAorIAorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzIC1JJCh0b3Bfc3JjZGlyKQorIAorZGlmZiAtLWdpdCBhL29tYXBpcC9NYWtlZmlsZS5hbSBiL29tYXBpcC9NYWtlZmlsZS5hbQoraW5kZXggZGQxYWZhMC4uZTRhODU5OSAxMDA2NDQKKy0tLSBhL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGIvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorK0JJTkRMSUJESVIgPSBAQklORERJUkAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGxpYl9MSUJSQVJJRVMgPSBsaWJvbWFwaS5hCitkaWZmIC0tZ2l0IGEvcmVsYXkvTWFrZWZpbGUuYW0gYi9yZWxheS9NYWtlZmlsZS5hbQoraW5kZXggNmQ2NTJmNi4uYjNiZjU3OCAxMDA2NDQKKy0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCisrKysgYi9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKKytCSU5ETElCRElSID0gQEJJTkRESVJACisgCisgQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK2luZGV4IDM5OTBiOWMuLmI1ZDhjMmQgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBACisgIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KKyBTVUJESVJTID0gLiB0ZXN0cworIAorLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisrQklORExJQkRJUiA9IEBCSU5ERElSQAorIAorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorZGlmZiAtLWdpdCBhL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbSBiL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNjVhOWY3NC4uMjg5MjMwOSAxMDA2NDQKKy0tLSBhL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvc2VydmVyL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyBTVUJESVJTID0gLgorIAorLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisrQklORExJQkRJUiA9IEBCSU5ERElSQAorIAorIEFNX0NQUEZMQUdTID0gJChBVEZfQ0ZMQUdTKSAtRFVOSVRfVEVTVCAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyBBTV9DUFBGTEFHUyArPSAtSUBCSU5ERElSQC9pbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKQorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOGNkMjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcmVxdWlyZSBkaGNwLmluYwotCi1TUkNfVVJJICs9ICJmaWxlOi8vZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCi0gICAgICAgICAgICBmaWxlOi8vZml4LWV4dGVybmFsLWJpbmQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE1LTg2MDUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtc2l0ZS5oLWVuYWJsZS1nZW50bGUtc2h1dGRvd24ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTI3NzQucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjNTU3N2IwOWM5MDE3Y2RkMzE5YTExZmY2MzY0MjY4ZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1NTNjNDk0NWIwOWIxYzFiOTA0YzQ3ODBmMzRmNzJhYWVmYTJmYzhjNjU1NjcxNWRlMGJjOWQ0ZTNkMjU1ZWRlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNTFlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjQuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBkaGNwLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICBmaWxlOi8vbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1zaXRlLmgtZW5hYmxlLWdlbnRsZS1zaHV0ZG93bi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGlieG1sMi1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3R3ZWFrLXRvLXN1cHBvcnQtZXh0ZXJuYWwtYmluZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWRoY2xpZW50LXNjcmlwdC1iYXNoLWRlcGVuZGVuY3kucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMTM4MzE5ZmUyYjc4OGNmNGJkZjM0ZmJlYWY5ZmY1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNTExNWFlZTNkZDNlNjkyNWRlNGJhNDdiODBhYjczMmJhNDhiNDgxYzgzNjRiNmViYWRlMmQ0MzY5OGQ2MDdlIgorCitQQUNLQUdFQ09ORklHID89ICIiCitQQUNLQUdFQ09ORklHW2JpbmQtaHR0cHN0YXRzXSA9ICItLXdpdGgtbGlieG1sMiwtLXdpdGhvdXQtbGlieG1sMixsaWJ4bWwyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlCmluZGV4IGEyZDgxODkuLjE1ZmY5MjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcmVsYXkuc2VydmljZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3JlbGF5LnNlcnZpY2UKQEAgLTMsNyArMyw4IEBACiBBZnRlcj1uZXR3b3JrLnRhcmdldAogCiBbU2VydmljZV0KLUV4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcmVsYXkgLWQgLS1uby1waWQKK0Vudmlyb25tZW50RmlsZT1AU1lTQ09ORkRJUkAvZGVmYXVsdC9kaGNwLXJlbGF5CitFeGVjU3RhcnQ9QFNCSU5ESVJAL2RoY3JlbGF5IC1kIC0tbm8tcGlkIC1xICRTRVJWRVJTCiAKIFtJbnN0YWxsXQogV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwppbmRleCA4NmU5MzEwLi42M2U3Y2E5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jCkBAIC0xMSw3ICsxMSw3IEBACiAKIERFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGlwdGFibGVzIGVsZnV0aWxzIgogCi1pbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcyBiYXNoLWNvbXBsZXRpb24KIAogRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgS0VSTkVMX0lOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0gRE9DRElSPSR7ZG9jZGlyfS9pcHJvdXRlMiBTVUJESVJTPSdsaWIgdGMgaXAgYnJpZGdlIG1pc2MgZ2VubCcgU0JJTkRJUj0nJHtiYXNlX3NiaW5kaXJ9JyBMSUJESVI9JyR7bGliZGlyfSciCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyL2lwcm91dGUyLTQuMy4wLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9pcHJvdXRlMi00LjMuMC1tdXNsLnBhdGNoCmluZGV4IDFiNDE1YTUuLjhjMDc4ZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyL2lwcm91dGUyLTQuMy4wLW11c2wucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvaXByb3V0ZTItNC4zLjAtbXVzbC5wYXRjaApAQCAtMSw2NCArMSwzNSBAQAotRnJvbSA0ODU5NjcwOWQ4YWI1OTcyN2I3OWE1YzZkYjMzZWJiMjUxYzM2NTQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+Ci1EYXRlOiBUaHUsIDE5IE5vdiAyMDE1IDE3OjQ0OjI1ICswMTAwCiBTdWJqZWN0OiBbUEFUQ0hdIEF2b2lkIGluNl9hZGRyIHJlZGVmaW5pdGlvbgotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAogCiBEdWUgdG8gYm90aCA8bmV0aW5ldC9pbi5oPiBhbmQgPGxpbnV4L2luNi5oPiBiZWluZyBpbmNsdWRlZCwgdGhlCiBpbjZfYWRkciBpcyBiZWluZyByZWRlZmluZWQ6IG9uY2UgZnJvbSB0aGUgQyBsaWJyYXJ5IGhlYWRlcnMgYW5kIG9uY2UKIGZyb20gdGhlIGtlcm5lbCBoZWFkZXJzLiBUaGlzIGNhdXNlcyBzb21lIGJ1aWxkIGZhaWx1cmVzIHdpdGggZm9yCi1leGFtcGxlIHRoZSBtdXNsIEMgbGlicmFyeToKLQotSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUvbGludXgveGZybS5oOjQ6MCwKLSAgICAgICAgICAgICAgICAgZnJvbSB4ZnJtLmg6MjksCi0gICAgICAgICAgICAgICAgIGZyb20gaXB4ZnJtLmM6Mzk6Ci0uLi9pbmNsdWRlL2xpbnV4L2luNi5oOjMyOjg6IGVycm9yOiByZWRlZmluaXRpb24gb2Yg4oCYc3RydWN0IGluNl9hZGRy4oCZCi0gc3RydWN0IGluNl9hZGRyIHsKLSAgICAgICAgXgotSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uLi9vdXRwdXQvaG9zdC91c3IveDg2XzY0LWJ1aWxkcm9vdC1saW51eC1tdXNsL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0ZGIuaDo5OjAsCi0gICAgICAgICAgICAgICAgIGZyb20gaXB4ZnJtLmM6MzQ6Ci0uLi4vb3V0cHV0L2hvc3QvdXNyL3g4Nl82NC1idWlsZHJvb3QtbGludXgtbXVzbC9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaDoyNDo4OiBub3RlOiBvcmlnaW5hbGx5IGRlZmluZWQgaGVyZQotIHN0cnVjdCBpbjZfYWRkcgotICAgICAgICBeCitleGFtcGxlIHRoZSBtdXNsIEMgbGlicmFyeS4KIAogSW4gb3JkZXIgdG8gZml4IHRoaXMsIHVzZSBqdXN0IHRoZSBDIGxpYnJhcnkgaGVhZGVyIDxuZXRpbmV0L2luLmg+LgotCiBPcmlnaW5hbCBwYXRjaCB0YWtlbiBmcm9tCiBodHRwOi8vZ2l0LmFscGluZWxpbnV4Lm9yZy9jZ2l0L2Fwb3J0cy90cmVlL21haW4vaXByb3V0ZTIvbXVzbC1maXhlcy5wYXRjaC4KIAotU2lnbmVkLW9mZi1ieTogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+Ci0tLS0KKyhSZWZyZXNoZWQgdGhlIHBhdGNoIGZvciA0LjYgcmVsZWFzZSkKKwogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKLSBpbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmggfCAyIC0tCi0gaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCAgICAgICAgICAgIHwgMSAtCi0gaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCAgICAgICAgICAgIHwgMiAtLQotIGluY2x1ZGUvbGludXgveGZybS5oICAgICAgICAgICAgICAgICB8IDEgLQotIDQgZmlsZXMgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCBiL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAotaW5kZXggN2U4NzgyOC4uOTU2NmJlNSAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAotKysrIGIvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCi1AQCAtMTUsMTIgKzE1LDEwIEBACi0gI2Vsc2UgLyogbGliYzUgKi8KLSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotICNpbmNsdWRlIDxsaW51eC9pcC5oPgotLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotICNpbmNsdWRlIDxsaW51eC9pZi5oPgotICNpbmNsdWRlIDxsaW51eC9pY21wLmg+Ci0gI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KLSAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLS0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0gI2VuZGlmCi0gI2VuZGlmCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKLWluZGV4IGVlMTk3YTMuLmY4MjNhYTQgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCi0rKysgYi9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgorLS0tLQorZGlmZiAtTmF1ciBpcHJvdXRlMi00LjYuMC1vcmlnL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCBpcHJvdXRlMi00LjYuMC9pbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmgKKy0tLSBpcHJvdXRlMi00LjYuMC1vcmlnL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAkyMDE2LTA1LTIzIDEyOjAzOjIzLjgyMTgyNjkxMCArMDMwMAorKysrIGlwcm91dGUyLTQuNi4wL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAkyMDE2LTA1LTIzIDEyOjA0OjIzLjcxNDA3ODE1NCArMDMwMAorQEAgLTYsNyArNiw2IEBACisgI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CistI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CitkaWZmIC1OYXVyIGlwcm91dGUyLTQuNi4wLW9yaWcvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBpcHJvdXRlMi00LjYuMC9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCistLS0gaXByb3V0ZTItNC42LjAtb3JpZy9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCTIwMTYtMDUtMjMgMTI6MDM6MjMuODIxODI2OTEwICswMzAwCisrKysgaXByb3V0ZTItNC42LjAvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaAkyMDE2LTA1LTIzIDEyOjA0OjIzLjcxNjA3ODEyOSArMDMwMAogQEAgLTE1LDcgKzE1LDYgQEAKICAKICAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTY3LDEwICszOCw5IEBACiAgCiAgI2RlZmluZSBTWVNGU19CUklER0VfQVRUUgkiYnJpZGdlIgogICNkZWZpbmUgU1lTRlNfQlJJREdFX0ZEQgkiYnJmb3J3YXJkIgotZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCi1pbmRleCBiNzFiNGM5Li4zZTRlNmFlIDEwMDY0NAotLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAotKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorZGlmZiAtTmF1ciBpcHJvdXRlMi00LjYuMC1vcmlnL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggaXByb3V0ZTItNC42LjAvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorLS0tIGlwcm91dGUyLTQuNi4wLW9yaWcvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAkyMDE2LTA1LTIzIDEyOjAzOjIzLjgyMTgyNjkxMCArMDMwMAorKysrIGlwcm91dGUyLTQuNi4wL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgJMjAxNi0wNS0yMyAxMjowNDoyMy43MTcwNzgxMTcgKzAzMDAKIEBAIC00LDggKzQsNiBAQAogICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogIApAQCAtODAsMTAgKzUwLDIwIEBACiAgCiAgLyogUmVzcG9uc2VzIGZyb20gaG9vayBmdW5jdGlvbnMuICovCiAgI2RlZmluZSBORl9EUk9QIDAKLWRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCi1pbmRleCBiOGY1NDUxLi5hOTc2MWE1IDEwMDY0NAotLS0tIGEvaW5jbHVkZS9saW51eC94ZnJtLmgKLSsrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCitkaWZmIC1OYXVyIGlwcm91dGUyLTQuNi4wLW9yaWcvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBpcHJvdXRlMi00LjYuMC9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCistLS0gaXByb3V0ZTItNC42LjAtb3JpZy9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCTIwMTYtMDUtMTggMjE6NTY6MDIuMDAwMDAwMDAwICswMzAwCisrKysgaXByb3V0ZTItNC42LjAvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAkyMDE2LTA1LTIzIDEyOjA5OjIyLjg4ODMzNzk2MSArMDMwMAorQEAgLTE3LDcgKzE3LDYgQEAKKyAKKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAKKy0jaW5jbHVkZSA8bGludXgvaWYuaD4KKyAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyAKKyAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CitkaWZmIC1OYXVyIGlwcm91dGUyLTQuNi4wLW9yaWcvaW5jbHVkZS9saW51eC94ZnJtLmggaXByb3V0ZTItNC42LjAvaW5jbHVkZS9saW51eC94ZnJtLmgKKy0tLSBpcHJvdXRlMi00LjYuMC1vcmlnL2luY2x1ZGUvbGludXgveGZybS5oCTIwMTYtMDUtMjMgMTI6MDM6MjMuODIxODI2OTEwICswMzAwCisrKysgaXByb3V0ZTItNC42LjAvaW5jbHVkZS9saW51eC94ZnJtLmgJMjAxNi0wNS0yMyAxMjowNDoyMy43MTgwNzgxMDQgKzAzMDAKIEBAIC0xLDcgKzEsNiBAQAogICNpZm5kZWYgX0xJTlVYX1hGUk1fSAogICNkZWZpbmUgX0xJTlVYX1hGUk1fSApAQCAtOTIsNiArNzIsMTQgQEAKICAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICAKICAvKiBBbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhpcyBmaWxlIG1heSBub3QgY2hhbmdlIHNpemUgYXMgdGhleSBhcmUKLS0tIAotMi42LjMKLQorZGlmZiAtTmF1ciBpcHJvdXRlMi00LjYuMC1vcmlnL2luY2x1ZGUvdXRpbHMuaCBpcHJvdXRlMi00LjYuMC9pbmNsdWRlL3V0aWxzLmgKKy0tLSBpcHJvdXRlMi00LjYuMC1vcmlnL2luY2x1ZGUvdXRpbHMuaAkyMDE2LTA1LTIzIDEyOjAzOjIzLjgyMTgyNjkxMCArMDMwMAorKysrIGlwcm91dGUyLTQuNi4wL2luY2x1ZGUvdXRpbHMuaAkyMDE2LTA1LTIzIDEyOjA0OjIzLjcxODA3ODEwNCArMDMwMAorQEAgLTEsNiArMSw3IEBACisgI2lmbmRlZiBfX1VUSUxTX0hfXworICNkZWZpbmUgX19VVElMU19IX18gMQorIAorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gIC8qIE1BWFBBVEhMRU4gKi8KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorICNpbmNsdWRlIDxyZXNvbHYuaD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyL2lwcm91dGUyLWZpeC1idWlsZGluZy13aXRoLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9pcHJvdXRlMi1maXgtYnVpbGRpbmctd2l0aC1tdXNsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODNhMjQzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyL2lwcm91dGUyLWZpeC1idWlsZGluZy13aXRoLW11c2wucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1pcHJvdXRlMjogZml4IGJ1aWxkaW5nIHdpdGggbXVzbAotCi1XZSBuZWVkIGxpbWl0cy5oIGZvciBQQVRIX01BWCwgZml4ZXM6Ci0KLXJ0X25hbWVzLmM6MzY0OjEzOiBlcnJvcjog4oCYUEFUSF9NQVjigJkgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMKLWZ1bmN0aW9uKQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IEd1c3Rhdm8gWmFjYXJpYXMgPGd1c3Rhdm9AemFjYXJpYXMuY29tLmFyPgotU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+Ci0tLS0KLWRpZmYgLS1naXQgYS9saWIvcnRfbmFtZXMuYyBiL2xpYi9ydF9uYW1lcy5jCi1pbmRleCBmNmQxN2MwLi5iNjY1ZDNlIDEwMDY0NAotLS0tIGEvbGliL3J0X25hbWVzLmMKLSsrKyBiL2xpYi9ydF9uYW1lcy5jCi1AQCAtMTgsNiArMTgsNyBAQAotICNpbmNsdWRlIDxzeXMvdGltZS5oPgotICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0gI2luY2x1ZGUgPGRpcmVudC5oPgotKyNpbmNsdWRlIDxsaW1pdHMuaD4KLSAKLSAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC40LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjQuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk3OWU4Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjQuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXJlcXVpcmUgaXByb3V0ZTIuaW5jCi0KLVNSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9uZXQvJHtCUE59LyR7QlB9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtY3Jvc3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vaXByb3V0ZTItNC4zLjAtbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9pcHJvdXRlMi1maXgtYnVpbGRpbmctd2l0aC1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiZDc2MjY1M2VjM2UxYWIwZDRhOTY4OWUxNjljYTE4NGYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmM5MWMzNjcyODhhMTlmNzhlZjgwMGNkNjg0MDM2M2JlMWYyMmRhODQzNmZiYWU4OGUxYTcyNTA0OTBkNjUxNCIKLQotIyBDRkxBR1MgYXJlIGNvbXB1dGVkIGluIE1ha2VmaWxlIGFuZCByZWZlcmVuY2UgQ0NPUFRTCi0jCi1FWFRSQV9PRU1BS0VfYXBwZW5kID0gIiBDQ09QVFM9JyR7Q0ZMQUdTfSciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjcuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNmY5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjcuMC5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGlwcm91dGUyLmluYworCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmV0LyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2lwcm91dGUyLTQuMy4wLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNGIyMDU4MzBjZGMyNzAyZjhhMGNiZDYyMzIxMjljZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZjYwZGJjZmIzM2E3OWRhYWUwNjM4ZjUzYmRjYWE0MzEwYzBhYTU5YWUzOWFmOGEyMzQwMjBkYzY5YmI3YjkyIgorCisjIENGTEFHUyBhcmUgY29tcHV0ZWQgaW4gTWFrZWZpbGUgYW5kIHJlZmVyZW5jZSBDQ09QVFMKKyMKK0VYVFJBX09FTUFLRV9hcHBlbmQgPSAiIENDT1BUUz0nJHtDRkxBR1N9JyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3LzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2gKaW5kZXggMmU1MmM4MC4uNzE1Yjg4ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2gKQEAgLTcsMjcgKzcsMzMgQEAKIFNpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CiBTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KIC0tLQotZGlmZiAtTmF1ciBpdy00LjMtb3JpZ2luL3ZlcnNpb24uc2ggaXctNC4zL3ZlcnNpb24uc2gKLS0tLSBpdy00LjMtb3JpZ2luL3ZlcnNpb24uc2gJMjAxNS0xMS0yMCAxNjozNzo1OC43NjIwNzcxNjIgKzAyMDAKLSsrKyBpdy00LjMvdmVyc2lvbi5zaAkyMDE1LTExLTIwIDE2OjUyOjA1LjUyNjQ5MTE1MCArMDIwMAotQEAgLTMsMjEgKzMsNyBAQAotIFZFUlNJT049IjQuMyIKLSBPVVQ9IiQxIgorZGlmZiAtTmF1ciBpdy00Ljctb3JpZy92ZXJzaW9uLnNoIGl3LTQuNy92ZXJzaW9uLnNoCistLS0gaXctNC43LW9yaWcvdmVyc2lvbi5zaAkyMDE2LTA1LTMxIDEyOjUyOjQ2LjAwMDAwMDAwMCArMDMwMAorKysrIGl3LTQuNy92ZXJzaW9uLnNoCTIwMTYtMDYtMDEgMTE6MjE6NTguMzA3NDA5MDYwICswMzAwCitAQCAtMTUsMjcgKzE1LDcgQEAKKyBTUkNfRElSPSQoY2QgJHtTUkNfRElSfTsgcHdkKQorIGNkICIke1NSQ19ESVJ9IgogIAorLXY9IiIKIC1pZiBbIC1kIC5naXQgXSAmJiBoZWFkPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgMj4vZGV2L251bGxgOyB0aGVuCi0tCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC0tdW5tZXJnZWQgPiAvZGV2L251bGwKLS0JZGVzY3I9JChnaXQgZGVzY3JpYmUgLS1tYXRjaD12KikKKy0gICAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLS11bm1lcmdlZCA+IC9kZXYvbnVsbAorLSAgICBkZXNjcj0kKGdpdCBkZXNjcmliZSAtLW1hdGNoPXYqIDI+L2Rldi9udWxsKQorLSAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKy0gICAgICAgICMgb24gZ2l0IGJ1aWxkcyBjaGVjayB0aGF0IHRoZSB2ZXJzaW9uIG51bWJlciBhYm92ZQorLSAgICAgICAgIyBpcyBjb3JyZWN0Li4uCistICAgICAgICBpZiBbICIke2Rlc2NyJSUtKn0iID0gInYkVkVSU0lPTiIgXTsgdGhlbgorLSAgICAgICAgICAgIHY9IiR7ZGVzY3Ijdn0iCistICAgICAgICAgICAgaWYgZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCB8IHJlYWQgZHVtbXkgOyB0aGVuCistICAgICAgICAgICAgICAgIHY9IiR2Ii1kaXJ0eQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLWZpCiAtCi0tCSMgb24gZ2l0IGJ1aWxkcyBjaGVjayB0aGF0IHRoZSB2ZXJzaW9uIG51bWJlciBhYm92ZQotLQkjIGlzIGNvcnJlY3QuLi4KLS0JWyAiJHtkZXNjciUlLSp9IiA9ICJ2JFZFUlNJT04iIF0gfHwgZXhpdCAyCi0tCi0tCXY9IiR7ZGVzY3Ijdn0iCi0tCWlmIGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQgfCByZWFkIGR1bW15IDsgdGhlbgotLQkJdj0iJHYiLWRpcnR5Ci0tCWZpCi0tZWxzZQotLQl2PSIkVkVSU0lPTiIKKy0jIHNldCB0byB0aGUgZGVmYXVsdCB2ZXJzaW9uIHdoZW4gZmFpbGVkIHRvIGdldCB0aGUgdmVyc2lvbgorLSMgaW5mb3JtYXRpb24gd2l0aCBnaXQKKy1pZiBbIC16ICIke3Z9IiBdOyB0aGVuCistICAgIHY9IiRWRVJTSU9OIgogLWZpCiArdj0iJFZFUlNJT04iCiAgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pd180LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pd180LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NjVlN2EuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotU1VNTUFSWSA9ICJubDgwMjExIGJhc2VkIENMSSBjb25maWd1cmF0aW9uIHV0aWxpdHkgZm9yIHdpcmVsZXNzIGRldmljZXMiCi1ERVNDUklQVElPTiA9ICJpdyBpcyBhIG5ldyBubDgwMjExIGJhc2VkIENMSSBjb25maWd1cmF0aW9uIHV0aWxpdHkgZm9yIFwKLXdpcmVsZXNzIGRldmljZXMuIEl0IHN1cHBvcnRzIGFsbW9zdCBhbGwgbmV3IGRyaXZlcnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgXAotdG8gdGhlIGtlcm5lbCByZWNlbnRseS4gIgotSE9NRVBBR0UgPSAiaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRG9jdW1lbnRhdGlvbi9pdyIKLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc4NjE4YTVjNGFmMjVlOWI5M2VmMGJlMWE5M2Y3NzQiCi0KLURFUEVORFMgPSAibGlibmwiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2l3LyR7QlB9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZS1vYmpkaXIucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNWNhNjIyYTI3MDY4N2Q2ODYyYzkwMjRmYWIyNjY4NzEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmE4NTNkOTVmZmJkMmIwNmMwNThiNDBlZjRlNmZhNzZhNTJjMjcwOWIwNWZiMTk3Njc2MWZlMTNlOWQ5ZTM5ZiIKLQotaW5oZXJpdCBwa2djb25maWcKLQotRVhUUkFfT0VNQUtFID0gIlwKLSAgICAtZiAnJHtTfS9NYWtlZmlsZScgXAotICAgIFwKLSAgICAnUFJFRklYPSR7cHJlZml4fScgXAotICAgICdTQklORElSPSR7c2JpbmRpcn0nIFwKLSAgICAnTUFORElSPSR7bWFuZGlyfScgXAotIgotQiA9ICIke1dPUktESVJ9L2J1aWxkIgotCi1kb19pbnN0YWxsKCkgewotICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZjQxNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pd180LjcuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJubDgwMjExIGJhc2VkIENMSSBjb25maWd1cmF0aW9uIHV0aWxpdHkgZm9yIHdpcmVsZXNzIGRldmljZXMiCitERVNDUklQVElPTiA9ICJpdyBpcyBhIG5ldyBubDgwMjExIGJhc2VkIENMSSBjb25maWd1cmF0aW9uIHV0aWxpdHkgZm9yIFwKK3dpcmVsZXNzIGRldmljZXMuIEl0IHN1cHBvcnRzIGFsbW9zdCBhbGwgbmV3IGRyaXZlcnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgXAordG8gdGhlIGtlcm5lbCByZWNlbnRseS4gIgorSE9NRVBBR0UgPSAiaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRG9jdW1lbnRhdGlvbi9pdyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc4NjE4YTVjNGFmMjVlOWI5M2VmMGJlMWE5M2Y3NzQiCisKK0RFUEVORFMgPSAibGlibmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2l3LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZS1vYmpkaXIucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTlkMWVkZDI3NmIyYWMwYzZjY2NmYzdhZThkMmI3MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzU4MDkyMjI5ZjEzZDY5MTk2ODA2MGEwYWQ0MTM2NGJhOGViOGRhNDUwMzYyNmMyMDIzM2E1YjFlYjMzYjRkOSIKKworaW5oZXJpdCBwa2djb25maWcKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAtZiAnJHtTfS9NYWtlZmlsZScgXAorICAgIFwKKyAgICAnUFJFRklYPSR7cHJlZml4fScgXAorICAgICdTQklORElSPSR7c2JpbmRpcn0nIFwKKyAgICAnTUFORElSPSR7bWFuZGlyfScgXAorIgorQiA9ICIke1dPUktESVJ9L2J1aWxkIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKaW5kZXggYjc2MDFiMC4uN2IyOWE1MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jCkBAIC0yMCwxMiArMjAsMTUgQEAKIAogRVhUUkFfT0VDT05GID0gIi0td2l0aC1wY2FwPWxpbnV4IgogCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IFwKKyIKIFBBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsLS1kaXNhYmxlLWJsdWV0b290aCxibHVlejQiCiAjIEFkZCBhIGR1bW15IFBBQ0tBR0VDT05GSUcgZm9yIGJsdWV6NSBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnBjYXAuCiBQQUNLQUdFQ09ORklHW2JsdWV6NV0gPSAiLCwiCiBQQUNLQUdFQ09ORklHW2NhbnVzYl0gPSAiLS1lbmFibGUtY2FudXNiLC0tZW5hYmxlLWNhbnVzYj1ubyxsaWJ1c2IiCiBQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCiBQQUNLQUdFQ09ORklHW2xpYm5sXSA9ICItLXdpdGgtbGlibmwsLS13aXRob3V0LWxpYm5sLGxpYm5sIgogCiBDUFBGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmRfMC4xNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiZGRiMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotU1VNTUFSWSA9ICJMaW51eCBORkMgZGFlbW9uIgotREVTQ1JJUFRJT04gPSAiQSBkYWVtb24gZm9yIHRoZSBMaW51eCBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gc3RhY2siCi1IT01FUEFHRSA9ICJodHRwOi8vMDEub3JnL2xpbnV4LW5mYyIKLUxJQ0VOU0UgPSAiR1BMdjIiCi0KLURFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBsaWJubCIKLQotU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvbmZjLyR7QlB9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9uZWFyZC5pbiBcCi0gICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIFwKLSAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiYjc0NmNlNjJlZWVmODhlOGRlOTA3NjVlMDBhNzVhMWMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjUxZjY1MTNkMzJjZGFmOGE0MjYyNTVkMDNhZmYzOGE2NjIwYTg5YjA1NjdlYzJiMzY2MDZjNjMzMGE5MzM1MyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAotIGZpbGU6Ly9zcmMvbmVhci5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTM1OGU0ZGVlZmVmMjUxYTQ3NjFlMWZmYWNjOTY1ZDEzIFwKLSAiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGJsdWV0b290aAotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgotCi1QQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3VzZXIvLC0tZGlzYWJsZS1zeXN0ZW1kIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRvb2xzIgotCi0jIFRoaXMgd291bGQgY29weSBuZWFyZCBzdGFydC1zdG9wIHNoZWxsIGFuZCB0ZXN0IHNjcmlwdHMKLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgotCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KLQkJc2VkICJzOkBpbnN0YWxscGF0aEA6JHtsaWJleGVjZGlyfS9uZmM6IiAke1dPUktESVJ9L25lYXJkLmluIFwKLQkJICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAotCQljaG1vZCAwNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAotCWZpCi0KLQkjIEluc3RhbGwgdGhlIHRlc3RzIGZvciBuZWFyZC10ZXN0cwotCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9uZWFyZAotCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rlc3QvKiAke0R9JHtsaWJkaXJ9LyR7QlBOfS8KLQlpbnN0YWxsIC1tIDA3NTUgJHtCfS90b29scy9uZmN0b29sL25mY3Rvb2wgJHtEfSR7bGliZGlyfS8ke0JQTn0vCi19Ci0KLVBBQ0tBR0VTID0rICIke1BOfS10ZXN0cyIKLQotRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLXRlc3QiCi0KLVJERVBFTkRTXyR7UE59ID0gImRidXMgcHl0aG9uIHB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QiCi0KLSMgQmx1ZXogJiBXaWZpIGFyZSBub3QgbWFuZGF0b3J5IGV4Y2VwdCBmb3IgaGFuZG92ZXIKLVJSRUNPTU1FTkRTXyR7UE59ID0gIlwKLSAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCi0gICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCd3cGEtc3VwcGxpY2FudCcsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICAiCi0KLVJERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgotCi1JTklUU0NSSVBUX05BTUUgPSAibmVhcmQiCi1JTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyA2NCIKLQotU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm5lYXJkLnNlcnZpY2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmRfMC4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDMzZGMzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmRfMC4xNi5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkxpbnV4IE5GQyBkYWVtb24iCitERVNDUklQVElPTiA9ICJBIGRhZW1vbiBmb3IgdGhlIExpbnV4IE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiBzdGFjayIKK0hPTUVQQUdFID0gImh0dHA6Ly8wMS5vcmcvbGludXgtbmZjIgorTElDRU5TRSA9ICJHUEx2MiIKKworREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIGxpYm5sIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay9uZmMvJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL25lYXJkLmluIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmFtLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YzY5MWZiNzg3Mjg1NmRjMGQ5MDljMjk4YmM4Y2I0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlYWUzYjExYzU0MWE5ODhlYzExY2E5NGI3ZGVhYjAxMDgwY2Q1YjU4Y2ZlZjNjZWQ2Y2VhYzliNmU2ZTY1YjM2IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgZmlsZTovL3NyYy9uZWFyLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9MzU4ZTRkZWVmZWYyNTFhNDc2MWUxZmZhY2M5NjVkMTMgXAorICIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgYmx1ZXRvb3RoCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZCAtLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8gLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vdXNlci8sLS1kaXNhYmxlLXN5c3RlbWQiCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtdG9vbHMiCisKKyMgVGhpcyB3b3VsZCBjb3B5IG5lYXJkIHN0YXJ0LXN0b3Agc2hlbGwgYW5kIHRlc3Qgc2NyaXB0cworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCQlzZWQgInM6QGluc3RhbGxwYXRoQDoke2xpYmV4ZWNkaXJ9L25mYzoiICR7V09SS0RJUn0vbmVhcmQuaW4gXAorCQkgID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25lYXJkCisJCWNobW9kIDA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25lYXJkCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAiZGJ1cyIKKworIyBCbHVleiAmIFdpZmkgYXJlIG5vdCBtYW5kYXRvcnkgZXhjZXB0IGZvciBoYW5kb3ZlcgorUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsJ3dwYS1zdXBwbGljYW50JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICIKKworSU5JVFNDUklQVF9OQU1FID0gIm5lYXJkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNjQiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuZWFyZC5zZXJ2aWNlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHNfMS4zLjMuYmIKaW5kZXggYTYyNjhmMy4uODU0MDUwMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4zLmJiCkBAIC02NCwxMCArNjQsMTMgQEAKICAgICAgICAgICAgICAgICAtLXdpdGgtc3RhdGRwYXRoPS92YXIvbGliL25mcy9zdGF0ZCBcCiAgICAgICAgICAgICAgICAiCiAKLVBBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorIgogUEFDS0FHRUNPTkZJR19yZW1vdmVfbGliYy1tdXNsID0gInRjcC13cmFwcGVycyIKIFBBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtdGNwLXdyYXBwZXJzLC0td2l0aG91dC10Y3Atd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgogUEFDS0FHRUNPTkZJR1tuZnNpZG1hcF0gPSAiLS1lbmFibGUtbmZzaWRtYXAsLS1kaXNhYmxlLW5mc2lkbWFwLGtleXV0aWxzIgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKIAogSU5ISUJJVF9BVVRPX1NUQUdFID0gIjEiCiAKQEAgLTg4LDcgKzkxLDcgQEAKIAkJICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uIFwKIAkJICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uZnMtc3RhdGQuc2VydmljZSIKIEZJTEVTXyR7UE59LXN0YXRzID0gIiR7c2JpbmRpcn0vbW91bnRzdGF0cyAke3NiaW5kaXJ9L25mc2lvc3RhdCIKLVJERVBFTkRTXyR7UE59LXN0YXRzID0gInB5dGhvbiIKK1JERVBFTkRTXyR7UE59LXN0YXRzID0gInB5dGhvbjMtY29yZSIKIAogRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfSIKIApAQCAtMTQwLDQgKzE0Myw4IEBACiAJcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZGVidWcKIAlybSAtZiAke0R9JHtzYmluZGlyfS9ycGNnZW4KIAlybSAtZiAke0R9JHtzYmluZGlyfS9sb2NrdGVzdAorCisgICAgICAgICMgTWFrZSBweXRob24gdG9vbHMgdXNlIHB5dGhvbiAzCisgICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtzYmluZGlyfS9tb3VudHN0YXRzICR7RH0ke3NiaW5kaXJ9L25mc2lvc3RhdAorCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMKaW5kZXggYzQxNWEzOS4uOWM0N2M2ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vLmluYwpAQCAtMjYsMTIgKzI2LDE3IEBACiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCiAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L29mb25vICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vZm9ubworCisgICMgT2Zvbm8gc3RpbGwgaGFzIG9uZSB0ZXN0IHRvb2wgdGhhdCByZWZlcnMgdG8gUHl0aG9uIDIgaW4gdGhlIHNoZWJhbmcKKyAgc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLiosIyEke2JpbmRpcn0vcHl0aG9uMywnICR7RH0ke2xpYmRpcn0vb2Zvbm8vdGVzdC9zZXQtZGRyCisKIH0KIAogUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzIgogCiBSREVQRU5EU18ke1BOfSArPSAiZGJ1cyIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJrZXJuZWwtbW9kdWxlLXR1biBtb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8iCiAKLUZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2ICR7c3lzdGVtZF91bml0ZGlyfSIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0iCiBGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vJHtCUE59L3Rlc3QiCi1SREVQRU5EU18ke1BOfS10ZXN0cyA9ICJweXRob24gcHl0aG9uLXB5Z29iamVjdCBweXRob24tZGJ1cyIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbjMgcHl0aG9uMy1weWdvYmplY3QgcHl0aG9uMy1kYnVzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmOGNhNzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNzAgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1Gcm9tIDU3MmZjMjNmNmVmZDY1YTJlZjllNmM5NTdiMjUwNjEwODczODY3MmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgotRGF0ZTogTW9uLCAyNSBBdWcgMjAxNCAxNjo1OTozOSArMDMwMAotU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInRlc3Q6IENvbnZlcnQgdG8gUHl0aG9uIDMiCi0KLVRoaXMgcmV2ZXJ0cyBjb21taXQgYzAyN2FiOWZiYzFhOGU4YzllNzZiY2QxMjNkZjFhZDc2OTYzMDdjMi4KLS0tLQotIHRlc3QvYWN0aXZhdGUtY29udGV4dCAgICAgICAgICB8ICAyICstCi0gdGVzdC9hbnN3ZXItY2FsbHMgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2JhY2t0cmFjZSAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvY2FuY2VsLXVzc2QgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZSAgICAgIHwgIDIgKy0KLSB0ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUgICAgICAgfCAgMiArLQotIHRlc3QvY2RtYS1kaWFsLW51bWJlciAgICAgICAgICB8ICAyICstCi0gdGVzdC9jZG1hLWhhbmd1cCAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2NkbWEtbGlzdC1jYWxsICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMgICAgICB8ICAyICstCi0gdGVzdC9jaGFuZ2UtcGluICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0ICAgfCAgMiArLQotIHRlc3QvY3JlYXRlLW1tcy1jb250ZXh0ICAgICAgICB8ICAyICstCi0gdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eSAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2RlYWN0aXZhdGUtYWxsICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvZGVhY3RpdmF0ZS1jb250ZXh0ICAgICAgICB8ICAyICstCi0gdGVzdC9kaWFsLW51bWJlciAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nICAgfCAgMiArLQotIHRlc3QvZGlzYWJsZS1ncHJzICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9kaXNhYmxlLW1vZGVtICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2Rpc3BsYXktaWNvbiAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvZW5hYmxlLWNicyAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9lbmFibGUtZ3BycyAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2VuYWJsZS1tb2RlbSAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvZW50ZXItcGluICAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9nZXQtaWNvbiAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2dldC1vcGVyYXRvcnMgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvZ2V0LXRlY2gtcHJlZmVyZW5jZSAgICAgICB8ICAyICstCi0gdGVzdC9oYW5ndXAtYWN0aXZlICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2hhbmd1cC1hbGwgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvaGFuZ3VwLWNhbGwgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eSAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2hvbGQtYW5kLWFuc3dlciAgICAgICAgICAgfCAgMiArLQotIHRlc3QvaW5pdGlhdGUtdXNzZCAgICAgICAgICAgICB8ICA0ICsrLS0KLSB0ZXN0L2xpc3QtY2FsbHMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvbGlzdC1jb250ZXh0cyAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9saXN0LW1lc3NhZ2VzICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2xpc3QtbW9kZW1zICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvbGlzdC1vcGVyYXRvcnMgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9sb2NrLXBpbiAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L2xvY2tkb3duLW1vZGVtICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvbW9uaXRvci1vZm9ubyAgICAgICAgICAgICB8ICA0ICsrLS0KLSB0ZXN0L29mZmxpbmUtbW9kZW0gICAgICAgICAgICAgfCAgMiArLQotIHRlc3Qvb25saW5lLW1vZGVtICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9wcml2YXRlLWNoYXQgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncyAgfCAgMiArLQotIHRlc3QvcmVjZWl2ZS1zbXMgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9yZWplY3QtY2FsbHMgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3JlbGVhc2UtYW5kLWFuc3dlciAgICAgICAgfCAgMiArLQotIHRlc3QvcmVsZWFzZS1hbmQtc3dhcCAgICAgICAgICB8ICAyICstCi0gdGVzdC9yZW1vdmUtY29udGV4dHMgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3Jlc2V0LXBpbiAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzICAgICAgICB8ICAyICstCi0gdGVzdC9zZW5kLXNtcyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3NlbmQtdXNzZCAgICAgICAgICAgICAgICAgfCAgNCArKy0tCi0gdGVzdC9zZW5kLXZjYWwgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3NlbmQtdmNhcmQgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZyAgICAgICB8ICAyICstCi0gdGVzdC9zZXQtY2JzLXRvcGljcyAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5ICAgICAgfCAgMiArLQotIHRlc3Qvc2V0LWZhc3QtZG9ybWFuY3kgICAgICAgICB8ICAyICstCi0gdGVzdC9zZXQtZ3NtLWJhbmQgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3NldC1taWMtdm9sdW1lICAgICAgICAgICAgfCAgMiArLQotIHRlc3Qvc2V0LW1tcy1kZXRhaWxzICAgICAgICAgICB8ICAyICstCi0gdGVzdC9zZXQtbXNpc2RuICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQgICAgICAgfCAgMiArLQotIHRlc3Qvc2V0LXNwZWFrZXItdm9sdW1lICAgICAgICB8ICAyICstCi0gdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlICAgICAgIHwgIDIgKy0KLSB0ZXN0L3NldC10dHkgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3Qvc2V0LXVtdHMtYmFuZCAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzICAgICAgIHwgIDIgKy0KLSB0ZXN0L3N3YXAtY2FsbHMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlICAgICB8ICAyICstCi0gdGVzdC90ZXN0LWNhbGwtYmFycmluZyAgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nICAgICAgfCAgMiArLQotIHRlc3QvdGVzdC1jYWxsLXNldHRpbmdzICAgICAgICB8ICAyICstCi0gdGVzdC90ZXN0LWNicyAgICAgICAgICAgICAgICAgIHwgIDQgKystLQotIHRlc3QvdGVzdC1nbnNzICAgICAgICAgICAgICAgICB8ICA0ICsrLS0KLSB0ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nICAgICAgfCAgMiArLQotIHRlc3QvdGVzdC1tb2RlbSAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uIHwgIDIgKy0KLSB0ZXN0L3Rlc3QtcGhvbmVib29rICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvdGVzdC1wdXNoLW5vdGlmaWNhdGlvbiAgICB8ICAyICstCi0gdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZyAgICAgIHwgIDIgKy0KLSB0ZXN0L3Rlc3Qtc21zICAgICAgICAgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KLSB0ZXN0L3Rlc3Qtc3MgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3QvdGVzdC1zcy1jb250cm9sLWNiICAgICAgICB8ICAyICstCi0gdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YgICAgICAgIHwgIDIgKy0KLSB0ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcyAgICAgICAgfCAgMiArLQotIHRlc3QvdGVzdC1zdGstbWVudSAgICAgICAgICAgICB8IDM0ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KLSB0ZXN0L3VubG9jay1waW4gICAgICAgICAgICAgICAgfCAgMiArLQotIDk0IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS90ZXN0L2FjdGl2YXRlLWNvbnRleHQgYi90ZXN0L2FjdGl2YXRlLWNvbnRleHQKLWluZGV4IGU0ZmM3MDIuLjQyNDEzOTYgMTAwNzU1Ci0tLS0gYS90ZXN0L2FjdGl2YXRlLWNvbnRleHQKLSsrKyBiL3Rlc3QvYWN0aXZhdGUtY29udGV4dAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L2Fuc3dlci1jYWxscyBiL3Rlc3QvYW5zd2VyLWNhbGxzCi1pbmRleCBkYWE3OTRiLi40NWZmMDhmIDEwMDc1NQotLS0tIGEvdGVzdC9hbnN3ZXItY2FsbHMKLSsrKyBiL3Rlc3QvYW5zd2VyLWNhbGxzCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC9iYWNrdHJhY2UgYi90ZXN0L2JhY2t0cmFjZQotaW5kZXggMDNjNzYzMi4uYzYyNDcwOSAxMDA3NTUKLS0tLSBhL3Rlc3QvYmFja3RyYWNlCi0rKysgYi90ZXN0L2JhY2t0cmFjZQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgb3MKLSBpbXBvcnQgcmUKLWRpZmYgLS1naXQgYS90ZXN0L2NhbmNlbC11c3NkIGIvdGVzdC9jYW5jZWwtdXNzZAotaW5kZXggZTc1NTliYS4uMTc5N2YyNiAxMDA3NTUKLS0tLSBhL3Rlc3QvY2FuY2VsLXVzc2QKLSsrKyBiL3Rlc3QvY2FuY2VsLXVzc2QKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZSBiL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUKLWluZGV4IDNhZGMxNGQuLjBkZGMwY2QgMTAwNzU1Ci0tLS0gYS90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCi0rKysgYi90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gaW1wb3J0IHN5cwotZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZSBiL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQotaW5kZXggYWMxNmEyZC4uYTNjY2EwMSAxMDA3NTUKLS0tLSBhL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQotKysrIGIvdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gaW1wb3J0IHN5cwotZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1kaWFsLW51bWJlciBiL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgotaW5kZXggNjgzNDMxZS4uOWNkZmIyNCAxMDA3NTUKLS0tLSBhL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgotKysrIGIvdGVzdC9jZG1hLWRpYWwtbnVtYmVyCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1oYW5ndXAgYi90ZXN0L2NkbWEtaGFuZ3VwCi1pbmRleCA0MWZmYTYwLi40OTNlY2U0IDEwMDc1NQotLS0tIGEvdGVzdC9jZG1hLWhhbmd1cAotKysrIGIvdGVzdC9jZG1hLWhhbmd1cAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L2NkbWEtbGlzdC1jYWxsIGIvdGVzdC9jZG1hLWxpc3QtY2FsbAotaW5kZXggYjEzMjM1My4uNWQzNmE2OSAxMDA3NTUKLS0tLSBhL3Rlc3QvY2RtYS1saXN0LWNhbGwKLSsrKyBiL3Rlc3QvY2RtYS1saXN0LWNhbGwKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSAKLWRpZmYgLS1naXQgYS90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzIGIvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscwotaW5kZXggYTYwYzg2ZS4uYTI4NmIwZSAxMDA3NTUKLS0tLSBhL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKLSsrKyBiL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9jaGFuZ2UtcGluIGIvdGVzdC9jaGFuZ2UtcGluCi1pbmRleCAzMDFjNmNlLi4wMDBjZTUzIDEwMDc1NQotLS0tIGEvdGVzdC9jaGFuZ2UtcGluCi0rKysgYi90ZXN0L2NoYW5nZS1waW4KLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dCBiL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQKLWluZGV4IDEwODkwNTMuLmVmZDA5OTggMTAwNzU1Ci0tLS0gYS90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0Ci0rKysgYi90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0Ci1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0IGIvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKLWluZGV4IDU5ODMzNmYuLmU1YmUwOGQgMTAwNzU1Ci0tLS0gYS90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dAotKysrIGIvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eSBiL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkKLWluZGV4IDFiNzYwMTAuLjk3MDQ3YzMgMTAwNzU1Ci0tLS0gYS90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5Ci0rKysgYi90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5Ci1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvZGVhY3RpdmF0ZS1hbGwgYi90ZXN0L2RlYWN0aXZhdGUtYWxsCi1pbmRleCA1YWE4NTg3Li40MjcwMDllIDEwMDc1NQotLS0tIGEvdGVzdC9kZWFjdGl2YXRlLWFsbAotKysrIGIvdGVzdC9kZWFjdGl2YXRlLWFsbAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L2RlYWN0aXZhdGUtY29udGV4dCBiL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0Ci1pbmRleCA1Yzg2YTcxLi5kZjQ3ZDJlIDEwMDc1NQotLS0tIGEvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQKLSsrKyBiL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0Ci1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvZGlhbC1udW1iZXIgYi90ZXN0L2RpYWwtbnVtYmVyCi1pbmRleCBmZTVhZGFkLi5lZTY3NGQ5IDEwMDc1NQotLS0tIGEvdGVzdC9kaWFsLW51bWJlcgotKysrIGIvdGVzdC9kaWFsLW51bWJlcgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nIGIvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZwotaW5kZXggODExZTRmYS4uMzYwOTgxNiAxMDA3NTUKLS0tLSBhL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKLSsrKyBiL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgotZGlmZiAtLWdpdCBhL3Rlc3QvZGlzYWJsZS1ncHJzIGIvdGVzdC9kaXNhYmxlLWdwcnMKLWluZGV4IDYxY2UyMTYuLmM2YzQwYTUgMTAwNzU1Ci0tLS0gYS90ZXN0L2Rpc2FibGUtZ3BycwotKysrIGIvdGVzdC9kaXNhYmxlLWdwcnMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9kaXNhYmxlLW1vZGVtIGIvdGVzdC9kaXNhYmxlLW1vZGVtCi1pbmRleCA2ZmJhODU3Li5jYThjOGQ4IDEwMDc1NQotLS0tIGEvdGVzdC9kaXNhYmxlLW1vZGVtCi0rKysgYi90ZXN0L2Rpc2FibGUtbW9kZW0KLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9kaXNwbGF5LWljb24gYi90ZXN0L2Rpc3BsYXktaWNvbgotaW5kZXggYWM0MDgxOC4uNzUzZDE0ZCAxMDA3NTUKLS0tLSBhL3Rlc3QvZGlzcGxheS1pY29uCi0rKysgYi90ZXN0L2Rpc3BsYXktaWNvbgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L2VuYWJsZS1jYnMgYi90ZXN0L2VuYWJsZS1jYnMKLWluZGV4IDRhOGJmNjYuLmMwOGJmMmIgMTAwNzU1Ci0tLS0gYS90ZXN0L2VuYWJsZS1jYnMKLSsrKyBiL3Rlc3QvZW5hYmxlLWNicwotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L2VuYWJsZS1ncHJzIGIvdGVzdC9lbmFibGUtZ3BycwotaW5kZXggNjhkNWVmMC4uODY2NDg5MSAxMDA3NTUKLS0tLSBhL3Rlc3QvZW5hYmxlLWdwcnMKLSsrKyBiL3Rlc3QvZW5hYmxlLWdwcnMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtbW9kZW0gYi90ZXN0L2VuYWJsZS1tb2RlbQotaW5kZXggZmM1OTU4YS4uZGZhYWFhOCAxMDA3NTUKLS0tLSBhL3Rlc3QvZW5hYmxlLW1vZGVtCi0rKysgYi90ZXN0L2VuYWJsZS1tb2RlbQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L2VudGVyLXBpbiBiL3Rlc3QvZW50ZXItcGluCi1pbmRleCA5NTU2MzYzLi5jNmVlNjY5IDEwMDc1NQotLS0tIGEvdGVzdC9lbnRlci1waW4KLSsrKyBiL3Rlc3QvZW50ZXItcGluCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gaW1wb3J0IHN5cwotZGlmZiAtLWdpdCBhL3Rlc3QvZ2V0LWljb24gYi90ZXN0L2dldC1pY29uCi1pbmRleCA1NTY5YTMzLi5mZGFhZWU3IDEwMDc1NQotLS0tIGEvdGVzdC9nZXQtaWNvbgotKysrIGIvdGVzdC9nZXQtaWNvbgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L2dldC1vcGVyYXRvcnMgYi90ZXN0L2dldC1vcGVyYXRvcnMKLWluZGV4IDBmMzVjODAuLjYyMzU0YzUgMTAwNzU1Ci0tLS0gYS90ZXN0L2dldC1vcGVyYXRvcnMKLSsrKyBiL3Rlc3QvZ2V0LW9wZXJhdG9ycwotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UgYi90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKLWluZGV4IDdiYTYzNjUuLjc3ZDIwZDAgMTAwNzU1Ci0tLS0gYS90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKLSsrKyBiL3Rlc3QvZ2V0LXRlY2gtcHJlZmVyZW5jZQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cywgc3lzCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC9oYW5ndXAtYWN0aXZlIGIvdGVzdC9oYW5ndXAtYWN0aXZlCi1pbmRleCA4MmUwZWIwLi41YWY2MmFiIDEwMDc1NQotLS0tIGEvdGVzdC9oYW5ndXAtYWN0aXZlCi0rKysgYi90ZXN0L2hhbmd1cC1hY3RpdmUKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9oYW5ndXAtYWxsIGIvdGVzdC9oYW5ndXAtYWxsCi1pbmRleCAzYTAxMzhkLi4zMjkzM2RiIDEwMDc1NQotLS0tIGEvdGVzdC9oYW5ndXAtYWxsCi0rKysgYi90ZXN0L2hhbmd1cC1hbGwKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9oYW5ndXAtY2FsbCBiL3Rlc3QvaGFuZ3VwLWNhbGwKLWluZGV4IDVhMmRlMjAuLjQ0NzAyMGMgMTAwNzU1Ci0tLS0gYS90ZXN0L2hhbmd1cC1jYWxsCi0rKysgYi90ZXN0L2hhbmd1cC1jYWxsCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkgYi90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5Ci1pbmRleCAyNDc1MWMzLi40OGZlMzQyIDEwMDc1NQotLS0tIGEvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQotKysrIGIvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L2hvbGQtYW5kLWFuc3dlciBiL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCi1pbmRleCBkYTNiZTU3Li4yYzQ3ZTI3IDEwMDc1NQotLS0tIGEvdGVzdC9ob2xkLWFuZC1hbnN3ZXIKLSsrKyBiL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvaW5pdGlhdGUtdXNzZCBiL3Rlc3QvaW5pdGlhdGUtdXNzZAotaW5kZXggZmFmNTBkMC4uZDcwMjJmMSAxMDA3NTUKLS0tLSBhL3Rlc3QvaW5pdGlhdGUtdXNzZAotKysrIGIvdGVzdC9pbml0aWF0ZS11c3NkCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotQEAgLTQ1LDcgKzQ1LDcgQEAgaWYgc3RhdGUgPT0gImlkbGUiOgotIHByaW50KCJTdGF0ZTogJXMiICUgKHN0YXRlKSkKLSAKLSB3aGlsZSBzdGF0ZSA9PSAidXNlci1yZXNwb25zZSI6Ci0tCXJlc3BvbnNlID0gaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQotKwlyZXNwb25zZSA9IHJhd19pbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCi0gCi0gCXJlc3VsdCA9IHVzc2QuUmVzcG9uZChyZXNwb25zZSwgdGltZW91dD0xMDApCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC9saXN0LWNhbGxzIGIvdGVzdC9saXN0LWNhbGxzCi1pbmRleCBmM2VlOTkxLi4wODY2OGM2IDEwMDc1NQotLS0tIGEvdGVzdC9saXN0LWNhbGxzCi0rKysgYi90ZXN0L2xpc3QtY2FsbHMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSAKLWRpZmYgLS1naXQgYS90ZXN0L2xpc3QtY29udGV4dHMgYi90ZXN0L2xpc3QtY29udGV4dHMKLWluZGV4IDc4Mjc4Y2EuLmYwZDQwOTQgMTAwNzU1Ci0tLS0gYS90ZXN0L2xpc3QtY29udGV4dHMKLSsrKyBiL3Rlc3QvbGlzdC1jb250ZXh0cwotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIAotZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1tZXNzYWdlcyBiL3Rlc3QvbGlzdC1tZXNzYWdlcwotaW5kZXggOWY1YmNlMy4uY2ZjY2JlYSAxMDA3NTUKLS0tLSBhL3Rlc3QvbGlzdC1tZXNzYWdlcwotKysrIGIvdGVzdC9saXN0LW1lc3NhZ2VzCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC9saXN0LW1vZGVtcyBiL3Rlc3QvbGlzdC1tb2RlbXMKLWluZGV4IGI5ZjUxMGEuLmVkNjYxMjQgMTAwNzU1Ci0tLS0gYS90ZXN0L2xpc3QtbW9kZW1zCi0rKysgYi90ZXN0L2xpc3QtbW9kZW1zCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC9saXN0LW9wZXJhdG9ycyBiL3Rlc3QvbGlzdC1vcGVyYXRvcnMKLWluZGV4IDA2NGM0ZTMuLjM0OWJmNDEgMTAwNzU1Ci0tLS0gYS90ZXN0L2xpc3Qtb3BlcmF0b3JzCi0rKysgYi90ZXN0L2xpc3Qtb3BlcmF0b3JzCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gaW1wb3J0IHN5cwotZGlmZiAtLWdpdCBhL3Rlc3QvbG9jay1waW4gYi90ZXN0L2xvY2stcGluCi1pbmRleCA5NmVhOWMyLi41NTc5NzM1IDEwMDc1NQotLS0tIGEvdGVzdC9sb2NrLXBpbgotKysrIGIvdGVzdC9sb2NrLXBpbgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L2xvY2tkb3duLW1vZGVtIGIvdGVzdC9sb2NrZG93bi1tb2RlbQotaW5kZXggNGUwNDIwNS4uNzgxYWJiNiAxMDA3NTUKLS0tLSBhL3Rlc3QvbG9ja2Rvd24tbW9kZW0KLSsrKyBiL3Rlc3QvbG9ja2Rvd24tbW9kZW0KLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9tb25pdG9yLW9mb25vIGIvdGVzdC9tb25pdG9yLW9mb25vCi1pbmRleCA4ODMwNzU3Li5iZDMxNjE3IDEwMDc1NQotLS0tIGEvdGVzdC9tb25pdG9yLW9mb25vCi0rKysgYi90ZXN0L21vbml0b3Itb2Zvbm8KLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCi0gCi1AQCAtNiw3ICs2LDcgQEAgaW1wb3J0IGRidXMKLSBpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCi0gCi0gX2RidXMycHkgPSB7Ci0tCWRidXMuU3RyaW5nIDogc3RyLAotKwlkYnVzLlN0cmluZyA6IHVuaWNvZGUsCi0gCWRidXMuVUludDMyIDogaW50LAotIAlkYnVzLkludDMyIDogaW50LAotIAlkYnVzLkludDE2IDogaW50LAotZGlmZiAtLWdpdCBhL3Rlc3Qvb2ZmbGluZS1tb2RlbSBiL3Rlc3Qvb2ZmbGluZS1tb2RlbQotaW5kZXggZThjMDQzYS4uZWExZjUyMiAxMDA3NTUKLS0tLSBhL3Rlc3Qvb2ZmbGluZS1tb2RlbQotKysrIGIvdGVzdC9vZmZsaW5lLW1vZGVtCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzLCBzeXMKLSAKLWRpZmYgLS1naXQgYS90ZXN0L29ubGluZS1tb2RlbSBiL3Rlc3Qvb25saW5lLW1vZGVtCi1pbmRleCAwMjljNGE1Li4zMTBlZDdkIDEwMDc1NQotLS0tIGEvdGVzdC9vbmxpbmUtbW9kZW0KLSsrKyBiL3Rlc3Qvb25saW5lLW1vZGVtCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzLCBzeXMKLSAKLWRpZmYgLS1naXQgYS90ZXN0L3ByaXZhdGUtY2hhdCBiL3Rlc3QvcHJpdmF0ZS1jaGF0Ci1pbmRleCBlN2U1NDA2Li5lZjJlZjZjIDEwMDc1NQotLS0tIGEvdGVzdC9wcml2YXRlLWNoYXQKLSsrKyBiL3Rlc3QvcHJpdmF0ZS1jaGF0Ci1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzIGIvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKLWluZGV4IDhhM2VjZmEuLjBmMDU4YjIgMTAwNzU1Ci0tLS0gYS90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncwotKysrIGIvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IG9zCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L3JlY2VpdmUtc21zIGIvdGVzdC9yZWNlaXZlLXNtcwotaW5kZXggYTBjNjkxNS4uYzIzZWIxNCAxMDA3NTUKLS0tLSBhL3Rlc3QvcmVjZWl2ZS1zbXMKLSsrKyBiL3Rlc3QvcmVjZWl2ZS1zbXMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC9yZWplY3QtY2FsbHMgYi90ZXN0L3JlamVjdC1jYWxscwotaW5kZXggNzFiMjQzZS4uOWVkZjFmZiAxMDA3NTUKLS0tLSBhL3Rlc3QvcmVqZWN0LWNhbGxzCi0rKysgYi90ZXN0L3JlamVjdC1jYWxscwotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIAotZGlmZiAtLWdpdCBhL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyIGIvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKLWluZGV4IGRlYzhlMTcuLjI1ZmQ4MTggMTAwNzU1Ci0tLS0gYS90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlcgotKysrIGIvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9yZWxlYXNlLWFuZC1zd2FwIGIvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCi1pbmRleCBjYjhjODRlLi43YjM1NjlmIDEwMDc1NQotLS0tIGEvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCi0rKysgYi90ZXN0L3JlbGVhc2UtYW5kLXN3YXAKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9yZW1vdmUtY29udGV4dHMgYi90ZXN0L3JlbW92ZS1jb250ZXh0cwotaW5kZXggYjU0MTg0ZS4uYzUwODJjYiAxMDA3NTUKLS0tLSBhL3Rlc3QvcmVtb3ZlLWNvbnRleHRzCi0rKysgYi90ZXN0L3JlbW92ZS1jb250ZXh0cwotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIAotZGlmZiAtLWdpdCBhL3Rlc3QvcmVzZXQtcGluIGIvdGVzdC9yZXNldC1waW4KLWluZGV4IDNmYmQxMjYuLmI0MjkyNTQgMTAwNzU1Ci0tLS0gYS90ZXN0L3Jlc2V0LXBpbgotKysrIGIvdGVzdC9yZXNldC1waW4KLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMgYi90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycwotaW5kZXggYjRmYzA1ZS4uNzQ5YzcxMCAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzCi0rKysgYi90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycwotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L3NlbmQtc21zIGIvdGVzdC9zZW5kLXNtcwotaW5kZXggOTg4MDhhYS4uZTA2NDQ0ZCAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2VuZC1zbXMKLSsrKyBiL3Rlc3Qvc2VuZC1zbXMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXVzc2QgYi90ZXN0L3NlbmQtdXNzZAotaW5kZXggYTIwZTA5OC4uZTU4NTg4MyAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2VuZC11c3NkCi0rKysgYi90ZXN0L3NlbmQtdXNzZAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLUBAIC00Niw3ICs0Niw3IEBAIGlmIHN0YXRlID09ICJpZGxlIjoKLSBwcmludCgiU3RhdGU6ICVzIiAlIChzdGF0ZSkpCi0gCi0gd2hpbGUgc3RhdGUgPT0gInVzZXItcmVzcG9uc2UiOgotLQlyZXNwb25zZSA9IGlucHV0KCJFbnRlciByZXNwb25zZTogIikKLSsJcmVzcG9uc2UgPSByYXdfaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQotIAotIAlwcmludCh1c3NkLlJlc3BvbmQocmVzcG9uc2UsIHRpbWVvdXQ9MTAwKSkKLSAKLWRpZmYgLS1naXQgYS90ZXN0L3NlbmQtdmNhbCBiL3Rlc3Qvc2VuZC12Y2FsCi1pbmRleCA1NjZkYWVmLi43ZjgyNzJiIDEwMDc1NQotLS0tIGEvdGVzdC9zZW5kLXZjYWwKLSsrKyBiL3Rlc3Qvc2VuZC12Y2FsCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC12Y2FyZCBiL3Rlc3Qvc2VuZC12Y2FyZAotaW5kZXggNGRlZGY1MS4uMjUwYjM2ZiAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2VuZC12Y2FyZAotKysrIGIvdGVzdC9zZW5kLXZjYXJkCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZyBiL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZwotaW5kZXggNDlkMWNlMC4uOWZkMzU4YiAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZwotKysrIGIvdGVzdC9zZXQtY2FsbC1mb3J3YXJkaW5nCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKLWRpZmYgLS1naXQgYS90ZXN0L3NldC1jYnMtdG9waWNzIGIvdGVzdC9zZXQtY2JzLXRvcGljcwotaW5kZXggZGI5NWUxNi4uNzhkNmQ0NCAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2V0LWNicy10b3BpY3MKLSsrKyBiL3Rlc3Qvc2V0LWNicy10b3BpY3MKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eSBiL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkKLWluZGV4IDVmZjdhNjcuLjY0YTZmYjggMTAwNzU1Ci0tLS0gYS90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5Ci0rKysgYi90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5Ci1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kgYi90ZXN0L3NldC1mYXN0LWRvcm1hbmN5Ci1pbmRleCBlZjc3YmNkLi43YmY3NzE1IDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQotKysrIGIvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgZGJ1cwotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L3NldC1nc20tYmFuZCBiL3Rlc3Qvc2V0LWdzbS1iYW5kCi1pbmRleCBiMzdiY2I1Li4zYzE3YzEwIDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtZ3NtLWJhbmQKLSsrKyBiL3Rlc3Qvc2V0LWdzbS1iYW5kCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gaW1wb3J0IHN5cwotZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LW1pYy12b2x1bWUgYi90ZXN0L3NldC1taWMtdm9sdW1lCi1pbmRleCBjZDZjNzNmLi5lMGJmZjQ5IDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtbWljLXZvbHVtZQotKysrIGIvdGVzdC9zZXQtbWljLXZvbHVtZQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBpbXBvcnQgc3lzCi0gaW1wb3J0IGRidXMKLWRpZmYgLS1naXQgYS90ZXN0L3NldC1tbXMtZGV0YWlscyBiL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCi1pbmRleCA2ZWU1OWZhLi5kMmQwODM4IDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtbW1zLWRldGFpbHMKLSsrKyBiL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LW1zaXNkbiBiL3Rlc3Qvc2V0LW1zaXNkbgotaW5kZXggYjVmZTgxOS4uMDFmMjg0ZCAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2V0LW1zaXNkbgotKysrIGIvdGVzdC9zZXQtbXNpc2RuCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzCi0gaW1wb3J0IHN5cwotZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZCBiL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAotaW5kZXggNjk4YzhiNi4uOWUzZTA1OCAxMDA3NTUKLS0tLSBhL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAotKysrIGIvdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lIGIvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKLWluZGV4IDZkNGUzMDEuLjc5NjJmMzkgMTAwNzU1Ci0tLS0gYS90ZXN0L3NldC1zcGVha2VyLXZvbHVtZQotKysrIGIvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlIGIvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCi1pbmRleCBiNTQ5YWJjLi4yNjY2Y2JkIDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCi0rKysgYi90ZXN0L3NldC10ZWNoLXByZWZlcmVuY2UKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdHR5IGIvdGVzdC9zZXQtdHR5Ci1pbmRleCBlZWQxZmJhLi41M2Q2Yjk5IDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtdHR5Ci0rKysgYi90ZXN0L3NldC10dHkKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdW10cy1iYW5kIGIvdGVzdC9zZXQtdW10cy1iYW5kCi1pbmRleCAwYmFlNWM0Li5jMWU2NDQ4IDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtdW10cy1iYW5kCi0rKysgYi90ZXN0L3NldC11bXRzLWJhbmQKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzIGIvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCi1pbmRleCAyODhkNGUxLi5hNGVmZTRmIDEwMDc1NQotLS0tIGEvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCi0rKysgYi90ZXN0L3NldC11c2Utc21zLXJlcG9ydHMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC9zd2FwLWNhbGxzIGIvdGVzdC9zd2FwLWNhbGxzCi1pbmRleCAwMThhOGQzLi5lZWIyNTdiIDEwMDc1NQotLS0tIGEvdGVzdC9zd2FwLWNhbGxzCi0rKysgYi90ZXN0L3N3YXAtY2FsbHMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IHN5cwotIGltcG9ydCBkYnVzCi1kaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UgYi90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQotaW5kZXggNmU4N2U2MS4uMGYxZjU3ZiAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlCi0rKysgYi90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtYmFycmluZyBiL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcKLWluZGV4IGVlZGI2OWYuLmJlNGFiNTcgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCi0rKysgYi90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nIGIvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZwotaW5kZXggNWRiODRkNy4uMDFhNzI5NCAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKLSsrKyBiL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MgYi90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncwotaW5kZXggNDM1NTk0Yy4uNWQ3ZWU0OSAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzCi0rKysgYi90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncwotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKLSAKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtY2JzIGIvdGVzdC90ZXN0LWNicwotaW5kZXggYTVjZWMwNi4uMTNjZGQ4MCAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1jYnMKLSsrKyBiL3Rlc3QvdGVzdC1jYnMKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCi1AQCAtNzgsNyArNzgsNyBAQCBkZWYgc2V0X3RvcGljcyhjYnMpOgotIAlpbnZhbGlkRGF0YSA9IEZhbHNlOwotIAlpbmRleCA9IDAKLSAKLS0JdG9waWNzID0gaW5wdXQoJ0VudGVyIHRoZSB0b3BpYyBJRChzKSB5b3Ugd2FudCB0byByZWdpc3RlciB0bzogJykKLSsJdG9waWNzID0gcmF3X2lucHV0KCdFbnRlciB0aGUgdG9waWMgSUQocykgeW91IHdhbnQgdG8gcmVnaXN0ZXIgdG86ICcpCi0gCi0gCXdoaWxlIGluZGV4IDwgbGVuKHRvcGljcyk6Ci0gCQlpZiB0b3BpY3NbaW5kZXhdID09ICcsJyBvciB0b3BpY3NbaW5kZXhdID09ICctJzoKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtZ25zcyBiL3Rlc3QvdGVzdC1nbnNzCi1pbmRleCA2YWU2NGRiLi5hYTBiMTYwIDEwMDc1NQotLS0tIGEvdGVzdC90ZXN0LWduc3MKLSsrKyBiL3Rlc3QvdGVzdC1nbnNzCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgotIGltcG9ydCBzeXMKLUBAIC00MCw3ICs0MCw3IEBAIGRlZiBwcmludF9tZW51KCk6Ci0gZGVmIHN0ZGluX2hhbmRsZXIoY2hhbm5lbCwgY29uZGl0aW9uLCBnbnNzLCBwYXRoKToKLSAJaW5fa2V5ID0gb3MucmVhZChjaGFubmVsLnVuaXhfZ2V0X2ZkKCksIDE2MCkucnN0cmlwKCkuZGVjb2RlKCdVVEYtOCcpCi0gCWlmIGluX2tleSA9PSAnMCc6Ci0tCQl4bWwgPSBpbnB1dCgndHlwZSB0aGUgZWxlbWVudCBhbmQgcHJlc3MgZW50ZXI6ICcpCi0rCQl4bWwgPSByYXdfaW5wdXQoJ3R5cGUgdGhlIGVsZW1lbnQgYW5kIHByZXNzIGVudGVyOiAnKQotIAkJdHJ5OgotIAkJCWduc3MuU2VuZFBvc2l0aW9uaW5nRWxlbWVudChkYnVzLlN0cmluZyh4bWwpKQotIAkJCXByaW50KCJvayIpCi1kaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZyBiL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcKLWluZGV4IDQzMjg2MmUuLmI5M2ZiZjMgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCi0rKysgYi90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgotIGltcG9ydCBzeXMKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtbW9kZW0gYi90ZXN0L3Rlc3QtbW9kZW0KLWluZGV4IGFhMzhiMWYuLjI5ZGJmMTQgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3QtbW9kZW0KLSsrKyBiL3Rlc3QvdGVzdC1tb2RlbQotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKLSAKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24gYi90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KLWluZGV4IDY4YjQzNDcuLmM1YWQ1ODYgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KLSsrKyBiL3Rlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKLSBpbXBvcnQgc3lzCi1kaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXBob25lYm9vayBiL3Rlc3QvdGVzdC1waG9uZWJvb2sKLWluZGV4IDQyNjQ2ZDMuLjExNmZkNGYgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3QtcGhvbmVib29rCi0rKysgYi90ZXN0L3Rlc3QtcGhvbmVib29rCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBkYnVzLCBzeXMKLSAKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24gYi90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KLWluZGV4IGQ5NzJhZDMuLmVjYzZhZmIgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KLSsrKyBiL3Rlc3QvdGVzdC1wdXNoLW5vdGlmaWNhdGlvbgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKLSAKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nIGIvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZwotaW5kZXggZjIyZWZkMi4uMTg4YWMxZSAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKLSsrKyBiL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNtcyBiL3Rlc3QvdGVzdC1zbXMKLWluZGV4IDMwYWM2NTEuLjQ5OTM1ZTEgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3Qtc21zCi0rKysgYi90ZXN0L3Rlc3Qtc21zCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotICMgLSotIGNvZGluZzogdXRmLTggLSotCi0gCi0gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCi1AQCAtMTMyLDcgKzEzMiw3IEBAIGRlZiBzdGRpbl9oYW5kbGVyKGNoYW5uZWwsIGNvbmRpdGlvbiwgc21zLCB2YWx1ZSwgbnVtYmVyKToKLSAJCWxvY2sgPSAib24iCi0gCQlpZiBpbl9rZXkgPT0gJzAnOgotIAkJCXByaW50X3NlbmRfc21zX21lbnUoKQotLQkJCXNtc190eXBlID0gaW5wdXQoJ1NlbGVjdCBTTVMgdHlwZTogJykKLSsJCQlzbXNfdHlwZSA9IHJhd19pbnB1dCgnU2VsZWN0IFNNUyB0eXBlOiAnKQotIAotIAkJCWlmIHNtc190eXBlID09ICcxJzoKLSAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCB2YWx1ZSkKLUBAIC0xNTAsNDkgKzE1MCw0OSBAQCBkZWYgc3RkaW5faGFuZGxlcihjaGFubmVsLCBjb25kaXRpb24sIHNtcywgdmFsdWUsIG51bWJlcik6Ci0gCi0gCQllbGlmIGluX2tleSA9PSAnMSc6Ci0gCQkJbWVzc2FnZV9kZWxpdmVyeV9yZXBvcnQoc21zLCAxKQotLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQotKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKLSAJCQlpZiBzZW5kX21zZyA9PSAneSc6Ci0gCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoMSkiICsgdmFsdWUgKwotIAkJCQkJCSI6IFVzZURlbGl2ZXJ5UmVwb3J0c1tUUlVFXSIpKQotIAotIAkJZWxpZiBpbl9rZXkgPT0gJzInOgotIAkJCW1lc3NhZ2VfZGVsaXZlcnlfcmVwb3J0KHNtcywgMCkKLS0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKLSsJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCi0gCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgotIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDIpICIgKyB2YWx1ZSArCi0gCQkJCQkJIjogVXNlRGVsaXZlcnlSZXBvcnRzW0ZBTFNFXSIpKQotIAotIAkJZWxpZiBpbl9rZXkgPT0gJzMnOgotIAkJCW1lc3NhZ2Vfc2VydmljZV9jZW50ZXJfYWRkcmVzcyhzbXMsIFNDQSkKLS0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKLSsJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCi0gCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgotIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDMpICIgKyB2YWx1ZSArCi0gCQkJCQkJIjogU2VydmljZUNlbnRlckFkZHJlc3MiKSkKLSAKLSAJCWVsaWYgaW5fa2V5ID09ICc0JzoKLSAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJwcy1vbmx5IikKLS0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKLSsJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCi0gCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgotIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDQpICIgKyB2YWx1ZSArCi0gCQkJCQkJIjogQmVhcmVyW3BzLW9ubHldIikpCi0gCi0gCQllbGlmIGluX2tleSA9PSAnNSc6Ci0gCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAiY3Mtb25seSIpCi0tCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCi0rCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQotIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKLSAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig1KSAiICsgdmFsdWUgKwotIAkJCQkJCSI6IEJlYXJlcltjcy1vbmx5XSIpKQotIAotIAkJZWxpZiBpbl9rZXkgPT0gJzYnOgotIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgInBzLXByZWZlcnJlZCIpCi0tCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCi0rCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQotIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKLSAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig2KSAiICsgdmFsdWUgKwotIAkJCQkJCSI6IEJlYXJlcltwcy1wcmVmZXJyZWRdIikpCi0gCi0gCQllbGlmIGluX2tleSA9PSAnNyc6Ci0gCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAiY3MtcHJlZmVycmVkIikKLS0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKLSsJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCi0gCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgotIAkJCQltZXNzYWdlX3NlbmQoc21zLG51bWJlciwgKCIoNykgIiArIHZhbHVlICsKLSAJCQkJCQkiOiBCZWFyZXJbY3MtcHJlZmVycmVkXSIpKQotZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcyBiL3Rlc3QvdGVzdC1zcwotaW5kZXggNGNkODczMi4uMmM4MDgwNiAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1zcwotKysrIGIvdGVzdC90ZXN0LXNzCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGltcG9ydCBzeXMKLSBpbXBvcnQgZGJ1cwotZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKLWluZGV4IGRkYWU2ZDMuLjg2YmFjOWIgMTAwNzU1Ci0tLS0gYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYgotKysrIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCi0gCi1kaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgotaW5kZXggMDk1ZWI1ZC4uZDMwYmY0ZiAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmCi0rKysgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24zCi0rIyEvdXNyL2Jpbi9weXRob24KLSAKLSBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKLSAKLWRpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCi1pbmRleCA4MTgwNDc0Li5lMGVkMWQxIDEwMDc1NQotLS0tIGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MKLSsrKyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgotIAotZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zdGstbWVudSBiL3Rlc3QvdGVzdC1zdGstbWVudQotaW5kZXggMGNmOGZhMi4uYWMwYTViZCAxMDA3NTUKLS0tLSBhL3Rlc3QvdGVzdC1zdGstbWVudQotKysrIGIvdGVzdC90ZXN0LXN0ay1tZW51Ci1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL3B5dGhvbjMKLSsjIS91c3IvYmluL3B5dGhvbgotIAotIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgotIAotQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6Ci0gCQkJaW5kZXggKz0gMQotIAotIAkJcHJpbnQoIlxuRGVmYXVsdDogJWQiICUgKGRlZmF1bHQpKQotLQkJc2VsZWN0ID0gaW5wdXQoIkVudGVyIFNlbGVjdGlvbiAodCwgYik6IikKLSsJCXNlbGVjdCA9IHJhd19pbnB1dCgiRW50ZXIgU2VsZWN0aW9uICh0LCBiKToiKQotIAotIAkJaWYgc2VsZWN0ID09ICdiJzoKLSAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQotQEAgLTc1LDcgKzc1LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6Ci0gCQlwcmludCgiRGlzcGxheVRleHQgKCVzKSIgJSAodGl0bGUpKQotIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCi0gCQlwcmludCgiVXJnZW50OiAoJWQpIiAlICh1cmdlbnQpKQotLQkJa2V5ID0gaW5wdXQoIlByZXNzIHJldHVybiB0byBjbGVhciAoJ3QnIHRlcm1pbmF0ZXMsICIKLSsJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGNsZWFyICgndCcgdGVybWluYXRlcywgIgotIAkJCQkJCSInYicgZ29lcyBiYWNrLCAnbicgYnVzeSwgIgotIAkJCQkJCSIndycgcmV0dXJuIGFuZCB3YWl0KToiKQotIAotQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKLSAJCXByaW50KCJIaWRlIHR5cGluZzogKCVzKSIgJSAoaGlkZV90eXBpbmcpKQotIAkJcHJpbnQoIkVudGVyIGNoYXJhY3RlcnMsIG1pbjogJWQsIG1heDogJWQ6IiAlIChtaW5fY2hhcnMsCi0gCQkJCQkJCQltYXhfY2hhcnMpKQotLQkJdXNlcmluID0gaW5wdXQoIiIpCi0rCQl1c2VyaW4gPSByYXdfaW5wdXQoIiIpCi0gCi0gCQlyZXR1cm4gdXNlcmluCi0gCi1AQCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgotIAkJcHJpbnQoIkhpZGUgdHlwaW5nOiAoJXMpIiAlIChoaWRlX3R5cGluZykpCi0gCQlwcmludCgiRW50ZXIgZGlnaXRzLCBtaW46ICVkLCBtYXg6ICVkOiIgJSAobWluX2NoYXJzLAotIAkJCQkJCQkJbWF4X2NoYXJzKSkKLS0JCXVzZXJpbiA9IGlucHV0KCIndCcgdGVybWluYXRlcywgJ2InIGdvZXMgYmFjazoiKQotKwkJdXNlcmluID0gcmF3X2lucHV0KCIndCcgdGVybWluYXRlcywgJ2InIGdvZXMgYmFjazoiKQotIAotIAkJaWYgdXNlcmluID09ICdiJzoKLSAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQotQEAgLTEzNiw3ICsxMzYsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKLSAJZGVmIFJlcXVlc3RLZXkoc2VsZiwgdGl0bGUsIGljb24pOgotIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCi0gCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKLS0JCWtleSA9IGlucHV0KCJFbnRlciBLZXkgKHQsIGIpOiIpCi0rCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIEtleSAodCwgYik6IikKLSAKLSAJCWlmIGtleSA9PSAnYic6Ci0gCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKLUBAIC0xNTAsNyArMTUwLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6Ci0gCWRlZiBSZXF1ZXN0RGlnaXQoc2VsZiwgdGl0bGUsIGljb24pOgotIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCi0gCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKLS0JCWtleSA9IGlucHV0KCJFbnRlciBEaWdpdCAodCwgYik6IikKLSsJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgRGlnaXQgKHQsIGIpOiIpCi0gCi0gCQlpZiBrZXkgPT0gJ2InOgotIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCi1AQCAtMTY0LDcgKzE2NCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgotIAlkZWYgUmVxdWVzdFF1aWNrRGlnaXQoc2VsZiwgdGl0bGUsIGljb24pOgotIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCi0gCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKLS0JCWtleSA9IGlucHV0KCJRdWljayBkaWdpdCAoMC05LCAqLCAjLCB0LCBiKToiKQotKwkJa2V5ID0gcmF3X2lucHV0KCJRdWljayBkaWdpdCAoMC05LCAqLCAjLCB0LCBiKToiKQotIAotIAkJaWYga2V5ID09ICdiJzoKLSAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQotQEAgLTE3OCw3ICsxNzgsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKLSAJZGVmIFJlcXVlc3RDb25maXJtYXRpb24oc2VsZiwgdGl0bGUsIGljb24pOgotIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCi0gCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKLS0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIGIsIHksIG4pOiIpCi0rCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgYiwgeSwgbik6IikKLSAKLSAJCWlmIGtleSA9PSAnYic6Ci0gCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKLUBAIC0xOTQsNyArMTk0LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6Ci0gCWRlZiBDb25maXJtQ2FsbFNldHVwKHNlbGYsIGluZm8sIGljb24pOgotIAkJcHJpbnQoIkluZm9ybWF0aW9uOiAoJXMpIiAlIChpbmZvKSkKLSAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQotLQkJa2V5ID0gaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKLSsJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCB5LCBuKToiKQotIAotIAkJaWYga2V5ID09ICd0JzoKLSAJCQlyYWlzZSBFbmRTZXNzaW9uKCJVc2VyIHdpc2hlcyB0byB0ZXJtaW5hdGUgc2Vzc2lvbiIpCi1AQCAtMjA5LDcgKzIwOSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgotIAkJcHJpbnQoIkluZm9ybWF0aW9uOiAoJXMpIiAlIChpbmZvKSkKLSAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQotIAkJcHJpbnQoIlVSTCAoJXMpIiAlICh1cmwpKQotLQkJa2V5ID0gaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAoeSwgbik6IikKLSsJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh5LCBuKToiKQotIAotIAkJaWYga2V5ID09ICd5JzoKLSAJCQlyZXR1cm4gVHJ1ZQotQEAgLTIzMiw3ICsyMzIsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKLSAJCXNpZ25hbC5hbGFybSg1KQotIAotIAkJdHJ5OgotLQkJCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gZW5kIGJlZm9yZSBlbmQgb2YiCi0rCQkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyByZXR1cm4gdG8gZW5kIGJlZm9yZSBlbmQgb2YiCi0gCQkJCQkJCSAiIHNpbmdsZSB0b25lICh0KToiKQotIAkJCXNpZ25hbC5hbGFybSgwKQotIAotQEAgLTI1MCw3ICsyNTAsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKLSAJCXByaW50KCJMb29wVG9uZTogJXMiICUgKHRvbmUpKQotIAkJcHJpbnQoIlRleHQ6ICVzIiAlICh0ZXh0KSkKLSAJCXByaW50KCJJY29uOiAlZCIgJSAoaW50KGljb24pKSkKLS0JCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gZW5kIGJlZm9yZSB0aW1lb3V0ICIKLSsJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgdGltZW91dCAiCi0gCQkJCSIoJ3QnIHRlcm1pbmF0ZXMsICd3JyByZXR1cm4gYW5kIHdhaXQpOiIpCi0gCi0gCQlpZiBrZXkgPT0gJ3cnOgotQEAgLTI3OSw3ICsyNzksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKLSAJZGVmIERpc3BsYXlBY3Rpb24oc2VsZiwgdGV4dCwgaWNvbik6Ci0gCQlwcmludCgiVGV4dDogKCVzKSIgJSAodGV4dCkpCi0gCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKLS0JCWtleSA9IGlucHV0KCJQcmVzcyAndCcgdG8gdGVybWluYXRlIHRoZSBzZXNzaW9uICIpCi0rCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzICd0JyB0byB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gIikKLSAKLSAJCWlmIGtleSA9PSAndCc6Ci0gCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQotQEAgLTI4OSw3ICsyODksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKLSAJZGVmIENvbmZpcm1PcGVuQ2hhbm5lbChzZWxmLCBpbmZvLCBpY29uKToKLSAJCXByaW50KCJPcGVuIGNoYW5uZWwgY29uZmlybWF0aW9uOiAoJXMpIiAlIChpbmZvKSkKLSAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQotLQkJa2V5ID0gaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKLSsJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCB5LCBuKToiKQotIAotIAkJaWYga2V5ID09ICd0JzoKLSAJCQlyYWlzZSBFbmRTZXNzaW9uKCJVc2VyIHdpc2hlcyB0byB0ZXJtaW5hdGUgc2Vzc2lvbiIpCi1AQCAtMjk5LDcgKzI5OSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgotIAkJCXJldHVybiBGYWxzZQotIAotIF9kYnVzMnB5ID0gewotLQlkYnVzLlN0cmluZyA6IHN0ciwKLSsJZGJ1cy5TdHJpbmcgOiB1bmljb2RlLAotIAlkYnVzLlVJbnQzMiA6IGludCwKLSAJZGJ1cy5JbnQzMiA6IGludCwKLSAJZGJ1cy5JbnQxNiA6IGludCwKLUBAIC0zOTYsNyArMzk2LDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAJCWV4Y2VwdDoKLSAJCQlwYXNzCi0gCi0tCQlzZWxlY3QgPSBpbnQoaW5wdXQoIkVudGVyIFNlbGVjdGlvbjogIikpCi0rCQlzZWxlY3QgPSBpbnQocmF3X2lucHV0KCJFbnRlciBTZWxlY3Rpb246ICIpKQotIAkJc3RrLlNlbGVjdEl0ZW0oc2VsZWN0LCBwYXRoKQotIAllbGlmIG1vZGUgPT0gJ2FnZW50JzoKLSAJCXBhdGggPSAiL3Rlc3QvYWdlbnQiCi1kaWZmIC0tZ2l0IGEvdGVzdC91bmxvY2stcGluIGIvdGVzdC91bmxvY2stcGluCi1pbmRleCA2MWY0NzY1Li4xMGI2NjI2IDEwMDc1NQotLS0tIGEvdGVzdC91bmxvY2stcGluCi0rKysgYi90ZXN0L3VubG9jay1waW4KLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uMwotKyMhL3Vzci9iaW4vcHl0aG9uCi0gCi0gaW1wb3J0IGRidXMKLSBpbXBvcnQgc3lzCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjE3LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDdmOWQ3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1yZXF1aXJlIG9mb25vLmluYwotCi1TUkNfVVJJICA9ICJcCi0gICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKLSAgZmlsZTovL29mb25vIFwKLSAgZmlsZTovL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gImQyODBiMWQyNjdiYTViZjM5MWQyYTg5OGZlYTdjNzQ4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImNiZjIwZjA3ZmQxNTI1M2M2ODJiMjNjMTc4NmQ1MTdmNTA1YzM2ODhmN2M0ZWE5M2RhNzc3ZTE1MjNiODk2MzUiCi0KLUNGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EX0dOVV9TT1VSQ0UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDcwNzMxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xOC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIG9mb25vLmluYworCitTUkNfVVJJICA9ICJcCisgICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgZmlsZTovL29mb25vIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwYTZiMzdjOGFjZTg5MWNiMmE3Y2E1ZDEyMTA0M2EwYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1M2NkYmYzNDI5MTNmNDZiY2U0ODI3MjQxYzYwZTI0MjU1YTNkNDNhOTQ5NDVlZGY3NzQ4MmFlNWIzMTJkNTFmIgorCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL0NWRS0yMDE2LTE5MDdfMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9DVkUtMjAxNi0xOTA3XzIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYWM2OWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL0NWRS0yMDE2LTE5MDdfMi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLUZyb20gZjk4YTA5Y2FjZmY3YmFhZDg3NDhjOWFhMjE3YWZkMTU1YTRkNDkzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJtbWNjQG9wZW5ic2Qub3JnIiA8bW1jY0BvcGVuYnNkLm9yZz4KLURhdGU6IFR1ZSwgMjAgT2N0IDIwMTUgMDM6MzY6MzUgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gdXBzdHJlYW0gY29tbWl0Ci0KLVJlcGxhY2UgYSBmdW5jdGlvbi1sb2NhbCBhbGxvY2F0aW9uIHdpdGggc3RhY2sgbWVtb3J5LgotCi1vayBkam1ACi0KLVVwc3RyZWFtLUlEOiBjMDlmYmJhYjYzNzA1M2EyYWI5ZjMzY2ExNDJiNGUyMGE0YzVhMTdlCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE2LTE5MDcKLQotW1lPQ1RPICM4OTM1XQotCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gY2xpZW50bG9vcC5jIHwgOSArKy0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY2xpZW50bG9vcC5jIGIvY2xpZW50bG9vcC5jCi1pbmRleCA4N2NlYjNkLi4xZTA1Y2JhIDEwMDY0NAotLS0tIGEvY2xpZW50bG9vcC5jCi0rKysgYi9jbGllbnRsb29wLmMKLUBAIC0xLDQgKzEsNCBAQAotLS8qICRPcGVuQlNEOiBjbGllbnRsb29wLmMsdiAxLjI3NSAyMDE1LzA3LzEwIDA2OjIxOjUzIG1hcmt1cyBFeHAgJCAqLwotKy8qICRPcGVuQlNEOiBjbGllbnRsb29wLmMsdiAxLjI3NiAyMDE1LzEwLzIwIDAzOjM2OjM1IG1tY2MgRXhwICQgKi8KLSAvKgotICAqIEF1dGhvcjogVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+Ci0gICogQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKLUBAIC0zMTEsMTEgKzMxMSwxMCBAQCBjbGllbnRfeDExX2dldF9wcm90byhjb25zdCBjaGFyICpkaXNwbGF5LCBjb25zdCBjaGFyICp4YXV0aF9wYXRoLAotIAlzdGF0aWMgY2hhciBwcm90b1s1MTJdLCBkYXRhWzUxMl07Ci0gCUZJTEUgKmY7Ci0gCWludCBnb3RfZGF0YSA9IDAsIGdlbmVyYXRlZCA9IDAsIGRvX3VubGluayA9IDAsIGk7Ci0tCWNoYXIgKnhhdXRoZGlyLCAqeGF1dGhmaWxlOwotKwljaGFyIHhhdXRoZGlyW1BBVEhfTUFYXSA9ICIiLCB4YXV0aGZpbGVbUEFUSF9NQVhdID0gIiI7Ci0gCXN0cnVjdCBzdGF0IHN0OwotIAl1X2ludCBub3csIHgxMV90aW1lb3V0X3JlYWw7Ci0gCi0tCXhhdXRoZGlyID0geGF1dGhmaWxlID0gTlVMTDsKLSAJKl9wcm90byA9IHByb3RvOwotIAkqX2RhdGEgPSBkYXRhOwotIAlwcm90b1swXSA9IGRhdGFbMF0gPSAnXDAnOwotQEAgLTM0Myw4ICszNDIsNiBAQCBjbGllbnRfeDExX2dldF9wcm90byhjb25zdCBjaGFyICpkaXNwbGF5LCBjb25zdCBjaGFyICp4YXV0aF9wYXRoLAotIAkJCWRpc3BsYXkgPSB4ZGlzcGxheTsKLSAJCX0KLSAJCWlmICh0cnVzdGVkID09IDApIHsKLS0JCQl4YXV0aGRpciA9IHhtYWxsb2MoUEFUSF9NQVgpOwotLQkJCXhhdXRoZmlsZSA9IHhtYWxsb2MoUEFUSF9NQVgpOwotIAkJCW1rdGVtcF9wcm90byh4YXV0aGRpciwgUEFUSF9NQVgpOwotIAkJCS8qCi0gCQkJICogVGhlIGF1dGhlbnRpY2F0aW9uIGNvb2tpZSBzaG91bGQgYnJpZWZseSBvdXRsaXZlCi1AQCAtNDA3LDggKzQwNCw2IEBAIGNsaWVudF94MTFfZ2V0X3Byb3RvKGNvbnN0IGNoYXIgKmRpc3BsYXksIGNvbnN0IGNoYXIgKnhhdXRoX3BhdGgsCi0gCQl1bmxpbmsoeGF1dGhmaWxlKTsKLSAJCXJtZGlyKHhhdXRoZGlyKTsKLSAJfQotLQlmcmVlKHhhdXRoZGlyKTsKLS0JZnJlZSh4YXV0aGZpbGUpOwotIAotIAkvKgotIAkgKiBJZiB3ZSBkaWRuJ3QgZ2V0IGF1dGhlbnRpY2F0aW9uIGRhdGEsIGp1c3QgbWFrZSB1cCBzb21lCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9DVkUtMjAxNi0xOTA3XzMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvQ1ZFLTIwMTYtMTkwN18zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZjNTFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9DVkUtMjAxNi0xOTA3XzMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotRnJvbSBlZDRjZTgyZGJmYThhM2EzYzhlYTZmYTBkYjExM2M3MWUyMzQ0MTZjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogImRqbUBvcGVuYnNkLm9yZyIgPGRqbUBvcGVuYnNkLm9yZz4KLURhdGU6IFdlZCwgMTMgSmFuIDIwMTYgMjM6MDQ6NDcgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gdXBzdHJlYW0gY29tbWl0Ci0KLWVsaW1pbmF0ZSBmYWxsYmFjayBmcm9tIHVudHJ1c3RlZCBYMTEgZm9yd2FyZGluZyB0byB0cnVzdGVkCi0gZm9yd2FyZGluZyB3aGVuIHRoZSBYIHNlcnZlciBkaXNhYmxlcyB0aGUgU0VDVVJJVFkgZXh0ZW5zaW9uOyBSZXBvcnRlZCBieQotIFRob21hcyBIb2dlcjsgb2sgZGVyYWFkdEAKLQotVXBzdHJlYW0tSUQ6IGY3NjE5NWJkMjA2NDYxNWE2M2VmOTY3NGEwZTQwOTZiMDcxM2Y5MzgKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTYtMTkwNwotCi1bWU9DVE8gIzg5MzVdCi0KLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBjbGllbnRsb29wLmMgfCAxMTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBjbGllbnRsb29wLmggfCAgIDQgKy0tCi0gbXV4LmMgICAgICAgIHwgIDIyICsrKysrKy0tLS0tLQotIHNzaC5jICAgICAgICB8ICAyMyArKysrKy0tLS0tLS0KLSA0IGZpbGVzIGNoYW5nZWQsIDkzIGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQotCi1JbmRleDogb3BlbnNzaC03LjFwMi9jbGllbnRsb29wLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBvcGVuc3NoLTcuMXAyLm9yaWcvY2xpZW50bG9vcC5jCi0rKysgb3BlbnNzaC03LjFwMi9jbGllbnRsb29wLmMKLUBAIC0xLDQgKzEsNCBAQAotLS8qICRPcGVuQlNEOiBjbGllbnRsb29wLmMsdiAxLjI3NiAyMDE1LzEwLzIwIDAzOjM2OjM1IG1tY2MgRXhwICQgKi8KLSsvKiAkT3BlbkJTRDogY2xpZW50bG9vcC5jLHYgMS4yNzkgMjAxNi8wMS8xMyAyMzowNDo0NyBkam0gRXhwICQgKi8KLSAvKgotICAqIEF1dGhvcjogVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+Ci0gICogQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKLUBAIC0yODgsNiArMjg4LDkgQEAgY2xpZW50X3gxMV9kaXNwbGF5X3ZhbGlkKGNvbnN0IGNoYXIgKmRpcwotIHsKLSAJc2l6ZV90IGksIGRsZW47Ci0gCi0rCWlmIChkaXNwbGF5ID09IE5VTEwpCi0rCQlyZXR1cm4gMDsKLSsKLSAJZGxlbiA9IHN0cmxlbihkaXNwbGF5KTsKLSAJZm9yIChpID0gMDsgaSA8IGRsZW47IGkrKykgewotIAkJaWYgKCFpc2FsbnVtKCh1X2NoYXIpZGlzcGxheVtpXSkgJiYKLUBAIC0zMDEsMzQgKzMwNCwzMyBAQCBjbGllbnRfeDExX2Rpc3BsYXlfdmFsaWQoY29uc3QgY2hhciAqZGlzCi0gCi0gI2RlZmluZSBTU0hfWDExX1BST1RPCQkiTUlULU1BR0lDLUNPT0tJRS0xIgotICNkZWZpbmUgWDExX1RJTUVPVVRfU0xBQ0sJNjAKLS12b2lkCi0raW50Ci0gY2xpZW50X3gxMV9nZXRfcHJvdG8oY29uc3QgY2hhciAqZGlzcGxheSwgY29uc3QgY2hhciAqeGF1dGhfcGF0aCwKLSAgICAgdV9pbnQgdHJ1c3RlZCwgdV9pbnQgdGltZW91dCwgY2hhciAqKl9wcm90bywgY2hhciAqKl9kYXRhKQotIHsKLS0JY2hhciBjbWRbMTAyNF07Ci0tCWNoYXIgbGluZVs1MTJdOwotLQljaGFyIHhkaXNwbGF5WzUxMl07Ci0rCWNoYXIgY21kWzEwMjRdLCBsaW5lWzUxMl0sIHhkaXNwbGF5WzUxMl07Ci0rCWNoYXIgeGF1dGhmaWxlW1BBVEhfTUFYXSwgeGF1dGhkaXJbUEFUSF9NQVhdOwotIAlzdGF0aWMgY2hhciBwcm90b1s1MTJdLCBkYXRhWzUxMl07Ci0gCUZJTEUgKmY7Ci0tCWludCBnb3RfZGF0YSA9IDAsIGdlbmVyYXRlZCA9IDAsIGRvX3VubGluayA9IDAsIGk7Ci0tCWNoYXIgeGF1dGhkaXJbUEFUSF9NQVhdID0gIiIsIHhhdXRoZmlsZVtQQVRIX01BWF0gPSAiIjsKLSsJaW50IGdvdF9kYXRhID0gMCwgZ2VuZXJhdGVkID0gMCwgZG9fdW5saW5rID0gMCwgaSwgcjsKLSAJc3RydWN0IHN0YXQgc3Q7Ci0gCXVfaW50IG5vdywgeDExX3RpbWVvdXRfcmVhbDsKLSAKLSAJKl9wcm90byA9IHByb3RvOwotIAkqX2RhdGEgPSBkYXRhOwotLQlwcm90b1swXSA9IGRhdGFbMF0gPSAnXDAnOwotKwlwcm90b1swXSA9IGRhdGFbMF0gPSB4YXV0aGZpbGVbMF0gPSB4YXV0aGRpclswXSA9ICdcMCc7Ci0gCi0tCWlmICh4YXV0aF9wYXRoID09IE5VTEwgfHwoc3RhdCh4YXV0aF9wYXRoLCAmc3QpID09IC0xKSkgewotLQkJZGVidWcoIk5vIHhhdXRoIHByb2dyYW0uIik7Ci0tCX0gZWxzZSBpZiAoIWNsaWVudF94MTFfZGlzcGxheV92YWxpZChkaXNwbGF5KSkgewotLQkJbG9naXQoIkRJU1BMQVkgJyVzJyBpbnZhbGlkLCBmYWxsaW5nIGJhY2sgdG8gZmFrZSB4YXV0aCBkYXRhIiwKLSsJaWYgKCFjbGllbnRfeDExX2Rpc3BsYXlfdmFsaWQoZGlzcGxheSkpIHsKLSsJCWxvZ2l0KCJESVNQTEFZIFwiJXNcIiBpbnZhbGlkOyBkaXNhYmxpbmcgWDExIGZvcndhcmRpbmciLAotIAkJICAgIGRpc3BsYXkpOwotLQl9IGVsc2UgewotLQkJaWYgKGRpc3BsYXkgPT0gTlVMTCkgewotLQkJCWRlYnVnKCJ4MTFfZ2V0X3Byb3RvOiBESVNQTEFZIG5vdCBzZXQiKTsKLS0JCQlyZXR1cm47Ci0tCQl9Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsJaWYgKHhhdXRoX3BhdGggIT0gTlVMTCAmJiBzdGF0KHhhdXRoX3BhdGgsICZzdCkgPT0gLTEpIHsKLSsJCWRlYnVnKCJObyB4YXV0aCBwcm9ncmFtLiIpOwotKwkJeGF1dGhfcGF0aCA9IE5VTEw7Ci0rCX0KLSsKLSsJaWYgKHhhdXRoX3BhdGggIT0gTlVMTCkgewotIAkJLyoKLSAJCSAqIEhhbmRsZSBGYW1pbHlMb2NhbCBjYXNlIHdoZXJlICRESVNQTEFZIGRvZXMKLSAJCSAqIG5vdCBtYXRjaCBhbiBhdXRob3JpemF0aW9uIGVudHJ5LiAgRm9yIHRoaXMgd2UKLUBAIC0zMzcsNDMgKzMzOSw2MCBAQCBjbGllbnRfeDExX2dldF9wcm90byhjb25zdCBjaGFyICpkaXNwbGF5Ci0gCQkgKiAgICAgIGlzIG5vdCBwZXJmZWN0LgotIAkJICovCi0gCQlpZiAoc3RybmNtcChkaXNwbGF5LCAibG9jYWxob3N0OiIsIDEwKSA9PSAwKSB7Ci0tCQkJc25wcmludGYoeGRpc3BsYXksIHNpemVvZih4ZGlzcGxheSksICJ1bml4OiVzIiwKLS0JCQkgICAgZGlzcGxheSArIDEwKTsKLSsJCQlpZiAoKHIgPSBzbnByaW50Zih4ZGlzcGxheSwgc2l6ZW9mKHhkaXNwbGF5KSwgInVuaXg6JXMiLAotKwkJCSAgICBkaXNwbGF5ICsgMTApKSA8IDAgfHwKLSsJCQkgICAgKHNpemVfdClyID49IHNpemVvZih4ZGlzcGxheSkpIHsKLSsJCQkJZXJyb3IoIiVzOiBkaXNwbGF5IG5hbWUgdG9vIGxvbmciLCBfX2Z1bmNfXyk7Ci0rCQkJCXJldHVybiAtMTsKLSsJCQl9Ci0gCQkJZGlzcGxheSA9IHhkaXNwbGF5OwotIAkJfQotIAkJaWYgKHRydXN0ZWQgPT0gMCkgewotLQkJCW1rdGVtcF9wcm90byh4YXV0aGRpciwgUEFUSF9NQVgpOwotIAkJCS8qCi0rCQkJICogR2VuZXJhdGUgYW4gdW50cnVzdGVkIFgxMSBhdXRoIGNvb2tpZS4KLSsJCQkgKgotIAkJCSAqIFRoZSBhdXRoZW50aWNhdGlvbiBjb29raWUgc2hvdWxkIGJyaWVmbHkgb3V0bGl2ZQotIAkJCSAqIHNzaCdzIHdpbGxpbmduZXNzIHRvIGZvcndhcmQgWDExIGNvbm5lY3Rpb25zIHRvCi0gCQkJICogYXZvaWQgbmFzdHkgZmFpbC1vcGVuIGJlaGF2aW91ciBpbiB0aGUgWCBzZXJ2ZXIuCi0gCQkJICovCi0rCQkJbWt0ZW1wX3Byb3RvKHhhdXRoZGlyLCBzaXplb2YoeGF1dGhkaXIpKTsKLSsJCQlpZiAobWtkdGVtcCh4YXV0aGRpcikgPT0gTlVMTCkgewotKwkJCQllcnJvcigiJXM6IG1rZHRlbXA6ICVzIiwKLSsJCQkJICAgIF9fZnVuY19fLCBzdHJlcnJvcihlcnJubykpOwotKwkJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJCWRvX3VubGluayA9IDE7Ci0rCQkJaWYgKChyID0gc25wcmludGYoeGF1dGhmaWxlLCBzaXplb2YoeGF1dGhmaWxlKSwKLSsJCQkgICAgIiVzL3hhdXRoZmlsZSIsIHhhdXRoZGlyKSkgPCAwIHx8Ci0rCQkJICAgIChzaXplX3QpciA+PSBzaXplb2YoeGF1dGhmaWxlKSkgewotKwkJCQllcnJvcigiJXM6IHhhdXRoZmlsZSBwYXRoIHRvbyBsb25nIiwgX19mdW5jX18pOwotKwkJCQl1bmxpbmsoeGF1dGhmaWxlKTsKLSsJCQkJcm1kaXIoeGF1dGhkaXIpOwotKwkJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwotIAkJCWlmICh0aW1lb3V0ID49IFVJTlRfTUFYIC0gWDExX1RJTUVPVVRfU0xBQ0spCi0gCQkJCXgxMV90aW1lb3V0X3JlYWwgPSBVSU5UX01BWDsKLSAJCQllbHNlCi0gCQkJCXgxMV90aW1lb3V0X3JlYWwgPSB0aW1lb3V0ICsgWDExX1RJTUVPVVRfU0xBQ0s7Ci0tCQkJaWYgKG1rZHRlbXAoeGF1dGhkaXIpICE9IE5VTEwpIHsKLS0JCQkJZG9fdW5saW5rID0gMTsKLS0JCQkJc25wcmludGYoeGF1dGhmaWxlLCBQQVRIX01BWCwgIiVzL3hhdXRoZmlsZSIsCi0tCQkJCSAgICB4YXV0aGRpcik7Ci0tCQkJCXNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksCi0tCQkJCSAgICAiJXMgLWYgJXMgZ2VuZXJhdGUgJXMgIiBTU0hfWDExX1BST1RPCi0tCQkJCSAgICAiIHVudHJ1c3RlZCB0aW1lb3V0ICV1IDI+IiBfUEFUSF9ERVZOVUxMLAotLQkJCQkgICAgeGF1dGhfcGF0aCwgeGF1dGhmaWxlLCBkaXNwbGF5LAotLQkJCQkgICAgeDExX3RpbWVvdXRfcmVhbCk7Ci0tCQkJCWRlYnVnMigieDExX2dldF9wcm90bzogJXMiLCBjbWQpOwotLQkJCQlpZiAoeDExX3JlZnVzZV90aW1lID09IDApIHsKLS0JCQkJCW5vdyA9IG1vbm90aW1lKCkgKyAxOwotLQkJCQkJaWYgKFVJTlRfTUFYIC0gdGltZW91dCA8IG5vdykKLS0JCQkJCQl4MTFfcmVmdXNlX3RpbWUgPSBVSU5UX01BWDsKLS0JCQkJCWVsc2UKLS0JCQkJCQl4MTFfcmVmdXNlX3RpbWUgPSBub3cgKyB0aW1lb3V0OwotLQkJCQkJY2hhbm5lbF9zZXRfeDExX3JlZnVzZV90aW1lKAotLQkJCQkJICAgIHgxMV9yZWZ1c2VfdGltZSk7Ci0tCQkJCX0KLS0JCQkJaWYgKHN5c3RlbShjbWQpID09IDApCi0tCQkJCQlnZW5lcmF0ZWQgPSAxOwotKwkJCWlmICgociA9IHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksCi0rCQkJICAgICIlcyAtZiAlcyBnZW5lcmF0ZSAlcyAiIFNTSF9YMTFfUFJPVE8KLSsJCQkgICAgIiB1bnRydXN0ZWQgdGltZW91dCAldSAyPiIgX1BBVEhfREVWTlVMTCwKLSsJCQkgICAgeGF1dGhfcGF0aCwgeGF1dGhmaWxlLCBkaXNwbGF5LAotKwkJCSAgICB4MTFfdGltZW91dF9yZWFsKSkgPCAwIHx8Ci0rCQkJICAgIChzaXplX3QpciA+PSBzaXplb2YoY21kKSkKLSsJCQkJZmF0YWwoIiVzOiBjbWQgdG9vIGxvbmciLCBfX2Z1bmNfXyk7Ci0rCQkJZGVidWcyKCIlczogJXMiLCBfX2Z1bmNfXywgY21kKTsKLSsJCQlpZiAoeDExX3JlZnVzZV90aW1lID09IDApIHsKLSsJCQkJbm93ID0gbW9ub3RpbWUoKSArIDE7Ci0rCQkJCWlmIChVSU5UX01BWCAtIHRpbWVvdXQgPCBub3cpCi0rCQkJCQl4MTFfcmVmdXNlX3RpbWUgPSBVSU5UX01BWDsKLSsJCQkJZWxzZQotKwkJCQkJeDExX3JlZnVzZV90aW1lID0gbm93ICsgdGltZW91dDsKLSsJCQkJY2hhbm5lbF9zZXRfeDExX3JlZnVzZV90aW1lKHgxMV9yZWZ1c2VfdGltZSk7Ci0gCQkJfQotKwkJCWlmIChzeXN0ZW0oY21kKSA9PSAwKQotKwkJCQlnZW5lcmF0ZWQgPSAxOwotIAkJfQotIAotIAkJLyoKLUBAIC0zOTUsOSArNDE0LDcgQEAgY2xpZW50X3gxMV9nZXRfcHJvdG8oY29uc3QgY2hhciAqZGlzcGxheQotIAkJCQlnb3RfZGF0YSA9IDE7Ci0gCQkJaWYgKGYpCi0gCQkJCXBjbG9zZShmKTsKLS0JCX0gZWxzZQotLQkJCWVycm9yKCJXYXJuaW5nOiB1bnRydXN0ZWQgWDExIGZvcndhcmRpbmcgc2V0dXAgZmFpbGVkOiAiCi0tCQkJICAgICJ4YXV0aCBrZXkgZGF0YSBub3QgZ2VuZXJhdGVkIik7Ci0rCQl9Ci0gCX0KLSAKLSAJaWYgKGRvX3VubGluaykgewotQEAgLTQwNSw2ICs0MjIsMTMgQEAgY2xpZW50X3gxMV9nZXRfcHJvdG8oY29uc3QgY2hhciAqZGlzcGxheQotIAkJcm1kaXIoeGF1dGhkaXIpOwotIAl9Ci0gCi0rCS8qIERvbid0IGZhbGwgYmFjayB0byBmYWtlIFgxMSBkYXRhIGZvciB1bnRydXN0ZWQgZm9yd2FyZGluZyAqLwotKwlpZiAoIXRydXN0ZWQgJiYgIWdvdF9kYXRhKSB7Ci0rCQllcnJvcigiV2FybmluZzogdW50cnVzdGVkIFgxMSBmb3J3YXJkaW5nIHNldHVwIGZhaWxlZDogIgotKwkJICAgICJ4YXV0aCBrZXkgZGF0YSBub3QgZ2VuZXJhdGVkIik7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsKLSAJLyoKLSAJICogSWYgd2UgZGlkbid0IGdldCBhdXRoZW50aWNhdGlvbiBkYXRhLCBqdXN0IG1ha2UgdXAgc29tZQotIAkgKiBkYXRhLiAgVGhlIGZvcndhcmRpbmcgY29kZSB3aWxsIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUKLUBAIC00MjcsNiArNDUxLDggQEAgY2xpZW50X3gxMV9nZXRfcHJvdG8oY29uc3QgY2hhciAqZGlzcGxheQotIAkJCXJuZCA+Pj0gODsKLSAJCX0KLSAJfQotKwotKwlyZXR1cm4gMDsKLSB9Ci0gCi0gLyoKLUluZGV4OiBvcGVuc3NoLTcuMXAyL2NsaWVudGxvb3AuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG9wZW5zc2gtNy4xcDIub3JpZy9jbGllbnRsb29wLmgKLSsrKyBvcGVuc3NoLTcuMXAyL2NsaWVudGxvb3AuaAotQEAgLTEsNCArMSw0IEBACi0tLyogJE9wZW5CU0Q6IGNsaWVudGxvb3AuaCx2IDEuMzEgMjAxMy8wNi8wMiAyMzozNjoyOSBkdHVja2VyIEV4cCAkICovCi0rLyogJE9wZW5CU0Q6IGNsaWVudGxvb3AuaCx2IDEuMzIgMjAxNi8wMS8xMyAyMzowNDo0NyBkam0gRXhwICQgKi8KLSAKLSAvKgotICAqIEF1dGhvcjogVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+Ci1AQCAtMzksNyArMzksNyBAQAotIAotIC8qIENsaWVudCBzaWRlIG1haW4gbG9vcCBmb3IgdGhlIGludGVyYWN0aXZlIHNlc3Npb24uICovCi0gaW50CSBjbGllbnRfbG9vcChpbnQsIGludCwgaW50KTsKLS12b2lkCSBjbGllbnRfeDExX2dldF9wcm90byhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdV9pbnQsIHVfaW50LAotK2ludAkgY2xpZW50X3gxMV9nZXRfcHJvdG8oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVfaW50LCB1X2ludCwKLSAJICAgIGNoYXIgKiosIGNoYXIgKiopOwotIHZvaWQJIGNsaWVudF9nbG9iYWxfcmVxdWVzdF9yZXBseV9md2QoaW50LCB1X2ludDMyX3QsIHZvaWQgKik7Ci0gdm9pZAkgY2xpZW50X3Nlc3Npb24yX3NldHVwKGludCwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHRlcm1pb3MgKiwKLUluZGV4OiBvcGVuc3NoLTcuMXAyL211eC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gb3BlbnNzaC03LjFwMi5vcmlnL211eC5jCi0rKysgb3BlbnNzaC03LjFwMi9tdXguYwotQEAgLTEsNCArMSw0IEBACi0tLyogJE9wZW5CU0Q6IG11eC5jLHYgMS41NCAyMDE1LzA4LzE5IDIzOjE4OjI2IGRqbSBFeHAgJCAqLwotKy8qICRPcGVuQlNEOiBtdXguYyx2IDEuNTggMjAxNi8wMS8xMyAyMzowNDo0NyBkam0gRXhwICQgKi8KLSAvKgotICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA4IERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KLSAgKgotQEAgLTEzNTQsMTYgKzEzNTQsMTggQEAgbXV4X3Nlc3Npb25fY29uZmlybShpbnQgaWQsIGludCBzdWNjZXNzLAotIAkJY2hhciAqcHJvdG8sICpkYXRhOwotIAotIAkJLyogR2V0IHJlYXNvbmFibGUgbG9jYWwgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uICovCi0tCQljbGllbnRfeDExX2dldF9wcm90byhkaXNwbGF5LCBvcHRpb25zLnhhdXRoX2xvY2F0aW9uLAotKwkJaWYgKGNsaWVudF94MTFfZ2V0X3Byb3RvKGRpc3BsYXksIG9wdGlvbnMueGF1dGhfbG9jYXRpb24sCi0gCQkgICAgb3B0aW9ucy5mb3J3YXJkX3gxMV90cnVzdGVkLCBvcHRpb25zLmZvcndhcmRfeDExX3RpbWVvdXQsCi0tCQkgICAgJnByb3RvLCAmZGF0YSk7Ci0tCQkvKiBSZXF1ZXN0IGZvcndhcmRpbmcgd2l0aCBhdXRoZW50aWNhdGlvbiBzcG9vZmluZy4gKi8KLS0JCWRlYnVnKCJSZXF1ZXN0aW5nIFgxMSBmb3J3YXJkaW5nIHdpdGggYXV0aGVudGljYXRpb24gIgotLQkJICAgICJzcG9vZmluZy4iKTsKLS0JCXgxMV9yZXF1ZXN0X2ZvcndhcmRpbmdfd2l0aF9zcG9vZmluZyhpZCwgZGlzcGxheSwgcHJvdG8sCi0tCQkgICAgZGF0YSwgMSk7Ci0tCQljbGllbnRfZXhwZWN0X2NvbmZpcm0oaWQsICJYMTEgZm9yd2FyZGluZyIsIENPTkZJUk1fV0FSTik7Ci0tCQkvKiBYWFggZXhpdF9vbl9mb3J3YXJkX2ZhaWx1cmUgKi8KLSsJCSAgICAmcHJvdG8sICZkYXRhKSA9PSAwKSB7Ci0rCQkJLyogUmVxdWVzdCBmb3J3YXJkaW5nIHdpdGggYXV0aGVudGljYXRpb24gc3Bvb2ZpbmcuICovCi0rCQkJZGVidWcoIlJlcXVlc3RpbmcgWDExIGZvcndhcmRpbmcgd2l0aCBhdXRoZW50aWNhdGlvbiAiCi0rCQkJICAgICJzcG9vZmluZy4iKTsKLSsJCQl4MTFfcmVxdWVzdF9mb3J3YXJkaW5nX3dpdGhfc3Bvb2ZpbmcoaWQsIGRpc3BsYXksIHByb3RvLAotKwkJCSAgICBkYXRhLCAxKTsKLSsJCQkvKiBYWFggZXhpdF9vbl9mb3J3YXJkX2ZhaWx1cmUgKi8KLSsJCQljbGllbnRfZXhwZWN0X2NvbmZpcm0oaWQsICJYMTEgZm9yd2FyZGluZyIsCi0rCQkJICAgIENPTkZJUk1fV0FSTik7Ci0rCQl9Ci0gCX0KLSAKLSAJaWYgKGNjdHgtPndhbnRfYWdlbnRfZndkICYmIG9wdGlvbnMuZm9yd2FyZF9hZ2VudCkgewotSW5kZXg6IG9wZW5zc2gtNy4xcDIvc3NoLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBvcGVuc3NoLTcuMXAyLm9yaWcvc3NoLmMKLSsrKyBvcGVuc3NoLTcuMXAyL3NzaC5jCi1AQCAtMSw0ICsxLDQgQEAKLS0vKiAkT3BlbkJTRDogc3NoLmMsdiAxLjQyMCAyMDE1LzA3LzMwIDAwOjAxOjM0IGRqbSBFeHAgJCAqLwotKy8qICRPcGVuQlNEOiBzc2guYyx2IDEuNDMzIDIwMTYvMDEvMTMgMjM6MDQ6NDcgZGptIEV4cCAkICovCi0gLyoKLSAgKiBBdXRob3I6IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPgotICAqIENvcHlyaWdodCAoYykgMTk5NSBUYXR1IFlsb25lbiA8eWxvQGNzLmh1dC5maT4sIEVzcG9vLCBGaW5sYW5kCi1AQCAtMTYwNCw2ICsxNjA0LDcgQEAgc3NoX3Nlc3Npb24odm9pZCkKLSAJc3RydWN0IHdpbnNpemUgd3M7Ci0gCWNoYXIgKmNwOwotIAljb25zdCBjaGFyICpkaXNwbGF5OwotKwljaGFyICpwcm90byA9IE5VTEwsICpkYXRhID0gTlVMTDsKLSAKLSAJLyogRW5hYmxlIGNvbXByZXNzaW9uIGlmIHJlcXVlc3RlZC4gKi8KLSAJaWYgKG9wdGlvbnMuY29tcHJlc3Npb24pIHsKLUBAIC0xNjc0LDEzICsxNjc1LDkgQEAgc3NoX3Nlc3Npb24odm9pZCkKLSAJZGlzcGxheSA9IGdldGVudigiRElTUExBWSIpOwotIAlpZiAoZGlzcGxheSA9PSBOVUxMICYmIG9wdGlvbnMuZm9yd2FyZF94MTEpCi0gCQlkZWJ1ZygiWDExIGZvcndhcmRpbmcgcmVxdWVzdGVkIGJ1dCBESVNQTEFZIG5vdCBzZXQiKTsKLS0JaWYgKG9wdGlvbnMuZm9yd2FyZF94MTEgJiYgZGlzcGxheSAhPSBOVUxMKSB7Ci0tCQljaGFyICpwcm90bywgKmRhdGE7Ci0tCQkvKiBHZXQgcmVhc29uYWJsZSBsb2NhbCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4gKi8KLS0JCWNsaWVudF94MTFfZ2V0X3Byb3RvKGRpc3BsYXksIG9wdGlvbnMueGF1dGhfbG9jYXRpb24sCi0tCQkgICAgb3B0aW9ucy5mb3J3YXJkX3gxMV90cnVzdGVkLAotLQkJICAgIG9wdGlvbnMuZm9yd2FyZF94MTFfdGltZW91dCwKLS0JCSAgICAmcHJvdG8sICZkYXRhKTsKLSsJaWYgKG9wdGlvbnMuZm9yd2FyZF94MTEgJiYgY2xpZW50X3gxMV9nZXRfcHJvdG8oZGlzcGxheSwKLSsJICAgIG9wdGlvbnMueGF1dGhfbG9jYXRpb24sIG9wdGlvbnMuZm9yd2FyZF94MTFfdHJ1c3RlZCwKLSsJICAgIG9wdGlvbnMuZm9yd2FyZF94MTFfdGltZW91dCwgJnByb3RvLCAmZGF0YSkgPT0gMCkgewotIAkJLyogUmVxdWVzdCBmb3J3YXJkaW5nIHdpdGggYXV0aGVudGljYXRpb24gc3Bvb2ZpbmcuICovCi0gCQlkZWJ1ZygiUmVxdWVzdGluZyBYMTEgZm9yd2FyZGluZyB3aXRoIGF1dGhlbnRpY2F0aW9uICIKLSAJCSAgICAic3Bvb2ZpbmcuIik7Ci1AQCAtMTc3MCw2ICsxNzY3LDcgQEAgc3NoX3Nlc3Npb24yX3NldHVwKGludCBpZCwgaW50IHN1Y2Nlc3MsCi0gCWV4dGVybiBjaGFyICoqZW52aXJvbjsKLSAJY29uc3QgY2hhciAqZGlzcGxheTsKLSAJaW50IGludGVyYWN0aXZlID0gdHR5X2ZsYWc7Ci0rCWNoYXIgKnByb3RvID0gTlVMTCwgKmRhdGEgPSBOVUxMOwotIAotIAlpZiAoIXN1Y2Nlc3MpCi0gCQlyZXR1cm47IC8qIE5vIG5lZWQgZm9yIGVycm9yIG1lc3NhZ2UsIGNoYW5uZWxzIGNvZGUgc2VucyBvbmUgKi8KLUBAIC0xNzc3LDEyICsxNzc1LDkgQEAgc3NoX3Nlc3Npb24yX3NldHVwKGludCBpZCwgaW50IHN1Y2Nlc3MsCi0gCWRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKLSAJaWYgKGRpc3BsYXkgPT0gTlVMTCAmJiBvcHRpb25zLmZvcndhcmRfeDExKQotIAkJZGVidWcoIlgxMSBmb3J3YXJkaW5nIHJlcXVlc3RlZCBidXQgRElTUExBWSBub3Qgc2V0Iik7Ci0tCWlmIChvcHRpb25zLmZvcndhcmRfeDExICYmIGRpc3BsYXkgIT0gTlVMTCkgewotLQkJY2hhciAqcHJvdG8sICpkYXRhOwotLQkJLyogR2V0IHJlYXNvbmFibGUgbG9jYWwgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uICovCi0tCQljbGllbnRfeDExX2dldF9wcm90byhkaXNwbGF5LCBvcHRpb25zLnhhdXRoX2xvY2F0aW9uLAotLQkJICAgIG9wdGlvbnMuZm9yd2FyZF94MTFfdHJ1c3RlZCwKLS0JCSAgICBvcHRpb25zLmZvcndhcmRfeDExX3RpbWVvdXQsICZwcm90bywgJmRhdGEpOwotKwlpZiAob3B0aW9ucy5mb3J3YXJkX3gxMSAmJiBjbGllbnRfeDExX2dldF9wcm90byhkaXNwbGF5LAotKwkgICAgb3B0aW9ucy54YXV0aF9sb2NhdGlvbiwgb3B0aW9ucy5mb3J3YXJkX3gxMV90cnVzdGVkLAotKwkgICAgb3B0aW9ucy5mb3J3YXJkX3gxMV90aW1lb3V0LCAmcHJvdG8sICZkYXRhKSA9PSAwKSB7Ci0gCQkvKiBSZXF1ZXN0IGZvcndhcmRpbmcgd2l0aCBhdXRoZW50aWNhdGlvbiBzcG9vZmluZy4gKi8KLSAJCWRlYnVnKCJSZXF1ZXN0aW5nIFgxMSBmb3J3YXJkaW5nIHdpdGggYXV0aGVudGljYXRpb24gIgotIAkJICAgICJzcG9vZmluZy4iKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9DVkUtMjAxNi0xOTA3X3Vwc3RyZWFtX2NvbW1pdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9DVkUtMjAxNi0xOTA3X3Vwc3RyZWFtX2NvbW1pdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNkMTMyZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvQ1ZFLTIwMTYtMTkwN191cHN0cmVhbV9jb21taXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1Gcm9tIGQ3NzE0OGUzYTNlZjZjMjliMjZlYzc0MzMxNDU1Mzk0NTgxYWEyNTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiZGptQG9wZW5ic2Qub3JnIiA8ZGptQG9wZW5ic2Qub3JnPgotRGF0ZTogU3VuLCA4IE5vdiAyMDE1IDIxOjU5OjExICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIHVwc3RyZWFtIGNvbW1pdAotCi1maXggT09CIHJlYWQgaW4gcGFja2V0IGNvZGUgY2F1c2VkIGJ5IG1pc3NpbmcgcmV0dXJuCi0gc3RhdGVtZW50IGZvdW5kIGJ5IEJlbiBIYXdrZXM7IG9rIG1hcmt1c0AgZGVyYWFkdEAKLQotVXBzdHJlYW0tSUQ6IGEzZTNhODU0MzRlYmZhMDY5MGQ0ODc5MDkxOTU5NTkxZjMwZWZjNjIKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNi0xOTA3Ci0KLVtZT0NUTyAjODkzNV0KLQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIHBhY2tldC5jIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLUluZGV4OiBvcGVuc3NoLTcuMXAyL3BhY2tldC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gb3BlbnNzaC03LjFwMi5vcmlnL3BhY2tldC5jCi0rKysgb3BlbnNzaC03LjFwMi9wYWNrZXQuYwotQEAgLTE4NTUsNiArMTg1NSw3IEBAIHNzaF9wYWNrZXRfcHJvY2Vzc19pbmNvbWluZyhzdHJ1Y3Qgc3NoICoKLSAJCWlmIChsZW4gPj0gc3RhdGUtPnBhY2tldF9kaXNjYXJkKSB7Ci0gCQkJaWYgKChyID0gc3NoX3BhY2tldF9zdG9wX2Rpc2NhcmQoc3NoKSkgIT0gMCkKLSAJCQkJcmV0dXJuIHI7Ci0rCQkJcmV0dXJuIFNTSF9FUlJfQ09OTl9DT1JSVVBUOwotIAkJfQotIAkJc3RhdGUtPnBhY2tldF9kaXNjYXJkIC09IGxlbjsKLSAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2ZpeC1wb3RlbnRpYWwtc2lnbmVkLW92ZXJmbG93LWluLXBvaW50ZXItYXJpdGhtYXRpYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9maXgtcG90ZW50aWFsLXNpZ25lZC1vdmVyZmxvdy1pbi1wb2ludGVyLWFyaXRobWF0aWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2NGExNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9maXgtcG90ZW50aWFsLXNpZ25lZC1vdmVyZmxvdy1pbi1wb2ludGVyLWFyaXRobWF0aWMucGF0Y2gKQEAgLTAsMCArMSw5OSBAQAorRnJvbSAzMzI4ZTk4YmNiZjI5MzBjZDdlZWEzZTZjOTJhZDVkY2JkZjQ3OTRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyNCBBdWcgMjAxNiAwMzoxNTo0MyArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggcG90ZW50aWFsIHNpZ25lZCBvdmVyZmxvdyBpbiBwb2ludGVyIGFyaXRobWF0aWMKKworUG9pbnRlciBhcml0aG1hdGljIHJlc3VsdHMgaW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBzaWduZWQgaW50ZWdlcgordHlwZSwgc28gdGhhdCAncyAtIHNyYycgaW4gc3RybGNweSBhbmQgb3RoZXJzIG1heSB0cmlnZ2VyIHNpZ25lZCBvdmVyZmxvdy4KK0luIGNhc2Ugb2YgY29tcGlsYXRpb24gYnkgZ2NjIG9yIGNsYW5nIHdpdGggLWZ0cmFwdiBvcHRpb24sIHRoZSBvdmVyZmxvdword291bGQgbGVhZCB0byBwcm9ncmFtIGFib3J0LgorCitVcHN0cmVhbS1zdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjA4XQorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBvcGVuYnNkLWNvbXBhdC9zdHJsY2F0LmMgfCA4ICsrKysrKy0tCisgb3BlbmJzZC1jb21wYXQvc3RybGNweS5jIHwgOCArKysrKystLQorIG9wZW5ic2QtY29tcGF0L3N0cm5sZW4uYyB8IDggKysrKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBhdC9zdHJsY2F0LmMgYi9vcGVuYnNkLWNvbXBhdC9zdHJsY2F0LmMKK2luZGV4IGJjYzFiNjEuLmU3NThlYmYgMTAwNjQ0CistLS0gYS9vcGVuYnNkLWNvbXBhdC9zdHJsY2F0LmMKKysrKyBiL29wZW5ic2QtY29tcGF0L3N0cmxjYXQuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAvKgorICAqIEFwcGVuZHMgc3JjIHRvIHN0cmluZyBkc3Qgb2Ygc2l6ZSBzaXogKHVubGlrZSBzdHJuY2F0LCBzaXogaXMgdGhlCitAQCAtNTUsOCArNTYsMTEgQEAgc3RybGNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpeikKKyAJCXMrKzsKKyAJfQorIAkqZCA9ICdcMCc7CistCistCXJldHVybihkbGVuICsgKHMgLSBzcmMpKTsJLyogY291bnQgZG9lcyBub3QgaW5jbHVkZSBOVUwgKi8KKysgICAgICAgIC8qCisrCSAqIENhc3QgcG9pbnRlcnMgdG8gdW5zaWduZWQgdHlwZSBiZWZvcmUgY2FsY3VsYXRpb24sIHRvIGF2b2lkIHNpZ25lZAorKwkgKiBvdmVyZmxvdyB3aGVuIHRoZSBzdHJpbmcgZW5kcyB3aGVyZSB0aGUgTVNCIGhhcyBjaGFuZ2VkLgorKwkgKi8KKysJcmV0dXJuIChkbGVuICsgKCh1aW50cHRyX3QpcyAtICh1aW50cHRyX3Qpc3JjKSk7CS8qIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgTlVMICovCisgfQorIAorICNlbmRpZiAvKiAhSEFWRV9TVFJMQ0FUICovCitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvc3RybGNweS5jIGIvb3BlbmJzZC1jb21wYXQvc3RybGNweS5jCitpbmRleCBiNGIxYjYwLi5iMDZmMzc0IDEwMDY0NAorLS0tIGEvb3BlbmJzZC1jb21wYXQvc3RybGNweS5jCisrKysgYi9vcGVuYnNkLWNvbXBhdC9zdHJsY3B5LmMKK0BAIC0yMyw2ICsyMyw3IEBACisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgLyoKKyAgKiBDb3B5IHNyYyB0byBzdHJpbmcgZHN0IG9mIHNpemUgc2l6LiAgQXQgbW9zdCBzaXotMSBjaGFyYWN0ZXJzCitAQCAtNTEsOCArNTIsMTEgQEAgc3RybGNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpeikKKyAJCXdoaWxlICgqcysrKQorIAkJCTsKKyAJfQorLQorLQlyZXR1cm4ocyAtIHNyYyAtIDEpOwkvKiBjb3VudCBkb2VzIG5vdCBpbmNsdWRlIE5VTCAqLworKyAgICAgICAgLyoKKysJICogQ2FzdCBwb2ludGVycyB0byB1bnNpZ25lZCB0eXBlIGJlZm9yZSBjYWxjdWxhdGlvbiwgdG8gYXZvaWQgc2lnbmVkCisrCSAqIG92ZXJmbG93IHdoZW4gdGhlIHN0cmluZyBlbmRzIHdoZXJlIHRoZSBNU0IgaGFzIGNoYW5nZWQuCisrCSAqLworKwlyZXR1cm4gKCh1aW50cHRyX3QpcyAtICh1aW50cHRyX3Qpc3JjIC0gMSk7CS8qIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgTlVMICovCisgfQorIAorICNlbmRpZiAvKiAhSEFWRV9TVFJMQ1BZICovCitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvc3Rybmxlbi5jIGIvb3BlbmJzZC1jb21wYXQvc3Rybmxlbi5jCitpbmRleCA5M2Q1MTU1Li45YjhkZTVkIDEwMDY0NAorLS0tIGEvb3BlbmJzZC1jb21wYXQvc3Rybmxlbi5jCisrKysgYi9vcGVuYnNkLWNvbXBhdC9zdHJubGVuLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgc2l6ZV90Cisgc3Rybmxlbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBtYXhsZW4pCitAQCAtMzEsNyArMzIsMTAgQEAgc3Rybmxlbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBtYXhsZW4pCisgCisgCWZvciAoY3AgPSBzdHI7IG1heGxlbiAhPSAwICYmICpjcCAhPSAnXDAnOyBjcCsrLCBtYXhsZW4tLSkKKyAJCTsKKy0KKy0JcmV0dXJuIChzaXplX3QpKGNwIC0gc3RyKTsKKysgICAgICAgIC8qCisrCSAqIENhc3QgcG9pbnRlcnMgdG8gdW5zaWduZWQgdHlwZSBiZWZvcmUgY2FsY3VsYXRpb24sIHRvIGF2b2lkIHNpZ25lZAorKwkgKiBvdmVyZmxvdyB3aGVuIHRoZSBzdHJpbmcgZW5kcyB3aGVyZSB0aGUgTVNCIGhhcyBjaGFuZ2VkLgorKwkgKi8KKysJcmV0dXJuIChzaXplX3QpKCh1aW50cHRyX3QpY3AgLSAodWludHB0cl90KXN0cik7CisgfQorICNlbmRpZgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvaW5pdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0CmluZGV4IDcwZDRhMzQuLjFmNjM3MjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0CkBAIC00MSw3ICs0MSw3IEBACiB9CiAKIGNoZWNrX2NvbmZpZygpIHsKLQkvdXNyL3NiaW4vc3NoZCAtdCB8fCBleGl0IDEKKwkvdXNyL3NiaW4vc3NoZCAtdCAkU1NIRF9PUFRTIHx8IGV4aXQgMQogfQogCiBjaGVja19rZXlzKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL29wZW5zc2gtNy4xcDEtY29uZGl0aW9uYWwtY29tcGlsZS1kZXMtaW4tY2lwaGVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL29wZW5zc2gtNy4xcDEtY29uZGl0aW9uYWwtY29tcGlsZS1kZXMtaW4tY2lwaGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NzNjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvb3BlbnNzaC03LjFwMS1jb25kaXRpb25hbC1jb21waWxlLWRlcy1pbi1jaXBoZXIucGF0Y2gKQEAgLTAsMCArMSwxMTggQEAKK0Zyb20gZDdlYjI2Nzg1YWQ0ZjI1ZmIwOWZhZTQ2NzI2YWI4Y2EzZmUxNjkyMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhhaXFpbmcgQmFpIDxIYWlxaW5nLkJhaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMiBBdWcgMjAxNiAxNDoxMToxNiArMDMwMAorU3ViamVjdDogW1BBVENIXSBSZW1vdmUgZGVzIGluIGNpcGhlci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhhaXFpbmcgQmFpIDxIYWlxaW5nLkJhaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNpcGhlci5jIHwgMTggKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NpcGhlci5jIGIvY2lwaGVyLmMKK2luZGV4IDAzMWJkYTkuLjZjZDY2N2EgMTAwNjQ0CistLS0gYS9jaXBoZXIuYworKysrIGIvY2lwaGVyLmMKK0BAIC01Myw4ICs1MywxMCBAQAorIAorICNpZmRlZiBXSVRIX1NTSDEKKyBleHRlcm4gY29uc3QgRVZQX0NJUEhFUiAqZXZwX3NzaDFfYmYodm9pZCk7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIGV4dGVybiBjb25zdCBFVlBfQ0lQSEVSICpldnBfc3NoMV8zZGVzKHZvaWQpOworIGV4dGVybiBpbnQgc3NoMV8zZGVzX2l2KEVWUF9DSVBIRVJfQ1RYICosIGludCwgdV9jaGFyICosIGludCk7CisrI2VuZGlmIC8qIE9QRU5TU0xfTk9fREVTICovCisgI2VuZGlmCisgCisgc3RydWN0IHNzaGNpcGhlciB7CitAQCAtNzksMTUgKzgxLDE5IEBAIHN0cnVjdCBzc2hjaXBoZXIgeworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyIGNpcGhlcnNbXSA9IHsKKyAjaWZkZWYgV0lUSF9TU0gxCisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIAl7ICJkZXMiLAlTU0hfQ0lQSEVSX0RFUywgOCwgOCwgMCwgMCwgMCwgMSwgRVZQX2Rlc19jYmMgfSwKKyAJeyAiM2RlcyIsCVNTSF9DSVBIRVJfM0RFUywgOCwgMTYsIDAsIDAsIDAsIDEsIGV2cF9zc2gxXzNkZXMgfSwKKysjZW5kaWYgLyogT1BFTlNTTF9OT19ERVMgKi8KKyAjIGlmbmRlZiBPUEVOU1NMX05PX0JGCisgCXsgImJsb3dmaXNoIiwJU1NIX0NJUEhFUl9CTE9XRklTSCwgOCwgMzIsIDAsIDAsIDAsIDEsIGV2cF9zc2gxX2JmIH0sCisgIyBlbmRpZiAvKiBPUEVOU1NMX05PX0JGICovCisgI2VuZGlmIC8qIFdJVEhfU1NIMSAqLworICNpZmRlZiBXSVRIX09QRU5TU0wKKyAJeyAibm9uZSIsCVNTSF9DSVBIRVJfTk9ORSwgOCwgMCwgMCwgMCwgMCwgMCwgRVZQX2VuY19udWxsIH0sCisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIAl7ICIzZGVzLWNiYyIsCVNTSF9DSVBIRVJfU1NIMiwgOCwgMjQsIDAsIDAsIDAsIDEsIEVWUF9kZXNfZWRlM19jYmMgfSwKKysjZW5kaWYgLyogT1BFTlNTTF9OT19ERVMgKi8KKyAjIGlmbmRlZiBPUEVOU1NMX05PX0JGCisgCXsgImJsb3dmaXNoLWNiYyIsCisgCQkJU1NIX0NJUEhFUl9TU0gyLCA4LCAxNiwgMCwgMCwgMCwgMSwgRVZQX2JmX2NiYyB9LAorQEAgLTE3MSw4ICsxNzcsMTAgQEAgY2lwaGVyX2tleWxlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQorIHVfaW50CisgY2lwaGVyX3NlY2xlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQorIHsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgCWlmIChzdHJjbXAoIjNkZXMtY2JjIiwgYy0+bmFtZSkgPT0gMCkKKyAJCXJldHVybiAxNDsKKysjZW5kaWYgLyogT1BFTlNTTF9OT19ERVMgKi8KKyAJcmV0dXJuIGNpcGhlcl9rZXlsZW4oYyk7CisgfQorIAorQEAgLTIwOSwxMSArMjE3LDEzIEBAIHVfaW50CisgY2lwaGVyX21hc2tfc3NoMShpbnQgY2xpZW50KQorIHsKKyAJdV9pbnQgbWFzayA9IDA7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIAltYXNrIHw9IDEgPDwgU1NIX0NJUEhFUl8zREVTOwkJLyogTWFuZGF0b3J5ICovCisgCW1hc2sgfD0gMSA8PCBTU0hfQ0lQSEVSX0JMT1dGSVNIOworIAlpZiAoY2xpZW50KSB7CisgCQltYXNrIHw9IDEgPDwgU1NIX0NJUEhFUl9ERVM7CisgCX0KKysjZW5kaWYgLypPUEVOU1NMX05PX0RFUyovCisgCXJldHVybiBtYXNrOworIH0KKyAKK0BAIC01NTMsNyArNTYzLDkgQEAgY2lwaGVyX2dldF9rZXlpdihzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MsIHVfY2hhciAqaXYsIHVfaW50IGxlbikKKyAJc3dpdGNoIChjLT5udW1iZXIpIHsKKyAjaWZkZWYgV0lUSF9PUEVOU1NMCisgCWNhc2UgU1NIX0NJUEhFUl9TU0gyOgorKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAJY2FzZSBTU0hfQ0lQSEVSX0RFUzoKKysjZW5kaWYgLyogT1BFTlNTTF9OT19ERVMgKi8KKyAJY2FzZSBTU0hfQ0lQSEVSX0JMT1dGSVNIOgorIAkJZXZwbGVuID0gRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKCZjYy0+ZXZwKTsKKyAJCWlmIChldnBsZW4gPT0gMCkKK0BAIC01NzYsOCArNTg4LDEwIEBAIGNpcGhlcl9nZXRfa2V5aXYoc3RydWN0IHNzaGNpcGhlcl9jdHggKmNjLCB1X2NoYXIgKml2LCB1X2ludCBsZW4pCisgCQlicmVhazsKKyAjZW5kaWYKKyAjaWZkZWYgV0lUSF9TU0gxCisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIAljYXNlIFNTSF9DSVBIRVJfM0RFUzoKKyAJCXJldHVybiBzc2gxXzNkZXNfaXYoJmNjLT5ldnAsIDAsIGl2LCAyNCk7CisrI2VuZGlmIC8qIE9QRU5TU0xfTk9fREVTICovCisgI2VuZGlmCisgCWRlZmF1bHQ6CisgCQlyZXR1cm4gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworQEAgLTYwMSw3ICs2MTUsOSBAQCBjaXBoZXJfc2V0X2tleWl2KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICpjYywgY29uc3QgdV9jaGFyICppdikKKyAJc3dpdGNoIChjLT5udW1iZXIpIHsKKyAjaWZkZWYgV0lUSF9PUEVOU1NMCisgCWNhc2UgU1NIX0NJUEhFUl9TU0gyOgorKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAJY2FzZSBTU0hfQ0lQSEVSX0RFUzoKKysjZW5kaWYgLyogT1BFTlNTTF9OT19ERVMgKi8KKyAJY2FzZSBTU0hfQ0lQSEVSX0JMT1dGSVNIOgorIAkJZXZwbGVuID0gRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKCZjYy0+ZXZwKTsKKyAJCWlmIChldnBsZW4gPD0gMCkKK0BAIC02MTYsOCArNjMyLDEwIEBAIGNpcGhlcl9zZXRfa2V5aXYoc3RydWN0IHNzaGNpcGhlcl9jdHggKmNjLCBjb25zdCB1X2NoYXIgKml2KQorIAkJYnJlYWs7CisgI2VuZGlmCisgI2lmZGVmIFdJVEhfU1NIMQorKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAJY2FzZSBTU0hfQ0lQSEVSXzNERVM6CisgCQlyZXR1cm4gc3NoMV8zZGVzX2l2KCZjYy0+ZXZwLCAxLCAodV9jaGFyICopaXYsIDI0KTsKKysjZW5kaWYgLyogT1BFTlNTTF9OT19ERVMgKi8KKyAjZW5kaWYKKyAJZGVmYXVsdDoKKyAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9vcGVuc3NoLTcuMXAxLWNvbmRpdGlvbmFsLWNvbXBpbGUtZGVzLWluLXBrY3MxMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9vcGVuc3NoLTcuMXAxLWNvbmRpdGlvbmFsLWNvbXBpbGUtZGVzLWluLXBrY3MxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTVhZjQyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL29wZW5zc2gtNy4xcDEtY29uZGl0aW9uYWwtY29tcGlsZS1kZXMtaW4tcGtjczExLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gMDRjZmQ4NDQyM2Y2OTNkODc5ZGMzZmZlYmIwZjZmZTI2ODBjMjU0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhhaXFpbmcgQmFpIDxIYWlxaW5nLkJhaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAxNiAxNTo1OToyMSArMDgwMAorU3ViamVjdDogW1BBVENIIDMvM10gcmVtb3ZlIGRlcyBpbiBwa2NzMTEuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIYWlxaW5nIEJhaSA8SGFpcWluZy5CYWlAd2luZHJpdmVyLmNvbT4KKworLS0tCisgcGtjczExLmggfCA4ICsrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcGtjczExLmggYi9wa2NzMTEuaAoraW5kZXggYjAxZDU4Zi4uOThiMzZlNiAxMDA2NDQKKy0tLSBhL3BrY3MxMS5oCisrKysgYi9wa2NzMTEuaAorQEAgLTM0Miw5ICszNDIsMTEgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGNrX2tleV90eXBlX3Q7CisgI2RlZmluZSBDS0tfR0VORVJJQ19TRUNSRVQJKDB4MTApCisgI2RlZmluZSBDS0tfUkMyCQkJKDB4MTEpCisgI2RlZmluZSBDS0tfUkM0CQkJKDB4MTIpCisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworICNkZWZpbmUgQ0tLX0RFUwkJCSgweDEzKQorICNkZWZpbmUgQ0tLX0RFUzIJCSgweDE0KQorICNkZWZpbmUgQ0tLX0RFUzMJCSgweDE1KQorKyNlbmRpZiAvKiBPUEVOU1NMX05PX0RFUyAqLworICNkZWZpbmUgQ0tLX0NBU1QJCSgweDE2KQorICNkZWZpbmUgQ0tLX0NBU1QzCQkoMHgxNykKKyAjZGVmaW5lIENLS19DQVNUMTI4CQkoMHgxOCkKK0BAIC01MTIsNiArNTE0LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGNrX21lY2hhbmlzbV90eXBlX3Q7CisgI2RlZmluZSBDS01fUkMyX0NCQ19QQUQJCQkoMHgxMDUpCisgI2RlZmluZSBDS01fUkM0X0tFWV9HRU4JCQkoMHgxMTApCisgI2RlZmluZSBDS01fUkM0CQkJCSgweDExMSkKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgI2RlZmluZSBDS01fREVTX0tFWV9HRU4JCQkoMHgxMjApCisgI2RlZmluZSBDS01fREVTX0VDQgkJCSgweDEyMSkKKyAjZGVmaW5lIENLTV9ERVNfQ0JDCQkJKDB4MTIyKQorQEAgLTUyNSw2ICs1MjgsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY2tfbWVjaGFuaXNtX3R5cGVfdDsKKyAjZGVmaW5lIENLTV9ERVMzX01BQwkJCSgweDEzNCkKKyAjZGVmaW5lIENLTV9ERVMzX01BQ19HRU5FUkFMCQkoMHgxMzUpCisgI2RlZmluZSBDS01fREVTM19DQkNfUEFECQkoMHgxMzYpCisrI2VuZGlmIC8qIE9QRU5TU0xfTk9fREVTICovCisgI2RlZmluZSBDS01fQ0RNRl9LRVlfR0VOCQkoMHgxNDApCisgI2RlZmluZSBDS01fQ0RNRl9FQ0IJCQkoMHgxNDEpCisgI2RlZmluZSBDS01fQ0RNRl9DQkMJCQkoMHgxNDIpCitAQCAtNjEwLDggKzYxNCwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY2tfbWVjaGFuaXNtX3R5cGVfdDsKKyAjZGVmaW5lIENLTV9NRDVfS0VZX0RFUklWQVRJT04JCSgweDM5MCkKKyAjZGVmaW5lIENLTV9NRDJfS0VZX0RFUklWQVRJT04JCSgweDM5MSkKKyAjZGVmaW5lIENLTV9TSEExX0tFWV9ERVJJVkFUSU9OCQkoMHgzOTIpCisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworICNkZWZpbmUgQ0tNX1BCRV9NRDJfREVTX0NCQwkJKDB4M2EwKQorICNkZWZpbmUgQ0tNX1BCRV9NRDVfREVTX0NCQwkJKDB4M2ExKQorKyNlbmRpZiAvKiBPUEVOU1NMX05PX0RFUyAqLworICNkZWZpbmUgQ0tNX1BCRV9NRDVfQ0FTVF9DQkMJCSgweDNhMikKKyAjZGVmaW5lIENLTV9QQkVfTUQ1X0NBU1QzX0NCQwkJKDB4M2EzKQorICNkZWZpbmUgQ0tNX1BCRV9NRDVfQ0FTVDVfQ0JDCQkoMHgzYTQpCitAQCAtNjIwLDggKzYyNiwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY2tfbWVjaGFuaXNtX3R5cGVfdDsKKyAjZGVmaW5lIENLTV9QQkVfU0hBMV9DQVNUMTI4X0NCQwkoMHgzYTUpCisgI2RlZmluZSBDS01fUEJFX1NIQTFfUkM0XzEyOAkJKDB4M2E2KQorICNkZWZpbmUgQ0tNX1BCRV9TSEExX1JDNF80MAkJKDB4M2E3KQorKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAjZGVmaW5lIENLTV9QQkVfU0hBMV9ERVMzX0VERV9DQkMJKDB4M2E4KQorICNkZWZpbmUgQ0tNX1BCRV9TSEExX0RFUzJfRURFX0NCQwkoMHgzYTkpCisrI2VuZGlmIC8qIE9QRU5TU0xfTk9fREVTICovCisgI2RlZmluZSBDS01fUEJFX1NIQTFfUkMyXzEyOF9DQkMJKDB4M2FhKQorICNkZWZpbmUgQ0tNX1BCRV9TSEExX1JDMl80MF9DQkMJCSgweDNhYikKKyAjZGVmaW5lIENLTV9QS0NTNV9QQktEMgkJCSgweDNiMCkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuMXAyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuMXAyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjVlMjhhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjFwMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi1TVU1NQVJZID0gIlNlY3VyZSBybG9naW4vcnNoL3JjcC90ZWxuZXQgcmVwbGFjZW1lbnQiCi1ERVNDUklQVElPTiA9ICJTZWN1cmUgcmxvZ2luL3JzaC9yY3AvdGVsbmV0IHJlcGxhY2VtZW50IChPcGVuU1NIKSBcCi1Tc2ggKFNlY3VyZSBTaGVsbCkgaXMgYSBwcm9ncmFtIGZvciBsb2dnaW5nIGludG8gYSByZW1vdGUgbWFjaGluZSBcCi1hbmQgZm9yIGV4ZWN1dGluZyBjb21tYW5kcyBvbiBhIHJlbW90ZSBtYWNoaW5lLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9vcGVuc3NoLm9yZyIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT1lMzI2MDQ1NjU3ZTg0MjU0MWQzZjM1YWFkYTQ0MjUwNyIKLQotREVQRU5EUyA9ICJ6bGliIG9wZW5zc2wiCi1ERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5vcGVuYnNkLm9yZy9wdWIvT3BlbkJTRC9PcGVuU1NIL3BvcnRhYmxlL29wZW5zc2gtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3NzaGRfY29uZmlnIFwKLSAgICAgICAgICAgZmlsZTovL3NzaF9jb25maWcgXAotICAgICAgICAgICBmaWxlOi8vaW5pdCBcCi0gICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCi0gICAgICAgICAgIGZpbGU6Ly9zc2hkLnNvY2tldCBcCi0gICAgICAgICAgIGZpbGU6Ly9zc2hkQC5zZXJ2aWNlIFwKLSAgICAgICAgICAgZmlsZTovL3NzaGRnZW5rZXlzLnNlcnZpY2UgXAotICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjk5X3NzaGQgXAotICAgICAgICAgICBmaWxlOi8vYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMTkwN191cHN0cmVhbV9jb21taXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMTkwN18yLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTE5MDdfMy5wYXRjaCAiCi0KLVBBTV9TUkNfVVJJID0gImZpbGU6Ly9zc2hkIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNGQ4NTQ3NjcwZTJhMjIwZDVlZjgwNWFkOWU0N2FjZjIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGQ3NWYwMjRkY2YyMWUwNmEwZDY0MjFkNTgyNjkwYmY5ODdhMWY2MzIzZTMyYWQ2NjE5MzkyZjNiZmRlNmJiZCIKLQotaW5oZXJpdCB1c2VyYWRkIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgc3lzdGVtZAotCi1VU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCi1VU0VSQUREX1BBUkFNXyR7UE59LXNzaGQgPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC92YXIvcnVuL3NzaGQgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBzc2hkIgotSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgotSU5JVFNDUklQVF9OQU1FXyR7UE59LXNzaGQgPSAic3NoZCIKLUlOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LXNzaGQgPSAiZGVmYXVsdHMgOSIKLQotU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgotU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNzaGQgPSAic3NoZC5zb2NrZXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAotCi0jIExGUyBzdXBwb3J0OgotQ0ZMQUdTICs9ICItRF9fRklMRV9PRkZTRVRfQklUUz02NCIKLQotIyBsb2dpbiBwYXRoIGlzIGhhcmRjb2RlZCBpbiBzc2hkCi1FWFRSQV9PRUNPTkYgPSAiJ0xPR0lOX1BST0dSQU09JHtiYXNlX2JpbmRpcn0vbG9naW4nIFwKLSAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAotICAgICAgICAgICAgICAgIC0td2l0aG91dC16bGliLXZlcnNpb24tY2hlY2sgXAotICAgICAgICAgICAgICAgIC0td2l0aC1wcml2c2VwLXBhdGg9L3Zhci9ydW4vc3NoZCBcCi0gICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0vc3NoIFwKLSAgICAgICAgICAgICAgICAtLXdpdGgteGF1dGg9L3Vzci9iaW4veGF1dGggXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zdHJpcCBcCi0gICAgICAgICAgICAgICAgIgotCi0jIFNpbmNlIHdlIGRvIG5vdCBkZXBlbmQgb24gbGliYnNkLCB3ZSBkbyBub3Qgd2FudCBjb25maWd1cmUgdG8gdXNlIGl0Ci0jIGp1c3QgYmVjYXVzZSBpdCBmaW5kcyBsaWJ1dGlsLmguICBCdXQsIHNwZWNpZnlpbmcgLS1kaXNhYmxlLWxpYnV0aWwKLSMgY2F1c2VzIGNvbXBpbGUgZXJyb3JzLCBzby4uLgotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9ic2RfbGlidXRpbF9oPW5vIGFjX2N2X2hlYWRlcl9saWJ1dGlsX2g9bm8iCi0KLSMgcGFzc3dkIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BBVEhfUEFTU1dEX1BST0c9JHtiaW5kaXJ9L3Bhc3N3ZCIKLQotIyBXZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBsaWJibG9ja2ZpbGUKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbWFpbGxvY2tfaD1ubyIKLQotIyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgdWNsaWJjIGJlY2F1c2UgaW5jbHVkaW5nIHN0ZGlvLmgKLSMgcHVsbHMgaW4gcHRocmVhZHMuaCBhbmQgY2F1c2VzIGNvbmZsaWN0cyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgotIyBUaGlzIHJlc3VsdHMgaW4gY29tcGlsYXRpb24gZmFpbHVyZSwgc28gdW5sZXNzIHRoaXMgaXMgZml4ZWQsCi0jIGRpc2FibGUgcGFtIGZvciB1Y2xpYmMuCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjPSIgLS13aXRob3V0LXBhbSIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCWV4cG9ydCBMRD0iJHtDQ30iCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtCfS8KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hfY29uZmlnICR7Qn0vCi0JaWYgWyAhIC1lIGFjaW5jbHVkZS5tNCAtYSAtZSBhY2xvY2FsLm00IF07IHRoZW4KLQkJY3AgYWNsb2NhbC5tNCBhY2luY2x1ZGUubTQKLQlmaQotfQotCi1kb19jb21waWxlX3B0ZXN0KCkgewotICAgICAgICAjIHNraXAgcmVncmVzcy91bml0dGVzdHMvIGJpbmFyaWVzOiB0aGlzIHdpbGwgc2lsZW50bHkgc2tpcAotICAgICAgICAjIHVuaXR0ZXN0cyBpbiBydW4tcHRlc3RzIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGV5IGFyZSBzbyBzbG93LgotICAgICAgICBvZV9ydW5tYWtlIHJlZ3Jlc3MvbW9kcGlwZSByZWdyZXNzL3NldHVpZC1hbGxvd2VkIHJlZ3Jlc3MvbmV0Y2F0Ci19Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KLQkJaW5zdGFsbCAtRCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9zc2hkCi0JCXNlZCAtaSAtZSAnczojVXNlUEFNIG5vOlVzZVBBTSB5ZXM6JyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKLQlmaQotCi0JaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIgPSAieDExIiBdOyB0aGVuCi0JCXNlZCAtaSAtZSAnczojWDExRm9yd2FyZGluZyBubzpYMTFGb3J3YXJkaW5nIHllczonICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZwotCWZpCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQKLQlybSAtZiAke0R9JHtiaW5kaXJ9L3Nsb2dpbiAke0R9JHtkYXRhZGlyfS9Tc2guYmluCi0Jcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3NzaGQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9Ci0JaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKLQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3ZvbGF0aWxlcy45OV9zc2hkICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkCi0JaW5zdGFsbCAtbSAwNzU1ICR7U30vY29udHJpYi9zc2gtY29weS1pZCAke0R9JHtiaW5kaXJ9Ci0KLQkjIENyZWF0ZSBjb25maWcgZmlsZXMgZm9yIHJlYWQtb25seSByb290ZnMKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NzaAotCWluc3RhbGwgLW0gNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKLQlzZWQgLWkgJy9Ib3N0S2V5L2QnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQotCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X3JzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQotCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2RzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQotCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2VjZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5Ci0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0JaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkQC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0JaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZGdlbmtleXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKLQkJLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAotCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAotCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zc2hkLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UKLX0KLQotZG9faW5zdGFsbF9wdGVzdCAoKSB7Ci0Jc2VkIC1pIC1lICJzfF5TRlRQU0VSVkVSPS4qfFNGVFBTRVJWRVI9JHtsaWJleGVjZGlyfS9zZnRwLXNlcnZlcnwiIHJlZ3Jlc3MvdGVzdC1leGVjLnNoCi0JY3AgLXIgcmVncmVzcyAke0R9JHtQVEVTVF9QQVRIfQotfQotCi1BTExPV19FTVBUWV8ke1BOfSA9ICIxIgotCi1QQUNLQUdFUyA9KyAiJHtQTn0ta2V5Z2VuICR7UE59LXNjcCAke1BOfS1zc2ggJHtQTn0tc3NoZCAke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIiCi1GSUxFU18ke1BOfS1zY3AgPSAiJHtiaW5kaXJ9L3NjcC4ke0JQTn0iCi1GSUxFU18ke1BOfS1zc2ggPSAiJHtiaW5kaXJ9L3NzaC4ke0JQTn0gJHtzeXNjb25mZGlyfS9zc2gvc3NoX2NvbmZpZyIKLUZJTEVTXyR7UE59LXNzaGQgPSAiJHtzYmluZGlyfS9zc2hkICR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbSIKLUZJTEVTXyR7UE59LXNzaGQgKz0gIiR7c3lzY29uZmRpcn0vc3NoL21vZHVsaSAke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyAke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X3NzaGQgJHtzeXNjb25mZGlyfS9wYW0uZC9zc2hkIgotRklMRVNfJHtQTn0tc2Z0cCA9ICIke2JpbmRpcn0vc2Z0cCIKLUZJTEVTXyR7UE59LXNmdHAtc2VydmVyID0gIiR7bGliZXhlY2Rpcn0vc2Z0cC1zZXJ2ZXIiCi1GSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS9zc2gqICR7bGliZXhlY2Rpcn0vc3NoKiIKLUZJTEVTXyR7UE59LWtleWdlbiA9ICIke2JpbmRpcn0vc3NoLWtleWdlbiIKLQotUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXNjcCAke1BOfS1zc2ggJHtQTn0tc3NoZCAke1BOfS1rZXlnZW4iCi1SREVQRU5EU18ke1BOfS1zc2hkICs9ICIke1BOfS1rZXlnZW4gJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtLXBsdWdpbi1rZXlpbml0IHBhbS1wbHVnaW4tbG9naW51aWQnLCAnJywgZCl9IgotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LXNmdHAgJHtQTn0tbWlzYyAke1BOfS1zZnRwLXNlcnZlciBtYWtlIgotCi1SUFJPVklERVNfJHtQTn0tc3NoID0gInNzaCIKLVJQUk9WSURFU18ke1BOfS1zc2hkID0gInNzaGQiCi0KLVJDT05GTElDVFNfJHtQTn0gPSAiZHJvcGJlYXIiCi1SQ09ORkxJQ1RTXyR7UE59LXNzaGQgPSAiZHJvcGJlYXIiCi1SQ09ORkxJQ1RTXyR7UE59LWtleWdlbiA9ICJzc2gta2V5Z2VuIgotCi1DT05GRklMRVNfJHtQTn0tc3NoZCA9ICIke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyIKLUNPTkZGSUxFU18ke1BOfS1zc2ggPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoX2NvbmZpZyIKLQotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiOTAiCi1BTFRFUk5BVElWRV8ke1BOfS1zY3AgPSAic2NwIgotQUxURVJOQVRJVkVfJHtQTn0tc3NoID0gInNzaCIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuM3AxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuM3AxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWIwZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4zcDEuYmIKQEAgLTAsMCArMSwxNjQgQEAKK1NVTU1BUlkgPSAiQSBzdWl0ZSBvZiBzZWN1cml0eS1yZWxhdGVkIG5ldHdvcmsgdXRpbGl0aWVzIGJhc2VkIG9uIFwKK3RoZSBTU0ggcHJvdG9jb2wgaW5jbHVkaW5nIHRoZSBzc2ggY2xpZW50IGFuZCBzc2hkIHNlcnZlciIKK0RFU0NSSVBUSU9OID0gIlNlY3VyZSBybG9naW4vcnNoL3JjcC90ZWxuZXQgcmVwbGFjZW1lbnQgKE9wZW5TU0gpIFwKK1NzaCAoU2VjdXJlIFNoZWxsKSBpcyBhIHByb2dyYW0gZm9yIGxvZ2dpbmcgaW50byBhIHJlbW90ZSBtYWNoaW5lIFwKK2FuZCBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzIG9uIGEgcmVtb3RlIG1hY2hpbmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vcGVuc3NoLmNvbS8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9ZTMyNjA0NTY1N2U4NDI1NDFkM2YzNWFhZGE0NDI1MDciCisKK0RFUEVORFMgPSAiemxpYiBvcGVuc3NsIgorREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLm9wZW5ic2Qub3JnL3B1Yi9PcGVuQlNEL09wZW5TU0gvcG9ydGFibGUvb3BlbnNzaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3NoZF9jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vc3NoX2NvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGQuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRALnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vc3NoZGdlbmtleXMuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly92b2xhdGlsZXMuOTlfc3NoZCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NoLTcuMXAxLWNvbmRpdGlvbmFsLWNvbXBpbGUtZGVzLWluLWNpcGhlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NoLTcuMXAxLWNvbmRpdGlvbmFsLWNvbXBpbGUtZGVzLWluLXBrY3MxMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcG90ZW50aWFsLXNpZ25lZC1vdmVyZmxvdy1pbi1wb2ludGVyLWFyaXRobWF0aWMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zc2hkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGZhZGQ5ZjAzNWQzOGNlNWQ1OGEzYmYxMzBiODZkMDgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2ZmYjk4OWE2ZGNhYTY5NTk0YzNiNTUwZDQ4NTVhNWEyZTE3MThjY2RkZTdmNWUzNjM4N2I0MjQyMjBmYmVjYyIKKworaW5oZXJpdCB1c2VyYWRkIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgc3lzdGVtZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitVU0VSQUREX1BBUkFNXyR7UE59LXNzaGQgPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC92YXIvcnVuL3NzaGQgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBzc2hkIgorSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LXNzaGQgPSAic3NoZCIKK0lOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LXNzaGQgPSAiZGVmYXVsdHMgOSIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNzaGQgPSAic3NoZC5zb2NrZXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAorCisjIExGUyBzdXBwb3J0OgorQ0ZMQUdTICs9ICItRF9fRklMRV9PRkZTRVRfQklUUz02NCIKKworIyBsb2dpbiBwYXRoIGlzIGhhcmRjb2RlZCBpbiBzc2hkCitFWFRSQV9PRUNPTkYgPSAiJ0xPR0lOX1BST0dSQU09JHtiYXNlX2JpbmRpcn0vbG9naW4nIFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC16bGliLXZlcnNpb24tY2hlY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1wcml2c2VwLXBhdGg9L3Zhci9ydW4vc3NoZCBcCisgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0vc3NoIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgteGF1dGg9L3Vzci9iaW4veGF1dGggXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zdHJpcCBcCisgICAgICAgICAgICAgICAgIgorCisjIFNpbmNlIHdlIGRvIG5vdCBkZXBlbmQgb24gbGliYnNkLCB3ZSBkbyBub3Qgd2FudCBjb25maWd1cmUgdG8gdXNlIGl0CisjIGp1c3QgYmVjYXVzZSBpdCBmaW5kcyBsaWJ1dGlsLmguICBCdXQsIHNwZWNpZnlpbmcgLS1kaXNhYmxlLWxpYnV0aWwKKyMgY2F1c2VzIGNvbXBpbGUgZXJyb3JzLCBzby4uLgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9ic2RfbGlidXRpbF9oPW5vIGFjX2N2X2hlYWRlcl9saWJ1dGlsX2g9bm8iCisKKyMgcGFzc3dkIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BBVEhfUEFTU1dEX1BST0c9JHtiaW5kaXJ9L3Bhc3N3ZCIKKworIyBXZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBsaWJibG9ja2ZpbGUKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbWFpbGxvY2tfaD1ubyIKKworIyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgdWNsaWJjIGJlY2F1c2UgaW5jbHVkaW5nIHN0ZGlvLmgKKyMgcHVsbHMgaW4gcHRocmVhZHMuaCBhbmQgY2F1c2VzIGNvbmZsaWN0cyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgorIyBUaGlzIHJlc3VsdHMgaW4gY29tcGlsYXRpb24gZmFpbHVyZSwgc28gdW5sZXNzIHRoaXMgaXMgZml4ZWQsCisjIGRpc2FibGUgcGFtIGZvciB1Y2xpYmMuCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjPSIgLS13aXRob3V0LXBhbSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWV4cG9ydCBMRD0iJHtDQ30iCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtCfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hfY29uZmlnICR7Qn0vCisJaWYgWyAhIC1lIGFjaW5jbHVkZS5tNCAtYSAtZSBhY2xvY2FsLm00IF07IHRoZW4KKwkJY3AgYWNsb2NhbC5tNCBhY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgICAgICAjIHNraXAgcmVncmVzcy91bml0dGVzdHMvIGJpbmFyaWVzOiB0aGlzIHdpbGwgc2lsZW50bHkgc2tpcAorICAgICAgICAjIHVuaXR0ZXN0cyBpbiBydW4tcHRlc3RzIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGV5IGFyZSBzbyBzbG93LgorICAgICAgICBvZV9ydW5tYWtlIHJlZ3Jlc3MvbW9kcGlwZSByZWdyZXNzL3NldHVpZC1hbGxvd2VkIHJlZ3Jlc3MvbmV0Y2F0Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9zc2hkCisJCXNlZCAtaSAtZSAnczojVXNlUEFNIG5vOlVzZVBBTSB5ZXM6JyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwlmaQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIgPSAieDExIiBdOyB0aGVuCisJCXNlZCAtaSAtZSAnczojWDExRm9yd2FyZGluZyBubzpYMTFGb3J3YXJkaW5nIHllczonICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQKKwlybSAtZiAke0R9JHtiaW5kaXJ9L3Nsb2dpbiAke0R9JHtkYXRhZGlyfS9Tc2guYmluCisJcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3NzaGQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3ZvbGF0aWxlcy45OV9zc2hkICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vY29udHJpYi9zc2gtY29weS1pZCAke0R9JHtiaW5kaXJ9CisKKwkjIENyZWF0ZSBjb25maWcgZmlsZXMgZm9yIHJlYWQtb25seSByb290ZnMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NzaAorCWluc3RhbGwgLW0gNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKwlzZWQgLWkgJy9Ib3N0S2V5L2QnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X3JzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2RzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2VjZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZEAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRnZW5rZXlzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3NoZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCXNlZCAtaSAtZSAic3xeU0ZUUFNFUlZFUj0uKnxTRlRQU0VSVkVSPSR7bGliZXhlY2Rpcn0vc2Z0cC1zZXJ2ZXJ8IiByZWdyZXNzL3Rlc3QtZXhlYy5zaAorCWNwIC1yIHJlZ3Jlc3MgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWtleWdlbiAke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tc2NwID0gIiR7YmluZGlyfS9zY3AuJHtCUE59IgorRklMRVNfJHtQTn0tc3NoID0gIiR7YmluZGlyfS9zc2guJHtCUE59ICR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCitGSUxFU18ke1BOfS1zc2hkID0gIiR7c2JpbmRpcn0vc3NoZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0iCitGSUxFU18ke1BOfS1zc2hkICs9ICIke3N5c2NvbmZkaXJ9L3NzaC9tb2R1bGkgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkICR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZCIKK0ZJTEVTXyR7UE59LXNmdHAgPSAiJHtiaW5kaXJ9L3NmdHAiCitGSUxFU18ke1BOfS1zZnRwLXNlcnZlciA9ICIke2xpYmV4ZWNkaXJ9L3NmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vc3NoKiAke2xpYmV4ZWNkaXJ9L3NzaCoiCitGSUxFU18ke1BOfS1rZXlnZW4gPSAiJHtiaW5kaXJ9L3NzaC1rZXlnZW4iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0ta2V5Z2VuIgorUkRFUEVORFNfJHtQTn0tc3NoZCArPSAiJHtQTn0ta2V5Z2VuICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4ta2V5aW5pdCBwYW0tcGx1Z2luLWxvZ2ludWlkJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIgbWFrZSIKKworUlBST1ZJREVTXyR7UE59LXNzaCA9ICJzc2giCitSUFJPVklERVNfJHtQTn0tc3NoZCA9ICJzc2hkIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1zc2hkID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1rZXlnZW4gPSAic3NoLWtleWdlbiIKKworQ09ORkZJTEVTXyR7UE59LXNzaGQgPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWciCitDT05GRklMRVNfJHtQTn0tc3NoID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorQUxURVJOQVRJVkVfJHtQTn0tc2NwID0gInNjcCIKK0FMVEVSTkFUSVZFXyR7UE59LXNzaCA9ICJzc2giCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCmluZGV4IGE1ZGRmNGQuLmYzYTJjNWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLmluYwpAQCAtOCw3ICs4LDcgQEAKIExJQ0VOU0UgPSAib3BlbnNzbCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWY5YThmOTY4MTA3MzQ1ZTBiNzVhYThjMmVjYWE3ZWM4IgogCi1ERVBFTkRTID0gImhvc3RwZXJsLXJ1bnRpbWUtbmF0aXZlIgorREVQRU5EUyA9ICJtYWtlZGVwZW5kLW5hdGl2ZSBob3N0cGVybC1ydW50aW1lLW5hdGl2ZSIKIERFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgb3BlbnNzbC1uYXRpdmUiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uvb3BlbnNzbC0ke1BWfS50YXIuZ3ogXApAQCAtMzYsMTUgKzM2LDE1IEBACiBGSUxFU19saWJjcnlwdG8gPSAiJHtsaWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTfSIKIEZJTEVTX2xpYnNzbCA9ICIke2xpYmRpcn0vbGlic3NsJHtTT0xJQlN9IgogRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLyoiCi1GSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyAke2JpbmRpcn0vY19yZWhhc2giCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyIKIFJERVBFTkRTXyR7UE59LW1pc2MgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncGVybCcsICdwZXJsJywgJycsIGQpfSIKIAogIyBBZGQgdGhlIG9wZW5zc2wuY25mIGZpbGUgdG8gdGhlIG9wZW5zc2wtY29uZiBwYWNrYWdlLiAgTWFrZSB0aGUgbGliY3J5cHRvCiAjIHBhY2thZ2UgUlJFQ09NTUVORFMgb24gdGhpcyBwYWNrYWdlLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbgogIyBmaWxlIHRvIGJlIGluc3RhbGxlZCBmb3IgYm90aCB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgYW5kIHRoZSBsaWJjcnlwdG8KICMgcGFja2FnZSBzaW5jZSB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgZGVwZW5kcyBvbiB0aGUgbGliY3J5cHRvIHBhY2thZ2UuCi1GSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKLUNPTkZGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK0ZJTEVTX29wZW5zc2wtY29uZiA9ICIke3N5c2NvbmZkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK0NPTkZGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtzeXNjb25mZGlyfS9zc2wvb3BlbnNzbC5jbmYiCiBSUkVDT01NRU5EU19saWJjcnlwdG8gKz0gIm9wZW5zc2wtY29uZiIKIFJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1taXNjIG1ha2UgcGVybCBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIGJjIgogCkBAIC0xMTQsNyArMTE0LDEwIEBACiAJCXRhcmdldD1kZWJpYW4tbWlwc2VsCiAJCTs7CiAgICAgICAgIGxpbnV4LSotbWlwczY0IHwgbGludXgtbWlwczY0KQotICAgICAgICAgICAgICAgdGFyZ2V0PWxpbnV4LW1pcHMKKyAgICAgICAgICAgICAgIHRhcmdldD1kZWJpYW4tbWlwczY0CisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgbGludXgtKi1taXBzNjRlbCB8IGxpbnV4LW1pcHM2NGVsKQorICAgICAgICAgICAgICAgdGFyZ2V0PWRlYmlhbi1taXBzNjRlbAogICAgICAgICAgICAgICAgIDs7CiAJbGludXgtbWljcm9ibGF6ZSp8bGludXgtbmlvczIqKQogCQl0YXJnZXQ9bGludXgtZ2VuZXJpYzMyCkBAIC0xNDksMTAgKzE1MiwxNCBAQAogfQogCiBkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGRlcGVuZAogCW9lX3J1bm1ha2UKIH0KIAogZG9fY29tcGlsZV9wdGVzdCAoKSB7CisJIyBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIHRlc3QgZGlyZWN0b3J5IHRvbworCWV4cG9ydCBESVJTPSIkRElSUyB0ZXN0IgorCW9lX3J1bm1ha2UgZGVwZW5kCiAJb2VfcnVubWFrZSBidWlsZHRlc3QKIH0KIApAQCAtMTY4LDM2ICsxNzUsNjAgQEAKIAlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CiAJY3AgLS1kZXJlZmVyZW5jZSAtUiBpbmNsdWRlL29wZW5zc2wgJHtEfSR7aW5jbHVkZWRpcn0KIAorCWluc3RhbGwgLURtIDA3NTUgJHtXT1JLRElSfS9vcGVuc3NsLWNfcmVoYXNoLnNoICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwlzZWQgLWkgLWUgJ3MsL2V0Yy9vcGVuc3NsLCR7c3lzY29uZmRpcn0vc3NsLGcnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwogCW9lX211bHRpbGliX2hlYWRlciBvcGVuc3NsL29wZW5zc2xjb25mLmgKIAlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwZXJsJywgJ3BlcmwnLCAnJywgZCl9IiA9ICJwZXJsIiBdOyB0aGVuCi0JCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rvb2xzL2NfcmVoYXNoICR7RH0ke2JpbmRpcn0KLQkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKIAkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwKIAkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvdHNnZXQKLQkJIyBUaGUgY19yZWhhc2ggdXRpbGl0eSBpc24ndCBpbnN0YWxsZWQgYnkgdGhlIG5vcm1hbCBpbnN0YWxsYXRpb24gcHJvY2Vzcy4KIAllbHNlCi0JCXJtIC1mICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKIAkJcm0gLWYgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbCAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL3RzZ2V0CiAJZmkKKworCSMgQ3JlYXRlIFNTTCBzdHJ1Y3R1cmUKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NzbC8KKwltdiAke0R9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiBcCisJICAgJHtEfSR7bGliZGlyfS9zc2wvY2VydHMgXAorCSAgICR7RH0ke2xpYmRpcn0vc3NsL3ByaXZhdGUgXAorCSAgIFwKKwkgICAke0R9JHtzeXNjb25mZGlyfS9zc2wvCisJbG4gLXNmICR7c3lzY29uZmRpcn0vc3NsL2NlcnRzICR7RH0ke2xpYmRpcn0vc3NsL2NlcnRzCisJbG4gLXNmICR7c3lzY29uZmRpcn0vc3NsL3ByaXZhdGUgJHtEfSR7bGliZGlyfS9zc2wvcHJpdmF0ZQorCWxuIC1zZiAke3N5c2NvbmZkaXJ9L3NzbC9vcGVuc3NsLmNuZiAke0R9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZgogfQogCiBkb19pbnN0YWxsX3B0ZXN0ICgpIHsKIAljcCAtciAtTCBNYWtlZmlsZS5vcmcgTWFrZWZpbGUgdGVzdCAke0R9JHtQVEVTVF9QQVRIfQogCWNwIENvbmZpZ3VyZSBjb25maWcgZV9vcy5oICR7RH0ke1BURVNUX1BBVEh9CiAJY3AgLXIgLUwgaW5jbHVkZSAke0R9JHtQVEVTVF9QQVRIfQotCWxuIC1zZiAke2Jhc2VfbGliZGlyfS9saWJjcnlwdG8uYSAke0R9JHtQVEVTVF9QQVRIfQorCWxuIC1zZiAke2xpYmRpcn0vbGliY3J5cHRvLmEgJHtEfSR7UFRFU1RfUEFUSH0KIAlsbiAtc2YgJHtsaWJkaXJ9L2xpYnNzbC5hICR7RH0ke1BURVNUX1BBVEh9CiAJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vY3J5cHRvCiAJY3AgY3J5cHRvL2NvbnN0YW50X3RpbWVfbG9jbC5oICR7RH0ke1BURVNUX1BBVEh9L2NyeXB0bwogCWNwIC1yIGNlcnRzICR7RH0ke1BURVNUX1BBVEh9CiAJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcwogCWxuIC1zZiAke2xpYmRpcn0vc3NsL21pc2MvQ0Euc2ggICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKLQlsbiAtc2YgJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJbG4gLXNmICR7c3lzY29uZmRpcn0vc3NsL29wZW5zc2wuY25mICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKIAlsbiAtc2YgJHtiaW5kaXJ9L29wZW5zc2wgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJY3AgYXBwcy9zZXJ2ZXIucGVtICAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCiAJY3AgYXBwcy9zZXJ2ZXIyLnBlbSAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCiAJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAogCWluc3RhbGwgdXRpbC9vcGVuc3Nsd3JhcC5zaCAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCiAJaW5zdGFsbCB1dGlsL3NobGliX3dyYXAuc2ggICAgICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKKwkjIFRpbWUgc3RhbXBzIGFyZSByZWxldmFudCBmb3IgIm1ha2UgYWxsdGVzdHMiLCBvdGhlcndpc2UKKwkjIG1ha2UgbWF5IHRyeSB0byByZWNvbXBpbGUgYmluYXJpZXMuIE5vdCBvbmx5IG11c3QgdGhlCisJIyBiaW5hcnkgZmlsZXMgYmUgbmV3ZXIgdGhhbiB0aGUgc291cmNlcywgdGhleSBhbHNvIG11c3QKKwkjIGJlIG1vcmUgcmVjZW50IHRoYW4gdGhlIGhlYWRlciBmaWxlcyBpbiAvdXNyL2luY2x1ZGUuCisJIworCSMgVXNpbmcgImNwIC1hIiBpcyBub3Qgc3VmZmljaWVudCwgYmVjYXVzZSBkb19pbnN0YWxsCisJIyBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgdGltZSBzdGFtcHMuCisJIworCSMgU28gaW5zdGVhZCBvZiB1c2luZyB0aGUgb3JpZ2luYWwgZmlsZSBzdGFtcHMsIHdlIHNldAorCSMgdGhlIGN1cnJlbnQgdGltZSBmb3IgYWxsIGZpbGVzLiBCaW5hcmllcyB3aWxsIGdldAorCSMgbW9kaWZpZWQgYWdhaW4gbGF0ZXIgd2hlbiBzdHJpcHBpbmcgdGhlbSwgYnV0IHRoYXQncyBva2F5LgorCXRvdWNoICR7RH0ke1BURVNUX1BBVEh9CisJZmluZCAke0R9JHtQVEVTVF9QQVRIfSAtdHlwZSBmIC1wcmludDAgfCB4YXJncyAtLXZlcmJvc2UgLTAgdG91Y2ggLXIgJHtEfSR7UFRFU1RfUEFUSH0KIH0KIAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjM5ODlmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jcnlwdG9fdXNlX2JpZ2ludF9pbl94ODYtNjRfcGVybC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotV2hlbiBidWlsZGluZyBvbiB4MzIgc3lzdGVtcyB3aGVyZSB0aGUgZGVmYXVsdCB0eXBlIGlzIDMyYml0LCBtYWtlIHN1cmUKLXdlIGNhbiB0cmFuc3BhcmVudGx5IHJlcHJlc2VudCA2NGJpdCBpbnRlZ2Vycy4gIE90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aAotYnVpbGQgZXJyb3JzIGxpa2U6Ci0vdXNyL2Jpbi9wZXJsIGFzbS9naGFzaC14ODZfNjQucGwgZWxmID4gZ2hhc2gteDg2XzY0LnMKLUludGVnZXIgb3ZlcmZsb3cgaW4gaGV4YWRlY2ltYWwgbnVtYmVyIGF0IGFzbS8uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCBsaW5lIDIwMSwgPD4gbGluZSA4OTAuCi0uLi4KLWdoYXNoLXg4Nl82NC5zOiBBc3NlbWJsZXIgbWVzc2FnZXM6Ci1naGFzaC14ODZfNjQuczo4OTA6IEVycm9yOiBqdW5rICcuMTU0NzMzNTU0Nzk5OTVlKzE5JyBhZnRlciBleHByZXNzaW9uCi0KLVdlIGRvbid0IGVuYWJsZSB0aGlzIGdsb2JhbGx5IGFzIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHdlJ2QgZ2V0Ci0zMmJpdCB2YWx1ZXMgaW50ZXJwcmV0ZWQgYXMgdW5zaWduZWQgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgc2lnbmVkLgotCi1SZXBvcnRlZC1ieTogQmVydHJhbmQgSmFjcXVpbiA8YmVydHJhbmRAamFjcXVpbi5iemg+Ci1VUkw6IGh0dHBzOi8vYnVncy5nZW50b28ub3JnLzU0MjYxOAotCi1TaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotSW5kZXg6IG9wZW5zc2wtMS4wLjJhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG9wZW5zc2wtMS4wLjJhLm9yaWcvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCi0rKysgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCi1AQCAtMTk0LDcgKzE5NCwxMCBAQCBteSAlZ2xvYmFsczsKLSAgICAgfQotICAgICBzdWIgb3V0IHsKLSAgICAgCW15ICRzZWxmID0gc2hpZnQ7Ci0tCi0rCSMgV2hlbiBidWlsZGluZyBvbiB4MzIgQUJJcywgdGhlIGV4cGFuZGVkIGhleCB2YWx1ZSBtaWdodCBiZSB0b28KLSsJIyBiaWcgdG8gZml0IGludG8gMzJiaXRzLiBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCi0rCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCi0rCXVzZSBiaWdpbnQ7Ci0gCWlmICgkZ2FzKSB7Ci0gCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKLSAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY2EucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCmluZGV4IGFiYTRkNDIuLmZiNzQ1ZTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY2EucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaApAQCAtNyw3ICs3LDcgQEAKIEBAIC02NSw2ICs2NSw3IEBACiAgZm9yZWFjaCAoQEFSR1YpIHsKICAJaWYgKCAvXigtXD98LWh8LWhlbHApJC8gKSB7Ci0gCSAgICBwcmludCBTVERFUlIgInVzYWdlOiBDQSAtbmV3Y2VydHwtbmV3cmVxfC1uZXdyZXEtbm9kZXN8LW5ld2NhfC1zaWdufC12ZXJpZnlcbiI7CisgCSAgICBwcmludCBTVERFUlIgInVzYWdlOiBDQSAtbmV3Y2VydHwtbmV3cmVxfC1uZXdyZXEtbm9kZXN8LW5ld2NhfC1zaWdufC1zaWduY2VydHwtdmVyaWZ5XG4iOwogKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKICAJICAgIGV4aXQgMDsKICAJfSBlbHNpZiAoL14tbmV3Y2VydCQvKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpeC1jaXBoZXItZGVzLWVkZTMtY2ZiMS5wYXRjaAppbmRleCAwNmQxZWE2Li4yYTMxOGE0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2gKQEAgLTQsNyArNCw3IEBACiB0aGUgY2lwaGVyIGRlcy1lZGUzLWNmYjEuIENvbXBsZXRlIGJ1ZyBsb2cgYW5kIHBhdGNoIGlzIHByZXNlbnQgaGVyZToKIGh0dHA6Ly9ydC5vcGVuc3NsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTI4NjcKIAotU2lnbmVkLU9mZi1CeTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgogCiBJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2VfZGVzMy5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2gKaW5kZXggY2ViYzhjZi4uZjczNmU1YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaApAQCAtOCwxNiArOCwxNiBAQAogCiBTaWduZWQtb2ZmLWJ5OiBYdWZlbmcgWmhhbmcgPHh1ZmVuZy56aGFuZ0B3aW5kcml2ZXIuY29tPgogLS0tCi1JbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCitJbmRleDogb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9kaWdlc3QuYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0rKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCi1AQCAtMjA4LDcgKzIwOCw3IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKLSAgICAgICAgIHJldHVybiAwOworLS0tIG9wZW5zc2wtMS4wLjJoLm9yaWcvY3J5cHRvL2V2cC9kaWdlc3QuYworKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZGlnZXN0LmMKK0BAIC0yMTEsNyArMjExLDcgQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYworICAgICAgICAgdHlwZSA9IGN0eC0+ZGlnZXN0OwogICAgICB9CiAgI2VuZGlmCiAtICAgIGlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSB7CiArICAgIGlmICh0eXBlICYmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSkgewotICAgICAgICAgaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAgICAgICAgIGlmIChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpIHsKICAgICAgICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLSAgICAgICAgIGN0eC0+ZGlnZXN0ID0gdHlwZTsKKyAgICAgICAgICAgICBjdHgtPm1kX2RhdGEgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtY19yZWhhc2guc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1jX3JlaGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjdmNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtY19yZWhhc2guc2gKQEAgLTAsMCArMSwyMTAgQEAKKyMhL2Jpbi9zaAorIworIyBCZW4gU2VjcmVzdCA8YmxzZWNyZXNAZ21haWwuY29tPgorIworIyBzaCBjX3JlaGFzaCBzY3JpcHQsIHNjYW4gYWxsIGZpbGVzIGluIGEgZGlyZWN0b3J5CisjIGFuZCBhZGQgc3ltYm9saWMgbGlua3MgdG8gdGhlaXIgaGFzaCB2YWx1ZXMuCisjCisjIGJhc2VkIG9uIHRoZSBjX3JlaGFzaCBwZXJsIHNjcmlwdCBkaXN0cmlidXRlZCB3aXRoIG9wZW5zc2wKKyMKKyMgTElDRU5TRTogU2VlIE9wZW5TU0wgbGljZW5zZQorIyBeXmFjY2VwdGFibGU/Xl4KKyMKKworIyBkZWZhdWx0IGNlcnRpZmljYXRlIGxvY2F0aW9uCitESVI9L2V0Yy9vcGVuc3NsCisKKyMgZm9yIGZpbGV0eXBlIGJpdGZpZWxkCitJU19DRVJUPSQoKCAxIDw8IDAgKSkKK0lTX0NSTD0kKCggMSA8PCAxICkpCisKKworIyBjaGVjayB0byBzZWUgaWYgYSBmaWxlIGlzIGEgY2VydGlmaWNhdGUgZmlsZSBvciBhIENSTCBmaWxlCisjIGFyZ3VtZW50czoKKyMgICAgICAgMS4gdGhlIGZpbGVuYW1lIHRvIGJlIHNjYW5uZWQKKyMgcmV0dXJuczoKKyMgICAgICAgYml0ZmllbGQgb2YgZmlsZSB0eXBlOyB1c2VzICR7SVNfQ0VSVH0gYW5kICR7SVNfQ1JMfQorIworY2hlY2tfZmlsZSgpCit7CisgICAgbG9jYWwgSVNfVFlQRT0wCisKKyAgICAjIG1ha2UgSUZTIGEgbmV3bGluZSBzbyB3ZSBjYW4gcHJvY2VzcyBncmVwIG91dHB1dCBsaW5lIGJ5IGxpbmUKKyAgICBsb2NhbCBPTERJRlM9JHtJRlN9CisgICAgSUZTPSQoIHByaW50ZiAiXG4iICkKKworICAgICMgWFhYOiBjb3VsZCBiZSBtb3JlIGVmZmljaWVudCB0byBoYXZlIHR3byAnZ3JlcCAtbScgYnV0IGlzIC1tIHBvcnRhYmxlPworICAgIGZvciBMSU5FIGluICQoIGdyZXAgJ14tLS0tLUJFR0lOIC4qLS0tLS0nICR7MX0gKQorICAgIGRvCisJaWYgZWNobyAke0xJTkV9IFwKKwkgICAgfCBncmVwIC1xIC1FICdeLS0tLS1CRUdJTiAoWDUwOSB8VFJVU1RFRCApP0NFUlRJRklDQVRFLS0tLS0nCisJdGhlbgorCSAgICBJU19UWVBFPSQoKCAke0lTX1RZUEV9IHwgJHtJU19DRVJUfSApKQorCisJICAgIGlmIFsgJCgoICR7SVNfVFlQRX0gJiAke0lTX0NSTH0gKSkgLW5lIDAgXQorCSAgICB0aGVuCisJICAgIAlicmVhaworCSAgICBmaQorCWVsaWYgZWNobyAke0xJTkV9IHwgZ3JlcCAtcSAnXi0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLScKKwl0aGVuCisJICAgIElTX1RZUEU9JCgoICR7SVNfVFlQRX0gfCAke0lTX0NSTH0gKSkKKworCSAgICBpZiBbICQoKCAke0lTX1RZUEV9ICYgJHtJU19DRVJUfSApKSAtbmUgMCBdCisJICAgIHRoZW4KKwkgICAgCWJyZWFrCisJICAgIGZpCisJZmkKKyAgICBkb25lCisKKyAgICAjIHJlc3RvcmUgSUZTCisgICAgSUZTPSR7T0xESUZTfQorCisgICAgcmV0dXJuICR7SVNfVFlQRX0KK30KKworCisjCisjIHVzZSBvcGVuc3NsIHRvIGZpbmdlcnByaW50IGEgZmlsZQorIyAgICBhcmd1bWVudHM6CisjCTEuIHRoZSBmaWxlbmFtZSB0byBmaW5nZXJwcmludAorIwkyLiB0aGUgbWV0aG9kIHRvIHVzZSAoeDUwOSwgY3JsKQorIyAgICByZXR1cm5zOgorIwlub25lCisjICAgIGFzc3VtcHRpb25zOgorIwl1c2VyIHdpbGwgY2FwdHVyZSBvdXRwdXQgZnJvbSBsYXN0IHN0YWdlIG9mIHBpcGVsaW5lCisjCitmaW5nZXJwcmludCgpCit7CisgICAgJHtTU0xfQ01EfSAkezJ9IC1maW5nZXJwcmludCAtbm9vdXQgLWluICR7MX0gfCBzZWQgJ3MvXi4qPS8vJyB8IHRyIC1kICc6JworfQorCisKKyMKKyMgbGlua19oYXNoIC0gY3JlYXRlIGxpbmtzIHRvIGNlcnRpZmljYXRlIGZpbGVzCisjICAgIGFyZ3VtZW50czoKKyMgICAgICAgMS4gdGhlIGZpbGVuYW1lIHRvIGNyZWF0ZSBhIGxpbmsgZm9yCisjCTIuIHRoZSB0eXBlIG9mIGNlcnRpZmljYXRlIGJlaW5nIGxpbmtlZCAoeDUwOSwgY3JsKQorIyAgICByZXR1cm5zOgorIwkwIG9uIHN1Y2Nlc3MsIDEgb3RoZXJ3aXNlCisjCitsaW5rX2hhc2goKQoreworICAgIGxvY2FsIEZJTkdFUlBSSU5UPSQoIGZpbmdlcnByaW50ICR7MX0gJHsyfSApCisgICAgbG9jYWwgSEFTSD0kKCAke1NTTF9DTUR9ICR7Mn0gLWhhc2ggLW5vb3V0IC1pbiAkezF9ICkKKyAgICBsb2NhbCBTVUZGSVg9MAorICAgIGxvY2FsIExJTktGSUxFPScnCisgICAgbG9jYWwgVEFHPScnCisKKyAgICBpZiBbICR7Mn0gPSAiY3JsIiBdCisgICAgdGhlbgorICAgIAlUQUc9J3InCisgICAgZmkKKworICAgIExJTktGSUxFPSR7SEFTSH0uJHtUQUd9JHtTVUZGSVh9CisKKyAgICB3aGlsZSBbIC1mICR7TElOS0ZJTEV9IF0KKyAgICBkbworCWlmIFsgJHtGSU5HRVJQUklOVH0gPSAkKCBmaW5nZXJwcmludCAke0xJTktGSUxFfSAkezJ9ICkgXQorCXRoZW4KKwkgICAgZWNobyAiTk9URTogU2tpcHBpbmcgZHVwbGljYXRlIGZpbGUgJHsxfSIgPiYyCisJICAgIHJldHVybiAxCisJZmkJCisKKwlTVUZGSVg9JCgoICR7U1VGRklYfSArIDEgKSkKKwlMSU5LRklMRT0ke0hBU0h9LiR7VEFHfSR7U1VGRklYfQorICAgIGRvbmUKKworICAgIGVjaG8gIiR7MX0gPT4gJHtMSU5LRklMRX0iCisKKyAgICAjIGFzc3VtZSBhbnkgc3lzdGVtIHdpdGggYSBQT1NJWCBzaGVsbCB3aWxsIGVpdGhlciBzdXBwb3J0IHN5bWxpbmtzIG9yCisgICAgIyBkbyBzb21ldGhpbmcgdG8gaGFuZGxlIHRoaXMgZ3JhY2VmdWxseQorICAgIGxuIC1zICR7MX0gJHtMSU5LRklMRX0KKworICAgIHJldHVybiAwCit9CisKKworIyBoYXNoX2RpciBjcmVhdGUgaGFzaCBsaW5rcyBpbiBhIGdpdmVuIGRpcmVjdG9yeQoraGFzaF9kaXIoKQoreworICAgIGVjaG8gIkRvaW5nICR7MX0iCisKKyAgICBjZCAkezF9CisKKyAgICBscyAtMSAqIDI+L2Rldi9udWxsIHwgd2hpbGUgcmVhZCBGSUxFCisgICAgZG8KKyAgICAgICAgaWYgZWNobyAke0ZJTEV9IHwgZ3JlcCAtcSAtRSAnXltbOnhkaWdpdDpdXXs4fVwucj9bWzpkaWdpdDpdXSskJyBcCisJICAgIAkmJiBbIC1oICIke0ZJTEV9IiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHJtICR7RklMRX0KKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBscyAtMSAqLnBlbSAqLmNlciAqLmNydCAqLmNybCAyPi9kZXYvbnVsbCB8IHdoaWxlIHJlYWQgRklMRQorICAgIGRvCisJY2hlY2tfZmlsZSAke0ZJTEV9CisgICAgICAgIGxvY2FsIEZJTEVfVFlQRT0kez99CisJbG9jYWwgVFlQRV9TVFI9JycKKworICAgICAgICBpZiBbICQoKCAke0ZJTEVfVFlQRX0gJiAke0lTX0NFUlR9ICkpIC1uZSAwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgVFlQRV9TVFI9J3g1MDknCisgICAgICAgIGVsaWYgWyAkKCggJHtGSUxFX1RZUEV9ICYgJHtJU19DUkx9ICkpIC1uZSAwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgVFlQRV9TVFI9J2NybCcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiTk9URTogJHtGSUxFfSBkb2VzIG5vdCBjb250YWluIGEgY2VydGlmaWNhdGUgb3IgQ1JMOiBza2lwcGluZyIgPiYyCisJICAgIGNvbnRpbnVlCisgICAgICAgIGZpCisKKwlsaW5rX2hhc2ggJHtGSUxFfSAke1RZUEVfU1RSfQorICAgIGRvbmUKK30KKworCisjIGNob29zZSB0aGUgbmFtZSBvZiBhbiBzc2wgYXBwbGljYXRpb24KK2lmIFsgLW4gIiR7T1BFTlNTTH0iIF0KK3RoZW4KKyAgICBTU0xfQ01EPSQod2hpY2ggJHtPUEVOU1NMfSAyPi9kZXYvbnVsbCkKK2Vsc2UKKyAgICBTU0xfQ01EPS91c3IvYmluL29wZW5zc2wKKyAgICBPUEVOU1NMPSR7U1NMX0NNRH0KKyAgICBleHBvcnQgT1BFTlNTTAorZmkKKworIyBmaXggcGF0aHMKK1BBVEg9JHtQQVRIfToke0RJUn0vYmluCitleHBvcnQgUEFUSAorCisjIGNvbmZpcm0gZXhpc3RhbmNlL2V4ZWN1dGFiaWxpdHkgb2Ygc3NsIGNvbW1hbmQKK2lmICEgWyAteCAke1NTTF9DTUR9IF0KK3RoZW4KKyAgICBlY2hvICIkezB9OiByZWhhc2hpbmcgc2tpcHBlZCAoJ29wZW5zc2wnIHByb2dyYW0gbm90IGF2YWlsYWJsZSkiID4mMgorICAgIGV4aXQgMAorZmkKKworIyBkZXRlcm1pbmUgd2hpY2ggZGlyZWN0b3JpZXMgdG8gcHJvY2Vzcworb2xkX0lGUz0kSUZTCitpZiBbICR7I30gLWd0IDAgXQordGhlbgorICAgIElGUz0nOicKKyAgICBESVJMSVNUPSR7Kn0KK2VsaWYgWyAtbiAiJHtTU0xfQ0VSVF9ESVJ9IiBdCit0aGVuCisgICAgRElSTElTVD0kU1NMX0NFUlRfRElSCitlbHNlCisgICAgRElSTElTVD0ke0RJUn0vY2VydHMKK2ZpCisKK0lGUz0nOicKKworIyBwcm9jZXNzIGRpcmVjdG9yaWVzCitmb3IgQ0VSVF9ESVIgaW4gJHtESVJMSVNUfQorZG8KKyAgICBpZiBbIC1kICR7Q0VSVF9ESVJ9IC1hIC13ICR7Q0VSVF9ESVJ9IF0KKyAgICB0aGVuCisgICAgICAgIElGUz0kb2xkX0lGUworICAgICAgICBoYXNoX2RpciAke0NFUlRfRElSfQorICAgICAgICBJRlM9JzonCisgICAgZmkKK2RvbmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLXV0aWwtcGVybHBhdGgucGwtY3dkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtdXRpbC1wZXJscGF0aC5wbC1jd2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1YjliMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLXV0aWwtcGVybHBhdGgucGwtY3dkLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZTQyNzc0OGYzYmI1ZDM3ZTc4ZGM4ZDcwYTU1OGMzNzNhYThhYmFiYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxOSBTZXAgMjAxNiAyMjowNjoyOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1dGlsL3BlcmxwYXRoLnBsOiBtYWtlIGl0IHdvcmsgd2hlbiBjd2QgaXMgbm90IGluIEBJTkMKKworRml4ZWQgd2hlbiBidWlsZGluZyBvbiBEZWJpYW4tdGVzdGluZzoKK3wgQ2FuJ3QgbG9jYXRlIGZpbmQucGwgaW4gQElOQyAoQElOQyBjb250YWluczogL2V0Yy9wZXJsIC91c3IvbG9jYWwvbGliL3g4Nl82NC1saW51eC1nbnUvcGVybC81LjIyLjIgL3Vzci9sb2NhbC9zaGFyZS9wZXJsLzUuMjIuMiAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L3Blcmw1LzUuMjIgL3Vzci9zaGFyZS9wZXJsNSAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L3BlcmwvNS4yMiAvdXNyL3NoYXJlL3BlcmwvNS4yMiAvdXNyL2xvY2FsL2xpYi9zaXRlX3BlcmwgL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9wZXJsLWJhc2UpIGF0IHBlcmxwYXRoLnBsIGxpbmUgNy4KKworVGhlIGZpbmQucGwgaXMgYWRkZWQgYnkgb2UtY29yZSwgc28gb25jZSBvcGVuc3NsL2ZpbmQucGwgaXMgcmVtb3ZlZCwKK3RoZW4gdGhpcyBwYXRjaCBjYW4gYmUgZHJvcHBlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB1dGlsL3BlcmxwYXRoLnBsIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3V0aWwvcGVybHBhdGgucGwgYi91dGlsL3BlcmxwYXRoLnBsCitpbmRleCBhMWYyMzZiLi41NTk5ODkyIDEwMDc1NQorLS0tIGEvdXRpbC9wZXJscGF0aC5wbAorKysrIGIvdXRpbC9wZXJscGF0aC5wbAorQEAgLTQsNiArNCw4IEBACisgIyBsaW5lIGluIGFsbCBzY3JpcHRzIHRoYXQgcmVseSBvbiBwZXJsLgorICMKKyAKKytCRUdJTiB7IHVuc2hpZnQgQElOQywgIi4iOyB9CisrCisgcmVxdWlyZSAiZmluZC5wbCI7CisgCisgJCNBUkdWID09IDAgfHwgcHJpbnQgU1RERVJSICJ1c2FnZTogcGVybHBhdGggbmV3cGF0aCAgKGVnIC91c3IvYmluKVxuIjsKKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaAppbmRleCBjYmNlMzJjLi4wZjA4YTY0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMiwxMCArMiwxMCBAQAogCiBSZWNlaXZlZCBmcm9tIEggSiBMaXUgQCBJbnRlbAogTWFrZSB0aGUgYXNzZW1ibHkgc3ludGF4IGNvbXBhdGlibGUgd2l0aCB4MzIgZ2NjLiBPdGhld2lzZSB4MzIgZ2NjIHRocm93cyBlcnJvcnMuCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA3LzEzCitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA3LzEzCiAKIHBvcnRlZCB0aGUgcGF0Y2ggdG8gdGhlIDEuMC4wZSB2ZXJzaW9uCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzAxCitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzAxCiBJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm4uaAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vYm4vYm4uaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3BhcmFsbGVsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3BhcmFsbGVsLnBhdGNoCmluZGV4IGI2YzJjMTQuLmYzZjRjOTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wYXJhbGxlbC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcGFyYWxsZWwucGF0Y2gKQEAgLTYsNiArNiw5IEBACiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIFNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CiAKK1JlZnJlc2hlZCBmb3IgMS4wLjJpCitTaWduZWQtb2ZmLWJ5OiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisKIC0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vTWFrZWZpbGUKICsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vTWFrZWZpbGUKIEBAIC04NSwxMSArODUsMTEgQEAKQEAgLTEzMyw3ICsxMzYsNyBAQAogIAkJZmk7IFwKIC0tLSBvcGVuc3NsLTEuMC4yZy90ZXN0L01ha2VmaWxlCiArKysgb3BlbnNzbC0xLjAuMmcvdGVzdC9NYWtlZmlsZQotQEAgLTEzOSw3ICsxMzksNyBAQAorQEAgLTE0NCw3ICsxNDQsNyBAQAogIHRhZ3M6CiAgCWN0YWdzICQoU1JDKQogIApAQCAtMTQyLDcgKzE0NSw3IEBACiAgCiAgYXBwczoKICAJQChjZCAuLjsgJChNQUtFKSBESVJTPWFwcHMgYWxsKQotQEAgLTQyMSwxMzAgKzQyMSwxMzAgQEAKK0BAIC00MzgsMTM2ICs0MzgsMTM2IEBACiAgCQlsaW5rX2FwcC4kJHtzaGxpYl90YXJnZXR9CiAgCiAgJChSU0FURVNUKSQoRVhFX0VYVCk6ICQoUlNBVEVTVCkubyAkKERMSUJDUllQVE8pCkBAIC0zMDksMTMgKzMxMiwyMSBAQAogLQlAdGFyZ2V0PSQoQ0xJRU5USEVMTE9URVNUKSAkKEJVSUxEX0NNRCkKICsJK0B0YXJnZXQ9JChDTElFTlRIRUxMT1RFU1QpICQoQlVJTERfQ01EKQogIAorICQoQkFERFRMU1RFU1QpJChFWEVfRVhUKTogJChCQUREVExTVEVTVCkubworLQlAdGFyZ2V0PSQoQkFERFRMU1RFU1QpICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEJBRERUTFNURVNUKSAkKEJVSUxEX0NNRCkKKyAKICAkKFNTTFYyQ09ORlRFU1QpJChFWEVfRVhUKTogJChTU0xWMkNPTkZURVNUKS5vCiAtCUB0YXJnZXQ9JChTU0xWMkNPTkZURVNUKSAkKEJVSUxEX0NNRCkKICsJK0B0YXJnZXQ9JChTU0xWMkNPTkZURVNUKSAkKEJVSUxEX0NNRCkKICAKKyAkKERUTFNURVNUKSQoRVhFX0VYVCk6ICQoRFRMU1RFU1QpLm8gc3NsdGVzdGxpYi5vICQoRExJQlNTTCkgJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoRFRMU1RFU1QpOyBleG9iaj1zc2x0ZXN0bGliLm87ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKERUTFNURVNUKTsgZXhvYmo9c3NsdGVzdGxpYi5vOyAkKEJVSUxEX0NNRCkKKyAKICAjJChBRVNURVNUKS5vOiAkKEFFU1RFU1QpLmMKICAjCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtRElOVEVSTUVESUFURV9WQUxVRV9LQVQgLURUUkFDRV9LQVRfTUNUICQoQUVTVEVTVCkuYwotQEAgLTU1Nyw3ICs1NTcsNyBAQAorQEAgLTU4MCw2ICs1ODAsNiBAQAogICMJZmkKICAKICBkdW1teXRlc3QkKEVYRV9FWFQpOiBkdW1teXRlc3QubyAkKERMSUJDUllQVE8pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4wLjJnLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwZjEyOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4wLjJnLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotcmVxdWlyZSBvcGVuc3NsLmluYwotCi0jIEZvciB0YXJnZXQgc2lkZSB2ZXJzaW9ucyBvZiBvcGVuc3NsIGVuYWJsZSBzdXBwb3J0IGZvciBPQ0YgTGludXggZHJpdmVyCi0jIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4KLURFUEVORFMgKz0gImNyeXB0b2Rldi1saW51eCIKLQotQ0ZMQUcgKz0gIi1ESEFWRV9DUllQVE9ERVYgLURVU0VfQ1JZUFRPREVWX0RJR0VTVFMiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTI3ZmZhNWQ3NGJiNWEzMzcwNTZjMTRiMmVmOTNmYmY2IgotCi1leHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMgZW5naW5lcyIKLWV4cG9ydCBPRV9MREZMQUdTPSIke0xERkxBR1N9IgotCi1TUkNfVVJJICs9ICJmaWxlOi8vZmluZC5wbDtzdWJkaXI9JHtCUH0vdXRpbC8gXAotICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLXRhcmdldHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3NoYXJlZC1saWJzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9vZS1sZGZsYWdzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGViaWFuL2NhLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tZGlyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vcGljLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGVzLXB0ZXN0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1kZXBzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9jcnlwdG9fdXNlX2JpZ2ludF9pbl94ODYtNjRfcGVybC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcHRlc3RfbWFrZWZpbGVfZGVwcy5wYXRjaCAgXAotICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1tdXNsLXRhcmdldC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmM2M3MTBjMDQ1Y2RlZTVmZDExNGZlYjY5ZmViYTdhYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzg0YjFiMzkwN2NlMzlhYmY0MDk4NzAyZGFkZTYzNjU1MjJhMjUzYWQxNTUyZTI2N2E5YTBlODk1OTRhYTMzIgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tZW5naW5lcyIKLUZJTEVTXyR7UE59LWVuZ2luZXMgPSAiJHtsaWJkaXJ9L3NzbC9lbmdpbmVzLyouc28gJHtsaWJkaXJ9L2VuZ2luZXMiCi0KLSMgVGhlIGNyeXB0b191c2VfYmlnaW50IHBhdGNoIG1lYW5zIHRoYXQgcGVybCdzIGJpZ251bSBtb2R1bGUgbmVlZHMgdG8gYmUKLSMgaW5zdGFsbGVkLCBidXQgc29tZSBkaXN0cmlidXRpb25zIChmb3IgZXhhbXBsZSBGZWRvcmEgMjMpIGRvbid0IHNoaXAgaXQgYnkKLSMgZGVmYXVsdC4gIEFzIHRoZSByZXN1bHRpbmcgZXJyb3IgaXMgdmVyeSBtaXNsZWFkaW5nIGNoZWNrIGZvciBiaWdudW0gYmVmb3JlCi0jIGJ1aWxkaW5nLgotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0JaWYgISBwZXJsIC1NYmlnaW50IC1lIHRydWU7IHRoZW4KLQkJYmJmYXRhbCAiVGhlIHBlcmwgbW9kdWxlICdiaWdudW0nIHdhcyBub3QgZm91bmQgYnV0IHRoaXMgaXMgcmVxdWlyZWQgdG8gYnVpbGQgb3BlbnNzbC4gIFBsZWFzZSBpbnN0YWxsIHRoaXMgbW9kdWxlIChvZnRlbiBwYWNrYWdlZCBhcyBwZXJsLWJpZ251bSkgYW5kIHJlLXJ1biBiaXRiYWtlLiIKLQlmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yai5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmouYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3ZTNjZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmouYmIKQEAgLTAsMCArMSw1OCBAQAorcmVxdWlyZSBvcGVuc3NsLmluYworCisjIEZvciB0YXJnZXQgc2lkZSB2ZXJzaW9ucyBvZiBvcGVuc3NsIGVuYWJsZSBzdXBwb3J0IGZvciBPQ0YgTGludXggZHJpdmVyCisjIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4KK0RFUEVORFMgKz0gImNyeXB0b2Rldi1saW51eCIKKworQ0ZMQUcgKz0gIi1ESEFWRV9DUllQVE9ERVYgLURVU0VfQ1JZUFRPREVWX0RJR0VTVFMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTI3ZmZhNWQ3NGJiNWEzMzcwNTZjMTRiMmVmOTNmYmY2IgorCitleHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMgZW5naW5lcyIKK2V4cG9ydCBPRV9MREZMQUdTPSIke0xERkxBR1N9IgorCitTUkNfVVJJICs9ICJmaWxlOi8vZmluZC5wbDtzdWJkaXI9JHtCUH0vdXRpbC8gXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1jX3JlaGFzaC5zaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLXRhcmdldHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NoYXJlZC1saWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vZS1sZGZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL2NhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vcGljLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGVzLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1kZXBzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wdGVzdF9tYWtlZmlsZV9kZXBzLnBhdGNoICBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLW11c2wtdGFyZ2V0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC11dGlsLXBlcmxwYXRoLnBsLWN3ZC5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NjMyMjEzOGYwYjY5ZTYxYjcyMTJiYzUzZDVlOTEyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlN2FmZjI5MmJlMjFjMjU5YzZhZjI2NDY5YzdhOWIzYmEyNmU5YWJhYWZmZDMyNWUzZGNjYzk3ODUyNTZjNDMxIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZW5naW5lcyIKK0ZJTEVTXyR7UE59LWVuZ2luZXMgPSAiJHtsaWJkaXJ9L3NzbC9lbmdpbmVzLyouc28gJHtsaWJkaXJ9L2VuZ2luZXMiCisKKyMgVGhlIGNyeXB0b191c2VfYmlnaW50IHBhdGNoIG1lYW5zIHRoYXQgcGVybCdzIGJpZ251bSBtb2R1bGUgbmVlZHMgdG8gYmUKKyMgaW5zdGFsbGVkLCBidXQgc29tZSBkaXN0cmlidXRpb25zIChmb3IgZXhhbXBsZSBGZWRvcmEgMjMpIGRvbid0IHNoaXAgaXQgYnkKKyMgZGVmYXVsdC4gIEFzIHRoZSByZXN1bHRpbmcgZXJyb3IgaXMgdmVyeSBtaXNsZWFkaW5nIGNoZWNrIGZvciBiaWdudW0gYmVmb3JlCisjIGJ1aWxkaW5nLgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJaWYgISBwZXJsIC1NYmlnaW50IC1lIHRydWU7IHRoZW4KKwkJYmJmYXRhbCAiVGhlIHBlcmwgbW9kdWxlICdiaWdudW0nIHdhcyBub3QgZm91bmQgYnV0IHRoaXMgaXMgcmVxdWlyZWQgdG8gYnVpbGQgb3BlbnNzbC4gIFBsZWFzZSBpbnN0YWxsIHRoaXMgbW9kdWxlIChvZnRlbiBwYWNrYWdlZCBhcyBwZXJsLWJpZ251bSkgYW5kIHJlLXJ1biBiaXRiYWtlLiIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHAtZml4LWJ1aWxkaW5nLXdpdGgtbGludXgtNC44LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHAtZml4LWJ1aWxkaW5nLXdpdGgtbGludXgtNC44LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2IwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcC1maXgtYnVpbGRpbmctd2l0aC1saW51eC00LjgucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSAzZGExOWFmNTNlMmVlZTJlNzdiNDU2Y2ZiYjlkNjMzYjA2NjU2ZDM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTMgT2N0IDIwMTYgMTM6NDE6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHBwOiBmaXggYnVpbGRpbmcgd2l0aCBsaW51eC00LjgKKworRml4IGEgYnVpbGQgZXJyb3Igd2hlbiB1c2luZyB0aGUgbGludXgtNC44IGhlYWRlcnMgdGhhdCByZXN1bHRzIGluOgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gcHBwb2UuaDo4NzowLAorICAgICAgICAgICAgICAgICBmcm9tIHBsdWdpbi5jOjI5OgorLi4vdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oOjIxMTo4OiBub3RlOiBvcmlnaW5hbGx5IGRlZmluZWQgaGVyZQorIHN0cnVjdCBpbjZfYWRkcgorICAgICAgICBefn5+fn5+fgorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmg6MjA6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi91c3IvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oOjI2LAorICAgICAgICAgICAgICAgICBmcm9tIHBsdWdpbi5jOjUyOgorLi4vdXNyL2luY2x1ZGUvbGludXgvaW42Lmg6NDk6ODogZXJyb3I6IHJlZGVmaW5pdGlvbiBvZiAnc3RydWN0IHNvY2thZGRyX2luNicKKyBzdHJ1Y3Qgc29ja2FkZHJfaW42IHsKKyAgICAgICAgXn5+fn5+fn5+fn5+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsxXQorCitbMV0gaHR0cHM6Ly9naXRodWIuY29tL3BhdWx1c21hY2svcHBwL3B1bGwvNjkKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHBwcGQvcGx1Z2lucy9ycC1wcHBvZS9wcHBvZS5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL3BwcG9lLmggYi9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvcHBwb2UuaAoraW5kZXggOWFiMmVlZS4uOTZkMjc5NCAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9wcHBvZS5oCisrKysgYi9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvcHBwb2UuaAorQEAgLTg0LDcgKzg0LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVJTlQzMl90OworICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisrI2luY2x1ZGUgPGxpbnV4L2luLmg+CisgCisgI2lmZGVmIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9ICisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLS0gCisyLjguMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwXzIuNC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYgppbmRleCA0NDM3YjVjLi41NmRiZDk4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwXzIuNC43LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHBfMi40LjcuYmIKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcHBwQC5zZXJ2aWNlIFwKICAgICAgICAgICAgZmlsZTovL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BwcC1maXgtYnVpbGRpbmctd2l0aC1saW51eC00LjgucGF0Y2ggXAogIgogCiBTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43OC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRjNTg1MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43OC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLVNVTU1BUlkgPSAibmFtZSBzZXJ2ZXIgaW5mb3JtYXRpb24gaGFuZGxlciIKLURFU0NSSVBUSU9OID0gIlJlc29sdmNvbmYgaXMgYSBmcmFtZXdvcmsgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN5c3RlbSdzIFwKLWluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBhdmFpbGFibGUgbmFtZXNlcnZlcnMuIEl0IHNldHMgXAotaXRzZWxmIHVwIGFzIHRoZSBpbnRlcm1lZGlhcnkgYmV0d2VlbiBwcm9ncmFtcyB0aGF0IHN1cHBseSBcCi1uYW1lc2VydmVyIGluZm9ybWF0aW9uIGFuZCBwcm9ncmFtcyB0aGF0IG5lZWQgbmFtZXNlcnZlciBcCi1pbmZvcm1hdGlvbi4iCi1TRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIiCi1BVVRIT1IgPSAiVGhvbWFzIEhvb2QiCi1IT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9yZXNvbHZjb25mIgotUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKLQotU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE1MDgyOFQyMjA3MzBaL3Bvb2wvbWFpbi9yLyR7QlBOfS8ke0JQTn1fMS43OC50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vZml4LXBhdGgtZm9yLWJ1c3lib3gucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vOTlfcmVzb2x2Y29uZiBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzczYTlmOTU0NGM4NGFhNDc3YTc0MjVhZTc3M2I4YjUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTYxYjIyZThmY2YwYzdkZTdlOTBhMDUwMzIzZTZmYTIyMWJjOGIyNWE1MzQ4YzE2MGJlMzUwNmY3ZTczYTdhMyIKLQotIyB0aGUgcGFja2FnZSBpcyB0YWtlbiBmcm9tIHNuYXBzaG90cy5kZWJpYW4ub3JnOyB0aGF0IHNvdXJjZSBpcyBzdGF0aWMgYW5kIGdvZXMgc3RhbGUKLSMgc28gd2UgY2hlY2sgdGhlIGxhdGVzdCB1cHN0cmVhbSBmcm9tIGEgZGlyZWN0b3J5IHRoYXQgZG9lcyBnZXQgdXBkYXRlZAotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9yL3Jlc29sdmNvbmYvIgotCi1pbmhlcml0IGFsbGFyY2gKLQotZG9fY29tcGlsZSAoKSB7Ci0JOgotfQotCi1kb19pbnN0YWxsICgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfcmVzb2x2Y29uZiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcwotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAotCQllY2hvICJkIC9ydW4vJHtCUE59L2ludGVyZmFjZSAtIC0gLSAtIiBcCi0JCSAgICAgPiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL3Jlc29sdmNvbmYuY29uZgotCWZpCi0JaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0vJHtCUE59Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8ke0JQTn0KLQlsbiAtc25mICR7bG9jYWxzdGF0ZWRpcn0vcnVuLyR7QlBOfSAke0R9JHtzeXNjb25mZGlyfS8ke0JQTn0vcnVuCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9Ci0JaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggJHtEfSR7ZG9jZGlyfS8ke1B9Ci0JY3AgLXBQUiBldGMvKiAke0R9JHtzeXNjb25mZGlyfS8KLQljaG93biAtUiByb290OnJvb3QgJHtEfSR7c3lzY29uZmRpcn0vCi0JaW5zdGFsbCAtbSAwNzU1IGJpbi9yZXNvbHZjb25mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCi0JaW5zdGFsbCAtbSAwNzU1IGJpbi9saXN0LXJlY29yZHMgJHtEfSR7YmFzZV9saWJkaXJ9LyR7QlBOfQotCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZAotCWluc3RhbGwgLW0gMDc1NSBkZWJpYW4vcmVzb2x2Y29uZi4wMDByZXNvbHZjb25mLmlmLXVwICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXVwLmQvMDAwcmVzb2x2Y29uZgotCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kCi0JaW5zdGFsbCAtbSAwNzU1IGRlYmlhbi9yZXNvbHZjb25mLnJlc29sdmNvbmYuaWYtZG93biAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQvcmVzb2x2Y29uZgotCWluc3RhbGwgLW0gMDY0NCBSRUFETUUgJHtEfSR7ZG9jZGlyfS8ke1B9LwotCWluc3RhbGwgLW0gMDY0NCBtYW4vcmVzb2x2Y29uZi44ICR7RH0ke21hbmRpcn0vbWFuOC8KLX0KLQotcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKLQlpZiBbIC16ICIkRCIgXTsgdGhlbgotCQlpZiBjb21tYW5kIC12IHN5c3RlbWQtdG1wZmlsZXMgPi9kZXYvbnVsbDsgdGhlbgotCQkJc3lzdGVtZC10bXBmaWxlcyAtLWNyZWF0ZSAke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvcmVzb2x2Y29uZi5jb25mCi0JCWVsaWYgWyAtZSAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdOyB0aGVuCi0JCQkke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKLQkJZmkKLQlmaQotfQotCi1GSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vJHtCUE59IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTUwMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzkuYmIKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWSA9ICJuYW1lIHNlcnZlciBpbmZvcm1hdGlvbiBoYW5kbGVyIgorREVTQ1JJUFRJT04gPSAiUmVzb2x2Y29uZiBpcyBhIGZyYW1ld29yayBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgc3lzdGVtJ3MgXAoraW5mb3JtYXRpb24gYWJvdXQgY3VycmVudGx5IGF2YWlsYWJsZSBuYW1lc2VydmVycy4gSXQgc2V0cyBcCitpdHNlbGYgdXAgYXMgdGhlIGludGVybWVkaWFyeSBiZXR3ZWVuIHByb2dyYW1zIHRoYXQgc3VwcGx5IFwKK25hbWVzZXJ2ZXIgaW5mb3JtYXRpb24gYW5kIHByb2dyYW1zIHRoYXQgbmVlZCBuYW1lc2VydmVyIFwKK2luZm9ybWF0aW9uLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiIKK0FVVEhPUiA9ICJUaG9tYXMgSG9vZCIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3Jlc29sdmNvbmYiCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNTIwVDA0NDM0MFovcG9vbC9tYWluL3IvJHtCUE59LyR7QlBOfV8xLjc5LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly85OV9yZXNvbHZjb25mIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYWIyMzgyMDIwZmM1MThmMDZhMDZlOTI0YzU2ZDMwMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZTI4NDNjZDQxNjJiNzA2ZjA0ODFiM2MyODE2NTc3MjhjYmMyODIyZTUwYTY0ZmZmNzliNzliZDhhYTg3MGEwIgorCisjIHRoZSBwYWNrYWdlIGlzIHRha2VuIGZyb20gc25hcHNob3RzLmRlYmlhbi5vcmc7IHRoYXQgc291cmNlIGlzIHN0YXRpYyBhbmQgZ29lcyBzdGFsZQorIyBzbyB3ZSBjaGVjayB0aGUgbGF0ZXN0IHVwc3RyZWFtIGZyb20gYSBkaXJlY3RvcnkgdGhhdCBkb2VzIGdldCB1cGRhdGVkCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL3IvcmVzb2x2Y29uZi8iCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9yZXNvbHZjb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi8ke0JQTn0vaW50ZXJmYWNlIC0gLSAtIC0iIFwKKwkJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvcmVzb2x2Y29uZi5jb25mCisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfS8ke0JQTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfQorCWxuIC1zbmYgJHtsb2NhbHN0YXRlZGlyfS9ydW4vJHtCUE59ICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfS9ydW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCAke0R9JHtkb2NkaXJ9LyR7UH0KKwljcCAtcFBSIGV0Yy8qICR7RH0ke3N5c2NvbmZkaXJ9LworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL3Jlc29sdmNvbmYgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2xpc3QtcmVjb3JkcyAke0R9JHtiYXNlX2xpYmRpcn0vJHtCUE59CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi11cC5kCisJaW5zdGFsbCAtbSAwNzU1IGRlYmlhbi9yZXNvbHZjb25mLjAwMHJlc29sdmNvbmYuaWYtdXAgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZC8wMDByZXNvbHZjb25mCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQKKwlpbnN0YWxsIC1tIDA3NTUgZGViaWFuL3Jlc29sdmNvbmYucmVzb2x2Y29uZi5pZi1kb3duICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZC9yZXNvbHZjb25mCisJaW5zdGFsbCAtbSAwNjQ0IFJFQURNRSAke0R9JHtkb2NkaXJ9LyR7UH0vCisJaW5zdGFsbCAtbSAwNjQ0IG1hbi9yZXNvbHZjb25mLjggJHtEfSR7bWFuZGlyfS9tYW44LworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCWlmIGNvbW1hbmQgLXYgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsOyB0aGVuCisJCQlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9yZXNvbHZjb25mLmNvbmYKKwkJZWxpZiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8ke0JQTn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdF8xLjcuMy4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMS5iYgppbmRleCA2ZGE5YTE3Li40ZGE2ZDM5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdF8xLjcuMy4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0XzEuNy4zLjEuYmIKQEAgLTI1LDkgKzI1LDcgQEAKIAogRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCiAKLUVYVFJBX09FQ09ORiArPSAiYWNfY3ZfaGF2ZV96X21vZGlmaWVyPXllcyBzY19jdl9zeXNfY3JkbHlfc2hpZnQ9OSBcCi0gICAgICAgIHNjX2N2X3N5c190YWJkbHlfc2hpZnQ9MTEgc2NfY3Zfc3lzX2NzaXplX3NoaWZ0PTQgXAotICAgICAgICBhY19jdl9pc3BlZWRfb2Zmc2V0PTEzIFwKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfaGF2ZV96X21vZGlmaWVyPXllcyBcCiAgICAgICAgIGFjX2N2X2hlYWRlcl9ic2RfbGlidXRpbF9oPW5vIFwKICIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1SZWplY3QtcHNrLXBhcmFtZXRlci1zZXQtd2l0aC1pbnZhbGlkLXBhc3NwaHJhc2UtY2hhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1SZWplY3QtcHNrLXBhcmFtZXRlci1zZXQtd2l0aC1pbnZhbGlkLXBhc3NwaHJhc2UtY2hhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkN2Q1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVJlamVjdC1wc2stcGFyYW1ldGVyLXNldC13aXRoLWludmFsaWQtcGFzc3BocmFzZS1jaGEucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSA3M2U0YWJiMjRhOTM2MDE0NzI3OTI0ZDhiMGIyOTY1ZWRmYzExN2RkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8am91bmlAcWNhLnF1YWxjb21tLmNvbT4KK0RhdGU6IEZyaSwgNCBNYXIgMjAxNiAxODo0Njo0MSArMDIwMAorU3ViamVjdDogW1BBVENIIDEvM10gUmVqZWN0IHBzayBwYXJhbWV0ZXIgc2V0IHdpdGggaW52YWxpZCBwYXNzcGhyYXNlCisgY2hhcmFjdGVyCisKK1dQQS9XUEEyLVBlcnNvbmFsIHBhc3NwaHJhc2UgaXMgbm90IGFsbG93ZWQgdG8gaW5jbHVkZSBjb250cm9sCitjaGFyYWN0ZXJzLiBSZWplY3QgYSBwYXNzcGhyYXNlIGNvbmZpZ3VyYXRpb24gYXR0ZW1wdCBpZiB0aGF0IHBhc3NwaHJhc2UKK2luY2x1ZGVzIGFuIGludmFsaWQgcGFzc3BocmFzZS4KKworVGhpcyBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB3cGFfc3VwcGxpY2FudCBjb3VsZCBoYXZlIHVwZGF0ZWQgdGhlCitjb25maWd1cmF0aW9uIGZpbGUgcHNrIHBhcmFtZXRlciB3aXRoIGFyYml0cmFyeSBkYXRhIGZyb20gdGhlIGNvbnRyb2wKK2ludGVyZmFjZSBvciBELUJ1cyBpbnRlcmZhY2UuIFdoaWxlIHRob3NlIGludGVyZmFjZXMgYXJlIHN1cHBvc2VkIHRvIGJlCithY2Nlc3NpYmxlIG9ubHkgZm9yIHRydXN0ZWQgdXNlcnMvYXBwbGljYXRpb25zLCBpdCBtYXkgYmUgcG9zc2libGUgdGhhdAorYW4gdW50cnVzdGVkIHVzZXIgaGFzIGFjY2VzcyB0byBhIG1hbmFnZW1lbnQgc29mdHdhcmUgY29tcG9uZW50IHRoYXQKK2RvZXMgbm90IHZhbGlkYXRlIHRoZSBwYXNzcGhyYXNlIHZhbHVlIGJlZm9yZSBwYXNzaW5nIGl0IHRvCit3cGFfc3VwcGxpY2FudC4KKworVGhpcyBjb3VsZCBhbGxvdyBzdWNoIGFuIHVudHJ1c3RlZCB1c2VyIHRvIGluamVjdCB1cCB0byA2MyBjaGFyYWN0ZXJzIG9mCithbG1vc3QgYXJiaXRyYXJ5IGRhdGEgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBTdWNoIGNvbmZpZ3VyYXRpb24KK2ZpbGUgY291bGQgcmVzdWx0IGluIHdwYV9zdXBwbGljYW50IHRyeWluZyB0byBsb2FkIGEgbGlicmFyeSAoZS5nLiwKK29wZW5zY19lbmdpbmVfcGF0aCwgcGtjczExX2VuZ2luZV9wYXRoLCBwa2NzMTFfbW9kdWxlX3BhdGgsCitsb2FkX2R5bmFtaWNfZWFwKSBmcm9tIHVzZXIgY29udHJvbGxlZCBsb2NhdGlvbiB3aGVuIHN0YXJ0aW5nIGFnYWluLgorVGhpcyB3b3VsZCBhbGxvdyBjb2RlIGZyb20gdGhhdCBsaWJyYXJ5IHRvIGJlIGV4ZWN1dGVkIHVuZGVyIHRoZQord3BhX3N1cHBsaWNhbnQgcHJvY2VzcyBwcml2aWxlZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0NWRTogQ1ZFLTIwMTYtNDQ3NworCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqb3VuaUBxY2EucXVhbGNvbW0uY29tPgorU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDxaaGl4aW9uZy5DaGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHdwYV9zdXBwbGljYW50L2NvbmZpZy5jIHwgNiArKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC9jb25maWcuYyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCitpbmRleCBiMWM3ODcwLi5mZGQ5NjQzIDEwMDY0NAorLS0tIGEvd3BhX3N1cHBsaWNhbnQvY29uZmlnLmMKKysrKyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCitAQCAtNDc4LDYgKzQ3OCwxMiBAQCBzdGF0aWMgaW50IHdwYV9jb25maWdfcGFyc2VfcHNrKGNvbnN0IHN0cnVjdCBwYXJzZV9kYXRhICpkYXRhLAorIAkJfQorIAkJd3BhX2hleGR1bXBfYXNjaWlfa2V5KE1TR19NU0dEVU1QLCAiUFNLIChBU0NJSSBwYXNzcGhyYXNlKSIsCisgCQkJCSAgICAgICh1OCAqKSB2YWx1ZSwgbGVuKTsKKysJCWlmIChoYXNfY3RybF9jaGFyKCh1OCAqKSB2YWx1ZSwgbGVuKSkgeworKwkJCXdwYV9wcmludGYoTVNHX0VSUk9SLAorKwkJCQkgICAiTGluZSAlZDogSW52YWxpZCBwYXNzcGhyYXNlIGNoYXJhY3RlciIsCisrCQkJCSAgIGxpbmUpOworKwkJCXJldHVybiAtMTsKKysJCX0KKyAJCWlmIChzc2lkLT5wYXNzcGhyYXNlICYmIG9zX3N0cmxlbihzc2lkLT5wYXNzcGhyYXNlKSA9PSBsZW4gJiYKKyAJCSAgICBvc19tZW1jbXAoc3NpZC0+cGFzc3BocmFzZSwgdmFsdWUsIGxlbikgPT0gMCkgeworIAkJCS8qIE5vIGNoYW5nZSB0byB0aGUgcHJldmlvdXNseSBjb25maWd1cmVkIHZhbHVlICovCistLSAKKzEuOS4xCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVdQUy1SZWplY3QtYS1DcmVkZW50aWFsLXdpdGgtaW52YWxpZC1wYXNzcGhyYXNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtUmVqZWN0LWEtQ3JlZGVudGlhbC13aXRoLWludmFsaWQtcGFzc3BocmFzZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIyMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtUmVqZWN0LWEtQ3JlZGVudGlhbC13aXRoLWludmFsaWQtcGFzc3BocmFzZS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitGcm9tIGVjYmIwYjNkYzEyMmIwZDI5MDk4N2NmOWM4NDAxMGJiZTUzZTEwMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqb3VuaUBxY2EucXVhbGNvbW0uY29tPgorRGF0ZTogRnJpLCA0IE1hciAyMDE2IDE3OjIwOjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBXUFM6IFJlamVjdCBhIENyZWRlbnRpYWwgd2l0aCBpbnZhbGlkIHBhc3NwaHJhc2UKKworV1BBL1dQQTItUGVyc29uYWwgcGFzc3BocmFzZSBpcyBub3QgYWxsb3dlZCB0byBpbmNsdWRlIGNvbnRyb2wKK2NoYXJhY3RlcnMuIFJlamVjdCBhIENyZWRlbnRpYWwgcmVjZWl2ZWQgZnJvbSBhIFdQUyBSZWdpc3RyYXIgYm90aCBhcworU1RBIChDcmVkZW50aWFsKSBhbmQgQVAgKEFQIFNldHRpbmdzKSBpZiB0aGUgY3JlZGVudGlhbCBpcyBmb3IgV1BBUFNLIG9yCitXUEEyUFNLIGF1dGhlbnRpY2F0aW9uIHR5cGUgYW5kIGluY2x1ZGVzIGFuIGludmFsaWQgcGFzc3BocmFzZS4KKworVGhpcyBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBob3N0YXBkIG9yIHdwYV9zdXBwbGljYW50IGNvdWxkIGhhdmUgdXBkYXRlZAordGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBQU0svcGFzc3BocmFzZSBwYXJhbWV0ZXIgd2l0aCBhcmJpdHJhcnkgZGF0YSBmcm9tCithbiBleHRlcm5hbCBkZXZpY2UgKFJlZ2lzdHJhcikgdGhhdCBtYXkgbm90IGJlIGZ1bGx5IHRydXN0ZWQuIFNob3VsZAorc3VjaCBkYXRhIGluY2x1ZGUgYSBuZXdsaW5lIGNoYXJhY3RlciwgdGhlIHJlc3VsdGluZyBjb25maWd1cmF0aW9uIGZpbGUKK2NvdWxkIGJlY29tZSBpbnZhbGlkIGFuZCBmYWlsIHRvIGJlIHBhcnNlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitDVkU6IENWRS0yMDE2LTQ0NzYKKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8am91bmlAcWNhLnF1YWxjb21tLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8WmhpeGlvbmcuQ2hpQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvdXRpbHMvY29tbW9uLmMgICAgICAgICB8IDEyICsrKysrKysrKysrKworIHNyYy91dGlscy9jb21tb24uaCAgICAgICAgIHwgIDEgKworIHNyYy93cHMvd3BzX2F0dHJfcHJvY2Vzcy5jIHwgMTAgKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL2NvbW1vbi5jIGIvc3JjL3V0aWxzL2NvbW1vbi5jCitpbmRleCA0NTBlMmM2Li4yN2I3YzAyIDEwMDY0NAorLS0tIGEvc3JjL3V0aWxzL2NvbW1vbi5jCisrKysgYi9zcmMvdXRpbHMvY29tbW9uLmMKK0BAIC02OTcsNiArNjk3LDE4IEBAIGludCBpc19oZXgoY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pCisgfQorIAorIAorK2ludCBoYXNfY3RybF9jaGFyKGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuKQorK3sKKysJc2l6ZV90IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworKwkJaWYgKGRhdGFbaV0gPCAzMiB8fCBkYXRhW2ldID09IDEyNykKKysJCQlyZXR1cm4gMTsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisrCisgc2l6ZV90IG1lcmdlX2J5dGVfYXJyYXlzKHU4ICpyZXMsIHNpemVfdCByZXNfbGVuLAorIAkJCSBjb25zdCB1OCAqc3JjMSwgc2l6ZV90IHNyYzFfbGVuLAorIAkJCSBjb25zdCB1OCAqc3JjMiwgc2l6ZV90IHNyYzJfbGVuKQorZGlmZiAtLWdpdCBhL3NyYy91dGlscy9jb21tb24uaCBiL3NyYy91dGlscy9jb21tb24uaAoraW5kZXggNzAxZGJiMi4uYTk3MjI0MCAxMDA2NDQKKy0tLSBhL3NyYy91dGlscy9jb21tb24uaAorKysrIGIvc3JjL3V0aWxzL2NvbW1vbi5oCitAQCAtNDg4LDYgKzQ4OCw3IEBAIGNvbnN0IGNoYXIgKiB3cGFfc3NpZF90eHQoY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7CisgCisgY2hhciAqIHdwYV9jb25maWdfcGFyc2Vfc3RyaW5nKGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgKmxlbik7CisgaW50IGlzX2hleChjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbik7CisraW50IGhhc19jdHJsX2NoYXIoY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pOworIHNpemVfdCBtZXJnZV9ieXRlX2FycmF5cyh1OCAqcmVzLCBzaXplX3QgcmVzX2xlbiwKKyAJCQkgY29uc3QgdTggKnNyYzEsIHNpemVfdCBzcmMxX2xlbiwKKyAJCQkgY29uc3QgdTggKnNyYzIsIHNpemVfdCBzcmMyX2xlbik7CitkaWZmIC0tZ2l0IGEvc3JjL3dwcy93cHNfYXR0cl9wcm9jZXNzLmMgYi9zcmMvd3BzL3dwc19hdHRyX3Byb2Nlc3MuYworaW5kZXggZWFkYjIyZi4uZThjNDU3OSAxMDA2NDQKKy0tLSBhL3NyYy93cHMvd3BzX2F0dHJfcHJvY2Vzcy5jCisrKysgYi9zcmMvd3BzL3dwc19hdHRyX3Byb2Nlc3MuYworQEAgLTIyOSw2ICsyMjksMTYgQEAgc3RhdGljIGludCB3cHNfd29ya2Fyb3VuZF9jcmVkX2tleShzdHJ1Y3Qgd3BzX2NyZWRlbnRpYWwgKmNyZWQpCisgCQljcmVkLT5rZXlfbGVuLS07CisgI2VuZGlmIC8qIENPTkZJR19XUFNfU1RSSUNUICovCisgCX0KKysKKysKKysJaWYgKGNyZWQtPmF1dGhfdHlwZSAmIChXUFNfQVVUSF9XUEFQU0sgfCBXUFNfQVVUSF9XUEEyUFNLKSAmJgorKwkgICAgKGNyZWQtPmtleV9sZW4gPCA4IHx8IGhhc19jdHJsX2NoYXIoY3JlZC0+a2V5LCBjcmVkLT5rZXlfbGVuKSkpIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sICJXUFM6IFJlamVjdCBjcmVkZW50aWFsIHdpdGggaW52YWxpZCBXUEEvV1BBMi1QZXJzb25hbCBwYXNzcGhyYXNlIik7CisrCQl3cGFfaGV4ZHVtcF9hc2NpaV9rZXkoTVNHX0lORk8sICJXUFM6IE5ldHdvcmsgS2V5IiwKKysJCQkJICAgICAgY3JlZC0+a2V5LCBjcmVkLT5rZXlfbGVuKTsKKysJCXJldHVybiAtMTsKKysJfQorKworIAlyZXR1cm4gMDsKKyB9CisgCistLQorMS45LjEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDItUmVqZWN0LVNFVF9DUkVELWNvbW1hbmRzLXdpdGgtbmV3bGluZS1jaGFyYWN0ZXJzLWluLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDItUmVqZWN0LVNFVF9DUkVELWNvbW1hbmRzLXdpdGgtbmV3bGluZS1jaGFyYWN0ZXJzLWluLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ3NDI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1SZWplY3QtU0VUX0NSRUQtY29tbWFuZHMtd2l0aC1uZXdsaW5lLWNoYXJhY3RlcnMtaW4tLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gYjE2NmNkODRhNzdhNjcxN2JlOTYwMGJmOTUzNzhhMDA1NWQ2ZjVhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CitEYXRlOiBUdWUsIDUgQXByIDIwMTYgMjM6MzM6MTAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFJlamVjdCBTRVRfQ1JFRCBjb21tYW5kcyB3aXRoIG5ld2xpbmUgY2hhcmFjdGVycyBpbiB0aGUKKyBzdHJpbmcgdmFsdWVzCisKK01vc3Qgb2YgdGhlIGNyZWQgYmxvY2sgcGFyYW1ldGVycyBhcmUgd3JpdHRlbiBhcyBzdHJpbmdzIHdpdGhvdXQKK2ZpbHRlcmluZyBhbmQgaWYgdGhlcmUgaXMgYW4gZW1iZWRkZWQgbmV3bGluZSBjaGFyYWN0ZXIgaW4gdGhlIHZhbHVlLAordW5leHBlY3RlZCBjb25maWd1cmF0aW9uIGZpbGUgZGF0YSBtaWdodCBiZSB3cml0dGVuLgorCitUaGlzIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHdwYV9zdXBwbGljYW50IGNvdWxkIGhhdmUgdXBkYXRlZCB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBjcmVkIHBhcmFtZXRlciB3aXRoIGFyYml0cmFyeSBkYXRhIGZyb20gdGhlIGNvbnRyb2wKK2ludGVyZmFjZSBvciBELUJ1cyBpbnRlcmZhY2UuIFdoaWxlIHRob3NlIGludGVyZmFjZXMgYXJlIHN1cHBvc2VkIHRvIGJlCithY2Nlc3NpYmxlIG9ubHkgZm9yIHRydXN0ZWQgdXNlcnMvYXBwbGljYXRpb25zLCBpdCBtYXkgYmUgcG9zc2libGUgdGhhdAorYW4gdW50cnVzdGVkIHVzZXIgaGFzIGFjY2VzcyB0byBhIG1hbmFnZW1lbnQgc29mdHdhcmUgY29tcG9uZW50IHRoYXQKK2RvZXMgbm90IHZhbGlkYXRlIHRoZSBjcmVkZW50aWFsIHZhbHVlIGJlZm9yZSBwYXNzaW5nIGl0IHRvCit3cGFfc3VwcGxpY2FudC4KKworVGhpcyBjb3VsZCBhbGxvdyBzdWNoIGFuIHVudHJ1c3RlZCB1c2VyIHRvIGluamVjdCBhbG1vc3QgYXJiaXRyYXJ5IGRhdGEKK2ludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3VjaCBjb25maWd1cmF0aW9uIGZpbGUgY291bGQgcmVzdWx0IGluCit3cGFfc3VwcGxpY2FudCB0cnlpbmcgdG8gbG9hZCBhIGxpYnJhcnkgKGUuZy4sIG9wZW5zY19lbmdpbmVfcGF0aCwKK3BrY3MxMV9lbmdpbmVfcGF0aCwgcGtjczExX21vZHVsZV9wYXRoLCBsb2FkX2R5bmFtaWNfZWFwKSBmcm9tIHVzZXIKK2NvbnRyb2xsZWQgbG9jYXRpb24gd2hlbiBzdGFydGluZyBhZ2Fpbi4gVGhpcyB3b3VsZCBhbGxvdyBjb2RlIGZyb20gdGhhdAorbGlicmFyeSB0byBiZSBleGVjdXRlZCB1bmRlciB0aGUgd3BhX3N1cHBsaWNhbnQgcHJvY2VzcyBwcml2aWxlZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0NWRTogQ1ZFLTIwMTYtNDQ3NworCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqb3VuaUBxY2EucXVhbGNvbW0uY29tPgorU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDxaaGl4aW9uZy5DaGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHdwYV9zdXBwbGljYW50L2NvbmZpZy5jIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC9jb25maWcuYyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCitpbmRleCBlYjk3Y2Q1Li42OTE1MmVmIDEwMDY0NAorLS0tIGEvd3BhX3N1cHBsaWNhbnQvY29uZmlnLmMKKysrKyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCitAQCAtMjg5Niw2ICsyODk2LDggQEAgaW50IHdwYV9jb25maWdfc2V0X2NyZWQoc3RydWN0IHdwYV9jcmVkICpjcmVkLCBjb25zdCBjaGFyICp2YXIsCisgCisgCWlmIChvc19zdHJjbXAodmFyLCAicGFzc3dvcmQiKSA9PSAwICYmCisgCSAgICBvc19zdHJuY21wKHZhbHVlLCAiZXh0OiIsIDQpID09IDApIHsKKysJCWlmIChoYXNfbmV3bGluZSh2YWx1ZSkpCisrCQkJcmV0dXJuIC0xOworIAkJc3RyX2NsZWFyX2ZyZWUoY3JlZC0+cGFzc3dvcmQpOworIAkJY3JlZC0+cGFzc3dvcmQgPSBvc19zdHJkdXAodmFsdWUpOworIAkJY3JlZC0+ZXh0X3Bhc3N3b3JkID0gMTsKK0BAIC0yOTQ2LDkgKzI5NDgsMTQgQEAgaW50IHdwYV9jb25maWdfc2V0X2NyZWQoc3RydWN0IHdwYV9jcmVkICpjcmVkLCBjb25zdCBjaGFyICp2YXIsCisgCX0KKyAKKyAJdmFsID0gd3BhX2NvbmZpZ19wYXJzZV9zdHJpbmcodmFsdWUsICZsZW4pOworLQlpZiAodmFsID09IE5VTEwpIHsKKysJaWYgKHZhbCA9PSBOVUxMIHx8CisrCSAgICAob3Nfc3RyY21wKHZhciwgImV4Y2x1ZGVkX3NzaWQiKSAhPSAwICYmCisrCSAgICAgb3Nfc3RyY21wKHZhciwgInJvYW1pbmdfY29uc29ydGl1bSIpICE9IDAgJiYKKysJICAgICBvc19zdHJjbXAodmFyLCAicmVxdWlyZWRfcm9hbWluZ19jb25zb3J0aXVtIikgIT0gMCAmJgorKwkgICAgIGhhc19uZXdsaW5lKHZhbCkpKSB7CisgCQl3cGFfcHJpbnRmKE1TR19FUlJPUiwgIkxpbmUgJWQ6IGludmFsaWQgZmllbGQgJyVzJyBzdHJpbmcgIgorIAkJCSAgICJ2YWx1ZSAnJXMnLiIsIGxpbmUsIHZhciwgdmFsdWUpOworKwkJb3NfZnJlZSh2YWwpOworIAkJcmV0dXJuIC0xOworIAl9CisgCistLSAKKzEuOS4xCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLVJlbW92ZS1uZXdsaW5lcy1mcm9tLXdwYV9zdXBwbGljYW50LWNvbmZpZy1uZXR3b3JrLW8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLVJlbW92ZS1uZXdsaW5lcy1mcm9tLXdwYV9zdXBwbGljYW50LWNvbmZpZy1uZXR3b3JrLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3YjAxYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDItUmVtb3ZlLW5ld2xpbmVzLWZyb20td3BhX3N1cHBsaWNhbnQtY29uZmlnLW5ldHdvcmstby5wYXRjaApAQCAtMCwwICsxLDg2IEBACitGcm9tIDBmZTVhMjM0MjQwYTEwOGIyOTRhODcxNzRhZDE5N2Y2YjVjYjM4ZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIFN0ZXdhcnQgPHBzdGV3QGdvb2dsZS5jb20+CitEYXRlOiBUaHUsIDMgTWFyIDIwMTYgMTU6NDA6MTkgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFJlbW92ZSBuZXdsaW5lcyBmcm9tIHdwYV9zdXBwbGljYW50IGNvbmZpZyBuZXR3b3JrCisgb3V0cHV0CisKK1NwdXJpb3VzIG5ld2xpbmVzIG91dHB1dCB3aGlsZSB3cml0aW5nIHRoZSBjb25maWcgZmlsZSBjYW4gY29ycnVwdCB0aGUKK3dwYV9zdXBwbGljYW50IGNvbmZpZ3VyYXRpb24uIEF2b2lkIHdyaXRpbmcgdGhlc2UgZm9yIHRoZSBuZXR3b3JrIGJsb2NrCitwYXJhbWV0ZXJzLiBUaGlzIGlzIGEgZ2VuZXJpYyBmaWx0ZXIgdGhhdCBjb3ZlciBjYXNlcyB0aGF0IG1heSBub3QgaGF2ZQorYmVlbiBleHBsaWNpdGx5IGFkZHJlc3NlZCB3aXRoIGEgbW9yZSBzcGVjaWZpYyBjb21taXQgdG8gYXZvaWQgY29udHJvbAorY2hhcmFjdGVycyBpbiB0aGUgcHNrIHBhcmFtZXRlci4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitDVkU6IENWRS0yMDE2LTQ0NzYKKworU2lnbmVkLW9mZi1ieTogUGF1bCBTdGV3YXJ0IDxwc3Rld0Bnb29nbGUuY29tPgorU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDxaaGl4aW9uZy5DaGkud3JzLmNvbT4KKy0tLQorIHNyYy91dGlscy9jb21tb24uYyAgICAgIHwgMTEgKysrKysrKysrKysKKyBzcmMvdXRpbHMvY29tbW9uLmggICAgICB8ICAxICsKKyB3cGFfc3VwcGxpY2FudC9jb25maWcuYyB8IDE1ICsrKysrKysrKysrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91dGlscy9jb21tb24uYyBiL3NyYy91dGlscy9jb21tb24uYworaW5kZXggMjdiN2MwMi4uOTg1NjQ2MyAxMDA2NDQKKy0tLSBhL3NyYy91dGlscy9jb21tb24uYworKysrIGIvc3JjL3V0aWxzL2NvbW1vbi5jCitAQCAtNzA5LDYgKzcwOSwxNyBAQCBpbnQgaGFzX2N0cmxfY2hhcihjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKKyB9CisgCisgCisraW50IGhhc19uZXdsaW5lKGNvbnN0IGNoYXIgKnN0cikKKyt7CisrCXdoaWxlICgqc3RyKSB7CisrCQlpZiAoKnN0ciA9PSAnXG4nIHx8ICpzdHIgPT0gJ1xyJykKKysJCQlyZXR1cm4gMTsKKysJCXN0cisrOworKwl9CisrCXJldHVybiAwOworK30KKysKKysKKyBzaXplX3QgbWVyZ2VfYnl0ZV9hcnJheXModTggKnJlcywgc2l6ZV90IHJlc19sZW4sCisgCQkJIGNvbnN0IHU4ICpzcmMxLCBzaXplX3Qgc3JjMV9sZW4sCisgCQkJIGNvbnN0IHU4ICpzcmMyLCBzaXplX3Qgc3JjMl9sZW4pCitkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL2NvbW1vbi5oIGIvc3JjL3V0aWxzL2NvbW1vbi5oCitpbmRleCBhOTcyMjQwLi5kMTk5MjdiIDEwMDY0NAorLS0tIGEvc3JjL3V0aWxzL2NvbW1vbi5oCisrKysgYi9zcmMvdXRpbHMvY29tbW9uLmgKK0BAIC00ODksNiArNDg5LDcgQEAgY29uc3QgY2hhciAqIHdwYV9zc2lkX3R4dChjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKKyBjaGFyICogd3BhX2NvbmZpZ19wYXJzZV9zdHJpbmcoY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCAqbGVuKTsKKyBpbnQgaXNfaGV4KGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgaGFzX2N0cmxfY2hhcihjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbik7CisraW50IGhhc19uZXdsaW5lKGNvbnN0IGNoYXIgKnN0cik7Cisgc2l6ZV90IG1lcmdlX2J5dGVfYXJyYXlzKHU4ICpyZXMsIHNpemVfdCByZXNfbGVuLAorIAkJCSBjb25zdCB1OCAqc3JjMSwgc2l6ZV90IHNyYzFfbGVuLAorIAkJCSBjb25zdCB1OCAqc3JjMiwgc2l6ZV90IHNyYzJfbGVuKTsKK2RpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC9jb25maWcuYyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCitpbmRleCBmZGQ5NjQzLi5lYjk3Y2Q1IDEwMDY0NAorLS0tIGEvd3BhX3N1cHBsaWNhbnQvY29uZmlnLmMKKysrKyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCitAQCAtMjY5OSw4ICsyNjk5LDE5IEBAIGNoYXIgKiB3cGFfY29uZmlnX2dldChzdHJ1Y3Qgd3BhX3NzaWQgKnNzaWQsIGNvbnN0IGNoYXIgKnZhcikKKyAKKyAJZm9yIChpID0gMDsgaSA8IE5VTV9TU0lEX0ZJRUxEUzsgaSsrKSB7CisgCQljb25zdCBzdHJ1Y3QgcGFyc2VfZGF0YSAqZmllbGQgPSAmc3NpZF9maWVsZHNbaV07CistCQlpZiAob3Nfc3RyY21wKHZhciwgZmllbGQtPm5hbWUpID09IDApCistCQkJcmV0dXJuIGZpZWxkLT53cml0ZXIoZmllbGQsIHNzaWQpOworKwkJaWYgKG9zX3N0cmNtcCh2YXIsIGZpZWxkLT5uYW1lKSA9PSAwKSB7CisrCQkJY2hhciAqcmV0ID0gZmllbGQtPndyaXRlcihmaWVsZCwgc3NpZCk7CisrCisrCQkJaWYgKHJldCAmJiBoYXNfbmV3bGluZShyZXQpKSB7CisrCQkJCXdwYV9wcmludGYoTVNHX0VSUk9SLAorKwkJCQkJICAgIkZvdW5kIG5ld2xpbmUgaW4gdmFsdWUgZm9yICVzOyBub3QgcmV0dXJuaW5nIGl0IiwKKysJCQkJCSAgIHZhcik7CisrCQkJCW9zX2ZyZWUocmV0KTsKKysJCQkJcmV0ID0gTlVMTDsKKysJCQl9CisrCisrCQkJcmV0dXJuIHJldDsKKysJCX0KKyAJfQorIAorIAlyZXR1cm4gTlVMTDsKKy0tCisxLjkuMQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1SZWplY3QtU0VULWNvbW1hbmRzLXdpdGgtbmV3bGluZS1jaGFyYWN0ZXJzLWluLXRoZS1zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1SZWplY3QtU0VULWNvbW1hbmRzLXdpdGgtbmV3bGluZS1jaGFyYWN0ZXJzLWluLXRoZS1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzVkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAzLVJlamVjdC1TRVQtY29tbWFuZHMtd2l0aC1uZXdsaW5lLWNoYXJhY3RlcnMtaW4tdGhlLXMucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAyYTNmNTY1MDJiNTIzNzVjM2JmMTEzY2Y5MmFkZmE5OWJhZDZiNDg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8am91bmlAcWNhLnF1YWxjb21tLmNvbT4KK0RhdGU6IFR1ZSwgNSBBcHIgMjAxNiAyMzo1NTo0OCArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gUmVqZWN0IFNFVCBjb21tYW5kcyB3aXRoIG5ld2xpbmUgY2hhcmFjdGVycyBpbiB0aGUKKyBzdHJpbmcgdmFsdWVzCisKK01hbnkgb2YgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHdyaXR0ZW4gYXMgc3RyaW5ncword2l0aG91dCBmaWx0ZXJpbmcgYW5kIGlmIHRoZXJlIGlzIGFuIGVtYmVkZGVkIG5ld2xpbmUgY2hhcmFjdGVyIGluIHRoZQordmFsdWUsIHVuZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBmaWxlIGRhdGEgbWlnaHQgYmUgd3JpdHRlbi4KKworVGhpcyBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB3cGFfc3VwcGxpY2FudCBjb3VsZCBoYXZlIHVwZGF0ZWQgdGhlCitjb25maWd1cmF0aW9uIGZpbGUgZ2xvYmFsIHBhcmFtZXRlciB3aXRoIGFyYml0cmFyeSBkYXRhIGZyb20gdGhlIGNvbnRyb2wKK2ludGVyZmFjZSBvciBELUJ1cyBpbnRlcmZhY2UuIFdoaWxlIHRob3NlIGludGVyZmFjZXMgYXJlIHN1cHBvc2VkIHRvIGJlCithY2Nlc3NpYmxlIG9ubHkgZm9yIHRydXN0ZWQgdXNlcnMvYXBwbGljYXRpb25zLCBpdCBtYXkgYmUgcG9zc2libGUgdGhhdAorYW4gdW50cnVzdGVkIHVzZXIgaGFzIGFjY2VzcyB0byBhIG1hbmFnZW1lbnQgc29mdHdhcmUgY29tcG9uZW50IHRoYXQKK2RvZXMgbm90IHZhbGlkYXRlIHRoZSB2YWx1ZSBvZiBhIHBhcmFtZXRlciBiZWZvcmUgcGFzc2luZyBpdCB0bword3BhX3N1cHBsaWNhbnQuCisKK1RoaXMgY291bGQgYWxsb3cgc3VjaCBhbiB1bnRydXN0ZWQgdXNlciB0byBpbmplY3QgYWxtb3N0IGFyYml0cmFyeSBkYXRhCitpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIFN1Y2ggY29uZmlndXJhdGlvbiBmaWxlIGNvdWxkIHJlc3VsdCBpbgord3BhX3N1cHBsaWNhbnQgdHJ5aW5nIHRvIGxvYWQgYSBsaWJyYXJ5IChlLmcuLCBvcGVuc2NfZW5naW5lX3BhdGgsCitwa2NzMTFfZW5naW5lX3BhdGgsIHBrY3MxMV9tb2R1bGVfcGF0aCwgbG9hZF9keW5hbWljX2VhcCkgZnJvbSB1c2VyCitjb250cm9sbGVkIGxvY2F0aW9uIHdoZW4gc3RhcnRpbmcgYWdhaW4uIFRoaXMgd291bGQgYWxsb3cgY29kZSBmcm9tIHRoYXQKK2xpYnJhcnkgdG8gYmUgZXhlY3V0ZWQgdW5kZXIgdGhlIHdwYV9zdXBwbGljYW50IHByb2Nlc3MgcHJpdmlsZWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitDVkU6IENWRS0yMDE2LTQ0NzcKKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8am91bmlAcWNhLnF1YWxjb21tLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8WmhpeGlvbmcuQ2hpQHdpbmRyaXZlci5jb20+CistLS0KKyB3cGFfc3VwcGxpY2FudC9jb25maWcuYyB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvd3BhX3N1cHBsaWNhbnQvY29uZmlnLmMgYi93cGFfc3VwcGxpY2FudC9jb25maWcuYworaW5kZXggNjkxNTJlZi4uZDlhMTYwMyAxMDA2NDQKKy0tLSBhL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCisrKysgYi93cGFfc3VwcGxpY2FudC9jb25maWcuYworQEAgLTM3NjQsNiArMzc2NCwxMiBAQCBzdGF0aWMgaW50IHdwYV9nbG9iYWxfY29uZmlnX3BhcnNlX3N0cihjb25zdCBzdHJ1Y3QgZ2xvYmFsX3BhcnNlX2RhdGEgKmRhdGEsCisgCQlyZXR1cm4gLTE7CisgCX0KKyAKKysJaWYgKGhhc19uZXdsaW5lKHBvcykpIHsKKysJCXdwYV9wcmludGYoTVNHX0VSUk9SLCAiTGluZSAlZDogaW52YWxpZCAlcyB2YWx1ZSB3aXRoIG5ld2xpbmUiLAorKwkJCSAgIGxpbmUsIGRhdGEtPm5hbWUpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisgCXRtcCA9IG9zX3N0cmR1cChwb3MpOworIAlpZiAodG1wID09IE5VTEwpCisgCQlyZXR1cm4gLTE7CistLSAKKzEuOS4xCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjUuYmIKaW5kZXggOTM1YzhhZi4uYTQxNjBlMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi41LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50XzIuNS5iYgpAQCAtMjQsNiArMjQsMTEgQEAKICAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50LmNvbmYgXAogICAgICAgICAgICBmaWxlOi8vd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIFwKICAgICAgICAgICAgZmlsZTovLzk5X3dwYV9zdXBwbGljYW50IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtV1BTLVJlamVjdC1hLUNyZWRlbnRpYWwtd2l0aC1pbnZhbGlkLXBhc3NwaHJhc2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1SZW1vdmUtbmV3bGluZXMtZnJvbS13cGFfc3VwcGxpY2FudC1jb25maWctbmV0d29yay1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmVqZWN0LXBzay1wYXJhbWV0ZXItc2V0LXdpdGgtaW52YWxpZC1wYXNzcGhyYXNlLWNoYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLVJlamVjdC1TRVRfQ1JFRC1jb21tYW5kcy13aXRoLW5ld2xpbmUtY2hhcmFjdGVycy1pbi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1SZWplY3QtU0VULWNvbW1hbmRzLXdpdGgtbmV3bGluZS1jaGFyYWN0ZXJzLWluLXRoZS1zLnBhdGNoIFwKICAgICAgICAgICAiCiBTUkNfVVJJW21kNXN1bV0gPSAiOTZmZjc1YzNhNTE0ZjFmMzI0NTYwYTIzNzZmMTMxMTAiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2NlNTViYWU0ODNiMzY0ZWFlNTVjMzViYTU2N2MyNzliZTQ0MmVkOGJhYjViODBhM2M3ZmIwZDA1N2I5YjMxNiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcHJvZmlsZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcHJvZmlsZQppbmRleCA1M2MyNjgwLi43MzY3ZmQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCkBAIC01LDEyICs1LDYgQEAKIEVESVRPUj0idmkiCQkJIyBuZWVkZWQgZm9yIHBhY2thZ2VzIGxpa2UgY3JvbiwgZ2l0LWNvbW1pdAogdGVzdCAteiAiJFRFUk0iICYmIFRFUk09InZ0MTAwIgkjIEJhc2ljIHRlcm1pbmFsIGNhcGFiLiBGb3Igc2NyZWVuIGV0Yy4KIAotaWYgWyAhIC1lIC9ldGMvbG9jYWx0aW1lIC1hICEgLWUgL2V0Yy9UWiBdOyB0aGVuCi0JVFo9IlVUQyIJCSMgVGltZSBab25lLiBMb29rIGF0IGh0dHA6Ly90aGVvcnkudXdpbm5pcGVnLmNhL2dudS9nbGliYy9saWJjXzMwMy5odG1sIAotCQkJCSMgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyB0byBzZXQgdGhpcyB0byB5b3VyIGxvY2FsIHRpbWV6b25lLgotCWV4cG9ydCBUWgotZmkKLQogaWYgWyAiJEhPTUUiID0gIlJPT1RIT01FIiBdOyB0aGVuCiAgICBQQVRIPSRQQVRIOi91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW4KIGZpCkBAIC0yMCwxNyArMTQsMjIgQEAKIGZpCiAKIGlmIFsgLWQgL2V0Yy9wcm9maWxlLmQgXTsgdGhlbgotICBmb3IgaSBpbiAvZXRjL3Byb2ZpbGUuZC8qIDsgZG8KLSAgICAuICRpCisgIGZvciBpIGluIC9ldGMvcHJvZmlsZS5kLyouc2ggOyBkbworICAgIGlmIFsgLWYgJGkgLWEgLXIgJGkgXTsgdGhlbgorICAgICAgLiAkaQorICAgIGZpCiAgIGRvbmUKICAgdW5zZXQgaQogZmkKIAotaWYgWyAteCAvdXNyL2Jpbi9yZXNpemUgXTt0aGVuCi0gIC91c3IvYmluL3Jlc2l6ZSA+L2Rldi9udWxsCitpZiBbIC14IC91c3IvYmluL3Jlc2l6ZSBdICYmIHRlcm1wYXRoPSJgdHR5YCI7IHRoZW4KKyAgIyBNYWtlIHN1cmUgd2UgYXJlIG9uIGEgc2VyaWFsIGNvbnNvbGUgKGkuZS4gdGhlIGRldmljZSB1c2VkIHN0YXJ0cyB3aXRoIC9kZXYvdHR5KSwKKyAgIyBvdGhlcndpc2Ugd2UgY29uZnVzZSBlLmcuIHRoZSBlY2xpcHNlIGxhdW5jaGVyIHdoaWNoIHRyaWVzIGRvIHVzZSBzc2gKKyAgY2FzZSAiJHRlcm1wYXRoIiBpbgorICAvZGV2L3R0eSopIHJlc2l6ZSA+L2Rldi9udWxsCisgIGVzYWMKIGZpCiAKIGV4cG9ydCBQQVRIIFBTMSBPUElFRElSIFFQRURJUiBRVERJUiBFRElUT1IgVEVSTQogCiB1bWFzayAwMjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYgppbmRleCBkMzkxNzA3Li41MzMzMTEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYgpAQCAtMTY1LDkgKzE2NSw3IEBACiAgICAgICAgIGRvbmUKIH0KIAotc3lzcm9vdF9zdGFnZV9hbGxfYXBwZW5kICgpIHsKLQlzeXNyb290X3N0YWdlX2RpciAke0R9JHtzeXNjb25mZGlyfS9za2VsICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0vc2tlbAotfQorU1lTUk9PVF9ESVJTICs9ICIke3N5c2NvbmZkaXJ9L3NrZWwiCiAKIFBBQ0tBR0VTID0gIiR7UE59LWRvYyAke1BOfSAke1BOfS1kZXYgJHtQTn0tZGJnIgogRklMRVNfJHtQTn0gPSAiLyIKQEAgLTE3Nyw0ICsxNzUsMyBAQAogCiBDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9mc3RhYiAke0BbJycsICcke3N5c2NvbmZkaXJ9L2hvc3RuYW1lJ11bKGQuZ2V0VmFyKCdob3N0bmFtZScsIFRydWUpICE9ICcnKV19ICR7c3lzY29uZmRpcn0vc2hlbGxzIgogQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L21vdGQgJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mICR7c3lzY29uZmRpcn0vcHJvZmlsZSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2JzZC1oZWFkZXJzL2JzZC1oZWFkZXJzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2JzZC1oZWFkZXJzL2JzZC1oZWFkZXJzLmJiCmluZGV4IDhmNDNkNDMuLmM5OTQ1ZDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9ic2QtaGVhZGVycy9ic2QtaGVhZGVycy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnNkLWhlYWRlcnMvYnNkLWhlYWRlcnMuYmIKQEAgLTEsNyArMSw3IEBACiAjIENvcHlyaWdodCAoQykgMjAxNiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQogCi1ERVNDUklQVElPTiA9ICJic2QgY29tcGF0aWJsZSBoZWFkZXJzIgorU1VNTUFSWSA9ICJCU0QgY29tcGF0aWJsZSBoZWFkZXJzIgogTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zeXMtcXVldWUuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT1jNjM1MmIwZjAzYmI0NDg2MDA0NTY1NDdkMzM0YjU2ZiIKIFNFQ1RJT04gPSAiZGV2ZWwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jCmluZGV4IDVlOTFhMjYuLmIyZjE5NjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jCkBAIC0xOSw3ICsxOSw3IEBACiBleHBvcnQgRVhUUkFfTERGTEFHUyA9ICIke0xERkxBR1N9IgogCiAjIFdlIGRvbid0IHdhbnQgJy1lIE1BS0VGTEFHUz0nIGluIEVYVFJBX09FTUFLRQotRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgTEQ9JyR7Q0NMRH0nIFY9MSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBTS0lQX1NUUklQPXkiCitFWFRSQV9PRU1BS0UgPSAiQ0M9JyR7Q0N9JyBMRD0nJHtDQ0xEfScgVj0xIEFSQ0g9JHtUQVJHRVRfQVJDSH0gQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IFNLSVBfU1RSSVA9eSBIT1NUQ0M9JyR7QlVJTERfQ0N9JyBIT1NUQ1BQPScke0JVSUxEX0NQUH0nIgogCiBQQUNLQUdFUyA9KyAiJHtQTn0taHR0cGQgJHtQTn0tdWRoY3BkICR7UE59LXVkaGNwYyAke1BOfS1zeXNsb2cgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgogCkBAIC0yODYsOCArMjg2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluICR0bXAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo9YGVjaG8gJHtpfSB8IHNlZCBzL1w7L1wgL2dgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPWBlY2hvICR7aX0gfCBzZWQgLWUgJ3MvdHR5Ly8nIC1lICdzL14uKjsvLycgLWUgJ3MvOy4qLy8nYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ0dHkkbGFiZWw6OnJlc3Bhd246JHtiYXNlX3NiaW5kaXJ9L2dldHR5ICR7an0iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9YGVjaG8gJHtpfSB8IHNlZCAtZSAncy9eLio7Ly8nIC1lICdzLzsuKi8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJGlkOjpyZXNwYXduOiR7YmFzZV9zYmluZGlyfS9nZXR0eSAke2p9IiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCiAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgZmkKQEAgLTQyMyw3ICs0MjMsNyBAQAogCSMgcmVtb3ZlIHN5c2xvZwogCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KIAkJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgotCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nIHN0b3AKKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyBzdG9wIHx8IDoKIAkJZmkKIAlmaQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWZsb2NrLXVwZGF0ZS10aGUtYmVoYXZpb3VyLW9mLWMtcGFyYW1ldGVyLXRvLW1hdGNoLXUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtZmxvY2stdXBkYXRlLXRoZS1iZWhhdmlvdXItb2YtYy1wYXJhbWV0ZXItdG8tbWF0Y2gtdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNiZDczCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWZsb2NrLXVwZGF0ZS10aGUtYmVoYXZpb3VyLW9mLWMtcGFyYW1ldGVyLXRvLW1hdGNoLXUucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSAxOThmMThhZGRmMWQ4MTRjMmZlZmNiNDkyZjNiOWZiZDIyMTY2OWJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk1heGluIEIuIEpvaG4iIDxtYXhpbi5qb2huQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjAgQXByIDIwMTYgMTg6MjQ6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gZmxvY2s6IHVwZGF0ZSB0aGUgYmVoYXZpb3VyIG9mIC1jIHBhcmFtZXRlciB0byBtYXRjaCB1cHN0cmVhbQorCitJbiB1cHN0cmVhbSwgLWMgJ1BST0cgQVJHUycgbWVhbnMgInJ1biBzaCAtYyAnUFJPRyBBUkdTJyIKKworZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQgICAgIG5ldyAgIGRlbHRhCitmbG9ja19tYWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4NiAgICAgMzc3ICAgICArOTEKKy5yb2RhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU1ODQ5ICAxNTU4OTAgICAgICs0MQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorWyBodHRwOi8vbGlzdHMuYnVzeWJveC5uZXQvcGlwZXJtYWlsL2J1c3lib3gvMjAxNi1BcHJpbC8wODQxNDIuaHRtbCBdCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgorLS0tCisgdXRpbC1saW51eC9mbG9jay5jIHwgMjAgKysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3V0aWwtbGludXgvZmxvY2suYyBiL3V0aWwtbGludXgvZmxvY2suYworaW5kZXggMDVhNzQ3Zi4uYzg1YTI1ZCAxMDA2NDQKKy0tLSBhL3V0aWwtbGludXgvZmxvY2suYworKysrIGIvdXRpbC1saW51eC9mbG9jay5jCitAQCAtMjAsNiArMjAsNyBAQCBpbnQgZmxvY2tfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIE1BSU5fRVhURVJOQUxMWV9WSVNJQkxFOworIGludCBmbG9ja19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgY2hhciAqKmFyZ3YpCisgeworIAlpbnQgbW9kZSwgb3B0LCBmZDsKKysgICAgY2hhciAqY21kX2FyZ3NbNF07CisgCWVudW0geworIAkJT1BUX3MgPSAoMSA8PCAwKSwKKyAJCU9QVF94ID0gKDEgPDwgMSksCitAQCAtNTcsNyArNTgsNiBAQCBpbnQgZmxvY2tfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGNoYXIgKiphcmd2KQorIAkvKiBJZiBpdCBpcyAiZmxvY2sgRklMRSAtYyBQUk9HIiwgdGhlbiAtYyBpc24ndCBjYXVnaHQgYnkgZ2V0b3B0MzI6CisgCSAqIHdlIHVzZSAiKyIgaW4gb3JkZXIgdG8gc3VwcG9ydCAiZmxvY2sgLW9wdCBGSUxFIFBST0cgLXdpdGgtb3B0cyIsCisgCSAqIHdlIG5lZWQgdG8gcmVtb3ZlIC1jIGJ5IGhhbmQuCistCSAqIFRPRE86IGluIHVwc3RyZWFtLCAtYyAnUFJPRyBBUkdTJyBtZWFucyAicnVuIHNoIC1jICdQUk9HIEFSR1MnIgorIAkgKi8KKyAJaWYgKGFyZ3ZbMF0KKyAJICYmIGFyZ3ZbMF1bMF0gPT0gJy0nCitAQCAtNjUsNyArNjUsMTAgQEAgaW50IGZsb2NrX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjaGFyICoqYXJndikKKyAJICAgIHx8IChFTkFCTEVfTE9OR19PUFRTICYmIHN0cmNtcChhcmd2WzBdICsgMSwgIi1jb21tYW5kIikgPT0gMCkKKyAJICAgICkKKyAJKSB7CistCQlhcmd2Kys7CisrICAgICAgICBpZiAoYXJnYyAhPSBvcHRpbmQgKyAzKQorKyAgICAgICAgICAgIGJiX2Vycm9yX21zZ19hbmRfZGllKCItYyByZXF1aXJlcyBleGFjdGx5IG9uZSBjb21tYW5kIGFyZ3VtZW50Iik7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgYXJndisrOworIAl9CisgCisgCWlmIChPUFRfcyA9PSBMT0NLX1NIICYmIE9QVF94ID09IExPQ0tfRVggJiYgT1BUX24gPT0gTE9DS19OQiAmJiBPUFRfdSA9PSBMT0NLX1VOKSB7CitAQCAtODksOSArOTIsMTQgQEAgaW50IGZsb2NrX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjaGFyICoqYXJndikKKyAJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworIAkJYmJfcGVycm9yX25vbXNnX2FuZF9kaWUoKTsKKyAJfQorLQorLQlpZiAoYXJndlswXSkKKy0JCXJldHVybiBzcGF3bl9hbmRfd2FpdChhcmd2KTsKKy0KKysgICAgaWYgKGFyZ3ZbMF0pIHsKKysgICAgICAgIGNtZF9hcmdzWzBdID0gZ2V0ZW52KCJTSEVMTCIpOworKyAgICAgICAgaWYgKCFjbWRfYXJnc1swXSkKKysgICAgICAgICAgICBjbWRfYXJnc1swXSA9IChjaGFyKilERUZBVUxUX1NIRUxMOworKyAgICAgICAgY21kX2FyZ3NbMV0gPSAoY2hhciopIi1jIjsKKysgICAgICAgIGNtZF9hcmdzWzJdID0gYXJndlswXTsKKysgICAgICAgIGNtZF9hcmdzWzNdID0gTlVMTDsKKysgICAgICAgIHJldHVybiBzcGF3bl9hbmRfd2FpdChjbWRfYXJncyk7CisrICAgIH0KKyAJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyB9CistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1zZWQtZml4LXNlZC1uLWZsdXNoZXMtcGF0dGVybi1zcGFjZS10ZXJtaW5hdGVzLWVhcmx5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLXNlZC1maXgtc2VkLW4tZmx1c2hlcy1wYXR0ZXJuLXNwYWNlLXRlcm1pbmF0ZXMtZWFybHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1Mzk4NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1zZWQtZml4LXNlZC1uLWZsdXNoZXMtcGF0dGVybi1zcGFjZS10ZXJtaW5hdGVzLWVhcmx5LnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gOTAzNTQyZjczMzFjNTgwMDdhM2VmOTM4ZDQxZTFjNTVmYzMyOTY0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIEF1ZyAyMDE2IDIzOjQwOjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNlZDogZml4ICJzZWQgbiAoZmx1c2hlcyBwYXR0ZXJuIHNwYWNlLCB0ZXJtaW5hdGVzIGVhcmx5KSIKKyB0ZXN0Y2FzZSBmYWlsdXJlCisKK1RoaXMgcGF0Y2ggZml4ICJzZWQgbiAoZmx1c2hlcyBwYXR0ZXJuIHNwYWNlLCB0ZXJtaW5hdGVzIGVhcmx5KSIKK3Rlc3RjYXNlIGZhaWx1cmUuIFdlIGNhbiBzZWUgaXQgYXQ6CisKKwlodHRwczovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9NzZkNzIzNzZlMDI0NGE1Y2FmZDQ4ODBjZGM2MjNlMzdkODZhNzVlNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CistLS0KKyBlZGl0b3JzL3NlZC5jICAgICAgIHwgMTkgKysrKysrKysrKy0tLS0tLS0tLQorIHRlc3RzdWl0ZS9zZWQudGVzdHMgfCAgNiArLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZWRpdG9ycy9zZWQuYyBiL2VkaXRvcnMvc2VkLmMKK2luZGV4IDdiYmY4MjAuLjI1OWMzOWMgMTAwNjQ0CistLS0gYS9lZGl0b3JzL3NlZC5jCisrKysgYi9lZGl0b3JzL3NlZC5jCitAQCAtMTI3NCwxNiArMTI3NCwxNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZpbGVzKHZvaWQpCisgCQljYXNlICduJzoKKyAJCQlpZiAoIUcuYmVfcXVpZXQpCisgCQkJCXNlZF9wdXRzKHBhdHRlcm5fc3BhY2UsIGxhc3RfZ2V0c19jaGFyKTsKKy0JCQlpZiAobmV4dF9saW5lKSB7CistCQkJCWZyZWUocGF0dGVybl9zcGFjZSk7CistCQkJCXBhdHRlcm5fc3BhY2UgPSBuZXh0X2xpbmU7CistCQkJCWxhc3RfZ2V0c19jaGFyID0gbmV4dF9nZXRzX2NoYXI7CistCQkJCW5leHRfbGluZSA9IGdldF9uZXh0X2xpbmUoJm5leHRfZ2V0c19jaGFyLCAmbGFzdF9wdXRzX2NoYXIsIGxhc3RfZ2V0c19jaGFyKTsKKy0JCQkJc3Vic3RpdHV0ZWQgPSAwOworLQkJCQlsaW5lbnVtKys7CistCQkJCWJyZWFrOworKwkJCWlmIChuZXh0X2xpbmUgPT0gTlVMTCkgeworKwkJCQkvKiBJZiBubyBuZXh0IGxpbmUsIGp1bXAgdG8gZW5kIG9mIHNjcmlwdCBhbmQgZXhpdC4gKi8KKysJCQkJZ290byBkaXNjYXJkX2xpbmU7CisgCQkJfQorLQkJCS8qIGZhbGwgdGhyb3VnaCAqLworKwkJCWZyZWUocGF0dGVybl9zcGFjZSk7CisrCQkJcGF0dGVybl9zcGFjZSA9IG5leHRfbGluZTsKKysJCQlsYXN0X2dldHNfY2hhciA9IG5leHRfZ2V0c19jaGFyOworKwkJCW5leHRfbGluZSA9IGdldF9uZXh0X2xpbmUoJm5leHRfZ2V0c19jaGFyLCAmbGFzdF9wdXRzX2NoYXIsIGxhc3RfZ2V0c19jaGFyKTsKKysJCQlzdWJzdGl0dXRlZCA9IDA7CisrCQkJbGluZW51bSsrOworKwkJCWJyZWFrOworIAorIAkJLyogUXVpdC4gIEVuZCBvZiBzY3JpcHQsIGVuZCBvZiBpbnB1dC4gKi8KKyAJCWNhc2UgJ3EnOgorZGlmZiAtLWdpdCBhL3Rlc3RzdWl0ZS9zZWQudGVzdHMgYi90ZXN0c3VpdGUvc2VkLnRlc3RzCitpbmRleCAzNDQ3OWU1Li45NmZmN2E1IDEwMDc1NQorLS0tIGEvdGVzdHN1aXRlL3NlZC50ZXN0cworKysrIGIvdGVzdHN1aXRlL3NlZC50ZXN0cworQEAgLTczLDEzICs3Myw5IEBAIHRlc3RpbmcgInNlZCB0ICh0ZXN0L2JyYW5jaCBjbGVhcnMgdGVzdCBiaXQpIiAic2VkIC1lICdzL2EvYi87Omxvb3A7dCBsb29wJyIgXAorIHRlc3RpbmcgInNlZCBUICghdGVzdC9icmFuY2gpIiAic2VkIC1lICdzL2EvMS87VCBub3RvbmU7cDs6IG5vdG9uZTtwJyIgXAorIAkiMVxuMVxuMVxuYlxuYlxuY1xuY1xuIiAiIiAiYVxuYlxuY1xuIgorIAorLXRlc3QgeCIkU0tJUF9LTk9XTl9CVUdTIiA9IHgiIiAmJiB7CistIyBOb3JtYWwgc2VkIGVuZC1vZi1zY3JpcHQgZG9lc24ndCBwcmludCAiYyIgYmVjYXVzZSBuIGZsdXNoZWQgdGhlIHBhdHRlcm4KKy0jIHNwYWNlLiAgSWYgbiBoaXRzIEVPRiwgcGF0dGVybiBzcGFjZSBpcyBlbXB0eSB3aGVuIHNjcmlwdCBlbmRzLgorLSMgUXVlcnk6IGhvdyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aCBubyBuZXdsaW5lIGF0IEVPRj8KKyB0ZXN0aW5nICJzZWQgbiAoZmx1c2hlcyBwYXR0ZXJuIHNwYWNlLCB0ZXJtaW5hdGVzIGVhcmx5KSIgInNlZCAtZSAnbjtwJyIgXAorIAkiYVxuYlxuYlxuY1xuIiAiIiAiYVxuYlxuY1xuIgorLX0KKysKKyAjIG5vbi1HTlUgc2VkOiBOIGRvZXMgX25vdF8gZmx1c2ggcGF0dGVybiBzcGFjZSwgdGhlcmVmb3JlIGMgaXMgZWF0ZW4gQCBzY3JpcHQgZW5kCisgIyBHTlUgc2VkOiBOIGZsdXNoZXMgcGF0dGVybiBzcGFjZSwgdGhlcmVmb3JlIGMgaXMgcHJpbnRlZCB0b28gQCBzY3JpcHQgZW5kCisgdGVzdGluZyAic2VkIE4gKGZsdXNoZXMgcGF0dGVybiBzcGFjZSAoR05VIGJlaGF2aW9yKSkiICJzZWQgLWUgJ047cCciIFwKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9DVkUtMjAxNi0yMTQ3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9DVkUtMjAxNi0yMTQ3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Y2FlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L0NWRS0yMDE2LTIxNDcucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSBkNDc0ZmZjNjgyOTBlMGE4MzY1MWM0NDMyZWVhYmZhNjJjZDUxZTg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTAgTWFyIDIwMTYgMTE6NDc6NTggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdWRoY3A6IGZpeCBhIFNFR1Ygb24gbWFsZm9ybWVkIFJGQzEwMzUtZW5jb2RlZCBkb21haW4gbmFtZQorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitDVkU6IENWRS0yMDE2LTIxNDcKKworaHR0cHM6Ly9naXQuYnVzeWJveC5uZXQvYnVzeWJveC9jb21taXQvP2lkPWQ0NzRmZmMKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCistLS0KKyBuZXR3b3JraW5nL3VkaGNwL2RvbWFpbl9jb2RlYy5jIHwgMTMgKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBidXN5Ym94LTEuMjMuMi9uZXR3b3JraW5nL3VkaGNwL2RvbWFpbl9jb2RlYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIzLjIub3JpZy9uZXR3b3JraW5nL3VkaGNwL2RvbWFpbl9jb2RlYy5jCisrKysgYnVzeWJveC0xLjIzLjIvbmV0d29ya2luZy91ZGhjcC9kb21haW5fY29kZWMuYworQEAgLTYzLDExICs2MywxMCBAQCBjaGFyKiBGQVNUX0ZVTkMgZG5hbWVfZGVjKGNvbnN0IHVpbnQ4X3QKKyAJCQkJaWYgKGNydHBvcyArICpjICsgMSA+IGNsZW4pIC8qIGxhYmVsIHRvbyBsb25nPyBhYm9ydCAqLworIAkJCQkJcmV0dXJuIE5VTEw7CisgCQkJCWlmIChkc3QpCistCQkJCQltZW1jcHkoZHN0ICsgbGVuLCBjICsgMSwgKmMpOworKwkJCQkJLyogXDNjb20gLS0tPiAiY29tLiIgKi8KKysJCQkJCSgoY2hhciopbWVtcGNweShkc3QgKyBsZW4sIGMgKyAxLCAqYykpWzBdID0gJy4nOworIAkJCQlsZW4gKz0gKmMgKyAxOworIAkJCQljcnRwb3MgKz0gKmMgKyAxOworLQkJCQlpZiAoZHN0KQorLQkJCQkJZHN0W2xlbiAtIDFdID0gJy4nOworIAkJCX0gZWxzZSB7CisgCQkJCS8qIE5VTDogZW5kIG9mIGN1cnJlbnQgZG9tYWluIG5hbWUgKi8KKyAJCQkJaWYgKHJldHBvcyA9PSAwKSB7CitAQCAtNzgsNyArNzcsMTAgQEAgY2hhciogRkFTVF9GVU5DIGRuYW1lX2RlYyhjb25zdCB1aW50OF90CisgCQkJCQljcnRwb3MgPSByZXRwb3M7CisgCQkJCQlyZXRwb3MgPSBkZXB0aCA9IDA7CisgCQkJCX0KKy0JCQkJaWYgKGRzdCkKKysJCQkJaWYgKGRzdCAmJiBsZW4gIT0gMCkKKysJCQkJCS8qIFw0aG9zdFwzY29tXDBcNGhvc3QgYW5kIHdlIGFyZSBhdCBcMDoKKysJCQkJCSAqIFwzY29tIHdhcyBjb252ZXJ0ZWQgdG8gImNvbS4iLCBjaGFuZ2UgZG90IHRvIHNwYWNlLgorKwkJCQkJICovCisgCQkJCQlkc3RbbGVuIC0gMV0gPSAnICc7CisgCQkJfQorIAorQEAgLTIyOCw2ICsyMzAsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWludCBsZW47CisgCXVpbnQ4X3QgKmVuY29kZWQ7CisgCisrICAgICAgICB1aW50OF90IHN0cls2XSA9IHsgMHgwMCwgMHgwMCwgMHgwMiwgMHg2NSwgMHg2NSwgMHgwMCB9OworKyAgICAgICAgcHJpbnRmKCJOVUw6JyVzJ1xuIiwgICBkbmFtZV9kZWMoc3RyLCA2LCAiIikpOworKworICNkZWZpbmUgRE5BTUVfREVDKGVuY29kZWQscHJlKSBkbmFtZV9kZWMoKHVpbnQ4X3QqKShlbmNvZGVkKSwgc2l6ZW9mKGVuY29kZWQpLCAocHJlKSkKKyAJcHJpbnRmKCInJXMnXG4iLCAgICAgICBETkFNRV9ERUMoIlw0aG9zdFwzY29tXDAiLCAidGVzdDE6IikpOworIAlwcmludGYoInRlc3QyOiclcydcbiIsIEROQU1FX0RFQygiXDRob3N0XDNjb21cMFw0aG9zdFwzY29tXDAiLCAiIikpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9DVkUtMjAxNi0yMTQ3XzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L0NWRS0yMDE2LTIxNDdfMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDczZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9DVkUtMjAxNi0yMTQ3XzIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSAxYjdjMTczOTFkZTY2NTAyZGQ3YTk3Yzg2NmUwYTMzNjgxZWRiYjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTEgTWFyIDIwMTYgMDA6MjY6NTggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdWRoY3BjOiBmaXggYSB3YXJuaW5nIGluIGRlYnVnIGNvZGUKKworU2lnbmVkLW9mZi1ieTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KK1Vwc3RlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNi0yMTQ3IHJlZ3Jlc3Npb24gZml4CisKK2h0dHBzOi8vZ2l0LmJ1c3lib3gubmV0L2J1c3lib3gvY29tbWl0Lz9pZD0xYjdjMTcKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKKy0tLQorIG5ldHdvcmtpbmcvdWRoY3AvZG9tYWluX2NvZGVjLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL25ldHdvcmtpbmcvdWRoY3AvZG9tYWluX2NvZGVjLmMgYi9uZXR3b3JraW5nL3VkaGNwL2RvbWFpbl9jb2RlYy5jCitpbmRleCBjZWUzMWYxLi41YTkyM2NjIDEwMDY0NAorLS0tIGEvbmV0d29ya2luZy91ZGhjcC9kb21haW5fY29kZWMuYworKysrIGIvbmV0d29ya2luZy91ZGhjcC9kb21haW5fY29kZWMuYworQEAgLTcsNiArNyw3IEBACisgICogTGljZW5zZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIsIHNlZSBmaWxlIExJQ0VOU0UgaW4gdGhpcyBzb3VyY2UgdHJlZS4KKyAgKi8KKyAjaWZkZWYgRE5TX0NPTVBSX1RFU1RJTkcKKysjIGRlZmluZSBfR05VX1NPVVJDRQorICMgZGVmaW5lIEZBU1RfRlVOQyAvKiBub3RoaW5nICovCisgIyBkZWZpbmUgeG1hbGxvYyBtYWxsb2MKKyAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L0NWRS0yMDE2LTIxNDgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L0NWRS0yMDE2LTIxNDgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwNGE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvQ1ZFLTIwMTYtMjE0OC5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDM1MmY3OWFjYmQ3NTljMTQzOTllMzliYWVmMjFmYzRmZmUxODBhYzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorRGF0ZTogRnJpLCAyNiBGZWIgMjAxNiAxNTo1NDo1NiArMDEwMAorU3ViamVjdDogW1BBVENIXSB1ZGhjcGM6IGZpeCBPUFRJT05fNlJEIHBhcnNpbmcgKGNvdWxkIG92ZXJmbG93IGl0cyBtYWxsb2NlZAorIGJ1ZmZlcikKKworU2lnbmVkLW9mZi1ieTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNi0yMTQ4CitodHRwczovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9MzUyZjc5CisKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCistLS0KKyBuZXR3b3JraW5nL3VkaGNwL2NvbW1vbi5jIHwgMTUgKysrKysrKysrKysrKy0tCisgbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jICB8ICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBidXN5Ym94LTEuMjMuMi9uZXR3b3JraW5nL3VkaGNwL2NvbW1vbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIzLjIub3JpZy9uZXR3b3JraW5nL3VkaGNwL2NvbW1vbi5jCisrKysgYnVzeWJveC0xLjIzLjIvbmV0d29ya2luZy91ZGhjcC9jb21tb24uYworQEAgLTE0Miw3ICsxNDIsNyBAQCBjb25zdCBjaGFyIGRoY3Bfb3B0aW9uX3N0cmluZ3NbXSBBTElHTjEKKyAgKiB1ZGhjcF9zdHIyb3B0c2V0OiB0byBkZXRlcm1pbmUgaG93IG1hbnkgYnl0ZXMgdG8gYWxsb2NhdGUuCisgICogeG1hbGxvY19vcHRuYW1lX29wdHZhbDogdG8gZXN0aW1hdGUgc3RyaW5nIGxlbmd0aAorICAqIGZyb20gYmluYXJ5IG9wdGlvbiBsZW5ndGg6IChvcHRpb25bTEVOXSAvIGRoY3Bfb3B0aW9uX2xlbmd0aHNbb3B0X3R5cGVdKQorLSAqIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMsIG11bHRpcGx5IGluIGJ5IG9uZSBlbGVtZW50J3Mgc3RyaW5nIHdpZHRoCisrICogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cywgbXVsdGlwbHkgaXQgYnkgb25lIGVsZW1lbnQncyBzdHJpbmcgd2lkdGgKKyAgKiAobGVuX29mX29wdGlvbl9hc19zdHJpbmdbb3B0X3R5cGVdKSBhbmQgeW91IGtub3cgaG93IHdpZGUgc3RyaW5nIHlvdSBuZWVkLgorICAqLworIGNvbnN0IHVpbnQ4X3QgZGhjcF9vcHRpb25fbGVuZ3Roc1tdIEFMSUdOMSA9IHsKK0BAIC0xNjIsNyArMTYyLDE4IEBAIGNvbnN0IHVpbnQ4X3QgZGhjcF9vcHRpb25fbGVuZ3Roc1tdIEFMSUcKKyAJW09QVElPTl9TMzJdID0gICAgIDQsCisgCS8qIEp1c3QgbGlrZSBPUFRJT05fU1RSSU5HLCB3ZSB1c2UgbWluaW11bSBsZW5ndGggaGVyZSAqLworIAlbT1BUSU9OX1NUQVRJQ19ST1VURVNdID0gNSwKKy0JW09QVElPTl82UkRdID0gICAgMjIsICAvKiBpZ25vcmVkIGJ5IHVkaGNwX3N0cjJvcHRzZXQgKi8KKysJW09QVElPTl82UkRdID0gICAgMTIsICAvKiBpZ25vcmVkIGJ5IHVkaGNwX3N0cjJvcHRzZXQgKi8KKysJLyogVGhlIGFib3ZlIHZhbHVlIHdhcyBjaG9zZW4gYXMgZm9sbG93czoKKysJICogbGVuX29mX29wdGlvbl9hc19zdHJpbmdbXSBmb3IgdGhpcyBvcHRpb24gaXMgPjYwOiBpdCdzIGEgc3RyaW5nIG9mIHRoZSBmb3JtCisrCSAqICIzMiAxMjggZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIDI1NS4yNTUuMjU1LjI1NSAiLgorKwkgKiBFYWNoIGFkZGl0aW9uYWwgaXB2NCBhZGRyZXNzIHRha2VzIDQgYnl0ZXMgaW4gYmluYXJ5IG9wdGlvbiBhbmQgYXBwZW5kcworKwkgKiBhbm90aGVyICIyNTUuMjU1LjI1NS4yNTUgIiAxNi1ieXRlIHN0cmluZy4gV2UgY2FuIHNldCBbT1BUSU9OXzZSRF0gPSA0CisrCSAqIGJ1dCB0aGlzIHNldmVyZWx5IG92ZXJlc3RpbWF0ZXMgc3RyaW5nIGxlbmd0aDogaW5zdGVhZCBvZiAxNiBieXRlcywKKysJICogaXQgYWRkcyA+NjAgZm9yIGV2ZXJ5IDQgYnl0ZXMgaW4gYmluYXJ5IG9wdGlvbi4KKysJICogV2UgY2hlYXQgYW5kIGRlY2xhcmUgaGVyZSB0aGF0IG9wdGlvbiBpcyBpbiB1bml0cyBvZiAxMiBieXRlcy4KKysJICogVGhpcyBhZGRzIG1vcmUgdGhhbiA2MCBieXRlcyBmb3IgZXZlcnkgdGhyZWUgaXB2NCBhZGRyZXNzZXMgLSBtb3JlIHRoYW4gZW5vdWdoLgorKwkgKiAoRXZlbiAxNiBpbnN0ZWFkIG9mIDEyIHNob3VsZCB3b3JrLCBidXQgbGV0J3MgYmUgcGFyYW5vaWQpLgorKwkgKi8KKyB9OworIAorIAorSW5kZXg6IGJ1c3lib3gtMS4yMy4yL25ldHdvcmtpbmcvdWRoY3AvZGhjcGMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4yMy4yLm9yaWcvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCisrKysgYnVzeWJveC0xLjIzLjIvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCitAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGxlbl9vZl9vcHRpb25fYXNfc3QKKyAJW09QVElPTl9JUCAgICAgICAgICAgICAgXSA9IHNpemVvZigiMjU1LjI1NS4yNTUuMjU1ICIpLAorIAlbT1BUSU9OX0lQX1BBSVIgICAgICAgICBdID0gc2l6ZW9mKCIyNTUuMjU1LjI1NS4yNTUgIikgKiAyLAorIAlbT1BUSU9OX1NUQVRJQ19ST1VURVMgICBdID0gc2l6ZW9mKCIyNTUuMjU1LjI1NS4yNTUvMzIgMjU1LjI1NS4yNTUuMjU1ICIpLAorLQlbT1BUSU9OXzZSRCAgICAgICAgICAgICBdID0gc2l6ZW9mKCIzMiAxMjggZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIDI1NS4yNTUuMjU1LjI1NSAiKSwKKysJW09QVElPTl82UkQgICAgICAgICAgICAgXSA9IHNpemVvZigiMTMyIDEyOCBmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYgMjU1LjI1NS4yNTUuMjU1ICIpLAorIAlbT1BUSU9OX1NUUklORyAgICAgICAgICBdID0gMSwKKyAJW09QVElPTl9TVFJJTkdfSE9TVCAgICAgXSA9IDEsCisgI2lmIEVOQUJMRV9GRUFUVVJFX1VESENQX1JGQzMzOTcKK0BAIC0yMTQsNyArMjE0LDcgQEAgc3RhdGljIE5PSU5MSU5FIGNoYXIgKnhtYWxsb2Nfb3B0bmFtZV9vcAorIAl0eXBlID0gb3B0ZmxhZy0+ZmxhZ3MgJiBPUFRJT05fVFlQRV9NQVNLOworIAlvcHRsZW4gPSBkaGNwX29wdGlvbl9sZW5ndGhzW3R5cGVdOworIAl1cHBlcl9sZW5ndGggPSBsZW5fb2Zfb3B0aW9uX2FzX3N0cmluZ1t0eXBlXQorLQkJKiAoKHVuc2lnbmVkKShsZW4gKyBvcHRsZW4gLSAxKSAvICh1bnNpZ25lZClvcHRsZW4pOworKwkJKiAoKHVuc2lnbmVkKShsZW4gKyBvcHRsZW4pIC8gKHVuc2lnbmVkKW9wdGxlbik7CisgCisgCWRlc3QgPSByZXQgPSB4bWFsbG9jKHVwcGVyX2xlbmd0aCArIHN0cmxlbihvcHRfbmFtZSkgKyAyKTsKKyAJZGVzdCArPSBzcHJpbnRmKHJldCwgIiVzPSIsIG9wdF9uYW1lKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1rYnVpbGQtcmFjZS1maXgtY29tbWl0LWQ4ZTYxYmIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gta2J1aWxkLXJhY2UtZml4LWNvbW1pdC1kOGU2MWJiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzAyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gta2J1aWxkLXJhY2UtZml4LWNvbW1pdC1kOGU2MWJiLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUGF0Y2ggYWRkcmVzc2luZyBhIHBhcmFsbGVsIG1ha2UgcmFjZSBpbiBCdXN5Ym94CisKKyAgaHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9ZDhlNjFiYmYxM2QwY2YzOGQ0NzcyNTVjZmQ1ZGM3MWM1ZDUxZDU3NQorCitTaWduZWQtb2ZmLWJ5OiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorCitGcm9tIGQ4ZTYxYmJmMTNkMGNmMzhkNDc3MjU1Y2ZkNWRjNzFjNWQ1MWQ1NzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorRGF0ZTogU3VuLCAyMSBBdWcgMjAxNiAyMjowMDoyMCArMDIwMAorU3ViamVjdDogYnVpbGQgc3lzdGVtOiBkaWZmZXJlbnQgZml4IGZvcgorIGluY2x1ZGUvYXBwbGV0X3RhYmxlcy5oL2luY2x1ZGUvTlVNX0FQUExFVFMuaAorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvYXBwbGV0cy9LYnVpbGQuc3JjIGIvYXBwbGV0cy9LYnVpbGQuc3JjCitpbmRleCA1Y2MxODI3Li4zYWVkYmJmIDEwMDY0NAorLS0tIGEvYXBwbGV0cy9LYnVpbGQuc3JjCisrKysgYi9hcHBsZXRzL0tidWlsZC5zcmMKK0BAIC0yOSw3ICsyOSw3IEBAIGFwcGxldHMvYXBwbGV0cy5vOiBpbmNsdWRlL3VzYWdlX2NvbXByZXNzZWQuaCBpbmNsdWRlL2FwcGxldF90YWJsZXMuaAorIAorIGFwcGxldHMvYXBwbGV0X3RhYmxlczogLmNvbmZpZyBpbmNsdWRlL2FwcGxldHMuaAorIGFwcGxldHMvdXNhZ2U6ICAgICAgICAgLmNvbmZpZyBpbmNsdWRlL2FwcGxldHMuaAorLWFwcGxldHMvdXNhZ2VfcG9kOiAgICAgLmNvbmZpZyBpbmNsdWRlL2FwcGxldHMuaCBpbmNsdWRlL2FwcGxldF90YWJsZXMuaCBpbmNsdWRlL05VTV9BUFBMRVRTLmgKKythcHBsZXRzL3VzYWdlX3BvZDogICAgIC5jb25maWcgaW5jbHVkZS9hcHBsZXRzLmggaW5jbHVkZS9hcHBsZXRfdGFibGVzLmgKKyAKKyBxdWlldF9jbWRfZ2VuX3VzYWdlX2NvbXByZXNzZWQgPSBHRU4gICAgIGluY2x1ZGUvdXNhZ2VfY29tcHJlc3NlZC5oCisgICAgICAgY21kX2dlbl91c2FnZV9jb21wcmVzc2VkID0gJChzcmN0cmVlX3NsYXNoKWFwcGxldHMvdXNhZ2VfY29tcHJlc3NlZCBpbmNsdWRlL3VzYWdlX2NvbXByZXNzZWQuaCBhcHBsZXRzCitAQCAtMzcsOCArMzcsMjEgQEAgcXVpZXRfY21kX2dlbl91c2FnZV9jb21wcmVzc2VkID0gR0VOICAgICBpbmNsdWRlL3VzYWdlX2NvbXByZXNzZWQuaAorIGluY2x1ZGUvdXNhZ2VfY29tcHJlc3NlZC5oOiBhcHBsZXRzL3VzYWdlICQoc3JjdHJlZV9zbGFzaClhcHBsZXRzL3VzYWdlX2NvbXByZXNzZWQKKyAJJChjYWxsIGNtZCxnZW5fdXNhZ2VfY29tcHJlc3NlZCkKKyAKKy1xdWlldF9jbWRfZ2VuX2FwcGxldF90YWJsZXMgPSBHRU4gICAgIGluY2x1ZGUvYXBwbGV0X3RhYmxlcy5oCisrcXVpZXRfY21kX2dlbl9hcHBsZXRfdGFibGVzID0gR0VOICAgICBpbmNsdWRlL2FwcGxldF90YWJsZXMuaCBpbmNsdWRlL05VTV9BUFBMRVRTLmgKKyAgICAgICBjbWRfZ2VuX2FwcGxldF90YWJsZXMgPSBhcHBsZXRzL2FwcGxldF90YWJsZXMgaW5jbHVkZS9hcHBsZXRfdGFibGVzLmggaW5jbHVkZS9OVU1fQVBQTEVUUy5oCisgCistaW5jbHVkZS9hcHBsZXRfdGFibGVzLmggaW5jbHVkZS9OVU1fQVBQTEVUUy5oOiBhcHBsZXRzL2FwcGxldF90YWJsZXMKKytpbmNsdWRlL05VTV9BUFBMRVRTLmg6IGFwcGxldHMvYXBwbGV0X3RhYmxlcworKwkkKGNhbGwgY21kLGdlbl9hcHBsZXRfdGFibGVzKQorKworKyMgSW4gZmFjdCwgaW5jbHVkZS9hcHBsZXRfdGFibGVzLmggZGVwZW5kcyBvbmx5IG9uIGFwcGxldHMvYXBwbGV0X3RhYmxlcywKKysjIGFuZCBpcyBnZW5lcmF0ZWQgYnkgaXQuIEJ1dCBzcGVjaWZ5aW5nIG9ubHkgaXQgY2FuIHJ1bgorKyMgYXBwbGV0cy9hcHBsZXRfdGFibGVzIHR3aWNlLCBwb3NzaWJseSBpbiBwYXJhbGxlbC4KKysjIFdlIHNheSB0aGF0IGl0IGFsc28gbmVlZHMgTlVNX0FQUExFVFMuaAorKyMKKysjIFVuZm9ydHVuYXRlbHksIHdlIG5lZWQgdG8gbGlzdCB0aGUgc2FtZSBjb21tYW5kLAorKyMgYW5kIGl0IGNhbiBiZSBleGVjdXRlZCB0d2ljZSAoc2VxdWVudGlhbGx5KS4KKysjIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byBub3QgbGlzdCBhbnkgY29tbWFuZCwKKysjIGFuZCB0aGVuIGlmIGluY2x1ZGUvYXBwbGV0X3RhYmxlcy5oIGlzIGRlbGV0ZWQsIGl0IHdvbid0IGJlIHJlYnVpbHQuCisrIworK2luY2x1ZGUvYXBwbGV0X3RhYmxlcy5oOiBpbmNsdWRlL05VTV9BUFBMRVRTLmggYXBwbGV0cy9hcHBsZXRfdGFibGVzCisgCSQoY2FsbCBjbWQsZ2VuX2FwcGxldF90YWJsZXMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2NvbW1pdC1hcHBsZXRfdGFibGVzLWZpeC1jb21taXQtMGRkZGJjMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvY29tbWl0LWFwcGxldF90YWJsZXMtZml4LWNvbW1pdC0wZGRkYmMxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmODBhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2NvbW1pdC1hcHBsZXRfdGFibGVzLWZpeC1jb21taXQtMGRkZGJjMS5wYXRjaApAQCAtMCwwICsxLDYxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1BhdGNoIGFkZHJlc3NpbmcgYSBwYXJhbGxlbCBtYWtlIHJhY2UgaW4gQnVzeWJveAorCisgIGh0dHA6Ly9naXQuYnVzeWJveC5uZXQvYnVzeWJveC9jb21taXQvP2lkPTBkZGRiYzFhNTk3OTVhNzc2NzlkOGM1ZWY0OGEyNzk1Y2I0NzA1NjMKKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KKworRnJvbSAwZGRkYmMxYTU5Nzk1YTc3Njc5ZDhjNWVmNDhhMjc5NWNiNDcwNTYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjMgQXVnIDIwMTYgMjA6MjE6MzYgKzAyMDAKK1N1YmplY3Q6IGJ1aWxkIHN5c3RlbTogYWx3YXlzIHJld3JpdGUgTlVNX0FQUExFVFMuaAorCitDb25kaXRpb25hbCByZXdyaXRlIGNhbiBrZWVwIE5VTV9BUFBMRVRTLmggbXRpbWUgb2xkLAordGhpcyBjYXVzZXMgbWFrZSB0byB0cnkgdG8gcmVnZW5lcmF0ZSBpdCBhdCBldmVyeSBpbnZvY2F0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvYXBwbGV0cy9hcHBsZXRfdGFibGVzLmMgYi9hcHBsZXRzL2FwcGxldF90YWJsZXMuYworaW5kZXggODQwMWExNS4uZWY5MTFhNCAxMDA2NDQKKy0tLSBhL2FwcGxldHMvYXBwbGV0X3RhYmxlcy5jCisrKysgYi9hcHBsZXRzL2FwcGxldF90YWJsZXMuYworQEAgLTE5MiwyNyArMTkyLDI4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJcHJpbnRmKCJ9O1xuIik7CisgI2VuZGlmCisgCS8vcHJpbnRmKCIjZW5kaWYgLyogU0tJUF9kZWZpbml0aW9ucyAqL1xuIik7CisrCisgLy8JcHJpbnRmKCJcbiIpOworIC8vCXByaW50ZigiI2RlZmluZSBNQVhfQVBQTEVUX05BTUVfTEVOICV1XG4iLCBNQVhfQVBQTEVUX05BTUVfTEVOKTsKKyAKKyAJaWYgKGFyZ3ZbMl0pIHsKKy0JCWNoYXIgbGluZV9vbGRbODBdOworLQkJY2hhciBsaW5lX25ld1s4MF07CisgCQlGSUxFICpmcDsKKysJCWNoYXIgbGluZV9uZXdbODBdOworKy8vCQljaGFyIGxpbmVfb2xkWzgwXTsKKyAKKy0JCWxpbmVfb2xkWzBdID0gMDsKKy0JCWZwID0gZm9wZW4oYXJndlsyXSwgInIiKTsKKy0JCWlmIChmcCkgeworLQkJCWZnZXRzKGxpbmVfb2xkLCBzaXplb2YobGluZV9vbGQpLCBmcCk7CistCQkJZmNsb3NlKGZwKTsKKy0JCX0KKyAJCXNwcmludGYobGluZV9uZXcsICIjZGVmaW5lIE5VTV9BUFBMRVRTICV1XG4iLCBOVU1fQVBQTEVUUyk7CistCQlpZiAoc3RyY21wKGxpbmVfb2xkLCBsaW5lX25ldykgIT0gMCkgeworKy8vCQlsaW5lX29sZFswXSA9IDA7CisrLy8JCWZwID0gZm9wZW4oYXJndlsyXSwgInIiKTsKKysvLwkJaWYgKGZwKSB7CisrLy8JCQlmZ2V0cyhsaW5lX29sZCwgc2l6ZW9mKGxpbmVfb2xkKSwgZnApOworKy8vCQkJZmNsb3NlKGZwKTsKKysvLwkJfQorKy8vCQlpZiAoc3RyY21wKGxpbmVfb2xkLCBsaW5lX25ldykgIT0gMCkgeworIAkJCWZwID0gZm9wZW4oYXJndlsyXSwgInciKTsKKyAJCQlpZiAoIWZwKQorIAkJCQlyZXR1cm4gMTsKKyAJCQlmcHV0cyhsaW5lX25ldywgZnApOworLQkJfQorKy8vCQl9CisgCX0KKyAKKyAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2RlZmNvbmZpZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCmluZGV4IGZmZWE2YmUuLmMwNDU5ZDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCkBAIC0xMzUsNyArMTM1LDcgQEAKIENPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0JaMj15CiBDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19HWj15CiBDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19aPXkKLUNPTkZJR19BUj15CisjIENPTkZJR19BUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFUVVJFX0FSX0xPTkdfRklMRU5BTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQVRVUkVfQVJfQ1JFQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOQ09NUFJFU1MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9pcF9maXhfcHJvYmxlbV9vbl9taXBzNjRfbjY0X2JpZ19lbmRpYW5fbXVzbF9zeXN0ZW1zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9pcF9maXhfcHJvYmxlbV9vbl9taXBzNjRfbjY0X2JpZ19lbmRpYW5fbXVzbF9zeXN0ZW1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzU2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2lwX2ZpeF9wcm9ibGVtX29uX21pcHM2NF9uNjRfYmlnX2VuZGlhbl9tdXNsX3N5c3RlbXMucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorRnJvbSA0YWIzNzJkNDlhNmU4MmIwYmYwOTdkZWRiOTZkMjYzMzBjNWYyZDVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU3phYm9sY3MgTmFneSA8bnN6QHBvcnQ3MC5uZXQ+CitEYXRlOiBTdW4sIDI0IEFwciAyMDE2IDE3OjM5OjAyICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGlwOiBmaXggcHJvYmxlbSBvbiBtaXBzNjQgbjY0IGJpZyBlbmRpYW4gbXVzbCBzeXN0ZW1zCisKK1VzZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBmb3Igc3RydWN0IG1zZ2hkci4KK1RoZSBzdHJ1Y3QgbGF5b3V0IGlzIG5vbi1wb3J0YWJsZSBhbmQgbXVzbCBsaWJjIGRvZXMgbm90IG1hdGNoIHdoYXQgYnVzeWJveCBleHBlY3RzLgorCitTaWduZWQtb2ZmLWJ5OiBTemFib2xjcyBOYWd5IDxuc3pAcG9ydDcwLm5ldD4KK1Rlc3RlZC1ieTogV2FsZGVtYXIgQnJvZGtvcmIgPHdieEBvcGVuYWRrLm9yZz4KK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworaHR0cHM6Ly9naXQuYnVzeWJveC5uZXQvYnVzeWJveC9jb21taXQvP2lkPTRhYjM3MmQ0OWE2ZTgyYjBiZjA5N2RlZGI5NmQyNjMzMGM1ZjJkNWYKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKKy0tLQorIG5ldHdvcmtpbmcvbGliaXByb3V0ZS9saWJuZXRsaW5rLmMgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbmV0d29ya2luZy9saWJpcHJvdXRlL2xpYm5ldGxpbmsuYyBiL25ldHdvcmtpbmcvbGliaXByb3V0ZS9saWJuZXRsaW5rLmMKK2luZGV4IGM3NTMzYTQuLmNiYjVkYWYgMTAwNjQ0CistLS0gYS9uZXR3b3JraW5nL2xpYmlwcm91dGUvbGlibmV0bGluay5jCisrKysgYi9uZXR3b3JraW5nL2xpYmlwcm91dGUvbGlibmV0bGluay5jCitAQCAtNzEsMTEgKzcxLDE1IEBAIGludCBGQVNUX0ZVTkMgcnRubF9kdW1wX3JlcXVlc3Qoc3RydWN0IHJ0bmxfaGFuZGxlICpydGgsIGludCB0eXBlLCB2b2lkICpyZXEsIGluCisgCXN0cnVjdCBubG1zZ2hkciBubGg7CisgCXN0cnVjdCBzb2NrYWRkcl9ubCBubGFkZHI7CisgCXN0cnVjdCBpb3ZlYyBpb3ZbMl0gPSB7IHsgJm5saCwgc2l6ZW9mKG5saCkgfSwgeyByZXEsIGxlbiB9IH07CisrCS8qIFVzZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgc3RydWN0IGxheW91dCBpcyBub24tcG9ydGFibGUgKi8KKyAJc3RydWN0IG1zZ2hkciBtc2cgPSB7CistCQkodm9pZCopJm5sYWRkciwgc2l6ZW9mKG5sYWRkciksCistCQlpb3YsICAyLAorLQkJTlVMTCwgMCwKKy0JCTAKKysJCS5tc2dfbmFtZSA9ICh2b2lkKikmbmxhZGRyLAorKwkJLm1zZ19uYW1lbGVuID0gc2l6ZW9mKG5sYWRkciksCisrCQkubXNnX2lvdiA9IGlvdiwKKysJCS5tc2dfaW92bGVuID0gMiwKKysJCS5tc2dfY29udHJvbCA9IE5VTEwsCisrCQkubXNnX2NvbnRyb2xsZW4gPSAwLAorKwkJLm1zZ19mbGFncyA9IDAKKyAJfTsKKyAKKyAJbWVtc2V0KCZubGFkZHIsIDAsIHNpemVvZihubGFkZHIpKTsKK0BAIC0xMDQsMTIgKzEwOCwxNSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9maWx0ZXIoc3RydWN0IHJ0bmxfaGFuZGxlICpydGgsCisgCXdoaWxlICgxKSB7CisgCQlpbnQgc3RhdHVzOworIAkJc3RydWN0IG5sbXNnaGRyICpoOworLQorKwkJLyogVXNlIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzdHJ1Y3QgbGF5b3V0IGlzIG5vbi1wb3J0YWJsZSAqLworIAkJc3RydWN0IG1zZ2hkciBtc2cgPSB7CistCQkJKHZvaWQqKSZubGFkZHIsIHNpemVvZihubGFkZHIpLAorLQkJCSZpb3YsIDEsCistCQkJTlVMTCwgMCwKKy0JCQkwCisrCQkJLm1zZ19uYW1lID0gKHZvaWQqKSZubGFkZHIsCisrCQkJLm1zZ19uYW1lbGVuID0gc2l6ZW9mKG5sYWRkciksCisrCQkJLm1zZ19pb3YgPSAmaW92LAorKwkJCS5tc2dfaW92bGVuID0gMSwKKysJCQkubXNnX2NvbnRyb2wgPSBOVUxMLAorKwkJCS5tc2dfY29udHJvbGxlbiA9IDAsCisrCQkJLm1zZ19mbGFncyA9IDAKKyAJCX07CisgCisgCQlzdGF0dXMgPSByZWN2bXNnKHJ0aC0+ZmQsICZtc2csIDApOworQEAgLTIxMSwxMSArMjE4LDE1IEBAIGludCBGQVNUX0ZVTkMgcnRubF90YWxrKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRubCwgc3RydWN0IG5sbXNnaGRyICpuLAorIAlzdHJ1Y3Qgc29ja2FkZHJfbmwgbmxhZGRyOworIAlzdHJ1Y3QgaW92ZWMgaW92ID0geyAodm9pZCopbiwgbi0+bmxtc2dfbGVuIH07CisgCWNoYXIgICAqYnVmID0geG1hbGxvYyg4KjEwMjQpOyAvKiBhdm9pZCBiaWcgc3RhY2sgYnVmZmVyICovCisrCS8qIFVzZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgc3RydWN0IGxheW91dCBpcyBub24tcG9ydGFibGUgKi8KKyAJc3RydWN0IG1zZ2hkciBtc2cgPSB7CistCQkodm9pZCopJm5sYWRkciwgc2l6ZW9mKG5sYWRkciksCistCQkmaW92LCAxLAorLQkJTlVMTCwgMCwKKy0JCTAKKysJCS5tc2dfbmFtZSA9ICh2b2lkKikmbmxhZGRyLAorKwkJLm1zZ19uYW1lbGVuID0gc2l6ZW9mKG5sYWRkciksCisrCQkubXNnX2lvdiA9ICZpb3YsCisrCQkubXNnX2lvdmxlbiA9IDEsCisrCQkubXNnX2NvbnRyb2wgPSBOVUxMLAorKwkJLm1zZ19jb250cm9sbGVuID0gMCwKKysJCS5tc2dfZmxhZ3MgPSAwCisgCX07CisgCisgCW1lbXNldCgmbmxhZGRyLCAwLCBzaXplb2YobmxhZGRyKSk7CistLSAKKzIuMy41CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbWFrZWZpbGUtZml4LWJhY2twb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tYWtlZmlsZS1maXgtYmFja3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5ODQyZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbWFrZWZpbGUtZml4LWJhY2twb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOWU1ODIwYTg2Mjc3ODE4YzJmODNjMTFjMmFhNzZkN2YwYTM4MjgzZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CitEYXRlOiBTdW4sIDE0IEF1ZyAyMDE2IDAyOjU0OjI3ICswMjAwCitTdWJqZWN0OiBidWlsZCBzeXN0ZW06IGZpeCBpbmNsdWRlL05VTV9BUFBMRVRTLmggZ2VuZXJhdGlvbgorCitUQkgsIGl0J3MgbW9yZSBsaWtlICJ3b3JrIGFyb3VuZCBteSBiYWQgbWFrZWZpbGUtZnUiIHRoYW4gImZpeCIuLi4KKworU2lnbmVkLW9mZi1ieTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGFwcGxldHMvS2J1aWxkLnNyYyB8IDcgKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL2FwcGxldHMvS2J1aWxkLnNyYyBiL2FwcGxldHMvS2J1aWxkLnNyYworaW5kZXggYjYxMjM5OS4uNWNjMTgyNyAxMDA2NDQKKy0tLSBhL2FwcGxldHMvS2J1aWxkLnNyYworKysrIGIvYXBwbGV0cy9LYnVpbGQuc3JjCitAQCAtMjksNyArMjksNyBAQCBhcHBsZXRzL2FwcGxldHMubzogaW5jbHVkZS91c2FnZV9jb21wcmVzc2VkLmggaW5jbHVkZS9hcHBsZXRfdGFibGVzLmgKKyAKKyBhcHBsZXRzL2FwcGxldF90YWJsZXM6IC5jb25maWcgaW5jbHVkZS9hcHBsZXRzLmgKKyBhcHBsZXRzL3VzYWdlOiAgICAgICAgIC5jb25maWcgaW5jbHVkZS9hcHBsZXRzLmgKKy1hcHBsZXRzL3VzYWdlX3BvZDogICAgIC5jb25maWcgaW5jbHVkZS9hcHBsZXRfdGFibGVzLmggaW5jbHVkZS9hcHBsZXRzLmgKKythcHBsZXRzL3VzYWdlX3BvZDogICAgIC5jb25maWcgaW5jbHVkZS9hcHBsZXRzLmggaW5jbHVkZS9hcHBsZXRfdGFibGVzLmggaW5jbHVkZS9OVU1fQVBQTEVUUy5oCisgCisgcXVpZXRfY21kX2dlbl91c2FnZV9jb21wcmVzc2VkID0gR0VOICAgICBpbmNsdWRlL3VzYWdlX2NvbXByZXNzZWQuaAorICAgICAgIGNtZF9nZW5fdXNhZ2VfY29tcHJlc3NlZCA9ICQoc3JjdHJlZV9zbGFzaClhcHBsZXRzL3VzYWdlX2NvbXByZXNzZWQgaW5jbHVkZS91c2FnZV9jb21wcmVzc2VkLmggYXBwbGV0cworQEAgLTQwLDggKzQwLDUgQEAgaW5jbHVkZS91c2FnZV9jb21wcmVzc2VkLmg6IGFwcGxldHMvdXNhZ2UgJChzcmN0cmVlX3NsYXNoKWFwcGxldHMvdXNhZ2VfY29tcHJlc3MKKyBxdWlldF9jbWRfZ2VuX2FwcGxldF90YWJsZXMgPSBHRU4gICAgIGluY2x1ZGUvYXBwbGV0X3RhYmxlcy5oCisgICAgICAgY21kX2dlbl9hcHBsZXRfdGFibGVzID0gYXBwbGV0cy9hcHBsZXRfdGFibGVzIGluY2x1ZGUvYXBwbGV0X3RhYmxlcy5oIGluY2x1ZGUvTlVNX0FQUExFVFMuaAorIAorLWluY2x1ZGUvYXBwbGV0X3RhYmxlcy5oOiBhcHBsZXRzL2FwcGxldF90YWJsZXMKKy0JJChjYWxsIGNtZCxnZW5fYXBwbGV0X3RhYmxlcykKKy0KKy1pbmNsdWRlL05VTV9BUFBMRVRTLmg6IGFwcGxldHMvYXBwbGV0X3RhYmxlcworK2luY2x1ZGUvYXBwbGV0X3RhYmxlcy5oIGluY2x1ZGUvTlVNX0FQUExFVFMuaDogYXBwbGV0cy9hcHBsZXRfdGFibGVzCisgCSQoY2FsbCBjbWQsZ2VuX2FwcGxldF90YWJsZXMpCistLSAKK2NnaXQgdjAuMTIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tYWtlZmlsZS1saWJiYi1yYWNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tYWtlZmlsZS1saWJiYi1yYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Mjc4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L21ha2VmaWxlLWxpYmJiLXJhY2UucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVGhlcmUgaXMgYSBwb3RlbnRpYWwgcmFjZSB3aGVuIGJ1aWxkaW5nIGxpYmJiLCBhcyBzb21lIGhlYWRlciBmaWxlcyAgCituZWVkZWQgYnkgbGliYmIgYXJlIG5vdCBnZW5lcmF0ZWQgeWV0IChvciBhcmUgYmVpbmcgbW9kaWZpZWQpIGF0IHRoZSB0aW1lCitsaWJiYiBpcyBjb21waWxlZC4KK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgc2NlbmFyaW8gYnkgYnVpbGRpbmcgbGliYmIgYXMgdGhlIGxhc3QgZGlyZWN0b3J5LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KKworSW5kZXg6IGJ1c3lib3gtMS4yNC4xL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNWNmYzc2My4uNjlmMzgzMSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTczOCw5ICs3MzgsMTggQEAgJChzb3J0ICQoYnVzeWJveC1hbGwpKTogJChidXN5Ym94LWRpcnMpIDsKKyAjIEVycm9yIG1lc3NhZ2VzIHN0aWxsIGFwcGVhcnMgaW4gdGhlIG9yaWdpbmFsIGxhbmd1YWdlCisgCisgUEhPTlkgKz0gJChidXN5Ym94LWRpcnMpCistJChidXN5Ym94LWRpcnMpOiBwcmVwYXJlIHNjcmlwdHMKKysKKytsaWJiYi1kaXIgPSAkKGZpbHRlciBsaWJiYiwkKGJ1c3lib3gtZGlycykpCisrYnVzeWJveC1kaXJzMSA9ICQoZmlsdGVyLW91dCBsaWJiYiwkKGJ1c3lib3gtZGlycykpCisrCisrJChidXN5Ym94LWRpcnMxKTogcHJlcGFyZSBzY3JpcHRzCisgCSQoUSkkKE1BS0UpICQoYnVpbGQpPSRACisgCisraWZuZXEgKCQobGliYmItZGlyKSwpCisrJChsaWJiYi1kaXIpOiB8ICQoYnVzeWJveC1kaXJzMSkKKysJJChRKSQoTUFLRSkgJChidWlsZCk9JEAKKytlbmRpZgorKworICMgQnVpbGQgdGhlIGtlcm5lbCByZWxlYXNlIHN0cmluZworICMgVGhlIEtFUk5FTFJFTEVBU0UgaXMgc3RvcmVkIGluIGEgZmlsZSBuYW1lZCAua2VybmVscmVsZWFzZQorICMgdG8gYmUgdXNlZCB3aGVuIGV4ZWN1dGluZyBmb3IgZXhhbXBsZSBtYWtlIGluc3RhbGwgb3IgbWFrZSBtb2R1bGVzX2luc3RhbGwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjI0LjEuYmIKaW5kZXggYmRhYTVhNS4uZGYwZTEzMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjI0LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjI0LjEuYmIKQEAgLTMyLDYgKzMyLDcgQEAKICAgICAgICAgICAgZmlsZTovL2J1c3lib3gtMS4yNC4xLXVuemlwLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2J1c3lib3gtMS4yNC4xLXVuemlwLXJlZ3Jlc3Npb24ucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vYnVzeWJveC0xLjI0LjEtdHJ1bmNhdGUtb3Blbi1tb2RlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZmxvY2stdXBkYXRlLXRoZS1iZWhhdmlvdXItb2YtYy1wYXJhbWV0ZXItdG8tbWF0Y2gtdS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9tb3VudC12aWEtbGFiZWwuY2ZnIFwKICAgICAgICAgICAgZmlsZTovL3NoYTFzdW0uY2ZnIFwKICAgICAgICAgICAgZmlsZTovL3NoYTI1NnN1bS5jZmcgXApAQCAtNDMsNiArNDQsMTUgQEAKICAgICAgICAgICAgZmlsZTovL3JjUyBcCiAgICAgICAgICAgIGZpbGU6Ly9yY0sgXAogICAgICAgICAgICBmaWxlOi8vcnVubGV2ZWwgXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMjE0OC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0yMTQ3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTIxNDdfMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pcF9maXhfcHJvYmxlbV9vbl9taXBzNjRfbjY0X2JpZ19lbmRpYW5fbXVzbF9zeXN0ZW1zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLWZpeC1iYWNrcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNlZC1maXgtc2VkLW4tZmx1c2hlcy1wYXR0ZXJuLXNwYWNlLXRlcm1pbmF0ZXMtZWFybHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1rYnVpbGQtcmFjZS1maXgtY29tbWl0LWQ4ZTYxYmIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tbWl0LWFwcGxldF90YWJsZXMtZml4LWNvbW1pdC0wZGRkYmMxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLWxpYmJiLXJhY2UucGF0Y2ggXAogIgogU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vbXVzbC5jZmcgIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1zeXNsb2cuZGVmYXVsdAppbmRleCBlNTE2Y2FmLi4yZGNlZDgwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQKQEAgLTEsNCArMSw0IEBACi1PUFRJT05TPSItQyIKKyNPUFRJT05TPSItQyIKICMgVGhlIGFib3ZlIG9wdGlvbiBtZWFucyBzeXNsb2dkIHdpbGwgbG9nIHRvIDE2SyBzaG0gY2lyY3VsYXIgYnVmZmVyLgogIyBZb3UgY291bGQgdXNlIGBsb2dyZWFkJyB0byByZWFkIGl0LgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbml0dGFiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5pdHRhYgppbmRleCBiZmVjNGE3Li4yYmM4MzFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbml0dGFiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luaXR0YWIKQEAgLTEsMTMgKzEsMTMgQEAKICMgVGhpcyBpcyBydW4gZmlyc3QgZXhjZXB0IHdoZW4gYm9vdGluZyBpbiBzaW5nbGUtdXNlciBtb2RlLgogCiAjIFN0YXJ0dXAgdGhlIHN5c3RlbQotbnVsbDo6c3lzaW5pdDovYmluL21vdW50IC10IHByb2MgcHJvYyAvcHJvYwotbnVsbDo6c3lzaW5pdDovYmluL21vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKLW51bGw6OnN5c2luaXQ6L2Jpbi9tb3VudCAtdCBkZXZ0bXBmcyBkZXZ0bXBmcyAvZGV2Ci1udWxsOjpzeXNpbml0Oi9iaW4vbW91bnQgLW8gcmVtb3VudCxydyAvCi1udWxsOjpzeXNpbml0Oi9iaW4vbWtkaXIgLXAgL2Rldi9wdHMKLW51bGw6OnN5c2luaXQ6L2Jpbi9tb3VudCAtdCBkZXZwdHMgZGV2cHRzIC9kZXYvcHRzCi1udWxsOjpzeXNpbml0Oi9iaW4vbW91bnQgLWEKKzo6c3lzaW5pdDovYmluL21vdW50IC10IHByb2MgcHJvYyAvcHJvYworOjpzeXNpbml0Oi9iaW4vbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworOjpzeXNpbml0Oi9iaW4vbW91bnQgLXQgZGV2dG1wZnMgZGV2dG1wZnMgL2RldgorOjpzeXNpbml0Oi9iaW4vbW91bnQgLW8gcmVtb3VudCxydyAvCis6OnN5c2luaXQ6L2Jpbi9ta2RpciAtcCAvZGV2L3B0cworOjpzeXNpbml0Oi9iaW4vbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cworOjpzeXNpbml0Oi9iaW4vbW91bnQgLWEKIAogOjpzeXNpbml0Oi9ldGMvaW5pdC5kL3JjUwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldgppbmRleCA5NjI1MjQ3Li44YzljMDZlIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYKQEAgLTEsMTAgKzEsMTIgQEAKICMhL2Jpbi9zaAotCittb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK21vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKIG1vdW50IC10IHRtcGZzIHRtcGZzIC9kZXYgIC1vIHNpemU9NjRrLG1vZGU9MDc1NQogbWtkaXIgL2Rldi9wdHMgL2Rldi9zaG0KIGNobW9kIDc3NyAvZGV2L3NobQogbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cwogdG91Y2ggL2Rldi9tZGV2LnNlcQorI3N5c2N0bCAtdyBrZXJuZWwuaG90cGx1Zz0vc2Jpbi9tZGV2CiBlY2hvICIvc2Jpbi9tZGV2IiA+IC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZwogbWRldiAtcwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCmluZGV4IDAyNzMwZGIuLjY0ZTVmMTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0xMSw3ICsxMSw3IEBACiB8IGNvbmZpZ3VyZS5hYzo0MDogdGhlIHRvcCBsZXZlbAogfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA1LzA0CiAKIEluZGV4OiBjb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoCmluZGV4IDVjYTU5MGIuLjUwODgxMDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9mdXRpbWVucy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZnV0aW1lbnMucGF0Y2gKQEAgLTMsNyArMyw3IEBACiAjIGNvcmV1dGlscyB1c2VzIGdudWxpYiB3aGljaCBjb25mbGljdHMgd2l0aCBuZXdlciBsaWJjIGhlYWRlciBvbiBmdXRpbWVucwogIyB0aGlzIHBhdGNoIHNpbXBseSByZW5hbWVzIGNvcmV1dGlscyBmdXRpbWVzIHRvIGF2b2lkIGNvbmZsaWN0aW9uCiAjCi0jIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjIFNpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xOAogIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKIAogZGlmZiAtLWdpdCBhL2xpYi91dGltZW5zLmMgYi9saWIvdXRpbWVucy5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2dudWxpYl9tNC5wYXRjaAppbmRleCA4ZjM1NTUyLi44YThmZmE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9nbnVsaWJfbTQucGF0Y2gKQEAgLTMsNyArMyw3IEBACiAjIHJlbW92ZSB0aGUgbGluZSB0byBjYXVzZSByZWN1cnNpdmUgaW5jbHVzaW9uIGVycm9yIGZyb20gYXV0b3JlY29uZiwgc2ljbmUKICMgbmV3ZXIgYXV0b2NvbmYgaGFzIGluY2x1ZGVkIHRoaXMgZGVmaW5pdGlvbi4gU2ltcGx5IHJlbmFtZSBpdCBoZXJlLgogIwotIyBTaWduZWQtb2ZmLWJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xOAorIyBTaWduZWQtb2ZmLWJ5OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKICMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCiAKIGRpZmYgLS1naXQgYS9leHRlbnNpb25zLm00IGIvZXh0ZW5zaW9ucy5tNApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9tYW4tdG91Y2gucGF0Y2gKaW5kZXggYzQyY2I5Yy4uNTlhNGZlMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogIyBpcyB3aXRoIHRhcmdldCBmb3JtYXQgd2hpY2ggY2FuJ3QgYmUgaW52b2tlZCBvbiBidWlsZCBzeXN0ZW0sIGRpc2FibGUgYnVpbGRpbmcKICMgJ3RvdWNoJyBtYW4gcGFnZSBoZXJlLgogIwotIyBTaWduZWQtb2ZmLWJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xOAorIyBTaWduZWQtb2ZmLWJ5OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKICMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCiAKIGRpZmYgLS1naXQgYS9tYW4vTWFrZWZpbGUuYW0gYi9tYW4vTWFrZWZpbGUuYW0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjUvMDAwMS11bmFtZS1yZXBvcnQtcHJvY2Vzc29yLWFuZC1oYXJkd2FyZS1jb3JyZWN0bHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI1LzAwMDEtdW5hbWUtcmVwb3J0LXByb2Nlc3Nvci1hbmQtaGFyZHdhcmUtY29ycmVjdGx5LnBhdGNoCmluZGV4IGM1ZjQ0OWYuLjNjNDNlMWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjUvMDAwMS11bmFtZS1yZXBvcnQtcHJvY2Vzc29yLWFuZC1oYXJkd2FyZS1jb3JyZWN0bHkucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNS8wMDAxLXVuYW1lLXJlcG9ydC1wcm9jZXNzb3ItYW5kLWhhcmR3YXJlLWNvcnJlY3RseS5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLVVwc3RyZWFtLVN0YXR1czogUmVqZWN0ZWQKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCiAKIFN1YmplY3Q6IHVuYW1lOiByZXBvcnQgcHJvY2Vzc29yIGFuZCBoYXJkd2FyZSBjb3JyZWN0bHkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNS9kaXNhYmxlLWxzLW91dHB1dC1xdW90aW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNS9kaXNhYmxlLWxzLW91dHB1dC1xdW90aW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGMyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI1L2Rpc2FibGUtbHMtb3V0cHV0LXF1b3RpbmcucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorU3ViamVjdDogcmV2ZXJ0IGluY29uc2lzdGVudCBscyBxdW90aW5nCisKK1RoaXMgaXMgYSByZXZlcnQgb2YgdXBzdHJlYW0gY29tbWl0IDEwOWI5MjIwY2VhZDZlOTc5ZDIyZDE2MzI3YzRkOWY4MzUwNDMxY2MuCisKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzgxMzE2NAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitPcmlnaW5hbGx5LWJ5OiBBZGFtIEJvcm93c2tpIDxraWxvYnl0ZUBhbmdiYW5kLnBsPgorW1BHOiBwYXRjaCBmcm9tIGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9ODEzMTY0Izc4IF0KK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCistLS0KKworLS0tIGNvcmV1dGlscy04LjI1Lm9yaWcvTkVXUworKysrIGNvcmV1dGlscy04LjI1L05FV1MKK0BAIC03MSw5ICs3MSw2IEBAIEdOVSBjb3JldXRpbHMgTkVXUworICAgZGYgbm93IHByZWZlcnMgc291cmNlcyB0b3dhcmRzIHRoZSByb290IG9mIGEgZGV2aWNlIHdoZW4KKyAgIGVsaWRpbmcgZHVwbGljYXRlIGJpbmQgbW91bnRlZCBlbnRyaWVzLgorIAorLSAgbHMgbm93IHF1b3RlcyBmaWxlIG5hbWVzIHVuYW1iaWd1b3VzbHkgYW5kIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gYSBzaGVsbCwKKy0gIHdoZW4gb3V0cHV0dGluZyB0byBhIHRlcm1pbmFsLgorLQorICAgam9pbiwgc29ydCwgdW5pcSB3aXRoIC0temVyby10ZXJtaW5hdGVkLCBub3cgdHJlYXQgJ1xuJyBhcyBhIGZpZWxkIGRlbGltaXRlci4KKyAKKyAqKiBJbXByb3ZlbWVudHMKKy0tLSBjb3JldXRpbHMtOC4yNS5vcmlnL2RvYy9jb3JldXRpbHMudGV4aQorKysrIGNvcmV1dGlscy04LjI1L2RvYy9jb3JldXRpbHMudGV4aQorQEAgLTc3NTAsOCArNzc1MCw4IEBAIHRoaXMifSBpbiB0aGUgZGVmYXVsdCBDIGxvY2FsZS4gIFRoaXMgbG8KKyAKKyBZb3UgY2FuIHNwZWNpZnkgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIEBvcHRpb257LS1xdW90aW5nLXN0eWxlfSBvcHRpb24KKyB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBAZW52e1FVT1RJTkdfU1RZTEV9QC4gIElmIHRoYXQgZW52aXJvbm1lbnQKKy12YXJpYWJsZSBpcyBub3Qgc2V0LCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBAc2FtcHtzaGVsbC1lc2NhcGV9IHdoZW4gdGhlCistb3V0cHV0IGlzIGEgdGVybWluYWwsIGFuZCBAc2FtcHtsaXRlcmFsfSBvdGhlcndpc2UuCisrdmFyaWFibGUgaXMgbm90IHNldCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgQHNhbXB7bGl0ZXJhbH0sIGJ1dCB0aGlzCisrZGVmYXVsdCBtYXkgY2hhbmdlIHRvIEBzYW1we3NoZWxsfSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4KKyAKKyBAaXRlbSAtLXNob3ctY29udHJvbC1jaGFycworIEBvcGluZGV4IC0tc2hvdy1jb250cm9sLWNoYXJzCistLS0gY29yZXV0aWxzLTguMjUub3JpZy9zcmMvbHMuYworKysrIGNvcmV1dGlscy04LjI1L3NyYy9scy5jCitAQCAtMTU4MSw3ICsxNTgxLDYgQEAgZGVjb2RlX3N3aXRjaGVzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgaWYgKGlzYXR0eSAoU1RET1VUX0ZJTEVOTykpCisgICAgICAgICB7CisgICAgICAgICAgIGZvcm1hdCA9IG1hbnlfcGVyX2xpbmU7CistICAgICAgICAgIHNldF9xdW90aW5nX3N0eWxlIChOVUxMLCBzaGVsbF9lc2NhcGVfcXVvdGluZ19zdHlsZSk7CisgICAgICAgICAgIC8qIFNlZSBkZXNjcmlwdGlvbiBvZiBxbWFya19mdW5ueV9jaGFycywgYWJvdmUuICAqLworICAgICAgICAgICBxbWFya19mdW5ueV9jaGFycyA9IHRydWU7CisgICAgICAgICB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIKaW5kZXggOWNlNzE3ZC4uMzU3MDBhMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYgpAQCAtODgsNiArODgsMTAgQEAKIAogQUxURVJOQVRJVkVfJHtQTn0gPSAibGJyYWNrZXQgJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7c2JpbmRpcl9wcm9nc30iCiAKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJzdS4xIGhvc3RuYW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3UuMV0gPSAiJHttYW5kaXJ9L21hbjEvc3UuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtob3N0bmFtZS4xXSA9ICIke21hbmRpcn0vbWFuMS9ob3N0bmFtZS4xIgorCiBBTFRFUk5BVElWRV9QUklPUklUWVt1cHRpbWVdID0gIjEwIgogQUxURVJOQVRJVkVfUFJJT1JJVFlbaG9zdG5hbWVdID0gIjEwIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNS5iYgppbmRleCA0MTlhNjkzLi5kZjZhZDM4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI1LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjUuYmIKQEAgLTE5LDYgKzE5LDcgQEAKICAgICAgICAgICAgZmlsZTovL2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS11bmFtZS1yZXBvcnQtcHJvY2Vzc29yLWFuZC1oYXJkd2FyZS1jb3JyZWN0bHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1scy1vdXRwdXQtcXVvdGluZy5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICIwNzBlNDNiYTdmNjE4ZDc0NzQxNGVmNTZhYjI0OGE0OCIKQEAgLTM3LDcgKzM4LDggQEAKICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSBcCiAiCiAKLVBBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAiIgorIyBUaGUgbGliL29lL3BhdGgucHkgcmVxdWlyZXMgeGF0dHIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAieGF0dHIiCiAKICMgd2l0aCwgd2l0aG91dCwgZGVwZW5kcywgcmRlcGVuZHMKICMKQEAgLTY5LDYgKzcxLDE1IEBACiAJbWtkaXIgLXAgJHtCfS9zcmMKIH0KIAorZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwkjIHJlbW92ZSBncm91cHMgdG8gZml4IGNvbmZsaWN0IHdpdGggc2hhZG93LW5hdGl2ZQorCXJtIC1mICR7RH0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZ3JvdXBzCisJIyBUaGUgcmV0dXJuIGlzIGEgbXVzdCBzaW5jZSBuYXRpdmUgZG9lc24ndCBuZWVkIHRoZQorCSMgZG9faW5zdGFsbF9hcHBlbmQoKSBpbiB0aGUgYmVsb3cuCisJcmV0dXJuCit9CisKIGRvX2luc3RhbGxfYXBwZW5kKCkgewogCWZvciBpIGluIGRmIG1rdGVtcCBiYXNlNjQ7IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7YmluZGlyfS8kaS4ke0JQTn07IGRvbmUKIApAQCAtOTEsMTYgKzEwMiwxMyBAQAogCWNwIC1hICR7RH0ke21hbmRpcn0vbWFuMS90ZXN0LjEgJHtEfSR7bWFuZGlyfS9tYW4xL2xicmFja2V0LjEuJHtCUE59CiB9CiAKLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpewotCSMgcmVtb3ZlIGdyb3VwcyB0byBmaXggY29uZmxpY3Qgd2l0aCBzaGFkb3ctbmF0aXZlCi0Jcm0gLWYgJHtEfSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm91cHMKLX0KLQogaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCiAKIEFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKIEFMVEVSTkFUSVZFXyR7UE59ID0gImxicmFja2V0ICR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke3NiaW5kaXJfcHJvZ3N9IGJhc2U2NCBta3RlbXAgZGYiCi1BTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAiYmFzZTY0LjEgbWt0ZW1wLjEgZGYuMSBsYnJhY2tldC4xIGdyb3Vwcy4xIGtpbGwuMSB1cHRpbWUuMSBzdGF0LjEiCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAiYmFzZTY0LjEgbWt0ZW1wLjEgZGYuMSBsYnJhY2tldC4xIGdyb3Vwcy4xIGtpbGwuMSB1cHRpbWUuMSBzdGF0LjEgIGhvc3RuYW1lLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtob3N0bmFtZS4xXSA9ICIke21hbmRpcn0vbWFuMS9ob3N0bmFtZS4xIgogCiBBTFRFUk5BVElWRV9MSU5LX05BTUVbYmFzZTY0XSA9ICIke2Jhc2VfYmluZGlyfS9iYXNlNjQiCiBBTFRFUk5BVElWRV9UQVJHRVRbYmFzZTY0XSA9ICIke2JpbmRpcn0vYmFzZTY0LiR7QlBOfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIuaW5jCmluZGV4IDQ2NjFlM2EuLjU1ZjcxMGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliLmluYwpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICAgICBmaWxlOi8vdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoIFwKICIKIAotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgYmFzaC1jb21wbGV0aW9uCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBiYXNoLWNvbXBsZXRpb24gZ3RrLWRvYwogCiAjZGVmYXVsdCBkaXNhYmxlIHJlZ3Jlc3Npb24gdGVzdHMsIHNvbWUgdW5pdCB0ZXN0IGNvZGUgaW4gbm9uIHRlc3RpbmcgY29kZQogI1BBQ0tBR0VDT05GSUdfcG4tJHtQTn0gPSAidGVzdHMiIGVuYWJsZSByZWdyZXNzaW9uIHRlc3RzIGxvY2FsLmNvbmYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtdGVzdF8xLjEwLjEwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuMTAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwYjdhYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtdGVzdF8xLjEwLjEwLmJiCkBAIC0wLDAgKzEsNTggQEAKK1NVTU1BUlkgPSAiRC1CdXMgdGVzdCBwYWNrYWdlIChmb3IgRC1idXMgZnVuY3Rpb25hbGl0eSB0ZXN0aW5nIG9ubHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJtYWtlIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0OTU2NzZkMjQwZWI5ODI5MjFiM2FkMTM0MzUyNjg0OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZDhmMWQwNjlhYjRkMWEwMjU1ZDdiNDAwZWEzYmNlZjQ0MzBjNDJlNzI5YjEwMTJhYmIyODkwZTNmNzM5YTQzIgorCitTPSIke1dPUktESVJ9L2RidXMtJHtQVn0iCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9kYnVzOiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcHRlc3QgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKK0VYVFJBX09FQ09ORl9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0td2l0aC14JywgJy0td2l0aG91dC14JywgZCl9IgorRVhUUkFfT0VDT05GX1hfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsYXItdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2hlY2tzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hc3NlcnRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS12ZXJib3NlLW1vZGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy10ZXN0LWRpcj0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9YfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbD0ic2hlbGwgcHJpbnRmIHJlZnMgc3lzbG9nIG1hcnNoYWwgc3ludGF4IGNvcnJ1cHQgZGJ1cy1kYWVtb24gZGJ1cy1kYWVtb24tZWF2ZXNkcm9wIGxvb3BiYWNrIHJlbGF5IgorCWZvciBpIGluICRsOyBkbyBpbnN0YWxsICR7Qn0vdGVzdC8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwlsPSJidXMgYnVzLXN5c3RlbSBidXMtbGF1bmNoLWhlbHBlciIKKwlmb3IgaSBpbiAkbDsgZG8gaW5zdGFsbCAke0J9L2J1cy8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwlpbnN0YWxsICR7Qn0vZGJ1cy8ubGlicy90ZXN0LWRidXMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWNwIC1yICR7Qn0vdGVzdC9kYXRhICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKK30KK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJiYXNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuMTAuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtdGVzdF8xLjEwLjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjhhMDkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuMTAuNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLVNVTU1BUlkgPSAiRC1CdXMgdGVzdCBwYWNrYWdlIChmb3IgRC1idXMgZnVuY3Rpb25hbGl0eSB0ZXN0aW5nIG9ubHkpIgotSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgotCi1ERVBFTkRTID0gInB5dGhvbi1weWdvYmplY3QgZGJ1cyIKLQotUkRFUEVORFNfJHtQTn0gKz0gIm1ha2UiCi1SREVQRU5EU18ke1BOfS1kZXYgPSAiIgotCi1TUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzL2RidXMtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3RtcGRpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kYnVzLTEuaW5pdCAgXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyNmQwY2YzYTFjOTc4MmNiMGUzNDIxMDFmMDQ1MDQ0MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiNWZlZmEwOGE3N2VkZDc2Y2Q2NGQ4NzJkYjk0OWVlYmMwMmNmNmYzZjhiZTgyZTRiYmM2NDE3NDJhZjVkMzVmIgotCi1TPSIke1dPUktESVJ9L2RidXMtJHtQVn0iCi1GSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9kYnVzOiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcHRlc3QgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCi0KLUVYVFJBX09FQ09ORl9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0td2l0aC14JywgJy0td2l0aG91dC14JywgZCl9IgotRVhUUkFfT0VDT05GX1hfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGVzdHMgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsYXItdGVzdHMgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtY2hlY2tzIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1hc3NlcnRzIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS12ZXJib3NlLW1vZGUgXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCi0gICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKLSAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy10ZXN0LWRpcj0ke1BURVNUX1BBVEh9IFwKLSAgICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9YfSIKLQotZG9faW5zdGFsbCgpIHsKLSAgICA6Ci19Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Ci0JY2FzZTE9InNoZWxsIHByaW50ZiByZWZzIHN5c2xvZyIKLQlmb3IgaSBpbiAke2Nhc2UxfTsgZG8gaW5zdGFsbCAke0J9L3Rlc3QvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCi0JY2FzZTI9Im1hcnNoYWwgc3ludGF4IGNvcnJ1cHQgZGJ1cy1kYWVtb24gZGJ1cy1kYWVtb24tZWF2ZXNkcm9wIGxvb3BiYWNrIHJlbGF5IgotCWZvciBpIGluICR7Y2FzZTJ9OyBkbyBpbnN0YWxsICR7Qn0vdGVzdC8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKLQljYXNlMz0iYnVzIGJ1cy1zeXN0ZW0gYnVzLWxhdW5jaC1oZWxwZXIiCi0JZm9yIGkgaW4gJHtjYXNlM307IGRvIGluc3RhbGwgJHtCfS9idXMvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCi0JaW5zdGFsbCAke0J9L2RidXMvdGVzdC1kYnVzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKLQljcCAtciAke0J9L3Rlc3QvZGF0YSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Ci19Ci1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvMDAwMS1jb25maWd1cmUuYWMtZXhwbGljaXRlbHktY2hlY2stc3RkaW50LmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLzAwMDEtY29uZmlndXJlLmFjLWV4cGxpY2l0ZWx5LWNoZWNrLXN0ZGludC5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YWNiN2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLzAwMDEtY29uZmlndXJlLmFjLWV4cGxpY2l0ZWx5LWNoZWNrLXN0ZGludC5oLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMWJmZGUyMjI5MjZiZTYyNGEzMGE2ZTRiMmNkYzJjNTA2NGEzNjI5OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IElvYW4tQWRyaWFuIFJhdGl1IDxhZHJpYW4ucmF0aXVAbmkuY29tPgorRGF0ZTogRnJpLCAyOSBKdWwgMjAxNiAwMToxOTozNyArMDMwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGV4cGxpY2l0ZWx5IGNoZWNrIHN0ZGludC5oCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK090aGVyd2lzZSBIQVZFX1NURElOVF9IIHdpbGwgbm90IGJlIGRlZmluZWQgb3IgdGhlIHZhciB3aWxsIG5vdCBiZQorcGlja2VkIHVwIGZyb20gY2FjaGUgc28gYnVpbGRzIGNvdWxkIGZhaWwgd2l0aCBlcnJvcnMgbGlrZToKK3wgLi4vLi4vZGJ1cy0xLjEwLjgvZGJ1cy9kYnVzLWludGVybmFscy5oOjIzOTo4OiBlcnJvcjog4oCYdWludHB0cl904oCZIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorCitTaWduZWQtb2ZmLWJ5OiBJb2FuLUFkcmlhbiBSYXRpdSA8YWRyaWFuLnJhdGl1QG5pLmNvbT4KK1tzbWN2OiBmaXggQXV0b2NvbmYgdW5kZXJxdW90aW5nXQorUmV2aWV3ZWQtYnk6IFNpbW9uIE1jVml0dGllIDxzaW1vbi5tY3ZpdHRpZUBjb2xsYWJvcmEuY28udWs+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gZGJ1cy0xLjEwXQorCistLS0KKyBjb25maWd1cmUuYWMgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZjVjNWI5Li5hMjI4ZDYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02OTksNiArNjk5LDggQEAgQUNfQ0hFQ0tfSEVBREVSUyhieXRlc3dhcC5oKQorIAorIEFDX0NIRUNLX0hFQURFUlModW5pc3RkLmgpCisgCisrQUNfQ0hFQ0tfSEVBREVSUyhbc3RkaW50LmhdKQorKworIEFDX0NIRUNLX0hFQURFUlMod3MydGNwaXAuaCkKKyAKKyBBQ19DSEVDS19IRUFERVJTKGFsbG9jYS5oKQorLS0gCisyLjkuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLzAwMDEtY29uZmlndXJlLmFjLXN1cHBvcnQtbGFyZ2UtZmlsZS1mb3Itc3RhdDY0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy8wMDAxLWNvbmZpZ3VyZS5hYy1zdXBwb3J0LWxhcmdlLWZpbGUtZm9yLXN0YXQ2NC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlYWMyYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLzAwMDEtY29uZmlndXJlLmFjLXN1cHBvcnQtbGFyZ2UtZmlsZS1mb3Itc3RhdDY0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotRnJvbSBlMThiZDNhNTcxYmU3MTZkOTBiZWRjODM1YTAxNDQ3MjQ3MGFlN2JkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotRGF0ZTogV2VkLCAzMCBEZWMgMjAxNSAxMDo1ODozOSArMDgwMAotU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IHN1cHBvcnQgbGFyZ2UtZmlsZSBmb3Igc3RhdDY0Ci0KLVdoaWxlIHN0YXJ0aW5nIGRidXMtZGFlbW9uIG9uIGEgMzItYml0IGxpbnV4IGhvc3QgYW5kIGl0IGludm9rZXMKLWZzdGF0IHRvIGxvYWQgL2V0Yy9kYnVzLTEvc3lzdGVtLmNvbmYgdGhyb3VnaCBORlMuIElmIHN5c3RlbS5jb25mCi13YXMgY3JlYXRlZCB3aXRoIGEgbGFyZ2UgaW5kb2UgbnVtYmVyIG9uIDY0LWJpdCBob3N0LiBUaGUgYWJvdmUKLWZzdGF0IGludm9raW5nIGZhaWxlZC4gSGVyZSBpcyB0aGUgbG9nIG9mIHN0cmFjZToKLS4uLi4uLi4uLi4uLgotJCBscyAtaSAvZXRjL2RidXMtMS9zeXN0ZW0uY29uZgotNTM3Nzg1NTgxMDkgL2V0Yy9kYnVzLTEvc3lzdGVtLmNvbmYKLQotJCBzdHJhY2UgL3Vzci9iaW4vZGJ1cy1kYWVtb24gLS1zeXN0ZW0gLS1hZGRyZXNzPXN5c3RlbWQ6IC0tbm9mb3JrIC0tbm9waWRmaWxlIC0tc3lzdGVtZC1hY3RpdmF0aW9uCi18b3BlbigiL2V0Yy9kYnVzLTEvc3lzdGVtLmNvbmYiLCBPX1JET05MWSkgPSA0Ci18ZnN0YXQ2NCg0LCB7c3RfbW9kZT1TX0lGUkVHfDA2NDQsIHN0X3NpemU9MzM0MCwgLi4ufSkgPSAwCi18Y2xvc2UoNCkgPSAwCi18Y2xvc2UoMykgPSAwCi18d3JpdGUoMiwgIkZhaWxlZCB0byBzdGFydCBtZXNzYWdlIGJ1czogRmFpIi4uLiwgMTA5RmFpbGVkIHRvIHN0YXJ0IG1lc3NhZ2UgYnVzOgotRmFpbGVkIHRvIHN0YXQgIi9ldGMvZGJ1cy0xL3N5c3RlbS5jb25mIjogVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZQotfCkgPSAxMDkKLXxleGl0X2dyb3VwKDEpID0gPwotfCsrKyBleGl0ZWQgd2l0aCAxICsrKwotLi4uLi4uLi4uLi4uCi0KLUluIHRoaXMgc2l0dWF0aW9uLCB3ZSBzaG91bGQgc3VwcG9ydCBsYXJnZS1maWxlIGZvciBzdGF0NjQuIEFkZCBtYXJjbwotQUNfU1lTX0xBUkdFRklMRSB0byBkbyB0aGUgZGV0ZWN0aW9uIGF0IGNvbmZpZ3VyZSB0aW1lLiBJdCBjYW4gYmUgZGlzYWJsZWQKLWJ5IGNvbmZpZ3VyaW5nIHdpdGggdGhlIGAtLWRpc2FibGUtbGFyZ2VmaWxlJyBvcHRpb24uCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotQnVnOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD05MzU0NQotaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9hdHRhY2htZW50LmNnaT9pZD0xMjA3NDcKLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGNvbmZpZ3VyZS5hYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA4MjgwNmJhLi5jYjVhNjBiIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC02NCw2ICs2NCw3IEBAIEFDX1NVQlNUKERCVVNfVkVSU0lPTikKLSBBQ19QUk9HX0NDCi0gQU1fUFJPR19DQ19DX08KLSBBQ19QUk9HX0NYWAotIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUwotK0FDX1NZU19MQVJHRUZJTEUKLSBBQ19JU0NfUE9TSVgKLSBBQ19IRUFERVJfU1REQwotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuMTAuMTAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuMTAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiMGI5YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS4xMC4xMC5iYgpAQCAtMCwwICsxLDE4MSBAQAorU1VNTUFSWSA9ICJELUJ1cyBtZXNzYWdlIGJ1cyIKK0RFU0NSSVBUSU9OID0gIkQtQnVzIGlzIGEgbWVzc2FnZSBidXMgc3lzdGVtLCBhIHNpbXBsZSB3YXkgZm9yIGFwcGxpY2F0aW9ucyB0byB0YWxrIHRvIG9uZSBhbm90aGVyLiBJbiBhZGRpdGlvbiB0byBpbnRlcnByb2Nlc3MgY29tbXVuaWNhdGlvbiwgRC1CdXMgaGVscHMgY29vcmRpbmF0ZSBwcm9jZXNzIGxpZmVjeWNsZTsgaXQgbWFrZXMgaXQgc2ltcGxlIGFuZCByZWxpYWJsZSB0byBjb2RlIGEgXCJzaW5nbGUgaW5zdGFuY2VcIiBhcHBsaWNhdGlvbiBvciBkYWVtb24sIGFuZCB0byBsYXVuY2ggYXBwbGljYXRpb25zIGFuZCBkYWVtb25zIG9uIGRlbWFuZCB3aGVuIHRoZWlyIHNlcnZpY2VzIGFyZSBuZWVkZWQuIgorSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorREVQRU5EUyA9ICJleHBhdCB2aXJ0dWFsL2xpYmludGwiCitSREVQRU5EU19kYnVzX2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU19kYnVzX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitQQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICcke1BOfS1wdGVzdCcsICcnLCBkKX0iCitBTExPV19FTVBUWV9kYnVzLXB0ZXN0ID0gIjEiCitSREVQRU5EU19kYnVzLXB0ZXN0X2NsYXNzLXRhcmdldCA9ICJkYnVzLXRlc3QtcHRlc3QiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMvZGJ1cy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdG1wZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RidXMtMS5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL29zLXRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtZXhwbGljaXRlbHktY2hlY2stc3RkaW50LmgucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDk1Njc2ZDI0MGViOTgyOTIxYjNhZDEzNDM1MjY4NDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWQ4ZjFkMDY5YWI0ZDFhMDI1NWQ3YjQwMGVhM2JjZWY0NDMwYzQyZTcyOWIxMDEyYWJiMjg5MGUzZjczOWE0MyIKKworaW5oZXJpdCB1c2VyYWRkIGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB1cGRhdGUtcmMuZCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KKworSU5JVFNDUklQVF9OQU1FID0gImRidXMtMSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAyIDUgMyAyIC4gc3RvcCAyMCAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbmV0ZGV2IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIG1lc3NhZ2VidXMiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uY29uZiAke3N5c2NvbmZkaXJ9L2RidXMtMS9zZXNzaW9uLmNvbmYiCisKK0RFQklBTk5BTUVfJHtQTn0gPSAiZGJ1cy0xIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tbGliIgorCitPTERQS0dOQU1FID0gImRidXMteDExIgorT0xEUEtHTkFNRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5CitSUFJPVklERVNfJHtQTn0gPSAiJHtPTERQS0dOQU1FfSIKK1JSRVBMQUNFU18ke1BOfSArPSAiJHtPTERQS0dOQU1FfSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2RidXMtZGFlbW9uKiBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy11dWlkZ2VuIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLWNsZWFudXAtc29ja2V0cyBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1zZW5kIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLW1vbml0b3IgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbGF1bmNoIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXJ1bi1zZXNzaW9uIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXVwZGF0ZS1hY3RpdmF0aW9uLWVudmlyb25tZW50IFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vZGJ1cyogXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXNzaW9uLmQgXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2Vzc2lvbi5jb25mIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS5kIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS5jb25mIFwKKyAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0gXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0gXAorIgorRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWIqLnNvLioiCitSUkVDT01NRU5EU18ke1BOfS1saWIgPSAiJHtQTn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9kYnVzLTEuMC9pbmNsdWRlICR7YmluZGlyfS9kYnVzLXRlc3QtdG9vbCIKKworcGtnX3Bvc3RpbnN0X2RidXMoKSB7CisJIyBJZiBib3RoIHN5c3RlbWQgYW5kIHN5c3Zpbml0IGFyZSBlbmFibGVkLCBtYXNrIHRoZSBkYnVzLTEgaW5pdCBzY3JpcHQKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQgc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayBkYnVzLTEuc2VydmljZQorCWZpCisKKwlpZiBbIC16ICIkRCIgXSAmJiBbIC1lIC9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF0gOyB0aGVuCisJCS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCWZpCit9CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWRpc2FibGUtc2VsaW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLWVuYWJsZS1zeXN0ZW1kIC0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9LC0tZGlzYWJsZS1zeXN0ZW1kIC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpcixzeXN0ZW1kIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14IC0tZW5hYmxlLXgxMS1hdXRvbGF1bmNoLC0td2l0aG91dC14IC0tZGlzYWJsZS14MTEtYXV0b2xhdW5jaCwgdmlydHVhbC9saWJ4MTEgbGlic20iCitQQUNLQUdFQ09ORklHW2xhcmdlZmlsZV0gPSAiLS1lbmFibGUtbGFyZ2VmaWxlLC0tZGlzYWJsZS1sYXJnZWZpbGUsLCIKK1BBQ0tBR0VDT05GSUdbdXNlci1zZXNzaW9uXSA9ICItLWVuYWJsZS11c2VyLXNlc3Npb24gLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdXNlcl91bml0ZGlyfSwtLWRpc2FibGUtdXNlci1zZXNzaW9uIgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJc2VkICdzOkBiaW5kaXJAOiR7YmluZGlyfTonIDwgJHtXT1JLRElSfS9kYnVzLTEuaW5pdCA+JHtXT1JLRElSfS9kYnVzLTEuaW5pdC5zaAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kYnVzLTEuaW5pdC5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGJ1cy0xCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWZvciBpIGluIGRidXMudGFyZ2V0LndhbnRzIHNvY2tldHMudGFyZ2V0LndhbnRzIG11bHRpLXVzZXIudGFyZ2V0LndhbnRzOyBkbyBcCisJCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9LyRpOyBkb25lCisJCWluc3RhbGwgLW0gMDY0NCAke0J9L2J1cy9kYnVzLnNlcnZpY2UgJHtCfS9idXMvZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vCisJCWNkICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L2RidXMudGFyZ2V0LndhbnRzLworCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vZGJ1cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKKwkJbG4gLWZzIC4uL2RidXMuc29ja2V0ICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L3NvY2tldHMudGFyZ2V0LndhbnRzL2RidXMuc29ja2V0CisJCWxuIC1mcyAuLi9kYnVzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vbXVsdGktdXNlci50YXJnZXQud2FudHMvZGJ1cy5zZXJ2aWNlCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwllY2hvICJkIG1lc3NhZ2VidXMgbWVzc2FnZWJ1cyAwNzU1ICR7bG9jYWxzdGF0ZWRpcn0vcnVuL2RidXMgbm9uZSIgXAorCSAgICAgPiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9kYnVzCisKKworCW1rZGlyIC1wICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzCisKKwljaG93biBtZXNzYWdlYnVzOm1lc3NhZ2VidXMgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKKworCWNob3duIHJvb3Q6bWVzc2FnZWJ1cyAke0R9JHtsaWJleGVjZGlyfS9kYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyCisJY2htb2QgNDc1NSAke0R9JHtsaWJleGVjZGlyfS9kYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyCisKKwkjIFJlbW92ZSBSZWQgSGF0IGluaXRzY3JpcHQKKwlybSAtcmYgJHtEfSR7c3lzY29uZmRpcn0vcmMuZAorCisJIyBSZW1vdmUgZW1wdHkgdGVzdGV4ZWMgZGlyZWN0b3J5IGFzIHdlIGRvbid0IGJ1aWxkIHRlc3RzCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZGJ1cy0xLjAvdGVzdAorCisJIyBSZW1vdmUgL3Zhci9ydW4gYXMgaXQgaXMgY3JlYXRlZCBvbiBzdGFydHVwCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBmb3IgZGJ1cy1nbGliLW5hdGl2ZSBpbnRyb3NwZWN0aW9uIGdlbmVyYXRpb24KKwlpbnN0YWxsIC1kICR7RH0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvCisJIyBOLkIuIGlzIGJlbG93IGluc3RhbGwgYWN0dWFsbHkgcmVxdWlyZWQ/CisJaW5zdGFsbCAtbSAwNjQ0IGJ1cy9zZXNzaW9uLmNvbmYgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9zZXNzaW9uLmNvbmYKKworCSMgZGJ1cy1nbGliLW5hdGl2ZSBhbmQgZGJ1cy1nbGliIG5lZWQgdGhpcyB4bWwgZmlsZQorCS4vYnVzL2RidXMtZGFlbW9uIC0taW50cm9zcGVjdCA+ICR7RH0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwKKwkKKwkjIGRidXMtbGF1bmNoIGhhcyBubyBYIHN1cHBvcnQgc28gbGV0cyBub3QgaW5zdGFsbCBpdCBpbiBjYXNlIHRoZSBob3N0CisJIyBoYXMgYSBtb3JlIGZlYXR1cmVkIGFuZCB1c2VmdWwgdmVyc2lvbgorCXJtIC1mICR7RH0ke2JpbmRpcn0vZGJ1cy1sYXVuY2gKK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKKwkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAorCisJIyBSZW1vdmUgL3Zhci9ydW4gdG8gYXZvaWQgUUEgZXJyb3IKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCit9CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0lOU0FORV9TS0lQXyR7UE59LXB0ZXN0ICs9ICJidWlsZC1kZXBzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjEwLjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuMTAuNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1Nzk4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuMTAuNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi1TVU1NQVJZID0gIkQtQnVzIG1lc3NhZ2UgYnVzIgotREVTQ1JJUFRJT04gPSAiRC1CdXMgaXMgYSBtZXNzYWdlIGJ1cyBzeXN0ZW0sIGEgc2ltcGxlIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHRhbGsgdG8gb25lIGFub3RoZXIuIEluIGFkZGl0aW9uIHRvIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uLCBELUJ1cyBoZWxwcyBjb29yZGluYXRlIHByb2Nlc3MgbGlmZWN5Y2xlOyBpdCBtYWtlcyBpdCBzaW1wbGUgYW5kIHJlbGlhYmxlIHRvIGNvZGUgYSBcInNpbmdsZSBpbnN0YW5jZVwiIGFwcGxpY2F0aW9uIG9yIGRhZW1vbiwgYW5kIHRvIGxhdW5jaCBhcHBsaWNhdGlvbnMgYW5kIGRhZW1vbnMgb24gZGVtYW5kIHdoZW4gdGhlaXIgc2VydmljZXMgYXJlIG5lZWRlZC4iCi1IT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCi1ERVBFTkRTID0gImV4cGF0IHZpcnR1YWwvbGliaW50bCIKLVJERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlID0gIiIKLVJERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlc2RrID0gIiIKLVBBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyR7UE59LXB0ZXN0JywgJycsIGQpfSIKLUFMTE9XX0VNUFRZX2RidXMtcHRlc3QgPSAiMSIKLVJERVBFTkRTX2RidXMtcHRlc3RfY2xhc3MtdGFyZ2V0ID0gImRidXMtdGVzdC1wdGVzdCIKLQotU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgXAotICAgICAgICAgICBmaWxlOi8vb3MtdGVzdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1zdXBwb3J0LWxhcmdlLWZpbGUtZm9yLXN0YXQ2NC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyNmQwY2YzYTFjOTc4MmNiMGUzNDIxMDFmMDQ1MDQ0MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiNWZlZmEwOGE3N2VkZDc2Y2Q2NGQ4NzJkYjk0OWVlYmMwMmNmNmYzZjhiZTgyZTRiYmM2NDE3NDJhZjVkMzVmIgotCi1pbmhlcml0IHVzZXJhZGQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHVwZGF0ZS1yYy5kIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotCi1JTklUU0NSSVBUX05BTUUgPSAiZGJ1cy0xIgotSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDIgNSAzIDIgLiBzdG9wIDIwIDAgMSA2IC4iCi0KLXB5dGhvbiBfX2Fub255bW91cygpIHsKLSAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKLSAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCi19Ci0KLVVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCi1HUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBuZXRkZXYiCi1VU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLXNoZWxsIC9iaW4vZmFsc2UgXAotICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgbWVzc2FnZWJ1cyIKLQotQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5jb25mICR7c3lzY29uZmRpcn0vZGJ1cy0xL3Nlc3Npb24uY29uZiIKLQotREVCSUFOTkFNRV8ke1BOfSA9ICJkYnVzLTEiCi0KLVBBQ0tBR0VTID0rICIke1BOfS1saWIiCi0KLU9MRFBLR05BTUUgPSAiZGJ1cy14MTEiCi1PTERQS0dOQU1FX2NsYXNzLW5hdGl2ZXNkayA9ICIiCi0KLSMgZm9yIGNvbXBhdGliaWxpdHkKLVJQUk9WSURFU18ke1BOfSA9ICIke09MRFBLR05BTUV9IgotUlJFUExBQ0VTXyR7UE59ICs9ICIke09MRFBLR05BTUV9IgotCi1GSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZGJ1cy1kYWVtb24qIFwKLSAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXV1aWRnZW4gXAotICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtY2xlYW51cC1zb2NrZXRzIFwKLSAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXNlbmQgXAotICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbW9uaXRvciBcCi0gICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1sYXVuY2ggXAotICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtcnVuLXNlc3Npb24gXAotICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtdXBkYXRlLWFjdGl2YXRpb24tZW52aXJvbm1lbnQgXAotICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9kYnVzKiBcCi0gICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9IFwKLSAgICAgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gXAotICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMgXAotICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3Nlc3Npb24uZCBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXNzaW9uLmNvbmYgXAotICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLmQgXAotICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLmNvbmYgXAotICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfSBcCi0gICAgICAgICAgICAgICAke3N5c3RlbWRfdXNlcl91bml0ZGlyfSBcCi0iCi1GSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKLVJSRUNPTU1FTkRTXyR7UE59LWxpYiA9ICIke1BOfSIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2RidXMtMS4wL2luY2x1ZGUgJHtiaW5kaXJ9L2RidXMtdGVzdC10b29sIgotCi1wa2dfcG9zdGluc3RfZGJ1cygpIHsKLQkjIElmIGJvdGggc3lzdGVtZCBhbmQgc3lzdmluaXQgYXJlIGVuYWJsZWQsIG1hc2sgdGhlIGRidXMtMSBpbml0IHNjcmlwdAotICAgICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCi0JCWlmIFsgLW4gIiREIiBdOyB0aGVuCi0JCQlPUFRTPSItLXJvb3Q9JEQiCi0JCWZpCi0JCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGRidXMtMS5zZXJ2aWNlCi0JZmkKLQotCWlmIFsgLXogIiREIiBdICYmIFsgLWUgL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXSA7IHRoZW4KLQkJL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCi0JZmkKLX0KLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS10ZXN0cyBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhtbC1kb2NzIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtZG94eWdlbi1kb2NzIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXVkaXQgXAotICAgICAgICAgICAgICAgICIKLQotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZGlzYWJsZS1zZWxpbnV4IgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdsYXJnZWZpbGUnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgotUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgotUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPSAiIgotCi1QQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0sLS1kaXNhYmxlLXN5c3RlbWQgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyLHN5c3RlbWQiCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXggLS1lbmFibGUteDExLWF1dG9sYXVuY2gsLS13aXRob3V0LXggLS1kaXNhYmxlLXgxMS1hdXRvbGF1bmNoLCB2aXJ0dWFsL2xpYngxMSBsaWJzbSIKLVBBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgotUEFDS0FHRUNPTkZJR1t1c2VyLXNlc3Npb25dID0gIi0tZW5hYmxlLXVzZXItc2Vzc2lvbiAtLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyPSR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9LC0tZGlzYWJsZS11c2VyLXNlc3Npb24iCi0KLWRvX2luc3RhbGwoKSB7Ci0JYXV0b3Rvb2xzX2RvX2luc3RhbGwKLQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgotCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotCQlzZWQgJ3M6QGJpbmRpckA6JHtiaW5kaXJ9OicgPCAke1dPUktESVJ9L2RidXMtMS5pbml0ID4ke1dPUktESVJ9L2RidXMtMS5pbml0LnNoCi0JCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RidXMtMS5pbml0LnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kYnVzLTEKLQlmaQotCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KLQkJZm9yIGkgaW4gZGJ1cy50YXJnZXQud2FudHMgc29ja2V0cy50YXJnZXQud2FudHMgbXVsdGktdXNlci50YXJnZXQud2FudHM7IGRvIFwKLQkJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vJGk7IGRvbmUKLQkJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vYnVzL2RidXMuc2VydmljZSAke0J9L2J1cy9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS8KLQkJY2QgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vZGJ1cy50YXJnZXQud2FudHMvCi0JCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9kYnVzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAotCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vc29ja2V0cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKLQkJbG4gLWZzIC4uL2RidXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9kYnVzLnNlcnZpY2UKLQlmaQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcwotCWVjaG8gImQgbWVzc2FnZWJ1cyBtZXNzYWdlYnVzIDA3NTUgJHtsb2NhbHN0YXRlZGlyfS9ydW4vZGJ1cyBub25lIiBcCi0JICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X2RidXMKLQotCi0JbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKLQotCWNob3duIG1lc3NhZ2VidXM6bWVzc2FnZWJ1cyAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cwotCi0JY2hvd24gcm9vdDptZXNzYWdlYnVzICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKLQljaG1vZCA0NzU1ICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKLQotCSMgUmVtb3ZlIFJlZCBIYXQgaW5pdHNjcmlwdAotCXJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYy5kCi0KLQkjIFJlbW92ZSBlbXB0eSB0ZXN0ZXhlYyBkaXJlY3RvcnkgYXMgd2UgZG9uJ3QgYnVpbGQgdGVzdHMKLQlybSAtcmYgJHtEfSR7bGliZGlyfS9kYnVzLTEuMC90ZXN0Ci0KLQkjIFJlbW92ZSAvdmFyL3J1biBhcyBpdCBpcyBjcmVhdGVkIG9uIHN0YXJ0dXAKLQlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCi19Ci0KLWRvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsCi0KLQkjIGZvciBkYnVzLWdsaWItbmF0aXZlIGludHJvc3BlY3Rpb24gZ2VuZXJhdGlvbgotCWluc3RhbGwgLWQgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy8KLQkjIE4uQi4gaXMgYmVsb3cgaW5zdGFsbCBhY3R1YWxseSByZXF1aXJlZD8KLQlpbnN0YWxsIC1tIDA2NDQgYnVzL3Nlc3Npb24uY29uZiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL3Nlc3Npb24uY29uZgotCi0JIyBkYnVzLWdsaWItbmF0aXZlIGFuZCBkYnVzLWdsaWIgbmVlZCB0aGlzIHhtbCBmaWxlCi0JLi9idXMvZGJ1cy1kYWVtb24gLS1pbnRyb3NwZWN0ID4gJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbAotCQotCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKLQkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCi0Jcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAotfQotCi1kb19pbnN0YWxsX2NsYXNzLW5hdGl2ZXNkaygpIHsKLQlhdXRvdG9vbHNfZG9faW5zdGFsbAotCi0JIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAotCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KLQlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCi0KLQkjIFJlbW92ZSAvdmFyL3J1biB0byBhdm9pZCBRQSBlcnJvcgotCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KLX0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImJ1aWxkLWRlcHMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYwppbmRleCAxZGNlMmE1Li5iZGE3ZWI4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci5pbmMKQEAgLTE3LDYgKzE3LDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1saWJ0b21jcnlwdC1saWJ0b21tYXRoLW9yZGVyaW5nLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2luaXQgXAogICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXJrZXkuc2VydmljZSBcCiAgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhckAuc2VydmljZSBcCkBAIC00NCw5ICs0NSwxMiBAQAogU0JJTkNPTU1BTkRTID0gImRyb3BiZWFyIGRyb3BiZWFya2V5IGRyb3BiZWFyY29udmVydCIKIEJJTkNPTU1BTkRTID0gImRiY2xpZW50IHNzaCBzY3AiCiBFWFRSQV9PRU1BS0UgPSAnTVVMVEk9MSBTQ1BQUk9HUkVTUz0xIFBST0dSQU1TPSIke1NCSU5DT01NQU5EU30gJHtCSU5DT01NQU5EU30iJworCitQQUNLQUdFQ09ORklHID89ICIiCitQQUNLQUdFQ09ORklHW3N5c3RlbS1saWJ0b21dID0gIi0tZGlzYWJsZS1idW5kbGVkLWxpYnRvbSwtLWVuYWJsZS1idW5kbGVkLWxpYnRvbSxsaWJ0b21tYXRoIGxpYnRvbWNyeXB0IgorCiBFWFRSQV9PRUNPTkYgKz0gIlwKICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLWVuYWJsZS1wYW0nLCAnLS1kaXNhYmxlLXBhbScsIGQpfSIKLUNGTEFHUyArPSAiLURTRlRQU0VSVkVSX1BBVEg9XFwiJHtsaWJkaXJ9L29wZW5zc2gvc2Z0cC1zZXJ2ZXJcXCIiCiAKIGRvX2luc3RhbGwoKSB7CiAJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfSBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2gKaW5kZXggYjQ1MDEyMS4uNjBiMzAyYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaApAQCAtMTAsNyArMTAsNyBAQAogMjAxMy8wNS8yMwogUmVjZWl2ZWQgdGhpcyBmaXggZnJvbSBIIEogTHUuCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogCiAjIEhHIGNoYW5nZXNldCBwYXRjaAogIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZml4LWxpYnRvbWNyeXB0LWxpYnRvbW1hdGgtb3JkZXJpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZml4LWxpYnRvbWNyeXB0LWxpYnRvbW1hdGgtb3JkZXJpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5MzBmMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9maXgtbGlidG9tY3J5cHQtbGlidG9tbWF0aC1vcmRlcmluZy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIDJmZDhkMmFlZGFkMGM1MGNkZjFlNDNlZGQyMzg3ODc0YjcyMGFkNGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxNiBTZXAgMjAxNiAxMjoxODoyMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBmaXggbGlidG9tY3J5cHQvbGlidG9tbWF0aCBvcmRlcmluZworCitUbyBwcmV2ZW50IGJ1aWxkIGZhaWx1cmVzIHdoZW4gdXNpbmcgc3lzdGVtIGxpYnRvbSBsaWJyYXJpZXMgYW5kCitsaW5raW5nIHdpdGggLS1hcy1uZWVkZWQsIExJQlRPTV9MSUJTIHNob3VsZCBiZSBpbiB0aGUgb3JkZXIKKy1sdG9tY3J5cHQgLWx0b21tYXRoLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQsIGllIGxpYnMgc2hvdWxkIGJlCitwcmVwZW5kZWQgdG8gTElCVE9NX0xJQlMgYXMgdGhleSBhcmUgZm91bmQsIG5vdCBhcHBlbmRlZC4KKworTm90ZSB0aGF0IExJQlRPTV9MSUJTIGlzIG5vdCB1c2VkIHdoZW4gbGlua2luZyB3aXRoIHRoZSBidW5kbGVkCitsaWJ0b20gbGlicy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjZhYmU0Yy4uODViYjhiYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkwLDE2ICszOTAsMTYgQEAgQUNfQVJHX0VOQUJMRShidW5kbGVkLWxpYnRvbSwKKyAJCQlBQ19NU0dfTk9USUNFKEZvcmNpbmcgYnVuZGxlZCBsaWJ0b20qKQorIAkJZWxzZQorIAkJCUJVTkRMRURfTElCVE9NPTAKKy0JCQlBQ19DSEVDS19MSUIodG9tbWF0aCwgbXBfZXhwdG1vZCwgTElCVE9NX0xJQlM9IiRMSUJUT01fTElCUyAtbHRvbW1hdGgiLCAKKysJCQlBQ19DSEVDS19MSUIodG9tbWF0aCwgbXBfZXhwdG1vZCwgTElCVE9NX0xJQlM9Ii1sdG9tbWF0aCAkTElCVE9NX0xJQlMiLAorIAkJCQlbQUNfTVNHX0VSUk9SKFtNaXNzaW5nIHN5c3RlbSBsaWJ0b21tYXRoIGFuZCAtLWRpc2FibGUtYnVuZGxlZC1saWJ0b20gd2FzIHNwZWNpZmllZF0pXSApCistCQkJQUNfQ0hFQ0tfTElCKHRvbWNyeXB0LCByZWdpc3Rlcl9jaXBoZXIsIExJQlRPTV9MSUJTPSIkTElCVE9NX0xJQlMgLWx0b21jcnlwdCIsIAorKwkJCUFDX0NIRUNLX0xJQih0b21jcnlwdCwgcmVnaXN0ZXJfY2lwaGVyLCBMSUJUT01fTElCUz0iLWx0b21jcnlwdCAkTElCVE9NX0xJQlMiLAorIAkJCQlbQUNfTVNHX0VSUk9SKFtNaXNzaW5nIHN5c3RlbSBsaWJ0b21jcnlwdCBhbmQgLS1kaXNhYmxlLWJ1bmRsZWQtbGlidG9tIHdhcyBzcGVjaWZpZWRdKV0gKQorIAkJZmkKKyAJXSwKKyAJWworIAkJQlVORExFRF9MSUJUT009MAorLQkJQUNfQ0hFQ0tfTElCKHRvbW1hdGgsIG1wX2V4cHRtb2QsIExJQlRPTV9MSUJTPSIkTElCVE9NX0xJQlMgLWx0b21tYXRoIiwgQlVORExFRF9MSUJUT009MSkKKy0JCUFDX0NIRUNLX0xJQih0b21jcnlwdCwgcmVnaXN0ZXJfY2lwaGVyLCBMSUJUT01fTElCUz0iJExJQlRPTV9MSUJTIC1sdG9tY3J5cHQiLCBCVU5ETEVEX0xJQlRPTT0xKQorKwkJQUNfQ0hFQ0tfTElCKHRvbW1hdGgsIG1wX2V4cHRtb2QsIExJQlRPTV9MSUJTPSItbHRvbW1hdGggJExJQlRPTV9MSUJTIiwgQlVORExFRF9MSUJUT009MSkKKysJCUFDX0NIRUNLX0xJQih0b21jcnlwdCwgcmVnaXN0ZXJfY2lwaGVyLCBMSUJUT01fTElCUz0iLWx0b21jcnlwdCAkTElCVE9NX0xJQlMiLCBCVU5ETEVEX0xJQlRPTT0xKQorIAldCisgKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvaW5pdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0CmluZGV4IGU4ZmVkM2YuLjQzNGJkNmIgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0CkBAIC02MiwxMyArNjIsMTMgQEAKICAgICAgICAgaWYgWyAtZiAiJERST1BCRUFSX1JTQUtFWSIgLWEgISAtcyAiJERST1BCRUFSX1JTQUtFWSIgXTsgdGhlbgogICAgICAgICAgICAgICAgIHJtICREUk9QQkVBUl9SU0FLRVkgfHwgdHJ1ZQogICAgICAgICBmaQotICAgICAgICB0ZXN0IC1mICREUk9QQkVBUl9SU0FLRVkgfHwgZHJvcGJlYXJrZXkgLXQgcnNhIC1mICREUk9QQkVBUl9SU0FLRVkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZIHx8IGRyb3BiZWFya2V5IC10IHJzYSAtZiAkRFJPUEJFQVJfUlNBS0VZICREUk9QQkVBUl9SU0FLRVlfQVJHUwogCTs7CiAgICAgZHNhKQogICAgICAgICBpZiBbIC1mICIkRFJPUEJFQVJfRFNTS0VZIiAtYSAhIC1zICIkRFJPUEJFQVJfRFNTS0VZIiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgcm0gJERST1BCRUFSX0RTU0tFWSB8fCB0cnVlCiAgICAgICAgIGZpCi0gICAgICAgIHRlc3QgLWYgJERST1BCRUFSX0RTU0tFWSB8fCBkcm9wYmVhcmtleSAtdCBkc3MgLWYgJERST1BCRUFSX0RTU0tFWQorICAgICAgICB0ZXN0IC1mICREUk9QQkVBUl9EU1NLRVkgfHwgZHJvcGJlYXJrZXkgLXQgZHNzIC1mICREUk9QQkVBUl9EU1NLRVkgJERST1BCRUFSX0RTU0tFWV9BUkdTCiAJOzsKICAgZXNhYwogZG9uZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL3N1cHBvcnQtb3V0LW9mLXRyZWUtYnVpbGRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL3N1cHBvcnQtb3V0LW9mLXRyZWUtYnVpbGRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNmVmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvc3VwcG9ydC1vdXQtb2YtdHJlZS1idWlsZHMucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbTogPT9VVEYtOD9xP0hlbnJpaz0yME5vcmRzdHI9QzM9QjZtPz0gPGhlbnJpa0BrbmMubnU+CitEYXRlOiBXZWQsIDExIE1heSAyMDE2IDEyOjM1OjA2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFN1cHBvcnQgb3V0LW9mLXRyZWUgYnVpbGRzIHVzaWduIGJ1bmRsZWQgbGlidG9tCisKK1doZW4gYnVpbGRpbmcgb3V0LW9mLXRyZWUgd2UgbmVlZCBib3RoIHNvdXJjZSBhbmQgZ2VuZXJhdGVkCitmb2xkZXJzIGluIGluY2x1ZGUgcGF0aHMgdG8gZmluZCBib3RoIGRpc3RyaWJ1dGVkIGFuZCBnZW5lcmF0ZWQKK2hlYWRlcnMuCisKKworCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgbGlidG9tY3J5cHQvTWFrZWZpbGUuaW4gfCAyICstCisgbGlidG9tbWF0aC9NYWtlZmlsZS5pbiAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9NYWtlZmlsZS5pbiBiL2xpYnRvbWNyeXB0L01ha2VmaWxlLmluCitpbmRleCAzMDU2ZWYwLi43OTcwNzAwIDEwMDY0NAorLS0tIGEvbGlidG9tY3J5cHQvTWFrZWZpbGUuaW4KKysrKyBiL2xpYnRvbWNyeXB0L01ha2VmaWxlLmluCitAQCAtMTksNyArMTksNyBAQCBzcmNkaXI9QHNyY2RpckAKKyAKKyAjIENvbXBpbGF0aW9uIGZsYWdzLiBOb3RlIHRoZSArPSBkb2VzIG5vdCB3cml0ZSBvdmVyIHRoZSB1c2VyJ3MgQ0ZMQUdTIQorICMgVGhlIHJlc3Qgb2YgdGhlIGZsYWdzIGNvbWUgZnJvbSB0aGUgcGFyZW50IERyb3BiZWFyIG1ha2VmaWxlCistQ0ZMQUdTICs9IC1jIC1JJChzcmNkaXIpL3NyYy9oZWFkZXJzLyAtSSQoc3JjZGlyKS8uLi8gLURMVENfU09VUkNFIC1JJChzcmNkaXIpLy4uL2xpYnRvbW1hdGgvCisrQ0ZMQUdTICs9IC1jIC1Jc3JjL2hlYWRlcnMvIC1JJChzcmNkaXIpL3NyYy9oZWFkZXJzLyAtSS4uLyAtSSQoc3JjZGlyKS8uLi8gLURMVENfU09VUkNFIC1JLi4vbGlidG9tbWF0aC8gLUkkKHNyY2RpcikvLi4vbGlidG9tbWF0aC8KKyAKKyAjIGFkZGl0aW9uYWwgd2FybmluZ3MgKG5ld2VyIEdDQyAzLjQgYW5kIGhpZ2hlcikKKyBpZmRlZiBHQ0NfMzQKK2RpZmYgLS1naXQgYS9saWJ0b21tYXRoL01ha2VmaWxlLmluIGIvbGlidG9tbWF0aC9NYWtlZmlsZS5pbgoraW5kZXggMDZhYmE2OC4uMDE5YzUwYiAxMDA2NDQKKy0tLSBhL2xpYnRvbW1hdGgvTWFrZWZpbGUuaW4KKysrKyBiL2xpYnRvbW1hdGgvTWFrZWZpbGUuaW4KK0BAIC05LDcgKzksNyBAQCBWUEFUSD1Ac3JjZGlyQAorIHNyY2Rpcj1Ac3JjZGlyQAorIAorICMgU28gdGhhdCBsaWJ0b21tYXRoIGNhbiBpbmNsdWRlIERyb3BiZWFyIGhlYWRlcnMgZm9yIG9wdGlvbnMgYW5kIG1fYnVybigpCistQ0ZMQUdTICs9IC1JJChzcmNkaXIpLy4uL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzLyAtSSQoc3JjZGlyKS8uLi8KKytDRkxBR1MgKz0gLUkuIC1JJChzcmNkaXIpIC1JLi4vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvIC1JJChzcmNkaXIpLy4uL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzLyAtSS4uLyAtSSQoc3JjZGlyKS8uLi8KKyAKKyBpZm5kZWYgSUdOT1JFX1NQRUVECisgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNS43MS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjcxLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzMyNTc5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjcxLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1yZXF1aXJlIGRyb3BiZWFyLmluYwotCi1TUkNfVVJJW21kNXN1bV0gPSAiMmNjYzBhMmYzZTM3Y2EyMjFkYjEyYzVhZjZhODgxMzciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzc2MjE0MTY5YzBlMTg3ZWU5ZjQ4YWUxYTk5YjNmODM1MDE2YWQ1Yjk4ZWRlNGJmZDFjZjU4MWRlYmE3ODNhZiIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTYuNzQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNi43NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzAyMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTYuNzQuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGRyb3BiZWFyLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vc3VwcG9ydC1vdXQtb2YtdHJlZS1idWlsZHMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YWQwMTcyNzMxZTBmMTY2MjM5Mzc4MDQ2NDNiNWJkOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNzIwZWE1NGVkMDA5YWY4MTI3MDFiY2MyOTBhMmE2MDFkNWMxMDdkMTI5OTNlNWQ5MmMwZjVmODFmNzE4ODkxIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQtMi4xLjAvYXV0b3Rvb2xzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1OTk2OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQtMi4xLjAvYXV0b3Rvb2xzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotQXZvaWQgdXNpbmcgZXhwYXQncyBtNCBmaWxlcwotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQotV29ya2Fyb3VuZCBzcGVjaWZpYyB0byBvdXIgYnVpbGQgc3lzdGVtLgotCi1TaWduZWQtb2ZmLWJ5OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgotCi1VcGRhdGVkIHRvIGFwcGx5IG92ZXIgZXhwYXQgMi4xLjAKLQotU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KLQotZGlmZiAtTnVyZCBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4gZXhwYXQtMi4xLjAvY29uZmlndXJlLmluCi0tLS0gZXhwYXQtMi4xLjAvY29uZmlndXJlLmluCTIwMTItMDMtMDQgMDE6NDU6NTMuMDAwMDAwMDAwICswMjAwCi0rKysgZXhwYXQtMi4xLjAvY29uZmlndXJlLmluCTIwMTItMDUtMTAgMjE6MDQ6NDQuMDAwMDAwMDAwICswMzAwCi1AQCAtNTEsOCArNTEsNiBAQAotIAotIEFDX0NPTkZJR19IRUFERVIoZXhwYXRfY29uZmlnLmgpCi0gCi0tc2luY2x1ZGUoY29uZnRvb2xzL2FjX2NfYmlnZW5kaWFuX2Nyb3NzLm00KQotLQotIEFDX0xJQlRPT0xfV0lOMzJfRExMCi0gQUNfUFJPR19MSUJUT09MCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQtMi4xLjAvZXhwYXQtQ1ZFLTIwMTUtMTI4My5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9leHBhdC1DVkUtMjAxNS0xMjgzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBhY2I2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9leHBhdC1DVkUtMjAxNS0xMjgzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotTXVsdGlwbGUgaW50ZWdlciBvdmVyZmxvd3MgaW4gdGhlIFhNTF9HZXRCdWZmZXIgZnVuY3Rpb24gaW4gRXhwYXQgCi10aHJvdWdoIDIuMS4wLCBhbGxvdyByZW1vdGUgYXR0YWNrZXJzIHRvIGNhdXNlIGEgZGVuaWFsIG9mIHNlcnZpY2UgCi0oaGVhcC1iYXNlZCBidWZmZXIgb3ZlcmZsb3cpIG9yIHBvc3NpYmx5IGhhdmUgdW5zcGVjaWZpZWQgb3RoZXIgCi1pbXBhY3QgdmlhIGNyYWZ0ZWQgWE1MIGRhdGEuCi0KLUNWU1N2MjogIChBVjpOL0FDOk0vQXU6Ti9DOlAvSTpQL0E6UCkKLQotQ1ZFOiBDVkUtMjAxNS0xMjgzCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IEVyaWMgUmFobSA8ZXJhaG1AbW96aWxsYS5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBaaGl4aW9uZyBDaGkgPHpoaXhpb25nLmNoaUB3aW5kaXJ2ZXIuY29tPgotCi1JbmRleDogZXhwYXQtMi4xLjAvbGliL3htbHBhcnNlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBleHBhdC0yLjEuMC5vcmlnL2xpYi94bWxwYXJzZS5jCTIwMTItMDMtMTEgMTM6MTM6MTIuMDAwMDAwMDAwICswODAwCi0rKysgZXhwYXQtMi4xLjAvbGliL3htbHBhcnNlLmMJMjAxNS0xMi0yMyAxMDoyOTowNy4zNDczNjEzMjkgKzA4MDAKLUBAIC0xNjc4LDYgKzE2NzgsMTIgQEAKLSB2b2lkICogWE1MQ0FMTAotIFhNTF9HZXRCdWZmZXIoWE1MX1BhcnNlciBwYXJzZXIsIGludCBsZW4pCi0gewotKy8qIEJFR0lOIE1PWklMTEEgQ0hBTkdFIChzYW5pdHkgY2hlY2sgbGVuKSAqLwotKyAgaWYgKGxlbiA8IDApIHsKLSsgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX05PX01FTU9SWTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rLyogRU5EIE1PWklMTEEgQ0hBTkdFICovCi0gICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKLSAgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX1NVU1BFTkRFRDsKLUBAIC0xNjg5LDggKzE2OTUsMTMgQEAKLSAgIH0KLSAKLSAgIGlmIChsZW4gPiBidWZmZXJMaW0gLSBidWZmZXJFbmQpIHsKLS0gICAgLyogRklYTUUgYXZvaWQgaW50ZWdlciBvdmVyZmxvdyAqLwotICAgICBpbnQgbmVlZGVkU2l6ZSA9IGxlbiArIChpbnQpKGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7Ci0rLyogQkVHSU4gTU9aSUxMQSBDSEFOR0UgKHNhbml0eSBjaGVjayBuZWVkZWRTaXplKSAqLwotKyAgICBpZiAobmVlZGVkU2l6ZSA8IDApIHsKLSsgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOwotKyAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rLyogRU5EIE1PWklMTEEgQ0hBTkdFICovCi0gI2lmZGVmIFhNTF9DT05URVhUX0JZVEVTCi0gICAgIGludCBrZWVwID0gKGludCkoYnVmZmVyUHRyIC0gYnVmZmVyKTsKLSAKLUBAIC0xNzE5LDcgKzE3MzAsMTUgQEAKLSAgICAgICAgIGJ1ZmZlclNpemUgPSBJTklUX0JVRkZFUl9TSVpFOwotICAgICAgIGRvIHsKLSAgICAgICAgIGJ1ZmZlclNpemUgKj0gMjsKLS0gICAgICB9IHdoaWxlIChidWZmZXJTaXplIDwgbmVlZGVkU2l6ZSk7Ci0rLyogQkVHSU4gTU9aSUxMQSBDSEFOR0UgKHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBvdmVyZmxvdykgKi8KLSsgICAgICB9IHdoaWxlIChidWZmZXJTaXplIDwgbmVlZGVkU2l6ZSAmJiBidWZmZXJTaXplID4gMCk7Ci0rLyogRU5EIE1PWklMTEEgQ0hBTkdFICovCi0rLyogQkVHSU4gTU9aSUxMQSBDSEFOR0UgKHNhbml0eSBjaGVjayBidWZmZXJTaXplKSAqLwotKyAgICAgIGlmIChidWZmZXJTaXplIDw9IDApIHsKLSsgICAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICB9Ci0rLyogRU5EIE1PWklMTEEgQ0hBTkdFICovCi0gICAgICAgbmV3QnVmID0gKGNoYXIgKilNQUxMT0MoYnVmZmVyU2l6ZSk7Ci0gICAgICAgaWYgKG5ld0J1ZiA9PSAwKSB7Ci0gICAgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC5pbmMKaW5kZXggNGJkNjBhMi4uZmU5ZDdlNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCkBAIC00LDkgKzQsOCBAQAogU0VDVElPTiA9ICJsaWJzIgogTElDRU5TRSA9ICJNSVQiCiAKLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2V4cGF0L2V4cGF0LSR7UFZ9LnRhci5neiBcCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9leHBhdC9leHBhdC0ke1BWfS50YXIuYnoyIFwKICAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9leHBhdC1DVkUtMjAxNS0xMjgzLnBhdGNoIFwKIAkgICIKIAogaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgZ3ppcG5hdGl2ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0L2F1dG90b29scy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzYzViYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorQXZvaWQgdXNpbmcgZXhwYXQncyBtNCBmaWxlcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorV29ya2Fyb3VuZCBzcGVjaWZpYyB0byBvdXIgYnVpbGQgc3lzdGVtLgorCitTaWduZWQtb2ZmLWJ5OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitVcGRhdGVkIHRvIGFwcGx5IG92ZXIgZXhwYXQgMi4xLjAKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworZGlmZiAtTnVyZCBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4gZXhwYXQtMi4xLjAvY29uZmlndXJlLmluCistLS0gZXhwYXQtMi4xLjAvY29uZmlndXJlLmFjCTIwMTItMDMtMDQgMDE6NDU6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZXhwYXQtMi4xLjAvY29uZmlndXJlLmFjCTIwMTItMDUtMTAgMjE6MDQ6NDQuMDAwMDAwMDAwICswMzAwCitAQCAtNTEsOCArNTEsNiBAQAorIAorIEFDX0NPTkZJR19IRUFERVIoZXhwYXRfY29uZmlnLmgpCisgCistc2luY2x1ZGUoY29uZnRvb2xzL2FjX2NfYmlnZW5kaWFuX2Nyb3NzLm00KQorLQorIEFDX0xJQlRPT0xfV0lOMzJfRExMCisgQUNfUFJPR19MSUJUT09MCisgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NTg3NDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1yZXF1aXJlIGV4cGF0LmluYwotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWI3MWY2ODE3MTNkMTI1NmUxYzIzYjA4OTA5MjA4NzQiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJkZDdkYWI3YTVmZWE5N2QyYTZhNDNmNTExNDQ5YjdjZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4MjM3MDU0NzJmODE2ZGYyMWM4ZjZhYTAyNmRkMTYyYjI4MDgwNjgzOGJiNTViMzQzMmIwZmIxZmNjYTdlYjg2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjFhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4yLjAuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGV4cGF0LmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWMzZWU1NTljNmY5ZGNlZTEwNDNlYWQxMTIxMzlmNGYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZjQ3ODQxYzgyOWZhY2IzNDZlYjZlM2ZhYjUyMTJlMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOWU1MGZmMmQxOWIzNTM4YmQyMTI3OTAyYTg5OTg3NDc0ZTFhNGRiOGU0M2E2NmE0ZDFhNzEyYWI5YTUwNGZmIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Z0cy9mdHMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZnRzL2Z0cy5iYgppbmRleCBjMzAxNzIwLi45ZDgyMzBmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZnRzL2Z0cy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZnRzL2Z0cy5iYgpAQCAtMSw3ICsxLDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDE1IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCiAKLURFU0NSSVBUSU9OID0gImtlaXRoIGJvc3RpYydzIFBPU0lYIGZpbGUgdHJlZSBzdHJlYW0gb3BlcmF0aW9ucyBsaWJyYXJ5IgorU1VNTUFSWSA9ICJQT1NJWCBmaWxlIHRyZWUgc3RyZWFtIG9wZXJhdGlvbnMgbGlicmFyeSIKIEhPTUVQQUdFID0gImh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9hL2Jvc3RpYy5jb20va2VpdGhib3N0aWMiCiBMSUNFTlNFID0gIkJTRC00LUNsYXVzZSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2Z0cy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MzY7bWQ1PTI1MzJlZGRiM2QxYTIxOTA1NzIzYTQwMTFlYzRlMDg1IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9hY2xvY2FsX3ZlcnNpb24ucGF0Y2gKaW5kZXggNzI5M2Y1Yi4uNDlhMTBmNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoCkBAIC01LDcgKzUsNyBAQAogCiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCiAKLVNpZ25lZC1vZmYtYnkgU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgogCiBJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKaW5kZXggMDY4NjE0OS4uZmQ1ZmVlYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKQEAgLTYsNyArNiw3IEBACiAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQogCi1TaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KIAogZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2V4dGVuc2lvbnMubTQKIC0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAwNi0xMS0yNyAwOToxNDozOC4wMDAwMDAwMDAgLTA4MDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS42L2FkZC13aXRoLWJpc29ubG9jYWxlZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjguMS9hZGQtd2l0aC1iaXNvbmxvY2FsZWRpci5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjYvYWRkLXdpdGgtYmlzb25sb2NhbGVkaXIucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS44LjEvYWRkLXdpdGgtYmlzb25sb2NhbGVkaXIucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS42L3BhcmFsbGVsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjguMS9wYXJhbGxlbC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjYvcGFyYWxsZWwucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS44LjEvcGFyYWxsZWwucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvQ09QWUlORyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvQ09QWUlORwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQxMWQxZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L0NPUFlJTkcKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvTWFrZWZpbGUuaW4uaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MDZiYTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ2NSArMCwwIEBACi0jIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCi0jIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcsIDIwMDktMjAxMCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KLSMKLSMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCi0jIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci0jIGZ1bmN0aW9uYWxpdHkuCi0jIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIEdOVSBnZXR0ZXh0IGlzIGNvdmVyZWQgYnkgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBpcyAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMKLSMgT3JpZ2luOiBnZXR0ZXh0LTAuMTkKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTkKLQotUEFDS0FHRSA9IEBQQUNLQUdFQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi0KLVNFRCA9IEBTRURACi1TSEVMTCA9IC9iaW4vc2gKLUBTRVRfTUFLRUAKLQotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVZQQVRIID0gQHNyY2RpckAKLQotcHJlZml4ID0gQHByZWZpeEAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9wbwotCi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotCi1NS0RJUl9QID0gQE1LRElSX1BACi0KLUdNU0dGTVRfID0gQEdNU0dGTVRACi1HTVNHRk1UX25vID0gQEdNU0dGTVRACi1HTVNHRk1UX3llcyA9IEBHTVNHRk1UXzAxNUAKLUdNU0dGTVQgPSAkKEdNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCi1NU0dGTVRfID0gQE1TR0ZNVEAKLU1TR0ZNVF9ubyA9IEBNU0dGTVRACi1NU0dGTVRfeWVzID0gQE1TR0ZNVF8wMTVACi1NU0dGTVQgPSAkKE1TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKLVhHRVRURVhUXyA9IEBYR0VUVEVYVEAKLVhHRVRURVhUX25vID0gQFhHRVRURVhUQAotWEdFVFRFWFRfeWVzID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUID0gJChYR0VUVEVYVF8kKFVTRV9NU0dDVFhUKSkKLU1TR01FUkdFID0gbXNnbWVyZ2UKLU1TR01FUkdFX1VQREFURSA9IEBNU0dNRVJHRUAgLS11cGRhdGUKLU1TR0lOSVQgPSBtc2dpbml0Ci1NU0dDT05WID0gbXNnY29udgotTVNHRklMVEVSID0gbXNnZmlsdGVyCi0KLVBPRklMRVMgPSBAUE9GSUxFU0AKLUdNT0ZJTEVTID0gQEdNT0ZJTEVTQAotVVBEQVRFUE9GSUxFUyA9IEBVUERBVEVQT0ZJTEVTQAotRFVNTVlQT0ZJTEVTID0gQERVTU1ZUE9GSUxFU0AKLURJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbi5pbiByZW1vdmUtcG90Y2RhdGUuc2luIFwKLSQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTEpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTIpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTMpCi1ESVNURklMRVMgPSAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzIFBPVEZJTEVTLmluIFwKLSQoUE9GSUxFUykgJChHTU9GSUxFUykgXAotJChESVNURklMRVMuZXh0cmExKSAkKERJU1RGSUxFUy5leHRyYTIpICQoRElTVEZJTEVTLmV4dHJhMykKLQotUE9URklMRVMgPSBcCi0KLUNBVEFMT0dTID0gQENBVEFMT0dTQAotCi1QT0ZJTEVTREVQU18gPSAkKHNyY2RpcikvJChET01BSU4pLnBvdAotUE9GSUxFU0RFUFNfeWVzID0gJChQT0ZJTEVTREVQU18pCi1QT0ZJTEVTREVQU19ubyA9Ci1QT0ZJTEVTREVQUyA9ICQoUE9GSUxFU0RFUFNfJChQT19ERVBFTkRTX09OX1BPVCkpCi0KLURJU1RGSUxFU0RFUFNfID0gdXBkYXRlLXBvCi1ESVNURklMRVNERVBTX3llcyA9ICQoRElTVEZJTEVTREVQU18pCi1ESVNURklMRVNERVBTX25vID0KLURJU1RGSUxFU0RFUFMgPSAkKERJU1RGSUxFU0RFUFNfJChESVNUX0RFUEVORFNfT05fVVBEQVRFX1BPKSkKLQotIyBNYWtldmFycyBnZXRzIGluc2VydGVkIGhlcmUuIChEb24ndCByZW1vdmUgdGhpcyBsaW5lISkKLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAucG8gLmdtbyAubW8gLnNlZCAuc2luIC5ub3AgLnBvLWNyZWF0ZSAucG8tdXBkYXRlCi0KLS5wby5tbzoKLQlAZWNobyAiJChNU0dGTVQpIC1jIC1vICRAICQ8IjsgXAotCSQoTVNHRk1UKSAtYyAtbyB0LSRAICQ8ICYmIG12IHQtJEAgJEAKLQotLnBvLmdtbzoKLQlAbGFuZz1gZWNobyAkKiB8IHNlZCAtZSAncywuKi8sLCdgOyBcCi0JdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCi0JZWNobyAiJCR7Y2RjbWR9cm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC0tdmVyYm9zZSAtbyAkJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8iOyBcCi0JY2QgJChzcmNkaXIpICYmIHJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8gJiYgbXYgdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30uZ21vCi0KLS5zaW4uc2VkOgotCXNlZCAtZSAnL14jL2QnICQ8ID4gdC0kQAotCW12IHQtJEAgJEAKLQotCi1hbGw6IGFsbC1AVVNFX05MU0AKLQotYWxsLXllczogc3RhbXAtcG8KLWFsbC1ubzoKLQotIyBFbnN1cmUgdGhhdCB0aGUgZ2V0dGV4dCBtYWNyb3MgYW5kIHRoaXMgTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCi1DSEVDS19NQUNST19WRVJTSU9OID0gXAotCXRlc3QgIiQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSIgPSAiQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIFwKLQkgIHx8IHsgZWNobyAiKioqIGVycm9yOiBnZXR0ZXh0IGluZnJhc3RydWN0dXJlIG1pc21hdGNoOiB1c2luZyBhIE1ha2VmaWxlLmluLmluIGZyb20gZ2V0dGV4dCB2ZXJzaW9uICQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSBidXQgdGhlIGF1dG9jb25mIG1hY3JvcyBhcmUgZnJvbSBnZXR0ZXh0IHZlcnNpb24gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIDE+JjI7IFwKLQkgICAgICAgZXhpdCAxOyBcCi0JICAgICB9Ci0KLSMgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgb25seSBjcmVhdGVkIHdoZW4gbmVlZGVkLiBXaGVuIHhnZXR0ZXh0IGZpbmRzIG5vCi0jIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLCBubyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBjcmVhdGVkIChiZWNhdXNlCi0jIHdlIGRvbid0IHdhbnQgdG8gYm90aGVyIHRyYW5zbGF0b3JzIHdpdGggZW1wdHkgUE9UIGZpbGVzKS4gV2UgYXNzdW1lIHRoYXQKLSMgTElOR1VBUyBpcyBlbXB0eSBpbiB0aGlzIGNhc2UsIGkuZS4gJChQT0ZJTEVTKSBhbmQgJChHTU9GSUxFUykgYXJlIGVtcHR5LgotIyBJbiB0aGlzIGNhc2UsIHN0YW1wLXBvIGlzIGEgbm9wIChpLmUuIGEgcGhvbnkgdGFyZ2V0KS4KLQotIyBzdGFtcC1wbyBpcyBhIHRpbWVzdGFtcCBkZW5vdGluZyB0aGUgbGFzdCB0aW1lIGF0IHdoaWNoIHRoZSBDQVRBTE9HUyBoYXZlCi0jIGJlZW4gbG9vc2VseSB1cGRhdGVkLiBJdHMgcHVycG9zZSBpcyB0aGF0IHdoZW4gYSBkZXZlbG9wZXIgb3IgdHJhbnNsYXRvcgotIyBjaGVja3Mgb3V0IHRoZSBwYWNrYWdlIHZpYSBDVlMsIGFuZCB0aGUgJChET01BSU4pLnBvdCBmaWxlIGlzIG5vdCBpbiBDVlMsCi0jICJtYWtlIiB3aWxsIHVwZGF0ZSB0aGUgJChET01BSU4pLnBvdCBhbmQgdGhlICQoQ0FUQUxPR1MpLCBidXQgc3Vic2VxdWVudAotIyBpbnZvY2F0aW9ucyBvZiAibWFrZSIgd2lsbCBkbyBub3RoaW5nLiBUaGlzIHRpbWVzdGFtcCB3b3VsZCBub3QgYmUgbmVjZXNzYXJ5Ci0jIGlmIHVwZGF0aW5nIHRoZSAkKENBVEFMT0dTKSB3b3VsZCBhbHdheXMgdG91Y2ggdGhlbTsgaG93ZXZlciwgdGhlIHJ1bGUgZm9yCi0jICQoUE9GSUxFUykgaGFzIGJlZW4gZGVzaWduZWQgdG8gbm90IHRvdWNoIGZpbGVzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZQotIyBjaGFuZ2VkLgotc3RhbXAtcG86ICQoc3JjZGlyKS8kKERPTUFJTikucG90Ci0JQCQoQ0hFQ0tfTUFDUk9fVkVSU0lPTikKLQl0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgXAotCSAgdGVzdCAteiAiJChHTU9GSUxFUykiIHx8ICQoTUFLRSkgJChHTU9GSUxFUykKLQlAdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IHsgXAotCSAgZWNobyAidG91Y2ggc3RhbXAtcG8iICYmIFwKLQkgIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtcG9UICYmIFwKLQkgIG12IHN0YW1wLXBvVCBzdGFtcC1wbzsgXAotCX0KLQotIyBOb3RlOiBUYXJnZXQgJ2FsbCcgbXVzdCBub3QgZGVwZW5kIG9uIHRhcmdldCAnJChET01BSU4pLnBvdC11cGRhdGUnLAotIyBvdGhlcndpc2UgcGFja2FnZXMgbGlrZSBHQ0MgY2FuIG5vdCBiZSBidWlsdCBpZiBvbmx5IHBhcnRzIG9mIHRoZSBzb3VyY2UKLSMgaGF2ZSBiZWVuIGRvd25sb2FkZWQuCi0KLSMgVGhpcyB0YXJnZXQgcmVidWlsZHMgJChET01BSU4pLnBvdDsgaXQgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KLSMgTm90ZSB0aGF0ICQoRE9NQUlOKS5wb3QgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCi0jIFRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgdGhlIHBhY2thZ2UgeHl6IGlzIGEgR05VIG9uZSBpcyBiYXNlZCBvbiB0aGUKLSMgaGV1cmlzdGljIHdoZXRoZXIgc29tZSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG1lbnRpb25zICJHTlUgeHl6Ii4KLSMgSWYgR05VICdmaW5kJyBpcyBhdmFpbGFibGUsIHdlIGF2b2lkIGdyZXBwaW5nIHRocm91Z2ggbW9uc3RlciBmaWxlcy4KLSQoRE9NQUlOKS5wb3QtdXBkYXRlOiAkKFBPVEZJTEVTKSAkKHNyY2RpcikvUE9URklMRVMuaW4gcmVtb3ZlLXBvdGNkYXRlLnNlZAotCXBhY2thZ2VfZ251PSIkKFBBQ0tBR0VfR05VKSI7IFwKLQl0ZXN0IC1uICIkJHBhY2thZ2VfZ251IiB8fCB7IFwKLQkgIGlmIHsgaWYgKExDX0FMTD1DIGZpbmQgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8IGdyZXAgR05VID4vZGV2L251bGw7IHRoZW4gXAotCQkgTENfQUxMPUMgZmluZCAtTCAkKHRvcF9zcmNkaXIpIC1tYXhkZXB0aCAxIC10eXBlIGYgXAotCQkJICAgICAgIC1zaXplIC0xMDAwMDAwMGMgLWV4ZWMgZ3JlcCAnR05VIEBQQUNLQUdFQCcgXAotCQkJICAgICAgIC9kZXYvbnVsbCAne30nICc7JyAyPi9kZXYvbnVsbDsgXAotCSAgICAgICBlbHNlIFwKLQkJIExDX0FMTD1DIGdyZXAgJ0dOVSBAUEFDS0FHRUAnICQodG9wX3NyY2RpcikvKiAyPi9kZXYvbnVsbDsgXAotCSAgICAgICBmaTsgXAotCSAgICAgfSB8IGdyZXAgLXYgJ2xpYnRvb2w6JyA+L2Rldi9udWxsOyB0aGVuIFwKLQkgICAgIHBhY2thZ2VfZ251PXllczsgXAotCSAgIGVsc2UgXAotCSAgICAgcGFja2FnZV9nbnU9bm87IFwKLQkgICBmaTsgXAotCX07IFwKLQlpZiB0ZXN0ICIkJHBhY2thZ2VfZ251IiA9ICJ5ZXMiOyB0aGVuIFwKLQkgIHBhY2thZ2VfcHJlZml4PSdHTlUgJzsgXAotCWVsc2UgXAotCSAgcGFja2FnZV9wcmVmaXg9Jyc7IFwKLQlmaTsgXAotCWlmIHRlc3QgLW4gJyQoTVNHSURfQlVHU19BRERSRVNTKScgfHwgdGVzdCAnJChQQUNLQUdFX0JVR1JFUE9SVCknID0gJ0AnUEFDS0FHRV9CVUdSRVBPUlQnQCc7IHRoZW4gXAotCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKE1TR0lEX0JVR1NfQUREUkVTUyknOyBcCi0JZWxzZSBcCi0JICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoUEFDS0FHRV9CVUdSRVBPUlQpJzsgXAotCWZpOyBcCi0JY2FzZSBgJChYR0VUVEVYVCkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCi0JICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC01XSB8IDAuMVswLTVdLiogfCAwLjE2IHwgMC4xNi5bMC0xXSopIFwKLQkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCi0JICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKLQkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKLQkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKLQkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKLQkgICAgOzsgXAotCSAgKikgXAotCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKLQkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAotCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAotCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAotCSAgICAgIC0tcGFja2FnZS1uYW1lPSIkJHtwYWNrYWdlX3ByZWZpeH1AUEFDS0FHRUAiIFwKLQkgICAgICAtLXBhY2thZ2UtdmVyc2lvbj0nQFZFUlNJT05AJyBcCi0JICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCi0JICAgIDs7IFwKLQllc2FjCi0JdGVzdCAhIC1mICQoRE9NQUlOKS5wbyB8fCB7IFwKLQkgIGlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAotCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoc3JjZGlyKS8kKERPTUFJTikucG90ID4gJChET01BSU4pLjFwbyAmJiBcCi0JICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChET01BSU4pLnBvID4gJChET01BSU4pLjJwbyAmJiBcCi0JICAgIGlmIGNtcCAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChET01BSU4pLnBvOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKHNyY2RpcikvJChET01BSU4pLnBvdCAmJiBcCi0JICAgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCi0JICAgIGZpOyBcCi0JICBlbHNlIFwKLQkgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCi0JICBmaTsgXAotCX0KLQotIyBUaGlzIHJ1bGUgaGFzIG5vIGRlcGVuZGVuY2llczogd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgJChET01BSU4pLnBvdCBhdAotIyBldmVyeSAibWFrZSIgaW52b2NhdGlvbiwgb25seSBjcmVhdGUgaXQgd2hlbiBpdCBpcyBtaXNzaW5nLgotIyBPbmx5ICJtYWtlICQoRE9NQUlOKS5wb3QtdXBkYXRlIiBvciAibWFrZSBkaXN0IiB3aWxsIGZvcmNlIGFuIHVwZGF0ZS4KLSQoc3JjZGlyKS8kKERPTUFJTikucG90OgotCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKLQotIyBUaGlzIHRhcmdldCByZWJ1aWxkcyBhIFBPIGZpbGUgaWYgJChET01BSU4pLnBvdCBoYXMgY2hhbmdlZC4KLSMgTm90ZSB0aGF0IGEgUE8gZmlsZSBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KLSQoUE9GSUxFUyk6ICQoUE9GSUxFU0RFUFMpCi0JQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MsLiovLCwnIC1lICdzL1wucG8kJC8vJ2A7IFwKLQlpZiB0ZXN0IC1mICIkKHNyY2RpcikvJCR7bGFuZ30ucG8iOyB0aGVuIFwKLQkgIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgJChNQUtFKSAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAotCSAgdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCi0JICBlY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdCI7IFwKLQkgIGNkICQoc3JjZGlyKSBcCi0JICAgICYmIHsgY2FzZSBgJChNU0dNRVJHRV9VUERBVEUpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAotCSAgICAgICAgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtN10gfCAwLjFbMC03XS4qKSBcCi0JICAgICAgICAgICAgICQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3Q7OyBcCi0JICAgICAgICAgICAqKSBcCi0JICAgICAgICAgICAgICQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJHtsYW5nfSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAotCSAgICAgICAgIGVzYWM7IFwKLQkgICAgICAgfTsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkJHtsYW5nfS5wby1jcmVhdGU7IFwKLQlmaQotCi0KLWluc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKLWluc3RhbGwtZXhlYzoKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAotCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKLQkgICQoTUtESVJfUCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKLQkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAotCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAotCSAgZG9uZTsgXAotCSAgZm9yIGZpbGUgaW4gTWFrZXZhcnM7IGRvIFwKLQkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCi0JICBkb25lOyBcCi0JZWxzZSBcCi0JICA6IDsgXAotCWZpCi1pbnN0YWxsLWRhdGEtbm86IGFsbAotaW5zdGFsbC1kYXRhLXllczogYWxsCi0JQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKLQlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKLQkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCi0JICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCi0JICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAotCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJCRkaXI7IFwKLQkgIGlmIHRlc3QgLXIgJCRjYXQ7IHRoZW4gcmVhbGNhdD0kJGNhdDsgZWxzZSByZWFsY2F0PSQoc3JjZGlyKS8kJGNhdDsgZmk7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAkJHJlYWxjYXQgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbzsgXAotCSAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgYXMgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbyI7IFwKLQkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAotCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCi0JICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCi0JICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCi0JICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCi0JICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCi0JICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAotCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKLQkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKLQkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAotCSAgICAgICAgICAgZmk7IFwKLQkgICAgICAgICBkb25lKTsgXAotCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKLQkgICAgICBlbHNlIFwKLQkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCi0JICAgICAgICAgIDo7IFwKLQkgICAgICAgIGVsc2UgXAotCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCi0JICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKLQkgICAgICAgIGZpOyBcCi0JICAgICAgZmk7IFwKLQkgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAotCSAgICAgIGxuIC1zIC4uL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCi0JICAgICAgbG4gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKLQkgICAgICBjcCAtcCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKLQkgICAgICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBsaW5rIGFzICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIjsgXAotCSAgICBmaTsgXAotCSAgZG9uZTsgXAotCWRvbmUKLQotaW5zdGFsbC1zdHJpcDogaW5zdGFsbAotCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtZXhlYyBpbnN0YWxsZGlycy1kYXRhCi1pbnN0YWxsZGlycy1leGVjOgotaW5zdGFsbGRpcnMtZGF0YTogaW5zdGFsbGRpcnMtZGF0YS1AVVNFX05MU0AKLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCi0JICAkKE1LRElSX1ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCi0JZWxzZSBcCi0JICA6IDsgXAotCWZpCi1pbnN0YWxsZGlycy1kYXRhLW5vOgotaW5zdGFsbGRpcnMtZGF0YS15ZXM6Ci0JQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKLQlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKLQkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCi0JICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCi0JICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAotCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJCRkaXI7IFwKLQkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAotCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCi0JICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCi0JICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCi0JICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCi0JICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCi0JICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAotCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKLQkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKLQkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAotCSAgICAgICAgICAgZmk7IFwKLQkgICAgICAgICBkb25lKTsgXAotCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKLQkgICAgICBlbHNlIFwKLQkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCi0JICAgICAgICAgIDo7IFwKLQkgICAgICAgIGVsc2UgXAotCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCi0JICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKLQkgICAgICAgIGZpOyBcCi0JICAgICAgZmk7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQlkb25lCi0KLSMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KLWluc3RhbGxjaGVjazoKLQotdW5pbnN0YWxsOiB1bmluc3RhbGwtZXhlYyB1bmluc3RhbGwtZGF0YQotdW5pbnN0YWxsLWV4ZWM6Ci11bmluc3RhbGwtZGF0YTogdW5pbnN0YWxsLWRhdGEtQFVTRV9OTFNACi0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAotCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAotCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKLQkgIGRvbmU7IFwKLQllbHNlIFwKLQkgIDogOyBcCi0JZmkKLXVuaW5zdGFsbC1kYXRhLW5vOgotdW5pbnN0YWxsLWRhdGEteWVzOgotCWNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKLQlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKLQkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCi0JICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCi0JICBmb3IgbGMgaW4gTENfTUVTU0FHRVMgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKLQkgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKLQkgIGRvbmU7IFwKLQlkb25lCi0KLWNoZWNrOiBhbGwKLQotaW5mbyBkdmkgcHMgcGRmIGh0bWwgdGFncyBUQUdTIGN0YWdzIENUQUdTIElEOgotCi1tb3N0bHljbGVhbjoKLQlybSAtZiByZW1vdmUtcG90Y2RhdGUuc2VkCi0Jcm0gLWYgc3RhbXAtcG9UCi0Jcm0gLWYgY29yZSBjb3JlLiogJChET01BSU4pLnBvICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAqLm5ldy5wbwotCXJtIC1mciAqLm8KLQotY2xlYW46IG1vc3RseWNsZWFuCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiBNYWtlZmlsZSBNYWtlZmlsZS5pbiBQT1RGSUxFUyAqLm1vCi0KLW1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotCXJtIC1mIHN0YW1wLXBvICQoR01PRklMRVMpCi0KLWRpc3RkaXIgPSAkKHRvcF9idWlsZGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pLyQoc3ViZGlyKQotZGlzdCBkaXN0ZGlyOgotCXRlc3QgLXogIiQoRElTVEZJTEVTREVQUykiIHx8ICQoTUFLRSkgJChESVNURklMRVNERVBTKQotCUAkKE1BS0UpIGRpc3QyCi0jIFRoaXMgaXMgYSBzZXBhcmF0ZSB0YXJnZXQgYmVjYXVzZSAndXBkYXRlLXBvJyBtdXN0IGJlIGV4ZWN1dGVkIGJlZm9yZS4KLWRpc3QyOiBzdGFtcC1wbyAkKERJU1RGSUxFUykKLQlkaXN0cz0iJChESVNURklMRVMpIjsgXAotCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKLQkgIGRpc3RzPSIkJGRpc3RzIE1ha2V2YXJzLnRlbXBsYXRlIjsgXAotCWZpOyBcCi0JaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCi0JICBkaXN0cz0iJCRkaXN0cyAkKERPTUFJTikucG90IHN0YW1wLXBvIjsgXAotCWZpOyBcCi0JaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nOyB0aGVuIFwKLQkgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZyI7IFwKLQlmaTsgXAotCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZy4kJGk7IHRoZW4gXAotCSAgICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2cuJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAtZiAkKHNyY2RpcikvTElOR1VBUzsgdGhlbiBkaXN0cz0iJCRkaXN0cyBMSU5HVUFTIjsgZmk7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCi0JICAgIGNwIC1wICQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIGNwIC1wICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCi11cGRhdGUtcG86IE1ha2VmaWxlCi0JJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQotCXRlc3QgLXogIiQoVVBEQVRFUE9GSUxFUykiIHx8ICQoTUFLRSkgJChVUERBVEVQT0ZJTEVTKQotCSQoTUFLRSkgdXBkYXRlLWdtbwotCi0jIEdlbmVyYWwgcnVsZSBmb3IgY3JlYXRpbmcgUE8gZmlsZXMuCi0KLS5ub3AucG8tY3JlYXRlOgotCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tY3JlYXRlJCQvLydgOyBcCi0JZWNobyAiRmlsZSAkJGxhbmcucG8gZG9lcyBub3QgZXhpc3QuIElmIHlvdSBhcmUgYSB0cmFuc2xhdG9yLCB5b3UgY2FuIGNyZWF0ZSBpdCB0aHJvdWdoICdtc2dpbml0Jy4iIDE+JjI7IFwKLQlleGl0IDEKLQotIyBHZW5lcmFsIHJ1bGUgZm9yIHVwZGF0aW5nIFBPIGZpbGVzLgotCi0ubm9wLnBvLXVwZGF0ZToKLQlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZSQkLy8nYDsgXAotCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgZmk7IFwKLQl0bXBkaXI9YHB3ZGA7IFwKLQllY2hvICIkJGxhbmc6IjsgXAotCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAotCWVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJGxhbmcubmV3LnBvIjsgXAotCWNkICQoc3JjZGlyKTsgXAotCWlmIHsgY2FzZSBgJChNU0dNRVJHRSkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCi0JICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAotCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKLQkgICAgICAgKikgXAotCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbyAkKERPTUFJTikucG90OzsgXAotCSAgICAgZXNhYzsgXAotCSAgIH07IHRoZW4gXAotCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKLQkgIGVsc2UgXAotCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCi0JICAgICAgOjsgXAotCSAgICBlbHNlIFwKLQkgICAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKLQkgICAgICBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgIGZpOyBcCi0JZWxzZSBcCi0JICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKLQkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKLQlmaQotCi0kKERVTU1ZUE9GSUxFUyk6Ci0KLXVwZGF0ZS1nbW86IE1ha2VmaWxlICQoR01PRklMRVMpCi0JQDoKLQotIyBSZWNyZWF0ZSBNYWtlZmlsZSBieSBpbnZva2luZyBjb25maWcuc3RhdHVzLiBFeHBsaWNpdGx5IGludm9rZSB0aGUgc2hlbGwsCi0jIGJlY2F1c2UgZXhlY3V0aW9uIHBlcm1pc3Npb24gYml0cyBtYXkgbm90IHdvcmsgb24gdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW0uCi0jIFVzZSBAU0hFTExALCB3aGljaCBpcyB0aGUgc2hlbGwgZGV0ZXJtaW5lZCBieSBhdXRvY29uZiBmb3IgdGhlIHVzZSBieSBpdHMKLSMgc2NyaXB0cywgbm90ICQoU0hFTEwpIHdoaWNoIGlzIGhhcmR3aXJlZCB0byAvYmluL3NoIGFuZCBtYXkgYmUgZGVmaWNpZW50LgotTWFrZWZpbGU6IE1ha2VmaWxlLmluLmluIE1ha2V2YXJzICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzIEBQT01BS0VGSUxFREVQU0AKLQljZCAkKHRvcF9idWlsZGRpcikgXAotCSAgJiYgQFNIRUxMQCAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRALmluIHBvLWRpcmVjdG9yaWVzCi0KLWZvcmNlOgotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9hY2xvY2FsLnRnegpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA0YmE1NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9jb25maWcucnBhdGggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjYyNTYyMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDY4NCArMCwwIEBACi0jISAvYmluL3NoCi0jIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQotIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCi0jCi0jICAgQ29weXJpZ2h0IDE5OTYtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCi0jICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyAgIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotIyAgIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotIwotIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKLSMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KLSMgb3IKLSMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCi0jIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCi0jIHNob3VsZCBiZSBzZXQgYnkgdGhlIGNhbGxlci4KLSMKLSMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgotCi0jIEtub3duIGxpbWl0YXRpb25zOgotIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKLSMgICB0aGFuIDI1NiBieXRlcywgb3RoZXJ3aXNlIHRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBkdW1wIGNvcmUuIFRoZSBvbmx5Ci0jICAga25vd24gd29ya2Fyb3VuZCBpcyB0byBjaG9vc2Ugc2hvcnRlciBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBidWlsZAotIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCi0KLSMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotIyB3aGljaCBuZWVkcyAnLmxpYicpLgotbGliZXh0PWEKLXNocmV4dD0uc28KLQotaG9zdD0iJDEiCi1ob3N0X2NwdT1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKLWhvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotaG9zdF9vcz1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKLQotIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DQ19CQVNFTkFNRS4KLQotZm9yIGNjX3RlbXAgaW4gJENDIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCi0KLSMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ09NUElMRVJfUElDLgotCi13bD0KLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHdsPSctV2wsJwotZWxzZQotICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICBhaXgqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCi0gICAgICA7OwotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgZWNjKikKLSAgICAgICAgICB3bD0nLVdsLCcKLSAgICAgICAgICA7OwotICAgICAgICBpY2MqIHwgaWZvcnQqKQotICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgIDs7Ci0gICAgICAgIGxmOTUqKQotICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgIDs7Ci0gICAgICAgIG5hZ2ZvciopCi0gICAgICAgICAgd2w9Jy1XbCwtV2wsLCcKLSAgICAgICAgICA7OwotICAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICAgd2w9Jy1XbCwnCi0gICAgICAgICAgOzsKLSAgICAgICAgY2NjKikKLSAgICAgICAgICB3bD0nLVdsLCcKLSAgICAgICAgICA7OwotICAgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCi0gICAgICAgICAgd2w9Jy1XbCwnCi0gICAgICAgICAgOzsKLSAgICAgICAgY29tbykKLSAgICAgICAgICB3bD0nLWxvcHQ9JwotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0gICAgICAgICAgICAqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCi0gICAgICAgICAgICAgIHdsPQotICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKlN1blwgQyopCi0gICAgICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBuZXdzb3M2KQotICAgICAgOzsKLSAgICAqbnRvKiB8ICpxbngqKQotICAgICAgOzsKLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgcmRvcyopCi0gICAgICA7OwotICAgIHNvbGFyaXMqKQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQotICAgICAgICAgIHdsPSctUW9wdGlvbiBsZCAnCi0gICAgICAgICAgOzsKLSAgICAgICAgKikKLSAgICAgICAgICB3bD0nLVdsLCcKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBzdW5vczQqKQotICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIDs7Ci0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIHN5c3Y0Kk1QKikKLSAgICAgIDs7Ci0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIHdsPSctV2wsJwotICAgICAgOzsKLSAgICB1bmljb3MqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIHV0czQqKQotICAgICAgOzsKLSAgZXNhYwotZmkKLQotIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9MSU5LRVJfU0hMSUJTLgotCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLWhhcmRjb2RlX2RpcmVjdD1ubwotaGFyZGNvZGVfbWludXNfTD1ubwotCi1jYXNlICIkaG9zdF9vcyIgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKLSAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0gICAgICB3aXRoX2dudV9sZD1ubwotICAgIGZpCi0gICAgOzsKLSAgaW50ZXJpeCopCi0gICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKLSAgICB3aXRoX2dudV9sZD15ZXMKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci1lc2FjCi0KLWxkX3NobGlicz15ZXMKLWlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKLSAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gIGNhc2UgIiRob3N0X29zIiBpbgotICAgIGFpeFszLTldKikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgotICAgICAgICBwb3dlcnBjKQotICAgICAgICAgIDs7Ci0gICAgICAgIG02OGspCi0gICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgOgotICAgICAgZWxzZQotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgOgotICAgICAgZWxzZQotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGhhaWt1KikKLSAgICAgIDs7Ci0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIDs7Ci0gICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgOgotICAgICAgZWxzZQotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIG5ldGJzZCopCi0gICAgICA7OwotICAgIHNvbGFyaXMqKQotICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICA6Ci0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQotICAgICAgICAgIGxkX3NobGlicz1ubwotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICAgICAgZmkKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBzdW5vczQqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgOzsKLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIDoKLSAgICAgIGVsc2UKLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgZXNhYwotICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAgZmkKLWVsc2UKLSAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgYWl4MyopCi0gICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQotICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotICAgICAgICAjIGJyb2tlbiBjb2xsZWN0Mi4KLSAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLSAgICBhaXhbNC05XSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0gICAgICBlbHNlCi0gICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0gICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCi0gICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZmkKLSAgICAgICAgICBkb25lCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLSAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0gICAgICAgICAgdGhlbgotICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLSAgICAgICAgICBmaQotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICAjIEJlZ2luIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCi0gICAgICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LmMKLSAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAotICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQotfSdgCi0gICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gICAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgICAgICAgYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiCi0gICAgICBmaQotICAgICAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdAotICAgICAgIyBFbmQgX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgZWxzZQotICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotICAgICAgICBlbHNlCi0gICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgotICAgICAgICBwb3dlcnBjKQotICAgICAgICAgIDs7Ci0gICAgICAgIG02OGspCi0gICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgYnNkaVs0NV0qKQotICAgICAgOzsKLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotICAgICAgbGliZXh0PWxpYgotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICBpZiB7IGNhc2UgJGNjX2Jhc2VuYW1lIGluIGlmb3J0KikgdHJ1ZTs7ICopIHRlc3QgIiRHQ0MiID0geWVzOzsgZXNhYzsgfTsgdGhlbgotICAgICAgICA6Ci0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZGd1eCopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICA7OwotICAgIGZyZWVic2QyLlswMV0qKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIDs7Ci0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgOzsKLSAgICBocHV4OSopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIDs7Ci0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIDs7Ci0gICAgbmV0YnNkKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIDs7Ci0gICAgbmV3c29zNikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgOzsKLSAgICAqbnRvKiB8ICpxbngqKQotICAgICAgOzsKLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgotICAgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKLSAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgb3MyKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICA7OwotICAgIG9zZjMqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICA7OwotICAgIG9zZjQqIHwgb3NmNSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0gICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5Ci0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgOzsKLSAgICBzb2xhcmlzKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIDs7Ci0gICAgc3Vub3M0KikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICA7OwotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICAgICAgc25pKQotICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0gICAgICAgICAgOzsKLSAgICAgICAgc2llbWVucykKLSAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgICAgICAgICA7OwotICAgICAgICBtb3Rvcm9sYSkKLSAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIHN5c3Y0LjMqKQotICAgICAgOzsKLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0gICAgICAgIGxkX3NobGlicz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICA7OwotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCi0gICAgICA7OwotICAgIHV0czQqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgOzsKLSAgICAqKQotICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICA7OwotICBlc2FjCi1maQotCi0jIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcwotIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIuCi0jIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAotIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKLSMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCi0jIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCi1saWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotY2FzZSAiJGhvc3Rfb3MiIGluCi0gIGFpeDMqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKLSAgICA7OwotICBhaXhbNC05XSopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgYW1pZ2FvcyopCi0gICAgY2FzZSAiJGhvc3RfY3B1IiBpbgotICAgICAgcG93ZXJwYyopCi0gICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OwotICAgICAgbTY4aykKLSAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJyA7OwotICAgIGVzYWMKLSAgICA7OwotICBiZW9zKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBic2RpWzQ1XSopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgIHNocmV4dD0uZGxsCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCi0gICAgOzsKLSAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICBzaHJleHQ9LmR5bGliCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgZGd1eCopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgZnJlZWJzZFsyM10uKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCi0gICAgOzsKLSAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGdudSopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgaGFpa3UqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBpYTY0KikKLSAgICAgICAgc2hyZXh0PS5zbwotICAgICAgICA7OwotICAgICAgaHBwYSo2NCopCi0gICAgICAgIHNocmV4dD0uc2wKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIHNocmV4dD0uc2wKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgaW50ZXJpeFszLTldKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIGNhc2UgIiRob3N0X29zIiBpbgotICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgY2FzZSAkTEQgaW4KLSAgICAgICAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7Ci0gICAgICAgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIDs7Ci0gICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7Ci0gICAgICAgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gICAgOzsKLSAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGtuZXRic2QqLWdudSkKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBuZXRic2QqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIG5ld3NvczYpCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgKm50byogfCAqcW54KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCi0gICAgOzsKLSAgb3MyKikKLSAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNocmV4dD0uZGxsCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJwotICAgIDs7Ci0gIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICByZG9zKikKLSAgICA7OwotICBzb2xhcmlzKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBzdW5vczQqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKLSAgICA7OwotICBzeXN2NCB8IHN5c3Y0LjMqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIHN5c3Y0Kk1QKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICB0cGYqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIHV0czQqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci1lc2FjCi0KLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCi1lc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi1zaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAotZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi1lc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLWVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0KLUxDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0iJGVzY2FwZWRfd2wiCi0KLSMgU3RhdGljIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCi1zaGxpYmV4dD0iJHNobGliZXh0IgotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSIkZXNjYXBlZF9saWJuYW1lX3NwZWMiCi0KLSMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSIkZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWMiCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0iJGhhcmRjb2RlX21pbnVzX0wiCi0KLUVPRgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS44LjEvMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40LzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuOC4xLzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuOC4xL0NPUFlJTkcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS44LjEvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjcxYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuOC4xL0NPUFlJTkcKQEAgLTAsMCArMSw0IEBACitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjguMS9NYWtlZmlsZS5pbi5pbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjguMS9NYWtlZmlsZS5pbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGMyOTNkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuOC4xL01ha2VmaWxlLmluLmluCkBAIC0wLDAgKzEsNDgzIEBACisjIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcsIDIwMDktMjAxMCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KKyMKKyMgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyMgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CisjIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLAorIyB3aXRob3V0IGFueSB3YXJyYW50eS4KKyMKKyMgT3JpZ2luOiBnZXR0ZXh0LTAuMTkuOAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gMC4xOQorCitQQUNLQUdFID0gQFBBQ0tBR0VACitWRVJTSU9OID0gQFZFUlNJT05ACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKKworU0VEID0gQFNFREAKK1NIRUxMID0gL2Jpbi9zaAorQFNFVF9NQUtFQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorCitwcmVmaXggPSBAcHJlZml4QAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisKKyMgV2UgdXNlICQobWtkaXJfcCkuCisjIEluIGF1dG9tYWtlIDw9IDEuOS54LCAkKG1rZGlyX3ApIGlzIGRlZmluZWQgZWl0aGVyIGFzICJta2RpciAtcCAtLSIgb3IgYXMKKyMgIiQobWtpbnN0YWxsZGlycykiIG9yIGFzICIkKGluc3RhbGxfc2gpIC1kIi4gRm9yIHRoZXNlIGF1dG9tYWtlIHZlcnNpb25zLAorIyBAaW5zdGFsbF9zaEAgZG9lcyBub3Qgc3RhcnQgd2l0aCAkKFNIRUxMKSwgc28gd2UgYWRkIGl0LgorIyBJbiBhdXRvbWFrZSA+PSAxLjEwLCBAbWtkaXJfcEAgaXMgZGVyaXZlZCBmcm9tICR7TUtESVJfUH0sIHdoaWNoIGlzIGRlZmluZWQKKyMgZWl0aGVyIGFzICIvcGF0aC90by9ta2RpciAtcCIgb3IgIi4uLi9pbnN0YWxsLXNoIC1jIC1kIi4gRm9yIHRoZXNlIGF1dG9tYWtlCisjIHZlcnNpb25zLCAkKG1raW5zdGFsbGRpcnMpIGFuZCAkKGluc3RhbGxfc2gpIGFyZSB1bnVzZWQuCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgQGluc3RhbGxfc2hAIC1kCitpbnN0YWxsX3NoID0gJChTSEVMTCkgQGluc3RhbGxfc2hACitNS0RJUl9QID0gQE1LRElSX1BACitta2Rpcl9wID0gQG1rZGlyX3BACisKKyMgV2hlbiBidWlsZGluZyBnZXR0ZXh0LXRvb2xzLCB3ZSBwcmVmZXIgdG8gdXNlIHRoZSBidWlsdCBwcm9ncmFtcworIyByYXRoZXIgdGhhbiBpbnN0YWxsZWQgcHJvZ3JhbXMuICBIb3dldmVyLCB3ZSBjYW4ndCBkbyB0aGF0IHdoZW4gd2UKKyMgYXJlIGNyb3NzIGNvbXBpbGluZy4KK0NST1NTX0NPTVBJTElORyA9IEBDUk9TU19DT01QSUxJTkdACisKK0dNU0dGTVRfID0gQEdNU0dGTVRACitHTVNHRk1UX25vID0gQEdNU0dGTVRACitHTVNHRk1UX3llcyA9IEBHTVNHRk1UXzAxNUAKK0dNU0dGTVQgPSAkKEdNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitNU0dGTVRfID0gQE1TR0ZNVEAKK01TR0ZNVF9ubyA9IEBNU0dGTVRACitNU0dGTVRfeWVzID0gQE1TR0ZNVF8wMTVACitNU0dGTVQgPSAkKE1TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKK1hHRVRURVhUXyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX25vID0gQFhHRVRURVhUQAorWEdFVFRFWFRfeWVzID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUID0gJChYR0VUVEVYVF8kKFVTRV9NU0dDVFhUKSkKK01TR01FUkdFID0gbXNnbWVyZ2UKK01TR01FUkdFX1VQREFURSA9IEBNU0dNRVJHRUAgLS11cGRhdGUKK01TR0lOSVQgPSBtc2dpbml0CitNU0dDT05WID0gbXNnY29udgorTVNHRklMVEVSID0gbXNnZmlsdGVyCisKK1BPRklMRVMgPSBAUE9GSUxFU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorVVBEQVRFUE9GSUxFUyA9IEBVUERBVEVQT0ZJTEVTQAorRFVNTVlQT0ZJTEVTID0gQERVTU1ZUE9GSUxFU0AKK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbi5pbiByZW1vdmUtcG90Y2RhdGUuc2luIFwKKyQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTEpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTIpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTMpCitESVNURklMRVMgPSAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzIFBPVEZJTEVTLmluIFwKKyQoUE9GSUxFUykgJChHTU9GSUxFUykgXAorJChESVNURklMRVMuZXh0cmExKSAkKERJU1RGSUxFUy5leHRyYTIpICQoRElTVEZJTEVTLmV4dHJhMykKKworUE9URklMRVMgPSBcCisKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorCitQT0ZJTEVTREVQU18gPSAkKHNyY2RpcikvJChET01BSU4pLnBvdAorUE9GSUxFU0RFUFNfeWVzID0gJChQT0ZJTEVTREVQU18pCitQT0ZJTEVTREVQU19ubyA9CitQT0ZJTEVTREVQUyA9ICQoUE9GSUxFU0RFUFNfJChQT19ERVBFTkRTX09OX1BPVCkpCisKK0RJU1RGSUxFU0RFUFNfID0gdXBkYXRlLXBvCitESVNURklMRVNERVBTX3llcyA9ICQoRElTVEZJTEVTREVQU18pCitESVNURklMRVNERVBTX25vID0KK0RJU1RGSUxFU0RFUFMgPSAkKERJU1RGSUxFU0RFUFNfJChESVNUX0RFUEVORFNfT05fVVBEQVRFX1BPKSkKKworIyBNYWtldmFycyBnZXRzIGluc2VydGVkIGhlcmUuIChEb24ndCByZW1vdmUgdGhpcyBsaW5lISkKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucG8gLmdtbyAubW8gLnNlZCAuc2luIC5ub3AgLnBvLWNyZWF0ZSAucG8tdXBkYXRlCisKKy5wby5tbzoKKwlAZWNobyAiJChNU0dGTVQpIC1jIC1vICRAICQ8IjsgXAorCSQoTVNHRk1UKSAtYyAtbyB0LSRAICQ8ICYmIG12IHQtJEAgJEAKKworLnBvLmdtbzoKKwlAbGFuZz1gZWNobyAkKiB8IHNlZCAtZSAncywuKi8sLCdgOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9cm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC0tdmVyYm9zZSAtbyAkJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8iOyBcCisJY2QgJChzcmNkaXIpICYmIHJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8gJiYgbXYgdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30uZ21vCisKKy5zaW4uc2VkOgorCXNlZCAtZSAnL14jL2QnICQ8ID4gdC0kQAorCW12IHQtJEAgJEAKKworCithbGw6IGFsbC1AVVNFX05MU0AKKworYWxsLXllczogc3RhbXAtcG8KK2FsbC1ubzoKKworIyBFbnN1cmUgdGhhdCB0aGUgZ2V0dGV4dCBtYWNyb3MgYW5kIHRoaXMgTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCitDSEVDS19NQUNST19WRVJTSU9OID0gXAorCXRlc3QgIiQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSIgPSAiQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIFwKKwkgIHx8IHsgZWNobyAiKioqIGVycm9yOiBnZXR0ZXh0IGluZnJhc3RydWN0dXJlIG1pc21hdGNoOiB1c2luZyBhIE1ha2VmaWxlLmluLmluIGZyb20gZ2V0dGV4dCB2ZXJzaW9uICQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSBidXQgdGhlIGF1dG9jb25mIG1hY3JvcyBhcmUgZnJvbSBnZXR0ZXh0IHZlcnNpb24gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIDE+JjI7IFwKKwkgICAgICAgZXhpdCAxOyBcCisJICAgICB9CisKKyMgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgb25seSBjcmVhdGVkIHdoZW4gbmVlZGVkLiBXaGVuIHhnZXR0ZXh0IGZpbmRzIG5vCisjIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLCBubyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBjcmVhdGVkIChiZWNhdXNlCisjIHdlIGRvbid0IHdhbnQgdG8gYm90aGVyIHRyYW5zbGF0b3JzIHdpdGggZW1wdHkgUE9UIGZpbGVzKS4gV2UgYXNzdW1lIHRoYXQKKyMgTElOR1VBUyBpcyBlbXB0eSBpbiB0aGlzIGNhc2UsIGkuZS4gJChQT0ZJTEVTKSBhbmQgJChHTU9GSUxFUykgYXJlIGVtcHR5LgorIyBJbiB0aGlzIGNhc2UsIHN0YW1wLXBvIGlzIGEgbm9wIChpLmUuIGEgcGhvbnkgdGFyZ2V0KS4KKworIyBzdGFtcC1wbyBpcyBhIHRpbWVzdGFtcCBkZW5vdGluZyB0aGUgbGFzdCB0aW1lIGF0IHdoaWNoIHRoZSBDQVRBTE9HUyBoYXZlCisjIGJlZW4gbG9vc2VseSB1cGRhdGVkLiBJdHMgcHVycG9zZSBpcyB0aGF0IHdoZW4gYSBkZXZlbG9wZXIgb3IgdHJhbnNsYXRvcgorIyBjaGVja3Mgb3V0IHRoZSBwYWNrYWdlIHZpYSBDVlMsIGFuZCB0aGUgJChET01BSU4pLnBvdCBmaWxlIGlzIG5vdCBpbiBDVlMsCisjICJtYWtlIiB3aWxsIHVwZGF0ZSB0aGUgJChET01BSU4pLnBvdCBhbmQgdGhlICQoQ0FUQUxPR1MpLCBidXQgc3Vic2VxdWVudAorIyBpbnZvY2F0aW9ucyBvZiAibWFrZSIgd2lsbCBkbyBub3RoaW5nLiBUaGlzIHRpbWVzdGFtcCB3b3VsZCBub3QgYmUgbmVjZXNzYXJ5CisjIGlmIHVwZGF0aW5nIHRoZSAkKENBVEFMT0dTKSB3b3VsZCBhbHdheXMgdG91Y2ggdGhlbTsgaG93ZXZlciwgdGhlIHJ1bGUgZm9yCisjICQoUE9GSUxFUykgaGFzIGJlZW4gZGVzaWduZWQgdG8gbm90IHRvdWNoIGZpbGVzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZQorIyBjaGFuZ2VkLgorc3RhbXAtcG86ICQoc3JjZGlyKS8kKERPTUFJTikucG90CisJQCQoQ0hFQ0tfTUFDUk9fVkVSU0lPTikKKwl0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgXAorCSAgdGVzdCAteiAiJChHTU9GSUxFUykiIHx8ICQoTUFLRSkgJChHTU9GSUxFUykKKwlAdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IHsgXAorCSAgZWNobyAidG91Y2ggc3RhbXAtcG8iICYmIFwKKwkgIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtcG9UICYmIFwKKwkgIG12IHN0YW1wLXBvVCBzdGFtcC1wbzsgXAorCX0KKworIyBOb3RlOiBUYXJnZXQgJ2FsbCcgbXVzdCBub3QgZGVwZW5kIG9uIHRhcmdldCAnJChET01BSU4pLnBvdC11cGRhdGUnLAorIyBvdGhlcndpc2UgcGFja2FnZXMgbGlrZSBHQ0MgY2FuIG5vdCBiZSBidWlsdCBpZiBvbmx5IHBhcnRzIG9mIHRoZSBzb3VyY2UKKyMgaGF2ZSBiZWVuIGRvd25sb2FkZWQuCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgJChET01BSU4pLnBvdDsgaXQgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KKyMgTm90ZSB0aGF0ICQoRE9NQUlOKS5wb3QgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCisjIFRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgdGhlIHBhY2thZ2UgeHl6IGlzIGEgR05VIG9uZSBpcyBiYXNlZCBvbiB0aGUKKyMgaGV1cmlzdGljIHdoZXRoZXIgc29tZSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG1lbnRpb25zICJHTlUgeHl6Ii4KKyMgSWYgR05VICdmaW5kJyBpcyBhdmFpbGFibGUsIHdlIGF2b2lkIGdyZXBwaW5nIHRocm91Z2ggbW9uc3RlciBmaWxlcy4KKyQoRE9NQUlOKS5wb3QtdXBkYXRlOiAkKFBPVEZJTEVTKSAkKHNyY2RpcikvUE9URklMRVMuaW4gcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXBhY2thZ2VfZ251PSIkKFBBQ0tBR0VfR05VKSI7IFwKKwl0ZXN0IC1uICIkJHBhY2thZ2VfZ251IiB8fCB7IFwKKwkgIGlmIHsgaWYgKExDX0FMTD1DIGZpbmQgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8IGdyZXAgR05VID4vZGV2L251bGw7IHRoZW4gXAorCQkgTENfQUxMPUMgZmluZCAtTCAkKHRvcF9zcmNkaXIpIC1tYXhkZXB0aCAxIC10eXBlIGYgXAorCQkJICAgICAgIC1zaXplIC0xMDAwMDAwMGMgLWV4ZWMgZ3JlcCAnR05VIEBQQUNLQUdFQCcgXAorCQkJICAgICAgIC9kZXYvbnVsbCAne30nICc7JyAyPi9kZXYvbnVsbDsgXAorCSAgICAgICBlbHNlIFwKKwkJIExDX0FMTD1DIGdyZXAgJ0dOVSBAUEFDS0FHRUAnICQodG9wX3NyY2RpcikvKiAyPi9kZXYvbnVsbDsgXAorCSAgICAgICBmaTsgXAorCSAgICAgfSB8IGdyZXAgLXYgJ2xpYnRvb2w6JyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgIHBhY2thZ2VfZ251PXllczsgXAorCSAgIGVsc2UgXAorCSAgICAgcGFja2FnZV9nbnU9bm87IFwKKwkgICBmaTsgXAorCX07IFwKKwlpZiB0ZXN0ICIkJHBhY2thZ2VfZ251IiA9ICJ5ZXMiOyB0aGVuIFwKKwkgIHBhY2thZ2VfcHJlZml4PSdHTlUgJzsgXAorCWVsc2UgXAorCSAgcGFja2FnZV9wcmVmaXg9Jyc7IFwKKwlmaTsgXAorCWlmIHRlc3QgLW4gJyQoTVNHSURfQlVHU19BRERSRVNTKScgfHwgdGVzdCAnJChQQUNLQUdFX0JVR1JFUE9SVCknID0gJ0AnUEFDS0FHRV9CVUdSRVBPUlQnQCc7IHRoZW4gXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKE1TR0lEX0JVR1NfQUREUkVTUyknOyBcCisJZWxzZSBcCisJICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoUEFDS0FHRV9CVUdSRVBPUlQpJzsgXAorCWZpOyBcCisJY2FzZSBgJChYR0VUVEVYVCkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC01XSB8IDAuMVswLTVdLiogfCAwLjE2IHwgMC4xNi5bMC0xXSopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKKwkgICAgOzsgXAorCSAgKikgXAorCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKKwkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAorCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAorCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAorCSAgICAgIC0tcGFja2FnZS1uYW1lPSIkJHtwYWNrYWdlX3ByZWZpeH1AUEFDS0FHRUAiIFwKKwkgICAgICAtLXBhY2thZ2UtdmVyc2lvbj0nQFZFUlNJT05AJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwllc2FjCisJdGVzdCAhIC1mICQoRE9NQUlOKS5wbyB8fCB7IFwKKwkgIGlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QtaGVhZGVyOyB0aGVuIFwKKwkgICAgc2VkIC1lICcxLC9eIyQkL2QnIDwgJChET01BSU4pLnBvID4gJChET01BSU4pLjFwbyAmJiBcCisJICAgIGNhdCAkKHNyY2RpcikvJChET01BSU4pLnBvdC1oZWFkZXIgJChET01BSU4pLjFwbyA+ICQoRE9NQUlOKS5wbzsgXAorCSAgICBybSAtZiAkKERPTUFJTikuMXBvOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgPiAkKERPTUFJTikuMXBvICYmIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKERPTUFJTikucG8gPiAkKERPTUFJTikuMnBvICYmIFwKKwkgICAgaWYgY21wICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKERPTUFJTikucG87IFwKKwkgICAgZWxzZSBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90ICYmIFwKKwkgICAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIGZpOyBcCisJfQorCisjIFRoaXMgcnVsZSBoYXMgbm8gZGVwZW5kZW5jaWVzOiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSAkKERPTUFJTikucG90IGF0CisjIGV2ZXJ5ICJtYWtlIiBpbnZvY2F0aW9uLCBvbmx5IGNyZWF0ZSBpdCB3aGVuIGl0IGlzIG1pc3NpbmcuCisjIE9ubHkgIm1ha2UgJChET01BSU4pLnBvdC11cGRhdGUiIG9yICJtYWtlIGRpc3QiIHdpbGwgZm9yY2UgYW4gdXBkYXRlLgorJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q6CisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzIGEgUE8gZmlsZSBpZiAkKERPTUFJTikucG90IGhhcyBjaGFuZ2VkLgorIyBOb3RlIHRoYXQgYSBQTyBmaWxlIGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorJChQT0ZJTEVTKTogJChQT0ZJTEVTREVQUykKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncywuKi8sLCcgLWUgJ3MvXC5wbyQkLy8nYDsgXAorCWlmIHRlc3QgLWYgIiQoc3JjZGlyKS8kJHtsYW5nfS5wbyI7IHRoZW4gXAorCSAgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCAkKE1BS0UpICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICB0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwkgIGVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJHtsYW5nfSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90IjsgXAorCSAgY2QgJChzcmNkaXIpIFwKKwkgICAgJiYgeyBjYXNlIGAkKE1TR01FUkdFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgICAgKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgICBlc2FjOyBcCisJICAgICAgIH07IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCisJZmkKKworCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6CitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1rZGlyX3ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXJtIC1mIHN0YW1wLXBvVAorCXJtIC1mIGNvcmUgY29yZS4qICQoRE9NQUlOKS5wbyAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gKi5uZXcucG8KKwlybSAtZnIgKi5vCisKK2NsZWFuOiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gUE9URklMRVMgKi5tbworCittYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwlybSAtZiBzdGFtcC1wbyAkKEdNT0ZJTEVTKQorCitkaXN0ZGlyID0gJCh0b3BfYnVpbGRkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjoKKwl0ZXN0IC16ICIkKERJU1RGSUxFU0RFUFMpIiB8fCAkKE1BS0UpICQoRElTVEZJTEVTREVQUykKKwlAJChNQUtFKSBkaXN0MgorIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCitkaXN0Mjogc3RhbXAtcG8gJChESVNURklMRVMpCisJZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgJChET01BSU4pLnBvdCBzdGFtcC1wbyI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCisJZmk7IFwKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKKwkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwordXBkYXRlLXBvOiBNYWtlZmlsZQorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKwl0ZXN0IC16ICIkKFVQREFURVBPRklMRVMpIiB8fCAkKE1BS0UpICQoVVBEQVRFUE9GSUxFUykKKwkkKE1BS0UpIHVwZGF0ZS1nbW8KKworIyBHZW5lcmFsIHJ1bGUgZm9yIGNyZWF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLWNyZWF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLWNyZWF0ZSQkLy8nYDsgXAorCWVjaG8gIkZpbGUgJCRsYW5nLnBvIGRvZXMgbm90IGV4aXN0LiBJZiB5b3UgYXJlIGEgdHJhbnNsYXRvciwgeW91IGNhbiBjcmVhdGUgaXQgdGhyb3VnaCAnbXNnaW5pdCcuIiAxPiYyOyBcCisJZXhpdCAxCisKKyMgR2VuZXJhbCBydWxlIGZvciB1cGRhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby11cGRhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUkJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiAmJiB0ZXN0ICIkKENST1NTX0NPTVBJTElORykiICE9ICJ5ZXMiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJGxhbmcubmV3LnBvIjsgXAorCWNkICQoc3JjZGlyKTsgXAorCWlmIHsgY2FzZSBgJChNU0dNRVJHRSkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgKikgXAorCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgZXNhYzsgXAorCSAgIH07IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKKwkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwlmaQorCiskKERVTU1ZUE9GSUxFUyk6CisKK3VwZGF0ZS1nbW86IE1ha2VmaWxlICQoR01PRklMRVMpCisJQDoKKworIyBSZWNyZWF0ZSBNYWtlZmlsZSBieSBpbnZva2luZyBjb25maWcuc3RhdHVzLiBFeHBsaWNpdGx5IGludm9rZSB0aGUgc2hlbGwsCisjIGJlY2F1c2UgZXhlY3V0aW9uIHBlcm1pc3Npb24gYml0cyBtYXkgbm90IHdvcmsgb24gdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW0uCisjIFVzZSBAU0hFTExALCB3aGljaCBpcyB0aGUgc2hlbGwgZGV0ZXJtaW5lZCBieSBhdXRvY29uZiBmb3IgdGhlIHVzZSBieSBpdHMKKyMgc2NyaXB0cywgbm90ICQoU0hFTEwpIHdoaWNoIGlzIGhhcmR3aXJlZCB0byAvYmluL3NoIGFuZCBtYXkgYmUgZGVmaWNpZW50LgorTWFrZWZpbGU6IE1ha2VmaWxlLmluLmluIE1ha2V2YXJzICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzIEBQT01BS0VGSUxFREVQU0AKKwljZCAkKHRvcF9idWlsZGRpcikgXAorCSAgJiYgQFNIRUxMQCAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRALmluIHBvLWRpcmVjdG9yaWVzCisKK2ZvcmNlOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS44LjEvYWNsb2NhbC50Z3ogYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS44LjEvYWNsb2NhbC50Z3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyZDFmNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjguMS9hY2xvY2FsLnRnegpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS44LjEvY29uZmlnLnJwYXRoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuOC4xL2NvbmZpZy5ycGF0aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODE4M2ZmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuOC4xL2NvbmZpZy5ycGF0aApAQCAtMCwwICsxLDY4NCBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorIworIyAgIENvcHlyaWdodCAxOTk2LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgICB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAorIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisjCisjIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KKworIyBLbm93biBsaW1pdGF0aW9uczoKKyMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCisjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKKyMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCitzaHJleHQ9LnNvCisKK2hvc3Q9IiQxIgoraG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCisKK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NPTVBJTEVSX1BJQy4KKword2w9CitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB3bD0nLVdsLCcKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgOzsKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGVjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgaWNjKiB8IGlmb3J0KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBsZjk1KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBuYWdmb3IqKQorICAgICAgICAgIHdsPSctV2wsLVdsLCwnCisgICAgICAgICAgOzsKKyAgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNvbW8pCisgICAgICAgICAgd2w9Jy1sb3B0PScKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICAgKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorICAgICAgICAgICAgICB3bD0KKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpTdW5cIEMqKQorICAgICAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIDs7CisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHJkb3MqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAgICAgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICA7OworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdW5pY29zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfTElOS0VSX1NITElCUy4KKworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CitoYXJkY29kZV9kaXJlY3Q9bm8KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworZXNhYworCitsZF9zaGxpYnM9eWVzCitpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCisgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYykKKyAgICAgICAgICA7OworICAgICAgICBtNjhrKQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICA7OworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKyAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGZpCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeDMqKQorICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKyAgICAgICAgIyBicm9rZW4gY29sbGVjdDIuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZWxzZQorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorICAgICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKyAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICAgICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorICAgICAgICAgICAgOgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC5jCisgICAgICAke0NDfSAke0xERkxBR1N9IGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QKKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIgorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKyAgICAgICMgRW5kIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYykKKyAgICAgICAgICA7OworICAgICAgICBtNjhrKQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGJzZGlbNDVdKikKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKyAgICAgIGxpYmV4dD1saWIKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaWYgeyBjYXNlICRjY19iYXNlbmFtZSBpbiBpZm9ydCopIHRydWU7OyAqKSB0ZXN0ICIkR0NDIiA9IHllczs7IGVzYWM7IH07IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGRndXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICBmcmVlYnNkMi5bMDFdKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBvc2YzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBvc2Y0KiB8IG9zZjUqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorICAgICAgICAjIEJvdGggY2MgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgICAgIHNuaSkKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworICAgICAgICAgIDs7CisgICAgICAgIHNpZW1lbnMpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgOzsKKyAgICAgICAgbW90b3JvbGEpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzeXN2NC4zKikKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSLgorIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisjIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQorIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgorbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK2Nhc2UgIiRob3N0X29zIiBpbgorICBhaXgzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYWl4WzQtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGFtaWdhb3MqKQorICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgIHBvd2VycGMqKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcgOzsKKyAgICAgIG02OGspCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgYmVvcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYnNkaVs0NV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUubGliJworICAgIDs7CisgIGRhcndpbiogfCByaGFwc29keSopCisgICAgc2hyZXh0PS5keWxpYgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGRndXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGZyZWVic2RbMjNdLiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBnbnUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGhhaWt1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaWE2NCopCisgICAgICAgIHNocmV4dD0uc28KKyAgICAgICAgOzsKKyAgICAgIGhwcGEqNjQqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGludGVyaXhbMy05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgJExEIGluCisgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiA7OworICAgICAgICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKSBsaWJzdWZmPTY0IHNobGlic3VmZj02NCA7OworICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBrbmV0YnNkKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV0YnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBuZXdzb3M2KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgICpudG8qIHwgKnFueCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIG9zMiopCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgcmRvcyopCisgICAgOzsKKyAgc29sYXJpcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3Vub3M0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgc3lzdjQgfCBzeXN2NC4zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NCpNUCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgdHBmKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB1dHM0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworZXNhYworCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKK2VzY2FwZWRfbGlibmFtZV9zcGVjPWBlY2hvICJYJGxpYm5hbWVfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWM9YGVjaG8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCitMQ19BTEw9QyBzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9IiRlc2NhcGVkX3dsIgorCisjIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorc2hsaWJleHQ9IiRzaGxpYmV4dCIKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorCisjIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0iJGhhcmRjb2RlX2RpcmVjdCIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorCitFT0YKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjguMS9yZW1vdmUtcG90Y2RhdGUuc2luCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L3JlbW92ZS1wb3RjZGF0ZS5zaW4KcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjguMS9yZW1vdmUtcG90Y2RhdGUuc2luCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtbmF0aXZlXzAuMTkuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDRhNDQzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotU1VNTUFSWSA9ICJNaW5pbWFsIGdldHRleHQgZm9yIHN1cHBvcnRpbmcgbmF0aXZlIGF1dG9jb25mL2F1dG9tYWtlIgotREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIG00IG1hY3JvcyBzdWZmaWNpZW50IHRvIHN1cHBvcnQgYnVpbGRpbmcgXAotYXV0b2NvbmYvYXV0b21ha2UuIFRoaXMgcHJvdmlkZXMgYSBzaWduaWZpY2FudCBidWlsZCB0aW1lIHNwZWVkdXAgYnkgXAotdGhlIHJlbW92YWwgb2YgZ2V0dGV4dC1uYXRpdmUgZnJvbSBtb3N0IGRlcGVuZGVuY3kgY2hhaW5zIChub3cgb25seSBcCi1uZWVkZWQgZm9yIGdldHRleHQgZm9yIHRoZSB0YXJnZXQpLiIKLVNSQ19VUkkgPSAiZmlsZTovL2FjbG9jYWwudGd6IFwKLSAgICAgICAgICAgZmlsZTovL2NvbmZpZy5ycGF0aCBcCi0gICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi5pbiBcCi0gICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcG90Y2RhdGUuc2luIFwKLSAgICAgICAgICAgZmlsZTovL0NPUFlJTkcgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKLSIKLQotSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKLUlOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKLQotTElDRU5TRSA9ICJGU0YtVW5saW1pdGVkIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWIyMDY3NWNkNTE1ODQ0MmY2MDA3ZDAyMmY0NmIzNWIiCi0KLWluaGVyaXQgbmF0aXZlCi0KLQotUyA9ICIke1dPUktESVJ9IgotCi1kb19pbnN0YWxsICgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCi0JY3AgJHtXT1JLRElSfS8qLm00ICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCi0JaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLwotCWNwICR7V09SS0RJUn0vY29uZmlnLnJwYXRoICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvCi0JY3AgJHtXT1JLRElSfS9NYWtlZmlsZS5pbi5pbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLwotCWNwICR7V09SS0RJUn0vcmVtb3ZlLXBvdGNkYXRlLnNpbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZV8wLjE5LjguMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmZjE5OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS44LjEuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJNaW5pbWFsIGdldHRleHQgZm9yIHN1cHBvcnRpbmcgbmF0aXZlIGF1dG9jb25mL2F1dG9tYWtlIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIG00IG1hY3JvcyBzdWZmaWNpZW50IHRvIHN1cHBvcnQgYnVpbGRpbmcgXAorYXV0b2NvbmYvYXV0b21ha2UuIFRoaXMgcHJvdmlkZXMgYSBzaWduaWZpY2FudCBidWlsZCB0aW1lIHNwZWVkdXAgYnkgXAordGhlIHJlbW92YWwgb2YgZ2V0dGV4dC1uYXRpdmUgZnJvbSBtb3N0IGRlcGVuZGVuY3kgY2hhaW5zIChub3cgb25seSBcCituZWVkZWQgZm9yIGdldHRleHQgZm9yIHRoZSB0YXJnZXQpLiIKK1NSQ19VUkkgPSAiZmlsZTovL2FjbG9jYWwudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy5ycGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcG90Y2RhdGUuc2luIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKKyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworTElDRU5TRSA9ICJGU0YtVW5saW1pdGVkIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGJkMDkwYTIwYmZjZDFhMThmMWY3OTgzN2I1ZTNlOTEiCisKK2luaGVyaXQgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLworCWNwICR7V09SS0RJUn0vKi5tNCAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby8KKwljcCAke1dPUktESVJ9L2NvbmZpZy5ycGF0aCAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0LworCWNwICR7V09SS0RJUn0vTWFrZWZpbGUuaW4uaW4gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby8KKwljcCAke1dPUktESVJ9L3JlbW92ZS1wb3RjZGF0ZS5zaW4gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby8KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xNi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKaW5kZXggY2QwYjc1OS4uZTc5ZjRkYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKQEAgLTksNyArOSw3IEBACiBERVBFTkRTID0gInZpcnR1YWwvbGliaWNvbnYiCiBERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCiBQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9nZXR0ZXh0IgotUFJPVklERVNfY2xhc3MtbmF0aXZlID0gIiIKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSA9ICJ2aXJ0dWFsL2dldHRleHQtbmF0aXZlIgogCiBTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2V0dGV4dC9nZXR0ZXh0LSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LXZwYXRoLnBhdGNoIFwKQEAgLTIxLDE2ICsyMSwyOCBAQAogICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaCBcCiAgICAgICAgICAgIgogCi1MREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgLWxwdGhyZWFkICIKLQogU1JDX1VSSVttZDVzdW1dID0gIjNkOWFkMjQzMDFjNmQ2YjE3ZWMzMDcwNGExM2ZlMTI3IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiZjg1MGQxYTA3OWZiNWE2MWYwYTQ3YjFhOWVmZDM1ZWI0NDAzMjI1NTM3NWUxY2VkYjAyNTNiYzI3YjM3NmQiCiAKIFBBUkFMTEVMX01BS0UgPSAiIgogCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgLWxwdGhyZWFkICIKKwogaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwogCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saXNwIC0tZGlzYWJsZS1jc2hhcnAgLS1kaXNhYmxlLW9wZW5tcCAtLXdpdGhvdXQtZW1hY3MiCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saXNwZGlyIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWNzaGFycCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhc3ByaW50ZiBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1qYXZhIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5hdGl2ZS1qYXZhIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW9wZW5tcCBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1lbWFjcyBcCisgICAgICAgICAgICAgICAgIgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLW11c2wgPSAiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJjPXllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHQyX2xpYmM9eWVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCiBhY3BhdGhzID0gJy1JICR7U30vYXV0b2NvbmYtbGliLWxpbmsvbTQvIFwKICAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAogICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCkBAIC00MSw3ICs1Myw2IEBACiAKIGRvX2luc3RhbGxfYXBwZW5kX2xpYmMtbXVzbCAoKSB7CiAJcm0gLWYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCi0Jcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliaW50bC5oCiB9CiAKICMgdGhlc2UgbGFjayB0aGUgLnggYmVoaW5kIHRoZSAuc28sIGJ1dCBzaG91bGRuJ3QgYmUgaW4gdGhlIC1kZXYgcGFja2FnZQpAQCAtOTMsMjAgKzEwNCwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luZm9kaXJ9L2F1dG9zcHJpbnRmLmluZm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKIAotCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlybSAtZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmludGwuc28KKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmludGwuc28KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlybSAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L2NvbmZpZy5ycGF0aAorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4KKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KIH0KIAogIyBBbnlvbmUgaW5oZXJpdGluZyBnZXR0ZXh0IHdpbGwgaGF2ZSBib3RoIGdldHRleHQtbmF0aXZlIGFuZCBnZXR0ZXh0CiAjIGF2YWlsYWJsZSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gdXNlIG9sZGVyIG1hY3JvcyBmcm9tIHRoZSB0YXJnZXQgZ2V0dGV4dCBpbgogIyBhIG5vbi1ncGx2MyBidWlsZCwgc28ga2lsbCB0aGVtIGFuZCBsZXQgZGVwZW5kZW50IHJlY2lwZXMgcmVseSBvbgogIyBnZXR0ZXh0LW5hdGl2ZS4KLQotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJyZW1vdmVfc3lzcm9vdF9tNF9tYWNyb3MiCi0KLXJlbW92ZV9zeXNyb290X200X21hY3JvcyAoKSB7Ci0gICAgcm0gLXIgIiR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vYWNsb2NhbCIKLX0KK1NZU1JPT1RfRElSU19CTEFDS0xJU1QgKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkyZTRmYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi1TVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBwcm9kdWNpbmcgbXVsdGktbGluZ3VhbCBtZXNzYWdlcyIKLURFU0NSSVBUSU9OID0gIkdOVSBnZXR0ZXh0IGlzIGEgc2V0IG9mIHRvb2xzIHRoYXQgcHJvdmlkZXMgYSBmcmFtZXdvcmsgdG8gaGVscCBvdGhlciBwcm9ncmFtcyBwcm9kdWNlIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMuIFRoZXNlIHRvb2xzIGluY2x1ZGUgYSBzZXQgb2YgY29udmVudGlvbnMgYWJvdXQgaG93IHByb2dyYW1zIHNob3VsZCBiZSB3cml0dGVuIHRvIHN1cHBvcnQgbWVzc2FnZSBjYXRhbG9ncywgYSBkaXJlY3RvcnkgYW5kIGZpbGUgbmFtaW5nIG9yZ2FuaXphdGlvbiBmb3IgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MgdGhlbXNlbHZlcywgYSBydW50aW1lIGxpYnJhcnkgc3VwcG9ydGluZyB0aGUgcmV0cmlldmFsIG9mIHRyYW5zbGF0ZWQgbWVzc2FnZXMsIGFuZCBhIGZldyBzdGFuZC1hbG9uZSBwcm9ncmFtcyB0byBtYXNzYWdlIGluIHZhcmlvdXMgd2F5cyB0aGUgc2V0cyBvZiB0cmFuc2xhdGFibGUgYW5kIGFscmVhZHkgdHJhbnNsYXRlZCBzdHJpbmdzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZXR0ZXh0L2dldHRleHQuaHRtbCIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTC0yLjErIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCi0KLURFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUgdmlydHVhbC9saWJpY29udiBleHBhdCIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gImdldHRleHQtbWluaW1hbC1uYXRpdmUiCi1QUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9nZXR0ZXh0IgotUFJPVklERVNfY2xhc3MtbmF0aXZlID0gInZpcnR1YWwvZ2V0dGV4dC1uYXRpdmUiCi1SQ09ORkxJQ1RTXyR7UE59ID0gInByb3h5LWxpYmludGwiCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2V0dGV4dC9nZXR0ZXh0LSR7UFZ9LnRhci5neiBcCi0JICAgZmlsZTovL3BhcmFsbGVsLnBhdGNoIFwKLQkgICBmaWxlOi8vYWRkLXdpdGgtYmlzb25sb2NhbGVkaXIucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmQxNDQ3ZjhjNWM0NWMzMjkzNzFlZjRiZmU3ZDc5YTUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWQ0YjRjMTliZDNhMzAzNGViNjc2OTUwMGEzNTkyZmY2MTY3NTllZjQzY2YzMDU4NmRiYjdhMTdjOWRkNjk1ZCIKLQotUEFDS0FHRUNPTkZJR1ttc2djYXQtY3Vyc2VzXSA9ICItLXdpdGgtbGlibmN1cnNlcy1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0vLi4sLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzLCIKLQotTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IC1scHRocmVhZCAiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KLQotRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlzcGRpciBcCi0gICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jc2hhcnAgXAotICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXNwcmludGYgXAotICAgICAgICAgICAgICAgICAtLWRpc2FibGUtamF2YSBcCi0gICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uYXRpdmUtamF2YSBcCi0gICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1vcGVubXAgXAotICAgICAgICAgICAgICAgICAtLWRpc2FibGUtYWNsIFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWdsaWIgXAotICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZW1hY3MgXAotICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIFwKLSAgICAgICAgICAgICAgICAgLS13aXRob3V0LWdpdCBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJ4bWwgXAotICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGliY3JvY28gXAotICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlidW5pc3RyaW5nIFwKLSAgICAgICAgICAgICAgICAiCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAotICAgICAgICAgICAgICAgICAtLXdpdGgtYmlzb25sb2NhbGVkaXI9JHtkYXRhZGlyfS9sb2NhbGUgXAotIgotCi1hY3BhdGhzID0gJy1JICR7U30vZ2V0dGV4dC1ydW50aW1lL200IFwKLSAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXRvb2xzL200JwotCi1kb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2wgKCkgewotCXJtIC1mICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcwotCXJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmludGwuaAotCXJtIC1mICR7RH0ke2xpYmRpcn0vbGliaW50bC5sYQotfQotCi0jIHRoZXNlIGxhY2sgdGhlIC54IGJlaGluZCB0aGUgLnNvLCBidXQgc2hvdWxkbid0IGJlIGluIHRoZSAtZGV2IHBhY2thZ2UKLSMgT3RoZXJ3aXNlIHlvdSBnZXQgdGhlIGZvbGxvd2luZyByZXN1bHRzOgotIyA3LjRNICAgIGdsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS1nbGliYy1pcGstMjAwOC4xLXRlc3QtMjAwODAxMDQtZXA5M3h4LnJvb3Rmcy50YXIuZ3oKLSMgMjVNICAgICB1Y2xpYmMvaW1hZ2VzL2VwOTN4eC9BbmdzdHJvbS1jb25zb2xlLWltYWdlLXVjbGliYy1pcGstMjAwOC4xLXRlc3QtMjAwODAxMDQtZXA5M3h4LnJvb3Rmcy50YXIuZ3oKLSMgYmVjYXVzZSBnZXR0ZXh0IGRlcGVuZHMgb24gZ2V0dGV4dC1kZXYsIHdoaWNoIHB1bGxzIGluIG1vcmUgLWRldiBwYWNrYWdlczoKLSMgMTUyMjggICBLaUIgL2VwOTN4eC9saWJzdGRjKystZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKLSMgMTMwMCAgICBLaUIgL2VwOTN4eC91Y2xpYmMtZGV2XzAuOS4yOS1yOF9lcDkzeHguaXBrCi0jIDE0MCAgICAgS2lCIC9hcm12NHQvZ2V0dGV4dC1kZXZfMC4xNC4xLXI2X2FybXY0dC5pcGsKLSMgNCAgICAgICBLaUIgL2VwOTN4eC9saWJnY2Mtcy1kZXZfNC4yLjItcjJfZXA5M3h4LmlwawotCi1QQUNLQUdFUyA9KyAibGliZ2V0dGV4dGxpYiBsaWJnZXR0ZXh0c3JjIgotRklMRVNfbGliZ2V0dGV4dGxpYiA9ICIke2xpYmRpcn0vbGliZ2V0dGV4dGxpYi0qLnNvKiIKLUZJTEVTX2xpYmdldHRleHRzcmMgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRzcmMtKi5zbyoiCi0KLVBBQ0tBR0VTID0rICJnZXR0ZXh0LXJ1bnRpbWUgZ2V0dGV4dC1ydW50aW1lLWRldiBnZXR0ZXh0LXJ1bnRpbWUtZG9jIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgotCi1GSUxFU19nZXR0ZXh0LXJ1bnRpbWUgPSAiJHtiaW5kaXJ9L2dldHRleHQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9uZ2V0dGV4dCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2VudnN1YnN0IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2V0dGV4dC5zaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLnNvKiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L0dOVS5HZXR0ZXh0LmRsbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiCi1GSUxFU19nZXR0ZXh0LXJ1bnRpbWVfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zby4qIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jaGFyc2V0LmFsaWFzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi1GSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2ICs9ICIke2xpYmRpcn0vbGliYXNwcmludGYuYSBcCi0gICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9hdXRvc3ByaW50Zi5oIFwKLSAgICAgICAgICAgICAgICAgICAgICIKLUZJTEVTX2dldHRleHQtcnVudGltZS1kZXZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zbyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9saWJpbnRsLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi1GSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2dldHRleHQuKiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL25nZXR0ZXh0LiogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9lbnZzdWJzdC4qIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvLiogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMy8qIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvZ2V0dGV4dC4qIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvbmdldHRleHQuKiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2VudnN1YnN0LiogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC8qLjMuaHRtbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2V0dGV4dC9BQk9VVC1OTFMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9jc2hhcnBkb2MvKiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9saWJhc3ByaW50Zi9hdXRvc3ByaW50Zi5odG1sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmZvZGlyfS9hdXRvc3ByaW50Zi5pbmZvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaW50bC5zbwotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgewotCXJtICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvKgotCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvY29uZmlnLnJwYXRoCi0Jcm0gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbgotCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhjMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjguMS5iYgpAQCAtMCwwICsxLDEyMCBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMiCitERVNDUklQVElPTiA9ICJHTlUgZ2V0dGV4dCBpcyBhIHNldCBvZiB0b29scyB0aGF0IHByb3ZpZGVzIGEgZnJhbWV3b3JrIHRvIGhlbHAgb3RoZXIgcHJvZ3JhbXMgcHJvZHVjZSBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzLiBUaGVzZSB0b29scyBpbmNsdWRlIGEgc2V0IG9mIGNvbnZlbnRpb25zIGFib3V0IGhvdyBwcm9ncmFtcyBzaG91bGQgYmUgd3JpdHRlbiB0byBzdXBwb3J0IG1lc3NhZ2UgY2F0YWxvZ3MsIGEgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWluZyBvcmdhbml6YXRpb24gZm9yIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHRoZW1zZWx2ZXMsIGEgcnVudGltZSBsaWJyYXJ5IHN1cHBvcnRpbmcgdGhlIHJldHJpZXZhbCBvZiB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBhbmQgYSBmZXcgc3RhbmQtYWxvbmUgcHJvZ3JhbXMgdG8gbWFzc2FnZSBpbiB2YXJpb3VzIHdheXMgdGhlIHNldHMgb2YgdHJhbnNsYXRhYmxlIGFuZCBhbHJlYWR5IHRyYW5zbGF0ZWQgc3RyaW5ncy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9nZXR0ZXh0Lmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEwtMi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYgZXhwYXQiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorUFJPVklERVMgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvZ2V0dGV4dCIKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSA9ICJ2aXJ0dWFsL2dldHRleHQtbmF0aXZlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJwcm94eS1saWJpbnRsIgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dldHRleHQvZ2V0dGV4dC0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9wYXJhbGxlbC5wYXRjaCBcCisJICAgZmlsZTovL2FkZC13aXRoLWJpc29ubG9jYWxlZGlyLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjk3ZTAzNGNmOGNlNWJhNzNhMjhmZjZjM2MwNjM4MDkyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmOTQyYWYwZTQzOGNlZDRhOGIwZWE0YjBiNmUwZDZkNjU3MTU3YzVlMjM2NGRlNTdiYWEyNzljMWMxMjVjNDMiCisKK1BBQ0tBR0VDT05GSUdbbXNnY2F0LWN1cnNlc10gPSAiLS13aXRoLWxpYm5jdXJzZXMtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9Ly4uLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcywiCisKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAtbHB0aHJlYWQgIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpc3BkaXIgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtY3NoYXJwIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmFzcHJpbnRmIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWphdmEgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmF0aXZlLWphdmEgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtb3Blbm1wIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWFjbCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1nbGliIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWVtYWNzIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWN2cyBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1naXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlieG1sIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYmNyb2NvIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYnVuaXN0cmluZyBcCisgICAgICAgICAgICAgICAgIgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWJpc29ubG9jYWxlZGlyPSR7ZGF0YWRpcn0vbG9jYWxlIFwKKyIKKworYWNwYXRocyA9ICctSSAke1N9L2dldHRleHQtcnVudGltZS9tNCBcCisgICAgICAgICAgIC1JICR7U30vZ2V0dGV4dC10b29scy9tNCcKKworZG9faW5zdGFsbF9hcHBlbmRfbGliYy1tdXNsICgpIHsKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKKwlybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJpbnRsLmgKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmludGwubGEKK30KKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLWRvYyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vKiIKKworIyBUaGUgaXRzL01ha2VmaWxlLmFtIGhhcyBkZWZpbmVkOgorIyBpdHNkaXIgPSAkKHBrZ2RhdGFkaXIpJChQQUNLQUdFX1NVRkZJWCkvaXRzCisjIG5vdCBpdHNkaXIgPSAkKHBrZ2RhdGFkaXIpLCBzbyB1c2Ugd2lsZGNhcmQgdG8gbWF0Y2ggdGhlIHZlcnNpb24uCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS8ke0JQTn0tKi8qIgorCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUgPSAiJHtiaW5kaXJ9L2dldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9uZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2VudnN1YnN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2V0dGV4dC5zaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLnNvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L0dOVS5HZXR0ZXh0LmRsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWVfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jaGFyc2V0LmFsaWFzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2ICs9ICIke2xpYmRpcn0vbGliYXNwcmludGYuYSBcCisgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9hdXRvc3ByaW50Zi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1kZXZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9saWJpbnRsLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvLiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvbmdldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2VudnN1YnN0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC8qLjMuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2V0dGV4dC9BQk9VVC1OTFMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9jc2hhcnBkb2MvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9saWJhc3ByaW50Zi9hdXRvc3ByaW50Zi5odG1sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmZvZGlyfS9hdXRvc3ByaW50Zi5pbmZvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaW50bC5zbworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXJtICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvKgorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvY29uZmlnLnJwYXRoCisJcm0gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbgorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1Eby1ub3QtaWdub3JlLXJldHVybi12YWx1ZS1vZi13cml0ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLURvLW5vdC1pZ25vcmUtcmV0dXJuLXZhbHVlLW9mLXdyaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTk2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1Eby1ub3QtaWdub3JlLXJldHVybi12YWx1ZS1vZi13cml0ZS5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGQ2NTAxYjEwNzk0MGU5ZjU0OGM4OTIzNmQ3NzNjNmQzM2MxNWE1YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNiBBcHIgMjAxNiAxMzoyODo1OSAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvMl0gRG8gbm90IGlnbm9yZSByZXR1cm4gdmFsdWUgb2Ygd3JpdGUoKQorCitnY2Mgd2FybnMgYWJvdXQgaWdub3JpbmcgcmV0dXJuIHZhbHVlIHdoZW4gY29tcGlsaW5nCit3aXRoIGZvcnRpZnkgdHVybmVkIG9uLgorCithc3NlcnQgd2hlbiB3cml0ZSgpIGZhaWxzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyBnbGliL3Rlc3RzL3VuaXguYyB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2xpYi90ZXN0cy91bml4LmMgYi9nbGliL3Rlc3RzL3VuaXguYworaW5kZXggMzU0MzQ1OC4uNGU3ZWQ4NSAxMDA2NDQKKy0tLSBhL2dsaWIvdGVzdHMvdW5peC5jCisrKysgYi9nbGliL3Rlc3RzL3VuaXguYworQEAgLTMyLDE0ICszMiwxNSBAQCB0ZXN0X3BpcGUgKHZvaWQpCisgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgIGludCBwaXBlZmRbMl07CisgICBjaGFyIGJ1ZlsxMDI0XTsKKy0gIHNzaXplX3QgYnl0ZXNfcmVhZDsKKysgIHNzaXplX3QgYnl0ZXNfcmVhZCwgYnl0ZXNfd3JpdHRlbjsKKyAgIGdib29sZWFuIHJlczsKKyAKKyAgIHJlcyA9IGdfdW5peF9vcGVuX3BpcGUgKHBpcGVmZCwgRkRfQ0xPRVhFQywgJmVycm9yKTsKKyAgIGdfYXNzZXJ0IChyZXMpOworICAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKKyAKKy0gIHdyaXRlIChwaXBlZmRbMV0sICJoZWxsbyIsIHNpemVvZiAoImhlbGxvIikpOworKyAgYnl0ZXNfd3JpdHRlbiA9IHdyaXRlIChwaXBlZmRbMV0sICJoZWxsbyIsIHNpemVvZiAoImhlbGxvIikpOworKyAgZ19hc3NlcnQgKGJ5dGVzX3dyaXR0ZW4gIT0gLTEgJiYgIndyaXRlKCkgZmFpbGVkIik7CisgICBtZW1zZXQgKGJ1ZiwgMCwgc2l6ZW9mIChidWYpKTsKKyAgIGJ5dGVzX3JlYWQgPSByZWFkIChwaXBlZmRbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKKyAgIGdfYXNzZXJ0X2NtcGludCAoYnl0ZXNfcmVhZCwgPiwgMCk7CistLSAKKzIuOC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1jb25maWd1cmUuYWMtRG8tbm90LXVzZS1yZWFkbGluay13aGVuLWNyb3NzLWNvbXBpbGluLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmUzNjMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1jb21taXQgOWIzOGQ1MDdlYzM3YjNkN2Q0ZGY2MDk1ZmE3ZWQxNmI0N2QzOTlmNwotQXV0aG9yOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgotRGF0ZTogICBTYXQgTWFyIDI5IDIxOjEwOjQzIDIwMTQgLTA0MDAKLQotICAgIGNvbmZpZ3VyZS5hYzogRG8gbm90IHVzZSByZWFkbGluayB3aGVuIGNyb3NzIGNvbXBpbGluZy4KLQotICAgIERvIG5vdCB1c2UgcmVhZGxpbmsgdG8gc2V0IEFCU19HTElCX1JVTlRJTUVfTElCRElSIHdoZW4gY3Jvc3MKLSAgICBjb21waWxpbmcuICBEb2luZyBzbyBjYXVzZXMgaG9zdCBwYXRocyB0byBwb3RlbnRpYWxseSBwb2xsdXRlCi0gICAgdGhlIHRhcmdldC4KLQotICAgIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgdGhlIHBhdGggaXMgbm90IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBpZgotICAgIGl0IGNvbnRhaW5zIGFueSAiLi4iIHJlZmVyZW5jZXMgc28gaXQncyBub3QgY29tcGxldGVseSBjb3JyZWN0LgotCi0gICAgVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc1NzVdCi0gICAgU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KLQotZGlmZiAtcnViIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjIGdsaWItMi4zOC4yL2NvbmZpZ3VyZS5hYwotLS0tIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTc6MTMuMDM1NTY3MTQzIC0wNDAwCi0rKysgZ2xpYi0yLjM4LjIvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTk6MDcuMDcxNTY2MDU3IC0wNDAwCi1AQCAtMjc1LDcgKzI3NSwxMSBAQAotICAgICAgICAgICAgW10sCi0gCSAgIFt3aXRoX3J1bnRpbWVfbGliZGlyPSIiXSkKLSBHTElCX1JVTlRJTUVfTElCRElSPSIkd2l0aF9ydW50aW1lX2xpYmRpciIKLStBU19JRihbIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllcyBdLCBbCi0rQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9IiRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXIiCi0rXSwgWwotIEFCU19HTElCX1JVTlRJTUVfTElCRElSPSJgcmVhZGxpbmsgLW0gJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcmAiCi0rXSkKLSBBQ19TVUJTVChHTElCX1JVTlRJTUVfTElCRElSKQotIEFDX1NVQlNUKEFCU19HTElCX1JVTlRJTUVfTElCRElSKQotIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xJQl9SVU5USU1FX0xJQkRJUiwgW3Rlc3QgIngkd2l0aF9ydW50aW1lX2xpYmRpciIgIT0gIngiXSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAyLXRlc3RzLUlnbm9yZS15Mmstd2FybmluZ3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMi10ZXN0cy1JZ25vcmUteTJrLXdhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MWZhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMi10ZXN0cy1JZ25vcmUteTJrLXdhcm5pbmdzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYjA2YjIyZmVjYzdkZWRhOGM2NWUyODY3MDU2MmNhMjM3MWU0ZTcyNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE2IEFwciAyMDE2IDEzOjQzOjU0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSB0ZXN0czogSWdub3JlIHkyayB3YXJuaW5ncworCitzaWxlbmNlcworfCAuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi93b3Jrc3BhY2Uvc291cmNlcy9nbGliLTIuMC9nbGliL3Rlc3RzL2dkYXRldGltZS5jOiBJbiBmdW5jdGlvbiAndGVzdF9zdHJmdGltZSc6Cit8IC4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3dvcmtzcGFjZS9zb3VyY2VzL2dsaWItMi4wL2dsaWIvdGVzdHMvZ2RhdGV0aW1lLmM6MTMzODozOiBlcnJvcjogJyVjJyB5aWVsZHMgb25seSBsYXN0IDIgZGlnaXRzIG9mIHllYXIgaW4gc29tZSBsb2NhbGVzIFstV2Vycm9yPWZvcm1hdC15MmtdCit8ICAgICJhJWEgQSVBIGIlYiBCJUIgYyVjIEMlQyBkJWQgZSVlIEYlRiBnJWcgRyVHIGglaCBIJUggSSVJIGolaiBtJW0gTSVNICIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIGdsaWIvdGVzdHMvZ2RhdGV0aW1lLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nbGliL3Rlc3RzL2dkYXRldGltZS5jIGIvZ2xpYi90ZXN0cy9nZGF0ZXRpbWUuYworaW5kZXggMTZhMTYzYy4uZTYwNjJmYyAxMDA2NDQKKy0tLSBhL2dsaWIvdGVzdHMvZ2RhdGV0aW1lLmMKKysrKyBiL2dsaWIvdGVzdHMvZ2RhdGV0aW1lLmMKK0BAIC0xMzI2LDYgKzEzMjYsOSBAQCB0ZXN0X3ogKHZvaWQpCisgICBnX3RpbWVfem9uZV91bnJlZiAodHopOworIH0KKyAKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LXkyayIKKysKKyBzdGF0aWMgdm9pZAorIHRlc3Rfc3RyZnRpbWUgKHZvaWQpCisgeworQEAgLTEzNTEsNiArMTM1NCw3IEBAIHRlc3Rfc3RyZnRpbWUgKHZvaWQpCisgICAgIH0KKyAjZW5kaWYKKyB9CisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAKKyBzdGF0aWMgdm9pZAorIHRlc3RfZmluZF9pbnRlcnZhbCAodm9pZCkKKy0tIAorMi44LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL0VuYWJsZS1tb3JlLXRlc3RzLXdoaWxlLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9FbmFibGUtbW9yZS10ZXN0cy13aGlsZS1jcm9zcy1jb21waWxpbmcucGF0Y2gKaW5kZXggZjFlNjg4Yy4uOWI0ZGVkMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL0VuYWJsZS1tb3JlLXRlc3RzLXdoaWxlLWNyb3NzLWNvbXBpbGluZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvRW5hYmxlLW1vcmUtdGVzdHMtd2hpbGUtY3Jvc3MtY29tcGlsaW5nLnBhdGNoCkBAIC00Niw3ICs0Niw3IEBACiBAQCAtNTQ1LDcgKzU0OCw2IEBAIHRlc3QuZ3Jlc291cmNlOiB0ZXN0LmdyZXNvdXJjZS54bWwgTWFrZWZpbGUgJChzaGVsbCAkKGdsaWJfY29tcGlsZV9yZXNvdXJjZXMpIC0tCiAgCiAgRVhUUkFfRElTVCArPSB0ZXN0LmdyZXNvdXJjZS54bWwgdGVzdDEudHh0IHRlc3QyLmdyZXNvdXJjZS54bWwgdGVzdDIudHh0IHRlc3QzLmdyZXNvdXJjZS54bWwgdGVzdDMudHh0IHRlc3Q0LmdyZXNvdXJjZS54bWwKLSBDTEVBTkZJTEVTICs9IHRlc3RfcmVzb3VyY2VzLmMgdGVzdF9yZXNvdXJjZXMyLltjaF0gcGx1Z2luX3Jlc291cmNlcy5jIHRlc3QuZ3Jlc291cmNlCisgQ0xFQU5GSUxFUyArPSB0ZXN0LWdlbmVyYXRlZC50eHQgdGVzdF9yZXNvdXJjZXMuYyB0ZXN0X3Jlc291cmNlczIuW2NoXSBwbHVnaW5fcmVzb3VyY2VzLmMgdGVzdC5ncmVzb3VyY2UKIC1lbmRpZiAjICFDUk9TU19DT01QSUxJTkcKICAKICBCVUlMVF9TT1VSQ0VTICs9IGdpb3R5cGVmdW5jcy5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItMi4wLWNvbmZpZ3VyZS1yZWFkbGluay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc1OWQxMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotY29uZmlndXJlLmFjOiBjaGFuZ2UgcmVhZGxpbmsgLWYgdG8gLW0KLQotQ2hhbmdlICJyZWFkbGluayAtZiIgdG8gInJlYWRsaW5rIC1tIiBzaW5jZSAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyCi1tYXkgbm90IGV4aXN0LgotCi1UaGlzIHBhdGNoIHNob3VsZCBnbyB0byB0aGUgdXBzdHJlYW0sIEkgd2lsbCBzZW5kIGl0IHNvb25lci4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTI3MSw3ICsyNzEsNyBAQCBBQ19BUkdfV0lUSChydW50aW1lLWxpYmRpciwKLSAgICAgICAgICAgIFtdLAotIAkgICBbd2l0aF9ydW50aW1lX2xpYmRpcj0iIl0pCi0gR0xJQl9SVU5USU1FX0xJQkRJUj0iJHdpdGhfcnVudGltZV9saWJkaXIiCi0tQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9ImByZWFkbGluayAtZiAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyYCIKLStBQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iYHJlYWRsaW5rIC1tICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXJgIgotIEFDX1NVQlNUKEdMSUJfUlVOVElNRV9MSUJESVIpCi0gQUNfU1VCU1QoQUJTX0dMSUJfUlVOVElNRV9MSUJESVIpCi0gQU1fQ09ORElUSU9OQUwoSEFWRV9HTElCX1JVTlRJTUVfTElCRElSLCBbdGVzdCAieCR3aXRoX3J1bnRpbWVfbGliZGlyIiAhPSAieCJdKQotLS0gCi0xLjguMS4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9yZWxvY2F0ZS1tb2R1bGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3JlbG9jYXRlLW1vZHVsZXMucGF0Y2gKaW5kZXggZjllM2YzZC4uNjVkNWI0MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3JlbG9jYXRlLW1vZHVsZXMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3JlbG9jYXRlLW1vZHVsZXMucGF0Y2gKQEAgLTYsNDQgKzYsNDIgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQogU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KIAorUG9ydCBwYXRjaCB0byAyLjQ4CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgZ2lvL2dpb21vZHVsZS5jIHwgMTIgKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKwogZGlmZiAtLWdpdCBhL2dpby9naW9tb2R1bGUuYyBiL2dpby9naW9tb2R1bGUuYwotaW5kZXggNTZjNDk4Yy4uYTJlMzJiNyAxMDA2NDQKK2luZGV4IGRhN2MxNjcuLmNjMGJjN2MgMTAwNjQ0CiAtLS0gYS9naW8vZ2lvbW9kdWxlLmMKICsrKyBiL2dpby9naW9tb2R1bGUuYwotQEAgLTQ3LDYgKzQ3LDI3IEBACi0gI2luY2x1ZGUgImdkZXNrdG9wYXBwaW5mby5oIgotICNlbmRpZgotIAorQEAgLTQwLDYgKzQwLDggQEAKKyAjaW5jbHVkZSAiZ25ldHdvcmttb25pdG9yLmgiCisgI2lmZGVmIEdfT1NfV0lOMzIKKyAjaW5jbHVkZSAiZ3JlZ2lzdHJ5c2V0dGluZ3NiYWNrZW5kLmgiCisrI2Vsc2UKICsjaW5jbHVkZSA8ZGxmY24uaD4KLSsKLSsvKgotKyAqIEdlbmVyYXRlIGEgR0lPIG1vZHVsZSBkaXJlY3RvcnkgYmFzZWQgb24gd2hlcmUgZ2xpYiBpcyBpbnN0YWxsZWQKLSsgKi8KLStzdGF0aWMgY29uc3QgY2hhciAqCi0rX2dldF9naW9fbW9kdWxlX2RpciAodm9pZCkKLSt7Ci0rICBEbF9pbmZvIGluZm87Ci0rCi0rICBpZiAoZGxhZGRyIChnX2lvX21vZHVsZV9uZXcsICZpbmZvKSkgewotKyAgICBjaGFyICpsaWJkaXIgPSBnX3BhdGhfZ2V0X2Rpcm5hbWUgKGluZm8uZGxpX2ZuYW1lKTsKLSsgICAgY2hhciAqZGlyID0gZ19idWlsZF9maWxlbmFtZSAobGliZGlyLCAiZ2lvIiwgIm1vZHVsZXMiLCBOVUxMKTsKLSsgICAgZ19mcmVlIChsaWJkaXIpOwotKyAgICByZXR1cm4gZGlyOwotKyAgfSBlbHNlIHsKLSsgICAgcmV0dXJuIEdJT19NT0RVTEVfRElSOwotKyAgfQotK30KLSsKLSsKLSAvKioKLSAgKiBTRUNUSU9OOmdpb21vZHVsZQotICAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTG9hZGFibGUgR0lPIE1vZHVsZXMKLUBAIC0xMDU3LDcgKzEwNzgsNyBAQCBfZ19pb19tb2R1bGVzX2Vuc3VyZV9sb2FkZWQgKHZvaWQpCi0gICAgICAgLyogVGhlbiBsb2FkIHRoZSBjb21waWxlZCBpbiBwYXRoICovCi0gICAgICAgbW9kdWxlX2RpciA9IGdfZ2V0ZW52ICgiR0lPX01PRFVMRV9ESVIiKTsKLSAgICAgICBpZiAobW9kdWxlX2RpciA9PSBOVUxMKQotLSAgICAgICAgbW9kdWxlX2RpciA9IEdJT19NT0RVTEVfRElSOwotKyAgICAgICAgbW9kdWxlX2RpciA9IF9nZXRfZ2lvX21vZHVsZV9kaXIgKCk7CisgI2VuZGlmCisgI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAgCi0gICAgICAgZ19pb19tb2R1bGVzX3NjYW5fYWxsX2luX2RpcmVjdG9yeV93aXRoX3Njb3BlIChtb2R1bGVfZGlyLCBzY29wZSk7CitAQCAtMTAzNiw3ICsxMDM4LDE1IEBAIGdldF9naW9fbW9kdWxlX2RpciAodm9pZCkKKyAjZW5kaWYKKyAgICAgICBnX2ZyZWUgKGluc3RhbGxfZGlyKTsKKyAjZWxzZQorLSAgICAgIG1vZHVsZV9kaXIgPSBnX3N0cmR1cCAoR0lPX01PRFVMRV9ESVIpOworKyAgICAgIERsX2luZm8gaW5mbzsKKysKKysgICAgICBpZiAoZGxhZGRyIChnX2lvX21vZHVsZV9uZXcsICZpbmZvKSkgeworKyAgICAgICAgY2hhciAqbGliZGlyID0gZ19wYXRoX2dldF9kaXJuYW1lIChpbmZvLmRsaV9mbmFtZSk7CisrICAgICAgICBtb2R1bGVfZGlyID0gZ19idWlsZF9maWxlbmFtZSAobGliZGlyLCAiZ2lvIiwgIm1vZHVsZXMiLCBOVUxMKTsKKysgICAgICAgIGdfZnJlZSAobGliZGlyKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgbW9kdWxlX2RpciA9IGdfc3RyZHVwIChHSU9fTU9EVUxFX0RJUik7CisrICAgICAgfQorICNlbmRpZgorICAgICB9CiAgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ2LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi40Ni4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTQ0NWI0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ2LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1yZXF1aXJlIGdsaWIuaW5jCi0KLVBFID0gIjEiCi0KLVNIUlRfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCi0KLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2dsaWIvJHtTSFJUX1ZFUn0vZ2xpYi0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWxpYnRvb2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly9wdGVzdC1wYXRocy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly91Y2xpYmNfbXVzbF90cmFuc2xhdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoIFwKLQkgICBmaWxlOi8vMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0VuYWJsZS1tb3JlLXRlc3RzLXdoaWxlLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9naS1leGNsdWRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtSW5zdGFsbC1naW8tcXVlcnltb2R1bGVzLWFzLWxpYmV4ZWNfUFJPR1JBTS5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JlbG9jYXRlLW1vZHVsZXMucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI3ZjgxNWQ2ZTQ2ZGY2OGUwNzBjYjQyMWVkN2YxMTM5ZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1MDMxNzIyZTM3MDM2NzE5YzFhMDkxNjNjYzZjZjdjMzI2ZTRjNGYxZjFlMDc0YjQzM2MxNTY4NjJiZDczM2RiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wXzIuNDguMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1ZjY0NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ4LjIuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBnbGliLmluYworCitQRSA9ICIxIgorCitTSFJUX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9nbGliLyR7U0hSVF9WRVJ9L2dsaWItJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1wYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91Y2xpYmNfbXVzbF90cmFuc2xhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0VuYWJsZS1tb3JlLXRlc3RzLXdoaWxlLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9naS1leGNsdWRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5zdGFsbC1naW8tcXVlcnltb2R1bGVzLWFzLWxpYmV4ZWNfUFJPR1JBTS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1pZ25vcmUtcmV0dXJuLXZhbHVlLW9mLXdyaXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdGVzdHMtSWdub3JlLXkyay13YXJuaW5ncy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yZWxvY2F0ZS1tb2R1bGVzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjRhYzFhYTJlZmQ0ZjU3OThjMzc2MjVlYTY5N2FjNTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjI1ZTc1MTU4OWNiMWE1ODgyNmVhYzI0ZmJkNDE4NmNkYTQ1MThhZjc3MjgwNmI2NjZhM2Y5MWY2NmU2ZDNmNCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYwppbmRleCBlNzY0ZmFkLi45MDZlMGQ0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIExFQURfU09OQU1FID0gImxpYmdsaWItMi4wLioiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZ3RrLWRvYyBwa2djb25maWcgcHRlc3QtZ25vbWUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGJhc2gtY29tcGxldGlvbiBnaW8tbW9kdWxlLWNhY2hlCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IGd0ay1kb2MgcGtnY29uZmlnIHB0ZXN0LWdub21lIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBiYXNoLWNvbXBsZXRpb24gZ2lvLW1vZHVsZS1jYWNoZSBweXRob24zbmF0aXZlCiAKIFMgPSAiJHtXT1JLRElSfS9nbGliLSR7UFZ9IgogCkBAIC00NCw3ICs0NCw3IEBACiBFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtbGliaWNvbnY9Z251IgogCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLQlzZWQgLWkgLWUgJzFzLCMhLiosIyEke1VTUkJJTlBBVEh9L2VudiBweXRob24sJyAke1N9L2dpby9nZGJ1cy0yLjAvY29kZWdlbi9nZGJ1cy1jb2RlZ2VuLmluCisJc2VkIC1pIC1lICcxcywjIS4qLCMhJHtVU1JCSU5QQVRIfS9lbnYgcHl0aG9uMywnICR7U30vZ2lvL2dkYnVzLTIuMC9jb2RlZ2VuL2dkYnVzLWNvZGVnZW4uaW4KIH0KIAogRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXApAQCAtNTksNyArNTksOCBAQAogICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2xpYi1ta2VudW1zIFwKICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dsaWItY29tcGlsZS1yZXNvdXJjZXMgXAogICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dsaWItMi4wL2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4gXAotICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMvZ3NjaGVtYS5kdGQiCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcy9nc2NoZW1hLmR0ZCBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2V0dGV4dC9pdHMiCiBGSUxFU18ke1BOfS1kYmcgKz0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2RiICR7ZGF0YWRpcn0vZ2RiIgogRklMRVNfJHtQTn0tY29kZWdlbiA9ICIke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weSBcCiAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9nZGJ1cy1jb2RlZ2VuIgpAQCAtNjcsMTUgKzY4LDE5IEBACiAKIEFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgogQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCisjIFZhbGdyaW5kIHJ1bnRpbWUgZGV0ZWN0aW9uIHdvcmtzIHVzaW5nIGhhbmQtd3JpdHRlbiBhc3NlbWJseSwgd2hpY2gKKyMgZG9lc24ndCBzdXBwb3J0IG1pcHMxNmUKK0NQUEZMQUdTX2FwcGVuZF9jbGFzcy10YXJnZXRfbWlwczE2ZSA9ICIgLUROVkFMR1JJTkQ9MSIKIAogVVNFX05MUyA9ICJ5ZXMiCiAKIGRvX2luc3RhbGxfYXBwZW5kICgpIHsKIAlpZiBbIC1mICR7RH0ke2JpbmRpcn0vZ3Rlc3Rlci1yZXBvcnQgXTsgdGhlbgotCQlzZWQgJHtEfSR7YmluZGlyfS9ndGVzdGVyLXJlcG9ydCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcKKwkJc2VkICR7RH0ke2JpbmRpcn0vZ3Rlc3Rlci1yZXBvcnQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbjN8JwogCWZpCiAKIAkjIFJlbW92ZSBzb21lIHVucGFja2FnZWQgZmlsZXMKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi9fX3B5Y2FjaGVfXwogCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weWMKIAlybSAtZiAke0R9JHtkYXRhZGlyfS9nbGliLTIuMC9jb2RlZ2VuLyoucHlvCiAKQEAgLTEwOCw4ICsxMTMsNiBAQAogICAgICAgICAgICAgdHpkYXRhLWFzaWEgXAogICAgICAgICAgICAgdHpkYXRhLWV1cm9wZSBcCiAgICAgICAgICAgICB0emRhdGEtcG9zaXggXAotICAgICAgICAgICAgcHl0aG9uLXB5Z29iamVjdCBcCi0gICAgICAgICAgICBweXRob24tZGJ1cyBcCiAgICAgICAgICAgICBzaGFyZWQtbWltZS1pbmZvIFwKICAgICAgICAgICAgIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ2LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ2LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OWFjOTguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40Ni4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotU1VNTUFSWSA9ICJHTGliIG5ldHdvcmtpbmcgZXh0ZW5zaW9ucyIKLURFU0NSSVBUSU9OID0gImdsaWItbmV0d29ya2luZyBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGNlcnRhaW4gR0xpYiBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGRpcmVjdGx5IGluIEdMaWIgaXRzZWxmIGJlY2F1c2Ugb2YgdGhlaXIgZGVwZW5kZW5jaWVzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9nbGliLW5ldHdvcmtpbmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgotCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgotCi1TRUNUSU9OID0gImxpYnMiCi1ERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYzAwMGUwYjU3OWY1ZDhmZDQ4ZWZlYmM3YWM0ZDk1ZGMiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJkNTAzNDIxNDIxN2Y3MDU4OTFiNmM5ZTcxOWNjMmM1ODNjODcwYmZjZmRjNDU0ZWJiYjVlNWU4OTQwYWM5MGIxIgotCi1QQUNLQUdFQ09ORklHID8/PSAiY2EtY2VydGlmaWNhdGVzIGdudXRscyIKLQotIyBObyBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIGl0IHdvcmtzIHdpdGhvdXQgY2EtY2VydGlmaWNhdGVzIGluc3RhbGxlZAotUEFDS0FHRUNPTkZJR1tjYS1jZXJ0aWZpY2F0ZXNdID0gIi0td2l0aC1jYS1jZXJ0aWZpY2F0ZXM9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCwtLXdpdGhvdXQtY2EtY2VydGlmaWNhdGVzIgotUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCi1QQUNLQUdFQ09ORklHW2xpYnByb3h5XSA9ICItLXdpdGgtbGlicHJveHksLS13aXRob3V0LWxpYnByb3h5LGxpYnByb3h5IgotUEFDS0FHRUNPTkZJR1twa2NzMTFdID0gIi0td2l0aC1wa2NzMTEsLS13aXRob3V0LXBrY3MxMSxwMTEta2l0IgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWdub21lLXByb3h5IgotCi1pbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnaW8tbW9kdWxlLWNhY2hlCi0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5zbyAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy8iCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLmxhIgotRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5hIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40OC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40OC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDk5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ4LjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJHTGliIG5ldHdvcmtpbmcgZXh0ZW5zaW9ucyIKK0RFU0NSSVBUSU9OID0gImdsaWItbmV0d29ya2luZyBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGNlcnRhaW4gR0xpYiBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGRpcmVjdGx5IGluIEdMaWIgaXRzZWxmIGJlY2F1c2Ugb2YgdGhlaXIgZGVwZW5kZW5jaWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9nbGliLW5ldHdvcmtpbmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDdjZjgxZDUyYzg1NmIwYzY2Zjc4MjEwMjFmNDBlMDgiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI5MjVjMGM0OWQ2YjJiOGI1Njk1ZjJlMzNjZDk1MmQxZGJiN2QxOGQzZjJmNzk2NDEzNTc3NzE5MzE1YmIzYTg0IgorCitQQUNLQUdFQ09ORklHID8/PSAiY2EtY2VydGlmaWNhdGVzIGdudXRscyIKKworIyBObyBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIGl0IHdvcmtzIHdpdGhvdXQgY2EtY2VydGlmaWNhdGVzIGluc3RhbGxlZAorUEFDS0FHRUNPTkZJR1tjYS1jZXJ0aWZpY2F0ZXNdID0gIi0td2l0aC1jYS1jZXJ0aWZpY2F0ZXM9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCwtLXdpdGhvdXQtY2EtY2VydGlmaWNhdGVzIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW2xpYnByb3h5XSA9ICItLXdpdGgtbGlicHJveHksLS13aXRob3V0LWxpYnByb3h5LGxpYnByb3h5IgorUEFDS0FHRUNPTkZJR1twa2NzMTFdID0gIi0td2l0aC1wa2NzMTEsLS13aXRob3V0LXBrY3MxMSxwMTEta2l0IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWdub21lLXByb3h5IgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnaW8tbW9kdWxlLWNhY2hlCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5zbyAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy8iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5hIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODZhNDgwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCi0KLVRoaXMgaXMgYSBoYWNrIHRvIGZpeCBidWlsZGluZyB0aGUgbG9jYWxlIGJpdHMgb24gYW4gb2xkZXIKLUNlbnRPcyA1LlggbWFjaGluZQotCi1JbmRleDogZ2l0L2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKLSsrKyBnaXQub3JpZy9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKLUBAIC0xOSw2ICsxOSw4IEBACi0gI2lmbmRlZiBfTERfQ09ORklHX0gKLSAjZGVmaW5lIF9MRF9DT05GSUdfSAkxCi0gCi0rI2RlZmluZSBEVU1NWV9MT0NBTEVfVAotKwotIC8qIFVzZSB0aGUgaW50ZXJuYWwgdGV4dGRvbWFpbiB1c2VkIGZvciBsaWJjIG1lc3NhZ2VzLiAgKi8KLSAjZGVmaW5lIFBBQ0tBR0UgX2xpYmNfaW50bF9kb21haW5uYW1lCi0gI2lmbmRlZiBWRVJTSU9OCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5MzBmZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIzLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotU1VNTUFSWSA9ICJDcm9zcyBsb2NhbGUgZ2VuZXJhdGlvbiB0b29sIGZvciBnbGliYyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2xpYmMuaHRtbCIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiTEdQTC0yLjEiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VTO21kNT1lOWE1NThlMjQzYjM2ZDMyMDlmMzgwZGViMzk0YjIxMyBcCi0gICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKLSAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCi0KLQotaW5oZXJpdCBuYXRpdmUKLWluaGVyaXQgYXV0b3Rvb2xzCi0KLUZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiR7RklMRV9ESVJOQU1FfS9nbGliYzoiCi0KLVNSQ0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCi1HTElCQ19HSVRfVVJJID89ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2xpYmMuZ2l0IgotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikiCi0KLVNSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtTUkNCUkFOQ0h9O25hbWU9Z2xpYmMgXAotICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL2tyYWovbG9jYWxlZGVmO2JyYW5jaD1tYXN0ZXI7bmFtZT1sb2NhbGVkZWY7ZGVzdHN1ZmZpeD1naXQvbG9jYWxlZGVmIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaCBcCi0gICAgICAgICAgICR7RUdMSUJDUEFUQ0hFU30gXAotIgotRUdMSUJDUEFUQ0hFUyA9ICJcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE2LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNy1SZW1vdmUtYmFzaC1kZXBlbmRlbmN5LWZvci1uc2NkLWluaXQtc2NyaXB0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE5LWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMC1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjEtZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIyLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIzLWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI1LWVnbGliYy1Gb3J3YXJkLXBvcnQtY3Jvc3MtbG9jYWxlLWdlbmVyYXRpb24tc3VwcG9ydC5wYXRjaCBcCi0iCi0KLVNSQ1JFVl9nbGliYyA/PSAiZTc0MjkyOGMxNTkyYjQzZGI2ODA5ZGI0ZjM5ZTY3YmUxNTFjZGQyNyIKLVNSQ1JFVl9sb2NhbGVkZWYgPz0gIjVhODFmZjlmMDZhN2E4MDhkNGMzZDM3YmJmMzQwNzdhNGM1OTAyZWQiCi0KLSMgTWFrZXMgZm9yIGEgcmF0aGVyIGxvbmcgcmV2ICgyMiBjaGFyYWN0ZXJzKSwgYnV0Li4uCi0jCi1TUkNSRVZfRk9STUFUID0gImdsaWJjX2xvY2FsZWRlZiIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1nbGliYz0ke1N9IgotQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSAtc3RkPWdudTk5IC1ESVNfSU5cKHhcKT0nMCciCi0KLWRvX2NvbmZpZ3VyZSAoKSB7Ci0JJHtTfS9sb2NhbGVkZWYvY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQotfQotCi0KLWRvX2luc3RhbGwoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9Ci0JaW5zdGFsbCAtbSAwNzU1ICR7Qn0vbG9jYWxlZGVmICR7RH0ke2JpbmRpcn0vY3Jvc3MtbG9jYWxlZGVmCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjI0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGNjY2VkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yNC5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIkNyb3NzIGxvY2FsZSBnZW5lcmF0aW9uIHRvb2wgZm9yIGdsaWJjIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbGliYy5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMLTIuMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworIyBUZWxsIGF1dG90b29scyB0aGF0IHdlJ3JlIHdvcmtpbmcgaW4gdGhlIGxvY2FsZWRlZiBkaXJlY3RvcnkKKyMKK0FVVE9UT09MU19TQ1JJUFRfUEFUSCA9ICIke1N9L2xvY2FsZWRlZiIKKworaW5oZXJpdCBuYXRpdmUKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiR7RklMRV9ESVJOQU1FfS9nbGliYzoiCisKK1NSQ0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCitHTElCQ19HSVRfVVJJID89ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2xpYmMuZ2l0IgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikiCisKK1NSQ1JFVl9nbGliYyA/PSAiZWEyMzgxNWE3OTVmNzIwMzUyNjI5NTNkYWQ1YmViMDNlMDljMTdkZCIKK1NSQ1JFVl9sb2NhbGVkZWYgPz0gIjI5ODY5YjZkYzExNDI3YzViYWI4MzliZGIxNTVjODVhN2M2NDRjNzEiCisKK1NSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtTUkNCUkFOQ0h9O25hbWU9Z2xpYmMgXAorICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL2tyYWovbG9jYWxlZGVmO2JyYW5jaD1tYXN0ZXI7bmFtZT1sb2NhbGVkZWY7ZGVzdHN1ZmZpeD1naXQvbG9jYWxlZGVmIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LVJlbW92ZS1iYXNoLWRlcGVuZGVuY3ktZm9yLW5zY2QtaW5pdC1zY3JpcHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjUtRGVmaW5lLURVTU1ZX0xPQ0FMRV9ULWlmLW5vdC1kZWZpbmVkLnBhdGNoIFwKKyIKKyMgTWFrZXMgZm9yIGEgcmF0aGVyIGxvbmcgcmV2ICgyMiBjaGFyYWN0ZXJzKSwgYnV0Li4uCisjCitTUkNSRVZfRk9STUFUID0gImdsaWJjX2xvY2FsZWRlZiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1nbGliYz0ke1N9IgorQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSAtc3RkPWdudTk5IC1ESVNfSU5cKHhcKT0nMCciCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vbG9jYWxlZGVmICR7RH0ke2JpbmRpcn0vY3Jvc3MtbG9jYWxlZGVmCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMKaW5kZXggNTk3NWZkMi4uMmUzYmM4MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWwuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsLmluYwpAQCAtNSwxMyArNSwxMyBAQAogUEFDS0FHRVNfRFlOQU1JQyA9ICIiCiAKIFNUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKLVNUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX1NZU30iCiBUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9IgogCiBkb19jb25maWd1cmUgKCkgewogCShjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCiAJZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKLQljZmdzY3JpcHQ9YHB5dGhvbiAtYyAiaW1wb3J0IG9zOyBwcmludCBvcy5wYXRoLnJlbHBhdGgoJyR7U30nLCAnLicpImAvY29uZmlndXJlCisJY2Znc2NyaXB0PWBweXRob24zIC1jICJpbXBvcnQgb3M7IHByaW50KG9zLnBhdGgucmVscGF0aCgnJHtTfScsICcuJykpImAvY29uZmlndXJlCiAJJGNmZ3NjcmlwdCAtLWhvc3Q9JHtUQVJHRVRfU1lTfSAtLWJ1aWxkPSR7QlVJTERfU1lTfSBcCiAJCS0tcHJlZml4PS91c3IgXAogCQktLXdpdGhvdXQtY3ZzIC0tZGlzYWJsZS1zYW5pdHktY2hlY2tzIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjI0LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjIzLmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjI0LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxkLmluYwppbmRleCBjNWY0ZGIyLi5iOTgyMzY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sZC5pbmMKQEAgLTE0LDEwICsxNCwxNCBAQAogICAgICAgICAibWlwczY0ZWwtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCiAgICAgICAgICJtaXBzNjRlbCI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAogICAgICAgICAibWlwcy1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwc2lzYTMycjYiOiBbImxkLWxpbnV4LW1pcHNuOC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzaXNhMzJyNmVsIjogWyJsZC1saW51eC1taXBzbjguc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAogICAgICAgICAibWlwczY0LW5mLW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAogICAgICAgICAibWlwczY0LW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCiAgICAgICAgICJtaXBzNjRlbC1uZi1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKICAgICAgICAgIm1pcHM2NGVsLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzaXNhNjRyNiI6IFsibGQtbGludXgtbWlwc244LnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHNpc2E2NHI2ZWwiOiBbImxkLWxpbnV4LW1pcHNuOC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCiAgICAgICAgICJwb3dlcnBjIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCiAgICAgICAgICJwb3dlcnBjLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCiAgICAgICAgICJwb3dlcnBjNjQiOiBbImxkNjQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYwppbmRleCBlODY4ZTM4Li4wYTdhZGZjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYwpAQCAtMTksNyArMTksNyBAQAogCiAjIGRlZmF1bHQgdG8gZGlzYWJsZWQgCiBFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OID89ICIwIgotRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTl9wbi1uYXRpdmVzZGstZ2xpYmMtbG9jYWxlID0gIjAiCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OX3BuLW5hdGl2ZXNkay1nbGliYy1sb2NhbGUgPSAiMSIKIAogI2VuYWJsZSBsb2NhbGUgZ2VuZXJhdGlvbiBvbiB0aGVzZSBhcmNoZXMKICMgQklOQVJZX0xPQ0FMRV9BUkNIRVMgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yMy5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjI0LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yMy5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjI0LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMKaW5kZXggM2EwNjc3My4uYmNlMGE0MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzLmluYwpAQCAtMTQsMyArMTQsNyBAQAogCQlpbnN0YWxsIC1tIDA3NTUgJHtTUkN9LyRpICR7RH0ke2JpbmRpcn0vCiAJZG9uZQogfQorCisjIHNvdHJ1c3Mgc2NyaXB0IHJlcXVpcmVzIHNvdHJ1c3MtbGliLnNvIChnaXZlbiBieSBsaWJzb3RydXNzIHBhY2thZ2UpLCAKKyMgdG8gcHJvZHVjZSB0cmFjZSBvZiB0aGUgbGlicmFyeSBjYWxscy4KK1JERVBFTkRTXyR7UE59ICs9ICJsaWJzb3RydXNzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHNfMi4yMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjMuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMuaW5jCmluZGV4IGJmMWRjY2QuLmU4NWM3MDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLmluYwpAQCAtMyw3ICszLDcgQEAKIHJlcXVpcmUgZ2xpYmMtdGVzdGluZy5pbmMKIAogU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgotU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfU1lTfSIKIFBBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKIAogVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLWxvY2FsZS1maXgtaGFyZC1jb2RlZC1yZWZlcmVuY2UtdG8tZ2NjLUUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1sb2NhbGUtZml4LWhhcmQtY29kZWQtcmVmZXJlbmNlLXRvLWdjYy1FLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZmNlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1sb2NhbGUtZml4LWhhcmQtY29kZWQtcmVmZXJlbmNlLXRvLWdjYy1FLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gMmMwYWI4M2ViNTRjMGUwZmNjYmYyNjE3MjZkYzAzODAzYjIzNjA3OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KPUMzPUE5cj1DMz1BOW15PTIwUm9zZW4/PSA8amVyZW15LnJvc2VuQHNtaWxlLmZyPgorRGF0ZTogTW9uLCAyMiBBdWcgMjAxNiAxNjowOToyNSArMDIwMAorU3ViamVjdDogW1BBVENIXSBsb2NhbGU6IGZpeCBoYXJkLWNvZGVkIHJlZmVyZW5jZSB0byBnY2MgLUUKKworV2hlbiBuZXcgdmVyc2lvbiBvZiBjb21waWxlcnMgYXJlIHB1Ymxpc2hlZCwgdGhleSBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCAKK29sZGVyIHZlcnNpb25zIG9mIHNvZnR3YXJlLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBjb21tb24gd2hlbiBzb2Z0d2FyZSBpcyBidWlsdAord2l0aCAtV2Vycm9yLgorCitBdXRvdG9vbHMgcHJvdmlkZXMgYSB3YXkgZm9yIGEgdXNlciB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIGhpcyBjb21waWxlciB1c2luZyBhCitzZXQgb2YgdmFyaWFibGVzICgkQ0MgJENYWCAkQ1BQIGV0Yy4pLiBUaG9zZSB2YXJpYWJsZXMgYXJlIHVzZWQgY29ycmVjdGx5IHdoZW4KK2NvbXBpbGluZyBnbGliYyBidXQgdGhlIHNjcmlwdCB1c2VkIHRvIGdlbmVyYXRlIHRyYW5zbGl0ZXJhdGlvbnMgaW4gdGhlIGxvY2FsZS8KK3N1YmRpcmVjdG9yeSBkaXJlY3RseSBjYWxscyB0aGUgZ2NjIGJpbmFyeSB0byBnZXQgdGhlIG91dHB1dCBvZiB0aGUgCitwcmVwcm9jZXNzb3IgaW5zdGVhZCBvZiB1c2luZyB0aGUgJENQUCB2YXJpYWJsZSBwcm92aWRlZCBieSB0aGUgYnVpbGQgCitlbnZpcm9ubWVudC4gCisKK1RoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIGhhcmQtY29kZWQgcmVmZXJlbmNlIHRvIHRoZSBnY2MgYmluYXJ5IHdpdGggdGhlIHByb3BlcgorZW52aXJvbm1lbnQgdmFyaWFibGUsIHRodXMgYWxsb3dpbmcgYSB1c2VyIHRvIG92ZXJyaWRlIGl0LgorCitVcHN0cmVhbS1TdGF0dXMgOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDE2LTA4L21zZzAwNzQ2Lmh0bWxdCisKKy0tLQorIGxvY2FsZS9nZW4tdHJhbnNsaXQucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9sb2NhbGUvZ2VuLXRyYW5zbGl0LnBsIGIvbG9jYWxlL2dlbi10cmFuc2xpdC5wbAoraW5kZXggMzBkM2YyZi4uN2IyODdmYSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9nZW4tdHJhbnNsaXQucGwKKysrKyBiL2xvY2FsZS9nZW4tdHJhbnNsaXQucGwKK0BAIC0xLDUgKzEsNSBAQAorICMhL3Vzci9iaW4vcGVybCAtdworLW9wZW4gRiwgImNhdCBDLXRyYW5zbGl0LmguaW4gfCBnY2MgLUUgLSB8IiB8fCBkaWUgIkNhbm5vdCBwcmVwcm9jZXNzIGlucHV0IGZpbGUiOworK29wZW4gRiwgJ2NhdCBDLXRyYW5zbGl0LmguaW4gfCAke0NQUDotZ2NjIC1FfSAtIHwnIHx8IGRpZSAiQ2Fubm90IHByZXByb2Nlc3MgaW5wdXQgZmlsZSI7CisgCisgCisgc3ViIGNzdHJsZW4geworLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaAppbmRleCA5N2MyODAwLi5jYTMzNzU4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDY2ZDA0ZTJjZDhiYWRiMDk4NDA1MGU0ZTlmMjczMmY0NzE1MWZiYmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDdlMTFhYWZjM2E3Y2I4NzNiM2Y2NDg3NDBjOGFjZDM3OTU5N2U0ZDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo0ODoyNCArMDAwMAotU3ViamVjdDogW1BBVENIIDAxLzI0XSBuYXRpdmVzZGstZ2xpYmM6IExvb2sgZm9yIGhvc3Qgc3lzdGVtIGxkLnNvLmNhY2hlIGFzCitTdWJqZWN0OiBbUEFUQ0ggMDEvMjVdIG5hdGl2ZXNkay1nbGliYzogTG9vayBmb3IgaG9zdCBzeXN0ZW0gbGQuc28uY2FjaGUgYXMKICB3ZWxsCiAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCkBAIC0zMSw3ICszMSw3IEBACiAgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCi1pbmRleCA2ZmI2MTVlLi5lZTNkMWU2IDEwMDY0NAoraW5kZXggYzBkNjI0OS4uMmM3MzEwNSAxMDA2NDQKIC0tLSBhL2VsZi9kbC1sb2FkLmMKICsrKyBiL2VsZi9kbC1sb2FkLmMKIEBAIC0yMDk0LDYgKzIwOTQsMTQgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLApAQCAtNjUsNSArNjUsNSBAQAogICAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCiAgCV9kbF9kZWJ1Z19wcmludGYgKCJcbiIpOwogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2gKaW5kZXggNDczYjg5NC4uNTQyODQ2OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAxNzlkYzVmMWUxM2MzZmY5NmQ1ZjIxYTJhNzhjMDg5Y2YxMjBjZWI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA1ZmQ4ODRkYzI4ZDVkODQwMDFmYWU4ZmZkZDhiZTY5OGJiODQxNDNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTA6MDAgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAwMi8yNF0gbmF0aXZlc2RrLWdsaWJjOiBGaXggYnVmZmVyIG92ZXJydW4gd2l0aCBhIHJlbG9jYXRlZAorU3ViamVjdDogW1BBVENIIDAyLzI1XSBuYXRpdmVzZGstZ2xpYmM6IEZpeCBidWZmZXIgb3ZlcnJ1biB3aXRoIGEgcmVsb2NhdGVkCiAgU0RLCiAKIFdoZW4gbGQtbGludXgtKi5zby4yIGlzIHJlbG9jYXRlZCB0byBhIHBhdGggdGhhdCBpcyBsb25nZXIgdGhhbiB0aGUKQEAgLTIyLDcgKzIyLDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKLWluZGV4IGVlM2QxZTYuLmM0YTQyZTkgMTAwNjQ0CitpbmRleCAyYzczMTA1Li5jN2I4Nzk3IDEwMDY0NAogLS0tIGEvZWxmL2RsLWxvYWQuYwogKysrIGIvZWxmL2RsLWxvYWQuYwogQEAgLTE3OTMsNyArMTc5MywxOSBAQCBvcGVuX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgbW9kZSwKQEAgLTQ2LDUgKzQ2LDUgQEAKICAgICAgewogICAgICAgIHN0cnVjdCByX3NlYXJjaF9wYXRoX2VsZW0gKnRoaXNfZGlyID0gKmRpcnM7CiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaAppbmRleCA2MGY5ZjE3Li43Y2JhNmNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGU3NjA0ODg5OGFlOWFhNDlkYzcwZDZmOWIxYmJjMjIwODJlNjFmZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGM5OTg5MmYyMDE4Y2Q3ZmEwZjM3YjUzZTZjZWJlYzk5ZmEwMzY0NzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1MTozOCArMDAwMAotU3ViamVjdDogW1BBVENIIDAzLzI0XSBuYXRpdmVzZGstZ2xpYmM6IFJhaXNlIHRoZSBzaXplIG9mIGFycmF5cyBjb250YWluaW5nIGRsCitTdWJqZWN0OiBbUEFUQ0ggMDMvMjVdIG5hdGl2ZXNkay1nbGliYzogUmFpc2UgdGhlIHNpemUgb2YgYXJyYXlzIGNvbnRhaW5pbmcgZGwKICBwYXRocwogCiBUaGlzIHBhdGNoIHB1dHMgdGhlIGR5bmFtaWMgbG9hZGVyIHBhdGggaW4gdGhlIGJpbmFyaWVzLCBTWVNURU1fRElSUyBzdHJpbmdzCkBAIC0yNCwxMCArMjQsMTAgQEAKICBzeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaCB8IDQgLS0tLQogIDYgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL2VsZi9kbC1jYWNoZS5jIGIvZWxmL2RsLWNhY2hlLmMKLWluZGV4IGRlYzQ5YmMuLjg2MmYxZDggMTAwNjQ0Ci0tLS0gYS9lbGYvZGwtY2FjaGUuYwotKysrIGIvZWxmL2RsLWNhY2hlLmMKK0luZGV4OiBnaXQvZWxmL2RsLWNhY2hlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lbGYvZGwtY2FjaGUuYworKysrIGdpdC9lbGYvZGwtY2FjaGUuYwogQEAgLTEzMiw2ICsxMzIsMTAgQEAgZG8JCQkJCQkJCQkgICAgICBcCiAgd2hpbGUgKDApCiAgCkBAIC0zOSwxMSArMzksMTEgQEAKICBpbnQKICBpbnRlcm5hbF9mdW5jdGlvbgogIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMikKLWRpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYwotaW5kZXggYzRhNDJlOS4uYWNmNmMwMyAxMDA2NDQKLS0tLSBhL2VsZi9kbC1sb2FkLmMKLSsrKyBiL2VsZi9kbC1sb2FkLmMKLUBAIC0xMDYsOCArMTA2LDggQEAgc3RhdGljIHNpemVfdCBtYXhfY2Fwc3RybGVuIGF0dHJpYnV0ZV9yZWxybzsKK0luZGV4OiBnaXQvZWxmL2RsLWxvYWQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VsZi9kbC1sb2FkLmMKKysrKyBnaXQvZWxmL2RsLWxvYWQuYworQEAgLTEwNiw4ICsxMDYsOCBAQCBzdGF0aWMgc2l6ZV90IG1heF9jYXBzdHJsZW4gYXR0cmlidXRlX3JlCiAgLyogR2V0IHRoZSBnZW5lcmF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRydXN0ZWQgZGlyZWN0b3JpZXMuICAqLwogICNpbmNsdWRlICJ0cnVzdGVkLWRpcnMuaCIKICAKQEAgLTU0LDEwICs1NCwxMCBAQAogIHsKICAgIFNZU1RFTV9ESVJTX0xFTgogIH07Ci1kaWZmIC0tZ2l0IGEvZWxmL2ludGVycC5jIGIvZWxmL2ludGVycC5jCi1pbmRleCA0MjJlYTk1ZS4uNmQ2MWEzNiAxMDA2NDQKLS0tLSBhL2VsZi9pbnRlcnAuYwotKysrIGIvZWxmL2ludGVycC5jCitJbmRleDogZ2l0L2VsZi9pbnRlcnAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VsZi9pbnRlcnAuYworKysrIGdpdC9lbGYvaW50ZXJwLmMKIEBAIC0xOCw1ICsxOCw1IEBACiAgCiAgI2luY2x1ZGUgPHJ1bnRpbWUtbGlua2VyLmg+CkBAIC02NSwxMSArNjUsMTEgQEAKIC1jb25zdCBjaGFyIF9faW52b2tlX2R5bmFtaWNfbGlua2VyX19bXSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5pbnRlcnAiKSkpCiArY29uc3QgY2hhciBfX2ludm9rZV9keW5hbWljX2xpbmtlcl9fWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmludGVycCIpKSkKICAgID0gUlVOVElNRV9MSU5LRVI7Ci1kaWZmIC0tZ2l0IGEvZWxmL2xkY29uZmlnLmMgYi9lbGYvbGRjb25maWcuYwotaW5kZXggZjU0ZWMyMi4uMGU3OGE4MyAxMDA2NDQKLS0tLSBhL2VsZi9sZGNvbmZpZy5jCi0rKysgYi9lbGYvbGRjb25maWcuYwotQEAgLTE2Nyw2ICsxNjcsOSBAQCBzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9CitJbmRleDogZ2l0L2VsZi9sZGNvbmZpZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWxmL2xkY29uZmlnLmMKKysrKyBnaXQvZWxmL2xkY29uZmlnLmMKK0BAIC0xNjgsNiArMTY4LDkgQEAgc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPQogICAgb3B0aW9ucywgcGFyc2Vfb3B0LCBOVUxMLCBkb2MsIE5VTEwsIG1vcmVfaGVscCwgTlVMTAogIH07CiAgCkBAIC03OSwxMCArNzksMTAgQEAKICAvKiBDaGVjayBpZiBzdHJpbmcgY29ycmVzcG9uZHMgdG8gYW4gaW1wb3J0YW50IGhhcmR3YXJlIGNhcGFiaWxpdHkgb3IKICAgICBhIHBsYXRmb3JtLiAgKi8KICBzdGF0aWMgaW50Ci1kaWZmIC0tZ2l0IGEvZWxmL3J0bGQuYyBiL2VsZi9ydGxkLmMKLWluZGV4IDUyMTYwZGYuLjgwZjA1ODIgMTAwNjQ0Ci0tLS0gYS9lbGYvcnRsZC5jCi0rKysgYi9lbGYvcnRsZC5jCitJbmRleDogZ2l0L2VsZi9ydGxkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lbGYvcnRsZC5jCisrKysgZ2l0L2VsZi9ydGxkLmMKIEBAIC05OSw2ICs5OSw3IEBAIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsCiAgc3Ryb25nX2FsaWFzIChfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsLCBfX3BvaW50ZXJfY2hrX2d1YXJkKQogICNlbmRpZgpAQCAtOTEsNyArOTEsNyBAQAogIAogIC8qIExpc3Qgb2YgYXVkaXRpbmcgRFNPcy4gICovCiAgc3RhdGljIHN0cnVjdCBhdWRpdF9saXN0Ci1AQCAtODczLDEyICs4NzQsMTIgQEAgb2YgdGhpcyBoZWxwZXIgcHJvZ3JhbTsgY2hhbmNlcyBhcmUgeW91IGRpZCBub3QgaW50ZW5kIHRvIHJ1biB0aGlzIHByb2dyYW0uXG5cCitAQCAtODczLDEyICs4NzQsMTIgQEAgb2YgdGhpcyBoZWxwZXIgcHJvZ3JhbTsgY2hhbmNlcyBhcmUgeW91CiAgICAtLWxpc3QgICAgICAgICAgICAgICAgbGlzdCBhbGwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgcmVzb2x2ZWRcblwKICAgIC0tdmVyaWZ5ICAgICAgICAgICAgICB2ZXJpZnkgdGhhdCBnaXZlbiBvYmplY3QgcmVhbGx5IGlzIGEgZHluYW1pY2FsbHkgbGlua2VkXG5cCiAgCQkJb2JqZWN0IHdlIGNhbiBoYW5kbGVcblwKQEAgLTEwNiwxMCArMTA2LDEwIEBACiAgCiAgICAgICAgKytfZGxfc2tpcF9hcmdzOwogICAgICAgIC0tX2RsX2FyZ2M7Ci1kaWZmIC0tZ2l0IGEvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmggYi9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAotaW5kZXggNzBkNGFlYi4uNWM3MjZkMCAxMDA2NDQKLS0tLSBhL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCi0rKysgYi9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAorSW5kZXg6IGdpdC9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCisrKysgZ2l0L3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCiBAQCAtMjcsMTAgKzI3LDYgQEAKICAgICgoZmxhZ3MpID09IDEgfHwgKGZsYWdzKSA9PSBfRExfQ0FDSEVfREVGQVVMVF9JRCkKICAjZW5kaWYKQEAgLTEzNCwzICsxMzQsMzggQEAKICAKICAvKiBUaGUgcGF0aCBlbGVtZW50cywgYXMgZGV0ZXJtaW5lZCBieSB0aGUgX19nY29udl9nZXRfcGF0aCBmdW5jdGlvbi4KICAgICBBbGwgcGF0aCBlbGVtZW50cyBlbmQgaW4gYSBzbGFzaC4gICovCitJbmRleDogZ2l0L2xvY2FsZS9maW5kbG9jYWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9sb2NhbGUvZmluZGxvY2FsZS5jCisrKysgZ2l0L2xvY2FsZS9maW5kbG9jYWxlLmMKK0BAIC01Niw3ICs1Niw3IEBAIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjb25zdCBfbmxfQ1tdIGF0dHIKKyAgICB3aGljaCBhcmUgc29tZWhvdyBhZGRyZXNzZWQuICAqLworIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9ubF9sb2NhbGVfZmlsZV9saXN0W19fTENfTEFTVF07CisgCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9sb2NhbGVfcGF0aFtdIGF0dHJpYnV0ZV9oaWRkZW4gPSBDT01QTE9DQUxFRElSOworK2NoYXIgX25sX2RlZmF1bHRfbG9jYWxlX3BhdGhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpIGF0dHJpYnV0ZV9oaWRkZW4gPSBDT01QTE9DQUxFRElSOworIAorIC8qIENoZWNrcyBpZiB0aGUgbmFtZSBpcyBhY3R1YWxseSBwcmVzZW50LCB0aGF0IGlzLCBub3QgTlVMTCBhbmQgbm90CisgICAgZW1wdHkuICAqLworQEAgLTE2OCw3ICsxNjgsNyBAQCBfbmxfZmluZF9sb2NhbGUgKGNvbnN0IGNoYXIgKmxvY2FsZV9wYXRoCisgCisgICAgICAgLyogTm90aGluZyBpbiB0aGUgYXJjaGl2ZS4gIFNldCB0aGUgZGVmYXVsdCBwYXRoIHRvIHNlYXJjaCBiZWxvdy4gICovCisgICAgICAgbG9jYWxlX3BhdGggPSBfbmxfZGVmYXVsdF9sb2NhbGVfcGF0aDsKKy0gICAgICBsb2NhbGVfcGF0aF9sZW4gPSBzaXplb2YgX25sX2RlZmF1bHRfbG9jYWxlX3BhdGg7CisrICAgICAgbG9jYWxlX3BhdGhfbGVuID0gc3RybGVuKF9ubF9kZWZhdWx0X2xvY2FsZV9wYXRoKSArIDE7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgLyogV2UgcmVhbGx5IGhhdmUgdG8gbG9hZCBzb21lIGRhdGEuICBGaXJzdCBzZWUgd2hldGhlciB0aGUgbmFtZSBpcworSW5kZXg6IGdpdC9sb2NhbGUvbG9jYWxlaW5mby5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvbG9jYWxlL2xvY2FsZWluZm8uaAorKysrIGdpdC9sb2NhbGUvbG9jYWxlaW5mby5oCitAQCAtMzIyLDcgKzMyMiw3IEBAIF9ubF9sb29rdXBfd29yZCAobG9jYWxlX3QgbCwgaW50IGNhdGVnb3IKKyB9CisgCisgLyogRGVmYXVsdCBzZWFyY2ggcGF0aCBpZiBubyBMT0NQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KKy1leHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9sb2NhbGVfcGF0aFtdIGF0dHJpYnV0ZV9oaWRkZW47CisrZXh0ZXJuIGNoYXIgX25sX2RlZmF1bHRfbG9jYWxlX3BhdGhbXSBhdHRyaWJ1dGVfaGlkZGVuOworIAorIC8qIExvYWQgdGhlIGxvY2FsZSBkYXRhIGZvciBDQVRFR09SWSBmcm9tIHRoZSBmaWxlIHNwZWNpZmllZCBieSAqTkFNRS4KKyAgICBJZiAqTkFNRSBpcyAiIiwgdXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcyBzcGVjaWZpZWQgYnkgUE9TSVgsIGFuZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtbmF0aXZlc2RrLWdsaWJjLUFsbG93LTY0LWJpdC1hdG9taWNzLWZvci14ODYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1uYXRpdmVzZGstZ2xpYmMtQWxsb3ctNjQtYml0LWF0b21pY3MtZm9yLXg4Ni5wYXRjaAppbmRleCAyMWYwNGExLi4zMTI3ZGU2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1uYXRpdmVzZGstZ2xpYmMtQWxsb3ctNjQtYml0LWF0b21pY3MtZm9yLXg4Ni5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1uYXRpdmVzZGstZ2xpYmMtQWxsb3ctNjQtYml0LWF0b21pY3MtZm9yLXg4Ni5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gMmUxNjM4MTE1ZjBmOTI0ZWU4MjM1ZWVlOTI2NTA0NzA1NGMxNWNmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gYTU2ZTdhYTJmZDEwYjE3OGI5NDk4Zjg4YTdhMmNhOGFhZDY3MWE1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDMxIERlYyAyMDE1IDE0OjM1OjM1IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMDQvMjRdIG5hdGl2ZXNkay1nbGliYzogQWxsb3cgNjQgYml0IGF0b21pY3MgZm9yIHg4NgorU3ViamVjdDogW1BBVENIIDA0LzI1XSBuYXRpdmVzZGstZ2xpYmM6IEFsbG93IDY0IGJpdCBhdG9taWNzIGZvciB4ODYKIAogVGhlIGZpeCBjb25zaXN0IG9mIGFsbG93aW5nIDY0Yml0IGF0b21pYyBvcHMgZm9yIHg4Ni4KIFRoaXMgc2hvdWxkIGJlIHNhZmUgZm9yIGk1ODYgYW5kIG5ld2VyIENQVXMuCkBAIC0xMSwxMSArMTEsMTMgQEAKIFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIC0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKICBzeXNkZXBzL2kzODYvYXRvbWljLW1hY2hpbmUuaCB8IDIgKy0KICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3N5c2RlcHMvaTM4Ni9hdG9taWMtbWFjaGluZS5oIGIvc3lzZGVwcy9pMzg2L2F0b21pYy1tYWNoaW5lLmgKLWluZGV4IDU5ZjNkMzQuLjZmNmI3ZmYgMTAwNjQ0CitpbmRleCBjZTYyYjMzLi40ZmU0NGVhIDEwMDY0NAogLS0tIGEvc3lzZGVwcy9pMzg2L2F0b21pYy1tYWNoaW5lLmgKICsrKyBiL3N5c2RlcHMvaTM4Ni9hdG9taWMtbWFjaGluZS5oCiBAQCAtNTQsNyArNTQsNyBAQCB0eXBlZGVmIHVpbnRtYXhfdCB1YXRvbWljX21heF90OwpAQCAtMjgsNSArMzAsNSBAQAogIAogIAogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2gKaW5kZXggYmE4YzkyZS4uZGMwZGZhZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA3ZmY1N2VkZmUyNGI0MjQzMzczZmNiODk2ZWUwYjYxMzkzOGMxZWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA0NTA0NzNjZTI3YjQ3Y2ViZWMyYzVjNWI2MTFhOGM4YmVkNDFlNmU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MDE6NTAgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAwNS8yNF0gZnNsIGU1MDAvZTU1MDAvZTY1MDAvNjAzZSBmc3FydCBpbXBsZW1lbnRhdGlvbgorU3ViamVjdDogW1BBVENIIDA1LzI1XSBmc2wgZTUwMC9lNTUwMC9lNjUwMC82MDNlIGZzcXJ0IGltcGxlbWVudGF0aW9uCiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogU2lnbmVkLW9mZi1ieTogRWRtYXIgV2llbnNrb3NraSA8ZWRtYXJAZnJlZXNjYWxlLmNvbT4KQEAgLTE1ODAsNSArMTU4MCw1IEBACiBAQCAtMCwwICsxIEBACiArcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1CiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaAppbmRleCAwODZhNzNkLi5mMjY3ZjY2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDYxMTI5ZWYzZWU3MzViMzAwNjA0Zjc1ZDUwZTAxY2IyOWY0Mzg3ZjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGJiMDY1Yjc4ZTllMGQzMzAxZTY0YTI2ZTM3NTUwYTY1N2M4ODVlYmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxMToyMiArMDAwMAotU3ViamVjdDogW1BBVENIIDA2LzI0XSByZWFkbGliOiBBZGQgT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTIHRvIGtub3duCitTdWJqZWN0OiBbUEFUQ0ggMDYvMjVdIHJlYWRsaWI6IEFkZCBPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMgdG8ga25vd24KICBuYW1lcwogCiBUaGlzIGJvbHRzIGluIGEgaG9vayBmb3IgT0UgdG8gcGFzcyBpdHMgb3duIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIKQEAgLTE3LDcgKzE3LDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKIAogZGlmZiAtLWdpdCBhL2VsZi9yZWFkbGliLmMgYi9lbGYvcmVhZGxpYi5jCi1pbmRleCA3ZmQ1YjhhLi4yZjVkYTlmIDEwMDY0NAoraW5kZXggOGE2NmZmZS4uMDhkNTZmYyAxMDA2NDQKIC0tLSBhL2VsZi9yZWFkbGliLmMKICsrKyBiL2VsZi9yZWFkbGliLmMKIEBAIC01MSw2ICs1MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga25vd25fbmFtZXMgaW50ZXJwcmV0ZXJzW10gPQpAQCAtMjksNSArMjksNSBAQAogIAogIHN0YXRpYyBzdHJ1Y3Qga25vd25fbmFtZXMga25vd25fbGlic1tdID0KIC0tIAotMi42LjQKKzIuOC4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoCmluZGV4IDk1Mjc4NGIuLjYxMmU4OTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gZjkzNjU0OGRlY2FjOTk1MDFmOWE0YzUyMmEzMjExZDE2NTQyZmE0OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNGE5MWJiZGIxMWExNWY5MzA5NDY5NWJiYTRlMDg0OWM0MjFmYWQ0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjE1OjA3ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDcvMjRdIHBwYy9zcXJ0OiBGaXggdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zcXJ0X2Zpbml0ZScKK1N1YmplY3Q6IFtQQVRDSCAwNy8yNV0gcHBjL3NxcnQ6IEZpeCB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3NxcnRfZmluaXRlJwogCiBvbiBwcGMgZml4ZXMgdGhlIGVycm9ycyBsaWtlIGJlbG93CiB8IC4vLmxpYnMvbGlicHVsc2Vjb3JlLTEuMS5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zcXJ0X2Zpbml0ZScKQEAgLTIwNCw1ICsyMDQsNSBAQAogIH0KICtzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaAppbmRleCA4ZDUxM2FiLi45ZTIyMmI3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGQwMjcwNDg5NWZkY2U5MTdlMzM3NjE5YTQ0MTQwNDJmNjNlZGQ4OGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGNlMjc0NmExNTYwYjQ0MzBkODlkMTE0ZTFiNjVjN2JlMjI1YjRjMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxNjozOCArMDAwMAotU3ViamVjdDogW1BBVENIIDA4LzI0XSBfX2llZWU3NTRfc3FydHssZn0gYXJlIG5vdyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBjYWxsCitTdWJqZWN0OiBbUEFUQ0ggMDgvMjVdIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKICBvdXQgX19zbG93IHZlcnNpb25zCiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwpAQCAtMzgzLDUgKzM4Myw1IEBACiArCiAgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2gKaW5kZXggMTJmMjRmYi4uN2FhNzRkZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA1MDJmMDYxZDg0NmU1OGFhYzdhY2E2N2U0ZTBkNmJhOWUwNzYzYjE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAxYjYxNjQ5ZTU0NWRlNzZkZDc5YTVlMmMzOWJiMTZkMGM0NjIzMTYwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MjA6MDkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAwOS8yNF0gUXVvdGUgZnJvbSBidWcgMTQ0MyB3aGljaCBleHBsYWlucyB3aGF0IHRoZSBwYXRjaCBkb2VzCitTdWJqZWN0OiBbUEFUQ0ggMDkvMjVdIFF1b3RlIGZyb20gYnVnIDE0NDMgd2hpY2ggZXhwbGFpbnMgd2hhdCB0aGUgcGF0Y2ggZG9lcwogIDoKIAogICBXZSBidWlsZCBzb21lIHJhbmRvbSBwcm9ncmFtIGFuZCBsaW5rIGl0IHdpdGggLWx1c3QuICBXaGVuIHdlIHJ1biBpdCwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaCBiL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAotaW5kZXggNmZiMjBiZC4uODgwNTUzNyAxMDA2NDQKK2luZGV4IDYwZWVlMDAuLjdkNTRkNWUgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKICsrKyBiL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAogQEAgLTQ5OSw3ICs0OTksNyBAQCBlbGZfbWFjaGluZV9yZWwgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBjb25zdCBFbGYzMl9SZWwgKnJlbG9jLApAQCAtNTgsNSArNTgsNSBAQAogIAogIAljYXNlIFJfQVJNX1RMU19UUE9GRjMyOgogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaAppbmRleCA3N2JkN2QxLi4xNDk2M2EzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNjlhM2UzMGI0OWQyOGE3Mzg2ZDE4NzI1NTI4NjUyOTMxNTEwY2JmYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gOTFhZjQxNjQwOGI4NzE4YjAwNGM4M2Q5M2E2ZGFhMWYzNGNiYTQ4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KIERhdGU6IFdlZCwgMTkgRGVjIDIwMTIgMDQ6Mzk6NTcgLTA2MDAKLVN1YmplY3Q6IFtQQVRDSCAxMC8yNF0gZWdsaWJjOiBydW4gbGlibS1lcnItdGFiLnBsIHdpdGggc3BlY2lmaWMgZGlycyBpbiAke1N9CitTdWJqZWN0OiBbUEFUQ0ggMTAvMjVdIGVnbGliYzogcnVuIGxpYm0tZXJyLXRhYi5wbCB3aXRoIHNwZWNpZmljIGRpcnMgaW4gJHtTfQogCiBsaWJtLWVyci10YWIucGwgd2lsbCBwYXJzZSBhbGwgdGhlIGZpbGVzIG5hbWVkICJsaWJtLXRlc3QtdWxwcyIKIGluIHRoZSBnaXZlbiBkaXIgcmVjdXJzaXZlbHkuIFRvIGF2b2lkIHBhcnNpbmcgdGhlIG9uZSBpbgpAQCAtMTAsNyArMTAsNyBAQAogYWFyY2g2NC9saWJtLXRlc3QtdWxwcyksIHJ1biBsaWJtLWVyci10YWIucGwgd2l0aCBzcGVjaWZpYyBkaXJzCiBpbiAke1N9LgogCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KIAogU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgogLS0tCkBAIC0xOCw3ICsxOCw3IEBACiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvbWFudWFsL01ha2VmaWxlIGIvbWFudWFsL01ha2VmaWxlCi1pbmRleCBjZGI2NzYzLi4wYjMyYTBhIDEwMDY0NAoraW5kZXggZjJmNjk0Zi4uZTA2MjgzMyAxMDA2NDQKIC0tLSBhL21hbnVhbC9NYWtlZmlsZQogKysrIGIvbWFudWFsL01ha2VmaWxlCiBAQCAtMTA1LDcgKzEwNSw4IEBAICQob2JqcGZ4KWxpYm0tZXJyLnRleGk6ICQob2JqcGZ4KXN0YW1wLWxpYm0tZXJyCkBAIC0zMiw1ICszMiw1IEBACiAgCXRvdWNoICRACiAgCiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaAppbmRleCAyNTFlNWY1Li5lOTJkMDRjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDRjZjUyOTcxYTg0MTMwNGFlYzMwYjJlOTc1ZjgxZDdhZDlkNDJlZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDZhNzFmNjg4NDcxZmUwYzg1ZjhhZDlhZmM0ZWUwNzIzYTIwYWFlMWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNDo0NiArMDAwMAotU3ViamVjdDogW1BBVENIIDExLzI0XSBfX2llZWU3NTRfc3FydHssZn0gYXJlIG5vdyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBjYWxsCitTdWJqZWN0OiBbUEFUQ0ggMTEvMjVdIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKICBvdXQgX19zbG93IHZlcnNpb25zCiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwpAQCAtNTcsNSArNTcsNSBAQAogICNlbmRpZgogIHsKIC0tIAotMi42LjQKKzIuOC4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2gKaW5kZXggMzIwOGEwYy4uNGNiYTAzZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGIzNTY4MTZkNmUwMDVlY2RhN2FkYmVkOTYyN2E0MzE1YWQzOWRlMzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGY5ZDAyNGVkYjE1ODY1OWU0MDNiNTFjYzlkOTNkYTliY2E2ZTVkN2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNTo0NSArMDAwMAotU3ViamVjdDogW1BBVENIIDEyLzI0XSBNYWtlIGxkIC0tdmVyc2lvbiBvdXRwdXQgbWF0Y2hpbmcgZ3JvayBnb2xkJ3Mgb3V0cHV0CitTdWJqZWN0OiBbUEFUQ0ggMTIvMjVdIE1ha2UgbGQgLS12ZXJzaW9uIG91dHB1dCBtYXRjaGluZyBncm9rIGdvbGQncyBvdXRwdXQKIAogYWRhcHRlZCBmcm9tIGZyb20gdXBzdHJlYW0gYnJhbmNoIHJvbGFuZC9nb2xkLXZzLWxpYmMKIApAQCAtMTQsMTAgKzE0LDEwIEBACiAgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKLWluZGV4IGFhMDVkNDkuLjZkYWJkMTEgMTAwNzU1CitpbmRleCA4ZmU1OTM3Li43ODg4YTNmIDEwMDc1NQogLS0tIGEvY29uZmlndXJlCiArKysgYi9jb25maWd1cmUKLUBAIC00NDg2LDcgKzQ0ODYsNyBAQCBlbHNlCitAQCAtNDQ4Miw3ICs0NDgyLDcgQEAgZWxzZQogICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB2ZXJzaW9uIG9mICRMRCIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgdmVyc2lvbiBvZiAkTEQuLi4gIiA+JjY7IH0KQEAgLTI3LDEwICsyNywxMCBAQAogICAgICAnJykgYWNfcHJvZ192ZXJzaW9uPSJ2LiA/Lj8/LCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKICAgICAgMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKikKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGVlN2EzZjEuLmI0Yjk1YjkgMTAwNjQ0CitpbmRleCAzYzc2NmI3Li42OTA4YTk5IDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC05NDgsNyArOTQ4LDcgQEAgQUNfQ0hFQ0tfUFJPR19WRVIoQVMsICRBUywgLS12ZXJzaW9uLAorQEAgLTk0NCw3ICs5NDQsNyBAQCBBQ19DSEVDS19QUk9HX1ZFUihBUywgJEFTLCAtLXZlcnNpb24sCiAgCQkgIFsyLjFbMC05XVswLTldKnwyLjJbMi05XSp8Mi5bMy05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qXSwKICAJCSAgQVM9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGFzIikKICBBQ19DSEVDS19QUk9HX1ZFUihMRCwgJExELCAtLXZlcnNpb24sCkBAIC00MCw1ICs0MCw1IEBACiAgCQkgIExEPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBsZCIpCiAgCiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaAppbmRleCA4MmZhMTAwLi42YTgyZjhkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDEwMDAzZDQ4ZjgzZjdhNGY3ZmE1NjJlZDg5YWY5MDRhNTQ0YjYzMjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDJlY2UxMjA5M2M4YmE0Y2Y2ODhkMjM1ZjM1ZDM2ZjFmZWIwMjMyNGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNzoxMCArMDAwMAotU3ViamVjdDogW1BBVENIIDEzLzI0XSBzeXNkZXBzL2dudS9jb25maWd1cmUuYWM6IGhhbmRsZSBjb3JyZWN0bHkKK1N1YmplY3Q6IFtQQVRDSCAxMy8yNV0gc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjOiBoYW5kbGUgY29ycmVjdGx5CiAgJGxpYmNfY3Zfcm9vdHNiaW5kaXIKIAogVXBzdHJlYW0tU3RhdHVzOlBlbmRpbmcKQEAgLTM4LDUgKzM4LDUgQEAKICAgIDs7CiAgZXNhYwogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaAppbmRleCBlYTNlMTY3Li5kMTRhNmQ0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gY2FmYThhN2VmODMwZTAyY2RiZjkyODQ3MWUwNmQxMTA1NDk0Njk0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gOWZlYzA4M2RjOTlkMmI1MjQwOTBlMWQwOThlMDM3MDllZWQ2NGE3MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI4OjQxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTQvMjRdIEFkZCB1bnVzZWQgYXR0cmlidXRlCitTdWJqZWN0OiBbUEFUQ0ggMTQvMjVdIEFkZCB1bnVzZWQgYXR0cmlidXRlCiAKIEhlbHBzIGluIGF2b2lkaW5nIGdjYyB3YXJuaW5nIHdoZW4gaGVhZGVyIGlzIGlzIGluY2x1ZGVkIGluCiBhIHNvdXJjZSBmaWxlIHdoaWNoIGRvZXMgbm90IHVzZSBib3RoIGZ1bmN0aW9ucwpAQCAtMTcsNyArMTcsNyBAQAogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfY2hhcnNldC5oIGIvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCi1pbmRleCA4MDI5MGJjLi43ODkwYThlIDEwMDY0NAoraW5kZXggOTVjYmNlNy4uMTkxYTBkZCAxMDA2NDQKIC0tLSBhL2ljb252L2djb252X2NoYXJzZXQuaAogKysrIGIvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCiBAQCAtMjEsNyArMjEsNyBAQApAQCAtMzAsNSArMzAsNSBAQAogIHsKICAgIGludCBzbGFzaF9jb3VudCA9IDA7CiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCmluZGV4IDkwZTEyYjguLjhjZWNjZWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA0ZDZiZWFkMTk4NzRlNTE5NzUyY2VlYjJhMTU4OTdmZjJmZmJlNWU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAxNzk0YTk3Y2JhMGIwOWI3MjZlZWJjNTY1Yzc4M2M3YjdjMjJkZmJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MzE6MDYgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxNS8yNF0gJ3llcycgd2l0aGluIHRoZSBwYXRoIHNldHMgd3JvbmcgY29uZmlnIHZhcmlhYmxlcworU3ViamVjdDogW1BBVENIIDE1LzI1XSAneWVzJyB3aXRoaW4gdGhlIHBhdGggc2V0cyB3cm9uZyBjb25maWcgdmFyaWFibGVzCiAKIEl0IHNlZW1zIHRoYXQgdGhlICdBQ19FR1JFUF9DUFAoeWVzLi4uJyBleGFtcGxlIGlzIHF1aXRlIHBvcHVsYXIKIGJ1dCBiZWluZyBzdWNoIGEgc2hvcnQgd29yZCB0byBncmVwIGl0IGlzIGxpa2VseSB0byBwcm9kdWNlCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgIF0sIGxpYmNfY3ZfbmlvczJfYmU9eWVzLCBsaWJjX2N2X25pb3MyX2JlPW5vKV0pCiAgaWYgdGVzdCAkbGliY19jdl9uaW9zMl9iZSA9IHllczsgdGhlbgogZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKLWluZGV4IGRlZTU2YWEuLmYyMDQ5ZWQgMTAwNjQ0CitpbmRleCBhNTUxM2ZhLi4yODNiMjkzIDEwMDY0NAogLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCiBAQCAtNDE0LDExICs0MTQsMTEgQEAgZWxzZQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgZWxzZQogICAgbGliY19jdl9taXBzX25hbjIwMDg9bm8KIGRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCi1pbmRleCA0NTE0N2M1Li40MjI0YWYxIDEwMDY0NAoraW5kZXggOTE0N2FhNC4uNzg5OGUyNCAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCiArKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYwogQEAgLTEwNSw5ICsxMDUsOSBAQCBBQ19DT01QSUxFX0lGRUxTRSgKQEAgLTI1OSw1ICsyNTksNSBAQAogICAgICBdLCBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj15ZXMsIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPW5vKV0pCiAgICBpZiB0ZXN0ICRsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZiA9IG5vOyB0aGVuCiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaAppbmRleCBlNTFiNjExLi5lNWI1MDgzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDNlODU4NmViMzUwOWUyZjBkNmRmYjc0YmU4Zjg5YTMwYjA2YjU2ZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGZkYjVjOWM4OGUzZDFiYzVhZTZlZjllYmNmY2Y1NjBkM2M0MmYwYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMzowMyArMDAwMAotU3ViamVjdDogW1BBVENIIDE2LzI0XSB0aW1lem9uZTogcmUtd3JpdHRlbiB0enNlbGVjdCBhcyBwb3NpeCBzaAorU3ViamVjdDogW1BBVENIIDE2LzI1XSB0aW1lem9uZTogcmUtd3JpdHRlbiB0enNlbGVjdCBhcyBwb3NpeCBzaAogCiBUbyBhdm9pZCB0aGUgYmFzaCBkZXBlbmRlbmN5LgogCkBAIC0xNSwxMCArMTUsMTAgQEAKICAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL3RpbWV6b25lL01ha2VmaWxlIGIvdGltZXpvbmUvTWFrZWZpbGUKLWluZGV4IDk5NTY2Y2IuLmI2ZTc1N2UgMTAwNjQ0CitpbmRleCBkZWU3NTY4Li42NmE1MGJlIDEwMDY0NAogLS0tIGEvdGltZXpvbmUvTWFrZWZpbGUKICsrKyBiL3RpbWV6b25lL01ha2VmaWxlCi1AQCAtMTIyLDcgKzEyMiw3IEBAICQodGVzdGRhdGEpL1hUJTogdGVzdGRhdGEvWFQlCitAQCAtMTIwLDcgKzEyMCw3IEBAICQodGVzdGRhdGEpL1hUJTogdGVzdGRhdGEvWFQlCiAgCWNwICQ8ICRACiAgCiAgJChvYmpwZngpdHpzZWxlY3Q6IHR6c2VsZWN0LmtzaCAkKGNvbW1vbi1vYmpwZngpY29uZmlnLm1ha2UKQEAgLTI4LDcgKzI4LDcgQEAKICAJICAgIC1lICcvVFpWRVJTSU9OPS9zfHNlZV9NYWtlZmlsZXwiJCh2ZXJzaW9uKSJ8JyBcCiAgCSAgICAtZSAnL1BLR1ZFUlNJT049L3N8PS4qfD0iJChQS0dWRVJTSU9OKSJ8JyBcCiBkaWZmIC0tZ2l0IGEvdGltZXpvbmUvdHpzZWxlY3Qua3NoIGIvdGltZXpvbmUvdHpzZWxlY3Qua3NoCi1pbmRleCA5ZDcwNjkxLi4yNWY0NWE4IDEwMDc1NQoraW5kZXggMmMzYjJmNC4uMGMwNGE2MSAxMDA3NTUKIC0tLSBhL3RpbWV6b25lL3R6c2VsZWN0LmtzaAogKysrIGIvdGltZXpvbmUvdHpzZWxlY3Qua3NoCiBAQCAtMzUsNyArMzUsNyBAQCBSRVBPUlRfQlVHU19UTz10ekBpYW5hLm9yZwpAQCAtMzgsOCArMzgsOCBAQAogLTogJHtUWkRJUj1gcHdkYH0KICs6ICR7VFpESVI9JChwd2QpfQogIAotICMgQ2hlY2sgZm9yIGF3ayBQb3NpeCBjb21wbGlhbmNlLgotICgkQVdLIC12IHg9eSAnQkVHSU4geyBleGl0IDEyMyB9JykgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEKKyAjIE91dHB1dCBvbmUgYXJndW1lbnQgYXMtaXMgdG8gc3RhbmRhcmQgb3V0cHV0LgorICMgU2FmZXIgdGhhbiAnZWNobycsIHdoaWNoIGNhbiBtaXNoYW5kbGUgJ1wnIG9yIGxlYWRpbmcgJy0nLgogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctUmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS1mb3ItbnNjZC1pbml0LXNjcmlwdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LVJlbW92ZS1iYXNoLWRlcGVuZGVuY3ktZm9yLW5zY2QtaW5pdC1zY3JpcHQucGF0Y2gKaW5kZXggMGM5YWU2Yy4uYzhkYTA1ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctUmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS1mb3ItbnNjZC1pbml0LXNjcmlwdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy1SZW1vdmUtYmFzaC1kZXBlbmRlbmN5LWZvci1uc2NkLWluaXQtc2NyaXB0LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSBjZDlkOWZlNzMxNmY0Y2U0Y2E5ZDhlNjdlMjJmNTcxODg3OTUzNWU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA4OGFkODhkMDE0YTVlZTY4YjBlMDQ0ZDJkZWY1YWIxMzc0M2M4YWUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMzEgRGVjIDIwMTUgMTQ6MzM6MDIgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSCAxNy8yNF0gUmVtb3ZlIGJhc2ggZGVwZW5kZW5jeSBmb3IgbnNjZCBpbml0IHNjcmlwdAorU3ViamVjdDogW1BBVENIIDE3LzI1XSBSZW1vdmUgYmFzaCBkZXBlbmRlbmN5IGZvciBuc2NkIGluaXQgc2NyaXB0CiAKIFRoZSBuc2NkIGluaXQgc2NyaXB0IHVzZXMgIyEgL2Jpbi9iYXNoIGJ1dCBvbmx5IHJlYWxseSB1c2VzIG9uZSBiYXNoaXNtCiAodHJhbnNsYXRlZCBzdHJpbmdzKSwgc28gcmVtb3ZlIHRoZW0gYW5kIHN3aXRjaCB0aGUgc2hlbGwgdG8gIyEvYmluL3NoLgpAQCAtOSw2ICs5LDggQEAKIFNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwogIG5zY2QvbnNjZC5pbml0IHwgMTQgKysrKysrKy0tLS0tLS0KICAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQogCkBAIC02OSw1ICs3MSw1IEBACiAgCTs7CiAgZXNhYwogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2gKaW5kZXggZTI4MmU2MC4uMTc1MDc2NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA4ZjU1NGY0YTFiZWIzOTE4MmFhZDljZDliNWUxZGE2OTQ2NGRmZjdlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA0OWMwYWQ3ZGMyZTAyZTgwOGVkMTUwMjk2YTEwOWI1ODZjMzQxMTVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDI6NTggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxOC8yNF0gZWdsaWJjOiBDcm9zcyBidWlsZGluZyBhbmQgdGVzdGluZyBpbnN0cnVjdGlvbnMKK1N1YmplY3Q6IFtQQVRDSCAxOC8yNV0gZWdsaWJjOiBDcm9zcyBidWlsZGluZyBhbmQgdGVzdGluZyBpbnN0cnVjdGlvbnMKIAogUG9ydGVkIGZyb20gZWdsaWJjCiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKQEAgLTYxNSw1ICs2MTUsNSBAQAogKyAgc2ltcGx5IHBsYWNlIGNvcGllcyBvZiB0aGVzZSBsaWJyYXJpZXMgaW4gdGhlIHRvcCBHTElCQyBidWlsZAogKyAgZGlyZWN0b3J5LgogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2gKaW5kZXggYzA0ZTBhMS4uZjk4M2Q4NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSBjMmQ0OWVhYjIwZGI0YWIwMmI2ZGU2MjA5MmZlZGM2MjNkNzU3MTQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBlODgxZmFjZTdhMTAzNTQ2MTJiZjYzNGI0NGUwOWUzYmM2NDYyYzY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDk6MjggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxOS8yNF0gZWdsaWJjOiBIZWxwIGJvb3RzdHJhcCBjcm9zcyB0b29sY2hhaW4KK1N1YmplY3Q6IFtQQVRDSCAxOS8yNV0gZWdsaWJjOiBIZWxwIGJvb3RzdHJhcCBjcm9zcyB0b29sY2hhaW4KIAogVGFrZW4gZnJvbSBFR0xJQkMsIHIxNDg0ICsgcjE1MjUKIApAQCAtMjksNyArMjksNyBAQAogIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCiAKIGRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCi1pbmRleCA5YTAxYzkzLi5hNmFlMDAzIDEwMDY0NAoraW5kZXggMzI3NDhiMy4uNmQwNTViYSAxMDA2NDQKIC0tLSBhL01ha2VmaWxlCiArKysgYi9NYWtlZmlsZQogQEAgLTY5LDkgKzY5LDE4IEBAIHN1YmRpci1kaXJzID0gaW5jbHVkZQpAQCAtOTYsNSArOTYsNSBAQAogKyAgIEVHTElCQyBzdWJkaXIgJ3N0dWJzJyBtYWtlIHRhcmdldHMsIG9uIGV2ZXJ5IC5vIGZpbGUgaW4gRUdMSUJDLCBidXQKICsgICBhbiBlbXB0eSBzdHVicy5oIGxpa2UgdGhpcyB3aWxsIGRvIGZpbmUgZm9yIEdDQy4gICovCiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS5wYXRjaAppbmRleCA0MzYyZWZhLi4zMGM0YzY5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDU4OGQ5MzZiOWFhNjVlN2NjOGIxZWIyY2FkMWQyMDkwODdkYjQzYTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDcyM2EzMWQzZTI2MjcyMTFiMzlmYmNjMDhmNzViM2MyM2M0MDk2YzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAxNToxMDozMyAtMDgwMAotU3ViamVjdDogW1BBVENIIDIwLzI0XSBlZ2xpYmM6IGNoZXJyeS1waWNrZWQgZnJvbQorU3ViamVjdDogW1BBVENIIDIwLzI1XSBlZ2xpYmM6IGNoZXJyeS1waWNrZWQgZnJvbQogCiBodHRwOi8vd3d3LmVnbGliYy5vcmcvYXJjaGl2ZXMvcGF0Y2hlcy9tc2cwMDc3Mi5odG1sCiAKQEAgLTE1LDEwICsxNSwxMCBAQAogIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9yZXNvbHYvcmVzX2xpYmMuYyBiL3Jlc29sdi9yZXNfbGliYy5jCi1pbmRleCBhODM5NGUwLi45ODFhYzdjIDEwMDY0NAoraW5kZXggYTRiMzc2Zi4uMzI1NmUxMiAxMDA2NDQKIC0tLSBhL3Jlc29sdi9yZXNfbGliYy5jCiArKysgYi9yZXNvbHYvcmVzX2xpYmMuYwotQEAgLTE4LDYgKzE4LDcgQEAKK0BAIC0yMSwxMSArMjEsMTMgQEAKICAjaW5jbHVkZSA8YXRvbWljLmg+CiAgI2luY2x1ZGUgPGxpbWl0cy5oPgogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTI2LDE1ICsyNiwxMyBAQAogICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAgI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgogICNpbmNsdWRlIDxyZXNvbHYuaD4KLUBAIC0yOCw2ICsyOSw3IEBACi0gICAgb3V0KSBzaW5jZSByZXNfaW5pdCgpIHNob3VsZCBnbyBpbnRvIGxpYmMuc28gYnV0IHRoZSByZXN0IG9mIHRoYXQKLSAgICBmaWxlIHNob3VsZCBub3QuICAqLworICNpbmNsdWRlIDxsaWJjLWxvY2suaD4KICAKICtfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jayk7CiAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19yZXNfaW5pdHN0YW1wIGF0dHJpYnV0ZV9oaWRkZW47CiAgLyogV2UgaGF2ZSBhdG9taWMgaW5jcmVtZW50IG9wZXJhdGlvbnMgb24gNjQtYml0IHBsYXRmb3Jtcy4gICovCiAgI2lmIF9fV09SRFNJWkUgPT0gNjQKLUBAIC0zNSw3ICszNyw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmVzX2luaXRzdGFtcCBhdHRyaWJ1dGVfaGlkZGVuOworQEAgLTMzLDcgKzM1LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19yZXNfaW5pdHN0YW1wIGF0dHJpYnV0ZV9oaWRkZW47CiAgIyBkZWZpbmUgYXRvbWljaW5jdW5sb2NrKGxvY2spICh2b2lkKSAwCiAgIyBkZWZpbmUgYXRvbWljaW5jKHZhcikgY2F0b21pY19pbmNyZW1lbnQgKCYodmFyKSkKICAjZWxzZQpAQCAtNDIsNyArNDAsNyBAQAogICMgZGVmaW5lIGF0b21pY2luY2xvY2sobG9jaykgX19saWJjX2xvY2tfbG9jayAobG9jaykKICAjIGRlZmluZSBhdG9taWNpbmN1bmxvY2sobG9jaykgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKQogICMgZGVmaW5lIGF0b21pY2luYyh2YXIpICsrdmFyCi1AQCAtOTQsNyArOTUsMTggQEAgcmVzX2luaXQodm9pZCkgeworQEAgLTkyLDcgKzkzLDE4IEBAIHJlc19pbml0KHZvaWQpIHsKICBpbnQKICBfX3Jlc19tYXliZV9pbml0IChyZXNfc3RhdGUgcmVzcCwgaW50IHByZWluaXQpCiAgewpAQCAtNjIsNSArNjAsNSBAQAogIAkJCWlmIChyZXNwLT5uc2NvdW50ID4gMCkKICAJCQkJX19yZXNfaWNsb3NlIChyZXNwLCB0cnVlKTsKIC0tIAotMi42LjQKKzIuOC4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoCmluZGV4IDIyNWYyMmYuLjg5MzFjOWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gYjc0ZTM0ZTZmNTM4MTZhZDU3YjEzYmE2ZmQ3MGE5N2RiMWJjMWVhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gOTY5OTg3MzgyMGQwMzQ3YzJmMzc3ZjBkODZiY2U2MTVkODdhNWU0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDMxIERlYyAyMDE1IDE1OjE1OjA5IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMjEvMjRdIGVnbGliYzogQ2xlYXIgY2FjaGUgbGluZXMgb24gcHBjOHh4CitTdWJqZWN0OiBbUEFUQ0ggMjEvMjVdIGVnbGliYzogQ2xlYXIgY2FjaGUgbGluZXMgb24gcHBjOHh4CiAKIDIwMDctMDYtMTMgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGNvZGVzb3VyY2VyeS5jb20+CiAgICAgICAgICAgICBNYXJrIFNoaW53ZWxsICA8c2hpbndlbGxAY29kZXNvdXJjZXJ5LmNvbT4KQEAgLTIxLDcgKzIxLDcgQEAKICAyIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYwotaW5kZXggYzI1MDRmZi4uZDUwZjFjYiAxMDA2NDQKK2luZGV4IDk4ZWMyYjMuLmIzODRhZTAgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCiArKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCiBAQCAtMjQsOSArMjQsMjEgQEAgaW50IF9fY2FjaGVfbGluZV9zaXplIGF0dHJpYnV0ZV9oaWRkZW47CkBAIC00OCw3ICs0OCw3IEBACiAgCWJyZWFrOwogIAogZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKLWluZGV4IDIwOWExNmQuLjVkODU3MmQgMTAwNjQ0CitpbmRleCAwZWZkMjk3Li44Y2MwZWY4IDEwMDY0NAogLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCiBAQCAtNzMsMTEgKzczLDI1IEBAIF9fbGliY19zdGFydF9tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsCkBAIC03OSw1ICs3OSw1IEBACiAgCWJyZWFrOwogICNpZm5kZWYgU0hBUkVECiAtLSAKLTIuNi40CisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2gKaW5kZXggODhiMjBmNi4uZjUzZjVmZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gOGY0ODNjYjFmMjFhYjY0MzFmZjk5ZThkMzBkNTZiOTE2MDdhZTkxOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gODkwNGY0MjQ5YzkzMGQxODdlMTljN2U5ZDNlNzNjODM1ZDExZTE4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjU1OjUzICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjIvMjRdIGVnbGliYzogUmVzb2x2ZSBfX2Zwc2NyX3ZhbHVlcyBvbiBTSDQKK1N1YmplY3Q6IFtQQVRDSCAyMi8yNV0gZWdsaWJjOiBSZXNvbHZlIF9fZnBzY3JfdmFsdWVzIG9uIFNINAogCiAyMDEwLTA5LTI5ICBOb2J1aGlybyBJd2FtYXRzdSAgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgogICAgICAgICAgICAgQW5kcmV3IFN0dWJicyAgPGFtc0Bjb2Rlc291cmNlcnkuY29tPgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAjIGEqCiAgICAgIGFscGhhc29ydDY0OwogZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKLWluZGV4IGEwMmI3ZTIuLmI5YmUzMjYgMTAwNjQ0CitpbmRleCAwMDI0ZDc5Li5kMWRiN2U0IDEwMDY0NAogLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCiBAQCAtMzAsMyArMzAsMTQgQEAgRU5UUlkgKF9fc3lzY2FsbF9lcnJvcikKQEAgLTUyLDUgKzUyLDUgQEAKICt3ZWFrX2FsaWFzIChfX19mcHNjcl92YWx1ZXMsIF9fZnBzY3JfdmFsdWVzKQogKwogLS0gCi0yLjYuNAorMi44LjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoCmluZGV4IGQ5NWVhM2IuLmY5ODVmM2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDU4ZDQyNDg4NGVlZDdlZmRlNmM5MGFmMGNkN2M2YzM3Y2Y5YjQ0NGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDE5NDdmMjExZmFiNDAwMWU4NGJiNTI4NjhjZGRiZDQwMWU1OTc4ODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1NzowMSArMDAwMAotU3ViamVjdDogW1BBVENIIDIzLzI0XSBlZ2xpYmM6IEluc3RhbGwgUElDIGFyY2hpdmVzCitTdWJqZWN0OiBbUEFUQ0ggMjMvMjVdIGVnbGliYzogSW5zdGFsbCBQSUMgYXJjaGl2ZXMKIAogRm9yd2FyZCBwb3J0IGZyb20gZWdsaWJjCiAKQEAgLTI5LDcgKzI5LDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcwotaW5kZXggZmEyNDAzMC4uMWZmNDYzNCAxMDA2NDQKK2luZGV4IDUzZWFiZmEuLjFjZDJhNTMgMTAwNjQ0CiAtLS0gYS9NYWtlcnVsZXMKICsrKyBiL01ha2VydWxlcwogQEAgLTY5NCw2ICs2OTQsOSBAQCBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQpAQCAtMTE5LDUgKzExOSw1IEBACiAgaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXI6IGluc3RhbGwtYmluLW5vc3ViZGlyIGluc3RhbGwtYmluLXNjcmlwdC1ub3N1YmRpciBcCiAgCQkJICAgIGluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXIgaW5zdGFsbC1zYmluLW5vc3ViZGlyIFwKIC0tIAotMi42LjQKKzIuOC4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtY3Jvc3MtbG9jYWxlLWdlbmVyYXRpb24tc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtY3Jvc3MtbG9jYWxlLWdlbmVyYXRpb24tc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDViNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNTY2IEBACitGcm9tIDExZDc2MzMxNzgzMDFhZGQyNmEyNDY1N2UyZjE1OTZhMmY3ZGRkY2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTozMzo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDI0LzI1XSBlZ2xpYmM6IEZvcndhcmQgcG9ydCBjcm9zcyBsb2NhbGUgZ2VuZXJhdGlvbiBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbG9jYWxlL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgMyArKy0KKyBsb2NhbGUvY2F0bmFtZXMuYyAgICAgICAgICAgICB8IDQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbG9jYWxlL2xvY2FsZWluZm8uaCAgICAgICAgICAgfCAgMiArLQorIGxvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jIHwgIDYgKysrKysKKyBsb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jICB8IDE3ICsrKysrKy0tLS0tLS0KKyBsb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYyAgICB8IDI3ICsrKysrKysrKystLS0tLS0tLS0tCisgbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYyAgICAgfCAzMSArKysrKysrKysrKysrKystLS0tLS0tLQorIGxvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMgIHwgIDIgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMgICB8ICA4ICsrKysrKworIGxvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMgICAgIHwgIDUgKysrLQorIGxvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmggICAgIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIGxvY2FsZS9zZXRsb2NhbGUuYyAgICAgICAgICAgIHwgMzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEyIGZpbGVzIGNoYW5nZWQsIDE2OSBpbnNlcnRpb25zKCspLCA2OSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbG9jYWxlL2NhdG5hbWVzLmMKKworZGlmZiAtLWdpdCBhL2xvY2FsZS9NYWtlZmlsZSBiL2xvY2FsZS9NYWtlZmlsZQoraW5kZXggYzUzNzllNi4uYzk4YzY3NSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9NYWtlZmlsZQorKysrIGIvbG9jYWxlL01ha2VmaWxlCitAQCAtMjUsNyArMjUsOCBAQCBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyBoZWFkZXJzCQk9IGxvY2FsZS5oIGJpdHMvbG9jYWxlLmggbGFuZ2luZm8uaCB4bG9jYWxlLmgKKyByb3V0aW5lcwk9IHNldGxvY2FsZSBmaW5kbG9jYWxlIGxvYWRsb2NhbGUgbG9hZGFyY2hpdmUgXAorIAkJICBsb2NhbGVjb252IG5sX2xhbmdpbmZvIG5sX2xhbmdpbmZvX2wgbWJfY3VyX21heCBcCistCQkgIG5ld2xvY2FsZSBkdXBsb2NhbGUgZnJlZWxvY2FsZSB1c2Vsb2NhbGUKKysJCSAgbmV3bG9jYWxlIGR1cGxvY2FsZSBmcmVlbG9jYWxlIHVzZWxvY2FsZSBcCisrCQkgIGNhdG5hbWVzCisgdGVzdHMJCT0gdHN0LUMtbG9jYWxlIHRzdC1sb2NuYW1lIHRzdC1kdXBsb2NhbGUKKyBjYXRlZ29yaWVzCT0gY3R5cGUgbWVzc2FnZXMgbW9uZXRhcnkgbnVtZXJpYyB0aW1lIHBhcGVyIG5hbWUgXAorIAkJICBhZGRyZXNzIHRlbGVwaG9uZSBtZWFzdXJlbWVudCBpZGVudGlmaWNhdGlvbiBjb2xsYXRlCitkaWZmIC0tZ2l0IGEvbG9jYWxlL2NhdG5hbWVzLmMgYi9sb2NhbGUvY2F0bmFtZXMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlmYWQzNTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xvY2FsZS9jYXRuYW1lcy5jCitAQCAtMCwwICsxLDQ4IEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgImxvY2FsZWluZm8uaCIKKysKKysvKiBEZWZpbmUgYW4gYXJyYXkgb2YgY2F0ZWdvcnkgbmFtZXMgKGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzKS4gICovCisrY29uc3QgdW5pb24gY2F0bmFtZXN0cl90IF9ubF9jYXRlZ29yeV9uYW1lcyBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysgICAgeworKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgICAgIGNhdGVnb3J5X25hbWUsCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysgICAgfQorKyAgfTsKKysKKytjb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX2lkeHNbX19MQ19MQVNUXSBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgW2NhdGVnb3J5XSA9IG9mZnNldG9mICh1bmlvbiBjYXRuYW1lc3RyX3QsIENBVE5BTUVNRiAoX19MSU5FX18pKSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmIERFRklORV9DQVRFR09SWQorKyAgfTsKKysKKysvKiBBbiBhcnJheSBvZiB0aGVpciBsZW5ndGhzLCBmb3IgY29udmVuaWVuY2UuICAqLworK2NvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfc2l6ZXNbXSBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgW2NhdGVnb3J5XSA9IHNpemVvZiAoY2F0ZWdvcnlfbmFtZSkgLSAxLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYJREVGSU5FX0NBVEVHT1JZCisrICAgIFtMQ19BTExdID0gc2l6ZW9mICgiTENfQUxMIikgLSAxCisrICB9OworZGlmZiAtLWdpdCBhL2xvY2FsZS9sb2NhbGVpbmZvLmggYi9sb2NhbGUvbG9jYWxlaW5mby5oCitpbmRleCA5NDYyN2YzLi5kMGRiNzdiIDEwMDY0NAorLS0tIGEvbG9jYWxlL2xvY2FsZWluZm8uaAorKysrIGIvbG9jYWxlL2xvY2FsZWluZm8uaAorQEAgLTIyNCw3ICsyMjQsNyBAQCBfX2xpYmNfdHNkX2RlZmluZSAoZXh0ZXJuLCBfX2xvY2FsZV90LCBMT0NBTEUpCisgICAgdW51c2VkLiAgV2UgY2FuIG1hbmFnZSB0aGlzIHBsYXlpbmcgc29tZSB0cmlja3Mgd2l0aCB3ZWFrIHJlZmVyZW5jZXMuCisgICAgQnV0IHdpdGggdGhyZWFkLWxvY2FsIGxvY2FsZSBzZXR0aW5ncywgaXQgYmVjb21lcyBxdWl0ZSB1bmdhaW5seSB1bmxlc3MKKyAgICB3ZSBjYW4gdXNlIF9fdGhyZWFkIHZhcmlhYmxlcy4gIFNvIG9ubHkgaW4gdGhhdCBjYXNlIGRvIHdlIGF0dGVtcHQgdGhpcy4gICovCistI2lmbmRlZiBTSEFSRUQKKysjaWYgIWRlZmluZWQgU0hBUkVEICYmICFkZWZpbmVkIElOX0dMSUJDX0xPQ0FMRURFRgorICMgaW5jbHVkZSA8dGxzLmg+CisgIyBkZWZpbmUgTkxfQ1VSUkVOVF9JTkRJUkVDVAkxCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMgYi9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworaW5kZXggOTlmY2QzNS4uNWU1MjhkYyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworQEAgLTE5LDcgKzE5LDkgQEAKKyAjaW5jbHVkZSA8ZXJyb3IuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworICNpbmNsdWRlIDxzcGF3bi5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitAQCAtMTU2LDYgKzE1OCw3IEBAIGNoYXJtYXBfY2xvc2VkaXIgKENIQVJNQVBfRElSICpjZGlyKQorICAgcmV0dXJuIGNsb3NlZGlyIChkaXIpOworIH0KKyAKKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAvKiBDcmVhdGVzIGEgc3VicHJvY2VzcyBkZWNvbXByZXNzaW5nIHRoZSBnaXZlbiBwYXRobmFtZSwgYW5kIHJldHVybnMKKyAgICBhIHN0cmVhbSByZWFkaW5nIGl0cyBvdXRwdXQgKHRoZSBkZWNvbXByZXNzZWQgZGF0YSkuICAqLworIHN0YXRpYworQEAgLTIwNCw2ICsyMDcsNyBAQCBmb3Blbl91bmNvbXByZXNzZWQgKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBjb25zdCBjaGFyICpjb21wcmVzc29yKQorICAgICB9CisgICByZXR1cm4gTlVMTDsKKyB9CisrI2VuZGlmCisgCisgLyogT3BlbnMgYSBjaGFybWFwIGZvciByZWFkaW5nLCBnaXZlbiBpdHMgbmFtZSAobm90IGFuIGFsaWFzIG5hbWUpLiAgKi8KKyBGSUxFICoKK0BAIC0yMjYsNiArMjMwLDcgQEAgY2hhcm1hcF9vcGVuIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpCisgICBpZiAoc3RyZWFtICE9IE5VTEwpCisgICAgIHJldHVybiBzdHJlYW07CisgCisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgICBtZW1jcHkgKHAsICIuZ3oiLCA0KTsKKyAgIHN0cmVhbSA9IGZvcGVuX3VuY29tcHJlc3NlZCAocGF0aG5hbWUsICJnemlwIik7CisgICBpZiAoc3RyZWFtICE9IE5VTEwpCitAQCAtMjM1LDYgKzI0MCw3IEBAIGNoYXJtYXBfb3BlbiAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKQorICAgc3RyZWFtID0gZm9wZW5fdW5jb21wcmVzc2VkIChwYXRobmFtZSwgImJ6aXAyIik7CisgICBpZiAoc3RyZWFtICE9IE5VTEwpCisgICAgIHJldHVybiBzdHJlYW07CisrI2VuZGlmCisgCisgICByZXR1cm4gTlVMTDsKKyB9CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKK2luZGV4IDFlMTI1ZjYuLjNiMjg2N2YgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCitAQCAtMzUwLDcgKzM1MCw3IEBAIG5ld19lbGVtZW50IChzdHJ1Y3QgbG9jYWxlX2NvbGxhdGVfdCAqY29sbGF0ZSwgY29uc3QgY2hhciAqbWJzLCBzaXplX3QgbWJzbGVuLAorICAgICB9CisgICBpZiAod2NzICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBzaXplX3QgbndjcyA9IHdjc2xlbiAoKHdjaGFyX3QgKikgd2NzKTsKKysgICAgICBzaXplX3QgbndjcyA9IHdjc2xlbl91aW50MzIgKHdjcyk7CisgICAgICAgdWludDMyX3QgemVybyA9IDA7CisgICAgICAgLyogSGFuZGxlIDxVMDAwMD4gYXMgYSBzaW5nbGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgICBpZiAobndjcyA9PSAwKQorQEAgLTE3NzYsOCArMTc3Niw3IEBAIHN5bWJvbCBgJXMnIGhhcyB0aGUgc2FtZSBlbmNvZGluZyBhcyIpLCAoKmVwdHIpLT5uYW1lKTsKKyAKKyAJICAgICAgaWYgKCgqZXB0ciktPm53Y3MgPT0gcnVucC0+bndjcykKKyAJCXsKKy0JCSAgaW50IGMgPSB3bWVtY21wICgod2NoYXJfdCAqKSAoKmVwdHIpLT53Y3MsCistCQkJCSAgICh3Y2hhcl90ICopIHJ1bnAtPndjcywgcnVucC0+bndjcyk7CisrCQkgIGludCBjID0gd21lbWNtcF91aW50MzIgKCgqZXB0ciktPndjcywgcnVucC0+d2NzLCBydW5wLT5ud2NzKTsKKyAKKyAJCSAgaWYgKGMgPT0gMCkKKyAJCSAgICB7CitAQCAtMjAxMCw5ICsyMDA5LDkgQEAgYWRkX3RvX3RhYmxld2MgKHVpbnQzMl90IGNoLCBzdHJ1Y3QgZWxlbWVudF90ICpydW5wKQorIAkgICAgIG9uZSBjb25zZWN1dGl2ZSBlbnRyeS4gICovCisgCSAgaWYgKHJ1bnAtPndjbmV4dCAhPSBOVUxMCisgCSAgICAgICYmIHJ1bnAtPm53Y3MgPT0gcnVucC0+d2NuZXh0LT5ud2NzCistCSAgICAgICYmIHdtZW1jbXAgKCh3Y2hhcl90ICopIHJ1bnAtPndjcywKKy0JCQkgICh3Y2hhcl90ICopcnVucC0+d2NuZXh0LT53Y3MsCistCQkJICBydW5wLT5ud2NzIC0gMSkgPT0gMAorKwkgICAgICAmJiB3bWVtY21wX3VpbnQzMiAocnVucC0+d2NzLAorKwkJCQkgcnVucC0+d2NuZXh0LT53Y3MsCisrCQkJCSBydW5wLT5ud2NzIC0gMSkgPT0gMAorIAkgICAgICAmJiAocnVucC0+d2NzW3J1bnAtPm53Y3MgLSAxXQorIAkJICA9PSBydW5wLT53Y25leHQtPndjc1tydW5wLT5ud2NzIC0gMV0gKyAxKSkKKyAJICAgIHsKK0BAIC0yMDM2LDkgKzIwMzUsOSBAQCBhZGRfdG9fdGFibGV3YyAodWludDMyX3QgY2gsIHN0cnVjdCBlbGVtZW50X3QgKnJ1bnApCisgCQlydW5wID0gcnVucC0+d2NuZXh0OworIAkgICAgICB3aGlsZSAocnVucC0+d2NuZXh0ICE9IE5VTEwKKyAJCSAgICAgJiYgcnVucC0+bndjcyA9PSBydW5wLT53Y25leHQtPm53Y3MKKy0JCSAgICAgJiYgd21lbWNtcCAoKHdjaGFyX3QgKikgcnVucC0+d2NzLAorLQkJCQkgKHdjaGFyX3QgKilydW5wLT53Y25leHQtPndjcywKKy0JCQkJIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisrCQkgICAgICYmIHdtZW1jbXBfdWludDMyIChydW5wLT53Y3MsCisrCQkJCQlydW5wLT53Y25leHQtPndjcywKKysJCQkJCXJ1bnAtPm53Y3MgLSAxKSA9PSAwCisgCQkgICAgICYmIChydW5wLT53Y3NbcnVucC0+bndjcyAtIDFdCisgCQkJID09IHJ1bnAtPndjbmV4dC0+d2NzW3J1bnAtPm53Y3MgLSAxXSArIDEpKTsKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCitpbmRleCAwZmQxNDFjLi42ODEzNmU2IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCitAQCAtOTI2LDcgKzkyNiw3IEBAIGN0eXBlX291dHB1dCAoc3RydWN0IGxvY2FsZWRlZl90ICpsb2NhbGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgICBhbGxvY2F0ZV9hcnJheXMgKGN0eXBlLCBjaGFybWFwLCBjdHlwZS0+cmVwZXJ0b2lyZSk7CisgCisgICBkZWZhdWx0X21pc3NpbmdfbGVuID0gKGN0eXBlLT5kZWZhdWx0X21pc3NpbmcKKy0JCQkgPyB3Y3NsZW4gKCh3Y2hhcl90ICopIGN0eXBlLT5kZWZhdWx0X21pc3NpbmcpCisrCQkJID8gd2NzbGVuX3VpbnQzMiAoY3R5cGUtPmRlZmF1bHRfbWlzc2luZykKKyAJCQkgOiAwKTsKKyAKKyAgIGluaXRfbG9jYWxlX2RhdGEgKCZmaWxlLCBuZWxlbXMpOworQEAgLTE5MzcsNyArMTkzNyw3IEBAIHJlYWRfdHJhbnNsaXRfZW50cnkgKHN0cnVjdCBsaW5lcmVhZGVyICpsZGZpbGUsIHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsCisgCSAgICBpZ25vcmUgPSAxOworIAkgIGVsc2UKKyAJICAgIC8qIFRoaXMgdmFsdWUgaXMgdXNhYmxlLiAgKi8KKy0JICAgIG9ic3RhY2tfZ3JvdyAob2IsIHRvX3dzdHIsIHdjc2xlbiAoKHdjaGFyX3QgKikgdG9fd3N0cikgKiA0KTsKKysJICAgIG9ic3RhY2tfZ3JvdyAob2IsIHRvX3dzdHIsIHdjc2xlbl91aW50MzIgKHRvX3dzdHIpICogNCk7CisgCisgCSAgZmlyc3QgPSAwOworIAl9CitAQCAtMjQ3MSw4ICsyNDcxLDggQEAgd2l0aCBjaGFyYWN0ZXIgY29kZSByYW5nZSB2YWx1ZXMgb25lIG11c3QgdXNlIHRoZSBhYnNvbHV0ZSBlbGxpcHNpcyBgLi4uJyIpKTsKKyAJICAgIH0KKyAKKyAJaGFuZGxlX3Rva19kaWdpdDoKKy0JICBjbGFzc19iaXQgPSBfSVN3ZGlnaXQ7CistCSAgY2xhc3MyNTZfYml0ID0gX0lTZGlnaXQ7CisrCSAgY2xhc3NfYml0ID0gQklUdyAodG9rX2RpZ2l0KTsKKysJICBjbGFzczI1Nl9iaXQgPSBCSVQgKHRva19kaWdpdCk7CisgCSAgaGFuZGxlX2RpZ2l0cyA9IDE7CisgCSAgZ290byByZWFkX2NoYXJjbGFzczsKKyAKK0BAIC0zOTI5LDggKzM5MjksNyBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCisgCSAgd2hpbGUgKGlkeCA8IG51bWJlcikKKyAJICAgIHsKKy0JICAgICAgaW50IHJlcyA9IHdjc2NtcCAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2lkeF0tPmZyb20sCistCQkJCShjb25zdCB3Y2hhcl90ICopIHJ1bnAtPmZyb20pOworKwkgICAgICBpbnQgcmVzID0gd2NzY21wX3VpbnQzMiAoc29ydGVkW2lkeF0tPmZyb20sIHJ1bnAtPmZyb20pOworIAkgICAgICBpZiAocmVzID09IDApCisgCQl7CisgCQkgIHJlcGxhY2UgPSAxOworQEAgLTM5NjcsMTEgKzM5NjYsMTEgQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorICAgICAgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IG51bWJlcjsgKytjbnQpCisgCXsKKyAJICBzdHJ1Y3QgdHJhbnNsaXRfdG9fdCAqc3J1bnA7CistCSAgZnJvbV9sZW4gKz0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworKwkgIGZyb21fbGVuICs9IHdjc2xlbl91aW50MzIgKHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisgCSAgc3J1bnAgPSBzb3J0ZWRbY250XS0+dG87CisgCSAgd2hpbGUgKHNydW5wICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIHRvX2xlbiArPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIpICsgMTsKKysJICAgICAgdG9fbGVuICs9IHdjc2xlbl91aW50MzIgKHNydW5wLT5zdHIpICsgMTsKKyAJICAgICAgc3J1bnAgPSBzcnVucC0+bmV4dDsKKyAJICAgIH0KKyAJICAvKiBQbHVzIG9uZSBmb3IgdGhlIGV4dHJhIE5VTCBjaGFyYWN0ZXIgbWFya2luZyB0aGUgZW5kIG9mCitAQCAtMzk5NSwxOCArMzk5NCwxOCBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCSAgY3R5cGUtPnRyYW5zbGl0X2Zyb21faWR4W2NudF0gPSBmcm9tX2xlbjsKKyAJICBjdHlwZS0+dHJhbnNsaXRfdG9faWR4W2NudF0gPSB0b19sZW47CisgCistCSAgbGVuID0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworLQkgIHdtZW1jcHkgKCh3Y2hhcl90ICopICZjdHlwZS0+dHJhbnNsaXRfZnJvbV90YmxbZnJvbV9sZW5dLAorLQkJICAgKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20sIGxlbik7CisrCSAgbGVuID0gd2NzbGVuX3VpbnQzMiAoc29ydGVkW2NudF0tPmZyb20pICsgMTsKKysJICB3bWVtY3B5X3VpbnQzMiAoJmN0eXBlLT50cmFuc2xpdF9mcm9tX3RibFtmcm9tX2xlbl0sCisrCQkJICBzb3J0ZWRbY250XS0+ZnJvbSwgbGVuKTsKKyAJICBmcm9tX2xlbiArPSBsZW47CisgCisgCSAgY3R5cGUtPnRyYW5zbGl0X3RvX2lkeFtjbnRdID0gdG9fbGVuOworIAkgIHNydW5wID0gc29ydGVkW2NudF0tPnRvOworIAkgIHdoaWxlIChzcnVucCAhPSBOVUxMKQorIAkgICAgeworLQkgICAgICBsZW4gPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIpICsgMTsKKy0JICAgICAgd21lbWNweSAoKHdjaGFyX3QgKikgJmN0eXBlLT50cmFuc2xpdF90b190YmxbdG9fbGVuXSwKKy0JCSAgICAgICAoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyLCBsZW4pOworKwkgICAgICBsZW4gPSB3Y3NsZW5fdWludDMyIChzcnVucC0+c3RyKSArIDE7CisrCSAgICAgIHdtZW1jcHlfdWludDMyICgmY3R5cGUtPnRyYW5zbGl0X3RvX3RibFt0b19sZW5dLAorKwkJCSAgICAgIHNydW5wLT5zdHIsIGxlbik7CisgCSAgICAgIHRvX2xlbiArPSBsZW47CisgCSAgICAgIHNydW5wID0gc3J1bnAtPm5leHQ7CisgCSAgICB9CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKK2luZGV4IDg3NTMxYmMuLjVmMmMyNjYgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCitAQCAtMjE1LDggKzIxNSwxMCBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAJfQorICAgICAgIGVsc2UKKyAJeworKwkgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB3dF9mbXRfYW1wbVtdCisrCSAgICA9IHsgJyUnLCdJJywnOicsJyUnLCdNJywnOicsJyUnLCdTJywnICcsJyUnLCdwJywwIH07CisgCSAgdGltZS0+dF9mbXRfYW1wbSA9ICIlSTolTTolUyAlcCI7CistCSAgdGltZS0+d3RfZm10X2FtcG0gPSAoY29uc3QgdWludDMyX3QgKikgTCIlSTolTTolUyAlcCI7CisrCSAgdGltZS0+d3RfZm10X2FtcG0gPSB3dF9mbXRfYW1wbTsKKyAJfQorICAgICB9CisgCitAQCAtMjI2LDcgKzIyOCw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworICAgICAgIGNvbnN0IGludCBkYXlzX3Blcl9tb250aFsxMl0gPSB7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsCisgCQkJCSAgICAgICAzMSwgMzEsIDMwLCAzMSAsMzAsIDMxIH07CisgICAgICAgc2l6ZV90IGlkeDsKKy0gICAgICB3Y2hhcl90ICp3c3RyOworKyAgICAgIHVpbnQzMl90ICp3c3RyOworIAorICAgICAgIHRpbWUtPmVyYV9lbnRyaWVzID0KKyAJKHN0cnVjdCBlcmFfZGF0YSAqKSB4bWFsbG9jICh0aW1lLT5udW1fZXJhCitAQCAtNDY0LDE4ICs0NjYsMTggQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgCSAgICB9CisgCisgCSAgLyogTm93IGdlbmVyYXRlIHRoZSB3aWRlIGNoYXJhY3RlciBuYW1lIGFuZCBmb3JtYXQuICAqLworLQkgIHdzdHIgPSB3Y3NjaHIgKCh3Y2hhcl90ICopIHRpbWUtPndlcmFbaWR4XSwgTCc6Jyk7LyogZW5kIGRpcmVjdGlvbiAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgb2Zmc2V0ICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBzdGFydCAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgZW5kICovCisrCSAgd3N0ciA9IHdjc2Nocl91aW50MzIgKHRpbWUtPndlcmFbaWR4XSwgTCc6Jyk7IC8qIGVuZCBkaXJlY3Rpb24gKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBvZmZzZXQgKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBzdGFydCAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIGVuZCAqLworIAkgIGlmICh3c3RyICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPSAodWludDMyX3QgKikgd3N0ciArIDE7CistCSAgICAgIHdzdHIgPSB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKTsJLyogZW5kIG5hbWUgKi8KKysJICAgICAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9IHdzdHIgKyAxOworKwkgICAgICB3c3RyID0gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpOyAvKiBlbmQgbmFtZSAqLworIAkgICAgICBpZiAod3N0ciAhPSBOVUxMKQorIAkJeworIAkJICAqd3N0ciA9IEwnXDAnOworLQkJICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLndmb3JtYXQgPSAodWludDMyX3QgKikgd3N0ciArIDE7CisrCQkgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud2Zvcm1hdCA9IHdzdHIgKyAxOworIAkJfQorIAkgICAgICBlbHNlCisgCQl0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0KK0BAIC01MzQsNyArNTM2LDE2IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworICAgaWYgKHRpbWUtPmRhdGVfZm10ID09IE5VTEwpCisgICAgIHRpbWUtPmRhdGVfZm10ID0gIiVhICViICVlICVIOiVNOiVTICVaICVZIjsKKyAgIGlmICh0aW1lLT53ZGF0ZV9mbXQgPT0gTlVMTCkKKy0gICAgdGltZS0+d2RhdGVfZm10ID0gKGNvbnN0IHVpbnQzMl90ICopIEwiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiOworKyAgICB7CisrICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHdkYXRlX2ZtdFtdID0KKysJeyAnJScsJ2EnLCcgJywKKysJICAnJScsJ2InLCcgJywKKysJICAnJScsJ2UnLCcgJywKKysJICAnJScsJ0gnLCc6JywnJScsJ00nLCc6JywnJScsJ1MnLCcgJywKKysJICAnJScsJ1onLCcgJywKKysJICAnJScsJ1knLDAgfTsKKysgICAgICB0aW1lLT53ZGF0ZV9mbXQgPSB3ZGF0ZV9mbXQ7CisrICAgIH0KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYyBiL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKK2luZGV4IGI4ODVmNjUuLjBhZmI2MzEgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCitAQCAtNTk1LDcgKzU5NSw3IEBAIGdldF9zdHJpbmcgKHN0cnVjdCBsaW5lcmVhZGVyICpsciwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyB7CisgICBpbnQgcmV0dXJuX3dpZGVzdHIgPSBsci0+cmV0dXJuX3dpZGVzdHI7CisgICBjaGFyICpidWY7CistICB3Y2hhcl90ICpidWYyID0gTlVMTDsKKysgIHVpbnQzMl90ICpidWYyID0gTlVMTDsKKyAgIHNpemVfdCBidWZhY3Q7CisgICBzaXplX3QgYnVmbWF4ID0gNTY7CisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCitpbmRleCA2YmVjZDlhLi44ZGRkMDgwIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKK0BAIC0xMTQsNiArMTE0LDcgQEAgdm9pZCAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChGSUxFICosIHN0cnVjdCBhcmdwX3N0YXRlICopID0gcHJpbnRfdmVyc2lvbjsKKyAjZGVmaW5lIE9QVF9MSVNUX0FSQ0hJVkUgMzA5CisgI2RlZmluZSBPUFRfTElUVExFX0VORElBTiA0MDAKKyAjZGVmaW5lIE9QVF9CSUdfRU5ESUFOIDQwMQorKyNkZWZpbmUgT1BUX1VJTlQzMl9BTElHTiA0MDIKKyAKKyAvKiBEZWZpbml0aW9ucyBvZiBhcmd1bWVudHMgZm9yIGFyZ3AgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CitAQCAtMTUwLDYgKzE1MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KKyAgICAgTl8oIkdlbmVyYXRlIGxpdHRsZS1lbmRpYW4gb3V0cHV0IikgfSwKKyAgIHsgImJpZy1lbmRpYW4iLCBPUFRfQklHX0VORElBTiwgTlVMTCwgMCwKKyAgICAgTl8oIkdlbmVyYXRlIGJpZy1lbmRpYW4gb3V0cHV0IikgfSwKKysgIHsgInVpbnQzMi1hbGlnbiIsIE9QVF9VSU5UMzJfQUxJR04sICJBTElHTk1FTlQiLCAwLAorKyAgICBOXygiU2V0IHRoZSB0YXJnZXQncyB1aW50MzJfdCBhbGlnbm1lbnQgaW4gYnl0ZXMgKGRlZmF1bHQgNCkiKSB9LAorICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKyB9OworIAorQEAgLTIzOSwxMiArMjQyLDE0IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICBjdHlwZSBsb2NhbGUuICAoUDEwMDMuMiA0LjM1LjUuMikgICovCisgICBzZXRsb2NhbGUgKExDX0NUWVBFLCAiUE9TSVgiKTsKKyAKKysjaWZuZGVmIE5PX1NZU0NPTkYKKyAgIC8qIExvb2sgd2hldGhlciB0aGUgc3lzdGVtIHJlYWxseSBhbGxvd3MgbG9jYWxlIGRlZmluaXRpb25zLiAgUE9TSVgKKyAgICAgIGRlZmluZXMgZXJyb3IgY29kZSAzIGZvciB0aGlzIHNpdHVhdGlvbiBzbyBJIHRoaW5rIGl0IG11c3QgYmUKKyAgICAgIGEgZmF0YWwgZXJyb3IgKHNlZSBQMTAwMy4yIDQuMzUuOCkuICAqLworICAgaWYgKHN5c2NvbmYgKF9TQ18yX0xPQ0FMRURFRikgPCAwKQorICAgICBXSVRIX0NVUl9MT0NBTEUgKGVycm9yICgzLCAwLCBfKCJcCisgRkFUQUw6IHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgYF9QT1NJWDJfTE9DQUxFREVGJyIpKSk7CisrI2VuZGlmCisgCisgICAvKiBQcm9jZXNzIGNoYXJtYXAgZmlsZS4gICovCisgICBjaGFybWFwID0gY2hhcm1hcF9yZWFkIChjaGFybWFwX2ZpbGUsIHZlcmJvc2UsIDEsIGJlX3F1aWV0LCAxKTsKK0BAIC0zMzgsNiArMzQzLDkgQEAgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyAgICAgY2FzZSBPUFRfQklHX0VORElBTjoKKyAgICAgICBzZXRfYmlnX2VuZGlhbiAodHJ1ZSk7CisgICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX1VJTlQzMl9BTElHTjoKKysgICAgICB1aW50MzJfYWxpZ25fbWFzayA9IHN0cnRvbCAoYXJnLCBOVUxMLCAwKSAtIDE7CisrICAgICAgYnJlYWs7CisgICAgIGNhc2UgJ2MnOgorICAgICAgIGZvcmNlX291dHB1dCA9IDE7CisgICAgICAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKK2luZGV4IDMyZjVjZDIuLjAyOTY3YjAgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCitAQCAtNTQ0LDYgKzU0NCw5IEBAIGNvbXBhcmVfZmlsZXMgKGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwgY29uc3QgY2hhciAqZmlsZW5hbWUyLCBzaXplX3Qgc2l6ZSwKKyAgICBtYWNoaW5lIHJ1bm5pbmcgbG9jYWxlZGVmLiAgKi8KKyBib29sIHN3YXBfZW5kaWFubmVzc19wOworIAorKy8qIFRoZSB0YXJnZXQncyB2YWx1ZSBvZiBfX2FsaWduX18odWludDMyX3QpIC0gMS4gICovCisrdW5zaWduZWQgaW50IHVpbnQzMl9hbGlnbl9tYXNrID0gMzsKKysKKyAvKiBXaGVuIGNhbGxlZCBvdXRzaWRlIGEgc3RhcnRfbG9jYWxlX3N0cnVjdHVyZS9lbmRfbG9jYWxlX3N0cnVjdHVyZQorICAgIG9yIHN0YXJ0X2xvY2FsZV9wcmVsdWRlL2VuZF9sb2NhbGVfcHJlbHVkZSBibG9jaywgcmVjb3JkIHRoYXQgdGhlCisgICAgbmV4dCBieXRlIGluIEZJTEUncyBvYnN0YWNrIHdpbGwgYmUgdGhlIGZpcnN0IGJ5dGUgb2YgYSBuZXcgZWxlbWVudC4KK0BAIC02MjEsNyArNjI0LDcgQEAgYWRkX2xvY2FsZV9zdHJpbmcgKHN0cnVjdCBsb2NhbGVfZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqc3RyaW5nKQorIHZvaWQKKyBhZGRfbG9jYWxlX3dzdHJpbmcgKHN0cnVjdCBsb2NhbGVfZmlsZSAqZmlsZSwgY29uc3QgdWludDMyX3QgKnN0cmluZykKKyB7CistICBhZGRfbG9jYWxlX3VpbnQzMl9hcnJheSAoZmlsZSwgc3RyaW5nLCB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHN0cmluZykgKyAxKTsKKysgIGFkZF9sb2NhbGVfdWludDMyX2FycmF5IChmaWxlLCBzdHJpbmcsIHdjc2xlbl91aW50MzIgKHN0cmluZykgKyAxKTsKKyB9CisgCisgLyogUmVjb3JkIHRoYXQgRklMRSdzIG5leHQgZWxlbWVudCBpcyB0aGUgMzItYml0IGludGVnZXIgVkFMVUUuICAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmggYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCitpbmRleCBhM2RkOTA0Li4yYzc3NjNhIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAorKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAorQEAgLTcxLDYgKzcxLDggQEAgZXh0ZXJuIHZvaWQgd3JpdGVfYWxsX2NhdGVnb3JpZXMgKHN0cnVjdCBsb2NhbGVkZWZfdCAqZGVmaW5pdGlvbnMsCisgCisgZXh0ZXJuIGJvb2wgc3dhcF9lbmRpYW5uZXNzX3A7CisgCisrZXh0ZXJuIHVuc2lnbmVkIGludCB1aW50MzJfYWxpZ25fbWFzazsKKysKKyAvKiBDaGFuZ2UgdGhlIG91dHB1dCB0byBiZSBiaWctZW5kaWFuIGlmIEJJR19FTkRJQU4gaXMgdHJ1ZSBhbmQKKyAgICBsaXR0bGUtZW5kaWFuIG90aGVyd2lzZS4gICovCisgc3RhdGljIGlubGluZSB2b2lkCitAQCAtODksNyArOTEsOCBAQCBtYXliZV9zd2FwX3VpbnQzMiAodWludDMyX3QgdmFsdWUpCisgfQorIAorIC8qIExpa2V3aXNlLCBidXQgbXVuZ2UgYW4gYXJyYXkgb2YgTiB1aW50MzJfdHMgc3RhcnRpbmcgYXQgQVJSQVkuICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorK3N0YXRpYyB2b2lkCisrX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKHVpbnQzMl90ICphcnJheSwgc2l6ZV90IG4pCisgeworICAgaWYgKHN3YXBfZW5kaWFubmVzc19wKQorQEAgLTk5LDcgKzEwMiw4IEBAIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICh1aW50MzJfdCAqYXJyYXksIHNpemVfdCBuKQorIAorIC8qIExpa2UgbWF5YmVfc3dhcF91aW50MzJfYXJyYXksIGJ1dCB0aGUgYXJyYXkgb2YgTiBlbGVtZW50cyBpcyBhdAorICAgIHRoZSBlbmQgb2YgT0JTVEFDSydzIGN1cnJlbnQgb2JqZWN0LiAgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKytzdGF0aWMgdm9pZAorK19fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIG1heWJlX3N3YXBfdWludDMyX29ic3RhY2sgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBzaXplX3QgbikKKyB7CisgICBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAoKHVpbnQzMl90ICopIG9ic3RhY2tfbmV4dF9mcmVlIChvYnN0YWNrKSAtIG4sIG4pOworQEAgLTI3Niw0ICsyODAsNTUgQEAgZXh0ZXJuIHZvaWQgaWRlbnRpZmljYXRpb25fb3V0cHV0IChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmxvY2FsZSwKKyAJCQkJICAgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAJCQkJICAgY29uc3QgY2hhciAqb3V0cHV0X3BhdGgpOworIAorK3N0YXRpYyBzaXplX3Qgd2NzbGVuX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnN0cikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyB1aW50MzJfdCAqIHdtZW1jcHlfdWludDMyICh1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgdWludDMyX3QgKiB3Y3NjaHJfdWludDMyIChjb25zdCB1aW50MzJfdCAqcywgdWludDMyX3QgY2gpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgaW50IHdjc2NtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIGludCB3bWVtY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrCisrc3RhdGljIHNpemVfdAorK3djc2xlbl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzdHIpCisreworKyAgc2l6ZV90IGxlbiA9IDA7CisrICB3aGlsZSAoc3RyW2xlbl0gIT0gMCkKKysgICAgbGVuKys7CisrICByZXR1cm4gbGVuOworK30KKysKKytzdGF0aWMgIGludAorK3dtZW1jbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pCisreworKyAgd2hpbGUgKG4tLSAhPSAwKQorKyAgICB7CisrICAgICAgaW50IGRpZmYgPSAqczErKyAtICpzMisrOworKyAgICAgIGlmIChkaWZmICE9IDApCisrCXJldHVybiBkaWZmOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK3djc2NtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyKQorK3sKKysgIHdoaWxlICgqczEgIT0gMCAmJiAqczEgPT0gKnMyKQorKyAgICBzMSsrLCBzMisrOworKyAgcmV0dXJuICpzMSAtICpzMjsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90ICoKKyt3bWVtY3B5X3VpbnQzMiAodWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKQorK3sKKysgIHJldHVybiBtZW1jcHkgKHMxLCBzMiwgbiAqIHNpemVvZiAodWludDMyX3QpKTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90ICoKKyt3Y3NjaHJfdWludDMyIChjb25zdCB1aW50MzJfdCAqcywgdWludDMyX3QgY2gpCisreworKyAgZG8KKysgICAgaWYgKCpzID09IGNoKQorKyAgICAgIHJldHVybiAodWludDMyX3QgKikgczsKKysgIHdoaWxlICgqcysrICE9IDApOworKyAgcmV0dXJuIDA7CisrfQorKworICNlbmRpZiAvKiBsb2NmaWxlLmggKi8KK2RpZmYgLS1naXQgYS9sb2NhbGUvc2V0bG9jYWxlLmMgYi9sb2NhbGUvc2V0bG9jYWxlLmMKK2luZGV4IDY5YjMxNDEuLjFjZWYwYmUgMTAwNjQ0CistLS0gYS9sb2NhbGUvc2V0bG9jYWxlLmMKKysrKyBiL2xvY2FsZS9zZXRsb2NhbGUuYworQEAgLTY0LDM2ICs2NCw2IEBAIHN0YXRpYyBjaGFyICpjb25zdCBfbmxfY3VycmVudF91c2VkW10gPQorICNlbmRpZgorIAorIAorLS8qIERlZmluZSBhbiBhcnJheSBvZiBjYXRlZ29yeSBuYW1lcyAoYWxzbyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMpLiAgKi8KKy1jb25zdCB1bmlvbiBjYXRuYW1lc3RyX3QgX25sX2NhdGVnb3J5X25hbWVzIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSAgICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgICAgY2F0ZWdvcnlfbmFtZSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmIERFRklORV9DQVRFR09SWQorLSAgICB9CistICB9OworLQorLWNvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfaWR4c1tfX0xDX0xBU1RdIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICBbY2F0ZWdvcnldID0gb2Zmc2V0b2YgKHVuaW9uIGNhdG5hbWVzdHJfdCwgQ0FUTkFNRU1GIChfX0xJTkVfXykpLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYgREVGSU5FX0NBVEVHT1JZCistICB9OworLQorLS8qIEFuIGFycmF5IG9mIHRoZWlyIGxlbmd0aHMsIGZvciBjb252ZW5pZW5jZS4gICovCistY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9zaXplc1tdIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICBbY2F0ZWdvcnldID0gc2l6ZW9mIChjYXRlZ29yeV9uYW1lKSAtIDEsCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZglERUZJTkVfQ0FURUdPUlkKKy0gICAgW0xDX0FMTF0gPSBzaXplb2YgKCJMQ19BTEwiKSAtIDEKKy0gIH07CistCistCisgI2lmZGVmIE5MX0NVUlJFTlRfSU5ESVJFQ1QKKyAjIGRlZmluZSBXRUFLX1BPU1RMT0FEKHBvc3Rsb2FkKSB3ZWFrX2V4dGVybiAocG9zdGxvYWQpCisgI2Vsc2UKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtRGVmaW5lLURVTU1ZX0xPQ0FMRV9ULWlmLW5vdC1kZWZpbmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtRGVmaW5lLURVTU1ZX0xPQ0FMRV9ULWlmLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjBkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1EZWZpbmUtRFVNTVlfTE9DQUxFX1QtaWYtbm90LWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4OWVjMjUyOTBkMzQ0MTNjZTVjOGJhNmMzNzhlMzFkYmFlM2EzN2MwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjAgQXByIDIwMTYgMjE6MTE6MDAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8yNV0gRGVmaW5lIERVTU1ZX0xPQ0FMRV9UIGlmIG5vdCBkZWZpbmVkCisKK1RoaXMgaXMgYSBoYWNrIHRvIGZpeCBidWlsZGluZyB0aGUgbG9jYWxlIGJpdHMgb24gYW4gb2xkZXIKK0NlbnRPcyA1LlggbWFjaGluZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmggYi9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKK2luZGV4IGY2MDYzNjUuLjBlNWY4YzMgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorQEAgLTE5LDYgKzE5LDkgQEAKKyAjaWZuZGVmIF9MRF9DT05GSUdfSAorICNkZWZpbmUgX0xEX0NPTkZJR19ICTEKKyAKKysjaWZuZGVmIERVTU1ZX0xPQ0FMRV9UCisrI2RlZmluZSBEVU1NWV9MT0NBTEVfVAorKyNlbmRpZgorIC8qIFVzZSB0aGUgaW50ZXJuYWwgdGV4dGRvbWFpbiB1c2VkIGZvciBsaWJjIG1lc3NhZ2VzLiAgKi8KKyAjZGVmaW5lIFBBQ0tBR0UgX2xpYmNfaW50bF9kb21haW5uYW1lCisgI2lmbmRlZiBWRVJTSU9OCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1Gb3J3YXJkLXBvcnQtY3Jvc3MtbG9jYWxlLWdlbmVyYXRpb24tc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1Gb3J3YXJkLXBvcnQtY3Jvc3MtbG9jYWxlLWdlbmVyYXRpb24tc3VwcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkMTExOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1lZ2xpYmMtRm9yd2FyZC1wb3J0LWNyb3NzLWxvY2FsZS1nZW5lcmF0aW9uLXN1cHBvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NjYgKzAsMCBAQAotRnJvbSBhNTY5NTkzMGFlYzY4YjNmNTAxZTQ3NWQ4NzA1Y2RkYmI2M2Y2OTVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6MzM6NDkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAyNS8yNV0gZWdsaWJjOiBGb3J3YXJkIHBvcnQgY3Jvc3MgbG9jYWxlIGdlbmVyYXRpb24gc3VwcG9ydAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGxvY2FsZS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgIDMgKystCi0gbG9jYWxlL2NhdG5hbWVzLmMgICAgICAgICAgICAgfCA0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIGxvY2FsZS9sb2NhbGVpbmZvLmggICAgICAgICAgIHwgIDIgKy0KLSBsb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYyB8ICA2ICsrKysrCi0gbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYyAgfCAxNyArKysrKystLS0tLS0tCi0gbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMgICAgfCAyNyArKysrKysrKysrLS0tLS0tLS0tLQotIGxvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMgICAgIHwgMzEgKysrKysrKysrKysrKysrLS0tLS0tLS0KLSBsb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jICB8ICAyICstCi0gbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jICAgfCAgOCArKysrKysKLSBsb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jICAgICB8ICA1ICsrKy0KLSBsb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oICAgICB8IDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KLSBsb2NhbGUvc2V0bG9jYWxlLmMgICAgICAgICAgICB8IDMwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxMiBmaWxlcyBjaGFuZ2VkLCAxNjkgaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxvY2FsZS9jYXRuYW1lcy5jCi0KLWRpZmYgLS1naXQgYS9sb2NhbGUvTWFrZWZpbGUgYi9sb2NhbGUvTWFrZWZpbGUKLWluZGV4IDc1YWZiZTEuLmQzMjUyM2IgMTAwNjQ0Ci0tLS0gYS9sb2NhbGUvTWFrZWZpbGUKLSsrKyBiL2xvY2FsZS9NYWtlZmlsZQotQEAgLTI1LDcgKzI1LDggQEAgaW5jbHVkZSAuLi9NYWtlY29uZmlnCi0gaGVhZGVycwkJPSBsb2NhbGUuaCBiaXRzL2xvY2FsZS5oIGxhbmdpbmZvLmggeGxvY2FsZS5oCi0gcm91dGluZXMJPSBzZXRsb2NhbGUgZmluZGxvY2FsZSBsb2FkbG9jYWxlIGxvYWRhcmNoaXZlIFwKLSAJCSAgbG9jYWxlY29udiBubF9sYW5naW5mbyBubF9sYW5naW5mb19sIG1iX2N1cl9tYXggXAotLQkJICBuZXdsb2NhbGUgZHVwbG9jYWxlIGZyZWVsb2NhbGUgdXNlbG9jYWxlCi0rCQkgIG5ld2xvY2FsZSBkdXBsb2NhbGUgZnJlZWxvY2FsZSB1c2Vsb2NhbGUgXAotKwkJICBjYXRuYW1lcwotIHRlc3RzCQk9IHRzdC1DLWxvY2FsZSB0c3QtbG9jbmFtZSB0c3QtZHVwbG9jYWxlCi0gY2F0ZWdvcmllcwk9IGN0eXBlIG1lc3NhZ2VzIG1vbmV0YXJ5IG51bWVyaWMgdGltZSBwYXBlciBuYW1lIFwKLSAJCSAgYWRkcmVzcyB0ZWxlcGhvbmUgbWVhc3VyZW1lbnQgaWRlbnRpZmljYXRpb24gY29sbGF0ZQotZGlmZiAtLWdpdCBhL2xvY2FsZS9jYXRuYW1lcy5jIGIvbG9jYWxlL2NhdG5hbWVzLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi45ZmFkMzU3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9sb2NhbGUvY2F0bmFtZXMuYwotQEAgLTAsMCArMSw0OCBAQAotKy8qIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCi0rCi0rICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0rICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0rICAgMDIxMTEtMTMwNyBVU0EuICAqLwotKwotKyNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCi0rCi0rLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLwotK2NvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9Ci0rICB7Ci0rICAgIHsKLSsjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKLSsgICAgICBjYXRlZ29yeV9uYW1lLAotKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKLSsjdW5kZWYgREVGSU5FX0NBVEVHT1JZCi0rICAgIH0KLSsgIH07Ci0rCi0rY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9Ci0rICB7Ci0rI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCi0rICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCi0rI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgotKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKLSsgIH07Ci0rCi0rLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KLStjb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9Ci0rICB7Ci0rI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCi0rICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKLSsjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCi0rI3VuZGVmCURFRklORV9DQVRFR09SWQotKyAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQotKyAgfTsKLWRpZmYgLS1naXQgYS9sb2NhbGUvbG9jYWxlaW5mby5oIGIvbG9jYWxlL2xvY2FsZWluZm8uaAotaW5kZXggNzg5ZGE0NC4uNGFjOTI0OSAxMDA2NDQKLS0tLSBhL2xvY2FsZS9sb2NhbGVpbmZvLmgKLSsrKyBiL2xvY2FsZS9sb2NhbGVpbmZvLmgKLUBAIC0yMjQsNyArMjI0LDcgQEAgX19saWJjX3RzZF9kZWZpbmUgKGV4dGVybiwgX19sb2NhbGVfdCwgTE9DQUxFKQotICAgIHVudXNlZC4gIFdlIGNhbiBtYW5hZ2UgdGhpcyBwbGF5aW5nIHNvbWUgdHJpY2tzIHdpdGggd2VhayByZWZlcmVuY2VzLgotICAgIEJ1dCB3aXRoIHRocmVhZC1sb2NhbCBsb2NhbGUgc2V0dGluZ3MsIGl0IGJlY29tZXMgcXVpdGUgdW5nYWlubHkgdW5sZXNzCi0gICAgd2UgY2FuIHVzZSBfX3RocmVhZCB2YXJpYWJsZXMuICBTbyBvbmx5IGluIHRoYXQgY2FzZSBkbyB3ZSBhdHRlbXB0IHRoaXMuICAqLwotLSNpZm5kZWYgU0hBUkVECi0rI2lmICFkZWZpbmVkIFNIQVJFRCAmJiAhZGVmaW5lZCBJTl9HTElCQ19MT0NBTEVERUYKLSAjIGluY2x1ZGUgPHRscy5oPgotICMgZGVmaW5lIE5MX0NVUlJFTlRfSU5ESVJFQ1QJMQotICNlbmRpZgotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jIGIvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKLWluZGV4IGNmN2FkZWEuLmVmM2I4MTEgMTAwNjQ0Ci0tLS0gYS9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYwotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKLUBAIC0xOSw3ICsxOSw5IEBACi0gI2luY2x1ZGUgPGVycm9yLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSsjaWZuZGVmIE5PX1VOQ09NUFJFU1MKLSAjaW5jbHVkZSA8c3Bhd24uaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotQEAgLTE1Niw2ICsxNTgsNyBAQCBjaGFybWFwX2Nsb3NlZGlyIChDSEFSTUFQX0RJUiAqY2RpcikKLSAgIHJldHVybiBjbG9zZWRpciAoZGlyKTsKLSB9Ci0gCi0rI2lmbmRlZiBOT19VTkNPTVBSRVNTCi0gLyogQ3JlYXRlcyBhIHN1YnByb2Nlc3MgZGVjb21wcmVzc2luZyB0aGUgZ2l2ZW4gcGF0aG5hbWUsIGFuZCByZXR1cm5zCi0gICAgYSBzdHJlYW0gcmVhZGluZyBpdHMgb3V0cHV0ICh0aGUgZGVjb21wcmVzc2VkIGRhdGEpLiAgKi8KLSBzdGF0aWMKLUBAIC0yMDQsNiArMjA3LDcgQEAgZm9wZW5fdW5jb21wcmVzc2VkIChjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqY29tcHJlc3NvcikKLSAgICAgfQotICAgcmV0dXJuIE5VTEw7Ci0gfQotKyNlbmRpZgotIAotIC8qIE9wZW5zIGEgY2hhcm1hcCBmb3IgcmVhZGluZywgZ2l2ZW4gaXRzIG5hbWUgKG5vdCBhbiBhbGlhcyBuYW1lKS4gICovCi0gRklMRSAqCi1AQCAtMjI2LDYgKzIzMCw3IEBAIGNoYXJtYXBfb3BlbiAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKQotICAgaWYgKHN0cmVhbSAhPSBOVUxMKQotICAgICByZXR1cm4gc3RyZWFtOwotIAotKyNpZm5kZWYgTk9fVU5DT01QUkVTUwotICAgbWVtY3B5IChwLCAiLmd6IiwgNCk7Ci0gICBzdHJlYW0gPSBmb3Blbl91bmNvbXByZXNzZWQgKHBhdGhuYW1lLCAiZ3ppcCIpOwotICAgaWYgKHN0cmVhbSAhPSBOVUxMKQotQEAgLTIzNSw2ICsyNDAsNyBAQCBjaGFybWFwX29wZW4gKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkKLSAgIHN0cmVhbSA9IGZvcGVuX3VuY29tcHJlc3NlZCAocGF0aG5hbWUsICJiemlwMiIpOwotICAgaWYgKHN0cmVhbSAhPSBOVUxMKQotICAgICByZXR1cm4gc3RyZWFtOwotKyNlbmRpZgotIAotICAgcmV0dXJuIE5VTEw7Ci0gfQotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCi1pbmRleCBkYzBmZTMwLi4zYzg4YzZkIDEwMDY0NAotLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYwotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYwotQEAgLTM1MCw3ICszNTAsNyBAQCBuZXdfZWxlbWVudCAoc3RydWN0IGxvY2FsZV9jb2xsYXRlX3QgKmNvbGxhdGUsIGNvbnN0IGNoYXIgKm1icywgc2l6ZV90IG1ic2xlbiwKLSAgICAgfQotICAgaWYgKHdjcyAhPSBOVUxMKQotICAgICB7Ci0tICAgICAgc2l6ZV90IG53Y3MgPSB3Y3NsZW4gKCh3Y2hhcl90ICopIHdjcyk7Ci0rICAgICAgc2l6ZV90IG53Y3MgPSB3Y3NsZW5fdWludDMyICh3Y3MpOwotICAgICAgIHVpbnQzMl90IHplcm8gPSAwOwotICAgICAgIC8qIEhhbmRsZSA8VTAwMDA+IGFzIGEgc2luZ2xlIGNoYXJhY3Rlci4gICovCi0gICAgICAgaWYgKG53Y3MgPT0gMCkKLUBAIC0xNzc2LDggKzE3NzYsNyBAQCBzeW1ib2wgYCVzJyBoYXMgdGhlIHNhbWUgZW5jb2RpbmcgYXMiKSwgKCplcHRyKS0+bmFtZSk7Ci0gCi0gCSAgICAgIGlmICgoKmVwdHIpLT5ud2NzID09IHJ1bnAtPm53Y3MpCi0gCQl7Ci0tCQkgIGludCBjID0gd21lbWNtcCAoKHdjaGFyX3QgKikgKCplcHRyKS0+d2NzLAotLQkJCQkgICAod2NoYXJfdCAqKSBydW5wLT53Y3MsIHJ1bnAtPm53Y3MpOwotKwkJICBpbnQgYyA9IHdtZW1jbXBfdWludDMyICgoKmVwdHIpLT53Y3MsIHJ1bnAtPndjcywgcnVucC0+bndjcyk7Ci0gCi0gCQkgIGlmIChjID09IDApCi0gCQkgICAgewotQEAgLTIwMTAsOSArMjAwOSw5IEBAIGFkZF90b190YWJsZXdjICh1aW50MzJfdCBjaCwgc3RydWN0IGVsZW1lbnRfdCAqcnVucCkKLSAJICAgICBvbmUgY29uc2VjdXRpdmUgZW50cnkuICAqLwotIAkgIGlmIChydW5wLT53Y25leHQgIT0gTlVMTAotIAkgICAgICAmJiBydW5wLT5ud2NzID09IHJ1bnAtPndjbmV4dC0+bndjcwotLQkgICAgICAmJiB3bWVtY21wICgod2NoYXJfdCAqKSBydW5wLT53Y3MsCi0tCQkJICAod2NoYXJfdCAqKXJ1bnAtPndjbmV4dC0+d2NzLAotLQkJCSAgcnVucC0+bndjcyAtIDEpID09IDAKLSsJICAgICAgJiYgd21lbWNtcF91aW50MzIgKHJ1bnAtPndjcywKLSsJCQkJIHJ1bnAtPndjbmV4dC0+d2NzLAotKwkJCQkgcnVucC0+bndjcyAtIDEpID09IDAKLSAJICAgICAgJiYgKHJ1bnAtPndjc1tydW5wLT5ud2NzIC0gMV0KLSAJCSAgPT0gcnVucC0+d2NuZXh0LT53Y3NbcnVucC0+bndjcyAtIDFdICsgMSkpCi0gCSAgICB7Ci1AQCAtMjAzNiw5ICsyMDM1LDkgQEAgYWRkX3RvX3RhYmxld2MgKHVpbnQzMl90IGNoLCBzdHJ1Y3QgZWxlbWVudF90ICpydW5wKQotIAkJcnVucCA9IHJ1bnAtPndjbmV4dDsKLSAJICAgICAgd2hpbGUgKHJ1bnAtPndjbmV4dCAhPSBOVUxMCi0gCQkgICAgICYmIHJ1bnAtPm53Y3MgPT0gcnVucC0+d2NuZXh0LT5ud2NzCi0tCQkgICAgICYmIHdtZW1jbXAgKCh3Y2hhcl90ICopIHJ1bnAtPndjcywKLS0JCQkJICh3Y2hhcl90ICopcnVucC0+d2NuZXh0LT53Y3MsCi0tCQkJCSBydW5wLT5ud2NzIC0gMSkgPT0gMAotKwkJICAgICAmJiB3bWVtY21wX3VpbnQzMiAocnVucC0+d2NzLAotKwkJCQkJcnVucC0+d2NuZXh0LT53Y3MsCi0rCQkJCQlydW5wLT5ud2NzIC0gMSkgPT0gMAotIAkJICAgICAmJiAocnVucC0+d2NzW3J1bnAtPm53Y3MgLSAxXQotIAkJCSA9PSBydW5wLT53Y25leHQtPndjc1tydW5wLT5ud2NzIC0gMV0gKyAxKSk7Ci0gCi1kaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYwotaW5kZXggM2Y0NjRlZi4uYjdiNmI1MSAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCi0rKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYwotQEAgLTkyNiw3ICs5MjYsNyBAQCBjdHlwZV9vdXRwdXQgKHN0cnVjdCBsb2NhbGVkZWZfdCAqbG9jYWxlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAotICAgYWxsb2NhdGVfYXJyYXlzIChjdHlwZSwgY2hhcm1hcCwgY3R5cGUtPnJlcGVydG9pcmUpOwotIAotICAgZGVmYXVsdF9taXNzaW5nX2xlbiA9IChjdHlwZS0+ZGVmYXVsdF9taXNzaW5nCi0tCQkJID8gd2NzbGVuICgod2NoYXJfdCAqKSBjdHlwZS0+ZGVmYXVsdF9taXNzaW5nKQotKwkJCSA/IHdjc2xlbl91aW50MzIgKGN0eXBlLT5kZWZhdWx0X21pc3NpbmcpCi0gCQkJIDogMCk7Ci0gCi0gICBpbml0X2xvY2FsZV9kYXRhICgmZmlsZSwgbmVsZW1zKTsKLUBAIC0xOTM3LDcgKzE5MzcsNyBAQCByZWFkX3RyYW5zbGl0X2VudHJ5IChzdHJ1Y3QgbGluZXJlYWRlciAqbGRmaWxlLCBzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLAotIAkgICAgaWdub3JlID0gMTsKLSAJICBlbHNlCi0gCSAgICAvKiBUaGlzIHZhbHVlIGlzIHVzYWJsZS4gICovCi0tCSAgICBvYnN0YWNrX2dyb3cgKG9iLCB0b193c3RyLCB3Y3NsZW4gKCh3Y2hhcl90ICopIHRvX3dzdHIpICogNCk7Ci0rCSAgICBvYnN0YWNrX2dyb3cgKG9iLCB0b193c3RyLCB3Y3NsZW5fdWludDMyICh0b193c3RyKSAqIDQpOwotIAotIAkgIGZpcnN0ID0gMDsKLSAJfQotQEAgLTI0NzEsOCArMjQ3MSw4IEBAIHdpdGggY2hhcmFjdGVyIGNvZGUgcmFuZ2UgdmFsdWVzIG9uZSBtdXN0IHVzZSB0aGUgYWJzb2x1dGUgZWxsaXBzaXMgYC4uLiciKSk7Ci0gCSAgICB9Ci0gCi0gCWhhbmRsZV90b2tfZGlnaXQ6Ci0tCSAgY2xhc3NfYml0ID0gX0lTd2RpZ2l0OwotLQkgIGNsYXNzMjU2X2JpdCA9IF9JU2RpZ2l0OwotKwkgIGNsYXNzX2JpdCA9IEJJVHcgKHRva19kaWdpdCk7Ci0rCSAgY2xhc3MyNTZfYml0ID0gQklUICh0b2tfZGlnaXQpOwotIAkgIGhhbmRsZV9kaWdpdHMgPSAxOwotIAkgIGdvdG8gcmVhZF9jaGFyY2xhc3M7Ci0gCi1AQCAtMzkyOSw4ICszOTI5LDcgQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAotIAotIAkgIHdoaWxlIChpZHggPCBudW1iZXIpCi0gCSAgICB7Ci0tCSAgICAgIGludCByZXMgPSB3Y3NjbXAgKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtpZHhdLT5mcm9tLAotLQkJCQkoY29uc3Qgd2NoYXJfdCAqKSBydW5wLT5mcm9tKTsKLSsJICAgICAgaW50IHJlcyA9IHdjc2NtcF91aW50MzIgKHNvcnRlZFtpZHhdLT5mcm9tLCBydW5wLT5mcm9tKTsKLSAJICAgICAgaWYgKHJlcyA9PSAwKQotIAkJewotIAkJICByZXBsYWNlID0gMTsKLUBAIC0zOTY3LDExICszOTY2LDExIEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKLSAgICAgICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBudW1iZXI7ICsrY250KQotIAl7Ci0gCSAgc3RydWN0IHRyYW5zbGl0X3RvX3QgKnNydW5wOwotLQkgIGZyb21fbGVuICs9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20pICsgMTsKLSsJICBmcm9tX2xlbiArPSB3Y3NsZW5fdWludDMyIChzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOwotIAkgIHNydW5wID0gc29ydGVkW2NudF0tPnRvOwotIAkgIHdoaWxlIChzcnVucCAhPSBOVUxMKQotIAkgICAgewotLQkgICAgICB0b19sZW4gKz0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyKSArIDE7Ci0rCSAgICAgIHRvX2xlbiArPSB3Y3NsZW5fdWludDMyIChzcnVucC0+c3RyKSArIDE7Ci0gCSAgICAgIHNydW5wID0gc3J1bnAtPm5leHQ7Ci0gCSAgICB9Ci0gCSAgLyogUGx1cyBvbmUgZm9yIHRoZSBleHRyYSBOVUwgY2hhcmFjdGVyIG1hcmtpbmcgdGhlIGVuZCBvZgotQEAgLTM5OTUsMTggKzM5OTQsMTggQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAotIAkgIGN0eXBlLT50cmFuc2xpdF9mcm9tX2lkeFtjbnRdID0gZnJvbV9sZW47Ci0gCSAgY3R5cGUtPnRyYW5zbGl0X3RvX2lkeFtjbnRdID0gdG9fbGVuOwotIAotLQkgIGxlbiA9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20pICsgMTsKLS0JICB3bWVtY3B5ICgod2NoYXJfdCAqKSAmY3R5cGUtPnRyYW5zbGl0X2Zyb21fdGJsW2Zyb21fbGVuXSwKLS0JCSAgIChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tLCBsZW4pOwotKwkgIGxlbiA9IHdjc2xlbl91aW50MzIgKHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7Ci0rCSAgd21lbWNweV91aW50MzIgKCZjdHlwZS0+dHJhbnNsaXRfZnJvbV90YmxbZnJvbV9sZW5dLAotKwkJCSAgc29ydGVkW2NudF0tPmZyb20sIGxlbik7Ci0gCSAgZnJvbV9sZW4gKz0gbGVuOwotIAotIAkgIGN0eXBlLT50cmFuc2xpdF90b19pZHhbY250XSA9IHRvX2xlbjsKLSAJICBzcnVucCA9IHNvcnRlZFtjbnRdLT50bzsKLSAJICB3aGlsZSAoc3J1bnAgIT0gTlVMTCkKLSAJICAgIHsKLS0JICAgICAgbGVuID0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyKSArIDE7Ci0tCSAgICAgIHdtZW1jcHkgKCh3Y2hhcl90ICopICZjdHlwZS0+dHJhbnNsaXRfdG9fdGJsW3RvX2xlbl0sCi0tCQkgICAgICAgKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0ciwgbGVuKTsKLSsJICAgICAgbGVuID0gd2NzbGVuX3VpbnQzMiAoc3J1bnAtPnN0cikgKyAxOwotKwkgICAgICB3bWVtY3B5X3VpbnQzMiAoJmN0eXBlLT50cmFuc2xpdF90b190YmxbdG9fbGVuXSwKLSsJCQkgICAgICBzcnVucC0+c3RyLCBsZW4pOwotIAkgICAgICB0b19sZW4gKz0gbGVuOwotIAkgICAgICBzcnVucCA9IHNydW5wLT5uZXh0OwotIAkgICAgfQotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCi1pbmRleCBkYjQ5MGM2Li43NWRjNTA1IDEwMDY0NAotLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYwotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYwotQEAgLTIxNSw4ICsyMTUsMTAgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7Ci0gCX0KLSAgICAgICBlbHNlCi0gCXsKLSsJICBzdGF0aWMgY29uc3QgdWludDMyX3Qgd3RfZm10X2FtcG1bXQotKwkgICAgPSB7ICclJywnSScsJzonLCclJywnTScsJzonLCclJywnUycsJyAnLCclJywncCcsMCB9OwotIAkgIHRpbWUtPnRfZm10X2FtcG0gPSAiJUk6JU06JVMgJXAiOwotLQkgIHRpbWUtPnd0X2ZtdF9hbXBtID0gKGNvbnN0IHVpbnQzMl90ICopIEwiJUk6JU06JVMgJXAiOwotKwkgIHRpbWUtPnd0X2ZtdF9hbXBtID0gd3RfZm10X2FtcG07Ci0gCX0KLSAgICAgfQotIAotQEAgLTIyNiw3ICsyMjgsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKLSAgICAgICBjb25zdCBpbnQgZGF5c19wZXJfbW9udGhbMTJdID0geyAzMSwgMjksIDMxLCAzMCwgMzEsIDMwLAotIAkJCQkgICAgICAgMzEsIDMxLCAzMCwgMzEgLDMwLCAzMSB9OwotICAgICAgIHNpemVfdCBpZHg7Ci0tICAgICAgd2NoYXJfdCAqd3N0cjsKLSsgICAgICB1aW50MzJfdCAqd3N0cjsKLSAKLSAgICAgICB0aW1lLT5lcmFfZW50cmllcyA9Ci0gCShzdHJ1Y3QgZXJhX2RhdGEgKikgeG1hbGxvYyAodGltZS0+bnVtX2VyYQotQEAgLTQ2NCwxOCArNDY2LDE4IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOwotIAkgICAgfQotIAotIAkgIC8qIE5vdyBnZW5lcmF0ZSB0aGUgd2lkZSBjaGFyYWN0ZXIgbmFtZSBhbmQgZm9ybWF0LiAgKi8KLS0JICB3c3RyID0gd2NzY2hyICgod2NoYXJfdCAqKSB0aW1lLT53ZXJhW2lkeF0sIEwnOicpOy8qIGVuZCBkaXJlY3Rpb24gKi8KLS0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIG9mZnNldCAqLwotLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgc3RhcnQgKi8KLS0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIGVuZCAqLwotKwkgIHdzdHIgPSB3Y3NjaHJfdWludDMyICh0aW1lLT53ZXJhW2lkeF0sIEwnOicpOyAvKiBlbmQgZGlyZWN0aW9uICovCi0rCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgb2Zmc2V0ICovCi0rCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgc3RhcnQgKi8KLSsJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBlbmQgKi8KLSAJICBpZiAod3N0ciAhPSBOVUxMKQotIAkgICAgewotLQkgICAgICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0gKHVpbnQzMl90ICopIHdzdHIgKyAxOwotLQkgICAgICB3c3RyID0gd2NzY2hyICh3c3RyICsgMSwgTCc6Jyk7CS8qIGVuZCBuYW1lICovCi0rCSAgICAgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPSB3c3RyICsgMTsKLSsJICAgICAgd3N0ciA9IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKTsgLyogZW5kIG5hbWUgKi8KLSAJICAgICAgaWYgKHdzdHIgIT0gTlVMTCkKLSAJCXsKLSAJCSAgKndzdHIgPSBMJ1wwJzsKLS0JCSAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53Zm9ybWF0ID0gKHVpbnQzMl90ICopIHdzdHIgKyAxOwotKwkJICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLndmb3JtYXQgPSB3c3RyICsgMTsKLSAJCX0KLSAJICAgICAgZWxzZQotIAkJdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9Ci1AQCAtNTMwLDcgKzUzMiwxNiBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKLSAgIGlmICh0aW1lLT5kYXRlX2ZtdCA9PSBOVUxMKQotICAgICB0aW1lLT5kYXRlX2ZtdCA9ICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSI7Ci0gICBpZiAodGltZS0+d2RhdGVfZm10ID09IE5VTEwpCi0tICAgIHRpbWUtPndkYXRlX2ZtdCA9IChjb25zdCB1aW50MzJfdCAqKSBMIiVhICViICVlICVIOiVNOiVTICVaICVZIjsKLSsgICAgewotKyAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB3ZGF0ZV9mbXRbXSA9Ci0rCXsgJyUnLCdhJywnICcsCi0rCSAgJyUnLCdiJywnICcsCi0rCSAgJyUnLCdlJywnICcsCi0rCSAgJyUnLCdIJywnOicsJyUnLCdNJywnOicsJyUnLCdTJywnICcsCi0rCSAgJyUnLCdaJywnICcsCi0rCSAgJyUnLCdZJywwIH07Ci0rICAgICAgdGltZS0+d2RhdGVfZm10ID0gd2RhdGVfZm10OwotKyAgICB9Ci0gfQotIAotIAotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCi1pbmRleCAyZTA1MTMwLi42NTNiNjhjIDEwMDY0NAotLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYwotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYwotQEAgLTU5NSw3ICs1OTUsNyBAQCBnZXRfc3RyaW5nIChzdHJ1Y3QgbGluZXJlYWRlciAqbHIsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCi0gewotICAgaW50IHJldHVybl93aWRlc3RyID0gbHItPnJldHVybl93aWRlc3RyOwotICAgY2hhciAqYnVmOwotLSAgd2NoYXJfdCAqYnVmMiA9IE5VTEw7Ci0rICB1aW50MzJfdCAqYnVmMiA9IE5VTEw7Ci0gICBzaXplX3QgYnVmYWN0OwotICAgc2l6ZV90IGJ1Zm1heCA9IDU2OwotIAotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYwotaW5kZXggZmQ2Y2E1MS4uMzI4ZDM2YyAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYwotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCi1AQCAtMTE0LDYgKzExNCw3IEBAIHZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqKSA9IHByaW50X3ZlcnNpb247Ci0gI2RlZmluZSBPUFRfTElTVF9BUkNISVZFIDMwOQotICNkZWZpbmUgT1BUX0xJVFRMRV9FTkRJQU4gNDAwCi0gI2RlZmluZSBPUFRfQklHX0VORElBTiA0MDEKLSsjZGVmaW5lIE9QVF9VSU5UMzJfQUxJR04gNDAyCi0gCi0gLyogRGVmaW5pdGlvbnMgb2YgYXJndW1lbnRzIGZvciBhcmdwIGZ1bmN0aW9ucy4gICovCi0gc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQotQEAgLTE1MCw2ICsxNTEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9Ci0gICAgIE5fKCJHZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIG91dHB1dCIpIH0sCi0gICB7ICJiaWctZW5kaWFuIiwgT1BUX0JJR19FTkRJQU4sIE5VTEwsIDAsCi0gICAgIE5fKCJHZW5lcmF0ZSBiaWctZW5kaWFuIG91dHB1dCIpIH0sCi0rICB7ICJ1aW50MzItYWxpZ24iLCBPUFRfVUlOVDMyX0FMSUdOLCAiQUxJR05NRU5UIiwgMCwKLSsgICAgTl8oIlNldCB0aGUgdGFyZ2V0J3MgdWludDMyX3QgYWxpZ25tZW50IGluIGJ5dGVzIChkZWZhdWx0IDQpIikgfSwKLSAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9Ci0gfTsKLSAKLUBAIC0yMzksMTIgKzI0MiwxNCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgICAgY3R5cGUgbG9jYWxlLiAgKFAxMDAzLjIgNC4zNS41LjIpICAqLwotICAgc2V0bG9jYWxlIChMQ19DVFlQRSwgIlBPU0lYIik7Ci0gCi0rI2lmbmRlZiBOT19TWVNDT05GCi0gICAvKiBMb29rIHdoZXRoZXIgdGhlIHN5c3RlbSByZWFsbHkgYWxsb3dzIGxvY2FsZSBkZWZpbml0aW9ucy4gIFBPU0lYCi0gICAgICBkZWZpbmVzIGVycm9yIGNvZGUgMyBmb3IgdGhpcyBzaXR1YXRpb24gc28gSSB0aGluayBpdCBtdXN0IGJlCi0gICAgICBhIGZhdGFsIGVycm9yIChzZWUgUDEwMDMuMiA0LjM1LjgpLiAgKi8KLSAgIGlmIChzeXNjb25mIChfU0NfMl9MT0NBTEVERUYpIDwgMCkKLSAgICAgV0lUSF9DVVJfTE9DQUxFIChlcnJvciAoMywgMCwgXygiXAotIEZBVEFMOiBzeXN0ZW0gZG9lcyBub3QgZGVmaW5lIGBfUE9TSVgyX0xPQ0FMRURFRiciKSkpOwotKyNlbmRpZgotIAotICAgLyogUHJvY2VzcyBjaGFybWFwIGZpbGUuICAqLwotICAgY2hhcm1hcCA9IGNoYXJtYXBfcmVhZCAoY2hhcm1hcF9maWxlLCB2ZXJib3NlLCAxLCBiZV9xdWlldCwgMSk7Ci1AQCAtMzM4LDYgKzM0Myw5IEBAIHBhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCi0gICAgIGNhc2UgT1BUX0JJR19FTkRJQU46Ci0gICAgICAgc2V0X2JpZ19lbmRpYW4gKHRydWUpOwotICAgICAgIGJyZWFrOwotKyAgICBjYXNlIE9QVF9VSU5UMzJfQUxJR046Ci0rICAgICAgdWludDMyX2FsaWduX21hc2sgPSBzdHJ0b2wgKGFyZywgTlVMTCwgMCkgLSAxOwotKyAgICAgIGJyZWFrOwotICAgICBjYXNlICdjJzoKLSAgICAgICBmb3JjZV9vdXRwdXQgPSAxOwotICAgICAgIGJyZWFrOwotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCi1pbmRleCAzM2RhNTJlLi5mNzkwYzRjIDEwMDY0NAotLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYwotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYwotQEAgLTU0NCw2ICs1NDQsOSBAQCBjb21wYXJlX2ZpbGVzIChjb25zdCBjaGFyICpmaWxlbmFtZTEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwgc2l6ZV90IHNpemUsCi0gICAgbWFjaGluZSBydW5uaW5nIGxvY2FsZWRlZi4gICovCi0gYm9vbCBzd2FwX2VuZGlhbm5lc3NfcDsKLSAKLSsvKiBUaGUgdGFyZ2V0J3MgdmFsdWUgb2YgX19hbGlnbl9fKHVpbnQzMl90KSAtIDEuICAqLwotK3Vuc2lnbmVkIGludCB1aW50MzJfYWxpZ25fbWFzayA9IDM7Ci0rCi0gLyogV2hlbiBjYWxsZWQgb3V0c2lkZSBhIHN0YXJ0X2xvY2FsZV9zdHJ1Y3R1cmUvZW5kX2xvY2FsZV9zdHJ1Y3R1cmUKLSAgICBvciBzdGFydF9sb2NhbGVfcHJlbHVkZS9lbmRfbG9jYWxlX3ByZWx1ZGUgYmxvY2ssIHJlY29yZCB0aGF0IHRoZQotICAgIG5leHQgYnl0ZSBpbiBGSUxFJ3Mgb2JzdGFjayB3aWxsIGJlIHRoZSBmaXJzdCBieXRlIG9mIGEgbmV3IGVsZW1lbnQuCi1AQCAtNjIxLDcgKzYyNCw3IEBAIGFkZF9sb2NhbGVfc3RyaW5nIChzdHJ1Y3QgbG9jYWxlX2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZykKLSB2b2lkCi0gYWRkX2xvY2FsZV93c3RyaW5nIChzdHJ1Y3QgbG9jYWxlX2ZpbGUgKmZpbGUsIGNvbnN0IHVpbnQzMl90ICpzdHJpbmcpCi0gewotLSAgYWRkX2xvY2FsZV91aW50MzJfYXJyYXkgKGZpbGUsIHN0cmluZywgd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzdHJpbmcpICsgMSk7Ci0rICBhZGRfbG9jYWxlX3VpbnQzMl9hcnJheSAoZmlsZSwgc3RyaW5nLCB3Y3NsZW5fdWludDMyIChzdHJpbmcpICsgMSk7Ci0gfQotIAotIC8qIFJlY29yZCB0aGF0IEZJTEUncyBuZXh0IGVsZW1lbnQgaXMgdGhlIDMyLWJpdCBpbnRlZ2VyIFZBTFVFLiAgKi8KLWRpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAotaW5kZXggNmZjNDQxYi4uMTE4YjE3MSAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKLSsrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKLUBAIC03MSw2ICs3MSw4IEBAIGV4dGVybiB2b2lkIHdyaXRlX2FsbF9jYXRlZ29yaWVzIChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmRlZmluaXRpb25zLAotIAotIGV4dGVybiBib29sIHN3YXBfZW5kaWFubmVzc19wOwotIAotK2V4dGVybiB1bnNpZ25lZCBpbnQgdWludDMyX2FsaWduX21hc2s7Ci0rCi0gLyogQ2hhbmdlIHRoZSBvdXRwdXQgdG8gYmUgYmlnLWVuZGlhbiBpZiBCSUdfRU5ESUFOIGlzIHRydWUgYW5kCi0gICAgbGl0dGxlLWVuZGlhbiBvdGhlcndpc2UuICAqLwotIHN0YXRpYyBpbmxpbmUgdm9pZAotQEAgLTg5LDcgKzkxLDggQEAgbWF5YmVfc3dhcF91aW50MzIgKHVpbnQzMl90IHZhbHVlKQotIH0KLSAKLSAvKiBMaWtld2lzZSwgYnV0IG11bmdlIGFuIGFycmF5IG9mIE4gdWludDMyX3RzIHN0YXJ0aW5nIGF0IEFSUkFZLiAgKi8KLS1zdGF0aWMgaW5saW5lIHZvaWQKLStzdGF0aWMgdm9pZAotK19fYXR0cmlidXRlX18gKCh1bnVzZWQpKQotIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICh1aW50MzJfdCAqYXJyYXksIHNpemVfdCBuKQotIHsKLSAgIGlmIChzd2FwX2VuZGlhbm5lc3NfcCkKLUBAIC05OSw3ICsxMDIsOCBAQCBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAodWludDMyX3QgKmFycmF5LCBzaXplX3QgbikKLSAKLSAvKiBMaWtlIG1heWJlX3N3YXBfdWludDMyX2FycmF5LCBidXQgdGhlIGFycmF5IG9mIE4gZWxlbWVudHMgaXMgYXQKLSAgICB0aGUgZW5kIG9mIE9CU1RBQ0sncyBjdXJyZW50IG9iamVjdC4gICovCi0tc3RhdGljIGlubGluZSB2b2lkCi0rc3RhdGljIHZvaWQKLStfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKLSBtYXliZV9zd2FwX3VpbnQzMl9vYnN0YWNrIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgc2l6ZV90IG4pCi0gewotICAgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKCh1aW50MzJfdCAqKSBvYnN0YWNrX25leHRfZnJlZSAob2JzdGFjaykgLSBuLCBuKTsKLUBAIC0yNzYsNCArMjgwLDU1IEBAIGV4dGVybiB2b2lkIGlkZW50aWZpY2F0aW9uX291dHB1dCAoc3RydWN0IGxvY2FsZWRlZl90ICpsb2NhbGUsCi0gCQkJCSAgIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCi0gCQkJCSAgIGNvbnN0IGNoYXIgKm91dHB1dF9wYXRoKTsKLSAKLStzdGF0aWMgc2l6ZV90IHdjc2xlbl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzdHIpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKLStzdGF0aWMgdWludDMyX3QgKiB3bWVtY3B5X3VpbnQzMiAodWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Ci0rc3RhdGljIHVpbnQzMl90ICogd2NzY2hyX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMsIHVpbnQzMl90IGNoKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Ci0rc3RhdGljIGludCB3Y3NjbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwotK3N0YXRpYyBpbnQgd21lbWNtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwotKwotK3N0YXRpYyBzaXplX3QKLSt3Y3NsZW5fdWludDMyIChjb25zdCB1aW50MzJfdCAqc3RyKQotK3sKLSsgIHNpemVfdCBsZW4gPSAwOwotKyAgd2hpbGUgKHN0cltsZW5dICE9IDApCi0rICAgIGxlbisrOwotKyAgcmV0dXJuIGxlbjsKLSt9Ci0rCi0rc3RhdGljICBpbnQKLSt3bWVtY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKQotK3sKLSsgIHdoaWxlIChuLS0gIT0gMCkKLSsgICAgewotKyAgICAgIGludCBkaWZmID0gKnMxKysgLSAqczIrKzsKLSsgICAgICBpZiAoZGlmZiAhPSAwKQotKwlyZXR1cm4gZGlmZjsKLSsgICAgfQotKyAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbnQKLSt3Y3NjbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMikKLSt7Ci0rICB3aGlsZSAoKnMxICE9IDAgJiYgKnMxID09ICpzMikKLSsgICAgczErKywgczIrKzsKLSsgIHJldHVybiAqczEgLSAqczI7Ci0rfQotKwotK3N0YXRpYyB1aW50MzJfdCAqCi0rd21lbWNweV91aW50MzIgKHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikKLSt7Ci0rICByZXR1cm4gbWVtY3B5IChzMSwgczIsIG4gKiBzaXplb2YgKHVpbnQzMl90KSk7Ci0rfQotKwotK3N0YXRpYyB1aW50MzJfdCAqCi0rd2NzY2hyX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMsIHVpbnQzMl90IGNoKQotK3sKLSsgIGRvCi0rICAgIGlmICgqcyA9PSBjaCkKLSsgICAgICByZXR1cm4gKHVpbnQzMl90ICopIHM7Ci0rICB3aGlsZSAoKnMrKyAhPSAwKTsKLSsgIHJldHVybiAwOwotK30KLSsKLSAjZW5kaWYgLyogbG9jZmlsZS5oICovCi1kaWZmIC0tZ2l0IGEvbG9jYWxlL3NldGxvY2FsZS5jIGIvbG9jYWxlL3NldGxvY2FsZS5jCi1pbmRleCBlYWQwMzBkLi5iNTUxMzMyIDEwMDY0NAotLS0tIGEvbG9jYWxlL3NldGxvY2FsZS5jCi0rKysgYi9sb2NhbGUvc2V0bG9jYWxlLmMKLUBAIC02NCwzNiArNjQsNiBAQCBzdGF0aWMgY2hhciAqY29uc3QgX25sX2N1cnJlbnRfdXNlZFtdID0KLSAjZW5kaWYKLSAKLSAKLS0vKiBEZWZpbmUgYW4gYXJyYXkgb2YgY2F0ZWdvcnkgbmFtZXMgKGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzKS4gICovCi0tY29uc3QgdW5pb24gY2F0bmFtZXN0cl90IF9ubF9jYXRlZ29yeV9uYW1lcyBhdHRyaWJ1dGVfaGlkZGVuID0KLS0gIHsKLS0gICAgewotLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAotLSAgICAgIGNhdGVnb3J5X25hbWUsCi0tI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgotLSN1bmRlZiBERUZJTkVfQ0FURUdPUlkKLS0gICAgfQotLSAgfTsKLS0KLS1jb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX2lkeHNbX19MQ19MQVNUXSBhdHRyaWJ1dGVfaGlkZGVuID0KLS0gIHsKLS0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKLS0gICAgW2NhdGVnb3J5XSA9IG9mZnNldG9mICh1bmlvbiBjYXRuYW1lc3RyX3QsIENBVE5BTUVNRiAoX19MSU5FX18pKSwKLS0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCi0tI3VuZGVmIERFRklORV9DQVRFR09SWQotLSAgfTsKLS0KLS0vKiBBbiBhcnJheSBvZiB0aGVpciBsZW5ndGhzLCBmb3IgY29udmVuaWVuY2UuICAqLwotLWNvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfc2l6ZXNbXSBhdHRyaWJ1dGVfaGlkZGVuID0KLS0gIHsKLS0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKLS0gICAgW2NhdGVnb3J5XSA9IHNpemVvZiAoY2F0ZWdvcnlfbmFtZSkgLSAxLAotLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKLS0jdW5kZWYJREVGSU5FX0NBVEVHT1JZCi0tICAgIFtMQ19BTExdID0gc2l6ZW9mICgiTENfQUxMIikgLSAxCi0tICB9OwotLQotLQotICNpZmRlZiBOTF9DVVJSRU5UX0lORElSRUNUCi0gIyBkZWZpbmUgV0VBS19QT1NUTE9BRChwb3N0bG9hZCkgd2Vha19leHRlcm4gKHBvc3Rsb2FkKQotICNlbHNlCi0tLSAKLTIuNi40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LVdoZW4tZGlzYWJsaW5nLVNTRS1tYWtlLXN1cmUtZnBtYXRoLWlzLW5vdC1zZXQtdG8tdXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1XaGVuLWRpc2FibGluZy1TU0UtbWFrZS1zdXJlLWZwbWF0aC1pcy1ub3Qtc2V0LXRvLXVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjg4OWE5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LVdoZW4tZGlzYWJsaW5nLVNTRS1tYWtlLXN1cmUtZnBtYXRoLWlzLW5vdC1zZXQtdG8tdXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1Gcm9tIDk3ZmU3ZjFiMjNlYTFmMTc1MzM4ODRiOGZhN2Y3ZWI0MDA4N2Q1NTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCA1IEphbiAyMDE2IDE3OjUwOjAwIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0hdIFdoZW4gZGlzYWJsaW5nIFNTRSwgIG1ha2Ugc3VyZSAtZnBtYXRoIGlzIG5vdCBzZXQgdG8gdXNlIFNTRQotIGVpdGhlcgotCi1UaGlzIGZpeGVzIGVycm9ycyB3aGVuIHdlIGluamVjdCBzc2Ugb3B0aW9ucyB0aHJvdWdoIENGTEFHUyBhbmQgbm93Ci10aGF0IHdlIGhhdmUgLVdlcnJvciB0dXJuZWQgb24gYnkgZGVmYXVsdCB0aGlzIHdhcm5pbmcgdHVybnMgdG8gYmVjb21lCi1lcnJvciBvbiB4ODYKLQotZ2NjIC1tMzIgLW1hcmNoPWNvcmUyIC1tdHVuZT1jb3JlMiAtbXNzZTMgLW1mcG1hdGg9c3NlIC14IGMgL2Rldi9udWxsIC1TCi0tbW5vLXNzZSAtbW5vLW1teAotCi1nZW5lcmF0ZXMgd2FybmluZwotL2Rldi9udWxsOjE6MDogd2FybmluZzogU1NFIGluc3RydWN0aW9uIHNldCBkaXNhYmxlZCwgdXNpbmcgMzg3Ci1hcml0aG1ldGljcwotCi13aGVyZSBhcwotCi1nY2MgLW0zMiAtbWFyY2g9Y29yZTIgLW10dW5lPWNvcmUyIC1tc3NlMyAtbWZwbWF0aD1zc2UgLXggYyAvZGV2L251bGwgLVMKLS1tbm8tc3NlIC1tbm8tbW14IC1tZnBtYXRoPTM4NwotCi1HZW5lcmF0ZXMgbm8gd2FybmluZ3MKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotIENoYW5nZUxvZyAgICAgICAgICAgICB8IDUgKysrKysKLSBzeXNkZXBzL2kzODYvTWFrZWZpbGUgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3N5c2RlcHMvaTM4Ni9NYWtlZmlsZSBiL3N5c2RlcHMvaTM4Ni9NYWtlZmlsZQotaW5kZXggMTY4NTEyZi4uNzAxNTNiMyAxMDA2NDQKLS0tLSBhL3N5c2RlcHMvaTM4Ni9NYWtlZmlsZQotKysrIGIvc3lzZGVwcy9pMzg2L01ha2VmaWxlCi1AQCAtODksNyArODksNyBAQCBpZmVxICgkKHN1YmRpciksZWxmKQotICMgdGhlIGZpcnN0IDMgbW0veG1tL3ltbS96bW0gcmVnaXN0ZXJzIGFyZSB1c2VkIHRvIHBhc3MgdmVjdG9yIHBhcmFtZXRlcnMKLSAjIHdoaWNoIG11c3QgYmUgcHJlc2VydmVkLgotIENGTEFHUy0ub3MgKz0gJChpZiAkKGZpbHRlciAkKEBGKSwkKHBhdHN1YnN0ICUsJS5vcywkKGFsbC1ydGxkLXJvdXRpbmVzKSkpLFwKLS0JCSAgIC1tbm8tc3NlIC1tbm8tbW14KQotKwkJICAgLW1uby1zc2UgLW1uby1tbXggLW1mcG1hdGg9Mzg3KQotIAotIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWxkLXNzZS11c2Uub3V0Ci0gJChvYmpwZngpdHN0LWxkLXNzZS11c2Uub3V0OiAuLi9zeXNkZXBzL2kzODYvdHN0LWxkLXNzZS11c2Uuc2ggJChvYmpwZngpbGQuc28KLS0tIAotMi42LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtYnVpbGRfbG9jYWxfc2NvcGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1idWlsZF9sb2NhbF9zY29wZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTBjYjgzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtYnVpbGRfbG9jYWxfc2NvcGUucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSA2ZTRlYzVhM2M1ZmU2M2I2NDU4MDM2ZjE4ZDQzMTI0ZGU0YTdlNzI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxOCBBdWcgMjAxNiAxNDowNzo1OCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBlbGYvZGwtZGVwcy5jOiBNYWtlIF9kbF9idWlsZF9sb2NhbF9zY29wZSBicmVhZHRoIGZpcnN0CisKK0FjY29yZGluZyB0byB0aGUgRUxGIHNwZWNpZmljYXRpb246CisKK1doZW4gcmVzb2x2aW5nIHN5bWJvbGljIHJlZmVyZW5jZXMsIHRoZSBkeW5hbWljIGxpbmtlciBleGFtaW5lcyB0aGUgc3ltYm9sCit0YWJsZXMgd2l0aCBhIGJyZWFkdGgtZmlyc3Qgc2VhcmNoLgorCitUaGlzIGZ1bmN0aW9uIHdhcyB1c2luZyBhIGRlcHRoIGZpcnN0IHNlYXJjaC4gIEJ5IGRvaW5nIHNvIHRoZSBjb25mbGljdAorcmVzb2x1dGlvbiByZXBvcnRlZCB0byB0aGUgcHJlbGlua2VyICh3aGVuIExEX1RSQUNFX1BSRUxJTktJTkc9MSBpcyBzZXQpCit3YXMgaW5jb3JyZWN0LiAgVGhpcyBjYXVzZWQgcHJvYmxlbXMgd2hlbiB0aGVpciB3ZXJlIHZhcmlvdXMgY2lyY3VsYXIKK2RlcGVuZGVuY2llcyBiZXR3ZWVuIGxpYnJhcmllcy4gIFRoZSBwcm9ibGVtIHVzdWFsbHkgbWFuaWZlc3RlZCBpdHNlbGYgYnkKK3RoZSB3cm9uZyBJRlVOQyBiZWluZyBleGVjdXRlZC4KKworW0JaIyAyMDQ4OF0KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2xpYmMtYWxwaGFdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGVsZi9kbC1kZXBzLmMgfCAxNCArKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWRlcHMuYyBiL2VsZi9kbC1kZXBzLmMKK2luZGV4IDZhODI5ODcuLmZjMzdjODcgMTAwNjQ0CistLS0gYS9lbGYvZGwtZGVwcy5jCisrKysgYi9lbGYvZGwtZGVwcy5jCitAQCAtNzMsMTMgKzczLDE5IEBAIF9kbF9idWlsZF9sb2NhbF9zY29wZSAoc3RydWN0IGxpbmtfbWFwICoqbGlzdCwgc3RydWN0IGxpbmtfbWFwICptYXApCisgeworICAgc3RydWN0IGxpbmtfbWFwICoqcCA9IGxpc3Q7CisgICBzdHJ1Y3QgbGlua19tYXAgKipxOworKyAgc3RydWN0IGxpbmtfbWFwICoqcjsKKyAKKyAgICpwKysgPSBtYXA7CisgICBtYXAtPmxfcmVzZXJ2ZWQgPSAxOworLSAgaWYgKG1hcC0+bF9pbml0ZmluaSkKKy0gICAgZm9yIChxID0gbWFwLT5sX2luaXRmaW5pICsgMTsgKnE7ICsrcSkKKy0gICAgICBpZiAoISAoKnEpLT5sX3Jlc2VydmVkKQorLQlwICs9IF9kbF9idWlsZF9sb2NhbF9zY29wZSAocCwgKnEpOworKworKyAgZm9yIChyID0gbGlzdDsgciA8IHA7ICsrcikKKysgICAgaWYgKCgqciktPmxfaW5pdGZpbmkpCisrICAgICAgZm9yIChxID0gKCpyKS0+bF9pbml0ZmluaSArIDE7ICpxOyArK3EpCisrCWlmICghICgqcSktPmxfcmVzZXJ2ZWQpCisrCSAgeworKwkgICAgKnArKyA9ICpxOworKwkgICAgKCpxKS0+bF9yZXNlcnZlZCA9IDE7CisrCSAgfQorICAgcmV0dXJuIHAgLSBsaXN0OworIH0KKyAKKy0tIAorMi41LjUKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmNDA2Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi1yZXF1aXJlIGdsaWJjLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFUzttZDU9ZTlhNTU4ZTI0M2IzNmQzMjA5ZjM4MGRlYjM5NGIyMTMgXAotICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgIGZpbGU6Ly9wb3NpeC9yeHNwZW5jZXIvQ09QWVJJR0hUO21kNT1kYzU0ODViYjM5NGExM2IyMzMyZWMxYzc4NWY1ZDgzYSBcCi0gICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgotCi1ERVBFTkRTICs9ICJncGVyZi1uYXRpdmUiCi0KLVNSQ1JFViA/PSAiZTc0MjkyOGMxNTkyYjQzZGI2ODA5ZGI0ZjM5ZTY3YmUxNTFjZGQyNyIKLQotU1JDQlJBTkNIID89ICJyZWxlYXNlLyR7UFZ9L21hc3RlciIKLQotR0xJQkNfR0lUX1VSSSA/PSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2dsaWJjLmdpdCIKLVVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKSopIgotCi1TUkNfVVJJID0gIiR7R0xJQkNfR0lUX1VSSX07YnJhbmNoPSR7U1JDQlJBTkNIfTtuYW1lPWdsaWJjIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE1LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTYtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE3LVJlbW92ZS1iYXNoLWRlcGVuZGVuY3ktZm9yLW5zY2QtaW5pdC1zY3JpcHQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjUtZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjYtV2hlbi1kaXNhYmxpbmctU1NFLW1ha2Utc3VyZS1mcG1hdGgtaXMtbm90LXNldC10by11cy5wYXRjaCBcCi0iCi0KLVNSQ19VUkkgKz0gIlwKLSAgICAgICAgICAgZmlsZTovL2V0Yy9sZC5zby5jb25mIFwKLSAgICAgICAgICAgZmlsZTovL2dlbmVyYXRlLXN1cHBvcnRlZC5tayBcCi0iCi0KLVNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICJcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LW5hdGl2ZXNkay1nbGliYy1BbGxvdy02NC1iaXQtYXRvbWljcy1mb3IteDg2LnBhdGNoIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLUIgPSAiJHtXT1JLRElSfS9idWlsZC0ke1RBUkdFVF9TWVN9IgotCi1QQUNLQUdFU19EWU5BTUlDID0gIiIKLQotIyB0aGUgLWlzeXN0ZW0gaW4gYml0YmFrZS5jb25mIHNjcmV3cyB1cCBnbGliYyBkb19zdGFnZQotQlVJTERfQ1BQRkxBR1MgPSAiLUkke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCi1UQVJHRVRfQ1BQRkxBR1MgPSAiLUkke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9IgotCi1HTElCQ19CUk9LRU5fTE9DQUxFUyA9ICIgX0VSIF9FVCBzb19FVCB5bl9FUiBzaWRfRVQgdHJfVFIgbW5fTU4gZ2V6X0VUIGdlel9FUiBibl9CRCB0ZV9JTiBlc19DUi5JU08tODg1OS0xIgotCi0jCi0jIFdlIHdpbGwgc2tpcCBwYXJzaW5nIGdsaWJjIHdoZW4gdGFyZ2V0IHN5c3RlbSBDIGxpYnJhcnkgc2VsZWN0aW9uIGlzIG5vdCBnbGliYwotIyB0aGlzIGhlbHBzIGluIGVhc2luZyBvdXQgcGFyc2luZyBmb3Igbm9uLWdsaWJjIHN5c3RlbSBsaWJyYXJpZXMKLSMKLUNPTVBBVElCTEVfSE9TVF9saWJjLW11c2xfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCi1DT01QQVRJQkxFX0hPU1RfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCi0KLUVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1rZXJuZWw9JHtPTERFU1RfS0VSTkVMfSBcCi0gICAgICAgICAgICAgICAgLS13aXRob3V0LWN2cyAtLWRpc2FibGUtcHJvZmlsZSBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlYnVnIC0td2l0aG91dC1nZCBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtY2xvY2FsZT1nbnUgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWFkZC1vbnMgXAotICAgICAgICAgICAgICAgIC0td2l0aC1oZWFkZXJzPSR7U1RBR0lOR19JTkNESVJ9IFwKLSAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc2VsaW51eCBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtb2Jzb2xldGUtcnBjIFwKLSAgICAgICAgICAgICAgICAke0dMSUJDX0VYVFJBX09FQ09ORn0iCi0KLUVYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2xpYmNfZnB1X3NldHRpbmcoYmIsIGQpfSIKLUVYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWluZXQtYW5sJywgJy0tZW5hYmxlLW5zY2QnLCAnLS1kaXNhYmxlLW5zY2QnLCBkKX0iCi0KLQotZG9fcGF0Y2hfYXBwZW5kKCkgewotICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZml4X3JlYWRsaWJfYycsIGQpCi19Ci0KLWRvX2ZpeF9yZWFkbGliX2MgKCkgewotCXNlZCAtaSAtZSAncyNPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMjJHtFR0xJQkNfS05PV05fSU5URVJQUkVURVJfTkFNRVN9IycgJHtTfS9lbGYvcmVhZGxpYi5jCi19Ci0KLWRvX2NvbmZpZ3VyZSAoKSB7Ci0jIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhlIGF1dG9jb25mL2F1dG9tYWtlL2FjbG9jYWwvYXV0b2hlYWRlcgotIyBjYWxscyBmb3Igbm93Ci0jIGRvbid0IHBhc3MgQ1BQRkxBR1MgaW50byBjb25maWd1cmUsIHNpbmNlIGl0IHVwc2V0cyB0aGUga2VybmVsLWhlYWRlcnMKLSMgdmVyc2lvbiBjaGVjayBhbmQgZG9lc24ndCByZWFsbHkgaGVscCB3aXRoIGFueXRoaW5nCi0gICAgICAgIChjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCi0gICAgICAgIGZpbmQgJHtTfSAtbmFtZSAiY29uZmlndXJlIiB8IHhhcmdzIHRvdWNoCi0gICAgICAgIENQUEZMQUdTPSIiIG9lX3J1bmNvbmYKLX0KLQotcnBjc3ZjID0gImJvb3RwYXJhbV9wcm90LnggbmxtX3Byb3QueCByc3RhdC54IFwKLQkgIHlwcGFzc3dkLngga2xtX3Byb3QueCByZXgueCBzbV9pbnRlci54IG1vdW50LnggXAotCSAgcnVzZXJzLnggc3ByYXkueCBuZnNfcHJvdC54IHJxdW90YS54IGtleV9wcm90LngiCi0KLWRvX2NvbXBpbGUgKCkgewotCSMgLVdsLC1ycGF0aC1saW5rIDxzdGFnaW5nPi9saWIgaW4gTERGTEFHUyBjYW4gY2F1c2UgYnJlYWthZ2UgaWYgYW5vdGhlciBnbGliYyBpcyBpbiBzdGFnaW5nCi0JdW5zZXQgTERGTEFHUwotCWJhc2VfZG9fY29tcGlsZQotCSgKLQkJY2QgJHtTfS9zdW5ycGMvcnBjc3ZjCi0JCWZvciByIGluICR7cnBjc3ZjfTsgZG8KLQkJCWg9YGVjaG8gJHJ8c2VkIC1lJ3MsXC54JCwuaCwnYAotCQkJcm0gLWYgJGgKLQkJCSR7Qn0vc3VucnBjL2Nyb3NzLXJwY2dlbiAtaCAkciAtbyAkaCB8fCBiYndhcm4gIiR7UE59OiB1bmFibGUgdG8gZ2VuZXJhdGUgaGVhZGVyIGZvciAkciIKLQkJZG9uZQotCSkKLQllY2hvICJBZGp1c3QgbGRkIHNjcmlwdCIKLQlpZiBbIC1uICIke1JUTERMSVNUfSIgXQotCXRoZW4KLQkJcHJldnJ0bGQ9YGNhdCAke0J9L2VsZi9sZGQgfCBncmVwICJeUlRMRExJU1Q9IiB8IHNlZCAncyNeUlRMRExJU1Q9Ilw/XChbXiJdKlwpIlw/JCNcMSMnYAotCQlpZiBbICIke3ByZXZydGxkfSIgIT0gIiR7UlRMRExJU1R9IiBdCi0JCXRoZW4KLQkJCXNlZCAtaSAke0J9L2VsZi9sZGQgLWUgInMjXlJUTERMSVNUPS4qXCQjUlRMRExJU1Q9XCIke3ByZXZydGxkfSAke1JUTERMSVNUfVwiIyIKLQkJZmkKLQlmaQotCi19Ci0KLXJlcXVpcmUgZ2xpYmMtcGFja2FnZS5pbmMKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTIxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yNC5iYgpAQCAtMCwwICsxLDE0MCBAQAorcmVxdWlyZSBnbGliYy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworREVQRU5EUyArPSAiZ3BlcmYtbmF0aXZlIgorCitTUkNSRVYgPz0gImVhMjM4MTVhNzk1ZjcyMDM1MjYyOTUzZGFkNWJlYjAzZTA5YzE3ZGQiCisKK1NSQ0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCisKK0dMSUJDX0dJVF9VUkkgPz0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9nbGliYy5naXQiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj5cZCtcLlxkKyhcLlxkKykqKSIKKworU1JDX1VSSSA9ICIke0dMSUJDX0dJVF9VUkl9O2JyYW5jaD0ke1NSQ0JSQU5DSH07bmFtZT1nbGliYyBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1SZW1vdmUtYmFzaC1kZXBlbmRlbmN5LWZvci1uc2NkLWluaXQtc2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIzLWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtY3Jvc3MtbG9jYWxlLWdlbmVyYXRpb24tc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LURlZmluZS1EVU1NWV9MT0NBTEVfVC1pZi1ub3QtZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWJ1aWxkX2xvY2FsX3Njb3BlLnBhdGNoIFwKKyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICBmaWxlOi8vZXRjL2xkLnNvLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vZ2VuZXJhdGUtc3VwcG9ydGVkLm1rIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbG9jYWxlLWZpeC1oYXJkLWNvZGVkLXJlZmVyZW5jZS10by1nY2MtRS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtbmF0aXZlc2RrLWdsaWJjLUFsbG93LTY0LWJpdC1hdG9taWNzLWZvci14ODYucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorQiA9ICIke1dPUktESVJ9L2J1aWxkLSR7VEFSR0VUX1NZU30iCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorCisjIHRoZSAtaXN5c3RlbSBpbiBiaXRiYWtlLmNvbmYgc2NyZXdzIHVwIGdsaWJjIGRvX3N0YWdlCitCVUlMRF9DUFBGTEFHUyA9ICItSSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKK1RBUkdFVF9DUFBGTEFHUyA9ICItSSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0iCisKK0dMSUJDX0JST0tFTl9MT0NBTEVTID0gIiIKKyMKKyMgV2Ugd2lsbCBza2lwIHBhcnNpbmcgZ2xpYmMgd2hlbiB0YXJnZXQgc3lzdGVtIEMgbGlicmFyeSBzZWxlY3Rpb24gaXMgbm90IGdsaWJjCisjIHRoaXMgaGVscHMgaW4gZWFzaW5nIG91dCBwYXJzaW5nIGZvciBub24tZ2xpYmMgc3lzdGVtIGxpYnJhcmllcworIworQ09NUEFUSUJMRV9IT1NUX2xpYmMtbXVzbF9jbGFzcy10YXJnZXQgPSAibnVsbCIKK0NPTVBBVElCTEVfSE9TVF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAibnVsbCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWtlcm5lbD0ke09MREVTVF9LRVJORUx9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIC0tZGlzYWJsZS1wcm9maWxlIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGVidWcgLS13aXRob3V0LWdkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jbG9jYWxlPWdudSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtYWRkLW9ucyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWhlYWRlcnM9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zZWxpbnV4IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1vYnNvbGV0ZS1ycGMgXAorICAgICAgICAgICAgICAgICR7R0xJQkNfRVhUUkFfT0VDT05GfSIKKworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfbGliY19mcHVfc2V0dGluZyhiYiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaW5ldC1hbmwnLCAnLS1lbmFibGUtbnNjZCcsICctLWRpc2FibGUtbnNjZCcsIGQpfSIKKworCitkb19wYXRjaF9hcHBlbmQoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19maXhfcmVhZGxpYl9jJywgZCkKK30KKworZG9fZml4X3JlYWRsaWJfYyAoKSB7CisJc2VkIC1pIC1lICdzI09FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyMke0VHTElCQ19LTk9XTl9JTlRFUlBSRVRFUl9OQU1FU30jJyAke1N9L2VsZi9yZWFkbGliLmMKK30KKworZG9fY29uZmlndXJlICgpIHsKKyMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGUgYXV0b2NvbmYvYXV0b21ha2UvYWNsb2NhbC9hdXRvaGVhZGVyCisjIGNhbGxzIGZvciBub3cKKyMgZG9uJ3QgcGFzcyBDUFBGTEFHUyBpbnRvIGNvbmZpZ3VyZSwgc2luY2UgaXQgdXBzZXRzIHRoZSBrZXJuZWwtaGVhZGVycworIyB2ZXJzaW9uIGNoZWNrIGFuZCBkb2Vzbid0IHJlYWxseSBoZWxwIHdpdGggYW55dGhpbmcKKyAgICAgICAgKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKyAgICAgICAgZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKKyAgICAgICAgQ1BQRkxBR1M9IiIgb2VfcnVuY29uZgorfQorCitycGNzdmMgPSAiYm9vdHBhcmFtX3Byb3QueCBubG1fcHJvdC54IHJzdGF0LnggXAorCSAgeXBwYXNzd2QueCBrbG1fcHJvdC54IHJleC54IHNtX2ludGVyLnggbW91bnQueCBcCisJICBydXNlcnMueCBzcHJheS54IG5mc19wcm90LnggcnF1b3RhLngga2V5X3Byb3QueCIKKworZG9fY29tcGlsZSAoKSB7CisJIyAtV2wsLXJwYXRoLWxpbmsgPHN0YWdpbmc+L2xpYiBpbiBMREZMQUdTIGNhbiBjYXVzZSBicmVha2FnZSBpZiBhbm90aGVyIGdsaWJjIGlzIGluIHN0YWdpbmcKKwl1bnNldCBMREZMQUdTCisJYmFzZV9kb19jb21waWxlCisJKAorCQljZCAke1N9L3N1bnJwYy9ycGNzdmMKKwkJZm9yIHIgaW4gJHtycGNzdmN9OyBkbworCQkJaD1gZWNobyAkcnxzZWQgLWUncyxcLngkLC5oLCdgCisJCQlybSAtZiAkaAorCQkJJHtCfS9zdW5ycGMvY3Jvc3MtcnBjZ2VuIC1oICRyIC1vICRoIHx8IGJid2FybiAiJHtQTn06IHVuYWJsZSB0byBnZW5lcmF0ZSBoZWFkZXIgZm9yICRyIgorCQlkb25lCisJKQorCWVjaG8gIkFkanVzdCBsZGQgc2NyaXB0IgorCWlmIFsgLW4gIiR7UlRMRExJU1R9IiBdCisJdGhlbgorCQlwcmV2cnRsZD1gY2F0ICR7Qn0vZWxmL2xkZCB8IGdyZXAgIl5SVExETElTVD0iIHwgc2VkICdzI15SVExETElTVD0iXD9cKFteIl0qXCkiXD8kI1wxIydgCisJCWlmIFsgIiR7cHJldnJ0bGR9IiAhPSAiJHtSVExETElTVH0iIF0KKwkJdGhlbgorCQkJc2VkIC1pICR7Qn0vZWxmL2xkZCAtZSAicyNeUlRMRExJU1Q9LipcJCNSVExETElTVD1cIiR7cHJldnJ0bGR9ICR7UlRMRExJU1R9XCIjIgorCQlmaQorCWZpCisKK30KKworIyBVc2UgdGhlIGhvc3QgbG9jYWxlIGFyY2hpdmUgd2hlbiBidWlsdCBmb3IgbmF0aXZlc2RrIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0bworIyBzaGlwIGEgY29tcGxldGUgKDEwME1CKSBsb2NhbGUgc2V0LgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBlY2hvICJjb21wbG9jYWxlZGlyPS91c3IvbGliL2xvY2FsZSIgPj4gJHtTfS9jb25maWdwYXJtcworfQorCityZXF1aXJlIGdsaWJjLXBhY2thZ2UuaW5jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuOC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuOC4yLmJiCmluZGV4IDczMmIyOTUuLjlkZTAxZjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9pZnVwZG93bl8wLjguMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vaWZ1cGRvd25fMC44LjIuYmIKQEAgLTEzLDggKzEzLDYgQEAKIAkgICIKIFNSQ1JFViA9ICIwNWVhMmZkNGY0OWJiMTIwMWFlZWYyYTQyZWZiY2ZmOGYzMzYxMTJmIgogCi1FWFRSQV9PRU1BS0UgPSAiIgotCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzE0LjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzE0LjAuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjYjkyMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xNC4wLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotU1VNTUFSWSA9ICJBbiBpbWFnZSBjb250YWluaW5nIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmIgotREVTQ1JJUFRJT04gPSAiQW4gaW1hZ2UgY29udGFpbmluZyB0aGUgYnVpbGQgc3lzdGVtIHRoYXQgeW91IGNhbiBib290IGFuZCBydW4gdXNpbmcgZWl0aGVyIFZNd2FyZSBQbGF5ZXIgb3IgVk13YXJlIFdvcmtzdGF0aW9uLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uL2J1aWxkLWFwcGxpYW5jZSIKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKLQotSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IHBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCBrZXJuZWwtZGV2IGtlcm5lbC1kZXZzcmMgIgotCi1JTUFHRV9GRUFUVVJFUyArPSAieDExLWJhc2UgcGFja2FnZS1tYW5hZ2VtZW50IHNwbGFzaCIKLQotIyBFbnN1cmUgdGhlcmUncyBlbm91Z2ggc3BhY2UgdG8gZG8gYSBjb3JlLWltYWdlLXNhdG8gYnVpbGQsIHdpdGggcm1fd29yayBlbmFibGVkCi1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiNDE5NDMwNDAiCi0KLSMgRG8gYSBxdWlldCBib290IHdpdGggbGltaXRlZCBjb25zb2xlIG1lc3NhZ2VzCi1BUFBFTkQgKz0gInJvb3Rmc3R5cGU9ZXh0NCBxdWlldCIKLQotREVQRU5EUyA9ICJ6aXAtbmF0aXZlIgotSU1BR0VfRlNUWVBFUyA9ICJ2bWRrIgotCi1pbmhlcml0IGNvcmUtaW1hZ2UgbW9kdWxlLWJhc2UKLQotU1JDUkVWID89ICI1Zjg0ZDY1NDVlNmQ3YTJiZThlNjAzYTFmNGIxYWZhZTBkYWQwYTliIgotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5O2JyYW5jaD1rcm9nb3RoIFwKLSAgICAgICAgICAgZmlsZTovL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXggXAotICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYgXAotICAgICAgICAgICBmaWxlOi8vUkVBRE1FX1ZpcnR1YWxCb3hfR3Vlc3RfQWRkaXRpb25zLnR4dCBcCi0gICAgICAgICAgIgotQkFfSU5DTFVERV9TT1VSQ0VTID8/PSAiMCIKLQotSU1BR0VfQ01EX2V4dDRfYXBwZW5kICgpIHsKLQkjIFdlIGRvbid0IG5lZWQgdG8gcmVzZXJ2ZSBtdWNoIHNwYWNlIGZvciByb290LCAwLjUlIGlzIG1vcmUgdGhhbiBlbm91Z2gKLQl0dW5lMmZzIC1tIDAuNSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmV4dDQKLX0KLQotZmFrZXJvb3QgZG9fcG9wdWxhdGVfcG9reV9zcmMgKCkgewotCSMgQmVjYXVzZSBmZXRjaDIncyBnaXQncyB1bnBhY2sgdXNlcyAtcyBjbG9uZWZsYWcsIHRoZSB1bnBhY2tlZCBnaXQgcmVwbwotCSMgd2lsbCBiZWNvbWUgaW52YWxpZCBpbiB0aGUgdGFyZ2V0LgotCXJtIC1yZiAke1dPUktESVJ9L2dpdC8uZ2l0Ci0Jcm0gLWYgJHtXT1JLRElSfS9naXQvLmdpdGlnbm9yZQotCi0JY3AgLVIgJHtXT1JLRElSfS9naXQgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5Ci0KLQlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvY29uZgotCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMKLQlpZiBbICR7QkFfSU5DTFVERV9TT1VSQ0VTfSAhPSAwIF07IHRoZW4KLQkJY3AgLVJwTCAke0RMX0RJUn0vKiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzLwotCQkjIFJlbW92ZSB0aGUgZ2l0Ml8qIHRhcmJhbGxzIC0tIHRoaXMgaXMgb2sgc2luY2Ugd2Ugc3RpbGwgaGF2ZSB0aGUgZ2l0Mi8uCi0JCXJtIC1yZiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzL2dpdDJfKgotCWZpCi0KLQkjIFBsYWNlIHRoZSBSRUFETUVfVmlydHVhbEJveF9HdWVzdF9BZGRpdGlvbnMgZmlsZSBpbiBidWlsZGVycyBob21lIGZvbGRlci4KLQljcCAke1dPUktESVJ9L1JFQURNRV9WaXJ0dWFsQm94X0d1ZXN0X0FkZGl0aW9ucy50eHQgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8KLQotCSMgQ3JlYXRlIGEgc3ltbGluaywgbmVlZGVkIGZvciBvdXQtb2YtdHJlZSBrZXJuZWwgbW9kdWxlcyBidWlsZAotCWxuIC1zbnIgJHtJTUFHRV9ST09URlN9L3Vzci9zcmMva2VybmVsICR7SU1BR0VfUk9PVEZTfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9idWlsZAotCi0JZWNobyAiL3Vzci9iaW4iID4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL3BzZXVkb2RvbmUKLQllY2hvICJJTkhFUklUICs9IFwicm1fd29ya1wiIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvY29uZi9hdXRvLmNvbmYKLQlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3BzZXVkbwotCWVjaG8gImV4cG9ydCBQU0VVRE9fUFJFRklYPS91c3IiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYwotCWVjaG8gImV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUj0vaG9tZS9idWlsZGVyL3BzZXVkbyIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCi0JZWNobyAiZXhwb3J0IFBTRVVET19MSUJESVI9L3Vzci9saWIvcHNldWRvL2xpYjY0IiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKLQotCSMgQWxzbyBzYXZlIChmb3IgcmVmZXJlbmNlIG9ubHkpIHRoZSBhY3R1YWwgU1JDUkVWIHVzZWQgdG8gY3JlYXRlIHRoaXMgaW1hZ2UKLQllY2hvICJleHBvcnQgQkFfU1JDUkVWPSR7U1JDUkVWfSIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCi0JZWNobyAiIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKLQllY2hvICIjIElmIHdvcmtpbmcgYmVoaW5kIGEgcHJveHkgYW5kIHVzaW5nIHRoZSBwcm92aWRlZCBvZS1naXQtcHJveHkgc2NyaXB0IiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKLQllY2hvICIjIHlvdSBuZWVkIHRvIHNldCBBTExfUFJPWFkgYmFzZWQgb24geW91ciBwcm94eSBzZXR0aW5ncy4iID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYwotCWVjaG8gIiMgRXhhbXBsZSBBTExfUFJPWFkgdmFsdWVzOiIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCi0JZWNobyAiIyBleHBvcnQgQUxMX1BST1hZPWh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb206ODA4MCIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCi0JZWNobyAiIyBleHBvcnQgQUxMX1BST1hZPXNvY2tzOi8vc29ja3MuZXhhbXBsZS5jb206MTA4MCIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCi0KLQljaG93biBidWlsZGVyLmJ1aWxkZXIgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wc2V1ZG8KLQotCWNob3duIC1SIGJ1aWxkZXIuYnVpbGRlciAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kKLQljaG1vZCAtUiB1ZytydyAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kKLQotCSMgQXNzdW1lIHdlIHdpbGwgbmVlZCBDRFJPTSB0byBpbnN0YWxsIGd1ZXN0IGFkZGl0aW9ucwotCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9tZWRpYS9jZHJvbQotCi0JIyBBbGxvdyBidWlsZGVyIHRvIHVzZSBzdWRvCi0JZWNobyAiYnVpbGRlciBBTEw9KEFMTCkgTk9QQVNTV0Q6IEFMTCIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9zdWRvZXJzCi0KLQkjIExvYWQgdGFwL3R1biBhdCBzdGFydHVwCi0JbG4gLXNyICR7SU1BR0VfUk9PVEZTfS91c3Ivc2Jpbi9pcHRhYmxlcyAke0lNQUdFX1JPT1RGU30vc2Jpbi9pcHRhYmxlcwotCWVjaG8gInR1biIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9tb2R1bGVzCi0KLQkjIFVzZSBDbGVhcmxvb2tzIEdUSysgdGhlbWUKLQlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAKLQllY2hvICdndGstdGhlbWUtbmFtZSA9ICJDbGVhcmxvb2tzIicgPiAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAvZ3RrcmMKLX0KLQotSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJkb19wb3B1bGF0ZV9wb2t5X3NyYzsgIgotCi1hZGR0YXNrIHJvb3RmcyBhZnRlciBkb191bnBhY2sKLQotcHl0aG9uICgpIHsKLQkjIEVuc3VyZSB3ZSBydW4gdGhlc2UgdXN1YWxseSBub2V4ZWMgdGFza3MKLQlkLmRlbFZhckZsYWcoImRvX2ZldGNoIiwgIm5vZXhlYyIpCi0JZC5kZWxWYXJGbGFnKCJkb191bnBhY2siLCAibm9leGVjIikKLX0KLQotY3JlYXRlX2J1bmRsZV9maWxlcyAoKSB7Ci0JY2QgJHtXT1JLRElSfQotCW1rZGlyIC1wIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQotCWNwICoudm14KiBZb2N0b19CdWlsZF9BcHBsaWFuY2UKLQlsbiAtc2YgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnZtZGsgWW9jdG9fQnVpbGRfQXBwbGlhbmNlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bWRrCi0JemlwIC1yICR7REVQTE9ZX0RJUl9JTUFHRX0vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLSR7REFURVRJTUV9LnppcCBZb2N0b19CdWlsZF9BcHBsaWFuY2UKLQlsbiAtc2YgWW9jdG9fQnVpbGRfQXBwbGlhbmNlLSR7REFURVRJTUV9LnppcCAke0RFUExPWV9ESVJfSU1BR0V9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS56aXAgCi19Ci1jcmVhdGVfYnVuZGxlX2ZpbGVzW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKLQotcHl0aG9uIGRvX2J1bmRsZV9maWxlcygpIHsKLSAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV9idW5kbGVfZmlsZXMnLCBkKQotfQotCi1hZGR0YXNrIGJ1bmRsZV9maWxlcyBhZnRlciBkb192bWltZyBiZWZvcmUgZG9fYnVpbGQKLWRvX2J1bmRsZV9maWxlc1tub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTUuMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTUuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWQwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xNS4wLjAuYmIKQEAgLTAsMCArMSwxMTcgQEAKK1NVTU1BUlkgPSAiQW4gaW1hZ2UgY29udGFpbmluZyB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiIKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IHlvdSBjYW4gYm9vdCBhbmQgcnVuIHVzaW5nIGVpdGhlciBWTXdhcmUgUGxheWVyIG9yIFZNd2FyZSBXb3Jrc3RhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbi9idWlsZC1hcHBsaWFuY2UiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCBwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgXAorICAgICAgICAgICAgICAgICBrZXJuZWwtZGV2IGtlcm5lbC1kZXZzcmMgY29ubm1hbiBjb25ubWFuLXBsdWdpbi1ldGhlcm5ldCBkaGNwLWNsaWVudCIKKworSU1BR0VfRkVBVFVSRVMgKz0gIngxMS1iYXNlIHBhY2thZ2UtbWFuYWdlbWVudCBzcGxhc2giCisKKyMgRW5zdXJlIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIHRvIGRvIGEgY29yZS1pbWFnZS1zYXRvIGJ1aWxkLCB3aXRoIHJtX3dvcmsgZW5hYmxlZAorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID0gIjQxOTQzMDQwIgorCisjIERvIGEgcXVpZXQgYm9vdCB3aXRoIGxpbWl0ZWQgY29uc29sZSBtZXNzYWdlcworQVBQRU5EICs9ICJyb290ZnN0eXBlPWV4dDQgcXVpZXQiCisKK0RFUEVORFMgPSAiemlwLW5hdGl2ZSIKK0lNQUdFX0ZTVFlQRVMgPSAidm1kayIKKworaW5oZXJpdCBjb3JlLWltYWdlIG1vZHVsZS1iYXNlCisKK1NSQ1JFViA/PSAiNzQ2YzY4MWJlNGM3NDRkMGM2YzJkMzIyNWI5NDU1MDI0MTU0NmY2NSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTticmFuY2g9bW9ydHkgXAorICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteCBcCisgICAgICAgICAgIGZpbGU6Ly9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBcCisgICAgICAgICAgIGZpbGU6Ly9SRUFETUVfVmlydHVhbEJveF9HdWVzdF9BZGRpdGlvbnMudHh0IFwKKyAgICAgICAgICAiCitCQV9JTkNMVURFX1NPVVJDRVMgPz89ICIwIgorCitJTUFHRV9DTURfZXh0NF9hcHBlbmQgKCkgeworCSMgV2UgZG9uJ3QgbmVlZCB0byByZXNlcnZlIG11Y2ggc3BhY2UgZm9yIHJvb3QsIDAuNSUgaXMgbW9yZSB0aGFuIGVub3VnaAorCXR1bmUyZnMgLW0gMC41ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5leHQ0Cit9CisKK2Zha2Vyb290IGRvX3BvcHVsYXRlX3Bva3lfc3JjICgpIHsKKwkjIEJlY2F1c2UgZmV0Y2gyJ3MgZ2l0J3MgdW5wYWNrIHVzZXMgLXMgY2xvbmVmbGFnLCB0aGUgdW5wYWNrZWQgZ2l0IHJlcG8KKwkjIHdpbGwgYmVjb21lIGludmFsaWQgaW4gdGhlIHRhcmdldC4KKwlybSAtcmYgJHtXT1JLRElSfS9naXQvLmdpdAorCXJtIC1mICR7V09SS0RJUn0vZ2l0Ly5naXRpZ25vcmUKKworCWNwIC1SICR7V09SS0RJUn0vZ2l0ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reQorCisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2NvbmYKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzCisJaWYgWyAke0JBX0lOQ0xVREVfU09VUkNFU30gIT0gMCBdOyB0aGVuCisJCWNwIC1ScEwgJHtETF9ESVJ9LyogJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2Rvd25sb2Fkcy8KKwkJIyBSZW1vdmUgdGhlIGdpdDJfKiB0YXJiYWxscyAtLSB0aGlzIGlzIG9rIHNpbmNlIHdlIHN0aWxsIGhhdmUgdGhlIGdpdDIvLgorCQlybSAtcmYgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2Rvd25sb2Fkcy9naXQyXyoKKwlmaQorCisJIyBQbGFjZSB0aGUgUkVBRE1FX1ZpcnR1YWxCb3hfR3Vlc3RfQWRkaXRpb25zIGZpbGUgaW4gYnVpbGRlcnMgaG9tZSBmb2xkZXIuCisJY3AgJHtXT1JLRElSfS9SRUFETUVfVmlydHVhbEJveF9HdWVzdF9BZGRpdGlvbnMudHh0ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvCisKKwkjIENyZWF0ZSBhIHN5bWxpbmssIG5lZWRlZCBmb3Igb3V0LW9mLXRyZWUga2VybmVsIG1vZHVsZXMgYnVpbGQKKwlsbnIgJHtJTUFHRV9ST09URlN9JHtLRVJORUxfU1JDX1BBVEh9ICR7SU1BR0VfUk9PVEZTfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9idWlsZAorCisJZWNobyAiSU5IRVJJVCArPSBcInJtX3dvcmtcIiIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2NvbmYvYXV0by5jb25mCisJZWNobyAiZXhwb3J0IExDX0FMTD1lbl9VUy51dGY4IiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKworCSMgQWxzbyBzYXZlIChmb3IgcmVmZXJlbmNlIG9ubHkpIHRoZSBhY3R1YWwgU1JDUkVWIHVzZWQgdG8gY3JlYXRlIHRoaXMgaW1hZ2UKKwllY2hvICJleHBvcnQgQkFfU1JDUkVWPSR7U1JDUkVWfSIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKwllY2hvICJleHBvcnQgUEFUSD0kUEFUSDovc2JpbiIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKworCWVjaG8gIiMgSWYgd29ya2luZyBiZWhpbmQgYSBwcm94eSBhbmQgdXNpbmcgdGhlIHByb3ZpZGVkIG9lLWdpdC1wcm94eSBzY3JpcHQiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYworCWVjaG8gIiMgeW91IG5lZWQgdG8gc2V0IEFMTF9QUk9YWSBiYXNlZCBvbiB5b3VyIHByb3h5IHNldHRpbmdzLiIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiIyBFeGFtcGxlIEFMTF9QUk9YWSB2YWx1ZXM6IiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKwllY2hvICIjIGV4cG9ydCBBTExfUFJPWFk9aHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbTo4MDgwIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKwllY2hvICIjIGV4cG9ydCBBTExfUFJPWFk9c29ja3M6Ly9zb2Nrcy5leGFtcGxlLmNvbToxMDgwIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKworCWNob3duIC1SIGJ1aWxkZXIuYnVpbGRlciAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kKKwljaG1vZCAtUiB1ZytydyAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kKKworCSMgQXNzdW1lIHdlIHdpbGwgbmVlZCBDRFJPTSB0byBpbnN0YWxsIGd1ZXN0IGFkZGl0aW9ucworCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9tZWRpYS9jZHJvbQorCisJIyBBbGxvdyBidWlsZGVyIHRvIHVzZSBzdWRvCisJZWNobyAiYnVpbGRlciBBTEw9KEFMTCkgTk9QQVNTV0Q6IEFMTCIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9zdWRvZXJzCisKKwkjIExvYWQgdGFwL3R1biBhdCBzdGFydHVwCisJbG5yICR7SU1BR0VfUk9PVEZTfS91c3Ivc2Jpbi9pcHRhYmxlcyAke0lNQUdFX1JPT1RGU30vc2Jpbi9pcHRhYmxlcworCWVjaG8gInR1biIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9tb2R1bGVzCisKKwkjIFVzZSBDbGVhcmxvb2tzIEdUSysgdGhlbWUKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAKKwllY2hvICdndGstdGhlbWUtbmFtZSA9ICJDbGVhcmxvb2tzIicgPiAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAvZ3RrcmMKK30KKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJkb19wb3B1bGF0ZV9wb2t5X3NyYzsgIgorCithZGR0YXNrIHJvb3RmcyBhZnRlciBkb191bnBhY2sKKworcHl0aG9uICgpIHsKKwkjIEVuc3VyZSB3ZSBydW4gdGhlc2UgdXN1YWxseSBub2V4ZWMgdGFza3MKKwlkLmRlbFZhckZsYWcoImRvX2ZldGNoIiwgIm5vZXhlYyIpCisJZC5kZWxWYXJGbGFnKCJkb191bnBhY2siLCAibm9leGVjIikKK30KKworY3JlYXRlX2J1bmRsZV9maWxlcyAoKSB7CisJY2QgJHtXT1JLRElSfQorCW1rZGlyIC1wIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWNwICoudm14KiBZb2N0b19CdWlsZF9BcHBsaWFuY2UKKwlsbiAtc2YgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0udm1kayBZb2N0b19CdWlsZF9BcHBsaWFuY2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsKKwl6aXAgLXIgJHtJTUdERVBMT1lESVJ9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS0ke0RBVEVUSU1FfS56aXAgWW9jdG9fQnVpbGRfQXBwbGlhbmNlCisJbG4gLXNmIFlvY3RvX0J1aWxkX0FwcGxpYW5jZS0ke0RBVEVUSU1FfS56aXAgJHtJTUdERVBMT1lESVJ9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS56aXAKK30KK2NyZWF0ZV9idW5kbGVfZmlsZXNbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorCitweXRob24gZG9fYnVuZGxlX2ZpbGVzKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX2J1bmRsZV9maWxlcycsIGQpCit9CisKK2FkZHRhc2sgYnVuZGxlX2ZpbGVzIGFmdGVyIGRvX3ZtaW1nIGJlZm9yZSBkb19pbWFnZV9jb21wbGV0ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiCmluZGV4IDhkN2MwZDIuLjU3OTRhMjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmIKQEAgLTIwLDMgKzIwLDYgQEAKIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICIwIgogCiBCQURfUkVDT01NRU5EQVRJT05TICs9ICJidXN5Ym94LXN5c2xvZyIKKworIyBVc2UgdGhlIHNhbWUgcmVzdHJpY3Rpb24gYXMgaW5pdHJhbWZzLWxpdmUtaW5zdGFsbAorQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmkuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCmluZGV4IGQ1ODgyNmEuLjQ0MWUyNTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmkuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaApAQCAtMjksNyArMjksMTMgQEAKIAogZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCiAKLWZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyMgU29tZSBlTU1DIGRldmljZXMgaGF2ZSBzcGVjaWFsIHN1YiBkZXZpY2VzIHN1Y2ggYXMgbW1jYmxrMGJvb3QwIGV0YworIyB3ZSdyZSBjdXJyZW50bHkgb25seSBpbnRlcmVzdGVkIGluIHRoZSByb290IGRldmljZSBzbyBwaWNrIHRoZW0gd2lzZWx5CitkZXZpY2VzPWBscyAvc3lzL2Jsb2NrLyB8IGdyZXAgLXYgbW1jYmxrYCB8fCB0cnVlCittbWNfZGV2aWNlcz1gbHMgL3N5cy9ibG9jay8gfCBncmVwICJtbWNibGtbMC05XVx7MSxcfSQiYCB8fCB0cnVlCitkZXZpY2VzPSIkZGV2aWNlcyAkbW1jX2RldmljZXMiCisKK2ZvciBkZXZpY2UgaW4gJGRldmljZXM7IGRvCiAgICAgY2FzZSAkZGV2aWNlIGluCiAgICAgICAgIGxvb3AqKQogICAgICAgICAgICAgIyBza2lwIGxvb3AgZGV2aWNlCkBAIC03OCwxNyArODQsMjMgQEAKICAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CiAgICAgZmkKICAgICBlY2hvCi0gICAgIyBHZXQgdXNlciBjaG9pY2UKLSAgICB3aGlsZSB0cnVlOyBkbwotICAgICAgICBlY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKLSAgICAgICAgcmVhZCBhbnN3ZXIKLSAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgLW8gIiRhbnN3ZXIiID0gIm4iIF07IHRoZW4KK2RvbmUKKworIyBHZXQgdXNlciBjaG9pY2UKK3doaWxlIHRydWU7IGRvCisgICAgZWNobyAiUGxlYXNlIHNlbGVjdCBhbiBpbnN0YWxsIHRhcmdldCBvciBwcmVzcyBuIHRvIGV4aXQgKCRoZG5hbWVsaXN0ICk6ICIKKyAgICByZWFkIGFuc3dlcgorICAgIGlmIFsgIiRhbnN3ZXIiID0gIm4iIF07IHRoZW4KKyAgICAgICAgZWNobyAiSW5zdGFsbGF0aW9uIG1hbnVhbGx5IGFib3J0ZWQuIgorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGZvciBoZG5hbWUgaW4gJGhkbmFtZWxpc3Q7IGRvCisgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gIiRoZG5hbWUiIF07IHRoZW4KKyAgICAgICAgICAgIFRBUkdFVF9ERVZJQ0VfTkFNRT0kYW5zd2VyCiAgICAgICAgICAgICBicmVhawogICAgICAgICBmaQotICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKICAgICBkb25lCi0gICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgotICAgICAgICBUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorICAgIGlmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KICAgICAgICAgYnJlYWsKICAgICBmaQogZG9uZQpAQCAtMTE2LDggKzEyOCw4IEBACiBta2RpciAtcCAvdG1wCiAKICMgQ3JlYXRlIC9ldGMvbXRhYiBpZiBub3QgcHJlc2VudAotaWYgWyAhIC1lIC9ldGMvbXRhYiBdOyB0aGVuCi0gICAgY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgoraWYgWyAhIC1lIC9ldGMvbXRhYiBdICYmIFsgLWUgL3Byb2MvbW91bnRzIF07IHRoZW4KKyAgICBsbiAtc2YgL3Byb2MvbW91bnRzIC9ldGMvbXRhYgogZmkKIAogZGlza19zaXplPSQocGFydGVkICR7ZGV2aWNlfSB1bml0IG1iIHByaW50IHwgZ3JlcCAnXkRpc2sgLio6IC4qTUInIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCkBAIC0xMzgsNiArMTUwLDEyIEBACiAgICAgcGFydF9wcmVmaXg9InAiCiAgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgogZmkKKworIyBVU0IgZGV2aWNlcyBhbHNvIHJlcXVpcmUgcm9vdHdhaXQKK2lmIFsgLW4gYHJlYWRsaW5rIC9kZXYvZGlzay9ieS1pZC91c2IqIHwgZ3JlcCAkVEFSR0VUX0RFVklDRV9OQU1FYCBdOyB0aGVuCisgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKKwogYm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQogcm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9Mgogc3dhcD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaAppbmRleCBjNTYyM2VlLi4wNGNlNWZiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLnNoCkBAIC0yOCw3ICsyOCwxMyBAQAogCiBlY2hvICJTZWFyY2hpbmcgZm9yIGhhcmQgZHJpdmVzIC4uLiIKIAotZm9yIGRldmljZSBpbiBgbHMgL3N5cy9ibG9jay9gOyBkbworIyBTb21lIGVNTUMgZGV2aWNlcyBoYXZlIHNwZWNpYWwgc3ViIGRldmljZXMgc3VjaCBhcyBtbWNibGswYm9vdDAgZXRjCisjIHdlJ3JlIGN1cnJlbnRseSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHJvb3QgZGV2aWNlIHNvIHBpY2sgdGhlbSB3aXNlbHkKK2RldmljZXM9YGxzIC9zeXMvYmxvY2svIHwgZ3JlcCAtdiBtbWNibGtgIHx8IHRydWUKK21tY19kZXZpY2VzPWBscyAvc3lzL2Jsb2NrLyB8IGdyZXAgIm1tY2Jsa1swLTldXHsxLFx9JCJgIHx8IHRydWUKK2RldmljZXM9IiRkZXZpY2VzICRtbWNfZGV2aWNlcyIKKworZm9yIGRldmljZSBpbiAkZGV2aWNlczsgZG8KICAgICBjYXNlICRkZXZpY2UgaW4KICAgICAgICAgbG9vcCopCiAgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKQEAgLTcyLDE3ICs3OCwyMyBAQAogICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS91ZXZlbnQKICAgICBmaQogICAgIGVjaG8KLSAgICAjIEdldCB1c2VyIGNob2ljZQotICAgIHdoaWxlIHRydWU7IGRvCi0gICAgICAgIGVjaG8gLW4gIkRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhpcyBpbWFnZSB0aGVyZT8gW3kvbl0gIgotICAgICAgICByZWFkIGFuc3dlcgotICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiAtbyAiJGFuc3dlciIgPSAibiIgXTsgdGhlbgorZG9uZQorCisjIEdldCB1c2VyIGNob2ljZQord2hpbGUgdHJ1ZTsgZG8KKyAgICBlY2hvICJQbGVhc2Ugc2VsZWN0IGFuIGluc3RhbGwgdGFyZ2V0IG9yIHByZXNzIG4gdG8gZXhpdCAoJGhkbmFtZWxpc3QgKTogIgorICAgIHJlYWQgYW5zd2VyCisgICAgaWYgWyAiJGFuc3dlciIgPSAibiIgXTsgdGhlbgorICAgICAgICBlY2hvICJJbnN0YWxsYXRpb24gbWFudWFsbHkgYWJvcnRlZC4iCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAiJGhkbmFtZSIgXTsgdGhlbgorICAgICAgICAgICAgVEFSR0VUX0RFVklDRV9OQU1FPSRhbnN3ZXIKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGZpCi0gICAgICAgIGVjaG8gIlBsZWFzZSBhbnN3ZXIgeSBvciBuIgogICAgIGRvbmUKLSAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdOyB0aGVuCi0gICAgICAgIFRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisgICAgaWYgWyAtbiAiJFRBUkdFVF9ERVZJQ0VfTkFNRSIgXTsgdGhlbgogICAgICAgICBicmVhawogICAgIGZpCiBkb25lCkBAIC0xMTIsOCArMTI0LDggQEAKIGZpCiAKIG1rZGlyIC1wIC90bXAKLWlmIFsgISAtTCAvZXRjL210YWIgXTsgdGhlbgotICAgIGNhdCAvcHJvYy9tb3VudHMgPiAvZXRjL210YWIKK2lmIFsgISAtTCAvZXRjL210YWIgXSAmJiBbIC1lIC9wcm9jL21vdW50cyBdOyB0aGVuCisgICAgbG4gLXNmIC9wcm9jL21vdW50cyAvZXRjL210YWIKIGZpCiAKIGRpc2tfc2l6ZT0kKHBhcnRlZCAke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgJ15EaXNrIC4qOiAuKk1CJyB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQpAQCAtMTQ2LDYgKzE1OCwxMSBAQAogICAgIHJvb3R3YWl0PSJyb290d2FpdCIKIGZpCiAKKyMgVVNCIGRldmljZXMgYWxzbyByZXF1aXJlIHJvb3R3YWl0CitpZiBbIC1uIGByZWFkbGluayAvZGV2L2Rpc2svYnktaWQvdXNiKiB8IGdyZXAgJFRBUkdFVF9ERVZJQ0VfTkFNRWAgXTsgdGhlbgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCisKIGlmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgogICAgIGJpb3NfYm9vdD0nJwogICAgIGJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaAppbmRleCAwOWZiNDc5Li40NDFiNDFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWxpdmUuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoCkBAIC04MCw3ICs4MCw5IEBACiBib290X2xpdmVfcm9vdCgpIHsKICAgICAjIFdhdGNoZXMgdGhlIHVkZXYgZXZlbnQgcXVldWUsIGFuZCBleGl0cyBpZiBhbGwgY3VycmVudCBldmVudHMgYXJlIGhhbmRsZWQKICAgICB1ZGV2YWRtIHNldHRsZSAtLXRpbWVvdXQ9MyAtLXF1aWV0Ci0gICAga2lsbGFsbCAiJHtfVURFVl9EQUVNT04jIyovfSIgMj4vZGV2L251bGwKKyAgICAjIEtpbGxzIHRoZSBjdXJyZW50IHVkZXYgcnVubmluZyBwcm9jZXNzZXMsIHdoaWNoIHN1cnZpdmVkIGFmdGVyCisgICAgIyBkZXZpY2Ugbm9kZSBjcmVhdGlvbiBldmVudHMgd2VyZSBoYW5kbGVkLCB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yCisgICAga2lsbGFsbCAtOSAiJHtfVURFVl9EQUVNT04jIyovfSIgMj4vZGV2L251bGwKIAogICAgICMgQWxsb3cgZm9yIGlkZW50aWZpY2F0aW9uIG9mIHRoZSByZWFsIHJvb3QgZXZlbiBhZnRlciBib290CiAgICAgbWtkaXIgLXAgICR7Uk9PVF9NT1VOVH0vbWVkaWEvcmVhbHJvb3QKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZmluaXNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2gKaW5kZXggZDA5YmJiOC4uNzE3MzgzZSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2gKQEAgLTgsMzkgKzgsNiBAQAogCiBmaW5pc2hfcnVuKCkgewogCWlmIFsgLW4gIiRST09URlNfRElSIiBdOyB0aGVuCi0JCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdGRlbGF5IiBdOyB0aGVuCi0JCQlkZWJ1ZyAiU2xlZXBpbmcgZm9yICRyb290ZGVsYXkgc2Vjb25kKHMpIHRvIHdhaXQgcm9vdCB0byBzZXR0bGUuLi4iCi0JCQlzbGVlcCAkYm9vdHBhcmFtX3Jvb3RkZWxheQotCQlmaQotCi0JCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgotCQkJZGVidWcgIk5vIGUyZnMgY29tcGF0aWJsZSBmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQsIG1vdW50aW5nICRib290cGFyYW1fcm9vdC4uLiIKLQotCQkJaWYgWyAiYGVjaG8gJHtib290cGFyYW1fcm9vdH0gfCBjdXQgLWMxLTVgIiA9ICJVVUlEPSIgXTsgdGhlbgotCQkJCXJvb3RfdXVpZD1gZWNobyAkYm9vdHBhcmFtX3Jvb3QgfCBjdXQgLWM2LWAKLQkJCQlib290cGFyYW1fcm9vdD0iL2Rldi9kaXNrL2J5LXV1aWQvJHJvb3RfdXVpZCIKLQkJCWZpCi0KLQkJCWlmIFsgLWUgIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgotCQkJCWZsYWdzPSIiCi0JCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9ybyIgXTsgdGhlbgotCQkJCQlpZiBbICAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KLQkJCQkJCWJvb3RwYXJhbV9yb290ZmxhZ3M9IiRib290cGFyYW1fcm9vdGZsYWdzLCIKLQkJCQkJZmkKLQkJCQkJYm9vdHBhcmFtX3Jvb3RmbGFncz0iJHtib290cGFyYW1fcm9vdGZsYWdzfXJvIgotCQkJCWZpCi0JCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KLQkJCQkJZmxhZ3M9IiRmbGFncyAtbyRib290cGFyYW1fcm9vdGZsYWdzIgotCQkJCWZpCi0JCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZnN0eXBlIiBdOyB0aGVuCi0JCQkJCWZsYWdzPSIkZmxhZ3MgLXQkYm9vdHBhcmFtX3Jvb3Rmc3R5cGUiCi0JCQkJZmkKLQkJCQltb3VudCAkZmxhZ3MgJGJvb3RwYXJhbV9yb290ICRST09URlNfRElSCi0JCQllbHNlCi0JCQkJbXNnICJyb290ICckYm9vdHBhcmFtX3Jvb3QnIGRvZXNuJ3QgZXhpc3QuIgotCQkJZmkKLQkJZmkKLQogCQlpZiBbICEgLWQgJFJPT1RGU19ESVIvZGV2IF07IHRoZW4KIAkJCWZhdGFsICJFUlJPUjogVGhlcmUncyBubyAnL2Rldicgb24gcm9vdGZzLiIKIAkJZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdAppbmRleCAyMDRmMjM3Li4zNzUyN2E4IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9pbml0CkBAIC03Niw4ICs3Niw4IEBACiAjIG1ha2UgbW91bnQgc3RvcCBjb21wbGFpbmluZyBhYm91dCBtaXNzaW5nIC9ldGMvZnN0YWIKIHRvdWNoIC9ldGMvZnN0YWIKIAotIyBpbml0aWFsaXplIC9wcm9jLCAvc3lzIGFuZCAvdmFyL2xvY2sKLW1rZGlyIC1wIC9wcm9jIC9zeXMgL3Zhci9sb2NrCisjIGluaXRpYWxpemUgL3Byb2MsIC9zeXMsIC9ydW4vbG9jayBhbmQgL3Zhci9sb2NrCitta2RpciAtcCAvcHJvYyAvc3lzIC9ydW4vbG9jayAvdmFyL2xvY2sKIG1vdW50IC10IHByb2MgcHJvYyAvcHJvYwogbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL3Jvb3RmcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvcm9vdGZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NzY4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL3Jvb3RmcwpAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworcm9vdGZzX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworcm9vdGZzX3J1bigpIHsKKyAgICAgICAgaWYgWyAteiAiJFJPT1RGU19ESVIiIF07IHRoZW4KKwkJcmV0dXJuCisgICAgICAgIGZpCisJQz0wCisJZGVsYXk9JHtib290cGFyYW1fcm9vdGRlbGF5Oi0xfQorCXRpbWVvdXQ9JHtib290cGFyYW1fcm9vdHRpbWVvdXQ6LTV9CisJd2hpbGUgWyAhIC1kICRST09URlNfRElSL2RldiBdOyBkbworCQlpZiBbICQoKCAkQyAqICRkZWxheSApKSAtZ3QgJHRpbWVvdXQgXTsgdGhlbgorCQkJZmF0YWwgInJvb3QgJyRib290cGFyYW1fcm9vdCcgZG9lc24ndCBleGlzdCBvciBkb2VzIG5vdCBjb250YWluIGEgL2Rldi4iCisJCWZpCisKKwkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290IiBdOyB0aGVuCisJCQlkZWJ1ZyAiTm8gZTJmcyBjb21wYXRpYmxlIGZpbGVzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZCwgbW91bnRpbmcgJGJvb3RwYXJhbV9yb290Li4uIgorCisJCQlpZiBbICJgZWNobyAke2Jvb3RwYXJhbV9yb290fSB8IGN1dCAtYzEtNWAiID0gIlVVSUQ9IiBdOyB0aGVuCisJCQkJcm9vdF91dWlkPWBlY2hvICRib290cGFyYW1fcm9vdCB8IGN1dCAtYzYtYAorCQkJCWJvb3RwYXJhbV9yb290PSIvZGV2L2Rpc2svYnktdXVpZC8kcm9vdF91dWlkIgorCQkJZmkKKworCQkJaWYgWyAiYGVjaG8gJHtib290cGFyYW1fcm9vdH0gfCBjdXQgLWMxLTlgIiA9ICJQQVJUVVVJRD0iIF07IHRoZW4KKwkJCQlyb290X3V1aWQ9YGVjaG8gJGJvb3RwYXJhbV9yb290IHwgY3V0IC1jMTAtYAorCQkJCWJvb3RwYXJhbV9yb290PSIvZGV2L2Rpc2svYnktcGFydHV1aWQvJHJvb3RfdXVpZCIKKwkJCWZpCisKKwkJCWlmIFsgLWUgIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJCWZsYWdzPSIiCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9ybyIgXSAmJiAhIGVjaG8gIiRib290cGFyYW1fcm9vdGZsYWdzIiB8IGdyZXAgLXcgLXEgInJvIjsgdGhlbgorCQkJCQlpZiBbICAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJCWJvb3RwYXJhbV9yb290ZmxhZ3M9IiRib290cGFyYW1fcm9vdGZsYWdzLCIKKwkJCQkJZmkKKwkJCQkJYm9vdHBhcmFtX3Jvb3RmbGFncz0iJHtib290cGFyYW1fcm9vdGZsYWdzfXJvIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJZmxhZ3M9IiRmbGFncyAtbyRib290cGFyYW1fcm9vdGZsYWdzIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZnN0eXBlIiBdOyB0aGVuCisJCQkJCWZsYWdzPSIkZmxhZ3MgLXQkYm9vdHBhcmFtX3Jvb3Rmc3R5cGUiCisJCQkJZmkKKwkJCQltb3VudCAkZmxhZ3MgJGJvb3RwYXJhbV9yb290ICRST09URlNfRElSCisJCQkJaWYgWyAtZCAkUk9PVEZTX0RJUi9kZXYgXTsgdGhlbgorCQkJCQlicmVhaworCQkJCWVsc2UKKwkJCQkJIyBJdCBpcyB1bmxpa2VseSB0byBjaGFuZ2UsIGJ1dCBrZWVwIHRyeWluZyBhbnl3YXkuCisJCQkJCSMgUGVyaGFwcyB3ZSBwaWNrIGEgZGlmZmVyZW50IGRldmljZSBuZXh0IHRpbWUuCisJCQkJCXVtb3VudCAkUk9PVEZTX0RJUgorCQkJCQlmaQorCQkJCWZpCisJCWZpCisJCWRlYnVnICJTbGVlcGluZyBmb3IgJGRlbGF5IHNlY29uZChzKSB0byB3YWl0IHJvb3QgdG8gc2V0dGxlLi4uIgorCQlzbGVlcCAkZGVsYXkKKwkJQz0kKCggJEMgKyAxICkpCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgppbmRleCAwNjY0YTk1Li42N2ExYjA0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgpAQCAtOCw2ICs4LDcgQEAKIGluaGVyaXQgYWxsYXJjaAogCiBTUkNfVVJJID0gImZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3Jvb3RmcyBcCiAgICAgICAgICAgIGZpbGU6Ly9maW5pc2ggXAogICAgICAgICAgICBmaWxlOi8vbWRldiBcCiAgICAgICAgICAgIGZpbGU6Ly91ZGV2IFwKQEAgLTIxLDYgKzIyLDcgQEAKIAogICAgICMgYmFzZQogICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfS9pbml0CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcm9vdGZzICR7RH0vaW5pdC5kLzkwLXJvb3RmcwogICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2ZpbmlzaCAke0R9L2luaXQuZC85OS1maW5pc2gKIAogICAgICMgbWRldgpAQCAtNDUsMTIgKzQ3LDIxIEBACiAgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLW1kZXYgXAogICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS11ZGV2IFwKICAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtZTJmcyBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLXJvb3RmcyBcCiAgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLWRlYnVnIgogCiBGSUxFU18ke1BOfS1iYXNlID0gIi9pbml0IC9pbml0LmQvOTktZmluaXNoIC9kZXYiCiAKKyMgOTktZmluaXNoIGluIGJhc2UgZGVwZW5kcyBvbiBzb21lIG90aGVyIG1vZHVsZSB3aGljaCBtb3VudHMKKyMgdGhlIHJvb3RmcywgbGlrZSA5MC1yb290ZnMuIFRvIHJlcGxhY2UgdGhhdCBkZWZhdWx0LCB1c2UKKyMgQkFEX1JFQ09NTUVOREFUSU9OUyArPSAiaW5pdHJhbWZzLW1vZHVsZS1yb290ZnMiIGluIHlvdXIKKyMgaW5pdHJhbWZzIHJlY2lwZSBhbmQgaW5zdGFsbCBzb21ldGhpbmcgZWxzZSwgb3IgaW5zdGFsbAorIyBzb21ldGhpbmcgdGhhdCBydW5zIGVhcmxpZXIgKGZvciBleGFtcGxlLCBhIDg5LW15LXJvb3RmcykKKyMgYW5kIG1vdW50cyB0aGUgcm9vdGZzLiBUaGVuIDkwLXJvb3RmcyB3aWxsIHByb2NlZWQgaW1tZWRpYXRlbHkuCitSUkVDT01NRU5EU18ke1BOfS1iYXNlICs9ICJpbml0cmFtZnMtbW9kdWxlLXJvb3RmcyIKKwogU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLW1kZXYgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIG1kZXYiCi1SREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLW1kZXYgPSAiJHtQTn0tYmFzZSIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICIke1BOfS1iYXNlIGJ1c3lib3gtbWRldiIKIEZJTEVTX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICIvaW5pdC5kLzAxLW1kZXYiCiAKIFNVTU1BUllfaW5pdHJhbWZzLW1vZHVsZS11ZGV2ID0gImluaXRyYW1mcyBzdXBwb3J0IGZvciB1ZGV2IgpAQCAtNjEsNiArNzIsMTAgQEAKIFJERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtZTJmcyA9ICIke1BOfS1iYXNlIgogRklMRVNfaW5pdHJhbWZzLW1vZHVsZS1lMmZzID0gIi9pbml0LmQvMTAtZTJmcyIKIAorU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLXJvb3RmcyA9ICJpbml0cmFtZnMgc3VwcG9ydCBmb3IgbG9jYXRpbmcgYW5kIG1vdW50aW5nIHRoZSByb290IHBhcnRpdGlvbiIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtcm9vdGZzID0gIiR7UE59LWJhc2UiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLXJvb3RmcyA9ICIvaW5pdC5kLzkwLXJvb3RmcyIKKwogU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLWRlYnVnID0gImluaXRyYW1mcyBkeW5hbWljIGRlYnVnIHN1cHBvcnQiCiBSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLWRlYnVnID0gIiR7UE59LWJhc2UiCiBGSUxFU19pbml0cmFtZnMtbW9kdWxlLWRlYnVnID0gIi9pbml0LmQvMDAtZGVidWciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrcm9vdC5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCmluZGV4IGRmZWUyYWYuLjAyZjAzNTEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCkBAIC02OSw3ICs2OSw3IEBACiAjIGJlZm9yZSBmc2NrLCBzaW5jZSBmc2NrIGNhbiBiZSBxdWl0ZSBtZW1vcnktaHVuZ3J5LgogIwogdGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkFjdGl2YXRpbmcgc3dhcCIKLXN3YXBvbiAtYSAyPiAvZGV2L251bGwKK1sgLXggL3NiaW4vc3dhcG9uIF0gJiYgc3dhcG9uIC1hCiAKICMKICMgQ2hlY2sgdGhlIHJvb3QgZmlsZXN5c3RlbS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RtZXNnLnNoCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYTk3YjA2OC4uMmI5ZWJhNgotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RtZXNnLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2gKQEAgLTgsOCArOCw4IEBACiAjIyMgRU5EIElOSVQgSU5GTwogCiBpZiBbIC1mIC92YXIvbG9nL2RtZXNnIF07IHRoZW4KLQlpZiBbIC1mIC91c3Ivc2Jpbi9sb2dyb3RhdGUgXTsgdGhlbgotCQlsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUtZG1lc2cuY29uZgorCWlmIExPR1BBVEg9JCh3aGljaCBsb2dyb3RhdGUpOyB0aGVuCisJCSRMT0dQQVRIIC1mIC9ldGMvbG9ncm90YXRlLWRtZXNnLmNvbmYKIAllbHNlCiAJCW12IC1mIC92YXIvbG9nL2RtZXNnIC92YXIvbG9nL2RtZXNnLm9sZAogCWZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudGFsbC5zaAppbmRleCA5NGJhZTQyLi5jNzE5YmU1IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2gKQEAgLTMzLDcgKzMzLDcgQEAKICMgRXhlY3V0ZSBzd2Fwb24gY29tbWFuZCBhZ2FpbiwgaW4gY2FzZSB3ZSB3YW50IHRvIHN3YXAgdG8KICMgYSBmaWxlIG9uIGEgbm93IG1vdW50ZWQgZmlsZXN5c3RlbS4KICMKLXN3YXBvbiAtYSAyPiAvZGV2L251bGwKK1sgLXggL3NiaW4vc3dhcG9uIF0gJiYgc3dhcG9uIC1hCiAKIDogZXhpdCAwCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50ZnMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzCmluZGV4IDYxMzI0YzYuLjdmYjVjNTggMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50ZnMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRmcwpAQCAtMTIsNyArMTIsNyBAQAogUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgogCiBlY2hvICJEZWFjdGl2YXRpbmcgc3dhcC4uLiIKLXN3YXBvZmYgLWEKK1sgLXggL3NiaW4vc3dhcG9mZiBdICYmIHN3YXBvZmYgLWEKIAogIyBXZSBsZWF2ZSAvcHJvYyBtb3VudGVkLgogZWNobyAiVW5tb3VudGluZyBsb2NhbCBmaWxlc3lzdGVtcy4uLiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiCmluZGV4IDE0ODQ5MWYuLjhmMTEwYjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzXzEuMC5iYgpAQCAtMTM4LDcgKzEzOCw3IEBACiAJdXBkYXRlLXJjLmQgLXIgJHtEfSBzeXNmcy5zaCBzdGFydCAwMiBTIC4KIAl1cGRhdGUtcmMuZCAtciAke0R9IHBvcHVsYXRlLXZvbGF0aWxlLnNoIHN0YXJ0IDM3IFMgLgogCXVwZGF0ZS1yYy5kIC1yICR7RH0gcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIHN0YXJ0IDI5IFMgLgotCXVwZGF0ZS1yYy5kIC1yICR7RH0gZGV2cHRzLnNoIHN0YXJ0IDM4IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gZGV2cHRzLnNoIHN0YXJ0IDA2IFMgLgogCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KIAkgICAgICAgIHVwZGF0ZS1yYy5kIC1yICR7RH0gYWxpZ25tZW50LnNoIHN0YXJ0IDA2IFMgLgogCWZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyZDIwNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3J1bi1wdGVzdApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCitDVVJESVI9JChkaXJuYW1lIGByZWFkbGluayAtZiAkMGApCittYWtlIC1rIC1DICR7Q1VSRElSfS90ZXN0cyBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvc2V0LXByb3Blci1wYXRoLW9mLXJlc291cmNlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3NldC1wcm9wZXItcGF0aC1vZi1yZXNvdXJjZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkNmY0MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3NldC1wcm9wZXItcGF0aC1vZi1yZXNvdXJjZXMucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKwora2JkIGlzIG91dCBvZiBzb3VyY2UgYnVpbHQsIHRoZW4gdGhlIHZhbHVlIG9mICQoc3JjZGlyKSBpcyByZWxhdGl2ZSBwYXRoIG9mCiske1N9L3Rlc3RzIHRvICR7Qn0vdGVzdHMuIE1hY3JvIERBVEFESVIgaXMgZGVmaW5lZCB3aXRoICQoc3JjZGlyKSBhbmQgcmVwbGFjZWQKK2luIC5jIGZpbGVzIGJ5IGNvbXBpbGVyLCBhbmQgc3RyaW5nIEBEQVRBRElSQCBpcyByZXBsYWNlZCB3aXRoICQoc3JkaXIpIGJ5IHJ1bGUKKyIlOiAlLmluIiBpbiBNYWtlZmlsZS4KKworQnV0IGtiZC1wdGVzdCBwdXRzIHRlc3QgY2FzZXMgYW5kIHJlc291cmNlIGZpbGVzIGluIHNhbWUgZGlyZWN0b3J5LCB0aGVuIHNvbWUKK3B0ZXN0IGNhc2VzIGZhaWwgdG8gZmluZCByZXNvdXJjZXMuCisKK1JlcGxhY2UgREFUQURJUiBhbmQgQERBVEFESVJAIHdpdGggY3VycmVudCBkaXJlY3RvcnkoZG90KSB0byBtYWtlIHRlc3QgY2FzZXMKK3J1biBhcyBleHBlY3RlZC4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAxOTc2MzMzLi5iMzZhZWYzIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw3ICsxLDcgQEAKKyBBTV9DUFBGTEFHUyA9IFwKKyAJLUkkKHNyY2RpcikvLi4vc3JjL2xpYmtleW1hcCBcCisgCS1JJChidWlsZGRpcikvLi4vc3JjL2xpYmtleW1hcCBcCistCS1EREFUQURJUj1cIiQoc3JjZGlyKVwiIC1EQlVJTERESVI9XCIkKGJ1aWxkZGlyKVwiCisrCS1EREFUQURJUj1cIi5cIiAtREJVSUxERElSPVwiJChidWlsZGRpcilcIgorIAorIEFNX0NGTEFHUyA9ICQoQ0hFQ0tfQ0ZMQUdTKQorIExEQUREICA9ICQodG9wX2J1aWxkZGlyKS9zcmMvbGlia2V5bWFwL2xpYmtleW1hcC5sYSAkKENIRUNLX0xJQlMpCitkaWZmIC0tZ2l0IGEvdGVzdHMvYWx0LWlzLW1ldGEuaW4gYi90ZXN0cy9hbHQtaXMtbWV0YS5pbgoraW5kZXggZGRkNWVkOC4uNzcyZmI1MSAxMDA3NTUKKy0tLSBhL3Rlc3RzL2FsdC1pcy1tZXRhLmluCisrKysgYi90ZXN0cy9hbHQtaXMtbWV0YS5pbgorQEAgLTcsOCArNyw4IEBAIGNkICIkY3dkIgorIHJjPTAKKyB0ZW1wPSIkKG1rdGVtcCAiQEJVSUxERElSQC90ZW1wLlhYWFhYWFhYWCIpIgorIAorLS4vbGlia2V5bWFwLXNob3dtYXBzICJAREFUQURJUkAiL2FsdC1pcy1tZXRhLm1hcCA+ICIkdGVtcCIgfHwgcmM9JD8KKy1jbXAgLXMgIkBEQVRBRElSQC8vYWx0LWlzLW1ldGEub3V0cHV0IiAiJHRlbXAiIHx8IHJjPSQ/CisrLi9saWJrZXltYXAtc2hvd21hcHMgLi9hbHQtaXMtbWV0YS5tYXAgPiAiJHRlbXAiIHx8IHJjPSQ/CisrY21wIC1zICIuL2FsdC1pcy1tZXRhLm91dHB1dCIgIiR0ZW1wIiB8fCByYz0kPworIAorIGlmIFsgIiRyYyIgIT0gMCBdOyB0aGVuCisgCXByaW50ZiAnZmFpbGVkXG4nCitkaWZmIC0tZ2l0IGEvdGVzdHMvZHVtcGtleXMtZnVsbHRhYmxlLmluIGIvdGVzdHMvZHVtcGtleXMtZnVsbHRhYmxlLmluCitpbmRleCA3Yzg1NmU1Li4xNGQ5MmMxIDEwMDc1NQorLS0tIGEvdGVzdHMvZHVtcGtleXMtZnVsbHRhYmxlLmluCisrKysgYi90ZXN0cy9kdW1wa2V5cy1mdWxsdGFibGUuaW4KK0BAIC01LDcgKzUsNyBAQCBjd2Q9IiQocmVhZGxpbmsgLWV2ICIkezAlLyp9IikiCisgY2QgIiRjd2QiCisgCisgQlVJTERESVI9IkBCVUlMRERJUkAiCistREFUQURJUj0iQERBVEFESVJAIgorK0RBVEFESVI9Ii4iCisgCisgY2hlY2tfa2V5bWFwKCkgeworIAlsb2NhbCBrbWFwIHRlbXAgcmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkXzIuMC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjMuYmIKaW5kZXggODU4ZGMwNS4uNTRkMTY4MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjMuYmIKQEAgLTExLDYgKzExLDggQEAKIFJDT05GTElDVFNfJHtQTn0gPSAiY29uc29sZS10b29scyIKIAogU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICdmaWxlOi8vc2V0LXByb3Blci1wYXRoLW9mLXJlc291cmNlcy5wYXRjaCcsICcnLCBkKX0gXAogICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjIzMWI0NmU3MTQyZWI0MWVhM2FlMDZkMmRlZDNjMjA4IgpAQCAtMTksNiArMjEsMjEgQEAKIFBBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCiBQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtdmxvY2ssIC0tZGlzYWJsZS12bG9jaywgbGlicGFtLCIKIAorZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIC1DICR7Qn0vdGVzdHMgZHVtcGtleXMtZnVsbHRhYmxlIGFsdC1pcy1tZXRhCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgaW5zdGFsbCAtRCAke0J9L3Rlc3RzL01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL01ha2VmaWxlCisgICAgc2VkIC1pIC1lICcvTWFrZWZpbGU6LywvXiQvZCcgLWUgJy8lOiAlLmluLywvXiQvZCcgXAorCS1lICcvbGlia2V5bWFwXy4qX1NPVVJDRVMgPS9kJyAtZSAnLyQoRVhFRVhUKTovLC9eJC9kJyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9NYWtlZmlsZQorCisgICAgZmluZCAke0J9L3Rlc3RzIC1leGVjdXRhYmxlIC1leGVjIGluc3RhbGwge30gJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMgXDsKKyAgICBmaW5kICR7U30vdGVzdHMgXCggLW5hbWUgXCoubWFwIC1vIC1uYW1lIFwqLmJpbiAtbyAtbmFtZSBcKi5vdXRwdXQgXCkgLWV4ZWMgaW5zdGFsbCB7fSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyBcOworCisgICAgaW5zdGFsbCAtRCAtbSA3NTUgJHtTfS9jb25maWcvdGVzdC1kcml2ZXIgJHtEfSR7UFRFU1RfUEFUSH0vY29uZmlnL3Rlc3QtZHJpdmVyCit9CisKIFBBQ0tBR0VTICs9ICIke1BOfS1jb25zb2xlZm9udHMgJHtQTn0ta2V5bWFwcyAke1BOfS11bmltYXBzICR7UE59LWNvbnNvbGV0cmFucyIKIAogRklMRVNfJHtQTn0tY29uc29sZWZvbnRzID0gIiR7ZGF0YWRpcn0vY29uc29sZWZvbnRzIgpAQCAtMjYsMTAgKzQzLDExIEBACiBGSUxFU18ke1BOfS1rZXltYXBzID0gIiR7ZGF0YWRpcn0va2V5bWFwcyIKIEZJTEVTXyR7UE59LXVuaW1hcHMgPSAiJHtkYXRhZGlyfS91bmltYXBzIgogCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJtYWtlIgorCiBpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKIAogQUxURVJOQVRJVkVfJHtQTn0gPSAiY2h2dCBkZWFsbG9jdnQgZmdjb25zb2xlIG9wZW52dCIKIEFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi1QQVJBTExFTF9NQUtFSU5TVCA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjgwNzliLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotY29uZmlndXJlLmFjOiBmaXggY3Jvc3MgY29tcGlsaW5nIHdhcm5pbmcKLQotVGhlcmUgaXMgYSB3YXJuaW5nIHdoaWxlIGNyb3NzIGNvbXBpbGluZyB3aGljaCB0cmlnZ2VyZWQgYQotZmFpbHVyZSBieSBkb19xYV9jb25maWd1cmUKLS4uLgotfGNvbmZpZ3VyZToxMjY1MjogY2hlY2tpbmcgZm9yIGd6cmVhZCBpbiAtbHoKLXxjb25maWd1cmU6MTI2Nzc6IG1pcHMtcG9reS1saW51eC1nY2MgIC1tZWIgLW1hYmk9MzIgLW1oYXJkLWZsb2F0Ci0gLUwvbGliIGNvbmZ0ZXN0LmMgLWx6ICAgPiY1Ci18bGQ6IHdhcm5pbmc6IGxpYnJhcnkgc2VhcmNoIHBhdGggIi9saWIiIGlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24KLS4uLgotCi1XaGlsZSBkbyB0aGUgbGliIGNoZWNraW5nLCBkbyBub3QgYWRkICctTCR7Wl9ESVJ9L2xpYicgdG8gTERGTEFHUyBjb3VsZCBmaXggaXQuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgfCA1ICstLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA5YTkwNjAwLi4wYmFjOGE0IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0zOTEsOCArMzkxLDYgQEAgaWYgdGVzdCAiJHdpdGhfemxpYiIgPSAibm8iOyB0aGVuCi0gICAgIGVjaG8gIkRpc2FibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0IgotIGVsc2UKLSAgICAgQUNfQ0hFQ0tfSEVBREVSUyh6bGliLmgsCi0tICAgICAgICBbU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgotLQkgTERGTEFHUz0iLUwke1pfRElSfS9saWIiCi0gCUFDX0NIRUNLX0xJQih6LCBnenJlYWQsWwotIAkgICAgQUNfREVGSU5FKFtIQVZFX0xJQlpdLCBbMV0sIFtIYXZlIGNvbXByZXNzaW9uIGxpYnJhcnldKQotIAkgICAgV0lUSF9aTElCPTEKLUBAIC00MDYsOCArNDA0LDcgQEAgZWxzZQotIAkJZXNhY10KLSAJICAgIGVsc2UKLSAJCVpfTElCUz0iLWx6IgotLQkgICAgZmldKQotLQkgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9Il0pCi0rCSAgICBmaV0pKQotIGZpCi0gCi0gQUNfU1VCU1QoWl9DRkxBR1MpCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5ODczZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1TVU1NQVJZID0gIlhNTCBDIFBhcnNlciBMaWJyYXJ5IGFuZCBUb29sa2l0IgotREVTQ1JJUFRJT04gPSAiVGhlIFhNTCBQYXJzZXIgTGlicmFyeSBhbGxvd3MgZm9yIG1hbmlwdWxhdGlvbiBvZiBYTUwgZmlsZXMuICBMaWJ4bWwyIGV4cG9ydHMgUHVzaCBhbmQgUHVsbCB0eXBlIHBhcnNlciBpbnRlcmZhY2VzIGZvciBib3RoIFhNTCBhbmQgSFRNTC4gIEl0IGNhbiBkbyBEVEQgdmFsaWRhdGlvbiBhdCBwYXJzZSB0aW1lLCBvbiBhIHBhcnNlZCBkb2N1bWVudCBpbnN0YW5jZSBvciB3aXRoIGFuIGFyYml0cmFyeSBEVEQuICBMaWJ4bWwyIGluY2x1ZGVzIGNvbXBsZXRlIFhQYXRoLCBYUG9pbnRlciBhbmQgWGluY2x1ZGUgaW1wbGVtZW50YXRpb25zLiAgSXQgYWxzbyBoYXMgYSBTQVggbGlrZSBpbnRlcmZhY2UsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBFeHBhdC4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LnhtbHNvZnQub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PWxpYnhtbDIiCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodDttZDU9MjA0NDQxN2UyZTUwMDZiNjVhOGI5MDY3YjY4M2ZjZjEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaGFzaC5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTU7bWQ1PTk2ZjcyOTY2MDVlYWU4MDc2NzBmYjA4OTQ3ODI5OTY5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpc3QuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTEzO21kNT1jZGJmYTNkZWU1MWMwOTllZGIwNGUzOWY3NjJlZTkwNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmlvLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0xNDttZDU9NmMwMjU3NTNjODZkOTU4NzIyZWM3NmU5NGNhZTkzMmUiCi0KLURFUEVORFMgPSAiemxpYiIKLQotU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4bWwyL2xpYnhtbDItJHtQVn0udGFyLmd6O25hbWU9bGlidGFyIFwKLSAgICAgICAgICAgaHR0cDovL3d3dy53My5vcmcvWE1ML1Rlc3QveG1sdHMyMDA4MDgyNy50YXIuZ3o7bmFtZT10ZXN0dGFyIFwKLSAgICAgICAgICAgZmlsZTovL2xpYnhtbC02NGJpdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hbnNpZGVjbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW50ZXN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJ4bWwtbTQtdXNlLXBrZ2NvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbGlidGFyLm1kNXN1bV0gPSAiZGFlY2UxN2UwNDVmMWMxMDc2MTBlMTM3YWI1MGMxNzkiCi1TUkNfVVJJW2xpYnRhci5zaGEyNTZzdW1dID0gIjRkZTllMzFmNDZiNDRkMzQ4NzFjMjJmNTRiZmM1NDM5OGVmMTI0ZDZmN2NhZmIxZjRhNTk1OGZiY2QzYmExMmQiCi1TUkNfVVJJW3Rlc3R0YXIubWQ1c3VtXSA9ICJhZTNkMWViZTAwMGEzOTcyYWZhMTA0Y2E3ZjBlMWI0YSIKLVNSQ19VUklbdGVzdHRhci5zaGEyNTZzdW1dID0gIjk2MTUxNjg1Y2VjOTk3ZTFmOWYzMzg3ZTM2MjZkNjFlNjI4NGQ0ZDZlNjZlMGU0NDBjMjA5Mjg2YzAzZTljYzciCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0veG1sMi1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgcHl0aG9ubmF0aXZlIHB0ZXN0Ci0KLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJweXRob24tY29yZSIKLQotUkRFUEVORFNfJHtQTn0tcHl0aG9uICs9ICJweXRob24tY29yZSIKLQotUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIgotCi1leHBvcnQgUFlUSE9OX1NJVEVfUEFDS0FHRVM9IiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgotCi1QQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtQWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uIgotCi0jIFdBUk5JTkc6IHpsaWIgaXMgcmVxdWlyZSBmb3IgUlBNIHVzZQotRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbGVnYWN5IC0td2l0aC1jYXRhbG9nIC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC1mZXhjZXB0aW9ucyIKLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKLUVYVFJBX09FQ09ORl9saW51eHN0ZGJhc2UgPSAiLS13aXRoLWRlYnVnIC0td2l0aC1sZWdhY3kgLS13aXRoLWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCi0KLSMgcmVxdWlyZWQgZm9yIHB5dGhvbiBiaW5kaW5nCi1leHBvcnQgSE9TVF9TWVMKLWV4cG9ydCBCVUlMRF9TWVMKLWV4cG9ydCBTVEFHSU5HX0xJQkRJUgotZXhwb3J0IFNUQUdJTkdfSU5DRElSCi0KLXB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKLSAgICAjIGF1dG9uYW1lciB3b3VsZCBjYWxsIHRoaXMgbGlieG1sMi0yLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGF0Ci0gICAgaWYgZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpOgotICAgICAgICBkLnNldFZhcignUEtHX2xpYnhtbDInLCAnJHtNTFBSRUZJWH1saWJ4bWwyJykKLX0KLQotUEFDS0FHRVMgKz0gIiR7UE59LXV0aWxzICR7UE59LXB5dGhvbiIKLQotRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmEiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94bWwyQ29uZi5zaCAke2xpYmRpcn0vY21ha2UvKiIKLUZJTEVTXyR7UE59LXV0aWxzICs9ICIke2JpbmRpcn0vKiIKLUZJTEVTXyR7UE59LXB5dGhvbiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCi0KLWRvX2luc3RhbGxfcHRlc3QgKCkgewotCWNwIC1yICR7V09SS0RJUn0veG1sY29uZiAke0R9JHtQVEVTVF9QQVRIfQotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4NzRiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuNC5iYgpAQCAtMCwwICsxLDc1IEBACitTVU1NQVJZID0gIlhNTCBDIFBhcnNlciBMaWJyYXJ5IGFuZCBUb29sa2l0IgorREVTQ1JJUFRJT04gPSAiVGhlIFhNTCBQYXJzZXIgTGlicmFyeSBhbGxvd3MgZm9yIG1hbmlwdWxhdGlvbiBvZiBYTUwgZmlsZXMuICBMaWJ4bWwyIGV4cG9ydHMgUHVzaCBhbmQgUHVsbCB0eXBlIHBhcnNlciBpbnRlcmZhY2VzIGZvciBib3RoIFhNTCBhbmQgSFRNTC4gIEl0IGNhbiBkbyBEVEQgdmFsaWRhdGlvbiBhdCBwYXJzZSB0aW1lLCBvbiBhIHBhcnNlZCBkb2N1bWVudCBpbnN0YW5jZSBvciB3aXRoIGFuIGFyYml0cmFyeSBEVEQuICBMaWJ4bWwyIGluY2x1ZGVzIGNvbXBsZXRlIFhQYXRoLCBYUG9pbnRlciBhbmQgWGluY2x1ZGUgaW1wbGVtZW50YXRpb25zLiAgSXQgYWxzbyBoYXMgYSBTQVggbGlrZSBpbnRlcmZhY2UsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBFeHBhdC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnhtbHNvZnQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PWxpYnhtbDIiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodDttZDU9MjA0NDQxN2UyZTUwMDZiNjVhOGI5MDY3YjY4M2ZjZjEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaGFzaC5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTU7bWQ1PTk2ZjcyOTY2MDVlYWU4MDc2NzBmYjA4OTQ3ODI5OTY5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpc3QuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTEzO21kNT1jZGJmYTNkZWU1MWMwOTllZGIwNGUzOWY3NjJlZTkwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmlvLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0xNDttZDU9NmMwMjU3NTNjODZkOTU4NzIyZWM3NmU5NGNhZTkzMmUiCisKK0RFUEVORFMgPSAiemxpYiB2aXJ0dWFsL2xpYmljb252IgorCitTUkNfVVJJID0gImZ0cDovL3htbHNvZnQub3JnL2xpYnhtbDIvbGlieG1sMi0ke1BWfS50YXIuZ3o7bmFtZT1saWJ0YXIgXAorICAgICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9YTUwvVGVzdC94bWx0czIwMDgwODI3LnRhci5nejtuYW1lPXRlc3R0YXIgXAorICAgICAgICAgICBmaWxlOi8vbGlieG1sLTY0Yml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Fuc2lkZWNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bnRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbGlidGFyLm1kNXN1bV0gPSAiYWUyNDkxNjVjMTczYjFmZjM4NmVlOGFkNjc2ODE1ZjUiCitTUkNfVVJJW2xpYnRhci5zaGEyNTZzdW1dID0gImZmYjkxMTE5MWU1MDliOTY2ZGViNTVkZTcwNTM4N2YxNDE1NmUxYTU2YjIxODI0MzU3Y2RmMDA1MzIzMzYzM2MiCitTUkNfVVJJW3Rlc3R0YXIubWQ1c3VtXSA9ICJhZTNkMWViZTAwMGEzOTcyYWZhMTA0Y2E3ZjBlMWI0YSIKK1NSQ19VUklbdGVzdHRhci5zaGEyNTZzdW1dID0gIjk2MTUxNjg1Y2VjOTk3ZTFmOWYzMzg3ZTM2MjZkNjFlNjI4NGQ0ZDZlNjZlMGU0NDBjMjA5Mjg2YzAzZTljYzciCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veG1sMi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgcHl0aG9ubmF0aXZlIHB0ZXN0CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHl0aG9uICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIgorCitleHBvcnQgUFlUSE9OX1NJVEVfUEFDS0FHRVM9IiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtQWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uIgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKKworIyBXQVJOSU5HOiB6bGliIGlzIHJlcXVpcmUgZm9yIFJQTSB1c2UKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZGVidWcgLS13aXRob3V0LWxlZ2FjeSAtLXdpdGgtY2F0YWxvZyAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtZmV4Y2VwdGlvbnMiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1sZWdhY3kgLS13aXRob3V0LWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aG91dC1sZWdhY3kgLS13aXRob3V0LWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCitFWFRSQV9PRUNPTkZfbGludXhzdGRiYXNlID0gIi0td2l0aC1kZWJ1ZyAtLXdpdGgtbGVnYWN5IC0td2l0aC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC16bGliIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgIyBhdXRvbmFtZXIgd291bGQgY2FsbCB0aGlzIGxpYnhtbDItMiwgYnV0IHdlIGRvbid0IHdhbnQgdGhhdAorICAgIGlmIGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKToKKyAgICAgICAgZC5zZXRWYXIoJ1BLR19saWJ4bWwyJywgJyR7TUxQUkVGSVh9bGlieG1sMicpCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS11dGlscyAke1BOfS1weXRob24iCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veG1sMkNvbmYuc2ggJHtsaWJkaXJ9L2NtYWtlLyoiCitGSUxFU18ke1BOfS11dGlscyArPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1weXRob24gKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBleGVjdXRhYmxlcyB0YWtlIGxvbmdlciB0byBwYWNrYWdlOiB0aGVzZSBzaG91bGQgbm90IGJlIGV4ZWN1dGFibGUKKwlmaW5kICR7V09SS0RJUn0veG1sY29uZi8gLXR5cGUgZiAtZXhlYyBjaG1vZCAteCB7fSBcKworfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwljcCAtciAke1dPUktESVJ9L3htbGNvbmYgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCmluZGV4IGU5NTc4Y2EuLjU4MDhjOTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL2J1aWxkdG9vbHMtdGFyYmFsbC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIKQEAgLTEsNCArMSw0IEBACi1ERVNDUklQVElPTiA9ICJTREsgdHlwZSB0YXJnZXQgZm9yIGJ1aWxkaW5nIGEgc3RhbmRhbG9uZSB0YXJiYWxsIGNvbnRhaW5pbmcgcHl0aG9uLCBjaHJwYXRoLCBtYWtlLCBnaXQgYW5kIHRhci4gVGhlIFwKK0RFU0NSSVBUSU9OID0gIlNESyB0eXBlIHRhcmdldCBmb3IgYnVpbGRpbmcgYSBzdGFuZGFsb25lIHRhcmJhbGwgY29udGFpbmluZyBweXRob24zLCBjaHJwYXRoLCBtYWtlLCBnaXQgYW5kIHRhci4gVGhlIFwKICAgICAgICAgICAgICAgIHRhcmJhbGwgY2FuIGJlIHVzZWQgdG8gcnVuIGJpdGJha2UgYnVpbGRzIG9uIHN5c3RlbXMgd2hpY2ggZG9uJ3QgbWVldCB0aGUgdXN1YWwgdmVyc2lvbiByZXF1aXJlbWVudHMuIgogU1VNTUFSWSA9ICJTdGFuZGFsb25lIHRhcmJhbGwgZm9yIHJ1bm5pbmcgYnVpbGRzIG9uIHN5c3RlbXMgd2l0aCBpbmFkZXF1YXRlIHNvZnR3YXJlIgogTElDRU5TRSA9ICJNSVQiCkBAIC04LDExICs4LDEwIEBACiBUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiIKIAogVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAiXAotICAgIG5hdGl2ZXNkay1weXRob24tY29yZSBcCi0gICAgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIFwKLSAgICBuYXRpdmVzZGstcHl0aG9uLW1pc2MgXAotICAgIG5hdGl2ZXNkay1weXRob24tZ2l0IFwKLSAgICBuYXRpdmVzZGstcHl0aG9uLXBleHBlY3QgXAorICAgIG5hdGl2ZXNkay1weXRob24zLWNvcmUgXAorICAgIG5hdGl2ZXNkay1weXRob24zLW1vZHVsZXMgXAorICAgIG5hdGl2ZXNkay1weXRob24zLW1pc2MgXAorICAgIG5hdGl2ZXNkay1weXRob24zLWdpdCBcCiAgICAgbmF0aXZlc2RrLW5jdXJzZXMtdGVybWluZm8tYmFzZSBcCiAgICAgbmF0aXZlc2RrLWNocnBhdGggXAogICAgIG5hdGl2ZXNkay10YXIgXApAQCAtMjQsMTEgKzIzLDE4IEBACiAgICAgbmF0aXZlc2RrLXdnZXQgXAogICAgIG5hdGl2ZXNkay1jYS1jZXJ0aWZpY2F0ZXMgXAogICAgIG5hdGl2ZXNkay10ZXhpbmZvIFwKKyAgICBuYXRpdmVzZGstbG9jYWxlLWJhc2UtZW4tdXMgXAogICAgICIKIAorTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAiJHtTREtfQVJDSH0tbmF0aXZlc2RrJHtTREtfVkVORE9SfS0ke1NES19PU30iCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH1fJHtTREtfT1N9IgorUEFDS0FHRV9BUkNIUyA9ICIiCitUQVJHRVRfQVJDSCA9ICJub25lIgorVEFSR0VUX09TID0gIm5vbmUiCisKIFNES19QQUNLQUdFX0FSQ0hTICs9ICJidWlsZHRvb2xzLWR1bW15LSR7U0RLUEtHU1VGRklYfSIKIAotVE9PTENIQUlOX09VVFBVVE5BTUUgPz0gIiR7U0RLX05BTUV9LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtJHtESVNUUk9fVkVSU0lPTn0iCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtTREtfQVJDSH0tYnVpbGR0b29scy1uYXRpdmVzZGstc3RhbmRhbG9uZS0ke0RJU1RST19WRVJTSU9OfSIKIAogU0RLX1RJVExFID0gIkJ1aWxkIHRvb2xzIgogCkBAIC0zOCw3ICs0NCwxNyBAQAogCiBpbmhlcml0IG1ldGEKIGluaGVyaXQgcG9wdWxhdGVfc2RrCi1pbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzLWJhc2UKK2luaGVyaXQgbm9wYWNrYWdlcworCitkZWx0YXNrIGluc3RhbGwKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwb3B1bGF0ZV9zeXNyb290CisKK2RvX3BvcHVsYXRlX3Nka1tzdGFtcC1leHRyYS1pbmZvXSA9ICIke1BBQ0tBR0VfQVJDSH0iCisKK1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAibm9uZSIKIAogY3JlYXRlX3Nka19maWxlc19hcHBlbmQgKCkgewogCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9zaXRlLWNvbmZpZy0qCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYgppbmRleCA0OWQ0NWY2Li5kOWUwNDVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQuYmIKQEAgLTEyLDYgKzEyLDggQEAKIAogaW5oZXJpdCB0b29sY2hhaW4tc2NyaXB0cwogVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRV9hcHBlbmQgPSAiIHpsaWIiCisjIE5lZWQgdG8gZXhwYW5kIGhlcmUgYmVmb3JlIGNyb3NzLWNhbmRpYW4gY2hhbmdlcyBIT1NUX0FSQ0ggLT4gU0RLX0FSQ0gKK1RPT0xDSEFJTl9DT05GSUdTSVRFX05PQ0FDSEUgOj0gIiR7VE9PTENIQUlOX0NPTkZJR1NJVEVfTk9DQUNIRX0iCiAKIFNES19ESVIgPSAiJHtXT1JLRElSfS9zZGsiCiBTREtfT1VUUFVUID0gIiR7U0RLX0RJUn0vaW1hZ2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWV4dHNkay10b29sY2hhaW4uYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWV4dHNkay10b29sY2hhaW4uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkOWE1YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZXh0c2RrLXRvb2xjaGFpbi5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkV4dGVuc2libGUgU0RLIHRvb2xjaGFpbiBtZXRhLXJlY2lwZSIKK0RFU0NSSVBUSU9OID0gIk1ldGEtcmVjaXBlIGZvciBlbnN1cmluZyB0aGUgYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCBhcHByb3ByaWF0ZSB0b29sY2hhaW4gcGFja2FnZXMgZm9yIHVzaW5nIGFuIElERSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJjIGdkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSBxZW11LW5hdGl2ZSBxZW11LWhlbHBlci1uYXRpdmUgdW5mczMtbmF0aXZlIgorCitkb19wb3B1bGF0ZV9zeXNyb290W2RlcHRhc2tdID0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKKyMgTk9URTogVGhlcmUgaXMgbG9naWMgc3BlY2lmaWMgdG8gdGhpcyByZWNpcGUgaW4gc2V0c2NlbmVfZGVwdmFsaWQoKQorIyB3aXRoaW4gc3N0YXRlLmJiY2xhc3MsIHNvIGlmIHlvdSBjb3B5IG9yIHJlbmFtZSB0aGlzIGFuZCBleHBlY3QgdGhlIHNhbWUKKyMgZnVuY3Rpb25hbGl0eSB5b3UnbGwgbmVlZCB0byBtb2RpZnkgdGhhdCBhcyB3ZWxsLgorCitMT0NLRURfU0lHU19JTkRJUiA9ICIke0R9L2xvY2tlZC1zaWdzIgorCithZGR0YXNrIGRvX2xvY2tlZF9zaWdzIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK1NTVEFURVRBU0tTICs9ICJkb19sb2NrZWRfc2lncyIKK2RvX2xvY2tlZF9zaWdzW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7TE9DS0VEX1NJR1NfSU5ESVJ9IgorZG9fbG9ja2VkX3NpZ3Nbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vbG9ja2VkLXNpZ3MiCisKK3B5dGhvbiBkb19sb2NrZWRfc2lncygpIHsKKyAgICBpbXBvcnQgb2UuY29weV9idWlsZHN5c3RlbQorICAgIG91dGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignTE9DS0VEX1NJR1NfSU5ESVInLCBUcnVlKSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0ZGlyKQorICAgIHNpZ2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3V0ZGlyLCAnbG9ja2VkLXNpZ3MtZXh0c2RrLXRvb2xjaGFpbi5pbmMnKQorICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0uZ2VuZXJhdGVfbG9ja2VkX3NpZ3Moc2lnZmlsZSwgZCkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWlkZS1zdXBwb3J0LmJiCmluZGV4IDg2YzU3Y2QuLmM0ZGRjZmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1pZGUtc3VwcG9ydC5iYgpAQCAtNyw3ICs3LDcgQEAKIERFUEVORFMgPSAidmlydHVhbC9saWJjIGdkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSBxZW11LW5hdGl2ZSBxZW11LWhlbHBlci1uYXRpdmUgdW5mczMtbmF0aXZlIgogUFIgPSAicjMiCiAKLWluaGVyaXQgbWV0YSB0b29sY2hhaW4tc2NyaXB0cworaW5oZXJpdCBtZXRhIHRvb2xjaGFpbi1zY3JpcHRzIG5vcGFja2FnZXMKIAogZG9fcG9wdWxhdGVfaWRlX3N1cHBvcnQgKCkgewogICB0b29sY2hhaW5fY3JlYXRlX3RyZWVfZW52X3NjcmlwdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS13b3JsZC1wa2dkYXRhLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS13b3JsZC1wa2dkYXRhLmJiCmluZGV4IDNjNWRiNTAuLjgxYzg2NDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtd29ybGQtcGtnZGF0YS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXdvcmxkLXBrZ2RhdGEuYmIKQEAgLTEsNSArMSw2IEBACiBTVU1NQVJZID0gIlB1bGxzIGluIHBrZ2RhdGEgZm9yIHdvcmxkIgogTElDRU5TRSA9ICJNSVQiCisKIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCiAKIGFkZHRhc2sgZG9fYWxscGFja2FnZWRhdGEgYmVmb3JlIGRvX2J1aWxkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9zaWduaW5nLWtleXMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9zaWduaW5nLWtleXMuYmIKaW5kZXggZTg0MzMwMS4uMzc3OTAzNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvc2lnbmluZy1rZXlzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3NpZ25pbmcta2V5cy5iYgpAQCAtMSw3ICsxLDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCiAjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCiAKLURFU0NSSVBUSU9OID0gIk1ha2UgcHVibGljIGtleXMgb2YgdGhlIHNpZ25pbmcga2V5cyBhdmFpbGFibGUiCitTVU1NQVJZID0gIk1ha2VzIHB1YmxpYyBrZXlzIG9mIHRoZSBzaWduaW5nIGtleXMgYXZhaWxhYmxlIgogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKQEAgLTEyLDYgKzEyLDggQEAKIEVYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgogSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKIAorU1lTUk9PVF9ESVJTICs9ICIke3N5c2NvbmZkaXJ9L3BraSIKKwogUEFDS0FHRVMgPSsgIiR7UE59LWlwayAke1BOfS1ycG0gJHtQTn0tcGFja2FnZWZlZWQiCiAKIEZJTEVTXyR7UE59LXJwbSA9ICIke3N5c2NvbmZkaXJ9L3BraS9ycG0tZ3BnIgpAQCAtNTQsMTAgKzU2LDYgQEAKICAgICBmaQogfQogCi1zeXNyb290X3N0YWdlX2FsbF9hcHBlbmQgKCkgewotICAgIHN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke3N5c2NvbmZkaXJ9L3BraSAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3BraQotfQotCiBkb19kZXBsb3kgKCkgewogICAgIGlmIFsgLWYgIiR7Qn0vcnBtLWtleSIgXTsgdGhlbgogICAgICAgICBpbnN0YWxsIC1EIC1tIDA2NDQgIiR7Qn0vcnBtLWtleSIgIiR7REVQTE9ZRElSfS9SUE0tR1BHLUtFWS0ke0RJU1RST19WRVJTSU9OfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3Rlc3RleHBvcnQtdGFyYmFsbC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3Rlc3RleHBvcnQtdGFyYmFsbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTg2MWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdGVzdGV4cG9ydC10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTggQEAKK0RFU0NSSVBUSU9OID0gIlNESyB0eXBlIHRhcmdldCBmb3Igc3RhbmRhbG9uZSB0YXJiYWxsIGNvbnRhaW5pbmcgcGFja2FnZXMgZGVmaW5lZCBieSBURVNUX0VYUE9SVF9UT09MUy4gVGhlIFwKKyAgICAgICAgICAgICAgIHRhcmJhbGwgY2FuIGJlIHVzZWQgdG8gcnVuIG1pc3NpbmcgcHJvZ3JhbXMgb24gdGVzdGluZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgc3VjaCB0b29scy5cCisgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgYnVpbGR0b29scy10YXJiYWxsIgorU1VNTUFSWSA9ICJTdGFuZGFsb25lIHRhcmJhbGwgZm9yIHRlc3Qgc3lzdGVtcyB3aXRoIG1pc3Npbmcgc29mdHdhcmUiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitURVNUX0VYUE9SVF9TREtfUEFDS0FHRVMgPz89ICIiCisKK1RPT0xDSEFJTl9UQVJHRVRfVEFTSyA/PSAiIgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID89ICIke1RFU1RfRVhQT1JUX1NES19QQUNLQUdFU30iCisKK1NES19QQUNLQUdFX0FSQ0hTICs9ICJ0ZXNleHBvcnQtdG9vbHMtJHtTREtQS0dTVUZGSVh9IgorCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtURVNUX0VYUE9SVF9TREtfTkFNRX0iCisKK1NES19USVRMRSA9ICJUZXN0ZXhwb3J0IHRvb2xzIgorCitSREVQRU5EUyA9ICIke1RPT0xDSEFJTl9IT1NUX1RBU0t9IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworaW5oZXJpdCBtZXRhCitpbmhlcml0IHBvcHVsYXRlX3NkaworaW5oZXJpdCB0b29sY2hhaW4tc2NyaXB0cworCitjcmVhdGVfc2RrX2ZpbGVzX2FwcGVuZCAoKSB7CisJcm0gLWYgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3NpdGUtY29uZmlnLSoKKwlybSAtZiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtKgorCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS92ZXJzaW9uLSoKKworCSMgR2VuZXJhdGUgbmV3IChtaW5pKSBzZGstZW52aXJvbm1lbnQtc2V0dXAgZmlsZQorCXNjcmlwdD0kezE6LSR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0ke1NES19TWVN9fQorCXRvdWNoICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEFUSD0ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfTokUEFUSCcgPj4gJHNjcmlwdAorCSMgSW4gb3JkZXIgZm9yIHRoZSBzZWxmLWV4dHJhY3Rpb24gc2NyaXB0IHRvIGNvcnJlY3RseSBleHRyYWN0IGFuZCBzZXQgdXAgdGhpbmdzLAorCSMgd2UgbmVlZCBhICdPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9eHh4JyBsaW5lIGluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KKwkjIEhvd2V2ZXIsIHRlc3RleHBvcnQtdGFyYmFsbCBpcyBpbmhlcmVudGx5IGEgdG9vbCBzZXQgaW5zdGVhZCBvZiBhIGZ1bGx5IGZ1bmN0aW9uYWwgU0RLLAorCSMgc28gaW5zdGVhZCBvZiBleHBvcnRpbmcgdGhlIHZhcmlhYmxlLCB3ZSB1c2UgYSBjb21tZW50IGhlcmUuCisJZWNobyAnI09FQ09SRV9OQVRJVkVfU1lTUk9PVD0iJHtTREtQQVRITkFUSVZFfSInID4+ICRzY3JpcHQKKwl0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS92ZXJzaW9uLSR7U0RLX1NZU30KKworCWVjaG8gJ2V4cG9ydCBHSVRfU1NMX0NBSU5GTz0iJHtTREtQQVRITkFUSVZFfSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiJyA+PiRzY3JpcHQKKworCWlmIFsgIiR7U0RLTUFDSElORX0iID0gImk2ODYiIF07IHRoZW4KKwkJZWNobyAnZXhwb3J0IE5PMzJMSUJTPSIwIicgPj4kc2NyaXB0CisJCWVjaG8gJ2VjaG8gIiRCQl9FTlZfRVhUUkFXSElURSIgfCBncmVwIC1xICJOTzMyTElCUyInID4+JHNjcmlwdAorCQllY2hvICdbICQ/ICE9IDAgXSAmJiBleHBvcnQgQkJfRU5WX0VYVFJBV0hJVEU9Ik5PMzJMSUJTICRCQl9FTlZfRVhUUkFXSElURSInID4+JHNjcmlwdAorCWZpCit9CisKKyMgdGVzdGV4cG9ydC10YXJiYWxsIGRvZXNuJ3QgbmVlZCBjb25maWcgc2l0ZQorVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRSA9ICIiCisKKyMgVGhlIHJlY2lwZSBkb2Vzbid0IG5lZWQgYW55IGRlZmF1bHQgZGVwcworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIKaW5kZXggYTk4M2U0Mi4uZTIwM2E4MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIKQEAgLTE2LDYgKzE2LDEyIEBACiAKIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCiAKK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7U0RLX0FSQ0h9LW5hdGl2ZXNkayR7U0RLX1ZFTkRPUn0tJHtTREtfT1N9IgorUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9XyR7U0RLX09TfSIKK1BBQ0tBR0VfQVJDSFMgPSAiIgorVEFSR0VUX0FSQ0ggPSAibm9uZSIKK1RBUkdFVF9PUyA9ICJub25lIgorCiBUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtTREtfQVJDSH0tbmF0aXZlc2RrLWxpYmMiCiAKIFJERVBFTkRTID0gIiR7VE9PTENIQUlOX0hPU1RfVEFTS30iCkBAIC0yNCwxNCArMzAsMTkgQEAKIAogaW5oZXJpdCBtZXRhCiBpbmhlcml0IHBvcHVsYXRlX3NkaworaW5oZXJpdCBub3BhY2thZ2VzCiAKIGRlbHRhc2sgaW5zdGFsbAogZGVsdGFzayBwYWNrYWdlCiBkZWx0YXNrIHBhY2thZ2VkYXRhCitkZWx0YXNrIHBvcHVsYXRlX3N5c3Jvb3QKKworZG9fcG9wdWxhdGVfc2RrW3N0YW1wLWV4dHJhLWluZm9dID0gIiR7UEFDS0FHRV9BUkNIfSIKIAogU0RLX0RFUEVORFMgKz0gInBhdGNoZWxmLW5hdGl2ZSIKIAogU0RLX1BBQ0tBR0lOR19GVU5DID0gIiIKK1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAibm9uZSIKIAogZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKIAljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCkBAIC00NCwxMyArNTUsMTIgQEAKIAogCiBmYWtlcm9vdCB0YXJfc2RrKCkgewotCW1rZGlyIC1wICR7U0RLX0RFUExPWX0KIAljZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KIAogCURFU1Q9Ii4vJHtTREtfQVJDSH0tJHtTREtfT1N9IgogCW12IHN5c3Jvb3RzLyR7U0RLX1NZU30gJERFU1QKIAlybSBzeXNyb290cyAtcmYKLQlwYXRjaGVsZiAtLXNldC1pbnRlcnByZXRlciAke0AnJy5qb2luKCdhJyBmb3IgbiBpbiB4cmFuZ2UoMTAyNCkpfSAkREVTVC91c3IvYmluL3BhdGNoZWxmCisJcGF0Y2hlbGYgLS1zZXQtaW50ZXJwcmV0ZXIgJHtAJycuam9pbignYScgZm9yIG4gaW4gcmFuZ2UoMTAyNCkpfSAkREVTVC91c3IvYmluL3BhdGNoZWxmCiAJbXYgJERFU1QvdXNyL2Jpbi9wYXRjaGVsZiAkREVTVC91c3IvYmluL3BhdGNoZWxmLXVuaW5hdGl2ZQotCXRhciAke1NES1RBUk9QVFN9IC1jIC1qIC0tZmlsZT0ke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIgLgorCXRhciAke1NES1RBUk9QVFN9IC1jIC1qIC0tZmlsZT0ke1NES0RFUExPWURJUn0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MiAuCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbXVzbC9tdXNsLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2wuaW5jCmluZGV4IGQyNzg2N2YuLjdlZDkzMWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2wuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2wuaW5jCkBAIC05LDcgKzksNyBAQAogSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tdXNsLWxpYmMub3JnLyIKIExJQ0VOU0UgPSAiTUlUIgogU0VDVElPTiA9ICJsaWJzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0wODI0MTEzOTFiNGQxYWNlMGQzMGY0Yzg0MzE3Y2MwNSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9NzkyOGI3YWQzMmNlZGEwNDkzMjQ3OGUzMzBlNTJmN2YiCiAKIFBBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKIFRPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCkBAIC0xNywxMCArMTcsMTMgQEAKIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCiAKIFNUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKLVNUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX1NZU30iCiAKIAogRklMRVNfU09MSUJTREVWID0gIiIKIEZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKIElOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKIAorIyBEb2Vzbid0IGNvbXBpbGUgaW4gTUlQUzE2ZSBtb2RlIGR1ZSB0byB1c2Ugb2YgaGFuZC13cml0dGVuCisjIGFzc2VtYmx5CitNSVBTX0lOU1RSVUNUSU9OX1NFVCA9ICJtaXBzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL211c2wvbXVzbF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbXVzbC9tdXNsX2dpdC5iYgppbmRleCBkNGY5ODE5Li5jMDcxMDFiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbXVzbC9tdXNsX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbXVzbC9tdXNsX2dpdC5iYgpAQCAtMyw5ICszLDkgQEAKIAogcmVxdWlyZSBtdXNsLmluYwogCi1TUkNSRVYgPSAiNTk3OGViNzAzY2UwZTY0ZGQ3NzhhODhjMWZmZmZiNzZmZTVlMjIwMiIKK1NSQ1JFViA9ICIzOTQ5NGEyNzNlYWE2YjcxNGUwZmEwYzU5Y2U3YTFmNWZiYzgwYTFlIgogCi1QViA9ICIxLjEuMTQrZ2l0JHtTUkNQVn0iCitQViA9ICIxLjEuMTUrZ2l0JHtTUkNQVn0iCiAKICMgbWlycm9yIGlzIGF0IGdpdDovL2dpdGh1Yi5jb20va3Jhai9tdXNsLmdpdAogCkBAIC0yNiw4ICsyNiw2IEBACiAKIGV4cG9ydCBDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IgogCi1FWFRSQV9PRU1BS0UgPSAiIgotCiBMREZMQUdTICs9ICItV2wsLXNvbmFtZSxsaWJjLnNvIgogCiBDT05GSUdVUkVPUFRTID0gIiBcCkBAIC01Miw2ICs1MCwxMCBAQAogCiAJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CiAJbG4gLXMgLi4vLi4vJHtsaWJkaXJ9L2xpYmMuc28gJHtEfSR7YmluZGlyfS9sZGQKKwlmb3IgbCBpbiBjcnlwdCBkbCBtIHB0aHJlYWQgcmVzb2x2IHJ0IHV0aWwgeG5ldAorCWRvCisJCWxuIC1zIGxpYmMuc28gJHtEfSR7bGliZGlyfS9saWIkbC5zbworCWRvbmUKIH0KIAogUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJsaW51eC1saWJjLWhlYWRlcnMtZGV2IGJzZC1oZWFkZXJzLWRldiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNi4wKzIwMTYwMjEzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc182LjArMjAxNjAyMTMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNTY0ODEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc182LjArMjAxNjAyMTMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1yZXF1aXJlIG5jdXJzZXMuaW5jCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly90aWMtaGFuZy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vY29uZmlnLmNhY2hlIFwKLSIKLSMgY29tbWl0IGlkIGNvcnJlc3BvbmRzIHRvIHRoZSByZXZpc2lvbiBpbiBwYWNrYWdlIHZlcnNpb24KLVNSQ1JFViA9ICJhMjU5NDlmZjY1M2FjNWFlN2EyMDQzODFhM2ViZmQ4MDBmZWVhYTAxIgotUyA9ICIke1dPUktESVJ9L2dpdCIKLUVYVFJBX09FQ09ORiArPSAiLS13aXRoLWFiaS12ZXJzaW9uPTUiCi1VUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKyhcK1xkKykqKSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNi4wKzIwMTYwNjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc182LjArMjAxNjA2MjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxNDYxMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNi4wKzIwMTYwNjI1LmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgbmN1cnNlcy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL3RpYy1oYW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWcuY2FjaGUgXAorIgorIyBjb21taXQgaWQgY29ycmVzcG9uZHMgdG8gdGhlIHJldmlzaW9uIGluIHBhY2thZ2UgdmVyc2lvbgorU1JDUkVWID0gIjYzZGQ1NThjYjhlODg4ZDZmYWI1ZjAwYmJmNzg0MjczNmEyMzU2YjkiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorRVhUUkFfT0VDT05GICs9ICItLXdpdGgtYWJpLXZlcnNpb249NSIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKFwrXGQrKSopIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZV81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYgppbmRleCBjY2Q4OWZmLi41NDM1OTZhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYgpAQCAtNiwxMyArNiwxNCBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCiBQRSA9ICIxIgogCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9uL25ldGJhc2UvbmV0YmFzZV8ke1BWfS50YXIueHogXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9uLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKICAgICAgICAgICAgZmlsZTovL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2hvc3RzIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMjYzN2EyN2ZkM2RlMDJhMjc4ZDJiNWJlN2U2NTU4YzEiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFmNmM2OTc5NTA0NGQ2MmI4YWQ5NTljZjlkYWYwNDlkMDU0NWZkNDY2YzUyODYwYWQzZjkzM2IxZTk3Yjg4YiIKIAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9uL25ldGJhc2UvIgogZG9faW5zdGFsbCAoKSB7CiAJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW44ICR7RH0ke3N5c2NvbmZkaXJ9CiAJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdHMgJHtEfSR7c3lzY29uZmRpcn0vaG9zdHMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCmluZGV4IDBjNmE1MzAuLjJjMmFiZWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdC5iYgpAQCAtMjQsNiArMjQsNyBAQAogICAgIG5hdGl2ZXNkay1tYWtlZGV2cyBcCiAgICAgbmF0aXZlc2RrLXNtYXJ0cG0gXAogICAgIG5hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHQgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICduYXRpdmVzZGstd2F5bGFuZCcsICcnLCBkKX0gXAogICAgICIKIAogUkRFUEVORFNfJHtQTn1fZGFyd2luID0gIlwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIKaW5kZXggOWU0MGIyOC4uMmU5NGZkZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIKQEAgLTEsNSArMSw0IEBACiBTVU1NQVJZID0gIk1lcmdlIG1hY2hpbmUgYW5kIGRpc3RybyBvcHRpb25zIHRvIGNyZWF0ZSBhIGJhc2ljIG1hY2hpbmUgdGFzay9wYWNrYWdlIgotTElDRU5TRSA9ICJNSVQiCiBQUiA9ICJyODMiCiAKICMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1ib290LmJiCmluZGV4IGJhYzkzYjguLjA0YmMwZjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYgpAQCAtNCw3ICs0LDYgQEAKIAogU1VNTUFSWSA9ICJNaW5pbWFsIGJvb3QgcmVxdWlyZW1lbnRzIgogREVTQ1JJUFRJT04gPSAiVGhlIG1pbmltYWwgc2V0IG9mIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGJvb3QgdGhlIHN5c3RlbSIKLUxJQ0VOU0UgPSAiTUlUIgogUFIgPSAicjE3IgogCiBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYgppbmRleCA3NGVkMjQ3Li43OGNjNjVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYgpAQCAtNCw3ICs0LDYgQEAKICMKIAogU1VNTUFSWSA9ICJFc3NlbnRpYWwgYnVpbGQgZGVwZW5kZW5jaWVzIgotTElDRU5TRSA9ICJNSVQiCiAKIGluaGVyaXQgcGFja2FnZWdyb3VwCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiCmluZGV4IGU3YjAxM2QuLmM0NTQ2M2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1Zy5iYgpAQCAtMSw1ICsxLDQgQEAKIFNVTU1BUlkgPSAiUmVtb3RlIGRlYnVnZ2luZyB0b29scyBmb3IgRWNsaXBzZSBpbnRlZ3JhdGlvbiIKLUxJQ0VOU0UgPSAiTUlUIgogCiBpbmhlcml0IHBhY2thZ2Vncm91cAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIKaW5kZXggMTg4MmQzYS4uYjM0NWUzMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLW5mcy5iYgpAQCAtMyw3ICszLDYgQEAKICMKIAogU1VNTUFSWSA9ICJORlMgcGFja2FnZSBncm91cHMiCi1MSUNFTlNFID0gIk1JVCIKIFBSID0gInIyIgogCiBpbmhlcml0IHBhY2thZ2Vncm91cApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCmluZGV4IGJlZTE2NjUuLmFjZWJhNzggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNkay5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIKQEAgLTMsNyArMyw2IEBACiAjCiAKIFNVTU1BUlkgPSAiU29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbHMiCi1MSUNFTlNFID0gIk1JVCIKIFBSID0gInI5IgogCiBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpAQCAtMzAsNiArMjksNyBAQAogU0FOSVRJWkVSUyA9ICJsaWJhc2FuLWRldiBsaWJ1YnNhbi1kZXYiCiBTQU5JVElaRVJTX2FhcmNoNjQgPSAiIgogU0FOSVRJWkVSU19taXBzID0gIiIKK1NBTklUSVpFUlNfbWlwc2VsID0gIiIKIFNBTklUSVpFUlNfbWlwczY0ID0gIiIKIFNBTklUSVpFUlNfbWlwczY0bjMyID0gIiIKIFNBTklUSVpFUlNfbmlvczIgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiCmluZGV4IGU5OTk0NmYuLjVlYzNmNmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIuYmIKQEAgLTEsNSArMSw0IEBACiBTVU1NQVJZID0gIkRyb3BiZWFyIFNTSCBjbGllbnQvc2VydmVyIgotTElDRU5TRSA9ICJNSVQiCiBQUiA9ICJyMSIKIAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIKaW5kZXggMzJkMjBlNi4uNzAzZjk1NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIKQEAgLTEsNSArMSw0IEBACiBTVU1NQVJZID0gIk9wZW5TU0ggU1NIIGNsaWVudC9zZXJ2ZXIiCi1MSUNFTlNFID0gIk1JVCIKIFBSID0gInIxIgogCiBpbmhlcml0IHBhY2thZ2Vncm91cApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiCmluZGV4IDY5OTdmMzkuLjI3NGUxMWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQuYmIKQEAgLTEsNiArMSw1IEBACiBTVU1NQVJZID0gIlRhcmdldCBwYWNrYWdlcyBmb3IgdGhlIHN0YW5kYWxvbmUgU0RLIgogUFIgPSAicjgiCi1MSUNFTlNFID0gIk1JVCIKIAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgppbmRleCA4MjM0N2I5Li45ZmMyYjBlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgpAQCAtMyw3ICszLDYgQEAKICMKIAogU1VNTUFSWSA9ICJEZWJ1Z2dpbmcgdG9vbHMiCi1MSUNFTlNFID0gIk1JVCIKIAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKaW5kZXggZmYyYjU3Ny4uZGQ5ODQ0NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiCkBAIC0zLDcgKzMsNiBAQAogIwogCiBTVU1NQVJZID0gIlByb2ZpbGluZyB0b29scyIKLUxJQ0VOU0UgPSAiTUlUIgogCiBQUiA9ICJyMyIKIApAQCAtMTIsOCArMTEsOSBAQAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAKIAogUFJPRklMRV9UT09MU19YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3N5c3Byb2YnLCAnJywgZCl9IgotIyBzeXNwcm9mIGRvZXNuJ3Qgc3VwcG9ydCBhYXJjaDY0CisjIHN5c3Byb2YgZG9lc24ndCBzdXBwb3J0IGFhcmNoNjQgYW5kIG5pb3MyCiBQUk9GSUxFX1RPT0xTX1hfYWFyY2g2NCA9ICIiCitQUk9GSUxFX1RPT0xTX1hfbmlvczIgPSAiIgogUFJPRklMRV9UT09MU19TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kLWFuYWx5emUnLCAnJywgZCl9IgogCiBSUkVDT01NRU5EU18ke1BOfSA9ICJcCkBAIC0zNyw2ICszNyw3IEBACiBTWVNURU1UQVBfbGliYy11Y2xpYmMgPSAiIgogU1lTVEVNVEFQX2xpYmMtbXVzbCA9ICIiCiBTWVNURU1UQVBfbWlwcyA9ICIiCitTWVNURU1UQVBfbWlwc2VsID0gIiIKIFNZU1RFTVRBUF9taXBzNjQgPSAiIgogU1lTVEVNVEFQX21pcHM2NG4zMiA9ICIiCiBTWVNURU1UQVBfbmlvczIgPSAiIgpAQCAtNTksMTYgKzYwLDE5IEBACiAKIEJBQkVMVFJBQ0UgPSAiYmFiZWx0cmFjZSIKIAotIyB2YWxncmluZCBkb2VzIG5vdCB3b3JrIG9uIG1pcHMKKyMgdmFsZ3JpbmQgZG9lcyBub3Qgd29yayBvbiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zL2FyY2hpdGVjdHVyZXMKIAogVkFMR1JJTkQgPSAidmFsZ3JpbmQiCiBWQUxHUklORF9saWJjLXVjbGliYyA9ICIiCiBWQUxHUklORF9saWJjLW11c2wgPSAiIgogVkFMR1JJTkRfbWlwcyA9ICIiCitWQUxHUklORF9taXBzZWwgPSAiIgogVkFMR1JJTkRfbWlwczY0ID0gIiIKIFZBTEdSSU5EX21pcHM2NG4zMiA9ICIiCiBWQUxHUklORF9uaW9zMiA9ICIiCi1WQUxHUklORF9hcm0gPSAiIgorVkFMR1JJTkRfYXJtdjQgPSAiIgorVkFMR1JJTkRfYXJtdjUgPSAiIgorVkFMR1JJTkRfYXJtdjYgPSAiIgogVkFMR1JJTkRfYWFyY2g2NCA9ICIiCiAKIFJERVBFTkRTXyR7UE59ID0gIlwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIKaW5kZXggZThkNTg1ZS4uMzE3MDk3OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIKQEAgLTMsNyArMyw2IEBACiAjCiAKIFNVTU1BUlkgPSAiVGVzdGluZyB0b29scy9hcHBsaWNhdGlvbnMiCi1MSUNFTlNFID0gIk1JVCIKIAogUFIgPSAicjIiCiAKQEAgLTE4LDcgKzE3LDYgQEAKIAogWDExR0xUT09MUyA9ICJcCiAgICAgbWVzYS1kZW1vcyBcCi0gICAgcGlnbGl0IFwKICAgICAiCiAKIDNHVE9PTFMgPSAiXApAQCAtMjcsNyArMjUsNyBAQAogCiBYMTFUT09MUyA9ICJcCiAgICAgZnN0ZXN0cyBcCi0gICAgZ3N0LXBsYXllci1iaW4gXAorICAgIGdzdC1wbGF5ZXIgXAogICAgIHgxMXBlcmYgXAogICAgIHhyZXN0b3AgXAogICAgIHh3aW5pbmZvIFwKQEAgLTM3LDggKzM1LDYgQEAKIAogUkRFUEVORFNfJHtQTn0gPSAiXAogICAgIGJsa3Rvb2wgXAotICAgIHRzbGliLWNhbGlicmF0ZSBcCi0gICAgdHNsaWItdGVzdHMgXAogICAgIGxyenN6IFwKICAgICAke0tFWEVDVE9PTFN9IFwKICAgICBhbHNhLXV0aWxzLWFtaXhlciBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIKaW5kZXggMTgwZGQ5Ni4uZDU1MTE0NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi5iYgpAQCAtMSw2ICsxLDUgQEAKIFNVTU1BUlkgPSAiSG9zdCBTREsgcGFja2FnZSBmb3IgY3Jvc3MgY2FuYWRpYW4gdG9vbGNoYWluIgogUE4gPSAicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCi1MSUNFTlNFID0gIk1JVCIKIAogaW5oZXJpdCBjcm9zcy1jYW5hZGlhbiBwYWNrYWdlZ3JvdXAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCmluZGV4IDIyNTIwNGQuLjczNDMwYjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIKQEAgLTUsNyArNSw2IEBACiBTVU1NQVJZID0gIlNlbGYtaG9zdGluZyIKIERFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHJ1biB0aGUgYnVpbGQgc3lzdGVtIgogUFIgPSAicjEzIgotTElDRU5TRSA9ICJNSVQiCiAKIGluaGVyaXQgcGFja2FnZWdyb3VwICBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKICMgcmRlcGVuZHMgb24gbGlieDExLWRldgpAQCAtMjksOSArMjgsNiBAQAogICAgICIKIAogUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgPSAiXAotICAgIGNvbm5tYW4gXAotICAgIGNvbm5tYW4tcGx1Z2luLWV0aGVybmV0IFwKLSAgICBkaGNwLWNsaWVudCBcCiAgICAgZTJmc3Byb2dzIFwKICAgICBlMmZzcHJvZ3MtZTJmc2NrIFwKICAgICBlMmZzcHJvZ3MtbWtlMmZzIFwKQEAgLTEyNSw4ICsxMjEsNiBAQAogICAgIGdyb2ZmIFwKICAgICBnemlwIFwKICAgICBzZXR0aW5ncy1kYWVtb24gXAotICAgIGhpY29sb3ItaWNvbi10aGVtZSBcCi0gICAgc2F0by1pY29uLXRoZW1lIFwKICAgICBsaWJhaW8gXAogICAgIGxpYnVzYjEgXAogICAgIGxpYnhtbDIgXApAQCAtMTUzLDExICsxNDcsMTEgQEAKICAgICBwZXJsLW1vZHVsZXMgXAogICAgIHBlcmwtcG9kIFwKICAgICBweXRob24gXAotICAgIHB5dGhvbi1jb21waWxlciBcCi0gICAgcHl0aG9uLWdpdCBcCi0gICAgcHl0aG9uLW1pc2MgXAogICAgIHB5dGhvbi1tb2R1bGVzIFwKLSAgICBweXRob24tcnBtIFwKKyAgICBweXRob24tZ2l0IFwKKyAgICBweXRob24zIFwKKyAgICBweXRob24zLW1vZHVsZXMgXAorICAgIHB5dGhvbjMtZ2l0IFwKICAgICBxdW90YSBcCiAgICAgcmVhZGxpbmUgXAogICAgIHJwbSBcCkBAIC0xOTEsMTAgKzE4NSwxMCBAQAogICAgIGxpYnNkbCBcCiAgICAgbGlic2RsLWRldiBcCiAgICAgbGlieDExLWRldiBcCi0gICAgZ3RrLXRoZW1lLWNsZWFybG9va3MgXAorICAgIGFkd2FpdGEtaWNvbi10aGVtZSBcCiAgICAgeGRnLXV0aWxzIFwKICAgICBlcGlwaGFueSBcCi0gICAgbGVhZnBhZCBcCisgICAgbDNhZnBhZCBcCiAgICAgcGNtYW5mbSBcCiAgICAgdnRlIFwKICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYwppbmRleCAzNWRmOGI0Li4xYTBhMTU1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS5pbmMKQEAgLTMyLDYgKzMyLDggQEAKIAlvZV9saWJpbnN0YWxsIC1zbyAtQyBzaGxpYiBsaWJyZWFkbGluZSAke0R9JHtsaWJkaXJ9CiAKIAlybWRpciAke0R9JHtiaW5kaXJ9CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9LyR7QlBOfS8qLmMKKwlybWRpciAke0R9JHtkYXRhZGlyfS8ke0JQTn0gfHwgdHJ1ZQogCiAJaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0ke3N5c2NvbmZkaXJ9CiAJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5wdXRyYyAke0R9JHtzeXNjb25mZGlyfS9pbnB1dHJjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCmluZGV4IDBiOGZmMDkuLjQyMWZjMDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCkBAIC05LDEwICs5LDEyIEBACiAKIFMgPSAiJHtXT1JLRElSfSIKIAotaW5oZXJpdCBhbGxhcmNoCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjawogCiBBTExPV19FTVBUWV8ke1BOfSA9ICIxIgogCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAic3lzdGVtZCIKKwogU1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTID0gIiBcCiAgIGJ1c3lib3gtdWRoY3BjIFwKICAgaHdjbG9jayBcCkBAIC0yMywyMSArMjUsMjQgQEAKICIKIAogcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKLQljZCAkRCR7c3lzY29uZmRpcn0vaW5pdC5kCisKKwljZCAkRCR7c3lzY29uZmRpcn0vaW5pdC5kICB8fCAgZXhpdCAwCiAKIAllY2hvICJEaXNhYmxpbmcgdGhlIGZvbGxvd2luZyBzeXN2IHNjcmlwdHM6ICIKIAotCU9QVFM9IiIKLQogCWlmIFsgLW4gIiREIiBdOyB0aGVuCiAJCU9QVFM9Ii0tcm9vdD0kRCIKKwllbHNlCisJCU9QVFM9IiIKIAlmaQogCiAJZm9yIGkgaW4gJHtTWVNURU1EX0RJU0FCTEVEX1NZU1ZfU0VSVklDRVN9IDsgZG8KLQkJaWYgWyBcKCAtZSAkaSAtbyAkaS5zaCBcKSAtYSAhIFwoIC1lICREJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS8kaS5zZXJ2aWNlIC1vICAtZSAkRCR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJGkuc2VydmljZSBcKSBdIDsgdGhlbgotCQkJZWNobyAtbiAiJGk6ICIgOyBzeXN0ZW1jdGwgJHtPUFRTfSBtYXNrICRpLnNlcnZpY2UKKwkJaWYgWyAtZSAkaSAtbyAtZSAkaS5zaCBdICAmJiAgICEgWyAtZSAkRCR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vJGkuc2VydmljZSAtbyAtZSAkRCR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJGkuc2VydmljZSBdIDsgdGhlbgorCQkJZWNobyAtbiAiJGk6ICIKKwkJCXN5c3RlbWN0bCAkT1BUUyBtYXNrICRpLnNlcnZpY2UKIAkJZmkKLQlkb25lIDsgZWNobworCWRvbmUKKwllY2hvCiB9CiAKLVJEUEVQRU5EU18ke1BOfSA9ICJzeXN0ZW1kIgorUkRFUEVORFNfJHtQTn0gPSAic3lzdGVtZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwMGY0MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQuaW5jCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiQSBTeXN0ZW0gYW5kIHNlcnZpY2UgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZCIKKworREVTQ1JJUFRJT04gPSAic3lzdGVtZCBpcyBhIHN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIGZvciBMaW51eCwgY29tcGF0aWJsZSB3aXRoIFwKK1N5c1YgYW5kIExTQiBpbml0IHNjcmlwdHMuIHN5c3RlbWQgcHJvdmlkZXMgYWdncmVzc2l2ZSBwYXJhbGxlbGl6YXRpb24gXAorY2FwYWJpbGl0aWVzLCB1c2VzIHNvY2tldCBhbmQgRC1CdXMgYWN0aXZhdGlvbiBmb3Igc3RhcnRpbmcgc2VydmljZXMsIFwKK29mZmVycyBvbi1kZW1hbmQgc3RhcnRpbmcgb2YgZGFlbW9ucywga2VlcHMgdHJhY2sgb2YgcHJvY2Vzc2VzIHVzaW5nIFwKK0xpbnV4IGNncm91cHMsIHN1cHBvcnRzIHNuYXBzaG90dGluZyBhbmQgcmVzdG9yaW5nIG9mIHRoZSBzeXN0ZW0gXAorc3RhdGUsIG1haW50YWlucyBtb3VudCBhbmQgYXV0b21vdW50IHBvaW50cyBhbmQgaW1wbGVtZW50cyBhbiBcCitlbGFib3JhdGUgdHJhbnNhY3Rpb25hbCBkZXBlbmRlbmN5LWJhc2VkIHNlcnZpY2UgY29udHJvbCBsb2dpYy4gSXQgY2FuIFwKK3dvcmsgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBzeXN2aW5pdC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuR1BMMjttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworU1JDUkVWID0gIjNhNzRkNGZjOTBjYjMyMmE0Nzg0YTM1MTViZWY3MTE4YzhmOGM1YmEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQuZ2l0O3Byb3RvY29sPWdpdCIKKworUFYgPSAiMjMwK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAtbHNzcF9ub25zaGFyZWQgLWxzc3AgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWRlZmluZS1leHAxMC1pZi1taXNzaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWRlZmluZS1leHAxMC1pZi1taXNzaW5nLnBhdGNoCmluZGV4IGYxODMyNjEuLmU2MmQ1ODAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1kZWZpbmUtZXhwMTAtaWYtbWlzc2luZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtZGVmaW5lLWV4cDEwLWlmLW1pc3NpbmcucGF0Y2gKQEAgLTEsNiArMSwzIEBACi1Gcm9tIDY5OTg5M2EwNWVkYWM1MTk0Zjk2NzA1MjliYWNmYWViNjcyNTJlZGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCAxNCBEZWMgMjAxNSAwMDo0Mjo0OSArMDAwMAogU3ViamVjdDogW1BBVENIIDAzLzM2XSBkZWZpbmUgZXhwMTAgaWYgbWlzc2luZwogCiBJbnNwaXJlZCBieTogaHR0cDovL3BldGVyLmtvcnNnYWFyZC5jb20vcGF0Y2hlcy9hbHNhLXV0aWxzL2Fsc2FtaXhlci1maXgtYnVpbGQtb24tdUNsaWJjLWV4cDEwLnBhdGNoCkBAIC0xMSwyMyArOCwyNSBAQAogCiBTaWduZWQtb2ZmLWJ5OiBTYW11ZWwgTWFydGluIDxzLm1hcnRpbjQ5QGdtYWlsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKIC0tLQogIHNyYy9iYXNpYy9taXNzaW5nLmggfCA1ICsrKysrCiAgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL21pc3NpbmcuaCBiL3NyYy9iYXNpYy9taXNzaW5nLmgKLWluZGV4IGYzZDMyMzYuLmVlN2U3ZWEgMTAwNjQ0CitpbmRleCA2NTFlNDE0Li5mYWZhMjMzIDEwMDY0NAogLS0tIGEvc3JjL2Jhc2ljL21pc3NpbmcuaAogKysrIGIvc3JjL2Jhc2ljL21pc3NpbmcuaAotQEAgLTExNjksMyArMTE2OSw4IEBAIHN0YXRpYyBpbmxpbmUga2V5X3NlcmlhbF90IHJlcXVlc3Rfa2V5KGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uCi0gI2VuZGlmCitAQCAtMTAxMyw0ICsxMDEzLDkgQEAgdHlwZWRlZiBpbnQzMl90IGtleV9zZXJpYWxfdDsKICAKICAjZW5kaWYKLSsKKyAKICsjaWZkZWYgX19VQ0xJQkNfXwogKy8qIDEwXnggPSAxMF4obG9nIGVeeCkgPSAoZV54KV5sb2cxMCA9IGVeKHggKiBsb2cgMTApICovCiArI2RlZmluZSBleHAxMCh4KSAoZXhwKCh4KSAqIGxvZygxMCkpKQogKyNlbmRpZiAvKiBfX1VDTElCQ19fICovCisrCisgI2luY2x1ZGUgIm1pc3Npbmdfc3lzY2FsbC5oIgogLS0gCi0xLjguMy4xCisyLjguMwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE0LU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaAppbmRleCA0YTU3NmFhLi4yZWVhMGZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTEsNiArMSwzIEBACi1Gcm9tIDc4Njg4M2NmYTEzZTIxZjA2MGVlNmRhNmNhYmI5NDg0NWY0MzQ5YTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCAxNCBEZWMgMjAxNSAwNToxODoyMCArMDAwMAogU3ViamVjdDogW1BBVENIIDE0LzM2XSBNYWtlIHJvb3QncyBob21lIGRpcmVjdG9yeSBjb25maWd1cmFibGUKIAogT3BlbkVtYmVkZGVkIGhhcyBhIGNvbmZpZ3VyYWJsZSBob21lIGRpcmVjdG9yeSBmb3Igcm9vdC4gQWxsb3cKQEAgLTE0LDYgKzExLDcgQEAKIAogU2lnbmVkLW9mZi1ieTogRGFuIE1jR3JlZ29yIDxkYW4ubWNncmVnb3JAdXNhc2suY2E+CiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCiAtLS0KICBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgfCAyICsrCiAgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgNyArKysrKysrCkBAIC0yNiwxMCArMjQsMTAgQEAKICA4IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggYjNmMzM0My4uYTk5ZThlYiAxMDA2NDQKK2luZGV4IDMwNTA5OWEuLjg4YzEyNTAgMTAwNjQ0CiAtLS0gYS9NYWtlZmlsZS5hbQogKysrIGIvTWFrZWZpbGUuYW0KLUBAIC0yMDIsNiArMjAyLDcgQEAgQU1fQ1BQRkxBR1MgPSBcCitAQCAtMjA2LDYgKzIwNiw3IEBAIEFNX0NQUEZMQUdTID0gXAogIAktRExJQkRJUj1cIiQobGliZGlyKVwiIFwKICAJLURST09UTElCRElSPVwiJChyb290bGliZGlyKVwiIFwKICAJLURST09UTElCRVhFQ0RJUj1cIiQocm9vdGxpYmV4ZWNkaXIpXCIgXApAQCAtMzcsNyArMzUsNyBAQAogIAktRFRFU1RfRElSPVwiJChhYnNfdG9wX3NyY2RpcikvdGVzdFwiIFwKICAJLUkgJCh0b3Bfc3JjZGlyKS9zcmMgXAogIAktSSAkKHRvcF9idWlsZGRpcikvc3JjL2Jhc2ljIFwKLUBAIC01NzEzLDYgKzU3MTQsNyBAQCBFWFRSQV9ESVNUICs9IFwKK0BAIC01ODYzLDYgKzU4NjQsNyBAQCBFWFRSQV9ESVNUICs9IFwKICBzdWJzdGl0dXRpb25zID0gXAogICAgICAgICAnfHJvb3RsaWJleGVjZGlyPSQocm9vdGxpYmV4ZWNkaXIpfCcgXAogICAgICAgICAnfHJvb3RiaW5kaXI9JChyb290YmluZGlyKXwnIFwKQEAgLTQ2LDEwICs0NCwxMCBAQAogICAgICAgICAnfFNZU1RFTUNUTD0kKHJvb3RiaW5kaXIpL3N5c3RlbWN0bHwnIFwKICAgICAgICAgJ3xTWVNURU1EX05PVElGWT0kKHJvb3RiaW5kaXIpL3N5c3RlbWQtbm90aWZ5fCcgXAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYzVhYjlkMC4uMTZjODNiYiAxMDA2NDQKK2luZGV4IDMyOTg2MWEuLjAxNzY0ZjUgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUuYWMKICsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTE0NzAsNiArMTQ3MCwxMSBAQCBBQ19BUkdfV0lUSChbcm9vdGxpYmRpcl0sCitAQCAtMTQ3OCw2ICsxNDc4LDExIEBAIEFDX0FSR19XSVRIKFtyb290bGliZGlyXSwKICAgICAgICAgIFt3aXRoX3Jvb3RsaWJkaXI9JHtsaWJkaXJ9XSkKICBBWF9OT1JNQUxJWkVfUEFUSChbd2l0aF9yb290bGliZGlyXSkKICAKQEAgLTYxLDcgKzU5LDcgQEAKICBBQ19BUkdfV0lUSChbcGFtbGliZGlyXSwKICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFtbGliZGlyPURJUl0sIFtEaXJlY3RvcnkgZm9yIFBBTSBtb2R1bGVzXSksCiAgICAgICAgICBbXSwKLUBAIC0xNTUzLDYgKzE1NTgsNyBAQCBBQ19TVUJTVChbcGFtbGliZGlyXSwgWyR3aXRoX3BhbWxpYmRpcl0pCitAQCAtMTU2Miw2ICsxNTY3LDcgQEAgQUNfU1VCU1QoW3BhbWxpYmRpcl0sIFskd2l0aF9wYW1saWJkaXJdKQogIEFDX1NVQlNUKFtwYW1jb25mZGlyXSwgWyR3aXRoX3BhbWNvbmZkaXJdKQogIEFDX1NVQlNUKFtyb290cHJlZml4XSwgWyR3aXRoX3Jvb3RwcmVmaXhdKQogIEFDX1NVQlNUKFtyb290bGliZGlyXSwgWyR3aXRoX3Jvb3RsaWJkaXJdKQpAQCAtNjksMTkgKzY3LDE5IEBACiAgCiAgQUNfQ09ORklHX0ZJTEVTKFsKICAgICAgICAgIE1ha2VmaWxlCi1AQCAtMTY0Myw2ICsxNjQ5LDcgQEAgQUNfTVNHX1JFU1VMVChbCi0gICAgICAgICBpbmNsdWRlZGlyOiAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfQotICAgICAgICAgbGliIGRpcjogICAgICAgICAgICAgICAgICR7bGliZGlyfQotICAgICAgICAgcm9vdGxpYiBkaXI6ICAgICAgICAgICAgICR7d2l0aF9yb290bGliZGlyfQotKyAgICAgICAgcm9vdCBob21lIGRpcjogICAgICAgICAgICR7d2l0aF9yb290aG9tZWRpcn0KLSAgICAgICAgIFN5c1YgaW5pdCBzY3JpcHRzOiAgICAgICAke1NZU1RFTV9TWVNWSU5JVF9QQVRIfQotICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9Ci0gICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CitAQCAtMTY1Myw2ICsxNjU5LDcgQEAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICBpbmNsdWRlZGlyOiAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0KKyAgICAgICAgIGxpYiBkaXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9CisgICAgICAgICByb290bGliIGRpcjogICAgICAgICAgICAgICAgICAgICAgICR7d2l0aF9yb290bGliZGlyfQorKyAgICAgICAgcm9vdCBob21lIGRpcjogICAgICAgICAgICAgICAgICAgICAke3dpdGhfcm9vdGhvbWVkaXJ9CisgICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9CisgICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgICAgICAgICAgICR7UFlUSE9OfQogZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91c2VyLXV0aWwuYyBiL3NyYy9iYXNpYy91c2VyLXV0aWwuYwotaW5kZXggMTkxNTViYy4uNTU2NzJiMyAxMDA2NDQKK2luZGV4IGY2NWNhM2UuLmRhMTEwMWEgMTAwNjQ0CiAtLS0gYS9zcmMvYmFzaWMvdXNlci11dGlsLmMKICsrKyBiL3NyYy9iYXNpYy91c2VyLXV0aWwuYwotQEAgLTEyMiw3ICsxMjIsNyBAQCBpbnQgZ2V0X3VzZXJfY3JlZHMoCitAQCAtMTIzLDcgKzEyMyw3IEBAIGludCBnZXRfdXNlcl9jcmVkcygKICAgICAgICAgICAgICAgICAgICAgICAgICAqZ2lkID0gMDsKICAKICAgICAgICAgICAgICAgICAgaWYgKGhvbWUpCkBAIC05MCw3ICs4OCw3IEBACiAgCiAgICAgICAgICAgICAgICAgIGlmIChzaGVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAqc2hlbGwgPSAiL2Jpbi9zaCI7Ci1AQCAtMzUzLDcgKzM1Myw3IEBAIGludCBnZXRfaG9tZV9kaXIoY2hhciAqKl9oKSB7CitAQCAtMzU0LDcgKzM1NCw3IEBAIGludCBnZXRfaG9tZV9kaXIoY2hhciAqKl9oKSB7CiAgICAgICAgICAvKiBIYXJkY29kZSBob21lIGRpcmVjdG9yeSBmb3Igcm9vdCB0byBhdm9pZCBOU1MgKi8KICAgICAgICAgIHUgPSBnZXR1aWQoKTsKICAgICAgICAgIGlmICh1ID09IDApIHsKQEAgLTEwMCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKICAKIGRpZmYgLS1naXQgYS9zcmMvY29yZS9uYW1lc3BhY2UuYyBiL3NyYy9jb3JlL25hbWVzcGFjZS5jCi1pbmRleCBiNTczZjAwLi4wZjcwYjE0IDEwMDY0NAoraW5kZXggMjAzZDEyMi4uNDVjMGQxMSAxMDA2NDQKIC0tLSBhL3NyYy9jb3JlL25hbWVzcGFjZS5jCiArKysgYi9zcmMvY29yZS9uYW1lc3BhY2UuYwotQEAgLTQwOSw3ICs0MDksNyBAQCBpbnQgc2V0dXBfbmFtZXNwYWNlKAorQEAgLTQxNSw3ICs0MTUsNyBAQCBpbnQgc2V0dXBfbmFtZXNwYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVfZGlyID0gc3Ryam9pbmEoIi0iLCBob21lX2Rpcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3VzZXJfZGlyID0gcHJlZml4X3Jvb3RhKHJvb3RfZGlyZWN0b3J5LCAiL3J1bi91c2VyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3VzZXJfZGlyID0gc3Ryam9pbmEoIi0iLCBydW5fdXNlcl9kaXIpOwpAQCAtMTEzLDI0ICsxMTEsMjQgQEAKICAKICAgICAgICAgICAgICAgICAgICAgICAgICByID0gYXBwZW5kX21vdW50cygmbSwgU1RSVl9NQUtFKGhvbWVfZGlyLCBydW5fdXNlcl9kaXIsIHJvb3RfZGlyKSwKIGRpZmYgLS1naXQgYS9zcmMvbnNwYXduL25zcGF3bi5jIGIvc3JjL25zcGF3bi9uc3Bhd24uYwotaW5kZXggNjVlNjVlYy4uMTJmMGVlOCAxMDA2NDQKK2luZGV4IDhlYzA1ODQuLjUxZGYwMGIgMTAwNjQ0CiAtLS0gYS9zcmMvbnNwYXduL25zcGF3bi5jCiArKysgYi9zcmMvbnNwYXduL25zcGF3bi5jCi1AQCAtMjU2NCw3ICsyNTY0LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKK0BAIC0yNzM5LDcgKzI3MzksNyBAQCBzdGF0aWMgaW50IGlubmVyX2NoaWxkKAogICAgICAgICAgaWYgKGVudnBbbl9lbnZdKQotICAgICAgICAgICAgICAgICBuX2VudiArKzsKKyAgICAgICAgICAgICAgICAgbl9lbnYrKzsKICAKIC0gICAgICAgIGlmICgoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiSE9NRT0lcyIsIGhvbWUgPyBob21lOiAiL3Jvb3QiKSA8IDApIHx8CiArICAgICAgICBpZiAoKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkhPTUU9JXMiLCBob21lID8gaG9tZTogUk9PVEhPTUVESVIpIDwgMCkgfHwKICAgICAgICAgICAgICAoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiVVNFUj0lcyIsIGFyZ191c2VyID8gYXJnX3VzZXIgOiAicm9vdCIpIDwgMCkgfHwKICAgICAgICAgICAgICAoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiTE9HTkFNRT0lcyIsIGFyZ191c2VyID8gYXJnX3VzZXIgOiAicm9vdCIpIDwgMCkpCiAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7Ci1AQCAtMjY0Nyw3ICsyNjQ3LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKLSAjZW5kaWYgLyogSEFWRV9FWEVDVlBFICovCitAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBpZiAoIWFyZ19jaGRpcikKLS0gICAgICAgICAgICAgICAgICAgICAgICBjaGRpcihob21lID86ICIvcm9vdCIpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKGhvbWUgPzogUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGNhbm5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSwgd2UnbGwgZW5kIHVwIGluIC8sIHRoYXQgaXMgZXhwZWN0ZWQuICovCistICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGNoZGlyKGhvbWUgPzogIi9yb290Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGNoZGlyKGhvbWUgPzogUk9PVEhPTUVESVIpOwogIAogICAgICAgICAgICAgICAgICBleGVjbGUoIi9iaW4vYmFzaCIsICItYmFzaCIsIE5VTEwsIGVudl91c2UpOwogICAgICAgICAgICAgICAgICBleGVjbGUoIi9iaW4vc2giLCAiLXNoIiwgTlVMTCwgZW52X3VzZSk7CkBAIC0xNTAsMTAgKzE0OCwxMCBAQAogIEV4ZWNTdG9wUG9zdD0tQFNZU1RFTUNUTEAgcG93ZXJvZmYKICBUeXBlPWlkbGUKIGRpZmYgLS1naXQgYS91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbiBiL3VuaXRzL2VtZXJnZW5jeS5zZXJ2aWNlLmluCi1pbmRleCBmYjM5MGVhLi41NjIzYTU3IDEwMDY0NAoraW5kZXggMGRlMTZmMi4uNDgyNjA2MiAxMDA2NDQKIC0tLSBhL3VuaXRzL2VtZXJnZW5jeS5zZXJ2aWNlLmluCiArKysgYi91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgotQEAgLTE0LDggKzE0LDggQEAgQ29uZmxpY3RzPXJlc2N1ZS5zZXJ2aWNlCitAQCAtMTUsOCArMTUsOCBAQCBDb25mbGljdHM9c3lzbG9nLnNvY2tldAogIEJlZm9yZT1zaHV0ZG93bi50YXJnZXQKICAKICBbU2VydmljZV0KQEAgLTE4MCw1ICsxNzgsNSBAQAogIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdXZWxjb21lIHRvIHJlc2N1ZSBtb2RlISBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxuYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCiAgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCiAtLSAKLTEuOC4zLjEKKzIuOC4zCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTUtc3lzdGVtZC11c2VyLWF2b2lkLXVzaW5nLXN5c3RlbS1hdXRoLnBhdGNoCmluZGV4IGEzNTEyMzcuLjZlNmYzNDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaApAQCAtMSw2ICsxLDMgQEAKLUZyb20gZjcwYTFhOTYwNWNkM2FkYWM0NTBjNDlhNWE2OWRhNmU5YWNkYTUxNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI2OjI1ICswMDAwCiBTdWJqZWN0OiBbUEFUQ0ggMTUvMzZdIHN5c3RlbWQtdXNlcjogYXZvaWQgdXNpbmcgc3lzdGVtLWF1dGgKIAogSW4gT0UsIHdlIGRvbid0IHByb3ZpZGUgc3lzdGVtLWF1dGgsIGluc3RlYWQsIHdlIHVzZSBjb21tb24tKiBmaWxlcy4KQEAgLTEwLDE1ICs3LDE2IEBACiAKIFNpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKIC0tLQogIHNyYy9sb2dpbi9zeXN0ZW1kLXVzZXIubTQgfCA0ICsrLS0KICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvc3JjL2xvZ2luL3N5c3RlbWQtdXNlci5tNCBiL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIubTQKLWluZGV4IDc5MzM1MDguLjE2YjczZDIgMTAwNjQ0CitpbmRleCBmMTg4YThlLi44NjJkOGQ3IDEwMDY0NAogLS0tIGEvc3JjL2xvZ2luL3N5c3RlbWQtdXNlci5tNAogKysrIGIvc3JjL2xvZ2luL3N5c3RlbWQtdXNlci5tNAotQEAgLTIsMTAgKzIsMTAgQEAKK0BAIC0yLDExICsyLDExIEBACiAgIwogICMgVXNlZCBieSBzeXN0ZW1kIC0tdXNlciBpbnN0YW5jZXMuCiAgCkBAIC0yOSw4ICsyNyw5IEBACiAgc2Vzc2lvbiAgcmVxdWlyZWQgcGFtX3NlbGludXguc28gY2xvc2UKICBzZXNzaW9uICByZXF1aXJlZCBwYW1fc2VsaW51eC5zbyBub3R0eXMgb3BlbgogICltNF9kbmwKKyBzZXNzaW9uICByZXF1aXJlZCBwYW1fbG9naW51aWQuc28KIC1zZXNzaW9uICBpbmNsdWRlIHN5c3RlbS1hdXRoCiArc2Vzc2lvbiAgaW5jbHVkZSBjb21tb24tc2Vzc2lvbgogLS0gCi0xLjguMy4xCisyLjguMwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTctUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNy1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoCmluZGV4IDhlNjI4OWQuLjY0MjYyNWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNy1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNy1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoCkBAIC0xLDYgKzEsMyBAQAotRnJvbSA5YTNhNGUxNmIzNmU3NjIyOTFjZDE1NzRlYzcxZDc5NTRmOGI1MzYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTQgRGVjIDIwMTUgMDU6MzM6MzIgKzAwMDAKIFN1YmplY3Q6IFtQQVRDSCAxNy8zNl0gUmV2ZXJ0ICJ1ZGV2OiByZW1vdmUgdXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcKICBzdXBwb3J0IgogCkBAIC0xMywyMSArMTAsMjEgQEAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAtLS0KICBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArKysKLSBSRUFETUUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQorIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiAgVE9ETyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgIHwgIDIyICsrKysrKwogIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIHwgMTU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi5jICAgICAgICAgIHwgICAzICsKICBzcmMvdWRldi91ZGV2LmggICAgICAgICAgICAgICAgICB8ICAgNiArKwogIHNyYy91ZGV2L3VkZXZkLmMgICAgICAgICAgICAgICAgIHwgIDEzICsrKysKLSA4IGZpbGVzIGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIDggZmlsZXMgY2hhbmdlZCwgMjEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCiAKIGRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi1pbmRleCBhOTllOGViLi5iNWM2YmE3IDEwMDY0NAoraW5kZXggMzA1MDk5YS4uZTc3NDk3NiAxMDA2NDQKIC0tLSBhL01ha2VmaWxlLmFtCiArKysgYi9NYWtlZmlsZS5hbQotQEAgLTM1NzMsNiArMzU3MywxOCBAQCBsaWJ1ZGV2X2NvcmVfbGFfTElCQUREID0gXAorQEAgLTM3MDYsNiArMzcwNiwxOCBAQCBsaWJ1ZGV2X2NvcmVfbGFfTElCQUREID0gXAogIAkkKEJMS0lEX0xJQlMpIFwKICAJJChLTU9EX0xJQlMpCiAgCkBAIC00NywxNyArNDQsMTAgQEAKICBsaWJ1ZGV2X2NvcmVfbGFfU09VUkNFUyArPSBcCiAgCXNyYy91ZGV2L3VkZXYtYnVpbHRpbi1rbW9kLmMKIGRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKLWluZGV4IDQxZmIwN2EuLjEwMjMwYWMgMTAwNjQ0CitpbmRleCBjYTg5OTNjLi44N2YzMjk3IDEwMDY0NAogLS0tIGEvUkVBRE1FCiArKysgYi9SRUFETUUKLUBAIC01MCwxNCArNTAsMTQgQEAgUkVRVUlSRU1FTlRTOgotICAgICAgICAgICBDT05GSUdfUFJPQ19GUwotICAgICAgICAgICBDT05GSUdfRkhBTkRMRSAobGlidWRldiwgbW91bnQgYW5kIGJpbmQgbW91bnQgaGFuZGxpbmcpCi0gCi0tICAgICAgICB1ZGV2IHdpbGwgZmFpbCB0byB3b3JrIHdpdGggdGhlIGxlZ2FjeSBzeXNmcyBsYXlvdXQ6Ci0rICAgICAgICBVZGV2IHdpbGwgZmFpbCB0byB3b3JrIHdpdGggdGhlIGxlZ2FjeSBsYXlvdXQ6Ci0gICAgICAgICAgIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPW4KLSAKK0BAIC01Niw4ICs1Niw4IEBAIFJFUVVJUkVNRU5UUzoKICAgICAgICAgIExlZ2FjeSBob3RwbHVnIHNsb3dzIGRvd24gdGhlIHN5c3RlbSBhbmQgY29uZnVzZXMgdWRldjoKICAgICAgICAgICAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iIgogIApAQCAtNjksMTEgKzU5LDExIEBACiAgCiAgICAgICAgICBTb21lIHVkZXYgcnVsZXMgYW5kIHZpcnR1YWxpemF0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gaXQ6CiBkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KLWluZGV4IDkyY2M4Y2MuLjI1ZjY4NDkgMTAwNjQ0CitpbmRleCBmYWM5Y2NmLi4yNjQ1NTgyIDEwMDY0NAogLS0tIGEvVE9ETwogKysrIGIvVE9ETwotQEAgLTYyOCw2ICs2MjgsNyBAQCBGZWF0dXJlczoKLSAqIHJlbmFtZSAidXNlcnNwYWNlIiB0byAiY29yZS1vcyIKK0BAIC02NDIsNiArNjQyLDcgQEAgRmVhdHVyZXM6CisgKiBpbml0aWFsaXplIHRoZSBob3N0bmFtZSBmcm9tIHRoZSBmcyBsYWJlbCBvZiAvLCBpZiAvZXRjL2hvc3RuYW1lIGRvZXMgbm90IGV4aXN0PwogIAogICogdWRldjoKICsgIC0gcmVtb3ZlIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIChDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSPW4pCkBAIC04MSwxMCArNzEsMTAgQEAKICAgIC0ga2lsbCBzY3NpX2lkCiAgICAtIGFkZCB0cmlnZ2VyIC0tc3Vic3lzdGVtLW1hdGNoPXVzYi91c2JfZGV2aWNlIGRldmljZQogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggMTZjODNiYi4uMzZkMjBiNSAxMDA2NDQKK2luZGV4IDMyOTg2MWEuLmFmODU0MDUgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUuYWMKICsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTEzNTMsNiArMTM1MywyNSBAQCBBQ19BUkdfRU5BQkxFKGh3ZGIsIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWh3ZGJdLCBbZGlzYWJsZSBoYXJkd2FyZSBkYXRhYmFzZQorQEAgLTEzNjEsNiArMTM2MSwyNSBAQCBBQ19BUkdfRU5BQkxFKGh3ZGIsIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWh3ZGJdLCBbZGlzYWJsZSBoYXJkd2FyZSBkYXRhYmFzZQogIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9IV0RCLCBbdGVzdCB4JGVuYWJsZV9od2RiID0geHllc10pCiAgCiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMywyMyArOTMsMjMgQEAKICtkb25lCiArSUZTPSRPTERfSUZTCiArQUNfU1VCU1QoRklSTVdBUkVfUEFUSCkKLStBU19JRihbdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iICE9ICJ4Il0sIFsgQUNfREVGSU5FKEhBVkVfRklSTVdBUkUsIDEsIFtEZWZpbmUgaWYgRklSTVdBUkUgaXMgYXZhaWxhYmxlXSkgXSkKKytBU19JRihbdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iICE9ICJ4Il0sIFsgQUNfREVGSU5FKEhBVkVfRklSTVdBUkUsIDEsIFtEZWZpbmUgaWYgRklSTVdBUkUgaXMgYXZhaWxhYmVdKSBdKQogK0FNX0NPTkRJVElPTkFMKEVOQUJMRV9GSVJNV0FSRSwgW3Rlc3QgIngke0ZJUk1XQVJFX1BBVEh9IiAhPSAieCJdKQogKwogKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgaGF2ZV9tYW5wYWdlcz1ubwogIEFDX0FSR19FTkFCTEUobWFucGFnZXMsIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbWFucGFnZXNdLCBbZGlzYWJsZSBtYW5wYWdlc10pKQogIEFDX1BBVEhfUFJPRyhbWFNMVFBST0NdLCBbeHNsdHByb2NdKQotQEAgLTE2NTMsNiArMTY3Miw5IEBAIEFDX01TR19SRVNVTFQoWwotICAgICAgICAgU3lzViBpbml0IHNjcmlwdHM6ICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9Ci0gICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgJHtTWVNURU1fU1lTVlJDTkRfUEFUSH0KLSAgICAgICAgIEJ1aWxkIFB5dGhvbjogICAgICAgICAgICAke1BZVEhPTn0KLSsgICAgICAgIEluc3RhbGxhdGlvbiBQeXRob246ICAgICAke1BZVEhPTl9CSU5BUll9Ci0rICAgICAgICBzcGhpbnggYmluYXJ5OiAgICAgICAgICAgJHtTUEhJTlhfQlVJTER9Ci0rICAgICAgICBmaXJtd2FyZSBwYXRoOiAgICAgICAgICAgJHtGSVJNV0FSRV9QQVRIfQotICAgICAgICAgUEFNIG1vZHVsZXMgZGlyOiAgICAgICAgICR7d2l0aF9wYW1saWJkaXJ9Ci0gICAgICAgICBQQU0gY29uZmlndXJhdGlvbiBkaXI6ICAgJHt3aXRoX3BhbWNvbmZkaXJ9Ci0gICAgICAgICBELUJ1cyBwb2xpY3kgZGlyOiAgICAgICAgJHt3aXRoX2RidXNwb2xpY3lkaXJ9CitAQCAtMTY1Niw2ICsxNjc1LDkgQEAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9CisgICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgICAgICAgICAgICR7UFlUSE9OfQorKyAgICAgICAgSW5zdGFsbGF0aW9uIFB5dGhvbjogICAgICAgICAgICAgICAke1BZVEhPTl9CSU5BUll9CisrICAgICAgICBzcGhpbnggYmluYXJ5OiAgICAgICAgICAgICAgICAgICAgICR7U1BISU5YX0JVSUxEfQorKyAgICAgICAgZmlybXdhcmUgcGF0aDogICAgICAgICAgICAgICAgICAgICAke0ZJUk1XQVJFX1BBVEh9CisgICAgICAgICBQQU0gbW9kdWxlcyBkaXI6ICAgICAgICAgICAgICAgICAgICR7d2l0aF9wYW1saWJkaXJ9CisgICAgICAgICBQQU0gY29uZmlndXJhdGlvbiBkaXI6ICAgICAgICAgICAgICR7d2l0aF9wYW1jb25mZGlyfQorICAgICAgICAgRC1CdXMgcG9saWN5IGRpcjogICAgICAgICAgICAgICAgICAke3dpdGhfZGJ1c3BvbGljeWRpcn0KIGRpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYyBiL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCiBuZXcgZmlsZSBtb2RlIDEwMDY0NAogaW5kZXggMDAwMDAwMC4uYmQ4YzJmYgpAQCAtMjk1LDEwICsyODUsMTAgQEAKICAgICAgICAgIFtVREVWX0JVSUxUSU5fSU5QVVRfSURdID0gJnVkZXZfYnVpbHRpbl9pbnB1dF9pZCwKICAgICAgICAgIFtVREVWX0JVSUxUSU5fS0VZQk9BUkRdID0gJnVkZXZfYnVpbHRpbl9rZXlib2FyZCwKIGRpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2LmggYi9zcmMvdWRldi91ZGV2LmgKLWluZGV4IDFmOWM4MTIuLmZhMzVhODggMTAwNjQ0CitpbmRleCA4NDMzZThkLi5kMzIzNjZkIDEwMDY0NAogLS0tIGEvc3JjL3VkZXYvdWRldi5oCiArKysgYi9zcmMvdWRldi91ZGV2LmgKLUBAIC0xNDcsNiArMTQ3LDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKK0BAIC0xNDgsNiArMTQ4LDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKICAgICAgICAgIFVERVZfQlVJTFRJTl9CTEtJRCwKICAjZW5kaWYKICAgICAgICAgIFVERVZfQlVJTFRJTl9CVFJGUywKQEAgLTMwOCw3ICsyOTgsNyBAQAogICAgICAgICAgVURFVl9CVUlMVElOX0hXREIsCiAgICAgICAgICBVREVWX0JVSUxUSU5fSU5QVVRfSUQsCiAgICAgICAgICBVREVWX0JVSUxUSU5fS0VZQk9BUkQsCi1AQCAtMTc1LDYgKzE3OCw5IEBAIHN0cnVjdCB1ZGV2X2J1aWx0aW4geworQEAgLTE3Niw2ICsxNzksOSBAQCBzdHJ1Y3QgdWRldl9idWlsdGluIHsKICBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fYmxraWQ7CiAgI2VuZGlmCiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2J0cmZzOwpAQCAtMzE5LDcgKzMwOSw3IEBACiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2lucHV0X2lkOwogIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9rZXlib2FyZDsKIGRpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2ZC5jIGIvc3JjL3VkZXYvdWRldmQuYwotaW5kZXggYmI5MmYxNi4uODQwMjRhYyAxMDA2NDQKK2luZGV4IGU5ZGQyZjQuLjBhYmMyOGUgMTAwNjQ0CiAtLS0gYS9zcmMvdWRldi91ZGV2ZC5jCiArKysgYi9zcmMvdWRldi91ZGV2ZC5jCiBAQCAtMTI1LDYgKzEyNSw5IEBAIHN0cnVjdCBldmVudCB7CkBAIC0zMzIsNyArMzIyLDcgQEAKICB9OwogIAogIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50ICpub2RlX3RvX2V2ZW50KHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbm9kZSkgewotQEAgLTYxMyw2ICs2MTYsMTAgQEAgc3RhdGljIGludCBldmVudF9xdWV1ZV9pbnNlcnQoTWFuYWdlciAqbWFuYWdlciwgc3RydWN0IHVkZXZfZGV2aWNlICpkZXYpIHsKK0BAIC02MTQsNiArNjE3LDEwIEBAIHN0YXRpYyBpbnQgZXZlbnRfcXVldWVfaW5zZXJ0KE1hbmFnZXIgKm1hbmFnZXIsIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2KSB7CiAgICAgICAgICBldmVudC0+ZGV2bnVtID0gdWRldl9kZXZpY2VfZ2V0X2Rldm51bShkZXYpOwogICAgICAgICAgZXZlbnQtPmlzX2Jsb2NrID0gc3RyZXEoImJsb2NrIiwgdWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShkZXYpKTsKICAgICAgICAgIGV2ZW50LT5pZmluZGV4ID0gdWRldl9kZXZpY2VfZ2V0X2lmaW5kZXgoZGV2KTsKQEAgLTM0Myw3ICszMzMsNyBAQAogIAogICAgICAgICAgbG9nX2RlYnVnKCJzZXEgJWxsdSBxdWV1ZWQsICclcycgJyVzJyIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZGV2KSwKICAgICAgICAgICAgICAgdWRldl9kZXZpY2VfZ2V0X2FjdGlvbihkZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOwotQEAgLTY5OCw2ICs3MDUsMTIgQEAgc3RhdGljIGJvb2wgaXNfZGV2cGF0aF9idXN5KE1hbmFnZXIgKm1hbmFnZXIsIHN0cnVjdCBldmVudCAqZXZlbnQpIHsKK0BAIC02OTksNiArNzA2LDEyIEBAIHN0YXRpYyBib29sIGlzX2RldnBhdGhfYnVzeShNYW5hZ2VyICptYW5hZ2VyLCBzdHJ1Y3QgZXZlbnQgKmV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgIH0KICAKQEAgLTM1Nyw1ICszNDcsNSBAQAogICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRldnBhdGhbY29tbW9uXSA9PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC0+ZGVsYXlpbmdfc2VxbnVtID0gbG9vcF9ldmVudC0+c2VxbnVtOwogLS0gCi0xLjguMy4xCisyLjguMwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTgtbWFrZS10ZXN0LWRpci1jb25maWd1cmFibGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTgtbWFrZS10ZXN0LWRpci1jb25maWd1cmFibGUucGF0Y2gKaW5kZXggNWYzZjJlOC4uNWQxM2U0YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE4LW1ha2UtdGVzdC1kaXItY29uZmlndXJhYmxlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxOC1tYWtlLXRlc3QtZGlyLWNvbmZpZ3VyYWJsZS5wYXRjaApAQCAtMSw2ICsxLDMgQEAKLUZyb20gNTY5Y2QzY2Y5ODA2YTAyMjI2ZDI2YzQxMDRkYmU0NDI2MmY5M2QzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KLURhdGU6IEZyaSwgMjIgSmFuIDIwMTYgMTY6NDQ6MTEgKzA4MDAKIFN1YmplY3Q6IFtQQVRDSCAxOC8zNl0gbWFrZSB0ZXN0IGRpciBjb25maWd1cmFibGUKIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCkBAIC05LDE2ICs2LDE3IEBACiBpcyBub3QgdGhlIGNvbXBpbGF0aW9uIGRpciwgc28gbWFrZSBpdCBjb25maWd1cmFibGUKIAogU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCiAtLS0KICBNYWtlZmlsZS5hbSAgfCAyICstCiAgY29uZmlndXJlLmFjIHwgNyArKysrKysrCiAgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLWluZGV4IGI1YzZiYTcuLmQzY2Q5NjEgMTAwNjQ0CitpbmRleCBhOTQ2MzZhLi5kYmQzMzg2IDEwMDY0NAogLS0tIGEvTWFrZWZpbGUuYW0KICsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMjAzLDcgKzIwMyw3IEBAIEFNX0NQUEZMQUdTID0gXAorQEAgLTIwNyw3ICsyMDcsNyBAQCBBTV9DUFBGTEFHUyA9IFwKICAJLURST09UTElCRElSPVwiJChyb290bGliZGlyKVwiIFwKICAJLURST09UTElCRVhFQ0RJUj1cIiQocm9vdGxpYmV4ZWNkaXIpXCIgXAogIAktRFJPT1RIT01FRElSPVwiJChyb290aG9tZWRpcilcIiBcCkBAIC0yOCwxMCArMjYsMTAgQEAKICAJLUkgJCh0b3BfYnVpbGRkaXIpL3NyYy9iYXNpYyBcCiAgCS1JICQodG9wX3NyY2Rpcikvc3JjL2Jhc2ljIFwKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDM2ZDIwYjUuLmQ5NmRjNWEgMTAwNjQ0CitpbmRleCA0NWFhZThhLi5jNTNmYWUyIDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC0xNDk0LDYgKzE0OTQsMTEgQEAgQUNfQVJHX1dJVEgoW3Jvb3Rob21lZGlyXSwKK0BAIC0xNTE4LDYgKzE1MTgsMTEgQEAgQUNfQVJHX1dJVEgoW3Jvb3Rob21lZGlyXSwKICAgICAgICAgIFtdLAogICAgICAgICAgW3dpdGhfcm9vdGhvbWVkaXI9L3Jvb3RdKQogIApAQCAtNDMsNyArNDEsNyBAQAogIEFDX0FSR19XSVRIKFtwYW1saWJkaXJdLAogICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wYW1saWJkaXI9RElSXSwgW0RpcmVjdG9yeSBmb3IgUEFNIG1vZHVsZXNdKSwKICAgICAgICAgIFtdLAotQEAgLTE1NzgsNiArMTU4Myw3IEBAIEFDX1NVQlNUKFtwYW1jb25mZGlyXSwgWyR3aXRoX3BhbWNvbmZkaXJdKQorQEAgLTE2MDMsNiArMTYwOCw3IEBAIEFDX1NVQlNUKFtwYW1jb25mZGlyXSwgWyR3aXRoX3BhbWNvbmZkaXJdKQogIEFDX1NVQlNUKFtyb290cHJlZml4XSwgWyR3aXRoX3Jvb3RwcmVmaXhdKQogIEFDX1NVQlNUKFtyb290bGliZGlyXSwgWyR3aXRoX3Jvb3RsaWJkaXJdKQogIEFDX1NVQlNUKFtyb290aG9tZWRpcl0sIFskd2l0aF9yb290aG9tZWRpcl0pCkBAIC01MSwxNCArNDksMTQgQEAKICAKICBBQ19DT05GSUdfRklMRVMoWwogICAgICAgICAgTWFrZWZpbGUKLUBAIC0xNjY5LDYgKzE2NzUsNyBAQCBBQ19NU0dfUkVTVUxUKFsKLSAgICAgICAgIGxpYiBkaXI6ICAgICAgICAgICAgICAgICAke2xpYmRpcn0KLSAgICAgICAgIHJvb3RsaWIgZGlyOiAgICAgICAgICAgICAke3dpdGhfcm9vdGxpYmRpcn0KLSAgICAgICAgIHJvb3QgaG9tZSBkaXI6ICAgICAgICAgICAke3dpdGhfcm9vdGhvbWVkaXJ9Ci0rICAgICAgICB0ZXN0IGRpcjogICAgICAgICAgICAgICAgJHt3aXRoX3Rlc3RkaXJ9Ci0gICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgJHtTWVNURU1fU1lTVklOSVRfUEFUSH0KLSAgICAgICAgIFN5c1YgcmM/LmQgZGlyZWN0b3JpZXM6ICAke1NZU1RFTV9TWVNWUkNORF9QQVRIfQotICAgICAgICAgQnVpbGQgUHl0aG9uOiAgICAgICAgICAgICR7UFlUSE9OfQorQEAgLTE2OTUsNiArMTcwMSw3IEBAIEFDX01TR19SRVNVTFQoWworICAgICAgICAgbGliIGRpcjogICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0KKyAgICAgICAgIHJvb3RsaWIgZGlyOiAgICAgICAgICAgICAgICAgICAgICAgJHt3aXRoX3Jvb3RsaWJkaXJ9CisgICAgICAgICByb290IGhvbWUgZGlyOiAgICAgICAgICAgICAgICAgICAgICR7d2l0aF9yb290aG9tZWRpcn0KKysgICAgICAgIHRlc3QgZGlyOiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt3aXRoX3Rlc3RkaXJ9CisgICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9CisgICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgICAgICAgICAgICR7UFlUSE9OfQogLS0gCi0xLjguMy4xCisyLjguMwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMjMtYnVpbGQtc3lzLWZpeC1idWlsZC13aXRoLWxpYmdyY3lwdC1kaXNhYmxlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAyMy1idWlsZC1zeXMtZml4LWJ1aWxkLXdpdGgtbGliZ3JjeXB0LWRpc2FibGVkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWUzZDY2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAyMy1idWlsZC1zeXMtZml4LWJ1aWxkLXdpdGgtbGliZ3JjeXB0LWRpc2FibGVkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLUZyb20gYjY4ZjEwYmYxZjc1MTllMDEyZGE1ZTM1ZmFiM2E1N2RhN2RjNDZkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRGLTg/cT9aYmlnbmlldz0yMEo9QzQ9OTlkcnplamV3c2tpLVN6bWVrPz0gPHpieXN6ZWtAaW4ud2F3LnBsPgotRGF0ZTogU3VuLCAyNyBNYXIgMjAxNiAxNzozMzo1NCAtMDQwMAotU3ViamVjdDogW1BBVENIXSBidWlsZC1zeXM6IGZpeCBidWlsZCB3aXRoIGxpYmdyY3lwdCBkaXNhYmxlZAotCi0tIE1vdmUgZ2NyeXB0LmggaW5jbHVkZSBpbnNpZGUgZ3JjcnlwdC11dGlsLmguCi0tIEFsbG93IGdjcnlwdC11dGlsLltjaF0gdG8gYmUgY29tcGlsZWQgZXZlbiB3aXRob3V0IGdjcnlwdC4KLVRoaXMgYWxsb3dzIHRoZSBsb2dpYyBpbiBmaWxlcyB1c2luZyBnY3J5cHQgdG8gYmUgc2ltcGxpZmllZC4KLQotLSBGaXggY29tcGlsYXRpb24gb2Ygc3lzdGVtZC1yZXNvbHZlIHdpdGhvdXQgZ2NyeXB0Lgotc3lzdGVtZC1yZXNvbHZlZCBhbHJlYWR5IHN1cHBvcnRlZCB0aGF0LgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsgaHR0cHM6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC9wdWxsLzI5MDUgXQotCi1GaXhlcyBbWU9DVE8gIzkyMTldCi0KLVNpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgotLS0tCi0gTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgfCAgOCArKysrLS0tLQotIHNyYy9yZXNvbHZlL3Jlc29sdmUtdG9vbC5jIHwgIDMgKy0tCi0gc3JjL3NoYXJlZC9nY3J5cHQtdXRpbC5jICAgfCAgNCArKystCi0gc3JjL3NoYXJlZC9nY3J5cHQtdXRpbC5oICAgfCAxNCArKysrKysrKysrKysrKwotIDQgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLWluZGV4IDJiNzJhNTMuLjk1ZWFhOWEgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5hbQotKysrIGIvTWFrZWZpbGUuYW0KLUBAIC00MjYyLDcgKzQyNjIsOSBAQCBsaWJzeXN0ZW1kX2pvdXJuYWxfaW50ZXJuYWxfbGFfU09VUkNFUyA9IFwKLSAJc3JjL2pvdXJuYWwvbW1hcC1jYWNoZS5oIFwKLSAJc3JjL2pvdXJuYWwvY29tcHJlc3MuYyBcCi0gCXNyYy9qb3VybmFsL2F1ZGl0LXR5cGUuaCBcCi0tCXNyYy9qb3VybmFsL2F1ZGl0LXR5cGUuYwotKwlzcmMvam91cm5hbC9hdWRpdC10eXBlLmMgXAotKwlzcmMvc2hhcmVkL2djcnlwdC11dGlsLmggXAotKwlzcmMvc2hhcmVkL2djcnlwdC11dGlsLmMKLSAKLSBub2Rpc3RfbGlic3lzdGVtZF9qb3VybmFsX2ludGVybmFsX2xhX1NPVVJDRVMgPSBcCi0gCXNyYy9qb3VybmFsL2F1ZGl0X3R5cGUtdG8tbmFtZS5oCi1AQCAtNDI5NCw5ICs0Mjk2LDcgQEAgbGlic3lzdGVtZF9qb3VybmFsX2ludGVybmFsX2xhX1NPVVJDRVMgKz0gXAotIAlzcmMvam91cm5hbC9qb3VybmFsLWF1dGhlbnRpY2F0ZS5jIFwKLSAJc3JjL2pvdXJuYWwvam91cm5hbC1hdXRoZW50aWNhdGUuaCBcCi0gCXNyYy9qb3VybmFsL2ZzcHJnLmMgXAotLQlzcmMvam91cm5hbC9mc3ByZy5oIFwKLS0Jc3JjL3NoYXJlZC9nY3J5cHQtdXRpbC5jIFwKLS0Jc3JjL3NoYXJlZC9nY3J5cHQtdXRpbC5oCi0rCXNyYy9qb3VybmFsL2ZzcHJnLmgKLSAKLSBsaWJzeXN0ZW1kX2pvdXJuYWxfaW50ZXJuYWxfbGFfTElCQUREICs9IFwKLSAJJChHQ1JZUFRfTElCUykKLWRpZmYgLS1naXQgYS9zcmMvcmVzb2x2ZS9yZXNvbHZlLXRvb2wuYyBiL3NyYy9yZXNvbHZlL3Jlc29sdmUtdG9vbC5jCi1pbmRleCAwMDljYzczLi4xNGVlMDFjIDEwMDY0NAotLS0tIGEvc3JjL3Jlc29sdmUvcmVzb2x2ZS10b29sLmMKLSsrKyBiL3NyYy9yZXNvbHZlL3Jlc29sdmUtdG9vbC5jCi1AQCAtMTcsNyArMTcsNiBAQAotICAgYWxvbmcgd2l0aCBzeXN0ZW1kOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKioqLwotIAotLSNpbmNsdWRlIDxnY3J5cHQuaD4KLSAjaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0gI2luY2x1ZGUgPG5ldC9pZi5oPgotIAotQEAgLTg2Myw3ICs4NjIsNyBAQCBzdGF0aWMgaW50IHJlc29sdmVfb3BlbnBncChzZF9idXMgKmJ1cywgY29uc3QgY2hhciAqYWRkcmVzcykgewotICAgICAgICAgfQotICAgICAgICAgZG9tYWluKys7Ci0gCi0tICAgICAgICByID0gc3RyaW5nX2hhc2hzdW0oYWRkcmVzcywgZG9tYWluIC0gMSAtIGFkZHJlc3MsIEdDUllfTURfU0hBMjI0LCAmaGFzaGVkKTsKLSsgICAgICAgIHIgPSBzdHJpbmdfaGFzaHN1bV9zaGEyMjQoYWRkcmVzcywgZG9tYWluIC0gMSAtIGFkZHJlc3MsICZoYXNoZWQpOwotICAgICAgICAgaWYgKHIgPCAwKQotICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX2Vycm9yX2Vycm5vKHIsICJIYXNoaW5nIGZhaWxlZDogJW0iKTsKLSAKLWRpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2djcnlwdC11dGlsLmMgYi9zcmMvc2hhcmVkL2djcnlwdC11dGlsLmMKLWluZGV4IDRmZjk0NTIuLjM5YjU0NGIgMTAwNjQ0Ci0tLS0gYS9zcmMvc2hhcmVkL2djcnlwdC11dGlsLmMKLSsrKyBiL3NyYy9zaGFyZWQvZ2NyeXB0LXV0aWwuYwotQEAgLTE5LDEwICsxOSwxMSBAQAotICAgYWxvbmcgd2l0aCBzeXN0ZW1kOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKioqLwotIAotKyNpZmRlZiBIQVZFX0dDUllQVAotICNpbmNsdWRlIDxnY3J5cHQuaD4KLSAKLS0jaW5jbHVkZSAiaGV4ZGVjb2N0LmgiCi0gI2luY2x1ZGUgImdjcnlwdC11dGlsLmgiCi0rI2luY2x1ZGUgImhleGRlY29jdC5oIgotIAotIHZvaWQgaW5pdGlhbGl6ZV9saWJnY3J5cHQoYm9vbCBzZWNtZW0pIHsKLSAgICAgICAgIGNvbnN0IGNoYXIgKnA7Ci1AQCAtNjcsMyArNjgsNCBAQCBpbnQgc3RyaW5nX2hhc2hzdW0oY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbiwgaW50IG1kX2FsZ29yaXRobSwgY2hhciAqKm91dCkgewotICAgICAgICAgKm91dCA9IGVuYzsKLSAgICAgICAgIHJldHVybiAwOwotIH0KLSsjZW5kaWYKLWRpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2djcnlwdC11dGlsLmggYi9zcmMvc2hhcmVkL2djcnlwdC11dGlsLmgKLWluZGV4IGM3NjUyYzIuLmNmMzNiM2MgMTAwNjQ0Ci0tLS0gYS9zcmMvc2hhcmVkL2djcnlwdC11dGlsLmgKLSsrKyBiL3NyYy9zaGFyZWQvZ2NyeXB0LXV0aWwuaAotQEAgLTE5LDcgKzE5LDIxIEBACi0gICBhbG9uZyB3aXRoIHN5c3RlbWQ7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqKiovCi0gCi0rI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSsjaW5jbHVkZSA8c3RkZGVmLmg+Ci0rCi0rI2lmZGVmIEhBVkVfR0NSWVBUCi0rI2luY2x1ZGUgPGdjcnlwdC5oPgotIAotIHZvaWQgaW5pdGlhbGl6ZV9saWJnY3J5cHQoYm9vbCBzZWNtZW0pOwotIGludCBzdHJpbmdfaGFzaHN1bShjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuLCBpbnQgbWRfYWxnb3JpdGhtLCBjaGFyICoqb3V0KTsKLSsjZW5kaWYKLSsKLStzdGF0aWMgaW5saW5lIGludCBzdHJpbmdfaGFzaHN1bV9zaGEyMjQoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbiwgY2hhciAqKm91dCkgewotKyNpZmRlZiBIQVZFX0dDUllQVAotKyAgICAgICAgcmV0dXJuIHN0cmluZ19oYXNoc3VtKHMsIGxlbiwgR0NSWV9NRF9TSEEyMjQsIG91dCk7Ci0rI2Vsc2UKLSsgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSsjZW5kaWYKLSt9Ci0tLSAKLTIuNC4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdWRldi1yZS1lbmFibGUtbW91bnQtcHJvcGFnYXRpb24tZm9yLXVkZXZkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC91ZGV2LXJlLWVuYWJsZS1tb3VudC1wcm9wYWdhdGlvbi1mb3ItdWRldmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlMjJkNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdWRldi1yZS1lbmFibGUtbW91bnQtcHJvcGFnYXRpb24tZm9yLXVkZXZkLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb206IE1pY2hhZWwgQmllYmwgPGJpZWJsQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDI3IFNlcCAyMDE0IDA0OjE5OjI0ICswMjAwCitTdWJqZWN0OiB1ZGV2OiByZS1lbmFibGUgbW91bnQgcHJvcGFnYXRpb24gZm9yIHVkZXZkCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHA6Ly9odHRwLmRlYmlhbi5uZXQvZGViaWFuL3Bvb2wvbWFpbi9zL3N5c3RlbWQvc3lzdGVtZF8yMTUtMTcrZGViOHU0LmRlYmlhbi50YXIueHpdCisKK2xhcHRvcC1tb2RlLXRvb2xzIHJlbW91bnRzIGZpbGUgc3lzdGVtcyBmcm9tIHdpdGhpbiBhIHVkZXYgcnVsZSB0byBhcHBseQorY2VydGFpbiBtb3VudCBvcHRpb25zLiBXaXRoIE1vdW50RmxhZ3M9c2xhdmUsIHRob3NlIG1vdW50cyB0aGVuIGJlY29tZSBwcml2YXRlCit0byB0aGUgc3lzdGVtZC11ZGV2ZCBuYW1lc3BhY2UgYW5kIGFyZSBubyBsb25nZXIgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlCituYW1lc3BhY2UuCitXaGlsZSB0aGUgcm9vdCBjYXVzZSBpcyB0aGUgYnJva2VuIGJlaGF2aW91ciBvZiBsYXB0b3AtbW9kZS10b29scywgd2l0aCBtb3VudAorcHJvcGFnYXRpb24gdHVybmVkIG9mZiwgdGhpcyBjYW4gcmVzdWx0IGluIGEgcmVhZC1vbmx5IHJvb3QgZmlsZSBzeXN0ZW0uCitUaGVyZWZvcmUgcmV2ZXJ0IHRoZSByZWxldmFudCBwYXJ0cyBmcm9tIGNvbW1pdAorYzJjMTNmMmRmNDJlMDY5MWFlY2FiZTM5NzllYTgxY2Q3ZmFhMzVjNyB0byByZS1lbmFibGUgbW91bnQgcHJvcGFnYXRpb24gZm9yCit1ZGV2ZC4KKworT25jZSBhZmZlY3RlZCBwYWNrYWdlcyBoYXZlIGJlZW4gZml4ZWQsIHRoaXMgcGF0Y2ggc2hvdWxkIGJlIGRyb3BwZWQKK2FnYWluLgorCitDbG9zZXM6ICM3NjIwMTgKK2RpZmYgLS1naXQgYS91bml0cy9zeXN0ZW1kLXVkZXZkLnNlcnZpY2UuaW4gYi91bml0cy9zeXN0ZW1kLXVkZXZkLnNlcnZpY2UuaW4KK2luZGV4IGU3MjE2ZDYuLjFlOWE2MDAgMTAwNjQ0CistLS0gYS91bml0cy9zeXN0ZW1kLXVkZXZkLnNlcnZpY2UuaW4KKysrKyBiL3VuaXRzL3N5c3RlbWQtdWRldmQuc2VydmljZS5pbgorQEAgLTIxLDYgKzIxLDUgQEAgU29ja2V0cz1zeXN0ZW1kLXVkZXZkLWNvbnRyb2wuc29ja2V0IHN5c3RlbWQtdWRldmQta2VybmVsLnNvY2tldAorIFJlc3RhcnQ9YWx3YXlzCisgUmVzdGFydFNlYz0wCisgRXhlY1N0YXJ0PUByb290bGliZXhlY2RpckAvc3lzdGVtZC11ZGV2ZAorLU1vdW50RmxhZ3M9c2xhdmUKKyBLaWxsTW9kZT1taXhlZAorIFdhdGNoZG9nU2VjPTFtaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjI5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjkuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyM2M3NDkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjkuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1NzkgKzAsMCBAQAotU1VNTUFSWSA9ICJBIFN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kIgotCi1ERVNDUklQVElPTiA9ICJzeXN0ZW1kIGlzIGEgc3lzdGVtIGFuZCBzZXJ2aWNlIG1hbmFnZXIgZm9yIExpbnV4LCBjb21wYXRpYmxlIHdpdGggXAotU3lzViBhbmQgTFNCIGluaXQgc2NyaXB0cy4gc3lzdGVtZCBwcm92aWRlcyBhZ2dyZXNzaXZlIHBhcmFsbGVsaXphdGlvbiBcCi1jYXBhYmlsaXRpZXMsIHVzZXMgc29ja2V0IGFuZCBELUJ1cyBhY3RpdmF0aW9uIGZvciBzdGFydGluZyBzZXJ2aWNlcywgXAotb2ZmZXJzIG9uLWRlbWFuZCBzdGFydGluZyBvZiBkYWVtb25zLCBrZWVwcyB0cmFjayBvZiBwcm9jZXNzZXMgdXNpbmcgXAotTGludXggY2dyb3Vwcywgc3VwcG9ydHMgc25hcHNob3R0aW5nIGFuZCByZXN0b3Jpbmcgb2YgdGhlIHN5c3RlbSBcCi1zdGF0ZSwgbWFpbnRhaW5zIG1vdW50IGFuZCBhdXRvbW91bnQgcG9pbnRzIGFuZCBpbXBsZW1lbnRzIGFuIFwKLWVsYWJvcmF0ZSB0cmFuc2FjdGlvbmFsIGRlcGVuZGVuY3ktYmFzZWQgc2VydmljZSBjb250cm9sIGxvZ2ljLiBJdCBjYW4gXAotd29yayBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN5c3Zpbml0LiIKLQotTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5HUEwyO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkxHUEwyLjE7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgotCi1QUk9WSURFUyA9ICJ1ZGV2IgotCi1QRSA9ICIxIgotCi1ERVBFTkRTID0gImttb2QgZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlIGludGx0b29sLW5hdGl2ZSBncGVyZi1uYXRpdmUgYWNsIHJlYWRsaW5lIGxpYmNhcCBsaWJjZ3JvdXAgcWVtdS1uYXRpdmUgdXRpbC1saW51eCIKLQotU0VDVElPTiA9ICJiYXNlL3NoZWxsIgotCi1pbmhlcml0IHVzZXJhZGQgcGtnY29uZmlnIGF1dG90b29scyBwZXJsbmF0aXZlIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcWVtdSBzeXN0ZW1kIHB0ZXN0IGdldHRleHQgYmFzaC1jb21wbGV0aW9uCi0KLVNSQ1JFViA9ICI3MTRjNjJiNDYzNzlhYmI3NTU4YzU0NDY2NTUyMmFjYTkxNjkxZTEwIgotCi1QViA9ICIyMjkrZ2l0JHtTUkNQVn0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQuZ2l0O3Byb3RvY29sPWdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly90b3VjaHNjcmVlbi5ydWxlcyBcCi0gICAgICAgICAgIGZpbGU6Ly8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiBcCi0gICAgICAgICAgIGZpbGU6Ly9pbml0IFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAzLWRlZmluZS1leHAxMC1pZi1taXNzaW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDQtVXNlLWdldGVudi13aGVuLXNlY3VyZS12ZXJzaW9ucy1hcmUtbm90LWF2YWlsYWJsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA1LWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNi1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDctdXNlLWxuci13cmFwcGVyLWluc3RlYWQtb2YtbG9va2luZy1mb3ItcmVsYXRpdmUtb3B0aS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA4LW5zcGF3bi1Vc2UtZXhlY3ZwZS1vbmx5LXdoZW4tbGliYy1zdXBwb3J0cy1pdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA5LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMC1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMS1uc3MtbXltYWNoaW5lcy1CdWlsZC1jb25kaXRpb25hbGx5LXdoZW4tSEFWRV9NWUhPU1ROLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTItcnVsZXMtd2hpdGVsaXN0LWhkLWRldmljZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMy1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTQtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTUtc3lzdGVtZC11c2VyLWF2b2lkLXVzaW5nLXN5c3RlbS1hdXRoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTYtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTctUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE4LW1ha2UtdGVzdC1kaXItY29uZmlndXJhYmxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTktcmVtb3ZlLWR1cGxpY2F0ZS1pbmNsdWRlLXVjaGFyLmgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMC1jaGVjay1mb3ItdWNoYXIuaC1pbi1jb25maWd1cmUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMS1pbmNsdWRlLW1pc3NpbmcuaC1mb3ItZ2V0dGluZy1zZWN1cmVfZ2V0ZW52LWRlZmluaXRpLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjItc29ja2V0LXV0aWwtZG9uLXQtZmFpbC1pZi1saWJjLWRvZXNuLXQtc3VwcG9ydC1JRE4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMy1idWlsZC1zeXMtZml4LWJ1aWxkLXdpdGgtbGliZ3JjeXB0LWRpc2FibGVkLnBhdGNoIFwKLSIKLVNSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIlwKLSAgICAgICAgICAgZmlsZTovLzAwMDItdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaCBcCi0iCi1TUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gIiBmaWxlOi8vMDAwMS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1MREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAtbHNzcF9ub25zaGFyZWQgLWxzc3AgIgotCi1HVEtET0NfRE9DRElSID0gIiR7U30vZG9jcy8iCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJ4eiBcCi0gICAgICAgICAgICAgICAgICAgbGRjb25maWcgXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3hrYmNvbW1vbicsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc2VsaW51eCcsICdzZWxpbnV4JywgJycsIGQpfSBcCi0gICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywgJ3Jma2lsbCcsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2VmaScsICdlZmknLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICBiaW5mbXQgXAotICAgICAgICAgICAgICAgICAgIHJhbmRvbXNlZWQgXAotICAgICAgICAgICAgICAgICAgIG1hY2hpbmVkIFwKLSAgICAgICAgICAgICAgICAgICBiYWNrbGlnaHQgXAotICAgICAgICAgICAgICAgICAgIHF1b3RhY2hlY2sgXAotICAgICAgICAgICAgICAgICAgIGJvb3RjaGFydCBcCi0gICAgICAgICAgICAgICAgICAgaG9zdG5hbWVkIFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnVENMSUJDJywgJ2dsaWJjJywgJ215aG9zdG5hbWUgc3lzdXNlcnMnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICBoaWJlcm5hdGUgXAotICAgICAgICAgICAgICAgICAgIHRpbWVkYXRlZCBcCi0gICAgICAgICAgICAgICAgICAgdGltZXN5bmNkIFwKLSAgICAgICAgICAgICAgICAgICBsb2NhbGVkIFwKLSAgICAgICAgICAgICAgICAgICBrZGJ1cyBcCi0gICAgICAgICAgICAgICAgICAgaW1hIFwKLSAgICAgICAgICAgICAgICAgICBzbWFjayBcCi0gICAgICAgICAgICAgICAgICAgbG9naW5kIFwKLSAgICAgICAgICAgICAgICAgICBmaXJzdGJvb3QgXAotICAgICAgICAgICAgICAgICAgIHV0bXAgXAotICAgICAgICAgICAgICAgICAgIHBvbGtpdCBcCi0iCi1QQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAic2VsaW51eCIKLVBBQ0tBR0VDT05GSUdfcmVtb3ZlX2xpYmMtbXVzbCA9ICJzbWFjayIKLQotIyBVc2UgdGhlIHVwc3RyZWFtIHN5c3RlbWQgc2VyaWFsLWdldHR5QC5zZXJ2aWNlIGFuZCByZWx5IG9uCi0jIHN5c3RlbWQtZ2V0dHktZ2VuZXJhdG9yIGluc3RlYWQgb2YgdXNpbmcgdGhlIE9FLWNvcmUgc3BlY2lmaWMKLSMgc3lzdGVtZC1zZXJpYWxnZXR0eS5iYiAtIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuCi1QQUNLQUdFQ09ORklHW3NlcmlhbC1nZXR0eS1nZW5lcmF0b3JdID0gIiIKLQotUEFDS0FHRUNPTkZJR1tqb3VybmFsLXVwbG9hZF0gPSAiLS1lbmFibGUtbGliY3VybCwtLWRpc2FibGUtbGliY3VybCxjdXJsIgotIyBTaWduIHRoZSBqb3VybmFsIGZvciBhbnRpLXRhbXBlcmluZwotUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0tZW5hYmxlLWdjcnlwdCwtLWRpc2FibGUtZ2NyeXB0LGxpYmdjcnlwdCIKLVBBQ0tBR0VDT05GSUdbY3J5cHRzZXR1cF0gPSAiLS1lbmFibGUtbGliY3J5cHRzZXR1cCwtLWRpc2FibGUtbGliY3J5cHRzZXR1cCxjcnlwdHNldHVwIgotUEFDS0FHRUNPTkZJR1ttaWNyb2h0dHBkXSA9ICItLWVuYWJsZS1taWNyb2h0dHBkLC0tZGlzYWJsZS1taWNyb2h0dHBkLGxpYm1pY3JvaHR0cGQiCi1QQUNLQUdFQ09ORklHW2VsZnV0aWxzXSA9ICItLWVuYWJsZS1lbGZ1dGlscywtLWRpc2FibGUtZWxmdXRpbHMsZWxmdXRpbHMiCi1QQUNLQUdFQ09ORklHW3Jlc29sdmVkXSA9ICItLWVuYWJsZS1yZXNvbHZlZCwtLWRpc2FibGUtcmVzb2x2ZWQiCi1QQUNLQUdFQ09ORklHW25ldHdvcmtkXSA9ICItLWVuYWJsZS1uZXR3b3JrZCwtLWRpc2FibGUtbmV0d29ya2QiCi1QQUNLQUdFQ09ORklHW21hY2hpbmVkXSA9ICItLWVuYWJsZS1tYWNoaW5lZCwtLWRpc2FibGUtbWFjaGluZWQiCi1QQUNLQUdFQ09ORklHW2JhY2tsaWdodF0gPSAiLS1lbmFibGUtYmFja2xpZ2h0LC0tZGlzYWJsZS1iYWNrbGlnaHQiCi1QQUNLQUdFQ09ORklHW3F1b3RhY2hlY2tdID0gIi0tZW5hYmxlLXF1b3RhY2hlY2ssLS1kaXNhYmxlLXF1b3RhY2hlY2siCi1QQUNLQUdFQ09ORklHW2Jvb3RjaGFydF0gPSAiLS1lbmFibGUtYm9vdGNoYXJ0LC0tZGlzYWJsZS1ib290Y2hhcnQiCi1QQUNLQUdFQ09ORklHW2hvc3RuYW1lZF0gPSAiLS1lbmFibGUtaG9zdG5hbWVkLC0tZGlzYWJsZS1ob3N0bmFtZWQiCi1QQUNLQUdFQ09ORklHW215aG9zdG5hbWVdID0gIi0tZW5hYmxlLW15aG9zdG5hbWUsLS1kaXNhYmxlLW15aG9zdG5hbWUiCi1QQUNLQUdFQ09ORklHW3Jma2lsbF0gPSAiLS1lbmFibGUtcmZraWxsLC0tZGlzYWJsZS1yZmtpbGwiCi1QQUNLQUdFQ09ORklHW2hpYmVybmF0ZV0gPSAiLS1lbmFibGUtaGliZXJuYXRlLC0tZGlzYWJsZS1oaWJlcm5hdGUiCi1QQUNLQUdFQ09ORklHW3RpbWVkYXRlZF0gPSAiLS1lbmFibGUtdGltZWRhdGVkLC0tZGlzYWJsZS10aW1lZGF0ZWQiCi1QQUNLQUdFQ09ORklHW3RpbWVzeW5jZF0gPSAiLS1lbmFibGUtdGltZXN5bmNkLC0tZGlzYWJsZS10aW1lc3luY2QiCi1QQUNLQUdFQ09ORklHW2xvY2FsZWRdID0gIi0tZW5hYmxlLWxvY2FsZWQsLS1kaXNhYmxlLWxvY2FsZWQiCi1QQUNLQUdFQ09ORklHW2VmaV0gPSAiLS1lbmFibGUtZWZpLC0tZGlzYWJsZS1lZmkiCi1QQUNLQUdFQ09ORklHW2tkYnVzXSA9ICItLWVuYWJsZS1rZGJ1cywtLWRpc2FibGUta2RidXMiCi1QQUNLQUdFQ09ORklHW2ltYV0gPSAiLS1lbmFibGUtaW1hLC0tZGlzYWJsZS1pbWEiCi1QQUNLQUdFQ09ORklHW3NtYWNrXSA9ICItLWVuYWJsZS1zbWFjaywtLWRpc2FibGUtc21hY2siCi0jIGxpYnNlY2NvbXAgaXMgZm91bmQgaW4gbWV0YS1zZWN1cml0eQotUEFDS0FHRUNPTkZJR1tzZWNjb21wXSA9ICItLWVuYWJsZS1zZWNjb21wLC0tZGlzYWJsZS1zZWNjb21wLGxpYnNlY2NvbXAiCi1QQUNLQUdFQ09ORklHW2xvZ2luZF0gPSAiLS1lbmFibGUtbG9naW5kLC0tZGlzYWJsZS1sb2dpbmQiCi1QQUNLQUdFQ09ORklHW3N5c3VzZXJzXSA9ICItLWVuYWJsZS1zeXN1c2VycywtLWRpc2FibGUtc3lzdXNlcnMiCi1QQUNLQUdFQ09ORklHW2ZpcnN0Ym9vdF0gPSAiLS1lbmFibGUtZmlyc3Rib290LC0tZGlzYWJsZS1maXJzdGJvb3QiCi1QQUNLQUdFQ09ORklHW3JhbmRvbXNlZWRdID0gIi0tZW5hYmxlLXJhbmRvbXNlZWQsLS1kaXNhYmxlLXJhbmRvbXNlZWQiCi1QQUNLQUdFQ09ORklHW2JpbmZtdF0gPSAiLS1lbmFibGUtYmluZm10LC0tZGlzYWJsZS1iaW5mbXQiCi1QQUNLQUdFQ09ORklHW3V0bXBdID0gIi0tZW5hYmxlLXV0bXAsLS1kaXNhYmxlLXV0bXAiCi1QQUNLQUdFQ09ORklHW3BvbGtpdF0gPSAiLS1lbmFibGUtcG9sa2l0LC0tZGlzYWJsZS1wb2xraXQiCi0jIGltcG9ydGQgcmVxdWlyZXMgY3VybC94ei96bGliL2J6aXAyL2djcnlwdAotUEFDS0FHRUNPTkZJR1tpbXBvcnRkXSA9ICItLWVuYWJsZS1pbXBvcnRkLC0tZGlzYWJsZS1pbXBvcnRkIgotUEFDS0FHRUNPTkZJR1tsaWJpZG5dID0gIi0tZW5hYmxlLWxpYmlkbiwtLWRpc2FibGUtbGliaWRuLGxpYmlkbiIKLVBBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCIKLVBBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLW1hbnBhZ2VzLC0tZGlzYWJsZS1tYW5wYWdlcyxsaWJ4c2x0LW5hdGl2ZSB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgotUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbSwtLWRpc2FibGUtcGFtLGxpYnBhbSIKLSMgVmVyaWZ5IGtleW1hcHMgb24gbG9jYWxlIGNoYW5nZQotUEFDS0FHRUNPTkZJR1t4a2Jjb21tb25dID0gIi0tZW5hYmxlLXhrYmNvbW1vbiwtLWRpc2FibGUteGtiY29tbW9uLGxpYnhrYmNvbW1vbiIKLSMgVXBkYXRlIE5BVCBmaXJld2FsbCBydWxlcwotUEFDS0FHRUNPTkZJR1tpcHRjXSA9ICItLWVuYWJsZS1saWJpcHRjLC0tZGlzYWJsZS1saWJpcHRjLGlwdGFibGVzIgotUEFDS0FHRUNPTkZJR1tsZGNvbmZpZ10gPSAiLS1lbmFibGUtbGRjb25maWcsLS1kaXNhYmxlLWxkY29uZmlnLCwiCi1QQUNLQUdFQ09ORklHW3NlbGludXhdID0gIi0tZW5hYmxlLXNlbGludXgsLS1kaXNhYmxlLXNlbGludXgsbGlic2VsaW51eCIKLVBBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gImFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPXllcyBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD15ZXMgLGFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPW5vIGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPW5vICx2YWxncmluZCIKLVBBQ0tBR0VDT05GSUdbcXJlbmNvZGVdID0gIi0tZW5hYmxlLXFyZW5jb2RlLC0tZGlzYWJsZS1xcmVuY29kZSxxcmVuY29kZSIKLVBBQ0tBR0VDT05GSUdbZGJ1c10gPSAiLS1lbmFibGUtZGJ1cywtLWRpc2FibGUtZGJ1cyxkYnVzIgotUEFDS0FHRUNPTkZJR1tjb3JlZHVtcF0gPSAiLS1lbmFibGUtY29yZWR1bXAsLS1kaXNhYmxlLWNvcmVkdW1wIgotUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS1lbmFibGUtYnppcDIsLS1kaXNhYmxlLWJ6aXAyLGJ6aXAyIgotUEFDS0FHRUNPTkZJR1tsejRdID0gIi0tZW5hYmxlLWx6NCwtLWRpc2FibGUtbHo0LGx6NCIKLVBBQ0tBR0VDT05GSUdbeHpdID0gIi0tZW5hYmxlLXh6LC0tZGlzYWJsZS14eix4eiIKLVBBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliIgotCi1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LSUxMPSR7YmFzZV9iaW5kaXJ9L2tpbGwiCi1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QiCi1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayIKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBT049JHtzYmluZGlyfS9xdW90YW9uIgotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfU1VMT0dJTj0ke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKLQotIyBIZWxwZXIgdmFyaWFibGVzIHRvIGNsYXJpZnkgbG9jYXRpb25zLiAgVGhpcyBtaXJyb3JzIHRoZSBsb2dpYyBpbiBzeXN0ZW1kJ3MKLSMgYnVpbGQgc3lzdGVtLgotcm9vdHByZWZpeCA/PSAiJHtiYXNlX3ByZWZpeH0iCi1yb290bGliZGlyID89ICIke2Jhc2VfbGliZGlyfSIKLXJvb3RsaWJleGVjZGlyID0gIiR7cm9vdHByZWZpeH0vbGliIgotCi1DQUNIRURfQ09ORklHVVJFVkFSU19jbGFzcy10YXJnZXQgPSAiXAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS9tb3VudCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9VTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS91bW91bnQgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS01PRD0ke2Jhc2VfYmluZGlyfS9rbW9kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tFWEVDPSR7c2JpbmRpcn0va2V4ZWMgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFDSEVDSz0ke3NiaW5kaXJ9L3F1b3RhY2hlY2sgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24gXAotCQkJICIKLQotRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcm9vdHByZWZpeD0ke3Jvb3RwcmVmaXh9IFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtyb290bGliZGlyfSBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1yb290aG9tZWRpcj0ke1JPT1RfSE9NRX0gXAotICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zcGxpdC11c3IgXAotICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcHl0aG9uIFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLXN5c3ZyY25kLXBhdGg9JHtzeXNjb25mZGlyfSBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1maXJtd2FyZS1wYXRoPS9saWIvZmlybXdhcmUgXAotICAgICAgICAgICAgICAgICAtLXdpdGgtdGVzdGRpcj0ke1BURVNUX1BBVEh9IFwKLSAgICAgICAgICAgICAgICIKLSMgcGVyIHRoZSBzeXN0ZW1kIFJFQURNRSwgZGVmaW5lIFZBTEdSSU5EPTEgdG8gcnVuIHVuZGVyIHZhbGdyaW5kCi1DRkxBR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3ZhbGdyaW5kJywgJyAtRFZBTEdSSU5EPTEnLCAnJywgZCl9IgotCi0jIGRpc2FibGUgcHJvYmxlbWF0aWMgR0NDIDUuMiBvcHRpbWl6YXRpb25zIFtZT0NUTyAjODI5MV0KLUZVTExfT1BUSU1JWkFUSU9OX2FwcGVuZF9hcm0gPSAiIC1mbm8tc2NoZWR1bGUtaW5zbnMgLWZuby1zY2hlZHVsZS1pbnNuczIiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotCWV4cG9ydCBOTT0iJHtIT1NUX1BSRUZJWH1nY2Mtbm0iCi0JZXhwb3J0IEFSPSIke0hPU1RfUFJFRklYfWdjYy1hciIKLQlleHBvcnQgUkFOTElCPSIke0hPU1RfUFJFRklYfWdjYy1yYW5saWIiCi0JZXhwb3J0IEtNT0Q9IiR7YmFzZV9iaW5kaXJ9L2ttb2QiCi0JaWYgWyAtZCAke1N9L3VuaXRzLnByZV9zZWQgXSA7IHRoZW4KLQkJY3AgLXIgJHtTfS91bml0cy5wcmVfc2VkICR7U30vdW5pdHMKLQllbHNlCi0JCWNwIC1yICR7U30vdW5pdHMgJHtTfS91bml0cy5wcmVfc2VkCi0JZmkKLQlzZWQgLWkgLWUgJ3M6LURURVNUX0RJUj1cXFwiLipcXFwiOi1EVEVTVF9ESVI9XFxcIiR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdFxcXCI6JyAke1N9L01ha2VmaWxlLmFtCi0Jc2VkIC1pIC1lICdzOi1EQ0FUQUxPR19ESVI9XFxcIi4qXFxcIjotRENBVEFMT0dfRElSPVxcXCIke1BURVNUX1BBVEh9L3Rlc3RzL2NhdGFsb2dcXFwiOicgJHtTfS9NYWtlZmlsZS5hbQotfQotCi1kb19pbnN0YWxsKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsCi0JaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3NlcmlhbC1nZXR0eS1nZW5lcmF0b3InLCAnZmFsc2UnLCAndHJ1ZScsIGQpfTsgdGhlbgotCQkjIFByb3ZpZGVkIGJ5IGEgc2VwYXJhdGUgcmVjaXBlCi0JCXJtICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSogLWYKLQlmaQotCi0JIyBQcm92aWRlIHN1cHBvcnQgZm9yIGluaXRyYW1mcwotCVsgISAtZSAke0R9L2luaXQgXSAmJiBsbiAtcyAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQgJHtEfS9pbml0Ci0JWyAhIC1lICR7RH0vJHtiYXNlX3NiaW5kaXJ9L3VkZXZkIF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkICR7RH0vJHtiYXNlX3NiaW5kaXJ9L3VkZXZkCi0KLQkjIENyZWF0ZSBtYWNoaW5lLWlkCi0JIyAyMDoxMiA8IG1lemNhbGVybz4ga29lbjogeW91IGhhdmUgdGhyZWUgb3B0aW9uczogYSkgcnVuIHN5c3RlbWQtbWFjaGluZS1pZC1zZXR1cCBhdCBpbnN0YWxsIHRpbWUsIGIpIGhhdmUgLyByZWFkLW9ubHkgYW5kIGFuIGVtcHR5IGZpbGUgdGhlcmUgKGZvciBzdGF0ZWxlc3MpIGFuZCBjKSBib290IHdpdGggLyB3cml0YWJsZQotCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQKLQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5ydWxlcyAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCi0KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLwotCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KLQkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKLQkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZAotCQlzZWQgLWkgcyVAVURFVkRAJSR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQKLQlmaQotCi0JY2hvd24gcm9vdDpzeXN0ZW1kLWpvdXJuYWwgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xvZy9qb3VybmFsCi0KLSAgICAgICAgIyBEZWxldGUgam91cm5hbCBSRUFETUUsIGFzIGxvZyBjYW4gYmUgc3ltbGlua2VkIGluc2lkZSB2b2xhdGlsZS4KLSAgICAgICAgcm0gLWYgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xvZy9SRUFETUUKLQotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZ3JhcGhpY2FsLnRhcmdldC53YW50cwotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMKLQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Bvd2Vyb2ZmLnRhcmdldC53YW50cwotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVib290LnRhcmdldC53YW50cwotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cwotCi0JIyBDcmVhdGUgc3ltbGlua3MgZm9yIHN5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3V0bXAnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgotCQlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2dyYXBoaWNhbC50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCi0JCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCi0JCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQotCQlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JlYm9vdC50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCi0JCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKLQlmaQotCi0JIyBFbmFibGUgam91cm5hbCB0byBmb3J3YXJkIG1lc3NhZ2UgdG8gc3lzbG9nIGRhZW1vbgotCXNlZCAtaSAtZSAncy8uKkZvcndhcmRUb1N5c2xvZy4qL0ZvcndhcmRUb1N5c2xvZz15ZXMvJyAke0R9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYKLQkjIHRoaXMgZmlsZSBpcyBuZWVkZWQgdG8gZXhpc3QgaWYgbmV0d29ya2QgaXMgZGlzYWJsZWQgYnV0IHRpbWVzeW5jZCBpcyBzdGlsbCBpbiB1c2Ugc2luY2UgdGltZXN5bmNkIGNoZWNrcyBpdAotCSMgZm9yIGV4aXN0ZW5jZSBlbHNlIGl0IGZhaWxzCi0JaWYgWyAtcyAke0R9JHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mIF07IHRoZW4KLQkJJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbmV0d29ya2QnLCAnOicsICdzZWQgLWkgLWUgIlwkYWQgL3J1bi9zeXN0ZW1kL25ldGlmL2xpbmtzIDA3NTUgcm9vdCByb290IC0iICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYnLCBkKX0KLQlmaQotCWlmICEgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncmVzb2x2ZWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgotCQkjIGlmIHJlc29sdmVkIGlzIGRpc2FibGVkLCBpdCB3b24ndCBoYW5kbGUgdGhlIGxpbmsgb2YgcmVzb2x2LmNvbmYsIHNvCi0JCSMgc2V0IGl0IHVwIG91cnNlbHZlcwotCQlsbiAtcyAuLi9ydW4vcmVzb2x2LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vcmVzb2x2LmNvbmYKLQkJZWNobyAnTCEgJHtzeXNjb25mZGlyfS9yZXNvbHYuY29uZiAtIC0gLSAtIC4uL3J1bi9yZXNvbHYuY29uZicgPj4ke0R9JHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvZXRjLmNvbmYKLQkJZWNobyAnZiAvcnVuL3Jlc29sdi5jb25mIDA2NDQgcm9vdCByb290JyA+PiR7RH0ke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYKLQlmaQotCWluc3RhbGwgLURtIDA3NTUgJHtTfS9zcmMvc3lzdGVtY3RsL3N5c3RlbWQtc3lzdi1pbnN0YWxsLlNLRUxFVE9OICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtZC1zeXN2LWluc3RhbGwKLX0KLQotZG9faW5zdGFsbF9wdGVzdCAoKSB7Ci0gICAgICAgIyBpbnN0YWxsIGRhdGEgZmlsZXMgbmVlZGVkIGZvciB0ZXN0cwotICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdAotICAgICAgIGNwIC1yZkwgJHtTfS90ZXN0LyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdAotICAgICAgIHNlZCAtaSAncy8idHJlZSIvImxzIi8nICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3Rlc3QvdWRldi10ZXN0LnBsCi0KLSAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL2NhdGFsb2cKLSAgICAgICBpbnN0YWxsICR7U30vY2F0YWxvZy8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL2NhdGFsb2cvCi0KLSAgICAgICBpbnN0YWxsIC1EICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL2J1aWxkLWF1eC90ZXN0LWRyaXZlcgotCi0gICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9ydWxlcwotICAgICAgIGluc3RhbGwgJHtCfS9ydWxlcy8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3J1bGVzLwotCi0gICAgICAgIyBUaGlzIGRpcmVjdG9yeSBuZWVkcyB0byBiZSB0aGVyZSBmb3IgdWRldi10ZXN0LnBsIHRvIHdvcmsuCi0gICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3VkZXYvcnVsZXMuZAotCi0gICAgICAgIyBpbnN0YWxsIGFjdHVhbCB0ZXN0IGJpbmFyaWVzCi0gICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdGVzdC0qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLwotICAgICAgIGluc3RhbGwgLW0gMDc1NSAke0J9Ly5saWJzL3Rlc3QtKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8KLQotICAgICAgIGluc3RhbGwgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8KLX0KLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCl7Ci0gICAgc3lzdGVtZGxpYmRpciA9IGQuZ2V0VmFyKCJyb290bGliZGlyIiwgVHJ1ZSkKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBzeXN0ZW1kbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ1N5c3RlbWQgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCi19Ci1QQUNLQUdFU19EWU5BTUlDICs9ICJebGliKHVkZXZ8c3lzdGVtZCkuKiIKLQotUEFDS0FHRVMgPSsgIlwKLSAgICAke1BOfS1ndWkgXAotICAgICR7UE59LXZjb25zb2xlLXNldHVwIFwKLSAgICAke1BOfS1pbml0cmFtZnMgXAotICAgICR7UE59LWFuYWx5emUgXAotICAgICR7UE59LWtlcm5lbC1pbnN0YWxsIFwKLSAgICAke1BOfS1ycG0tbWFjcm9zIFwKLSAgICAke1BOfS1iaW5mbXQgXAotICAgICR7UE59LXBhbSBcCi0gICAgJHtQTn0tenNoLWNvbXBsZXRpb24gXAotICAgICR7UE59LXhvcmcteGluaXRyYyBcCi0gICAgJHtQTn0tZXh0cmEtdXRpbHMgXAotIgotCi1TWVNURU1EX1BBQ0tBR0VTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2JpbmZtdCcsICcke1BOfS1iaW5mbXQnLCAnJywgZCl9IgotU1lTVEVNRF9TRVJWSUNFXyR7UE59LWJpbmZtdCA9ICJzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgotCi1VU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgotVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbWljcm9odHRwZCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtam91cm5hbC1nYXRld2F5OycsICcnLCBkKX0iCi1VU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd0aW1lc3luY2QnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLXRpbWVzeW5jOycsICcnLCBkKX0iCi1HUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBsb2NrOyAtciBzeXN0ZW1kLWpvdXJuYWwiCi0KLUZJTEVTXyR7UE59LWFuYWx5emUgPSAiJHtiaW5kaXJ9L3N5c3RlbWQtYW5hbHl6ZSIKLQotRklMRVNfJHtQTn0taW5pdHJhbWZzID0gIi9pbml0IgotUkRFUEVORFNfJHtQTn0taW5pdHJhbWZzID0gIiR7UE59IgotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZ2F3ayBtYWtlIHBlcmwgcHl0aG9uIGJhc2ggeHogXAotICAgICAgICAgICAgICAgICAgICAgICAgIHR6ZGF0YSB0emRhdGEtYW1lcmljYXMgdHpkYXRhLWFzaWEgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHR6ZGF0YS1ldXJvcGUgdHpkYXRhLWFmcmljYSB0emRhdGEtYW50YXJjdGljYSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhLWFyY3RpYyB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhLXBhY2lmaWMgdHpkYXRhLXBvc2l4IgotCi1GSUxFU18ke1BOfS1wdGVzdCArPSAiJHtsaWJkaXJ9L3VkZXYvcnVsZXMuZCIKLQotRklMRVNfJHtQTn0tZ3VpID0gIiR7YmluZGlyfS9zeXN0ZW1hZG0iCi0KLUZJTEVTXyR7UE59LXZjb25zb2xlLXNldHVwID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC12Y29uc29sZS1zZXR1cCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSIKLQotUkRFUEVORFNfJHtQTn0ta2VybmVsLWluc3RhbGwgKz0gImJhc2giCi1GSUxFU18ke1BOfS1rZXJuZWwtaW5zdGFsbCA9ICIke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9rZXJuZWwvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9rZXJuZWwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi1GSUxFU18ke1BOfS1ycG0tbWFjcm9zID0gIiR7ZXhlY19wcmVmaXh9L2xpYi9ycG0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICIKLQotRklMRVNfJHtQTn0teG9yZy14aW5pdHJjID0gIiR7c3lzY29uZmRpcn0vWDExL3hpbml0L3hpbml0cmMuZC8qIgotCi1GSUxFU18ke1BOfS16c2gtY29tcGxldGlvbiA9ICIke2RhdGFkaXJ9L3pzaC9zaXRlLWZ1bmN0aW9ucyIKLQotRklMRVNfJHtQTn0tYmluZm10ID0gIiR7c3lzY29uZmRpcn0vYmluZm10LmQvIFwKLSAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvYmluZm10LmQgXAotICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1iaW5mbXQgXAotICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHJvYy1zeXMtZnMtYmluZm10X21pc2MuKiBcCi0gICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgotUlJFQ09NTUVORFNfJHtQTn0tYmluZm10ID0gImtlcm5lbC1tb2R1bGUtYmluZm10LW1pc2MiCi0KLVJSRUNPTU1FTkRTXyR7UE59LXZjb25zb2xlLXNldHVwID0gImtiZCBrYmQtY29uc29sZWZvbnRzIGtiZC1rZXltYXBzIgotCi1GSUxFU18ke1BOfS1leHRyYS11dGlscyA9ICJcCi0gICAgICAgICAgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS9zeXN0ZW1kLWVzY2FwZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS9zeXN0ZW1kLWluaGliaXQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtZGV0ZWN0LXZpcnQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtcGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1ydW4gXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtY2F0IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLWRlbHRhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLWNnbHMgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtY2d0b3AgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtc3RkaW8tYnJpZGdlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtYXNrLXBhc3N3b3JkIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtdHR5LWFzay1wYXNzd29yZC1hZ2VudCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLWNvbnNvbGUucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLWNvbnNvbGUuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtYXNrLXBhc3N3b3JkLWNvbnNvbGUucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtcmVzb2x2ZS1ob3N0IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1hYy1wb3dlciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtYWN0aXZhdGUgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtbnNwYXduIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL3N5c3RlbWQtbnNwYXduLmNvbmYgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLW5zcGF3bkAuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtYnVzLXByb3h5ZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYnVzLXByb3h5ZC5zZXJ2aWNlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1idXMtcHJveHlkLnNvY2tldCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtc29ja2V0LXByb3h5ZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtcmVwbHktcGFzc3dvcmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXNsZWVwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtLXNsZWVwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1oaWJlcm5hdGUuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaHlicmlkLXNsZWVwLnNlcnZpY2UgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLXN1c3BlbmQuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NsZWVwLnRhcmdldCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtaW5pdGN0bCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaW5pdGN0bC5zZXJ2aWNlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1pbml0Y3RsLnNvY2tldCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NvY2tldHMudGFyZ2V0LndhbnRzL3N5c3RlbWQtaW5pdGN0bC5zb2NrZXQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW0tZ2VuZXJhdG9ycy9zeXN0ZW1kLWdwdC1hdXRvLWdlbmVyYXRvciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtY2dyb3Vwcy1hZ2VudCBcCi0iCi0KLUNPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQgXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9jb3JlZHVtcC5jb25mIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZiBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2xvZ2luZC5jb25mIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtLmNvbmYgXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC91c2VyLmNvbmYiCi0KLUZJTEVTXyR7UE59ID0gIiAke2Jhc2VfYmluZGlyfS8qIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9mYWN0b3J5IFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS8gXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWFjaGluZS1pZCBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC8gXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcGFtLmQvIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLyBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kLyBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS94ZGcvIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9SRUFETUUgXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcmVzb2x2LmNvbmYgXAotICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvKiBcCi0gICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9LyogXAotICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28gXAotICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJuc3NfKiBcCi0gICAgICAgICAgICAgICAgL2Nncm91cCBcCi0gICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQqIFwKLSAgICAgICAgICAgICAgICAke2JpbmRpcn0vYnVzY3RsIFwKLSAgICAgICAgICAgICAgICAke2JpbmRpcn0vY29yZWR1bXBjdGwgXAotICAgICAgICAgICAgICAgICR7YmluZGlyfS9sb2NhbGVjdGwgXAotICAgICAgICAgICAgICAgICR7YmluZGlyfS9ob3N0bmFtZWN0bCBcCi0gICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3RpbWVkYXRlY3RsIFwKLSAgICAgICAgICAgICAgICAke2JpbmRpcn0vYm9vdGN0bCBcCi0gICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2tlcm5lbC1pbnN0YWxsIFwKLSAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC8qLmNvbmYgXAotICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN0ZW1kIFwKLSAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvbW9kdWxlcy1sb2FkLmQgXAotICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXNjdGwuZCBcCi0gICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3VzZXJzLmQgXAotICAgICAgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gXAotICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzcwLXVhY2Nlc3MucnVsZXMgXAotICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzcxLXNlYXQucnVsZXMgXAotICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzczLXNlYXQtbGF0ZS5ydWxlcyBcCi0gICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvOTktc3lzdGVtZC5ydWxlcyBcCi0gICAgICAgICAgICAgICAiCi0KLUZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSAke2RhdGFkaXJ9L2RidXMtMS9pbnRlcmZhY2VzLyAke3N5c2NvbmZkaXJ9L3JwbS9tYWNyb3Muc3lzdGVtZCIKLQotUkRFUEVORFNfJHtQTn0gKz0gImttb2QgZGJ1cyB1dGlsLWxpbnV4LW1vdW50IHVkZXYgKD0gJHtFWFRFTkRQS0dWfSkiCi1SREVQRU5EU18ke1BOfSArPSAidm9sYXRpbGUtYmluZHMgdXBkYXRlLXJjLmQiCi0KLVJSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzZXJpYWwtZ2V0dHktZ2VuZXJhdG9yJywgJycsICdzeXN0ZW1kLXNlcmlhbGdldHR5JywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKLSAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWV4dHJhLXV0aWxzIFwKLSAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWNvbXBhdC11bml0cyB1ZGV2LWh3ZGIgXAotICAgICAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtYWdldHR5ICB1dGlsLWxpbnV4LWZzY2sgZTJmc3Byb2dzLWUyZnNjayBcCi0gICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1hdXRvZnM0IGtlcm5lbC1tb2R1bGUtdW5peCBrZXJuZWwtbW9kdWxlLWlwdjYgXAotICAgICAgICAgICAgICAgICAgICAgIG9zLXJlbGVhc2UgXAotIgotCi1JTlNBTkVfU0tJUF8ke1BOfS1kb2MgKz0gIiBsaWJkaXIiCi0KLVBBQ0tBR0VTID0rICJ1ZGV2IHVkZXYtaHdkYiIKLQotUlBST1ZJREVTX3VkZXYgPSAiaG90cGx1ZyIKLQotUkRFUEVORFNfdWRldi1od2RiICs9ICJ1ZGV2IgotCi1GSUxFU191ZGV2ICs9ICIke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXAotICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYWNjZWxlcm9tZXRlciBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2F0YV9pZCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2Nkcm9tX2lkIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY29sbGVjdCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2ZpbmRrZXlib2FyZHMgXAotICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvbXRkX3Byb2JlIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvc2NzaV9pZCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3Y0bF9pZCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleW1hcHMgXAotICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMgXAotICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGV2IFwKLSAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQgXAotICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qdWRldiogXAotICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLndhbnRzLyp1ZGV2KiBcCi0gICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS91ZGV2YWRtIFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL3VkZXZhZG0gXAotICAgICAgICAgICAgICAiCi0KLUZJTEVTX3VkZXYtaHdkYiA9ICIke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2h3ZGIuZCIKLQotSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IgotSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAic3lzdGVtZC11ZGV2ZCIKLUlOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDMgUyAuIgotCi1weXRob24gX19hbm9ueW1vdXMoKSB7Ci0gICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6Ci0gICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQotfQotCi0jIFRPRE86Ci0jIHUtYSBmb3IgcnVubGV2ZWwgYW5kIHRlbGluaXQKLQotQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBoYWx0IHJlYm9vdCBzaHV0ZG93biBwb3dlcm9mZiBydW5sZXZlbCIKLQotQUxURVJOQVRJVkVfVEFSR0VUW2luaXRdID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKLUFMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID89ICIzMDAiCi0KLUFMVEVSTkFUSVZFX1RBUkdFVFtoYWx0XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCi1BTFRFUk5BVElWRV9QUklPUklUWVtoYWx0XSA/PSAiMzAwIgotCi1BTFRFUk5BVElWRV9UQVJHRVRbcmVib290XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgotQUxURVJOQVRJVkVfUFJJT1JJVFlbcmVib290XSA/PSAiMzAwIgotCi1BTFRFUk5BVElWRV9UQVJHRVRbc2h1dGRvd25dID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgotQUxURVJOQVRJVkVfUFJJT1JJVFlbc2h1dGRvd25dID89ICIzMDAiCi0KLUFMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcm9mZl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCi1BTFRFUk5BVElWRV9QUklPUklUWVtwb3dlcm9mZl0gPz0gIjMwMCIKLQotQUxURVJOQVRJVkVfVEFSR0VUW3J1bmxldmVsXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKLUFMVEVSTkFUSVZFX1BSSU9SSVRZW3J1bmxldmVsXSA/PSAiMzAwIgotCi1wa2dfcG9zdGluc3RfJHtQTn0gKCkgewotCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG15aG9zdG5hbWVcPi8vJyBcCi0JCS1lICdzL1woXmhvc3RzOi4qXClcKFw8ZmlsZXNcPlwpXCguKlwpXChcPGRuc1w+XClcKC4qXCkvXDFcMiBteWhvc3RuYW1lIFwzXDRcNS8nIFwKLQkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKLX0KLQotcGtnX3ByZXJtXyR7UE59ICgpIHsKLQlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAotCQktZSAnL15ob3N0czovcy9ccypteWhvc3RuYW1lLy8nIFwKLQkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKLX0KLQotcGtnX3Bvc3RpbnN0X3VkZXYtaHdkYiAoKSB7Ci0JaWYgdGVzdCAtbiAiJEQiOyB0aGVuCi0JCSR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiYXNlX2JpbmRpcn0vdWRldmFkbScpfSBod2RiIC0tdXBkYXRlIFwKLQkJCS0tcm9vdCAkRAotCQljaG93biByb290OnJvb3QgJEQke3N5c2NvbmZkaXJ9L3VkZXYvaHdkYi5iaW4KLQllbHNlCi0JCXVkZXZhZG0gaHdkYiAtLXVwZGF0ZQotCWZpCi19Ci0KLXBrZ19wcmVybV91ZGV2LWh3ZGIgKCkgewotCXJtIC1mICREJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCi19Ci0KLSMgQXMgdGhpcyByZWNpcGUgYnVpbGRzIHVkZXYsIHJlc3BlY3Qgc3lzdGVtZCBiZWluZyBpbiBESVNUUk9fRkVBVFVSRVMgc28KLSMgdGhhdCB3ZSBkb24ndCBidWlsZCBib3RoIHVkZXYgYW5kIHN5c3RlbWQgaW4gd29ybGQgYnVpbGRzLgotcHl0aG9uICgpIHsKLSAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKLSAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKLQotICAgIGltcG9ydCByZQotICAgIGlmIHJlLm1hdGNoKCcuKm11c2wqJywgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKSAhPSBOb25lOgotICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiTm90IF95ZXRfIHN1cHBvcnRlZCBvbiBtdXNsIGJhc2VkIHRhcmdldHMiKQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMzAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kXzIzMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQ5ZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMzAuYmIKQEAgLTAsMCArMSw1OTggQEAKK3JlcXVpcmUgc3lzdGVtZC5pbmMKKworUFJPVklERVMgPSAidWRldiIKKworUEUgPSAiMSIKKworREVQRU5EUyA9ICJrbW9kIGRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGFjbCByZWFkbGluZSBsaWJjYXAgbGliY2dyb3VwIHFlbXUtbmF0aXZlIHV0aWwtbGludXgiCisKK1NFQ1RJT04gPSAiYmFzZS9zaGVsbCIKKworaW5oZXJpdCB1c2VyYWRkIHBrZ2NvbmZpZyBhdXRvdG9vbHMgcGVybG5hdGl2ZSB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHFlbXUgc3lzdGVtZCBwdGVzdCBnZXR0ZXh0IGJhc2gtY29tcGxldGlvbgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hzY3JlZW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1kZWZpbmUtZXhwMTAtaWYtbWlzc2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LVVzZS1nZXRlbnYtd2hlbi1zZWN1cmUtdmVyc2lvbnMtYXJlLW5vdC1hdmFpbGFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtbnNzLW15bWFjaGluZXMtQnVpbGQtY29uZGl0aW9uYWxseS13aGVuLUhBVkVfTVlIT1NUTi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLXJ1bGVzLXdoaXRlbGlzdC1oZC1kZXZpY2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1tYWtlLXRlc3QtZGlyLWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LXJlbW92ZS1kdXBsaWNhdGUtaW5jbHVkZS11Y2hhci5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtY2hlY2stZm9yLXVjaGFyLmgtaW4tY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtaW5jbHVkZS1taXNzaW5nLmgtZm9yLWdldHRpbmctc2VjdXJlX2dldGVudi1kZWZpbml0aS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLXNvY2tldC11dGlsLWRvbi10LWZhaWwtaWYtbGliYy1kb2Vzbi10LXN1cHBvcnQtSUROLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VkZXYtcmUtZW5hYmxlLW1vdW50LXByb3BhZ2F0aW9uLWZvci11ZGV2ZC5wYXRjaCBcCisiCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2ggXAorIgorU1JDX1VSSV9hcHBlbmRfcWVtdWFsbCA9ICIgZmlsZTovLzAwMDEtY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInh6IFwKKyAgICAgICAgICAgICAgICAgICBsZGNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneGtiY29tbW9uJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzZWxpbnV4JywgJ3NlbGludXgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCAncmZraWxsJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAnZWZpJywgJ2VmaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIGJpbmZtdCBcCisgICAgICAgICAgICAgICAgICAgcmFuZG9tc2VlZCBcCisgICAgICAgICAgICAgICAgICAgbWFjaGluZWQgXAorICAgICAgICAgICAgICAgICAgIGJhY2tsaWdodCBcCisgICAgICAgICAgICAgICAgICAgcXVvdGFjaGVjayBcCisgICAgICAgICAgICAgICAgICAgaG9zdG5hbWVkIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnVENMSUJDJywgJ2dsaWJjJywgJ215aG9zdG5hbWUgc3lzdXNlcnMnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICBoaWJlcm5hdGUgXAorICAgICAgICAgICAgICAgICAgIHRpbWVkYXRlZCBcCisgICAgICAgICAgICAgICAgICAgdGltZXN5bmNkIFwKKyAgICAgICAgICAgICAgICAgICBsb2NhbGVkIFwKKyAgICAgICAgICAgICAgICAgICBrZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgaW1hIFwKKyAgICAgICAgICAgICAgICAgICBzbWFjayBcCisgICAgICAgICAgICAgICAgICAgbG9naW5kIFwKKyAgICAgICAgICAgICAgICAgICBmaXJzdGJvb3QgXAorICAgICAgICAgICAgICAgICAgIHV0bXAgXAorICAgICAgICAgICAgICAgICAgIHBvbGtpdCBcCisiCitQQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAic2VsaW51eCIKK1BBQ0tBR0VDT05GSUdfcmVtb3ZlX2xpYmMtbXVzbCA9ICJzbWFjayIKKworIyBVc2UgdGhlIHVwc3RyZWFtIHN5c3RlbWQgc2VyaWFsLWdldHR5QC5zZXJ2aWNlIGFuZCByZWx5IG9uCisjIHN5c3RlbWQtZ2V0dHktZ2VuZXJhdG9yIGluc3RlYWQgb2YgdXNpbmcgdGhlIE9FLWNvcmUgc3BlY2lmaWMKKyMgc3lzdGVtZC1zZXJpYWxnZXR0eS5iYiAtIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuCitQQUNLQUdFQ09ORklHW3NlcmlhbC1nZXR0eS1nZW5lcmF0b3JdID0gIiIKKworUEFDS0FHRUNPTkZJR1tqb3VybmFsLXVwbG9hZF0gPSAiLS1lbmFibGUtbGliY3VybCwtLWRpc2FibGUtbGliY3VybCxjdXJsIgorIyBTaWduIHRoZSBqb3VybmFsIGZvciBhbnRpLXRhbXBlcmluZworUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0tZW5hYmxlLWdjcnlwdCwtLWRpc2FibGUtZ2NyeXB0LGxpYmdjcnlwdCIKK1BBQ0tBR0VDT05GSUdbY3J5cHRzZXR1cF0gPSAiLS1lbmFibGUtbGliY3J5cHRzZXR1cCwtLWRpc2FibGUtbGliY3J5cHRzZXR1cCxjcnlwdHNldHVwIgorUEFDS0FHRUNPTkZJR1ttaWNyb2h0dHBkXSA9ICItLWVuYWJsZS1taWNyb2h0dHBkLC0tZGlzYWJsZS1taWNyb2h0dHBkLGxpYm1pY3JvaHR0cGQiCitQQUNLQUdFQ09ORklHW2VsZnV0aWxzXSA9ICItLWVuYWJsZS1lbGZ1dGlscywtLWRpc2FibGUtZWxmdXRpbHMsZWxmdXRpbHMiCitQQUNLQUdFQ09ORklHW3Jlc29sdmVkXSA9ICItLWVuYWJsZS1yZXNvbHZlZCwtLWRpc2FibGUtcmVzb2x2ZWQiCitQQUNLQUdFQ09ORklHW25ldHdvcmtkXSA9ICItLWVuYWJsZS1uZXR3b3JrZCwtLWRpc2FibGUtbmV0d29ya2QiCitQQUNLQUdFQ09ORklHW21hY2hpbmVkXSA9ICItLWVuYWJsZS1tYWNoaW5lZCwtLWRpc2FibGUtbWFjaGluZWQiCitQQUNLQUdFQ09ORklHW2JhY2tsaWdodF0gPSAiLS1lbmFibGUtYmFja2xpZ2h0LC0tZGlzYWJsZS1iYWNrbGlnaHQiCitQQUNLQUdFQ09ORklHW3F1b3RhY2hlY2tdID0gIi0tZW5hYmxlLXF1b3RhY2hlY2ssLS1kaXNhYmxlLXF1b3RhY2hlY2siCitQQUNLQUdFQ09ORklHW2hvc3RuYW1lZF0gPSAiLS1lbmFibGUtaG9zdG5hbWVkLC0tZGlzYWJsZS1ob3N0bmFtZWQiCitQQUNLQUdFQ09ORklHW215aG9zdG5hbWVdID0gIi0tZW5hYmxlLW15aG9zdG5hbWUsLS1kaXNhYmxlLW15aG9zdG5hbWUiCitQQUNLQUdFQ09ORklHW3Jma2lsbF0gPSAiLS1lbmFibGUtcmZraWxsLC0tZGlzYWJsZS1yZmtpbGwiCitQQUNLQUdFQ09ORklHW2hpYmVybmF0ZV0gPSAiLS1lbmFibGUtaGliZXJuYXRlLC0tZGlzYWJsZS1oaWJlcm5hdGUiCitQQUNLQUdFQ09ORklHW3RpbWVkYXRlZF0gPSAiLS1lbmFibGUtdGltZWRhdGVkLC0tZGlzYWJsZS10aW1lZGF0ZWQiCitQQUNLQUdFQ09ORklHW3RpbWVzeW5jZF0gPSAiLS1lbmFibGUtdGltZXN5bmNkLC0tZGlzYWJsZS10aW1lc3luY2QiCitQQUNLQUdFQ09ORklHW2xvY2FsZWRdID0gIi0tZW5hYmxlLWxvY2FsZWQsLS1kaXNhYmxlLWxvY2FsZWQiCitQQUNLQUdFQ09ORklHW2VmaV0gPSAiLS1lbmFibGUtZWZpLC0tZGlzYWJsZS1lZmkiCitQQUNLQUdFQ09ORklHW2tkYnVzXSA9ICItLWVuYWJsZS1rZGJ1cywtLWRpc2FibGUta2RidXMiCitQQUNLQUdFQ09ORklHW2ltYV0gPSAiLS1lbmFibGUtaW1hLC0tZGlzYWJsZS1pbWEiCitQQUNLQUdFQ09ORklHW3NtYWNrXSA9ICItLWVuYWJsZS1zbWFjaywtLWRpc2FibGUtc21hY2siCisjIGxpYnNlY2NvbXAgaXMgZm91bmQgaW4gbWV0YS1zZWN1cml0eQorUEFDS0FHRUNPTkZJR1tzZWNjb21wXSA9ICItLWVuYWJsZS1zZWNjb21wLC0tZGlzYWJsZS1zZWNjb21wLGxpYnNlY2NvbXAiCitQQUNLQUdFQ09ORklHW2xvZ2luZF0gPSAiLS1lbmFibGUtbG9naW5kLC0tZGlzYWJsZS1sb2dpbmQiCitQQUNLQUdFQ09ORklHW3N5c3VzZXJzXSA9ICItLWVuYWJsZS1zeXN1c2VycywtLWRpc2FibGUtc3lzdXNlcnMiCitQQUNLQUdFQ09ORklHW2ZpcnN0Ym9vdF0gPSAiLS1lbmFibGUtZmlyc3Rib290LC0tZGlzYWJsZS1maXJzdGJvb3QiCitQQUNLQUdFQ09ORklHW3JhbmRvbXNlZWRdID0gIi0tZW5hYmxlLXJhbmRvbXNlZWQsLS1kaXNhYmxlLXJhbmRvbXNlZWQiCitQQUNLQUdFQ09ORklHW2JpbmZtdF0gPSAiLS1lbmFibGUtYmluZm10LC0tZGlzYWJsZS1iaW5mbXQiCitQQUNLQUdFQ09ORklHW3V0bXBdID0gIi0tZW5hYmxlLXV0bXAsLS1kaXNhYmxlLXV0bXAiCitQQUNLQUdFQ09ORklHW3BvbGtpdF0gPSAiLS1lbmFibGUtcG9sa2l0LC0tZGlzYWJsZS1wb2xraXQiCisjIGltcG9ydGQgcmVxdWlyZXMgY3VybC94ei96bGliL2J6aXAyL2djcnlwdAorUEFDS0FHRUNPTkZJR1tpbXBvcnRkXSA9ICItLWVuYWJsZS1pbXBvcnRkLC0tZGlzYWJsZS1pbXBvcnRkIgorUEFDS0FHRUNPTkZJR1tsaWJpZG5dID0gIi0tZW5hYmxlLWxpYmlkbiwtLWRpc2FibGUtbGliaWRuLGxpYmlkbiIKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCIKK1BBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLW1hbnBhZ2VzLC0tZGlzYWJsZS1tYW5wYWdlcyxsaWJ4c2x0LW5hdGl2ZSB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbSwtLWRpc2FibGUtcGFtLGxpYnBhbSIKKyMgVmVyaWZ5IGtleW1hcHMgb24gbG9jYWxlIGNoYW5nZQorUEFDS0FHRUNPTkZJR1t4a2Jjb21tb25dID0gIi0tZW5hYmxlLXhrYmNvbW1vbiwtLWRpc2FibGUteGtiY29tbW9uLGxpYnhrYmNvbW1vbiIKKyMgVXBkYXRlIE5BVCBmaXJld2FsbCBydWxlcworUEFDS0FHRUNPTkZJR1tpcHRjXSA9ICItLWVuYWJsZS1saWJpcHRjLC0tZGlzYWJsZS1saWJpcHRjLGlwdGFibGVzIgorUEFDS0FHRUNPTkZJR1tsZGNvbmZpZ10gPSAiLS1lbmFibGUtbGRjb25maWcsLS1kaXNhYmxlLWxkY29uZmlnLCwiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIi0tZW5hYmxlLXNlbGludXgsLS1kaXNhYmxlLXNlbGludXgsbGlic2VsaW51eCIKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gImFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPXllcyBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD15ZXMgLGFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPW5vIGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPW5vICx2YWxncmluZCIKK1BBQ0tBR0VDT05GSUdbcXJlbmNvZGVdID0gIi0tZW5hYmxlLXFyZW5jb2RlLC0tZGlzYWJsZS1xcmVuY29kZSxxcmVuY29kZSIKK1BBQ0tBR0VDT05GSUdbZGJ1c10gPSAiLS1lbmFibGUtZGJ1cywtLWRpc2FibGUtZGJ1cyxkYnVzIgorUEFDS0FHRUNPTkZJR1tjb3JlZHVtcF0gPSAiLS1lbmFibGUtY29yZWR1bXAsLS1kaXNhYmxlLWNvcmVkdW1wIgorUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS1lbmFibGUtYnppcDIsLS1kaXNhYmxlLWJ6aXAyLGJ6aXAyIgorUEFDS0FHRUNPTkZJR1tsejRdID0gIi0tZW5hYmxlLWx6NCwtLWRpc2FibGUtbHo0LGx6NCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0tZW5hYmxlLXh6LC0tZGlzYWJsZS14eix4eiIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LSUxMPSR7YmFzZV9iaW5kaXJ9L2tpbGwiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBT049JHtzYmluZGlyfS9xdW90YW9uIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfU1VMT0dJTj0ke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKKworIyBIZWxwZXIgdmFyaWFibGVzIHRvIGNsYXJpZnkgbG9jYXRpb25zLiAgVGhpcyBtaXJyb3JzIHRoZSBsb2dpYyBpbiBzeXN0ZW1kJ3MKKyMgYnVpbGQgc3lzdGVtLgorcm9vdHByZWZpeCA/PSAiJHtiYXNlX3ByZWZpeH0iCityb290bGliZGlyID89ICIke2Jhc2VfbGliZGlyfSIKK3Jvb3RsaWJleGVjZGlyID0gIiR7cm9vdHByZWZpeH0vbGliIgorCitDQUNIRURfQ09ORklHVVJFVkFSU19jbGFzcy10YXJnZXQgPSAiXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS9tb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9VTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS91bW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS01PRD0ke2Jhc2VfYmluZGlyfS9rbW9kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tFWEVDPSR7c2JpbmRpcn0va2V4ZWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFDSEVDSz0ke3NiaW5kaXJ9L3F1b3RhY2hlY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24gXAorCQkJICIKKworRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcm9vdHByZWZpeD0ke3Jvb3RwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtyb290bGliZGlyfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1yb290aG9tZWRpcj0ke1JPT1RfSE9NRX0gXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zcGxpdC11c3IgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXN5c3ZyY25kLXBhdGg9JHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1maXJtd2FyZS1wYXRoPS9saWIvZmlybXdhcmUgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtdGVzdGRpcj0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgICAgICAgICIKKyMgcGVyIHRoZSBzeXN0ZW1kIFJFQURNRSwgZGVmaW5lIFZBTEdSSU5EPTEgdG8gcnVuIHVuZGVyIHZhbGdyaW5kCitDRkxBR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3ZhbGdyaW5kJywgJyAtRFZBTEdSSU5EPTEnLCAnJywgZCl9IgorCisjIGRpc2FibGUgcHJvYmxlbWF0aWMgR0NDIDUuMiBvcHRpbWl6YXRpb25zIFtZT0NUTyAjODI5MV0KK0ZVTExfT1BUSU1JWkFUSU9OX2FwcGVuZF9hcm0gPSAiIC1mbm8tc2NoZWR1bGUtaW5zbnMgLWZuby1zY2hlZHVsZS1pbnNuczIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWV4cG9ydCBOTT0iJHtIT1NUX1BSRUZJWH1nY2Mtbm0iCisJZXhwb3J0IEFSPSIke0hPU1RfUFJFRklYfWdjYy1hciIKKwlleHBvcnQgUkFOTElCPSIke0hPU1RfUFJFRklYfWdjYy1yYW5saWIiCisJZXhwb3J0IEtNT0Q9IiR7YmFzZV9iaW5kaXJ9L2ttb2QiCisJaWYgWyAtZCAke1N9L3VuaXRzLnByZV9zZWQgXSA7IHRoZW4KKwkJY3AgLXIgJHtTfS91bml0cy5wcmVfc2VkICR7U30vdW5pdHMKKwllbHNlCisJCWNwIC1yICR7U30vdW5pdHMgJHtTfS91bml0cy5wcmVfc2VkCisJZmkKKwlzZWQgLWkgLWUgJ3M6LURURVNUX0RJUj1cXFwiLipcXFwiOi1EVEVTVF9ESVI9XFxcIiR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdFxcXCI6JyAke1N9L01ha2VmaWxlLmFtCisJc2VkIC1pIC1lICdzOi1EQ0FUQUxPR19ESVI9XFxcIi4qXFxcIjotRENBVEFMT0dfRElSPVxcXCIke1BURVNUX1BBVEh9L3Rlc3RzL2NhdGFsb2dcXFwiOicgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfQorCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3NlcmlhbC1nZXR0eS1nZW5lcmF0b3InLCAnZmFsc2UnLCAndHJ1ZScsIGQpfTsgdGhlbgorCQkjIFByb3ZpZGVkIGJ5IGEgc2VwYXJhdGUgcmVjaXBlCisJCXJtICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSogLWYKKwlmaQorCisJIyBQcm92aWRlIHN1cHBvcnQgZm9yIGluaXRyYW1mcworCVsgISAtZSAke0R9L2luaXQgXSAmJiBsbiAtcyAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQgJHtEfS9pbml0CisJWyAhIC1lICR7RH0vJHtiYXNlX3NiaW5kaXJ9L3VkZXZkIF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkICR7RH0vJHtiYXNlX3NiaW5kaXJ9L3VkZXZkCisKKwkjIENyZWF0ZSBtYWNoaW5lLWlkCisJIyAyMDoxMiA8IG1lemNhbGVybz4ga29lbjogeW91IGhhdmUgdGhyZWUgb3B0aW9uczogYSkgcnVuIHN5c3RlbWQtbWFjaGluZS1pZC1zZXR1cCBhdCBpbnN0YWxsIHRpbWUsIGIpIGhhdmUgLyByZWFkLW9ubHkgYW5kIGFuIGVtcHR5IGZpbGUgdGhlcmUgKGZvciBzdGF0ZWxlc3MpIGFuZCBjKSBib290IHdpdGggLyB3cml0YWJsZQorCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQKKworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5ydWxlcyAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworCWluc3RhbGwgLW0gMDY0NCAke0J9L3NyYy91ZGV2L3VkZXYucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLworCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZAorCQlzZWQgLWkgcyVAVURFVkRAJSR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQKKwlmaQorCisJY2hvd24gcm9vdDpzeXN0ZW1kLWpvdXJuYWwgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xvZy9qb3VybmFsCisKKwkjIERlbGV0ZSBqb3VybmFsIFJFQURNRSwgYXMgbG9nIGNhbiBiZSBzeW1saW5rZWQgaW5zaWRlIHZvbGF0aWxlLgorCXJtIC1mICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvUkVBRE1FCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2dyYXBoaWNhbC50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3dlcm9mZi50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JlYm9vdC50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Jlc2N1ZS50YXJnZXQud2FudHMKKworCSMgQ3JlYXRlIHN5bWxpbmtzIGZvciBzeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1dG1wJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCQlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCQlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Bvd2Vyb2ZmLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwkJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCQlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Jlc2N1ZS50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJZmkKKworCSMgRW5hYmxlIGpvdXJuYWwgdG8gZm9yd2FyZCBtZXNzYWdlIHRvIHN5c2xvZyBkYWVtb24KKwlzZWQgLWkgLWUgJ3MvLipGb3J3YXJkVG9TeXNsb2cuKi9Gb3J3YXJkVG9TeXNsb2c9eWVzLycgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9qb3VybmFsZC5jb25mCisJIyBTZXQgdGhlIG1heGltaXVtIHNpemUgb2YgcnVudGltZSBqb3VybmFsIHRvIDY0TSBhcyBkZWZhdWx0CisJc2VkIC1pIC1lICdzLy4qUnVudGltZU1heFVzZS4qL1J1bnRpbWVNYXhVc2U9NjRNLycgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9qb3VybmFsZC5jb25mCisKKwkjIHRoaXMgZmlsZSBpcyBuZWVkZWQgdG8gZXhpc3QgaWYgbmV0d29ya2QgaXMgZGlzYWJsZWQgYnV0IHRpbWVzeW5jZCBpcyBzdGlsbCBpbiB1c2Ugc2luY2UgdGltZXN5bmNkIGNoZWNrcyBpdAorCSMgZm9yIGV4aXN0ZW5jZSBlbHNlIGl0IGZhaWxzCisJaWYgWyAtcyAke0R9JHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mIF07IHRoZW4KKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbmV0d29ya2QnLCAnOicsICdzZWQgLWkgLWUgIlwkYWQgL3J1bi9zeXN0ZW1kL25ldGlmL2xpbmtzIDA3NTUgcm9vdCByb290IC0iICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYnLCBkKX0KKwlmaQorCWlmICEgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncmVzb2x2ZWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQkjIGlmIHJlc29sdmVkIGlzIGRpc2FibGVkLCBpdCB3b24ndCBoYW5kbGUgdGhlIGxpbmsgb2YgcmVzb2x2LmNvbmYsIHNvCisJCSMgc2V0IGl0IHVwIG91cnNlbHZlcworCQlsbiAtcyAuLi9ydW4vcmVzb2x2LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vcmVzb2x2LmNvbmYKKwkJZWNobyAnTCEgJHtzeXNjb25mZGlyfS9yZXNvbHYuY29uZiAtIC0gLSAtIC4uL3J1bi9yZXNvbHYuY29uZicgPj4ke0R9JHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvZXRjLmNvbmYKKwkJZWNobyAnZiAvcnVuL3Jlc29sdi5jb25mIDA2NDQgcm9vdCByb290JyA+PiR7RH0ke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYKKwlmaQorCWluc3RhbGwgLURtIDA3NTUgJHtTfS9zcmMvc3lzdGVtY3RsL3N5c3RlbWQtc3lzdi1pbnN0YWxsLlNLRUxFVE9OICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtZC1zeXN2LWluc3RhbGwKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICAgICAgIyBpbnN0YWxsIGRhdGEgZmlsZXMgbmVlZGVkIGZvciB0ZXN0cworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdAorICAgICAgIGNwIC1yZkwgJHtTfS90ZXN0LyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdAorICAgICAgICMgcHl0aG9uIGlzIGRpc2FibGVkIGZvciBzeXN0ZW1kLCB0aHVzIHJlbW92aW5nIHRoZXNlIHB5dGhvbiB0ZXN0aW5nIHNjcmlwdHMKKyAgICAgICBybSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy90ZXN0LyoucHkKKyAgICAgICBzZWQgLWkgJ3MvInRyZWUiLyJscyIvJyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy90ZXN0L3VkZXYtdGVzdC5wbAorCisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9jYXRhbG9nCisgICAgICAgaW5zdGFsbCAke1N9L2NhdGFsb2cvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9jYXRhbG9nLworCisgICAgICAgaW5zdGFsbCAtRCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9idWlsZC1hdXgvdGVzdC1kcml2ZXIKKworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvcnVsZXMKKyAgICAgICBpbnN0YWxsICR7Qn0vcnVsZXMvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9ydWxlcy8KKworICAgICAgICMgVGhpcyBkaXJlY3RvcnkgbmVlZHMgdG8gYmUgdGhlcmUgZm9yIHVkZXYtdGVzdC5wbCB0byB3b3JrLgorICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS91ZGV2L3J1bGVzLmQKKworICAgICAgICMgaW5zdGFsbCBhY3R1YWwgdGVzdCBiaW5hcmllcworICAgICAgIGluc3RhbGwgLW0gMDc1NSAke0J9L3Rlc3QtKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8KKyAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtCfS8ubGlicy90ZXN0LSogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvCisKKyAgICAgICBpbnN0YWxsICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpeworICAgIHN5c3RlbWRsaWJkaXIgPSBkLmdldFZhcigicm9vdGxpYmRpciIsIFRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgc3lzdGVtZGxpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdTeXN0ZW1kICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQorfQorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpYih1ZGV2fHN5c3RlbWQpLioiCisKK1BBQ0tBR0VTID0rICJcCisgICAgJHtQTn0tZ3VpIFwKKyAgICAke1BOfS12Y29uc29sZS1zZXR1cCBcCisgICAgJHtQTn0taW5pdHJhbWZzIFwKKyAgICAke1BOfS1hbmFseXplIFwKKyAgICAke1BOfS1rZXJuZWwtaW5zdGFsbCBcCisgICAgJHtQTn0tcnBtLW1hY3JvcyBcCisgICAgJHtQTn0tYmluZm10IFwKKyAgICAke1BOfS1wYW0gXAorICAgICR7UE59LXpzaC1jb21wbGV0aW9uIFwKKyAgICAke1BOfS14b3JnLXhpbml0cmMgXAorICAgICR7UE59LWNvbnRhaW5lciBcCisgICAgJHtQTn0tZXh0cmEtdXRpbHMgXAorIgorCitTVU1NQVJZXyR7UE59LWNvbnRhaW5lciA9ICJUb29scyBmb3IgY29udGFpbmVycyBhbmQgVk1zIgorREVTQ1JJUFRJT05fJHtQTn0tY29udGFpbmVyID0gIlN5c3RlbWQgdG9vbHMgdG8gc3Bhd24gYW5kIG1hbmFnZSBjb250YWluZXJzIGFuZCB2aXJ0dWFsIG1hY2hpbmVzLiIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdiaW5mbXQnLCAnJHtQTn0tYmluZm10JywgJycsIGQpfSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1iaW5mbXQgPSAic3lzdGVtZC1iaW5mbXQuc2VydmljZSIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSAke1BOfS1leHRyYS11dGlscyIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ21pY3JvaHR0cGQnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLWpvdXJuYWwtZ2F0ZXdheTsnLCAnJywgZCl9IgorVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbWljcm9odHRwZCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtam91cm5hbC1yZW1vdGU7JywgJycsIGQpfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2pvdXJuYWwtdXBsb2FkJywgJy0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1qb3VybmFsLXVwbG9hZDsnLCAnJywgZCl9IgorVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndGltZXN5bmNkJywgJy0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC10aW1lc3luYzsnLCAnJywgZCl9IgorVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbmV0d29ya2QnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLW5ldHdvcms7JywgJycsIGQpfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2NvcmVkdW1wJywgJy0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1jb3JlZHVtcDsnLCAnJywgZCl9IgorVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncmVzb2x2ZWQnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLXJlc29sdmU7JywgJycsIGQpfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1yIGxvY2s7IC1yIHN5c3RlbWQtam91cm5hbCIKK1VTRVJBRERfUEFSQU1fJHtQTn0tZXh0cmEtdXRpbHMgKz0gIi0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1idXMtcHJveHk7IgorCitGSUxFU18ke1BOfS1hbmFseXplID0gIiR7YmluZGlyfS9zeXN0ZW1kLWFuYWx5emUiCisKK0ZJTEVTXyR7UE59LWluaXRyYW1mcyA9ICIvaW5pdCIKK1JERVBFTkRTXyR7UE59LWluaXRyYW1mcyA9ICIke1BOfSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImdhd2sgbWFrZSBwZXJsIGJhc2ggeHogXAorICAgICAgICAgICAgICAgICAgICAgICAgIHR6ZGF0YSB0emRhdGEtYW1lcmljYXMgdHpkYXRhLWFzaWEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHR6ZGF0YS1ldXJvcGUgdHpkYXRhLWFmcmljYSB0emRhdGEtYW50YXJjdGljYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhLWFyY3RpYyB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhLXBhY2lmaWMgdHpkYXRhLXBvc2l4IgorCitGSUxFU18ke1BOfS1wdGVzdCArPSAiJHtsaWJkaXJ9L3VkZXYvcnVsZXMuZCIKKworRklMRVNfJHtQTn0tZ3VpID0gIiR7YmluZGlyfS9zeXN0ZW1hZG0iCisKK0ZJTEVTXyR7UE59LXZjb25zb2xlLXNldHVwID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC12Y29uc29sZS1zZXR1cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSIKKworUkRFUEVORFNfJHtQTn0ta2VybmVsLWluc3RhbGwgKz0gImJhc2giCitGSUxFU18ke1BOfS1rZXJuZWwtaW5zdGFsbCA9ICIke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9rZXJuZWwvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9rZXJuZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1ycG0tbWFjcm9zID0gIiR7ZXhlY19wcmVmaXh9L2xpYi9ycG0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0teG9yZy14aW5pdHJjID0gIiR7c3lzY29uZmRpcn0vWDExL3hpbml0L3hpbml0cmMuZC8qIgorCitGSUxFU18ke1BOfS16c2gtY29tcGxldGlvbiA9ICIke2RhdGFkaXJ9L3pzaC9zaXRlLWZ1bmN0aW9ucyIKKworRklMRVNfJHtQTn0tYmluZm10ID0gIiR7c3lzY29uZmRpcn0vYmluZm10LmQvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvYmluZm10LmQgXAorICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1iaW5mbXQgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHJvYy1zeXMtZnMtYmluZm10X21pc2MuKiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgorUlJFQ09NTUVORFNfJHtQTn0tYmluZm10ID0gImtlcm5lbC1tb2R1bGUtYmluZm10LW1pc2MiCisKK1JSRUNPTU1FTkRTXyR7UE59LXZjb25zb2xlLXNldHVwID0gImtiZCBrYmQtY29uc29sZWZvbnRzIGtiZC1rZXltYXBzIgorCitGSUxFU18ke1BOfS1jb250YWluZXIgPSAiJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvb3JnLmZyZWVkZXNrdG9wLmltcG9ydDEuY29uZiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLmNvbmYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L21hY2hpbmVjdGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLW5zcGF3biBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtub25hcmNoX2xpYmRpcn0vc3lzdGVtZC9pbXBvcnQtcHVicmluZy5ncGcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vYnVzbmFtZXMudGFyZ2V0LndhbnRzL29yZy5mcmVlZGVza3RvcC5pbXBvcnQxLmJ1c25hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vYnVzbmFtZXMudGFyZ2V0LndhbnRzL29yZy5mcmVlZGVza3RvcC5tYWNoaW5lMS5idXNuYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L2xvY2FsLWZzLnRhcmdldC53YW50cy92YXItbGliLW1hY2hpbmVzLm1vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L21hY2hpbmUuc2xpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vbWFjaGluZXMudGFyZ2V0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L29yZy5mcmVlZGVza3RvcC5pbXBvcnQxLmJ1c25hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLmJ1c25hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vc3lzdGVtZC1pbXBvcnRkLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vc3lzdGVtZC1tYWNoaW5lZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L3Zhci1saWItbWFjaGluZXMubW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1pbXBvcnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1pbXBvcnRkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtam91cm5hbC1nYXRld2F5ZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWpvdXJuYWwtcmVtb3RlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtam91cm5hbC11cGxvYWQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1tYWNoaW5lZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXB1bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL3N5c3RlbWQtbnNwYXduLmNvbmYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vc3lzdGVtZC1uc3Bhd25ALnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJuc3NfbXltYWNoaW5lcy5zby4yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvb3JnLmZyZWVkZXNrdG9wLmltcG9ydDEuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzL29yZy5mcmVlZGVza3RvcC5tYWNoaW5lMS5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xL2FjdGlvbnMvb3JnLmZyZWVkZXNrdG9wLmltcG9ydDEucG9saWN5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xL2FjdGlvbnMvb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLnBvbGljeSBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWV4dHJhLXV0aWxzID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtZXNjYXBlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtaW5oaWJpdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1kZXRlY3QtdmlydCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLXJ1biBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1jYXQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtZGVsdGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtY2dscyBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1jZ3RvcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1zdGRpby1icmlkZ2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vc3lzdGVtZC1hc2stcGFzc3dvcmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vc3lzdGVtZC10dHktYXNrLXBhc3N3b3JkLWFnZW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtY29uc29sZS5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtY29uc29sZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC1hc2stcGFzc3dvcmQtY29uc29sZS5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1yZXNvbHZlLWhvc3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWFjLXBvd2VyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1hY3RpdmF0ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtYnVzLXByb3h5ZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYnVzLXByb3h5ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1idXMtcHJveHlkLnNvY2tldCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtc29ja2V0LXByb3h5ZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtcmVwbHktcGFzc3dvcmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXNsZWVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtLXNsZWVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1oaWJlcm5hdGUuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaHlicmlkLXNsZWVwLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLXN1c3BlbmQuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NsZWVwLnRhcmdldCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtaW5pdGN0bCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaW5pdGN0bC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1pbml0Y3RsLnNvY2tldCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NvY2tldHMudGFyZ2V0LndhbnRzL3N5c3RlbWQtaW5pdGN0bC5zb2NrZXQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW0tZ2VuZXJhdG9ycy9zeXN0ZW1kLWdwdC1hdXRvLWdlbmVyYXRvciBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtY2dyb3Vwcy1hZ2VudCBcCisiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9jb3JlZHVtcC5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2xvZ2luZC5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC91c2VyLmNvbmYiCisKK0ZJTEVTXyR7UE59ID0gIiAke2Jhc2VfYmluZGlyfS8qIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9mYWN0b3J5IFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWFjaGluZS1pZCBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcGFtLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS94ZGcvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9SRUFETUUgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcmVzb2x2LmNvbmYgXAorICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvKiBcCisgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9LyogXAorICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJuc3NfKiBcCisgICAgICAgICAgICAgICAgL2Nncm91cCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQqIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYnVzY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vY29yZWR1bXBjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9sb2NhbGVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9ob3N0bmFtZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3RpbWVkYXRlY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYm9vdGN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2tlcm5lbC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC8qLmNvbmYgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN0ZW1kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvbW9kdWxlcy1sb2FkLmQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXNjdGwuZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3VzZXJzLmQgXAorICAgICAgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzcwLXVhY2Nlc3MucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzcxLXNlYXQucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzczLXNlYXQtbGF0ZS5ydWxlcyBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvOTktc3lzdGVtZC5ydWxlcyBcCisgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSAke2RhdGFkaXJ9L2RidXMtMS9pbnRlcmZhY2VzLyAke3N5c2NvbmZkaXJ9L3JwbS9tYWNyb3Muc3lzdGVtZCIKKworUkRFUEVORFNfJHtQTn0gKz0gImttb2QgZGJ1cyB1dGlsLWxpbnV4LW1vdW50IHVkZXYgKD0gJHtFWFRFTkRQS0dWfSkiCitSREVQRU5EU18ke1BOfSArPSAidm9sYXRpbGUtYmluZHMgdXBkYXRlLXJjLmQiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzZXJpYWwtZ2V0dHktZ2VuZXJhdG9yJywgJycsICdzeXN0ZW1kLXNlcmlhbGdldHR5JywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWV4dHJhLXV0aWxzIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWNvbXBhdC11bml0cyB1ZGV2LWh3ZGIgXAorICAgICAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtYWdldHR5ICB1dGlsLWxpbnV4LWZzY2sgZTJmc3Byb2dzLWUyZnNjayBcCisgICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1hdXRvZnM0IGtlcm5lbC1tb2R1bGUtdW5peCBrZXJuZWwtbW9kdWxlLWlwdjYgXAorICAgICAgICAgICAgICAgICAgICAgIG9zLXJlbGVhc2UgXAorIgorCitJTlNBTkVfU0tJUF8ke1BOfS1kb2MgKz0gIiBsaWJkaXIiCisKK1BBQ0tBR0VTID0rICJ1ZGV2IHVkZXYtaHdkYiIKKworUlBST1ZJREVTX3VkZXYgPSAiaG90cGx1ZyIKKworUkRFUEVORFNfdWRldi1od2RiICs9ICJ1ZGV2IgorCitGSUxFU191ZGV2ICs9ICIke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYWNjZWxlcm9tZXRlciBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2F0YV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2Nkcm9tX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY29sbGVjdCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2ZpbmRrZXlib2FyZHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvbXRkX3Byb2JlIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvc2NzaV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3Y0bF9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleW1hcHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGV2IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQgXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qdWRldiogXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLndhbnRzLyp1ZGV2KiBcCisgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS91ZGV2YWRtIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL3VkZXZhZG0gXAorICAgICAgICAgICAgICAiCisKK0ZJTEVTX3VkZXYtaHdkYiA9ICIke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2h3ZGIuZCIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IgorSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAic3lzdGVtZC11ZGV2ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDMgUyAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCisjIFRPRE86CisjIHUtYSBmb3IgcnVubGV2ZWwgYW5kIHRlbGluaXQKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBoYWx0IHJlYm9vdCBzaHV0ZG93biBwb3dlcm9mZiBydW5sZXZlbCIKKworQUxURVJOQVRJVkVfVEFSR0VUW2luaXRdID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtoYWx0XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCitBTFRFUk5BVElWRV9QUklPUklUWVtoYWx0XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcmVib290XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcmVib290XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbc2h1dGRvd25dID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbc2h1dGRvd25dID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcm9mZl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCitBTFRFUk5BVElWRV9QUklPUklUWVtwb3dlcm9mZl0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J1bmxldmVsXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3J1bmxldmVsXSA/PSAiMzAwIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG15aG9zdG5hbWVcPi8vJyBcCisJCS1lICdzL1woXmhvc3RzOi4qXClcKFw8ZmlsZXNcPlwpXCguKlwpXChcPGRuc1w+XClcKC4qXCkvXDFcMiBteWhvc3RuYW1lIFwzXDRcNS8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAorCQktZSAnL15ob3N0czovcy9ccypteWhvc3RuYW1lLy8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3Bvc3RpbnN0X3VkZXYtaHdkYiAoKSB7CisJaWYgdGVzdCAtbiAiJEQiOyB0aGVuCisJCSR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiYXNlX2JpbmRpcn0vdWRldmFkbScpfSBod2RiIC0tdXBkYXRlIFwKKwkJCS0tcm9vdCAkRAorCQljaG93biByb290OnJvb3QgJEQke3N5c2NvbmZkaXJ9L3VkZXYvaHdkYi5iaW4KKwllbHNlCisJCXVkZXZhZG0gaHdkYiAtLXVwZGF0ZQorCWZpCit9CisKK3BrZ19wcmVybV91ZGV2LWh3ZGIgKCkgeworCXJtIC1mICREJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCit9CisKKyMgQXMgdGhpcyByZWNpcGUgYnVpbGRzIHVkZXYsIHJlc3BlY3Qgc3lzdGVtZCBiZWluZyBpbiBESVNUUk9fRkVBVFVSRVMgc28KKyMgdGhhdCB3ZSBkb24ndCBidWlsZCBib3RoIHVkZXYgYW5kIHN5c3RlbWQgaW4gd29ybGQgYnVpbGRzLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKKworICAgIGltcG9ydCByZQorICAgIGlmIHJlLm1hdGNoKCcuKm11c2wqJywgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKSAhPSBOb25lOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiTm90IF95ZXRfIHN1cHBvcnRlZCBvbiBtdXNsIGJhc2VkIHRhcmdldHMiKQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIKaW5kZXggYzViOGNkYy4uZjEzNmFkOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYl8yLjg4ZHNmLmJiCkBAIC0yNiw3ICsyNiw4IEBACiAgICAgZm9yIGkgaW4gJHRtcAogICAgIGRvCiAJaj1gZWNobyAke2l9IHwgc2VkIHMvXDsvXCAvZ2AKLQlsYWJlbD1gZWNobyAke2l9IHwgc2VkIC1lICdzL3R0eS8vJyAtZSAncy9eLio7Ly8nIC1lICdzLzsuKi8vJ2AKKwlsPWBlY2hvICR7aX0gfCBzZWQgLWUgJ3MvdHR5Ly8nIC1lICdzL14uKjsvLycgLWUgJ3MvOy4qLy8nYAorCWxhYmVsPWBlY2hvICRsIHwgc2VkICdzLy4qXCguLi4uXCkvXDEvJ2AKIAllY2hvICIkbGFiZWw6MTIzNDU6cmVzcGF3bjoke2Jhc2VfYmluZGlyfS9zdGFydF9nZXR0eSAke2p9IiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCiAgICAgZG9uZQogCkBAIC01Nyw5ICs1OCwxMiBAQAogCXRtcD0iJHtTRVJJQUxfQ09OU09MRVNfQ0hFQ0t9IgogCWZvciBpIGluICR0bXAKIAlkbwotCQlqPWBlY2hvICR7aX0gfCBzZWQgcy9eLipcOy8vZ2AKKwkJaj1gZWNobyAke2l9IHwgc2VkIC1lIHMvXi4qXDsvL2cgLWUgcy9cOi4qLy9nYAorCQlrPWBlY2hvICR7aX0gfCBzZWQgcy9eLipcOi8vZ2AKIAkJaWYgWyAteiAiYGdyZXAgJHtqfSAvcHJvYy9jb25zb2xlc2AiIF07IHRoZW4KLQkJCXNlZCAtaSAvXi4qJHtqfSQvZCAvZXRjL2luaXR0YWIKKwkJCWlmIFsgLXogIiR7a30iIF0gfHwgWyAteiAiYGdyZXAgJHtrfSAvcHJvYy9jb25zb2xlc2AiIF0gfHwgWyAhIC1lIC9kZXYvJHtqfSBdOyB0aGVuCisJCQkJc2VkIC1pIC9eLioke2p9JC9kIC9ldGMvaW5pdHRhYgorCQkJZmkKIAkJZmkKIAlkb25lCiAJa2lsbCAtSFVQIDEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvZnVuY3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2M4NTM5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NzQgKzAsMCBAQAotYTY0bAotYWJzCi1hY2Nlc3MKLV9fYWRqdGltZXgKLWFsYXJtCi1hbHBoYXNvcnQKLWFyZ3pfYXBwZW5kCi1fX2FyZ3pfY291bnQKLWFyZ3pfY3JlYXRlX3NlcAotYXJnel9pbnNlcnQKLV9fYXJnel9uZXh0Ci1hcmd6X25leHQKLV9fYXJnel9zdHJpbmdpZnkKLWFyZ3pfc3RyaW5naWZ5Ci1hc3ByaW50ZgotYXRleGl0Ci1hdG9mCi1hdG9pCi1iY21wCi1iY29weQotYmluZHJlc3Zwb3J0Ci1iaW5kX3RleHRkb21haW5fY29kZXNldAotYnRvd2MKLWJ6ZXJvCi1jYWxsb2MKLWNhbm9uaWNhbGl6ZV9maWxlX25hbWUKLWNhdGdldHMKLWNmZ2V0b3NwZWVkCi1jZnNldGlzcGVlZAotY2ZzZXRzcGVlZAotY2htb2QKLWNob3duCi1jaHJvb3QKLWNsb2NrCi1jbG9zZQotY2xvc2VkaXIKLWNsb3NlbG9nCi1jb25mc3RyCi1jb25uZWN0Ci1kYWVtb24KLWRjZ2V0dGV4dAotZGlmZnRpbWUKLWRpcmZkCi1kaXJuYW1lCi1kbmdldHRleHQKLWR1cDIKLWVjdnQKLWVuZGdyZW50Ci1lbmRtbnRlbnQKLWVuZHB3ZW50Ci1lbmR1dGVudAotZW5kdXR4ZW50Ci1lcG9sbF9jdGwKLWVycgotZXRoZXJfaG9zdHRvbgotZXRoZXJfbnRvaG9zdAotZXVpZGFjY2VzcwotZXhlY3YKLWZjaGRpcgotZmNobW9kCi1mY2htb2RhdAotZmNob3duCi1mY2hvd25hdAotZmNudGwKLWZjdnQKLWZkYXRhc3luYwotZmRvcGVuZGlyCi1mZW9mX3VubG9ja2VkCi1mZ2V0c191bmxvY2tlZAotZmdldHhhdHRyCi1maW5pdGUKLWZsaXN0eGF0dHIKLWZsb2NrCi1mbG9ja2ZpbGUKLWZubWF0Y2gKLWZvcmsKLWZwYXRoY29uZgotX19mcGVuZGluZwotZnByaW50ZgotZnJlZQotZnJlZWFkZHJpbmZvCi1mcmVlaWZhZGRycwotZnNlZWtvCi1fX2ZzZXRsb2NraW5nCi1mc2V0eGF0dHIKLWZzdGF0NjQKLWZzdGF0Ci1mc3RhdGZzCi1mc3luYwotZnRlbGxvCi1mdGltZQotZnRydW5jYXRlCi1mdW5sb2NrZmlsZQotZnV0aW1lcwotZnV0aW1lc2F0Ci1nYWlfc3RyZXJyb3IKLWdjdnQKLWdldGFkZHJpbmZvCi1nZXRjX3VubG9ja2VkCi1nZXRjd2QKLWdldGRlbGltCi1nZXRkb21haW5uYW1lCi1nZXRkdGFibGVzaXplCi1nZXRlZ2lkCi1nZXRlbnYKLWdldGV1aWQKLWdldGdpZAotZ2V0Z3JlbnQKLWdldGdyZW50X3IKLWdldGdyZ2lkX3IKLWdldGdybmFtCi1nZXRncm5hbV9yCi1nZXRncm91cGxpc3QKLWdldGdyb3VwcwotZ2V0aG9zdGJ5YWRkcl9yCi1nZXRob3N0YnluYW1lMgotZ2V0aG9zdGJ5bmFtZQotZ2V0aG9zdGJ5bmFtZV9yCi1nZXRob3N0ZW50Ci1nZXRob3N0aWQKLWdldGhvc3RuYW1lCi1nZXRpZmFkZHJzCi1nZXRsaW5lCi1nZXRsb2FkYXZnCi1nZXRtbnRlbnQKLWdldG1zZwotZ2V0bmFtZWluZm8KLWdldG5ldGJ5YWRkcl9yCi1nZXRuZXRncmVudF9yCi1nZXRvcHQKLWdldG9wdF9sb25nCi1nZXRvcHRfbG9uZ19vbmx5Ci1nZXRwYWdlc2l6ZQotZ2V0cGFzcwotZ2V0cGVlcm5hbWUKLWdldHBncnAKLWdldHBpZAotZ2V0cHBpZAotZ2V0cHJvdG9lbnRfcgotZ2V0cHdlbnQKLWdldHB3ZW50X3IKLWdldHB3bmFtCi1nZXRwd25hbV9yCi1nZXRwd3VpZAotZ2V0cHd1aWRfcgotZ2V0cmVzdWlkCi1nZXRybGltaXQKLWdldHJ1c2FnZQotZ2V0c2VydmJ5bmFtZQotZ2V0c2VydmJ5bmFtZV9yCi1nZXRzZXJ2Ynlwb3J0X3IKLWdldHNlcnZlbnQKLWdldHNlcnZlbnRfcgotZ2V0c3BuYW0KLWdldHNwbmFtX3IKLWdldHRpbWVvZmRheQotZ2V0dHR5ZW50Ci1nZXR0dHluYW0KLWdldHVpZAotZ2V0dXNlcnNoZWxsCi1nZXR1dGVudAotZ2V0dXRpZAotZ2V0dXRsaW5lCi1nZXR1dG1wCi1nZXR1dG1weAotZ2V0dXR4ZW50Ci1nZXR1dHhpZAotZ2V0dXR4bGluZQotZ2V0d2QKLWdldHhhdHRyCi1nbG9iCi1nbXRpbWUKLWdtdGltZV9yCi1ncmFudHB0Ci1ncm91cF9tZW1iZXIKLWhlcnJvcgotaHN0cmVycm9yCi1pY29udgotaWNvbnZfb3BlbgotaWZfZnJlZW5hbWVpbmRleAotaWZfaW5kZXh0b25hbWUKLWlmX25hbWVpbmRleAotaWZfbmFtZXRvaW5kZXgKLWluZGV4Ci1pbmV0X2FkZHIKLWluZXRfYXRvbgotaW5ldF9udG9hCi1pbmV0X250b3AKLWluZXRfcHRvbgotaW5pdGdyb3VwcwotaW5uZXRncgotaXJ1c2Vyb2sKLWlzYXNjaWkKLWlzYXR0eQotaXNibGFuawotaXNncmFwaAotaXNpbmYKLWlzbmFuCi1pc3ByaW50Ci1pc3NwYWNlCi1pc3dhbG51bQotaXN3Y250cmwKLWlzd2N0eXBlCi1pc3dwcmludAotaXN3c3BhY2UKLWlzd3VwcGVyCi1pc3hkaWdpdAota2lsbAota2lsbHBnCi1sY2hvd24KLWxja3B3ZGYKLWxnZXR4YXR0cgotbGluawotbGlzdHhhdHRyCi1sbGlzdHhhdHRyCi1sb2NhbHRpbWUKLWxvY2FsdGltZV9yCi1sb2NrZgotbHJhbmQ0OAotbHNlYXJjaAotbHNlZWs2NAotbHNldHhhdHRyCi1sc3RhdAotbWFsbGluZm8KLW1hbGxvYwotbWJsZW4KLW1icmxlbgotbWJydG93YwotbWJzaW5pdAotbWJzcnRvd2NzCi1tYnRvd2MKLW1lbWFsaWduCi1tZW1jaHIKLW1lbWNtcAotbWVtY3B5Ci1tZW1tb3ZlCi1tZW1wY3B5Ci1tZW1yY2hyCi1tZW1zZXQKLW1rZGlyCi1ta2RpcmF0Ci1ta2R0ZW1wCi1ta2ZpZm8KLW1rbm9kCi1ta3N0ZW1wNjQKLW1rc3RlbXAKLW1rdGltZQotbWxvY2sKLW1tYXAKLW10cmFjZQotbXVubG9jawotbXVubWFwCi1uYW5vc2xlZXAKLW5pY2UKLW5sX2xhbmdpbmZvCi1udHBfYWRqdGltZQotbnRwX2dldHRpbWUKLV9vYnN0YWNrX2ZyZWUKLW9uX2V4aXQKLW9wZW42NAotb3Blbgotb3BlbmF0Ci1vcGVuZGlyCi1vcGVubG9nCi1wYXRoY29uZgotcGlwZQotcG9sbAotcG9wZW4KLXBvc2l4X21lbWFsaWduCi1wcmN0bAotcHJlYWQKLXByaW50ZgotX19wcm9nbmFtZQotcHNlbGVjdAotcHRocmVhZF9tdXRleF9sb2NrCi1wdHNuYW1lCi1wdXRlbnYKLXB1dGdyZW50Ci1wdXRwd2VudAotcHV0c3BlbnQKLXB1dHV0bGluZQotcHV0dXR4bGluZQotcHV0d2MKLXB3cml0ZQotcXNvcnQKLXJhaXNlCi1yYW5kCi1yYW5kb20KLXJhbmRfcgotcmVhZAotcmVhZGRpcgotcmVhZGRpcl9yCi1yZWFkbGluawotcmVhbGxvYwotcmVhbHBhdGgKLXJlX2NvbXAKLXJlY3Ztc2cKLXJlX2V4ZWMKLXJlZ2NvbXAKLXJlZ2V4ZWMKLXJlbW92ZQotcmVuYW1lCi1yZV9zZWFyY2gKLXJtZGlyCi1ycG1hdGNoCi1ycmVzdnBvcnRfYWYKLXJ1c2Vyb2sKLXJ1c2Vyb2tfYWYKLXNicmsKLXNjYW5kaXIKLXNjaGVkX3NldHNjaGVkdWxlcgotc2NoZWRfeWllbGQKLV9fc2VjdXJlX2dldGVudgotc2VsZWN0Ci1zZW1jdGwKLXNlbWdldAotc2VuZG1zZwotc2V0YnVmCi1zZXRidWZmZXIKLXNldGVnaWQKLXNldGVudgotc2V0ZXVpZAotc2V0Z2lkCi1zZXRncm91cHMKLXNldGhvc3RuYW1lCi1zZXRpdGltZXIKLV9zZXRqbXAKLXNldGptcAotc2V0bGluZWJ1Zgotc2V0bG9jYWxlCi1zZXRtbnRlbnQKLXNldHBnaWQKLXNldHBncnAKLXNldHByaW9yaXR5Ci1zZXRyZWdpZAotc2V0cmVzZ2lkCi1zZXRyZXN1aWQKLXNldHJldWlkCi1zZXRybGltaXQKLXNldHNpZAotc2V0c29ja29wdAotc2V0dGltZW9mZGF5Ci1zZXR1aWQKLXNldHV0ZW50Ci1zZXR1dHhlbnQKLXNldHZidWYKLXNldHhhdHRyCi1zZ2V0c3BlbnQKLXNobWF0Ci1zaG1jdGwKLXNobWR0Ci1zaG1nZXQKLXNodXRkb3duCi1zaWdhY3Rpb24KLXNpZ2FkZHNldAotc2lnYWx0c3RhY2sKLXNpZ2Jsb2NrCi1zaWdlbXB0eXNldAotc2lnaG9sZAotc2lnaW50ZXJydXB0Ci1zaWduYWwKLXNpZ3Byb2NtYXNrCi1zaWdzZXQKLXNpZ3NldG1hc2sKLXNpZ3N0YWNrCi1zaWdzdXNwZW5kCi1zaWd2ZWMKLXNucHJpbnRmCi1zb2NrZXQKLXNvY2tldHBhaXIKLXNwcmludGYKLXNyYW5kNDgKLXNyYW5kCi1zcmFuZG9tCi1zc2NhbmYKLXN0YXQKLXN0YXRmcwotc3RhdHZmcwotc3RpbWUKLXN0cGNweQotc3RyY2FzZWNtcAotc3RyY2FzZXN0cgotc3RyY2hyCi1zdHJjaHJudWwKLXN0cmNtcAotc3RyY3Nwbgotc3RyZHVwCi1zdHJlcnJvcgotc3RyZXJyb3Jfcgotc3RyZnRpbWUKLXN0cmxlbgotc3RybmNhc2VjbXAKLXN0cm5jbXAKLXN0cm5kdXAKLXN0cm5sZW4KLXN0cnBicmsKLXN0cnB0aW1lCi1zdHJyY2hyCi1zdHJzZXAKLXN0cnNpZ25hbAotc3Ryc3BuCi1zdHJzdHIKLXN0cnRvZAotc3RydG9pbWF4Ci1zdHJ0b2tfcgotc3RydG9sCi1zdHJ0b2xsCi1zdHJ0b3VsCi1zdHJ0b3VsbAotc3RydG91bWF4Ci1zdHJ2ZXJzY21wCi1zdHJ4ZnJtCi1zeW1saW5rCi1zeW5jCi1zeXNjb25mCi1zeXNjdGwKLXN5c2luZm8KLXN5c2xvZwotX3N5c19zaWdsaXN0Ci1zeXNfc2lnbGlzdAotc3lzdGVtCi10Y2dldGF0dHIKLXRjZ2V0cGdycAotdGNzZXRhdHRyCi10Y3NldHBncnAKLXRpbWUKLXRpbWVnbQotdGltZXMKLXRpbWV6b25lCi10bXBuYW0KLXRvd2xvd2VyCi10b3d1cHBlcgotdHJ1bmNhdGUKLXRzZWFyY2gKLXR0eW5hbWUKLXR6c2V0Ci11bGltaXQKLXVtYXNrCi11bmFtZQotdW5saW5rCi11bnNldGVudgotdW5zaGFyZQotdXBkd3RtcAotdXBkd3RtcHgKLXVzbGVlcAotdXN0YXQKLXV0aW1lCi11dGltZXMKLXV0bXBuYW1lCi11dG1weG5hbWUKLXZhbGxvYwotdmFzcHJpbnRmCi12ZXJyeAotdmZvcmsKLXZmcHJpbnRmCi12ZnNjYW5mCi12aGFuZ3VwCi12cHJpbnRmCi12c25wcmludGYKLXZzcHJpbnRmCi13YWl0Mwotd2FpdDQKLXdhaXRwaWQKLXdjcnRvbWIKLXdjc2NvbGwKLXdjc2R1cAotd2NzbGVuCi13Y3RvYgotd2N0b21iCi13Y3R5cGUKLXdjd2lkdGgKLXdtZW1jaHIKLXdtZW1jcHkKLXdtZW1wY3B5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOWFiNTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLWFpby5oCi1hbGxvY2EuaAotYXJnei5oCi1hcnBhL2luZXQuaAotYXJwYS9uYW1lc2VyLmgKLWFzbS9ieXRlb3JkZXIuaAotYXNtL2lvY3Rscy5oCi1hc20vcGFnZS5oCi1hc20vdHlwZXMuaAotYXNzZXJ0LmgKLWJ5dGVzd2FwLmgKLWNyeXB0LmgKLWN0eXBlLmgKLWRpcmVudC5oCi1kbGZjbi5oCi1lbGYuaAotZW5kaWFuLmgKLWVyci5oCi1lcnJuby5oCi1leGVjaW5mby5oCi1mY250bC5oCi1mZWF0dXJlcy5oCi1mbG9hdC5oCi1mc3RhYi5oCi1mdHcuaAotZ2V0b3B0LmgKLWdsb2IuaAotZ3JwLmgKLWljb252LmgKLWlmYWRkcnMuaAotaW50dHlwZXMuaAotbGFuZ2luZm8uaAotbGFzdGxvZy5oCi1saWJnZW4uaAotbGliaW50bC5oCi1saW1pdHMuaAotbGludXgvY2FwYWJpbGl0eS5oCi1saW51eC9mZC5oCi1saW51eC9mcy5oCi1saW51eC9oYXllc2VzcC5oCi1saW51eC9oZHJlZy5oCi1saW51eC9pY21wLmgKLWxpbnV4L2luNi5oCi1saW51eC9qb3lzdGljay5oCi1saW51eC9wdHJhY2UuaAotbGludXgvc2VyaWFsLmgKLWxpbnV4L3NvbnlwaS5oCi1saW51eC91bmlzdGQuaAotbGludXgvdXRzbmFtZS5oCi1saW51eC92ZXJzaW9uLmgKLWxvY2FsZS5oCi1tYWxsb2MuaAotbWF0aC5oCi1tY2hlY2suaAotbWVtb3J5LmgKLW1udGVudC5oCi1tcXVldWUuaAotbmV0ZGIuaAotbmV0L2lmLmgKLW5ldGluZXQvZXRoZXIuaAotbmV0aW5ldC9pbi5oCi1uZXRpbmV0L2lwNi5oCi1uZXRpbmV0L2lwLmgKLW5ldGluZXQvdGNwLmgKLW5ldGluZXQvdWRwLmgKLW5ldGlweC9pcHguaAotbmV0L3JvdXRlLmgKLXBhdGhzLmgKLXBvbGwuaAotcHRocmVhZC5oCi1wdHkuaAotcHdkLmgKLXJlZ2V4LmgKLXJlc29sdi5oCi1ycGMvcnBjLmgKLXJwYy90eXBlcy5oCi1zY2hlZC5oCi1zY3NpL3Njc2kuaAotc2VhcmNoLmgKLXNlbWFwaG9yZS5oCi1zZXRqbXAuaAotc2d0dHkuaAotc2hhZG93LmgKLXNpZ25hbC5oCi1zdGRhcmcuaAotc3RkYm9vbC5oCi1zdGRjCi1zdGRkZWYuaAotc3RkaW50LmgKLXN0ZGlvLmgKLXN0ZGxpYi5oCi1zdHJpbmcuaAotc3RyaW5ncy5oCi1zdHJvcHRzLmgKLXN5cy9iaXR5cGVzLmgKLXN5cy9jZGVmcy5oCi1zeXMvZGlyLmgKLXN5cy9lcG9sbC5oCi1zeXNleGl0cy5oCi1zeXMvZmNudGwuaAotc3lzL2ZpbGUuaAotc3lzL2ZzdWlkLmgKLXN5cy9pb2N0bC5oCi1zeXMvaXBjLmgKLXN5c2xvZy5oCi1zeXMvbW1hbi5oCi1zeXMvbW91bnQuaAotc3lzL210aW8uaAotc3lzL3BhcmFtLmgKLXN5cy9wb2xsLmgKLXN5cy9wcmN0bC5oCi1zeXMvcHRyYWNlLmgKLXN5cy9xdWV1ZS5oCi1zeXMvcmVnLmgKLXN5cy9yZXNvdXJjZS5oCi1zeXMvc2VsZWN0LmgKLXN5cy9zZW0uaAotc3lzL3NobS5oCi1zeXMvc2lnbmFsLmgKLXN5cy9zb2NrZXQuaAotc3lzL3NvY2tldHZhci5oCi1zeXMvc291bmRjYXJkLmgKLXN5cy9zdGF0ZnMuaAotc3lzL3N0YXQuaAotc3lzL3N0YXR2ZnMuaAotc3lzL3N0cm9wdHMuaAotc3lzL3N3YXAuaAotc3lzL3N5c2N0bC5oCi1zeXMvc3lzaW5mby5oCi1zeXMvc3lzbWFjcm9zLmgKLXN5cy90ZXJtaW9zLmgKLXN5cy90aW1lYi5oCi1zeXMvdGltZS5oCi1zeXMvdGltZXMuaAotc3lzL3RpbWV4LmgKLXN5cy90eXBlcy5oCi1zeXMvdWlvLmgKLXN5cy91bi5oCi1zeXMvdW5pc3RkLmgKLXN5cy91c2VyLmgKLXN5cy91dHNuYW1lLmgKLXN5cy92ZnMuaAotc3lzL3dhaXQuaAotdGVybWlvLmgKLXRlcm1pb3MuaAotdGltZS5oCi10dHllbnQuaAotdWxpbWl0LmgKLXVuaXN0ZC5oCi11c3RhdC5oCi11dGltZS5oCi11dG1wLmgKLXV0bXB4LmgKLXZhbHVlcy5oCi13Y2hhci5oCi13Y3R5cGUuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3OGJkODUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLWNoYXIKLWNoYXIgKgotZG91YmxlCi1mbG9hdAotaW50Ci1sb25nCi1sb25nIGRvdWJsZQotbG9uZyBpbnQKLWxvbmcgbG9uZwotbG9uZyBsb25nIGludAotc2hvcnQKLXNob3J0IGludAotc2lnbmVkIGNoYXIKLXVuc2lnbmVkIGNoYXIKLXVuc2lnbmVkIGludAotdW5zaWduZWQgbG9uZwotdW5zaWduZWQgbG9uZyBpbnQKLXVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKLXVuc2lnbmVkIHNob3J0Ci11bnNpZ25lZCBzaG9ydCBpbnQKLXZvaWQgKgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtY29uZmlnLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkN2I1MjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtY29uZmlnLmluYworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi1ERVBFTkRTICs9ICJrZXJuLXRvb2xzLW5hdGl2ZSIKLWluaGVyaXQgY21sMQotIwotIyBTZXQgdGhlIEFSQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHVDbGliYyBjb21waWxhdGlvbi4KLSMgUmV0dXJuIHZhbHVlIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBhcmNoaXRlY3R1cmVzIGtub3duIHRvIHVDbGliYzoKLSMgbGliYy9zeXNkZXBzLyovKgotIwotCi12YWxpZF9hcmNocyA9ICJcCi1hbHBoYSBcCi1hcm0gXAotYXZyMzIgXAotYmZpbiBcCi1jNnggXAotY3JpcyBcCi1lMSBcCi1mcnYgXAotaDgzMDAgXAotaHBwYSBcCi1pMzg2IFwKLWk5NjAgXAotaWE2NCBcCi1tNjhrIFwKLW1pY3JvYmxhemUgXAotbWlwcyBcCi1uaW9zIFwKLW5pb3MyIFwKLXBvd2VycGMgXAotc2ggXAotc2g2NCBcCi1zcGFyYyBcCi12ODUwIFwKLXZheCBcCi14ODZfNjQgXAoteHRlbnNhIFwKLSIKLWRlZiBtYXBfdWNsaWJjX2FyY2goYSwgZCk6Ci0gICAgIiIiUmV0dXJuIHRoZSB1Q2xpYmMgYXJjaGl0ZWN0dXJlIGZvciB0aGUgZ2l2ZW4gVEFSR0VUX0FSQ0guIiIiCi0gICAgaW1wb3J0IHJlCi0KLSAgICB2YWxpZF9hcmNocyA9IGQuZ2V0VmFyKCd2YWxpZF9hcmNocycsIFRydWUpLnNwbGl0KCkKLQotICAgIGlmIHJlLm1hdGNoKCdeKGFybXxzYTExMCkuKicsIGEpOgotICAgICAgICByZXR1cm4gJ2FybScKLSAgICBlbGlmIHJlLm1hdGNoKCdeKGkuODZ8YXRobG9uKSQnLCBhKToKLSAgICAgICAgcmV0dXJuICdpMzg2JwotICAgIGVsaWYgcmUubWF0Y2goJ15taXBzLionLCBhKToKLSAgICAgICAgcmV0dXJuICdtaXBzJwotICAgIGVsaWYgcmUubWF0Y2goJ15wYXJpc2MuKicsIGEpOgotICAgICAgICByZXR1cm4gJ2hwcGEnCi0gICAgZWxpZiByZS5tYXRjaCgnXnBwYy4qJywgYSk6Ci0gICAgICAgIHJldHVybiAncG93ZXJwYycKLSAgICBlbGlmIHJlLm1hdGNoKCdeczM5MC4qJywgYSk6Ci0gICAgICAgIHJldHVybiAnczM5MCcKLSAgICBlbGlmIHJlLm1hdGNoKCdec2guKicsIGEpOgotICAgICAgICByZXR1cm4gJ3NoJwotICAgIGVsaWYgcmUubWF0Y2goJ14oc3VufHNwYXJjKS4qJywgYSk6Ci0gICAgICAgIHJldHVybiAnc3BhcmMnCi0gICAgZWxpZiByZS5tYXRjaCgnXnh0ZW5zYS4qJywgYSk6Ci0gICAgICAgIHJldHVybiAneHRlbnNhJwotICAgIGVsaWYgYSBpbiB2YWxpZF9hcmNoczoKLSAgICAgICAgcmV0dXJuIGEKLSAgICBlbHNlOgotICAgICAgICBiYi5lcnJvcigiY2Fubm90IG1hcCAnJXMnIHRvIGEgdUNsaWJjIGFyY2hpdGVjdHVyZSIgJSBhKQotCi1leHBvcnQgVUNMSUJDX0FSQ0ggPSAiJHtAbWFwX3VjbGliY19hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKX0iCi0KLWRlZiBtYXBfdWNsaWJjX2FiaShvLCBkKToKLSAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBBQkkgZm9yIHRoZSBnaXZlbiBUQVJHRVRfT1MuIiIiCi0gICAgaW1wb3J0IHJlCi0KLSAgICBhcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKLSAgICBpZiBtYXBfdWNsaWJjX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpID09ICJhcm0iOgotICAgICAgICBpZiByZS5tYXRjaCgnLiplYWJpJCcsIG8pOgotICAgICAgICAgICAgcmV0dXJuICdBUk1fRUFCSScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAnQVJNX09BQkknCi0gICAgIyBGSVhNRTogVGhpcyBpcyBpbmFjY3VyYXRlISBIYW5kbGUgbzMyLCBuMzIsIG42NAotICAgIGVsaWYgcmUubWF0Y2goJ15taXBzLio2NCQnLCBhcmNoKToKLSAgICAgICAgcmV0dXJuICdNSVBTX042NF9BQkknCi0gICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKicsIGFyY2gpOgotICAgICAgICByZXR1cm4gJ01JUFNfTzMyX0FCSScKLSAgICByZXR1cm4gIiIKLQotZXhwb3J0IFVDTElCQ19BQkkgPSAiJHtAbWFwX3VjbGliY19hYmkoZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpLCBkKX0iCi0KLWRlZiBtYXBfdWNsaWJjX2VuZGlhbihhLCBkKToKLSAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBlbmRpYW5lc3MgZm9yIHRoZSBnaXZlbiBUQVJHRVRfQVJDSC4iIiIKLSAgICBpbXBvcnQgcmUKLQotICAgICMgQWx3YXlzIEJFCi0gICAgaWYgcmUubWF0Y2goJ14oYXZyMzJ8ZTF8ZnJ2fChwYXJpc2N8aHBwYSl8bTY4a3xtaWNyb2JsYXplfHBvd2VycGMuKnwoc3BhcmN8c3VuKS4qKSQnLCBhKToKLSAgICAgICAgcmV0dXJuICdCSUcnCi0gICAgIyBQb3NzaWJseSBCRQotICAgIGVsaWYgcmUubWF0Y2goJ14oKChhcm18c2ExMTApLiplYil8aDgzMDAuKmVifChwYXJpc2N8aHBwYSkuKmVifG1pcHN8bWlwczY0fHNoLiplYnx4dGVuc2EuKmViKSQnLCBhKToKLSAgICAgICAgcmV0dXJuICdCSUcnCi0gICAgcmV0dXJuICdMSVRUTEUnCi0KLWV4cG9ydCBVQ0xJQkNfRU5ESUFOID0gIiR7QG1hcF91Y2xpYmNfZW5kaWFuKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKX0iCi0KLSMgaW50ZXJuYWwgaGVscGVyCi1kZWYgdWNsaWJjX2NmZyhmZWF0dXJlLCBmZWF0dXJlcywgdG9rZW5zLCBjbmYsIHJlbSk6Ci0gICAgaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgotICAgICAgICB0b2tlbnMgPSBbdG9rZW5zXQotICAgIHJlbS5leHRlbmQoWycvXlsjIF0qJyArIHRva2VuICsgJ1sgPV0vZCcgZm9yIHRva2VuIGluIHRva2Vuc10pCi0gICAgaWYgdHlwZShmZWF0dXJlcykgPT0gdHlwZShbXSkgYW5kIGZlYXR1cmUgaW4gZmVhdHVyZXM6Ci0gICAgICAgIGNuZi5leHRlbmQoW3Rva2VuICsgJz15JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKLSAgICBlbHNlOgotICAgICAgICBjbmYuZXh0ZW5kKFsnIyAnICsgdG9rZW4gKyAnIGlzIG5vdCBzZXQnIGZvciB0b2tlbiBpbiB0b2tlbnNdKQotCi0jIE1hcCBkaXN0cm8gZmVhdHVyZXMgdG8gY29uZmlnIHNldHRpbmdzCi1kZWYgZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpOgotICAgIGNuZiwgcmVtID0gKFtdLCBbXSkKLSAgICBkaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkuc3BsaXQoKQotICAgIHVjbGliY19jZmcoJ2lwdjQnLCAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfSVBWNCcsIGNuZiwgcmVtKQotICAgIHVjbGliY19jZmcoJ2lwdjYnLCAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfSVBWNicsIGNuZiwgcmVtKQotICAgIHVjbGliY19jZmcoJ2xhcmdlZmlsZScsIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfTEZTJywgY25mLCByZW0pCi0gICAgdWNsaWJjX2NmZygnbmxzJywgICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19MT0NBTEUnLCBjbmYsIHJlbSkKLSAgICB1Y2xpYmNfY2ZnKCd0aHVtYi1pbnRlcndvcmsnLCBkaXN0cm9fZmVhdHVyZXMsJ1VTRV9CWCcsIGNuZiwgcmVtKQotICAgIHVjbGliY19jZmcoJ3hhdHRyJywgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfWEFUVFInLCBjbmYsIHJlbSkKLSAgICB1Y2xpYmNfY2ZnKCdzc3AnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX1NTUCcsIGNuZiwgcmVtKQotICAgIHVjbGliY19jZmcoJ3NzcCcsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19CVUlMRF9TU1AnLCBjbmYsIHJlbSkKLSAgICB1Y2xpYmNfY2ZnKCdhcmdwJywgICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19BUkdQJywgY25mLCByZW0pCi0gICAgdWNsaWJjX2NmZygnbGliYy1wb3NpeC1jbGFuZy13Y2hhcicsICBkaXN0cm9fZmVhdHVyZXMsJ1VDTElCQ19IQVNfV0NIQVInLCBjbmYsIHJlbSkKLSAgICByZXR1cm4gIlxuIi5qb2luKGNuZiksICJcbiIuam9pbihyZW0pCi0jIFgsIFkgPSAke0BmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCl9Ci0jIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzZWVtIHRvIHdvcmsgd2l0aCBiaXRiYWtlLCB3b3JrYXJvdW5kOgotZGVmIGZlYXR1cmVzX3RvX3VjbGliY19jb25mKGQpOgotICAgIGNuZiwgcmVtID0gZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpCi0gICAgcmV0dXJuIGNuZgotZGVmIGZlYXR1cmVzX3RvX3VjbGliY19kZWwoZCk6Ci0gICAgY25mLCByZW0gPSBmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCkKLSAgICByZXR1cm4gcmVtCi0KLSMgcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNyYyB1cmkgdGhhdCBhcmUgLmNmZyBmaWxlcwotZGVmIGZpbmRfY2ZncyhkKToKLSAgICBzb3VyY2VzPXNyY19wYXRjaGVzKGQsIFRydWUpCi0gICAgc291cmNlc19saXN0PVtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgaWYgcy5lbmRzd2l0aCgnLmNmZycpOgotICAgICAgICAgICAgc291cmNlc19saXN0LmFwcGVuZChzKQotCi0gICAgcmV0dXJuIHNvdXJjZXNfbGlzdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NmZhN2MuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLVNSQ1JFViA9ICIwMDNiMjY2Y2JlYjM3MGE4ZWFlOTFkYzI1NjE5N2YwMDc5OGM2ZjkzIgotCi1QViA9ICIxLjAuMTIrZ2l0JHtTUkNQVn0iCi0KLUZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3VjbGliYy1naXQ6IgotCi1TUkNfVVJJID0gImdpdDovL3VjbGliYy1uZy5vcmcvZ2l0L3VjbGliYy1uZyBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly91Q2xpYmMubWFjaGluZSBcCi0gICAgICAgIGZpbGU6Ly91Q2xpYmMuZGlzdHJvIFwKLSAgICAgICAgZmlsZTovL29ic3RhY2suY2ZnIFwKLSAgICAgICAgZmlsZTovL2xvY2FsZS5jZmcgXAotIgotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2ZjE0Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1Gcm9tIDE0Yjg2NWIzNDM4ZDBkZjI5YjQ5NjkxNDg2NzhkOGZhODk0M2UxZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo0OTozMyAtMDcwMAotU3ViamVjdDogW1BBVENIIDEvN10gRGlzYWJsZSBscm91bnRfdGVzKCkgZnVuY3Rpb24KLQotSXRzIG5vdCB1c2VkIGFueXdheSwgYXZvaWRzIHNvbWUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMgfCAyIC0tCi0gMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS90ZXN0L21hdGgvbGlibS10ZXN0LmluYyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCi1pbmRleCBmNTBiNDhiLi42ZDcwYTk1IDEwMDY0NAotLS0tIGEvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMKLSsrKyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCi1AQCAtMzQ3MCw3ICszNDcwLDYgQEAgbG9nYl90ZXN0ICh2b2lkKQotIH0KLSAKLSAKLS0jaWYgMAotIHN0YXRpYyB2b2lkCi0gbHJvdW5kX3Rlc3QgKHZvaWQpCi0gewotQEAgLTM2MDUsNyArMzYwNCw2IEBAIGxscm91bmRfdGVzdCAodm9pZCkKLSAKLSAgIEVORCAobGxyb3VuZCk7Ci0gfQotLSNlbmRpZgotIAotIHN0YXRpYyB2b2lkCi0gbW9kZl90ZXN0ICh2b2lkKQotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvbG9jYWxlLmNmZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzY2NDM1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1VQ0xJQkNfSEFTX0xPQ0FMRT15Ci1VQ0xJQkNfSEFTX1hMT0NBTEU9eQotVUNMSUJDX0JVSUxEX01JTklNQUxfTE9DQUxFPXkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9vYnN0YWNrLmNmZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9vYnN0YWNrLmNmZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZiZjlkNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1VQ0xJQkNfSEFTX09CU1RBQ0s9eQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLmRpc3RybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4NWNlOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLmRpc3RybworKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0jCi0jIEdlbmVyYWwgTGlicmFyeSBTZXR0aW5ncwotIwotIyBIQVZFX05PX1BJQyBpcyBub3Qgc2V0Ci0jIERPUElDIGlzIG5vdCBzZXQKLSMgSEFWRV9OT19TSEFSRUQgaXMgbm90IHNldAotIyBBUkNIX0hBU19OT19MRFNPIGlzIG5vdCBzZXQKLUhBVkVfU0hBUkVEPXkKLSMgRk9SQ0VfU0hBUkVBQkxFX1RFWFRfU0VHTUVOVFMgaXMgbm90IHNldAotTERTT19MRERfU1VQUE9SVD15Ci1MRFNPX0NBQ0hFX1NVUFBPUlQ9eQotIyBMRFNPX1BSRUxPQURfRklMRV9TVVBQT1JUIGlzIG5vdCBzZXQKLUxEU09fQkFTRV9GSUxFTkFNRT0ibGQuc28iCi0jIFVDTElCQ19TVEFUSUNfTERDT05GSUcgaXMgbm90IHNldAotTERTT19SVU5QQVRIPXkKLVVDTElCQ19DVE9SX0RUT1I9eQotTERTT19HTlVfSEFTSF9TVVBQT1JUPXkKLSMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAotVUNMSUJDX0hBU19USFJFQURTPXkKLVVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkU9eQotUFRIUkVBRFNfREVCVUdfU1VQUE9SVD15Ci0jIExJTlVYVEhSRUFEU19PTEQgaXMgbm90IHNldAotVUNMSUJDX0hBU19MRlM9eQotIyBNQUxMT0MgaXMgbm90IHNldAotIyBNQUxMT0NfU0lNUExFIGlzIG5vdCBzZXQKLU1BTExPQ19TVEFOREFSRD15Ci1NQUxMT0NfR0xJQkNfQ09NUEFUPXkKLVVDTElCQ19EWU5BTUlDX0FURVhJVD15Ci1DT01QQVRfQVRFWElUPXkKLVVDTElCQ19TVVNWM19MRUdBQ1k9eQotVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1M9eQotVUNMSUJDX1NVU1Y0X0xFR0FDWT15Ci1VQ0xJQkNfSEFTX1NIQURPVz15Ci1VQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FPXkKLVVDTElCQ19IQVNfX19QUk9HTkFNRT15Ci1VTklYOThQVFlfT05MWT15Ci1BU1NVTUVfREVWUFRTPXkKLVVDTElCQ19IQVNfTElCVVRJTD15Ci1VQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQotVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKLVVDTElCQ19IQVNfVFpfRklMRT15Ci1VQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKLVVDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCi0KLSMKLSMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncwotIwotVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKLVVDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2Ci0KLSMKLSMgTmV0d29ya2luZyBTdXBwb3J0Ci0jCi1VQ0xJQkNfSEFTX0lQVjY9eQotVUNMSUJDX0hBU19SUEM9eQotVUNMSUJDX0hBU19GVUxMX1JQQz15Ci1VQ0xJQkNfSEFTX1JFRU5UUkFOVF9SUEM9eQotVUNMSUJDX1VTRV9ORVRMSU5LPXkKLVVDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUc9eQotCi1VQ0xJQkNfSEFTX0JTRF9SRVNfQ0xPU0U9eQotVUNMSUJDX0hBU19MSUJSRVNPTFZfU1RVQj15Ci1VQ0xJQkNfSEFTX0xJQk5TTF9TVFVCPXkKLQotIwotIyBTdHJpbmcgYW5kIFN0ZGlvIFN1cHBvcnQKLSMKLVVDTElCQ19IQVNfU1RSSU5HX0dFTkVSSUNfT1BUPXkKLVVDTElCQ19IQVNfU1RSSU5HX0FSQ0hfT1BUPXkKLVVDTElCQ19IQVNfQ1RZUEVfVEFCTEVTPXkKLVVDTElCQ19IQVNfQ1RZUEVfU0lHTkVEPXkKLSMgVUNMSUJDX0hBU19DVFlQRV9VTlNBRkUgaXMgbm90IHNldAotVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEPXkKLSMgVUNMSUJDX0hBU19DVFlQRV9FTkZPUkNFRCBpcyBub3Qgc2V0Ci1VQ0xJQkNfSEFTX1dDSEFSPXkKLSMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAotVUNMSUJDX0hBU19IRVhBREVDSU1BTF9GTE9BVFM9eQotVUNMSUJDX0hBU19HTElCQ19DVVNUT01fUFJJTlRGPXkKLVVDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKLVVDTElCQ19IQVNfU0NBTkZfR0xJQkNfQV9GTEFHPXkKLSMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfTk9ORSBpcyBub3Qgc2V0Ci0jIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzI1NiBpcyBub3Qgc2V0Ci0jIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzUxMiBpcyBub3Qgc2V0Ci0jIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzEwMjQgaXMgbm90IHNldAotIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yMDQ4IGlzIG5vdCBzZXQKLVVDTElCQ19IQVNfU1RESU9fQlVGU0laXzQwOTY9eQotIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl84MTkyIGlzIG5vdCBzZXQKLVVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfTk9ORT15Ci0jIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfNCBpcyBub3Qgc2V0Ci0jIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfOCBpcyBub3Qgc2V0Ci0jIFVDTElCQ19IQVNfU1RESU9fU0hVVERPV05fT05fQUJPUlQgaXMgbm90IHNldAotVUNMSUJDX0hBU19TVERJT19HRVRDX01BQ1JPPXkKLVVDTElCQ19IQVNfU1RESU9fUFVUQ19NQUNSTz15Ci1VQ0xJQkNfSEFTX1NURElPX0FVVE9fUldfVFJBTlNJVElPTj15Ci0jIFVDTElCQ19IQVNfRk9QRU5fTEFSR0VGSUxFX01PREUgaXMgbm90IHNldAotVUNMSUJDX0hBU19GT1BFTl9FWENMVVNJVkVfTU9ERT15Ci1VQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TPXkKLVVDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15Ci1VQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKLSMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0Ci1VQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15Ci0jIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAotVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKLVVDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15Ci0KLSMKLSMgQmlnIGFuZCBUYWxsCi0jCi1VQ0xJQkNfSEFTX1JFR0VYPXkKLSMgVUNMSUJDX0hBU19SRUdFWF9PTEQgaXMgbm90IHNldAotVUNMSUJDX0hBU19GTk1BVENIPXkKLSMgVUNMSUJDX0hBU19GTk1BVENIX09MRCBpcyBub3Qgc2V0Ci1VQ0xJQkNfSEFTX1dPUkRFWFA9eQotVUNMSUJDX0hBU19ORlRXPXkKLVVDTElCQ19IQVNfRlRXPXkKLVVDTElCQ19IQVNfRlRTPXkKLVVDTElCQ19IQVNfR0xPQj15Ci1VQ0xJQkNfSEFTX0dOVV9HTE9CPXkKLQotIwotIyBMaWJyYXJ5IEluc3RhbGxhdGlvbiBPcHRpb25zCi0jCi1TSEFSRURfTElCX0xPQURFUl9QUkVGSVg9Ii9saWIiCi1SVU5USU1FX1BSRUZJWD0iLyIKLURFVkVMX1BSRUZJWD0iLy91c3IiCi1NVUxUSUxJQl9ESVI9ImxpYiIKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIFVDTElCQ19CVUlMRF9QSUUgaXMgbm90IHNldAotIyBVQ0xJQkNfSEFTX0FSQzRSQU5ET00gaXMgbm90IHNldAotIyBIQVZFX05PX1NTUCBpcyBub3Qgc2V0Ci0jIFVDTElCQ19IQVNfU1NQIGlzIG5vdCBzZXQKLVVDTElCQ19CVUlMRF9SRUxSTz15Ci1VQ0xJQkNfQlVJTERfTk9XPXkKLVVDTElCQ19CVUlMRF9OT0VYRUNTVEFDSz15Ci0KLSMKLSMgdUNsaWJjIGRldmVsb3BtZW50L2RlYnVnZ2luZyBvcHRpb25zCi0jCi1DUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKLVVDTElCQ19FWFRSQV9DRkxBR1M9IiIKLSMgRE9ERUJVRyBpcyBub3Qgc2V0Ci0jIERPREVCVUdfUFQgaXMgbm90IHNldAotIyBET1NUUklQIGlzIG5vdCBzZXQKLSMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKLSMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAotIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0Ci1VQ0xJQkNfSEFTX0JBQ0tUUkFDRT15Ci1XQVJOSU5HUz0iLVdhbGwiCi0jIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKLSMgRE9NVUxUSSBpcyBub3Qgc2V0Ci0jIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldAotCi0jIG1hdGggc3R1ZmYgZm9yIHBlcmwKLURPX0M5OV9NQVRIPXkKLVVDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSD15Ci1VQ0xJQkNfSEFTX0ZFTlY9eQotVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15Ci0jIFVDTElCQ19MSU5VWF9NT0RVTEVfMjQgaXMgbm90IHNldAotVUNMSUJDX0xJTlVYX1NQRUNJRklDPXkKLVVDTElCQ19IQVNfUkVBTFRJTUU9eQotVUNMSUJDX0hBU19BRFZBTkNFRF9SRUFMVElNRT15Ci1VQ0xJQkNfSEFTX05FVFdPUktfU1VQUE9SVD15Ci1VQ0xJQkNfSEFTX1NPQ0tFVD15Ci1VQ0xJQkNfSEFTX0JTRF9FUlI9eQotVUNMSUJDX0hBU19TWVNMT0c9eQotVUNMSUJDX0hBU19DUllQVD15Ci1VQ0xJQkNfSEFTX0NSWVBUX0lNUEw9eQotVUNMSUJDX0hBU19HTlVfRVJST1I9eQotVUNMSUJDX0hBU19QVFk9eQotVUNMSUJDX0JTRF9TUEVDSUZJQz15Ci1VQ0xJQkNfSEFTX0VQT0xMPXkKLVVDTElCQ19IQVNfRkxPQVRTPXkKLQotIyBUaGUgYmVsb3cgb3B0aW9uIGlzIG5lZWRlZCBmb3IgQVJNIHNpbmNlIGRlcGVuZGluZwotIyB1cG9uZyB3aGF0IGludHJ1Y3Rpb24gc2V0IGlzIGNob3NlbiB0aGlzIHdpbGwgYmUKLSMgZW5hYmxlZC4gQXMgc3VjaCBpdCBpcyBoYXJtbGVzcyBhbmQgd2lsbCBiZSBwdW50ZWQKLSMgYnkgbWVudWNvbmZpZyBmb3Igb3RoZXIgYXJjaGVzLgotCi0jIENPTVBJTEVfSU5fVEhVTUJfTU9ERSBpcyBub3Qgc2V0Ci0KLSMgbmVlZGVkIGJ5IHNoYWRvdwotVUNMSUJDX0hBU19VVE1QPXkKLSMgbmVlZGVkIGJ5IHN5c3RlbWQKLVVDTElCQ19IQVNfVVRNUFg9eQotVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15Ci1VQ0xJQkNfSEFTX1JFU09MVkVSX1NVUFBPUlQ9eQotIyBuZWVkZWQgZm9yIExUUAotVUNMSUJDX1NVU1Y0X0xFR0FDWT15Ci1VQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUw9eQotRE9fWFNJX01BVEg9eQotVUNMSUJDX1NWNF9ERVBSRUNBVEVEPXkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMubWFjaGluZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMubWFjaGluZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk1ZjQ0NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLm1hY2hpbmUKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIFZlcnNpb246IDAuOS4zMi1naXQKLSMgTW9uIEp1bCAxOSAwMTozNDoyOSAyMDEwCi0jCi0jCi0jIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAotIwotRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15Ci1BUkNIX0hBU19NTVU9eQotQVJDSF9VU0VfTU1VPXkKLUtFUk5FTF9IRUFERVJTPSIvdXNyL2luY2x1ZGUiCi1IQVZFX0RPVF9DT05GSUc9eQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1pbml0aWFsX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWluaXRpYWxfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTM3Y2NiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWluaXRpYWxfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotU0VDVElPTiA9ICJiYXNlIgotcmVxdWlyZSB1Y2xpYmMuaW5jCi1yZXF1aXJlIHVjbGliYy1naXQuaW5jCi0KLURFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIG5jdXJzZXMtbmF0aXZlIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIGxpYmdjYy1pbml0aWFsIGtlcm4tdG9vbHMtbmF0aXZlIgotUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIgotCi1QQUNLQUdFUyA9ICIiCi1QQUNLQUdFU19EWU5BTUlDID0gIiIKLQotU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgotU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKLQotZG9faW5zdGFsbCgpIHsKLQkjIEluc3RhbGwgaW5pdGlhbCBoZWFkZXJzIGludG8gdGhlIGNyb3NzIGRpcgotCW1ha2UgUFJFRklYPSR7RH0gREVWRUxfUFJFRklYPSR7cHJlZml4fS8gUlVOVElNRV9QUkVGSVg9LyBcCi0JCWluc3RhbGxfaGVhZGVycyBpbnN0YWxsX3N0YXJ0ZmlsZXMKLQotICAgICAgICAjIGFkZCBsaW5rcyB0byBsaW51eC1saWJjLWhlYWRlcnM6IGZpbmFsIHVjbGliYyBidWlsZCBuZWVkIHRoaXMuCi0gICAgICAgIGZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KLSAgICAgICAgICAgICAgICBpZiBbIC1kICR7RH0ke2luY2x1ZGVkaXJ9LyR0IF07IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9LyR0Ci0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBsbiAtc2YgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfS8kdCAke0R9JHtpbmNsdWRlZGlyfS8KLSAgICAgICAgZG9uZQotCi19Ci1kb19jb21waWxlKCkgewotCToKLX0KLQotZG9fc2l0ZWNvbmZpZyAoKSB7Ci0gICAgICAgIDoKLX0KLQotZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1wYWNrYWdlLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM5Zjg0ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1wYWNrYWdlLmluYworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMgRW5zdXJlIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UgaXMgcHJvY2Vzc2VkIGJlZm9yZSB1Y2xpYmMtc3RhdGljZGV2IHRvIGFsbG93Ci0jICpfbm9uc2hhcmVkLmEgbGlicmFyaWVzIHRvIGJlIHBhY2thZ2VkIGluIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UuCi1QQUNLQUdFUyA9ICJsZGQgdWNsaWJjLXV0aWxzIHVjbGliYy1nY29udiB1Y2xpYmMtdGhyZWFkLWRiIHVjbGliYy1hcmdwIHVjbGliYy1iYWNrdHJhY2UgdWNsaWJjLWxpYmNyeXB0IHVjbGliYy1saWJpbnRsIHVjbGliYy1saWJuc2wgdWNsaWJjLWxpYnJlc29sdiB1Y2xpYmMtbGlibSB1Y2xpYmMtbGliZGwgdWNsaWJjLWxpYnV0aWwgdWNsaWJjLWxpYnB0aHJlYWQgdWNsaWJjLWxpYnJ0ICR7UE59LWRiZyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRvYyAke1BOfSIKLQotRklMRVNfdWNsaWJjLWxpYmNyeXB0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0LSouc28iCi1GSUxFU191Y2xpYmMtbGliaW50bCA9ICIke2Jhc2VfbGliZGlyfS9saWJpbnRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmludGwtKi5zbyIKLUZJTEVTX3VjbGliYy1saWJuc2wgPSAiJHtiYXNlX2xpYmRpcn0vbGlibnNsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zbC0qLnNvIgotRklMRVNfdWNsaWJjLWxpYnJlc29sdiA9ICIke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2LSouc28iCi1GSUxFU191Y2xpYmMtbGlibSA9ICIke2Jhc2VfbGliZGlyfS9saWJtKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm0tKi5zbyIKLUZJTEVTX3VjbGliYy1saWJkbCA9ICIke2Jhc2VfbGliZGlyfS9saWJkbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJkbC0qLnNvIgotRklMRVNfdWNsaWJjLWxpYnV0aWwgPSAiJHtiYXNlX2xpYmRpcn0vbGlidXRpbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJ1dGlsLSouc28iCi1GSUxFU191Y2xpYmMtbGlicHRocmVhZCA9ICIke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQtKi5zbyIKLUZJTEVTX3VjbGliYy1saWJydCA9ICIke2Jhc2VfbGliZGlyfS9saWJydCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJydC0qLnNvIgotCi1GSUxFU19sZGQgPSAiJHtiaW5kaXJ9L2xkZCIKLUZJTEVTX3VjbGliYy11dGlscyA9ICIke2JpbmRpcn0gJHtzYmluZGlyfSIKLUZJTEVTX3VjbGliYy1nY29udiA9ICIke2xpYmRpcn0vZ2NvbnYiCi1GSUxFU191Y2xpYmMtdGhyZWFkLWRiID0gIiR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYioiCi1GSUxFU191Y2xpYmMtYXJncCA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YXJncC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnVhcmdwKi5zby4qIgotRklMRVNfdWNsaWJjLWJhY2t0cmFjZSA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YmFja3RyYWNlLSouc28gJHtiYXNlX2xpYmRpcn0vbGlidWJhY2t0cmFjZSouc28uKiIKLQotIyBUaGUgbGFzdCBsaW5lIChnZGIgYW5kIGxpYjEpIGlzIGZvciB1Y2xpbnV4LXVjbGliYyBidWlsZHMKLXVjbGliY19iYXNlbGlicyA9ICIke2Jhc2VfbGliZGlyfS9sZCouc28uKiAke2Jhc2VfbGliZGlyfS9sZCouc28gXAotICAgICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L2xpYmMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidUNsaWJjLSouc28gXAotICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJjLmdkYiAke2xpYmRpcn0vbGliYyAke2Jhc2VfbGliZGlyfS9saWIxLnNvIFwKLSAgICAgICAgICAgICAgICAgICIKLUZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKLUZJTEVTXyR7UE59LWRldiArPSAiXAotICAgICAgICAke2xpYmRpcn0vbGliKi5zbyBcCi0gICAgICAgICR7bGliZGlyfS8qX25vbnNoYXJlZC5hIFwKLSAgICAgICAgJHtsaWJkaXJ9L1tTXSpjcnRbMWluXS5vIFwKLSAgICAgICAgJHtsaWJkaXJ9L2NydHJlbG9jKi5vIFwKLSAgICAgICAgJHtpbmNsdWRlZGlyfS8qLmggJHtpbmNsdWRlZGlyfS8qLyouaCBcCi0gICAgICAgIgotRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke3VjbGliY19iYXNlbGlic30gL3NiaW4vbGRjb25maWcgXAotICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfSAke2RhdGFkaXJ9L3pvbmVpbmZvICR7bGliZGlyfS9sb2NhbGUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNDIyODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLVNVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBlbWJlZGRlZCBzeXN0ZW1zIgotREVTQ1JJUFRJT04gPSAiVGhlIG5hbWUgdUNsaWJjIGlzIGFuIGFiYnJldmlhdGlvbiBmb3IgJ3RoZSBcCi1taWNyb2NvbnRyb2xsZXIgQyBsaWJyYXJ5Jy4gRm9yIHNpbXBsaWNpdHksIHVDbGliYyBpcyBwcm9ub3VuY2VkIFwKLSd5ZXctc2VlLWxpYi1zZWUnLiAgVGhlIGdvYWwgb2YgdUNsaWJjIGlzIHRvIHByb3ZpZGUgYXMgbXVjaCBcCi1mdW5jdGlvbmFsaXR5IGFzIHBvc3NpYmxlIGluIGEgc21hbGwgYW1vdW50IG9mIHNwYWNlLCBhbmQgaXQgaXMgaW50ZW5kZWQgXAotcHJpbWFyaWx5IGZvciBlbWJlZGRlZCB1c2UuIEl0IGlzIGFsc28gaGlnaGx5IGNvbmZpZ3VyYWJsZSBpbiBzdXBwb3J0ZWQgXAotZmVhdHVyZXMsIGF0IHRoZSBjb3N0IG9mIEFCSSBkaWZmZXJlbmNlcyBmb3IgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBcCi11Q2xpYmMgaGFzIGJlZW4gZGVzaWduZWQgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvIGJlIGEgQyBsaWJyYXJ5IGZvciBcCi1lbWJlZGRlZCBMaW51eC4gIEl0IGlzIE5PVCBjb21wYXRpYmxlIHdpdGggYmluYXJpZXMgbGlua2VkIGFnYWluc3QgZ2xpYmMuIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xKyIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCi0JCSAgICBmaWxlOi8vQ09QWUlORy5MSUIuYm9pbGVycGxhdGU7bWQ1PWFhZGRlYWRjZGRlYjkxODI5N2UwZTRhZmM1MmNlNDZmIFwKLWZpbGU6Ly8ke1N9L3Rlc3QvcmVnZXgvdGVzdHJlZ2V4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0zMTttZDU9MjM0ZWZiMjI3ZDBhNDA2NzdmODk1ZTRhMWUyNmU5NjAiCi0KLXJlcXVpcmUgdWNsaWJjLWNvbmZpZy5pbmMKLQotUEFUSF9wcmVwZW5kID0gIiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS4ke1NUQUdJTkdDQ306IgotVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSIKLQotIyBzaXRlY29uZmlnLmJiY2xhc3MgcnVucyBjb25maWd1cmUgd2hpY2ggbmVlZHMgYSB3b3JraW5nIGNvbXBpbGVyCi0jIEZvciB0aGUgY29tcGlsZXIgdG8gd29yayB3ZSBuZWVkIGEgd29ya2luZyBsaWJjIHlldCBsaWJjIGlzbid0Ci0jIGluIHRoZSBzeXNyb290cyBkaXJlY3RvcnkgYXQgdGhpcyBwb2ludC4gVGhpcyBtZWFucyB0aGUgbGliYy5zbwotIyBsaW5rZXIgc2NyaXB0IHdvbid0IHdvcmsgYXMgdGhlIC0tc3lzcm9vdCBzZXR0aW5nIGlzbid0IGNvcnJlY3QuCi0jIEhlcmUgd2UgY3JlYXRlIGEgaGFja2VkIHVwIGxpYmMgbGlua2VyIHNjcmlwdCBhbmQgcGFzcyBpbiB0aGUgcmlnaHQKLSMgZmxhZ3MgdG8gbGV0IGNvbmZpZ3VyZSB3b3JrLiBVZ2x5LgotRVhUUkFTSVRFQ09ORklHID0gIkNGTEFHUz0nJHtDRkxBR1N9IC1XbCwtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSciCi1zaXRlY29uZmlnX2RvX3NpdGVjb25maWdfZ2VuY2FjaGVfcHJlcGVuZCA9ICIgXAotbWtkaXIgLXAgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCi1jcCAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0vbGliYy5zbyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKLXNlZCAtaSAtZSAncyMgJHtiYXNlX2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9I2cnIC1lICdzIyAke2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSNnJyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMvbGliYy5zbzsgXAotIgotCi0jIEZvciBub3csIHdlIHdpbGwgc2tpcCBidWlsZGluZyBvZiBhIGdjYyBwYWNrYWdlIGlmIGl0IGlzIGEgdWNsaWJjIG9uZQotIyBhbmQgb3VyIGJ1aWxkIGlzIG5vdCBhIHVjbGliYyBvbmUsIGFuZCB3ZSBza2lwIGEgZ2xpYmMgb25lIGlmIG91ciBidWlsZAotIyBpcyBhIHVjbGliYyBidWlsZC4KLUNPTVBBVElCTEVfSE9TVCA9ICIuKi11Y2xpYmMuKiIKLQotSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKLQotIyBUaGVyZSBhcHBlYXJzIHRvIGJlIGEgcGFyYWxsZWwgcmFjZSBpbiB1Y2xpYmM6Ci0jIEdFTiAvZXh0cmEvbG9jYWxlL2xvY2FsZV9jb2xsYXRlLmgKLSMgeGFyZ3M6IC4uLy4uLy9leHRyYS9sb2NhbGUvZ2VuX2NvbGxhdGU6IFRleHQgZmlsZSBidXN5Ci0jIG1ha2VbMV06ICoqKiBbLi4vLi4vL2V4dHJhL2xvY2FsZS9sb2NhbGVfY29sbGF0ZS5oXSBFcnJvciAxMjYKLVBBUkFMTEVMX01BS0UgPSAiIgotCi0jIGRvX3N0YWdlIGJhcmZzIG9uIGEgQ0Mgd2l0aCB3aGl0ZXNwYWNlLCB0aGVyZWZvcmUgcHV0IHRoZSAnSE9TVF9DQ19BUkNIJyBpbgotIyB0aGUgQ0ZMQUdTICh3aGVuIGJ1aWxkaW5nIHRoZSB1dGlscykuCi1PRU1BS0VfTk9fQ0MgPSAiJ1NUUklQVE9PTD10cnVlJyAnTEQ9JHtMRH0nIgotRVhUUkFfT0VNQUtFID0gIiR7T0VNQUtFX05PX0NDfSBcCi0gICAgICAgICAgICAgICAgJ0hPU1RDQz0ke0JVSUxEX0NDfScgXAotICAgICAgICAgICAgICAgICdIT1NUX0NGTEFHUz0ke0JVSUxEX0NGTEFHU30nIFwKLSAgICAgICAgICAgICAgICAnQ0M9JHtDQ30nIFwKLSAgICAgICAgICAgICAgICBBUkNIPSR7VUNMSUJDX0FSQ0h9IgotCi1FWFRSQV9PRU1BS0VfdGFza19kb19wYWNrYWdlID0gIiR7T0VNQUtFX05PX0NDfSIKLQotIyBlbmFibGUgdmVyYm9zZSBvdXRwdXQ6Ci1leHBvcnQgVj0iMiIKLQotIyAtTzxuPiAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBlbmRzIHVwIHdpdGggR0NDIElDRSBvbiB0aHVtYiBhcyByZXBvcnRlZAotIyBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQ0ODYwCi0jCi1DRkxBR1NfcmVtb3ZlX2FybSA9ICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciIKLVVDTElCQ19FWFRSQV9DRkxBR1MgID0gIiR7QG9lX2ZpbHRlcl9vdXQoJygtSVxTK3wtaVxTKyknLCAnJHtDRkxBR1N9JywgZCl9IgotCi1jb25maWdtYW5nbGUgPSAnL15LRVJORUxfSEVBREVSUy9kOyBcCi0gICAgICAgICAgICAgICAgL15SVU5USU1FX1BSRUZJWC9kOyBcCi0gICAgICAgICAgICAgICAgL15ERVZFTF9QUkVGSVgvZDsgXAotICAgICAgICAgICAgICAgIC9eU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYL2Q7IFwKLSAgICAgICAgICAgICAgICAvXlVDTElCQ19FWFRSQV9DRkxBR1MvZDsgXAotICAgICAgICAgICAgICAgIHMsLipVQ0xJQkNfSEFTX1dDSEFSLiosVUNMSUJDX0hBU19XQ0hBUj15LGc7IFwKLSAgICAgICAgICAgICAgICAke0BbIiIsInMsLipDT01QSUxFX0lOX1RIVU1CX01PREUuKixDT01QSUxFX0lOX1RIVU1CX01PREU9eSw7Il1bZC5nZXRWYXIoIkFSTV9JTlNUUlVDVElPTl9TRVQiLCBUcnVlKSA9PSAidGh1bWIiXX0gXAotICAgICAgICAgICAgICAgICR7QFsiIiwicywuKlVDTElCQ19IQVNfTE9DQUxFLiosVUNMSUJDX0hBU19MT0NBTEU9eSw7Il1bZC5nZXRWYXIoIlVTRV9OTFMiLCBUcnVlKSA9PSAieWVzIl19IFwKLSAgICAgICAgICAgICAgICAke0BbIiIsInMsLipMRFNPX0dOVV9IQVNIX1NVUFBPUlQuKiwjIExEU09fR05VX0hBU0hfU1VQUE9SVCBpcyBub3Qgc2V0LDsiXVtkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKSBpbiBbJ21pcHMnLCAnbWlwc2VsJywgJ21pcHM2NCcsICdtaXBzNjRlbCcsICdhdnIzMiddXX0gXAotICAgICAgICAgICAgICAgIC9eQ1JPU1MvZDsgXAotICAgICAgICAgICAgICAgIC9eVEFSR0VUX0FSQ0g9L2Q7IFwKLSAgICAgICAgICAgICAgICAvXlRBUkdFVF8vcyxeXChbXj1dKlwpLiosIyBcMSBpcyBub3Qgc2V0LGc7IFwKLSAgICAgICAgICAgICAgICBzLF5ET1NUUklQLiosIyBET1NUUklQIGlzIG5vdCBzZXQsZzsgXAotICAgICAgICAgICAgICAgIC9fW0VPXSpBQkkvZDsgXAotICAgICAgICAgICAgICAgIC9IQVNfRlBVL2Q7IFwKLSAgICAgICAgICAgICAgICAke0BbIiIsInMsLipNVUxUSUxJQl9ESVIuKixNVUxUSUxJQl9ESVI9XCIke2Jhc2VsaWJ9XCIsOyJdW2QuZ2V0VmFyKCJiYXNlbGliIiwgVHJ1ZSkgIT0gImxpYiJdfSBcCi0gICAgICAgICAgICAgICAnCi1PRV9GRUFUVVJFUyA9ICIke0BmZWF0dXJlc190b191Y2xpYmNfY29uZihkKX0iCi1PRV9ERUwgICAgICA9ICIke0BmZWF0dXJlc190b191Y2xpYmNfZGVsKGQpfSIKLXB5dGhvbiAoKSB7Ci0gICAgaWYgIiR7T0VfREVMfSI6Ci0gICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywgIiR7T0VfREVMfSIgKyAiXG4iKQotCi0gICAgIyBieSBkZWZhdWx0IHVjbGliYyB1c2VzIG1pcHMxIElTQSBmb3IgbzMyIEFCSQotICAgICMgaWYgd2UgdXNlIFRBUkdFVF9DQ19BUkNIPSItbWFyY2g9bWlwczMyIiB3ZSBlbmQgdXAgCi0gICAgIyB3aXRoIGNvbmZsaWN0aW5nIG1hcmNoIG9wdGlvbnMgdG8gZ2NjLiBIZXJlIHdlCi0gICAgIyBhc2sgZm9yIE1JUFMzMiBJU0EgdG8gbWF0Y2ggdGhlIGNob3NlbiBhcmNoCi0gICAgdHVuZSA9IGQuZ2V0VmFyKCJERUZBVUxUVFVORSIsIFRydWUpCi0gICAgaWYgdHVuZS5zdGFydHN3aXRoKCdtaXBzMzInKToKLSAgICAgICAgaW1wb3J0IHJlCi0gICAgICAgIHR1bmUgPSByZS5zdWIoJyhlbCkqKC1uZikqJywgJycsIHR1bmUpCi0gICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKLSAgICAgICAgICAgICAgICAgIi9eIyMjIE1JUFMzMl9DSEVDSyQvYVxcXG5DT05GSUdfTUlQU19JU0FfJXM9eVxuXG4iICUgKHR1bmUudXBwZXIoKSkpCi0gICAgaWYgIiR7T0VfRkVBVFVSRVN9IjoKLSAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAotICAgICAgICAgICAgICAgICAgICIvXiMjIyBESVNUUk8gRkVBVFVSRVMkL2FcXFxuJXNcblxuIiAlCi0gICAgICAgICAgICAgICAgICAgKCJcXG4iLmpvaW4oKGQuZXhwYW5kKCIke09FX0ZFQVRVUkVTfSIpLnNwbGl0KCJcbiIpKSkpKQotICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKLSAgICAgICAgICAgICAgICAgIi9eIyMjIENST1NTJC9hXFxcbiVzXG4iICUKLSAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKFsiQ1JPU1NfQ09NUElMRVJfUFJFRklYPVwiJHtUQVJHRVRfUFJFRklYfVwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVQ0xJQkNfRVhUUkFfQ0ZMQUdTPVwiJHtVQ0xJQkNfRVhUUkFfQ0ZMQUdTfVwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiS0VSTkVMX0hFQURFUlM9XCIke1NUQUdJTkdfSU5DRElSfVwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiUlVOVElNRV9QUkVGSVg9XCIvXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICJERVZFTF9QUkVGSVg9XCIvJHtwcmVmaXh9XCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICJTSEFSRURfTElCX0xPQURFUl9QUkVGSVg9XCIvbGliXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgXSkKLSAgICAgICAgICAgICAgICAgICkpCi0gICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAotICAgICAgICAgICAgICAgICAiL14jIyMgVEdUJC9hXFxcblRBUkdFVF9BUkNIPVwiJXNcIlxcblRBUkdFVF8lcz15XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICgiJHtVQ0xJQkNfQVJDSH0iLCAiJHtVQ0xJQkNfQVJDSH0iKSkKLSAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCi0gICAgIi9eIyMjIEZQVSQvYVxcXG4lc1xuXG4iICUgKFsiVUNMSUJDX0hBU19GUFU9eSIsIiMgVUNMSUJDX0hBU19GUFUgaXMgbm90IHNldCJdW2QuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcgXV0pKQotICAgIGlmICIke1VDTElCQ19FTkRJQU59IjoKLSAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAotICAgICAgICAgICAgICAgICAgICIvXiMjIyBBQkkkL2FcXFxuQVJDSF9XQU5UU18lc19FTkRJQU49eVxuXG4iICUgKCIke1VDTElCQ19FTkRJQU59IikpCi0gICAgaWYgIiR7VUNMSUJDX0FCSX0iOgotICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCi0gICAgICAgICAgICAgICAgICAgIi9eIyMjIEFCSSQvYVxcXG5DT05GSUdfJXM9eVxuXG4iICUgKCIke1VDTElCQ19BQkl9IikpCi19Ci0KLXB5dGhvbiBkb19wYXRjaF9hcHBlbmQoKSB7Ci0gICAgaW1wb3J0IHN1YnByb2Nlc3MKLSAgICBzdWJwcm9jZXNzLmNhbGwoImxuIC1zZiAke1NUQUdJTkdfSU5DRElSfS9saW51eCAke1N9L2luY2x1ZGUvbGludXgiLCBzaGVsbD1UcnVlKQotICAgIHN1YnByb2Nlc3MuY2FsbCgibG4gLXNmICR7U1RBR0lOR19JTkNESVJ9L2FzbSAke1N9L2luY2x1ZGUvYXNtIiwgc2hlbGw9VHJ1ZSkKLX0KLQotZG9fY29uZmlndXJlKCkgewotICAgICAgICBybSAtZiAke1N9Ly5jb25maWcKLQotICAgICAgICAjIE9wZW5FbWJlZGRlZCBzcGxpdHMgdGhlIHVDbGliYy5jb25maWcgaW4gdHdvIHBhcnRzOgotICAgICAgICAjIHVDbGliYy5tYWNoaW5lLCB1Q2xpYmMuZGlzdHJvCi0gICAgICAgIGVjaG8gIiMjIyB1Q2xpYmMubWFjaGluZSAjIyMiID4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgY2F0ICR7V09SS0RJUn0vdUNsaWJjLm1hY2hpbmUgPj4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgZWNobyAiIyMjIHVDbGliYy5kaXN0cm8gIyMjIiA+PiR7U30vbWVyZ2VkLmNvbmZpZwotICAgICAgICBjYXQgJHtXT1JLRElSfS91Q2xpYmMuZGlzdHJvID4+JHtTfS9tZXJnZWQuY29uZmlnCi0gICAgICAgIGVjaG8gIiMjIyBDUk9TUyIgPj4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgZWNobyAiIyMjIFRHVCIgPj4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgZWNobyAiIyMjIE1NVSIgPj4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgZWNobyAiIyMjIEZQVSIgPj4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgZWNobyAiIyMjIEFCSSIgPj4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgZWNobyAiIyMjIERJU1RSTyBGRUFUVVJFUyIgPj4ke1N9L21lcmdlZC5jb25maWcKLSAgICAgICAgZWNobyAiIyMjIE1JUFMzMl9DSEVDSyIgPj4ke1N9L21lcmdlZC5jb25maWcKLQotICAgICAgICAjIE1hbmdsZSB0aGUgcmVzdWx0aW5nIC5jb25maWcgZGVwZW5kaW5nIG9uIE9FIHZhcmlhYmxlcwotICAgICAgICBzZWQgLWkgLWUgJyR7Y29uZmlnbWFuZ2xlfScgJHtTfS9tZXJnZWQuY29uZmlnCi0JY3AgJHtTfS9tZXJnZWQuY29uZmlnIC5jb25maWcKLSAgICAgICAgbWVyZ2VfY29uZmlnLnNoIC1yIC1uIC1tIC5jb25maWcgJHtAIiAiLmpvaW4oZmluZF9jZmdzKGQpKX0KLQljbWwxX2RvX2NvbmZpZ3VyZQotCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSBQUkVGSVg9JHtEfSBpbnN0YWxsCi0Jcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L2ljb252LmgKLX0KLQotIyBidWlsZCBsZGQsIGxkY29uZmlnIGFuZCBmcmllbmRzIGJ1dCBvbmx5IGZvciBmdWxsIHVjbGliYwotZG9faW5zdGFsbF9hcHBlbmRfcG4tdWNsaWJjICgpIHsKLSAgICAgICAgb2VfcnVubWFrZSBQUkVGSVg9JHtEfSAiU1NQX0FMTF9DRkxBR1M9JHtUQVJHRVRfTElOS19IQVNIX1NUWUxFfSIgLUMgdXRpbHMgdXRpbHNfaW5zdGFsbAotfQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDJiM2QuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcmVxdWlyZSB1Y2xpYmMuaW5jCi1yZXF1aXJlIHVjbGliYy1wYWNrYWdlLmluYwotcmVxdWlyZSB1Y2xpYmMtZ2l0LmluYwotCi1TVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCi1TVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgotCi1QUk9WSURFUyArPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKLQotREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyBcCi0gICAgICAgICAgIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIFwKLSAgICAgICAgICAgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIFwKLSAgICAgICAgICAgbGludXgtbGliYy1oZWFkZXJzIG5jdXJzZXMtbmF0aXZlIFwKLSAgICAgICAgICAgbGliZ2NjLWluaXRpYWwga2Vybi10b29scy1uYXRpdmUiCi0KLVJERVBFTkRTXyR7UE59LWRldiA9ICJsaW51eC1saWJjLWhlYWRlcnMtZGV2IgotUlBST1ZJREVTXyR7UE59LWRldiArPSAibGliYy1kZXYgdmlydHVhbC1saWJjLWRldiIKLSMgdWNsaWJjIGRvZXMgbm90IHJlYWxseSBoYXZlIGxpYnNlZ2ZhdWx0IGJ1dCB0aGVuIHVzaW5nIHRoZSBvbmUgZnJvbSBnbGliYyBpcyBhbHNvIG5vdAotIyBnb2luZyB0byB3b3JrLiBTbyB3ZSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBpdCB0byBtYWtlIGJpdGJha2Ugbm90IHB1bGwgb3RoZXIgcmVjaXBlcwotIyB0byBzYXRpc2Z5IHRoaXMgZGVwZW5kZW5jeSBmb3IgdGhlIGltYWdlcy90YXNrcwotCi1SUFJPVklERVNfJHtQTn0gKz0gImxpYnNlZ2ZhdWx0IHJ0bGQoR05VX0hBU0gpIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXZfMy4xLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldl8zLjEuNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWExOWVjNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldl8zLjEuNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi1TVU1NQVJZID0gImV1ZGV2IGlzIGEgZm9yayBvZiBzeXN0ZW1kJ3MgdWRldiIKLUhPTUVQQUdFID0gImh0dHBzOi8vd2lraS5nZW50b28ub3JnL3dpa2kvRXVkZXYiCi1MSUNFTlNFID0gIkdQTHYyLjArIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGdwZXJmLW5hdGl2ZSBrbW9kIGxpYnhzbHQtbmF0aXZlIHV0aWwtbGludXgiCi0KLVBST1ZJREVTID0gInVkZXYiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2dlbnRvby8ke0JQTn0vYXJjaGl2ZS92JHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2RldmZzLXVkZXYucnVsZXMgXAotICAgICAgICAgICBmaWxlOi8vaW5pdCBcCi0gICAgICAgICAgIGZpbGU6Ly9saW5rcy5jb25mIFwKLSAgICAgICAgICAgZmlsZTovL2xvY2FsLnJ1bGVzIFwKLSAgICAgICAgICAgZmlsZTovL3Blcm1pc3Npb25zLnJ1bGVzIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi5ydWxlcyBcCi0gICAgICAgICAgIGZpbGU6Ly91ZGV2LWNhY2hlIFwKLSAgICAgICAgICAgZmlsZTovL3VkZXYtY2FjaGUuZGVmYXVsdCBcCi0gICAgICAgICAgIGZpbGU6Ly91ZGV2LnJ1bGVzIFwKLSIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZ2VudG9vL2V1ZGV2L3JlbGVhc2VzIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZTEzMGY4OTJkODc0NGUyOTJjYjg1NWRiNzk5MzVmNjgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2U5ZDVmYTkxZTNhNDJjN2ViOTU1MTJjYTBmYTJhNjMxZTg5ODMzMDUzMDY2YmI2Y2RmNDIwNDZiMmE4ODU1MyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgcWVtdQotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKLSAgICAtLWxpYmV4ZWNkaXI9JHtub25hcmNoX2Jhc2VfbGliZGlyfSBcCi0gICAgLS13aXRoLXJvb3RsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAotICAgIC0td2l0aC1yb290cHJlZml4PSBcCi0iCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCi0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYtY2FjaGUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUKLQlzZWQgLWkgcyVAVURFVkRAJSR7YmFzZV9zYmluZGlyfS91ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYKLQlzZWQgLWkgcyVAVURFVkRAJSR7YmFzZV9zYmluZGlyfS91ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUKLQotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYtY2FjaGUuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VkZXYtY2FjaGUKLQotCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvY2FjaGUuZGF0YQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQKLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sb2NhbC5ydWxlcyAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvbG9jYWwucnVsZXMKLQotCSMgVXNlIGNsYXNzaWMgbmV0d29yayBpbnRlcmZhY2UgbmFtaW5nIHNjaGVtZQotCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC84MC1uZXQtbmFtZS1zbG90LnJ1bGVzCi0KLQkjIEZpeCBmb3IgbXVsdGlsaWIgc3lzdGVtcyB3aGVyZSBsaWJzIGFsb25nIHdpdGggY29uZnMgYXJlIGluc3RhbGxlZCBpbmNvcnJlY3RseQotCWlmICEgWyAtZCAke0R9JHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2IF0KLQl0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldgotCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vdWRldiAke0R9JHtub25hcmNoX2Jhc2VfbGliZGlyfQotCWZpCi0KLQkjIGhpZDJoY2kgaGFzIG1vdmVkIHRvIGJsdWV6NC4gcmVtb3ZlZCBpbiB1ZGV2IGFzIG9mIHZlcnNpb24gMTY5Ci0Jcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3VkZXYvaGlkMmhjaQotfQotCi1JTklUU0NSSVBUX1BBQ0tBR0VTID0gImV1ZGV2IHVkZXYtY2FjaGUiCi1JTklUU0NSSVBUX05BTUVfZXVkZXYgPSAidWRldiIKLUlOSVRTQ1JJUFRfUEFSQU1TX2V1ZGV2ID0gInN0YXJ0IDA0IFMgLiIKLUlOSVRTQ1JJUFRfTkFNRV91ZGV2LWNhY2hlID0gInVkZXYtY2FjaGUiCi1JTklUU0NSSVBUX1BBUkFNU191ZGV2LWNhY2hlID0gInN0YXJ0IDM2IFMgLiIKLQotUEFDS0FHRVMgPSsgImxpYnVkZXYiCi1QQUNLQUdFUyA9KyAidWRldi1jYWNoZSIKLVBBQ0tBR0VTID0rICJldWRldi1od2RiIgotCi0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmV4ZWNkaXJ9ICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldiAke2JpbmRpcn0vdWRldmFkbSIKLUZJTEVTXyR7UE59LWRldiA9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZy91ZGV2LnBjIFwKLSAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2xpYnVkZXYuaCAke2xpYmRpcn0vbGlidWRldi5zbyBcCi0gICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS91ZGV2LmggJHtsaWJkaXJ9L2xpYnVkZXYubGEgXAotICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJ1ZGV2LmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJ1ZGV2LnBjIgotRklMRVNfbGlidWRldiA9ICIke2Jhc2VfbGliZGlyfS9saWJ1ZGV2LnNvLioiCi1GSUxFU191ZGV2LWNhY2hlID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3VkZXYtY2FjaGUiCi1GSUxFU19ldWRldi1od2RiID0gIiR7c3lzY29uZmRpcn0vdWRldi9od2RiLmQiCi0KLVJERVBFTkRTX2V1ZGV2LWh3ZGIgKz0gImV1ZGV2IgotCi1SUkVDT01NRU5EU18ke1BOfSArPSAidWRldi1jYWNoZSBldWRldi1od2RiIgotCi1SUFJPVklERVNfJHtQTn0gPSAiaG90cGx1ZyB1ZGV2IgotCi1weXRob24gKCkgewotICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6Ci0gICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInc3lzdGVtZCcgaW4gRElTVFJPX0ZFQVRVUkVTIikKLX0KLQotcGtnX3Bvc3RpbnN0X2V1ZGV2LWh3ZGIgKCkgewotICAgIGlmIHRlc3QgLW4gIiREIjsgdGhlbgotICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS91ZGV2YWRtJyl9IGh3ZGIgLS11cGRhdGUgLS1yb290ICRECi0gICAgICAgIGNob3duIHJvb3Q6cm9vdCAkRCR7c3lzY29uZmRpcn0vdWRldi9od2RiLmJpbgotICAgIGVsc2UKLSAgICAgICAgdWRldmFkbSBod2RiIC0tdXBkYXRlCi0gICAgZmkKLX0KLQotcGtnX3ByZXJtX2V1ZGV2LWh3ZGIgKCkgewotICAgICAgICBybSAtZiAkRCR7c3lzY29uZmRpcn0vdWRldi9od2RiLmJpbgotfQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldl8zLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldl8zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExMjUyYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L2V1ZGV2XzMuMi5iYgpAQCAtMCwwICsxLDEwMSBAQAorU1VNTUFSWSA9ICJldWRldiBpcyBhIGZvcmsgb2Ygc3lzdGVtZCdzIHVkZXYiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kuZ2VudG9vLm9yZy93aWtpL0V1ZGV2IgorTElDRU5TRSA9ICJHUEx2Mi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitERVBFTkRTID0gImdsaWItMi4wIGdsaWItMi4wLW5hdGl2ZSBncGVyZi1uYXRpdmUga21vZCBsaWJ4c2x0LW5hdGl2ZSB1dGlsLWxpbnV4IgorCitQUk9WSURFUyA9ICJ1ZGV2IgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9nZW50b28vJHtCUE59L2FyY2hpdmUvdiR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kZXZmcy11ZGV2LnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vbGlua3MuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9sb2NhbC5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9wZXJtaXNzaW9ucy5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi1jYWNoZSBcCisgICAgICAgICAgIGZpbGU6Ly91ZGV2LWNhY2hlLmRlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vdWRldi5ydWxlcyBcCisiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2dlbnRvby9ldWRldi9yZWxlYXNlcyIKKworU1JDX1VSSVttZDVzdW1dID0gIjllYjQ3N2NjODcxOGRiMjcyYjVkMjRkZmYxMTI2YjA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM3ODI5ZDM3ZjRiZWI3ZTM1OGNhMzNhYmMxYWQwOTA3ZDg3ZjkxN2NlMTU3Nzc3YWVhZWViZWFjYWUyNGVmZGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHFlbXUgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAorICAgIC0td2l0aC1yb290bGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAtLXdpdGgtcm9vdHByZWZpeD0gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiaHdkYiIKK1BBQ0tBR0VDT05GSUdbaHdkYl0gPSAiLS1lbmFibGUtaHdkYiwtLWRpc2FibGUtaHdkYiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCXNlZCAtaSBzJUBVREVWREAlJHtiYXNlX3NiaW5kaXJ9L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgorCXNlZCAtaSBzJUBVREVWREAlJHtiYXNlX3NiaW5kaXJ9L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZS5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdWRldi1jYWNoZQorCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9jYWNoZS5kYXRhCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xvY2FsLnJ1bGVzICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbC5ydWxlcworCisJIyBVc2UgY2xhc3NpYyBuZXR3b3JrIGludGVyZmFjZSBuYW1pbmcgc2NoZW1lCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLzgwLW5ldC1uYW1lLXNsb3QucnVsZXMKKworCSMgaGlkMmhjaSBoYXMgbW92ZWQgdG8gYmx1ZXo0LiByZW1vdmVkIGluIHVkZXYgYXMgb2YgdmVyc2lvbiAxNjkKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vdWRldi9oaWQyaGNpCit9CisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiZXVkZXYgdWRldi1jYWNoZSIKK0lOSVRTQ1JJUFRfTkFNRV9ldWRldiA9ICJ1ZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfZXVkZXYgPSAic3RhcnQgMDQgUyAuIgorSU5JVFNDUklQVF9OQU1FX3VkZXYtY2FjaGUgPSAidWRldi1jYWNoZSIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYtY2FjaGUgPSAic3RhcnQgMzYgUyAuIgorCitQQUNLQUdFUyA9KyAibGlidWRldiIKK1BBQ0tBR0VTID0rICJ1ZGV2LWNhY2hlIgorUEFDS0FHRVMgPSsgImV1ZGV2LWh3ZGIiCisKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZXhlY2Rpcn0gJHtiYXNlX2xpYmRpcn0vdWRldiAke2JpbmRpcn0vdWRldmFkbSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZy91ZGV2LnBjIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2xpYnVkZXYuaCAke2xpYmRpcn0vbGlidWRldi5zbyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS91ZGV2LmggJHtsaWJkaXJ9L2xpYnVkZXYubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJ1ZGV2LmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJ1ZGV2LnBjIgorRklMRVNfbGlidWRldiA9ICIke2Jhc2VfbGliZGlyfS9saWJ1ZGV2LnNvLioiCitGSUxFU191ZGV2LWNhY2hlID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3VkZXYtY2FjaGUiCitGSUxFU19ldWRldi1od2RiID0gIiR7c3lzY29uZmRpcn0vdWRldi9od2RiLmQiCisKK1JERVBFTkRTX2V1ZGV2LWh3ZGIgKz0gImV1ZGV2IgorCitSUkVDT01NRU5EU18ke1BOfSArPSAidWRldi1jYWNoZSIKKworUlBST1ZJREVTXyR7UE59ID0gImhvdHBsdWcgdWRldiIKKworcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIGluIERJU1RST19GRUFUVVJFUyIpCit9CisKK3BrZ19wb3N0aW5zdF9ldWRldi1od2RiICgpIHsKKyAgICBpZiB0ZXN0IC1uICIkRCI7IHRoZW4KKyAgICAgICAgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2JpbmRpcn0vdWRldmFkbScpfSBod2RiIC0tdXBkYXRlIC0tcm9vdCAkRAorICAgICAgICBjaG93biByb290OnJvb3QgJEQke3N5c2NvbmZkaXJ9L3VkZXYvaHdkYi5iaW4KKyAgICBlbHNlCisgICAgICAgIHVkZXZhZG0gaHdkYiAtLXVwZGF0ZQorICAgIGZpCit9CisKK3BrZ19wcmVybV9ldWRldi1od2RiICgpIHsKKyAgICAgICAgcm0gLWYgJEQke3N5c2NvbmZkaXJ9L3VkZXYvaHdkYi5iaW4KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmRfMC43LmJiCmluZGV4IGMxNWNiNzguLjNiOTY1YzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgpAQCAtMSw1ICsxLDUgQEAKIFNVTU1BUlkgPSAibWFuYWdlIHN5bWxpbmtzIGluIC9ldGMvcmNOLmQiCi1ERVNDUklQVElPTiA9ICJ1cGRhdGUtcmMuZCBpcyBhIHV0aWxpdGllcyB0aGF0IGFsbG93cyB0aGUgbWFuYWdlbWVudCBvZiBzeW1saW5rcyB0byB0aGUgaW5pdHNjcmlwdHMgaW4gdGhlIC9ldGMvcmNOLmQgZGlyZWN0b3J5IHN0cnVjdHVyZS4iCitERVNDUklQVElPTiA9ICJ1cGRhdGUtcmMuZCBpcyBhIHV0aWxpdHkgdGhhdCBhbGxvd3MgdGhlIG1hbmFnZW1lbnQgb2Ygc3ltbGlua3MgdG8gdGhlIGluaXRzY3JpcHRzIGluIHRoZSAvZXRjL3JjTi5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIgogU0VDVElPTiA9ICJiYXNlIgogCiBMSUNFTlNFID0gIkdQTHYyKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXguaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMKaW5kZXggOGMwYzYzMC4uYzYzNTUwMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMKQEAgLTE3LDcgKzE3LDggQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1vdW50L0NPUFlJTkc7bWQ1PWZiOTNmMDFkNDM2MTA2OWM1NjE2MzI3NzA1MzczYjE2IFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmJsa2lkL0NPUFlJTkc7bWQ1PWZiOTNmMDFkNDM2MTA2OWM1NjE2MzI3NzA1MzczYjE2IgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHl0aG9uLWRpciBwdGVzdCBiYXNoLWNvbXBsZXRpb24KKyNndGstZG9jIGlzIG5vdCBlbmFibGVkIGFzIGl0IHJlcXVpcmVzIHhtbHRvIHdoaWNoIHJlcXVpcmVzIHV0aWwtbGludXgKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLWFsdGVybmF0aXZlcyBweXRob24zLWRpciBiYXNoLWNvbXBsZXRpb24gcHRlc3QKIERFUEVORFMgPSAiemxpYiBuY3Vyc2VzIgogREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBsem8tbmF0aXZlIgogREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBsem8tbmF0aXZlIgpAQCAtMzIsNyArMzMsNyBAQAogICAgICAgICAgICAgIHV0aWwtbGludXgtbWtmcyB1dGlsLWxpbnV4LW1jb29raWUgdXRpbC1saW51eC1yZXNldCBcCiAgICAgICAgICAgICAgdXRpbC1saW51eC1ta2ZzLmNyYW1mcyB1dGlsLWxpbnV4LWZzY2suY3JhbWZzIHV0aWwtbGludXgtZnN0cmltIFwKICAgICAgICAgICAgICB1dGlsLWxpbnV4LXBhcnR4IHV0aWwtbGludXgtaHdjbG9jayB1dGlsLWxpbnV4LW1vdW50cG9pbnQgXAotICAgICAgICAgICAgIHV0aWwtbGludXgtZmluZGZzIHV0aWwtbGludXgtZ2V0b3B0IHV0aWwtbGludXgtc3Vsb2dpbiIKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LWZpbmRmcyB1dGlsLWxpbnV4LWdldG9wdCB1dGlsLWxpbnV4LXN1bG9naW4gdXRpbC1saW51eC1wcmxpbWl0IgogUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5bGlibW91bnQnLCAndXRpbC1saW51eC1weWxpYm1vdW50JywgJycsIGQpfSIKIFBBQ0tBR0VTID0rICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd1dGlsLWxpbnV4LXJ1bnVzZXInLCAnJywgZCl9IgogCkBAIC02MSwxNCArNjIsMTQgQEAKIFBBQ0tBR0VDT05GSUdbbGliY2FwLW5nXSA9ICItLWVuYWJsZS1zZXRwcml2LC0tZGlzYWJsZS1zZXRwcml2LGxpYmNhcC1uZywiCiAKICMgQnVpbGQgcHl0aG9uIGJpbmRpbmdzIGZvciBsaWJtb3VudAotUEFDS0FHRUNPTkZJR1tweWxpYm1vdW50XSA9ICItLXdpdGgtcHl0aG9uIC0tZW5hYmxlLXB5bGlibW91bnQsLS13aXRob3V0LXB5dGhvbiAtLWRpc2FibGUtcHlsaWJtb3VudCxweXRob24iCitQQUNLQUdFQ09ORklHW3B5bGlibW91bnRdID0gIi0td2l0aC1weXRob249MyAtLWVuYWJsZS1weWxpYm1vdW50LC0td2l0aG91dC1weXRob24gLS1kaXNhYmxlLXB5bGlibW91bnQscHl0aG9uMyIKIAogIyBSZWFkbGluZSBzdXBwb3J0CiBQQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtcmVhZGxpbmUsLS13aXRob3V0LXJlYWRsaW5lLHJlYWRsaW5lIgogCiBGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vZ2V0b3B0L2dldG9wdC0qLioiCiAKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9weWxpYm1vdW50LmxhIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9saWJtb3VudC9weWxpYm1vdW50LmxhIgogCiBGSUxFU191dGlsLWxpbnV4LWFnZXR0eSA9ICIke2Jhc2Vfc2JpbmRpcn0vYWdldHR5IgogRklMRVNfdXRpbC1saW51eC1mZGlzayA9ICIke2Jhc2Vfc2JpbmRpcn0vZmRpc2suJHtCUE59IgpAQCAtODksOSArOTAsMTEgQEAKIEZJTEVTX3V0aWwtbGludXgtZmluZGZzID0gIiR7c2JpbmRpcn0vZmluZGZzIgogRklMRVNfdXRpbC1saW51eC1nZXRvcHQgPSAiJHtiYXNlX2JpbmRpcn0vZ2V0b3B0LiR7QlBOfSIKIEZJTEVTX3V0aWwtbGludXgtcnVudXNlciA9ICIke3NiaW5kaXJ9L3J1bnVzZXIiCitGSUxFU191dGlsLWxpbnV4LXBybGltaXQgPSAiJHtiaW5kaXJ9L3BybGltaXQiCiAKLUZJTEVTX3V0aWwtbGludXgtcHlsaWJtb3VudCA9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L3B5bGlibW91bnQuc28gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvX19pbml0X18uKiIKK0ZJTEVTX3V0aWwtbGludXgtcHlsaWJtb3VudCA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9saWJtb3VudC9weWxpYm1vdW50LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9saWJtb3VudC9fX2luaXRfXy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9saWJtb3VudC9fX3B5Y2FjaGVfXy8qIgogRklMRVNfdXRpbC1saW51eC1sc2NwdSA9ICIke2JpbmRpcn0vbHNjcHUiCiAKIEZJTEVTX3V0aWwtbGludXgtZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjayoiCkBAIC0xMTYsNyArMTE5LDcgQEAKIFJERVBFTkRTXyR7UE59ID0gInV0aWwtbGludXgtdW1vdW50IHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXN1bG9naW4iCiBSREVQRU5EU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAndXRpbC1saW51eC1ydW51c2VyJywgJycsIGQpfSIKIAotUlJFQ09NTUVORFNfJHtQTn0gPSAidXRpbC1saW51eC1mZGlzayB1dGlsLWxpbnV4LWNmZGlzayB1dGlsLWxpbnV4LXNmZGlzayB1dGlsLWxpbnV4LW1vdW50IHV0aWwtbGludXgtcmVhZHByb2ZpbGUgdXRpbC1saW51eC1ta2ZzIHV0aWwtbGludXgtbW91bnRwb2ludCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInV0aWwtbGludXgtZmRpc2sgdXRpbC1saW51eC1jZmRpc2sgdXRpbC1saW51eC1zZmRpc2sgdXRpbC1saW51eC1tb3VudCB1dGlsLWxpbnV4LXJlYWRwcm9maWxlIHV0aWwtbGludXgtbWtmcyB1dGlsLWxpbnV4LW1vdW50cG9pbnQgdXRpbC1saW51eC1wcmxpbWl0IgogCiBSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgogUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKQEAgLTI4MCw3ICsyODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSwgYWxsb3dfbGlua3M9VHJ1ZSkKIH0KIAotUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggZ3JlcCBjb3JldXRpbHMiCiAKIGRvX2NvbXBpbGVfcHRlc3QoKSB7CiAgICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvYXZvaWRfdW5zdXBwb3J0ZWRfZ3JlcF9vcHRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9hdm9pZF91bnN1cHBvcnRlZF9ncmVwX29wdHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZDVlZmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9hdm9pZF91bnN1cHBvcnRlZF9ncmVwX29wdHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1Bdm9pZCB1bnN1cHBvcnRlZCBncmVwIG9wdGlvbnMKLQotU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotZGlmZiAtcnVOIGEvdHMvaXBjcy9oZWFkZXJzIGIvdHMvaXBjcy9oZWFkZXJzCi0tLS0gYS90ZXN0cy90cy9pcGNzL2hlYWRlcnMJMjAxMy0wOS0wNCAxMTowMzozNi4xMTg2MTMyNTAgKzAyMDAKLSsrKyBiL3Rlc3RlL3RzL2lwY3MvaGVhZGVycwkyMDEzLTA5LTA0IDExOjAzOjI3LjkwNjk1ODQzNyArMDIwMAotQEAgLTIyLDM1ICsyMiwzNSBAQAotIHRzX2luaXQgIiQqIgotIAotIHRzX2xvZyAidGVzdDogc2htIGhlYWRlcnMiCi0tJFRTX0NNRF9JUENTIC1tIC10IHwgZ3JlcCAtLWFmdGVyLWNvbnRleHQ9MSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLS0kVFNfQ01EX0lQQ1MgLW0gLXAgfCBncmVwIC0tYWZ0ZXItY29udGV4dD0xICJeLS0tIiAgPj4gJFRTX09VVFBVVAotLSRUU19DTURfSVBDUyAtbSAtYyB8IGdyZXAgLS1hZnRlci1jb250ZXh0PTEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0rJFRTX0NNRF9JUENTIC1tIC10IHwgZ3JlcCAtQSAxICJeLS0tIiAgPj4gJFRTX09VVFBVVAotKyRUU19DTURfSVBDUyAtbSAtcCB8IGdyZXAgLUEgMSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLSskVFNfQ01EX0lQQ1MgLW0gLWMgfCBncmVwIC1BIDEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0gJFRTX0NNRF9JUENTIC1tIC1sIHwgZ3JlcCAiXi0tLSIgID4+ICRUU19PVVRQVVQKLSAkVFNfQ01EX0lQQ1MgLW0gLXUgfCBncmVwICJeLS0tIiAgPj4gJFRTX09VVFBVVAotIGVjaG8gPj4gJFRTX09VVFBVVAotIAotIHRzX2xvZyAidGVzdDogbWVzZyBoZWFkZXJzIgotLSRUU19DTURfSVBDUyAtcSAtdCB8IGdyZXAgLS1hZnRlci1jb250ZXh0PTEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0tJFRTX0NNRF9JUENTIC1xIC1wIHwgZ3JlcCAtLWFmdGVyLWNvbnRleHQ9MSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLS0kVFNfQ01EX0lQQ1MgLXEgLWMgfCBncmVwIC0tYWZ0ZXItY29udGV4dD0xICJeLS0tIiAgPj4gJFRTX09VVFBVVAotKyRUU19DTURfSVBDUyAtcSAtdCB8IGdyZXAgLUEgMSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLSskVFNfQ01EX0lQQ1MgLXEgLXAgfCBncmVwIC1BIDEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0rJFRTX0NNRF9JUENTIC1xIC1jIHwgZ3JlcCAtQSAxICJeLS0tIiAgPj4gJFRTX09VVFBVVAotICRUU19DTURfSVBDUyAtcSAtbCB8IGdyZXAgICJeLS0tIiAgPj4gJFRTX09VVFBVVAotICRUU19DTURfSVBDUyAtcSAtdSB8IGdyZXAgICJeLS0tIiAgPj4gJFRTX09VVFBVVAotIGVjaG8gPj4gJFRTX09VVFBVVAotIAotIHRzX2xvZyAidGVzdDogc2VtIGhlYWRlcnMiCi0tJFRTX0NNRF9JUENTIC1zIC10IHwgZ3JlcCAtLWFmdGVyLWNvbnRleHQ9MSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLS0kVFNfQ01EX0lQQ1MgLXMgLXAgfCBncmVwIC0tYWZ0ZXItY29udGV4dD0xICJeLS0tIiAgPj4gJFRTX09VVFBVVAotLSRUU19DTURfSVBDUyAtcyAtYyB8IGdyZXAgLS1hZnRlci1jb250ZXh0PTEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0rJFRTX0NNRF9JUENTIC1zIC10IHwgZ3JlcCAtQSAxICJeLS0tIiAgPj4gJFRTX09VVFBVVAotKyRUU19DTURfSVBDUyAtcyAtcCB8IGdyZXAgLUEgMSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLSskVFNfQ01EX0lQQ1MgLXMgLWMgfCBncmVwIC1BIDEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0gJFRTX0NNRF9JUENTIC1zIC1sIHwgZ3JlcCAgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0gJFRTX0NNRF9JUENTIC1zIC11IHwgZ3JlcCAgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0gZWNobyA+PiAkVFNfT1VUUFVUCi0gCi0gdHNfbG9nICJ0ZXN0OiBhbGwgaGVhZGVycyIKLS0kVFNfQ01EX0lQQ1MgLWEgfCBncmVwIC0tYWZ0ZXItY29udGV4dD0xICJeLS0tIiAgPj4gJFRTX09VVFBVVAotKyRUU19DTURfSVBDUyAtYSB8IGdyZXAgLUEgMSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLSAKLS0kVFNfQ01EX0lQQ1MgLWEgLXQgfCBncmVwIC0tYWZ0ZXItY29udGV4dD0xICJeLS0tIiAgPj4gJFRTX09VVFBVVAotLSRUU19DTURfSVBDUyAtYSAtcCB8IGdyZXAgLS1hZnRlci1jb250ZXh0PTEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0tJFRTX0NNRF9JUENTIC1hIC1jIHwgZ3JlcCAtLWFmdGVyLWNvbnRleHQ9MSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLSskVFNfQ01EX0lQQ1MgLWEgLXQgfCBncmVwIC1BIDEgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0rJFRTX0NNRF9JUENTIC1hIC1wIHwgZ3JlcCAtQSAxICJeLS0tIiAgPj4gJFRTX09VVFBVVAotKyRUU19DTURfSVBDUyAtYSAtYyB8IGdyZXAgLUEgMSAiXi0tLSIgID4+ICRUU19PVVRQVVQKLSAkVFNfQ01EX0lQQ1MgLWEgLWwgfCBncmVwICJeLS0tIiAgPj4gJFRTX09VVFBVVAotICRUU19DTURfSVBDUyAtYSAtdSB8IGdyZXAgIl4tLS0iICA+PiAkVFNfT1VUUFVUCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2F2b2lkX3Vuc3VwcG9ydGVkX3NsZWVwX3BhcmFtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9hdm9pZF91bnN1cHBvcnRlZF9zbGVlcF9wYXJhbS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E2M2E0ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2F2b2lkX3Vuc3VwcG9ydGVkX3NsZWVwX3BhcmFtLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQXZvaWQgdW5zdXBwb3J0ZWQgc2xlZXAgcGFyYW1ldGVyCi0KLVNpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLWRpZmYgLXJ1TiBhL3NpbXBsZSBiL3NpbXBsZQotLS0tIGEvdGVzdHMvdHMvdGFpbGYvc2ltcGxlCTIwMTUtMTEtMTIgMTE6MzQ6NDkuOTcxODE3MTMwICswMjAwCi0rKysgYi90ZXN0cy90cy90YWlsZi9zaW1wbGUJMjAxMy0xMS0xMiAxMTozNDozNy44NzYzMjUxMjggKzAyMDAKLUBAIC0yNyw5ICsyNyw5IEBACi0gCi0gJFRTX0NNRF9UQUlMRiAkSU5QVVQgPiAkVFNfT1VUUFVUIDI+JjEgJgotIAotLXNsZWVwIDAuNQotK3NsZWVwIDEKLSBlY2hvIHswLi45fSA+PiAkSU5QVVQKLS1zbGVlcCAwLjUKLStzbGVlcCAxCi0gCi0gcm0gLWYgJElOUFVUCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2Rpc3BsYXlfdGVzdG5hbWVfZm9yX3N1YnRlc3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2Rpc3BsYXlfdGVzdG5hbWVfZm9yX3N1YnRlc3QucGF0Y2gKaW5kZXggMGViODgxMC4uNDE3Y2ExZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9kaXNwbGF5X3Rlc3RuYW1lX2Zvcl9zdWJ0ZXN0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvZGlzcGxheV90ZXN0bmFtZV9mb3Jfc3VidGVzdC5wYXRjaApAQCAtMywxNiArMywyMyBAQAogU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAotZGlmZiAtcnVOIGEvZnVuY3Rpb25zLnNoIGIvZnVuY3Rpb25zLnNoCi0tLS0gYS90ZXN0cy9mdW5jdGlvbnMuc2gJMjAxNS0xMS0xMiAyMTozMjowMi40MzQ1NDIxMjQgKzAxMDAKLSsrKyBiL3Rlc3RzL2Z1bmN0aW9ucy5zaAkyMDE1LTExLTEyIDIxOjQwOjM3LjA5NTMxNzI4MCArMDEwMAotQEAgLTI5Nyw3ICsyOTcsNyBAQAotIAlpZiBbICIkVFNfUEFSQUxMRUwiID09ICJ5ZXMiIF07IHRoZW4KLSAJCVRTX1RJVExFPSQocHJpbnRmICIlMTNzOiAlLTMwcyAuLi5cbiUxNnM6ICUtMjdzIC4uLiIgIiRUU19DT01QT05FTlQiICIkVFNfREVTQyIgIiIgIiRUU19TVUJOQU1FIikKLSAJZWxzZQotLQkJVFNfVElUTEU9JChwcmludGYgIiUxNnM6ICUtMjdzIC4uLiIgIiIgIiRUU19TVUJOQU1FIikKLSsgICAgICAgICAgICAgICBUU19USVRMRT0kKHByaW50ZiAiJTEzczogJS0zMHMgLi4uIiAiJFRTX0NPTVBPTkVOVCIgIiRUU19TVUJOQU1FIikKLSAJCWVjaG8gLW4gIiRUU19USVRMRSIKKy0tLQorIHRlc3RzL2Z1bmN0aW9ucy5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL2Z1bmN0aW9ucy5zaCBiL3Rlc3RzL2Z1bmN0aW9ucy5zaAoraW5kZXggNTI0NjYwNS4uYjI0ZGMxNSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2Z1bmN0aW9ucy5zaAorKysrIGIvdGVzdHMvZnVuY3Rpb25zLnNoCitAQCAtMzIwLDcgKzMyMCw3IEBAIGZ1bmN0aW9uIHRzX2luaXRfc3VidGVzdCB7CisgCisgCWlmIFsgIiRUU19QQVJTQUJMRSIgIT0gInllcyIgXTsgdGhlbgorIAkJWyAkVFNfTlNVQlRFU1RTIC1lcSAxIF0gJiYgZWNobworLQkJcHJpbnRmICIlMTZzOiAlLTI3cyAuLi4iICIiICIkVFNfU1VCTkFNRSIKKysJCXByaW50ZiAiJTEzczogJS0zMHMgLi4uIiAiJFRTX0NPTVBPTkVOVCIgIiRUU19TVUJOQU1FIgogIAlmaQogIH0KKyAKKy0tIAorMi44LjMKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9wdGVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvcHRlc3QucGF0Y2gKaW5kZXggODM3ZjE4OS4uMDUzN2Y3ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9wdGVzdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3B0ZXN0LnBhdGNoCkBAIC0yLDE2ICsyLDIyIEBACiAKIFNpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBNYWtlZmlsZS5hbSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQogCi1kaWZmIC1ydU4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi0tLS0gYS9NYWtlZmlsZS5hbQkyMDE1LTExLTEyIDIwOjI5OjQ2Ljc3ODM5NjkzNiArMDEwMAotKysrIGIvTWFrZWZpbGUuYW0JMjAxNS0xMS0xMiAyMDozMjoyNC4zNDI0NTAyNzkgKzAxMDAKLUBAIC00OCw3ICs0OCw3IEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYmJhY2NiMS4uN2Q1YTZiYiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTQ4LDYgKzQ4LDcgQEAgc3lzdGVtZHN5c3RlbXVuaXRfREFUQSA9CiAgZGlzdF9iYXNoY29tcGxldGlvbl9EQVRBID0KICBjaGVja19QUk9HUkFNUyA9CiAgZGlzdF9jaGVja19TQ1JJUFRTID0KLS1URVNUUyA9CiArVEVTVFMgPSAkKGNoZWNrX1BST0dSQU1TKQogIAogIFBBVEhGSUxFUyA9CisgCistLSAKKzIuOC4zCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQ5NmRlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1TdXBwb3J0IG9sZGVyIGhvc3RzIHdpdGggbGF0ZXN0IHV0aWwtbGludXgtbmF0aXZlCi0KLW1rb3N0ZW1wIGlzIG5vdCBkZWZpbmVkIG9uIG9sZGVyIG1hY2hpbmVzLiAgU28gd2UgZGV0ZWN0IHRoaXMgYW5kCi1wcm92aWRlIGEgZGVmaW5lIHRoYXQgdXNlcyBta3N0ZW1wIGluc3RlYWQuCi0KLU9fQ0xPRVhFQyBpcyBub3QgZGVmaW5lZCBvbiBvbGRlciBtYWNoaW5lcy4gIEl0IGlzIGhvd2V2ZXIgZGVmaW5lZAotaW4gdGhlICdjLmgnIGhlYWRlci4gIEZpeCB1cCB0aGUgdXNlcnMgdG8gaW5jbHVkZSAnYy5oJy4KLQotZmRpc2tzL2ZkaXNrc3VubGFiZWwuYyB3YXMgbW9kaWZpZWQgdG8gdXNlIHFzb3J0X3IsIGhvd2V2ZXIKLXRoaXMgaXMgbm90IGRlZmluZWQgb24gb2xkZXIgaG9zdHMuICBSZXZlcnQ6Ci0gIGNvbW1pdCBjNjliYmNhOWMxZjY2NDUwOTdiZDIwZmUzYTIxZjVhOTlhMmEwNjk4Ci0gIGZkaXNrOiAoc3VuKTogdXNlIGFzayBBUEksIHJlbW92ZSBnbG9iYWwgdmFyaWFibGUKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KLVBhdGNoZXMgcmV2ZXJ0IHVwc3RyZWFtIGNoYW5nZXMgaW4gb3JkZXIgdG8gc3VwcG9ydCBvbGRlcgotbWFjaGluZXMuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KLS0tLQotIGNvbmZpZ3VyZS5hYyB8IDEgKwotIGluY2x1ZGUvYy5oICB8IDcgKysrKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGViMzY4MGIuLjkzZTAxNWYgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTMxOCw2ICszMTgsNyBAQCBBQ19DSEVDS19GVU5DUyhbIFwKLSAJbGxzZWVrIFwKLSAJbHNlZWs2NCBcCi0gCW1lbXBjcHkgXAotKwlta29zdGVtcCBcCi0gCW5hbm9zbGVlcCBcCi0gCW9wZW5fbWVtc3RyZWFtIFwKLSAJcGVyc29uYWxpdHkgXAotZGlmZiAtLWdpdCBhL2luY2x1ZGUvYy5oIGIvaW5jbHVkZS9jLmgKLWluZGV4IGU0MjNlOGIuLmNmMzNiOTQgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL2MuaAotKysrIGIvaW5jbHVkZS9jLmgKLUBAIC0yMzMsNiArMjMzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGRpcmZkKERJUiAqZCkKLSAjZW5kaWYKLSAKLSAvKgotKyAqIG1rb3N0ZW1wIHJlcGxhY2VtZW50Ci0rICovCi0rI2lmbmRlZiBIQVZFX01LT1NURU1QCi0rI2RlZmluZSBta29zdGVtcCh0ZW1wbGF0ZSwgZmxhZ3MpIG1rc3RlbXAodGVtcGxhdGUpCi0rI2VuZGlmCi0rCi0rLyoKLSAgKiBNQVhIT1NUTkFNRUxFTiByZXBsYWNlbWVudAotICAqLwotIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGdldF9ob3N0bmFtZV9tYXgodm9pZCkKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzczZDdlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0KLVRoZSBGSFMgaW5kaWNhdGVzIHRoYXQgL2V0YyBtdXN0IGJlIGNhcGFibGUgb2YgYmVpbmcgbW91bnRlZCBSL08uCi0KLVRoZSBGSFMgYWxzbyBpbmRpY2F0ZXMgdGhhdCBsb2NrIGZpbGVzIGJlbG9uZyBpbiAvdmFyL2xvY2ssIGFuZCAvdmFyIG11c3QKLWJlIFIvVyBhcyBzb29uIGFzIHBvc3NpYmxlIGR1cmluZyBib290LgotCi1UaGlzIHBhdGNoIG1vdmVzIHRoZSBtdGFiIGxvY2sgZmlsZSBmcm9tIHRoZSBwb3RlbnRpYWxseSBSL08gL2V0YywgdG8gdGhlCi1SL1cgL3Zhci9sb2NrIGFyZWEuICBUaGlzIGxvY2sgZmlsZSBpcyB1c2VkIHdoZW4gbW91bnRpbmcgZGlza3MgYW5kIG1ha2luZwotb3RoZXIgbW91bnQgYWRqdXN0bWVudHMuICBUaGUgX1BBVEhfTU9VTlRFRF9UTVAgaXMgbm90IGFkanVzdGVkLCBhcyBmYWlsaW5nCi10byB3cml0ZSB0byB0aGlzIGZpbGUgZG9lcyBub3QgY2F1c2UgYW55IGZ1bmN0aW9uYWwgbGltaXRhdGlvbnMuCi0KLShOb3RlLCBpZiAvZXRjIGlzIFIvTywgdGhlbiAvZXRjL210YWIgc2hvdWxkIGJlIGEgc3ltbGluayB0byAvcHJvYy9tb3VudHMpCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLQotLS0tIHV0aWwtbGludXgtbmctMi4xNi9pbmNsdWRlL3BhdGhuYW1lcy5oLm9yaWcKLSsrKyB1dGlsLWxpbnV4LW5nLTIuMTYvaW5jbHVkZS9wYXRobmFtZXMuaAotQEAgLTkwLDcgKzkwLDcgQEAKLSAjIGVuZGlmCi0gI2VuZGlmCi0gCi0tI2RlZmluZSBfUEFUSF9NT1VOVEVEX0xPQ0sJX1BBVEhfTU9VTlRFRCAifiIKLSsjZGVmaW5lIF9QQVRIX01PVU5URURfTE9DSwkiL3Zhci9sb2NrL210YWJ+IgotICNkZWZpbmUgX1BBVEhfTU9VTlRFRF9UTVAJX1BBVEhfTU9VTlRFRCAiLnRtcCIKLSAKLSAjaWZuZGVmIF9QQVRIX0RFVgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dWlkLXRlc3QtZXJyb3ItYXBpLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dWlkLXRlc3QtZXJyb3ItYXBpLnBhdGNoCmluZGV4IDFiMGZmNzkuLmE2ZmRlNWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXVpZC10ZXN0LWVycm9yLWFwaS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V1aWQtdGVzdC1lcnJvci1hcGkucGF0Y2gKQEAgLTMsMTkgKzMsMjMgQEAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIAotSW5kZXg6IHV0aWwtbGludXgtMi4yNy4xL3Rlc3RzL2hlbHBlcnMvdGVzdF91dWlkZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdXRpbC1saW51eC0yLjI3LjEub3JpZy90ZXN0cy9oZWxwZXJzL3Rlc3RfdXVpZGQuYwotKysrIHV0aWwtbGludXgtMi4yNy4xL3Rlc3RzL2hlbHBlcnMvdGVzdF91dWlkZC5jCistLS0KKyBtaXNjLXV0aWxzL3Rlc3RfdXVpZGQuYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNjEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy11dGlscy90ZXN0X3V1aWRkLmMgYi9taXNjLXV0aWxzL3Rlc3RfdXVpZGQuYworaW5kZXggMzZmM2IzZC4uN2Q1NzljZSAxMDA2NDQKKy0tLSBhL21pc2MtdXRpbHMvdGVzdF91dWlkZC5jCisrKysgYi9taXNjLXV0aWxzL3Rlc3RfdXVpZGQuYwogQEAgLTIzLDcgKzIzLDYgQEAKICAgKgogICAqCW1ha2UgdXVpZGQgdXVpZGdlbiBsb2NhbHN0YXRlZGlyPS92YXIKICAgKi8KIC0jaW5jbHVkZSA8ZXJyb3IuaD4KLSAjaW5jbHVkZSA8bGliZ2VuLmg+CiAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KICAjaW5jbHVkZSA8c3RkaW8uaD4KLUBAIC0zOSw2ICszOCwxNyBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC0zOCw2ICszNywxNyBAQAogICNpbmNsdWRlICJ4YWxsb2MuaCIKICAjaW5jbHVkZSAic3RydXRpbHMuaCIKICAKQEAgLTMzLDcgKzM3LDcgQEAKICAjZGVmaW5lIExPRyhsZXZlbCxhcmdzKSBpZiAobG9nbGV2ID49IGxldmVsKSB7IGZwcmludGYgYXJnczsgfQogIAogIHNpemVfdCBucHJvY2Vzc2VzID0gNDsKLUBAIC0yNTcsNiArMjY3LDU2IEBAIHN0YXRpYyB2b2lkIG9iamVjdF9kdW1wKHNpemVfdCBpZHgsIG9iamUKK0BAIC0yNTYsNiArMjY2LDU2IEBAIHN0YXRpYyB2b2lkIG9iamVjdF9kdW1wKHNpemVfdCBpZHgsIG9iamVjdF90ICpvYmopCiAgCWZwcmludGYoc3RkZXJyLCAifVxuIik7CiAgfQogIApAQCAtOTAsMyArOTQsNiBAQAogIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgewogIAlzaXplX3QgaSwgbmZhaWxlZCA9IDAsIG5pZ25vcmVkID0gMDsKKy0tIAorMi44LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI3LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjcuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU0OTE1OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjcuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLU1BSk9SX1ZFUlNJT04gPSAiMi4yNyIKLXJlcXVpcmUgdXRpbC1saW51eC5pbmMKLQotIyBUbyBzdXBwb3J0IG9sZGVyIGhvc3RzLCB3ZSBuZWVkIHRvIHBhdGNoIGFuZC9vciByZXZlcnQKLSMgc29tZSB1cHN0cmVhbSBjaGFuZ2VzLiAgT25seSBkbyB0aGlzIGZvciBuYXRpdmUgcGFja2FnZXMuCi1PTERIT1NUID0gIiIKLU9MREhPU1RfY2xhc3MtbmF0aXZlID0gImZpbGU6Ly91dGlsLWxpbnV4LW5hdGl2ZS5wYXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggXAotCQkJIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLXNiaW5kaXIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bnVzZXIucGFtZCBcCi0gICAgICAgICAgICBmaWxlOi8vcnVudXNlci1sLnBhbWQgXAotICAgICAgICAgICAgJHtPTERIT1NUfSBcCi0gICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWRfdW5zdXBwb3J0ZWRfc2xlZXBfcGFyYW0ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2F2b2lkX3Vuc3VwcG9ydGVkX2dyZXBfb3B0cy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGlzcGxheV90ZXN0bmFtZV9mb3Jfc3VidGVzdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3V1aWQtdGVzdC1lcnJvci1hcGkucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gIjNjZDI2OThkMTM2M2EyYzY0MDkxYzJkYWRjOTc0NjQ3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBhODE4ZmNkZWRlOTlhZWM0M2ZmZTZjYTViNTM4OGJmZjgwZDE2MmYyZjdiZDQ1NDFkY2E5NGZlY2I4N2EyOTAiCi0KLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJzY2FuZl9jdl9hbGxvY19tb2RpZmllcj1tcyIKLQotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZhbGxvY2F0ZSBcCi0JCQkgICAgIC0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKLSIKLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mYWxsb2NhdGUgXAotCQkJCS0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI4LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzMmNiOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yOC4xLmJiCkBAIC0wLDAgKzEsMzEgQEAKK01BSk9SX1ZFUlNJT04gPSAiMi4yOCIKK3JlcXVpcmUgdXRpbC1saW51eC5pbmMKKworIyBUbyBzdXBwb3J0IG9sZGVyIGhvc3RzLCB3ZSBuZWVkIHRvIHBhdGNoIGFuZC9vciByZXZlcnQKKyMgc29tZSB1cHN0cmVhbSBjaGFuZ2VzLiAgT25seSBkbyB0aGlzIGZvciBuYXRpdmUgcGFja2FnZXMuCitPTERIT1NUID0gIiIKK09MREhPU1RfY2xhc3MtbmF0aXZlID0gImZpbGU6Ly91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaCIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW51c2VyLnBhbWQgXAorICAgICAgICAgICAgZmlsZTovL3J1bnVzZXItbC5wYW1kIFwKKyAgICAgICAgICAgICR7T0xESE9TVH0gXAorICAgICAgICAgICAgZmlsZTovL3B0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL2Rpc3BsYXlfdGVzdG5hbWVfZm9yX3N1YnRlc3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91dWlkLXRlc3QtZXJyb3ItYXBpLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMmQ4NjNlZmFmNGZkMzMwYTQyYzVlZmU5ZjFiMDJiNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZWNlNGVhNGEzNGVmNzg2YjY4ZjVjNDE1ZTg0ODM5MDQyNDIzMmFiZDFlZTAwZjdlZTViZGRjMzA2NTdiNjBmIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAic2NhbmZfY3ZfYWxsb2NfbW9kaWZpZXI9bXMiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mYWxsb2NhdGUgXAorCQkJICAgICAtLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZmFsbG9jYXRlIFwKKwkJCQktLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jCmluZGV4IDI3Y2M5ZmYuLjlmYTIwNmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jCkBAIC0xNyw4ICsxNyw4IEBACiB9CiAKIHB5dGhvbiBkb19pbnN0YWxsX2NvbmZpZyAoKSB7Ci0gICAgaW5kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLDEpKQotICAgIGluZmlsZSA9IGZpbGUob2UucGF0aC5qb2luKGluZGlyLCAnZmlsZXMnLCAnYXB0LmNvbmYnKSwgJ3InKQorICAgIGluZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpCisgICAgaW5maWxlID0gb3BlbihvZS5wYXRoLmpvaW4oaW5kaXIsICdmaWxlcycsICdhcHQuY29uZicpLCAncicpCiAgICAgZGF0YSA9IGluZmlsZS5yZWFkKCkKICAgICBpbmZpbGUuY2xvc2UoKQogCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICBvdXRwYXRoID0gb2UucGF0aC5qb2luKG91dGRpciwgJ2FwdC5jb25mLnNhbXBsZScpCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dHBhdGgpOgotICAgICAgICBvdXRmaWxlID0gZmlsZShvdXRwYXRoLCAndycpCisgICAgICAgIG91dGZpbGUgPSBvcGVuKG91dHBhdGgsICd3JykKICAgICAgICAgb3V0ZmlsZS53cml0ZShkYXRhKQogICAgICAgICBvdXRmaWxlLmNsb3NlKCkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMi4xMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZV8xLjAuMTAuMS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZV8xLjIuMTIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jCmluZGV4IDc4ZWY1YTcuLjMwMjYzNzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LmluYwpAQCAtMiw3ICsyLDcgQEAKIExJQ0VOU0UgPSAiR1BMdjIuMCsiCiBTRUNUSU9OID0gImJhc2UiCiAKLVNSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNTA4MDVUMDk0OTI4Wi9wb29sL21haW4vYS8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiBcCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNTI2VDE2Mjk0M1ovcG9vbC9tYWluL2EvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAogICAgICAgICAgICBmaWxlOi8vdXNlLWhvc3QucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbm8tbmxzLWRwa2cucGF0Y2ggXApAQCAtMTIsMTYgKzEyLDE3IEBACiAgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXRlc3QucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1lbnZpcm9ubWVudC5tYWstbXVzbC1iYXNlZC1zeXN0ZW1zLWNhbi1nZW5lcmF0ZS1zaGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXB0LTEuMi4xMi1GaXgtbXVzbC1idWlsZC5wYXRjaCBcCiAgICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI2NTA1YzQyOTdiMzM4YWRiMjA4N2NlODdiYmM0YTI3NiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzZmIxZGU5NTk4MzYzYzQxNjU5MWQ0OWUzYzI4NTQ1OGUwOTViMDM1ZTZjMDZkNWI5NDRhNTRlMTVmYzliNTQzIgorU1JDX1VSSVttZDVzdW1dID0gIjgwZjZmMGVmMTEwYTQ1YTdlNWFmOGE5ZDIzM2ZiMGU3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU4MjBkMjdjYmE3MzQ3NmRmNGFiY2ZmMjdkYWRkMWI1ODQ3NDc0YmZlODVmN2U5MjAyYTlhMDc1MjY5NzNlYTYiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCiAKICMgdGhlIHBhY2thZ2UgaXMgdGFrZW4gZnJvbSBzbmFwc2hvdHMuZGViaWFuLm9yZzsgdGhhdCBzb3VyY2UgaXMgc3RhdGljIGFuZCBnb2VzIHN0YWxlCiAjIHNvIHdlIGNoZWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZnJvbSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgZ2V0IHVwZGF0ZWQKIFVQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYS9hcHQvIgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0Citpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHVzZXJhZGQKIAogRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50LGF1dG9oZWFkZXIiCiAKQEAgLTI5LDMgKzMwLDYgQEAKICAgICBybSAtcmYgJHtTfS9idWlsZGxpYi9jb25maWcuc3ViCiAgICAgcm0gLXJmICR7U30vYnVpbGRsaWIvY29uZmlnLmd1ZXNzCiB9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0tbm8tY3JlYXRlLWhvbWUgLS1ob21lLWRpciAvbm9uZXhpc3RlbnQgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBfYXB0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKaW5kZXggZDMzMDY5Yi4uYjNhODgzYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSAxMDY3OTdmMWM2NmZhNTc4ZGFkMjFmZDkzODBiZjlkNTc2NTczZGZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBkZmMxMzcwZDUwMzIyZTJlOWQyMjVhN2E2M2I0NDk5M2ZjMDFhNzI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgogRGF0ZTogRnJpLCAyMiBNYXkgMjAxNSAwODowNToxNSArMDgwMAogU3ViamVjdDogW1BBVENIXSBSZXZlcnQgImFsd2F5cyBydW4gJ2Rwa2cgLS1jb25maWd1cmUgLWEnIGF0IHRoZSBlbmQgb2Ygb3VyCkBAIC0xNiwyMSArMTYsMTYgQEAKIAogU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgogLS0tCi0gYXB0LXBrZy9kZWIvZHBrZ3BtLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArLS0KLSB0ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yayAgICAgICAgICAgICAgICAgICAgICAgICB8IDI1ICsrKystLS0tCi0gdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZCAgICAgICAgICAgICAgfCA2NyArKysrKysrKystLS0tLS0tLS0tCi0gdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgICAgICAgfCAxOCArKy0tLS0KLSB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yICAgICAgICB8ICAyICstCi0gLi4uZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4gfCA3NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLi4uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMgICAgICAgfCAgNiArLQotIDcgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygtKQotIGRlbGV0ZSBtb2RlIDEwMDc1NSB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1bgorIGFwdC1wa2cvZGViL2Rwa2dwbS5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsrLS0tLS0tLQorIHRlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyICAgICAgICAgICAgICB8IDE0ICsrKysrKystLS0tLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzIHwgIDYgKystLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2FwdC1wa2cvZGViL2Rwa2dwbS5jYyBiL2FwdC1wa2cvZGViL2Rwa2dwbS5jYwotaW5kZXggYjE4N2VmYi4uZjI2OTc2NCAxMDA2NDQKK2luZGV4IDgzNGNiMGUuLjg0ZGVkM2EgMTAwNjQ0CiAtLS0gYS9hcHQtcGtnL2RlYi9kcGtncG0uY2MKICsrKyBiL2FwdC1wa2cvZGViL2Rwa2dwbS5jYwotQEAgLTEwNDksMTIgKzEwNDksNiBAQCB2b2lkIHBrZ0RQa2dQTTo6QnVpbGRQYWNrYWdlc1Byb2dyZXNzTWFwKCkKK0BAIC0xMDM3LDEyICsxMDM3LDYgQEAgdm9pZCBwa2dEUGtnUE06OkJ1aWxkUGFja2FnZXNQcm9ncmVzc01hcCgpCiAgCSBQYWNrYWdlc1RvdGFsKys7CiAgICAgICAgfQogICAgIH0KQEAgLTQyLDggKzM3LDggQEAKIC0gICArK1BhY2thZ2VzVG90YWw7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qfX19Ki8KLSAjaWYgKEFQVF9QS0dfTUFKT1IgPj0gNCAmJiBBUFRfUEtHX01JTk9SIDwgMTMpCi1AQCAtMTI5NCw4ICsxMjg4LDkgQEAgYm9vbCBwa2dEUGtnUE06OkdvTm9BQklCcmVhayhBUFQ6OlByb2dyZXNzOjpQYWNrYWdlTWFuYWdlciAqcHJvZ3Jlc3MpCisgYm9vbCBwa2dEUGtnUE06OkdvKGludCBTdGF0dXNGZCkKK0BAIC0xMjUwLDggKzEyNDQsOSBAQCBib29sIHBrZ0RQa2dQTTo6R28oQVBUOjpQcm9ncmVzczo6UGFja2FnZU1hbmFnZXIgKnByb2dyZXNzKQogIAogICAgIC8vIHN1cHBvcnQgc3VicHJlc3Npbmcgb2YgdHJpZ2dlcnMgcHJvY2Vzc2luZyBmb3Igc3BlY2lhbAogICAgIC8vIGNhc2VzIGxpa2UgZC1pIHRoYXQgcnVucyB0aGUgdHJpZ2dlcnMgaGFuZGxpbmcgbWFudWFsbHkKQEAgLTU0LDE1OSArNDksMTEgQEAKICAgICAgICBMaXN0LnB1c2hfYmFjayhJdGVtKEl0ZW06OkNvbmZpZ3VyZVBlbmRpbmcsIFBrZ0l0ZXJhdG9yKCkpKTsKICAKICAgICAvLyBmb3IgdGhlIHByb2dyZXNzCi1kaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsgYi90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yawotaW5kZXggNzBhZDM4MS4uMDA2NzJhZCAxMDA2NDQKLS0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCi0rKysgYi90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yawotQEAgLTExNzgsMTMgKzExNzgsMTAgQEAgdGVzdG5vcGFja2FnZSgpIHsKLSAJZmkKLSB9Ci0gCi0tdGVzdGRwa2dzdGF0dXMoKSB7Ci0tCWxvY2FsIFNUQVRFPSIkMSIKLS0JbG9jYWwgTlI9IiQyIgotLQlzaGlmdCAyCi0tCW1zZ3Rlc3QgIlRlc3QgdGhhdCAkTlIgcGFja2FnZShzKSBhcmUgaW4gc3RhdGUgJFNUQVRFIHdpdGgiICJkcGtnIC1sICQqIgotLQlsb2NhbCBQS0dTPSIkKGRwa2cgLWwgIiRAIiAyPi9kZXYvbnVsbCB8IGdyZXAgIl4ke1NUQVRFfSIgfCB3YyAtbCkiCi0tCWlmIFsgIiRQS0dTIiAhPSAkTlIgXTsgdGhlbgotK3Rlc3RkcGtnaW5zdGFsbGVkKCkgewotKwltc2d0ZXN0ICJUZXN0IGZvciBjb3JyZWN0bHkgaW5zdGFsbGVkIHBhY2thZ2Uocykgd2l0aCIgImRwa2cgLWwgJCoiCi0rCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXmknIHwgd2MgLWwpIgotKwlpZiBbICIkUEtHUyIgIT0gJCMgXTsgdGhlbgotIAkJZWNobyA+JjIgJFBLR1MKLSAJCWRwa2cgLWwgIiRAIiB8IGdyZXAgJ15bYS16XScgPiYyCi0gCQltc2dmYWlsCi1AQCAtMTE5MywxMiArMTE5MCwxNiBAQCB0ZXN0ZHBrZ3N0YXR1cygpIHsKLSAJZmkKLSB9Ci0gCi0tdGVzdGRwa2dpbnN0YWxsZWQoKSB7Ci0tCXRlc3RkcGtnc3RhdHVzICdpaScgIiQjIiAiJEAiCi0tfQotLQotIHRlc3RkcGtnbm90aW5zdGFsbGVkKCkgewotLQl0ZXN0ZHBrZ3N0YXR1cyAnaWknICcwJyAiJEAiCi0rCW1zZ3Rlc3QgIlRlc3QgZm9yIGNvcnJlY3RseSBub3QtaW5zdGFsbGVkIHBhY2thZ2Uocykgd2l0aCIgImRwa2cgLWwgJCoiCi0rCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+IC9kZXYvbnVsbCB8IGdyZXAgJ15pJyB8IHdjIC1sKSIKLSsJaWYgWyAiJFBLR1MiICE9IDAgXTsgdGhlbgotKwkJZWNobwotKwkJZHBrZyAtbCAiJEAiIHwgZ3JlcCAnXlthLXpdJyA+JjIKLSsJCW1zZ2ZhaWwKLSsJZWxzZQotKwkJbXNncGFzcwotKwlmaQotIH0KLSAKLSB0ZXN0bWFya2VkYXV0bygpIHsKLWRpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAotaW5kZXggNjhjYzA0My4uZDcyZTdlNyAxMDA3NTUKLS0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQKLSsrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQKLUBAIC0xOSwxNCArMTksMTMgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQotIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCi0gcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCi0gcG1zdGF0dXM6dGVzdGluZzowOkluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6dGVzdGluZzoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQotLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCi0tcG1zdGF0dXM6dGVzdGluZzo1MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6dGVzdGluZzo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCi0rcG1zdGF0dXM6dGVzdGluZzoyMDpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6dGVzdGluZzo0MDpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6dGVzdGluZzo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQotK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKLStwbXN0YXR1czp0ZXN0aW5nOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQotK3Btc3RhdHVzOnRlc3Rpbmc6ODA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6dGVzdGluZzoxMDA6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKLSAKLSAjIHVwZ3JhZGUKLSBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKLUBAIC0zNSwxNCArMzQsMTMgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQotIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCi0gcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCi0gcG1zdGF0dXM6dGVzdGluZzowOkluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6dGVzdGluZzoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQotLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCi0tcG1zdGF0dXM6dGVzdGluZzo1MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6dGVzdGluZzo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCi0rcG1zdGF0dXM6dGVzdGluZzoyMDpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6dGVzdGluZzo0MDpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6dGVzdGluZzo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQotK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKLStwbXN0YXR1czp0ZXN0aW5nOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQotK3Btc3RhdHVzOnRlc3Rpbmc6ODA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6dGVzdGluZzoxMDA6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKLSAKLSAjIHJlaW5zdGFsbAotIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZwotQEAgLTUxLDI0ICs0OSwyMiBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCi0gZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKLSBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKLSBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQotLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQotLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKLS1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQotLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQotLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKLStwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKLStwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKLStwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZwotK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCi0rcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKLStwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZwotIAotICMgYW5kIHJlbW92ZQotIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZwotIHRlc3RzdWNjZXNzIGFwdGdldCByZW1vdmUgdGVzdGluZyAteSAtbyBBUFQ6OlN0YXR1cy1GZD0zCi0gdGVzdGVxdWFsICJwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKLSBwbXN0YXR1czp0ZXN0aW5nOjA6UmVtb3ZpbmcgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6dGVzdGluZzoyNTpQcmVwYXJpbmcgZm9yIHJlbW92YWwgb2YgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6dGVzdGluZzo1MDpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKLS1wbXN0YXR1czp0ZXN0aW5nOjc1OlJlbW92ZWQgdGVzdGluZyAoYW1kNjQpCi0tcG1zdGF0dXM6ZHBrZy1leGVjOjc1OlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKLStwbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6UHJlcGFyaW5nIGZvciByZW1vdmFsIG9mIHRlc3RpbmcgKGFtZDY0KQotK3Btc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKLStwbXN0YXR1czp0ZXN0aW5nOjEwMDpSZW1vdmVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKLSAKLSAjIGluc3RhbGwgbm9uLW5hdGl2ZSBhbmQgZW5zdXJlIHdlIGdldCBwcm9wZXIgcHJvZ3Jlc3MgaW5mbwotIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZwotQEAgLTc5LDEzICs3NSwxMiBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCi0gZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKLSBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKLSBwbXN0YXR1czp0ZXN0aW5nMjowOkluc3RhbGxpbmcgdGVzdGluZzIgKGkzODYpCi0tcG1zdGF0dXM6dGVzdGluZzI6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZzIgKGkzODYpCi0tcG1zdGF0dXM6dGVzdGluZzI6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZzIgKGkzODYpCi0tcG1zdGF0dXM6dGVzdGluZzI6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nMiAoaTM4NikKLS1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCi0tcG1zdGF0dXM6dGVzdGluZzI6NTA6Q29uZmlndXJpbmcgdGVzdGluZzIgKGkzODYpCi0tcG1zdGF0dXM6dGVzdGluZzI6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKLS1wbXN0YXR1czp0ZXN0aW5nMjo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nMiAoaTM4NikKLS1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCi0rcG1zdGF0dXM6dGVzdGluZzI6MjA6UHJlcGFyaW5nIHRlc3RpbmcyIChpMzg2KQotK3Btc3RhdHVzOnRlc3RpbmcyOjQwOlVucGFja2luZyB0ZXN0aW5nMiAoaTM4NikKLStwbXN0YXR1czp0ZXN0aW5nMjo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcyIChpMzg2KQotK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKLStwbXN0YXR1czp0ZXN0aW5nMjo2MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKLStwbXN0YXR1czp0ZXN0aW5nMjo4MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKLStwbXN0YXR1czp0ZXN0aW5nMjoxMDA6SW5zdGFsbGVkIHRlc3RpbmcyIChpMzg2KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKLSAKLSBybSAtZiBhcHQtcHJvZ3Jlc3MqLmxvZwogZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKLWluZGV4IGJhZGM5ODUuLjlkMjI3OTQgMTAwNzU1CitpbmRleCA1OGZkNzMyLi4zMzU5NzYyIDEwMDc1NQogLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKICsrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyCi1AQCAtMjcsNDEgKzI3LDM3IEBAIE1lc3NhZ2U6IEluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCitAQCAtMjcsMzYgKzI3LDM2IEBAIE1lc3NhZ2U6IEluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCiAgCiAgU3RhdHVzOiBwcm9ncmVzcwogIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKQEAgLTI0OCwxMDkgKzk1LDEwIEBACiAtUGVyY2VudDogODMuMzMzMwogK1BlcmNlbnQ6IDEwMAogIE1lc3NhZ2U6IEluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKLS0KLS1TdGF0dXM6IHByb2dyZXNzCi0tUGVyY2VudDogODMuMzMzMwotLU1lc3NhZ2U6IFJ1bm5pbmcgZHBrZwotICIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKICAKLSAKLWRpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvcgotaW5kZXggNjMyMzAwNy4uYTQ3MDk1YiAxMDA3NTUKLS0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKLSsrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKLUBAIC0xOCw3ICsxOCw3IEBAIHNldHVwYXB0YXJjaGl2ZQotIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZwotIHRlc3RmYWlsdXJlIGFwdGdldCBpbnN0YWxsIGZvbzEgZm9vMiAteSAtbyBBUFQ6OlN0YXR1cy1GZD0zCi0gbXNndGVzdCAiRW5zdXJlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSIKLS1pZiBncmVwIC1xICJhcHRhcmNoaXZlL3Bvb2wvZm9vMl8wLjguMTVfYW1kNjQuZGViOjM2LjM2MzY6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgotK2lmIGdyZXAgLXEgImFwdGFyY2hpdmUvcG9vbC9mb28yXzAuOC4xNV9hbWQ2NC5kZWI6NDA6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgotIAltc2dwYXNzCi0gZWxzZQotIAljYXQgYXB0LXByb2dyZXNzLmxvZwotZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQotaW5kZXggMTQ2ZmE3Ni4uMDAwMDAwMAotLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KLSsrKyAvZGV2L251bGwKLUBAIC0xLDc1ICswLDAgQEAKLS0jIS9iaW4vc2gKLS1zZXQgLWUKLS0KLS1URVNURElSPSQocmVhZGxpbmsgLWYgJChkaXJuYW1lICQwKSkKLS0uICRURVNURElSL2ZyYW1ld29yawotLQotLXNldHVwZW52aXJvbm1lbnQKLS1jb25maWdhcmNoaXRlY3R1cmUgJ2FtZDY0JwotLQotLW1zZ3Rlc3QgJ0NoZWNrIGlmIGluc3RhbGxlZCBkcGtnIHN1cHBvcnRzJyAnbm9hd2FpdCB0cmlnZ2VyJwotLWlmIGRwa2ctY2hlY2tidWlsZGRlcHMgLWQgJ2Rwa2cgKD49IDEuMTYuMSknIC9kZXYvbnVsbDsgdGhlbgotLQltc2dwYXNzCi0tZWxzZQotLQltc2dza2lwICdkcGtnIHZlcnNpb24gdG9vIG9sZCcKLS0JZXhpdCAwCi0tZmkKLS1jb25maWdkcGtnbm9vcGNocm9vdAotLQotLWJ1aWxkdHJpZ2dlcnBhY2thZ2VzKCkgewotLQlsb2NhbCBUWVBFPSIkMSIKLS0Jc2V0dXBzaW1wbGVuYXRpdmVwYWNrYWdlICJ0cmlnZ2VyYWJsZS0kVFlQRSIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJyAiRGVwZW5kczogdHJpZ2RlcGVuZHMtJFRZUEUiCi0tCUJVSUxERElSPSJpbmNvbWluZy90cmlnZ2VyYWJsZS0ke1RZUEV9LTEuMCIKLS0JY2F0ID4ke0JVSUxERElSfS9kZWJpYW4vcG9zdGluc3QgPDxFT0YKLS0jIS9iaW4vc2gKLS1pZiBbICJcJDEiID0gJ3RyaWdnZXJlZCcgXTsgdGhlbgotLQlscyAtbCAvcHJvYy9zZWxmL2ZkLwotLWZpCi0tRU9GCi0tCWVjaG8gIiRUWVBFIC91c3Ivc2hhcmUvZG9jIiA+ICR7QlVJTERESVJ9L2RlYmlhbi90cmlnZ2VycwotLQlidWlsZHBhY2thZ2UgIiRCVUlMRERJUiIgJ3Vuc3RhYmxlJyAnbWFpbicgJ25hdGl2ZScKLS0Jcm0gLXJmICIkQlVJTERESVIiCi0tCWJ1aWxkc2ltcGxlbmF0aXZlcGFja2FnZSAidHJpZ2RlcGVuZHMtJFRZUEUiICdhbGwnICcxLjAnICd1bnN0YWJsZScKLS19Ci0tCi0tI2J1aWxkdHJpZ2dlcnBhY2thZ2VzICdpbnRlcmVzdCcKLS1idWlsZHRyaWdnZXJwYWNrYWdlcyAnaW50ZXJlc3Qtbm9hd2FpdCcKLS1idWlsZHNpbXBsZW5hdGl2ZXBhY2thZ2UgInRyaWdzdHVmZiIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJwotLQotLXNldHVwYXB0YXJjaGl2ZQotLQotLXJ1bnRlc3RzKCkgewotLQlsb2NhbCBUWVBFPSIkMSIKLS0JbXNnbXNnICdXb3JraW5nIHdpdGggdHJpZ2dlciB0eXBlJyAiJFRZUEUiCi0tCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdnZXJhYmxlLSRUWVBFIC15Ci0tCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKLS0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKLS0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUKLS0KLS0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IGluc3RhbGwgdHJpZ2RlcGVuZHMtJFRZUEUgLXkgLS1yZWluc3RhbGwKLS0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAotLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAotLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0Ci0tCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCi0tCi0tCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdzdHVmZiAteQotLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0Ci0tCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0Ci0tCXRlc3RzdWNjZXNzIGdyZXAgJyByb290IHJvb3QgJyB0ZXJtaW5hbC5vdXRwdXQKLS0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUgdHJpZ3N0dWZmCi0tCi0tCXRlc3RzdWNjZXNzIGFwdGdldCBwdXJnZSB0cmlnc3R1ZmYgLXkKLS0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAotLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAotLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0Ci0tCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCi0tCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdzdHVmZgotLQotLQl0ZXN0c3VjY2VzcyBhcHRnZXQgcHVyZ2UgdHJpZ2RlcGVuZHMtJFRZUEUgLXkKLS0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAotLQl0ZXN0ZmFpbHVyZSBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAotLQl0ZXN0ZmFpbHVyZSBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0Ci0tCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCi0tfQotLSNydW50ZXN0cyAnaW50ZXJlc3QnCi0tcnVudGVzdHMgJ2ludGVyZXN0LW5vYXdhaXQnCisgU3RhdHVzOiBwcm9ncmVzcwogZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cwotaW5kZXggNDFjMDU3MC4uZDM5NjBkNyAxMDA3NTUKK2luZGV4IGQ4NmU2MzguLmVmNmQyM2IgMTAwNzU1CiAtLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMKICsrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cwogQEAgLTU5LDggKzU5LDcgQEAgc3RhcnR1cCBwYWNrYWdlcyBjb25maWd1cmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWFwdC0xLjIuMTItRml4LW11c2wtYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1hcHQtMS4yLjEyLUZpeC1tdXNsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjA0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1hcHQtMS4yLjEyLUZpeC1tdXNsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gMzNiOTdlMDg5ZDRhOThkM2FjZDIwYmQ3ODMzN2RkOTE1Yjk4OWJjMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IEZyaSwgNSBBdWcgMjAxNiAxNToyNDoyNyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBhcHQgMS4yLjEyOiBGaXggbXVzbCBidWlsZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCittZXRob2RzL2Nvbm5lY3QuY2M6IE11c2wgZG9lc24ndCBzdXBwb3J0IEFJX0lETiBmbGFnIGluIG5ldGRiLmgKK2hlYWRlciBzbyBkZWZpbmUgaXQgbWFudWFsbHkuCithcHQtcGtnL2NvbnRyaWIvc3J2cmVjLmg6IEFkZCBleHBsaWNpdHkgaW5jbHVkZSBvZiBzeXMvdHlwZXMuaAordG8gYXZvaWQgZXJyb3JzIGluIHR5cGVzIHVfaW50X1NJWkUuCisKK1Vwc3RyZWFtLXN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGFwdC1wa2cvY29udHJpYi9zcnZyZWMuaCB8IDEgKworIG1ldGhvZHMvY29ubmVjdC5jYyAgICAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY29udHJpYi9zcnZyZWMuaCBiL2FwdC1wa2cvY29udHJpYi9zcnZyZWMuaAoraW5kZXggMDFiODEwMi4uMTViNjg3NSAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvY29udHJpYi9zcnZyZWMuaAorKysrIGIvYXB0LXBrZy9jb250cmliL3NydnJlYy5oCitAQCAtOSw2ICs5LDcgQEAKKyAjaWZuZGVmIFNSVlJFQ19ICisgI2RlZmluZSBTUlZSRUNfSAorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisgI2luY2x1ZGUgPHZlY3Rvcj4KKyAjaW5jbHVkZSA8c3RyaW5nPgorZGlmZiAtLWdpdCBhL21ldGhvZHMvY29ubmVjdC5jYyBiL21ldGhvZHMvY29ubmVjdC5jYworaW5kZXggMDdhNzMwYi4uYmIwYWI1YSAxMDA2NDQKKy0tLSBhL21ldGhvZHMvY29ubmVjdC5jYworKysrIGIvbWV0aG9kcy9jb25uZWN0LmNjCitAQCAtMzMsNiArMzMsOSBAQAorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorKyNpZm5kZWYgQUlfSUROCisrI2RlZmluZSBBSV9JRE4gMHgwMDQwCisrI2VuZGlmCisgCisgI2luY2x1ZGUgImNvbm5lY3QuaCIKKyAjaW5jbHVkZSAicmZjMjU1M2VtdS5oIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtZml4LXRoZS1nY2MtdmVyc2lvbi1jaGVjay5wYXRjaAppbmRleCBiZWVhNTZkLi4zYWM5MjQ2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDE1YzZlZjZhODI3ZDM2ODFhZDA2ZTg2MmQyN2FiM2RmYjg0Y2I2ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDUzYzVkMDk4MmYwM2ZkMGUyNGM0MTk1ZDZlMWU0MmI5YWRlOWQ1MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CiBEYXRlOiBXZWQsIDI3IE1heSAyMDE1IDE0OjMwOjI4ICswODAwCiBTdWJqZWN0OiBbUEFUQ0hdIGZpeCB0aGUgZ2NjIHZlcnNpb24gY2hlY2sKQEAgLTksMzcgKzksMjkgQEAKIAogU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgogLS0tCi0gYXB0LXBrZy9jYWNoZXNldC5oICAgICAgICAgICB8ICA0ICsrLS0KLSBhcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjIHwgMTIgKysrKysrLS0tLS0tCi0gYXB0LXBrZy9zcmNyZWNvcmRzLmNjICAgICAgICB8ICA0ICsrLS0KLSBhcHQtcGtnL3NyY3JlY29yZHMuaCAgICAgICAgIHwgIDQgKystLQotIGFwdC1wa2cvdmVuZG9ybGlzdC5jYyAgICAgICAgfCAgNCArKy0tCi0gNSBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKyBhcHQtcGtnL2NvbnRyaWIvbWFjcm9zLmggICAgIHwgMiArLQorIGFwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MgfCA0ICsrLS0KKyBhcHQtcGtnL3NyY3JlY29yZHMuY2MgICAgICAgIHwgNCArKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCiAKLWRpZmYgLS1naXQgYS9hcHQtcGtnL2NhY2hlc2V0LmggYi9hcHQtcGtnL2NhY2hlc2V0LmgKLWluZGV4IGI3MjI5YmMuLjhjYzI5MTcgMTAwNjQ0Ci0tLS0gYS9hcHQtcGtnL2NhY2hlc2V0LmgKLSsrKyBiL2FwdC1wa2cvY2FjaGVzZXQuaAotQEAgLTExOSwxMiArMTE5LDEyIEBAIHB1YmxpYzoKLSAJCWlubGluZSBzdGQ6OnN0cmluZyBGdWxsTmFtZShib29sIGNvbnN0IFByZXR0eSkgY29uc3QgeyByZXR1cm4gZ2V0UGtnKCkuRnVsbE5hbWUoUHJldHR5KTsgfQotIAkJaW5saW5lIHN0ZDo6c3RyaW5nIEZ1bGxOYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0UGtnKCkuRnVsbE5hbWUoKTsgfQotIAkJQVBUX0RFUFJFQ0FURUQgaW5saW5lIGNvbnN0IGNoYXIgKlNlY3Rpb24oKSBjb25zdCB7CitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9jb250cmliL21hY3Jvcy5oIGIvYXB0LXBrZy9jb250cmliL21hY3Jvcy5oCitpbmRleCAyNzI3ZmQ4Li4wZWNhZTUwIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9jb250cmliL21hY3Jvcy5oCisrKysgYi9hcHQtcGtnL2NvbnRyaWIvbWFjcm9zLmgKK0BAIC0xMzYsNyArMTM2LDcgQEAKKyAjZW5kaWYKKyAjZW5kaWYKKyAKIC0jaWYgX19HTlVDX18gPj0gNAogKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCi0gCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAotIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gI2VuZGlmCi0gCSAgIHJldHVybiBnZXRQa2coKS5TZWN0aW9uKCk7Ci0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotICNlbmRpZgotIAkJfQorIAkjZGVmaW5lIEFQVF9JR05PUkVfREVQUkVDQVRFRF9QVVNIIFwKKyAJCV9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgCQlfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9uc1wiIikKIGRpZmYgLS1naXQgYS9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjIGIvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYwotaW5kZXggNDlhMzQ4ZC4uNGJjOWRjZiAxMDA2NDQKK2luZGV4IGU4Mjk1ZGUuLjQwMTYwYjIgMTAwNjQ0CiAtLS0gYS9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjCiArKysgYi9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjCi1AQCAtMTI2LDEzICsxMjYsMTMgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGU+ICZGKQorQEAgLTEzOSwxMyArMTM5LDEzIEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlcyhzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlPiAmRikKICAgICBmb3IgKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPjo6Y29uc3RfaXRlcmF0b3IgZjIgPSBGMi5iZWdpbigpOyBmMiAhPSBGMi5lbmQoKTsgKytmMikKICAgICB7CiAgICAgICAgcGtnU3JjUmVjb3Jkczo6RmlsZTIgZjsKQEAgLTU1LDQ2ICs0NywxMSBAQAogIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAogICNlbmRpZgogICAgICAgIGYuUGF0aCA9IGYyLT5QYXRoOwotQEAgLTE5MCwxNCArMTkwLDE0IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQotIAkgLy8gd2UgaGF2ZSBpdCBhbHJlYWR5LCBzdG9yZSB0aGUgbmV3IGhhc2ggYW5kIGJlIGRvbmUKLSAJIGlmIChmaWxlICE9IExpc3QuZW5kKCkpCi0gCSB7Ci0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKLSAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0gCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAjZW5kaWYKLSAJICAgIGlmIChjaGVja3N1bUZpZWxkID09ICJGaWxlcyIpCi0gCSAgICAgICBmaWxlLT5NRDVIYXNoID0gaGFzaDsKLS0jaWYgX19HTlVDX18gPj0gNAotKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCi0gCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0gI2VuZGlmCi0gCSAgICAvLyBhbiBlcnJvciBoZXJlIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgdHdvIGRpZmZlcmVudCBoYXNoZXMgZm9yIHRoZSBzYW1lIGZpbGUKLUBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCi0gCSBGLkZpbGVTaXplID0gc3RydG91bGwoc2l6ZS5jX3N0cigpLCBOVUxMLCAxMCk7Ci0gCSBGLkhhc2hlcy5wdXNoX2JhY2soaGFzaFN0cmluZyk7Ci0gCi0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKLSAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0gCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLUBAIC0yMjAsNyArMjIwLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCi0gCSBGLlNpemUgPSBGLkZpbGVTaXplOwotIAkgaWYgKGNoZWNrc3VtRmllbGQgPT0gIkZpbGVzIikKLSAJICAgIEYuTUQ1SGFzaCA9IGhhc2g7Ci0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotICNlbmRpZgotIAogZGlmZiAtLWdpdCBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYwotaW5kZXggMzE3NWVlNy4uMzQwZTc5NiAxMDA2NDQKK2luZGV4IDUzZDdlNjAuLjE0ODQ4MjggMTAwNjQ0CiAtLS0gYS9hcHQtcGtnL3NyY3JlY29yZHMuY2MKICsrKyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYwotQEAgLTE2MCw3ICsxNjAsNyBAQCBib29sIHBrZ1NyY1JlY29yZHM6OlBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmRjIpLyp7e3sqLworQEAgLTE1Nyw3ICsxNTcsNyBAQCBib29sIHBrZ1NyY1JlY29yZHM6OlBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmRjIpLyp7e3sqLwogICAgIGZvciAoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZT46OmNvbnN0X2l0ZXJhdG9yIGYgPSBGLmJlZ2luKCk7IGYgIT0gRi5lbmQoKTsgKytmKQogICAgIHsKICAgICAgICBwa2dTcmNSZWNvcmRzOjpGaWxlMiBmMjsKQEAgLTEwMyw3ICs2MCw3IEBACiAgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAogIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCiAgI2VuZGlmCi1AQCAtMTY4LDcgKzE2OCw3IEBAIGJvb2wgcGtnU3JjUmVjb3Jkczo6UGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZGMikvKnt7eyovCitAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgcGtnU3JjUmVjb3Jkczo6UGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZGMikvKnt7eyovCiAgICAgICAgZjIuU2l6ZSA9IGYtPlNpemU7CiAgICAgICAgZjIuSGFzaGVzLnB1c2hfYmFjayhIYXNoU3RyaW5nKCJNRDVTdW0iLCBmLT5NRDVIYXNoKSk7CiAgICAgICAgZjIuRmlsZVNpemUgPSBmLT5TaXplOwpAQCAtMTEyLDQ5ICs2OSw2IEBACiAgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCiAgI2VuZGlmCiAgICAgICAgZjIuUGF0aCA9IGYtPlBhdGg7Ci1kaWZmIC0tZ2l0IGEvYXB0LXBrZy9zcmNyZWNvcmRzLmggYi9hcHQtcGtnL3NyY3JlY29yZHMuaAotaW5kZXggZGRlMjJiZC4uOTFmODA2MSAxMDA2NDQKLS0tLSBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5oCi0rKysgYi9hcHQtcGtnL3NyY3JlY29yZHMuaAotQEAgLTMwLDcgKzMwLDcgQEAgY2xhc3MgcGtnU3JjUmVjb3JkcwotIHsKLSAgICBwdWJsaWM6Ci0gCi0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkvLyBlbnN1cmUgdGhhdCBjb24tICYgZGUtc3RydWN0b3IgZG9uJ3QgdHJpZ2dlciB0aGlzIHdhcm5pbmcKLSAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0gCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLUBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIHBrZ1NyY1JlY29yZHMKLSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgRmlsZVNpemU7Ci0gICAgICAgSGFzaFN0cmluZ0xpc3QgSGFzaGVzOwotICAgIH07Ci0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotICNlbmRpZgotIAotZGlmZiAtLWdpdCBhL2FwdC1wa2cvdmVuZG9ybGlzdC5jYyBiL2FwdC1wa2cvdmVuZG9ybGlzdC5jYwotaW5kZXggZmIzM2ZmMS4uYmExZDNjMyAxMDA2NDQKLS0tLSBhL2FwdC1wa2cvdmVuZG9ybGlzdC5jYwotKysrIGIvYXB0LXBrZy92ZW5kb3JsaXN0LmNjCi1AQCAtMTEsNyArMTEsNyBAQAotIAotICNpbmNsdWRlIDxhcHRpMThuLmg+Ci0gCi0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICNlbmRpZgotQEAgLTE2Myw2ICsxNjMsNiBAQCBjb25zdCBWZW5kb3IqIHBrZ1ZlbmRvckxpc3Q6OkZpbmRWZW5kb3IoY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiBHUEdWT3V0cHV0KQkvKgotIH0KLSAJCQkJCQkJCQkvKn19fSovCi0gCi0tI2lmIF9fR05VQ19fID49IDQKLSsjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQotIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotICNlbmRpZgogLS0gCi0xLjkuMQorMi4xLjQKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtcmVtb3ZlLVdzdWdnZXN0LWF0dHJpYnV0ZS1mcm9tLUNGTEFHUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2gKaW5kZXggN2M0MmZmMC4uNDc4NzBlMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtcmVtb3ZlLVdzdWdnZXN0LWF0dHJpYnV0ZS1mcm9tLUNGTEFHUy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSAyYmZmN2VlMDZhNGY5NmU3ZDMyNjk5MWQ2MWZiODZmOGFhNjUxZDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA5ZmRmNTBkNjNkZjA4ZWU2NWU3ZDhlNjJjMzVmMTlhYzQ4NDFiY2E5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgogRGF0ZTogV2VkLCAyNyBNYXkgMjAxNSAwOTo0ODo0NSArMDgwMAogU3ViamVjdDogW1BBVENIXSByZW1vdmUgV3N1Z2dlc3QtYXR0cmlidXRlIGZyb20gQ1hYRkxBR1MKQEAgLTE1LDI5ICsxNSwyOSBAQAogIDIgZmlsZXMgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbiBiL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgotaW5kZXggYjBhOGQ5ZC4uOTFlZDAxMSAxMDA2NDQKK2luZGV4IDk2MjA3MjIuLmMzNDRkMDEgMTAwNjQ0CiAtLS0gYS9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KICsrKyBiL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgotQEAgLTExLDcgKzExLDYgQEAgQ1BQRkxBR1MrPSBAQ1BQRkxBR1NAIEBERUZTQCAtRF9SRUVOVFJBTlQgLURfRk9SVElGWV9TT1VSQ0U9MgotIENYWCA9IEBDWFhACi0gQ1hYRkxBR1MrPSBAQ1hYRkxBR1NAIC1XYWxsIC1XZXh0cmEKK0BAIC0xNCw3ICsxNCw2IEBAIENYWEZMQUdTKz0gQENYWEZMQUdTQCAtV2FsbCAtV2V4dHJhCiAgQ1hYRkxBR1MrPSAtV2Nhc3QtYWxpZ24gLVdsb2dpY2FsLW9wIC1XcmVkdW5kYW50LWRlY2xzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zCi0tQ1hYRkxBR1MrPSAtV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUgLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCAtV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCisgQ1hYRkxBR1MrPSAtV2N0b3ItZHRvci1wcml2YWN5IC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XaW5pdC1zZWxmIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgLVdub2V4Y2VwdCAtV3NpZ24tcHJvbW8gLVd1bmRlZgorICMgc3VnZ2VzdHMgbWV0aG9kcyB3aGljaCBhbHJlYWR5IGhhdmUgc3VjaCBhbiBhdHRyaWJ1dGUKKy0jQ1hYRkxBR1MrPSAtV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUgLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCAtV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCisgIyBzYW5pdGl6ZSBvcHRpb25zIHRvIGJlIGVuYWJsZWQgZm9yIHRlc3RpbmcKKyAjQ1hYRkxBR1MrPSAtZnNhbml0aXplPWFkZHJlc3MgLWZzYW5pdGl6ZT11bmRlZmluZWQgLWZuby1zYW5pdGl6ZT12cHRyCiAgIyBhIGJpdCB0b28gcGVkYW50aWMgdG8gYmUgcnVuIGJ5IGRlZmF1bHQKLSAjQ1hYRkxBR1MrPSAtV3BlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1Xbm8tdmxhIC1Xbm8tdmFyaWFkaWMtbWFjcm9zCi0gTlVNX1BST0NTID0gQE5VTV9QUk9DU0AKIGRpZmYgLS1naXQgYS90ZXN0L2xpYmFwdC9tYWtlZmlsZSBiL3Rlc3QvbGliYXB0L21ha2VmaWxlCi1pbmRleCA3ZjIzYWNlLi5lODA1ZjEzIDEwMDY0NAoraW5kZXggNWZmOWNmNi4uYzViNTE5MCAxMDA2NDQKIC0tLSBhL3Rlc3QvbGliYXB0L21ha2VmaWxlCiArKysgYi90ZXN0L2xpYmFwdC9tYWtlZmlsZQotQEAgLTM5LDcgKzM5LDYgQEAgQ1hYRkxBR1MgKz0gLXB0aHJlYWQKK0BAIC00MCw3ICs0MCw2IEBAIENYWEZMQUdTICs9IC1wdGhyZWFkCiAgIyBkaXNhYmxlIHNvbWUgZmxhZ3MgZm9yIGd0ZXN0IGFnYWluCiAgQ1hYRkxBR1MrPSAtV25vLW1pc3NpbmctZGVjbGFyYXRpb25zCiAgQ1hYRkxBR1MrPSAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzCiAtQ1hYRkxBR1MrPSAtV25vLXN1Z2dlc3QtYXR0cmlidXRlPXB1cmUgLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCAtV25vLXN1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCisgQ1hYRkxBR1MrPSAtV25vLXVuZGVmCiAgCiAgIyBBbGwgR29vZ2xlIFRlc3QgaGVhZGVycy4gIFVzdWFsbHkgeW91IHNob3VsZG4ndCBjaGFuZ2UgdGhpcyBkZWZpbml0aW9uLgotIEdURVNUX0hFQURFUlMgPSAvdXNyL2luY2x1ZGUvZ3Rlc3QvKi5oIFwKIC0tIAotMS45LjEKKzIuMS40CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS10ZXN0LnBhdGNoCmluZGV4IDY3Njc5NWQuLjA1MzI2NzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaApAQCAtMSwzNSArMSw1MSBAQAotW1BBVENIXSBkaXNhYmxlIHRlc3QKK0Zyb20gNjdiYzc5NDhlMGE3MjFjNzVkNjM2OTMxYWJjMTA1ZGE1ZGNiMDc2MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMjYgTWF5IDIwMTYgMTU6MzI6MTEgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gW1BBVENIXSBkaXNhYmxlIHRlc3QKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKIAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQogCiB0ZXN0IG5lZWRzIGd0ZXN0IHBhY2thZ2UsIHNvIG5vdCBidWlsZCB0aGUgdGVzdCBkaXIKIAogU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CiAtLS0KLSBNYWtlZmlsZSAgICAgfCA3ICsrKy0tLS0KLSBjb25maWd1cmUuYWMgfCA2IC0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKyBNYWtlZmlsZSAgICAgfCA5ICsrKy0tLS0tLQorIGNvbmZpZ3VyZS5hYyB8IDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKLWluZGV4IDVmNWZiMjcuLjUwNzBlOTYgMTAwNjQ0CitpbmRleCA3NjgwZjA4Li42OTUyN2E1IDEwMDY0NAogLS0tIGEvTWFrZWZpbGUKICsrKyBiL01ha2VmaWxlCiBAQCAtOSw4ICs5LDggQEAgZW5kaWYKICAuUEhPTlk6IGRlZmF1bHQKICBkZWZhdWx0OiBzdGFydHVwIGFsbAogIAotLS5QSE9OWTogaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBhbGwgYmluYXJ5IHByb2dyYW0gZG9jIHRlc3QgdXBkYXRlLXBvCistLlBIT05ZOiBmYXN0IGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYWxsIGJpbmFyeSBwcm9ncmFtIGRvYyB0ZXN0IHVwZGF0ZS1wbwogLWFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHRlc3QgdXBkYXRlLXBvIHN0YXJ0dXAgZGlyczoKLSsuUEhPTlk6IGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYWxsIGJpbmFyeSBwcm9ncmFtIGRvYyB1cGRhdGUtcG8KKysuUEhPTlk6IGZhc3QgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBhbGwgYmluYXJ5IHByb2dyYW0gZG9jIHVwZGF0ZS1wbwogK2FsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHVwZGF0ZS1wbyBzdGFydHVwIGRpcnM6CiAgCSQoTUFLRSkgLUMgdmVuZG9yICRACiAgCSQoTUFLRSkgLUMgYXB0LXBrZyAkQAogIAkkKE1BS0UpIC1DIGFwdC1pbnN0ICRACi1AQCAtMjEsOSArMjEsOCBAQCBhbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZAorQEAgLTIxLDggKzIxLDYgQEAgYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdGVzdCB1cGQKICAJJChNQUtFKSAtQyBkc2VsZWN0ICRACi0gIwkkKE1BS0UpIC1DIGRvYyAkQAorIAkkKE1BS0UpIC1DIGRvYyAkQAogIAkkKE1BS0UpIC1DIHBvICRACi0tCSQoTUFLRSkgLUMgdGVzdCAkQAorLQkjIEZJWE1FOiAtQyB0ZXN0IGhhcyBpc3N1ZSBzd2l0aCBwYXJhbGxlbCBidWlsZHMsIGludmVzdGlnYXRlIQorLQktJChNQUtFKSAtQyB0ZXN0ICRACisgCisgZmFzdDoKKyAJJChNQUtFKSAtQyB2ZW5kb3IgYWxsCitAQCAtMzIsOSArMzAsOCBAQCBmYXN0OgorIAkkKE1BS0UpIC1DIG1ldGhvZHMgYWxsCisgCSQoTUFLRSkgLUMgY21kbGluZSBhbGwKKyAJJChNQUtFKSAtQyBmdHBhcmNoaXZlIGFsbAorLQkkKE1BS0UpIC1DIHRlc3QgYWxsCiAgCiAtYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdGVzdCB1cGRhdGUtcG86IHN0YXJ0dXAgZGlycwogK2FsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHVwZGF0ZS1wbzogc3RhcnR1cCBkaXJzCkBAIC0zNywyMiArNTMsMjMgQEAKICBkaXJzOiBzdGFydHVwCiAgCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA1NjYzYWFmLi5iMGY5NTY0IDEwMDY0NAoraW5kZXggMWYwNWRhNS4uZTQ3ZjQ1OSAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCi1AQCAtODksMTIgKzg5LDYgQEAgQUNfQ0hFQ0tfTElCKGN1cmwsIGN1cmxfZWFzeV9pbml0LAorQEAgLTkwLDEzICs5MCw2IEBAIEFDX0NIRUNLX0xJQihjdXJsLCBjdXJsX2Vhc3lfaW5pdCwKICAgICAgIEFDX01TR19FUlJPUihbZmFpbGVkOiBJIG5lZWQgQ1VSTCBkdWUgaHR0cHMgc3VwcG9ydF0pLAogICkKICAKIC1BQ19MQU5HX1BVU0goW0MrK10pCiAtQUNfQ0hFQ0tfSEVBREVSKGd0ZXN0L2d0ZXN0LmgsLAotLSAgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IEkgbmVlZCBndGVzdCB0byBidWlsZCB0ZXN0c10pLAorLSAgICAgQUNfTVNHX1dBUk4oW2ZhaWxlZDogSSBuZWVkIGd0ZXN0IChwYWNrYWdlZCBhcyBsaWJndGVzdC1kZXYpIGZvciB1bml0IHRlc3RpbmddKSwKIC0pCiAtQUNfTEFOR19QT1AoW0MrK10pCiAtCi0gCistCiAgQUNfU1VCU1QoQkRCTElCKQogIAorIEhBVkVfWkxJQj1ubwogLS0gCi0xLjkuMQorMi4xLjQKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMC4xMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMC4xMC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWMwZDU2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLURFUEVORFMgPSAiY3VybCBkYiB6bGliIgotUkRFUEVORFNfJHtQTn0gPSAiZHBrZyBiYXNoIGRlYmlhbnV0aWxzIgotcmVxdWlyZSBhcHQuaW5jCi0KLXJlcXVpcmUgYXB0LXBhY2thZ2UuaW5jCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJsem1hIgotUEFDS0FHRUNPTkZJR1tsem1hXSA9ICJhY19jdl9saWJfbHptYV9sem1hX2Vhc3lfZW5jb2Rlcj15ZXMsYWNfY3ZfbGliX2x6bWFfbHptYV9lYXN5X2VuY29kZXI9bm8seHoiCi1QQUNLQUdFQ09ORklHW2J6Ml0gPSAiYWNfY3ZfbGliX2J6Ml9CWjJfYnpvcGVuPXllcyxhY19jdl9saWJfYnoyX0JaMl9iem9wZW49bm8sYnppcDIiCi0KLUZJTEVTXyR7UE59ICs9ICIke2JpbmRpcn0vYXB0LWtleSIKLWFwdC1tYW5wYWdlcyArPSAiZG9jL2FwdC1rZXkuOCIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgI1dyaXRlIHRoZSBjb3JyZWN0IGFwdC1hcmNoaXRlY3R1cmUgdG8gYXB0LmNvbmYKLSAgICBBUFRfQ09ORj0ke0R9L2V0Yy9hcHQvYXB0LmNvbmYKLSAgICBlY2hvICdBUFQ6OkFyY2hpdGVjdHVyZSAiJHtEUEtHX0FSQ0h9IjsnID4gJHtBUFRfQ09ORn0KLSAgICBvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXByaXZhdGUgJHtEfSR7bGliZGlyfS8KLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjIuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHRfMS4yLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMGJjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHRfMS4yLjEyLmJiCkBAIC0wLDAgKzEsMjAgQEAKK0RFUEVORFMgPSAiY3VybCBkYiB6bGliIgorUkRFUEVORFNfJHtQTn0gPSAiZHBrZyBiYXNoIGRlYmlhbnV0aWxzIgorcmVxdWlyZSBhcHQuaW5jCisKK3JlcXVpcmUgYXB0LXBhY2thZ2UuaW5jCisKK1BBQ0tBR0VDT05GSUcgPz89ICJsem1hIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICJhY19jdl9saWJfbHptYV9sem1hX2Vhc3lfZW5jb2Rlcj15ZXMsYWNfY3ZfbGliX2x6bWFfbHptYV9lYXN5X2VuY29kZXI9bm8seHoiCitQQUNLQUdFQ09ORklHW2J6Ml0gPSAiYWNfY3ZfbGliX2J6Ml9CWjJfYnpvcGVuPXllcyxhY19jdl9saWJfYnoyX0JaMl9iem9wZW49bm8sYnppcDIiCitQQUNLQUdFQ09ORklHW2x6NF0gPSAiYWNfY3ZfbGliX2x6NF9MWjRGX2NyZWF0ZUNvbXByZXNzaW9uQ29udGV4dD15ZXMsYWNfY3ZfbGliX2x6NF9MWjRGX2NyZWF0ZUNvbXByZXNzaW9uQ29udGV4dD1ubyxsejQiCisKK0ZJTEVTXyR7UE59ICs9ICIke2JpbmRpcn0vYXB0LWtleSIKK2FwdC1tYW5wYWdlcyArPSAiZG9jL2FwdC1rZXkuOCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgI1dyaXRlIHRoZSBjb3JyZWN0IGFwdC1hcmNoaXRlY3R1cmUgdG8gYXB0LmNvbmYKKyAgICBBUFRfQ09ORj0ke0R9L2V0Yy9hcHQvYXB0LmNvbmYKKyAgICBlY2hvICdBUFQ6OkFyY2hpdGVjdHVyZSAiJHtEUEtHX0FSQ0h9IjsnID4gJHtBUFRfQ09ORn0KKyAgICBvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXByaXZhdGUgJHtEfSR7bGliZGlyfS8KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9uby1jdXJsLnBhdGNoCmluZGV4IDMwMjM4ZmEuLjA4Mzg1NTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaApAQCAtMSwxMyArMSwyMyBAQAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorRnJvbSA1ZDYxYWM4MjJmZDlhMzg3MWNkNTA4OTM4OWMyMTA2MDYyMzJlY2RjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyNiBNYXkgMjAxNiAxNTozNDo0NSAtMDUwMAorU3ViamVjdDogW1BBVENIXSBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CiAKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgogLS0tCi0gY29uZmlndXJlLmluICAgICB8ICAgIDYgLS0tLS0tCi0gbWV0aG9kcy9tYWtlZmlsZSB8ICAgIDcgLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTMgZGVsZXRpb25zKC0pCisgY29uZmlndXJlLmFjICAgICB8IDcgLS0tLS0tLQorIG1ldGhvZHMvbWFrZWZpbGUgfCA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQogCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNDdmNDU5Li5jZDI0MjY0IDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC04NiwxMiArODYsNiBAQCBBQ19DSEVDS19IRUFERVIoZGIuaCwKK0BAIC04MywxMyArODMsNiBAQCBBQ19DSEVDS19IRUFERVIoZGIuaCwKICAKICBMSUJTPSIkc2F2ZUxJQlMiCiAgCkBAIC0xNyw5ICsyNywxMiBAQAogLSAgICAgICAgY3VybF9vaz1ubyldLAogLSAgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IEkgbmVlZCBDVVJMIGR1ZSBodHRwcyBzdXBwb3J0XSksCiAtKQotIAorLQogIEFDX1NVQlNUKEJEQkxJQikKICAKKyBIQVZFX1pMSUI9bm8KK2RpZmYgLS1naXQgYS9tZXRob2RzL21ha2VmaWxlIGIvbWV0aG9kcy9tYWtlZmlsZQoraW5kZXggMzI3NGU5Mi4uMjU1MDg2YiAxMDA2NDQKIC0tLSBhL21ldGhvZHMvbWFrZWZpbGUKICsrKyBiL21ldGhvZHMvbWFrZWZpbGUKIEBAIC01MSwxMyArNTEsNiBAQCBMSUJfTUFLRVMgPSBhcHQtcGtnL21ha2VmaWxlCkBAIC0yOCwxMSArNDEsMTQgQEAKICAKIC0jIFRoZSBodHRwcyBtZXRob2QKIC1QUk9HUkFNPWh0dHBzCi0tU0xJQlMgPSAtbGFwdC1wa2cgLWxjdXJsICQoSU5UTExJQlMpCistU0xJQlMgPSAtbGFwdC1wa2cgLWxjdXJsICQoSU5UTExJQlMpIC1scmVzb2x2CiAtTElCX01BS0VTID0gYXB0LXBrZy9tYWtlZmlsZQogLVNPVVJDRSA9IGh0dHBzLmNjIHNlcnZlci5jYwogLWluY2x1ZGUgJChQUk9HUkFNX0gpCiAtCiAgIyBUaGUgZnRwIG1ldGhvZAogIFBST0dSQU09ZnRwCi0gU0xJQlMgPSAtbGFwdC1wa2cgJChTT0NLRVRMSUJTKSAkKElOVExMSUJTKQorIFNMSUJTID0gLWxhcHQtcGtnICQoU09DS0VUTElCUykgJChJTlRMTElCUykgLWxyZXNvbHYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzMjZmMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGF1dG9jb25mLTIuNjMub3JpZy9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTA4LTI4IDAzOjA4OjEwLjAwMDAwMDAwMCArMDEwMAotKysrIGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzozODo0MC4wMDAwMDAwMDAgKzAwMDAKLUBAIC0xOTAsNiArMTkwLDcgQEAKLSAgICRhdXRvY29uZiAgIC49IGpvaW4gKCcgLS1wcmVwZW5kLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAcHJlcGVuZF9pbmNsdWRlKTsKLSAgICRhdXRvaGVhZGVyIC49IGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOwotICAgJGF1dG9oZWFkZXIgLj0gam9pbiAoJyAtLXByZXBlbmQtaW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBwcmVwZW5kX2luY2x1ZGUpOwotKyAgJGFjbG9jYWwgICAgLj0gam9pbiAoJyAtSSAnLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBpbmNsdWRlKTsKLSAKLSAgICMgLS1pbnN0YWxsIGFuZCAtLXN5bWxpbms7Ci0gICBpZiAoJGluc3RhbGwpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIKaW5kZXggYWRiNmFkNy4uYWExODc3YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZl8yLjY5LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmZfMi42OS5iYgpAQCAtNSw4ICs1LDcgQEAKIExJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKIAkJICAgIGZpbGU6Ly9DT1BZSU5HdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotU1JDX1VSSSArPSAiZmlsZTovL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaCBcCi0JICAgIGZpbGU6Ly9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoIFwKIAkgICAgZmlsZTovL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaCBcCiAJICAgIGZpbGU6Ly9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaCBcCiAgICAgICAgICAgICBmaWxlOi8vY29uZmlnX3NpdGUucGF0Y2ggXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4tbmF0aXZlXzUuMTguMTAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ0MjdjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4tbmF0aXZlXzUuMTguMTAuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJBdXRvbWF0ZWQgdGV4dCBhbmQgcHJvZ3JhbSBnZW5lcmF0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJBdXRvR2VuIGlzIGEgdG9vbCBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gYW5kXAorIG1haW50ZW5hbmNlIG9mIHByb2dyYW1zIHRoYXQgY29udGFpbiBsYXJnZSBhbW91bnRzIG9mIHJlcGV0aXRpb3VzIHRleHQuXAorIEl0IGlzIGVzcGVjaWFsbHkgdmFsdWFibGUgaW4gcHJvZ3JhbXMgdGhhdCBoYXZlIHNldmVyYWwgYmxvY2tzIG9mIHRleHRcCisgdGhhdCBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvZ2VuLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hdXRvZ2VuL3JlbCR7UFZ9L2F1dG9nZW4tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2luY3JlYXNlLXRpbWVvdXQtbGltaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2NyaXB0LWVyci13aGVuLXByb2Nlc3NpbmctbGliZ3VpbGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmQxYjUyMjZlMTkyOWQwNjgwMDExZGY2MzEyODk1NzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGI4NjgxZDk3MjRjNDgxZDNiNzI2YjVhOWU4MWQzZDA5ZGM3ZjMwN2QxYTgwMWM3NmQwYTMwZDhmODQzZDIwYSIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvYXV0b2dlbi8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJyZWwoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorCitERVBFTkRTID0gImd1aWxlLW5hdGl2ZSBsaWJ0b29sLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBuYXRpdmUgcGtnY29uZmlnCisKKyMgYXV0b2dlbi1uYXRpdmUgbGlua3MgYWdhaW5zdCBsaWJndWlsZSB3aGljaCBtYXkgaGF2ZSBiZWVuIHJlbG9jYXRlZCB3aXRoIHNzdGF0ZQorIyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZW5zdXJlIHRoZXJlIGlzbid0IGEgcmVsb2NhdGlvbiBpc3N1ZQorZXhwb3J0IEdVSUxFX0xPQURfUEFUSCA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCIKK2V4cG9ydCBHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEggPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9hdXRvZ2VuIFwKKwkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKKwkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4tbmF0aXZlXzUuMTguNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3YjgyNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotU1VNTUFSWSA9ICJBdXRvbWF0ZWQgdGV4dCBhbmQgcHJvZ3JhbSBnZW5lcmF0aW9uIHRvb2wiCi1ERVNDUklQVElPTiA9ICJBdXRvR2VuIGlzIGEgdG9vbCBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gYW5kXAotIG1haW50ZW5hbmNlIG9mIHByb2dyYW1zIHRoYXQgY29udGFpbiBsYXJnZSBhbW91bnRzIG9mIHJlcGV0aXRpb3VzIHRleHQuXAotIEl0IGlzIGVzcGVjaWFsbHkgdmFsdWFibGUgaW4gcHJvZ3JhbXMgdGhhdCBoYXZlIHNldmVyYWwgYmxvY2tzIG9mIHRleHRcCi0gdGhhdCBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvZ2VuLyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hdXRvZ2VuL3JlbCR7UFZ9L2F1dG9nZW4tJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2luY3JlYXNlLXRpbWVvdXQtbGltaXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImZkZWU0MDNlNTI0YzBhZjNkZWQ2YjNiZWNiMzY1NjcxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmYzdmMTJhNWVjYjNiMWU4YmQ0MzY0YWE5MDZiODM3Y2ZmMDFmODBlZGI3ZDJmYjM4ZWQ4YjlkZmJjZDMyNzEiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vZnRwLmdudS5vcmcvZ251L2F1dG9nZW4vIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAicmVsKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKLQotREVQRU5EUyA9ICJndWlsZS1uYXRpdmUgbGlidG9vbC1uYXRpdmUgbGlieG1sMi1uYXRpdmUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gbmF0aXZlIHBrZ2NvbmZpZwotCi0jIGF1dG9nZW4tbmF0aXZlIGxpbmtzIGFnYWluc3QgbGliZ3VpbGUgd2hpY2ggbWF5IGhhdmUgYmVlbiByZWxvY2F0ZWQgd2l0aCBzc3RhdGUKLSMgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGVuc3VyZSB0aGVyZSBpc24ndCBhIHJlbG9jYXRpb24gaXNzdWUKLWV4cG9ydCBHVUlMRV9MT0FEX1BBVEggPSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAiCi1leHBvcnQgR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlIgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vYXV0b2dlbiBcCi0JCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCi0JCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vZml4LXNjcmlwdC1lcnItd2hlbi1wcm9jZXNzaW5nLWxpYmd1aWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vZml4LXNjcmlwdC1lcnItd2hlbi1wcm9jZXNzaW5nLWxpYmd1aWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NGEzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9maXgtc2NyaXB0LWVyci13aGVuLXByb2Nlc3NpbmctbGliZ3VpbGUucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorYXV0b2dlbi1uYXRpdmU6IGZpeCBzY3JpcHQgZXJyIHdoZW4gcHJvY2Vzc2luZyBsaWJndWlsZQorCitkb19jb25maWd1cmUgZm9yIGF1dG9nZW4gd2lsbCBmYWlsIGlmIHByb2plY3QgZGlyZWN0b3J5IHBhdGgKK2NvbnRhaW5zICctSScgY2hhcmFjdGVyLCB3aGljaCBpcyBjYXVzZWQgYnkgdGhlIHVuc3VpdGFibGUgc2VkCitzY3JpcHQgd2hlbiBwcm9jZXNzaW5nIGxpYmd1aWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhlbmJvIEdhbyA8emhlbmJvLmdhb0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlnL2FnX21hY3Jvcy5tNCBiL2NvbmZpZy9hZ19tYWNyb3MubTQKK2luZGV4IDU4MTg2YjYuLjU4ZWQyYWQgMTAwNjQ0CistLS0gYS9jb25maWcvYWdfbWFjcm9zLm00CisrKysgYi9jb25maWcvYWdfbWFjcm9zLm00CitAQCAtMzIsNyArMzIsNyBAQCBBQ19ERUZVTihbSU5WT0tFX0FHX01BQ1JPU19MQVNUXSxbCisgICBHVUlMRV9GTEFHUworICAgW2FnX2d2PWBnZGlyPVxgcGtnLWNvbmZpZyAtLWNmbGFncy1vbmx5LUkgXAorICAgZ3VpbGUtJHtHVUlMRV9FRkZFQ1RJVkVfVkVSU0lPTn0gfCBcCistICBzZWQgJ3MvLUkgKi8vO3MvICotSS4qLyAvZydcYAorKyAgc2VkICdzLyAqLUkgKlwvLyBcLy9nJ1xgCisgICBmb3IgZCBpbiAkZ2RpcgorICAgZG8gIHRlc3QgLWYgIiRkL2xpYmd1aWxlL3ZlcnNpb24uaCIgJiYgZ2Rpcj0kZCAmJiBicmVhaworICAgZG9uZQorZGlmZiAtLWdpdCBhL2NvbmZpZy9taXNjLmRlZiBiL2NvbmZpZy9taXNjLmRlZgoraW5kZXggNDkwZDM2MS4uNmUxODNlZiAxMDA2NDQKKy0tLSBhL2NvbmZpZy9taXNjLmRlZgorKysrIGIvY29uZmlnL21pc2MuZGVmCitAQCAtMzQyLDcgKzM0Miw3IEBAIGRvLWFsd2F5cyA9IDw8LSBfRU5EX0FMV0FZU18KKyAJR1VJTEVfRkxBR1MKKyAJW2FnX2d2PWBnZGlyPVxgcGtnLWNvbmZpZyAtLWNmbGFncy1vbmx5LUkgXAorIAkJCWd1aWxlLSR7R1VJTEVfRUZGRUNUSVZFX1ZFUlNJT059IHwgXAorLQkJCXNlZCAncy8tSSAqLy87cy8gKi1JLiovIC9nJ1xgCisrCQkJc2VkICdzLyAqLUkgKlwvLyBcLy9nJ1xgCisgCQl0ZXN0IC16ICIkZ2RpciIgJiYgZ2Rpcj0vdXNyL2luY2x1ZGUKKyAJCWZvciBkIGluICRnZGlyCisgCQlkbyAgdGVzdCAtZiAiJGQvbGliZ3VpbGUvdmVyc2lvbi5oIiAmJiBnZGlyPSRkICYmIGJyZWFrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vcmVkaXJlY3Qtb3V0cHV0LWRpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1YTcxYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotW1BBVENIXSByZWRpcmVjdCB0aGUgZGlyIG9mIG1rbGlic3JjLWxvZy50eAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotcmVkaXJlY3QgbWtsaWJzcmMtbG9nLnR4IHRvIGJ1aWxkZGlyLCBub3QgL3RtcDsgb3RoZXJ3aXNlIG1rbGlic3JjLWxvZy50eAotbWF5YmUgdW5hYmxlIHRvIGJlIHdyaXR0ZW4gaWYgb3RoZXIgdXNlcnMgaXMgYnVpbGRpbmcgYXV0b2dlbiBhdCB0aGUgc2FtZSB0aW1lLgotCi1TaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBwa2cvbGlib3B0cy9ta2xpYnNyYy5zaCB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3BrZy9saWJvcHRzL21rbGlic3JjLnNoIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKLWluZGV4IDQxNmI0MDIuLmQ2MTJmYmMgMTAwNjQ0Ci0tLS0gYS9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaAotKysrIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKLUBAIC0xOSw3ICsxOSw3IEBACi0gIyMgIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotIAotIHNldCAtZXgKLS1leGVjIDI+IC90bXAvbWtsaWJzcmMtbG9nLnR4Ci0rZXhlYyAyPiAkdG9wX2J1aWxkZGlyL21rbGlic3JjLWxvZy50eAotIAotIHRvcF9idWlsZGRpcj1gY2QgJHRvcF9idWlsZGRpciA7IHB3ZGAKLSB0b3Bfc3JjZGlyPWBjZCAkdG9wX3NyY2RpciA7IHB3ZGAKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoCmluZGV4IDQ3NTQxYmQuLjJhNDhiMTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHl0aG9uLWxpYmRpci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5dGhvbi1saWJkaXIucGF0Y2gKQEAgLTEsMyArMSw4IEBACitGcm9tIDQ3MmEzZDM2Yzk3ZWY3NTM1ZjA1ZDZjMTg1ZWRjYmMyMmIwMDc0YzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZTogVGh1LCAxMSBBdWcgMjAxMSAwMToyNjozMyAtMDUwMAorU3ViamVjdDogW1BBVENIIDEvNF0gYXV0b21ha2U6IFVwZGF0ZSBmb3IgcHl0aG9uLm00IHRvIHJlc3BlY3QgbGliZGlyCisKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCiAKIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CkBAIC01LDExICsxMCwxNyBAQAogVXBkYXRlZCBmb3IgYXV0b21ha2UtMS4xMi42CiAKIFNpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KIAotZGlmZiAtTnVyZCBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00IGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQKLS0tLSBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00CTIwMTItMTItMTMgMjI6MDI6MjUuMDAwMDAwMDAwICswMjAwCi0rKysgYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNAkyMDEyLTEyLTI3IDE3OjQwOjI2LjU1ODE2NDY2MCArMDIwMAotQEAgLTkxLDEyICs5MSwxMyBAQAorLS0tCisgbTQvcHl0aG9uLm00IHwgMjcgKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tNC9weXRob24ubTQgYi9tNC9weXRob24ubTQKK2luZGV4IDViMmM2OTUuLmVkMTkyNjEgMTAwNjQ0CistLS0gYS9tNC9weXRob24ubTQKKysrKyBiL200L3B5dGhvbi5tNAorQEAgLTkxLDEyICs5MSwxMyBAQCBBQ19ERUZVTihbQU1fUEFUSF9QWVRIT05dLAogICAgICBbYW1fY3ZfcHl0aG9uX3ZlcnNpb249YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnZlcnNpb25bWzozXV0pImBdKQogICAgQUNfU1VCU1QoW1BZVEhPTl9WRVJTSU9OXSwgWyRhbV9jdl9weXRob25fdmVyc2lvbl0pCiAgCkBAIC0yNSwxNyArMzYsMjMgQEAKICAgIEFDX1NVQlNUKFtQWVRIT05fRVhFQ19QUkVGSVhdLCBbJyR7ZXhlY19wcmVmaXh9J10pCiAgCiAgICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKLUBAIC0xNDgsNyArMTQ5LDggQEAKLSBlbHNlOgotICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMCwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKK0BAIC0xNDEsMTQgKzE0Miw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgIGVsc2UKKyAgICAgICAgYW1fcHlfcHJlZml4PSRwcmVmaXgKKyAgICAgIGZpCistICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWAkUFlUSE9OIC1jICIKKy0kYW1fcHl0aG9uX3NldHVwX3N5c2NvbmZpZworLWlmIGNhbl91c2Vfc3lzY29uZmlnOgorLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9wYXRoKCdwdXJlbGliJywgdmFycz17J2Jhc2UnOickYW1fcHlfcHJlZml4J30pCistZWxzZToKKy0gICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsIDAsIHByZWZpeD0nJGFtX3B5X3ByZWZpeCcpCiAtc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCi0rc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSIgfHwKLSsgICAgIGVjaG8gIiRQWVRIT05fTElCX1BSRUZJWC9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcyJgCisrICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWBlY2hvICIkUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAogICAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciBpbgogICAgICAgJGFtX3B5X3ByZWZpeCopCiAgICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKLUBAIC0xNTgsNyArMTYwLDcgQEAKK0BAIC0xNTgsNyArMTUyLDcgQEAgc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCiAgICAgICAgIGNhc2UgJGFtX3B5X3ByZWZpeCBpbgogICAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7CiAgICAgICAgICAgKikKQEAgLTQ0LDE3ICs2MSwyMyBAQAogIAkgIDs7CiAgICAgICAgIGVzYWMKICAgICAgICAgOzsKLUBAIC0xOTAsNyArMTkyLDggQEAKLSBlbHNlOgotICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMSwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKK0BAIC0xODMsMTQgKzE3Nyw3IEBAIHN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAorICAgICAgZWxzZQorICAgICAgICBhbV9weV9leGVjX3ByZWZpeD0kZXhlY19wcmVmaXgKKyAgICAgIGZpCistICAgICBhbV9jdl9weXRob25fcHlleGVjZGlyPWAkUFlUSE9OIC1jICIKKy0kYW1fcHl0aG9uX3NldHVwX3N5c2NvbmZpZworLWlmIGNhbl91c2Vfc3lzY29uZmlnOgorLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0bGliJywgdmFycz17J3BsYXRiYXNlJzonJGFtX3B5X3ByZWZpeCd9KQorLWVsc2U6CistICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKy0gICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigxLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQogLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAotK3N5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiIHx8Ci0rICAgICBlY2hvICIkUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAorKyAgICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj1gZWNobyAiJFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzImAKICAgICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIgaW4KICAgICAgICRhbV9weV9leGVjX3ByZWZpeCopCiAgICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9leGVjX3ByZWZpeCIgfCBzZWQgJ3N8LnwufGcnYAotQEAgLTIwMCw3ICsyMDMsNyBAQAorQEAgLTIwMCw3ICsxODcsNyBAQCBzeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpImAKICAgICAgICAgY2FzZSAkYW1fcHlfZXhlY19wcmVmaXggaW4KICAgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OwogICAgICAgICAgICopCkBAIC02MywzICs4Niw2IEBACiAgCSAgIDs7CiAgICAgICAgIGVzYWMKICAgICAgICAgOzsKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI2LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yNi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNTM1ZmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI2LmluYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLUxJQ19GSUxFU19DSEtTVU09IlwKLSAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCi0gICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NFwKLSAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAotICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2XAotICAgIGZpbGU6Ly9nYXMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCi0gICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCi0gICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAotICAgIGZpbGU6Ly9saWJpYmVydHkvQ09QWUlORy5MSUI7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3XAotICAgIGZpbGU6Ly9iZmQvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCi0gICAgIgotCi1kZWYgYmludXRpbHNfYnJhbmNoX3ZlcnNpb24oZCk6Ci0gICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKLSAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KLQotQklOVVBWID0gIiR7QGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpfSIKLQotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiYmludXRpbHMtKD9QPHB2ZXI+XGQrXyhcZF8/KSopIgotCi1TUkNSRVYgPSAiNzFmYTU2NmE5Y2YyNTk3YjYwYTU4YzFkN2MxNDhiYWI2Mzc0NTRhNiIKLVNSQ19VUkkgPSAiXAotICAgICBnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvYmludXRpbHMtZ2RiLmdpdDticmFuY2g9YmludXRpbHMtJHtCSU5VUFZ9LWJyYW5jaDtwcm90b2NvbD1naXQgXAotICAgICBmaWxlOi8vMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDA5LXdhcm4tZm9yLXVzZXMtb2Ytc3lzdGVtLWRpcmVjdG9yaWVzLXdoZW4tY3Jvc3MtbGlua2kucGF0Y2ggXAotICAgICBmaWxlOi8vMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMTItQWRkLXN1cHBvcnQtZm9yLU5ldGxvZ2ljLVhMUC5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDEzLUZpeC1HT1QtYWRkcmVzcy1jb21wdXRhdGlvbnMtaW4taW5pdGlhbC1QTFQtZW50cmllcy0ucGF0Y2ggXAotICAgICBmaWxlOi8vMDAxNC1Db3JyZWN0LW5pb3MyLV9ncC1hZGRyZXNzLWNvbXB1dGF0aW9uLnBhdGNoIFwKLSIKLVMgID0gIiR7V09SS0RJUn0vZ2l0IgotCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0gICAgICAgIHJtIC1yZiAke1N9L2dkYiAke1N9L2xpYmRlY251bWJlciAke1N9L3JlYWRsaW5lICR7U30vc2ltCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjcuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjE0MjBiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI3LmluYwpAQCAtMCwwICsxLDQ0IEBACitMSUNfRklMRVNfQ0hLU1VNPSJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzRcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNlwKKyAgICBmaWxlOi8vZ2FzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAorICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vbGliaWJlcnR5L0NPUFlJTkcuTElCO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljN1wKKyAgICBmaWxlOi8vYmZkL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgICIKKworZGVmIGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCisKK0JJTlVQViA9ICIke0BiaW51dGlsc19icmFuY2hfdmVyc2lvbihkKX0iCisKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gImJpbnV0aWxzLSg/UDxwdmVyPlxkK18oXGRfPykqKSIKKworU1JDUkVWID0gIjVmZTUzY2UzN2Y5ZDlkZDU0NGVjOGNjOWUyODYzYjY4ZTFhNjFmNGMiCitTUkNfVVJJID0gIlwKKyAgICAgZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2JpbnV0aWxzLWdkYi5naXQ7YnJhbmNoPWJpbnV0aWxzLSR7QklOVVBWfS1icmFuY2g7cHJvdG9jb2w9Z2l0IFwKKyAgICAgZmlsZTovLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwOS13YXJuLWZvci11c2VzLW9mLXN5c3RlbS1kaXJlY3Rvcmllcy13aGVuLWNyb3NzLWxpbmtpLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEyLUFkZC1zdXBwb3J0LWZvci1OZXRsb2dpYy1YTFAucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMy1maXgtdGhlLWluY29ycmVjdC1hc3NlbWJsaW5nLWZvci1wcGMtd2FpdC1tbmVtb25pYy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDE0LWxpYnRvb2wtcmVtb3ZlLXJwYXRoLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTUtYmludXRpbHMtbWlwcy1nYXMtcGljLXJlbGF4LWxpbmtvbmNlLmRpZmYgXAorICAgICBmaWxlOi8vMDAxNS1SZWZpbmUtLmNmaV9zZWN0aW9ucy1jaGVjay10by1vbmx5LWNvbnNpZGVyLWNvbXBhY3QtLnBhdGNoIFwKKyIKK1MgID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIHJtIC1yZiAke1N9L2dkYiAke1N9L2xpYmRlY251bWJlciAke1N9L3JlYWRsaW5lICR7U30vc2ltCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjcuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNi5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbl8yLjI3LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjcuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NfMi4yNi5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc18yLjI3LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ODEwNmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI2LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotcmVxdWlyZSBiaW51dGlscy1jcm9zc18ke1BWfS5iYgotCi1pbmhlcml0IGNyb3Nzc2RrCi0KLVBOID0gImJpbnV0aWxzLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9IgotCi1QUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayIKLQotU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCXNlZCAtaSAncyMvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliIyR7U0RLUEFUSE5BVElWRX0vbGliICR7U0RLUEFUSE5BVElWRX0vdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliIycgJHtTfS9sZC9jb25maWd1cmUudGd0Ci19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJjMDNkNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGJpbnV0aWxzLWNyb3NzXyR7UFZ9LmJiCisKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiYmludXRpbHMtY3Jvc3NzZGstJHtTREtfU1lTfSIKKworUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2giCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgJ3MjL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYiMke1NES1BBVEhOQVRJVkV9L2xpYiAke1NES1BBVEhOQVRJVkV9L3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYiMnICR7U30vbGQvY29uZmlndXJlLnRndAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYwppbmRleCA0M2UyYWEyLi43NWQxOTBmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYwpAQCAtNTcsNyArNTcsNiBAQAogCXN0cmluZ3MgXAogCXN0cmlwIFwKICIKLVVTRV9BTFRFUk5BVElWRVNfRk9SX3JlbW92ZV9taXBzID0gImxkLmdvbGQgZHdwIgogCiBweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgewogICAgIG1ha2VfYWx0cyA9IGQuZ2V0VmFyKCJVU0VfQUxURVJOQVRJVkVTX0ZPUiIsIFRydWUpIG9yICIiCkBAIC03Miw2ICs3MSw3IEBACiAKIEVYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAogICAgICAgICAgICAgICAgIC0tZGlzYWJsZS13ZXJyb3IgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXMgXAogICAgICAgICAgICAgICAgIC0tZW5hYmxlLXBsdWdpbnMgXAogICAgICAgICAgICAgICAgICR7TERHT0xEfSBcCiAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtdWx0aWFyY2gnLCAnLS1lbmFibGUtNjQtYml0LWJmZCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCmluZGV4IDkxZjkwMTcuLmNhZDcwNGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAzYzc1MzU1MzQyYTg1NjJjY2I2NWI4YmJiZTgxYTA0OTVmZWM1YzU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAyZGFlNmIxMzdjZTYwOWZkMDA4ZjIwNjMwMzRhNDQwM2Q5NTQ4NGM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo1ODo1NCArMDAwMAotU3ViamVjdDogW1BBVENIIDAxLzE0XSBHZW5lcmF0ZSByZWxvY2F0YWJsZSBTREtzCitTdWJqZWN0OiBbUEFUQ0ggMDEvMTNdIEdlbmVyYXRlIHJlbG9jYXRhYmxlIFNES3MKIAogVGhpcyBwYXRjaCB3aWxsIG1vZGlmeSB0aGUgRUxGIGxpbmtlciBzY3JpcHRzIHNvIHRoYXQgdGhlIGNyb3Nzc2RrCiBsaW5rZXIgd2lsbCBnZW5lcmF0ZSBiaW5hcmllcyB3aXRoIGEgNDA5NiBieXRlcyBQVF9JTlRFUlAgc2VjdGlvbi4gV2hlbiB0aGUgYmluYXJpZXMKQEAgLTE4LDcgKzE4LDcgQEAKICAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2xkL2dlbnNjcmlwdHMuc2ggYi9sZC9nZW5zY3JpcHRzLnNoCi1pbmRleCBhODRkMjMzLi5kMTJjNGUyIDEwMDc1NQoraW5kZXggZWIyNjJlNy4uMWEzYjhiYyAxMDA3NTUKIC0tLSBhL2xkL2dlbnNjcmlwdHMuc2gKICsrKyBiL2xkL2dlbnNjcmlwdHMuc2gKIEBAIC0yNzcsNiArMjc3LDcgQEAgREFUQV9BTElHTk1FTlRfdT0iJHtEQVRBX0FMSUdOTUVOVF91LSR7REFUQV9BTElHTk1FTlRfcn19IgpAQCAtNDMsNyArNDMsNyBAQAogIExEX0ZMQUc9CiAgREFUQV9BTElHTk1FTlQ9JHtEQVRBX0FMSUdOTUVOVF99CiBkaWZmIC0tZ2l0IGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjIGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCi1pbmRleCBlYzc4YzkwLi5mOWU3YTMxIDEwMDY0NAoraW5kZXggZjBjNjQzOS4uMjIzYzU1ZiAxMDA2NDQKIC0tLSBhL2xkL3NjcmlwdHRlbXBsL2VsZi5zYwogKysrIGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCiBAQCAtMTM2LDggKzEzNiw4IEBAIGlmIHRlc3QgLW4gIiR7Q09NTU9OUEFHRVNJWkV9IjsgdGhlbgpAQCAtNTgsNSArNTgsNSBAQAogIGlmIHRlc3QgLXogIiRQTFQiOyB0aGVuCiAgICBJUExUPSIuaXBsdCAgICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguaXBsdCkgfSIKIC0tIAotMi43LjEKKzIuOS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaAppbmRleCA0YTIwMmQwLi44ZDdjZjAwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSBiMWFlNjA0ODgwNTYyZWQwNjVmNjE0YTc0NWQzZjg5MjI4MzhiYzVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBlNGNkNDA3MjJmNTk3ZGZmMzljNzIxNGZhYjE3NDJkZDViY2M2N2ViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTowNzozMyArMDAwMAotU3ViamVjdDogW1BBVENIIDAyLzE0XSBjb25maWd1cmU6IHdpZGVuIHRoZSByZWdleHAgZm9yIFNIIGFyY2hpdGVjdHVyZXMKK1N1YmplY3Q6IFtQQVRDSCAwMi8xM10gY29uZmlndXJlOiB3aWRlbiB0aGUgcmVnZXhwIGZvciBTSCBhcmNoaXRlY3R1cmVzCiAKIGdwcm9mIG5lZWRzIHRvIGtub3cgYWJvdXQgdWNsaWJjCiAKQEAgLTE0LDEwICsxNCwxMCBAQAogIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCi1pbmRleCAzNGI2NmY3Li44NTQxNGFiIDEwMDc1NQoraW5kZXggYWQzZGZiNy4uMmE3NGE3NyAxMDA3NTUKIC0tLSBhL2NvbmZpZ3VyZQogKysrIGIvY29uZmlndXJlCi1AQCAtMzQ0NSw3ICszNDQ1LDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgorQEAgLTM0NDQsNyArMzQ0NCw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KICAgICAgOzsKICAgIHMzOTAtKi0qIHwgczM5MHgtKi0qKQogICAgICA7OwpAQCAtMjYsNyArMjYsNyBAQAogICAgICA7OwogICAgc2g2NC0qLSogfCBzaDUqLSotKikKICAgICAgOzsKLUBAIC0zOTM5LDcgKzM5MzksNyBAQCBjYXNlICIke3RhcmdldH0iIGluCitAQCAtMzk0Niw3ICszOTQ2LDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgogICAgb3IxayotKi0qKQogICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgZ2RiIgogICAgICA7OwpAQCAtMzYsMTAgKzM2LDEwIEBACiAgICAgICAgc2gqLSotZWxmKQogICAgICAgICAgIDs7CiBkaWZmIC0tZ2l0IGEvZ3Byb2YvY29uZmlndXJlIGIvZ3Byb2YvY29uZmlndXJlCi1pbmRleCA2OTNiOTI3Li5kNGRiNTU0IDEwMDc1NQoraW5kZXggYmYzZWNhYS4uNjI2ZTFjNyAxMDA3NTUKIC0tLSBhL2dwcm9mL2NvbmZpZ3VyZQogKysrIGIvZ3Byb2YvY29uZmlndXJlCi1AQCAtNTg2OSw2ICs1ODY5LDExIEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKK0BAIC01ODczLDYgKzU4NzMsMTEgQEAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQogICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgIDs7CiAgCkBAIC01Miw1ICs1Miw1IEBACiAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKIC0tIAotMi43LjEKKzIuOS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaAppbmRleCAyYzcwZWNkLi5hY2MxOThiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAwMTgwOGU4ZWY4ZWU3MDljODIxOGQ5NjI2MDFjMThhNjNhMDYzYTFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA5M2M0OWY2MTk3YmQ1OWIyYWJiZjA0YjMyOTZiZjEwMDI5YjgwZjQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTowOTo1OCArMDAwMAotU3ViamVjdDogW1BBVENIIDAzLzE0XSBQb2ludCBzY3JpcHRzIGxvY2F0aW9uIHRvIGxpYmRpcgorU3ViamVjdDogW1BBVENIIDAzLzEzXSBQb2ludCBzY3JpcHRzIGxvY2F0aW9uIHRvIGxpYmRpcgogCiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KIApAQCAtMTIsNyArMTIsNyBAQAogIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvbGQvTWFrZWZpbGUuYW0gYi9sZC9NYWtlZmlsZS5hbQotaW5kZXggMGIzYjA0OS4uMzg3MWM3NCAxMDA2NDQKK2luZGV4IDA1OTg5MjMuLmI0NzhiYTcgMTAwNjQ0CiAtLS0gYS9sZC9NYWtlZmlsZS5hbQogKysrIGIvbGQvTWFrZWZpbGUuYW0KIEBAIC01Nyw3ICs1Nyw3IEBAIGVuZGlmCkBAIC0yNSwxMCArMjUsMTAgQEAKICBFTVVMID0gQEVNVUxACiAgRU1VTEFUSU9OX09GSUxFUyA9IEBFTVVMQVRJT05fT0ZJTEVTQAogZGlmZiAtLWdpdCBhL2xkL01ha2VmaWxlLmluIGIvbGQvTWFrZWZpbGUuaW4KLWluZGV4IGVkOThmODcuLjUzMGU0YzkgMTAwNjQ0CitpbmRleCA3Yzc4MTk4Li41ZWI2N2UwIDEwMDY0NAogLS0tIGEvbGQvTWFrZWZpbGUuaW4KICsrKyBiL2xkL01ha2VmaWxlLmluCi1AQCAtNDEzLDcgKzQxMyw3IEBAIEFNX0NGTEFHUyA9ICQoV0FSTl9DRkxBR1MpICQoRUxGX0NMRkFHUykKK0BAIC00NTEsNyArNDUxLDcgQEAgQU1fQ0ZMQUdTID0gJChXQVJOX0NGTEFHUykgJChFTEZfQ0xGQUdTKQogICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KICAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKICAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KQEAgLTM4LDUgKzM4LDUgQEAKICBCRkRESVIgPSAkKEJBU0VESVIpL2JmZAogIElOQ0RJUiA9ICQoQkFTRURJUikvaW5jbHVkZQogLS0gCi0yLjcuMQorMi45LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaAppbmRleCA4ZjBhNDAyLi4yOGExN2YzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gYzAwOGM3Zjk3YzFjZjQ4Nzc0OWM2YzM3NTgyMGExZjNiM2M2YzUzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNGZmODM3NzlkZTg2MjE3MTVjNmMyYTc5Y2Y3ZWQ4ZDc0ZmYyZDdjNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6Mjc6MTcgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAwNC8xNF0gT25seSBnZW5lcmF0ZSBhbiBSUEFUSCBlbnRyeSBpZiBMRF9SVU5fUEFUSCBpcyBub3QKK1N1YmplY3Q6IFtQQVRDSCAwNC8xM10gT25seSBnZW5lcmF0ZSBhbiBSUEFUSCBlbnRyeSBpZiBMRF9SVU5fUEFUSCBpcyBub3QKICBlbXB0eQogCiBmb3IgY2FzZXMgd2hlcmUgLXJwYXRoIGlzbid0IHNwZWNpZmllZC4gZGViaWFuICgjMTUxMDI0KQpAQCAtMTUsMTAgKzE1LDEwIEBACiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvbGQvZW11bHRlbXBsL2VsZjMyLmVtIGIvbGQvZW11bHRlbXBsL2VsZjMyLmVtCi1pbmRleCAwNDA1ZDRmLi43M2M1NDQ3IDEwMDY0NAoraW5kZXggNDdmYTU0OS4uZjRjNjQwZSAxMDA2NDQKIC0tLSBhL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQogKysrIGIvbGQvZW11bHRlbXBsL2VsZjMyLmVtCi1AQCAtMTI0Miw2ICsxMjQyLDggQEAgZnJhZ21lbnQgPDxFT0YKK0BAIC0xMjQ0LDYgKzEyNDQsOCBAQCBmcmFnbWVudCA8PEVPRgogIAkgICAgICAmJiBjb21tYW5kX2xpbmUucnBhdGggPT0gTlVMTCkKICAJICAgIHsKICAJICAgICAgbGliX3BhdGggPSAoY29uc3QgY2hhciAqKSBnZXRlbnYgKCJMRF9SVU5fUEFUSCIpOwpAQCAtMjcsNyArMjcsNyBAQAogIAkgICAgICBpZiAoZ2xkJHtFTVVMQVRJT05fTkFNRX1fc2VhcmNoX25lZWRlZCAobGliX3BhdGgsICZuLAogIAkJCQkJCSAgICAgIGZvcmNlKSkKICAJCWJyZWFrOwotQEAgLTE1MjMsNiArMTUyNSw4IEBAIGdsZCR7RU1VTEFUSU9OX05BTUV9X2JlZm9yZV9hbGxvY2F0aW9uICh2b2lkKQorQEAgLTE1MjUsNiArMTUyNyw4IEBAIGdsZCR7RU1VTEFUSU9OX05BTUV9X2JlZm9yZV9hbGxvY2F0aW9uICh2b2lkKQogICAgcnBhdGggPSBjb21tYW5kX2xpbmUucnBhdGg7CiAgICBpZiAocnBhdGggPT0gTlVMTCkKICAgICAgcnBhdGggPSAoY29uc3QgY2hhciAqKSBnZXRlbnYgKCJMRF9SVU5fUEFUSCIpOwpAQCAtMzcsNSArMzcsNSBAQAogICAgZm9yIChhYmZkID0gbGlua19pbmZvLmlucHV0X2JmZHM7IGFiZmQ7IGFiZmQgPSBhYmZkLT5saW5rLm5leHQpCiAgICAgIGlmIChiZmRfZ2V0X2ZsYXZvdXIgKGFiZmQpID09IGJmZF90YXJnZXRfZWxmX2ZsYXZvdXIpCiAtLSAKLTIuNy4xCisyLjkuMAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2gKaW5kZXggOTJlYWQ3Zi4uMzMxZjc4MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNmE0MTYzNWUyOWM0YTZjMDY0YjFmNjZlNzlhOGZlMjAyNmY0MzYxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gMThhN2FlMTY5ZThkNTVhY2U2ODMzNTdkMWRlNmIwN2U0ZmRmNzk3YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MzI6NDkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAwNS8xNF0gRXhwbGljaXRseSBsaW5rIHdpdGggbGlibSBvbiB1Y2xpYmMKK1N1YmplY3Q6IFtQQVRDSCAwNS8xM10gRXhwbGljaXRseSBsaW5rIHdpdGggbGlibSBvbiB1Y2xpYmMKIAogRGVzY3JpcHRpb246CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCiAKIGRpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlLnRndCBiL2dhcy9jb25maWd1cmUudGd0Ci1pbmRleCAwYjQ5MGQ0Li4wODZlMGQyIDEwMDY0NAoraW5kZXggZTJkZjY1OS4uMWI5ZmQ5OSAxMDA2NDQKIC0tLSBhL2dhcy9jb25maWd1cmUudGd0CiArKysgYi9nYXMvY29uZmlndXJlLnRndAogQEAgLTQ4Nyw2ICs0ODcsMTIgQEAgY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgpAQCAtNDgsNSArNDgsNSBAQAogICAgYWFyY2g2NCB8IGFscGhhIHwgYXJtIHwgaTM4NiB8IGlhNjQgfCBtaWNyb2JsYXplIHwgbWlwcyB8IG5zMzJrIHwgb3IxayB8IG9yMWtuZCB8IHBkcDExIHwgcHBjIHwgc3BhcmMgfCB6ODAgfCB6OGspCiAgICAgIGJmZF9nYXM9eWVzCiAtLSAKLTIuNy4xCisyLjkuMAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaAppbmRleCBlNTRhYjFiLi5mMGZkZjQ2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGRhNzBmMDg3NmNkZDhlZDcwM2Q5ZWQxNTI0MjEyY2NmZWZiMDllZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDcxYWRjZGUzNjQ4ZGI0N2Y3ZmExNTVkYjEyODEwNTkxZmZkM2FlMzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogU3VuLCAxNCBGZWIgMjAxNiAxNzowNDowNyArMDAwMAotU3ViamVjdDogW1BBVENIIDA2LzE0XSBVc2UgbGlidG9vbCAyLjQKK1N1YmplY3Q6IFtQQVRDSCAwNi8xM10gVXNlIGxpYnRvb2wgMi40CiAKIGdldCBsaWJ0b29sIHN5c3Jvb3Qgc3VwcG9ydAogCkBAIC05LDI4ICs5LDI4IEBACiAtLS0KIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCi0gYmZkL2NvbmZpZ3VyZSAgICAgICAgfCAxMzIyICsrKysrKysrKysrKysrKysrLS0tLS0tCisgYmZkL2NvbmZpZ3VyZSAgICAgICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCiAgYmZkL2NvbmZpZ3VyZS5hYyAgICAgfCAgICAyICstCi0gYmludXRpbHMvY29uZmlndXJlICAgfCAxMzIwICsrKysrKysrKysrKysrKysrLS0tLS0tCisgYmludXRpbHMvY29uZmlndXJlICAgfCAxMzE2ICsrKysrKysrKysrKysrKysrLS0tLS0tCiAgY29uZmlndXJlICAgICAgICAgICAgfCAgICA0ICstCi0gZ2FzL2NvbmZpZ3VyZSAgICAgICAgfCAxMzIwICsrKysrKysrKysrKysrKysrLS0tLS0tCi0gZ3Byb2YvY29uZmlndXJlICAgICAgfCAxMzI1ICsrKysrKysrKysrKysrKysrLS0tLS0tCi0gbGQvY29uZmlndXJlICAgICAgICAgfCAxNjk1ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgfCAxMzE0ICsrKysrKysrKysrKysrKysrLS0tLS0tCisgZ3Byb2YvY29uZmlndXJlICAgICAgfCAxMzIxICsrKysrKysrKysrKysrKysrLS0tLS0tCisgbGQvY29uZmlndXJlICAgICAgICAgfCAxNjkxICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiAgbGlidG9vbC5tNCAgICAgICAgICAgfCAxMDgwICsrKysrKysrKysrKystLS0tLS0KICBsdG1haW4uc2ggICAgICAgICAgICB8IDI5MjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KICBsdG9wdGlvbnMubTQgICAgICAgICB8ICAgIDIgKy0KICBsdHZlcnNpb24ubTQgICAgICAgICB8ICAgMTIgKy0KICBsdH5vYnNvbGV0ZS5tNCAgICAgICB8ICAgIDIgKy0KLSBvcGNvZGVzL2NvbmZpZ3VyZSAgICB8IDEzMjIgKysrKysrKysrKysrKysrKystLS0tLS0KKyBvcGNvZGVzL2NvbmZpZ3VyZSAgICB8IDEzMTggKysrKysrKysrKysrKysrKystLS0tLS0KICBvcGNvZGVzL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KICB6bGliL2NvbmZpZ3VyZSAgICAgICB8IDEzMjAgKysrKysrKysrKysrKysrKystLS0tLS0KLSAxNSBmaWxlcyBjaGFuZ2VkLCA5OTQ0IGluc2VydGlvbnMoKyksIDM3MDkgZGVsZXRpb25zKC0pCisgMTUgZmlsZXMgY2hhbmdlZCwgOTkzMCBpbnNlcnRpb25zKCspLCAzNjk3IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZSBiL2JmZC9jb25maWd1cmUKLWluZGV4IDc0MTFjNmQuLmVhZTc0M2UgMTAwNzU1CitpbmRleCBhNDM3NTY5Li41NzVhMjU3IDEwMDc1NQogLS0tIGEvYmZkL2NvbmZpZ3VyZQogKysrIGIvYmZkL2NvbmZpZ3VyZQotQEAgLTY3MCw2ICs2NzAsOSBAQCBPVE9PTAorQEAgLTY3MSw2ICs2NzEsOSBAQCBPVE9PTAogIExJUE8KICBOTUVESVQKICBEU1lNVVRJTApAQCAtNDAsNyArNDAsNyBAQAogIE9CSkRVTVAKICBMTl9TCiAgTk0KLUBAIC03ODIsNiArNzg1LDcgQEAgZW5hYmxlX3N0YXRpYworQEAgLTc4NCw2ICs3ODcsNyBAQCBlbmFibGVfc3RhdGljCiAgd2l0aF9waWMKICBlbmFibGVfZmFzdF9pbnN0YWxsCiAgd2l0aF9nbnVfbGQKQEAgLTQ4LDcgKzQ4LDcgQEAKICBlbmFibGVfbGlidG9vbF9sb2NrCiAgZW5hYmxlX3BsdWdpbnMKICBlbmFibGVfbGFyZ2VmaWxlCi1AQCAtMTQ1OCw2ICsxNDYyLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CitAQCAtMTQ2MCw2ICsxNDY0LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CiAgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCiAgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAtLXdpdGgtbW1hcCAgICAgICAgICAgICB0cnkgdXNpbmcgbW1hcCBmb3IgQkZEIGlucHV0IGZpbGVzIGlmIGF2YWlsYWJsZQogICAgLS13aXRoLXNlcGFyYXRlLWRlYnVnLWRpcj1ESVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGdsb2JhbCBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGluIERJUgotQEAgLTUzODgsOCArNTM5NCw4IEBAIGVzYWMKK0BAIC01MzkyLDggKzUzOTgsOCBAQCBlc2FjCiAgCiAgCiAgCkBAIC02OCw3ICs2OCw3IEBACiAgCiAgCiAgCi1AQCAtNTQyOSw3ICs1NDM1LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KK0BAIC01NDMzLDcgKzU0MzksNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQogICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CiAgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KICAgIEVDSE89J3ByaW50IC1yIC0tJwogIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtNjExNSw4ICs2MTIxLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKK0BAIC02MTE5LDggKzYxMjUsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OwogICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCiAgeHNpX3NoZWxsPW5vCiAgKCBfbHRfZHVtbXk9ImEvYi9jIgpAQCAtODgsNyArODgsNyBAQAogICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCiAgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCiAgICAmJiB4c2lfc2hlbGw9eWVzCi1AQCAtNjE2NSw2ICs2MTcxLDgwIEBAIGVzYWMKK0BAIC02MTY5LDYgKzYxNzUsODAgQEAgZXNhYwogIAogIAogIApAQCAtMTY5LDcgKzE2OSw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjE4MSw2ICs2MjYxLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCitAQCAtNjE4NSw2ICs2MjY1LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCiAgZXNhYwogIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICBjYXNlICRob3N0X29zIGluCkBAIC0xODEsNyArMTgxLDcgQEAKICAgIGRhcndpbiopCiAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotQEAgLTYzNDksNyArNjQzNCw4IEBAIG1pbmd3KiB8IHB3MzIqKQorQEAgLTYzNTMsNyArNjQzOCw4IEBAIG1pbmd3KiB8IHB3MzIqKQogICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwogICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKICAgIGVsc2UKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCiAgICBmaQogICAgOzsKLUBAIC02NTAzLDYgKzY1ODksMjEgQEAgZXNhYworQEAgLTY1MDcsNiArNjU5MywyMSBAQCBlc2FjCiAgZmkKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKICAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KQEAgLTIxMyw3ICsyMTMsNyBAQAogIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAogIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAogIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotQEAgLTY1MTgsOSArNjYxOSwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjUyMiw5ICs2NjIzLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KICAKICAKICAKQEAgLTM3OCw3ICszNzgsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTY1MzYsNyArNjc5MCw3IEBAIGRvCitAQCAtNjU0MCw3ICs2Nzk0LDcgQEAgZG8KICAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgpAQCAtMzg3LDcgKzM4Nyw3IEBACiAgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgICBicmVhayAyCiAgICBmaQotQEAgLTY1NTYsMTEgKzY4MTAsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KK0BAIC02NTYwLDExICs2ODE0LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CiAgZmkKICAKICAKQEAgLTQwNiw3ICs0MDYsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTY1NzYsNyArNjgzNCw3IEBAIGRvCitAQCAtNjU4MCw3ICs2ODM4LDcgQEAgZG8KICAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgICBicmVhayAyCiAgICBmaQotQEAgLTY1OTUsNiArNjg1MywxMCBAQCBlbHNlCitAQCAtNjU5OSw2ICs2ODU3LDEwIEBAIGVsc2UKICAkYXNfZWNobyAibm8iID4mNjsgfQogIGZpCiAgCkBAIC00MjYsNyArNDI2LDcgQEAKICAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgogICAgICBBUj0iZmFsc2UiCiAgICBlbHNlCi1AQCAtNjYwNiwxNiArNjg2OCw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKK0BAIC02NjEwLDE2ICs2ODcyLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OwogIGVzYWMKICAgICAgQVI9JGFjX2N0X0FSCiAgICBmaQpAQCAtNTAzLDcgKzUwMyw3IEBACiAgCiAgCiAgCi1AQCAtNjk1Nyw4ICs3Mjc1LDggQEAgZXNhYworQEAgLTY5NjEsOCArNzI3OSw4IEBAIGVzYWMKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgogIAogICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwpAQCAtNTE0LDcgKzUxNCw3IEBACiAgCiAgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCiAgb3B0X2NyPQotQEAgLTY5OTQsNiArNzMxMiw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KK0BAIC02OTk4LDYgKzczMTYsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCiAgICBlbHNlCiAgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCiAgICBmaQpAQCAtNTIyLDcgKzUyMiw3IEBACiAgCiAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KICAgIHBpcGVfd29ya3M9bm8KLUBAIC03MDM1LDYgKzczNTQsMTggQEAgX0xUX0VPRgorQEAgLTcwMzksNiArNzM1OCwxOCBAQCBfTFRfRU9GCiAgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KICAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCiAgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKQEAgLTU0MSw3ICs1NDEsNyBAQAogICNpZmRlZiBfX2NwbHVzcGx1cwogIGV4dGVybiAiQyIgewogICNlbmRpZgotQEAgLTcwNDYsNyArNzM3Nyw3IEBAIF9MVF9FT0YKK0BAIC03MDUwLDcgKzczODEsNyBAQCBfTFRfRU9GCiAgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CiAgCiAgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwpAQCAtNTUwLDcgKzU1MCw3IEBACiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgdm9pZCAgICAgICAqYWRkcmVzczsKICB9Ci1AQCAtNzA3Miw4ICs3NDAzLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKK0BAIC03MDc2LDggKzc0MDcsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewogIF9MVF9FT0YKICAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgogIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dApAQCAtNTYxLDcgKzU2MSw3IEBACiAgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKICAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCiAgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1Ci1AQCAtNzA4Myw4ICs3NDE0LDggQEAgX0xUX0VPRgorQEAgLTcwODcsOCArNzQxOCw4IEBAIF9MVF9FT0YKICAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogIAkgICAgcGlwZV93b3Jrcz15ZXMKICAJICBmaQpAQCAtNTcyLDcgKzU3Miw3IEBACiAgCWVsc2UKICAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKICAJZmkKLUBAIC03MTIxLDYgKzc0NTIsMTYgQEAgZWxzZQorQEAgLTcxMjUsNiArNzQ1NiwxNiBAQCBlbHNlCiAgJGFzX2VjaG8gIm9rIiA+JjY7IH0KICBmaQogIApAQCAtNTg5LDcgKzU4OSw3IEBACiAgCiAgCiAgCi1AQCAtNzE0Miw2ICs3NDgzLDQ1IEBAIGZpCitAQCAtNzE0Niw2ICs3NDg3LDQ1IEBAIGZpCiAgCiAgCiAgCkBAIC02MzUsNyArNjM1LDcgQEAKICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KICBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgogICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOwotQEAgLTczNDgsNiArNzcyOCwxMjMgQEAgZXNhYworQEAgLTczNTIsNiArNzczMiwxMjMgQEAgZXNhYwogIAogIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgogIApAQCAtNzU5LDcgKzc1OSw3IEBACiAgCiAgICBjYXNlICRob3N0X29zIGluCiAgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi1AQCAtNzkxMSw2ICs4NDA4LDggQEAgX0xUX0VPRgorQEAgLTc5MTUsNiArODQxMiw4IEBAIF9MVF9FT0YKICAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKICAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CiAgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQpAQCAtNzY4LDcgKzc2OCw3IEBACiAgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCiAgaW50IG1haW4oKSB7IHJldHVybiAwO30KICBfTFRfRU9GCi1AQCAtODA3NSw3ICs4NTc0LDggQEAgZmkKK0BAIC04MDc5LDcgKzg1NzgsOCBAQCBmaQogIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKICAKICAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgpAQCAtNzc4LDcgKzc3OCw3IEBACiAgCiAgCiAgCi1AQCAtODE2NCw3ICs4NjY0LDcgQEAgYWl4MyopCitAQCAtODE2OCw3ICs4NjY4LDcgQEAgYWl4MyopCiAgZXNhYwogIAogICMgR2xvYmFsIHZhcmlhYmxlczoKQEAgLTc4Nyw3ICs3ODcsNyBAQAogIGNhbl9idWlsZF9zaGFyZWQ9eWVzCiAgCiAgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi1AQCAtODQ2Miw4ICs4OTYyLDYgQEAgZmkKK0BAIC04NDY2LDggKzg5NjYsNiBAQCBmaQogIGx0X3Byb2dfY29tcGlsZXJfcGljPQogIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogIApAQCAtNzk2LDcgKzc5Niw3IEBACiAgCiAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotQEAgLTg2MjksNiArOTEyNywxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorQEAgLTg2MzMsNiArOTEzMSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQogIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCiAgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKICAJOzsKQEAgLTgwOSw3ICs4MDksNyBAQAogICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCiAgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi1AQCAtODY5MSw3ICs5MTk1LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK0BAIC04Njk1LDcgKzkxOTksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQogICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KQEAgLTgxOCw3ICs4MTgsNyBAQAogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKICAgICAgICAqKQogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7Ci1AQCAtODc0OCwxMyArOTI1MiwxNyBAQCBjYXNlICRob3N0X29zIGluCitAQCAtODc1MiwxMyArOTI1NiwxNyBAQCBjYXNlICRob3N0X29zIGluCiAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCiAgICAgIDs7CiAgZXNhYwpAQCAtODQyLDcgKzg0Miw3IEBACiAgCiAgIwogICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLUBAIC04ODE1LDYgKzkzMjMsMTEgQEAgZmkKK0BAIC04ODE5LDYgKzkzMjcsMTEgQEAgZmkKICAKICAKICAKQEAgLTg1NCw3ICs4NTQsNyBAQAogICMKICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCiAgIwotQEAgLTkxNjUsNyArOTY3OCw4IEBAIF9MVF9FT0YKK0BAIC05MTY5LDcgKzk2ODIsOCBAQCBfTFRfRU9GCiAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KICAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwpAQCAtODY0LDcgKzg2NCw3IEBACiAgCiAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLUBAIC05MjY0LDEyICs5Nzc4LDEyIEBAIF9MVF9FT0YKK0BAIC05MjY4LDEyICs5NzgyLDEyIEBAIF9MVF9FT0YKICAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJwpAQCAtODc5LDcgKzg3OSw3IEBACiAgCSAgZmkKICAJICA7OwogIAllc2FjCi1AQCAtOTI4Myw4ICs5Nzk3LDggQEAgX0xUX0VPRgorQEAgLTkyODcsOCArOTgwMSw4IEBAIF9MVF9FT0YKICAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogIAl3bGFyYz0KICAgICAgICBlbHNlCkBAIC04OTAsNyArODkwLDcgQEAKICAgICAgICBmaQogICAgICAgIDs7CiAgCi1AQCAtOTMwMiw4ICs5ODE2LDggQEAgX0xUX0VPRgorQEAgLTkzMDYsOCArOTgyMCw4IEBAIF9MVF9FT0YKICAKICBfTFRfRU9GCiAgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCkBAIC05MDEsNyArOTAxLDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtOTM0OSw4ICs5ODYzLDggQEAgX0xUX0VPRgorQEAgLTkzNTMsOCArOTg2Nyw4IEBAIF9MVF9FT0YKICAKICAgICAgKikKICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCkBAIC05MTIsNyArOTEyLDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtOTQ4MCw3ICs5OTk0LDEzIEBAIF9MVF9FT0YKK0BAIC05NDg0LDcgKzk5OTgsMTMgQEAgX0xUX0VPRgogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwogICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC05MjcsNyArOTI3LDcgQEAKICAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAgCiAgaW50Ci1AQCAtOTQ5MywyMiArMTAwMTMsMjkgQEAgbWFpbiAoKQorQEAgLTk0OTcsMjIgKzEwMDE3LDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC05NzAsNyArOTcwLDcgQEAKICAKICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotQEAgLTk1MjAsNyArMTAwNDcsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTUyNCw3ICsxMDA1MSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJZWxzZQogIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC05ODUsNyArOTg1LDcgQEAKICAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAgCiAgaW50Ci1AQCAtOTUzMywyMiArMTAwNjYsMjkgQEAgbWFpbiAoKQorQEAgLTk1MzcsMjIgKzEwMDcwLDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC0xMDI4LDcgKzEwMjgsNyBAQAogIAogIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTk1OTMsMjAgKzEwMTMzLDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTk1OTcsMjAgKzEwMTM3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCiAgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwogICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCkBAIC0xMTA2LDcgKzExMDYsNyBAQAogICAgICAgIDs7CiAgCiAgICAgIGRhcndpbiogfCByaGFwc29keSopCi1AQCAtOTY2Nyw3ICsxMDI1MCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTk2NzEsNyArMTAyNTQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAKICAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgogICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCkBAIC0xMTE1LDcgKzExMTUsNyBAQAogICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCiAgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotQEAgLTk2NzUsNyArMTAyNTgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05Njc5LDcgKzEwMjYyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgIGhwdXg5KikKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgpAQCAtMTEyNCw3ICsxMTI0LDcgQEAKICAgICAgICBlbHNlCiAgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICAgZmkKLUBAIC05NjkxLDcgKzEwMjc0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTY5NSw3ICsxMDI3OCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICBocHV4MTAqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgpAQCAtMTEzMyw3ICsxMTMzLDcgQEAKICAgICAgICBlbHNlCiAgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgICBmaQotQEAgLTk3MTUsMTAgKzEwMjk4LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTk3MTksMTAgKzEwMzAyLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgCSAgOzsKICAJaWE2NCopCkBAIC0xMTQ2LDcgKzExNDYsNyBAQAogIAkgIDs7CiAgCWVzYWMKICAgICAgICBlbHNlCi1AQCAtOTc5NywyMyArMTAzODAsMzYgQEAgZmkKK0BAIC05ODAxLDIzICsxMDM4NCwzNiBAQCBmaQogIAogICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCkBAIC0xMTkxLDcgKzExOTEsNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi1AQCAtOTg5OCw3ICsxMDQ5NCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorQEAgLTk5MDIsNyArMTA0OTgsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwpAQCAtMTIwMCw3ICsxMjAwLDcgQEAKICAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgIGVsc2UKICAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi1AQCAtOTkxNyw5ICsxMDUxMyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorQEAgLTk5MjEsOSArMTA1MTcsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAJd2xhcmM9JyR7d2x9JwpAQCAtMTIxMiw3ICsxMjEyLDcgQEAKICAgICAgICBlbHNlCiAgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgogIAkqIkNvbXBpbGVycyA1LjAiKikKLUBAIC0xMDQ5NSw4ICsxMTA5MSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKK0BAIC0xMDQ5OSw4ICsxMTA5NSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgIG5lZWRfdmVyc2lvbj1ubwogICAgbmVlZF9saWJfcHJlZml4PW5vCiAgCkBAIC0xMjI0LDcgKzEyMjQsNyBAQAogICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwogICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCiAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotQEAgLTEwNTI5LDEzICsxMTEyNiw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCitAQCAtMTA1MzMsMTMgKzExMTMwLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCiAgICAgICAgOzsKICAgICAgZXNhYwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKICAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgogICAgc2hsaWJwYXRoX3Zhcj1QQVRICiAgICA7OwotQEAgLTEwNjI3LDcgKzExMjgyLDcgQEAgaGFpa3UqKQorQEAgLTEwNjMxLDcgKzExMjg2LDcgQEAgaGFpa3UqKQogICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICiAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCkBAIC0xMzA2LDE2ICsxMzA2LDcgQEAKICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgIDs7CiAgCi1AQCAtMTE0MjMsNyArMTIwNzgsNyBAQCBlbHNlCi0gICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLS0jbGluZSAxMTQyNiAiY29uZmlndXJlIgotKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSAjaW5jbHVkZSAiY29uZmRlZnMuaCIKLSAKLSAjaWYgSEFWRV9ETEZDTl9ICi1AQCAtMTE0NjcsMTAgKzEyMTIyLDEwIEBAIGVsc2UKK0BAIC0xMTQ3MSwxMCArMTIxMjYsMTAgQEAgZWxzZQogIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCiAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCkBAIC0xMzI4LDE2ICsxMzE5LDcgQEAKICBpbnQgbWFpbiAoKQogIHsKICAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTExNTI5LDcgKzEyMTg0LDcgQEAgZWxzZQotICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0tI2xpbmUgMTE1MzIgImNvbmZpZ3VyZSIKLSsjbGluZSAkTElORU5PICJjb25maWd1cmUiCi0gI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0gCi0gI2lmIEhBVkVfRExGQ05fSAotQEAgLTExNTczLDEwICsxMjIyOCwxMCBAQCBlbHNlCitAQCAtMTE1NzcsMTAgKzEyMjMyLDEwIEBAIGVsc2UKICAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCiAgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwogICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQpAQCAtMTM1MCw3ICsxMzMyLDcgQEAKICBpbnQgbWFpbiAoKQogIHsKICAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTE1MTIxLDcgKzE1Nzc2LDcgQEAgU0hBUkVEX0xERkxBR1M9CitAQCAtMTQwNzgsNyArMTQ3MzMsNyBAQCBTSEFSRURfTERGTEFHUz0KICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgogICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKICAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgpAQCAtMTM1OSw3ICsxMzQxLDcgQEAKICAgIGZpCiAgCiAgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KLUBAIC0xNjc0NiwxMyArMTc0MDEsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2Nzg5LDEzICsxNzQ0NCwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCkBAIC0xMzgwLDcgKzEzNjIsNyBAQAogIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTY3NjcsMTQgKzE3NDI5LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCitAQCAtMTY4MTAsMTQgKzE3NDcyLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtMTM5OSw3ICsxMzgxLDcgQEAKICBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xNjgwNywxMiArMTc0NzIsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKK0BAIC0xNjg1MCwxMiArMTc1MTUsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKICBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCkBAIC0xNDEzLDcgKzEzOTUsNyBAQAogIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTY4NjcsOCArMTc1MzIsMTMgQEAgcmVsb2FkX2ZsYWcgXAorQEAgLTE2OTEwLDggKzE3NTc1LDEzIEBAIHJlbG9hZF9mbGFnIFwKICBPQkpEVU1QIFwKICBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCiAgZmlsZV9tYWdpY19jbWQgXApAQCAtMTQyNyw3ICsxNDA5LDcgQEAKICBTVFJJUCBcCiAgUkFOTElCIFwKICBDQyBcCi1AQCAtMTY4NzgsMTIgKzE3NTQ4LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorQEAgLTE2OTIxLDEyICsxNzU5MSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXApAQCAtMTQ0Myw3ICsxNDI1LDcgQEAKICBEU1lNVVRJTCBcCiAgTk1FRElUIFwKICBMSVBPIFwKLUBAIC0xNjg5OSw3ICsxNzU3MSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKK0BAIC0xNjk0Miw3ICsxNzYxNCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKQEAgLTE0NTEsNyArMTQzMyw3IEBACiAgZXhjbHVkZV9leHBzeW1zIFwKICBpbmNsdWRlX2V4cHN5bXMgXAogIGZpbGVfbGlzdF9zcGVjIFwKLUBAIC0xNjkzNSw2ICsxNzYwNiw3IEBAIG1vZHVsZV9jbWRzIFwKK0BAIC0xNjk3OCw2ICsxNzY0OSw3IEBAIG1vZHVsZV9jbWRzIFwKICBtb2R1bGVfZXhwc3ltX2NtZHMgXAogIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAogIHByZWxpbmtfY21kcyBcCkBAIC0xNDU5LDcgKzE0NDEsNyBAQAogIHBvc3RpbnN0YWxsX2NtZHMgXAogIHBvc3R1bmluc3RhbGxfY21kcyBcCiAgZmluaXNoX2NtZHMgXAotQEAgLTE3NzE0LDcgKzE4Mzg2LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorQEAgLTE3NzU3LDcgKzE4NDI5LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAogICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgogICMKICAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LApAQCAtMTQ2OSw3ICsxNDUxLDcgQEAKICAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgogICMKICAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCi1AQCAtMTc4MTcsMTkgKzE4NDkwLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorQEAgLTE3ODYwLDE5ICsxODUzMyw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKICAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCiAgTkwyU1A9JGx0X2x0X05MMlNQCiAgCkBAIC0xNTEzLDcgKzE0OTUsNyBAQAogICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCiAgU1RSSVA9JGx0X1NUUklQCiAgCi1AQCAtMTc4NTksNiArMTg1NTUsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKK0BAIC0xNzkwMiw2ICsxODU5OCwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwogICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCiAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CiAgCkBAIC0xNTI2LDcgKzE1MDgsNyBAQAogICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgogIG9iamRpcj0kb2JqZGlyCiAgCi1AQCAtMTc4NjgsNiArMTg1NzAsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorQEAgLTE3OTExLDYgKzE4NjEzLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKICAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwogIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKICAKQEAgLTE1MzYsNyArMTUxOCw3IEBACiAgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgogIERTWU1VVElMPSRsdF9EU1lNVVRJTAogIAotQEAgLTE3OTgyLDEyICsxODY4NywxMiBAQCB3aXRoX2djYz0kR0NDCitAQCAtMTgwMjUsMTIgKzE4NzMwLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKICAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCiAgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwogIApAQCAtMTU1Miw3ICsxNTM0LDcgQEAKICAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCiAgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKICAKLUBAIC0xODA3NCw5ICsxODc3OSw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKK0BAIC0xODExNyw5ICsxODgyMiw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKICAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KICBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCiAgCkBAIC0xNTYyLDcgKzE1NDQsNyBAQAogICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgogIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCiAgCi1AQCAtMTgwOTIsNiArMTg3OTQsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworQEAgLTE4MTM1LDYgKzE4ODM3LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKICAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgogIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCiAgCkBAIC0xNTcyLDcgKzE1NTQsNyBAQAogICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgogIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwogIAotQEAgLTE4MTI0LDIxMCArMTg4MjksMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorQEAgLTE4MTY3LDIxMCArMTg4NzIsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgogICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgogICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KICAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CkBAIC0xOTQ3LDEwICsxOTI5LDEwIEBACiAgICBjaG1vZCAreCAiJG9maWxlIgogIAogZGlmZiAtLWdpdCBhL2JmZC9jb25maWd1cmUuYWMgYi9iZmQvY29uZmlndXJlLmFjCi1pbmRleCA2ZjVlODVmLi40NGJkMDJjIDEwMDY0NAoraW5kZXggNjY5Y2ZmNy4uNWY1Nzg3NyAxMDA2NDQKIC0tLSBhL2JmZC9jb25maWd1cmUuYWMKICsrKyBiL2JmZC9jb25maWd1cmUuYWMKLUBAIC01NjcsNyArNTY3LDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKK0BAIC0yNTMsNyArMjUzLDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKICAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCiAgY2hhbmdlcXVvdGUoWyxdKWRubAogICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCkBAIC0xOTYwLDEwICsxOTQyLDEwIEBACiAgCiAgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KIGRpZmYgLS1naXQgYS9iaW51dGlscy9jb25maWd1cmUgYi9iaW51dGlscy9jb25maWd1cmUKLWluZGV4IGQ0ZjNlMWUuLmE2ZGY1YmIgMTAwNzU1CitpbmRleCA2Y2JmMTdjLi42ZDIwNjAwIDEwMDc1NQogLS0tIGEvYmludXRpbHMvY29uZmlndXJlCiArKysgYi9iaW51dGlscy9jb25maWd1cmUKLUBAIC02NTcsOCArNjU3LDExIEBAIE9UT09MCitAQCAtNjU4LDggKzY1OCwxMSBAQCBPVE9PTAogIExJUE8KICBOTUVESVQKICBEU1lNVVRJTApAQCAtMTk3NSw3ICsxOTU3LDcgQEAKICBPQkpEVU1QCiAgTE5fUwogIE5NCi1AQCAtNzY5LDYgKzc3Miw3IEBAIGVuYWJsZV9zdGF0aWMKK0BAIC03NzEsNiArNzc0LDcgQEAgZW5hYmxlX3N0YXRpYwogIHdpdGhfcGljCiAgZW5hYmxlX2Zhc3RfaW5zdGFsbAogIHdpdGhfZ251X2xkCkBAIC0xOTgzLDcgKzE5NjUsNyBAQAogIGVuYWJsZV9saWJ0b29sX2xvY2sKICBlbmFibGVfcGx1Z2lucwogIGVuYWJsZV9sYXJnZWZpbGUKLUBAIC0xNDQxLDYgKzE0NDUsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKK0BAIC0xNDQzLDYgKzE0NDcsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKICAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KICAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KQEAgLTE5OTIsNyArMTk3NCw3IEBACiAgICAtLXdpdGgtc3lzdGVtLXpsaWIgICAgICB1c2UgaW5zdGFsbGVkIGxpYnoKICAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBkZWZhdWx0PW5vCiAgICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCi1AQCAtNTE1NSw4ICs1MTYxLDggQEAgZXNhYworQEAgLTUxNTksOCArNTE2NSw4IEBAIGVzYWMKICAKICAKICAKQEAgLTIwMDMsNyArMTk4NSw3IEBACiAgCiAgCiAgCi1AQCAtNTE5Niw3ICs1MjAyLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KK0BAIC01MjAwLDcgKzUyMDYsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQogICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CiAgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCkBAIC0yMDEyLDcgKzE5OTQsNyBAQAogICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCiAgICBFQ0hPPSdwcmludCAtciAtLScKICBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotQEAgLTU4ODIsOCArNTg4OCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CitAQCAtNTg4Niw4ICs1ODkyLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKICAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcwogIHhzaV9zaGVsbD1ubwogICggX2x0X2R1bW15PSJhL2IvYyIKQEAgLTIwMjMsNyArMjAwNSw3IEBACiAgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKICAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKICAgICYmIHhzaV9zaGVsbD15ZXMKLUBAIC01OTMyLDYgKzU5MzgsODAgQEAgZXNhYworQEAgLTU5MzYsNiArNTk0Miw4MCBAQCBlc2FjCiAgCiAgCiAgCkBAIC0yMTA0LDcgKzIwODYsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQogIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTU5NDgsNiArNjAyOCwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorQEAgLTU5NTIsNiArNjAzMiwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgogIGVzYWMKICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCiAgY2FzZSAkaG9zdF9vcyBpbgpAQCAtMjExNiw3ICsyMDk4LDcgQEAKICAgIGRhcndpbiopCiAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotQEAgLTYxMTYsNyArNjIwMSw4IEBAIG1pbmd3KiB8IHB3MzIqKQorQEAgLTYxMjAsNyArNjIwNSw4IEBAIG1pbmd3KiB8IHB3MzIqKQogICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwogICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKICAgIGVsc2UKQEAgLTIxMjYsNyArMjEwOCw3IEBACiAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKICAgIGZpCiAgICA7OwotQEAgLTYyNzAsNiArNjM1NiwyMSBAQCBlc2FjCitAQCAtNjI3NCw2ICs2MzYwLDIxIEBAIGVzYWMKICBmaQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQogICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQpAQCAtMjE0OCw3ICsyMTMwLDcgQEAKICBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKICBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKICB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLUBAIC02Mjg1LDkgKzYzODYsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYyODksOSArNjM5MCwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCiAgCiAgCiAgCkBAIC0yMzEzLDcgKzIyOTUsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTYzMDMsNyArNjU1Nyw3IEBAIGRvCitAQCAtNjMwNyw3ICs2NTYxLDcgQEAgZG8KICAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgpAQCAtMjMyMiw3ICsyMzA0LDcgQEAKICAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgIGJyZWFrIDIKICAgIGZpCi1AQCAtNjMyMywxMSArNjU3NywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorQEAgLTYzMjcsMTEgKzY1ODEsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KICBmaQogIAogIApAQCAtMjM0MSw3ICsyMzIzLDcgQEAKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC02MzQzLDcgKzY2MDEsNyBAQCBkbworQEAgLTYzNDcsNyArNjYwNSw3IEBAIGRvCiAgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KQEAgLTIzNTAsNyArMjMzMiw3IEBACiAgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgICBicmVhayAyCiAgICBmaQotQEAgLTYzNjIsNiArNjYyMCwxMCBAQCBlbHNlCitAQCAtNjM2Niw2ICs2NjI0LDEwIEBAIGVsc2UKICAkYXNfZWNobyAibm8iID4mNjsgfQogIGZpCiAgCkBAIC0yMzYxLDcgKzIzNDMsNyBAQAogICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCiAgICAgIEFSPSJmYWxzZSIKICAgIGVsc2UKLUBAIC02MzczLDEyICs2NjM1LDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworQEAgLTYzNzcsMTIgKzY2MzksMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CiAgZXNhYwogICAgICBBUj0kYWNfY3RfQVIKICAgIGZpCkBAIC0yMzc2LDcgKzIzNTgsNyBAQAogIAogIAogIAotQEAgLTYzOTAsNiArNjY1MCw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorQEAgLTYzOTQsNiArNjY1NCw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQogIAogIAogIApAQCAtMjQ0MSw3ICsyNDIzLDcgQEAKICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi1AQCAtNjcyNCw4ICs3MDQyLDggQEAgZXNhYworQEAgLTY3MjgsOCArNzA0Niw4IEBAIGVzYWMKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgogIAogICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwpAQCAtMjQ1Miw3ICsyNDM0LDcgQEAKICAKICAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KICBvcHRfY3I9Ci1AQCAtNjc2MSw2ICs3MDc5LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworQEAgLTY3NjUsNiArNzA4Myw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KICAgIGVsc2UKICAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKICAgIGZpCkBAIC0yNDYwLDcgKzI0NDIsNyBAQAogIAogICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCiAgICBwaXBlX3dvcmtzPW5vCi1AQCAtNjgwMiw2ICs3MTIxLDE4IEBAIF9MVF9FT0YKK0BAIC02ODA2LDYgKzcxMjUsMTggQEAgX0xUX0VPRgogICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCiAgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgogIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CkBAIC0yNDc5LDcgKzI0NjEsNyBAQAogICNpZmRlZiBfX2NwbHVzcGx1cwogIGV4dGVybiAiQyIgewogICNlbmRpZgotQEAgLTY4MTMsNyArNzE0NCw3IEBAIF9MVF9FT0YKK0BAIC02ODE3LDcgKzcxNDgsNyBAQCBfTFRfRU9GCiAgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CiAgCiAgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwpAQCAtMjQ4OCw3ICsyNDcwLDcgQEAKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB2b2lkICAgICAgICphZGRyZXNzOwogIH0KLUBAIC02ODM5LDggKzcxNzAsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworQEAgLTY4NDMsOCArNzE3NCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CiAgX0xUX0VPRgogIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCiAgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CkBAIC0yNDk5LDcgKzI0ODEsNyBAQAogIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCiAgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgogIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotQEAgLTY4NTAsOCArNzE4MSw4IEBAIF9MVF9FT0YKK0BAIC02ODU0LDggKzcxODUsOCBAQCBfTFRfRU9GCiAgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAJICAgIHBpcGVfd29ya3M9eWVzCiAgCSAgZmkKQEAgLTI1MTAsNyArMjQ5Miw3IEBACiAgCWVsc2UKICAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKICAJZmkKLUBAIC02ODg4LDYgKzcyMTksMjEgQEAgZWxzZQorQEAgLTY4OTIsNiArNzIyMywyMSBAQCBlbHNlCiAgJGFzX2VjaG8gIm9rIiA+JjY7IH0KICBmaQogIApAQCAtMjUzMiw3ICsyNTE0LDcgQEAKICAKICAKICAKLUBAIC02OTA2LDYgKzcyNTIsNDAgQEAgZmkKK0BAIC02OTEwLDYgKzcyNTYsNDAgQEAgZmkKICAKICAKICAKQEAgLTI1NzMsNyArMjU1NSw3IEBACiAgCiAgCiAgCi1AQCAtNzExNSw2ICs3NDk1LDEyMyBAQCBlc2FjCitAQCAtNzExOSw2ICs3NDk5LDEyMyBAQCBlc2FjCiAgCiAgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCiAgCkBAIC0yNjk3LDcgKzI2NzksNyBAQAogIAogICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICByaGFwc29keSogfCBkYXJ3aW4qKQotQEAgLTc2NzgsNiArODE3NSw4IEBAIF9MVF9FT0YKK0BAIC03NjgyLDYgKzgxNzksOCBAQCBfTFRfRU9GCiAgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CiAgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQogICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKQEAgLTI3MDYsNyArMjY4OCw3IEBACiAgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCiAgaW50IG1haW4oKSB7IHJldHVybiAwO30KICBfTFRfRU9GCi1AQCAtNzg3Myw3ICs4MzcyLDggQEAgZmkKK0BAIC03ODc3LDcgKzgzNzYsOCBAQCBmaQogIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKICAKICAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgpAQCAtMjcxNiw3ICsyNjk4LDcgQEAKICAKICAKICAKLUBAIC03OTYyLDcgKzg0NjIsNyBAQCBhaXgzKikKK0BAIC03OTY2LDcgKzg0NjYsNyBAQCBhaXgzKikKICBlc2FjCiAgCiAgIyBHbG9iYWwgdmFyaWFibGVzOgpAQCAtMjcyNSw3ICsyNzA3LDcgQEAKICBjYW5fYnVpbGRfc2hhcmVkPXllcwogIAogICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotQEAgLTgyNjAsOCArODc2MCw2IEBAIGZpCitAQCAtODI2NCw4ICs4NzY0LDYgQEAgZmkKICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KICAKQEAgLTI3MzQsNyArMjcxNiw3IEBACiAgCiAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotQEAgLTg0MjcsNiArODkyNSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorQEAgLTg0MzEsNiArODkyOSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQogIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCiAgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKICAJOzsKQEAgLTI3NDcsNyArMjcyOSw3IEBACiAgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKICAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLUBAIC04NDg5LDcgKzg5OTMsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorQEAgLTg0OTMsNyArODk5Nyw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CiAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgpAQCAtMjc1Niw3ICsyNzM4LDcgQEAKICAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CiAgICAgICAgKikKICAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OwotQEAgLTg1NDYsMTMgKzkwNTAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorQEAgLTg1NTAsMTMgKzkwNTQsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgogICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgogICAgICA7OwogIGVzYWMKQEAgLTI3ODAsNyArMjc2Miw3IEBACiAgCiAgIwogICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLUBAIC04NjEzLDYgKzkxMjEsMTEgQEAgZmkKK0BAIC04NjE3LDYgKzkxMjUsMTEgQEAgZmkKICAKICAKICAKQEAgLTI3OTIsNyArMjc3NCw3IEBACiAgIwogICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICAjCi1AQCAtODk2Myw3ICs5NDc2LDggQEAgX0xUX0VPRgorQEAgLTg5NjcsNyArOTQ4MCw4IEBAIF9MVF9FT0YKICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCkBAIC0yODAyLDcgKzI3ODQsNyBAQAogIAogICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi1AQCAtOTA2MiwxMiArOTU3NiwxMiBAQCBfTFRfRU9GCitAQCAtOTA2NiwxMiArOTU4MCwxMiBAQCBfTFRfRU9GCiAgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCiAgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKQEAgLTI4MTcsNyArMjc5OSw3IEBACiAgCSAgZmkKICAJICA7OwogIAllc2FjCi1AQCAtOTA4MSw4ICs5NTk1LDggQEAgX0xUX0VPRgorQEAgLTkwODUsOCArOTU5OSw4IEBAIF9MVF9FT0YKICAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogIAl3bGFyYz0KICAgICAgICBlbHNlCkBAIC0yODI4LDcgKzI4MTAsNyBAQAogICAgICAgIGZpCiAgICAgICAgOzsKICAKLUBAIC05MTAwLDggKzk2MTQsOCBAQCBfTFRfRU9GCitAQCAtOTEwNCw4ICs5NjE4LDggQEAgX0xUX0VPRgogIAogIF9MVF9FT0YKICAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KQEAgLTI4MzksNyArMjgyMSw3IEBACiAgICAgICAgZWxzZQogIAlsZF9zaGxpYnM9bm8KICAgICAgICBmaQotQEAgLTkxNDcsOCArOTY2MSw4IEBAIF9MVF9FT0YKK0BAIC05MTUxLDggKzk2NjUsOCBAQCBfTFRfRU9GCiAgCiAgICAgICopCiAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgpAQCAtMjg1MCw3ICsyODMyLDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtOTI3OCw3ICs5NzkyLDEzIEBAIF9MVF9FT0YKK0BAIC05MjgyLDcgKzk3OTYsMTMgQEAgX0xUX0VPRgogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwogICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC0yODY1LDcgKzI4NDcsNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC05MjkxLDIyICs5ODExLDI5IEBAIG1haW4gKCkKK0BAIC05Mjk1LDIyICs5ODE1LDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC0yOTA4LDcgKzI4OTAsNyBAQAogIAogICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi1AQCAtOTMxOCw3ICs5ODQ1LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTkzMjIsNyArOTg0OSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJZWxzZQogIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC0yOTIzLDcgKzI5MDUsNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC05MzMxLDIyICs5ODY0LDI5IEBAIG1haW4gKCkKK0BAIC05MzM1LDIyICs5ODY4LDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC0yOTY2LDcgKzI5NDgsNyBAQAogIAogIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTkzOTEsMjAgKzk5MzEsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTM5NSwyMCArOTkzNSw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgogICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKICAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgpAQCAtMzA0NCw3ICszMDI2LDcgQEAKICAgICAgICA7OwogIAogICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotQEAgLTk0NjUsNyArMTAwNDgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05NDY5LDcgKzEwMDUyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQpAQCAtMzA1Myw3ICszMDM1LDcgQEAKICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCiAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwogICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLUBAIC05NDczLDcgKzEwMDU2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTQ3Nyw3ICsxMDA2MCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICBocHV4OSopCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KQEAgLTMwNjIsNyArMzA0NCw3IEBACiAgICAgICAgZWxzZQogIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgIGZpCi1AQCAtOTQ4OSw3ICsxMDA3Miw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTk0OTMsNyArMTAwNzYsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAKICAgICAgaHB1eDEwKikKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KQEAgLTMwNzEsNyArMzA1Myw3IEBACiAgICAgICAgZWxzZQogIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICAgZmkKLUBAIC05NTEzLDEwICsxMDA5NiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05NTE3LDEwICsxMDEwMCwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogIAkgIDs7CiAgCWlhNjQqKQpAQCAtMzA4NCw3ICszMDY2LDcgQEAKICAJICA7OwogIAllc2FjCiAgICAgICAgZWxzZQotQEAgLTk1OTUsMjMgKzEwMTc4LDM2IEBAIGZpCitAQCAtOTU5OSwyMyArMTAxODIsMzYgQEAgZmkKICAKICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgpAQCAtMzEyOSw3ICszMTExLDcgQEAKICAgICAgICBlbHNlCiAgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCiAgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotQEAgLTk2OTYsNyArMTAyOTIsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK0BAIC05NzAwLDcgKzEwMjk2LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKQEAgLTMxMzgsNyArMzEyMCw3IEBACiAgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgICBlbHNlCiAgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotQEAgLTk3MTUsOSArMTAzMTEsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK0BAIC05NzE5LDkgKzEwMzE1LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgCXdsYXJjPScke3dsfScKQEAgLTMxNTAsNyArMzEzMiw3IEBACiAgICAgICAgZWxzZQogIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KICAJKiJDb21waWxlcnMgNS4wIiopCi1AQCAtMTAyOTMsOCArMTA4ODksOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCitAQCAtMTAyOTcsOCArMTA4OTMsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICBuZWVkX3ZlcnNpb249bm8KICAgIG5lZWRfbGliX3ByZWZpeD1ubwogIApAQCAtMzE2Miw3ICszMTQ0LDcgQEAKICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKICAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwogICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLUBAIC0xMDMyNywxMyArMTA5MjQsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorQEAgLTEwMzMxLDEzICsxMDkyOCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwogICAgICAgIDs7CiAgICAgIGVzYWMKQEAgLTMyMzUsNyArMzIxNyw3IEBACiAgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KICAgIHNobGlicGF0aF92YXI9UEFUSAogICAgOzsKLUBAIC0xMDQyNSw3ICsxMTA4MCw3IEBAIGhhaWt1KikKK0BAIC0xMDQyOSw3ICsxMTA4NCw3IEBAIGhhaWt1KikKICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAogICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwpAQCAtMzI0NCwxNiArMzIyNiw3IEBACiAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgICA7OwogIAotQEAgLTExMjIxLDcgKzExODc2LDcgQEAgZWxzZQotICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0tI2xpbmUgMTEyMjQgImNvbmZpZ3VyZSIKLSsjbGluZSAkTElORU5PICJjb25maWd1cmUiCi0gI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0gCi0gI2lmIEhBVkVfRExGQ05fSAotQEAgLTExMjY1LDEwICsxMTkyMCwxMCBAQCBlbHNlCitAQCAtMTEyNjksMTAgKzExOTI0LDEwIEBAIGVsc2UKICAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCiAgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwogICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQpAQCAtMzI2NiwxNiArMzIzOSw3IEBACiAgaW50IG1haW4gKCkKICB7CiAgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMTMyNyw3ICsxMTk4Miw3IEBAIGVsc2UKLSAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotLSNsaW5lIDExMzMwICJjb25maWd1cmUiCi0rI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotICNpbmNsdWRlICJjb25mZGVmcy5oIgotIAotICNpZiBIQVZFX0RMRkNOX0gKLUBAIC0xMTM3MSwxMCArMTIwMjYsMTAgQEAgZWxzZQorQEAgLTExMzc1LDEwICsxMjAzMCwxMCBAQCBlbHNlCiAgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KICAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKQEAgLTMyODgsNyArMzI1Miw3IEBACiAgaW50IG1haW4gKCkKICB7CiAgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xNTM1NSwxMyArMTYwMTAsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1MzkyLDEzICsxNjA0NywyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCkBAIC0zMzA5LDcgKzMyNzMsNyBAQAogIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTUzNzYsMTQgKzE2MDM4LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCitAQCAtMTU0MTMsMTQgKzE2MDc1LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtMzMyOCw3ICszMjkyLDcgQEAKICBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xNTQxNiwxMiArMTYwODEsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKK0BAIC0xNTQ1MywxMiArMTYxMTgsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKICBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCkBAIC0zMzQyLDcgKzMzMDYsNyBAQAogIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTU0NzYsOCArMTYxNDEsMTMgQEAgcmVsb2FkX2ZsYWcgXAorQEAgLTE1NTEzLDggKzE2MTc4LDEzIEBAIHJlbG9hZF9mbGFnIFwKICBPQkpEVU1QIFwKICBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCiAgZmlsZV9tYWdpY19jbWQgXApAQCAtMzM1Niw3ICszMzIwLDcgQEAKICBTVFJJUCBcCiAgUkFOTElCIFwKICBDQyBcCi1AQCAtMTU0ODcsMTIgKzE2MTU3LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorQEAgLTE1NTI0LDEyICsxNjE5NCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXApAQCAtMzM3Miw3ICszMzM2LDcgQEAKICBEU1lNVVRJTCBcCiAgTk1FRElUIFwKICBMSVBPIFwKLUBAIC0xNTUwOCw3ICsxNjE4MCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKK0BAIC0xNTU0NSw3ICsxNjIxNyw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKQEAgLTMzODAsNyArMzM0NCw3IEBACiAgZXhjbHVkZV9leHBzeW1zIFwKICBpbmNsdWRlX2V4cHN5bXMgXAogIGZpbGVfbGlzdF9zcGVjIFwKLUBAIC0xNTU0NCw2ICsxNjIxNSw3IEBAIG1vZHVsZV9jbWRzIFwKK0BAIC0xNTU4MSw2ICsxNjI1Miw3IEBAIG1vZHVsZV9jbWRzIFwKICBtb2R1bGVfZXhwc3ltX2NtZHMgXAogIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAogIHByZWxpbmtfY21kcyBcCkBAIC0zMzg4LDcgKzMzNTIsNyBAQAogIHBvc3RpbnN0YWxsX2NtZHMgXAogIHBvc3R1bmluc3RhbGxfY21kcyBcCiAgZmluaXNoX2NtZHMgXAotQEAgLTE2MzAxLDcgKzE2OTczLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorQEAgLTE2MzM4LDcgKzE3MDEwLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAogICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgogICMKICAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LApAQCAtMzM5OCw3ICszMzYyLDcgQEAKICAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgogICMKICAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCi1AQCAtMTY0MDQsMTkgKzE3MDc3LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorQEAgLTE2NDQxLDE5ICsxNzExNCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKICAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCiAgTkwyU1A9JGx0X2x0X05MMlNQCiAgCkBAIC0zNDQyLDcgKzM0MDYsNyBAQAogICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCiAgU1RSSVA9JGx0X1NUUklQCiAgCi1AQCAtMTY0NDYsNiArMTcxNDIsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKK0BAIC0xNjQ4Myw2ICsxNzE3OSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwogICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCiAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CiAgCkBAIC0zNDU1LDcgKzM0MTksNyBAQAogICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgogIG9iamRpcj0kb2JqZGlyCiAgCi1AQCAtMTY0NTUsNiArMTcxNTcsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorQEAgLTE2NDkyLDYgKzE3MTk0LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKICAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwogIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKICAKQEAgLTM0NjUsNyArMzQyOSw3IEBACiAgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgogIERTWU1VVElMPSRsdF9EU1lNVVRJTAogIAotQEAgLTE2NTY5LDEyICsxNzI3NCwxMiBAQCB3aXRoX2djYz0kR0NDCitAQCAtMTY2MDYsMTIgKzE3MzExLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKICAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCiAgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwogIApAQCAtMzQ4MSw3ICszNDQ1LDcgQEAKICAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCiAgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKICAKLUBAIC0xNjY2MSw5ICsxNzM2Niw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKK0BAIC0xNjY5OCw5ICsxNzQwMyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKICAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KICBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCiAgCkBAIC0zNDkxLDcgKzM0NTUsNyBAQAogICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgogIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCiAgCi1AQCAtMTY2NzksNiArMTczODEsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworQEAgLTE2NzE2LDYgKzE3NDE4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKICAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgogIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCiAgCkBAIC0zNTAxLDcgKzM0NjUsNyBAQAogICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgogIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwogIAotQEAgLTE2NzExLDIxMCArMTc0MTYsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorQEAgLTE2NzQ4LDIxMCArMTc0NTMsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgogICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgogICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KICAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CkBAIC0zODc2LDEwICszODQwLDEwIEBACiAgICBjaG1vZCAreCAiJG9maWxlIgogIAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQotaW5kZXggODU0MTRhYi4uMzRiNjZmNyAxMDA3NTUKK2luZGV4IDJhNzRhNzcuLmFkM2RmYjcgMTAwNzU1CiAtLS0gYS9jb25maWd1cmUKICsrKyBiL2NvbmZpZ3VyZQotQEAgLTM0NDUsNyArMzQ0NSw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KK0BAIC0zNDQ0LDcgKzM0NDQsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCiAgICAgIDs7CiAgICBzMzkwLSotKiB8IHMzOTB4LSotKikKICAgICAgOzsKQEAgLTM4ODgsNyArMzg1Miw3IEBACiAgICAgIDs7CiAgICBzaDY0LSotKiB8IHNoNSotKi0qKQogICAgICA7OwotQEAgLTM5MzksNyArMzkzOSw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KK0BAIC0zOTQ2LDcgKzM5NDYsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCiAgICBvcjFrKi0qLSopCiAgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBnZGIiCiAgICAgIDs7CkBAIC0zODk4LDEwICszODYyLDEwIEBACiAgICAgICAgc2gqLSotZWxmKQogICAgICAgICAgIDs7CiBkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZSBiL2dhcy9jb25maWd1cmUKLWluZGV4IGRkOWM5NTMuLjg5ZjE4YjMgMTAwNzU1CitpbmRleCBmNzc1M2I4Li40NWRhMDMwIDEwMDc1NQogLS0tIGEvZ2FzL2NvbmZpZ3VyZQogKysrIGIvZ2FzL2NvbmZpZ3VyZQotQEAgLTY0Nyw4ICs2NDcsMTEgQEAgT1RPT0wKK0BAIC02NDgsOCArNjQ4LDExIEBAIE9UT09MCiAgTElQTwogIE5NRURJVAogIERTWU1VVElMCkBAIC0zOTEzLDcgKzM4NzcsNyBAQAogIE9CSkRVTVAKICBMTl9TCiAgTk0KLUBAIC03NTksNiArNzYyLDcgQEAgZW5hYmxlX3N0YXRpYworQEAgLTc2MSw2ICs3NjQsNyBAQCBlbmFibGVfc3RhdGljCiAgd2l0aF9waWMKICBlbmFibGVfZmFzdF9pbnN0YWxsCiAgd2l0aF9nbnVfbGQKQEAgLTM5MjEsMTYgKzM4ODUsNyBAQAogIGVuYWJsZV9saWJ0b29sX2xvY2sKICBlbmFibGVfcGx1Z2lucwogIGVuYWJsZV9sYXJnZWZpbGUKLUBAIC0xNDMwLDYgKzE0MzQsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKLSAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KLSAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KLSsgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCi0rICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCi0gICAtLXdpdGgtc3lzdGVtLXpsaWIgICAgICB1c2UgaW5zdGFsbGVkIGxpYnoKLSAKLSBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKLUBAIC00OTA5LDggKzQ5MTUsOCBAQCBlc2FjCitAQCAtNDkxOSw4ICs0OTIzLDggQEAgZXNhYwogIAogIAogIApAQCAtMzk0MSw3ICszODk2LDcgQEAKICAKICAKICAKLUBAIC00OTUwLDcgKzQ5NTYsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworQEAgLTQ5NjAsNyArNDk2NCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KICAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KQEAgLTM5NTAsNyArMzkwNSw3IEBACiAgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KICAgIEVDSE89J3ByaW50IC1yIC0tJwogIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtNTYzNiw4ICs1NjQyLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKK0BAIC01NjQ2LDggKzU2NTAsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OwogICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCiAgeHNpX3NoZWxsPW5vCiAgKCBfbHRfZHVtbXk9ImEvYi9jIgpAQCAtMzk2MSw3ICszOTE2LDcgQEAKICAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAogICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAogICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTU2ODYsNiArNTY5Miw4MCBAQCBlc2FjCitAQCAtNTY5Niw2ICs1NzAwLDgwIEBAIGVzYWMKICAKICAKICAKQEAgLTQwNDIsNyArMzk5Nyw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNTcwMiw2ICs1NzgyLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCitAQCAtNTcxMiw2ICs1NzkwLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCiAgZXNhYwogIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICBjYXNlICRob3N0X29zIGluCkBAIC00MDU0LDcgKzQwMDksNyBAQAogICAgZGFyd2luKikKICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1AQCAtNTg3MCw3ICs1OTU1LDggQEAgbWluZ3cqIHwgcHczMiopCitAQCAtNTg4MCw3ICs1OTYzLDggQEAgbWluZ3cqIHwgcHczMiopCiAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCiAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwogICAgZWxzZQpAQCAtNDA2NCw3ICs0MDE5LDcgQEAKICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwogICAgZmkKICAgIDs7Ci1AQCAtNjAyNCw2ICs2MTEwLDIxIEBAIGVzYWMKK0BAIC02MDM0LDYgKzYxMTgsMjEgQEAgZXNhYwogIGZpCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CiAgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CkBAIC00MDg2LDcgKzQwNDEsNyBAQAogIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAogIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAogIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotQEAgLTYwMzksOSArNjE0MCwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjA0OSw5ICs2MTQ4LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KICAKICAKICAKQEAgLTQyNTEsNyArNDIwNiw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQogIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjA1Nyw3ICs2MzExLDcgQEAgZG8KK0BAIC02MDY3LDcgKzYzMTksNyBAQCBkbwogICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCkBAIC00MjYwLDcgKzQyMTUsNyBAQAogICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICAgYnJlYWsgMgogICAgZmkKLUBAIC02MDc3LDExICs2MzMxLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CitAQCAtNjA4NywxMSArNjMzOSwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQogIGZpCiAgCiAgCkBAIC00Mjc5LDcgKzQyMzQsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTYwOTcsNyArNjM1NSw3IEBAIGRvCitAQCAtNjEwNyw3ICs2MzYzLDcgQEAgZG8KICAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgpAQCAtNDI4OCw3ICs0MjQzLDcgQEAKICAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgIGJyZWFrIDIKICAgIGZpCi1AQCAtNjExNiw2ICs2Mzc0LDEwIEBAIGVsc2UKK0BAIC02MTI2LDYgKzYzODIsMTAgQEAgZWxzZQogICRhc19lY2hvICJubyIgPiY2OyB9CiAgZmkKICAKQEAgLTQyOTksNyArNDI1NCw3IEBACiAgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KICAgICAgQVI9ImZhbHNlIgogICAgZWxzZQotQEAgLTYxMjcsMTIgKzYzODksMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CitAQCAtNjEzNywxMiArNjM5NywxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKICBlc2FjCiAgICAgIEFSPSRhY19jdF9BUgogICAgZmkKQEAgLTQzMTQsNyArNDI2OSw3IEBACiAgCiAgCiAgCi1AQCAtNjE0NCw2ICs2NDA0LDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CitAQCAtNjE1NCw2ICs2NDEyLDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CiAgCiAgCiAgCkBAIC00Mzc5LDcgKzQzMzQsNyBAQAogIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiAgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKLUBAIC02NDc4LDggKzY3OTYsOCBAQCBlc2FjCitAQCAtNjQ4OCw4ICs2ODA0LDggQEAgZXNhYwogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCiAgCiAgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCkBAIC00MzkwLDcgKzQzNDUsNyBAQAogIAogICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgogIG9wdF9jcj0KLUBAIC02NTE1LDYgKzY4MzMsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCitAQCAtNjUyNSw2ICs2ODQxLDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwogICAgZWxzZQogICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgogICAgZmkKQEAgLTQzOTgsNyArNDM1Myw3IEBACiAgCiAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KICAgIHBpcGVfd29ya3M9bm8KLUBAIC02NTU2LDYgKzY4NzUsMTggQEAgX0xUX0VPRgorQEAgLTY1NjYsNiArNjg4MywxOCBAQCBfTFRfRU9GCiAgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KICAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCiAgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKQEAgLTQ0MTcsNyArNDM3Miw3IEBACiAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgZXh0ZXJuICJDIiB7CiAgI2VuZGlmCi1AQCAtNjU2Nyw3ICs2ODk4LDcgQEAgX0xUX0VPRgorQEAgLTY1NzcsNyArNjkwNiw3IEBAIF9MVF9FT0YKICAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKICAKICAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCkBAIC00NDI2LDcgKzQzODEsNyBAQAogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHZvaWQgICAgICAgKmFkZHJlc3M7CiAgfQotQEAgLTY1OTMsOCArNjkyNCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CitAQCAtNjYwMyw4ICs2OTMyLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKICBfTFRfRU9GCiAgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KICAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKQEAgLTQ0MzcsNyArNDM5Miw3IEBACiAgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKICAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCiAgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1Ci1AQCAtNjYwNCw4ICs2OTM1LDggQEAgX0xUX0VPRgorQEAgLTY2MTQsOCArNjk0Myw4IEBAIF9MVF9FT0YKICAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogIAkgICAgcGlwZV93b3Jrcz15ZXMKICAJICBmaQpAQCAtNDQ0OCw3ICs0NDAzLDcgQEAKICAJZWxzZQogIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQogIAlmaQotQEAgLTY2NDIsNiArNjk3MywyMSBAQCBlbHNlCitAQCAtNjY1Miw2ICs2OTgxLDIxIEBAIGVsc2UKICAkYXNfZWNobyAib2siID4mNjsgfQogIGZpCiAgCkBAIC00NDcwLDcgKzQ0MjUsNyBAQAogIAogIAogIAotQEAgLTY2NjAsNiArNzAwNiw0MCBAQCBmaQorQEAgLTY2NzAsNiArNzAxNCw0MCBAQCBmaQogIAogIAogIApAQCAtNDUxMSw3ICs0NDY2LDcgQEAKICAKICAKICAKLUBAIC02ODY5LDYgKzcyNDksMTIzIEBAIGVzYWMKK0BAIC02ODc5LDYgKzcyNTcsMTIzIEBAIGVzYWMKICAKICBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKICAKQEAgLTQ2MzUsNyArNDU5MCw3IEBACiAgCiAgICBjYXNlICRob3N0X29zIGluCiAgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi1AQCAtNzQzMiw2ICs3OTI5LDggQEAgX0xUX0VPRgorQEAgLTc0NDIsNiArNzkzNyw4IEBAIF9MVF9FT0YKICAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKICAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CiAgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQpAQCAtNDY0NCw3ICs0NTk5LDcgQEAKICAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQogIF9MVF9FT0YKLUBAIC03NjI3LDcgKzgxMjYsOCBAQCBmaQorQEAgLTc2MzcsNyArODEzNCw4IEBAIGZpCiAgTElCVE9PTF9ERVBTPSIkbHRtYWluIgogIAogICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCkBAIC00NjU0LDcgKzQ2MDksNyBAQAogIAogIAogIAotQEAgLTc3MTYsNyArODIxNiw3IEBAIGFpeDMqKQorQEAgLTc3MjYsNyArODIyNCw3IEBAIGFpeDMqKQogIGVzYWMKICAKICAjIEdsb2JhbCB2YXJpYWJsZXM6CkBAIC00NjYzLDcgKzQ2MTgsNyBAQAogIGNhbl9idWlsZF9zaGFyZWQ9eWVzCiAgCiAgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi1AQCAtODAxNCw4ICs4NTE0LDYgQEAgZmkKK0BAIC04MDI0LDggKzg1MjIsNiBAQCBmaQogIGx0X3Byb2dfY29tcGlsZXJfcGljPQogIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogIApAQCAtNDY3Miw3ICs0NjI3LDcgQEAKICAKICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi1AQCAtODE4MSw2ICs4Njc5LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitAQCAtODE5MSw2ICs4Njg3LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CiAgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKICAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJwogIAk7OwpAQCAtNDY4NSw3ICs0NjQwLDcgQEAKICAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCiAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAogIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotQEAgLTgyNDMsNyArODc0Nyw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitAQCAtODI1Myw3ICs4NzU1LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCiAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCkBAIC00Njk0LDcgKzQ2NDksNyBAQAogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKICAgICAgICAqKQogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7Ci1AQCAtODMwMCwxMyArODgwNCwxNyBAQCBjYXNlICRob3N0X29zIGluCitAQCAtODMxMCwxMyArODgxMiwxNyBAQCBjYXNlICRob3N0X29zIGluCiAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCiAgICAgIDs7CiAgZXNhYwpAQCAtNDcxOCw3ICs0NjczLDcgQEAKICAKICAjCiAgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotQEAgLTgzNjcsNiArODg3NSwxMSBAQCBmaQorQEAgLTgzNzcsNiArODg4MywxMSBAQCBmaQogIAogIAogIApAQCAtNDczMCw3ICs0Njg1LDcgQEAKICAjCiAgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgogICMKLUBAIC04NzE3LDcgKzkyMzAsOCBAQCBfTFRfRU9GCitAQCAtODcyNyw3ICs5MjM4LDggQEAgX0xUX0VPRgogICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCiAgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCiAgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKQEAgLTQ3NDAsNyArNDY5NSw3IEBACiAgCiAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLUBAIC04ODE2LDEyICs5MzMwLDEyIEBAIF9MVF9FT0YKK0BAIC04ODI2LDEyICs5MzM4LDEyIEBAIF9MVF9FT0YKICAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJwpAQCAtNDc1NSw3ICs0NzEwLDcgQEAKICAJICBmaQogIAkgIDs7CiAgCWVzYWMKLUBAIC04ODM1LDggKzkzNDksOCBAQCBfTFRfRU9GCitAQCAtODg0NSw4ICs5MzU3LDggQEAgX0xUX0VPRgogIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCiAgCXdsYXJjPQogICAgICAgIGVsc2UKQEAgLTQ3NjYsNyArNDcyMSw3IEBACiAgICAgICAgZmkKICAgICAgICA7OwogIAotQEAgLTg4NTQsOCArOTM2OCw4IEBAIF9MVF9FT0YKK0BAIC04ODY0LDggKzkzNzYsOCBAQCBfTFRfRU9GCiAgCiAgX0xUX0VPRgogICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgpAQCAtNDc3Nyw3ICs0NzMyLDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtODkwMSw4ICs5NDE1LDggQEAgX0xUX0VPRgorQEAgLTg5MTEsOCArOTQyMyw4IEBAIF9MVF9FT0YKICAKICAgICAgKikKICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCkBAIC00Nzg4LDcgKzQ3NDMsNyBAQAogICAgICAgIGVsc2UKICAJbGRfc2hsaWJzPW5vCiAgICAgICAgZmkKLUBAIC05MDMyLDcgKzk1NDYsMTMgQEAgX0xUX0VPRgorQEAgLTkwNDIsNyArOTU1NCwxMyBAQCBfTFRfRU9GCiAgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCiAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KICAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KQEAgLTQ4MDMsNyArNDc1OCw3IEBACiAgLyogZW5kIGNvbmZkZWZzLmguICAqLwogIAogIGludAotQEAgLTkwNDUsMjIgKzk1NjUsMjkgQEAgbWFpbiAoKQorQEAgLTkwNTUsMjIgKzk1NzMsMjkgQEAgbWFpbiAoKQogIF9BQ0VPRgogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAKQEAgLTQ4NDYsNyArNDgwMSw3IEBACiAgCiAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLUBAIC05MDcyLDcgKzk1OTksMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTA4Miw3ICs5NjA3LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAllbHNlCiAgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KICAJICMgZW1wdHkgZXhlY3V0YWJsZS4KQEAgLTQ4NjEsNyArNDgxNiw3IEBACiAgLyogZW5kIGNvbmZkZWZzLmguICAqLwogIAogIGludAotQEAgLTkwODUsMjIgKzk2MTgsMjkgQEAgbWFpbiAoKQorQEAgLTkwOTUsMjIgKzk2MjYsMjkgQEAgbWFpbiAoKQogIF9BQ0VPRgogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAKQEAgLTQ5MDQsNyArNDg1OSw3IEBACiAgCiAgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi1AQCAtOTE0NSwyMCArOTY4NSw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05MTU1LDIwICs5NjkzLDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCiAgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwogICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCkBAIC00OTgyLDcgKzQ5MzcsNyBAQAogICAgICAgIDs7CiAgCiAgICAgIGRhcndpbiogfCByaGFwc29keSopCi1AQCAtOTIxOSw3ICs5ODAyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTIyOSw3ICs5ODEwLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQpAQCAtNDk5MSw3ICs0OTQ2LDcgQEAKICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCiAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwogICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLUBAIC05MjI3LDcgKzk4MTAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05MjM3LDcgKzk4MTgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAKICAgICAgaHB1eDkqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCkBAIC01MDAwLDcgKzQ5NTUsNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgICBmaQotQEAgLTkyNDMsNyArOTgyNiw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTkyNTMsNyArOTgzNCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICBocHV4MTAqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgpAQCAtNTAwOSw3ICs0OTY0LDcgQEAKICAgICAgICBlbHNlCiAgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgICBmaQotQEAgLTkyNjcsMTAgKzk4NTAsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTI3NywxMCArOTg1OCwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogIAkgIDs7CiAgCWlhNjQqKQpAQCAtNTAyMiw3ICs0OTc3LDcgQEAKICAJICA7OwogIAllc2FjCiAgICAgICAgZWxzZQotQEAgLTkzNDksMjMgKzk5MzIsMzYgQEAgZmkKK0BAIC05MzU5LDIzICs5OTQwLDM2IEBAIGZpCiAgCiAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KQEAgLTUwNjcsNyArNTAyMiw3IEBACiAgICAgICAgZWxzZQogIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLUBAIC05NDUwLDcgKzEwMDQ2LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitAQCAtOTQ2MCw3ICsxMDA1NCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCkBAIC01MDc2LDcgKzUwMzEsNyBAQAogIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICAgZWxzZQogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLUBAIC05NDY5LDkgKzEwMDY1LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitAQCAtOTQ3OSw5ICsxMDA3Myw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogIAl3bGFyYz0nJHt3bH0nCkBAIC01MDg4LDcgKzUwNDMsNyBAQAogICAgICAgIGVsc2UKICAJY2FzZSBgJENDIC1WIDI+JjFgIGluCiAgCSoiQ29tcGlsZXJzIDUuMCIqKQotQEAgLTEwMDQ3LDggKzEwNjQzLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorQEAgLTEwMDU3LDggKzEwNjUxLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgbmVlZF92ZXJzaW9uPW5vCiAgICBuZWVkX2xpYl9wcmVmaXg9bm8KICAKQEAgLTUxMDAsNyArNTA1NSw3IEBACiAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKICAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci1AQCAtMTAwODEsMTMgKzEwNjc4LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKK0BAIC0xMDA5MSwxMyArMTA2ODYsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKICAgICAgICA7OwogICAgICBlc2FjCkBAIC01MTczLDcgKzUxMjgsNyBAQAogICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCiAgICBzaGxpYnBhdGhfdmFyPVBBVEgKICAgIDs7Ci1AQCAtMTAxNzksNyArMTA4MzQsNyBAQCBoYWlrdSopCitAQCAtMTAxODksNyArMTA4NDIsNyBAQCBoYWlrdSopCiAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwogICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKQEAgLTUxODIsMTYgKzUxMzcsNyBAQAogICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICAgOzsKICAKLUBAIC0xMDk3NSw3ICsxMTYzMCw3IEBAIGVsc2UKLSAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotLSNsaW5lIDEwOTc4ICJjb25maWd1cmUiCi0rI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotICNpbmNsdWRlICJjb25mZGVmcy5oIgotIAotICNpZiBIQVZFX0RMRkNOX0gKLUBAIC0xMTAxOSwxMCArMTE2NzQsMTAgQEAgZWxzZQorQEAgLTExMDI5LDEwICsxMTY4MiwxMCBAQCBlbHNlCiAgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KICAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKQEAgLTUyMDQsMTYgKzUxNTAsNyBAQAogIGludCBtYWluICgpCiAgewogICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci1AQCAtMTEwODEsNyArMTE3MzYsNyBAQCBlbHNlCi0gICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLS0jbGluZSAxMTA4NCAiY29uZmlndXJlIgotKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSAjaW5jbHVkZSAiY29uZmRlZnMuaCIKLSAKLSAjaWYgSEFWRV9ETEZDTl9ICi1AQCAtMTExMjUsMTAgKzExNzgwLDEwIEBAIGVsc2UKK0BAIC0xMTEzNSwxMCArMTE3ODgsMTAgQEAgZWxzZQogIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCiAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCkBAIC01MjI2LDcgKzUxNjMsNyBAQAogIGludCBtYWluICgpCiAgewogICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci1AQCAtMTUyNzYsMTMgKzE1OTMxLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTM1MCwxMyArMTYwMDMsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtNTI0Nyw3ICs1MTg0LDcgQEAKICBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE1Mjk3LDE0ICsxNTk1OSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorQEAgLTE1MzcxLDE0ICsxNjAzMSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTUyNjYsNyArNTIwMyw3IEBACiAgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTUzMzcsMTIgKzE2MDAyLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCitAQCAtMTU0MTEsMTIgKzE2MDc0LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCiAgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtNTI4MCw3ICs1MjE3LDcgQEAKICBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE1Mzk3LDggKzE2MDYyLDEzIEBAIHJlbG9hZF9mbGFnIFwKK0BAIC0xNTQ3MSw4ICsxNjEzNCwxMyBAQCByZWxvYWRfZmxhZyBcCiAgT0JKRFVNUCBcCiAgZGVwbGlic19jaGVja19tZXRob2QgXAogIGZpbGVfbWFnaWNfY21kIFwKQEAgLTUyOTQsNyArNTIzMSw3IEBACiAgU1RSSVAgXAogIFJBTkxJQiBcCiAgQ0MgXAotQEAgLTE1NDA4LDEyICsxNjA3OCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKK0BAIC0xNTQ4MiwxMiArMTYxNTAsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKQEAgLTUzMTAsNyArNTI0Nyw3IEBACiAgRFNZTVVUSUwgXAogIE5NRURJVCBcCiAgTElQTyBcCi1AQCAtMTU0MjksNyArMTYxMDEsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCitAQCAtMTU1MDMsNyArMTYxNzMsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCiAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCiAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCiAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCkBAIC01MzE4LDcgKzUyNTUsNyBAQAogIGV4Y2x1ZGVfZXhwc3ltcyBcCiAgaW5jbHVkZV9leHBzeW1zIFwKICBmaWxlX2xpc3Rfc3BlYyBcCi1AQCAtMTU0NjUsNiArMTYxMzYsNyBAQCBtb2R1bGVfY21kcyBcCitAQCAtMTU1MzksNiArMTYyMDgsNyBAQCBtb2R1bGVfY21kcyBcCiAgbW9kdWxlX2V4cHN5bV9jbWRzIFwKICBleHBvcnRfc3ltYm9sc19jbWRzIFwKICBwcmVsaW5rX2NtZHMgXApAQCAtNTMyNiw3ICs1MjYzLDcgQEAKICBwb3N0aW5zdGFsbF9jbWRzIFwKICBwb3N0dW5pbnN0YWxsX2NtZHMgXAogIGZpbmlzaF9jbWRzIFwKLUBAIC0xNjIyOSw3ICsxNjkwMSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKK0BAIC0xNjMwMyw3ICsxNjk3Myw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKICAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KICAjCiAgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKQEAgLTUzMzYsNyArNTI3Myw3IEBACiAgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKICAjCiAgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgotQEAgLTE2MzMyLDE5ICsxNzAwNSw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKK0BAIC0xNjQwNiwxOSArMTcwNzcsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCiAgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgogIE5MMlNQPSRsdF9sdF9OTDJTUAogIApAQCAtNTM4MCw3ICs1MzE3LDcgQEAKICAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgogIFNUUklQPSRsdF9TVFJJUAogIAotQEAgLTE2Mzc0LDYgKzE3MDcwLDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCitAQCAtMTY0NDgsNiArMTcxNDIsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKICAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgogIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAogIApAQCAtNTM5Myw3ICs1MzMwLDcgQEAKICAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KICBvYmpkaXI9JG9iamRpcgogIAotQEAgLTE2MzgzLDYgKzE3MDg1LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKK0BAIC0xNjQ1Nyw2ICsxNzE1Nyw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECiAgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KICBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCiAgCkBAIC01NDAzLDcgKzUzNDAsNyBAQAogICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KICBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKICAKLUBAIC0xNjQ5NywxMiArMTcyMDIsMTIgQEAgd2l0aF9nY2M9JEdDQworQEAgLTE2NTcxLDEyICsxNzI3NCwxMiBAQCB3aXRoX2djYz0kR0NDCiAgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgogIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKICAKQEAgLTU0MTksNyArNTM1Niw3IEBACiAgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgogIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCiAgCi1AQCAtMTY1ODksOSArMTcyOTQsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCitAQCAtMTY2NjMsOSArMTczNjYsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCiAgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCiAgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwogIApAQCAtNTQyOSw3ICs1MzY2LDcgQEAKICAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scwogIAotQEAgLTE2NjA3LDYgKzE3MzA5LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKK0BAIC0xNjY4MSw2ICsxNzM4MSw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCiAgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KICBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcwogIApAQCAtNTQzOSw3ICs1Mzc2LDcgQEAKICAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KICBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKICAKLUBAIC0xNjYzOSwyMTAgKzE3MzQ0LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK0BAIC0xNjcxMywyMTAgKzE3NDE2LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKICAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KICAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCiAgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwpAQCAtNTgxNCwxMCArNTc1MSwxMCBAQAogICAgY2htb2QgK3ggIiRvZmlsZSIKICAKIGRpZmYgLS1naXQgYS9ncHJvZi9jb25maWd1cmUgYi9ncHJvZi9jb25maWd1cmUKLWluZGV4IGQ0ZGI1NTQuLjc4YjI5MmMgMTAwNzU1CitpbmRleCA2MjZlMWM3Li5hODg3MTljIDEwMDc1NQogLS0tIGEvZ3Byb2YvY29uZmlndXJlCiArKysgYi9ncHJvZi9jb25maWd1cmUKLUBAIC02MjksOCArNjI5LDExIEBAIE9UT09MCitAQCAtNjMwLDggKzYzMCwxMSBAQCBPVE9PTAogIExJUE8KICBOTUVESVQKICBEU1lNVVRJTApAQCAtNTgyOSw3ICs1NzY2LDcgQEAKICBPQkpEVU1QCiAgTE5fUwogIE5NCi1AQCAtNzQxLDYgKzc0NCw3IEBAIGVuYWJsZV9zdGF0aWMKK0BAIC03NDMsNiArNzQ2LDcgQEAgZW5hYmxlX3N0YXRpYwogIHdpdGhfcGljCiAgZW5hYmxlX2Zhc3RfaW5zdGFsbAogIHdpdGhfZ251X2xkCkBAIC01ODM3LDcgKzU3NzQsNyBAQAogIGVuYWJsZV9saWJ0b29sX2xvY2sKICBlbmFibGVfcGx1Z2lucwogIGVuYWJsZV9sYXJnZWZpbGUKLUBAIC0xMzk5LDYgKzE0MDMsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKK0BAIC0xNDAxLDYgKzE0MDUsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKICAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KICAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KQEAgLTU4NDYsNyArNTc4Myw3IEBACiAgCiAgU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAgICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKLUBAIC00ODMxLDggKzQ4MzcsOCBAQCBlc2FjCitAQCAtNDgzNSw4ICs0ODQxLDggQEAgZXNhYwogIAogIAogIApAQCAtNTg1Nyw3ICs1Nzk0LDcgQEAKICAKICAKICAKLUBAIC00ODcyLDcgKzQ4NzgsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworQEAgLTQ4NzYsNyArNDg4Miw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KICAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KQEAgLTU4NjYsNyArNTgwMyw3IEBACiAgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KICAgIEVDSE89J3ByaW50IC1yIC0tJwogIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtNTU1OCw4ICs1NTY0LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKK0BAIC01NTYyLDggKzU1NjgsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OwogICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCiAgeHNpX3NoZWxsPW5vCiAgKCBfbHRfZHVtbXk9ImEvYi9jIgpAQCAtNTg3Nyw3ICs1ODE0LDcgQEAKICAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAogICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAogICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTU2MDgsNiArNTYxNCw4MCBAQCBlc2FjCitAQCAtNTYxMiw2ICs1NjE4LDgwIEBAIGVzYWMKICAKICAKICAKQEAgLTU5NTgsNyArNTg5NSw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNTYyNCw2ICs1NzA0LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCitAQCAtNTYyOCw2ICs1NzA4LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCiAgZXNhYwogIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICBjYXNlICRob3N0X29zIGluCkBAIC01OTcwLDcgKzU5MDcsNyBAQAogICAgZGFyd2luKikKICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1AQCAtNTc5Miw3ICs1ODc3LDggQEAgbWluZ3cqIHwgcHczMiopCitAQCAtNTc5Niw3ICs1ODgxLDggQEAgbWluZ3cqIHwgcHczMiopCiAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCiAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwogICAgZWxzZQpAQCAtNTk4MCw3ICs1OTE3LDcgQEAKICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwogICAgZmkKICAgIDs7Ci1AQCAtNTg2OSwxMSArNTk1NSw2IEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKK0BAIC01ODczLDExICs1OTU5LDYgQEAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQogICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgIDs7CiAgCkBAIC01OTkyLDcgKzU5MjksNyBAQAogIG5ldGJzZCopCiAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKLUBAIC01OTUxLDYgKzYwMzIsMjEgQEAgZXNhYworQEAgLTU5NTUsNiArNjAzNiwyMSBAQCBlc2FjCiAgZmkKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKICAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KQEAgLTYwMTQsNyArNTk1MSw3IEBACiAgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCiAgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCiAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi1AQCAtNTk2Niw5ICs2MDYyLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC01OTcwLDkgKzYwNjYsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgogIAogIAogIApAQCAtNjE3OSw3ICs2MTE2LDcgQEAKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC01OTg0LDcgKzYyMzMsNyBAQCBkbworQEAgLTU5ODgsNyArNjIzNyw3IEBAIGRvCiAgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KQEAgLTYxODgsNyArNjEyNSw3IEBACiAgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgICBicmVhayAyCiAgICBmaQotQEAgLTYwMDQsMTEgKzYyNTMsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KK0BAIC02MDA4LDExICs2MjU3LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CiAgZmkKICAKICAKQEAgLTYyMDcsNyArNjE0NCw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQogIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjAyNCw3ICs2Mjc3LDcgQEAgZG8KK0BAIC02MDI4LDcgKzYyODEsNyBAQCBkbwogICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCkBAIC02MjE2LDcgKzYxNTMsNyBAQAogICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICAgYnJlYWsgMgogICAgZmkKLUBAIC02MDQzLDYgKzYyOTYsMTAgQEAgZWxzZQorQEAgLTYwNDcsNiArNjMwMCwxMCBAQCBlbHNlCiAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KICBmaQogIApAQCAtNjIyNyw3ICs2MTY0LDcgQEAKICAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgogICAgICBBUj0iZmFsc2UiCiAgICBlbHNlCi1AQCAtNjA1NCwxMiArNjMxMSwxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKK0BAIC02MDU4LDEyICs2MzE1LDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OwogIGVzYWMKICAgICAgQVI9JGFjX2N0X0FSCiAgICBmaQpAQCAtNjI0Miw3ICs2MTc5LDcgQEAKICAKICAKICAKLUBAIC02MDcxLDYgKzYzMjYsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKK0BAIC02MDc1LDYgKzYzMzAsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKICAKICAKICAKQEAgLTYzMDcsNyArNjI0NCw3IEBACiAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgogICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KICBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgotQEAgLTY0MDUsOCArNjcxOCw4IEBAIGVzYWMKK0BAIC02NDA5LDggKzY3MjIsOCBAQCBlc2FjCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKICAKICAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKQEAgLTYzMTgsNyArNjI1NSw3IEBACiAgCiAgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCiAgb3B0X2NyPQotQEAgLTY0NDIsNiArNjc1NSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KK0BAIC02NDQ2LDYgKzY3NTksNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCiAgICBlbHNlCiAgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCiAgICBmaQpAQCAtNjMyNiw3ICs2MjYzLDcgQEAKICAKICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgogICAgcGlwZV93b3Jrcz1ubwotQEAgLTY0ODMsNiArNjc5NywxOCBAQCBfTFRfRU9GCitAQCAtNjQ4Nyw2ICs2ODAxLDE4IEBAIF9MVF9FT0YKICAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgogIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KICAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dApAQCAtNjM0NSw3ICs2MjgyLDcgQEAKICAjaWZkZWYgX19jcGx1c3BsdXMKICBleHRlcm4gIkMiIHsKICAjZW5kaWYKLUBAIC02NDk0LDcgKzY4MjAsNyBAQCBfTFRfRU9GCitAQCAtNjQ5OCw3ICs2ODI0LDcgQEAgX0xUX0VPRgogIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAogIAogIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KQEAgLTYzNTQsNyArNjI5MSw3IEBACiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgdm9pZCAgICAgICAqYWRkcmVzczsKICB9Ci1AQCAtNjUyMCw4ICs2ODQ2LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKK0BAIC02NTI0LDggKzY4NTAsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewogIF9MVF9FT0YKICAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgogIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dApAQCAtNjM2NSw3ICs2MzAyLDcgQEAKICAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgogIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKICAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLUBAIC02NTMxLDggKzY4NTcsOCBAQCBfTFRfRU9GCitAQCAtNjUzNSw4ICs2ODYxLDggQEAgX0xUX0VPRgogICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgCSAgICBwaXBlX3dvcmtzPXllcwogIAkgIGZpCkBAIC02Mzc2LDcgKzYzMTMsNyBAQAogIAllbHNlCiAgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CiAgCWZpCi1AQCAtNjU2OSw2ICs2ODk1LDE4IEBAIGVsc2UKK0BAIC02NTczLDYgKzY4OTksMTggQEAgZWxzZQogICRhc19lY2hvICJvayIgPiY2OyB9CiAgZmkKICAKQEAgLTYzOTUsNyArNjMzMiw3IEBACiAgCiAgCiAgCi1AQCAtNjU5MCw2ICs2OTI4LDQzIEBAIGZpCitAQCAtNjU5NCw2ICs2OTMyLDQzIEBAIGZpCiAgCiAgCiAgCkBAIC02NDM5LDcgKzYzNzYsNyBAQAogICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgogIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7Ci1AQCAtNjc5Niw2ICs3MTcxLDEyMyBAQCBlc2FjCitAQCAtNjgwMCw2ICs3MTc1LDEyMyBAQCBlc2FjCiAgCiAgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCiAgCkBAIC02NTYzLDcgKzY1MDAsNyBAQAogIAogICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICByaGFwc29keSogfCBkYXJ3aW4qKQotQEAgLTczNTksNiArNzg1MSw4IEBAIF9MVF9FT0YKK0BAIC03MzYzLDYgKzc4NTUsOCBAQCBfTFRfRU9GCiAgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CiAgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQogICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKQEAgLTY1NzIsNyArNjUwOSw3IEBACiAgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCiAgaW50IG1haW4oKSB7IHJldHVybiAwO30KICBfTFRfRU9GCi1AQCAtNzU1NCw3ICs4MDQ4LDggQEAgZmkKK0BAIC03NTU4LDcgKzgwNTIsOCBAQCBmaQogIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKICAKICAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgpAQCAtNjU4Miw3ICs2NTE5LDcgQEAKICAKICAKICAKLUBAIC03NjQzLDcgKzgxMzgsNyBAQCBhaXgzKikKK0BAIC03NjQ3LDcgKzgxNDIsNyBAQCBhaXgzKikKICBlc2FjCiAgCiAgIyBHbG9iYWwgdmFyaWFibGVzOgpAQCAtNjU5MSw3ICs2NTI4LDcgQEAKICBjYW5fYnVpbGRfc2hhcmVkPXllcwogIAogICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotQEAgLTc5NDEsOCArODQzNiw2IEBAIGZpCitAQCAtNzk0NSw4ICs4NDQwLDYgQEAgZmkKICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KICAKQEAgLTY2MDAsNyArNjUzNyw3IEBACiAgCiAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotQEAgLTgxMDgsNiArODYwMSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorQEAgLTgxMTIsNiArODYwNSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQogIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCiAgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKICAJOzsKQEAgLTY2MTMsNyArNjU1MCw3IEBACiAgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKICAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLUBAIC04MTcwLDcgKzg2NjksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorQEAgLTgxNzQsNyArODY3Myw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CiAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgpAQCAtNjYyMiw3ICs2NTU5LDcgQEAKICAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CiAgICAgICAgKikKICAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OwotQEAgLTgyMjcsMTMgKzg3MjYsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorQEAgLTgyMzEsMTMgKzg3MzAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgogICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgogICAgICA7OwogIGVzYWMKQEAgLTY2NDYsNyArNjU4Myw3IEBACiAgCiAgIwogICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLUBAIC04Mjk0LDYgKzg3OTcsMTEgQEAgZmkKK0BAIC04Mjk4LDYgKzg4MDEsMTEgQEAgZmkKICAKICAKICAKQEAgLTY2NTgsNyArNjU5NSw3IEBACiAgIwogICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICAjCi1AQCAtODY0NCw3ICs5MTUyLDggQEAgX0xUX0VPRgorQEAgLTg2NDgsNyArOTE1Niw4IEBAIF9MVF9FT0YKICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCkBAIC02NjY4LDcgKzY2MDUsNyBAQAogIAogICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi1AQCAtODc0MywxMiArOTI1MiwxMiBAQCBfTFRfRU9GCitAQCAtODc0NywxMiArOTI1NiwxMiBAQCBfTFRfRU9GCiAgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCiAgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKQEAgLTY2ODMsNyArNjYyMCw3IEBACiAgCSAgZmkKICAJICA7OwogIAllc2FjCi1AQCAtODc2Miw4ICs5MjcxLDggQEAgX0xUX0VPRgorQEAgLTg3NjYsOCArOTI3NSw4IEBAIF9MVF9FT0YKICAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogIAl3bGFyYz0KICAgICAgICBlbHNlCkBAIC02Njk0LDcgKzY2MzEsNyBAQAogICAgICAgIGZpCiAgICAgICAgOzsKICAKLUBAIC04NzgxLDggKzkyOTAsOCBAQCBfTFRfRU9GCitAQCAtODc4NSw4ICs5Mjk0LDggQEAgX0xUX0VPRgogIAogIF9MVF9FT0YKICAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KQEAgLTY3MDUsNyArNjY0Miw3IEBACiAgICAgICAgZWxzZQogIAlsZF9zaGxpYnM9bm8KICAgICAgICBmaQotQEAgLTg4MjgsOCArOTMzNyw4IEBAIF9MVF9FT0YKK0BAIC04ODMyLDggKzkzNDEsOCBAQCBfTFRfRU9GCiAgCiAgICAgICopCiAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgpAQCAtNjcxNiw3ICs2NjUzLDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtODk1OSw3ICs5NDY4LDEzIEBAIF9MVF9FT0YKK0BAIC04OTYzLDcgKzk0NzIsMTMgQEAgX0xUX0VPRgogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwogICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC02NzMxLDcgKzY2NjgsNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC04OTcyLDIyICs5NDg3LDI5IEBAIG1haW4gKCkKK0BAIC04OTc2LDIyICs5NDkxLDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC02Nzc0LDcgKzY3MTEsNyBAQAogIAogICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi1AQCAtODk5OSw3ICs5NTIxLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTkwMDMsNyArOTUyNSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJZWxzZQogIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC02Nzg5LDcgKzY3MjYsNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC05MDEyLDIyICs5NTQwLDI5IEBAIG1haW4gKCkKK0BAIC05MDE2LDIyICs5NTQ0LDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC02ODMyLDcgKzY3NjksNyBAQAogIAogIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTkwNzIsMjAgKzk2MDcsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTA3NiwyMCArOTYxMSw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgogICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKICAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgpAQCAtNjkxMCw3ICs2ODQ3LDcgQEAKICAgICAgICA7OwogIAogICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotQEAgLTkxNDYsNyArOTcyNCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTkxNTAsNyArOTcyOCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCiAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKQEAgLTY5MTksNyArNjg1Niw3IEBACiAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwogICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi1AQCAtOTE1NCw3ICs5NzMyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTE1OCw3ICs5NzM2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgIGhwdXg5KikKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgpAQCAtNjkyOCw3ICs2ODY1LDcgQEAKICAgICAgICBlbHNlCiAgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICAgZmkKLUBAIC05MTcwLDcgKzk3NDgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05MTc0LDcgKzk3NTIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAKICAgICAgaHB1eDEwKikKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KQEAgLTY5MzcsNyArNjg3NCw3IEBACiAgICAgICAgZWxzZQogIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICAgZmkKLUBAIC05MTk0LDEwICs5NzcyLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTkxOTgsMTAgKzk3NzYsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAJICA7OwogIAlpYTY0KikKQEAgLTY5NTAsNyArNjg4Nyw3IEBACiAgCSAgOzsKICAJZXNhYwogICAgICAgIGVsc2UKLUBAIC05Mjc2LDIzICs5ODU0LDM2IEBAIGZpCitAQCAtOTI4MCwyMyArOTg1OCwzNiBAQCBmaQogIAogICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCkBAIC02OTk1LDcgKzY5MzIsNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi1AQCAtOTM3Nyw3ICs5OTY4LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitAQCAtOTM4MSw3ICs5OTcyLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKQEAgLTcwMDQsNyArNjk0MSw3IEBACiAgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgICBlbHNlCiAgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotQEAgLTkzOTYsOSArOTk4Nyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorQEAgLTk0MDAsOSArOTk5MSw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogIAl3bGFyYz0nJHt3bH0nCkBAIC03MDE2LDcgKzY5NTMsNyBAQAogICAgICAgIGVsc2UKICAJY2FzZSBgJENDIC1WIDI+JjFgIGluCiAgCSoiQ29tcGlsZXJzIDUuMCIqKQotQEAgLTk5NzQsOCArMTA1NjUsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCitAQCAtOTk3OCw4ICsxMDU2OSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgIG5lZWRfdmVyc2lvbj1ubwogICAgbmVlZF9saWJfcHJlZml4PW5vCiAgCkBAIC03MDI4LDcgKzY5NjUsNyBAQAogICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwogICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCiAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotQEAgLTEwMDA4LDEzICsxMDYwMCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCitAQCAtMTAwMTIsMTMgKzEwNjA0LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCiAgICAgICAgOzsKICAgICAgZXNhYwpAQCAtNzEwMSw3ICs3MDM4LDcgQEAKICAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgogICAgc2hsaWJwYXRoX3Zhcj1QQVRICiAgICA7OwotQEAgLTEwMTA2LDcgKzEwNzU2LDcgQEAgaGFpa3UqKQorQEAgLTEwMTEwLDcgKzEwNzYwLDcgQEAgaGFpa3UqKQogICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICiAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCkBAIC03MTEwLDE2ICs3MDQ3LDcgQEAKICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgIDs7CiAgCi1AQCAtMTA5MDIsNyArMTE1NTIsNyBAQCBlbHNlCi0gICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLS0jbGluZSAxMDkwMCAiY29uZmlndXJlIgotKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSAjaW5jbHVkZSAiY29uZmRlZnMuaCIKLSAKLSAjaWYgSEFWRV9ETEZDTl9ICi1AQCAtMTA5NDYsMTAgKzExNTk2LDEwIEBAIGVsc2UKK0BAIC0xMDk1MCwxMCArMTE2MDAsMTAgQEAgZWxzZQogIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCiAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCkBAIC03MTMyLDE2ICs3MDYwLDcgQEAKICBpbnQgbWFpbiAoKQogIHsKICAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTExMDA4LDcgKzExNjU4LDcgQEAgZWxzZQotICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0tI2xpbmUgMTEwMDYgImNvbmZpZ3VyZSIKLSsjbGluZSAkTElORU5PICJjb25maWd1cmUiCi0gI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0gCi0gI2lmIEhBVkVfRExGQ05fSAotQEAgLTExMDUyLDEwICsxMTcwMiwxMCBAQCBlbHNlCitAQCAtMTEwNTYsMTAgKzExNzA2LDEwIEBAIGVsc2UKICAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCiAgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwogICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQpAQCAtNzE1NCw3ICs3MDczLDcgQEAKICBpbnQgbWFpbiAoKQogIHsKICAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTEyOTI0LDEzICsxMzU3NCwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTI5NjEsMTMgKzEzNjExLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTcxNzUsNyArNzA5NCw3IEBACiAgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xMjk0NSwxNCArMTM2MDIsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKK0BAIC0xMjk4MiwxNCArMTM2MzksMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCkBAIC03MTk0LDcgKzcxMTMsNyBAQAogIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTEyOTg1LDEyICsxMzY0NSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorQEAgLTEzMDIyLDEyICsxMzY4MiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQogIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTcyMDgsNyArNzEyNyw3IEBACiAgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xMzA0NSw4ICsxMzcwNSwxMyBAQCByZWxvYWRfZmxhZyBcCitAQCAtMTMwODIsOCArMTM3NDIsMTMgQEAgcmVsb2FkX2ZsYWcgXAogIE9CSkRVTVAgXAogIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKICBmaWxlX21hZ2ljX2NtZCBcCkBAIC03MjIyLDcgKzcxNDEsNyBAQAogIFNUUklQIFwKICBSQU5MSUIgXAogIENDIFwKLUBAIC0xMzA1NiwxMiArMTM3MjEsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitAQCAtMTMwOTMsMTIgKzEzNzU4LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCkBAIC03MjM4LDcgKzcxNTcsNyBAQAogIERTWU1VVElMIFwKICBOTUVESVQgXAogIExJUE8gXAotQEAgLTEzMDc3LDcgKzEzNzQ0LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorQEAgLTEzMTE0LDcgKzEzNzgxLDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAogIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAogIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAogIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXApAQCAtNzI0Niw3ICs3MTY1LDcgQEAKICBleGNsdWRlX2V4cHN5bXMgXAogIGluY2x1ZGVfZXhwc3ltcyBcCiAgZmlsZV9saXN0X3NwZWMgXAotQEAgLTEzMTEzLDYgKzEzNzc5LDcgQEAgbW9kdWxlX2NtZHMgXAorQEAgLTEzMTUwLDYgKzEzODE2LDcgQEAgbW9kdWxlX2NtZHMgXAogIG1vZHVsZV9leHBzeW1fY21kcyBcCiAgZXhwb3J0X3N5bWJvbHNfY21kcyBcCiAgcHJlbGlua19jbWRzIFwKQEAgLTcyNTQsNyArNzE3Myw3IEBACiAgcG9zdGluc3RhbGxfY21kcyBcCiAgcG9zdHVuaW5zdGFsbF9jbWRzIFwKICBmaW5pc2hfY21kcyBcCi1AQCAtMTM4NjksNyArMTQ1MzYsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CitAQCAtMTM5MDYsNyArMTQ1NzMsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CiAgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCiAgIwogICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCkBAIC03MjY0LDcgKzcxODMsNyBAQAogICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CiAgIwogICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KLUBAIC0xMzk3MiwxOSArMTQ2NDAsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCitAQCAtMTQwMDksMTkgKzE0Njc3LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAogICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KICBOTDJTUD0kbHRfbHRfTkwyU1AKICAKQEAgLTczMDgsNyArNzIyNyw3IEBACiAgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KICBTVFJJUD0kbHRfU1RSSVAKICAKLUBAIC0xNDAxNCw2ICsxNDcwNSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworQEAgLTE0MDUxLDYgKzE0NzQyLDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCiAgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KICBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKICAKQEAgLTczMjEsNyArNzI0MCw3IEBACiAgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCiAgb2JqZGlyPSRvYmpkaXIKICAKLUBAIC0xNDAyMyw2ICsxNDcyMCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECitAQCAtMTQwNjAsNiArMTQ3NTcsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAogICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CiAgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwogIApAQCAtNzMzMSw3ICs3MjUwLDcgQEAKICAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCiAgRFNZTVVUSUw9JGx0X0RTWU1VVElMCiAgCi1AQCAtMTQxMzcsMTIgKzE0ODM3LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKK0BAIC0xNDE3NCwxMiArMTQ4NzQsMTIgQEAgd2l0aF9nY2M9JEdDQwogICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KICBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCiAgCkBAIC03MzQ3LDcgKzcyNjYsNyBAQAogICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KICBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwogIAotQEAgLTE0MjI5LDkgKzE0OTI5LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorQEAgLTE0MjY2LDkgKzE0OTY2LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAogICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgogIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKICAKQEAgLTczNTcsNyArNzI3Niw3IEBACiAgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCiAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKICAKLUBAIC0xNDI0Nyw2ICsxNDk0NCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCitAQCAtMTQyODQsNiArMTQ5ODEsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwogICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCiAgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKICAKQEAgLTczNjcsNyArNzI4Niw3IEBACiAgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCiAgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCiAgCi1AQCAtMTQyNzksMjEwICsxNDk3OSwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitAQCAtMTQzMTYsMjEwICsxNTAxNiwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCiAgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCiAgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQogICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KQEAgLTc3NDIsMTAgKzc2NjEsMTAgQEAKICAgIGNobW9kICt4ICIkb2ZpbGUiCiAgCiBkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCi1pbmRleCA4MDk1YjcxLi5lYjRmMGQ3IDEwMDc1NQoraW5kZXggZjliZTUxYS4uM2RmMTE0OSAxMDA3NTUKIC0tLSBhL2xkL2NvbmZpZ3VyZQogKysrIGIvbGQvY29uZmlndXJlCi1AQCAtNjU3LDggKzY1NywxMSBAQCBPVE9PTAorQEAgLTY1OCw4ICs2NTgsMTEgQEAgT1RPT0wKICBMSVBPCiAgTk1FRElUCiAgRFNZTVVUSUwKQEAgLTc3NTcsNyArNzY3Niw3IEBACiAgT0JKRFVNUAogIExOX1MKICBOTQotQEAgLTc3OSw2ICs3ODIsNyBAQCBlbmFibGVfc3RhdGljCitAQCAtNzgxLDYgKzc4NCw3IEBAIGVuYWJsZV9zdGF0aWMKICB3aXRoX3BpYwogIGVuYWJsZV9mYXN0X2luc3RhbGwKICB3aXRoX2dudV9sZApAQCAtNzc2NSw3ICs3Njg0LDcgQEAKICBlbmFibGVfbGlidG9vbF9sb2NrCiAgZW5hYmxlX3BsdWdpbnMKICBlbmFibGVfbGFyZ2VmaWxlCi1AQCAtMTQ1OCw2ICsxNDYyLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CitAQCAtMTQ2Miw2ICsxNDY2LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CiAgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCiAgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCkBAIC03Nzc0LDcgKzc2OTMsNyBAQAogICAgLS13aXRoLWxpYi1wYXRoPWRpcjE6ZGlyMi4uLiAgc2V0IGRlZmF1bHQgTElCX1BBVEgKICAgIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIHVzci9saWIgZXQgYWwgd2l0aGluIERJUi4KICAKLUBAIC01NjQ5LDggKzU2NTUsOCBAQCBlc2FjCitAQCAtNTY1Niw4ICs1NjYyLDggQEAgZXNhYwogIAogIAogIApAQCAtNzc4NSw3ICs3NzA0LDcgQEAKICAKICAKICAKLUBAIC01NjkwLDcgKzU2OTYsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworQEAgLTU2OTcsNyArNTcwMyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KICAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KQEAgLTc3OTQsNyArNzcxMyw3IEBACiAgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KICAgIEVDSE89J3ByaW50IC1yIC0tJwogIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtNjM3Niw4ICs2MzgyLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKK0BAIC02MzgzLDggKzYzODksOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OwogICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCiAgeHNpX3NoZWxsPW5vCiAgKCBfbHRfZHVtbXk9ImEvYi9jIgpAQCAtNzgwNSw3ICs3NzI0LDcgQEAKICAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAogICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAogICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTY0MjYsNiArNjQzMiw4MCBAQCBlc2FjCitAQCAtNjQzMyw2ICs2NDM5LDgwIEBAIGVzYWMKICAKICAKICAKQEAgLTc4ODYsNyArNzgwNSw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjQ0Miw2ICs2NTIyLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCitAQCAtNjQ0OSw2ICs2NTI5LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCiAgZXNhYwogIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICBjYXNlICRob3N0X29zIGluCkBAIC03ODk4LDcgKzc4MTcsNyBAQAogICAgZGFyd2luKikKICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1AQCAtNjYxMCw3ICs2Njk1LDggQEAgbWluZ3cqIHwgcHczMiopCitAQCAtNjYxNyw3ICs2NzAyLDggQEAgbWluZ3cqIHwgcHczMiopCiAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCiAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwogICAgZWxzZQpAQCAtNzkwOCw3ICs3ODI3LDcgQEAKICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwogICAgZmkKICAgIDs7Ci1AQCAtNjc2NCw2ICs2ODUwLDIxIEBAIGVzYWMKK0BAIC02NzcxLDYgKzY4NTcsMjEgQEAgZXNhYwogIGZpCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CiAgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CkBAIC03OTMwLDcgKzc4NDksNyBAQAogIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAogIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAogIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotQEAgLTY3NzksOSArNjg4MCwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjc4Niw5ICs2ODg3LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KICAKICAKICAKQEAgLTgwOTUsNyArODAxNCw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQogIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjc5Nyw3ICs3MDUxLDcgQEAgZG8KK0BAIC02ODA0LDcgKzcwNTgsNyBAQCBkbwogICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCkBAIC04MTA0LDcgKzgwMjMsNyBAQAogICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICAgYnJlYWsgMgogICAgZmkKLUBAIC02ODE3LDExICs3MDcxLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CitAQCAtNjgyNCwxMSArNzA3OCwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQogIGZpCiAgCiAgCkBAIC04MTIzLDcgKzgwNDIsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTY4MzcsNyArNzA5NSw3IEBAIGRvCitAQCAtNjg0NCw3ICs3MTAyLDcgQEAgZG8KICAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgpAQCAtODEzMiw3ICs4MDUxLDcgQEAKICAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgIGJyZWFrIDIKICAgIGZpCi1AQCAtNjg1Niw2ICs3MTE0LDEwIEBAIGVsc2UKK0BAIC02ODYzLDYgKzcxMjEsMTAgQEAgZWxzZQogICRhc19lY2hvICJubyIgPiY2OyB9CiAgZmkKICAKQEAgLTgxNDMsNyArODA2Miw3IEBACiAgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KICAgICAgQVI9ImZhbHNlIgogICAgZWxzZQotQEAgLTY4NjcsMTIgKzcxMjksMTIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CitAQCAtNjg3NCwxMiArNzEzNiwxMiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKICBlc2FjCiAgICAgIEFSPSRhY19jdF9BUgogICAgZmkKQEAgLTgxNjAsNyArODA3OSw3IEBACiAgCiAgCiAgCi1AQCAtNjg4Miw2ICs3MTQ0LDYyIEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CitAQCAtNjg4OSw2ICs3MTUxLDYyIEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CiAgCiAgCiAgCkBAIC04MjIzLDcgKzgxNDIsNyBAQAogIAogIAogIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLUBAIC03MjE4LDggKzc1MzYsOCBAQCBlc2FjCitAQCAtNzIyNSw4ICs3NTQzLDggQEAgZXNhYwogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCiAgCiAgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCkBAIC04MjM0LDcgKzgxNTMsNyBAQAogIAogICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgogIG9wdF9jcj0KLUBAIC03MjU1LDYgKzc1NzMsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCitAQCAtNzI2Miw2ICs3NTgwLDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwogICAgZWxzZQogICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgogICAgZmkKQEAgLTgyNDIsNyArODE2MSw3IEBACiAgCiAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KICAgIHBpcGVfd29ya3M9bm8KLUBAIC03Mjk2LDYgKzc2MTUsMTggQEAgX0xUX0VPRgorQEAgLTczMDMsNiArNzYyMiwxOCBAQCBfTFRfRU9GCiAgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KICAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCiAgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKQEAgLTgyNjEsNyArODE4MCw3IEBACiAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgZXh0ZXJuICJDIiB7CiAgI2VuZGlmCi1AQCAtNzMwNyw3ICs3NjM4LDcgQEAgX0xUX0VPRgorQEAgLTczMTQsNyArNzY0NSw3IEBAIF9MVF9FT0YKICAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKICAKICAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCkBAIC04MjcwLDcgKzgxODksNyBAQAogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHZvaWQgICAgICAgKmFkZHJlc3M7CiAgfQotQEAgLTczMzMsOCArNzY2NCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CitAQCAtNzM0MCw4ICs3NjcxLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKICBfTFRfRU9GCiAgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KICAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKQEAgLTgyODEsNyArODIwMCw3IEBACiAgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKICAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCiAgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1Ci1AQCAtNzM0NCw4ICs3Njc1LDggQEAgX0xUX0VPRgorQEAgLTczNTEsOCArNzY4Miw4IEBAIF9MVF9FT0YKICAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogIAkgICAgcGlwZV93b3Jrcz15ZXMKICAJICBmaQpAQCAtODI5Miw3ICs4MjExLDcgQEAKICAJZWxzZQogIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQogIAlmaQotQEAgLTczODIsNiArNzcxMywxOSBAQCBlbHNlCitAQCAtNzM4OSw2ICs3NzIwLDE5IEBAIGVsc2UKICAkYXNfZWNobyAib2siID4mNjsgfQogIGZpCiAgCkBAIC04MzEyLDcgKzgyMzEsNyBAQAogIAogIAogIAotQEAgLTc0MDIsNiArNzc0Niw0MiBAQCBmaQorQEAgLTc0MDksNiArNzc1Myw0MiBAQCBmaQogIAogIAogIApAQCAtODM1NSw3ICs4Mjc0LDcgQEAKICAKICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KICBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTc2MDksNiArNzk4OSwxMjMgQEAgZXNhYworQEAgLTc2MTYsNiArNzk5NiwxMjMgQEAgZXNhYwogIAogIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgogIApAQCAtODQ3OSw3ICs4Mzk4LDcgQEAKICAKICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKLUBAIC04MTcyLDYgKzg2NjksOCBAQCBfTFRfRU9GCitAQCAtODE3OSw2ICs4Njc2LDggQEAgX0xUX0VPRgogICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQogICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKICAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CkBAIC04NDg4LDcgKzg0MDcsNyBAQAogICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgogIGludCBtYWluKCkgeyByZXR1cm4gMDt9CiAgX0xUX0VPRgotQEAgLTgyNDAsNiArODczOSwxNiBAQCBkb25lCitAQCAtODI0Nyw2ICs4NzQ2LDE2IEBAIGRvbmUKICAKICAKICAKQEAgLTg1MDUsNyArODQyNCw3IEBACiAgCiAgCiAgIyBTZXQgb3B0aW9ucwotQEAgLTgzNjgsNyArODg3Nyw4IEBAIGZpCitAQCAtODM3NSw3ICs4ODg0LDggQEAgZmkKICBMSUJUT09MX0RFUFM9IiRsdG1haW4iCiAgCiAgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KQEAgLTg1MTUsNyArODQzNCw3IEBACiAgCiAgCiAgCi1AQCAtODQ1Nyw3ICs4OTY3LDcgQEAgYWl4MyopCitAQCAtODQ2NCw3ICs4OTc0LDcgQEAgYWl4MyopCiAgZXNhYwogIAogICMgR2xvYmFsIHZhcmlhYmxlczoKQEAgLTg1MjQsNyArODQ0Myw3IEBACiAgY2FuX2J1aWxkX3NoYXJlZD15ZXMKICAKICAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLUBAIC04NzU1LDggKzkyNjUsNiBAQCBmaQorQEAgLTg3NjIsOCArOTI3Miw2IEBAIGZpCiAgbHRfcHJvZ19jb21waWxlcl9waWM9CiAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CiAgCkBAIC04NTMzLDcgKzg0NTIsNyBAQAogIAogICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLUBAIC04OTIyLDYgKzk0MzAsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK0BAIC04OTI5LDYgKzk0MzcsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KICAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJwogIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCiAgCTs7CkBAIC04NTQ2LDcgKzg0NjUsNyBAQAogICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCiAgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi1AQCAtODk4NCw3ICs5NDk4LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK0BAIC04OTkxLDcgKzk1MDUsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQogICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KQEAgLTg1NTUsNyArODQ3NCw3IEBACiAgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OwogICAgICAgICopCiAgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKLUBAIC05MDQxLDEzICs5NTU1LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC05MDQ4LDEzICs5NTYyLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKICAgICAgOzsKICBlc2FjCkBAIC04NTc5LDcgKzg0OTgsNyBAQAogIAogICMKICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi1AQCAtOTEwOCw2ICs5NjI2LDExIEBAIGZpCitAQCAtOTExNSw2ICs5NjMzLDExIEBAIGZpCiAgCiAgCiAgCkBAIC04NTkxLDcgKzg1MTAsNyBAQAogICMKICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCiAgIwotQEAgLTk0NTgsNyArOTk4MSw4IEBAIF9MVF9FT0YKK0BAIC05NDY1LDcgKzk5ODgsOCBAQCBfTFRfRU9GCiAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KICAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwpAQCAtODYwMSw3ICs4NTIwLDcgQEAKICAKICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotQEAgLTk1NTcsMTIgKzEwMDgxLDEyIEBAIF9MVF9FT0YKK0BAIC05NTY0LDEyICsxMDA4OCwxMiBAQCBfTFRfRU9GCiAgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCiAgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKQEAgLTg2MTYsNyArODUzNSw3IEBACiAgCSAgZmkKICAJICA7OwogIAllc2FjCi1AQCAtOTU3Niw4ICsxMDEwMCw4IEBAIF9MVF9FT0YKK0BAIC05NTgzLDggKzEwMTA3LDggQEAgX0xUX0VPRgogIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCiAgCXdsYXJjPQogICAgICAgIGVsc2UKQEAgLTg2MjcsNyArODU0Niw3IEBACiAgICAgICAgZmkKICAgICAgICA7OwogIAotQEAgLTk1OTUsOCArMTAxMTksOCBAQCBfTFRfRU9GCitAQCAtOTYwMiw4ICsxMDEyNiw4IEBAIF9MVF9FT0YKICAKICBfTFRfRU9GCiAgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCkBAIC04NjM4LDcgKzg1NTcsNyBAQAogICAgICAgIGVsc2UKICAJbGRfc2hsaWJzPW5vCiAgICAgICAgZmkKLUBAIC05NjQyLDggKzEwMTY2LDggQEAgX0xUX0VPRgorQEAgLTk2NDksOCArMTAxNzMsOCBAQCBfTFRfRU9GCiAgCiAgICAgICopCiAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgpAQCAtODY0OSw3ICs4NTY4LDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtOTc3Myw3ICsxMDI5NywxMyBAQCBfTFRfRU9GCitAQCAtOTc4MCw3ICsxMDMwNCwxMyBAQCBfTFRfRU9GCiAgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCiAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KICAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KQEAgLTg2NjQsNyArODU4Myw3IEBACiAgLyogZW5kIGNvbmZkZWZzLmguICAqLwogIAogIGludAotQEAgLTk3ODYsMjIgKzEwMzE2LDI5IEBAIG1haW4gKCkKK0BAIC05NzkzLDIyICsxMDMyMywyOSBAQCBtYWluICgpCiAgX0FDRU9GCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogIApAQCAtODcwNyw3ICs4NjI2LDcgQEAKICAKICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotQEAgLTk4MTMsNyArMTAzNTAsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTgyMCw3ICsxMDM1NywxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJZWxzZQogIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC04NzIyLDcgKzg2NDEsNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC05ODI2LDIyICsxMDM2OSwyOSBAQCBtYWluICgpCitAQCAtOTgzMywyMiArMTAzNzYsMjkgQEAgbWFpbiAoKQogIF9BQ0VPRgogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAKQEAgLTg3NjUsNyArODY4NCw3IEBACiAgCiAgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi1AQCAtOTg4NSwyMSArMTA0MzUsNjQgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTg5MiwyMSArMTA0NDIsNjQgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKICAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgogICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKQEAgLTg4NDUsNyArODc2NCw3IEBACiAgICAgICAgOzsKICAKICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLUBAIC05OTYwLDcgKzEwNTUzLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTk2Nyw3ICsxMDU2MCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCiAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKQEAgLTg4NTQsNyArODc3Myw3IEBACiAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwogICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi1AQCAtOTk2OCw3ICsxMDU2MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTk5NzUsNyArMTA1NjgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAKICAgICAgaHB1eDkqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCkBAIC04ODYzLDcgKzg3ODIsNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgICBmaQotQEAgLTk5ODQsNyArMTA1NzcsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05OTkxLDcgKzEwNTg0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgIGhwdXgxMCopCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCkBAIC04ODcyLDcgKzg3OTEsNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgIGZpCi1AQCAtMTAwMDgsMTAgKzEwNjAxLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTEwMDE1LDEwICsxMDYwOCwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogIAkgIDs7CiAgCWlhNjQqKQpAQCAtODg4NSw3ICs4ODA0LDcgQEAKICAJICA7OwogIAllc2FjCiAgICAgICAgZWxzZQotQEAgLTEwMDkwLDIzICsxMDY4MywzNiBAQCBmaQorQEAgLTEwMDk3LDIzICsxMDY5MCwzNiBAQCBmaQogIAogICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCkBAIC04OTMwLDcgKzg4NDksNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi1AQCAtMTAxOTEsNyArMTA3OTcsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK0BAIC0xMDE5OCw3ICsxMDgwNCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCkBAIC04OTM5LDcgKzg4NTgsNyBAQAogIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICAgZWxzZQogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLUBAIC0xMDIxMCw5ICsxMDgxNiw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorQEAgLTEwMjE3LDkgKzEwODIzLDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgCXdsYXJjPScke3dsfScKQEAgLTg5NTEsNyArODg3MCw3IEBACiAgICAgICAgZWxzZQogIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KICAJKiJDb21waWxlcnMgNS4wIiopCi1AQCAtMTA3ODgsOCArMTEzOTQsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCitAQCAtMTA3OTUsOCArMTE0MDEsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICBuZWVkX3ZlcnNpb249bm8KICAgIG5lZWRfbGliX3ByZWZpeD1ubwogIApAQCAtODk2Myw3ICs4ODgyLDcgQEAKICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKICAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwogICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLUBAIC0xMDgyMiwxMyArMTE0MjksNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorQEAgLTEwODI5LDEzICsxMTQzNiw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwogICAgICAgIDs7CiAgICAgIGVzYWMKQEAgLTkwMzYsNyArODk1NSw3IEBACiAgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KICAgIHNobGlicGF0aF92YXI9UEFUSAogICAgOzsKLUBAIC0xMDkyMCw3ICsxMTU4NSw3IEBAIGhhaWt1KikKK0BAIC0xMDkyNyw3ICsxMTU5Miw3IEBAIGhhaWt1KikKICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAogICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwpAQCAtOTA0NSwxNiArODk2NCw3IEBACiAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgICA7OwogIAotQEAgLTExNzE2LDcgKzEyMzgxLDcgQEAgZWxzZQotICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0tI2xpbmUgMTE3MTkgImNvbmZpZ3VyZSIKLSsjbGluZSAkTElORU5PICJjb25maWd1cmUiCi0gI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0gCi0gI2lmIEhBVkVfRExGQ05fSAotQEAgLTExNzYwLDEwICsxMjQyNSwxMCBAQCBlbHNlCitAQCAtMTE3NjcsMTAgKzEyNDMyLDEwIEBAIGVsc2UKICAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCiAgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwogICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQpAQCAtOTA2NywxNiArODk3Nyw3IEBACiAgaW50IG1haW4gKCkKICB7CiAgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMTgyMiw3ICsxMjQ4Nyw3IEBAIGVsc2UKLSAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotLSNsaW5lIDExODI1ICJjb25maWd1cmUiCi0rI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotICNpbmNsdWRlICJjb25mZGVmcy5oIgotIAotICNpZiBIQVZFX0RMRkNOX0gKLUBAIC0xMTg2NiwxMCArMTI1MzEsMTAgQEAgZWxzZQorQEAgLTExODczLDEwICsxMjUzOCwxMCBAQCBlbHNlCiAgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KICAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKQEAgLTkwODksNyArODk5MCw3IEBACiAgaW50IG1haW4gKCkKICB7CiAgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMjI2MSw2ICsxMjkyNiw3IEBAICRSTSAtciBjb25mdGVzdCoKK0BAIC0xMjI2OCw2ICsxMjkzMyw3IEBAICRSTSAtciBjb25mdGVzdCoKICAKICAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCiAgICBsdF9zYXZlX0NDPSRDQwpAQCAtOTA5Nyw3ICs4OTk4LDcgQEAKICAgIGx0X3NhdmVfTEQ9JExECiAgICBsdF9zYXZlX0dDQz0kR0NDCiAgICBHQ0M9JEdYWAotQEAgLTEyMjc4LDYgKzEyOTQ0LDcgQEAgJFJNIC1yIGNvbmZ0ZXN0KgorQEAgLTEyMjg1LDYgKzEyOTUxLDcgQEAgJFJNIC1yIGNvbmZ0ZXN0KgogICAgZmkKICAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCiAgICBDQz0ke0NYWC0iYysrIn0KQEAgLTkxMDUsNyArOTAwNiw3IEBACiAgICBjb21waWxlcj0kQ0MKICAgIGNvbXBpbGVyX0NYWD0kQ0MKICAgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotQEAgLTEyNTYwLDcgKzEzMjI3LDEzIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCitAQCAtMTI1NjcsNyArMTMyMzQsMTMgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWUKICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSctYmVyb2snCiAgICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQogICAgICAgICAgICAjIGV4ZWN1dGFibGUuCkBAIC05MTIwLDcgKzkwMjEsNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC0xMjU3MywyMiArMTMyNDYsMjkgQEAgbWFpbiAoKQorQEAgLTEyNTgwLDIyICsxMzI1MywyOSBAQCBtYWluICgpCiAgX0FDRU9GCiAgaWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC05MTYzLDcgKzkwNjQsNyBAQAogIAogICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAKLUBAIC0xMjYwMSw3ICsxMzI4MSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC0xMjYwOCw3ICsxMzI4OCwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAgICAgICAgICAgZWxzZQogIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC05MTc4LDcgKzkwNzksNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC0xMjYxNCwyMiArMTMzMDAsMjkgQEAgbWFpbiAoKQorQEAgLTEyNjIxLDIyICsxMzMwNywyOSBAQCBtYWluICgpCiAgX0FDRU9GCiAgaWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC05MjIxLDcgKzkxMjIsNyBAQAogIAogIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTEyNjcyLDI5ICsxMzM2NSw3NSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC0xMjY3OSwyOSArMTMzNzIsNzUgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgICAgICAgICA7OwogIAogICAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKQEAgLTkzMjAsNyArOTIyMSw3IEBACiAgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKICAKICAKLUBAIC0xMjgwMCw3ICsxMzUzOSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTEyODA3LDcgKzEzNTQ2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgpAQCAtOTMyOSw3ICs5MjMwLDcgQEAKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKICAgICAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KLUBAIC0xMjg3MSwxMCArMTM2MTAsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtMTI4NzgsMTAgKzEzNjE3LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAgCSAgICAgICAgICAgIDs7CiAgCSAgICAgICAgICBpYTY0KikKQEAgLTkzNDIsNyArOTI0Myw3IEBACiAgCSAgICAgICAgICAgIDs7CiAgCSAgICAgICAgZXNhYwogIAkgICAgICBmaQotQEAgLTEyOTE1LDkgKzEzNjU0LDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtMTI5MjIsOSArMTM2NjEsOSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAgICAgICAgICAgKikKICAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCiAgCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgpAQCAtOTM1NCw3ICs5MjU1LDcgQEAKICAJICAgICAgZmkKICAJICAgIGZpCiAgCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLUBAIC0xMjk4NywyMCArMTM3MjYsMjAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtMTI5OTQsMjAgKzEzNzMzLDIwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAkgICAgICBwcmVsaW5rX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgogIAkJcm0gLXJmICR0cGxkaXJ+CiAgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CkBAIC05Mzc5LDcgKzkyODAsNyBAQAogIAkgICAgICA7OwogIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKICAJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCi1AQCAtMTMxOTUsNyArMTM5MzQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC0xMzIwMiw3ICsxMzk0MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogIAkJICA7OwogIAkgICAgICAgICopCkBAIC05Mzg4LDcgKzkyODksNyBAQAogIAkJICA7OwogIAkgICAgICBlc2FjCiAgCi1AQCAtMTMyNDEsNyArMTM5ODAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC0xMzI0OCw3ICsxMzk4Nyw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICAgIHNvbGFyaXMqKQogICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KQEAgLTkzOTcsNyArOTI5OCw3IEBACiAgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCiAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwogIAkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJwotQEAgLTEzMjgyLDkgKzE0MDIxLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtMTMyODksOSArMTQwMjgsOSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgogIAkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS16ICR7d2x9ZGVmcycKICAJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KQEAgLTk0MDksNyArOTMxMCw3IEBACiAgCiAgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwogIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotQEAgLTEzNDE5LDYgKzE0MTU4LDEzIEBAIHByaXZhdGU6CitAQCAtMTM0MjYsNiArMTQxNjUsMTMgQEAgcHJpdmF0ZToKICB9OwogIF9MVF9FT0YKICAKQEAgLTk0MjMsNyArOTMyNCw3IEBACiAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICAgYWNfc3RhdHVzPSQ/Ci1AQCAtMTM0MzIsNyArMTQxNzgsNyBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKK0BAIC0xMzQzOSw3ICsxNDE4NSw3IEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwogIAogICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbwpAQCAtOTQzMiw3ICs5MzMzLDcgQEAKICAKICAgICAgLUwqIHwgLVIqIHwgLWwqKQogICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgotQEAgLTEzNDQxLDEzICsxNDE4NywyMiBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKK0BAIC0xMzQ0OCwxMyArMTQxOTQsMjIgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCiAgCSBwcmV2PSRwCiAgCSBjb250aW51ZQpAQCAtOTQ1OSw3ICs5MzYwLDcgQEAKICAJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCiAgCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQogIAkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLUBAIC0xMzQ2Nyw4ICsxNDIyMiwxMCBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKK0BAIC0xMzQ3NCw4ICsxNDIyOSwxMCBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCiAgCSBmaQogICAgICAgICBmaQpAQCAtOTQ3MCw3ICs5MzcxLDcgQEAKICAgICAgKi4kb2JqZXh0KQogICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKICAgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi1AQCAtMTM1MDQsNiArMTQyNjEsNyBAQCBlbHNlCitAQCAtMTM1MTEsNiArMTQyNjgsNyBAQCBlbHNlCiAgZmkKICAKICAkUk0gLWYgY29uZmVzdC4kb2JqZXh0CkBAIC05NDc4LDcgKzkzNzksNyBAQAogIAogICMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCiAgY2FzZSAkaG9zdF9vcyBpbgotQEAgLTEzNTM5LDcgKzE0Mjk3LDcgQEAgbGludXgqKQorQEAgLTEzNTQ2LDcgKzE0MzA0LDcgQEAgbGludXgqKQogIAogIHNvbGFyaXMqKQogICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KQEAgLTk0ODcsNyArOTM4OCw3IEBACiAgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwogICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKICAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotQEAgLTEzNjA0LDggKzE0MzYyLDYgQEAgZmkKK0BAIC0xMzYxMSw4ICsxNDM2OSw2IEBAIGZpCiAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQogIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KICAKQEAgLTk0OTYsNyArOTM5Nyw3IEBACiAgCiAgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCiAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotQEAgLTEzNzEwLDYgKzE0NDY2LDExIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitAQCAtMTM3MTcsNiArMTQ0NzMsMTEgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KICAJICA7OwogIAllc2FjCiAgCTs7CkBAIC05NTA4LDcgKzk0MDksNyBAQAogICAgICAgIGRndXgqKQogIAljYXNlICRjY19iYXNlbmFtZSBpbgogIAkgIGVjKysqKQotQEAgLTEzODYyLDcgKzE0NjIzLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK0BAIC0xMzg2OSw3ICsxNDYzMCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CiAgCTs7CiAgICAgICAgc29sYXJpcyopCiAgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCkBAIC05NTE3LDcgKzk0MTgsNyBAQAogIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwogIAkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKICAJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi1AQCAtMTM5MjcsMTAgKzE0Njg4LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC0xMzkzNCwxMCArMTQ2OTUsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgogICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCiAgICAgIDs7CiAgZXNhYwpAQCAtOTUzOCw3ICs5NDM5LDcgQEAKICAKICAjCiAgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotQEAgLTEzOTg4LDYgKzE0NzU2LDggQEAgZmkKK0BAIC0xMzk5NSw2ICsxNDc2Myw4IEBAIGZpCiAgCiAgCiAgCkBAIC05NTQ3LDcgKzk0NDgsNyBAQAogICMKICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCiAgIwotQEAgLTE0MTY1LDYgKzE0OTM1LDcgQEAgZmkKK0BAIC0xNDE3Miw2ICsxNDk0Miw3IEBAIGZpCiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CiAgCiAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwpAQCAtOTU1NSw3ICs5NDU2LDcgQEAKICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgIGFpeFs0LTldKikKICAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi1AQCAtMTQxNzksMTUgKzE0OTUwLDIwIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCitAQCAtMTQxODYsMTUgKzE0OTU3LDIwIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCiAgICAgIDs7CiAgICBwdzMyKikKICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgpAQCAtOTU4MSw3ICs5NDgyLDcgQEAKICAKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQogICRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Ci1AQCAtMTQ0NTAsOCArMTUyMjYsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCitAQCAtMTQ0NTcsOCArMTUyMzMsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICBuZWVkX3ZlcnNpb249bm8KICAgIG5lZWRfbGliX3ByZWZpeD1ubwogIApAQCAtOTU5Myw3ICs5NDk0LDcgQEAKICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKICAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwogICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLUBAIC0xNDQ4MywxMyArMTUyNjAsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorQEAgLTE0NDkwLDEzICsxNTI2Nyw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwogICAgICAgIDs7CiAgICAgIGVzYWMKQEAgLTk2NjYsNyArOTU2Nyw3IEBACiAgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KICAgIHNobGlicGF0aF92YXI9UEFUSAogICAgOzsKLUBAIC0xNDU4MCw3ICsxNTQxNSw3IEBAIGhhaWt1KikKK0BAIC0xNDU4Nyw3ICsxNTQyMiw3IEBAIGhhaWt1KikKICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAogICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwpAQCAtOTY3NSw3ICs5NTc2LDcgQEAKICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgIDs7CiAgCi1AQCAtMTUwMzksNiArMTU4NzQsNyBAQCBmaQorQEAgLTE1MDQ2LDYgKzE1ODgxLDcgQEAgZmkKICAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgogIAogICAgQ0M9JGx0X3NhdmVfQ0MKQEAgLTk2ODMsNyArOTU4NCw3IEBACiAgICBMRENYWD0kTEQKICAgIExEPSRsdF9zYXZlX0xECiAgICBHQ0M9JGx0X3NhdmVfR0NDCi1AQCAtMTc5NTMsMTMgKzE4Nzg5LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzk4MiwxMyArMTg4MTgsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtOTcwNCw3ICs5NjA1LDcgQEAKICBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE3OTc0LDE0ICsxODgxNywxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorQEAgLTE4MDAzLDE0ICsxODg0NiwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTk3MjMsNyArOTYyNCw3IEBACiAgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTgwMTQsMTIgKzE4ODYwLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCitAQCAtMTgwNDMsMTIgKzE4ODg5LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCiAgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtOTczNyw3ICs5NjM4LDcgQEAKICBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE4MDU4LDggKzE4OTA0LDggQEAgb2xkX2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGUKK0BAIC0xODA4Nyw4ICsxODkzMyw4IEBAIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlCiAgY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIEdDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTk3NDcsNyArOTY0OCw3IEBACiAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTgwODYsMTIgKzE4OTMyLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWCIgfCAkU0VEICIkZGVsYXlfCitAQCAtMTgxMTUsMTIgKzE4OTYxLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWCIgfCAkU0VEICIkZGVsYXlfCiAgaGFyZGNvZGVfYXV0b21hdGljX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsaW5rX2FsbF9kZXBsaWJzX0NYWD0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlic19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtOTc2MSw3ICs5NjYyLDcgQEAKICBmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTgxMjksOCArMTg5NzUsMTMgQEAgcmVsb2FkX2ZsYWcgXAorQEAgLTE4MTU4LDggKzE5MDA0LDEzIEBAIHJlbG9hZF9mbGFnIFwKICBPQkpEVU1QIFwKICBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCiAgZmlsZV9tYWdpY19jbWQgXApAQCAtOTc3NSw3ICs5Njc2LDcgQEAKICBTVFJJUCBcCiAgUkFOTElCIFwKICBDQyBcCi1AQCAtMTgxNDAsMTIgKzE4OTkxLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorQEAgLTE4MTY5LDEyICsxOTAyMCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXApAQCAtOTc5MSw3ICs5NjkyLDcgQEAKICBEU1lNVVRJTCBcCiAgTk1FRElUIFwKICBMSVBPIFwKLUBAIC0xODE2MSw3ICsxOTAxNCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKK0BAIC0xODE5MCw3ICsxOTA0Myw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKQEAgLTk3OTksNyArOTcwMCw3IEBACiAgZXhjbHVkZV9leHBzeW1zIFwKICBpbmNsdWRlX2V4cHN5bXMgXAogIGZpbGVfbGlzdF9zcGVjIFwKLUBAIC0xODE4Myw4ICsxOTAzNSw4IEBAIExEX0NYWCBcCitAQCAtMTgyMTIsOCArMTkwNjQsOCBAQCBMRF9DWFggXAogIHJlbG9hZF9mbGFnX0NYWCBcCiAgY29tcGlsZXJfQ1hYIFwKICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXApAQCAtOTgwOSw3ICs5NzEwLDcgQEAKICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAogIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCiAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCi1AQCAtMTgxOTYsNyArMTkwNDgsNiBAQCBub191bmRlZmluZWRfZmxhZ19DWFggXAorQEAgLTE4MjI1LDcgKzE5MDc3LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCiAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFggXAogIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKQEAgLTk4MTcsNyArOTcxOCw3IEBACiAgZXhjbHVkZV9leHBzeW1zX0NYWCBcCiAgaW5jbHVkZV9leHBzeW1zX0NYWCBcCiAgZmlsZV9saXN0X3NwZWNfQ1hYIFwKLUBAIC0xODIzMCw2ICsxOTA4MSw3IEBAIG1vZHVsZV9jbWRzIFwKK0BAIC0xODI1OSw2ICsxOTExMCw3IEBAIG1vZHVsZV9jbWRzIFwKICBtb2R1bGVfZXhwc3ltX2NtZHMgXAogIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAogIHByZWxpbmtfY21kcyBcCkBAIC05ODI1LDcgKzk3MjYsNyBAQAogIHBvc3RpbnN0YWxsX2NtZHMgXAogIHBvc3R1bmluc3RhbGxfY21kcyBcCiAgZmluaXNoX2NtZHMgXAotQEAgLTE4MjQ0LDcgKzE5MDk2LDggQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorQEAgLTE4MjczLDcgKzE5MTI1LDggQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAogIG1vZHVsZV9jbWRzX0NYWCBcCiAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCiAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXApAQCAtOTgzNSw3ICs5NzM2LDcgQEAKICAgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCiAgICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCiAgICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKLUBAIC0xOTAzNyw3ICsxOTg5MCw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKK0BAIC0xOTA2Niw3ICsxOTkxOSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKICAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KICAjCiAgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKQEAgLTk4NDUsNyArOTc0Niw3IEBACiAgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKICAjCiAgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgotQEAgLTE5MTQwLDE5ICsxOTk5NCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKK0BAIC0xOTE2OSwxOSArMjAwMjMsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCiAgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgogIE5MMlNQPSRsdF9sdF9OTDJTUAogIApAQCAtOTg4OSw3ICs5NzkwLDcgQEAKICAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgogIFNUUklQPSRsdF9TVFJJUAogIAotQEAgLTE5MTgyLDYgKzIwMDU5LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCitAQCAtMTkyMTEsNiArMjAwODgsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKICAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgogIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAogIApAQCAtOTkwMiw3ICs5ODAzLDcgQEAKICAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KICBvYmpkaXI9JG9iamRpcgogIAotQEAgLTE5MTkxLDYgKzIwMDc0LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKK0BAIC0xOTIyMCw2ICsyMDEwMyw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECiAgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KICBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCiAgCkBAIC05OTEyLDcgKzk4MTMsNyBAQAogICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KICBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKICAKLUBAIC0xOTMwNSwxMiArMjAxOTEsMTIgQEAgd2l0aF9nY2M9JEdDQworQEAgLTE5MzM0LDEyICsyMDIyMCwxMiBAQCB3aXRoX2djYz0kR0NDCiAgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgogIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKICAKQEAgLTk5MjgsNyArOTgyOSw3IEBACiAgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgogIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCiAgCi1AQCAtMTkzOTcsOSArMjAyODMsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCitAQCAtMTk0MjYsOSArMjAzMTIsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCiAgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCiAgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwogIApAQCAtOTkzOCw3ICs5ODM5LDcgQEAKICAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scwogIAotQEAgLTE5NDE1LDYgKzIwMjk4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKK0BAIC0xOTQ0NCw2ICsyMDMyNyw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCiAgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KICBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcwogIApAQCAtOTk0OCw3ICs5ODQ5LDcgQEAKICAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KICBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKICAKLUBAIC0xOTQ2MSwyMTAgKzIwMzQ3LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK0BAIC0xOTQ5MCwyMTAgKzIwMzc2LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKICAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KICAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCiAgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwpAQCAtMTAzMjIsNyArMTAyMjMsNyBAQAogICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQogICAgY2htb2QgK3ggIiRvZmlsZSIKICAKLUBAIC0xOTY5MiwxMiArMjA1MzcsMTIgQEAgd2l0aF9nY2M9JEdDQ19DWFgKK0BAIC0xOTcyMSwxMiArMjA1NjYsMTIgQEAgd2l0aF9nY2M9JEdDQ19DWFgKICAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCiAgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgKICAKQEAgLTEwMzM4LDcgKzEwMjM5LDcgQEAKICAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCiAgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCiAgCi1AQCAtMTk3ODQsOSArMjA2MjksNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorQEAgLTE5ODEzLDkgKzIwNjU4LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aF9DWFgKICAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KICBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAogIApAQCAtMTAzNDgsNyArMTAyNDksNyBAQAogICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgogIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWAogIAotQEAgLTE5ODAyLDYgKzIwNjQ0LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfQ1hYCitAQCAtMTk4MzEsNiArMjA2NzMsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKICAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgogIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX0NYWAogIApAQCAtMTAzNTksNyArMTAyNjAsNyBAQAogIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlY19DWFgKICAKIGRpZmYgLS1naXQgYS9saWJ0b29sLm00IGIvbGlidG9vbC5tNAotaW5kZXggNGIyZDMwYS4uMDA4ZDMzMSAxMDA2NDQKK2luZGV4IDI0ZDEzZjMuLmU0NWZkYzYgMTAwNjQ0CiAtLS0gYS9saWJ0b29sLm00CiArKysgYi9saWJ0b29sLm00CiBAQCAtMSw3ICsxLDggQEAKQEAgLTE2NDUxLDcgKzE2MzUyLDcgQEAKICAJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgogIAkgICAgICAqIiAkbGliZGlyICIqKSA7OwogLQkgICAgICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OwotKwkgICAgICAqKSBmdW5jX2FwcGVkIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKICAJICAgICAgZXNhYwogIAkgICAgZmkKICAJICBkb25lCkBAIC0xNzQ0MiwxMCArMTczNDMsMTAgQEAKICAjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KICAjCiBkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUgYi9vcGNvZGVzL2NvbmZpZ3VyZQotaW5kZXggZWVkYjE4NC4uZDMwNzZlMSAxMDA3NTUKK2luZGV4IGY2MTU2MzQuLmEzNDA5ODMgMTAwNzU1CiAtLS0gYS9vcGNvZGVzL2NvbmZpZ3VyZQogKysrIGIvb3Bjb2Rlcy9jb25maWd1cmUKLUBAIC02NDgsNiArNjQ4LDkgQEAgT1RPT0wKK0BAIC02NDksNiArNjQ5LDkgQEAgT1RPT0wKICBMSVBPCiAgTk1FRElUCiAgRFNZTVVUSUwKQEAgLTE3NDU1LDcgKzE3MzU2LDcgQEAKICBPQkpEVU1QCiAgTE5fUwogIE5NCi1AQCAtNzYwLDYgKzc2Myw3IEBAIGVuYWJsZV9zdGF0aWMKK0BAIC03NjIsNiArNzY1LDcgQEAgZW5hYmxlX3N0YXRpYwogIHdpdGhfcGljCiAgZW5hYmxlX2Zhc3RfaW5zdGFsbAogIHdpdGhfZ251X2xkCkBAIC0xNzQ2Myw3ICsxNzM2NCw3IEBACiAgZW5hYmxlX2xpYnRvb2xfbG9jawogIGVuYWJsZV90YXJnZXRzCiAgZW5hYmxlX3dlcnJvcgotQEAgLTE0MjAsNiArMTQyNCw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorQEAgLTE0MjIsNiArMTQyNiw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgogICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQogICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQpAQCAtMTc0NzIsNyArMTczNzMsNyBAQAogIAogIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgogICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCi1AQCAtNTExMCw4ICs1MTE2LDggQEAgZXNhYworQEAgLTUxMTQsOCArNTEyMCw4IEBAIGVzYWMKICAKICAKICAKQEAgLTE3NDgzLDcgKzE3Mzg0LDcgQEAKICAKICAKICAKLUBAIC01MTUxLDcgKzUxNTcsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworQEAgLTUxNTUsNyArNTE2MSw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KICAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KQEAgLTE3NDkyLDcgKzE3MzkzLDcgQEAKICAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgogICAgRUNITz0ncHJpbnQgLXIgLS0nCiAgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLUBAIC01ODM3LDggKzU4NDMsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworQEAgLTU4NDEsOCArNTg0Nyw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CiAgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKICB4c2lfc2hlbGw9bm8KICAoIF9sdF9kdW1teT0iYS9iL2MiCkBAIC0xNzUwMyw3ICsxNzQwNCw3IEBACiAgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKICAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKICAgICYmIHhzaV9zaGVsbD15ZXMKLUBAIC01ODg3LDYgKzU4OTMsODAgQEAgZXNhYworQEAgLTU4OTEsNiArNTg5Nyw4MCBAQCBlc2FjCiAgCiAgCiAgCkBAIC0xNzU4NCw3ICsxNzQ4NSw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNTkwMyw2ICs1OTgzLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCitAQCAtNTkwNyw2ICs1OTg3LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCiAgZXNhYwogIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICBjYXNlICRob3N0X29zIGluCkBAIC0xNzU5Niw3ICsxNzQ5Nyw3IEBACiAgICBkYXJ3aW4qKQogICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLUBAIC02MDcxLDcgKzYxNTYsOCBAQCBtaW5ndyogfCBwdzMyKikKK0BAIC02MDc1LDcgKzYxNjAsOCBAQCBtaW5ndyogfCBwdzMyKikKICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCiAgICBlbHNlCkBAIC0xNzYwNiw3ICsxNzUwNyw3IEBACiAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKICAgIGZpCiAgICA7OwotQEAgLTYyMjUsNiArNjMxMSwyMSBAQCBlc2FjCitAQCAtNjIyOSw2ICs2MzE1LDIxIEBAIGVzYWMKICBmaQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQogICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQpAQCAtMTc2MjgsNyArMTc1MjksNyBAQAogIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAogIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAogIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotQEAgLTYyNDAsOSArNjM0MSwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjI0NCw5ICs2MzQ1LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KICAKICAKICAKQEAgLTE3NzkzLDcgKzE3Njk0LDcgQEAKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CiAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC02MjU4LDcgKzY1MTIsNyBAQCBkbworQEAgLTYyNjIsNyArNjUxNiw3IEBAIGRvCiAgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KQEAgLTE3ODAyLDcgKzE3NzAzLDcgQEAKICAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgIGJyZWFrIDIKICAgIGZpCi1AQCAtNjI3OCwxMSArNjUzMiwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorQEAgLTYyODIsMTEgKzY1MzYsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KICBmaQogIAogIApAQCAtMTc4MjEsNyArMTc3MjIsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTYyOTgsNyArNjU1Niw3IEBAIGRvCitAQCAtNjMwMiw3ICs2NTYwLDcgQEAgZG8KICAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgpAQCAtMTc4MzAsNyArMTc3MzEsNyBAQAogICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICAgYnJlYWsgMgogICAgZmkKLUBAIC02MzE3LDYgKzY1NzUsMTAgQEAgZWxzZQorQEAgLTYzMjEsNiArNjU3OSwxMCBAQCBlbHNlCiAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KICBmaQogIApAQCAtMTc4NDEsNyArMTc3NDIsNyBAQAogICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCiAgICAgIEFSPSJmYWxzZSIKICAgIGVsc2UKLUBAIC02MzI4LDE2ICs2NTkwLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworQEAgLTYzMzIsMTYgKzY1OTQsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CiAgZXNhYwogICAgICBBUj0kYWNfY3RfQVIKICAgIGZpCkBAIC0xNzkxOCw3ICsxNzgxOSw3IEBACiAgCiAgCiAgCi1AQCAtNjY3OSw4ICs2OTk3LDggQEAgZXNhYworQEAgLTY2ODMsOCArNzAwMSw4IEBAIGVzYWMKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgogIAogICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwpAQCAtMTc5MjksNyArMTc4MzAsNyBAQAogIAogICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgogIG9wdF9jcj0KLUBAIC02NzE2LDYgKzcwMzQsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCitAQCAtNjcyMCw2ICs3MDM4LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwogICAgZWxzZQogICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgogICAgZmkKQEAgLTE3OTM3LDcgKzE3ODM4LDcgQEAKICAKICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgogICAgcGlwZV93b3Jrcz1ubwotQEAgLTY3NTcsNiArNzA3NiwxOCBAQCBfTFRfRU9GCitAQCAtNjc2MSw2ICs3MDgwLDE4IEBAIF9MVF9FT0YKICAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgogIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KICAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dApAQCAtMTc5NTYsNyArMTc4NTcsNyBAQAogICNpZmRlZiBfX2NwbHVzcGx1cwogIGV4dGVybiAiQyIgewogICNlbmRpZgotQEAgLTY3NjgsNyArNzA5OSw3IEBAIF9MVF9FT0YKK0BAIC02NzcyLDcgKzcxMDMsNyBAQCBfTFRfRU9GCiAgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CiAgCiAgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwpAQCAtMTc5NjUsNyArMTc4NjYsNyBAQAogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHZvaWQgICAgICAgKmFkZHJlc3M7CiAgfQotQEAgLTY3OTQsOCArNzEyNSw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CitAQCAtNjc5OCw4ICs3MTI5LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKICBfTFRfRU9GCiAgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KICAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKQEAgLTE3OTc2LDcgKzE3ODc3LDcgQEAKICAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgogIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKICAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLUBAIC02ODA1LDggKzcxMzYsOCBAQCBfTFRfRU9GCitAQCAtNjgwOSw4ICs3MTQwLDggQEAgX0xUX0VPRgogICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAgCSAgICBwaXBlX3dvcmtzPXllcwogIAkgIGZpCkBAIC0xNzk4Nyw3ICsxNzg4OCw3IEBACiAgCWVsc2UKICAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKICAJZmkKLUBAIC02ODQzLDYgKzcxNzQsMTYgQEAgZWxzZQorQEAgLTY4NDcsNiArNzE3OCwxNiBAQCBlbHNlCiAgJGFzX2VjaG8gIm9rIiA+JjY7IH0KICBmaQogIApAQCAtMTgwMDQsNyArMTc5MDUsNyBAQAogIAogIAogIAotQEAgLTY4NjQsNiArNzIwNSw0NSBAQCBmaQorQEAgLTY4NjgsNiArNzIwOSw0NSBAQCBmaQogIAogIAogIApAQCAtMTgwNTAsNyArMTc5NTEsNyBAQAogICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgogIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7Ci1AQCAtNzA3MCw2ICs3NDUwLDEyMyBAQCBlc2FjCitAQCAtNzA3NCw2ICs3NDU0LDEyMyBAQCBlc2FjCiAgCiAgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCiAgCkBAIC0xODE3NCw3ICsxODA3NSw3IEBACiAgCiAgICBjYXNlICRob3N0X29zIGluCiAgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi1AQCAtNzYzMyw2ICs4MTMwLDggQEAgX0xUX0VPRgorQEAgLTc2MzcsNiArODEzNCw4IEBAIF9MVF9FT0YKICAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKICAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CiAgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQpAQCAtMTgxODMsNyArMTgwODQsNyBAQAogICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgogIGludCBtYWluKCkgeyByZXR1cm4gMDt9CiAgX0xUX0VPRgotQEAgLTc3OTgsNyArODI5Nyw4IEBAIGZpCitAQCAtNzgwMiw3ICs4MzAxLDggQEAgZmkKICBMSUJUT09MX0RFUFM9IiRsdG1haW4iCiAgCiAgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KQEAgLTE4MTkzLDcgKzE4MDk0LDcgQEAKICAKICAKICAKLUBAIC03ODg3LDcgKzgzODcsNyBAQCBhaXgzKikKK0BAIC03ODkxLDcgKzgzOTEsNyBAQCBhaXgzKikKICBlc2FjCiAgCiAgIyBHbG9iYWwgdmFyaWFibGVzOgpAQCAtMTgyMDIsNyArMTgxMDMsNyBAQAogIGNhbl9idWlsZF9zaGFyZWQ9eWVzCiAgCiAgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi1AQCAtODE4NSw4ICs4Njg1LDYgQEAgZmkKK0BAIC04MTg5LDggKzg2ODksNiBAQCBmaQogIGx0X3Byb2dfY29tcGlsZXJfcGljPQogIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogIApAQCAtMTgyMTEsNyArMTgxMTIsNyBAQAogIAogICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLUBAIC04MzUyLDYgKzg4NTAsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK0BAIC04MzU2LDYgKzg4NTQsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KICAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJwogIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCiAgCTs7CkBAIC0xODIyNCw3ICsxODEyNSw3IEBACiAgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKICAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLUBAIC04NDE0LDcgKzg5MTgsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorQEAgLTg0MTgsNyArODkyMiw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CiAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgpAQCAtMTgyMzMsNyArMTgxMzQsNyBAQAogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKICAgICAgICAqKQogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7Ci1AQCAtODQ3MSwxMyArODk3NSwxNyBAQCBjYXNlICRob3N0X29zIGluCitAQCAtODQ3NSwxMyArODk3OSwxNyBAQCBjYXNlICRob3N0X29zIGluCiAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCiAgICAgIDs7CiAgZXNhYwpAQCAtMTgyNTcsNyArMTgxNTgsNyBAQAogIAogICMKICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi1AQCAtODUzOCw2ICs5MDQ2LDExIEBAIGZpCitAQCAtODU0Miw2ICs5MDUwLDExIEBAIGZpCiAgCiAgCiAgCkBAIC0xODI2OSw3ICsxODE3MCw3IEBACiAgIwogICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICAjCi1AQCAtODg4OCw3ICs5NDAxLDggQEAgX0xUX0VPRgorQEAgLTg4OTIsNyArOTQwNSw4IEBAIF9MVF9FT0YKICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCkBAIC0xODI3OSw3ICsxODE4MCw3IEBACiAgCiAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLUBAIC04OTg3LDEyICs5NTAxLDEyIEBAIF9MVF9FT0YKK0BAIC04OTkxLDEyICs5NTA1LDEyIEBAIF9MVF9FT0YKICAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJwpAQCAtMTgyOTQsNyArMTgxOTUsNyBAQAogIAkgIGZpCiAgCSAgOzsKICAJZXNhYwotQEAgLTkwMDYsOCArOTUyMCw4IEBAIF9MVF9FT0YKK0BAIC05MDEwLDggKzk1MjQsOCBAQCBfTFRfRU9GCiAgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKICAJd2xhcmM9CiAgICAgICAgZWxzZQpAQCAtMTgzMDUsNyArMTgyMDYsNyBAQAogICAgICAgIGZpCiAgICAgICAgOzsKICAKLUBAIC05MDI1LDggKzk1MzksOCBAQCBfTFRfRU9GCitAQCAtOTAyOSw4ICs5NTQzLDggQEAgX0xUX0VPRgogIAogIF9MVF9FT0YKICAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KQEAgLTE4MzE2LDcgKzE4MjE3LDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtOTA3Miw4ICs5NTg2LDggQEAgX0xUX0VPRgorQEAgLTkwNzYsOCArOTU5MCw4IEBAIF9MVF9FT0YKICAKICAgICAgKikKICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCkBAIC0xODMyNyw3ICsxODIyOCw3IEBACiAgICAgICAgZWxzZQogIAlsZF9zaGxpYnM9bm8KICAgICAgICBmaQotQEAgLTkyMDMsNyArOTcxNywxMyBAQCBfTFRfRU9GCitAQCAtOTIwNyw3ICs5NzIxLDEzIEBAIF9MVF9FT0YKICAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgogICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgpAQCAtMTgzNDIsNyArMTgyNDMsNyBAQAogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAKICBpbnQKLUBAIC05MjE2LDIyICs5NzM2LDI5IEBAIG1haW4gKCkKK0BAIC05MjIwLDIyICs5NzQwLDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC0xODM4NSw3ICsxODI4Niw3IEBACiAgCiAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLUBAIC05MjQzLDcgKzk3NzAsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTI0Nyw3ICs5Nzc0LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAllbHNlCiAgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KICAJICMgZW1wdHkgZXhlY3V0YWJsZS4KQEAgLTE4NDAwLDcgKzE4MzAxLDcgQEAKICAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAgCiAgaW50Ci1AQCAtOTI1NiwyMiArOTc4OSwyOSBAQCBtYWluICgpCitAQCAtOTI2MCwyMiArOTc5MywyOSBAQCBtYWluICgpCiAgX0FDRU9GCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogIApAQCAtMTg0NDMsNyArMTgzNDQsNyBAQAogIAogIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTkzMTYsMjAgKzk4NTYsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTMyMCwyMCArOTg2MCw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgogICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKICAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgpAQCAtMTg1MjEsNyArMTg0MjIsNyBAQAogICAgICAgIDs7CiAgCiAgICAgIGRhcndpbiogfCByaGFwc29keSopCi1AQCAtOTM5MCw3ICs5OTczLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtOTM5NCw3ICs5OTc3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQpAQCAtMTg1MzAsNyArMTg0MzEsNyBAQAogICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCiAgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotQEAgLTkzOTgsNyArOTk4MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTk0MDIsNyArOTk4NSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICBocHV4OSopCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KQEAgLTE4NTM5LDcgKzE4NDQwLDcgQEAKICAgICAgICBlbHNlCiAgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICAgZmkKLUBAIC05NDE0LDcgKzk5OTcsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05NDE4LDcgKzEwMDAxLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgIGhwdXgxMCopCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCkBAIC0xODU0OCw3ICsxODQ0OSw3IEBACiAgICAgICAgZWxzZQogIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICAgZmkKLUBAIC05NDM4LDEwICsxMDAyMSwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC05NDQyLDEwICsxMDAyNSwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogIAkgIDs7CiAgCWlhNjQqKQpAQCAtMTg1NjEsNyArMTg0NjIsNyBAQAogIAkgIDs7CiAgCWVzYWMKICAgICAgICBlbHNlCi1AQCAtOTUyMCwyMyArMTAxMDMsMzYgQEAgZmkKK0BAIC05NTI0LDIzICsxMDEwNywzNiBAQCBmaQogIAogICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCkBAIC0xODYwNiw3ICsxODUwNyw3IEBACiAgICAgICAgZWxzZQogIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLUBAIC05NjIxLDcgKzEwMjE3LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCitAQCAtOTYyNSw3ICsxMDIyMSw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCkBAIC0xODYxNSw3ICsxODUxNiw3IEBACiAgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgICBlbHNlCiAgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotQEAgLTk2NDAsOSArMTAyMzYsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK0BAIC05NjQ0LDkgKzEwMjQwLDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgCXdsYXJjPScke3dsfScKQEAgLTE4NjI3LDcgKzE4NTI4LDcgQEAKICAgICAgICBlbHNlCiAgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgogIAkqIkNvbXBpbGVycyA1LjAiKikKLUBAIC0xMDIxOCw4ICsxMDgxNCw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKK0BAIC0xMDIyMiw4ICsxMDgxOCw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgIG5lZWRfdmVyc2lvbj1ubwogICAgbmVlZF9saWJfcHJlZml4PW5vCiAgCkBAIC0xODYzOSw3ICsxODU0MCw3IEBACiAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKICAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci1AQCAtMTAyNTIsMTMgKzEwODQ5LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKK0BAIC0xMDI1NiwxMyArMTA4NTMsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKICAgICAgICA7OwogICAgICBlc2FjCkBAIC0xODcxMiw3ICsxODYxMyw3IEBACiAgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KICAgIHNobGlicGF0aF92YXI9UEFUSAogICAgOzsKLUBAIC0xMDM1MCw3ICsxMTAwNSw3IEBAIGhhaWt1KikKK0BAIC0xMDM1NCw3ICsxMTAwOSw3IEBAIGhhaWt1KikKICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAogICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwpAQCAtMTg3MjEsMTYgKzE4NjIyLDcgQEAKICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgIDs7CiAgCi1AQCAtMTExNDYsNyArMTE4MDEsNyBAQCBlbHNlCi0gICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLS0jbGluZSAxMTE0OSAiY29uZmlndXJlIgotKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSAjaW5jbHVkZSAiY29uZmRlZnMuaCIKLSAKLSAjaWYgSEFWRV9ETEZDTl9ICi1AQCAtMTExOTAsMTAgKzExODQ1LDEwIEBAIGVsc2UKK0BAIC0xMTE5NCwxMCArMTE4NDksMTAgQEAgZWxzZQogIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCiAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCkBAIC0xODc0MywxNiArMTg2MzUsNyBAQAogIGludCBtYWluICgpCiAgewogICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci1AQCAtMTEyNTIsNyArMTE5MDcsNyBAQCBlbHNlCi0gICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLS0jbGluZSAxMTI1NSAiY29uZmlndXJlIgotKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSAjaW5jbHVkZSAiY29uZmRlZnMuaCIKLSAKLSAjaWYgSEFWRV9ETEZDTl9ICi1AQCAtMTEyOTYsMTAgKzExOTUxLDEwIEBAIGVsc2UKK0BAIC0xMTMwMCwxMCArMTE5NTUsMTAgQEAgZWxzZQogIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCiAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCkBAIC0xODc2NSw3ICsxODY0OCw3IEBACiAgaW50IG1haW4gKCkKICB7CiAgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMjQ2Miw3ICsxMzExNyw3IEBAIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCitAQCAtMTI0OTksNyArMTMxNTQsNyBAQCBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgogICMgc2luY2UgbGliYmZkIG1heSBub3QgcHVsbCBpbiB0aGUgZW50aXJldHkgb2YgbGliaWJlcnR5LgogICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKICAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgpAQCAtMTg3NzQsNyArMTg2NTcsNyBAQAogICAgZmkKICAKICAgIGNhc2UgIiR7aG9zdH0iIGluCi1AQCAtMTM0MzYsMTMgKzE0MDkxLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzQ3MywxMyArMTQxMjgsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtMTg3OTUsNyArMTg2NzgsNyBAQAogIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTM0NTcsMTQgKzE0MTE5LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCitAQCAtMTM0OTQsMTQgKzE0MTU2LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtMTg4MTQsNyArMTg2OTcsNyBAQAogIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTEzNDk3LDEyICsxNDE2MiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorQEAgLTEzNTM0LDEyICsxNDE5OSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQogIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTE4ODI4LDcgKzE4NzExLDcgQEAKICBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTEzNTU3LDggKzE0MjIyLDEzIEBAIHJlbG9hZF9mbGFnIFwKK0BAIC0xMzU5NCw4ICsxNDI1OSwxMyBAQCByZWxvYWRfZmxhZyBcCiAgT0JKRFVNUCBcCiAgZGVwbGlic19jaGVja19tZXRob2QgXAogIGZpbGVfbWFnaWNfY21kIFwKQEAgLTE4ODQyLDcgKzE4NzI1LDcgQEAKICBTVFJJUCBcCiAgUkFOTElCIFwKICBDQyBcCi1AQCAtMTM1NjgsMTIgKzE0MjM4LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorQEAgLTEzNjA1LDEyICsxNDI3NSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXApAQCAtMTg4NTgsNyArMTg3NDEsNyBAQAogIERTWU1VVElMIFwKICBOTUVESVQgXAogIExJUE8gXAotQEAgLTEzNTg5LDcgKzE0MjYxLDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorQEAgLTEzNjI2LDcgKzE0Mjk4LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAogIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAogIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAogIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXApAQCAtMTg4NjYsNyArMTg3NDksNyBAQAogIGV4Y2x1ZGVfZXhwc3ltcyBcCiAgaW5jbHVkZV9leHBzeW1zIFwKICBmaWxlX2xpc3Rfc3BlYyBcCi1AQCAtMTM2MjUsNiArMTQyOTYsNyBAQCBtb2R1bGVfY21kcyBcCitAQCAtMTM2NjIsNiArMTQzMzMsNyBAQCBtb2R1bGVfY21kcyBcCiAgbW9kdWxlX2V4cHN5bV9jbWRzIFwKICBleHBvcnRfc3ltYm9sc19jbWRzIFwKICBwcmVsaW5rX2NtZHMgXApAQCAtMTg4NzQsNyArMTg3NTcsNyBAQAogIHBvc3RpbnN0YWxsX2NtZHMgXAogIHBvc3R1bmluc3RhbGxfY21kcyBcCiAgZmluaXNoX2NtZHMgXAotQEAgLTE0MzgxLDcgKzE1MDUzLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorQEAgLTE0NDE4LDcgKzE1MDkwLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAogICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgogICMKICAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LApAQCAtMTg4ODQsNyArMTg3NjcsNyBAQAogICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CiAgIwogICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KLUBAIC0xNDQ4NCwxOSArMTUxNTcsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCitAQCAtMTQ1MjEsMTkgKzE1MTk0LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAogICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KICBOTDJTUD0kbHRfbHRfTkwyU1AKICAKQEAgLTE4OTI4LDcgKzE4ODExLDcgQEAKICAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgogIFNUUklQPSRsdF9TVFJJUAogIAotQEAgLTE0NTI2LDYgKzE1MjIyLDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCitAQCAtMTQ1NjMsNiArMTUyNTksMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKICAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgogIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAogIApAQCAtMTg5NDEsNyArMTg4MjQsNyBAQAogICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgogIG9iamRpcj0kb2JqZGlyCiAgCi1AQCAtMTQ1MzUsNiArMTUyMzcsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorQEAgLTE0NTcyLDYgKzE1Mjc0LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKICAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwogIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKICAKQEAgLTE4OTUxLDcgKzE4ODM0LDcgQEAKICAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCiAgRFNZTVVUSUw9JGx0X0RTWU1VVElMCiAgCi1AQCAtMTQ2NDksMTIgKzE1MzU0LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKK0BAIC0xNDY4NiwxMiArMTUzOTEsMTIgQEAgd2l0aF9nY2M9JEdDQwogICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KICBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCiAgCkBAIC0xODk2Nyw3ICsxODg1MCw3IEBACiAgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgogIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCiAgCi1AQCAtMTQ3NDEsOSArMTU0NDYsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCitAQCAtMTQ3NzgsOSArMTU0ODMsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCiAgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCiAgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwogIApAQCAtMTg5NzcsNyArMTg4NjAsNyBAQAogICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgogIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCiAgCi1AQCAtMTQ3NTksNiArMTU0NjEsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworQEAgLTE0Nzk2LDYgKzE1NDk4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKICAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgogIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCiAgCkBAIC0xODk4Nyw3ICsxODg3MCw3IEBACiAgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCiAgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCiAgCi1AQCAtMTQ3OTEsMjEwICsxNTQ5NiwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitAQCAtMTQ4MjgsMjEwICsxNTUzMywxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCiAgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCiAgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQogICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KQEAgLTE5MzYyLDcgKzE5MjQ1LDcgQEAKICAgIGNobW9kICt4ICIkb2ZpbGUiCiAgCiBkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUuYWMgYi9vcGNvZGVzL2NvbmZpZ3VyZS5hYwotaW5kZXggMDdlMzE2Mi4uYzBjNzVkNCAxMDA2NDQKK2luZGV4IGM3ZjQ3ODMuLmYyZTAwMmQgMTAwNjQ0CiAtLS0gYS9vcGNvZGVzL2NvbmZpZ3VyZS5hYwogKysrIGIvb3Bjb2Rlcy9jb25maWd1cmUuYWMKIEBAIC0xNjcsNyArMTY3LDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKQEAgLTE5Mzc1LDcgKzE5MjU4LDcgQEAKICAKICAgIGNhc2UgIiR7aG9zdH0iIGluCiBkaWZmIC0tZ2l0IGEvemxpYi9jb25maWd1cmUgYi96bGliL2NvbmZpZ3VyZQotaW5kZXggODM3ODg1Ny4uNzU4NDk0MCAxMDA3NTUKK2luZGV4IGJiYTlmZDIuLjI1YTJkYWUgMTAwNzU1CiAtLS0gYS96bGliL2NvbmZpZ3VyZQogKysrIGIvemxpYi9jb25maWd1cmUKIEBAIC02MTQsOCArNjE0LDExIEBAIE9UT09MCkBAIC0xOTM5MCw3ICsxOTI3Myw3IEBACiAgT0JKRFVNUAogIExOX1MKICBOTQotQEAgLTczNiw2ICs3MzksNyBAQCBlbmFibGVfc3RhdGljCitAQCAtNzM3LDYgKzc0MCw3IEBAIGVuYWJsZV9zdGF0aWMKICB3aXRoX3BpYwogIGVuYWJsZV9mYXN0X2luc3RhbGwKICB3aXRoX2dudV9sZApAQCAtMTkzOTgsNyArMTkyODEsNyBAQAogIGVuYWJsZV9saWJ0b29sX2xvY2sKICBlbmFibGVfaG9zdF9zaGFyZWQKICAnCi1AQCAtMTM4NCw2ICsxMzg4LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CitAQCAtMTM4NSw2ICsxMzg5LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CiAgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCiAgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCkBAIC0xOTQwNyw3ICsxOTI5MCw3IEBACiAgCiAgU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAgICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKLUBAIC0zOTA3LDggKzM5MTMsOCBAQCBlc2FjCitAQCAtMzkxMCw4ICszOTE2LDggQEAgZXNhYwogIAogIAogIApAQCAtMTk0MTgsNyArMTkzMDEsNyBAQAogIAogIAogIAotQEAgLTM5NDgsNyArMzk1NCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitAQCAtMzk1MSw3ICszOTU3LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQogICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgpAQCAtMTk0MjcsNyArMTkzMTAsNyBAQAogICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCiAgICBFQ0hPPSdwcmludCAtciAtLScKICBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotQEAgLTQ3NjQsOCArNDc3MCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CitAQCAtNDc2Nyw4ICs0NzczLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKICAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcwogIHhzaV9zaGVsbD1ubwogICggX2x0X2R1bW15PSJhL2IvYyIKQEAgLTE5NDM4LDcgKzE5MzIxLDcgQEAKICAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAogICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAogICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTQ4MTQsNiArNDgyMCw4MCBAQCBlc2FjCitAQCAtNDgxNyw2ICs0ODIzLDgwIEBAIGVzYWMKICAKICAKICAKQEAgLTE5NTE5LDcgKzE5NDAyLDcgQEAKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQogICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC00ODMwLDYgKzQ5MTAsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KK0BAIC00ODMzLDYgKzQ5MTMsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KICBlc2FjCiAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwogIGNhc2UgJGhvc3Rfb3MgaW4KQEAgLTE5NTMxLDcgKzE5NDE0LDcgQEAKICAgIGRhcndpbiopCiAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotQEAgLTQ5OTgsNyArNTA4Myw4IEBAIG1pbmd3KiB8IHB3MzIqKQorQEAgLTUwMDEsNyArNTA4Niw4IEBAIG1pbmd3KiB8IHB3MzIqKQogICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwogICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKICAgIGVsc2UKQEAgLTE5NTQxLDcgKzE5NDI0LDcgQEAKICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwogICAgZmkKICAgIDs7Ci1AQCAtNTE1Miw2ICs1MjM4LDIxIEBAIGVzYWMKK0BAIC01MTU1LDYgKzUyNDEsMjEgQEAgZXNhYwogIGZpCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CiAgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CkBAIC0xOTU2Myw3ICsxOTQ0Niw3IEBACiAgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCiAgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCiAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi1AQCAtNTE2Nyw5ICs1MjY4LDE2MyBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC01MTcwLDkgKzUyNzEsMTYzIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgogIAogIAogIApAQCAtMTk3MjksNyArMTk2MTIsNyBAQAogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTUxODUsNyArNTQ0MCw3IEBAIGRvCitAQCAtNTE4OCw3ICs1NDQzLDcgQEAgZG8KICAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgpAQCAtMTk3MzgsNyArMTk2MjEsNyBAQAogICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICAgYnJlYWsgMgogICAgZmkKLUBAIC01MjA1LDExICs1NDYwLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CitAQCAtNTIwOCwxMSArNTQ2MywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQogIGZpCiAgCiAgCkBAIC0xOTc1Nyw3ICsxOTY0MCw3IEBACiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQogIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNTIyNSw3ICs1NDg0LDcgQEAgZG8KK0BAIC01MjI4LDcgKzU0ODcsNyBAQCBkbwogICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCkBAIC0xOTc2Niw3ICsxOTY0OSw3IEBACiAgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgICBicmVhayAyCiAgICBmaQotQEAgLTUyNDQsNiArNTUwMywxMCBAQCBlbHNlCitAQCAtNTI0Nyw2ICs1NTA2LDEwIEBAIGVsc2UKICAkYXNfZWNobyAibm8iID4mNjsgfQogIGZpCiAgCkBAIC0xOTc3Nyw3ICsxOTY2MCw3IEBACiAgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KICAgICAgQVI9ImZhbHNlIgogICAgZWxzZQotQEAgLTUyNTUsMTYgKzU1MTgsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CitAQCAtNTI1OCwxNiArNTUyMSw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKICBlc2FjCiAgICAgIEFSPSRhY19jdF9BUgogICAgZmkKQEAgLTE5ODU0LDcgKzE5NzM3LDcgQEAKICAKICAKICAKLUBAIC01NjA2LDggKzU5MjUsOCBAQCBlc2FjCitAQCAtNTYwOSw4ICs1OTI4LDggQEAgZXNhYwogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCiAgCiAgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCkBAIC0xOTg2NSw3ICsxOTc0OCw3IEBACiAgCiAgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCiAgb3B0X2NyPQotQEAgLTU2NDMsNiArNTk2Miw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KK0BAIC01NjQ2LDYgKzU5NjUsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCiAgICBlbHNlCiAgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCiAgICBmaQpAQCAtMTk4NzMsNyArMTk3NTYsNyBAQAogIAogICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCiAgICBwaXBlX3dvcmtzPW5vCi1AQCAtNTY4NCw2ICs2MDA0LDE4IEBAIF9MVF9FT0YKK0BAIC01Njg3LDYgKzYwMDcsMTggQEAgX0xUX0VPRgogICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCiAgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgogIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CkBAIC0xOTg5Miw3ICsxOTc3NSw3IEBACiAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgZXh0ZXJuICJDIiB7CiAgI2VuZGlmCi1AQCAtNTY5NSw3ICs2MDI3LDcgQEAgX0xUX0VPRgorQEAgLTU2OTgsNyArNjAzMCw3IEBAIF9MVF9FT0YKICAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKICAKICAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCkBAIC0xOTkwMSw3ICsxOTc4NCw3IEBACiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgdm9pZCAgICAgICAqYWRkcmVzczsKICB9Ci1AQCAtNTcyMSw4ICs2MDUzLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKK0BAIC01NzI0LDggKzYwNTYsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewogIF9MVF9FT0YKICAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgogIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dApAQCAtMTk5MTIsNyArMTk3OTUsNyBAQAogIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCiAgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgogIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotQEAgLTU3MzIsOCArNjA2NCw4IEBAIF9MVF9FT0YKK0BAIC01NzM1LDggKzYwNjcsOCBAQCBfTFRfRU9GCiAgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KICAJICAgIHBpcGVfd29ya3M9eWVzCiAgCSAgZmkKQEAgLTE5OTIzLDcgKzE5ODA2LDcgQEAKICAJZWxzZQogIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQogIAlmaQotQEAgLTU3NzAsNiArNjEwMiwxOSBAQCBlbHNlCitAQCAtNTc3Myw2ICs2MTA1LDE5IEBAIGVsc2UKICAkYXNfZWNobyAib2siID4mNjsgfQogIGZpCiAgCkBAIC0xOTk0Myw3ICsxOTgyNiw3IEBACiAgCiAgCiAgCi1AQCAtNTc5MCw2ICs2MTM1LDQxIEBAIGZpCitAQCAtNTc5Myw2ICs2MTM4LDQxIEBAIGZpCiAgCiAgCiAgCkBAIC0xOTk4NSw3ICsxOTg2OCw3IEBACiAgCiAgCiAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCi1AQCAtNjAwMSw2ICs2MzgxLDEyMyBAQCBlc2FjCitAQCAtNjAwNCw2ICs2Mzg0LDEyMyBAQCBlc2FjCiAgCiAgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCiAgCkBAIC0yMDEwOSw3ICsxOTk5Miw3IEBACiAgCiAgICBjYXNlICRob3N0X29zIGluCiAgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi1AQCAtNjU2Nyw2ICs3MDY0LDggQEAgX0xUX0VPRgorQEAgLTY1NzAsNiArNzA2Nyw4IEBAIF9MVF9FT0YKICAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKICAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CiAgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQpAQCAtMjAxMTgsNyArMjAwMDEsNyBAQAogICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgogIGludCBtYWluKCkgeyByZXR1cm4gMDt9CiAgX0xUX0VPRgotQEAgLTcwMzAsNyArNzUyOSw4IEBAIGZpCitAQCAtNzAzMyw3ICs3NTMyLDggQEAgZmkKICBMSUJUT09MX0RFUFM9IiRsdG1haW4iCiAgCiAgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KQEAgLTIwMTI4LDcgKzIwMDExLDcgQEAKICAKICAKICAKLUBAIC03MTE5LDcgKzc2MTksNyBAQCBhaXgzKikKK0BAIC03MTIyLDcgKzc2MjIsNyBAQCBhaXgzKikKICBlc2FjCiAgCiAgIyBHbG9iYWwgdmFyaWFibGVzOgpAQCAtMjAxMzcsNyArMjAwMjAsNyBAQAogIGNhbl9idWlsZF9zaGFyZWQ9eWVzCiAgCiAgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi1AQCAtNzQxNyw4ICs3OTE3LDYgQEAgZmkKK0BAIC03NDIwLDggKzc5MjAsNiBAQCBmaQogIGx0X3Byb2dfY29tcGlsZXJfcGljPQogIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogIApAQCAtMjAxNDYsNyArMjAwMjksNyBAQAogIAogICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLUBAIC03NTg0LDYgKzgwODIsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK0BAIC03NTg3LDYgKzgwODUsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KICAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJwogIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCiAgCTs7CkBAIC0yMDE1OSw3ICsyMDA0Miw3IEBACiAgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKICAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLUBAIC03NjQ2LDcgKzgxNTAsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorQEAgLTc2NDksNyArODE1Myw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CiAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgpAQCAtMjAxNjgsNyArMjAwNTEsNyBAQAogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKICAgICAgICAqKQogIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7Ci1AQCAtNzcwMywxMyArODIwNywxNyBAQCBjYXNlICRob3N0X29zIGluCitAQCAtNzcwNiwxMyArODIxMCwxNyBAQCBjYXNlICRob3N0X29zIGluCiAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCiAgICAgIDs7CiAgZXNhYwpAQCAtMjAxOTIsNyArMjAwNzUsNyBAQAogIAogICMKICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi1AQCAtNzc3MCw2ICs4Mjc4LDExIEBAIGZpCitAQCAtNzc3Myw2ICs4MjgxLDExIEBAIGZpCiAgCiAgCiAgCkBAIC0yMDIwNCw3ICsyMDA4Nyw3IEBACiAgIwogICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICAjCi1AQCAtODEyMCw3ICs4NjMzLDggQEAgX0xUX0VPRgorQEAgLTgxMjMsNyArODYzNiw4IEBAIF9MVF9FT0YKICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCkBAIC0yMDIxNCw3ICsyMDA5Nyw3IEBACiAgCiAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLUBAIC04MjE5LDEyICs4NzMzLDEyIEBAIF9MVF9FT0YKK0BAIC04MjIyLDEyICs4NzM2LDEyIEBAIF9MVF9FT0YKICAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJwpAQCAtMjAyMjksNyArMjAxMTIsNyBAQAogIAkgIGZpCiAgCSAgOzsKICAJZXNhYwotQEAgLTgyMzgsOCArODc1Miw4IEBAIF9MVF9FT0YKK0BAIC04MjQxLDggKzg3NTUsOCBAQCBfTFRfRU9GCiAgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKICAJd2xhcmM9CiAgICAgICAgZWxzZQpAQCAtMjAyNDAsNyArMjAxMjMsNyBAQAogICAgICAgIGZpCiAgICAgICAgOzsKICAKLUBAIC04MjU3LDggKzg3NzEsOCBAQCBfTFRfRU9GCitAQCAtODI2MCw4ICs4Nzc0LDggQEAgX0xUX0VPRgogIAogIF9MVF9FT0YKICAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KQEAgLTIwMjUxLDcgKzIwMTM0LDcgQEAKICAgICAgICBlbHNlCiAgCWxkX3NobGlicz1ubwogICAgICAgIGZpCi1AQCAtODMwNCw4ICs4ODE4LDggQEAgX0xUX0VPRgorQEAgLTgzMDcsOCArODgyMSw4IEBAIF9MVF9FT0YKICAKICAgICAgKikKICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCkBAIC0yMDI2Miw3ICsyMDE0NSw3IEBACiAgICAgICAgZWxzZQogIAlsZF9zaGxpYnM9bm8KICAgICAgICBmaQotQEAgLTg0MzUsNyArODk0OSwxMyBAQCBfTFRfRU9GCitAQCAtODQzOCw3ICs4OTUyLDEzIEBAIF9MVF9FT0YKICAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgogICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgpAQCAtMjAyNzcsNyArMjAxNjAsNyBAQAogICAgYXNfZm5fZXJyb3IgIkxpbmsgdGVzdHMgYXJlIG5vdCBhbGxvd2VkIGFmdGVyIEdDQ19OT19FWEVDVVRBQkxFUy4iICIkTElORU5PIiA1CiAgZmkKICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci1AQCAtODQ1MSwyMiArODk3MSwyOSBAQCBtYWluICgpCitAQCAtODQ1NCwyMiArODk3NCwyOSBAQCBtYWluICgpCiAgX0FDRU9GCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogIApAQCAtMjAzMjAsNyArMjAyMDMsNyBAQAogIAogICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi1AQCAtODQ3OCw3ICs5MDA1LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTg0ODEsNyArOTAwOCwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAJZWxzZQogIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCkBAIC0yMDMzNSw3ICsyMDIxOCw3IEBACiAgICBhc19mbl9lcnJvciAiTGluayB0ZXN0cyBhcmUgbm90IGFsbG93ZWQgYWZ0ZXIgR0NDX05PX0VYRUNVVEFCTEVTLiIgIiRMSU5FTk8iIDUKICBmaQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLUBAIC04NDk0LDIyICs5MDI3LDI5IEBAIG1haW4gKCkKK0BAIC04NDk3LDIyICs5MDMwLDI5IEBAIG1haW4gKCkKICBfQUNFT0YKICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgCkBAIC0yMDM3OCw3ICsyMDI2MSw3IEBACiAgCiAgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi1AQCAtODU1NCwyMCArOTA5NCw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC04NTU3LDIwICs5MDk3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCiAgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwogICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCkBAIC0yMDQ1Niw3ICsyMDMzOSw3IEBACiAgICAgICAgOzsKICAKICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLUBAIC04NjI4LDcgKzkyMTEsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC04NjMxLDcgKzkyMTQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKICAKICAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgogICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCkBAIC0yMDQ2NSw3ICsyMDM0OCw3IEBACiAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwogICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi1AQCAtODYzNiw3ICs5MjE5LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitAQCAtODYzOSw3ICs5MjIyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAgCiAgICAgIGhwdXg5KikKICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgpAQCAtMjA0NzQsNyArMjAzNTcsNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgICBmaQotQEAgLTg2NTIsNyArOTIzNSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorQEAgLTg2NTUsNyArOTIzOCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAogICAgICBocHV4MTAqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgpAQCAtMjA0ODMsNyArMjAzNjYsNyBAQAogICAgICAgIGVsc2UKICAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgIGZpCi1AQCAtODY3NiwxMCArOTI1OSwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK0BAIC04Njc5LDEwICs5MjYyLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgCSAgOzsKICAJaWE2NCopCkBAIC0yMDQ5Niw3ICsyMDM3OSw3IEBACiAgCSAgOzsKICAJZXNhYwogICAgICAgIGVsc2UKLUBAIC04NzU4LDI2ICs5MzQxLDM5IEBAIGZpCitAQCAtODc2MSwyNiArOTM0NCwzOSBAQCBmaQogIAogICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQogICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCkBAIC0yMDU0NCw3ICsyMDQyNyw3IEBACiAgICAgICAgZWxzZQogIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLUBAIC04ODYyLDcgKzk0NTgsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK0BAIC04ODY1LDcgKzk0NjEsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwpAQCAtMjA1NTMsNyArMjA0MzYsNyBAQAogIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICAgZWxzZQogIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLUBAIC04ODgxLDkgKzk0NzcsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKK0BAIC04ODg0LDkgKzk0ODAsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCiAgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAJd2xhcmM9JyR7d2x9JwpAQCAtMjA1NjUsNyArMjA0NDgsNyBAQAogICAgICAgIGVsc2UKICAJY2FzZSBgJENDIC1WIDI+JjFgIGluCiAgCSoiQ29tcGlsZXJzIDUuMCIqKQotQEAgLTk0NTksOCArMTAwNTUsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCitAQCAtOTQ2Miw4ICsxMDA1OCw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgIG5lZWRfdmVyc2lvbj1ubwogICAgbmVlZF9saWJfcHJlZml4PW5vCiAgCkBAIC0yMDU3Nyw3ICsyMDQ2MCw3IEBACiAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKICAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci1AQCAtOTQ5MywxMyArMTAwOTAsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorQEAgLTk0OTYsMTMgKzEwMDkzLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCiAgICAgICAgOzsKICAgICAgZXNhYwpAQCAtMjA2NTAsNyArMjA1MzMsNyBAQAogICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCiAgICBzaGxpYnBhdGhfdmFyPVBBVEgKICAgIDs7Ci1AQCAtOTU5MSw3ICsxMDI0Niw3IEBAIGhhaWt1KikKK0BAIC05NTk0LDcgKzEwMjQ5LDcgQEAgaGFpa3UqKQogICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICiAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCkBAIC0yMDY1OSwxNiArMjA1NDIsMTYgQEAKICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgIDs7CiAgCi1AQCAtMTA0MDUsNyArMTEwNjAsNyBAQCBlbHNlCitAQCAtMTA0MDgsNyArMTEwNjMsNyBAQCBlbHNlCiAgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCiAgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgogICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLS0jbGluZSAxMDQwOCAiY29uZmlndXJlIgorLSNsaW5lIDEwNDExICJjb25maWd1cmUiCiArI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgogICNpbmNsdWRlICJjb25mZGVmcy5oIgogIAogICNpZiBIQVZFX0RMRkNOX0gKLUBAIC0xMDQ0OSwxMCArMTExMDQsMTAgQEAgZWxzZQorQEAgLTEwNDUyLDEwICsxMTEwNywxMCBAQCBlbHNlCiAgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KICAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKQEAgLTIwNjgxLDE2ICsyMDU2NCwxNiBAQAogIGludCBtYWluICgpCiAgewogICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci1AQCAtMTA1MTEsNyArMTExNjYsNyBAQCBlbHNlCitAQCAtMTA1MTQsNyArMTExNjksNyBAQCBlbHNlCiAgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCiAgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgogICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLS0jbGluZSAxMDUxNCAiY29uZmlndXJlIgorLSNsaW5lIDEwNTE3ICJjb25maWd1cmUiCiArI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgogICNpbmNsdWRlICJjb25mZGVmcy5oIgogIAogICNpZiBIQVZFX0RMRkNOX0gKLUBAIC0xMDU1NSwxMCArMTEyMTAsMTAgQEAgZWxzZQorQEAgLTEwNTU4LDEwICsxMTIxMywxMCBAQCBlbHNlCiAgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KICAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKQEAgLTIwNzAzLDcgKzIwNTg2LDcgQEAKICBpbnQgbWFpbiAoKQogIHsKICAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTExOTkwLDEzICsxMjY0NSwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTE5OTMsMTMgKzEyNjQ4LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTIwNzI0LDcgKzIwNjA3LDcgQEAKICBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTEyMDExLDE0ICsxMjY3MywxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorQEAgLTEyMDE0LDE0ICsxMjY3NiwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTIwNzQzLDcgKzIwNjI2LDcgQEAKICBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xMjA1MSwxMiArMTI3MTYsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKK0BAIC0xMjA1NCwxMiArMTI3MTksMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKICBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCkBAIC0yMDc1Nyw3ICsyMDY0MCw3IEBACiAgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xMjExMSw4ICsxMjc3NiwxMyBAQCByZWxvYWRfZmxhZyBcCitAQCAtMTIxMTQsOCArMTI3NzksMTMgQEAgcmVsb2FkX2ZsYWcgXAogIE9CSkRVTVAgXAogIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKICBmaWxlX21hZ2ljX2NtZCBcCkBAIC0yMDc3MSw3ICsyMDY1NCw3IEBACiAgU1RSSVAgXAogIFJBTkxJQiBcCiAgQ0MgXAotQEAgLTEyMTIyLDEyICsxMjc5MiwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKK0BAIC0xMjEyNSwxMiArMTI3OTUsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCiAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAogIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKQEAgLTIwNzg3LDcgKzIwNjcwLDcgQEAKICBEU1lNVVRJTCBcCiAgTk1FRElUIFwKICBMSVBPIFwKLUBAIC0xMjE0Myw3ICsxMjgxNSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKK0BAIC0xMjE0Niw3ICsxMjgxOCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKQEAgLTIwNzk1LDcgKzIwNjc4LDcgQEAKICBleGNsdWRlX2V4cHN5bXMgXAogIGluY2x1ZGVfZXhwc3ltcyBcCiAgZmlsZV9saXN0X3NwZWMgXAotQEAgLTEyMTc5LDYgKzEyODUwLDcgQEAgbW9kdWxlX2NtZHMgXAorQEAgLTEyMTgyLDYgKzEyODUzLDcgQEAgbW9kdWxlX2NtZHMgXAogIG1vZHVsZV9leHBzeW1fY21kcyBcCiAgZXhwb3J0X3N5bWJvbHNfY21kcyBcCiAgcHJlbGlua19jbWRzIFwKQEAgLTIwODAzLDcgKzIwNjg2LDcgQEAKICBwb3N0aW5zdGFsbF9jbWRzIFwKICBwb3N0dW5pbnN0YWxsX2NtZHMgXAogIGZpbmlzaF9jbWRzIFwKLUBAIC0xMjc2OCw3ICsxMzQ0MCw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKK0BAIC0xMjc3MSw3ICsxMzQ0Myw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKICAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KICAjCiAgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKQEAgLTIwODEzLDcgKzIwNjk2LDcgQEAKICAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgogICMKICAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCi1AQCAtMTI4NzEsMTkgKzEzNTQ0LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorQEAgLTEyODc0LDE5ICsxMzU0Nyw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKICAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCiAgTkwyU1A9JGx0X2x0X05MMlNQCiAgCkBAIC0yMDg1Nyw3ICsyMDc0MCw3IEBACiAgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KICBTVFJJUD0kbHRfU1RSSVAKICAKLUBAIC0xMjkxMyw2ICsxMzYwOSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworQEAgLTEyOTE2LDYgKzEzNjEyLDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCiAgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KICBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKICAKQEAgLTIwODcwLDcgKzIwNzUzLDcgQEAKICAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KICBvYmpkaXI9JG9iamRpcgogIAotQEAgLTEyOTIyLDYgKzEzNjI0LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKK0BAIC0xMjkyNSw2ICsxMzYyNyw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECiAgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KICBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCiAgCkBAIC0yMDg4MCw3ICsyMDc2Myw3IEBACiAgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgogIERTWU1VVElMPSRsdF9EU1lNVVRJTAogIAotQEAgLTEzMDM2LDEyICsxMzc0MSwxMiBAQCB3aXRoX2djYz0kR0NDCitAQCAtMTMwMzksMTIgKzEzNzQ0LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKICAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCiAgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwogIApAQCAtMjA4OTYsNyArMjA3NzksNyBAQAogICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KICBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwogIAotQEAgLTEzMTI4LDkgKzEzODMzLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorQEAgLTEzMTMxLDkgKzEzODM2LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAogICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgogIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKICAKQEAgLTIwOTA2LDcgKzIwNzg5LDcgQEAKICAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scwogIAotQEAgLTEzMTQ2LDYgKzEzODQ4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKK0BAIC0xMzE0OSw2ICsxMzg1MSw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCiAgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KICBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcwogIApAQCAtMjA5MTYsNyArMjA3OTksNyBAQAogICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgogIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwogIAotQEAgLTEzMTc4LDIxMCArMTM4ODMsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorQEAgLTEzMTgxLDIxMCArMTM4ODYsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgogICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgogICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KICAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CkBAIC0yMTI5MSw1ICsyMTE3NCw0IEBACiAgICBjaG1vZCAreCAiJG9maWxlIgogIAogLS0gCi0yLjcuMQotCisyLjkuMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKaW5kZXggY2IzZjgzYi4uNzk1YWJmMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA0ZmY5ZGJlMTNmMzhlNGZlYTI0ZmJjYzk4NzljZjczNTJjMDU2MWZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA5NDc1YWVlOGE3MDJhYTUzMTczN2VjMTJkZmQ5MjhkNTI5NTFiYzg0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozNzoxMCArMDAwMAotU3ViamVjdDogW1BBVENIIDA3LzE0XSBBZGQgdGhlIGFybXY1ZSBhcmNoaXRlY3R1cmUgdG8gYmludXRpbHMKK1N1YmplY3Q6IFtQQVRDSCAwNy8xM10gQWRkIHRoZSBhcm12NWUgYXJjaGl0ZWN0dXJlIHRvIGJpbnV0aWxzCiAKIEJpbnV0aWxzIGhhcyBhIGNvbW1lbnQgdGhhdCBpbmRpY2F0ZXMgaXQgaXMgc3VwcG9zZWQgdG8gbWF0Y2ggZ2NjIGZvcgogYWxsIG9mIHRoZSBzdXBwb3J0ICItbWFyY2g9IiBzZXR0aW5ncywgYnV0IGl0IHdhcyBsYWNraW5nIHRoZSBhcm12NWUgc2V0dGluZy4KQEAgLTE5LDEwICsxOSwxMCBAQAogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQogCiBkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZy90Yy1hcm0uYyBiL2dhcy9jb25maWcvdGMtYXJtLmMKLWluZGV4IDNiZDRiYzkuLjVkOTk5MjEgMTAwNjQ0CitpbmRleCA3M2QwNTMxLi40YjllMzJmIDEwMDY0NAogLS0tIGEvZ2FzL2NvbmZpZy90Yy1hcm0uYwogKysrIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYwotQEAgLTI0NzkxLDYgKzI0NzkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fYXJjaF9vcHRpb25fdGFibGUgYXJtX2FyY2hzW10gPQorQEAgLTI1NDIxLDYgKzI1NDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fYXJjaF9vcHRpb25fdGFibGUgYXJtX2FyY2hzW10gPQogICAgQVJNX0FSQ0hfT1BUICgiYXJtdjR0IiwJQVJNX0FSQ0hfVjRULAkgRlBVX0FSQ0hfRlBBKSwKICAgIEFSTV9BUkNIX09QVCAoImFybXY0dHhtIiwJQVJNX0FSQ0hfVjRUeE0sCSBGUFVfQVJDSF9GUEEpLAogICAgQVJNX0FSQ0hfT1BUICgiYXJtdjUiLAlBUk1fQVJDSF9WNSwJIEZQVV9BUkNIX1ZGUCksCkBAIC0zMSw1ICszMSw1IEBACiAgICBBUk1fQVJDSF9PUFQgKCJhcm12NXR4bSIsCUFSTV9BUkNIX1Y1VHhNLAkgRlBVX0FSQ0hfVkZQKSwKICAgIEFSTV9BUkNIX09QVCAoImFybXY1dGUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKIC0tIAotMi43LjEKKzIuOS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKaW5kZXggZjgzODJmOC4uYWY1MjRjZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGNiMzZkOTRkYmQ1MjE3NTJlNjQ0NDQxOGFmNTAwZTEzOWEyNmVhYmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGIyZDI3NzkzN2QxMWYxY2UxZDU4MWY0OGZmNzRhMjU4MjJhMDUyZGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjM5OjAxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDgvMTRdIGRvbid0IGxldCB0aGUgZGlzdHJvIGNvbXBpbGVyIHBvaW50IHRvIHRoZSB3cm9uZworU3ViamVjdDogW1BBVENIIDA4LzEzXSBkb24ndCBsZXQgdGhlIGRpc3RybyBjb21waWxlciBwb2ludCB0byB0aGUgd3JvbmcKICBpbnN0YWxsYXRpb24gbG9jYXRpb24KIAogVGhhbmtzIHRvIFJQIGZvciBoZWxwaW5nIGZpbmQgdGhlIHNvdXJjZSBjb2RlIGNhdXNpbmcgdGhlIGlzc3VlLgpAQCAtMTcsNyArMTcsNyBAQAogIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgotaW5kZXggN2Q3ZTJmNC4uMWFhYWYwZSAxMDA2NDQKK2luZGV4IGM3YTQ1NjguLmY3NjZiNzIgMTAwNjQ0CiAtLS0gYS9saWJpYmVydHkvTWFrZWZpbGUuaW4KICsrKyBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgogQEAgLTM2NCw3ICszNjQsOCBAQCBpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCkBAIC0zMSw1ICszMSw1IEBACiAgCWlmIHRlc3QgLW4gIiR7dGFyZ2V0X2hlYWRlcl9kaXJ9IjsgdGhlbiBcCiAgCQkke21raW5zdGFsbGRpcnN9ICQoREVTVERJUikkKGxpYmRpcikvJChNVUxUSU9TRElSKTsgXAogLS0gCi0yLjcuMQorMi45LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LXdhcm4tZm9yLXVzZXMtb2Ytc3lzdGVtLWRpcmVjdG9yaWVzLXdoZW4tY3Jvc3MtbGlua2kucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktd2Fybi1mb3ItdXNlcy1vZi1zeXN0ZW0tZGlyZWN0b3JpZXMtd2hlbi1jcm9zcy1saW5raS5wYXRjaAppbmRleCBkM2Y1MTBiLi4zYzgzZTY5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktd2Fybi1mb3ItdXNlcy1vZi1zeXN0ZW0tZGlyZWN0b3JpZXMtd2hlbi1jcm9zcy1saW5raS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktd2Fybi1mb3ItdXNlcy1vZi1zeXN0ZW0tZGlyZWN0b3JpZXMtd2hlbi1jcm9zcy1saW5raS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNGRhYTg0MWNlMTZiYTUyYjcxN2JkZmY5ZWIxZGZjNGYxOTYzODgxNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gN2FiOGUzMTg2NTllYjVkOWFkYzc1OGM3OGQwODRhOTU1NjBiOTNmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBGcmksIDE1IEphbiAyMDE2IDA2OjMxOjA5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDkvMTRdIHdhcm4gZm9yIHVzZXMgb2Ygc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZworU3ViamVjdDogW1BBVENIIDA5LzEzXSB3YXJuIGZvciB1c2VzIG9mIHN5c3RlbSBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcKIAogMjAwOC0wNy0wMiAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CiAKQEAgLTYzLDEwICs2MywxMCBAQAogIDkgZmlsZXMgY2hhbmdlZCwgODYgaW5zZXJ0aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvbGQvY29uZmlnLmluIGIvbGQvY29uZmlnLmluCi1pbmRleCAyNzZmYjc3Li4zNWM1OGViIDEwMDY0NAoraW5kZXggMmM2ZDY5OC4uZDNjYjdlOCAxMDA2NDQKIC0tLSBhL2xkL2NvbmZpZy5pbgogKysrIGIvbGQvY29uZmlnLmluCi1AQCAtMTQsNiArMTQsOSBAQAorQEAgLTE3LDYgKzE3LDkgQEAKICAgICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCiAgI3VuZGVmIEVOQUJMRV9OTFMKICAKQEAgLTc3LDEwICs3NywxMCBAQAogICN1bmRlZiBFWFRSQV9TSExJQl9FWFRFTlNJT04KICAKIGRpZmYgLS1naXQgYS9sZC9jb25maWd1cmUgYi9sZC9jb25maWd1cmUKLWluZGV4IGViNGYwZDcuLmU5MDU0YjQgMTAwNzU1CitpbmRleCAzZGYxMTQ5Li4wNjAxYzk4IDEwMDc1NQogLS0tIGEvbGQvY29uZmlndXJlCiArKysgYi9sZC9jb25maWd1cmUKLUBAIC03OTAsNiArNzkwLDcgQEAgd2l0aF9saWJfcGF0aAorQEAgLTc5Miw2ICs3OTIsNyBAQCB3aXRoX2xpYl9wYXRoCiAgZW5hYmxlX3RhcmdldHMKICBlbmFibGVfNjRfYml0X2JmZAogIHdpdGhfc3lzcm9vdApAQCAtODgsNyArODgsNyBAQAogIGVuYWJsZV9nb2xkCiAgZW5hYmxlX2dvdAogIGVuYWJsZV9jb21wcmVzc2VkX2RlYnVnX3NlY3Rpb25zCi1AQCAtMTQ0Niw2ICsxNDQ3LDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CitAQCAtMTQ0OSw2ICsxNDUwLDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CiAgICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCiAgICAtLWVuYWJsZS10YXJnZXRzICAgICAgICBhbHRlcm5hdGl2ZSB0YXJnZXQgY29uZmlndXJhdGlvbnMKICAgIC0tZW5hYmxlLTY0LWJpdC1iZmQgICAgIDY0LWJpdCBzdXBwb3J0IChvbiBob3N0cyB3aXRoIG5hcnJvd2VyIHdvcmQgc2l6ZXMpCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAtLWVuYWJsZS1nb2xkWz1BUkddICAgICBidWlsZCBnb2xkIFtBUkc9e2RlZmF1bHQseWVzLG5vfV0KICAgIC0tZW5hYmxlLWdvdD08dHlwZT4gICAgIEdPVCBoYW5kbGluZyBzY2hlbWUgKHRhcmdldCwgc2luZ2xlLCBuZWdhdGl2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpZ290KQotQEAgLTE2MzA2LDYgKzE2MzA5LDE5IEBAIGZpCitAQCAtMTYzMTMsNiArMTYzMTYsMTkgQEAgZmkKICAKICAKICAKQEAgLTExOCw3ICsxMTgsNyBAQAogIGlmIHRlc3QgIiR7ZW5hYmxlX2dvbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAgZW5hYmxldmFsPSRlbmFibGVfZ29sZDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgogZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS5hYyBiL2xkL2NvbmZpZ3VyZS5hYwotaW5kZXggZTI4ZjM4ZS4uN2I0NzRlNyAxMDA2NDQKK2luZGV4IGQxNzI4MWYuLjlmYjNkYjkgMTAwNjQ0CiAtLS0gYS9sZC9jb25maWd1cmUuYWMKICsrKyBiL2xkL2NvbmZpZ3VyZS5hYwogQEAgLTk1LDYgKzk1LDE2IEBAIEFDX1NVQlNUKHVzZV9zeXNyb290KQpAQCAtMTM5LDEwICsxMzksMTAgQEAKICBkbmwgImluc3RhbGxfYXNfZGVmYXVsdCIgaXMgc2V0IHRvIGZhbHNlIGlmIGdvbGQgaXMgdGhlIGRlZmF1bHQgbGlua2VyLgogIGRubCAiaW5zdGFsbGVkX2xpbmtlciIgaXMgdGhlIGluc3RhbGxlZCBCRkQgbGlua2VyIG5hbWUuCiBkaWZmIC0tZ2l0IGEvbGQvbGQuaCBiL2xkL2xkLmgKLWluZGV4IGQ4NGVjNGUuLjM0NzZiMjYgMTAwNjQ0CitpbmRleCA4NWE0OGFkLi5hOGZkZGRmIDEwMDY0NAogLS0tIGEvbGQvbGQuaAogKysrIGIvbGQvbGQuaAotQEAgLTE2NCw2ICsxNjQsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgeworQEAgLTE2OSw2ICsxNjksMTQgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgIC8qIElmIHNldCwgZGlzcGxheSB0aGUgdGFyZ2V0IG1lbW9yeSB1c2FnZSAocGVyIG1lbW9yeSByZWdpb24pLiAgKi8KICAgIGJmZF9ib29sZWFuIHByaW50X21lbW9yeV91c2FnZTsKICAKQEAgLTE1OCwxMCArMTU4LDEwIEBACiAgICBlbnVtIGVuZGlhbl9lbnVtIGVuZGlhbjsKICAKIGRpZmYgLS1naXQgYS9sZC9sZC50ZXhpbmZvIGIvbGQvbGQudGV4aW5mbwotaW5kZXggMjM4OTY2MS4uZDA2MTEyYiAxMDA2NDQKK2luZGV4IGJjMTY3NjQuLjgzOGM3NWQgMTAwNjQ0CiAtLS0gYS9sZC9sZC50ZXhpbmZvCiArKysgYi9sZC9sZC50ZXhpbmZvCi1AQCAtMjMzOCw2ICsyMzM4LDE4IEBAIHN0cmluZyBpZGVudGlmeWluZyB0aGUgb3JpZ2luYWwgbGlua2VkIGZpbGUgZG9lcyBub3QgY2hhbmdlLgorQEAgLTIzNTcsNiArMjM1NywxOCBAQCBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIG9yaWdpbmFsIGxpbmtlZCBmaWxlIGRvZXMgbm90IGNoYW5nZS4KICAKICBQYXNzaW5nIEBjb2Rle25vbmV9IGZvciBAdmFye3N0eWxlfSBkaXNhYmxlcyB0aGUgc2V0dGluZyBmcm9tIGFueQogIEBjb2Rley0tYnVpbGQtaWR9IG9wdGlvbnMgZWFybGllciBvbiB0aGUgY29tbWFuZCBsaW5lLgpAQCAtMTgxLDcgKzE4MSw3IEBACiAgCiAgQGMgbWFuIGVuZAogZGlmZiAtLWdpdCBhL2xkL2xkZmlsZS5jIGIvbGQvbGRmaWxlLmMKLWluZGV4IDk2ZjllY2MuLmFmMjMxYzAgMTAwNjQ0CitpbmRleCBlMzk3NzM3Li4wMTM3MjdiIDEwMDY0NAogLS0tIGEvbGQvbGRmaWxlLmMKICsrKyBiL2xkL2xkZmlsZS5jCiBAQCAtMTE0LDYgKzExNCwyMyBAQCBsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgYmZkX2Jvb2xlYW4gY21kbGluZSkKQEAgLTIwOSw3ICsyMDksNyBAQAogIAogIC8qIFRyeSB0byBvcGVuIGEgQkZEIGZvciBhIGxhbmdfaW5wdXRfc3RhdGVtZW50LiAgKi8KIGRpZmYgLS1naXQgYS9sZC9sZGxleC5oIGIvbGQvbGRsZXguaAotaW5kZXggNmYxMWU3Yi4uMGNhMzExMCAxMDA2NDQKK2luZGV4IGNmOTQzZTQuLjEyY2ZjYWEgMTAwNjQ0CiAtLS0gYS9sZC9sZGxleC5oCiArKysgYi9sZC9sZGxleC5oCiBAQCAtMTQ0LDYgKzE0NCw4IEBAIGVudW0gb3B0aW9uX3ZhbHVlcwpAQCAtMjIyLDcgKzIyMiw3IEBACiAgCiAgLyogVGhlIGluaXRpYWwgcGFyc2VyIHN0YXRlcy4gICovCiBkaWZmIC0tZ2l0IGEvbGQvbGRtYWluLmMgYi9sZC9sZG1haW4uYwotaW5kZXggYmIwYjljYy4uYTIzYzU2YyAxMDA2NDQKK2luZGV4IGU3YThkZmYuLjNjY2YyYWYgMTAwNjQ0CiAtLS0gYS9sZC9sZG1haW4uYwogKysrIGIvbGQvbGRtYWluLmMKIEBAIC0yNTcsNiArMjU3LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQpAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAvKiBXZSBpbml0aWFsaXplIERFTUFOR0xJTkcgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAgICBDT0xMRUNUX05PX0RFTUFOR0xFLiAgVGhlIGdjYyBjb2xsZWN0MiBwcm9ncmFtIHdpbGwgZGVtYW5nbGUgdGhlCiBkaWZmIC0tZ2l0IGEvbGQvbGV4c3VwLmMgYi9sZC9sZXhzdXAuYwotaW5kZXggZTJmYjIxMi4uYTIwNjRmMSAxMDA2NDQKK2luZGV4IDZkMjhlOTEuLjVjOWRhNTcgMTAwNjQ0CiAtLS0gYS9sZC9sZXhzdXAuYwogKysrIGIvbGQvbGV4c3VwLmMKIEBAIC01MzAsNiArNTMwLDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGRfb3B0aW9uIGxkX29wdGlvbnNbXSA9CkBAIC0yNjksNSArMjY5LDUgQEAKICAgICAgfQogIAogLS0gCi0yLjcuMQorMi45LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoCmluZGV4IDQwNzQyNDEuLmUyZjZhNTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGJiOWViMDk0MTFkZGNlZjUxNWYwZjdhZDdjMjkyMTRiMDc2NmU5NjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDI3ZmM3YTQ5MjdhYjkyOTI1YTViZTg0MjE3OTU5ZDlmMWM4MDhjY2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQyOjM4ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTAvMTRdIEZpeCBycGF0aCBpbiBsaWJ0b29sIHdoZW4gc3lzcm9vdCBpcyBlbmFibGVkCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTNdIEZpeCBycGF0aCBpbiBsaWJ0b29sIHdoZW4gc3lzcm9vdCBpcyBlbmFibGVkCiAKIEVuYWJsaW5nIHN5c3Jvb3Qgc3VwcG9ydCBpbiBsaWJ0b29sIGV4cG9zZWQgYSBidWcgd2hlcmUgdGhlIGZpbmFsCiBsaWJyYXJ5IGhhZCBhbiBSUEFUSCBlbmNvZGVkIGludG8gaXQgd2hpY2ggc3RpbGwgcG9pbnRlZCB0byB0aGUKQEAgLTQ4LDUgKzQ4LDUgQEAKICAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgogIAkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgogLS0gCi0yLjcuMQorMi45LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoCmluZGV4IGMwZDJkNzEuLjNmZGI1ZWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGFmMWI0ZWU2OWI0ZmQ2MTdiODgxMjdlZDQwYzNjYTczNTFhOTUzMmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDZiMDE4ZTgxMjkyOThkYmQ1YjcxNGU0NTllZjBiM2FlZjViYmNlMTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQ0OjE0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTEvMTRdIENoYW5nZSBkZWZhdWx0IGVtdWxhdGlvbiBmb3IgbWlwczY0Ki0qLWxpbnV4CitTdWJqZWN0OiBbUEFUQ0ggMTEvMTNdIENoYW5nZSBkZWZhdWx0IGVtdWxhdGlvbiBmb3IgbWlwczY0Ki0qLWxpbnV4CiAKIHdlIGNoYW5nZSB0aGUgZGVmYXVsdCBlbXVsYXRpb25zIHRvIGJlIE42NCBpbnN0ZWFkIG9mIE4zMgogCkBAIC0xNCwxMCArMTQsMTAgQEAKICAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2JmZC9jb25maWcuYmZkIGIvYmZkL2NvbmZpZy5iZmQKLWluZGV4IGM1Njg4Y2IuLjVjMjdiNDkgMTAwNjQ0CitpbmRleCBiOTk4ODMwLi5hYjE3ZTcyIDEwMDY0NAogLS0tIGEvYmZkL2NvbmZpZy5iZmQKICsrKyBiL2JmZC9jb25maWcuYmZkCi1AQCAtMTA4NywxMiArMTA4NywxMiBAQCBjYXNlICIke3Rhcmd9IiBpbgorQEAgLTExMDEsMTIgKzExMDEsMTIgQEAgY2FzZSAiJHt0YXJnfSIgaW4KICAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2xlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyBtaXBzX2Vjb2ZmX2JlX3ZlYyBtaXBzX2Vjb2ZmX2xlX3ZlYyIKICAgICAgOzsKICAgIG1pcHM2NCplbC0qLWxpbnV4KikKQEAgLTM1LDEwICszNSwxMCBAQAogICAgbWlwcyplbC0qLWxpbnV4KikKICAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl90cmFkX2xlX3ZlYwogZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS50Z3QgYi9sZC9jb25maWd1cmUudGd0Ci1pbmRleCA2YjZiYmYyLi5iNDViMWU1IDEwMDY0NAoraW5kZXggYTNkYjkwOS4uMjEyMzI3YyAxMDA2NDQKIC0tLSBhL2xkL2NvbmZpZ3VyZS50Z3QKICsrKyBiL2xkL2NvbmZpZ3VyZS50Z3QKLUBAIC01MDksMTEgKzUwOSwxMSBAQCBtaXBzKmVsLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVsbWlwdnh3b3JrcworQEAgLTUxMywxMSArNTEzLDExIEBAIG1pcHMqZWwtKi12eHdvcmtzKikJdGFyZ19lbXVsPWVsZjMyZWxtaXB2eHdvcmtzCiAgbWlwcyotKi12eHdvcmtzKikJdGFyZ19lbXVsPWVsZjMyZWJtaXB2eHdvcmtzCiAgCQkgICAgICAgIHRhcmdfZXh0cmFfZW11bHM9ImVsZjMyZWxtaXB2eHdvcmtzIiA7OwogIG1pcHMqLSotd2luZGlzcykJdGFyZ19lbXVsPWVsZjMybWlwc3dpbmRpc3MgOzsKQEAgLTU1LDUgKzU1LDUgQEAKICBtaXBzKmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwCiAgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAiCiAtLSAKLTIuNy4xCisyLjkuMAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTItQWRkLXN1cHBvcnQtZm9yLU5ldGxvZ2ljLVhMUC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtc3VwcG9ydC1mb3ItTmV0bG9naWMtWExQLnBhdGNoCmluZGV4IGFmN2YxMmYuLjgxMDMzNDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtc3VwcG9ydC1mb3ItTmV0bG9naWMtWExQLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtc3VwcG9ydC1mb3ItTmV0bG9naWMtWExQLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA5Zjk2N2M1NTViM2ZkYTY0YWY0NTQ5YWUyNTJhMGZiYTAwMTIwNTI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBjMmUxMzhmNGNjZGY4YWY4MWMxOGM4NTExYzkwMWQzZGVlZTY5NmI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFN1biwgMTQgRmViIDIwMTYgMTc6MDY6MTkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxMi8xNF0gQWRkIHN1cHBvcnQgZm9yIE5ldGxvZ2ljIFhMUAorU3ViamVjdDogW1BBVENIIDEyLzEzXSBBZGQgc3VwcG9ydCBmb3IgTmV0bG9naWMgWExQCiAKIFBhdGNoIEZyb206IE5lYnUgUGhpbGlwcyA8bnBoaWxpcHNAbmV0bG9naWNtaWNyby5jb20+CiAKQEAgLTM1LDEwICszNSwxMCBAQAogIDE1IGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvYmZkL2FvdXR4LmggYi9iZmQvYW91dHguaAotaW5kZXggZjc4YjkxMC4uZDBkOGRkMyAxMDA2NDQKK2luZGV4IGJlMDEyNmEuLjRjYTdlMjQgMTAwNjQ0CiAtLS0gYS9iZmQvYW91dHguaAogKysrIGIvYmZkL2FvdXR4LmgKLUBAIC04MDIsNiArODAyLDcgQEAgTkFNRSAoYW91dCwgbWFjaGluZV90eXBlKSAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsCitAQCAtODEyLDYgKzgxMiw3IEBAIE5BTUUgKGFvdXQsIG1hY2hpbmVfdHlwZSkgKGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoLAogIAljYXNlIGJmZF9tYWNoX21pcHNpc2E2NHI2OgogIAljYXNlIGJmZF9tYWNoX21pcHNfc2IxOgogIAljYXNlIGJmZF9tYWNoX21pcHNfeGxyOgpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgCSAgYXJjaF9mbGFncyA9IE1fTUlQUzI7CiAgCSAgYnJlYWs7CiBkaWZmIC0tZ2l0IGEvYmZkL2FyY2h1cmVzLmMgYi9iZmQvYXJjaHVyZXMuYwotaW5kZXggNTEwNjhiOS4uNzI3NzQxZiAxMDA2NDQKK2luZGV4IDk2YzkxMDkuLjVhMzBkMDIgMTAwNjQ0CiAtLS0gYS9iZmQvYXJjaHVyZXMuYwogKysrIGIvYmZkL2FyY2h1cmVzLmMKLUBAIC0xODEsNiArMTgxLDcgQEAgREVTQ1JJUFRJT04KK0BAIC0xOTcsNiArMTk3LDcgQEAgREVTQ1JJUFRJT04KICAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKICAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjMgICAgICAgICAgNjUwMwogIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICB7KiBkZWNpbWFsICdYTFInICAqfQpAQCAtNTksMTAgKzU5LDEwIEBACiAgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCiAgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjMgICAgICAgICAgIDM0CiBkaWZmIC0tZ2l0IGEvYmZkL2JmZC1pbjIuaCBiL2JmZC9iZmQtaW4yLmgKLWluZGV4IDc3OWZmYmYuLmJmNWE1NjUgMTAwNjQ0CitpbmRleCAzMDUxM2M0Li41ZThlZDRjIDEwMDY0NAogLS0tIGEvYmZkL2JmZC1pbjIuaAogKysrIGIvYmZkL2JmZC1pbjIuaAotQEAgLTE5OTMsNiArMTk5Myw3IEBAIGVudW0gYmZkX2FyY2hpdGVjdHVyZQorQEAgLTIwMDgsNiArMjAwOCw3IEBAIGVudW0gYmZkX2FyY2hpdGVjdHVyZQogICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yICAgICAgICAgIDY1MDIKICAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMyAgICAgICAgICA2NTAzCiAgI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgLyogZGVjaW1hbCAnWExSJyAgKi8KQEAgLTcxLDEwICs3MSwxMCBAQAogICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCiAgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMyAgICAgICAgICAgMzQKIGRpZmYgLS1naXQgYS9iZmQvY29uZmlnLmJmZCBiL2JmZC9jb25maWcuYmZkCi1pbmRleCA1YzI3YjQ5Li5kNTUzMDM5IDEwMDY0NAoraW5kZXggYWIxN2U3Mi4uODYzYmU4OSAxMDA2NDQKIC0tLSBhL2JmZC9jb25maWcuYmZkCiArKysgYi9iZmQvY29uZmlnLmJmZAotQEAgLTEwNjYsNiArMTA2NiwxMSBAQCBjYXNlICIke3Rhcmd9IiBpbgorQEAgLTEwODQsNiArMTA4NCwxMSBAQCBjYXNlICIke3Rhcmd9IiBpbgogICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX2xlX3ZlYwogICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfYmVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIgogICAgICA7OwpAQCAtODMsMTEgKzgzLDExIEBACiArCXRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCiArCXdhbnQ2ND10cnVlCiArCTs7Ci0gICBtaXBzKi0qLWVsZiogfCBtaXBzKi0qLXJ0ZW1zKiB8IG1pcHMqLSotdnh3b3JrcyB8IG1pcHMqLSotd2luZGlzcykKKyAgIG1pcHMqLSotZWxmKiB8IG1pcHMqLSotcnRlbXMqIHwgbWlwcyotKi13aW5kaXNzIHwgbWlwcyotKi1ub25lKQogICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX2JlX3ZlYwogICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbGVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIgogZGlmZiAtLWdpdCBhL2JmZC9jcHUtbWlwcy5jIGIvYmZkL2NwdS1taXBzLmMKLWluZGV4IDhhOTQ3NWQuLmRlN2U1YTMgMTAwNjQ0CitpbmRleCBkMjA5ZmI2Li5iNmE4NmFlIDEwMDY0NAogLS0tIGEvYmZkL2NwdS1taXBzLmMKICsrKyBiL2JmZC9jcHUtbWlwcy5jCiBAQCAtMTA0LDcgKzEwNCw4IEBAIGVudW0KQEAgLTExMSwxMCArMTExLDEwIEBACiAgCiAgLyogVGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlIGlzIG1pcHM6MzAwMCwgYnV0IHdpdGggYSBtYWNoaW5lIG51bWJlciBvZgogZGlmZiAtLWdpdCBhL2JmZC9lbGZ4eC1taXBzLmMgYi9iZmQvZWxmeHgtbWlwcy5jCi1pbmRleCAxZjJmNGEzLi43MDBhZmQzIDEwMDY0NAoraW5kZXggZTQ3Mjc2Yi4uNzFjMzBhMCAxMDA2NDQKIC0tLSBhL2JmZC9lbGZ4eC1taXBzLmMKICsrKyBiL2JmZC9lbGZ4eC1taXBzLmMKLUBAIC02NjA1LDYgKzY2MDUsOSBAQCBfYmZkX2VsZl9taXBzX21hY2ggKGZsYWd3b3JkIGZsYWdzKQorQEAgLTY2NDYsNiArNjY0Niw5IEBAIF9iZmRfZWxmX21pcHNfbWFjaCAoZmxhZ3dvcmQgZmxhZ3MpCiAgICAgIGNhc2UgRV9NSVBTX01BQ0hfWExSOgogICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX3hscjsKICAKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICBkZWZhdWx0OgogICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBFRl9NSVBTX0FSQ0gpCiAgCXsKLUBAIC0xMTkwMSw2ICsxMTkwNCwxMCBAQCBtaXBzX3NldF9pc2FfZmxhZ3MgKGJmZCAqYWJmZCkKK0BAIC0xMTk0OSw2ICsxMTk1MiwxMCBAQCBtaXBzX3NldF9pc2FfZmxhZ3MgKGJmZCAqYWJmZCkKICAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OMjsKICAgICAgICBicmVhazsKICAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICBjYXNlIGJmZF9tYWNoX21pcHNpc2EzMjoKICAgICAgICB2YWwgPSBFX01JUFNfQVJDSF8zMjsKICAgICAgICBicmVhazsKLUBAIC0xMzkzMSw2ICsxMzkzOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbiBtaXBzX21hY2hfZXh0ZW5zaW9uc1tdID0KK0BAIC0xMzk3NSw2ICsxMzk4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbiBtaXBzX21hY2hfZXh0ZW5zaW9uc1tdID0KICAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb25wLCBiZmRfbWFjaF9taXBzX29jdGVvbiB9LAogICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbiwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKICAgIHsgYmZkX21hY2hfbWlwc19sb29uZ3Nvbl8zYSwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKQEAgLTE0NCwxMCArMTQ0LDEwIEBACiAgICAvKiBNSVBTNjQgZXh0ZW5zaW9ucy4gICovCiAgICB7IGJmZF9tYWNoX21pcHNpc2E2NHIyLCBiZmRfbWFjaF9taXBzaXNhNjQgfSwKIGRpZmYgLS1naXQgYS9iaW51dGlscy9yZWFkZWxmLmMgYi9iaW51dGlscy9yZWFkZWxmLmMKLWluZGV4IGQ1ZGQ0NmYuLjY2ODEwY2MgMTAwNjQ0CitpbmRleCAyNzRkZGQxLi5kMzE1NThjIDEwMDY0NAogLS0tIGEvYmludXRpbHMvcmVhZGVsZi5jCiArKysgYi9iaW51dGlscy9yZWFkZWxmLmMKLUBAIC0zMTQwLDYgKzMxNDAsNyBAQCBnZXRfbWFjaGluZV9mbGFncyAodW5zaWduZWQgZV9mbGFncywgdW5zaWduZWQgZV9tYWNoaW5lKQorQEAgLTMyMzAsNiArMzIzMCw3IEBAIGdldF9tYWNoaW5lX2ZsYWdzICh1bnNpZ25lZCBlX2ZsYWdzLCB1bnNpZ25lZCBlX21hY2hpbmUpCiAgCSAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjI6IHN0cmNhdCAoYnVmLCAiLCBvY3Rlb24yIik7IGJyZWFrOwogIAkgICAgY2FzZSBFX01JUFNfTUFDSF9PQ1RFT04zOiBzdHJjYXQgKGJ1ZiwgIiwgb2N0ZW9uMyIpOyBicmVhazsKICAJICAgIGNhc2UgRV9NSVBTX01BQ0hfWExSOiAgc3RyY2F0IChidWYsICIsIHhsciIpOyBicmVhazsKQEAgLTE1Niw3ICsxNTYsNyBAQAogIAkgICAgLyogV2Ugc2ltcGx5IGlnbm9yZSB0aGUgZmllbGQgaW4gdGhpcyBjYXNlIHRvIGF2b2lkIGNvbmZ1c2lvbjoKICAJICAgICAgIE1JUFMgRUxGIGRvZXMgbm90IHNwZWNpZnkgRUZfTUlQU19NQUNILCBpdCBpcyBhIEdOVQogZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtbWlwcy5jIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKLWluZGV4IGEyZDQ1YTQuLjc1OTAyYzAgMTAwNjQ0CitpbmRleCBlYjhiMjZiLi5lNTlkY2U2IDEwMDY0NAogLS0tIGEvZ2FzL2NvbmZpZy90Yy1taXBzLmMKICsrKyBiL2dhcy9jb25maWcvdGMtbWlwcy5jCiBAQCAtNTUyLDYgKzU1Miw3IEBAIHN0YXRpYyBpbnQgbWlwc18zMmJpdG1vZGUgPSAwOwpAQCAtMTc1LDIwICsxNzUsMjAgQEAKICAgICApCiAgCiAgLyogV2hldGhlciB0aGUgcHJvY2Vzc29yIHVzZXMgaGFyZHdhcmUgaW50ZXJsb2NrcyB0byBwcm90ZWN0IHJlYWRzCi1AQCAtMTg3MDIsNyArMTg3MDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfY3B1X2luZm8gbWlwc19jcHVfaW5mb190YWJsZVtdID0KK0BAIC0xODg1OCw3ICsxODg2MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyBtaXBzX2NwdV9pbmZvX3RhYmxlW10gPQogICAgLyogQnJvYWRjb20gWExQLgogICAgICAgWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiB0aGF0IGl0IGlzCiAgICAgICBNSVBTNjRSMiByYXRoZXIgdGhhbiBNSVBTNjQuICAqLwogLSAgeyAieGxwIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9YTFIgfSwKICsgIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExQIH0sCiAgCi0gICAvKiBpNjQwMC4gICovCisgICAvKiBNSVBTIDY0IFJlbGVhc2UgNiAqLwogICAgeyAiaTY0MDAiLAkgICAgICAwLCBBU0VfTVNBLAkJSVNBX01JUFM2NFI2LCBDUFVfTUlQUzY0UjZ9LAogZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUgYi9nYXMvY29uZmlndXJlCi1pbmRleCA4OWYxOGIzLi44NmIxOWFlIDEwMDc1NQoraW5kZXggNDVkYTAzMC4uYWJhODlmNyAxMDA3NTUKIC0tLSBhL2dhcy9jb25maWd1cmUKICsrKyBiL2dhcy9jb25maWd1cmUKLUBAIC0xMjg1MSw2ICsxMjg1MSw5IEBAIF9BQ0VPRgorQEAgLTEyOTE0LDYgKzEyOTE0LDkgQEAgX0FDRU9GCiAgCSAgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsKQogIAkgICAgbWlwc19jcHU9bWlwczY0cjYKICAJICAgIDs7CkBAIC0xOTksNyArMTk5LDcgQEAKICAJICAgIG1pcHNfY3B1PXIzOTAwCiAgCSAgICA7OwogZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUudGd0IGIvZ2FzL2NvbmZpZ3VyZS50Z3QKLWluZGV4IDA4NmUwZDIuLjJiNzEyNzAgMTAwNjQ0CitpbmRleCAxYjlmZDk5Li5hOWYxOTc3IDEwMDY0NAogLS0tIGEvZ2FzL2NvbmZpZ3VyZS50Z3QKICsrKyBiL2dhcy9jb25maWd1cmUudGd0CiBAQCAtMzM5LDcgKzMzOSw3IEBAIGNhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KQEAgLTIxMiwxMCArMjEyLDEwIEBACiAgICBtaXBzLSotb3BlbmJzZCopCQkJZm10PWVsZiBlbT10bWlwcyA7OwogIAogZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL21pcHMuaCBiL2luY2x1ZGUvZWxmL21pcHMuaAotaW5kZXggNTdkZTNiYy4uOWJhMTQxZCAxMDA2NDQKK2luZGV4IDdlODEzZGUuLmQ3ZDcyYzEgMTAwNjQ0CiAtLS0gYS9pbmNsdWRlL2VsZi9taXBzLmgKICsrKyBiL2luY2x1ZGUvZWxmL21pcHMuaAotQEAgLTI4NSw2ICsyODUsNyBAQCBFTkRfUkVMT0NfTlVNQkVSUyAoUl9NSVBTX21heGV4dCkKK0BAIC0yOTAsNiArMjkwLDcgQEAgRU5EX1JFTE9DX05VTUJFUlMgKFJfTUlQU19tYXhleHQpCiAgI2RlZmluZSBFX01JUFNfTUFDSF9TQjEgICAgICAgICAweDAwOGEwMDAwCiAgI2RlZmluZSBFX01JUFNfTUFDSF9PQ1RFT04JMHgwMDhiMDAwMAogICNkZWZpbmUgRV9NSVBTX01BQ0hfWExSICAgICAJMHgwMDhjMDAwMApAQCAtMjI0LDEwICsyMjQsMTAgQEAKICAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjMJMHgwMDhlMDAwMAogICNkZWZpbmUgRV9NSVBTX01BQ0hfNTQwMAkweDAwOTEwMDAwCiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGNvZGUvbWlwcy5oIGIvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCi1pbmRleCA5MzE4ZmNjLi45YmU1NjQ1IDEwMDY0NAoraW5kZXggYjFkNGVmNi4uZjJjOGU4OCAxMDA2NDQKIC0tLSBhL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAogKysrIGIvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCi1AQCAtMTIyOCw4ICsxMjI4LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGVbXSA9IHsKK0BAIC0xMjMyLDggKzEyMzIsMTAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZVtdID0gewogICNkZWZpbmUgSU5TTl9MT09OR1NPTl8yRiAgICAgICAgICAweDgwMDAwMDAwCiAgLyogTG9vbmdzb24gM0EuICAqLwogICNkZWZpbmUgSU5TTl9MT09OR1NPTl8zQSAgICAgICAgICAweDAwMDAwNDAwCkBAIC0yNDAsNyArMjQwLDcgQEAKICAKICAvKiBEU1AgQVNFICovCiAgI2RlZmluZSBBU0VfRFNQCQkJMHgwMDAwMDAwMQotQEAgLTEzMjYsNiArMTMyOCw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGVbXSA9IHsKK0BAIC0xMzMxLDYgKzEzMzMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CiAgI2RlZmluZSBDUFVfT0NURU9OMgk2NTAyCiAgI2RlZmluZSBDUFVfT0NURU9OMwk2NTAzCiAgI2RlZmluZSBDUFVfWExSICAgICAJODg3NjgyICAgCS8qIGRlY2ltYWwgJ1hMUicgICAqLwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgCiAgLyogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIENQVSBpcyBpbmNsdWRlZCBpbiBJTlNOXyogbWFzayBNQVNLLiAgKi8KICAKLUBAIC0xNDAzLDYgKzE0MDYsOSBAQCBjcHVfaXNfbWVtYmVyIChpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbWFzaykKK0BAIC0xNDA4LDYgKzE0MTEsOSBAQCBjcHVfaXNfbWVtYmVyIChpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbWFzaykKICAgICAgICByZXR1cm4gKChtYXNrICYgSU5TTl9JU0FfTUFTSykgPT0gSU5TTl9JU0EzMlI2KQogIAkgICAgIHx8ICgobWFzayAmIElOU05fSVNBX01BU0spID09IElOU05fSVNBNjRSNik7CiAgCkBAIC0yNTksMTAgKzI1OSwxMCBAQAogICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgfQogZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS50Z3QgYi9sZC9jb25maWd1cmUudGd0Ci1pbmRleCBiNDViMWU1Li5mYjJmMzZhIDEwMDY0NAoraW5kZXggMjEyMzI3Yy4uMjEyZTA5YyAxMDA2NDQKIC0tLSBhL2xkL2NvbmZpZ3VyZS50Z3QKICsrKyBiL2xkL2NvbmZpZ3VyZS50Z3QKLUBAIC00OTUsNiArNDk1LDggQEAgbWlwcyplbC1zZGUtZWxmKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwCitAQCAtNDk5LDYgKzQ5OSw4IEBAIG1pcHMqZWwtc2RlLWVsZiogfCBtaXBzKmVsLW10aS1lbGYqIHwgbWlwcyplbC1pbWctZWxmKikKICBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCiAgCQkJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCiAgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAiIDs7CkBAIC0yNzIsNyArMjcyLDcgQEAKICAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmxyNTkwMCIKICAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKIGRpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtZGlzLmMgYi9vcGNvZGVzL21pcHMtZGlzLmMKLWluZGV4IDgyMDA5MjAuLjQwZDlmZTIgMTAwNjQ0CitpbmRleCAzZjg3NGU3Li45ODEzZDBlIDEwMDY0NAogLS0tIGEvb3Bjb2Rlcy9taXBzLWRpcy5jCiArKysgYi9vcGNvZGVzL21pcHMtZGlzLmMKIEBAIC02NDgsMTMgKzY0OCwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfY2hvaWNlc1tdID0KQEAgLTI5NSw3ICsyOTUsNyBAQAogICAgLyogVGhpcyBlbnRyeSwgbWlwczE2LCBpcyBoZXJlIG9ubHkgZm9yIElTQS9wcm9jZXNzb3Igc2VsZWN0aW9uOyBkbwogICAgICAgbm90IHByaW50IGl0cyBuYW1lLiAgKi8KIGRpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtb3BjLmMgYi9vcGNvZGVzL21pcHMtb3BjLmMKLWluZGV4IDQwMmY4ODcuLjM3NjQ4MzYgMTAwNjQ0CitpbmRleCBhOTVlZmYxLi45OWZiN2JiIDEwMDY0NAogLS0tIGEvb3Bjb2Rlcy9taXBzLW9wYy5jCiArKysgYi9vcGNvZGVzL21pcHMtb3BjLmMKIEBAIC0zMjAsNyArMzIwLDggQEAgZGVjb2RlX21pcHNfb3BlcmFuZCAoY29uc3QgY2hhciAqcCkKQEAgLTMwOCw3ICszMDgsNyBAQAogICNkZWZpbmUgSVZJUlQJQVNFX1ZJUlQKICAjZGVmaW5lIElWSVJUNjQJQVNFX1ZJUlQ2NAogIAotQEAgLTk1Nyw2ICs5NTgsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CitAQCAtOTU4LDYgKzk1OSw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KICB7ImNsbyIsCQkJIlUscyIsCQkweDcwMDAwMDIxLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTMyfE41NSwJMCwJSTM3IH0sCiAgeyJjbHoiLAkJCSJkLHMiLAkJMHgwMDAwMDA1MCwgMHhmYzFmMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzNywJCTAsCTAgfSwKICB7ImNseiIsCQkJIlUscyIsCQkweDcwMDAwMDIwLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTMyfE41NSwJMCwJSTM3IH0sCkBAIC0zMTYsNyArMzE2LDcgQEAKICAvKiBjdGMwIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KICB7ImN0YzEiLAkJInQsRyIsCQkweDQ0YzAwMDAwLCAweGZmZTAwN2ZmLAlSRF8xfFdSX0NDfENNLAkJMCwJCUkxLAkJMCwJMCB9LAogIHsiY3RjMSIsCQkidCxTIiwJCTB4NDRjMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQ0N8Q00sCQkwLAkJSTEsCQkwLAkwIH0sCi1AQCAtOTg5LDEyICs5OTEsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorQEAgLTk5MCwxMiArOTkyLDEzIEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KICB7ImRhZGRpdSIsCQkidCxyLGoiLAkweDY0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzIsCQkwLAkJSTMsCQkwLAkwIH0sCiAgeyJkYWRkdSIsCQkiZCx2LHQiLAkweDAwMDAwMDJkLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJCTAsCQlJMywJCTAsCTAgfSwKICB7ImRhZGR1IiwJCSJ0LHIsSSIsCTAsICAgIChpbnQpIE1fREFERFVfSSwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCTAgfSwKQEAgLTMzMSw3ICszMzEsNyBAQAogIC8qIGRjdHIgYW5kIGRjdHcgYXJlIHVzZWQgb24gdGhlIHI1MDAwLiAgKi8KICB7ImRjdHIiLAkJIm8oYikiLAkgCTB4YmMwNTAwMDAsIDB4ZmMxZjAwMDAsIFJEXzIsCQkJMCwJCUkzLAkJMCwJMCB9LAogIHsiZGN0dyIsCQkibyhiKSIsCQkweGJjMDkwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKLUBAIC0xMDY2LDYgKzEwNjksNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CitAQCAtMTA2Nyw2ICsxMDcwLDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQogIHsiZG1mYzAiLAkJInQsRyxIIiwJMHg0MDIwMDAwMCwgMHhmZmUwMDdmOCwJV1JfMXxSRF9DMHxMQywJCTAsCQlJNjQsCQkwLAkwIH0sCiAgeyJkbWZnYzAiLAkJInQsRyIsCQkweDQwNjAwMTAwLCAweGZmZTAwN2ZmLCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCiAgeyJkbWZnYzAiLAkJInQsRyxIIiwJMHg0MDYwMDEwMCwgMHhmZmUwMDdmOCwgV1JfMXxSRF9DMHxMQywJCTAsCQkwLAkJSVZJUlQ2NCwgMCB9LApAQCAtMzM5LDcgKzMzOSw3IEBACiAgeyJkbXQiLAkJCSIiLAkJMHg0MTYwMGJjMSwgMHhmZmZmZmZmZiwgVFJBUCwJCQkwLAkJMCwJCU1UMzIsCTAgfSwKICB7ImRtdCIsCQkJInQiLAkJMHg0MTYwMGJjMSwgMHhmZmUwZmZmZiwgV1JfMXxUUkFQLAkJMCwJCTAsCQlNVDMyLAkwIH0sCiAgeyJkbXRjMCIsCQkidCxHIiwJCTB4NDBhMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQzB8V1JfQ0N8Q00sCTAsCQlJMywJCTAsCUVFIH0sCi1AQCAtMTA4MSw2ICsxMDg1LDggQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorQEAgLTEwODIsNiArMTA4Niw4IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KICAvKiBkbWZjMyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCiAgLyogZG10YzMgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLwogIHsiZG11aCIsCQkiZCxzLHQiLAkweDAwMDAwMGRjLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJCTAsCQlJNjksCQkwLAkwIH0sCkBAIC0zNDgsNyArMzQ4LDcgQEAKICB7ImRtdWwiLAkJImQscyx0IiwJMHgwMDAwMDA5YywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTY5LAkJMCwJMCB9LAogIHsiZG11bCIsCQkiZCx2LHQiLAkweDcwMDAwMDAzLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9ISUxPLAkwLAkJSU9DVCwJCTAsCTAgfSwKICB7ImRtdWwiLAkJImQsdix0IiwJMCwgICAgKGludCkgTV9ETVVMLAlJTlNOX01BQ1JPLAkJMCwJCUkzLAkJMCwJTTMyfEk2OSB9LAotQEAgLTEyMzQsOSArMTI0MCw5IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KK0BAIC0xMjM1LDkgKzEyNDEsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CiAgeyJsZCIsCQkJInMsLWIoK1IpIiwJMHhlYzE4MDAwMCwgMHhmYzFjMDAwMCwgV1JfMSwJCQlSRF9wYywJCUk2OSwJCTAsCTAgfSwKICB7ImxkIiwJCQkidCxBKGIpIiwJMCwgICAgKGludCkgTV9MRF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCTAgfSwKICB7ImxkIiwJCQkidCxvKGIpIiwJMHhkYzAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8zfExNLAkJMCwJCUkzLAkJMCwJMCB9LApAQCAtMzYxLDcgKzM2MSw3IEBACiAgeyJsZGMxIiwJCSJULG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCiAgeyJsZGMxIiwJCSJFLG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCiAgeyJsZGMxIiwJCSJULEEoYikiLAkwLCAgICAoaW50KSBNX0xEQzFfQUIsCUlOU05fTUFDUk8sCQlJTlNOMl9NX0ZQX0QsCUkyLAkJMCwJU0YgfSwKLUBAIC0xNDAxLDcgKzE0MDcsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CitAQCAtMTQwMiw3ICsxNDA4LDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQogIHsibWZsbyIsCQkiZCw5IiwJCTB4MDAwMDAwMTIsIDB4ZmY5ZjA3ZmYsIFdSXzF8UkRfTE8sCQkwLAkJMCwJCUQzMiwJMCB9LAogIHsibWZsbzEiLAkJImQiLAkJMHg3MDAwMDAxMiwgMHhmZmZmMDdmZiwJV1JfMXxSRF9MTywJCTAsCQlFRSwJCTAsCTAgfSwKICB7Im1mbGh4dSIsCQkiZCIsCQkweDAwMDAwMDUyLCAweGZmZmYwN2ZmLAlXUl8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKQEAgLTM3MCw3ICszNzAsNyBAQAogIHsibWZzYSIsCQkiZCIsCQkweDAwMDAwMDI4LCAweGZmZmYwN2ZmLAlXUl8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKICB7Im1pbi5vYiIsCQkiWCxZLFEiLAkweDc4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJU0IxLAkJTVgsCTAgfSwKICB7Im1pbi5vYiIsCQkiRCxTLFEiLAkweDQ4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJTjU0LAkJMCwJMCB9LAotQEAgLTE0NDYsMTAgKzE0NTIsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorQEAgLTE0NDcsMTAgKzE0NTMsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQogIC8qIG1vdmUgaXMgYXQgdGhlIHRvcCBvZiB0aGUgdGFibGUuICAqLwogIHsibXNnbi5xaCIsCQkiWCxZLFEiLAkweDc4MjAwMDAwLCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJMCwJCU1YLAkwIH0sCiAgeyJtc2dzbmQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dTTkQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LApAQCAtMzg2LDcgKzM4Niw3IEBACiAgeyJtc3ViLmQiLAkJIkQsUixTLFQiLAkweDRjMDAwMDI5LCAweGZjMDAwMDNmLCBXUl8xfFJEXzJ8UkRfM3xSRF80fEZQX0QsIDAsCQlJNF8zMywJCTAsCUkzNyB9LAogIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NDYyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJFLAkJMCwJMCB9LAogIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NzIyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJGLAkJMCwJMCB9LAotQEAgLTE0OTksNyArMTUwOCw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KK0BAIC0xNTAwLDcgKzE1MDksNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CiAgeyJtdGxvIiwJCSJzLDciLAkJMHgwMDAwMDAxMywgMHhmYzFmZTdmZiwgUkRfMXxXUl9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCiAgeyJtdGxvMSIsCQkicyIsCQkweDcwMDAwMDEzLCAweGZjMWZmZmZmLAlSRF8xfFdSX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAogIHsibXRsaHgiLAkJInMiLAkJMHgwMDAwMDA1MywgMHhmYzFmZmZmZiwJUkRfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCkBAIC0zOTUsNyArMzk1LDcgQEAKICB7Im10bTAiLAkJInMiLAkJMHg3MDAwMDAwOCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKICB7Im10bTAiLCAgICAJCSJzLHQiLAkJMHg3MDAwMDAwOCwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLAkJMCwJCUlPQ1QzLAkJMCwJMCB9LAogIHsibXRtMSIsCQkicyIsCQkweDcwMDAwMDBjLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAotQEAgLTE5MzYsOSArMTk0NSw5IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KK0BAIC0xOTM3LDkgKzE5NDYsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CiAgeyJzdXhjMSIsCQkiUyx0KGIpIiwJMHg0YzAwMDAwZCwgMHhmYzAwMDdmZiwgUkRfMXxSRF8yfFJEXzN8U018RlBfRCwJMCwJCUk1XzMzfE41NSwJMCwJSTM3fSwKICB7InN3IiwJCQkidCxvKGIpIiwJMHhhYzAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNLAkJMCwJCUkxLAkJMCwJMCB9LAogIHsic3ciLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX1NXX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LApAQCAtNDA5LDUgKzQwOSw1IEBACiAgeyJzd2MwIiwJCSJFLEEoYikiLAkwLCAgICAoaW50KSBNX1NXQzBfQUIsCUlOU05fTUFDUk8sCQkwLAkJSTEsCQkwLAlJT0NUfElPQ1RQfElPQ1QyfEkzNyB9LAogIHsic3djMSIsCQkiVCxvKGIpIiwJMHhlNDAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNfEZQX1MsCTAsCQlJMSwJCTAsCTAgfSwKIC0tIAotMi43LjEKKzIuOS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtR09ULWFkZHJlc3MtY29tcHV0YXRpb25zLWluLWluaXRpYWwtUExULWVudHJpZXMtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUZpeC1HT1QtYWRkcmVzcy1jb21wdXRhdGlvbnMtaW4taW5pdGlhbC1QTFQtZW50cmllcy0ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YWYxMjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUZpeC1HT1QtYWRkcmVzcy1jb21wdXRhdGlvbnMtaW4taW5pdGlhbC1QTFQtZW50cmllcy0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1Gcm9tIDk2MTlhNjA4NTI4MzgzYTQ0Y2NjMTYzN2FlOTM5YjVmM2U5N2FkYzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBTYW5kcmEgTG9vc2Vtb3JlIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KLURhdGU6IFdlZCwgOSBEZWMgMjAxNSAxNjoxMzo1OCAtMDgwMAotU3ViamVjdDogW1BBVENIIDEzLzE0XSBGaXggR09UIGFkZHJlc3MgY29tcHV0YXRpb25zIGluIGluaXRpYWwgUExUIGVudHJpZXMgZm9yCi0gbmlvczIuCi0KLTIwMTUtMTItMDkgIFNhbmRyYSBMb29zZW1vcmUgIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KLQotCWJmZC8KLQkqIGVsZjMyLW5pb3MyLmMgKG5pb3MyX2VsZjMyX2ZpbmlzaF9keW5hbWljX3NlY3Rpb25zKTogQ29ycmVjdAotCSVoaWFkai8lbG8gY29tcHV0YXRpb25zIGZvciBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaW4gaW5pdGlhbAotCVBMVCBlbnRyaWVzLiAgQXNzZXJ0IGFsaWdubWVudCByZXF1aXJlbWVudHMuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotLS0tCi0gYmZkL2VsZjMyLW5pb3MyLmMgfCAyMyArKysrKysrKysrKysrKysrLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYmZkL2VsZjMyLW5pb3MyLmMgYi9iZmQvZWxmMzItbmlvczIuYwotaW5kZXggNmIyOWQ4Yi4uMWM1NDMyMCAxMDA2NDQKLS0tLSBhL2JmZC9lbGYzMi1uaW9zMi5jCi0rKysgYi9iZmQvZWxmMzItbmlvczIuYwotQEAgLTUzODMsMTIgKzUzODMsMTcgQEAgbmlvczJfZWxmMzJfZmluaXNoX2R5bmFtaWNfc2VjdGlvbnMgKGJmZCAqb3V0cHV0X2JmZCwKLSAJCQkJICsgc2dvdHBsdC0+b3V0cHV0X29mZnNldCk7Ci0gCSAgaWYgKGJmZF9saW5rX3BpYyAoaW5mbykpCi0gCSAgICB7Ci0tCSAgICAgIGJmZF92bWEgY29ycmVjdGVkID0gZ290X2FkZHJlc3MgLSAoc3BsdC0+b3V0cHV0X3NlY3Rpb24tPnZtYQotLQkJCQkJCSArIHNwbHQtPm91dHB1dF9vZmZzZXQgKyA0KTsKLSsJICAgICAgYmZkX3ZtYSBnb3RfcGNyZWwgPSBnb3RfYWRkcmVzcyAtIChzcGx0LT5vdXRwdXRfc2VjdGlvbi0+dm1hCi0rCQkJCQkJICsgc3BsdC0+b3V0cHV0X29mZnNldCk7Ci0rCSAgICAgIC8qIEJvdGggR09UIGFuZCBQTFQgbXVzdCBiZSBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeQotKwkJIGZvciB0aGUgdHdvIGxvYWRzIHRvIHNoYXJlIHRoZSAlaGlhZGogcGFydC4gIFRoZSA0LWJ5dGUKLSsJCSBvZmZzZXQgZm9yIG5leHRwYyBpcyBhY2NvdW50ZWQgZm9yIGluIHRoZSAlbG8gb2Zmc2V0cwotKwkJIG9uIHRoZSBsb2Fkcy4gICovCi0rCSAgICAgIEJGRF9BU1NFUlQgKChnb3RfcGNyZWwgJiAweGYpID09IDApOwotIAkgICAgICBuaW9zMl9lbGYzMl9pbnN0YWxsX2RhdGEgKHNwbHQsIG5pb3MyX3NvX3BsdDBfZW50cnksIDAsIDYpOwotLQkgICAgICBuaW9zMl9lbGYzMl9pbnN0YWxsX2ltbTE2IChzcGx0LCA0LCBoaWFkaiAoY29ycmVjdGVkKSk7Ci0tCSAgICAgIG5pb3MyX2VsZjMyX2luc3RhbGxfaW1tMTYgKHNwbHQsIDEyLCAoY29ycmVjdGVkICYgMHhmZmZmKSArIDQpOwotLQkgICAgICBuaW9zMl9lbGYzMl9pbnN0YWxsX2ltbTE2IChzcGx0LCAxNiwgKGNvcnJlY3RlZCAmIDB4ZmZmZikgKyA4KTsKLSsJICAgICAgbmlvczJfZWxmMzJfaW5zdGFsbF9pbW0xNiAoc3BsdCwgNCwgaGlhZGogKGdvdF9wY3JlbCkpOwotKwkgICAgICBuaW9zMl9lbGYzMl9pbnN0YWxsX2ltbTE2IChzcGx0LCAxMiwgZ290X3BjcmVsICYgMHhmZmZmKTsKLSsJICAgICAgbmlvczJfZWxmMzJfaW5zdGFsbF9pbW0xNiAoc3BsdCwgMTYsIChnb3RfcGNyZWwgKyA0KSAmIDB4ZmZmZik7Ci0gCSAgICB9Ci0gCSAgZWxzZQotIAkgICAgewotQEAgLTU0MDQsNiArNTQwOSwxMCBAQCBuaW9zMl9lbGYzMl9maW5pc2hfZHluYW1pY19zZWN0aW9ucyAoYmZkICpvdXRwdXRfYmZkLAotIAkJCSAgICA2IHwgKChyZXNfc2l6ZSAtIChyZXNfb2Zmc2V0ICsgNCkpIDw8IDYpLAotIAkJCSAgICBzcGx0LT5jb250ZW50cyArIHJlc19vZmZzZXQpOwotIAotKwkgICAgICAvKiBUaGUgR09UIG11c3QgYmUgYWxpZ25lZCB0byBhIDE2LWJ5dGUgYm91bmRhcnkgZm9yIHRoZQotKwkJIHR3byBsb2FkcyB0byBzaGFyZSB0aGUgc2FtZSAlaGlhZGogcGFydC4gICovCi0rCSAgICAgIEJGRF9BU1NFUlQgKChnb3RfYWRkcmVzcyAmIDB4ZikgPT0gMCk7Ci0rCi0gCSAgICAgIG5pb3MyX2VsZjMyX2luc3RhbGxfZGF0YSAoc3BsdCwgbmlvczJfcGx0MF9lbnRyeSwgcmVzX3NpemUsIDcpOwotIAkgICAgICBuaW9zMl9lbGYzMl9pbnN0YWxsX2ltbTE2IChzcGx0LCByZXNfc2l6ZSwgaGlhZGogKHJlc19zdGFydCkpOwotIAkgICAgICBuaW9zMl9lbGYzMl9pbnN0YWxsX2ltbTE2IChzcGx0LCByZXNfc2l6ZSArIDQsCi1AQCAtNTQxMSw5ICs1NDIwLDkgQEAgbmlvczJfZWxmMzJfZmluaXNoX2R5bmFtaWNfc2VjdGlvbnMgKGJmZCAqb3V0cHV0X2JmZCwKLSAJICAgICAgbmlvczJfZWxmMzJfaW5zdGFsbF9pbW0xNiAoc3BsdCwgcmVzX3NpemUgKyAxMiwKLSAJCQkJCSBoaWFkaiAoZ290X2FkZHJlc3MpKTsKLSAJICAgICAgbmlvczJfZWxmMzJfaW5zdGFsbF9pbW0xNiAoc3BsdCwgcmVzX3NpemUgKyAxNiwKLS0JCQkJCSAoZ290X2FkZHJlc3MgJiAweGZmZmYpICsgNCk7Ci0rCQkJCQkgKGdvdF9hZGRyZXNzICsgNCkgJiAweGZmZmYpOwotIAkgICAgICBuaW9zMl9lbGYzMl9pbnN0YWxsX2ltbTE2IChzcGx0LCByZXNfc2l6ZSArIDIwLAotLQkJCQkJIChnb3RfYWRkcmVzcyAmIDB4ZmZmZikgKyA4KTsKLSsJCQkJCSAoZ290X2FkZHJlc3MgKyA4KSAmIDB4ZmZmZik7Ci0gCSAgICB9Ci0gCX0KLSAgICAgfQotLS0gCi0yLjcuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtZml4LXRoZS1pbmNvcnJlY3QtYXNzZW1ibGluZy1mb3ItcHBjLXdhaXQtbW5lbW9uaWMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtZml4LXRoZS1pbmNvcnJlY3QtYXNzZW1ibGluZy1mb3ItcHBjLXdhaXQtbW5lbW9uaWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNGQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1maXgtdGhlLWluY29ycmVjdC1hc3NlbWJsaW5nLWZvci1wcGMtd2FpdC1tbmVtb25pYy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDBjMDRjM2I2MjY5OThjOGU3YjU5NTM4MWIzNTQ1NjQyODU4MWY1MmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AbnhwLmNvbT4KK0RhdGU6IFNhdCwgMTEgSnVuIDIwMTYgMjI6MDg6MjkgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8xM10gZml4IHRoZSBpbmNvcnJlY3QgYXNzZW1ibGluZyBmb3IgcHBjIHdhaXQgbW5lbW9uaWMKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQG54cC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgb3Bjb2Rlcy9wcGMtb3BjLmMgfCAzICstLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL29wY29kZXMvcHBjLW9wYy5jIGIvb3Bjb2Rlcy9wcGMtb3BjLmMKK2luZGV4IDgxMDZhYjcuLmNhNGIwZjMgMTAwNjQ0CistLS0gYS9vcGNvZGVzL3BwYy1vcGMuYworKysrIGIvb3Bjb2Rlcy9wcGMtb3BjLmMKK0BAIC00ODExLDcgKzQ4MTEsNiBAQCBjb25zdCBzdHJ1Y3QgcG93ZXJwY19vcGNvZGUgcG93ZXJwY19vcGNvZGVzW10gPSB7CisgeyJsZGVweCIsCVgoMzEsMjkpLAlYX01BU0ssCSAgRTUwME1DfFBQQ0EyLCAwLAkJe1JULCBSQTAsIFJCfX0sCisgCisgeyJ3YWl0YXNlYyIsCVgoMzEsMzApLCAgICAgIFhSVFJBUkJfTUFTSywgUE9XRVI4LAlQT1dFUjksCQl7MH19LAorLXsid2FpdCIsCVgoMzEsMzApLAlYV0NfTUFTSywgICAgUE9XRVI5LAkwLAkJe1dDfX0sCisgCisgeyJsd2VweCIsCVgoMzEsMzEpLAlYX01BU0ssCSAgRTUwME1DfFBQQ0EyLCAwLAkJe1JULCBSQTAsIFJCfX0sCisgCitAQCAtNDg2NSw3ICs0ODY0LDcgQEAgY29uc3Qgc3RydWN0IHBvd2VycGNfb3Bjb2RlIHBvd2VycGNfb3Bjb2Rlc1tdID0geworIAorIHsid2FpdHJzdiIsCVgoMzEsNjIpfCgxPDwyMSksIDB4ZmZmZmZmZmYsIEU1MDBNQ3xQUENBMiwgMCwJCXswfX0sCisgeyJ3YWl0aW1wbCIsCVgoMzEsNjIpfCgyPDwyMSksIDB4ZmZmZmZmZmYsIEU1MDBNQ3xQUENBMiwgMCwJCXswfX0sCisteyJ3YWl0IiwJWCgzMSw2MiksCVhXQ19NQVNLLCAgICBFNTAwTUN8UFBDQTIsIDAsCQl7V0N9fSwKKyt7IndhaXQiLAlYKDMxLDYyKSwJWFdDX01BU0ssICAgIEU1MDBNQ3xQUENBMnxQT1dFUjksIDAsCXtXQ319LAorIAorIHsiZGNic3RlcCIsCVhSVCgzMSw2MywwKSwJWFJUX01BU0ssICAgIEU1MDBNQ3xQUENBMiwgMCwJCXtSQTAsIFJCfX0sCisgCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNC1Db3JyZWN0LW5pb3MyLV9ncC1hZGRyZXNzLWNvbXB1dGF0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LUNvcnJlY3QtbmlvczItX2dwLWFkZHJlc3MtY29tcHV0YXRpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZWVkZWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LUNvcnJlY3QtbmlvczItX2dwLWFkZHJlc3MtY29tcHV0YXRpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotRnJvbSAyN2YxNTVmZDBhYjRiYTk1NDM2NjY0M2RiZmRjM2M3MTA0OTMzNzk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogU2FuZHJhIExvb3NlbW9yZSA8c2FuZHJhQGNvZGVzb3VyY2VyeS5jb20+Ci1EYXRlOiBTdW4sIDI3IERlYyAyMDE1IDEyOjMwOjI2IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMTQvMTRdIENvcnJlY3QgbmlvczIgX2dwIGFkZHJlc3MgY29tcHV0YXRpb24uCi0KLTIwMTUtMTItMjcgIFNhbmRyYSBMb29zZW1vcmUgIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KLQotCWJmZC8KLQkqIGVsZjMyLW5pb3MyLmMgKG5pb3MyX2VsZl9hc3NpZ25fZ3ApOiBDb3JyZWN0IGNvbXB1dGF0aW9uIG9mIF9ncAotCWFkZHJlc3MuCi0JKG5pb3MyX2VsZjMyX3JlbG9jYXRlX3NlY3Rpb24pOiBUaWR5IGNvZGUgZm9yIFJfTklPUzJfR1BSRUwgZXJyb3IKLQltZXNzYWdlcy4KLQotU2lnbmVkLW9mZi1ieTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0tLS0KLSBiZmQvZWxmMzItbmlvczIuYyB8IDMxICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9iZmQvZWxmMzItbmlvczIuYyBiL2JmZC9lbGYzMi1uaW9zMi5jCi1pbmRleCAxYzU0MzIwLi5iYWJlY2YzIDEwMDY0NAotLS0tIGEvYmZkL2VsZjMyLW5pb3MyLmMKLSsrKyBiL2JmZC9lbGYzMi1uaW9zMi5jCi1AQCAtMzA4Niw3ICszMDg2LDE1IEBAIGxvb2t1cDoKLSAJY2FzZSBiZmRfbGlua19oYXNoX2RlZmluZWQ6Ci0gCWNhc2UgYmZkX2xpbmtfaGFzaF9kZWZ3ZWFrOgotIAkgIGdwX2ZvdW5kID0gVFJVRTsKLS0JICAqcGdwID0gbGgtPnUuZGVmLnZhbHVlOwotKwkgIHsKLSsJICAgIGFzZWN0aW9uICpzeW1fc2VjID0gbGgtPnUuZGVmLnNlY3Rpb247Ci0rCSAgICBiZmRfdm1hIHN5bV92YWx1ZSA9IGxoLT51LmRlZi52YWx1ZTsKLSsKLSsJICAgIGlmIChzeW1fc2VjLT5vdXRwdXRfc2VjdGlvbikKLSsJICAgICAgc3ltX3ZhbHVlID0gKHN5bV92YWx1ZSArIHN5bV9zZWMtPm91dHB1dF9vZmZzZXQKLSsJCQkgICArIHN5bV9zZWMtPm91dHB1dF9zZWN0aW9uLT52bWEpOwotKwkgICAgKnBncCA9IHN5bV92YWx1ZTsKLSsJICB9Ci0gCSAgYnJlYWs7Ci0gCWNhc2UgYmZkX2xpbmtfaGFzaF9pbmRpcmVjdDoKLSAJY2FzZSBiZmRfbGlua19oYXNoX3dhcm5pbmc6Ci1AQCAtMzcxOSw3ICszNzI3LDYgQEAgbmlvczJfZWxmMzJfcmVsb2NhdGVfc2VjdGlvbiAoYmZkICpvdXRwdXRfYmZkLAotICAgICAgIHN0cnVjdCBlbGYzMl9uaW9zMl9saW5rX2hhc2hfZW50cnkgKmVoOwotICAgICAgIGJmZF92bWEgcmVsb2NhdGlvbjsKLSAgICAgICBiZmRfdm1hIGdwOwotLSAgICAgIGJmZF92bWEgcmVsb2NfYWRkcmVzczsKLSAgICAgICBiZmRfcmVsb2Nfc3RhdHVzX3R5cGUgciA9IGJmZF9yZWxvY19vazsKLSAgICAgICBjb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLSAgICAgICBpbnQgcl90eXBlOwotQEAgLTM3NjIsMTIgKzM3NjksNiBAQCBuaW9zMl9lbGYzMl9yZWxvY2F0ZV9zZWN0aW9uIChiZmQgKm91dHB1dF9iZmQsCi0gICAgICAgaWYgKGJmZF9saW5rX3JlbG9jYXRhYmxlIChpbmZvKSkKLSAJY29udGludWU7Ci0gCi0tICAgICAgaWYgKHNlYyAmJiBzZWMtPm91dHB1dF9zZWN0aW9uKQotLQlyZWxvY19hZGRyZXNzID0gKHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYSArIHNlYy0+b3V0cHV0X29mZnNldAotLQkJCSArIHJlbC0+cl9vZmZzZXQpOwotLSAgICAgIGVsc2UKLS0JcmVsb2NfYWRkcmVzcyA9IDA7Ci0tCi0gICAgICAgaWYgKGhvd3RvKQotIAl7Ci0gCSAgc3dpdGNoIChob3d0by0+dHlwZSkKLUBAIC0zODE2LDYgKzM4MTcsMTUgQEAgbmlvczJfZWxmMzJfcmVsb2NhdGVfc2VjdGlvbiAoYmZkICpvdXRwdXRfYmZkLAotIAkgICAgICAvKiBUdXJucyBhbiBhYnNvbHV0ZSBhZGRyZXNzIGludG8gYSBncC1yZWxhdGl2ZSBhZGRyZXNzLiAgKi8KLSAJICAgICAgaWYgKCFuaW9zMl9lbGZfYXNzaWduX2dwIChvdXRwdXRfYmZkLCAmZ3AsIGluZm8pKQotIAkJewotKwkJICBiZmRfdm1hIHJlbG9jX2FkZHJlc3M7Ci0rCi0rCQkgIGlmIChzZWMgJiYgc2VjLT5vdXRwdXRfc2VjdGlvbikKLSsJCSAgICByZWxvY19hZGRyZXNzID0gKHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYQotKwkJCQkgICAgICsgc2VjLT5vdXRwdXRfb2Zmc2V0Ci0rCQkJCSAgICAgKyByZWwtPnJfb2Zmc2V0KTsKLSsJCSAgZWxzZQotKwkJICAgIHJlbG9jX2FkZHJlc3MgPSAwOwotKwotIAkJICBmb3JtYXQgPSBfKCJnbG9iYWwgcG9pbnRlciByZWxhdGl2ZSByZWxvY2F0aW9uIGF0IGFkZHJlc3MgIgotIAkJCSAgICAgIjB4JTA4eCB3aGVuIF9ncCBub3QgZGVmaW5lZFxuIik7Ci0gCQkgIHNwcmludGYgKG1zZ2J1ZiwgZm9ybWF0LCByZWxvY19hZGRyZXNzKTsKLUBAIC0zODI1LDcgKzM4MzUsNyBAQCBuaW9zMl9lbGYzMl9yZWxvY2F0ZV9zZWN0aW9uIChiZmQgKm91dHB1dF9iZmQsCi0gCSAgICAgIGVsc2UKLSAJCXsKLSAJCSAgYmZkX3ZtYSBzeW1ib2xfYWRkcmVzcyA9IHJlbC0+cl9hZGRlbmQgKyByZWxvY2F0aW9uOwotLQkJICByZWxvY2F0aW9uID0gcmVsb2NhdGlvbiArIHJlbC0+cl9hZGRlbmQgLSBncDsKLSsJCSAgcmVsb2NhdGlvbiA9IHN5bWJvbF9hZGRyZXNzIC0gZ3A7Ci0gCQkgIHJlbC0+cl9hZGRlbmQgPSAwOwotIAkJICBpZiAoKChzaWduZWQpIHJlbG9jYXRpb24gPCAtMzI3NjgKLSAJCSAgICAgICB8fCAoc2lnbmVkKSByZWxvY2F0aW9uID4gMzI3NjcpCi1AQCAtMzgzMyw2ICszODQzLDggQEAgbmlvczJfZWxmMzJfcmVsb2NhdGVfc2VjdGlvbiAoYmZkICpvdXRwdXRfYmZkLAotIAkJCSAgfHwgaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfZGVmaW5lZAotIAkJCSAgfHwgaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfZGVmd2VhaykpCi0gCQkgICAgewotKwkJICAgICAgaWYgKGgpCi0rCQkJbmFtZSA9IGgtPnJvb3Qucm9vdC5zdHJpbmc7Ci0gCQkgICAgICBmb3JtYXQgPSBfKCJVbmFibGUgdG8gcmVhY2ggJXMgKGF0IDB4JTA4eCkgZnJvbSB0aGUgIgotIAkJCQkgImdsb2JhbCBwb2ludGVyIChhdCAweCUwOHgpIGJlY2F1c2UgdGhlICIKLSAJCQkJICJvZmZzZXQgKCVkKSBpcyBvdXQgb2YgdGhlIGFsbG93ZWQgcmFuZ2UsICIKLUBAIC0zODQ4LDcgKzM4NjAsNiBAQCBuaW9zMl9lbGYzMl9yZWxvY2F0ZV9zZWN0aW9uIChiZmQgKm91dHB1dF9iZmQsCi0gCQkJCQkJICByZWwtPnJfb2Zmc2V0LCByZWxvY2F0aW9uLAotIAkJCQkJCSAgcmVsLT5yX2FkZGVuZCk7Ci0gCQl9Ci0tCi0gCSAgICAgIGJyZWFrOwotIAkgICAgY2FzZSBSX05JT1MyX1VKTVA6Ci0gCSAgICAgIHIgPSBuaW9zMl9lbGYzMl9kb191am1wX3JlbG9jYXRlIChpbnB1dF9iZmQsIGhvd3RvLAotLS0gCi0yLjcuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtbGlidG9vbC1yZW1vdmUtcnBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtbGlidG9vbC1yZW1vdmUtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2OTQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNC1saWJ0b29sLXJlbW92ZS1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorQXBwbHkgdGhlc2UgcGF0Y2hlcyBmcm9tIG91ciBsaWJ0b29sIHBhdGNoZXMgYXMgbm90IG9ubHkgYXJlIHJlZHVuZGFudCBSUEFUSHMgYQord2FzdGUgb2Ygc3BhY2UgYnV0IHRoZXkgY2FuIGNhdXNlIGluY29ycmVjdCBsaW5raW5nIHdoZW4gbmF0aXZlIHBhY2thZ2VzIGFyZQorcmVzdG9yZWQgZnJvbSBzc3RhdGUuCisKK2ZpeC1ycGF0aC5wYXRjaDoKK1dlIGRvbid0IHdhbnQgdG8gYWRkIFJQQVRIUyB3aGljaCBtYXRjaCBkZWZhdWx0IGxpbmtlcgorc2VhcmNoIHBhdGhzLCB0aGV5J3JlIGEgd2FzdGUgb2Ygc3BhY2UuIFRoaXMgcGF0Y2gKK2ZpbHRlcnMgbGlidG9vbHMgbGlzdCBhbmQgcmVtb3ZlcyB0aGUgb25lcyB3ZSBkb24ndCBuZWVkLgorCitub3JtLXJwYXRoLnBhdGNoOgorTGlidG9vbCBtYXkgYmUgcGFzc2VkIGxpbmsgcGF0aHMgb2YgdGhlIGZvcm0gIi91c3IvbGliLy4uL2xpYiIsIHdoaWNoCitmb29sIGl0cyBkZXRlY3Rpb24gY29kZSBpbnRvIHRoaW5raW5nIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhbgorUlBBVEggaW4gdGhlIGdlbmVyYXRlZCBiaW5hcnkuICBOb3JtYWxpemUgYmVmb3JlIGNvbXBhcmlzaW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDY4MzMxN2MuLjg2MGExNmEgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTgwNTMsOCArODA1MywxNCBAQCBFT0YKKyAJCSAgZXNhYworIAkJZmkKKyAJICAgICAgZWxzZQorLQkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysJICAgICAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgICAgICA7OworKwkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCitAQCAtODc5MCw4ICs4Nzk2LDE0IEBAIEVPRgorIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKy0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisrICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgIHJwYXRoKz0iICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorQEAgLTg4NDEsOCArODg1MywxNCBAQCBFT0YKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggNjgzMzE3Yy4uODYwYTE2YSAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtODA1NSw4ICs4MDU1LDEwIEBAIEVPRgorIAkgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysgICAgICAgICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJGxpYmRpciIKKysgICAgICAgICAgICAgICAgbGliZGlyX25vcm09JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgCSAgICAgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAgICAgKiIgJGxpYmRpcl9ub3JtICIqKSA7OworIAkgICAgICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisgICAgICAgICAgICAgICAgICAgIDs7CitAQCAtODc5OCw4ICs4ODAwLDEwIEBAIEVPRgorIAkgIGVsc2UKKyAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKyAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysgICAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkbGliZGlyIgorKyAgICAgICAgICAgIGxpYmRpcl9ub3JtPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorIAkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICoiICRsaWJkaXJfbm9ybSAiKikgOzsKKyAJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgICBycGF0aCs9IiAkZmxhZyIKKyAgICAgICAgICAgICAgICA7OwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LVJlZmluZS0uY2ZpX3NlY3Rpb25zLWNoZWNrLXRvLW9ubHktY29uc2lkZXItY29tcGFjdC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTUtUmVmaW5lLS5jZmlfc2VjdGlvbnMtY2hlY2stdG8tb25seS1jb25zaWRlci1jb21wYWN0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2UzYTExCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LVJlZmluZS0uY2ZpX3NlY3Rpb25zLWNoZWNrLXRvLW9ubHktY29uc2lkZXItY29tcGFjdC0ucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorRnJvbSAzZDM0MjRlOWE4ZDZhZDU2MTYwYjk4YmY2ZTIyM2MwMzQ2MTY0NDY4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dGhldyBGb3J0dW5lIDxtYXR0aGV3LmZvcnR1bmVAaW1ndGVjLmNvbT4KK0RhdGU6IFRodSwgMjkgU2VwIDIwMTYgMTE6MTM6NDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVmaW5lIC5jZmlfc2VjdGlvbnMgY2hlY2sgdG8gb25seSBjb25zaWRlciBjb21wYWN0IGVoX2ZyYW1lCisKK1RoZSAuY2ZpX3NlY3Rpb25zIGRpcmVjdGl2ZSBjYW4gYmUgc2FmZWx5IHVzZWQgbXVsdGlwbGUgdGltZXMKK3dpdGggZGlmZmVyZW50IHNlY3Rpb25zIG5hbWVkIGF0IGFueSB0aW1lIHVubGVzcyB0aGUgY29tcGFjdCBmb3JtCitvZiBleGNlcHRpb24gaGFuZGxpbmcgaXMgcmVxdWVzdGVkIGFmdGVyIENGSSBpbmZvcm1hdGlvbiBoYXMKK2JlZW4gZW1pdHRlZC4gIE9ubHkgdGhlIGNvbXBhY3QgZm9ybSBvZiBDRkkgaW5mb3JtYXRpb24gY2hhbmdlcwordGhlIHdheSBpbiB3aGljaCBDRkkgaXMgZ2VuZXJhdGVkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlCityZXRyb3NwZWN0aXZlbHkgcmVxdWVzdGVkIGFmdGVyIGdlbmVyYXRpbmcgQ0ZJIGluZm9ybWF0aW9uLgorCitnYXMvCisKKwlQUiBnYXMvMjA2NDgKKwkqIGR3MmdlbmNmaS5jIChkb3RfY2ZpX3NlY3Rpb25zKTogUmVmaW5lIHRoZSBjaGVjayBmb3IKKwlpbmNvbnNpc3RlbnQgLmNmaV9zZWN0aW9ucyB0byBvbmx5IGNvbnNpZGVyIGNvbXBhY3QgdnMgbm9uCisJY29tcGFjdCBmb3Jtcy4KKwkqIHRlc3RzdWl0ZS9nYXMvY2ZpL2NmaS1jb21tb24tOS5kOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9nYXMvY2ZpL2NmaS1jb21tb24tOS5zOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9nYXMvY2ZpL2NmaS5leHA6IFJ1biBuZXcgdGVzdC4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbQorCisgZ2FzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKysrKysrKysrKworIGdhcy9kdzJnZW5jZmkuYyAgICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKystCisgZ2FzL3Rlc3RzdWl0ZS9nYXMvY2ZpL2NmaS1jb21tb24tOS5kIHwgMjMgKysrKysrKysrKysrKysrKysrKysrKysKKyBnYXMvdGVzdHN1aXRlL2dhcy9jZmkvY2ZpLWNvbW1vbi05LnMgfCAgNCArKysrCisgZ2FzL3Rlc3RzdWl0ZS9nYXMvY2ZpL2NmaS5leHAgICAgICAgIHwgIDEgKworIDUgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBnYXMvdGVzdHN1aXRlL2dhcy9jZmkvY2ZpLWNvbW1vbi05LmQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ2FzL3Rlc3RzdWl0ZS9nYXMvY2ZpL2NmaS1jb21tb24tOS5zCisKK0luZGV4OiBnaXQvZ2FzL2R3MmdlbmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZ2FzL2R3MmdlbmNmaS5jCisrKysgZ2l0L2dhcy9kdzJnZW5jZmkuYworQEAgLTEyNDQsNyArMTI0NCwxMCBAQCBkb3RfY2ZpX3NlY3Rpb25zIChpbnQgaWdub3JlZCBBVFRSSUJVVEVfCisgICAgICAgfQorIAorICAgZGVtYW5kX2VtcHR5X3Jlc3Rfb2ZfbGluZSAoKTsKKy0gIGlmIChjZmlfc2VjdGlvbnNfc2V0ICYmIGNmaV9zZWN0aW9ucyAhPSBzZWN0aW9ucykKKysgIGlmIChjZmlfc2VjdGlvbnNfc2V0CisrICAgICAgJiYgKHNlY3Rpb25zICYgKENGSV9FTUlUX2VoX2ZyYW1lIHwgQ0ZJX0VNSVRfZWhfZnJhbWVfY29tcGFjdCkpCisrICAgICAgJiYgKGNmaV9zZWN0aW9ucyAmIChDRklfRU1JVF9laF9mcmFtZSB8IENGSV9FTUlUX2VoX2ZyYW1lX2NvbXBhY3QpKQorKwkgIT0gKHNlY3Rpb25zICYgKENGSV9FTUlUX2VoX2ZyYW1lIHwgQ0ZJX0VNSVRfZWhfZnJhbWVfY29tcGFjdCkpKQorICAgICBhc19iYWQgKF8oImluY29uc2lzdGVudCB1c2VzIG9mIC5jZmlfc2VjdGlvbnMiKSk7CisgICBjZmlfc2VjdGlvbnMgPSBzZWN0aW9uczsKKyB9CitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL2NmaS9jZmktY29tbW9uLTkuZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9jZmkvY2ZpLWNvbW1vbi05LmQKK0BAIC0wLDAgKzEsMjMgQEAKKysjb2JqZHVtcDogLVdmCisrI25hbWU6IENGSSBjb21tb24gOQorKyMuLi4KKytDb250ZW50cyBvZiB0aGUgLmVoX2ZyYW1lIHNlY3Rpb246CisrCisrMDAwMDAwMDAgMCswMDEwIDArMDAwMCBDSUUKKysgIFZlcnNpb246ICAgICAgICAgICAgICAgMQorKyAgQXVnbWVudGF0aW9uOiAgICAgICAgICAielIiCisrICBDb2RlIGFsaWdubWVudCBmYWN0b3I6IC4qCisrICBEYXRhIGFsaWdubWVudCBmYWN0b3I6IC4qCisrICBSZXR1cm4gYWRkcmVzcyBjb2x1bW46IC4qCisrICBBdWdtZW50YXRpb24gZGF0YTogICAgIFswMV1iCisrCisrICBEV19DRkFfbm9wCisrICBEV19DRkFfbm9wCisrICBEV19DRkFfbm9wCisrCisrMDAwMDAwMTQgMCswMCgxMHwxOHwxY3wyMCkgMCswMDE4IEZERSBjaWU9MCswMDAwIHBjPS4qCisrCisrICBEV19DRkFfbm9wCisrICBEV19DRkFfbm9wCisrICBEV19DRkFfbm9wCisrIy4uLgorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9jZmkvY2ZpLWNvbW1vbi05LnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvY2ZpL2NmaS1jb21tb24tOS5zCitAQCAtMCwwICsxLDQgQEAKKysJLmNmaV9zZWN0aW9ucyAuZWhfZnJhbWUKKysJLmNmaV9zdGFydHByb2Mgc2ltcGxlCisrCS5jZmlfc2VjdGlvbnMgLmRlYnVnX2ZyYW1lCisrCS5jZmlfZW5kcHJvYworSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9jZmkvY2ZpLmV4cAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2dhcy90ZXN0c3VpdGUvZ2FzL2NmaS9jZmkuZXhwCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL2NmaS9jZmkuZXhwCitAQCAtMTM1LDQgKzEzNSw1IEBAIGlmIHsgIVtpc3RhcmdldCAiaHBwYTY0Ki0qIl0gfSB0aGVuIHsKKyAgICAgcnVuX2R1bXBfdGVzdCAiY2ZpLWNvbW1vbi02IgorICAgfQorICAgcnVuX2R1bXBfdGVzdCAiY2ZpLWNvbW1vbi03IgorKyAgcnVuX2R1bXBfdGVzdCAiY2ZpLWNvbW1vbi05IgorIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1iaW51dGlscy1taXBzLWdhcy1waWMtcmVsYXgtbGlua29uY2UuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1iaW51dGlscy1taXBzLWdhcy1waWMtcmVsYXgtbGlua29uY2UuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGI5NzFhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LWJpbnV0aWxzLW1pcHMtZ2FzLXBpYy1yZWxheC1saW5rb25jZS5kaWZmCkBAIC0wLDAgKzEsNjUgQEAKK1BhdGNoIHRha2VuIGZyb20gQmludXRpbHMgQnVnemlsbGE6CisKKyAgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CisKK0luZGV4OiBiaW51dGlscy9nYXMvY29uZmlnL3RjLW1pcHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJpbnV0aWxzLm9yaWcvZ2FzL2NvbmZpZy90Yy1taXBzLmMJMjAxNi0wOS0yOSAwNToxMjozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy9nYXMvY29uZmlnL3RjLW1pcHMuYwkyMDE2LTA5LTI5IDIwOjA1OjEzLjI1NzQxMTA4NCArMDEwMAorQEAgLTEzNTMsNyArMTM1Myw3IEBAIHN0YXRpYyB2b2lkIHNfbWlwc19zdGFiIChpbnQpOworIHN0YXRpYyB2b2lkIHNfbWlwc193ZWFrZXh0IChpbnQpOworIHN0YXRpYyB2b2lkIHNfbWlwc19maWxlIChpbnQpOworIHN0YXRpYyB2b2lkIHNfbWlwc19sb2MgKGludCk7Cistc3RhdGljIGJmZF9ib29sZWFuIHBpY19uZWVkX3JlbGF4IChzeW1ib2xTICosIGFzZWN0aW9uICopOworK3N0YXRpYyBiZmRfYm9vbGVhbiBwaWNfbmVlZF9yZWxheCAoc3ltYm9sUyAqKTsKKyBzdGF0aWMgaW50IHJlbGF4ZWRfYnJhbmNoX2xlbmd0aCAoZnJhZ1MgKiwgYXNlY3Rpb24gKiwgaW50KTsKKyBzdGF0aWMgaW50IHJlbGF4ZWRfbWljcm9taXBzXzE2Yml0X2JyYW5jaF9sZW5ndGggKGZyYWdTICosIGFzZWN0aW9uICosIGludCk7Cisgc3RhdGljIGludCByZWxheGVkX21pY3JvbWlwc18zMmJpdF9icmFuY2hfbGVuZ3RoIChmcmFnUyAqLCBhc2VjdGlvbiAqLCBpbnQpOworQEAgLTQyNTgsNiArNDI1OCw4IEBAIG1pcHNfbW92ZV90ZXh0X2xhYmVscyAodm9pZCkKKyAgIG1pcHNfbW92ZV9sYWJlbHMgKHNlZ19pbmZvIChub3dfc2VnKS0+bGFiZWxfbGlzdCwgVFJVRSk7CisgfQorIAorKy8qIER1cGxpY2F0ZSB0aGUgdGVzdCBmb3IgTElOS19PTkNFIHNlY3Rpb25zIGFzIGluIGBhZGp1c3RfcmVsb2Nfc3ltcycuICAqLworKworIHN0YXRpYyBiZmRfYm9vbGVhbgorIHNfaXNfbGlua29uY2UgKHN5bWJvbFMgKnN5bSwgc2VnVCBmcm9tX3NlZykKKyB7CitAQCAtMTQ4MjMsNyArMTQ4MjUsNyBAQCBtaXBzX2Zyb2JfZmlsZSAodm9pZCkKKyAJIGNvbnN0YW50czsgd2UnbGwgcmVwb3J0IGFuIGVycm9yIGZvciB0aG9zZSBsYXRlci4gICovCisgICAgICAgaWYgKGdvdDE2X3JlbG9jX3AgKGwtPmZpeHAtPmZ4X3JfdHlwZSkKKyAJICAmJiAhKGwtPmZpeHAtPmZ4X2FkZHN5CistCSAgICAgICAmJiBwaWNfbmVlZF9yZWxheCAobC0+Zml4cC0+ZnhfYWRkc3ksIGwtPnNlZykpKQorKwkgICAgICAgJiYgcGljX25lZWRfcmVsYXggKGwtPmZpeHAtPmZ4X2FkZHN5KSkpCisgCWNvbnRpbnVlOworIAorICAgICAgIC8qIENoZWNrIHF1aWNrbHkgd2hldGhlciB0aGUgbmV4dCBmaXh1cCBoYXBwZW5zIHRvIGJlIGEgbWF0Y2hpbmcgJWxvLiAgKi8KK0BAIC0xNzA0Myw3ICsxNzA0NSw3IEBAIG5vcGljX25lZWRfcmVsYXggKHN5bWJvbFMgKnN5bSwgaW50IGJlZm8KKyAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3ltYm9sIHNob3VsZCBiZSBjb25zaWRlcmVkIGxvY2FsIGZvciBTVlI0IFBJQy4gICovCisgCisgc3RhdGljIGJmZF9ib29sZWFuCistcGljX25lZWRfcmVsYXggKHN5bWJvbFMgKnN5bSwgYXNlY3Rpb24gKnNlZ3R5cGUpCisrcGljX25lZWRfcmVsYXggKHN5bWJvbFMgKnN5bSkKKyB7CisgICBhc2VjdGlvbiAqc3ltc2VjOworIAorQEAgLTE3MDY4LDcgKzE3MDcwLDYgQEAgcGljX25lZWRfcmVsYXggKHN5bWJvbFMgKnN5bSwgYXNlY3Rpb24gKgorICAgcmV0dXJuICghYmZkX2lzX3VuZF9zZWN0aW9uIChzeW1zZWMpCisgCSAgJiYgIWJmZF9pc19hYnNfc2VjdGlvbiAoc3ltc2VjKQorIAkgICYmICFiZmRfaXNfY29tX3NlY3Rpb24gKHN5bXNlYykKKy0JICAmJiAhc19pc19saW5rb25jZSAoc3ltLCBzZWd0eXBlKQorIAkgIC8qIEEgZ2xvYmFsIG9yIHdlYWsgc3ltYm9sIGlzIHRyZWF0ZWQgYXMgZXh0ZXJuYWwuICAqLworIAkgICYmICghU19JU19XRUFLIChzeW0pICYmICFTX0lTX0VYVEVSTkFMIChzeW0pKSk7CisgfQorQEAgLTE3NTA3LDcgKzE3NTA4LDcgQEAgbWRfZXN0aW1hdGVfc2l6ZV9iZWZvcmVfcmVsYXggKGZyYWdTICpmcgorICAgaWYgKG1pcHNfcGljID09IE5PX1BJQykKKyAgICAgY2hhbmdlID0gbm9waWNfbmVlZF9yZWxheCAoZnJhZ3AtPmZyX3N5bWJvbCwgMCk7CisgICBlbHNlIGlmIChtaXBzX3BpYyA9PSBTVlI0X1BJQykKKy0gICAgY2hhbmdlID0gcGljX25lZWRfcmVsYXggKGZyYWdwLT5mcl9zeW1ib2wsIHNlZ3R5cGUpOworKyAgICBjaGFuZ2UgPSBwaWNfbmVlZF9yZWxheCAoZnJhZ3AtPmZyX3N5bWJvbCk7CisgICBlbHNlIGlmIChtaXBzX3BpYyA9PSBWWFdPUktTX1BJQykKKyAgICAgLyogRm9yIHZ4d29ya3MsIEdPVDE2IHJlbG9jYXRpb25zIG5ldmVyIGhhdmUgYSBjb3JyZXNwb25kaW5nIExPMTYuICAqLworICAgICBjaGFuZ2UgPSAwOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI2LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzBmZmJmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLXJlcXVpcmUgYmludXRpbHMuaW5jCi1yZXF1aXJlIGJpbnV0aWxzLSR7UFZ9LmluYwotCi1ERVBFTkRTICs9ICJmbGV4IGJpc29uIHpsaWIiCi0KLUVYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9LyBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJiZmQgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5IFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAotICAgICAgICAgICAgICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCi0gICAgICAgICAgICAgICAgIgotCi1FWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZW5hYmxlLXRhcmdldHM9YWxsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtNjQtYml0LWJmZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJiZmQiCi0KLWRvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKLQlhdXRvdG9vbHNfZG9faW5zdGFsbAotCi0JIyBJbnN0YWxsIHRoZSBsaWJpYmVydHkgaGVhZGVyCi0JaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQotCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9hbnNpZGVjbC5oICR7RH0ke2luY2x1ZGVkaXJ9Ci0JaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2xpYmliZXJ0eS5oICR7RH0ke2luY2x1ZGVkaXJ9Ci0KLQkjIFdlIG9ubHkgd2FudCBsaWJpYmVydHksIGxpYmJmZCBhbmQgbGlib3Bjb2RlcwotCXJtIC1yZiAke0R9JHtiaW5kaXJ9Ci0Jcm0gLXJmICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfQotCXJtIC1yZiAke0R9JHtwcmVmaXh9L2xpYi9sZHNjcmlwdHMKLQlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9pbmZvCi0Jcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbG9jYWxlCi0Jcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbWFuCi0Jcm1kaXIgJHtEfSR7cHJlZml4fS9zaGFyZSB8fCA6Ci0Jcm1kaXIgJHtEfS8ke2xpYmRpcn0vZ2NjLWxpYiB8fCA6Ci0Jcm1kaXIgJHtEfS8ke2xpYmRpcn02NC9nY2MtbGliIHx8IDoKLQlybWRpciAke0R9LyR7bGliZGlyfSB8fCA6Ci0Jcm1kaXIgJHtEfS8ke2xpYmRpcn02NCB8fCA6Ci19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTE0MzdiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI3LmJiCkBAIC0wLDAgKzEsNDUgQEAKK3JlcXVpcmUgYmludXRpbHMuaW5jCityZXF1aXJlIGJpbnV0aWxzLSR7UFZ9LmluYworCitERVBFTkRTICs9ICJmbGV4IGJpc29uIHpsaWIiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9LyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJiZmQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRU1BS0VfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmM9eWVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDJfbGliYz15ZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZW5hYmxlLXRhcmdldHM9YWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtNjQtYml0LWJmZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJiZmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtd2Vycm9yIgorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgSW5zdGFsbCB0aGUgbGliaWJlcnR5IGhlYWRlcgorCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvYW5zaWRlY2wuaCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9saWJpYmVydHkuaCAke0R9JHtpbmNsdWRlZGlyfQorCisJIyBXZSBvbmx5IHdhbnQgbGliaWJlcnR5LCBsaWJiZmQgYW5kIGxpYm9wY29kZXMKKwlybSAtcmYgJHtEfSR7YmluZGlyfQorCXJtIC1yZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30KKwlybSAtcmYgJHtEfSR7cHJlZml4fS9saWIvbGRzY3JpcHRzCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvaW5mbworCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL2xvY2FsZQorCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL21hbgorCXJtZGlyICR7RH0ke3ByZWZpeH0vc2hhcmUgfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9L2djYy1saWIgfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9NjQvZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0gfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9NjQgfHwgOgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi8wMDAxLUZpeGVkLU1pc3NpbmctZGVmYXVsdC12YWx1ZS1mb3ItQk9PVExPR19ERVNULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDIvMDAwMS1GaXhlZC1NaXNzaW5nLWRlZmF1bHQtdmFsdWUtZm9yLUJPT1RMT0dfREVTVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg4MTRhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDIvMDAwMS1GaXhlZC1NaXNzaW5nLWRlZmF1bHQtdmFsdWUtZm9yLUJPT1RMT0dfREVTVC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDIyMjVhYjIwMzhiZmU1MGYxNmY5NzJlMzlkODliY2QwYmQ3NzY3ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTdGVmZmVuIFBhbmtyYXR6IDxrcmF0ejAwQGdteC5kZT4KK0RhdGU6IFR1ZSwgOSBGZWIgMjAxNiAxMzo0OTo0MiArMDEwMAorU3ViamVjdDogW1BBVENIXSBGaXhlZDogTWlzc2luZyBkZWZhdWx0IHZhbHVlIGZvciBCT09UTE9HX0RFU1QKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCVUlMRExPR19ERVNUIHNlZW1zIHRvIGJlIGEgdHlwbyBvciBtaXgtdXAgd2hpY2ggd2FzIGludHJvZHVjZWQgd2l0aCAyODFkMWRmODA4ODRiZjI5NjljNTA5ZWM2MGVlOGE2NTkzNTI0ZmU4CisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIExpdSA8cGV0ZXIueC5saXVAZXh0ZXJuYWwuYXRsYXNjb3Bjby5jb20+CistLS0KKyBib290Y2hhcnRkLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9vdGNoYXJ0ZC5pbiBiL2Jvb3RjaGFydGQuaW4KK2luZGV4IGY1OGFiOWUuLjMwYWY2NzcgMTAwNzU1CistLS0gYS9ib290Y2hhcnRkLmluCisrKysgYi9ib290Y2hhcnRkLmluCitAQCAtMzcsNyArMzcsNyBAQCBQQVRIPSIvc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbjokUEFUSCIKKyAKKyAjIERlZmF1bHRzLCBpbiBjYXNlIHdlIGNhbid0IGZpbmQgb3VyIGNvbmZpZ3VyYXRpb24KKyBTQU1QTEVfSFo9NTAKKy1CVUlMRExPR19ERVNUPS92YXIvbG9nL2Jvb3RjaGFydC50Z3oKKytCT09UTE9HX0RFU1Q9L3Zhci9sb2cvYm9vdGNoYXJ0LnRnegorIEFVVE9fUkVOREVSPSJubyIKKyBBVVRPX1JFTkRFUl9ESVI9Ii92YXIvbG9nIgorIEFVVE9fUkVOREVSX0ZPUk1BVD0icG5nIgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi8wMDAxLWNvbGxlY3Rvci1BbGxvY2F0ZS1zcGFjZS1vbi1oZWFwLWZvci1jaHVua3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi8wMDAxLWNvbGxlY3Rvci1BbGxvY2F0ZS1zcGFjZS1vbi1oZWFwLWZvci1jaHVua3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ODEzZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyLzAwMDEtY29sbGVjdG9yLUFsbG9jYXRlLXNwYWNlLW9uLWhlYXAtZm9yLWNodW5rcy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDA5NTA1NTMyYjQ5NTczNjYzZmI0ZmY0ZGFkNDI0ZGMyZWY0YzFmODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLeWxlIFJ1c3NlbGwgPGJreWxlcnVzc2VsbEBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDEzIEp1bCAyMDE2IDE3OjMwOjAwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbGxlY3RvcjogQWxsb2NhdGUgc3BhY2Ugb24gaGVhcCBmb3IgY2h1bmtzCisKK05pY2VyIGZvciBlbWJlZGRlZCBkZXZpY2VzIHdoaWNoIG1heSBoYXZlIHNtYWxsZXIgc3RhY2sgbGltaXRhdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20veHJteC9ib290Y2hhcnQvcHVsbC83NF0KKworU2lnbmVkLW9mZi1ieTogS3lsZSBSdXNzZWxsIDxia3lsZXJ1c3NlbGxAZ21haWwuY29tPgorLS0tCisgY29sbGVjdG9yL2R1bXAuYyB8IDcgKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb2xsZWN0b3IvZHVtcC5jIGIvY29sbGVjdG9yL2R1bXAuYworaW5kZXggZTY3M2I1Yi4uMmYwOTRiNCAxMDA2NDQKKy0tLSBhL2NvbGxlY3Rvci9kdW1wLmMKKysrKyBiL2NvbGxlY3Rvci9kdW1wLmMKK0BAIC0xODQsMTIgKzE4NCwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX2J1ZmZlcnMgKER1bXBTdGF0ZSAqcykKKyAJbG9nICgicmVhZGluZyAlZCBjaHVua3MgKG9mICVkKSAuLi5cbiIsIG1heF9jaHVuaywgcy0+bWFwLm1heF9jaHVuayk7CisgCWZvciAoaSA9IDA7IGkgPCBtYXhfY2h1bms7IGkrKykgeworIAkJRklMRSAqb3V0cHV0OworLQkJY2hhciBidWZmZXJbQ0hVTktfU0laRV07CistCQlDaHVuayAqYyA9IChDaHVuayAqKSZidWZmZXI7CisrCQljaGFyICpidWZmZXIgPSBtYWxsb2MoQ0hVTktfU0laRSk7CisrCQlDaHVuayAqYyA9IChDaHVuayAqKWJ1ZmZlcjsKKyAJCXNpemVfdCBhZGRyID0gKHNpemVfdCkgcy0+bWFwLmNodW5rc1tpXTsKKyAKKyAJCWxzZWVrIChzLT5tZW0sIGFkZHIsIFNFRUtfU0VUKTsKKy0JCXJlYWQgKHMtPm1lbSwgJmJ1ZmZlciwgQ0hVTktfU0laRSk7CisrCQlyZWFkIChzLT5tZW0sIGJ1ZmZlciwgQ0hVTktfU0laRSk7CisgCQkvKiAgICAgIGxvZyAoInR5cGU6ICclcycgbGVuICVkXG4iLAorIAkJCWMtPmRlc3Rfc3RyZWFtLCAoaW50KWMtPmxlbmd0aCk7ICovCisgCitAQCAtMTk3LDYgKzE5Nyw3IEBAIHN0YXRpYyB2b2lkIGR1bXBfYnVmZmVycyAoRHVtcFN0YXRlICpzKQorIAkJZndyaXRlIChjLT5kYXRhLCAxLCBjLT5sZW5ndGgsIG91dHB1dCk7CisgCQlieXRlc19kdW1wZWQgKz0gYy0+bGVuZ3RoOworIAkJZmNsb3NlIChvdXRwdXQpOworKyAgICAgICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CisgCX0KKyAJbG9nICgid3JvdGUgJWxkIGtiXG4iLCAobG9uZykoYnl0ZXNfZHVtcGVkKzEwMjMpLzEwMjQpOworIH0KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC44LmJiCmluZGV4IDg2YzYxNGEuLjRmMDE3MzQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyXzAuMTQuOC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Ml8wLjE0LjguYmIKQEAgLTkyLDE0ICs5MiwxOCBAQAogCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vbW1lZWtzL2Jvb3RjaGFydC5naXQgXAogICAgICAgICAgICBmaWxlOi8vYm9vdGNoYXJ0ZF9zdG9wLnNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4ZWQtTWlzc2luZy1kZWZhdWx0LXZhbHVlLWZvci1CT09UTE9HX0RFU1QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb2xsZWN0b3ItQWxsb2NhdGUtc3BhY2Utb24taGVhcC1mb3ItY2h1bmtzLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiBTUkNSRVYgPSAiNDhlMDA3MTA0ODU2NGM2YWY3NWFiOTY5ZTg0MmQ2ZGVjODA4ZGEwOSIKIAotaW5oZXJpdCBzeXN0ZW1kCi1pbmhlcml0IHVwZGF0ZS1yYy5kCi1pbmhlcml0IHB5dGhvbm5hdGl2ZQoraW5oZXJpdCBzeXN0ZW1kIHVwZGF0ZS1yYy5kIHB5dGhvbjNuYXRpdmUgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJib290Y2hhcnRkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jvb3RjaGFydGRdID0gIiR7YmFzZV9zYmluZGlyfS9ib290Y2hhcnRkIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgogCiAjIFRoZSBvbmx5IHJlYXNvbiB0byBidWlsZCBib290Y2hhcnQyLW5hdGl2ZSBpcyBmb3IgYSBuYXRpdmUgcHlib290Y2hhcnRndWkuCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKQEAgLTExMCwxMyArMTE0LDYgQEAKIElOSVRTQ1JJUFRfTkFNRSA9ICJib290Y2hhcnRkX3N0b3Auc2giCiBJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSAyIDMgNCA1IC4iCiAKLSMgV2Ugd2FudCBuYXRpdmUgcHlib290Y2hhcnRndWkgdG8gZXhlY3V0ZSB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbiBpbnRlcnBldGVyLgotZG9fY29tcGlsZV9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBlY2hvICIjISAke1BZVEhPTn0iIHwgY2F0IC0gJHtTfS9weWJvb3RjaGFydGd1aS5weSA+ICR7V09SS0RJUn0vdGVtcF9weWJvb3RjaGFydGd1aQotICAgIG12ICR7V09SS0RJUn0vdGVtcF9weWJvb3RjaGFydGd1aSAke1N9L3B5Ym9vdGNoYXJ0Z3VpLnB5Ci0gICAgY2htb2QgK3ggJHtTfS9weWJvb3RjaGFydGd1aQotfQotCiBkb19jb21waWxlX3ByZXBlbmQgKCkgewogICAgIGV4cG9ydCBQWV9MSUJESVI9IiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9IgogICAgIGV4cG9ydCBCSU5ESVI9IiR7YmluZGlyfSIKQEAgLTEzNSwxNyArMTMyLDIxIEBACiAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYm9vdGNoYXJ0ZF9zdG9wLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAogCiAgICAgZWNobyAnRVhJVF9QUk9DPSIkRVhJVF9QUk9DIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIicgPj4gJHtEfSR7c3lzY29uZmRpcn0vYm9vdGNoYXJ0ZC5jb25mCisKKyAgICMgVXNlIHB5dGhvbiAzIGluc3RlYWQgb2YgcHl0aG9uIDIKKyAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtiaW5kaXJ9L3B5Ym9vdGNoYXJ0Z3VpCiB9CiAKIFBBQ0tBR0VTID0rICJweWJvb3RjaGFydGd1aSIKLUZJTEVTX3B5Ym9vdGNoYXJ0Z3VpICs9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3B5Ym9vdGNoYXJ0Z3VpICR7YmluZGlyfS9weWJvb3RjaGFydGd1aSIKLVJERVBFTkRTX3B5Ym9vdGNoYXJ0Z3VpID0gInB5dGhvbi1weWNhaXJvIHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24taW1hZ2UgcHl0aG9uLXRleHR1dGlscyBweXRob24tc2hlbGwgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1jb2RlY3MiCitGSUxFU19weWJvb3RjaGFydGd1aSArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vcHlib290Y2hhcnRndWkgJHtiaW5kaXJ9L3B5Ym9vdGNoYXJ0Z3VpIgorUkRFUEVORFNfcHlib290Y2hhcnRndWkgPSAicHl0aG9uMy1weWNhaXJvIHB5dGhvbjMtY29tcHJlc3Npb24gcHl0aG9uMy1pbWFnZSBweXRob24zLXRleHR1dGlscyBweXRob24zLXNoZWxsIHB5dGhvbjMtY29tcHJlc3Npb24gcHl0aG9uMy1jb2RlY3MiCiBSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAnc3lzdmluaXQtcGlkb2YnLCAncHJvY3BzJywgZCl9IgogUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICJsc2IiCi1ERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHB5dGhvbi1weWNhaXJvLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcHl0aG9uMy1weWNhaXJvLW5hdGl2ZSIKIAogUEFDS0FHRVMgPSsgImJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IgogRklMRVNfYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgKz0gIiR7c3lzY29uZmRpcn0vaW5pdC5kICR7c3lzY29uZmRpcn0vcmMqLmQiCitSREVQRU5EU19ib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCA9ICIke1BOfSIKIAogRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC9ib290Y2hhcnQtY29sbGVjdG9yIgogRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC90bXBmcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXN5bWxpbmstY3JlYXRpb24tbXVsdGlwbGUtdGltZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzL2ZpeC1zeW1saW5rLWNyZWF0aW9uLW11bHRpcGxlLXRpbWVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTQ1NDk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXN5bWxpbmstY3JlYXRpb24tbXVsdGlwbGUtdGltZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1Gcm9tIDA1YWI3OGU5MTgzNTc1ZTM4ZjM0MmUwNWEwNTZjYjdiY2QxZTUyZTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUaHUsIDE4IEZlYiAyMDE2IDIwOjQxOjI4IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0hdIGJ0cmZzLXByb2dzOiBmaXggc3ltbGluayBjcmVhdGlvbiBtdWx0aXBsZSB0aW1lcwotCi1UaGUgcnVsZSB0byBjcmVhdGUgc3ltbGluayBpbiBNYWtlZmlsZSBjYXVzZWQgcGFyYWxsZWwgaXNzdWU6Ci0kIG1ha2UgLWogNDAgREVTVERJUj0vaW1hZ2UgaW5zdGFsbCBCVUlMRF9WRVJCT1NFPTEKLS4uLgotICAxICAgICBbTE5dICAgICBsaWJidHJmcy5zby4wCi0gIDIgICAgIFtMTl0gICAgIGxpYmJ0cmZzLnNvCi0gIDMgbG4gLXMgLWYgbGliYnRyZnMuc28uMC4xIGxpYmJ0cmZzLnNvLjAKLSAgNCBsbiAtcyAtZiBsaWJidHJmcy5zby4wLjEgbGliYnRyZnMuc28uMAotICA1IGxuIC1zIC1mIGxpYmJ0cmZzLnNvLjAuMSBsaWJidHJmcy5zbwotICA2IGxuIC1zIC1mIGxpYmJ0cmZzLnNvLjAuMSBsaWJidHJmcy5zbwotLi4uCi0KLUl0IGZhaWxlZCBvY2Nhc2lvbmFsbHk6Ci0uLi4KLXxzeW1saW5rYXQ6IGNvdWxkbid0IHN0YXQgJ2dpdC9saWJidHJmcy5zbycgZXZlbiB0aG91Z2ggc3ltbGluawotY3JlYXRpb24gc3VjY2VlZGVkIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KS4KLXxsbjogZmFpbGVkIHRvIGNyZWF0ZSBzeW1ib2xpYyBsaW5rICdsaWJidHJmcy5zbyc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLS4uLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbbGludXgtYnRyZnNAdmdlci5rZXJuZWwub3JnXQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gTWFrZWZpbGUuaW4gfCAzICstLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IDFmNDAwMmUuLjE2ZWVhZjkgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5pbgotKysrIGIvTWFrZWZpbGUuaW4KLUBAIC0yMzYsOCArMjM2LDcgQEAgJChsaWJzX3N0YXRpYyk6ICQobGliYnRyZnNfb2JqZWN0cykKLSAKLSAkKGxpYl9saW5rcyk6Ci0gCUBlY2hvICIgICAgW0xOXSAgICAgJEAiCi0tCSQoUSkkKExOX1MpIC1mIGxpYmJ0cmZzLnNvLjAuMSBsaWJidHJmcy5zby4wCi0tCSQoUSkkKExOX1MpIC1mIGxpYmJ0cmZzLnNvLjAuMSBsaWJidHJmcy5zbwotKwkkKFEpJChMTl9TKSAtZiBsaWJidHJmcy5zby4wLjEgJEAKLSAKLSAjIGtlZXAgaW50ZXJtZWRpYXRlIGZpbGVzIGZyb20gdGhlIGJlbG93IGltcGxpY2l0IHJ1bGVzIGFyb3VuZAotIC5QUkVDSU9VUzogJChhZGRzdWZmaXggLm8sJChwcm9ncykpCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHNfNC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTdiYWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1TVU1NQVJZID0gIkNoZWNrc3VtbWluZyBDb3B5IG9uIFdyaXRlIEZpbGVzeXN0ZW0gdXRpbGl0aWVzIgotREVTQ1JJUFRJT04gPSAiQnRyZnMgaXMgYSBuZXcgY29weSBvbiB3cml0ZSBmaWxlc3lzdGVtIGZvciBMaW51eCBhaW1lZCBhdCBcCi1pbXBsZW1lbnRpbmcgYWR2YW5jZWQgZmVhdHVyZXMgd2hpbGUgZm9jdXNpbmcgb24gZmF1bHQgdG9sZXJhbmNlLCByZXBhaXIgYW5kIFwKLWVhc3kgYWRtaW5pc3RyYXRpb24uIFwKLVRoaXMgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgKG1rZnMsIGZzY2ssIGJ0cmZzY3RsKSB1c2VkIHRvIHdvcmsgd2l0aCBcCi1idHJmcyBhbmQgYW4gdXRpbGl0eSAoYnRyZnMtY29udmVydCkgdG8gbWFrZSBhIGJ0cmZzIGZpbGVzeXN0ZW0gZnJvbSBhbiBleHQzLiIKLQotSE9NRVBBR0UgPSAiaHR0cHM6Ly9idHJmcy53aWtpLmtlcm5lbC5vcmciCi0KLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mY2IwMmRjNTUyYTA0MWRlZTI3ZTRiODVjNzM5NjA2NyIKLVNFQ1RJT04gPSAiYmFzZSIKLURFUEVORFMgPSAidXRpbC1saW51eCBhdHRyIGUyZnNwcm9ncyBsem8gYWNsIgotUkRFUEVORFNfJHtQTn0gPSAibGliZ2NjIgotCi1TUkNSRVYgPSAiMjEyNThmYWIyY2FlYWRlNDA1YTE1YmE5MzJkMzczYjM2NGFhNmU4YyIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2tkYXZlL2J0cmZzLXByb2dzLmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LXN5bWxpbmstY3JlYXRpb24tbXVsdGlwbGUtdGltZXMucGF0Y2ggXAotIgotCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCi0KLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24iCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLS1kaXNhYmxlLWJhY2t0cmFjZSAiCi0KLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgICBzaCBhdXRvZ2VuLnNoCi19Ci0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjcuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHNfNC43LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjZjA5MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHNfNC43LjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJDaGVja3N1bW1pbmcgQ29weSBvbiBXcml0ZSBGaWxlc3lzdGVtIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIkJ0cmZzIGlzIGEgbmV3IGNvcHkgb24gd3JpdGUgZmlsZXN5c3RlbSBmb3IgTGludXggYWltZWQgYXQgXAoraW1wbGVtZW50aW5nIGFkdmFuY2VkIGZlYXR1cmVzIHdoaWxlIGZvY3VzaW5nIG9uIGZhdWx0IHRvbGVyYW5jZSwgcmVwYWlyIGFuZCBcCitlYXN5IGFkbWluaXN0cmF0aW9uLiBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0aWVzIChta2ZzLCBmc2NrLCBidHJmc2N0bCkgdXNlZCB0byB3b3JrIHdpdGggXAorYnRyZnMgYW5kIGFuIHV0aWxpdHkgKGJ0cmZzLWNvbnZlcnQpIHRvIG1ha2UgYSBidHJmcyBmaWxlc3lzdGVtIGZyb20gYW4gZXh0My4iCisKK0hPTUVQQUdFID0gImh0dHBzOi8vYnRyZnMud2lraS5rZXJuZWwub3JnIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjciCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gInV0aWwtbGludXggYXR0ciBlMmZzcHJvZ3MgbHpvIGFjbCIKK1JERVBFTkRTXyR7UE59ID0gImxpYmdjYyIKKworU1JDUkVWID0gIjY4MTlmYmNkY2FiNjNjMmQ5NWRhMWEyOTk3ZTM3YmU5YTcxY2E1MzMiCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rZGF2ZS9idHJmcy1wcm9ncy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLnBhdGNoIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLW11c2wgPSAiIC0tZGlzYWJsZS1iYWNrdHJhY2UgIgorCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgc2ggYXV0b2dlbi5zaAorfQorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYgppbmRleCA2NzZmMTFkLi5mYTljNmI0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2J1aWxkLWNvbXBhcmVfZ2l0LmJiCkBAIC05LDYgKzksMTIgQEAKICAgICAgICAgICAgZmlsZTovL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2g7c3RyaXBsZXZlbD0xIFwKICAgICAgICAgICAgZmlsZTovL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaDtzdHJpcGxldmVsPTEgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Z1bmN0aW9ucy5zaC1yZW1vdmUtc3BhY2UtYXQtaGVhZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdW5jdGlvbnMuc2gtcnVuLXJwbS1vbmNlLXRvLW1ha2UtaXQtZmFzdGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BrZy1kaWZmLnNoLWNoZWNrLWZvci1maWZvLW5hbWVkLXBpcGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGtnLWRpZmYuc2gtY2hlY2tfc2luZ2xlX2ZpbGUtcmV0dXJuLWF0LW9uY2Utd2hlbi1zYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2ctZGlmZi5zaC1yZW1vdmUtc3BhY2UtaW4tdGhlLWVuZC1mb3ItZnR5cGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnNoLWltcHJvdmUtZGViLWFuZC1pcGstY2hlY2tpbmcucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ1JFViA9ICJjNTM1MmMwNTRjNmVmMTU3MzVkYTMxYjc2ZDZkODg2MjBmNGFmZjBhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzLzAwMDEtQWRkLXN1cHBvcnQtZm9yLWRlYi1hbmQtaXBrLXBhY2thZ2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2gKaW5kZXggNWMxNTIxOC4uODJmZDgxNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzLzAwMDEtQWRkLXN1cHBvcnQtZm9yLWRlYi1hbmQtaXBrLXBhY2thZ2luZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoCkBAIC0zLDcgKzMsNyBAQAogRGF0ZTogVHVlLCAxIFNlcCAyMDE1IDEyOjA0OjMzICswMTAwCiBTdWJqZWN0OiBbUEFUQ0hdIEFkZCBzdXBwb3J0IGZvciBkZWIgYW5kIGlwayBwYWNrYWdpbmcKIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUvcHVsbC8xMF0KIAogU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CiAtLS0KQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgcmV0dXJuICRSRVMKICB9CiArCi0rZnVuY3Rpb24gYWRqdXN0X2NvbnRyb2xmaWxlICgpIHsKKytmdW5jdGlvbiBhZGp1c3RfY29udHJvbGZpbGUoKSB7CiArICAgIGNhdCAkMS9jb250cm9sIHwgc2VkICcvXlZlcnNpb246IC9kJyA+ICQxL2NvbnRyb2wuZml4ZWQKICsgICAgbXYgJDEvY29udHJvbC5maXhlZCAkMS9jb250cm9sCiArICAgIGNhdCAkMi9jb250cm9sIHwgc2VkICcvXlZlcnNpb246IC9kJyA+ICQyL2NvbnRyb2wuZml4ZWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9mdW5jdGlvbnMuc2gtaW1wcm92ZS1kZWItYW5kLWlway1jaGVja2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9mdW5jdGlvbnMuc2gtaW1wcm92ZS1kZWItYW5kLWlway1jaGVja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQyMGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL2Z1bmN0aW9ucy5zaC1pbXByb3ZlLWRlYi1hbmQtaXBrLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsMTE3IEBACitGcm9tIGI0ZWI3ZmRlMTAzMTgxNjJiZDJkMDJiOTAxN2VmNTE3NDY3NTJhOTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTQgSnVsIDIwMTYgMjM6MTQ6MjEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIGZ1bmN0aW9ucy5zaDogaW1wcm92ZSBkZWIgYW5kIGlwayBjaGVja2luZworCisqIFRoZSBkZWIgYW5kIGlwaydzIGRlcGVuZHMgdmVyc2lvbiBzdHJpbmcgaXMgbGlrZToKKyAgRGVwZW5kczogbGliYzYgKD49IDIuMjQpCisgIFVwZGF0ZSB0cmltX3JlbGVhc2Vfb2xkIGFuZCB0cmltX3JlbGVhc2VfbmV3IHRvIG1hdGNoIHRoZSBicmFja2V0IGluCisgIHRoZSBlbmQgIikiLgorCisqIFRoZSBkZWIncyBkYXRhIHRhcmJhbGwgbm93IGlzIC50YXIueHosIGFuZCBpcGsncyBpcyAudGFyLmd6LgorCisqIFVwZGF0ZSBhZGp1c3RfY29udHJvbGZpbGUoKSB0byBtYWtlIGl0dXNlIHRyaW1fcmVsZWFzZV9vbGQgYW5kCisgIHRyaW1fcmVsZWFzZV9uZXcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZS9wdWxsLzEwXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGZ1bmN0aW9ucy5zaCB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Z1bmN0aW9ucy5zaCBiL2Z1bmN0aW9ucy5zaAoraW5kZXggYWE1NzJmOS4uZmU0OTNiYSAxMDA3NTUKKy0tLSBhL2Z1bmN0aW9ucy5zaAorKysrIGIvZnVuY3Rpb25zLnNoCitAQCAtNzgsNyArNzgsNyBAQCBjaGVja19oZWFkZXIoKQorIGZ1bmN0aW9uIHRyaW1fcmVsZWFzZV9vbGQoKQorIHsKKyAgIHNlZCAtZSAiCistICAvXChcL2Jvb3RcfFwvbGliXC9tb2R1bGVzXHxcL2xpYlwvZmlybXdhcmVcfFwvdXNyXC9zcmNcfCR2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X2xcJFwpL3tzLCR2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X2wsQFZFUlNJT05ALUBSRUxFQVNFX0xPTkdALGc7cywkdmVyc2lvbl9yZWxlYXNlX29sZF9yZWdleF9zLEBWRVJTSU9OQC1AUkVMRUFTRV9TSE9SVEAsZ30KKysgIC9cKFwvYm9vdFx8XC9saWJcL21vZHVsZXNcfFwvbGliXC9maXJtd2FyZVx8XC91c3JcL3NyY1x8JHZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfbFwkXHwkdmVyc2lvbl9yZWxlYXNlX29sZF9yZWdleF9sKVwpL3tzLCR2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X2wsQFZFUlNJT05ALUBSRUxFQVNFX0xPTkdALGc7cywkdmVyc2lvbl9yZWxlYXNlX29sZF9yZWdleF9zLEBWRVJTSU9OQC1AUkVMRUFTRV9TSE9SVEAsZ30KKyAgIHMvXChcL3ZhclwvYWRtXC91cGRhdGUtc2NyaXB0c1wvXCkke25hbWVfdmVyX3JlbF9vbGRfcmVnZXhfbH1cKFteWzpibGFuazpdXVwrXCkvXDFATkFNRV9WRVJfUkVMQFwyL2cKKyAgIHMvXiAqLy9nCisgICAiCitAQCAtODYsNyArODYsNyBAQCBmdW5jdGlvbiB0cmltX3JlbGVhc2Vfb2xkKCkKKyBmdW5jdGlvbiB0cmltX3JlbGVhc2VfbmV3KCkKKyB7CisgICBzZWQgLWUgIgorLSAgL1woXC9ib290XHxcL2xpYlwvbW9kdWxlc1x8XC9saWJcL2Zpcm13YXJlXHxcL3Vzclwvc3JjXHwkdmVyc2lvbl9yZWxlYXNlX25ld19yZWdleF9sXCRcKS97cywkdmVyc2lvbl9yZWxlYXNlX25ld19yZWdleF9sLEBWRVJTSU9OQC1AUkVMRUFTRV9MT05HQCxnO3MsJHZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfcyxAVkVSU0lPTkAtQFJFTEVBU0VfU0hPUlRALGd9CisrICAvXChcL2Jvb3RcfFwvbGliXC9tb2R1bGVzXHxcL2xpYlwvZmlybXdhcmVcfFwvdXNyXC9zcmNcfCR2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X2xcJFx8JHZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfbClcKS97cywkdmVyc2lvbl9yZWxlYXNlX25ld19yZWdleF9sLEBWRVJTSU9OQC1AUkVMRUFTRV9MT05HQCxnO3MsJHZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfcyxAVkVSU0lPTkAtQFJFTEVBU0VfU0hPUlRALGd9CisgICBzL1woXC92YXJcL2FkbVwvdXBkYXRlLXNjcmlwdHNcL1wpJHtuYW1lX3Zlcl9yZWxfbmV3X3JlZ2V4X2x9XChbXls6Ymxhbms6XV1cK1wpL1wxQE5BTUVfVkVSX1JFTEBcMi9nCisgICBzL14gKi8vZworICAgIgorQEAgLTEzMyw4ICsxMzMsOCBAQCBmdW5jdGlvbiB1bnBhY2thZ2UoKQorICAgICAgICAgICAgIGFyIHggJGZpbGUKKyAgICAgICAgICAgICB0YXIgeGYgY29udHJvbC50YXIuZ3oKKyAgICAgICAgICAgICBybSBjb250cm9sLnRhci5negorLSAgICAgICAgICAgIHRhciB4ZiBkYXRhLnRhci5negorLSAgICAgICAgICAgIHJtIGRhdGEudGFyLmd6CisrICAgICAgICAgICAgdGFyIHhmIGRhdGEudGFyLlt4Z116CisrICAgICAgICAgICAgcm0gZGF0YS50YXIuW3hnXXoKKyAgICAgICAgICAgICA7OworICAgICBlc2FjCisgICAgIHBvcGQgMT4vZGV2L251bGwKK0BAIC0xNjQsNiArMTY0LDIyIEBAIGZ1bmN0aW9uIGdldF92YWx1ZSgpCisgICAgIHNlZCAtbiAtZSAiL15fX18kezF9X19fLywvXl9fXyR7MX1fX18vcCIgJDIgfCBzZWQgLWUgIi9eX19fJHsxfV9fXy9kIgorIH0KKyAKKysjIFNldCB2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3MsIHZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfbCBhbmQKKysjIG5hbWVfdmVyX3JlbF9vbGRfcmVnZXhfbCwgYWxzbyB0aGUgbmV3IG9uZXMuCisrZnVuY3Rpb24gc2V0X3JlZ2V4KCkgeworKyAgICAjIFJlbWVtYmVyIHRvIHF1b3RlIHRoZSAuIHdoaWNoIGlzIGluIHJlbGVhc2UKKysgICAgIyBTaG9ydCB2ZXJzaW9uIHdpdGhvdXQgQl9DTgorKyAgICB2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3M9JHt2ZXJzaW9uX3JlbGVhc2Vfb2xkJS4qfQorKyAgICB2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3M9JHt2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3MvLy4vXFwufQorKyAgICB2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X3M9JHt2ZXJzaW9uX3JlbGVhc2VfbmV3JS4qfQorKyAgICB2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X3M9JHt2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X3MvLy4vXFwufQorKyAgICAjIExvbmcgdmVyc2lvbiB3aXRoIEJfQ05UCisrICAgIHZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfbD0ke3ZlcnNpb25fcmVsZWFzZV9vbGQvLy4vXFwufQorKyAgICB2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X2w9JHt2ZXJzaW9uX3JlbGVhc2VfbmV3Ly8uL1xcLn0KKysgICAgbmFtZV92ZXJfcmVsX29sZF9yZWdleF9sPSR7bmFtZV92ZXJfcmVsX29sZC8vLi9cXC59CisrICAgIG5hbWVfdmVyX3JlbF9uZXdfcmVnZXhfbD0ke25hbWVfdmVyX3JlbF9uZXcvLy4vXFwufQorK30KKysKKyAjIENvbXBhcmUganVzdCB0aGUgcnBtIG1ldGEgZGF0YSBvZiB0d28gcnBtcworICMgUmV0dXJuczoKKyAjIDAgaW4gY2FzZSBvZiBzYW1lIGNvbnRlbnQKK0BAIC0xOTQsMTcgKzIxMCw3IEBAIGZ1bmN0aW9uIGNtcF9zcGVjICgpCisgICAgIHZlcnNpb25fcmVsZWFzZV9vbGQ9IiQoZ2V0X3ZhbHVlIFFGX1ZFUl9SRUwgJHNwZWNfb2xkKSIKKyAgICAgbmFtZV92ZXJfcmVsX29sZD0iJChnZXRfdmFsdWUgUUZfTkFNRV9WRVJfUkVMICRzcGVjX29sZCkiCisgCistICAgICMgUmVtZW1iZXIgdG8gcXVvdGUgdGhlIC4gd2hpY2ggaXMgaW4gcmVsZWFzZQorLSAgICAjIFNob3J0IHZlcnNpb24gd2l0aG91dCBCX0NOCistICAgIHZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfcz0ke3ZlcnNpb25fcmVsZWFzZV9vbGQlLip9CistICAgIHZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfcz0ke3ZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfcy8vLi9cXC59CistICAgIHZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfcz0ke3ZlcnNpb25fcmVsZWFzZV9uZXclLip9CistICAgIHZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfcz0ke3ZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfcy8vLi9cXC59CistICAgICMgTG9uZyB2ZXJzaW9uIHdpdGggQl9DTlQKKy0gICAgdmVyc2lvbl9yZWxlYXNlX29sZF9yZWdleF9sPSR7dmVyc2lvbl9yZWxlYXNlX29sZC8vLi9cXC59CistICAgIHZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfbD0ke3ZlcnNpb25fcmVsZWFzZV9uZXcvLy4vXFwufQorLSAgICBuYW1lX3Zlcl9yZWxfb2xkX3JlZ2V4X2w9JHtuYW1lX3Zlcl9yZWxfb2xkLy8uL1xcLn0KKy0gICAgbmFtZV92ZXJfcmVsX25ld19yZWdleF9sPSR7bmFtZV92ZXJfcmVsX25ldy8vLi9cXC59CisrICAgIHNldF9yZWdleAorIAorICAgICAjIENoZWNrIHRoZSB3aG9sZSBzcGVjIGZpbGUgYXQgZmlyc3QsIHJldHVybiAwIGltbWVkaWF0ZWx5IGlmIHRoZQorICAgICAjIGFyZSB0aGUgc2FtZS4KK0BAIC0yODUsOSArMjkxLDE0IEBAIGZ1bmN0aW9uIGNtcF9zcGVjICgpCisgfQorIAorIGZ1bmN0aW9uIGFkanVzdF9jb250cm9sZmlsZSgpIHsKKy0gICAgY2F0ICQxL2NvbnRyb2wgfCBzZWQgJy9eVmVyc2lvbjogL2QnID4gJDEvY29udHJvbC5maXhlZAorKyAgICB2ZXJzaW9uX3JlbGVhc2Vfb2xkPSJgc2VkIC1uZSAncy9eVmVyc2lvbjogXCguKlwpL1wxL3AnICQxL2NvbnRyb2xgIgorKyAgICBuYW1lX3Zlcl9yZWxfb2xkPSJgc2VkIC1uIC1lICdzL15QYWNrYWdlOiBcKC4qXCkvXDEvcCcgJDEvY29udHJvbGAtYHNlZCAtbiAtZSAncy9eVmVyc2lvbjogXCguKlwpL1wxL3AnICQxL2NvbnRyb2xgIgorKyAgICB2ZXJzaW9uX3JlbGVhc2VfbmV3PSJgc2VkIC1uZSAncy9eVmVyc2lvbjogXCguKlwpL1wxL3AnICQyL2NvbnRyb2xgIgorKyAgICBuYW1lX3Zlcl9yZWxfbmV3PSJgc2VkIC1uIC1lICdzL15QYWNrYWdlOiBcKC4qXCkvXDEvcCcgJDIvY29udHJvbGAtYHNlZCAtbiAtZSAncy9eVmVyc2lvbjogXCguKlwpL1wxL3AnICQyL2NvbnRyb2xgIgorKyAgICBzZXRfcmVnZXgKKysgICAgY2F0ICQxL2NvbnRyb2wgfCB0cmltX3JlbGVhc2Vfb2xkID4gJDEvY29udHJvbC5maXhlZAorICAgICBtdiAkMS9jb250cm9sLmZpeGVkICQxL2NvbnRyb2wKKy0gICAgY2F0ICQyL2NvbnRyb2wgfCBzZWQgJy9eVmVyc2lvbjogL2QnID4gJDIvY29udHJvbC5maXhlZAorKyAgICBjYXQgJDIvY29udHJvbCB8IHRyaW1fcmVsZWFzZV9uZXcgPiAkMi9jb250cm9sLmZpeGVkCisgICAgIG12ICQyL2NvbnRyb2wuZml4ZWQgJDIvY29udHJvbAorIH0KKyAKKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL2Z1bmN0aW9ucy5zaC1yZW1vdmUtc3BhY2UtYXQtaGVhZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9mdW5jdGlvbnMuc2gtcmVtb3ZlLXNwYWNlLWF0LWhlYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlOTZiYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9mdW5jdGlvbnMuc2gtcmVtb3ZlLXNwYWNlLWF0LWhlYWQucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA0MDJhODIxZTYwNGYyODBlNjJjMzRiZjRkNDBjNmQxYjRjNmM4OTJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDQgSnVsIDIwMTYgMjA6MTE6MzMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZnVuY3Rpb25zLnNoOiByZW1vdmUgc3BhY2UgYXQgaGVhZAorCitUaGUgY29tbWFuZCBsaWtlOgorcnBtIC1xcCAtLW5vZGlnZXN0IC0tbm9zaWduYXR1cmUgLS1xZiAnPGZvbz4gWyV7UkVRVUlSRU5BTUV9XG5dXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5ec3BhY2UKKworVGhlIHNwYWNlIHdpbGwgYmUgcHJpbnRlZCwgYW5kIHdpbGwgaW1wYWN0IHRoZSBjaGVjayByZXN1bHQsIHNvIHJlbW92ZSBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9idWlsZC1jb21wYXJlL3B1bGwvOV0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBmdW5jdGlvbnMuc2ggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZnVuY3Rpb25zLnNoIGIvZnVuY3Rpb25zLnNoCitpbmRleCA4NWM5MDAzLi5iMTA2OWQyIDEwMDY0NAorLS0tIGEvZnVuY3Rpb25zLnNoCisrKysgYi9mdW5jdGlvbnMuc2gKK0BAIC0yNiw2ICsyNiw3IEBAIGZ1bmN0aW9uIHRyaW1fcmVsZWFzZV9vbGQoKQorICAgc2VkIC1lICIKKyAgIC9cKFwvYm9vdFx8XC9saWJcL21vZHVsZXNcfFwvbGliXC9maXJtd2FyZVx8XC91c3JcL3NyY1x8JHZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfbFwkXCkve3MsJHZlcnNpb25fcmVsZWFzZV9vbGRfcmVnZXhfbCxAVkVSU0lPTkAtQFJFTEVBU0VfTE9OR0AsZztzLCR2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3MsQFZFUlNJT05ALUBSRUxFQVNFX1NIT1JUQCxnfQorICAgcy9cKFwvdmFyXC9hZG1cL3VwZGF0ZS1zY3JpcHRzXC9cKSR7bmFtZV92ZXJfcmVsX29sZF9yZWdleF9sfVwoW15bOmJsYW5rOl1dXCtcKS9cMUBOQU1FX1ZFUl9SRUxAXDIvZworKyAgcy9eICovL2cKKyAgICIKKyB9CisgZnVuY3Rpb24gdHJpbV9yZWxlYXNlX25ldygpCitAQCAtMzMsNiArMzQsNyBAQCBmdW5jdGlvbiB0cmltX3JlbGVhc2VfbmV3KCkKKyAgIHNlZCAtZSAiCisgICAvXChcL2Jvb3RcfFwvbGliXC9tb2R1bGVzXHxcL2xpYlwvZmlybXdhcmVcfFwvdXNyXC9zcmNcfCR2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X2xcJFwpL3tzLCR2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X2wsQFZFUlNJT05ALUBSRUxFQVNFX0xPTkdALGc7cywkdmVyc2lvbl9yZWxlYXNlX25ld19yZWdleF9zLEBWRVJTSU9OQC1AUkVMRUFTRV9TSE9SVEAsZ30KKyAgIHMvXChcL3ZhclwvYWRtXC91cGRhdGUtc2NyaXB0c1wvXCkke25hbWVfdmVyX3JlbF9uZXdfcmVnZXhfbH1cKFteWzpibGFuazpdXVwrXCkvXDFATkFNRV9WRVJfUkVMQFwyL2cKKysgIHMvXiAqLy9nCisgICAiCisgfQorICMgR2V0IHNpbmdsZSBkaXJlY3Rvcnkgb3IgZmlsZW5hbWUgd2l0aCBsb25nIG9yIHNob3J0IHJlbGVhc2Ugc3RyaW5nCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9mdW5jdGlvbnMuc2gtcnVuLXJwbS1vbmNlLXRvLW1ha2UtaXQtZmFzdGVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL2Z1bmN0aW9ucy5zaC1ydW4tcnBtLW9uY2UtdG8tbWFrZS1pdC1mYXN0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViOTlkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9mdW5jdGlvbnMuc2gtcnVuLXJwbS1vbmNlLXRvLW1ha2UtaXQtZmFzdGVyLnBhdGNoCkBAIC0wLDAgKzEsMzYxIEBACitGcm9tIGYzNGQ2MzJjNDI3YjFlMTU3MGVmOTEzNjQ1NGZjMDFkOGM5ZjEwYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgNyBKdWwgMjAxNiAxOTozNDowOSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBmdW5jdGlvbnMuc2g6IHJ1biBycG0gb25jZSB0byBtYWtlIGl0IGZhc3RlcgorCitUaGUgcnBtIHRvb2wgaXMgYSBoZWF2eSBwcm9jZXNzLCBpdCByYW4gMTYgKG9yIDE3IGZvciBrZXJuZWwpCisicnBtIC1xcCIgdGltZXMgd2hlbiB0aGUgcGtncyBhcmUgaWRlbnRpY2FsLCBub3cgd2Ugb25seSBydW4KKyJycG0gLXFwIC0tcWYgPGFsbCB3ZSBuZWVkPiIgdHdpY2UgKG9uZSBpcyBmb3Igb2xkIHBrZywgYW5kIG9uZSBpcyBmb3IKK25ldyksIHNhdmUgdGhlIHJlc3VsdHMgdG8gc3BlY19vbGQgYW5kIHNwZWNfbmV3LCB0aGVuIHVzZSBzZWQgY29tbWFuZCB0bworZ2V0IHdoYXQgd2UgbmVlZCBsYXRlciwgdGhpcyBjYW4gbWFrZSBpdCA3NSUgZmFzdGVyIHdoZW4gdGhlIHBrZ3MgYXJlCitpZGVudGljYWwuIEhlcmUgaXMgdGhlIHJvdWdoIGRhdGEgb24gbXkgaG9zdCBVYnVudHUgMTQuMDQuNCwgMzIgY29yZXMKK0NQVSBhbmQgMTI4RyBtZW06CisqIFdoZW4gdGhlIHBrZ3MgYXJlIGlkZW50aWNhbDoKKyAgLSBCZWZvcmUgdGhlIHBhdGNoOiAxcworICAtIEFmdGVyIHRoZSBwYXRjaDogMC4yNnMKKyAgSSBjb21wYXJlIHRoZSB3aG9sZSBzcGVjIGZpcnN0bHksIGFuZCByZXR1cm4gMCBpZiB0aGV5IGFyZSB0aGUgc2FtZSwKKyAgb3IgZ28gb24gY2hlY2tpbmcgb25lIGJ5IG9uZSBpZiBub3QsIHdpdGhvdXQgdGhpcywgaXQgd291bGQgYmUgMC40NnMsCisgIHRoZSBnYWluIGlzIGdyZWF0IHdoZW4gdGhlcmUgYXJlIGxvdCBvZiBwYWNrYWdlcywgdXN1YWxseSwgd2UgaGF2ZQorICBtb3JlIHRoYW4gMTAsMDAwIHJwbXMgdG8gY29tcGFyZS4KKworKiBXaGVuIHRoZSBwa2dzIGFyZSBkaWZmZXJlbnQ6CisgIFRoYXQgZGVwZW5kcyBvbiB3aGVyZSBpcyB0aGUgZGlmZmVyZW50LCBpZiB0aGUgZGlmZmVyZW50IGlzIGF0IHRoZQorICBjb21wYXJpbmcgcnBtdGFncyBzdGFnZToKKyAgLSBCZWZvcmUgdGhlIHBhdGNoOiAwLjI2cworICAtIEFmdGVyIHRoZSBwYXRjaDogMC4yOXMKKyAgSW5jcmVhc2VkIDAuMDNzLCBidXQgaWYgdGhlIGRpZmZlcmVudCBpcyBoYXBwZW5kIGxhdGVyIHRoYW4gY29tcGFyaW5nCisgIHJwbXRhZ3MsIGl0IHdpbGwgc2F2ZSB0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUvcHVsbC85XQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGZ1bmN0aW9ucy5zaCB8IDI0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMTEzIGRlbGV0aW9ucygtKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZnVuY3Rpb25zLnNoCisKK2RpZmYgLS1naXQgYS9mdW5jdGlvbnMuc2ggYi9mdW5jdGlvbnMuc2gKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBiMTA2OWQyLi5hYTU3MmY5CistLS0gYS9mdW5jdGlvbnMuc2gKKysrKyBiL2Z1bmN0aW9ucy5zaAorQEAgLTEwLDkgKzEwLDYzIEBACisgCisgUlBNPSJycG0gLXFwIC0tbm9kaWdlc3QgLS1ub3NpZ25hdHVyZSIKKyAKKy1jaGVja19oZWFkZXIoKSAKKysjIE5hbWUsIFZlcnNpb24sIFJlbGVhc2UKKytRRl9OQU1FPSIle05BTUV9IgorK1FGX1ZFUl9SRUw9IiV7VkVSU0lPTn0tJXtSRUxFQVNFfSIKKytRRl9OQU1FX1ZFUl9SRUw9IiV7TkFNRX0tJXtWRVJTSU9OfS0le1JFTEVBU0V9IgorKworKyMgcHJvdmlkZXMgZGVzdHJveSB0aGlzIGJlY2F1c2UgYXQgbGVhc3QgdGhlIHNlbGYtcHJvdmlkZSBpbmNsdWRlcyB0aGUKKysjIC1idWlsZG51bWJlciA6LSgKKytRRl9QUk9WSURFUz0iWyV7UFJPVklERU5BTUV9ICV7UFJPVklERUZMQUdTfSAle1BST1ZJREVWRVJTSU9OfVxcbl1cXG4iCisrUUZfUFJPVklERVM9IiRRRl9QUk9WSURFUyBbJXtSRVFVSVJFTkFNRX0gJXtSRVFVSVJFRkxBR1N9ICV7UkVRVUlSRVZFUlNJT059XFxuXVxcbiIKKytRRl9QUk9WSURFUz0iJFFGX1BST1ZJREVTIFsle0NPTkZMSUNUTkFNRX0gJXtDT05GTElDVEZMQUdTfSAle0NPTkZMSUNUVkVSU0lPTn1cXG5dXFxuIgorK1FGX1BST1ZJREVTPSIkUUZfUFJPVklERVMgWyV7T0JTT0xFVEVOQU1FfSAle09CU09MRVRFRkxBR1N9ICV7T0JTT0xFVEVWRVJTSU9OfVxcbl1cXG4iCisrCisrIyBkb24ndCBsb29rIGF0IFJFTEVBU0UsIGl0IGNvbnRhaW5zIG91ciBidWlsZCBudW1iZXIKKytRRl9UQUdTPSIle05BTUV9ICV7VkVSU0lPTn0gJXtFUE9DSH1cXG4iCisrUUZfVEFHUz0iJFFGX1RBR1MgJXtTVU1NQVJZfVxcbiV7REVTQ1JJUFRJT059XFxuIgorKyMgdGhlIERJU1RVUkwgdGFnIGNhbiBiZSB1c2VkIGFzIGNoZWNraW4gSUQKKytRRl9UQUdTPSIkUUZfVEFHUyAle1ZFTkRPUn0gJXtESVNUUklCVVRJT059ICV7RElTVFVSTH0iCisrUUZfVEFHUz0iJFFGX1RBR1MgJXtMSUNFTlNFfSAle0xJQ0VOU0V9XFxuIgorK1FGX1RBR1M9IiRRRl9UQUdTICV7R1JPVVB9ICV7VVJMfSAle0VYQ0xVREVBUkNIfSAle0VYQ0xVREVPU30gJXtFWENMVVNJVkVBUkNIfVxcbiIKKytRRl9UQUdTPSIkUUZfVEFHUyAle0VYQ0xVU0lWRU9TfSAle1JQTVZFUlNJT059ICV7UExBVEZPUk19XFxuIgorK1FGX1RBR1M9IiRRRl9UQUdTICV7UEFZTE9BREZPUk1BVH0gJXtQQVlMT0FEQ09NUFJFU1NPUn0gJXtQQVlMT0FERkxBR1N9XFxuIgorKworKyMgWFhYIFdlIGFsc28gbmVlZCB0byBjaGVjayB0aGUgZXhpc3RlbmNlIChidXQgbm90IHRoZSBjb250ZW50ICghKSkKKysjIG9mIFNJR0dQRyAoYW5kIHBlcmhhcHMgdGhlIG90aGVyIFNJRyopCisrIyBYWFggV2UgZG9uJ3QgbG9vayBhdCB0cmlnZ2VycworK1FGX1RBR1M9IiRRRl9UQUdTIFsle1ZFUklGWVNDUklQVFBST0d9ICV7VkVSSUZZU0NSSVBUfV1cXG4iCisrIyBPbmx5IHRoZSBmaXJzdCBDaGFuZ2VMb2cgZW50cnk7IHNob3VsZCBiZSBlbm91Z2gKKytRRl9UQUdTPSIkUUZfVEFHUyAle0NIQU5HRUxPR1RJTUV9ICV7Q0hBTkdFTE9HTkFNRX0gJXtDSEFOR0VMT0dURVhUfVxcbiIKKysKKysjIHNjcmlwdHMsIG1pZ2h0IGNvbnRhaW4gcmVsZWFzZSBudW1iZXIKKytRRl9TQ1JJUFQ9Ilsle1BSRUlOUFJPR30gJXtQUkVJTn1cXG5dXFxuWyV7UE9TVElOUFJPR30gJXtQT1NUSU59XFxuXVxcblsle1BSRVVOUFJPR30gJXtQUkVVTn1cXG5dXFxuWyV7UE9TVFVOUFJPR30gJXtQT1NUVU59XFxuXVxcbiIKKysKKysjIE5vdyB0aGUgZmlsZXMuIFdlIGxlYXZlIG91dCBtdGltZSBhbmQgc2l6ZS4gIEZvciBub3JtYWwgZmlsZXMKKysjIHRoZSBzaXplIHdpbGwgaW5mbHVlbmNlIHRoZSBNRDUgYW55d2F5LiAgRm9yIGRpcmVjdG9yaWVzIHRoZSBzaXplcyBjYW4KKysjIGRpZmZlciwgZGVwZW5kaW5nIG9uIHdoaWNoIGZpbGUgc3lzdGVtIHRoZSBwYWNrYWdlIHdhcyBidWlsdC4gIFRvIG5vdAorKyMgaGF2ZSB0byBmaWx0ZXIgb3V0IGRpcmVjdG9yaWVzIHdlIHNpbXBseSBpZ25vcmUgYWxsIHNpemVzLgorKyMgQWxzbyBsZWF2ZSBvdXQgRklMRURFVklDRVMsIEZJTEVJTk9ERVMgKGRlcGVuZHMgb24gdGhlIGJ1aWxkIGhvc3QpLAorKyMgRklMRUNPTE9SUywgRklMRUNMQVNTIChub3JtYWxseSB1c2VmdWwgYnV0IGZpbGUgb3V0cHV0IGNvbnRhaW5zIG10aW1lcyksCisrIyBGSUxFREVQRU5EU1ggYW5kIEZJTEVERVBFTkRTTi4KKysjIEFsc28gRklMRUxBTkdTIChvcj8pCisrUUZfRklMRUxJU1Q9Ilsle0ZJTEVOQU1FU30gJXtGSUxFRkxBR1N9ICV7RklMRVNUQVRFU30gJXtGSUxFTU9ERVM6b2N0YWx9ICV7RklMRVVTRVJOQU1FfSAle0ZJTEVHUk9VUE5BTUV9ICV7RklMRVJERVZTfSAle0ZJTEVWRVJJRllGTEFHU30gJXtGSUxFTElOS1RPU31cbl1cXG4iCisrIyA/Pz8gd2hhdCB0byBkbyB3aXRoIEZJTEVQUk9WSURFIGFuZCBGSUxFUkVRVUlSRT8KKysKKytRRl9DSEVDS1NVTT0iWyV7RklMRU5BTUVTfSAle0ZJTEVNRDVTfSAle0ZJTEVGTEFHU31cbl1cXG4iCisrCisrUUZfQUxMPSJcbl9fX1FGX05BTUVfX19cbiR7UUZfTkFNRX1cbl9fX1FGX05BTUVfX19cbiIKKytRRl9BTEw9IiRRRl9BTExcbl9fX1FGX1RBR1NfX19cbiR7UUZfVEFHU31cbl9fX1FGX1RBR1NfX19cbiIKKytRRl9BTEw9IiRRRl9BTExcbl9fX1FGX1ZFUl9SRUxfX19cbiR7UUZfVkVSX1JFTH1cbl9fX1FGX1ZFUl9SRUxfX19cbiIKKytRRl9BTEw9IiRRRl9BTExcbl9fX1FGX05BTUVfVkVSX1JFTF9fX1xuJHtRRl9OQU1FX1ZFUl9SRUx9XG5fX19RRl9OQU1FX1ZFUl9SRUxfX19cbiIKKytRRl9BTEw9IiRRRl9BTExcbl9fX1FGX1BST1ZJREVTX19fXG4ke1FGX1BST1ZJREVTfVxuX19fUUZfUFJPVklERVNfX19cbiIKKytRRl9BTEw9IiRRRl9BTExcbl9fX1FGX1NDUklQVF9fX1xuJHtRRl9TQ1JJUFR9XG5fX19RRl9TQ1JJUFRfX19cbiIKKytRRl9BTEw9IiRRRl9BTExcbl9fX1FGX0ZJTEVMSVNUX19fXG4ke1FGX0ZJTEVMSVNUfVxuX19fUUZfRklMRUxJU1RfX19cbiIKKytRRl9BTEw9IiRRRl9BTExcbl9fX1FGX0NIRUNLU1VNX19fXG4ke1FGX0NIRUNLU1VNfVxuX19fUUZfQ0hFQ0tTVU1fX19cbiIKKysKKytjaGVja19oZWFkZXIoKQorIHsKKy0gICAkUlBNIC0tcWYgIiRRRiIgIiQxIgorKyAgICRSUE0gLS1xZiAiJDEiICIkMiIKKyB9CisgCisgIyBUcmltIHZlcnNpb24tcmVsZWFzZSBzdHJpbmc6CitAQCAtNDcsMTggKzEwMSw2IEBAIGZ1bmN0aW9uIGdyZXBfcmVsZWFzZV9uZXcoKQorICAgZ3JlcCAtRSAiKC9ib290fC9saWIvbW9kdWxlc3wvbGliL2Zpcm13YXJlfC91c3Ivc3JjKS9bXi9dKygke3ZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfbH0oXCR8W14vXStcJCl8JHt2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X3N9KFwkfFteL10rXCQpKSIKKyB9CisgCistZnVuY3Rpb24gY2hlY2tfcHJvdmlkZXMoKQorLXsKKy0gIGxvY2FsIHBrZz0kMQorLSAgIyBwcm92aWRlcyBkZXN0cm95IHRoaXMgYmVjYXVzZSBhdCBsZWFzdCB0aGUgc2VsZi1wcm92aWRlIGluY2x1ZGVzIHRoZQorLSAgIyAtYnVpbGRudW1iZXIgOi0oCistICBRRj0iWyV7UFJPVklERU5BTUV9ICV7UFJPVklERUZMQUdTfSAle1BST1ZJREVWRVJTSU9OfVxcbl1cXG4iCistICBRRj0iJFFGIFsle1JFUVVJUkVOQU1FfSAle1JFUVVJUkVGTEFHU30gJXtSRVFVSVJFVkVSU0lPTn1cXG5dXFxuIgorLSAgUUY9IiRRRiBbJXtDT05GTElDVE5BTUV9ICV7Q09ORkxJQ1RGTEFHU30gJXtDT05GTElDVFZFUlNJT059XFxuXVxcbiIKKy0gIFFGPSIkUUYgWyV7T0JTT0xFVEVOQU1FfSAle09CU09MRVRFRkxBR1N9ICV7T0JTT0xFVEVWRVJTSU9OfVxcbl1cXG4iCistICBjaGVja19oZWFkZXIgIiRwa2ciCistfQorLQorICN1c2FnZSB1bnBhY2thZ2UgPGZpbGU+ICRkaXIKKyAjIFVucGFjayBmaWxlcyBpbiBkaXJlY3RvcnkgJGRpcgorICMgbGlrZSAvdXNyL2Jpbi91bnBhY2thZ2UgLSBqdXN0IGZvciBvbmUgZmlsZSBhbmQgd2l0aCBubyBvcHRpb25zCitAQCAtOTgsNiArMTQwLDMwIEBAIGZ1bmN0aW9uIHVucGFja2FnZSgpCisgICAgIHBvcGQgMT4vZGV2L251bGwKKyB9CisgCisrIyBSdW4gZGlmZiBjb21tYW5kIG9uIHRoZSBmaWxlcworKyMgJDE6IHByaW50ZWQgaW5mbworKyMgJDI6IGZpbGUxCisrIyAkMzogZmlsZTIKKytmdW5jdGlvbiBjb21wX2ZpbGUoKQorK3sKKysgICAgZWNobyAiY29tcGFyaW5nICQxIgorKyAgICBpZiAhIGRpZmYgLWF1ICQyICQzOyB0aGVuCisrICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgIHJtICQyICQzICRzcGVjX29sZCAkc3BlY19uZXcKKysgICAgICAgIHJldHVybiAxCisrICAgICAgZmkKKysgICAgZmkKKysgICAgcmV0dXJuIDAKKyt9CisrCisrIyBHZXQgdmFyJ3MgdmFsdWUgZnJvbSBzcGVjZmlsZS4KKysjICQxOiB2YXIgbmFtZQorKyMgJDI6IHNwZWNmaWxlCisrZnVuY3Rpb24gZ2V0X3ZhbHVlKCkKKyt7CisrICAgIHNlZCAtbiAtZSAiL15fX18kezF9X19fLywvXl9fXyR7MX1fX18vcCIgJDIgfCBzZWQgLWUgIi9eX19fJHsxfV9fXy9kIgorK30KKysKKyAjIENvbXBhcmUganVzdCB0aGUgcnBtIG1ldGEgZGF0YSBvZiB0d28gcnBtcworICMgUmV0dXJuczoKKyAjIDAgaW4gY2FzZSBvZiBzYW1lIGNvbnRlbnQKK0BAIC0xMDcsNTYgKzE3MywyOSBAQCBmdW5jdGlvbiB1bnBhY2thZ2UoKQorIGZ1bmN0aW9uIGNtcF9zcGVjICgpCisgeworICAgICBsb2NhbCBSRVMKKy0gICAgbG9jYWwgZmlsZTEgZmlsZTIKKysgICAgbG9jYWwgZmlsZV9vbGQgZmlsZV9uZXcKKyAgICAgbG9jYWwgZgorICAgICBsb2NhbCBzaD0kMQorICAgICBsb2NhbCBvbGRycG09JDIKKyAgICAgbG9jYWwgbmV3cnBtPSQzCisgCistICAgIFFGPSIle05BTUV9IgorLSAgICAKKy0gICAgIyBkb24ndCBsb29rIGF0IFJFTEVBU0UsIGl0IGNvbnRhaW5zIG91ciBidWlsZCBudW1iZXIKKy0gICAgUUY9IiRRRiAle1ZFUlNJT059ICV7RVBPQ0h9XFxuIgorLSAgICBRRj0iJFFGICV7U1VNTUFSWX1cXG4le0RFU0NSSVBUSU9OfVxcbiIKKy0gICAgUUY9IiRRRiAle1ZFTkRPUn0gJXtESVNUUklCVVRJT059ICV7RElTVFVSTH0iCistICAgIFFGPSIkUUYgJXtMSUNFTlNFfSAle0xJQ0VOU0V9XFxuIgorLSAgICBRRj0iJFFGICV7R1JPVVB9ICV7VVJMfSAle0VYQ0xVREVBUkNIfSAle0VYQ0xVREVPU30gJXtFWENMVVNJVkVBUkNIfVxcbiIKKy0gICAgUUY9IiRRRiAle0VYQ0xVU0lWRU9TfSAle1JQTVZFUlNJT059ICV7UExBVEZPUk19XFxuIgorLSAgICBRRj0iJFFGICV7UEFZTE9BREZPUk1BVH0gJXtQQVlMT0FEQ09NUFJFU1NPUn0gJXtQQVlMT0FERkxBR1N9XFxuIgorLSAgICAKKy0gCistICAgICMgWFhYIFdlIGFsc28gbmVlZCB0byBjaGVjayB0aGUgZXhpc3RlbmNlIChidXQgbm90IHRoZSBjb250ZW50ICghKSkKKy0gICAgIyBvZiBTSUdHUEcgKGFuZCBwZXJoYXBzIHRoZSBvdGhlciBTSUcqKQorLSAgICAKKy0gICAgIyBYWFggV2UgZG9uJ3QgbG9vayBhdCB0cmlnZ2VycworLSAgICAKKy0gICAgUUY9IiRRRiBbJXtWRVJJRllTQ1JJUFRQUk9HfSAle1ZFUklGWVNDUklQVH1dXFxuIgorLSAgICAKKy0gICAgIyBPbmx5IHRoZSBmaXJzdCBDaGFuZ2VMb2cgZW50cnk7IHNob3VsZCBiZSBlbm91Z2gKKy0gICAgUUY9IiRRRiAle0NIQU5HRUxPR1RJTUV9ICV7Q0hBTkdFTE9HTkFNRX0gJXtDSEFOR0VMT0dURVhUfVxcbiIKKy0gICAgCistICAgIGZpbGUxPWBta3RlbXBgCistICAgIGZpbGUyPWBta3RlbXBgCistICAgIAorLSAgICBjaGVja19oZWFkZXIgJG9sZHJwbSA+ICRmaWxlMQorLSAgICBjaGVja19oZWFkZXIgJG5ld3JwbSA+ICRmaWxlMgorLSAgICAKKy0gICAgIyB0aGUgRElTVFVSTCB0YWcgY2FuIGJlIHVzZWQgYXMgY2hlY2tpbiBJRAorLSAgICAjZWNobyAiJFFGIgorLSAgICBlY2hvICJjb21wYXJpbmcgcnBtdGFncyIKKy0gICAgaWYgISBkaWZmIC1hdSAkZmlsZTEgJGZpbGUyOyB0aGVuCistICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgIHJtICRmaWxlMSAkZmlsZTIKKy0gICAgICAgIHJldHVybiAxCistICAgICAgZmkKKy0gICAgZmkKKy0gICAgCisrICAgIGZpbGVfb2xkPWBta3RlbXBgCisrICAgIGZpbGVfbmV3PWBta3RlbXBgCisrICAgIHNwZWNfb2xkPWBta3RlbXBgCisrICAgIHNwZWNfbmV3PWBta3RlbXBgCisrCisrICAgIGNoZWNrX2hlYWRlciAiJFFGX0FMTCIgJG9sZHJwbSA+ICRzcGVjX29sZAorKyAgICBjaGVja19oZWFkZXIgIiRRRl9BTEwiICRuZXdycG0gPiAkc3BlY19uZXcKKysKKysgICAgbmFtZV9uZXc9IiQoZ2V0X3ZhbHVlIFFGX05BTUUgJHNwZWNfbmV3KSIKKysgICAgdmVyc2lvbl9yZWxlYXNlX25ldz0iJChnZXRfdmFsdWUgUUZfVkVSX1JFTCAkc3BlY19uZXcpIgorKyAgICBuYW1lX3Zlcl9yZWxfbmV3PSIkKGdldF92YWx1ZSBRRl9OQU1FX1ZFUl9SRUwgJHNwZWNfbmV3KSIKKysKKysgICAgdmVyc2lvbl9yZWxlYXNlX29sZD0iJChnZXRfdmFsdWUgUUZfVkVSX1JFTCAkc3BlY19vbGQpIgorKyAgICBuYW1lX3Zlcl9yZWxfb2xkPSIkKGdldF92YWx1ZSBRRl9OQU1FX1ZFUl9SRUwgJHNwZWNfb2xkKSIKKysKKyAgICAgIyBSZW1lbWJlciB0byBxdW90ZSB0aGUgLiB3aGljaCBpcyBpbiByZWxlYXNlCistICAgIHZlcnNpb25fcmVsZWFzZV9vbGQ9JCgkUlBNIC0tcWYgIiV7VkVSU0lPTn0tJXtSRUxFQVNFfSIgIiRvbGRycG0iKQorLSAgICB2ZXJzaW9uX3JlbGVhc2VfbmV3PSQoJFJQTSAtLXFmICIle1ZFUlNJT059LSV7UkVMRUFTRX0iICIkbmV3cnBtIikKKy0gICAgbmFtZV92ZXJfcmVsX29sZD0kKCRSUE0gLS1xZiAiJXtOQU1FfS0le1ZFUlNJT059LSV7UkVMRUFTRX0iICIkb2xkcnBtIikKKy0gICAgbmFtZV92ZXJfcmVsX25ldz0kKCRSUE0gLS1xZiAiJXtOQU1FfS0le1ZFUlNJT059LSV7UkVMRUFTRX0iICIkbmV3cnBtIikKKy0gICAgIyBTaG9ydCB2ZXJzaW9uIHdpdGhvdXQgQl9DTlQKKysgICAgIyBTaG9ydCB2ZXJzaW9uIHdpdGhvdXQgQl9DTgorICAgICB2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3M9JHt2ZXJzaW9uX3JlbGVhc2Vfb2xkJS4qfQorICAgICB2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3M9JHt2ZXJzaW9uX3JlbGVhc2Vfb2xkX3JlZ2V4X3MvLy4vXFwufQorICAgICB2ZXJzaW9uX3JlbGVhc2VfbmV3X3JlZ2V4X3M9JHt2ZXJzaW9uX3JlbGVhc2VfbmV3JS4qfQorQEAgLTE2NiwxMCArMjA1LDI3IEBAIGZ1bmN0aW9uIGNtcF9zcGVjICgpCisgICAgIHZlcnNpb25fcmVsZWFzZV9uZXdfcmVnZXhfbD0ke3ZlcnNpb25fcmVsZWFzZV9uZXcvLy4vXFwufQorICAgICBuYW1lX3Zlcl9yZWxfb2xkX3JlZ2V4X2w9JHtuYW1lX3Zlcl9yZWxfb2xkLy8uL1xcLn0KKyAgICAgbmFtZV92ZXJfcmVsX25ld19yZWdleF9sPSR7bmFtZV92ZXJfcmVsX25ldy8vLi9cXC59CisrCisrICAgICMgQ2hlY2sgdGhlIHdob2xlIHNwZWMgZmlsZSBhdCBmaXJzdCwgcmV0dXJuIDAgaW1tZWRpYXRlbHkgaWYgdGhlCisrICAgICMgYXJlIHRoZSBzYW1lLgorKyAgICBjYXQgJHNwZWNfb2xkIHwgdHJpbV9yZWxlYXNlX29sZCA+ICRmaWxlX29sZAorKyAgICBjYXQgJHNwZWNfbmV3IHwgdHJpbV9yZWxlYXNlX25ldyA+ICRmaWxlX25ldworKyAgICBlY2hvICJjb21wYXJpbmcgdGhlIHdob2xlIHNwZWNmaWxlIgorKyAgICBpZiBkaWZmIC1hdSAkc3BlY19vbGQgJHNwZWNfbmV3OyB0aGVuCisrICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgIHJtICRmaWxlX29sZCAkZmlsZV9uZXcgJHNwZWNfb2xkICRzcGVjX25ldworKyAgICAgICAgcmV0dXJuIDAKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBnZXRfdmFsdWUgUUZfVEFHUyAkc3BlY19vbGQgPiAkZmlsZV9vbGQKKysgICAgZ2V0X3ZhbHVlIFFGX1RBR1MgJHNwZWNfbmV3ID4gJGZpbGVfbmV3CisrICAgIGNvbXBfZmlsZSBycG10YWdzICRmaWxlX29sZCAkZmlsZV9uZXcgfHwgcmV0dXJuIDEKKysKKyAgICAgIyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuPyEKKyAgICAgZWNobyAiY29tcGFyaW5nIFJFTEVBU0UiCisgICAgIGlmIFsgIiR7dmVyc2lvbl9yZWxlYXNlX29sZCUuKn0iICE9ICIke3ZlcnNpb25fcmVsZWFzZV9uZXclLip9IiBdIDsgdGhlbgorLSAgICAgIGNhc2UgJCgkUlBNIC0tcWYgJyV7TkFNRX0nICIkbmV3cnBtIikgaW4KKysgICAgICBjYXNlICRuYW1lX25ldyBpbgorICAgICAgICAga2VybmVsLSopCisgICAgICAgICAgICMgTWFrZSBzdXJlIGFsbCBrZXJuZWwgcGFja2FnZXMgaGF2ZSB0aGUgc2FtZSAlUkVMRUFTRQorICAgICAgICAgICBlY2hvICJyZWxlYXNlIHByZWZpeCBtaXNtYXRjaCIKK0BAIC0xODEsNzEgKzIzNywzNCBAQCBmdW5jdGlvbiBjbXBfc3BlYyAoKQorICAgICAgICAgKikgOzsKKyAgICAgICBlc2FjCisgICAgIGZpCistICAgIAorLSAgICBjaGVja19wcm92aWRlcyAkb2xkcnBtIHwgdHJpbV9yZWxlYXNlX29sZCB8IHNvcnQgPiAkZmlsZTEKKy0gICAgY2hlY2tfcHJvdmlkZXMgJG5ld3JwbSB8IHRyaW1fcmVsZWFzZV9uZXcgfCBzb3J0ID4gJGZpbGUyCistICAgIAorLSAgICBlY2hvICJjb21wYXJpbmcgUFJPVklERVMiCistICAgIGlmICEgZGlmZiAtYXUgJGZpbGUxICRmaWxlMjsgdGhlbgorLSAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICBybSAkZmlsZTEgJGZpbGUyCistICAgICAgICByZXR1cm4gMQorLSAgICAgIGZpCistICAgIGZpCisgCistICAgICMgc2NyaXB0cywgbWlnaHQgY29udGFpbiByZWxlYXNlIG51bWJlcgorLSAgICBRRj0iWyV7UFJFSU5QUk9HfSAle1BSRUlOfVxcbl1cXG5bJXtQT1NUSU5QUk9HfSAle1BPU1RJTn1cXG5dXFxuWyV7UFJFVU5QUk9HfSAle1BSRVVOfVxcbl1cXG5bJXtQT1NUVU5QUk9HfSAle1BPU1RVTn1cXG5dXFxuIgorLSAgICBjaGVja19oZWFkZXIgJG9sZHJwbSB8IHRyaW1fcmVsZWFzZV9vbGQgPiAkZmlsZTEKKy0gICAgY2hlY2tfaGVhZGVyICRuZXdycG0gfCB0cmltX3JlbGVhc2VfbmV3ID4gJGZpbGUyCisrICAgIGdldF92YWx1ZSBRRl9QUk9WSURFUyAkc3BlY19vbGQgfCB0cmltX3JlbGVhc2Vfb2xkIHwgc29ydCA+ICRmaWxlX29sZAorKyAgICBnZXRfdmFsdWUgUUZfUFJPVklERVMgJHNwZWNfbmV3IHwgdHJpbV9yZWxlYXNlX25ldyB8IHNvcnQgPiAkZmlsZV9uZXcKKysgICAgY29tcF9maWxlIFBST1ZJREVTICRmaWxlX29sZCAkZmlsZV9uZXcgfHwgcmV0dXJuIDEKKysKKysgICAgZ2V0X3ZhbHVlIFFGX1NDUklQVCAkc3BlY19vbGQgfCB0cmltX3JlbGVhc2Vfb2xkID4gJGZpbGVfb2xkCisrICAgIGdldF92YWx1ZSBRRl9TQ1JJUFQgJHNwZWNfbmV3IHwgdHJpbV9yZWxlYXNlX25ldyA+ICRmaWxlX25ldworKyAgICBjb21wX2ZpbGUgc2NyaXB0cyAkZmlsZV9vbGQgJGZpbGVfbmV3IHx8IHJldHVybiAxCisgCistICAgIGVjaG8gImNvbXBhcmluZyBzY3JpcHRzIgorLSAgICBpZiAhIGRpZmYgLWF1ICRmaWxlMSAkZmlsZTI7IHRoZW4KKy0gICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgcm0gJGZpbGUxICRmaWxlMgorLSAgICAgICAgcmV0dXJuIDEKKy0gICAgICBmaQorLSAgICBmaQorLSAgICAKKyAgICAgIyBGaXJzdCBjaGVjayB0aGUgZmlsZSBhdHRyaWJ1dGVzIGFuZCBsYXRlciB0aGUgbWQ1cworLSAgICAKKy0gICAgIyBOb3cgdGhlIGZpbGVzLiAgV2UgbGVhdmUgb3V0IG10aW1lIGFuZCBzaXplLiAgRm9yIG5vcm1hbCBmaWxlcworLSAgICAjIHRoZSBzaXplIHdpbGwgaW5mbHVlbmNlIHRoZSBNRDUgYW55d2F5LiAgRm9yIGRpcmVjdG9yaWVzIHRoZSBzaXplcyBjYW4KKy0gICAgIyBkaWZmZXIsIGRlcGVuZGluZyBvbiB3aGljaCBmaWxlIHN5c3RlbSB0aGUgcGFja2FnZSB3YXMgYnVpbHQuICBUbyBub3QKKy0gICAgIyBoYXZlIHRvIGZpbHRlciBvdXQgZGlyZWN0b3JpZXMgd2Ugc2ltcGx5IGlnbm9yZSBhbGwgc2l6ZXMuCistICAgICMgQWxzbyBsZWF2ZSBvdXQgRklMRURFVklDRVMsIEZJTEVJTk9ERVMgKGRlcGVuZHMgb24gdGhlIGJ1aWxkIGhvc3QpLAorLSAgICAjIEZJTEVDT0xPUlMsIEZJTEVDTEFTUyAobm9ybWFsbHkgdXNlZnVsIGJ1dCBmaWxlIG91dHB1dCBjb250YWlucyBtdGltZXMpLCAKKy0gICAgIyBGSUxFREVQRU5EU1ggYW5kIEZJTEVERVBFTkRTTi4gCistICAgICMgQWxzbyBGSUxFTEFOR1MgKG9yPykKKy0gICAgUUY9Ilsle0ZJTEVOQU1FU30gJXtGSUxFRkxBR1N9ICV7RklMRVNUQVRFU30gJXtGSUxFTU9ERVM6b2N0YWx9ICV7RklMRVVTRVJOQU1FfSAle0ZJTEVHUk9VUE5BTUV9ICV7RklMRVJERVZTfSAle0ZJTEVWRVJJRllGTEFHU30gJXtGSUxFTElOS1RPU31cbl1cXG4iCistICAgICMgPz8/IHdoYXQgdG8gZG8gd2l0aCBGSUxFUFJPVklERSBhbmQgRklMRVJFUVVJUkU/CistCistICAgIGNoZWNrX2hlYWRlciAkb2xkcnBtIHwgdHJpbV9yZWxlYXNlX29sZCA+ICRmaWxlMQorLSAgICBjaGVja19oZWFkZXIgJG5ld3JwbSB8IHRyaW1fcmVsZWFzZV9uZXcgPiAkZmlsZTIKKy0gICAgCistICAgIGVjaG8gImNvbXBhcmluZyBmaWxlbGlzdCIKKy0gICAgaWYgISBkaWZmIC1hdSAkZmlsZTEgJGZpbGUyOyB0aGVuCistICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgIHJtICRmaWxlMSAkZmlsZTIKKy0gICAgICAgIHJldHVybiAxCistICAgICAgZmkKKy0gICAgZmkKKy0gICAgCisrICAgIGdldF92YWx1ZSBRRl9GSUxFTElTVCAkc3BlY19vbGQgfCB0cmltX3JlbGVhc2Vfb2xkID4gJGZpbGVfb2xkCisrICAgIGdldF92YWx1ZSBRRl9GSUxFTElTVCAkc3BlY19uZXcgfCB0cmltX3JlbGVhc2VfbmV3ID4gJGZpbGVfbmV3CisrICAgIGNvbXBfZmlsZSBmaWxlbGlzdCAkZmlsZV9vbGQgJGZpbGVfbmV3IHx8IHJldHVybiAxCisrCisgICAgICMgbm93IHRoZSBtZDVzdW1zLiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHdlIGNoZWNrIG1vcmUgZGV0YWlsZWQKKyAgICAgIyBpZiB0aGVyZSBhcmUgZGlmZmVyZW50IGZpbGVuYW1lcywgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYWJvcnRlZCBiZWZvcmUKKyAgICAgIyBmaWxlIGZsYWcgNjQgbWVhbnMgImdob3N0IiwgZmlsdGVyIHRob3NlIG91dC4KKy0gICAgUUY9Ilsle0ZJTEVOQU1FU30gJXtGSUxFTUQ1U30gJXtGSUxFRkxBR1N9XG5dXFxuIgorLSAgICBjaGVja19oZWFkZXIgJG9sZHJwbSB8Z3JlcCAtdiAiIDY0JCJ8IHRyaW1fcmVsZWFzZV9vbGQgPiAkZmlsZTEKKy0gICAgY2hlY2tfaGVhZGVyICRuZXdycG0gfGdyZXAgLXYgIiA2NCQifCB0cmltX3JlbGVhc2VfbmV3ID4gJGZpbGUyCistICAgIAorKyAgICBnZXRfdmFsdWUgUUZfQ0hFQ0tTVU0gJHNwZWNfb2xkIHwgZ3JlcCAtdiAiIDY0JCIgfCB0cmltX3JlbGVhc2Vfb2xkID4gJGZpbGVfb2xkCisrICAgIGdldF92YWx1ZSBRRl9DSEVDS1NVTSAkc3BlY19uZXcgfCBncmVwIC12ICIgNjQkIiB8IHRyaW1fcmVsZWFzZV9uZXcgPiAkZmlsZV9uZXcKKyAgICAgUkVTPTIKKyAgICAgIyBkb25lIGlmIHRoZSBzYW1lCisgICAgIGVjaG8gImNvbXBhcmluZyBmaWxlIGNoZWNrc3VtIgorLSAgICBpZiBjbXAgLXMgJGZpbGUxICRmaWxlMjsgdGhlbgorKyAgICBpZiBjbXAgLXMgJGZpbGVfb2xkICRmaWxlX25ldzsgdGhlbgorICAgICAgIFJFUz0wCisgICAgIGZpCistICAgIAorKworICAgICAjIEdldCBvbmx5IGZpbGVzIHdpdGggZGlmZmVyZW50IE1ENXN1bXMKKy0gICAgZmlsZXM9YGRpZmYgLVUwICRmaWxlMSAkZmlsZTIgfCBmZ3JlcCAtdiArKysgfCBncmVwIF4rIHwgY3V0IC1iMi0gfCBhd2sgJ3twcmludCAkMX0nYAorKyAgICBmaWxlcz1gZGlmZiAtVTAgJGZpbGVfb2xkICRmaWxlX25ldyB8IGZncmVwIC12ICsrKyB8IGdyZXAgXisgfCBjdXQgLWIyLSB8IGF3ayAne3ByaW50ICQxfSdgCisgCisgICAgIGlmIHRlc3QgLWYgIiRzaCI7IHRoZW4KKyAgICAgICBlY2hvICJjcmVhdGluZyByZW5hbWUgc2NyaXB0IgorQEAgLTI2MSw3ICsyODAsNyBAQCBmdW5jdGlvbiBjbXBfc3BlYyAoKQorICAgICAgIGRvbmUgPj4gIiR7c2h9IgorICAgICBmaQorICAgICAjCistICAgIHJtICRmaWxlMSAkZmlsZTIKKysgICAgcm0gJGZpbGVfb2xkICRmaWxlX25ldworICAgICByZXR1cm4gJFJFUworIH0KKyAKKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL3BrZy1kaWZmLnNoLWNoZWNrLWZvci1maWZvLW5hbWVkLXBpcGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvcGtnLWRpZmYuc2gtY2hlY2stZm9yLWZpZm8tbmFtZWQtcGlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGYwYzU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL3BrZy1kaWZmLnNoLWNoZWNrLWZvci1maWZvLW5hbWVkLXBpcGUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBhNzhmZTRmNzkyYTlhYzlmNGQzNjRlODM2Yzg4NTVmNDg1NjFkNmYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDE0IEp1bCAyMDE2IDE5OjUyOjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBwa2ctZGlmZi5zaDogY2hlY2sgZm9yIGZpZm8obmFtZWQgcGlwZSkKKworT3RoZXJ3aXNlICJjbXAgLXMgZmlmbzEgZmlmbzIiIHdpbGwgd2FpdCBmb3IgaW5wdXRpbmcgZm9yZXZlci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9idWlsZC1jb21wYXJlL3B1bGwvMTBdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgcGtnLWRpZmYuc2ggfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9wa2ctZGlmZi5zaCBiL3BrZy1kaWZmLnNoCitpbmRleCA1ZGQzYTM4Li4xZjM1M2FhIDEwMDY0NAorLS0tIGEvcGtnLWRpZmYuc2gKKysrKyBiL3BrZy1kaWZmLnNoCitAQCAtNzM1LDYgKzczNSwxMyBAQCBjaGVja19zaW5nbGVfZmlsZSgpCisgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKysgICAgIGZpZm8qcGlwZSopCisrICAgICAgIGZ0eXBlX25ldz0iYC91c3IvYmluL2ZpbGUgbmV3LyRmaWxlIHwgc2VkIC1lICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnIC1lICdzQFtbOmJsYW5rOl1dKiRAQCdgIgorKyAgICAgICBpZiBbICIkZnR5cGVfbmV3IiA9ICIkZnR5cGUiICBdOyB0aGVuCisrICAgICAgICAgcmV0dXJuIDAKKysgICAgICAgZmkKKysgICAgICAgcmV0dXJuIDEKKysgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKyAgICAgICAgICAgIHJldHVybiAxCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9wa2ctZGlmZi5zaC1jaGVja19zaW5nbGVfZmlsZS1yZXR1cm4tYXQtb25jZS13aGVuLXNhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL3BrZy1kaWZmLnNoLWNoZWNrX3NpbmdsZV9maWxlLXJldHVybi1hdC1vbmNlLXdoZW4tc2EucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyYWYyNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9wa2ctZGlmZi5zaC1jaGVja19zaW5nbGVfZmlsZS1yZXR1cm4tYXQtb25jZS13aGVuLXNhLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNjU3OTgzZWY5Y2E4ZjgzNTQxNzI2ODJlMTc0MDhjNGY2YjViYzY2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxNCBKdWwgMjAxNiAxOTo0NjowOCAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvNF0gcGtnLWRpZmYuc2g6IGNoZWNrX3NpbmdsZV9maWxlKCk6IHJldHVybiBhdCBvbmNlIHdoZW4KKyBzYW1lCisKK0lmIHRoZSB0d28gZmlsZXMgYXJlIHRoZSBzYW1lLCByZXR1cm4gYXQgb25jZSwgdGhpcyBjYW4gc2F2ZSBhIGxvdCBvZgordGltZSB3aGVuIHRoZXJlIGFyZSBhcmNoaXZlcyBpbnNpZGUgYXJjaGl2ZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZS9wdWxsLzEwXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHBrZy1kaWZmLnNoIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcGtnLWRpZmYuc2ggYi9wa2ctZGlmZi5zaAoraW5kZXggM2NmMTBhYS4uNDAyZDRhNCAxMDA2NDQKKy0tLSBhL3BrZy1kaWZmLnNoCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTI5Myw2ICsyOTMsMTMgQEAgY2hlY2tfY29tcHJlc3NlZF9maWxlKCkKKyBjaGVja19zaW5nbGVfZmlsZSgpCisgeworICAgbG9jYWwgZmlsZT0iJDEiCisrCisrICAjIElmIHRoZSB0d28gZmlsZXMgYXJlIHRoZSBzYW1lLCByZXR1cm4gYXQgb25jZS4KKysgIGlmIFsgLWYgb2xkLyRmaWxlIC1hIC1mIG5ldy8kZmlsZSBdOyB0aGVuCisrICAgIGlmIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCisrICAgICAgcmV0dXJuIDAKKysgICAgZmkKKysgIGZpCisgICBjYXNlICRmaWxlIGluCisgICAgICouc3BlYykKKyAgICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTEsUmVsZWFzZTogQFJFTEVBU0VALCIgb2xkLyRmaWxlCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9wa2ctZGlmZi5zaC1yZW1vdmUtc3BhY2UtaW4tdGhlLWVuZC1mb3ItZnR5cGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvcGtnLWRpZmYuc2gtcmVtb3ZlLXNwYWNlLWluLXRoZS1lbmQtZm9yLWZ0eXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzcxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvcGtnLWRpZmYuc2gtcmVtb3ZlLXNwYWNlLWluLXRoZS1lbmQtZm9yLWZ0eXBlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODM2YTY3ODNkZjljNTgyYTgzNGZjYTIzOWYyMjcwNjNhNTY4NzcxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxNCBKdWwgMjAxNiAxOTo0OToxMiAtMDcwMAorU3ViamVjdDogW1BBVENIIDIvNF0gcGtnLWRpZmYuc2g6IHJlbW92ZSBzcGFjZSBpbiB0aGUgZW5kIGZvciBmdHlwZQorCitWZXJzaW9ucyBvZiBmaWxlIGxpa2UgNS4xNCByZXR1cm5zIGEgIiAiIGluIHRoZSBlbmQsIGZvciBleGFtcGxlOgorZnR5cGU9ImRpcmVjdG9yeSAiLCBidXQgd2UgbmVlZCBmdHlwZT0iZGlyZWN0b3J5IiwgcmVtb3ZlIHRoZSBzcGFjZSB0bworZml4IHRoZSBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUvcHVsbC8xMF0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBwa2ctZGlmZi5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3BrZy1kaWZmLnNoIGIvcGtnLWRpZmYuc2gKK2luZGV4IDQwMmQ0YTQuLjVkZDNhMzggMTAwNjQ0CistLS0gYS9wa2ctZGlmZi5zaAorKysrIGIvcGtnLWRpZmYuc2gKK0BAIC02MzMsNyArNjMzLDcgQEAgY2hlY2tfc2luZ2xlX2ZpbGUoKQorICAgICAgIDs7CisgICBlc2FjCisgCistICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCisrICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgLWUgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCcgLWUgJ3NAW1s6Ymxhbms6XV0qJEBAJ2AKKyAgIGNhc2UgJGZ0eXBlIGluCisgICAgICBQRTMyXCBleGVjdXRhYmxlKk1vbm9cL1wuTmV0XCBhc3NlbWJseSopCisgICAgICAgIGVjaG8gIlBFMzIgTW9uby8uTmV0IGFzc2VtYmx5OiAkZmlsZSIKKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlXzMuMi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlXzMuMi40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDQ1ZTQxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXJlcXVpcmUgY2NhY2hlLmluYwotCi1MSUNFTlNFID0gIkdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1iM2MzMzdlNzY2NDU1OWE3ODlkOWY3YTkzZTUyODNjMSIKLQotU1JDUkVWID0gIjIyNTQ3OTdmMWM1Y2ZiODNjNDI3MmRhN2IxMzhmN2Y0NzIxOGViN2QiCi0KLVNSQ19VUkkgKz0gIiBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMi1kZXYubWsuaW4tZml4LWZpbGUtbmFtZS10b28tbG9uZy5wYXRjaCBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGVfMy4yLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGVfMy4yLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkMWIwZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuNS5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGNjYWNoZS5pbmMKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9YjhhNGZhMTczZWQ5MWMxYTUyMDRlYTRmOWM5ZWFkYzMiCisKK1NSQ1JFViA9ICI0MjRkM2FlMWZiNzM0NDRjNmMzOGJmMTg5ZjhmYzA0OGY2NmQ2NDk5IgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICAgZmlsZTovLzAwMDItZGV2Lm1rLmluLWZpeC1maWxlLW5hbWUtdG9vLWxvbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL1JldmVydC1DcmVhdGUtbWFuLXBhZ2UtaW4tdGhlLW1ha2UtaW5zdGFsbC1mcm9tLWdpdC0ucGF0Y2ggXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvZmlsZXMvUmV2ZXJ0LUNyZWF0ZS1tYW4tcGFnZS1pbi10aGUtbWFrZS1pbnN0YWxsLWZyb20tZ2l0LS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzL1JldmVydC1DcmVhdGUtbWFuLXBhZ2UtaW4tdGhlLW1ha2UtaW5zdGFsbC1mcm9tLWdpdC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMDhiOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzL1JldmVydC1DcmVhdGUtbWFuLXBhZ2UtaW4tdGhlLW1ha2UtaW5zdGFsbC1mcm9tLWdpdC0ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA5NGZhYmNkZGE1YzdlNTRjY2RiYzFmMGFlY2NiMjZjZTMwZTYxMjI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE4IEp1bCAyMDE2IDE5OjUzOjAwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiQ3JlYXRlIG1hbiBwYWdlIGluIHRoZSBtYWtlLWluc3RhbGwtZnJvbS1naXQtcmVwbworIGNhc2UiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgYjg2Nzg0OTAyZDI4ZGVmZDVlNDc1Yzg5MjJkZTU5NDc4N2RmNDU0MS4KKworV2UgZG9udCcgaGF2ZSBhc2NpaWRvYywgc28gcmV2ZXJ0IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBkNDc0ZjJhLi5jNmNkYzA0IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzYsNyArNzYsNyBAQCBjY2FjaGUkKEVYRUVYVCk6ICQoY2NhY2hlX29ianMpICQoZXh0cmFfbGlicykKKyAJJChDQykgJChhbGxfY2ZsYWdzKSAtbyAkQCAkKGNjYWNoZV9vYmpzKSAkKExERkxBR1MpICQoZXh0cmFfbGlicykgJChMSUJTKQorIAorIC5QSE9OWTogaW5zdGFsbAorLWluc3RhbGw6IGFsbCAkKHNyY2RpcikvY2NhY2hlLjEKKytpbnN0YWxsOiBhbGwKKyAJJChpbnN0YWxsY21kKSAtZCAkKERFU1RESVIpJChiaW5kaXIpCisgCSQoaW5zdGFsbGNtZCkgLW0gNzU1IGNjYWNoZSQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpCisgCSQoaW5zdGFsbGNtZCkgLWQgJChERVNURElSKSQobWFuZGlyKS9tYW4xCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuNC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy40LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNGU3NDkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy40LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1yZXF1aXJlIGNtYWtlLmluYwotaW5oZXJpdCBuYXRpdmUKLQotIyBVc2luZyBjbWFrZSdzIGludGVybmFsIGxpYmFyY2hpdmUsIHNvIHNvbWUgZGVwZW5kZW5jaWVzIGFyZSBuZWVkZWQKLURFUEVORFMgKz0gImJ6aXAyLW5hdGl2ZSB6bGliLW5hdGl2ZSIKLQotU1JDX1VSSSArPSAiXAotICAgIGZpbGU6Ly9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2ggXAotIgotCi0jIERpc2FibGUgY2NtYWtlIHNpbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBuY3Vyc2VzCi1DTUFLRV9FWFRSQUNPTkYgPSAiXAotICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAotICAgIC1ERU5BQkxFX0FDTD0wIC1ESEFWRV9BQ0xfTElCQUNMX0g9MCBcCi0gICAgLURIQVZFX1NZU19BQ0xfSD0wIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuNi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjMGQ2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjYuMS5iYgpAQCAtMCwwICsxLDM2IEBACityZXF1aXJlIGNtYWtlLmluYworaW5oZXJpdCBuYXRpdmUKKworREVQRU5EUyArPSAiYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIGV4cGF0LW5hdGl2ZSB4ei1uYXRpdmUgemxpYi1uYXRpdmUgY3VybC1uYXRpdmUiCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoIFwKKyIKKworQiA9ICIke1dPUktESVJ9L2J1aWxkIgorZG9fY29uZmlndXJlW2NsZWFuZGlyc10gPSAiJHtCfSIKKworIyBEaXNhYmxlIGNjbWFrZSBzaW5jZSB3ZSBkb24ndCBkZXBlbmQgb24gbmN1cnNlcworQ01BS0VfRVhUUkFDT05GID0gIlwKKyAgICAtRENNQUtFX0xJQlJBUllfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJJRVM9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfSlNPTkNQUD0wIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJBUkNISVZFPTAgXAorICAgIC1ERU5BQkxFX0FDTD0wIC1ESEFWRV9BQ0xfTElCQUNMX0g9MCBcCisgICAgLURIQVZFX1NZU19BQ0xfSD0wIFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKwkke1N9L2NvbmZpZ3VyZSAtLXZlcmJvc2UgLS1wcmVmaXg9JHtwcmVmaXh9IC0tICR7Q01BS0VfRVhUUkFDT05GfQorfQorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KKworZG9fY29tcGlsZVtwcm9ncmVzc10gPSAicGVyY2VudCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKaW5kZXggOTY4ZDAwMy4uNGZjYjBiMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKQEAgLTYsMjQgKzYsMjEgQEAKIEJVR1RSQUNLRVIgPSAiaHR0cDovL3B1YmxpYy5raXR3YXJlLmNvbS9CdWcvbXlfdmlld19wYWdlLnBocCIKIFNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKIExJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0LnR4dDttZDU9M2JhNWE2YzM0NDgxNjUyY2U1NzNlNWM0ZTFkNzA3ZTQgXAorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0LnR4dDttZDU9MDUyZjg2YzE1YmJkZTY4YWY1NWM3ZjdiMzQwYWI2MzkgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL2NtYWtlLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9MzQxNzM2ZGFlODNjOWUzNDRiNTNlZWIxYmM3ZDdiYzIiCiAKLUNNQUtFX01BSk9SX1ZFUlNJT04gPSAiJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzA6Ml0pfSIKK0NNQUtFX01BSk9SX1ZFUlNJT04gPSAiJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKVswOjJdKX0iCiAKIFNSQ19VUkkgPSAiaHR0cHM6Ly9jbWFrZS5vcmcvZmlsZXMvdiR7Q01BS0VfTUFKT1JfVkVSU0lPTn0vY21ha2UtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1OSU9TMi1DUFUtc3VwcG9ydC5wYXRjaCBcCiAgICAgICAgICAgICIKIAotU1JDX1VSSVttZDVzdW1dID0gIjRjYjNmZjM1YjI0NzJhYWU3MGY1NDIxMTZkNjE2ZTYzIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3M2Y4YzEwMjk2MTFkZjdlZDgxNzk2YmY1Y2E4YmEwZWY0MWM2NzYxMTMyMzQwYzczZmZlNDI3MDRmOTgwZmEiCitTUkNfVVJJW21kNXN1bV0gPSAiZDZkZDY2MTM4MGFkYWNkYjEyZjQxYjkyNmVjOTk1NDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjhlZTk4ZWM0MDQyN2Q0MWE0NTY3Mzg0N2RiN2E5MDViNTljZTkyNDNiYjg2NmVhZjU5ZGNlMGY1OGFhZWYxMSIKIAogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiY21ha2UtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCiAKLWluaGVyaXQgYXV0b3Rvb2xzCi0KICMgVWdseSBoYWNrIHRvIHdvcmsgYXJvdW5kIHVuZGVmaW5lZCBPRV9RTUFLRV9QQVRIX0VYVEVSTkFMX0hPU1RfQklOUyB2YXJpYWJsZQogIyBhbmQgcG9zc2libHkgbWlzc2luZyBxbWFrZSBiaW5hcnkgKHF0YmFzZS1uYXRpdmUgY2FuIGJlIHJlbW92ZWQgZnJvbSBzeXNyb290CiAjIGUuZy4gaW4gb3JkZXIgdG8gdXBncmFkZSBpdCwgZXZlbiB3aGVuIHRoZXJlIGlzIHRhcmdldCBxdGJhc2UpCkBAIC00NiwxMCArNDMsMyBAQAogCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXRBdXRvZ2VuL0NNYWtlTGlzdHMudHh0CiAJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9nZW4vYXV0b3JjY19kZXBlbmRzL0NNYWtlTGlzdHMudHh0CiB9Ci0KLSMgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byBjbWFrZSBpbnZva2VkIGJ5IGJvb3RzdHJhcAotQ01BS0VfRVhUUkFDT05GID0gIiIKLQotZG9fY29uZmlndXJlICgpIHsKLQkke1N9L2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gLS0gJHtDTUFLRV9FWFRSQUNPTkZ9Ci19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLzAwMDEtQWRkLU5JT1MyLUNQVS1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS8wMDAxLUFkZC1OSU9TMi1DUFUtc3VwcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwYWI5Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLzAwMDEtQWRkLU5JT1MyLUNQVS1zdXBwb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotRnJvbSAzZjhjM2QzMDExZWExOTJkYTJjNzYxNTYwYjYxNWY1NTc2MzcxNWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1EYXRlOiBUaHUsIDI2IE5vdiAyMDE1IDIxOjMxOjA0ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEFkZCBOSU9TMiBDUFUgc3VwcG9ydAotCi1BZGQgbmVjZXNzYXJ5IGJpdHMgdG8gc3VwcG9ydCB0aGUgTklPUzIgbGl0dGxlLWVuZGlhbiBDUFUuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotQ2M6IExleSBGb29uIFRhbiA8bGZ0YW5AYWx0ZXJhLmNvbT4KLUNjOiBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+Ci1DYzogV2FsdGVyIEdvb3NzZW5zIDx3YWx0ZXJnb29zc2Vuc0Bob21lLm5sPgotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLS0tLQotIFNvdXJjZS9rd3N5cy9DUFUuaC5pbiAgICB8IDQgKysrKwotIFV0aWxpdGllcy9LV0lNTC9BQkkuaC5pbiB8IDQgKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvQ1BVLmguaW4gYi9Tb3VyY2Uva3dzeXMvQ1BVLmguaW4KLWluZGV4IDg4NGQ3MWEuLjY2ZmZiYjEgMTAwNjQ0Ci0tLS0gYS9Tb3VyY2Uva3dzeXMvQ1BVLmguaW4KLSsrKyBiL1NvdXJjZS9rd3N5cy9DUFUuaC5pbgotQEAgLTg4LDYgKzg4LDEwIEBACi0gI2VsaWYgZGVmaW5lZChfX21pcHMpIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19NSVBTX18pCi0gIyBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfQ1BVX0VORElBTl9JRCBAS1dTWVNfTkFNRVNQQUNFQF9DUFVfRU5ESUFOX0lEX0JJRwotIAotKy8qIE5JT1MyICovCi0rI2VsaWYgZGVmaW5lZChfX05JT1MyX18pIHx8IGRlZmluZWQoX19OSU9TMikgfHwgZGVmaW5lZChfX25pb3MyX18pCi0rIyBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfQ1BVX0VORElBTl9JRCBAS1dTWVNfTkFNRVNQQUNFQF9DUFVfRU5ESUFOX0lEX0xJVFRMRQotKwotIC8qIE9wZW5SSVNDIDEwMDAgKi8KLSAjZWxpZiBkZWZpbmVkKF9fb3Ixa19fKQotICMgZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0NQVV9FTkRJQU5fSUQgQEtXU1lTX05BTUVTUEFDRUBfQ1BVX0VORElBTl9JRF9CSUcKLWRpZmYgLS1naXQgYS9VdGlsaXRpZXMvS1dJTUwvQUJJLmguaW4gYi9VdGlsaXRpZXMvS1dJTUwvQUJJLmguaW4KLWluZGV4IDYzMDBhZGEuLjg3YjZlOTYgMTAwNjQ0Ci0tLS0gYS9VdGlsaXRpZXMvS1dJTUwvQUJJLmguaW4KLSsrKyBiL1V0aWxpdGllcy9LV0lNTC9BQkkuaC5pbgotQEAgLTM5OCw2ICszOTgsMTAgQEAgc3VwcHJlc3Npb24gbWFjcm8gQEtXSU1MQF9BQklfTk9fVkVSSUZZIHdhcyBkZWZpbmVkLgotICNlbGlmIGRlZmluZWQoX19taXBzKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9fTUlQU19fKQotICMgZGVmaW5lIEBLV0lNTEBfQUJJX0VORElBTl9JRCBAS1dJTUxAX0FCSV9FTkRJQU5fSURfQklHCi0gCi0rLyogTklPUzIgKi8KLSsjZWxpZiBkZWZpbmVkKF9fTklPUzJfXykgfHwgZGVmaW5lZChfX05JT1MyKSB8fCBkZWZpbmVkKF9fbmlvczJfXykKLSsjIGRlZmluZSBAS1dJTUxAX0FCSV9FTkRJQU5fSUQgQEtXSU1MQF9BQklfRU5ESUFOX0lEX0xJVFRMRQotKwotIC8qIE9wZW5SSVNDIDEwMDAgKi8KLSAjZWxpZiBkZWZpbmVkKF9fb3Ixa19fKQotICMgZGVmaW5lIEBLV0lNTEBfQUJJX0VORElBTl9JRCBAS1dJTUxAX0FCSV9FTkRJQU5fSURfQklHCi0tLSAKLTIuNi4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCmluZGV4IDYwMDE0YmIuLjY1MTg0MDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZQpAQCAtMywxMyArMywxNyBAQAogc2V0KCBDTUFLRV9DWFhfRkxBR1MgJEVOVntDWFhGTEFHU30gIENBQ0hFIFNUUklORyAiIiBGT1JDRSApCiBzZXQoIENNQUtFIEFTTV9GTEFHUyAke0NNQUtFX0NfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCiBzZXQoIENNQUtFX0xERkxBR1NfRkxBR1MgJHtDTUFLRV9DWFhfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCisKIHNldCggQ01BS0VfRklORF9ST09UX1BBVEggJEVOVntPRUNPUkVfVEFSR0VUX1NZU1JPT1R9ICRFTlZ7T0VDT1JFX05BVElWRV9TWVNST09UfSApCiBzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBORVZFUiApCiBzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBPTkxZICkKIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BBQ0tBR0UgT05MWSApCiAKLXN0cmluZyhSRUdFWCBNQVRDSCAic3lzcm9vdHMvKFthLXpBLVowLTldKykiIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJEVOVntTREtUQVJHRVRTWVNST09UfSkKLXN0cmluZyhSRUdFWCBSRVBMQUNFICJzeXNyb290cy8iICIiIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSkKKyMgU2V0IENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgZnJvbSB0aGUgc3lzcm9vdCBuYW1lIChhc3N1bWluZyBwcm9jZXNzb3ItZGlzdHJvLW9zKS4KK2lmICgkRU5We1NES1RBUkdFVFNZU1JPT1R9IE1BVENIRVMgIi9zeXNyb290cy8oW2EtekEtWjAtOV8tXSspLS4rLS4rIikKKyAgc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJHtDTUFLRV9NQVRDSF8xfSkKK2VuZGlmKCkKIAogIyBJbmNsdWRlIHRoZSB0b29sY2hhaW4gY29uZmlndXJhdGlvbiBzdWJzY3JpcHRzCiBmaWxlKCBHTE9CIHRvb2xjaGFpbl9jb25maWdfZmlsZXMgIiR7Q01BS0VfVE9PTENIQUlOX0ZJTEV9LmQvKi5jbWFrZSIgKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjQuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy40LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMTg4ZjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjQuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLXJlcXVpcmUgY21ha2UuaW5jCi0KLWluaGVyaXQgY21ha2UKLQotREVQRU5EUyArPSAiY3VybCBleHBhdCB6bGliIGxpYmFyY2hpdmUgeHogbmN1cnNlcyBiemlwMiIKLQotU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCi0gICAgZmlsZTovL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIFwKLSAgICBmaWxlOi8vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCIKLQotIyBTdHJpcCAke3ByZWZpeH0gZnJvbSAke2RvY2Rpcn0sIHNldCByZXN1bHQgaW50byBkb2NkaXJfc3RyaXBwZWQKLXB5dGhvbiAoKSB7Ci0gICAgcHJlZml4PWQuZ2V0VmFyKCJwcmVmaXgiLCBUcnVlKQotICAgIGRvY2Rpcj1kLmdldFZhcigiZG9jZGlyIiwgVHJ1ZSkKLQotICAgIGlmIG5vdCBkb2NkaXIuc3RhcnRzd2l0aChwcmVmaXgpOgotICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdkb2NkaXIgbXVzdCBjb250YWluIHByZWZpeCBhcyBpdHMgcHJlZml4JykKLQotICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2RpcltsZW4ocHJlZml4KTpdCi0gICAgaWYgbGVuKGRvY2Rpcl9zdHJpcHBlZCkgPiAwIGFuZCBkb2NkaXJfc3RyaXBwZWRbMF0gPT0gJy8nOgotICAgICAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJfc3RyaXBwZWRbMTpdCi0KLSAgICBkLnNldFZhcigiZG9jZGlyX3N0cmlwcGVkIiwgZG9jZGlyX3N0cmlwcGVkKQotfQotCi1FWFRSQV9PRUNNQUtFPSIgXAotICAgIC1EQ01BS0VfRE9DX0RJUj0ke2RvY2Rpcl9zdHJpcHBlZH0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSBcCi0gICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQlpJUDI9MSBcCi0gICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQ1VSTD0xIFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9FWFBBVD0xIFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9GT1JNPTEgXAotICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkFSQ0hJVkU9MSBcCi0gICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCTFpNQT0xIFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9aTElCPTEgXAotICAgIC1ES1dTWVNfQ0hBUl9JU19TSUdORUQ9MSBcCi0gICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnLURLV1NZU19MRlNfV09SS1M9MScsICctREtXU1lTX0xGU19ESVNBQkxFPTEnLCBkKX0gXAotIgotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7Ci0gICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vY21ha2UKLSAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L09FVG9vbGNoYWluQ29uZmlnLmNtYWtlICR7RH0ke2RhdGFkaXJ9L2NtYWtlLwotCi0gICAgbWtkaXIgLXAgJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZAotICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCAke0R9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kL2NtYWtlLnNoCi19Ci0KLUZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7U0RLUEFUSE5BVElWRX0iCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0iCi1GSUxFU18ke1BOfS1kb2MgKz0gIiR7ZG9jZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy42LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGQ2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuNi4xLmJiCkBAIC0wLDAgKzEsNDggQEAKK3JlcXVpcmUgY21ha2UuaW5jCisKK2luaGVyaXQgY21ha2UKKworREVQRU5EUyArPSAiY3VybCBleHBhdCB6bGliIGxpYmFyY2hpdmUgeHogbmN1cnNlcyBiemlwMiIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisgICAgZmlsZTovL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIFwKKyAgICBmaWxlOi8vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCIKKworIyBTdHJpcCAke3ByZWZpeH0gZnJvbSAke2RvY2Rpcn0sIHNldCByZXN1bHQgaW50byBkb2NkaXJfc3RyaXBwZWQKK3B5dGhvbiAoKSB7CisgICAgcHJlZml4PWQuZ2V0VmFyKCJwcmVmaXgiLCBUcnVlKQorICAgIGRvY2Rpcj1kLmdldFZhcigiZG9jZGlyIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBkb2NkaXIuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICBiYi5mYXRhbCgnZG9jZGlyIG11c3QgY29udGFpbiBwcmVmaXggYXMgaXRzIHByZWZpeCcpCisKKyAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJbbGVuKHByZWZpeCk6XQorICAgIGlmIGxlbihkb2NkaXJfc3RyaXBwZWQpID4gMCBhbmQgZG9jZGlyX3N0cmlwcGVkWzBdID09ICcvJzoKKyAgICAgICAgZG9jZGlyX3N0cmlwcGVkID0gZG9jZGlyX3N0cmlwcGVkWzE6XQorCisgICAgZC5zZXRWYXIoImRvY2Rpcl9zdHJpcHBlZCIsIGRvY2Rpcl9zdHJpcHBlZCkKK30KKworRVhUUkFfT0VDTUFLRT0iIFwKKyAgICAtRENNQUtFX0RPQ19ESVI9JHtkb2NkaXJfc3RyaXBwZWR9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0gXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJJRVM9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfSlNPTkNQUD0wIFwKKyAgICAtREtXU1lTX0NIQVJfSVNfU0lHTkVEPTEgXAorICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJy1ES1dTWVNfTEZTX1dPUktTPTEnLCAnLURLV1NZU19MRlNfRElTQUJMRT0xJywgZCl9IFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2NtYWtlCisgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSAke0R9JHtkYXRhZGlyfS9jbWFrZS8KKworICAgIG1rZGlyIC1wICR7RH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2Vudmlyb25tZW50LmQtY21ha2Uuc2ggJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZC9jbWFrZS5zaAorfQorCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke1NES1BBVEhOQVRJVkV9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RvY2Rpcn0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2N2ZS1jaGVjay10b29sXzUuNi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9jdmUtY2hlY2stdG9vbF81LjYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFhZGVhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9jdmUtY2hlY2stdG9vbF81LjYuNC5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gImN2ZS1jaGVjay10b29sIgorREVTQ1JJUFRJT04gPSAiY3ZlLWNoZWNrLXRvb2wgaXMgYSB0b29sIGZvciBjaGVja2luZyBrbm93biAocHVibGljKSBDVkVzLlwKK1RoZSB0b29sIHdpbGwgaWRlbnRpZnkgcG90ZW50aWFsbHkgdnVubG5lcmFibGUgc29mdHdhcmUgcGFja2FnZXMgd2l0aGluIExpbnV4IGRpc3RyaWJ1dGlvbnMgdGhyb3VnaCB2ZXJzaW9uIG1hdGNoaW5nLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9pa2V5ZG9oZXJ0eS9jdmUtY2hlY2stdG9vbCIKK1NFQ1RJT04gPSAiRGV2ZWxvcG1lbnQvVG9vbHMiCitMSUNFTlNFID0gIkdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZThjMTQ1ODQzOGVhZDNjMzQ5NzRiYzBiZTNhMDNlZDYiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2lrZXlkb2hlcnR5LyR7QlBOfS9yZWxlYXNlcy9kb3dubG9hZC92JHtQVn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWZvci1tYWxsb2NfdHJpbS1iZWZvcmUtdXNpbmctaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1wcmludC1wcm9ncmVzcy1pbi1wZXJjZW50LXdoZW4tZG93bmxvYWRpbmctQ1ZFLWRiLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNWY0MjQ3MTQwZmM5YmUzYmY0MTQ5MWQzMWEzNDE1NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiOGYyODNiZTcxOGFmOGQzMTIzMmFjMWJmYzEwYTAzNzhmYjk1OGFhYWE0OWFmMzkxNjhmOGFjZjUwMWU2YTViIgorCitERVBFTkRTID0gImxpYmNoZWNrIGdsaWItMi4wIGpzb24tZ2xpYiBjdXJsIGxpYnhtbDIgc3FsaXRlMyBvcGVuc3NsIGNhLWNlcnRpZmljYXRlcyIKKworUkRFUEVORFNfJHtQTn0gPSAiY2EtY2VydGlmaWNhdGVzIgorCitpbmhlcml0IHBrZ2NvbmZpZyBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jb3ZlcmFnZSIKK0NGTEFHU19hcHBlbmQgPSAiIC1Xbm8tZXJyb3I9cGVkYW50aWMiCisKK2RvX3BvcHVsYXRlX2N2ZV9kYigpIHsKKyAgICBpZiBbICIke0JCX05PX05FVFdPUkt9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgICBiYmVycm9yICJCQl9OT19ORVRXT1JLIGlzIHNldDsgQ2FuJ3QgdXBkYXRlIGN2ZS1jaGVjay10b29sIGRhdGFiYXNlLCBDVkVzIHdvbid0IGJlIGNoZWNrZWQiCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICAjIEluIGNhc2Ugd2UgZG9uJ3QgaW5oZXJpdCBjdmUtY2hlY2sgY2xhc3MsIHVzZSBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGluIHRoZSBjbGFzcy4KKyAgICBjdmVfZGlyPSIke0NWRV9DSEVDS19EQl9ESVJ9IgorICAgIGN2ZV9maWxlPSIke0NWRV9DSEVDS19UTVBfRklMRX0iCisKKyAgICBbIC16ICIke2N2ZV9kaXJ9IiBdICYmIGN2ZV9kaXI9IiR7RExfRElSfS9DVkVfQ0hFQ0siCisgICAgWyAteiAiJHtjdmVfZmlsZX0iIF0gJiYgY3ZlX2ZpbGU9IiR7VE1QRElSfS9jdmVfY2hlY2siCisKKyAgICBiYmRlYnVnIDIgIlVwZGF0aW5nIGN2ZS1jaGVjay10b29sIGRhdGFiYXNlIGxvY2F0ZWQgaW4gJGN2ZV9kaXIiCisgICAgaWYgY3ZlLWNoZWNrLXVwZGF0ZSAtZCAiJGN2ZV9kaXIiIDsgdGhlbgorICAgICAgICBwcmludGYgIkNWRSBkYXRhYmFzZSB3YXMgdXBkYXRlZCBvbiAlcyBVVENcblxuIiAiJChMQU5HPUMgZGF0ZSAtLXV0YyArJyVGICVUJykiID4gIiRjdmVfZmlsZSIKKyAgICBlbHNlCisgICAgICAgIGJid2FybiAiRXJyb3IgaW4gZXhlY3V0aW5nIGN2ZS1jaGVjay11cGRhdGUiCisgICAgICAgIGlmIFsgIiR7QCcxJyBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjdmUtY2hlY2snLCBkKSBlbHNlICcwJ30iIC1uZSAwIF0gOyB0aGVuCisgICAgICAgICAgICBiYndhcm4gIkZhaWxlZCB0byB1cGRhdGUgY3ZlLWNoZWNrLXRvb2wgZGF0YWJhc2UsIENWRXMgd29uJ3QgYmUgY2hlY2tlZCIKKyAgICAgICAgZmkKKyAgICBmaQorfQorCithZGR0YXNrIHBvcHVsYXRlX2N2ZV9kYiBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290Citkb19wb3B1bGF0ZV9jdmVfZGJbbm9zdGFtcF0gPSAiMSIKK2RvX3BvcHVsYXRlX2N2ZV9kYltwcm9ncmVzc10gPSAicGVyY2VudCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy8wMDAxLXByaW50LXByb2dyZXNzLWluLXBlcmNlbnQtd2hlbi1kb3dubG9hZGluZy1DVkUtZGIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzLzAwMDEtcHJpbnQtcHJvZ3Jlc3MtaW4tcGVyY2VudC13aGVuLWRvd25sb2FkaW5nLUNWRS1kYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEwZTNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy8wMDAxLXByaW50LXByb2dyZXNzLWluLXBlcmNlbnQtd2hlbi1kb3dubG9hZGluZy1DVkUtZGIucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK0Zyb20gZTllZDI2Y2RlNjNmOGNhNzYwN2EwMTBhNTE4MzI5MzM5ZjhjMDJkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxnaXRAYW5kcmVkLm5ldD4KK0RhdGU6IE1vbiwgMjYgU2VwIDIwMTYgMTI6MTI6NDEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHJpbnQgcHJvZ3Jlc3MgaW4gcGVyY2VudCB3aGVuIGRvd25sb2FkaW5nIENWRSBkYgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxnaXRAYW5kcmVkLm5ldD4KKy0tLQorIHNyYy9saWJyYXJ5L2ZldGNoLmMgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysrKystCisgc3JjL2xpYnJhcnkvZmV0Y2guaCB8ICAzICsrLQorIHNyYy91cGRhdGUuYyAgICAgICAgfCAxNiArKysrKysrKysrKystLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpYnJhcnkvZmV0Y2guYyBiL3NyYy9saWJyYXJ5L2ZldGNoLmMKK2luZGV4IDA2ZDRiMzAuLjBmZTZkNzYgMTAwNjQ0CistLS0gYS9zcmMvbGlicmFyeS9mZXRjaC5jCisrKysgYi9zcmMvbGlicmFyeS9mZXRjaC5jCitAQCAtMzcsMTMgKzM3LDM3IEBAIHN0YXRpYyBzaXplX3Qgd3JpdGVfZnVuYyh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHN0cnVjdCBmZXRjaF90ICpmCisgICAgICAgICByZXR1cm4gZndyaXRlKHB0ciwgc2l6ZSwgbm1lbWIsIGYtPmYpOworIH0KKyAKKy1GZXRjaFN0YXR1cyBmZXRjaF91cmkoY29uc3QgY2hhciAqdXJpLCBjb25zdCBjaGFyICp0YXJnZXQsIGJvb2wgdmVyYm9zZSkKKytzdHJ1Y3QgcGVyY2VudF90IHsKKysgICAgICAgIHVuc2lnbmVkIGludCBzdGFydDsKKysgICAgICAgIHVuc2lnbmVkIGludCBlbmQ7CisrfTsKKysKKytzdGF0aWMgaW50IHByb2dyZXNzX2NhbGxiYWNrX25ldyh2b2lkICpwdHIsIGN1cmxfb2ZmX3QgZGx0b3RhbCwgY3VybF9vZmZfdCBkbG5vdywgY3VybF9vZmZfdCB1bHRvdGFsLCBjdXJsX29mZl90IHVsbm93KQorK3sKKysgICAgICAgICh2b2lkKSB1bHRvdGFsOworKyAgICAgICAgKHZvaWQpIHVsbm93OworKworKyAgICAgICAgc3RydWN0IHBlcmNlbnRfdCAqcGVyY2VudCA9IChzdHJ1Y3QgcGVyY2VudF90ICopIHB0cjsKKysKKysgICAgICAgIGlmIChkbHRvdGFsICYmIHBlcmNlbnQgJiYgcGVyY2VudC0+ZW5kID49IHBlcmNlbnQtPnN0YXJ0KSB7CisrICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkaWZmID0gcGVyY2VudC0+ZW5kIC0gcGVyY2VudC0+c3RhcnQ7CisrICAgICAgICAgICAgICAgIGlmIChkaWZmKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsImNvbXBsZXRlZDogIkNVUkxfRk9STUFUX09GRl9UIiUlXHIiLCBwZXJjZW50LT5zdGFydCArIChkaWZmICogZGxub3cgLyBkbHRvdGFsKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiAwOworK30KKysKKytGZXRjaFN0YXR1cyBmZXRjaF91cmkoY29uc3QgY2hhciAqdXJpLCBjb25zdCBjaGFyICp0YXJnZXQsIGJvb2wgdmVyYm9zZSwKKysgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0X3BlcmNlbnQsIHVuc2lnbmVkIGludCBlbmRfcGVyY2VudCkKKyB7CisgICAgICAgICBGZXRjaFN0YXR1cyByZXQgPSBGRVRDSF9TVEFUVVNfRkFJTDsKKyAgICAgICAgIENVUkxjb2RlIHJlczsKKyAgICAgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICAgICAgQ1VSTCAqY3VybCA9IE5VTEw7CisgICAgICAgICBzdHJ1Y3QgZmV0Y2hfdCAqZiA9IE5VTEw7CisrICAgICAgICBzdHJ1Y3QgcGVyY2VudF90IHBlcmNlbnQgPSB7IC5zdGFydCA9IHN0YXJ0X3BlcmNlbnQsIC5lbmQgPSBlbmRfcGVyY2VudCB9OworIAorICAgICAgICAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgICAgICAgICBpZiAoIWN1cmwpIHsKK0BAIC02Nyw2ICs5MSw4IEBAIEZldGNoU3RhdHVzIGZldGNoX3VyaShjb25zdCBjaGFyICp1cmksIGNvbnN0IGNoYXIgKnRhcmdldCwgYm9vbCB2ZXJib3NlKQorICAgICAgICAgfQorICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgKHZvaWQpY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX05PUFJPR1JFU1MsIDBMKTsKKysgICAgICAgICAgICAgICAgKHZvaWQpY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1hGRVJJTkZPREFUQSwgJnBlcmNlbnQpOworKyAgICAgICAgICAgICAgICAodm9pZCljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfWEZFUklORk9GVU5DVElPTiwgcHJvZ3Jlc3NfY2FsbGJhY2tfbmV3KTsKKyAgICAgICAgIH0KKyAgICAgICAgIHJlcyA9IGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCAoY3VybF93cml0ZV9jYWxsYmFjayl3cml0ZV9mdW5jKTsKKyAgICAgICAgIGlmIChyZXMgIT0gQ1VSTEVfT0spIHsKK2RpZmYgLS1naXQgYS9zcmMvbGlicmFyeS9mZXRjaC5oIGIvc3JjL2xpYnJhcnkvZmV0Y2guaAoraW5kZXggNzBjMzc3OS4uNGNjZTVkMSAxMDA2NDQKKy0tLSBhL3NyYy9saWJyYXJ5L2ZldGNoLmgKKysrKyBiL3NyYy9saWJyYXJ5L2ZldGNoLmgKK0BAIC0yOCw3ICsyOCw4IEBAIHR5cGVkZWYgZW51bSB7CisgICogQHBhcmFtIHZlcmJvc2UgV2hldGhlciB0byBiZSB2ZXJib3NlCisgICogQHJldHVybiBBIEZldGNoU3RhdHVzLCBpbmRpY2F0aW5nIHRoZSBvcGVyYXRpb24gdGFrZW4KKyAgKi8KKy1GZXRjaFN0YXR1cyBmZXRjaF91cmkoY29uc3QgY2hhciAqdXJpLCBjb25zdCBjaGFyICp0YXJnZXQsIGJvb2wgdmVyYm9zZSk7CisrRmV0Y2hTdGF0dXMgZmV0Y2hfdXJpKGNvbnN0IGNoYXIgKnVyaSwgY29uc3QgY2hhciAqdGFyZ2V0LCBib29sIHZlcmJvc2UsCisrICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGlzX3BlcmNlbnQsIHVuc2lnbmVkIGludCBuZXh0X3BlcmNlbnQpOworIAorIC8qKgorICAqIEF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgZ2l2ZW4gZ3ppcHBlZCBmaWxlCitkaWZmIC0tZ2l0IGEvc3JjL3VwZGF0ZS5jIGIvc3JjL3VwZGF0ZS5jCitpbmRleCAzMGZiZTk2Li5lYWVlZWZkIDEwMDY0NAorLS0tIGEvc3JjL3VwZGF0ZS5jCisrKysgYi9zcmMvdXBkYXRlLmMKK0BAIC0yNjYsNyArMjY2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9lbmQoaW50IGZkLCBjb25zdCBjaGFyICp1cGRhdGVfZm5hbWUsIGJvb2wgb2spCisgfQorIAorIHN0YXRpYyBpbnQgZG9fZmV0Y2hfdXBkYXRlKGludCB5ZWFyLCBjb25zdCBjaGFyICpkYl9kaXIsIEN2ZURCICpjdmVfZGIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkYl9leGlzdCwgYm9vbCB2ZXJib3NlKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGJfZXhpc3QsIGJvb2wgdmVyYm9zZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhpc19wZXJjZW50LCB1bnNpZ25lZCBpbnQgbmV4dF9wZXJjZW50KQorIHsKKyAgICAgICAgIGNvbnN0IGNoYXIgbnZkX3VyaVtdID0gVVJJX1BSRUZJWDsKKyAgICAgICAgIGF1dG9mcmVlKGN2ZV9zdHJpbmcpICp1cmlfbWV0YSA9IE5VTEw7CitAQCAtMzMwLDE0ICszMzEsMTQgQEAgcmVmZXRjaDoKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIC8qIEZldGNoIE5WRCBNRVRBIGZpbGUgKi8KKy0gICAgICAgIHN0ID0gZmV0Y2hfdXJpKHVyaV9tZXRhLT5zdHIsIG52ZGN2ZV9tZXRhLT5zdHIsIHZlcmJvc2UpOworKyAgICAgICAgc3QgPSBmZXRjaF91cmkodXJpX21ldGEtPnN0ciwgbnZkY3ZlX21ldGEtPnN0ciwgdmVyYm9zZSwgdGhpc19wZXJjZW50LCB0aGlzX3BlcmNlbnQpOworICAgICAgICAgaWYgKHN0ID09IEZFVENIX1NUQVRVU19GQUlMKSB7CisgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGZldGNoICVzXG4iLCB1cmlfbWV0YS0+c3RyKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgfQorIAorICAgICAgICAgLyogRmV0Y2ggTlZEIFhNTCBmaWxlICovCistICAgICAgICBzdCA9IGZldGNoX3VyaSh1cmlfZGF0YV9nei0+c3RyLCBudmRjdmVfZGF0YV9nei0+c3RyLCB2ZXJib3NlKTsKKysgICAgICAgIHN0ID0gZmV0Y2hfdXJpKHVyaV9kYXRhX2d6LT5zdHIsIG52ZGN2ZV9kYXRhX2d6LT5zdHIsIHZlcmJvc2UsIHRoaXNfcGVyY2VudCwgbmV4dF9wZXJjZW50KTsKKyAgICAgICAgIHN3aXRjaCAoc3QpIHsKKyAgICAgICAgIGNhc2UgRkVUQ0hfU1RBVFVTX0ZBSUw6CisgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGZldGNoICVzXG4iLCB1cmlfZGF0YV9nei0+c3RyKTsKK0BAIC00NTksMTAgKzQ2MCwxNyBAQCBib29sIHVwZGF0ZV9kYihib29sIHF1aWV0LCBjb25zdCBjaGFyICpkYl9maWxlKQorICAgICAgICAgZm9yIChpbnQgaSA9IFlFQVJfU1RBUlQ7IGkgPD0geWVhcisxOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgaW50IHkgPSBpID4geWVhciA/IC0xIDogaTsKKyAgICAgICAgICAgICAgICAgaW50IHJjOworKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnRfcGVyY2VudCA9ICgoaSswIC0gWUVBUl9TVEFSVCkgKiAxMDApIC8gKHllYXIrMiAtIFlFQVJfU1RBUlQpOworKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW5kX3BlcmNlbnQgPSAoKGkrMSAtIFlFQVJfU1RBUlQpICogMTAwKSAvICh5ZWFyKzIgLSBZRUFSX1NUQVJUKTsKKyAKKy0gICAgICAgICAgICAgICAgcmMgPSBkb19mZXRjaF91cGRhdGUoeSwgZGJfZGlyLCBjdmVfZGIsIGRiX2V4aXN0LCAhcXVpZXQpOworKyAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY29tcGxldGVkOiAldSUlXHIiLCBzdGFydF9wZXJjZW50KTsKKysgICAgICAgICAgICAgICAgcmMgPSBkb19mZXRjaF91cGRhdGUoeSwgZGJfZGlyLCBjdmVfZGIsIGRiX2V4aXN0LCAhcXVpZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3BlcmNlbnQsIGVuZF9wZXJjZW50KTsKKyAgICAgICAgICAgICAgICAgc3dpdGNoIChyYykgeworICAgICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJjb21wbGV0ZWQ6ICV1JSVcciIsIGVuZF9wZXJjZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgY2FzZSBFTk9NRU06CisgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvb207CistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY3ZlLWNoZWNrLXRvb2wvZmlsZXMvY2hlY2stZm9yLW1hbGxvY190cmltLWJlZm9yZS11c2luZy1pdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY3ZlLWNoZWNrLXRvb2wvZmlsZXMvY2hlY2stZm9yLW1hbGxvY190cmltLWJlZm9yZS11c2luZy1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc0YWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy9jaGVjay1mb3ItbWFsbG9jX3RyaW0tYmVmb3JlLXVzaW5nLWl0LnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gY2U2NDYzM2I5NzMzZTk2MmI4ZDg0ODIyNDQzMDFmNjE0ZDhiNTg0NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIyIEF1ZyAyMDE2IDIyOjU0OjI0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGZvciBtYWxsb2NfdHJpbSBiZWZvcmUgdXNpbmcgaXQKKworbWFsbG9jX3RyaW0gaXMgZ251IHNwZWNpZmljIGFuZCBub3QgYWxsIGxpYmMKK2ltcGxlbWVudCBpdCwgdGhyZWZvcmUgd3JpdGUgYSBjb25maWd1cmUgY2hlY2sKK3RvIHBva2UgZm9yIGl0IGZpcnN0IGFuZCB1c2UgdGhlIGRlZmluZSB0bworZ3VhcmQgaXRzIHVzZS4KKworSGVscHMgaW4gY29tcGlsaW5nIG9uIG11c2wgYmFzZWQgc3lzdGVtcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2lrZXlkb2hlcnR5L2N2ZS1jaGVjay10b29sL3B1bGwvNDhdCisgY29uZmlndXJlLmFjIHwgMiArKworIHNyYy9jb3JlLmMgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBkM2I2NmNlLi43OWMzNTQyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xOSw2ICsxOSw4IEBAIG00X2RlZmluZShbanNvbl9yZXF1aXJlZF92ZXJzaW9uXSwgWzAuMTYuMF0pCisgbTRfZGVmaW5lKFtvcGVuc3NsX3JlcXVpcmVkX3ZlcnNpb25dLFsxLjAuMF0pCisgIyBUT0RPOiBTZXQgbWluaW11bSBzcWxpdGUKKyAKKytBQ19DSEVDS19GVU5DU19PTkNFKG1hbGxvY190cmltKQorKworIFBLR19DSEVDS19NT0RVTEVTKENWRV9DSEVDS19UT09MLAorICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgIGdsaWItMi4wID49IGdsaWJfcmVxdWlyZWRfdmVyc2lvbiwKK2RpZmYgLS1naXQgYS9zcmMvY29yZS5jIGIvc3JjL2NvcmUuYworaW5kZXggNjI2MzAzMS4uMGQ1ZGYyOSAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlLmMKKysrKyBiL3NyYy9jb3JlLmMKK0BAIC00OTgsOSArNDk4LDkgQEAgYm9vbCBjdmVfZGJfbG9hZChDdmVEQiAqc2VsZiwgY29uc3QgY2hhciAqZm5hbWUpCisgICAgICAgICB9CisgCisgICAgICAgICBiID0gdHJ1ZTsKKy0KKysjaWZkZWYgSEFWRV9NQUxMT0NfVFJJTQorICAgICAgICAgbWFsbG9jX3RyaW0oMCk7CistCisrI2VuZGlmCisgICAgICAgICB4bWxGcmVlVGV4dFJlYWRlcihyKTsKKyAgICAgICAgIGlmIChmZCkgeworICAgICAgICAgICAgICAgICBjbG9zZShmZCk7CistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg5OWNkMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1TVU1NQVJZID0gIkNvbW1hbmQgbGluZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCAqLmRlc2t0b3AgZmlsZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscyIKLUxJQ0VOU0UgPSAiR1BMdjIiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgotREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9kZXNrdG9wLWZpbGUtdXRpbHMvcmVsZWFzZXMvZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9LnRhci54eiIKLQotU1JDX1VSSVttZDVzdW1dID0gImM2YjlmOWFhYzFlYTE0MzA5MTE3OGMyMzQzN2U2Y2QwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg0MzUzMjY3MjY5MmY5OGU5YjJkNmFlNmNjODY1OGRhNTYyZGZkZTE2MDZjN2YzM2Q5ZDIyN2EzNDRkZTU2YzUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQotCi1TID0gIiR7V09SS0RJUn0vZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9IgotCi1FWFRSQV9PRUNPTkYgKz0gImFjX2N2X3Byb2dfRU1BQ1M9bm8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkYWFiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMy5iYgpAQCAtMCwwICsxLDE4IEBACitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCAqLmRlc2t0b3AgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9kZXNrdG9wLWZpbGUtdXRpbHMvcmVsZWFzZXMvZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU5OTEzM2Q1MWNjOWE0MWJmZWMxODY0MTQ5MDZiNmYxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZjMDk0MDMxYmRlYzQ2YzlmNjIxNzA4ZjkxOTA4NGUxY2I1Mjk0ZTJjNWIxZTRjODgzYjNlNzBjYjg5MDMzODUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3Byb2dfRU1BQ1M9bm8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg4NzljOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotU1VNTUFSWSA9ICJBIHBhcmFsbGVsIGJ1aWxkIHN5c3RlbSIKLURFU0NSSVBUSU9OID0gImRpc3RjYyBpcyBhIHBhcmFsbGVsIGJ1aWxkIHN5c3RlbSB0aGF0IGRpc3RyaWJ1dGVzIFwKLWNvbXBpbGF0aW9uIG9mIEMvQysrL09iakMgY29kZSBhY3Jvc3MgbWFjaGluZXMgb24gYSBuZXR3b3JrLiIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCi0KLURFUEVORFMgPSAiYXZhaGkiCi0KLUdUS0NPTkZJRyA9ICJndGsiCi1HVEtDT05GSUdfbGliYy11Y2xpYmMgPSAiIgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJHtHVEtDT05GSUd9JywgJycsIGQpfSBwb3B0IgotUEFDS0FHRUNPTkZJR1tndGtdID0gIi0td2l0aC1ndGssLS13aXRob3V0LWd0ayAtLXdpdGhvdXQtZ25vbWUsZ3RrKyIKLSMgdXNlIHN5c3RlbSBwb3B0IGJ5IGRlZmF1bHQKLVBBQ0tBR0VDT05GSUdbcG9wdF0gPSAiLS13aXRob3V0LWluY2x1ZGVkLXBvcHQsLS13aXRoLWluY2x1ZGVkLXBvcHQscG9wdCIKLQotUlJFQ09NTUVORFNfJHtQTn0gPSAiYXZhaGktZGFlbW9uIgotCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZGlzdGNjL2Rpc3RjYy5naXQgXAotICAgICAgICAgICBmaWxlOi8vc2VwYXJhdGVidWlsZGRpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0IFwKLSAgICAgICAgICAgZmlsZTovL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wIFwKLSAgICAgICAgICAgZmlsZTovL2Rpc3RjYyBcCi0gICAgICAgICAgIGZpbGU6Ly9kaXN0Y2Muc2VydmljZSIKLVNSQ1JFViA9ICI5YTE3MmQzZDIwMDQyNzU0YTMwYzBjZDlhNWQ2M2ZkMWE4MTIwYzMxIgotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHVzZXJhZGQgc3lzdGVtZAotCi1FWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1XZXJyb3IgUFlUSE9OPS9kZXYvbnVsbCIKLQotVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKLVVTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gXAotICAgICAgICAgICAgICAgICAgICAgICAtLWhvbWUgL2Rldi9udWxsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSBcCi0gICAgICAgICAgICAgICAgICAgICAgIC0tZ2lkIG5vZ3JvdXAgXAotICAgICAgICAgICAgICAgICAgICAgICBkaXN0Y2MiCi0KLUlOSVRTQ1JJUFRfTkFNRSA9ICJkaXN0Y2MiCi0KLVNZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0iCi1TWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiZGlzdGNjLnNlcnZpY2UiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLwotICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAotICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Rpc3RjYyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCi0gICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Rpc3RjYwotICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCi0gICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGlzdGNjLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLSAgICBzZWQgLWkgLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rpc3RjYy5zZXJ2aWNlCi0gICAgJHtERVNLVE9QSU5TVEFMTH0KLX0KLURFU0tUT1BJTlNUQUxMID0gIiIKLURFU0tUT1BJTlNUQUxMX2xpYmMtZ2xpYmMgKCkgewotICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZGlzdGNjLwotICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2Rpc3RjYy8KLX0KLVBBQ0tBR0VTICs9ICJkaXN0Y2MtZGlzdG1vbi1nbm9tZSIKLQotRklMRVNfJHtQTn0gPSAiICR7c3lzY29uZmRpcn0gXAotCQkke2JpbmRpcn0vZGlzdGNjIFwKLSAgICAke2JpbmRpcn0vbHNkaXN0Y2MgXAotCQkke2JpbmRpcn0vZGlzdGNjZCBcCi0JCSR7YmluZGlyfS9kaXN0Y2Ntb24tdGV4dCBcCi0JCSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGlzdGNjLnNlcnZpY2UiCi1GSUxFU19kaXN0Y2MtZGlzdG1vbi1nbm9tZSA9ICIgICR7YmluZGlyfS9kaXN0Y2Ntb24tZ25vbWUgXAotCQkJCSR7ZGF0YWRpcn0vZGlzdGNjIgotCi1wa2dfcG9zdHJtXyR7UE59ICgpIHsKLQlkZWx1c2VyIGRpc3RjYyB8fCB0cnVlCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMi5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIkEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiZGlzdGNjIGlzIGEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIHRoYXQgZGlzdHJpYnV0ZXMgXAorY29tcGlsYXRpb24gb2YgQy9DKysvT2JqQyBjb2RlIGFjcm9zcyBtYWNoaW5lcyBvbiBhIG5ldHdvcmsuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJhdmFoaSBiaW51dGlscyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInBvcHQiCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0aywtLXdpdGhvdXQtZ3RrIC0td2l0aG91dC1nbm9tZSxndGsrIgorIyB1c2Ugc3lzdGVtIHBvcHQgYnkgZGVmYXVsdAorUEFDS0FHRUNPTkZJR1twb3B0XSA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcG9wdCwtLXdpdGgtaW5jbHVkZWQtcG9wdCxwb3B0IgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9kaXN0Y2MvZGlzdGNjLmdpdDticmFuY2g9JHtQVn0gXAorICAgICAgICAgICBmaWxlOi8vc2VwYXJhdGVidWlsZGRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc3RjYyBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2Muc2VydmljZSIKK1NSQ1JFViA9ICJkOGIxOGRmM2U5ZGNiZTRmMDkyYmVkNTY1ODM1ZDM5NzVlOTk0MzJjIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHVzZXJhZGQgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1XZXJyb3IgUFlUSE9OPScnIC0tZGlzYWJsZS1wdW1wLW1vZGUiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ob21lIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWdpZCBub2dyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGlzdGNjIgorCitJTklUU0NSSVBUX05BTUUgPSAiZGlzdGNjIgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImRpc3RjYy5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kaXN0Y2MgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaXN0Y2MKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rpc3RjYy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgc2VkIC1pIC1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaXN0Y2Muc2VydmljZQorICAgICR7REVTS1RPUElOU1RBTEx9Cit9CitERVNLVE9QSU5TVEFMTCA9ICIiCitERVNLVE9QSU5TVEFMTF9saWJjLWdsaWJjICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2Rpc3RjYy8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcCAke0R9JHtkYXRhZGlyfS9kaXN0Y2MvCit9CitQQUNLQUdFUyArPSAiZGlzdGNjLWRpc3Rtb24tZ25vbWUiCisKK0ZJTEVTXyR7UE59ID0gIiAke3N5c2NvbmZkaXJ9IFwKKwkJJHtiaW5kaXJ9L2Rpc3RjYyBcCisgICAgJHtiaW5kaXJ9L2xzZGlzdGNjIFwKKwkJJHtiaW5kaXJ9L2Rpc3RjY2QgXAorCQkke2JpbmRpcn0vZGlzdGNjbW9uLXRleHQgXAorCQkke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rpc3RjYy5zZXJ2aWNlIgorRklMRVNfZGlzdGNjLWRpc3Rtb24tZ25vbWUgPSAiICAke2JpbmRpcn0vZGlzdGNjbW9uLWdub21lIFwKKwkJCQkke2RhdGFkaXJ9L2Rpc3RjYyIKKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJZGVsdXNlciBkaXN0Y2MgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL3NlcGFyYXRlYnVpbGRkaXIucGF0Y2gKaW5kZXggYjllM2U0Mi4uNzU4MGI1NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoCkBAIC02LDE2ICs2LDE2IEBACiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCi1JbmRleDogZGlzdGNjLTMuMS9NYWtlZmlsZS5pbgorSW5kZXg6IGdpdC9NYWtlZmlsZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGRpc3RjYy0zLjEub3JpZy9NYWtlZmlsZS5pbgkyMDA4LTEyLTAyIDIxOjUwOjMxLjAwMDAwMDAwMCArMDAwMAotKysrIGRpc3RjYy0zLjEvTWFrZWZpbGUuaW4JMjAxMy0wMy0wOCAxMDo0OToyNC4yMjQ0MDA5MzcgKzAwMDAKLUBAIC0xMDg4LDcgKzEwODgsNyBAQAorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmluCisrKysgZ2l0L01ha2VmaWxlLmluCitAQCAtMTExNyw3ICsxMTE3LDcgQEAgaW5zdGFsbC1leGFtcGxlOiAkKGV4YW1wbGVfRE9DUykKICBpbnN0YWxsLWdub21lLWRhdGE6ICQoZ25vbWVfZGF0YSkKICAJJChta2luc3RhbGxkaXJzKSAiJChERVNURElSKSQocGtnZGF0YWRpcikiCi0gCWZvciBwIGluICQoZ25vbWVfZGF0YSk7IGRvCQkJCVwKLS0JJChJTlNUQUxMX0RBVEEpICIkJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCi0rCSQoSU5TVEFMTF9EQVRBKSAiJChzcmNkaXIpLyQkcCIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0IDE7IFwKKyAJZm9yIHAgaW4gJChnbm9tZV9kYXRhKTsgZG8gXAorLQkgICQoSU5TVEFMTF9EQVRBKSAiJCRwIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIHx8IGV4aXQgMTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAiJChzcmNkaXIpLyQkcCIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0IDE7IFwKICAJZG9uZQogIAogIGluc3RhbGwtY29uZjogJChjb25mX2ZpbGVzKSAkKGRlZmF1bHRfZmlsZXMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDRfNC41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0XzQuNS5iYgppbmRleCBkZTFiYzM5Li4yZjEzZGJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDRfNC41LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKQEAgLTExLDcgKzExLDcgQEAKICMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgogIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KICMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sXyR7UFZ9Lm9yaWcudGFyLmd6IFwKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjA3MjhUMDQzNDQzWi9wb29sL21haW4vZC9kb2Nib29rLXhtbC9kb2Nib29rLXhtbF8ke1BWfS5vcmlnLnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIFwKICAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhtbC54bWwgXApAQCAtMjAsNiArMjAsOCBAQAogU1JDX1VSSVttZDVzdW1dID0gIjQ4N2I0ZDQ0ZTE1Y2ZmYjFmNDA0OGFmMjNmOTgyMDhlIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImIwZjhlZGNmNjk3ZjUzMThlNjNkZDk4YzlhOTMxZjNmZWUxNjdhZjA4MDViYTQ0MWRiMzcyZTBmMTdiMmE0NGYiCiAKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC9kb2Nib29rLXhtbC8iCisKIFM9IiR7V09SS0RJUn0vZG9jYm9vay14bWwtNC41LmMzMTQyNCIKIAogaW5oZXJpdCBhbGxhcmNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCmluZGV4IGExYTU3NmEuLmM2MDU1NWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIj8+CiA8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLTxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9jYXRhbG9nLnhtbCIvPgotPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvY2F0YWxvZy54bWwiLz4KKzxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzL2NhdGFsb2cueG1sIi8+Cis8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzL2NhdGFsb2cueG1sIi8+CiA8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzXzEuNzguMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmRlM2FiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotU1VNTUFSWSA9ICJYU0wgc3R5bGVzaGVldHMgZm9yIHByb2Nlc3NpbmcgRG9jQm9vayBYTUwgdG8gdmFyaW91cyBvdXRwdXQgZm9ybWF0cyIKLUhPTUVQQUdFID0gImh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldCIKLUxJQ0VOU0UgPSAiWFNMIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZlZWVlZDQzZDQ5OGMyMmE4MzUzODI1MzMzNTY0NjIiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY2Jvb2svZG9jYm9vay14c2wtJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhzbC54bWwgXAotICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2ZGQwZjg5MTMxY2MzNWJmNGYyZWQxMDVhMWMxNzc3MSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjOThmNzI5NmFiNWM4Y2NkMmUwYmMwNzYzNDk3NmEzN2Y1MDg0N2RmMmQ4YTU5YmRiMWUxNTc2NjQ3MDBiNDY3IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9kb2Nib29rL2ZpbGVzL2RvY2Jvb2steHNsLyIKLSMgUmVqZWN0IHZlcnNpb25zIGVuZGluZyBpbiAuMCBhcyB0aG9zZSBhcmUgcmVsZWFzZSBjYW5kaWRhdGVzCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvZG9jYm9vay14c2wvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSsoPyFcLjApXC5cZCspLyIKLQotUyA9ICIke1dPUktESVJ9L2RvY2Jvb2steHNsLSR7UFZ9IgotCi1pbmhlcml0IGFsbGFyY2gKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1TU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MiCi0KLWRvX2NvbmZpZ3VyZSAoKXsKLQk6Ci19Ci0KLWRvX2NvbXBpbGUgKCl7Ci0JOgotfQotCi1kb19pbnN0YWxsICgpIHsKLQkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay14c2wuaHRtbAotCSMgZm9yIGRldGFpbHMuCi0JaW5zdGFsbCAtdiAtbTc1NSAtZCAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtJHtQVn0KLQlsbiAtcyB4c2wtc3R5bGVzaGVldHMtJHtQVn0gJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzCi0KLQljcCAtdiAtUiBWRVJTSU9OIGNvbW1vbiBlY2xpcHNlIGVwdWIgZXh0ZW5zaW9ucyBmbyBoaWdobGlnaHRpbmcgaHRtbCBcCi0JCWh0bWxoZWxwIGltYWdlcyBqYXZhaGVscCBsaWIgbWFucGFnZXMgcGFyYW1zIHByb2ZpbGluZyBcCi0JCXJvdW5kdHJpcCBzbGlkZXMgdGVtcGxhdGUgdGVzdHMgdG9vbHMgd2ViaGVscCB3ZWJzaXRlIFwKLQkJeGh0bWwgeGh0bWwtMV8xIGNhdGFsb2cueG1sIFwKLQkke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xCi0KLQlsbiAtcyBWRVJTSU9OICR7RH0vJHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL1ZFUlNJT04ueHNsCi0KLQlpbnN0YWxsIC12IC1tNjQ0IC1EIFJFQURNRSBcCi0JCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0xLjc4LjEvUkVBRE1FLnR4dAotCWluc3RhbGwgLXYgLW02NDQgICAgUkVMRUFTRS1OT1RFUyogTkVXUyogXAotCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtMS43OC4xCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KLQlpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9kb2Nib29rLXhzbC54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAotCi19Ci0KLWRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCAoKSB7Ci0gICAgaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQotICAgIHRoZW4KLSAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKLSAgICAgICAgIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgotICAgICAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy4qL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAotICAgIGZpCi19Ci0KLWRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7Ci0gICAgIyBVcGRhdGUgdGhlIGhhcmRjb2RlIGRpciBpbiBkb2Nib29rLXhtbC54bWwKLSAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKLX0KLQotUkRFUEVORFNfJHtQTn0gKz0gInBlcmwiCi1GSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L3htbC8qICR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbCIKLUZJTEVTXyR7UE59LWRvYyA9ICIke2RhdGFkaXJ9L2RvYy8qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc5LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzXzEuNzkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTAzYTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc5LjEuYmIKQEAgLTAsMCArMSw3NCBAQAorU1VNTUFSWSA9ICJYU0wgc3R5bGVzaGVldHMgZm9yIHByb2Nlc3NpbmcgRG9jQm9vayBYTUwgdG8gdmFyaW91cyBvdXRwdXQgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldCIKK0xJQ0VOU0UgPSAiWFNMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmJlYWRkOThmOWM1NGFiMGMzODdlMTQyMTFlZTRkMGUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY2Jvb2svZG9jYm9vay14c2wtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhzbC54bWwgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNDhjYmY5MjlhMmFkODVlNjY3MmY3MTA3NzdjYTdiYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MjVmNDUyZTEyYjI5Njk1NmU4YmZiODc2Y2NlY2U3MWVlZWNkZDE0Yjk0ZjY2N2YzZWQ5MDkxNzYxYTRhOTY4IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9kb2Nib29rL2ZpbGVzL2RvY2Jvb2steHNsLyIKKyMgUmVqZWN0IHZlcnNpb25zIGVuZGluZyBpbiAuMCBhcyB0aG9zZSBhcmUgcmVsZWFzZSBjYW5kaWRhdGVzCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvZG9jYm9vay14c2wvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSsoPyFcLjApXC5cZCspLyIKKworUyA9ICIke1dPUktESVJ9L2RvY2Jvb2steHNsLSR7UFZ9IgorCitpbmhlcml0IGFsbGFyY2gKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCl7CisJOgorfQorCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay14c2wuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtdiAtbTc1NSAtZCAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtJHtQVn0KKwlsbiAtcyB4c2wtc3R5bGVzaGVldHMtJHtQVn0gJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzCisKKwljcCAtdiAtUiBWRVJTSU9OIGFzc2VtYmx5IGNvbW1vbiBlY2xpcHNlIGVwdWIgZXB1YjMgZm8gXAorCQloaWdobGlnaHRpbmcgaHRtbCBodG1saGVscCBpbWFnZXMgamF2YWhlbHAgbGliIG1hbnBhZ2VzIFwKKwkJcGFyYW1zIHByb2ZpbGluZyByb3VuZHRyaXAgc2xpZGVzIHRlbXBsYXRlIHdlYmhlbHAgd2Vic2l0ZSBcCisJCXhodG1sIHhodG1sLTFfMSB4aHRtbDUgY2F0YWxvZy54bWwgXAorCQkke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtJHtQVn0KKworCWxuIC1zIFZFUlNJT04gJHtEfS8ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0ke1BWfS9WRVJTSU9OLnhzbAorCisJaW5zdGFsbCAtdiAtbTY0NCAtRCBSRUFETUUgXAorCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtJHtQVn0vUkVBRE1FLnR4dAorCWluc3RhbGwgLXYgLW02NDQgICAgUkVMRUFTRS1OT1RFUyogTkVXUyogXAorCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtJHtQVn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veG1sLworCWluc3RhbGwgLW0gNzU1ICAke1dPUktESVJ9L2RvY2Jvb2steHNsLnhtbCAke0R9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCisKK30KKworZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKyAgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisgICAgdGhlbgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorICAgICAgICAjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisgICAgICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vLiovdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCisgICAgZmkKK30KKworZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICAjIFVwZGF0ZSB0aGUgaGFyZGNvZGUgZGlyIGluIGRvY2Jvb2steG1sLnhtbAorICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorfQorCitSREVQRU5EU18ke1BOfSArPSAicGVybCIKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0veG1sLyogJHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sIgorRklMRVNfJHtQTn0tZG9jID0gIiR7ZGF0YWRpcn0vZG9jLyoiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLW1rZnMuZmF0LWZpeC1pbmNvcnJlY3QtaW50LXR5cGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLW1rZnMuZmF0LWZpeC1pbmNvcnJlY3QtaW50LXR5cGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTdjYTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1ta2ZzLmZhdC1maXgtaW5jb3JyZWN0LWludC10eXBlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotRnJvbSAzYjk1Nzg2YWYxM2UyODE1N2Q4ODliZDkwYTM4NGVlMjU1ZjJkOTFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogIllhbm4gRS4gTU9SSU4iIDx5YW5uLm1vcmluLjE5OThAZnJlZS5mcj4KLURhdGU6IFN1biwgMTYgQXVnIDIwMTUgMTU6NTU6NDMgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gbWtmcy5mYXQ6IGZpeCBpbmNvcnJlY3QgaW50IHR5cGUKLQotdV9pbnQzMl90IGlzIG5vdCBhIHN0YW5hcmQgdHlwZSwgd2hpbGUgdWludDMyX3QgaXMuIFRoaXMgZml4ZXMgYnVpbGRzCi13aXRoIHRoZSBtdXNsIEMgbGlicmFyeSwgd2hpY2ggb25seSBkZWZpbmVzIHNvLWNhbGxlZCAiY2xlYW4iIGhlYWRlcnM7Ci1idWlsZCBmYWlsdXJlcyBhcmUgbGlrZSAoYmFjay1xdW90ZXMgYW5kIGVsaXNpb24gbWFudWFsbHkgYWRkZWQgZm9yCi1yZWFkYWJpbGl0eSk6Ci0KLSAgICBodHRwOi8vYXV0b2J1aWxkLmJ1aWxkcm9vdC5vcmcvcmVzdWx0cy9hMDkvYTA5MjNkN2Y2ZDRkYmFlMDJlYmE0YzUwMjRiYmRhZTNhNTJhYTg1YS9idWlsZC1lbmQubG9nCi0KLSAgICAvaG9tZS9wZWtvL2F1dG9idWlsZC9pbnN0YW5jZS0xL291dHB1dC9ob3N0L3Vzci9iaW4veDg2XzY0LWxpbnV4LWdjYyAtRF9MQVJHRUZJTEVfU09VUkNFIFwKLSAgICAgICAgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgICAtT3MgIC1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFX1NPVVJDRSBcCi0gICAgICAgIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0ICAtYyAtbyBta2ZzLmZhdC5vIHNyYy9ta2ZzLmZhdC5jCi0gICAgc3JjL21rZnMuZmF0LmM6IEluIGZ1bmN0aW9uICdtYWluJzoKLSAgICBzcmMvbWtmcy5mYXQuYzoxNDE1OjE4OiBlcnJvcjogJ3VfaW50MzJfdCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCi0gICAgICAgICB2b2x1bWVfaWQgPSAodV9pbnQzMl90KSAoKGNyZWF0ZV90aW1ldmFsLnR2X3NlYyA8PCAyMCkgfCBjcmVhdGVfdGltZXZhbC50dl91c2VjKTsgWy4uLl0KLSAgICAgICAgICAgICAgICAgICAgICBeCi0gICAgc3JjL21rZnMuZmF0LmM6MTQxNToxODogbm90ZTogZWFjaCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlIGZvciBlYWNoCi0gICAgZnVuY3Rpb24gaXQgYXBwZWFycyBpbgotCi1TaWduZWQtb2ZmLWJ5OiAiWWFubiBFLiBNT1JJTiIgPHlhbm4ubW9yaW4uMTk5OEBmcmVlLmZyPgotU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBCb21iZSA8YWViQGRlYmlhbi5vcmc+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotIHNyYy9ta2ZzLmZhdC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL21rZnMuZmF0LmMgYi9zcmMvbWtmcy5mYXQuYwotaW5kZXggYjM4ZDExNi4uZGRkYmUyNCAxMDA2NDQKLS0tLSBhL3NyYy9ta2ZzLmZhdC5jCi0rKysgYi9zcmMvbWtmcy5mYXQuYwotQEAgLTE0MTIsNyArMTQxMiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAKLSAgICAgZ2V0dGltZW9mZGF5KCZjcmVhdGVfdGltZXZhbCwgTlVMTCk7Ci0gICAgIGNyZWF0ZV90aW1lID0gY3JlYXRlX3RpbWV2YWwudHZfc2VjOwotLSAgICB2b2x1bWVfaWQgPSAodV9pbnQzMl90KSAoKGNyZWF0ZV90aW1ldmFsLnR2X3NlYyA8PCAyMCkgfCBjcmVhdGVfdGltZXZhbC50dl91c2VjKTsJLyogRGVmYXVsdCB2b2x1bWUgSUQgPSBjcmVhdGlvbiB0aW1lLCBmdWRnZWQgZm9yIG1vcmUgdW5pcXVlbmVzcyAqLwotKyAgICB2b2x1bWVfaWQgPSAodWludDMyX3QpICgoY3JlYXRlX3RpbWV2YWwudHZfc2VjIDw8IDIwKSB8IGNyZWF0ZV90aW1ldmFsLnR2X3VzZWMpOwkvKiBEZWZhdWx0IHZvbHVtZSBJRCA9IGNyZWF0aW9uIHRpbWUsIGZ1ZGdlZCBmb3IgbW9yZSB1bmlxdWVuZXNzICovCi0gICAgIGNoZWNrX2F0YXJpKCk7Ci0gCi0gICAgIHByaW50ZigibWtmcy5mYXQgIiBWRVJTSU9OICIgKCIgVkVSU0lPTl9EQVRFICIpXG4iKTsKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbGFyZ2VmaWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbGFyZ2VmaWxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjdkODM1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2xhcmdlZmlsZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLWRlZmVyIHNldHRpbmcgbGFyZ2VmaWxlIGZsYWdzIHRvIGJ1aWxkIG1ha2VyeQotaW4gYSBjcm9zcyBidWlsZCB3ZSBjYW4gbm90IGRvIHJ1bnRpbWUgY29uZmlnIHRlc3RzCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbQ3Jvc3MgY29tcGlsZSBTcGVjaWZpY10KLUluZGV4OiBkb3Nmc3Rvb2xzLTMuMC4yOC9NYWtlZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGRvc2ZzdG9vbHMtMy4wLjI4Lm9yaWcvTWFrZWZpbGUKLSsrKyBkb3Nmc3Rvb2xzLTMuMC4yOC9NYWtlZmlsZQotQEAgLTI3LDggKzI3LDcgQEAgU0JJTkRJUiA9ICQoUFJFRklYKS9zYmluCi0gRE9DRElSID0gJChQUkVGSVgpL3NoYXJlL2RvYwotIE1BTkRJUiA9ICQoUFJFRklYKS9zaGFyZS9tYW4KLSAKLS0jT1BURkxBR1MgPSAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0tT1BURkxBR1MgPSAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURfR05VX1NPVVJDRSAkKHNoZWxsIGdldGNvbmYgTEZTX0NGTEFHUykKLStPUFRGTEFHUyA9IC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgotICNXQVJORkxBR1MgPSAtV2FsbCAtcGVkYW50aWMgLXN0ZD1jOTkKLSBXQVJORkxBR1MgPSAtV2FsbCAtV2V4dHJhIC1Xbm8tc2lnbi1jb21wYXJlIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3dyaXRlLXN0cmluZ3MKLSBERUJVR0ZMQUdTID0gLWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjM2U0MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18zLjAuMjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGRvc2ZzdG9vbHMgT0UgYnVpbGQgZmlsZQotIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotIyBDb3B5cmlnaHQgKEMpIDIwMTUsIFPDg8K2cmVuIEJyaW5rbWFubiA8c29lcmVuLmJyaW5rbWFubkBnbWFpbD4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLSMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKLVNVTU1BUlkgPSAiRE9TIEZBVCBGaWxlc3lzdGVtIFV0aWxpdGllcyIKLUhPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMiCi0KLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLQotU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzL3JlbGVhc2VzL2Rvd25sb2FkL3YzLjAuMjgvZG9zZnN0b29scy0zLjAuMjgudGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2xhcmdlZmlsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLW1rZnMuZmF0LWZpeC1pbmNvcnJlY3QtaW50LXR5cGUucGF0Y2ggXAotICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI2YTA0N2E2YzY1MTg2YjllYmIxODUzNzA5YWRiMzZkYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlZTk1OTEzMDQ0ZWNmMjcxOWI2M2VhMTEyMTI5MTc2NDk3MDlhNmU1MzIwOWE3MmQ2MjIxMzVhYWE4NTE3ZWUyIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9yZWxlYXNlcyIKLQotQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJy1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCcsICcnLCBkKX0iCi0KLUZJTEVTXyR7UE59ID0gIiR7YmFzZV9zYmluZGlyfSIKLUZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0gJHtkb2NkaXJ9IgotCi1kb19pbnN0YWxsICgpIHsKLQlvZV9ydW5tYWtlICJQUkVGSVg9JHtEfSR7cHJlZml4fSIgIlNCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfSIgXAotCQkgICAiTUFORElSPSR7RH0ke21hbmRpcn0iICJET0NESVI9JHtEfSR7ZG9jZGlyfSIgaW5zdGFsbAotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzQuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2IxZjYxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfNC4wLmJiCkBAIC0wLDAgKzEsMjUgQEAKKyMgZG9zZnN0b29scyBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIENvcHlyaWdodCAoQykgMjAxNSwgU8ODwrZyZW4gQnJpbmttYW5uIDxzb2VyZW4uYnJpbmttYW5uQGdtYWlsPiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorU1VNTUFSWSA9ICJET1MgRkFUIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scyIKKworU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvcmVsZWFzZXMvZG93bmxvYWQvdiR7UFZ9LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjIwZjgzODhiOTk3MDJmMjc2Yzk3M2QyMjhjN2NmZjQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwMzc3Mzg5NTM1NTlkMWVmZTA0ZmM1NDA4YjY4NDYyMTZjYzAxMzhmN2Y5ZDMyZGU4MGI2ZWMzYzM1ZTdkYWYiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzL3JlbGVhc2VzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC11ZGV2IC0tZW5hYmxlLWNvbXBhdC1zeW1saW5rcyIKKworQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJy1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCcsICcnLCBkKX0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jCmluZGV4IDNkOWU3ZTMuLmU4ZDhhOWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMKQEAgLTIsMTUgKzIsMTMgQEAKIExJQ0VOU0UgPSAiR1BMdjIuMCsiCiBTRUNUSU9OID0gImJhc2UiCiAKLVNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvZHBrZy9kcGtnXyR7UFZ9LnRhci54eiIKLQotU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoIgotCiBERVBFTkRTID0gInpsaWIgYnppcDIgcGVybCBuY3Vyc2VzIgogREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUgcGVybC1uYXRpdmUiCiBSREVQRU5EU18ke1BOfSA9ICIke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSB4eiBydW4tcG9zdGluc3RzIHBlcmwiCiBSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAieHotbmF0aXZlIgogCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvZHBrZy8iCisKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGVybG5hdGl2ZSBwa2djb25maWcgc3lzdGVtZAogCiBweXRob24gKCkgewpAQCAtMzUsNiArMzMsNyBAQAogCQkiCiAKIEVYVFJBX09FQ09ORiArPSAiVEFSPXRhciIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBERUJfSE9TVF9BUkNIPSR7RFBLR19BUkNIfSIKIAogZG9fY29uZmlndXJlICgpIHsKICAgICBlY2hvID4+ICR7U30vbTQvY29tcGlsZXIubTQKQEAgLTc0LDYgKzczLDE0IEBACiBQQUNLQUdFUyArPSAiJHtQTn0tcGVybCIKIEZJTEVTXyR7UE59LXBlcmwgPSAiJHtsaWJkaXJ9L3BlcmwiCiAKKyMgU3BsaXQgb3V0IHN0YXJ0LXN0b3AtZGFlbW9uIHRvIGl0cyBvd24gcGFja2FnZS4gIE5vdGUgdGhhdCBpdAorIyBpcyBpbnN0YWxsZWQgaW4gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IHRoYW4gdGhlIG9uZSB1c2VkIGZvcgorIyB0aGUgYml0YmFrZSB2ZXJzaW9uLgorIworUEFDS0FHRVMgPSsgIiR7UE59LXN0YXJ0LXN0b3AiCitGSUxFU18ke1BOfS1zdGFydC1zdG9wID0gIiR7c2JpbmRpcn0vc3RhcnQtc3RvcC1kYWVtb24iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zdGFydC1zdG9wIgorCisKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDllZjg1My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1Gcm9tIGUzOTFiZGJhMjM4ZDEzNzFmYzViNjdjZGFlMDhiMDZlYjVhZGE1YzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTU6NDg6MTMgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gV2hlbiBydW5uaW5nIGRvX3BhY2thZ2Vfd3JpdGVfZGViLCB3ZSBoYXZlIHRyZWVzIG9mCi0gaGFyZGxpbmtlZCBmaWxlcyBzdWNoIGFzIHRoZSBkYmcgc291cmNlIGZpbGVzIGluICR7UE59LWRiZy4gSWYgc29tZXRoaW5nCi0gbWFrZXMgYW5vdGhlciBjb3B5IG9mIG9uZSBvZiB0aG9zZSBmaWxlcyAob3IgZGVsZXRlcyBvbmUpLCB0aGUgbnVtYmVyIG9mCi0gbGlua3MgYSBmaWxlIGhhcyBjaGFuZ2VzIGFuZCB0YXIgY2FuIG5vdGljZSB0aGlzLCBlLmcuOgotCi18IERFQlVHOiBFeGVjdXRpbmcgcHl0aG9uIGZ1bmN0aW9uIGRvX3BhY2thZ2VfZGViCi18IGRwa2ctZGViOiBidWlsZGluZyBwYWNrYWdlIGBzZWQtcHRlc3QnIGluIGAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3NlZC80LjIuMi1yMC9kZXBsb3ktZGVicy9pNTg2L3NlZC1wdGVzdF80LjIuMi1yMC4zX2kzODYuZGViJy4KLXwgdGFyOiAuL3Vzci9saWIvc2VkL3B0ZXN0L3Rlc3RzdWl0ZS90c3QtcmVnZXgyOiBmaWxlIGNoYW5nZWQgYXMgd2UgcmVhZCBpdAotfCBkcGtnLWRlYjogZXJyb3I6IHN1YnByb2Nlc3MgdGFyIC1jZiByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAxCi0KLVRhciByZXR1cm5zIGFuIGVycm9yIG9mIDEgd2hlbiBmaWxlcyAnY2hhbmdlJyBhbmQgb3RoZXIgZXJyb3JzIGNvZGVzCi1pbiBvdGhlciBlcnJvciBjYXNlcy4gV2UgdHdlYWsgZHBrZy1kZWIgaGVyZSBzbyB0aGF0IGl0IGlnbm9yZXMgYW4gZXhpdAotY29kZSBvZiAxIGZyb20gdGFyLiBUaGUgZmlsZXMgZG9uJ3QgcmVhbGx5IGNoYW5nZSAoYW5kIHdlIGhhdmUgbG9ja2luZyBpbgotcGxhY2UgdG8gYXZvaWQgdGhhdCBraW5kIG9mIGlzc3VlKS4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCi1SUCAyMDE1LzMvMjcKLS0tLQotIGRwa2ctZGViL2J1aWxkLmMgfCAxMiArKysrKysrKy0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZHBrZy1kZWIvYnVpbGQuYyBiL2Rwa2ctZGViL2J1aWxkLmMKLWluZGV4IDJkZGVlYzYuLmFmMzYzZjAgMTAwNjQ0Ci0tLS0gYS9kcGtnLWRlYi9idWlsZC5jCi0rKysgYi9kcGtnLWRlYi9idWlsZC5jCi1AQCAtNDUyLDcgKzQ1Miw3IEBAIHN0YXRpYyB2b2lkCi0gdGFyYmFsbF9wYWNrKGNvbnN0IGNoYXIgKmRpciwgZmlsZW5hbWVzX2ZlZWRfZnVuYyAqdGFyX2ZpbGVuYW1lc19mZWVkZXIsCi0gICAgICAgICAgICAgIHN0cnVjdCBjb21wcmVzc19wYXJhbXMgKnRhcl9jb21wcmVzc19wYXJhbXMsIGludCBmZF9vdXQpCi0gewotLSAgaW50IHBpcGVfZmlsZW5hbWVzWzJdLCBwaXBlX3RhcmJhbGxbMl07Ci0rICBpbnQgcGlwZV9maWxlbmFtZXNbMl0sIHBpcGVfdGFyYmFsbFsyXSwgcmM7Ci0gICBwaWRfdCBwaWRfdGFyLCBwaWRfY29tcDsKLSAKLSAgIC8qIEZvcmsgb2ZmIGEgdGFyLiBXZSB3aWxsIGZlZWQgaXQgYSBsaXN0IG9mIGZpbGVuYW1lcyBvbiBzdGRpbiBsYXRlci4gKi8KLUBAIC00OTMsNyArNDkzLDkgQEAgdGFyYmFsbF9wYWNrKGNvbnN0IGNoYXIgKmRpciwgZmlsZW5hbWVzX2ZlZWRfZnVuYyAqdGFyX2ZpbGVuYW1lc19mZWVkZXIsCi0gICAvKiBBbGwgZG9uZSwgY2xlYW4gdXAgd2FpdCBmb3IgdGFyIGFuZCA8Y29tcHJlc3M+IHRvIGZpbmlzaCB0aGVpciBqb2IuICovCi0gICBjbG9zZShwaXBlX2ZpbGVuYW1lc1sxXSk7Ci0gICBzdWJwcm9jX3JlYXAocGlkX2NvbXAsIF8oIjxjb21wcmVzcz4gZnJvbSB0YXIgLWNmIiksIDApOwotLSAgc3VicHJvY19yZWFwKHBpZF90YXIsICJ0YXIgLWNmIiwgMCk7Ci0rICByYyA9IHN1YnByb2NfcmVhcChwaWRfdGFyLCAidGFyIC1jZiIsIFNVQlBST0NfUkVURVJST1IpOwotKyAgaWYgKHJjICYmIHJjICE9IDEpCi0rICAgIG9oc2hpdGUoXygic3VicHJvY2VzcyAlcyByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAlZCIpLCAidGFyIC1jZiIsIHJjKTsKLSB9Ci0gCi0gLyoqCi1AQCAtNTA5LDcgKzUxMSw3IEBAIGRvX2J1aWxkKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQotICAgY2hhciAqZGViYXI7Ci0gICBjaGFyICp0ZmJ1ZjsKLSAgIGludCBhcmZkOwotLSAgaW50IHAxWzJdLCBnemZkOwotKyAgaW50IHAxWzJdLCBnemZkLCByYzsKLSAgIHBpZF90IGMxLCBjMjsKLSAKLSAgIC8qIERlY29kZSBvdXIgYXJndW1lbnRzLiAqLwotQEAgLTU5MCw3ICs1OTIsOSBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKLSAgIH0KLSAgIGNsb3NlKHAxWzBdKTsKLSAgIHN1YnByb2NfcmVhcChjMiwgXygiPGNvbXByZXNzPiBmcm9tIHRhciAtY2YiKSwgMCk7Ci0tICBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgMCk7Ci0rICByYyA9IHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCBTVUJQUk9DX1JFVEVSUk9SKTsKLSsgIGlmIChyYyAmJiByYyAhPSAxKQotKyAgICBvaHNoaXRlKF8oInN1YnByb2Nlc3MgJXMgcmV0dXJuZWQgZXJyb3IgZXhpdCBzdGF0dXMgJWQiKSwgInRhciAtY2YiLCByYyk7Ci0gCi0gICBpZiAobHNlZWsoZ3pmZCwgMCwgU0VFS19TRVQpKQotICAgICBvaHNoaXRlKF8oImZhaWxlZCB0byByZXdpbmQgdGVtcG9yYXJ5IGZpbGUgKCVzKSIpLCBfKCJjb250cm9sIG1lbWJlciIpKTsKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoCmluZGV4IDlmNzdjNmMuLjgwNTA0Y2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2gKQEAgLTgsMzAgKzgsNDEgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCiAKIFJQIDIwMTEvMTIvMDcKK0FMSU1PTiAyMDE2LzA1LzI2CisKIC0tLQotIHNyYy9zY3JpcHQuYyB8IDMxICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKyBzcmMvc2NyaXB0LmMgfCAzOSArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL3NyYy9zY3JpcHQuYyBiL3NyYy9zY3JpcHQuYwotaW5kZXggYTk1ODE0NS4uMjRjNDlmOSAxMDA2NDQKK2luZGV4IDNjODhiZTguLmNlNjZhODYgMTAwNjQ0CiAtLS0gYS9zcmMvc2NyaXB0LmMKICsrKyBiL3NyYy9zY3JpcHQuYwotQEAgLTEwMCwzNiArMTAwLDkgQEAgbWFpbnRzY3JpcHRfcHJlX2V4ZWMoc3RydWN0IGNvbW1hbmQgKmNtZCkKLSAJc2l6ZV90IGluc3RkaXJsID0gc3RybGVuKGluc3RkaXIpOwotIAotIAlpZiAoKmluc3RkaXIpIHsKK0BAIC05Nyw0MyArOTcsMTAgQEAgc2V0ZXhlY3V0ZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3RhYikKKyBzdGF0aWMgY29uc3QgY2hhciAqCisgbWFpbnRzY3JpcHRfcHJlX2V4ZWMoc3RydWN0IGNvbW1hbmQgKmNtZCkKKyB7CistCWNvbnN0IGNoYXIgKmFkbWluZGlyID0gZHBrZ19kYl9nZXRfZGlyKCk7CistCWNvbnN0IGNoYXIgKmNoYW5nZWRpciA9IGZjX3NjcmlwdF9jaHJvb3RsZXNzID8gaW5zdGRpciA6ICIvIjsKKy0Jc2l6ZV90IGluc3RkaXJsID0gc3RybGVuKGluc3RkaXIpOworLQorLQlpZiAoKmluc3RkaXIgJiYgIWZjX3NjcmlwdF9jaHJvb3RsZXNzKSB7CiAtCQlpZiAoc3RybmNtcChhZG1pbmRpciwgaW5zdGRpciwgaW5zdGRpcmwpICE9IDApCiAtCQkJb2hzaGl0KF8oImFkbWluZGlyIG11c3QgYmUgaW5zaWRlIGluc3RkaXIgZm9yIGRwa2cgdG8gd29yayBwcm9wZXJseSIpKTsKIC0JCWlmIChzZXRlbnYoIkRQS0dfQURNSU5ESVIiLCBhZG1pbmRpciArIGluc3RkaXJsLCAxKSA8IDApCiAtCQkJb2hzaGl0ZShfKCJ1bmFibGUgdG8gc2V0ZW52IGZvciBzdWJwcm9jZXNzZXMiKSk7CistCQlpZiAoc2V0ZW52KCJEUEtHX1JPT1QiLCAiIiwgMSkgPCAwKQorLQkJCW9oc2hpdGUoXygidW5hYmxlIHRvIHNldGVudiBmb3Igc3VicHJvY2Vzc2VzIikpOwogLQogLQkJaWYgKGNocm9vdChpbnN0ZGlyKSkKIC0JCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaHJvb3QgdG8gJyUuMjUwcyciKSwgaW5zdGRpcik7Ci0tCX0KKysJaWYgKCppbnN0ZGlyKSB7CisrCQlzZXRlbnYoIkQiLCBpbnN0ZGlyLCAxKTsKKyAJfQogLQkvKiBTd2l0Y2ggdG8gYSBrbm93biBnb29kIGRpcmVjdG9yeSB0byBnaXZlIHRoZSBtYWludGFpbmVyIHNjcmlwdAogLQkgKiBhIHNhbmVyIGVudmlyb25tZW50LCBhbHNvIG5lZWRlZCBhZnRlciB0aGUgY2hyb290KCkuICovCi0tCWlmIChjaGRpcigiLyIpKQotLQkJb2hzaGl0ZShfKCJmYWlsZWQgdG8gY2hkaXIgdG8gJyUuMjU1cyciKSwgIi8iKTsKKy0JaWYgKGNoZGlyKGNoYW5nZWRpcikpCistCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaGRpciB0byAnJS4yNTVzJyIpLCBjaGFuZ2VkaXIpOwogLQlpZiAoZGVidWdfaGFzX2ZsYWcoZGJnX3NjcmlwdHMpKSB7CiAtCQlzdHJ1Y3QgdmFyYnVmIGFyZ3MgPSBWQVJCVUZfSU5JVDsKIC0JCWNvbnN0IGNoYXIgKiphcmd2ID0gY21kLT5hcmd2OwpAQCAtNDQsOSArNTUsOCBAQAogLQkJZGVidWcoZGJnX3NjcmlwdHMsICJmb3JrL2V4ZWMgJXMgKCVzICkiLCBjbWQtPmZpbGVuYW1lLAogLQkJICAgICAgYXJncy5idWYpOwogLQkJdmFyYnVmX2Rlc3Ryb3koJmFyZ3MpOwotKwkJc2V0ZW52KCJEIiwgaW5zdGRpciwgMSk7Ci0gCX0KLS0JaWYgKCFpbnN0ZGlybCkKKy0JfQorLQlpZiAoIWluc3RkaXJsIHx8IGZjX3NjcmlwdF9jaHJvb3RsZXNzKQogLQkJcmV0dXJuIGNtZC0+ZmlsZW5hbWU7CiAtCiAtCWFzc2VydChzdHJsZW4oY21kLT5maWxlbmFtZSkgPj0gaW5zdGRpcmwpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaAppbmRleCBhZjI3NWRlLi5kYzY5ZWIyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaApAQCAtMjUsMTQgKzI1LDIyIEBACiAKIFNpZ25lZC1vZmYtYnk6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KIAotZGlmZiAtTmF1cnAgZHBrZy0xLjE3LjIxX29yZy90cmlwbGV0dGFibGUgZHBrZy0xLjE3LjIxL3RyaXBsZXR0YWJsZQotLS0tIGRwa2ctMS4xNy4yMV9vcmcvdHJpcGxldHRhYmxlCTIwMTUtMDQtMDggMTc6MDg6NTIuMzcwNzU5MTcxICswNTMwCi0rKysgZHBrZy0xLjE3LjIxL3RyaXBsZXR0YWJsZQkyMDE1LTA0LTA4IDE3OjA5OjEyLjQwNjc1MjA4MSArMDUzMAotQEAgLTksNiArOSw3IEBAIG11c2xlYWJpaGYtbGludXgtYXJtCW11c2wtbGludXgtYXJtaGYKLSBtdXNsLWxpbnV4LTxjcHU+CW11c2wtbGludXgtPGNwdT4KLSBnbnVlYWJpaGYtbGludXgtYXJtCWFybWhmCistLS0KKyB0cmlwbGV0dGFibGUgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3RyaXBsZXR0YWJsZSBiL3RyaXBsZXR0YWJsZQoraW5kZXggYWJlNDcyNi4uMWU5YzI0NyAxMDA2NDQKKy0tLSBhL3RyaXBsZXR0YWJsZQorKysrIGIvdHJpcGxldHRhYmxlCitAQCAtMTEsNiArMTEsNyBAQCBnbnVlYWJpaGYtbGludXgtYXJtCWFybWhmCiAgZ251ZWFiaS1saW51eC1hcm0JYXJtZWwKKyBnbnVhYmluMzItbGludXgtbWlwczY0cjZlbAltaXBzbjMycjZlbAorIGdudWFiaW4zMi1saW51eC1taXBzNjRyNgltaXBzbjMycjYKICtnbnVlYWJpLWxpbnV4LWFybWViCWFybWViCiAgZ251YWJpbjMyLWxpbnV4LW1pcHM2NGVsCW1pcHNuMzJlbAogIGdudWFiaW4zMi1saW51eC1taXBzNjQJbWlwc24zMgotIGdudWFiaTY0LWxpbnV4LW1pcHM2NGVsCW1pcHM2NGVsCisgZ251YWJpNjQtbGludXgtbWlwczY0cjZlbAltaXBzNjRyNmVsCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzMzMTFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotZHBrZyBkZWZpbmVzOgotI2RlZmluZSBEUEtHX0JFR0lOX0RFQ0xTCWV4dGVybiAiQyIgewotCi1UaGF0IG1ha2VzIGhlYWRlciBjc3RkbGliIGluY2x1ZGVkIGluIGEgZXh0ZXJuICJDIiBibG9jayB3aGljaCBpcyBub3Qgc3VwcG9ydGVkCi1ieSBnY2MgNC44LiBJdCBmYWlscyBvbiBGZWRvcmEgMTk6Ci0KLS91c3IvaW5jbHVkZS9jKysvNC44LjEvY3N0ZGxpYjogSW4gZnVuY3Rpb24g4oCYbG9uZyBsb25nIGludCBzdGQ6OmFicyhsb25nIGxvbmcgaW50KeKAmToKLS91c3IvaW5jbHVkZS9jKysvNC44LjEvY3N0ZGxpYjoxNzQ6MjA6IGVycm9yOiBkZWNsYXJhdGlvbiBvZiBDIGZ1bmN0aW9uIOKAmGxvbmcgbG9uZyBpbnQgc3RkOjphYnMobG9uZyBsb25nIGludCnigJkgY29uZmxpY3RzIHdpdGgKLSAgIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX2J1aWx0aW5fbGxhYnMgKF9feCk7IH0KLSAgICAgICAgICAgICAgICAgICAgXgotL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOjE2NjozOiBlcnJvcjogcHJldmlvdXMgZGVjbGFyYXRpb24g4oCYbG9uZyBpbnQgc3RkOjphYnMobG9uZyBpbnQp4oCZIGhlcmUKLSAgIGFicyhsb25nIF9faSkgeyByZXR1cm4gX19idWlsdGluX2xhYnMoX19pKTsgfQotICAgXgotCi1Nb3ZlIGluY2x1ZGUgZ2V0dGV4dC5oIG91dCBvZiB0aGUgZXh0ZXJuICJDIiBibG9jayB0byBmaXggdGhpcyBpc3N1ZS4KLQotU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+Ci0KLS0tLSBkcGtnLTEuMTcuMS9saWIvZHBrZy9pMThuLmgub3JpZwkyMDEzLTA4LTEzIDE3OjMxOjI4Ljg3MDkzNTU3MyArMDgwMAotKysrIGRwa2ctMS4xNy4xL2xpYi9kcGtnL2kxOG4uaAkyMDEzLTA4LTEzIDE3OjMxOjM3Ljg5MzA2NTI0OSArMDgwMAotQEAgLTIzLDggKzIzLDYgQEAKLSAKLSAjaW5jbHVkZSA8ZHBrZy9tYWNyb3MuaD4KLSAKLS1EUEtHX0JFR0lOX0RFQ0xTCi0tCi0gLyoqCi0gICogQGRlZmdyb3VwIGkxOG4gSW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydAotICAqIEBpbmdyb3VwIGRwa2ctaW50ZXJuYWwKLUBAIC0zMyw2ICszMSw4IEBACi0gCi0gI2luY2x1ZGUgPGdldHRleHQuaD4KLSAKLStEUEtHX0JFR0lOX0RFQ0xTCi0rCi0gLyogV2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgYmVjYXVzZSBwZ2V0dGV4dCgpIHVzZXMgTENfTUVTU0FHRVMsIGJ1dCBsaWJpbnRsLmgKLSAgKiB3aGljaCBnZXRzIHB1bGxlZCBieSBnZXR0ZXh0Lmggb25seSBpbmNsdWRlcyBpdCBpZiBidWlsZGluZyBvcHRpbWl6ZWQuICovCi0gI2luY2x1ZGUgPGxvY2FsZS5oPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc2OTQ0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXJlcXVpcmUgZHBrZy5pbmMKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgotCi1TUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSIgZmlsZTovL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaCAiCi1TUkNfVVJJICs9ICJmaWxlOi8vbm9tYW4ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3JlbW92ZS10YXItbm8tdGltZXN0YW1wLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9hcmNoX3BtLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKLSAgICAgICAgICAgIGZpbGU6Ly9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaCBcCi0JICAgIGZpbGU6Ly8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2ggXAotCSAgICBmaWxlOi8vMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoIFwKLQkgICAgZmlsZTovLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBcCi0JICAgIGZpbGU6Ly8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggXAotCSAgICBmaWxlOi8vMDAwNi1hZGQtbXVzbGVhYmktdG8ta25vd24tdGFyZ2V0LXRyaXBldHMucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlOTViNTEzYzg5NjkzZjZlYzNhYjUzYjZiMWMzZGVmZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmZTg5MjQzODY4ODg4Y2U3MTViZjQ1ODYxZjI2MjY0Zjc2N2Q0ZTRkYmQwZDZmMWEyNmNlNjBiYmJiZjEwNmRhIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmZGMxMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguNy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGRwa2cuaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDUwOVQxMDAwNDJaL3Bvb2wvbWFpbi9kLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL25vbWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS10YXItbm8tdGltZXN0YW1wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FyY2hfcG0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZHBrZy1jb25maWd1cmUuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1hZGQtbXVzbGVhYmktdG8ta25vd24tdGFyZ2V0LXRyaXBldHMucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2ggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDczZGJmMjEyOWE1NGIwZmM2Mjc0NjRiZjhhZjRhMWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWNlMzZkM2E2ZGM3NTBhNDJiYWY3OTdmOWU3NWVjNTgwYTIxZjkyYmI5ZmY5NmI0ODIxMDA3NTVkNmQ5Yjg3YiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCmluZGV4IDA5ZTRlYTUuLjc0ZTkyZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLmluYwpAQCAtOSw3ICs5LDcgQEAKIExJQ0VOU0VfZTJmc3Byb2dzLWZzY2sgPSAiR1BMdjIiCiBMSUNFTlNFX2UyZnNwcm9ncy10dW5lMmZzID0gIkdQTHYyIgogTElDRU5TRV9lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjQ4ZjIxZDc2NWI4NzViZDEwNDAwOTc1ZDEyYzFjYTIgXAorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTk9USUNFO21kNT1iNDhmMjFkNzY1Yjg3NWJkMTA0MDA5NzVkMTJjMWNhMiBcCiAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9leHQyZnMvZXh0MmZzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT01OTZhOGRlZGNiNGU3MzFjNmIyMWM3YTQ2ZmJhNmJlZiBcCiAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9lMnAvZTJwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT03O21kNT04YTc0YWRlOGY5ZDY1MDk1ZDcwZWYyZDRiZjQ4ZTM2YSBcCiAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dWlkL3V1aWQuaC5pbjtiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT1kYmI4MDc5ZTExNGE1Zjg0MTkzNGI5OWU1OWM4ODIwYSBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvUmV2ZXJ0LW1rZTJmcy1lbmFibGUtdGhlLW1ldGFkYXRhX2NzdW0tYW5kLTY0Yml0LWZlYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9SZXZlcnQtbWtlMmZzLWVuYWJsZS10aGUtbWV0YWRhdGFfY3N1bS1hbmQtNjRiaXQtZmVhLnBhdGNoCmluZGV4IDY1NmZiNmUuLmU2NmNkNGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9SZXZlcnQtbWtlMmZzLWVuYWJsZS10aGUtbWV0YWRhdGFfY3N1bS1hbmQtNjRiaXQtZmVhLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9SZXZlcnQtbWtlMmZzLWVuYWJsZS10aGUtbWV0YWRhdGFfY3N1bS1hbmQtNjRiaXQtZmVhLnBhdGNoCkBAIC05LDI2ICs5LDMxIEBACiB0aGUgbGF0ZXN0IHN0YWJsZSBlMmZzcHJvZ3MgcmVsZWFzZS4KIAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCiBTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK1JlYmFzZSB0byAxLjQzOgorVGhlIHVwc3RyZWFtIGhhcyBkaXNhYmxlZCBtZXRhZGF0YV9jc3VtIGJ5IGRlZmF1bHQKK3RoaXMgcmViYXNlIGp1c3QgcmV2ZXJ0IDY0Yml0IGZlYXR1cmUuCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CiAtLS0KICBtaXNjL21rZTJmcy5jb25mLmluIHwgMyArKy0KICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9taXNjL21rZTJmcy5jb25mLmluIGIvbWlzYy9ta2UyZnMuY29uZi5pbgotaW5kZXggYTA0OWQ2MS4uMTA2ZWU4MCAxMDA2NDQKK2luZGV4IDc4ZmU1MGEuLjZmMTk0MGUgMTAwNjQ0CiAtLS0gYS9taXNjL21rZTJmcy5jb25mLmluCiArKysgYi9taXNjL21rZTJmcy5jb25mLmluCi1AQCAtMTEsNyArMTEsOCBAQAorQEAgLTExLDggKzExLDkgQEAKICAJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwKICAJfQogIAlleHQ0ID0gewotLQkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsbWV0YWRhdGFfY3N1bSw2NGJpdCxkaXJfbmxpbmssZXh0cmFfaXNpemUKKy0JCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLDY0Yml0LGRpcl9ubGluayxleHRyYV9pc2l6ZQogKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsdW5pbml0X2JnLGRpcl9ubGluayxleHRyYV9pc2l6ZQotKwkJYXV0b182NC1iaXRfc3VwcG9ydCA9IDEKICAJCWlub2RlX3NpemUgPSAyNTYKKysJCWF1dG9fNjQtYml0X3N1cHBvcnQgPSAxCiAgCX0KICAJZXh0NGRldiA9IHsKKyAJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLGlubGluZV9kYXRhLDY0Yml0LGRpcl9ubGluayxleHRyYV9pc2l6ZQogLS0gCi0yLjcuMgorMi44LjEKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2UyZnNwcm9ncy1maXgtbWlzc2luZy1jaGVjay1mb3ItcGVybWlzc2lvbi1kZW5pZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZTJmc3Byb2dzLWZpeC1taXNzaW5nLWNoZWNrLWZvci1wZXJtaXNzaW9uLWRlbmllZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA1NGM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2UyZnNwcm9ncy1maXgtbWlzc2luZy1jaGVjay1mb3ItcGVybWlzc2lvbi1kZW5pZWQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorU3ViamVjdDogW1BBVENIXSBGaXggbWlzc2luZyBjaGVjayBmb3IgcGVybWlzc2lvbiBkZW5pZWQuCisKK0lmIHRoZSBwYXRoIHRvICJST09UX1NZU0NPTkZESVIvbWtlMmZzLmNvbmYiIGhhcyBhIHBlcm1pc3Npb24gZGVuaWVkIHByb2JsZW0sCit0aGVuIHRoZSBnZXRfZGlybGlzdCgpIGNhbGwgd2lsbCByZXR1cm4gRUFDQ0VTLiBCdXQgdGhlIGNvZGUgaW4gcHJvZmlsZV9pbml0Cit3aWxsIHRyZWF0IHRoYXQgYXMgYSBmYXRhbCBlcnJvciBhbmQgYWxsIGV4ZWN1dGlvbnMgd2lsbCBmYWlsIHdpdGg6CisgICAgICBDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogMTMpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV3JpdHRlbi1ieTogSGVucmlrIFdhbGxpbiA8aGVucmlrLmIud2FsbGluQGVyaWNzc29uLmNvbT4KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9zdXBwb3J0L3Byb2ZpbGUuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9zdXBwb3J0L3Byb2ZpbGUuYyBiL2xpYi9zdXBwb3J0L3Byb2ZpbGUuYworaW5kZXggNTFhMzMxNC4uMWMxMDM5ZiAxMDA2NDQKKy0tLSBhL2xpYi9zdXBwb3J0L3Byb2ZpbGUuYworKysrIGIvbGliL3N1cHBvcnQvcHJvZmlsZS5jCitAQCAtMzM1LDcgKzMzNSw3IEBAIHByb2ZpbGVfaW5pdChjb25zdCBjaGFyICoqZmlsZXMsIHByb2ZpbGVfdCAqcmV0X3Byb2ZpbGUpCisgCQkJCSpsYXN0ID0gbmV3X2ZpbGU7CisgCQkJCWxhc3QgPSAmbmV3X2ZpbGUtPm5leHQ7CisgCQkJfQorLQkJfSBlbHNlIGlmICgocmV0dmFsICE9IEVOT1RESVIpICYmCisrCQl9IGVsc2UgaWYgKChyZXR2YWwgIT0gRU5PVERJUikgJiYgKHJldHZhbCAhPSBFQUNDRVMpICYmCisgCQkJICAgc3RyY21wKCpmcywgZGVmYXVsdF9maWxlbmFtZSkpCisgCQkJZ290byBlcnJvdXQ7CisgCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy94YXR0cl9vcmRlcmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy94YXR0cl9vcmRlcmluZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyYTdiMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MveGF0dHJfb3JkZXJpbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotRnJvbTogIkRhcnJpY2sgSi4gV29uZyIgPGRhcnJpY2sud29uZ0BvcmFjbGUuY29tPgotVG86IHR5dHNvQG1pdC5lZHUsIGRhcnJpY2sud29uZ0BvcmFjbGUuY29tCi1DYzogbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcsIERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiwKLSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KLURhdGU6IFNhdCwgMTMgRmViIDIwMTYgMTQ6Mzg6MjQgLTA4MDAKLU1lc3NhZ2UtSUQ6IDwyMDE2MDIxMzIyMzgyNC4yNTM4MS44MDAyLnN0Z2l0QGJpcmNoLmRqd29uZy5vcmc+Ci1Jbi1SZXBseS1UbzogPDIwMTYwMjEzMjIzNzI1LjI1MzgxLjIwOTI5LnN0Z2l0QGJpcmNoLmRqd29uZy5vcmc+Ci1SZWZlcmVuY2VzOiA8MjAxNjAyMTMyMjM3MjUuMjUzODEuMjA5Mjkuc3RnaXRAYmlyY2guZGp3b25nLm9yZz4KLVVzZXItQWdlbnQ6IFN0R2l0LzAuMTcuMS1kaXJ0eQotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCi1YLVNvdXJjZS1JUDogYXNlcnYwMDIyLm9yYWNsZS5jb20gWzE0MS4xNDYuMTI2LjIzNF0KLVgtRXZvbHV0aW9uLVNvdXJjZTogMTM1ODg2MDM2MS40NTY2LjMzQHRlZAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotCi1SaWNoYXJkIFB1cmRpZSByZXBvcnRzIHRoYXQgbGliZXh0MmZzIGRvZXNuJ3Qgc29ydCBhdHRyaWJ1dGUga2V5cyBpbgotdGhlIHhhdHRyIGJsb2NrIGNvcnJlY3RseSwgY2F1c2luZyB0aGUga2VybmVsIHRvIHJldHVybiAtRU5PREFUQSB3aGVuCi1xdWVyeWluZyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHRoZXJlLiAgVGhlcmVmb3JlLCBzb3J0IGF0dHJpYnV0ZXMKLXNvIHRoYXQgd2hhdGV2ZXIgZW5kcyB1cCBpbiB0aGUgeGF0dHIgYmxvY2sgaXMgc29ydGVkIGFjY29yZGluZyB0bwotd2hhdCB0aGUga2VybmVsIGV4cGVjdHMuCi0KLUNjOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KLVJlcG9ydGVkLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KLVNpZ25lZC1vZmYtYnk6IERhcnJpY2sgSi4gV29uZyA8ZGFycmljay53b25nQG9yYWNsZS5jb20+Ci0tLS0KLSBsaWIvZXh0MmZzL2V4dF9hdHRyLmMgICAgICAgIHwgICAyNCArKysrKysrKysrKy0KLSB0ZXN0cy9kX3hhdHRyX3NvcnRpbmcvZXhwZWN0IHwgICAyOSArKysrKysrKysrKysrKwotIHRlc3RzL2RfeGF0dHJfc29ydGluZy9uYW1lICAgfCAgICAxIAotIHRlc3RzL2RfeGF0dHJfc29ydGluZy9zY3JpcHQgfCAgIDg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIDQgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZF94YXR0cl9zb3J0aW5nL2V4cGVjdAotIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9kX3hhdHRyX3NvcnRpbmcvbmFtZQotIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9kX3hhdHRyX3NvcnRpbmcvc2NyaXB0Ci0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi0KLQotZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZXh0X2F0dHIuYyBiL2xpYi9leHQyZnMvZXh0X2F0dHIuYwotaW5kZXggMGE0ZjhjMC4uYjEyMTgzNyAxMDA2NDQKLS0tLSBhL2xpYi9leHQyZnMvZXh0X2F0dHIuYwotKysrIGIvbGliL2V4dDJmcy9leHRfYXR0ci5jCi1AQCAtMjU0LDEwICsyNTQsMTUgQEAgc3RhdGljIHN0cnVjdCBlYV9uYW1lX2luZGV4IGVhX25hbWVzW10gPSB7Ci0gCXswLCBOVUxMfSwKLSB9OwotIAotK3N0YXRpYyBpbnQgZmluZF9lYV9pbmRleChjaGFyICpmdWxsbmFtZSwgY2hhciAqKm5hbWUsIGludCAqaW5kZXgpOwotKwotIC8qIFB1c2ggZW1wdHkgYXR0cmlidXRlcyB0byB0aGUgZW5kIGFuZCBpbmxpbmVkYXRhIHRvIHRoZSBmcm9udC4gKi8KLSBzdGF0aWMgaW50IGF0dHJfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotIHsKLSAJY29uc3Qgc3RydWN0IGV4dDJfeGF0dHIgKnhhID0gYSwgKnhiID0gYjsKLSsJY2hhciAqeGFfc3VmZml4LCAqeGJfc3VmZml4OwotKwlpbnQgeGFfaWR4LCB4Yl9pZHg7Ci0rCWludCBjbXA7Ci0gCi0gCWlmICh4YS0+bmFtZSA9PSBOVUxMKQotIAkJcmV0dXJuICsxOwotQEAgLTI2Nyw3ICsyNzIsMjQgQEAgc3RhdGljIGludCBhdHRyX2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKLSAJCXJldHVybiAtMTsKLSAJZWxzZSBpZiAoIXN0cmNtcCh4Yi0+bmFtZSwgInN5c3RlbS5kYXRhIikpCi0gCQlyZXR1cm4gKzE7Ci0tCXJldHVybiAwOwotKwotKwkvKgotKwkgKiBEdXBsaWNhdGUgdGhlIGtlcm5lbCdzIHNvcnRpbmcgYWxnb3JpdGhtIGJlY2F1c2UgeGF0dHIgYmxvY2tzCi0rCSAqIHJlcXVpcmUgc29ydGVkIGtleXMuCi0rCSAqLwotKwl4YV9zdWZmaXggPSB4YS0+bmFtZTsKLSsJeGJfc3VmZml4ID0geGItPm5hbWU7Ci0rCXhhX2lkeCA9IHhiX2lkeCA9IDA7Ci0rCWZpbmRfZWFfaW5kZXgoeGEtPm5hbWUsICZ4YV9zdWZmaXgsICZ4YV9pZHgpOwotKwlmaW5kX2VhX2luZGV4KHhiLT5uYW1lLCAmeGJfc3VmZml4LCAmeGJfaWR4KTsKLSsJY21wID0geGFfaWR4IC0geGJfaWR4OwotKwlpZiAoY21wKQotKwkJcmV0dXJuIGNtcDsKLSsJY21wID0gc3RybGVuKHhhX3N1ZmZpeCkgLSBzdHJsZW4oeGJfc3VmZml4KTsKLSsJaWYgKGNtcCkKLSsJCXJldHVybiBjbXA7Ci0rCWNtcCA9IHN0cmNtcCh4YV9zdWZmaXgsIHhiX3N1ZmZpeCk7Ci0rCXJldHVybiBjbXA7Ci0gfQotIAotIHN0YXRpYyBjb25zdCBjaGFyICpmaW5kX2VhX3ByZWZpeChpbnQgaW5kZXgpCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZF94YXR0cl9zb3J0aW5nL2V4cGVjdCBiL3Rlc3RzL2RfeGF0dHJfc29ydGluZy9leHBlY3QKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4xN2RhNjYzCi0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0cy9kX3hhdHRyX3NvcnRpbmcvZXhwZWN0Ci1AQCAtMCwwICsxLDI5IEBACi0rZGVidWdmcyBzb3J0IGV4dGVuZGVkIGF0dHJpYnV0ZXMKLStta2UyZnMgLUZxIC1iIDEwMjQgdGVzdC5pbWcgNTEyCi0rRXhpdCBzdGF0dXMgaXMgMAotK2VhX3NldCAvIHNlY3VyaXR5LlNNRUc2NCAtZiAvdG1wL2IKLStFeGl0IHN0YXR1cyBpcyAwCi0rZWFfc2V0IC8gc2VjdXJpdHkuaW1iIC1mIC90bXAvYgotK0V4aXQgc3RhdHVzIGlzIDAKLStlYV9zZXQgLyB1c2VyLm1vbyBjb3cKLStFeGl0IHN0YXR1cyBpcyAwCi0rZWFfbGlzdCAvCi0rRXh0ZW5kZWQgYXR0cmlidXRlczoKLSsgIHVzZXIubW9vID0gImNvdyIgKDMpCi0rICBzZWN1cml0eS5pbWIgPSAieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIgKDI1NikKLSsgIHNlY3VyaXR5LlNNRUc2NCA9ICJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4IiAoMjU2KQotK0V4aXQgc3RhdHVzIGlzIDAKLStlYV9nZXQgLyBzZWN1cml0eS5pbWIKLSt4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Ci0rRXhpdCBzdGF0dXMgaXMgMAotK2VhX2dldCAvIG5vc3VjaGVhCi0rZWFfZ2V0OiBFeHRlbmRlZCBhdHRyaWJ1dGUga2V5IG5vdCBmb3VuZCB3aGlsZSBnZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZQotK0V4aXQgc3RhdHVzIGlzIDAKLStlMmZzY2sgLXlmIC1OIHRlc3RfZmlsZXN5cwotK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcwotK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQotK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQotK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cwotK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgotK3Rlc3RfZmlsZXN5czogMTEvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOS81MTIgYmxvY2tzCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2RfeGF0dHJfc29ydGluZy9uYW1lIGIvdGVzdHMvZF94YXR0cl9zb3J0aW5nL25hbWUKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5kZGU4OTI2Ci0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0cy9kX3hhdHRyX3NvcnRpbmcvbmFtZQotQEAgLTAsMCArMSBAQAotK3NvcnQgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBkZWJ1Z2ZzCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZF94YXR0cl9zb3J0aW5nL3NjcmlwdCBiL3Rlc3RzL2RfeGF0dHJfc29ydGluZy9zY3JpcHQKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4zMGMxODlhCi0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0cy9kX3hhdHRyX3NvcnRpbmcvc2NyaXB0Ci1AQCAtMCwwICsxLDg2IEBACi0raWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KLSsKLStPVVQ9JHRlc3RfbmFtZS5sb2cKLStFWFA9JHRlc3RfZGlyL2V4cGVjdAotK1ZFUklGWV9GU0NLX09QVD0teWYKLSsKLStURVNUX0RBVEE9JHRlc3RfbmFtZS50bXAKLStWRVJJRllfREFUQT0kdGVzdF9uYW1lLnZlci50bXAKLSsKLStlY2hvICJkZWJ1Z2ZzIHNvcnQgZXh0ZW5kZWQgYXR0cmlidXRlcyIgPiAkT1VUCi0rCi0rZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCi0rCi0rZWNobyAibWtlMmZzIC1GcSAtYiAxMDI0IHRlc3QuaW1nIDUxMiIgPj4gJE9VVAotKwotKyRNS0UyRlMgLUZxICRUTVBGSUxFIDUxMiA+IC9kZXYvbnVsbCAyPiYxCi0rc3RhdHVzPSQ/Ci0rZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQKLSsKLStwZXJsIC1lICdwcmludCAieCIgeCAyNTY7JyA+IC90bXAvYgotKwotK2VjaG8gImVhX3NldCAvIHNlY3VyaXR5LlNNRUc2NCAtZiAvdG1wL2IiID4gJE9VVC5uZXcKLSskREVCVUdGUyAtdyAtUiAiZWFfc2V0IC8gc2VjdXJpdHkuU01FRzY0IC1mIC90bXAvYiIgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQotK3N0YXR1cz0kPwotK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldwotK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKLSsKLStlY2hvICJlYV9zZXQgLyBzZWN1cml0eS5pbWIgLWYgL3RtcC9iIiA+ICRPVVQubmV3Ci0rJERFQlVHRlMgLXcgLVIgImVhX3NldCAvIHNlY3VyaXR5LmltYiAtZiAvdG1wL2IiICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKLStzdGF0dXM9JD8KLStlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKLStzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCi0rCi0rZWNobyAiZWFfc2V0IC8gdXNlci5tb28gY293IiA+ICRPVVQubmV3Ci0rJERFQlVHRlMgLXcgLVIgImVhX3NldCAvIHVzZXIubW9vIGNvdyIgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQotK3N0YXR1cz0kPwotK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldwotK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKLSsKLStybSAtcmYgL3RtcC9iCi0rCi0rZWNobyAiZWFfbGlzdCAvIiA+ICRPVVQubmV3Ci0rJERFQlVHRlMgLXcgLVIgImVhX2xpc3QgLyIgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQotK3N0YXR1cz0kPwotK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldwotK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKLSsKLStlY2hvICJlYV9nZXQgLyBzZWN1cml0eS5pbWIiID4gJE9VVC5uZXcKLSskREVCVUdGUyAtdyAtUiAiZWFfZ2V0IC8gc2VjdXJpdHkuaW1iIiAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCi0rc3RhdHVzPSQ/Ci0rZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3Ci0rc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAotKwotK2VjaG8gImVhX2dldCAvIG5vc3VjaGVhIiA+ICRPVVQubmV3Ci0rJERFQlVHRlMgLXcgLVIgImVhX2dldCAvIG5vc3VjaGVhIiAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCi0rc3RhdHVzPSQ/Ci0rZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3Ci0rc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAotKwotK2VjaG8gZTJmc2NrICRWRVJJRllfRlNDS19PUFQgLU4gdGVzdF9maWxlc3lzID4gJE9VVC5uZXcKLSskRlNDSyAkVkVSSUZZX0ZTQ0tfT1BUIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCi0rc3RhdHVzPSQ/Ci0rZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3Ci0rc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAotKwotKyMKLSsjIERvIHRoZSB2ZXJpZmljYXRpb24KLSsjCi0rCi0rcm0gLWYgJFRNUEZJTEUgJE9VVC5uZXcKLStjbXAgLXMgJE9VVCAkRVhQCi0rc3RhdHVzPSQ/Ci0rCi0raWYgWyAiJHN0YXR1cyIgPSAwIF0gOyB0aGVuCi0rCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKLSsJdG91Y2ggJHRlc3RfbmFtZS5vawotK2Vsc2UKLSsJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKLSsJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCi0rZmkKLSsKLSt1bnNldCBWRVJJRllfRlNDS19PUFQgTkFUSVZFX0ZTQ0tfT1BUIE9VVCBFWFAgVEVTVF9EQVRBIFZFUklGWV9EQVRBCi0rCi0rZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KLSsJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCi0rZmkKLQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfMS40My5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODU1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfMS40My5iYgpAQCAtMCwwICsxLDExMSBAQAorcmVxdWlyZSBlMmZzcHJvZ3MuaW5jCisKK1BSID0gInIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcXVpZXQtZGVidWdmcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL1JldmVydC1ta2UyZnMtZW5hYmxlLXRoZS1tZXRhZGF0YV9jc3VtLWFuZC02NGJpdC1mZWEucGF0Y2ggXAorIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9lMmZzcHJvZ3MtZml4LW1pc3NpbmctY2hlY2stZm9yLXBlcm1pc3Npb24tZGVuaWVkLnBhdGNoIgorCitTUkNSRVYgPSAiZDZhZGYwNzBiMGU4NWYyMDljMGQ3ZjMxMDE4OGIxMzRiNWNiNzE4MCIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gInYoP1A8cHZlcj5cZCtcLlxkKyhcLlxkKykqKSQiCisKK0VYVFJBX09FQ09ORiArPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZWxmLXNobGlicyAtLWRpc2FibGUtbGlidXVpZCAtLWRpc2FibGUtdXVpZGQgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJibGtpZCAtLWVuYWJsZS12ZXJib3NlLW1ha2VjbWRzIgorCitFWFRSQV9PRUNPTkZfZGFyd2luID0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gLS1lbmFibGUtYnNkLXNobGlicyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbZnVzZV0gPSAnLS1lbmFibGUtZnVzZTJmcywtLWRpc2FibGUtZnVzZTJmcyxmdXNlJworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWxpYnMKKwkjIFdlIHVzZSBibGtpZCBmcm9tIHV0aWwtbGludXggbm93IHNvIHJlbW92ZSBmcm9tIGhlcmUKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vbGliYmxraWQqCisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L2Jsa2lkCisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZy9ibGtpZC5wYworCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vYmxraWQKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZzY2sKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZpbmRmcworCisJIyBlMmluaXRyZF9oZWxwZXIgYW5kIHRoZSBwa2djb25maWcgZmlsZXMgYmVsb25nIGluIGxpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L2UyaW5pdHJkX2hlbHBlciAke0R9JHtsaWJkaXJ9CisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZXh0MmZzL2V4dDJfdHlwZXMuaAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9jaGF0dHIgJHtEfSR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MKKworCWluc3RhbGwgLXYgLW0gNzU1ICR7U30vY29udHJpYi9wb3B1bGF0ZS1leHRmcy5zaCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCisJIyBDbGVhbiBob3N0IHBhdGggKGJ1aWxkIGRpcmVjdG9yeSkgaW4gY29tcGlsZV9ldCwgbWtfY21kcworCXNlZCAtaSAtZSAicyxcKEVUX0RJUj0uKlwpJHtTfS9saWIvZXRcKC4qXCksXDEke2RhdGFkaXJ9L2V0XDIsZyIgJHtEfSR7YmluZGlyfS9jb21waWxlX2V0CisJc2VkIC1pIC1lICJzLFwoU1NfRElSPS4qXCkke1N9L2xpYi9zc1woLipcKSxcMSR7ZGF0YWRpcn0vc3NcMixnIiAke0R9JHtiaW5kaXJ9L21rX2NtZHMKK30KKworIyBOZWVkIHRvIGZpbmQgdGhlIHJpZ2h0IG1rZTJmcy5jb25mIGZpbGUKK2UyZnNwcm9nc19jb25mX2ZpeHVwICgpIHsKKwlmb3IgaSBpbiBta2UyZnMgbWtmcy5leHQyIG1rZnMuZXh0MyBta2ZzLmV4dDQgbWtmcy5leHQ0ZGV2OyBkbworCQljcmVhdGVfd3JhcHBlciAke0R9JHtiYXNlX3NiaW5kaXJ9LyRpIE1LRTJGU19DT05GSUc9JHtzeXNjb25mZGlyfS9ta2UyZnMuY29uZgorCWRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWUyZnNwcm9nc19jb25mX2ZpeHVwCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwllMmZzcHJvZ3NfY29uZl9maXh1cAorfQorCitSREVQRU5EU19lMmZzcHJvZ3MgPSAiZTJmc3Byb2dzLWJhZGJsb2NrcyIKK1JSRUNPTU1FTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtbWtlMmZzIGUyZnNwcm9ncy1lMmZzY2siCisKK1BBQ0tBR0VTID0rICJlMmZzcHJvZ3MtZTJmc2NrIGUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLXR1bmUyZnMgZTJmc3Byb2dzLWJhZGJsb2NrcyBlMmZzcHJvZ3MtcmVzaXplMmZzIgorUEFDS0FHRVMgPSsgImxpYmNvbWVyciBsaWJzcyBsaWJlMnAgbGliZXh0MmZzIgorCitGSUxFU19lMmZzcHJvZ3MtcmVzaXplMmZzID0gIiR7YmFzZV9zYmluZGlyfS9yZXNpemUyZnMqIgorRklMRVNfZTJmc3Byb2dzLWUyZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZTJmc2NrICR7YmFzZV9zYmluZGlyfS9mc2NrLmV4dCoiCitGSUxFU19lMmZzcHJvZ3MtbWtlMmZzID0gIiR7YmFzZV9zYmluZGlyfS9ta2UyZnMgJHtiYXNlX3NiaW5kaXJ9L21rZnMuZXh0KiAke3N5c2NvbmZkaXJ9L21rZTJmcy5jb25mIgorRklMRVNfZTJmc3Byb2dzLXR1bmUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3R1bmUyZnMgJHtiYXNlX3NiaW5kaXJ9L2UybGFiZWwiCitGSUxFU19lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIiR7YmFzZV9zYmluZGlyfS9iYWRibG9ja3MiCitGSUxFU19saWJjb21lcnIgPSAiJHtiYXNlX2xpYmRpcn0vbGliY29tX2Vyci5zby4qIgorRklMRVNfbGlic3MgPSAiJHtiYXNlX2xpYmRpcn0vbGlic3Muc28uKiIKK0ZJTEVTX2xpYmUycCA9ICIke2Jhc2VfbGliZGlyfS9saWJlMnAuc28uKiIKK0ZJTEVTX2xpYmV4dDJmcyA9ICIke2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7YmFzZV9saWJkaXJ9L2xpYmV4dDJmcy5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyovKi5hd2sgJHtkYXRhZGlyfS8qLyouc2VkICR7YmFzZV9saWJkaXJ9Lyouc28gJHtiaW5kaXJ9L2NvbXBpbGVfZXQgJHtiaW5kaXJ9L21rX2NtZHMiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNoYXR0ciIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ciIKK0FMVEVSTkFUSVZFX1RBUkdFVFtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJmc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfSAke1BOfS10dW5lMmZzIGNvcmV1dGlscyBwcm9jcHMgYmFzaCIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7Qn0vdGVzdHMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtYSAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtYSAke1N9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCXNlZCAtZSAncyEuLi9lMmZzY2svZTJmc2NrIWUyZnNjayFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0LyovZXhwZWN0KgorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc19naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZGU4ZTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi1yZXF1aXJlIGUyZnNwcm9ncy5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovL2FjaW5jbHVkZS5tNCBcCi0gICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3F1aWV0LWRlYnVnZnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL21rZGlyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly94YXR0cl9vcmRlcmluZy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vUmV2ZXJ0LW1rZTJmcy1lbmFibGUtdGhlLW1ldGFkYXRhX2NzdW0tYW5kLTY0Yml0LWZlYS5wYXRjaCBcCi0iCi0KLVNSQ1JFViA9ICIwZjI2NzQ3MTY3Y2M5ZDgyZGY4NDliMGFhZDM4N2JmODI0ZjA0NTQ0IgotUFYgPSAiMS40Mi45OSsxLjQzK2dpdCR7U1JDUFZ9IgotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAidig/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKSopJCIKLQotRVhUUkFfT0VDT05GICs9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1lbGYtc2hsaWJzIC0tZGlzYWJsZS1saWJ1dWlkIC0tZGlzYWJsZS11dWlkZCBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmJsa2lkIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMiCi0KLUVYVFJBX09FQ09ORl9kYXJ3aW4gPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSAtLWVuYWJsZS1ic2Qtc2hsaWJzIgotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tmdXNlXSA9ICctLWVuYWJsZS1mdXNlMmZzLC0tZGlzYWJsZS1mdXNlMmZzLGZ1c2UnCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LwotfQotCi1kb19pbnN0YWxsICgpIHsKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtbGlicwotCSMgV2UgdXNlIGJsa2lkIGZyb20gdXRpbC1saW51eCBub3cgc28gcmVtb3ZlIGZyb20gaGVyZQotCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9saWJibGtpZCoKLQlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vYmxraWQKLQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnL2Jsa2lkLnBjCi0Jcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9ibGtpZAotCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZnNjawotCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZmluZGZzCi0KLQkjIGUyaW5pdHJkX2hlbHBlciBhbmQgdGhlIHBrZ2NvbmZpZyBmaWxlcyBiZWxvbmcgaW4gbGliZGlyCi0JaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQotCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7RH0ke2xpYmRpcn0KLQkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZyAke0R9JHtsaWJkaXJ9Ci0JZmkKLQotCW9lX211bHRpbGliX2hlYWRlciBleHQyZnMvZXh0Ml90eXBlcy5oCi0JaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KLQltdiAke0R9JHtiaW5kaXJ9L2NoYXR0ciAke0R9JHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncwotCi0JaW5zdGFsbCAtdiAtbSA3NTUgJHtTfS9jb250cmliL3BvcHVsYXRlLWV4dGZzLnNoICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCi19Ci0KLSMgTmVlZCB0byBmaW5kIHRoZSByaWdodCBta2UyZnMuY29uZiBmaWxlCi1lMmZzcHJvZ3NfY29uZl9maXh1cCAoKSB7Ci0JZm9yIGkgaW4gbWtlMmZzIG1rZnMuZXh0MiBta2ZzLmV4dDMgbWtmcy5leHQ0IG1rZnMuZXh0NGRldjsgZG8KLQkJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmFzZV9zYmluZGlyfS8kaSBNS0UyRlNfQ09ORklHPSR7c3lzY29uZmRpcn0vbWtlMmZzLmNvbmYKLQlkb25lCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKLQkjIENsZWFuIGhvc3QgcGF0aCBpbiBjb21waWxlX2V0LCBta19jbWRzCi0Jc2VkIC1pIC1lICJzLEVUX0RJUj1cIiR7U30vbGliL2V0XCIsRVRfRElSPVwiJHtkYXRhZGlyfS9ldFwiLGciICR7RH0ke2JpbmRpcn0vY29tcGlsZV9ldAotCXNlZCAtaSAtZSAicyxTU19ESVI9XCIke1N9L2xpYi9zc1wiLFNTX0RJUj1cIiR7ZGF0YWRpcn0vc3NcIixnIiAke0R9JHtiaW5kaXJ9L21rX2NtZHMKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotCWUyZnNwcm9nc19jb25mX2ZpeHVwCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKLQllMmZzcHJvZ3NfY29uZl9maXh1cAotfQotCi1SREVQRU5EU19lMmZzcHJvZ3MgPSAiZTJmc3Byb2dzLWJhZGJsb2NrcyIKLVJSRUNPTU1FTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtbWtlMmZzIGUyZnNwcm9ncy1lMmZzY2siCi0KLVBBQ0tBR0VTID0rICJlMmZzcHJvZ3MtZTJmc2NrIGUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLXR1bmUyZnMgZTJmc3Byb2dzLWJhZGJsb2NrcyBlMmZzcHJvZ3MtcmVzaXplMmZzIgotUEFDS0FHRVMgPSsgImxpYmNvbWVyciBsaWJzcyBsaWJlMnAgbGliZXh0MmZzIgotCi1GSUxFU19lMmZzcHJvZ3MtcmVzaXplMmZzID0gIiR7YmFzZV9zYmluZGlyfS9yZXNpemUyZnMqIgotRklMRVNfZTJmc3Byb2dzLWUyZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZTJmc2NrICR7YmFzZV9zYmluZGlyfS9mc2NrLmV4dCoiCi1GSUxFU19lMmZzcHJvZ3MtbWtlMmZzID0gIiR7YmFzZV9zYmluZGlyfS9ta2UyZnMgJHtiYXNlX3NiaW5kaXJ9L21rZnMuZXh0KiAke3N5c2NvbmZkaXJ9L21rZTJmcy5jb25mIgotRklMRVNfZTJmc3Byb2dzLXR1bmUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3R1bmUyZnMgJHtiYXNlX3NiaW5kaXJ9L2UybGFiZWwiCi1GSUxFU19lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIiR7YmFzZV9zYmluZGlyfS9iYWRibG9ja3MiCi1GSUxFU19saWJjb21lcnIgPSAiJHtiYXNlX2xpYmRpcn0vbGliY29tX2Vyci5zby4qIgotRklMRVNfbGlic3MgPSAiJHtiYXNlX2xpYmRpcn0vbGlic3Muc28uKiIKLUZJTEVTX2xpYmUycCA9ICIke2Jhc2VfbGliZGlyfS9saWJlMnAuc28uKiIKLUZJTEVTX2xpYmV4dDJmcyA9ICIke2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7YmFzZV9saWJkaXJ9L2xpYmV4dDJmcy5zby4qIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyovKi5hd2sgJHtkYXRhZGlyfS8qLyouc2VkICR7YmFzZV9saWJkaXJ9Lyouc28iCi0KLUFMVEVSTkFUSVZFXyR7UE59ID0gImNoYXR0ciIKLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ciIKLUFMVEVSTkFUSVZFX1RBUkdFVFtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MiCi0KLUFMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJmc2NrLjgiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCi0KLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfSAke1BOfS10dW5lMmZzIGNvcmV1dGlscyBwcm9jcHMgYmFzaCIKLQotZG9fY29tcGlsZV9wdGVzdCgpIHsKLQlvZV9ydW5tYWtlIC1DICR7Qn0vdGVzdHMKLX0KLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQljcCAtYSAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKLQljcCAtYSAke1N9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAotCXNlZCAtZSAncyEuLi9lMmZzY2svZTJmc2NrIWUyZnNjayFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0LyovZXhwZWN0KgotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXhfZm9yX2djYy00LjcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaAppbmRleCBiZDYzNGI0Li5jNzhmOTVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApAQCAtMiw3ICsyLDcgQEAKIGdjYyA0LjcgZG9lcyBub3QgbGlrZSBwb2ludGVyIGNvbnZlcnNpb24sIHNvIGhhdmUgYSB2b2lkICogdG1wIHZhciB0byB3b3JrIAogYXJvdW5kIGZvbGxvd2luZyBjb21waWxhdGlvbiBpc3N1ZS4KIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDExLzA3LzA3CiAKIHwgbWQ1LmM6IEluIGZ1bmN0aW9uICdtZDVfZmluaXNoX2N0eCc6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2djYzYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2djYzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2YTc1NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZ2NjNi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitGaXggd2FybmluZ3MgZm91bmQgd2l0aCBnY2M2CisKK3wgLi4vLi4vZWxmdXRpbHMtMC4xNDgvbGliZHcvZHdhcmZfc2libGluZ29mLmM6IEluIGZ1bmN0aW9uICdkd2FyZl9zaWJsaW5nb2YnOgorfCAuLi8uLi9lbGZ1dGlscy0wLjE0OC9saWJkdy9kd2FyZl9zaWJsaW5nb2YuYzo2OTo2OiBlcnJvcjogbm9ubnVsbCBhcmd1bWVudCAncmVzdWx0JyBjb21wYXJlZCB0byBOVUxMIFstV2Vycm9yPW5vbm51bGwtY29tcGFyZV0KK3wgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorfCAgICAgICBeCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyB1bm1haW50YWluZWQgXQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmR3L2R3YXJmX3NpYmxpbmdvZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJkdy9kd2FyZl9zaWJsaW5nb2YuYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L2R3YXJmX3NpYmxpbmdvZi5jCitAQCAtNjYsOSArNjYsNiBAQCBkd2FyZl9zaWJsaW5nb2YgKGRpZSwgcmVzdWx0KQorICAgaWYgKGRpZSA9PSBOVUxMKQorICAgICByZXR1cm4gLTE7CisgCistICBpZiAocmVzdWx0ID09IE5VTEwpCistICAgIHJldHVybiAtMTsKKy0KKyAgIGlmIChyZXN1bHQgIT0gZGllKQorICAgICByZXN1bHQtPmFkZHIgPSBOVUxMOworIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAxLWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhkMWM4OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExNjMgKzAsMCBAQAotRnJvbSA0YjBmZTgwYjM5NTFmMDQ0YzFjMWIxNGQxZDdmNWYwYjhhYjY3NTA3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMzEgRGVjIDIwMTUgMDY6MzU6MzQgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IFByb3ZpZGUgYWx0ZXJuYXRpdmVzIGZvciBnbGliYyBhc3N1bXB0aW9ucyBoZWxwcwotIGNvbXBpbGluZyBpdCBvbiBtdXNsCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIGxpYi9jb2xvci5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWIvY3JjMzJfZmlsZS5jICAgICAgICAgICAgICAgICB8ICA0ICsrKy0KLSBsaWIvZml4ZWRzaXplaGFzaC5oICAgICAgICAgICAgICB8ICA0ICsrLS0KLSBsaWIvc3lzdGVtLmggICAgICAgICAgICAgICAgICAgICB8IDExICsrKysrKysrKysrCi0gbGliL3htYWxsb2MuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIGxpYmFzbS9hc21fZW5kLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJhc20vYXNtX25ld3Njbi5jICAgICAgICAgICAgICB8ICAyICstCi0gbGliY3B1L2kzODZfZ2VuZGlzLmMgICAgICAgICAgICAgfCAgMiArLQotIGxpYmNwdS9pMzg2X2xleC5jICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJjcHUvaTM4Nl9wYXJzZS5jICAgICAgICAgICAgICB8ICAyICstCi0gbGliZHcvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgfCAgMiArLQotIGxpYmR3L2xpYmR3X2FsbG9jLmMgICAgICAgICAgICAgIHwgIDMgKystCi0gbGliZHdmbC9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgfCAgMiArKwotIGxpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jIHwgIDMgKystCi0gbGliZHdmbC9kd2ZsX2Vycm9yLmMgICAgICAgICAgICAgfCAgNCArKystCi0gbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jICAgfCAgMSArCi0gbGliZHdmbC9maW5kLWRlYnVnaW5mby5jICAgICAgICAgfCAgMiArLQotIGxpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMgICAgIHwgMTAgKysrKysrKysrKwotIGxpYmR3ZmwvbGludXgta2VybmVsLW1vZHVsZXMuYyAgIHwgIDEgKwotIGxpYmVibC9lYmxvcGVuYmFja2VuZC5jICAgICAgICAgIHwgIDIgKy0KLSBsaWJlYmwvZWJsd3N0cnRhYi5jICAgICAgICAgICAgICB8ICAyICstCi0gbGliZWxmL2VsZi5oICAgICAgICAgICAgICAgICAgICAgfCAgOSArKysrKystLS0KLSBsaWJlbGYvbGliZWxmLmggICAgICAgICAgICAgICAgICB8ICAxICsKLSBsaWJlbGYvbGliZWxmUC5oICAgICAgICAgICAgICAgICB8ICAxICsKLSBzcmMvYWRkcjJsaW5lLmMgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2FyLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9hcmxpYi5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvYXJsaWIyLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2VsZmNtcC5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9lbGZsaW50LmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvZmluZHRleHRyZWwuYyAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2kzODZfbGQuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9sZC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvbGRnZW5lcmljLmMgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2xkbGV4LmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9sZHNjcmlwdC5jICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvbm0uYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL29iamR1bXAuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9yYW5saWIuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvcmVhZGVsZi5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL3NpemUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9zdGFjay5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvc3RyaW5ncy5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL3N0cmlwLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy91bnN0cmlwLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9hZGRyc2NvcGVzLmMgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvYWxscmVncy5jICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2JhY2t0cmFjZS1kYXRhLmMgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9iYWNrdHJhY2UtZHdhcmYuYyAgICAgICAgICB8ICAyICstCi0gdGVzdHMvYmFja3RyYWNlLmMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2J1aWxkaWQuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kZWJ1Z2FsdGxpbmsuYyAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZGVidWdsaW5rLmMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2RlbGV0ZWQuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsLWFkZHItc2VjdC5jICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jICAgfCAgMiArLQotIHRlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYyAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMgICAgICB8ICAyICstCi0gdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMgICAgfCAgMiArLQotIHRlc3RzL2R3ZmxsaW5lcy5jICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsbW9kdGVzdC5jICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZHdmbHN5bXMuYyAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Vhcmx5LW9mZnNjbi5jICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9lY3AuYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZmluZC1wcm9sb2d1ZXMuYyAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Z1bmNyZXR2YWwuYyAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9mdW5jc2NvcGVzLmMgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZ2V0c3JjX2RpZS5jICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2xpbmUyYWRkci5jICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9sb3dfaGlnaF9wYy5jICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvbWQ1LXNoYTEtdGVzdC5jICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL3Jkd3JtbWFwLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9zYXJpZHguYyAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvc2VjdGlvbmR1bXAuYyAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL3ZhcmxvY3MuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy92ZHNvc3ltcy5jICAgICAgICAgICAgICAgICB8ICAyICstCi0gNzcgZmlsZXMgY2hhbmdlZCwgMTA5IGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQotCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL01ha2VmaWxlLmFtCi0rKysgZWxmdXRpbHMtMC4xNjQvTWFrZWZpbGUuYW0KLUBAIC0yNCw3ICsyNCw3IEBAIHBrZ2luY2x1ZGVfSEVBREVSUyA9IHZlcnNpb24uaAotIAotICMgQWRkIGRvYyBiYWNrIHdoZW4gd2UgaGF2ZSBzb21lIHJlYWwgY29udGVudC4KLSBTVUJESVJTID0gY29uZmlnIG00IGxpYiBsaWJlbGYgbGliZWJsIGxpYmR3ZWxmIGxpYmR3ZmwgbGliZHcgbGliY3B1IGxpYmFzbSBcCi0tCSAgYmFja2VuZHMgc3JjIHBvIHRlc3RzCi0rCSAgYmFja2VuZHMgcG8gdGVzdHMKLSAKLSBFWFRSQV9ESVNUID0gZWxmdXRpbHMuc3BlYyBHUEctS0VZIE5PVEVTIENPTlRSSUJVVElORyBcCi0gCSAgICAgQ09QWUlORyBDT1BZSU5HLUdQTFYyIENPUFlJTkctTEdQTFYzCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliL2NvbG9yLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYi9jb2xvci5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliL2NvbG9yLmMKLUBAIC0zMiw3ICszMiw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFyZ3AuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYi9jcmMzMl9maWxlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYi9jcmMzMl9maWxlLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWIvY3JjMzJfZmlsZS5jCi1AQCAtMzAsMTIgKzMwLDE0IEBACi0gIyBpbmNsdWRlIDxjb25maWcuaD4KLSAjZW5kaWYKLSAKLS0jaW5jbHVkZSAic3lzdGVtLmgiCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxzdGRpbnQuaD4KLSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSAKLSsjaW5jbHVkZSAic3lzdGVtLmgiCi0rCi0gaW50Ci0gY3JjMzJfZmlsZSAoaW50IGZkLCB1aW50MzJfdCAqcmVzcCkKLSB7Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliL2ZpeGVkc2l6ZWhhc2guaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliL2ZpeGVkc2l6ZWhhc2guaAotKysrIGVsZnV0aWxzLTAuMTY0L2xpYi9maXhlZHNpemVoYXNoLmgKLUBAIC0zMCwxMiArMzAsMTIgQEAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0gCi0gI2luY2x1ZGUgPHN5c3RlbS5oPgotIAotLSNkZWZpbmUgQ09OQ0FUKHQxLHQyKSBfX0NPTkNBVCAodDEsdDIpCi0rI2RlZmluZSBDT05DQVQxKHgseSkgeCMjeQotKyNkZWZpbmUgQ09OQ0FUKHgseSkgQ09OQ0FUMSh4LHkpCi0gCi0gLyogQmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUgdGhlIGZvbGxvd2luZyBtYWNyb3MgbXVzdCBiZSBkZWZpbmVkOgotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYi9zeXN0ZW0uaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliL3N5c3RlbS5oCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliL3N5c3RlbS5oCi1AQCAtNDksNiArNDksMTYgQEAKLSAjZWxzZQotICMgZXJyb3IgIlVua25vd24gYnl0ZSBvcmRlciIKLSAjZW5kaWYKLSsjaWZuZGVmIFRFTVBfRkFJTFVSRV9SRVRSWQotKyNkZWZpbmUgVEVNUF9GQUlMVVJFX1JFVFJZKGV4cHJlc3Npb24pIFwKLSsgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKLSsgICAgKHsgbG9uZyBpbnQgX19yZXN1bHQ7CQkJCQkJICAgICAgXAotKyAgICAgICBkbyBfX3Jlc3VsdCA9IChsb25nIGludCkgKGV4cHJlc3Npb24pOwkJCQkgICAgICBcCi0rICAgICAgIHdoaWxlIChfX3Jlc3VsdCA9PSAtMUwgJiYgZXJybm8gPT0gRUlOVFIpOwkJCSAgICAgIFwKLSsgICAgICAgX19yZXN1bHQ7IH0pKQotKyNlbmRpZgotKwotKyNkZWZpbmUgZXJyb3Ioc3RhdHVzLCBlcnJubywgLi4uKSBlcnIoc3RhdHVzLCBfX1ZBX0FSR1NfXykKLSAKLSBleHRlcm4gdm9pZCAqeG1hbGxvYyAoc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwotIGV4dGVybiB2b2lkICp4Y2FsbG9jIChzaXplX3QsIHNpemVfdCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWIveG1hbGxvYy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWIveG1hbGxvYy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliL3htYWxsb2MuYwotQEAgLTMwLDcgKzMwLDcgQEAKLSAjIGluY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxzdGRkZWYuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliYXNtL2FzbV9lbmQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliYXNtL2FzbV9lbmQuYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmFzbS9hc21fZW5kLmMKLUBAIC0zMiw3ICszMiw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJhc20vYXNtX25ld3Njbi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJhc20vYXNtX25ld3Njbi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliYXNtL2FzbV9uZXdzY24uYwotQEAgLTMyLDcgKzMyLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJjcHUvaTM4Nl9nZW5kaXMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliY3B1L2kzODZfZ2VuZGlzLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJjcHUvaTM4Nl9nZW5kaXMuYwotQEAgLTMxLDcgKzMxLDcgQEAKLSAjIGluY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliY3B1L2kzODZfbGV4LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmNwdS9pMzg2X2xleC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliY3B1L2kzODZfbGV4LmMKLUBAIC01NzEsNyArNTcxLDcgQEAgY2hhciAqaTM4Nl90ZXh0OwotICNlbmRpZgotIAotICNpbmNsdWRlIDxjdHlwZS5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotIAotICNpbmNsdWRlIDxzeXN0ZW0uaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJjcHUvaTM4Nl9wYXJzZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJjcHUvaTM4Nl9wYXJzZS5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliY3B1L2kzODZfcGFyc2UuYwotQEAgLTEwNyw3ICsxMDcsNyBAQAotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8bWF0aC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3L01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJkdy9NYWtlZmlsZS5hbQotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmR3L01ha2VmaWxlLmFtCi1AQCAtMTE3LDcgKzExNyw3IEBAIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGwKLSAJCS1XbCwtLWVuYWJsZS1uZXctZHRhZ3MsLXJwYXRoLCQocGtnbGliZGlyKSBcCi0gCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkPCwtLW5vLXVuZGVmaW5lZCBcCi0gCQktV2wsLS13aG9sZS1hcmNoaXZlICQoZmlsdGVyLW91dCAkPCwkXikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZVwKLS0JCS1sZGwgJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykKLSsJCS1sZGwgJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykgLWxmdHMgLWxhcmdwCi0gCUAkKHRleHRyZWxfY2hlY2spCi0gCSQoQU1fVl9hdClsbiAtZnMgJEAgJEAuJChWRVJTSU9OKQotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3L2xpYmR3X2FsbG9jLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmR3L2xpYmR3X2FsbG9jLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJkdy9saWJkd19hbGxvYy5jCi1AQCAtMzEsMTEgKzMxLDEyIEBACi0gIyBpbmNsdWRlIDxjb25maWcuaD4KLSAjZW5kaWYKLSAKLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSAjaW5jbHVkZSAibGliZHdQLmgiCi0rI2luY2x1ZGUgInN5c3RlbS5oIgotIAotIAotIHZvaWQgKgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmR3ZmwvTWFrZWZpbGUuYW0KLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJkd2ZsL01ha2VmaWxlLmFtCi1AQCAtODYsNiArODYsOCBAQCBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCi0gbGliZWJsID0gLi4vbGliZWJsL2xpYmVibC5hCi0gbGliZXUgPSAuLi9saWIvbGliZXUuYQotIAotK0xEQUREID0gLWxmdHMKLSsKLSBsaWJkd2ZsX3BpY19hX1NPVVJDRVMgPQotIGFtX2xpYmR3ZmxfcGljX2FfT0JKRUNUUyA9ICQobGliZHdmbF9hX1NPVVJDRVM6LmM9Lm9zKQotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCi1AQCAtMjcsNiArMjcsNyBAQAotICAgIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0gCi0gI2luY2x1ZGUgImxpYmR3ZmxQLmgiCi0rI2luY2x1ZGUgInN5c3RlbS5oIgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLUBAIC05NCw3ICs5NSw3IEBAIF9fbGliZHdmbF9vcGVuX2J5X2J1aWxkX2lkIChEd2ZsX01vZHVsZQotIAl7Ci0gCSAgaWYgKCpmaWxlX25hbWUgIT0gTlVMTCkKLSAJICAgIGZyZWUgKCpmaWxlX25hbWUpOwotLQkgICpmaWxlX25hbWUgPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lIChuYW1lKTsKLSsJICAqZmlsZV9uYW1lID0gcmVhbHBhdGggKG5hbWUsIE5VTEwpOwotIAkgIGlmICgqZmlsZV9uYW1lID09IE5VTEwpCi0gCSAgICB7Ci0gCSAgICAgICpmaWxlX25hbWUgPSBuYW1lOwotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvZHdmbF9lcnJvci5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJkd2ZsL2R3ZmxfZXJyb3IuYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvZHdmbF9lcnJvci5jCi1AQCAtMTQwLDYgKzE0MCw3IEBAIF9fbGliZHdmbF9zZXRlcnJubyAoRHdmbF9FcnJvciBlcnJvcikKLSBjb25zdCBjaGFyICoKLSBkd2ZsX2Vycm1zZyAoaW50IGVycm9yKQotIHsKLSsgIHN0YXRpYyBfX3RocmVhZCBjaGFyIHNbNjRdID0gIiI7Ci0gICBpZiAoZXJyb3IgPT0gMCB8fCBlcnJvciA9PSAtMSkKLSAgICAgewotICAgICAgIGludCBsYXN0X2Vycm9yID0gZ2xvYmFsX2Vycm9yOwotQEAgLTE1NCw3ICsxNTUsOCBAQCBkd2ZsX2Vycm1zZyAoaW50IGVycm9yKQotICAgc3dpdGNoIChlcnJvciAmfiAweGZmZmYpCi0gICAgIHsKLSAgICAgY2FzZSBPVEhFUl9FUlJPUiAoRVJSTk8pOgotLSAgICAgIHJldHVybiBzdHJlcnJvcl9yIChlcnJvciAmIDB4ZmZmZiwgImJhZCIsIDApOwotKyAgICAgIHN0cmVycm9yX3IgKGVycm9yICYgMHhmZmZmLCBzLCBzaXplb2YocykpOwotKyAgICAgIHJldHVybiBzOwotICAgICBjYXNlIE9USEVSX0VSUk9SIChMSUJFTEYpOgotICAgICAgIHJldHVybiBlbGZfZXJybXNnIChlcnJvciAmIDB4ZmZmZik7Ci0gICAgIGNhc2UgT1RIRVJfRVJST1IgKExJQkRXKToKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYwotQEAgLTMxLDYgKzMxLDcgQEAKLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSAjaW5jbHVkZSAiLi4vbGliZHcvbGliZHdQLmgiCS8qIERXQVJGX0VfKiB2YWx1ZXMgYXJlIGhlcmUuICAqLwotICNpbmNsdWRlICIuLi9saWJlbGYvbGliZWxmUC5oIgotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCi1AQCAtMzcyLDcgKzM3Miw3IEBAIGR3Zmxfc3RhbmRhcmRfZmluZF9kZWJ1Z2luZm8gKER3ZmxfTW9kdWwKLSAgICAgICAvKiBJZiBGSUxFX05BTUUgaXMgYSBzeW1saW5rLCB0aGUgZGVidWcgZmlsZSBtaWdodCBiZSBhc3NvY2lhdGVkCi0gCSB3aXRoIHRoZSBzeW1saW5rIHRhcmdldCBuYW1lIGluc3RlYWQuICAqLwotIAotLSAgICAgIGNoYXIgKmNhbm9uID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoZmlsZV9uYW1lKTsKLSsgICAgICBjaGFyICpjYW5vbiA9IHJlYWxwYXRoIChmaWxlX25hbWUsIE5VTEwpOwotICAgICAgIGlmIChjYW5vbiAhPSBOVUxMICYmIHN0cmNtcCAoZmlsZV9uYW1lLCBjYW5vbikpCi0gCWZkID0gZmluZF9kZWJ1Z2luZm9faW5fcGF0aCAobW9kLCBjYW5vbiwKLSAJCQkJICAgICBkZWJ1Z2xpbmtfZmlsZSwgZGVidWdsaW5rX2NyYywKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYwotQEAgLTMxLDYgKzMxLDE2IEBACi0gCi0gI2RlZmluZSBjcmMzMl9maWxlIGF0dHJpYnV0ZV9oaWRkZW4gX19saWJkd2ZsX2NyYzMyX2ZpbGUKLSAjZGVmaW5lIGNyYzMyIF9fbGliZHdmbF9jcmMzMgotKwotKyNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCi0rI2RlZmluZSBURU1QX0ZBSUxVUkVfUkVUUlkoZXhwcmVzc2lvbikgXAotKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAotKyAgICAoeyBsb25nIGludCBfX3Jlc3VsdDsJCQkJCQkgICAgICBcCi0rICAgICAgIGRvIF9fcmVzdWx0ID0gKGxvbmcgaW50KSAoZXhwcmVzc2lvbik7CQkJCSAgICAgIFwKLSsgICAgICAgd2hpbGUgKF9fcmVzdWx0ID09IC0xTCAmJiBlcnJubyA9PSBFSU5UUik7CQkJICAgICAgXAotKyAgICAgICBfX3Jlc3VsdDsgfSkpCi0rI2VuZGlmCi0rCi0gI2RlZmluZSBMSUJfU1lTVEVNX0gJMQotICNpbmNsdWRlIDxsaWJkd2ZsUC5oPgotICNpbmNsdWRlICIuLi9saWIvY3JjMzJfZmlsZS5jIgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvbGludXgta2VybmVsLW1vZHVsZXMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCi1AQCAtMzQsNiArMzQsNyBAQAotICNpbmNsdWRlIDxjb25maWcuaD4KLSAKLSAjaW5jbHVkZSAibGliZHdmbFAuaCIKLSsjaW5jbHVkZSAic3lzdGVtLmgiCi0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKLUBAIC0zMiw3ICszMiw3IEBACi0gCi0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxkbGZjbi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliZWxmUC5oPgotICNpbmNsdWRlIDxkd2FyZi5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJlYmwvZWJsd3N0cnRhYi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJlYmwvZWJsd3N0cnRhYi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZWJsL2VibHdzdHJ0YWIuYwotQEAgLTMwNSw3ICszMDUsNyBAQCBjb3B5c3RyaW5ncyAoc3RydWN0IEVibF9XU3RyZW50ICpub2RlcCwKLSAKLSAgIC8qIFByb2Nlc3MgdGhlIGN1cnJlbnQgbm9kZS4gICovCi0gICBub2RlcC0+b2Zmc2V0ID0gKm9mZnNldHA7Ci0tICAqZnJlZXAgPSB3bWVtcGNweSAoKmZyZWVwLCBub2RlcC0+c3RyaW5nLCBub2RlcC0+bGVuKTsKLSsgICpmcmVlcCA9IHdtZW1jcHkgKCpmcmVlcCwgbm9kZXAtPnN0cmluZywgbm9kZXAtPmxlbikgKyBub2RlcC0+bGVuOwotICAgKm9mZnNldHAgKz0gbm9kZXAtPmxlbiAqIHNpemVvZiAod2NoYXJfdCk7Ci0gCi0gICBmb3IgKHN1YnMgPSBub2RlcC0+bmV4dDsgc3VicyAhPSBOVUxMOyBzdWJzID0gc3Vicy0+bmV4dCkKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJlbGYvZWxmLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmVsZi9lbGYuaAotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmVsZi9lbGYuaAotQEAgLTIxLDcgKzIxLDkgQEAKLSAKLSAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSAKLS1fX0JFR0lOX0RFQ0xTCi0rI2lmZGVmIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0gCi0gLyogU3RhbmRhcmQgRUxGIHR5cGVzLiAgKi8KLSAKLUBAIC0zNTUyLDcgKzM1NTQsOCBAQCBlbnVtCi0gCi0gI2RlZmluZSBSX1RJTEVHWF9OVU0JCTEzMAotIAotLQotLV9fRU5EX0RFQ0xTCi0rI2lmZGVmIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotIAotICNlbmRpZgkvKiBlbGYuaCAqLwotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmVsZi9saWJlbGYuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZWxmL2xpYmVsZi5oCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZWxmL2xpYmVsZi5oCi1AQCAtMjksNiArMjksNyBAQAotICNpZm5kZWYgX0xJQkVMRl9ICi0gI2RlZmluZSBfTElCRUxGX0ggMQotIAotKyNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxzdGRpbnQuaD4KLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZWxmL2xpYmVsZlAuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZWxmL2xpYmVsZlAuaAotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmVsZi9saWJlbGZQLmgKLUBAIC0zNiw2ICszNiw3IEBACi0gCi0gI2luY2x1ZGUgPGFyLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSsjaW5jbHVkZSA8bGliZWxmLmg+Ci0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHN0ZGludC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9hZGRyMmxpbmUuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL2FkZHIybGluZS5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2FkZHIybGluZS5jCi1AQCAtMjMsNyArMjMsNyBAQAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8bGliZHdmbC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9hci5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvYXIuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9hci5jCi1AQCAtMjIsNyArMjIsNyBAQAotIAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2FybGliLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9hcmxpYi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2FybGliLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2FybGliMi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvYXJsaWIyLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvYXJsaWIyLmMKLUBAIC0yMCw3ICsyMCw3IEBACi0gIyBpbmNsdWRlIDxjb25maWcuaD4KLSAjZW5kaWYKLSAKLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8bGltaXRzLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9lbGZjbXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL2VsZmNtcC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2VsZmNtcC5jCi1AQCAtMjMsNyArMjMsNyBAQAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvZWxmbGludC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvZWxmbGludC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2VsZmxpbnQuYwotQEAgLTI0LDcgKzI0LDcgQEAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGJ5dGVzd2FwLmg+Ci0gI2luY2x1ZGUgPGVuZGlhbi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9maW5kdGV4dHJlbC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvZmluZHRleHRyZWwuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9maW5kdGV4dHJlbC5jCi1AQCAtMjMsNyArMjMsNyBAQAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxsaWJkdy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9pMzg2X2xkLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9pMzg2X2xkLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvaTM4Nl9sZC5jCi1AQCAtMjAsNyArMjAsNyBAQAotICNlbmRpZgotIAotICNpbmNsdWRlIDxhc3NlcnQuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9sZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvbGQuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9sZC5jCi1AQCAtMjEsNyArMjEsNyBAQAotIAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8bGliZWxmLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvbGRnZW5lcmljLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9sZGdlbmVyaWMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9sZGdlbmVyaWMuYwotQEAgLTIzLDcgKzIzLDcgQEAKLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZGxmY24uaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGZubWF0Y2guaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9sZGxleC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvbGRsZXguYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9sZGxleC5jCi1AQCAtMTA5OSw3ICsxMDk5LDcgQEAgY2hhciAqbGR0ZXh0OwotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZWxmLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvbGRzY3JpcHQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL2xkc2NyaXB0LmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvbGRzY3JpcHQuYwotQEAgLTk1LDcgKzk1LDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSAjaW5jbHVkZSA8c3RkaW50Lmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL25tLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9ubS5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL25tLmMKLUBAIC0yNiw3ICsyNiw3IEBACi0gI2luY2x1ZGUgPGN0eXBlLmg+Ci0gI2luY2x1ZGUgPGR3YXJmLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL29iamR1bXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL29iamR1bXAuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9vYmpkdW1wLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFyZ3AuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvcmFubGliLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9yYW5saWIuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9yYW5saWIuYwotQEAgLTI0LDcgKzI0LDcgQEAKLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9yZWFkZWxmLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9yZWFkZWxmLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvcmVhZGVsZi5jCi1AQCAtMjUsNyArMjUsNyBAQAotICNpbmNsdWRlIDxjdHlwZS5oPgotICNpbmNsdWRlIDxkd2FyZi5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9zaXplLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9zaXplLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvc2l6ZS5jCi1AQCAtMjEsNyArMjEsNyBAQAotICNlbmRpZgotIAotICNpbmNsdWRlIDxhcmdwLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL3N0YWNrLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9zdGFjay5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL3N0YWNrLmMKLUBAIC0xOCw3ICsxOCw3IEBACi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8YXJncC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL3N0cmluZ3MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL3N0cmluZ3MuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9zdHJpbmdzLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPGN0eXBlLmg+Ci0gI2luY2x1ZGUgPGVuZGlhbi5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9zdHJpcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvc3RyaXAuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9zdHJpcC5jCi1AQCAtMjQsNyArMjQsNyBAQAotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KLSAjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGxpYmVsZi5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy91bnN0cmlwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy91bnN0cmlwLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvdW5zdHJpcC5jCi1AQCAtMzEsNyArMzEsNyBAQAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Zm5tYXRjaC5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvYWRkcnNjb3Blcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9hZGRyc2NvcGVzLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9hZGRyc2NvcGVzLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAKLSAKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9hbGxyZWdzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2FsbHJlZ3MuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2FsbHJlZ3MuYwotQEAgLTIxLDcgKzIxLDcgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvYmFja3RyYWNlLWRhdGEuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvYmFja3RyYWNlLWRhdGEuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2JhY2t0cmFjZS1kYXRhLmMKLUBAIC0yNyw3ICsyNyw3IEBACi0gI2luY2x1ZGUgPGRpcmVudC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxkd2FyZi5oPgotICNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19saW51eF9fKQotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2JhY2t0cmFjZS1kd2FyZi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9iYWNrdHJhY2UtZHdhcmYuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2JhY2t0cmFjZS1kd2FyZi5jCi1AQCAtMjIsNyArMjIsNyBAQAotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9iYWNrdHJhY2UuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvYmFja3RyYWNlLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9iYWNrdHJhY2UuYwotQEAgLTI0LDcgKzI0LDcgQEAKLSAjaW5jbHVkZSA8ZGlyZW50Lmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPGR3YXJmLmg+Ci0gI2lmZGVmIF9fbGludXhfXwotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2J1aWxkaWQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvYnVpbGRpZC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvYnVpbGRpZC5jCi1AQCAtMjMsNyArMjMsNyBAQAotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihlbGYpCi0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZWxmKQotICNpbmNsdWRlIDxzdGRpby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kZWJ1Z2FsdGxpbmsuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZGVidWdhbHRsaW5rLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kZWJ1Z2FsdGxpbmsuYwotQEAgLTIzLDcgKzIzLDcgQEAKLSAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHcpCi0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZWxmKQotICNpbmNsdWRlIDxzdGRpby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kZWJ1Z2xpbmsuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZGVidWdsaW5rLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kZWJ1Z2xpbmsuYwotQEAgLTIxLDcgKzIxLDcgQEAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdlbGYpCi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2RlbGV0ZWQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZGVsZXRlZC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZGVsZXRlZC5jCi1AQCAtMjEsNyArMjEsNyBAQAotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotICNpZmRlZiBfX2xpbnV4X18KLSAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbC1hZGRyLXNlY3QuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZHdmbC1hZGRyLXNlY3QuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmwtYWRkci1zZWN0LmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jCi1AQCAtMjAsNyArMjAsNyBAQAotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jCi1AQCAtMjQsNyArMjQsNyBAQAotICNpbmNsdWRlIDxkaXJlbnQuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAjaW5jbHVkZSA8ZHdhcmYuaD4KLSAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbC1idWctZ2V0bW9kdWxlcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMKLUBAIC0xOCw3ICsxOCw3IEBACi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQotIAotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAKLSBzdGF0aWMgY29uc3QgRHdmbF9DYWxsYmFja3MgY2FsbGJhY2tzID0KLSAgIHsKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYwotQEAgLTIwLDcgKzIwLDcgQEAKLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmxsaW5lcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kd2ZsbGluZXMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmxsaW5lcy5jCi1AQCAtMjcsNyArMjcsNyBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotIAotIGludAotIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbG1vZHRlc3QuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZHdmbG1vZHRlc3QuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3Zmxtb2R0ZXN0LmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmxzeW1zLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2R3ZmxzeW1zLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2Zsc3ltcy5jCi1AQCAtMjUsNyArMjUsNyBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAKLSBzdGF0aWMgY29uc3QgY2hhciAqCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZWFybHktb2Zmc2NuLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2Vhcmx5LW9mZnNjbi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZWFybHktb2Zmc2NuLmMKLUBAIC0xOSw3ICsxOSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZWNwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2VjcC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZWNwLmMKLUBAIC0yMCw3ICsyMCw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2ZpbmQtcHJvbG9ndWVzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2ZpbmQtcHJvbG9ndWVzLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9maW5kLXByb2xvZ3Vlcy5jCi1AQCAtMjUsNyArMjUsNyBAQAotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPGZubWF0Y2guaD4KLSAKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9mdW5jcmV0dmFsLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2Z1bmNyZXR2YWwuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2Z1bmNyZXR2YWwuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZnVuY3Njb3Blcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9mdW5jc2NvcGVzLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9mdW5jc2NvcGVzLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8Zm5tYXRjaC5oPgotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2dldHNyY19kaWUuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZ2V0c3JjX2RpZS5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZ2V0c3JjX2RpZS5jCi1AQCAtMTksNyArMTksNyBAQAotICNlbmRpZgotIAotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8bGliZWxmLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvbGluZTJhZGRyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvbGluZTJhZGRyLmMKLUBAIC0yNiw3ICsyNiw3IEBACi0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotIAotIAotIHN0YXRpYyB2b2lkCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvbG93X2hpZ2hfcGMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvbG93X2hpZ2hfcGMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2xvd19oaWdoX3BjLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8Zm5tYXRjaC5oPgotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL21kNS1zaGExLXRlc3QuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvbWQ1LXNoYTEtdGVzdC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvbWQ1LXNoYTEtdGVzdC5jCi1AQCAtMTksNyArMTksNyBAQAotICNlbmRpZgotIAotICNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gCi0gI2luY2x1ZGUgIm1kNS5oIgotICNpbmNsdWRlICJzaGExLmgiCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvcmR3cm1tYXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvcmR3cm1tYXAuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL3Jkd3JtbWFwLmMKLUBAIC0xOSw3ICsxOSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9zYXJpZHguYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvc2FyaWR4LmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9zYXJpZHguYwotQEAgLTE3LDcgKzE3LDcgQEAKLSAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvc2VjdGlvbmR1bXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvc2VjdGlvbmR1bXAuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL3NlY3Rpb25kdW1wLmMKLUBAIC0xOCw3ICsxOCw3IEBACi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotIAotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL3ZhcmxvY3MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvdmFybG9jcy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvdmFybG9jcy5jCi1AQCAtMjUsNyArMjUsNyBAQAotICNpbmNsdWRlIDxkd2FyZi5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy92ZHNvc3ltcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy92ZHNvc3ltcy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvdmRzb3N5bXMuYwotQEAgLTE4LDcgKzE4LDcgQEAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZWxmL2VsZl9nZXRhcnN5bS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJlbGYvZWxmX2dldGFyc3ltLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJlbGYvZWxmX2dldGFyc3ltLmMKLUBAIC0zMDIsNyArMzAyLDcgQEAgZWxmX2dldGFyc3ltIChFbGYgKmVsZiwgc2l6ZV90ICpwdHIpCi0gCQlhcnN5bVtjbnRdLmFzX29mZiA9ICgqdTMyKVtjbnRdOwotIAotIAkgICAgICBhcnN5bVtjbnRdLmFzX2hhc2ggPSBfZGxfZWxmX2hhc2ggKHN0cl9kYXRhKTsKLS0JICAgICAgc3RyX2RhdGEgPSByYXdtZW1jaHIgKHN0cl9kYXRhLCAnXDAnKSArIDE7Ci0rCSAgICAgIHN0cl9kYXRhID0gbWVtY2hyIChzdHJfZGF0YSwgJ1wwJywgU0laRV9NQVgpICsgMTsKLSAJICAgIH0KLSAKLSAJICAvKiBBdCB0aGUgZW5kIGEgc3BlY2lhbCBlbnRyeS4gICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L3VjbGliYy1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC91Y2xpYmMtc3VwcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY2YjcwZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L3VjbGliYy1zdXBwb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLUZyb20gM2RhZWMyZGQxMWEwNDk1NWY5NWU4ZjY1YTQ4ODIwMTAzZDg0ZGJlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgotRGF0ZTogVGh1LCA5IEFwciAyMDE1IDEyOjEyOjQ5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIHVjbGliYyBzdXBwb3J0IGZvciBlbGZ1dGlscyAwLjE2MQotCi1vbiB1Y2xpYmMgc3lzdGVtcyBsaWJpbnRsIGFuZCBsaWJ1YXJncCBhcmUgc2VwYXJhdGUgZnJvbSBsaWJjLgotc28gdGhleSBuZWVkIHRvIGJlIHNwZWNpZmllZCBvbiBjb21tYW5kbGluZSB3aGVuIHdlIHVzZSBwcm94eS1saWJpbnRsCi10aGVuIGxpYmludGwgaXMgYSBzdGF0aWMgYXJjaGl2ZSBzbyBpdCBzaG91bGQgYmUgbGlzdGVkIGxhc3Qgc2luY2UKLWVsZnV0aWxzIGRvZXMgbm90IHJlc3BlY3QgZGlzYWJsZS1ubHMgd2UgbmVlZCB0byBsaW5rIGluIGxpYmludGwKLQotV2UgYWRkIGEgbmV3IG9wdGlvbiAtLWVuYWJsZS11Y2xpYmMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGNvbnRyb2wKLXRoZSB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZHVyaW5nIGJ1aWxkLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYyBzcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtPgotU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+Ci1bSnVubGluZyBaaGVuZzoKLSAtIGFkanVzdCBjb250ZXh0Ci1dCi0tLS0KLSBjb25maWd1cmUuYWMgICAgICAgfCA4ICsrKysrKysrCi0gbGliY3B1L01ha2VmaWxlLmFtIHwgNCArKysrCi0gbGliZHcvTWFrZWZpbGUuYW0gIHwgNyArKysrKystCi0gbGliZWxmL01ha2VmaWxlLmFtIHwgNSArKysrKwotIDQgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9jb25maWd1cmUuYWMKLSsrKyBlbGZ1dGlscy0wLjE2NC9jb25maWd1cmUuYWMKLUBAIC02Niw2ICs2NiwxNCBAQCBBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAotIAotIEFIX1RFTVBMQVRFKFtVU0VfTE9DS1NdLCBbRGVmaW5lZCBpZiBsaWJyYXJpZXMgc2hvdWxkIGJlIHRocmVhZC1zYWZlLl0pCi0gCi0rQUNfQVJHX0VOQUJMRShbdWNsaWJjXSwKLStBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWNsaWJjXSwgW1VzZSB1Y2xpYmMgZm9yIHN5c3RlbSBsaWJyYXJpZXNdKSwKLSt1c2VfdWNsaWJjPXllcywgdXNlX3VjbGliYz1ubykKLStBTV9DT05ESVRJT05BTChVU0VfVUNMSUJDLCB0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXMpCi0rQVNfSUYoW3Rlc3QgIiR1c2VfdWNsaWJjIiA9IHllc10sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQotKwotK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQotKwotIEFDX1BST0dfQ0MKLSBBQ19QUk9HX1JBTkxJQgotIEFDX1BST0dfWUFDQwotQEAgLTI5MSwxOCArMjk5LDEzIEBAIEFDX0xJTktfSUZFTFNFKAotICkKLSAKLSBkbmwgSWYgb3VyIGxpYmMgZG9lc24ndCBwcm92aWRlIGFyZ3AsIHRoZW4gdGVzdCBmb3IgbGliYXJncAotLWlmIHRlc3QgIiRsaWJjX2hhc19hcmdwIiA9ICJmYWxzZSIgOyB0aGVuCi0tCUFDX01TR19XQVJOKCJsaWJjIGRvZXMgbm90IGhhdmUgYXJncCIpCi0tCUFDX0NIRUNLX0xJQihbYXJncF0sIFthcmdwX3BhcnNlXSwgW2hhdmVfYXJncD0idHJ1ZSJdLCBbaGF2ZV9hcmdwPSJmYWxzZSJdKQotLQotLQlpZiB0ZXN0ICIkaGF2ZV9hcmdwIiA9ICJmYWxzZSI7IHRoZW4KLS0JCUFDX01TR19FUlJPUigibm8gbGliYXJncCBmb3VuZCIpCi0tCWVsc2UKLS0JCWFyZ3BfTERBREQ9Ii1sYXJncCIKLS0JZmkKLS1lbHNlCi0tCWFyZ3BfTERBREQ9IiIKLS1maQotK0FTX0lGKFt0ZXN0ICJ4JGxpYmNfaGFzX2FyZ3AiID0gInhmYWxzZSJdLAotKwlbQUNfTVNHX1dBUk4oImxpYmMgZG9lcyBub3QgaGF2ZSBhcmdwIikKLSsJQUNfQ0hFQ0tfTElCKFthcmdwXSwgW2FyZ3BfcGFyc2VdLCBbaGF2ZV9hcmdwPSJ0cnVlIiBhcmdwX0xEQUREPSItbGFyZ3AiXSwgW2hhdmVfYXJncD0iZmFsc2UiXSldLCBbYXJncF9MREFERD0iIl0pCi0rCi0rQVNfSUYoW3Rlc3QgIngkbGliY19oYXNfYXJncCIgPSAieGZhbHNlIiAtYSAieCRoYXZlX2FyZ3AiID0gInhmYWxzZSJdLAotKwlBQ19DSEVDS19MSUIoW3VhcmdwXSwgW2FyZ3BfcGFyc2VdLCBbaGF2ZV91YXJncD0idHJ1ZSIgYXJncF9MREFERD0iLWx1YXJncCJdLCBbaGF2ZV91YXJncD0iZmFsc2UiXSldLCBbYXJncF9MREFERD0iIl0pCi0rCi0gQUNfU1VCU1QoW2FyZ3BfTERBRERdKQotIAotIGRubCBUaGUgZGlyZWN0b3JpZXMgd2l0aCBjb250ZW50LgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmNwdS9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliY3B1L01ha2VmaWxlLmFtCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliY3B1L01ha2VmaWxlLmFtCi1AQCAtODAsNiArODAsMTAgQEAgaTM4Nl9wYXJzZV9DRkxBR1MgPSAtRE5NTkVTPSJgd2MgLWwgPCBpMwotIGkzODZfbGV4Lm86IGkzODZfcGFyc2UuaAotIGkzODZfZ2VuZGlzX0xEQUREID0gJChsaWJldSkgLWxtCi0gCi0raWYgVVNFX1VDTElCQwotK2kzODZfZ2VuZGlzX0xEQUREICs9IC1saW50bAotK2VuZGlmCi0rCi0gaTM4Nl9wYXJzZS5oOiBpMzg2X3BhcnNlLmMgOwotIAotIEVYVFJBX0RJU1QgPSBkZWZzL2kzODYKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJkdy9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZHcvTWFrZWZpbGUuYW0KLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJkdy9NYWtlZmlsZS5hbQotQEAgLTEwMiw2ICsxMDIsMTEgQEAgZW5kaWYKLSBsaWJkd19waWNfYV9TT1VSQ0VTID0KLSBhbV9saWJkd19waWNfYV9PQkpFQ1RTID0gJChsaWJkd19hX1NPVVJDRVM6LmM9Lm9zKQotIAotK2xpYmR3X3NvX0xETElCUyA9Ci0raWYgVVNFX1VDTElCQwotK2xpYmR3X3NvX0xETElCUyArPSAtbGludGwKLStlbmRpZgotKwotIGxpYmR3X3NvX1NPVVJDRVMgPQotIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIC4uL2xpYmR3ZWxmL2xpYmR3ZWxmX3BpYy5hIFwKLSAJICAuLi9saWJkd2ZsL2xpYmR3ZmxfcGljLmEgLi4vbGliZWJsL2xpYmVibC5hIFwKLUBAIC0xMTIsNyArMTE3LDcgQEAgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbAotIAkJLVdsLC0tZW5hYmxlLW5ldy1kdGFncywtcnBhdGgsJChwa2dsaWJkaXIpIFwKLSAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQ8LC0tbm8tdW5kZWZpbmVkIFwKLSAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJChmaWx0ZXItb3V0ICQ8LCReKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlXAotLQkJLWxkbCAkKGFyZ3BfTERBREQpICQoemlwX0xJQlMpCi0rCQktbGRsICQoYXJncF9MREFERCkgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpCi0gCUAkKHRleHRyZWxfY2hlY2spCi0gCSQoQU1fVl9hdClsbiAtZnMgJEAgJEAuJChWRVJTSU9OKQotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmVsZi9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZWxmL01ha2VmaWxlLmFtCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZWxmL01ha2VmaWxlLmFtCi1AQCAtOTMsNyArOTMsMTIgQEAgbGliZWxmX2FfU09VUkNFUyA9IGVsZl92ZXJzaW9uLmMgZWxmX2hhcwotIGxpYmVsZl9waWNfYV9TT1VSQ0VTID0KLSBhbV9saWJlbGZfcGljX2FfT0JKRUNUUyA9ICQobGliZWxmX2FfU09VUkNFUzouYz0ub3MpCi0gCi0rCi0gbGliZWxmX3NvX0xETElCUyA9Ci0raWYgVVNFX1VDTElCQwotK2xpYmVsZl9zb19MRExJQlMgKz0gLWxpbnRsCi0rZW5kaWYKLSsKLSBpZiBVU0VfTE9DS1MKLSBsaWJlbGZfc29fTERMSUJTICs9IC1scHRocmVhZAotIGVuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLUlnbm9yZS1kaWZmZXJlbmNlcy1iZXR3ZWVuLW1pcHMtbWFjaGluZS1pZGVudGlmaWVycy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAxLUlnbm9yZS1kaWZmZXJlbmNlcy1iZXR3ZWVuLW1pcHMtbWFjaGluZS1pZGVudGlmaWVycy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLUlnbm9yZS1kaWZmZXJlbmNlcy1iZXR3ZWVuLW1pcHMtbWFjaGluZS1pZGVudGlmaWVycy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGIzMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2gKQEAgLTAsMCArMSwxMTYzIEBACitGcm9tIDRiMGZlODBiMzk1MWYwNDRjMWMxYjE0ZDFkN2Y1ZjBiOGFiNjc1MDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAwNjozNTozNCArMDAwMAorU3ViamVjdDogW1BBVENIXSBidWlsZDogUHJvdmlkZSBhbHRlcm5hdGl2ZXMgZm9yIGdsaWJjIGFzc3VtcHRpb25zIGhlbHBzCisgY29tcGlsaW5nIGl0IG9uIG11c2wKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgbGliL2NvbG9yLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIGxpYi9jcmMzMl9maWxlLmMgICAgICAgICAgICAgICAgIHwgIDQgKysrLQorIGxpYi9maXhlZHNpemVoYXNoLmggICAgICAgICAgICAgIHwgIDQgKystLQorIGxpYi9zeXN0ZW0uaCAgICAgICAgICAgICAgICAgICAgIHwgMTEgKysrKysrKysrKysKKyBsaWIveG1hbGxvYy5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgbGliYXNtL2FzbV9lbmQuYyAgICAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmFzbS9hc21fbmV3c2NuLmMgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJjcHUvaTM4Nl9nZW5kaXMuYyAgICAgICAgICAgICB8ICAyICstCisgbGliY3B1L2kzODZfbGV4LmMgICAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmNwdS9pMzg2X3BhcnNlLmMgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJkdy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICB8ICAyICstCisgbGliZHcvbGliZHdfYWxsb2MuYyAgICAgICAgICAgICAgfCAgMyArKy0KKyBsaWJkd2ZsL01ha2VmaWxlLmFtICAgICAgICAgICAgICB8ICAyICsrCisgbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2ZpbmRfZWxmLmMgfCAgMyArKy0KKyBsaWJkd2ZsL2R3ZmxfZXJyb3IuYyAgICAgICAgICAgICB8ICA0ICsrKy0KKyBsaWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMgICB8ICAxICsKKyBsaWJkd2ZsL2ZpbmQtZGVidWdpbmZvLmMgICAgICAgICB8ICAyICstCisgbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYyAgICAgfCAxMCArKysrKysrKysrCisgbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jICAgfCAgMSArCisgbGliZWJsL2VibG9wZW5iYWNrZW5kLmMgICAgICAgICAgfCAgMiArLQorIGxpYmVibC9lYmx3c3RydGFiLmMgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJlbGYvZWxmLmggICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKysrKy0tLQorIGxpYmVsZi9saWJlbGYuaCAgICAgICAgICAgICAgICAgIHwgIDEgKworIGxpYmVsZi9saWJlbGZQLmggICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9hZGRyMmxpbmUuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvYXIuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2FybGliLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9hcmxpYjIuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvZWxmY21wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2VsZmxpbnQuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9maW5kdGV4dHJlbC5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvaTM4Nl9sZC5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2xkLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9sZGdlbmVyaWMuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvbGRsZXguYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2xkc2NyaXB0LmMgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9ubS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvb2JqZHVtcC5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3JhbmxpYi5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9yZWFkZWxmLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvc2l6ZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3N0YWNrLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9zdHJpbmdzLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvc3RyaXAuYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3Vuc3RyaXAuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2FkZHJzY29wZXMuYyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9hbGxyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvYmFja3RyYWNlLWRhdGEuYyAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2JhY2t0cmFjZS1kd2FyZi5jICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9iYWNrdHJhY2UuYyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvYnVpbGRpZC5jICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2RlYnVnYWx0bGluay5jICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9kZWJ1Z2xpbmsuYyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZGVsZXRlZC5jICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmwtYWRkci1zZWN0LmMgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMgICB8ICAyICstCisgdGVzdHMvZHdmbC1idWctZmQtbGVhay5jICAgICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYyAgICAgIHwgIDIgKy0KKyB0ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYyAgICB8ICAyICstCisgdGVzdHMvZHdmbGxpbmVzLmMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2R3Zmxtb2R0ZXN0LmMgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9kd2Zsc3ltcy5jICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZWFybHktb2Zmc2NuLmMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2VjcC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9maW5kLXByb2xvZ3Vlcy5jICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZnVuY3JldHZhbC5jICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2Z1bmNzY29wZXMuYyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9nZXRzcmNfZGllLmMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvbGluZTJhZGRyLmMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2xvd19oaWdoX3BjLmMgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9tZDUtc2hhMS10ZXN0LmMgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvcmR3cm1tYXAuYyAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL3NhcmlkeC5jICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9zZWN0aW9uZHVtcC5jICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvdmFybG9jcy5jICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL3Zkc29zeW1zLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyA3NyBmaWxlcyBjaGFuZ2VkLCAxMDkgaW5zZXJ0aW9ucygrKSwgNzMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE2Ni9NYWtlZmlsZS5hbQorQEAgLTI4LDcgKzI4LDcgQEAgcGtnaW5jbHVkZV9IRUFERVJTID0gdmVyc2lvbi5oCisgCisgIyBBZGQgZG9jIGJhY2sgd2hlbiB3ZSBoYXZlIHNvbWUgcmVhbCBjb250ZW50LgorIFNVQkRJUlMgPSBjb25maWcgbTQgbGliIGxpYmVsZiBsaWJlYmwgbGliZHdlbGYgbGliZHdmbCBsaWJkdyBsaWJjcHUgbGliYXNtIFwKKy0JICBiYWNrZW5kcyBzcmMgcG8gdGVzdHMKKysJICBiYWNrZW5kcyBwbyB0ZXN0cworIAorIEVYVFJBX0RJU1QgPSBlbGZ1dGlscy5zcGVjIEdQRy1LRVkgTk9URVMgQ09OVFJJQlVUSU5HIFwKKyAJICAgICBDT1BZSU5HIENPUFlJTkctR1BMVjIgQ09QWUlORy1MR1BMVjMKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWIvY29sb3IuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliL2NvbG9yLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWIvY29sb3IuYworQEAgLTMyLDcgKzMyLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8YXJncC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliL2NyYzMyX2ZpbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliL2NyYzMyX2ZpbGUuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYi9jcmMzMl9maWxlLmMKK0BAIC0zMCwxMiArMzAsMTQgQEAKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorIAorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKysKKyBpbnQKKyBjcmMzMl9maWxlIChpbnQgZmQsIHVpbnQzMl90ICpyZXNwKQorIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWIvZml4ZWRzaXplaGFzaC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWIvZml4ZWRzaXplaGFzaC5oCisrKysgZWxmdXRpbHMtMC4xNjYvbGliL2ZpeGVkc2l6ZWhhc2guaAorQEAgLTMwLDEyICszMCwxMiBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAKKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCistI2RlZmluZSBDT05DQVQodDEsdDIpIF9fQ09OQ0FUICh0MSx0MikKKysjZGVmaW5lIENPTkNBVDEoeCx5KSB4IyN5CisrI2RlZmluZSBDT05DQVQoeCx5KSBDT05DQVQxKHgseSkKKyAKKyAvKiBCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSB0aGUgZm9sbG93aW5nIG1hY3JvcyBtdXN0IGJlIGRlZmluZWQ6CisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliL3N5c3RlbS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWIvc3lzdGVtLmgKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWIvc3lzdGVtLmgKK0BAIC00OSw2ICs0OSwxNiBAQAorICNlbHNlCisgIyBlcnJvciAiVW5rbm93biBieXRlIG9yZGVyIgorICNlbmRpZgorKyNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCisrI2RlZmluZSBURU1QX0ZBSUxVUkVfUkVUUlkoZXhwcmVzc2lvbikgXAorKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorKyAgICAoeyBsb25nIGludCBfX3Jlc3VsdDsJCQkJCQkgICAgICBcCisrICAgICAgIGRvIF9fcmVzdWx0ID0gKGxvbmcgaW50KSAoZXhwcmVzc2lvbik7CQkJCSAgICAgIFwKKysgICAgICAgd2hpbGUgKF9fcmVzdWx0ID09IC0xTCAmJiBlcnJubyA9PSBFSU5UUik7CQkJICAgICAgXAorKyAgICAgICBfX3Jlc3VsdDsgfSkpCisrI2VuZGlmCisrCisrI2RlZmluZSBlcnJvcihzdGF0dXMsIGVycm5vLCAuLi4pIGVycihzdGF0dXMsIF9fVkFfQVJHU19fKQorIAorIGV4dGVybiB2b2lkICp4bWFsbG9jIChzaXplX3QpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CisgZXh0ZXJuIHZvaWQgKnhjYWxsb2MgKHNpemVfdCwgc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOworSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYi94bWFsbG9jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYi94bWFsbG9jLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWIveG1hbGxvYy5jCitAQCAtMzAsNyArMzAsNyBAQAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJhc20vYXNtX2VuZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJhc20vYXNtX2VuZC5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliYXNtL2FzbV9lbmQuYworQEAgLTMyLDcgKzMyLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmFzbS9hc21fbmV3c2NuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmFzbS9hc21fbmV3c2NuLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJhc20vYXNtX25ld3Njbi5jCitAQCAtMzIsNyArMzIsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmNwdS9pMzg2X2dlbmRpcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJjcHUvaTM4Nl9nZW5kaXMuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmNwdS9pMzg2X2dlbmRpcy5jCitAQCAtMzEsNyArMzEsNyBAQAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJjcHUvaTM4Nl9sZXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliY3B1L2kzODZfbGV4LmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJjcHUvaTM4Nl9sZXguYworQEAgLTU3OCw3ICs1NzgsNyBAQCBjaGFyICppMzg2X3RleHQ7CisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGN0eXBlLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgCisgI2luY2x1ZGUgPHN5c3RlbS5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmNwdS9pMzg2X3BhcnNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmNwdS9pMzg2X3BhcnNlLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJjcHUvaTM4Nl9wYXJzZS5jCitAQCAtMTA3LDcgKzEwNyw3IEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxtYXRoLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZHcvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmR3L01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZHcvTWFrZWZpbGUuYW0KK0BAIC0xMTcsNyArMTE3LDcgQEAgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbAorIAkJLVdsLC0tZW5hYmxlLW5ldy1kdGFncywtcnBhdGgsJChwa2dsaWJkaXIpIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQ8LC0tbm8tdW5kZWZpbmVkIFwKKyAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJChmaWx0ZXItb3V0ICQ8LCReKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlXAorLQkJLWxkbCAtbHogJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykKKysJCS1sZGwgLWx6ICQoYXJncF9MREFERCkgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpIC1sZnRzIC1sYXJncAorIAlAJCh0ZXh0cmVsX2NoZWNrKQorIAkkKEFNX1ZfYXQpbG4gLWZzICRAICRALiQoVkVSU0lPTikKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkdy9saWJkd19hbGxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJkdy9saWJkd19hbGxvYy5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZHcvbGliZHdfYWxsb2MuYworQEAgLTMxLDExICszMSwxMiBAQAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgImxpYmR3UC5oIgorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyAKKyAKKyB2b2lkICoKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJkd2ZsL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZHdmbC9NYWtlZmlsZS5hbQorQEAgLTg0LDYgKzg0LDggQEAgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5zbworIGxpYmVibCA9IC4uL2xpYmVibC9saWJlYmwuYQorIGxpYmV1ID0gLi4vbGliL2xpYmV1LmEKKyAKKytMREFERCA9IC1sZnRzCisrCisgbGliZHdmbF9waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJkd2ZsX3BpY19hX09CSkVDVFMgPSAkKGxpYmR3ZmxfYV9TT1VSQ0VTOi5jPS5vcykKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2ZpbmRfZWxmLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYworQEAgLTI3LDYgKzI3LDcgQEAKKyAgICBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlICJsaWJkd2ZsUC5oIgorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitAQCAtOTQsNyArOTUsNyBAQCBfX2xpYmR3Zmxfb3Blbl9ieV9idWlsZF9pZCAoRHdmbF9Nb2R1bGUKKyAJeworIAkgIGlmICgqZmlsZV9uYW1lICE9IE5VTEwpCisgCSAgICBmcmVlICgqZmlsZV9uYW1lKTsKKy0JICAqZmlsZV9uYW1lID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAobmFtZSk7CisrCSAgKmZpbGVfbmFtZSA9IHJlYWxwYXRoIChuYW1lLCBOVUxMKTsKKyAJICBpZiAoKmZpbGVfbmFtZSA9PSBOVUxMKQorIAkgICAgeworIAkgICAgICAqZmlsZV9uYW1lID0gbmFtZTsKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2R3ZmxfZXJyb3IuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZHdmbC9kd2ZsX2Vycm9yLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2R3ZmxfZXJyb3IuYworQEAgLTE0MCw2ICsxNDAsNyBAQCBfX2xpYmR3Zmxfc2V0ZXJybm8gKER3ZmxfRXJyb3IgZXJyb3IpCisgY29uc3QgY2hhciAqCisgZHdmbF9lcnJtc2cgKGludCBlcnJvcikKKyB7CisrICBzdGF0aWMgX190aHJlYWQgY2hhciBzWzY0XSA9ICIiOworICAgaWYgKGVycm9yID09IDAgfHwgZXJyb3IgPT0gLTEpCisgICAgIHsKKyAgICAgICBpbnQgbGFzdF9lcnJvciA9IGdsb2JhbF9lcnJvcjsKK0BAIC0xNTQsNyArMTU1LDggQEAgZHdmbF9lcnJtc2cgKGludCBlcnJvcikKKyAgIHN3aXRjaCAoZXJyb3IgJn4gMHhmZmZmKQorICAgICB7CisgICAgIGNhc2UgT1RIRVJfRVJST1IgKEVSUk5PKToKKy0gICAgICByZXR1cm4gc3RyZXJyb3JfciAoZXJyb3IgJiAweGZmZmYsICJiYWQiLCAwKTsKKysgICAgICBzdHJlcnJvcl9yIChlcnJvciAmIDB4ZmZmZiwgcywgc2l6ZW9mKHMpKTsKKysgICAgICByZXR1cm4gczsKKyAgICAgY2FzZSBPVEhFUl9FUlJPUiAoTElCRUxGKToKKyAgICAgICByZXR1cm4gZWxmX2Vycm1zZyAoZXJyb3IgJiAweGZmZmYpOworICAgICBjYXNlIE9USEVSX0VSUk9SIChMSUJEVyk6CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgIi4uL2xpYmR3L2xpYmR3UC5oIgkvKiBEV0FSRl9FXyogdmFsdWVzIGFyZSBoZXJlLiAgKi8KKyAjaW5jbHVkZSAiLi4vbGliZWxmL2xpYmVsZlAuaCIKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2ZpbmQtZGVidWdpbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYworQEAgLTM4NSw3ICszODUsNyBAQCBkd2ZsX3N0YW5kYXJkX2ZpbmRfZGVidWdpbmZvIChEd2ZsX01vZHVsCisgICAgICAgLyogSWYgRklMRV9OQU1FIGlzIGEgc3ltbGluaywgdGhlIGRlYnVnIGZpbGUgbWlnaHQgYmUgYXNzb2NpYXRlZAorIAkgd2l0aCB0aGUgc3ltbGluayB0YXJnZXQgbmFtZSBpbnN0ZWFkLiAgKi8KKyAKKy0gICAgICBjaGFyICpjYW5vbiA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKGZpbGVfbmFtZSk7CisrICAgICAgY2hhciAqY2Fub24gPSByZWFscGF0aCAoZmlsZV9uYW1lLCBOVUxMKTsKKyAgICAgICBpZiAoY2Fub24gIT0gTlVMTCAmJiBzdHJjbXAgKGZpbGVfbmFtZSwgY2Fub24pKQorIAlmZCA9IGZpbmRfZGVidWdpbmZvX2luX3BhdGggKG1vZCwgY2Fub24sCisgCQkJCSAgICAgZGVidWdsaW5rX2ZpbGUsIGRlYnVnbGlua19jcmMsCitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMKK0BAIC0zMSw2ICszMSwxNiBAQAorIAorICNkZWZpbmUgY3JjMzJfZmlsZSBhdHRyaWJ1dGVfaGlkZGVuIF9fbGliZHdmbF9jcmMzMl9maWxlCisgI2RlZmluZSBjcmMzMiBfX2xpYmR3ZmxfY3JjMzIKKysKKysjaWZuZGVmIFRFTVBfRkFJTFVSRV9SRVRSWQorKyNkZWZpbmUgVEVNUF9GQUlMVVJFX1JFVFJZKGV4cHJlc3Npb24pIFwKKysgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKysgICAgKHsgbG9uZyBpbnQgX19yZXN1bHQ7CQkJCQkJICAgICAgXAorKyAgICAgICBkbyBfX3Jlc3VsdCA9IChsb25nIGludCkgKGV4cHJlc3Npb24pOwkJCQkgICAgICBcCisrICAgICAgIHdoaWxlIChfX3Jlc3VsdCA9PSAtMUwgJiYgZXJybm8gPT0gRUlOVFIpOwkJCSAgICAgIFwKKysgICAgICAgX19yZXN1bHQ7IH0pKQorKyNlbmRpZgorKworICNkZWZpbmUgTElCX1NZU1RFTV9ICTEKKyAjaW5jbHVkZSA8bGliZHdmbFAuaD4KKyAjaW5jbHVkZSAiLi4vbGliL2NyYzMyX2ZpbGUuYyIKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2xpbnV4LWtlcm5lbC1tb2R1bGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmR3ZmwvbGludXgta2VybmVsLW1vZHVsZXMuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvbGludXgta2VybmVsLW1vZHVsZXMuYworQEAgLTM0LDYgKzM0LDcgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgCisgI2luY2x1ZGUgImxpYmR3ZmxQLmgiCisrI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCitAQCAtMzIsNyArMzIsNyBAQAorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZGxmY24uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmVsZlAuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZWJsL2VibHdzdHJ0YWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZWJsL2VibHdzdHJ0YWIuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmVibC9lYmx3c3RydGFiLmMKK0BAIC0zMDUsNyArMzA1LDcgQEAgY29weXN0cmluZ3MgKHN0cnVjdCBFYmxfV1N0cmVudCAqbm9kZXAsCisgCisgICAvKiBQcm9jZXNzIHRoZSBjdXJyZW50IG5vZGUuICAqLworICAgbm9kZXAtPm9mZnNldCA9ICpvZmZzZXRwOworLSAgKmZyZWVwID0gd21lbXBjcHkgKCpmcmVlcCwgbm9kZXAtPnN0cmluZywgbm9kZXAtPmxlbik7CisrICAqZnJlZXAgPSB3bWVtY3B5ICgqZnJlZXAsIG5vZGVwLT5zdHJpbmcsIG5vZGVwLT5sZW4pICsgbm9kZXAtPmxlbjsKKyAgICpvZmZzZXRwICs9IG5vZGVwLT5sZW4gKiBzaXplb2YgKHdjaGFyX3QpOworIAorICAgZm9yIChzdWJzID0gbm9kZXAtPm5leHQ7IHN1YnMgIT0gTlVMTDsgc3VicyA9IHN1YnMtPm5leHQpCitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJlbGYvZWxmLmgKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJlbGYvZWxmLmgKK0BAIC0yMSw3ICsyMSw5IEBACisgCisgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisgCistX19CRUdJTl9ERUNMUworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorIAorIC8qIFN0YW5kYXJkIEVMRiB0eXBlcy4gICovCisgCitAQCAtMzU5MSw3ICszNTkzLDggQEAgZW51bQorIAorICNkZWZpbmUgUl9USUxFR1hfTlVNCQkxMzAKKyAKKy0KKy1fX0VORF9ERUNMUworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKyAKKyAjZW5kaWYJLyogZWxmLmggKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJlbGYvbGliZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmVsZi9saWJlbGYuaAorKysrIGVsZnV0aWxzLTAuMTY2L2xpYmVsZi9saWJlbGYuaAorQEAgLTI5LDYgKzI5LDcgQEAKKyAjaWZuZGVmIF9MSUJFTEZfSAorICNkZWZpbmUgX0xJQkVMRl9IIDEKKyAKKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmVsZi9saWJlbGZQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmVsZi9saWJlbGZQLmgKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJlbGYvbGliZWxmUC5oCitAQCAtMzYsNiArMzYsNyBAQAorIAorICNpbmNsdWRlIDxhci5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisrI2luY2x1ZGUgPGxpYmVsZi5oPgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2FkZHIybGluZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvYWRkcjJsaW5lLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvYWRkcjJsaW5lLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxsaWJkd2ZsLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2FyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9hci5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2FyLmMKK0BAIC0yMiw3ICsyMiw3IEBACisgCisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvYXJsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2FybGliLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvYXJsaWIuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvYXJsaWIyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9hcmxpYjIuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9hcmxpYjIuYworQEAgLTIwLDcgKzIwLDcgQEAKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2VsZmNtcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvZWxmY21wLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvZWxmY21wLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9lbGZsaW50LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9lbGZsaW50LmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvZWxmbGludC5jCitAQCAtMjQsNyArMjQsNyBAQAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2ZpbmR0ZXh0cmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9maW5kdGV4dHJlbC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2ZpbmR0ZXh0cmVsLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGxpYmR3Lmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2kzODZfbGQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2kzODZfbGQuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9pMzg2X2xkLmMKK0BAIC0yMCw3ICsyMCw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2xkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9sZC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2xkLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgCisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxsaWJlbGYuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9sZGdlbmVyaWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2xkZ2VuZXJpYy5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2xkZ2VuZXJpYy5jCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxkbGZjbi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2xkbGV4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9sZGxleC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2xkbGV4LmMKK0BAIC0xMTA2LDcgKzExMDYsNyBAQCBjaGFyICpsZHRleHQ7CisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxlbGYuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9sZHNjcmlwdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvbGRzY3JpcHQuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9sZHNjcmlwdC5jCitAQCAtOTUsNyArOTUsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvbm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL25tLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvbm0uYworQEAgLTI2LDcgKzI2LDcgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvb2JqZHVtcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvb2JqZHVtcC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL29iamR1bXAuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8YXJncC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9yYW5saWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL3JhbmxpYi5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL3JhbmxpYi5jCitAQCAtMjQsNyArMjQsNyBAQAorICNpbmNsdWRlIDxhcmdwLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL3JlYWRlbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL3JlYWRlbGYuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9yZWFkZWxmLmMKK0BAIC0yNSw3ICsyNSw3IEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL3NpemUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL3NpemUuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9zaXplLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGFyZ3AuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvc3RhY2suYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL3N0YWNrLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvc3RhY2suYworQEAgLTE4LDcgKzE4LDcgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxhcmdwLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvc3RyaW5ncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvc3RyaW5ncy5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL3N0cmluZ3MuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL3N0cmlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9zdHJpcC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL3N0cmlwLmMKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxieXRlc3dhcC5oPgorICNpbmNsdWRlIDxlbmRpYW4uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8bGliZWxmLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL3Vuc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL3Vuc3RyaXAuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy91bnN0cmlwLmMKK0BAIC0zMSw3ICszMSw3IEBACisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxmbm1hdGNoLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9hZGRyc2NvcGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2FkZHJzY29wZXMuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2FkZHJzY29wZXMuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2FsbHJlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvYWxscmVncy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvYWxscmVncy5jCitAQCAtMjEsNyArMjEsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvYmFja3RyYWNlLWRhdGEuYworQEAgLTI3LDcgKzI3LDcgQEAKKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX2xpbnV4X18pCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2JhY2t0cmFjZS1kd2FyZi5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2JhY2t0cmFjZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9iYWNrdHJhY2UuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2JhY2t0cmFjZS5jCitAQCAtMjQsNyArMjQsNyBAQAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaWZkZWYgX19saW51eF9fCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvYnVpbGRpZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9idWlsZGlkLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9idWlsZGlkLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGVsZikKKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdlbGYpCisgI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2RlYnVnYWx0bGluay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kZWJ1Z2FsdGxpbmsuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2RlYnVnYWx0bGluay5jCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkdykKKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdlbGYpCisgI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2RlYnVnbGluay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kZWJ1Z2xpbmsuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2RlYnVnbGluay5jCitAQCAtMjEsNyArMjEsNyBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2VsZikKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZGVsZXRlZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kZWxldGVkLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kZWxldGVkLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2lmZGVmIF9fbGludXhfXworICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLWFkZHItc2VjdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kd2ZsLWFkZHItc2VjdC5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbC1hZGRyLXNlY3QuYworQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxhcmdwLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMKK0BAIC0yMCw3ICsyMCw3IEBACisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvZHdmbC1idWctZ2V0bW9kdWxlcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbC1idWctZ2V0bW9kdWxlcy5jCitAQCAtMTgsNyArMTgsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgCisgc3RhdGljIGNvbnN0IER3ZmxfQ2FsbGJhY2tzIGNhbGxiYWNrcyA9CisgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2R3ZmwtcmVwb3J0LWVsZi1hbGlnbi5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMKK0BAIC0yMCw3ICsyMCw3IEBACisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsbGluZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvZHdmbGxpbmVzLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsbGluZXMuYworQEAgLTI3LDcgKzI3LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAKKyBpbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3Zmxtb2R0ZXN0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2R3Zmxtb2R0ZXN0LmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsbW9kdGVzdC5jCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2Zsc3ltcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kd2Zsc3ltcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbHN5bXMuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2Vhcmx5LW9mZnNjbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9lYXJseS1vZmZzY24uYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2Vhcmx5LW9mZnNjbi5jCitAQCAtMTksNyArMTksNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2VjcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9lY3AuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2VjcC5jCitAQCAtMjAsNyArMjAsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9maW5kLXByb2xvZ3Vlcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9maW5kLXByb2xvZ3Vlcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZmluZC1wcm9sb2d1ZXMuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxmbm1hdGNoLmg+CisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZnVuY3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9mdW5jcmV0dmFsLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9mdW5jcmV0dmFsLmMKK0BAIC0yNSw3ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2Z1bmNzY29wZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvZnVuY3Njb3Blcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZnVuY3Njb3Blcy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGZubWF0Y2guaD4KKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9nZXRzcmNfZGllLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2dldHNyY19kaWUuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2dldHNyY19kaWUuYworQEAgLTE5LDcgKzE5LDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGxpYmVsZi5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2xpbmUyYWRkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9saW5lMmFkZHIuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2xpbmUyYWRkci5jCitAQCAtMjYsNyArMjYsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAKKyAKKyBzdGF0aWMgdm9pZAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2xvd19oaWdoX3BjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2xvd19oaWdoX3BjLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9sb3dfaGlnaF9wYy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGZubWF0Y2guaD4KKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9tZDUtc2hhMS10ZXN0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL21kNS1zaGExLXRlc3QuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL21kNS1zaGExLXRlc3QuYworQEAgLTE5LDcgKzE5LDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorIAorICNpbmNsdWRlICJtZDUuaCIKKyAjaW5jbHVkZSAic2hhMS5oIgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL3Jkd3JtbWFwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL3Jkd3JtbWFwLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9yZHdybW1hcC5jCitAQCAtMTksNyArMTksNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvc2FyaWR4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL3NhcmlkeC5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvc2FyaWR4LmMKK0BAIC0xNyw3ICsxNyw3IEBACisgCisgI2luY2x1ZGUgPGNvbmZpZy5oPgorIAorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL3NlY3Rpb25kdW1wLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL3NlY3Rpb25kdW1wLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9zZWN0aW9uZHVtcC5jCitAQCAtMTgsNyArMTgsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy92YXJsb2NzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL3ZhcmxvY3MuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL3ZhcmxvY3MuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvdmRzb3N5bXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvdmRzb3N5bXMuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL3Zkc29zeW1zLmMKK0BAIC0xOCw3ICsxOCw3IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZWxmL2VsZl9nZXRhcnN5bS5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZWxmL2VsZl9nZXRhcnN5bS5jCitAQCAtMzAyLDcgKzMwMiw3IEBAIGVsZl9nZXRhcnN5bSAoRWxmICplbGYsIHNpemVfdCAqcHRyKQorIAkJYXJzeW1bY250XS5hc19vZmYgPSAoKnUzMilbY250XTsKKyAKKyAJICAgICAgYXJzeW1bY250XS5hc19oYXNoID0gX2RsX2VsZl9oYXNoIChzdHJfZGF0YSk7CistCSAgICAgIHN0cl9kYXRhID0gcmF3bWVtY2hyIChzdHJfZGF0YSwgJ1wwJykgKyAxOworKwkgICAgICBzdHJfZGF0YSA9IG1lbWNociAoc3RyX2RhdGEsICdcMCcsIFNJWkVfTUFYKSArIDE7CisgCSAgICB9CisgCisgCSAgLyogQXQgdGhlIGVuZCBhIHNwZWNpYWwgZW50cnkuICAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMi1BZGQtc3VwcG9ydC1mb3ItbWlwczY0LWFiaXMtaW4tbWlwc19yZXR2YWwuYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMi1BZGQtc3VwcG9ydC1mb3ItbWlwczY0LWFiaXMtaW4tbWlwc19yZXR2YWwuYy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDItQWRkLXN1cHBvcnQtZm9yLW1pcHM2NC1hYmlzLWluLW1pcHNfcmV0dmFsLmMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAzLUFkZC1taXBzLW42NC1yZWxvY2F0aW9uLWZvcm1hdC1oYWNrLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDMtQWRkLW1pcHMtbjY0LXJlbG9jYXRpb24tZm9ybWF0LWhhY2sucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvYWFyY2g2NF91aW8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2FhcmNoNjRfdWlvLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L2FhcmNoNjRfdWlvLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2FhcmNoNjRfdWlvLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L2FybV9iYWNrZW5kLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2FybV9iYWNrZW5kLmRpZmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvYXJtX2JhY2tlbmQuZGlmZgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9hcm1fYmFja2VuZC5kaWZmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2VsZmNtcC1maXgtc2VsZi1jb21wYXJpc2lvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvZWxmY21wLWZpeC1zZWxmLWNvbXBhcmlzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMTUwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2VsZmNtcC1maXgtc2VsZi1jb21wYXJpc2lvbi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDgzNmExNmZlNWI1YmFiNGEzYWZlMmM5OTFjMTA0NjUyNzc1Y2UzYTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYXZpZCBBYmR1cmFjaG1hbm92IDxkYXZpZGx0QGNlcm4uY2g+CitEYXRlOiBNb24sIDExIEFwciAyMDE2IDE2OjAwOjU3ICswMjAwCitTdWJqZWN0OiBlbGZjbXA6IGZpeCBzZWxmLWNvbXBhcmlzb24gZXJyb3Igd2l0aCBHQ0MgNgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitOb3RpY2VkIHdpdGggRmVkb3JhIDI0IEFscGhhLCBnY2MgKEdDQykgNi4wLjAgMjAxNjA0MDYKKyhSZWQgSGF0IDYuMC4wLTAuMjApLgorCitlbGZjbXAuYzogSW4gZnVuY3Rpb24g4oCYbWFpbuKAmToKK2VsZmNtcC5jOjM2NDoxOTk6IGVycm9yOiBzZWxmLWNvbXBhcmlzb24gYWx3YXlzIGV2YWx1YXRlcwordG8gZmFsc2UgWy1XZXJyb3I9dGF1dG9sb2dpY2FsLWNvbXBhcmVdCisgICAgICAgIGlmICh1bmxpa2VseSAobmFtZTEgPT0gTlVMTCB8fCBuYW1lMiA9PSBOVUxMCisKK1NpZ25lZC1vZmYtYnk6IERhdmlkIEFiZHVyYWNobWFub3YgPGRhdmlkbHRAY2Vybi5jaD4KKy0tLQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBzcmMvQ2hhbmdlTG9nIHwgNCArKysrCisgc3JjL2VsZmNtcC5jICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VsZmNtcC5jIGIvc3JjL2VsZmNtcC5jCitpbmRleCA4NTJiOTJmLi43YjVkMzljIDEwMDY0NAorLS0tIGEvc3JjL2VsZmNtcC5jCisrKysgYi9zcmMvZWxmY21wLmMKK0BAIC0zNjgsNyArMzY4LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCQkJJiYgc3ltMS0+c3Rfc2huZHggIT0gU0hOX1VOREVGKQorIAkJCSAgICB8fCBzeW0xLT5zdF9pbmZvICE9IHN5bTItPnN0X2luZm8KKyAJCQkgICAgfHwgc3ltMS0+c3Rfb3RoZXIgIT0gc3ltMi0+c3Rfb3RoZXIKKy0JCQkgICAgfHwgc3ltMS0+c3Rfc2huZHggIT0gc3ltMS0+c3Rfc2huZHgpKQorKwkJCSAgICB8fCBzeW0xLT5zdF9zaG5keCAhPSBzeW0yLT5zdF9zaG5keCkpCisgCQl7CisgCQkgIC8vIFhYWCBEbyB3ZSB3YW50IHRvIGFsbG93IHJlb3JkZXJlZCBzeW1ib2wgdGFibGVzPworIAkJc3ltdGFiX21pc21hdGNoOgorLS0gCitjZ2l0IHYwLjEyCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvZml4aGVhZGVyY2hlY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2ZpeGhlYWRlcmNoZWNrLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L2ZpeGhlYWRlcmNoZWNrLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2ZpeGhlYWRlcmNoZWNrLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L2hwcGFfYmFja2VuZC5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9ocHBhX2JhY2tlbmQuZGlmZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9ocHBhX2JhY2tlbmQuZGlmZgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9ocHBhX2JhY2tlbmQuZGlmZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9rZnJlZWJzZF9wYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9rZnJlZWJzZF9wYXRoLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L2tmcmVlYnNkX3BhdGgucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYva2ZyZWVic2RfcGF0aC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9tNjhrX2JhY2tlbmQuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvbTY4a19iYWNrZW5kLmRpZmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvbTY4a19iYWNrZW5kLmRpZmYKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvbTY4a19iYWNrZW5kLmRpZmYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvbWlwc19iYWNrZW5kLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L21pcHNfYmFja2VuZC5kaWZmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L21pcHNfYmFja2VuZC5kaWZmCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L21pcHNfYmFja2VuZC5kaWZmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L21pcHNfcmVhZGVsZl93LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9taXBzX3JlYWRlbGZfdy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9taXBzX3JlYWRlbGZfdy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9taXBzX3JlYWRlbGZfdy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9zaGFkb3cucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L3NoYWRvdy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9zaGFkb3cucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvc2hhZG93LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni91Y2xpYmMtc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvdWNsaWJjLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5OTk5OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvdWNsaWJjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMjggQEAKK0Zyb20gM2RhZWMyZGQxMWEwNDk1NWY5NWU4ZjY1YTQ4ODIwMTAzZDg0ZGJlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogVGh1LCA5IEFwciAyMDE1IDEyOjEyOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHVjbGliYyBzdXBwb3J0IGZvciBlbGZ1dGlscyAwLjE2MQorCitvbiB1Y2xpYmMgc3lzdGVtcyBsaWJpbnRsIGFuZCBsaWJ1YXJncCBhcmUgc2VwYXJhdGUgZnJvbSBsaWJjLgorc28gdGhleSBuZWVkIHRvIGJlIHNwZWNpZmllZCBvbiBjb21tYW5kbGluZSB3aGVuIHdlIHVzZSBwcm94eS1saWJpbnRsCit0aGVuIGxpYmludGwgaXMgYSBzdGF0aWMgYXJjaGl2ZSBzbyBpdCBzaG91bGQgYmUgbGlzdGVkIGxhc3Qgc2luY2UKK2VsZnV0aWxzIGRvZXMgbm90IHJlc3BlY3QgZGlzYWJsZS1ubHMgd2UgbmVlZCB0byBsaW5rIGluIGxpYmludGwKKworV2UgYWRkIGEgbmV3IG9wdGlvbiAtLWVuYWJsZS11Y2xpYmMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGNvbnRyb2wKK3RoZSB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZHVyaW5nIGJ1aWxkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtPgorU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitbSnVubGluZyBaaGVuZzoKKyAtIGFkanVzdCBjb250ZXh0CitdCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgfCA4ICsrKysrKysrCisgbGliY3B1L01ha2VmaWxlLmFtIHwgNCArKysrCisgbGliZHcvTWFrZWZpbGUuYW0gIHwgNyArKysrKystCisgbGliZWxmL01ha2VmaWxlLmFtIHwgNSArKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZWxmdXRpbHMtMC4xNjYvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9jb25maWd1cmUuYWMKKysrKyBlbGZ1dGlscy0wLjE2Ni9jb25maWd1cmUuYWMKK0BAIC03OSw2ICs3OSwxNCBAQCBBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAorIAorIEFIX1RFTVBMQVRFKFtVU0VfTE9DS1NdLCBbRGVmaW5lZCBpZiBsaWJyYXJpZXMgc2hvdWxkIGJlIHRocmVhZC1zYWZlLl0pCisgCisrQUNfQVJHX0VOQUJMRShbdWNsaWJjXSwKKytBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWNsaWJjXSwgW1VzZSB1Y2xpYmMgZm9yIHN5c3RlbSBsaWJyYXJpZXNdKSwKKyt1c2VfdWNsaWJjPXllcywgdXNlX3VjbGliYz1ubykKKytBTV9DT05ESVRJT05BTChVU0VfVUNMSUJDLCB0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXMpCisrQVNfSUYoW3Rlc3QgIiR1c2VfdWNsaWJjIiA9IHllc10sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQorKworK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQorKworIEFDX1BST0dfQ0MKKyBBQ19QUk9HX1JBTkxJQgorIEFDX1BST0dfWUFDQworQEAgLTM0NywxOCArMzU1LDEzIEBAIEFDX0xJTktfSUZFTFNFKAorICkKKyAKKyBkbmwgSWYgb3VyIGxpYmMgZG9lc24ndCBwcm92aWRlIGFyZ3AsIHRoZW4gdGVzdCBmb3IgbGliYXJncAorLWlmIHRlc3QgIiRsaWJjX2hhc19hcmdwIiA9ICJmYWxzZSIgOyB0aGVuCistCUFDX01TR19XQVJOKCJsaWJjIGRvZXMgbm90IGhhdmUgYXJncCIpCistCUFDX0NIRUNLX0xJQihbYXJncF0sIFthcmdwX3BhcnNlXSwgW2hhdmVfYXJncD0idHJ1ZSJdLCBbaGF2ZV9hcmdwPSJmYWxzZSJdKQorLQorLQlpZiB0ZXN0ICIkaGF2ZV9hcmdwIiA9ICJmYWxzZSI7IHRoZW4KKy0JCUFDX01TR19FUlJPUigibm8gbGliYXJncCBmb3VuZCIpCistCWVsc2UKKy0JCWFyZ3BfTERBREQ9Ii1sYXJncCIKKy0JZmkKKy1lbHNlCistCWFyZ3BfTERBREQ9IiIKKy1maQorK0FTX0lGKFt0ZXN0ICJ4JGxpYmNfaGFzX2FyZ3AiID0gInhmYWxzZSJdLAorKwlbQUNfTVNHX1dBUk4oImxpYmMgZG9lcyBub3QgaGF2ZSBhcmdwIikKKysJQUNfQ0hFQ0tfTElCKFthcmdwXSwgW2FyZ3BfcGFyc2VdLCBbaGF2ZV9hcmdwPSJ0cnVlIiBhcmdwX0xEQUREPSItbGFyZ3AiXSwgW2hhdmVfYXJncD0iZmFsc2UiXSldLCBbYXJncF9MREFERD0iIl0pCisrCisrQVNfSUYoW3Rlc3QgIngkbGliY19oYXNfYXJncCIgPSAieGZhbHNlIiAtYSAieCRoYXZlX2FyZ3AiID0gInhmYWxzZSJdLAorKwlBQ19DSEVDS19MSUIoW3VhcmdwXSwgW2FyZ3BfcGFyc2VdLCBbaGF2ZV91YXJncD0idHJ1ZSIgYXJncF9MREFERD0iLWx1YXJncCJdLCBbaGF2ZV91YXJncD0iZmFsc2UiXSldLCBbYXJncF9MREFERD0iIl0pCisrCisgQUNfU1VCU1QoW2FyZ3BfTERBRERdKQorIAorIGRubCBUaGUgZGlyZWN0b3JpZXMgd2l0aCBjb250ZW50LgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmNwdS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliY3B1L01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNjYvbGliY3B1L01ha2VmaWxlLmFtCitAQCAtODAsNiArODAsMTAgQEAgaTM4Nl9wYXJzZV9DRkxBR1MgPSAtRE5NTkVTPSJgd2MgLWwgPCBpMworIGkzODZfbGV4Lm86IGkzODZfcGFyc2UuaAorIGkzODZfZ2VuZGlzX0xEQUREID0gJChsaWJldSkgLWxtCisgCisraWYgVVNFX1VDTElCQworK2kzODZfZ2VuZGlzX0xEQUREICs9IC1saW50bAorK2VuZGlmCisrCisgaTM4Nl9wYXJzZS5oOiBpMzg2X3BhcnNlLmMgOworIAorIEVYVFJBX0RJU1QgPSBkZWZzL2kzODYKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkdy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZHcvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJkdy9NYWtlZmlsZS5hbQorQEAgLTEwMiw2ICsxMDIsMTEgQEAgZW5kaWYKKyBsaWJkd19waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJkd19waWNfYV9PQkpFQ1RTID0gJChsaWJkd19hX1NPVVJDRVM6LmM9Lm9zKQorIAorK2xpYmR3X3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmR3X3NvX0xETElCUyArPSAtbGludGwKKytlbmRpZgorKworIGxpYmR3X3NvX1NPVVJDRVMgPQorIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIC4uL2xpYmR3ZWxmL2xpYmR3ZWxmX3BpYy5hIFwKKyAJICAuLi9saWJkd2ZsL2xpYmR3ZmxfcGljLmEgLi4vbGliZWJsL2xpYmVibC5hIFwKK0BAIC0xMTIsNyArMTE3LDcgQEAgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbAorIAkJLVdsLC0tZW5hYmxlLW5ldy1kdGFncywtcnBhdGgsJChwa2dsaWJkaXIpIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQ8LC0tbm8tdW5kZWZpbmVkIFwKKyAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJChmaWx0ZXItb3V0ICQ8LCReKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlXAorLQkJLWxkbCAtbHogJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKQorKwkJLWxkbCAtbHogJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykKKyAJQCQodGV4dHJlbF9jaGVjaykKKyAJJChBTV9WX2F0KWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZWxmL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJlbGYvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJlbGYvTWFrZWZpbGUuYW0KK0BAIC05Niw2ICs5NiwxMSBAQCBsaWJlbGZfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZWxmX3BpY19hX09CSkVDVFMgPSAkKGxpYmVsZl9hX1NPVVJDRVM6LmM9Lm9zKQorIAorIGxpYmVsZl9zb19MRExJQlMgPSAtbHoKKysKKytpZiBVU0VfVUNMSUJDCisrbGliZWxmX3NvX0xETElCUyArPSAtbGludGwKKytlbmRpZgorKworIGlmIFVTRV9MT0NLUworIGxpYmVsZl9zb19MRExJQlMgKz0gLWxwdGhyZWFkCisgZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNDguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LmJiCmluZGV4IGZmNTMyNTcuLjYwODBjMTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNDguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgpAQCAtMzQsNiArMzQsNyBAQAogICAgICAgICBmaWxlOi8vRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBcCiAgICAgICAgIGZpbGU6Ly9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaCBcCiAgICAgICAgIGZpbGU6Ly9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9nY2M2LnBhdGNoIFwKICIKICMgT25seSBhcHBseSB3aGVuIGJ1aWxkaW5nIHVjbGliYyBiYXNlZCB0YXJnZXQgcmVjaXBlCiBTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTY0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTY0YzA1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi1TVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCi1IT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvZWxmdXRpbHMiCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIihHUEx2MyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLURFUEVORFMgPSAibGlidG9vbCBiemlwMiB6bGliIHZpcnR1YWwvbGliaW50bCIKLURFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgYXJncC1zdGFuZGFsb25lIGZ0cyAiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2UvbC9lbGZ1dGlscy8ke1BWfS8ke0JQfS50YXIuYnoyIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMmU0NTM2YzFjNDgwMzRmMTg4YTgwNzg5YTU5MTE0ZDgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTY4M2MwMjU5MjhhMTJkMDZiN2ZlODEyOTI4YWE2MjM1MjQ5ZTIyZDE5N2QwODZmNzA4NDYwNmE0ODE2NTkwMCIKLQotU1JDX1VSSSArPSAiXAotICAgICAgICBmaWxlOi8vZHNvLWxpbmstY2hhbmdlLnBhdGNoIFwKLSAgICAgICAgZmlsZTovL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2ggXAotICAgICAgICBmaWxlOi8vZml4aGVhZGVyY2hlY2sucGF0Y2ggXAotICAgICAgICBmaWxlOi8vMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2ggXAotICAgICAgICBmaWxlOi8vMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIFwKLSAgICAgICAgZmlsZTovL2FhcmNoNjRfdWlvLnBhdGNoIFwKLSAgICAgICAgZmlsZTovL3NoYWRvdy5wYXRjaCBcCi0iCi0KLSMgcGljayB0aGUgcGF0Y2ggZnJvbSBkZWJpYW4KLSMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vZS9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2NC0xLmRlYmlhbi50YXIueHoKLVNSQ19VUkkgKz0gIlwKLSAgICAgICAgZmlsZTovL2hwcGFfYmFja2VuZC5kaWZmIFwKLSAgICAgICAgZmlsZTovL2FybV9iYWNrZW5kLmRpZmYgXAotICAgICAgICBmaWxlOi8vbWlwc19iYWNrZW5kLmRpZmYgXAotICAgICAgICBmaWxlOi8vbTY4a19iYWNrZW5kLmRpZmYgXAotICAgICAgICBmaWxlOi8vdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgXAotICAgICAgICBmaWxlOi8vbWlwc19yZWFkZWxmX3cucGF0Y2ggXAotICAgICAgICBmaWxlOi8va2ZyZWVic2RfcGF0aC5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLUlnbm9yZS1kaWZmZXJlbmNlcy1iZXR3ZWVuLW1pcHMtbWFjaGluZS1pZGVudGlmaWVycy5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDMtQWRkLW1pcHMtbjY0LXJlbG9jYXRpb24tZm9ybWF0LWhhY2sucGF0Y2ggXAotICAgICAgICBmaWxlOi8vdWNsaWJjLXN1cHBvcnQucGF0Y2ggXAotIgotU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwMS1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoICIKLQotIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAotIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKLSMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0Ci0KLUVYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKLUVYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS11Y2xpYmMiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiAhPSAieDg2XzY0IiBdICYmIFsgLXogYGVjaG8gIiR7VEFSR0VUX0FSQ0h9InxncmVwICdpLjg2J2AgXTt0aGVuCi0JCXJtIC1mICR7RH0ke2JpbmRpcn0vZXUtb2JqZHVtcAotCWZpCi19Ci0KLSMgd2UgY2FuIG5vdCBidWlsZCBjb21wbGV0ZSBlbGZ1dGlscyB3aGVuIHVzaW5nIHVjbGliYwotIyBidXQgc29tZSByZWNpcGVzIGUuZy4gZ2NjIDQuNSBkZXBlbmRzIG9uIGxpYmVsZiBzbyB3ZQotIyBidWlsZCBvbmx5IGxpYmVsZiBmb3IgdWNsaWJjIGNhc2UKLQotRVhUUkFfT0VNQUtFX2xpYmMtdWNsaWJjID0gIi1DIGxpYmVsZiIKLUVYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgotRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCi0KLUFMTE9XX0VNUFRZXyR7UE59X2xpYmMtbXVzbCA9ICIxIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLSMgUGFja2FnZSB1dGlsaXRpZXMgc2VwYXJhdGVseQotUEFDS0FHRVMgPSsgIiR7UE59LWJpbnV0aWxzIGxpYmVsZiBsaWJhc20gbGliZHciCi1GSUxFU18ke1BOfS1iaW51dGlscyA9ICJcCi0gICAgJHtiaW5kaXJ9L2V1LWFkZHIybGluZSBcCi0gICAgJHtiaW5kaXJ9L2V1LWxkIFwKLSAgICAke2JpbmRpcn0vZXUtbm0gXAotICAgICR7YmluZGlyfS9ldS1yZWFkZWxmIFwKLSAgICAke2JpbmRpcn0vZXUtc2l6ZSBcCi0gICAgJHtiaW5kaXJ9L2V1LXN0cmlwIgotCi1GSUxFU19saWJlbGYgPSAiJHtsaWJkaXJ9L2xpYmVsZi0ke1BWfS5zbyAke2xpYmRpcn0vbGliZWxmLnNvLioiCi1GSUxFU19saWJhc20gPSAiJHtsaWJkaXJ9L2xpYmFzbS0ke1BWfS5zbyAke2xpYmRpcn0vbGliYXNtLnNvLioiCi1GSUxFU19saWJkdyAgPSAiJHtsaWJkaXJ9L2xpYmR3LSR7UFZ9LnNvICR7bGliZGlyfS9saWJkdy5zby4qICR7bGliZGlyfS9lbGZ1dGlscy9saWIqIgotIyBTb21lIHBhY2thZ2VzIGhhdmUgdGhlIHZlcnNpb24gcHJlY2VlZGluZyB0aGUgLnNvIGluc3RlYWQgcHJvcGVybHkKLSMgdmVyc2lvbmVkIC5zby48dmVyc2lvbj4sIHNvIHdlIG5lZWQgdG8gcmVvcmRlciBhbmQgcmVwYWNrYWdlLgotI0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKi0ke1BWfS5zbyAke2Jhc2VfbGliZGlyfS8qLSR7UFZ9LnNvIgotI0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliYXNtLnNvICR7bGliZGlyfS9saWJkdy5zbyAke2xpYmRpcn0vbGliZWxmLnNvIgotCi0jIFRoZSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmtzIHRoYXQgdHJpcCB1cCBpbnNhbmUKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliZHcgPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2Ni5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0MzZkMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjYuYmIKQEAgLTAsMCArMSw4OSBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgaGFuZGxpbmcgY29tcGlsZWQgb2JqZWN0IGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2VsZnV0aWxzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICIoR1BMdjMgJiBFbGZ1dGlscy1FeGNlcHRpb24pIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCitERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGFyZ3Atc3RhbmRhbG9uZSBmdHMgIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9lL2wvZWxmdXRpbHMvJHtQVn0vJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNGU0NjJiNzg5MTkxNWRjNTMyNmJjY2VmYTIwMjRmZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYzA1NjkxNGM4YTQzOGIyMTBiZTBkNzkwNDYzYjk2MGZjNzlkMjM0YzNmMDVjZTcwN2NiZmY4MGU5NGNiYTMwIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9kc28tbGluay1jaGFuZ2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXhoZWFkZXJjaGVjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vYWFyY2g2NF91aW8ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vc2hhZG93LnBhdGNoIFwKKyIKKworIyBwaWNrIHRoZSBwYXRjaCBmcm9tIGRlYmlhbgorIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9lL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTY0LTEuZGViaWFuLnRhci54egorU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vaHBwYV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vYXJtX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9taXBzX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9tNjhrX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9taXBzX3JlYWRlbGZfdy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9rZnJlZWJzZF9wYXRoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDItQWRkLXN1cHBvcnQtZm9yLW1pcHM2NC1hYmlzLWluLW1pcHNfcmV0dmFsLmMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9lbGZjbXAtZml4LXNlbGYtY29tcGFyaXNpb24ucGF0Y2ggXAorIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwMS1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoICIKKworIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAorIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKKyMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS11Y2xpYmMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiAhPSAieDg2XzY0IiBdICYmIFsgLXogYGVjaG8gIiR7VEFSR0VUX0FSQ0h9InxncmVwICdpLjg2J2AgXTt0aGVuCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vZXUtb2JqZHVtcAorCWZpCit9CisKKyMgd2UgY2FuIG5vdCBidWlsZCBjb21wbGV0ZSBlbGZ1dGlscyB3aGVuIHVzaW5nIHVjbGliYworIyBidXQgc29tZSByZWNpcGVzIGUuZy4gZ2NjIDQuNSBkZXBlbmRzIG9uIGxpYmVsZiBzbyB3ZQorIyBidWlsZCBvbmx5IGxpYmVsZiBmb3IgdWNsaWJjIGNhc2UKKworRVhUUkFfT0VNQUtFX2xpYmMtdWNsaWJjID0gIi1DIGxpYmVsZiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0FMTE9XX0VNUFRZXyR7UE59X2xpYmMtbXVzbCA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKyMgUGFja2FnZSB1dGlsaXRpZXMgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgIiR7UE59LWJpbnV0aWxzIGxpYmVsZiBsaWJhc20gbGliZHciCitGSUxFU18ke1BOfS1iaW51dGlscyA9ICJcCisgICAgJHtiaW5kaXJ9L2V1LWFkZHIybGluZSBcCisgICAgJHtiaW5kaXJ9L2V1LWxkIFwKKyAgICAke2JpbmRpcn0vZXUtbm0gXAorICAgICR7YmluZGlyfS9ldS1yZWFkZWxmIFwKKyAgICAke2JpbmRpcn0vZXUtc2l6ZSBcCisgICAgJHtiaW5kaXJ9L2V1LXN0cmlwIgorCitGSUxFU19saWJlbGYgPSAiJHtsaWJkaXJ9L2xpYmVsZi0ke1BWfS5zbyAke2xpYmRpcn0vbGliZWxmLnNvLioiCitGSUxFU19saWJhc20gPSAiJHtsaWJkaXJ9L2xpYmFzbS0ke1BWfS5zbyAke2xpYmRpcn0vbGliYXNtLnNvLioiCitGSUxFU19saWJkdyAgPSAiJHtsaWJkaXJ9L2xpYmR3LSR7UFZ9LnNvICR7bGliZGlyfS9saWJkdy5zby4qICR7bGliZGlyfS9lbGZ1dGlscy9saWIqIgorIyBTb21lIHBhY2thZ2VzIGhhdmUgdGhlIHZlcnNpb24gcHJlY2VlZGluZyB0aGUgLnNvIGluc3RlYWQgcHJvcGVybHkKKyMgdmVyc2lvbmVkIC5zby48dmVyc2lvbj4sIHNvIHdlIG5lZWQgdG8gcmVvcmRlciBhbmQgcmVwYWNrYWdlLgorI0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKi0ke1BWfS5zbyAke2Jhc2VfbGliZGlyfS8qLSR7UFZ9LnNvIgorI0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliYXNtLnNvICR7bGliZGlyfS9saWJkdy5zbyAke2xpYmRpcn0vbGliZWxmLnNvIgorCisjIFRoZSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmtzIHRoYXQgdHJpcCB1cCBpbnNhbmUKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliZHcgPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvaG9zdC1maWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvaG9zdC1maWxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2VmYmRjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlL2hvc3QtZmlsZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwOi8vYnVncy5ndy5jb20vdmlldy5waHA/aWQ9NDg1KQotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotRnJvbSAzY2RlMTk5ZDAzYjM5NjMyMzYxYzI3NWNkMzBmYTA2MTJhMDMxMzhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLURhdGU6IE1vbiwgMTkgT2N0IDIwMTUgMTA6MzA6NTcgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzJdIFdoZW4gdXNpbmcgdGhlIGhvc3QgZmlsZSwgcmVzcGVjdCBGSUxFX0NPTVBJTEUKLQotSWYgd2UncmUgY3Jvc3MtY29tcGlsaW5nIGFuZCBub3QgdXNpbmcgdGhlIGZpbGUgYmluYXJ5IHRoYXQgd2FzIGp1c3QgYnVpbHQsCi1leGVjdXRlIHRoZSBiaW5hcnkgdGhhdCB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlICh2aWEgRklMRV9DT01QSUxFKSB3aGVuIGNoZWNraW5nCi10aGUgdmVyc2lvbiBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoYXQgImZpbGUiIGlzIGNvcnJlY3QgYXMgdGhlIGFjdHVhbCBjb21waWxlCi11c2VzIEZJTEVfQ09NUElMRSBzbyBkaWZmZXJlbnQgYmluYXJpZXMgbWF5IGJlIHVzZWQuCi0tLS0KLSBtYWdpYy9NYWtlZmlsZS5hbSB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL21hZ2ljL01ha2VmaWxlLmFtIGIvbWFnaWMvTWFrZWZpbGUuYW0KLWluZGV4IDg5YWM4NDQuLjY3MDY3ZmUgMTAwNjQ0Ci0tLS0gYS9tYWdpYy9NYWtlZmlsZS5hbQotKysrIGIvbWFnaWMvTWFrZWZpbGUuYW0KLUBAIC0yOTMsNyArMjkzLDcgQEAgJHtNQUdJQ306ICQoRVhUUkFfRElTVCkgJChGSUxFX0NPTVBJTEVfREVQKQotIAlAKGlmIGV4cHIgIiR7RklMRV9DT01QSUxFfSIgOiAnLiovLionID4gL2Rldi9udWxsOyB0aGVuIFwKLSAJICAgIGVjaG8gIlVzaW5nICR7RklMRV9DT01QSUxFfSB0byBnZW5lcmF0ZSAke01BR0lDfSIgPiAvZGV2L251bGw7IFwKLSAJICBlbHNlIFwKLS0JICAgIHY9JCQoZmlsZSAtLXZlcnNpb24gfCBzZWQgLWUgcy9maWxlLS8vIC1lIHEpOyBcCi0rCSAgICB2PSQkKCR7RklMRV9DT01QSUxFfSAtLXZlcnNpb24gfCBzZWQgLWUgcy9maWxlLS8vIC1lIHEpOyBcCi0gCSAgICBpZiBbICIkJHYiICE9ICIke1BBQ0tBR0VfVkVSU0lPTn0iIF07IHRoZW4gXAotIAkJZWNobyAiQ2Fubm90IHVzZSB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgZmlsZSAoJCR2KSB0byI7IFwKLSAJCWVjaG8gImNyb3NzLWNvbXBpbGUgZmlsZSAke1BBQ0tBR0VfVkVSU0lPTn0iOyBcCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjI1LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGJhZDY5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1TVU1NQVJZID0gIkZpbGUgY2xhc3NpZmljYXRpb24gdG9vbCIKLURFU0NSSVBUSU9OID0gIkZpbGUgYXR0ZW1wdHMgdG8gY2xhc3NpZnkgZmlsZXMgZGVwZW5kaW5nIFwKLW9uIHRoZWlyIGNvbnRlbnRzIGFuZCBwcmludHMgYSBkZXNjcmlwdGlvbiBpZiBhIG1hdGNoIGlzIGZvdW5kLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZGFyd2luc3lzLmNvbS9maWxlLyIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLQotIyB0d28gY2xhdXNlIEJTRAotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT0yO21kNT02YTczODI4NzJlZGI2OGQzM2UxYTkzOThiNmUwMzE4OCIKLQotREVQRU5EUyA9ICJ6bGliIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUiCi0KLSMgQmxhY2tsaXN0IGEgYm9ndXMgdGFnIGluIHVwc3RyZWFtIGNoZWNrCi1VUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJGSUxFKD9QPHB2ZXI+KD8hNl8yMykuKykiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9maWxlL2ZpbGUuZ2l0IFwKLSAgICAgICAgZmlsZTovL2RlYmlhbi03NDIyNjIucGF0Y2ggXAotICAgICAgICBmaWxlOi8vMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoIFwKLSAgICAgICAgZmlsZTovL2hvc3QtZmlsZS5wYXRjaCBcCi0gICAgICAgICIKLQotU1JDUkVWID0gImY0NWRiODlkZGM5MTY5MmI2NjJmZmZiYWJiZGFmYzdiYzRjMDBmNWUiCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scwotCi1FWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICItZSBGSUxFX0NPTVBJTEU9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ZpbGUtbmF0aXZlL2ZpbGUiCi1FWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICItZSBGSUxFX0NPTVBJTEU9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ZpbGUtbmF0aXZlL2ZpbGUiCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pc2MvKi5tZ2MiCi0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLQljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAotCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYwotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7Ci0JY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKLQkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCi0jIERvbid0IHVzZSBOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCBhcyB0aGF0IGhpZGVzIGxpYm1hZ2ljIGZyb20gYW55b25lIHdobwotIyBkZXBlbmRzIG9uIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlLgotYmluZGlyX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiL2ZpbGUtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0YTg5YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjguYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJGaWxlIGNsYXNzaWZpY2F0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJGaWxlIGF0dGVtcHRzIHRvIGNsYXNzaWZ5IGZpbGVzIGRlcGVuZGluZyBcCitvbiB0aGVpciBjb250ZW50cyBhbmQgcHJpbnRzIGEgZGVzY3JpcHRpb24gaWYgYSBtYXRjaCBpcyBmb3VuZC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRhcndpbnN5cy5jb20vZmlsZS8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgdHdvIGNsYXVzZSBCU0QKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MjttZDU9NmE3MzgyODcyZWRiNjhkMzNlMWE5Mzk4YjZlMDMxODgiCisKK0RFUEVORFMgPSAiemxpYiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIgorCisjIEJsYWNrbGlzdCBhIGJvZ3VzIHRhZyBpbiB1cHN0cmVhbSBjaGVjaworVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiRklMRSg/UDxwdmVyPig/ITZfMjMpLispIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZmlsZS9maWxlLmdpdCBcCisgICAgICAgIGZpbGU6Ly9kZWJpYW4tNzQyMjYyLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaCBcCisgICAgICAgICIKKworU1JDUkVWID0gIjNjNTIxODE3MzIyYTZiZjUxNjBjZmViMDliOTE0NWNjZGU1ODdiMmEiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICItZSBGSUxFX0NPTVBJTEU9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ZpbGUtbmF0aXZlL2ZpbGUiCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICItZSBGSUxFX0NPTVBJTEU9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ZpbGUtbmF0aXZlL2ZpbGUiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1zdGQ9Yzk5IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9taXNjLyoubWdjIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKKwkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmlsZSBcCisJCS0tbWFnaWMtZmlsZSAke2RhdGFkaXJ9L21pc2MvbWFnaWMubWdjCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlIgorIyBEb24ndCB1c2UgTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggYXMgdGhhdCBoaWRlcyBsaWJtYWdpYyBmcm9tIGFueW9uZSB3aG8KKyMgZGVwZW5kcyBvbiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZS4KK2JpbmRpcl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIi9maWxlLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4LzAwMDItYXZvaWQtYy1jb21tZW50cy1pbi1jLWNvZGUtZmFpbHMtd2l0aC1nY2MtNi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4LzAwMDItYXZvaWQtYy1jb21tZW50cy1pbi1jLWNvZGUtZmFpbHMtd2l0aC1nY2MtNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzhjYTVmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXgvMDAwMi1hdm9pZC1jLWNvbW1lbnRzLWluLWMtY29kZS1mYWlscy13aXRoLWdjYy02LnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gNzA3MmJlZmUxMzk3YWY0ZWIwMWMzZmY3ZWRmOTlmMGNkNTA3NjA4OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMzAgQXVnIDIwMTYgMTQ6MjU6MzIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXZvaWQgYysrIGNvbW1lbnRzIGluIGMtY29kZSAtIGZhaWxzIHdpdGggZ2NjLTYKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworZml4ZXM6CisKK3wgZXJyb3I6IEMrKyBzdHlsZSBjb21tZW50cyBhcmUgbm90IGFsbG93ZWQgaW4gSVNPIEM5MAorfCBudW1fdG9fYWxsb2MgPSAxOyAvLyBBZnRlciBhbGwgdGhhdCB0YWxrLCB0aGlzIHdhcyBzZXQgdG8gMSBhbnl3YXlzLi4uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBzcmMvZmxleC5za2wgfCAyICstCisgc3JjL3NjYW4uYyAgIHwgMiArLQorIHNyYy9za2VsLmMgICB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9mbGV4LnNrbCBiL3NyYy9mbGV4LnNrbAoraW5kZXggNzNhMGI5ZS4uZWQ3MTYyNyAxMDA2NDQKKy0tLSBhL3NyYy9mbGV4LnNrbAorKysrIGIvc3JjL2ZsZXguc2tsCitAQCAtMjM1MCw3ICsyMzUwLDcgQEAgdm9pZCB5eUZsZXhMZXhlcjo6eXllbnN1cmVfYnVmZmVyX3N0YWNrKHZvaWQpCisgCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorIAkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICAqLworLQkJbnVtX3RvX2FsbG9jID0gMTsgLy8gQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLgorKwkJbnVtX3RvX2FsbG9jID0gMTsgLyogQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLiAqLworIAkJWVlfRyh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCisgCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorIAkJCQkJCQkJTTRfWVlfQ0FMTF9MQVNUX0FSRyk7CitkaWZmIC0tZ2l0IGEvc3JjL3NjYW4uYyBiL3NyYy9zY2FuLmMKK2luZGV4IGI1NWRmMmQuLmYxZGNlNzUgMTAwNjQ0CistLS0gYS9zcmMvc2Nhbi5jCisrKysgYi9zcmMvc2Nhbi5jCitAQCAtNDY3Miw3ICs0NjcyLDcgQEAgc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkKQorIAkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKyAJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAgKi8KKy0JCW51bV90b19hbGxvYyA9IDE7IC8vIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAxIGFueXdheXMuLi4KKysJCW51bV90b19hbGxvYyA9IDE7IC8qIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAxIGFueXdheXMuLi4qLworIAkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKKyAJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisgCQkJCQkJCQkpOworZGlmZiAtLWdpdCBhL3NyYy9za2VsLmMgYi9zcmMvc2tlbC5jCitpbmRleCBlZjY1N2QzLi4yNmNjODg5IDEwMDY0NAorLS0tIGEvc3JjL3NrZWwuYworKysrIGIvc3JjL3NrZWwuYworQEAgLTI1NjEsNyArMjU2MSw3IEBAIGNvbnN0IGNoYXIgKnNrZWxbXSA9IHsKKyAgICIJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuIiwKKyAgICIJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuIiwKKyAgICIgICAgICAgICAqLyIsCistICAiCQludW1fdG9fYWxsb2MgPSAxOyAvLyBBZnRlciBhbGwgdGhhdCB0YWxrLCB0aGlzIHdhcyBzZXQgdG8gMSBhbnl3YXlzLi4uIiwKKysgICIJCW51bV90b19hbGxvYyA9IDE7IC8qIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAxIGFueXdheXMuLi4gKi8iLAorICAgIgkJWVlfRyh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jIiwKKyAgICIJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopIiwKKyAgICIJCQkJCQkJCU00X1lZX0NBTExfTEFTVF9BUkcpOyIsCistLSAKKzIuNS41CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4L0NWRS0yMDE2LTYzNTQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC9DVkUtMjAxNi02MzU0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNmFjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC9DVkUtMjAxNi02MzU0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMzkzOWVjY2RmZjU5OGY0N2U1YjM3YjA1ZDU4YmYxYjQ0ZDM3OTZlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgT2N0IDIwMTYgMTQ6MTU6MzggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUHJldmVudCBidWZmZXIgb3ZlcmZsb3cgaW4geXlfZ2V0X25leHRfYnVmZmVyCisKK1RoaXMgaXMgdXBzdHJlYW0gY29tbWl0IGE1Y2JlOTI5YWMzMjU1ZDM3MWU2OThmNjJkYzI1NmFmZTcwMDY0NjYKK3dpdGggc29tZSBhZGRpdGlvbmFsIGJhY2twb3J0aW5nIHRvIG1ha2UgYmludXRpbHMgYnVpbGQgYWdhaW4uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTYtNjM1NAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIHNyYy9mbGV4LnNrbCB8IDIgKy0KKyBzcmMvc2Nhbi5jICAgfCAyICstCisgc3JjL3NrZWwuYyAgIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZsZXguc2tsIGIvc3JjL2ZsZXguc2tsCitpbmRleCBlZDcxNjI3Li44MTRkNTYyIDEwMDY0NAorLS0tIGEvc3JjL2ZsZXguc2tsCisrKysgYi9zcmMvZmxleC5za2wKK0BAIC0xNzE4LDcgKzE3MTgsNyBAQCBpbnQgeXlGbGV4TGV4ZXI6Onl5X2dldF9uZXh0X2J1ZmZlcigpCisgCisgCWVsc2UKKyAJCXsKKy0JCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorKwkJCWludCBudW1fdG9fcmVhZCA9CisgCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKyAKKyAJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCitkaWZmIC0tZ2l0IGEvc3JjL3NjYW4uYyBiL3NyYy9zY2FuLmMKK2luZGV4IGYxZGNlNzUuLjE5NDk4NzIgMTAwNjQ0CistLS0gYS9zcmMvc2Nhbi5jCisrKysgYi9zcmMvc2Nhbi5jCitAQCAtNDE4MSw3ICs0MTgxLDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQpCisgCisgCWVsc2UKKyAJCXsKKy0JCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorKwkJCWludCBudW1fdG9fcmVhZCA9CisgCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKyAKKyAJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCitkaWZmIC0tZ2l0IGEvc3JjL3NrZWwuYyBiL3NyYy9za2VsLmMKK2luZGV4IDI2Y2M4ODkuLjAzNDRkMTggMTAwNjQ0CistLS0gYS9zcmMvc2tlbC5jCisrKysgYi9zcmMvc2tlbC5jCitAQCAtMTkyOSw3ICsxOTI5LDcgQEAgY29uc3QgY2hhciAqc2tlbFtdID0geworICAgIiIsCisgICAiCWVsc2UiLAorICAgIgkJeyIsCistICAiCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0iLAorKyAgIgkJCWludCBudW1fdG9fcmVhZCA9IiwKKyAgICIJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOyIsCisgICAiIiwKKyAgICIJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApIiwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXhfMi42LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjYuMC5iYgppbmRleCA4Mjg1NDI2Li5hYjM1YjA5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjYuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjYuMC5iYgpAQCAtMTQsMTIgKzE0LDE2IEBACiAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAogICAgICAgICAgICBmaWxlOi8vZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtYWRkLWEtdGFyZ2V0LWZvci1idWlsZGluZy10ZXN0cy13aXRob3V0LXJ1bm5pbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWF2b2lkLWMtY29tbWVudHMtaW4tYy1jb2RlLWZhaWxzLXdpdGgtZ2NjLTYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtNjM1NC5wYXRjaCBcCiAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnJywgJ2ZpbGU6Ly9kaXNhYmxlLXRlc3RzLnBhdGNoJywgZCl9IFwKICAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMjY2MjcwZjEzYzQ4ZWQwNDNkOTU2NDgwNzUwODRkNTkiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjRlNjExZWY1YTQ3MDNhMTkxMDEyZjgwYzEwMjdkYzlkMTI1NTUxODNjZTBlY2Q0NmYzNjM2ZTU4N2U5YjhlOSIKIAorIyBGbGV4IGhhcyBtb3ZlZCB0byBnaXRodWIgZnJvbSAyLjYuMSBvbndhcmRzCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL3dlc3Rlcy9mbGV4L3JlbGVhc2VzIgogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiZmxleC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKIAogaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHB0ZXN0CkBAIC01MSw1ICs1NSw4IEBACiAJY3AgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHtEfSR7UFRFU1RfUEFUSH0vYnVpbGQtYXV4LwogCWNwIC1yICR7U30vdGVzdHMvKiAke0R9JHtQVEVTVF9QQVRIfQogCWNwIC1yICR7Qn0vdGVzdHMvKiAke0R9JHtQVEVTVF9QQVRIfQotCXNlZCAtZSAncy9eTWFrZWZpbGU6L19NYWtlZmlsZTovJyAtZSAncy9ec3JjZGlyID0gXCguKlwpL3NyY2RpciA9IC4vJyAtZSAncy9edG9wX3NyY2RpciA9IFwoLipcKS90b3Bfc3JjZGlyID0gLi8nICAtaSAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorCXNlZCAtZSAncy9eTWFrZWZpbGU6L19NYWtlZmlsZTovJyBcCisJICAgIC1lICdzL15zcmNkaXIgPSBcKC4qXCkvc3JjZGlyID0gLi8nIC1lICdzL150b3Bfc3JjZGlyID0gXCguKlwpL3RvcF9zcmNkaXIgPSAuLycgXAorCSAgICAtZSAncy9eYnVpbGRkaXIgPSBcKC4qXCkvYnVpbGRkaXIgPSAuLycgLWUgJ3MvXnRvcF9idWlsZGRpciA9IFwoLipcKS90b3BfYnVpbGRkaXIgPSAuLycgXAorCSAgICAtaSAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UwM2YzMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYworKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi1yZXF1aXJlIGdjYy1jb21tb24uaW5jCi0KLSMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQotCi1QViA9ICI0LjkuMyIKLQotIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKLQotQklOViA9ICI0LjkuMyIKLQotRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTQuOToiCi0KLURFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgotTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCi0KLUxJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJcCi0gICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKLSAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCi0gICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCi0gICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAotIgotCi1TUkNfVVJJID0gIlwKLSAgICAke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIgXAotICAgIGZpbGU6Ly8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBcCi0gICAgZmlsZTovLzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxNC1zaC1wcjI0ODM2LnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCi0gICAgZmlsZTovLzAwMzEtRGlzYWJsZS1zZHQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDMyLWxpYnRvb2wucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDQzLWNwcC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDQ3LXJlcG9tZW1idWcucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTEtZWFiaXNwZS5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoIFwKLSAgICBmaWxlOi8vMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA2NS1nY2MtNDgzLXVuaXZlcnNhbC1pbml0aWFsaXplci1uby13YXJuaW5nLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA2Ni1jeHhmbGFncy1mb3ItYnVpbGQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDY3LWZpeC1hcm0tdGh1bWIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDY3LWdjYy1tdXNsLXN1cHBvcnQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDY4LW11c2wtZHluYW1pYy1saW5rZXIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDY5LW11c2wtbm8tZml4aW5jbHVkZXMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDcwLWxpYnN0ZGMtbXVzbC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNzEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaCBcCi0gICAgZmlsZTovLzAwNzItc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA3My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDc0LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiNmY4MzFiNGQyNTE4NzI3MzZlOGU5Y2MwOTc0NmYzMjciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjMzMmIyYTVhMzIxYjU3NTA4YjkwMzEzNTRhODUwM2FmNmZkZmI4NjhiOGMxNzQ4ZDMzMDI4ZDEwMGE4YjY3ZSIKLQotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiZ2NjLSg/UDxwdmVyPjRcLjlcLlxkKykudGFyIgotCi1TID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgotQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgotCi0jIExhbmd1YWdlIE92ZXJyaWRlcwotRk9SVFJBTiA9ICIiCi1KQVZBID0gIiIKLQotTFRPID0gIi0tZW5hYmxlLWx0byIKLQotRVhUUkFfT0VDT05GX0JBU0UgPSAiXAotICAgICR7TFRPfSBcCi0gICAgLS1lbmFibGUtbGlic3NwIFwKLSAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKLSAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCi0gICAgLS13aXRoLXN5c3RlbS16bGliIFwKLSAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAotICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCi0gICAgLS13aXRoLXBwbD1ubyBcCi0gICAgLS13aXRoLWNsb29nPW5vIFwKLSAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKLSAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCi0iCi0KLUVYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKLSAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCi0gICAgLS1kaXNhYmxlLWxpYmdvbXAgXAotICAgIC0tZGlzYWJsZS1saWJzc3AgXAotICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCi0gICAgLS13aXRoLXN5c3RlbS16bGliIFwKLSAgICAtLWRpc2FibGUtbHRvIFwKLSAgICAtLWRpc2FibGUtcGx1Z2luIFwKLSAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKLSIKLQotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgotCi1FWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAotICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAotICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAotICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTg4MDExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotRnJvbSBiZjNkOTZhZTU4ZmExODBiOGI0NjhkMjVkYzJlMDIwOWRhY2EyNzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLS0tLQotIGNvbmZpZ3VyZSAgICB8ICAgIDIgKy0KLSBjb25maWd1cmUuYWMgfCAgICAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKLWluZGV4IGQ4MDk1MzUuLjFiNzZjOTAgMTAwNzU1Ci0tLS0gYS9jb25maWd1cmUKLSsrKyBiL2NvbmZpZ3VyZQotQEAgLTc0MzksNyArNzQzOSw3IEBAIGZpCi0gIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgotIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCi0gCi0tRkxBR1NfRk9SX1RBUkdFVD0KLStGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgotIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgotICAqIiBuZXdsaWIgIiopCi0gICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDQ4ZWMxYWEuLjg5ZDFkM2YgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTI4NzMsNyArMjg3Myw3IEBAIGZpCi0gIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgotIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCi0gCi0tRkxBR1NfRk9SX1RBUkdFVD0KLStGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgotIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgotICAqIiBuZXdsaWIgIiopCi0gICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGEzYjEwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMi11Y2xpYmMtY29uZi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLUZyb20gZDAzMDk3M2M4NzJjMDBkOTE2OTIxZDg0ZGVlZTBhZjJjMGQzODA4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM4OjI1ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDIvMzVdIHVjbGliYy1jb25mCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIHwgICAgNCArKysrCi0gbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgICAgIHwgICAgNCArKy0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKLWluZGV4IDYwYjA0OTcuLjZkYzdlYWQgMTAwNzU1Ci0tLS0gYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKLSsrKyBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAotQEAgLTEwNiw2ICsxMDYsMTAgQEAgaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtZ251IF0KLSAgdGhlbgotICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKLSAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCi0rZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQotKyB0aGVuCi0rICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQotKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKLSBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KLSAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQotICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQotZGlmZiAtLWdpdCBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKLWluZGV4IDc0M2Q5NTEuLmFlNGVhNjAgMTAwNzU1Ci0tLS0gYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwotKysrIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKLUBAIC02MDMsNyArNjAzLDcgQEAgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCi0gCi0gIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KLSBjYXNlICRob3N0X29zIGluCi0tbGludXgtZ251KikgOzsKLStsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7Ci0gbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCi0gZXNhYwotIAotQEAgLTEyNDcsNyArMTI0Nyw3IEBAIGxpbnV4LWdudW9sZGxkKiB8IGxpbnV4LWdudWFvdXQqIHwgbGludXgtZ251Y29mZiopCi0gICA7OwotIAotICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLS1saW51eC1nbnUqKQotK2xpbnV4KikKLSAgIHZlcnNpb25fdHlwZT1saW51eAotICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICBuZWVkX3ZlcnNpb249bm8KLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwOThlOTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLUZyb20gZDJkOWRkNzU2YzQzNTZkMTRkZDdhZTAwMzg1NjM0NGNiNGYzNzk4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCAgICA1ICsrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8ICAgIDkgKysrKysrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8ICAgIDkgKysrKysrKysrCi0gMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotaW5kZXggMGQzMDlhNS4uZjJmMWUxZiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKLUBAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgotICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKLSAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAotICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQotKyNpZmRlZiBfX1VDTElCQ19fCi0rLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKLStfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7Ci0rI2Vsc2UKLSBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7Ci0rI2VuZGlmCi0gI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAotaW5kZXggYjVmZDk4OS4uM2RhOWE1ZCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi1AQCAtNDAsMTMgKzQwLDIyIEBACi0gCi0gI2luY2x1ZGUgPGNsb2NhbGU+Ci0gCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjZW5kaWYKLSsKLSAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKLSAKLSBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKLSB7Ci0gX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSAKLSsjaWZkZWYgX19VQ0xJQkNfXwotKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKLSsjZWxzZQotICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKLSsjZW5kaWYKLSAKLSAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAotICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCi1pbmRleCAyZDhlOTc4Li4xNGViMDhmIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKLUBAIC0zMyw2ICszMywxMSBAQAotIAotIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAotIAotKyNpZmRlZiBfX1VDTElCQ19fCi0rI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2VuZGlmCi0rCi0gbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCi0gewotIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCi1AQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSAgIHN0cnVjdCBjdHlwZV9iYXNlCi0gICB7Ci0gICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KLSsjaWZkZWYgX19VQ0xJQkNfXwotKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7Ci0rI2Vsc2UKLSAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOwotKyNlbmRpZgotIAotICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQotICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWY1ZjMzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjg2MiArMCwwIEBACi1Gcm9tIGE1NWM3NTFhNDQ5YzJjYmYwYjNmY2MwN2FhYjFiODZiZjk2NjE1MTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAotU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDYzICsrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgMTYwICsrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMTE3ICsrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjICAgICAgICB8ICAzMDggKysrKysrKysrCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgIDgwICsrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDMwMCArKysrKysrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAxMDAgKysrCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgMTE4ICsrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA2OTIgKysrKysrKysrKysrKysrKysrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAxNjAgKysrKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICA0MDYgKysrKysrKysrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDY4ICsrCi0gbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc1ICsrKwotIGxpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oICAgICAgIHwgICAgMiArCi0gbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgICAyICsKLSAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAotaW5kZXggMDg3MWE2YS4uMzI2ZDdlZiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKLSsrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKLUBAIC0xOTA1LDYgKzE5MDUsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKLSAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCi0gICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgotICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgotKyAgICAgICotdWNsaWJjKikKLSsgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCi0rICAgICAgICA7OwotICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQotIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQotIAk7OwotQEAgLTIwNjksNiArMjA3Miw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKLSAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCi0gICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotICAgICAgIDs7Ci0rICAgIHVjbGliYykKLSsgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKLSsKLSsgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCi0rICAgICAgIyBsYW5ndWFnZXMuCi0rICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKLSsgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCi0rCi0rICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KLSsgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQotKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCi0rICAgICAgICBVU0VfTkxTPXllcwotKyAgICAgIGZpCi0rICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCi0rICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCi0rICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCi0rICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCi0rICAgICAgZG9uZQotKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKLSsgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCi0rCi0rICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0rICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKyAgICAgIDs7Ci0gICBlc2FjCi0gCi0gICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4yYWUzZTRhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLUBAIC0wLDAgKzEsNjMgQEAKLSsvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+Ci0rI2luY2x1ZGUgPGNsb2NhbGU+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCi0rZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOwotK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKLStleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKLStleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOwotK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOwotK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKLSsjZW5kaWYKLSsKLSsjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjUwODFkYzEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotQEAgLTAsMCArMSwxNjAgQEAKLSsvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0rI2luY2x1ZGUgPGxhbmdpbmZvLmg+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCi0rI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQotKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKLSsjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQotKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKLSsjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCi0rI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKLSsjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPwotKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKLSsjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0rCXsKLSsJICBjaGFyKiBfX3Nhbml0eTsKLSsJICBlcnJubyA9IDA7Ci0rCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLSsgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCSAgICBfX3YgPSBfX2Y7Ci0rCSAgZWxzZQotKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSsJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSsgICAgewotKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotKwl7Ci0rCSAgY2hhciogX19zYW5pdHk7Ci0rCSAgZXJybm8gPSAwOwotKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLSsJICAgIF9fdiA9IF9fZDsKLSsJICBlbHNlCi0rCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCi0rCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKLSsJewotKwkgIGNoYXIqIF9fc2FuaXR5OwotKwkgIGVycm5vID0gMDsKLSsJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwkgICAgX192ID0gX19sZDsKLSsJICBlbHNlCi0rCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSsJfQotKyAgICB9Ci0rCi0rICB2b2lkCi0rICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQotKyAgewotKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgaWYgKCFfX2Nsb2MpCi0rICAgICAgewotKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgotKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgotKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKLSsgICAgICB9Ci0rI2VuZGlmCi0rICB9Ci0rCi0rICB2b2lkCi0rICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSsgIHsKLSsgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKLSsgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKLSsgIH0KLSsKLSsgIF9fY19sb2NhbGUKLSsgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSsgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KLSt9IC8vIG5hbWVzcGFjZSBzdGQKLSsKLStuYW1lc3BhY2UgX19nbnVfY3h4Ci0rewotKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9Ci0rICAgIHsKLSsgICAgICAiTENfQ1RZUEUiLAotKyAgICAgICJMQ19OVU1FUklDIiwKLSsgICAgICAiTENfVElNRSIsCi0rICAgICAgIkxDX0NPTExBVEUiLAotKyAgICAgICJMQ19NT05FVEFSWSIsCi0rICAgICAgIkxDX01FU1NBR0VTIiwKLSsjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAotKyAgICAgICJMQ19QQVBFUiIsCi0rICAgICAgIkxDX05BTUUiLAotKyAgICAgICJMQ19BRERSRVNTIiwKLSsgICAgICAiTENfVEVMRVBIT05FIiwKLSsgICAgICAiTENfTUVBU1VSRU1FTlQiLAotKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKLSsjZW5kaWYKLSsgICAgfTsKLSt9Ci0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOwotK30gIC8vIG5hbWVzcGFjZSBzdGQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uZGEwN2MxZgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLUBAIC0wLDAgKzEsMTE3IEBACi0rLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaWZuZGVmIF9DX0xPQ0FMRV9ICi0rI2RlZmluZSBfQ19MT0NBTEVfSCAxCi0rCi0rI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotKwotKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCi0rI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKLSsjaW5jbHVkZSA8Y2xvY2FsZT4KLSsjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0Ci0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IHRoaXMKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCi0rI2VuZGlmCi0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCi0rI2VuZGlmCi0rI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCi0rI2VuZGlmCi0rLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2Ci0rI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCi0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLStuYW1lc3BhY2UgX19nbnVfY3h4Ci0rewotKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotK30KLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7Ci0rI2Vsc2UKLSsgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7Ci0rI2VuZGlmCi0rCi0rICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCi0rICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0rICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAotKyAgLy8gYmUgYXZvaWRlZC4KLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KLSsgICAgaW50Ci0rICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCi0rCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKLSsJCSAgICAgY29uc3QgY2hhciogX19mbXQsCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKLSsgICAgewotKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7Ci0rI2Vsc2UKLSsJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCi0rICAgIHsKLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOwotKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7Ci0rICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOwotKyMgZW5kaWYKLSsjZW5kaWYKLSsKLSsgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsgICAgICBkZWxldGUgW10gX19zYXY7Ci0rI2VuZGlmCi0rICAgICAgcmV0dXJuIF9fcmV0OwotKyAgICB9Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uNjRhYTk2MgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwotQEAgLTAsMCArMSwzMDggQEAKLSsvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCi0rI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rICAvLyBTcGVjaWFsaXphdGlvbnMuCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAotKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCi0rCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAotKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0Ci0rICB7Ci0rICAgIHJlc3VsdCBfX3JldCA9IG9rOwotKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOwotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKLSsjZW5kaWYKLSsKLSsgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKLSsgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgotKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KLSsgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKLSsJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAotKwkgJiYgX19yZXQgPT0gb2s7KQotKyAgICAgIHsKLSsJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKLSsJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7Ci0rCi0rCV9fZnJvbSA9IF9fZnJvbV9uZXh0OwotKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKLSsJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCi0rCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKLSsJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKLSsJICB7Ci0rCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQotKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgotKwkgICAgLy8gd2NydG9tYi4KLSsJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCi0rCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKLSsJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKLSsJICAgIF9fcmV0ID0gZXJyb3I7Ci0rCSAgfQotKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCi0rCSAgewotKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKLSsJICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7Ci0rCSAgICBfX3RvX25leHQgKz0gX19jb252OwotKwkgIH0KLSsKLSsJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKLSsJICB7Ci0rCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKLSsJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKLSsJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7Ci0rCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCi0rCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7Ci0rCQlfX3N0YXRlID0gX190bXBfc3RhdGU7Ci0rCQlfX3RvX25leHQgKz0gX19jb252OwotKwkJKytfX2Zyb21fbmV4dDsKLSsJICAgICAgfQotKwkgIH0KLSsgICAgICB9Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbmRpZgotKwotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCi0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAotKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAotKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKLSsgIHsKLSsgICAgcmVzdWx0IF9fcmV0ID0gb2s7Ci0rICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKwotKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgotKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KLSsgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCi0rICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87Ci0rCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKLSsJICYmIF9fcmV0ID09IG9rOykKLSsgICAgICB7Ci0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOwotKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCi0rCQkJCQkJCQkgIF9fZnJvbV9lbmQKLSsJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7Ci0rCi0rCV9fZnJvbSA9IF9fZnJvbV9uZXh0OwotKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKLSsJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAotKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOwotKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQotKwkgIHsKLSsJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCi0rCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCi0rCSAgICAvLyBtYnJ0b3djLgotKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKLSsJICAgICAgewotKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKLSsJCQkJICZfX3RtcF9zdGF0ZSk7Ci0rCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCi0rCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQotKwkJICBicmVhazsKLSsJICAgICAgfQotKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207Ci0rCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7Ci0rCSAgICBfX3JldCA9IGVycm9yOwotKwkgIH0KLSsJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQotKwkgIHsKLSsJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KLSsJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7Ci0rCSAgICBfX3JldCA9IHBhcnRpYWw7Ci0rCSAgfQotKwllbHNlCi0rCSAgewotKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOwotKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKLSsJICB9Ci0rCi0rCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCi0rCSAgewotKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQotKwkgICAgICB7Ci0rCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncwotKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOwotKwkJKytfX2Zyb21fbmV4dDsKLSsJCSpfX3RvX25leHQrKyA9IEwnXDAnOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICB9Ci0rICAgICAgfQotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsKLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgaW50Ci0rICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgotKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCi0rICB7Ci0rICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKLSsgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCi0rICAgIGludCBfX3JldCA9IDA7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQotKyAgICAgIF9fcmV0ID0gMTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGludAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCi0rICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KLSsgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGludAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAotKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ci0rICB7Ci0rICAgIGludCBfX3JldCA9IDA7Ci0rICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKwotKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgotKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgotKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KLSsKLSsgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCi0rICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KLSsgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQotKwkJCQkJCQkgICAqIF9fbWF4KSk7Ci0rICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKLSsgICAgICB7Ci0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOwotKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAotKwkJCQkJCQkJICBfX2VuZAotKwkJCQkJCQkJICAtIF9fZnJvbSkpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOwotKwotKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKLSsJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKLSsJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKLSsJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKLSsJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKLSsJICB7Ci0rCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQotKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgotKwkgICAgLy8gbWJydG93Yy4KLSsJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCi0rCSAgICAgIHsKLSsJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKLSsJCQkJICZfX3RtcF9zdGF0ZSk7Ci0rCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCi0rCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQotKwkJICBicmVhazsKLSsJICAgICAgfQotKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwotKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKLSsJICAgIGJyZWFrOwotKwkgIH0KLSsJaWYgKCFfX2Zyb20pCi0rCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKLSsKLSsJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKLSsJX19tYXggLT0gX19jb252OwotKwotKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCi0rCSAgewotKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKLSsJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKLSsJICAgICsrX19mcm9tOwotKwkgICAgKytfX3JldDsKLSsJICAgIC0tX19tYXg7Ci0rCSAgfQotKyAgICAgIH0KLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5jMjY2NGE3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDgwIEBACi0rLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKLSsjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKLSsjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCi0rI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCi0rICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgotKyAgdGVtcGxhdGU8PgotKyAgICBpbnQKLSsgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0Ci0rICAgIHsKLSsgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOwotKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgc2l6ZV90Ci0rICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCi0rCQkJCXNpemVfdCBfX24pIGNvbnN0Ci0rICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICBpbnQKLSsgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKLSsJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAotKyAgICB7Ci0rICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKLSsgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHNpemVfdAotKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAotKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAotKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcyOTRlM2EKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDMwMCBAQAotKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2RlZmluZSBfTElCQwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI3VuZGVmIF9MSUJDCi0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQotKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQotKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQotKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAotKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQotKyAgICB7Ci0rICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKLSsJewotKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOwotKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOwotKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOwotKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKLSsjZW5kaWYKLSsJfQotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCi0rICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKLSsgIHsKLSsgICAgX193bWFza190eXBlIF9fcmV0OwotKyAgICBzd2l0Y2ggKF9fbSkKLSsgICAgICB7Ci0rICAgICAgY2FzZSBzcGFjZToKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBwcmludDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBjbnRybDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSB1cHBlcjoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBsb3dlcjoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBhbHBoYToKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBkaWdpdDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBwdW5jdDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSB4ZGlnaXQ6Ci0rCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGFsbnVtOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGdyYXBoOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBkZWZhdWx0OgotKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgd2NoYXJfdAotKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0Ci0rICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsgICAgICAgICsrX19sbzsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgd2NoYXJfdAotKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0Ci0rICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsgICAgICAgICsrX19sbzsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgYm9vbAotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAotKyAgewotKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgotKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KLSsgICAgYm9vbCBfX3JldCA9IGZhbHNlOwotKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOwotKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCi0rICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KLSsJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKLSsJewotKwkgIF9fcmV0ID0gdHJ1ZTsKLSsJICBicmVhazsKLSsJfQotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICBjb25zdCB3Y2hhcl90KgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0Ci0rICB7Ci0rICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQotKyAgICAgIHsKLSsJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKLSsJLy8gbGlicmFyeSBmb3IgYmxhbmsuCi0rCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7Ci0rCW1hc2sgX19tID0gMDsKLSsJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQotKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQotKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07Ci0rCSpfX3ZlYyA9IF9fbTsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgY29uc3Qgd2NoYXJfdCoKLSsgIGN0eXBlPHdjaGFyX3Q+OjoKLSsgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCi0rICAgICAgKytfX2xvOwotKyAgICByZXR1cm4gX19sbzsKLSsgIH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQotKyAgICAgICsrX19sbzsKLSsgICAgcmV0dXJuIF9fbG87Ci0rICB9Ci0rCi0rICB3Y2hhcl90Ci0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKLSsgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9Ci0rCi0rICBjb25zdCBjaGFyKgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKLSsJKytfX2xvOwotKwkrK19fZGVzdDsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgY2hhcgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKLSsgIHsKLSsgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKLSsgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rI2VuZGlmCi0rICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7Ci0rICB9Ci0rCi0rICBjb25zdCB3Y2hhcl90KgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCi0rCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0Ci0rICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsjZW5kaWYKLSsgICAgaWYgKF9NX25hcnJvd19vaykKLSsgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rCXsKLSsJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKLSsJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOwotKwkgIGVsc2UKLSsJICAgIHsKLSsJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKLSsJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKLSsJICAgIH0KLSsJICArK19fbG87Ci0rCSAgKytfX2Rlc3Q7Ci0rCX0KLSsgICAgZWxzZQotKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKLSsJewotKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7Ci0rCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKLSsJICArK19fbG87Ci0rCSAgKytfX2Rlc3Q7Ci0rCX0KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgdm9pZAotKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQotKyAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rI2VuZGlmCi0rICAgIHdpbnRfdCBfX2k7Ci0rICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKLSsgICAgICB7Ci0rCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOwotKwlpZiAoX19jID09IEVPRikKLSsJICBicmVhazsKLSsJZWxzZQotKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKLSsgICAgICB9Ci0rICAgIGlmIChfX2kgPT0gMTI4KQotKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7Ci0rICAgIGVsc2UKLSsgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKLSsgICAgZm9yIChzaXplX3QgX19qID0gMDsKLSsJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCi0rICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7Ci0rCi0rICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCi0rICAgICAgewotKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKLSsJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOwotKyAgICAgIH0KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICB9Ci0rI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMTM1OTRkOQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsMTAwIEBACi0rLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLStleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0rCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKLSsjdW5kZWYgZ2V0dGV4dAotKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQotKyNlbHNlCi0rI3VuZGVmIGdldHRleHQKLSsjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gU3BlY2lhbGl6YXRpb25zLgotKyAgdGVtcGxhdGU8PgotKyAgICBzdHJpbmcKLSsgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKLSsgICAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKLSsgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOwotKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKLSsjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKLSsgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKyAgICAgIGZyZWUoX19vbGQpOwotKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOwotKyNlbHNlCi0rICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOwotKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHdzdHJpbmcKLSsgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0Ci0rICAgIHsKLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwotKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKLSsgICAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKLSsjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7Ci0rICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsgICAgICBmcmVlKF9fb2xkKTsKLSsgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOwotKyMgZWxzZQotKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKLSsgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOwotKyMgZW5kaWYKLSsgICAgfQotKyNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjE0MjQwNzgKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC0wLDAgKzEsMTE4IEBACi0rLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLStleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKLStleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLSsJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKLSsjZWxzZQotKyN1bmRlZiBfX3RleHRkb21haW4KLSsjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgotKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCi0rI2VuZGlmCi0rCi0rICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKLSsgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCi0rICAgICB7IH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCXNpemVfdCBfX3JlZnMpCi0rICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCi0rICAgICB7Ci0rICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKLSsgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOwotKyAgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCi0rICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCi0rCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0Ci0rICAgIHsKLSsgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7Ci0rICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7Ci0rICAgIH0KLSsKLSsgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKLSsgICAgewotKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKLSsJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7Ci0rICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwotKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAotKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0Ci0rICAgIHsKLSsgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KLSsgICAgICAvLyBiZSB1c2VkLgotKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7Ci0rICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgdm9pZAotKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAotKyAgICB7IH0KLSsKLSsgICAvLyBtZXNzYWdlc19ieW5hbWUKLSsgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKLSsgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCi0rICAgICB7Ci0rICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKLSsJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOwotKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKLSsgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7Ci0rICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKLSsKLSsgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKLSsJIHsKLSsJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7Ci0rCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKLSsJIH0KLSsgICAgIH0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uYWE1MjczMQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsNjkyIEBACi0rLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjZGVmaW5lIF9MSUJDCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjdW5kZWYgX0xJQkMKLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKLSsjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6Ci0rICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCi0rICBtb25leV9iYXNlOjpwYXR0ZXJuCi0rICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCi0rICB7Ci0rICAgIHBhdHRlcm4gX19yZXQ7Ci0rCi0rICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAotKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgotKwotKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCi0rICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCi0rCi0rICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQotKyAgICAvLyBlbHNlIG5vbmUKLSsKLSsgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAotKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0Ci0rCi0rICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgotKyAgICBzd2l0Y2ggKF9fcG9zbikKLSsgICAgICB7Ci0rICAgICAgY2FzZSAwOgotKyAgICAgIGNhc2UgMToKLSsJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KLSsJX19yZXQuZmllbGRbMF0gPSBzaWduOwotKwlpZiAoX19zcGFjZSkKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCi0rCSAgICBpZiAoX19wcmVjZWRlcykKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKLSsJICAgICAgfQotKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgotKwkgICAgaWYgKF9fcHJlY2VkZXMpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgMjoKLSsJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgotKwlpZiAoX19zcGFjZSkKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KLSsJICAgIGlmIChfX3ByZWNlZGVzKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOwotKwkgICAgICB9Ci0rCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOwotKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOwotKwkgIH0KLSsJZWxzZQotKwkgIHsKLSsJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgotKwkgICAgaWYgKF9fcHJlY2VkZXMpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKLSsJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgMzoKLSsJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgotKwlpZiAoX19wcmVjZWRlcykKLSsJICB7Ci0rCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247Ci0rCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJICAgIGlmIChfX3NwYWNlKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOwotKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbM10gPSBub25lOwotKwkgICAgICB9Ci0rCSAgfQotKwllbHNlCi0rCSAgewotKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKLSsJICAgIGlmIChfX3NwYWNlKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOwotKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOwotKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOwotKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFszXSA9IG5vbmU7Ci0rCSAgICAgIH0KLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgNDoKLSsJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCi0rCWlmIChfX3ByZWNlZGVzKQotKwkgIHsKLSsJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOwotKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFszXSA9IG5vbmU7Ci0rCSAgICAgIH0KLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKLSsJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICAgICAgfQotKwkgIH0KLSsJYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsJOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKLSsJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKLSsKLSsgICAgICBpZiAoIV9fY2xvYykKLSsJewotKwkgIC8vICJDIiBsb2NhbGUKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47Ci0rCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLy8gTmFtZWQgbG9jYWxlLgotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOwotKwotKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBpZiAoIV9fbnBvc24pCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKLSsJCQkJCQkJX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgLy8gX0ludGwgPT0gdHJ1ZQotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCi0rCQkJCQkJICAgICAgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCi0rCQkJCQkJCV9fcHBvc24pOwotKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCi0rCQkJCQkJCV9fbnBvc24pOwotKwl9Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8vIE5hbWVkIGxvY2FsZS4KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCi0rCQkJCQkJCV9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKLSsKLSsJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBpZiAoIV9fbnBvc24pCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKLSsJCQkJCQkJX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgLy8gX0ludGwgPT0gZmFsc2UKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkJCQkJCQlfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKLSsJCQkJCQkJX19ucG9zbik7Ci0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCi0rICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkJCQkJCQljb25zdCBjaGFyKikKLSsjZWxzZQotKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCi0rI2VuZGlmCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OwotKwotKyAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSsjZWxzZQotKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxzZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSsJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7Ci0rCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsjZW5kaWYKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsKLSsJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKLSsJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKLSsJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOwotKwotKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKLSsJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7Ci0rCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIHRyeQotKwkgICAgewotKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKLSsJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOwotKwkgICAgICBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOwotKwkgICAgICBpZiAoIV9fbnBvc24pCi0rCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7Ci0rCSAgICAgIGVsc2UgaWYgKF9fbGVuKQotKwkJewotKwkJICArK19fbGVuOwotKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKLSsJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07Ci0rCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7Ci0rCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKLSsJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOwotKwotKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgotKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKLSsJICAgICAgaWYgKF9fbGVuKQotKwkJewotKwkJICArK19fbGVuOwotKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKLSsJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07Ci0rCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7Ci0rCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOwotKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICAgIH0KLSsJICBjYXRjaCAoLi4uKQotKwkgICAgewotKwkgICAgICBkZWxldGUgX01fZGF0YTsKLSsJICAgICAgX01fZGF0YSA9IDA7Ci0rCSAgICAgIGRlbGV0ZSBfX3djc19wczsKLSsJICAgICAgZGVsZXRlIF9fd2NzX25zOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxzZQotKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rCSAgICAgIGZyZWUoX19vbGQpOwotKyNlbmRpZgotKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSsJICAgIH0KLSsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAotKwkJCQkJCSAgICAgIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkJCQkJCQlfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAotKwkJCQkJCQlfX25wb3NuKTsKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxzZQotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICBmcmVlKF9fb2xkKTsKLSsjZW5kaWYKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICB2b2lkCi0rICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQotKyNlbHNlCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKLSsjZW5kaWYKLSsgIHsKLSsgICAgaWYgKCFfTV9kYXRhKQotKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKLSsKLSsgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSsjZWxzZQotKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxzZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSsgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7Ci0rI2VuZGlmCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7Ci0rICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwotKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7Ci0rCi0rCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOwotKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKLSsJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICB0cnkKLSsgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKLSsgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKLSsgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOwotKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQotKyAgICAgICAgICAgICAgICB7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOwotKwotKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKLSsJICAgICAgaWYgKCFfX25wb3NuKQotKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOwotKwkgICAgICBlbHNlIGlmIChfX2xlbikKLSsJCXsKLSsJCSAgKytfX2xlbjsKLSsJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7Ci0rCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOwotKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOwotKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIC8vIF9JbnRsID09IHRydWUuCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOwotKwkgICAgICBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICAgIH0KLSsgICAgICAgICAgY2F0Y2ggKC4uLikKLSsJICAgIHsKLSsJICAgICAgZGVsZXRlIF9NX2RhdGE7Ci0rICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKLSsJICAgICAgZGVsZXRlIF9fd2NzX3BzOwotKwkgICAgICBkZWxldGUgX193Y3NfbnM7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbHNlCi0rCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSsJICAgIH0KLSsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKLSsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2Vsc2UKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rCSAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCi0rICAgIHsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCi0rICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKLSsgICAgICBkZWxldGUgX01fZGF0YTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQotKyAgICB7Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQotKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOwotKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7Ci0rICAgICAgZGVsZXRlIF9NX2RhdGE7Ci0rICAgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi44ODNlYzFhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDE2MCBAQAotKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjZGVmaW5lIF9MSUJDCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjdW5kZWYgX0xJQkMKLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSsjZW5kaWYKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKLSsKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7Ci0rCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOwotKwotKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCi0rCQkJCQkJCV9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsKLSsJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KLSsJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQotKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsJfQotKwotKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCi0rICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOwotKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OwotKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKLSsgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKLSsKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKLSsKLSsJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KLSsJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOwotKwotKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9Ci0rCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLy8gTmFtZWQgbG9jYWxlLgotKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgotKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsKLSsJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKLSsJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgZWxzZQotKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCX0KLSsKLSsgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgotKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKLSsgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7Ci0rICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7Ci0rICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKyAjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5lMDcwN2Q3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDQwNiBAQAotKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0Ci0rI2VuZGlmCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6Ci0rICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCi0rCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAotKyAgICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCi0rCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotKyNlbHNlCi0rICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKyAgICAgIGZyZWUoX19vbGQpOwotKyNlbmRpZgotKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgotKyAgICAgIGlmIChfX2xlbiA9PSAwKQotKwlfX3NbMF0gPSAnXDAnOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OwotKwotKyAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOwotKwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKLSsJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgotKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7Ci0rCi0rCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KLSsJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7Ci0rCi0rCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKLSsJCQkJCQkJICAgICBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCi0rCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKLSsJfQotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgotKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAotKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKLSsgICAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKLSsJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0rI2Vsc2UKLSsgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0rICAgICAgaWYgKF9fbGVuID09IDApCi0rCV9fc1swXSA9IEwnXDAnOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OwotKwotKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgotKy8vICAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOwotKwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7Ci0rCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7Ci0rCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKLSsJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KLSsJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOwotKwl9Ci0rI2lmIDAKLSsgICAgICBlbHNlCi0rCXsKLSsJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwotKwotKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKLSsKLSsJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKLSsJfQotKyNlbmRpZiAvLyAwCi0rICAgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uYmE4ZTg1OAotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1AQCAtMCwwICsxLDY4IEBACi0rLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKLSsgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKLSsgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKLSsgICAgewotKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOwotKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7Ci0rICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQotKyAgICB7Ci0rICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKLSsJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OwotKyAgICAgIGRlbGV0ZSBfTV9kYXRhOwotKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKLSsgICAgfQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCi1pbmRleCBmNDBkZGNmLi5jNTdhNzUxIDEwMDc1NQotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotQEAgLTE1ODIyLDYgKzE1ODIyLDkgQEAgZmkKLSAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCi0gICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgotICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgotKyAgICAgICotdWNsaWJjKikKLSsgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCi0rICAgICAgICA7OwotICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQotIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQotIAk7OwotQEAgLTE2MDc5LDYgKzE2MDgyLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQotICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKLSAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0gICAgICAgOzsKLSsgICAgdWNsaWJjKQotKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQotKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQotKwotKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKLSsgICAgICAjIGxhbmd1YWdlcy4KLSsgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAotKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKLSsKLSsgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgotKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLSsgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgotK2ZpCi0rZmkKLStjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10Ci0raWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKLSskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KLSsgICAgICAgIFVTRV9OTFM9eWVzCi0rICAgICAgZmkKLSsgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KLSsgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKLSsgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKLSsgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKLSsgICAgICBkb25lCi0rCi0rCi0rCi0rICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0rICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKyAgICAgIDs7Ci0gICBlc2FjCi0gCi0gICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCi1pbmRleCA1ODBkNzI1Li4zZmU2MWI4IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCi1AQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKLSB1c2luZyBzdGQ6OndtZW1jcHk7Ci0gdXNpbmcgc3RkOjp3bWVtbW92ZTsKLSB1c2luZyBzdGQ6OndtZW1zZXQ7Ci0rI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKLSB1c2luZyBzdGQ6Ondjc2Z0aW1lOwotKyNlbmRpZgotIAotICNpZiBfR0xJQkNYWF9VU0VfQzk5Ci0gdXNpbmcgc3RkOjp3Y3N0b2xkOwotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgotaW5kZXggMGU2YjFmYy4uNDA1YWVlMiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgotKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCi1AQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCi0gICB1c2luZyA6Ondjc2NvbGw7Ci0gICB1c2luZyA6Ondjc2NweTsKLSAgIHVzaW5nIDo6d2NzY3NwbjsKLSsjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQotICAgdXNpbmcgOjp3Y3NmdGltZTsKLSsjZW5kaWYKLSAgIHVzaW5nIDo6d2NzbGVuOwotICAgdXNpbmcgOjp3Y3NuY2F0OwotICAgdXNpbmcgOjp3Y3NuY21wOwotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2JiZmU0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLUZyb20gNmEzZTg1MDZhMTJjMTI3MjhkOGIyOTkwMWRlZmQ3MzhiZTQzNzU3ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQyOjM2ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDUvMzVdIHVjbGliYy1sb2NhbGUtbm9fX3gKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNDUgKysrKysrKysrKysrKysrKysrKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgMTQgLS0tLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgICAxICsKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgIDcgLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgICA3IC0tLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgICAgNyArLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTggKysrLS0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgIDQgLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDMgLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgIDMgLS0KLSAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotaW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi1AQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOwotIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7Ci0gI2VuZGlmCi0gCi0rIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKLSsjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKLSsjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAotKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKLSsjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCi0rIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCi0rIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCi0rIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCi0rIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKLSsjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKLSsjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKLSsKLSsjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCi0rIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCi0rIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCi0rIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAotKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAotKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKLSsjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAotKyMgZW5kaWYKLSsKLSsjZWxzZQotKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCi0rIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKLSsjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQotKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCi0rIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCi0rIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQotKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPwotKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCi0rIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQotKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKLSsvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KLSsvLwotKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQotKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQotKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQotKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQotKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQotKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCi0rIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQotKyMgZW5kaWYKLSsKLSAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1AQCAtMzksMjAgKzM5LDYgQEAKLSAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKLS0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCi0tI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQotLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCi0tI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQotLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKLS0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQotLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/Ci0tI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAotLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQotLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQotLSNlbmRpZgotLQotIG5hbWVzcGFjZSBzdGQKLSB7Ci0gICB0ZW1wbGF0ZTw+Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotaW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAotIHsKLSAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKLSB9Ci0rI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKLSAjZW5kaWYKLSAKLSBuYW1lc3BhY2Ugc3RkCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLWluZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi1AQCAtMzYsMTMgKzM2LDYgQEAKLSAjaW5jbHVkZSA8bG9jYWxlPgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKLS0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKLS0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCi0tI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotQEAgLTM4LDEzICszOCw2IEBACi0gI3VuZGVmIF9MSUJDCi0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0tI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0tI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQotLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQotLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQotLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLWluZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLUBAIC0zOSwxMyArMzksMTAgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgotICNlbmRpZgotLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLS0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOwotICN1bmRlZiBnZXR0ZXh0Ci0tI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0rI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQotICNlbHNlCi0tI3VuZGVmIGdldHRleHQKLSAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKLSAjZW5kaWYKLSAKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotaW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC0zNiwxNSArMzYsMTEgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKLSAjZW5kaWYKLS0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLS1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKLS1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLS0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKLS0jZWxzZQotLSN1bmRlZiBfX3RleHRkb21haW4KLS0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgotLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKLS0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotKyN1bmRlZiB0ZXh0ZG9tYWluCi0rI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCi0rI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQotICNlbmRpZgotIAotICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KLUBAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAotICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAotIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAotICAgICB7Ci0tICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOwotKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7Ci0gICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7Ci0gICAgIH0KLSAKLUBAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAotICAgICB7Ci0gICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCi0gICAgICAgLy8gYmUgdXNlZC4KLS0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOwotKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwotICAgICAgIHJldHVybiAwOwotICAgICB9Ci0gCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotQEAgLTQzLDEwICs0Myw2IEBACi0gI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0Ci0gI2VuZGlmCi0gCi0tI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0tI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1pbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotQEAgLTQxLDkgKzQxLDYgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSAjZW5kaWYKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLS0jZW5kaWYKLSAKLSBuYW1lc3BhY2Ugc3RkCi0gewotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1pbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotQEAgLTQwLDkgKzQwLDYgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSAjZW5kaWYKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLS0jZW5kaWYKLSAKLSBuYW1lc3BhY2Ugc3RkCi0gewotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MDY4NTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotRnJvbSAyMjU1MTFhM2FlYjE5M2E5MTZiMzk5OWYwYjY0MGEzOTJjYWE2N2NkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwNi8zNV0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICAgIDQgKystLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgICAxMyArKysrKysrKysrKysrCi0gMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotaW5kZXggMmU2ZjgwYS4uMzFlYmI5ZiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotQEAgLTQwMSw3ICs0MDEsNyBAQCBuYW1lc3BhY2Ugc3RkCi0gIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotLSMgZWxzZQotKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0gCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSAjIGVuZGlmCi1AQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBzdGQKLSAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOwotIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7Ci0tIyBlbHNlCi0rIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKLSAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOwotICMgZW5kaWYKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotaW5kZXggMmM3MDY0Mi4uZDVjODk2MSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLUBAIC0xMjcsMTIgKzEyNywyNSBAQCBuYW1lc3BhY2Ugc3RkCi0gCXsKLSAJICAvLyBOYW1lZCBsb2NhbGUuCi0gCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfXwotKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7Ci0rIyBlbmRpZgotKyNlbHNlCi0gCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKLSAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7Ci0gCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7Ci0gCi0gCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOwotIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OwotKyNlbmRpZgotIAotIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQotIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODUxMTIzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU0MiArMCwwIEBACi1Gcm9tIDZmZmU3YzQ2ZjUyZDI3ODY0YzNkZjM2NjNlMTZlYzlkZGVlNzFlOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAotU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICAgMyArCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDc0ICsrKysrKysrKy0tLS0tLS0tLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgIDQyICsrKysrKy0tLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgIDUxICsrKysrKysrKystLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDEyICsrLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgMzQgKysrKystLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICA1ICsrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgIDE4ICsrKy0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDE3ICsrKy0tCi0gOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLWluZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotQEAgLTMxLDYgKzMxLDkgQEAKLSAKLSAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KLSAjaW5jbHVkZSA8Y2xvY2FsZT4KLSsjaW5jbHVkZSA8Y3N0ZGxpYj4KLSsjaW5jbHVkZSA8Y3N0cmluZz4KLSsjaW5jbHVkZSA8Y3N0ZGRlZj4KLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyBjbGVhbiB0aGlzIHVwCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1pbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLUBAIC0zOSwyMyArMzksMjAgQEAKLSAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLS1uYW1lc3BhY2Ugc3RkCi0tewotK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCi0rCi0gICB0ZW1wbGF0ZTw+Ci0gICAgIHZvaWQKLSAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCi0gCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCi0gICAgIHsKLS0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKLS0JewotLQkgIGNoYXIqIF9fc2FuaXR5OwotLQkgIGVycm5vID0gMDsKLS0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLS0JICAgIF9fdiA9IF9fZjsKLS0JICBlbHNlCi0tCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLS0JfQotKyAgICAgIGNoYXIqIF9fc2FuaXR5OwotKyAgICAgIGVycm5vID0gMDsKLSsgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwlfX3YgPSBfX2Y7Ci0rICAgICAgZWxzZQotKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSAgICAgfQotIAotICAgdGVtcGxhdGU8PgotQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCi0gICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSAgICAgewotLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotLQl7Ci0tCSAgY2hhciogX19zYW5pdHk7Ci0tCSAgZXJybm8gPSAwOwotLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLS0JICAgIF9fdiA9IF9fZDsKLS0JICBlbHNlCi0tCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLS0JfQotKyAgICAgIGNoYXIqIF9fc2FuaXR5OwotKyAgICAgIGVycm5vID0gMDsKLSsgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLSsgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLSsJX192ID0gX19kOwotKyAgICAgIGVsc2UKLSsJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0gICAgIH0KLSAKLSAgIHRlbXBsYXRlPD4KLUBAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAotICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSAgICAgewotLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotLQl7Ci0tCSAgY2hhciogX19zYW5pdHk7Ci0tCSAgZXJybm8gPSAwOwotLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLS0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0tCSAgICBfX3YgPSBfX2xkOwotLQkgIGVsc2UKLS0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotLQl9Ci0rICAgICAgY2hhciogX19zYW5pdHk7Ci0rICAgICAgZXJybm8gPSAwOwotKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLSsgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLSsJX192ID0gX19sZDsKLSsgICAgICBlbHNlCi0rCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotICAgICB9Ci0gCi0gICB2b2lkCi1AQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAotICAgdm9pZAotICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCi0gICB7Ci0tICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCi0rICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQotICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOwotICAgfQotIAotICAgX19jX2xvY2FsZQotICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQotICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQotLX0gLy8gbmFtZXNwYWNlIHN0ZAotIAotLW5hbWVzcGFjZSBfX2dudV9jeHgKLS17Ci0rX0dMSUJDWFhfRU5EX05BTUVTUEFDRQotKwotK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCi0rCi0gICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KLSAgICAgewotICAgICAgICJMQ19DVFlQRSIsCi1AQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4Ci0gICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgotICNlbmRpZgotICAgICB9OwotLX0KLSAKLS1uYW1lc3BhY2Ugc3RkCi0tewotK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKLSsKLStfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQotKwotICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7Ci0tfSAgLy8gbmFtZXNwYWNlIHN0ZAotKwotK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1pbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1AQCAtMzksMjEgKzM5LDIzIEBACi0gI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotIAotICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCi0tI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKLSsjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCi0gI2luY2x1ZGUgPGNsb2NhbGU+Ci0gI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIGZpeCB0aGlzCi0gI2VuZGlmCi0tI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKLSAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90Ci0gI2VuZGlmCi0tI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0tI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKLSsjaWZkZWYgSEFWRV9MSUJJTlRMX0gKLSsjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCi0gI2VuZGlmCi0rI2luY2x1ZGUgPGNzdGRhcmc+Ci0gCi0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0gI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCi0rLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAotICNlbmRpZgotICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKLSAKLUBAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAotICNlbHNlCi0gICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOwotICNlbmRpZgotLQotLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgotLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwotLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKLSsgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKLSsgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0rICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKLSAgIC8vIGJlIGF2b2lkZWQuCi0tICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+Ci0tICAgIGludAotLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAotLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCi0tCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAotLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXwotLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCi0rICAgIGlubGluZSBpbnQKLSsgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgotKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KLSsJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKLSsjZW5kaWYKLSsJCSAgICAgLAotKwkJICAgICBjaGFyKiBfX291dCwKLSsJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKLSsJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKLSAgICAgewotKyAgICAgIHZhX2xpc3QgX19hcmdzOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXwotKwotICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7Ci0gI2Vsc2UKLS0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCi0tICAgIHsKLSAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOwotQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCi0gIyBlbmRpZgotICNlbmRpZgotIAotLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKLSsgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKLSsgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKLSsgICAgICB2YV9lbmQoX19hcmdzKTsKLSAKLSAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KLSAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1pbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1AQCAtMzMsMTYgKzMzLDIwIEBACi0gCi0gLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSAKLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gI2RlZmluZSBfTElCQwotICNpbmNsdWRlIDxsb2NhbGU+Ci0gI3VuZGVmIF9MSUJDCi0rI2Vsc2UKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNlbmRpZgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotLW5hbWVzcGFjZSBzdGQKLS17Ci0rX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKLSsKLSAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAotICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCi0tICB0ZW1wbGF0ZTw+Ci0gICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKLSAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQotICAgICB7Ci1AQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCi0gI2VuZGlmCi0gCX0KLSAgICAgfQotKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQotKyAgICB7IH0KLSAKLSAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKLUBAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCi0gICBjdHlwZTx3Y2hhcl90Pjo6Ci0gICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0Ci0gICB7Ci0tICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCi0tICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgotKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKLSsgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKLSsgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQotKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCi0rICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQotKwotICAgICBib29sIF9fcmV0ID0gZmFsc2U7Ci0tICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7Ci0tICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKLS0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQotLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQotLQl7Ci0tCSAgX19yZXQgPSB0cnVlOwotLQkgIGJyZWFrOwotLQl9Ci0rICAgIGlmIChfX20gPT0gX01fYml0WzVdKQotKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsgICAgZWxzZQotKyAgICAgIHsKLSsJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKLSsJLy8gbGlicmFyeSBmb3IgYmxhbmsuCi0rCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7Ci0rCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKLSsJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKLSsJICAgIHsKLSsJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQotKwkJewotKwkJICBfX3JldCA9IHRydWU7Ci0rCQkgIGJyZWFrOwotKwkJfQotKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKLSsJCWJyZWFrOwotKwkgICAgfQotKyAgICAgIH0KLSsKLSAgICAgcmV0dXJuIF9fcmV0OwotICAgfQotIAotQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCi0gI2VuZGlmCi0gICB9Ci0gI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAotLX0KLSsKLStfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLWluZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi1AQCAtNTMsMTIgKzUzLDE2IEBACi0gICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0gICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAotIAkJCQlzaXplX3QgX19yZWZzKQotLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKLS0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQotKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKLSsgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKLSAgICAgIHsKLS0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07Ci0tICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOwotKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKLSsgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07Ci0rICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKLSAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOwotKwotKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCi0rICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKLSAgICAgIH0KLSAKLSAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1pbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1AQCAtMzMsOSArMzMsMTQgQEAKLSAKLSAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotIAotKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAjZGVmaW5lIF9MSUJDCi0gI2luY2x1ZGUgPGxvY2FsZT4KLSAjdW5kZWYgX0xJQkMKLSsjZWxzZQotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi1AQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKLSAJICB9Ci0gCWJyZWFrOwotICAgICAgIGRlZmF1bHQ6Ci0tCTsKLSsJX19yZXQgPSBwYXR0ZXJuKCk7Ci0gICAgICAgfQotICAgICByZXR1cm4gX19yZXQ7Ci0gICB9Ci1AQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKLSAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSAjZWxzZQotIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7Ci0rICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKLSsgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOwotIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7Ci0gI2VuZGlmCi0gCi1AQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKLSAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0gI2Vsc2UKLS0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotLQkgICAgICBmcmVlKF9fb2xkKTsKLSsJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKwkgICAgICBkZWxldGUgW10gX19zYXY7Ci0gI2VuZGlmCi0gCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOwotIAkgICAgfQotQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCi0gI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICBfX3VzZWxvY2FsZShfX29sZCk7Ci0gI2Vsc2UKLS0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tCSAgZnJlZShfX29sZCk7Ci0rCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKwkgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAJfQotICAgICB9Ci1AQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCi0gCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7Ci0gI2Vsc2UKLSAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KLS0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0tCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKLSsgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOwotKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07Ci0rICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7Ci0rICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7Ci0gI2VuZGlmCi0gCi0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi1AQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKLSAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0gI2Vsc2UKLS0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotLQkgICAgICBmcmVlKF9fb2xkKTsKLSsJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKwkgICAgICBkZWxldGUgW10gX19zYXY7Ci0gI2VuZGlmCi0gICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSAJICAgIH0KLUBAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAotICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgX191c2Vsb2NhbGUoX19vbGQpOwotICNlbHNlCi0tCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotLQkgIGZyZWUoX19vbGQpOwotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsJICBkZWxldGUgW10gX19zYXY7Ci0gI2VuZGlmCi0gCX0KLSAgICAgfQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1pbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotQEAgLTMzLDkgKzMzLDE0IEBACi0gCi0gLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSAKLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gI2RlZmluZSBfTElCQwotICNpbmNsdWRlIDxsb2NhbGU+Ci0gI3VuZGVmIF9MSUJDCi0rI2Vsc2UKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNlbmRpZgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1pbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCi0gICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAotIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKLSAjZWxzZQotLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKLSsgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07Ci0rICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKLSAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7Ci0gICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOwotLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLS0gICAgICBmcmVlKF9fb2xkKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rICAgICAgZGVsZXRlIFtdIF9fc2F2OwotICNlbmRpZgotICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgotICAgICAgIGlmIChfX2xlbiA9PSAwKQotQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKLSAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCi0gCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotICNlbHNlCi0tICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7Ci0rICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOwotKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKLSsgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOwotICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKLSAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7Ci0tICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotLSAgICAgIGZyZWUoX19vbGQpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsgICAgICBkZWxldGUgW10gX19zYXY7Ci0gI2VuZGlmCi0gICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0gICAgICAgaWYgKF9fbGVuID09IDApCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1pbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLUBAIC01MCwxMiArNTAsMjEgQEAKLSAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKLSAJCQkJICAgICBzaXplX3QgX19yZWZzKQotICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKLS0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQotKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQotICAgICB7Ci0tICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07Ci0tICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7Ci0rICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7Ci0rICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07Ci0rICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOwotICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7Ci0tICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKLSsKLSsgICAgICB0cnkKLSsJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9Ci0rICAgICAgY2F0Y2goLi4uKQotKwl7Ci0rCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OwotKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOwotKwl9Ci0rCi0gICAgIH0KLSAKLSAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MjM4MDkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLUZyb20gOWYyMTU4NDUxOTgxY2YwYTgwY2ZhYmRjNzlhZTMxYmI2OTc2YTgwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ4OjEwICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDgvMzVdIG1pc3NpbmctZXhlY2luZm9faAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGJvZWhtLWdjL2luY2x1ZGUvZ2MuaCB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAotaW5kZXggYzUxZTAxNy4uYTdiYThkYyAxMDA2NDQKLS0tLSBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAotKysrIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCi1AQCAtNTAzLDcgKzUwMyw3IEBAIEdDX0FQSSBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVfb2ZmX3BhZ2UgR0NfUFJPVE8oKHNpemVfdCBsYikpOwotICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCi0gIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgotICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKLS0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQotKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCi0gIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCi0gIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKLSAjICAgZW5kaWYKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjg3NzguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLUZyb20gZTM5M2UwNzZmMWFiODJkMjVlMWFhMDRkNmVkZWEyN2I0MWQzZWIwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjAzICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDkvMzVdIGM5OS1zbnByaW50ZgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbwotaW5kZXggZTg1YmQ4My4uNmFmODM5YSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbwotKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCi1AQCAtMTM5LDcgKzEzOSw3IEBAIG5hbWVzcGFjZSBzdGQKLSAgIHVzaW5nIDo6dnNwcmludGY7Ci0gfSAvLyBuYW1lc3BhY2Ugc3RkCi0gCi0tI2lmIF9HTElCQ1hYX1VTRV9DOTkKLSsjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCi0gCi0gI3VuZGVmIHNucHJpbnRmCi0gI3VuZGVmIHZmc2NhbmYKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Mjg1NzEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLUZyb20gNzNmNjlkODA2ZTJjOTU2MWE1NDk5NTIyMzQzMWExMDc2Y2ZkNjE2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjU3ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTAvMzVdIGM5OS1jb21wbGV4LXVnbHktaGFjawotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZ3VyZSB8ICAgIDMgKysrCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKLWluZGV4IGM1N2E3NTEuLmExMzMzZTIgMTAwNzU1Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCi1AQCAtMTg3MzQsNiArMTg3MzQsOSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSVNPIEM5OSBzdXBwb3J0IHRvIFRSMSBpbiA8Y29tcGxleC5oPi4uLiAiID4mNjsgfQotICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotICNpbmNsdWRlIDxjb21wbGV4Lmg+Ci0rI2lmZGVmIF9fVUNMSUJDX18KLSsjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKLSsjZW5kaWYKLSBpbnQKLSBtYWluICgpCi0gewotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZTc5YjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDExLWluZGV4X21hY3JvLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotRnJvbSBiMDM3OTUzZTQwMzEyYjQ1YWI4NGVkMGEzYWQ4ODJiYjVlNDEzMTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTE6MDIgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxMS8zNV0gaW5kZXhfbWFjcm8KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSAgICAgICB8ICAgIDMgKysrCi0gbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggfCAgICAzICsrKwotIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCi1pbmRleCAzOGViMWU4Li4xNThkMjFhIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKLSsrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCi1AQCAtNTUsNiArNTUsOSBAQAotICNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KLSAjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+Ci0gCi0rLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLwotKyN1bmRlZiBpbmRleAotKwotICMgaWZkZWYgX19HQwotICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAotICMgZWxzZQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKLWluZGV4IGQ3YjVjYmQuLmI5YjNhY2IgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAotKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKLUBAIC00OCw2ICs0OCw5IEBACi0gI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgotICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCi0gCi0rLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLwotKyN1bmRlZiBpbmRleAotKwotIG5hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQotIHsKLSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhM2VmZGUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotRnJvbSAxMDRlNGQ2NjIwOGYyNzI2YjE0ZDJmNWVlYmNlOTA3MDBjYmM4M2M4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6MDIgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxMy8zNV0gbGlic3RkYysrLW5hbWVzcGFjZQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggfCAgICA0ICsrKy0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICAgIHwgICAgNCArKystCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotaW5kZXggMDY3NjU3YS4uZGQ3NmE2YyAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC0zMiw3ICszMiw4IEBACi0gLy8KLSAKLSAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotLQotK25hbWVzcGFjZSBzdGQKLSt7Ci0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0gI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCi0gI2VuZGlmCi1AQCAtMTE2LDMgKzExNyw0IEBACi0gCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKLSAJIH0KLSAgICAgIH0KLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1pbmRleCAxNjY1ZGRlLi45MDVjNDMzIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLUBAIC0zMyw3ICszMyw4IEBACi0gLy8KLSAKLSAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotLQotK25hbWVzcGFjZSBzdGQKLSt7Ci0gICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0gICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCi0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAotQEAgLTc1LDMgKzc2LDQgQEAKLSAgICAgICBkZWxldGUgX01fZGF0YTsKLSAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0gICAgIH0KLSt9Ci0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE0LXNoLXByMjQ4MzYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOGZkNTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE0LXNoLXByMjQ4MzYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1Gcm9tIGVkYzlhY2IxODE4MTBmMjM0YjZiOWY3ZDI4MjBiMGU0ZjZhMWVlYWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDo0OCArMDQwMAotU3ViamVjdDogW1BBVENIIDE0LzM1XSBzaC1wcjI0ODM2Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1odHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfaWQ9ODk1OTMwNCZmb3J1bV9pZD01MzQ4Ci1odHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI0ODM2Ci0tLS0KLSBnY2MvY29uZmlndXJlICAgIHwgICAgMiArLQotIGdjYy9jb25maWd1cmUuYWMgfCAgICAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggZTEyYTE4MC4uMTM1YmJmNSAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC0yMzM3OCw3ICsyMzM3OCw3IEBAIGZvbzoJLmxvbmcJMjUKLSAJdGxzX2ZpcnN0X21pbm9yPTE0Ci0gCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgotIAk7OwotLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKLSsgIHNoLSotKiB8IHNoWzM0XSotKi0qKQotICAgICBjb25mdGVzdF9zPScKLSAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCi0gZm9vOgkubG9uZwkyNQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCi1pbmRleCBlYmEzNTc3Li42MzYzYTIxIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYwotKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYwotQEAgLTMxNDEsNyArMzE0MSw3IEBAIGZvbzoJLmxvbmcJMjUKLSAJdGxzX2ZpcnN0X21pbm9yPTE0Ci0gCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgotIAk7OwotLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKLSsgIHNoLSotKiB8IHNoWzM0XSotKi0qKQotICAgICBjb25mdGVzdF9zPScKLSAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCi0gZm9vOgkubG9uZwkyNQotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2M0NmZjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotRnJvbSA1MGU1MzY2MDA1YjBmNmFmMjczNzhlMmE1YzNjYjlmOTkzNmE3ZTYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTg6MzYgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxNS8zNV0gYXJtOiBVc2UgVEFSR0VUX0VORElBTl9PUFRJT04gZm9yIGRldGVybWluaW5nCi0gTVVMVElMSUJfREVGQVVMVFMKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FybS9jb2ZmLmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vY29mZi5oCi1AQCAtMzIsOCArMzIsMTEgQEAKLSAjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChNQVNLX0FQQ1NfRlJBTUUpCi0gCi0gI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUwotKyNpZm5kZWYgVEFSR0VUX0VORElBTl9PUFRJT04KLSsjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKLSsjZW5kaWYKLSAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKLS0gIHsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KLSsgIHsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1mbG9hdC1hYmk9c29mdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9Ci0gI2VuZGlmCi0gDAotIC8qIFRoaXMgaXMgQ09GRiwgYnV0IHByZWZlciBzdGFicy4gICovCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2VsZi5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKLUBAIC0xMTYsOCArMTE2LDExIEBACi0gI2VuZGlmCi0gCi0gI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUwotKyNpZm5kZWYgVEFSR0VUX0VORElBTl9PUFRJT04KLSsjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKLSsjZW5kaWYKLSAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKLS0gIHsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQotKyAgeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQotICNlbmRpZgotIAwKLSAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9TVEFSVF9BUFBfT0ZGIHRydWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc1ZWY5Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotRnJvbSAxNjAzOTdlZjNjMzMzMTA5OWFmMDI4ZjFiOGQzZTA4NWIwN2Q4OGFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxNi8zNV0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCi0tLS0KLSBnY2MvTWFrZWZpbGUuaW4gICAgIHwgICAgMiArLQotIGdjYy9jb21tb24ub3B0ICAgICAgfCAgICA0ICsrKysKLSBnY2MvY29uZmlnLmluICAgICAgIHwgICAgNiArKysrKysKLSBnY2MvY29uZmlndXJlICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKystLQotIGdjYy9jb25maWd1cmUuYWMgICAgfCAgIDEwICsrKysrKysrKysKLSBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrKysKLSBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArKwotIGdjYy9pbmNwYXRoLmMgICAgICAgfCAgIDE5ICsrKysrKysrKysrKysrKysrKysKLSA4IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb21tb24ub3B0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb21tb24ub3B0Ci0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29tbW9uLm9wdAotQEAgLTYwMyw2ICs2MDMsMTAgQEAgV3BlZGFudGljCi0gQ29tbW9uIFZhcihwZWRhbnRpYykgV2FybmluZwotIElzc3VlIHdhcm5pbmdzIG5lZWRlZCBmb3Igc3RyaWN0IGNvbXBsaWFuY2UgdG8gdGhlIHN0YW5kYXJkCi0gCi0rV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKLStDb21tb24gVmFyKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykgSW5pdCgxKSBXYXJuaW5nCi0rV2FybiBmb3IgLUkgYW5kIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIGlmIGNyb3NzIGNvbXBpbGluZwotKwotIFdzaGFkb3cKLSBDb21tb24gVmFyKHdhcm5fc2hhZG93KSBXYXJuaW5nCi0gV2FybiB3aGVuIG9uZSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIKLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy5pbgotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy5pbgotQEAgLTEzOCw2ICsxMzgsMTIgQEAKLSAjZW5kaWYKLSAKLSAKLSsvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzICovCi0rI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKLSsjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKLSsjZW5kaWYKLSsKLSsKLSAvKiBEZWZpbmUgaWYgeW91IHdhbnQgYWxsIG9wZXJhdGlvbnMgb24gUlRMICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCi0gICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgotICAgIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLwotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlndXJlCi0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlCi1AQCAtOTI4LDYgKzkyOCw3IEBAIHdpdGhfc3lzdGVtX3psaWIKLSBlbmFibGVfbWFpbnRhaW5lcl9tb2RlCi0gZW5hYmxlX2xpbmtfbXV0ZXgKLSBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKLStlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcwotIGVuYWJsZV9wbHVnaW4KLSBlbmFibGVfaG9zdF9zaGFyZWQKLSBlbmFibGVfbGlicXVhZG1hdGhfc3VwcG9ydAotQEAgLTE2NDgsNiArMTY0OSw4IEBAIE9wdGlvbmFsIEZlYXR1cmVzOgotICAgLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeQotKyAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzCi0gICAtLWVuYWJsZS1wbHVnaW4gICAgICAgICBlbmFibGUgcGx1Z2luIHN1cHBvcnQKLSAgIC0tZW5hYmxlLWhvc3Qtc2hhcmVkICAgIGJ1aWxkIGhvc3QgY29kZSBhcyBzaGFyZWQgbGlicmFyaWVzCi0gICAtLWRpc2FibGUtbGlicXVhZG1hdGgtc3VwcG9ydAotQEAgLTI3NzAyLDYgKzI3NzA1LDE5IEBAIGlmIHRlc3QgIiR7ZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGkKLSBmaQotIAotIAotKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIHdhcyBnaXZlbi4KLStpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgIGVuYWJsZXZhbD0kZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7Ci0rZWxzZQotKyAgZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm8KLStmaQotKwotK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KLSsKLSskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyAxIiA+PmNvbmZkZWZzLmgKLSsKLStmaQotKwotICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwotIAotIAotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlndXJlLmFjCi0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlLmFjCi1AQCAtNTM2Niw2ICs1MzY2LDE2IEBAIEFDX0FSR19FTkFCTEUodmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWwKLSAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKLSAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKLSAKLStBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKLSsgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAotKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQotK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KLSsgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAotKyAgICAgICAgICAgWzFdLAotKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQotK2ZpCi0rCi0gIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCi0gQUNfU1VCU1Qoc3ViZGlycykKLSBBQ19TVUJTVChzcmNkaXIpCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKLUBAIC0yNjAsNiArMjYwLDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgotIC1Xb3Zlcmxlbmd0aC1zdHJpbmdzICAtV3BhY2tlZCAgLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0ICAtV3BhZGRlZCBAZ29sCi0gLVdwYXJlbnRoZXNlcyAgLVdwZWRhbnRpYy1tcy1mb3JtYXQgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQgQGdvbAotIC1XcG9pbnRlci1hcml0aCAgLVduby1wb2ludGVyLXRvLWludC1jYXN0IEBnb2wKLSstV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgQGdvbAotIC1XcmVkdW5kYW50LWRlY2xzICAtV25vLXJldHVybi1sb2NhbC1hZGRyIEBnb2wKLSAtV3JldHVybi10eXBlICAtV3NlcXVlbmNlLXBvaW50ICAtV3NoYWRvdyBAZ29sCi0gLVdzaWduLWNvbXBhcmUgIC1Xc2lnbi1jb252ZXJzaW9uIC1XZmxvYXQtY29udmVyc2lvbiBAZ29sCi1AQCAtNDIzMCw2ICs0MjMxLDE0IEBAIGhlYWRlcnMtLS1mb3IgdGhhdCwgQG9wdGlvbnstV3Vua25vd24tcHIKLSAgZm9yIG1vc3QgdGFyZ2V0cywgaXQgaXMgbWFkZSB1cCBvZiBjb2RlIGFuZCB0aHVzIHJlcXVpcmVzIHRoZSBzdGFjawotICB0byBiZSBtYWRlIGV4ZWN1dGFibGUgaW4gb3JkZXIgZm9yIHRoZSBwcm9ncmFtIHRvIHdvcmsgcHJvcGVybHkuCi0gCi0rQGl0ZW0gLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCi0rQG9waW5kZXggV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKLStEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstSX0gb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0KLStkaXJlY3RvcmllcyBzdWNoIGFzIEBmaWxley91c3IvaW5jbHVkZX0gd2hlbiBjcm9zcyBjb21waWxpbmcuICBUaGlzCi0rb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2gKLStkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0IGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgdGhlIHRhcmdldAotK3N5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KLSsKLSBAaXRlbSAtV2Zsb2F0LWVxdWFsCi0gQG9waW5kZXggV2Zsb2F0LWVxdWFsCi0gQG9waW5kZXggV25vLWZsb2F0LWVxdWFsCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2djYy5jCi0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKLUBAIC03NjQsNiArNzY0LDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZgotICAgICIle2Z1c2UtbGQ9KjotZnVzZS1sZD0lKn1cCi0gICAgICVYICV7byp9ICV7ZSp9ICV7Tn0gJXtufSAle3J9XAotICAgICAle3N9ICV7dH0gJXt1Kn0gJXt6fSAle1p9ICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolU319ICIgVlRBQkxFX1ZFUklGSUNBVElPTl9TUEVDICIgXAotKyAgICAle1duby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCi0rICAgICV7V2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKLSAgICAgJXtzdGF0aWM6fSAle0wqfSAlKG1md3JhcCkgJShsaW5rX2xpYmdjYykgIiBTQU5JVElaRVJfRUFSTFlfU1BFQyAiICVvXAotICAgICAle2ZvcGVubXB8ZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9KjolOmluY2x1ZGUobGliZ29tcC5zcGVjKSUobGlua19nb21wKX1cCi0gICAgICV7ZmdudS10bTolOmluY2x1ZGUobGliaXRtLnNwZWMpJShsaW5rX2l0bSl9XAotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2luY3BhdGguYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvaW5jcGF0aC5jCi0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvaW5jcGF0aC5jCi1AQCAtMjgsNiArMjgsNyBAQAotICNpbmNsdWRlICJpbnRsLmgiCi0gI2luY2x1ZGUgImluY3BhdGguaCIKLSAjaW5jbHVkZSAiY3BwZGVmYXVsdC5oIgotKyNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKLSAKLSAvKiBNaWNyb3NvZnQgV2luZG93cyBkb2VzIG5vdCBuYXRpdmVseSBzdXBwb3J0IGlub2Rlcy4KLSAgICBWTVMgaGFzIG5vbi1udW1lcmljIGlub2Rlcy4gICovCi1AQCAtMzgyLDYgKzM4MywyNCBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vCi0gCX0KLSAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKLSAgICAgfQotKwotKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUwotKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKLSsgICAgewotKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKLSsKLSsgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKLSsgICAgICAgICB7Ci0rICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCi0rICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCi0rICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQotKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKLSsgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCi0rICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKLSsgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKLSsgICAgICAgICB9Ci0rICAgIH0KLSsjZW5kaWYKLSB9Ci0gCi0gLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTgxZWZkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1Gcm9tIGU5OWM5Yzk3MjY2ZDZkM2U4Y2FjNzk4YWE5MTQwODI1MGM0ZDYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAotU3ViamVjdDogW1BBVENIIDE3LzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKLQotQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCi16ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCi0vdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKLWFib3J0ZWQuCi0KLUluc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCi13YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9pbmNwYXRoLmMgfCAgICA0ICsrKy0KLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYwotaW5kZXggY2Q0MWM3OC4uZWFjNGE5MiAxMDA2NDQKLS0tLSBhL2djYy9pbmNwYXRoLmMKLSsrKyBiL2djYy9pbmNwYXRoLmMKLUBAIC0zOTMsNyArMzkzLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCi0gICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCi0tICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQotKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQotKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCi0rICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQotICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjhjYWZkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLUZyb20gNTYyMDdmYTI5MjNlOGVkZjc3NGU5OGZmYWM4MjY2NjA5MTA3NmJlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTgvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAotCi1CZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgotCi1UaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCi0KLU90aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKLQotLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgotCi0tIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLQotSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCi0KLUJvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPwotCi1TaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBjb25maWd1cmUgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQotaW5kZXggMWI3NmM5MC4uZTRkY2U3YyAxMDA3NTUKLS0tLSBhL2NvbmZpZ3VyZQotKysrIGIvY29uZmlndXJlCi1AQCAtNjc3Miw2ICs2NzcyLDM4IEBAIGZpCi0gCi0gCi0gCi0rIyBEdXJpbmcgZ2NjIGJvb3RzdHJhcCwgaWYgd2UgdXNlIHNvbWUgcmFuZG9tIGNjIGZvciBzdGFnZTEgdGhlbiBDRkxBR1MKLSsjIG1pZ2h0IGJlIGVtcHR5IG9yICItZyIuICBXZSBkb24ndCByZXF1aXJlIGEgQysrIGNvbXBpbGVyLCBzbyBDWFhGTEFHUwotKyMgbWlnaHQgYWxzbyBiZSBlbXB0eSAob3IgIi1nIiwgaWYgYSBub24tR0NDIEMrKyBjb21waWxlciBpcyBpbiB0aGUgcGF0aCkuCi0rIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IFRBUkdFVCBsaWJyYXJpZXMgKHdoaWNoIHdlIGtub3cgYXJlIGJ1aWx0IHdpdGgKLSsjIGdjYykgYXJlIGJ1aWx0IHdpdGggIi1PMiAtZyIsIHNvIGluY2x1ZGUgdGhvc2Ugb3B0aW9ucyB3aGVuIHNldHRpbmcKLSsjIENGTEFHU19GT1JfVEFSR0VUIGFuZCBDWFhGTEFHU19GT1JfVEFSR0VULgotK2lmIHRlc3QgIngkQ0ZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgotKyAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9JENGTEFHUwotKyAgY2FzZSAiICRDRkxBR1MgIiBpbgotKyAgICAqIiAtTzIgIiopIDs7Ci0rICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItTzIgJENGTEFHUyIgOzsKLSsgIGVzYWMKLSsgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KLSsgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7Ci0rICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItZyAkQ0ZMQUdTIiA7OwotKyAgZXNhYwotK2ZpCi0rCi0rCi0raWYgdGVzdCAieCRDWFhGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KLSsgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9JENYWEZMQUdTCi0rICBjYXNlICIgJENYWEZMQUdTICIgaW4KLSsgICAgKiIgLU8yICIqKSA7OwotKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItTzIgJENYWEZMQUdTIiA7OwotKyAgZXNhYwotKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCi0rICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OwotKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItZyAkQ1hYRkxBR1MiIDs7Ci0rICBlc2FjCi0rZmkKLSsKLSsKLSAjIEhhbmRsZSAtLXdpdGgtaGVhZGVycz1YWFguICBJZiB0aGUgdmFsdWUgaXMgbm90ICJ5ZXMiLCB0aGUgY29udGVudHMgb2YKLSAjIHRoZSBuYW1lZCBkaXJlY3RvcnkgYXJlIGNvcGllZCB0byAkKHRvb2xkaXIpL3N5cy1pbmNsdWRlLgotIGlmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHggJiYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geG5vIDsgdGhlbgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OGJlMGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotRnJvbSAxOGZkZTU3NDBiMDkzMjRkZmI5Y2Y0MWU5ODQ5NjcyNTczZmY1ZmEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTA6MDYgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxOS8zNV0gNjQtYml0IG11bHRpbGliIGhhY2suCi0KLUdDQyBoYXMgaW50ZXJuYWwgbXVsdGlsaWIgaGFuZGxpbmcgY29kZSBidXQgaXQgYXNzdW1lcyBhIHZlcnkgc3BlY2lmaWMgcmlnaWQgZGlyZWN0b3J5Ci1sYXlvdXQuIFRoZSBidWlsZCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlsaWIgbGF5b3V0IGlzIHZlcnkgZ2VuZXJpYyBhbmQgYWxsb3dzCi1jb21wbGV0ZSBjdXN0b21pc2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgotCi1UaGlzIHBhdGNoIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byBhbGxvdyBhbnkgY3VzdG9tIGRpcmVjdG9yaWVzIHRvIGJlIHBhc3NlZCBpbnRvIGdjYwotYW5kIGhhbmRsZWQgY29ycmVjdGx5LiBJdCBmb3JjZXMgZ2NjIHRvIHVzZSB0aGUgYmFzZV9saWJkaXIgKHdoaWNoIGlzIHRoZSBjdXJyZW50Ci1kaXJlY3RvcnksICIuIikuIFdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgZWFjaCBtdWx0aWxpYiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgd2UgZG9uJ3QKLWtub3cgd2hpY2ggY29tcGlsZXIgb3B0aW9ucyBtYXkgYmUgYmVpbmcgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLiBTaW5jZSB3ZSBoYXZlIGEgY29tcGlsZXIKLXBlciBtdWxpdGxpYiBhdCB0aGlzIHBvaW50IHRoYXQgaXNuJ3QgYW4gaXNzdWUuCi0KLVRoZSBvbmUgcHJvYmxlbSBpcyB0aGUgdGFyZ2V0IGNvbXBpbGVyIGlzIG9ubHkgZ29pbmcgdG8gd29yayBmb3IgdGhlIGRlZmF1bHQgbXVsdGxpbGliIGF0Ci10aGlzIHBvaW50LiBJZGVhbGx5IHdlJ2QgZmlndXJlIG91dCB3aGljaCBtdWx0aWxpYnMgd2VyZSBiZWluZyBlbmFibGVkIHdpdGggd2hpY2ggcGF0aHMKLWFuZCBiZSBhYmxlIHRvIHBhdGNoIHRoZXNlIGVudHJpZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBjb3JyZWN0IHBhdGhzIGJ1dCB0aGlzIHdlCi1kb24ndCBoYXZlIHN1Y2ggY29kZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGUgdGFyZ2V0IGdjYyByZWNpcGUgc2hvdWxkIGRvCi1hbmQgb3ZlcnJpZGUgdGhlc2UgcGxhdGZvcm0gZGVmYXVsdHMgaW4gaXRzIGJ1aWxkIGNvbmZpZy4KLQotUlAgMTUvOC8xMQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotU2lnbmVkLW9mZi1ieTogRWx2aXMgRG93c29uIDxlbHZpcy5kb3dzb25AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgICB8ICAgIDYgKystLS0tCi0gZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCAgIHwgICAxMCArKystLS0tLS0tCi0gZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IHwgICAgNSArKy0tLQotIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0Ci0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0Ci1AQCAtMzIsNyArMzIsNSBAQAotICMKLSBjb21tYT0sCi0gTVVMVElMSUJfT1BUSU9OUyAgICA9ICQoc3Vic3QgJChjb21tYSksLywkKFRNX01VTFRJTElCX0NPTkZJRykpCi0tTVVMVElMSUJfRElSTkFNRVMgICA9ICQocGF0c3Vic3QgbSUsICUsICQoc3Vic3QgLywgLCQoTVVMVElMSUJfT1BUSU9OUykpKQotLU1VTFRJTElCX09TRElSTkFNRVMgPSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251KQotLU1VTFRJTElCX09TRElSTkFNRVMrPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6aTM4Ni1saW51eC1nbnUpCi0tTVVMVElMSUJfT1NESVJOQU1FUys9IG14MzI9Li4vbGlieDMyJChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudXgzMikKLStNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLgotK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Ci0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Ci1AQCAtMTcsMTAgKzE3LDYgQEAKLSAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAKLSBNVUxUSUxJQl9PUFRJT05TID0gbWFiaT1uMzIvbWFiaT0zMi9tYWJpPTY0Ci0tTVVMVElMSUJfRElSTkFNRVMgPSBuMzIgMzIgNjQKLS1NSVBTX0VMID0gJChpZiAkKGZpbHRlciAlZWwsICQoZmlyc3R3b3JkICQoc3Vic3QgLSwgLCQodGFyZ2V0KSkpKSxlbCkKLS1NSVBTX1NPRlQgPSAkKGlmICQoc3RyaXAgJChmaWx0ZXIgTUFTS19TT0ZUX0ZMT0FUX0FCSSwgJCh0YXJnZXRfY3B1X2RlZmF1bHQpKSAkKGZpbHRlciBzb2Z0LCAkKHdpdGhfZmxvYXQpKSksc29mdCkKLS1NVUxUSUxJQl9PU0RJUk5BTUVTID0gXAotLQkuLi9saWIzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpbjMyJChNSVBTX1NPRlQpKSBcCi0tCS4uL2xpYiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHMkKE1JUFNfRUwpLWxpbnV4LWdudSQoTUlQU19TT0ZUKSkgXAotLQkuLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpNjQkKE1JUFNfU09GVCkpCi0rTVVMVElMSUJfRElSTkFNRVMgPSAuIC4gLgotK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQotKwotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Ci1AQCAtMjYsMTAgKzI2LDkgQEAKLSAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KLSAKLSBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKLS1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCi0rTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KLSBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAotLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKLS1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKLStNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCi0gCi0gcnM2MDAwLWxpbnV4Lm86ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL3JzNjAwMC1saW51eC5jCi0gCSQoQ09NUElMRSkgJDwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDY2MTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi1Gcm9tIDMwN2M4ZmYzZWY2NjZiN2JkNWFjNzMzODYzZjJmYmIyN2E5ZDUyMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAotU3ViamVjdDogW1BBVENIIDIwLzM1XSBvcHRpb25hbCBsaWJzdGRjCi0KLWdjYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKwotd2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKwotd2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKwotb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKLWRyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgotCi1BICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCi1kbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgotCi1SUCAyOS82LzEwCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0tLS0KLSBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgICAgNCArKysrCi0gZ2NjL2NwL2crK3NwZWMuYyAgICB8ICAgIDEgKwotIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKystLQotIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAxICsKLSA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvYy1mYW1pbHkvYy5vcHQKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAotQEAgLTEzMjMsNiArMTMyMywxMCBAQCBub3N0ZGluYysrCi0gQysrIE9iakMrKwotIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKwotIAotK25vc3RkbGliKysKLStEcml2ZXIKLStEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5Ci0rCi0gbwotIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQotIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0Ci1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY3AvZysrc3BlYy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jcC9nKytzcGVjLmMKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jcC9nKytzcGVjLmMKLUBAIC0xMzgsNiArMTM4LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkXwotICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKLSAJewotIAljYXNlIE9QVF9ub3N0ZGxpYjoKLSsJY2FzZSBPUFRfbm9zdGRsaWJfXzoKLSAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKLSAJICBsaWJyYXJ5ID0gLTE7Ci0gCSAgYnJlYWs7Ci1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKLUBAIC0xOTMsNiArMTkzLDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KLSAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAotIC1mdnRhYmxlLXZlcmlmeT1AdmFye3N0ZHxwcmVpbml0fG5vbmV9IEBnb2wKLSAtZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAotKy1ub3N0ZGxpYisrIEBnb2wKLSAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKLSAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKLSAtV2FiaSAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAotQEAgLTQ1Nyw3ICs0NTgsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCi0gLW5vc3RhcnRmaWxlcyAgLW5vZGVmYXVsdGxpYnMgIC1ub3N0ZGxpYiAtcGllIC1yZHluYW1pYyBAZ29sCi0gLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAotIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAotLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCi0rLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKLSAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCi0gLXUgQHZhcntzeW1ib2x9fQotIAotQEAgLTEwMjg1LDYgKzEwMjg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW4KLSBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKLSBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCi0gCi0rQGl0ZW0gLW5vc3RkbGliKysKLStAb3BpbmRleCBub3N0ZGxpYisrCi0rRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCi0rT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCi0rCi0gQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9Ci0gQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcwotIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZ2NjLmMKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYwotQEAgLTc3Miw2ICs3NzIsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCi0gICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAotICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKLSAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCi0rICAgICV7IW5vc3RkbGliKys6fVwKLSAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgotICNlbmRpZgotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViM2M2MWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLUZyb20gMDA0Njk2ZTA1NGFlOWRjNzFkNTEyY2M3NTVjY2M0MDc0ZmM2MmIyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKLQotVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCi0iaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCi13aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCi1UaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgotRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgotCi1TaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotLS0tCi0gZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDcgLS0tLS0tLQotIGdjYy9jb25maWd1cmUuYWMgfCAgICA3IC0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKLWluZGV4IGI2NWQyMWQuLmJkYWI0NWEgMTAwNzU1Ci0tLS0gYS9nY2MvY29uZmlndXJlCi0rKysgYi9nY2MvY29uZmlndXJlCi1AQCAtMjU4MjksMTMgKzI1ODI5LDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKLSAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKLSAgICAgICBmaQotICAgICBmaQotLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgotLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCi0tICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKLS0gICAgICBlbHNlCi0tICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKLS0gICAgICBmaQotLSAgICBmaQotICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKLSAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KLSAKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYwotaW5kZXggZTIyNmI4NS4uNWY1YzkwOSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWd1cmUuYWMKLSsrKyBiL2djYy9jb25maWd1cmUuYWMKLUBAIC00MDk5LDEzICs0MDk5LDYgQEAgeDoKLSAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKLSAgICAgICBmaQotICAgICBmaQotLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgotLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCi0tICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKLS0gICAgICBlbHNlCi0tICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKLS0gICAgICBmaQotLSAgICBmaQotICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKLSAKLSAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGM4YWJmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotRnJvbSA3ZjVjOWRjYzcxYzhiODNhMGI1NTk2MjY2Y2M0YmRmMDkzNmU4ZTAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTY6MjggKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyMi8zNV0gQ09MTEVDVF9HQ0NfT1BUSU9OUwotCi1UaGlzIHBhdGNoIGFkZHMgLS1zeXNyb290IGludG8gQ09MTEVDVF9HQ0NfT1BUSU9OUyB3aGljaCBpcyB1c2VkIHRvCi1pbnZva2UgY29sbGVjdDIuCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gZ2NjL2djYy5jIHwgICAgOSArKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKLWluZGV4IDQ3Nzc1MmYuLjUxMDYyYWEgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2NjLmMKLSsrKyBiL2djYy9nY2MuYwotQEAgLTQwOTgsNiArNDA5OCwxNSBAQCBzZXRfY29sbGVjdF9nY2Nfb3B0aW9ucyAodm9pZCkKLSAJCXNpemVvZiAoIkNPTExFQ1RfR0NDX09QVElPTlM9IikgLSAxKTsKLSAKLSAgIGZpcnN0X3RpbWUgPSBUUlVFOwotKyNpZmRlZiBIQVZFX0xEX1NZU1JPT1QKLSsgIGlmICh0YXJnZXRfc3lzdGVtX3Jvb3RfY2hhbmdlZCAmJiB0YXJnZXRfc3lzdGVtX3Jvb3QpCi0rICAgIHsKLSsgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInLS1zeXNyb290PSIsIHNpemVvZigiJy0tc3lzcm9vdD0iKS0xKTsKLSsgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssIHRhcmdldF9zeXN0ZW1fcm9vdCxzdHJsZW4odGFyZ2V0X3N5c3RlbV9yb290KSk7Ci0rICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJyIsIDEpOwotKyAgICAgIGZpcnN0X3RpbWUgPSBGQUxTRTsKLSsgICAgfQotKyNlbmRpZgotICAgZm9yIChpID0gMDsgKGludCkgaSA8IG5fc3dpdGNoZXM7IGkrKykKLSAgICAgewotICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICphcmdzOwotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZGZlOWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotRnJvbSBmN2Q0OWNhNDQ1ZTYwZmFhMWI1MjU2YzZiNGY5NmMxZWU1YzBlMzUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyMy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZQotIGluICR7Qn0KLQotVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Ci10aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKLWdjYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1XaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKLW9jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Ci13b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KLXRtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJwotCi1TbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGdjYy9NYWtlZmlsZS5pbiAgfCAgICAyICstCi0gZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDQgKystLQotIGdjYy9jb25maWd1cmUuYWMgfCAgICA0ICsrLS0KLSBnY2MvbWtjb25maWcuc2ggIHwgICAgNCArKy0tCi0gNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KLWluZGV4IGQxYWIyMmYuLjE1ZmU0YjYgMTAwNjQ0Ci0tLS0gYS9nY2MvTWFrZWZpbGUuaW4KLSsrKyBiL2djYy9NYWtlZmlsZS5pbgotQEAgLTQ4Myw3ICs0ODMsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAotIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKLSAKLSB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAotLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACi0rdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCi0gVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKLSBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKLSBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKLWluZGV4IDUzOTliMmIuLjYwYTA0YmQgMTAwNzU1Ci0tLS0gYS9nY2MvY29uZmlndXJlCi0rKysgYi9nY2MvY29uZmlndXJlCi1AQCAtMTE2MzEsOCArMTE2MzEsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KLSAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCi0gICAgICAgIDs7Ci0gICAgIGRlZmF1bHRzLmggKQotLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgotLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKLSsgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKLSsgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKLSAgICAgICAgOzsKLSAgICAgKiApCi0gICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCi1pbmRleCBmODdjM2I2Li40NjBlMGQ5IDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYwotKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYwotQEAgLTE3NDAsOCArMTc0MCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbwotICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKLSAgICAgICAgOzsKLSAgICAgZGVmYXVsdHMuaCApCi0tICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCi0tICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgotKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgotKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgotICAgICAgICA7OwotICAgICAqICkKLSAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCi1kaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCi1pbmRleCBjNzE0NmVkLi5iMTUzZjQ1IDEwMDY0NAotLS0tIGEvZ2NjL21rY29uZmlnLnNoCi0rKysgYi9nY2MvbWtjb25maWcuc2gKLUBAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCi0gICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgotIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCi0gCWZvciBmaWxlIGluICIkQCI7IGRvCi0tCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgotKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KLSAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKLSAJICAgIGVsc2UKLSAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKLUBAIC0xMDYsNyArMTA2LDcgQEAgZXNhYwotIAotICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KLSBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCi0tICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAotKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAotIGZpCi0gCi0gIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNzkxNGQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotRnJvbSBhZjhhNTZlYTRlMTdiMjkwOWVmZjJjNTc3MDRhYjQzZWYyNGYyOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyNS8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCi0KLSogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCi11c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCi1kaXJlY3RvcnkuCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0tLS0KLSBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAgICAyICstCi0gbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgICAgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCi1pbmRleCA4Mzg1ZTk2Li5iOGY3YTkyIDEwMDc1NQotLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCi0rKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKLUBAIC0xMjcwNCw3ICsxMjcwNCw3IEBAIGVzYWMKLSAKLSAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQotICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQotLUZDPSIkR0ZPUlRSQU4iCi0rI0ZDPSIkR0ZPUlRSQU4iCi0gYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9Ci0gYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKLSBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWRpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKLWluZGV4IDdkOTdmZWQuLjNmOWY0ODQgMTAwNjQ0Ci0tLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKLSsrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYwotQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQotIAotICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5Ci0gI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCi0tRkM9IiRHRk9SVFJBTiIKLSsjRkM9IiRHRk9SVFJBTiIKLSBBQ19QUk9HX0ZDKGdmb3J0cmFuKQotIAotICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlZmFiOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1Gcm9tIDA4YzIzOTg0NDVlNmNhYzI4MjQ4OGY2NGFlNmJmMjljYmNkOGRiMjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDo1MCArMDQwMAotU3ViamVjdDogW1BBVENIIDI2LzM1XSBsaWJnY2Mtc2psai1jaGVjawotCi1hY19mbl9jX3RyeV9jb21waWxlIGRvZXNudCBzZWVtIHRvIGtlZXAgdGhlIGludGVybWVkaWF0ZSBmaWxlcwotd2hpY2ggYXJlIG5lZWRlZCBmb3Igc2psaiB0ZXN0IHRvIHBhc3Mgc2luY2UgaXQgZ3JlcHMgaW50byB0aGUKLWdlbmVyYXRlZCBmaWxlLiBTbyB3ZSBydW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgdXNpbmcgQUNfVFJZX0NPTU1BTkQKLXdoaWNoIHRoZW4gZ2VuZXJhdGVzIHRoZSBuZWVkZWQgLnMgZmlsZQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYmdjYy9jb25maWd1cmUgICAgfCAgIDEwICsrKysrKy0tLS0KLSBsaWJnY2MvY29uZmlndXJlLmFjIHwgICAxMCArKysrLS0tLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCi1pbmRleCAxNDI1ZGY2Li5kMThlM2NiIDEwMDY0NAotLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQotKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQotQEAgLTQyMDgsMTcgKzQyMDgsMTkgQEAgdm9pZCBmb28gKCkKLSB9Ci0gCi0gX0FDRU9GCi0tQ0ZMQUdTX2hvbGQ9JENGTEFHUwotLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKLSBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCi0taWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6Ci0raWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKLSsgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1Ci0rICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0rICBhY19zdGF0dXM9JD8KLSsgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgotICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcwotICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCi0gICBmaQotIGZpCi0tQ0ZMQUdTPSRDRkxBR1NfaG9sZAotIHJtIC1mIGNvbmZ0ZXN0KgotIAotIGZpCi1kaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKLWluZGV4IDhiN2FiYTUuLmM3Yzk2NDQgMTAwNjQ0Ci0tLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCi0rKysgYi9saWJnY2MvY29uZmlndXJlLmFjCi1AQCAtMjE2LDE2ICsyMTYsMTQgQEAgdm9pZCBmb28gKCkKLSAgIGJhcigpOwotIH0KLSBdKV0pCi0tQ0ZMQUdTX2hvbGQ9JENGTEFHUwotLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKLSBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCi0tQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAotLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgotK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCi0rICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCi0gICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KLS0gIGZpXSkKLS1DRkxBR1M9JENGTEFHU19ob2xkCi0rICBmaQotK2ZpCi0gcm0gLWYgY29uZnRlc3QqCi0gXSkKLSAKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWU5NTIxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLUZyb20gYTBmOWJkMDljODE2YWQyOWVjZjdjMjlkNmMyN2Y3ZGY5NzcxMDM2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIyOjAwICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjcvMzVdIGNwcDogaG9ub3Igc3lzcm9vdC4KLQotQ3VycmVudGx5LCBpZiB0aGUgZ2NjIHRvb2xjaGFpbiBpcyByZWxvY2F0ZWQgYW5kIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSwgdGhlbiB5b3UgdHJ5IGFuZCBjb21waWxlCi1wcmVwcm9jZXNzZWQgc291cmNlICguaSBvciAuaWkgZmlsZXMpLCB0aGUgY29tcGlsZXIgd2lsbCB0cnkgYW5kIGFjY2VzcyB0aGUgYnVpbHRpbiBzeXNyb290IGxvY2F0aW9uCi1yYXRoZXIgdGhhbiB0aGUgLS1zeXNyb290IG9wdGlvbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLiBJZiBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnkgaXMKLXBlcm1pc3Npb24gZGVuaWVkICh1bnJlYWRhYmxlKSwgZ2NjIHdpbGwgZXJyb3IuCi0KLVRoaXMgaGFwcGVucyB3aGVuIGNjYWNoZSBpcyBpbiB1c2UgZHVlIHRvIHRoZSBmYWN0IGl0IHVzZXMgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlcy4KLQotVGhlIGZpeCBiZWxvdyBhZGRzICVJIHRvIHRoZSBjcHAtb3V0cHV0IHNwZWMgbWFjcm8gc28gdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9ucyBmb3IgLWlwcmVmaXgsCi0taXN5c3RlbSwgLWlzeXNyb290IGhhcHBlbiBhbmQgdGhlIGNvcnJlY3Qgc3lzcm9vdCBpcyB1c2VkLgotCi1bWU9DVE8gIzIwNzRdCi0KLVJQIDIwMTIvMDQvMTMKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBnY2MvY3AvbGFuZy1zcGVjcy5oIHwgICAgMiArLQotIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY3AvbGFuZy1zcGVjcy5oIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAotaW5kZXggYTAwMWMzZS4uMWFhZTFlNCAxMDA2NDQKLS0tLSBhL2djYy9jcC9sYW5nLXNwZWNzLmgKLSsrKyBiL2djYy9jcC9sYW5nLXNwZWNzLmgKLUBAIC02Myw1ICs2Myw1IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCi0gICB7Ii5paSIsICJAYysrLWNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKLSAgIHsiQGMrKy1jcHAtb3V0cHV0IiwKLSAgICAiJXshTToleyFNTToleyFFOlwKLS0gICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAlMlwKLSsgICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAlMlwKLSAgICAgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKLWRpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKLWluZGV4IDUxMDYyYWEuLmNmNmI5OWUgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2NjLmMKLSsrKyBiL2djYy9nY2MuYwotQEAgLTEwNDIsNyArMTA0Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGlsZXIgZGVmYXVsdF9jb21waWxlcnNbXSA9Ci0gICAgICAgICAgICAgICAgICAgICAlV3tvKjotLW91dHB1dC1wY2g9JSp9fSVWfX19fX19IiwgMCwgMCwgMH0sCi0gICB7Ii5pIiwgIkBjcHAtb3V0cHV0IiwgMCwgMCwgMH0sCi0gICB7IkBjcHAtb3V0cHV0IiwKLS0gICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAotKyAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCi0gICB7Ii5zIiwgIkBhc3NlbWJsZXIiLCAwLCAwLCAwfSwKLSAgIHsiQGFzc2VtYmxlciIsCi0gICAgIiV7IU06JXshTU06JXshRToleyFTOmFzICUoYXNtX2RlYnVnKSAlKGFzbV9vcHRpb25zKSAlaSAlQSB9fX19IiwgMCwgMCwgMH0sCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Mzg3MjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1Gcm9tIDMwMWUxOGQ0NzExZGI1OTI1ZTc2N2ZhZDA4ZGZmYTljZmUwYTJmMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAotU3ViamVjdDogW1BBVENIIDI4LzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQotCi1NSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAotc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQotLS0tCi0gZ2NjL2NvbmZpZy5nY2MgfCAgICAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCi1pbmRleCAxYTBiZTUwLi45ODljMmZiIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy5nY2MKLSsrKyBiL2djYy9jb25maWcuZ2NjCi1AQCAtMTc5Nyw3ICsxNzk3LDcgQEAgbWlwcyotbXRpLWxpbnV4KikKLSBtaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKLSAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGxpbnV4LmggZ2xpYmMtc3RkaW50LmggJHt0bV9maWxlfSBtaXBzL2dudS11c2VyLmggbWlwcy9nbnUtdXNlcjY0LmggbWlwcy9saW51eDY0LmggbWlwcy9saW51eC1jb21tb24uaCIKLSAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3QtbGludXg2NCIKLS0JdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV9OMzIiCi0rCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfNjQiCi0gCWNhc2UgJHt0YXJnZXR9IGluCi0gCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCi0gCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OWQyOTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotRnJvbSAyOWQxMjM0NGZiNjgyYTA1M2RlNTNlYjA4Yjk1NzA0Y2YzYjY3YWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjQ6NTAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyOS8zNV0gRGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKLSByZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUgotCi1UaGlzIHBhdGNoIGRlZmluZXMgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgotcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIgd2hpY2ggY2FuIGJlIHNldCBpbiBnZW5lcmF0ZWQgaGVhZGVycwotVGhpcyBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgaGFyZGNvZGVkIG11bHRpbGliIGluIGdjYwotQ2hhbmdlIGlzIG9ubHkgZm9yIHRoZSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyBpbiBPRSBpbmNsdWRpbmcKLVNILCBzcGFyYywgYWxwaGEgZm9yIHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IChpZiBhbnkpCi0KLVJlbW92ZXMgdGhlIGRvX2hlYWRlcmZpeCB0YXNrIGluIG1ldGFkYXRhCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KLS0tLQotIGdjYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggfCAgICA0ICsrLS0KLSBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgICAgNCArKy0tCi0gZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAgIDIgKy0KLSBnY2MvY29uZmlnL2kzODYvbGludXguaCAgICAgIHwgICAgMiArLQotIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgICA2ICsrKy0tLQotIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAgICAyICstCi0gZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaCAgICB8ICAgIDggKysrKy0tLS0KLSBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgICAgOCArKysrLS0tLQotIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgICAyICstCi0gZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oICAgICB8ICAgIDIgKy0KLSBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgICAgNCArKy0tCi0gMTEgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAotQEAgLTIzLDggKzIzLDggQEAKLSAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKLSB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKLSAKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLSsjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKLSAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKLSAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQwotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtNjgsOCArNjgsOCBAQAotICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgYW5kIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSS4gICovCi0gCi0gI3VuZGVmICBHTElCQ19EWU5BTUlDX0xJTktFUgotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAiL2xpYi9sZC1saW51eC5zby4zIgotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMyIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFybWhmLnNvLjMiCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQKLSAKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAotQEAgLTU3LDcgKzU3LDcgQEAKLSAKLSAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0gCi0gI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAotICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvaTM4Ni9saW51eC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC0yMCw0ICsyMCw0IEBACi0gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSAKLSAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAotQEAgLTI3LDYgKzI3LDYgQEAKLSAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9ONjQgImVsZl94ODZfNjQiCi0gI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTlgzMiAiZWxmMzJfeDg2XzY0IgotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4yIgotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWJ4MzIvbGQtbGludXgteDMyLnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDg2LTY0LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDMyLnNvLjIiCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbWlwcy9saW51eC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC0xOCw4ICsxOCw4IEBACi0gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSAKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKLS0gICIle21uYW49MjAwODovbGliL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliL2xkLnNvLjF9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKLSAKLSAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSCi0gI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKLSsgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAotQEAgLTIzLDIwICsyMywyMCBAQAotICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKLSAKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCi0rICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCi0tICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCi0rICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKLSAKLSAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKLSAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKLS0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCi0rICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCi0gI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0Ci0gI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCi0tICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKLSsgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCi0gI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCi0rICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCi0gCi0gI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIgIi9zeXN0ZW0vYmluL2xpbmtlcjMyIgotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtMzY3LDE0ICszNjcsMTQgQEAKLSAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKLSAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKLSAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yfSIKLSAjZWxzZQotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMjs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xfSIKLSAjZW5kaWYKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgotLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKLSsjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKLSsjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKLSAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKLSAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQwotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NoL2xpbnV4LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zaC9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtNDMsNyArNDMsNyBAQAotIAotICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0gCi0gI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCi0gI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtODMsNyArODMsNyBAQAotICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCi0gICAgZG9uZS4gICovCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0gCi0gI3VuZGVmICBMSU5LX1NQRUMKLSAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCi0rKysgZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtOTIsOCArOTIsOCBAQAotICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCi0gICAgZG9uZS4gICovCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotIAotICNpZmRlZiBTUEFSQ19CSV9BUkNICi0gCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC03MywxMCArNzMsMTAgQEAKLSAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCi0gICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cwotICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgotICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCi0gI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgotICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZWFmZjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLUZyb20gYzE4MTZjMTYwMTU2Zjk5YzM0ZTZhMGEwMzExYmIwMjE5MzI2ODA0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI2OjM3ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMzAvMzVdIGdjYzogRml4IGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IuCi0KLVRoZXJlIHdvdWxkIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIHRoZQotYnVpbGQgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIDIwMCwgdGhpcyBpcyBjYXVzZWQgYnk6Ci0KLWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWAKLQotVGhlIFBMVUdJTl9IRUFERVJTIGlzIHRvbyBsb25nIGJlZm9yZSBzb3J0LCBzbyB0aGUgImVjaG8iIGNhbid0IGhhbmRsZQotaXQsIHVzZSB0aGUgJChzb3J0IGxpc3QpIG9mIEdOVSBtYWtlIHdoaWNoIGNhbiBoYW5kbGUgdGhlIHRvbyBsb25nIGxpc3QKLXdvdWxkIGZpeCB0aGUgcHJvYmxlbSwgdGhlIGhlYWRlciB3b3VsZCBiZSBzaG9ydCBlbm91Z2ggYWZ0ZXIgc29ydGVkLgotVGhlICJ0ciAnICcgJ1wwMTInIiB3YXMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIHNwYWNlIHRvICJcbiIsIHRoZQotJChzb3J0IGxpc3QpIGRvZXNuJ3QgbmVlZCB0aGlzLgotCi1TaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gZ2NjL01ha2VmaWxlLmluIHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCi1pbmRleCAyMzIwNDk3Li44NTYyYTYyIDEwMDY0NAotLS0tIGEvZ2NjL01ha2VmaWxlLmluCi0rKysgYi9nY2MvTWFrZWZpbGUuaW4KLUBAIC00NjI3LDcgKzQ2MjcsNyBAQCBpbnN0YWxsLXBsdWdpbjogaW5zdGFsbGRpcnMgbGFuZy5pbnN0YWxsLXBsdWdpbiBzLWhlYWRlci12YXJzIGluc3RhbGwtZ2VuZ3R5cGUKLSAjIFdlIGtlZXAgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGZpbGVzIGluIGNvbmZpZyBvciBjLWZhbWlseSBhbmQgLmRlZgotICMgZmlsZXMuIEFsbCBvdGhlciBmaWxlcyBhcmUgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGRpcmVjdG9yeS4KLSAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChwbHVnaW5faW5jbHVkZWRpcikKLS0JaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YDsgXAotKwloZWFkZXJzPSIkKHNvcnQgJChQTFVHSU5fSEVBREVSUykpIjsgXAotIAlzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgOyBcCi0gCWZvciBmaWxlIGluICQkaGVhZGVyczsgZG8gXAotIAkgIGlmIFsgLWYgJCRmaWxlIF0gOyB0aGVuIFwKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzFkNWUwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi1Gcm9tIGI4NTI2NWJjOTRlYzFiZWFmMWQzYjY5N2MwM2RiNjI5OTE1NTM0NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAotU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHNkdC4KLQotV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgotSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKLXNkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQotYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCi0KLVJQIDIwMTIvOC83Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLURpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCi0KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCi0tLS0KLSBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCi0gZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KLSBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KLSA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKLWluZGV4IDNjNTUwYTYuLjAxYzc2MjYgMTAwNzU1Ci0tLS0gYS9nY2MvY29uZmlndXJlCi0rKysgYi9nY2MvY29uZmlndXJlCi1AQCAtMjY4MTIsMTIgKzI2ODEyLDEyIEBAIGZpCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQotIGhhdmVfc3lzX3NkdF9oPW5vCi0taWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCi0tICBoYXZlX3N5c19zZHRfaD15ZXMKLS0KLS0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKLS0KLS1maQotKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KLSsjICBoYXZlX3N5c19zZHRfaD15ZXMKLSsjCi0rIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAotKyMKLSsjZmkKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKLSAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KLSAKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYwotaW5kZXggMzYwMWFiNi4uMDZlNTAxZiAxMDA2NDQKLS0tLSBhL2djYy9jb25maWd1cmUuYWMKLSsrKyBiL2djYy9jb25maWd1cmUuYWMKLUBAIC00Nzc5LDE1ICs0Nzc5LDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCi0gZmkKLSAKLSAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCi0tR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQotLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCi0taGF2ZV9zeXNfc2R0X2g9bm8KLS1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KLS0gIGhhdmVfc3lzX3NkdF9oPXllcwotLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAotLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCi0tZmkKLS1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKLSsjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQotKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQotKyNoYXZlX3N5c19zZHRfaD1ubwotKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KLSsjICBoYXZlX3N5c19zZHRfaD15ZXMKLSsjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCi0rIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCi0rI2ZpCi0rI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQotIAotICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgotICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotaW5kZXggNDk1M2M5Zi4uNTNhMTE0NSAxMDA3NTUKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKLUBAIC0yMDU3OCwxMSArMjA1NzgsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi0gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotIAotLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KLSsjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgotIAotLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAotKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKLSAKLS0gIGZpCi0rIyAgZmkKLSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQotICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQotIAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCi1pbmRleCA3M2Q0MzBhLi5mMjEzNWUyIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYwotQEAgLTIxMSw3ICsyMTEsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KLSBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KLSBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCi0gR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQotLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKLSsjR0xJQkNYWF9DSEVDS19TRFRfSAotIAotICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgotIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAotLS0gCi0xLjguMy4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiM2QxYjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1Gcm9tIDZjNzE1ZmNmYTI2MmFkYWRjYTgxYzY4YTFmM2Y2OWFhMzE4N2E1MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAotU3ViamVjdDogW1BBVENIIDMyLzM1XSBsaWJ0b29sCi0KLWxpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKLXdoZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KLQotVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCi1Bcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAotZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KLQotZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAotdG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCi0KLVJQIDIwMTIvOC8yNAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGx0bWFpbi5zaCB8ICAgIDQgKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAotaW5kZXggYTAzNDMzZi4uNDZmNDdjMiAxMDA2NDQKLS0tLSBhL2x0bWFpbi5zaAotKysrIGIvbHRtYWluLnNoCi1AQCAtNjM1OSw2ICs2MzU5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCi0gCi0gICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgotKyAgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KLSsJZnVuY19ub3JtYWxfYWJzcGF0aCAiJGluc3RhbGxfbGliZGlyIgotKwlpbnN0YWxsX2xpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKLSsgICAgICBmaQotIAotICAgICAgIG9sZGxpYnM9Ci0gICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjM2YzM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotRnJvbSA5N2U0NTkxYzIwMzEwNDI1ZTdhY2EwZTY3MTJhOGQ5NDgwZTc3NDRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzA6MzIgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAzMy8zNV0gZ2NjOiBhcm12NDogcGFzcyBmaXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJLgotCi1UaGUgTElOS19TUEVDIGZvciBsaW51eCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGxpbnV4LWVhYmkuaCB3aGljaAotbWVhbnMgdGhlIHZhbHVlIG9mIFRBUkdFVF9GSVhfVjRCWF9TUEVDIGdldHMgbG9zdCBhbmQgYXMgYSByZXN1bHQKLXRoZSBvcHRpb24gaXMgbm90IHBhc3NlZCB0byBsaW5rZXIgd2hlbiBjaG9zaW5nIG1hcmNoPWFybXY0Ci1UaGlzIHBhdGNoIHJlZGVmaW5lcyB0aGlzIGluIGxpbnV4LWVhYmkuaCBhbmQgcmVpbnNlcnRzIGl0Ci1mb3IgZWFiaSBkZWZhdWx0aW5nIHRvb2xjaGFpbnMuCi0KLVdlIG1pZ2h0IHdhbnQgdG8gc2VuZCBpdCB1cHN0cmVhbS4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggfCAgICA2ICsrKysrLQotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi1AQCAtNzcsMTAgKzc3LDE0IEBACi0gICAgICV7bWZsb2F0LWFiaT1zb2Z0KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIn0gXAotICAgICAleyFtZmxvYXQtYWJpPSo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUICJ9IgotIAotKy8qIEZvciBhcm12NCB3ZSBwYXNzIC0tZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSSAqLwotKyN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQwotKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCi0rCi0gLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KLSAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCi0gI3VuZGVmICBMSU5LX1NQRUMKLS0jZGVmaW5lIExJTktfU1BFQyBFQUJJX0xJTktfU1BFQwkJCQkJXAotKyNkZWZpbmUgTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDIEVBQklfTElOS19TUEVDCQkJXAotICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAotIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiOWY4OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi1Gcm9tIGZjNWU0YmVhZWE4NTZhMmI0ODZjNzcwYWQzYWRkYzBmNWJiMzEwMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAotU3ViamVjdDogW1BBVENIIDM0LzM1XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgotIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQotCi1Vc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KLXNvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCi1nY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0tLS0KLSBnY2MvY29uZmlndXJlICAgIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCi0gZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCi1pbmRleCA4YmMwYzk4Li4zY2QwODE3IDEwMDc1NQotLS0tIGEvZ2NjL2NvbmZpZ3VyZQotKysrIGIvZ2NjL2NvbmZpZ3VyZQotQEAgLTExNTE5LDEwICsxMTUxOSwyMCBAQCBkb25lCi0gdG1ha2VfZmlsZV89Ci0gZm9yIGYgaW4gJHt0bWFrZV9maWxlfQotIGRvCi0tCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgotLQl0aGVuCi0tCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0tCWZpCi0rICBjYXNlICRmIGluCi0rICAgICovdC1saW51eDY0ICkKLSsgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgotKyAgICAgICB0aGVuCi0rICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgotKyAgICAgICBmaQotKyAgICAgICA7OwotKyAgICAqICkKLSsgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCi0rICAgICAgIHRoZW4KLSsgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0rICAgICAgIGZpCi0rICAgICAgIDs7Ci0rICBlc2FjCi0gZG9uZQotIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgotIAotQEAgLTExNTMzLDYgKzExNTQzLDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgotIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCi0gZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCi0gICBjYXNlICRmIGluCi0rICAgICovbGludXg2NC5oICkKLSsgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCi0rICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgotKyAgICAgICA7OwotICAgICAuLyogKQotICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKLSAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IDVlNWU4NGYuLjQxNWE2ZGYgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtMTcwMCwxMCArMTcwMCwyMCBAQCBkb25lCi0gdG1ha2VfZmlsZV89Ci0gZm9yIGYgaW4gJHt0bWFrZV9maWxlfQotIGRvCi0tCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgotLQl0aGVuCi0tCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0tCWZpCi0rICBjYXNlICRmIGluCi0rICAgICovdC1saW51eDY0ICkKLSsgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgotKyAgICAgICB0aGVuCi0rICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgotKyAgICAgICBmaQotKyAgICAgICA7OwotKyAgICAqICkKLSsgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCi0rICAgICAgIHRoZW4KLSsgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0rICAgICAgIGZpCi0rICAgICAgIDs7Ci0rICBlc2FjCi0gZG9uZQotIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgotIAotQEAgLTE3MTQsNiArMTcyNCwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKLSB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgotIGZvciBmIGluICR0bV9maWxlOyBkbwotICAgY2FzZSAkZiBpbgotKyAgICAqL2xpbnV4NjQuaCApCi0rICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgotKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKLSsgICAgICAgOzsKLSAgICAgLi8qICkKLSAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCi0gICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUwYWE1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotUG9ydGlvbnMgb2YKLQotaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2djYy1wYXRjaGVzQGdjYy5nbnUub3JnL21zZzI2MDEzLmh0bWwKLQotYXJlIG5vdCB1cHN0cmVhbWVkIHlldC4gU28gbGV0cyBrZWVwIG1pc3NpbmcgcGllY2VzLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ4ODM5OTEzMiAtMDcwMAotKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTY6MDI6MzEuNzcyNDA2Njc5IC0wNzAwCi1AQCAtMTQ4LDcgKzE0OCw5IEBACi0gaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCi0gICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KLS0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCi0rICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgotKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgotKyAgICBmaQotICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKLSAgIGZpCi0gZmkKLUluZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNTo1NTo0OS40NzIzOTkxMzIgLTA3MDAKLSsrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE2OjAyOjMxLjc4MDQwNjY4MCAtMDcwMAotQEAgLTMzMjUsNyArMzMyNSw5IEBACi0gaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCi0gICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KLS0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCi0rICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgotKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgotKyAgICBmaQotICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKLSAgIGZpCi0gZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOTYxMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1Bdm9pZCB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLVNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KLQotZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAotaW5kZXggYTAzNDMzZi4uMTkwMmE5MCAxMDA2NDQKLS0tLSBhL2x0bWFpbi5zaAotKysrIGIvbHRtYWluLnNoCi1AQCAtNTYyOCw2ICs1NjI4LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKLSAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKLSAJICBlbHNlCi0rCSAgICAjIEluc3RlYWQgb2YgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoLAotKwkgICAgIyB1c2UgdGhlIHBhdGggdGhlIC5sYSBpcyBjb250YWluZWQgaW4uCi0rCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCi0gCSAgICBkaXI9IiRsaWJkaXIiCi0gCSAgICBhYnNkaXI9IiRsaWJkaXIiCi0gCSAgZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDMtY3BwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWY4NjQ2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1UaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4gYnVpbGRpbmcgCi1nY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQgaW4KLWJ1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKLQotY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCi1jb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKLWNvbmZpZ3VyZTozNjY2OiAkPyA9IDAKLWNvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCi1jb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKLWNvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKLWNvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyICBjb25mdGVzdC5jCi1jb25maWd1cmU6Mzg3NjogJD8gPSAwCi0KLU5vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZSB1c2luZyAKLXRoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyIGhlYWRlcnMgYXJlIAotdmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcgaW50byAKLWNvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZCBmYWlsdXJlcyAKLXJlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgotCi1UaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aGVuCi11c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZSB0aGUgdmVyc2lvbgotd2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8gYXZvaWQgdGhlIAotcHJvYmxlbS4KLQotUlAgMjIvMDgvMjAxMwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotSW5kZXg6IGdjYy00LjguMS9NYWtlZmlsZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjguMS5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDMtMzAgMTE6MjU6MDMuMDAwMDAwMDAwICswMDAwCi0rKysgZ2NjLTQuOC4xL01ha2VmaWxlLmluCTIwMTMtMDgtMTMgMTI6MDM6MTcuMTUxOTg4ODgyICswMDAwCi1AQCAtMTQ5LDYgKzE0OSw3IEBACi0gCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKLSAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAotIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCi0rCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAotIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCi0gCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCi0gCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzg3NjFkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi1nZW5ndHlwZSBpcyBnZW5lcmF0ZWQgZm9yIGJvdGggdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHRhcmdldC4gLURHRU5FUkFUT1JfRklMRQotd2FzIGFkZGVkIGluIHRoZSBwYXRjaCBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxMi0wNy9tc2cwMDI3My5odG1sCi1hbmQgd2FzIGFwcGxpZWQgdG8gYm90aCB2ZXJzaW9ucyBvZiBnZW5ndHlwZS4KLQotVW5mb3J0dW5hdGVseSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmbGFnIHRyaWdnZXJzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIChiY29uZmlnLmgpIAotdG8gYmUgaW5jbHVkZWQgZm9yIHRoZSB0YXJnZXQgYnVpbGQgb2YgZ2VuZ3R5cGUuIENvbXBpbGluZyBnZW5ndHlwZSB3aXRoIHRoZSB0YXJnZXQgCi1jb21waWxlciBhbmQgYmNvbmZpZy5oIGNhbiByZXN1bHQgaW4gZXJyb3JzIGlmIHRoZSBidWlsZCBhbmQgdGFyZ2V0IHN5c3RlbXMgYXJlIAotZGlzc2ltaWxhci4gQW4gZXhhbXBsZSBjYXNlIHRoaXMgZmFpbHMgaXMgY3Jvc3MgY29tcGlsaW5nIGdjYyBvbiBsaW51eCBmb3IgYSBkYXJ3aW4gCi10YXJnZXQgc3lzdGVtOgotCi1JbiBmaWxlIGluY2x1ZGVkIGZyb20gL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOjI1OjA6Ci18IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzogSW4gZnVuY3Rpb24gJ3ZvaWQgcGFyc2VfZXJyb3IoY29uc3QgY2hhciosIC4uLiknOgotfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL3N5c3RlbS5oOjkzOjUzOiBlcnJvcjogJ2ZwdXRjX3VubG9ja2VkJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKLXwgICMgIGRlZmluZSBmcHV0YyhDLCBTdHJlYW0pIGZwdXRjX3VubG9ja2VkIChDLCBTdHJlYW0pCi0KLXdoaWNoIG9jY3VycyBzaW5jZSBhdXRvLWJ1aWxkLmggYW5kIGF1dG8taG9zdC5oIGhhdmUgZGlmZmVybmV0IHZhbHVlcyBvZgotSEFWRV9GUFVUQ19VTkxPQ0tFRDoKLQotI2RlZmluZSBIQVZFX0ZQVVRDX1VOTE9DS0VEIDEKLS8qICN1bmRlZiBIQVZFX0ZQVVRTX1VOTE9DS0VEICovCi0KLVRoZSBvYnZpb3VzIGZpeCBpcyB0byBvbmx5IGluY2x1ZGUgdGhlIGZsYWcgb24gYnVpbGQvIHRhcmdldHMgd2hpY2ggdGhpcyBwYXRjaCBkb2VzLCBob3dldmVyIAotdGhpcyBhbHNvIGxlYWRzIHRvIGNvbXBpbGUgZXJyb3JzIGR1ZSB0byBjb25zdF90cmVlIGJlaW5nIHVuZGVmaW5lZCBidXQgdXNlZCBpbiBkb3VibGVfaW50LmgKLQotSSBhZGRlZCBhIEdFTkVSQVRPUl9GSUxFMiBmbGFnIHRvIHdvcmthcm91bmQgdGhvc2UgaW4gdGhlIAotdGFyZ2V0IGNhc2UgYW5kIGFsbG93IHRoZSBidWlsZCB0byBzdWNjZWVkLgotCi1Pbmx5IHRoZSBidWlsZC9nZW5ndHlwZXMgc2hvdWxkIGhhdmUgdGhlIC1ER0VORVJBVE9SX0ZJTEUgCi0KLVJQIDIyLzgvMjAxMwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotSW5kZXg6IGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC44LjEub3JpZy9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNi44NDQwMTQ0MjQgKzAwMDAKLSsrKyBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzcuNzg0MDE0NDAyICswMDAwCi1AQCAtMzkwMywyNyArMzkwMywyOSBAQAotIAotIGdlbmd0eXBlLWxleC5vIGJ1aWxkL2dlbmd0eXBlLWxleC5vIDogZ2VuZ3R5cGUtbGV4LmMgZ2VuZ3R5cGUuaCAkKFNZU1RFTV9IKQotIGdlbmd0eXBlLWxleC5vOiAkKENPTkZJR19IKSAkKEJDT05GSUdfSCkKLS1DRkxBR1MtZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQotK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCi0gYnVpbGQvZ2VuZ3R5cGUtbGV4Lm86ICQoQkNPTkZJR19IKQotIAotIGdlbmd0eXBlLXBhcnNlLm8gYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyA6IGdlbmd0eXBlLXBhcnNlLmMgZ2VuZ3R5cGUuaCBcCi0gICAkKFNZU1RFTV9IKQotIGdlbmd0eXBlLXBhcnNlLm86ICQoQ09ORklHX0gpCi0tQ0ZMQUdTLWdlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQotK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKLSBidWlsZC9nZW5ndHlwZS1wYXJzZS5vOiAkKEJDT05GSUdfSCkKLSAKLSBnZW5ndHlwZS1zdGF0ZS5vIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86IGdlbmd0eXBlLXN0YXRlLmMgJChTWVNURU1fSCkgXAotICAgZ2VuZ3R5cGUuaCBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSAkKE9CU1RBQ0tfSCkgXAotICAgJChYUkVHRVhfSCkKLSBnZW5ndHlwZS1zdGF0ZS5vOiAkKENPTkZJR19IKQotLUNGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKLStDRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgotK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKLSBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiAkKEJDT05GSUdfSCkKLSAKLSBnZW5ndHlwZS5vIGJ1aWxkL2dlbmd0eXBlLm8gOiBnZW5ndHlwZS5jICQoU1lTVEVNX0gpIGdlbmd0eXBlLmggCVwKLSAgIHJ0bC5kZWYgaW5zbi1ub3Rlcy5kZWYgZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgXAotICAgJChPQlNUQUNLX0gpICQoWFJFR0VYX0gpCi0gZ2VuZ3R5cGUubzogJChDT05GSUdfSCkKLS1DRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCi0rQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKLStDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCi0gYnVpbGQvZ2VuZ3R5cGUubzogJChCQ09ORklHX0gpCi0gCi0gYnVpbGQvZ2VubWRkZXBzLm86IGdlbm1kZGVwcy5jICQoQkNPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaAlcCi1AQCAtMzk4OCw3ICszOTkwLDcgQEAKLSAjIGFueSBzeXN0ZW0gaGVhZGVyIGlzIGluY2x1ZGVkLgotIGdlbmd0eXBlLWxleC5jIDogZ2VuZ3R5cGUtbGV4LmwKLSAJLSQoRkxFWCkgJChGTEVYRkxBR1MpIC1vJEAgJDwgJiYgeyBcCi0tCSAgZWNobyAnI2luY2x1ZGUgImJjb25maWcuaCInID4gJEAudG1wOyBcCi0rCSAgZWNobyAnJyA+ICRALnRtcDsgXAotIAkgIGNhdCAkQCA+PiAkQC50bXA7IFwKLSAJICBtdiAkQC50bXAgJEA7IFwKLSAJfQotSW5kZXg6IGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTAxLTMwIDExOjA0OjMwLjAwMDAwMDAwMCArMDAwMAotKysrIGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCTIwMTMtMDgtMTkgMTE6NDE6NTEuNTY0MDEyNzE5ICswMDAwCi1AQCAtNDQ4LDEwICs0NDgsMTIgQEAKLSAKLSAKLSAjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCi0rI2lmbmRlZiBHRU5FUkFUT1JfRklMRTIKLSAvKiBDb252ZXJzaW9uIHRvIGFuZCBmcm9tIEdNUCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9ucy4gICovCi0gCi0gdm9pZCBtcHpfc2V0X2RvdWJsZV9pbnQgKG1wel90LCBkb3VibGVfaW50LCBib29sKTsKLSBkb3VibGVfaW50IG1wel9nZXRfZG91YmxlX2ludCAoY29uc3RfdHJlZSwgbXB6X3QsIGJvb2wpOwotICNlbmRpZgotKyNlbmRpZgotIAotICNlbmRpZiAvKiBET1VCTEVfSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWE0ZjQyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1nY2MgNC44IHdvbid0IGJ1aWxkIHdpdGggLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgc2luY2UgdGhlICouUHBvIGZpbGVzCi1kb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgotCi1UaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotCi0oUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQotaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKLQotUlAgCi0yMDEyLzA5LzIyCi0KLUluZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDEtMTQgMTg6MTY6MjMuMDAwMDAwMDAwICswMDAwCi0rKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTA5LTIyIDEwOjM4OjE4LjkwNDA2NDc1MCArMDAwMAotQEAgLTEwMCw3ICsxMDAsOCBAQAotIElGVU5DX0RFRgk9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCi0gSUZVTkNfT1BUCT0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCi0gCi0tTV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCi0rQEFNREVQX1RSVUVATV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCi0rQEFNREVQX0ZBTFNFQE1fREVQUwkJPSAKLSBNX1NJWkUJCT0gLUROPSQoUEFUX04pCi0gTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCi0gTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYwotSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wNS0zMSAwOTowOToyNi4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDktMjIgMTA6NDA6NDIuNTIwMDU5OTE3ICswMDAwCi1AQCAtMjk4LDcgKzI5OCw4IEBACi0gUEFUX1MgPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCi0gSUZVTkNfREVGID0gLURJRlVOQ19BTFQ9JChQQVRfUykKLSBJRlVOQ19PUFQgPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKLS1NX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbwotK0BBTURFUF9UUlVFQE1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCi0rQEFNREVQX0ZBTFNFQE1fREVQUyA9IAotIE1fU0laRSA9IC1ETj0kKFBBVF9OKQotIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCi0gTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZkNTVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotV2hlbiBjb21waWxpbmcgYSBwcm9qZWN0IHVzaW5nIC1mcmVwbywgLnJwbyBmaWxlcyBhcmUgd3JpdHRlbiBhbG9uZ3NpZGUKLXRoZSAubyBmaWxlLCB0aGUgc3ltYm9scyBlaXRoZXIgaGF2ZSBPIG9yIEMgYWdhaW5zdCB0aGVtLiBEdXJpbmcgZmluYWwgbGlua2luZywKLXRoZSBvYmplY3RzIGNhbiBiZSByZWNvbXBpbGVkIHdpdGggc29tZSBvZiB0aGUgZW50cmllcyB0d2Vha2VkL2Nob3NlbiBieSB0aGUgCi10bGluay5jIGNvZGUgKHZpc2libGUgd2l0aCBUTElOS19WRVJCT1NFPTMpLCBpdCBkb2VzIHRoaXMgYnkgY2hhbmdpbmcgTyAtPiBDCi1pbiB0aGUgLnJwbyBmaWxlcy4KLQotTXkgdGVzdHMgc2hvd2VkIHRoYXQgaW5pdF9yZXBvIChjcC9yZXBvLmMpIHdhcyBjb3JyZWN0bHkgY2FsbGluZyAKLUlERU5USUZJRVJfUkVQT19DSE9TRU4gYWdhaW5zdCB0aGUgcmlnaHQgaWRlbnRpZmVycyBhbmQgc2V0dGluZyB0aGUKLWNob3NlbiBiaXQuCi0KLUJ5IHRoZSB0aW1lIGZpbmlzaF9yZXBvKCkgb3IgZW1pdF9yZXBvX3AoKSB3ZXJlIGNhbGxlZCwgdGhlIHBvaW50ZXIgcmV0dXJuZWQKLWJ5IGdldF9pZGVudGlmaWVyKCkgZm9yIHRoZSBzeW1ib2wgbWFya2VkIGR1cmluZyBpbml0X3JlcG8gaGFkIGNoYW5nZWQgYW5kCi10aGUgY2hvc2VuIGJpdCB3YXMgbm8gbG9uZ2VyIHNldC4gVGhpcyBsZWFkIHRvIGxpbmtpbmcgYnVncyBsaWtlOgotCi1jb2xsZWN0OiByZWxpbmtpbmcKLWNvbGxlY3QyOiBlcnJvcjogJ19aTks2c3Vkb2t1NUNsZWFySU5TXzhTZXF1ZW5jZUVFY2xFUlMxXycgd2FzIGFzc2lnbmVkIHRvICdib2FyZC5ycG8nLCBidXQgd2FzIG5vdCBkZWZpbmVkIGR1cmluZyByZWNvbXBpbGF0aW9uLCBvciB2aWNlIHZlcnNhCi0KLVRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBnZXR0aW5nIGNhbGxlZCBiZWZvcmUKLWZpbmlzaF9yZXBvKCkgaXMgY2FsbGVkIGFuZCBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyBpcyBzZXQgdG8gZmFsc2UgCi1zbyB0aGUgaWRlbnRpZmllcnMgYXJlIG5vdCBwcmVzZXJ2ZWQuIFRoZXkgYXJlIHJlY3JlYXRlZCBidXQgdGhlIAotY2hvc2VuIGJpdHMgZ2V0IHdpcGVkIG91dCB3aGljaCBpcyB3aHkgdGhlIHBvaW50ZXIgY2hhbmdlcyBhbmQgdGhlIAotY2hvc2VuIGJpdCBpcyBub3Qgc2V0LgotCi1UaGUgZml4IGlzIHRvIGNoYW5nZSBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyAqYWZ0ZXIqIHRoZSBmaW5pc2hfcmVwbyAKLWNhbGxzIGFyZSBtYWRlLgotCi1SZXByb2R1Y3Rpb24gaXMgdHJpY2t5IHNpbmNlIHlvdSBuZWVkIHRvIHRyaWdnZXIgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGF0Ci1qdXN0IHRoZSByaWdodCBtb21lbnQuCi0KLVJQIDIwMTMvMTAvOQotCi1bWU9DVE8gIzUxMzNdCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogZ2NjLTQuOC4xL2djYy90b3BsZXYuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjguMS5vcmlnL2djYy90b3BsZXYuYwkyMDEzLTAzLTI4IDA4OjI5OjUxLjAwMDAwMDAwMCArMDAwMAotKysrIGdjYy00LjguMS9nY2MvdG9wbGV2LmMJMjAxMy0xMC0wOSAyMDoyNzoxNy4wODkyMjgwMjMgKzAwMDAKLUBAIC01NTEsMTEgKzU1MSwxMSBAQAotICAgaWYgKGZsYWdfc3ludGF4X29ubHkgfHwgZmxhZ193cGEpCi0gICAgIHJldHVybjsKLSAKLS0gIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7Ci0tCi0gICAvKiBUaGlzIG11c3QgYWxzbyBjYWxsIGZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQuICAqLwotICAgbGFuZ19ob29rcy5kZWNscy5maW5hbF93cml0ZV9nbG9iYWxzICgpOwotIAotKyAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKLSsKLSAgIGlmIChzZWVuX2Vycm9yICgpKQotICAgICByZXR1cm47Ci0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOThmOGZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotRnJvbSA5ZTBlMTllYWMyNTYyZjczODU4NjAyZmUyNmUyMDQ0ZWI4YjIwYzQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgotRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAotCi1XaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsIAotbm90IGJlIGFibGUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgU1BFIHRhcmdldHMgKGU1MDB2MS92MikuCi1HQ0MgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXhzcGUgd2lsbCBub3QgYmUgYWJsZSB0bwotZ2VuZXJhdGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgKGZvciBlNjUwMCkuCi1UaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmVkIGZpbGUgc3VjaCB0aGF0IFNQRSBvciBBbHRpVmVjIGNvZGUKLWNhbiBiZSBnZW5lcmF0ZWQgd2hlbiBnY2MgaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXguCi1UaGUgQUJJIGFuZCBzcGVjaWZmaWMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWxlY3RlZCB0aHJvdWdoIHRoZQotIi1tYWJpPXNwZSBvciAtbWFiaT1hbHRpdmVjIiBhbmQgdGhlICItbXNwZSBvciAtbWFsdGl2ZWMiIHBhcmFtZXRlcnMuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgotLS0tCi0gZ2NjL2NvbmZpZy5nY2MgfCAgICA3ICsrKysrKy0KLSAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCi1pbmRleCBjYjdhOTRlLi5kMzkyYzJiIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy5nY2MKLSsrKyBiL2djYy9jb25maWcuZ2NjCi1AQCAtMjA2OCw3ICsyMDY4LDEyIEBAIHBvd2VycGMtKi1ydGVtcyopCi0gCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgdC1ydGVtcyByczYwMDAvdC1wcGNjb21tIgotIAk7OwotIHBvd2VycGMqLSotbGludXgqKQotLQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCi0rCWNhc2UgJHt0YXJnZXR9IGluCi0rCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQotKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIiA7OwotKwkgICAgKikKLSsJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIgOzsKLSsJZXNhYwotIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCi0gCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjb3MgJHt0bWFrZV9maWxlfSByczYwMDAvdC1wcGNjb21tIgotIAljYXNlICR7dGFyZ2V0fSBpbgotLS0gCi0xLjcuOS41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWFkNmY2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotRnJvbSBjYjliMWMwNDFiNjM0YTRjMTI4ODk2ZTNkM2VlZDQwODI2MDhjNzk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFNhdCwgMyBNYXkgMjAxNCAxOToyNToxNyAtMDcwMAotU3ViamVjdDogW1BBVENIXSBSZXZlcnQgIjIwMTMtMDUtMjEgIENocmlzdGlhbiBCcnVlbCAKLSA8Y2hyaXN0aWFuLmJydWVsQHN0LmNvbT4iCi0KLVRoaXMgcmV2ZXJ0cyBjb21taXQgMzk4MzAzNmE4YjZiMjcxMGM1Nzc3NzE5NGYyMTUwNzgxOWE3MzU1My4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotQ29uZmxpY3RzOgotCWdjYy9DaGFuZ2VMb2cKLS0tLQotIGdjYy9DaGFuZ2VMb2cgICB8IDIxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQotIGdjYy9kd2FyZjJvdXQuYyB8ICAzMyArKysrKy0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYwotaW5kZXggMTI3MjMyNi4uNmFjMmIyOCAxMDA2NDQKLS0tLSBhL2djYy9kd2FyZjJvdXQuYwotKysrIGIvZ2NjL2R3YXJmMm91dC5jCi1AQCAtMTA4NzAsMjcgKzEwODcwLDI1IEBAIHN0YXRpYyBkd19sb2NfZGVzY3JfcmVmCi0gbXVsdGlwbGVfcmVnX2xvY19kZXNjcmlwdG9yIChydHggcnRsLCBydHggcmVncywKLSAJCQkgICAgIGVudW0gdmFyX2luaXRfc3RhdHVzIGluaXRpYWxpemVkKQotIHsKLS0gIGludCBzaXplLCBpOwotKyAgaW50IG5yZWdzLCBzaXplLCBpOwotKyAgdW5zaWduZWQgcmVnOwotICAgZHdfbG9jX2Rlc2NyX3JlZiBsb2NfcmVzdWx0ID0gTlVMTDsKLSAKLS0gIC8qIFNpbXBsZSwgY29udGlndW91cyByZWdpc3RlcnMuICAqLwotLSAgaWYgKHJlZ3MgPT0gTlVMTF9SVFgpCi0tICAgIHsKLS0gICAgICB1bnNpZ25lZCByZWcgPSBSRUdOTyAocnRsKTsKLS0gICAgICBpbnQgbnJlZ3M7Ci0tCi0rICByZWcgPSBSRUdOTyAocnRsKTsKLSAjaWZkZWYgTEVBRl9SRUdfUkVNQVAKLS0gICAgICBpZiAoY3J0bC0+dXNlc19vbmx5X2xlYWZfcmVncykKLS0JewotLQkgIGludCBsZWFmX3JlZyA9IExFQUZfUkVHX1JFTUFQIChyZWcpOwotLQkgIGlmIChsZWFmX3JlZyAhPSAtMSkKLS0JICAgIHJlZyA9ICh1bnNpZ25lZCkgbGVhZl9yZWc7Ci0tCX0KLSsgIGlmIChjcnRsLT51c2VzX29ubHlfbGVhZl9yZWdzKQotKyAgICB7Ci0rICAgICAgaW50IGxlYWZfcmVnID0gTEVBRl9SRUdfUkVNQVAgKHJlZyk7Ci0rICAgICAgaWYgKGxlYWZfcmVnICE9IC0xKQotKwlyZWcgPSAodW5zaWduZWQpIGxlYWZfcmVnOwotKyAgICB9Ci0gI2VuZGlmCi0rICBnY2NfYXNzZXJ0ICgodW5zaWduZWQpIERCWF9SRUdJU1RFUl9OVU1CRVIgKHJlZykgPT0gZGJ4X3JlZ19udW1iZXIgKHJ0bCkpOwotKyAgbnJlZ3MgPSBoYXJkX3JlZ25vX25yZWdzW1JFR05PIChydGwpXVtHRVRfTU9ERSAocnRsKV07Ci0gCi0tICAgICAgZ2NjX2Fzc2VydCAoKHVuc2lnbmVkKSBEQlhfUkVHSVNURVJfTlVNQkVSIChyZWcpID09IGRieF9yZWdfbnVtYmVyIChydGwpKTsKLS0gICAgICBucmVncyA9IGhhcmRfcmVnbm9fbnJlZ3NbUkVHTk8gKHJ0bCldW0dFVF9NT0RFIChydGwpXTsKLS0KLSsgIC8qIFNpbXBsZSwgY29udGlndW91cyByZWdpc3RlcnMuICAqLwotKyAgaWYgKHJlZ3MgPT0gTlVMTF9SVFgpCi0rICAgIHsKLSAgICAgICBzaXplID0gR0VUX01PREVfU0laRSAoR0VUX01PREUgKHJ0bCkpIC8gbnJlZ3M7Ci0gCi0gICAgICAgbG9jX3Jlc3VsdCA9IE5VTEw7Ci1AQCAtMTA5MTgsOSArMTA5MTYsMTAgQEAgbXVsdGlwbGVfcmVnX2xvY19kZXNjcmlwdG9yIChydHggcnRsLCBydHggcmVncywKLSAgICAgewotICAgICAgIGR3X2xvY19kZXNjcl9yZWYgdDsKLSAKLS0gICAgICB0ID0gb25lX3JlZ19sb2NfZGVzY3JpcHRvciAoZGJ4X3JlZ19udW1iZXIgKFhWRUNFWFAgKHJlZ3MsIDAsIGkpKSwKLSsgICAgICB0ID0gb25lX3JlZ19sb2NfZGVzY3JpcHRvciAoUkVHTk8gKFhWRUNFWFAgKHJlZ3MsIDAsIGkpKSwKLSAJCQkJICBWQVJfSU5JVF9TVEFUVVNfSU5JVElBTElaRUQpOwotICAgICAgIGFkZF9sb2NfZGVzY3IgKCZsb2NfcmVzdWx0LCB0KTsKLSsgICAgICBzaXplID0gR0VUX01PREVfU0laRSAoR0VUX01PREUgKFhWRUNFWFAgKHJlZ3MsIDAsIDApKSk7Ci0gICAgICAgYWRkX2xvY19kZXNjcl9vcF9waWVjZSAoJmxvY19yZXN1bHQsIHNpemUpOwotICAgICB9Ci0gCi0tLSAKLTEuOS4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MS1lYWJpc3BlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZTM4OTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotVGFrZW4gZnJvbSBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wNC9tc2cwMjA2NC5odG1sCi0KLTIwMTQtMDQtMzAgIENlc2FyIFBoaWxpcHBpZGlzICA8Y2VzYXJAY29kZXNvdXJjZXJ5LmNvbT4KLQotCWdjYy8KLQkqIGR3YXJmMmNmaS5jIChkd2ZfcmVnbm8pOiBEb24ndCBhc3NlcnQgcmVnIGlzIGEgcHNldWRvCi0JcmVnaXN0ZXIuCi0JCi0KLWRpZmYgLS1naXQgYS9nY2MvZHdhcmYyY2ZpLmMgYi9nY2MvZHdhcmYyY2ZpLmMKLWluZGV4IDQxODA4OTAuLjQwZWYwZTIgMTAwNjQ0Ci0tLS0gYS9nY2MvZHdhcmYyY2ZpLmMKLSsrKyBiL2djYy9kd2FyZjJjZmkuYwotQEAgLTkwNiw3ICs5MDYsNiBAQCBub3RpY2VfZWhfdGhyb3cgKHJ0eCBpbnNuKQotIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLSBkd2ZfcmVnbm8gKGNvbnN0X3J0eCByZWcpCi0gewotLSAgZ2NjX2Fzc2VydCAoUkVHTk8gKHJlZykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpOwotICAgcmV0dXJuIERXQVJGX0ZSQU1FX1JFR05VTSAoUkVHTk8gKHJlZykpOwotIH0KLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OTU4YjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotRnJvbSBkNjI2Mjk3ZTg3ZTE5MjUxYTI4NGVhMWU5MzYwZTgzMWI0ODk5OWNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogbXBmIDxtcGZAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgotRGF0ZTogVGh1LCA0IFNlcCAyMDE0IDA4OjMyOjA1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIEFkZCB0YXJnZXQgaG9vayB0byBvdmVycmlkZSBEV0FSRjIgZnJhbWUgcmVnaXN0ZXIgc2l6ZQotCi1nY2MvCi0KLQkqIHRhcmdldC5kZWYgKFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSk6IE5ldyB0YXJnZXQgaG9vay4KLQkqIHRhcmdob29rcy5jIChkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlKTogTmV3IGZ1bmN0aW9uLgotCSogdGFyZ2hvb2tzLmggKGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpOiBOZXcgcHJvdG90eXBlLgotCSogZG9jL3RtLnRleGkuaW4gKFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSk6IERvY3VtZW50LgotCSogZG9jL3RtLnRleGk6IFJlZ2VuZXJhdGUuCi0JKiBkd2FyZjJjZmkuYyAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBBYnN0cmFjdCBtb2RlCi0Jc2VsZWN0aW9uIGxvZ2ljIHRvIGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUuCi0KLQotCi1naXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTQ4OTggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQotCi0tLS0KLSBnY2MvQ2hhbmdlTG9nICAgICAgfCAxMCArKysrKysrKysrCi0gZ2NjL2RvYy90bS50ZXhpICAgIHwgIDcgKysrKysrKwotIGdjYy9kb2MvdG0udGV4aS5pbiB8ICAyICsrCi0gZ2NjL2R3YXJmMmNmaS5jICAgIHwgIDQgKy0tLQotIGdjYy90YXJnZXQuZGVmICAgICB8IDExICsrKysrKysrKysrCi0gZ2NjL3Rhcmdob29rcy5jICAgIHwgMTMgKysrKysrKysrKysrKwotIGdjYy90YXJnaG9va3MuaCAgICB8ICAxICsKLSA3IGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RvYy90bS50ZXhpCi0rKysgZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aQotQEAgLTkwMTcsNiArOTAxNywxMyBAQCByZWdpc3RlciBpbiBEd2FyZi4gIE90aGVyd2lzZSwgdGhpcyBob29rCi0gSWYgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiBAY29kZXtOVUxMX1JUWH0uCi0gQGVuZCBkZWZ0eXBlZm4KLSAKLStAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30ge2VudW0gbWFjaGluZV9tb2RlfSBUQVJHRVRfRFdBUkZfRlJBTUVfUkVHX01PREUgKGludCBAdmFye3JlZ25vfSkKLStHaXZlbiBhIHJlZ2lzdGVyLCB0aGlzIGhvb2sgc2hvdWxkIHJldHVybiB0aGUgbW9kZSB3aGljaCB0aGUKLStjb3JyZXNwb25kaW5nIER3YXJmIGZyYW1lIHJlZ2lzdGVyIHNob3VsZCBoYXZlLiAgVGhpcyBpcyBub3JtYWxseQotK3VzZWQgdG8gcmV0dXJuIGEgc21hbGxlciBtb2RlIHRoYW4gdGhlIHJhdyBtb2RlIHRvIHByZXZlbnQgY2FsbAotK2Nsb2JiZXJlZCBwYXJ0cyBvZiBhIHJlZ2lzdGVyIGFsdGVyaW5nIHRoZSBmcmFtZSByZWdpc3RlciBzaXplCi0rQGVuZCBkZWZ0eXBlZm4KLSsKLSBAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gdm9pZCBUQVJHRVRfSU5JVF9EV0FSRl9SRUdfU0laRVNfRVhUUkEgKHRyZWUgQHZhcnthZGRyZXNzfSkKLSBJZiBzb21lIHJlZ2lzdGVycyBhcmUgcmVwcmVzZW50ZWQgaW4gRHdhcmYtMiB1bndpbmQgaW5mb3JtYXRpb24gaW4KLSBtdWx0aXBsZSBwaWVjZXMsIGRlZmluZSB0aGlzIGhvb2sgdG8gZmlsbCBpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLUluZGV4OiBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RvYy90bS50ZXhpLmluCi0rKysgZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aS5pbgotQEAgLTY3NDUsNiArNjc0NSw4IEBAIHRoZSB0YXJnZXQgc3VwcG9ydHMgRFdBUkYgMiBmcmFtZSB1bndpbmQKLSAKLSBAaG9vayBUQVJHRVRfRFdBUkZfUkVHSVNURVJfU1BBTgotIAotK0Bob29rIFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERQotKwotIEBob29rIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQQotIAotIEBob29rIFRBUkdFVF9BU01fVFRZUEUKLUluZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCi0rKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYwotQEAgLTI3MSwxMSArMjcxLDkgQEAgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZQotICAgICAgIGlmIChybnVtIDwgRFdBUkZfRlJBTUVfUkVHSVNURVJTKQotIAl7Ci0gCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAobW9kZSk7Ci0tCSAgZW51bSBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlID0gcmVnX3Jhd19tb2RlW2ldOwotIAkgIEhPU1RfV0lERV9JTlQgc2l6ZTsKLSsJICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKLSAKLS0JICBpZiAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEIChpLCBzYXZlX21vZGUpKQotLQkgICAgc2F2ZV9tb2RlID0gY2hvb3NlX2hhcmRfcmVnX21vZGUgKGksIDEsIHRydWUpOwotIAkgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCi0gCSAgICB7Ci0gCSAgICAgIGlmIChzYXZlX21vZGUgPT0gVk9JRG1vZGUpCi1JbmRleDogZ2NjLTQuOS4yL2djYy90YXJnZXQuZGVmCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3RhcmdldC5kZWYKLSsrKyBnY2MtNC45LjIvZ2NjL3RhcmdldC5kZWYKLUBAIC0zMjE4LDYgKzMyMTgsMTcgQEAgSWYgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybgotICBydHgsIChydHggcmVnKSwKLSAgaG9va19ydHhfcnR4X251bGwpCi0gCi0rLyogR2l2ZW4gYSByZWdpc3RlciByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgRFdBUkYgZnJhbWUKLSsgICByZWdpc3Rlci4gICovCi0rREVGSE9PSwotKyhkd2FyZl9mcmFtZV9yZWdfbW9kZSwKLSsgIkdpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHdoaWNoIHRoZVxuXAotK2NvcnJlc3BvbmRpbmcgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgc2hvdWxkIGhhdmUuICBUaGlzIGlzIG5vcm1hbGx5XG5cCi0rdXNlZCB0byByZXR1cm4gYSBzbWFsbGVyIG1vZGUgdGhhbiB0aGUgcmF3IG1vZGUgdG8gcHJldmVudCBjYWxsXG5cCi0rY2xvYmJlcmVkIHBhcnRzIG9mIGEgcmVnaXN0ZXIgYWx0ZXJpbmcgdGhlIGZyYW1lIHJlZ2lzdGVyIHNpemUiLAotKyBlbnVtIG1hY2hpbmVfbW9kZSwgKGludCByZWdubyksCi0rIGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpCi0rCi0gLyogSWYgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgbmVlZHMgdG8gZmlsbCBpbiB0YWJsZQotICAgIGVudHJpZXMgbm90IGNvcnJlc3BvbmRpbmcgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzIGJlbG93Ci0gICAgRklSU1RfUFNFVURPX1JFR0lTVEVSLCB0aGlzIGhvb2sgc2hvdWxkIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKLUluZGV4OiBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3Rhcmdob29rcy5jCi0rKysgZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuYwotQEAgLTE0MzgsNiArMTQzOCwxOSBAQCBkZWZhdWx0X2RlYnVnX3Vud2luZF9pbmZvICh2b2lkKQotICAgcmV0dXJuIFVJX05PTkU7Ci0gfQotIAotKy8qIERldGVybWluZSB0aGUgY29ycmVjdCBtb2RlIGZvciBhIER3YXJmIGZyYW1lIHJlZ2lzdGVyIHRoYXQgcmVwcmVzZW50cwotKyAgIHJlZ2lzdGVyIFJFR05PLiAgKi8KLSsKLStlbnVtIG1hY2hpbmVfbW9kZQotK2RlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUgKGludCByZWdubykKLSt7Ci0rICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSByZWdfcmF3X21vZGVbcmVnbm9dOwotKwotKyAgaWYgKEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRCAocmVnbm8sIHNhdmVfbW9kZSkpCi0rICAgIHNhdmVfbW9kZSA9IGNob29zZV9oYXJkX3JlZ19tb2RlIChyZWdubywgMSwgdHJ1ZSk7Ci0rICByZXR1cm4gc2F2ZV9tb2RlOwotK30KLSsKLSAvKiBUbyBiZSB1c2VkIGJ5IHRhcmdldHMgd2hlcmUgcmVnX3Jhd19tb2RlIGRvZXNuJ3QgcmV0dXJuIHRoZSByaWdodAotICAgIG1vZGUgZm9yIHJlZ2lzdGVycyB1c2VkIGluIGFwcGx5X2J1aWx0aW5fcmV0dXJuIGFuZCBhcHBseV9idWlsdGluX2FyZy4gICovCi0gCi1JbmRleDogZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy90YXJnaG9va3MuaAotKysrIGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmgKLUBAIC0xOTQsNiArMTk0LDcgQEAgZXh0ZXJuIGludCBkZWZhdWx0X2xhYmVsX2FsaWduX21heF9za2lwCi0gZXh0ZXJuIGludCBkZWZhdWx0X2p1bXBfYWxpZ25fbWF4X3NraXAgKHJ0eCk7Ci0gZXh0ZXJuIHNlY3Rpb24gKiBkZWZhdWx0X2Z1bmN0aW9uX3NlY3Rpb24odHJlZSBkZWNsLCBlbnVtIG5vZGVfZnJlcXVlbmN5IGZyZXEsCi0gCQkJCQkgIGJvb2wgc3RhcnR1cCwgYm9vbCBleGl0KTsKLStleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaW50KTsKLSBleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZGVmYXVsdF9nZXRfcmVnX3Jhd19tb2RlIChpbnQpOwotIAotIGV4dGVybiB2b2lkICpkZWZhdWx0X2dldF9wY2hfdmFsaWRpdHkgKHNpemVfdCAqKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYjQ0NWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1Gcm9tIGEyMmEyMjJjOGY5Mjk5ZjZjMDdhMDI3NDM4OGFkZTdkNGFiOGMyOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KLURhdGU6IEZyaSwgMjAgSnVuIDIwMTQgMTY6NDE6MDggLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gZ2NjOiBmaXggc2VnZmF1bHQgZnJvbSBjYWxsaW5nIGZyZWUgb24gbm9uLW1hbGxvYydkIGFyZWEKLQotV2Ugc2VlIHRoZSBmb2xsb3dpbmcgb24gYSAzMmJpdCBnY2MgaW5zdGFsbGVkIG9uIDY0IGJpdCBob3N0OgotCi0gIFJlYWRpbmcgc3ltYm9scyBmcm9tIC4vaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MuLi5kb25lLgotICAoZ2RiKSBydW4KLSAgU3RhcnRpbmcgcHJvZ3JhbTogeDg2LXBva3ltbGxpYjMyLWxpbnV4L2xpYjMyLWdjYy80LjkuMC1yMC9pbWFnZS91c3IvYmluL2k1ODYtcG9reW1sbGliMzItbGludXgtZ2NjCi0KLSAgUHJvZ3JhbSByZWNlaXZlZCBzaWduYWwgU0lHU0VHViwgU2VnbWVudGF0aW9uIGZhdWx0LgotICAweGY3ZTk1N2UwIGluIGZyZWUgKCkgZnJvbSAvbGliL2kzODYtbGludXgtZ251L2xpYmMuc28uNgotICAoZ2RiKSBidAotICAjMCAgMHhmN2U5NTdlMCBpbiBmcmVlICgpIGZyb20gL2xpYi9pMzg2LWxpbnV4LWdudS9saWJjLnNvLjYKLSAgIzEgIDB4MDgwNGI3M2MgaW4gc2V0X211bHRpbGliX2RpciAoKSBhdCBnY2MtNC45LjAvZ2NjL2djYy5jOjc4MjcKLSAgIzIgIG1haW4gKGFyZ2M9MSwgYXJndj0weGZmZmZkNTA0KSBhdCBnY2MtNC45LjAvZ2NjL2djYy5jOjY2ODgKLSAgKGdkYikKLQotVGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2Ugd2UgY29uZGl0aW9uYWxseSBhc3NpZ24gdGhlIHBvaW50ZXIgd2UKLWV2ZW50dWFsbHkgZnJlZSwgYW5kIHRoZSBjb25kaXRpb25hbCBtYXkgYXNzaWduIHRoZSBwb2ludGVyIHRvIHRoZQotbm9uLW1hbGxvYydkIGludGVybmFsIHN0cmluZyAiLiIgd2hpY2ggZmFpbHMgd2hlbiB3ZSBmcmVlIGl0IGhlcmU6Ci0KLSAgIGlmIChtdWx0aWxpYl9kaXIgPT0gTlVMTCAmJiBtdWx0aWxpYl9vc19kaXIgIT0gTlVMTAotICAgICAgICYmIHN0cmNtcCAobXVsdGlsaWJfb3NfZGlyLCAiLiIpID09IDApCi0gICAgIHsKLSAgICAgICBmcmVlIChDT05TVF9DQVNUIChjaGFyICosIG11bHRpbGliX29zX2RpcikpOwotICAgICAgIC4uLgotCi1BcyBzdWdnZXN0ZWQgYnkgSmFrdWIsIGVuc3VyZSB0aGUgIi4iIGNhc2UgaXMgYWxzbyBtYWxsb2MnZCB2aWEKLXhzdHJkdXAoKSBhbmQgaGVuY2UgdGhlIHBvaW50ZXIgZm9yIHRoZSAiLiIgY2FzZSBjYW4gYmUgZnJlZWQuCi0KLUNjOiBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgotQ2M6IEplZmYgTGF3IDxsYXdAcmVkaGF0LmNvbT4KLUNjOiBNYXR0aGlhcyBLbG9zZSA8ZG9rb0B1YnVudHUuY29tPgotQ0M6IFRvYmlhcyBCdXJudXMgPGJ1cm51c0BuZXQtYi5kZT4KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgWyBodHRwczovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDYvbXNnMDIwNjkuaHRtbCBdCi1TaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KLQotZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYwotaW5kZXggOWFjMThlNjBkODAxLi4xNjhhY2Y3ZWIwYzkgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2NjLmMKLSsrKyBiL2djYy9nY2MuYwotQEAgLTc3OTAsMTAgKzc3OTAsMTUgQEAgc2V0X211bHRpbGliX2RpciAodm9pZCkKLSAJCXEyKys7Ci0gCSAgICAgIGlmICgqcTIgPT0gJzonKQotIAkJbWxfZW5kID0gcTI7Ci0tCSAgICAgIG5ld19tdWx0aWxpYl9vc19kaXIgPSBYTkVXVkVDIChjaGFyLCBtbF9lbmQgLSBxKTsKLS0JICAgICAgbWVtY3B5IChuZXdfbXVsdGlsaWJfb3NfZGlyLCBxICsgMSwgbWxfZW5kIC0gcSAtIDEpOwotLQkgICAgICBuZXdfbXVsdGlsaWJfb3NfZGlyW21sX2VuZCAtIHEgLSAxXSA9ICdcMCc7Ci0tCSAgICAgIG11bHRpbGliX29zX2RpciA9ICpuZXdfbXVsdGlsaWJfb3NfZGlyID8gbmV3X211bHRpbGliX29zX2RpciA6ICIuIjsKLSsJICAgICAgaWYgKG1sX2VuZCAtIHEgPT0gMSkKLSsJCW11bHRpbGliX29zX2RpciA9IHhzdHJkdXAgKCIuIik7Ci0rCSAgICAgIGVsc2UKLSsJCXsKLSsJCSAgbmV3X211bHRpbGliX29zX2RpciA9IFhORVdWRUMgKGNoYXIsIG1sX2VuZCAtIHEpOwotKwkJICBtZW1jcHkgKG5ld19tdWx0aWxpYl9vc19kaXIsIHEgKyAxLCBtbF9lbmQgLSBxIC0gMSk7Ci0rCQkgIG5ld19tdWx0aWxpYl9vc19kaXJbbWxfZW5kIC0gcSAtIDFdID0gJ1wwJzsKLSsJCSAgbXVsdGlsaWJfb3NfZGlyID0gbmV3X211bHRpbGliX29zX2RpcjsKLSsJCX0KLSAKLSAJICAgICAgaWYgKHEyIDwgZW5kICYmICpxMiA9PSAnOicpCi0gCQl7Ci0tLSAKLTEuOS4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZThlZmExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1nY2MvTWFrZWZpbGUuaW46IGZpeCBwYXJhbGxlbCBidWlsZGluZyBmYWlsdXJlCi0KLVRoZSBnY2MtYXIubywgZ2NjLW5tLm8sIGdjYy1yYW5saWIubyBhbmQgZXJyb3JzLm8gaW5jbHVkZWQKLWNvbmZpZy5oIHdoaWNoIHdhcyBhIGdlbmVyYXRlZCBmaWxlLiBCdXQgbm8gZXhwbGljaXR5IHJ1bGUKLXRvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3kuIFRoZXJlIHdhcyBwb3RlbnRpYWwgYnVpbGRpbmcKLWZhaWx1cmUgd2hpbGUgcGFyYWxsZWwgbWFrZS4KLQotRm9yIGdjYy1hci5vLCBnY2Mtbm0ubyBhbmQgZ2NjLXJhbmxpYi5vLCB0aGV5IHdlcmUgY29tcGlsZWQgZnJvbSBvbmUgQwotc291cmNlIGZpbGUgZ2NjLWFyLmMsIHdlIGFkZCB0aGVtIHRvIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUywgc28gdGhlCi0nJChBTExfSE9TVF9PQkpTKSA6IHwgJChnZW5lcmF0ZWRfZmlsZXMpJyBydWxlIGNvdWxkIHdvcmsgZm9yIHRoZXNlCi1vYmplY3RzLgotCi1Gb3IgZXJyb3JzLm8sIGl0IGlzIHBhcnQgb2YgZ2VuZ3R5cGUsIGFuZCB0aGUgZ2VuZ3R5cGUgZ2VuZXJhdG9yIHByb2dyYW0KLWlzIHNwZWNpYWw6IFR3byB2ZXJzaW9ucyBhcmUgYnVpbHQuIE9uZSBpcyBmb3IgdGhlIGJ1aWxkIG1hY2hpbmUsIGFuZCBvbmUKLWlzIGZvciB0aGUgaG9zdC4gV2UgcmVmZXJlZCB3aGF0IGdlbmd0eXBlLXBhcnNlLm8gZGlkICh3aGljaCBhbHNvIGlzIHBhcnQKLW9mIGdlbmd0eXBlKS4KLQotW0dDQyAjNjE4OTldCi1odHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MTg5OQotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCi0KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGdjYy9NYWtlZmlsZS5pbiB8IDcgKysrKysrLQotIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgotaW5kZXggNjQ3NWNiYS4uNTZlNTBiYiAxMDA2NDQKLS0tLSBhL2djYy9NYWtlZmlsZS5pbgotKysrIGIvZ2NjL01ha2VmaWxlLmluCi1AQCAtMTQ4MSwxMyArMTQ4MSwxNiBAQCBPQkpTLWxpYmNvbW1vbi10YXJnZXQgPSAkKGNvbW1vbl9vdXRfb2JqZWN0X2ZpbGUpIHByZWZpeC5vIHBhcmFtcy5vIFwKLSAJb3B0cy5vIG9wdHMtY29tbW9uLm8gb3B0aW9ucy5vIHZlYy5vIGhvb2tzLm8gY29tbW9uL2NvbW1vbi10YXJnaG9va3MubyBcCi0gCWhhc2gtdGFibGUubyBmaWxlLWZpbmQubwotIAotKyMgT2JqZWN0cyBjb21waWxlZCBmcm9tIG9uZSBDIHNvdXJjZSBmaWxlIGdjYy1hci5jCi0rT0JKUy1nY2MtYXIgPSBnY2MtYXIubyBnY2Mtbm0ubyBnY2MtcmFubGliLm8KLSsKLSAjIFRoaXMgbGlzdHMgYWxsIGhvc3Qgb2JqZWN0cyBmb3IgdGhlIGZyb250IGVuZHMuCi0gQUxMX0hPU1RfRlJPTlRFTkRfT0JKUyA9ICQoZm9yZWFjaCB2LCQoQ09ORklHX0xBTkdVQUdFUyksJCgkKHYpX09CSlMpKQotIAotIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUyA9ICQoR0NDX09CSlMpICQoT0JKUykgJChPQkpTLWxpYmNvbW1vbikgXAotICAgJChPQkpTLWxpYmNvbW1vbi10YXJnZXQpIEBUUkVFQlJPV1NFUkAgbWFpbi5vIGMtZmFtaWx5L2NwcHNwZWMubyBcCi0gICAkKENPTExFQ1QyX09CSlMpICQoRVhUUkFfR0NDX09CSlMpICQoR0NPVl9PQkpTKSAkKEdDT1ZfRFVNUF9PQkpTKSBcCi0tICBsdG8td3JhcHBlci5vCi0rICBsdG8td3JhcHBlci5vICQoT0JKUy1nY2MtYXIpCi0gCi0gIyBUaGlzIGxpc3RzIGFsbCBob3N0IG9iamVjdCBmaWxlcywgd2hldGhlciB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGlzCi0gIyBjb21waWxhdGlvbiBvciBub3QuCi1AQCAtMjQzNyw2ICsyNDQwLDggQEAgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKLSBDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCi0gYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCi0gCi0rZXJyb3JzLm8gOiAkKENPTkZJR19IKQotKwotIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCi0gICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCi0gICAkKFhSRUdFWF9IKQotLS0gCi0xLjguMS4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTdkYWIwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotRnJvbSA0ZmQzOWYxMzI5Mzc5ZTAwZjk1ODM5NGFkZGU2YmU5NmYwY2FmMjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogaGFpbnF1ZSA8aGFpbnF1ZUAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBGcmksIDUgRGVjIDIwMTQgMTY6NTM6MjIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gMjAxNC0xMi0wNSAgT2xpdmllciBIYWlucXVlICA8aGFpbnF1ZUBhZGFjb3JlLmNvbT4KLQotICAgICAgICAqIGR3YXJmMmNmaS5jIChpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSk6IE5ldyBoZWxwZXIsIHByb2Nlc3NpbmcKLSAgICAgICAgb25lIHBhcnRpY3VsYXIgcmVnIGZvciBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcy4KLSAgICAgICAgKGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzKTogUmV3b3JrIHRvIHVzZSBoZWxwZXIgYW5kCi0gICAgICAgIGFjY291bnQgZm9yIGR3YXJmIHJlZ2lzdGVyIHNwYW5zLgotCi0KLQotZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE4NDI4IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KLQotLS0tCi0gZ2NjL0NoYW5nZUxvZyAgIHwgIDcgKysrKysKLSBnY2MvZHdhcmYyY2ZpLmMgfCA5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDg1IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kd2FyZjJjZmkuYwotKysrIGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKLUBAIC0yNTIsNyArMjUyLDU5IEBAIGluaXRfcmV0dXJuX2NvbHVtbl9zaXplIChlbnVtIG1hY2hpbmVfbW8KLSAJCSAgZ2VuX2ludF9tb2RlIChzaXplLCBtb2RlKSk7Ci0gfQotIAotLS8qIEdlbmVyYXRlIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgcmVnaXN0ZXIgc2l6ZSB0YWJsZS4gICovCi0rLyogRGF0YXN0cnVjdHVyZSB1c2VkIGJ5IGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzIGFuZAotKyAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIHRvIGNvbW11bmljYXRlIG9uIHdoYXQgaGFzIGJlZW4gZG9uZSBieSB0aGUKLSsgICBsYXR0ZXIuICAqLwotKwotK3R5cGVkZWYgc3RydWN0Ci0rewotKyAgLyogV2hldGhlciB0aGUgZHdhcmYgcmV0dXJuIGNvbHVtbiB3YXMgaW5pdGlhbGl6ZWQuICAqLwotKyAgYm9vbCB3cm90ZV9yZXR1cm5fY29sdW1uOwotKwotKyAgLyogRm9yIGVhY2ggaGFyZCByZWdpc3RlciBSRUdOTywgd2hldGhlciBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZQotKyAgICAgd2FzIGdpdmVuIFJFR05PIHRvIHByb2Nlc3MgYWxyZWFkeS4gICovCi0rICBib29sIHByb2Nlc3NlZF9yZWdubyBbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKLSsKLSt9IGluaXRfb25lX2R3YXJmX3JlZ19zdGF0ZTsKLSsKLSsvKiBIZWxwZXIgZm9yIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzLiAgR2VuZXJhdGUgY29kZSB0bwotKyAgIGluaXRpYWxpemUgdGhlIGR3YXJmIHJlZ2lzdGVyIHNpemUgdGFibGUgZW50cnkgY29ycmVzcG9uZGluZyB0byByZWdpc3RlcgotKyAgIFJFR05PIGluIFJFR01PREUuICBUQUJMRSBpcyB0aGUgdGFibGUgYmFzZSBhZGRyZXNzLCBTTE9UTU9ERSBpcyB0aGUgbW9kZSB0bwotKyAgIHVzZSBmb3IgdGhlIHNpemUgZW50cnkgdG8gaW5pdGlhbGl6ZSwgYW5kIElOSVRfU1RBVEUgaXMgdGhlIGNvbW11bmljYXRpb24KLSsgICBkYXRhc3RydWN0dXJlIGNvbnZleWluZyB3aGF0IHdlJ3JlIGRvaW5nIHRvIG91ciBjYWxsZXIuICAqLwotKwotK3N0YXRpYwotK3ZvaWQgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgKGludCByZWdubywgbWFjaGluZV9tb2RlIHJlZ21vZGUsCi0rCQkJICAgICAgcnR4IHRhYmxlLCBtYWNoaW5lX21vZGUgc2xvdG1vZGUsCi0rCQkJICAgICAgaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlICppbml0X3N0YXRlKQotK3sKLSsgIGNvbnN0IHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChyZWdubyk7Ci0rICBjb25zdCB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKLSsKLSsgIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7Ci0rICBjb25zdCBIT1NUX1dJREVfSU5UIHJlZ3NpemUgPSBHRVRfTU9ERV9TSVpFIChyZWdtb2RlKTsKLSsKLSsgIGluaXRfc3RhdGUtPnByb2Nlc3NlZF9yZWdub1tyZWdub10gPSB0cnVlOwotKwotKyAgaWYgKHJudW0gPj0gRFdBUkZfRlJBTUVfUkVHSVNURVJTKQotKyAgICByZXR1cm47Ci0rCi0rICBpZiAoZG51bSA9PSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKQotKyAgICB7Ci0rICAgICAgaWYgKHJlZ21vZGUgPT0gVk9JRG1vZGUpCi0rCXJldHVybjsKLSsgICAgICBpbml0X3N0YXRlLT53cm90ZV9yZXR1cm5fY29sdW1uID0gdHJ1ZTsKLSsgICAgfQotKwotKyAgaWYgKHNsb3RvZmZzZXQgPCAwKQotKyAgICByZXR1cm47Ci0rCi0rICBlbWl0X21vdmVfaW5zbiAoYWRqdXN0X2FkZHJlc3MgKHRhYmxlLCBzbG90bW9kZSwgc2xvdG9mZnNldCksCi0rCQkgIGdlbl9pbnRfbW9kZSAocmVnc2l6ZSwgc2xvdG1vZGUpKTsKLSt9Ci0rCi0rLyogR2VuZXJhdGUgY29kZSB0byBpbml0aWFsaXplIHRoZSBkd2FyZiByZWdpc3RlciBzaXplIHRhYmxlIGxvY2F0ZWQKLSsgICBhdCB0aGUgcHJvdmlkZWQgQUREUkVTUy4gICovCi0gCi0gdm9pZAotIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzICh0cmVlIGFkZHJlc3MpCi1AQCAtMjYxLDM1ICszMTMsNDAgQEAgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZQotICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA9IFRZUEVfTU9ERSAoY2hhcl90eXBlX25vZGUpOwotICAgcnR4IGFkZHIgPSBleHBhbmRfbm9ybWFsIChhZGRyZXNzKTsKLSAgIHJ0eCBtZW0gPSBnZW5fcnR4X01FTSAoQkxLbW9kZSwgYWRkcik7Ci0tICBib29sIHdyb3RlX3JldHVybl9jb2x1bW4gPSBmYWxzZTsKLSsKLSsgIGluaXRfb25lX2R3YXJmX3JlZ19zdGF0ZSBpbml0X3N0YXRlOwotKwotKyAgbWVtc2V0ICgoY2hhciAqKSZpbml0X3N0YXRlLCAwLCBzaXplb2YgKGluaXRfc3RhdGUpKTsKLSAKLSAgIGZvciAoaSA9IDA7IGkgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVI7IGkrKykKLSAgICAgewotLSAgICAgIHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChpKTsKLS0gICAgICB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKLS0KLS0gICAgICBpZiAocm51bSA8IERXQVJGX0ZSQU1FX1JFR0lTVEVSUykKLS0JewotLQkgIEhPU1RfV0lERV9JTlQgb2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKG1vZGUpOwotLQkgIEhPU1RfV0lERV9JTlQgc2l6ZTsKLS0JICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKLSsgICAgICBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlOwotKyAgICAgIHJ0eCBzcGFuOwotIAotLQkgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCi0rICAgICAgLyogTm8gcG9pbnQgaW4gcHJvY2Vzc2luZyBhIHJlZ2lzdGVyIG11bHRpcGxlIHRpbWVzLiAgVGhpcyBjb3VsZCBoYXBwZW4KLSsgICAgICAgIHdpdGggcmVnaXN0ZXIgc3BhbnMsIGUuZy4gd2hlbiBhIHJlZyBpcyBmaXJzdCBwcm9jZXNzZWQgYXMgYSBwaWVjZSBvZgotKyAgICAgICAgYSBzcGFuLCB0aGVuIGFzIGEgcmVnaXN0ZXIgb24gaXRzIG93biBsYXRlciBvbi4gICovCi0rCi0rICAgICAgaWYgKGluaXRfc3RhdGUucHJvY2Vzc2VkX3JlZ25vW2ldKQotKyAgICAgICBjb250aW51ZTsKLSsKLSsgICAgICBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKLSsgICAgICBzcGFuID0gdGFyZ2V0bS5kd2FyZl9yZWdpc3Rlcl9zcGFuIChnZW5fcnR4X1JFRyAoc2F2ZV9tb2RlLCBpKSk7Ci0rICAgICAgaWYgKCFzcGFuKQotKyAgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaSwgc2F2ZV9tb2RlLCBtZW0sIG1vZGUsICZpbml0X3N0YXRlKTsKLSsgICAgICBlbHNlCi0rICAgICAgIHsKLSsgICAgICAgICBmb3IgKGludCBzaSA9IDA7IHNpIDwgWFZFQ0xFTiAoc3BhbiwgMCk7IHNpKyspCi0gCSAgICB7Ci0tCSAgICAgIGlmIChzYXZlX21vZGUgPT0gVk9JRG1vZGUpCi0tCQljb250aW51ZTsKLS0JICAgICAgd3JvdGVfcmV0dXJuX2NvbHVtbiA9IHRydWU7Ci0tCSAgICB9Ci0tCSAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHNhdmVfbW9kZSk7Ci0tCSAgaWYgKG9mZnNldCA8IDApCi0tCSAgICBjb250aW51ZTsKLSsgICAgICAgICAgICAgcnR4IHJlZyA9IFhWRUNFWFAgKHNwYW4sIDAsIHNpKTsKLSsgICAgICAgICAgICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUKLSsgICAgICAgICAgICAgICAoUkVHTk8gKHJlZyksIEdFVF9NT0RFIChyZWcpLCBtZW0sIG1vZGUsICZpbml0X3N0YXRlKTsKLSsgICAgICAgICAgIH0KLSAKLS0JICBlbWl0X21vdmVfaW5zbiAoYWRqdXN0X2FkZHJlc3MgKG1lbSwgbW9kZSwgb2Zmc2V0KSwKLS0JCQkgIGdlbl9pbnRfbW9kZSAoc2l6ZSwgbW9kZSkpOwotIAl9Ci0gICAgIH0KLSAKLS0gIGlmICghd3JvdGVfcmV0dXJuX2NvbHVtbikKLSsgIGlmICghaW5pdF9zdGF0ZS53cm90ZV9yZXR1cm5fY29sdW1uKQotICAgICBpbml0X3JldHVybl9jb2x1bW5fc2l6ZSAobW9kZSwgbWVtLCBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKTsKLSAKLSAjaWZkZWYgRFdBUkZfQUxUX0ZSQU1FX1JFVFVSTl9DT0xVTU4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I2Yzk0Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi1Gcm9tIGMwMjM1YTMzZGU4YzRmNzhjY2UzNWIyYThjMjAzNWM4M2ZlMWJkMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBoYWlucXVlIDxoYWlucXVlQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KLURhdGU6IEZyaSwgNSBEZWMgMjAxNCAxNzowMTo0MiArMDAwMAotU3ViamVjdDogW1BBVENIXSAyMDE0LTEyLTA1ICBPbGl2aWVyIEhhaW5xdWUgIDxoYWlucXVlQGFkYWNvcmUuY29tPgotCi0gICAgICAgIGdjYy8KLSAgICAgICAgKiBkZWZhdWx0cy5oOiAoRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4pOiBEZWZpbmUgZGVmYXVsdC4KLSAgICAgICAgKiBkd2FyZjJjZmkuYyAoaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUpOiBIb25vcgotICAgICAgICBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTi4KLQotICAgICAgICBsaWJnY2MvCi0gICAgICAgICogdW53aW5kLWR3Mi5jIChEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTik6IFJlbW92ZSBkZWZhdWx0IGRlZiwKLSAgICAgICAgbm93IHByb3ZpZGVkIGJ5IGRlZmF1bHRzLmguCi0KLQotCi1naXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTg0MjkgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQotCi0tLS0KLSBnY2MvQ2hhbmdlTG9nICAgICAgIHwgNiArKysrKysKLSBnY2MvZGVmYXVsdHMuaCAgICAgIHwgNSArKysrKwotIGdjYy9kd2FyZjJjZmkuYyAgICAgfCAzICsrLQotIGxpYmdjYy9DaGFuZ2VMb2cgICAgfCA1ICsrKysrCi0gbGliZ2NjL3Vud2luZC1kdzIuYyB8IDQgLS0tLQotIDUgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdjYy00LjkuMi9nY2MvZGVmYXVsdHMuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kZWZhdWx0cy5oCi0rKysgZ2NjLTQuOS4yL2djYy9kZWZhdWx0cy5oCi1AQCAtNDM4LDYgKzQzOCwxMSBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCi0gI2RlZmluZSBEV0FSRl9GUkFNRV9SRUdOVU0oUkVHKSBEQlhfUkVHSVNURVJfTlVNQkVSIChSRUcpCi0gI2VuZGlmCi0gCi0rLyogVGhlIG1hcHBpbmcgZnJvbSBkd2FyZiBDRkEgcmVnIG51bWJlciB0byBpbnRlcm5hbCBkd2FyZiByZWcgbnVtYmVycy4gICovCi0rI2lmbmRlZiBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTgotKyNkZWZpbmUgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4oUkVHTk8pIChSRUdOTykKLSsjZW5kaWYKLSsKLSAvKiBNYXAgcmVnaXN0ZXIgbnVtYmVycyBoZWxkIGluIHRoZSBjYWxsIGZyYW1lIGluZm8gdGhhdCBnY2MgaGFzCi0gICAgY29sbGVjdGVkIHVzaW5nIERXQVJGX0ZSQU1FX1JFR05VTSB0byB0aG9zZSB0aGF0IHNob3VsZCBiZSBvdXRwdXQgaW4KLSAgICAuZGVidWdfZnJhbWUgYW5kIC5laF9mcmFtZS4gICovCi1JbmRleDogZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kd2FyZjJjZmkuYwotKysrIGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKLUBAIC0yODAsOCArMjgwLDkgQEAgdm9pZCBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaW50IHJlZ25vLAotIHsKLSAgIGNvbnN0IHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChyZWdubyk7Ci0gICBjb25zdCB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKLSsgIGNvbnN0IHVuc2lnbmVkIGludCBkY29sID0gRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJudW0pOwotIAotLSAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKLSsgIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IGRjb2wgKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7Ci0gICBjb25zdCBIT1NUX1dJREVfSU5UIHJlZ3NpemUgPSBHRVRfTU9ERV9TSVpFIChyZWdtb2RlKTsKLSAKLSAgIGluaXRfc3RhdGUtPnByb2Nlc3NlZF9yZWdub1tyZWdub10gPSB0cnVlOwotSW5kZXg6IGdjYy00LjkuMi9saWJnY2MvdW53aW5kLWR3Mi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvbGliZ2NjL3Vud2luZC1kdzIuYwotKysrIGdjYy00LjkuMi9saWJnY2MvdW53aW5kLWR3Mi5jCi1AQCAtNTUsMTAgKzU1LDYgQEAKLSAjZGVmaW5lIFBSRV9HQ0MzX0RXQVJGX0ZSQU1FX1JFR0lTVEVSUyBEV0FSRl9GUkFNRV9SRUdJU1RFUlMKLSAjZW5kaWYKLSAKLS0jaWZuZGVmIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OCi0tI2RlZmluZSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTihSRUdOTykgKFJFR05PKQotLSNlbmRpZgotLQotIC8qID8/PyBGb3IgdGhlIHB1YmxpYyBmdW5jdGlvbiBpbnRlcmZhY2VzLCB3ZSB0ZW5kIHRvIGdjY19hc3NlcnQgdGhhdCB0aGUKLSAgICBjb2x1bW4gbnVtYmVycyBhcmUgaW4gcmFuZ2UuICBGb3IgdGhlIGR3YXJmMiB1bndpbmQgaW5mbyB0aGlzIGRvZXMgaGFwcGVuLAotICAgIGFsdGhvdWdoIHNvIGZhciBpbiBhIGNhc2UgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IG1hdHRlci4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI5NTU5Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1EaXNhYmxlIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIGFuZCBvdGhlciBtdWx0aWxpYiBvcHRpb25zLgotCi1IYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KLXN5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUgQUJJLCBhcwotbG9uZyBhcyB0aGUgZHluYW1pYyBsb2FkZXIgaXMgcHJlc2VudCBpbiAvbGliLgotCi1XZSBzaW1wbHkgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgcnVsZXMgaW4gZ2NjIHRvIGZpbmQgYW5kIGNvbmZpZ3VyZSB0aGUgCi1ub3JtYWwgbGliZGlyLgotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+Ci0KLUluZGV4OiBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMS5vcmlnL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKLSsrKyBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAotQEAgLTIxLDExICsyMSwxMSBAQAotIExJQjFBU01TUkMgICA9IGFhcmNoNjQvbGliMWZ1bmNzLmFzbQotIExJQjFBU01GVU5DUyA9IF9hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UKLSAKLS1BQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQotLU1VTFRJTElCX09TRElSTkFNRVMgPSAuPS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKLS1NVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKLSsjQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKLSsjTVVMVElMSUJfT1NESVJOQU1FUyA9IC49Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQotKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKLSAKLSAjIERpc2FibGUgdGhlIG11bHRpbGliIGZvciBsaW51eC1nbnUgdGFyZ2V0cyBmb3IgdGhlIHRpbWUgYmVpbmc7IGZvY3VzCi0gIyBvbiB0aGUgYmFyZW1ldGFsIHRhcmdldHMuCi0tTVVMVElMSUJfT1BUSU9OUyAgICA9Ci0tTVVMVElMSUJfRElSTkFNRVMgICA9Ci0rI01VTFRJTElCX09QVElPTlMgICAgPQotKyNNVUxUSUxJQl9ESVJOQU1FUyAgID0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0MmJhOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotRnJvbSBjYTAzY2YxYjEzM2Q2NmViOTc4YzY4ZjZkYmMzNDVlOWFhYmNiYTg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogdXJvcyA8dXJvc0AxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBNb24sIDMwIEp1biAyMDE0IDE5OjMwOjUyICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIHIyMTIxNzEKLQotKiBleGNlcHQuYyAoZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQpOiBOZXcgaGVscGVyCi0gZnVuY3Rpb24uIAkoY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzKTogVXNlCi0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgdG8gCWVtaXQgRUhfUkVHSU9OX0VORCBub3RlLiAKLSAqIGp1bXAuYyAoY2xlYW51cF9iYXJyaWVycyk6IERvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyAKLSBjb3JyZXNwb25kaW5nIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxMjE3MSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9nY2MuZ251Lm9yZy92aWV3Y3ZzL2djYz92aWV3PXJldmlzaW9uJnJldmlzaW9uPTIxMjE3MV0KLVNpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8YmFvc2hhbi5wYW5nQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBnY2MvZXhjZXB0LmMgfCAgIDIzICsrKysrKysrKysrKysrKysrKy0tLS0tCi0gZ2NjL2p1bXAuYyAgIHwgICAxOSArKysrKysrKysrKysrKystLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2V4Y2VwdC5jIGIvZ2NjL2V4Y2VwdC5jCi1pbmRleCBkYzVjMWQyLi43YWMxMTRmIDEwMDY0NAotLS0tIGEvZ2NjL2V4Y2VwdC5jCi0rKysgYi9nY2MvZXhjZXB0LmMKLUBAIC0yNDY2LDYgKzI0NjYsMjAgQEAgYWRkX2NhbGxfc2l0ZSAocnR4IGxhbmRpbmdfcGFkLCBpbnQgYWN0aW9uLCBpbnQgc2VjdGlvbikKLSAgIHJldHVybiBjYWxsX3NpdGVfYmFzZSArIGNydGwtPmVoLmNhbGxfc2l0ZV9yZWNvcmRfdltzZWN0aW9uXS0+bGVuZ3RoICgpIC0gMTsKLSB9Ci0gCi0rc3RhdGljIHJ0eAotK2VtaXRfbm90ZV9laF9yZWdpb25fZW5kIChydHggaW5zbikKLSt7Ci0rICBydHggbmV4dCA9IE5FWFRfSU5TTiAoaW5zbik7Ci0rCi0rICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcKLSsgICAgIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuICAqLwotKyAgaWYgKG5leHQgJiYgTk9URV9QIChuZXh0KQotKyAgICAgICYmIE5PVEVfS0lORCAobmV4dCkgPT0gTk9URV9JTlNOX0NBTExfQVJHX0xPQ0FUSU9OKQotKyAgICBpbnNuID0gbmV4dDsKLSsKLSsgIHJldHVybiBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELCBpbnNuKTsKLSt9Ci0rCi0gLyogVHVybiBSRUdfRUhfUkVHSU9OIG5vdGVzIGJhY2sgaW50byBOT1RFX0lOU05fRUhfUkVHSU9OIG5vdGVzLgotICAgIFRoZSBuZXcgbm90ZSBudW1iZXJzIHdpbGwgbm90IHJlZmVyIHRvIHJlZ2lvbiBudW1iZXJzLCBidXQKLSAgICBpbnN0ZWFkIHRvIGNhbGwgc2l0ZSBlbnRyaWVzLiAgKi8KLUBAIC0yNTQ0LDggKzI1NTgsOCBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCi0gCQlub3RlID0gZW1pdF9ub3RlX2JlZm9yZSAoTk9URV9JTlNOX0VIX1JFR0lPTl9CRUcsCi0gCQkJCQkgZmlyc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7Ci0gCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOwotLQkJbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCi0tCQkJCQlsYXN0X25vX2FjdGlvbl9pbnNuX2JlZm9yZV9zd2l0Y2gpOwotKwkJbm90ZQotKwkJICA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X25vX2FjdGlvbl9pbnNuX2JlZm9yZV9zd2l0Y2gpOwotIAkJTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKLSAJCWdjY19hc3NlcnQgKGxhc3RfYWN0aW9uICE9IC0zCi0gCQkJICAgIHx8IChsYXN0X2FjdGlvbl9pbnNuCi1AQCAtMjU2OSw4ICsyNTgzLDcgQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQotIAkJICAgIGZpcnN0X25vX2FjdGlvbl9pbnNuID0gTlVMTF9SVFg7Ci0gCQkgIH0KLSAKLS0JCW5vdGUgPSBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELAotLQkJCQkJbGFzdF9hY3Rpb25faW5zbik7Ci0rCQlub3RlID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3RfYWN0aW9uX2luc24pOwotIAkJTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKLSAJICAgICAgfQotIAotQEAgLTI2MTcsNyArMjYzMCw3IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKLSAKLSAgIGlmIChsYXN0X2FjdGlvbiA+PSAtMSAmJiAhIGZpcnN0X25vX2FjdGlvbl9pbnNuKQotICAgICB7Ci0tICAgICAgbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsIGxhc3RfYWN0aW9uX2luc24pOwotKyAgICAgIG5vdGUgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9hY3Rpb25faW5zbik7Ci0gICAgICAgTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKLSAgICAgfQotIAotZGlmZiAtLWdpdCBhL2djYy9qdW1wLmMgYi9nY2MvanVtcC5jCi1pbmRleCA5NDE4ZjY1Li5hNWU1ZjUyIDEwMDY0NAotLS0tIGEvZ2NjL2p1bXAuYwotKysrIGIvZ2NjL2p1bXAuYwotQEAgLTEyMSwxNSArMTIxLDI2IEBAIHJlYnVpbGRfanVtcF9sYWJlbHNfY2hhaW4gKHJ0eCBjaGFpbikKLSBzdGF0aWMgdW5zaWduZWQgaW50Ci0gY2xlYW51cF9iYXJyaWVycyAodm9pZCkKLSB7Ci0tICBydHggaW5zbiwgbmV4dCwgcHJldjsKLS0gIGZvciAoaW5zbiA9IGdldF9pbnNucyAoKTsgaW5zbjsgaW5zbiA9IG5leHQpCi0rICBydHggaW5zbjsKLSsgIGZvciAoaW5zbiA9IGdldF9pbnNucyAoKTsgaW5zbjsgaW5zbiA9IE5FWFRfSU5TTiAoaW5zbikpCi0gICAgIHsKLS0gICAgICBuZXh0ID0gTkVYVF9JTlNOIChpbnNuKTsKLSAgICAgICBpZiAoQkFSUklFUl9QIChpbnNuKSkKLSAJewotLQkgIHByZXYgPSBwcmV2X25vbm5vdGVfaW5zbiAoaW5zbik7Ci0rCSAgcnR4IHByZXYgPSBwcmV2X25vbm5vdGVfaW5zbiAoaW5zbik7Ci0gCSAgaWYgKCFwcmV2KQotIAkgICAgY29udGludWU7Ci0rCi0rCSAgaWYgKENBTExfUCAocHJldikpCi0rCSAgICB7Ci0rCSAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgY29ycmVzcG9uZGluZwotKwkJIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuICAqLwotKwkgICAgICBydHggbmV4dCA9IE5FWFRfSU5TTiAocHJldik7Ci0rCi0rCSAgICAgIGlmIChOT1RFX1AgKG5leHQpCi0rCQkgICYmIE5PVEVfS0lORCAobmV4dCkgPT0gTk9URV9JTlNOX0NBTExfQVJHX0xPQ0FUSU9OKQotKwkJcHJldiA9IG5leHQ7Ci0rCSAgICB9Ci0rCi0gCSAgaWYgKEJBUlJJRVJfUCAocHJldikpCi0gCSAgICBkZWxldGVfaW5zbiAoaW5zbik7Ci0gCSAgZWxzZSBpZiAocHJldiAhPSBQUkVWX0lOU04gKGluc24pKQotLS0gCi0xLjcuOS41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4MjdjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi1Gcm9tIDZlYWUzZTYzN2ZjYzIyZDIxYjUxZDQ0ZDYxZTNhOWNiNDgyNWU3NzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotRGF0ZTogVGh1LCAzMCBPY3QgMjAxNCAyMDozNzoxNCAtMDcwMAotU3ViamVjdDogW1BBVENIXVBSIHJ0bC1vcHRpbWl6YXRpb24vNjMzNDgKLSAKLVBSIHJ0bC1vcHRpbWl6YXRpb24vNjMzNDgKLSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogRG8gbm90IGVtaXQgZXh0cmEgYmFycmllci4KLQotTm90ZTogdGhpcyBwYXRjaCBpcyB0byBmaXggdGhlIHNpZGUgZWZmZWN0IGludHJvZHVjZWQgYnkgcjIxMjE3MSB3aGljaCB3YXMgcmVwb3J0ZWQgYXQ6Ci1odHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MzM0OAotCi1naXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTU2MTMgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2NjLmdudS5vcmcvdmlld2N2cy9nY2M/dmlldz1yZXZpc2lvbiZyZXZpc2lvbj0yMTU2MTNdCi1TaWduZWQtb2ZmLWJ5OiBCYW9zaGFuIFBhbmcgPGJhb3NoYW4ucGFuZ0B3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIGdjYy9lbWl0LXJ0bC5jIHwgICAxMSAtLS0tLS0tLS0tLQotIDEgZmlsZXMgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9lbWl0LXJ0bC5jIGIvZ2NjL2VtaXQtcnRsLmMKLWluZGV4IDQ3MzZmOGQuLmFlNjlkYmQgMTAwNjQ0Ci0tLS0gYS9nY2MvZW1pdC1ydGwuYwotKysrIGIvZ2NjL2VtaXQtcnRsLmMKLUBAIC0zNDIyLDcgKzM0MjIsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCi0gewotICAgcnR4IGJlZm9yZSA9IFBSRVZfSU5TTiAodHJpYWwpOwotICAgcnR4IGFmdGVyID0gTkVYVF9JTlNOICh0cmlhbCk7Ci0tICBpbnQgaGFzX2JhcnJpZXIgPSAwOwotICAgcnR4IG5vdGUsIHNlcSwgdGVtOwotICAgaW50IHByb2JhYmlsaXR5OwotICAgcnR4IGluc25fbGFzdCwgaW5zbjsKLUBAIC0zNDQxLDE0ICszNDQwLDYgQEAgdHJ5X3NwbGl0IChydHggcGF0LCBydHggdHJpYWwsIGludCBsYXN0KQotIAotICAgc3BsaXRfYnJhbmNoX3Byb2JhYmlsaXR5ID0gLTE7Ci0gCi0tICAvKiBJZiB3ZSBhcmUgc3BsaXR0aW5nIGEgSlVNUF9JTlNOLCBpdCBtaWdodCBiZSBmb2xsb3dlZCBieSBhIEJBUlJJRVIuCi0tICAgICBXZSBtYXkgbmVlZCB0byBoYW5kbGUgdGhpcyBzcGVjaWFsbHkuICAqLwotLSAgaWYgKGFmdGVyICYmIEJBUlJJRVJfUCAoYWZ0ZXIpKQotLSAgICB7Ci0tICAgICAgaGFzX2JhcnJpZXIgPSAxOwotLSAgICAgIGFmdGVyID0gTkVYVF9JTlNOIChhZnRlcik7Ci0tICAgIH0KLS0KLSAgIGlmICghc2VxKQotICAgICByZXR1cm4gdHJpYWw7Ci0gCi1AQCAtMzU5NCw4ICszNTg1LDYgQEAgdHJ5X3NwbGl0IChydHggcGF0LCBydHggdHJpYWwsIGludCBsYXN0KQotICAgdGVtID0gZW1pdF9pbnNuX2FmdGVyX3NldGxvYyAoc2VxLCB0cmlhbCwgSU5TTl9MT0NBVElPTiAodHJpYWwpKTsKLSAKLSAgIGRlbGV0ZV9pbnNuICh0cmlhbCk7Ci0tICBpZiAoaGFzX2JhcnJpZXIpCi0tICAgIGVtaXRfYmFycmllcl9hZnRlciAodGVtKTsKLSAKLSAgIC8qIFJlY3Vyc2l2ZWx5IGNhbGwgdHJ5X3NwbGl0IGZvciBlYWNoIG5ldyBpbnNuIGNyZWF0ZWQ7IGJ5IHRoZQotICAgICAgdGltZSBjb250cm9sIHJldHVybnMgaGVyZSB0aGF0IGluc24gd2lsbCBiZSBmdWxseSBzcGxpdCwgc28KLS0tIAotMS43LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVhOWZkZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLUZyb20gNWMwMDkyMDcwMjUzMTEzY2YwZDljNDVlYWNjODg0YjNlY2MzNGQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGpzbTI4IDxqc20yOEAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBTYXQsIDI1IE9jdCAyMDE0IDAwOjIzOjE3ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIE9ubHkgYWxsb3cgZTUwMCBkb3VibGUgaW4gU1BFX1NJTURfUkVHTk9fUCByZWdpc3RlcnMuCi0KLXJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIGFsbG93cyBTUEUgdmVjdG9ycyBpbiBzaW5nbGUKLXJlZ2lzdGVycyBzYXRpc2Z5aW5nIFNQRV9TSU1EX1JFR05PX1AgKGkuZS4gcmVnaXN0ZXIgbnVtYmVycyAwIHRvCi0zMSkuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZyB0ZXN0IGZvciBlNTAwIGRvdWJsZSB0cmVhdHMgYWxsCi1yZWdpc3RlcnMgYXMgYmVpbmcgYWJsZSB0byBzdG9yZSBhIDY0LWJpdCB2YWx1ZSwgcmF0aGVyIHRoYW4ganVzdAotdGhvc2UgR1BScy4KLQotTG9naWNhbGx5IHRoaXMgaW5jb25zaXN0ZW5jeSBpcyB3cm9uZzsgaW4gYWRkaXRpb24sIGl0IGNhdXNlcyBwcm9ibGVtcwotdW53aW5kaW5nIGZyb20gc2lnbmFsIGhhbmRsZXJzLiAgbGludXgtdW53aW5kLmggdXNlcwotQVJHX1BPSU5URVJfUkVHTlVNIGFzIGEgcGxhY2UgdG8gc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gYQotc2lnbmFsIGhhbmRsZXIsIGJ1dCB0aGlzIGxvZ2ljIGluIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsCi1yZXN1bHRzIGluIHRoYXQgYmVpbmcgY29uc2lkZXJlZCBhbiA4LWJ5dGUgcmVnaXN0ZXIsIHJlc3VsdGluZyBpbgotYXNzZXJ0aW9uIGZhaWx1cmVzLgotKDxodHRwczovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDkvbXNnMDI2MjUuaHRtbD4gZmlyc3QKLW5lZWRzIHRvIGJlIGFwcGxpZWQgZm9yIHVud2luZGluZyB0byB3b3JrIGluIGdlbmVyYWwgb24gZTUwMC4pICBUaGlzCi1wYXRjaCBtYWtlcyByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCBoYW5kbGUgdGhlIGU1MDAgZG91YmxlCi1jYXNlIGNvbnNpc3RlbnRseSB3aXRoIFNQRSB2ZWN0b3JzLgotCi1UZXN0ZWQgd2l0aCBubyByZWdyZXNzaW9ucyB3aXRoIGNyb3NzIHRvIHBvd2VycGMtbGludXgtZ251c3BlIChnaXZlbgotdGhlIGFmb3JlbWVudGlvbmVkIHBhdGNoIGFwcGxpZWQpLiAgRmFpbHVyZXMgb2Ygc2lnbmFsIGhhbmRsaW5nCi11bndpbmRpbmcgdGVzdHMgc3VjaCBhcyBnY2MuZGcvY2xlYW51cC17OCw5LDEwLDExfS5jIGFyZSBmaXhlZCBieSB0aGlzCi1wYXRjaC4KLQotCSogY29uZmlnL3JzNjAwMC9yczYwMDAuYyAocnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwpOiBEbwotCW5vdCBhbGxvdyBlNTAwIGRvdWJsZSBpbiByZWdpc3RlcnMgbm90IHNhdGlzeWZpbmcKLQlTUEVfU0lNRF9SRUdOT19QLgotCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNjY4OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCi0KLS0tLQotIGdjYy9DaGFuZ2VMb2cgICAgICAgICAgICAgIHwgNiArKysrKysKLSBnY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYyB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKLUBAIC0xNzAzLDcgKzE3MDMsNyBAQCByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCAoaW50IHJlCi0gICAgICBTQ21vZGUgc28gYXMgdG8gcGFzcyB0aGUgdmFsdWUgY29ycmVjdGx5IGluIGEgcGFpciBvZgotICAgICAgcmVnaXN0ZXJzLiAgKi8KLSAgIGVsc2UgaWYgKFRBUkdFVF9FNTAwX0RPVUJMRSAmJiBGTE9BVF9NT0RFX1AgKG1vZGUpICYmIG1vZGUgIT0gU0Ntb2RlCi0tCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkpCi0rCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkgJiYgU1BFX1NJTURfUkVHTk9fUCAocmVnbm8pKQotICAgICByZWdfc2l6ZSA9IFVOSVRTX1BFUl9GUF9XT1JEOwotIAotICAgZWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGM2NmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLUVuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCi0KLVRoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKLWdjYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQotYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKLXN5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKLWZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgotcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKLWNvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCi0KLVNpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotLS0tIGEvZ2NjL01ha2VmaWxlLmluCTIwMTQtMTItMjMgMTE6NTc6MzMuMzI3ODczMzMxICswMDAwCi0rKysgYi9nY2MvTWFrZWZpbGUuaW4JMjAxNS0wMS0yMSAxMTozMjozNS40NDczMDUzOTQgKzAwMDAKLUBAIC01ODcsNiArNTg3LDcgQEAKLSAKLSAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzIGV0Yy4KLSBsaWJzdWJkaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQotK2xpYnN1YmRpcl90YXJnZXQgPSBnY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCi0gIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGV4ZWN1dGFibGVzCi0gbGliZXhlY3N1YmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQotICMgRGlyZWN0b3J5IGluIHdoaWNoIGFsbCBwbHVnaW4gcmVzb3VyY2VzIGFyZSBpbnN0YWxsZWQKLUBAIC0yNTM0LDYgKzI1MzUsNyBAQAotIAotIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAotICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKLSsgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKLSAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKLSAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKLSAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAotLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTEzIDE3OjQwOjI2LjEzMTAxMjcyNSArMDAwMAotKysrIGIvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTIxIDExOjMwOjA4LjkyODQyNjQ5MiArMDAwMAotQEAgLTU5LDYgKzU5LDEwIEBACi0gICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KLSAgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCi0gI2VuZGlmCi0rI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKLSsgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KLSsgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKLSsjZW5kaWYKLSAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKLSAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KLSAgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAotZGlmZiAtLWdpdCBhL2djYy9kZWZhdWx0cy5oIGIvZ2NjL2RlZmF1bHRzLmgKLWluZGV4IGY5NGFlMTcuLmQ5OGI0MGIgMTAwNjQ0Ci0tLS0gYS9nY2MvZGVmYXVsdHMuaAotKysrIGIvZ2NjL2RlZmF1bHRzLmgKLUBAIC0xMzkwLDQgKzEzOTAsMTMgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCi0gCi0gI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggICovCi0gCi0rLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCi0rCi0rI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKLSsjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCi0rI2VuZGlmCi0rI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKLSsjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgotKyNlbmRpZgotKwotICNlbmRpZiAgLyogISBHQ0NfREVGQVVMVFNfSCAqLwotZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYwotaW5kZXggOWYwYjc4MS4uMTc0ZmNhOCAxMDA2NDQKLS0tLSBhL2djYy9nY2MuYwotKysrIGIvZ2NjL2djYy5jCi1AQCAtMTE4OSwxMyArMTE4OSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7Ci0gCi0gLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCi0gCi0tI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKLS0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCi0tI2VuZGlmCi0tI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKLS0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgotLSNlbmRpZgotLQotICNpZmRlZiBDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFICAvKiBEb24ndCB1c2UgdGhlc2UgcHJlZml4ZXMgZm9yIGEgY3Jvc3MgY29tcGlsZXIuICAqLwotICN1bmRlZiBNRF9FWEVDX1BSRUZJWAotICN1bmRlZiBNRF9TVEFSVEZJTEVfUFJFRklYCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDhiZDQ4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotRnJvbSA4NjFiY2ZkNGFlODE0ZjM1MWUwYzY2OGVlMjZkMDFkMTMzMWUwNDIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSCAzNi8zN10gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZwotIGJhc2VfbGliZGlyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCi0rKysgZ2NjLTQuOS4yL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2lmbmRlZiBHQ0NfQUFSQ0g2NF9MSU5VWF9ICi0gI2RlZmluZSBHQ0NfQUFSQ0g2NF9MSU5VWF9ICi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9LnNvLjEiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfS5zby4xIgotIAotICNkZWZpbmUgQ1BQX1NQRUMgIiV7cHRocmVhZDotRF9SRUVOVFJBTlR9IgotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZWZhNDUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi1CZWluZyBhYmxlIHRvIGJ1aWxkIGEgbmF0aXZlc2RrIGdjYyBpcyB1c2VmdWwsIHBhcnRpY3VsYXJseSBpbiBjYXNlcwotd2hlcmUgdGhlIGhvc3QgY29tcGlsZXIgbWF5IGJlIG9mIGFuIGluY29tcGF0aWJsZSB2ZXJzaW9uIChvciBhIDMyCi1iaXQgY29tcGlsZXIgaXMgbmVlZGVkKS4KLQotU2FkbHksIGJ1aWxkaW5nIG5hdGl2ZXNkay1nY2MgaXMgbm90IHN0cmFpZ2h0IGZvcndhcmQuIFdlIGluc3RhbGwKLW5hdGl2ZXNkay1nY2MgaW50byBhIHJlbG9jYXRhYmxlIGxvY2F0aW9uIGFuZCB0aGlzIG1lYW5zIHRoYXQgaXRzCi1saWJyYXJ5IGxvY2F0aW9ucyBjYW4gY2hhbmdlLiAiTm9ybWFsIiBzeXNyb290IHN1cHBvcnQgZG9lc24ndCBoZWxwCi1pbiB0aGlzIGNhc2Ugc2luY2UgdGhlIHZhbHVlcyBvZiBwYXRocyBsaWtlICJsaWJkaXIiIGNoYW5nZSwgbm90IGp1c3QKLWJhc2Ugcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHN5c3RlbS4KLQotSW4gb3JkZXIgdG8gaGFuZGxlIHRoaXMgd2UgZG8gdHdvIHRoaW5nczoKLQotYSkgQWRkICVyIGludG8gc3BlYyBmaWxlIG1hcmt1cCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgaW5qZWN0ZWQgcGF0aHMKLSAgIHN1Y2ggYXMgU1lTVEVNTElCU19ESVIgKHNlZSBnY2NfbXVsdGlsaWJfc2V0dXAoKSkuCi1iKSBBZGQgb3RoZXIgcGF0aHMgd2hpY2ggbmVlZCByZWxvY2F0aW9uIGludG8gYSAuZ2NjcmVsb2NwcmVmaXggc2VjdGlvbgotICAgd2hpY2ggdGhlIHJlbG9jYXRpb24gY29kZSB3aWxsIG5vdGljZSBhbmQgYWRqdXN0IGF1dG9tYXRpY2FsbHkuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQotUlAgMjAxNS83LzI4Ci1kaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCi1pbmRleCA1ZmQzZDBhLi4yZGUyOWFhIDEwMDY0NAotLS0tIGEvZ2NjL2djYy5jCi0rKysgYi9nY2MvZ2NjLmMKLUBAIC0xMjAsNiArMTIwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IFRBUkdFVF9TWVNURU1fUk9PVDsKLSAjZWxzZQotIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSAwOwotICNlbmRpZgotKyAKLStzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOwotIAotIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KLSAKLUBAIC0zODQsNiArMzg2LDcgQEAgb3Igd2l0aCBjb25zdGFudCB0ZXh0IGluIGEgc2luZ2xlIGFyZ3VtZW50LgotICAlRyAgICAgcHJvY2VzcyBMSUJHQ0NfU1BFQyBhcyBhIHNwZWMuCi0gICVSICAgICBPdXRwdXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0X3N5c3RlbV9yb290IGFuZAotICAgICAgICAgdGFyZ2V0X3N5c3Jvb3Rfc3VmZml4LgotKyAlciAgICAgT3V0cHV0IHRoZSBiYXNlIHBhdGggdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeAotICAlUyAgICAgcHJvY2VzcyBTVEFSVEZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgUyBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCi0gICVFICAgICBwcm9jZXNzIEVOREZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgRSBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCi0gICVDICAgICBwcm9jZXNzIENQUF9TUEVDIGFzIGEgc3BlYy4KLUBAIC0xMjE4LDEwICsxMjIxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7Ci0gICAgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBiZWNhdXNlLCBpbiB0aGF0IGNhc2UsIHdlIGtub3cgd2hlcmUgdGhlCi0gICAgY29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgdXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoYXQKLSAgICBsb2NhdGlvbiBpbnN0ZWFkLiAgKi8KLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfZXhlY19wcmVmaXggPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfbGliZXhlY19wcmVmaXggPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfYmluZGlyX3ByZWZpeCA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Ci0tc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOwotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2V4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOwotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOwotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2JpbmRpcl9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKLStzdGF0aWMgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Ci0gCi0gLyogRm9yIG5hdGl2ZSBjb21waWxlcnMsIHRoZXNlIGFyZSB3ZWxsLWtub3duIHBhdGhzIGNvbnRhaW5pbmcKLSAgICBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IgY3Jvc3MKLUBAIC0xMjI5LDkgKzEyMzIsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Ci0gc3RhdGljIGNvbnN0IGNoYXIgKm1kX2V4ZWNfcHJlZml4ID0gTURfRVhFQ19QUkVGSVg7Ci0gc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXggPSBNRF9TVEFSVEZJTEVfUFJFRklYOwotIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4XzEgPSBNRF9TVEFSVEZJTEVfUFJFRklYXzE7Ci0tc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMQotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKLSAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xOwotLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIKLStzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCi0gICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMjsKLSAKLSAvKiBBIHJlbGF0aXZlIHBhdGggdG8gYmUgdXNlZCBpbiBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiB0b29scwotQEAgLTUzMDUsNiArNTMwOCwxMSBAQCBkb19zcGVjXzEgKGNvbnN0IGNoYXIgKnNwZWMsIGludCBpbnN3aXRjaCwgY29uc3QgY2hhciAqc29mdF9tYXRjaGVkX3BhcnQpCi0gCSAgICAgIH0KLSAJICAgIGJyZWFrOwotIAotKyAgICAgICAgICBjYXNlICdyJzoKLSsgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2ssIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgsCi0rCQkgICAgICBzdHJsZW4gKHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgpKTsKLSsgICAgICAgICAgICBicmVhazsKLSsKLSAJICBjYXNlICdTJzoKLSAJICAgIHZhbHVlID0gZG9fc3BlY18xIChzdGFydGZpbGVfc3BlYywgMCwgTlVMTCk7Ci0gCSAgICBpZiAodmFsdWUgIT0gMCkKLQotZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCi1pbmRleCBkYWQ2OWU2Li5jZjQzZjI4IDEwMDY0NAotLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYwotKysrIGIvZ2NjL2NwcGRlZmF1bHQuYwotQEAgLTM1LDYgKzM1LDMwIEBACi0gIyB1bmRlZiBDUk9TU19JTkNMVURFX0RJUgotICNlbmRpZgotIAotK3N0YXRpYyBjaGFyIEdQTFVTUExVU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfSU5DTFVERV9ESVI7Ci0rc3RhdGljIGNoYXIgR0NDX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdDQ19JTkNMVURFX0RJUjsKLStzdGF0aWMgY2hhciBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUjsKLStzdGF0aWMgY2hhciBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSOwotK3N0YXRpYyBjaGFyIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVDsKLSsjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKLStzdGF0aWMgY2hhciBMT0NBTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBMT0NBTF9JTkNMVURFX0RJUjsKLSsjZW5kaWYKLSsjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCi0rc3RhdGljIGNoYXIgUFJFRklYX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFBSRUZJWF9JTkNMVURFX0RJUjsKLSsjZW5kaWYKLSsjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKLStzdGF0aWMgY2hhciBGSVhFRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBGSVhFRF9JTkNMVURFX0RJUjsKLSsjZW5kaWYKLSsjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKLStzdGF0aWMgY2hhciBDUk9TU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBDUk9TU19JTkNMVURFX0RJUjsKLSsjZW5kaWYKLSsjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgotK3N0YXRpYyBjaGFyIFRPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gVE9PTF9JTkNMVURFX0RJUjsKLSsjZW5kaWYKLSsjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCi0rc3RhdGljIGNoYXIgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUjsKLSsjZW5kaWYKLSsKLSBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KLSAjaWZkZWYgSU5DTFVERV9ERUZBVUxUUwotID0gSU5DTFVERV9ERUZBVUxUUzsKLUBAIC00MiwzOCArNjYsMzggQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCi0gPSB7Ci0gI2lmZGVmIEdQTFVTUExVU19JTkNMVURFX0RJUgotICAgICAvKiBQaWNrIHVwIEdOVSBDKysgZ2VuZXJpYyBpbmNsdWRlIGZpbGVzLiAgKi8KLS0gICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAotKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCi0gICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSCi0gICAgIC8qIFBpY2sgdXAgR05VIEMrKyB0YXJnZXQtZGVwZW5kZW50IGluY2x1ZGUgZmlsZXMuICAqLwotLSAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKLSsgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCi0gICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCi0gI2VuZGlmCi0gI2lmZGVmIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUgotICAgICAvKiBQaWNrIHVwIEdOVSBDKysgYmFja3dhcmQgYW5kIGRlcHJlY2F0ZWQgaW5jbHVkZSBmaWxlcy4gICovCi0tICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKLSsgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAotICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAotICNlbmRpZgotICNpZmRlZiBHQ0NfSU5DTFVERV9ESVIKLSAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLwotLSAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKLSsgICAgeyBHQ0NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKLSAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KLS0gICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKLSsgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVIsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCi0gICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCi0tICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKLS0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAotKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAyIH0sCi0rICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCi0tICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwIH0sCi0rICAgIHsgUFJFRklYX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAwLCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCi0gICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZml4aW5jbHVkZXMuICAqLwotLSAgICB7IEZJWEVEX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwKLSsgICAgeyBGSVhFRF9JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsCi0gICAgICAgLyogQSBtdWx0aWxpYiBzdWZmaXggbmVlZHMgYWRkaW5nIGlmIGRpZmZlcmVudCBtdWx0aWxpYnMgdXNlCi0gCSBkaWZmZXJlbnQgaGVhZGVycy4gICovCi0gI2lmZGVmIFNZU1JPT1RfSEVBREVSU19TVUZGSVhfU1BFQwotQEAgLTg1LDE2ICsxMDksMTYgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCi0gI2VuZGlmCi0gI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCi0gICAgIC8qIE9uZSBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLwotLSAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAotKyAgICB7IENST1NTX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAotICNlbmRpZgotICNpZmRlZiBUT09MX0lOQ0xVREVfRElSCi0gICAgIC8qIEFub3RoZXIgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KLS0gICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCi0rICAgIHsgVE9PTF9JTkNMVURFX0RJUlZBUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAotICNlbmRpZgotICNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKLSAgICAgLyogL3Vzci9pbmNsdWRlIGNvbWVzIGRlYWQgbGFzdC4gICovCi0tICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKLS0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAotKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCi0rICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKLSAjZW5kaWYKLSAgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0KLSAgIH07Ci1kaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuaCBiL2djYy9jcHBkZWZhdWx0LmgKLWluZGV4IDMwYjZmZWQuLjJlZjk2YjcgMTAwNjQ0Ci0tLS0gYS9nY2MvY3BwZGVmYXVsdC5oCi0rKysgYi9nY2MvY3BwZGVmYXVsdC5oCi1AQCAtMzMsNyArMzMsOCBAQAotIAotIHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUKLSB7Ci0tICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCi0rICBjb25zdCBjaGFyICpmbmFtZTsgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLwotKwotICAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQotIAkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLwotICAgY29uc3QgY2hhciBjcGx1c3BsdXM7CQkvKiBPbmx5IGxvb2sgaGVyZSBpZiB3ZSdyZSBjb21waWxpbmcgQysrLiAgKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU2OTg0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi1TZWFyY2ggdGFyZ2V0IHN5c3Jvb3QgZ2NjIHZlcnNpb24gc3BlY2lmaWMgZGlycyB3aXRoIG11bHRpbGliLgotCi1XZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KLTxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KLXdoaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZSAKLWNvZGUgYmVsb3cpLiA8dGFyZ2V0LXN5cz4gaXMgJ21hY2hpbmUnIGluIGdjYydzIHRlcm1pbm9sb2d5LiBXZSB1c2UKLXRoZXNlIGRpcmVjdG9yaWVzIHNvIHRoYXQgbXVsdGlwbGUgZ2NjIHZlcnNpb25zIGNvdWxkIGluIHRoZW9yeSAKLWNvLWV4aXN0IG9uIHRhcmdldC4KLQotV2Ugb25seSB3YW50IHRvIGJ1aWxkIG9uZSBnY2MtY3Jvc3MtY2FuYWRpYW4gcGVyIGFyY2ggYW5kIGhhdmUgdGhpcyB3b3JrIAotZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgotPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4gbWlwczY0LXBvbGttbGxpYjMyLWxpbnV4IAotaXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgotCi1UaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIgaXM6Ci0KLTxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KLTxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCi08c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LwotPHN5c3Jvb3Q+L2xpYjMyLwotPHN5c3Jvb3Q+L3Vzci9saWIzMi8KLQotd2hpY2ggbWVhbnMgdGhhdCB0aGUgbGliMzIgY3J0YmVnaW4ubyB3aWxsIGJlIGZvdW5kIGFuZCB0aGUgbGliNjQgb25lcwotd2lsbCBub3Qgd2hpY2ggbGVhZHMgdG8gY29tcGlsZXIgZmFpbHVyZXMuCi0KLVRoaXMgcGF0Y2ggaW5qZWN0cyBhIG11bHRpbGliIHZlcnNpb24gb2YgdGhhdCBwYXRoIGZpcnN0IHNvIHRoZSBsaWI2NAotYmluYXJpZXMgY2FuIGJlIGZvdW5kIGZpcnN0LiBXaXRoIHRoaXMgY2hhbmdlIHRoZSBzZWFyY2ggcGF0aCBiZWNvbWVzOgotCi08c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCi08c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCi08c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCi08c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLwotPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCi08c3lzcm9vdD4vbGliMzIvCi08c3lzcm9vdD4vdXNyL2xpYjMyLwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVJQIDIwMTUvNy8zMQotCi1JbmRleDogZ2NjLTUuMi4wL2djYy9nY2MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy01LjIuMC5vcmlnL2djYy9nY2MuYwotKysrIGdjYy01LjIuMC9nY2MvZ2NjLmMKLUBAIC0yMzA1LDcgKzIzMDUsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKLSAgICAgICBpZiAocGF0aCA9PSBOVUxMKQotIAl7Ci0gCSAgbGVuID0gcGF0aHMtPm1heF9sZW4gKyBleHRyYV9zcGFjZSArIDE7Ci0tCSAgbGVuICs9IE1BWCAoTUFYIChzdWZmaXhfbGVuLCBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7Ci0rCSAgbGVuICs9IE1BWCAoKHN1ZmZpeF9sZW4gKyBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7Ci0gCSAgcGF0aCA9IFhORVdWRUMgKGNoYXIsIGxlbik7Ci0gCX0KLSAKLUBAIC0yMzE3LDYgKzIzMTcsMzMgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4Ci0gCSAgLyogTG9vayBmaXJzdCBpbiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5LiAgKi8KLSAJICBpZiAoIXNraXBfbXVsdGlfZGlyKQotIAkgICAgewotKwkgICAgICBpZiAoIShwbC0+b3NfbXVsdGlsaWIgPyBza2lwX211bHRpX29zX2RpciA6IHNraXBfbXVsdGlfZGlyKSkKLSsJICAgICAgICB7Ci0rCSAgICAgICAgICBjb25zdCBjaGFyICp0aGlzX211bHRpOwotKwkgICAgICAgICAgc2l6ZV90IHRoaXNfbXVsdGlfbGVuOwotKwotKwkgICAgICAgICAgaWYgKHBsLT5vc19tdWx0aWxpYikKLSsJCSAgICB7Ci0rCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfb3NfZGlyOwotKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9vc19kaXJfbGVuOwotKwkJICAgIH0KLSsJICAgICAgICAgIGVsc2UKLSsJCSAgICB7Ci0rCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfZGlyOwotKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9kaXJfbGVuOwotKwkJICAgIH0KLSsKLSsJICAgICAgICAgIC8qIExvb2sgaW4gbXVsdGlsaWIgTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeSBmaXJzdCAqLwotKwkgICAgICAgICAgaWYgKHRoaXNfbXVsdGlfbGVuKQotKwkgICAgICAgICAgICB7Ci0rCQkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIHRoaXNfbXVsdGksIHRoaXNfbXVsdGlfbGVuICsgMSk7Ci0rCSAgICAgICAgICAgICAgbWVtY3B5IChwYXRoICsgbGVuICsgdGhpc19tdWx0aV9sZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOwotKwkgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKLSsJICAgICAgICAgICAgICAgIGlmIChyZXQpCi0rCQkgICAgICAgICAgYnJlYWs7Ci0rCSAgICAgICAgICAgIH0KLSsJICAgICAgICB9Ci0rCi0gCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7Ci0gCSAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKLSAJICAgICAgaWYgKHJldCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NS1nY2MtNDgzLXVuaXZlcnNhbC1pbml0aWFsaXplci1uby13YXJuaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY1LWdjYy00ODMtdW5pdmVyc2FsLWluaXRpYWxpemVyLW5vLXdhcm5pbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZTIyN2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY1LWdjYy00ODMtdW5pdmVyc2FsLWluaXRpYWxpemVyLW5vLXdhcm5pbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotRml4IGZvciBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01MzExOQotd3Jvbmcgd2FybmluZyB3aGVuIHVzaW5nIHRoZSB1bml2ZXJzYWwgemVybyBpbml0aWFsaXplciB7MH0KLQotQmFja3BvcnRlZCB0byBHQ0MgNC44LjMKLQotU3ViamVjdDogMjAxNC0wNi0wNSAgUy4gR2lsbGVzICA8c2dpbGxlc0B0ZXJwbWFpbC51bWQuZWR1PgotWC1HaXQtVXJsOiBodHRwOi8vcmVwby5vci5jei93L29mZmljaWFsLWdjYy5naXQvY29tbWl0ZGlmZl9wbGFpbi85NWNkZjNmZGYyZDQ0MGViNzc3NWRlZjhlMzVhYjk3MDY1MWMzM2Q5P2hwPTE0YTMwOTNlOTk0MzkzN2NiYzYzZGZiZjRkNTFjYTYwZjgzMjViMjkKLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxMTI4OSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotLS0tIGdjYy00LjguMy5vcmcvZ2NjL2MvYy10eXBlY2suYwkyMDE0LTA4LTAzIDIwOjUyOjA5LjI1NzA0MjEzNyArMDIwMAotKysrIGdjYy00LjguMy9nY2MvYy9jLXR5cGVjay5jCTIwMTQtMDgtMDMgMjA6NTc6MTAuNjQ1MDQyNjE0ICswMjAwCi1AQCAtNjIsOSArNjIsOSBAQAotICAgIGlmIGV4cHIub3JpZ2luYWxfY29kZSA9PSBTSVpFT0ZfRVhQUi4gICovCi0gdHJlZSBjX2xhc3Rfc2l6ZW9mX2FyZzsKLSAKLS0vKiBOb256ZXJvIGlmIHdlJ3ZlIGFscmVhZHkgcHJpbnRlZCBhICJtaXNzaW5nIGJyYWNlcyBhcm91bmQgaW5pdGlhbGl6ZXIiCi0tICAgbWVzc2FnZSB3aXRoaW4gdGhpcyBpbml0aWFsaXplci4gICovCi0tc3RhdGljIGludCBtaXNzaW5nX2JyYWNlc19tZW50aW9uZWQ7Ci0rLyogTm9uemVybyBpZiB3ZSBtaWdodCBuZWVkIHRvIHByaW50IGEgIm1pc3NpbmcgYnJhY2VzIGFyb3VuZAotKyAgIGluaXRpYWxpemVyIiBtZXNzYWdlIHdpdGhpbiB0aGlzIGluaXRpYWxpemVyLiAgKi8KLStzdGF0aWMgaW50IGZvdW5kX21pc3NpbmdfYnJhY2VzOwotIAotIHN0YXRpYyBpbnQgcmVxdWlyZV9jb25zdGFudF92YWx1ZTsKLSBzdGF0aWMgaW50IHJlcXVpcmVfY29uc3RhbnRfZWxlbWVudHM7Ci1AQCAtNjM3OSw2ICs2Mzc5LDkgQEAKLSAvKiAxIGlmIHRoaXMgY29uc3RydWN0b3IgaXMgZXJyb25lb3VzIHNvIGZhci4gICovCi0gc3RhdGljIGludCBjb25zdHJ1Y3Rvcl9lcnJvbmVvdXM7Ci0gCi0rLyogMSBpZiB0aGlzIGNvbnN0cnVjdG9yIGlzIHRoZSB1bml2ZXJzYWwgemVybyBpbml0aWFsaXplciB7IDAgfS4gICovCi0rc3RhdGljIGludCBjb25zdHJ1Y3Rvcl96ZXJvaW5pdDsKLSsKLSAvKiBTdHJ1Y3R1cmUgZm9yIG1hbmFnaW5nIHBlbmRpbmcgaW5pdGlhbGl6ZXIgZWxlbWVudHMsIG9yZ2FuaXplZCBhcyBhbgotICAgIEFWTCB0cmVlLiAgKi8KLSAKLUBAIC02NTQwLDcgKzY1NDMsNyBAQAotICAgY29uc3RydWN0b3Jfc3RhY2sgPSAwOwotICAgY29uc3RydWN0b3JfcmFuZ2Vfc3RhY2sgPSAwOwotIAotLSAgbWlzc2luZ19icmFjZXNfbWVudGlvbmVkID0gMDsKLSsgIGZvdW5kX21pc3NpbmdfYnJhY2VzID0gMDsKLSAKLSAgIHNwZWxsaW5nX2Jhc2UgPSAwOwotICAgc3BlbGxpbmdfc2l6ZSA9IDA7Ci1AQCAtNjYzNSw2ICs2NjM4LDcgQEAKLSAgIGNvbnN0cnVjdG9yX3R5cGUgPSB0eXBlOwotICAgY29uc3RydWN0b3JfaW5jcmVtZW50YWwgPSAxOwotICAgY29uc3RydWN0b3JfZGVzaWduYXRlZCA9IDA7Ci0rICBjb25zdHJ1Y3Rvcl96ZXJvaW5pdCA9IDE7Ci0gICBkZXNpZ25hdG9yX2RlcHRoID0gMDsKLSAgIGRlc2lnbmF0b3JfZXJyb25lb3VzID0gMDsKLSAKLUBAIC02ODMyLDExICs2ODM2LDggQEAKLSAJc2V0X25vbmluY3JlbWVudGFsX2luaXQgKGJyYWNlZF9pbml0X29ic3RhY2spOwotICAgICB9Ci0gCi0tICBpZiAoaW1wbGljaXQgPT0gMSAmJiB3YXJuX21pc3NpbmdfYnJhY2VzICYmICFtaXNzaW5nX2JyYWNlc19tZW50aW9uZWQpCi0tICAgIHsKLS0gICAgICBtaXNzaW5nX2JyYWNlc19tZW50aW9uZWQgPSAxOwotLSAgICAgIHdhcm5pbmdfaW5pdCAoT1BUX1dtaXNzaW5nX2JyYWNlcywgIm1pc3NpbmcgYnJhY2VzIGFyb3VuZCBpbml0aWFsaXplciIpOwotLSAgICB9Ci0rICBpZiAoaW1wbGljaXQgPT0gMSkKLSsgICAgZm91bmRfbWlzc2luZ19icmFjZXMgPSAxOwotIAotICAgaWYgKFRSRUVfQ09ERSAoY29uc3RydWN0b3JfdHlwZSkgPT0gUkVDT1JEX1RZUEUKLSAJICAgfHwgVFJFRV9DT0RFIChjb25zdHJ1Y3Rvcl90eXBlKSA9PSBVTklPTl9UWVBFKQotQEAgLTY5NjksMTYgKzY5NzAsMjMgQEAKLSAJfQotICAgICB9Ci0gCi0rICBpZiAodmVjX3NhZmVfbGVuZ3RoIChjb25zdHJ1Y3Rvcl9lbGVtZW50cykgIT0gMSkKLSsgICAgY29uc3RydWN0b3JfemVyb2luaXQgPSAwOwotKwotKyAgLyogV2FybiB3aGVuIHNvbWUgc3RydWN0cyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBkaXJlY3QgYWdncmVnYXRpb24uICAqLwotKyAgaWYgKCFpbXBsaWNpdCAmJiBmb3VuZF9taXNzaW5nX2JyYWNlcyAmJiB3YXJuX21pc3NpbmdfYnJhY2VzCi0rICAgICAgJiYgIWNvbnN0cnVjdG9yX3plcm9pbml0KQotKyAgICB7Ci0rICAgICAgd2FybmluZ19pbml0IChPUFRfV21pc3NpbmdfYnJhY2VzLAotKwkJICAgICJtaXNzaW5nIGJyYWNlcyBhcm91bmQgaW5pdGlhbGl6ZXIiKTsKLSsgICAgfQotKwotICAgLyogV2FybiB3aGVuIHNvbWUgc3RydWN0IGVsZW1lbnRzIGFyZSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8uICAqLwotICAgaWYgKHdhcm5fbWlzc2luZ19maWVsZF9pbml0aWFsaXplcnMKLSAgICAgICAmJiBjb25zdHJ1Y3Rvcl90eXBlCi0gICAgICAgJiYgVFJFRV9DT0RFIChjb25zdHJ1Y3Rvcl90eXBlKSA9PSBSRUNPUkRfVFlQRQotICAgICAgICYmIGNvbnN0cnVjdG9yX3VuZmlsbGVkX2ZpZWxkcykKLSAgICAgewotLQlib29sIGNvbnN0cnVjdG9yX3plcm9pbml0ID0KLS0JICh2ZWNfc2FmZV9sZW5ndGggKGNvbnN0cnVjdG9yX2VsZW1lbnRzKSA9PSAxCi0tCSAgJiYgaW50ZWdlcl96ZXJvcCAoKCpjb25zdHJ1Y3Rvcl9lbGVtZW50cylbMF0udmFsdWUpKTsKLS0KLSAJLyogRG8gbm90IHdhcm4gZm9yIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMgb3IgemVyby1sZW5ndGggYXJyYXlzLiAgKi8KLSAJd2hpbGUgKGNvbnN0cnVjdG9yX3VuZmlsbGVkX2ZpZWxkcwotIAkgICAgICAgJiYgKCFERUNMX1NJWkUgKGNvbnN0cnVjdG9yX3VuZmlsbGVkX2ZpZWxkcykKLUBAIC04MDkzLDYgKzgxMDEsOSBAQAotICAgZGVzaWduYXRvcl9kZXB0aCA9IDA7Ci0gICBkZXNpZ25hdG9yX2Vycm9uZW91cyA9IDA7Ci0gCi0rICBpZiAoIWltcGxpY2l0ICYmIHZhbHVlLnZhbHVlICYmICFpbnRlZ2VyX3plcm9wICh2YWx1ZS52YWx1ZSkpCi0rICAgIGNvbnN0cnVjdG9yX3plcm9pbml0ID0gMDsKLSsKLSAgIC8qIEhhbmRsZSBzdXBlcmZsdW91cyBicmFjZXMgYXJvdW5kIHN0cmluZyBjc3QgYXMgaW4KLSAgICAgIGNoYXIgeFtdID0geyJmb28ifTsgKi8KLSAgIGlmIChzdHJpbmdfZmxhZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY2LWN4eGZsYWdzLWZvci1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Ni1jeHhmbGFncy1mb3ItYnVpbGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMDVlMjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY2LWN4eGZsYWdzLWZvci1idWlsZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi1GaXggdmFyaW91cyBfRk9SX0JVSUxEIGFuZCByZWxhdGVkIHZhcmlhYmxlcwotCi1XaGVuIGRvaW5nIGEgRk9SX0JVSUxEIHRoaW5nLCB5b3UgaGF2ZSB0byBvdmVycmlkZSBDRkxBR1Mgd2l0aAotQ0ZMQUdTX0ZPUl9CVUlMRC4gQW5kIGlmIHlvdSB1c2UgQysrLCB5b3UgYWxzbyBoYXZlIHRvIG92ZXJyaWRlCi1DWFhGTEFHUyB3aXRoIENYWEZMQUdTX0ZPUl9CVUlMRC4KLVdpdGhvdXQgdGhpcywgd2hlbiBidWlsZGluZyBmb3IgbWluZ3csIHlvdSBlbmQgdXAgdHJ5aW5nIHRvIHVzZQotdGhlIG1pbmd3IGhlYWRlcnMgZm9yIGEgaG9zdCBidWlsZC4KLQotVGhlIHNhbWUgZ29lcyBmb3Igb3RoZXIgdmFyaWFibGVzIGFzIHdlbGwsIHN1Y2ggYXMgQ1BQRkxBR1MsCi1DUFAsIGFuZCBHTVBJTkMuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBQZXRlciBTZWViYWNoIDxwZXRlci5zZWViYWNoQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+Ci0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCA5MzcwMTc0Li4wMTFjMjlhIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuaW4KLSsrKyBiL01ha2VmaWxlLmluCi1AQCAtMTUyLDYgKzE1Miw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCi0gCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAotIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCi0gCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCi0rCUNQUEZMQUdTPSIkKENQUEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1BQRkxBR1M7IFwKLSAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXAotIAlDWFhGTEFHUz0iJChDWFhGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENYWEZMQUdTOyBcCi0gCUdDSj0iJChHQ0pfRk9SX0JVSUxEKSI7IGV4cG9ydCBHQ0o7IFwKLUBAIC0xNzAsNiArMTcxLDkgQEAgQlVJTERfRVhQT1JUUyA9IFwKLSAjIGJ1aWx0IGZvciB0aGUgYnVpbGQgc3lzdGVtIHRvIG92ZXJyaWRlIHRob3NlIGluIEJBU0VfRkxBR1NfVE9fUEFTUy4KLSBFWFRSQV9CVUlMRF9GTEFHUyA9IFwKLSAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIiBcCi0rCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiIFwKLSsJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiIFwKLSsJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSIgXAotIAlMREZMQUdTPSIkKExERkxBR1NfRk9SX0JVSUxEKSIKLSAKLSAjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYnVpbHQgZm9yIHRoZSBob3N0IHN5c3RlbS4KLUBAIC0xODcsNiArMTkxLDcgQEAgSE9TVF9TVUJESVIgPSBAaG9zdF9zdWJkaXJACi0gSE9TVF9FWFBPUlRTID0gXAotIAkkKEJBU0VfRVhQT1JUUykgXAotIAlDQz0iJChDQykiOyBleHBvcnQgQ0M7IFwKLSsJQ1BQPSIkKENDKSAtRSI7IGV4cG9ydCBDUFA7IFwKLSAJQURBX0NGTEFHUz0iJChBREFfQ0ZMQUdTKSI7IGV4cG9ydCBBREFfQ0ZMQUdTOyBcCi0gCUNGTEFHUz0iJChDRkxBR1MpIjsgZXhwb3J0IENGTEFHUzsgXAotIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAotQEAgLTcxMSw2ICs3MTUsNyBAQCBCQVNFX0ZMQUdTX1RPX1BBU1MgPSBcCi0gCSJDQ19GT1JfQlVJTEQ9JChDQ19GT1JfQlVJTEQpIiBcCi0gCSJDRkxBR1NfRk9SX0JVSUxEPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKLSAJIkNYWF9GT1JfQlVJTEQ9JChDWFhfRk9SX0JVSUxEKSIgXAotKwkiQ1hYRkxBR1NfRk9SX0JVSUxEPSQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAotIAkiRVhQRUNUPSQoRVhQRUNUKSIgXAotIAkiRkxFWD0kKEZMRVgpIiBcCi0gCSJJTlNUQUxMPSQoSU5TVEFMTCkiIFwKLWRpZmYgLS1naXQgYS9NYWtlZmlsZS50cGwgYi9NYWtlZmlsZS50cGwKLWluZGV4IDFlYTE5NTQuLjc4YTU5YzMgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS50cGwKLSsrKyBiL01ha2VmaWxlLnRwbAotQEAgLTE1NCw2ICsxNTQsNyBAQCBCVUlMRF9FWFBPUlRTID0gXAotIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCi0gCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKLSAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKLSsJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDUFBGTEFHUzsgXAotIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCi0gCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYRkxBR1M7IFwKLSAJR0NKPSIkKEdDSl9GT1JfQlVJTEQpIjsgZXhwb3J0IEdDSjsgXAotQEAgLTE3Miw2ICsxNzMsOSBAQCBCVUlMRF9FWFBPUlRTID0gXAotICMgYnVpbHQgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhvc2UgaW4gQkFTRV9GTEFHU19UT19QQVNTLgotIEVYVFJBX0JVSUxEX0ZMQUdTID0gXAotIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKLSsJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAotKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSIgXAotKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIiBcCi0gCUxERkxBR1M9IiQoTERGTEFHU19GT1JfQlVJTEQpIgotIAotICMgVGhpcyBpcyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBidWlsdCBmb3IgdGhlIGhvc3Qgc3lzdGVtLgotQEAgLTE4OSw2ICsxOTMsNyBAQCBIT1NUX1NVQkRJUiA9IEBob3N0X3N1YmRpckAKLSBIT1NUX0VYUE9SVFMgPSBcCi0gCSQoQkFTRV9FWFBPUlRTKSBcCi0gCUNDPSIkKENDKSI7IGV4cG9ydCBDQzsgXAotKwlDUFA9IiQoQ0MpIC1FIjsgZXhwb3J0IENQUDsgXAotIAlBREFfQ0ZMQUdTPSIkKEFEQV9DRkxBR1MpIjsgZXhwb3J0IEFEQV9DRkxBR1M7IFwKLSAJQ0ZMQUdTPSIkKENGTEFHUykiOyBleHBvcnQgQ0ZMQUdTOyBcCi0gCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCi1kaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCi1pbmRleCBjZDViYzRhLi45OGFlNGY0IDEwMDY0NAotLS0tIGEvZ2NjL01ha2VmaWxlLmluCi0rKysgYi9nY2MvTWFrZWZpbGUuaW4KLUBAIC03NjIsNyArNzYyLDcgQEAgQlVJTERfTElOS0VSRkxBR1MgPSAkKEJVSUxEX0NYWEZMQUdTKQotICMgTmF0aXZlIGxpbmtlciBhbmQgcHJlcHJvY2Vzc29yIGZsYWdzLiAgRm9yIHgtZnJhZ21lbnQgb3ZlcnJpZGVzLgotIEJVSUxEX0xERkxBR1M9QEJVSUxEX0xERkxBR1NACi0gQlVJTERfQ1BQRkxBR1M9IC1JLiAtSSQoQEQpIC1JJChzcmNkaXIpIC1JJChzcmNkaXIpLyQoQEQpIFwKLS0JCS1JJChzcmNkaXIpLy4uL2luY2x1ZGUgQElOQ0lOVExAICQoQ1BQSU5DKSAkKENQUEZMQUdTKQotKwkJLUkkKHNyY2RpcikvLi4vaW5jbHVkZSBASU5DSU5UTEAgJChDUFBJTkMpICQoQ1BQRkxBR1NfRk9SX0JVSUxEKQotIAotICMgQWN0dWFsIG5hbWUgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBhIG5hdGl2ZSBjb21waWxlci4KLSBHQ0NfSU5TVEFMTF9OQU1FIDo9ICQoc2hlbGwgZWNobyBnY2N8c2VkICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJykKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggYzdhYzE0Yi4uNWFjNjNlNCAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC0xMTUyMSw3ICsxMTUyMSw3IEBAIGVsc2UKLSAJQ0M9IiR7Q0NfRk9SX0JVSUxEfSIgQ0ZMQUdTPSIke0NGTEFHU19GT1JfQlVJTER9IiBcCi0gCUNYWD0iJHtDWFhfRk9SX0JVSUxEfSIgQ1hYRkxBR1M9IiR7Q1hYRkxBR1NfRk9SX0JVSUxEfSIgXAotIAlMRD0iJHtMRF9GT1JfQlVJTER9IiBMREZMQUdTPSIke0xERkxBR1NfRk9SX0JVSUxEfSIgXAotLQlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1ER0VORVJBVE9SX0ZJTEUiIFwKLSsJR01QSU5DPSIiIENQUEZMQUdTPSIke0NQUEZMQUdTX0ZPUl9CVUlMRH0gLURHRU5FUkFUT1JfRklMRSIgXAotIAkke3JlYWxzcmNkaXJ9L2NvbmZpZ3VyZSBcCi0gCQktLWVuYWJsZS1sYW5ndWFnZXM9JHtlbmFibGVfbGFuZ3VhZ2VzLWFsbH0gXAotIAkJLS10YXJnZXQ9JHRhcmdldF9hbGlhcyAtLWhvc3Q9JGJ1aWxkX2FsaWFzIC0tYnVpbGQ9JGJ1aWxkX2FsaWFzCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IDUwODU2ZTYuLjE3YTRkZmQgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtMTYzMyw3ICsxNjMzLDcgQEAgZWxzZQotIAlDQz0iJHtDQ19GT1JfQlVJTER9IiBDRkxBR1M9IiR7Q0ZMQUdTX0ZPUl9CVUlMRH0iIFwKLSAJQ1hYPSIke0NYWF9GT1JfQlVJTER9IiBDWFhGTEFHUz0iJHtDWFhGTEFHU19GT1JfQlVJTER9IiBcCi0gCUxEPSIke0xEX0ZPUl9CVUlMRH0iIExERkxBR1M9IiR7TERGTEFHU19GT1JfQlVJTER9IiBcCi0tCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLURHRU5FUkFUT1JfRklMRSIgXAotKwlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1NfRk9SX0JVSUxEfSAtREdFTkVSQVRPUl9GSUxFIiBcCi0gCSR7cmVhbHNyY2Rpcn0vY29uZmlndXJlIFwKLSAJCS0tZW5hYmxlLWxhbmd1YWdlcz0ke2VuYWJsZV9sYW5ndWFnZXMtYWxsfSBcCi0gCQktLXRhcmdldD0kdGFyZ2V0X2FsaWFzIC0taG9zdD0kYnVpbGRfYWxpYXMgLS1idWlsZD0kYnVpbGRfYWxpYXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Ny1maXgtYXJtLXRodW1iLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY3LWZpeC1hcm0tdGh1bWIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMjYyZTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY3LWZpeC1hcm0tdGh1bWIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCi0KLVNpZ25lZC1vZmYtYnk6IERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KLS0tLQotCi0yMDE1LTExLTI1ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAcmVkaGF0LmNvbT4KLQotCVBSIHJ0bC1vcHRpbWl6YXRpb24vNjc5NTQKLQkqIGxyYS1jb25zdHJhaW50cy5jIChjdXJyX2luc25fdHJhbnNmb3JtKTogQWRkIGNoZWNrIG9uIHNjcmF0Y2gKLQlwc2V1ZG8gd2hlbiBjaGFuZ2UgY2xhc3MgdG8gTk9fUkVHUy4gIEFkZCBhbiBhc3NlcnQuCi0KLQotCi1naXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMzA4OTQgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0Ci0tLS0KLQotZGlmZiAtLWdpdCBhL2djYy9scmEtY29uc3RyYWludHMuYyBiL2djYy9scmEtY29uc3RyYWludHMuYwotaW5kZXggNDY3MGU4MS4uYzYyYmY2YSAxMDA2NDQKLS0tLSBhL2djYy9scmEtY29uc3RyYWludHMuYwotKysrIGIvZ2NjL2xyYS1jb25zdHJhaW50cy5jCi1AQCAtMzcyNSw3ICszNzI1LDggQEAgY3Vycl9pbnNuX3RyYW5zZm9ybSAoYm9vbCBjaGVja19vbmx5X3ApCi0gCQkgYXNzaWdtZW50IHBhc3MgYW5kIHRoZSBzY3JhdGNoIHBzZXVkbyB3aWxsIGJlCi0gCQkgc3BpbGxlZC4gIFNwaWxsZWQgc2NyYXRjaCBwc2V1ZG9zIGFyZSB0cmFuc2Zvcm1lZAotIAkJIGJhY2sgdG8gc2NyYXRjaGVzIGF0IHRoZSBMUkEgZW5kLiAgKi8KLS0JICAgICAgJiYgbHJhX2Zvcm1lcl9zY3JhdGNoX29wZXJhbmRfcCAoY3Vycl9pbnNuLCBpKSkKLSsJICAgICAgJiYgbHJhX2Zvcm1lcl9zY3JhdGNoX29wZXJhbmRfcCAoY3Vycl9pbnNuLCBpKQotKwkgICAgICAmJiBscmFfZm9ybWVyX3NjcmF0Y2hfcCAoUkVHTk8gKG9wKSkpCi0gCSAgICB7Ci0gCSAgICAgIGludCByZWdubyA9IFJFR05PIChvcCk7Ci0gCSAgICAgIGxyYV9jaGFuZ2VfY2xhc3MgKHJlZ25vLCBOT19SRUdTLCAiICAgICAgQ2hhbmdlIHRvIiwgdHJ1ZSk7Ci1AQCAtMzczNCw2ICszNzM1LDggQEAgY3Vycl9pbnNuX3RyYW5zZm9ybSAoYm9vbCBjaGVja19vbmx5X3ApCi0gCQkgICBzcGlsbGVkIHBzZXVkbyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBzdWNoIGluc24sIHRoZQotIAkJICAgY3VycmVudCBvbmUuICAqLwotIAkJcmVnX3JlbnVtYmVyW3JlZ25vXSA9IC0xOwotKwkgICAgICBscmFfYXNzZXJ0IChiaXRtYXBfc2luZ2xlX2JpdF9zZXRfcAotKwkJCSAgKCZscmFfcmVnX2luZm9bUkVHTk8gKG9wKV0uaW5zbl9iaXRtYXApKTsKLSAJICAgIH0KLSAJICAvKiBXZSBjYW4gZG8gYW4gb3B0aW9uYWwgcmVsb2FkLiAgSWYgdGhlIHBzZXVkbyBnb3QgYSBoYXJkCi0gCSAgICAgcmVnLCB3ZSBtaWdodCBpbXByb3ZlIHRoZSBjb2RlIHRocm91Z2ggaW5oZXJpdGFuY2UuICBJZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY3LWdjYy1tdXNsLXN1cHBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjctZ2NjLW11c2wtc3VwcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEwYjVhZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjctZ2NjLW11c2wtc3VwcG9ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0jIEhHIGNoYW5nZXNldCBwYXRjaAotIyBQYXJlbnQgZTViNDU2NGYyNDlmODYzNDE5NGJkYWJlZjRiMzA1N2QwZTU0ZWU5NwotQWRkaW5nIC1tbXVzbCBhcyBhIG11c2wgbGliYyBzcGVjaWZpZXIsIGFuZCB0aGUgbmVjZXNzYXJ5IGhhY2tzIGZvciBpdCB0byBrbm93IGhvdyB0byBmaW5kIG11c2wncyBkeW5hbWljIGxpbmtlci4KLVVwc3RyZWFtLVN0YXR1czogYmFja3BvcnQgW3BhcnRpYWxdCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi0KLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy5nY2MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnLmdjYwkyMDE0LTA0LTIyIDIyOjQ0OjE3LjE1MzU2NzE1MCAtMDcwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnLmdjYwkyMDE0LTA0LTIzIDIzOjU0OjMxLjQyNzM1NzA1MSAtMDcwMAotQEAgLTU5NCw3ICs1OTQsNyBAQAotIGVzYWMKLSAKLSAjIENvbW1vbiBDIGxpYnJhcmllcy4KLS10bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBMSUJDX0dMSUJDPTEgTElCQ19VQ0xJQkM9MiBMSUJDX0JJT05JQz0zIgotK3RtX2RlZmluZXM9IiR0bV9kZWZpbmVzIExJQkNfR0xJQkM9MSBMSUJDX1VDTElCQz0yIExJQkNfQklPTklDPTMgTElCQ19NVVNMPTQiCi0gCi0gIyAzMi1iaXQgeDg2IHByb2Nlc3NvcnMgc3VwcG9ydGVkIGJ5IC0td2l0aC1hcmNoPS4gIEVhY2ggcHJvY2Vzc29yCi0gIyBNVVNUIGJlIHNlcGFyYXRlZCBieSBleGFjdGx5IG9uZSBzcGFjZS4KLUBAIC03MTksNiArNzE5LDkgQEAKLSAgICAgKi0qLSp1Y2xpYmMqKQotICAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX1VDTElCQyIKLSAgICAgICA7OwotKyAgICAqLSotKm11c2wqKQotKyAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX01VU0wiCi0rICAgICAgOzsKLSAgICAgKikKLSAgICAgICB0bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBERUZBVUxUX0xJQkM9TElCQ19HTElCQyIKLSAgICAgICA7OwotQEAgLTIzMjgsNiArMjMzMSwxMSBAQAotIAkgICAgcG93ZXJwYyotKi1saW51eCpwYWlyZWQqKQotIAkJdG1fZmlsZT0iJHt0bV9maWxlfSByczYwMDAvNzUwY2wuaCIgOzsKLSAJZXNhYwotKyAgICAgICAgY2FzZSAke3RhcmdldH0gaW4KLSsJICAgICotbGludXgqLW11c2wqKQotKwkJZW5hYmxlX3NlY3VyZXBsdD15ZXMgOzsKLSsJZXNhYwotKwotIAlpZiB0ZXN0IHgke2VuYWJsZV9zZWN1cmVwbHR9ID0geHllczsgdGhlbgotIAkJdG1fZmlsZT0icnM2MDAwL3NlY3VyZXBsdC5oICR7dG1fZmlsZX0iCi0gCWZpCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbGludXguaAkyMDE0LTAxLTAyIDE0OjIzOjI2LjAwMDAwMDAwMCAtMDgwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2xpbnV4LmgJMjAxNC0wNC0yNCAwMDoxMToyOS4wMzQwMjg4OTUgLTA3MDAKLUBAIC0zMiwxMCArMzIsMTIgQEAKLSAjZGVmaW5lIE9QVElPTl9HTElCQyAgKERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDKQotICNkZWZpbmUgT1BUSU9OX1VDTElCQyAoREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDKQotICNkZWZpbmUgT1BUSU9OX0JJT05JQyAoREVGQVVMVF9MSUJDID09IExJQkNfQklPTklDKQotKyNkZWZpbmUgT1BUSU9OX01VU0wgICAoREVGQVVMVF9MSUJDID09IExJQkNfTVVTTCkKLSAjZWxzZQotICNkZWZpbmUgT1BUSU9OX0dMSUJDICAobGludXhfbGliYyA9PSBMSUJDX0dMSUJDKQotICNkZWZpbmUgT1BUSU9OX1VDTElCQyAobGludXhfbGliYyA9PSBMSUJDX1VDTElCQykKLSAjZGVmaW5lIE9QVElPTl9CSU9OSUMgKGxpbnV4X2xpYmMgPT0gTElCQ19CSU9OSUMpCi0rI2RlZmluZSBPUFRJT05fTVVTTCAgIChsaW51eF9saWJjID09IExJQkNfTVVTTCkKLSAjZW5kaWYKLSAKLSAjZGVmaW5lIEdOVV9VU0VSX1RBUkdFVF9PU19DUFBfQlVJTFRJTlMoKQkJCVwKLUBAIC01MywxOCArNTUsMjEgQEAKLSAgICB1Q2xpYmMgb3IgQmlvbmljIGlzIHRoZSBkZWZhdWx0IEMgbGlicmFyeSBhbmQgd2hldGhlcgotICAgIC1tdWNsaWJjIG9yIC1tZ2xpYmMgb3IgLW1iaW9uaWMgaGFzIGJlZW4gcGFzc2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdC4gICovCi0gCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxKExJQkMxLCBMSUJDMiwgTElCQzMsIExEMSwgTEQyLCBMRDMpCVwKLS0gICIleyIgTElCQzIgIjoiIExEMiAiOzoleyIgTElCQzMgIjoiIExEMyAiOzoiIExEMSAifX0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxKExJQkMxLCBMSUJDMiwgTElCQzMsIExJQkM0LCBMRDEsIExEMiwgTEQzLCBMRDQpCVwKLSsgICIleyIgTElCQzIgIjoiIExEMiAiOzoleyIgTElCQzMgIjoiIExEMyAiOzoleyIgTElCQzQgIjoiIExENCAiOzoiIExEMSAifX19IgotIAotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQwotLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIpIFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgRywgVSwgQikKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWdsaWJjIiwgIm11Y2xpYmMiLCAibWJpb25pYyIsICJtbXVzbCIsIEcsIFUsIEIsIE0pCi0gI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQikgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm11Y2xpYmMiLCAibWdsaWJjIiwgIm1iaW9uaWMiLCBVLCBHLCBCKQotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtdWNsaWJjIiwgIm1nbGliYyIsICJtYmlvbmljIiwgIm1tdXNsIiwgVSwgRywgQiwgTSkKLSAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19CSU9OSUMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCKSBcCi0tICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWJpb25pYyIsICJtZ2xpYmMiLCAibXVjbGliYyIsIEIsIEcsIFUpCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAotKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1iaW9uaWMiLCAibWdsaWJjIiwgIm11Y2xpYmMiLCAibW11c2wiLCBCLCBHLCBVLCBNKQotKyNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibW11c2wiLCAibWdsaWJjIiwgIm11Y2xpYmMiLCAibWJpb25pYyIsIE0sIEcsIFUsIEIpCi0gI2Vsc2UKLSAjZXJyb3IgIlVuc3VwcG9ydGVkIERFRkFVTFRfTElCQyIKLSAjZW5kaWYgLyogREVGQVVMVF9MSUJDICovCi1AQCAtODQsMTYgKzg5LDE2IEBACi0gCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUgkJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIsIFVDTElCQ19EWU5BTUlDX0xJTktFUiwJXAotLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUiwgTVVTTF9EWU5BTUlDX0xJTktFUikKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSMzIJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIsIFwKLS0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSMzIpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyLCBNVVNMX0RZTkFNSUNfTElOS0VSMzIpCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUjY0CQkJCQlcCi0gICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSNjQsIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0LCBcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0KQotKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCwgTVVTTF9EWU5BTUlDX0xJTktFUjY0KQotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJYMzIJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiwgXAotLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJYMzIpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUlgzMiwgTVVTTF9EWU5BTUlDX0xJTktFUlgzMikKLSAKLSAvKiBXaGV0aGVyIHdlIGhhdmUgQmlvbmljIGxpYmMgcnVudGltZSAqLwotICN1bmRlZiBUQVJHRVRfSEFTX0JJT05JQwotQEAgLTEyNywzICsxMzIsNzQgQEAKLSAjIGRlZmluZSBUQVJHRVRfTElCQ19IQVNfRlVOQ1RJT04gbGludXhfbGliY19oYXNfZnVuY3Rpb24KLSAKLSAjZW5kaWYKLSsKLSsvKiBtdXNsIGF2b2lkcyBwcm9ibGVtYXRpYyBpbmNsdWRlcyBieSByZWFycmFuZ2luZyB0aGUgaW5jbHVkZSBkaXJlY3Rvcmllcy4KLSsgKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gY3BwZGVmYXVsdC5jICovCi0rI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9HUFAJCQlcCi0rICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwJCVwKLSsgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwJCVwKLSsgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCQlcCi0rICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCQlcCi0rICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwJXAotKyAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAotKwotKyNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCQkJXAotKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCQlcCi0rICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKLSsjZWxzZQotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCi0rI2VuZGlmCi0rCi0rI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1BSRUZJWAkJCVwKLSsgICAgeyBQUkVGSVhfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDAsIDB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfUFJFRklYCi0rI2VuZGlmCi0rCi0rI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MJCQlcCi0rICAgIHsgQ1JPU1NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwfSwKLSsjZWxzZQotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCi0rI2VuZGlmCi0rCi0rI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9UT09MCQkJXAotKyAgICB7IFRPT0xfSU5DTFVERV9ESVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfVE9PTAotKyNlbmRpZgotKwotKyNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUJCQlcCi0rICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCAwLCAwLCAwLCAxLCAyIH0sCVwKLSsgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIDAsIDAsIDAsIDEsIDAgfSwKLSsjZWxzZQotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQotKyNlbmRpZgotKwotKyNpZiBkZWZpbmVkIChDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFKSAmJiAhZGVmaW5lZCAoVEFSR0VUX1NZU1RFTV9ST09UKQotKyMgdW5kZWYgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCi0rIyBkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCi0rIyB1bmRlZiBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCi0rIyBkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQotKyNlbHNlCi0rIyB1bmRlZiBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MKLSsjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MKLSsjZW5kaWYKLSsKLSsjdW5kZWYgSU5DTFVERV9ERUZBVUxUUwotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUUwkJCQlcCi0rICB7CQkJCQkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX0dQUAkJCQlcCi0rICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9QUkVGSVgJCQlcCi0rICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwkJCQlcCi0rICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9UT09MCQkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQkJCVwKLSsgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAxLCAwLCAwIH0sCQlcCi0rICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CQkJCVwKLSsgIH0KLSsjZW5kaWYKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9saW51eC5vcHQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2xpbnV4Lm9wdAkyMDE0LTAxLTAyIDE0OjIzOjI2LjAwMDAwMDAwMCAtMDgwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2xpbnV4Lm9wdAkyMDE0LTA0LTIyIDIyOjQ0OjE3LjI4MDIzMzgxNyAtMDcwMAotQEAgLTMwLDMgKzMwLDcgQEAKLSBtdWNsaWJjCi0gVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbGliYyxMSUJDX1VDTElCQykgTmVnYXRpdmUobWJpb25pYykKLSBVc2UgdUNsaWJjIEMgbGlicmFyeQotKwotK21tdXNsCi0rVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbGliYyxMSUJDX01VU0wpIE5lZ2F0aXZlKG1nbGliYykKLStVc2UgbXVzbCBDIGxpYnJhcnkKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCTIwMTQtMDEtMDIgMTQ6MjM6MjYuMDAwMDAwMDAwIC0wODAwCi0rKysgZ2NjLTQuOS4wL2djYy9naW5jbHVkZS9zdGRkZWYuaAkyMDE0LTA0LTIyIDIyOjQ0OjE3LjI4MDIzMzgxNyAtMDcwMAotQEAgLTE4MSw2ICsxODEsNyBAQAotICNpZm5kZWYgX0dDQ19TSVpFX1QKLSAjaWZuZGVmIF9TSVpFVF8KLSAjaWZuZGVmIF9fc2l6ZV90Ci0rI2lmbmRlZiBfX0RFRklORURfc2l6ZV90IC8qIG11c2wgKi8KLSAjZGVmaW5lIF9fc2l6ZV90X18JLyogQmVPUyAqLwotICNkZWZpbmUgX19TSVpFX1RfXwkvKiBDcmF5IFVuaWNvcy9NayAqLwotICNkZWZpbmUgX1NJWkVfVAotQEAgLTE5Nyw2ICsxOTgsNyBAQAotICNkZWZpbmUgX19faW50X3NpemVfdF9oCi0gI2RlZmluZSBfR0NDX1NJWkVfVAotICNkZWZpbmUgX1NJWkVUXwotKyNkZWZpbmUgX19ERUZJTkVEX3NpemVfdCAvKiBtdXNsICovCi0gI2lmIChkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fID49IDUpKSBcCi0gICB8fCBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKLSAvKiBfX3NpemVfdCBpcyBhIHR5cGVkZWYgb24gRnJlZUJTRCA1LCBtdXN0IG5vdCB0cmFzaCBpdC4gKi8KLUBAIC0yMTQsNiArMjE2LDcgQEAKLSB0eXBlZGVmIGxvbmcgc3NpemVfdDsKLSAjZW5kaWYgLyogX19CRU9TX18gKi8KLSAjZW5kaWYgLyogIShkZWZpbmVkIChfX0dOVUdfXykgJiYgZGVmaW5lZCAoc2l6ZV90KSkgKi8KLSsjZW5kaWYgLyogX19ERUZJTkVEX3NpemVfdCAqLwotICNlbmRpZiAvKiBfX3NpemVfdCAqLwotICNlbmRpZiAvKiBfU0laRVRfICovCi0gI2VuZGlmIC8qIF9HQ0NfU0laRV9UICovCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmgJMjAxNC0wMS0wMiAxNDoyMzoyNi4wMDAwMDAwMDAgLTA4MDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmgJMjAxNC0wNC0yMyAyMzo1NToxNS4xMTQwMjQxNzUgLTA3MDAKLUBAIC0xOCwzICsxOCw0IEBACi0gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSAKLSAjZGVmaW5lIENDMV9TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAiLW1zZWN1cmUtcGx0IgotKyNkZWZpbmUgTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAiLS1zZWN1cmUtcGx0IgotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAkyMDE0LTA0LTIzIDIzOjUyOjEzLjg1NDAyMzAxNSAtMDcwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCTIwMTQtMDQtMjQgMDA6MTA6NTUuNTUwNjk1MzM0IC0wNzAwCi1AQCAtNTM4LDYgKzUzOCwxMCBAQAotICNkZWZpbmUgQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICIiCi0gI2VuZGlmCi0gCi0rI2lmbmRlZiBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDCi0rI2RlZmluZSBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICIiCi0rI2VuZGlmCi0rCi0gLyogUGFzcyAtRyB4eHggdG8gdGhlIGNvbXBpbGVyLiAgKi8KLSAjZGVmaW5lCUNDMV9TUEVDICIle0cqfSAlKGNjMV9jcHUpIiBcCi0gIiV7bWVhYmk6ICV7IW1jYWxsLSo6IC1tY2FsbC1zeXN2IH19IFwKLUBAIC01ODUsNyArNTg5LDggQEAKLSAKLSAvKiBPdmVycmlkZSB0aGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhlIGxpbmtlci4gICovCi0gI2RlZmluZQlMSU5LX1RBUkdFVF9TUEVDIFwKLS0gIEVORElBTl9TRUxFQ1QoIiIsICIgLS1vZm9ybWF0IGVsZjMyLXBvd2VycGNsZSIsICIiKQotKyAgRU5ESUFOX1NFTEVDVCgiIiwgIiAtLW9mb3JtYXQgZWxmMzItcG93ZXJwY2xlIiwgIiIpIFwKLSsgICIleyFtYnNzLXBsdDogJXshbXNlY3VyZS1wbHQ6ICUobGlua19zZWN1cmVfcGx0X2RlZmF1bHQpfX0iCi0gCi0gLyogQW55IHNwZWNpZmljIE9TIGZsYWdzLiAgKi8KLSAjZGVmaW5lIExJTktfT1NfU1BFQyAiXAotQEAgLTg5NCw2ICs4OTksNyBAQAotICAgeyAibGlua19vc19vcGVuYnNkIiwJCUxJTktfT1NfT1BFTkJTRF9TUEVDIH0sCQkJXAotICAgeyAibGlua19vc19kZWZhdWx0IiwJCUxJTktfT1NfREVGQVVMVF9TUEVDIH0sCQkJXAotICAgeyAiY2MxX3NlY3VyZV9wbHRfZGVmYXVsdCIsCUNDMV9TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyB9LAkJXAotKyAgeyAibGlua19zZWN1cmVfcGx0X2RlZmF1bHQiLAlMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDIH0sCQlcCi0gICB7ICJjcHBfb3NfYWRzIiwJCUNQUF9PU19BRFNfU1BFQyB9LAkJCVwKLSAgIHsgImNwcF9vc195ZWxsb3drbmlmZSIsCUNQUF9PU19ZRUxMT1dLTklGRV9TUEVDIH0sCQlcCi0gICB7ICJjcHBfb3NfbXZtZSIsCQlDUFBfT1NfTVZNRV9TUEVDIH0sCQkJXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY4LW11c2wtZHluYW1pYy1saW5rZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjgtbXVzbC1keW5hbWljLWxpbmtlci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA1YWM2Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjgtbXVzbC1keW5hbWljLWxpbmtlci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0jIEhHIGNoYW5nZXNldCBwYXRjaAotIyBQYXJlbnQgNjczOGZkNmY2ZmNjMmE3MmYyYmE1MjdiZGEzMzI1NjQyYWYyNjg4NQotU3VwcG9ydCBmb3IgYXJtLWxpbnV4LW11c2wuCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtwYXJ0aWFsXQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKLUBAIC04MSw2ICs4MSwyMyBAQAotICN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQwotICNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCi0gCi0rLyogRm9yIEFSTSBtdXNsIGN1cnJlbnRseSBzdXBwb3J0cyBmb3VyIGR5bmFtaWMgbGlua2VyczoKLSsgICAtIGxkLW11c2wtYXJtLnNvLjEgLSBmb3IgdGhlIEVBQkktZGVyaXZlZCBzb2Z0LWZsb2F0IEFCSQotKyAgIC0gbGQtbXVzbC1hcm1oZi5zby4xIC0gZm9yIHRoZSBFQUJJLWRlcml2ZWQgaGFyZC1mbG9hdCBBQkkKLSsgICAtIGxkLW11c2wtYXJtZWIuc28uMSAtIGZvciB0aGUgRUFCSS1kZXJpdmVkIHNvZnQtZmxvYXQgQUJJLCBFQgotKyAgIC0gbGQtbXVzbC1hcm1lYmhmLnNvLjEgLSBmb3IgdGhlIEVBQkktZGVyaXZlZCBoYXJkLWZsb2F0IEFCSSwgRUIKLSsgICBtdXNsIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxlZ2FjeSBPQUJJIG1vZGUuCi0rICAgQWxsIHRoZSBkeW5hbWljIGxpbmtlcnMgbGl2ZSBpbiAvbGliLgotKyAgIFdlIGRlZmF1bHQgdG8gc29mdC1mbG9hdCwgRUwuICovCi0rI3VuZGVmICBNVVNMX0RZTkFNSUNfTElOS0VSCi0rI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVJfRSAiJXttbGl0dGxlLWVuZGlhbjo7OmVifSIKLSsjZWxzZQotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUl9FICIle21iaWctZW5kaWFuOmVifSIKLSsjZW5kaWYKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgXAotKyAgU1lTVEVNTElCU19ESVIgImxkLW11c2wtYXJtIiBNVVNMX0RZTkFNSUNfTElOS0VSX0UgIiV7bWZsb2F0LWFiaT1oYXJkOmhmfS5zby4xIgotKwotIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCi0gICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLwotICN1bmRlZiAgTElOS19TUEVDCi1JbmRleDogZ2NjLTQuOS4yL2xpYml0bS9jb25maWcvYXJtL2h3Y2FwLmNjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvbGliaXRtL2NvbmZpZy9hcm0vaHdjYXAuY2MKLSsrKyBnY2MtNC45LjIvbGliaXRtL2NvbmZpZy9hcm0vaHdjYXAuY2MKLUBAIC00MCw3ICs0MCwxMSBAQCBpbnQgR1RNX2h3Y2FwIEhJRERFTiA9IDAKLSAKLSAjaWZkZWYgX19saW51eF9fCi0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpZmRlZiBfX0dMSUJDX18KLSAjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+Ci0rI2Vsc2UKLSsjaW5jbHVkZSA8ZmNudGwuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8ZWxmLmg+Ci0gCi0gc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKQotSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2kzODYvbGludXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eC5oCi0rKysgZ2NjLTQuOS4yL2djYy9jb25maWcvaTM4Ni9saW51eC5oCi1AQCAtMjEsMyArMjEsNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgotIAotICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLWkzODYuc28uMSIKLUluZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAotQEAgLTMwLDMgKzMwLDggQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgotKwotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLWkzODYuc28uMSIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC14ODZfNjQuc28uMSIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLW11c2wteDMyLnNvLjEiCi0rCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvbWlwcy9saW51eC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLUBAIC0yMywzICsyMyw2IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCi0gI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSIFwKLSAgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKLSsKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtbWlwcy5zby4xIgotKwotSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCi1AQCAtMzksNiArMzksMTEgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KLSAgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKLSAKLSAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCi0rCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSTjMyIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLW1pcHMuc28uMSIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1taXBzLnNvLjEiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLW11c2wtbWlwcy5zby4xIgotKwotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUk4zMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyLCBcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMikKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyLCBNVVNMX0RZTkFNSUNfTElOS0VSTjMyKQotSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCi1AQCAtMzc1LDE3ICszNzUsMjIgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKLSAjZW5kaWYKLSAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKLSAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLXBvd2VycGMuc28uMSIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1wb3dlcnBjNjQuc28uMSIKLSsKLSAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bWdsaWJjOiIgRyAiOzole21tdXNsOiIgTSAiOzoiIFUgIn19IgotICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bXVjbGliYzoiIFUgIjs6IiBHICJ9IgotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIE0pICIle211Y2xpYmM6IiBVICI7OiV7bW11c2w6IiBNICI7OiIgRyAifX0iCi0rI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIE0pICIle21nbGliYzoiIEcgIjs6JXttdWNsaWJjOiIgVSAiOzoiIE0gIn19IgotICNlbHNlCi0gI2Vycm9yICJVbnN1cHBvcnRlZCBERUZBVUxUX0xJQkMiCi0gI2VuZGlmCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUjMyIFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIpCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyLCBNVVNMX0RZTkFNSUNfTElOS0VSMzIpCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUjY0IFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCwgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQpCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSNjQsIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0LCBNVVNMX0RZTkFNSUNfTElOS0VSNjQpCi0gCi0gI3VuZGVmICBERUZBVUxUX0FTTV9FTkRJQU4KLSAjaWYgKFRBUkdFVF9ERUZBVUxUICYgTUFTS19MSVRUTEVfRU5ESUFOKQotSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi1AQCAtNzY4LDE1ICs3NjgsMTkgQEAgRU5ESUFOX1NFTEVDVCgiIC1tYmlnIiwgIiAtbWxpdHRsZSIsIERFRgotIAotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKLSAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbXVzbC1wb3dlcnBjLnNvLjEiCi0rCi0gI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQwotLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIE0pICIle21nbGliYzoiIEcgIjs6JXttbXVzbDoiIE0gIjs6IiBVICJ9fSIKLSsjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bWdsaWJjOiIgRyAiOzole211Y2xpYmM6IiBVICI7OiIgTSAifX0iCi0gI2VsaWYgIWRlZmluZWQgKERFRkFVTFRfTElCQykgfHwgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttdWNsaWJjOiIgVSAiOzoiIEcgIn0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bXVjbGliYzoiIFUgIjs6JXttbXVzbDoiIE0gIjs6IiBHICJ9fSIKLSAjZWxzZQotICNlcnJvciAiVW5zdXBwb3J0ZWQgREVGQVVMVF9MSUJDIgotICNlbmRpZgotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVIgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSKQotKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSLCBNVVNMX0RZTkFNSUNfTElOS0VSKQotIAotICNkZWZpbmUgTElOS19PU19MSU5VWF9TUEVDICItbSBlbGYzMnBwY2xpbnV4ICV7IXNoYXJlZDogJXshc3RhdGljOiBcCi0gICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAotSW5kZXg6IGdjYy00LjkuMi9saWJpdG0vY29uZmlnL2xpbnV4L3g4Ni90bHMuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2xpYml0bS9jb25maWcvbGludXgveDg2L3Rscy5oCi0rKysgZ2NjLTQuOS4yL2xpYml0bS9jb25maWcvbGludXgveDg2L3Rscy5oCi1AQCAtMjUsMTYgKzI1LDE5IEBACi0gI2lmbmRlZiBMSUJJVE1fWDg2X1RMU19ICi0gI2RlZmluZSBMSUJJVE1fWDg2X1RMU19IIDEKLSAKLS0jaWYgZGVmaW5lZChfX0dMSUJDX1BSRVJFUSkgJiYgX19HTElCQ19QUkVSRVEoMiwgMTApCi0rI2lmIGRlZmluZWQoX19HTElCQ19QUkVSRVEpCi0rI2lmIF9fR0xJQkNfUFJFUkVRKDIsIDEwKQotIC8qIFVzZSBzbG90cyBpbiB0aGUgVENCIGhlYWQgcmF0aGVyIHRoYW4gX190aHJlYWQgbG9va3Vwcy4KLSAgICBHTElCQyBoYXMgcmVzZXJ2ZWQgd29yZHMgMTAgdGhyb3VnaCAxMyBmb3IgVE0uICAqLwotICNkZWZpbmUgSEFWRV9BUkNIX0dUTV9USFJFQUQgMQotICNkZWZpbmUgSEFWRV9BUkNIX0dUTV9USFJFQURfRElTUCAxCi0gI2VuZGlmCi0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgImNvbmZpZy9nZW5lcmljL3Rscy5oIgotIAotLSNpZiBkZWZpbmVkKF9fR0xJQkNfUFJFUkVRKSAmJiBfX0dMSUJDX1BSRVJFUSgyLCAxMCkKLSsjaWYgZGVmaW5lZChfX0dMSUJDX1BSRVJFUSkKLSsjaWYgX19HTElCQ19QUkVSRVEoMiwgMTApCi0gbmFtZXNwYWNlIEdUTSBISURERU4gewotIAotICNpZmRlZiBfX3g4Nl82NF9fCi1AQCAtMTAxLDUgKzEwNCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYWJpX2Rpc3Aoc3RydWN0IGEKLSAKLSB9IC8vIG5hbWVzcGFjZSBHVE0KLSAjZW5kaWYgLyogPj0gR0xJQkMgMi4xMCAqLwotKyNlbmRpZgotIAotICNlbmRpZiAvLyBMSUJJVE1fWDg2X1RMU19ICi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCi0rKysgZ2NjLTQuOS4yL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKLUBAIC0yNSw2ICsyNSw4IEBACi0gCi0gI2RlZmluZSBDUFBfU1BFQyAiJXtwdGhyZWFkOi1EX1JFRU5UUkFOVH0iCi0gCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLWFhcmNoNjQuc28uMSIKLSsKLSAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfQkJXAotICAgICV7c3RhdGljOi1Cc3RhdGljfQkJCQlcCi0gICAgJXtzaGFyZWQ6LXNoYXJlZH0JCQkJXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY5LW11c2wtbm8tZml4aW5jbHVkZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjktbXVzbC1uby1maXhpbmNsdWRlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiMThhNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjktbXVzbC1uby1maXhpbmNsdWRlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgSEcgY2hhbmdlc2V0IHBhdGNoCi0jIFBhcmVudCA2MDBhOGE0MjJjY2FmNTYyN2FkMWY1YTEzOGU3Mzk4ZGYyYjllOWQ4Ci1HZXQgcmlkIG9mIGV2ZXItYnJva2VuIGZpeGluY2x1ZGVzIG9uIG11c2wuCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZml4aW5jbHVkZXMvbWtmaXhpbmMuc2gKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZml4aW5jbHVkZXMvbWtmaXhpbmMuc2gKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2ZpeGluY2x1ZGVzL21rZml4aW5jLnNoCi1AQCAtMTksNyArMTksOCBAQCBjYXNlICRtYWNoaW5lIGluCi0gICAgIHBvd2VycGMtKi1lYWJpKiAgICB8IFwKLSAgICAgcG93ZXJwYy0qLXJ0ZW1zKiAgIHwgXAotICAgICBwb3dlcnBjbGUtKi1lYWJpc2ltKiB8IFwKLS0gICAgcG93ZXJwY2xlLSotZWFiaSogKQotKyAgICBwb3dlcnBjbGUtKi1lYWJpKiB8IFwKLSsgICAgKi1tdXNsKiApCi0gCSMgIElGIHRoZXJlIGlzIG5vIGluY2x1ZGUgZml4aW5nLAotIAkjICBUSEVOIGNyZWF0ZSBhIG5vLW9wIGZpeGVyIGFuZCBleGl0Ci0gCShlY2hvICIjISAvYmluL3NoIiA7IGVjaG8gImV4aXQgMCIgKSA+ICR7dGFyZ2V0fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDcwLWxpYnN0ZGMtbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3MC1saWJzdGRjLW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0OGU0ODEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDcwLWxpYnN0ZGMtbXVzbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdAkyMDE0LTAzLTI2IDAxOjEyOjE5LjQ2NjAwODE5MyAtMDcwMAotKysrIGdjYy00LjktMjAxNDAzMTYvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0CTIwMTQtMDMtMjYgMDE6NDM6NDguMjIyNjg0MzU3IC0wNzAwCi1AQCAtMjY0LDE0ICsyNjQsMjQgQEAKLSAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2JzZC9mcmVlYnNkIgotICAgICA7OwotICAgZ251KiB8IGxpbnV4KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCi0rICAgICMgY2hlY2sgZm9yIG11c2wgYnkgdGFyZ2V0Ci0rICAgIGNhc2UgIiR7aG9zdF9vc30iIGluCi0rICAgICAgKi1tdXNsKikKLSsgICAgICAgIG9zX2luY2x1ZGVfZGlyPSJvcy9nZW5lcmljIgotKyAgICAgICAgOzsKLSsgICAgICAqKQotICAgICBpZiBbICIkdWNsaWJjIiA9ICJ5ZXMiIF07IHRoZW4KLSAgICAgICBvc19pbmNsdWRlX2Rpcj0ib3MvdWNsaWJjIgotICAgICBlbGlmIFsgIiRiaW9uaWMiID0gInllcyIgXTsgdGhlbgotICAgICAgIG9zX2luY2x1ZGVfZGlyPSJvcy9iaW9uaWMiCi0rICAgIGVsaWYgWyAiJG11c2wiID0gInllcyIgXTsgdGhlbgotKyAgICAgIG9zX2luY2x1ZGVfZGlyPSJvcy9nZW5lcmljIgotICAgICBlbHNlCi0gICAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2dudS1saW51eCIKLSAgICAgZmkKLSAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotICAgaHB1eCopCi0gICAgIG9zX2luY2x1ZGVfZGlyPSJvcy9ocHV4IgotICAgICA7OwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDcxLUlnbm9yZS1mZGVidWctcHJlZml4LW1hcC1pbi1wcm9kdWNlci1zdHJpbmctYnktRGFuaWUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThmNzliNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLUZyb20gMzI1OTNiMzgwODJlYTY1ZjRjODIxNTkyNTRhZGYxZTBkYzI0MjNiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGJlcm5kcyA8YmVybmRzQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KLURhdGU6IFR1ZSwgMTYgRmViIDIwMTYgMDM6MTU6MTUgLTA1MDAKLVN1YmplY3Q6IFtQQVRDSF0gSWdub3JlIC1mZGVidWctcHJlZml4LW1hcCBpbiBwcm9kdWNlciBzdHJpbmcgKGJ5IERhbmllbCBLYWhuCi0gR2lsbG1vcikKLQotKiBkd2FyZjJvdXQuYyAoZ2VuX3Byb2R1Y2VyX3N0cmluZyk6IElnbm9yZSAtZmRlYnVnLXByZWZpeC1tYXAuCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIzMTgzNSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL2R3YXJmMm91dC5jIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLWRpZmYgLS1naXQgYS9nY2MvZHdhcmYyb3V0LmMgYi9nY2MvZHdhcmYyb3V0LmMKLWluZGV4IDM2MTRjMTAuLjUyNmYxMTQgMTAwNjQ0Ci0tLS0gYS9nY2MvZHdhcmYyb3V0LmMKLSsrKyBiL2djYy9kd2FyZjJvdXQuYwotQEAgLTE5NjcwLDYgKzE5NjcwLDcgQEAgZ2VuX3Byb2R1Y2VyX3N0cmluZyAodm9pZCkKLSAgICAgICBjYXNlIE9QVF9mcHJlcHJvY2Vzc2VkOgotICAgICAgIGNhc2UgT1BUX2ZsdHJhbnNfb3V0cHV0X2xpc3RfOgotICAgICAgIGNhc2UgT1BUX2ZyZXNvbHV0aW9uXzoKLSsgICAgICBjYXNlIE9QVF9mZGVidWdfcHJlZml4X21hcF86Ci0gCS8qIElnbm9yZSB0aGVzZS4gICovCi0gCWNvbnRpbnVlOwotICAgICAgIGRlZmF1bHQ6Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3Mi1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzItc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODA5YTZhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3Mi1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotRnJvbSBlODYzYmU3OThlZDEzMzEyYTBmYWYwYjk2MTI3NWYyMTFhODEyM2FiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotRGF0ZTogVGh1LCAxNyBNYXIgMjAxNiAwMDozMjoxNyAtMDQwMAotU3ViamVjdDogW1BBVENIXSBnY2MvbGliY3BwOiBzdXBwb3J0IC1mZmlsZS1wcmVmaXgtbWFwPTxvbGQ+PTxuZXc+Ci0KLVNpbWlsYXIgLWZkZWJ1Zy1wcmVmaXgtbWFwLCBhZGQgb3B0aW9uIC1mZmlsZS1wcmVmaXgtbWFwIHRvIG1hcCBvbmUKLWRpcmVjdG9yeSBuYW1lIChvbGQpIHRvIGFub3RoZXIgKG5ldykgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18gYW5kCi1fX2J1aWx0aW5fRklMRSAoKS4KLQotaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NzAyNjgKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL2MtZmFtaWx5L2Mtb3B0cy5jICAgICB8ICA2ICsrKysKLSBnY2MvYy1mYW1pbHkvYy5vcHQgICAgICAgIHwgIDQgKysrCi0gZ2NjL2R3YXJmMm91dC5jICAgICAgICAgICB8ICAxICsKLSBnY2MvZ2ltcGxpZnkuYyAgICAgICAgICAgIHwgIDIgKysKLSBsaWJjcHAvTWFrZWZpbGUuaW4gICAgICAgIHwgMTAgKysrLS0tCi0gbGliY3BwL2ZpbGUtbWFwLmMgICAgICAgICB8IDkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaCB8IDMwICsrKysrKysrKysrKysrKysKLSBsaWJjcHAvbWFjcm8uYyAgICAgICAgICAgIHwgIDIgKysKLSA4IGZpbGVzIGNoYW5nZWQsIDE0MiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjcHAvZmlsZS1tYXAuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oCi0KLWRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1vcHRzLmMgYi9nY2MvYy1mYW1pbHkvYy1vcHRzLmMKLWluZGV4IGRkNWZkMjMuLjljMDA0YTEgMTAwNjQ0Ci0tLS0gYS9nY2MvYy1mYW1pbHkvYy1vcHRzLmMKLSsrKyBiL2djYy9jLWZhbWlseS9jLW9wdHMuYwotQEAgLTM2LDYgKzM2LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjaW5jbHVkZSAib3B0aW9ucy5oIgotICNpbmNsdWRlICJwbHVnaW4uaCIJCS8qIEZvciBQTFVHSU5fSU5DTFVERV9GSUxFIGV2ZW50LiAgKi8KLSAjaW5jbHVkZSAibWtkZXBzLmgiCi0rI2luY2x1ZGUgImZpbGUtbWFwLmgiCi0gI2luY2x1ZGUgImMtdGFyZ2V0LmgiCi0gI2luY2x1ZGUgInRtLmgiCQkJLyogRm9yIEJZVEVTX0JJR19FTkRJQU4sCi0gCQkJCSAgIERPTExBUlNfSU5fSURFTlRJRklFUlMsCi1AQCAtNTUzLDYgKzU1NCwxMSBAQCBjX2NvbW1vbl9oYW5kbGVfb3B0aW9uIChzaXplX3Qgc2NvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLAotICAgICAgIGNwcF9vcHRzLT5uYXJyb3dfY2hhcnNldCA9IGFyZzsKLSAgICAgICBicmVhazsKLSAKLSsgICAgY2FzZSBPUFRfZmZpbGVfcHJlZml4X21hcF86Ci0rICAgICAgaWYgKGFkZF9maWxlX3ByZWZpeF9tYXAgKGFyZykgPCAwKQotKyAgICAgICAgZXJyb3IgKCJpbnZhbGlkIGFyZ3VtZW50ICVxcyB0byAtZmZpbGUtcHJlZml4LW1hcCIsIGFyZyk7Ci0rICAgICAgYnJlYWs7Ci0rCi0gICAgIGNhc2UgT1BUX2Z3aWRlX2V4ZWNfY2hhcnNldF86Ci0gICAgICAgY3BwX29wdHMtPndpZGVfY2hhcnNldCA9IGFyZzsKLSAgICAgICBicmVhazsKLWRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKLWluZGV4IGYyOTU4MDUuLjNhOTk2NjIgMTAwNjQ0Ci0tLS0gYS9nY2MvYy1mYW1pbHkvYy5vcHQKLSsrKyBiL2djYy9jLWZhbWlseS9jLm9wdAotQEAgLTkyOCw2ICs5MjgsMTAgQEAgZmV4ZWMtY2hhcnNldD0KLSBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgUmVqZWN0TmVnYXRpdmUKLSAtZmV4ZWMtY2hhcnNldD08Y3NldD4JQ29udmVydCBhbGwgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cyB0byBjaGFyYWN0ZXIgc2V0IDxjc2V0PgotIAotK2ZmaWxlLXByZWZpeC1tYXA9Ci0rQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFJlamVjdE5lZ2F0aXZlCi0rLWZmaWxlLXByZWZpeC1tYXA9PG9sZD1uZXc+CU1hcCBvbmUgZGlyZWN0b3J5IG5hbWUgdG8gYW5vdGhlciBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXyBhbmQgX19idWlsdGluX0ZJTEUgKCkKLSsKLSBmZXh0ZW5kZWQtaWRlbnRpZmllcnMKLSBDIE9iakMgQysrIE9iakMrKwotIFBlcm1pdCB1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzIChcXHUgYW5kIFxcVSkgaW4gaWRlbnRpZmllcnMKLWRpZmYgLS1naXQgYS9nY2MvZHdhcmYyb3V0LmMgYi9nY2MvZHdhcmYyb3V0LmMKLWluZGV4IDk5YmY2ZTIuLjNlNThjZmQgMTAwNjQ0Ci0tLS0gYS9nY2MvZHdhcmYyb3V0LmMKLSsrKyBiL2djYy9kd2FyZjJvdXQuYwotQEAgLTE5MTk5LDYgKzE5MTk5LDcgQEAgZ2VuX3Byb2R1Y2VyX3N0cmluZyAodm9pZCkKLSAgICAgICBjYXNlIE9QVF9mbHRyYW5zX291dHB1dF9saXN0XzoKLSAgICAgICBjYXNlIE9QVF9mcmVzb2x1dGlvbl86Ci0gICAgICAgY2FzZSBPUFRfZmRlYnVnX3ByZWZpeF9tYXBfOgotKyAgICAgIGNhc2UgT1BUX2ZmaWxlX3ByZWZpeF9tYXBfOgotIAkvKiBJZ25vcmUgdGhlc2UuICAqLwotIAljb250aW51ZTsKLSAgICAgICBkZWZhdWx0OgotZGlmZiAtLWdpdCBhL2djYy9naW1wbGlmeS5jIGIvZ2NjL2dpbXBsaWZ5LmMKLWluZGV4IDg5ZTczMzQuLmE3YTk3YzAgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2ltcGxpZnkuYwotKysrIGIvZ2NjL2dpbXBsaWZ5LmMKLUBAIC01OSw2ICs1OSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCi0gI2luY2x1ZGUgIm9tcC1sb3cuaCIKLSAjaW5jbHVkZSAiZ2ltcGxlLWxvdy5oIgotICNpbmNsdWRlICJjaWxrLmgiCi0rI2luY2x1ZGUgImZpbGUtbWFwLmgiCi0gCi0gI2luY2x1ZGUgImxhbmdob29rcy1kZWYuaCIJLyogRklYTUU6IGZvciBsaGRfc2V0X2RlY2xfYXNzZW1ibGVyX25hbWUgKi8KLSAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCQkvKiBGSVhNRTogb25seSBmb3IgUFJPUF9naW1wbGVfYW55ICovCi1AQCAtMjI4OCw2ICsyMjg5LDcgQEAgZ2ltcGxpZnlfY2FsbF9leHByICh0cmVlICpleHByX3AsIGdpbXBsZV9zZXEgKnByZV9wLCBib29sIHdhbnRfdmFsdWUpCi0gICAgICAgY2FzZSBCVUlMVF9JTl9GSUxFOgotIAl7Ci0gCSAgZXhwYW5kZWRfbG9jYXRpb24gbG9jID0gZXhwYW5kX2xvY2F0aW9uIChFWFBSX0xPQ0FUSU9OICgqZXhwcl9wKSk7Ci0rCSAgbG9jLmZpbGUgPSByZW1hcF9maWxlX2ZpbGVuYW1lIChsb2MuZmlsZSk7Ci0gCSAgKmV4cHJfcCA9IGJ1aWxkX3N0cmluZ19saXRlcmFsIChzdHJsZW4gKGxvYy5maWxlKSArIDEsIGxvYy5maWxlKTsKLSAJICByZXR1cm4gR1NfT0s7Ci0gCX0KLWRpZmYgLS1naXQgYS9saWJjcHAvTWFrZWZpbGUuaW4gYi9saWJjcHAvTWFrZWZpbGUuaW4KLWluZGV4IDU1NjFjOTcuLjUwMTcyNTYgMTAwNjQ0Ci0tLS0gYS9saWJjcHAvTWFrZWZpbGUuaW4KLSsrKyBiL2xpYmNwcC9NYWtlZmlsZS5pbgotQEAgLTg0LDEyICs4NCwxMiBAQCBERVBNT0RFID0gJChDWFhERVBNT0RFKQotIAotIAotIGxpYmNwcF9hX09CSlMgPSBjaGFyc2V0Lm8gZGlyZWN0aXZlcy5vIGRpcmVjdGl2ZXMtb25seS5vIGVycm9ycy5vIFwKLS0JZXhwci5vIGZpbGVzLm8gaWRlbnRpZmllcnMubyBpbml0Lm8gbGV4Lm8gbGluZS1tYXAubyBtYWNyby5vIFwKLS0JbWtkZXBzLm8gcGNoLm8gc3ltdGFiLm8gdHJhZGl0aW9uYWwubwotKwlleHByLm8gZmlsZS1tYXAubyBmaWxlcy5vIGlkZW50aWZpZXJzLm8gaW5pdC5vIGxleC5vIGxpbmUtbWFwLm8gXAotKwltYWNyby5vIG1rZGVwcy5vIHBjaC5vIHN5bXRhYi5vIHRyYWRpdGlvbmFsLm8KLSAKLSBsaWJjcHBfYV9TT1VSQ0VTID0gY2hhcnNldC5jIGRpcmVjdGl2ZXMuYyBkaXJlY3RpdmVzLW9ubHkuYyBlcnJvcnMuYyBcCi0tCWV4cHIuYyBmaWxlcy5jIGlkZW50aWZpZXJzLmMgaW5pdC5jIGxleC5jIGxpbmUtbWFwLmMgbWFjcm8uYyBcCi0tCW1rZGVwcy5jIHBjaC5jIHN5bXRhYi5jIHRyYWRpdGlvbmFsLmMKLSsJZXhwci5jIGZpbGUtbWFwLmMgZmlsZXMuYyBpZGVudGlmaWVycy5jIGluaXQuYyBsZXguYyBsaW5lLW1hcC5jIFwKLSsJbWFjcm8uYyBta2RlcHMuYyBwY2guYyBzeW10YWIuYyB0cmFkaXRpb25hbC5jCi0gCi0gYWxsOiBsaWJjcHAuYSAkKFVTRURfQ0FUQUxPR1MpCi0gCi1AQCAtMjYzLDcgKzI2Myw3IEBAIHBvLyQoUEFDS0FHRSkucG90OiAkKGxpYmNwcF9hX1NPVVJDRVMpCi0gCi0gVEFHU19TT1VSQ0VTID0gJChsaWJjcHBfYV9TT1VSQ0VTKSBpbnRlcm5hbC5oIHVjbmlkLmggXAotICAgICBpbmNsdWRlL2xpbmUtbWFwLmggaW5jbHVkZS9zeW10YWIuaCBpbmNsdWRlL2NwcC1pZC1kYXRhLmggXAotLSAgICBpbmNsdWRlL2NwcGxpYi5oIGluY2x1ZGUvbWtkZXBzLmggc3lzdGVtLmgKLSsgICAgaW5jbHVkZS9jcHBsaWIuaCBpbmNsdWRlL21rZGVwcy5oIHN5c3RlbS5oIGluY2x1ZGUvZmlsZS1tYXAuaAotIAotIFRBR1M6ICQoVEFHU19TT1VSQ0VTKQotIAljZCAkKHNyY2RpcikgJiYgZXRhZ3MgJChUQUdTX1NPVVJDRVMpCi1kaWZmIC0tZ2l0IGEvbGliY3BwL2ZpbGUtbWFwLmMgYi9saWJjcHAvZmlsZS1tYXAuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjA0ZTg1MWIKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYmNwcC9maWxlLW1hcC5jCi1AQCAtMCwwICsxLDkyIEBACi0rLyogTWFwIG9uZSBkaXJlY3RvcnkgbmFtZSB0byBhbm90aGVyIGluIF9fRklMRV9fLCBfX0JBU0VfRklMRV9fCi0rICAgYW5kIF9fYnVpbHRpbl9GSUxFICgpLgotKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0rdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotK2xhdGVyIHZlcnNpb24uCi0rCi0rVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLStNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLStZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCi0rPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotKyBJbiBvdGhlciB3b3JkcywgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUgdGhpcyBwcm9ncmFtLgotKyBZb3UgYXJlIGZvcmJpZGRlbiB0byBmb3JiaWQgYW55b25lIGVsc2UgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZQotKyB3aGF0IHlvdSBnaXZlIHRoZW0uICAgSGVscCBzdGFtcCBvdXQgc29mdHdhcmUtaG9hcmRpbmchICAqLwotKwotKyNpbmNsdWRlICJjb25maWcuaCIKLSsjaW5jbHVkZSAic3lzdGVtLmgiCi0rI2luY2x1ZGUgImZpbGUtbWFwLmgiCi0rCi0rLyogU3RydWN0dXJlIHJlY29yZGluZyB0aGUgbWFwcGluZyBmcm9tIHNvdXJjZSBmaWxlIGFuZCBkaXJlY3RvcnkKLSsgICBuYW1lcyBhdCBjb21waWxlIHRpbWUgdG8gX19GSUxFX18gKi8KLSt0eXBlZGVmIHN0cnVjdCBmaWxlX3ByZWZpeF9tYXAKLSt7Ci0rICBjb25zdCBjaGFyICpvbGRfcHJlZml4OwotKyAgY29uc3QgY2hhciAqbmV3X3ByZWZpeDsKLSsgIHNpemVfdCBvbGRfbGVuOwotKyAgc2l6ZV90IG5ld19sZW47Ci0rICBzdHJ1Y3QgZmlsZV9wcmVmaXhfbWFwICpuZXh0OwotK30gZmlsZV9wcmVmaXhfbWFwOwotKwotKy8qIExpbmtlZCBsaXN0IG9mIHN1Y2ggc3RydWN0dXJlcy4gICovCi0rc3RhdGljIGZpbGVfcHJlZml4X21hcCAqZmlsZV9wcmVmaXhfbWFwczsKLSsKLSsvKiBSZWNvcmQgcHJlZml4IG1hcHBpbmcgb2YgX19GSUxFX18uICBBUkcgaXMgdGhlIGFyZ3VtZW50IHRvCi0rICAgLWZmaWxlLXByZWZpeC1tYXAgYW5kIG11c3QgYmUgb2YgdGhlIGZvcm0gT0xEPU5FVy4gICovCi0raW50Ci0rYWRkX2ZpbGVfcHJlZml4X21hcCAoY29uc3QgY2hhciAqYXJnKQotK3sKLSsgIGZpbGVfcHJlZml4X21hcCAqbWFwOwotKyAgY29uc3QgY2hhciAqcDsKLSsKLSsgIHAgPSBzdHJjaHIgKGFyZywgJz0nKTsKLSsgIGlmICghcCkKLSsgIHsKLSsgICAgICBmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgYXJndW1lbnQgJXFzIHRvIC1mZmlsZS1wcmVmaXgtbWFwIiwgYXJnKTsKLSsgICAgICByZXR1cm4gLTE7Ci0rICB9Ci0rICBtYXAgPSBYTkVXIChmaWxlX3ByZWZpeF9tYXApOwotKyAgbWFwLT5vbGRfcHJlZml4ID0geHN0cm5kdXAgKGFyZywgcCAtIGFyZyk7Ci0rICBtYXAtPm9sZF9sZW4gPSBwIC0gYXJnOwotKyAgcCsrOwotKyAgbWFwLT5uZXdfcHJlZml4ID0geHN0cmR1cCAocCk7Ci0rICBtYXAtPm5ld19sZW4gPSBzdHJsZW4gKHApOwotKyAgbWFwLT5uZXh0ID0gZmlsZV9wcmVmaXhfbWFwczsKLSsgIGZpbGVfcHJlZml4X21hcHMgPSBtYXA7Ci0rCi0rICByZXR1cm4gMDsKLSt9Ci0rCi0rLyogUGVyZm9ybSB1c2VyLXNwZWNpZmllZCBtYXBwaW5nIG9mIF9fRklMRV9fIHByZWZpeGVzLiAgUmV0dXJuCi0rICAgdGhlIG5ldyBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gZmlsZW5hbWUuICAqLwotKwotK2NvbnN0IGNoYXIgKgotK3JlbWFwX2ZpbGVfZmlsZW5hbWUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotK3sKLSsgIGZpbGVfcHJlZml4X21hcCAqbWFwOwotKyAgY2hhciAqczsKLSsgIGNvbnN0IGNoYXIgKm5hbWU7Ci0rICBzaXplX3QgbmFtZV9sZW47Ci0rCi0rICBmb3IgKG1hcCA9IGZpbGVfcHJlZml4X21hcHM7IG1hcDsgbWFwID0gbWFwLT5uZXh0KQotKyAgICBpZiAoZmlsZW5hbWVfbmNtcCAoZmlsZW5hbWUsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQotKyAgICAgIGJyZWFrOwotKyAgaWYgKCFtYXApCi0rICAgIHJldHVybiBmaWxlbmFtZTsKLSsgIG5hbWUgPSBmaWxlbmFtZSArIG1hcC0+b2xkX2xlbjsKLSsgIG5hbWVfbGVuID0gc3RybGVuIChuYW1lKSArIDE7Ci0rICBzID0gKGNoYXIgKikgYWxsb2NhIChuYW1lX2xlbiArIG1hcC0+bmV3X2xlbik7Ci0rICBtZW1jcHkgKHMsIG1hcC0+bmV3X3ByZWZpeCwgbWFwLT5uZXdfbGVuKTsKLSsgIG1lbWNweSAocyArIG1hcC0+bmV3X2xlbiwgbmFtZSwgbmFtZV9sZW4pOwotKwotKyAgcmV0dXJuIHhzdHJkdXAgKHMpOwotK30KLSsKLSsKLWRpZmYgLS1naXQgYS9saWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oIGIvbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmU2ZjhjYmYKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKLUBAIC0wLDAgKzEsMzAgQEAKLSsvKiBNYXAgb25lIGRpcmVjdG9yeSBuYW1lIHRvIGFub3RoZXIgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18KLSsgICBhbmQgX19idWlsdGluX0ZJTEUgKCkuCi0rICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLStGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0rbGF0ZXIgdmVyc2lvbi4KLSsKLStUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLStidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLStHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSs8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0rIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCi0rIFlvdSBhcmUgZm9yYmlkZGVuIHRvIGZvcmJpZCBhbnlvbmUgZWxzZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlCi0rIHdoYXQgeW91IGdpdmUgdGhlbS4gICBIZWxwIHN0YW1wIG91dCBzb2Z0d2FyZS1ob2FyZGluZyEgICovCi0rCi0rI2lmbmRlZiBMSUJDUFBfRklMRV9NQVBfSAotKyNkZWZpbmUgTElCQ1BQX0ZJTEVfTUFQX0gKLSsKLStjb25zdCBjaGFyICogcmVtYXBfZmlsZV9maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotKwotK2ludCBhZGRfZmlsZV9wcmVmaXhfbWFwIChjb25zdCBjaGFyICphcmcpOwotKwotKyNlbmRpZiAvKiAhTElCQ1BQX0ZJTEVfTUFQX0ggICovCi1kaWZmIC0tZ2l0IGEvbGliY3BwL21hY3JvLmMgYi9saWJjcHAvbWFjcm8uYwotaW5kZXggMTFlNTBmNC4uNWM2ZjkwZSAxMDA2NDQKLS0tLSBhL2xpYmNwcC9tYWNyby5jCi0rKysgYi9saWJjcHAvbWFjcm8uYwotQEAgLTI2LDYgKzI2LDcgQEAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjaW5jbHVkZSAic3lzdGVtLmgiCi0gI2luY2x1ZGUgImNwcGxpYi5oIgotICNpbmNsdWRlICJpbnRlcm5hbC5oIgotKyNpbmNsdWRlICJmaWxlLW1hcC5oIgotIAotIHR5cGVkZWYgc3RydWN0IG1hY3JvX2FyZyBtYWNyb19hcmc7Ci0gLyogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgdG9rZW5zIG9mIGEgbWFjcm8gYXJndW1lbnQuICBUaGVzZQotQEAgLTI4OCw2ICsyODksNyBAQCBfY3BwX2J1aWx0aW5fbWFjcm9fdGV4dCAoY3BwX3JlYWRlciAqcGZpbGUsIGNwcF9oYXNobm9kZSAqbm9kZSkKLSAJICAgIGlmICghbmFtZSkKLSAJICAgICAgYWJvcnQgKCk7Ci0gCSAgfQotKwluYW1lID0gcmVtYXBfZmlsZV9maWxlbmFtZSAobmFtZSk7Ci0gCWxlbiA9IHN0cmxlbiAobmFtZSk7Ci0gCWJ1ZiA9IF9jcHBfdW5hbGlnbmVkX2FsbG9jIChwZmlsZSwgbGVuICogMiArIDMpOwotIAlyZXN1bHQgPSBidWY7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzMtUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGU0NWVkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1Gcm9tIDVlMTBiYWZmODQwMzhkMjZkYzNkNTliMjQxMmJhMWRiOTJjYjgyNzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUaHUsIDE3IE1hciAyMDE2IDAwOjM0OjAxIC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMi8yXSBSZXVzZSAtZmRlYnVnLXByZWZpeC1tYXAgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcAotCi1UaGUgb2UtY29yZSBtYXkgdXNlIGV4dGVybmFsIHRvb2xjaGFpbiB0byBjb21waWxlLAotd2hpY2ggbWF5IG5vdCBzdXBwb3J0IC1mZmlsZS1wcmVmaXgtbWFwLgotCi1TaW5jZSB3ZSB1c2UgLWZkZWJ1Zy1wcmVmaXgtbWFwIHRvIGRvIHRoZSBzYW1lIHRoaW5nLAotc28gd2UgY291bGQgcmV1c2UgaXQgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcC4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW29lLWNvcmUgc3BlY2lmaWNdCi0KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGdjYy9vcHRzLWdsb2JhbC5jIHwgNCArKysrCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL29wdHMtZ2xvYmFsLmMgYi9nY2Mvb3B0cy1nbG9iYWwuYwotaW5kZXggMTExODg0Yi4uMDM3ZjZjOCAxMDA2NDQKLS0tLSBhL2djYy9vcHRzLWdsb2JhbC5jCi0rKysgYi9nY2Mvb3B0cy1nbG9iYWwuYwotQEAgLTQyLDYgKzQyLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjaW5jbHVkZSAidG9wbGV2LmgiCi0gI2luY2x1ZGUgInRyZWUtcGFzcy5oIgotICNpbmNsdWRlICJjb250ZXh0LmgiCi0rI2luY2x1ZGUgImZpbGUtbWFwLmgiCi0gCi0gdHlwZWRlZiBjb25zdCBjaGFyICpjb25zdF9jaGFyX3A7IC8qIEZvciBERUZfVkVDX1AuICAqLwotIAotQEAgLTM1NCw2ICszNTUsOSBAQCBoYW5kbGVfY29tbW9uX2RlZmVycmVkX29wdGlvbnMgKHZvaWQpCi0gCi0gCWNhc2UgT1BUX2ZkZWJ1Z19wcmVmaXhfbWFwXzoKLSAJICBhZGRfZGVidWdfcHJlZml4X21hcCAob3B0LT5hcmcpOwotKwotKwkgIC8qIFJldXNlIC1mZGVidWctcHJlZml4LW1hcCB0byByZXBsYWNlIC1mZmlsZS1wcmVmaXgtbWFwICovCi0rCSAgYWRkX2ZpbGVfcHJlZml4X21hcCAob3B0LT5hcmcpOwotIAkgIGJyZWFrOwotIAotIAljYXNlIE9QVF9mZHVtcF86Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3NC1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXJlbGF0aXZlLXBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzQtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjkxZmRiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3NC1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXJlbGF0aXZlLXBhdGgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1Gcm9tIDI4OWFkMjk2OWE1OTY2YzYwM2JmNjkyOGNlNDQyZGI3NGM0Y2JiMjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUaHUsIDI0IE1hciAyMDE2IDExOjIzOjE0IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGdjYy9maW5hbC5jOiAtZmRlYnVnLXByZWZpeC1tYXAgc3VwcG9ydCB0byByZW1hcCBzb3VyY2VzIHdpdGgKLSByZWxhdGl2ZSBwYXRoCi0KLVBSIG90aGVyLzcwNDI4Ci0qIGZpbmFsLmMgKHJlbWFwX2RlYnVnX2ZpbGVuYW1lKTogVXNlIGxyZWFscGF0aCB0byB0cmFuc2xhdGUKLXJlbGF0aXZlIHBhdGggYmVmb3JlIHJlbWFwcGluZwotCi1odHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03MDQyOAotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQotCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLWRpZmYgLS1naXQgYS9nY2MvZmluYWwuYyBiL2djYy9maW5hbC5jCi1pbmRleCA1NWNmNTA5Li5jMzU5NGMyIDEwMDY0NAotLS0tIGEvZ2NjL2ZpbmFsLmMKLSsrKyBiL2djYy9maW5hbC5jCi1AQCAtMTU1NCwxNiArMTU1NCwyNSBAQCByZW1hcF9kZWJ1Z19maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpCi0gICBjb25zdCBjaGFyICpuYW1lOwotICAgc2l6ZV90IG5hbWVfbGVuOwotIAotKyAgLyogU3VwcG9ydCB0byByZW1hcCBmaWxlbmFtZSB3aXRoIHJlbGF0aXZlIHBhdGggICovCi0rICBjaGFyICpyZWFscGF0aCA9IGxyZWFscGF0aCAoZmlsZW5hbWUpOwotKyAgaWYgKHJlYWxwYXRoID09IE5VTEwpCi0rICAgIHJldHVybiBmaWxlbmFtZTsKLSsKLSAgIGZvciAobWFwID0gZGVidWdfcHJlZml4X21hcHM7IG1hcDsgbWFwID0gbWFwLT5uZXh0KQotLSAgICBpZiAoZmlsZW5hbWVfbmNtcCAoZmlsZW5hbWUsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQotKyAgICBpZiAoZmlsZW5hbWVfbmNtcCAocmVhbHBhdGgsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQotICAgICAgIGJyZWFrOwotICAgaWYgKCFtYXApCi0tICAgIHJldHVybiBmaWxlbmFtZTsKLS0gIG5hbWUgPSBmaWxlbmFtZSArIG1hcC0+b2xkX2xlbjsKLSsgICAgewotKyAgICAgIGZyZWUgKHJlYWxwYXRoKTsKLSsgICAgICByZXR1cm4gZmlsZW5hbWU7Ci0rICAgIH0KLSsgIG5hbWUgPSByZWFscGF0aCArIG1hcC0+b2xkX2xlbjsKLSAgIG5hbWVfbGVuID0gc3RybGVuIChuYW1lKSArIDE7Ci0gICBzID0gKGNoYXIgKikgYWxsb2NhIChuYW1lX2xlbiArIG1hcC0+bmV3X2xlbik7Ci0gICBtZW1jcHkgKHMsIG1hcC0+bmV3X3ByZWZpeCwgbWFwLT5uZXdfbGVuKTsKLSAgIG1lbWNweSAocyArIG1hcC0+bmV3X2xlbiwgbmFtZSwgbmFtZV9sZW4pOwotKyAgZnJlZSAocmVhbHBhdGgpOwotICAgcmV0dXJuIGdnY19zdHJkdXAgKHMpOwotIH0KLSAMCi0tLSAKLTIuNy40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MDhiZTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotcmVxdWlyZSBnY2MtY29tbW9uLmluYwotCi0jIFRoaXJkIGRpZ2l0IGluIFBWIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBhZnRlciBhIG1pbm9yIHJlbGVhc2UKLQotUFYgPSAiNS4zLjAiCi0KLSNTTkFQID0gIjUtMjAxNTA0MDUiCi0KLSMgQklOViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgdG8gYSByZXZpc2lvbiBhZnRlciBhIG1pbm9yIGdjYyByZWxlYXNlCi0KLUJJTlYgPSAiNS4zLjAiCi0KLUZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2djYy01LjM6JHtGSUxFX0RJUk5BTUV9L2djYy01LjMvYmFja3BvcnQ6IgotCi1ERVBFTkRTID0rICJtcGZyIGdtcCBsaWJtcGMgemxpYiIKLU5BVElWRURFUFMgPSAibXBmci1uYXRpdmUgZ21wLW5hdGl2ZSBsaWJtcGMtbmF0aXZlIHpsaWItbmF0aXZlIgotCi1MSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiXAotICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCi0gICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0gICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAotICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAotICAgIGZpbGU6Ly9DT1BZSU5HLlJVTlRJTUU7bWQ1PWZlNjBkODcwNDg1NjdkNGZlOGM4YTBlZDI0NDhiY2M4IFwKLSIKLSNCQVNFVVJJID0gImh0dHA6Ly93d3cubmV0Z3VsbC5jb20vZ2NjL3NuYXBzaG90cy8ke1NOQVB9L2djYy0ke1NOQVB9LnRhci5iejIiCi1CQVNFVVJJID0gIiR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiIKLQotU1JDX1VSSSA9ICJcCi0gICAgICAgICAgICR7QkFTRVVSSX0gXAotICAgICAgICAgICAke0JBQ0tQT1JUU30gXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI1LWxpYnRvb2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyOS1leHBvcnQtQ1BQLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM3LWFhcmNoNjQtQWRkLXN1cHBvcnQtZm9yLW11c2wtbGRzby5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM4LWZpeC1nLXN5c3Jvb3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0MC1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDEtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQyLUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDMtbGlic3RkYy1TdXBwb3J0LW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0NC1BZGRpbmctbW11c2wtYXMtYS1tdXNsLWxpYmMtc3BlY2lmaWVyLWFuZC10aGUtbmVjZXNzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDUtU3VwcG9ydC1mb3ItYXJtLWxpbnV4LW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0Ny1uaW9zMi1EZWZpbmUtTVVTTF9EWU5BTUlDX0xJTktFUi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQ4LXNzcF9ub25zaGFyZWQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0OS1EaXNhYmxlLXRoZS13ZWFrLXJlZmVyZW5jZS1sb2dpYy1pbi1ndGhyLmgtZm9yLW9zLWdlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTAtcG93ZXJwYy1wYXNzLXNlY3VyZS1wbHQtdG8tdGhlLWxpbmtlci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDUxLUlnbm9yZS1mZGVidWctcHJlZml4LW1hcC1pbi1wcm9kdWNlci1zdHJpbmctYnktRGFuaWUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1Mi1uaW9zMi11c2UtcmV0LXdpdGgtcjMxLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTMtZXhwci5jLVBSLXRhcmdldC02NTM1OC1Bdm9pZC1jbG9iYmVyaW5nLXBhcnRpYWwtYXJndS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDU0LXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDU1LVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDU2LUVuYWJsZS1saWJjLXByb3ZpZGUtc3NwLWFuZC1nY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1Ny11bndpbmQtZml4LWZvci1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoIFwKLSIKLQotQkFDS1BPUlRTID0gIiIKLQotU1JDX1VSSVttZDVzdW1dID0gImM5NjE2ZmQ0NDhmOTgwMjU5YzMxZGU2MTNlNTc1NzE5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI4NGY1NTkyZTkyMThiNzNkYmFlNjEyYjUyNTMwMzVhN2IzNGE5YTFmNzY4OGQyZTFiZmFhZjcyNjdkNWM0ZGIiCi0KLSNTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7U05BUH0iCi1TID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgotQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgotCi0jIExhbmd1YWdlIE92ZXJyaWRlcwotRk9SVFJBTiA9ICIiCi1KQVZBID0gIiIKLQotTFRPID0gIi0tZW5hYmxlLWx0byIKLQotRVhUUkFfT0VDT05GX0JBU0UgPSAiXAotICAgICR7TFRPfSBcCi0gICAgLS1lbmFibGUtbGlic3NwIFwKLSAgICAtLWVuYWJsZS1saWJpdG0gXAotICAgIC0tZGlzYWJsZS1ib290c3RyYXAgXAotICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKLSAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAotICAgIC0td2l0aC1saW5rZXItaGFzaC1zdHlsZT0ke0xJTktFUl9IQVNIX1NUWUxFfSBcCi0gICAgLS1lbmFibGUtbGlua2VyLWJ1aWxkLWlkIFwKLSAgICAtLXdpdGgtcHBsPW5vIFwKLSAgICAtLXdpdGgtY2xvb2c9bm8gXAotICAgIC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgXAotICAgIC0tZW5hYmxlLWNoZWFkZXJzPWNfZ2xvYmFsIFwKLSAgICAtLXdpdGhvdXQtaXNsIFwKLSIKLQotRVhUUkFfT0VDT05GX0lOSVRJQUwgPSAiXAotICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKLSAgICAtLWRpc2FibGUtbGliZ29tcCBcCi0gICAgLS1kaXNhYmxlLWxpYml0bSBcCi0gICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKLSAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAotICAgIC0tZGlzYWJsZS1sdG8gXAotICAgIC0tZGlzYWJsZS1wbHVnaW4gXAotICAgIC0tZW5hYmxlLWRlY2ltYWwtZmxvYXQ9bm8gXAotICAgIC0td2l0aG91dC1pc2wgXAotICAgIGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcD15ZXMgXAotIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAiCi0KLUVYVFJBX09FQ09ORl9QQVRIUyA9ICJcCi0gICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0e3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCi0gICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCi0gICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0NC1BZGRpbmctbW11c2wtYXMtYS1tdXNsLWxpYmMtc3BlY2lmaWVyLWFuZC10aGUtbmVjZXNzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MWMwMmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotRnJvbSAwYjU0Nzk5ZDgwZmI4NTljN2IxNDI0NjdlNGQ0MmM5OWRiNTlkZjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgOCBEZWMgMjAxNSAwODozMDozNSArMDAwMAotU3ViamVjdDogW1BBVENIIDQ0LzQ2XSBBZGRpbmcgLW1tdXNsIGFzIGEgbXVzbCBsaWJjIHNwZWNpZmllciwgYW5kIHRoZQotIG5lY2Vzc2FyeSBoYWNrcyBmb3IgaXQgdG8ga25vdyBob3cgdG8gZmluZCBtdXNsJ3MgZHluYW1pYyBsaW5rZXIuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW3BhcnRpYWxdCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZ2NjL2NvbmZpZy5nY2MgICAgICAgICAgICAgICAgfCAgMTAgKysrKy0KLSBnY2MvY29uZmlnL2xpbnV4LmggICAgICAgICAgICB8IDEwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KLSBnY2MvY29uZmlnL2xpbnV4Lm9wdCAgICAgICAgICB8ICAgNCArKwotIGdjYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oIHwgICAxICsKLSBnY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oICAgICB8ICAgNSArKysKLSBnY2MvZ2luY2x1ZGUvc3RkZGVmLmggICAgICAgICB8ICAgMyArKwotIDYgZmlsZXMgY2hhbmdlZCwgMTEwIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYwotaW5kZXggMzgyNWJkNS4uMzljZTA0NyAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcuZ2NjCi0rKysgYi9nY2MvY29uZmlnLmdjYwotQEAgLTU3NSw3ICs1NzUsNyBAQCBjYXNlICR7dGFyZ2V0fSBpbgotIGVzYWMKLSAKLSAjIENvbW1vbiBDIGxpYnJhcmllcy4KLS10bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBMSUJDX0dMSUJDPTEgTElCQ19VQ0xJQkM9MiBMSUJDX0JJT05JQz0zIgotK3RtX2RlZmluZXM9IiR0bV9kZWZpbmVzIExJQkNfR0xJQkM9MSBMSUJDX1VDTElCQz0yIExJQkNfQklPTklDPTMgTElCQ19NVVNMPTQiCi0gCi0gIyAzMi1iaXQgeDg2IHByb2Nlc3NvcnMgc3VwcG9ydGVkIGJ5IC0td2l0aC1hcmNoPS4gIEVhY2ggcHJvY2Vzc29yCi0gIyBNVVNUIGJlIHNlcGFyYXRlZCBieSBleGFjdGx5IG9uZSBzcGFjZS4KLUBAIC03MjAsNiArNzIwLDkgQEAgY2FzZSAke3RhcmdldH0gaW4KLSAgICAgKi0qLSp1Y2xpYmMqKQotICAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX1VDTElCQyIKLSAgICAgICA7OwotKyAgICAqLSotKm11c2wqKQotKyAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX01VU0wiCi0rICAgICAgOzsKLSAgICAgKikKLSAgICAgICB0bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBERUZBVUxUX0xJQkM9TElCQ19HTElCQyIKLSAgICAgICA7OwotQEAgLTI0MjAsNiArMjQyMywxMSBAQCBwb3dlcnBjKi0qLWxpbnV4KikKLSAJICAgIHBvd2VycGMqLSotbGludXgqcGFpcmVkKikKLSAJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcnM2MDAwLzc1MGNsLmgiIDs7Ci0gCWVzYWMKLSsgICAgICAgIGNhc2UgJHt0YXJnZXR9IGluCi0rCSAgICAqLWxpbnV4Ki1tdXNsKikKLSsJCWVuYWJsZV9zZWN1cmVwbHQ9eWVzIDs7Ci0rCWVzYWMKLSsKLSAJaWYgdGVzdCB4JHtlbmFibGVfc2VjdXJlcGx0fSA9IHh5ZXM7IHRoZW4KLSAJCXRtX2ZpbGU9InJzNjAwMC9zZWN1cmVwbHQuaCAke3RtX2ZpbGV9IgotIAlmaQotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbGludXguaCBiL2djYy9jb25maWcvbGludXguaAotaW5kZXggMjJiOWJlNS4uY2E5YTE3ZiAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvbGludXguaAotKysrIGIvZ2NjL2NvbmZpZy9saW51eC5oCi1AQCAtMzIsMTAgKzMyLDEyIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQotICNkZWZpbmUgT1BUSU9OX0dMSUJDICAoREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMpCi0gI2RlZmluZSBPUFRJT05fVUNMSUJDIChERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMpCi0gI2RlZmluZSBPUFRJT05fQklPTklDIChERUZBVUxUX0xJQkMgPT0gTElCQ19CSU9OSUMpCi0rI2RlZmluZSBPUFRJT05fTVVTTCAgIChERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMKQotICNlbHNlCi0gI2RlZmluZSBPUFRJT05fR0xJQkMgIChsaW51eF9saWJjID09IExJQkNfR0xJQkMpCi0gI2RlZmluZSBPUFRJT05fVUNMSUJDIChsaW51eF9saWJjID09IExJQkNfVUNMSUJDKQotICNkZWZpbmUgT1BUSU9OX0JJT05JQyAobGludXhfbGliYyA9PSBMSUJDX0JJT05JQykKLSsjZGVmaW5lIE9QVElPTl9NVVNMICAgKGxpbnV4X2xpYmMgPT0gTElCQ19NVVNMKQotICNlbmRpZgotIAotICNkZWZpbmUgR05VX1VTRVJfVEFSR0VUX09TX0NQUF9CVUlMVElOUygpCQkJXAotQEAgLTUzLDE4ICs1NSwyMSBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKLSAgICB1Q2xpYmMgb3IgQmlvbmljIGlzIHRoZSBkZWZhdWx0IEMgbGlicmFyeSBhbmQgd2hldGhlcgotICAgIC1tdWNsaWJjIG9yIC1tZ2xpYmMgb3IgLW1iaW9uaWMgaGFzIGJlZW4gcGFzc2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdC4gICovCi0gCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxKExJQkMxLCBMSUJDMiwgTElCQzMsIExEMSwgTEQyLCBMRDMpCVwKLS0gICIleyIgTElCQzIgIjoiIExEMiAiOzoleyIgTElCQzMgIjoiIExEMyAiOzoiIExEMSAifX0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxKExJQkMxLCBMSUJDMiwgTElCQzMsIExJQkM0LCBMRDEsIExEMiwgTEQzLCBMRDQpCVwKLSsgICIleyIgTElCQzIgIjoiIExEMiAiOzoleyIgTElCQzMgIjoiIExEMyAiOzoleyIgTElCQzQgIjoiIExENCAiOzoiIExEMSAifX19IgotIAotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQwotLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIpIFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgRywgVSwgQikKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWdsaWJjIiwgIm11Y2xpYmMiLCAibWJpb25pYyIsICJtbXVzbCIsIEcsIFUsIEIsIE0pCi0gI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQikgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm11Y2xpYmMiLCAibWdsaWJjIiwgIm1iaW9uaWMiLCBVLCBHLCBCKQotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtdWNsaWJjIiwgIm1nbGliYyIsICJtYmlvbmljIiwgIm1tdXNsIiwgVSwgRywgQiwgTSkKLSAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19CSU9OSUMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCKSBcCi0tICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWJpb25pYyIsICJtZ2xpYmMiLCAibXVjbGliYyIsIEIsIEcsIFUpCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAotKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1iaW9uaWMiLCAibWdsaWJjIiwgIm11Y2xpYmMiLCAibW11c2wiLCBCLCBHLCBVLCBNKQotKyNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibW11c2wiLCAibWdsaWJjIiwgIm11Y2xpYmMiLCAibWJpb25pYyIsIE0sIEcsIFUsIEIpCi0gI2Vsc2UKLSAjZXJyb3IgIlVuc3VwcG9ydGVkIERFRkFVTFRfTElCQyIKLSAjZW5kaWYgLyogREVGQVVMVF9MSUJDICovCi1AQCAtODQsMTYgKzg5LDE2IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQotIAotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVIJCQkJCQlcCi0gICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIsCVwKLS0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSKQotKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIsIE1VU0xfRFlOQU1JQ19MSU5LRVIpCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUjMyCQkJCQlcCi0gICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyLCBcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyKQotKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiwgTVVTTF9EWU5BTUlDX0xJTktFUjMyKQotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVI2NAkJCQkJXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjY0LCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCwgXAotLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCkKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSNjQsIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCkKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSWDMyCQkJCQlcCi0gICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIsIFwKLS0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSWDMyKQotKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJYMzIsIE1VU0xfRFlOQU1JQ19MSU5LRVJYMzIpCi0gCi0gLyogV2hldGhlciB3ZSBoYXZlIEJpb25pYyBsaWJjIHJ1bnRpbWUgKi8KLSAjdW5kZWYgVEFSR0VUX0hBU19CSU9OSUMKLUBAIC0xMjMsMyArMTI4LDc0IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQotICMgZGVmaW5lIFRBUkdFVF9MSUJDX0hBU19GVU5DVElPTiBsaW51eF9saWJjX2hhc19mdW5jdGlvbgotIAotICNlbmRpZgotKwotKy8qIG11c2wgYXZvaWRzIHByb2JsZW1hdGljIGluY2x1ZGVzIGJ5IHJlYXJyYW5naW5nIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLgotKyAqIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBjcHBkZWZhdWx0LmMgKi8KLSsjaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0dQUAkJCVwKLSsgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAkJXAotKyAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAkJXAotKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwJCVwKLSsgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwJCVwKLSsgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAlcCi0rICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCi0rCi0rI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwJCQlcCi0rICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwJCVwKLSsgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKLSsjZW5kaWYKLSsKLSsjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfUFJFRklYCQkJXAotKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9QUkVGSVgKLSsjZW5kaWYKLSsKLSsjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwkJCVwKLSsgICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MKLSsjZW5kaWYKLSsKLSsjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wJCQlcCi0rICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9UT09MCi0rI2VuZGlmCi0rCi0rI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQkJCVwKLSsgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIDAsIDAsIDAsIDEsIDIgfSwJXAotKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgMCwgMCwgMCwgMSwgMCB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCi0rI2VuZGlmCi0rCi0rI2lmIGRlZmluZWQgKENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUpICYmICFkZWZpbmVkIChUQVJHRVRfU1lTVEVNX1JPT1QpCi0rIyB1bmRlZiBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKLSsjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKLSsjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUKLSsjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCi0rI2Vsc2UKLSsjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwotKyMgZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwotKyNlbmRpZgotKwotKyN1bmRlZiBJTkNMVURFX0RFRkFVTFRTCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTCQkJCVwKLSsgIHsJCQkJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfR1BQCQkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX1BSRUZJWAkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCQkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCQkJXAotKyAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDEsIDAsIDAgfSwJCVwKLSsgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0JCQkJXAotKyAgfQotKyNlbmRpZgotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbGludXgub3B0IGIvZ2NjL2NvbmZpZy9saW51eC5vcHQKLWluZGV4IGMwNTQzMzguLjkzMzRmNzQgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2xpbnV4Lm9wdAotKysrIGIvZ2NjL2NvbmZpZy9saW51eC5vcHQKLUBAIC0zMCwzICszMCw3IEBAIFVzZSBHTlUgQyBsaWJyYXJ5Ci0gbXVjbGliYwotIFRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgVmFyKGxpbnV4X2xpYmMsTElCQ19VQ0xJQkMpIE5lZ2F0aXZlKG1iaW9uaWMpCi0gVXNlIHVDbGliYyBDIGxpYnJhcnkKLSsKLSttbXVzbAotK1RhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgVmFyKGxpbnV4X2xpYmMsTElCQ19NVVNMKSBOZWdhdGl2ZShtZ2xpYmMpCi0rVXNlIG11c2wgQyBsaWJyYXJ5Ci1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmggYi9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaAotaW5kZXggYjQ2MzQ2My4uNzdlZGYyYSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oCi0rKysgYi9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaAotQEAgLTE4LDMgKzE4LDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotIAotICNkZWZpbmUgQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICItbXNlY3VyZS1wbHQiCi0rI2RlZmluZSBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICItLXNlY3VyZS1wbHQiCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaCBiL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLWluZGV4IGM2YzMxZGMuLjdjZDA3ZTAgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi0rKysgYi9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi1AQCAtNTM4LDYgKzUzOCwxMCBAQCBFTkRJQU5fU0VMRUNUKCIgLW1iaWciLCAiIC1tbGl0dGxlIiwgREVGQVVMVF9BU01fRU5ESUFOKQotICNkZWZpbmUgQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICIiCi0gI2VuZGlmCi0gCi0rI2lmbmRlZiBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDCi0rI2RlZmluZSBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICIiCi0rI2VuZGlmCi0rCi0gLyogUGFzcyAtRyB4eHggdG8gdGhlIGNvbXBpbGVyLiAgKi8KLSAjdW5kZWYgQ0MxX1NQRUMKLSAjZGVmaW5lCUNDMV9TUEVDICIle0cqfSAlKGNjMV9jcHUpIiBcCi1AQCAtODg5LDYgKzg5Myw3IEBAIG5jcnRuLm8lcyIKLSAgIHsgImxpbmtfb3Nfb3BlbmJzZCIsCQlMSU5LX09TX09QRU5CU0RfU1BFQyB9LAkJCVwKLSAgIHsgImxpbmtfb3NfZGVmYXVsdCIsCQlMSU5LX09TX0RFRkFVTFRfU1BFQyB9LAkJCVwKLSAgIHsgImNjMV9zZWN1cmVfcGx0X2RlZmF1bHQiLAlDQzFfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgfSwJCVwKLSsgIHsgImxpbmtfc2VjdXJlX3BsdF9kZWZhdWx0IiwJTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyB9LAkJXAotICAgeyAiY3BwX29zX2FkcyIsCQlDUFBfT1NfQURTX1NQRUMgfSwJCQlcCi0gICB7ICJjcHBfb3NfeWVsbG93a25pZmUiLAlDUFBfT1NfWUVMTE9XS05JRkVfU1BFQyB9LAkJXAotICAgeyAiY3BwX29zX212bWUiLAkJQ1BQX09TX01WTUVfU1BFQyB9LAkJCVwKLWRpZmYgLS1naXQgYS9nY2MvZ2luY2x1ZGUvc3RkZGVmLmggYi9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgKLWluZGV4IGYyMGE0MWIuLmViODc5ZWYgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgKLSsrKyBiL2djYy9naW5jbHVkZS9zdGRkZWYuaAotQEAgLTE4NCw2ICsxODQsNyBAQCB0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OwotICNpZm5kZWYgX0dDQ19TSVpFX1QKLSAjaWZuZGVmIF9TSVpFVF8KLSAjaWZuZGVmIF9fc2l6ZV90Ci0rI2lmbmRlZiBfX0RFRklORURfc2l6ZV90IC8qIG11c2wgKi8KLSAjZGVmaW5lIF9fc2l6ZV90X18JLyogQmVPUyAqLwotICNkZWZpbmUgX19TSVpFX1RfXwkvKiBDcmF5IFVuaWNvcy9NayAqLwotICNkZWZpbmUgX1NJWkVfVAotQEAgLTIwMCw2ICsyMDEsNyBAQCB0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OwotICNkZWZpbmUgX19faW50X3NpemVfdF9oCi0gI2RlZmluZSBfR0NDX1NJWkVfVAotICNkZWZpbmUgX1NJWkVUXwotKyNkZWZpbmUgX19ERUZJTkVEX3NpemVfdCAvKiBtdXNsICovCi0gI2lmIChkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fID49IDUpKSBcCi0gICB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIFwKLSAgIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQotQEAgLTIxOCw2ICsyMjAsNyBAQCB0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OwotIHR5cGVkZWYgbG9uZyBzc2l6ZV90OwotICNlbmRpZiAvKiBfX0JFT1NfXyAqLwotICNlbmRpZiAvKiAhKGRlZmluZWQgKF9fR05VR19fKSAmJiBkZWZpbmVkIChzaXplX3QpKSAqLwotKyNlbmRpZiAvKiBfX0RFRklORURfc2l6ZV90ICovCi0gI2VuZGlmIC8qIF9fc2l6ZV90ICovCi0gI2VuZGlmIC8qIF9TSVpFVF8gKi8KLSAjZW5kaWYgLyogX0dDQ19TSVpFX1QgKi8KLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg1MzBmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC5pbmMKQEAgLTAsMCArMSwxNDYgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjUuNC4wIgorCisjU05BUCA9ICI1LTIwMTUwNDA1IgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjUuNC4wIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNS40OiR7RklMRV9ESVJOQU1FfS9nY2MtNS40L2JhY2twb3J0OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisjQkFTRVVSSSA9ICJodHRwOi8vd3d3Lm5ldGd1bGwuY29tL2djYy9zbmFwc2hvdHMvJHtTTkFQfS9nY2MtJHtTTkFQfS50YXIuYnoyIgorQkFTRVVSSSA9ICIke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUkkgPSAiXAorICAgICAgICAgICAke0JBU0VVUkl9IFwKKyAgICAgICAgICAgJHtCQUNLUE9SVFN9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjktZXhwb3J0LUNQUC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNy1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOC1maXgtZy1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDAtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQxLVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0Mi1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQzLWxpYnN0ZGMtU3VwcG9ydC1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDQtQWRkaW5nLW1tdXNsLWFzLWEtbXVzbC1saWJjLXNwZWNpZmllci1hbmQtdGhlLW5lY2Vzcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQ1LVN1cHBvcnQtZm9yLWFybS1saW51eC1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDYtR2V0LXJpZC1vZi1ldmVyLWJyb2tlbi1maXhpbmNsdWRlcy1vbi1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDctbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0OC1zc3Bfbm9uc2hhcmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDktRGlzYWJsZS10aGUtd2Vhay1yZWZlcmVuY2UtbG9naWMtaW4tZ3Roci5oLWZvci1vcy1nZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDUwLXBvd2VycGMtcGFzcy1zZWN1cmUtcGx0LXRvLXRoZS1saW5rZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNTItbmlvczItdXNlLXJldC13aXRoLXIzMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDUzLWV4cHIuYy1QUi10YXJnZXQtNjUzNTgtQXZvaWQtY2xvYmJlcmluZy1wYXJ0aWFsLWFyZ3UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1NC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1NS1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1Ni1FbmFibGUtbGliYy1wcm92aWRlLXNzcC1hbmQtZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNTctdW53aW5kLWZpeC1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDU4LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDU5LWxpYmdjYy11c2UtbGRmbGFncy5wYXRjaCBcCisiCisKK0JBQ0tQT1JUUyA9ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YzYyNmFjMmE4M2VmMzBkZmI5MjYwZTZmNTljMmIzMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDhkZjc2ZGVjMmQzNGRlNjU1ODI0OWQ4YWY0Y2JlZTIxZWNlZGRiY2I1ODBkNjY2ZjdhNWE1ODNjYTMzMDNhIgorCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJnY2MtKD9QPHB2ZXI+NVwuXGQrXC5cZCspLnRhciIKKworI1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtTTkFQfSIKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKKyMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCitGT1JUUkFOID0gIiIKK0pBVkEgPSAiIgorCitMVE8gPSAiLS1lbmFibGUtbHRvIgorCitFWFRSQV9PRUNPTkZfQkFTRSA9ICJcCisgICAgJHtMVE99IFwKKyAgICAtLWVuYWJsZS1saWJzc3AgXAorICAgIC0tZW5hYmxlLWxpYml0bSBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorICAgIC0td2l0aG91dC1pc2wgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGliaXRtIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisgICAgLS13aXRob3V0LWlzbCBcCisgICAgZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwPXllcyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAyLXVjbGliYy1jb25mLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjQtRGlzYWJsZS1zZHQucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI0LURpc2FibGUtc2R0LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjUtbGlidG9vbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNS1saWJ0b29sLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjUtbGlidG9vbC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI1LWxpYnRvb2wucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyOS1leHBvcnQtQ1BQLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI5LWV4cG9ydC1DUFAucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjktZXhwb3J0LUNQUC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzctYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM3LWFhcmNoNjQtQWRkLXN1cHBvcnQtZm9yLW11c2wtbGRzby5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM3LWFhcmNoNjQtQWRkLXN1cHBvcnQtZm9yLW11c2wtbGRzby5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM3LWFhcmNoNjQtQWRkLXN1cHBvcnQtZm9yLW11c2wtbGRzby5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM4LWZpeC1nLXN5c3Jvb3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzgtZml4LWctc3lzcm9vdC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM4LWZpeC1nLXN5c3Jvb3QucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzOC1maXgtZy1zeXNyb290LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQwLWhhbmRsZS1zeXNyb290LXN1cHBvcnQtZm9yLW5hdGl2ZXNkay1nY2MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDAtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQwLWhhbmRsZS1zeXNyb290LXN1cHBvcnQtZm9yLW5hdGl2ZXNkay1nY2MucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0MC1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDEtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0MS1TZWFyY2gtdGFyZ2V0LXN5c3Jvb3QtZ2NjLXZlcnNpb24tc3BlY2lmaWMtZGlycy13aXRoLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDEtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQxLVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0Mi1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Mi1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQyLUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDItRml4LXZhcmlvdXMtX0ZPUl9CVUlMRC1hbmQtcmVsYXRlZC12YXJpYWJsZXMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0My1saWJzdGRjLVN1cHBvcnQtbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0My1saWJzdGRjLVN1cHBvcnQtbXVzbC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQzLWxpYnN0ZGMtU3VwcG9ydC1tdXNsLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDMtbGlic3RkYy1TdXBwb3J0LW11c2wucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0NC1BZGRpbmctbW11c2wtYXMtYS1tdXNsLWxpYmMtc3BlY2lmaWVyLWFuZC10aGUtbmVjZXNzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhYTk2YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0NC1BZGRpbmctbW11c2wtYXMtYS1tdXNsLWxpYmMtc3BlY2lmaWVyLWFuZC10aGUtbmVjZXNzLnBhdGNoCkBAIC0wLDAgKzEsMjcwIEBACitGcm9tIDBiNTQ3OTlkODBmYjg1OWM3YjE0MjQ2N2U0ZDQyYzk5ZGI1OWRmNTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCA4IERlYyAyMDE1IDA4OjMwOjM1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNDQvNDZdIEFkZGluZyAtbW11c2wgYXMgYSBtdXNsIGxpYmMgc3BlY2lmaWVyLCBhbmQgdGhlCisgbmVjZXNzYXJ5IGhhY2tzIGZvciBpdCB0byBrbm93IGhvdyB0byBmaW5kIG11c2wncyBkeW5hbWljIGxpbmtlci4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbcGFydGlhbF0KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyAgICAgICAgICAgICAgICB8ICAxMCArKysrLQorIGdjYy9jb25maWcvbGludXguaCAgICAgICAgICAgIHwgMTAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQorIGdjYy9jb25maWcvbGludXgub3B0ICAgICAgICAgIHwgICA0ICsrCisgZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmggfCAgIDEgKworIGdjYy9jb25maWcvcnM2MDAwL3N5c3Y0LmggICAgIHwgICA1ICsrKworIGdjYy9naW5jbHVkZS9zdGRkZWYuaCAgICAgICAgIHwgICAzICsrCisgNiBmaWxlcyBjaGFuZ2VkLCAxMTAgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNS40LjAvZ2NjL2NvbmZpZy5nY2MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNS40LjAub3JpZy9nY2MvY29uZmlnLmdjYworKysrIGdjYy01LjQuMC9nY2MvY29uZmlnLmdjYworQEAgLTU3NSw3ICs1NzUsNyBAQCBjYXNlICR7dGFyZ2V0fSBpbgorIGVzYWMKKyAKKyAjIENvbW1vbiBDIGxpYnJhcmllcy4KKy10bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBMSUJDX0dMSUJDPTEgTElCQ19VQ0xJQkM9MiBMSUJDX0JJT05JQz0zIgorK3RtX2RlZmluZXM9IiR0bV9kZWZpbmVzIExJQkNfR0xJQkM9MSBMSUJDX1VDTElCQz0yIExJQkNfQklPTklDPTMgTElCQ19NVVNMPTQiCisgCisgIyAzMi1iaXQgeDg2IHByb2Nlc3NvcnMgc3VwcG9ydGVkIGJ5IC0td2l0aC1hcmNoPS4gIEVhY2ggcHJvY2Vzc29yCisgIyBNVVNUIGJlIHNlcGFyYXRlZCBieSBleGFjdGx5IG9uZSBzcGFjZS4KK0BAIC03MjAsNiArNzIwLDkgQEAgY2FzZSAke3RhcmdldH0gaW4KKyAgICAgKi0qLSp1Y2xpYmMqKQorICAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX1VDTElCQyIKKyAgICAgICA7OworKyAgICAqLSotKm11c2wqKQorKyAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX01VU0wiCisrICAgICAgOzsKKyAgICAgKikKKyAgICAgICB0bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBERUZBVUxUX0xJQkM9TElCQ19HTElCQyIKKyAgICAgICA7OworQEAgLTI0MjAsNiArMjQyMywxMSBAQCBwb3dlcnBjKi0qLWxpbnV4KikKKyAJICAgIHBvd2VycGMqLSotbGludXgqcGFpcmVkKikKKyAJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gcnM2MDAwLzc1MGNsLmgiIDs7CisgCWVzYWMKKysgICAgICAgIGNhc2UgJHt0YXJnZXR9IGluCisrCSAgICAqLWxpbnV4Ki1tdXNsKikKKysJCWVuYWJsZV9zZWN1cmVwbHQ9eWVzIDs7CisrCWVzYWMKKysKKyAJaWYgdGVzdCB4JHtlbmFibGVfc2VjdXJlcGx0fSA9IHh5ZXM7IHRoZW4KKyAJCXRtX2ZpbGU9InJzNjAwMC9zZWN1cmVwbHQuaCAke3RtX2ZpbGV9IgorIAlmaQorSW5kZXg6IGdjYy01LjQuMC9nY2MvY29uZmlnL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNS40LjAub3JpZy9nY2MvY29uZmlnL2xpbnV4LmgKKysrKyBnY2MtNS40LjAvZ2NjL2NvbmZpZy9saW51eC5oCitAQCAtMzIsMTAgKzMyLDEyIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKKyAjZGVmaW5lIE9QVElPTl9HTElCQyAgKERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDKQorICNkZWZpbmUgT1BUSU9OX1VDTElCQyAoREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDKQorICNkZWZpbmUgT1BUSU9OX0JJT05JQyAoREVGQVVMVF9MSUJDID09IExJQkNfQklPTklDKQorKyNkZWZpbmUgT1BUSU9OX01VU0wgICAoREVGQVVMVF9MSUJDID09IExJQkNfTVVTTCkKKyAjZWxzZQorICNkZWZpbmUgT1BUSU9OX0dMSUJDICAobGludXhfbGliYyA9PSBMSUJDX0dMSUJDKQorICNkZWZpbmUgT1BUSU9OX1VDTElCQyAobGludXhfbGliYyA9PSBMSUJDX1VDTElCQykKKyAjZGVmaW5lIE9QVElPTl9CSU9OSUMgKGxpbnV4X2xpYmMgPT0gTElCQ19CSU9OSUMpCisrI2RlZmluZSBPUFRJT05fTVVTTCAgIChsaW51eF9saWJjID09IExJQkNfTVVTTCkKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIEdOVV9VU0VSX1RBUkdFVF9PU19DUFBfQlVJTFRJTlMoKQkJCVwKK0BAIC01MywxOCArNTUsMjEgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICAgIHVDbGliYyBvciBCaW9uaWMgaXMgdGhlIGRlZmF1bHQgQyBsaWJyYXJ5IGFuZCB3aGV0aGVyCisgICAgLW11Y2xpYmMgb3IgLW1nbGliYyBvciAtbWJpb25pYyBoYXMgYmVlbiBwYXNzZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LiAgKi8KKyAKKy0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUjEoTElCQzEsIExJQkMyLCBMSUJDMywgTEQxLCBMRDIsIExEMykJXAorLSAgIiV7IiBMSUJDMiAiOiIgTEQyICI7OiV7IiBMSUJDMyAiOiIgTEQzICI7OiIgTEQxICJ9fSIKKysjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUjEoTElCQzEsIExJQkMyLCBMSUJDMywgTElCQzQsIExEMSwgTEQyLCBMRDMsIExENCkJXAorKyAgIiV7IiBMSUJDMiAiOiIgTEQyICI7OiV7IiBMSUJDMyAiOiIgTEQzICI7OiV7IiBMSUJDNCAiOiIgTEQ0ICI7OiIgTEQxICJ9fX0iCisgCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCistI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQikgXAorLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1nbGliYyIsICJtdWNsaWJjIiwgIm1iaW9uaWMiLCBHLCBVLCBCKQorKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKKysgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgIm1tdXNsIiwgRywgVSwgQiwgTSkKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKy0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCKSBcCistICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibXVjbGliYyIsICJtZ2xpYmMiLCAibWJpb25pYyIsIFUsIEcsIEIpCisrI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAorKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm11Y2xpYmMiLCAibWdsaWJjIiwgIm1iaW9uaWMiLCAibW11c2wiLCBVLCBHLCBCLCBNKQorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0JJT05JQworLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIpIFwKKy0gIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtYmlvbmljIiwgIm1nbGliYyIsICJtdWNsaWJjIiwgQiwgRywgVSkKKysjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCisrICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWJpb25pYyIsICJtZ2xpYmMiLCAibXVjbGliYyIsICJtbXVzbCIsIEIsIEcsIFUsIE0pCisrI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAorKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKKysgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtbXVzbCIsICJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgTSwgRywgVSwgQikKKyAjZWxzZQorICNlcnJvciAiVW5zdXBwb3J0ZWQgREVGQVVMVF9MSUJDIgorICNlbmRpZiAvKiBERUZBVUxUX0xJQkMgKi8KK0BAIC04NCwxNiArODksMTYgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorIAorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVIJCQkJCQlcCisgICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIsCVwKKy0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSKQorKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIsIE1VU0xfRFlOQU1JQ19MSU5LRVIpCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUjMyCQkJCQlcCisgICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyLCBcCistCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyKQorKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiwgTVVTTF9EWU5BTUlDX0xJTktFUjMyKQorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVI2NAkJCQkJXAorICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjY0LCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCwgXAorLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCkKKysJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSNjQsIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCkKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSWDMyCQkJCQlcCisgICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIsIFwKKy0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSWDMyKQorKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJYMzIsIE1VU0xfRFlOQU1JQ19MSU5LRVJYMzIpCisgCisgLyogV2hldGhlciB3ZSBoYXZlIEJpb25pYyBsaWJjIHJ1bnRpbWUgKi8KKyAjdW5kZWYgVEFSR0VUX0hBU19CSU9OSUMKK0BAIC0xMjMsMyArMTI4LDc0IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKKyAjIGRlZmluZSBUQVJHRVRfTElCQ19IQVNfRlVOQ1RJT04gbGludXhfbGliY19oYXNfZnVuY3Rpb24KKyAKKyAjZW5kaWYKKysKKysvKiBtdXNsIGF2b2lkcyBwcm9ibGVtYXRpYyBpbmNsdWRlcyBieSByZWFycmFuZ2luZyB0aGUgaW5jbHVkZSBkaXJlY3Rvcmllcy4KKysgKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gY3BwZGVmYXVsdC5jICovCisrI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wKKysjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9HUFAJCQlcCisrICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwJCVwKKysgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwJCVwKKysgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCQlcCisrICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCQlcCisrICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwJXAorKyAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorKworKyNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCQkJXAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCQlcCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKKysjZWxzZQorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCisrI2VuZGlmCisrCisrI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1BSRUZJWAkJCVwKKysgICAgeyBQUkVGSVhfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDAsIDB9LAorKyNlbHNlCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfUFJFRklYCisrI2VuZGlmCisrCisrI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MJCQlcCisrICAgIHsgQ1JPU1NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwfSwKKysjZWxzZQorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCisrI2VuZGlmCisrCisrI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKysjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9UT09MCQkJXAorKyAgICB7IFRPT0xfSU5DTFVERV9ESVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDB9LAorKyNlbHNlCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfVE9PTAorKyNlbmRpZgorKworKyNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKysjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUJCQlcCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCAwLCAwLCAwLCAxLCAyIH0sCVwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIDAsIDAsIDAsIDEsIDAgfSwKKysjZWxzZQorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIChDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFKSAmJiAhZGVmaW5lZCAoVEFSR0VUX1NZU1RFTV9ST09UKQorKyMgdW5kZWYgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCisrIyBkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0xPQ0FMCisrIyB1bmRlZiBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCisrIyBkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQorKyNlbHNlCisrIyB1bmRlZiBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MKKysjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MKKysjZW5kaWYKKysKKysjdW5kZWYgSU5DTFVERV9ERUZBVUxUUworKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUUwkJCQlcCisrICB7CQkJCQkJCVwKKysgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX0dQUAkJCQlcCisrICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9QUkVGSVgJCQlcCisrICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwkJCQlcCisrICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9UT09MCQkJCVwKKysgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQkJCVwKKysgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAxLCAwLCAwIH0sCQlcCisrICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CQkJCVwKKysgIH0KKysjZW5kaWYKK0luZGV4OiBnY2MtNS40LjAvZ2NjL2NvbmZpZy9saW51eC5vcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNS40LjAub3JpZy9nY2MvY29uZmlnL2xpbnV4Lm9wdAorKysrIGdjYy01LjQuMC9nY2MvY29uZmlnL2xpbnV4Lm9wdAorQEAgLTI4LDUgKzI4LDkgQEAgVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbAorIFVzZSBHTlUgQyBsaWJyYXJ5CisgCisgbXVjbGliYworLVRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgVmFyKGxpbnV4X2xpYmMsTElCQ19VQ0xJQkMpIE5lZ2F0aXZlKG1iaW9uaWMpCisrVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbGliYyxMSUJDX1VDTElCQykgTmVnYXRpdmUobW11c2wpCisgVXNlIHVDbGliYyBDIGxpYnJhcnkKKysKKyttbXVzbAorK1RhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgVmFyKGxpbnV4X2xpYmMsTElCQ19NVVNMKSBOZWdhdGl2ZShtYmlvbmljKQorK1VzZSBtdXNsIEMgbGlicmFyeQorSW5kZXg6IGdjYy01LjQuMC9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjQuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oCisrKysgZ2NjLTUuNC4wL2djYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oCitAQCAtMTgsMyArMTgsNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2RlZmluZSBDQzFfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIi1tc2VjdXJlLXBsdCIKKysjZGVmaW5lIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIi0tc2VjdXJlLXBsdCIKK0luZGV4OiBnY2MtNS40LjAvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjQuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKKysrKyBnY2MtNS40LjAvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAorQEAgLTUzOCw2ICs1MzgsMTAgQEAgRU5ESUFOX1NFTEVDVCgiIC1tYmlnIiwgIiAtbWxpdHRsZSIsIERFRgorICNkZWZpbmUgQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICIiCisgI2VuZGlmCisgCisrI2lmbmRlZiBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDCisrI2RlZmluZSBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICIiCisrI2VuZGlmCisrCisgLyogUGFzcyAtRyB4eHggdG8gdGhlIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgQ0MxX1NQRUMKKyAjZGVmaW5lCUNDMV9TUEVDICIle0cqfSAlKGNjMV9jcHUpIiBcCitAQCAtODg5LDYgKzg5Myw3IEBAIG5jcnRuLm8lcyIKKyAgIHsgImxpbmtfb3Nfb3BlbmJzZCIsCQlMSU5LX09TX09QRU5CU0RfU1BFQyB9LAkJCVwKKyAgIHsgImxpbmtfb3NfZGVmYXVsdCIsCQlMSU5LX09TX0RFRkFVTFRfU1BFQyB9LAkJCVwKKyAgIHsgImNjMV9zZWN1cmVfcGx0X2RlZmF1bHQiLAlDQzFfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgfSwJCVwKKysgIHsgImxpbmtfc2VjdXJlX3BsdF9kZWZhdWx0IiwJTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyB9LAkJXAorICAgeyAiY3BwX29zX2FkcyIsCQlDUFBfT1NfQURTX1NQRUMgfSwJCQlcCisgICB7ICJjcHBfb3NfeWVsbG93a25pZmUiLAlDUFBfT1NfWUVMTE9XS05JRkVfU1BFQyB9LAkJXAorICAgeyAiY3BwX29zX212bWUiLAkJQ1BQX09TX01WTUVfU1BFQyB9LAkJCVwKK0luZGV4OiBnY2MtNS40LjAvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTUuNC4wLm9yaWcvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCisrKysgZ2NjLTUuNC4wL2djYy9naW5jbHVkZS9zdGRkZWYuaAorQEAgLTE4NCw2ICsxODQsNyBAQCB0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworICNpZm5kZWYgX0dDQ19TSVpFX1QKKyAjaWZuZGVmIF9TSVpFVF8KKyAjaWZuZGVmIF9fc2l6ZV90CisrI2lmbmRlZiBfX0RFRklORURfc2l6ZV90IC8qIG11c2wgKi8KKyAjZGVmaW5lIF9fc2l6ZV90X18JLyogQmVPUyAqLworICNkZWZpbmUgX19TSVpFX1RfXwkvKiBDcmF5IFVuaWNvcy9NayAqLworICNkZWZpbmUgX1NJWkVfVAorQEAgLTIwMCw2ICsyMDEsNyBAQCB0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworICNkZWZpbmUgX19faW50X3NpemVfdF9oCisgI2RlZmluZSBfR0NDX1NJWkVfVAorICNkZWZpbmUgX1NJWkVUXworKyNkZWZpbmUgX19ERUZJTkVEX3NpemVfdCAvKiBtdXNsICovCisgI2lmIChkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fID49IDUpKSBcCisgICB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIFwKKyAgIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQorQEAgLTIxOCw2ICsyMjAsNyBAQCB0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OworIHR5cGVkZWYgbG9uZyBzc2l6ZV90OworICNlbmRpZiAvKiBfX0JFT1NfXyAqLworICNlbmRpZiAvKiAhKGRlZmluZWQgKF9fR05VR19fKSAmJiBkZWZpbmVkIChzaXplX3QpKSAqLworKyNlbmRpZiAvKiBfX0RFRklORURfc2l6ZV90ICovCisgI2VuZGlmIC8qIF9fc2l6ZV90ICovCisgI2VuZGlmIC8qIF9TSVpFVF8gKi8KKyAjZW5kaWYgLyogX0dDQ19TSVpFX1QgKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0NS1TdXBwb3J0LWZvci1hcm0tbGludXgtbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0NS1TdXBwb3J0LWZvci1hcm0tbGludXgtbXVzbC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ1LVN1cHBvcnQtZm9yLWFybS1saW51eC1tdXNsLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDUtU3VwcG9ydC1mb3ItYXJtLWxpbnV4LW11c2wucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDYtR2V0LXJpZC1vZi1ldmVyLWJyb2tlbi1maXhpbmNsdWRlcy1vbi1tdXNsLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDYtR2V0LXJpZC1vZi1ldmVyLWJyb2tlbi1maXhpbmNsdWRlcy1vbi1tdXNsLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDYtR2V0LXJpZC1vZi1ldmVyLWJyb2tlbi1maXhpbmNsdWRlcy1vbi1tdXNsLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDctbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDctbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0Ny1uaW9zMi1EZWZpbmUtTVVTTF9EWU5BTUlDX0xJTktFUi5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ3LW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDgtc3NwX25vbnNoYXJlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0OC1zc3Bfbm9uc2hhcmVkLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDgtc3NwX25vbnNoYXJlZC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ4LXNzcF9ub25zaGFyZWQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0OS1EaXNhYmxlLXRoZS13ZWFrLXJlZmVyZW5jZS1sb2dpYy1pbi1ndGhyLmgtZm9yLW9zLWdlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ5LURpc2FibGUtdGhlLXdlYWstcmVmZXJlbmNlLWxvZ2ljLWluLWd0aHIuaC1mb3Itb3MtZ2UucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0OS1EaXNhYmxlLXRoZS13ZWFrLXJlZmVyZW5jZS1sb2dpYy1pbi1ndGhyLmgtZm9yLW9zLWdlLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDktRGlzYWJsZS10aGUtd2Vhay1yZWZlcmVuY2UtbG9naWMtaW4tZ3Roci5oLWZvci1vcy1nZS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDUwLXBvd2VycGMtcGFzcy1zZWN1cmUtcGx0LXRvLXRoZS1saW5rZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTAtcG93ZXJwYy1wYXNzLXNlY3VyZS1wbHQtdG8tdGhlLWxpbmtlci5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDUwLXBvd2VycGMtcGFzcy1zZWN1cmUtcGx0LXRvLXRoZS1saW5rZXIucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1MC1wb3dlcnBjLXBhc3Mtc2VjdXJlLXBsdC10by10aGUtbGlua2VyLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUxLUlnbm9yZS1mZGVidWctcHJlZml4LW1hcC1pbi1wcm9kdWNlci1zdHJpbmctYnktRGFuaWUucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1Mi1uaW9zMi11c2UtcmV0LXdpdGgtcjMxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUyLW5pb3MyLXVzZS1yZXQtd2l0aC1yMzEucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1Mi1uaW9zMi11c2UtcmV0LXdpdGgtcjMxLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTItbmlvczItdXNlLXJldC13aXRoLXIzMS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDUzLWV4cHIuYy1QUi10YXJnZXQtNjUzNTgtQXZvaWQtY2xvYmJlcmluZy1wYXJ0aWFsLWFyZ3UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTMtZXhwci5jLVBSLXRhcmdldC02NTM1OC1Bdm9pZC1jbG9iYmVyaW5nLXBhcnRpYWwtYXJndS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDUzLWV4cHIuYy1QUi10YXJnZXQtNjUzNTgtQXZvaWQtY2xvYmJlcmluZy1wYXJ0aWFsLWFyZ3UucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1My1leHByLmMtUFItdGFyZ2V0LTY1MzU4LUF2b2lkLWNsb2JiZXJpbmctcGFydGlhbC1hcmd1LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTQtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU0LXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU0LXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU0LXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU1LVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1NS1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1NS1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1NS1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1Ni1FbmFibGUtbGliYy1wcm92aWRlLXNzcC1hbmQtZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU2LUVuYWJsZS1saWJjLXByb3ZpZGUtc3NwLWFuZC1nY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGUucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1Ni1FbmFibGUtbGliYy1wcm92aWRlLXNzcC1hbmQtZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTYtRW5hYmxlLWxpYmMtcHJvdmlkZS1zc3AtYW5kLWdjY19jdl90YXJnZXRfZGxfaXRlcmF0ZS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU3LXVud2luZC1maXgtZm9yLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTctdW53aW5kLWZpeC1mb3ItbXVzbC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU3LXVud2luZC1maXgtZm9yLW11c2wucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1Ny11bndpbmQtZml4LWZvci1tdXNsLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU4LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU4LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU4LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU5LWxpYmdjYy11c2UtbGRmbGFncy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1OS1saWJnY2MtdXNlLWxkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1YjcyYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1OS1saWJnY2MtdXNlLWxkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorTGluayBsaWJnY2MgdXNpbmcgTERGTEFHUywgbm90IGp1c3QgU0hMSUJfTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBnY2MtNS4zLjAub3JpZy9saWJnY2MvY29uZmlnL3Qtc2xpYmdjYworKysrIGdjYy01LjMuMC9saWJnY2MvY29uZmlnL3Qtc2xpYmdjYworQEAgLTMyLDcgKzMyLDcgQEAgU0hMSUJfSU5TVEFMTF9TT0xJTksgPSAkKExOX1MpICQoU0hMSUJfUworIAkkKERFU1RESVIpJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykKKyAKKyBTSExJQl9MSU5LID0gJChDQykgJChMSUJHQ0MyX0NGTEFHUykgLXNoYXJlZCAtbm9kZWZhdWx0bGlicyBcCistCSQoU0hMSUJfTERGTEFHUykgXAorKwkkKExERkxBR1MpICQoU0hMSUJfTERGTEFHUykgXAorIAktbyAkKFNITElCX0RJUikvJChTSExJQl9TT05BTUUpLnRtcCBAbXVsdGlsaWJfZmxhZ3NAIFwKKyAJJChTSExJQl9PQkpTKSAkKFNITElCX0xDKSAmJiBcCisgCXJtIC1mICQoU0hMSUJfRElSKS8kKFNITElCX1NPTElOSykgJiYgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE4OTk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi5pbmMKQEAgLTAsMCArMSwxMzMgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjYuMi4wIgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjYuMi4wIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNi4yOiR7RklMRV9ESVJOQU1FfS9nY2MtNi4yL2JhY2twb3J0OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKKworQkFTRVVSSSA/PSAiJHtHTlVfTUlSUk9SfS9nY2MvZ2NjLSR7UFZ9L2djYy0ke1BWfS50YXIuYnoyIgorI1NSQ1JFViA9ICJiZDlhODI2ZDU0NDhkYjExZDI5ZDJlYzU4ODRlN2U2NzkwNjZmMTQwIgorI0JBU0VVUkkgPz0gImdpdDovL2dpdGh1Yi5jb20vZ2NjLW1pcnJvci9nY2M7YnJhbmNoPWdjYy02LWJyYW5jaDtwcm90b2NvbD1naXQiCisjQkFTRVVSSSA/PSAiZnRwOi8vc291cmNld2FyZS5vcmcvcHViL2djYy9zbmFwc2hvdHMvNi4yLjAtUkMtMjAxNjA4MTUvZ2NjLTYuMi4wLVJDLTIwMTYwODE1LnRhci5iejIiCisKK1NSQ19VUkkgPSAiXAorICAgICAgICAgICAke0JBU0VVUkl9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIzLURpc2FibGUtc2R0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LWV4cG9ydC1DUFAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMxLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzItZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMzLURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNC1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzUtYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzYtbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzctaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM4LVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOS1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQwLW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDEtc3NwX25vbnNoYXJlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQyLWdjYy1saWJjcHAtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLW9sZC1uZXcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0NC1nY2MtZmluYWwuYy1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXNvdXJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDUtbGliZ2NjLUFkZC1rbm9iLXRvLXVzZS1sZGJsLTEyOC1vbi1wcGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0Ni1MaW5rLWxpYmdjYy11c2luZy1MREZMQUdTLW5vdC1qdXN0LVNITElCX0xERkxBR1MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0Ny1saWJnY2Nfcy1Vc2UtYWxpYXMtZm9yLV9fY3B1X2luZGljYXRvcl9pbml0LWluc3RlYWQtLnBhdGNoIFwKKyAgICAgICAgICAgJHtCQUNLUE9SVFN9IFwKKyIKK0JBQ0tQT1JUUyA9ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NzY4NjI1MTU5NjYzYjMwMGFlNGRlMmY0NzQ1ZmNjNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5OTQ0NTg5ZmM3MjJkM2U2NjMwOGMwY2U1MjU3Nzg4ZWJkNzg3Mjk4MmE3MThhYTI1MTYxMjM5NDA2NzFiN2M1IgorCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorI1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9naXQiCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKKyMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCitGT1JUUkFOID0gIiIKK0pBVkEgPSAiIgorCitMVE8gPSAiLS1lbmFibGUtbHRvIgorCitFWFRSQV9PRUNPTkZfQkFTRSA9ICJcCisgICAgJHtMVE99IFwKKyAgICAtLWVuYWJsZS1saWJzc3AgXAorICAgIC0tZW5hYmxlLWxpYml0bSBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorICAgIC0td2l0aG91dC1pc2wgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGliaXRtIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisgICAgLS13aXRob3V0LWlzbCBcCisgICAgZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwPXllcyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVmMDkxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA5MmVkMzBkYTE2Yjc0ODdiMzM0ZjczOWJlMTc3ZWIzOTg4NWFiNzcyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS80Nl0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8IDIgKy0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDM1ZjIzMWUuLmJmYWRjMzMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc1NTAsNyArNzU1MCw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDc0YmY1OGEuLjE5N2Q2MWIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxNDksNyArMzE0OSw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDAyLXVjbGliYy1jb25mLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjg0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSA0ZWZjNWEyNThjODEyODc1NzQzNjQ3ZDc1NmY3NWM5M2M0ZDUxNGE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi80Nl0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggZDMxODk1Ny4uZGY1NTk1MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjA3ZmViCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIGFkNWZkMjgzZmM3ZWYwNGY2NmM3ZmIwMDM4MDUzNjRlYTNiZDM0ZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzQ2XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IGVmNmNlOGYuLjQ3NDA2MzYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjczLDUgKzI3MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IDc5NDQ3MWUuLmQ2NWY5NTUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggNTkxYzc5My4uNTVlYjBlOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTI2MjdjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIDY4YmQwODMzNTdlNzg2NzhhOWJhYWM3NjBiZWIyYTMxZjAwOTU0YTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzQ2XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICA2MyArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAxMTcgKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgMzA4ICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgMzAwICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgMTAwICsrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDY5MiArKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8IDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgNDA2ICsrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzUgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgIDIgKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggYjBmODhjYi4uYTBlZTM2YiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0yMzU4LDYgKzIzNTgsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTI1NDIsNiArMjU0NSw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCA0MTc5N2E5Li44YTU0ODFjIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1ODMwLDYgKzE1ODMwLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MTA4LDYgKzE2MTExLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCA1NWEwYjUyLi43ZDhiYjE1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5X1dDSEFSCisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggZGM0Y2VmMDIuLjI1NmQxMjYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorQEAgLTE3NSw3ICsxNzUsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjc1MDE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKQEAgLTAsMCArMSwyNTcgQEAKK0Zyb20gYzAxYzE0ZThlOWJlMzgyZWNkNDEyMWVlNzBmNTAwM2I0Y2IwZjkwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQyOjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvNDZdIHVjbGliYy1sb2NhbGUtbm9fX3gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDE0IC0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxICsKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICA3IC0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICA3IC0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICA3ICstLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8IDE4ICsrKystLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDQgLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAzIC0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgMyAtLQorIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMCArMzksNiBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCistI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKy0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCistI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsKKy0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKyAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIHsKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDVhNDgyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gZTdhNDc2MGZiNDAwMDhjYWUzM2U2ZmM3ZGM0Y2ZlZjZjMmZkNWY5MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ1OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvNDZdIHVjbGliYy1sb2NhbGUtd2NoYXJfZml4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgfCAgNCArKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgfCAxMyArKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMmU2ZjgwYS4uMzFlYmI5ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQwMSw3ICs0MDEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggMmM3MDY0Mi4uZDVjODk2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0xMjcsMTIgKzEyNywyNSBAQCBuYW1lc3BhY2Ugc3RkCisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3M2U1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw1NDIgQEAKK0Zyb20gOGQ1M2EzOGEzMDM4MTA0ZTY4MzBlY2VhNWU0YmVhZGNlNTQ0NTdjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvNDZdIHVjbGliYy1sb2NhbGUtdXBkYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgMyArCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCA3NCArKysrKysrKysrLS0tLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCA0MiArKysrKystLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8IDUxICsrKysrKysrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTIgKystLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgMzQgKysrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDUgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8IDE4ICsrKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgMTcgKysrLS0KKyA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMzEsNiArMzEsOSBAQAorIAorICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorICNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxjc3RkZGVmPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIzICszOSwyMCBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIHRlbXBsYXRlPD4KKyAgICAgdm9pZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19mOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fbGQ7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2xkOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHZvaWQKK0BAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisgICB9CisgCisgICBfX2NfbG9jYWxlCisgICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CistfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistbmFtZXNwYWNlIF9fZ251X2N4eAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorICAgICB7CisgICAgICAgIkxDX0NUWVBFIiwKK0BAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyAgICAgICAiTENfSURFTlRJRklDQVRJT04iCisgI2VuZGlmCisgICAgIH07CistfQorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKy19ICAvLyBuYW1lc3BhY2Ugc3RkCisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisgI2VuZGlmCistCistICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCistICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCistICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorICAgLy8gYmUgYXZvaWRlZC4KKy0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKy0gICAgaW50CistICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGVuZGlmCisgI2VuZGlmCisgCistICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOworKyAgICAgIHZhX2VuZChfX2FyZ3MpOworIAorICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zMywxNiArMzMsMjAgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisgICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKy0gIHRlbXBsYXRlPD4KKyAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisgICAgIHsKK0BAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAJfQorICAgICB9CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCisrICAgIHsgfQorIAorICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsKKy0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKy0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisrCisgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKy0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorKworICAgICByZXR1cm4gX19yZXQ7CisgICB9CisgCitAQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAgIH0KKyAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCistfQorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC01MywxMiArNTMsMTYgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCXNpemVfdCBfX3JlZnMpCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorICAgICAgeworLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KKysgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworICAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIH0KKyAJYnJlYWs7CisgICAgICAgZGVmYXVsdDoKKy0JOworKwlfX3JldCA9IHBhdHRlcm4oKTsKKyAgICAgICB9CisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KK0BAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisgCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKK0BAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK0BAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKysgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitAQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTUwLDEyICs1MCwyMSBAQAorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCisgICAgIHsKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKysKKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWU3Yzk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDZkZGUzZGEyNGVmNGI5YjM1N2JjYTY3MGQ4NTUxY2FiM2ZkZGE4NDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0ODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDA4LzQ2XSBtaXNzaW5nLWV4ZWNpbmZvX2gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBib2VobS1nYy9pbmNsdWRlL2djLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib2VobS1nYy9pbmNsdWRlL2djLmggYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK2luZGV4IDZiMzhmMmQuLmZjYTk4ZmYgMTAwNjQ0CistLS0gYS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKysrKyBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorQEAgLTUwMyw3ICs1MDMsNyBAQCBHQ19BUEkgR0NfUFRSIEdDX21hbGxvY19hdG9taWNfaWdub3JlX29mZl9wYWdlIEdDX1BST1RPKChzaXplX3QgbGIpKTsKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjM0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYjc5NGYxZjFjMWM3YzA2ZjNmMGQ3OGNmNzZjNGZiOTBjMmFiOGRmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjAzICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvNDZdIGM5OS1zbnByaW50ZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworaW5kZXggYTQxMTliYS4uODM5NmY0MyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitAQCAtMTQ0LDcgKzE0NCw3IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHVzaW5nIDo6dnNwcmludGY7CisgfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU8KKysjaWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTyB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNGNmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKQEAgLTAsMCArMSwxOTIgQEAKK0Zyb20gZDc2MjUwMzIzZGFkNjkyMTJjOTU4ZTQ4NTdhOThkOTlhYjUxYTM5ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU5OjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvNDZdIGdjYzogcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjogY29kZXNvdXJjZXJ5XQorLS0tCisgZ2NjL2NvbW1vbi5vcHQgICAgICB8ICA0ICsrKysKKyBnY2MvY29uZmlnLmluICAgICAgIHwgIDYgKysrKysrCisgZ2NjL2NvbmZpZ3VyZSAgICAgICB8IDE2ICsrKysrKysrKysrKysrKysKKyBnY2MvY29uZmlndXJlLmFjICAgIHwgMTAgKysrKysrKysrKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgIDIgKysKKyBnY2MvaW5jcGF0aC5jICAgICAgIHwgMTkgKysrKysrKysrKysrKysrKysrKworIDcgZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbW1vbi5vcHQgYi9nY2MvY29tbW9uLm9wdAoraW5kZXggNjcwNDhkYi4uNzMzMTg1YyAxMDA2NDQKKy0tLSBhL2djYy9jb21tb24ub3B0CisrKysgYi9nY2MvY29tbW9uLm9wdAorQEAgLTY1OSw2ICs2NTksMTAgQEAgV3JldHVybi1sb2NhbC1hZGRyCisgQ29tbW9uIFZhcih3YXJuX3JldHVybl9sb2NhbF9hZGRyKSBJbml0KDEpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHJldHVybmluZyBhIHBvaW50ZXIvcmVmZXJlbmNlIHRvIGEgbG9jYWwgb3IgdGVtcG9yYXJ5IHZhcmlhYmxlLgorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyLgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcuaW4gYi9nY2MvY29uZmlnLmluCitpbmRleCAxMTVjYjYxLi4xMDViMzBmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5pbgorKysrIGIvZ2NjL2NvbmZpZy5pbgorQEAgLTE4Nyw2ICsxODcsMTIgQEAKKyAjZW5kaWYKKyAKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzICovCisrI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysjZW5kaWYKKysKKysKKyAvKiBEZWZpbmUgaWYgeW91IHdhbnQgYWxsIG9wZXJhdGlvbnMgb24gUlRMICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCisgICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCAxYzZlMzQwLi44ZjgzMTUyIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTk0Miw2ICs5NDIsNyBAQCB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV9saW5rX211dGV4CisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2hvc3Rfc2hhcmVkCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKK0BAIC0xNjgxLDYgKzE2ODIsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWVuYWJsZS1ob3N0LXNoYXJlZCAgICBidWlsZCBob3N0IGNvZGUgYXMgc2hhcmVkIGxpYnJhcmllcworICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKK0BAIC0yODkwOCw2ICsyODkxMSwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNmMxZGNkOS4uMGZjY2FlZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC01ODYxLDYgKzU4NjEsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicywKKyAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICAgICAgWzFdLAorKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgQUNfU1VCU1Qoc3ViZGlycykKKyBBQ19TVUJTVChzcmNkaXIpCitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDgyMWY4ZmQuLjhiYjQ5ZTcgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjg0LDYgKzI4NCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV3BhcmVudGhlc2VzIC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BsYWNlbWVudC1uZXcgLVdwbGFjZW1lbnQtbmV3PUB2YXJ7bn0gQGdvbAorIC1XcG9pbnRlci1hcml0aCAgLVduby1wb2ludGVyLXRvLWludC1jYXN0IEBnb2wKKystV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgQGdvbAorIC1Xbm8tcHJhZ21hcyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgIC1Xbm8tc2hhZG93LWl2YXIgQGdvbAorIC1Xc2hpZnQtb3ZlcmZsb3cgLVdzaGlmdC1vdmVyZmxvdz1AdmFye259IEBnb2wKK0BAIC00NzIzLDYgKzQ3MjQsMTQgQEAgbWFkZSB1cCBvZiBkYXRhIG9ubHkgYW5kIHRodXMgcmVxdWlyZXMgbm8gc3BlY2lhbCB0cmVhdG1lbnQuICBCdXQsIGZvcgorIG1vc3QgdGFyZ2V0cywgaXQgaXMgbWFkZSB1cCBvZiBjb2RlIGFuZCB0aHVzIHJlcXVpcmVzIHRoZSBzdGFjayB0byBiZQorIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKyAKKytAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQorK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKKytvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAorK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Cisrc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworIEBpdGVtIC1XZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDFhZjU5MjAuLjRjZmVmN2YgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEwMTcsNiArMTAxNyw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9ICIgTElOS19DT01QUkVTU19ERUJVR19TUEVDIFwKKyAgICAiJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gXAorKyAgICAle1duby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc30gXAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc30gXAorICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFwKKyAgICAgVlRBQkxFX1ZFUklGSUNBVElPTl9TUEVDICIgIiBTQU5JVElaRVJfRUFSTFlfU1BFQyAiICVvICIgQ0hLUF9TUEVDICIgXAorICAgICAle2ZvcGVuYWNjfGZvcGVubXB8JTpndCgle2Z0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JSp9IDEpOlwKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggZWE0MGY0YS4uODU2ZGE0MSAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0yNiw2ICsyNiw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODEsNiArMzgyLDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgCX0KKyAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKKyAgICAgfQorKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgeworKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKKysKKysgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKKysgICAgICAgICB7CisrICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKysgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKysgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKKysgICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3MzZhZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBhMWMyNGI1OWRlZjM5M2U0M2NkNTBiNjc2ODYwNGEyMTJjNzg4ZWQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS80Nl0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IDg1NmRhNDEuLmQyZmM4MmMgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzkyLDcgKzM5Miw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzliMDcwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gMDBlZjVmMGYyYThkM2IzM2FlYjFlNTVjMGQyMzQzOWY0ZGQ0OTVhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvNDZdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGJmYWRjMzMuLjc1NWQzODIgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY4MTksNiArNjgxOSwzOCBAQCBmaQorIAorIAorIAorKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCisrIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKKysjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgorKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCisrIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCisrIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KKytpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisgIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCisgIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KKyBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMWNkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbSA3ZmM3YTA3MGFjNTNhNTU5NTBhMWVhYzc2ZjAyODc3ZDQxMDZiNGIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTA6MDYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy80Nl0gNjQtYml0IG11bHRpbGliIGhhY2suCisKK0dDQyBoYXMgaW50ZXJuYWwgbXVsdGlsaWIgaGFuZGxpbmcgY29kZSBidXQgaXQgYXNzdW1lcyBhIHZlcnkgc3BlY2lmaWMgcmlnaWQgZGlyZWN0b3J5CitsYXlvdXQuIFRoZSBidWlsZCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlsaWIgbGF5b3V0IGlzIHZlcnkgZ2VuZXJpYyBhbmQgYWxsb3dzCitjb21wbGV0ZSBjdXN0b21pc2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorCitUaGlzIHBhdGNoIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byBhbGxvdyBhbnkgY3VzdG9tIGRpcmVjdG9yaWVzIHRvIGJlIHBhc3NlZCBpbnRvIGdjYworYW5kIGhhbmRsZWQgY29ycmVjdGx5LiBJdCBmb3JjZXMgZ2NjIHRvIHVzZSB0aGUgYmFzZV9saWJkaXIgKHdoaWNoIGlzIHRoZSBjdXJyZW50CitkaXJlY3RvcnksICIuIikuIFdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgZWFjaCBtdWx0aWxpYiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgd2UgZG9uJ3QKK2tub3cgd2hpY2ggY29tcGlsZXIgb3B0aW9ucyBtYXkgYmUgYmVpbmcgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLiBTaW5jZSB3ZSBoYXZlIGEgY29tcGlsZXIKK3BlciBtdWxpdGxpYiBhdCB0aGlzIHBvaW50IHRoYXQgaXNuJ3QgYW4gaXNzdWUuCisKK1RoZSBvbmUgcHJvYmxlbSBpcyB0aGUgdGFyZ2V0IGNvbXBpbGVyIGlzIG9ubHkgZ29pbmcgdG8gd29yayBmb3IgdGhlIGRlZmF1bHQgbXVsdGxpbGliIGF0Cit0aGlzIHBvaW50LiBJZGVhbGx5IHdlJ2QgZmlndXJlIG91dCB3aGljaCBtdWx0aWxpYnMgd2VyZSBiZWluZyBlbmFibGVkIHdpdGggd2hpY2ggcGF0aHMKK2FuZCBiZSBhYmxlIHRvIHBhdGNoIHRoZXNlIGVudHJpZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBjb3JyZWN0IHBhdGhzIGJ1dCB0aGlzIHdlCitkb24ndCBoYXZlIHN1Y2ggY29kZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGUgdGFyZ2V0IGdjYyByZWNpcGUgc2hvdWxkIGRvCithbmQgb3ZlcnJpZGUgdGhlc2UgcGxhdGZvcm0gZGVmYXVsdHMgaW4gaXRzIGJ1aWxkIGNvbmZpZy4KKworUlAgMTUvOC8xMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRWx2aXMgRG93c29uIDxlbHZpcy5kb3dzb25AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgICB8ICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8IDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgNSArKy0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgYi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitpbmRleCBjMGNjOGEzLi4zNjVhNWQ2IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAoraW5kZXggMTZjOGFkZi4uYjkzMmFjZSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitpbmRleCBmYTc1NTBiLi45YjVkOWVmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiwxMCArMjYsOSBAQAorICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgorIAorIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgorLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKKytNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgorIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCistTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQorK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKyAKKyByczYwMDAtbGludXgubzogJChzcmNkaXIpL2NvbmZpZy9yczYwMDAvcnM2MDAwLWxpbnV4LmMKKyAJJChDT01QSUxFKSAkPAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjBjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDEyNSBAQAorRnJvbSAzNjI3NWY3OTgxYmRhZjkxOWJiYzliNTFhN2M3ZmFlMWUxOTJhZGIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC80Nl0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8ICA0ICsrKysKKyBnY2MvY3AvZysrc3BlYy5jICAgIHwgIDEgKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK2luZGV4IDRmODY4NzYuLjY2MGRhNmMgMTAwNjQ0CistLS0gYS9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBiL2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTE2NDcsNiArMTY0NywxMCBAQCBub3N0ZGluYysrCisgQysrIE9iakMrKworIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKy4KKyAKKytub3N0ZGxpYisrCisrRHJpdmVyCisrRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQorKworIG8KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKKyA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAorZGlmZiAtLWdpdCBhL2djYy9jcC9nKytzcGVjLmMgYi9nY2MvY3AvZysrc3BlYy5jCitpbmRleCAwM2NiZGUwLi4zNjQyNTQwIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2crK3NwZWMuYworKysrIGIvZ2NjL2NwL2crK3NwZWMuYworQEAgLTEzNyw2ICsxMzcsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqaW5fZGVjb2RlZF9vcHRpb25zLAorICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDhiYjQ5ZTcuLjg0ZDY4YWEgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjA3LDYgKzIwNyw5IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgLWZuby13ZWFrICAtbm9zdGRpbmMrKyBAZ29sCisgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKystZnZ0YWJsZS12ZXJpZnk9QHJ7W31zdGRAcnt8fXByZWluaXRAcnt8fW5vbmVAcntdfSBAZ29sCisrLWZ2dHYtY291bnRzIC1mdnR2LWRlYnVnIEBnb2wKKystbm9zdGRsaWIrKyBAZ29sCisgLWZleHQtbnVtZXJpYy1saXRlcmFscyBAZ29sCisgLVdhYmk9QHZhcntufSAgLVdhYmktdGFnICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCisgLVdkZWxldGUtbm9uLXZpcnR1YWwtZHRvciAtV2xpdGVyYWwtc3VmZml4IC1XbXVsdGlwbGUtaW5oZXJpdGFuY2UgQGdvbAorQEAgLTQ3MCw3ICs0NzMsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorIC1zdGF0aWMtbGlibXB4IC1zdGF0aWMtbGlibXB4d3JhcHBlcnMgQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9IC16IEB2YXJ7a2V5d29yZH19CisgCitAQCAtMTA2MDEsNiArMTA2MDQsMzMgQEAgbGlicmFyeSBzdWJyb3V0aW5lcy4KKyBjb25zdHJ1Y3RvcnMgYXJlIGNhbGxlZDsgQHB4cmVme0NvbGxlY3QyLCxAY29kZXtjb2xsZWN0Mn0sIGdjY2ludCwKKyBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSBJbnRlcm5hbHN9LikKKyAKKytAaXRlbSAtbm9zdGRsaWIrKworK0BvcGluZGV4IG5vc3RkbGliKysKKytEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KKytPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KKysKKytAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KKytAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisrQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQorK0BjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vZGVmYXVsdGxpYnN9CisrQGNpbmRleCBAb3B0aW9uey1ub2RlZmF1bHRsaWJzfSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisrQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vZGVmYXVsdGxpYnN9CisrT25lIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJpZXMgYnlwYXNzZWQgYnkgQG9wdGlvbnstbm9zdGRsaWJ9IGFuZAorK0BvcHRpb257LW5vZGVmYXVsdGxpYnN9IGlzIEBmaWxle2xpYmdjYy5hfSwgYSBsaWJyYXJ5IG9mIGludGVybmFsIHN1YnJvdXRpbmVzCisrd2hpY2ggR0NDIHVzZXMgdG8gb3ZlcmNvbWUgc2hvcnRjb21pbmdzIG9mIHBhcnRpY3VsYXIgbWFjaGluZXMsIG9yIHNwZWNpYWwKKytuZWVkcyBmb3Igc29tZSBsYW5ndWFnZXMuCisrKEB4cmVme0ludGVyZmFjZSwsSW50ZXJmYWNpbmcgdG8gR0NDIE91dHB1dCxnY2NpbnQsR05VIENvbXBpbGVyCisrQ29sbGVjdGlvbiAoR0NDKSBJbnRlcm5hbHN9LAorK2ZvciBtb3JlIGRpc2N1c3Npb24gb2YgQGZpbGV7bGliZ2NjLmF9LikKKytJbiBtb3N0IGNhc2VzLCB5b3UgbmVlZCBAZmlsZXtsaWJnY2MuYX0gZXZlbiB3aGVuIHlvdSB3YW50IHRvIGF2b2lkCisrb3RoZXIgc3RhbmRhcmQgbGlicmFyaWVzLiAgSW4gb3RoZXIgd29yZHMsIHdoZW4geW91IHNwZWNpZnkgQG9wdGlvbnstbm9zdGRsaWJ9Cisrb3IgQG9wdGlvbnstbm9kZWZhdWx0bGlic30geW91IHNob3VsZCB1c3VhbGx5IHNwZWNpZnkgQG9wdGlvbnstbGdjY30gYXMgd2VsbC4KKytUaGlzIGVuc3VyZXMgdGhhdCB5b3UgaGF2ZSBubyB1bnJlc29sdmVkIHJlZmVyZW5jZXMgdG8gaW50ZXJuYWwgR0NDCisrbGlicmFyeSBzdWJyb3V0aW5lcy4KKysoQW4gZXhhbXBsZSBvZiBzdWNoIGFuIGludGVybmFsIHN1YnJvdXRpbmUgaXMgQGNvZGV7X19tYWlufSwgdXNlZCB0byBlbnN1cmUgQysrCisrY29uc3RydWN0b3JzIGFyZSBjYWxsZWQ7IEBweHJlZntDb2xsZWN0MiwsQGNvZGV7Y29sbGVjdDJ9LCBnY2NpbnQsCisrR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykgSW50ZXJuYWxzfS4pCisrCisgQGl0ZW0gLXBpZQorIEBvcGluZGV4IHBpZQorIFByb2R1Y2UgYSBwb3NpdGlvbiBpbmRlcGVuZGVudCBleGVjdXRhYmxlIG9uIHRhcmdldHMgdGhhdCBzdXBwb3J0IGl0LgorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNGNmZWY3Zi4uZGEwYjQ4MiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTAyOCw2ICsxMDI4LDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9ICBcbiUocG9zdF9saW5rKSB9fX19fX0iCisgI2VuZGlmCisgCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzczNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gOTM0NmY2MDQyZDhmN2Y4NWE3NWNhMmFmMTVmM2I4ZDIzNDk4NTE2NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvNDZdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDhmODMxNTIuLjVlNzJmMTcgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjcwMTgsMTMgKzI3MDE4LDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMGZjY2FlZi4uZGQ4ZjZmYSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00NTIyLDEzICs0NTIyLDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTQ4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDEwMzNiYzJkNGVmYzVjMzAxYmI4MjJiNjA3YTY3M2Y1YjEwY2M2OWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzQ2XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZGEwYjQ4Mi4uN2NhMTI5ZiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDU5MSw2ICs0NTkxLDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGJhYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gNjcxMjNhMzA2ODgwYWY5OTdhOTlhZTUxNDY3N2MyZGE0OTczYmQxYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvNDZdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4KKyAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hpbGUgY29tcGlsaW5nIGdjYy1jcm9zc3Nkay1pbml0aWFsLXg4Nl82NCBvbiBzb21lIGhvc3QsIHRoZXJlIGlzCitvY2Nhc2lvbmFsbHkgZmFpbHVyZSB0aGF0IHRlc3QgdGhlIGV4aXN0YW5jZSBvZiBkZWZhdWx0LmggZG9lc24ndAord29yaywgdGhlIHJlYXNvbiBpcyB0bV9pbmNsdWRlX2xpc3Q9JyoqIGRlZmF1bHRzLmgnIHJhdGhlciB0aGFuCit0bV9pbmNsdWRlX2xpc3Q9JyoqIC4vZGVmYXVsdHMuaCcKKworU28gd2UgYWRkIHRoZSB0ZXN0IGNvbmRpdGlvbiBmb3IgdGhpcyBzaXR1YXRpb24uCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8IDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA2YzVhZGMwLi45YTFkNDY2IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC01MTcsNyArNTE3LDcgQEAgVEFSR0VUX1NZU1RFTV9ST09UID0gQFRBUkdFVF9TWVNURU1fUk9PVEAKKyBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FID0gQFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkVACisgCisgeG1ha2VfZmlsZT1AeG1ha2VfZmlsZUAKKy10bWFrZV9maWxlPUB0bWFrZV9maWxlQAorK3RtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVAIC4vdC1vZQorIFRNX0VORElBTl9DT05GSUc9QFRNX0VORElBTl9DT05GSUdACisgVE1fTVVMVElMSUJfQ09ORklHPUBUTV9NVUxUSUxJQl9DT05GSUdACisgVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUc9QFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHQAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA1ZTcyZjE3Li4zODliNmQ1IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTEyMTMwLDggKzEyMTMwLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZGQ4ZjZmYS4uOTFhYzgwMCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xODgzLDggKzE4ODMsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggNjdkZmFjNi4uYjczZTA4ZCAxMDA2NDQKKy0tLSBhL2djYy9ta2NvbmZpZy5zaAorKysrIGIvZ2NjL21rY29uZmlnLnNoCitAQCAtNzcsNyArNzcsNyBAQCBpZiBbIC1uICIkSEVBREVSUyIgXTsgdGhlbgorICAgICBpZiBbICQjIC1nZSAxIF07IHRoZW4KKyAJZWNobyAnI2lmZGVmIElOX0dDQycgPj4gJHtvdXRwdXR9VAorIAlmb3IgZmlsZSBpbiAiJEAiOyBkbworLQkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKysJICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4Ii4vZGVmYXVsdHMuaCIgLW8geCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisgCQlwb3N0cG9uZV9kZWZhdWx0c19oPSJ5ZXMiCisgCSAgICBlbHNlCisgCQllY2hvICIjIGluY2x1ZGUgXCIkZmlsZVwiIiA+PiAke291dHB1dH1UCitAQCAtMTA5LDcgKzEwOSw3IEBAIGVzYWMKKyAKKyAjIElmIHdlIHBvc3Rwb25lZCBpbmNsdWRpbmcgZGVmYXVsdHMuaCwgYWRkIHRoZSAjaW5jbHVkZSBub3cuCisgaWYgdGVzdCB4IiRwb3N0cG9uZV9kZWZhdWx0c19oIiA9IHgieWVzIjsgdGhlbgorLSAgICBlY2hvICIjIGluY2x1ZGUgXCJkZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKysgICAgZWNobyAiIyBpbmNsdWRlIFwiLi9kZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKyBmaQorIAorICMgQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIGd1YXJkLCBwYXJ0IHR3by4KKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2Q4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBlMzYwZGMzZTBmMWUwYjliMDAxZWY3MjJmY2Y2NmY4MTIwYTAzZGJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC80Nl0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCBmNzQ2ZjZmLi5iNGYzMjc4IDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjczNCw3ICsxMjczNCw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDhmMzc3YmIuLjY3NzEwYjUgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTI0MCw3ICsyNDAsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxOS1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxOS1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdhNWVkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE5LWNwcC1ob25vci1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gOThkOWMwYzFiNTU1MjI5NGIyMTMwZjczMDRiZmI1MjJkYTMyMzQ0MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIyOjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvNDZdIGNwcDogaG9ub3Igc3lzcm9vdC4KKworQ3VycmVudGx5LCBpZiB0aGUgZ2NjIHRvb2xjaGFpbiBpcyByZWxvY2F0ZWQgYW5kIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSwgdGhlbiB5b3UgdHJ5IGFuZCBjb21waWxlCitwcmVwcm9jZXNzZWQgc291cmNlICguaSBvciAuaWkgZmlsZXMpLCB0aGUgY29tcGlsZXIgd2lsbCB0cnkgYW5kIGFjY2VzcyB0aGUgYnVpbHRpbiBzeXNyb290IGxvY2F0aW9uCityYXRoZXIgdGhhbiB0aGUgLS1zeXNyb290IG9wdGlvbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLiBJZiBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnkgaXMKK3Blcm1pc3Npb24gZGVuaWVkICh1bnJlYWRhYmxlKSwgZ2NjIHdpbGwgZXJyb3IuCisKK1RoaXMgaGFwcGVucyB3aGVuIGNjYWNoZSBpcyBpbiB1c2UgZHVlIHRvIHRoZSBmYWN0IGl0IHVzZXMgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlcy4KKworVGhlIGZpeCBiZWxvdyBhZGRzICVJIHRvIHRoZSBjcHAtb3V0cHV0IHNwZWMgbWFjcm8gc28gdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9ucyBmb3IgLWlwcmVmaXgsCistaXN5c3RlbSwgLWlzeXNyb290IGhhcHBlbiBhbmQgdGhlIGNvcnJlY3Qgc3lzcm9vdCBpcyB1c2VkLgorCitbWU9DVE8gIzIwNzRdCisKK1JQIDIwMTIvMDQvMTMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY3AvbGFuZy1zcGVjcy5oIHwgMiArLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY3AvbGFuZy1zcGVjcy5oIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAoraW5kZXggOTcwN2ZhYy4uZmU0ODdhMiAxMDA2NDQKKy0tLSBhL2djYy9jcC9sYW5nLXNwZWNzLmgKKysrKyBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK0BAIC02NCw1ICs2NCw1IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICB7Ii5paSIsICJAYysrLWNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGMrKy1jcHAtb3V0cHV0IiwKKyAgICAiJXshTToleyFNTToleyFFOlwKKy0gICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAlMlwKKysgICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAlMlwKKyAgICAgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDdjYTEyOWYuLjA0ZmE4MWQgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEzMjksNyArMTMyOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGlsZXIgZGVmYXVsdF9jb21waWxlcnNbXSA9CisgCQkJCQkgICAlV3tvKjotLW91dHB1dC1wY2g9JSp9fSVWfX19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjAtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNjEyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjAtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDFmMTU0NDdmYmNmNjUxNDI2MjdhZjhhOTY5NDc2MTUzNGRhOGQwZDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDIwLzQ2XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGY2NmU0OGMuLjljNmQxNTYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDY1LDI5ICsyMDY1LDI5IEBAIG1pcHMqLSotbGludXgqKQkJCQkjIExpbnV4IE1JUFMsIGVpdGhlciBlbmRpYW4uCisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczMyCisgCQkJOzsKKyAJCW1pcHM2NGVsLXN0LWxpbnV4LWdudSkKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG1pcHMvc3QuaCIKKyAJCQl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IG1pcHMvdC1zdCIKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwczY0b2N0ZW9uKi0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQ1BVX1NUUklOR19ERUZBVUxUPVxcXCJvY3Rlb25cXFwiIgorIAkJCXRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1NPRlRfRkxPQVRfQUJJCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHNpc2E2NHI2Ki0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzNjRyNgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzaXNhNjRyMiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczY0cjIKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwczY0Ki0qLWxpbnV4KiB8IG1pcHNpc2E2NCotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJZXNhYworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjEtRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzVjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjEtRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApAQCAtMCwwICsxLDIzNCBAQAorRnJvbSA5ZjczYzg5MThiNjNlNmExYzliNzkzODRmYWM0MTFkMTA1NmVlYzFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjQ6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS80Nl0gRGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyByZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUgorCitUaGlzIHBhdGNoIGRlZmluZXMgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIgd2hpY2ggY2FuIGJlIHNldCBpbiBnZW5lcmF0ZWQgaGVhZGVycworVGhpcyBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgaGFyZGNvZGVkIG11bHRpbGliIGluIGdjYworQ2hhbmdlIGlzIG9ubHkgZm9yIHRoZSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyBpbiBPRSBpbmNsdWRpbmcKK1NILCBzcGFyYywgYWxwaGEgZm9yIHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IChpZiBhbnkpCisKK1JlbW92ZXMgdGhlIGRvX2hlYWRlcmZpeCB0YXNrIGluIG1ldGFkYXRhCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggfCAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oICB8ICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXguaCAgICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXg2NC5oICAgIHwgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9saW51eC5oICAgICAgICAgICB8ICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAxNiArKysrKystLS0tLS0tLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmggICB8ICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggYi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitpbmRleCBhMDc2NGQzLi4wMmY3YTdjIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorKysrIGIvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorQEAgLTIzLDggKzIzLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggYWNlODQ4MS4uNDAxMDQzNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNjgsOCArNjgsOCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgYW5kIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSS4gICovCisgCisgI3VuZGVmICBHTElCQ19EWU5BTUlDX0xJTktFUgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAiL2xpYi9sZC1saW51eC5zby4zIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFybWhmLnNvLjMiCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitpbmRleCBhOTRiZDJkLi4wMjIwNjI4IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNjIsNyArNjIsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbGludXguaCBiL2djYy9jb25maWcvaTM4Ni9saW51eC5oCitpbmRleCBkMzdhODc1Li5lZGRlNTg2IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eC5oCitAQCAtMjAsNyArMjAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTiAiZWxmX2kzODYiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIKKyAjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbXVzbC1pMzg2LnNvLjEiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK2luZGV4IDczZDIyZTMuLmY0YjU2MTUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCisrKysgYi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitAQCAtMjcsOSArMjcsOSBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9ONjQgImVsZl94ODZfNjQiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTlgzMiAiZWxmMzJfeDg2XzY0IgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWJ4MzIvbGQtbGludXgteDMyLnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDg2LTY0LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDMyLnNvLjIiCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLW11c2wtaTM4Ni5zby4xIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbGludXguaCBiL2djYy9jb25maWcvbGludXguaAoraW5kZXggOWFlZWI5NC4uYjA1NTY1MiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9saW51eC5oCitAQCAtODEsMTAgKzgxLDEwIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggYi9nY2MvY29uZmlnL21pcHMvbGludXguaAoraW5kZXggZmEyNTNiNi4uZGEwMmM4ZCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL21pcHMvbGludXguaAorQEAgLTIyLDIwICsyMiwyMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0CisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLW11c2wtbWlwcyV7RUw6ZWx9JXttc29mdC1mbG9hdDotc2Z9LnNvLjEiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitpbmRleCBmZWZhMGM0Li43MTczOTM4IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKK0BAIC00MTIsMTYgKzQxMiwxMSBAQCBleHRlcm4gaW50IGRvdF9zeW1ib2xzOworICN1bmRlZglMSU5LX09TX0RFRkFVTFRfU1BFQworICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIlKGR5bmFtaWNfbGlua2VyX3ByZWZpeCkvbGliL2xkLnNvLjEiCistCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorICNpZmRlZiBMSU5VWDY0X0RFRkFVTFRfQUJJX0VMRnYyCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0iJXttYWJpPWVsZnYxOiUoZHluYW1pY19saW5rZXJfcHJlZml4KS9saWI2NC9sZDY0LnNvLjE7IiBcCistIjolKGR5bmFtaWNfbGlua2VyX3ByZWZpeCkvbGliNjQvbGQ2NC5zby4yfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MToiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMn0iCisgI2Vsc2UKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSIle21hYmk9ZWxmdjI6JShkeW5hbWljX2xpbmtlcl9wcmVmaXgpL2xpYjY0L2xkNjQuc28uMjsiIFwKKy0iOiUoZHluYW1pY19saW5rZXJfcHJlZml4KS9saWI2NC9sZDY0LnNvLjF9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMjs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xfSIKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIzMiBcCitAQCAtNDI5LDggKzQyNCw5IEBAIGV4dGVybiBpbnQgZG90X3N5bWJvbHM7CisgI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSNjQgXAorICAgIi9saWIvbGQtbXVzbC1wb3dlcnBjNjQiIE1VU0xfRFlOQU1JQ19MSU5LRVJfRSAiJXttc29mdC1mbG9hdDotc2Z9LnNvLjEiCisgCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgXAorICAgIiV7bWdsaWJjOiIgRyAiOzole21tdXNsOiIgTSAiOzoiIFUgIn19IgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc2gvbGludXguaCBiL2djYy9jb25maWcvc2gvbGludXguaAoraW5kZXggMmEwMzZhYy4uNTBmYjczNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc2gvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitAQCAtNjQsNyArNjQsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgIi9saWIvbGQtbXVzbC1zaCIgTVVTTF9EWU5BTUlDX0xJTktFUl9FIE1VU0xfRFlOQU1JQ19MSU5LRVJfRlAgXAorICAgIiV7bWZkcGljOi1mZHBpY30uc28uMSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICIle21mZHBpYzpfZmQ7Ol9saW51eH0iCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitpbmRleCA5YjMyNTc3Li43YmQ2NmRlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKK0BAIC04Myw3ICs4Myw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpob3N0X2RldGVjdF9sb2NhbF9jcHUgKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICItbSBlbGYzMl9zcGFyYyAle3NoYXJlZDotc2hhcmVkfSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmggYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAoraW5kZXggYTFlZjMyNS4uM2JhZTNkNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCisrKysgYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorQEAgLTg0LDggKzg0LDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjaWZkZWYgU1BBUkNfQklfQVJDSAorIAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjItZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDIyLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWI2ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDIyLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGFjY2U1MTU3ZjZiM2ExZGM5YTM2NzZiNzExOGFjODg3ZGM1NjkzYmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzQ2XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggOWExZDQ2Ni4uNDUwY2I3OSAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtMzM0OSw3ICszMzQ5LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgJCQoY2QgJChzcmNkaXIpOyBlY2hvICouaCAqLmRlZikgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpICQkKGNkICQoc3JjZGlyKTsgZWNobyAqLmggKi5kZWYpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMy1EaXNhYmxlLXNkdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMy1EaXNhYmxlLXNkdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWZkODkwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDIzLURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIDY1NzNhZWMwMGFkYTM1YzQ4YzE4MzhjODQ5MWNlOGY3Nzk4YWU5OTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDIzLzQ2XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDM4OWI2ZDUuLjczYzI2NGQgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjg1MjgsMTIgKzI4NTI4LDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOTFhYzgwMC4uY2VjZjEyMSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC01NTE0LDE1ICs1NTE0LDE1IEBAIGZpCisgQUNfU1VCU1QoW2VuYWJsZV9kZWZhdWx0X3NzcF0pCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IDhhNTQ4MWMuLjZhNDBlOTIgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjE3MzUsMTEgKzIxNzM1LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggOWUxOWU5OS4uMDA3N2ZmZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMzAsNyArMjMwLDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI0LWxpYnRvb2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjQtbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjczYjVkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI0LWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA2YzBhYTVjMjUzODgyOTI0ODU0NzE5NzcxODAzN2ZmMGI5Nzg4Njc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjk6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNC80Nl0gbGlidG9vbAorCitsaWJzdGRjKysgZnJvbSBnY2MtcnVudGltZSBnZXRzIGNyZWF0ZWQgd2l0aCAtcnBhdGg9L3Vzci9saWIvLi4vbGliIGZvciBxZW11eDg2LTY0Cit3aGVuIHJ1bm5pbmcgb24gYW0geDg2XzY0IGJ1aWxkIGhvc3QuCisKK1RoaXMgcGF0Y2ggc3RvcHMgdGhpcyBzcGVhZGluZyB0byBsaWJkaXIgaW4gdGhlIGxpYnN0ZGMrKy5sYSBmaWxlIHdpdGhpbiBsaWJ0b29sLgorQXJndWFibHksIGl0IHNob3VsZG4ndCBiZSBwYXNzaW5nIHRoaXMgaW50byBsaWJ0b29sIGluIHRoZSBmaXJzdCBwbGFjZSBidXQKK2ZvciBub3cgdGhpcyByZXNvbHZlcyB0aGUgbmFzdGllc3QgcHJvYmxlbXMgdGhpcyBjYXVzZXMuCisKK2Z1bmNfbm9ybWFsX2Fic3BhdGggd291bGQgcmVzb2x2ZSBhbiBlbXB0eSBwYXRoIHRvIGBwd2RgIHNvIHdlIG5lZWQKK3RvIGZpbHRlciB0aGUgemVybyBjYXNlLgorCitSUCAyMDEyLzgvMjQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsdG1haW4uc2ggfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDk1MDNlYzguLjAxMjFmYmEgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYzNTksNiArNjM1OSwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorIAorICAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKysgICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisrCWZ1bmNfbm9ybWFsX2Fic3BhdGggIiRpbnN0YWxsX2xpYmRpciIKKysJaW5zdGFsbF9saWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisrICAgICAgZmkKKyAKKyAgICAgICBvbGRsaWJzPQorICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI1LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjUtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjdlZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI1LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSBiMTI2M2E0ODU1M2NlNzVmOGMzYmVkNGZlMTIxMjJhZjU3ODQ1NTY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzA6MzIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS80Nl0gZ2NjOiBhcm12NDogcGFzcyBmaXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJLgorCitUaGUgTElOS19TUEVDIGZvciBsaW51eCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGxpbnV4LWVhYmkuaCB3aGljaAorbWVhbnMgdGhlIHZhbHVlIG9mIFRBUkdFVF9GSVhfVjRCWF9TUEVDIGdldHMgbG9zdCBhbmQgYXMgYSByZXN1bHQKK3RoZSBvcHRpb24gaXMgbm90IHBhc3NlZCB0byBsaW5rZXIgd2hlbiBjaG9zaW5nIG1hcmNoPWFybXY0CitUaGlzIHBhdGNoIHJlZGVmaW5lcyB0aGlzIGluIGxpbnV4LWVhYmkuaCBhbmQgcmVpbnNlcnRzIGl0Citmb3IgZWFiaSBkZWZhdWx0aW5nIHRvb2xjaGFpbnMuCisKK1dlIG1pZ2h0IHdhbnQgdG8gc2VuZCBpdCB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggfCA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggNDAxMDQzNS4uYWFlYTFjOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtOTQsMTAgKzk0LDE0IEBACisgI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSIFwKKyAgICIvbGliL2xkLW11c2wtYXJtIiBNVVNMX0RZTkFNSUNfTElOS0VSX0UgIiV7bWZsb2F0LWFiaT1oYXJkOmhmfS5zby4xIgorIAorKy8qIEZvciBhcm12NCB3ZSBwYXNzIC0tZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSSAqLworKyN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQworKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCisrCisgLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KKyAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCisgI3VuZGVmICBMSU5LX1NQRUMKKy0jZGVmaW5lIExJTktfU1BFQyBFQUJJX0xJTktfU1BFQwkJCQkJXAorKyNkZWZpbmUgTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDIEVBQklfTElOS19TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjYtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNi1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjViZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjYtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBiNWMzMDVmYzI1MTI5OWYyZTMyODQxMGIxOGNmYjU1Yzc1YjVmMDM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNi80Nl0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA3M2MyNjRkLi4zNzcyNTNlIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTEyMTEwLDEwICsxMjExMCwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTEyMTI0LDYgKzEyMTM0LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGNlY2YxMjEuLjU0ZTc2MTkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTg2MywxMCArMTg2MywyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE4NzcsNiArMTg4NywxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjctQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNy1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYmJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjctQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGViNjE3OGI3ZmI0NjZhZTQyOWM1NjM4MGM2ZGJjNTY0YTE2ZDkwMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwOTozOTozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDI3LzQ2XSBBdm9pZCB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYQorIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDAxMjFmYmEuLjUyYmRiZGIgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyOC1leHBvcnQtQ1BQLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI4LWV4cG9ydC1DUFAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxMjUzOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyOC1leHBvcnQtQ1BQLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gNjE3MTg0ZjM1ZTk3OTM0ZDllNjI2OGU3MTM3ODU3NGUyYjc3NmMyYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA5OjQwOjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjgvNDZdIGV4cG9ydCBDUFAKKworVGhlIE9FIGVudmlyb25tZW50IHNldHMgYW5kIGV4cG9ydHMgQ1BQIGFzIGJlaW5nIHRoZSB0YXJnZXQgZ2NjLiBXaGVuCitidWlsZGluZyBnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQKK2luIGJ1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlCit1c2luZyB0aGUgaG9zdCAiZ2NjIiwgbm90IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjLiBTaW5jZSB0aGUgbWluZ3czMgoraGVhZGVycyBhcmUgdmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcKK2ludG8gY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkCitmYWlsdXJlcyByZWxhdGVkIHRvIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1ZGUgYSBwcm9jZXNzLmggZmlsZSBmb3IgcGVtLXVuaXguYy4KKworVGhlIGZpeCBpcyB0byBlbnN1cmUgd2UgZXhwb3J0IGEgc2FuZSBDUFAgdmFsdWUgaW50byB0aGUgYnVpbGQKK2Vudmlyb25tZW50IHdoZW4gdXNpbmcgYnVpbGQgdGFyZ2V0cy4gV2UgY291bGQgZGVmaW5lIGEgQ1BQX0ZPUl9CVUlMRCB2YWx1ZSB3aGljaCBtYXkgYmUKK3RoZSB2ZXJzaW9uIHdoaWNoIG5lZWRzIHRvIGJlIHVwc3RyZWFtZWQgYnV0IGZvciBub3csIHRoaXMgZml4IGlzIGdvb2QgZW5vdWdoIHRvCithdm9pZCB0aGUgcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAxNTIyZTM5Li5iZWI5YjlhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTQ5LDYgKzE0OSw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2I5YzBkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSBlMTQwNzAwOTc2ZTNiN2ViNDI1MGIxZmZkZTliYzE2NDk0NDU2OTAzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMjkvNDZdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAorCitXaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyAgICAgICAgICAgICAgIHwgOSArKysrKysrKy0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eHNwZS5oIHwgMyAtLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IDljNmQxNTYuLjE4Y2ZmNWEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMzkyLDcgKzIzOTIsMTQgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSByczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwkJOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIKKysJCTs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJZXh0cmFfb2Jqcz0iJGV4dHJhX29ianMgcnM2MDAwLWxpbnV4Lm8iCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXhzcGUuaCBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKK2luZGV4IDM1NjIzY2QuLmY3NGUwMGQgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eHNwZS5oCisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eHNwZS5oCitAQCAtMjcsNiArMjcsMyBAQAorICN1bmRlZglUQVJHRVRfREVGQVVMVAorICNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgTUFTS19TVFJJQ1RfQUxJR04KKyAjZW5kaWYKKy0KKy0jdW5kZWYgIEFTTV9ERUZBVUxUX1NQRUMKKy0jZGVmaW5lCUFTTV9ERUZBVUxUX1NQRUMgIi1tcHBjIC1tc3BlIC1tZTUwMCIKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMwLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzAtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDlkMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMwLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAwZGRjYjk1YTg2ODMwNzY2ZmQwMjEyMmYxOTM4NGZjOTI5YjM3N2M1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjE6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMC80Nl0gRGlzYWJsZSB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyBhbmQgb3RoZXIgbXVsdGlsaWIKKyBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUKK0FCSSwgYXMKK2xvbmcgYXMgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIHByZXNlbnQgaW4gL2xpYi4KKworV2Ugc2ltcGx5IHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHJ1bGVzIGluIGdjYyB0byBmaW5kIGFuZCBjb25maWd1cmUgdGhlCitub3JtYWwgbGliZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbT0UtU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAoraW5kZXggMWNmZTlmMy4uZDY4OGFjOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKysrKyBiL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK0BAIC0yMSw4ICsyMSw4IEBACisgTElCMUFTTVNSQyAgID0gYWFyY2g2NC9saWIxZnVuY3MuYXNtCisgTElCMUFTTUZVTkNTID0gX2FhcmNoNjRfc3luY19jYWNoZV9yYW5nZQorIAorLUFBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG1hYmkubHA2ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCistTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI0FBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCisrI01VTFRJTElCX09TRElSTkFNRVMgPSBtYWJpLmxwNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKyAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG1hYmkuaWxwMzI9Li4vbGliaWxwMzIKKysjTVVMVElMSUJfT1NESVJOQU1FUyArPSBtYWJpLmlscDMyPS4uL2xpYmlscDMyCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzMS1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzMS1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjFjZDBmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMxLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gZmM2NjIxNDM1YTY0YTlkNjlhYTI1MWI3MDM2MWRhOTRjZjJkYjZiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjI1OjExICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzEvNDZdIEVuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArKworIGdjYy9jcHBkZWZhdWx0LmMgfCA0ICsrKysKKyBnY2MvZGVmYXVsdHMuaCAgIHwgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgIHwgNyAtLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA0NTBjYjc5Li5jYzc1NTM2IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC01OTMsNiArNTkzLDcgQEAgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI2ODgsNiArMjY4OSw3IEBAIENGTEFHUy1pbnRsLm8gKz0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIgorIAorIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAorICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKKysgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKKyAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAorZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCitpbmRleCA1NGFhZjA2Li43YjRkZDUxIDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTU5LDYgKzU5LDEwIEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCAzZTE4MzM4Li4wZjMxN2YyIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTQ5Miw0ICsxNDkyLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICNkZWZpbmUgRFdBUkZfR05BVF9FTkNPRElOR1NfREVGQVVMVCBEV0FSRl9HTkFUX0VOQ09ESU5HU19HREIKKyAjZW5kaWYKKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCAwNGZhODFkLi45NzUwY2MyIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xNDUwLDEzICsxNDUwLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMyLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzItZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGIwMDFkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMyLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBmZjkzOWM1MDYzZDhmOGQ0NDRiZGIyNTY1MWEwYTQ4ZTYwOGVmYWE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTE6MTc6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMi80Nl0gZ2NjIDQuOCsgd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZworCitzaW5jZSB0aGUgKi5QcG8gZmlsZXMgZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQCisyMDEyLzA5LzIyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJhdG9taWMvTWFrZWZpbGUuYW0gfCAzICsrLQorIGxpYmF0b21pYy9NYWtlZmlsZS5pbiB8IDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdG9taWMvTWFrZWZpbGUuYW0gYi9saWJhdG9taWMvTWFrZWZpbGUuYW0KK2luZGV4IGIzNTEyNDQuLjM5OWNlMTggMTAwNjQ0CistLS0gYS9saWJhdG9taWMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorQEAgLTEwMSw3ICsxMDEsOCBAQCBQQVRfUwkJPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGCT0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQJPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKyAKKy1NX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTCQk9CisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK2RpZmYgLS1naXQgYS9saWJhdG9taWMvTWFrZWZpbGUuaW4gYi9saWJhdG9taWMvTWFrZWZpbGUuaW4KK2luZGV4IGEwODNkODcuLmE5MmNmY2UgMTAwNjQ0CistLS0gYS9saWJhdG9taWMvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorQEAgLTMzMCw3ICszMzAsOCBAQCBQQVRfTiA9ICQod29yZCAyLCQoUEFUX1NQTElUKSkKKyBQQVRfUyA9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYgPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVCA9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorLU1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTID0KKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzMtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzMy1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjVkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzMtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDUwOTJmNTM4OWQwMmU3OGNkNTk2OTBjZjNmY2EyNGI1NmE5N2FmZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAzIE1hciAyMDE1IDA4OjIxOjE5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvNDZdIERvbid0IHNlYXJjaCBob3N0IGRpcmVjdG9yeSBkdXJpbmcgInJlbGluayIgaWYKKyAkaW5zdF9wcmVmaXggaXMgcHJvdmlkZWQKKworaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2xpYnRvb2wtcGF0Y2hlcy8yMDExLTAxL21zZzAwMDI2Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA1MmJkYmRiLi44MmJjZWMzIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MDA0LDEyICs2MDA0LDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisrCSAgICAgICMgRGVmYXVsdCBpZiAkbGliZGlyIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcHJlZml4OgorIAkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCistCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKysKKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgorIAkJICBbXFwvXSopCistCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICBhZGRfZGlyPSItTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorIAkJICAgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNC1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM0LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyYTg1NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNC1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gMWZhYTZmNjlmOTNiYjk1YWYyYjJiMmJkMjRlMTgxYjUwZmI1YjM3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE1OjI3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvNDZdIFVzZSBTWVNURU1MSUJTX0RJUiByZXBsYWNlbWVudCBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcKKyBiYXNlX2xpYmRpcgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIENvbmZpZ3VyYXRpb25dCisKKyBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK2luZGV4IDVmY2FhNTkuLjg1ODhhYzAgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAorICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorIAorICN1bmRlZiBNVVNMX0RZTkFNSUNfTElOS0VSCisgI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLW11c2wtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNS1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzUtYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZmM0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzUtYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMzc2ODQ2OGMxYTZjYzE3MGZmZjg4YzAzYjgwOGM5NzVhYzY1MzgxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE4OjM5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzUvNDZdIGFhcmNoNjQ6IEFkZCBzdXBwb3J0IGZvciBtdXNsIGxkc28KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBDb25maWd1cmF0aW9uXQorCisgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitpbmRleCA4NTg4YWMwLi45NDZiM2NhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorQEAgLTI0LDcgKzI0LDcgQEAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIKKy0jZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbXVzbC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKysjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorIAorICN1bmRlZiAgQVNBTl9DQzFfU1BFQworICNkZWZpbmUgQVNBTl9DQzFfU1BFQyAiJXslOnNhbml0aXplKGFkZHJlc3MpOi1mdW53aW5kLXRhYmxlc30iCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNi1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzYtbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OWE4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzYtbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gZjRkM2M4ZTk3MGQ0MmE0M2NkM2QyZjc1MWUxMzMyNGVmYTkzNmZmOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCA1IEp1bCAyMDE1IDIwOjI1OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzYvNDZdIGxpYmNjMTogZml4IGxpYmNjMSdzIGluc3RhbGwgcGF0aCBhbmQgcnBhdGgKKworKiBJbnN0YWxsIGxpYmNjMS5zbyBhbmQgbGliY2MxcGx1Z2luLnNvIGludG8KKyAgJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKSwgYXMgd2hhdCB3ZQorICBoYWQgZG9uZSB0byBsdG8tcGx1Z2luLgorKiBGaXggYmFkIFJQQVRIIGl1c3N1ZToKKyAgZ2NjLTUuMi4wOiBwYWNrYWdlIGdjYy1wbHVnaW5zIGNvbnRhaW5zIGJhZCBSUEFUSCAvcGF0aHQvdG8vdG1wL3N5c3Jvb3RzL3FlbXV4ODYtNjQvdXNyL2xpYjY0Ly4uL2xpYjY0IGluIGZpbGUKKyAvcGF0aC90by9nY2MvNS4yLjAtcjAvcGFja2FnZXMtc3BsaXQvZ2NjLXBsdWdpbnMvdXNyL2xpYjY0L2djYy94ODZfNjQtcG9reS1saW51eC81LjIuMC9wbHVnaW4vbGliY2MxcGx1Z2luLnNvLjAuMC4wCisgW3JwYXRoc10KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmNjMS9NYWtlZmlsZS5hbSB8IDQgKystLQorIGxpYmNjMS9NYWtlZmlsZS5pbiB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmFtIGIvbGliY2MxL01ha2VmaWxlLmFtCitpbmRleCBiNDA4MjBiLi4zMjkzMGM1IDEwMDY0NAorLS0tIGEvbGliY2MxL01ha2VmaWxlLmFtCisrKysgYi9saWJjYzEvTWFrZWZpbGUuYW0KK0BAIC0zNSw4ICszNSw4IEBAIGxpYmliZXJ0eSA9ICQoaWYgJCh3aWxkY2FyZCAkKGxpYmliZXJ0eV9ub2FzYW4pKSwkKFdjKSQobGliaWJlcnR5X25vYXNhbiksIFwKKyAJICAgICQoV2MpJChsaWJpYmVydHlfbm9ybWFsKSkpCisgbGliaWJlcnR5X2RlcCA9ICQocGF0c3Vic3QgJChXYyklLCUsJChsaWJpYmVydHkpKQorIAorLXBsdWdpbmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKS9wbHVnaW4KKy1jYzFsaWJkaXIgPSAkKGxpYmRpcikvJChsaWJzdWZmaXgpCisrY2MxbGliZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKQorK3BsdWdpbmRpciA9ICQoY2MxbGliZGlyKQorIAorIGlmIEVOQUJMRV9QTFVHSU4KKyBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEKK2RpZmYgLS1naXQgYS9saWJjYzEvTWFrZWZpbGUuaW4gYi9saWJjYzEvTWFrZWZpbGUuaW4KK2luZGV4IDc5ZDM5ZDMuLjIyN2VjMjIgMTAwNjQ0CistLS0gYS9saWJjYzEvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmNjMS9NYWtlZmlsZS5pbgorQEAgLTI5MSw4ICsyOTEsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCisgCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQorIAorIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKKy1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCistY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQorK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKKytwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKKyBARU5BQkxFX1BMVUdJTl9UUlVFQHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmNjMXBsdWdpbi5sYQorIEBFTkFCTEVfUExVR0lOX1RSVUVAY2MxbGliX0xUTElCUkFSSUVTID0gbGliY2MxLmxhCisgQlVJTFRfU09VUkNFUyA9IGNvbXBpbGVyLW5hbWUuaAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzctaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNy1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZWZjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzctaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaApAQCAtMCwwICsxLDIxMyBAQAorRnJvbSAxNDc1Yjk0MWQ3YTljOTg3NGIwZmIwNTU4ZDAxODA1OTQ1NDY3MzMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBEZWMgMjAxNSAyMzozOTo1NCArMDAwMAorU3ViamVjdDogW1BBVENIIDM3LzQ2XSBoYW5kbGUgc3lzcm9vdCBzdXBwb3J0IGZvciBuYXRpdmVzZGstZ2NjCisKK0JlaW5nIGFibGUgdG8gYnVpbGQgYSBuYXRpdmVzZGsgZ2NjIGlzIHVzZWZ1bCwgcGFydGljdWxhcmx5IGluIGNhc2VzCit3aGVyZSB0aGUgaG9zdCBjb21waWxlciBtYXkgYmUgb2YgYW4gaW5jb21wYXRpYmxlIHZlcnNpb24gKG9yIGEgMzIKK2JpdCBjb21waWxlciBpcyBuZWVkZWQpLgorCitTYWRseSwgYnVpbGRpbmcgbmF0aXZlc2RrLWdjYyBpcyBub3Qgc3RyYWlnaHQgZm9yd2FyZC4gV2UgaW5zdGFsbAorbmF0aXZlc2RrLWdjYyBpbnRvIGEgcmVsb2NhdGFibGUgbG9jYXRpb24gYW5kIHRoaXMgbWVhbnMgdGhhdCBpdHMKK2xpYnJhcnkgbG9jYXRpb25zIGNhbiBjaGFuZ2UuICJOb3JtYWwiIHN5c3Jvb3Qgc3VwcG9ydCBkb2Vzbid0IGhlbHAKK2luIHRoaXMgY2FzZSBzaW5jZSB0aGUgdmFsdWVzIG9mIHBhdGhzIGxpa2UgImxpYmRpciIgY2hhbmdlLCBub3QganVzdAorYmFzZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc3lzdGVtLgorCitJbiBvcmRlciB0byBoYW5kbGUgdGhpcyB3ZSBkbyB0d28gdGhpbmdzOgorCithKSBBZGQgJXIgaW50byBzcGVjIGZpbGUgbWFya3VwIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmplY3RlZCBwYXRocworICAgc3VjaCBhcyBTWVNURU1MSUJTX0RJUiAoc2VlIGdjY19tdWx0aWxpYl9zZXR1cCgpKS4KK2IpIEFkZCBvdGhlciBwYXRocyB3aGljaCBuZWVkIHJlbG9jYXRpb24gaW50byBhIC5nY2NyZWxvY3ByZWZpeCBzZWN0aW9uCisgICB3aGljaCB0aGUgcmVsb2NhdGlvbiBjb2RlIHdpbGwgbm90aWNlIGFuZCBhZGp1c3QgYXV0b21hdGljYWxseS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDE1LzcvMjgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9jcHBkZWZhdWx0LmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIGdjYy9jcHBkZWZhdWx0LmggfCAgMyArKy0KKyBnY2MvZ2NjLmMgICAgICAgIHwgMjAgKysrKysrKysrKysrKystLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKK2luZGV4IDdiNGRkNTEuLjlkMTE2NmMgMTAwNjQ0CistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCitAQCAtMzUsNiArMzUsMzAgQEAKKyAjIHVuZGVmIENST1NTX0lOQ0xVREVfRElSCisgI2VuZGlmCisgCisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHQ0NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR0NDX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUOworKyNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIExPQ0FMX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IExPQ0FMX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBQUkVGSVhfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gUFJFRklYX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIEZJWEVEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEZJWEVEX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIENST1NTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IENST1NTX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBUT09MX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKytzdGF0aWMgY2hhciBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSOworKyNlbmRpZgorKworIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNpZmRlZiBJTkNMVURFX0RFRkFVTFRTCisgPSBJTkNMVURFX0RFRkFVTFRTOworQEAgLTQyLDM4ICs2NiwzOCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyA9IHsKKyAjaWZkZWYgR1BMVVNQTFVTX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBnZW5lcmljIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIHRhcmdldC1kZXBlbmRlbnQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBiYWNrd2FyZCBhbmQgZGVwcmVjYXRlZCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCistICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IEdDQ19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworLSAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUiwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAwIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDIgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKy0gICAgeyBQUkVGSVhfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBQUkVGSVhfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBmaXhpbmNsdWRlcy4gICovCistICAgIHsgRklYRURfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLAorKyAgICB7IEZJWEVEX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwKKyAgICAgICAvKiBBIG11bHRpbGliIHN1ZmZpeCBuZWVkcyBhZGRpbmcgaWYgZGlmZmVyZW50IG11bHRpbGlicyB1c2UKKyAJIGRpZmZlcmVudCBoZWFkZXJzLiAgKi8KKyAjaWZkZWYgU1lTUk9PVF9IRUFERVJTX1NVRkZJWF9TUEVDCitAQCAtODUsMTYgKzEwOSwxNiBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjZW5kaWYKKyAjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAgICAgLyogT25lIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgQ1JPU1NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgQ1JPU1NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogQW5vdGhlciBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IFRPT0xfSU5DTFVERV9ESVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBUT09MX0lOQ0xVREVfRElSVkFSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorICAgICAvKiAvdXNyL2luY2x1ZGUgY29tZXMgZGVhZCBsYXN0LiAgKi8KKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICAgICB7IDAsIDAsIDAsIDAsIDAsIDAgfQorICAgfTsKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5oIGIvZ2NjL2NwcGRlZmF1bHQuaAoraW5kZXggOGE4MWI0NS4uOTc1OWVmZCAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmgKKysrKyBiL2djYy9jcHBkZWZhdWx0LmgKK0BAIC0zMyw3ICszMyw4IEBACisgCisgc3RydWN0IGRlZmF1bHRfaW5jbHVkZQorIHsKKy0gIGNvbnN0IGNoYXIgKmNvbnN0IGZuYW1lOwkvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysgIGNvbnN0IGNoYXIgKmZuYW1lOyAgICAgLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrCisgICBjb25zdCBjaGFyICpjb25zdCBjb21wb25lbnQ7CS8qIFRoZSBjb21wb25lbnQgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5CisgCQkJCSAgIChzZWUgdXBkYXRlX3BhdGggaW4gcHJlZml4LmMpICovCisgICBjb25zdCBjaGFyIGNwbHVzcGx1czsJCS8qIE9ubHkgbG9vayBoZXJlIGlmIHdlJ3JlIGNvbXBpbGluZyBDKysuICAqLworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggOTc1MGNjMi4uOTRjMjQwZSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMjQ3LDYgKzI0Nyw4IEBAIEZJTEUgKnJlcG9ydF90aW1lc190b19maWxlID0gTlVMTDsKKyAjZW5kaWYKKyBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gREVGQVVMVF9UQVJHRVRfU1lTVEVNX1JPT1Q7CisgCisrc3RhdGljIGNoYXIgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTWVNURU1MSUJTX0RJUjsKKysKKyAvKiBOb256ZXJvIG1lYW5zIHBhc3MgdGhlIHVwZGF0ZWQgdGFyZ2V0X3N5c3RlbV9yb290IHRvIHRoZSBjb21waWxlci4gICovCisgCisgc3RhdGljIGludCB0YXJnZXRfc3lzdGVtX3Jvb3RfY2hhbmdlZDsKK0BAIC01MTcsNiArNTE5LDcgQEAgb3Igd2l0aCBjb25zdGFudCB0ZXh0IGluIGEgc2luZ2xlIGFyZ3VtZW50LgorICAlRyAgICAgcHJvY2VzcyBMSUJHQ0NfU1BFQyBhcyBhIHNwZWMuCisgICVSICAgICBPdXRwdXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0X3N5c3RlbV9yb290IGFuZAorICAgICAgICAgdGFyZ2V0X3N5c3Jvb3Rfc3VmZml4LgorKyAlciAgICAgT3V0cHV0IHRoZSBiYXNlIHBhdGggdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeAorICAlUyAgICAgcHJvY2VzcyBTVEFSVEZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgUyBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVFICAgICBwcm9jZXNzIEVOREZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgRSBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVDICAgICBwcm9jZXNzIENQUF9TUEVDIGFzIGEgc3BlYy4KK0BAIC0xNDczLDEwICsxNDc2LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgICAgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBiZWNhdXNlLCBpbiB0aGF0IGNhc2UsIHdlIGtub3cgd2hlcmUgdGhlCisgICAgY29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgdXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoYXQKKyAgICBsb2NhdGlvbiBpbnN0ZWFkLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfZXhlY19wcmVmaXggPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfbGliZXhlY19wcmVmaXggPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfYmluZGlyX3ByZWZpeCA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2V4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2JpbmRpcl9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKytzdGF0aWMgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7CisgCisgLyogRm9yIG5hdGl2ZSBjb21waWxlcnMsIHRoZXNlIGFyZSB3ZWxsLWtub3duIHBhdGhzIGNvbnRhaW5pbmcKKyAgICBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IgY3Jvc3MKK0BAIC0xNDg0LDkgKzE0ODcsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX2V4ZWNfcHJlZml4ID0gTURfRVhFQ19QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXggPSBNRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4XzEgPSBNRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMQorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMjsKKyAKKyAvKiBBIHJlbGF0aXZlIHBhdGggdG8gYmUgdXNlZCBpbiBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiB0b29scworQEAgLTU3NjIsNiArNTc2NSwxMSBAQCBkb19zcGVjXzEgKGNvbnN0IGNoYXIgKnNwZWMsIGludCBpbnN3aXRjaCwgY29uc3QgY2hhciAqc29mdF9tYXRjaGVkX3BhcnQpCisgCSAgICAgIH0KKyAJICAgIGJyZWFrOworIAorKyAgICAgICAgICBjYXNlICdyJzoKKysgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2ssIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgsCisrCQkgICAgICBzdHJsZW4gKHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgpKTsKKysgICAgICAgICAgICBicmVhazsKKysKKyAJICBjYXNlICdTJzoKKyAJICAgIHZhbHVlID0gZG9fc3BlY18xIChzdGFydGZpbGVfc3BlYywgMCwgTlVMTCk7CisgCSAgICBpZiAodmFsdWUgIT0gMCkKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM4LVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzgtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWVlNzlkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM4LVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gNDJlNGNkY2FhZDU5MDUzNjI0Njg2NmIwODQ2ZWMyNzllMTI0ZmExNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgRGVjIDIwMTUgMjM6NDE6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzOC80Nl0gU2VhcmNoIHRhcmdldCBzeXNyb290IGdjYyB2ZXJzaW9uIHNwZWNpZmljIGRpcnMgd2l0aAorIG11bHRpbGliLgorCitXZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KKzxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KK3doaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZQorY29kZSBiZWxvdykuIDx0YXJnZXQtc3lzPiBpcyAnbWFjaGluZScgaW4gZ2NjJ3MgdGVybWlub2xvZ3kuIFdlIHVzZQordGhlc2UgZGlyZWN0b3JpZXMgc28gdGhhdCBtdWx0aXBsZSBnY2MgdmVyc2lvbnMgY291bGQgaW4gdGhlb3J5Citjby1leGlzdCBvbiB0YXJnZXQuCisKK1dlIG9ubHkgd2FudCB0byBidWlsZCBvbmUgZ2NjLWNyb3NzLWNhbmFkaWFuIHBlciBhcmNoIGFuZCBoYXZlIHRoaXMgd29yaworZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgorPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4KK21pcHM2NC1wb2xrbWxsaWIzMi1saW51eAoraXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgorCitUaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIKK2lzOgorCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK3doaWNoIG1lYW5zIHRoYXQgdGhlIGxpYjMyIGNydGJlZ2luLm8gd2lsbCBiZSBmb3VuZCBhbmQgdGhlIGxpYjY0IG9uZXMKK3dpbGwgbm90IHdoaWNoIGxlYWRzIHRvIGNvbXBpbGVyIGZhaWx1cmVzLgorCitUaGlzIHBhdGNoIGluamVjdHMgYSBtdWx0aWxpYiB2ZXJzaW9uIG9mIHRoYXQgcGF0aCBmaXJzdCBzbyB0aGUgbGliNjQKK2JpbmFyaWVzIGNhbiBiZSBmb3VuZCBmaXJzdC4gV2l0aCB0aGlzIGNoYW5nZSB0aGUgc2VhcmNoIHBhdGggYmVjb21lczoKKworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitSUCAyMDE1LzcvMzEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9nY2MuYyB8IDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggOTRjMjQwZS4uMjgxMjgxOSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMjUwNyw3ICsyNTA3LDcgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4ICpwYXRocywKKyAgICAgICBpZiAocGF0aCA9PSBOVUxMKQorIAl7CisgCSAgbGVuID0gcGF0aHMtPm1heF9sZW4gKyBleHRyYV9zcGFjZSArIDE7CistCSAgbGVuICs9IE1BWCAoTUFYIChzdWZmaXhfbGVuLCBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisrCSAgbGVuICs9IE1BWCAoKHN1ZmZpeF9sZW4gKyBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisgCSAgcGF0aCA9IFhORVdWRUMgKGNoYXIsIGxlbik7CisgCX0KKyAKK0BAIC0yNTE5LDYgKzI1MTksMzMgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4ICpwYXRocywKKyAJICAvKiBMb29rIGZpcnN0IGluIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkuICAqLworIAkgIGlmICghc2tpcF9tdWx0aV9kaXIpCisgCSAgICB7CisrCSAgICAgIGlmICghKHBsLT5vc19tdWx0aWxpYiA/IHNraXBfbXVsdGlfb3NfZGlyIDogc2tpcF9tdWx0aV9kaXIpKQorKwkgICAgICAgIHsKKysJICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNfbXVsdGk7CisrCSAgICAgICAgICBzaXplX3QgdGhpc19tdWx0aV9sZW47CisrCisrCSAgICAgICAgICBpZiAocGwtPm9zX211bHRpbGliKQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9vc19kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX29zX2Rpcl9sZW47CisrCQkgICAgfQorKwkgICAgICAgICAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX2Rpcl9sZW47CisrCQkgICAgfQorKworKwkgICAgICAgICAgLyogTG9vayBpbiBtdWx0aWxpYiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5IGZpcnN0ICovCisrCSAgICAgICAgICBpZiAodGhpc19tdWx0aV9sZW4pCisrCSAgICAgICAgICAgIHsKKysJCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgdGhpc19tdWx0aSwgdGhpc19tdWx0aV9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICBtZW1jcHkgKHBhdGggKyBsZW4gKyB0aGlzX211bHRpX2xlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworKwkgICAgICAgICAgICAgICAgaWYgKHJldCkKKysJCSAgICAgICAgICBicmVhazsKKysJICAgICAgICAgICAgfQorKwkgICAgICAgIH0KKysKKyAJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKyAJICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworIAkgICAgICBpZiAocmV0KQorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzktRml4LXZhcmlvdXMtX0ZPUl9CVUlMRC1hbmQtcmVsYXRlZC12YXJpYWJsZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzktRml4LXZhcmlvdXMtX0ZPUl9CVUlMRC1hbmQtcmVsYXRlZC12YXJpYWJsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlN2FlYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzOS1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSA5Y2VkNDllNDU5Y2NmMTg4N2ZlYjU4YWRmMWU4ODM2ZGNiNGIxYmRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBEZWMgMjAxNSAyMzo0Mjo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDM5LzQ2XSBGaXggdmFyaW91cyBfRk9SX0JVSUxEIGFuZCByZWxhdGVkIHZhcmlhYmxlcworCitXaGVuIGRvaW5nIGEgRk9SX0JVSUxEIHRoaW5nLCB5b3UgaGF2ZSB0byBvdmVycmlkZSBDRkxBR1Mgd2l0aAorQ0ZMQUdTX0ZPUl9CVUlMRC4gQW5kIGlmIHlvdSB1c2UgQysrLCB5b3UgYWxzbyBoYXZlIHRvIG92ZXJyaWRlCitDWFhGTEFHUyB3aXRoIENYWEZMQUdTX0ZPUl9CVUlMRC4KK1dpdGhvdXQgdGhpcywgd2hlbiBidWlsZGluZyBmb3IgbWluZ3csIHlvdSBlbmQgdXAgdHJ5aW5nIHRvIHVzZQordGhlIG1pbmd3IGhlYWRlcnMgZm9yIGEgaG9zdCBidWlsZC4KKworVGhlIHNhbWUgZ29lcyBmb3Igb3RoZXIgdmFyaWFibGVzIGFzIHdlbGwsIHN1Y2ggYXMgQ1BQRkxBR1MsCitDUFAsIGFuZCBHTVBJTkMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBTZWViYWNoIDxwZXRlci5zZWViYWNoQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICAgICB8IDYgKysrKysrCisgTWFrZWZpbGUudHBsICAgICB8IDUgKysrKysKKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCAyICstCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBiZWI5YjlhLi4zZTFjNmJjIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTUyLDYgKzE1Miw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisrCUNQUEZMQUdTPSIkKENQUEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1BQRkxBR1M7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXAorIAlDWFhGTEFHUz0iJChDWFhGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENYWEZMQUdTOyBcCisgCUdDSj0iJChHQ0pfRk9SX0JVSUxEKSI7IGV4cG9ydCBHQ0o7IFwKK0BAIC0xNzAsNiArMTcxLDkgQEAgQlVJTERfRVhQT1JUUyA9IFwKKyAjIGJ1aWx0IGZvciB0aGUgYnVpbGQgc3lzdGVtIHRvIG92ZXJyaWRlIHRob3NlIGluIEJBU0VfRkxBR1NfVE9fUEFTUy4KKyBFWFRSQV9CVUlMRF9GTEFHUyA9IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIiBcCisrCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiIFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiIFwKKysJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSIgXAorIAlMREZMQUdTPSIkKExERkxBR1NfRk9SX0JVSUxEKSIKKyAKKyAjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYnVpbHQgZm9yIHRoZSBob3N0IHN5c3RlbS4KK0BAIC0xODcsNiArMTkxLDcgQEAgSE9TVF9TVUJESVIgPSBAaG9zdF9zdWJkaXJACisgSE9TVF9FWFBPUlRTID0gXAorIAkkKEJBU0VfRVhQT1JUUykgXAorIAlDQz0iJChDQykiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDKSAtRSI7IGV4cG9ydCBDUFA7IFwKKyAJQURBX0NGTEFHUz0iJChBREFfQ0ZMQUdTKSI7IGV4cG9ydCBBREFfQ0ZMQUdTOyBcCisgCUNGTEFHUz0iJChDRkxBR1MpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorQEAgLTcxMyw2ICs3MTgsNyBAQCBCQVNFX0ZMQUdTX1RPX1BBU1MgPSBcCisgCSJDQ19GT1JfQlVJTEQ9JChDQ19GT1JfQlVJTEQpIiBcCisgCSJDRkxBR1NfRk9SX0JVSUxEPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKKyAJIkNYWF9GT1JfQlVJTEQ9JChDWFhfRk9SX0JVSUxEKSIgXAorKwkiQ1hYRkxBR1NfRk9SX0JVSUxEPSQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAorIAkiRVhQRUNUPSQoRVhQRUNUKSIgXAorIAkiRkxFWD0kKEZMRVgpIiBcCisgCSJJTlNUQUxMPSQoSU5TVEFMTCkiIFwKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS50cGwgYi9NYWtlZmlsZS50cGwKK2luZGV4IDZiMmViNmEuLjExNGU0NjIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS50cGwKKysrKyBiL01ha2VmaWxlLnRwbAorQEAgLTE1NCw2ICsxNTQsNyBAQCBCVUlMRF9FWFBPUlRTID0gXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKysJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDUFBGTEFHUzsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCisgCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYRkxBR1M7IFwKKyAJR0NKPSIkKEdDSl9GT1JfQlVJTEQpIjsgZXhwb3J0IEdDSjsgXAorQEAgLTE3Miw2ICsxNzMsOSBAQCBCVUlMRF9FWFBPUlRTID0gXAorICMgYnVpbHQgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhvc2UgaW4gQkFTRV9GTEFHU19UT19QQVNTLgorIEVYVFJBX0JVSUxEX0ZMQUdTID0gXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKKysJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSIgXAorKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIiBcCisgCUxERkxBR1M9IiQoTERGTEFHU19GT1JfQlVJTEQpIgorIAorICMgVGhpcyBpcyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBidWlsdCBmb3IgdGhlIGhvc3Qgc3lzdGVtLgorQEAgLTE4OSw2ICsxOTMsNyBAQCBIT1NUX1NVQkRJUiA9IEBob3N0X3N1YmRpckAKKyBIT1NUX0VYUE9SVFMgPSBcCisgCSQoQkFTRV9FWFBPUlRTKSBcCisgCUNDPSIkKENDKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0MpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlBREFfQ0ZMQUdTPSIkKEFEQV9DRkxBR1MpIjsgZXhwb3J0IEFEQV9DRkxBR1M7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHUykiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCBjYzc1NTM2Li4wYWQyZGM4IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC03ODAsNyArNzgwLDcgQEAgQlVJTERfTERGTEFHUz1AQlVJTERfTERGTEFHU0AKKyBCVUlMRF9OT19QSUVfRkxBRyA9IEBCVUlMRF9OT19QSUVfRkxBR0AKKyBCVUlMRF9MREZMQUdTICs9ICQoQlVJTERfTk9fUElFX0ZMQUcpCisgQlVJTERfQ1BQRkxBR1M9IC1JLiAtSSQoQEQpIC1JJChzcmNkaXIpIC1JJChzcmNkaXIpLyQoQEQpIFwKKy0JCS1JJChzcmNkaXIpLy4uL2luY2x1ZGUgQElOQ0lOVExAICQoQ1BQSU5DKSAkKENQUEZMQUdTKQorKwkJLUkkKHNyY2RpcikvLi4vaW5jbHVkZSBASU5DSU5UTEAgJChDUFBJTkMpICQoQ1BQRkxBR1NfRk9SX0JVSUxEKQorIAorICMgQWN0dWFsIG5hbWUgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBhIG5hdGl2ZSBjb21waWxlci4KKyBHQ0NfSU5TVEFMTF9OQU1FIDo9ICQoc2hlbGwgZWNobyBnY2N8c2VkICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJykKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggMzc3MjUzZS4uNzhmYzY0YSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTc5OSw3ICsxMTc5OSw3IEBAIGVsc2UKKyAJQ0M9IiR7Q0NfRk9SX0JVSUxEfSIgQ0ZMQUdTPSIke0NGTEFHU19GT1JfQlVJTER9IiBcCisgCUNYWD0iJHtDWFhfRk9SX0JVSUxEfSIgQ1hYRkxBR1M9IiR7Q1hYRkxBR1NfRk9SX0JVSUxEfSIgXAorIAlMRD0iJHtMRF9GT1JfQlVJTER9IiBMREZMQUdTPSIke0xERkxBR1NfRk9SX0JVSUxEfSIgXAorLQlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1ER0VORVJBVE9SX0ZJTEUiIFwKKysJR01QSU5DPSIiIENQUEZMQUdTPSIke0NQUEZMQUdTX0ZPUl9CVUlMRH0gLURHRU5FUkFUT1JfRklMRSIgXAorIAkke3JlYWxzcmNkaXJ9L2NvbmZpZ3VyZSBcCisgCQktLWVuYWJsZS1sYW5ndWFnZXM9JHtlbmFibGVfbGFuZ3VhZ2VzLWFsbH0gXAorIAkJLS10YXJnZXQ9JHRhcmdldF9hbGlhcyAtLWhvc3Q9JGJ1aWxkX2FsaWFzIC0tYnVpbGQ9JGJ1aWxkX2FsaWFzCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDU0ZTc2MTkuLmE5NDY2NmUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTY4Miw3ICsxNjgyLDcgQEAgZWxzZQorIAlDQz0iJHtDQ19GT1JfQlVJTER9IiBDRkxBR1M9IiR7Q0ZMQUdTX0ZPUl9CVUlMRH0iIFwKKyAJQ1hYPSIke0NYWF9GT1JfQlVJTER9IiBDWFhGTEFHUz0iJHtDWFhGTEFHU19GT1JfQlVJTER9IiBcCisgCUxEPSIke0xEX0ZPUl9CVUlMRH0iIExERkxBR1M9IiR7TERGTEFHU19GT1JfQlVJTER9IiBcCistCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLURHRU5FUkFUT1JfRklMRSIgXAorKwlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1NfRk9SX0JVSUxEfSAtREdFTkVSQVRPUl9GSUxFIiBcCisgCSR7cmVhbHNyY2Rpcn0vY29uZmlndXJlIFwKKyAJCS0tZW5hYmxlLWxhbmd1YWdlcz0ke2VuYWJsZV9sYW5ndWFnZXMtYWxsfSBcCisgCQktLXRhcmdldD0kdGFyZ2V0X2FsaWFzIC0taG9zdD0kYnVpbGRfYWxpYXMgLS1idWlsZD0kYnVpbGRfYWxpYXMKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQwLW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQwLW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YTZmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDAtbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBiMDQxMmMwMWMyNzVhYWViNmI0NTg0NjFjZDI0MjUxMjBjOGJjZWM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMiBGZWIgMjAxNiAxMDoyNjoxMCAtMDgwMAorU3ViamVjdDogW1BBVENIIDQwLzQ2XSBuaW9zMjogRGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIKKworU2lnbmVkLW9mZi1ieTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGdjYy9jb25maWcvbmlvczIvbGludXguaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oIGIvZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oCitpbmRleCA0ZWY1NWI1Li42MmJjMWU3IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL25pb3MyL2xpbnV4LmgKK0BAIC0zMCw2ICszMCw3IEBACisgI2RlZmluZSBDUFBfU1BFQyAiJXtwb3NpeDotRF9QT1NJWF9TT1VSQ0V9ICV7cHRocmVhZDotRF9SRUVOVFJBTlR9IgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtbmlvczIuc28uMSIKKysjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgICIvbGliL2xkLW11c2wtbmlvczIuc28uMSIKKyAKKyAjdW5kZWYgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgTElOS19TUEVDX0VORElBTiBcCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0MS1zc3Bfbm9uc2hhcmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQxLXNzcF9ub25zaGFyZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NDUyOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0MS1zc3Bfbm9uc2hhcmVkLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNTUxYTVkYjdhY2I1NmUwODVhMTAxZjFjMjIyZDUxYjJjMWIwMzlhNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFN6YWJvbGNzIE5hZ3kgPG5zekBwb3J0NzAubmV0PgorRGF0ZTogU2F0LCA3IE5vdiAyMDE1IDE0OjU4OjQwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNDEvNDZdIHNzcF9ub25zaGFyZWQKKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIENvbmZpZ3VyYXRpb25dCisKKyBnY2MvZ2NjLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggMjgxMjgxOS4uOWRlOTZlZSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtODYzLDcgKzg2Myw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAjaWZuZGVmIExJTktfU1NQX1NQRUMKKyAjaWZkZWYgVEFSR0VUX0xJQkNfUFJPVklERVNfU1NQCisgI2RlZmluZSBMSU5LX1NTUF9TUEVDICIle2ZzdGFjay1wcm90ZWN0b3J8ZnN0YWNrLXByb3RlY3Rvci1hbGwiIFwKKy0JCSAgICAgICAifGZzdGFjay1wcm90ZWN0b3Itc3Ryb25nfGZzdGFjay1wcm90ZWN0b3ItZXhwbGljaXQ6fSIKKysJCSAgICAgICAifGZzdGFjay1wcm90ZWN0b3Itc3Ryb25nfGZzdGFjay1wcm90ZWN0b3ItZXhwbGljaXQiIFwKKysJCSAgICAgICAiOi1sc3NwX25vbnNoYXJlZH0iCisgI2Vsc2UKKyAjZGVmaW5lIExJTktfU1NQX1NQRUMgIiV7ZnN0YWNrLXByb3RlY3Rvcnxmc3RhY2stcHJvdGVjdG9yLWFsbCIgXAorIAkJICAgICAgICJ8ZnN0YWNrLXByb3RlY3Rvci1zdHJvbmd8ZnN0YWNrLXByb3RlY3Rvci1leHBsaWNpdCIgXAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDItZ2NjLWxpYmNwcC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAtb2xkLW5ldy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0Mi1nY2MtbGliY3BwLXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC1vbGQtbmV3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWYwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDItZ2NjLWxpYmNwcC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAtb2xkLW5ldy5wYXRjaApAQCAtMCwwICsxLDI5MiBAQAorRnJvbSBiYTczOGNjNDExYzlhNTRlMzg5ZTMzNmJjYWEwYTI0MjhkZDRhOWQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNiBNYXIgMjAxNiAwMjoyNzo0MyAtMDQwMAorU3ViamVjdDogW1BBVENIIDQyLzQ2XSBnY2MvbGliY3BwOiBzdXBwb3J0IC1mZmlsZS1wcmVmaXgtbWFwPTxvbGQ+PTxuZXc+CisKK1NpbWlsYXIgLWZkZWJ1Zy1wcmVmaXgtbWFwLCBhZGQgb3B0aW9uIC1mZmlsZS1wcmVmaXgtbWFwIHRvIG1hcCBvbmUKK2RpcmVjdG9yeSBuYW1lIChvbGQpIHRvIGFub3RoZXIgKG5ldykgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18gYW5kCitfX2J1aWx0aW5fRklMRSAoKS4KKworaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NzAyNjgKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2NjL2MtZmFtaWx5L2Mtb3B0cy5jICAgICB8IDEzICsrKysrKysKKyBnY2MvYy1mYW1pbHkvYy5vcHQgICAgICAgIHwgIDQgKysrCisgZ2NjL2R3YXJmMm91dC5jICAgICAgICAgICB8ICAxICsKKyBnY2MvZ2ltcGxpZnkuYyAgICAgICAgICAgIHwgIDMgKysKKyBsaWJjcHAvTWFrZWZpbGUuaW4gICAgICAgIHwgMTAgKysrLS0tCisgbGliY3BwL2ZpbGUtbWFwLmMgICAgICAgICB8IDkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaCB8IDMwICsrKysrKysrKysrKysrKysKKyBsaWJjcHAvbWFjcm8uYyAgICAgICAgICAgIHwgIDIgKysKKyA4IGZpbGVzIGNoYW5nZWQsIDE1MCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjcHAvZmlsZS1tYXAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oCisKK2RpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1vcHRzLmMgYi9nY2MvYy1mYW1pbHkvYy1vcHRzLmMKK2luZGV4IGZlYzU4YmMuLjdhMGFmNDMgMTAwNjQ0CistLS0gYS9nY2MvYy1mYW1pbHkvYy1vcHRzLmMKKysrKyBiL2djYy9jLWZhbWlseS9jLW9wdHMuYworQEAgLTM4LDYgKzM4LDE0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2luY2x1ZGUgIm9wdHMuaCIKKyAjaW5jbHVkZSAicGx1Z2luLmgiCQkvKiBGb3IgUExVR0lOX0lOQ0xVREVfRklMRSBldmVudC4gICovCisgI2luY2x1ZGUgIm1rZGVwcy5oIgorKyNpbmNsdWRlICJmaWxlLW1hcC5oIgorKyNpbmNsdWRlICJjLXRhcmdldC5oIgorKyNpbmNsdWRlICJ0bS5oIgkJCS8qIEZvciBCWVRFU19CSUdfRU5ESUFOLAorKwkJCQkgICBET0xMQVJTX0lOX0lERU5USUZJRVJTLAorKwkJCQkgICBTVERDXzBfSU5fU1lTVEVNX0hFQURFUlMsCisrCQkJCSAgIFRBUkdFVF9GTFRfRVZBTF9NRVRIT0RfTk9OX0RFRkFVTFQgYW5kCisrCQkJCSAgIFRBUkdFVF9PUFRGLiAgKi8KKysjaW5jbHVkZSAidG1fcC5oIgkJLyogRm9yIENfQ09NTU9OX09WRVJSSURFX09QVElPTlMuICAqLworICNpbmNsdWRlICJkdW1wZmlsZS5oIgorIAorICNpZm5kZWYgRE9MTEFSU19JTl9JREVOVElGSUVSUworQEAgLTUwMyw2ICs1MTEsMTEgQEAgY19jb21tb25faGFuZGxlX29wdGlvbiAoc2l6ZV90IHNjb2RlLCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSwKKyAgICAgICBjcHBfb3B0cy0+bmFycm93X2NoYXJzZXQgPSBhcmc7CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgT1BUX2ZmaWxlX3ByZWZpeF9tYXBfOgorKyAgICAgIGlmIChhZGRfZmlsZV9wcmVmaXhfbWFwIChhcmcpIDwgMCkKKysgICAgICAgIGVycm9yICgiaW52YWxpZCBhcmd1bWVudCAlcXMgdG8gLWZmaWxlLXByZWZpeC1tYXAiLCBhcmcpOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIE9QVF9md2lkZV9leGVjX2NoYXJzZXRfOgorICAgICAgIGNwcF9vcHRzLT53aWRlX2NoYXJzZXQgPSBhcmc7CisgICAgICAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mub3B0IGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitpbmRleCA2NjBkYTZjLi4zMWY3YjM0IDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xMjA4LDYgKzEyMDgsMTAgQEAgZmV4ZWMtY2hhcnNldD0KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgUmVqZWN0TmVnYXRpdmUKKyAtZmV4ZWMtY2hhcnNldD08Y3NldD4JQ29udmVydCBhbGwgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cyB0byBjaGFyYWN0ZXIgc2V0IDxjc2V0Pi4KKyAKKytmZmlsZS1wcmVmaXgtbWFwPQorK0MgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBSZWplY3ROZWdhdGl2ZQorKy1mZmlsZS1wcmVmaXgtbWFwPTxvbGQ9bmV3PglNYXAgb25lIGRpcmVjdG9yeSBuYW1lIHRvIGFub3RoZXIgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18gYW5kIF9fYnVpbHRpbl9GSUxFICgpCisrCisgZmV4dGVuZGVkLWlkZW50aWZpZXJzCisgQyBPYmpDIEMrKyBPYmpDKysKKyBQZXJtaXQgdW5pdmVyc2FsIGNoYXJhY3RlciBuYW1lcyAoXFx1IGFuZCBcXFUpIGluIGlkZW50aWZpZXJzLgorZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYworaW5kZXggODBmMmRmNS4uYTJiZmNjMCAxMDA2NDQKKy0tLSBhL2djYy9kd2FyZjJvdXQuYworKysrIGIvZ2NjL2R3YXJmMm91dC5jCitAQCAtMjE2NzIsNiArMjE2NzIsNyBAQCBnZW5fcHJvZHVjZXJfc3RyaW5nICh2b2lkKQorICAgICAgIGNhc2UgT1BUX2ZsdHJhbnNfb3V0cHV0X2xpc3RfOgorICAgICAgIGNhc2UgT1BUX2ZyZXNvbHV0aW9uXzoKKyAgICAgICBjYXNlIE9QVF9mZGVidWdfcHJlZml4X21hcF86CisrICAgICAgY2FzZSBPUFRfZmZpbGVfcHJlZml4X21hcF86CisgCS8qIElnbm9yZSB0aGVzZS4gICovCisgCWNvbnRpbnVlOworICAgICAgIGRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5LmMgYi9nY2MvZ2ltcGxpZnkuYworaW5kZXggZTIyM2U1OS4uMTQzM2MyNSAxMDA2NDQKKy0tLSBhL2djYy9naW1wbGlmeS5jCisrKysgYi9nY2MvZ2ltcGxpZnkuYworQEAgLTU3LDYgKzU3LDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjaW5jbHVkZSAiZ29tcC1jb25zdGFudHMuaCIKKyAjaW5jbHVkZSAidHJlZS1kdW1wLmgiCisgI2luY2x1ZGUgImdpbXBsZS13YWxrLmgiCisrI2luY2x1ZGUgImZpbGUtbWFwLmgiCisrCisgI2luY2x1ZGUgImxhbmdob29rcy1kZWYuaCIJLyogRklYTUU6IGZvciBsaGRfc2V0X2RlY2xfYXNzZW1ibGVyX25hbWUgKi8KKyAjaW5jbHVkZSAiYnVpbHRpbnMuaCIKKyAKK0BAIC0yNDMyLDYgKzI0MzQsNyBAQCBnaW1wbGlmeV9jYWxsX2V4cHIgKHRyZWUgKmV4cHJfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wgd2FudF92YWx1ZSkKKyAgICAgICBjYXNlIEJVSUxUX0lOX0ZJTEU6CisgCXsKKyAJICBjb25zdCBjaGFyICpsb2NmaWxlID0gTE9DQVRJT05fRklMRSAoRVhQUl9MT0NBVElPTiAoKmV4cHJfcCkpOworKwkgIGxvY2ZpbGUgPSByZW1hcF9maWxlX2ZpbGVuYW1lIChsb2NmaWxlKTsKKyAJICAqZXhwcl9wID0gYnVpbGRfc3RyaW5nX2xpdGVyYWwgKHN0cmxlbiAobG9jZmlsZSkgKyAxLCBsb2NmaWxlKTsKKyAJICByZXR1cm4gR1NfT0s7CisgCX0KK2RpZmYgLS1naXQgYS9saWJjcHAvTWFrZWZpbGUuaW4gYi9saWJjcHAvTWFrZWZpbGUuaW4KK2luZGV4IGE3ZDc4MjguLjNkMjk1NzIgMTAwNjQ0CistLS0gYS9saWJjcHAvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmNwcC9NYWtlZmlsZS5pbgorQEAgLTg0LDEyICs4NCwxMiBAQCBERVBNT0RFID0gJChDWFhERVBNT0RFKQorIAorIAorIGxpYmNwcF9hX09CSlMgPSBjaGFyc2V0Lm8gZGlyZWN0aXZlcy5vIGRpcmVjdGl2ZXMtb25seS5vIGVycm9ycy5vIFwKKy0JZXhwci5vIGZpbGVzLm8gaWRlbnRpZmllcnMubyBpbml0Lm8gbGV4Lm8gbGluZS1tYXAubyBtYWNyby5vIFwKKy0JbWtkZXBzLm8gcGNoLm8gc3ltdGFiLm8gdHJhZGl0aW9uYWwubworKwlleHByLm8gZmlsZS1tYXAubyBmaWxlcy5vIGlkZW50aWZpZXJzLm8gaW5pdC5vIGxleC5vIGxpbmUtbWFwLm8gXAorKwltYWNyby5vIG1rZGVwcy5vIHBjaC5vIHN5bXRhYi5vIHRyYWRpdGlvbmFsLm8KKyAKKyBsaWJjcHBfYV9TT1VSQ0VTID0gY2hhcnNldC5jIGRpcmVjdGl2ZXMuYyBkaXJlY3RpdmVzLW9ubHkuYyBlcnJvcnMuYyBcCistCWV4cHIuYyBmaWxlcy5jIGlkZW50aWZpZXJzLmMgaW5pdC5jIGxleC5jIGxpbmUtbWFwLmMgbWFjcm8uYyBcCistCW1rZGVwcy5jIHBjaC5jIHN5bXRhYi5jIHRyYWRpdGlvbmFsLmMKKysJZXhwci5jIGZpbGUtbWFwLmMgZmlsZXMuYyBpZGVudGlmaWVycy5jIGluaXQuYyBsZXguYyBsaW5lLW1hcC5jIFwKKysJbWFjcm8uYyBta2RlcHMuYyBwY2guYyBzeW10YWIuYyB0cmFkaXRpb25hbC5jCisgCisgYWxsOiBsaWJjcHAuYSAkKFVTRURfQ0FUQUxPR1MpCisgCitAQCAtMjYzLDcgKzI2Myw3IEBAIHBvLyQoUEFDS0FHRSkucG90OiAkKGxpYmNwcF9hX1NPVVJDRVMpCisgCisgVEFHU19TT1VSQ0VTID0gJChsaWJjcHBfYV9TT1VSQ0VTKSBpbnRlcm5hbC5oIHVjbmlkLmggXAorICAgICBpbmNsdWRlL2xpbmUtbWFwLmggaW5jbHVkZS9zeW10YWIuaCBpbmNsdWRlL2NwcC1pZC1kYXRhLmggXAorLSAgICBpbmNsdWRlL2NwcGxpYi5oIGluY2x1ZGUvbWtkZXBzLmggc3lzdGVtLmgKKysgICAgaW5jbHVkZS9jcHBsaWIuaCBpbmNsdWRlL21rZGVwcy5oIHN5c3RlbS5oIGluY2x1ZGUvZmlsZS1tYXAuaAorIAorIFRBR1M6ICQoVEFHU19TT1VSQ0VTKQorIAljZCAkKHNyY2RpcikgJiYgZXRhZ3MgJChUQUdTX1NPVVJDRVMpCitkaWZmIC0tZ2l0IGEvbGliY3BwL2ZpbGUtbWFwLmMgYi9saWJjcHAvZmlsZS1tYXAuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE4MDM1ZWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmNwcC9maWxlLW1hcC5jCitAQCAtMCwwICsxLDkyIEBACisrLyogTWFwIG9uZSBkaXJlY3RvcnkgbmFtZSB0byBhbm90aGVyIGluIF9fRklMRV9fLCBfX0JBU0VfRklMRV9fCisrICAgYW5kIF9fYnVpbHRpbl9GSUxFICgpLgorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorK2xhdGVyIHZlcnNpb24uCisrCisrVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKytNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKytZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisrPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKyBJbiBvdGhlciB3b3JkcywgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUgdGhpcyBwcm9ncmFtLgorKyBZb3UgYXJlIGZvcmJpZGRlbiB0byBmb3JiaWQgYW55b25lIGVsc2UgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZQorKyB3aGF0IHlvdSBnaXZlIHRoZW0uICAgSGVscCBzdGFtcCBvdXQgc29mdHdhcmUtaG9hcmRpbmchICAqLworKworKyNpbmNsdWRlICJjb25maWcuaCIKKysjaW5jbHVkZSAic3lzdGVtLmgiCisrI2luY2x1ZGUgImZpbGUtbWFwLmgiCisrCisrLyogU3RydWN0dXJlIHJlY29yZGluZyB0aGUgbWFwcGluZyBmcm9tIHNvdXJjZSBmaWxlIGFuZCBkaXJlY3RvcnkKKysgICBuYW1lcyBhdCBjb21waWxlIHRpbWUgdG8gX19GSUxFX18gKi8KKyt0eXBlZGVmIHN0cnVjdCBmaWxlX3ByZWZpeF9tYXAKKyt7CisrICBjb25zdCBjaGFyICpvbGRfcHJlZml4OworKyAgY29uc3QgY2hhciAqbmV3X3ByZWZpeDsKKysgIHNpemVfdCBvbGRfbGVuOworKyAgc2l6ZV90IG5ld19sZW47CisrICBzdHJ1Y3QgZmlsZV9wcmVmaXhfbWFwICpuZXh0OworK30gZmlsZV9wcmVmaXhfbWFwOworKworKy8qIExpbmtlZCBsaXN0IG9mIHN1Y2ggc3RydWN0dXJlcy4gICovCisrc3RhdGljIGZpbGVfcHJlZml4X21hcCAqZmlsZV9wcmVmaXhfbWFwczsKKysKKysvKiBSZWNvcmQgcHJlZml4IG1hcHBpbmcgb2YgX19GSUxFX18uICBBUkcgaXMgdGhlIGFyZ3VtZW50IHRvCisrICAgLWZmaWxlLXByZWZpeC1tYXAgYW5kIG11c3QgYmUgb2YgdGhlIGZvcm0gT0xEPU5FVy4gICovCisraW50CisrYWRkX2ZpbGVfcHJlZml4X21hcCAoY29uc3QgY2hhciAqYXJnKQorK3sKKysgIGZpbGVfcHJlZml4X21hcCAqbWFwOworKyAgY29uc3QgY2hhciAqcDsKKysKKysgIHAgPSBzdHJjaHIgKGFyZywgJz0nKTsKKysgIGlmICghcCkKKysgIHsKKysgICAgICBmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgYXJndW1lbnQgJXFzIHRvIC1mZmlsZS1wcmVmaXgtbWFwIiwgYXJnKTsKKysgICAgICByZXR1cm4gLTE7CisrICB9CisrICBtYXAgPSBYTkVXIChmaWxlX3ByZWZpeF9tYXApOworKyAgbWFwLT5vbGRfcHJlZml4ID0geHN0cm5kdXAgKGFyZywgcCAtIGFyZyk7CisrICBtYXAtPm9sZF9sZW4gPSBwIC0gYXJnOworKyAgcCsrOworKyAgbWFwLT5uZXdfcHJlZml4ID0geHN0cmR1cCAocCk7CisrICBtYXAtPm5ld19sZW4gPSBzdHJsZW4gKHApOworKyAgbWFwLT5uZXh0ID0gZmlsZV9wcmVmaXhfbWFwczsKKysgIGZpbGVfcHJlZml4X21hcHMgPSBtYXA7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrLyogUGVyZm9ybSB1c2VyLXNwZWNpZmllZCBtYXBwaW5nIG9mIF9fRklMRV9fIHByZWZpeGVzLiAgUmV0dXJuCisrICAgdGhlIG5ldyBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gZmlsZW5hbWUuICAqLworKworK2NvbnN0IGNoYXIgKgorK3JlbWFwX2ZpbGVfZmlsZW5hbWUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorK3sKKysgIGZpbGVfcHJlZml4X21hcCAqbWFwOworKyAgY2hhciAqczsKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBzaXplX3QgbmFtZV9sZW47CisrCisrICBmb3IgKG1hcCA9IGZpbGVfcHJlZml4X21hcHM7IG1hcDsgbWFwID0gbWFwLT5uZXh0KQorKyAgICBpZiAoZmlsZW5hbWVfbmNtcCAoZmlsZW5hbWUsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQorKyAgICAgIGJyZWFrOworKyAgaWYgKCFtYXApCisrICAgIHJldHVybiBmaWxlbmFtZTsKKysgIG5hbWUgPSBmaWxlbmFtZSArIG1hcC0+b2xkX2xlbjsKKysgIG5hbWVfbGVuID0gc3RybGVuIChuYW1lKSArIDE7CisrICBzID0gKGNoYXIgKikgYWxsb2NhIChuYW1lX2xlbiArIG1hcC0+bmV3X2xlbik7CisrICBtZW1jcHkgKHMsIG1hcC0+bmV3X3ByZWZpeCwgbWFwLT5uZXdfbGVuKTsKKysgIG1lbWNweSAocyArIG1hcC0+bmV3X2xlbiwgbmFtZSwgbmFtZV9sZW4pOworKworKyAgcmV0dXJuIHhzdHJkdXAgKHMpOworK30KKysKKysKK2RpZmYgLS1naXQgYS9saWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oIGIvbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg3NTAzMTUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKK0BAIC0wLDAgKzEsMzAgQEAKKysvKiBNYXAgb25lIGRpcmVjdG9yeSBuYW1lIHRvIGFub3RoZXIgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18KKysgICBhbmQgX19idWlsdGluX0ZJTEUgKCkuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisrbGF0ZXIgdmVyc2lvbi4KKysKKytUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKytHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKys8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisrIFlvdSBhcmUgZm9yYmlkZGVuIHRvIGZvcmJpZCBhbnlvbmUgZWxzZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlCisrIHdoYXQgeW91IGdpdmUgdGhlbS4gICBIZWxwIHN0YW1wIG91dCBzb2Z0d2FyZS1ob2FyZGluZyEgICovCisrCisrI2lmbmRlZiBMSUJDUFBfRklMRV9NQVBfSAorKyNkZWZpbmUgTElCQ1BQX0ZJTEVfTUFQX0gKKysKKytjb25zdCBjaGFyICogcmVtYXBfZmlsZV9maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworKworK2ludCBhZGRfZmlsZV9wcmVmaXhfbWFwIChjb25zdCBjaGFyICphcmcpOworKworKyNlbmRpZiAvKiAhTElCQ1BQX0ZJTEVfTUFQX0ggICovCitkaWZmIC0tZ2l0IGEvbGliY3BwL21hY3JvLmMgYi9saWJjcHAvbWFjcm8uYworaW5kZXggYzI1MTU1My4uM2NlZWMzZCAxMDA2NDQKKy0tLSBhL2xpYmNwcC9tYWNyby5jCisrKysgYi9saWJjcHAvbWFjcm8uYworQEAgLTI2LDYgKzI2LDcgQEAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImNwcGxpYi5oIgorICNpbmNsdWRlICJpbnRlcm5hbC5oIgorKyNpbmNsdWRlICJmaWxlLW1hcC5oIgorIAorIHR5cGVkZWYgc3RydWN0IG1hY3JvX2FyZyBtYWNyb19hcmc7CisgLyogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgdG9rZW5zIG9mIGEgbWFjcm8gYXJndW1lbnQuICBUaGVzZQorQEAgLTMwMSw2ICszMDIsNyBAQCBfY3BwX2J1aWx0aW5fbWFjcm9fdGV4dCAoY3BwX3JlYWRlciAqcGZpbGUsIGNwcF9oYXNobm9kZSAqbm9kZSwKKyAJICAgIGlmICghbmFtZSkKKyAJICAgICAgYWJvcnQgKCk7CisgCSAgfQorKwluYW1lID0gcmVtYXBfZmlsZV9maWxlbmFtZSAobmFtZSk7CisgCWxlbiA9IHN0cmxlbiAobmFtZSk7CisgCWJ1ZiA9IF9jcHBfdW5hbGlnbmVkX2FsbG9jIChwZmlsZSwgbGVuICogMiArIDMpOworIAlyZXN1bHQgPSBidWY7CistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDMtUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzdmODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDMtUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gMjVjODdjNmNjNDBlYzVjYzY5NjVmOGJmYjIxNWJlYzAxYWJkNmQ4MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTYgTWFyIDIwMTYgMDU6Mzk6NTkgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCA0My80Nl0gUmV1c2UgLWZkZWJ1Zy1wcmVmaXgtbWFwIHRvIHJlcGxhY2UgLWZmaWxlLXByZWZpeC1tYXAKKworVGhlIG9lLWNvcmUgbWF5IHVzZSBleHRlcm5hbCB0b29sY2hhaW4gdG8gY29tcGlsZSwKK3doaWNoIG1heSBub3Qgc3VwcG9ydCAtZmZpbGUtcHJlZml4LW1hcC4KKworU2luY2Ugd2UgdXNlIC1mZGVidWctcHJlZml4LW1hcCB0byBkbyB0aGUgc2FtZSB0aGluZywKK3NvIHdlIGNvdWxkIHJldXNlIGl0IHRvIHJlcGxhY2UgLWZmaWxlLXByZWZpeC1tYXAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtvZS1jb3JlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2Mvb3B0cy1nbG9iYWwuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9vcHRzLWdsb2JhbC5jIGIvZ2NjL29wdHMtZ2xvYmFsLmMKK2luZGV4IGI3ZTUyMzIuLjEyMWQ3YjkgMTAwNjQ0CistLS0gYS9nY2Mvb3B0cy1nbG9iYWwuYworKysrIGIvZ2NjL29wdHMtZ2xvYmFsLmMKK0BAIC0zMSw2ICszMSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2luY2x1ZGUgImxhbmdob29rcy5oIgorICNpbmNsdWRlICJkYmdjbnQuaCIKKyAjaW5jbHVkZSAiZGVidWcuaCIKKysjaW5jbHVkZSAiZmlsZS1tYXAuaCIKKyAjaW5jbHVkZSAib3V0cHV0LmgiCisgI2luY2x1ZGUgInBsdWdpbi5oIgorICNpbmNsdWRlICJ0b3BsZXYuaCIKK0BAIC0zNTcsNiArMzU4LDkgQEAgaGFuZGxlX2NvbW1vbl9kZWZlcnJlZF9vcHRpb25zICh2b2lkKQorIAorIAljYXNlIE9QVF9mZGVidWdfcHJlZml4X21hcF86CisgCSAgYWRkX2RlYnVnX3ByZWZpeF9tYXAgKG9wdC0+YXJnKTsKKysKKysJICAvKiBSZXVzZSAtZmRlYnVnLXByZWZpeC1tYXAgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcCAqLworKwkgIGFkZF9maWxlX3ByZWZpeF9tYXAgKG9wdC0+YXJnKTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBPUFRfZmR1bXBfOgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDQtZ2NjLWZpbmFsLmMtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1zb3VyYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0NC1nY2MtZmluYWwuYy1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXNvdXJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDFhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDQtZ2NjLWZpbmFsLmMtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1zb3VyYy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDZhYjIzZTg4YWVmMjJiYmFiZWU3Yjk2MDBjNDU5ZmYzOTU0N2JiNjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDI0IE1hciAyMDE2IDExOjIzOjE0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNDQvNDZdIGdjYy9maW5hbC5jOiAtZmRlYnVnLXByZWZpeC1tYXAgc3VwcG9ydCB0byByZW1hcAorIHNvdXJjZXMgd2l0aCByZWxhdGl2ZSBwYXRoCisKK1BSIG90aGVyLzcwNDI4CisqIGZpbmFsLmMgKHJlbWFwX2RlYnVnX2ZpbGVuYW1lKTogVXNlIGxyZWFscGF0aCB0byB0cmFuc2xhdGUKK3JlbGF0aXZlIHBhdGggYmVmb3JlIHJlbWFwcGluZworCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03MDQyOAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvZmluYWwuYyB8IDE1ICsrKysrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2ZpbmFsLmMgYi9nY2MvZmluYWwuYworaW5kZXggNTVjZjUwOS4uMjMyOTNlNSAxMDA2NDQKKy0tLSBhL2djYy9maW5hbC5jCisrKysgYi9nY2MvZmluYWwuYworQEAgLTE1NTQsMTYgKzE1NTQsMjUgQEAgcmVtYXBfZGVidWdfZmlsZW5hbWUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHNpemVfdCBuYW1lX2xlbjsKKyAKKysgIC8qIFN1cHBvcnQgdG8gcmVtYXAgZmlsZW5hbWUgd2l0aCByZWxhdGl2ZSBwYXRoICAqLworKyAgY2hhciAqcmVhbHBhdGggPSBscmVhbHBhdGggKGZpbGVuYW1lKTsKKysgIGlmIChyZWFscGF0aCA9PSBOVUxMKQorKyAgICByZXR1cm4gZmlsZW5hbWU7CisrCisgICBmb3IgKG1hcCA9IGRlYnVnX3ByZWZpeF9tYXBzOyBtYXA7IG1hcCA9IG1hcC0+bmV4dCkKKy0gICAgaWYgKGZpbGVuYW1lX25jbXAgKGZpbGVuYW1lLCBtYXAtPm9sZF9wcmVmaXgsIG1hcC0+b2xkX2xlbikgPT0gMCkKKysgICAgaWYgKGZpbGVuYW1lX25jbXAgKHJlYWxwYXRoLCBtYXAtPm9sZF9wcmVmaXgsIG1hcC0+b2xkX2xlbikgPT0gMCkKKyAgICAgICBicmVhazsKKyAgIGlmICghbWFwKQorLSAgICByZXR1cm4gZmlsZW5hbWU7CistICBuYW1lID0gZmlsZW5hbWUgKyBtYXAtPm9sZF9sZW47CisrICAgIHsKKysgICAgICBmcmVlIChyZWFscGF0aCk7CisrICAgICAgcmV0dXJuIGZpbGVuYW1lOworKyAgICB9CisrICBuYW1lID0gcmVhbHBhdGggKyBtYXAtPm9sZF9sZW47CisgICBuYW1lX2xlbiA9IHN0cmxlbiAobmFtZSkgKyAxOworICAgcyA9IChjaGFyICopIGFsbG9jYSAobmFtZV9sZW4gKyBtYXAtPm5ld19sZW4pOworICAgbWVtY3B5IChzLCBtYXAtPm5ld19wcmVmaXgsIG1hcC0+bmV3X2xlbik7CisgICBtZW1jcHkgKHMgKyBtYXAtPm5ld19sZW4sIG5hbWUsIG5hbWVfbGVuKTsKKysgIGZyZWUgKHJlYWxwYXRoKTsKKyAgIHJldHVybiBnZ2Nfc3RyZHVwIChzKTsKKyB9CisgDAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDUtbGliZ2NjLUFkZC1rbm9iLXRvLXVzZS1sZGJsLTEyOC1vbi1wcGMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDUtbGliZ2NjLUFkZC1rbm9iLXRvLXVzZS1sZGJsLTEyOC1vbi1wcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyYjcyNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0NS1saWJnY2MtQWRkLWtub2ItdG8tdXNlLWxkYmwtMTI4LW9uLXBwYy5wYXRjaApAQCAtMCwwICsxLDEyNSBAQAorRnJvbSA1YTQ3ZDQwNGVhMjllMjU0NzI2OWUzZGRmMzg3NTQ0NjJkOTNmOTAzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgQXByIDIwMTYgMjA6MDM6MjggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA0NS80Nl0gbGliZ2NjOiBBZGQga25vYiB0byB1c2UgbGRibC0xMjggb24gcHBjCisKK211c2wgZG9lcyBub3Qgc3VwcG9ydCBsZGJsIDEyOCBzbyB3ZSBjYW4gbm90IGFzc3VtZQordGhhdCBsaW51eCBhcyBhIHdob2xlIHN1cHBvcnRzIGxkYmwtMTI4IGJpdHMsIGluc3RlYWQKK2FjdCB1cG9uIGNvbmZpZ3VyZSBvcHRpb24gcGFzc2VkIHRvIGdjYyBhbmQgYXNzdW1lIG5vCitvbiBtdXNsIGFuZCB5ZXMgb3RoZXJ3aXNlIGlmIG5vIG9wdGlvbiBpcyBwYXNzZWQgc2luY2UKK2RlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGFzc3VtZSBsZGJsMTI4IGl0IGRvZXMgbm90CitjaGFuZ2UgdGhlIGRlZmF1bHRzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGliZ2NjL01ha2VmaWxlLmluICAgICAgICAgICB8ICAxICsKKyBsaWJnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4IHwgIDUgKysrKy0KKyBsaWJnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTggKysrKysrKysrKysrKysrKysrCisgbGliZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDEyICsrKysrKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgbGliZ2NjL2NvbmZpZ3VyZQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL01ha2VmaWxlLmluIGIvbGliZ2NjL01ha2VmaWxlLmluCitpbmRleCBmMDliMzliLi4yOTZjZjBmIDEwMDY0NAorLS0tIGEvbGliZ2NjL01ha2VmaWxlLmluCisrKysgYi9saWJnY2MvTWFrZWZpbGUuaW4KK0BAIC00Myw2ICs0Myw3IEBAIGVuYWJsZV92dGFibGVfdmVyaWZ5ID0gQGVuYWJsZV92dGFibGVfdmVyaWZ5QAorIGVuYWJsZV9kZWNpbWFsX2Zsb2F0ID0gQGVuYWJsZV9kZWNpbWFsX2Zsb2F0QAorIGZpeGVkX3BvaW50ID0gQGZpeGVkX3BvaW50QAorIHdpdGhfYWl4X3NvbmFtZSA9IEB3aXRoX2FpeF9zb25hbWVACisrd2l0aF9sZGJsMTI4ID0gQHdpdGhfbGRibDEyOEAKKyAKKyBob3N0X25vbmNhbm9uaWNhbCA9IEBob3N0X25vbmNhbm9uaWNhbEAKKyByZWFsX2hvc3Rfbm9uY2Fub25pY2FsID0gQHJlYWxfaG9zdF9ub25jYW5vbmljYWxACitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eCBiL2xpYmdjYy9jb25maWcvcnM2MDAwL3QtbGludXgKK2luZGV4IDRmNmQ0YzQuLmM1MGRkOTQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4CisrKysgYi9saWJnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4CitAQCAtMSwzICsxLDYgQEAKKyBTSExJQl9NQVBGSUxFUyArPSAkKHNyY2RpcikvY29uZmlnL3JzNjAwMC9saWJnY2MtZ2xpYmMudmVyCisgCistSE9TVF9MSUJHQ0MyX0NGTEFHUyArPSAtbWxvbmctZG91YmxlLTEyOCAtbW5vLW1pbmltYWwtdG9jCisraWZlcSAoJCh3aXRoX2xkYmwxMjgpLHllcykKKytIT1NUX0xJQkdDQzJfQ0ZMQUdTICs9IC1tbG9uZy1kb3VibGUtMTI4CisrZW5kaWYKKytIT1NUX0xJQkdDQzJfQ0ZMQUdTICs9IC1tbm8tbWluaW1hbC10b2MKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlIGIvbGliZ2NjL2NvbmZpZ3VyZQorb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGU3ZDZjNzUuLmU5YTkwMTkKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUKKysrKyBiL2xpYmdjYy9jb25maWd1cmUKK0BAIC02MTQsNiArNjE0LDcgQEAgYnVpbGRfdmVuZG9yCisgYnVpbGRfY3B1CisgYnVpbGQKKyB3aXRoX2FpeF9zb25hbWUKKyt3aXRoX2xkYmwxMjgKKyBlbmFibGVfdnRhYmxlX3ZlcmlmeQorIGVuYWJsZV9zaGFyZWQKKyBsaWJnY2NfdG9wZGlyCitAQCAtNjYzLDYgKzY2NCw3IEBAIHdpdGhfY3Jvc3NfaG9zdAorIHdpdGhfbGQKKyBlbmFibGVfc2hhcmVkCisgZW5hYmxlX3Z0YWJsZV92ZXJpZnkKKyt3aXRoX2xvbmdfZG91YmxlXzEyOAorIHdpdGhfYWl4X3NvbmFtZQorIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicworIHdpdGhfc2xpYmRpcgorQEAgLTEzMTksNiArMTMyMSw3IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXRhcmdldC1zdWJkaXI9U1VCRElSICAgICAgQ29uZmlndXJpbmcgaW4gYSBzdWJkaXJlY3RvcnkgZm9yIHRhcmdldAorICAgLS13aXRoLWNyb3NzLWhvc3Q9SE9TVCAgICAgICAgICAgQ29uZmlndXJpbmcgd2l0aCBhIGNyb3NzIGNvbXBpbGVyCisgICAtLXdpdGgtbGQgICAgICAgICAgICAgICBhcnJhbmdlIHRvIHVzZSB0aGUgc3BlY2lmaWVkIGxkIChmdWxsIHBhdGhuYW1lKQorKyAgLS13aXRoLWxvbmctZG91YmxlLTEyOCAgdXNlIDEyOC1iaXQgbG9uZyBkb3VibGUgYnkgZGVmYXVsdAorICAgLS13aXRoLWFpeC1zb25hbWU9YWl4fHN2cjR8Ym90aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyAoYWthICJTT05BTUUiKSB2YXJpYW50IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIG9uIEFJWAorQEAgLTIyMDEsNiArMjIwNCwyMSBAQCBmaQorIAorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbG9uZy1kb3VibGUtMTI4IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbG9uZ19kb3VibGVfMTI4K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbG9uZ19kb3VibGVfMTI4OyB3aXRoX2xkYmwxMjg9IiR3aXRoX2xvbmdfZG91YmxlXzEyOCIKKytlbHNlCisrICBjYXNlICIke2hvc3R9IiBpbgorKyBwb3dlciotKi1tdXNsKikKKysgICB3aXRoX2xkYmwxMjg9Im5vIjs7CisrICopIHdpdGhfbGRibDEyOD0ieWVzIjs7CisrIGVzYWMKKysKKytmaQorKworKworKworKworICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWl4LXNvbmFtZSB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX2FpeF9zb25hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgd2l0aHZhbD0kd2l0aF9haXhfc29uYW1lOyBjYXNlICIke2hvc3R9OiR7ZW5hYmxlX3NoYXJlZH0iIGluCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDI2OTk5N2YuLjgxZGMzYmEgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtNzcsNiArNzcsMTggQEAgQUNfQVJHX0VOQUJMRSh2dGFibGUtdmVyaWZ5LAorIFtlbmFibGVfdnRhYmxlX3ZlcmlmeT1ub10pCisgQUNfU1VCU1QoZW5hYmxlX3Z0YWJsZV92ZXJpZnkpCisgCisrQUNfQVJHX1dJVEgobG9uZy1kb3VibGUtMTI4LAorK1tBU19IRUxQX1NUUklORyhbLS13aXRoLWxvbmctZG91YmxlLTEyOF0sCisrICAgIFt1c2UgMTI4LWJpdCBsb25nIGRvdWJsZSBieSBkZWZhdWx0XSldLAorKyAgICAgIHdpdGhfbGRibDEyOD0iJHdpdGhfbG9uZ19kb3VibGVfMTI4IiwKKytbY2FzZSAiJHtob3N0fSIgaW4KKysgcG93ZXIqLSotbXVzbCopCisrICAgd2l0aF9sZGJsMTI4PSJubyI7OworKyAqKSB3aXRoX2xkYmwxMjg9InllcyI7OworKyBlc2FjCisrXSkKKytBQ19TVUJTVCh3aXRoX2xkYmwxMjgpCisrCisgQUNfQVJHX1dJVEgoYWl4LXNvbmFtZSwKKyBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1haXgtc29uYW1lPWFpeHxzdnI0fGJvdGhdLAorICAgICBbc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyAoYWthICJTT05BTUUiKSB2YXJpYW50IHRvIHByb3ZpZGUgb24gQUlYXSldLAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDYtTGluay1saWJnY2MtdXNpbmctTERGTEFHUy1ub3QtanVzdC1TSExJQl9MREZMQUdTLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ2LUxpbmstbGliZ2NjLXVzaW5nLUxERkxBR1Mtbm90LWp1c3QtU0hMSUJfTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTAwMzdmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ2LUxpbmstbGliZ2NjLXVzaW5nLUxERkxBR1Mtbm90LWp1c3QtU0hMSUJfTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDUxM2JmM2MzM2UyZjU1MWYwOGJkNTc2MDUwOTFkNWRkZWJhMzUzNmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCA0IE1heSAyMDE2IDIxOjExOjM0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNDYvNDZdIExpbmsgbGliZ2NjIHVzaW5nIExERkxBR1MsIG5vdCBqdXN0IFNITElCX0xERkxBR1MKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliZ2NjL2NvbmZpZy90LXNsaWJnY2MgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlnL3Qtc2xpYmdjYyBiL2xpYmdjYy9jb25maWcvdC1zbGliZ2NjCitpbmRleCA4YzVmODkwLi4yOWJlOTA5IDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZy90LXNsaWJnY2MKKysrKyBiL2xpYmdjYy9jb25maWcvdC1zbGliZ2NjCitAQCAtMzIsNyArMzIsNyBAQCBTSExJQl9JTlNUQUxMX1NPTElOSyA9ICQoTE5fUykgJChTSExJQl9TT05BTUUpIFwKKyAJJChERVNURElSKSQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJTkspCisgCisgU0hMSUJfTElOSyA9ICQoQ0MpICQoTElCR0NDMl9DRkxBR1MpIC1zaGFyZWQgLW5vZGVmYXVsdGxpYnMgXAorLQkkKFNITElCX0xERkxBR1MpIFwKKysJJChMREZMQUdTKSAkKFNITElCX0xERkxBR1MpIFwKKyAJLW8gJChTSExJQl9ESVIpLyQoU0hMSUJfU09OQU1FKS50bXAgQG11bHRpbGliX2ZsYWdzQCBcCisgCSQoU0hMSUJfT0JKUykgJChTSExJQl9MQykgJiYgXAorIAlybSAtZiAkKFNITElCX0RJUikvJChTSExJQl9TT0xJTkspICYmIFwKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ3LWxpYmdjY19zLVVzZS1hbGlhcy1mb3ItX19jcHVfaW5kaWNhdG9yX2luaXQtaW5zdGVhZC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDctbGliZ2NjX3MtVXNlLWFsaWFzLWZvci1fX2NwdV9pbmRpY2F0b3JfaW5pdC1pbnN0ZWFkLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDZjZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ3LWxpYmdjY19zLVVzZS1hbGlhcy1mb3ItX19jcHVfaW5kaWNhdG9yX2luaXQtaW5zdGVhZC0ucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbSAwYTllZDA0NzkyMDNjYjdlNjljMzc0NWIwYzI1OTAwNzQxMGYzOWJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU3phYm9sY3MgTmFneSA8bnN6QHBvcnQ3MC5uZXQ+CitEYXRlOiBTYXQsIDI0IE9jdCAyMDE1IDIwOjA5OjUzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNDcvNDddIGxpYmdjY19zOiBVc2UgYWxpYXMgZm9yIF9fY3B1X2luZGljYXRvcl9pbml0IGluc3RlYWQgb2YKKyBzeW12ZXIKKworQWRhcHRlciBmcm9tCisKK2h0dHBzOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNS0wNS9tc2cwMDg5OS5odG1sCisKK1RoaXMgZml4IHdhcyBkZWJhdGVkIGJ1dCBoYXNudCBiZWVuIGFwcGxpZWQgZ2NjIHVwc3RyZWFtIHNpbmNlCit0aGV5IGV4cGVjdCBtdXNsIHRvIHN1cHBvcnQgJ0AnIGluIHN5bWJvbCB2ZXJzaW9uaW5nIHdoaWNoIGlzCithIHN1bi9nbnUgdmVyc2lvbmluZyBleHRlbnRpb24uIFRoaXMgcGF0Y2ggaG93ZXZlciBhdm9pZHMgdGhlCituZWVkIGZvciB0aGUgJ0AnIHN5bWJvbHMgYXQgYWxsCisKK2xpYmdjYy9DaGFuZ2Vsb2c6CisKKzIwMTUtMDUtMTEgIFN6YWJvbGNzIE5hZ3kgIDxzemFib2xjcy5uYWd5QGFybS5jb20+CisKKwkqIGNvbmZpZy9pMzg2L2NwdWluZm8uYyAoX19jcHVfaW5kaWNhdG9yX2luaXRfbG9jYWwpOiBBZGQuCisJKF9fY3B1X2luZGljYXRvcl9pbml0QEdDQ180LjguMCwgX19jcHVfbW9kZWxAR0NDXzQuOC4wKTogUmVtb3ZlLgorCisJKiBjb25maWcvaTM4Ni90LWxpbnV4IChIT1NUX0xJQkdDQzJfQ0ZMQUdTKTogUmVtb3ZlIC1EVVNFX0VMRl9TWU1WRVIuCisKK2djYy9DaGFuZ2Vsb2c6CisKKzIwMTUtMDUtMTEgIFN6YWJvbGNzIE5hZ3kgIDxzemFib2xjcy5uYWd5QGFybS5jb20+CisKKwkqIGNvbmZpZy9pMzg2L2kzODYuYyAoaXg4Nl9leHBhbmRfYnVpbHRpbik6IE1ha2UgX19idWlsdGluX2NwdV9pbml0CisJY2FsbCBfX2NwdV9pbmRpY2F0b3JfaW5pdF9sb2NhbCBpbnN0ZWFkIG9mIF9fY3B1X2luZGljYXRvcl9pbml0LgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFJlamVjdGVkCisKKyBnY2MvY29uZmlnL2kzODYvaTM4Ni5jICAgICAgIHwgNCArKy0tCisgbGliZ2NjL2NvbmZpZy9pMzg2L2NwdWluZm8uYyB8IDYgKysrLS0tCisgbGliZ2NjL2NvbmZpZy9pMzg2L3QtbGludXggICB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCitpbmRleCA4NjFhMDI5Li4xYzk3ZDcyIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYworKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYworQEAgLTQwMzIzLDEwICs0MDMyMywxMCBAQCBpeDg2X2V4cGFuZF9idWlsdGluICh0cmVlIGV4cCwgcnR4IHRhcmdldCwgcnR4IHN1YnRhcmdldCwKKyAgICAgeworICAgICBjYXNlIElYODZfQlVJTFRJTl9DUFVfSU5JVDoKKyAgICAgICB7CistCS8qIE1ha2UgaXQgY2FsbCBfX2NwdV9pbmRpY2F0b3JfaW5pdCBpbiBsaWJnY2MuICovCisrCS8qIE1ha2UgaXQgY2FsbCBfX2NwdV9pbmRpY2F0b3JfaW5pdF9sb2NhbCBpbiBsaWJnY2MuYS4gKi8KKyAJdHJlZSBjYWxsX2V4cHIsIGZuZGVjbCwgdHlwZTsKKyAgICAgICAgIHR5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKGludGVnZXJfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOyAKKy0JZm5kZWNsID0gYnVpbGRfZm5fZGVjbCAoIl9fY3B1X2luZGljYXRvcl9pbml0IiwgdHlwZSk7CisrCWZuZGVjbCA9IGJ1aWxkX2ZuX2RlY2wgKCJfX2NwdV9pbmRpY2F0b3JfaW5pdF9sb2NhbCIsIHR5cGUpOworIAljYWxsX2V4cHIgPSBidWlsZF9jYWxsX2V4cHIgKGZuZGVjbCwgMCk7IAorIAlyZXR1cm4gZXhwYW5kX2V4cHIgKGNhbGxfZXhwciwgdGFyZ2V0LCBtb2RlLCBFWFBBTkRfTk9STUFMKTsKKyAgICAgICB9CitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZy9pMzg2L2NwdWluZm8uYyBiL2xpYmdjYy9jb25maWcvaTM4Ni9jcHVpbmZvLmMKK2luZGV4IDhjMjI0OGQuLjZjODJmMTUgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlnL2kzODYvY3B1aW5mby5jCisrKysgYi9saWJnY2MvY29uZmlnL2kzODYvY3B1aW5mby5jCitAQCAtNDg1LDcgKzQ4NSw3IEBAIF9fY3B1X2luZGljYXRvcl9pbml0ICh2b2lkKQorICAgcmV0dXJuIDA7CisgfQorIAorLSNpZiBkZWZpbmVkIFNIQVJFRCAmJiBkZWZpbmVkIFVTRV9FTEZfU1lNVkVSCistX19hc21fXyAoIi5zeW12ZXIgX19jcHVfaW5kaWNhdG9yX2luaXQsIF9fY3B1X2luZGljYXRvcl9pbml0QEdDQ180LjguMCIpOworLV9fYXNtX18gKCIuc3ltdmVyIF9fY3B1X21vZGVsLCBfX2NwdV9tb2RlbEBHQ0NfNC44LjAiKTsKKysjaWZuZGVmIFNIQVJFRAorK2ludCBfX2NwdV9pbmRpY2F0b3JfaW5pdF9sb2NhbCAodm9pZCkKKysgIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcyAoIl9fY3B1X2luZGljYXRvcl9pbml0IikpKTsKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlnL2kzODYvdC1saW51eCBiL2xpYmdjYy9jb25maWcvaTM4Ni90LWxpbnV4CitpbmRleCAxMWJiNDZlLi40ZjQ3ZjdiIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZy9pMzg2L3QtbGludXgKKysrKyBiL2xpYmdjYy9jb25maWcvaTM4Ni90LWxpbnV4CitAQCAtMyw0ICszLDQgQEAKKyAjIHQtc2xpYmdjYy1lbGYtdmVyIGFuZCB0LWxpbnV4CisgU0hMSUJfTUFQRklMRVMgPSBsaWJnY2Mtc3RkLnZlciAkKHNyY2RpcikvY29uZmlnL2kzODYvbGliZ2NjLWdsaWJjLnZlcgorIAorLUhPU1RfTElCR0NDMl9DRkxBR1MgKz0gLW1sb25nLWRvdWJsZS04MCAtRFVTRV9FTEZfU1lNVkVSCisrSE9TVF9MSUJHQ0MyX0NGTEFHUyArPSAtbWxvbmctZG91YmxlLTgwCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0OC1BUk0tUFItdGFyZ2V0LTcxMDU2LURvbi10LXVzZS12ZWN0b3JpemVkLWJ1aWx0aW5zLXdoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ4LUFSTS1QUi10YXJnZXQtNzEwNTYtRG9uLXQtdXNlLXZlY3Rvcml6ZWQtYnVpbHRpbnMtd2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzOWM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0OC1BUk0tUFItdGFyZ2V0LTcxMDU2LURvbi10LXVzZS12ZWN0b3JpemVkLWJ1aWx0aW5zLXdoLnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK0Zyb20gODRkMmE1NTA5ODkyYjY1ZWQ2MGQzOWU2ZTJmOTcxOWUzNzYyZTQwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGt0a2FjaG92IDxrdGthY2hvdkAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBUdWUsIDMxIE1heSAyMDE2IDA4OjI5OjM5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFtBUk1dIFBSIHRhcmdldC83MTA1NjogRG9uJ3QgdXNlIHZlY3Rvcml6ZWQgYnVpbHRpbnMgd2hlbgorIE5FT04gaXMgbm90IGF2YWlsYWJsZQorCisJUFIgdGFyZ2V0LzcxMDU2CisJKiBjb25maWcvYXJtL2FybS1idWlsdGlucy5jIChhcm1fYnVpbHRpbl92ZWN0b3JpemVkX2Z1bmN0aW9uKTogUmV0dXJuCisJTlVMTF9UUkVFIGVhcmx5IGlmIE5FT04gaXMgbm90IGF2YWlsYWJsZS4gIFJlbW92ZSBub3cgcmVkdW5kYW50IGNoZWNrCisJaW4gQVJNX0NIRUNLX0JVSUxUSU5fTU9ERS4KKworCSogZ2NjLnRhcmdldC9hcm0vcHI3MTA1Ni5jOiBOZXcgdGVzdC4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL2JyYW5jaGVzL2djYy02LWJyYW5jaEAyMzY5MTAgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKyBnY2MvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3ICsrKysrKysKKyBnY2MvY29uZmlnL2FybS9hcm0tYnVpbHRpbnMuYyAgICAgICAgICB8ICA2ICsrKysrLQorIGdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgIHwgIDUgKysrKysKKyBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL3ByNzEwNTYuYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vcHI3MTA1Ni5jCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9hcm0tYnVpbHRpbnMuYyBiL2djYy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jCitpbmRleCA5MGZiNDBmLi42OGIyODM5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vYXJtLWJ1aWx0aW5zLmMKKysrKyBiL2djYy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jCitAQCAtMjg2MSw2ICsyODYxLDEwIEBAIGFybV9idWlsdGluX3ZlY3Rvcml6ZWRfZnVuY3Rpb24gKHVuc2lnbmVkIGludCBmbiwgdHJlZSB0eXBlX291dCwgdHJlZSB0eXBlX2luKQorICAgaW50IGluX24sIG91dF9uOworICAgYm9vbCBvdXRfdW5zaWduZWRfcCA9IFRZUEVfVU5TSUdORUQgKHR5cGVfb3V0KTsKKyAKKysgIC8qIENhbid0IHByb3ZpZGUgYW55IHZlY3Rvcml6ZWQgYnVpbHRpbnMgd2hlbiB3ZSBjYW4ndCB1c2UgTkVPTi4gICovCisrICBpZiAoIVRBUkdFVF9ORU9OKQorKyAgICByZXR1cm4gTlVMTF9UUkVFOworKworICAgaWYgKFRSRUVfQ09ERSAodHlwZV9vdXQpICE9IFZFQ1RPUl9UWVBFCisgICAgICAgfHwgVFJFRV9DT0RFICh0eXBlX2luKSAhPSBWRUNUT1JfVFlQRSkKKyAgICAgcmV0dXJuIE5VTExfVFJFRTsKK0BAIC0yODc1LDcgKzI4NzksNyBAQCBhcm1fYnVpbHRpbl92ZWN0b3JpemVkX2Z1bmN0aW9uICh1bnNpZ25lZCBpbnQgZm4sIHRyZWUgdHlwZV9vdXQsIHRyZWUgdHlwZV9pbikKKyAgICBOVUxMX1RSRUUgaXMgcmV0dXJuZWQgaWYgbm8gc3VjaCBidWlsdGluIGlzIGF2YWlsYWJsZS4gICovCisgI3VuZGVmIEFSTV9DSEVDS19CVUlMVElOX01PREUKKyAjZGVmaW5lIEFSTV9DSEVDS19CVUlMVElOX01PREUoQykgICAgXAorLSAgKFRBUkdFVF9ORU9OICYmIFRBUkdFVF9GUFVfQVJNVjggICBcCisrICAoVEFSR0VUX0ZQVV9BUk1WOCAgIFwKKyAgICAmJiBmbGFnX3Vuc2FmZV9tYXRoX29wdGltaXphdGlvbnMgXAorICAgICYmIEFSTV9DSEVDS19CVUlMVElOX01PREVfMSAoQykpCisgCitkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9wcjcxMDU2LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL3ByNzEwNTYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjEzNjc1NGUKKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vcHI3MTA1Ni5jCitAQCAtMCwwICsxLDMyIEBACisrLyogUFIgdGFyZ2V0LzcxMDU2LiAgKi8KKysvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92ZnAzX29rIH0gKi8KKysvKiB7IGRnLW9wdGlvbnMgIi1PMyAtbWZwdT12ZnB2MyIgfSAqLworKworKy8qIENoZWNrIHRoYXQgY29tcGlsaW5nIGZvciBhIG5vbi1ORU9OIHRhcmdldCBkb2Vzbid0IHRyeSB0byBpbnRyb2R1Y2UKKysgICBhIE5FT04gdmVjdG9yaXplZCBidWlsdGluLiAgKi8KKysKKytleHRlcm4gY2hhciAqYnVmZjsKKytpbnQgZjIgKCk7Cisrc3RydWN0IFQxCisreworKyAgaW50IHJlc2VydmVkWzJdOworKyAgdW5zaWduZWQgaW50IGlwOworKyAgdW5zaWduZWQgc2hvcnQgY3M7CisrICB1bnNpZ25lZCBzaG9ydCByc3J2MjsKKyt9OworK3ZvaWQKKytmMyAoY29uc3QgY2hhciAqcCkKKyt7CisrICBzdHJ1Y3QgVDEgeDsKKysgIF9fYnVpbHRpbl9tZW1jcHkgKCZ4LCBwLCBzaXplb2YgKHN0cnVjdCBUMSkpOworKyAgeC5yZXNlcnZlZFswXSA9IF9fYnVpbHRpbl9ic3dhcDMyICh4LnJlc2VydmVkWzBdKTsKKysgIHgucmVzZXJ2ZWRbMV0gPSBfX2J1aWx0aW5fYnN3YXAzMiAoeC5yZXNlcnZlZFsxXSk7CisrICB4LmlwID0gX19idWlsdGluX2Jzd2FwMzIgKHguaXApOworKyAgeC5jcyA9IHguY3MgPDwgOCB8IHguY3MgPj4gODsKKysgIHgucnNydjIgPSB4LnJzcnYyIDw8IDggfCB4LnJzcnYyID4+IDg7CisrICBpZiAoZjIgKCkpCisrICAgIHsKKysgICAgICBfX2J1aWx0aW5fbWVtY3B5IChidWZmLCAiXG4iLCAxKTsKKysgICAgfQorK30KKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi9DVkUtMjAxNi00NDkwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi9DVkUtMjAxNi00NDkwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmU5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yL0NWRS0yMDE2LTQ0OTAucGF0Y2gKQEAgLTAsMCArMSwyOTAgQEAKK0Zyb20gN2QyMzViMWI1ZWEzNTM1MmM1NDk1N2VmNTUzMGQ5YTAyYzQ2OTYyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGJlcm5kcyA8YmVybmRzQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IE1vbiwgMiBNYXkgMjAxNiAxNzowNjo0MCArMDAwMAorU3ViamVjdDogW1BBVENIXSA9P1VURi04P3E/RGVtYW5nbGVyPTIwaW50ZWdlcj0yMG92ZXJmbG93PTIwZml4ZXM9MjBmcm9tPz0KKyA9P1VURi04P3E/PTIwTWFyY2VsPTIwQj1DMz1CNmhtZS4/PQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisJUFIgYysrLzcwNDk4CisJKiBjcC1kZW1hbmdsZS5jOiBQYXJzZSBudW1iZXJzIGFzIGludGVnZXIgaW5zdGVhZCBvZiBsb25nIHRvIGF2b2lkCisJb3ZlcmZsb3cgYWZ0ZXIgc2FuaXR5IGNoZWNrcy4gSW5jbHVkZSA8bGltaXRzLmg+IGlmIGF2YWlsYWJsZS4KKwkoSU5UX01BWCk6IERlZmluZSBpZiBuZWNlc3NhcnkuCisJKGRfbWFrZV90ZW1wbGF0ZV9wYXJhbSk6IFRha2VzIGludGVnZXIgYXJndW1lbnQgaW5zdGVhZCBvZiBsb25nLgorCShkX21ha2VfZnVuY3Rpb25fcGFyYW0pOiBMaWtld2lzZS4KKwkoZF9hcHBlbmRfbnVtKTogTGlrZXdpc2UuCisJKGRfaWRlbnRpZmllcik6IExpa2V3aXNlLgorCShkX251bWJlcik6IFBhcnNlIGFzIGFuZCByZXR1cm4gaW50ZWdlci4KKwkoZF9jb21wYWN0X251bWJlcik6IEhhbmRsZSBvdmVyZmxvdy4KKwkoZF9zb3VyY2VfbmFtZSk6IENoYW5nZSB2YXJpYWJsZSB0eXBlIHRvIGludGVnZXIgZm9yIHBhcnNlZCBudW1iZXIuCisJKGRfamF2YV9yZXNvdXJjZSk6IExpa2V3aXNlLgorCShkX3NwZWNpYWxfbmFtZSk6IExpa2V3aXNlLgorCShkX2Rpc2NyaW1pbmF0b3IpOiBMaWtld2lzZS4KKwkoZF91bm5hbWVkX3R5cGUpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9kZW1hbmdsZS1leHBlY3RlZDogQWRkIHJlZ3Jlc3Npb24gdGVzdCBjYXNlcy4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIzNTc2NyAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiAgQ1ZFLTIwMTYtNDQ5MAorW1lvY3RvICM5NjMyXQorCitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworLS0tCisgbGliaWJlcnR5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8IDE5ICsrKysrKysrKysrKysKKyBsaWJpYmVydHkvY3AtZGVtYW5nbGUuYyAgICAgICAgICAgICAgIHwgNTIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyBsaWJpYmVydHkvdGVzdHN1aXRlL2RlbWFuZ2xlLWV4cGVjdGVkIHwgMTQgKysrKysrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgNjEgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvbGliaWJlcnR5L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2xpYmliZXJ0eS9DaGFuZ2VMb2cKKysrKyBnaXQvbGliaWJlcnR5L0NoYW5nZUxvZworQEAgLTEsMyArMSwyMiBAQAorKzIwMTYtMDUtMDIgIE1hcmNlbCBCw7ZobWUgIDxib2VobWUubWFyY2VsQGdtYWlsLmNvbT4KKysKKysgICBQUiBjKysvNzA0OTgKKysgICAqIGNwLWRlbWFuZ2xlLmM6IFBhcnNlIG51bWJlcnMgYXMgaW50ZWdlciBpbnN0ZWFkIG9mIGxvbmcgdG8gYXZvaWQKKysgICBvdmVyZmxvdyBhZnRlciBzYW5pdHkgY2hlY2tzLiBJbmNsdWRlIDxsaW1pdHMuaD4gaWYgYXZhaWxhYmxlLgorKyAgIChJTlRfTUFYKTogRGVmaW5lIGlmIG5lY2Vzc2FyeS4KKysgICAoZF9tYWtlX3RlbXBsYXRlX3BhcmFtKTogVGFrZXMgaW50ZWdlciBhcmd1bWVudCBpbnN0ZWFkIG9mIGxvbmcuCisrICAgKGRfbWFrZV9mdW5jdGlvbl9wYXJhbSk6IExpa2V3aXNlLgorKyAgIChkX2FwcGVuZF9udW0pOiBMaWtld2lzZS4KKysgICAoZF9pZGVudGlmaWVyKTogTGlrZXdpc2UuCisrICAgKGRfbnVtYmVyKTogUGFyc2UgYXMgYW5kIHJldHVybiBpbnRlZ2VyLgorKyAgIChkX2NvbXBhY3RfbnVtYmVyKTogSGFuZGxlIG92ZXJmbG93LgorKyAgIChkX3NvdXJjZV9uYW1lKTogQ2hhbmdlIHZhcmlhYmxlIHR5cGUgdG8gaW50ZWdlciBmb3IgcGFyc2VkIG51bWJlci4KKysgICAoZF9qYXZhX3Jlc291cmNlKTogTGlrZXdpc2UuCisrICAgKGRfc3BlY2lhbF9uYW1lKTogTGlrZXdpc2UuCisrICAgKGRfZGlzY3JpbWluYXRvcik6IExpa2V3aXNlLgorKyAgIChkX3VubmFtZWRfdHlwZSk6IExpa2V3aXNlLgorKyAgICogdGVzdHN1aXRlL2RlbWFuZ2xlLWV4cGVjdGVkOiBBZGQgcmVncmVzc2lvbiB0ZXN0IGNhc2VzLgorKworIDIwMTYtMDQtMjcgIFJlbGVhc2UgTWFuYWdlcgorIAorIAkqIEdDQyA2LjEuMCByZWxlYXNlZC4KK0luZGV4OiBnaXQvbGliaWJlcnR5L2NwLWRlbWFuZ2xlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9saWJpYmVydHkvY3AtZGVtYW5nbGUuYworKysrIGdpdC9saWJpYmVydHkvY3AtZGVtYW5nbGUuYworQEAgLTEyOCw2ICsxMjgsMTMgQEAgZXh0ZXJuIGNoYXIgKmFsbG9jYSAoKTsKKyAjIGVuZGlmIC8qIGFsbG9jYSAqLworICNlbmRpZiAvKiBIQVZFX0FMTE9DQV9IICovCisgCisrI2lmZGVmIEhBVkVfTElNSVRTX0gKKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2VuZGlmCisrI2lmbmRlZiBJTlRfTUFYCisrIyBkZWZpbmUgSU5UX01BWCAgICAgICAoaW50KSgoKHVuc2lnbmVkIGludCkgfjApID4+IDEpICAgICAgICAgIC8qIDB4N0ZGRkZGRkYgKi8KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAiYW5zaWRlY2wuaCIKKyAjaW5jbHVkZSAibGliaWJlcnR5LmgiCisgI2luY2x1ZGUgImRlbWFuZ2xlLmgiCitAQCAtMzk4LDcgKzQwNSw3IEBAIGRfbWFrZV9kdG9yIChzdHJ1Y3QgZF9pbmZvICosIGVudW0gZ251X3YKKyAgICAgICAgICAgICAgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqKTsKKyAKKyBzdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqCistZF9tYWtlX3RlbXBsYXRlX3BhcmFtIChzdHJ1Y3QgZF9pbmZvICosIGxvbmcpOworK2RfbWFrZV90ZW1wbGF0ZV9wYXJhbSAoc3RydWN0IGRfaW5mbyAqLCBpbnQpOworIAorIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoKKyBkX21ha2Vfc3ViIChzdHJ1Y3QgZF9pbmZvICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK0BAIC00MjEsOSArNDI4LDkgQEAgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKmRfdW5xdQorIAorIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpkX3NvdXJjZV9uYW1lIChzdHJ1Y3QgZF9pbmZvICopOworIAorLXN0YXRpYyBsb25nIGRfbnVtYmVyIChzdHJ1Y3QgZF9pbmZvICopOworK3N0YXRpYyBpbnQgZF9udW1iZXIgKHN0cnVjdCBkX2luZm8gKik7CisgCistc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKmRfaWRlbnRpZmllciAoc3RydWN0IGRfaW5mbyAqLCBsb25nKTsKKytzdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqZF9pZGVudGlmaWVyIChzdHJ1Y3QgZF9pbmZvICosIGludCk7CisgCisgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKmRfb3BlcmF0b3JfbmFtZSAoc3RydWN0IGRfaW5mbyAqKTsKKyAKK0BAIC0xMTE5LDcgKzExMjYsNyBAQCBkX21ha2VfZHRvciAoc3RydWN0IGRfaW5mbyAqZGksIGVudW0gZ251CisgLyogQWRkIGEgbmV3IHRlbXBsYXRlIHBhcmFtZXRlci4gICovCisgCisgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKgorLWRfbWFrZV90ZW1wbGF0ZV9wYXJhbSAoc3RydWN0IGRfaW5mbyAqZGksIGxvbmcgaSkKKytkX21ha2VfdGVtcGxhdGVfcGFyYW0gKHN0cnVjdCBkX2luZm8gKmRpLCBpbnQgaSkKKyB7CisgICBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpwOworIAorQEAgLTExMzUsNyArMTE0Miw3IEBAIGRfbWFrZV90ZW1wbGF0ZV9wYXJhbSAoc3RydWN0IGRfaW5mbyAqZGkKKyAvKiBBZGQgYSBuZXcgZnVuY3Rpb24gcGFyYW1ldGVyLiAgKi8KKyAKKyBzdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqCistZF9tYWtlX2Z1bmN0aW9uX3BhcmFtIChzdHJ1Y3QgZF9pbmZvICpkaSwgbG9uZyBpKQorK2RfbWFrZV9mdW5jdGlvbl9wYXJhbSAoc3RydWN0IGRfaW5mbyAqZGksIGludCBpKQorIHsKKyAgIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKnA7CisgCitAQCAtMTYyMCw3ICsxNjI3LDcgQEAgZF91bnF1YWxpZmllZF9uYW1lIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyBzdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqCisgZF9zb3VyY2VfbmFtZSAoc3RydWN0IGRfaW5mbyAqZGkpCisgeworLSAgbG9uZyBsZW47CisrICBpbnQgbGVuOworICAgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqcmV0OworIAorICAgbGVuID0gZF9udW1iZXIgKGRpKTsKK0BAIC0xNjMzLDEyICsxNjQwLDEyIEBAIGRfc291cmNlX25hbWUgKHN0cnVjdCBkX2luZm8gKmRpKQorIAorIC8qIG51bWJlciA6Oj0gW25dIDwobm9uLW5lZ2F0aXZlIGRlY2ltYWwgaW50ZWdlcik+ICAqLworIAorLXN0YXRpYyBsb25nCisrc3RhdGljIGludAorIGRfbnVtYmVyIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyB7CisgICBpbnQgbmVnYXRpdmU7CisgICBjaGFyIHBlZWs7CistICBsb25nIHJldDsKKysgIGludCByZXQ7CisgCisgICBuZWdhdGl2ZSA9IDA7CisgICBwZWVrID0gZF9wZWVrX2NoYXIgKGRpKTsKK0BAIC0xNjgxLDcgKzE2ODgsNyBAQCBkX251bWJlcl9jb21wb25lbnQgKHN0cnVjdCBkX2luZm8gKmRpKQorIC8qIGlkZW50aWZpZXIgOjo9IDwodW5xdWFsaWZpZWQgc291cmNlIGNvZGUgaWRlbnRpZmllcik+ICAqLworIAorIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoKKy1kX2lkZW50aWZpZXIgKHN0cnVjdCBkX2luZm8gKmRpLCBsb25nIGxlbikKKytkX2lkZW50aWZpZXIgKHN0cnVjdCBkX2luZm8gKmRpLCBpbnQgbGVuKQorIHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgCitAQCAtMTcwMiw3ICsxNzA5LDcgQEAgZF9pZGVudGlmaWVyIChzdHJ1Y3QgZF9pbmZvICpkaSwgbG9uZyBsZQorICAgLyogTG9vayBmb3Igc29tZXRoaW5nIHdoaWNoIGxvb2tzIGxpa2UgYSBnY2MgZW5jb2Rpbmcgb2YgYW4KKyAgICAgIGFub255bW91cyBuYW1lc3BhY2UsIGFuZCByZXBsYWNlIGl0IHdpdGggYSBtb3JlIHVzZXIgZnJpZW5kbHkKKyAgICAgIG5hbWUuICAqLworLSAgaWYgKGxlbiA+PSAobG9uZykgQU5PTllNT1VTX05BTUVTUEFDRV9QUkVGSVhfTEVOICsgMgorKyAgaWYgKGxlbiA+PSAoaW50KSBBTk9OWU1PVVNfTkFNRVNQQUNFX1BSRUZJWF9MRU4gKyAyCisgICAgICAgJiYgbWVtY21wIChuYW1lLCBBTk9OWU1PVVNfTkFNRVNQQUNFX1BSRUZJWCwKKyAJCSBBTk9OWU1PVVNfTkFNRVNQQUNFX1BSRUZJWF9MRU4pID09IDApCisgICAgIHsKK0BAIC0xODcwLDcgKzE4NzcsNyBAQCBkX2phdmFfcmVzb3VyY2UgKHN0cnVjdCBkX2luZm8gKmRpKQorIHsKKyAgIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKnAgPSBOVUxMOworICAgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqbmV4dCA9IE5VTEw7CistICBsb25nIGxlbiwgaTsKKysgIGludCBsZW4sIGk7CisgICBjaGFyIGM7CisgICBjb25zdCBjaGFyICpzdHI7CisgCitAQCAtMjAxMiw3ICsyMDE5LDcgQEAgZF9zcGVjaWFsX25hbWUgKHN0cnVjdCBkX2luZm8gKmRpKQorIAljYXNlICdDJzoKKyAJICB7CisgCSAgICBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpkZXJpdmVkX3R5cGU7CistCSAgICBsb25nIG9mZnNldDsKKysJICAgIGludCBvZmZzZXQ7CisgCSAgICBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpiYXNlX3R5cGU7CisgCisgCSAgICBkZXJpdmVkX3R5cGUgPSBjcGx1c19kZW1hbmdsZV90eXBlIChkaSk7CitAQCAtMjk0NiwxMCArMjk1MywxMCBAQCBkX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGUgKHN0cnVjdCBkX2luZm8KKyAKKyAvKiA8bm9uLW5lZ2F0aXZlIG51bWJlcj4gXyAqLworIAorLXN0YXRpYyBsb25nCisrc3RhdGljIGludAorIGRfY29tcGFjdF9udW1iZXIgKHN0cnVjdCBkX2luZm8gKmRpKQorIHsKKy0gIGxvbmcgbnVtOworKyAgaW50IG51bTsKKyAgIGlmIChkX3BlZWtfY2hhciAoZGkpID09ICdfJykKKyAgICAgbnVtID0gMDsKKyAgIGVsc2UgaWYgKGRfcGVla19jaGFyIChkaSkgPT0gJ24nKQorQEAgLTI5NTcsNyArMjk2NCw3IEBAIGRfY29tcGFjdF9udW1iZXIgKHN0cnVjdCBkX2luZm8gKmRpKQorICAgZWxzZQorICAgICBudW0gPSBkX251bWJlciAoZGkpICsgMTsKKyAKKy0gIGlmICghIGRfY2hlY2tfY2hhciAoZGksICdfJykpCisrICBpZiAobnVtIDwgMCB8fCAhIGRfY2hlY2tfY2hhciAoZGksICdfJykpCisgICAgIHJldHVybiAtMTsKKyAgIHJldHVybiBudW07CisgfQorQEAgLTI5NjksNyArMjk3Niw3IEBAIGRfY29tcGFjdF9udW1iZXIgKHN0cnVjdCBkX2luZm8gKmRpKQorIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoKKyBkX3RlbXBsYXRlX3BhcmFtIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyB7CistICBsb25nIHBhcmFtOworKyAgaW50IHBhcmFtOworIAorICAgaWYgKCEgZF9jaGVja19jaGFyIChkaSwgJ1QnKSkKKyAgICAgcmV0dXJuIE5VTEw7CitAQCAtMzE3MSw5ICszMTc4LDEwIEBAIGRfZXhwcmVzc2lvbl8xIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGluZGV4ID0gZF9jb21wYWN0X251bWJlciAoZGkpICsgMTsKKy0JICBpZiAoaW5kZXggPT0gMCkKKysJICBpbmRleCA9IGRfY29tcGFjdF9udW1iZXIgKGRpKTsKKysJICBpZiAoaW5kZXggPT0gSU5UX01BWCB8fCBpbmRleCA9PSAtMSkKKyAJICAgIHJldHVybiBOVUxMOworKwkgIGluZGV4ICsrOworIAl9CisgICAgICAgcmV0dXJuIGRfbWFrZV9mdW5jdGlvbl9wYXJhbSAoZGksIGluZGV4KTsKKyAgICAgfQorQEAgLTM1MDIsNyArMzUxMCw3IEBAIGRfbG9jYWxfbmFtZSAoc3RydWN0IGRfaW5mbyAqZGkpCisgc3RhdGljIGludAorIGRfZGlzY3JpbWluYXRvciAoc3RydWN0IGRfaW5mbyAqZGkpCisgeworLSAgbG9uZyBkaXNjcmltOworKyAgaW50IGRpc2NyaW07CisgCisgICBpZiAoZF9wZWVrX2NoYXIgKGRpKSAhPSAnXycpCisgICAgIHJldHVybiAxOworQEAgLTM1NTgsNyArMzU2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoKKyBkX3VubmFtZWRfdHlwZSAoc3RydWN0IGRfaW5mbyAqZGkpCisgeworICAgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqcmV0OworLSAgbG9uZyBudW07CisrICBpbnQgbnVtOworIAorICAgaWYgKCEgZF9jaGVja19jaGFyIChkaSwgJ1UnKSkKKyAgICAgcmV0dXJuIE5VTEw7CitAQCAtNDA4NiwxMCArNDA5NCwxMCBAQCBkX2FwcGVuZF9zdHJpbmcgKHN0cnVjdCBkX3ByaW50X2luZm8gKmRwCisgfQorIAorIHN0YXRpYyBpbmxpbmUgdm9pZAorLWRfYXBwZW5kX251bSAoc3RydWN0IGRfcHJpbnRfaW5mbyAqZHBpLCBsb25nIGwpCisrZF9hcHBlbmRfbnVtIChzdHJ1Y3QgZF9wcmludF9pbmZvICpkcGksIGludCBsKQorIHsKKyAgIGNoYXIgYnVmWzI1XTsKKy0gIHNwcmludGYgKGJ1ZiwiJWxkIiwgbCk7CisrICBzcHJpbnRmIChidWYsIiVkIiwgbCk7CisgICBkX2FwcGVuZF9zdHJpbmcgKGRwaSwgYnVmKTsKKyB9CisgCitJbmRleDogZ2l0L2xpYmliZXJ0eS90ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9saWJpYmVydHkvdGVzdHN1aXRlL2RlbWFuZ2xlLWV4cGVjdGVkCisrKysgZ2l0L2xpYmliZXJ0eS90ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQKK0BAIC00NDIyLDEyICs0NDIyLDIyIEBAIHZvaWQgYmF6PGludD4oQTxzaXplb2YgKGZvbygoaW50KSgpLCAoZmwKKyBfWjNmb29JMUZFTjFYSVhzemR0Y2wxUGNsY3ZUX19FRUU1YXJyYXlFRTRUeXBlRXYKKyBYPHNpemVvZiAoKFAoKChGKSgpKSgpKSkuYXJyYXkpPjo6VHlwZSBmb288Rj4oKQorICMKKy0jIFRlc3RzIGEgdXNlLWFmdGVyLWZyZWUgcHJvYmxlbQorKyMgVGVzdHMgYSB1c2UtYWZ0ZXItZnJlZSBwcm9ibGVtIFBSNzA0ODEKKyAKKyBfUS5fXzAKKyA6OlEuKHZvaWQpCisgIworLSMgVGVzdHMgYSB1c2UtYWZ0ZXItZnJlZSBwcm9ibGVtCisrIyBUZXN0cyBhIHVzZS1hZnRlci1mcmVlIHByb2JsZW0gUFI3MDQ4MQorIAorIF9RMTAtX185Y2FmZWJhYmUuCisgY2FmZWJhYmUuOjotKHZvaWQpCisrIworKyMgVGVzdHMgaW50ZWdlciBvdmVyZmxvdyBwcm9ibGVtIFBSNzA0OTIKKysKKytfX3Z0XzkwMDAwMDAwMDAwY2FmZWJhYmUKKytfX3Z0XzkwMDAwMDAwMDAwY2FmZWJhYmUKKysjCisrIyBUZXN0cyB3cml0ZSBhY2Nlc3MgdmlvbGF0aW9uIFBSNzA0OTgKKysKKytfWjgwODAwMDAwMDAwMDAwMDAwMDAwMDAwCisrX1o4MDgwMDAwMDAwMDAwMDAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYwppbmRleCBlNGZkNGQ2Li5mNTQwYjRkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYwpAQCAtMzMsNiArMzMsOCBAQAogZGVmIGdldF9sb25nX2RvdWJsZV9zZXR0aW5nKGJiLCBkKToKICAgICBpZiBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ3Bvd2VycGMnLCAncG93ZXJwYzY0JyBdIGFuZCBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkgaW4gWyAndWNsaWJjJywgJ2dsaWJjJyBdOgogICAgICAgICByZXR1cm4gIi0td2l0aC1sb25nLWRvdWJsZS0xMjgiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICItLXdpdGhvdXQtbG9uZy1kb3VibGUtMTI4IgogICAgIHJldHVybiAiIgogCiBkZWYgZ2V0X2djY19tdWx0aWFyY2hfc2V0dGluZyhiYiwgZCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKaW5kZXggZjRmNzZiZC4uZGRlYmJiOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYwpAQCAtNDQsNiArNDQsMTAgQEAKICAgICAke0BnZXRfZ2NjX211bHRpYXJjaF9zZXR0aW5nKGJiLCBkKX0gXAogIgogCisjIFNldCB0aGlzIGhlcmUgc2luY2UgR0NDIGNvbmZpZ3VyZSB3b24ndCBhdXRvLWRldGVjdCBhbmQgZW5hYmxlCisjIGluaXRmaW5pLWFycnkgd2hlbiBjcm9zcyBjb21waWxpbmcuCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1pbml0ZmluaS1hcnJheSIKKwogZXhwb3J0IGdjY19jdl9jb2xsZWN0Ml9saWJzID0gJ25vbmUgcmVxdWlyZWQnCiAjIFdlIG5lZWQgdG8gc2V0IGdjY19jdl9jb2xsZWN0Ml9saWJzIGVsc2UgdGhlcmUgaXMgY3Jvc3MtY29tcGlsYXRpb24gYmFkbmVzcwogIyBpbiB0aGUgY29uZmlnLmxvZyBmaWxlcyAod2hpY2ggbWlnaHQgbm90IGdldCBnZW5lcmF0ZWQgdW50aWwgZG9fY29tcGlsZQpAQCAtNTcsNiArNjEsMTAgQEAKIEVYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ZWwgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKIEVYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0bjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCiBFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NGVsbjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNpc2EzMnI2ZWwgPSAiIC0td2l0aC1hYmk9MzIgLS13aXRoLWFyY2g9bWlwczMycjYiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNpc2EzMnI2ID0gIiAtLXdpdGgtYWJpPTMyIC0td2l0aC1hcmNoPW1pcHMzMnI2IgorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzaXNhNjRyNmVsID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NHI2IgorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzaXNhNjRyNiA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjRyNiIKIAogIyBBUk12NisgYWRkcyBhdG9taWMgaW5zdHJ1Y3Rpb25zIHRoYXQgYWZmZWN0IHRoZSBBQkkgaW4gbGlicmFyaWVzIGJ1aWx0CiAjIHdpdGggVFVORV9DQ0FSR1MgaW4gZ2NjLXJ1bnRpbWUuICBNYWtlIHRoZSBjb21waWxlciBkZWZhdWx0IHRvIGEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjUzYzVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYwotcmVxdWlyZSBnY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCi0KLQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl82LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzYuMi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmluZGV4IDA0OGI1MzAuLmRjZjIyNzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMKQEAgLTc3LDcgKzc3LDcgQEAKIAogCSMgZ2NjLXJ1bnRpbWUgaW5zdGFsbHMgbGliZ2NjIGludG8gYSBzcGVjaWFsIGxvY2F0aW9uIGluIHN0YWdpbmcgc2luY2UgaXQgYnJlYWtzIGRvaW5nIGEgc3RhbmRhbG9uZSBidWlsZAogCWNhc2UgJHtQTn0gaW4KLQkJKmdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9fCpnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSkKKwkJKmdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9fCpnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19TWVN9KQogCQkJZGVzdD0ke0R9LyR7aW5jbHVkZWRpcn0vZ2NjLWJ1aWxkLWludGVybmFsLWluaXRpYWwtJHtUQVJHRVRfU1lTfQogCQkJaGFyZGxpbmtkaXIgLiAkZGVzdAogCQk7OwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzczZTVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKLXJlcXVpcmUgZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF82LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF82LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jCmluZGV4IGY0NzkzNjAuLmNjNDY1YTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYwpAQCAtMTMsNiArMTMsMTEgQEAKIAogcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKIAorIyBXaGlsZSB3ZSB3YW50IHRoZSAnZ251JyBoYXNoIHN0eWxlLCB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBzeXN2IGhlcmUgdG8KKyMgZW5zdXJlIHRoYXQgYW55IHJlY2lwZSB3aGljaCBkb2Vzbid0IG9iZXkgb3VyIExERkxBR1MgKHdoaWNoIGFsc28gc2V0IGl0IHRvCisjIGdudSkgd2lsbCBoaXQgYSBRQSBmYWlsdXJlLgorTElOS0VSX0hBU0hfU1RZTEUgPz0gInN5c3YiCisKIEVYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIKIEVYVFJBX09FQ09ORl9hcHBlbmRfc2g0ID0gIiBcCiAgICAgLS13aXRoLW11bHRpbGliLWxpc3Q9IFwKQEAgLTE4MywxMiArMTg4LDE1IEBACiAKIAkjIGdjYy1ydW50aW1lIGluc3RhbGxzIGxpYmdjYyBpbnRvIGEgc3BlY2lhbCBsb2NhdGlvbiBpbiBzdGFnaW5nIHNpbmNlIGl0IGJyZWFrcyBkb2luZyBhIHN0YW5kYWxvbmUgYnVpbGQKIAljYXNlICR7UE59IGluCi0JCSpnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSkKKwkJKmdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfXwqZ2NjLWNyb3Nzc2RrLSR7U0RLX1NZU30pCiAJCQlkZXN0PSR7RH0vJHtpbmNsdWRlZGlyfS9nY2MtYnVpbGQtaW50ZXJuYWwtJHtUQVJHRVRfU1lTfQogCQkJaGFyZGxpbmtkaXIgLiAkZGVzdAogCQk7OwogCWVzYWMKIH0KKyMgVGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlIHJlY2lwZSBuYW1lIGFuZCB0YXJnZXQgZ2NjIHNob3VsZG4ndCBkZXBlbmQgCisjIG9uIFNESyBzZXR0aW5ncyBlaXRoZXIKK2RvX2luc3RhbGxbdmFyZGVwc2V4Y2x1ZGVdICs9ICJTREtfU1lTIgogCiBkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKIGRvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDNjY2EwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYwotcmVxdWlyZSBnY2MtY3Jvc3MuaW5jCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzYuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNi4yLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKaW5kZXggN2QyNTk5Yy4uMDhlZGE1ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYwpAQCAtMSw2ICsxLDYgQEAKIGluaGVyaXQgY3Jvc3NzZGsKIAotUE4gPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQTiA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19TWVN9IgogCiBTWVNURU1IRUFERVJTID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9L2luY2x1ZGUiCiBTWVNURU1MSUJTID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30vIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDkwZTExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF8ke1BWfS5iYgotcmVxdWlyZSBnY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNi4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNi4yLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLmluYwppbmRleCA1M2Y4ODBmLi5jZGEyOTI3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMKQEAgLTEsNiArMSw2IEBACiBpbmhlcml0IGNyb3Nzc2RrCiAKLVBOID0gImdjYy1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSIKK1BOID0gImdjYy1jcm9zc3Nkay0ke1NES19TWVN9IgogCiBTWVNURU1IRUFERVJTID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9L2luY2x1ZGUiCiBTWVNURU1MSUJTID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30vIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYTZjNGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKLXJlcXVpcmUgZ2NjLWNyb3Nzc2RrLmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNi4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYgpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka182LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYwppbmRleCA4NjM5YzFjLi4xNTI1MmYxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jCkBAIC0xLDUgKzEsNyBAQAogcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKIAorU1VNTUFSWSA9ICJSdW50aW1lIGxpYnJhcmllcyBmcm9tIEdDQyIKKwogIyBPdmVyLXJpZGUgdGhlIExJQ0VOU0Ugc2V0IGJ5IGdjYy0ke1BWfS5pbmMgdG8gcmVtb3ZlICImIEdQTHYzIgogIyBBbGwgZ2NjLXJ1bnRpbWUgcGFja2FnZXMgYXJlIG5vdyBjb3ZlcmVkIGJ5IHRoZSBydW50aW1lIGV4Y2VwdGlvbi4KIExJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCkBAIC0xOSw2ICsyMSwxMCBAQAogUlVOVElNRUxJQklUTV9taXBzZWwgPSAiIgogUlVOVElNRUxJQklUTV9taXBzNjQgPSAiIgogUlVOVElNRUxJQklUTV9taXBzNjRlbCA9ICIiCitSVU5USU1FTElCSVRNX21pcHNpc2EzMnI2ID0gIiIKK1JVTlRJTUVMSUJJVE1fbWlwc2lzYTMycjZlbCA9ICIiCitSVU5USU1FTElCSVRNX21pcHNpc2E2NHI2ID0gIiIKK1JVTlRJTUVMSUJJVE1fbWlwc2lzYTY0cjZlbCA9ICIiCiBSVU5USU1FTElCSVRNX25pb3MyID0gIiIKIFJVTlRJTUVMSUJJVE1fbWljcm9ibGF6ZSA9ICIiCiAKQEAgLTczLDkgKzc5LDM5IEBACiAJaWYgWyAiJHtUQVJHRVRfVkVORE9SX01VTFRJTElCX09SSUdJTkFMfSIgIT0gIiIgLWEgIiR7VEFSR0VUX1ZFTkRPUn0iICE9ICIke1RBUkdFVF9WRU5ET1JfTVVMVElMSUJfT1JJR0lOQUx9IiBdOyB0aGVuCiAJCWxuIC1zICR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1JfTVVMVElMSUJfT1JJR0lOQUx9LSR7VEFSR0VUX09TfQogCWZpCisKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKIAlpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LWdudXNwZSIgXTsgdGhlbgogCQlsbiAtcyAke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS1saW51eAogCWZpCisKKwlpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LWdudW4zMiIgXTsgdGhlbgorCQlpZiBbICIke01VTFRJTElCU30iICE9ICIiIF07IHRoZW4KKwkJCW1rZGlyICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9LXBva3ltbGxpYjY0LWxpbnV4CisJCQlsbiAtcyAuLi8ke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9LXBva3ltbGxpYjY0LWxpbnV4LzMyCisJCWVsc2UKKwkJCWxuIC1zICR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LWxpbnV4CisJCWZpCisJZmkKKwlpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LWdudXgzMiIgXTsgdGhlbgorCQlpZiBbICIke01VTFRJTElCU30iICE9ICIiIF07IHRoZW4KKwkJCW1rZGlyICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9LXBva3ktbGludXgKKwkJCWxuIC1zIC4uLyR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0tcG9reS1saW51eC94MzIKKwkJZWxzZQorCQkJbG4gLXMgJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tbGludXgKKwkJZmkKKwlmaQorCisJaWYgWyAiJHtUQ0xJQkN9IiAhPSAiZ2xpYmMiIF07IHRoZW4KKwkJY2FzZSAiJHtUQVJHRVRfT1N9IiBpbgorCQkJImxpbnV4LW11c2wiIHwgImxpbnV4LXVjbGliYyIgfCAibGludXgtKnNwZSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgiOzsKKwkJCSJsaW51eC1tdXNsZWFiaSIgfCAibGludXgtdWNsaWJjZWFiaSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgtZ251ZWFiaSI7OworCQkJKikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eCI7OworCQllc2FjCisJCWxuIC1zICR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSRleHRyYV90YXJnZXRfb3MKKwlmaQogCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9CiB9CiAKQEAgLTEyMyw3MyArMTU5LDk4IEBACiAiCiAKIEZJTEVTX2xpYmcyYyA9ICIke3RhcmdldF9saWJkaXJ9L2xpYmcyYy5zby4qIgorU1VNTUFSWV9saWJnMmMgPSAiQ29tcGFuaW9uIHJ1bnRpbWUgbGlicmFyeSBmb3IgZzc3IgogRklMRVNfbGliZzJjLWRldiA9ICJcCiAgICAgJHtsaWJkaXJ9L2xpYmcyYy5zbyBcCiAgICAgJHtsaWJkaXJ9L2xpYmcyYy5hIFwKICAgICAke2xpYmRpcn0vbGliZnJ0YmVnaW4uYSBcCiAiCitTVU1NQVJZX2xpYmcyYy1kZXYgPSAiQ29tcGFuaW9uIHJ1bnRpbWUgbGlicmFyeSBmb3IgZzc3IC0gZGV2ZWxvcG1lbnQgZmlsZXMiCiAKIEZJTEVTX2xpYnN0ZGMrKyA9ICIke2xpYmRpcn0vbGlic3RkYysrLnNvLioiCitTVU1NQVJZX2xpYnN0ZGMrKyA9ICJHTlUgc3RhbmRhcmQgQysrIGxpYnJhcnkiCiBGSUxFU19saWJzdGRjKystZGV2ID0gIlwKICAgICAke2luY2x1ZGVkaXJ9L2MrKy8gXAogICAgICR7bGliZGlyfS9saWJzdGRjKysuc28gXAogICAgICR7bGliZGlyfS9saWJzdGRjKysqLmxhIFwKICAgICAke2xpYmRpcn0vbGlic3VwYysrLmxhIFwKICIKK1NVTU1BUllfbGlic3RkYysrLWRldiA9ICJHTlUgc3RhbmRhcmQgQysrIGxpYnJhcnkgLSBkZXZlbG9wbWVudCBmaWxlcyIKIEZJTEVTX2xpYnN0ZGMrKy1zdGF0aWNkZXYgPSAiXAogICAgICR7bGliZGlyfS9saWJzdGRjKysqLmEgXAogICAgICR7bGliZGlyfS9saWJzdXBjKysuYSBcCiAiCitTVU1NQVJZX2xpYnN0ZGMrKy1zdGF0aWNkZXYgPSAiR05VIHN0YW5kYXJkIEMrKyBsaWJyYXJ5IC0gc3RhdGljIGRldmVsb3BtZW50IGZpbGVzIgogCiBGSUxFU19saWJzdGRjKystcHJlY29tcGlsZS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9jKysvJHtUQVJHRVRfU1lTfS9iaXRzLyouZ2NoIgorU1VNTUFSWV9saWJzdGRjKystcHJlY29tcGlsZS1kZXYgPSAiR05VIHN0YW5kYXJkIEMrKyBsaWJyYXJ5IC0gcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzIgogCiBGSUxFU19saWJzc3AgPSAiJHtsaWJkaXJ9L2xpYnNzcC5zby4qIgorU1VNTUFSWV9saWJzc3AgPSAiR05VIHN0YWNrIHNtYXNoaW5nIHByb3RlY3Rpb24gbGlicmFyeSIKIEZJTEVTX2xpYnNzcC1kZXYgPSAiXAogICAgICR7bGliZGlyfS9saWJzc3AqLnNvIFwKICAgICAke2xpYmRpcn0vbGlic3NwKl9ub25zaGFyZWQuYSBcCiAgICAgJHtsaWJkaXJ9L2xpYnNzcCoubGEgXAogICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvc3NwIFwKICIKK1NVTU1BUllfbGlic3NwLWRldiA9ICJHTlUgc3RhY2sgc21hc2hpbmcgcHJvdGVjdGlvbiBsaWJyYXJ5IC0gZGV2ZWxvcG1lbnQgZmlsZXMiCiBGSUxFU19saWJzc3Atc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJzc3AqLmEiCitTVU1NQVJZX2xpYnNzcC1zdGF0aWNkZXYgPSAiR05VIHN0YWNrIHNtYXNoaW5nIHByb3RlY3Rpb24gbGlicmFyeSAtIHN0YXRpYyBkZXZlbG9wbWVudCBmaWxlcyIKIAogRklMRVNfbGlicXVhZG1hdGggPSAiJHtsaWJkaXJ9L2xpYnF1YWRtYXRoKi5zby4qIgorU1VNTUFSWV9saWJxdWFkbWF0aCA9ICJHTlUgcXVhZC1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IgogRklMRVNfbGlicXVhZG1hdGgtZGV2ID0gIlwKICAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3F1YWRtYXRoKiBcCiAgICAgJHtsaWJkaXJ9L2xpYnF1YWRtYXRoKi5zbyBcCiAgICAgJHtsaWJkaXJ9L2xpYnF1YWRtYXRoLmxhIFwKICIKK1NVTU1BUllfbGlicXVhZG1hdGgtZGV2ID0gIkdOVSBxdWFkLXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgLSBkZXZlbG9wbWVudCBmaWxlcyIKIEZJTEVTX2xpYnF1YWRtYXRoLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlicXVhZG1hdGguYSIKK1NVTU1BUllfbGlicXVhZG1hdGgtc3RhdGljZGV2ID0gIkdOVSBxdWFkLXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgLSBzdGF0aWMgZGV2ZWxvcG1lbnQgZmlsZXMiCiAKKyMgTk9URTogbXVkZmxhcCBoYXMgYmVlbiByZW1vdmVkIGFzIG9mIGdjYyA0LjkgYW5kIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkgdGhlIGFkZHJlc3Mgc2FuaXRpc2VyCiBGSUxFU19saWJtdWRmbGFwID0gIiR7bGliZGlyfS9saWJtdWRmbGFwKi5zby4qIgorU1VNTUFSWV9saWJtdWRmbGFwID0gIlBvaW50ZXIgZGVidWdnaW5nIGxpYnJhcnkgZm9yIGdjYyIKIEZJTEVTX2xpYm11ZGZsYXAtZGV2ID0gIlwKICAgICAke2xpYmRpcn0vbGlibXVkZmxhcCouc28gXAogICAgICR7bGliZGlyfS9saWJtdWRmbGFwLmxhIFwKICIKK1NVTU1BUllfbGlibXVkZmxhcC1kZXYgPSAiUG9pbnRlciBkZWJ1Z2dpbmcgbGlicmFyeSBmb3IgZ2NjIC0gZGV2ZWxvcG1lbnQgZmlsZXMiCiBGSUxFU19saWJtdWRmbGFwLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXVkZmxhcC5hIgorU1VNTUFSWV9saWJtdWRmbGFwLXN0YXRpY2RldiA9ICJQb2ludGVyIGRlYnVnZ2luZyBsaWJyYXJ5IGZvciBnY2MgLSBzdGF0aWMgZGV2ZWxvcG1lbnQgZmlsZXMiCiAKIEZJTEVTX2xpYmdvbXAgPSAiJHtsaWJkaXJ9L2xpYmdvbXAqJHtTT0xJQlN9IgorU1VNTUFSWV9saWJnb21wID0gIkdOVSBPcGVuTVAgcGFyYWxsZWwgcHJvZ3JhbW1pbmcgbGlicmFyeSIKIEZJTEVTX2xpYmdvbXAtZGV2ID0gIlwKICAgICAke2xpYmRpcn0vbGliZ29tcCoke1NPTElCU0RFVn0gXAogICAgICR7bGliZGlyfS9saWJnb21wKi5sYSBcCiAgICAgJHtsaWJkaXJ9L2xpYmdvbXAuc3BlYyBcCiAgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9vbXAuaCBcCiAiCitTVU1NQVJZX2xpYmdvbXAtZGV2ID0gIkdOVSBPcGVuTVAgcGFyYWxsZWwgcHJvZ3JhbW1pbmcgbGlicmFyeSAtIGRldmVsb3BtZW50IGZpbGVzIgogRklMRVNfbGliZ29tcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmdvbXAqLmEiCitTVU1NQVJZX2xpYmdvbXAtc3RhdGljZGV2ID0gIkdOVSBPcGVuTVAgcGFyYWxsZWwgcHJvZ3JhbW1pbmcgbGlicmFyeSAtIHN0YXRpYyBkZXZlbG9wbWVudCBmaWxlcyIKIAogRklMRVNfbGliYXRvbWljID0gIiR7bGliZGlyfS9saWJhdG9taWMuc28uKiIKK1NVTU1BUllfbGliYXRvbWljID0gIkdOVSBDKysxMSBhdG9taWNzIHN1cHBvcnQgbGlicmFyeSIKIEZJTEVTX2xpYmF0b21pYy1kZXYgPSAiXAogICAgICR7bGliZGlyfS9saWJhdG9taWMuc28gXAogICAgICR7bGliZGlyfS9saWJhdG9taWMubGEgXAogIgorU1VNTUFSWV9saWJhdG9taWMtZGV2ID0gIkdOVSBDKysxMSBhdG9taWNzIHN1cHBvcnQgbGlicmFyeSAtIGRldmVsb3BtZW50IGZpbGVzIgogRklMRVNfbGliYXRvbWljLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliYXRvbWljLmEiCitTVU1NQVJZX2xpYmF0b21pYy1zdGF0aWNkZXYgPSAiR05VIEMrKzExIGF0b21pY3Mgc3VwcG9ydCBsaWJyYXJ5IC0gc3RhdGljIGRldmVsb3BtZW50IGZpbGVzIgogCiBGSUxFU19saWJpdG0gPSAiJHtsaWJkaXJ9L2xpYml0bS5zby4qIgorU1VNTUFSWV9saWJpdG0gPSAiR05VIHRyYW5zYWN0aW9uYWwgbWVtb3J5IHN1cHBvcnQgbGlicmFyeSIKIEZJTEVTX2xpYml0bS1kZXYgPSAiXAogICAgICR7bGliZGlyfS9saWJpdG0uc28gXAogICAgICR7bGliZGlyfS9saWJpdG0ubGEgXAogICAgICR7bGliZGlyfS9saWJpdG0uc3BlYyBcCiAiCitTVU1NQVJZX2xpYml0bS1kZXYgPSAiR05VIHRyYW5zYWN0aW9uYWwgbWVtb3J5IHN1cHBvcnQgbGlicmFyeSAtIGRldmVsb3BtZW50IGZpbGVzIgogRklMRVNfbGliaXRtLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliaXRtLmEiCitTVU1NQVJZX2xpYml0bS1zdGF0aWNkZXYgPSAiR05VIHRyYW5zYWN0aW9uYWwgbWVtb3J5IHN1cHBvcnQgbGlicmFyeSAtIHN0YXRpYyBkZXZlbG9wbWVudCBmaWxlcyIKIAogZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgogZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTdkNjkxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGdjYy1ydW50aW1lLmluYwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMy5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV82LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjMuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV82LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYwppbmRleCA2MDkxYTBiLi5kZjRlMjk3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jCkBAIC01MCw3ICs1MCw3IEBACiAKIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCiBBTExPV19FTVBUWV8ke1BOfSA9ICIxIgotREVQRU5EUyA9ICJnY2MtcnVudGltZSIKK0RFUEVORFMgPSAiZ2NjLXJ1bnRpbWUgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDFmNjY2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGdjYy1zYW5pdGl6ZXJzLmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNi4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNi4yLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODkwZmEzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKLXJlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKLQotRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV82LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNi4yLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtdGFyZ2V0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCmluZGV4IGI4ZGFiZTUuLmY0MzZmYTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCkBAIC00LDcgKzQsNiBAQAogRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKICAgICAtLXdpdGgtc3lzcm9vdD0vIFwKICAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAotICAgIC0td2l0aC1uYXRpdmUtc3lzdGVtLWhlYWRlci1kaXI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0gXAogICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCiAiCiAKQEAgLTQzLDYgKzQyLDEwIEBACiAgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIFwKICIKIElOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCitSUkVDT01NRU5EU18ke1BOfSArPSAiXAorICAgIGxpYnNzcCBcCisgICAgbGlic3NwLWRldiBcCisiCiAKIEZJTEVTXyR7UE59LWRldiA9ICJcCiAgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlNERVZ9IFwKQEAgLTcwLDEwICs3MywxOSBAQAogICAgICR7YmluZGlyfS9nNzcgXAogICAgICR7YmluZGlyfS9mNzcgXAogIgorUlJFQ09NTUVORFNfZzc3ID0gIlwKKyAgICBsaWJnMmMgXAorICAgIGxpYmcyYy1kZXYgXAorIgorCiBGSUxFU19nZm9ydHJhbiA9ICJcCiAgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBcCiAgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2Y5NTEgXAogIgorUlJFQ09NTUVORFNfZ2ZvcnRyYW4gPSAiXAorICAgIGxpYnF1YWRtYXRoIFwKKyAgICBsaWJxdWFkbWF0aC1kZXYgXAorIgogRklMRVNfZ2ZvcnRyYW4tc3ltbGlua3MgPSAiXAogICAgICR7YmluZGlyfS9nZm9ydHJhbiBcCiAgICAgJHtiaW5kaXJ9L2Y5NSIKQEAgLTk5LDYgKzExMSwxMiBAQAogICAgICR7YmluZGlyfS9jKysgXAogICAgICR7YmluZGlyfS9nKysgXAogIgorUlJFQ09NTUVORFNfZysrID0gIlwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgIGxpYmF0b21pYyBcCisgICAgbGliYXRvbWljLWRldiBcCisiCiAKIEZJTEVTXyR7UE59LWRvYyA9ICJcCiAgICAgJHtpbmZvZGlyfSBcCkBAIC0yMDUsNiArMjIzLDQgQEAKICMgYW5kIGJ1aWxkcyB0cmFjayBmaWxlIGRlcGVuZGVuY2llcyAoZS5nLiBwZXJsIGFuZCBpdHMgbWFrZWRlcGVuZHMgY29kZSkuCiAjIEZvciBkZXRlcm1pbmlzbSB3ZSBkb24ndCBpbnN0YWxsIHRoaXMgZXZlciBhbmQgcmVseSBvbiB0aGUgY29weSBmcm9tIGdjYy1jcm9zcy4KICMgW1lPQ1RPICM3Mjg3XQotc3lzcm9vdF9zdGFnZV9kaXJzX2FwcGVuZCAoKSB7Ci0Jcm0gLXJmICR0byR7bGliZGlyfS9nY2MKLX0KK1NZU1JPT1RfRElSU19CTEFDS0xJU1QgKz0gIiR7bGliZGlyfS9nY2MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkYzYxMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGdjYy10YXJnZXQuaW5jCi0KLSMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwNDk3LwotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCi0KLSNTWVNURU1IRUFERVJTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfaW5jbHVkZWRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0iCi0jU1lTVEVNTElCU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2Jhc2VfbGliZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfS8iCi0jU1lTVEVNTElCUzFfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9saWJkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9LyIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjMuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNi4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMy5iYgpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY182LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMKaW5kZXggZGFlMDdlOS4uOGExM2Y1NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMKQEAgLTEsNiArMSw2IEBACiBCUE4gPSAibGliZ2NjIgogCi1yZXF1aXJlIGdjYy1zaGFyZWQtc291cmNlLmluYworcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKIAogSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKIApAQCAtMTExLDkgKzExMSwxNSBAQAogICAgICAgICBpZiBub3QgdHVuZV9iaXRuZXNzOgogICAgICAgICAgICAgdHVuZV9iaXRuZXNzID0gJzMyJyAjIC9saWIgPT4gMzJiaXQgbGliCiAKKyAgICAgICAgdHVuZV9hYmlleHRlbnNpb24gPSB0dW5lX3BhcmFtZXRlcnNbJ2FiaWV4dGVuc2lvbiddCisgICAgICAgIGlmIHR1bmVfYWJpZXh0ZW5zaW9uOgorICAgICAgICAgICAgbGliY2V4dGVuc2lvbiA9ICctZ251JyArIHR1bmVfYWJpZXh0ZW5zaW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaWJjZXh0ZW5zaW9uID0gJycKKwogICAgICAgICBzcmMgPSAnLi4vLi4vLi4vJyArIHR1bmVfYmFzZWxpYiArICcvJyArIFwKICAgICAgICAgICAgIHR1bmVfYXJjaCArIGQuZ2V0VmFyKCdUQVJHRVRfVkVORE9SJywgVHJ1ZSkgKyAnbWwnICsgbWwgKyBcCi0gICAgICAgICAgICAnLScgKyBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nCisgICAgICAgICAgICAnLScgKyBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgKyBsaWJjZXh0ZW5zaW9uICsgICcvJyArIGJpbnYgKyAnLycKIAogICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIFwKICAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nICsgdHVuZV9iaXRuZXNzCkBAIC0xMjMsMTUgKzEyOSwxOCBAQAogICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKIH0KIAotZGVmIGdldF9vcmlnaW5hbF92ZW5kb3JvcyhkKToKLSAgICB2ZW5kb3JvcyA9IGQuZXhwYW5kKCcke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfScpCitkZWYgZ2V0X29yaWdpbmFsX29zKGQpOgorICAgIHZlbmRvcm9zID0gZC5leHBhbmQoJyR7VEFSR0VUX0FSQ0h9JHtPUklHX1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfScpCiAgICAgZm9yIHN1ZmZpeCBpbiBbZC5nZXRWYXIoJ0FCSUVYVEVOU0lPTicsIFRydWUpLCBkLmdldFZhcignTElCQ0VYVEVOU0lPTicsIFRydWUpXToKICAgICAgICAgaWYgc3VmZml4IGFuZCB2ZW5kb3Jvcy5lbmRzd2l0aChzdWZmaXgpOgogICAgICAgICAgICAgdmVuZG9yb3MgPSB2ZW5kb3Jvc1s6LWxlbihzdWZmaXgpXQorICAgICMgQXJtIG11c3QgdXNlIGxpbnV4LWdudWVhYmkgbm90IGxpbnV4IGFzIG9ubHkgdGhlIGZvcm1lciBpcyBhY2NlcHRlZCBieSBnY2MKKyAgICBpZiB2ZW5kb3Jvcy5zdGFydHN3aXRoKCJhcm0tIikgYW5kIG5vdCB2ZW5kb3Jvcy5lbmRzd2l0aCgiLWdudWVhYmkiKToKKyAgICAgICAgdmVuZG9yb3MgPSB2ZW5kb3JvcyArICItZ251ZWFiaSIKICAgICByZXR1cm4gdmVuZG9yb3MKIAotT1JJR19UQVJHRVRfVkVORE9ST1MgOj0gIiR7QGdldF9vcmlnaW5hbF92ZW5kb3JvcyhkKX0iCi1CQVNFVEFSR0VUX1NZUyA9ICIke1RBUkdFVF9BUkNIfSR7T1JJR19UQVJHRVRfVkVORE9ST1N9IgorT1JJR19UQVJHRVRfVkVORE9SIDo9ICIke1RBUkdFVF9WRU5ET1J9IgorQkFTRVRBUkdFVF9TWVMgPSAiJHtAZ2V0X29yaWdpbmFsX29zKGQpfSIKIAogYWRkdGFzayBleHRyYV9zeW1saW5rcyBhZnRlciBkb19tdWx0aWxpYl9pbnN0YWxsIGJlZm9yZSBkb19wYWNrYWdlIGRvX3BvcHVsYXRlX3N5c3Jvb3QKIGZha2Vyb290IHB5dGhvbiBkb19leHRyYV9zeW1saW5rcygpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYwppbmRleCA1OWU4YTYyLi42ODdhOGEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jCkBAIC01LDcgKzUsNyBAQAogTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKIAogU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgotU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfU1lTfSIKIFBBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKIAogUEFDS0FHRVMgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWYyNTNmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGxpYmdjYy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNi4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNi4yLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYwppbmRleCA2ODM3Nzg2Li40NzcwMzk0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKQEAgLTIsNiArMiwxNyBAQAogCiBERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysiCiAKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJaWYgWyAiJHtUQ0xJQkN9IiAhPSAiZ2xpYmMiIF07IHRoZW4KKwkJY2FzZSAiJHtUQVJHRVRfT1N9IiBpbgorCQkJImxpbnV4LW11c2wiIHwgImxpbnV4LXVjbGliYyIgfCAibGludXgtKnNwZSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgiOzsKKwkJCSJsaW51eC1tdXNsZWFiaSIgfCAibGludXgtdWNsaWJjZWFiaSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgtZ251ZWFiaSI7OworCQkJKikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eCI7OworCQllc2FjCisJCWxuIC1zICR7VEFSR0VUX1NZU30gJHtEfSR7bGliZGlyfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJGV4dHJhX3RhcmdldF9vcworCWZpCit9CisKIFBBQ0tBR0VTID0gIlwKICAgICAke1BOfSBcCiAgICAgJHtQTn0tZGV2IFwKQEAgLTE5LDYgKzMwLDcgQEAKICAgICAke2Jhc2VfbGliZGlyfS9saWJnY2MqLnNvIFwKICAgICAke0BiYXNlX2NvbmRpdGlvbmFsKCdCQVNFVEFSR0VUX1NZUycsICcke1RBUkdFVF9TWVN9JywgJycsICcke2xpYmRpcn0vJHtCQVNFVEFSR0VUX1NZU30nLCBkKX0gXAogICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0qIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9KiBcCiAiCiAKIExJQkdDQ0JVSUxEVFJFRU5BTUUgPSAiZ2NjLWJ1aWxkLWludGVybmFsLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTE1MmYyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYwotcmVxdWlyZSBsaWJnY2MuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY182LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzYuMi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWRkOGI0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGxpYmdmb3J0cmFuLmluYwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl82LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl82LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjEwLjEuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuMTEuaW5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy4xMC4xLmluYwpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuMTEuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCmluZGV4IDBkMjhlZTQuLjA5MjMxNDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCkBAIC0yLDcgKzIsNyBAQAogSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYi8iCiBMSUNFTlNFID0gIkdQTHYzKyIKIFNFQ1RJT04gPSAiZGV2ZWwiCi1ERVBFTkRTID0gImV4cGF0IHpsaWIgbmN1cnNlcyAke0xUVE5HVVNUfSIKK0RFUEVORFMgPSAiZXhwYXQgemxpYiBuY3Vyc2VzIHZpcnR1YWwvbGliaWNvbnYgJHtMVFROR1VTVH0iCiAKIExUVE5HVVNUID0gImx0dG5nLXVzdCIKIExUVE5HVVNUX2FhcmNoNjQgPSAiIgpAQCAtMTYsOCArMTYsNiBAQAogTFRUTkdVU1Rfc2g0ID0gIiIKIExUVE5HVVNUX2xpYmMtbXVzbCA9ICIiCiAKLUlOQ19QUiA9ICJyMCIKLQogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAogCQlmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IFwKIAkJZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCkBAIC0yNSw4ICsyMywyNSBAQAogCiBpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCiAKLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGIvZ2RiLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIgorU1JDUkVWID0gIjFhOTgyYjY4OWNlNGUyMDUyM2JkZjY5ZTQ3ZmRkNTc0YzRmNjM5MzQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2JpbnV0aWxzLWdkYi5naXQ7YnJhbmNoPWdkYi03LjExLWJyYW5jaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLW1vZGVfdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtcHBjLXB0cmFjZS1EZWZpbmUtcHRfcmVncy11YXBpX3B0X3JlZ3Mtb24tR0xJQkMtc3lzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1Eb250LWRpc2FibGUtbGlicmVhZGxpbmUuYS13aGVuLXVzaW5nLWRpc2FibGUtc3RhdGljLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1Vc2UtZXhvcnRlZC1kZWZpbml0aW9ucy1vZi1TSUdSVE1JTi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1yZXNvbHZlLXJlc3RyaWN0LWtleXdvcmQtY29uZmxpY3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1hdnhfbXB4LnBhdGNoIFwKKyIKKworVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiZ2RiXC0oP1A8cHZlcj4uKylcLXJlbGVhc2UiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCiAKIEIgPSAiJHtXT1JLRElSfS9idWlsZC0ke1RBUkdFVF9TWVN9IgogCkBAIC00MCwxMiArNTUsMTUgQEAKICAgICAgICAgICAgICAgICAke0dEQlBST1BSRUZJWH0gJHtFWFBBVH0gXAogICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbXVsdGlhcmNoJywgJy0tZW5hYmxlLTY0LWJpdC1iZmQnLCAnJywgZCl9IFwKICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAotICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1nYXMgLS1kaXNhYmxlLWJpbnV0aWxzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGQgLS1kaXNhYmxlLWdvbGQgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ncHJvZiBcCisiCiAKIFBBQ0tBR0VDT05GSUcgPz89ICJyZWFkbGluZSIKICMgVXNlIC0td2l0aG91dC1zeXN0ZW0tcmVhZGxpbmUgdG8gY29tcGlsZSB3aXRoIHJlYWRsaW5lIDUuCiBQQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtc3lzdGVtLXJlYWRsaW5lLC0td2l0aG91dC1zeXN0ZW0tcmVhZGxpbmUscmVhZGxpbmUiCi1QQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1dPUktESVJ9L3B5dGhvbiwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbixweXRob24gcHl0aG9uLWNvZGVjcyIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLXdpdGgtcHl0aG9uPSR7V09SS0RJUn0vcHl0aG9uLC0td2l0aG91dC1weXRob24scHl0aG9uMyxweXRob24zIHB5dGhvbjMtY29kZWNzIgogUEFDS0FHRUNPTkZJR1tiYWJlbHRyYWNlXSA9ICItLXdpdGgtYmFiZWx0cmFjZSwtLXdpdGhvdXQtYmFiZWx0cmFjZSxiYWJlbHRyYWNlIgogCiBHREJQUk9QUkVGSVggPSAiLS1wcm9ncmFtLXByZWZpeD0nJyIKQEAgLTY5LDQgKzg3LDMgQEAKIFJSRUNPTU1FTkRTX2dkYl9hcHBlbmRfbGludXgtZ251ZWFiaSA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKIFJSRUNPTU1FTkRTX2dkYnNlcnZlcl9hcHBlbmRfbGludXggPSAiIGdsaWJjLXRocmVhZC1kYiAiCiBSUkVDT01NRU5EU19nZGJzZXJ2ZXJfYXBwZW5kX2xpbnV4LWdudWVhYmkgPSAiIGdsaWJjLXRocmVhZC1kYiAiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jCmluZGV4IDZlNDJhZjEuLmU1MzA4MWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYwpAQCAtMSw1ICsxLDUgQEAKIGluaGVyaXQgY3Jvc3MtY2FuYWRpYW4KLWluaGVyaXQgcHl0aG9uLWRpcgoraW5oZXJpdCBweXRob24zLWRpcgogCiBTVU1NQVJZID0gIkdOVSBkZWJ1Z2dlciAoY3Jvc3MtY2FuYWRpYW4gZ2RiIGZvciAke1RBUkdFVF9BUkNIfSB0YXJnZXQpIgogUE4gPSAiZ2RiLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCkBAIC0xMiw5ICsxMiw5IEBACiAKICMgT3ZlcnJpZGVzIFBBQ0tBR0VDT05GSUcgdmFyaWFibGVzIGluIGdkYi1jb21tb24uaW5jCiBQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIHJlYWRsaW5lIgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24sLS13aXRob3V0LXB5dGhvbixuYXRpdmVzZGstcHl0aG9uLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlc2RrLXB5dGhvbi1jb3JlIG5hdGl2ZXNkay1weXRob24tbGFuZyBuYXRpdmVzZGstcHl0aG9uLXJlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVzZGstcHl0aG9uLWNvZGVjcyBuYXRpdmVzZGstcHl0aG9uLW5ldGNsaWVudCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLXdpdGgtcHl0aG9uPSR7V09SS0RJUn0vcHl0aG9uLC0td2l0aG91dC1weXRob24sbmF0aXZlc2RrLXB5dGhvbjMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVzZGstcHl0aG9uMy1jb3JlIG5hdGl2ZXNkay1weXRob24zLWxhbmcgbmF0aXZlc2RrLXB5dGhvbjMtcmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1weXRob24zLWNvZGVjcyBuYXRpdmVzZGstcHl0aG9uMy1uZXRjbGllbnQiCiBQQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtc3lzdGVtLXJlYWRsaW5lLC0td2l0aG91dC1zeXN0ZW0tcmVhZGxpbmUsbmF0aXZlc2RrLXJlYWRsaW5lIgogCiBTU1RBVEVfRFVQV0hJVEVMSVNUICs9ICIke1NUQUdJTkdfREFUQURJUn0vZ2RiIgpAQCAtMjMsOCArMjMsOCBAQAogY2F0ID4gJHtXT1JLRElSfS9weXRob24gPDwgRU9GCiAjISAvYmluL3NoCiBjYXNlICJcJDIiIGluCi0gICAgICAgIC0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfS8iIDs7Ci0gICAgICAgIC0tbGRmbGFncykgZWNobyAiLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIC1XbCwtcnBhdGgsJHtsaWJkaXJ9Ly4uIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iIDs7CisgICAgICAgIC0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSR7UFlUSE9OX0FCSX0vIiA7OworICAgICAgICAtLWxkZmxhZ3MpIGVjaG8gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfS8uLiAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JHtQWVRIT05fQUJJfSIgOzsKICAgICAgICAgLS1leGVjLXByZWZpeCkgZWNobyAiJHtleGVjX3ByZWZpeH0iIDs7CiAgICAgICAgICopIGV4aXQgMSA7OwogZXNhYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuXzcuMTAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjExLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy4xMC4xLmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy4xMS5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy5pbmMKaW5kZXggMjQ2OGQyMy4uNWZhN2MzMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jCkBAIC0yLDE2ICsyLDE0IEBACiAKIERFUEVORFMgPSAiZXhwYXQtbmF0aXZlIG5jdXJzZXMtbmF0aXZlIgogCi1pbmhlcml0IHB5dGhvbm5hdGl2ZQoraW5oZXJpdCBweXRob24zbmF0aXZlCiAKICMgT3ZlcnJpZGVzIFBBQ0tBR0VDT05GSUcgdmFyaWFibGVzIGluIGdkYi1jb21tb24uaW5jCiBQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIHJlYWRsaW5lIgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uLC0td2l0aG91dC1weXRob24scHl0aG9uLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLXdpdGgtcHl0aG9uPSR7UFlUSE9OfSwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbjMtbmF0aXZlIgogUEFDS0FHRUNPTkZJR1tyZWFkbGluZV0gPSAiLS13aXRoLXN5c3RlbS1yZWFkbGluZSwtLXdpdGhvdXQtc3lzdGVtLXJlYWRsaW5lLHJlYWRsaW5lLW5hdGl2ZSIKIAogZG9fY29tcGlsZV9wcmVwZW5kKCkgewotICAgIGV4cG9ydCBCVUlMRF9TWVM9IiR7QlVJTERfU1lTfSIKLSAgICBleHBvcnQgSE9TVF9TWVM9IiR7SE9TVF9TWVN9IgogICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0iJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgogICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0iJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuMTAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjEwLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOTVjZmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuMTAuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotcmVxdWlyZSBnZGItY3Jvc3MuaW5jCi1yZXF1aXJlIGdkYi0ke1BWfS5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGNmMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuMTEuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIGdkYi1jcm9zcy5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi5pbmMKaW5kZXggZDljODY0ZC4uNTIxMTlhMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jCkBAIC0yLDE0ICsyLDYgQEAKIAogaW5oZXJpdCBnZXR0ZXh0CiAKLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtZXhwb3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItbW9kZV90LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9mb3JjZS1yZWFkbGluZS1zdGF0aWMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtbWlwcy1saW51eC1uYXQtRGVmaW5lLV9BQklPMzItaWYtbm90LWRlZmluZWQucGF0Y2ggXAotICAgICAgICAgICAiCiAjTERGTEFHU19hcHBlbmQgPSAiIC1zIgogI2V4cG9ydCBDRkxBR1NfYXBwZW5kPSIgLUwke1NUQUdJTkdfTElCRElSfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtVXNlLWV4cG9ydGVkLWRlZmluaXRpb25zLW9mLVNJR1JUTUlOLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtVXNlLWV4cG9ydGVkLWRlZmluaXRpb25zLW9mLVNJR1JUTUlOLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjBjMDk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLVVzZS1leHBvcnRlZC1kZWZpbml0aW9ucy1vZi1TSUdSVE1JTi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLUZyb20gMmY5N2U4OWU5ZTRlNTc5N2QwZDk3M2UxZDA1YzFmNDRjNDZiNDkxMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDUgSnVuIDIwMTUgMjA6MjE6MzggLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gVXNlIGV4b3J0ZWQgZGVmaW5pdGlvbnMgb2YgU0lHUlRNSU4KLQotRGVmaW5lIFdfU1RPUENPREUgaWYgbm90IGRlZmluZWQgYWxyZWFkeQotCi1fX1NJR1JUTUlOIGlzIGludGVybmFsIHRvIGdsaWJjIGFuZCBvdGhlciBsaWJjcyBlLmcuIG11c2wKLW1heSBub3QgcHJvdmlkZSB0aGVtCi0KLUZpeGVzCi1odHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMzAxMgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotCi0gZ2RiL2xpbnV4LW5hdC5jICAgICB8IDQgKystLQotIGdkYi9uYXQvbGludXgtbmF0LmggfCA0ICsrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dkYi9saW51eC1uYXQuYyBiL2dkYi9saW51eC1uYXQuYwotaW5kZXggMzk2YzMwYy4uNTAzMjBlZSAxMDA2NDQKLS0tLSBhL2dkYi9saW51eC1uYXQuYwotKysrIGIvZ2RiL2xpbnV4LW5hdC5jCi1AQCAtNDg1NiwxMCArNDg1NiwxMCBAQCBsaW5fdGhyZWFkX2dldF90aHJlYWRfc2lnbmFscyAoc2lnc2V0X3QgKnNldCkKLSAgICAgIGZvcnR1bmF0ZWx5IHRoZXkgZG9uJ3QgY2hhbmdlISAgKi8KLSAKLSAgIGlmIChyZXN0YXJ0ID09IDApCi0tICAgIHJlc3RhcnQgPSBfX1NJR1JUTUlOOwotKyAgICByZXN0YXJ0ID0gU0lHUlRNSU47Ci0gCi0gICBpZiAoY2FuY2VsID09IDApCi0tICAgIGNhbmNlbCA9IF9fU0lHUlRNSU4gKyAxOwotKyAgICBjYW5jZWwgPSBTSUdSVE1JTiArIDE7Ci0gCi0gICBzaWdhZGRzZXQgKHNldCwgcmVzdGFydCk7Ci0gICBzaWdhZGRzZXQgKHNldCwgY2FuY2VsKTsKLWRpZmYgLS1naXQgYS9nZGIvbmF0L2xpbnV4LW5hdC5oIGIvZ2RiL25hdC9saW51eC1uYXQuaAotaW5kZXggODNhNmQ5MS4uZWZiZTBmZCAxMDA2NDQKLS0tLSBhL2dkYi9uYXQvbGludXgtbmF0LmgKLSsrKyBiL2dkYi9uYXQvbGludXgtbmF0LmgKLUBAIC0yNSw0ICsyNSw4IEBACi0gICAgaW5zdGVhZCBTSUdUUkFQIHdpdGggYml0IDcgc2V0LiAgKi8KLSAjZGVmaW5lIFNZU0NBTExfU0lHVFJBUCAoU0lHVFJBUCB8IDB4ODApCi0gCi0rI2lmbmRlZiBXX1NUT1BDT0RFCi0rI2RlZmluZSBXX1NUT1BDT0RFKHNpZykgKChzaWcpIDw8IDggfCAweDdmKQotKyNlbmRpZgotKwotICNlbmRpZiAvKiBMSU5VWF9OQVRfSCAqLwotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1tb2RlX3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1tb2RlX3QucGF0Y2gKaW5kZXggYTAyOTJlNC4uMDA0MmMwMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItbW9kZV90LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLW1vZGVfdC5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gYWNiZWU0ZWRhY2I4MGI1ZWVhZmYyNDgwNzEyZmU5OGU1NjQ0Mzk5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gZmRkZDcxNzg5MTU5NjhhY2Y2ODA4MTQ0MTFiOGIzY2IxMzdkMDU4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBUdWUsIDE5IEphbiAyMDE2IDE4OjE4OjUyIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIG1vZGVfdAorU3ViamVjdDogW1BBVENIIDAxLzEwXSBpbmNsdWRlIHN5cy90eXBlcy5oIGZvciBtb2RlX3QKIAogbW9kZV90IGlzIHVzZWQgaW4gdGFyZ2V0LmgsIHNvIHdlIG5lZWQgdG8gaW5jbHVkZSBzeXMvdHlwZXMuaCB0byBnZXQgdGhlCiBkZWZpbnRpb24KQEAgLTE0LDEwICsxNCwxMCBAQAogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQogCiBkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci90YXJnZXQuaCBiL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmgKLWluZGV4IDlhNDA4NjcuLmFhZWNhYjkgMTAwNjQ0CitpbmRleCA1YWYyMDUxLi5mNDJjNTEwIDEwMDY0NAogLS0tIGEvZ2RiL2dkYnNlcnZlci90YXJnZXQuaAogKysrIGIvZ2RiL2dkYnNlcnZlci90YXJnZXQuaAotQEAgLTI3LDYgKzI3LDcgQEAKK0BAIC0yOCw2ICsyOCw3IEBACiAgI2luY2x1ZGUgInRhcmdldC93YWl0c3RhdHVzLmgiCiAgI2luY2x1ZGUgIm1lbS1icmVhay5oIgogICNpbmNsdWRlICJidHJhY2UtY29tbW9uLmgiCkBAIC0yNiw1ICsyNiw1IEBACiAgc3RydWN0IGVtaXRfb3BzOwogIHN0cnVjdCBidWZmZXI7CiAtLSAKLTIuNy4wCisyLjguMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTZjMTguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotRnJvbSAxMmIwNTA2OTUxNDYwYzNjYzM3ZDc3NTQ3OGQwMjRkYjNmOTVlOWQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjoyNzo1NSArMDAwMAotU3ViamVjdDogW1BBVENIIDEvM10gbWFrZSBtYW4gaW5zdGFsbCByZWxhdGl2ZSB0byBERVNURElSCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NpbS9jb21tb24vTWFrZWZpbGUuaW4gYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCi1pbmRleCBkNDlhOTNiLi4yMTIxYzQ2IDEwMDY0NAotLS0tIGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgotKysrIGIvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgotQEAgLTM1LDcgKzM1LDcgQEAgdG9vbGRpciA9ICQobGliZGlyKS8kKHRhcmdldF9hbGlhcykKLSBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLSBkYXRhZGlyID0gQGRhdGFkaXJACi0gbWFuZGlyID0gQG1hbmRpckAKLS1tYW4xZGlyID0gJChtYW5kaXIpL21hbjEKLSttYW4xZGlyID0gJChERVNURElSKSQobWFuZGlyKS9tYW4xCi0gaW5mb2RpciA9IEBpbmZvZGlyQAotIGluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLSAKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtbWlwcy1saW51eC1uYXQtRGVmaW5lLV9BQklPMzItaWYtbm90LWRlZmluZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE3Mzk1Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLUZyb20gZTkyZjg5MzJlZjQ4OGRlMmE1NmRiNDI5OTEzMWNlNmE0ZWIxNzBiZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDIzIE1hciAyMDE2IDA2OjMwOjA5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIG1pcHMtbGludXgtbmF0OiBEZWZpbmUgX0FCSU8zMiBpZiBub3QgZGVmaW5lZAotCi1UaGlzIGhlbHBzIGJ1aWxkaW5nIGdkYiBvbiBtaXBzNjQgb24gbXVzbCwgc2luY2UKLW11c2wgZG9lcyBub3QgcHJvdmlkZSBzZ2lkZWZzLmggdGhpcyBkZWZpbmUgaXMKLW9ubHkgZGVmaW5lZCB3aGVuIEdDQyBpcyB1c2luZyBvMzIgQUJJLCBpbiB0aGF0Ci1jYXNlIGdjYyBlbWl0cyBpdCBhcyBidWlsdC1pbiBkZWZpbmUgYW5kIGhlbmNlCi1pdCB3b3JrcyBvayBmb3IgbWlwczMyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gZ2RiL21pcHMtbGludXgtbmF0LmMgfCA1ICsrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2RiL21pcHMtbGludXgtbmF0LmMgYi9nZGIvbWlwcy1saW51eC1uYXQuYwotaW5kZXggZmQ1YzcwNS4uNzUzZjI5ZCAxMDA2NDQKLS0tLSBhL2dkYi9taXBzLWxpbnV4LW5hdC5jCi0rKysgYi9nZGIvbWlwcy1saW51eC1uYXQuYwotQEAgLTQ2LDYgKzQ2LDExIEBACi0gI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBIDI1Ci0gI2VuZGlmCi0gCi0rLyogbXVzbCBkb2VzIG5vdCBkZWZpbmUgYW5kIHJlbGllcyBvbiBjb21waWxlciBidWlsdC1pbiBtYWNyb3MgZm9yIGl0ICAgKi8KLSsjaWZuZGVmIF9BQklPMzIKLSsjZGVmaW5lIF9BQklPMzIgMQotKyNlbmRpZgotKwotIC8qIEFzc3VtZSB0aGF0IHdlIGhhdmUgUFRSQUNFX0dFVFJFR1MgZXQgYWwuIHN1cHBvcnQuICBJZiB3ZSBkbyBub3QsCi0gICAgd2UnbGwgY2xlYXIgdGhpcyBhbmQgdXNlIFBUUkFDRV9QRUVLVVNFUiBpbnN0ZWFkLiAgKi8KLSBzdGF0aWMgaW50IGhhdmVfcHRyYWNlX3JlZ3NldHMgPSAxOwotLS0gCi0xLjguMy4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZWMzOTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDY3N2I1YjU2MTM1MTQxYzBkMjU5ZTM3MGFhY2QwZTExYzgxMGFhMTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgotRGF0ZTogRnJpLCA1IEZlYiAyMDE2IDE0OjAwOjAwIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0hdIHVzZSA8YXNtL3NnaWRlZnMuaD4KLQotQnVpbGQgZml4IGZvciBNSVBTIHdpdGggbXVzbCBsaWJjCi0KLVRoZSBNSVBTIHNwZWNpZmljIGhlYWRlciA8c2dpZGVmcy5oPiBpcyBwcm92aWRlZCBieSBnbGliYyBhbmQgdWNsaWJjCi1idXQgbm90IGJ5IG11c2wuIFJlZ2FyZGxlc3Mgb2YgdGhlIGxpYmMsIHRoZSBrZXJuZWwgaGVhZGVycyBwcm92aWRlCi08YXNtL3NnaWRlZnMuaD4gd2hpY2ggcHJvdmlkZXMgdGhlIHNhbWUgZGVmaW5pdGlvbnMsIHNvIHVzZSB0aGF0Ci1pbnN0ZWFkLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KLS0tLQotIGdkYi9taXBzLWxpbnV4LW5hdC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ2RiL21pcHMtbGludXgtbmF0LmMgYi9nZGIvbWlwcy1saW51eC1uYXQuYwotaW5kZXggYTM2YmI2My4uZmQ1YzcwNSAxMDA2NDQKLS0tLSBhL2dkYi9taXBzLWxpbnV4LW5hdC5jCi0rKysgYi9nZGIvbWlwcy1saW51eC1uYXQuYwotQEAgLTMxLDcgKzMxLDcgQEAKLSAjaW5jbHVkZSAiZ2RiX3Byb2Nfc2VydmljZS5oIgotICNpbmNsdWRlICJncmVnc2V0LmgiCi0gCi0tI2luY2x1ZGUgPHNnaWRlZnMuaD4KLSsjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KLSAjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgotICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0gCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2NiNDVmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1Gcm9tIDI2MmNjYzRmZGIyYTNkZjBmMTZjNjFhODA3MDQ2OTY0YWU3NzI5YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI5OjIzICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMi8zXSBDaGFuZ2Ugb3JkZXIgb2YgQ0ZMQUdTCi0KLUxldHMgdXMgb3ZlcnJpZGUgV2Vycm9yIGlmIG5lZWQgYmUKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIHwgNCArKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCi1pbmRleCAxZWQyZWM4Li4wY2VmOTViIDEwMDY0NAotLS0tIGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgotKysrIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgotQEAgLTEzMSwxMCArMTMxLDEwIEBAIENGTEFHUyA9IEBDRkxBR1NACi0gQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi0gCi0gIyBJTlRFUk5BTF9DRkxBR1MgaXMgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb3RoZXIgKkNGTEFHUyBtYWNyb3MuCi0tSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAgJHtDRkxBR1N9ICR7R0xPQkFMX0NGTEFHU30gXAotK0lOVEVSTkFMX0NGTEFHU19CQVNFID0gJHtHTE9CQUxfQ0ZMQUdTfSBcCi0gCSR7UFJPRklMRV9DRkxBR1N9ICR7SU5DTFVERV9DRkxBR1N9ICR7Q1BQRkxBR1N9Ci0gSU5URVJOQUxfV0FSTl9DRkxBR1MgPSAgJHtJTlRFUk5BTF9DRkxBR1NfQkFTRX0gJChXQVJOX0NGTEFHUykKLS1JTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAtREdEQlNFUlZFUgotK0lOVEVSTkFMX0NGTEFHUyA9ICAke0lOVEVSTkFMX1dBUk5fQ0ZMQUdTfSAkKFdFUlJPUl9DRkxBR1MpICR7Q0ZMQUdTfSAtREdEQlNFUlZFUgotIAotICMgTERGTEFHUyBpcyBzcGVjaWZpY2FsbHkgcmVzZXJ2ZWQgZm9yIHNldHRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lCi0gIyB3aGVuIHJ1bm5pbmcgbWFrZS4KLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmVkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAzMjI5Y2IwOTAzM2VlYjUwMDNhMDhkOTFmYTlkNDNiZThiYTRjODZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjoyNzo1NSArMDAwMAorU3ViamVjdDogW1BBVENIIDAyLzEwXSBtYWtlIG1hbiBpbnN0YWxsIHJlbGF0aXZlIHRvIERFU1RESVIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzaW0vY29tbW9uL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KK2luZGV4IGEwNWY1MDcuLjhkMGZhNjQgMTAwNjQ0CistLS0gYS9zaW0vY29tbW9uL01ha2VmaWxlLmluCisrKysgYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCitAQCAtMzUsNyArMzUsNyBAQCB0b29sZGlyID0gJChsaWJkaXIpLyQodGFyZ2V0X2FsaWFzKQorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBtYW5kaXIgPSBAbWFuZGlyQAorLW1hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorK21hbjFkaXIgPSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyBpbmZvZGlyID0gQGluZm9kaXJACisgaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorIAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzZTIyYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTIxICswLDAgQEAKLUZyb20gNDA3Y2IxM2NmYjcwNjk3ZjQ1ZGZiNzYxMzA0ZTAwNWUxZWNiZDBlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6MzE6MTIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAzLzNdIEFkZCBzdXBwb3J0IGZvciBSZW5lc2FzIFNIIChzaDQpIGFyY2hpdGVjdHVyZS4KLQotZ2RiICg3LjQtMX5jdnMyMDExMTExNy4yKSBleHBlcmltZW50YWw7IHVyZ2VuY3k9bG93Ci0gLgotICAgKiBBZGQgUmVuZXNhcyBTSCAoc2g0KSBzdXBwb3J0IChDbG9zZXM6ICM1NzYyNDIpCi0gICAgIC0gVGhhbmtzIE5vYnVoaXJvIEl3YW1hdHN1LCBUYWthc2hpIFlvc2hpaS4KLUF1dGhvcjogSGVjdG9yIE9yb24gPHp1bWJpQGRlYmlhbi5vcmc+Ci1CdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzU3NjI0MgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnZGIvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwotIGdkYi9jb25maWd1cmUuaG9zdCAgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gZ2RiL3NoLWxpbnV4LXRkZXAuYyAgICAgICAgICAgICAgICAgIHwgNTE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gZ2RiL3NoLXRkZXAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU0ICsrLS0KLSBnZGIvc2gtdGRlcC5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDkgKysrKwotIGdkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCB8ICAgNSArCi0gZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYyAgICAgICAgIHwgICAzICstCi0gZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMgICAgIHwgICAzICsKLSBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyAgICAgfCAgIDQgKwotIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgICAgICB8ICAgMyArCi0gZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgICAgIHwgICA0ICsKLSAxMSBmaWxlcyBjaGFuZ2VkLCA2MTcgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nZGIvTWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KLWluZGV4IDc5Mzc4MDEuLjYzYmFmODEgMTAwNjQ0Ci0tLS0gYS9nZGIvTWFrZWZpbGUuaW4KLSsrKyBiL2dkYi9NYWtlZmlsZS5pbgotQEAgLTE3MDcsNiArMTcwNyw3IEBAIEFMTERFUEZJTEVTID0gXAotIAlzY29yZS10ZGVwLmMgXAotIAlzZXItZ28zMi5jIHNlci1waXBlLmMgc2VyLXRjcC5jIHNlci1taW5ndy5jIFwKLSAJc2gtdGRlcC5jIHNoNjQtdGRlcC5jIHNobmJzZC10ZGVwLmMgc2huYnNkLW5hdC5jIFwKLSsJc2gtbGludXgtdGRlcC5jIHNoLWxpbnV4LW5hdC5jIFwKLSAJc29sMi10ZGVwLmMgXAotIAlzb2xpYi1zdnI0LmMgXAotIAlzcGFyYy1saW51eC1uYXQuYyBzcGFyYy1saW51eC10ZGVwLmMgXAotZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUuaG9zdCBiL2dkYi9jb25maWd1cmUuaG9zdAotaW5kZXggZDA3YmU0Yi4uYjYzOTFjNSAxMDA2NDQKLS0tLSBhL2dkYi9jb25maWd1cmUuaG9zdAotKysrIGIvZ2RiL2NvbmZpZ3VyZS5ob3N0Ci1AQCAtMTUwLDYgKzE1MCw3IEBAIHBvd2VycGMqLSotbGludXgqKQlnZGJfaG9zdD1saW51eCA7OwotIAotIHMzOTAqLSotbGludXgqKQkJZ2RiX2hvc3Q9bGludXggOzsKLSAKLStzaCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OwotIHNoKi0qLW5ldGJzZGVsZiogfCBzaCotKi1rbmV0YnNkKi1nbnUpCi0gCQkJZ2RiX2hvc3Q9bmJzZCA7OwotIHNoKi0qLW9wZW5ic2QqKQkJZ2RiX2hvc3Q9bmJzZCA7OwotZGlmZiAtLWdpdCBhL2dkYi9zaC1saW51eC10ZGVwLmMgYi9nZGIvc2gtbGludXgtdGRlcC5jCi1pbmRleCAyZmYyZWU4Li4xYTExMjYyIDEwMDY0NAotLS0tIGEvZ2RiL3NoLWxpbnV4LXRkZXAuYwotKysrIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYwotQEAgLTE4LDE0ICsxOCwzNyBAQAotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSAKLSAjaW5jbHVkZSAiZGVmcy5oIgotKyNpbmNsdWRlICJnZGJjb3JlLmgiCi0rI2luY2x1ZGUgImZyYW1lLmgiCi0rI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKLSsjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCi0rI2luY2x1ZGUgImR3YXJmMi1mcmFtZS5oIgotKyNpbmNsdWRlICJ2YWx1ZS5oIgotKyNpbmNsdWRlICJyZWdjYWNoZS5oIgotKyNpbmNsdWRlICJpbmZlcmlvci5oIgotICNpbmNsdWRlICJvc2FiaS5oIgotIAotKyNpbmNsdWRlICJyZWdncm91cHMuaCIKLSsjaW5jbHVkZSAiYXJjaC11dGlscy5oIgotKyNpbmNsdWRlICJmbG9hdGZvcm1hdC5oIgotICNpbmNsdWRlICJzb2xpYi1zdnI0LmgiCi0gI2luY2x1ZGUgInN5bXRhYi5oIgotKyNpbmNsdWRlICJnZGJfc3RyaW5nLmgiCi0rI2luY2x1ZGUgImNvbW1hbmQuaCIKLSsjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgotIAotICNpbmNsdWRlICJ0cmFkLWZyYW1lLmgiCi0gI2luY2x1ZGUgInRyYW1wLWZyYW1lLmgiCi0gCi0rI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotKyNpbmNsdWRlIDxzeXMvdXNlci5oPgotKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgotKwotKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0rCi0rI2luY2x1ZGUgInJlZ3NldC5oIgotICNpbmNsdWRlICJnbGliYy10ZGVwLmgiCi0gI2luY2x1ZGUgInNoLXRkZXAuaCIKLSAjaW5jbHVkZSAibGludXgtdGRlcC5oIgotQEAgLTE4MCw5ICsyMDMsNTA1IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhbXBfZnJhbWUgc2hfbGludXhfcnRfc2lncmV0dXJuX3RyYW1wX2ZyYW1lID0gewotICAgc2hfbGludXhfcnRfc2lncmV0dXJuX2luaXQKLSB9OwotIAotKy8qIFJlY29nbml6aW5nIHNpZ25hbCBoYW5kbGVyIGZyYW1lcy4gICovCi0rCi0rLyogR05VL0xpbnV4IGhhcyB0d28gZmxhdm9ycyBvZiBzaWduYWxzLiAgTm9ybWFsIHNpZ25hbCBoYW5kbGVycywgYW5kCi0rICAgInJlYWx0aW1lIiAoUlQpIHNpZ25hbHMuICBUaGUgUlQgc2lnbmFscyBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsCi0rICAgaW5mb3JtYXRpb24gdG8gdGhlIHNpZ25hbCBoYW5kbGVyIGlmIHRoZSBTQV9TSUdJTkZPIGZsYWcgaXMgc2V0Ci0rICAgd2hlbiBlc3RhYmxpc2hpbmcgYSBzaWduYWwgaGFuZGxlciB1c2luZyBgc2lnYWN0aW9uJy4gIEl0IGlzIG5vdAotKyAgIHVubGlrZWx5IHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIEdOVS9MaW51eCB3aWxsIHN1cHBvcnQgU0FfU0lHSU5GTwotKyAgIGZvciBub3JtYWwgc2lnbmFscyB0b28uICAqLwotKwotKy8qIFdoZW4gdGhlIFNIIExpbnV4IGtlcm5lbCBjYWxscyBhIHNpZ25hbCBoYW5kbGVyIGFuZCB0aGUKLSsgICBTQV9SRVNUT1JFUiBmbGFnIGlzbid0IHNldCwgdGhlIHJldHVybiBhZGRyZXNzIHBvaW50cyB0byBhIGJpdCBvZgotKyAgIGNvZGUgb24gdGhlIHN0YWNrLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgdGhlIFBDIGFwcGVhcnMgdG8KLSsgICBiZSB3aXRoaW4gdGhpcyBiaXQgb2YgY29kZS4KLSsKLSsgICBUaGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgZm9yIG5vcm1hbCBzaWduYWxzIGlzCi0rICAgICAgIG1vdi53ICAxZixyMwotKyAgICAgICB0cmFwYSAgIzE2Ci0rICAgICAgIG9yICAgICByMCwgcjAKLSsgICAgICAgb3IgICAgIHIwLCByMAotKyAgICAgICBvciAgICAgcjAsIHIwCi0rICAgICAgIG9yICAgICByMCwgcjAKLSsgICAgICAgb3IgICAgIHIwLCByMAotKyAgICAxOiAud29yZCAgX19OUl9zaWdyZXR1cm4KLSsgICBvciAweDkzMDUgMHhjMzEwIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgwMDc3LgotKwotKyAgIENoZWNraW5nIGZvciB0aGUgY29kZSBzZXF1ZW5jZSBzaG91bGQgYmUgc29tZXdoYXQgcmVsaWFibGUsIGJlY2F1c2UKLSsgICB0aGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHNpZ3JldHVybi4gIFRoaXMgaXMgdW5saWtlbHkKLSsgICB0byBvY2N1ciBhbnl3aGVyZSBvdGhlciB0aGFuIGEgc2lnbmFsIHRyYW1wb2xpbmUuCi0rCi0rICAgSXQga2luZCBvZiBzdWNrcyB0aGF0IHdlIGhhdmUgdG8gcmVhZCBtZW1vcnkgZnJvbSB0aGUgcHJvY2VzcyBpbgotKyAgIG9yZGVyIHRvIGlkZW50aWZ5IGEgc2lnbmFsIHRyYW1wb2xpbmUsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKLSsgICBhbnkgb3RoZXIgd2F5LiAgVGhlIFBDX0lOX1NJR1RSQU1QIG1hY3JvIGluIHRtLWxpbnV4LmggYXJyYW5nZXMgdG8KLSsgICBvbmx5IGNhbGwgdXMgaWYgbm8gZnVuY3Rpb24gbmFtZSBjb3VsZCBiZSBpZGVudGlmaWVkLCB3aGljaCBzaG91bGQKLSsgICBiZSB0aGUgY2FzZSBzaW5jZSB0aGUgY29kZSBpcyBvbiB0aGUgc3RhY2suCi0rCi0rICAgRGV0ZWN0aW9uIG9mIHNpZ25hbCB0cmFtcG9saW5lcyBmb3IgaGFuZGxlcnMgdGhhdCBzZXQgdGhlCi0rICAgU0FfUkVTVE9SRVIgZmxhZyBpcyBpbiBnZW5lcmFsIG5vdCBwb3NzaWJsZS4gIFVuZm9ydHVuYXRlbHkgdGhpcyBpcwotKyAgIHdoYXQgdGhlIEdOVSBDIExpYnJhcnkgaGFzIGJlZW4gZG9pbmcgZm9yIHF1aXRlIHNvbWUgdGltZSBub3cuCi0rICAgSG93ZXZlciwgYXMgb2YgdmVyc2lvbiAyLjEuMiwgdGhlIEdOVSBDIExpYnJhcnkgdXNlcyBzaWduYWwKLSsgICB0cmFtcG9saW5lcyAobmFtZWQgX19yZXN0b3JlIGFuZCBfX3Jlc3RvcmVfcnQpIHRoYXQgYXJlIGlkZW50aWNhbAotKyAgIHRvIHRoZSBvbmVzIHVzZWQgYnkgdGhlIGtlcm5lbC4gIFRoZXJlZm9yZSwgdGhlc2UgdHJhbXBvbGluZXMgYXJlCi0rICAgc3VwcG9ydGVkIHRvby4gICovCi0rCi0rI2RlZmluZSBNT1ZXKG4pCSAoMHg5MzAwfCgobiktMikpCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrbiB0byBSMyAqLwotKyNkZWZpbmUgVFJBUDE2CSAweGMzMTAJCQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCi0rI2RlZmluZSBPUl9SMF9SMCAweDIwMGIJCQkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KLSsKLSsjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04wCU1PVlcoNykJCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrNyB0byBSMyAqLwotKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjEJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCi0rI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMglPUl9SMF9SMAkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGludXhfc2lndHJhbXBfY29kZVtdID0KLSt7Ci0rICBMSU5VWF9TSUdUUkFNUF9JTlNOMCwKLSsgIExJTlVYX1NJR1RSQU1QX0lOU04xLAotKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCi0rICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKLSsgIExJTlVYX1NJR1RSQU1QX0lOU04yLAotKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCi0rICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKLSsgIF9fTlJfc2lncmV0dXJuCi0rfTsKLSsKLSsjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0xFTiAoc2l6ZW9mIGxpbnV4X3NpZ3RyYW1wX2NvZGUpCi0rCi0rLyogSWYgUEMgaXMgaW4gYSBzaWd0cmFtcCByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mCi0rICAgdGhlIHJvdXRpbmUuICBPdGhlcndpc2UsIHJldHVybiAwLiAgKi8KLSsKLStzdGF0aWMgQ09SRV9BRERSCi0rc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQotK3sKLSsgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAobmV4dF9mcmFtZSk7Ci0rICBnZGJfYnl0ZSBidWZbTElOVVhfU0lHVFJBTVBfTEVOXTsKLSsKLSsgIC8qIFdlIG9ubHkgcmVjb2duaXplIGEgc2lnbmFsIHRyYW1wb2xpbmUgaWYgUEMgaXMgYXQgdGhlIHN0YXJ0IG9mCi0rICAgICBvbmUgb2YgdGhlIHRocmVlIGluc3RydWN0aW9ucy4gIFdlIG9wdGltaXplIGZvciBmaW5kaW5nIHRoZSBQQyBhdAotKyAgICAgdGhlIHN0YXJ0LCBhcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXMgbm90IHRoZQotKyAgICAgZmlyc3QgZnJhbWUgb24gdGhlIHN0YWNrLiAgV2UgYXNzdW1lIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCi0rICAgICBQQyBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgdGhlcmUgd2lsbCBiZQotKyAgICAgYSBmZXcgdHJhaWxpbmcgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHN0YWNrLiAgKi8KLSsKLSsgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9TSUdUUkFNUF9MRU4pKQotKyAgICByZXR1cm4gMDsKLSsKLSsgIGlmIChidWZbMF0gIT0gTElOVVhfU0lHVFJBTVBfSU5TTjApCi0rICAgIHsKLSsgICAgICBpZiAoYnVmWzBdICE9IExJTlVYX1NJR1RSQU1QX0lOU04xKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgICAgcGMgLT0gMjsKLSsKLSsgICAgICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfU0lHVFJBTVBfTEVOKSkKLSsJcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfc2lndHJhbXBfY29kZSwgTElOVVhfU0lHVFJBTVBfTEVOKSAhPSAwKQotKyAgICByZXR1cm4gMDsKLSsKLSsgIHJldHVybiBwYzsKLSt9Ci0rCi0rLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGZvciBSVCBzaWduYWxzLiAgSGVyZSB0aGUgaW5zdHJ1Y3Rpb24KLSsgICBzZXF1ZW5jZSBpcwotKyAgICAgICBtb3YudyAgMWYscjMKLSsgICAgICAgdHJhcGEgICMxNgotKyAgICAgICBvciAgICAgcjAsIHIwCi0rICAgICAgIG9yICAgICByMCwgcjAKLSsgICAgICAgb3IgICAgIHIwLCByMAotKyAgICAgICBvciAgICAgcjAsIHIwCi0rICAgICAgIG9yICAgICByMCwgcjAKLSsgICAgMTogLndvcmQgIF9fTlJfcnRfc2lncmV0dXJuCi0rICAgb3IgMHg5MzA1IDB4YzMxMCAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MDBhZC4KLSsKLSsgICBUaGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHJ0X3NpZ3JldHVybi4gICovCi0rCi0rI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMAkJTU9WVyg3KQkJLyogTW92ZSBtZW0gd29yZCBhdCBQQys3IHRvIFIzICovCi0rI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMQkJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCi0rI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMgkJT1JfUjBfUjAJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGVbXSA9Ci0rewotKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjAsCi0rICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMSwKLSsgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAotKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCi0rICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKLSsgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAotKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCi0rICBfX05SX3J0X3NpZ3JldHVybgotK307Ci0rCi0rI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9MRU4gKHNpemVvZiBsaW51eF9ydF9zaWd0cmFtcF9jb2RlKQotKwotKy8qIElmIFBDIGlzIGluIGEgUlQgc2lndHJhbXAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydAotKyAgIG9mIHRoZSByb3V0aW5lLiAgT3RoZXJ3aXNlLCByZXR1cm4gMC4gICovCi0rCi0rc3RhdGljIENPUkVfQUREUgotK3NoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKLSt7Ci0rICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKG5leHRfZnJhbWUpOwotKyAgZ2RiX2J5dGUgYnVmW0xJTlVYX1JUX1NJR1RSQU1QX0xFTl07Ci0rCi0rICAvKiBXZSBvbmx5IHJlY29nbml6ZSBhIHNpZ25hbCB0cmFtcG9saW5lIGlmIFBDIGlzIGF0IHRoZSBzdGFydCBvZgotKyAgICAgb25lIG9mIHRoZSB0d28gaW5zdHJ1Y3Rpb25zLiAgV2Ugb3B0aW1pemUgZm9yIGZpbmRpbmcgdGhlIFBDIGF0Ci0rICAgICB0aGUgc3RhcnQsIGFzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbXBvbGluZSBpcyBub3QgdGhlCi0rICAgICBmaXJzdCBmcmFtZSBvbiB0aGUgc3RhY2suICBXZSBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKLSsgICAgIFBDIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aGVyZSB3aWxsIGJlCi0rICAgICBhIGZldyB0cmFpbGluZyByZWFkYWJsZSBieXRlcyBvbiB0aGUgc3RhY2suICAqLwotKwotKyAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1JUX1NJR1RSQU1QX0xFTikpCi0rICAgIHJldHVybiAwOwotKwotKyAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMCkKLSsgICAgewotKyAgICAgIGlmIChidWZbMF0gIT0gTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEpCi0rCXJldHVybiAwOwotKwotKyAgICAgIHBjIC09IDI7Ci0rCi0rICAgICAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsCi0rCQkJCSAgICAgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSkKLSsJcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfcnRfc2lndHJhbXBfY29kZSwgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSAhPSAwKQotKyAgICByZXR1cm4gMDsKLSsKLSsgIHJldHVybiBwYzsKLSt9Ci0rCi0rLyogUmV0dXJuIHdoZXRoZXIgUEMgaXMgaW4gYSBHTlUvTGludXggc2lndHJhbXAgcm91dGluZS4gICovCi0rCi0rc3RhdGljIGludAotK3NoX2xpbnV4X3NpZ3RyYW1wX3AgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQotK3sKLSsgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAodGhpc19mcmFtZSk7Ci0rICBjaGFyICpuYW1lOwotKwotKyAgZmluZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgJm5hbWUsIE5VTEwsIE5VTEwpOwotKwotKyAgLyogSWYgd2UgaGF2ZSBOQU1FLCB3ZSBjYW4gb3B0aW1pemUgdGhlIHNlYXJjaC4gIFRoZSB0cmFtcG9saW5lcyBhcmUKLSsgICAgIG5hbWVkIF9fcmVzdG9yZSBhbmQgX19yZXN0b3JlX3J0LiAgSG93ZXZlciwgdGhleSBhcmVuJ3QgZHluYW1pY2FsbHkKLSsgICAgIGV4cG9ydGVkIGZyb20gdGhlIHNoYXJlZCBDIGxpYnJhcnksIHNvIHRoZSB0cmFtcG9saW5lIG1heSBhcHBlYXIgdG8KLSsgICAgIGJlIHBhcnQgb2YgdGhlIHByZWNlZGluZyBmdW5jdGlvbi4gIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBzaWdhY3Rpb24sCi0rICAgICBfX3NpZ2FjdGlvbiwgb3IgX19saWJjX3NpZ2FjdGlvbiAoYWxsIGFsaWFzZXMgdG8gdGhlIHNhbWUgZnVuY3Rpb24pLiAgKi8KLSsgIGlmIChuYW1lID09IE5VTEwgfHwgc3Ryc3RyIChuYW1lLCAic2lnYWN0aW9uIikgIT0gTlVMTCkKLSsgICAgcmV0dXJuIChzaF9saW51eF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSkgIT0gMAotKwkgICAgfHwgc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpICE9IDApOwotKwotKyAgcmV0dXJuIChzdHJjbXAgKCJfX3Jlc3RvcmUiLCBuYW1lKSA9PSAwCi0rCSAgfHwgc3RyY21wICgiX19yZXN0b3JlX3J0IiwgbmFtZSkgPT0gMCk7Ci0rfQotKwotKy8qIE9mZnNldCB0byBzdHJ1Y3Qgc2lnY29udGV4dCBpbiB1Y29udGV4dCwgZnJvbSA8YXNtL3Vjb250ZXh0Lmg+LiAgKi8KLSsjZGVmaW5lIFNIX0xJTlVYX1VDT05URVhUX1NJR0NPTlRFWFRfT0ZGU0VUIDEyCi0rCi0rCi0rLyogQXNzdW1pbmcgTkVYVF9GUkFNRSBpcyBhIGZyYW1lIGZvbGxvd2luZyBhIEdOVS9MaW51eCBzaWd0cmFtcAotKyAgIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBzaWdjb250ZXh0IHN0cnVjdHVyZS4gICovCi0rCi0rc3RhdGljIENPUkVfQUREUgotK3NoX2xpbnV4X3NpZ2NvbnRleHRfYWRkciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUpCi0rewotKyAgQ09SRV9BRERSIHBjOwotKyAgQ09SRV9BRERSIHNwOwotKwotKyAgc3AgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7Ci0rCi0rICBwYyA9IHNoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKTsKLSsgIGlmIChwYykKLSsgICAgewotKyAgICAgIHJldHVybiBzcDsKLSsgICAgfQotKwotKyAgcGMgPSBzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSk7Ci0rICBpZiAocGMpCi0rICAgIHsKLSsgICAgICBDT1JFX0FERFIgdWNvbnRleHRfYWRkcjsKLSsKLSsgICAgICAvKiBUaGUgc2lnY29udGV4dCBzdHJ1Y3R1cmUgaXMgcGFydCBvZiB0aGUgdXNlciBjb250ZXh0LiAgQQotKwkgcG9pbnRlciB0byB0aGUgdXNlciBjb250ZXh0IGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQKLSsJIHRvIHRoZSBzaWduYWwgaGFuZGxlci4gICovCi0rICAgICAgdWNvbnRleHRfYWRkciA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgQVJHMF9SRUdOVU0rMik7Ci0rICAgICAgcmV0dXJuIHVjb250ZXh0X2FkZHIgKyBTSF9MSU5VWF9VQ09OVEVYVF9TSUdDT05URVhUX09GRlNFVDsKLSsgICAgfQotKwotKyAgZXJyb3IgKCJDb3VsZG4ndCByZWNvZ25pemUgc2lnbmFsIHRyYW1wb2xpbmUuIik7Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0rLyogU2lnbmFsIHRyYW1wb2xpbmVzLiAgKi8KLStleHRlcm4gc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCk7Ci0rCi0rc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCi0rc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKLSt7Ci0rICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlOwotKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2N1cnJlbnRfYXJjaCAoKSk7Ci0rICBDT1JFX0FERFIgc2lnY29udGV4dF9hZGRyOwotKwotKyAgaWYgKCp0aGlzX2NhY2hlKQotKyAgICByZXR1cm4gKnRoaXNfY2FjaGU7Ci0rCi0rICBjYWNoZSA9IHNoX2FsbG9jX2ZyYW1lX2NhY2hlICgpOwotKwotKyAgY2FjaGUtPmJhc2UgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7Ci0rICBzaWdjb250ZXh0X2FkZHIgPSB0ZGVwLT5zaWdjb250ZXh0X2FkZHIgKHRoaXNfZnJhbWUpOwotKyAgaWYgKHRkZXAtPnNjX3JlZ19vZmZzZXQpCi0rICAgIHsKLSsgICAgICBpbnQgaTsKLSsKLSsgICAgICBnZGJfYXNzZXJ0ICh0ZGVwLT5zY19udW1fcmVncyA8PSBTSF9OVU1fUkVHUyk7Ci0rCi0rICAgICAgZm9yIChpID0gMDsgaSA8IHRkZXAtPnNjX251bV9yZWdzOyBpKyspCi0rCWlmICh0ZGVwLT5zY19yZWdfb2Zmc2V0W2ldICE9IC0xKQotKwkgIGNhY2hlLT5zYXZlZF9yZWdzW2ldID0gc2lnY29udGV4dF9hZGRyICsgdGRlcC0+c2NfcmVnX29mZnNldFtpXTsKLSsgICAgfQotKwotKyAgKnRoaXNfY2FjaGUgPSBjYWNoZTsKLSsgIHJldHVybiBjYWNoZTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCi0rCQkJICAgICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQpCi0rewotKyAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9Ci0rICAgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKLSsKLSsgICgqdGhpc19pZCkgPSBmcmFtZV9pZF9idWlsZCAoY2FjaGUtPmJhc2UgKyA2NCwgY2FjaGUtPnBjKTsKLSt9Ci0rCi0rZXh0ZXJuIHN0cnVjdCB2YWx1ZSAqIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKCk7Ci0rc3RhdGljIHN0cnVjdCB2YWx1ZSAqCi0rc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCi0rICAgICAgICAgICAgICAgICAgIHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQotK3sKLSsgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKLSsKLSsgIHJldHVybiBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlLCByZWdudW0pOwotK30KLSsKLStzdGF0aWMgaW50Ci0rc2hfbGludXhfc2lndHJhbXBfZnJhbWVfc25pZmZlciAoY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCAqc2VsZiwKLSsgICAgICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAotKyAgICAgICAgICAgICAgICAgdm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUpCi0rewotKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpKTsKLSsKLSsgIC8qIFdlIHNob3VsZG4ndCBldmVuIGJvdGhlciBpZiB3ZSBkb24ndCBoYXZlIGEgc2lnY29udGV4dF9hZGRyCi0rICAgICBoYW5kbGVyLiAgKi8KLSsgIGlmICh0ZGVwLT5zaWdjb250ZXh0X2FkZHIgPT0gTlVMTCkKLSsgICAgcmV0dXJuIDA7Ci0rCi0rICBpZiAodGRlcC0+c2lndHJhbXBfcCAhPSBOVUxMKQotKyAgICB7Ci0rICAgICAgaWYgKHRkZXAtPnNpZ3RyYW1wX3AgKHRoaXNfZnJhbWUpKQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3Vud2luZCA9Ci0rewotKyAgU0lHVFJBTVBfRlJBTUUsCi0rICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkLAotKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciwKLSsgIE5VTEwsCi0rICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9zbmlmZmVyCi0rfTsKLSsKLSsvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTgotKyAgIGluIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQotKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCi0rCi0rdm9pZAotK3NoX3N1cHBseV9ncmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCi0rICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmdyZWdzLCBzaXplX3QgbGVuKQotK3sKLSsgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7Ci0rICBjb25zdCBjaGFyICpyZWdzID0gZ3JlZ3M7Ci0rICBpbnQgaTsKLSsKLSsgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCk7Ci0rCi0rICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+Z3JlZ3NldF9udW1fcmVnczsgaSsrKQotKyAgICB7Ci0rICAgICAgaWYgKChyZWdudW0gPT0gaSB8fCByZWdudW0gPT0gLTEpCi0rICAgICAgJiYgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldICE9IC0xKQotKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSwgcmVncyArIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSk7Ci0rICAgIH0KLSt9Ci0rCi0rLyogQ29sbGVjdCByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgcmVnaXN0ZXIgY2FjaGUgUkVHQ0FDSEUgYW5kIHN0b3JlCi0rICAgaXQgaW4gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTiBhcyBkZXNjcmliZWQgYnkgdGhlCi0rICAgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHNldCBSRUdTRVQuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yCi0rICAgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLwotKwotK3ZvaWQKLStzaF9jb2xsZWN0X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKLSsgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCi0rICAgICAgICAgICAgICBpbnQgcmVnbnVtLCB2b2lkICpncmVncywgc2l6ZV90IGxlbikKLSt7Ci0rICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOwotKyAgY2hhciAqcmVncyA9IGdyZWdzOwotKyAgaW50IGk7Ci0rCi0rICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpOwotKwotKyAgZm9yIChpID0gMDsgaSA8IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3M7IGkrKykKLSsgICAgewotKyAgICAgIGlmICgocmVnbnVtID09IGkgfHwgcmVnbnVtID09IC0xKQotKyAgICAgICYmIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSAhPSAtMSkKLSsgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBpLCByZWdzICsgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldKTsKLSsgICAgfQotK30KLSsKLSsvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRlBSRUdTIGFuZCBMRU4KLSsgICBpbiB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQotKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCi0rCi0rc3RhdGljIHZvaWQKLStzaF9zdXBwbHlfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKLSsgICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKLSt7Ci0rICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOwotKyAgY29uc3QgY2hhciAqcmVncyA9IGZwcmVnczsKLSsgIGludCBpOwotKwotKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7Ci0rICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSsgICAgewotKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCi0rICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpKzI1LCByZWdzICsgaSo0KTsKLSsgICAgfQotKyAgaWYgKHJlZ251bSA9PSBGUFNDUl9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQotKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgRlBTQ1JfUkVHTlVNLCByZWdzICsgMzIqNCk7Ci0rICBpZiAocmVnbnVtID09IEZQVUxfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKLSsgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7Ci0rfQotKwotKy8qIENvbGxlY3QgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIHJlZ2lzdGVyIGNhY2hlIFJFR0NBQ0hFIGFuZCBzdG9yZQotKyAgIGl0IGluIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEZQUkVHUyBhbmQgTEVOIGFzIGRlc2NyaWJlZCBieSB0aGUKLSsgICBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQgUkVHU0VULiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvcgotKyAgIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KLSsKLStzdGF0aWMgdm9pZAotK3NoX2NvbGxlY3RfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKLSsgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAotKyAgICAgICAgICAgICAgIGludCByZWdudW0sIHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKLSt7Ci0rICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOwotKyAgY2hhciAqcmVncyA9IGZwcmVnczsKLSsgIGludCBpOwotKwotKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7Ci0rICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSsgICAgewotKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCi0rICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgaSsyNSwgcmVncyArIGkqNCk7Ci0rICAgIH0KLSsgIGlmIChyZWdudW0gPT0gRlBTQ1JfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKLSsgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBGUFNDUl9SRUdOVU0sIHJlZ3MgKyAzMio0KTsKLSsgIGlmIChyZWdudW0gPT0gRlBVTF9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQotKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7Ci0rfQotKwotKy8qIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgY29yZSBzZWN0aW9uIGlkZW50aWZpZWQKLSsgICBieSBTRUNUX05BTUUgYW5kIFNFQ1RfU0laRS4gICovCi0rCi0rY29uc3Qgc3RydWN0IHJlZ3NldCAqCi0rc2hfbGludXhfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLSsgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VjdF9uYW1lLCBzaXplX3Qgc2VjdF9zaXplKQotK3sKLSsgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOwotKwotKyAgaWYgKHN0cmNtcCAoc2VjdF9uYW1lLCAiLnJlZyIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KQotKyAgICB7Ci0rICAgICAgaWYgKHRkZXAtPmdyZWdzZXQgPT0gTlVMTCkKLSsgICAgdGRlcC0+Z3JlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJjaCwgc2hfc3VwcGx5X2dyZWdzZXQsCi0rICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZ3JlZ3NldCk7Ci0rICAgICAgcmV0dXJuIHRkZXAtPmdyZWdzZXQ7Ci0rICAgIH0KLSsKLSsgIGlmICgoc3RyY21wIChzZWN0X25hbWUsICIucmVnMiIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCkpCi0rICAgIHsKLSsgICAgICBpZiAodGRlcC0+ZnByZWdzZXQgPT0gTlVMTCkKLSsgICAgdGRlcC0+ZnByZWdzZXQgPSByZWdzZXRfYWxsb2MgKGdkYmFyY2gsIHNoX3N1cHBseV9mcHJlZ3NldCwKLSsgICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZnByZWdzZXQpOwotKyAgICAgIHJldHVybiB0ZGVwLT5mcHJlZ3NldDsKLSsgICAgfQotKwotKyAgcmV0dXJuIE5VTEw7Ci0rfQotKwotKy8qIFRoZSByZWdpc3RlciBzZXRzIHVzZWQgaW4gR05VL0xpbnV4IEVMRiBjb3JlLWR1bXBzIGFyZSBpZGVudGljYWwgdG8KLSsgICB0aGUgcmVnaXN0ZXIgc2V0cyBpbiBgc3RydWN0IHVzZXInIHRoYXQgYXJlIHVzZWQgZm9yIGEub3V0Ci0rICAgY29yZS1kdW1wcy4gIFRoZXNlIGFyZSBhbHNvIHVzZWQgYnkgcHRyYWNlKDIpLiAgVGhlIGNvcnJlc3BvbmRpbmcKLSsgICB0eXBlcyBhcmUgYGVsZl9ncmVnc2V0X3QnIGZvciB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyAod2l0aAotKyAgIGBlbGZfZ3JlZ190JyB0aGUgdHlwZSBvZiBhIHNpbmdsZSBHUCByZWdpc3RlcikgYW5kIGBlbGZfZnByZWdzZXRfdCcKLSsgICBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KLSsKLSsgICBUaG9zZSB0eXBlcyB1c2VkIHRvIGJlIGF2YWlsYWJsZSB1bmRlciB0aGUgbmFtZXMgYGdyZWdzZXRfdCcgYW5kCi0rICAgYGZwcmVnc2V0X3QnIHRvbywgYW5kIEdEQiB1c2VkIHRob3NlIG5hbWVzIGluIHRoZSBwYXN0LiAgQnV0IHRob3NlCi0rICAgbmFtZXMgYXJlIG5vdyB1c2VkIGZvciB0aGUgcmVnaXN0ZXIgc2V0cyB1c2VkIGluIHRoZSBgbWNvbnRleHRfdCcKLSsgICB0eXBlLCB3aGljaCBoYXZlIGEgZGlmZmVyZW50IHNpemUgYW5kIGxheW91dC4gICovCi0rCi0rLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QgdXNlcicKLSsgICBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCi0rCi0rLyogRnJvbSA8c3lzL3JlZy5oPi4gICovCi0rc3RhdGljIGludCBzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXRbXSA9Ci0rewotKyAwLAk0LAk4LAkxMiwJMTYsCTIwLAkyNCwJMjgsCi0rIDMyLAkzNiwJNDAsCTQ0LAk0OCwJNTIsCTU2LAk2MCwKLSsKLSsgUkVHX1BDKjQsICAgUkVHX1BSKjQsICAgUkVHX0dCUio0LCAgLTEsCi0rIFJFR19NQUNIKjQsIFJFR19NQUNMKjQsIFJFR19TUio0LAotK307Ci0rCi0rLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QKLSsgICBzaWdjb250ZXh0JyBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCi0rCi0rLyogRnJvbSA8YXNtL3NpZ2NvbnRleHQuaD4uICAqLwotK3N0YXRpYyBpbnQgc2hfbGludXhfc2NfcmVnX29mZnNldFtdID0KLSt7Ci0rIDQsCTgsCTEyLAkxNiwJMjAsCTI0LAkyOCwJMzIsCi0rIDM2LAk0MCwJNDQsCTQ4LAk1MiwJNTYsCTYwLAk2NCwKLSsgNjgsCTcyLAk4MCwJLTEsCi0rIDg0LAk4OCwJNzYKLSt9OwotKwotIHN0YXRpYyB2b2lkCi0gc2hfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpCi0gewotKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7Ci0rICBiZmQgYWJmZDsKLSsKLSsgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9IHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldDsKLSsgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXQpOwotKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAyMyAqIDQ7Ci0rCi0rICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAzMjsgICAgIC8qIEZyb20gPGJpdHMvc2V0am1wLmg+LiAgKi8KLSsKLSsgIHRkZXAtPnNpZ3RyYW1wX3AgPSBzaF9saW51eF9zaWd0cmFtcF9wOwotKyAgdGRlcC0+c2lnY29udGV4dF9hZGRyID0gc2hfbGludXhfc2lnY29udGV4dF9hZGRyOwotKyAgdGRlcC0+c2NfcmVnX29mZnNldCA9IHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQ7Ci0rICB0ZGVwLT5zY19udW1fcmVncyA9IEFSUkFZX1NJWkUgKHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQpOwotKwotKyAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlcihnZGJhcmNoLCAmc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdW53aW5kKTsKLSsKLSsgIC8qIElmIHdlIGhhdmUgYSByZWdpc3RlciBtYXBwaW5nLCBlbmFibGUgdGhlIGdlbmVyaWMgY29yZSBmaWxlCi0rICAgICBzdXBwb3J0LCB1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLiAgKi8KLSsgIGlmICh0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQKLSsgICAgICAmJiAhZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb25fcCAoZ2RiYXJjaCkpCi0rICAgIHNldF9nZGJhcmNoX3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbiAoZ2RiYXJjaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoX2xpbnV4X3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbik7Ci0rCi0gICBsaW51eF9pbml0X2FiaSAoaW5mbywgZ2RiYXJjaCk7Ci0gCi0gICAvKiBHTlUvTGludXggdXNlcyBTVlI0LXN0eWxlIHNoYXJlZCBsaWJyYXJpZXMuICAqLwotZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmMgYi9nZGIvc2gtdGRlcC5jCi1pbmRleCA4MmNmMmY0Li5iNDQzZTQ2IDEwMDY0NAotLS0tIGEvZ2RiL3NoLXRkZXAuYwotKysrIGIvZ2RiL3NoLXRkZXAuYwotQEAgLTIxLDYgKzIxLDkgQEAKLSAgICBzYWNAY3lnbnVzLmNvbS4gICovCi0gCi0gI2luY2x1ZGUgImRlZnMuaCIKLSsjaW5jbHVkZSAiYXJjaC11dGlscy5oIgotKyNpbmNsdWRlICJjb21tYW5kLmgiCi0rI2luY2x1ZGUgImR1bW15LWZyYW1lLmgiCi0gI2luY2x1ZGUgImZyYW1lLmgiCi0gI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKLSAjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCi1AQCAtMzUsNiArMzgsNyBAQAotICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCi0gI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCi0gI2luY2x1ZGUgInJlZ2NhY2hlLmgiCi0rI2luY2x1ZGUgInJlZ3NldC5oIgotICNpbmNsdWRlICJkb3VibGVzdC5oIgotICNpbmNsdWRlICJvc2FiaS5oIgotICNpbmNsdWRlICJyZWdncm91cHMuaCIKLUBAIC02NywyMyArNzEsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2hfY2NfZW51bVtdID0gewotIAotIHN0YXRpYyBjb25zdCBjaGFyICpzaF9hY3RpdmVfY2FsbGluZ19jb252ZW50aW9uID0gc2hfY2NfZ2NjOwotIAotLSNkZWZpbmUgU0hfTlVNX1JFR1MgNjcKLS0KLS1zdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUKLS17Ci0tICAvKiBCYXNlIGFkZHJlc3MuICAqLwotLSAgQ09SRV9BRERSIGJhc2U7Ci0tICBMT05HRVNUIHNwX29mZnNldDsKLS0gIENPUkVfQUREUiBwYzsKLS0KLS0gIC8qIEZsYWcgc2hvd2luZyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgcHJvbG9ndWUgY29kZS4gICovCi0tICBpbnQgdXNlc19mcDsKLS0KLS0gIC8qIFNhdmVkIHJlZ2lzdGVycy4gICovCi0tICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tTSF9OVU1fUkVHU107Ci0tICBDT1JFX0FERFIgc2F2ZWRfc3A7Ci0tfTsKLS0KLSBzdGF0aWMgaW50Ci0gc2hfaXNfcmVuZXNhc19jYWxsaW5nX2NvbnZlbnRpb24gKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUpCi0gewotQEAgLTEwNDMsNyArMTAzMCw3IEBAIHNoX3RyZWF0X2FzX2ZsdF9wIChzdHJ1Y3QgdHlwZSAqdHlwZSkKLSAgICAgcmV0dXJuIDA7Ci0gICAvKiBPdGhlcndpc2UgaWYgdGhlIHR5cGUgb2YgdGhhdCBtZW1iZXIgaXMgZmxvYXQsIHRoZSB3aG9sZSB0eXBlIGlzCi0gICAgICB0cmVhdGVkIGFzIGZsb2F0LiAgKi8KLS0gIGlmIChUWVBFX0NPREUgKFRZUEVfRklFTERfVFlQRSAodHlwZSwgMCkpID09IFRZUEVfQ09ERV9GTFQpCi0rICBpZiAoVFlQRV9DT0RFIChjaGVja190eXBlZGVmIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIDApKSkgPT0gVFlQRV9DT0RFX0ZMVCkKLSAgICAgcmV0dXJuIDE7Ci0gICAvKiBPdGhlcndpc2UgaXQncyBub3QgdHJlYXRlZCBhcyBmbG9hdC4gICovCi0gICByZXR1cm4gMDsKLUBAIC0xMDkzLDcgKzEwODAsNyBAQCBzaF9wdXNoX2R1bW15X2NhbGxfZnB1IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLSAgICAgIGluIGZvdXIgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gIExvb3AgdGhydSBhcmdzIGZyb20gZmlyc3QgdG8gbGFzdC4gICovCi0gICBmb3IgKGFyZ251bSA9IDA7IGFyZ251bSA8IG5hcmdzOyBhcmdudW0rKykKLSAgICAgewotLSAgICAgIHR5cGUgPSB2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pOwotKyAgICAgIHR5cGUgPSBjaGVja190eXBlZGVmICh2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pKTsKLSAgICAgICBsZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7Ci0gICAgICAgdmFsID0gc2hfanVzdGlmeV92YWx1ZV9pbl9yZWcgKGdkYmFyY2gsIGFyZ3NbYXJnbnVtXSwgbGVuKTsKLSAKLUBAIC0xODIxLDcgKzE4MDgsNyBAQCBzaF9kd2FyZjJfZnJhbWVfaW5pdF9yZWcgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtLAotICAgICByZWctPmhvdyA9IERXQVJGMl9GUkFNRV9SRUdfVU5ERUZJTkVEOwotIH0KLSAKLS1zdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKLStzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgotIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQotIHsKLSAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7Ci1AQCAtMTg0OCw3ICsxODM1LDcgQEAgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCi0gICByZXR1cm4gY2FjaGU7Ci0gfQotIAotLXN0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgotK3N0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCi0gc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKLSB7Ci0gICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKLUBAIC0xOTE1LDkgKzE5MDIsOSBAQCBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQotICAgcmV0dXJuIGNhY2hlOwotIH0KLSAKLS1zdGF0aWMgc3RydWN0IHZhbHVlICoKLS1zaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKLS0JCQl2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkKLStzdHJ1Y3QgdmFsdWUgKgotK3NoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKLSsJCQlpbnQgcmVnbnVtKQotIHsKLSAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOwotICAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9IHNoX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKLUBAIC0xOTMxLDcgKzE5MTgsNyBAQCBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKLSAgICAgIHRoZSBjdXJyZW50IGZyYW1lLiAgRnJvYiByZWdudW0gc28gdGhhdCB3ZSBwdWxsIHRoZSB2YWx1ZSBmcm9tCi0gICAgICB0aGUgY29ycmVjdCBwbGFjZS4gICovCi0gICBpZiAocmVnbnVtID09IGdkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoKSkKLS0gICAgcmVnbnVtID0gUFJfUkVHTlVNOwotKyAgICByZWdudW0gPSBQUl9SRUdOVU07IC8qIFhYWDogcmVhbGx5PyAqLwotIAotICAgaWYgKHJlZ251bSA8IFNIX05VTV9SRUdTICYmIGNhY2hlLT5zYXZlZF9yZWdzW3JlZ251bV0gIT0gLTEpCi0gICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X21lbW9yeSAodGhpc19mcmFtZSwgcmVnbnVtLAotQEAgLTIyMzcsOCArMjIyNCw4IEBAIHNoX3JldHVybl9pbl9maXJzdF9oaWRkZW5fcGFyYW1fcCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCi0gc3RhdGljIHN0cnVjdCBnZGJhcmNoICoKLSBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQotIHsKLS0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwotICAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcDsKLSsgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwotIAotICAgLyogU0g1IGlzIGhhbmRsZWQgZW50aXJlbHkgaW4gc2g2NC10ZGVwLmMuICAqLwotICAgaWYgKGluZm8uYmZkX2FyY2hfaW5mby0+bWFjaCA9PSBiZmRfbWFjaF9zaDUpCi1AQCAtMjI1NCw2ICsyMjQxLDE4IEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCi0gICB0ZGVwID0gWENORVcgKHN0cnVjdCBnZGJhcmNoX3RkZXApOwotICAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVwKTsKLSAKLSsgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwotKyAgdGRlcC0+Z3JlZ3NldCA9IE5VTEw7Ci0rICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBOVUxMOwotKyAgdGRlcC0+Z3JlZ3NldF9udW1fcmVncyA9IDIzOwotKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAwOwotKwotKyAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KLSsgIHRkZXAtPmZwcmVnc2V0ID0gTlVMTDsKLSsgIHRkZXAtPnNpemVvZl9mcHJlZ3NldCA9IDM0KjQ7Ci0rCi0rICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAtMTsKLSsKLSAgIHNldF9nZGJhcmNoX3Nob3J0X2JpdCAoZ2RiYXJjaCwgMiAqIFRBUkdFVF9DSEFSX0JJVCk7Ci0gICBzZXRfZ2RiYXJjaF9pbnRfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKLSAgIHNldF9nZGJhcmNoX2xvbmdfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKLUBAIC0yNDA0LDEwICsyNDAzLDExIEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCi0gICAgICAgYnJlYWs7Ci0gICAgIH0KLSAKLSsgIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJzIChnZGJhcmNoKTsKLSsKLSAgIC8qIEhvb2sgaW4gQUJJLXNwZWNpZmljIG92ZXJyaWRlcywgaWYgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gICovCi0gICBnZGJhcmNoX2luaXRfb3NhYmkgKGluZm8sIGdkYmFyY2gpOwotIAotLSAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdkYmFyY2gpOwotICAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJnNoX3N0dWJfdW53aW5kKTsKLSAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9mcmFtZV91bndpbmQpOwotIAotZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmggYi9nZGIvc2gtdGRlcC5oCi1pbmRleCBmYzY3MWE1Li42OTlmNTlmIDEwMDY0NAotLS0tIGEvZ2RiL3NoLXRkZXAuaAotKysrIGIvZ2RiL3NoLXRkZXAuaAotQEAgLTIxLDYgKzIxLDEyIEBACi0gCi0gLyogQ29udHJpYnV0ZWQgYnkgU3RldmUgQ2hhbWJlcmxhaW4gc2FjQGN5Z251cy5jb20uICAqLwotIAotK3N0cnVjdCBmcmFtZV9pbmZvOwotK3N0cnVjdCBnZGJhcmNoOwotK3N0cnVjdCByZWdncm91cDsKLStzdHJ1Y3QgcmVnc2V0OwotK3N0cnVjdCByZWdjYWNoZTsKLSsKLSAvKiBSZWdpc3RlcnMgZm9yIGFsbCBTSCB2YXJpYW50cy4gIFVzZWQgYWxzbyBieSBzaDMtcm9tLmMuICAqLwotIGVudW0KLSAgIHsKLUBAIC0yOSw2ICszNSw3IEBAIGVudW0KLSAgICAgQVJHMF9SRUdOVU0gPSA0LAotICAgICBBUkdMQVNUX1JFR05VTSA9IDcsCi0gICAgIEZQX1JFR05VTSA9IDE0LAotKyAgICBTUF9SRUdOVU0gPSAxNSwKLSAgICAgUENfUkVHTlVNID0gMTYsCi0gICAgIFBSX1JFR05VTSA9IDE3LAotICAgICBHQlJfUkVHTlVNID0gMTgsCi1AQCAtODEsNiArODgsMjQgQEAgZW51bQotICAgICBGVjBfUkVHTlVNID0gNzYsCi0gICAgIEZWX0xBU1RfUkVHTlVNID0gNzkKLSAgIH07Ci0rI2RlZmluZSBTSF9OVU1fUkVHUyA2NwotKwotK3N0cnVjdCBzaF9mcmFtZV9jYWNoZQotK3sKLSsgIC8qIEJhc2UgYWRkcmVzcy4gICovCi0rICBDT1JFX0FERFIgYmFzZTsKLSsgIExPTkdFU1Qgc3Bfb2Zmc2V0OwotKyAgQ09SRV9BRERSIHBjOwotKwotKyAgLyogRmxhZyBzaG93aW5nIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBwcm9sb2d1ZSBjb2RlLiAqLwotKyAgaW50IHVzZXNfZnA7Ci0rCi0rICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLwotKyAgQ09SRV9BRERSIHNhdmVkX3JlZ3NbU0hfTlVNX1JFR1NdOwotKyAgQ09SRV9BRERSIHNhdmVkX3NwOwotK307Ci0rCi0rZXh0ZXJuIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSk7Ci0gCi0gLyogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcmVnaXN0ZXIgaW4gYSBjb3JlLWZpbGUuICAqLwotIHN0cnVjdCBzaF9jb3JlZmlsZV9yZWdtYXAKLUBAIC04OSw4ICsxMTQsMzIgQEAgc3RydWN0IHNoX2NvcmVmaWxlX3JlZ21hcAotICAgdW5zaWduZWQgaW50IG9mZnNldDsKLSB9OwotIAotKy8qIHNoIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gICovCi0gc3RydWN0IGdkYmFyY2hfdGRlcAotIHsKLSsgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwotKyAgc3RydWN0IHJlZ3NldCAqZ3JlZ3NldDsKLSsgIGludCAqZ3JlZ3NldF9yZWdfb2Zmc2V0OwotKyAgaW50IGdyZWdzZXRfbnVtX3JlZ3M7Ci0rICBzaXplX3Qgc2l6ZW9mX2dyZWdzZXQ7Ci0rCi0rICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLwotKyAgc3RydWN0IHJlZ3NldCAqZnByZWdzZXQ7Ci0rICBzaXplX3Qgc2l6ZW9mX2ZwcmVnc2V0OwotKwotKyAgLyogT2Zmc2V0IG9mIHNhdmVkIFBDIGluIGptcF9idWYuICAqLwotKyAgaW50IGpiX3BjX29mZnNldDsKLSsKLSsgIC8qIERldGVjdCBzaWd0cmFtcC4gICovCi0rICBpbnQgKCpzaWd0cmFtcF9wKSAoc3RydWN0IGZyYW1lX2luZm8gKik7Ci0rCi0rICAvKiBHZXQgYWRkcmVzcyBvZiBzaWdjb250ZXh0IGZvciBzaWd0cmFtcC4gICovCi0rICBDT1JFX0FERFIgKCpzaWdjb250ZXh0X2FkZHIpIChzdHJ1Y3QgZnJhbWVfaW5mbyAqKTsKLSsKLSsgIC8qIE9mZnNldCBvZiByZWdpc3RlcnMgaW4gYHN0cnVjdCBzaWdjb250ZXh0Jy4gICovCi0rICBpbnQgKnNjX3JlZ19vZmZzZXQ7Ci0rICBpbnQgc2NfbnVtX3JlZ3M7Ci0rCi0gICAvKiBOb24tTlVMTCB3aGVuIGRlYnVnZ2luZyBmcm9tIGEgY29yZSBmaWxlLiAgUHJvdmlkZXMgdGhlIG9mZnNldAotICAgICAgd2hlcmUgZWFjaCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgaXMgc3RvcmVkIGluc2lkZSB0aGUgYXNzb2NpYXRlZAotICAgICAgY29yZSBmaWxlIHNlY3Rpb24uICAqLwotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAotaW5kZXggODg1NGFmMC4uZWY0NDY4MiAxMDA2NDQKLS0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCi1AQCAtMTEzLDYgKzExMywxMSBAQCBzd2l0Y2ggLWdsb2IgLS0gW2lzdGFyZ2V0XSB7Ci0gICAgICAgICAgICAgYXBwZW5kIGxpbmstZmxhZ3MgIiAtbSBlbGYzMnBwYyIKLSAgICAgICAgIH0KLSAgICAgfQotKyAgICAic2gqLWxpbnV4KiIgewotKyAgICAgICAgc2V0IGFzbS1hcmNoIHNoLWxpbnV4Ci0rICAgICAgICBzZXQgYXNtLWZsYWdzICItSSR7c3JjZGlyfS8ke3N1YmRpcn0gLUkke29iamRpcn0vJHtzdWJkaXJ9IgotKwlzZXQgZGVidWctZmxhZ3MgIi1nZHdhcmYtMiIKLSsgICAgfQotICAgICAic2gqLSotKiIgewotICAgICAgICAgc2V0IGFzbS1hcmNoIHNoCi0gCXNldCBkZWJ1Zy1mbGFncyAiLWdkd2FyZi0yIgotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCi1pbmRleCBhNGE1ZmM1Li44OWVmZWQ3IDEwMDY0NAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYwotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYwotQEAgLTQwLDkgKzQwLDggQEAKLSAJbW92LmwgICAuTGNvbnN0XEAscjEKLSAJYnJhCS5MYWZ0ZXJjb25zdFxACi0gCW5vcAotLQlub3AKLS0uTGNvbnN0XEA6Ci0gCS5hbGlnbgkyCi0rLkxjb25zdFxAOgotIAkubG9uZwlcc3VicgotIAkuYWxpZ24JMQotIC5MYWZ0ZXJjb25zdFxAOgotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKLWluZGV4IDQyNGUxYjguLjBkZTJlN2IgMTAwNjQ0Ci0tLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYwotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKLUBAIC0xLDYgKzEsOSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzaWduYWwuaD4KLSAKLSsjaWZkZWYgX19zaF9fCi0rI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLwotKyNlbmRpZgotIAotIHZvaWQKLSBoYW5kbGVfVVNSMSAoaW50IHNpZykKLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCi1pbmRleCA0MjRlMWI4Li45NTJhYWYyIDEwMDY0NAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCi1AQCAtMSw2ICsxLDEwIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHNpZ25hbC5oPgotIAotKyNpZmRlZiBfX3NoX18KLSsjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCi0rI2VuZGlmCi0rCi0gCi0gdm9pZAotIGhhbmRsZV9VU1IxIChpbnQgc2lnKQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCi1pbmRleCA4MWYzYjA4Li4xNTc0YjJkIDEwMDY0NAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYwotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYwotQEAgLTEsNiArMSw5IEBACi0gI2luY2x1ZGUgPHNpZ25hbC5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAKLSsjaWZkZWYgX19zaF9fCi0rI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLwotKyNlbmRpZgotIAotIC8qIFNpZ25hbCBoYW5kbGVycywgd2Ugc2V0IGJyZWFrcG9pbnRzIGluIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgdGhlCi0gICAgc2lnbmFscyByZWFsbHkgZ2V0IGRlbGl2ZXJlZC4gICovCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYwotaW5kZXggNzU2NjA2OC4uMTIwNWE5YiAxMDA2NDQKLS0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYwotQEAgLTMsNiArMywxMCBAQAotICNpbmNsdWRlIDxzaWduYWwuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gCi0rI2lmZGVmIF9fc2hfXwotKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KLSsjZGVmaW5lIGFsYXJtKGEpICAgICAgIC8qIERpdHRvIGZvciBhbGFybSgpICovCi0rI2VuZGlmCi0gCi0gc3RhdGljIGludCBjb3VudCA9IDA7Ci0gCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtbWlwcy1saW51eC1uYXQtRGVmaW5lLV9BQklPMzItaWYtbm90LWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjNzkzOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gODhlNjdjYWVkNjYyZDgzNDRjOGRiNTYxNzZjOWYxMjIxZTZjZDJhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIzIE1hciAyMDE2IDA2OjMwOjA5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTBdIG1pcHMtbGludXgtbmF0OiBEZWZpbmUgX0FCSU8zMiBpZiBub3QgZGVmaW5lZAorCitUaGlzIGhlbHBzIGJ1aWxkaW5nIGdkYiBvbiBtaXBzNjQgb24gbXVzbCwgc2luY2UKK211c2wgZG9lcyBub3QgcHJvdmlkZSBzZ2lkZWZzLmggdGhpcyBkZWZpbmUgaXMKK29ubHkgZGVmaW5lZCB3aGVuIEdDQyBpcyB1c2luZyBvMzIgQUJJLCBpbiB0aGF0CitjYXNlIGdjYyBlbWl0cyBpdCBhcyBidWlsdC1pbiBkZWZpbmUgYW5kIGhlbmNlCitpdCB3b3JrcyBvayBmb3IgbWlwczMyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgZ2RiL21pcHMtbGludXgtbmF0LmMgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2RiL21pcHMtbGludXgtbmF0LmMgYi9nZGIvbWlwcy1saW51eC1uYXQuYworaW5kZXggYmZlOWZjYi4uNDQ5YjQzYSAxMDA2NDQKKy0tLSBhL2dkYi9taXBzLWxpbnV4LW5hdC5jCisrKysgYi9nZGIvbWlwcy1saW51eC1uYXQuYworQEAgLTQ2LDYgKzQ2LDExIEBACisgI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBIDI1CisgI2VuZGlmCisgCisrLyogbXVzbCBkb2VzIG5vdCBkZWZpbmUgYW5kIHJlbGllcyBvbiBjb21waWxlciBidWlsdC1pbiBtYWNyb3MgZm9yIGl0ICAgKi8KKysjaWZuZGVmIF9BQklPMzIKKysjZGVmaW5lIF9BQklPMzIgMQorKyNlbmRpZgorKworIC8qIEFzc3VtZSB0aGF0IHdlIGhhdmUgUFRSQUNFX0dFVFJFR1MgZXQgYWwuIHN1cHBvcnQuICBJZiB3ZSBkbyBub3QsCisgICAgd2UnbGwgY2xlYXIgdGhpcyBhbmQgdXNlIFBUUkFDRV9QRUVLVVNFUiBpbnN0ZWFkLiAgKi8KKyBzdGF0aWMgaW50IGhhdmVfcHRyYWNlX3JlZ3NldHMgPSAxOworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNC1wcGMtcHRyYWNlLURlZmluZS1wdF9yZWdzLXVhcGlfcHRfcmVncy1vbi1HTElCQy1zeXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDQtcHBjLXB0cmFjZS1EZWZpbmUtcHRfcmVncy11YXBpX3B0X3JlZ3Mtb24tR0xJQkMtc3lzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWZlMmEyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDQtcHBjLXB0cmFjZS1EZWZpbmUtcHRfcmVncy11YXBpX3B0X3JlZ3Mtb24tR0xJQkMtc3lzdC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGJlYzU2NGViNDU0YmM3ZmM2ZWNmY2I1NzNhYTUzMDQwYmYzOWMxZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAzMCBBcHIgMjAxNiAxNjo0NjowMyArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzEwXSBwcGMvcHRyYWNlOiBEZWZpbmUgcHRfcmVncyB1YXBpX3B0X3JlZ3Mgb24gIUdMSUJDCisgc3lzdGVtcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIHwgNiArKysrKysKKyBnZGIvbmF0L3BwYy1saW51eC5oICAgICAgICAgICB8IDYgKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jCitpbmRleCAyMTQ1YzUwLi43Nzc5MDVkIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jCitAQCAtMjEsNyArMjEsMTMgQEAKKyAjaW5jbHVkZSAibGludXgtbG93LmgiCisgCisgI2luY2x1ZGUgPGVsZi5oPgorKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCisrIyBkZWZpbmUgcHRfcmVncyB1YXBpX3B0X3JlZ3MKKysjZW5kaWYKKyAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCisrIyB1bmRlZiBwdF9yZWdzCisrI2VuZGlmCisgCisgI2luY2x1ZGUgIm5hdC9wcGMtbGludXguaCIKKyAKK2RpZmYgLS1naXQgYS9nZGIvbmF0L3BwYy1saW51eC5oIGIvZ2RiL25hdC9wcGMtbGludXguaAoraW5kZXggODVmYmNkOC4uY2JlYzljNSAxMDA2NDQKKy0tLSBhL2dkYi9uYXQvcHBjLWxpbnV4LmgKKysrKyBiL2dkYi9uYXQvcHBjLWxpbnV4LmgKK0BAIC0xOCw3ICsxOCwxMyBAQAorICNpZm5kZWYgUFBDX0xJTlVYX0gKKyAjZGVmaW5lIFBQQ19MSU5VWF9IIDEKKyAKKysjaWYgIWRlZmluZWQoX19HTElCQ19fKQorKyMgZGVmaW5lIHB0X3JlZ3MgdWFwaV9wdF9yZWdzCisrI2VuZGlmCisgI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKysjaWYgIWRlZmluZWQoX19HTElCQ19fKQorKyMgdW5kZWYgcHRfcmVncworKyNlbmRpZgorICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyAKKyAvKiBUaGlzIHNvbWV0aW1lcyBpc24ndCBkZWZpbmVkLiAgKi8KKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDUtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA1LUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwOWU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA1LUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKQEAgLTAsMCArMSw5MjEgQEAKK0Zyb20gOGM1ZmU1OGM1YTAwNDRkZGI1MTdhNDFiMjc3ZWQyN2ZiM2QzYmVkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6MzE6MTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xMF0gQWRkIHN1cHBvcnQgZm9yIFJlbmVzYXMgU0ggKHNoNCkgYXJjaGl0ZWN0dXJlLgorCitnZGIgKDcuNC0xfmN2czIwMTExMTE3LjIpIGV4cGVyaW1lbnRhbDsgdXJnZW5jeT1sb3cKKyAuCisgICAqIEFkZCBSZW5lc2FzIFNIIChzaDQpIHN1cHBvcnQgKENsb3NlczogIzU3NjI0MikKKyAgICAgLSBUaGFua3MgTm9idWhpcm8gSXdhbWF0c3UsIFRha2FzaGkgWW9zaGlpLgorQXV0aG9yOiBIZWN0b3IgT3JvbiA8enVtYmlAZGViaWFuLm9yZz4KK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTc2MjQyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdkYi9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgZ2RiL2NvbmZpZ3VyZS5ob3N0ICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBnZGIvc2gtbGludXgtdGRlcC5jICAgICAgICAgICAgICAgICAgfCA1MTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBnZGIvc2gtdGRlcC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTQgKystLQorIGdkYi9zaC10ZGVwLmggICAgICAgICAgICAgICAgICAgICAgICB8ICA0OSArKysrCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwIHwgICA1ICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jICAgICAgICAgfCAgIDMgKy0KKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYyAgICAgfCAgIDMgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jICAgICB8ICAgNCArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYyAgICAgIHwgICAzICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYyAgICAgfCAgIDQgKworIDExIGZpbGVzIGNoYW5nZWQsIDYxNyBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgoraW5kZXggZWMyYWY1Mi4uZGY4ZTg0ZCAxMDA2NDQKKy0tLSBhL2dkYi9NYWtlZmlsZS5pbgorKysrIGIvZ2RiL01ha2VmaWxlLmluCitAQCAtMTczNiw2ICsxNzM2LDcgQEAgQUxMREVQRklMRVMgPSBcCisgCXNjb3JlLXRkZXAuYyBcCisgCXNlci1nbzMyLmMgc2VyLXBpcGUuYyBzZXItdGNwLmMgc2VyLW1pbmd3LmMgXAorIAlzaC10ZGVwLmMgc2g2NC10ZGVwLmMgc2huYnNkLXRkZXAuYyBzaG5ic2QtbmF0LmMgXAorKwlzaC1saW51eC10ZGVwLmMgc2gtbGludXgtbmF0LmMgXAorIAlzb2wyLXRkZXAuYyBcCisgCXNvbGliLXN2cjQuYyBcCisgCXNwYXJjLWxpbnV4LW5hdC5jIHNwYXJjLWxpbnV4LXRkZXAuYyBcCitkaWZmIC0tZ2l0IGEvZ2RiL2NvbmZpZ3VyZS5ob3N0IGIvZ2RiL2NvbmZpZ3VyZS5ob3N0CitpbmRleCBlZjI2NWViLi4zMjJhMWUyIDEwMDY0NAorLS0tIGEvZ2RiL2NvbmZpZ3VyZS5ob3N0CisrKysgYi9nZGIvY29uZmlndXJlLmhvc3QKK0BAIC0xNDksNiArMTQ5LDcgQEAgcG93ZXJwYyotKi1saW51eCopCWdkYl9ob3N0PWxpbnV4IDs7CisgCisgczM5MCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OworIAorK3NoKi0qLWxpbnV4KikJCWdkYl9ob3N0PWxpbnV4IDs7Cisgc2gqLSotbmV0YnNkZWxmKiB8IHNoKi0qLWtuZXRic2QqLWdudSkKKyAJCQlnZGJfaG9zdD1uYnNkIDs7Cisgc2gqLSotb3BlbmJzZCopCQlnZGJfaG9zdD1uYnNkIDs7CitkaWZmIC0tZ2l0IGEvZ2RiL3NoLWxpbnV4LXRkZXAuYyBiL2dkYi9zaC1saW51eC10ZGVwLmMKK2luZGV4IDI0MThkMjUuLmFjOGVhOWUgMTAwNjQ0CistLS0gYS9nZGIvc2gtbGludXgtdGRlcC5jCisrKysgYi9nZGIvc2gtbGludXgtdGRlcC5jCitAQCAtMTgsMTQgKzE4LDM3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCisrI2luY2x1ZGUgImdkYmNvcmUuaCIKKysjaW5jbHVkZSAiZnJhbWUuaCIKKysjaW5jbHVkZSAiZnJhbWUtYmFzZS5oIgorKyNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIKKysjaW5jbHVkZSAiZHdhcmYyLWZyYW1lLmgiCisrI2luY2x1ZGUgInZhbHVlLmgiCisrI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisrI2luY2x1ZGUgImluZmVyaW9yLmgiCisgI2luY2x1ZGUgIm9zYWJpLmgiCisgCisrI2luY2x1ZGUgInJlZ2dyb3Vwcy5oIgorKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisrI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCisgI2luY2x1ZGUgInNvbGliLXN2cjQuaCIKKyAjaW5jbHVkZSAic3ltdGFiLmgiCisrI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIKKysjaW5jbHVkZSAiY29tbWFuZC5oIgorKyNpbmNsdWRlICJnZGJfYXNzZXJ0LmgiCisgCisgI2luY2x1ZGUgInRyYWQtZnJhbWUuaCIKKyAjaW5jbHVkZSAidHJhbXAtZnJhbWUuaCIKKyAKKysjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPHN5cy91c2VyLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisrCisrI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKysKKysjaW5jbHVkZSAicmVnc2V0LmgiCisgI2luY2x1ZGUgImdsaWJjLXRkZXAuaCIKKyAjaW5jbHVkZSAic2gtdGRlcC5oIgorICNpbmNsdWRlICJsaW51eC10ZGVwLmgiCitAQCAtMTgwLDkgKzIwMyw1MDUgQEAgc3RhdGljIHN0cnVjdCB0cmFtcF9mcmFtZSBzaF9saW51eF9ydF9zaWdyZXR1cm5fdHJhbXBfZnJhbWUgPSB7CisgICBzaF9saW51eF9ydF9zaWdyZXR1cm5faW5pdAorIH07CisgCisrLyogUmVjb2duaXppbmcgc2lnbmFsIGhhbmRsZXIgZnJhbWVzLiAgKi8KKysKKysvKiBHTlUvTGludXggaGFzIHR3byBmbGF2b3JzIG9mIHNpZ25hbHMuICBOb3JtYWwgc2lnbmFsIGhhbmRsZXJzLCBhbmQKKysgICAicmVhbHRpbWUiIChSVCkgc2lnbmFscy4gIFRoZSBSVCBzaWduYWxzIGNhbiBwcm92aWRlIGFkZGl0aW9uYWwKKysgICBpbmZvcm1hdGlvbiB0byB0aGUgc2lnbmFsIGhhbmRsZXIgaWYgdGhlIFNBX1NJR0lORk8gZmxhZyBpcyBzZXQKKysgICB3aGVuIGVzdGFibGlzaGluZyBhIHNpZ25hbCBoYW5kbGVyIHVzaW5nIGBzaWdhY3Rpb24nLiAgSXQgaXMgbm90CisrICAgdW5saWtlbHkgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgR05VL0xpbnV4IHdpbGwgc3VwcG9ydCBTQV9TSUdJTkZPCisrICAgZm9yIG5vcm1hbCBzaWduYWxzIHRvby4gICovCisrCisrLyogV2hlbiB0aGUgU0ggTGludXgga2VybmVsIGNhbGxzIGEgc2lnbmFsIGhhbmRsZXIgYW5kIHRoZQorKyAgIFNBX1JFU1RPUkVSIGZsYWcgaXNuJ3Qgc2V0LCB0aGUgcmV0dXJuIGFkZHJlc3MgcG9pbnRzIHRvIGEgYml0IG9mCisrICAgY29kZSBvbiB0aGUgc3RhY2suICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciB0aGUgUEMgYXBwZWFycyB0bworKyAgIGJlIHdpdGhpbiB0aGlzIGJpdCBvZiBjb2RlLgorKworKyAgIFRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBmb3Igbm9ybWFsIHNpZ25hbHMgaXMKKysgICAgICAgbW92LncgIDFmLHIzCisrICAgICAgIHRyYXBhICAjMTYKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgIDE6IC53b3JkICBfX05SX3NpZ3JldHVybgorKyAgIG9yIDB4OTMwNSAweGMzMTAgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDAwNzcuCisrCisrICAgQ2hlY2tpbmcgZm9yIHRoZSBjb2RlIHNlcXVlbmNlIHNob3VsZCBiZSBzb21ld2hhdCByZWxpYWJsZSwgYmVjYXVzZQorKyAgIHRoZSBlZmZlY3QgaXMgdG8gY2FsbCB0aGUgc3lzdGVtIGNhbGwgc2lncmV0dXJuLiAgVGhpcyBpcyB1bmxpa2VseQorKyAgIHRvIG9jY3VyIGFueXdoZXJlIG90aGVyIHRoYW4gYSBzaWduYWwgdHJhbXBvbGluZS4KKysKKysgICBJdCBraW5kIG9mIHN1Y2tzIHRoYXQgd2UgaGF2ZSB0byByZWFkIG1lbW9yeSBmcm9tIHRoZSBwcm9jZXNzIGluCisrICAgb3JkZXIgdG8gaWRlbnRpZnkgYSBzaWduYWwgdHJhbXBvbGluZSwgYnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQorKyAgIGFueSBvdGhlciB3YXkuICBUaGUgUENfSU5fU0lHVFJBTVAgbWFjcm8gaW4gdG0tbGludXguaCBhcnJhbmdlcyB0bworKyAgIG9ubHkgY2FsbCB1cyBpZiBubyBmdW5jdGlvbiBuYW1lIGNvdWxkIGJlIGlkZW50aWZpZWQsIHdoaWNoIHNob3VsZAorKyAgIGJlIHRoZSBjYXNlIHNpbmNlIHRoZSBjb2RlIGlzIG9uIHRoZSBzdGFjay4KKysKKysgICBEZXRlY3Rpb24gb2Ygc2lnbmFsIHRyYW1wb2xpbmVzIGZvciBoYW5kbGVycyB0aGF0IHNldCB0aGUKKysgICBTQV9SRVNUT1JFUiBmbGFnIGlzIGluIGdlbmVyYWwgbm90IHBvc3NpYmxlLiAgVW5mb3J0dW5hdGVseSB0aGlzIGlzCisrICAgd2hhdCB0aGUgR05VIEMgTGlicmFyeSBoYXMgYmVlbiBkb2luZyBmb3IgcXVpdGUgc29tZSB0aW1lIG5vdy4KKysgICBIb3dldmVyLCBhcyBvZiB2ZXJzaW9uIDIuMS4yLCB0aGUgR05VIEMgTGlicmFyeSB1c2VzIHNpZ25hbAorKyAgIHRyYW1wb2xpbmVzIChuYW1lZCBfX3Jlc3RvcmUgYW5kIF9fcmVzdG9yZV9ydCkgdGhhdCBhcmUgaWRlbnRpY2FsCisrICAgdG8gdGhlIG9uZXMgdXNlZCBieSB0aGUga2VybmVsLiAgVGhlcmVmb3JlLCB0aGVzZSB0cmFtcG9saW5lcyBhcmUKKysgICBzdXBwb3J0ZWQgdG9vLiAgKi8KKysKKysjZGVmaW5lIE1PVlcobikJICgweDkzMDB8KChuKS0yKSkJLyogTW92ZSBtZW0gd29yZCBhdCBQQytuIHRvIFIzICovCisrI2RlZmluZSBUUkFQMTYJIDB4YzMxMAkJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KKysjZGVmaW5lIE9SX1IwX1IwIDB4MjAwYgkJCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLworKworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjAJTU9WVyg3KQkJLyogTW92ZSBtZW0gd29yZCBhdCBQQys3IHRvIFIzICovCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMQlUUkFQMTYJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04yCU9SX1IwX1IwCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsaW51eF9zaWd0cmFtcF9jb2RlW10gPQorK3sKKysgIExJTlVYX1NJR1RSQU1QX0lOU04wLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjEsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgX19OUl9zaWdyZXR1cm4KKyt9OworKworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfTEVOIChzaXplb2YgbGludXhfc2lndHJhbXBfY29kZSkKKysKKysvKiBJZiBQQyBpcyBpbiBhIHNpZ3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YKKysgICB0aGUgcm91dGluZS4gIE90aGVyd2lzZSwgcmV0dXJuIDAuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9zaWd0cmFtcF9zdGFydCAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjIChuZXh0X2ZyYW1lKTsKKysgIGdkYl9ieXRlIGJ1ZltMSU5VWF9TSUdUUkFNUF9MRU5dOworKworKyAgLyogV2Ugb25seSByZWNvZ25pemUgYSBzaWduYWwgdHJhbXBvbGluZSBpZiBQQyBpcyBhdCB0aGUgc3RhcnQgb2YKKysgICAgIG9uZSBvZiB0aGUgdGhyZWUgaW5zdHJ1Y3Rpb25zLiAgV2Ugb3B0aW1pemUgZm9yIGZpbmRpbmcgdGhlIFBDIGF0CisrICAgICB0aGUgc3RhcnQsIGFzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbXBvbGluZSBpcyBub3QgdGhlCisrICAgICBmaXJzdCBmcmFtZSBvbiB0aGUgc3RhY2suICBXZSBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKKysgICAgIFBDIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aGVyZSB3aWxsIGJlCisrICAgICBhIGZldyB0cmFpbGluZyByZWFkYWJsZSBieXRlcyBvbiB0aGUgc3RhY2suICAqLworKworKyAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1NJR1RSQU1QX0xFTikpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9TSUdUUkFNUF9JTlNOMCkKKysgICAgeworKyAgICAgIGlmIChidWZbMF0gIT0gTElOVVhfU0lHVFJBTVBfSU5TTjEpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgICBwYyAtPSAyOworKworKyAgICAgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9TSUdUUkFNUF9MRU4pKQorKwlyZXR1cm4gMDsKKysgICAgfQorKworKyAgaWYgKG1lbWNtcCAoYnVmLCBsaW51eF9zaWd0cmFtcF9jb2RlLCBMSU5VWF9TSUdUUkFNUF9MRU4pICE9IDApCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIHBjOworK30KKysKKysvKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHNhbWUgZm9yIFJUIHNpZ25hbHMuICBIZXJlIHRoZSBpbnN0cnVjdGlvbgorKyAgIHNlcXVlbmNlIGlzCisrICAgICAgIG1vdi53ICAxZixyMworKyAgICAgICB0cmFwYSAgIzE2CisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAxOiAud29yZCAgX19OUl9ydF9zaWdyZXR1cm4KKysgICBvciAweDkzMDUgMHhjMzEwIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgwMGFkLgorKworKyAgIFRoZSBlZmZlY3QgaXMgdG8gY2FsbCB0aGUgc3lzdGVtIGNhbGwgcnRfc2lncmV0dXJuLiAgKi8KKysKKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04wCQlNT1ZXKDcpCQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDKzcgdG8gUjMgKi8KKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04xCQlUUkFQMTYJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yCQlPUl9SMF9SMAkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGludXhfcnRfc2lndHJhbXBfY29kZVtdID0KKyt7CisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMCwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04xLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIF9fTlJfcnRfc2lncmV0dXJuCisrfTsKKysKKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0xFTiAoc2l6ZW9mIGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGUpCisrCisrLyogSWYgUEMgaXMgaW4gYSBSVCBzaWd0cmFtcCByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0CisrICAgb2YgdGhlIHJvdXRpbmUuICBPdGhlcndpc2UsIHJldHVybiAwLiAgKi8KKysKKytzdGF0aWMgQ09SRV9BRERSCisrc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAobmV4dF9mcmFtZSk7CisrICBnZGJfYnl0ZSBidWZbTElOVVhfUlRfU0lHVFJBTVBfTEVOXTsKKysKKysgIC8qIFdlIG9ubHkgcmVjb2duaXplIGEgc2lnbmFsIHRyYW1wb2xpbmUgaWYgUEMgaXMgYXQgdGhlIHN0YXJ0IG9mCisrICAgICBvbmUgb2YgdGhlIHR3byBpbnN0cnVjdGlvbnMuICBXZSBvcHRpbWl6ZSBmb3IgZmluZGluZyB0aGUgUEMgYXQKKysgICAgIHRoZSBzdGFydCwgYXMgd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzIG5vdCB0aGUKKysgICAgIGZpcnN0IGZyYW1lIG9uIHRoZSBzdGFjay4gIFdlIGFzc3VtZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZQorKyAgICAgUEMgaXMgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHRoZXJlIHdpbGwgYmUKKysgICAgIGEgZmV3IHRyYWlsaW5nIHJlYWRhYmxlIGJ5dGVzIG9uIHRoZSBzdGFjay4gICovCisrCisrICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAoYnVmWzBdICE9IExJTlVYX1JUX1NJR1RSQU1QX0lOU04wKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMSkKKysJcmV0dXJuIDA7CisrCisrICAgICAgcGMgLT0gMjsKKysKKysgICAgICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwKKysJCQkJICAgICBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pKQorKwlyZXR1cm4gMDsKKysgICAgfQorKworKyAgaWYgKG1lbWNtcCAoYnVmLCBsaW51eF9ydF9zaWd0cmFtcF9jb2RlLCBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pICE9IDApCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIHBjOworK30KKysKKysvKiBSZXR1cm4gd2hldGhlciBQQyBpcyBpbiBhIEdOVS9MaW51eCBzaWd0cmFtcCByb3V0aW5lLiAgKi8KKysKKytzdGF0aWMgaW50Cisrc2hfbGludXhfc2lndHJhbXBfcCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKKysgIGNoYXIgKm5hbWU7CisrCisrICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAmbmFtZSwgTlVMTCwgTlVMTCk7CisrCisrICAvKiBJZiB3ZSBoYXZlIE5BTUUsIHdlIGNhbiBvcHRpbWl6ZSB0aGUgc2VhcmNoLiAgVGhlIHRyYW1wb2xpbmVzIGFyZQorKyAgICAgbmFtZWQgX19yZXN0b3JlIGFuZCBfX3Jlc3RvcmVfcnQuICBIb3dldmVyLCB0aGV5IGFyZW4ndCBkeW5hbWljYWxseQorKyAgICAgZXhwb3J0ZWQgZnJvbSB0aGUgc2hhcmVkIEMgbGlicmFyeSwgc28gdGhlIHRyYW1wb2xpbmUgbWF5IGFwcGVhciB0bworKyAgICAgYmUgcGFydCBvZiB0aGUgcHJlY2VkaW5nIGZ1bmN0aW9uLiAgVGhpcyBzaG91bGQgYWx3YXlzIGJlIHNpZ2FjdGlvbiwKKysgICAgIF9fc2lnYWN0aW9uLCBvciBfX2xpYmNfc2lnYWN0aW9uIChhbGwgYWxpYXNlcyB0byB0aGUgc2FtZSBmdW5jdGlvbikuICAqLworKyAgaWYgKG5hbWUgPT0gTlVMTCB8fCBzdHJzdHIgKG5hbWUsICJzaWdhY3Rpb24iKSAhPSBOVUxMKQorKyAgICByZXR1cm4gKHNoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKSAhPSAwCisrCSAgICB8fCBzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSkgIT0gMCk7CisrCisrICByZXR1cm4gKHN0cmNtcCAoIl9fcmVzdG9yZSIsIG5hbWUpID09IDAKKysJICB8fCBzdHJjbXAgKCJfX3Jlc3RvcmVfcnQiLCBuYW1lKSA9PSAwKTsKKyt9CisrCisrLyogT2Zmc2V0IHRvIHN0cnVjdCBzaWdjb250ZXh0IGluIHVjb250ZXh0LCBmcm9tIDxhc20vdWNvbnRleHQuaD4uICAqLworKyNkZWZpbmUgU0hfTElOVVhfVUNPTlRFWFRfU0lHQ09OVEVYVF9PRkZTRVQgMTIKKysKKysKKysvKiBBc3N1bWluZyBORVhUX0ZSQU1FIGlzIGEgZnJhbWUgZm9sbG93aW5nIGEgR05VL0xpbnV4IHNpZ3RyYW1wCisrICAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHNpZ2NvbnRleHQgc3RydWN0dXJlLiAgKi8KKysKKytzdGF0aWMgQ09SRV9BRERSCisrc2hfbGludXhfc2lnY29udGV4dF9hZGRyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGM7CisrICBDT1JFX0FERFIgc3A7CisrCisrICBzcCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgU1BfUkVHTlVNKTsKKysKKysgIHBjID0gc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpOworKyAgaWYgKHBjKQorKyAgICB7CisrICAgICAgcmV0dXJuIHNwOworKyAgICB9CisrCisrICBwYyA9IHNoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKTsKKysgIGlmIChwYykKKysgICAgeworKyAgICAgIENPUkVfQUREUiB1Y29udGV4dF9hZGRyOworKworKyAgICAgIC8qIFRoZSBzaWdjb250ZXh0IHN0cnVjdHVyZSBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbnRleHQuICBBCisrCSBwb2ludGVyIHRvIHRoZSB1c2VyIGNvbnRleHQgaXMgcGFzc2VkIGFzIHRoZSB0aGlyZCBhcmd1bWVudAorKwkgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLiAgKi8KKysgICAgICB1Y29udGV4dF9hZGRyID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBBUkcwX1JFR05VTSsyKTsKKysgICAgICByZXR1cm4gdWNvbnRleHRfYWRkciArIFNIX0xJTlVYX1VDT05URVhUX1NJR0NPTlRFWFRfT0ZGU0VUOworKyAgICB9CisrCisrICBlcnJvciAoIkNvdWxkbid0IHJlY29nbml6ZSBzaWduYWwgdHJhbXBvbGluZS4iKTsKKysgIHJldHVybiAwOworK30KKysKKysvKiBTaWduYWwgdHJhbXBvbGluZXMuICAqLworK2V4dGVybiBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKnNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKTsKKysKKytzdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorK3sKKysgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZXRfY3VycmVudF9hcmNoICgpKTsKKysgIENPUkVfQUREUiBzaWdjb250ZXh0X2FkZHI7CisrCisrICBpZiAoKnRoaXNfY2FjaGUpCisrICAgIHJldHVybiAqdGhpc19jYWNoZTsKKysKKysgIGNhY2hlID0gc2hfYWxsb2NfZnJhbWVfY2FjaGUgKCk7CisrCisrICBjYWNoZS0+YmFzZSA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgU1BfUkVHTlVNKTsKKysgIHNpZ2NvbnRleHRfYWRkciA9IHRkZXAtPnNpZ2NvbnRleHRfYWRkciAodGhpc19mcmFtZSk7CisrICBpZiAodGRlcC0+c2NfcmVnX29mZnNldCkKKysgICAgeworKyAgICAgIGludCBpOworKworKyAgICAgIGdkYl9hc3NlcnQgKHRkZXAtPnNjX251bV9yZWdzIDw9IFNIX05VTV9SRUdTKTsKKysKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+c2NfbnVtX3JlZ3M7IGkrKykKKysJaWYgKHRkZXAtPnNjX3JlZ19vZmZzZXRbaV0gIT0gLTEpCisrCSAgY2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBzaWdjb250ZXh0X2FkZHIgKyB0ZGVwLT5zY19yZWdfb2Zmc2V0W2ldOworKyAgICB9CisrCisrICAqdGhpc19jYWNoZSA9IGNhY2hlOworKyAgcmV0dXJuIGNhY2hlOworK30KKysKKytzdGF0aWMgdm9pZAorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3RoaXNfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKKysJCQkgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKKyt7CisrICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlID0KKysgICAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOworKworKyAgKCp0aGlzX2lkKSA9IGZyYW1lX2lkX2J1aWxkIChjYWNoZS0+YmFzZSArIDY0LCBjYWNoZS0+cGMpOworK30KKysKKytleHRlcm4gc3RydWN0IHZhbHVlICogc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoKTsKKytzdGF0aWMgc3RydWN0IHZhbHVlICoKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKysgICAgICAgICAgICAgICAgICAgdm9pZCAqKnRoaXNfY2FjaGUsIGludCByZWdudW0pCisreworKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOworKworKyAgcmV0dXJuIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUsIHJlZ251bSk7CisrfQorKworK3N0YXRpYyBpbnQKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9zbmlmZmVyIChjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICpzZWxmLAorKyAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisrICAgICAgICAgICAgICAgICB2b2lkICoqdGhpc19wcm9sb2d1ZV9jYWNoZSkKKyt7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSkpOworKworKyAgLyogV2Ugc2hvdWxkbid0IGV2ZW4gYm90aGVyIGlmIHdlIGRvbid0IGhhdmUgYSBzaWdjb250ZXh0X2FkZHIKKysgICAgIGhhbmRsZXIuICAqLworKyAgaWYgKHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9PSBOVUxMKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmICh0ZGVwLT5zaWd0cmFtcF9wICE9IE5VTEwpCisrICAgIHsKKysgICAgICBpZiAodGRlcC0+c2lndHJhbXBfcCAodGhpc19mcmFtZSkpCisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdW53aW5kID0KKyt7CisrICBTSUdUUkFNUF9GUkFNRSwKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3RoaXNfaWQsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9wcmV2X3JlZ2lzdGVyLAorKyAgTlVMTCwKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3NuaWZmZXIKKyt9OworKworKy8qIFN1cHBseSByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBHUkVHUyBhbmQgTEVOCisrICAgaW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBzZXQgUkVHU0VUIHRvIHJlZ2lzdGVyIGNhY2hlCisrICAgUkVHQ0FDSEUuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKyt2b2lkCisrc2hfc3VwcGx5X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZ3JlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNvbnN0IGNoYXIgKnJlZ3MgPSBncmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5ncmVnc2V0X251bV9yZWdzOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoKHJlZ251bSA9PSBpIHx8IHJlZ251bSA9PSAtMSkKKysgICAgICAmJiB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0gIT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpLCByZWdzICsgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldKTsKKysgICAgfQorK30KKysKKysvKiBDb2xsZWN0IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSByZWdpc3RlciBjYWNoZSBSRUdDQUNIRSBhbmQgc3RvcmUKKysgICBpdCBpbiB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBHUkVHUyBhbmQgTEVOIGFzIGRlc2NyaWJlZCBieSB0aGUKKysgICBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0IFJFR1NFVC4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IKKysgICBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrdm9pZAorK3NoX2NvbGxlY3RfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LAorKyAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgIGludCByZWdudW0sIHZvaWQgKmdyZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjaGFyICpyZWdzID0gZ3JlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+Z3JlZ3NldF9udW1fcmVnczsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKChyZWdudW0gPT0gaSB8fCByZWdudW0gPT0gLTEpCisrICAgICAgJiYgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldICE9IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGksIHJlZ3MgKyB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0pOworKyAgICB9CisrfQorKworKy8qIFN1cHBseSByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBGUFJFR1MgYW5kIExFTgorKyAgIGluIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQgUkVHU0VUIHRvIHJlZ2lzdGVyIGNhY2hlCisrICAgUkVHQ0FDSEUuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3NoX3N1cHBseV9mcHJlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZnByZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjb25zdCBjaGFyICpyZWdzID0gZnByZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KTsKKysgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKHJlZ251bSA9PSBpKzI1IHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIGkrMjUsIHJlZ3MgKyBpKjQpOworKyAgICB9CisrICBpZiAocmVnbnVtID09IEZQU0NSX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBGUFNDUl9SRUdOVU0sIHJlZ3MgKyAzMio0KTsKKysgIGlmIChyZWdudW0gPT0gRlBVTF9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgRlBVTF9SRUdOVU0sIHJlZ3MgKyAzMyo0KTsKKyt9CisrCisrLyogQ29sbGVjdCByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgcmVnaXN0ZXIgY2FjaGUgUkVHQ0FDSEUgYW5kIHN0b3JlCisrICAgaXQgaW4gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRlBSRUdTIGFuZCBMRU4gYXMgZGVzY3JpYmVkIGJ5IHRoZQorKyAgIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldCBSRUdTRVQuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yCisrICAgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3N0YXRpYyB2b2lkCisrc2hfY29sbGVjdF9mcHJlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LAorKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICAgaW50IHJlZ251bSwgdm9pZCAqZnByZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjaGFyICpyZWdzID0gZnByZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KTsKKysgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKHJlZ251bSA9PSBpKzI1IHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBpKzI1LCByZWdzICsgaSo0KTsKKysgICAgfQorKyAgaWYgKHJlZ251bSA9PSBGUFNDUl9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIEZQU0NSX1JFR05VTSwgcmVncyArIDMyKjQpOworKyAgaWYgKHJlZ251bSA9PSBGUFVMX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgRlBVTF9SRUdOVU0sIHJlZ3MgKyAzMyo0KTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RlciBzZXQgZm9yIHRoZSBjb3JlIHNlY3Rpb24gaWRlbnRpZmllZAorKyAgIGJ5IFNFQ1RfTkFNRSBhbmQgU0VDVF9TSVpFLiAgKi8KKysKKytjb25zdCBzdHJ1Y3QgcmVnc2V0ICoKKytzaF9saW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZWN0X25hbWUsIHNpemVfdCBzZWN0X3NpemUpCisreworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisrCisrICBpZiAoc3RyY21wIChzZWN0X25hbWUsICIucmVnIikgPT0gMCAmJiBzZWN0X3NpemUgPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpCisrICAgIHsKKysgICAgICBpZiAodGRlcC0+Z3JlZ3NldCA9PSBOVUxMKQorKyAgICB0ZGVwLT5ncmVnc2V0ID0gcmVnc2V0X2FsbG9jIChnZGJhcmNoLCBzaF9zdXBwbHlfZ3JlZ3NldCwKKysgICAgICAgICAgICAgICAgICAgICAgc2hfY29sbGVjdF9ncmVnc2V0KTsKKysgICAgICByZXR1cm4gdGRlcC0+Z3JlZ3NldDsKKysgICAgfQorKworKyAgaWYgKChzdHJjbXAgKHNlY3RfbmFtZSwgIi5yZWcyIikgPT0gMCAmJiBzZWN0X3NpemUgPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KSkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5mcHJlZ3NldCA9PSBOVUxMKQorKyAgICB0ZGVwLT5mcHJlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJjaCwgc2hfc3VwcGx5X2ZwcmVnc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgc2hfY29sbGVjdF9mcHJlZ3NldCk7CisrICAgICAgcmV0dXJuIHRkZXAtPmZwcmVnc2V0OworKyAgICB9CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogVGhlIHJlZ2lzdGVyIHNldHMgdXNlZCBpbiBHTlUvTGludXggRUxGIGNvcmUtZHVtcHMgYXJlIGlkZW50aWNhbCB0bworKyAgIHRoZSByZWdpc3RlciBzZXRzIGluIGBzdHJ1Y3QgdXNlcicgdGhhdCBhcmUgdXNlZCBmb3IgYS5vdXQKKysgICBjb3JlLWR1bXBzLiAgVGhlc2UgYXJlIGFsc28gdXNlZCBieSBwdHJhY2UoMikuICBUaGUgY29ycmVzcG9uZGluZworKyAgIHR5cGVzIGFyZSBgZWxmX2dyZWdzZXRfdCcgZm9yIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzICh3aXRoCisrICAgYGVsZl9ncmVnX3QnIHRoZSB0eXBlIG9mIGEgc2luZ2xlIEdQIHJlZ2lzdGVyKSBhbmQgYGVsZl9mcHJlZ3NldF90JworKyAgIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorKworKyAgIFRob3NlIHR5cGVzIHVzZWQgdG8gYmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBuYW1lcyBgZ3JlZ3NldF90JyBhbmQKKysgICBgZnByZWdzZXRfdCcgdG9vLCBhbmQgR0RCIHVzZWQgdGhvc2UgbmFtZXMgaW4gdGhlIHBhc3QuICBCdXQgdGhvc2UKKysgICBuYW1lcyBhcmUgbm93IHVzZWQgZm9yIHRoZSByZWdpc3RlciBzZXRzIHVzZWQgaW4gdGhlIGBtY29udGV4dF90JworKyAgIHR5cGUsIHdoaWNoIGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSBhbmQgbGF5b3V0LiAgKi8KKysKKysvKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdCB1c2VyJworKyAgIGZvcm1hdCBhbmQgR0RCJ3MgcmVnaXN0ZXIgY2FjaGUgbGF5b3V0LiAgKi8KKysKKysvKiBGcm9tIDxzeXMvcmVnLmg+LiAgKi8KKytzdGF0aWMgaW50IHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldFtdID0KKyt7CisrIDAsCTQsCTgsCTEyLAkxNiwJMjAsCTI0LAkyOCwKKysgMzIsCTM2LAk0MCwJNDQsCTQ4LAk1MiwJNTYsCTYwLAorKworKyBSRUdfUEMqNCwgICBSRUdfUFIqNCwgICBSRUdfR0JSKjQsICAtMSwKKysgUkVHX01BQ0gqNCwgUkVHX01BQ0wqNCwgUkVHX1NSKjQsCisrfTsKKysKKysvKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdAorKyAgIHNpZ2NvbnRleHQnIGZvcm1hdCBhbmQgR0RCJ3MgcmVnaXN0ZXIgY2FjaGUgbGF5b3V0LiAgKi8KKysKKysvKiBGcm9tIDxhc20vc2lnY29udGV4dC5oPi4gICovCisrc3RhdGljIGludCBzaF9saW51eF9zY19yZWdfb2Zmc2V0W10gPQorK3sKKysgNCwJOCwJMTIsCTE2LAkyMCwJMjQsCTI4LAkzMiwKKysgMzYsCTQwLAk0NCwJNDgsCTUyLAk1NiwJNjAsCTY0LAorKyA2OCwJNzIsCTgwLAktMSwKKysgODQsCTg4LAk3NgorK307CisrCisgc3RhdGljIHZvaWQKKyBzaF9saW51eF9pbml0X2FiaSAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKKyB7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKysgIGJmZCBhYmZkOworKworKyAgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0ID0gc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0OworKyAgdGRlcC0+Z3JlZ3NldF9udW1fcmVncyA9IEFSUkFZX1NJWkUgKHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldCk7CisrICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IDIzICogNDsKKysKKysgIHRkZXAtPmpiX3BjX29mZnNldCA9IDMyOyAgICAgLyogRnJvbSA8Yml0cy9zZXRqbXAuaD4uICAqLworKworKyAgdGRlcC0+c2lndHJhbXBfcCA9IHNoX2xpbnV4X3NpZ3RyYW1wX3A7CisrICB0ZGVwLT5zaWdjb250ZXh0X2FkZHIgPSBzaF9saW51eF9zaWdjb250ZXh0X2FkZHI7CisrICB0ZGVwLT5zY19yZWdfb2Zmc2V0ID0gc2hfbGludXhfc2NfcmVnX29mZnNldDsKKysgIHRkZXAtPnNjX251bV9yZWdzID0gQVJSQVlfU0laRSAoc2hfbGludXhfc2NfcmVnX29mZnNldCk7CisrCisrICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyKGdkYmFyY2gsICZzaF9saW51eF9zaWd0cmFtcF9mcmFtZV91bndpbmQpOworKworKyAgLyogSWYgd2UgaGF2ZSBhIHJlZ2lzdGVyIG1hcHBpbmcsIGVuYWJsZSB0aGUgZ2VuZXJpYyBjb3JlIGZpbGUKKysgICAgIHN1cHBvcnQsIHVubGVzcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQuICAqLworKyAgaWYgKHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldAorKyAgICAgICYmICFnZGJhcmNoX3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbl9wIChnZGJhcmNoKSkKKysgICAgc2V0X2dkYmFyY2hfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uIChnZGJhcmNoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hfbGludXhfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uKTsKKysKKyAgIGxpbnV4X2luaXRfYWJpIChpbmZvLCBnZGJhcmNoKTsKKyAKKyAgIC8qIEdOVS9MaW51eCB1c2VzIFNWUjQtc3R5bGUgc2hhcmVkIGxpYnJhcmllcy4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3NoLXRkZXAuYyBiL2dkYi9zaC10ZGVwLmMKK2luZGV4IDMzNmI0OGUuLjg0N2IyNzEgMTAwNjQ0CistLS0gYS9nZGIvc2gtdGRlcC5jCisrKysgYi9nZGIvc2gtdGRlcC5jCitAQCAtMjEsNiArMjEsOSBAQAorICAgIHNhY0BjeWdudXMuY29tLiAgKi8KKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbW1hbmQuaCIKKysjaW5jbHVkZSAiZHVtbXktZnJhbWUuaCIKKyAjaW5jbHVkZSAiZnJhbWUuaCIKKyAjaW5jbHVkZSAiZnJhbWUtYmFzZS5oIgorICNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIKK0BAIC0zNSw2ICszOCw3IEBACisgI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyAjaW5jbHVkZSAiZmxvYXRmb3JtYXQuaCIKKyAjaW5jbHVkZSAicmVnY2FjaGUuaCIKKysjaW5jbHVkZSAicmVnc2V0LmgiCisgI2luY2x1ZGUgImRvdWJsZXN0LmgiCisgI2luY2x1ZGUgIm9zYWJpLmgiCisgI2luY2x1ZGUgInJlZ2dyb3Vwcy5oIgorQEAgLTY3LDIzICs3MSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzaF9jY19lbnVtW10gPSB7CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKnNoX2FjdGl2ZV9jYWxsaW5nX2NvbnZlbnRpb24gPSBzaF9jY19nY2M7CisgCistI2RlZmluZSBTSF9OVU1fUkVHUyA2NworLQorLXN0cnVjdCBzaF9mcmFtZV9jYWNoZQorLXsKKy0gIC8qIEJhc2UgYWRkcmVzcy4gICovCistICBDT1JFX0FERFIgYmFzZTsKKy0gIExPTkdFU1Qgc3Bfb2Zmc2V0OworLSAgQ09SRV9BRERSIHBjOworLQorLSAgLyogRmxhZyBzaG93aW5nIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBwcm9sb2d1ZSBjb2RlLiAgKi8KKy0gIGludCB1c2VzX2ZwOworLQorLSAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKy0gIENPUkVfQUREUiBzYXZlZF9yZWdzW1NIX05VTV9SRUdTXTsKKy0gIENPUkVfQUREUiBzYXZlZF9zcDsKKy19OworLQorIHN0YXRpYyBpbnQKKyBzaF9pc19yZW5lc2FzX2NhbGxpbmdfY29udmVudGlvbiAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSkKKyB7CitAQCAtMTA0Myw3ICsxMDMwLDcgQEAgc2hfdHJlYXRfYXNfZmx0X3AgKHN0cnVjdCB0eXBlICp0eXBlKQorICAgICByZXR1cm4gMDsKKyAgIC8qIE90aGVyd2lzZSBpZiB0aGUgdHlwZSBvZiB0aGF0IG1lbWJlciBpcyBmbG9hdCwgdGhlIHdob2xlIHR5cGUgaXMKKyAgICAgIHRyZWF0ZWQgYXMgZmxvYXQuICAqLworLSAgaWYgKFRZUEVfQ09ERSAoVFlQRV9GSUVMRF9UWVBFICh0eXBlLCAwKSkgPT0gVFlQRV9DT0RFX0ZMVCkKKysgIGlmIChUWVBFX0NPREUgKGNoZWNrX3R5cGVkZWYgKFRZUEVfRklFTERfVFlQRSAodHlwZSwgMCkpKSA9PSBUWVBFX0NPREVfRkxUKQorICAgICByZXR1cm4gMTsKKyAgIC8qIE90aGVyd2lzZSBpdCdzIG5vdCB0cmVhdGVkIGFzIGZsb2F0LiAgKi8KKyAgIHJldHVybiAwOworQEAgLTEwOTMsNyArMTA4MCw3IEBAIHNoX3B1c2hfZHVtbXlfY2FsbF9mcHUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorICAgICAgaW4gZm91ciByZWdpc3RlcnMgYXZhaWxhYmxlLiAgTG9vcCB0aHJ1IGFyZ3MgZnJvbSBmaXJzdCB0byBsYXN0LiAgKi8KKyAgIGZvciAoYXJnbnVtID0gMDsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQorICAgICB7CistICAgICAgdHlwZSA9IHZhbHVlX3R5cGUgKGFyZ3NbYXJnbnVtXSk7CisrICAgICAgdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHZhbHVlX3R5cGUgKGFyZ3NbYXJnbnVtXSkpOworICAgICAgIGxlbiA9IFRZUEVfTEVOR1RIICh0eXBlKTsKKyAgICAgICB2YWwgPSBzaF9qdXN0aWZ5X3ZhbHVlX2luX3JlZyAoZ2RiYXJjaCwgYXJnc1thcmdudW1dLCBsZW4pOworIAorQEAgLTE4MjEsNyArMTgwOCw3IEBAIHNoX2R3YXJmMl9mcmFtZV9pbml0X3JlZyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0sCisgICAgIHJlZy0+aG93ID0gRFdBUkYyX0ZSQU1FX1JFR19VTkRFRklORUQ7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3N0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCisgeworICAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZTsKK0BAIC0xODQ4LDcgKzE4MzUsNyBAQCBzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCkKKyAgIHJldHVybiBjYWNoZTsKKyB9CisgCistc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKyBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorIHsKKyAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworQEAgLTE5MTUsOSArMTkwMiw5IEBAIHNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisgICByZXR1cm4gY2FjaGU7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorLXNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorLQkJCXZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQorK3N0cnVjdCB2YWx1ZSAqCisrc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlLAorKwkJCWludCByZWdudW0pCisgeworICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7CisgICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlID0gc2hfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOworQEAgLTE5MzEsNyArMTkxOCw3IEBAIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorICAgICAgdGhlIGN1cnJlbnQgZnJhbWUuICBGcm9iIHJlZ251bSBzbyB0aGF0IHdlIHB1bGwgdGhlIHZhbHVlIGZyb20KKyAgICAgIHRoZSBjb3JyZWN0IHBsYWNlLiAgKi8KKyAgIGlmIChyZWdudW0gPT0gZ2RiYXJjaF9wY19yZWdudW0gKGdkYmFyY2gpKQorLSAgICByZWdudW0gPSBQUl9SRUdOVU07CisrICAgIHJlZ251bSA9IFBSX1JFR05VTTsgLyogWFhYOiByZWFsbHk/ICovCisgCisgICBpZiAocmVnbnVtIDwgU0hfTlVNX1JFR1MgJiYgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAhPSAtMSkKKyAgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfbWVtb3J5ICh0aGlzX2ZyYW1lLCByZWdudW0sCitAQCAtMjI0MCw4ICsyMjI3LDggQEAgc2hfcmV0dXJuX2luX2ZpcnN0X2hpZGRlbl9wYXJhbV9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyBzdGF0aWMgc3RydWN0IGdkYmFyY2ggKgorIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgeworLSAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7CisgICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwOworKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7CisgCisgICAvKiBTSDUgaXMgaGFuZGxlZCBlbnRpcmVseSBpbiBzaDY0LXRkZXAuYy4gICovCisgICBpZiAoaW5mby5iZmRfYXJjaF9pbmZvLT5tYWNoID09IGJmZF9tYWNoX3NoNSkKK0BAIC0yMjU3LDYgKzIyNDQsMTggQEAgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKKyAgIHRkZXAgPSBYQ05FVyAoc3RydWN0IGdkYmFyY2hfdGRlcCk7CisgICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRkZXApOworIAorKyAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCisrICB0ZGVwLT5ncmVnc2V0ID0gTlVMTDsKKysgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9IE5VTEw7CisrICB0ZGVwLT5ncmVnc2V0X251bV9yZWdzID0gMjM7CisrICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IDA7CisrCisrICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLworKyAgdGRlcC0+ZnByZWdzZXQgPSBOVUxMOworKyAgdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0ID0gMzQqNDsKKysKKysgIHRkZXAtPmpiX3BjX29mZnNldCA9IC0xOworKworICAgc2V0X2dkYmFyY2hfc2hvcnRfYml0IChnZGJhcmNoLCAyICogVEFSR0VUX0NIQVJfQklUKTsKKyAgIHNldF9nZGJhcmNoX2ludF9iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOworICAgc2V0X2dkYmFyY2hfbG9uZ19iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOworQEAgLTI0MDcsMTAgKzI0MDYsMTEgQEAgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKKyAgICAgICBicmVhazsKKyAgICAgfQorIAorKyAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdkYmFyY2gpOworKworICAgLyogSG9vayBpbiBBQkktc3BlY2lmaWMgb3ZlcnJpZGVzLCBpZiB0aGV5IGhhdmUgYmVlbiByZWdpc3RlcmVkLiAgKi8KKyAgIGdkYmFyY2hfaW5pdF9vc2FiaSAoaW5mbywgZ2RiYXJjaCk7CisgCistICBkd2FyZjJfYXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7CisgICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJhcmNoLCAmc2hfc3R1Yl91bndpbmQpOworICAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJnNoX2ZyYW1lX3Vud2luZCk7CisgCitkaWZmIC0tZ2l0IGEvZ2RiL3NoLXRkZXAuaCBiL2dkYi9zaC10ZGVwLmgKK2luZGV4IDY2Njk2OGYuLjYyYzY1YjUgMTAwNjQ0CistLS0gYS9nZGIvc2gtdGRlcC5oCisrKysgYi9nZGIvc2gtdGRlcC5oCitAQCAtMjEsNiArMjEsMTIgQEAKKyAKKyAvKiBDb250cmlidXRlZCBieSBTdGV2ZSBDaGFtYmVybGFpbiBzYWNAY3lnbnVzLmNvbS4gICovCisgCisrc3RydWN0IGZyYW1lX2luZm87Cisrc3RydWN0IGdkYmFyY2g7Cisrc3RydWN0IHJlZ2dyb3VwOworK3N0cnVjdCByZWdzZXQ7Cisrc3RydWN0IHJlZ2NhY2hlOworKworIC8qIFJlZ2lzdGVycyBmb3IgYWxsIFNIIHZhcmlhbnRzLiAgVXNlZCBhbHNvIGJ5IHNoMy1yb20uYy4gICovCisgZW51bQorICAgeworQEAgLTI5LDYgKzM1LDcgQEAgZW51bQorICAgICBBUkcwX1JFR05VTSA9IDQsCisgICAgIEFSR0xBU1RfUkVHTlVNID0gNywKKyAgICAgRlBfUkVHTlVNID0gMTQsCisrICAgIFNQX1JFR05VTSA9IDE1LAorICAgICBQQ19SRUdOVU0gPSAxNiwKKyAgICAgUFJfUkVHTlVNID0gMTcsCisgICAgIEdCUl9SRUdOVU0gPSAxOCwKK0BAIC04MSw2ICs4OCwyNCBAQCBlbnVtCisgICAgIEZWMF9SRUdOVU0gPSA3NiwKKyAgICAgRlZfTEFTVF9SRUdOVU0gPSA3OQorICAgfTsKKysjZGVmaW5lIFNIX05VTV9SRUdTIDY3CisrCisrc3RydWN0IHNoX2ZyYW1lX2NhY2hlCisreworKyAgLyogQmFzZSBhZGRyZXNzLiAgKi8KKysgIENPUkVfQUREUiBiYXNlOworKyAgTE9OR0VTVCBzcF9vZmZzZXQ7CisrICBDT1JFX0FERFIgcGM7CisrCisrICAvKiBGbGFnIHNob3dpbmcgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIHByb2xvZ3VlIGNvZGUuICovCisrICBpbnQgdXNlc19mcDsKKysKKysgIC8qIFNhdmVkIHJlZ2lzdGVycy4gICovCisrICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tTSF9OVU1fUkVHU107CisrICBDT1JFX0FERFIgc2F2ZWRfc3A7CisrfTsKKysKKytleHRlcm4gc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKTsKKyAKKyAvKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSByZWdpc3RlciBpbiBhIGNvcmUtZmlsZS4gICovCisgc3RydWN0IHNoX2NvcmVmaWxlX3JlZ21hcAorQEAgLTg5LDggKzExNCwzMiBAQCBzdHJ1Y3Qgc2hfY29yZWZpbGVfcmVnbWFwCisgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworIH07CisgCisrLyogc2ggYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGluZm9ybWF0aW9uLiAgKi8KKyBzdHJ1Y3QgZ2RiYXJjaF90ZGVwCisgeworKyAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCisrICBzdHJ1Y3QgcmVnc2V0ICpncmVnc2V0OworKyAgaW50ICpncmVnc2V0X3JlZ19vZmZzZXQ7CisrICBpbnQgZ3JlZ3NldF9udW1fcmVnczsKKysgIHNpemVfdCBzaXplb2ZfZ3JlZ3NldDsKKysKKysgIC8qIEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCisrICBzdHJ1Y3QgcmVnc2V0ICpmcHJlZ3NldDsKKysgIHNpemVfdCBzaXplb2ZfZnByZWdzZXQ7CisrCisrICAvKiBPZmZzZXQgb2Ygc2F2ZWQgUEMgaW4gam1wX2J1Zi4gICovCisrICBpbnQgamJfcGNfb2Zmc2V0OworKworKyAgLyogRGV0ZWN0IHNpZ3RyYW1wLiAgKi8KKysgIGludCAoKnNpZ3RyYW1wX3ApIChzdHJ1Y3QgZnJhbWVfaW5mbyAqKTsKKysKKysgIC8qIEdldCBhZGRyZXNzIG9mIHNpZ2NvbnRleHQgZm9yIHNpZ3RyYW1wLiAgKi8KKysgIENPUkVfQUREUiAoKnNpZ2NvbnRleHRfYWRkcikgKHN0cnVjdCBmcmFtZV9pbmZvICopOworKworKyAgLyogT2Zmc2V0IG9mIHJlZ2lzdGVycyBpbiBgc3RydWN0IHNpZ2NvbnRleHQnLiAgKi8KKysgIGludCAqc2NfcmVnX29mZnNldDsKKysgIGludCBzY19udW1fcmVnczsKKysKKyAgIC8qIE5vbi1OVUxMIHdoZW4gZGVidWdnaW5nIGZyb20gYSBjb3JlIGZpbGUuICBQcm92aWRlcyB0aGUgb2Zmc2V0CisgICAgICB3aGVyZSBlYWNoIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBpcyBzdG9yZWQgaW5zaWRlIHRoZSBhc3NvY2lhdGVkCisgICAgICBjb3JlIGZpbGUgc2VjdGlvbi4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCitpbmRleCA2ZDlhZWY4Li41YjY2YjQyIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKK0BAIC0xMTYsNiArMTE2LDExIEBAIHN3aXRjaCAtZ2xvYiAtLSBbaXN0YXJnZXRdIHsKKyAgICAgICAgICAgICBhcHBlbmQgbGluay1mbGFncyAiIC1tIGVsZjMycHBjIgorICAgICAgICAgfQorICAgICB9CisrICAgICJzaCotbGludXgqIiB7CisrICAgICAgICBzZXQgYXNtLWFyY2ggc2gtbGludXgKKysgICAgICAgIHNldCBhc20tZmxhZ3MgIi1JJHtzcmNkaXJ9LyR7c3ViZGlyfSAtSSR7b2JqZGlyfS8ke3N1YmRpcn0iCisrCXNldCBkZWJ1Zy1mbGFncyAiLWdkd2FyZi0yIgorKyAgICB9CisgICAgICJzaCotKi0qIiB7CisgICAgICAgICBzZXQgYXNtLWFyY2ggc2gKKyAJc2V0IGRlYnVnLWZsYWdzICItZ2R3YXJmLTIiCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKK2luZGV4IGE0YTVmYzUuLjg5ZWZlZDcgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCitAQCAtNDAsOSArNDAsOCBAQAorIAltb3YubCAgIC5MY29uc3RcQCxyMQorIAlicmEJLkxhZnRlcmNvbnN0XEAKKyAJbm9wCistCW5vcAorLS5MY29uc3RcQDoKKyAJLmFsaWduCTIKKysuTGNvbnN0XEA6CisgCS5sb25nCVxzdWJyCisgCS5hbGlnbgkxCisgLkxhZnRlcmNvbnN0XEA6CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYworaW5kZXggNDI0ZTFiOC4uMGRlMmU3YiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYworQEAgLTEsNiArMSw5IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisgCisgdm9pZAorIGhhbmRsZV9VU1IxIChpbnQgc2lnKQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKK2luZGV4IDQyNGUxYjguLjk1MmFhZjIxIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCitAQCAtMSw2ICsxLDEwIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisrCisgCisgdm9pZAorIGhhbmRsZV9VU1IxIChpbnQgc2lnKQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCitpbmRleCA4MWYzYjA4Li4xNTc0YjJkIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworQEAgLTEsNiArMSw5IEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorIAorIC8qIFNpZ25hbCBoYW5kbGVycywgd2Ugc2V0IGJyZWFrcG9pbnRzIGluIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgc2lnbmFscyByZWFsbHkgZ2V0IGRlbGl2ZXJlZC4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworaW5kZXggNzU2NjA2OC4uMTIwNWE5YiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworQEAgLTMsNiArMywxMCBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZGVmaW5lIGFsYXJtKGEpICAgICAgIC8qIERpdHRvIGZvciBhbGFybSgpICovCisrI2VuZGlmCisgCisgc3RhdGljIGludCBjb3VudCA9IDA7CisgCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA2LURvbnQtZGlzYWJsZS1saWJyZWFkbGluZS5hLXdoZW4tdXNpbmctZGlzYWJsZS1zdGF0aWMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNi1Eb250LWRpc2FibGUtbGlicmVhZGxpbmUuYS13aGVuLXVzaW5nLWRpc2FibGUtc3RhdGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NGQyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNi1Eb250LWRpc2FibGUtbGlicmVhZGxpbmUuYS13aGVuLXVzaW5nLWRpc2FibGUtc3RhdGljLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gZjM5MzJjYjI5NjBmZDU0NjU1YTQ0OGIxM2Q1YTViODBmMzU2ZjhkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE1OjI1OjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTBdIERvbnQgZGlzYWJsZSBsaWJyZWFkbGluZS5hIHdoZW4gdXNpbmcgLS1kaXNhYmxlLXN0YXRpYworCitJZiBnZGIgaXMgY29uZmlndXJlZCB3aXRoIC0tZGlzYWJsZS1zdGF0aWMgdGhlbiB0aGlzIGlzIGR1dGlmdWxseSBwYXNzZWQgdG8KK3JlYWRsaW5lIHdoaWNoIHRoZW4gZGlzYWJsZXMgbGlicmVhZGxpbmUuYSwgd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSB3aGVuIGdkYgordHJpZXMgdG8gbGluayBhZ2FpbnN0IHRoYXQuCisKK1RvIGVuc3VyZSB0aGF0IHJlYWRsaW5lIGFsd2F5cyBidWlsZHMgc3RhdGljIGxpYnJhcmllcywgcGFzcyAtLWVuYWJsZS1zdGF0aWMgdG8KK3RoZSBzdWItY29uZmlndXJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuZGVmIHwgMyArKy0KKyBNYWtlZmlsZS5pbiAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5kZWYgYi9NYWtlZmlsZS5kZWYKK2luZGV4IGVhODQ1M2UuLjBmYzY2YzYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5kZWYKKysrKyBiL01ha2VmaWxlLmRlZgorQEAgLTEwNCw3ICsxMDQsOCBAQCBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSBsaWJpY29udjsKKyAJCW1pc3Npbmc9IGluc3RhbGwtaHRtbDsKKyAJCW1pc3Npbmc9IGluc3RhbGwtaW5mbzsgfTsKKyBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSBtNDsgfTsKKy1ob3N0X21vZHVsZXM9IHsgbW9kdWxlPSByZWFkbGluZTsgfTsKKytob3N0X21vZHVsZXM9IHsgbW9kdWxlPSByZWFkbGluZTsKKysgICAgICAgICAgICAgICAgZXh0cmFfY29uZmlndXJlX2ZsYWdzPSctLWVuYWJsZS1zdGF0aWMnO307CisgaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gc2lkOyB9OworIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHNpbTsgfTsKKyBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSB0ZXhpbmZvOyBub19pbnN0YWxsPSB0cnVlOyB9OworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDI3MzNjNGQuLjNlMDRlODAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yNTM4MCw3ICsyNTM4MCw3IEBAIGNvbmZpZ3VyZS1yZWFkbGluZToKKyAJICAkJHMvJCRtb2R1bGVfc3JjZGlyL2NvbmZpZ3VyZSBcCisgCSAgLS1zcmNkaXI9JCR7dG9wZGlyfS8kJG1vZHVsZV9zcmNkaXIgXAorIAkgICQoSE9TVF9DT05GSUdBUkdTKSAtLWJ1aWxkPSR7YnVpbGRfYWxpYXN9IC0taG9zdD0ke2hvc3RfYWxpYXN9IFwKKy0JICAtLXRhcmdldD0ke3RhcmdldF9hbGlhc30gIFwKKysJICAtLXRhcmdldD0ke3RhcmdldF9hbGlhc30gLS1lbmFibGUtc3RhdGljIFwKKyAJICB8fCBleGl0IDEKKyBAZW5kaWYgcmVhZGxpbmUKKyAKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDctdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNy11c2UtYXNtLXNnaWRlZnMuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJmOGVlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDctdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAwNDg2NzVhOTE1YTcyOTg5ZjI2MTMzODY5NzU3MzBkYTAxNmU3YzVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmUgTWNDdXJkeSA8YW1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogU2F0LCAzMCBBcHIgMjAxNiAxNToyOTowNiAtMDcwMAorU3ViamVjdDogW1BBVENIIDA3LzEwXSB1c2UgPGFzbS9zZ2lkZWZzLmg+CisKK0J1aWxkIGZpeCBmb3IgTUlQUyB3aXRoIG11c2wgbGliYworCitUaGUgTUlQUyBzcGVjaWZpYyBoZWFkZXIgPHNnaWRlZnMuaD4gaXMgcHJvdmlkZWQgYnkgZ2xpYmMgYW5kIHVjbGliYworYnV0IG5vdCBieSBtdXNsLiBSZWdhcmRsZXNzIG9mIHRoZSBsaWJjLCB0aGUga2VybmVsIGhlYWRlcnMgcHJvdmlkZQorPGFzbS9zZ2lkZWZzLmg+IHdoaWNoIHByb3ZpZGVzIHRoZSBzYW1lIGRlZmluaXRpb25zLCBzbyB1c2UgdGhhdAoraW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL21pcHMtbGludXgtbmF0LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvbWlwcy1saW51eC1uYXQuYyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCitpbmRleCA0NDliNDNhLi4wOTYwM2RhIDEwMDY0NAorLS0tIGEvZ2RiL21pcHMtbGludXgtbmF0LmMKKysrKyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCitAQCAtMzEsNyArMzEsNyBAQAorICNpbmNsdWRlICJnZGJfcHJvY19zZXJ2aWNlLmgiCisgI2luY2x1ZGUgImdyZWdzZXQuaCIKKyAKKy0jaW5jbHVkZSA8c2dpZGVmcy5oPgorKyNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorICNpbmNsdWRlICJuYXQvZ2RiX3B0cmFjZS5oIgorICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisgCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA4LVVzZS1leG9ydGVkLWRlZmluaXRpb25zLW9mLVNJR1JUTUlOLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1OGI2MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA4LVVzZS1leG9ydGVkLWRlZmluaXRpb25zLW9mLVNJR1JUTUlOLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gZTU0ZWFkOWQ4MWY0ZDM4NDEyNzUxYjgxNWY5MDlkYjNjYjE0NGJiMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE1OjMxOjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTBdIFVzZSBleG9ydGVkIGRlZmluaXRpb25zIG9mIFNJR1JUTUlOCisKK0RlZmluZSBXX1NUT1BDT0RFIGlmIG5vdCBkZWZpbmVkIGFscmVhZHkKKworX19TSUdSVE1JTiBpcyBpbnRlcm5hbCB0byBnbGliYyBhbmQgb3RoZXIgbGliY3MgZS5nLiBtdXNsCittYXkgbm90IHByb3ZpZGUgdGhlbQorCitGaXhlcworaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTMwMTIKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdkYi9saW51eC1uYXQuYyAgICAgfCA0ICsrLS0KKyBnZGIvbmF0L2xpbnV4LW5hdC5oIHwgNCArKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvbGludXgtbmF0LmMgYi9nZGIvbGludXgtbmF0LmMKK2luZGV4IDA4MjliY2IuLjNiOGE4OTYgMTAwNjQ0CistLS0gYS9nZGIvbGludXgtbmF0LmMKKysrKyBiL2dkYi9saW51eC1uYXQuYworQEAgLTQ4NDUsNiArNDg0NSw2IEBAIGxpbl90aHJlYWRfZ2V0X3RocmVhZF9zaWduYWxzIChzaWdzZXRfdCAqc2V0KQorICAgLyogTlBUTCByZXNlcnZlcyB0aGUgZmlyc3QgdHdvIFJUIHNpZ25hbHMsIGJ1dCBkb2VzIG5vdCBwcm92aWRlIGFueQorICAgICAgd2F5IGZvciB0aGUgZGVidWdnZXIgdG8gcXVlcnkgdGhlIHNpZ25hbCBudW1iZXJzIC0gZm9ydHVuYXRlbHkKKyAgICAgIHRoZXkgZG9uJ3QgY2hhbmdlLiAgKi8KKy0gIHNpZ2FkZHNldCAoc2V0LCBfX1NJR1JUTUlOKTsKKy0gIHNpZ2FkZHNldCAoc2V0LCBfX1NJR1JUTUlOICsgMSk7CisrICBzaWdhZGRzZXQgKHNldCwgU0lHUlRNSU4pOworKyAgc2lnYWRkc2V0IChzZXQsIFNJR1JUTUlOICsgMSk7CisgfQorZGlmZiAtLWdpdCBhL2dkYi9uYXQvbGludXgtbmF0LmggYi9nZGIvbmF0L2xpbnV4LW5hdC5oCitpbmRleCAyYjQ4NWRiLi5kMDU4YWZjIDEwMDY0NAorLS0tIGEvZ2RiL25hdC9saW51eC1uYXQuaAorKysrIGIvZ2RiL25hdC9saW51eC1uYXQuaAorQEAgLTg1LDQgKzg1LDggQEAgZXh0ZXJuIGVudW0gdGFyZ2V0X3N0b3BfcmVhc29uIGx3cF9zdG9wX3JlYXNvbiAoc3RydWN0IGx3cF9pbmZvICpsd3ApOworIAorIGV4dGVybiB2b2lkIGxpbnV4X3N0b3BfbHdwIChzdHJ1Y3QgbHdwX2luZm8gKmx3cCk7CisgCisrI2lmbmRlZiBXX1NUT1BDT0RFCisrI2RlZmluZSBXX1NUT1BDT0RFKHNpZykgKChzaWcpIDw8IDggfCAweDdmKQorKyNlbmRpZgorKworICNlbmRpZiAvKiBMSU5VWF9OQVRfSCAqLworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwOS1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDktQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjMwMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDktQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGJhMGJiZjg4N2Q0OTExY2NlZTlkZjU3Y2IxM2VhZmIxZGUzNGJiMzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAzMCBBcHIgMjAxNiAxNTozNTozOSAtMDcwMAorU3ViamVjdDogW1BBVENIIDA5LzEwXSBDaGFuZ2Ugb3JkZXIgb2YgQ0ZMQUdTCisKK0xldHMgdXMgb3ZlcnJpZGUgV2Vycm9yIGlmIG5lZWQgYmUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitpbmRleCAxZTg3NGUzLi45MWU4NTUwIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorKysrIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorQEAgLTEzOCwxMCArMTM4LDEwIEBAIENYWEZMQUdTID0gQENYWEZMQUdTQAorIENQUEZMQUdTID0gQENQUEZMQUdTQAorIAorICMgSU5URVJOQUxfQ0ZMQUdTIGlzIHRoZSBhZ2dyZWdhdGUgb2YgYWxsIG90aGVyICpDRkxBR1MgbWFjcm9zLgorLUlOVEVSTkFMX0NGTEFHU19CQVNFID0gICR7Q09NUElMRVJfQ0ZMQUdTfSAke0dMT0JBTF9DRkxBR1N9IFwKKytJTlRFUk5BTF9DRkxBR1NfQkFTRSA9ICAke0dMT0JBTF9DRkxBR1N9IFwKKyAJJHtQUk9GSUxFX0NGTEFHU30gJHtJTkNMVURFX0NGTEFHU30gJHtDUFBGTEFHU30KKyBJTlRFUk5BTF9XQVJOX0NGTEFHUyA9ICAke0lOVEVSTkFMX0NGTEFHU19CQVNFfSAkKFdBUk5fQ0ZMQUdTKQorLUlOVEVSTkFMX0NGTEFHUyA9ICAke0lOVEVSTkFMX1dBUk5fQ0ZMQUdTfSAkKFdFUlJPUl9DRkxBR1MpIC1ER0RCU0VSVkVSCisrSU5URVJOQUxfQ0ZMQUdTID0gICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgJHtDT01QSUxFUl9DRkxBR1N9IC1ER0RCU0VSVkVSCisgCisgIyBMREZMQUdTIGlzIHNwZWNpZmljYWxseSByZXNlcnZlZCBmb3Igc2V0dGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAjIHdoZW4gcnVubmluZyBtYWtlLgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAxMC1yZXNvbHZlLXJlc3RyaWN0LWtleXdvcmQtY29uZmxpY3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAxMC1yZXNvbHZlLXJlc3RyaWN0LWtleXdvcmQtY29uZmxpY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjMzRjNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDEwLXJlc29sdmUtcmVzdHJpY3Qta2V5d29yZC1jb25mbGljdC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIDVhOWNjYjhjMDcyOGI2NThmYzRmN2YwZjdiMzY4NzNjNjQyNzRmMTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMCBNYXkgMjAxNiAwODo0NzowNSAtMDcwMAorU3ViamVjdDogW1BBVENIIDEwLzEwXSByZXNvbHZlIHJlc3RyaWN0IGtleXdvcmQgY29uZmxpY3QKKworR0NDIGRldGVjdHMgdGhhdCB3ZSBjYWxsICdyZXN0cmljdCcgYXMgcGFyYW0gbmFtZSBpbiBmdW5jdGlvbgorc2lnbmF0dXJlcyBhbmQgY29tcGxhaW5zIHNpbmNlIGJvdGggcGFyYW1zIGFyZSBjYWxsZWQgJ3Jlc3RyaWN0JwordGhlcmVmb3JlIHdlIHVzZSBfX3Jlc3RyaWN0IHRvIGRlbm90ZSB0aGUgQzk5IGtleXdvcmsKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvZ251bGliL2ltcG9ydC9zeXNfdGltZS5pbi5oIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvZ251bGliL2ltcG9ydC9zeXNfdGltZS5pbi5oIGIvZ2RiL2dudWxpYi9pbXBvcnQvc3lzX3RpbWUuaW4uaAoraW5kZXggYzU1NmM1ZC4uMmE2MTA3ZiAxMDA2NDQKKy0tLSBhL2dkYi9nbnVsaWIvaW1wb3J0L3N5c190aW1lLmluLmgKKysrKyBiL2dkYi9nbnVsaWIvaW1wb3J0L3N5c190aW1lLmluLmgKK0BAIC05MywyMCArOTMsMjAgQEAgc3RydWN0IHRpbWV2YWwKKyAjICAgZGVmaW5lIGdldHRpbWVvZmRheSBycGxfZ2V0dGltZW9mZGF5CisgIyAgZW5kaWYKKyBfR0xfRlVOQ0RFQ0xfUlBMIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpCisgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyBfR0xfQ1hYQUxJQVNfUlBMIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkpOworKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkpOworICMgZWxzZQorICMgIGlmICFASEFWRV9HRVRUSU1FT0ZEQVlACisgX0dMX0ZVTkNERUNMX1NZUyAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpCisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KQorICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgIyAgZW5kaWYKKyAvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gZ2xpYmMgc3lzdGVtcywgYnkgZGVmYXVsdCwgdGhlIHNlY29uZCBhcmd1bWVudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV6b25lICouICAqLworIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KSk7CisgIyBlbmRpZgorIF9HTF9DWFhBTElBU1dBUk4gKGdldHRpbWVvZmRheSk7CisgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAxMS1hdnhfbXB4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMTEtYXZ4X21weC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDljNGZjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMTEtYXZ4X21weC5wYXRjaApAQCAtMCwwICsxLDI2MDEgQEAKK2dkYjogQmFja3BvcnQgcGF0Y2ggdG8gc3VwcG9ydCBjaGFuZ2VzIHdpdGggQVZYIGFuZCBNUFgKKworVGhlIGN1cnJlbnQgTVBYIHRhcmdldCBkZXNjcmlwdGlvbnMgYXNzdW1lIHRoYXQgTVBYIGlzIGFsd2F5cyBjb21iaW5lZAord2l0aCBBVlgsIGhvd2V2ZXIgdGhhdCdzIG5vdCBjb3JyZWN0LiAgV2UgY2FuIGhhdmUgbWFjaGluZXMgd2l0aCBNUFgKK2FuZCB3aXRob3V0IEFWWDsgb3IgbWFjaGluZXMgd2l0aCBBVlggYW5kIHdpdGhvdXQgTVBYLgorCitUaGlzIHBhdGNoIGFkZHMgbmV3IHRhcmdldCBkZXNjcmlwdGlvbnMgZm9yIG1hY2hpbmVzIHRoYXQgc3VwcG9ydAorYm90aCBNUFggYW5kIEFWWCwgYXMgZHVwbGljYXRlcyBvZiB0aGUgZXhpc3RpbmcgTVBYIGRlc2NyaXB0aW9ucy4KKworVGhlIGZvbGxvd2luZyBjb21taXQgd2lsbCByZW1vdmUgQVZYIGZyb20gdGhlIE1QWC1vbmx5IGRlc2NyaXB0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBiYXZlcnkgPGJyaWFuLmF2ZXJ5QGludGVsLmNvbT4KKworCitPcmlnbmFsIHBhdGNoIGNoYW5nZWxvZyBhbmQgYXV0aG9yIGF0dHJpYnV0aW9uOgorCisyMDE2LTA0LTE2ICBXYWxmcmVkIFRlZGVzY2hpICA8d2FsZnJlZC50ZWRlc2NoaUBpbnRlbC5jb20+CisKK2dkYi9DaGFuZ2VMb2c6CisKKwkqIGFtZDY0LWxpbnV4LXRkZXAuYyAoZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmMpOgorCU5ldyBpbmNsdWRlLgorCShhbWQ2NF9saW51eF9jb3JlX3JlYWRfZGVzY3JpcHRpb24pOiBBZGQgY2FzZSBmb3IKKwkgWDg2X1hTVEFURV9BVlhfTVBYX01BU0suCisJKF9pbml0aWFsaXplX2FtZDY0X2xpbnV4X3RkZXApOiBDYWxsIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfYXZ4X21weF9saW51eC4KKwkqIGFtZDY0LWxpbnV4LXRkZXAuaCAodGRlc2NfYW1kNjRfYXZ4X21weF9saW51eCk6IE5ldyBkZWZpbml0aW9uLgorCSogYW1kNjQtdGRlcC5jIChmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHguYyk6IE5ldyBpbmNsdWRlLgorCShhbWQ2NF90YXJnZXRfZGVzY3JpcHRpb24pOiBBZGQgY2FzZSBmb3IgIFg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLLgorCShfaW5pdGlhbGl6ZV9hbWQ2NF90ZGVwKTogQ2FsbCBpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eF9tcHguCisJKiBjb21tb24veDg2LXhzdGF0ZS5oIChYODZfWFNUQVRFX01QWF9NQVNLKTogUmVtb3ZlIEFWWCBiaXRzLgorCShYODZfWFNUQVRFX0FWWF9NUFhfTUFTSyk6IE5ldyBjYXNlLgorCSogZmVhdHVyZXMvTWFrZWZpbGUgKGkzODYvaTM4Ni1hdngtbXB4LCBpMzg2L2kzODYtYXZ4LW1weC1saW51eCkKKwkoaTM4Ni9hbWQ2NC1hdngtbXB4LCBpMzg2L2FtZDY0LWF2eC1tcHgtbGludXgpOiBOZXcgcnVsZXMuCisJKGkzODYvaTM4Ni1hdngtbXB4LWV4cGVkaXRlLCBpMzg2L2kzODYtYXZ4LW1weC1saW51eC1leHBlZGl0ZSkKKwkoaTM4Ni9hbWQ2NC1hdngtbXB4LWV4cGVkaXRlLCBpMzg2L2FtZDY0LWF2eC1tcHgtbGludXgtZXhwZWRpdGUpOgorCU5ldyBleHBlZGl0ZXMuCisJKiBpMzg2LWxpbnV4LXRkZXAuYyAoZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguYyk6IE5ldworCWluY2x1ZGUuCisJKGkzODZfbGludXhfY29yZV9yZWFkX2Rlc2NyaXB0aW9uKTogQWRkIGNhc2UKKwlYODZfWFNUQVRFX0FWWF9NUFhfTUFTSy4KKwkoX2luaXRpYWxpemVfaTM4Nl9saW51eF90ZGVwKTogQ2FsbAorCWluaXRpYWxpemVfdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4LgorCSogaTM4Ni1saW51eC10ZGVwLmggKHRkZXNjX2kzODZfYXZ4X21weF9saW51eCk6IE5ldyBpbmNsdWRlLgorCSogaTM4Ni10ZGVwLmMgKGZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LmMpOiBOZXcgaW5jbHVkZS4KKwkoaTM4Nl90YXJnZXRfZGVzY3JpcHRpb24pOiBBZGQgY2FzZSBmb3IgWDg2X1hTVEFURV9BVlhfTVBYX01BU0suCisJKiB4ODYtbGludXgtbmF0LmMgKHg4Nl9saW51eF9yZWFkX2Rlc2NyaXB0aW9uKTogQWRkIGNhc2UgZm9yCisJWDg2X1hTVEFURV9BVlhfTVBYX01BU0suCisJKiBmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXgueG1sOiBOZXcgZmlsZS4KKwkqIGZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LnhtbDogTmV3IGZpbGUuCisJKiBmZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC54bWw6IE5ldyBmaWxlLgorCSogZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LnhtbDogTmV3IGZpbGUuCisJKiBmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguYzogR2VuZXJhdGVkLgorCSogZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LmM6IEdlbmVyYXRlZC4KKwkqIGZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmM6IEdlbmVyYXRlZC4KKwkqIGZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LmM6IEdlbmVyYXRlZC4KKwkqIHJlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmRhdDogR2VuZXJhdGVkLgorCSogcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHguZGF0OiBHZW5lcmF0ZWQuCisJKiByZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmRhdDogR2VuZXJhdGVkLgorCSogcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC5kYXQ6IEdlbmVyYXRlZC4KKworZ2RiL2dkYnNlcnZlci9DaGFuZ2VMb2c6CisKKwkqIE1ha2VmaWxlLmluIChjbGVhbik6IEFkZCByZW1vdmFsIGZvciBpMzg2LWF2eC1tcHguYywKKwlpMzg2LWF2eC1tcHgtbGludXguYywgYW1kNjQtYXZ4LW1weC5jIGFuZCBhbWQ2NC1hdngtbXB4LWxpbnV4LmMuCisJKGkzODYtYXZ4LW1weC5jLCBpMzg2LWF2eC1tcHgtbGludXguYywgYW1kNjQtYXZ4LW1weC5jKQorCShhbWQ2NC1hdngtbXB4LWxpbnV4LmMpOiBOZXcgcnVsZXMuCisJKGFtZDY0LWF2eC1tcHgtbGludXgtaXBhLm8sIGkzODYtYXZ4LW1weC1saW51eC1pcGEubyk6IE5ldyBydWxlLgorCSogY29uZmlndXJlLnNydiAoc3J2X2kzODZfcmVnb2JqKTogQWRkIGkzODYtYXZ4LW1weC5vLgorCShzcnZfaTM4Nl9saW51eF9yZWdvYmopOiBBZGQgaTM4Ni1hdngtbXB4LWxpbnV4Lm8uCisJKHNydl9hbWQ2NF9yZWdvYmopOiBBZGQgYW1kNjQtYXZ4LW1weC5vLgorCShzcnZfYW1kNjRfbGludXhfcmVnb2JqKTogQWRkIGFtZDY0LWF2eC1tcHgtbGludXguby4KKwkoc3J2X2kzODZfeG1sZmlsZXMpOiBBZGQgaTM4Ni9pMzg2LWF2eC1tcHgueG1sLgorCShzcnZfYW1kNjRfeG1sZmlsZXMpOiBBZGQgaTM4Ni9hbWQ2NC1hdngtbXB4LnhtbC4KKwkoc3J2X2kzODZfbGludXhfeG1sZmlsZXMpOiBBZGQgaTM4Ni9pMzg2LWF2eC1tcHgtbGludXgueG1sLgorCShzcnZfYW1kNjRfbGludXhfeG1sZmlsZXMpOiBBZGQgaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LnhtbC4KKwkoaXBhX2kzODZfbGludXhfcmVnb2JqKTogQWRkIGkzODYtYXZ4LW1weC1saW51eC1pcGEuby4KKwkoaXBhX2FtZDY0X2xpbnV4X3JlZ29iaik6IEFkZCBhbWQ2NC1hdngtbXB4LWxpbnV4LWlwYS5vLgorCSogbGludXgteDg2LWxvdy5jICh4ODZfbGludXhfcmVhZF9kZXNjcmlwdGlvbik6IEFkZCBjYXNlIGZvcgorCVg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLLgorCSh4ODZfZ2V0X2lwYV90ZGVzY19pZHgpOiBBZGQgY2FzZXMgZm9yIGF2eF9tcHguCisJKGluaXRpYWxpemVfbG93X2FyY2gpOiBDYWxsIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eF9tcHhfbGludXggYW5kCisJaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbXB4X2xpbnV4LgorCSogbGludXgtaTM4Ni1pcGEuYyAoZ2V0X2lwYV90ZGVzYyk6IEFkZCBjYXNlIGZvciBhdnhfbXB4LgorCShpbml0aWFsaXplX2xvd190cmFjZXBvaW50KTogQ2FsbAorCWluaXRfcmVnaXN0ZXJzX2kzODZfYXZ4X21weF9saW51eC4KKwkqIGxpbnV4LWFtZDY0LWlwYS5jIChnZXRfaXBhX3RkZXNjKTogIEFkZCBjYXNlIGZvciBhdnhfbXB4LgorCShpbml0aWFsaXplX2xvd190cmFjZXBvaW50KTogQ2FsbAorCWluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eF9tcHhfbGludXguCisJKiBsaW51eC14ODYtdGRlc2MuaCAoWDg2X1RERVNDX0FWWF9NUFgpOiBOZXcgZW51bSB2YWx1ZS4KKwkoaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4X21weF9saW51eCwgdGRlc2NfYW1kNjRfYXZ4X21weF9saW51eCkKKwkoaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbXB4X2xpbnV4LCB0ZGVzY19pMzg2X2F2eF9tcHhfbGludXgpOiBOZXcKKwlkZWNsYXJhdGlvbnMuCisKKworCisKK2RpZmYgLS1naXQgYS9nZGIvYW1kNjQtbGludXgtdGRlcC5jIGIvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYworaW5kZXggMjFiY2Q5OS4uNTMyN2Y3YyAxMDA2NDQKKy0tLSBhL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMKKysrKyBiL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMKK0BAIC00Myw2ICs0Myw3IEBACisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvYW1kNjQtbGludXguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbGludXguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgtbGludXguYyIKKysjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmMiCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4NTEyLWxpbnV4LmMiCisKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni94MzItbGludXguYyIKK0BAIC0xNTkwLDYgKzE1OTEsMTEgQEAgYW1kNjRfbGludXhfY29yZV9yZWFkX2Rlc2NyaXB0aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyAJcmV0dXJuIHRkZXNjX3gzMl9hdnhfbGludXg7ICAvKiBObyB4MzIgTVBYIGZhbGxpbmcgYmFjayB0byBBVlguICAqLworICAgICAgIGVsc2UKKyAJcmV0dXJuIHRkZXNjX2FtZDY0X21weF9saW51eDsKKysgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSzoKKysgICAgICBpZiAoZ2RiYXJjaF9wdHJfYml0IChnZGJhcmNoKSA9PSAzMikKKysJcmV0dXJuIHRkZXNjX3gzMl9hdnhfbGludXg7ICAvKiBObyB4MzIgTVBYIGZhbGxpbmcgYmFjayB0byBBVlguICAqLworKyAgICAgIGVsc2UKKysJcmV0dXJuIHRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXg7CisgICAgIGNhc2UgWDg2X1hTVEFURV9BVlhfTUFTSzoKKyAgICAgICBpZiAoZ2RiYXJjaF9wdHJfYml0IChnZGJhcmNoKSA9PSAzMikKKyAJcmV0dXJuIHRkZXNjX3gzMl9hdnhfbGludXg7CitAQCAtMjI4NSw2ICsyMjkxLDcgQEAgX2luaXRpYWxpemVfYW1kNjRfbGludXhfdGRlcCAodm9pZCkKKyAgIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfbGludXggKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eF9saW51eCAoKTsKKyAgIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfbXB4X2xpbnV4ICgpOworKyAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9hdng1MTJfbGludXggKCk7CisKKyAgIGluaXRpYWxpemVfdGRlc2NfeDMyX2xpbnV4ICgpOworZGlmZiAtLWdpdCBhL2dkYi9hbWQ2NC1saW51eC10ZGVwLmggYi9nZGIvYW1kNjQtbGludXgtdGRlcC5oCitpbmRleCA4NjczNDQyLi5kNjRkNWQ2IDEwMDY0NAorLS0tIGEvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuaAorKysrIGIvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuaAorQEAgLTM1LDYgKzM1LDcgQEAKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9saW51eDsKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9hdnhfbGludXg7CisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfbXB4X2xpbnV4OworK2V4dGVybiBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXg7CisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfYXZ4NTEyX2xpbnV4OworCisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfeDMyX2xpbnV4OworZGlmZiAtLWdpdCBhL2dkYi9hbWQ2NC10ZGVwLmMgYi9nZGIvYW1kNjQtdGRlcC5jCitpbmRleCBmYWU5MmIyLi44OGUzYmY4IDEwMDY0NAorLS0tIGEvZ2RiL2FtZDY0LXRkZXAuYworKysrIGIvZ2RiL2FtZDY0LXRkZXAuYworQEAgLTQ0LDYgKzQ0LDcgQEAKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9hbWQ2NC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LW1weC5jIgorKyNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdng1MTIuYyIKKworICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L3gzMi5jIgorQEAgLTMxMzIsNiArMzEzMyw4IEBAIGFtZDY0X3RhcmdldF9kZXNjcmlwdGlvbiAodWludDY0X3QgeGNyMCkKKyAgICAgICByZXR1cm4gdGRlc2NfYW1kNjRfYXZ4NTEyOworICAgICBjYXNlIFg4Nl9YU1RBVEVfTVBYX01BU0s6CisgICAgICAgcmV0dXJuIHRkZXNjX2FtZDY0X21weDsKKysgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSzoKKysgICAgICByZXR1cm4gdGRlc2NfYW1kNjRfYXZ4X21weDsKKyAgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NQVNLOgorICAgICAgIHJldHVybiB0ZGVzY19hbWQ2NF9hdng7CisgICAgIGRlZmF1bHQ6CitAQCAtMzE0OCw2ICszMTUxLDcgQEAgX2luaXRpYWxpemVfYW1kNjRfdGRlcCAodm9pZCkKKyAgIGluaXRpYWxpemVfdGRlc2NfYW1kNjQgKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eCAoKTsKKyAgIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfbXB4ICgpOworKyAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9hdnhfbXB4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9hdng1MTIgKCk7CisKKyAgIGluaXRpYWxpemVfdGRlc2NfeDMyICgpOworZGlmZiAtLWdpdCBhL2dkYi9jb21tb24veDg2LXhzdGF0ZS5oIGIvZ2RiL2NvbW1vbi94ODYteHN0YXRlLmgKK2luZGV4IDgzODY0MjAuLjBhYTkxNjQgMTAwNjQ0CistLS0gYS9nZGIvY29tbW9uL3g4Ni14c3RhdGUuaAorKysrIGIvZ2RiL2NvbW1vbi94ODYteHN0YXRlLmgKK0BAIC0zOSw5ICszOSwxMCBAQAorICNkZWZpbmUgWDg2X1hTVEFURV9YODdfTUFTSwlYODZfWFNUQVRFX1g4NworICNkZWZpbmUgWDg2X1hTVEFURV9TU0VfTUFTSwkoWDg2X1hTVEFURV9YODcgfCBYODZfWFNUQVRFX1NTRSkKKyAjZGVmaW5lIFg4Nl9YU1RBVEVfQVZYX01BU0sJKFg4Nl9YU1RBVEVfU1NFX01BU0sgfCBYODZfWFNUQVRFX0FWWCkKKy0jZGVmaW5lIFg4Nl9YU1RBVEVfTVBYX01BU0sJKFg4Nl9YU1RBVEVfQVZYX01BU0sgfCBYODZfWFNUQVRFX01QWCkKKysjZGVmaW5lIFg4Nl9YU1RBVEVfTVBYX01BU0sJKFg4Nl9YU1RBVEVfU1NFX01BU0sgfCBYODZfWFNUQVRFX01QWCkKKysjZGVmaW5lIFg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLCShYODZfWFNUQVRFX0FWWF9NQVNLIHwgWDg2X1hTVEFURV9NUFgpCisgI2RlZmluZSBYODZfWFNUQVRFX0FWWDUxMl9NQVNLCShYODZfWFNUQVRFX0FWWF9NQVNLIHwgWDg2X1hTVEFURV9BVlg1MTIpCistI2RlZmluZSBYODZfWFNUQVRFX01QWF9BVlg1MTJfTUFTSyAoWDg2X1hTVEFURV9NUFhfTUFTSyB8IFg4Nl9YU1RBVEVfQVZYNTEyKQorKyNkZWZpbmUgWDg2X1hTVEFURV9NUFhfQVZYNTEyX01BU0sgKFg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLIHwgWDg2X1hTVEFURV9BVlg1MTIpCisKKyAjZGVmaW5lIFg4Nl9YU1RBVEVfQUxMX01BU0sJKFg4Nl9YU1RBVEVfTVBYX0FWWDUxMl9NQVNLKQorCitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlIGIvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlCitpbmRleCAxMDE3M2NmLi5lNWM1MTU0IDEwMDY0NAorLS0tIGEvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlCisrKysgYi9nZGIvZmVhdHVyZXMvTWFrZWZpbGUKK0BAIC01MCw5ICs1MCwxMSBAQCBXSElDSCA9IGFhcmNoNjQgXAorIAlpMzg2L2FtZDY0IGkzODYvYW1kNjQtbGludXggXAorIAlpMzg2L2kzODYtYXZ4IGkzODYvaTM4Ni1hdngtbGludXggXAorIAlpMzg2L2kzODYtbXB4IGkzODYvaTM4Ni1tcHgtbGludXggXAorKwlpMzg2L2kzODYtYXZ4LW1weCBpMzg2L2kzODYtYXZ4LW1weC1saW51eCBcCisgCWkzODYvaTM4Ni1hdng1MTIgaTM4Ni9pMzg2LWF2eDUxMi1saW51eCBcCisgCWkzODYvYW1kNjQtYXZ4IGkzODYvYW1kNjQtYXZ4LWxpbnV4IFwKKyAJaTM4Ni9hbWQ2NC1tcHggaTM4Ni9hbWQ2NC1tcHgtbGludXggXAorKwlpMzg2L2FtZDY0LWF2eC1tcHggaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4IFwKKyAJaTM4Ni9hbWQ2NC1hdng1MTIgaTM4Ni9hbWQ2NC1hdng1MTItbGludXggXAorIAlpMzg2L3gzMiBpMzg2L3gzMi1saW51eCBcCisgCWkzODYveDMyLWF2eCBpMzg2L3gzMi1hdngtbGludXggXAorQEAgLTgzLDcgKzg1LDkgQEAgaTM4Ni9hbWQ2NC1saW51eC1leHBlZGl0ZSA9IHJicCxyc3AscmlwCisgaTM4Ni9pMzg2LWF2eC1leHBlZGl0ZSA9IGVicCxlc3AsZWlwCisgaTM4Ni9pMzg2LWF2eC1saW51eC1leHBlZGl0ZSA9IGVicCxlc3AsZWlwCisgaTM4Ni9pMzg2LW1weC1leHBlZGl0ZSA9IGVicCxlc3AsZWlwCisraTM4Ni9pMzg2LWF2eC1tcHgtZXhwZWRpdGUgPSBlYnAsZXNwLGVpcAorIGkzODYvaTM4Ni1tcHgtbGludXgtZXhwZWRpdGUgPSBlYnAsZXNwLGVpcAorK2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LWV4cGVkaXRlID0gZWJwLGVzcCxlaXAKKyBpMzg2L2kzODYtYXZ4NTEyLWV4cGVkaXRlID0gZWJwLGVzcCxlaXAKKyBpMzg2L2kzODYtYXZ4NTEyLWxpbnV4LWV4cGVkaXRlID0gZWJwLGVzcCxlaXAKKyBpMzg2L2kzODYtbW14LWV4cGVkaXRlID0gZWJwLGVzcCxlaXAKK0BAIC05MSw3ICs5NSw5IEBAIGkzODYvaTM4Ni1tbXgtbGludXgtZXhwZWRpdGUgPSBlYnAsZXNwLGVpcAorIGkzODYvYW1kNjQtYXZ4LWV4cGVkaXRlID0gcmJwLHJzcCxyaXAKKyBpMzg2L2FtZDY0LWF2eC1saW51eC1leHBlZGl0ZSA9IHJicCxyc3AscmlwCisgaTM4Ni9hbWQ2NC1tcHgtZXhwZWRpdGUgPSByYnAscnNwLHJpcAorK2kzODYvYW1kNjQtYXZ4LW1weC1leHBlZGl0ZSA9IHJicCxyc3AscmlwCisgaTM4Ni9hbWQ2NC1tcHgtbGludXgtZXhwZWRpdGUgPSByYnAscnNwLHJpcAorK2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC1leHBlZGl0ZSA9IHJicCxyc3AscmlwCisgaTM4Ni9hbWQ2NC1hdng1MTItZXhwZWRpdGUgPSByYnAscnNwLHJpcAorIGkzODYvYW1kNjQtYXZ4NTEyLWxpbnV4LWV4cGVkaXRlID0gcmJwLHJzcCxyaXAKKyBpMzg2L3gzMi1leHBlZGl0ZSA9IHJicCxyc3AscmlwCitAQCAtMTU2LDYgKzE2Miw4IEBAIFhNTFRPQyA9IFwKKyAJaTM4Ni9hbWQ2NC1saW51eC54bWwgXAorIAlpMzg2L2FtZDY0LW1weC1saW51eC54bWwgXAorIAlpMzg2L2FtZDY0LW1weC54bWwgXAorKwlpMzg2L2FtZDY0LWF2eC1tcHgtbGludXgueG1sIFwKKysJaTM4Ni9hbWQ2NC1hdngtbXB4LnhtbCBcCisgCWkzODYvYW1kNjQueG1sIFwKKyAJaTM4Ni9pMzg2LWF2eC1saW51eC54bWwgXAorIAlpMzg2L2kzODYtYXZ4LnhtbCBcCitAQCAtMTY2LDYgKzE3NCw4IEBAIFhNTFRPQyA9IFwKKyAJaTM4Ni9pMzg2LW1teC54bWwgXAorIAlpMzg2L2kzODYtbXB4LWxpbnV4LnhtbCBcCisgCWkzODYvaTM4Ni1tcHgueG1sIFwKKysJaTM4Ni9pMzg2LWF2eC1tcHgtbGludXgueG1sIFwKKysJaTM4Ni9pMzg2LWF2eC1tcHgueG1sIFwKKyAJaTM4Ni9pMzg2LnhtbCBcCisgCWkzODYveDMyLWF2eC1saW51eC54bWwgXAorIAlpMzg2L3gzMi1hdngueG1sIFwKK0BAIC0yNzEsNiArMjgxLDEwIEBAICQob3V0ZGlyKS9pMzg2L2kzODYtbXB4LmRhdDogaTM4Ni8zMmJpdC1jb3JlLnhtbCBpMzg2LzMyYml0LWF2eC54bWwgXAorIAkJCSAgICAgICBpMzg2LzMyYml0LW1weC54bWwKKyAkKG91dGRpcikvaTM4Ni9pMzg2LW1weC1saW51eC5kYXQ6IGkzODYvMzJiaXQtY29yZS54bWwgCWkzODYvMzJiaXQtYXZ4LnhtbCBcCisgCQkJICAgICAgIGkzODYvMzJiaXQtbGludXgueG1sIGkzODYvMzJiaXQtbXB4LnhtbAorKyQob3V0ZGlyKS9pMzg2L2kzODYtbXB4LWxpbnV4LmRhdDogaTM4Ni8zMmJpdC1jb3JlLnhtbCBcCisrCQkJICAgICAgIGkzODYvMzJiaXQtbGludXgueG1sIGkzODYvMzJiaXQtbXB4LnhtbAorKyQob3V0ZGlyKS9pMzg2L2kzODYtYXZ4LW1weC1saW51eC5kYXQ6IGkzODYvMzJiaXQtY29yZS54bWwgXAorKwkJCSAgICAgICBpMzg2LzMyYml0LWxpbnV4LnhtbCBpMzg2LzMyYml0LW1weC54bWwKKyAkKG91dGRpcikvaTM4Ni9pMzg2LWF2eDUxMi5kYXQ6IGkzODYvMzJiaXQtY29yZS54bWwgaTM4Ni8zMmJpdC1hdngueG1sIFwKKyAJCQkgICAgICAgaTM4Ni8zMmJpdC1tcHgueG1sIGkzODYvMzJiaXQtYXZ4NTEyLnhtbAorICQob3V0ZGlyKS9pMzg2L2kzODYtYXZ4NTEyLWxpbnV4LmRhdDogaTM4Ni8zMmJpdC1jb3JlLnhtbCBpMzg2LzMyYml0LWF2eC54bWwgXAorQEAgLTI4Miw4ICsyOTYsMTIgQEAgJChvdXRkaXIpL2kzODYvYW1kNjQtYXZ4LWxpbnV4LmRhdDogaTM4Ni82NGJpdC1jb3JlLnhtbCBpMzg2LzY0Yml0LWF2eC54bWwgXAorIAkJCQkgICAgaTM4Ni82NGJpdC1saW51eC54bWwKKyAkKG91dGRpcikvaTM4Ni9hbWQ2NC1tcHgtbGludXguZGF0OiBpMzg2LzY0Yml0LWNvcmUueG1sIGkzODYvNjRiaXQtYXZ4LnhtbCBcCisgCQkJICAgICAgIGkzODYvNjRiaXQtbGludXgueG1sIGkzODYvNjRiaXQtbXB4LnhtbAorKyQob3V0ZGlyKS9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguZGF0OiBpMzg2LzY0Yml0LWNvcmUueG1sIFwKKysJCQkgICAgICAgaTM4Ni82NGJpdC1saW51eC54bWwgaTM4Ni82NGJpdC1tcHgueG1sCisgJChvdXRkaXIpL2kzODYvYW1kNjQtbXB4LmRhdDogaTM4Ni82NGJpdC1jb3JlLnhtbCBpMzg2LzY0Yml0LWF2eC54bWwgXAorIAkJCSAgICAgICBpMzg2LzY0Yml0LW1weC54bWwKKyskKG91dGRpcikvaTM4Ni9hbWQ2NC1hdngtbXB4LmRhdDogaTM4Ni82NGJpdC1jb3JlLnhtbCBcCisrCQkJICAgICAgIGkzODYvNjRiaXQtbXB4LnhtbAorICQob3V0ZGlyKS9pMzg2L2FtZDY0LWF2eDUxMi5kYXQ6IGkzODYvNjRiaXQtY29yZS54bWwgaTM4Ni82NGJpdC1hdngueG1sIFwKKyAJCQkgICAgICAgaTM4Ni82NGJpdC1tcHgueG1sIGkzODYvNjRiaXQtYXZ4NTEyLnhtbAorICQob3V0ZGlyKS9pMzg2L2FtZDY0LWF2eDUxMi1saW51eC5kYXQ6IGkzODYvNjRiaXQtY29yZS54bWwgaTM4Ni82NGJpdC1hdngueG1sIFwKK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmMgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zN2I0YzgxCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmMKK0BAIC0wLDAgKzEsMjExIEBACisrLyogVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aTpzZXQgcm86CisrICBPcmlnaW5hbDogYW1kNjQtYXZ4LW1weC1saW51eC54bWwgKi8KKysKKysjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJvc2FiaS5oIgorKyNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRpb25zLmgiCisrCisrc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4OworK3N0YXRpYyB2b2lkCisraW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4ICh2b2lkKQorK3sKKysgIHN0cnVjdCB0YXJnZXRfZGVzYyAqcmVzdWx0ID0gYWxsb2NhdGVfdGFyZ2V0X2Rlc2NyaXB0aW9uICgpOworKyAgc3RydWN0IHRkZXNjX2ZlYXR1cmUgKmZlYXR1cmU7CisrICBzdHJ1Y3QgdGRlc2NfdHlwZSAqZmllbGRfdHlwZTsKKysgIHN0cnVjdCB0ZGVzY190eXBlICp0eXBlOworKworKyAgc2V0X3RkZXNjX2FyY2hpdGVjdHVyZSAocmVzdWx0LCBiZmRfc2Nhbl9hcmNoICgiaTM4Njp4ODYtNjQiKSk7CisrCisrICBzZXRfdGRlc2Nfb3NhYmkgKHJlc3VsdCwgb3NhYmlfZnJvbV90ZGVzY19zdHJpbmcgKCJHTlUvTGludXgiKSk7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuY29yZSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX2NyZWF0ZV9mbGFncyAoZmVhdHVyZSwgImkzODZfZWZsYWdzIiwgNCk7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMCwgIkNGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMSwgIiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIsICJQRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDQsICJBRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDYsICJaRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDcsICJTRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDgsICJURiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDksICJJRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEwLCAiREYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMSwgIk9GIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTQsICJOVCIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE2LCAiUkYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNywgIlZNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTgsICJBQyIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE5LCAiVklGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMjAsICJWSVAiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyMSwgIklEIik7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmF4IiwgMCwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJieCIsIDEsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyY3giLCAyLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmR4IiwgMywgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJzaSIsIDQsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyZGkiLCA1LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmJwIiwgNiwgMSwgTlVMTCwgNjQsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJzcCIsIDcsIDEsIE5VTEwsIDY0LCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyOCIsIDgsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyOSIsIDksIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTAiLCAxMCwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxMSIsIDExLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEyIiwgMTIsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTMiLCAxMywgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxNCIsIDE0LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjE1IiwgMTUsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyaXAiLCAxNiwgMSwgTlVMTCwgNjQsICJjb2RlX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVmbGFncyIsIDE3LCAxLCBOVUxMLCAzMiwgImkzODZfZWZsYWdzIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiY3MiLCAxOCwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInNzIiwgMTksIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJkcyIsIDIwLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZXMiLCAyMSwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZzIiwgMjIsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJncyIsIDIzLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QwIiwgMjQsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDEiLCAyNSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MiIsIDI2LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QzIiwgMjcsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDQiLCAyOCwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NSIsIDI5LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q2IiwgMzAsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDciLCAzMSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZjdHJsIiwgMzIsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnN0YXQiLCAzMywgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmdGFnIiwgMzQsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmlzZWciLCAzNSwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmaW9mZiIsIDM2LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvc2VnIiwgMzcsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9vZmYiLCAzOCwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb3AiLCAzOSwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5zc2UiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaWVlZV9zaW5nbGUiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2NGYiLCBmaWVsZF90eXBlLCA0KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaWVlZV9kb3VibGUiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2MmQiLCBmaWVsZF90eXBlLCAyKTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50OCIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYxNmk4IiwgZmllbGRfdHlwZSwgMTYpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQxNiIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY4aTE2IiwgZmllbGRfdHlwZSwgOCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjRpMzIiLCBmaWVsZF90eXBlLCA0KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2Mmk2NCIsIGZpZWxkX3R5cGUsIDIpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgInZlYzEyOCIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2NGYiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInY0X2Zsb2F0IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInYyZCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjJfZG91YmxlIiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInYxNmk4Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2MTZfaW50OCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2OGkxNiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjhfaW50MTYiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjRpMzIiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInY0X2ludDMyIiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInYyaTY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2Ml9pbnQ2NCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50MTI4Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ1aW50MTI4IiwgZmllbGRfdHlwZSk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfY3JlYXRlX2ZsYWdzIChmZWF0dXJlLCAiaTM4Nl9teGNzciIsIDQpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDAsICJJRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEsICJERSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIsICJaRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDMsICJPRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDQsICJVRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDUsICJQRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDYsICJEQVoiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA3LCAiSU0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA4LCAiRE0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA5LCAiWk0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMCwgIk9NIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTEsICJVTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEyLCAiUE0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNSwgIkZaIik7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMCIsIDQwLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xIiwgNDEsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTIiLCA0MiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMyIsIDQzLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW00IiwgNDQsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTUiLCA0NSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNiIsIDQ2LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW03IiwgNDcsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTgiLCA0OCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tOSIsIDQ5LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMCIsIDUwLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMSIsIDUxLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMiIsIDUyLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMyIsIDUzLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xNCIsIDU0LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xNSIsIDU1LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJteGNzciIsIDU2LCAxLCAidmVjdG9yIiwgMzIsICJpMzg2X214Y3NyIik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubGludXgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJvcmlnX3JheCIsIDU3LCAxLCBOVUxMLCA2NCwgImludCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmF2eCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTBoIiwgNTgsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xaCIsIDU5LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMmgiLCA2MCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTNoIiwgNjEsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW00aCIsIDYyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNWgiLCA2MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTZoIiwgNjQsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW03aCIsIDY1LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tOGgiLCA2NiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTloIiwgNjcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMGgiLCA2OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTExaCIsIDY5LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTJoIiwgNzAsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xM2giLCA3MSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTE0aCIsIDcyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTVoIiwgNzMsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5tcHgiKTsKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiYnIxMjgiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJsYm91bmQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ1Ym91bmRfcmF3IiwgZmllbGRfdHlwZSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgIl9ibmRzdGF0dXMiKTsKKysgIHRkZXNjX3NldF9zdHJ1Y3Rfc2l6ZSAodHlwZSwgOCk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJiZGUiLCAyLCA2Myk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJlcnJvciIsIDAsIDEpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgInN0YXR1cyIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAicmF3IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRzdGF0dXMiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInN0YXR1cyIsIGZpZWxkX3R5cGUpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworKyAgdGRlc2Nfc2V0X3N0cnVjdF9zaXplICh0eXBlLCA4KTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImJhc2UiLCAxMiwgNjMpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAicmVzZXJ2ZWQiLCAyLCAxMSk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJwcmVzZXJ2ZWQiLCAxLCAxKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImVuYWJsZWQiLCAwLCAwKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJjZmd1Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImRhdGFfcHRyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJyYXciLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZGNmZ3UiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImNvbmZpZyIsIGZpZWxkX3R5cGUpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA3NCwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNzUsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDc2LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA3NywgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNzgsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDc5LCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworKworKyAgdGRlc2NfYW1kNjRfYXZ4X21weF9saW51eCA9IHJlc3VsdDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC54bWwgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUyNmM3MDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXgueG1sCitAQCAtMCwwICsxLDE5IEBACisrPD94bWwgdmVyc2lvbj0iMS4wIj8+CisrPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisrICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKysgICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgorKworKzwhLS0gQU1ENjQgd2l0aCBBVlggYW5kIE1QWCAtIEluY2x1ZGVzIExpbnV4LW9ubHkgc3BlY2lhbCAicmVnaXN0ZXIiLiAgLS0+CisrCisrPCFET0NUWVBFIHRhcmdldCBTWVNURU0gImdkYi10YXJnZXQuZHRkIj4KKys8dGFyZ2V0PgorKyAgPGFyY2hpdGVjdHVyZT5pMzg2Ong4Ni02NDwvYXJjaGl0ZWN0dXJlPgorKyAgPG9zYWJpPkdOVS9MaW51eDwvb3NhYmk+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1jb3JlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtc3NlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtbGludXgueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1hdngueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1tcHgueG1sIi8+CisrPC90YXJnZXQ+CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC5jIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTI3OWY3MworLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC5jCitAQCAtMCwwICsxLDIwNiBAQAorKy8qIFRISVMgRklMRSBJUyBHRU5FUkFURUQuICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmk6c2V0IHJvOgorKyAgT3JpZ2luYWw6IGFtZDY0LWF2eC1tcHgueG1sICovCisrCisrI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAib3NhYmkuaCIKKysjaW5jbHVkZSAidGFyZ2V0LWRlc2NyaXB0aW9ucy5oIgorKworK3N0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfYXZ4X21weDsKKytzdGF0aWMgdm9pZAorK2luaXRpYWxpemVfdGRlc2NfYW1kNjRfYXZ4X21weCAodm9pZCkKKyt7CisrICBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnJlc3VsdCA9IGFsbG9jYXRlX3RhcmdldF9kZXNjcmlwdGlvbiAoKTsKKysgIHN0cnVjdCB0ZGVzY19mZWF0dXJlICpmZWF0dXJlOworKyAgc3RydWN0IHRkZXNjX3R5cGUgKmZpZWxkX3R5cGU7CisrICBzdHJ1Y3QgdGRlc2NfdHlwZSAqdHlwZTsKKysKKysgIHNldF90ZGVzY19hcmNoaXRlY3R1cmUgKHJlc3VsdCwgYmZkX3NjYW5fYXJjaCAoImkzODY6eDg2LTY0IikpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmNvcmUiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19jcmVhdGVfZmxhZ3MgKGZlYXR1cmUsICJpMzg2X2VmbGFncyIsIDQpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDAsICJDRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEsICIiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyLCAiUEYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA0LCAiQUYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA2LCAiWkYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA3LCAiU0YiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA4LCAiVEYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA5LCAiSUYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMCwgIkRGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTEsICJPRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE0LCAiTlQiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNiwgIlJGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTcsICJWTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE4LCAiQUMiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxOSwgIlZJRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIwLCAiVklQIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMjEsICJJRCIpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJheCIsIDAsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyYngiLCAxLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmN4IiwgMiwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJkeCIsIDMsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyc2kiLCA0LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmRpIiwgNSwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJicCIsIDYsIDEsIE5VTEwsIDY0LCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyc3AiLCA3LCAxLCBOVUxMLCA2NCwgImRhdGFfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjgiLCA4LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjkiLCA5LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEwIiwgMTAsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTEiLCAxMSwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxMiIsIDEyLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEzIiwgMTMsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTQiLCAxNCwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxNSIsIDE1LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmlwIiwgMTYsIDEsIE5VTEwsIDY0LCAiY29kZV9wdHIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlZmxhZ3MiLCAxNywgMSwgTlVMTCwgMzIsICJpMzg2X2VmbGFncyIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImNzIiwgMTgsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzcyIsIDE5LCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZHMiLCAyMCwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVzIiwgMjEsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmcyIsIDIyLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZ3MiLCAyMywgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MCIsIDI0LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QxIiwgMjUsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDIiLCAyNiwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MyIsIDI3LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q0IiwgMjgsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDUiLCAyOSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NiIsIDMwLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q3IiwgMzEsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmY3RybCIsIDMyLCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZzdGF0IiwgMzMsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnRhZyIsIDM0LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZpc2VnIiwgMzUsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmlvZmYiLCAzNiwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb3NlZyIsIDM3LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvb2ZmIiwgMzgsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9wIiwgMzksIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuc3NlIik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImllZWVfc2luZ2xlIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjRmIiwgZmllbGRfdHlwZSwgNCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImllZWVfZG91YmxlIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjJkIiwgZmllbGRfdHlwZSwgMik7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDgiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2MTZpOCIsIGZpZWxkX3R5cGUsIDE2KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50MTYiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2OGkxNiIsIGZpZWxkX3R5cGUsIDgpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY0aTMyIiwgZmllbGRfdHlwZSwgNCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjJpNjQiLCBmaWVsZF90eXBlLCAyKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJ2ZWMxMjgiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjRmIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2NF9mbG9hdCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2MmQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYyX2RvdWJsZSIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2MTZpOCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjE2X2ludDgiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjhpMTYiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInY4X2ludDE2IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY0aTMyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2NF9pbnQzMiIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2Mmk2NCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjJfaW50NjQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDEyOCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidWludDEyOCIsIGZpZWxkX3R5cGUpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX2NyZWF0ZV9mbGFncyAoZmVhdHVyZSwgImkzODZfbXhjc3IiLCA0KTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAwLCAiSUUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxLCAiREUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyLCAiWkUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAzLCAiT0UiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA0LCAiVUUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA1LCAiUEUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA2LCAiREFaIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNywgIklNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOCwgIkRNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOSwgIlpNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTAsICJPTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDExLCAiVU0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMiwgIlBNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTUsICJGWiIpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTAiLCA0MCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMSIsIDQxLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0yIiwgNDIsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTMiLCA0MywgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNCIsIDQ0LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW01IiwgNDUsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTYiLCA0NiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNyIsIDQ3LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW04IiwgNDgsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTkiLCA0OSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMTAiLCA1MCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMTEiLCA1MSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMTIiLCA1MiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMTMiLCA1MywgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMTQiLCA1NCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMTUiLCA1NSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAibXhjc3IiLCA1NiwgMSwgInZlY3RvciIsIDMyLCAiaTM4Nl9teGNzciIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmF2eCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTBoIiwgNTcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xaCIsIDU4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMmgiLCA1OSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTNoIiwgNjAsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW00aCIsIDYxLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNWgiLCA2MiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTZoIiwgNjMsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW03aCIsIDY0LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tOGgiLCA2NSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTloIiwgNjYsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMGgiLCA2NywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTExaCIsIDY4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTJoIiwgNjksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xM2giLCA3MCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTE0aCIsIDcxLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTVoIiwgNzIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5tcHgiKTsKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiYnIxMjgiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJsYm91bmQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ1Ym91bmRfcmF3IiwgZmllbGRfdHlwZSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgIl9ibmRzdGF0dXMiKTsKKysgIHRkZXNjX3NldF9zdHJ1Y3Rfc2l6ZSAodHlwZSwgOCk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJiZGUiLCAyLCA2Myk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJlcnJvciIsIDAsIDEpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgInN0YXR1cyIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAicmF3IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRzdGF0dXMiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInN0YXR1cyIsIGZpZWxkX3R5cGUpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworKyAgdGRlc2Nfc2V0X3N0cnVjdF9zaXplICh0eXBlLCA4KTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImJhc2UiLCAxMiwgNjMpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAicmVzZXJ2ZWQiLCAyLCAxMSk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJwcmVzZXJ2ZWQiLCAxLCAxKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImVuYWJsZWQiLCAwLCAwKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJjZmd1Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImRhdGFfcHRyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJyYXciLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZGNmZ3UiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImNvbmZpZyIsIGZpZWxkX3R5cGUpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA3MywgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNzQsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDc1LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA3NiwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNzcsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDc4LCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworKworKyAgdGRlc2NfYW1kNjRfYXZ4X21weCA9IHJlc3VsdDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC54bWwgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjNlZWE2ZGQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgueG1sCitAQCAtMCwwICsxLDE3IEBACisrPD94bWwgdmVyc2lvbj0iMS4wIj8+CisrPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisrICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKysgICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgorKworKzwhLS0gQU1ENjQgd2l0aCBBVlggYW5kIE1QWCAtLT4KKysKKys8IURPQ1RZUEUgdGFyZ2V0IFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgorKzx0YXJnZXQ+CisrICA8YXJjaGl0ZWN0dXJlPmkzODY6eDg2LTY0PC9hcmNoaXRlY3R1cmU+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1jb3JlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtc3NlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtYXZ4LnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtbXB4LnhtbCIvPgorKzwvdGFyZ2V0PgorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC1saW51eC5jIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LWxpbnV4LmMKK2luZGV4IDg2YTE3NzQuLjVjMTU4NGIgMTAwNjQ0CistLS0gYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgtbGludXguYworKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LWxpbnV4LmMKK0BAIC0xNTEsMjQgKzE1MSw2IEBAIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfbXB4X2xpbnV4ICh2b2lkKQorICAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmxpbnV4Iik7CisgICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAib3JpZ19yYXgiLCA1NywgMSwgTlVMTCwgNjQsICJpbnQiKTsKKworLSAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmF2eCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTBoIiwgNTgsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xaCIsIDU5LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMmgiLCA2MCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTNoIiwgNjEsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW00aCIsIDYyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNWgiLCA2MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTZoIiwgNjQsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW03aCIsIDY1LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tOGgiLCA2NiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTloIiwgNjcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMGgiLCA2OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTExaCIsIDY5LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTJoIiwgNzAsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xM2giLCA3MSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTE0aCIsIDcyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTVoIiwgNzMsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0KKyAgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5tcHgiKTsKKyAgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiYnIxMjgiKTsKKyAgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CitAQCAtMjAwLDEyICsxODIsMTIgQEAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9tcHhfbGludXggKHZvaWQpCisgICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisgICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJjb25maWciLCBmaWVsZF90eXBlKTsKKworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA3NCwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNzUsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDc2LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA3NywgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNzgsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDc5LCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA1OCwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNTksIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDYwLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA2MSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNjIsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDYzLCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworCisgICB0ZGVzY19hbWQ2NF9tcHhfbGludXggPSByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC1saW51eC54bWwgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgtbGludXgueG1sCitpbmRleCAxNWU4N2I0Li44MzUxMjZiIDEwMDY0NAorLS0tIGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LWxpbnV4LnhtbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LWxpbnV4LnhtbAorQEAgLTE0LDYgKzE0LDUgQEAKKyAgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LWNvcmUueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1zc2UueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1saW51eC54bWwiLz4KKy0gIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LWF2eC54bWwiLz4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LW1weC54bWwiLz4KKyA8L3RhcmdldD4KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHguYyBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC5jCitpbmRleCAxNWFlNWY3Li40Yzg1MmVmIDEwMDY0NAorLS0tIGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LmMKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC5jCitAQCAtMTQ2LDI0ICsxNDYsNiBAQCBpbml0aWFsaXplX3RkZXNjX2FtZDY0X21weCAodm9pZCkKKyAgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xNSIsIDU1LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKyAgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJteGNzciIsIDU2LCAxLCAidmVjdG9yIiwgMzIsICJpMzg2X214Y3NyIik7CisKKy0gIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5hdngiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0waCIsIDU3LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMWgiLCA1OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTJoIiwgNTksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0zaCIsIDYwLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNGgiLCA2MSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTVoIiwgNjIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW02aCIsIDYzLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tN2giLCA2NCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbThoIiwgNjUsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW05aCIsIDY2LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTBoIiwgNjcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMWgiLCA2OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTEyaCIsIDY5LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTNoIiwgNzAsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xNGgiLCA3MSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTE1aCIsIDcyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistCisgICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubXB4Iik7CisgICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgImJyMTI4Iik7CisgICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQ2NCIpOworQEAgLTE5NSwxMiArMTc3LDEyIEBAIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfbXB4ICh2b2lkKQorICAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworICAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAiY29uZmlnIiwgZmllbGRfdHlwZSk7CisKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNzMsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDc0LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA3NSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNzYsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDc3LCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA3OCwgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNTcsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDU4LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA1OSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNjAsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDYxLCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA2MiwgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKworICAgdGRlc2NfYW1kNjRfbXB4ID0gcmVzdWx0OworIH0KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgueG1sIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LnhtbAoraW5kZXggMjFiNmRmMy4uZTQ1ODczNiAxMDA2NDQKKy0tLSBhL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC54bWwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC54bWwKK0BAIC0xMiw2ICsxMiw1IEBACisgICA8YXJjaGl0ZWN0dXJlPmkzODY6eDg2LTY0PC9hcmNoaXRlY3R1cmU+CisgICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1jb3JlLnhtbCIvPgorICAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtc3NlLnhtbCIvPgorLSAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtYXZ4LnhtbCIvPgorICAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtbXB4LnhtbCIvPgorIDwvdGFyZ2V0PgorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC5jIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kZDc1NDAzCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguYworQEAgLTAsMCArMSwxODcgQEAKKysvKiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiAgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotIHZpOnNldCBybzoKKysgIE9yaWdpbmFsOiBpMzg2LWF2eC1tcHgtbGludXgueG1sICovCisrCisrI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAib3NhYmkuaCIKKysjaW5jbHVkZSAidGFyZ2V0LWRlc2NyaXB0aW9ucy5oIgorKworK3N0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4OworK3N0YXRpYyB2b2lkCisraW5pdGlhbGl6ZV90ZGVzY19pMzg2X2F2eF9tcHhfbGludXggKHZvaWQpCisreworKyAgc3RydWN0IHRhcmdldF9kZXNjICpyZXN1bHQgPSBhbGxvY2F0ZV90YXJnZXRfZGVzY3JpcHRpb24gKCk7CisrICBzdHJ1Y3QgdGRlc2NfZmVhdHVyZSAqZmVhdHVyZTsKKysgIHN0cnVjdCB0ZGVzY190eXBlICpmaWVsZF90eXBlOworKyAgc3RydWN0IHRkZXNjX3R5cGUgKnR5cGU7CisrCisrICBzZXRfdGRlc2NfYXJjaGl0ZWN0dXJlIChyZXN1bHQsIGJmZF9zY2FuX2FyY2ggKCJpMzg2IikpOworKworKyAgc2V0X3RkZXNjX29zYWJpIChyZXN1bHQsIG9zYWJpX2Zyb21fdGRlc2Nfc3RyaW5nICgiR05VL0xpbnV4IikpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmNvcmUiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19jcmVhdGVfZmxhZ3MgKGZlYXR1cmUsICJpMzg2X2VmbGFncyIsIDQpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDAsICJDRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEsICIiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyLCAiUEYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA0LCAiQUYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA2LCAiWkYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA3LCAiU0YiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA4LCAiVEYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA5LCAiSUYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMCwgIkRGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTEsICJPRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE0LCAiTlQiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNiwgIlJGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTcsICJWTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE4LCAiQUMiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxOSwgIlZJRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIwLCAiVklQIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMjEsICJJRCIpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVheCIsIDAsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlY3giLCAxLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWR4IiwgMiwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVieCIsIDMsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlc3AiLCA0LCAxLCBOVUxMLCAzMiwgImRhdGFfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWJwIiwgNSwgMSwgTlVMTCwgMzIsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVzaSIsIDYsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlZGkiLCA3LCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWlwIiwgOCwgMSwgTlVMTCwgMzIsICJjb2RlX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVmbGFncyIsIDksIDEsIE5VTEwsIDMyLCAiaTM4Nl9lZmxhZ3MiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJjcyIsIDEwLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3MiLCAxMSwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImRzIiwgMTIsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlcyIsIDEzLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnMiLCAxNCwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImdzIiwgMTUsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDAiLCAxNiwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MSIsIDE3LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QyIiwgMTgsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDMiLCAxOSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NCIsIDIwLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q1IiwgMjEsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDYiLCAyMiwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NyIsIDIzLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmN0cmwiLCAyNCwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmc3RhdCIsIDI1LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZ0YWciLCAyNiwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmaXNlZyIsIDI3LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZpb2ZmIiwgMjgsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9zZWciLCAyOSwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb29mZiIsIDMwLCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvcCIsIDMxLCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LnNzZSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpZWVlX3NpbmdsZSIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY0ZiIsIGZpZWxkX3R5cGUsIDQpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpZWVlX2RvdWJsZSIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYyZCIsIGZpZWxkX3R5cGUsIDIpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQ4Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjE2aTgiLCBmaWVsZF90eXBlLCAxNik7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDE2Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjhpMTYiLCBmaWVsZF90eXBlLCA4KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2NGkzMiIsIGZpZWxkX3R5cGUsIDQpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYyaTY0IiwgZmllbGRfdHlwZSwgMik7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAidmVjMTI4Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY0ZiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjRfZmxvYXQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjJkIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2Ml9kb3VibGUiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjE2aTgiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYxNl9pbnQ4IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY4aTE2Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2OF9pbnQxNiIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2NGkzMiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjRfaW50MzIiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjJpNjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYyX2ludDY0IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInVpbnQxMjgiLCBmaWVsZF90eXBlKTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19jcmVhdGVfZmxhZ3MgKGZlYXR1cmUsICJpMzg2X214Y3NyIiwgNCk7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMCwgIklFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMSwgIkRFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMiwgIlpFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMywgIk9FIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNCwgIlVFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNSwgIlBFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNiwgIkRBWiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDcsICJJTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDgsICJETSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDksICJaTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEwLCAiT00iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMSwgIlVNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTIsICJQTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE1LCAiRloiKTsKKysKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0wIiwgMzIsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTEiLCAzMywgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMiIsIDM0LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0zIiwgMzUsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTQiLCAzNiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNSIsIDM3LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW02IiwgMzgsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTciLCAzOSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAibXhjc3IiLCA0MCwgMSwgInZlY3RvciIsIDMyLCAiaTM4Nl9teGNzciIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmxpbnV4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAib3JpZ19lYXgiLCA0MSwgMSwgTlVMTCwgMzIsICJpbnQiKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5hdngiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0waCIsIDQyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMWgiLCA0MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTJoIiwgNDQsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0zaCIsIDQ1LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNGgiLCA0NiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTVoIiwgNDcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW02aCIsIDQ4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tN2giLCA0OSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2Lm1weCIpOworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJicjEyOCIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImxib3VuZCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInVib3VuZF9yYXciLCBmaWVsZF90eXBlKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiX2JuZHN0YXR1cyIpOworKyAgdGRlc2Nfc2V0X3N0cnVjdF9zaXplICh0eXBlLCA4KTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImJkZSIsIDIsIDMxKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImVycm9yIiwgMCwgMSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAic3RhdHVzIik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImRhdGFfcHRyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJyYXciLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZHN0YXR1cyIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAic3RhdHVzIiwgZmllbGRfdHlwZSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisrICB0ZGVzY19zZXRfc3RydWN0X3NpemUgKHR5cGUsIDgpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiYmFzZSIsIDEyLCAzMSk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJyZXNlcnZlZCIsIDIsIDExKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgInByZXNlcnZlZCIsIDEsIDEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiZW5hYmxlZCIsIDAsIDEpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgImNmZ3UiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInJhdyIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAiY29uZmlnIiwgZmllbGRfdHlwZSk7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMHJhdyIsIDUwLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDFyYXciLCA1MSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQycmF3IiwgNTIsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kM3JhdyIsIDUzLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZGNmZ3UiLCA1NCwgMSwgTlVMTCwgNjQsICJjZmd1Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kc3RhdHVzIiwgNTUsIDEsIE5VTEwsIDY0LCAic3RhdHVzIik7CisrCisrICB0ZGVzY19pMzg2X2F2eF9tcHhfbGludXggPSByZXN1bHQ7CisrfQorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC54bWwgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXgueG1sCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzlhMWE2MQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LnhtbAorQEAgLTAsMCArMSwxOSBAQAorKzw/eG1sIHZlcnNpb249IjEuMCI/PgorKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorKyAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CisrICAgICBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICAtLT4KKysKKys8IS0tIEkzODYgd2l0aCBBVlggYW5kIE1QWC0gSW5jbHVkZXMgTGludXgtb25seSBzcGVjaWFsICJyZWdpc3RlciIuICAtLT4KKysKKys8IURPQ1RZUEUgdGFyZ2V0IFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgorKzx0YXJnZXQ+CisrICA8YXJjaGl0ZWN0dXJlPmkzODY8L2FyY2hpdGVjdHVyZT4KKysgIDxvc2FiaT5HTlUvTGludXg8L29zYWJpPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtY29yZS54bWwiLz4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LXNzZS54bWwiLz4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LWxpbnV4LnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtYXZ4LnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtbXB4LnhtbCIvPgorKzwvdGFyZ2V0PgorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC5jIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMTA0ZTRiCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHguYworQEAgLTAsMCArMSwxODIgQEAKKysvKiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiAgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotIHZpOnNldCBybzoKKysgIE9yaWdpbmFsOiBpMzg2LWF2eC1tcHgueG1sICovCisrCisrI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAib3NhYmkuaCIKKysjaW5jbHVkZSAidGFyZ2V0LWRlc2NyaXB0aW9ucy5oIgorKworK3N0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdnhfbXB4OworK3N0YXRpYyB2b2lkCisraW5pdGlhbGl6ZV90ZGVzY19pMzg2X2F2eF9tcHggKHZvaWQpCisreworKyAgc3RydWN0IHRhcmdldF9kZXNjICpyZXN1bHQgPSBhbGxvY2F0ZV90YXJnZXRfZGVzY3JpcHRpb24gKCk7CisrICBzdHJ1Y3QgdGRlc2NfZmVhdHVyZSAqZmVhdHVyZTsKKysgIHN0cnVjdCB0ZGVzY190eXBlICpmaWVsZF90eXBlOworKyAgc3RydWN0IHRkZXNjX3R5cGUgKnR5cGU7CisrCisrICBzZXRfdGRlc2NfYXJjaGl0ZWN0dXJlIChyZXN1bHQsIGJmZF9zY2FuX2FyY2ggKCJpMzg2IikpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmNvcmUiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19jcmVhdGVfZmxhZ3MgKGZlYXR1cmUsICJpMzg2X2VmbGFncyIsIDQpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDAsICJDRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEsICIiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyLCAiUEYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA0LCAiQUYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA2LCAiWkYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA3LCAiU0YiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA4LCAiVEYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA5LCAiSUYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMCwgIkRGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTEsICJPRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE0LCAiTlQiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNiwgIlJGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTcsICJWTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE4LCAiQUMiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxOSwgIlZJRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIwLCAiVklQIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMjEsICJJRCIpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVheCIsIDAsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlY3giLCAxLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWR4IiwgMiwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVieCIsIDMsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlc3AiLCA0LCAxLCBOVUxMLCAzMiwgImRhdGFfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWJwIiwgNSwgMSwgTlVMTCwgMzIsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVzaSIsIDYsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlZGkiLCA3LCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWlwIiwgOCwgMSwgTlVMTCwgMzIsICJjb2RlX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVmbGFncyIsIDksIDEsIE5VTEwsIDMyLCAiaTM4Nl9lZmxhZ3MiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJjcyIsIDEwLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3MiLCAxMSwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImRzIiwgMTIsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlcyIsIDEzLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnMiLCAxNCwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImdzIiwgMTUsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDAiLCAxNiwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MSIsIDE3LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QyIiwgMTgsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDMiLCAxOSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NCIsIDIwLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q1IiwgMjEsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDYiLCAyMiwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NyIsIDIzLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmN0cmwiLCAyNCwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmc3RhdCIsIDI1LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZ0YWciLCAyNiwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmaXNlZyIsIDI3LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZpb2ZmIiwgMjgsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9zZWciLCAyOSwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb29mZiIsIDMwLCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvcCIsIDMxLCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LnNzZSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpZWVlX3NpbmdsZSIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY0ZiIsIGZpZWxkX3R5cGUsIDQpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpZWVlX2RvdWJsZSIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYyZCIsIGZpZWxkX3R5cGUsIDIpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQ4Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjE2aTgiLCBmaWVsZF90eXBlLCAxNik7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDE2Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjhpMTYiLCBmaWVsZF90eXBlLCA4KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2NGkzMiIsIGZpZWxkX3R5cGUsIDQpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYyaTY0IiwgZmllbGRfdHlwZSwgMik7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAidmVjMTI4Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY0ZiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjRfZmxvYXQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjJkIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2Ml9kb3VibGUiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjE2aTgiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYxNl9pbnQ4IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY4aTE2Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2OF9pbnQxNiIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2NGkzMiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjRfaW50MzIiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjJpNjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYyX2ludDY0IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInVpbnQxMjgiLCBmaWVsZF90eXBlKTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19jcmVhdGVfZmxhZ3MgKGZlYXR1cmUsICJpMzg2X214Y3NyIiwgNCk7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMCwgIklFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMSwgIkRFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMiwgIlpFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMywgIk9FIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNCwgIlVFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNSwgIlBFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNiwgIkRBWiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDcsICJJTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDgsICJETSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDksICJaTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEwLCAiT00iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMSwgIlVNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTIsICJQTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE1LCAiRloiKTsKKysKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0wIiwgMzIsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTEiLCAzMywgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMiIsIDM0LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0zIiwgMzUsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTQiLCAzNiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNSIsIDM3LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW02IiwgMzgsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTciLCAzOSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAibXhjc3IiLCA0MCwgMSwgInZlY3RvciIsIDMyLCAiaTM4Nl9teGNzciIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmF2eCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTBoIiwgNDEsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xaCIsIDQyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMmgiLCA0MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTNoIiwgNDQsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW00aCIsIDQ1LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNWgiLCA0NiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTZoIiwgNDcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW03aCIsIDQ4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubXB4Iik7CisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgImJyMTI4Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQ2NCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAibGJvdW5kIiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQ2NCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidWJvdW5kX3JhdyIsIGZpZWxkX3R5cGUpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJfYm5kc3RhdHVzIik7CisrICB0ZGVzY19zZXRfc3RydWN0X3NpemUgKHR5cGUsIDgpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiYmRlIiwgMiwgMzEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiZXJyb3IiLCAwLCAxKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJzdGF0dXMiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInJhdyIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kc3RhdHVzIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJzdGF0dXMiLCBmaWVsZF90eXBlKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiX2JuZGNmZ3UiKTsKKysgIHRkZXNjX3NldF9zdHJ1Y3Rfc2l6ZSAodHlwZSwgOCk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJiYXNlIiwgMTIsIDMxKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgInJlc2VydmVkIiwgMiwgMTEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAicHJlc2VydmVkIiwgMSwgMSk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJlbmFibGVkIiwgMCwgMSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAiY2ZndSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAicmF3IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJjb25maWciLCBmaWVsZF90eXBlKTsKKysKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNDksIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDUwLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA1MSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNTIsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDUzLCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA1NCwgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKysKKysgIHRkZXNjX2kzODZfYXZ4X21weCA9IHJlc3VsdDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LnhtbCBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC54bWwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYjk3MzY3CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgueG1sCitAQCAtMCwwICsxLDE3IEBACisrPD94bWwgdmVyc2lvbj0iMS4wIj8+CisrPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisrICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKysgICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgorKworKzwhLS0gSTM4NiB3aXRoIEFWWCBhbmQgTVBYIC0tPgorKworKzwhRE9DVFlQRSB0YXJnZXQgU1lTVEVNICJnZGItdGFyZ2V0LmR0ZCI+CisrPHRhcmdldD4KKysgIDxhcmNoaXRlY3R1cmU+aTM4NjwvYXJjaGl0ZWN0dXJlPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtY29yZS54bWwiLz4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LXNzZS54bWwiLz4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LWF2eC54bWwiLz4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LW1weC54bWwiLz4KKys8L3RhcmdldD4KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC1saW51eC5jIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgtbGludXguYworaW5kZXggZGJmODc4OS4uYzZiYWZlYSAxMDA2NDQKKy0tLSBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LmMKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LmMKK0BAIC0xMzUsMTYgKzEzNSw2IEBAIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9tcHhfbGludXggKHZvaWQpCisgICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubGludXgiKTsKKyAgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJvcmlnX2VheCIsIDQxLCAxLCBOVUxMLCAzMiwgImludCIpOworCistICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuYXZ4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMGgiLCA0MiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTFoIiwgNDMsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0yaCIsIDQ0LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tM2giLCA0NSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTRoIiwgNDYsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW01aCIsIDQ3LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNmgiLCA0OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTdoIiwgNDksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0KKyAgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5tcHgiKTsKKyAgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiYnIxMjgiKTsKKyAgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CitAQCAtMTc2LDEyICsxNjYsMTIgQEAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X21weF9saW51eCAodm9pZCkKKyAgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZGNmZ3UiKTsKKyAgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImNvbmZpZyIsIGZpZWxkX3R5cGUpOworCistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMHJhdyIsIDUwLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDFyYXciLCA1MSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQycmF3IiwgNTIsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kM3JhdyIsIDUzLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZGNmZ3UiLCA1NCwgMSwgTlVMTCwgNjQsICJjZmd1Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kc3RhdHVzIiwgNTUsIDEsIE5VTEwsIDY0LCAic3RhdHVzIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMHJhdyIsIDQyLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDFyYXciLCA0MywgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQycmF3IiwgNDQsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kM3JhdyIsIDQ1LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZGNmZ3UiLCA0NiwgMSwgTlVMTCwgNjQsICJjZmd1Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kc3RhdHVzIiwgNDcsIDEsIE5VTEwsIDY0LCAic3RhdHVzIik7CisKKyAgIHRkZXNjX2kzODZfbXB4X2xpbnV4ID0gcmVzdWx0OworIH0KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC1saW51eC54bWwgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC1saW51eC54bWwKK2luZGV4IGM0MDA0ZDYuLjQyMjhjZjUgMTAwNjQ0CistLS0gYS9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC1saW51eC54bWwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LnhtbAorQEAgLTE0LDYgKzE0LDUgQEAKKyAgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LWNvcmUueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1zc2UueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1saW51eC54bWwiLz4KKy0gIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LWF2eC54bWwiLz4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LW1weC54bWwiLz4KKyA8L3RhcmdldD4KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC5jIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHguYworaW5kZXggMWUwNGFmZC4uNDMwZGIzZiAxMDA2NDQKKy0tLSBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LmMKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LmMKK0BAIC0xMzAsMTYgKzEzMCw2IEBAIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9tcHggKHZvaWQpCisgICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNyIsIDM5LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKyAgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJteGNzciIsIDQwLCAxLCAidmVjdG9yIiwgMzIsICJpMzg2X214Y3NyIik7CisKKy0gIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5hdngiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0waCIsIDQxLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMWgiLCA0MiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTJoIiwgNDMsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0zaCIsIDQ0LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNGgiLCA0NSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTVoIiwgNDYsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW02aCIsIDQ3LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tN2giLCA0OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLQorICAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2Lm1weCIpOworICAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJicjEyOCIpOworICAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKK0BAIC0xNzEsMTIgKzE2MSwxMiBAQCBpbml0aWFsaXplX3RkZXNjX2kzODZfbXB4ICh2b2lkKQorICAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworICAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAiY29uZmlnIiwgZmllbGRfdHlwZSk7CisKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNDksIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDUwLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA1MSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNTIsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDUzLCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA1NCwgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNDEsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDQyLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA0MywgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNDQsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDQ1LCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA0NiwgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKworICAgdGRlc2NfaTM4Nl9tcHggPSByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LnhtbCBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LnhtbAoraW5kZXggNTJhNjhkYi4uYzE4MDZjYiAxMDA2NDQKKy0tLSBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LnhtbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgueG1sCitAQCAtMTIsNiArMTIsNSBAQAorICAgPGFyY2hpdGVjdHVyZT5pMzg2PC9hcmNoaXRlY3R1cmU+CisgICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1jb3JlLnhtbCIvPgorICAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtc3NlLnhtbCIvPgorLSAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtYXZ4LnhtbCIvPgorICAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtbXB4LnhtbCIvPgorIDwvdGFyZ2V0PgorZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitpbmRleCAxZTg3NGUzLi5kZWUyZWExIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorKysrIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorQEAgLTM3Niw5ICszNzYsMTEgQEAgY2xlYW46CisgCXJtIC1mIHhtbC1idWlsdGluLmMgc3RhbXAteG1sCisgCXJtIC1mIGkzODYtYXZ4LmMgaTM4Ni1hdngtbGludXguYworIAlybSAtZiBpMzg2LW1weC5jIGkzODYtbXB4LWxpbnV4LmMKKysJcm0gLWYgaTM4Ni1hdngtbXB4LmMgaTM4Ni1hdngtbXB4LWxpbnV4LmMKKyAJcm0gLWYgaTM4Ni1hdng1MTIuYyBpMzg2LWF2eDUxMi1saW51eC5jCisgCXJtIC1mIGFtZDY0LWF2eC5jIGFtZDY0LWF2eC1saW51eC5jCisgCXJtIC1mIGFtZDY0LW1weC5jIGFtZDY0LW1weC1saW51eC5jCisrCXJtIC1mIGFtZDY0LWF2eC1tcHguYyBhbWQ2NC1hdngtbXB4LWxpbnV4LmMKKyAJcm0gLWYgYW1kNjQtYXZ4NTEyLmMgYW1kNjQtYXZ4NTEyLWxpbnV4LmMKKyAJcm0gLWYgaTM4Ni1tbXguYyBpMzg2LW1teC1saW51eC5jCisgCXJtIC1mIHgzMi5jIHgzMi1saW51eC5jCitAQCAtNDk1LDYgKzQ5NywyMSBAQCByZWdjYWNoZS1pcGEubzogcmVnY2FjaGUuYworIGkzODYtbGludXgtaXBhLm86IGkzODYtbGludXguYworIAkkKElQQUdFTlRfQ09NUElMRSkgJDwKKyAJJChQT1NUQ09NUElMRSkKKytpMzg2LW1teC1saW51eC1pcGEubzogaTM4Ni1tbXgtbGludXguYworKwkkKElQQUdFTlRfQ09NUElMRSkgJDwKKysJJChQT1NUQ09NUElMRSkKKytpMzg2LWF2eC1saW51eC1pcGEubzogaTM4Ni1hdngtbGludXguYworKwkkKElQQUdFTlRfQ09NUElMRSkgJDwKKysJJChQT1NUQ09NUElMRSkKKytpMzg2LW1weC1saW51eC1pcGEubzogaTM4Ni1tcHgtbGludXguYworKwkkKElQQUdFTlRfQ09NUElMRSkgJDwKKysJJChQT1NUQ09NUElMRSkKKytpMzg2LWF2eC1tcHgtbGludXgtaXBhLm86IGkzODYtYXZ4LW1weC1saW51eC5jCisrCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorKwkkKFBPU1RDT01QSUxFKQorK2kzODYtYXZ4NTEyLWxpbnV4LWlwYS5vOiBpMzg2LWF2eDUxMi1saW51eC5jCisrCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorKwkkKFBPU1RDT01QSUxFKQorIGxpbnV4LWkzODYtaXBhLm86IGxpbnV4LWkzODYtaXBhLmMKKyAJJChJUEFHRU5UX0NPTVBJTEUpICQ8CisgCSQoUE9TVENPTVBJTEUpCitAQCAtNTA0LDYgKzUyMSwxOCBAQCBsaW51eC1hbWQ2NC1pcGEubzogbGludXgtYW1kNjQtaXBhLmMKKyBhbWQ2NC1saW51eC1pcGEubzogYW1kNjQtbGludXguYworIAkkKElQQUdFTlRfQ09NUElMRSkgJDwKKyAJJChQT1NUQ09NUElMRSkKKythbWQ2NC1hdngtbGludXgtaXBhLm86IGFtZDY0LWF2eC1saW51eC5jCisrCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorKwkkKFBPU1RDT01QSUxFKQorK2FtZDY0LW1weC1saW51eC1pcGEubzogYW1kNjQtbXB4LWxpbnV4LmMKKysJJChJUEFHRU5UX0NPTVBJTEUpICQ8CisrCSQoUE9TVENPTVBJTEUpCisrYW1kNjQtYXZ4LW1weC1saW51eC1pcGEubzogYW1kNjQtYXZ4LW1weC1saW51eC5jCisrCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorKwkkKFBPU1RDT01QSUxFKQorK2FtZDY0LWF2eDUxMi1saW51eC1pcGEubzogYW1kNjQtYXZ4NTEyLWxpbnV4LmMKKysJJChJUEFHRU5UX0NPTVBJTEUpICQ8CisrCSQoUE9TVENPTVBJTEUpCisgbGludXgtYWFyY2g2NC1pcGEubzogbGludXgtYWFyY2g2NC1pcGEuYworIAkkKElQQUdFTlRfQ09NUElMRSkgJDwKKyAJJChQT1NUQ09NUElMRSkKK0BAIC02OTQsNiArNzIzLDEwIEBAIGkzODYtbXB4LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LmRhdCAkKHJlZ2RhdF9zaCkKKyAJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHguZGF0IGkzODYtbXB4LmMKKyBpMzg2LW1weC1saW51eC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1weC1saW51eC5kYXQgJChyZWdkYXRfc2gpCisgCSQoU0hFTEwpICQocmVnZGF0X3NoKSAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LWxpbnV4LmRhdCBpMzg2LW1weC1saW51eC5jCisraTM4Ni1hdngtbXB4LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC5kYXQgJChyZWdkYXRfc2gpCisrCSQoU0hFTEwpICQocmVnZGF0X3NoKSAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC5kYXQgaTM4Ni1hdngtbXB4LmMKKytpMzg2LWF2eC1tcHgtbGludXguYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmRhdCAkKHJlZ2RhdF9zaCkKKysJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmRhdCBpMzg2LWF2eC1tcHgtbGludXguYworIGkzODYtbW14LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2kzODYtbW14LmRhdCAkKHJlZ2RhdF9zaCkKKyAJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tbXguZGF0IGkzODYtbW14LmMKKyBpMzg2LW1teC1saW51eC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1teC1saW51eC5kYXQgJChyZWdkYXRfc2gpCitAQCAtODA4LDYgKzg0MSwxMCBAQCBhbWQ2NC1tcHguYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtbXB4LmRhdCAkKHJlZ2RhdF9zaCkKKyAJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtbXB4LmRhdCBhbWQ2NC1tcHguYworIGFtZDY0LW1weC1saW51eC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHgtbGludXguZGF0ICQocmVnZGF0X3NoKQorIAkkKFNIRUxMKSAkKHJlZ2RhdF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHgtbGludXguZGF0IGFtZDY0LW1weC1saW51eC5jCisrYW1kNjQtYXZ4LW1weC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LmRhdCAkKHJlZ2RhdF9zaCkKKysJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtYXZ4LW1weC5kYXQgYW1kNjQtYXZ4LW1weC5jCisrYW1kNjQtYXZ4LW1weC1saW51eC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmRhdCAkKHJlZ2RhdF9zaCkKKysJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC5kYXQgYW1kNjQtYXZ4LW1weC1saW51eC5jCisgeDMyLmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L3gzMi5kYXQgJChyZWdkYXRfc2gpCisgCSQoU0hFTEwpICQocmVnZGF0X3NoKSAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L3gzMi5kYXQgeDMyLmMKKyB4MzItbGludXguYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYveDMyLWxpbnV4LmRhdCAkKHJlZ2RhdF9zaCkKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2NvbmZpZ3VyZS5zcnYgYi9nZGIvZ2Ric2VydmVyL2NvbmZpZ3VyZS5zcnYKK2luZGV4IGE1NGI5ZTcuLjQ5MzVhMzYgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2NvbmZpZ3VyZS5zcnYKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlLnNydgorQEAgLTI0LDIwICsyNCwyMyBAQAorICMgRGVmYXVsdCBob3N0aW9fbGFzdF9lcnJvciBpbXBsZW1lbnRhdGlvbgorIHNydl9ob3N0aW9fZXJyX29ianM9Imhvc3Rpby1lcnJuby5vIgorCistc3J2X2kzODZfcmVnb2JqPSJpMzg2Lm8gaTM4Ni1hdngubyBpMzg2LWF2eDUxMi5vIGkzODYtbXB4Lm8gaTM4Ni1tbXgubyIKKy1zcnZfaTM4Nl9saW51eF9yZWdvYmo9ImkzODYtbGludXgubyBpMzg2LWF2eC1saW51eC5vIGkzODYtYXZ4NTEyLWxpbnV4Lm8gaTM4Ni1tcHgtbGludXgubyBpMzg2LW1teC1saW51eC5vIgorLXNydl9hbWQ2NF9yZWdvYmo9ImFtZDY0Lm8gYW1kNjQtYXZ4Lm8gYW1kNjQtYXZ4NTEyLm8gYW1kNjQtbXB4Lm8geDMyLm8geDMyLWF2eC5vIHgzMi1hdng1MTIubyIKKy1zcnZfYW1kNjRfbGludXhfcmVnb2JqPSJhbWQ2NC1saW51eC5vIGFtZDY0LWF2eC1saW51eC5vIGFtZDY0LWF2eDUxMi1saW51eC5vIGFtZDY0LW1weC1saW51eC5vIHgzMi1saW51eC5vIHgzMi1hdngtbGludXgubyB4MzItYXZ4NTEyLWxpbnV4Lm8iCisrc3J2X2kzODZfcmVnb2JqPSJpMzg2Lm8gaTM4Ni1hdngubyBpMzg2LWF2eDUxMi5vIGkzODYtbXB4Lm8gaTM4Ni1hdngtbXB4Lm8gaTM4Ni1tbXgubyIKKytzcnZfaTM4Nl9saW51eF9yZWdvYmo9ImkzODYtbGludXgubyBpMzg2LWF2eC1saW51eC5vIGkzODYtYXZ4NTEyLWxpbnV4Lm8gaTM4Ni1tcHgtbGludXgubyBpMzg2LWF2eC1tcHgtbGludXgubyBpMzg2LW1teC1saW51eC5vIgorK3Nydl9hbWQ2NF9yZWdvYmo9ImFtZDY0Lm8gYW1kNjQtYXZ4Lm8gYW1kNjQtYXZ4NTEyLm8gYW1kNjQtbXB4Lm8gYW1kNjQtYXZ4LW1weC5vIHgzMi5vIHgzMi1hdngubyB4MzItYXZ4NTEyLm8iCisrc3J2X2FtZDY0X2xpbnV4X3JlZ29iaj0iYW1kNjQtbGludXgubyBhbWQ2NC1hdngtbGludXgubyBhbWQ2NC1hdng1MTItbGludXgubyBhbWQ2NC1tcHgtbGludXgubyBhbWQ2NC1hdngtbXB4LWxpbnV4Lm8geDMyLWxpbnV4Lm8geDMyLWF2eC1saW51eC5vIHgzMi1hdng1MTItbGludXgubyIKKysKKysKKytpcGFfaTM4Nl9saW51eF9yZWdvYmo9ImkzODYtbGludXgtaXBhLm8gaTM4Ni1hdngtbGludXgtaXBhLm8gIGkzODYtYXZ4LW1weC1saW51eC1pcGEubyBpMzg2LWF2eDUxMi1saW51eC1pcGEubyBpMzg2LW1weC1saW51eC1pcGEubyBpMzg2LW1teC1saW51eC1pcGEubyIKKytpcGFfYW1kNjRfbGludXhfcmVnb2JqPSJhbWQ2NC1saW51eC1pcGEubyBhbWQ2NC1hdngtbGludXgtaXBhLm8gYW1kNjQtYXZ4LW1weC1saW51eC1pcGEubyBhbWQ2NC1hdng1MTItbGludXgtaXBhLm8gYW1kNjQtbXB4LWxpbnV4LWlwYS5vIgorCistaXBhX2kzODZfbGludXhfcmVnb2JqPWkzODYtbGludXgtaXBhLm8KKy1pcGFfYW1kNjRfbGludXhfcmVnb2JqPWFtZDY0LWxpbnV4LWlwYS5vCisKKyBzcnZfaTM4Nl8zMmJpdF94bWxmaWxlcz0iaTM4Ni8zMmJpdC1jb3JlLnhtbCBpMzg2LzMyYml0LXNzZS54bWwgaTM4Ni8zMmJpdC1hdngueG1sIGkzODYvMzJiaXQtYXZ4NTEyLnhtbCBpMzg2LzMyYml0LW1weC54bWwiCisgc3J2X2kzODZfNjRiaXRfeG1sZmlsZXM9ImkzODYvNjRiaXQtY29yZS54bWwgaTM4Ni82NGJpdC1zc2UueG1sIGkzODYvNjRiaXQtYXZ4LnhtbCBpMzg2LzY0Yml0LWF2eDUxMi54bWwgaTM4Ni94MzItY29yZS54bWwgaTM4Ni82NGJpdC1tcHgueG1sIgorLXNydl9pMzg2X3htbGZpbGVzPSJpMzg2L2kzODYueG1sIGkzODYvaTM4Ni1hdngueG1sIGkzODYvaTM4Ni1hdng1MTIueG1sIGkzODYvaTM4Ni1tcHgueG1sIGkzODYvaTM4Ni1tbXgueG1sICRzcnZfaTM4Nl8zMmJpdF94bWxmaWxlcyIKKy1zcnZfYW1kNjRfeG1sZmlsZXM9ImkzODYvYW1kNjQueG1sIGkzODYvYW1kNjQtYXZ4LnhtbCBpMzg2L2FtZDY0LWF2eDUxMi54bWwgaTM4Ni94MzIueG1sIGkzODYveDMyLWF2eC54bWwgaTM4Ni94MzItYXZ4NTEyLnhtbCBpMzg2L2FtZDY0LW1weC54bWwgJHNydl9pMzg2XzY0Yml0X3htbGZpbGVzIgorLXNydl9pMzg2X2xpbnV4X3htbGZpbGVzPSJpMzg2L2kzODYtbGludXgueG1sIGkzODYvaTM4Ni1hdngtbGludXgueG1sIGkzODYvaTM4Ni1hdng1MTItbGludXgueG1sIGkzODYvaTM4Ni1tbXgtbGludXgueG1sIGkzODYvMzJiaXQtbGludXgueG1sIGkzODYvaTM4Ni1tcHgtbGludXgueG1sICRzcnZfaTM4Nl8zMmJpdF94bWxmaWxlcyIKKy1zcnZfYW1kNjRfbGludXhfeG1sZmlsZXM9ImkzODYvYW1kNjQtbGludXgueG1sIGkzODYvYW1kNjQtYXZ4LWxpbnV4LnhtbCBpMzg2L2FtZDY0LWF2eDUxMi1saW51eC54bWwgaTM4Ni82NGJpdC1saW51eC54bWwgaTM4Ni9hbWQ2NC1tcHgtbGludXgueG1sIGkzODYveDMyLWxpbnV4LnhtbCBpMzg2L3gzMi1hdngtbGludXgueG1sIGkzODYveDMyLWF2eDUxMi1saW51eC54bWwgJHNydl9pMzg2XzY0Yml0X3htbGZpbGVzIgorK3Nydl9pMzg2X3htbGZpbGVzPSJpMzg2L2kzODYueG1sIGkzODYvaTM4Ni1hdngueG1sIGkzODYvaTM4Ni1hdng1MTIueG1sIGkzODYvaTM4Ni1tcHgueG1sIGkzODYvaTM4Ni1hdngtbXB4LnhtbCBpMzg2L2kzODYtbW14LnhtbCAkc3J2X2kzODZfMzJiaXRfeG1sZmlsZXMiCisrc3J2X2FtZDY0X3htbGZpbGVzPSJpMzg2L2FtZDY0LnhtbCBpMzg2L2FtZDY0LWF2eC54bWwgaTM4Ni9hbWQ2NC1hdng1MTIueG1sIGkzODYveDMyLnhtbCBpMzg2L3gzMi1hdngueG1sIGkzODYveDMyLWF2eDUxMi54bWwgaTM4Ni9hbWQ2NC1tcHgueG1sIGkzODYvYW1kNjQtYXZ4LW1weC54bWwgICRzcnZfaTM4Nl82NGJpdF94bWxmaWxlcyIKKytzcnZfaTM4Nl9saW51eF94bWxmaWxlcz0iaTM4Ni9pMzg2LWxpbnV4LnhtbCBpMzg2L2kzODYtYXZ4LWxpbnV4LnhtbCBpMzg2L2kzODYtYXZ4NTEyLWxpbnV4LnhtbCBpMzg2L2kzODYtbW14LWxpbnV4LnhtbCBpMzg2LzMyYml0LWxpbnV4LnhtbCBpMzg2L2kzODYtbXB4LWxpbnV4LnhtbCBpMzg2L2kzODYtYXZ4LW1weC1saW51eC54bWwgJHNydl9pMzg2XzMyYml0X3htbGZpbGVzIgorK3Nydl9hbWQ2NF9saW51eF94bWxmaWxlcz0iaTM4Ni9hbWQ2NC1saW51eC54bWwgaTM4Ni9hbWQ2NC1hdngtbGludXgueG1sIGkzODYvYW1kNjQtYXZ4NTEyLWxpbnV4LnhtbCBpMzg2LzY0Yml0LWxpbnV4LnhtbCBpMzg2L2FtZDY0LW1weC1saW51eC54bWwgaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LnhtbCBpMzg2L3gzMi1saW51eC54bWwgaTM4Ni94MzItYXZ4LWxpbnV4LnhtbCBpMzg2L3gzMi1hdng1MTItbGludXgueG1sICRzcnZfaTM4Nl82NGJpdF94bWxmaWxlcyIKKysKKworCisgIyBMaW51eCBvYmplY3QgZmlsZXMuICBUaGlzIGlzIHNvIHdlIGRvbid0IGhhdmUgdG8gcmVwZWF0CitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC1hYXJjaDY0LWlwYS5jIGIvZ2RiL2dkYnNlcnZlci9saW51eC1hYXJjaDY0LWlwYS5jCitpbmRleCA3NTg3MDhkLi5mMWVhYTcwIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9saW51eC1hYXJjaDY0LWlwYS5jCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWFhcmNoNjQtaXBhLmMKK0BAIC0xNDMsOSArMTQzLDE4IEBAIGdkYl9hZ2VudF9nZXRfcmF3X3JlZyAoY29uc3QgdW5zaWduZWQgY2hhciAqcmF3X3JlZ3MsIGludCByZWdudW0pCisgCQkJKyBhYXJjaDY0X2Z0X2NvbGxlY3RfcmVnbWFwW3JlZ251bV0gKiBGVF9DUl9TSVpFKTsKKyB9CisKKysvKiBSZXR1cm4gdGFyZ2V0X2Rlc2MgdG8gdXNlIGZvciBJUEEsIGdpdmVuIHRoZSB0ZGVzYyBpbmRleCBwYXNzZWQgYnkKKysgICBnZGJzZXJ2ZXIuICBJbmRleCBpcyBpZ25vcmVkLCBzaW5jZSB3ZSBoYXZlIG9ubHkgb25lIHRkZXNjCisrICAgYXQgdGhlIG1vbWVudC4gICovCisrCisrY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICoKKytnZXRfaXBhX3RkZXNjIChpbnQgaWR4KQorK3sKKysgIHJldHVybiB0ZGVzY19hYXJjaDY0OworK30KKysKKyB2b2lkCisgaW5pdGlhbGl6ZV9sb3dfdHJhY2Vwb2ludCAodm9pZCkKKyB7CisgICBpbml0X3JlZ2lzdGVyc19hYXJjaDY0ICgpOworLSAgaXBhX3RkZXNjID0gdGRlc2NfYWFyY2g2NDsKKyB9CitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC1hbWQ2NC1pcGEuYyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtYW1kNjQtaXBhLmMKK2luZGV4IDJlZWVkY2QuLmY5YzcyYTAgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWFtZDY0LWlwYS5jCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWFtZDY0LWlwYS5jCitAQCAtMjAsNiArMjAsNyBAQAorCisgI2luY2x1ZGUgInNlcnZlci5oIgorICNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCisrI2luY2x1ZGUgImxpbnV4LXg4Ni10ZGVzYy5oIgorCisgLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGFtZDY0LWxpbnV4LmMuICAqLworIHZvaWQgaW5pdF9yZWdpc3RlcnNfYW1kNjRfbGludXggKHZvaWQpOworQEAgLTE2Niw5ICsxNjcsMzcgQEAgc3VwcGx5X3N0YXRpY190cmFjZXBvaW50X3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKworICNlbmRpZiAvKiBIQVZFX1VTVCAqLworCisrLyogUmV0dXJuIHRhcmdldF9kZXNjIHRvIHVzZSBmb3IgSVBBLCBnaXZlbiB0aGUgdGRlc2MgaW5kZXggcGFzc2VkIGJ5CisrICAgZ2Ric2VydmVyLiAgKi8KKysKKytjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKgorK2dldF9pcGFfdGRlc2MgKGludCBpZHgpCisreworKyAgc3dpdGNoIChpZHgpCisrICAgIHsKKysgICAgY2FzZSBYODZfVERFU0NfU1NFOgorKyAgICAgIHJldHVybiB0ZGVzY19hbWQ2NF9saW51eDsKKysgICAgY2FzZSBYODZfVERFU0NfQVZYOgorKyAgICAgIHJldHVybiB0ZGVzY19hbWQ2NF9hdnhfbGludXg7CisrICAgIGNhc2UgWDg2X1RERVNDX01QWDoKKysgICAgICByZXR1cm4gdGRlc2NfYW1kNjRfbXB4X2xpbnV4OworKyAgICBjYXNlIFg4Nl9UREVTQ19BVlhfTVBYOgorKyAgICAgIHJldHVybiB0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4OworKyAgICBjYXNlIFg4Nl9UREVTQ19BVlg1MTI6CisrICAgICAgcmV0dXJuIHRkZXNjX2FtZDY0X2F2eDUxMl9saW51eDsKKysgICAgZGVmYXVsdDoKKysgICAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICAgInVua25vd24gaXBhIHRkZXNjIGluZGV4OiAlZCIsIGlkeCk7CisrICAgICAgcmV0dXJuIHRkZXNjX2FtZDY0X2xpbnV4OworKyAgICB9CisrfQorKworIHZvaWQKKyBpbml0aWFsaXplX2xvd190cmFjZXBvaW50ICh2b2lkKQorIHsKKyAgIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2xpbnV4ICgpOworLSAgaXBhX3RkZXNjID0gdGRlc2NfYW1kNjRfbGludXg7CisrICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdnhfbGludXggKCk7CisrICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdnhfbXB4X2xpbnV4ICgpOworKyAgaW5pdF9yZWdpc3RlcnNfYW1kNjRfbXB4X2xpbnV4ICgpOworKyAgaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4NTEyX2xpbnV4ICgpOworIH0KK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWkzODYtaXBhLmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWkzODYtaXBhLmMKK2luZGV4IDExZGMwMzguLmQ3YThlN2QgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWkzODYtaXBhLmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtaTM4Ni1pcGEuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSAic2VydmVyLmgiCisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgInRyYWNlcG9pbnQuaCIKKysjaW5jbHVkZSAibGludXgteDg2LXRkZXNjLmgiCisKKyAvKiBHREIgcmVnaXN0ZXIgbnVtYmVycy4gICovCisKK0BAIC00NywxMCArNDgsNiBAQCBlbnVtIGkzODZfZ2RiX3JlZ251bQorCisgI2RlZmluZSBpMzg2X251bV9yZWdzIDE2CisKKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbGludXg7CistCisgI2RlZmluZSBGVF9DUl9FQVggMTUKKyAjZGVmaW5lIEZUX0NSX0VDWCAxNAorICNkZWZpbmUgRlRfQ1JfRURYIDEzCitAQCAtMjQ3LDEwICsyNDQsNDAgQEAgaW5pdGlhbGl6ZV9mYXN0X3RyYWNlcG9pbnRfdHJhbXBvbGluZV9idWZmZXIgKHZvaWQpCisgICAgIH0KKyB9CisKKysvKiBSZXR1cm4gdGFyZ2V0X2Rlc2MgdG8gdXNlIGZvciBJUEEsIGdpdmVuIHRoZSB0ZGVzYyBpbmRleCBwYXNzZWQgYnkKKysgICBnZGJzZXJ2ZXIuICAqLworKworK2NvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqCisrZ2V0X2lwYV90ZGVzYyAoaW50IGlkeCkKKyt7CisrICBzd2l0Y2ggKGlkeCkKKysgICAgeworKyAgICBjYXNlIFg4Nl9UREVTQ19NTVg6CisrICAgICAgcmV0dXJuIHRkZXNjX2kzODZfbW14X2xpbnV4OworKyAgICBjYXNlIFg4Nl9UREVTQ19TU0U6CisrICAgICAgcmV0dXJuIHRkZXNjX2kzODZfbGludXg7CisrICAgIGNhc2UgWDg2X1RERVNDX0FWWDoKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9hdnhfbGludXg7CisrICAgIGNhc2UgWDg2X1RERVNDX01QWDoKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9tcHhfbGludXg7CisrICAgIGNhc2UgWDg2X1RERVNDX0FWWF9NUFg6CisrICAgICAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4X21weF9saW51eDsKKysgICAgY2FzZSBYODZfVERFU0NfQVZYNTEyOgorKyAgICAgIHJldHVybiB0ZGVzY19pMzg2X2F2eDUxMl9saW51eDsKKysgICAgZGVmYXVsdDoKKysgICAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICAgInVua25vd24gaXBhIHRkZXNjIGluZGV4OiAlZCIsIGlkeCk7CisrICAgICAgcmV0dXJuIHRkZXNjX2kzODZfbGludXg7CisrICAgIH0KKyt9CisrCisgdm9pZAorIGluaXRpYWxpemVfbG93X3RyYWNlcG9pbnQgKHZvaWQpCisgeworKyAgaW5pdF9yZWdpc3RlcnNfaTM4Nl9tbXhfbGludXggKCk7CisgICBpbml0X3JlZ2lzdGVyc19pMzg2X2xpbnV4ICgpOworLSAgaXBhX3RkZXNjID0gdGRlc2NfaTM4Nl9saW51eDsKKysgIGluaXRfcmVnaXN0ZXJzX2kzODZfYXZ4X2xpbnV4ICgpOworKyAgaW5pdF9yZWdpc3RlcnNfaTM4Nl9tcHhfbGludXggKCk7CisrICBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eDUxMl9saW51eCAoKTsKKyAgIGluaXRpYWxpemVfZmFzdF90cmFjZXBvaW50X3RyYW1wb2xpbmVfYnVmZmVyICgpOworIH0KK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5jIGIvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuYworaW5kZXggOGIwMjViZC4uYTE0MmMyYyAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93LmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93LmMKK0BAIC02NDMyLDYgKzY0MzIsMTUgQEAgbGludXhfc3VwcG9ydHNfY2F0Y2hfc3lzY2FsbCAodm9pZCkKKyB9CisKKyBzdGF0aWMgaW50CisrbGludXhfZ2V0X2lwYV90ZGVzY19pZHggKHZvaWQpCisreworKyAgaWYgKHRoZV9sb3dfdGFyZ2V0LmdldF9pcGFfdGRlc2NfaWR4ID09IE5VTEwpCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuICgqdGhlX2xvd190YXJnZXQuZ2V0X2lwYV90ZGVzY19pZHgpICgpOworK30KKysKKytzdGF0aWMgaW50CisgbGludXhfc3VwcG9ydHNfdHJhY2Vwb2ludHMgKHZvaWQpCisgeworICAgaWYgKCp0aGVfbG93X3RhcmdldC5zdXBwb3J0c190cmFjZXBvaW50cyA9PSBOVUxMKQorQEAgLTc0MDgsNiArNzQxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBsaW51eF90YXJnZXRfb3BzID0geworICAgbGludXhfYnJlYWtwb2ludF9raW5kX2Zyb21fY3VycmVudF9zdGF0ZSwKKyAgIGxpbnV4X3N1cHBvcnRzX3NvZnR3YXJlX3NpbmdsZV9zdGVwLAorICAgbGludXhfc3VwcG9ydHNfY2F0Y2hfc3lzY2FsbCwKKysgIGxpbnV4X2dldF9pcGFfdGRlc2NfaWR4LAorIH07CisKKyAjaWZkZWYgSEFWRV9MSU5VWF9SRUdTRVRTCitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuaCBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93LmgKK2luZGV4IDRlYzg1NTAuLmQ0OTQ2YzEgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5oCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5oCitAQCAtMjQ2LDYgKzI0Niw5IEBAIHN0cnVjdCBsaW51eF90YXJnZXRfb3BzCisgICAgICBkdWUgdG8gU1lTQ0FMTF9TSUdUUkFQLiAgKi8KKyAgIHZvaWQgKCpnZXRfc3lzY2FsbF90cmFwaW5mbykgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgCQkJCWludCAqc3lzbm8sIGludCAqc3lzcmV0KTsKKysKKysgIC8qIFNlZSB0YXJnZXQuaC4gICovCisrICBpbnQgKCpnZXRfaXBhX3RkZXNjX2lkeCkgKHZvaWQpOworIH07CisKKyBleHRlcm4gc3RydWN0IGxpbnV4X3RhcmdldF9vcHMgdGhlX2xvd190YXJnZXQ7CitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC14ODYtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXg4Ni1sb3cuYworaW5kZXggMGM0OTU0YS4uMjUzNTk1OSAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgteDg2LWxvdy5jCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXg4Ni1sb3cuYworQEAgLTQ1LDU3ICs0NSw3IEBACisgI2luY2x1ZGUgIm5hdC9saW51eC1uYXQuaCIKKyAjaW5jbHVkZSAibmF0L3g4Ni1saW51eC5oIgorICNpbmNsdWRlICJuYXQveDg2LWxpbnV4LWRyZWdzLmgiCistCistI2lmZGVmIF9feDg2XzY0X18KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgYW1kNjQtbGludXguYy4gICovCistdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfbGludXg7CistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGFtZDY0LWF2eC1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eF9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfYXZ4X2xpbnV4OworLQorLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBhbWQ2NC1hdng1MTItbGludXguYy4gICovCistdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdng1MTJfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2F2eDUxMl9saW51eDsKKy0KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgYW1kNjQtbXB4LWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfYW1kNjRfbXB4X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9tcHhfbGludXg7CistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIHgzMi1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX3gzMl9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfeDMyX2xpbnV4OworLQorLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSB4MzItYXZ4LWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfeDMyX2F2eF9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfeDMyX2F2eF9saW51eDsKKy0KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgeDMyLWF2eDUxMi1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX3gzMl9hdng1MTJfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX3gzMl9hdng1MTJfbGludXg7CistCistI2VuZGlmCistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtbGludXguYy4gICovCistdm9pZCBpbml0X3JlZ2lzdGVyc19pMzg2X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2xpbnV4OworLQorLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LW1teC1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfbW14X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X21teF9saW51eDsKKy0KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1hdngtbGludXguYy4gICovCistdm9pZCBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eF9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdnhfbGludXg7CistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtYXZ4NTEyLWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdng1MTJfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfYXZ4NTEyX2xpbnV4OworLQorLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LW1weC1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfbXB4X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X21weF9saW51eDsKKysjaW5jbHVkZSAibGludXgteDg2LXRkZXNjLmgiCisKKyAjaWZkZWYgX194ODZfNjRfXworIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2xpbnV4X25vX3htbDsKK0BAIC04MzksNiArNzg5LDkgQEAgeDg2X2xpbnV4X3JlYWRfZGVzY3JpcHRpb24gKHZvaWQpCisgCQljYXNlIFg4Nl9YU1RBVEVfQVZYNTEyX01BU0s6CisgCQkgIHJldHVybiB0ZGVzY19hbWQ2NF9hdng1MTJfbGludXg7CisKKysJCWNhc2UgWDg2X1hTVEFURV9BVlhfTVBYX01BU0s6CisrCQkgIHJldHVybiB0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4OworKworIAkJY2FzZSBYODZfWFNUQVRFX01QWF9NQVNLOgorIAkJICByZXR1cm4gdGRlc2NfYW1kNjRfbXB4X2xpbnV4OworCitAQCAtODg2LDYgKzgzOSw5IEBAIHg4Nl9saW51eF9yZWFkX2Rlc2NyaXB0aW9uICh2b2lkKQorIAkgICAgY2FzZSAoWDg2X1hTVEFURV9NUFhfTUFTSyk6CisgCSAgICAgIHJldHVybiB0ZGVzY19pMzg2X21weF9saW51eDsKKworKwkgICAgY2FzZSAoWDg2X1hTVEFURV9BVlhfTVBYX01BU0spOgorKwkgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4OworKworIAkgICAgY2FzZSAoWDg2X1hTVEFURV9BVlhfTUFTSyk6CisgCSAgICAgIHJldHVybiB0ZGVzY19pMzg2X2F2eF9saW51eDsKKworQEAgLTI4OTEsNiArMjg0Nyw0MiBAQCB4ODZfc3VwcG9ydHNfaGFyZHdhcmVfc2luZ2xlX3N0ZXAgKHZvaWQpCisgICByZXR1cm4gMTsKKyB9CisKKytzdGF0aWMgaW50CisreDg2X2dldF9pcGFfdGRlc2NfaWR4ICh2b2lkKQorK3sKKysgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUgPSBnZXRfdGhyZWFkX3JlZ2NhY2hlIChjdXJyZW50X3RocmVhZCwgMCk7CisrICBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjID0gcmVnY2FjaGUtPnRkZXNjOworKworKyNpZmRlZiBfX3g4Nl82NF9fCisrICBpZiAodGRlc2MgPT0gdGRlc2NfYW1kNjRfbGludXggfHwgdGRlc2MgPT0gdGRlc2NfYW1kNjRfbGludXhfbm9feG1sCisrICAgICAgfHwgdGRlc2MgPT0gdGRlc2NfeDMyX2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX1NTRTsKKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19hbWQ2NF9hdnhfbGludXggfHwgdGRlc2MgPT0gdGRlc2NfeDMyX2F2eF9saW51eCkKKysgICAgcmV0dXJuIFg4Nl9UREVTQ19BVlg7CisrICBpZiAodGRlc2MgPT0gdGRlc2NfYW1kNjRfbXB4X2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX01QWDsKKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX0FWWF9NUFg7CisrICBpZiAodGRlc2MgPT0gdGRlc2NfYW1kNjRfYXZ4NTEyX2xpbnV4IHx8IHRkZXNjID09IHRkZXNjX3gzMl9hdng1MTJfbGludXgpCisrICAgIHJldHVybiBYODZfVERFU0NfQVZYNTEyOworKyNlbmRpZgorKworKyAgaWYgKHRkZXNjID09IHRkZXNjX2kzODZfbW14X2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX01NWDsKKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19pMzg2X2xpbnV4IHx8IHRkZXNjID09IHRkZXNjX2kzODZfbGludXhfbm9feG1sKQorKyAgICByZXR1cm4gWDg2X1RERVNDX1NTRTsKKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19pMzg2X2F2eF9saW51eCkKKysgICAgcmV0dXJuIFg4Nl9UREVTQ19BVlg7CisrICBpZiAodGRlc2MgPT0gdGRlc2NfaTM4Nl9tcHhfbGludXgpCisrICAgIHJldHVybiBYODZfVERFU0NfTVBYOworKyAgaWYgKHRkZXNjID09IHRkZXNjX2kzODZfYXZ4X21weF9saW51eCkKKysgICAgcmV0dXJuIFg4Nl9UREVTQ19BVlhfTVBYOworKyAgaWYgKHRkZXNjID09IHRkZXNjX2kzODZfYXZ4NTEyX2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX0FWWDUxMjsKKysKKysgIHJldHVybiAwOworK30KKysKKyAvKiBUaGlzIGlzIGluaXRpYWxpemVkIGFzc3VtaW5nIGFuIGFtZDY0IHRhcmdldC4KKyAgICB4ODZfYXJjaF9zZXR1cCB3aWxsIGNvcnJlY3QgaXQgZm9yIGkzODYgb3IgYW1kNjQgdGFyZ2V0cy4gICovCisKK0BAIC0yOTM0LDYgKzI5MjYsNyBAQCBzdHJ1Y3QgbGludXhfdGFyZ2V0X29wcyB0aGVfbG93X3RhcmdldCA9CisgICBOVUxMLCAvKiBicmVha3BvaW50X2tpbmRfZnJvbV9jdXJyZW50X3N0YXRlICovCisgICB4ODZfc3VwcG9ydHNfaGFyZHdhcmVfc2luZ2xlX3N0ZXAsCisgICB4ODZfZ2V0X3N5c2NhbGxfdHJhcGluZm8sCisrICB4ODZfZ2V0X2lwYV90ZGVzY19pZHgsCisgfTsKKworIHZvaWQKK0BAIC0yOTQ1LDYgKzI5MzgsNyBAQCBpbml0aWFsaXplX2xvd19hcmNoICh2b2lkKQorICAgaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4X2xpbnV4ICgpOworICAgaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4NTEyX2xpbnV4ICgpOworICAgaW5pdF9yZWdpc3RlcnNfYW1kNjRfbXB4X2xpbnV4ICgpOworKyAgaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4X21weF9saW51eCAoKTsKKworICAgaW5pdF9yZWdpc3RlcnNfeDMyX2xpbnV4ICgpOworICAgaW5pdF9yZWdpc3RlcnNfeDMyX2F2eF9saW51eCAoKTsKK0BAIC0yOTU5LDYgKzI5NTMsNyBAQCBpbml0aWFsaXplX2xvd19hcmNoICh2b2lkKQorICAgaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbGludXggKCk7CisgICBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eDUxMl9saW51eCAoKTsKKyAgIGluaXRfcmVnaXN0ZXJzX2kzODZfbXB4X2xpbnV4ICgpOworKyAgaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbXB4X2xpbnV4ICgpOworCisgICB0ZGVzY19pMzg2X2xpbnV4X25vX3htbCA9IFhORVcgKHN0cnVjdCB0YXJnZXRfZGVzYyk7CisgICBjb3B5X3RhcmdldF9kZXNjcmlwdGlvbiAodGRlc2NfaTM4Nl9saW51eF9ub194bWwsIHRkZXNjX2kzODZfbGludXgpOworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvbGludXgteDg2LXRkZXNjLmggYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXg4Ni10ZGVzYy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzIwZjUwYworLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC14ODYtdGRlc2MuaAorQEAgLTAsMCArMSw5OCBAQAorKy8qIExvdyBsZXZlbCBzdXBwb3J0IGZvciB4ODYgKGkzODYgYW5kIHg4Ni02NCksIHNoYXJlZCBiZXR3ZWVuIGdkYnNlcnZlcgorKyAgIGFuZCBJUEEuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrLyogTm90ZTogc2luY2UgSVBBIG9idmlvdXNseSBrbm93cyB3aGF0IEFCSSBpdCdzIHJ1bm5pbmcgb24gKGkzODYgdnMgeDg2XzY0CisrICAgdnMgeDMyKSwgaXQncyBzdWZmaWNpZW50IHRvIHBhc3Mgb25seSB0aGUgcmVnaXN0ZXIgc2V0IGhlcmUuICBUaGlzLAorKyAgIHRvZ2V0aGVyIHdpdGggdGhlIEFCSSBrbm93biBhdCBJUEEgY29tcGlsZSB0aW1lLCBtYXBzIHRvIGEgdGRlc2MuICAqLworKworK2VudW0geDg2X2xpbnV4X3RkZXNjIHsKKysgIFg4Nl9UREVTQ19NTVggPSAwLAorKyAgWDg2X1RERVNDX1NTRSA9IDEsCisrICBYODZfVERFU0NfQVZYID0gMiwKKysgIFg4Nl9UREVTQ19NUFggPSAzLAorKyAgWDg2X1RERVNDX0FWWF9NUFggPSA0LAorKyAgWDg2X1RERVNDX0FWWDUxMiA9IDUsCisrfTsKKysKKysjaWZkZWYgX194ODZfNjRfXworKworKyNpZiBkZWZpbmVkIF9fTFA2NF9fICB8fCAhZGVmaW5lZCBJTl9QUk9DRVNTX0FHRU5UCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGFtZDY0LWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfYW1kNjRfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2xpbnV4OworKworKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBhbWQ2NC1hdngtbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdnhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2F2eF9saW51eDsKKysKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgYW1kNjQtYXZ4NTEyLWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4NTEyX2xpbnV4ICh2b2lkKTsKKytleHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9hdng1MTJfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGFtZDY0LWF2eC1tcHgtbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdnhfbXB4X2xpbnV4ICh2b2lkKTsKKytleHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4OworKworKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBhbWQ2NC1tcHgtbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9tcHhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X21weF9saW51eDsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0lMUDMyX18gfHwgIWRlZmluZWQgSU5fUFJPQ0VTU19BR0VOVAorKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSB4MzItbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc194MzJfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX3gzMl9saW51eDsKKysKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgeDMyLWF2eC1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX3gzMl9hdnhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX3gzMl9hdnhfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIHgzMi1hdng1MTItbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc194MzJfYXZ4NTEyX2xpbnV4ICh2b2lkKTsKKytleHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY194MzJfYXZ4NTEyX2xpbnV4OworKyNlbmRpZgorKworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9faTM4Nl9fIHx8ICFkZWZpbmVkIElOX1BST0NFU1NfQUdFTlQKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtbW14LWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9tbXhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbW14X2xpbnV4OworKworKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LWF2eC1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfYXZ4X2xpbnV4ICh2b2lkKTsKKytleHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2F2eF9saW51eDsKKysKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1hdngtbXB4LWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbXB4X2xpbnV4ICh2b2lkKTsKKytleHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2F2eF9tcHhfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtYXZ4NTEyLWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdng1MTJfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfYXZ4NTEyX2xpbnV4OworKworKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LW1weC1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfbXB4X2xpbnV4ICh2b2lkKTsKKytleHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X21weF9saW51eDsKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL3RhcmdldC5oIGIvZ2RiL2dkYnNlcnZlci90YXJnZXQuaAoraW5kZXggNWFmMjA1MS4uNGMxNGMyMCAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmgKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmgKK0BAIC00NzEsNiArNDcxLDkgQEAgc3RydWN0IHRhcmdldF9vcHMKKyAgIC8qIFJldHVybiAxIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgY2F0Y2ggc3lzY2FsbCwgMCAob3IgbGVhdmUgdGhlCisgICAgICBjYWxsYmFjayBOVUxMKSBvdGhlcndpc2UuICAqLworICAgaW50ICgqc3VwcG9ydHNfY2F0Y2hfc3lzY2FsbCkgKHZvaWQpOworKworKyAgLyogUmV0dXJuIHRkZXNjIGluZGV4IGZvciBJUEEuICAqLworKyAgaW50ICgqZ2V0X2lwYV90ZGVzY19pZHgpICh2b2lkKTsKKyB9OworCisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfb3BzICp0aGVfdGFyZ2V0OworQEAgLTU1MCw2ICs1NTMsMTAgQEAgaW50IGtpbGxfaW5mZXJpb3IgKGludCk7CisgICAodGhlX3RhcmdldC0+c3VwcG9ydHNfY2F0Y2hfc3lzY2FsbCA/CQkJXAorICAgICgqdGhlX3RhcmdldC0+c3VwcG9ydHNfY2F0Y2hfc3lzY2FsbCkgKCkgOiAwKQorCisrI2RlZmluZSB0YXJnZXRfZ2V0X2lwYV90ZGVzY19pZHgoKQkJCVwKKysgICh0aGVfdGFyZ2V0LT5nZXRfaXBhX3RkZXNjX2lkeAkJCVwKKysgICA/ICgqdGhlX3RhcmdldC0+Z2V0X2lwYV90ZGVzY19pZHgpICgpIDogMCkKKysKKyAjZGVmaW5lIHRhcmdldF9zdXBwb3J0c190cmFjZXBvaW50cygpCQkJXAorICAgKHRoZV90YXJnZXQtPnN1cHBvcnRzX3RyYWNlcG9pbnRzCQkJXAorICAgID8gKCp0aGVfdGFyZ2V0LT5zdXBwb3J0c190cmFjZXBvaW50cykgKCkgOiAwKQorZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvdHJhY2Vwb2ludC5jIGIvZ2RiL2dkYnNlcnZlci90cmFjZXBvaW50LmMKK2luZGV4IDA2NzE5OTkuLmNjODY2NzcgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL3RyYWNlcG9pbnQuYworKysrIGIvZ2RiL2dkYnNlcnZlci90cmFjZXBvaW50LmMKK0BAIC0xMzQsNiArMTM0LDcgQEAgdHJhY2VfdmRlYnVnIChjb25zdCBjaGFyICpmbXQsIC4uLikKKyAjIGRlZmluZSB1c3RfbG9hZGVkIElQQV9TWU1fRVhQT1JURURfTkFNRSAodXN0X2xvYWRlZCkKKyAjIGRlZmluZSBoZWxwZXJfdGhyZWFkX2lkIElQQV9TWU1fRVhQT1JURURfTkFNRSAoaGVscGVyX3RocmVhZF9pZCkKKyAjIGRlZmluZSBjbWRfYnVmIElQQV9TWU1fRVhQT1JURURfTkFNRSAoY21kX2J1ZikKKysjIGRlZmluZSBpcGFfdGRlc2NfaWR4IElQQV9TWU1fRVhQT1JURURfTkFNRSAoaXBhX3RkZXNjX2lkeCkKKyAjZW5kaWYKKworICNpZm5kZWYgSU5fUFJPQ0VTU19BR0VOVAorQEAgLTE3MSw2ICsxNzIsNyBAQCBzdHJ1Y3QgaXBhX3N5bV9hZGRyZXNzZXMKKyAgIENPUkVfQUREUiBhZGRyX2dldF90cmFjZV9zdGF0ZV92YXJpYWJsZV92YWx1ZTsKKyAgIENPUkVfQUREUiBhZGRyX3NldF90cmFjZV9zdGF0ZV92YXJpYWJsZV92YWx1ZTsKKyAgIENPUkVfQUREUiBhZGRyX3VzdF9sb2FkZWQ7CisrICBDT1JFX0FERFIgYWRkcl9pcGFfdGRlc2NfaWR4OworIH07CisKKyBzdGF0aWMgc3RydWN0CitAQCAtMjA3LDYgKzIwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QKKyAgIElQQV9TWU0oZ2V0X3RyYWNlX3N0YXRlX3ZhcmlhYmxlX3ZhbHVlKSwKKyAgIElQQV9TWU0oc2V0X3RyYWNlX3N0YXRlX3ZhcmlhYmxlX3ZhbHVlKSwKKyAgIElQQV9TWU0odXN0X2xvYWRlZCksCisrICBJUEFfU1lNKGlwYV90ZGVzY19pZHgpLAorIH07CisKKyBzdGF0aWMgc3RydWN0IGlwYV9zeW1fYWRkcmVzc2VzIGlwYV9zeW1fYWRkcnM7CitAQCAtMzIzMSw2ICszMjM0LDExIEBAIGNtZF9xdHN0YXJ0IChjaGFyICpwYWNrZXQpCisKKyAgICpwYWNrZXQgPSAnXDAnOworCisrICAvKiBUZWxsIElQQSBhYm91dCB0aGUgY29ycmVjdCB0ZGVzYy4gICovCisrICBpZiAod3JpdGVfaW5mZXJpb3JfaW50ZWdlciAoaXBhX3N5bV9hZGRycy5hZGRyX2lwYV90ZGVzY19pZHgsCisrCQkJICAgICAgdGFyZ2V0X2dldF9pcGFfdGRlc2NfaWR4ICgpKSkKKysgICAgZXJyb3IgKCJFcnJvciBzZXR0aW5nIGlwYV90ZGVzY19pZHggdmFyaWFibGUgaW4gbGliIik7CisrCisgICAvKiBTdGFydCBvdXQgZW1wdHkuICAqLworICAgaWYgKGFnZW50X2xvYWRlZF9wICgpKQorICAgICB3cml0ZV9pbmZlcmlvcl9kYXRhX3B0ciAoaXBhX3N5bV9hZGRycy5hZGRyX3RyYWNlcG9pbnRzLCAwKTsKK0BAIC00NzE0LDE5ICs0NzIyLDIwIEBAIGNvbGxlY3RfZGF0YV9hdF9zdGVwIChzdHJ1Y3QgdHJhY2Vwb2ludF9oaXRfY3R4ICpjdHgsCisgI2VuZGlmCisKKyAjaWZkZWYgSU5fUFJPQ0VTU19BR0VOVAorLS8qIFRoZSB0YXJnZXQgZGVzY3JpcHRpb24gdXNlZCBieSB0aGUgSVBBLiAgR2l2ZW4gdGhhdCB0aGUgSVBBIGxpYnJhcnkKKy0gICBpcyBidWlsdCBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgdGhhdCBpcyBsb2FkZWQgaW50byB0aGUKKy0gICBpbmZlcmlvciwgdGhlcmUgb25seSBuZWVkcyB0byBiZSBvbmUgc3VjaCBkZXNjcmlwdGlvbiBwZXIKKy0gICBidWlsZC4gICovCistY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICppcGFfdGRlc2M7CisrLyogVGhlIHRhcmdldCBkZXNjcmlwdGlvbiBpbmRleCBmb3IgSVBBLiAgUGFzc2VkIGZyb20gZ2Ric2VydmVyLCB1c2VkCisrICAgdG8gc2VsZWN0IGlwYV90ZGVzYy4gICovCisrRVhURVJOX0NfUFVTSAorK0lQX0FHRU5UX0VYUE9SVF9WQVIgaW50IGlwYV90ZGVzY19pZHg7CisrRVhURVJOX0NfUE9QCisgI2VuZGlmCisKKyBzdGF0aWMgc3RydWN0IHJlZ2NhY2hlICoKKyBnZXRfY29udGV4dF9yZWdjYWNoZSAoc3RydWN0IHRyYWNlcG9pbnRfaGl0X2N0eCAqY3R4KQorIHsKKyAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUgPSBOVUxMOworLQorICNpZmRlZiBJTl9QUk9DRVNTX0FHRU5UCisrICBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKmlwYV90ZGVzYyA9IGdldF9pcGFfdGRlc2MgKGlwYV90ZGVzY19pZHgpOworKworICAgaWYgKGN0eC0+dHlwZSA9PSBmYXN0X3RyYWNlcG9pbnQpCisgICAgIHsKKyAgICAgICBzdHJ1Y3QgZmFzdF90cmFjZXBvaW50X2N0eCAqZmN0eCA9IChzdHJ1Y3QgZmFzdF90cmFjZXBvaW50X2N0eCAqKSBjdHg7CitAQCAtNTc5OSwxMSArNTgwOCwxMyBAQCBJUF9BR0VOVF9FWFBPUlRfRlVOQyB2b2lkCisgZ2RiX2NvbGxlY3QgKHN0cnVjdCB0cmFjZXBvaW50ICp0cG9pbnQsIHVuc2lnbmVkIGNoYXIgKnJlZ3MpCisgeworICAgc3RydWN0IGZhc3RfdHJhY2Vwb2ludF9jdHggY3R4OworKyAgY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICppcGFfdGRlc2M7CisKKyAgIC8qIERvbid0IGRvIGFueXRoaW5nIHVudGlsIHRoZSB0cmFjZSBydW4gaXMgY29tcGxldGVseSBzZXQgdXAuICAqLworICAgaWYgKCF0cmFjaW5nKQorICAgICByZXR1cm47CisKKysgIGlwYV90ZGVzYyA9IGdldF9pcGFfdGRlc2MgKGlwYV90ZGVzY19pZHgpOworICAgY3R4LmJhc2UudHlwZSA9IGZhc3RfdHJhY2Vwb2ludDsKKyAgIGN0eC5yZWdzID0gcmVnczsKKyAgIGN0eC5yZWdjYWNoZV9pbml0dGVkID0gMDsKK0BAIC02NjYwLDYgKzY2NzEsNyBAQCBnZGJfcHJvYmUgKGNvbnN0IHN0cnVjdCBtYXJrZXIgKm1kYXRhLCB2b2lkICpwcm9iZV9wcml2YXRlLAorIHsKKyAgIHN0cnVjdCB0cmFjZXBvaW50ICp0cG9pbnQ7CisgICBzdHJ1Y3Qgc3RhdGljX3RyYWNlcG9pbnRfY3R4IGN0eDsKKysgIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqaXBhX3RkZXNjOworCisgICAvKiBEb24ndCBkbyBhbnl0aGluZyB1bnRpbCB0aGUgdHJhY2UgcnVuIGlzIGNvbXBsZXRlbHkgc2V0IHVwLiAgKi8KKyAgIGlmICghdHJhY2luZykKK0BAIC02NjY4LDYgKzY2ODAsNyBAQCBnZGJfcHJvYmUgKGNvbnN0IHN0cnVjdCBtYXJrZXIgKm1kYXRhLCB2b2lkICpwcm9iZV9wcml2YXRlLAorICAgICAgIHJldHVybjsKKyAgICAgfQorCisrICBpcGFfdGRlc2MgPSBnZXRfaXBhX3RkZXNjIChpcGFfdGRlc2NfaWR4KTsKKyAgIGN0eC5iYXNlLnR5cGUgPSBzdGF0aWNfdHJhY2Vwb2ludDsKKyAgIGN0eC5yZWdjYWNoZV9pbml0dGVkID0gMDsKKyAgIGN0eC5yZWdzID0gcmVnczsKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL3RyYWNlcG9pbnQuaCBiL2dkYi9nZGJzZXJ2ZXIvdHJhY2Vwb2ludC5oCitpbmRleCBjYWI4OWNmLi5lMzBmNGY3IDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci90cmFjZXBvaW50LmgKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvdHJhY2Vwb2ludC5oCitAQCAtMTI0LDYgKzEyNCw3IEBAIGludCBoYW5kbGVfdHJhY2Vwb2ludF9ia3B0cyAoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywgQ09SRV9BRERSIHN0b3BfcGMpOworCisgI2lmZGVmIElOX1BST0NFU1NfQUdFTlQKKyB2b2lkIGluaXRpYWxpemVfbG93X3RyYWNlcG9pbnQgKHZvaWQpOworK2NvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqZ2V0X2lwYV90ZGVzYyAoaW50IGlkeCk7Cisgdm9pZCBzdXBwbHlfZmFzdF90cmFjZXBvaW50X3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKyAJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlZ3MpOworIHZvaWQgc3VwcGx5X3N0YXRpY190cmFjZXBvaW50X3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKK0BAIC0xMzEsOSArMTMyLDYgQEAgdm9pZCBzdXBwbHlfc3RhdGljX3RyYWNlcG9pbnRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorIAkJCQkJIENPUkVfQUREUiBwYyk7Cisgdm9pZCBzZXRfdHJhbXBvbGluZV9idWZmZXJfc3BhY2UgKENPUkVfQUREUiBiZWdpbiwgQ09SRV9BRERSIGVuZCwKKyAJCQkJICBjaGFyICplcnJtc2cpOworLQorLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKmlwYV90ZGVzYzsKKy0KKyAjZWxzZQorIHZvaWQgc3RvcF90cmFjaW5nICh2b2lkKTsKKworZGlmZiAtLWdpdCBhL2dkYi9pMzg2LWxpbnV4LXRkZXAuYyBiL2dkYi9pMzg2LWxpbnV4LXRkZXAuYworaW5kZXggYWYzOWU3OC4uZGY0N2VmZCAxMDA2NDQKKy0tLSBhL2dkYi9pMzg2LWxpbnV4LXRkZXAuYworKysrIGIvZ2RiL2kzODYtbGludXgtdGRlcC5jCitAQCAtNDcsNiArNDcsNyBAQAorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYtbGludXguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LW1teC1saW51eC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LmMiCisrI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmMiCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbGludXguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eDUxMi1saW51eC5jIgorCitAQCAtNjMwLDYgKzYzMSw4IEBAIGkzODZfbGludXhfY29yZV9yZWFkX2Rlc2NyaXB0aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyAgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9hdng1MTJfbGludXg7CisgICAgIGNhc2UgWDg2X1hTVEFURV9NUFhfTUFTSzoKKyAgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9tcHhfbGludXg7CisrICAgIGNhc2UgWDg2X1hTVEFURV9BVlhfTVBYX01BU0s6CisrICAgICAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4X21weF9saW51eDsKKyAgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NQVNLOgorICAgICAgIHJldHVybiB0ZGVzY19pMzg2X2F2eF9saW51eDsKKyAgICAgY2FzZSBYODZfWFNUQVRFX1NTRV9NQVNLOgorQEAgLTEwMTgsNSArMTAyMSw2IEBAIF9pbml0aWFsaXplX2kzODZfbGludXhfdGRlcCAodm9pZCkKKyAgIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9tbXhfbGludXggKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2kzODZfYXZ4X2xpbnV4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X21weF9saW51eCAoKTsKKysgIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X2F2eDUxMl9saW51eCAoKTsKKyB9CitkaWZmIC0tZ2l0IGEvZ2RiL2kzODYtbGludXgtdGRlcC5oIGIvZ2RiL2kzODYtbGludXgtdGRlcC5oCitpbmRleCBlY2M5ZTMxLi4wY2IwYzRkIDEwMDY0NAorLS0tIGEvZ2RiL2kzODYtbGludXgtdGRlcC5oCisrKysgYi9nZGIvaTM4Ni1saW51eC10ZGVwLmgKK0BAIC00Miw2ICs0Miw3IEBAIGV4dGVybiBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbGludXg7CisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9tbXhfbGludXg7CisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdnhfbGludXg7CisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9tcHhfbGludXg7CisrZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4OworIGV4dGVybiBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfYXZ4NTEyX2xpbnV4OworCisgLyogRm9ybWF0IG9mIFhTQVZFIGV4dGVuZGVkIHN0YXRlIGlzOgorZGlmZiAtLWdpdCBhL2dkYi9pMzg2LXRkZXAuYyBiL2dkYi9pMzg2LXRkZXAuYworaW5kZXggYjcwNjQ2My4uMWVjMGEwOCAxMDA2NDQKKy0tLSBhL2dkYi9pMzg2LXRkZXAuYworKysrIGIvZ2RiL2kzODYtdGRlcC5jCitAQCAtNTMsNiArNTMsNyBAQAorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYuYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYtbXB4LmMiCisrI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LmMiCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni1hdng1MTIuYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LW1teC5jIgorCitAQCAtODYxOCw2ICs4NjE5LDggQEAgaTM4Nl90YXJnZXRfZGVzY3JpcHRpb24gKHVpbnQ2NF90IHhjcjApCisgICAgIGNhc2UgWDg2X1hTVEFURV9NUFhfQVZYNTEyX01BU0s6CisgICAgIGNhc2UgWDg2X1hTVEFURV9BVlg1MTJfTUFTSzoKKyAgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9hdng1MTI7CisrICAgIGNhc2UgWDg2X1hTVEFURV9BVlhfTVBYX01BU0s6CisrICAgICAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4X21weDsKKyAgICAgY2FzZSBYODZfWFNUQVRFX01QWF9NQVNLOgorICAgICAgIHJldHVybiB0ZGVzY19pMzg2X21weDsKKyAgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NQVNLOgorQEAgLTg5NTcsNiArODk2MCw3IEBAIFNob3cgSW50ZWwgTWVtb3J5IFByb3RlY3Rpb24gRXh0ZW5zaW9ucyBzcGVjaWZpYyB2YXJpYWJsZXMuIiksCisgICBpbml0aWFsaXplX3RkZXNjX2kzODZfbW14ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X2F2eCAoKTsKKyAgIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9tcHggKCk7CisrICBpbml0aWFsaXplX3RkZXNjX2kzODZfYXZ4X21weCAoKTsKKyAgIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9hdng1MTIgKCk7CisKKyAgIC8qIFRlbGwgcmVtb3RlIHN0dWIgdGhhdCB3ZSBzdXBwb3J0IFhNTCB0YXJnZXQgZGVzY3JpcHRpb24uICAqLworZGlmZiAtLWdpdCBhL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC5kYXQgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguZGF0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNmQ0NTMyNAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmRhdAorQEAgLTAsMCArMSw4NSBAQAorKyMgVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aSA6c2V0IHJvOgorKyMgR2VuZXJhdGVkIGZyb206IGkzODYvYW1kNjQtYXZ4LW1weC1saW51eC54bWwKKytuYW1lOmFtZDY0X2F2eF9tcHhfbGludXgKKyt4bWx0YXJnZXQ6YW1kNjQtYXZ4LW1weC1saW51eC54bWwKKytleHBlZGl0ZTpyYnAscnNwLHJpcAorKzY0OnJheAorKzY0OnJieAorKzY0OnJjeAorKzY0OnJkeAorKzY0OnJzaQorKzY0OnJkaQorKzY0OnJicAorKzY0OnJzcAorKzY0OnI4CisrNjQ6cjkKKys2NDpyMTAKKys2NDpyMTEKKys2NDpyMTIKKys2NDpyMTMKKys2NDpyMTQKKys2NDpyMTUKKys2NDpyaXAKKyszMjplZmxhZ3MKKyszMjpjcworKzMyOnNzCisrMzI6ZHMKKyszMjplcworKzMyOmZzCisrMzI6Z3MKKys4MDpzdDAKKys4MDpzdDEKKys4MDpzdDIKKys4MDpzdDMKKys4MDpzdDQKKys4MDpzdDUKKys4MDpzdDYKKys4MDpzdDcKKyszMjpmY3RybAorKzMyOmZzdGF0CisrMzI6ZnRhZworKzMyOmZpc2VnCisrMzI6ZmlvZmYKKyszMjpmb3NlZworKzMyOmZvb2ZmCisrMzI6Zm9wCisrMTI4OnhtbTAKKysxMjg6eG1tMQorKzEyODp4bW0yCisrMTI4OnhtbTMKKysxMjg6eG1tNAorKzEyODp4bW01CisrMTI4OnhtbTYKKysxMjg6eG1tNworKzEyODp4bW04CisrMTI4OnhtbTkKKysxMjg6eG1tMTAKKysxMjg6eG1tMTEKKysxMjg6eG1tMTIKKysxMjg6eG1tMTMKKysxMjg6eG1tMTQKKysxMjg6eG1tMTUKKyszMjpteGNzcgorKzY0Om9yaWdfcmF4CisrMTI4OnltbTBoCisrMTI4OnltbTFoCisrMTI4OnltbTJoCisrMTI4OnltbTNoCisrMTI4OnltbTRoCisrMTI4OnltbTVoCisrMTI4OnltbTZoCisrMTI4OnltbTdoCisrMTI4OnltbThoCisrMTI4OnltbTloCisrMTI4OnltbTEwaAorKzEyODp5bW0xMWgKKysxMjg6eW1tMTJoCisrMTI4OnltbTEzaAorKzEyODp5bW0xNGgKKysxMjg6eW1tMTVoCisrMTI4OmJuZDByYXcKKysxMjg6Ym5kMXJhdworKzEyODpibmQycmF3CisrMTI4OmJuZDNyYXcKKys2NDpibmRjZmd1CisrNjQ6Ym5kc3RhdHVzCitkaWZmIC0tZ2l0IGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtYXZ4LW1weC5kYXQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kOTg1NjQxCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHguZGF0CitAQCAtMCwwICsxLDg0IEBACisrIyBUSElTIEZJTEUgSVMgR0VORVJBVEVELiAgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotIHZpIDpzZXQgcm86CisrIyBHZW5lcmF0ZWQgZnJvbTogaTM4Ni9hbWQ2NC1hdngtbXB4LnhtbAorK25hbWU6YW1kNjRfYXZ4X21weAorK3htbHRhcmdldDphbWQ2NC1hdngtbXB4LnhtbAorK2V4cGVkaXRlOnJicCxyc3AscmlwCisrNjQ6cmF4CisrNjQ6cmJ4CisrNjQ6cmN4CisrNjQ6cmR4CisrNjQ6cnNpCisrNjQ6cmRpCisrNjQ6cmJwCisrNjQ6cnNwCisrNjQ6cjgKKys2NDpyOQorKzY0OnIxMAorKzY0OnIxMQorKzY0OnIxMgorKzY0OnIxMworKzY0OnIxNAorKzY0OnIxNQorKzY0OnJpcAorKzMyOmVmbGFncworKzMyOmNzCisrMzI6c3MKKyszMjpkcworKzMyOmVzCisrMzI6ZnMKKyszMjpncworKzgwOnN0MAorKzgwOnN0MQorKzgwOnN0MgorKzgwOnN0MworKzgwOnN0NAorKzgwOnN0NQorKzgwOnN0NgorKzgwOnN0NworKzMyOmZjdHJsCisrMzI6ZnN0YXQKKyszMjpmdGFnCisrMzI6ZmlzZWcKKyszMjpmaW9mZgorKzMyOmZvc2VnCisrMzI6Zm9vZmYKKyszMjpmb3AKKysxMjg6eG1tMAorKzEyODp4bW0xCisrMTI4OnhtbTIKKysxMjg6eG1tMworKzEyODp4bW00CisrMTI4OnhtbTUKKysxMjg6eG1tNgorKzEyODp4bW03CisrMTI4OnhtbTgKKysxMjg6eG1tOQorKzEyODp4bW0xMAorKzEyODp4bW0xMQorKzEyODp4bW0xMgorKzEyODp4bW0xMworKzEyODp4bW0xNAorKzEyODp4bW0xNQorKzMyOm14Y3NyCisrMTI4OnltbTBoCisrMTI4OnltbTFoCisrMTI4OnltbTJoCisrMTI4OnltbTNoCisrMTI4OnltbTRoCisrMTI4OnltbTVoCisrMTI4OnltbTZoCisrMTI4OnltbTdoCisrMTI4OnltbThoCisrMTI4OnltbTloCisrMTI4OnltbTEwaAorKzEyODp5bW0xMWgKKysxMjg6eW1tMTJoCisrMTI4OnltbTEzaAorKzEyODp5bW0xNGgKKysxMjg6eW1tMTVoCisrMTI4OmJuZDByYXcKKysxMjg6Ym5kMXJhdworKzEyODpibmQycmF3CisrMTI4OmJuZDNyYXcKKys2NDpibmRjZmd1CisrNjQ6Ym5kc3RhdHVzCitkaWZmIC0tZ2l0IGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHgtbGludXguZGF0IGIvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHgtbGludXguZGF0CitpbmRleCA3YTA1Y2ZlLi41MjNhZTAxIDEwMDY0NAorLS0tIGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHgtbGludXguZGF0CisrKysgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC1saW51eC5kYXQKK0BAIC02MSwyMiArNjEsNiBAQCBleHBlZGl0ZTpyYnAscnNwLHJpcAorIDEyODp4bW0xNQorIDMyOm14Y3NyCisgNjQ6b3JpZ19yYXgKKy0xMjg6eW1tMGgKKy0xMjg6eW1tMWgKKy0xMjg6eW1tMmgKKy0xMjg6eW1tM2gKKy0xMjg6eW1tNGgKKy0xMjg6eW1tNWgKKy0xMjg6eW1tNmgKKy0xMjg6eW1tN2gKKy0xMjg6eW1tOGgKKy0xMjg6eW1tOWgKKy0xMjg6eW1tMTBoCistMTI4OnltbTExaAorLTEyODp5bW0xMmgKKy0xMjg6eW1tMTNoCistMTI4OnltbTE0aAorLTEyODp5bW0xNWgKKyAxMjg6Ym5kMHJhdworIDEyODpibmQxcmF3CisgMTI4OmJuZDJyYXcKK2RpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC5kYXQgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC5kYXQKK2luZGV4IDFiNzVmNGQuLjQzYjg3NzYgMTAwNjQ0CistLS0gYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC5kYXQKKysrKyBiL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtbXB4LmRhdAorQEAgLTYwLDIyICs2MCw2IEBAIGV4cGVkaXRlOnJicCxyc3AscmlwCisgMTI4OnhtbTE0CisgMTI4OnhtbTE1CisgMzI6bXhjc3IKKy0xMjg6eW1tMGgKKy0xMjg6eW1tMWgKKy0xMjg6eW1tMmgKKy0xMjg6eW1tM2gKKy0xMjg6eW1tNGgKKy0xMjg6eW1tNWgKKy0xMjg6eW1tNmgKKy0xMjg6eW1tN2gKKy0xMjg6eW1tOGgKKy0xMjg6eW1tOWgKKy0xMjg6eW1tMTBoCistMTI4OnltbTExaAorLTEyODp5bW0xMmgKKy0xMjg6eW1tMTNoCistMTI4OnltbTE0aAorLTEyODp5bW0xNWgKKyAxMjg6Ym5kMHJhdworIDEyODpibmQxcmF3CisgMTI4OmJuZDJyYXcKK2RpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC5kYXQgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC5kYXQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44MzFjNDc2CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC5kYXQKK0BAIC0wLDAgKzEsNjEgQEAKKysjIFRISVMgRklMRSBJUyBHRU5FUkFURUQuICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmkgOnNldCBybzoKKysjIEdlbmVyYXRlZCBmcm9tOiBpMzg2L2kzODYtYXZ4LW1weC1saW51eC54bWwKKytuYW1lOmkzODZfYXZ4X21weF9saW51eAorK3htbHRhcmdldDppMzg2LWF2eC1tcHgtbGludXgueG1sCisrZXhwZWRpdGU6ZWJwLGVzcCxlaXAKKyszMjplYXgKKyszMjplY3gKKyszMjplZHgKKyszMjplYngKKyszMjplc3AKKyszMjplYnAKKyszMjplc2kKKyszMjplZGkKKyszMjplaXAKKyszMjplZmxhZ3MKKyszMjpjcworKzMyOnNzCisrMzI6ZHMKKyszMjplcworKzMyOmZzCisrMzI6Z3MKKys4MDpzdDAKKys4MDpzdDEKKys4MDpzdDIKKys4MDpzdDMKKys4MDpzdDQKKys4MDpzdDUKKys4MDpzdDYKKys4MDpzdDcKKyszMjpmY3RybAorKzMyOmZzdGF0CisrMzI6ZnRhZworKzMyOmZpc2VnCisrMzI6ZmlvZmYKKyszMjpmb3NlZworKzMyOmZvb2ZmCisrMzI6Zm9wCisrMTI4OnhtbTAKKysxMjg6eG1tMQorKzEyODp4bW0yCisrMTI4OnhtbTMKKysxMjg6eG1tNAorKzEyODp4bW01CisrMTI4OnhtbTYKKysxMjg6eG1tNworKzMyOm14Y3NyCisrMzI6b3JpZ19lYXgKKysxMjg6eW1tMGgKKysxMjg6eW1tMWgKKysxMjg6eW1tMmgKKysxMjg6eW1tM2gKKysxMjg6eW1tNGgKKysxMjg6eW1tNWgKKysxMjg6eW1tNmgKKysxMjg6eW1tN2gKKysxMjg6Ym5kMHJhdworKzEyODpibmQxcmF3CisrMTI4OmJuZDJyYXcKKysxMjg6Ym5kM3JhdworKzY0OmJuZGNmZ3UKKys2NDpibmRzdGF0dXMKK2RpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC5kYXQgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC5kYXQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44Y2FlZjc1CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtYXZ4LW1weC5kYXQKK0BAIC0wLDAgKzEsNjAgQEAKKysjIFRISVMgRklMRSBJUyBHRU5FUkFURUQuICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmkgOnNldCBybzoKKysjIEdlbmVyYXRlZCBmcm9tOiBpMzg2L2kzODYtYXZ4LW1weC54bWwKKytuYW1lOmkzODZfYXZ4X21weAorK3htbHRhcmdldDppMzg2LWF2eC1tcHgueG1sCisrZXhwZWRpdGU6ZWJwLGVzcCxlaXAKKyszMjplYXgKKyszMjplY3gKKyszMjplZHgKKyszMjplYngKKyszMjplc3AKKyszMjplYnAKKyszMjplc2kKKyszMjplZGkKKyszMjplaXAKKyszMjplZmxhZ3MKKyszMjpjcworKzMyOnNzCisrMzI6ZHMKKyszMjplcworKzMyOmZzCisrMzI6Z3MKKys4MDpzdDAKKys4MDpzdDEKKys4MDpzdDIKKys4MDpzdDMKKys4MDpzdDQKKys4MDpzdDUKKys4MDpzdDYKKys4MDpzdDcKKyszMjpmY3RybAorKzMyOmZzdGF0CisrMzI6ZnRhZworKzMyOmZpc2VnCisrMzI6ZmlvZmYKKyszMjpmb3NlZworKzMyOmZvb2ZmCisrMzI6Zm9wCisrMTI4OnhtbTAKKysxMjg6eG1tMQorKzEyODp4bW0yCisrMTI4OnhtbTMKKysxMjg6eG1tNAorKzEyODp4bW01CisrMTI4OnhtbTYKKysxMjg6eG1tNworKzMyOm14Y3NyCisrMTI4OnltbTBoCisrMTI4OnltbTFoCisrMTI4OnltbTJoCisrMTI4OnltbTNoCisrMTI4OnltbTRoCisrMTI4OnltbTVoCisrMTI4OnltbTZoCisrMTI4OnltbTdoCisrMTI4OmJuZDByYXcKKysxMjg6Ym5kMXJhdworKzEyODpibmQycmF3CisrMTI4OmJuZDNyYXcKKys2NDpibmRjZmd1CisrNjQ6Ym5kc3RhdHVzCitkaWZmIC0tZ2l0IGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1weC1saW51eC5kYXQgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LWxpbnV4LmRhdAoraW5kZXggYjUyYjY4ZC4uMWRjZGNlOSAxMDA2NDQKKy0tLSBhL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHgtbGludXguZGF0CisrKysgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LWxpbnV4LmRhdAorQEAgLTQ1LDE0ICs0NSw2IEBAIGV4cGVkaXRlOmVicCxlc3AsZWlwCisgMTI4OnhtbTcKKyAzMjpteGNzcgorIDMyOm9yaWdfZWF4CistMTI4OnltbTBoCistMTI4OnltbTFoCistMTI4OnltbTJoCistMTI4OnltbTNoCistMTI4OnltbTRoCistMTI4OnltbTVoCistMTI4OnltbTZoCistMTI4OnltbTdoCisgMTI4OmJuZDByYXcKKyAxMjg6Ym5kMXJhdworIDEyODpibmQycmF3CitkaWZmIC0tZ2l0IGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1weC5kYXQgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LmRhdAoraW5kZXggMGVhNDIwYi4uZGRhNTE2NCAxMDA2NDQKKy0tLSBhL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHguZGF0CisrKysgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LmRhdAorQEAgLTQ0LDE0ICs0NCw2IEBAIGV4cGVkaXRlOmVicCxlc3AsZWlwCisgMTI4OnhtbTYKKyAxMjg6eG1tNworIDMyOm14Y3NyCistMTI4OnltbTBoCistMTI4OnltbTFoCistMTI4OnltbTJoCistMTI4OnltbTNoCistMTI4OnltbTRoCistMTI4OnltbTVoCistMTI4OnltbTZoCistMTI4OnltbTdoCisgMTI4OmJuZDByYXcKKyAxMjg6Ym5kMXJhdworIDEyODpibmQycmF3CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIudHJhY2UvZnRyYWNlLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnRyYWNlL2Z0cmFjZS5leHAKK2luZGV4IDE1YWQ3ZTcuLjNhOTQ0NzEgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi50cmFjZS9mdHJhY2UuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi50cmFjZS9mdHJhY2UuZXhwCitAQCAtMTMyLDcgKzEzMiw2IEBAIHByb2MgdGVzdF9mYXN0X3RyYWNlcG9pbnRzIHt9IHsKKyAJZ2RiX3Rlc3QgInRmaW5kIHBjICpzZXRfcG9pbnQiICJGb3VuZCB0cmFjZSBmcmFtZSAuKiIgXAorIAkgICAgInRmaW5kIHNldF9wb2ludCBmcmFtZSwgZmlyc3QgdGltZSIKKworLQlzZXR1cF9rZmFpbCAiZ2RiLzEzODA4IiAieDg2XzY0LSotbGludXgqIgorIAlnZGJfdGVzdCAicHJpbnQgZ2xvYnZhciIgIiA9IDEiCisKKyAJZ2RiX3Rlc3QgInRmaW5kIHBjICpzZXRfcG9pbnQiICJGb3VuZCB0cmFjZSBmcmFtZSAuKiIgXAorZGlmZiAtLWdpdCBhL2dkYi94ODYtbGludXgtbmF0LmMgYi9nZGIveDg2LWxpbnV4LW5hdC5jCitpbmRleCAzY2MxOGMxLi4xMDc1NzZmIDEwMDY0NAorLS0tIGEvZ2RiL3g4Ni1saW51eC1uYXQuYworKysrIGIvZ2RiL3g4Ni1saW51eC1uYXQuYworQEAgLTIxNSw2ICsyMTUsMTEgQEAgeDg2X2xpbnV4X3JlYWRfZGVzY3JpcHRpb24gKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMpCisgCSAgICByZXR1cm4gdGRlc2NfeDMyX2F2eF9saW51eDsgLyogTm8gTVBYIG9uIHgzMiB1c2luZyBBVlguICAqLworIAkgIGVsc2UKKyAJICAgIHJldHVybiB0ZGVzY19hbWQ2NF9tcHhfbGludXg7CisrCWNhc2UgWDg2X1hTVEFURV9BVlhfTVBYX01BU0s6CisrCSAgaWYgKGlzX3gzMikKKysJICAgIHJldHVybiB0ZGVzY194MzJfYXZ4X2xpbnV4OyAvKiBObyBNUFggb24geDMyIHVzaW5nIEFWWC4gICovCisrCSAgZWxzZQorKwkgICAgcmV0dXJuIHRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXg7CisgCWNhc2UgWDg2X1hTVEFURV9BVlhfTUFTSzoKKyAJICBpZiAoaXNfeDMyKQorIAkgICAgcmV0dXJuIHRkZXNjX3gzMl9hdnhfbGludXg7CitAQCAtMjM3LDYgKzI0Miw4IEBAIHg4Nl9saW51eF9yZWFkX2Rlc2NyaXB0aW9uIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQorIAkgIHJldHVybiB0ZGVzY19pMzg2X2F2eDUxMl9saW51eDsKKyAJY2FzZSBYODZfWFNUQVRFX01QWF9NQVNLOgorIAkgIHJldHVybiB0ZGVzY19pMzg2X21weF9saW51eDsKKysJY2FzZSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSzoKKysJICByZXR1cm4gdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4OworIAljYXNlIFg4Nl9YU1RBVEVfQVZYX01BU0s6CisgCSAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4X2xpbnV4OworIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZvcmNlLXJlYWRsaW5lLXN0YXRpYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9mb3JjZS1yZWFkbGluZS1zdGF0aWMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNGVlOGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZvcmNlLXJlYWRsaW5lLXN0YXRpYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLUlmIGdkYiBpcyBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLXN0YXRpYyB0aGVuIHRoaXMgaXMgZHV0aWZ1bGx5IHBhc3NlZCB0bwotcmVhZGxpbmUgd2hpY2ggdGhlbiBkaXNhYmxlcyBsaWJyZWFkbGluZS5hLCB3aGljaCBjYXVzZXMgYSBwcm9ibGVtIHdoZW4gZ2RiCi10cmllcyB0byBsaW5rIGFnYWluc3QgdGhhdC4KLQotVG8gZW5zdXJlIHRoYXQgcmVhZGxpbmUgYWx3YXlzIGJ1aWxkcyBzdGF0aWMgbGlicmFyaWVzLCBwYXNzIC0tZW5hYmxlLXN0YXRpYyB0bwotdGhlIHN1Yi1jb25maWd1cmUuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmRlZiBiL01ha2VmaWxlLmRlZgotaW5kZXggNDM5NDE4OC4uMDVjNjYxYSAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmRlZgotKysrIGIvTWFrZWZpbGUuZGVmCi1AQCAtMTAwLDcgKzEwMCw4IEBAIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IGxpYmljb252OwotIAkJbWlzc2luZz0gaW5zdGFsbC1odG1sOwotIAkJbWlzc2luZz0gaW5zdGFsbC1pbmZvOyB9OwotIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IG00OyB9OwotLWhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHJlYWRsaW5lOyB9OwotK2hvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHJlYWRsaW5lOwotKyAgICAgICAgICAgICAgICBleHRyYV9jb25maWd1cmVfZmxhZ3M9Jy0tZW5hYmxlLXN0YXRpYyc7fTsKLSBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSBzaWQ7IH07Ci0gaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gc2ltOyB9OwotIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHRleGluZm87IG5vX2luc3RhbGw9IHRydWU7IH07Ci1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgotaW5kZXggNjFlMGFiNi4uODM3ZjM2ZSAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmluCi0rKysgYi9NYWtlZmlsZS5pbgotQEAgLTI0OTcxLDcgKzI0OTcxLDcgQEAgY29uZmlndXJlLXJlYWRsaW5lOgotIAkgICQkcy8kJG1vZHVsZV9zcmNkaXIvY29uZmlndXJlIFwKLSAJICAtLXNyY2Rpcj0kJHt0b3BkaXJ9LyQkbW9kdWxlX3NyY2RpciBcCi0gCSAgJChIT1NUX0NPTkZJR0FSR1MpIC0tYnVpbGQ9JHtidWlsZF9hbGlhc30gLS1ob3N0PSR7aG9zdF9hbGlhc30gXAotLQkgIC0tdGFyZ2V0PSR7dGFyZ2V0X2FsaWFzfSAgXAotKwkgIC0tdGFyZ2V0PSR7dGFyZ2V0X2FsaWFzfSAtLWVuYWJsZS1zdGF0aWMgXAotIAkgIHx8IGV4aXQgMQotIEBlbmRpZiByZWFkbGluZQotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuMTAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjEwLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OTdlMTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuMTAuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXJlcXVpcmUgZ2RiLmluYwotcmVxdWlyZSBnZGItJHtQVn0uaW5jCi0KLWluaGVyaXQgcHl0aG9uLWRpcgotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLQlpZiBbIC1uICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uJywgJycsIGQpfSIgXTsgdGhlbgotCQljYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKLSMhL2Jpbi9zaAotY2FzZSAiXCQyIiBpbgotCS0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfS8iIDs7Ci0JLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIgOzsKLQktLWV4ZWMtcHJlZml4KSBlY2hvICIke2V4ZWNfcHJlZml4fSIgOzsKLQkqKSBleGl0IDEgOzsKLWVzYWMKLWV4aXQgMAotRU9GCi0JCWNobW9kICt4ICR7V09SS0RJUn0vcHl0aG9uCi0JZmkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjZmZjOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjExLmJiCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgZ2RiLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCisKK2luaGVyaXQgcHl0aG9uMy1kaXIKKworRVhUUkFfT0VNQUtFX2FwcGVuZF9saWJjLW11c2wgPSAiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJjPXllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHQyX2xpYmM9eWVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpZiBbIC1uICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uJywgJycsIGQpfSIgXTsgdGhlbgorCQljYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKKyMhL2Jpbi9zaAorY2FzZSAiXCQyIiBpbgorCS0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSR7UFlUSE9OX0FCSX0vIiA7OworCS0tbGRmbGFncykgZWNobyAiLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIC1XbCwtcnBhdGgsJHtsaWJkaXJ9Ly4uIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0ke1BZVEhPTl9BQkl9IiA7OworCS0tZXhlYy1wcmVmaXgpIGVjaG8gIiR7ZXhlY19wcmVmaXh9IiA7OworCSopIGV4aXQgMSA7OworZXNhYworZXhpdCAwCitFT0YKKwkJY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KKwlmaQorfQorQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1EcnBsX2dldHRpbWVvZmRheT1nZXR0aW1lb2ZkYXkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYwppbmRleCBhMWQwMzAwLi43NTNiMDQ3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMKQEAgLTE3LDYgKzE3LDcgQEAKIAkJLS13aXRob3V0LXRjbHRrIFwKICIKIAorIyBOZWVkcyBicm9rZW5zZXAgYXMgdGhpcyBkb2Vzbid0IHVzZSBhdXRvbWFrZQogaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBlcmxuYXRpdmUgYmFzaC1jb21wbGV0aW9uCiAKIEVYVFJBX09FTUFLRSA9ICJOT19QWVRIT049MSBDRkxBR1M9JyR7Q0ZMQUdTfScgTERGTEFHUz0nJHtMREZMQUdTfSciCkBAIC0zMSw4ICszMiw3IEBACiAKIGRvX2luc3RhbGwgKCkgewogCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSIke0R9IiBiaW5kaXI9JHtiaW5kaXJ9IFwKLQkJdGVtcGxhdGVfZGlyPSR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzIFwKLQkJR0lUX1BZVEhPTl9ESVI9JHtEfSR7ZGF0YWRpcn0vZ2l0LWNvcmUvcHl0aG9uCisJCXRlbXBsYXRlX2Rpcj0ke2RhdGFkaXJ9L2dpdC1jb3JlL3RlbXBsYXRlcwogCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuMQogCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuNQogCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuNwpAQCAtMTA3LDEwICsxMDcsNiBAQAogIgogUkRFUEVORFNfJHtQTn0tcGVybHRvb2xzID0gIiR7UE59IHBlcmwgcGVybC1tb2R1bGUtZmlsZS1wYXRoIGZpbmR1dGlscyIKIAotUEFDS0FHRVMgPSsgIiR7UE59LXB5dGhvbiIKLUZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uKiIKLQotCiAjIGdpdC10ayBwYWNrYWdlIHdpdGggZ2l0ayBhbmQgZ2l0LWd1aQogUEFDS0FHRVMgPSsgIiR7UE59LXRrIgogI1JERVBFTkRTXyR7UE59LXRrID0gIiR7UE59IHRrIHRjbCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjcuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjcuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM3Mjc5My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi43LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1yZXF1aXJlIGdpdC5pbmMKLQotRVhUUkFfT0VDT05GICs9ICJhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzPW5vIFwKLSAgICAgICAgICAgICAgICAgYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9JHthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXN9IFwKLSAgICAgICAgICAgICAgICAgIgotRVhUUkFfT0VNQUtFICs9ICJOT19HRVRURVhUPTEiCi0KLVNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImM2NDAxMmQ0OTFlMjRjN2Q2NWNkMzg5Zjc1MzgzZDkxIgotU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiNzEwNGM0ZjVkOTQ4YTc1YjQ5OWE5NTQ1MjRjYjI4MWZlMzBjNjY0OWQ4YWJlMjA5ODI5MzZmNzVlYzFmMjc1YiIKLVNSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICI1ODAyMGRjMTNhNTgwMWM0OWY3OTg2ZmVmNzAyNzUzNSIKLVNSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICIwZGZlMTkzMWFkMzAyODczNDcwZTAyODAyNDhlM2FhNTA1MDJiNWVkZDAwZGNjM2U5YzkxNzM2NjdiNmZlYTZhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuOS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OWYzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi45LjMuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBnaXQuaW5jCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1cz1ubyBcCisgICAgICAgICAgICAgICAgIGFjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzPSR7YWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9eWVzfSBcCisgICAgICAgICAgICAgICAgICIKK0VYVFJBX09FTUFLRSArPSAiTk9fR0VUVEVYVD0xIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJjNzgzMzYxYmU4OTRiOGJmYTUzNzM4MTFiMWI2NTYwMiIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gImEyNTJiNjYzNmIxMmQ1YmE1NzczMmM4NDY5NzAxNTQ0YzI2YzJiMTY4OTkzM2JkMWI0MjVlNjAzY2JiMjQ3YzAiCitTUkNfVVJJW21hbnBhZ2VzLm1kNXN1bV0gPSAiNjZmYWZkNjFkNjVmOWQyZDk5NTgxMTMzMTcwZWIxODYiCitTUkNfVVJJW21hbnBhZ2VzLnNoYTI1NnN1bV0gPSAiOGVhMWE1NWIwNDhmYWZiZjBjMGM2ZmNiY2E0YjViMGY1ZTk5MTc4OTMyMjFmYzczNDVjMDkwNTFkNjU4MzJjZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvMDAwMS1saWJndWlsZS1DaGVjay1mb3Itc3RydG9sX2wtZHVyaW5nLWNvbmZpZ3VyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvMDAwMS1saWJndWlsZS1DaGVjay1mb3Itc3RydG9sX2wtZHVyaW5nLWNvbmZpZ3VyZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRmMDczZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzLzAwMDEtbGliZ3VpbGUtQ2hlY2stZm9yLXN0cnRvbF9sLWR1cmluZy1jb25maWd1cmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1Gcm9tIDgxNGQ2ZmI2YzFmNGE1NDRjOGZkMzdmNWEzOTBiYTAyMGMyZDhjODUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogU3VuLCAxMCBKYW4gMjAxNiAyMjoyODoxNyArMDAwMAotU3ViamVjdDogW1BBVENIXSBsaWJndWlsZTogQ2hlY2sgZm9yIHN0cnRvbF9sIGR1cmluZyBjb25maWd1cmUKLQotc3RydG9sX2wgaXMgYSBnbnUgZXh0ZW50aW9uIHdoaWNoIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIG90aGVyIGxpbnV4Ci1saWJjIGltcGxlbWVudGF0aW9ucyBlLmcuIG11c2wuIFRoZXJlZm9yZSBjaGVjayBmb3IgdGhpcyBmdW5jaXRvbiBhbmQKLWNvbmRpdGlvbmFsaXplIHRoZSB1c2Ugb2YgaXQuCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gY29uZmlndXJlLmFjICAgIHwgNSArKystLQotIGxpYmd1aWxlL2kxOG4uYyB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggMzk2OTkyOS4uZjhhNmExYSAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtNzUyLDcgKzc1Miw4IEBAIEFDX0NIRUNLX0hFQURFUlMoW2Fzc2VydC5oIGNydF9leHRlcm5zLmhdKQotICMgICB0cnVuY2F0ZSAtIG5vdCBpbiBtaW5ndwotICMgICBpc2JsYW5rIC0gYXZhaWxhYmxlIGFzIGEgR05VIGV4dGVuc2lvbiBvciBpbiBDOTkKLSAjICAgX05TR2V0RW52aXJvbiAtIERhcndpbiBzcGVjaWZpYwotLSMgICBzdHJjb2xsX2wsIG5ld2xvY2FsZSAtIEdOVSBleHRlbnNpb25zIChnbGliYyksIGFsc28gYXZhaWxhYmxlIG9uIERhcndpbgotKyMgICBzdHJjb2xsX2wsIG5ld2xvY2FsZSwgc3RydG9sX2wgLSBHTlUgZXh0ZW5zaW9ucyAoZ2xpYmMpLAotKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIGF2YWlsYWJsZSBvbiBEYXJ3aW4KLSAjICAgZm9yayAtIHVuYXZhaWxhYmxlIG9uIFdpbmRvd3MKLSAjICAgdXRpbWVuc2F0IC0gcG9zaXguMS0yMDA4Ci0gIyAgIHNjaGVkX2dldGFmZmluaXR5LCBzY2hlZF9zZXRhZmZpbml0eSAtIEdOVSBleHRlbnNpb25zIChnbGliYykKLUBAIC03NjgsNyArNzY5LDcgQEAgQUNfQ0hFQ0tfRlVOQ1MoW0RJTkZJTklUWSBEUU5BTiBjZXhwIGNoc2l6ZSBjbG9nIGNsb2cxMCBjdGVybWlkCQlcCi0gICBnZXRncmVudCBraWxsIGdldHBwaWQgZ2V0cGdycCBmb3JrIHNldGl0aW1lciBnZXRpdGltZXIgc3RyY2hyIHN0cmNtcAlcCi0gICBpbmRleCBiY29weSBtZW1jcHkgcmluZGV4IHRydW5jYXRlIHVuc2V0ZW52IGlzYmxhbmsgX05TR2V0RW52aXJvbglcCi0gICBzdHJjb2xsIHN0cmNvbGxfbCBuZXdsb2NhbGUgdXRpbWVuc2F0IHNjaGVkX2dldGFmZmluaXR5CQlcCi0tICBzY2hlZF9zZXRhZmZpbml0eSBzZW5kZmlsZV0pCi0rICBzY2hlZF9zZXRhZmZpbml0eSBzZW5kZmlsZSBzdHJ0b2xfbF0pCi0gCi0gQU1fQ09ORElUSU9OQUwoW0JVSUxEX0lDRV85X1BPUEVOXSwKLSAgIFt0ZXN0ICJ4JGVuYWJsZV9wb3NpeCIgPSAieHllcyIgJiYgdGVzdCAieCRhY19jdl9mdW5jX2ZvcmsiID0gInh5ZXMiXSkKLWRpZmYgLS1naXQgYS9saWJndWlsZS9pMThuLmMgYi9saWJndWlsZS9pMThuLmMKLWluZGV4IDk3ZDQ0YjAuLjlmYjY5NzYgMTAwNjQ0Ci0tLS0gYS9saWJndWlsZS9pMThuLmMKLSsrKyBiL2xpYmd1aWxlL2kxOG4uYwotQEAgLTEzNTIsNyArMTM1Miw3IEBAIFNDTV9ERUZJTkUgKHNjbV9sb2NhbGVfc3RyaW5nX3RvX2ludGVnZXIsICJsb2NhbGUtc3RyaW5nLT5pbnRlZ2VyIiwKLSAKLSAgIGlmIChjX2xvY2FsZSAhPSBOVUxMKQotICAgICB7Ci0tI2lmZGVmIFVTRV9HTlVfTE9DQUxFX0FQSQotKyNpZiBkZWZpbmVkKFVTRV9HTlVfTE9DQUxFX0FQSSkgJiYgZGVmaW5lZChIQVZFX1NUUlRPTF9MKQotICAgICAgIGNfcmVzdWx0ID0gc3RydG9sX2wgKGNfc3RyLCAmY19lbmRwdHIsIGNfYmFzZSwgY19sb2NhbGUpOwotICNlbHNlCi0gICAgICAgUlVOX0lOX0xPQ0FMRV9TRUNUSU9OIChjX2xvY2FsZSwKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy8wMDAyLVJlY29nbml6ZS1uaW9zMi1hcy1jb21waWxhdGlvbi10YXJnZXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzLzAwMDItUmVjb2duaXplLW5pb3MyLWFzLWNvbXBpbGF0aW9uLXRhcmdldC5wYXRjaAppbmRleCA1MTk1ODViLi44ZTg0NzQ3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzLzAwMDItUmVjb2duaXplLW5pb3MyLWFzLWNvbXBpbGF0aW9uLXRhcmdldC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzLzAwMDItUmVjb2duaXplLW5pb3MyLWFzLWNvbXBpbGF0aW9uLXRhcmdldC5wYXRjaApAQCAtMTAsMjcgKzEwLDIzIEBACiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtIGIvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KLWluZGV4IGQ2MGE4ZTAuLmQxZjZjZmYgMTAwNjQ0CiAtLS0gYS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQogKysrIGIvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KIEBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgKGNvbmQgKChzdHJpbmctbWF0Y2ggIl5pWzAtOV04NiQiIGNwdSkKICAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgbGl0dGxlKSkKICAgICAgICAgICAgICAoKG1lbWJlciBjcHUgJygieDg2XzY0IiAiaWE2NCIKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwY2xlIiAicG93ZXJwYzY0bGUiICJtaXBzZWwiICJtaXBzNjRlbCIpKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjbGUiICJwb3dlcnBjNjRsZSIgIm1pcHNlbCIgIm1pcHM2NGVsIiAibmlvczIiKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwY2xlIiAicG93ZXJwYzY0bGUiICJtaXBzZWwiICJtaXBzNjRlbCIgInNoNCIpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjbGUiICJwb3dlcnBjNjRsZSIgIm1pcHNlbCIgIm1pcHM2NGVsIiAic2g0IiAibmlvczIiKSkKICAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgbGl0dGxlKSkKICAgICAgICAgICAgICAoKG1lbWJlciBjcHUgJygic3BhcmMiICJzcGFyYzY0IiAicG93ZXJwYyIgInBvd2VycGM2NCIgInNwdSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlwcyIgIm1pcHM2NCIpKQotQEAgLTEwMCw3ICsxMDAsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIiAibWlwczY0IiAibTY4ayIgInMzOTB4IikpCitAQCAtMTA4LDcgKzEwOCw3IEBACiAgCiAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICI2NCQiIGNwdSkgOCkKLSAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIjY0W2xiZV1bbGJlXSQiIGNwdSkgOCkKLS0gICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAicG93ZXJwYyIgIm1pcHMiICJtaXBzZWwiKSkgNCkKLSsgICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAicG93ZXJwYyIgIm1pcHMiICJtaXBzZWwiICJuaW9zMiIpKSA0KQorICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiNjRfP1tsYmVdW2xiZV0kIiBjcHUpIDgpCistICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInBvd2VycGMiICJtaXBzIiAibWlwc2VsIiAibTY4ayIgInNoNCIpKSA0KQorKyAgICAgICAgICAoKG1lbWJlciBjcHUgJygic3BhcmMiICJwb3dlcnBjIiAibWlwcyIgIm1pcHNlbCIgIm02OGsiICJzaDQiICJuaW9zMiIpKSA0KQorICAgICAgICAgICAoKG1lbWJlciBjcHUgJygiczM5MHgiKSkgOCkKICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKiIgY3B1KSA0KQogICAgICAgICAgICAoZWxzZSAoZXJyb3IgInVua25vd24gQ1BVIHdvcmQgc2l6ZSIgY3B1KSkpKSkKLSAKLS0tIAotMi43LjAucmMzCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaAppbmRleCA0MzIzOGE3Li5jN2JmNjM1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoCkBAIC0xLDYgKzEsNiBAQAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCiAKLVNpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogCiBGcm9tIGU1MmJmY2RiYWNhNWRjZTQ5ODY3OGQ4ZjUxMjM4MWUzZTM5YTQwNjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoCmluZGV4IDM0YmUzYjkuLmQzZmFmM2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2gKQEAgLTEsNiArMSw2IEBACiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KIAotU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAKIEZyb20gODQ4NTQzMDkxZDU1ZGRkYjU0YTg1NjEyMTU1OTY0NTA2ZDcxMjg1MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2gKaW5kZXggZTVkYzIyNi4uNTU5N2JiMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaApAQCAtNiw3ICs2LDcgQEAKIHwgc2VkOiAtZSBleHByZXNzaW9uICMxLCBjaGFyIDk6IHVua25vd24gb3B0aW9uIHRvIGBzJwogfCBjb25maWd1cmUuYWM6Mzk6IGVycm9yOiBBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50cwogCi1TaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDEKIAogSW5kZXg6IGd1aWxlLTIuMC41L2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTAwNTlhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1Gcm9tIGE4NWM3OGVhMTM5Mzk4NWZkYjZlNjY3OGRlYTE5MTM1YzU1M2QzNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KLURhdGU6IEZyaSwgMTkgU2VwIDIwMTQgMjE6MTg6MDkgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gVk06IEFTTV9NVUwgZm9yIEFSTTogQWRkIGVhcmx5Y2xvYmJlciBjb25zdHJhaW50IHRvIHRoZSBTTVVMTAotIG91dHB1dHMuCi0KLVJlcG9ydGVkIGJ5IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+LgotCi0qIGxpYmd1aWxlL3ZtLWktc2NoZW1lLmMgKEFTTV9NVUwpW0FSTV06IEFkZCBlYXJseWNsb2JiZXIgKCYpIGNvbnN0cmFpbnQKLSAgdG8gdGhlIFNNVUxMIG91dHB1dCByZWdpc3RlcnMuCi0KLUF1dGhvcjogTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIGxpYmd1aWxlL3ZtLWktc2NoZW1lLmMgfCA1ICsrLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMgYi9saWJndWlsZS92bS1pLXNjaGVtZS5jCi1pbmRleCA1ODdhYTk1Li4xNjJlZmFiIDEwMDY0NAotLS0tIGEvbGliZ3VpbGUvdm0taS1zY2hlbWUuYwotKysrIGIvbGliZ3VpbGUvdm0taS1zY2hlbWUuYwotQEAgLTEsNSArMSw0IEBACi0tLyogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLAotLSAqICAgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgKiAKLSAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1AQCAtMzYzLDcgKzM2Miw3IEBAIFZNX0RFRklORV9GVU5DVElPTiAoMTQ5LCBnZSwgImdlPyIsIDIpCi0gICAgICAgewkJCQkJCQkJCVwKLSAJc2NtX3Rfc2lnbmVkX2JpdHMgcmxvLCByaGk7CQkJCQlcCi0gCWFzbSAoInNtdWxsICUwLCAlMSwgJTIsICUzXG4iCQkJCQlcCi0tCSAgICAgOiAiPXIiIChybG8pLCAiPXIiIChyaGkpCQkJCQlcCi0rCSAgICAgOiAiPSZyIiAocmxvKSwgIj0mciIgKHJoaSkJCQkJCVwKLSAJICAgICA6ICJyIiAoU0NNX1VOUEFDSyAoeCkgLSBzY21fdGMyX2ludCksCQkJXAotIAkgICAgICAgInIiIChTQ01fSV9JTlVNICh5KSkpOwkJCQkJXAotIAlpZiAoU0NNX0xJS0VMWSAoU0NNX1NSUyAocmxvLCAzMSkgPT0gcmhpKSkJCQlcCi0tLSAKLTIuMy41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoCmluZGV4IGQzZTMxMmYuLmRhNjliNWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaApAQCAtMSw2ICsxLDYgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbnN1c2UgcGF0Y2hdCiAKLVNpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogCiBJbmRleDogZ3VpbGUtMi4wLjMvbGliZ3VpbGUvaGFzaC5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMDE0ODYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuc3VzZSBwYXRjaF0KLQotU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KLQotU2VlIGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTEwMDk2Ci13aHkgdGhpcyB0ZXN0IGlzIHR1cm5lZCBvZmYuCi1JbmRleDogZ3VpbGUtMi4wLjMvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3VpbGUtMi4wLjMub3JpZy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMS0xMC0xNSAwOTozNDo0MC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBndWlsZS0yLjAuMy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMi0wMS0xMyAyMTo1MjoxMC4yODI1NDAzNTUgLTA4MDAKLUBAIC02NSwyMyArNjUsMjMgQEAKLSAgICAgICBmb28pKSkKLSAKLSAKLS0od2l0aC10ZXN0LXByZWZpeCAiZ2MiCi0tICAocGFzcy1pZiAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiCi0tICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQotLSAgICAgICAgICAgKHRvdGFsIDEwMDApKQotLQotLSAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKLSs7Oyh3aXRoLXRlc3QtcHJlZml4ICJnYyIKLSs7OyAgKHBhc3MtaWYgIlVudXNlZCBtb2R1bGVzIGFyZSByZW1vdmVkIgotKzs7ICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQotKzs7ICAgICAgICAgICAodG90YWwgMTAwMCkpCi0rOzsKLSs7OyAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKLSAKLSAgICAgICA7OyBBdm9pZCBmYWxzZSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGVzIG9uIHRoZSBzdGFjay4KLS0gICAgICAoc3RhY2stY2xlYW51cCAyMCkKLSs7OyAgICAgIChzdGFjay1jbGVhbnVwIDIwKQotIAotLSAgICAgIChnYykKLS0gICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KLS0gICAgICAoZ2MpIDs7IHRocmljZTogYmVjYXVzZSB0aGUgdGVzdCBkb2Vzbid0IHN1Y2NlZWQgd2l0aCBvbmx5Ci0rOzsgICAgICAoZ2MpCi0rOzsgICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KLSs7OyAgICAgIChnYykgOzsgdGhyaWNlOiBiZWNhdXNlIHRoZSB0ZXN0IGRvZXNuJ3Qgc3VjY2VlZCB3aXRoIG9ubHkKLSAgICAgICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgotIAotLSAgICAgICg9IChsZXQgbHAgKChpIDApKQotLSAgICAgICAgICAgKGlmIChndWFyZCkKLS0gICAgICAgICAgICAgICAobHAgKDErIGkpKQotLSAgICAgICAgICAgICAgIGkpKQotLSAgICAgICAgIHRvdGFsKSkpKQotKzs7ICAgICAgKD0gKGxldCBscCAoKGkgMCkpCi0rOzsgICAgICAgICAgIChpZiAoZ3VhcmQpCi0rOzsgICAgICAgICAgICAgICAobHAgKDErIGkpKQotKzs7ICAgICAgICAgICAgICAgaSkpCi0rOzsgICAgICAgICB0b3RhbCkpKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvcmVtb3ZlX3N0cmNhc2VfbF9mdW5jcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvcmVtb3ZlX3N0cmNhc2VfbF9mdW5jcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdhMDZmZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3JlbW92ZV9zdHJjYXNlX2xfZnVuY3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1UaGVzZSB1bnVzZWQgZnVuY3Rpb25zIGNhdXNlIGJ1aWxkIGZhaWx1cmVzIHdpdGggdWNsaWJjIHNpbmNlIHRoZXkgcmVmZXJlbmNlIF9fdWNsaWJjX2xvY2FsZV9zdHJ1Y3QKLWFuZCB0aGlzIGlzIGV4cG9zZWQgYnkgdWNsaWJjIEFQSSBoZWFkZXJzIG9ubHkgaWYgQyBsb2NhbGVzIGFyZSBidWlsdCwgYnV0IGZvciBPRSB3ZSBidWlsZCBmdWxsIGxvY2FsZQotc3VwcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogZ3VpbGUtMi4wLjExL2xpYmd1aWxlL2kxOG4uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGd1aWxlLTIuMC4xMS5vcmlnL2xpYmd1aWxlL2kxOG4uYwotKysrIGd1aWxlLTIuMC4xMS9saWJndWlsZS9pMThuLmMKLUBAIC04NTEsMjcgKzg1MSw2IEBAIHN0cl9kb3duY2FzZSAocmVnaXN0ZXIgY2hhciAqZHN0LCByZWdpc3QKLSAgICpkc3QgPSAnXDAnOwotIH0KLSAKLS0jaWZkZWYgVVNFX0dOVV9MT0NBTEVfQVBJCi0tc3RhdGljIGlubGluZSB2b2lkCi0tc3RyX3VwY2FzZV9sIChyZWdpc3RlciBjaGFyICpkc3QsIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnNyYywKLS0JICAgICAgc2NtX3RfbG9jYWxlIGxvY2FsZSkKLS17Ci0tICBmb3IgKDsgKnNyYyAhPSAnXDAnOyBzcmMrKywgZHN0KyspCi0tICAgICpkc3QgPSB0b3VwcGVyX2wgKCpzcmMsIGxvY2FsZSk7Ci0tICAqZHN0ID0gJ1wwJzsKLS19Ci0tCi0tc3RhdGljIGlubGluZSB2b2lkCi0tc3RyX2Rvd25jYXNlX2wgKHJlZ2lzdGVyIGNoYXIgKmRzdCwgcmVnaXN0ZXIgY29uc3QgY2hhciAqc3JjLAotLQkJc2NtX3RfbG9jYWxlIGxvY2FsZSkKLS17Ci0tICBmb3IgKDsgKnNyYyAhPSAnXDAnOyBzcmMrKywgZHN0KyspCi0tICAgICpkc3QgPSB0b2xvd2VyX2wgKCpzcmMsIGxvY2FsZSk7Ci0tICAqZHN0ID0gJ1wwJzsKLS19Ci0tI2VuZGlmCi0tCi0tCi0gU0NNX0RFRklORSAoc2NtX3N0cmluZ19sb2NhbGVfbHQsICJzdHJpbmctbG9jYWxlPD8iLCAyLCAxLCAwLAotIAkgICAgKFNDTSBzMSwgU0NNIHMyLCBTQ00gbG9jYWxlKSwKLSAJICAgICJDb21wYXJlIHN0cmluZ3MgQHZhcntzMX0gYW5kIEB2YXJ7czJ9IGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXkuIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlZmU2Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi1TVU1NQVJZID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyIKLURFU0NSSVBUSU9OID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyxcCi0gdGhlIG9mZmljaWFsIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLlwKLSBHdWlsZSBpcyBhIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBwcm9ncmFtbWVycyBjcmVhdGUgZmxleGlibGUgYXBwbGljYXRpb25zLlwKLSBVc2luZyBHdWlsZSBpbiBhbiBhcHBsaWNhdGlvbiBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZnVuY3Rpb25hbGl0eSB0byBiZVwKLSBleHRlbmRlZCBieSB1c2VycyBvciBvdGhlciBwcm9ncmFtbWVycyB3aXRoIHBsdWctaW5zLCBtb2R1bGVzLCBvciBzY3JpcHRzLlwKLSBHdWlsZSBwcm92aWRlcyB3aGF0IG1pZ2h0IGJlIGRlc2NyaWJlZCBhcyAncHJhY3RpY2FsIHNvZnR3YXJlIGZyZWVkb20sJ1wKLSBtYWtpbmcgaXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIGN1c3RvbWl6ZSBhbiBhcHBsaWNhdGlvbiB0byBtZWV0IHRoZWlyXAotIG5lZWRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIHRoZSBhcHBsaWNhdGlvbidzIGludGVybmFscy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWlsZS8iCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3VpbGUvZ3VpbGUtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FybV9lbmRpYW5uZXNzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FybV9hYXJjaDY0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX3N0cmNhc2VfbF9mdW5jcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYmd1aWxlLUNoZWNrLWZvci1zdHJ0b2xfbC1kdXJpbmctY29uZmlndXJlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItUmVjb2duaXplLW5pb3MyLWFzLWNvbXBpbGF0aW9uLXRhcmdldC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotIyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAxLUNoYW5nZS1ndWlsZS10by1ndWlsZS1YLlktZm9yLWluZm8tcGFnZXMucGF0Y2gKLSMgICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIwM2YxYmNlMWE0OTgzMDc2ZDk1NTAwMzQ3MjMwNmExMyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhZWQwYTRhNmRiNGUzMTBjYmRmZWIzNjEzZmE2Zjg2ZmRkYzkxZWY2MjRjMWUzZjg5MzdhNjMwNGM2OTEwM2UyIgotCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHRleGluZm8KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1ERVBFTkRTID0gImxpYnVuaXN0cmluZyBiZHdnYyBnbXAgbGlidG9vbCBsaWJmZmkgbmN1cnNlcyByZWFkbGluZSIKLSMgYWRkIGd1aWxlLW5hdGl2ZSBvbmx5IHRvIHRoZSB0YXJnZXQgcmVjaXBlJ3MgREVQRU5EUwotREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBndWlsZS1uYXRpdmUgbGliYXRvbWljLW9wcyIKLQotIyBUaGUgY29tbWVudCBvZiB0aGUgc2NyaXB0IGd1aWxlLWNvbmZpZyBzYWlkIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnV0IHdlIHNob3VsZAotIyBhdCBsZWFzdCBhZGQgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY3kgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHdlIHN0aWxsIHByb3ZpZGUgdGhlIHNjcmlwdC4KLVJERVBFTkRTXyR7UE59ID0gInBrZ2NvbmZpZyIKLQotUkRFUEVORFNfJHtQTn1fYXBwZW5kX2xpYmMtZ2xpYmNfY2xhc3MtdGFyZ2V0ID0gIiBnbGliYy1nY29udi1pc284ODU5LTEiCi0KLUVYVFJBX09FQ09ORiArPSAiJHtAWyctLXdpdGhvdXQtbGlibHRkbC1wcmVmaXggLS13aXRob3V0LWxpYmdtcC1wcmVmaXggLS13aXRob3V0LWxpYnJlYWRsaW5lLXByZWZpeCcsICcnXVtiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLGQpXX0iCi0KLUVYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAtLXdpdGgtbGlidW5pc3RyaW5nLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmdtcC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJsdGRsLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSIKLUVYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGd1aWxlX2N2X3VzZV9jc3FydD1ubyAiCi0KLUNGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtREhBVkVfR0NfU0VUX0ZJTkFMSVpFUl9OT1RJRklFUiBcCi0JICAgICAgICAgICAgICAgICAgICAtREhBVkVfR0NfR0VUX0hFQVBfVVNBR0VfU0FGRSBcCi0JICAgICAgICAgICAgICAgICAgICAtREhBVkVfR0NfR0VUX0ZSRUVfU1BBQ0VfRElWSVNPUiBcCi0JICAgICAgICAgICAgICAgICAgICAtREhBVkVfR0NfU0VUX0ZJTkFMSVpFX09OX0RFTUFORCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotCW1rZGlyIC1wIHBvCi19Ci0KLWV4cG9ydCBHVUlMRV9GT1JfQlVJTEQ9IiR7QlVJTERfU1lTfS1ndWlsZSIKLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotCWluc3RhbGwgLW0gMDc1NSAgJHtEfSR7YmluZGlyfS9ndWlsZSAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlCi0KLQljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndWlsZSBcCi0JCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCi0JCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQotCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUgXAotCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAotCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgewotCSMgY2xlYW51cCBidWlsZHBhdGhzIGluIHNjcmlwdHMKLQlzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0RJUl9OQVRJVkV9OjonICR7RH0ke2JpbmRpcn0vZ3VpbGUtY29uZmlnCi0Jc2VkIC1pIC1lICdzOiR7U1RBR0lOR19ESVJfSE9TVH06OicgJHtEfSR7YmluZGlyfS9ndWlsZS1zbmFyZgotCi0Jc2VkIC1pIC1lICdzOiR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgJHtEfSR7bGliZGlyfS9wa2djb25maWcvZ3VpbGUtMi4wLnBjCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2xpYmMtbXVzbCgpIHsKLQlybSAtZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKLX0KLQotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTID0gImd1aWxlX2Nyb3NzX2NvbmZpZyIKLQotZ3VpbGVfY3Jvc3NfY29uZmlnKCkgewotCSMgdGhpcyBpcyBvbmx5IGZvciB0YXJnZXQgcmVjaXBlCi0JaWYgWyAiJHtQTn0iID0gImd1aWxlIiBdCi0JdGhlbgotCSAgICAgICAgIyBDcmVhdGUgZ3VpbGUtY29uZmlnIHJldHVybmluZyB0YXJnZXQgdmFsdWVzIGluc3RlYWQgb2YgbmF0aXZlIHZhbHVlcwotCSAgICAgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSX0NST1NTfQotICAgICAgICAJZWNobyAnIyEnYHdoaWNoICR7QlVJTERfU1lTfS1ndWlsZWAkJyBcXFxuLS1uby1hdXRvLWNvbXBpbGUgLWUgbWFpbiAtc1xuISNcbihkZWZpbmUgJWd1aWxlLWJ1aWxkLWluZm8gJ1wnXCggXAotCQkJPiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcwotCSAgICAgICAgc2VkIC1uIC1lICdzOl5bIFx0XSp7WyBcdF0qIjogICg6JyBcCi0JCQktZSAnczoiLFsgXHRdKiI6IC4gIjonIFwKLQkJCS1lICdzOiIgKn0sICpcXDoiKTonIFwKLQkJCS1lICdzOl4uKmNhY2hlZGlyLiokOjonIFwKLQkJCS1lICcvXiAgKC9wJyBcCi0JCQk8ICR7Qn0vbGliZ3VpbGUvbGlicGF0aC5oID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCi0JICAgICAgICBlY2hvICcpKScgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKLQkgICAgICAgIGNhdCAke0J9L21ldGEvZ3VpbGUtY29uZmlnID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCi0JICAgICAgICBpbnN0YWxsICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L2d1aWxlLWNvbmZpZwotCWZpCi19Ci0KLSMgR3VpbGUgbmVlZHMgdGhlIGNvbXBpbGVkIGZpbGVzIHRvIGJlIG5ld2VyIHRoYW4gdGhlIHNvdXJjZSwgYW5kIGl0IHdvbid0Ci0jIGF1dG8tY29tcGlsZSBpbnRvIHRoZSBwcmVmaXggZXZlbiBpZiBpdCBjYW4gd3JpdGUgdGhlcmUsIHNvIHRvdWNoIHRoZW0gaGVyZSBhcwotIyBzeXNyb290IGlzIG1hbmFnZWQuCi1TU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJndWlsZV9zc3RhdGVfcG9zdGluc3QiCi1ndWlsZV9zc3RhdGVfcG9zdGluc3QoKSB7Ci0JaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQotCXRoZW4KLSAgICAgICAgICAgICAgICBmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2xpYmRpcn0vZ3VpbGUvMi4wL2NjYWNoZSAtdHlwZSBmIHwgeGFyZ3MgdG91Y2gKLQlmaQotfQotCi0jIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ5MS8KLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZmU1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMi5iYgpAQCAtMCwwICsxLDEyMSBAQAorU1VNTUFSWSA9ICJHdWlsZSBpcyB0aGUgR05VIFViaXF1aXRvdXMgSW50ZWxsaWdlbnQgTGFuZ3VhZ2UgZm9yIEV4dGVuc2lvbnMiCitERVNDUklQVElPTiA9ICJHdWlsZSBpcyB0aGUgR05VIFViaXF1aXRvdXMgSW50ZWxsaWdlbnQgTGFuZ3VhZ2UgZm9yIEV4dGVuc2lvbnMsXAorIHRoZSBvZmZpY2lhbCBleHRlbnNpb24gbGFuZ3VhZ2UgZm9yIHRoZSBHTlUgb3BlcmF0aW5nIHN5c3RlbS5cCisgR3VpbGUgaXMgYSBsaWJyYXJ5IGRlc2lnbmVkIHRvIGhlbHAgcHJvZ3JhbW1lcnMgY3JlYXRlIGZsZXhpYmxlIGFwcGxpY2F0aW9ucy5cCisgVXNpbmcgR3VpbGUgaW4gYW4gYXBwbGljYXRpb24gYWxsb3dzIHRoZSBhcHBsaWNhdGlvbidzIGZ1bmN0aW9uYWxpdHkgdG8gYmVcCisgZXh0ZW5kZWQgYnkgdXNlcnMgb3Igb3RoZXIgcHJvZ3JhbW1lcnMgd2l0aCBwbHVnLWlucywgbW9kdWxlcywgb3Igc2NyaXB0cy5cCisgR3VpbGUgcHJvdmlkZXMgd2hhdCBtaWdodCBiZSBkZXNjcmliZWQgYXMgJ3ByYWN0aWNhbCBzb2Z0d2FyZSBmcmVlZG9tLCdcCisgbWFraW5nIGl0IHBvc3NpYmxlIGZvciB1c2VycyB0byBjdXN0b21pemUgYW4gYXBwbGljYXRpb24gdG8gbWVldCB0aGVpclwKKyBuZWVkcyB3aXRob3V0IGRpZ2dpbmcgaW50byB0aGUgYXBwbGljYXRpb24ncyBpbnRlcm5hbHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpbGUvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d1aWxlL2d1aWxlLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hcm1fZW5kaWFubmVzcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hcm1fYWFyY2g2NC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItUmVjb2duaXplLW5pb3MyLWFzLWNvbXBpbGF0aW9uLXRhcmdldC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA4MWZkZjgwY2QzYTc2ZjI2MGEyYTBkODdmNzczZDZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRlODE4NzczNmY5YjI2MGYyZmE3NzZlZDM5YjUyY2I3NGRkMzg5Y2NmNzAzOWMwNDJmMDYwNjI3MDE5NmI3ZTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHRleGluZm8KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitERVBFTkRTID0gImxpYnVuaXN0cmluZyBiZHdnYyBnbXAgbGlidG9vbCBsaWJmZmkgbmN1cnNlcyByZWFkbGluZSIKKyMgYWRkIGd1aWxlLW5hdGl2ZSBvbmx5IHRvIHRoZSB0YXJnZXQgcmVjaXBlJ3MgREVQRU5EUworREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBndWlsZS1uYXRpdmUgbGliYXRvbWljLW9wcyIKKworIyBUaGUgY29tbWVudCBvZiB0aGUgc2NyaXB0IGd1aWxlLWNvbmZpZyBzYWlkIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnV0IHdlIHNob3VsZAorIyBhdCBsZWFzdCBhZGQgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY3kgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHdlIHN0aWxsIHByb3ZpZGUgdGhlIHNjcmlwdC4KK1JERVBFTkRTXyR7UE59ID0gInBrZ2NvbmZpZyIKKworUkRFUEVORFNfJHtQTn1fYXBwZW5kX2xpYmMtZ2xpYmNfY2xhc3MtdGFyZ2V0ID0gIiBnbGliYy1nY29udi1pc284ODU5LTEiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLXdpdGhvdXQtbGlibHRkbC1wcmVmaXggLS13aXRob3V0LWxpYmdtcC1wcmVmaXggLS13aXRob3V0LWxpYnJlYWRsaW5lLXByZWZpeCcsICcnXVtiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLGQpXX0iCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAtLXdpdGgtbGlidW5pc3RyaW5nLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmdtcC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJsdGRsLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGd1aWxlX2N2X3VzZV9jc3FydD1ubyAiCisKK0NGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtREhBVkVfR0NfU0VUX0ZJTkFMSVpFUl9OT1RJRklFUiBcCisJICAgICAgICAgICAgICAgICAgICAtREhBVkVfR0NfR0VUX0hFQVBfVVNBR0VfU0FGRSBcCisJICAgICAgICAgICAgICAgICAgICAtREhBVkVfR0NfR0VUX0ZSRUVfU1BBQ0VfRElWSVNPUiBcCisJICAgICAgICAgICAgICAgICAgICAtREhBVkVfR0NfU0VUX0ZJTkFMSVpFX09OX0RFTUFORCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCW1rZGlyIC1wIHBvCit9CisKK2V4cG9ydCBHVUlMRV9GT1JfQlVJTEQ9IiR7QlVJTERfU1lTfS1ndWlsZSIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gMDc1NSAgJHtEfSR7YmluZGlyfS9ndWlsZSAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndWlsZSBcCisJCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCisJCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUgXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCSMgY2xlYW51cCBidWlsZHBhdGhzIGluIHNjcmlwdHMKKwlzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0RJUl9OQVRJVkV9OjonICR7RH0ke2JpbmRpcn0vZ3VpbGUtY29uZmlnCisJc2VkIC1pIC1lICdzOiR7U1RBR0lOR19ESVJfSE9TVH06OicgJHtEfSR7YmluZGlyfS9ndWlsZS1zbmFyZgorCisJc2VkIC1pIC1lICdzOiR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgJHtEfSR7bGliZGlyfS9wa2djb25maWcvZ3VpbGUtMi4wLnBjCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpYmMtbXVzbCgpIHsKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTID0gImd1aWxlX2Nyb3NzX2NvbmZpZyIKKworZ3VpbGVfY3Jvc3NfY29uZmlnKCkgeworCSMgdGhpcyBpcyBvbmx5IGZvciB0YXJnZXQgcmVjaXBlCisJaWYgWyAiJHtQTn0iID0gImd1aWxlIiBdCisJdGhlbgorCSAgICAgICAgIyBDcmVhdGUgZ3VpbGUtY29uZmlnIHJldHVybmluZyB0YXJnZXQgdmFsdWVzIGluc3RlYWQgb2YgbmF0aXZlIHZhbHVlcworCSAgICAgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSX0NST1NTfQorICAgICAgICAJZWNobyAnIyEnYHdoaWNoICR7QlVJTERfU1lTfS1ndWlsZWAkJyBcXFxuLS1uby1hdXRvLWNvbXBpbGUgLWUgbWFpbiAtc1xuISNcbihkZWZpbmUgJWd1aWxlLWJ1aWxkLWluZm8gJ1wnXCggXAorCQkJPiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgc2VkIC1uIC1lICdzOl5bIFx0XSp7WyBcdF0qIjogICg6JyBcCisJCQktZSAnczoiLFsgXHRdKiI6IC4gIjonIFwKKwkJCS1lICdzOiIgKn0sICpcXDoiKTonIFwKKwkJCS1lICdzOl4uKmNhY2hlZGlyLiokOjonIFwKKwkJCS1lICcvXiAgKC9wJyBcCisJCQk8ICR7Qn0vbGliZ3VpbGUvbGlicGF0aC5oID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBlY2hvICcpKScgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGNhdCAke0J9L21ldGEvZ3VpbGUtY29uZmlnID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBpbnN0YWxsICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L2d1aWxlLWNvbmZpZworCWZpCit9CisKKyMgR3VpbGUgbmVlZHMgdGhlIGNvbXBpbGVkIGZpbGVzIHRvIGJlIG5ld2VyIHRoYW4gdGhlIHNvdXJjZSwgYW5kIGl0IHdvbid0CisjIGF1dG8tY29tcGlsZSBpbnRvIHRoZSBwcmVmaXggZXZlbiBpZiBpdCBjYW4gd3JpdGUgdGhlcmUsIHNvIHRvdWNoIHRoZW0gaGVyZSBhcworIyBzeXNyb290IGlzIG1hbmFnZWQuCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJndWlsZV9zc3RhdGVfcG9zdGluc3QiCitndWlsZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKyAgICAgICAgICAgICAgICBmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2xpYmRpcn0vZ3VpbGUvMi4wL2NjYWNoZSAtdHlwZSBmIHwgeGFyZ3MgdG91Y2gKKwlmaQorfQorCisjIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ5MS8KK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmIwYzMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotU1VNTUFSWSA9ICJQcm9ncmFtIGZvciBjcmVhdGluZyBzaW1wbGUgbWFuIHBhZ2VzIgotU0VDVElPTiA9ICJkZXZlbCIKLUxJQ0VOU0UgPSAiR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLURFUEVORFMgPSAiYXV0b2NvbmYtbmF0aXZlIGF1dG9tYWtlLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZDFkNDRhN2E3YjJiZDYxNzU1YTIwNDVkOTZlY2FlYTAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzIzMmFmNjQ3NWVmNjViZWUwMjc3MDg2MmEzNjJmNGM0YzJlNmM5OTY3ZDM5ZTk4N2ViOTRjYWRjZmMxMzg1NiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbmxzIgotCi0jIFdlIGRvbid0IHdhbnQgdG8gcmVjb25maWd1cmUgdGhpbmdzIGFzIGl0IHdvdWxkIHJlcXVpcmUgJ3BlcmxuYXRpdmUnIHRvIGJlCi0jIHVzZWQuCi1kb19jb25maWd1cmUoKSB7Ci0Jb2VfcnVuY29uZgotfQotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBwZXJsCi0Jc2VkIC1pIC1lICIxczojIS4qOiMhIC91c3IvYmluL2VudiBwZXJsOiIgJHtEfSR7YmluZGlyfS9oZWxwMm1hbgotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZGMzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjQuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQcm9ncmFtIGZvciBjcmVhdGluZyBzaW1wbGUgbWFuIHBhZ2VzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAiYXV0b2NvbmYtbmF0aXZlIGF1dG9tYWtlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTQ0YWNhNDk2YTdkODlkZTNlNWQ5OWU1NmEyZjAzZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDRlY2Y2OTdkMTNmMTRkZDFhNzhjNTk5NWYwNjQ1OWJmZjcwNmZkMWNlNTkzZDFjMDJkODE2NjdjMDIwNzc1MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbmxzIgorCisjIFdlIGRvbid0IHdhbnQgdG8gcmVjb25maWd1cmUgdGhpbmdzIGFzIGl0IHdvdWxkIHJlcXVpcmUgJ3BlcmxuYXRpdmUnIHRvIGJlCisjIHVzZWQuCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBwZXJsCisJc2VkIC1pIC1lICIxczojIS4qOiMhIC91c3IvYmluL2VudiBwZXJsOiIgJHtEfSR7YmluZGlyfS9oZWxwMm1hbgorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3YWUwMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAiVXRpbGl0eSBzY3JpcHRzIGZvciBpbnRlcm5hdGlvbmFsaXppbmcgWE1MIgotU0VDVElPTiA9ICJkZXZlbCIKLUxJQ0VOU0UgPSAiR1BMdjIiCi0KLVVSTFY9IiR7QCcuJy5qb2luKGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVswOjJdKX0iCi1TUkNfVVJJID0gImh0dHA6Ly9sYXVuY2hwYWQubmV0LyR7QlBOfS90cnVuay8ke1BWfS8rZG93bmxvYWQvJHtCUH0udGFyLmd6IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2ludGx0b29sL3RydW5rLyIKLQotUyA9ICIke1dPUktESVJ9L2ludGx0b29sLSR7UFZ9IgotCi1ERVBFTkRTID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCi1SREVQRU5EU18ke1BOfSA9ICJnZXR0ZXh0LWRldiBsaWJ4bWwtcGFyc2VyLXBlcmwiCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgotIyBnZXR0ZXh0IGlzIGFzc3VtZWQgdG8gZXhpc3Qgb24gdGhlIGhvc3QKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgotUlJFQ09NTUVORFNfJHtQTn0gPSAicGVybC1tb2R1bGVzIgotUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLQotRklMRVNfJHtQTn0tZGV2ID0gIiIKLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCi0KLUlOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtZGVwcyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHBlcmxuYXRpdmUKLQotZXhwb3J0IFBFUkwgPSAiJHtiaW5kaXJ9L2VudiBwZXJsIgotUEVSTF9jbGFzcy1uYXRpdmUgPSAiL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmwiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUtcGVybC1jaGVjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXBlcmwtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1N2VhMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXBlcmwtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorUmVtb3ZlIHRoZSBwZXJsIGNoZWNrcyBpbiBpbnRsdG9vbC5tNC4gIFRoaXMgY2FuIGZpbmQgYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgdG8KK3RoZSBvbmUgdGhhdCB0aGUgaW50bHRvb2wgc2NyaXB0cyB3aWxsIGFjdHVhbGx5IGJlIHVzaW5nIChhcyB0aGV5IGhhcmQtY29kZSBhCitzcGVjaWZpYyBiaW5hcnkpLCBmb3IgZXhhbXBsZSBpbiB0aGUgaW50bHRvb2wtbmF0aXZlIGNhc2UgdGhleSdsbCBiZSB1c2luZworbmF0aXZlcGVybCB5ZXQgdGhpcyBmcmFnbWVudCBjYW4gZmluZCBhbmQgdGVzdCB0aGUgaG9zdCBwZXJsLgorCitUaGlzIGNhbiByZXN1bHQgaW4gcmVjaXBlcyBmYWlsaW5nIGluIGRvX2NvbmZpZ3VyZSBhcyBpbnRsdG9vbC5tNCBmaW5kcyBhIGhvc3QKK3Blcmwgd2hpY2ggZG9lc24ndCBoYXZlIFhNTDo6UGFyc2VyIGluc3RhbGxlZCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGludGx0b29sCit3aWxsIHdvcmsgZmluZSBhcyBuYXRpdmVwZXJsIGhhcyBYTUw6OlBhcnNlci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L2ludGx0b29sLytidWcvMTE5Nzg3NSkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLSBhL2ludGx0b29sLm00Lm9yaWcJMjAxMy0wNy0wMiAxMToyMjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBiL2ludGx0b29sLm00CTIwMTMtMDctMDIgMTE6MjI6MzIuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjYsMSArMjYsMSBAQCBkbmwgSVRfUFJPR19JTlRMVE9PTChbTUlOSU1VTS1WRVJTSU9OXSwgW25vLXhtbF0pCistIyBzZXJpYWwgNDIgSVRfUFJPR19JTlRMVE9PTAorKyMgc2VyaWFsIDQyLjEgSVRfUFJPR19JTlRMVE9PTAorQEAgLTEzMSwyNyArMTMxLDYgQEAgaWYgdGVzdCAteiAiJHhndmVyc2lvbiIgLW8gLXogIiRtbXZlcnNpbworICAgICBBQ19NU0dfRVJST1IoW0dOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKyBmaQorIAorLUFDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBwZXJsKQorLWlmIHRlc3QgLXogIiRJTlRMVE9PTF9QRVJMIjsgdGhlbgorLSAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorLWZpCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgcGVybCA+PSA1LjguMV0pCistJElOVExUT09MX1BFUkwgLWUgInVzZSA1LjguMTsiID4gL2Rldi9udWxsIDI+JjEKKy1pZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCistICAgQUNfTVNHX0VSUk9SKFtwZXJsIDUuOC4xIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCistZWxzZQorLSAgIElUX1BFUkxfVkVSU0lPTj1gJElOVExUT09MX1BFUkwgLWUgInByaW50ZiAnJXZkJywgJF5WImAKKy0gICBBQ19NU0dfUkVTVUxUKFskSVRfUEVSTF9WRVJTSU9OXSkKKy1maQorLWlmIHRlc3QgIngkMiIgIT0gInhuby14bWwiOyB0aGVuCistICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQorLSAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCistICAgICAgIEFDX01TR19SRVNVTFQoW29rXSkKKy0gICBlbHNlCistICAgICAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKy0gICBmaQorLWZpCistCisgIyBTdWJzdGl0dXRlIEFMTF9MSU5HVUFTIHNvIHdlIGNhbiB1c2UgaXQgaW4gcG8vTWFrZWZpbGUKKyBBQ19TVUJTVChBTExfTElOR1VBUykKKyAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM2OWUzNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1TaWduZWQtb2ZmLWJ5OiBGbG9yaW4gU2FyYnUgPGZsb3Jpbi5zYXJidUB3aW5kcml2ZXIuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQotCi1JbmRleDogaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gaW50bHRvb2wtMC40MC42Lm9yaWcvaW50bHRvb2wubTQJMjAwOS0wMi0xNCAxNDoxMjoyOC4wMDAwMDAwMDAgLTA4MDAKLSsrKyBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQJMjAxMS0xMS0yMyAxNTozOTozNC42ODk1NjE4NzIgLTA4MDAKLUBAIC0xMjIsMTQgKzEyMiwxNiBAQAotICAgIElUX1BFUkxfVkVSU0lPTj0iYCRJTlRMVE9PTF9QRVJMIC1lIFwicHJpbnRmICcldmQnLCAkXlZcImAiCi0gICAgQUNfTVNHX1JFU1VMVChbJElUX1BFUkxfVkVSU0lPTl0pCi0gZmkKLS1pZiB0ZXN0ICJ4JDIiICE9ICJ4bm8teG1sIjsgdGhlbgotLSAgIEFDX01TR19DSEVDS0lORyhbZm9yIFhNTDo6UGFyc2VyXSkKLS0gICBpZiBgJElOVExUT09MX1BFUkwgLWUgInJlcXVpcmUgWE1MOjpQYXJzZXIiIDI+L2Rldi9udWxsYDsgdGhlbgotLSAgICAgICBBQ19NU0dfUkVTVUxUKFtva10pCi0tICAgZWxzZQotLSAgICAgICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCi0tICAgZmkKLS1maQotKwotKyMgRGlzYWJsZSB0aGlzIGNoZWNrIHNpbmNlIHdlIGtub3cgWE1MOjpQYXJzZXIgaXMgaW5zdGFsbGVkCi0rI2lmIHRlc3QgIngkMiIgIT0gInhuby14bWwiOyB0aGVuCi0rIyAgIEFDX01TR19DSEVDS0lORyhbZm9yIFhNTDo6UGFyc2VyXSkKLSsjICAgaWYgYCRJTlRMVE9PTF9QRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KLSsjICAgICAgIEFDX01TR19SRVNVTFQoW29rXSkKLSsjICAgZWxzZQotKyMgICAgICAgQUNfTVNHX0VSUk9SKFtYTUw6OlBhcnNlciBwZXJsIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQotKyMgICBmaQotKyNmaQotIAotICMgU3Vic3RpdHV0ZSBBTExfTElOR1VBUyBzbyB3ZSBjYW4gdXNlIGl0IGluIHBvL01ha2VmaWxlCi0gQUNfU1VCU1QoQUxMX0xJTkdVQVMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC91c2UtbmF0aXZlcGVybC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1ZmVkMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotT0UgaGFzIHBlcmwgYmluYXJ5IGFzICduYXRpdmVwZXJsJyBpbiBuYXRpdmUgc3lzcm9vdCBzbyB3ZSBsb29rIGZvciBpdAotaW4gb3JkZXIgdG8gYXZvaWQgaW50bHRvb2wgc2VhcmNoaW5nIGFuZCBmaW5kaW5nIHBlcmwgZnJvbSAvdXNyL2Jpbgotb24gYnVpbGQgc3lzdGVtIHdoaWNoIG1heSBub3QgaGF2ZSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBpdCBuZWVkcy4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KLUluZGV4OiBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBpbnRsdG9vbC0wLjQwLjYub3JpZy9pbnRsdG9vbC5tNAkyMDA5LTAyLTE0IDE0OjEyOjI4LjAwMDAwMDAwMCAtMDgwMAotKysrIGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAkyMDExLTA4LTA5IDA4OjA3OjE2LjQyNzM0Nzg0NiAtMDcwMAotQEAgLTExMCw3ICsxMTAsNyBAQAotICAgICBBQ19NU0dfRVJST1IoW0dOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKLSBmaQotIAotLUFDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBwZXJsKQotK0FDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBuYXRpdmVwZXJsKQotIGlmIHRlc3QgLXogIiRJTlRMVE9PTF9QRVJMIjsgdGhlbgotICAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQotIGZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCmluZGV4IGQ1MjBkNDMuLmE3ZWEzYjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCkBAIC0xLDE5ICsxLDM2IEBACi1yZXF1aXJlIGludGx0b29sLmluYworU1VNTUFSWSA9ICJVdGlsaXR5IHNjcmlwdHMgZm9yIGludGVybmF0aW9uYWxpemluZyBYTUwiCitTRUNUSU9OID0gImRldmVsIgogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgogCi1TUkNfVVJJICs9ICJmaWxlOi8vaW50bHRvb2wtbm93YXJuLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2ggXAotICAgICAgICAgICAke05BVElWRVBBVENIRVN9IFwKK1NSQ19VUkkgPSAiaHR0cDovL2xhdW5jaHBhZC5uZXQvJHtCUE59L3RydW5rLyR7UFZ9Lytkb3dubG9hZC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vaW50bHRvb2wtbm93YXJuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcGVybC1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub3BlcmxjaGVjay5wYXRjaCBcCiAgICAgICAgICAgICIKLQotIwotIyBBbGwgb2YgdGhlIGludGx0b29sIHNjcmlwdHMgaGF2ZSB0aGUgY29ycmVjdCBwYXRocyB0byBwZXJsIGFscmVhZHkKLSMgZW1iZWRkZWQgaW50byB0aGVtIGFuZCBjYW4gZmluZCBwZXJsIGZpbmUsIHNvIHdlIGFkZCB0aGUgcmVtb3ZlIHhtbC1jaGVjawotIyBpbiB0aGUgaW50bHRvb2wubTQgdmlhIHRoZSByZW1vdmUteG1sLWNoZWNrLnBhdGNoCi1OQVRJVkVQQVRDSEVTID0gImZpbGU6Ly9ub3BlcmxjaGVjay5wYXRjaCBcCi0gICAgICAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUteG1sLWNoZWNrLnBhdGNoIgotTkFUSVZFUEFUQ0hFU19jbGFzcy1uYXRpdmUgPSAiZmlsZTovL3VzZS1uYXRpdmVwZXJsLnBhdGNoIiAKLQogU1JDX1VSSVttZDVzdW1dID0gIjEyZTUxN2NhYzJiNTdhMDEyMWNkYTM1MTU3MGYxZTYzIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3Yzc0ZDk0MTk2YjE1M2I3NzRhYjlmODliMmZhNmM2YmE3OTM1MjQwNzAzN2M4YzE0ZDVhZWIzMzRlOTU5Y2QiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvaW50bHRvb2wvdHJ1bmsvIgorCitERVBFTkRTID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJnZXR0ZXh0LWRldiBsaWJ4bWwtcGFyc2VyLXBlcmwiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcGVybG5hdGl2ZQorCitleHBvcnQgUEVSTCA9ICIke2JpbmRpcn0vZW52IHBlcmwiCitQRVJMX2NsYXNzLW5hdGl2ZSA9ICIvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybCIKKworIyBnZXR0ZXh0IGlzIGFzc3VtZWQgdG8gZXhpc3Qgb24gdGhlIGhvc3QKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicGVybC1tb2R1bGVzIgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworRklMRVNfJHtQTn0tZGV2ID0gIiIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCisKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtZGVwcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1MaW5rLWFnYWluc3QtbGlibS13aGVuLW5lZWRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLUxpbmstYWdhaW5zdC1saWJtLXdoZW4tbmVlZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZTlkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1MaW5rLWFnYWluc3QtbGlibS13aGVuLW5lZWRlZC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDkzNTgyYWQ4NWVmNDhjMThhYzEyZjAwYTlhOWUxMjQ5ODliMWZjYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxMjo1MjoxOCArMDIwMAorU3ViamVjdDogW1BBVENIXSBMaW5rIGFnYWluc3QgbGlibSB3aGVuIG5lZWRlZAorCitJbiBjZXJ0YWluIEMgbGlicmFyaWVzIChlLmcgdUNsaWJjKSwgaXNuYW4oKSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgYXJlCitpbXBsZW1lbnRlZCBpbiBsaWJtLCBzbyBqc29uLWMgbmVlZHMgdG8gbGluayBhZ2FpbnN0IGl0LiBUaGlzIGNvbW1pdAordGhlcmVmb3JlIGFkZHMgYW4gQUNfVFJZX0xJTksoKSB0ZXN0IHRvIGNoZWNrIHdoZXRoZXIgYSBwcm9ncmFtCitjYWxsaW5nIGlzbmFuKCkgY2FuIGJlIHByb3Blcmx5IGxpbmtlZCB3aXRoIG5vIHNwZWNpYWwgZmxhZ3MuIElmIG5vdCwKK3dlIGFzc3VtZSBsaW5raW5nIGFnYWluc3QgbGlibSBpcyBuZWVkZWQuCisKK1RoZSBqc29uLWMucGMuaW4gZmlsZSBpcyBhbHNvIGFkanVzdGVkIHNvIHRoYXQgaW4gdGhlIGNhc2Ugb2Ygc3RhdGljCitsaW5raW5nIGFnYWluc3QganNvbi1jLCAtbG0gaXMgYWxzbyB1c2VkLgorCitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgY29uZmlndXJlLmFjIHwgNCArKysrCisganNvbi1jLnBjLmluIHwgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjNTBmODFiLi4zMGU3MTc0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MCw2ICs1MCwxMCBAQCBBQ19DSEVDS19ERUNMUyhbaXNpbmZdLCBbXSwgW10sIFtbI2luY2x1ZGUgPG1hdGguaD5dXSkKKyBBQ19DSEVDS19ERUNMUyhbX2lzbmFuXSwgW10sIFtdLCBbWyNpbmNsdWRlIDxmbG9hdC5oPl1dKQorIEFDX0NIRUNLX0RFQ0xTKFtfZmluaXRlXSwgW10sIFtdLCBbWyNpbmNsdWRlIDxmbG9hdC5oPl1dKQorIAorK2lmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfaXNuYW4iID0gInllcyIgOyB0aGVuCisrICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxtYXRoLmg+XSwgW2Zsb2F0IGYgPSAwLjA7IHJldHVybiBpc25hbihmKV0sIFtdLCBbTElCUz0iJExJQlMgLWxtIl0pCisrZmkKKysKKyAjY2hlY2sgaWYgLnNlY3Rpb24uZ251Lndhcm5pbmcgYWNjZXB0cyBsb25nIHN0cmluZ3MgKGZvciBfX3dhcm5fcmVmZXJlbmNlcykKKyBBQ19MQU5HX1BVU0goW0NdKQorIAorZGlmZiAtLWdpdCBhL2pzb24tYy5wYy5pbiBiL2pzb24tYy5wYy5pbgoraW5kZXggMDM3NzM5ZC4uMDViZmJjOCAxMDA2NDQKKy0tLSBhL2pzb24tYy5wYy5pbgorKysrIGIvanNvbi1jLnBjLmluCitAQCAtNiw2ICs2LDcgQEAgaW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKyBOYW1lOiBqc29uLWMKKyBEZXNjcmlwdGlvbjogSlNPTiBpbXBsZW1lbnRhdGlvbiBpbiBDCisgVmVyc2lvbjogQFZFUlNJT05ACistUmVxdWlyZXM6IAorK1JlcXVpcmVzOgorK0xpYnMucHJpdmF0ZTogQExJQlNACisgTGliczogIC1MJHtsaWJkaXJ9IC1sanNvbi1jCisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vanNvbi1jCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIKaW5kZXggMWE1YzM5NC4uYTE1NDU1YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIKQEAgLTYsNiArNiw3IEBACiAKIFNSQ19VUkkgPSAiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2pzb24tY19yZWxlYXNlcy9yZWxlYXNlcy8ke0JQfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1MaW5rLWFnYWluc3QtbGlibS13aGVuLW5lZWRlZC5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiM2NhNGJiYjg4MWRmYzQwMTdlODAyMWI1ZTBhOGM0OTEiCkBAIC0yNywzICsyOCw1IEBACiAgICAgIyBDbGVhbiB1cCBhdXRvY29uZiBjcnVmdCB0aGF0IHNob3VsZCBub3QgYmUgaW4gdGhlIHRhcmJhbGwKICAgICBybSAtZiAke1N9L2NvbmZpZy5zdGF0dXMKIH0KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMva2NvbmZpZy1mcm9udGVuZHMva2NvbmZpZy1mcm9udGVuZHNfMy4xMi4wLjAuYmIKaW5kZXggNDhhMmY5My4uOWI2NWE5OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiCkBAIC0xMSwxNCArMTEsMTQgQEAKIExJQ0VOU0UgPSAiR1BMLTIuMCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTliOGNmNjBmZjM5NzY3ZmYwNGI2NzFmY2E4MzAyNDA4IgogU0VDVElPTiA9ICJkZXZlbCIKLURFUEVORFMgKz0gIm5jdXJzZXMgZmxleCBiaXNvbiBncGVyZi1uYXRpdmUgcGtnY29uZmlnLW5hdGl2ZSIKK0RFUEVORFMgKz0gIm5jdXJzZXMgZmxleCBiaXNvbiBncGVyZi1uYXRpdmUiCiBSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCiBTUkNfVVJJID0gImh0dHA6Ly95bW9yaW4uaXMtYS1nZWVrLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0udGFyLnh6IgogCiBTUkNfVVJJW21kNXN1bV0gPSAiYjkzOTI4MGRjYzgzZjhmZWFiZDg3YTFkNWY5YjAwYzIiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWEyNjE1YTYyYzc0YmVhNmNlM2IzODQwMmYwMGM3NTEzODU4ZjMwN2Y2YmE3YWE5ZmRiZjBiYmMxMmJjZjQwNyIKIAotaW5oZXJpdCBhdXRvdG9vbHMKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwogZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewogCW1rZGlyIC1wIHNjcmlwdHMvLmF1dG9zdHVmZi9tNAogfQpAQCAtMzIsNyArMzIsNyBAQAogCiAjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQogIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCi1TT0xJQlMgPSAiLSR7QGQuZ2V0VmFyKCdQVicsMSlbOi0yXX0uc28iCitTT0xJQlMgPSAiLSR7QGQuZ2V0VmFyKCdQVicsIFRydWUpWzotMl19LnNvIgogRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJrY29uZmlnLXBhcnNlci5zbyIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1jcm9zc18yLjQuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiCmluZGV4IDAyMDRkMzQuLmIyNjgzMTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiCkBAIC0zNSwxMSArMzUsNiBAQAogCWluc3RhbGwgLWMgLW0gMDY0NCAke1N9L200LyoubTQgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2FjbG9jYWwvCiB9CiAKLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbGNyb3NzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLQotbGlidG9vbGNyb3NzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7Ci0Jc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQotCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke3RhcmdldF9kYXRhZGlyfSAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9kYXRhZGlyfQotfQorU1lTUk9PVF9ESVJTICs9ICIke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7dGFyZ2V0X2RhdGFkaXJ9IgogCiBTU1RBVEVfU0NBTl9GSUxFUyArPSAibGlidG9vbGl6ZSAqLWxpYnRvb2wiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbF8yLjQuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCmluZGV4IDM4NTFlYzcuLjg4NThmNmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCkBAIC01LDcgKzUsMTEgQEAKICMKICMgV2Ugd2FudCB0aGUgcmVzdWx0cyBvZiBsaWJ0b29sLWNyb3NzIHByZXNlcnZlZCAtIGRvbid0IHN0YWdlIGFueXRoaW5nIG91cnNlbHZlcy4KICMKLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbF9zeXNyb290X3ByZXByb2Nlc3MiCitTWVNST09UX0RJUlNfQkxBQ0tMSVNUICs9ICIgXAorICAgICR7YmluZGlyfSBcCisgICAgJHtkYXRhZGlyfS9hY2xvY2FsIFwKKyAgICAke2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4IFwKKyIKIAogZG9faW5zdGFsbF9hcHBlbmQgKCkgewogICAgICAgICBzZWQgLWUgJ3NALS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH1AQGcnIFwKQEAgLTE4LDEwICsyMiwzIEBACiAgICAgICAgICAgICAtZSAnc0BeXChwb3N0ZGVwX29iamVjdHM9IlwpLipAXDEiQCcgXAogICAgICAgICAgICAgLWkgJHtEfSR7YmluZGlyfS9saWJ0b29sCiB9Ci0KLWxpYnRvb2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKLQlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9LyoKLQlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsLyoKLQlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8qCi19Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYgppbmRleCBhOGE5MGZjLi5hNWRlYjJlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzLW5hdGl2ZV8wLjkuNjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiCkBAIC01LDcgKzUsNyBAQAogCiBERVBFTkRTID0gImdyb2ZmLW5hdGl2ZSBvcGVuamFkZS1uYXRpdmUiCiAKLVNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2wvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHNfJHtQVn0ub3JpZy50YXIuZ3ogXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9sLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3R4dF9kb2MucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV90ZXhfZG9jLnBhdGNoIFwKQEAgLTE0LDYgKzE0LDcgQEAKIFNSQ19VUklbbWQ1c3VtXSA9ICIxZDEzZDUwMDkxOGE3YTE0NWIwZWRjMmYxNmY2MWRkMSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI3MTAzZmFjZWUxOGEyZWE5NzE4NmNhNDU5ZDc0M2QyMmY3Zjg5YWQ0YjVjZDFkZmQxYzM0ZjgzZDZiZmQ0MTAxIgogCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2wvbGludXhkb2MtdG9vbHMvIgogaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIG5hdGl2ZQogCiBkb19jb25maWd1cmUgKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggOWIyZTk2NC4uMTAyZmU3OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0xMSw3ICsxMSw3IEBACiB8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCiAKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA1LzA0CiAKIEluZGV4OiBtYWtlLTMuODEvY29uZmlndXJlLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS00LjEvMDAwMS1tYWluLmMtbWFpbi1TVi00MzQzNC1IYW5kbGUtTlVMTC1yZXR1cm5zLWZyb20tdHR5bmFtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtNC4xLzAwMDEtbWFpbi5jLW1haW4tU1YtNDM0MzQtSGFuZGxlLU5VTEwtcmV0dXJucy1mcm9tLXR0eW5hbS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E1ZjRiYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS00LjEvMDAwMS1tYWluLmMtbWFpbi1TVi00MzQzNC1IYW5kbGUtTlVMTC1yZXR1cm5zLWZyb20tdHR5bmFtLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotRnJvbSAyOTJkYTZmNjg2N2I3NWE1YWY3ZGRiYjYzOWExZmVhZTAyMmY0MzhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUGF1bCBTbWl0aCA8cHNtaXRoQGdudS5vcmc+Ci1EYXRlOiBNb24sIDIwIE9jdCAyMDE0IDAxOjU0OjU2IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdICogbWFpbi5jIChtYWluKTogW1NWIDQzNDM0XSBIYW5kbGUgTlVMTCByZXR1cm5zIGZyb20KLSB0dHluYW1lKCkuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotRnJvbTogaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvbWFrZS5naXQvY29tbWl0Lz9pZD0yOTJkYTZmNjg2N2I3NWE1YWY3ZGRiYjYzOWExZmVhZTAyMmY0MzhmCi0KLS0tLQotIG1haW4uYyAgICB8IDE1ICsrKysrKysrKystLS0tLQotIG1ha2VpbnQuaCB8ICAzICsrLQotIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYwotaW5kZXggYjJkMTY5Yy4uMGNkYjhhOCAxMDA2NDQKLS0tLSBhL21haW4uYwotKysrIGIvbWFpbi5jCi1AQCAtMTQyOSwxMyArMTQyOSwxOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKQotICNpZmRlZiBIQVZFX0lTQVRUWQotICAgICBpZiAoaXNhdHR5IChmaWxlbm8gKHN0ZG91dCkpKQotICAgICAgIGlmICghIGxvb2t1cF92YXJpYWJsZSAoU1RSSU5HX1NJWkVfVFVQTEUgKCJNQUtFX1RFUk1PVVQiKSkpCi0tICAgICAgICBkZWZpbmVfdmFyaWFibGVfY25hbWUgKCJNQUtFX1RFUk1PVVQiLCBUVFlOQU1FIChmaWxlbm8gKHN0ZG91dCkpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvX2RlZmF1bHQsIDApLT5leHBvcnQgPSB2X2V4cG9ydDsKLS0KLSsgICAgICAgIHsKLSsgICAgICAgICAgY29uc3QgY2hhciAqdHR5ID0gVFRZTkFNRSAoZmlsZW5vIChzdGRvdXQpKTsKLSsgICAgICAgICAgZGVmaW5lX3ZhcmlhYmxlX2NuYW1lICgiTUFLRV9URVJNT1VUIiwgdHR5ID8gdHR5IDogREVGQVVMVF9UVFlOQU1FLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9fZGVmYXVsdCwgMCktPmV4cG9ydCA9IHZfZXhwb3J0OwotKyAgICAgICAgfQotICAgICBpZiAoaXNhdHR5IChmaWxlbm8gKHN0ZGVycikpKQotICAgICAgIGlmICghIGxvb2t1cF92YXJpYWJsZSAoU1RSSU5HX1NJWkVfVFVQTEUgKCJNQUtFX1RFUk1FUlIiKSkpCi0tICAgICAgICBkZWZpbmVfdmFyaWFibGVfY25hbWUgKCJNQUtFX1RFUk1FUlIiLCBUVFlOQU1FIChmaWxlbm8gKHN0ZGVycikpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvX2RlZmF1bHQsIDApLT5leHBvcnQgPSB2X2V4cG9ydDsKLSsgICAgICAgIHsKLSsgICAgICAgICAgY29uc3QgY2hhciAqdHR5ID0gVFRZTkFNRSAoZmlsZW5vIChzdGRlcnIpKTsKLSsgICAgICAgICAgZGVmaW5lX3ZhcmlhYmxlX2NuYW1lICgiTUFLRV9URVJNRVJSIiwgdHR5ID8gdHR5IDogREVGQVVMVF9UVFlOQU1FLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9fZGVmYXVsdCwgMCktPmV4cG9ydCA9IHZfZXhwb3J0OwotKyAgICAgICAgfQotICNlbmRpZgotIAotICAgLyogUmVzZXQgaW4gY2FzZSB0aGUgc3dpdGNoZXMgY2hhbmdlZCBvdXIgbWluZHMuICAqLwotZGlmZiAtLWdpdCBhL21ha2VpbnQuaCBiL21ha2VpbnQuaAotaW5kZXggNjIyMzkzNi4uMjAwOWY0MSAxMDA2NDQKLS0tLSBhL21ha2VpbnQuaAotKysrIGIvbWFrZWludC5oCi1AQCAtNDM2LDEwICs0MzYsMTEgQEAgZXh0ZXJuIHN0cnVjdCBybGltaXQgc3RhY2tfbGltaXQ7Ci0gLyogVGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBsYXJnZXN0IGludGVnZXIgYXMgYSBzdHJpbmcuICAqLwotICNkZWZpbmUgSU5UU1RSX0xFTkdUSCAgICAgICAgIENTVFJMRU4gKCIxODQ0Njc0NDA3MzcwOTU1MTYxNiIpCi0gCi0rI2RlZmluZSBERUZBVUxUX1RUWU5BTUUgInRydWUiCi0gI2lmZGVmIEhBVkVfVFRZTkFNRQotICMgZGVmaW5lIFRUWU5BTUUoX2YpIHR0eW5hbWUgKF9mKQotICNlbHNlCi0tIyBkZWZpbmUgVFRZTkFNRShfZikgInRydWUiCi0rIyBkZWZpbmUgVFRZTkFNRShfZikgREVGQVVMVF9UVFlOQU1FCi0gI2VuZGlmCi0gCi0gDAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZmUwYjUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsb2IvQ09QWUlORy5MSUI7bWQ1PTRhNzcwYjY3ZTZiZTBmNjBkYTI0NGJlYjJkZTBmY2U0IgotcmVxdWlyZSBtYWtlLmluYwotCi1TUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1tYWluLmMtbWFpbi1TVi00MzQzNC1IYW5kbGUtTlVMTC1yZXR1cm5zLWZyb20tdHR5bmFtLnBhdGNoIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1ndWlsZSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjU3YTdhMjI0YTgyMmY5NDc4OWE1ODdjY2JjZWRmZjY5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiYzc2MTMzODk2NTBlZTZhMjQ1NTRiNTI1NzJhMjcyZjczNTYxNjRmZDJjNDEzMmIwYmNmMTMxMjNlNGZjYTUiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlNmEwYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMi4xLmJiCkBAIC0wLDAgKzEsMTIgQEAKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbG9iL0NPUFlJTkcuTElCO21kNT00YTc3MGI2N2U2YmUwZjYwZGEyNDRiZWIyZGUwZmNlNCIKK3JlcXVpcmUgbWFrZS5pbmMKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtZ3VpbGUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNWIwMTI2MTdlN2M0NGMwZWQ0ODI3MjE2Mjk1NzdhYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNmUyNjJiZjM2MDFiNDJkMmIxZTRlZjgzMTAwMjllMWRjZjIwMDgzYzU0NDZiNGI3YWE2NzA4MWZkZmZjNTg5IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMKaW5kZXggNzcxZjMzZS4uY2JhNzY4MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9tYWtlZGV2cy5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBtb2RlID0gMDc1NSwgdWlkID0gMCwgZ2lkID0gMCwgbWFqb3IgPSAwLCBtaW5vciA9IDA7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IDAsIGluY3JlbWVudCA9IDEsIGNvdW50ID0gMDsKIAotCWlmICgwID4gc3NjYW5mKGxpbmUsICIlNDBzICVjICVsbyAlNDBzICU0MHMgJWx1ICVsdSAlbHUgJWx1ICVsdSIsIHBhdGgsCisJaWYgKDAgPiBzc2NhbmYobGluZSwgIiU0MDk1cyAlYyAlbG8gJTQwcyAlNDBzICVsdSAlbHUgJWx1ICVsdSAlbHUiLCBwYXRoLAogCQkgICAgJnR5cGUsICZtb2RlLCB1c3JfYnVmLCBncnBfYnVmLCAmbWFqb3IsICZtaW5vciwgJnN0YXJ0LAogCQkgICAgJmluY3JlbWVudCwgJmNvdW50KSkKIAl7CkBAIC01MTAsNyArNTEwLDcgQEAKIAl1bWFzayAoMCk7CiAKIAlpZiAoYXJnYz09MSkgewotCQlmcHJpbnRmKHN0ZGVyciwgaGVscHRleHQpOworCQlmcHV0cyggaGVscHRleHQgLCBzdGRlcnIgKTsKIAkJZXhpdCgxKTsKIAl9CiAKQEAgLTUyNSw3ICs1MjUsNyBAQAogCQkJCWVycm9yX21zZ19hbmRfZGllKCIlczogbm90IGEgcHJvcGVyIGRldmljZSB0YWJsZSBmaWxlIiwgb3B0YXJnKTsKIAkJCWJyZWFrOwogCQljYXNlICdoJzoKLQkJCXByaW50ZihoZWxwdGV4dCk7CisJCQlwdXRzKGhlbHB0ZXh0KTsKIAkJCWV4aXQoMCk7CiAJCWNhc2UgJ3InOgogCQljYXNlICdkJzoJCQkJLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBta2ZzLmpmZnMsIGdlbmV4dDJmcywgZXRjLi4uICovCkBAIC01NTMsMTMgKzU1MywxMyBAQAogCQkJcHJpbnRmKCIlczogJXNcbiIsIGFwcF9uYW1lLCBWRVJTSU9OKTsKIAkJCWV4aXQoMCk7CiAJCWRlZmF1bHQ6Ci0JCQlmcHJpbnRmKHN0ZGVyciwgaGVscHRleHQpOworCQkJZnB1dHMoaGVscHRleHQsc3RkZXJyKTsKIAkJCWV4aXQoMSk7CiAJCX0KIAl9CiAKIAlpZiAoYXJndltvcHRpbmRdICE9IE5VTEwpIHsKLQkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJZnB1dHMoaGVscHRleHQsc3RkZXJyKTsKIAkJZXhpdCgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9jcm9zcy1jb21waWxlLnBhdGNoCmluZGV4IDc2OTI3MDkuLmExNjJlYjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMSwxMyArMSw0MyBAQAotbWFrZSB0aGUgdG9vbCB0byBiZSBjcm9zcyBjb21waWxhYmxlLgorRnJvbSBkYzI3MTIxMTlkNjgzMmUyNGE5YjdiZWQ5ZWQ0Y2U1YWUwM2NlMGEzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTQgSnVsIDIwMTIgMTQ6MTQ6MDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWtlbGZpbWFnZTogRml4IGNyb3NzIGJ1aWxkCisKK01ha2UgdGhlIHRvb2wgdG8gYmUgY3Jvc3MgY29tcGlsYWJsZSwgYnkgc2VwYXJhdGluZyB0aGUgdmFyaWFibGVzIGZvciBidWlsZAordG9vbHMgZnJvbSB0aG9zZSBmb3IgdGhlIHRhcmdldC4gQWxzbyBtb2RpZmllZCB0byBvYmV5IExERkxBR1MuCiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAotSW5kZXg6IG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbWtlbGZJbWFnZS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAotKysrIG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCTIwMTItMDctMTQgMTQ6MTA6NDcuODAwOTE2MDgzIC0wNzAwCi1AQCAtNzAsNiArNzAsOSBAQAorLS0tCisgTWFrZWZpbGUuY29uZi5pbiAgICB8IDMgKysrCisgY29uZmlndXJlLmFjICAgICAgICB8IDcgKysrKystLQorIGxpbnV4LWkzODYvTWFrZWZpbGUgfCAyICstCisgbGludXgtaWE2NC9NYWtlZmlsZSB8IDIgKy0KKyBtYWluL01ha2VmaWxlICAgICAgIHwgNCArKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuY29uZi5pbiBiL01ha2VmaWxlLmNvbmYuaW4KK2luZGV4IDQ2NDVlNDQuLmRjYjZjZjIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5jb25mLmluCisrKysgYi9NYWtlZmlsZS5jb25mLmluCitAQCAtMTcsNiArMTcsOSBAQCBERUZTPUBERUZTQAorIExJQlM9QExJQlNACisgSE9TVF9DQz1ASE9TVF9DQ0AKKyBIT1NUX0NGTEFHUz1ASE9TVF9DRkxBR1NAICAkKERFRlMpCisrQ0M9QENDQAorK0NGTEFHUz1AQ0ZMQUdTQCAkKERFRlMpCisrTERGTEFHUz1ATERGTEFHU0AKKworIEkzODZfQ0MgICAgID1ASTM4Nl9DQ0AKKyBJMzg2X0xEICAgICA9QEkzODZfTERACitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA2NTJiOTUyLi4wZjJhYzcyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03MCw2ICs3MCw5IEBAIGlmIHRlc3QgIndpdGhfZGVmYXVsdCIgIT0gbm8gOyB0aGVuCiAgCQlBQ19NU0dfRVJST1IoW2NjIG5vdCBmb3VuZF0pCiAgCWZpCiAgCWV2YWwgIiR7d2l0aF9kZWZhdWx0fV9DQz0nJENDJyIKQEAgLTE3LDU1ICs0Nyw2MCBAQAogIAlBQ19QUk9HX0NQUAogIAlpZiB0ZXN0ICIkQ1BQIiA9IG5vOyB0aGVuCiAgCQlBQ19NU0dfRVJST1IoW2NwcCBub3QgZm91bmRdKQotQEAgLTE3Miw3ICsxNzUsNiBAQAorQEAgLTE3Miw4ICsxNzUsOCBAQCBmaQogIAogIGRubCAtLS1PdXRwdXQgdmFyaWFibGVzLi4uCiAgCiAtSE9TVF9DQz0kQ0MKLSBIT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTIC1PMiAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSIKKy1IT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTIC1PMiAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSIKKytDRkxBR1M9IiR7Q0ZMQUdTOi0tTzJ9IC1XYWxsIFwkKENQUEZMQUdTKSIKKytIT1NUX0NGTEFHUz0iJHtIT1NUX0NGTEFHUzotLU8yfSAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSIKICAKICBkbmwgVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZXNlIGFwcHJvcHJpYXRlbHkgZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYwotSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaTM4Ni9NYWtlZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCi0rKysgbWtlbGZJbWFnZS9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCi1AQCAtNCw3ICs0LDcgQEAKKyBJMzg2X0NGTEFHUz0iJEkzODZfQ0ZMQUdTIC1PcyAtZmZyZWVzdGFuZGluZyAtV2FsbCAtVyAtV25vLWZvcm1hdCBcJChJMzg2X0NQUEZMQUdTKSIKK2RpZmYgLS1naXQgYS9saW51eC1pMzg2L01ha2VmaWxlIGIvbGludXgtaTM4Ni9NYWtlZmlsZQoraW5kZXggNTE1MzFkNi4uN2U4YWEzYyAxMDA2NDQKKy0tLSBhL2xpbnV4LWkzODYvTWFrZWZpbGUKKysrKyBiL2xpbnV4LWkzODYvTWFrZWZpbGUKK0BAIC00LDcgKzQsNyBAQCBMSTM4Nl9ERVA9TWFrZWZpbGUgTWFrZWZpbGUuY29uZiAkKExJMzg2X0RJUikvTWFrZWZpbGUKICAKICAkKExJMzg2X09CSikvbWtlbGYtbGludXgtaTM4Ni5vOiAkKExJMzg2X0RJUikvbWtlbGYtbGludXgtaTM4Ni5jICQoTEkzODZfRElSKS9jb252ZXJ0LmJpbi5jICQoTEkzODZfREVQKQogIAkkKE1LRElSKSAtcCAkKEBEKQogLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACi0rCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAogIAogIAogIGlmZGVmIEkzODZfQ0MKLUluZGV4OiBta2VsZkltYWdlL2xpbnV4LWlhNjQvTWFrZWZpbGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBta2VsZkltYWdlLm9yaWcvbGludXgtaWE2NC9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAotKysrIG1rZWxmSW1hZ2UvbGludXgtaWE2NC9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAotQEAgLTQsNyArNCw3IEBACitkaWZmIC0tZ2l0IGEvbGludXgtaWE2NC9NYWtlZmlsZSBiL2xpbnV4LWlhNjQvTWFrZWZpbGUKK2luZGV4IDM4ZjVkOGMuLjVkZjg4NzAgMTAwNjQ0CistLS0gYS9saW51eC1pYTY0L01ha2VmaWxlCisrKysgYi9saW51eC1pYTY0L01ha2VmaWxlCitAQCAtNCw3ICs0LDcgQEAgTElBNjRfREVQPU1ha2VmaWxlIE1ha2VmaWxlLmNvbmYgJChMSUE2NF9ESVIpL01ha2VmaWxlCiAgCiAgJChMSUE2NF9PQkopL21rZWxmLWxpbnV4LWlhNjQubzogJChMSUE2NF9ESVIpL21rZWxmLWxpbnV4LWlhNjQuYyAkKExJQTY0X0RJUikvY29udmVydC5iaW4uYyAkKExJQTY0X0RFUCkKICAJJChNS0RJUikgLXAgJChARCkKIC0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAotKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorKwkkKENDKSAkKENGTEFHUykgLWMgLWcgJDwgLW8gJEAKICAKICBpZmRlZiBJQTY0X0NDCiAgCi1JbmRleDogbWtlbGZJbWFnZS9tYWluL01ha2VmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbWtlbGZJbWFnZS5vcmlnL21haW4vTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OC45NjQ4OTg2NjcgLTA3MDAKLSsrKyBta2VsZkltYWdlL21haW4vTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OS4wMzI4OTg2NzEgLTA3MDAKLUBAIC00LDExICs0LDExIEBACitkaWZmIC0tZ2l0IGEvbWFpbi9NYWtlZmlsZSBiL21haW4vTWFrZWZpbGUKK2luZGV4IDQwM2IwYTQuLmNkNTM2MTMgMTAwNjQ0CistLS0gYS9tYWluL01ha2VmaWxlCisrKysgYi9tYWluL01ha2VmaWxlCitAQCAtNCwxMSArNCwxMSBAQCBNS0VMRl9PQkpTPSQoT0JKRElSKS9tYWluL21rZWxmSW1hZ2UubyBcCiAgCiAgJChPQkpESVIpL3NiaW4vbWtlbGZJbWFnZTogJChNS0VMRl9PQkpTKSAkKERFUFMpCiAgCSQoTUtESVIpIC1wICQoQEQpCiAtCSQoSE9TVF9DQykgJChIT1NUX0NGTEFHUykgJChNS0VMRl9PQkpTKSAtbyAkQCAkKExJQlMpCi0rCSQoQ0MpICQoSE9TVF9DRkxBR1MpICQoTUtFTEZfT0JKUykgLW8gJEAgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkKE1LRUxGX09CSlMpIC1vICRAICQoTElCUykKICAKICAkKE9CSkRJUikvbWFpbi9ta2VsZkltYWdlLm86IG1haW4vbWtlbGZJbWFnZS5jIGluY2x1ZGUvbWtlbGZJbWFnZS5oICQoREVQUykKICAJJChNS0RJUikgLXAgJChARCkKIC0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAotKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorKwkkKENDKSAkKENGTEFHUykgLWMgJDwgLW8gJEAKICAKICAkKE9CSkRJUikvbWFuL21hbjgvbWtlbGZJbWFnZS44OiBtYWluL21rZWxmSW1hZ2UubWFuCiAgCSQoTUtESVIpIC1wICQoQEQpCistLQorMi44LjAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgppbmRleCA5MjQzNWNkLi4yYmNjOGQ3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiCkBAIC0xMyw4ICsxMyw4IEBACiBERVBFTkRTICs9ICJ6bGliIgogCiBTUkNfVVJJID0gImdpdDovL3Jldmlldy5jb3JlYm9vdC5vcmcvcC9jb3JlYm9vdDtwcm90b2NvbD1odHRwIFwKLSAgICAgICAgICAgZmlsZTovL2Nyb3NzLWNvbXBpbGUucGF0Y2ggICBcCi0gICAgICAgICAgIgorICAgICAgICAgICBmaWxlOi8vY3Jvc3MtY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgICIKIFNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgXAogICAgICAgICAgICBmaWxlOi8vZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaCAgIFwKICIKQEAgLTI0LDggKzI0LDExIEBACiBTID0gIiR7V09SS0RJUn0vZ2l0L3V0aWwvbWtlbGZJbWFnZSIKIAogQ0ZMQUdTICs9ICItZm5vLXN0YWNrLXByb3RlY3RvciIKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJIT1NUX0NDPScke0JVSUxEX0NDfSciCi1FWFRSQV9PRU1BS0UgKz0gIkhPU1RfQ1BQRkxBR1M9JyR7QlVJTERfQ1BQRkxBR1N9JyIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJcCisgICAgSE9TVF9DQz0nJHtCVUlMRF9DQ30nIFwKKyAgICBIT1NUX0NGTEFHUz0nJHtCVUlMRF9DRkxBR1N9JyBcCisgICAgSE9TVF9DUFBGTEFHUz0nJHtCVUlMRF9DUFBGTEFHU30nIFwKKyIKIAogaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZmVjMjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIlNoYXJlZCBsaWJyYXJ5IG9wdGltaXNhdGlvbiB0b29sIgotREVTQ1JJUFRJT04gPSAibWtsaWJzIHByb2R1Y2VzIGN1dC1kb3duIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCBjb250YWluIG9ubHkgdGhlIHJvdXRpbmVzIHJlcXVpcmVkIGJ5IGEgcGFydGljdWxhciBzZXQgb2YgZXhlY3V0YWJsZXMuIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L21rbGlicyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTk4ZDMxMDM3YjEzZDg5NmUzMzg5MDczOGVmMDFhZjY0IgotREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL20vbWtsaWJzLyR7QlBOfV8ke1BWfS50YXIueHogXAotCWZpbGU6Ly9hY19pbml0X2ZpeC5wYXRjaFwKLQlmaWxlOi8vZml4X1NUVF9HTlVfSUZVTkMucGF0Y2hcCi0JZmlsZTovL3N5c3Jvb3RlZC1sZHNvLnBhdGNoIFwKLQlmaWxlOi8vYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2ggXAotCWZpbGU6Ly9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoIFwKLQlmaWxlOi8vZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZTFkYWZlNWY5NjJjYWE5ZGM1ZjI2NTFjMDcyMzgxMmEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWRiMjRhZTc3OWQyMWNjZmVkNDlmMjJlNDlhMmI3ZWU0M2VjMGU5MTk3YmMyMDZkODFjZDAyZjk2ZTkxZTEyNSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBuYXRpdmUgcHl0aG9ubmF0aXZlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzFiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlNoYXJlZCBsaWJyYXJ5IG9wdGltaXNhdGlvbiB0b29sIgorREVTQ1JJUFRJT04gPSAibWtsaWJzIHByb2R1Y2VzIGN1dC1kb3duIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCBjb250YWluIG9ubHkgdGhlIHJvdXRpbmVzIHJlcXVpcmVkIGJ5IGEgcGFydGljdWxhciBzZXQgb2YgZXhlY3V0YWJsZXMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L21rbGlicyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTk4ZDMxMDM3YjEzZDg5NmUzMzg5MDczOGVmMDFhZjY0IgorREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwMjA3VDIyMTYyNVovcG9vbC9tYWluL20vJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAorCWZpbGU6Ly9hY19pbml0X2ZpeC5wYXRjaFwKKwlmaWxlOi8vZml4X1NUVF9HTlVfSUZVTkMucGF0Y2hcCisJZmlsZTovL3N5c3Jvb3RlZC1sZHNvLnBhdGNoIFwKKwlmaWxlOi8vYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2ggXAorCWZpbGU6Ly9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoIFwKKwlmaWxlOi8vZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmIyOTc5ODc2YTYxMTcxN2RmM2Q0OWU3ZjljZjI5MWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDU4YzczNDlmOGVjOGEwM2I1MjljNTQ2YTk1Y2Q2NDI2NzQxYmQ4MTlmMWUxMjExZjQ5OTI3M2ViNGJmNWQ4OSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBuYXRpdmUgcHl0aG9ubmF0aXZlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgppbmRleCA2NGI4OTEwLi4wYThkYTE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIKQEAgLTEsMTAgKzEsMTAgQEAKIFNVTU1BUlkgPSAiVXNlcnNwYWNlIHRvb2xzIGZvciBNTUMvU0QgZGV2aWNlcyIKIEhPTUVQQUdFID0gImh0dHA6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvY2piL21tYy11dGlscy5naXQvIgogTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21tYy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWQ3NzQ3ZmM4N2YxZWIyMmI5NDZlZjgxOTk2OTUwM2YwIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbW1jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZmFlMzI3OTJlMjBmNGQyN2FkZTFjNWE3NjJkMTZiN2QiCiAKIFNSQ0JSQU5DSCA/PSAibWFzdGVyIgotU1JDUkVWID0gIjQ0Zjk0YjkyNTg5NDU3N2Y5ZmZjZjJjNDE4ZGQwMTNhNWU1ODI2NDgiCitTUkNSRVYgPSAiYmI3NzlhY2ZjMzg1ZDEzNWIzMmE2OTk4YzFkMWZjZWVmMDQ5MTQwMCIKIAogUFYgPSAiMC4xIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgppbmRleCBjZDlhZTA2Li44YTNhZmFmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIKQEAgLTM5LDcgKzM5LDcgQEAKIEZJTEVTX210ZC11dGlscy11YmlmcyA9ICIke3NiaW5kaXJ9L21rZnMudWJpZnMgJHtzYmluZGlyfS91YmkqIgogRklMRVNfbXRkLXV0aWxzLW1pc2MgPSAiJHtzYmluZGlyfS9uZnRsKiAke3NiaW5kaXJ9L2Z0bCogJHtzYmluZGlyfS9yZmQqICR7c2JpbmRpcn0vZG9jKiAke3NiaW5kaXJ9L3NlcnZlX2ltYWdlICR7c2JpbmRpcn0vcmVjdl9pbWFnZSIKIAotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCiAKICMgZ2l0Ly5jb21wci5jLmRlcDo0Njogd2FybmluZzogTlVMIGNoYXJhY3RlciBzZWVuOyByZXN0IG9mIGxpbmUgaWdub3JlZAogIyBnaXQvLmNvbXByLmMuZGVwOjQ3OiAqKiogbWlzc2luZyBzZXBhcmF0b3IuICBTdG9wLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzLzAwMDEtQ29udGludWUtZXZlbi1pZi1mcy1zaXplLWlzLW5vdC1kaXZpc2libGUtYnktc2VjdG9ycy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy8wMDAxLUNvbnRpbnVlLWV2ZW4taWYtZnMtc2l6ZS1pcy1ub3QtZGl2aXNpYmxlLWJ5LXNlY3RvcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4ZjgzNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy8wMDAxLUNvbnRpbnVlLWV2ZW4taWYtZnMtc2l6ZS1pcy1ub3QtZGl2aXNpYmxlLWJ5LXNlY3RvcnMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSA1Y2M4ZDFmOTZhYjZkMzQ1OWUxMzYzMWQ4MzU2Zjg3MzgxNTYyMzUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgMiBKdW4gMjAxNiAwOTo0OTo0NCArMDMwMAorU3ViamVjdDogW1BBVENIXSBDb250aW51ZSBldmVuIGlmIGZzIHNpemUgaXMgbm90IGRpdmlzaWJsZSBieQorIHNlY3RvcnMtcGVyLXRyYWNrCisKK0ZpbGVzeXN0ZW0gd2l0aCBhIHNpemUgdGhhdCBpcyBub3QgZGl2aXNpYmxlIGJ5IHNlY3RvcnMtcGVyLXRyYWNrIGlzCitub3QgYnJva2VuIG9yIGludmFsaWQ6IGl0IG1pZ2h0IGJlIHVub3B0aW1pemVkIG9uIG1lZGlhIHdoZXJlCitoZWFkcyBhbmQgY3lsaW5kZXJzIGFjdHVhbGx5IG1hdHRlciBidXQgdGhhdCBzaG91bGQgYmUgaXQuCisKK1ByZXNlcnZlIHRoZSB3YXJuaW5nIGJ1dCBtYWtlIG10b29scyBjb250aW51ZSBldmVuIGlmIGZzIHNpemUgaXMgbm90CitkaXZpc2libGUgYnkgc2VjdG9ycy1wZXItdHJhY2suCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtpbmZvLW10b29sc0BnbnUub3JnXQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGluaXQuYyB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pbml0LmMgYi9pbml0LmMKK2luZGV4IGM5MTUyZTAuLjRlMTZhMDEgMTAwNjQ0CistLS0gYS9pbml0LmMKKysrKyBiL2luaXQuYworQEAgLTMzOCw3ICszMzgsNiBAQCBTdHJlYW1fdCAqZnNfaW5pdChjaGFyIGRyaXZlLCBpbnQgbW9kZSwgaW50ICppc1JvcCkKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJCSJBZGQgbXRvb2xzX3NraXBfY2hlY2s9MSB0byB5b3VyIC5tdG9vbHNyYyBmaWxlICIKKyAJCQkidG8gc2tpcCB0aGlzIHRlc3RcbiIpOworLQkJZXhpdCgxKTsKKyAJfQorIAorIAkvKiBmdWxsIGN5bGluZGVyIGJ1ZmZlcmluZyAqLworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIKaW5kZXggMzQyMzkxNy4uMjkwNGZmNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzMuOS45LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYgpAQCAtMzMsNyArMzMsOSBAQAogICAgICAgICAgICBmaWxlOi8vbXRvb2xzLW1ha2VpbmZvLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL210b29scy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9uby14MTEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LWJyb2tlbi1sei5wYXRjaCIKKyAgICAgICAgICAgZmlsZTovL2ZpeC1icm9rZW4tbHoucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Db250aW51ZS1ldmVuLWlmLWZzLXNpemUtaXMtbm90LWRpdmlzaWJsZS1ieS1zZWN0b3JzLnBhdGNoIFwKKyAgICAgICAgICAgIgogCiBpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiCmluZGV4IGVmZGU1NDcuLmIwZWZjOWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgpAQCAtMjksNyArMjksOSBAQAogCiBTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbXRvb2xzL210b29scy0ke1BWfS50YXIuYnoyIFwKICAgICAgICAgICAgZmlsZTovL210b29scy1tYWtlaW5mby5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9uby14MTEuZ3BsdjMucGF0Y2giCisgICAgICAgICAgIGZpbGU6Ly9uby14MTEuZ3BsdjMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Db250aW51ZS1ldmVuLWlmLWZzLXNpemUtaXMtbm90LWRpdmlzaWJsZS1ieS1zZWN0b3JzLnBhdGNoIFwKKyAgICAgICAgICAgIgogCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDcyNGU2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1TVU1NQVJZID0gIkdlbmVyYWwtcHVycG9zZSB4ODYgYXNzZW1ibGVyIgotU0VDVElPTiA9ICJkZXZlbCIKLUxJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OTA5MDQ0ODZmOGZiZjE4NjFjZjQyNzUyZTFhMzllZmUiCi1DT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2KS4qLShsaW51eHxmcmVlYnNkLiopJwotCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5uYXNtLnVzL3B1Yi9uYXNtL3JlbGVhc2VidWlsZHMvJHtQVn0vbmFzbS0ke1BWfS50YXIuYnoyICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjdhYWU1Y2I4ZTAzZmFjNDgwMjljODJhNzQ3MGFiMDY2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkYTNhMDI5MWEwYmRjMDYzMDViN2JhMTk0ZjFlMmMyYjU1YWU2ZjExMjEwYjRhZjQzNzI5ODY4MTQ5ZDU0NDUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAotCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0JaWYgWyAtZiAke1N9L2FjbG9jYWwubTQgXSAmJiBbICEgLWYgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgotCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKLQlmaQotfQotCi1kb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQotCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW4xCi0KLQlvZV9ydW5tYWtlICdJTlNUQUxMUk9PVD0ke0R9JyBpbnN0YWxsCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1ERVBFTkRTID0gImdyb2ZmLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTIuMDIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjEyLjAyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNGI2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjEyLjAyLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiR2VuZXJhbC1wdXJwb3NlIHg4NiBhc3NlbWJsZXIiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT05MDkwNDQ4NmY4ZmJmMTg2MWNmNDI3NTJlMWEzOWVmZSIKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5uYXNtLnVzL3B1Yi9uYXNtL3JlbGVhc2VidWlsZHMvJHtQVn0vbmFzbS0ke1BWfS50YXIuYnoyICIKKworU1JDX1VSSVttZDVzdW1dID0gImQxNTg0M2MzZmI3ZGIzOWFmODA1NzFlZTI3ZWM2ZmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYjA4OTFjNjc4YzA2NTQ0NmNhNTliY2VlNjQ3MTlkMDA5NmQ1NGQ2ODg2ZTZlNDcyYWVlZTJlMTcwYWUzMjQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAtZiAke1N9L2FjbG9jYWwubTQgXSAmJiBbICEgLWYgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW4xCisKKwlvZV9ydW5tYWtlICdJTlNUQUxMUk9PVD0ke0R9JyBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitERVBFTkRTID0gImdyb2ZmLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtbmF0aXZlXzEuMy4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKaW5kZXggYmMyNTAwOC4uOGIxNWIwYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKQEAgLTQ0LDEwICs0NCwxMCBAQAogb2VfcnVuY29uZlt2YXJkZXBzZXhjbHVkZV0gKz0gIkNPTkZJR1VSRU9QVFMiCiAKIENGTEFHUyA9KyAiLUkke1N9L2luY2x1ZGUiCitDWFhGTEFHUyArPSAiLWZuby10cmVlLWRzZSIKIAogU1NUQVRFUE9TVElOU1RGVU5DUyArPSAib3BlbmphZGVfc3N0YXRlX3Bvc3RpbnN0IgogU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJvcGVuamFkZV9zeXNyb290X3ByZXByb2Nlc3MiCi1DTEVBTkZVTkNTICs9ICJvcGVuamFkZV9zc3RhdGVfY2xlYW4iCiAKICMgY29uZmlndXJlLmluIG5lZWRzIHRvIGJlIHJlbG9hY3RlZCB0byB0cmlnZ2VyIHJlYXV0b2NvbmYKIGRvX2V4dHJhdW5wYWNrICgpIHsKQEAgLTEwMyw2ICsxMDMsMTUgQEAKIAkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUgXAogCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAogCQkJJHtzeXNjb25mZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9LmNhdAorCQljYXQgPDwgRU9GID4gJHtTU1RBVEVfSU5TVF9QT1NUUk19CisjIS9iaW4vc2gKKyMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorZm9yIGYgaW4gXCRmaWxlczsgZG8KKwlbICEgLWYgXCRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9vcGVuamFkZS0ke1BWfS5jYXQvZCcgXCRmCitkb25lCitFT0YKIAlmaQogfQogCkBAIC0xMTAsMTIgKzExOSwzIEBACiAgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LwogICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUKIH0KLQotb3BlbmphZGVfc3N0YXRlX2NsZWFuICgpIHsKLQkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQotCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCi0JZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgotCWZvciBmIGluICRmaWxlczsgZG8KLQkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9vcGVuamFkZS0ke1BWfS5jYXQvZCcgJGYKLQlkb25lCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy8wMDAxLW9wa2ctYnVpbGQtcmUtZG8tZmluZC1scy1jb2RlLXRvLW5vdC1mYWlsLW9uLWZpbGVuYW0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy8wMDAxLW9wa2ctYnVpbGQtcmUtZG8tZmluZC1scy1jb2RlLXRvLW5vdC1mYWlsLW9uLWZpbGVuYW0ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjYmI1NWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvMDAwMS1vcGtnLWJ1aWxkLXJlLWRvLWZpbmQtbHMtY29kZS10by1ub3QtZmFpbC1vbi1maWxlbmFtLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotRnJvbSA4ZTQyNDI5NmNlMmFmNGE1YTczOTJjMzhhMzFmODcyM2Y5YjlmYmRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KLURhdGU6IFRodSwgNyBBcHIgMjAxNiAyMDo0MzoxMyAtMDQwMAotU3ViamVjdDogW1BBVENIXSBvcGtnLWJ1aWxkOiByZS1kbyBmaW5kL2xzIGNvZGUgdG8gbm90IGZhaWwgb24gZmlsZW5hbWVzIHdpdGgKLSBzcGFjZXMKLQotU2lnbmVkLW9mZi1ieTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KLS0tLQotIG9wa2ctYnVpbGQgfCA5ICsrKystLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9vcGtnLWJ1aWxkIGIvb3BrZy1idWlsZAotaW5kZXggYTljY2FkMi4uMDczMDViMiAxMDA3NTUKLS0tLSBhL29wa2ctYnVpbGQKLSsrKyBiL29wa2ctYnVpbGQKLUBAIC02LDcgKzYsNiBAQAotICMgMjAwMy0wNC0yNSByZWFAc3IudW5oLmVkdQotICMgICBVcGRhdGVkIHRvIHdvcmsgb24gRmFtaWxpYXIgUHJlMC43cmMxLCB3aXRoIGJ1c3lib3ggdGFyLgotICMgICBOb3RlIGl0IFJlcXVpcmVzOiBiaW51dGlscy1hciAoc2luY2UgdGhlIGJ1c3lib3ggYXIgY2FuJ3QgY3JlYXRlKQotLSMgICBGb3IgVUlEIGRlYnVnZ2luZyBpdCBuZWVkcyBhIGJldHRlciAiZmluZCIuCi0gc2V0IC1lCi0gCi0gdmVyc2lvbj0xLjAKLUBAIC00NywxMiArNDYsMTIgQEAgcGtnX2FwcGVhcnNfc2FuZSgpIHsKLSAKLSAJUEtHX0VSUk9SPTAKLSAKLS0JdGlsZGVfZmlsZXM9YGZpbmQgLiAtbmFtZSAnKn4nYAotKwl0aWxkZV9maWxlcz1gZmluZCAuIC1uYW1lICcqficgLWxzIC1wcmludGYgJ1xcXG4nYAotIAlpZiBbIC1uICIkdGlsZGVfZmlsZXMiIF07IHRoZW4KLSAJICAgIGlmIFsgIiRub2NsZWFuIiA9ICIxIiBdOyB0aGVuCi0gCQllY2hvICIqKiogV2FybmluZzogVGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIG5hbWVzIGVuZGluZyBpbiAnficuCi0gWW91IHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoZW06ICIgPiYyCi0tCQlscyAtbGQgJHRpbGRlX2ZpbGVzCi0rCQllY2hvIC1lICR0aWxkZV9maWxlcwotIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0gCQkJZWNobyAiKioqIEVycm9yOiBGYWlsIHRvIGxpc3QgZmlsZXMgaGF2ZSBuYW1lcyBlbmRpbmcgaW4gJ34nLiIKLSAJCQlleGl0IDEKLUBAIC02NCwxMiArNjMsMTIgQEAgWW91IHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoZW06ICIgPiYyCi0gCSAgICBmaQotIAlmaQotIAotLQlsYXJnZV91aWRfZmlsZXM9YGZpbmQgLiAtdWlkICs5OSB8fCB0cnVlYAotKwlsYXJnZV91aWRfZmlsZXM9YGZpbmQgLiAtdWlkICs5OSAtbHMgLXByaW50ZiAnXFxcbicgfHwgdHJ1ZWAKLSAKLSAJaWYgWyAiJG9nYXJncyIgPSAiIiBdICAmJiBbIC1uICIkbGFyZ2VfdWlkX2ZpbGVzIiBdOyB0aGVuCi0gCQllY2hvICIqKiogV2FybmluZzogVGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGEgVUlEIGdyZWF0ZXIgdGhhbiA5OS4KLSBZb3UgcHJvYmFibHkgd2FudCB0byBjaG93biB0aGVzZSB0byBhIHN5c3RlbSB1c2VyOiAiID4mMgotLQkJbHMgLWxkICRsYXJnZV91aWRfZmlsZXMKLSsJCWVjaG8gLWUgJGxhcmdlX3VpZF9maWxlcwotIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0gCQkJZWNobyAiKioqIEVycm9yOiBGYWlsIHRvIGxpc3QgZmlsZXMgaGF2ZSBhIFVJRCBncmVhdGVyIHRoYW4gOTkuIgotIAkJCWV4aXQgMQotLS0gCi0yLjIuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy9vcGtnLWJ1aWxkLUV4aXQtd2hlbi1mYWlsLXRvLWxpc3QtZmlsZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy9vcGtnLWJ1aWxkLUV4aXQtd2hlbi1mYWlsLXRvLWxpc3QtZmlsZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjY5MDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvb3BrZy1idWlsZC1FeGl0LXdoZW4tZmFpbC10by1saXN0LWZpbGVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotV2UgaGF2ZSBhbiBpc3N1ZSB3aGVuIGxzIHNlZ2ZhdWx0cyBpbiBzb21lIGNhc2VzIFsxXSBzbyBpdCdzCi1iZXR0ZXIgdG8gZGV0ZWN0IHRoZSBmYWlsdXJlIGF0IHRoaXMgbGV2ZWwgaW5zdGVhZCBvZiBjb250aW51ZQotdGhlIGJ1aWxkIHByb2Nlc3MuCi0KLVtZT0NUTyAjODkyNl0KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWzJdCi0KLVsxXSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MjYjYzAKLVsyXSBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhdG9waWMvb3BrZy1kZXZlbC9jbVgwMmJnSFptcwotCi1TaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KLS0tLQotIG9wa2ctYnVpbGQgfCA4ICsrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvb3BrZy1idWlsZCBiL29wa2ctYnVpbGQKLWluZGV4IDk4MDA4YjYuLmE5Y2NhZDIgMTAwNzU1Ci0tLS0gYS9vcGtnLWJ1aWxkCi0rKysgYi9vcGtnLWJ1aWxkCi1AQCAtNTMsNiArNTMsMTAgQEAgcGtnX2FwcGVhcnNfc2FuZSgpIHsKLSAJCWVjaG8gIioqKiBXYXJuaW5nOiBUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbmFtZXMgZW5kaW5nIGluICd+Jy4KLSBZb3UgcHJvYmFibHkgd2FudCB0byByZW1vdmUgdGhlbTogIiA+JjIKLSAJCWxzIC1sZCAkdGlsZGVfZmlsZXMKLSsJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgotKwkJCWVjaG8gIioqKiBFcnJvcjogRmFpbCB0byBsaXN0IGZpbGVzIGhhdmUgbmFtZXMgZW5kaW5nIGluICd+Jy4iCi0rCQkJZXhpdCAxCi0rCQlmaQotIAkJZWNobyA+JjIKLSAJICAgIGVsc2UKLSAJCWVjaG8gIioqKiBSZW1vdmluZyB0aGUgZm9sbG93aW5nIGZpbGVzOiAkdGlsZGVfZmlsZXMiCi1AQCAtNjYsNiArNzAsMTAgQEAgWW91IHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoZW06ICIgPiYyCi0gCQllY2hvICIqKiogV2FybmluZzogVGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGEgVUlEIGdyZWF0ZXIgdGhhbiA5OS4KLSBZb3UgcHJvYmFibHkgd2FudCB0byBjaG93biB0aGVzZSB0byBhIHN5c3RlbSB1c2VyOiAiID4mMgotIAkJbHMgLWxkICRsYXJnZV91aWRfZmlsZXMKLSsJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgotKwkJCWVjaG8gIioqKiBFcnJvcjogRmFpbCB0byBsaXN0IGZpbGVzIGhhdmUgYSBVSUQgZ3JlYXRlciB0aGFuIDk5LiIKLSsJCQlleGl0IDEKLSsJCWZpCi0gCQllY2hvID4mMgotIAlmaQotIAkgICAgCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgppbmRleCA4ODczYjI4Li5hN2FlYzQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiCkBAIC0xLDE4ICsxLDE2IEBACiBTVU1NQVJZID0gIkFkZGl0aW9uYWwgdXRpbGl0aWVzIGZvciB0aGUgb3BrZyBwYWNrYWdlIG1hbmFnZXIiCiBTVU1NQVJZX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJVdGlsaXR5IGZvciBtYW5hZ2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSIKIFNFQ1RJT04gPSAiYmFzZSIKLUhPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL29wa2ctdXRpbHMiCiBMSUNFTlNFID0gIkdQTHYyKyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL29wa2cucHk7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9MTU5MTc0OTFhZDZiZjdhY2M2NjZjYTVmN2NjMWUwODMiCiBQUk9WSURFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndXBkYXRlLWFsdGVybmF0aXZlcycsICd2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMnLCAnJywgZCl9IgogCi1TUkNSRVYgPSAiNTMyNzRmMDg3NTY1ZmQ0NWQ4NDUyYzUzNjc5OTdiYTZhNjgyYTM3YSIKLVBWID0gIjAuMS44K2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjNmZmVjZTliZjE5YTg0NGVkYWNjNTYzYWEwOTJmZDFmYmZjZmZlZWUiCitQViA9ICIwLjMuMitnaXQke1NSQ1BWfSIKIAotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIFwKLSAgICAgICAgICAgZmlsZTovL29wa2ctYnVpbGQtRXhpdC13aGVuLWZhaWwtdG8tbGlzdC1maWxlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLW9wa2ctYnVpbGQtcmUtZG8tZmluZC1scy1jb2RlLXRvLW5vdC1mYWlsLW9uLWZpbGVuYW0ucGF0Y2giCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCiBTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly90YXJfaWdub3JlX2Vycm9yLnBhdGNoIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvMDAwMS1jb25maWd1cmUuYWMtdXNlLXBrZy1jb25maWctZm9yLWxpYnNvbHYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLWNvbmZpZ3VyZS5hYy11c2UtcGtnLWNvbmZpZy1mb3ItbGlic29sdi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY3ZWM3NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLWNvbmZpZ3VyZS5hYy11c2UtcGtnLWNvbmZpZy1mb3ItbGlic29sdi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLUZyb20gMmE0MzAyN2Y3ZWNmMmJiM2NlNzNmOTViY2Y1NzVjNTZiYzQ5NWQwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+Ci1EYXRlOiBXZWQsIDkgRGVjIDIwMTUgMTc6Mzg6MDUgLTA2MDAKLVN1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiB1c2UgcGtnLWNvbmZpZyBmb3IgbGlic29sdgotCi1TaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMTIgKy0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxMSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggNTJlMTAyNS4uZDE3ZGM1YyAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMTU5LDE3ICsxNTksNyBAQCBpZiB0ZXN0ICJ4JHdhbnRfc29sdmVyIiAhPSAieG5vIjsgdGhlbgotICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFNwZWNpZnkgd2hpY2ggc29sdmVyIHdpdGggLS1lbmFibGUtc29sdmVyPTxTT0xWRVI+KV0sCi0gICAgICAgICAgICAgW2xpYnNvbHZdLAotICAgICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVChsaWJzb2x2KQotLQotLSAgICAgICAgICAgICAgICBTT0xWRVJfQ0ZMQUdTPSItSS91c3IvbG9jYWwvaW5jbHVkZS8iCi0tICAgICAgICAgICAgICAgIFNPTFZFUl9MSUJTPSItbHNvbHYgLWxzb2x2ZXh0IgotLSAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIoW3NvbHZdLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvbHZlcl9zb2x2ZV0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IobGlic29sdiBub3QgZm91bmQpXSkKLS0gICAgICAgICAgICAgICAgZG5sIFRPRE86IHJlbW92ZSBwcmV2aW91cyA2IGxpbmVzIGFuZCB1bmNvbW1lbnQgbGluZSBiZWxvdyB0byB1c2UKLS0gICAgICAgICAgICAgICAgZG5sIHBrZy1jb25maWcgb25jZSB0aGVyZSBpcyBhIHJlbGVhc2Ugb2YgbGlic29sdiB3aXRoIHBrZy1jb25maWc6Ci0tICAgICAgICAgICAgICAgIGRubCBQS0dfQ0hFQ0tfTU9EVUxFUyhTT0xWRVIsIGxpYnNvbHYpCi0tCi0rICAgICAgICAgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKFNPTFZFUiwgbGlic29sdikKLSAgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfU09MVkVSX0xJQlNPTFYsMSxbRGVmaW5lIGlmIHlvdSB3YW50IHRvIHVzZSBsaWJzb2x2XSldLAotICAgICAgICAgICAgICMgZGVmYXVsdAotICAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKG5vKQotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLWxpYnNvbHZfc29sdmVyX3NldF9hcmNoX3BvbGljeS11c2UtY29ycmVjdC1sb2dpYy1kdXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLWxpYnNvbHZfc29sdmVyX3NldF9hcmNoX3BvbGljeS11c2UtY29ycmVjdC1sb2dpYy1kdXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYjE3OTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvMDAwMS1saWJzb2x2X3NvbHZlcl9zZXRfYXJjaF9wb2xpY3ktdXNlLWNvcnJlY3QtbG9naWMtZHVyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotRnJvbSAzZTU2MmJlZDdkY2VkMjVlYjNlOTE3NGNhOTM5NTMyNGI2Yzg3M2MxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KLURhdGU6IFdlZCwgOSBEZWMgMjAxNSAxMzozNjoxNCAtMDYwMAotU3ViamVjdDogW1BBVENIXSBsaWJzb2x2X3NvbHZlcl9zZXRfYXJjaF9wb2xpY3k6IHVzZSBjb3JyZWN0IGxvZ2ljIGR1cmluZwotIGFyY2hzIHJlc2l6aW5nCi0KLUlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gSU5JVElBTF9BUkNIX0xJU1RfU0laRSBhcmNocyBkZWZpbmVkIGluIHRoZQotY29uZmlndXJhdGlvbiwgbGlic29sdl9zb2x2ZXJfc2V0X2FyY2hfcG9saWN5IGNyYXNoZXMgZHVlIHRvIGZsYXdlZAotbG9naWMgd2hlbiByZXNpemluZyB0aGUgYXJjaHMgYXJyYXkuCi0KLVNpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+Ci0tLS0KLSBsaWJvcGtnL29wa2dfc29sdmVyX2xpYnNvbHYuYyB8IDYgKysrKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYm9wa2cvb3BrZ19zb2x2ZXJfbGlic29sdi5jIGIvbGlib3BrZy9vcGtnX3NvbHZlcl9saWJzb2x2LmMKLWluZGV4IDFjZGNmMWYuLmI1YWYwZmEgMTAwNjQ0Ci0tLS0gYS9saWJvcGtnL29wa2dfc29sdmVyX2xpYnNvbHYuYwotKysrIGIvbGlib3BrZy9vcGtnX3NvbHZlcl9saWJzb2x2LmMKLUBAIC02Niw4ICs2NiwxMCBAQCBzdGF0aWMgdm9pZCBsaWJzb2x2X3NvbHZlcl9zZXRfYXJjaF9wb2xpY3kobGlic29sdl9zb2x2ZXJfdCAqbGlic29sdl9zb2x2ZXIpCi0gICAgIG52X3BhaXJfbGlzdF9lbHRfdCAqYXJjaF9pbmZvOwotIAotICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGFyY2hfaW5mbywgJm9wa2dfY29uZmlnLT5hcmNoX2xpc3QuaGVhZCwgbm9kZSkgewotLSAgICAgICAgaWYgKGFyY2hfY291bnQgPiBhcmNoX2xpc3Rfc2l6ZSkKLS0gICAgICAgICAgICBhcmNocyA9IHhyZWFsbG9jKGFyY2hzLCBhcmNoX2xpc3Rfc2l6ZSAqPSAyKTsKLSsgICAgICAgIGlmIChhcmNoX2NvdW50ID49IGFyY2hfbGlzdF9zaXplKSB7Ci0rICAgICAgICAgICAgYXJjaF9saXN0X3NpemUgKj0gMjsKLSsgICAgICAgICAgICBhcmNocyA9IHhyZWFsbG9jKGFyY2hzLCBhcmNoX2xpc3Rfc2l6ZSAqIHNpemVvZihhcmNoX2RhdGFfdCkpOwotKyAgICAgICAgfQotIAotICAgICAgICAgYXJjaHNbYXJjaF9jb3VudF0uYXJjaCA9ICgobnZfcGFpcl90ICopKGFyY2hfaW5mby0+ZGF0YSkpLT5uYW1lOwotICAgICAgICAgYXJjaHNbYXJjaF9jb3VudF0ucHJpb3JpdHkgPSBhdG9pKCgobnZfcGFpcl90ICopCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3N2Y0OTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi1TVU1NQVJZID0gIk9wZW4gUGFja2FnZSBNYW5hZ2VyIgotU1VNTUFSWV9saWJvcGtnID0gIk9wZW4gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcnkiCi1TRUNUSU9OID0gImJhc2UiCi1IT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnL2lzc3Vlcy9saXN0IgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvb3BrZy5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MjE7bWQ1PTkwNDM1YTUxOWM2ZWE2OWVmMjJlNGE4OGJjYzUyZmEwIgotCi1ERVBFTkRTID0gImxpYmFyY2hpdmUiCi0KLVBFID0gIjEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL29wa2ctY29uZmlndXJlLnNlcnZpY2UgXAotICAgICAgICAgICBmaWxlOi8vb3BrZy5jb25mIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtb3BrZ19jb25mLWNyZWF0ZS1vcGtnLmxvY2staW4tcnVuLWluc3RlYWQtb2YtdmFyLXJ1bi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYnNvbHZfc29sdmVyX3NldF9hcmNoX3BvbGljeS11c2UtY29ycmVjdC1sb2dpYy1kdXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtdXNlLXBrZy1jb25maWctZm9yLWxpYnNvbHYucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNDM3MzVlNWRjMWViZjQ2YmQ2Y2U1NmE3Y2RmZGM3MjAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDJjNmMwMmE4Mzg0ZWMyMTE2OGExZjBhMTg2Y2I1ZTlmNTc3ZDE0NTJmNDkxZDAyZWQzZTU2YjJlYThiODdkZiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQKLQotU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wa2ctY29uZmlndXJlLnNlcnZpY2UiCi0KLXRhcmdldF9sb2NhbHN0YXRlZGlyIDo9ICIke2xvY2Fsc3RhdGVkaXJ9IgotT1BLR0xJQkRJUiA9ICIke3RhcmdldF9sb2NhbHN0YXRlZGlyfS9saWIiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi0KLVBBQ0tBR0VDT05GSUdbZ3BnXSA9ICItLWVuYWJsZS1ncGcsLS1kaXNhYmxlLWdwZyxncGdtZSBsaWJncGctZXJyb3IsZ251cGciCi1QQUNLQUdFQ09ORklHW2N1cmxdID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsY3VybCIKLVBBQ0tBR0VDT05GSUdbc3NsLWN1cmxdID0gIi0tZW5hYmxlLXNzbC1jdXJsLC0tZGlzYWJsZS1zc2wtY3VybCxjdXJsIG9wZW5zc2wiCi1QQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKLVBBQ0tBR0VDT05GSUdbc2hhMjU2XSA9ICItLWVuYWJsZS1zaGEyNTYsLS1kaXNhYmxlLXNoYTI1NiIKLVBBQ0tBR0VDT05GSUdbcGF0aGZpbmRlcl0gPSAiLS1lbmFibGUtcGF0aGZpbmRlciwtLWRpc2FibGUtcGF0aGZpbmRlcixwYXRoZmluZGVyIgotUEFDS0FHRUNPTkZJR1tsaWJzb2x2XSA9ICItLWVuYWJsZS1zb2x2ZXI9bGlic29sdiwtLWRpc2FibGUtc29sdmVyLGxpYnNvbHYiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cKLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKLQllY2hvICJvcHRpb24gbGlzdHNfZGlyICR7T1BLR0xJQkRJUn0vb3BrZy9saXN0cyIgPj4ke0R9JHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZgotCi0JIyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkKLQlpbnN0YWxsIC1kICR7RH0ke09QS0dMSUJESVJ9L29wa2cKLQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07dGhlbgotCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0JCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wa2ctY29uZmlndXJlLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCi0JCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKLQkJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKLQkJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCi0JCQktZSAncyxAU1lTVEVNRF9VTklURElSQCwke3N5c3RlbWRfdW5pdGRpcn0sZycgXAotCQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3BrZy1jb25maWd1cmUuc2VydmljZQotCWZpCi19Ci0KLVJERVBFTkRTXyR7UE59ID0gIiR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IG9wa2ctYXJjaC1jb25maWcgcnVuLXBvc3RpbnN0cyBsaWJhcmNoaXZlIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCi1SUkVQTEFDRVNfJHtQTn0gPSAib3BrZy1ub2dwZyBvcGtnLWNvbGxhdGVyYWwiCi1SQ09ORkxJQ1RTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKLVJQUk9WSURFU18ke1BOfSA9ICJvcGtnLWNvbGxhdGVyYWwiCi0KLVBBQ0tBR0VTID0rICJsaWJvcGtnIgotCi1GSUxFU19saWJvcGtnID0gIiR7bGliZGlyfS8qLnNvLiogJHtPUEtHTElCRElSfS9vcGtnLyIKLUZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1DT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlNzJmYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4zLmJiCkBAIC0wLDAgKzEsNzMgQEAKK1NVTU1BUlkgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIiCitTVU1NQVJZX2xpYm9wa2cgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIgbGlicmFyeSIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvaXNzdWVzL2xpc3QiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vcGtnLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0yMTttZDU9OTA0MzVhNTE5YzZlYTY5ZWYyMmU0YTg4YmNjNTJmYTAiCisKK0RFUEVORFMgPSAibGliYXJjaGl2ZSIKKworUEUgPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vb3BrZy1jb25maWd1cmUuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1vcGtnX2NvbmYtY3JlYXRlLW9wa2cubG9jay1pbi1ydW4taW5zdGVhZC1vZi12YXItcnVuLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImE0NjEzMDM4YzhhZmM3ZDhkNDgyZjVjNTNmMTM3YmRmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE5ZGI5ZTczMTIxYTVlNGM5MWZhMjI4YjBhNmE0YzU1Y2MzNTkxMDU2MTMwY2ZiM2M2NmMzMGFhMzJmOGQwMGUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIgorCit0YXJnZXRfbG9jYWxzdGF0ZWRpciA6PSAiJHtsb2NhbHN0YXRlZGlyfSIKK09QS0dMSUJESVIgPSAiJHt0YXJnZXRfbG9jYWxzdGF0ZWRpcn0vbGliIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorCitQQUNLQUdFQ09ORklHW2dwZ10gPSAiLS1lbmFibGUtZ3BnLC0tZGlzYWJsZS1ncGcsZ3BnbWUgbGliZ3BnLWVycm9yLGdudXBnIgorUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW3NzbC1jdXJsXSA9ICItLWVuYWJsZS1zc2wtY3VybCwtLWRpc2FibGUtc3NsLWN1cmwsY3VybCBvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3NoYTI1Nl0gPSAiLS1lbmFibGUtc2hhMjU2LC0tZGlzYWJsZS1zaGEyNTYiCitQQUNLQUdFQ09ORklHW3BhdGhmaW5kZXJdID0gIi0tZW5hYmxlLXBhdGhmaW5kZXIsLS1kaXNhYmxlLXBhdGhmaW5kZXIscGF0aGZpbmRlciIKK1BBQ0tBR0VDT05GSUdbbGlic29sdl0gPSAiLS13aXRoLWxpYnNvbHYsLS13aXRob3V0LWxpYnNvbHYsbGlic29sdiIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vb3BrZworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wa2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZgorCWVjaG8gIm9wdGlvbiBsaXN0c19kaXIgJHtPUEtHTElCRElSfS9vcGtnL2xpc3RzIiA+PiR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCisKKwkjIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeQorCWluc3RhbGwgLWQgJHtEfSR7T1BLR0xJQkRJUn0vb3BrZworCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTt0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy1jb25maWd1cmUuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNURU1EX1VOSVRESVJALCR7c3lzdGVtZF91bml0ZGlyfSxnJyBcCisJCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAiJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30gb3BrZy1hcmNoLWNvbmZpZyBydW4tcG9zdGluc3RzIGxpYmFyY2hpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JSRVBMQUNFU18ke1BOfSA9ICJvcGtnLW5vZ3BnIG9wa2ctY29sbGF0ZXJhbCIKK1JDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgorUlBST1ZJREVTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKKworUEFDS0FHRVMgPSsgImxpYm9wa2ciCisKK0ZJTEVTX2xpYm9wa2cgPSAiJHtsaWJkaXJ9Lyouc28uKiAke09QS0dMSUJESVJ9L29wa2cvIgorRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMGY4OGQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVNVTU1BUlkgPSAiT3B0aW1pc2VkIElubmVyIExvb3AgUnVudGltZSBDb21waWxlciIKLUhPTUVQQUdFID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL21vZHVsZXMvb3JjLmh0bWwiCi1MSUNFTlNFID0gIkJTRC0yLUNsYXVzZSAmIEJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDBiZDlkMDllOGFmNTZiOWVjOTgyYjNkODU3OTdlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9vcmMvb3JjLSR7UFZ9LnRhci54eiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjllNzkzZWMzNGMwZTIwMzM5NjU5ZGQ0YmJiZjYyMTM1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMzOGNkNDkzYjUyNDczMDAxNDk4MjFjNjMxMmJkZjc0MjJhMzU5M2FlOTg2OTFmYzc1ZDdlNGZlNzI3YmQzOWIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLVBBQ0tBR0VTID0rICJvcmMtZXhhbXBsZXMiCi1QQUNLQUdFU19EWU5BTUlDICs9ICJebGlib3JjLS4qIgotRklMRVNfb3JjLWV4YW1wbGVzID0gIiR7bGliZGlyfS9vcmMvKiIKLUZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7Ci0gICAgbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCi0gICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ09SQyAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKLX0KLQotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7Ci0gICAgc2VkIC1pIC1lICdzIy90bXAjLiNnJyAke1N9L29yYy9vcmNjb2RlbWVtLmMKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzQ5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjI1LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiT3B0aW1pc2VkIElubmVyIExvb3AgUnVudGltZSBDb21waWxlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL21vZHVsZXMvb3JjLmh0bWwiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDBiZDlkMDllOGFmNTZiOWVjOTgyYjNkODU3OTdlIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9vcmMvb3JjLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjg1ODJhMjhiMTVmNTMxMTBjODhkODA0M2Q5ZjU1YmNmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMxYjFkNTRhNThmMjZkNDgzZjBiMzg4MTUzODk4NDc4OWZlNWQ1NDYwYWI4ZmFiNzRhMWNhY2JkM2QxYzUzZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSsgIm9yYy1leGFtcGxlcyIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWJvcmMtLioiCitGSUxFU19vcmMtZXhhbXBsZXMgPSAiJHtsaWJkaXJ9L29yYy8qIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnT1JDICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBzZWQgLWkgLWUgJ3MjL3RtcCMuI2cnICR7U30vb3JjL29yY2NvZGVtZW0uYworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2luc3RhbGwtcGMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaAppbmRleCAwNDIyMmNiLi42M2I4MGY2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaApAQCAtMiw3ICsyLDcgQEAKIGRpcmVjdG9yeSwgYW5kIG5vdCAkUy4KIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtzaG91bGQgYmUgc3VibWl0dGVkXQotU2lnbmVkLU9mZi1CeTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CiAKIEluZGV4OiB1dWlkLTEuNi4yL01ha2VmaWxlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIKaW5kZXggMDg5MjZiYS4uODVhMWJjZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYgpAQCAtMTYsOCArMTYsOSBAQAogCSAgIGZpbGU6Ly91dWlkX21kNS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjg7bWQ1PTljMWY0YjIyMTg1NDZkZWFlMjRjOTFiZTFkY2YwMGRkIgogCiBQUiA9ICJyMiIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vby9vc3NwLXV1aWQvIgogCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9vLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9vLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAogCSAgIGZpbGU6Ly8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2ggXAogCSAgIGZpbGU6Ly8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoIFwKIAkgICBmaWxlOi8vMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2ggXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIKaW5kZXggZTgzMTg2MC4uZWRlZTQ3NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiCkBAIC0xLDUgKzEsNCBAQAogU1VNTUFSWSA9ICJQcm92aWRlcyBhIHNtYWxsIHNldCBvZiB0b29scyBmb3IgZGV2ZWxvcG1lbnQgb24gdGhlIGRldmljZSIKLUxJQ0VOU0UgPSAiTUlUIgogCiBQUiA9ICJyMSIKIApAQCAtMTEsOCArMTAsNyBAQAogCiBSREVQRU5EU18ke1BOfSA9ICJcCiAgICAgZGlzdGNjLWNvbmZpZyBcCi0gICAgb3Byb2ZpbGV1aS1zZXJ2ZXIgXAogICAgIG5mcy1leHBvcnQtcm9vdCBcCiAgICAgYmFzaCBcCisgICAgYmludXRpbHMtc3ltbGlua3MgXAogICAgICIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9JbmNyZWFzZS1tYXhTaXplLXRvLTY0TUIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL0luY3JlYXNlLW1heFNpemUtdG8tNjRNQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTA1MGExCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9JbmNyZWFzZS1tYXhTaXplLXRvLTY0TUIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBlMzY1ODc0MGVjMTAwZTRjOGNmODMyOTU0NjBiMDMyOTc5ZTFhOTlhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmFiaW8gQmVydG9uIDxmYWJpby5iZXJ0b25Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IEZyaSwgOSBTZXAgMjAxNiAxODoyMTozMiAtMDMwMAorU3ViamVjdDogW1BBVENIXSBJbmNyZWFzZSBtYXhTaXplIHRvIDY0TUIKK09yZ2FuaXphdGlvbjogTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK0ZpeCBlcnJvcjoKKworLworfEVSUk9SOiBxZW11LW5hdGl2ZS0yLjUuMC1yMSBkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lOiAnKCdwYXRjaGVsZi11bmluYXRpdmUnLAorfCctLXNldC1pbnRlcnByZXRlcicsICcuLi9idWlsZC90bXAvc3lzcm9vdHMtdW5pbmF0aXZlL3g4Nl82NC1saW51eC9saWIvCit8bGQtbGludXgteDg2LTY0LnNvLjInLCAnLi4vYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3FlbXUtbmF0aXZlLzIuNS4wLXIxLworfHNzdGF0ZS1pbnN0YWxsLXBvcHVsYXRlX3N5c3Jvb3QveDg2XzY0LWxpbnV4L3Vzci9iaW4vcWVtdS1taXBzNjQnKScKK3xmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSBhbmQgdGhlIGZvbGxvd2luZyBvdXRwdXQ6Cit8d2FybmluZzogd29ya2luZyBhcm91bmQgYSBMaW51eCBrZXJuZWwgYnVnIGJ5IGNyZWF0aW5nIGEgaG9sZSBvZiAzNjAzMjUxMgorfGJ5dGVzIGluIOKAmC4uL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9xZW11LW5hdGl2ZS8yLjUuMC1yMS8KK3xzc3RhdGUtaW5zdGFsbC1wb3B1bGF0ZV9zeXNyb290L3g4Nl82NC1saW51eC91c3IvYmluL3FlbXUtbWlwczY04oCZCit8bWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQKK1wKKworU2ltaWxhciBpc3N1ZSBpcyBkaXNjdXNzZWQgaGVyZToKK2h0dHBzOi8vZ2l0aHViLmNvbS9OaXhPUy9wYXRjaGVsZi9pc3N1ZXMvNDcKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogRmFiaW8gQmVydG9uIDxmYWJpby5iZXJ0b25Ab3NzeXN0ZW1zLmNvbS5icj4KKy0tLQorIHNyYy9wYXRjaGVsZi5jYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9wYXRjaGVsZi5jYyBiL3NyYy9wYXRjaGVsZi5jYworaW5kZXggYTU5YzEyZC4uMGZkNzM1NSAxMDA2NDQKKy0tLSBhL3NyYy9wYXRjaGVsZi5jYworKysrIGIvc3JjL3BhdGNoZWxmLmNjCitAQCAtMjc5LDcgKzI3OSw3IEBAIHN0YXRpYyB2b2lkIHJlYWRGaWxlKHN0cmluZyBmaWxlTmFtZSkKKyAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgIGlmIChzdGF0KGZpbGVOYW1lLmNfc3RyKCksICZzdCkgIT0gMCkgZXJyb3IoInN0YXQiKTsKKyAgICAgZmlsZVNpemUgPSBzdC5zdF9zaXplOworLSAgICBtYXhTaXplID0gZmlsZVNpemUgKyAzMiAqIDEwMjQgKiAxMDI0OworKyAgICBtYXhTaXplID0gZmlsZVNpemUgKyA2NCAqIDEwMjQgKiAxMDI0OworIAorICAgICBjb250ZW50cyA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyhmaWxlU2l6ZSArIG1heFNpemUpOworICAgICBpZiAoIWNvbnRlbnRzKSBhYm9ydCgpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL1NraXAtZW1wdHktc2VjdGlvbi1maXhlcy02Ni5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvU2tpcC1lbXB0eS1zZWN0aW9uLWZpeGVzLTY2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZThhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL1NraXAtZW1wdHktc2VjdGlvbi1maXhlcy02Ni5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDczNTI2Y2I1NDZhZTZiMDBlYTYxNjllNDBiMDFmYjdiNWYwZGJiNTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYWJpbyBCZXJ0b24gPGZhYmlvLmJlcnRvbkBvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogVGh1LCAyOCBKdWwgMjAxNiAxMTowNTowNiAtMDMwMAorU3ViamVjdDogW1BBVENIXSBTa2lwIGVtcHR5IHNlY3Rpb24gKGZpeGVzICM2NikKK09yZ2FuaXphdGlvbjogTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBGYWJpbyBCZXJ0b24gPGZhYmlvLmJlcnRvbkBvc3N5c3RlbXMuY29tLmJyPgorLS0tCisgc3JjL3BhdGNoZWxmLmNjIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvcGF0Y2hlbGYuY2MgYi9zcmMvcGF0Y2hlbGYuY2MKK2luZGV4IDEzNjA5OGYuLjI2NzdhMjYgMTAwNjQ0CistLS0gYS9zcmMvcGF0Y2hlbGYuY2MKKysrKyBiL3NyYy9wYXRjaGVsZi5jYworQEAgLTY4NCw2ICs2ODQsOSBAQCB2b2lkIEVsZkZpbGU8RWxmRmlsZVBhcmFtTmFtZXM+OjpyZXdyaXRlU2VjdGlvbnNFeGVjdXRhYmxlKCkKKyAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gbGFzdFJlcGxhY2VkOyArK2kpIHsKKyAgICAgICAgIEVsZl9TaGRyICYgc2hkcihzaGRyc1tpXSk7CisgICAgICAgICBzdHJpbmcgc2VjdGlvbk5hbWUgPSBnZXRTZWN0aW9uTmFtZShzaGRyKTsKKysgICAgICAgIGlmIChzZWN0aW9uTmFtZSA9PSAiIikgeworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorICAgICAgICAgZGVidWcoImxvb2tpbmcgYXQgc2VjdGlvbiBgJXMnXG4iLCBzZWN0aW9uTmFtZS5jX3N0cigpKTsKKyAgICAgICAgIC8qICEhISBXaHkgZG8gd2Ugc3RvcCBhZnRlciBhIC5keW5zdHIgc2VjdGlvbj8gSSBjYW4ndAorICAgICAgICAgICAgcmVtZW1iZXIhICovCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvaGFuZGxlLXJlYWQtb25seS1maWxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvaGFuZGxlLXJlYWQtb25seS1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmFmZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9oYW5kbGUtcmVhZC1vbmx5LWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gMmE2MDNhY2I2NTk5MzY5OGMyMWYxYzZlYjc2NjRmOTNhZDgzMGQ1MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhYmlvIEJlcnRvbiA8ZmFiaW8uYmVydG9uQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBGcmksIDkgU2VwIDIwMTYgMTY6MDA6NDIgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gaGFuZGxlIHJlYWQtb25seSBmaWxlcworT3JnYW5pemF0aW9uOiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKworUGF0Y2ggZnJvbToKK2h0dHBzOi8vZ2l0aHViLmNvbS9kYXJlYWxzaGluamkvcGF0Y2hlbGYvY29tbWl0LzQwZTY2MzkyYmM0Yjk2ZTliNGVkYTQ5NjgyN2QyNjM0OGE1MDM1MDkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEZhYmlvIEJlcnRvbiA8ZmFiaW8uYmVydG9uQG9zc3lzdGVtcy5jb20uYnI+CistLS0KKyBzcmMvcGF0Y2hlbGYuY2MgfCAxNiArKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9wYXRjaGVsZi5jYyBiL3NyYy9wYXRjaGVsZi5jYworaW5kZXggMTM2MDk4Zi4uYWVhMzYwZSAxMDA2NDQKKy0tLSBhL3NyYy9wYXRjaGVsZi5jYworKysrIGIvc3JjL3BhdGNoZWxmLmNjCitAQCAtMzg4LDcgKzM4OCwxNyBAQCB2b2lkIEVsZkZpbGU8RWxmRmlsZVBhcmFtTmFtZXM+Ojpzb3J0U2hkcnMoKQorIAorIHN0YXRpYyB2b2lkIHdyaXRlRmlsZShzdHJpbmcgZmlsZU5hbWUpCisgeworLSAgICBpbnQgZmQgPSBvcGVuKGZpbGVOYW1lLmNfc3RyKCksIE9fVFJVTkMgfCBPX1dST05MWSk7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKyAgICBpbnQgZmQ7CisrCisrICAgIGlmIChzdGF0KGZpbGVOYW1lLmNfc3RyKCksICZzdCkgIT0gMCkKKysgICAgICAgIGVycm9yKCJzdGF0Iik7CisrCisrICAgIGlmIChjaG1vZChmaWxlTmFtZS5jX3N0cigpLCAwNjAwKSAhPSAwKQorKyAgICAgICAgZXJyb3IoImNobW9kIik7CisrCisrICAgIGZkID0gb3BlbihmaWxlTmFtZS5jX3N0cigpLCBPX1RSVU5DIHwgT19XUk9OTFkpOworKworICAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgICBlcnJvcigib3BlbiIpOworIAorQEAgLTM5Nyw2ICs0MDcsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVGaWxlKHN0cmluZyBmaWxlTmFtZSkKKyAKKyAgICAgaWYgKGNsb3NlKGZkKSAhPSAwKQorICAgICAgICAgZXJyb3IoImNsb3NlIik7CisrCisrICAgIGlmIChjaG1vZChmaWxlTmFtZS5jX3N0cigpLCBzdC5zdF9tb2RlKSAhPSAwKQorKyAgICAgICAgZXJyb3IoImNobW9kIik7CisrCisgfQorIAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL21heHNpemUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL21heHNpemUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMDRhODkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9tYXhzaXplLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotRnJvbSBmNjg4NmMyYzMzYTFjZjg3NzExNjM5MTlmM2QyMGY2MzQwYzBjZTM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRWVsY28gRG9sc3RyYSA8ZWVsY28uZG9sc3RyYUBsb2dpY2Jsb3guY29tPgotRGF0ZTogRnJpLCAxMCBKdWwgMjAxNSAxODoxMjozNyArMDIwMAotU3ViamVjdDogW1BBVENIXSBRdWljayBmaXggZm9yICM0NwotCi1odHRwczovL2dpdGh1Yi5jb20vTml4T1MvcGF0Y2hlbGYvaXNzdWVzLzQ3Ci0KLUF2b2lkIGlzc3VlcyB3aXRoIGhvbGVzIGluIGJpbmFyaWVzIHN1Y2ggYXMgcWVtdS1wY2MgZnJvbSBxZW11LW5hdGl2ZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLVJQCi0yMDE2LzIvMwotCi0tLS0KLSBzcmMvcGF0Y2hlbGYuY2MgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvcGF0Y2hlbGYuY2MgYi9zcmMvcGF0Y2hlbGYuY2MKLWluZGV4IDg1NjZlZDkuLmRmNzU1OTMgMTAwNjQ0Ci0tLS0gYS9zcmMvcGF0Y2hlbGYuY2MKLSsrKyBiL3NyYy9wYXRjaGVsZi5jYwotQEAgLTI0OCw3ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkRmlsZShzdHJpbmcgZmlsZU5hbWUsIG1vZGVfdCAqIGZpbGVNb2RlKQotICAgICBpZiAoc3RhdChmaWxlTmFtZS5jX3N0cigpLCAmc3QpICE9IDApIGVycm9yKCJzdGF0Iik7Ci0gICAgIGZpbGVTaXplID0gc3Quc3Rfc2l6ZTsKLSAgICAgKmZpbGVNb2RlID0gc3Quc3RfbW9kZTsKLS0gICAgbWF4U2l6ZSA9IGZpbGVTaXplICsgOCAqIDEwMjQgKiAxMDI0OwotKyAgICBtYXhTaXplID0gZmlsZVNpemUgKyA2NCAqIDEwMjQgKiAxMDI0OwotIAotICAgICBjb250ZW50cyA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyhmaWxlU2l6ZSArIG1heFNpemUpOwotICAgICBpZiAoIWNvbnRlbnRzKSBhYm9ydCgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ODRhN2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1TUkNfVVJJID0gImh0dHA6Ly9uaXhvcy5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlBOfS0ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9tYXhzaXplLnBhdGNoIgotTElDRU5TRSA9ICJHUEx2MyIKLVNVTU1BUlkgPSAiVG9vbCB0byBhbGxvdyBlZGl0aW5nIG9mIFJQQVRIIGFuZCBpbnRlcnByZXRlciBmaWVsZHMgaW4gRUxGIGJpbmFyaWVzIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNWIxNTFlM2M4M2IzMWY1OTMxYjRhOWZjMDE2MzViZmQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk5Zjg0ZDEyNDM0NzM0MGMzNjcwNzA4OWVjOGY3MDUzMGFiZDU2ZTc4MjdjNTRkNTA2ZWI0Y2MwOTdhMTdlNyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlNjU0YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC45LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NSQ19VUkkgPSAiaHR0cDovL25peG9zLm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1NraXAtZW1wdHktc2VjdGlvbi1maXhlcy02Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYW5kbGUtcmVhZC1vbmx5LWZpbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0luY3JlYXNlLW1heFNpemUtdG8tNjRNQi5wYXRjaCBcCisiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitTVU1NQVJZID0gIlRvb2wgdG8gYWxsb3cgZWRpdGluZyBvZiBSUEFUSCBhbmQgaW50ZXJwcmV0ZXIgZmllbGRzIGluIEVMRiBiaW5hcmllcyIKKworU1JDX1VSSVttZDVzdW1dID0gImQwMjY4NzYyOWM3ZTE2OThhNDg2YTkzYTBkNjA3OTQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEwZjY1YzFiYTE0ODg5MGU5ZjJmNzgyM2Y0YmVkZjdlY2FkNTQxNzc3MmY2NGY5OTQwMDRmNTlhMzkwMTRmODMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4xLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4xLjUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODdjMDMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMS41LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotU1VNTUFSWSA9ICJTZWN1cml0eS1mb2N1c2VkIEVMRiBmaWxlcyBjaGVja2luZyB0b29sIgotREVTQ1JJUFRJT04gPSAiVGhpcyBpcyBhIHNtYWxsIHNldCBvZiB2YXJpb3VzIFBhWCBhd2FyZSBhbmQgcmVsYXRlZCBcCi11dGlsaXRpZXMgZm9yIEVMRiBiaW5hcmllcy4gSXQgY2FuIGNoZWNrIEVMRiBiaW5hcnkgZmlsZXMgYW5kIHJ1bm5pbmcgXAotcHJvY2Vzc2VzIGZvciBpc3N1ZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB3aGVuIHVzaW5nIEVMRiBiaW5hcmllcyBcCi1hbG9uZyB3aXRoIFBhWCwgc3VjaCBhcyBub24tUElDIGNvZGUgb3IgZXhlY3V0YWJsZSBzdGFjayBhbmQgaGVhcC4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdlbnRvby5vcmcvcHJvai9lbi9oYXJkZW5lZC9wYXgtdXRpbHMueG1sIgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZ2VudG9vLm9zdW9zbC5vcmcvZGlzdGZpbGVzL3BheC11dGlscy0ke1BWfS50YXIueHogXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYmMzNjE0MzIyZWFmODhmMTY3YTYwOGFlODVkNmIyMDciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjk0NWIzZTRkZjJlMGRjOTU4MDBiZmJkM2Q4OGFiMjI0M2IyZWU0ZmYwNjRiYmZjNzU3MzRmNmQ5ZDk4NmE4OSIKLQotUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgIHRvdWNoICR7U30vTkVXUyAke1N9L0FVVEhPUlMgJHtTfS9DaGFuZ2VMb2cgJHtTfS9SRUFETUUKLX0KLQotZG9faW5zdGFsbCgpIHsKLSAgICBvZV9ydW5tYWtlIFBSRUZJWD0ke0R9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2xhcmdlZmlsZScsICcnLCBkKX0gXAotIgotUEFDS0FHRUNPTkZJR1tsaWJjYXBdID0gIi0td2l0aC1jYXBzLCAtLXdpdGhvdXQtY2FwcywgbGliY2FwIgotUEFDS0FHRUNPTkZJR1tsaWJzZWNjb21wXSA9ICItLXdpdGgtc2VjY29tcCwgLS13aXRob3V0LXNlY2NvbXAsIGxpYnNlY2NvbXAiCi1QQUNLQUdFQ09ORklHW2xhcmdlZmlsZV0gPSAiLS1lbmFibGUtbGFyZ2VmaWxlLC0tZGlzYWJsZS1sYXJnZWZpbGUsLCIKLVBBQ0tBR0VDT05GSUdbcHllbGZ0b29sc10gPSAiLS13aXRoLXB5dGhvbiwgLS13aXRob3V0LXB5dGhvbiwsIHB5ZWxmdG9vbHMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4xLjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4xLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjNTQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjEuNi5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlNlY3VyaXR5LWZvY3VzZWQgRUxGIGZpbGVzIGNoZWNraW5nIHRvb2wiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgc21hbGwgc2V0IG9mIHZhcmlvdXMgUGFYIGF3YXJlIGFuZCByZWxhdGVkIFwKK3V0aWxpdGllcyBmb3IgRUxGIGJpbmFyaWVzLiBJdCBjYW4gY2hlY2sgRUxGIGJpbmFyeSBmaWxlcyBhbmQgcnVubmluZyBcCitwcm9jZXNzZXMgZm9yIGlzc3VlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHdoZW4gdXNpbmcgRUxGIGJpbmFyaWVzIFwKK2Fsb25nIHdpdGggUGFYLCBzdWNoIGFzIG5vbi1QSUMgY29kZSBvciBleGVjdXRhYmxlIHN0YWNrIGFuZCBoZWFwLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2VudG9vLm9yZy9wcm9qL2VuL2hhcmRlbmVkL3BheC11dGlscy54bWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitTUkNfVVJJID0gImh0dHA6Ly9nZW50b28ub3N1b3NsLm9yZy9kaXN0ZmlsZXMvcGF4LXV0aWxzLSR7UFZ9LnRhci54eiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NmY1NmE1YTEwZWQ1MGYyNDQ4YzVjY2ViZDI3NzY0ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNTQzNmM1MTdiZWE0MGY3MDM1ZWMyOWE2ZjM0MDM0YzczOWI5NDNmMmUzYTA4MGQ3NmRmNWRmZDdmZDQxYjEyIgorCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgdG91Y2ggJHtTfS9ORVdTICR7U30vQVVUSE9SUyAke1N9L0NoYW5nZUxvZyAke1N9L1JFQURNRQorfQorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0ke3ByZWZpeH0gREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHW2xpYmNhcF0gPSAiLS13aXRoLWNhcHMsIC0td2l0aG91dC1jYXBzLCBsaWJjYXAiCitQQUNLQUdFQ09ORklHW2xpYnNlY2NvbXBdID0gIi0td2l0aC1zZWNjb21wLCAtLXdpdGhvdXQtc2VjY29tcCwgbGlic2VjY29tcCIKK1BBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgorUEFDS0FHRUNPTkZJR1tweWVsZnRvb2xzXSA9ICItLXdpdGgtcHl0aG9uLCAtLXdpdGhvdXQtcHl0aG9uLCwgcHllbGZ0b29scyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYgppbmRleCA5NTYxYTU5Li4zYWNkODI2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCkBAIC0zLDcgKzMsNyBAQAogTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjtlbmRsaW5lPTY7bWQ1PWM4NzY3ZDc1MTYyMjlmMDdiMjZlNDJkMWNmOGI1MWYxIgogCi1ERVBFTkRTICs9ICJleHBhdCBleHBhdC1uYXRpdmUiCitERVBFTkRTICs9ICJleHBhdCIKIAogU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC9YTUwtUGFyc2VyLSR7UFZ9LnRhci5neiIKIFNSQ19VUklbbWQ1c3VtXSA9ICJhZjQ4MTNmZTM5NTIzNjI0NTEyMDFjZWQ2ZmJjZTM3OSIKQEAgLTMyLDQgKzMyLDMgQEAKIH0KIAogQkJDTEFTU0VYVEVORD0ibmF0aXZlIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjIuMS5iYgppbmRleCBlZDgyMjJmLi4xYzIxNTIyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjEuYmIKQEAgLTExLDYgKzExLDcgQEAKICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9lcnJub192ZXIuZGlmZiBcCiAgICAgICAgICAgIGZpbGU6Ly9keW5hbG9hZGVyaGFjay5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC1yZW1vdmUtbm0tZnJvbS1saWJzd2FudGVkLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI2NjcxZTQ4MjljYmFmOWNlY2FmYTlhODRmMTQxYjBhMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYwppbmRleCA5NDhlYTdjLi5kMTM2YzVjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1wdGVzdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jCkBAIC01LDEwICs1LDExIEBACiAKIGRvX2luc3RhbGxfcHRlc3QgKCkgewogCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lICJzOlwvdXNyXC9sb2NhbDoke2JpbmRpcn06ZyIgLWkgY3Bhbi92ZXJzaW9uL3QvKgogCXNlZCAtZSAiczpcL29wdDpcL3VzcjoiIC1pIFBvcnRpbmcvYWRkLXBhY2thZ2UucGwKIAlzZWQgLWUgInM6XC9sb2NhbFwvZ251XC86XC86IiAtaSBoaW50cy9jeHV4LnNoCi0JdGFyIC1jZiAtICogLS1leGNsdWRlIFwqLm8gLS1leGNsdWRlIGxpYnBlcmwuc28gLS1leGNsdWRlIE1ha2VmaWxlIC0tZXhjbHVkZSBtYWtlZmlsZSAtLWV4Y2x1ZGUgaG9zdHBlcmwgXAotCQktLWV4Y2x1ZGUgbWluaXBlcmwgLS1leGNsdWRlIGdlbmVyYXRlX3V1ZG1hcCAtLWV4Y2x1ZGUgcGF0Y2hlcyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWMgLS1leGNsdWRlPVwqLm8gLS1leGNsdWRlPWxpYnBlcmwuc28gLS1leGNsdWRlPU1ha2VmaWxlIC0tZXhjbHVkZT1tYWtlZmlsZSAtLWV4Y2x1ZGU9aG9zdHBlcmwgXAorCQktLWV4Y2x1ZGU9bWluaXBlcmwgLS1leGNsdWRlPWdlbmVyYXRlX3V1ZG1hcCAtLWV4Y2x1ZGU9cGF0Y2hlcyAqIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXggKQogCiAJc2VkIC1pIC1lICJzLCR7RH0sLGciIFwKIAkgICAgICAgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0sLGciIFwKQEAgLTM0LDQgKzM1LDQgQEAKICAgICAgICAgICAgICcke1BOfS1wdGVzdCVzJywgJyVzJywgcmVjdXJzaXZlPVRydWUsIG1hdGNoX3BhdGg9VHJ1ZSkKIH0KIAotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1vZHVsZXMgJHtQTn0tZG9jICR7UE59LW1pc2Mgc2VkIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1vZHVsZXMgJHtQTn0tZG9jICR7UE59LW1pc2Mgc2VkIGxpYnNzcCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1yZGVwZW5kc181LjIyLjEuaW5jCmluZGV4IDgzMGVjY2UuLjJjNDk3ZmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4xLmluYwpAQCAtMTgsOCArMTgsOSBAQAogCiAjIFNvbWUgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCB0aGUgYWJvdmUgZG9lc24ndCBtYW5hZ2UgdG8gZmlndXJlIG91dAogUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgotREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyIKIFJERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmciCiAKIAogIyBEZXBlbmRzIGxpc3QKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaAppbmRleCA1OWUwMTZlLi5iMmE3ZjJjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoCkBAIC04LDcgKzgsNyBAQAogCiAjIFBhY2thZ2UgbmFtZSAgICAgIDogcGVybDUKICMgU291cmNlIGRpcmVjdG9yeSAgOiAuCi0jIENvbmZpZ3VyYXRpb24gdGltZTogVGh1IEp1biAxOCAwNTozNzoyNyBVVEMgMjAxNQorIyBDb25maWd1cmF0aW9uIHRpbWU6IEZyaSBNYXkgIDYgMjA6MTM6NDYgUERUIDIwMTYKICMgQ29uZmlndXJlZCBieSAgICAgOiBPcGVuIEVtYmVkZGVkCiAjIFRhcmdldCBzeXN0ZW0gICAgIDogbGludXggcWVtdXg4Ni02NCAzLjE5LjUteW9jdG8tc3RhbmRhcmQgIzEgc21wIHByZWVtcHQgdHVlIGp1biAxNiAwMDoyODoxNyBwZHQgMjAxNSB4ODZfNjQgZ251bGludXgKIApAQCAtNjYsNyArNjYsNyBAQAogYXBpX3JldmlzaW9uPSc1JwogYXBpX3N1YnZlcnNpb249JzAnCiBhcGlfdmVyc2lvbj0nMjInCi1hcGlfdmVyc2lvbnN0cmluZz0nNS4yMi4xJworYXBpX3ZlcnNpb25zdHJpbmc9JzUuMjIuMCcKIGFyPSdhcicKIGFyY2hsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4xL0BBUkNIQC10aHJlYWQtbXVsdGknCiBhcmNobGliZXhwPSdAU1RBR0lOR0RJUkBATElCRElSQC9wZXJsLzUuMjIuMS9AQVJDSEAtdGhyZWFkLW11bHRpJwpAQCAtOTYsNyArOTYsNyBAQAogY2N2ZXJzaW9uPScnCiBjZl9ieT0nT3BlbiBFbWJlZGRlZCcKIGNmX2VtYWlsPSdPcGVuIEVtYmVkZGVkQGxvY2FsaG9zdC5sb2NhbGRvbWFpbicKLWNmX3RpbWU9J1RodSBKdW4gMTggMDU6Mzc6MjcgVVRDIDIwMTUnCitjZl90aW1lPSdGcmkgTWF5ICA2IDIwOjEzOjQ2IFBEVCAyMDE2JwogY2hhcmJpdHM9JzgnCiBjaGFyc2l6ZT0nMScKIGNoZ3JwPScnCkBAIC0xMTk0LDcgKzExOTQsNyBAQAogdmVuZG9yc2NyaXB0PSdAVVNSQklOQCcKIHZlbmRvcnNjcmlwdGV4cD0nQFVTUkJJTkAnCiB2ZXJzaW9uPSc1LjIyLjEnCi12ZXJzaW9uX3BhdGNobGV2ZWxfc3RyaW5nPSd2ZXJzaW9uIDIyIHN1YnZlcnNpb24gMCcKK3ZlcnNpb25fcGF0Y2hsZXZlbF9zdHJpbmc9J3ZlcnNpb24gMjIgc3VidmVyc2lvbiAxJwogdmVyc2lvbm9ubHk9J3VuZGVmJwogdmk9JycKIHhsaWJwdGg9J0BMSUJESVJALzM4NiBAQkFTRUxJQkRJUkAzODYnCkBAIC0xMjA0LDcgKzEyMDQsNyBAQAogemlwPSd6aXAnCiBQRVJMX1JFVklTSU9OPTUKIFBFUkxfVkVSU0lPTj0yMgotUEVSTF9TVUJWRVJTSU9OPTAKK1BFUkxfU1VCVkVSU0lPTj0xCiBQRVJMX0FQSV9SRVZJU0lPTj01CiBQRVJMX0FQSV9WRVJTSU9OPTIyCiBQRVJMX0FQSV9TVUJWRVJTSU9OPTAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoCmluZGV4IDY5YWM0MzQuLjc2NTAxMjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaApAQCAtMSw1ICsxLDUgQEAKIFVwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMS8wNy8wMQogCiBGaXggdGhlc2UgUGFja2FnZSBRQSB3YXJuaW5ncyBiZWZvcmUgdGhleSBhcmUgY29udmVydGVkIGludG8gZmV0YWwgZXJyb3JzOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaAppbmRleCBlNzJjZTQ5Li4yNWU3ZjhiIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaApAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICAtRHByZWZpeD0vdXNyIFwKICAgICAgICAgLUR2ZW5kb3JwcmVmaXg9L3VzciBcCiAgICAgICAgIC1Ec2l0ZXByZWZpeD0vdXNyIFwKLSAgICAgICAgLURvdGhlcmxpYmRpcnM9L3Vzci9saWIvcGVybDUvNS4xMi4zIFwKKyAgICAgICAgLURvdGhlcmxpYmRpcnM9L3Vzci9saWIvcGVybDUvNS4yMi4xIFwKICAgICAgICAgLUR1c2VzaHJwbGliIFwKICAgICAgICAgLUR1c2V0aHJlYWRzIFwKICAgICAgICAgLUR1c2VpdGhyZWFkcyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNS04NjA3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtQ1ZFLTIwMTUtODYwNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjRhMDAxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtQ1ZFLTIwMTUtODYwNy5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDY1MmM4ZDQ4NTJhNjlmMWJiNGQzODc5NDZmOWI3NjM1MGExZjBkMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb255IENvb2sgPHRvbnlAZGV2ZWxvcC1oZWxwLmNvbT4KK0RhdGU6IFR1ZSwgMTUgRGVjIDIwMTUgMTA6NTY6NTQgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGVybDogZml4IENWRS0yMDE1LTg2MDcKKworZW5zdXJlIEZpbGU6OlNwZWM6OmNhbm9ucGF0aCgpIHByZXNlcnZlcyB0YWludAorCitQcmV2aW91c2x5IHRoZSB1bml4IHNwZWNpZmljIFhTIGltcGxlbWVudGF0aW9uIG9mIGNhbm9ucGF0aCgpIHdvdWxkCityZXR1cm4gYW4gdW50YWludGVkIHBhdGggd2hlbiBzdXBwbGllZCBhIHRhaW50ZWQgcGF0aC4KKworRm9yIHRoZSBlbXB0eSBzdHJpbmcgY2FzZSwgbmV3U1ZwdnMoKSBhbHJlYWR5IHNldHMgdGFpbnQgYXMgbmVlZGVkIG9uCitpdHMgcmVzdWx0LgorCitUaGlzIGlzc3VlIHdhcyBhc3NpZ25lZCBDVkUtMjAxNS04NjA3LiAgW3BlcmwgIzEyNjg2Ml0KKworQmFja3BvcnQgcGF0Y2ggZnJvbSBodHRwOi8vcGVybDUuZ2l0LnBlcmwub3JnL3BlcmwuZ2l0L2NvbW1pdGRpZmYvMGI2ZjkzMDM2ZGUxNzFjMTJiYTk1ZDQxNWUyNjRkOWNmN2Y0ZTFmZAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitDVkU6IENWRS0yMDE1LTg2MDcKK1NpZ25lZC1vZmYtYnk6IE1pbmdsaSBZdSA8TWluZ2xpLll1QHdpbmRyaXZlci5jb20+CistLS0KKyBkaXN0L1BhdGhUb29scy9Dd2QueHMgICAgfCAgMSArCisgZGlzdC9QYXRoVG9vbHMvdC90YWludC50IHwgMTkgKysrKysrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC9QYXRoVG9vbHMvQ3dkLnhzIGIvZGlzdC9QYXRoVG9vbHMvQ3dkLnhzCitpbmRleCA5ZDRkY2YwLi4zZDAxOGRjIDEwMDY0NAorLS0tIGEvZGlzdC9QYXRoVG9vbHMvQ3dkLnhzCisrKysgYi9kaXN0L1BhdGhUb29scy9Dd2QueHMKK0BAIC01MzUsNiArNTM1LDcgQEAgVEhYX3VuaXhfY2Fub25wYXRoKHBUSFhfIFNWICpwYXRoKQorICAgICAqbyA9IDA7CisgICAgIFN2UE9LX29uKHJldHZhbCk7CisgICAgIFN2Q1VSX3NldChyZXR2YWwsIG8gLSBTdlBWWChyZXR2YWwpKTsKKysgICAgU3ZUQUlOVChyZXR2YWwpOworICAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKK2RpZmYgLS1naXQgYS9kaXN0L1BhdGhUb29scy90L3RhaW50LnQgYi9kaXN0L1BhdGhUb29scy90L3RhaW50LnQKK2luZGV4IDMwOWIzZTUuLjQ4ZjhjNWIgMTAwNjQ0CistLS0gYS9kaXN0L1BhdGhUb29scy90L3RhaW50LnQKKysrKyBiL2Rpc3QvUGF0aFRvb2xzL3QvdGFpbnQudAorQEAgLTEyLDcgKzEyLDcgQEAgdXNlIFRlc3Q6Ok1vcmU7CisgQkVHSU4geworICAgICBwbGFuKAorICAgICAgICAgJHteVEFJTlR9CistICAgICAgICA/ICh0ZXN0cyA9PiAxNykKKysgICAgICAgID8gKHRlc3RzID0+IDIxKQorICAgICAgICAgOiAoc2tpcF9hbGwgPT4gIkEgcGVybCB3aXRob3V0IHRhaW50IHN1cHBvcnQiKQorICAgICApOworIH0KK0BAIC0zNCwzICszNCwyMCBAQCBmb3JlYWNoIG15ICRmdW5jIChARnVuY3Rpb25zKSB7CisgCisgIyBQcmV2aW91cyB2ZXJzaW9ucyBvZiBDd2QgdGFpbnRlZCAkXk8KKyBpcyAhdGFpbnRlZCgkXk8pLCAxLCAiXCReTyBzaG91bGQgbm90IGJlIHRhaW50ZWQiOworKworK3sKKysgICAgIyBbcGVybCAjMTI2ODYyXSBjYW5vbnBhdGgoKSBsb3NlcyB0YWludAorKyAgICBteSAkdGFpbnRlZCA9IHN1YnN0cigkRU5We1BBVEh9LCAwLCAwKTsKKysgICAgIyB5ZXMsIGdldGN3ZCgpJ3MgcmVzdWx0IHNob3VsZCBiZSB0YWludGVkLCBhbmQgaXMgdGVzdGVkIGFib3ZlCisrICAgICMgYnV0IGJlIHN1cmUKKysgICAgb2sgdGFpbnRlZChGaWxlOjpTcGVjLT5jYW5vbnBhdGgoJHRhaW50ZWQgLiBDd2Q6OmdldGN3ZCkpLAorKyAgICAgICAgImNhbm9ucGF0aCgpIGtlZXBzIHRhaW50IG9uIG5vbi1lbXB0eSBzdHJpbmciOworKyAgICBvayB0YWludGVkKEZpbGU6OlNwZWMtPmNhbm9ucGF0aCgkdGFpbnRlZCkpLAorKyAgICAgICAgImNhbm9ucGF0aCgpIGtlZXBzIHRhaW50IG9uIGVtcHR5IHN0cmluZyI7CisrCisrICAgIChDd2Q6OmdldGN3ZCgpID1+IC9eKC4qKS8pOworKyAgICBteSAkdW50YWludGVkID0gJDE7CisrICAgIG9rICF0YWludGVkKCR1bnRhaW50ZWQpLCAibWFrZSBzdXJlIG91ciB1bnRhaW50ZWQgdmFsdWUgaXMgdW50YWludGVkIjsKKysgICAgb2sgIXRhaW50ZWQoRmlsZTo6U3BlYy0+Y2Fub25wYXRoKCR1bnRhaW50ZWQpKSwKKysgICAgICAgICJjYW5vbnBhdGgoKSBkb2Vzbid0IGFkZCB0YWludCB0byB1bnRhaW50ZWQgc3RyaW5nIjsKKyt9CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTEyMzgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNi0xMjM4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGVmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNi0xMjM4LnBhdGNoCkBAIC0wLDAgKzEsMzUyIEBACitGcm9tIDk5ODdiZTNkMjQyODZkOTZkOWRjY2VjMDQzMzI1M2VlOGFkODk0YjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb255IENvb2sgPHRvbnlAZGV2ZWxvcC1oZWxwLmNvbT4KK0RhdGU6IFR1ZSwgMjEgSnVuIDIwMTYgMTA6MDI6MDIgKzEwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGVybDogZml4IENWRS0yMDE2LTEyMzgKKworKHBlcmwgIzEyNzgzNCkgcmVtb3ZlIC4gZnJvbSB0aGUgZW5kIG9mIEBJTkMgaWYgY29tcGxleCBtb2R1bGVzIGFyZSBsb2FkZWQKKworV2hpbGUgY3VycmVudGx5IEVuY29kZSBhbmQgU3RvcmFibGUgYXJlIGtub3cgdG8gYXR0ZW1wdCB0byBsb2FkIG1vZHVsZXMKK25vdCBpbmNsdWRlZCBpbiB0aGUgY29yZSwgdXBkYXRlcyB0byBvdGhlciBtb2R1bGVzIG1heSBsZWFkIHRvIHRob3NlCithbHNvIGF0dGVtcHRpbmcgdG8gbG9hZCBuZXcgbW9kdWxlcywgc28gYmUgc2FmZSBhbmQgcmVtb3ZlIC4gZm9yIHRob3NlCithcyB3ZWxsLgorCitCYWNrcG9ydCBwYXRjaCBmcm9tIGh0dHA6Ly9wZXJsNS5naXQucGVybC5vcmcvcGVybC5naXQvY29tbWl0ZGlmZi9jZWU5NmQ1MmMzOWIxZTdiMzZlMWM2MmQzOGJjZDhkODZlOWE0MWFiCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTYtMTIzOAorU2lnbmVkLW9mZi1ieTogTWluZ2xpIFl1IDxNaW5nbGkuWXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXIgICAgICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcmRpZmYgICAgICAgICAgICAgfCAxICsKKyBjcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyZ3JlcCAgICAgICAgICAgICB8IDEgKworIGNwYW4vQ1BBTi9zY3JpcHRzL2NwYW4gICAgICAgICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9EaWdlc3QtU0hBL3NoYXN1bSAgICAgICAgICAgICAgICAgICAgfCAxICsKKyBjcGFuL0VuY29kZS9iaW4vZW5jMnhzICAgICAgICAgICAgICAgICAgICB8IDEgKworIGNwYW4vRW5jb2RlL2Jpbi9lbmNndWVzcyAgICAgICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9FbmNvZGUvYmluL3BpY29udiAgICAgICAgICAgICAgICAgICAgfCAxICsKKyBjcGFuL0VuY29kZS9iaW4vdWNtbGludCAgICAgICAgICAgICAgICAgICB8IDEgKworIGNwYW4vRW5jb2RlL2Jpbi91bmlkdW1wICAgICAgICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaCAgICAgfCAxICsKKyBjcGFuL0lPLUNvbXByZXNzL2Jpbi96aXBkZXRhaWxzICAgICAgICAgICB8IDEgKworIGNwYW4vSlNPTi1QUC9iaW4vanNvbl9wcCAgICAgICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9UZXN0LUhhcm5lc3MvYmluL3Byb3ZlICAgICAgICAgICAgICAgfCAxICsKKyBkaXN0L0V4dFV0aWxzLVBhcnNlWFMvbGliL0V4dFV0aWxzL3hzdWJwcCB8IDEgKworIGRpc3QvTW9kdWxlLUNvcmVMaXN0L2NvcmVsaXN0ICAgICAgICAgICAgIHwgMSArCisgZXh0L1BvZC1IdG1sL2Jpbi9wb2QyaHRtbCAgICAgICAgICAgICAgICAgfCAxICsKKyB1dGlscy9jMnBoLlBMICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEgKworIHV0aWxzL2gycGguUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArKworIHV0aWxzL2gyeHMuUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArKworIHV0aWxzL2xpYm5ldGNmZy5QTCAgICAgICAgICAgICAgICAgICAgICAgIHwgMSArCisgdXRpbHMvcGVybGJ1Zy5QTCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxICsKKyB1dGlscy9wZXJsZG9jLlBMICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUgKysrKy0KKyB1dGlscy9wZXJsaXZwLlBMICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgKysKKyB1dGlscy9zcGxhaW4uUEwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYgKysrKysrCisgMjUgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhciBiL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXIKK2luZGV4IDBlYWZmYTcuLjlkYzY0MDIgMTAwNjQ0CistLS0gYS9jcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyCisrKysgYi9jcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyCitAQCAtMSw2ICsxLDcgQEAKKyAjIS91c3IvYmluL3BlcmwKKyB1c2Ugc3RyaWN0OworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2UgRmlsZTo6RmluZDsKKyB1c2UgR2V0b3B0OjpTdGQ7CisgdXNlIEFyY2hpdmU6OlRhcjsKK2RpZmYgLS1naXQgYS9jcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyZGlmZiBiL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXJkaWZmCitpbmRleCA2NmJkODU5Li40NjY4ZmE2IDEwMDY0NAorLS0tIGEvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcmRpZmYKKysrKyBiL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXJkaWZmCitAQCAtMSw1ICsxLDYgQEAKKyAjIS91c3IvYmluL3BlcmwKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2UgQXJjaGl2ZTo6VGFyOworIHVzZSBHZXRvcHQ6OlN0ZDsKK2RpZmYgLS1naXQgYS9jcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyZ3JlcCBiL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXJncmVwCitpbmRleCAxYTMyMGYxLi44ZGM2YjRmIDEwMDY0NAorLS0tIGEvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcmdyZXAKKysrKyBiL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXJncmVwCitAQCAtNCw2ICs0LDcgQEAKKyAjIGFyY2hpdmUuICBTZWUgJ3B0YXJncmVwIC0taGVscCcgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KKyAjCisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgdXNlIHdhcm5pbmdzOworIAorZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9zY3JpcHRzL2NwYW4gYi9jcGFuL0NQQU4vc2NyaXB0cy9jcGFuCitpbmRleCA1ZjQzMjBlLi5jY2JhNDdlIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL3NjcmlwdHMvY3BhbgorKysrIGIvY3Bhbi9DUEFOL3NjcmlwdHMvY3BhbgorQEAgLTEsNSArMSw2IEBACisgIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgdXNlIHZhcnMgcXcoJFZFUlNJT04pOworIAorZGlmZiAtLWdpdCBhL2NwYW4vRGlnZXN0LVNIQS9zaGFzdW0gYi9jcGFuL0RpZ2VzdC1TSEEvc2hhc3VtCitpbmRleCAxNGRkZDYwLi42MmEyYjBlIDEwMDY0NAorLS0tIGEvY3Bhbi9EaWdlc3QtU0hBL3NoYXN1bQorKysrIGIvY3Bhbi9EaWdlc3QtU0hBL3NoYXN1bQorQEAgLTEzLDYgKzEzLDcgQEAKKyAJIyMgIi0wIiBvcHRpb24gZm9yIHJlYWRpbmcgYml0IHN0cmluZ3MsIGFuZAorIAkjIyAiLXAiIG9wdGlvbiBmb3IgcG9ydGFibGUgZGlnZXN0cyAodG8gYmUgZGVwcmVjYXRlZCkuCisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgdXNlIHdhcm5pbmdzOworIHVzZSBGY250bDsKK2RpZmYgLS1naXQgYS9jcGFuL0VuY29kZS9iaW4vZW5jMnhzIGIvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworaW5kZXggNGQ2NGUzOC4uNDczYTE1YyAxMDA2NDQKKy0tLSBhL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMKKysrKyBiL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMKK0BAIC00LDYgKzQsNyBAQCBCRUdJTiB7CisgICAgICMgd2l0aCAkRU5We1BFUkxfQ09SRX0gc2V0CisgICAgICMgSW4gY2FzZSB3ZSBuZWVkIGl0IGluIGZ1dHVyZS4uLgorICAgICByZXF1aXJlIENvbmZpZzsgaW1wb3J0IENvbmZpZzsKKysgICAgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nOworIH0KKyB1c2Ugc3RyaWN0OworIHVzZSB3YXJuaW5nczsKK2RpZmYgLS1naXQgYS9jcGFuL0VuY29kZS9iaW4vZW5jZ3Vlc3MgYi9jcGFuL0VuY29kZS9iaW4vZW5jZ3Vlc3MKK2luZGV4IDVkN2FjODAuLjBiZTVjN2MgMTAwNjQ0CistLS0gYS9jcGFuL0VuY29kZS9iaW4vZW5jZ3Vlc3MKKysrKyBiL2NwYW4vRW5jb2RlL2Jpbi9lbmNndWVzcworQEAgLTEsNSArMSw2IEBACisgIyEuL3BlcmwKKyB1c2UgNS4wMDgwMDE7CisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgdXNlIHdhcm5pbmdzOworIHVzZSBFbmNvZGU7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FbmNvZGUvYmluL3BpY29udiBiL2NwYW4vRW5jb2RlL2Jpbi9waWNvbnYKK2luZGV4IGMxZGFkOWUuLjYwYjJhNTkgMTAwNjQ0CistLS0gYS9jcGFuL0VuY29kZS9iaW4vcGljb252CisrKysgYi9jcGFuL0VuY29kZS9iaW4vcGljb252CitAQCAtMSw2ICsxLDcgQEAKKyAjIS4vcGVybAorICMgJElkOiBwaWNvbnYsdiAyLjcgMjAxNC8wNS8zMSAwOTo0ODo0OCBkYW5rb2dhaSBFeHAgJAorICMKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIDUuOC4wOworIHVzZSBzdHJpY3Q7CisgdXNlIEVuY29kZSA7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FbmNvZGUvYmluL3VjbWxpbnQgYi9jcGFuL0VuY29kZS9iaW4vdWNtbGludAoraW5kZXggNjIyMzc2ZC4uMjVlMGQ2NyAxMDA2NDQKKy0tLSBhL2NwYW4vRW5jb2RlL2Jpbi91Y21saW50CisrKysgYi9jcGFuL0VuY29kZS9iaW4vdWNtbGludAorQEAgLTMsNiArMyw3IEBACisgIyAkSWQ6IHVjbWxpbnQsdiAyLjIgMjAwOC8wMy8xMiAwOTo1MToxMSBkYW5rb2dhaSBFeHAgJAorICMKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyBvdXIgICRWRVJTSU9OID0gZG8geyBteSBAciA9IChxJFJldmlzaW9uOiAyLjIgJCA9fiAvXGQrL2cpOyBzcHJpbnRmICIlZC4iLiIlMDJkIiB4ICQjciwgQHIgfTsKKyAKK2RpZmYgLS1naXQgYS9jcGFuL0VuY29kZS9iaW4vdW5pZHVtcCBiL2NwYW4vRW5jb2RlL2Jpbi91bmlkdW1wCitpbmRleCBhZTBkYTMwLi5mMTkwODI3IDEwMDY0NAorLS0tIGEvY3Bhbi9FbmNvZGUvYmluL3VuaWR1bXAKKysrKyBiL2NwYW4vRW5jb2RlL2Jpbi91bmlkdW1wCitAQCAtMSw1ICsxLDYgQEAKKyAjIS4vcGVybAorIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugc3RyaWN0OworIHVzZSBFbmNvZGU7CisgdXNlIEdldG9wdDo6U3RkOworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2ggYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCitpbmRleCBlNTUxNDM0Li5iM2IxMDlmIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaAorQEAgLTEsNSArMSw2IEBACisgIyEvdXNyL2Jpbi9wZXJsIC13CisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgdXNlIElPOjpGaWxlOworIHVzZSBFeHRVdGlsczo6UGFja2xpc3Q7CitkaWZmIC0tZ2l0IGEvY3Bhbi9JTy1Db21wcmVzcy9iaW4vemlwZGV0YWlscyBiL2NwYW4vSU8tQ29tcHJlc3MvYmluL3ppcGRldGFpbHMKK2luZGV4IDAyNDk4NTAuLjFiOWM3MGEgMTAwNjQ0CistLS0gYS9jcGFuL0lPLUNvbXByZXNzL2Jpbi96aXBkZXRhaWxzCisrKysgYi9jcGFuL0lPLUNvbXByZXNzL2Jpbi96aXBkZXRhaWxzCitAQCAtNSw2ICs1LDcgQEAKKyAjIERpc3BsYXkgaW5mbyBvbiB0aGUgY29udGVudHMgb2YgYSBaaXAgZmlsZQorICMKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3MgOworIAorZGlmZiAtLWdpdCBhL2NwYW4vSlNPTi1QUC9iaW4vanNvbl9wcCBiL2NwYW4vSlNPTi1QUC9iaW4vanNvbl9wcAoraW5kZXggZGY5ZDI0My4uODk2Y2QyZiAxMDA2NDQKKy0tLSBhL2NwYW4vSlNPTi1QUC9iaW4vanNvbl9wcAorKysrIGIvY3Bhbi9KU09OLVBQL2Jpbi9qc29uX3BwCitAQCAtMSw1ICsxLDYgQEAKKyAjIS91c3IvYmluL3BlcmwKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2UgR2V0b3B0OjpMb25nOworIAorZGlmZiAtLWdpdCBhL2NwYW4vVGVzdC1IYXJuZXNzL2Jpbi9wcm92ZSBiL2NwYW4vVGVzdC1IYXJuZXNzL2Jpbi9wcm92ZQoraW5kZXggNjYzN2NjNC4uZDcxYjIzOCAxMDA2NDQKKy0tLSBhL2NwYW4vVGVzdC1IYXJuZXNzL2Jpbi9wcm92ZQorKysrIGIvY3Bhbi9UZXN0LUhhcm5lc3MvYmluL3Byb3ZlCitAQCAtMSw1ICsxLDYgQEAKKyAjIS91c3IvYmluL3BlcmwgLXcKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3M7CisgdXNlIEFwcDo6UHJvdmU7CitkaWZmIC0tZ2l0IGEvZGlzdC9FeHRVdGlscy1QYXJzZVhTL2xpYi9FeHRVdGlscy94c3VicHAgYi9kaXN0L0V4dFV0aWxzLVBhcnNlWFMvbGliL0V4dFV0aWxzL3hzdWJwcAoraW5kZXggZTJhYzcxYS4uZDU5NmNkZiAxMDA2NDQKKy0tLSBhL2Rpc3QvRXh0VXRpbHMtUGFyc2VYUy9saWIvRXh0VXRpbHMveHN1YnBwCisrKysgYi9kaXN0L0V4dFV0aWxzLVBhcnNlWFMvbGliL0V4dFV0aWxzL3hzdWJwcAorQEAgLTEsNSArMSw2IEBACisgIyFwZXJsCisgdXNlIDUuMDA2OworK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugc3RyaWN0OworIGV2YWwgeworICAgcmVxdWlyZSBFeHRVdGlsczo6UGFyc2VYUzsKK2RpZmYgLS1naXQgYS9kaXN0L01vZHVsZS1Db3JlTGlzdC9jb3JlbGlzdCBiL2Rpc3QvTW9kdWxlLUNvcmVMaXN0L2NvcmVsaXN0CitpbmRleCBhYTRhOTQ1Li5iYmU2MWNjIDEwMDY0NAorLS0tIGEvZGlzdC9Nb2R1bGUtQ29yZUxpc3QvY29yZWxpc3QKKysrKyBiL2Rpc3QvTW9kdWxlLUNvcmVMaXN0L2NvcmVsaXN0CitAQCAtMTMwLDYgKzEzMCw3IEBAIHJlcXVlc3RlZCBwZXJsIHZlcnNpb25zLgorIAorID1jdXQKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIE1vZHVsZTo6Q29yZUxpc3Q7CisgdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2lnbm9yZV9jYXNlKTsKKyB1c2UgUG9kOjpVc2FnZTsKK2RpZmYgLS1naXQgYS9leHQvUG9kLUh0bWwvYmluL3BvZDJodG1sIGIvZXh0L1BvZC1IdG1sL2Jpbi9wb2QyaHRtbAoraW5kZXggYjAyMjg1OS4uN2QxZDIzMiAxMDA2NDQKKy0tLSBhL2V4dC9Qb2QtSHRtbC9iaW4vcG9kMmh0bWwKKysrKyBiL2V4dC9Qb2QtSHRtbC9iaW4vcG9kMmh0bWwKK0BAIC0yMTYsNiArMjE2LDcgQEAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBBcnRpc3RpYyBMaWNlbnNlLgorIAorID1jdXQKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIFBvZDo6SHRtbDsKKyAKKyBwb2QyaHRtbCBAQVJHVjsKK2RpZmYgLS1naXQgYS91dGlscy9jMnBoLlBMIGIvdXRpbHMvYzJwaC5QTAoraW5kZXggMTMzODllYy4uY2VmMGI1YyAxMDA2NDQKKy0tLSBhL3V0aWxzL2MycGguUEwKKysrKyBiL3V0aWxzL2MycGguUEwKK0BAIC0yODAsNiArMjgwLDcgQEAgQW55d2F5LCBoZXJlIGl0IGlzLiAgU2hvdWxkIHJ1biBvbiBwZXJsIHY0IG9yIGdyZWF0ZXIuICBNYXliZSBsZXNzLgorIAorICRSQ1NJRCA9ICckSWQ6IGMycGgsdiAxLjcgOTUvMTAvMjggMTA6NDE6NDcgdGNocmlzdCBFeHAgTG9ja2VyOiB0Y2hyaXN0ICQnOworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2UgRmlsZTo6VGVtcDsKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitkaWZmIC0tZ2l0IGEvdXRpbHMvaDJwaC5QTCBiL3V0aWxzL2gycGguUEwKK2luZGV4IDU1YzFmNzIuLjMwMGI3NTYgMTAwNjQ0CistLS0gYS91dGlscy9oMnBoLlBMCisrKysgYi91dGlscy9oMnBoLlBMCitAQCAtMzYsNiArMzYsOCBAQCAkQ29uZmlne3N0YXJ0cGVybH0KKyAKKyBwcmludCBPVVQgPDwnIU5PIVNVQlMhJzsKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisrCisgdXNlIHN0cmljdDsKKyAKKyB1c2UgQ29uZmlnOworZGlmZiAtLWdpdCBhL3V0aWxzL2gyeHMuUEwgYi91dGlscy9oMnhzLlBMCitpbmRleCAyNjhmNjgwLi5mOTVlZTBjIDEwMDY0NAorLS0tIGEvdXRpbHMvaDJ4cy5QTAorKysrIGIvdXRpbHMvaDJ4cy5QTAorQEAgLTM1LDYgKzM1LDggQEAgJENvbmZpZ3tzdGFydHBlcmx9CisgCisgcHJpbnQgT1VUIDw8JyFOTyFTVUJTISc7CisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorKworIHVzZSB3YXJuaW5nczsKKyAKKyA9aGVhZDEgTkFNRQorZGlmZiAtLWdpdCBhL3V0aWxzL2xpYm5ldGNmZy5QTCBiL3V0aWxzL2xpYm5ldGNmZy5QTAoraW5kZXggNTlhMmRlOC4uMjZkMmY5OSAxMDA2NDQKKy0tLSBhL3V0aWxzL2xpYm5ldGNmZy5QTAorKysrIGIvdXRpbHMvbGlibmV0Y2ZnLlBMCitAQCAtOTcsNiArOTcsNyBAQCBKYXJra28gSGlldGFuaWVtaSwgY29udmVyc2lvbiBpbnRvIGxpYm5ldGNmZyBmb3IgaW5jbHVzaW9uIGludG8gUGVybCA1LjguCisgCisgIyAkSWQ6IENvbmZpZ3VyZSx2IDEuOCAxOTk3LzAzLzA0IDA5OjIyOjMyIGdiYXJyIEV4cCAkCisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgdXNlIElPOjpGaWxlOworIHVzZSBHZXRvcHQ6OlN0ZDsKK2RpZmYgLS1naXQgYS91dGlscy9wZXJsYnVnLlBMIGIvdXRpbHMvcGVybGJ1Zy5QTAoraW5kZXggODg1Nzg1YS4uYWU4YzM0MyAxMDA2NDQKKy0tLSBhL3V0aWxzL3BlcmxidWcuUEwKKysrKyBiL3V0aWxzL3BlcmxidWcuUEwKK0BAIC01Nyw2ICs1Nyw3IEBAIHByaW50IE9VVCA8PCchTk8hU1VCUyEnOworIG15IEBwYXRjaGVzID0gQ29uZmlnOjpsb2NhbF9wYXRjaGVzKCk7CisgbXkgJHBhdGNoX3RhZ3MgPSBqb2luICIiLCBtYXAgLyhcUyspLyA/ICIrJDEgIiA6ICgpLCBAcGF0Y2hlczsKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHdhcm5pbmdzOworIHVzZSBzdHJpY3Q7CisgdXNlIENvbmZpZzsKK2RpZmYgLS1naXQgYS91dGlscy9wZXJsZG9jLlBMIGIvdXRpbHMvcGVybGRvYy5QTAoraW5kZXggZTIwMWRlOS4uY2Q2MGJkNCAxMDA2NDQKKy0tLSBhL3V0aWxzL3Blcmxkb2MuUEwKKysrKyBiL3V0aWxzL3Blcmxkb2MuUEwKK0BAIC00NCw3ICs0NCwxMCBAQCAkQ29uZmlne3N0YXJ0cGVybH0KKyAjIFRoaXMgIiRmaWxlIiBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgIiQwIgorIAorIHJlcXVpcmUgNTsKKy1CRUdJTiB7IFwkXlcgPSAxIGlmIFwkRU5WeydQRVJMRE9DREVCVUcnfSB9CisrQkVHSU4geworKyAgICBcJF5XID0gMSBpZiBcJEVOVnsnUEVSTERPQ0RFQlVHJ307CisrICAgIHBvcCBcQElOQyBpZiBcJElOQ1stMV0gZXEgJy4nOworK30KKyB1c2UgUG9kOjpQZXJsZG9jOworIGV4aXQoIFBvZDo6UGVybGRvYy0+cnVuKCkgKTsKKyAKK2RpZmYgLS1naXQgYS91dGlscy9wZXJsaXZwLlBMIGIvdXRpbHMvcGVybGl2cC5QTAoraW5kZXggY2M0OWY5Ni4uNjk2YTQ0ZSAxMDA2NDQKKy0tLSBhL3V0aWxzL3BlcmxpdnAuUEwKKysrKyBiL3V0aWxzL3BlcmxpdnAuUEwKK0BAIC0zOSw2ICszOSw4IEBAIHByaW50IE9VVCAiXG4jIHBlcmxpdnAgJF5WXG4iOworIAorIHByaW50IE9VVCA8PCchTk8hU1VCUyEnOworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKysKKyBzdWIgdXNhZ2UgeworICAgICB3YXJuICJAX1xuIiBpZiBAXzsKKyAgICAgcHJpbnQgPDwgIiAgICBFT1VTQUdFIjsKK2RpZmYgLS1naXQgYS91dGlscy9zcGxhaW4uUEwgYi91dGlscy9zcGxhaW4uUEwKK2luZGV4IDljNzBiNjEuLmNhZTg0YTAgMTAwNjQ0CistLS0gYS91dGlscy9zcGxhaW4uUEwKKysrKyBiL3V0aWxzL3NwbGFpbi5QTAorQEAgLTM4LDYgKzM4LDEyIEBAICRDb25maWd7c3RhcnRwZXJsfQorIAlpZiBcJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKKyAhR1JPSyFUSElTIQorIAorK3ByaW50IDw8JyFOTyFTVUJTISc7CisrCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorKworKyFOTyFTVUJTIQorKworIHdoaWxlICg8SU4+KSB7CisgICAgIHByaW50IE9VVCB1bmxlc3MgL15wYWNrYWdlIGRpYWdub3N0aWNzLzsKKyB9CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTIzODEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNi0yMzgxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZmE4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNi0yMzgxLnBhdGNoCkBAIC0wLDAgKzEsMTE0IEBACitDVkU6IENWRS0yMDE2LTIzODEKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQmFja3BvcnQgcGF0Y2ggdG8gZml4IENWRS0yMDE2LTIzODEgZnJvbQorCitodHRwOi8vcGVybDUuZ2l0LnBlcmwub3JnL3BlcmwuZ2l0L2NvbW1pdGRpZmYvYWUzN2I3OTFhNzNhOWU3OGRlZGI4OWZiMjQyOWQyNjI4Y2Y1ODA3NgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbTogVG9ueSBDb29rIDx0b255QGRldmVsb3AtaGVscC5jb20+CitEYXRlOiBXZWQsIDI3IEphbiAyMDE2IDAwOjUyOjE1ICswMDAwICgrMTEwMCkKK1N1YmplY3Q6IHJlbW92ZSBkdXBsaWNhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gZW52aXJvbgorWC1HaXQtVGFnOiB2NS4yMy45fjE3MAorWC1HaXQtVXJsOiBodHRwOi8vcGVybDUuZ2l0LnBlcmwub3JnL3BlcmwuZ2l0L2NvbW1pdGRpZmZfcGxhaW4vYWUzN2I3OTFhNzNhOWU3OGRlZGI4OWZiMjQyOWQyNjI4Y2Y1ODA3NgorCityZW1vdmUgZHVwbGljYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIGVudmlyb24KKworSWYgd2Ugc2VlIGR1cGxpY2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpbGUgaXRlcmF0aW5nIG92ZXIKK2Vudmlyb25bXToKKworYSkgbWFrZSBzdXJlIHdlIHVzZSB0aGUgc2FtZSB2YWx1ZSBpbiAlRU5WIHRoYXQgZ2V0ZW52KCkgcmV0dXJucy4KKworUHJldmlvdXNseSBvbiBhIGR1cGxpY2F0ZSwgJUVOViB3b3VsZCBoYXZlIHRoZSBsYXN0IGVudHJ5IGZvciB0aGUgbmFtZQorZnJvbSBlbnZpcm9uW10sIGJ1dCBhIHR5cGljYWwgZ2V0ZW52KCkgd291bGQgcmV0dXJuIHRoZSBmaXJzdCBlbnRyeS4KKworUmF0aGVyIHRoYW4gYXNzdW1pbmcgYWxsIGdldGVudigpIGltcGxlbWVudGF0aW9ucyByZXR1cm4gdGhlIGZpcnN0IGVudHJ5CitleHBsaWNpdGx5IGNhbGwgZ2V0ZW52KCkgdG8gZW5zdXJlIHRoZXkgYWdyZWUuCisKK2IpIHJlbW92ZSBkdXBsaWNhdGUgZW50cmllcyBmcm9tIGVudmlyb24KKworUHJldmlvdXNseSBpZiB0aGVyZSB3YXMgYSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBmb3IgYSBuYW1lIGluIGVudmlyb25bXQorc2V0dGluZyB0aGF0IG5hbWUgaW4gJUVOViBjb3VsZCByZXN1bHQgaW4gYW4gdW5zYWZlIHZhbHVlIGJlaW5nIHBhc3NlZAordG8gYSBjaGlsZCBwcm9jZXNzLCBzbyBlbnN1cmUgZW52aXJvbltdIGhhcyBubyBkdXBsaWNhdGVzLgorCitDVkUtMjAxNi0yMzgxCistLS0KKworZGlmZiAtLWdpdCBhL3BlcmwuYyBiL3BlcmwuYworaW5kZXggNGEzMjRjNi4uNWM3MWZkMCAxMDA2NDQKKy0tLSBhL3BlcmwuYworKysrIGIvcGVybC5jCitAQCAtNDMyOSwyMyArNDMyOSw3MCBAQCBTX2luaXRfcG9zdGR1bXBfc3ltYm9scyhwVEhYXyBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYpCisgCX0KKyAJaWYgKGVudikgeworIAkgIGNoYXIgKnMsICpvbGRfdmFyOworKyAgICAgICAgICBTVFJMRU4gbmxlbjsKKyAJICBTViAqc3Y7CisrICAgICAgICAgIEhWICpkdXBzID0gbmV3SFYoKTsKKysKKyAJICBmb3IgKDsgKmVudjsgZW52KyspIHsKKyAJICAgIG9sZF92YXIgPSAqZW52OworIAorIAkgICAgaWYgKCEocyA9IHN0cmNocihvbGRfdmFyLCc9JykpIHx8IHMgPT0gb2xkX3ZhcikKKyAJCWNvbnRpbnVlOworKyAgICAgICAgICAgIG5sZW4gPSBzIC0gb2xkX3ZhcjsKKyAKKyAjaWYgZGVmaW5lZChNU0RPUykgJiYgIWRlZmluZWQoREpHUFApCisgCSAgICAqcyA9ICdcMCc7CisgCSAgICAodm9pZClzdHJ1cHIob2xkX3Zhcik7CisgCSAgICAqcyA9ICc9JzsKKyAjZW5kaWYKKy0JICAgIHN2ID0gbmV3U1ZwdihzKzEsIDApOworLQkgICAgKHZvaWQpaHZfc3RvcmUoaHYsIG9sZF92YXIsIHMgLSBvbGRfdmFyLCBzdiwgMCk7CisrICAgICAgICAgICAgaWYgKGh2X2V4aXN0cyhodiwgb2xkX3ZhciwgbmxlbikpIHsKKysgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHNhdmVwdm4ob2xkX3Zhciwgbmxlbik7CisrCisrICAgICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSB1c2UgdGhlIHNhbWUgdmFsdWUgYXMgZ2V0ZW52KCksIG90aGVyd2lzZSBjb2RlIHRoYXQKKysgICAgICAgICAgICAgICAgICAgdXNlcyBnZXRlbnYoKSAobGlrZSBzZXRsb2NhbGUoKSkgbWlnaHQgc2VlIGEgZGlmZmVyZW50IHZhbHVlIHRvICVFTlYKKysgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgIHN2ID0gbmV3U1ZwdihQZXJsRW52X2dldGVudihuYW1lKSwgMCk7CisrCisrICAgICAgICAgICAgICAgIC8qIGtlZXAgYSBjb3VudCBvZiB0aGUgZHVwcyBvZiB0aGlzIG5hbWUgc28gd2UgY2FuIGRlLWR1cCBlbnZpcm9uIGxhdGVyICovCisrICAgICAgICAgICAgICAgIGlmIChodl9leGlzdHMoZHVwcywgbmFtZSwgbmxlbikpCisrICAgICAgICAgICAgICAgICAgICArK1N2SVZYKCpodl9mZXRjaChkdXBzLCBuYW1lLCBubGVuLCAwKSk7CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICh2b2lkKWh2X3N0b3JlKGR1cHMsIG5hbWUsIG5sZW4sIG5ld1NWaXYoMSksIDApOworKworKyAgICAgICAgICAgICAgICBTYWZlZnJlZShuYW1lKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHN2ID0gbmV3U1ZwdihzKzEsIDApOworKyAgICAgICAgICAgIH0KKysJICAgICh2b2lkKWh2X3N0b3JlKGh2LCBvbGRfdmFyLCBubGVuLCBzdiwgMCk7CisgCSAgICBpZiAoZW52X2lzX25vdF9lbnZpcm9uKQorIAkgICAgICAgIG1nX3NldChzdik7CisgCSAgfQorKyAgICAgICAgICBpZiAoSHZLRVlTKGR1cHMpKSB7CisrICAgICAgICAgICAgICAvKiBlbnZpcm9uIGhhcyBzb21lIGR1cGxpY2F0ZSBkZWZpbml0aW9ucywgcmVtb3ZlIHRoZW0gKi8KKysgICAgICAgICAgICAgIEhFICplbnRyeTsKKysgICAgICAgICAgICAgIGh2X2l0ZXJpbml0KGR1cHMpOworKyAgICAgICAgICAgICAgd2hpbGUgKChlbnRyeSA9IGh2X2l0ZXJuZXh0X2ZsYWdzKGR1cHMsIDApKSkgeworKyAgICAgICAgICAgICAgICAgIFNUUkxFTiBubGVuOworKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBIZVBWKGVudHJ5LCBubGVuKTsKKysgICAgICAgICAgICAgICAgICBJViBjb3VudCA9IFN2SVYoSGVWQUwoZW50cnkpKTsKKysgICAgICAgICAgICAgICAgICBJViBpOworKyAgICAgICAgICAgICAgICAgIFNWICoqdmFscCA9IGh2X2ZldGNoKGh2LCBuYW1lLCBubGVuLCAwKTsKKysKKysgICAgICAgICAgICAgICAgICBhc3NlcnQodmFscCk7CisrCisrICAgICAgICAgICAgICAgICAgLyogdHJ5IHRvIHJlbW92ZSBhbnkgZHVwbGljYXRlIG5hbWVzLCBkZXBlbmRpbmcgb24gdGhlCisrICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gdXNlZCBpbiBteV9zZXRlbnYoKSB0aGUgaXRlcmF0aW9uIG1pZ2h0CisrICAgICAgICAgICAgICAgICAgICogbm90IGJlIG5lY2Vzc2FyeSwgYnV0IGxldCdzIGJlIHNhZmUuCisrICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisrICAgICAgICAgICAgICAgICAgICAgIG15X3NldGVudihuYW1lLCAwKTsKKysKKysgICAgICAgICAgICAgICAgICAvKiBhbmQgc2V0IGl0IGJhY2sgdG8gdGhlIHZhbHVlIHdlIHNldCAkRU5We25hbWV9IHRvICovCisrICAgICAgICAgICAgICAgICAgbXlfc2V0ZW52KG5hbWUsIFN2UFZfbm9sZW4oKnZhbHApKTsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgfQorKyAgICAgICAgICBTdlJFRkNOVF9kZWNfTk4oZHVwcyk7CisgICAgICAgfQorICNlbmRpZiAvKiBVU0VfRU5WSVJPTl9BUlJBWSAqLworICNlbmRpZiAvKiAhUEVSTF9NSUNSTyAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtQ1ZFLTIwMTYtNjE4NS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTYxODUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMmFmMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTYxODUucGF0Y2gKQEAgLTAsMCArMSwxMjggQEAKK0Zyb20gN2NlZGFhOGJjMmNhOWU2MzM2OWQwZTJkNGM0YzIzYWY5ZmViYjkzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhdGhlciBDaHJ5c29zdG9tb3MgPHNwcm91dEBjcGFuLm9yZz4KK0RhdGU6IFNhdCwgMiBKdWwgMjAxNiAyMjo1Njo1MSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBwZXJsOiBmaXggQ1ZFLTIwMTYtNjE4NQorTUlNRS1WZXJzaW9uOiAxLjAKKworRG9uJ3QgbGV0IFhTTG9hZGVyIGxvYWQgcmVsYXRpdmUgcGF0aHMKKworW3J0LmNwYW4ub3JnICMxMTU4MDhdCisKK1RoZSBsb2dpYyBpbiBYU0xvYWRlciBmb3IgZGV0ZXJtaW5pbmcgdGhlIGxpYnJhcnkgZ29lcyBsaWtlIHRoaXM6CisKKyAgICBteSAkYyA9ICgpID0gc3BsaXQoLzo6LywkY2FsbGVyLC0xKTsKKyAgICAkbW9kbGlibmFtZSA9fiBzLFtcXC9dW15cXC9dKyQsLCB3aGlsZSAkYy0tOyAgICAjIFEmRCBiYXNlbmFtZQorICAgIG15ICRmaWxlID0gIiRtb2RsaWJuYW1lL2F1dG8vJG1vZHBuYW1lLyRtb2RmbmFtZS5idW5kbGUiOworCisoVGhhdCBsYXN0IGxpbmUgdmFyaWVzIGJ5IHBsYXRmb3JtLikKKworJGNhbGxlciBpcyB0aGUgY2FsbGluZyBwYWNrYWdlLiAgJG1vZGxpYm5hbWUgaXMgdGhlIGNhbGxpbmcgZmlsZS4gIEl0CityZW1vdmVzIGFzIG1hbnkgcGF0aCBzZWdtZW50cyBmcm9tICRtb2RsaWJuYW1lIGFzIHRoZXJlIGFyZSBzZWdtZW50cworaW4gJGNhbGxlci4gIFNvIGlmIHlvdSBoYXZlIEZvby9CYXIvWFMucG0gY2FsbGluZyBYU0xvYWRlciBmcm9tIHRoZQorRm9vOjpCYXIgcGFja2FnZSwgdGhlICRtb2RsaWJuYW1lIHdpbGwgZW5kIHVwIGNvbnRhaW5pbmcgdGhlIHBhdGggaW4KK0BJTkMgd2hlcmUgWFMucG0gd2FzIGZvdW5kLCBmb2xsb3dlZCBieSAiL0ZvbyIuICBVc3VhbGx5IHRoZSBmYWxsYmFjawordG8gRHluYWxvYWRlcjo6Ym9vdHN0cmFwX2luaGVyaXQsIHdoaWNoIGRvZXMgYW4gQElOQyBzZWFyY2gsIG1ha2VzCit0aGluZ3MgSnVzdCBXb3JrLgorCitCdXQgaWYgb3VyIGh5cG90aGV0aWNhbCBGb28vQmFyL1hTLnBtIGFjdHVhbGx5IGNhbGxzCitYU0xvYWRlcjo6bG9hZCBmcm9tIGluc2lkZSBhIHN0cmluZyBldmFsLCB0aGVuIHBhdGggZW5kcyB1cCBiZWluZworIihldmFsIDEpL2F1dG8vRm9vL0Jhci9CYXIuYnVuZGxlIi4KKworU28gaWYgc29tZW9uZSBjcmVhdGVzIGEgZGlyZWN0b3J5IG5hbWVkICcoZXZhbCAxKScgd2l0aCBhIG5hdWdodHkKK2JpbmFyeSBmaWxlIGluIGl0LCBpdCB3aWxsIGJlIGxvYWRlZCBpZiBhIHNjcmlwdCB1c2luZyBGb286OkJhciBpcyBydW4KK2luIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorCitUaGlzIGNvbW1pdCBtYWtlcyBYU0xvYWRlciBmYWxsIGJhY2sgdG8gRHluYWxvYWRlcidzIEBJTkMgc2VhcmNoIGlmCit0aGUgY2FsbGluZyBmaWxlIGhhcyBhIHJlbGF0aXZlIHBhdGggdGhhdCBpcyBub3QgZm91bmQgaW4gQElOQy4KKworQmFja3BvcnQgcGF0Y2ggZnJvbSBodHRwOi8vcGVybDUuZ2l0LnBlcmwub3JnL3BlcmwuZ2l0L2NvbW1pdGRpZmYvMDhlMzQ1MWQ3CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTYtNjE4NQorU2lnbmVkLW9mZi1ieTogTWluZ2xpIFl1IDxNaW5nbGkuWXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCisgZGlzdC9YU0xvYWRlci90L1hTTG9hZGVyLnQgICB8IDI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC9YU0xvYWRlci9YU0xvYWRlcl9wbS5QTCBiL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKK2luZGV4IDY2ODQxMWQuLjc3OGU0NmIgMTAwNjQ0CistLS0gYS9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCisrKysgYi9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCitAQCAtMTA0LDYgKzEwNCwzMSBAQCBwcmludCBPVVQgPDwnRU9UJzsKKyAgICAgbXkgJG1vZHBuYW1lID0gam9pbignLycsQG1vZHBhcnRzKTsKKyAgICAgbXkgJGMgPSAoKSA9IHNwbGl0KC86Oi8sJGNhbGxlciwtMSk7CisgICAgICRtb2RsaWJuYW1lID1+IHMsW1xcL11bXlxcL10rJCwsIHdoaWxlICRjLS07ICAgICMgUSZEIGJhc2VuYW1lCisrICAgICMgRG9lcyB0aGlzIGxvb2sgbGlrZSBhIHJlbGF0aXZlIHBhdGg/CisrICAgIGlmICgkbW9kbGlibmFtZSAhfiBtfF5bXFwvXXwpIHsKKysgICAgICAgICMgU29tZW9uZSBtYXkgaGF2ZSBhICNsaW5lIGRpcmVjdGl2ZSB0aGF0IGNoYW5nZXMgdGhlIGZpbGUgbmFtZSwgb3IKKysgICAgICAgICMgbWF5IGJlIGNhbGxpbmcgWFNMb2FkZXI6OmxvYWQgZnJvbSBpbnNpZGUgYSBzdHJpbmcgZXZhbC4gIFdlIGNlci0KKysgICAgICAgICMgdGFpbmx5IGRvIG5vdCB3YW50IHRvIGdvIGxvYWRpbmcgc29tZSBjb2RlIHRoYXQgaXMgbm90IGluIEBJTkMsCisrICAgICAgICAjIGFzIGl0IGNvdWxkIGJlIHVudHJ1c3RlZC4KKysgICAgICAgICMKKysgICAgICAgICMgV2UgY291bGQganVzdCBmYWxsIGJhY2sgdG8gRHluYUxvYWRlciBoZXJlLCBidXQgdGhlbiB0aGUgcmVzdCBvZgorKyAgICAgICAgIyB0aGlzIGZ1bmN0aW9uIHdvdWxkIGdvIHVudGVzdGVkIGluIHRoZSBwZXJsIGNvcmUsIHNpbmNlIGFsbCBASU5DCisrICAgICAgICAjIHBhdGhzIGFyZSByZWxhdGl2ZSBkdXJpbmcgdGVzdGluZy4gIFRoYXQgd291bGQgYmUgYSB0aW1lIGJvbWIKKysgICAgICAgICMgd2FpdGluZyB0byBoYXBwZW4sIHNpbmNlIGJ1Z3MgY291bGQgYmUgaW50cm9kdWNlZCBpbnRvIHRoZSBjb2RlLgorKyAgICAgICAgIworKyAgICAgICAgIyBTbyBsb29rIHRocm91Z2ggQElOQyB0byBzZWUgaWYgJG1vZGxpYm5hbWUgaXMgaW4gaXQuICBBIHJlbGEtCisrICAgICAgICAjIHRpdmUgJG1vZGxpYm5hbWUgaXMgbm90IGEgY29tbW9uIG9jY3VycmVuY2UsIHNvIHRoaXMgYmxvY2sgaXMKKysgICAgICAgICMgbm90IGhvdCBjb2RlLgorKyAgICAgICAgRk9VTkQ6IHsKKysgICAgICAgICAgICBmb3IgKEBJTkMpIHsKKysgICAgICAgICAgICAgICAgaWYgKCRfIGVxICRtb2RsaWJuYW1lKSB7CisrICAgICAgICAgICAgICAgICAgICBsYXN0IEZPVU5EOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgICMgTm90IGZvdW5kLiAgRmFsbCBiYWNrIHRvIER5bmFMb2FkZXIuCisrICAgICAgICAgICAgZ290byBcJlhTTG9hZGVyOjpib290c3RyYXBfaW5oZXJpdDsKKysgICAgICAgIH0KKysgICAgfQorIEVPVAorIAorIG15ICRkbF9kbGV4dCA9IHF1b3RlbWV0YSgkQ29uZmlnOjpDb25maWd7J2RsZXh0J30pOworZGlmZiAtLWdpdCBhL2Rpc3QvWFNMb2FkZXIvdC9YU0xvYWRlci50IGIvZGlzdC9YU0xvYWRlci90L1hTTG9hZGVyLnQKK2luZGV4IDJmZjExZmUuLjFlODZmYWEgMTAwNjQ0CistLS0gYS9kaXN0L1hTTG9hZGVyL3QvWFNMb2FkZXIudAorKysrIGIvZGlzdC9YU0xvYWRlci90L1hTTG9hZGVyLnQKK0BAIC0zMyw3ICszMyw3IEBAIG15ICVtb2R1bGVzID0gKAorICAgICAnVGltZTo6SGlSZXMnPT4gcXwgOjpjYW5fb2soICdUaW1lOjpIaVJlcycgPT4gJ3VzbGVlcCcgICkgfCwgICMgNS43LjMKKyApOworIAorLXBsYW4gdGVzdHMgPT4ga2V5cyglbW9kdWxlcykgKiAzICsgOTsKKytwbGFuIHRlc3RzID0+IGtleXMoJW1vZHVsZXMpICogMyArIDEwOworIAorICMgVHJ5IHRvIGxvYWQgdGhlIG1vZHVsZQorIHVzZV9vayggJ1hTTG9hZGVyJyApOworQEAgLTEyNSwzICsxMjUsMjggQEAgWFNMb2FkZXI6OmxvYWQoIkRldmVsOjpQZWVrIik7CisgRU9TCisgICAgIG9yIDo6ZGlhZyAkQDsKKyB9CisrCisrU0tJUDogeworKyAgc2tpcCAiRmlsZTo6UGF0aCBub3QgYXZhaWxhYmxlIiwgMQorKyAgICB1bmxlc3MgZXZhbCB7IHJlcXVpcmUgRmlsZTo6UGF0aCB9OworKyAgbXkgJG5hbWUgPSAicGhvb28kJCI7CisrICBGaWxlOjpQYXRoOjptYWtlX3BhdGgoIiRuYW1lL2F1dG8vRm9vL0JhciIpOworKyAgb3BlbiBteSAkZmgsCisrICAgICI+JG5hbWUvYXV0by9Gb28vQmFyL0Jhci4kQ29uZmlnOjpDb25maWd7J2RsZXh0J30iOworKyAgY2xvc2UgJGZoOworKyAgbXkgJGZlbGxfYmFjazsKKysgIGxvY2FsICpYU0xvYWRlcjo6Ym9vdHN0cmFwX2luaGVyaXQgPSBzdWIgeworKyAgICAkZmVsbF9iYWNrKys7CisrICAgICMgQnJlYWsgb3V0IG9mIHRoZSBjYWxsaW5nIHN1YnMKKysgICAgZ290byB0aGVfdGVzdDsKKysgIH07CisrICBldmFsIDw8RU5EOworKyNsaW5lIDEgJG5hbWUKKytwYWNrYWdlIEZvbzo6QmFyOworK1hTTG9hZGVyOjpsb2FkKCJGb286OkJhciIpOworK0VORAorKyB0aGVfdGVzdDoKKysgIG9rICRmZWxsX2JhY2ssCisrICAgICdYU0xvYWRlciB3aWxsIG5vdCBsb2FkIHJlbGF0aXZlIHBhdGhzIGJhc2VkIG9uIChjYWxsZXIpWzFdJzsKKysgIEZpbGU6OlBhdGg6OnJlbW92ZV90cmVlKCRuYW1lKTsKKyt9CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LWNvbmZsaWN0LWJldHdlZW4tc2tpcF9hbGwtYW5kLUVORC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LWNvbmZsaWN0LWJldHdlZW4tc2tpcF9hbGwtYW5kLUVORC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTk0NmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtY29uZmxpY3QtYmV0d2Vlbi1za2lwX2FsbC1hbmQtRU5ELnBhdGNoCkBAIC0wLDAgKzEsMTgxIEBACitTb21lIFBlcmwgdGVzdHMgZmFpbCB3aGVuIHJ1biBvbiBhIGNyb3NzLWNvbXBpbGVkIHRhcmdldCBtYWNoaW5lLiBBcHBseQorYSBzbGlnaHRseSB0d2Vha2VkIHVwc3RyZWFtIHBhdGNoIHRvIGZpeCB0aGUgcHJvYmxlbXMuIE5vdGVzOgorICAgIDEuIGFzIG9mIDIgSnVuIDIwMTYsIHRoZSBvcmlnaW5hbCBwYXRjaCBoYXMgYmVlbiBhcHBsaWVkIHRvIHRoZSBjdXJyZW50CisgICAgICAgRVVNTSByZWxlYXNlcywgYnV0IGhhcyBub3QgbWFkZSBpdCBpbnRvIHBlcmwgY29yZSB5ZXQuCisgICAgMi4gd2hlbiB0aGUgYmFzZSBwZXJsIHBhY2thZ2UgaXMgdXBncmFkZWQgaW4gWW9jdG8sIHRoaXMgcGF0Y2ggbWF5IG5lZWQKKyAgICAgICB0byBiZSByZXBsYWNlZCBieSB0aGUgb3JpZ2luYWwgdXBzdHJlYW0gdmVyc2lvbiB0byBjb3JyZWN0bHkgYXBwbHkKKyAgICAgICB0byB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIEV4dFV0aWxzLU1ha2VNYWtlciBhdCB0aGF0IHRpbWUuCisKK1tZT0NUTyAjODY1Nl0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCaWxsIFJhbmRsZSA8d2lsbGlhbS5jLnJhbmRsZUBpbnRlbC5jb20+CisKK0Zyb20gNGEwN2EzYmQxODM2Mzk4NjExMmNmMmIzOWRlYzNjMjk4NTM1M2ZmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5jb2lzIFBlcnJhZCA8ZnJhbmNvaXMucGVycmFkQGdhZHoub3JnPgorRGF0ZTogTW9uLCAyMiBEZWMgMjAxNCAxOTowNDozNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBmaXggY29uZmxpY3QgYmV0d2VlbiBza2lwX2FsbCBhbmQgRU5EIHNlY3Rpb24KKworc2luY2UgdGhlIGNvbW1pdCA0MzBkZTc4MTgwOWE2YmUzYmNkMjVhMzQ5ZGM0MGNlNTQ0MDVhYjUzCit0aGUgdGVzdCBzdWl0ZSBmYWlscyBpbiBjcm9zcy1jb21waWwgZW52aXJvbm1lbnQgKHBlcmwtNS4yMS42ICYgcGVybC01LjIxLjcpCitsaWtlIHRoaXMgOgorCisgICAgJCAuL3BlcmwgaGFybmVzcyAtdiAuLi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RBTExfQkFTRS50CisgICAgLi4vY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUQUxMX0JBU0UudCAuLgorICAgIDEuLjAgIyBTS0lQIGNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlCisgICAgb2sgMSAtIGNoZGlyIHVwZGlyCisgICAgb2sgMiAtIHRlYXJkb3duCisgICAgIyBMb29rcyBsaWtlIHlvdSBwbGFubmVkIDAgdGVzdHMgYnV0IHJhbiAyLgorICAgIHNraXBwZWQ6IGNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlCisKK3RoaXMgY29tbWl0IHJlc3RvcmVzIHRoZSBpbXBsaWNpdCBjYWxsIG9mIHBsYW4oKSBhdCBpbXBvcnQgdGltZSBvZiBUZXN0OjpNb3JlCisKK1NpZ25lZC1vZmYtYnk6IEZyYW5jb2lzIFBlcnJhZCA8ZnJhbmNvaXMucGVycmFkQGdhZHoub3JnPgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUQUxMX0JBU0UudCAgICAgfCA3ICsrKystLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L1BMX0ZJTEVTLnQgICAgICAgICB8IDQgKystLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvYmFzaWMudCAgICAgICAgICAgIHwgNCArKy0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9lY2hvLnQgICAgICAgICAgICAgfCA2ICsrKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvbWluX3BlcmxfdmVyc2lvbi50IHwgNCArKy0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9wbV90b19ibGliLnQgICAgICAgfCA0ICsrLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3JlY3Vycy50ICAgICAgICAgICB8IDQgKystLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3Qvc2V2ZXJhbF9hdXRob3JzLnQgIHwgNCArKy0tCisgOCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVEFMTF9CQVNFLnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RBTExfQkFTRS50CitpbmRleCBmMjdiNjJjLi4zYmJiM2E2IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUQUxMX0JBU0UudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUQUxMX0JBU0UudAorQEAgLTE1LDEyICsxNSwxMyBAQCAkQ0xFQU5VUCAmJj0gMTsgIyBzbyBhbHdheXMgMSBvciBudW1lcmljYWxseSAwCisgCisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6U2V0dXA6OkJGRDsKKy11c2UgVGVzdDo6TW9yZTsKKyB1c2UgQ29uZmlnOworIHVzZSBFeHRVdGlsczo6TU07CistcGxhbiAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyt1c2UgVGVzdDo6TW9yZQorKyAgICAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyAgICAgPyAoc2tpcF9hbGwgPT4gImNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlIikKKy0gICAgOiAodGVzdHMgPT4gMyArICRDTEVBTlVQICsgQElOU1RESVJTICogKDE1ICsgJENMRUFOVVApKTsKKysgICAgOiAoKTsKKytwbGFuIHRlc3RzID0+IDMgKyAkQ0xFQU5VUCArIEBJTlNURElSUyAqICgxNSArICRDTEVBTlVQKTsKKyAKKyBteSAkSXNfVk1TID0gJF5PIGVxICdWTVMnOworIAorZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvUExfRklMRVMudCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvUExfRklMRVMudAoraW5kZXggMDc3OWRiYi4uODVkNTNhNSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvUExfRklMRVMudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9QTF9GSUxFUy50CitAQCAtMTEsOSArMTEsOSBAQCB1c2UgRmlsZTo6VGVtcCBxd1t0ZW1wZGlyXTsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6UExfRklMRVM7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIENvbmZpZzsKKy11c2UgVGVzdDo6TW9yZTsKKyB1c2UgRXh0VXRpbHM6Ok1NOworLXBsYW4gIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisrdXNlIFRlc3Q6Ok1vcmUKKysgICAgIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisgICAgID8gKHNraXBfYWxsID0+ICJjcm9zcy1jb21waWxpbmcgYW5kIG1ha2Ugbm90IGF2YWlsYWJsZSIpCisgICAgIDogKHRlc3RzID0+IDkpOworIAorZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvYmFzaWMudCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvYmFzaWMudAoraW5kZXggM2RkNjZhZC4uZWRkZjJlOSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvYmFzaWMudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9iYXNpYy50CitAQCAtMjAsOSArMjAsOSBAQCB1c2UgdXRmODsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6QkZEOworIHVzZSBDb25maWc7CistdXNlIFRlc3Q6Ok1vcmU7CisgdXNlIEV4dFV0aWxzOjpNTTsKKy1wbGFuICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorK3VzZSBUZXN0OjpNb3JlCisrICAgICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorICAgICA/IChza2lwX2FsbCA9PiAiY3Jvc3MtY29tcGlsaW5nIGFuZCBtYWtlIG5vdCBhdmFpbGFibGUiKQorICAgICA6ICh0ZXN0cyA9PiAxNzEpOworIHVzZSBGaWxlOjpGaW5kOworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvZWNoby50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9lY2hvLnQKK2luZGV4IDc4OWI4NWYuLmM0M2JjNDcgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L2VjaG8udAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9lY2hvLnQKK0BAIC0xNCwxMSArMTQsMTEgQEAgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIEZpbGU6OlRlbXA7CisgdXNlIEN3ZCAnYWJzX3BhdGgnOworIAorLXVzZSBUZXN0OjpNb3JlOworIHVzZSBFeHRVdGlsczo6TU07CistcGxhbiAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyt1c2UgVGVzdDo6TW9yZQorKyAgICAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyAgICAgPyAoc2tpcF9hbGwgPT4gImNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlIikKKy0gICAgOiAoKTsKKysgICAgOiAodGVzdHMgPT4gMTgpOworIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2V0dXAKKyAKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L21pbl9wZXJsX3ZlcnNpb24udCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvbWluX3BlcmxfdmVyc2lvbi50CitpbmRleCBjNWQ3OGQ2Li4yZWYxMThkIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9taW5fcGVybF92ZXJzaW9uLnQKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvbWluX3BlcmxfdmVyc2lvbi50CitAQCAtMTMsOSArMTMsOSBAQCB1c2UgVGllT3V0OworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlV0aWxzOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlNldHVwOjpNUFY7CisgdXNlIENvbmZpZzsKKy11c2UgVGVzdDo6TW9yZTsKKyB1c2UgRXh0VXRpbHM6Ok1NOworLXBsYW4gIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisrdXNlIFRlc3Q6Ok1vcmUKKysgICAgIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisgICAgID8gKHNraXBfYWxsID0+ICJjcm9zcy1jb21waWxpbmcgYW5kIG1ha2Ugbm90IGF2YWlsYWJsZSIpCisgICAgIDogKHRlc3RzID0+IDM2KTsKKyB1c2UgRmlsZTo6UGF0aDsKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3BtX3RvX2JsaWIudCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcG1fdG9fYmxpYi50CitpbmRleCBmMWUzNDhlLi5lYmZhMjZjIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9wbV90b19ibGliLnQKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcG1fdG9fYmxpYi50CitAQCAtMTIsOSArMTIsOSBAQCB1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6QkZEOworIHVzZSBDb25maWc7CistdXNlIFRlc3Q6Ok1vcmU7CisgdXNlIEV4dFV0aWxzOjpNTTsKKy1wbGFuICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorK3VzZSBUZXN0OjpNb3JlCisrICAgICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorICAgICA/IChza2lwX2FsbCA9PiAiY3Jvc3MtY29tcGlsaW5nIGFuZCBtYWtlIG5vdCBhdmFpbGFibGUiKQorICAgICA6ICdub19wbGFuJzsKKyAKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3JlY3Vycy50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9yZWN1cnMudAoraW5kZXggODRjMDlhMi4uNjYxZTBkYiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcmVjdXJzLnQKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcmVjdXJzLnQKK0BAIC0xNCw5ICsxNCw5IEBAIHVzZSBGaWxlOjpUZW1wIHF3W3RlbXBkaXJdOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlV0aWxzOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlNldHVwOjpSZWN1cnM7CisgdXNlIENvbmZpZzsKKy11c2UgVGVzdDo6TW9yZTsKKyB1c2UgRXh0VXRpbHM6Ok1NOworLXBsYW4gIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisrdXNlIFRlc3Q6Ok1vcmUKKysgICAgIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisgICAgID8gKHNraXBfYWxsID0+ICJjcm9zcy1jb21waWxpbmcgYW5kIG1ha2Ugbm90IGF2YWlsYWJsZSIpCisgICAgIDogKHRlc3RzID0+IDI2KTsKKyAKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3NldmVyYWxfYXV0aG9ycy50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9zZXZlcmFsX2F1dGhvcnMudAoraW5kZXggMWE3NWEzZS4uODY5ZTlmMCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3Qvc2V2ZXJhbF9hdXRob3JzLnQKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3Qvc2V2ZXJhbF9hdXRob3JzLnQKK0BAIC0xMyw5ICsxMyw5IEBAIHVzZSBUaWVPdXQ7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6U2V0dXA6OlNBUzsKKyB1c2UgQ29uZmlnOworLXVzZSBUZXN0OjpNb3JlOworIHVzZSBFeHRVdGlsczo6TU07CistcGxhbiAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyt1c2UgVGVzdDo6TW9yZQorKyAgICAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyAgICAgPyAoc2tpcF9hbGwgPT4gImNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlIikKKyAgICAgOiAodGVzdHMgPT4gMjApOworIHVzZSBGaWxlOjpQYXRoOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1yZW1vdmUtbm0tZnJvbS1saWJzd2FudGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1yZW1vdmUtbm0tZnJvbS1saWJzd2FudGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ODlmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLXJlbW92ZS1ubS1mcm9tLWxpYnN3YW50ZWQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA0NzMyNzExZTI1NDhiNmQ3MzRjYTgzMWQ2NWRiY2Y1MDFhODk3NzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVhcyBLb2VuaWcgPGFuZGtAY3Bhbi5vcmc+CitEYXRlOiBTdW4sIDMgSmFuIDIwMTYgMDg6NDA6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlIG5tIGZyb20gbGlic3dhbnRlZAorCitObSBzdG9vZCBmb3IgIk5ldyBNYXRoIiBsaWJyYXJ5IGluIHRoZSBjb250ZXh0IG9mIDE5OTQuIDIwMTQgYSBjb25mbGljdGluZworbGlicmFyeSBsaWJubSBhcHBlYXJlZCB0aGF0IGhhcyBhIG5ldHdvcmsgbWFuYWdlciBjb250ZXh0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtjb21taXQgNDczMjcxMWUgb24gYnJhbmNoIGJsZWFkLCB0YWcgdjUuMjUuMF0KKworLS0tCisgQ29uZmlndXJlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ29uZmlndXJlIGIvQ29uZmlndXJlCitpbmRleCAwZTcxYjRiLi5jZmJkYWExIDEwMDc1NQorLS0tIGEvQ29uZmlndXJlCisrKysgYi9Db25maWd1cmUKK0BAIC0xNDY0LDcgKzE0NjQsNyBAQCBsaWJzd2FudGVkX3VzZWxhcmdlZmlsZXM9JycKKyA6IHNldCB1c2Vzb2NrcyBvbiB0aGUgQ29uZmlndXJlIGNvbW1hbmQgbGluZSB0byBlbmFibGUgc29ja3MuCisgOiBMaXN0IG9mIGxpYnJhcmllcyB3ZSB3YW50LgorIDogSWYgYW55b25lIG5lZWRzIGV4dHJhIC1seHh4LCBwdXQgdGhvc2UgaW4gYSBoaW50IGZpbGUuCistbGlic3dhbnRlZD0iY2wgcHRocmVhZCBzb2NrZXQgYmluZCBpbmV0IG5zbCBubSBuZGJtIGdkYm0gZGJtIGRiIG1hbGxvYyBkbCBsZCIKKytsaWJzd2FudGVkPSJjbCBwdGhyZWFkIHNvY2tldCBiaW5kIGluZXQgbnNsIG5kYm0gZ2RibSBkYm0gZGIgbWFsbG9jIGRsIGxkIgorIGxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHN1biBtIGNyeXB0IHNlYyB1dGlsIGMgY3Bvc2l4IHBvc2l4IHVjYiBic2QgQlNEIgorIDogV2UgcHJvYmFibHkgd2FudCB0byBzZWFyY2ggL3Vzci9zaGxpYiBiZWZvcmUgbW9zdCBvdGhlciBsaWJyYXJpZXMuCisgOiBUaGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSByb3V0aW5lIGV4dGxpYmxpc3QuCistLSAKKzIuOS4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtdGVzdC1jdXN0b21pemVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC10ZXN0LWN1c3RvbWl6ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiMGI4OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtdGVzdC1jdXN0b21pemVkLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1RoZSBPRSBjb3JlIHJlY2lwaWVzIGN1c3RvbWl6ZSBzb21lIEV4dFV0aWxzLU1ha2VNYWtlciBtb2R1bGVzLAord2hpY2ggY2F1c2VzIHRoZWlyIE1ENSBzdW0gdG8gbWlzbWF0Y2ggdGhlIHByb3ZpZGVkIHRhYmxlIGFuZCB0aGUKK2NvcnJlc3BvbmRpbmcgdGVzdHMgdG8gZmFpbC4gQWxzbywgd2UgcGF0Y2ggc2V2ZXJhbCB0ZXN0IGZpbGVzIHdpdGgKK2EgYmFja3BvcnRlZCBwYXRjaC4gVXBkYXRlIGxpc3Qgb2YgaGFzaGVzIHRvIHJlZmxlY3QgdGhlIHBhdGNoZWQgZmlsZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEJpbGwgUmFuZGxlIDx3aWxsaWFtLmMucmFuZGxlQGludGVsLmNvbT4KKworSW5kZXg6IHBlcmwtNS4yMi4xL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4yMi4xLm9yaWcvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CTIwMTUtMTAtMzEgMTM6MzY6MTYuMDAwMDAwMDAwICswMDAwCisrKysgcGVybC01LjIyLjEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CTIwMTYtMDYtMDIgMTI6NTA6MTAuMzgxMDMwMjA0IC0wNzAwCitAQCAtMSw4ICsxLDggQEAKKyBDUEFOIGNwYW4vQ1BBTi9saWIvQ1BBTi5wbSBjZTYyYzQzZDcyZjEwMWMwMTExODRkYmJjNTllMjFjMjc5MDgyNmYwCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvQ29tbWFuZC9NTS5wbSA3ZjRkZmQwZmU4ODRiZDQyNDEyYmNmMDRjYTgwZWY5N2IzOWMxZDU0CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC5wbSBiZWYwOTk5ODhiMTVmYjBiMmExZjVhYzQ4YzAxYWYxZjdmMzZkMzI5CistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gODE2OGUxOGYwZTNjZTNlY2U0YmI3ZTdjNzJkNTdlYzA3YzY3YzQwMgorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSA3MTE1ZTk3YTUzNTU5Y2IzZWMwNjFkZDZmN2YzNDRlNTIyNzI0YzRhCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gYTA4ZWNmODBjOGYwYTIzNDI0MzgxNzcxM2IyYTVhYjBkY2FlM2MwYQorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSAzZDdhYmQ2NzRiMTVlZDMyM2Y3NDM1OTRlZjBiZDA5ZGI3NmIxYWVlCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0NvbmZpZy5wbSBmOGRiOGQ0MjQ1YmYwNjg0YjgyMTBjODExZjUwZDdjZmIxYTI3ZDc4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0ZBUS5wb2QgNzU3YmZmYjQ3ODU3NTIxMzExZjhmM2JkZTQzZWJlMTY1ZjhkNTE5MQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci9Mb2NhbGUucG0gODJiZTA2ODUxZGViODRjNjQxOWFkMDAzY2U5YjZkMTk1N2YzOTVmMworQEAgLTE0LDcgKzE0LDcgQEAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Na3N5bWxpc3RzLnBtIGFiODAwMjlhYjE2ZDM4ZDRmMmU0MWRjODhkMmNlYjlmMzc5MGU0NzcKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTS5wbSA0NTNlMGFiYmM0YmIzOGRiNGMwODIwYWQ1YzQ4NDZmMzEzYjY2MjkxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQUlYLnBtIGMxYjFiYWJkYThmNDNhZTdhMmNhYmExY2I0ZjcwZjkyYWY1YTBlMzQKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gNmY5MGQ5NGFkM2U3YWEwMDQ1YTNiMWExMGExYmIxODM5MWY4OWY1NworK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSAyMWJkZTUzMjkwYmYxYTRkYTQ0NTcyOTBiNjViZDFiMGNhNmYxZDE2CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQmVPUy5wbSBjYWIyYjNjZTA4YjcxYTRjZTg5YWE2MzBmMjM2ZWIwOGI4NTI0MzlkCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQ3lnd2luLnBtIDYxZmNlZDBmYWY1MThiZjg3YzI2NWZjYjUxZWQzMzBiYTM1NDYyM2YKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9EYXJ3aW4ucG0gYWUwZWY1MWE3YjZkZDBiMDVhYTYxYzc3OWRmNzE2N2RkYTVmNTExOQorQEAgLTIzLDcgKzIzLDcgQEAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9OVzUucG0gNDMzMTM1ZWVjYjg1YjRiMWQ5MGQzMDI3NDMyZjMyOTQzNmM3ODQ0NworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX09TMi5wbSAxZmJiNTYwNWJmYjQ3ZmVlZTQwODNmZWJhOGFhODVlNjU5NjI4ZjcwCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fUU5YLnBtIDViNjZkMWY0ODVhNjAzNGQ5NmZjMjRiYTE2NjViMWJhZDllNDQ3ZjEKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIDhjZWY5OWE5YmQzNzBlY2ZkMDdkZGIwZWZiZGNiYjQxMDEyNTVlNDUKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIDg2MGQ1MjAyMzRkN2M5MDM2ZDkxZjBiMTQzYTFkZGRmMmE1ZThjYjcKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9VV0lOLnBtIDkzOTU3MmZkZTNkNTliYTc3YzJlNjc3ZmUyZGYyYmVkNGJlZDU4OTgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9WTVMucG0gMDljMjA0OWJmZDI1YjczNWUyYTViY2Y1NmE2Y2ZmN2I0ODI3ZjljOAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1ZPUy5wbSBkNjVkNjNmODIxN2E1NWMzNmY2MmUyNDk4MTQ5ODg5NzRmNTkzYzc5CitAQCAtMzEsOCArMzEsMTYgQEAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9XaW45NS5wbSAxMmRmMzhlYWNjZWVlZDczY2FiOTRjNDIzMjM2YmZhZWQwZmJiZmVjCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTVkucG0gMjJmZTk1OTZhMDIzNzI1MmY0NTM5OWEzNmFiYzgzYjc4MTNiYzMyOAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL3Rlc3RsaWIucG0gN2ZiYzQyY2EyZWJjNmM2NzdiNzlhZTVmZDU2NDcyNDNjZjA2OTQ2MworLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9iYXNpYy50IDZjZGM3NzAxYjUwZTU4NmJjOWM0Y2ZiMTYxNmRlOGViMGIxYmFmMzQKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcG1fdG9fYmxpYi50IDcxZWJjZWUzNTU2OTFjZTM3NGZjYWQyNTFiMTJkOGIyNDEyNDYyYjMKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvYmFzaWMudCBkNzhmZGVjN2E0NTEyZGM4ZDJhN2FiZDYyYjgxMDQ1MzBhZjhlY2Y5CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L2VjaG8udCA5NDI3ZjRhZGViYmIxM2I1N2I0YTc2ZmVmMjk3MmFkZjYzYzliZDk2CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RBTExfQkFTRS50IGVmMzU2YzE5NmJiNWMzYzQyOGFlMzA5ZDdmOTg5YmRkNmQ3OWI4NmQKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudCAzZTZkNGQ2ZWIyZWFiNDJlOTgzYWM3MGViNTczN2E3NTlhZjA5MTZmCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudCBlNTUzZmEwZDUzYzg5NGM4ZDM2YWFmYjY5ZWRkNTViMzhhOTM1NWY4CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L21pbl9wZXJsX3ZlcnNpb24udCBlOTMwZWM5MjE3ZGU1YTE3ODVkMDI0N2MzMGIxNTllNmY3ZjU2NzNmCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L1BMX0ZJTEVTLnQgN2U0OWFiNmM0ZDQ2NzgyNmQyMjAyM2ZhMDNkNzdiODVmOTM1YjU4ZQorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9wbV90b19ibGliLnQgYTA0Yzk2ZWVjZmFiMTdlNDA5NDYwNGUwZmI5OThkZDkzY2Y5M2I5MworK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9yZWN1cnMudCA5NGNjZTNiZmY4NzVhODc4ZWQyNzgxNmIzZjVkZjJjYTQyMjVjNzE0CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3NldmVyYWxfYXV0aG9ycy50IGY4MTFkOTkzYzA4MzVjNjZkYzUwMWVkNTUwODNhY2IyOWJmMzNiZjcKKyBUZXh0OjpQYXJzZVdvcmRzIGNwYW4vVGV4dC1QYXJzZVdvcmRzL3QvUGFyc2VXb3Jkcy50IDliYWU1MWM5Yjk0NGNkNWMwYmJhYmU5ZDM5N2U1NzM5NzZhMmJlOGUKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvYnVmZmVycy5oIDAyZDIzMGFjOWFjNzA5MTM2NTEyODE2MWEwZWQ2NzE4OThiYWVmYWUKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvY0ZpbGUuaCBmY2E3ZTM4M2U3Njk3OWMzYWMzYWRmMTJkMTFkMWJjZDI2MThlNDg5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjEuYmIKaW5kZXggYmY4YjNiNi4uNzkyYTY1YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yMi4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMS5iYgpAQCAtNjMsNiArNjMsMTIgQEAKICAgICAgICAgZmlsZTovL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2ggXAogICAgICAgICBmaWxlOi8vcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIFwKICAgICAgICAgZmlsZTovL3BlcmwtZXJybm8tZ2VuZXJhdGlvbi1nY2M1LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZml4LWNvbmZsaWN0LWJldHdlZW4tc2tpcF9hbGwtYW5kLUVORC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLXRlc3QtY3VzdG9taXplZC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLWZpeC1DVkUtMjAxNi0yMzgxLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZml4LUNWRS0yMDE2LTYxODUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1maXgtQ1ZFLTIwMTUtODYwNy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLWZpeC1DVkUtMjAxNi0xMjM4LnBhdGNoIFwKICIKIAogIyBGaXggdGVzdCBjYXNlIGlzc3VlcwpAQCAtMzQwLDcgKzM0Niw5IEBACiBBTExPV19FTVBUWV9wZXJsLW1vZHVsZXMgPSAiMSIKIFBBQ0tBR0VTX2FwcGVuZCA9ICIgcGVybC1tb2R1bGVzICIKIAotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJzcGxpdF9wZXJsX3BhY2thZ2VzICIKKworcHl0aG9uIHNwbGl0X3BlcmxfcGFja2FnZXMgKCkgewogICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGVybC8ke1BWfScpCiAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnYXV0by8oW14uXSopL1teL10qXC4oc298bGR8aXh8YWwpJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdNb2R1bGUvKFteXC9dKilcLnBtJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIGFsbG93X2RpcnM9RmFsc2UsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy8wMDAxLWdkYXRlLU1vdmUtd2FybmluZy1wcmFnbWEtb3V0c2lkZS1vZi1mdW5jdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy8wMDAxLWdkYXRlLU1vdmUtd2FybmluZy1wcmFnbWEtb3V0c2lkZS1vZi1mdW5jdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGM4MjkzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLzAwMDEtZ2RhdGUtTW92ZS13YXJuaW5nLXByYWdtYS1vdXRzaWRlLW9mLWZ1bmN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gOTQ2ZDM2MjY2ZDhhMzBmMDRmZTM0ZDMxODNiZjQ5MjkxNDE5MzRkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGNveXB1IDxjb3lwdUBzZGYub3JnPgorRGF0ZTogV2VkLCAyIE1hciAyMDE2IDE5OjM4OjQ4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGdkYXRlOiBNb3ZlIHdhcm5pbmcgcHJhZ21hIG91dHNpZGUgb2YgZnVuY3Rpb24KKworQ29tbWl0IDA4MTdhZjQwZThjNzRjNzIxYzMwZjZlZjQ4MmIxZjUzZDEyMDQ0YzcgYnJlYWtzIHRoZSBidWlsZCBvbgorb2xkZXIgdmVyc2lvbnMgb2YgR0NDLCB3aGljaCBkb24ndCBhbGxvdyBwcmFnbWEgaW5zaWRlIGZ1bmN0aW9ucy4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvNzYxNTUwCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKyBnbGliL2dsaWIvZ2RhdGUuYyB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nbGliL2dsaWIvZ2RhdGUuYyBiL2dsaWIvZ2xpYi9nZGF0ZS5jCitpbmRleCAxOTc4Y2Y3Li4yMGU2YzRhIDEwMDY0NAorLS0tIGEvZ2xpYi9nbGliL2dkYXRlLmMKKysrKyBiL2dsaWIvZ2xpYi9nZGF0ZS5jCitAQCAtMjQzOSw2ICsyNDM5LDkgQEAgd2luMzJfc3RyZnRpbWVfaGVscGVyIChjb25zdCBHRGF0ZSAgICAgKmQsCisgICoKKyAgKiBSZXR1cm5zOiBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIHRoZSBidWZmZXIsIG9yIDAgdGhlIGJ1ZmZlciB3YXMgdG9vIHNtYWxsCisgICovCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgorKworIGdzaXplICAgICAKKyBnX2RhdGVfc3RyZnRpbWUgKGdjaGFyICAgICAgICpzLCAKKyAgICAgICAgICAgICAgICAgIGdzaXplICAgICAgICBzbGVuLCAKK0BAIC0yNTQ5LDMgKzI1NTIsNSBAQCBnX2RhdGVfc3RyZnRpbWUgKGdjaGFyICAgICAgICpzLAorICAgcmV0dXJuIHJldHZhbDsKKyAjZW5kaWYKKyB9CisrCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLzAwMDEtZ2xpYi1nZXR0ZXh0Lm00LVVwZGF0ZS1BTV9HTElCX0dOVV9HRVRURVhULXRvLW1hdGNoLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy8wMDAxLWdsaWItZ2V0dGV4dC5tNC1VcGRhdGUtQU1fR0xJQl9HTlVfR0VUVEVYVC10by1tYXRjaC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzMTBjZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy8wMDAxLWdsaWItZ2V0dGV4dC5tNC1VcGRhdGUtQU1fR0xJQl9HTlVfR0VUVEVYVC10by1tYXRjaC0ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBlNDA0ZTI3ZGU3N2Q4Yjk5M2M0Y2M4NzAxM2Q3MDcyMDBiM2E1NTQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTcgTWF5IDIwMTYgMTM6MjY6MjcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2xpYi1nZXR0ZXh0Lm00OiBVcGRhdGUgQU1fR0xJQl9HTlVfR0VUVEVYVCB0byBtYXRjaCBnbGliCisKK1RoaXMgYXZvaWRzCisgIGVycm9yOiBtNF9jb3B5OiB3b24ndCBvdmVyd3JpdGUgZGVmaW5lZCBtYWNybzogZ2xpYl9ERUZVTgorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGdsaWIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00IHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nbGliL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNCBiL2dsaWIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00CitpbmRleCA1MjE3ZmQ4Li4xNTViMWQ4IDEwMDY0NAorLS0tIGEvZ2xpYi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQKKysrKyBiL2dsaWIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00CitAQCAtMzEzLDcgKzMxMyw3IEBAIG1zZ3N0ciAiIgorICMgb24gdmFyaW91cyB2YXJpYWJsZXMgbmVlZGVkIGJ5IHRoZSBNYWtlZmlsZS5pbi5pbiBpbnN0YWxsZWQgYnkgCisgIyBnbGliLWdldHRleHRpemUuCisgZG5sCistZ2xpYl9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCisrQVVfREVGVU4oW0dMSUJfR05VX0dFVFRFWFRdLAorICAgW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorICAgIAorICAgIEdMSUJfTENfTUVTU0FHRVMKK0BAIC0zODMsNyArMzgzLDggQEAgZ2xpYl9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCisgICAgcm0gLWYgcG8vUE9URklMRVMKKyAgICBzZWQgLWUgIi9eIy9kIiAtZSAiL15cJC9kIiAtZSAicywuKiwJJHBvc3JjcHJlZml4JiBcXFxcLCIgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iIFwKKyAJPCAkc3JjZGlyL3BvL1BPVEZJTEVTLmluID4gcG8vUE9URklMRVMKKy0gIF0pCisrICBdLAorKyAgW1skMDogVGhpcyBtYWNybyBpcyBkZXByZWNhdGVkLiBZb3Ugc2hvdWxkIHVzZSB1cHN0cmVhbSBnZXR0ZXh0IGluc3RlYWQuXV0pCisgCisgIyBBTV9HTElCX0RFRklORV9MT0NBTEVESVIoVkFSSUFCTEUpCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiCmluZGV4IGQzNGY2MDguLmZmODI1NGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYgpAQCAtMTIsMTIgKzEyLDE0IEBACiBERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCiBERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCiAKLVNSQ1JFViA9ICI1OTE0ZWRmZTk2MDRhYmZlZGQyMjAxMDNjYmFjMzgyZmM0ZDI2OGJiIgotUFYgPSAiMC4yOStnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICI4NzE1MmMwNWJlODhjYThiZTcxYTNhNTYzZjI3NWIzNjg2ZDMyYzI4IgorUFYgPSAiMC4yOS4xK2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3BrZy1jb25maWcgXAogICAgICAgICAgICBmaWxlOi8vcGtnLWNvbmZpZy1uYXRpdmUuaW4gXAogICAgICAgICAgICBmaWxlOi8vZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nZGF0ZS1Nb3ZlLXdhcm5pbmctcHJhZ21hLW91dHNpZGUtb2YtZnVuY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nbGliLWdldHRleHQubTQtVXBkYXRlLUFNX0dMSUJfR05VX0dFVFRFWFQtdG8tbWF0Y2gtLnBhdGNoIFwKICAgICAgICAgICAgIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCmluZGV4IGUyMjNlZjYuLjA4NTZiMWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIKQEAgLTgsNyArOCw3IEBACiBydW50aW1lIGFuZCB0aHVzIHByb2dyYW1zIGNvbWUgdXAgZmFzdGVyLiIKIExJQ0VOU0UgPSAiR1BMdjIiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiIKLVNSQ1JFViA9ICI5Mjc5NzliYmQxMTVlZWI4YTc1ZGIzMjMxOTA2ZWY2YWNhNGM0ZWI2IgorU1JDUkVWID0gImVmMjA2MjhkZDc4YjkyZTFhMzEyM2FmYzY3YjY0Y2YwMTBiZGQ5ZTQiCiBQViA9ICIxLjArZ2l0JHtTUkNQVn0iCiAKICMKQEAgLTQ0LDYgKzQ0LDk5IEBACiBFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXNlbGludXggLS13aXRoLXBrZ3ZlcnNpb249JHtQVn0tJHtQUn0gXAogCS0td2l0aC1idWd1cmw9aHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgogCisKKyMKKyMgRm9yIHRhcmdldCBwcmVsaW5rIHdlIG5lZWQgdG8gZW5zdXJlIHBhdGhzIG1hdGNoIHRoZSBsaWIgcGF0aCBsYXlvdXQKKyMgaW5jbHVkaW5nIGZvciBhbnkgY29uZmlndXJlZCBtdWx0aWxpYnMKKyMKK3B5dGhvbiBkb19saW5rZXJwYXRocyAoKSB7CisgICAgdmFsdWVzID0gYWxsX211bHRpbGliX3R1bmVfbGlzdChbIlRVTkVfQVJDSCIsICJiYXNlbGliIiwgIkFCSUVYVEVOU0lPTiJdLCBkKQorCisgICAgYXJjaGVzID0gdmFsdWVzWyJUVU5FX0FSQ0giXQorICAgIGJhc2VsaWJzID0gdmFsdWVzWyJiYXNlbGliIl0KKyAgICBhYmlzID0gdmFsdWVzWyJBQklFWFRFTlNJT04iXQorCisgICAgZGVmIHJlcGxhY2VfbGluZXMoZiwgc2VhcmNoLCByZXBsYWNlbWVudCwgZCwgZmlyc3Rvbmx5ID0gRmFsc2UsIHNlY29uZG9ubHkgPSBGYWxzZSk6CisgICAgICAgIGYgPSBkLmV4cGFuZChmKQorICAgICAgICBpZiBzZWFyY2ggPT0gcmVwbGFjZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYmIuZGVidWcoMiwgIlJlcGxhY2luZyAlcyB3aXRoICVzIGluICVzIiAlIChzZWFyY2gsIHJlcGxhY2VtZW50LCBmKSkKKyAgICAgICAgd2l0aCBvcGVuKGYsICJyIikgYXMgZGF0YToKKyAgICAgICAgICAgIGxpbmVzID0gZGF0YS5yZWFkbGluZXMoKQorICAgICAgICB3aXRoIG9wZW4oZiwgInciKSBhcyBkYXRhOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlY29uZG9ubHkgYW5kIG5vdCBmaXJzdG9ubHk6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2Uoc2VhcmNoLCByZXBsYWNlbWVudCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlY29uZG9ubHkgYW5kIHNlYXJjaCBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBzZWNvbmRvbmx5ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIGZpcnN0b25seSBhbmQgc2VhcmNoIGFuZCBzZWFyY2ggaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShzZWFyY2gsIHJlcGxhY2VtZW50KQorICAgICAgICAgICAgICAgICAgICBzZWFyY2ggPSBOb25lCisgICAgICAgICAgICAgICAgZGF0YS53cml0ZShsaW5lKQorCisgICAgZGVmIHJlcGxhY2VfbGluZXNfcnRsZChmLCBzZWFyY2gsIHJlcGxhY2VtZW50LCBzZWN0aW9uLCBkKToKKyAgICAgICAgZiA9IGQuZXhwYW5kKGYpCisgICAgICAgIGJiLmRlYnVnKDIsICJSZXBsYWNpbmcgJXMgd2l0aCAlcyBpbiAlcyIgJSAoc2VhcmNoLCByZXBsYWNlbWVudCwgZikpCisgICAgICAgIHdpdGggb3BlbihmLCAiciIpIGFzIGRhdGE6CisgICAgICAgICAgICBsaW5lcyA9IGRhdGEucmVhZGxpbmVzKCkKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3VuZDIgPSBGYWxzZQorICAgICAgICB3aXRoIG9wZW4oZiwgInciKSBhcyBkYXRhOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgaWYgc2VjdGlvbiBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWN0aW9uID09ICJlbHNlIiBhbmQgImlmIiBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgZm91bmQgYW5kICJkc3RfTElCID0iIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kMiA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmICJ9IiBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGZvdW5kMiA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgZm91bmQyOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnQpCisgICAgICAgICAgICAgICAgZGF0YS53cml0ZShsaW5lKQorCisgICAgZm9yIGksIGFyY2ggaW4gZW51bWVyYXRlKGFyY2hlcyk6CisgICAgICAgIHR1bmVfYmFzZWxpYiA9IGJhc2VsaWJzW2ldCisgICAgICAgIGFiaSA9IGFiaXNbaV0KKworICAgICAgICBiaXRzID0gMzIKKyAgICAgICAgaWYgYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLXBwYy5jIiwgIi9saWIvbGQuc28uMSIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQuc28uMSIsIGQpCisgICAgICAgIGVsaWYgYXJjaCA9PSAicG93ZXJwYzY0IjoKKyAgICAgICAgICAgIHJlcGxhY2VfbGluZXMoIiR7U30vc3JjL2FyY2gtcHBjNjQuYyIsICIvbGliNjQvbGQ2NC5zby4xIiwgIi8iICsgdHVuZV9iYXNlbGliICsgIi9sZDY0LnNvLjEiLCBkKQorICAgICAgICAgICAgYml0cyA9IDY0CisgICAgICAgIGVsaWYgYXJjaCA9PSAieDg2XzY0IjoKKyAgICAgICAgICAgIGlmIGFiaSA9PSAieDMyIjoKKyAgICAgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLXg4Nl82NC5jIiwgIi9saWJ4MzIvbGQtbGludXgteDMyLnNvLjIiLCAiLyIgKyB0dW5lX2Jhc2VsaWIgKyAiL2xkLWxpbnV4LXgzMi5zby4yIiwgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVwbGFjZV9saW5lcygiJHtTfS9zcmMvYXJjaC14ODZfNjQuYyIsICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiLCAiLyIgKyB0dW5lX2Jhc2VsaWIgKyAiL2xkLWxpbnV4LXg4Ni02NC5zby4yIiwgZCkKKyAgICAgICAgICAgIGJpdHMgPSA2NAorICAgICAgICBlbGlmIGFyY2ggPT0gImFybSI6CisgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLWFybS5jIiwgIi9saWIvbGQtbGludXguc28uMyIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQtbGludXguc28uMyIsIGQpCisgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLWFybS5jIiwgIi9saWIvbGQtbGludXgtYXJtaGYuc28uMyIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQtbGludXgtYXJtaGYuc28uMyIsIGQpCisgICAgICAgIGVsaWYgYXJjaCA9PSAibWlwcyIgb3IgYXJjaCA9PSAibWlwc2VsIjoKKyAgICAgICAgICAgIHJlcGxhY2VfbGluZXMoIiR7U30vc3JjL2FyY2gtbWlwcy5jIiwgIi9saWIvbGQuc28uMSIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQuc28uMSIsIGQsIGZpcnN0b25seT1UcnVlKQorICAgICAgICAgICAgcmVwbGFjZV9saW5lcygiJHtTfS9zcmMvYXJjaC1taXBzLmMiLCAiL2xpYjMyL2xkLnNvLjEiLCAiLyIgKyB0dW5lX2Jhc2VsaWIgKyAiL2xkLnNvLjEiLCBkKQorICAgICAgICBlbGlmIGFyY2ggPT0gIm1pcHM2NCIgb3IgYXJjaCA9PSAibWlwczY0ZWwiOgorICAgICAgICAgICAgcmVwbGFjZV9saW5lcygiJHtTfS9zcmMvYXJjaC1taXBzLmMiLCAiL2xpYi9sZC5zby4xIiwgIi8iICsgdHVuZV9iYXNlbGliICsgIi9sZC5zby4xIiwgZCwgc2Vjb25kb25seT1UcnVlKQorICAgICAgICAgICAgcmVwbGFjZV9saW5lcygiJHtTfS9zcmMvYXJjaC1taXBzLmMiLCAiL2xpYjY0L2xkLnNvLjEiLCAiLyIgKyB0dW5lX2Jhc2VsaWIgKyAiL2xkLnNvLjEiLCBkKQorICAgICAgICAgICAgYml0cyA9IDY0CisgICAgICAgIGVsaWYgYXJjaC5lbmRzd2l0aCgiODYiKToKKyAgICAgICAgICAgIHJlcGxhY2VfbGluZXMoIiR7U30vc3JjL2FyY2gtaTM4Ni5jIiwgIi9saWIvbGQtbGludXguc28uMiIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQtbGludXguc28uMiIsIGQpCisgICAgICAgIGlmIGJpdHMgPT0gMzIgYW5kIHR1bmVfYmFzZWxpYiAhPSAibGliIjoKKyAgICAgICAgICAgIHJlcGxhY2VfbGluZXNfcnRsZCgiJHtTfS9zcmMvcnRsZC9ydGxkLmMiLCAibGliIiwgdHVuZV9iYXNlbGliLCAiZWxzZSIsIGQpCisgICAgICAgIGlmIGJpdHMgPT0gNjQgYW5kIHR1bmVfYmFzZWxpYiAhPSAibGliNjQiOgorICAgICAgICAgICAgcmVwbGFjZV9saW5lc19ydGxkKCIke1N9L3NyYy9ydGxkL3J0bGQuYyIsICJsaWI2NCIsIHR1bmVfYmFzZWxpYiwgInVzZV82NGJpdCIsIGQpCit9CisKK3B5dGhvbiAoKSB7CisgICAgb3ZlcnJpZGVzID0gZC5nZXRWYXIoIk9WRVJSSURFUyIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBpZiAiY2xhc3MtdGFyZ2V0IiBpbiBvdmVycmlkZXM6CisgICAgICAgIGJiLmJ1aWxkLmFkZHRhc2soJ2RvX2xpbmtlcnBhdGhzJywgJ2RvX2NvbmZpZ3VyZScsICdkb19wYXRjaCcsIGQpCit9CisKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKICAgICAgICAgIyBEaXNhYmxlIGRvY3VtZW50YXRpb24hCiAgICAgICAgIGVjaG8gImFsbDoiID4gJHtTfS9kb2MvTWFrZWZpbGUuYW0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDEtRG9uLXQtc2VuZC1TSUdVU1IxLXRvLWluaXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAxLURvbi10LXNlbmQtU0lHVVNSMS10by1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjk0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAxLURvbi10LXNlbmQtU0lHVVNSMS10by1pbml0LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gYmVmYzZkYmQ2NDY5ZDQyOGM5ZTA4MzBkYmU1MWJkZjdhYzM5ZDlhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNlZWJzIDxzZWVic0BzZWVicy5uZXQ+CitEYXRlOiBUaHUsIDIyIFNlcCAyMDE2IDE0OjM1OjA0IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIERvbid0IHNlbmQgU0lHVVNSMSB0byBpbml0LgorCitJZiB0aGUgcGFyZW50IGV4aXRzIGR1ZSB0byBjaGlsZCBwcm9jZXNzIGJlaW5nIHNsb3csIGdldHBwaWQoKSB3aWxsIHJldHVybgorMSwgYW5kIHdlJ2xsIHNlbmQgU0lHVVNSMSB0byBpbml0LCB3aGljaCBjYW4gYnJlYWsgdGhpbmdzIGxpa2UgZHVtYmluaXQKK3doaWNoIGFyZW4ndCBhZGVxdWF0ZWx5IHByb3RlY3RlZCBhZ2FpbnN0IG5vbi1yb290IHByb2Nlc3NlcyBzZW5kaW5nIHRoZW0KK3NpZ25hbHMuCisKK1NpZ25lZC1vZmYtYnk6IFNlZWJzIDxzZWVic0BzZWVicy5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgKGNvbW1pdCBiZWZjNmRiZDY0NjlkNDI4YzllMDgzMGRiZTUxYmRmN2FjMzlkOWFlKQorCitbWU9DVE8gIzEwMzI0XQorCitUaGlzIHJlc29sdmVzIGFuIGlzc3VlIHdoZXJlIGEgZG9ja2VyIGNvbnRhaW5lciBydW5uaW5nIGJ1aWxkcyB3b3VsZCBkaWUKK2R1ZSB0byBpdCdzICdtaW5pIGluaXQnIGJlaW5nIHNpZ25hbGVkIGJ5IHBzZXVkby4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorLS0tCisgcHNldWRvX3NlcnZlci5jIHwgMTEgKysrKysrKystLS0KKworZGlmZiAtLWdpdCBhL3BzZXVkb19zZXJ2ZXIuYyBiL3BzZXVkb19zZXJ2ZXIuYworaW5kZXggNjUxMDJkZC4uODczMWQyMCAxMDA2NDQKKy0tLSBhL3BzZXVkb19zZXJ2ZXIuYworKysrIGIvcHNldWRvX3NlcnZlci5jCitAQCAtMzU4LDkgKzM1OCwxNCBAQCBwc2V1ZG9fc2VydmVyX3N0YXJ0KGludCBkYWVtb25pemUpIHsKKyAJc2lnbmFsKFNJR1RFUk0sIHF1aXRfbm93KTsKKyAJLyogdGVsbCBwYXJlbnQgcHJvY2VzcyB0byBzdG9wIHdhaXRpbmcgKi8KKyAJaWYgKGRhZW1vbml6ZSkgeworLQkJcHNldWRvX2RpYWcoIlNldHVwIGNvbXBsZXRlLCBzZW5kaW5nIFNJR1VTUjEgdG8gcGlkICVkLlxuIiwKKy0JCQlnZXRwcGlkKCkpOworLQkJa2lsbChnZXRwcGlkKCksIFNJR1VTUjEpOworKwkJcGlkX3QgcHBpZCA9IGdldHBwaWQoKTsKKysJCWlmIChwcGlkID09IDEpIHsKKysJCQlwc2V1ZG9fZGlhZygiU2V0dXAgY29tcGxldGUsIGJ1dCBwYXJlbnQgaXMgaW5pdCwgbm90IHNlbmRpbmcgU0lHVVNSMS5cbiIpOworKwkJfSBlbHNlIHsKKysJCQlwc2V1ZG9fZGlhZygiU2V0dXAgY29tcGxldGUsIHNlbmRpbmcgU0lHVVNSMSB0byBwaWQgJWQuXG4iLAorKwkJCQlwcGlkKTsKKysJCQlraWxsKHBwaWQsIFNJR1VTUjEpOworKwkJfQorIAl9CisgCXBzZXVkb19zZXJ2ZXJfbG9vcCgpOworIAlyZXR1cm4gMDsKKy0tIAorMi41LjUKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMS1RdWlldC1kaWFnbm9zdGljcy1kdXJpbmctc3RhcnR1cC1mb3ItcHNldWRvLWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAxLVF1aWV0LWRpYWdub3N0aWNzLWR1cmluZy1zdGFydHVwLWZvci1wc2V1ZG8tZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGI5ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMS1RdWlldC1kaWFnbm9zdGljcy1kdXJpbmctc3RhcnR1cC1mb3ItcHNldWRvLWQucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBlZWFkOGE1MDUyNDVhMjkyYzQzZjA3MGMwZTgzNmNkZmViN2JkN2JkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KK0RhdGU6IFdlZCwgMjggU2VwIDIwMTYgMTc6MDU6MTcgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIFF1aWV0IGRpYWdub3N0aWNzIGR1cmluZyBzdGFydHVwIGZvciBwc2V1ZG8gLWQKKworV2hlbiB0aGUgY2xpZW50IHNwYXducyBhIHBzZXVkbyBzZXJ2ZXIsIGl0IHN0YXJ0cyBvdXQgc2VuZGluZyBkaWFnbm9zdGljcwordG8gc3RkZXJyLiBUaGlzIGNhbiBiZSBzcGFtbXkgaW4gc29tZSBjYXNlcyB3aXRoIHJhY2VzIGR1cmluZyBzdGFydHVwOworZXZlcnl0aGluZyByZXNvbHZlcywgYnV0IHdlIGdldCBzY2FyeS1sb29raW5nIGRpYWdub3N0aWNzLiBTbyBzaG92ZQordGhvc2UgaW50byBhIGxvZyBmaWxlLgorCitTaWduZWQtb2ZmLWJ5OiBTZWVicyA8c2VlYnNAc2VlYnMubmV0PgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZy50eHQgICB8IDUgKysrKysKKyBwc2V1ZG9fc2VydmVyLmMgfCA0ICsrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLnR4dCBiL0NoYW5nZUxvZy50eHQKK2luZGV4IGQ2MzU5Y2EuLjRjYzI0ZGUgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cudHh0CisrKysgYi9DaGFuZ2VMb2cudHh0CitAQCAtMSwzICsxLDggQEAKKysyMDE2LTA5LTI4OgorKwkqIChzZWVicykgU2VuZCBlcnJvcnMgdG8gbG9nIHdoZW4gZGFlbW9uaXppbmcsIGJ1dCBkbyB0aGF0IGEgbG90CisrCSAgc29vbmVyIHRvIHByZXZlbnQgc3RhcnR1cCBtZXNzYWdlcyB3aGljaCBjYW4gc2hvdyB1cCBzcHVyaW91c2x5CisrCSAgd2l0aCBtdWx0aXBsZSBjbGllbnRzLgorKworIDIwMTYtMDctMjg6CisgCSogKHNlZWJzKSBGaXggcGVyZm9ybWFuY2UgaXNzdWUgb24gZGVsZXRpb24gd2l0aCB4YXR0ciBjaGFuZ2VzLgorIAorZGlmZiAtLWdpdCBhL3BzZXVkb19zZXJ2ZXIuYyBiL3BzZXVkb19zZXJ2ZXIuYworaW5kZXggODczMWQyMC4uN2MyZGIyZiAxMDA2NDQKKy0tLSBhL3BzZXVkb19zZXJ2ZXIuYworKysrIGIvcHNldWRvX3NlcnZlci5jCitAQCAtMTYyLDYgKzE2Miw5IEBAIHBzZXVkb19zZXJ2ZXJfc3RhcnQoaW50IGRhZW1vbml6ZSkgeworIAkgKiBTSUdVU1IxLCBvciB1bnRpbCB0b28gbXVjaCB0aW1lIGhhcyBwYXNzZWQuICovCisgCWlmIChkYWVtb25pemUpIHsKKyAJCWludCBjaGlsZDsKKysKKysJCS8qIG1ha2Ugc3RhcnR1cCBtZXNzYWdlcyBnbyBhd2F5IHdoZW4gaW52b2tlZC1hcy1kYWVtb24gKi8KKysJCXBzZXVkb19kZWJ1Z19sb2dmaWxlKFBTRVVET19MT0dGSUxFLCAyKTsKKyAJCWNoaWxkID0gZm9yaygpOworIAkJaWYgKGNoaWxkID09IC0xKSB7CisgCQkJcHNldWRvX2RpYWcoIkNvdWxkbid0IGZvcmsgY2hpbGQgcHJvY2VzczogJXNcbiIsCitAQCAtMjMxLDcgKzIzNCw2IEBAIHBzZXVkb19zZXJ2ZXJfc3RhcnQoaW50IGRhZW1vbml6ZSkgeworIAkJCXNldHNpZCgpOworIAkJCWZjbG9zZShzdGRpbik7CisgCQkJZmNsb3NlKHN0ZG91dCk7CistCQkJcHNldWRvX2RlYnVnX2xvZ2ZpbGUoUFNFVURPX0xPR0ZJTEUsIDIpOworIAkJCS8qIGFuZCB0aGVuIGp1c3QgZXhlY3V0ZSB0aGUgc2VydmVyIGNvZGUgbm9ybWFsbHkuICAqLworIAkJCS8qIEFueSBsb2dnaW5nIHdpbGwgcHJlc3VtYWJseSBnbyB0byBsb2dmaWxlLCBidXQKKyAJCQkgKiBleGl0IHN0YXR1cyB3aWxsIG1ha2UgaXQgYmFjayB0byB0aGUgcGFyZW50IGZvcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMi1Vc2UtY29ycmVjdC1maWxlLWRlc2NyaXB0b3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAyLVVzZS1jb3JyZWN0LWZpbGUtZGVzY3JpcHRvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZmZDg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMi1Vc2UtY29ycmVjdC1maWxlLWRlc2NyaXB0b3IucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSA3YTA2MzJjYWQ4NTE4MjZkODA0ZGIwNTQwZDlhNTk3NzNlNmJmMjljIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KK0RhdGU6IFdlZCwgMjggU2VwIDIwMTYgMjI6MTI6MjkgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFVzZSBjb3JyZWN0IGZpbGUgZGVzY3JpcHRvcgorCitTbyBpdCB0dXJucyBvdXQgdGhhdCBwc2V1ZG9fbG9nZmlsZSgpIHdhcyByZXR1cm5pbmcgMCBvciAtMSwgYW5kCitwc2V1ZG9fZGVidWdfbG9nZmlsZSgpIHdhcyBleHBlY3RpbmcgaXQgdG8gYmUgdGhlIGNvcnJlY3QgZmlsZSBkZXNjcmlwdG9yCit0byB1c2UuIEFuZCBpdCdzIGJhc2ljYWxseSBhIG15c3RlcnkgdGhhdCBhbnkgb2YgdGhhdCBldmVyIHdvcmtlZC4KKworU2lnbmVkLW9mZi1ieTogU2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBDaGFuZ2VMb2cudHh0IHwgMyArKysKKyBwc2V1ZG9fdXRpbC5jIHwgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLnR4dCBiL0NoYW5nZUxvZy50eHQKK2luZGV4IDRjYzI0ZGUuLjQ5YTZjMzYgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cudHh0CisrKysgYi9DaGFuZ2VMb2cudHh0CitAQCAtMiw2ICsyLDkgQEAKKyAJKiAoc2VlYnMpIFNlbmQgZXJyb3JzIHRvIGxvZyB3aGVuIGRhZW1vbml6aW5nLCBidXQgZG8gdGhhdCBhIGxvdAorIAkgIHNvb25lciB0byBwcmV2ZW50IHN0YXJ0dXAgbWVzc2FnZXMgd2hpY2ggY2FuIHNob3cgdXAgc3B1cmlvdXNseQorIAkgIHdpdGggbXVsdGlwbGUgY2xpZW50cy4KKysJKiAoc2VlYnMpIHJldHVybiBmaWxlIGRlc2NyaXB0b3IgZnJvbSBwc2V1ZG9fbG9nZmlsZSwgc28gd2Ugc2V0CisrCSAgcHNldWRvX3V0aWxfZGVidWdfZmQgdG8gdGhlIHJpZ2h0IHZhbHVlIGluc3RlYWQgb2YgdG8gc3RkaW4uCisrCSAgTmljZSBidWcuCisgCisgMjAxNi0wNy0yODoKKyAJKiAoc2VlYnMpIEZpeCBwZXJmb3JtYW5jZSBpc3N1ZSBvbiBkZWxldGlvbiB3aXRoIHhhdHRyIGNoYW5nZXMuCitkaWZmIC0tZ2l0IGEvcHNldWRvX3V0aWwuYyBiL3BzZXVkb191dGlsLmMKK2luZGV4IDBjMTU2Y2YuLmE2MGM3NGIgMTAwNjQ0CistLS0gYS9wc2V1ZG9fdXRpbC5jCisrKysgYi9wc2V1ZG9fdXRpbC5jCitAQCAtMTU2OSw3ICsxNTY5LDcgQEAgcHNldWRvX2xvZ2ZpbGUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmRlZm5hbWUsIGludCBwcmVmZXJfZmQpIHsKKyAJaWYgKGZkID09IC0xKQorIAkJcmV0dXJuIC0xOworIAllbHNlCistCQlyZXR1cm4gMDsKKysJCXJldHVybiBmZDsKKyB9CisgCisgaW50CitAQCAtMTU3OSw2ICsxNTc5LDcgQEAgcHNldWRvX2RlYnVnX2xvZ2ZpbGUoY2hhciAqZGVmbmFtZSwgaW50IHByZWZlcl9mZCkgeworIAorIAlmZCA9IHBzZXVkb19sb2dmaWxlKGZpbGVuYW1lLCBkZWZuYW1lLCBwcmVmZXJfZmQpOworIAlpZiAoZmQgPiAtMSkgeworKwkJcHNldWRvX2RpYWcoImRlYnVnX2xvZ2ZpbGU6IGZkICVkXG4iLCBmZCk7CisgCQlwc2V1ZG9fdXRpbF9kZWJ1Z19mZCA9IGZkOworIAkJcmV0dXJuIDA7CisgCX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDMtRml4LXJlbmFtZWF0LXBhcmFsbGVsLXRvLXByZXZpb3VzLWZpeC10by1yZW5hbWUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAzLUZpeC1yZW5hbWVhdC1wYXJhbGxlbC10by1wcmV2aW91cy1maXgtdG8tcmVuYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWMwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAzLUZpeC1yZW5hbWVhdC1wYXJhbGxlbC10by1wcmV2aW91cy1maXgtdG8tcmVuYW1lLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gZDlhYjNhMGFjYzk0MTUxMDQ4NDk4YjFlYTRkNjllNzcwN2RmMTUyNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNlZWJzIDxzZWVic0BzZWVicy5uZXQ+CitEYXRlOiBGcmksIDMwIFNlcCAyMDE2IDEwOjU2OjM1IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBGaXggcmVuYW1lYXQgKHBhcmFsbGVsIHRvIHByZXZpb3VzIGZpeCB0byByZW5hbWUpCisKK1RoZXJlIHdhcyBhIGJ1ZyBpbiByZW5hbWUoKSwgd2hpY2ggd2FzIGR1cGxpY2F0ZWQgd2hlbiByZW5hbWVhdCgpIHdhcworaW1wbGVtZW50ZWQsIGFuZCB3aGljaCBnb3QgZml4ZWQgdHdvIHllYXJzIGFnbyBmb3IgcmVuYW1lKCksIGJ1dCBubworb25lIGV2ZXIgdXNlcyByZW5hbWVhdCgpIHNvIGl0IGRpZG4ndCBnZXQgZml4ZWQgdGhlcmUuIFRoYW5rcwordG8gQW50b24gR2VyYXNpbW92IDxhbnRvbkBhZHZhbmNlZHRlbGVtYXRpYy5jb20+IGZvciB0aGUgYnVnIHJlcG9ydAorYW5kIHBhdGNoLgorCitTaWduZWQtb2ZmLWJ5OiBTZWVicyA8c2VlYnNAc2VlYnMubmV0PgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKb3NodWEgTG9jayA8am9zaHVhLmcubG9ja0BpbnRlbC5jb20+CisKKy0tLQorIENoYW5nZUxvZy50eHQgICAgICAgICAgICAgIHwgNCArKysrCisgcG9ydHMvdW5peC9ndXRzL3JlbmFtZWF0LmMgfCA3ICsrKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy50eHQgYi9DaGFuZ2VMb2cudHh0CitpbmRleCA2NWI5NzU5Li5jYTA0Y2MwIDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nLnR4dAorKysrIGIvQ2hhbmdlTG9nLnR4dAorQEAgLTEsMyArMSw3IEBACisrMjAxNi0wOS0zMDoKKysJKiAoc2VlYnMpIEZpeCByZW5hbWUgYXQsIG1hdGNoaW5nIGZpeCBmcm9tIGVlMDBmNjNkIGZvciByZW5hbWUuIEJ1ZworKwkgIGFuZCBmaXggcHJvdmlkZWQgYnkgQW50b24gR2VyYXNpbW92IDxhbnRvbkBhZHZhbmNlZHRlbGVtYXRpYy5jb20+LgorKworIDIwMTYtMDktMjg6CisgCSogKHNlZWJzKSBTZW5kIGVycm9ycyB0byBsb2cgd2hlbiBkYWVtb25pemluZywgYnV0IGRvIHRoYXQgYSBsb3QKKyAJICBzb29uZXIgdG8gcHJldmVudCBzdGFydHVwIG1lc3NhZ2VzIHdoaWNoIGNhbiBzaG93IHVwIHNwdXJpb3VzbHkKK2RpZmYgLS1naXQgYS9wb3J0cy91bml4L2d1dHMvcmVuYW1lYXQuYyBiL3BvcnRzL3VuaXgvZ3V0cy9yZW5hbWVhdC5jCitpbmRleCBhZGUwNTA5Li5kNWUzNmZhIDEwMDY0NAorLS0tIGEvcG9ydHMvdW5peC9ndXRzL3JlbmFtZWF0LmMKKysrKyBiL3BvcnRzL3VuaXgvZ3V0cy9yZW5hbWVhdC5jCitAQCAtMTEsNiArMTEsNyBAQAorIAlpbnQgb2xkcmMsIG5ld3JjOworIAlpbnQgc2F2ZV9lcnJubzsKKyAJaW50IG9sZF9kYl9lbnRyeSA9IDA7CisrCWludCBtYXlfdW5saW5rZWQgPSAwOworIAorIAlwc2V1ZG9fZGVidWcoUERCR0ZfRklMRSwgInJlbmFtZWF0OiAlZCwlcy0+JWQsJXNcbiIsCisgCQlvbGRkaXJmZCwgb2xkcGF0aCA/IG9sZHBhdGggOiAiPG5pbD4iLAorQEAgLTQ0LDEwICs0NSwxNCBAQAorIAkvKiBhcyB3aXRoIHVubGluaywgd2UgaGF2ZSB0byBtYXJrIHRoYXQgdGhlIGZpbGUgbWF5IGdldCBkZWxldGVkICovCisgCW1zZyA9IHBzZXVkb19jbGllbnRfb3AoT1BfTUFZX1VOTElOSywgMCwgLTEsIG5ld2RpcmZkLCBuZXdwYXRoLCBuZXdyYyA/IE5VTEwgOiAmbmV3YnVmKTsKKyAJaWYgKG1zZyAmJiBtc2ctPnJlc3VsdCA9PSBSRVNVTFRfU1VDQ0VFRCkKKysJCW1heV91bmxpbmtlZCA9IDE7CisrCW1zZyA9IHBzZXVkb19jbGllbnRfb3AoT1BfU1RBVCwgMCwgLTEsIG9sZGRpcmZkLCBvbGRwYXRoLCBvbGRyYyA/IE5VTEwgOiAmb2xkYnVmKTsKKysJaWYgKG1zZyAmJiBtc2ctPnJlc3VsdCA9PSBSRVNVTFRfU1VDQ0VFRCkKKyAJCW9sZF9kYl9lbnRyeSA9IDE7CisrCisgCXJjID0gcmVhbF9yZW5hbWVhdChvbGRkaXJmZCwgb2xkcGF0aCwgbmV3ZGlyZmQsIG5ld3BhdGgpOworIAlzYXZlX2Vycm5vID0gZXJybm87CistCWlmIChvbGRfZGJfZW50cnkpIHsKKysJaWYgKG1heV91bmxpbmtlZCkgeworIAkJaWYgKHJjID09IC0xKSB7CisgCQkJLyogc2luY2Ugd2UgZmFpbGVkLCB0aGF0IHdhc24ndCByZWFsbHkgdW5saW5rZWQgLS0gcHV0CisgCQkJICogaXQgYmFjay4KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvRml4LXhhdHRyLXBlcmZvcm1hbmNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvRml4LXhhdHRyLXBlcmZvcm1hbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDcyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9GaXgteGF0dHItcGVyZm9ybWFuY2UucGF0Y2gKQEAgLTAsMCArMSwxMTcgQEAKK0Zyb20gMGQ5MDcxZjMwOTBiYmQ3ODgwNTU4ZjNiNDg4YjIzNmFjMTliNDRmYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IHNlZWJzIDxzZWVic0BzZWVicy5uZXQ+CitEYXRlOiBUaHUsIDI4IEp1bCAyMDE2IDE0OjAyOjEyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBGaXggeGF0dHIgcGVyZm9ybWFuY2UKKworV2hlbiBkZWxldGluZyBmaWxlcywgd2UgKmRvKiBrbm93IHRoZSBpbm9kZSBhbmQgYXR0cmlidXRlLCBtb3N0IG9mIHRoZQordGltZSwgc28gd2UgcGFzcyB0aG9zZSBpbiB3aGVuZXZlciBwb3NzaWJsZS4gVGhlIGZ1bGwgcHVyZ2Ugb2YgdW5tYXRjaGVkCit4YXR0cnMgc2hvdWxkIG5vdCBoYXBwZW4gd2hlbiB0aGUgY29ycmVjdCBkZXYvaW5vIGFyZSBiZWxpZXZlZCB0byBiZSBrbm93bi4KKworU2lnbmVkLW9mZi1ieTogU2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KKworW1lPQ1RPICM5OTI5XQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAoMGQ5MDcxZjMwOTBiYmQ3ODgwNTU4ZjNiNDg4YjIzNmFjMTliNDRmYykKK1NpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NodWEuZy5sb2NrQGludGVsLmNvbT4KKy0tLQorIENoYW5nZUxvZy50eHQgfCAgMyArKysKKyBwc2V1ZG8uYyAgICAgIHwgMTEgKysrKysrKystLS0KKyBwc2V1ZG9fZGIuYyAgIHwgMTUgKysrKysrKysrLS0tLS0tCisgcHNldWRvX2RiLmggICB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy50eHQgYi9DaGFuZ2VMb2cudHh0CitpbmRleCAxMzFmMTYzLi5kNjM1OWNhIDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nLnR4dAorKysrIGIvQ2hhbmdlTG9nLnR4dAorQEAgLTEsMyArMSw2IEBACisrMjAxNi0wNy0yODoKKysJKiAoc2VlYnMpIEZpeCBwZXJmb3JtYW5jZSBpc3N1ZSBvbiBkZWxldGlvbiB3aXRoIHhhdHRyIGNoYW5nZXMuCisrCisgMjAxNi0wNy0wODoKKyAJKiAoUlApIHJlbGVhc2UgMS44LjEKKyAJKiAoam9zaHVhZ2wpIEZpeCBsb2cgdGFibGUgY3JlYXRpb24gaXNzdWUKK2RpZmYgLS1naXQgYS9wc2V1ZG8uYyBiL3BzZXVkby5jCitpbmRleCA1MmY2NDlmLi5kYjFjNDAwIDEwMDY0NAorLS0tIGEvcHNldWRvLmMKKysrKyBiL3BzZXVkby5jCitAQCAtNjAwLDcgKzYwMCwxMiBAQCBwc2V1ZG9fb3AocHNldWRvX21zZ190ICptc2csIGNvbnN0IGNoYXIgKnByb2dyYW0sIGNvbnN0IGNoYXIgKnRhZywgY2hhciAqKnJlc3BvbgorIAkJCQlpZiAoYnlfcGF0aC5kZWxldGluZyAhPSAwKSB7CisgCQkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfRklMRSwgImlub2RlIG1pc21hdGNoIGZvciAnJXMnIC0tIG9sZCBvbmUgd2FzIG1hcmtlZCBmb3IgZGVsZXRpb24sIGRlbGV0aW5nLlxuIiwKKyAJCQkJCQltc2ctPnBhdGgpOworLQkJCQkJcGRiX2RpZF91bmxpbmtfZmlsZShtc2ctPnBhdGgsIGJ5X3BhdGguZGVsZXRpbmcpOworKwkJCQkJLyogaW4gdGhpcyBjYXNlLCB3ZSBkb24ndCB0cnVzdCB0aGUKKysJCQkJCSAqIGV4aXN0aW5nIGVudHJpZXMsIHNvIHdlIHdpbGwgZG8gdGhlCisrCQkJCQkgKiBtb3JlIGV4cGVuc2l2ZSBzd2VlcCBmb3Igc3RyYXkKKysJCQkJCSAqIHhhdHRycy4KKysJCQkJCSAqLworKwkJCQkJcGRiX2RpZF91bmxpbmtfZmlsZShtc2ctPnBhdGgsIE5VTEwsIGJ5X3BhdGguZGVsZXRpbmcpOworIAkJCQl9IGVsc2UgeworIAkJCQkJcHNldWRvX2RpYWcoImlub2RlIG1pc21hdGNoOiAnJXMnIGlubyAlbGx1IGluIGRiLCAlbGx1IGluIHJlcXVlc3QuXG4iLAorIAkJCQkJCW1zZy0+cGF0aCwKK0BAIC02OTgsNyArNzAzLDcgQEAgcHNldWRvX29wKHBzZXVkb19tc2dfdCAqbXNnLCBjb25zdCBjaGFyICpwcm9ncmFtLCBjb25zdCBjaGFyICp0YWcsIGNoYXIgKipyZXNwb24KKyAJCQkJaWYgKGJ5X2luby5kZWxldGluZyAhPSAwKSB7CisgCQkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfRklMRSwgImlub2RlIG1pc21hdGNoIGZvciAnJXMnIC0tIG9sZCBvbmUgd2FzIG1hcmtlZCBmb3IgZGVsZXRpb24sIGRlbGV0aW5nLlxuIiwKKyAJCQkJCQltc2ctPnBhdGgpOworLQkJCQkJcGRiX2RpZF91bmxpbmtfZmlsZShwYXRoX2J5X2lubywgYnlfaW5vLmRlbGV0aW5nKTsKKysJCQkJCXBkYl9kaWRfdW5saW5rX2ZpbGUocGF0aF9ieV9pbm8sICZieV9pbm8sIGJ5X2luby5kZWxldGluZyk7CisgCQkJCX0gZWxzZSB7CisgCQkJCQlwc2V1ZG9fZGlhZygicGF0aCBtaXNtYXRjaCBbJWQgbGluayVzXTogaW5vICVsbHUgZGIgJyVzJyByZXEgJyVzJy5cbiIsCisgCQkJCQkJbXNnLT5ubGluaywKK0BAIC05MzAsNyArOTM1LDcgQEAgcHNldWRvX29wKHBzZXVkb19tc2dfdCAqbXNnLCBjb25zdCBjaGFyICpwcm9ncmFtLCBjb25zdCBjaGFyICp0YWcsIGNoYXIgKipyZXNwb24KKyAJCX0KKyAJCWJyZWFrOworIAljYXNlIE9QX0RJRF9VTkxJTks6CistCQlwZGJfZGlkX3VubGlua19maWxlKG1zZy0+cGF0aCwgbXNnLT5jbGllbnQpOworKwkJcGRiX2RpZF91bmxpbmtfZmlsZShtc2ctPnBhdGgsIG1zZywgbXNnLT5jbGllbnQpOworIAkJYnJlYWs7CisgCWNhc2UgT1BfQ0FOQ0VMX1VOTElOSzoKKyAJCXBkYl9jYW5jZWxfdW5saW5rX2ZpbGUobXNnKTsKK2RpZmYgLS1naXQgYS9wc2V1ZG9fZGIuYyBiL3BzZXVkb19kYi5jCitpbmRleCAyODliYjI5Li5lN2RkMTkzIDEwMDY0NAorLS0tIGEvcHNldWRvX2RiLmMKKysrKyBiL3BzZXVkb19kYi5jCitAQCAtMTg0OCw3ICsxODQ4LDcgQEAgcGRiX2RpZF91bmxpbmtfZmlsZXMoaW50IGRlbGV0aW5nKSB7CisgCisgLyogY29uZmlybSBkZWxldGlvbiBvZiBhIHNwZWNpZmljIGZpbGUgYnkgYSBnaXZlbiBjbGllbnQgKi8KKyBpbnQKKy1wZGJfZGlkX3VubGlua19maWxlKGNoYXIgKnBhdGgsIGludCBkZWxldGluZykgeworK3BkYl9kaWRfdW5saW5rX2ZpbGUoY2hhciAqcGF0aCwgcHNldWRvX21zZ190ICptc2csIGludCBkZWxldGluZykgeworIAlzdGF0aWMgc3FsaXRlM19zdG10ICpkZWxldGVfZXhhY3Q7CisgCWludCByYywgZXhhY3Q7CisgCWNoYXIgKnNxbF9kZWxldGVfZXhhY3QgPSAiREVMRVRFIEZST00gZmlsZXMgV0hFUkUgcGF0aCA9ID8gQU5EIGRlbGV0aW5nID0gPzsiOworQEAgLTE4NzgsMTEgKzE4NzgsMTQgQEAgcGRiX2RpZF91bmxpbmtfZmlsZShjaGFyICpwYXRoLCBpbnQgZGVsZXRpbmcpIHsKKyAJZXhhY3QgPSBzcWxpdGUzX2NoYW5nZXMoZmlsZV9kYik7CisgCXBzZXVkb19kZWJ1ZyhQREJHRl9EQiwgIihleGFjdCAlZClcbiIsIGV4YWN0KTsKKyAJc3FsaXRlM19yZXNldChkZWxldGVfZXhhY3QpOworLQlzcWxpdGUzX2NsZWFyX2JpbmRpbmdzKGRlbGV0ZV9leGFjdCk7CistCS8qIHdlIGhhdmUgdG8gY2xlYW4gZXZlcnl0aGluZyBiZWNhdXNlIHdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhlCistCSAqIGRldmljZS9pbm9kZS4uLgorLQkgKi8KKy0JcGRiX2NsZWFyX3VudXNlZF94YXR0cnMoKTsKKysJaWYgKG1zZykgeworKwkJcGRiX2NsZWFyX3hhdHRycyhtc2cpOworKwl9IGVsc2UgeworKwkJLyogd2UgaGF2ZSB0byBjbGVhbiBldmVyeXRoaW5nIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB0aGUKKysJCSAqIGRldmljZS9pbm9kZS4uLgorKwkJICovCisrCQlwZGJfY2xlYXJfdW51c2VkX3hhdHRycygpOworKwl9CisgCXJldHVybiByYyAhPSBTUUxJVEVfRE9ORTsKKyB9CisgCitkaWZmIC0tZ2l0IGEvcHNldWRvX2RiLmggYi9wc2V1ZG9fZGIuaAoraW5kZXggYTU0ZjNjMS4uMWIyNTk5YyAxMDA2NDQKKy0tLSBhL3BzZXVkb19kYi5oCisrKysgYi9wc2V1ZG9fZGIuaAorQEAgLTM5LDcgKzM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeworIAorIGV4dGVybiBpbnQgcGRiX21heWJlX2JhY2t1cCh2b2lkKTsKKyBleHRlcm4gaW50IHBkYl9jYW5jZWxfdW5saW5rX2ZpbGUocHNldWRvX21zZ190ICptc2cpOworLWV4dGVybiBpbnQgcGRiX2RpZF91bmxpbmtfZmlsZShjaGFyICpwYXRoLCBpbnQgZGVsZXRpbmcpOworK2V4dGVybiBpbnQgcGRiX2RpZF91bmxpbmtfZmlsZShjaGFyICpwYXRoLCBwc2V1ZG9fbXNnX3QgKm1zZywgaW50IGRlbGV0aW5nKTsKKyBleHRlcm4gaW50IHBkYl9kaWRfdW5saW5rX2ZpbGVzKGludCBkZWxldGluZyk7CisgZXh0ZXJuIGludCBwZGJfbGlua19maWxlKHBzZXVkb19tc2dfdCAqbXNnKTsKKyBleHRlcm4gaW50IHBkYl9tYXlfdW5saW5rX2ZpbGUocHNldWRvX21zZ190ICptc2csIGludCBkZWxldGluZyk7CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAKaW5kZXggODFiZjczMi4uYmIzZGJjYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAKQEAgLTEsMiArMSwzIEBACiByb290Oio6MDoKIG1haWw6Kjo4Ogorbm9ib2R5Oio6OTk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QKaW5kZXggYzE0NThkYy4uMDg4OWM1NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZApAQCAtMSArMSwyIEBACiByb290OjowOjA6cm9vdDovaG9tZS9yb290Oi9iaW4vc2gKK25vYm9keToqOjY1NTM0OjY1NTM0Om5vYm9keTovbm9uZXhpc3RlbnQ6L2Jpbi9zaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvaGFuZGxlLXJlbW92ZS14YXR0ci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2hhbmRsZS1yZW1vdmUteGF0dHIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiN2YzMGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvaGFuZGxlLXJlbW92ZS14YXR0ci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLUZyb20gYTI0Y2YxMDI5NjdhNDk2NmJmYWJlMzZjMzU0MmZiNjVmMzViZjUzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KLURhdGU6IFdlZCwgMjMgTWFyIDIwMTYgMTE6NTU6MjUgLTA1MDAKLVN1YmplY3Q6IGFjdHVhbGx5IGhhbmRsZSByZW1vdmVfeGF0dHIgY29ycmVjdGx5Ci0KLVRoZSBwYXRoIGlzIHJlcXVpcmVkIGJ1dCB3YXNuJ3QgYmVpbmcgZXh0cmFjdGVkIGZyb20gdGhlIGNsaWVudCdzIG1lc3NhZ2UsCi1yZXN1bHRpbmcgaW4geGF0dHIgcmVtb3ZhbCBuZXZlciB3b3JraW5nLiBUaGlzIGRvZXMgbm90IGZ1bGx5IGFkZHJlc3Mgc29tZQotZGVlcGVyIHByb2JsZW1zIHdpdGggdGhlIHhhdHRyIGltcGxlbWVudGF0aW9uLCBidXQgYXQgbGVhc3QgdGhlIGNvbW1vbgotcmVtb3ZhbCBjYXNlIHdvcmtzLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUluZGV4OiBwc2V1ZG8tMS43LjUvQ2hhbmdlTG9nLnR4dAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHBzZXVkby0xLjcuNS5vcmlnL0NoYW5nZUxvZy50eHQKLSsrKyBwc2V1ZG8tMS43LjUvQ2hhbmdlTG9nLnR4dAotQEAgLTEsMyArMSw3IEBACi0rMjAxNi0wMy0yMjoKLSsgICAgICAgKiAoc2VlYnMpIGV4dHJhY3QgcGF0aCBmcm9tIG1lc3NhZ2UgZm9yIHJlbW92ZV94YXR0ciBzbyBpdAotKyAgICAgICAgIGFjdHVhbGx5IHdvcmtzLgotKwotIDIwMTYtMDItMDk6Ci0gICAgICAgICAqIChzZWVicykgMS43LjUgcmVsZWFzZQotIAotSW5kZXg6IHBzZXVkby0xLjcuNS9wc2V1ZG8uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHBzZXVkby0xLjcuNS5vcmlnL3BzZXVkby5jCi0rKysgcHNldWRvLTEuNy41L3BzZXVkby5jCi1AQCAtNTQzLDYgKzU0Myw3IEBAIHBzZXVkb19vcChwc2V1ZG9fbXNnX3QgKm1zZywgY29uc3QgY2hhcgotIAkJY2FzZSBPUF9HRVRfWEFUVFI6Ci0gCQljYXNlIE9QX0xJU1RfWEFUVFI6Ci0gCQljYXNlIE9QX1JFUExBQ0VfWEFUVFI6Ci0rCQljYXNlIE9QX1JFTU9WRV9YQVRUUjoKLSAJCWNhc2UgT1BfU0VUX1hBVFRSOgotIAkJCS8qIEluIGEgcmVuYW1lIHRoZXJlIGFyZSB0d28gcGF0aHMsIG51bGwgc2VwYXJhdGVkIGluIG1zZy0+cGF0aCAqLwotIAkJCWluaXRpYWxfbGVuID0gc3RybGVuKG1zZy0+cGF0aCk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9tb3JlcmV0cmllcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL21vcmVyZXRyaWVzLnBhdGNoCmluZGV4IGMxZTU1NTIuLmFkZWEyNjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL21vcmVyZXRyaWVzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL21vcmVyZXRyaWVzLnBhdGNoCkBAIC00LDE1ICs0LDE1IEBACiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIFJQIDIwMTYvMi8yOAogCi1JbmRleDogcHNldWRvLTEuNy41L3BzZXVkb19jbGllbnQuYworSW5kZXg6IGdpdC9wc2V1ZG9fY2xpZW50LmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBwc2V1ZG8tMS43LjUub3JpZy9wc2V1ZG9fY2xpZW50LmMKLSsrKyBwc2V1ZG8tMS43LjUvcHNldWRvX2NsaWVudC5jCi1AQCAtMTIxNCw3ICsxMjE0LDcgQEAgcHNldWRvX2NsaWVudF9zZXR1cCh2b2lkKSB7Ci0gCXJldHVybiAxOworLS0tIGdpdC5vcmlnL3BzZXVkb19jbGllbnQuYworKysrIGdpdC9wc2V1ZG9fY2xpZW50LmMKK0BAIC0xMjgyLDcgKzEyODIsNyBAQCBwc2V1ZG9fY2xpZW50X3NldHVwKHZvaWQpIHsKKyAJfQogIH0KICAKLS0jZGVmaW5lIFBTRVVET19SRVRSSUVTIDUwCistI2RlZmluZSBQU0VVRE9fUkVUUklFUyAyMAogKyNkZWZpbmUgUFNFVURPX1JFVFJJRVMgMjUwCiAgc3RhdGljIHBzZXVkb19tc2dfdCAqCiAgcHNldWRvX2NsaWVudF9yZXF1ZXN0KHBzZXVkb19tc2dfdCAqbXNnLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICpwYXRoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvLmluYwppbmRleCAwZGU3YjM2Li4xOGNlOWY5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMKQEAgLTI2LDYgKzI2LDggQEAKIE5PMzJMSUJTID8/PSAiMSIKIE5PMzJMSUJTX2NsYXNzLW5hdGl2ZXNkayA9ICIxIgogCitQU0VVRE9fRVhUUkFfT1BUUyA/PSAiLS1lbmFibGUtZm9yY2UtYXN5bmMgLS13aXRob3V0LXBhc3N3ZC1mYWxsYmFjayIKKwogIyBDb21waWxlIGZvciB0aGUgbG9jYWwgbWFjaGluZSBhcmNoLi4uCiBkb19jb21waWxlICgpIHsKIAlpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgpAQCAtMTEyLDEwICsxMTQsMTUgQEAKIAlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nICR7TUFLRU9QVFN9ICdMSUI9bGliL3BzZXVkby9saWIkKE1BUks2NCknIGluc3RhbGwKIH0KIAotIyBUd28gYmVsb3cgYXJlIHRoZSBzYW1lCi0jIElmIG5lY2Vzc2FyeSBpbnN0YWxsIGZvciB0aGUgYWx0ZXJuYXRpdmUgbWFjaGluZSBhcmNoLiAgVGhpcyBpcyBvbmx5IAotIyBuZWNlc3NhcnkgaW4gYSBuYXRpdmUgYnVpbGQuCiBkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwkjIFRoZSBmYWxsYmFjayBmaWxlcyBzaG91bGQgbmV2ZXIgYmUgbW9kaWZpZWQKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLXBhc3N3ZCAke0R9JHtzeXNjb25mZGlyfS9wYXNzd2QKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLWdyb3VwICR7RH0ke3N5c2NvbmZkaXJ9L2dyb3VwCisKKwkjIFR3byBuYXRpdmUvbmF0aXZlc2RrIGVudHJpZXMgYmVsb3cgYXJlIHRoZSBzYW1lCisJIyBJZiBuZWNlc3NhcnkgaW5zdGFsbCBmb3IgdGhlIGFsdGVybmF0aXZlIG1hY2hpbmUgYXJjaC4gIFRoaXMgaXMgb25seQorCSMgbmVjZXNzYXJ5IGluIGEgbmF0aXZlIGJ1aWxkLgogCW1heWJlX21ha2UzMgogCWlmICRtYWtlMzI7IHRoZW4KIAkJbWtkaXIgLXAgJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYgpAQCAtMTI5LDYgKzEzNiw3IEBACiAJCW1rZGlyIC1wICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIKIAkJY3AgbGliL3BzZXVkby9saWIvbGlicHNldWRvLnNvICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIvLgogCWZpCisJY2hycGF0aCAtZCAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliKi9saWJwc2V1ZG8uc28KIH0KIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGMyMGFkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgcHNldWRvLmluYwotCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3BzZXVkby8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgZmlsZTovL2ZhbGxiYWNrLXBhc3N3ZCBcCi0gICAgZmlsZTovL2ZhbGxiYWNrLWdyb3VwIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjRjZDM5NTAyZjliZDBlNzM0ZGVlODBlMDhiMjhhNWYxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmMmNhY2E1ZjE1NzlhMzc2YTUwOWNkODFhODExNTZmYzIwODY1MGFkZDlmMGFmMjc1ZGE5ZTkxMWYxOGYyOTEiCi0KLVBTRVVET19FWFRSQV9PUFRTID89ICItLWVuYWJsZS1mb3JjZS1hc3luYyAtLXdpdGhvdXQtcGFzc3dkLWZhbGxiYWNrIgotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgewotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KLQkjIFRoZSBmYWxsYmFjayBmaWxlcyBzaG91bGQgbmV2ZXIgYmUgbW9kaWZpZWQKLQlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLXBhc3N3ZCAke0R9JHtzeXNjb25mZGlyfS9wYXNzd2QKLQlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLWdyb3VwICR7RH0ke3N5c2NvbmZkaXJ9L2dyb3VwCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MGU2NDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNy41LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcmVxdWlyZSBwc2V1ZG8uaW5jCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvcHNldWRvLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKLSAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtUHJ1bmUtUElFLWZsYWdzLnBhdGNoIFwKLSAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKLSAgICBmaWxlOi8vZmFsbGJhY2stZ3JvdXAgXAotICAgIGZpbGU6Ly9tb3JlcmV0cmllcy5wYXRjaCBcCi0gICAgZmlsZTovL2hhbmRsZS1yZW1vdmUteGF0dHIucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYzEwMjA5OTM4ZjAzMTI4ZDBjMTkzZjA0MWZmMzU5NmQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmQ4OWNhZGVjOTg0ZDNiODIwMmFjYTQ2NTg5OGIxYmI0MzUwZTBkNjNiYTlhYTlhYzg5OWY2ZjUwMjcwZTY4OCIKLQotUFNFVURPX0VYVFJBX09QVFMgPz0gIi0tZW5hYmxlLWZvcmNlLWFzeW5jIC0td2l0aG91dC1wYXNzd2QtZmFsbGJhY2siCi0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQotCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAotCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAotCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjguMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjcwMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuOC4xLmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgcHNldWRvLmluYworCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9wc2V1ZG8vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtUHJ1bmUtUElFLWZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZhbGxiYWNrLXBhc3N3ZCBcCisgICAgICAgICAgIGZpbGU6Ly9mYWxsYmFjay1ncm91cCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3JlcmV0cmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgteGF0dHItcGVyZm9ybWFuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1zZW5kLVNJR1VTUjEtdG8taW5pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVF1aWV0LWRpYWdub3N0aWNzLWR1cmluZy1zdGFydHVwLWZvci1wc2V1ZG8tZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLVVzZS1jb3JyZWN0LWZpbGUtZGVzY3JpcHRvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeC1yZW5hbWVhdC1wYXJhbGxlbC10by1wcmV2aW91cy1maXgtdG8tcmVuYW1lLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWUzOGU0ZmI2MmZmODhhZDA2N2IxYTVhMzgyNWJhYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGFjNGFkMmQyMTIyODA1MzE1MTEyMTMyMGY2MjlkNDFkZDVjMGM4NzY5NWFjNGU3YWVhMjg2YzQxNDE5MmFiNSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fZ2l0LmJiCmluZGV4IGFiZmYxY2YuLjgxMTBiMWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYgpAQCAtMSwxMSArMSwxNSBAQAogcmVxdWlyZSBwc2V1ZG8uaW5jCiAKLVNSQ1JFViA9ICI3ODZjNmQzODEzNjIyZDE4ZTEyZDM2YzRhYTcyMmFmNmE0MTdjOGZhIgotUFYgPSAiMS43LjUrZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiYmVmYzZkYmQ2NDY5ZDQyOGM5ZTA4MzBkYmU1MWJkZjdhYzM5ZDlhZSIKK1BWID0gIjEuOC4xK2dpdCR7U1JDUFZ9IgogCiBERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcHNldWRvIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wc2V1ZG8gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtUHJ1bmUtUElFLWZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZhbGxiYWNrLXBhc3N3ZCBcCisgICAgICAgICAgIGZpbGU6Ly9mYWxsYmFjay1ncm91cCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3JlcmV0cmllcy5wYXRjaCIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5LzAwMDEtRG9uLXQtc2VhcmNoLXVzci1hbmQtc28tb24tZm9yLWxpYnJhcmllcy1ieS1kZWZhdWx0LS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzLzAwMDEtRG9uLXQtc2VhcmNoLXVzci1hbmQtc28tb24tZm9yLWxpYnJhcmllcy1ieS1kZWZhdWx0LS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5LzAwMDEtRG9uLXQtc2VhcmNoLXVzci1hbmQtc28tb24tZm9yLWxpYnJhcmllcy1ieS1kZWZhdWx0LS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hYXJjaDY0L19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYWFyY2g2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDlkZWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYWFyY2g2NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMyIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfT0ZGX1QgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwQQorCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hYXJjaDY0L2NvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYWFyY2g2NC9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2FybS9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYXJtL2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hcm0vbnVtcHljb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9udW1weWNvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hcm0vbnVtcHljb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYXJtZWIvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYXJtZWIvY29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYXJtZWIvbnVtcHljb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL251bXB5Y29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2FybWViL251bXB5Y29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2ZpeF9zaGViYW5nX2YycHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9maXhfc2hlYmFuZ19mMnB5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTZlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9maXhfc2hlYmFuZ19mMnB5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0F2b2lkcyB1c2luZyBweXRob24gZnJvbSB0aGUgSE9TVHMgbmF0aXZlIHN5c3Jvb3QgZm9yIGYycHksCit1c2VzIFRBUkdFVCBlbnYgcHl0aG9uIGluc3RlYWQuCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogbnVtcHktMS4xMS4wL251bXB5L2YycHkvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBudW1weS0xLjExLjAub3JpZy9udW1weS9mMnB5L3NldHVwLnB5CisrKysgbnVtcHktMS4xMS4wL251bXB5L2YycHkvc2V0dXAucHkKK0BAIC0zNywxMCArMzcsMTMgQEAgZGVmIF9nZXRfZjJweV9zaGViYW5nKCk6CisgICAgIHNob3VsZCBiZSBgYCMhcHl0aG9uYGAgcmF0aGVyIHRoYW4gYGAjIWBgIGZvbGxvd2VkIGJ5IHRoZSBjb250ZW50cyBvZgorICAgICBgYHN5cy5leGVjdXRhYmxlYGAuCisgICAgICIiIgorLSAgICBpZiBzZXQoKCdiZGlzdF93aGVlbCcsICdiZGlzdF9lZ2cnLCAnYmRpc3Rfd2luaW5zdCcsCistICAgICAgICAgICAgJ2JkaXN0X3JwbScpKS5pbnRlcnNlY3Rpb24oc3lzLmFyZ3YpOgorLSAgICAgICAgcmV0dXJuICcjIXB5dGhvbicKKy0gICAgcmV0dXJuICcjIScgKyBzeXMuZXhlY3V0YWJsZQorKyAgICAjaWYgc2V0KCgnYmRpc3Rfd2hlZWwnLCAnYmRpc3RfZWdnJywgJ2JkaXN0X3dpbmluc3QnLAorKyAgICAjICAgICAgICAnYmRpc3RfcnBtJykpLmludGVyc2VjdGlvbihzeXMuYXJndik6CisrICAgICMgICAgcmV0dXJuICcjIXB5dGhvbicKKysgICAgI3JldHVybiAnIyEnICsgc3lzLmV4ZWN1dGFibGUKKysgICAgCisrICAgICMgT24gT0UsIHdlIG5lZWQgdG8gYXZvaWQgdXNpbmcgdGhlIEhPU1RzIHB5dGhvbi1uYXRpdmUsIHdlIHJldHVybiBlbnYgcHl0aG9uIGluc3RlYWQKKysgICAgcmV0dXJuICcjIS91c3IvYmluL2VudiBweXRob24nCisgCisgCisgZGVmIGNvbmZpZ3VyYXRpb24ocGFyZW50X3BhY2thZ2U9JycsIHRvcF9wYXRoPU5vbmUpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwcy9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHMvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0NjVjMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHMvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMiBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX09GRl9UIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwQQorCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzL2NvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwcy9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwczY0L19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwczY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmIzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMiBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9FTkFCTEVfU0VQQVJBVEVfQ09NUElMQVRJT04gMQorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9PRkZfVCA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMEEKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzNjQvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHM2NC9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHM2NG4zMi9fbnVtcHljb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwczY0bjMyL19udW1weWNvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwczY0bjMyL2NvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzNjRuMzIvY29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzZWwvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHNlbC9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwc2VsL251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzZWwvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjdjZDUxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwc2VsL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxOCBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9PRkZfVCA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYy9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3Bvd2VycGMvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3MjYyYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3Bvd2VycGMvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMiBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9FTkFCTEVfU0VQQVJBVEVfQ09NUElMQVRJT04gMQorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9PRkZfVCA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMEEKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYy9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvY29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3Bvd2VycGMvY29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3Bvd2VycGM2NC9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3Bvd2VycGM2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWJiMzkwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfRU5BQkxFX1NFUEFSQVRFX0NPTVBJTEFUSU9OIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfT0ZGX1QgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDBBCisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYzY0L2NvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9wb3dlcnBjNjQvY29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9yZW1vdmUtYnVpbGQtcGF0aC1pbi1jb21tZW50cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3JlbW92ZS1idWlsZC1wYXRoLWluLWNvbW1lbnRzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcmVtb3ZlLWJ1aWxkLXBhdGgtaW4tY29tbWVudHMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3JlbW92ZS1idWlsZC1wYXRoLWluLWNvbW1lbnRzLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMveDg2LTY0L19udW1weWNvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L19udW1weWNvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy94ODYtNjQvX251bXB5Y29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy94ODYtNjQvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvY29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3g4Ni02NC9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9jb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3g4Ni9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMveDg2L2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy94ODYvbnVtcHljb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9udW1weWNvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy94ODYvbnVtcHljb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uLW51bXB5XzEuMTEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbi1udW1weV8xLjExLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZjcyMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbi1udW1weV8xLjExLjEuYmIKQEAgLTAsMCArMSwxMDQgQEAKK1NVTU1BUlkgPSAiQSBzb3BoaXN0aWNhdGVkIE51bWVyaWMgUHJvY2Vzc2luZyBQYWNrYWdlIGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTdlNTFhNTY3N2IyMmI4NjVhYmJmYjNkZmY2ZmZiMmQwIgorCitTUkNOQU1FID0gIm51bXB5IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2Uvbi8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtc2VhcmNoLXVzci1hbmQtc28tb24tZm9yLWxpYnJhcmllcy1ieS1kZWZhdWx0LS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtYnVpbGQtcGF0aC1pbi1jb21tZW50cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfc2hlYmFuZ19mMnB5LnBhdGNoIFwKKyAgICAgICAgICAgJHtDT05GSUdGSUxFU1VSSX0gIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL251bXB5L2ZpbGVzLyIKKworQ09ORklHRklMRVNVUkkgPz0gIiIKKworQ09ORklHRklMRVNVUklfYWFyY2g2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX2FybSA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtZWIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNlbCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYtNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NG4zMiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKKworUyA9ICIke1dPUktESVJ9L251bXB5LSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworIyBNYWtlIHRoZSBidWlsZCBmYWlsIGFuZCByZXBsYWNlICpjb25maWcuaCB3aXRoIHByb3BlciBvbmUKKyMgVGhpcyBpcyBhIHVnbHksIHVnbHkgaGFjayAtIEtvZW4KK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKKyAgICB0cnVlCisgICAgY3AgJHtXT1JLRElSfS8qY29uZmlnLmggJHtTfS9idWlsZC8kKGxzICR7U30vYnVpbGQgfCBncmVwIHNyYykvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5LworfQorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L251bXB5L2NvcmUvbGliLyouYSIKKworU1JDX1VSSVttZDVzdW1dID0gIjJmNDRhODk1YTgxMDRmZmFjMTQwYzNhNzBlZGJkNDUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRjNDA4MmM0Mzk3OWNjODU2YTJiZjM1MmE4Mjk3ZWExMDljY2IzMjQ0ZDc4M2FlMDY3ZWIyZWU1YjBkNTc3Y2QiCisKKyMgaW5zdGFsbCB3aGF0IGlzIG5lZWRlZCBmb3IgbnVtcHkudGVzdCgpCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tdW5pdHRlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpZmZsaWIgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBwcmludCBcCisgICAgICAgICAgICAgICAgICBweXRob24tcGlja2xlIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1zaGVsbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbm9zZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tZG9jdGVzdCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGF0ZXRpbWUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpc3R1dGlscyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbWlzYyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbW1hcCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1udW1iZXJzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1weWRvYyBcCisgICAgICAgICAgICAgICAgICBweXRob24tcGtndXRpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZW1haWwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXN1YnByb2Nlc3MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1jdHlwZXMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXRocmVhZGluZyBcCisiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbjMtbnVtcHlfMS4xMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uMy1udW1weV8xLjExLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjYTIyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbjMtbnVtcHlfMS4xMS4wLmJiCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIkEgc29waGlzdGljYXRlZCBOdW1lcmljIFByb2Nlc3NpbmcgUGFja2FnZSBmb3IgUHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT03ZTUxYTU2NzdiMjJiODY1YWJiZmIzZGZmNmZmYjJkMCIKKworU1JDTkFNRSA9ICJudW1weSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL24vJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LXNlYXJjaC11c3ItYW5kLXNvLW9uLWZvci1saWJyYXJpZXMtYnktZGVmYXVsdC0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWJ1aWxkLXBhdGgtaW4tY29tbWVudHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3NoZWJhbmdfZjJweS5wYXRjaCBcCisgICAgICAgICAgICR7Q09ORklHRklMRVNVUkl9ICIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9udW1weS9maWxlcy8iCisKK0NPTkZJR0ZJTEVTVVJJID89ICIiCisKK0NPTkZJR0ZJTEVTVVJJX2FhcmNoNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm0gPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX2FybWViID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzZWwgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3g4NiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2LTY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwcyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGMgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9wb3dlcnBjNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzNjRuMzIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9udW1weS0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCisjIE1ha2UgdGhlIGJ1aWxkIGZhaWwgYW5kIHJlcGxhY2UgKmNvbmZpZy5oIHdpdGggcHJvcGVyIG9uZQorIyBUaGlzIGlzIGEgdWdseSwgdWdseSBoYWNrIC0gS29lbgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgdHJ1ZQorICAgIGNwICR7V09SS0RJUn0vKmNvbmZpZy5oICR7U30vYnVpbGQvJChscyAke1N9L2J1aWxkIHwgZ3JlcCBzcmMpL251bXB5L2NvcmUvaW5jbHVkZS9udW1weS8KK30KKworRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9udW1weS9jb3JlL2xpYi8qLmEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYzU2ZmI5ZmMyODk1YWE0OTYxODAyZmZiZGIzMWQwYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMWQxMjY4ZDIwMDgxNmJmYjk3MjdhN2EyN2I3OGQ4ZTM3ZWNlYzJlNGQ1ZWJkMzNlYjY0ZTI3ODllMGRiNDNlIgorCisjIGluc3RhbGwgd2hhdCBpcyBuZWVkZWQgZm9yIG51bXB5LnRlc3QoKQorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uMy11bml0dGVzdCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWRpZmZsaWIgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1wcHJpbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1waWNrbGUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1zaGVsbCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLW5vc2UgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1kb2N0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtZGF0ZXRpbWUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1kaXN0dXRpbHMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1taXNjIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbW1hcCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLW5ldGNsaWVudCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLW51bWJlcnMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1weWRvYyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXBrZ3V0aWwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1lbWFpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXN1YnByb2Nlc3MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWN0eXBlcyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXRocmVhZGluZyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXRleHR1dGlscyBcCisiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0zLjUtbWFuaWZlc3QuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNS1tYW5pZmVzdC5pbmMKaW5kZXggMzM1YzNmZi4uMzA0NjExNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNS1tYW5pZmVzdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNS1tYW5pZmVzdC5pbmMKQEAgLTUsMTQgKzUsMTggQEAKIAogIAogCi1QUk9WSURFUys9IiR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZG9jdGVzdCAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgIgorUFJPVklERVMrPSIke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRvY3Rlc3QgJHtQTn0tZW1haWwgJHtQTn0tZW51bSAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2VsZWN0b3JzICR7UE59LXNoZWxsICR7UE59LXNpZ25hbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAiCiAKLVBBQ0tBR0VTPSIke1BOfS1kYmcgJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS1tb2R1bGVzIgorUEFDS0FHRVM9IiR7UE59LWRiZyAke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZW1haWwgJHtQTn0tZW51bSAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2VsZWN0b3JzICR7UE59LXNoZWxsICR7UE59LXNpZ25hbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS1tb2R1bGVzIgogCiBTVU1NQVJZXyR7UE59LTJ0bzM9IlB5dGhvbiBhdXRvbWF0ZWQgUHl0aG9uIDIgdG8gMyBjb2RlIHRyYW5zbGF0b3IiCiBSREVQRU5EU18ke1BOfS0ydG8zPSIke1BOfS1jb3JlIgogRklMRVNfJHtQTn0tMnRvMz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWIydG8zICIKIAorU1VNTUFSWV8ke1BOfS1hcmdwYXJzZT0iUHl0aG9uIGNvbW1hbmQgbGluZSBhcmd1bWVudCBwYXJzZXIiCitSREVQRU5EU18ke1BOfS1hcmdwYXJzZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0tdGV4dHV0aWxzIgorRklMRVNfJHtQTn0tYXJncGFyc2U9IiR7bGliZGlyfS9weXRob24zLjUvYXJncGFyc2UuKiAiCisKIFNVTU1BUllfJHtQTn0tYXN5bmNpbz0iUHl0aG9uIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzIgogUkRFUEVORFNfJHtQTn0tYXN5bmNpbz0iJHtQTn0tY29yZSIKIEZJTEVTXyR7UE59LWFzeW5jaW89IiR7bGliZGlyfS9weXRob24zLjUvYXN5bmNpbyAiCkBAIC0zMCwxOSArMzQsMTkgQEAKIEZJTEVTXyR7UE59LWNvbXBpbGU9IiR7bGliZGlyfS9weXRob24zLjUvcHlfY29tcGlsZS4qICR7bGliZGlyfS9weXRob24zLjUvY29tcGlsZWFsbC4qICIKIAogU1VNTUFSWV8ke1BOfS1jb21wcmVzc2lvbj0iUHl0aG9uIGhpZ2gtbGV2ZWwgY29tcHJlc3Npb24gc3VwcG9ydCIKLVJERVBFTkRTXyR7UE59LWNvbXByZXNzaW9uPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIKLUZJTEVTXyR7UE59LWNvbXByZXNzaW9uPSIke2xpYmRpcn0vcHl0aG9uMy41L2d6aXAuKiAke2xpYmRpcn0vcHl0aG9uMy41L3ppcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L3RhcmZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2J6Mi4qLnNvICIKK1JERVBFTkRTXyR7UE59LWNvbXByZXNzaW9uPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbXBvcnRsaWIgJHtQTn0tdGhyZWFkaW5nICR7UE59LXNoZWxsIgorRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24zLjUvZ3ppcC4qICR7bGliZGlyfS9weXRob24zLjUvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvYnoyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC96bGliLiouc28gIgogCiBTVU1NQVJZXyR7UE59LWNvcmU9IlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIgogUkRFUEVORFNfJHtQTn0tY29yZT0iJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1yZXBybGliICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1tYXRoIgotRklMRVNfJHtQTn0tY29yZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9fX2Z1dHVyZV9fLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fYWJjb2xsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy41L2FzdC4qICR7bGliZGlyfS9weXRob24zLjUvY29weS4qICR7bGliZGlyfS9weXRob24zLjUvY29weXJlZy4qICR7bGliZGlyfS9weXRob24zLjUvQ29uZmlnUGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24zLjUvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L25ldy4qICR7bGliZGlyfS9weXRob24zLjUvb3MuKiAke2xpYmRpcn0vcHl0aG9uMy41L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24zLjUvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24zLjUvc2l0ZS4qICR7bGliZGlyfS9weXRob24zLjUvc3RhdC4qICR7bGliZGlyfS9weXRob24zLjUvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9iaW5hc2NpaS4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX3N0cnVjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvdGltZS4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQveHJlYWRsaW5lcy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvdHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy41L3BsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fd2Vha3JlZnNldC4qICR7bGliZGlyfS9weXRob24zLjUvc3lzY29uZmlnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fc3lzY29uZmlnZGF0YS4qICR7bGliZGlyfS9weXRob24zLjUvY29uZmlnL01ha2VmaWxlICR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZyouaCAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb2xsZWN0aW9ucyAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fY29sbGVjdGlvbnNfYWJjLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3NpdGVidWlsdGlucy4qICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIgorRklMRVNfJHtQTn0tY29yZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9fX2Z1dHVyZV9fLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fYWJjb2xsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy41L2FzdC4qICR7bGliZGlyfS9weXRob24zLjUvY29weS4qICR7bGliZGlyfS9weXRob24zLjUvY29weXJlZy4qICR7bGliZGlyfS9weXRob24zLjUvY29uZmlncGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24zLjUvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L25ldy4qICR7bGliZGlyfS9weXRob24zLjUvb3MuKiAke2xpYmRpcn0vcHl0aG9uMy41L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24zLjUvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24zLjUvc2l0ZS4qICR7bGliZGlyfS9weXRob24zLjUvc3RhdC4qICR7bGliZGlyfS9weXRob24zLjUvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9iaW5hc2NpaS4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX3N0cnVjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvdGltZS4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQveHJlYWRsaW5lcy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvdHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy41L3BsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fd2Vha3JlZnNldC4qICR7bGliZGlyfS9weXRob24zLjUvc3lzY29uZmlnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fc3lzY29uZmlnZGF0YS4qICR7bGliZGlyfS9weXRob24zLjUvY29uZmlnL01ha2VmaWxlICR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZyouaCAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb2xsZWN0aW9ucyAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fY29sbGVjdGlvbnNfYWJjLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3NpdGVidWlsdGlucy4qICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIgogCiBTVU1NQVJZXyR7UE59LWNyeXB0PSJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IgogUkRFUEVORFNfJHtQTn0tY3J5cHQ9IiR7UE59LWNvcmUiCiBGSUxFU18ke1BOfS1jcnlwdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9oYXNobGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9tZDUuKiAke2xpYmRpcn0vcHl0aG9uMy41L3NoYS4qICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvY3J5cHQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19oYXNobGliLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fc2hhMjU2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fc2hhNTEyLiouc28gIgogCiBTVU1NQVJZXyR7UE59LWN0eXBlcz0iUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIKLVJERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSIKK1JERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSAke1BOfS1zdWJwcm9jZXNzIgogRklMRVNfJHtQTn0tY3R5cGVzPSIke2xpYmRpcn0vcHl0aG9uMy41L2N0eXBlcyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19jdHlwZXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19jdHlwZXNfdGVzdC4qLnNvICIKIAogU1VNTUFSWV8ke1BOfS1jdXJzZXM9IlB5dGhvbiBjdXJzZXMgc3VwcG9ydCIKQEAgLTUxLDcgKzU1LDcgQEAKIAogU1VNTUFSWV8ke1BOfS1kYXRldGltZT0iUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiCiBSREVQRU5EU18ke1BOfS1kYXRldGltZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCi1GSUxFU18ke1BOfS1kYXRldGltZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9fc3RycHRpbWUuKiAke2xpYmRpcn0vcHl0aG9uMy41L2NhbGVuZGFyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9kYXRldGltZS4qLnNvICIKK0ZJTEVTXyR7UE59LWRhdGV0aW1lPSIke2xpYmRpcn0vcHl0aG9uMy41L19zdHJwdGltZS4qICR7bGliZGlyfS9weXRob24zLjUvY2FsZW5kYXIuKiAke2xpYmRpcn0vcHl0aG9uMy41L2RhdGV0aW1lLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fZGF0ZXRpbWUuKi5zbyAiCiAKIFNVTU1BUllfJHtQTn0tZGI9IlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiCiBSREVQRU5EU18ke1BOfS1kYj0iJHtQTn0tY29yZSIKQEAgLTg1LDYgKzg5LDEwIEBACiBSREVQRU5EU18ke1BOfS1lbWFpbD0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIKIEZJTEVTXyR7UE59LWVtYWlsPSIke2xpYmRpcn0vcHl0aG9uMy41L2ltYXBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy41L2VtYWlsICIKIAorU1VNTUFSWV8ke1BOfS1lbnVtPSJQeXRob24gc3VwcG9ydCBmb3IgZW51bWVyYXRpb25zIgorUkRFUEVORFNfJHtQTn0tZW51bT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWVudW09IiR7bGliZGlyfS9weXRob24zLjUvZW51bS4qICIKKwogU1VNTUFSWV8ke1BOfS1mY250bD0iUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIgogUkRFUEVORFNfJHtQTn0tZmNudGw9IiR7UE59LWNvcmUiCiBGSUxFU18ke1BOfS1mY250bD0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9mY250bC4qLnNvICIKQEAgLTEwNiw3ICsxMTQsNyBAQAogRklMRVNfJHtQTn0taW1hZ2U9IiR7bGliZGlyfS9weXRob24zLjUvY29sb3JzeXMuKiAke2xpYmRpcn0vcHl0aG9uMy41L2ltZ2hkci4qICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvaW1hZ2VvcC4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvcmdiaW1nLiouc28gIgogCiBTVU1NQVJZXyR7UE59LWltcG9ydGxpYj0iUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IgotUkRFUEVORFNfJHtQTn0taW1wb3J0bGliPSIke1BOfS1jb3JlIgorUkRFUEVORFNfJHtQTn0taW1wb3J0bGliPSIke1BOfS1jb3JlICR7UE59LWxhbmciCiBGSUxFU18ke1BOfS1pbXBvcnRsaWI9IiR7bGliZGlyfS9weXRob24zLjUvaW1wb3J0bGliICIKIAogU1VNTUFSWV8ke1BOfS1pbz0iUHl0aG9uIGxvdy1sZXZlbCBJL08iCkBAIC0xMTgsOCArMTI2LDggQEAKIEZJTEVTXyR7UE59LWpzb249IiR7bGliZGlyfS9weXRob24zLjUvanNvbiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19qc29uLiouc28gIgogCiBTVU1NQVJZXyR7UE59LWxhbmc9IlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIKLVJERVBFTkRTXyR7UE59LWxhbmc9IiR7UE59LWNvcmUiCi1GSUxFU18ke1BOfS1sYW5nPSIke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19iaXNlY3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19jb2xsZWN0aW9ucy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2hlYXBxLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fd2Vha3JlZi4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2Z1bmN0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvYXJyYXkuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2l0ZXJ0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvb3BlcmF0b3IuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL3BhcnNlci4qLnNvICR7bGliZGlyfS9weXRob24zLjUvYXRleGl0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9iaXNlY3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L2NvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L2NvZGVvcC4qICR7bGliZGlyfS9weXRob24zLjUvY29sbGVjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMy41L19jb2xsZWN0aW9uc19hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy41L2Rpcy4qICR7bGliZGlyfS9weXRob24zLjUvZnVuY3Rvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9oZWFwcS4qICR7bGliZGlyfS9weXRob24zLjUvaW5zcGVjdC4qICR7bGliZGlyfS9weXRob24zLjUva2V5d29yZC4qICR7bGliZGlyfS9weXRob24zLjUvb3Bjb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zeW1ib2wuKiAke2xpYmRpcn0vcHl0aG9uMy41L3JlcHIuKiAke2xpYmRpcn0vcHl0aG9uMy41L3Rva2VuLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS90b2tlbml6ZS4qICR7bGliZGlyfS9weXRob24zLjUvdHJhY2ViYWNrLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS93ZWFrcmVmLiogIgorUkRFUEVORFNfJHtQTn0tbGFuZz0iJHtQTn0tY29yZSAke1BOfS1pbXBvcnRsaWIiCitGSUxFU18ke1BOfS1sYW5nPSIke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19iaXNlY3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19jb2xsZWN0aW9ucy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2hlYXBxLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fd2Vha3JlZi4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2Z1bmN0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvYXJyYXkuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2l0ZXJ0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvb3BlcmF0b3IuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL3BhcnNlci4qLnNvICR7bGliZGlyfS9weXRob24zLjUvYXRleGl0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9iaXNlY3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L2NvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L2NvZGVvcC4qICR7bGliZGlyfS9weXRob24zLjUvY29sbGVjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMy41L19jb2xsZWN0aW9uc19hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy41L2NvbnRleHRsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy41L2Rpcy4qICR7bGliZGlyfS9weXRob24zLjUvZnVuY3Rvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9oZWFwcS4qICR7bGliZGlyfS9weXRob24zLjUvaW5zcGVjdC4qICR7bGliZGlyfS9weXRob24zLjUva2V5d29yZC4qICR7bGliZGlyfS9weXRob24zLjUvb3Bjb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9vcGVyYXRvci4qICR7bGliZGlyfS9weXRob24zLjUvc3ltYm9sLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9yZXByLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS90b2tlbi4qICR7bGliZGlyfS9weXRob24zLjUvdG9rZW5pemUuKiAke2xpYmRpcn0vcHl0aG9uMy41L3RyYWNlYmFjay4qICR7bGliZGlyfS9weXRob24zLjUvd2Vha3JlZi4qICIKIAogU1VNTUFSWV8ke1BOfS1sb2dnaW5nPSJQeXRob24gbG9nZ2luZyBzdXBwb3J0IgogUkRFUEVORFNfJHtQTn0tbG9nZ2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiCkBAIC0xMzAsNyArMTM4LDcgQEAKIEZJTEVTXyR7UE59LW1haWxib3g9IiR7bGliZGlyfS9weXRob24zLjUvbWFpbGJveC4qICIKIAogU1VNTUFSWV8ke1BOfS1tYXRoPSJQeXRob24gbWF0aCBzdXBwb3J0IgotUkRFUEVORFNfJHtQTn0tbWF0aD0iJHtQTn0tY29yZSIKK1JERVBFTkRTXyR7UE59LW1hdGg9IiR7UE59LWNvcmUgJHtQTn0tY3J5cHQiCiBGSUxFU18ke1BOfS1tYXRoPSIke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2NtYXRoLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9tYXRoLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fcmFuZG9tLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9yYW5kb20uKiAke2xpYmRpcn0vcHl0aG9uMy41L3NldHMuKiAiCiAKIFNVTU1BUllfJHtQTn0tbWltZT0iUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIKQEAgLTE5MywxMCArMjAxLDE4IEBACiBSREVQRU5EU18ke1BOfS1yZXNvdXJjZT0iJHtQTn0tY29yZSIKIEZJTEVTXyR7UE59LXJlc291cmNlPSIke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL3Jlc291cmNlLiouc28gIgogCitTVU1NQVJZXyR7UE59LXNlbGVjdG9ycz0iUHl0aG9uIEhpZ2gtbGV2ZWwgSS9PIG11bHRpcGxleGluZyIKK1JERVBFTkRTXyR7UE59LXNlbGVjdG9ycz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXNlbGVjdG9ycz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9zZWxlY3RvcnMuKiAiCisKIFNVTU1BUllfJHtQTn0tc2hlbGw9IlB5dGhvbiBzaGVsbC1saWtlIGZ1bmN0aW9uYWxpdHkiCi1SREVQRU5EU18ke1BOfS1zaGVsbD0iJHtQTn0tY29yZSAke1BOfS1yZSIKK1JERVBFTkRTXyR7UE59LXNoZWxsPSIke1BOfS1jb3JlICR7UE59LXJlICR7UE59LWNvbXByZXNzaW9uIgogRklMRVNfJHtQTn0tc2hlbGw9IiR7bGliZGlyfS9weXRob24zLjUvY21kLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb21tYW5kcy4qICR7bGliZGlyfS9weXRob24zLjUvZGlyY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L2ZubWF0Y2guKiAke2xpYmRpcn0vcHl0aG9uMy41L2dsb2IuKiAke2xpYmRpcn0vcHl0aG9uMy41L3BvcGVuMi4qICR7bGliZGlyfS9weXRob24zLjUvc2hsZXguKiAke2xpYmRpcn0vcHl0aG9uMy41L3NodXRpbC4qICIKIAorU1VNTUFSWV8ke1BOfS1zaWduYWw9IlB5dGhvbiBzZXQgaGFuZGxlcnMgZm9yIGFzeW5jaHJvbm91cyBldmVudHMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXNpZ25hbD0iJHtQTn0tY29yZSAke1BOfS1lbnVtIgorRklMRVNfJHtQTn0tc2lnbmFsPSIke2xpYmRpcn0vcHl0aG9uMy41L3NpZ25hbC4qICIKKwogU1VNTUFSWV8ke1BOfS1zbXRwZD0iUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iCiBSREVQRU5EU18ke1BOfS1zbXRwZD0iJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIKIEZJTEVTXyR7UE59LXNtdHBkPSIke2JpbmRpcn0vc210cGQuKiAke2xpYmRpcn0vcHl0aG9uMy41L3NtdHBkLiogIgpAQCAtMjE0LDggKzIzMCw4IEBACiBGSUxFU18ke1BOfS1zdHJpbmdvbGQ9IiR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvc3Ryb3AuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L3N0cmluZy4qICR7bGliZGlyfS9weXRob24zLjUvc3RyaW5nb2xkLiogIgogCiBTVU1NQVJZXyR7UE59LXN1YnByb2Nlc3M9IlB5dGhvbiBzdWJwcm9jZXNzIHN1cHBvcnQiCi1SREVQRU5EU18ke1BOfS1zdWJwcm9jZXNzPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIKLUZJTEVTXyR7UE59LXN1YnByb2Nlc3M9IiR7bGliZGlyfS9weXRob24zLjUvc3VicHJvY2Vzcy4qICIKK1JERVBFTkRTXyR7UE59LXN1YnByb2Nlc3M9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1zaWduYWwgJHtQTn0tc2VsZWN0b3JzIgorRklMRVNfJHtQTn0tc3VicHJvY2Vzcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9zdWJwcm9jZXNzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fcG9zaXhzdWJwcm9jZXNzLiouc28gIgogCiBTVU1NQVJZXyR7UE59LXN5c2xvZz0iUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiCiBSREVQRU5EU18ke1BOfS1zeXNsb2c9IiR7UE59LWNvcmUiCkBAIC0yMzUsNyArMjUxLDcgQEAKIAogU1VNTUFSWV8ke1BOfS10aHJlYWRpbmc9IlB5dGhvbiB0aHJlYWRpbmcgJiBzeW5jaHJvbml6YXRpb24gc3VwcG9ydCIKIFJERVBFTkRTXyR7UE59LXRocmVhZGluZz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgotRklMRVNfJHtQTn0tdGhyZWFkaW5nPSIke2xpYmRpcn0vcHl0aG9uMy41L190aHJlYWRpbmdfbG9jYWwuKiAke2xpYmRpcn0vcHl0aG9uMy41L2R1bW15X3RocmVhZC4qICR7bGliZGlyfS9weXRob24zLjUvZHVtbXlfdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9tdXRleC4qICR7bGliZGlyfS9weXRob24zLjUvdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9RdWV1ZS4qICIKK0ZJTEVTXyR7UE59LXRocmVhZGluZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9fdGhyZWFkaW5nX2xvY2FsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9kdW1teV90aHJlYWQuKiAke2xpYmRpcn0vcHl0aG9uMy41L2R1bW15X3RocmVhZGluZy4qICR7bGliZGlyfS9weXRob24zLjUvbXV0ZXguKiAke2xpYmRpcn0vcHl0aG9uMy41L3RocmVhZGluZy4qICR7bGliZGlyfS9weXRob24zLjUvcXVldWUuKiAiCiAKIFNVTU1BUllfJHtQTn0tdGtpbnRlcj0iUHl0aG9uIFRjbC9UayBiaW5kaW5ncyIKIFJERVBFTkRTXyR7UE59LXRraW50ZXI9IiR7UE59LWNvcmUiCkBAIC0yNTgsNyArMjc0LDcgQEAKIEZJTEVTXyR7UE59LXhtbHJwYz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS94bWxycGNsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy41L1NpbXBsZVhNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24zLjUvRG9jWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS94bWxycGMgIgogCiBTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyIKLVJERVBFTkRTXyR7UE59LW1vZHVsZXM9IiR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IiR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbWFpbCAke1BOfS1lbnVtICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zZWxlY3RvcnMgJHtQTn0tc2hlbGwgJHtQTn0tc2lnbmFsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICAiCiBBTExPV19FTVBUWV8ke1BOfS1tb2R1bGVzID0gIjEiCiAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1Y2I0ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luYy5pbmMKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJQeXRob24gZnJhbWV3b3JrIHRvIHByb2Nlc3MgaW50ZXJkZXBlbmRlbnQgdGFza3MgaW4gYSBwb29sIG9mIHdvcmtlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9hc3luYyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PTg4ZGY4ZTc4YjllZGZkNzQ0OTUzODYyMTc5ZjJkMTRlIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvYS9hc3luYy9hc3luYy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiOWIwNmI1OTk3ZGUyMTU0ZjNiYzAyNzNmODBiY2VmNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWM2ODk0ZDg3NmU0NTg3OGZhYWU0OTNiMGNmNjFkMGUyOGVjNDE3MzM0NDQ4YWMwYTZlYTIyMjlkODM0MzA1MSIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvYXN5bmMvIgorCitTID0gIiR7V09SS0RJUn0vYXN5bmMtJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiCmluZGV4IGFkMGE2MTcuLmQ4NTVlNDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIKQEAgLTEsMTkgKzEsNSBAQAotU1VNTUFSWSA9ICJQeXRob24gZnJhbWV3b3JrIHRvIHByb2Nlc3MgaW50ZXJkZXBlbmRlbnQgdGFza3MgaW4gYSBwb29sIG9mIHdvcmtlcnMiCi1IT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9hc3luYyIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PTg4ZGY4ZTc4YjllZGZkNzQ0OTUzODYyMTc5ZjJkMTRlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL2EvYXN5bmMvYXN5bmMtJHtQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gIjliMDZiNTk5N2RlMjE1NGYzYmMwMjczZjgwYmNlZjZiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjNjg5NGQ4NzZlNDU4NzhmYWFlNDkzYjBjZjYxZDBlMjhlYzQxNzMzNDQ0OGFjMGE2ZWEyMjI5ZDgzNDMwNTEiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2FzeW5jLyIKLQotUyA9ICIke1dPUktESVJ9L2FzeW5jLSR7UFZ9IgorcmVxdWlyZSBweXRob24tYXN5bmMuaW5jCiAKIGluaGVyaXQgc2V0dXB0b29scwogCiBSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXRocmVhZGluZyBweXRob24tbGFuZyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzE0ZGNlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBEQnVzIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBzeXN0ZW0iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBiODMwNDdjZTllOTQ4YjY3YzBmYWNjNWYyMzM0NzZhIgotREVQRU5EUyA9ICJleHBhdCBkYnVzIGRidXMtZ2xpYiB2aXJ0dWFsL2xpYmludGwgcHl0aG9uLXB5cmV4LW5hdGl2ZSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy1weXRob24vZGJ1cy1weXRob24tJHtQVn0udGFyLmd6IFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImIwOWNkMmQxYTA1N2NjNDMyY2U5NDRkZTNmYzA2YmY3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImUxMmM2YzhiMmJmM2E5MzAyZjc1MTY2OTUyY2JlNDFkNmIzOGMzNDQxYmJjNjc2N2RiZDQ5ODk0MjMxNmM2ZGYiCi1TID0gIiR7V09SS0RJUn0vZGJ1cy1weXRob24tJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzLWJhc2UgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID89ICIiCi1QQUNLQUdFQ09ORklHW2RvY3NdID0gIi0tZW5hYmxlLWh0bWwtZG9jcywtLWRpc2FibGUtaHRtbC1kb2NzLHB5dGhvbi1kb2N1dGlscy1uYXRpdmUiCi1QQUNLQUdFQ09ORklHW2FwaS1kb2NzXSA9ICItLWVuYWJsZS1hcGktZG9jcywtLWRpc2FibGUtYXBpLWRvY3MscHl0aG9uLWRvY3V0aWxzLW5hdGl2ZSBweXRob24tZXB5ZG9jLW5hdGl2ZSIKLQotZXhwb3J0IEJVSUxEX1NZUwotZXhwb3J0IEhPU1RfU1lTCi0KLWV4cG9ydCBTVEFHSU5HX0xJQkRJUgotZXhwb3J0IFNUQUdJTkdfSU5DRElSCi0KLVJERVBFTkRTXyR7UE59ID0gInB5dGhvbi1pbyBweXRob24tbG9nZ2luZyBweXRob24tc3RyaW5nb2xkIHB5dGhvbi10aHJlYWRpbmcgcHl0aG9uLXhtbCIKLQotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcGtnY29uZmlnIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRvY3V0aWxzXzAuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNkYTg4ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVNVTU1BUlkgPSAiVGV4dCBwcm9jZXNzaW5nIHN5c3RlbSBmb3IgZG9jdW1lbnRhdGlvbiIKLUhPTUVQQUdFID0gImh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQiCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiUFNGICYgQlNELTItQ2xhdXNlICYgR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9YTcyMmZiZGMyMDM0N2RiN2I2OTIyMzU5NGRkNTQ1NzQiCi0KLURFUEVORFMgPSAicHl0aG9uIgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2N1dGlscy9kb2N1dGlscy0ke1BWfS50YXIuZ3oiCi1TUkNfVVJJW21kNXN1bV0gPSAiNDYyMjI2M2I2MmM1Yzc3MWMwMzUwMmFmYTMxNTc3NjgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzdkYjcxNzgxMGFiNjk2NWY2NmM4Y2YwMzk4YTk4YzlkOGRmOTgyZGEzOWI0Y2Q3ZjE2MjkxMWViODk1OTZmYSIKLQotUyA9ICIke1dPUktESVJ9L2RvY3V0aWxzLSR7UFZ9IgotCi1pbmhlcml0IGRpc3R1dGlscwotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2MwOTdhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdC5pbmMKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJQeXRob24gbGlicmFyeSB1c2VkIHRvIGludGVyYWN0IHdpdGggR2l0IHJlcG9zaXRvcmllcyIKK0RFU0NSSVBUSU9OID0gIkdpdFB5dGhvbiBwcm92aWRlcyBvYmplY3QgbW9kZWwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIFwKK2EgZ2l0IHJlcG9zaXRvcnkuIEFjY2VzcyByZXBvc2l0b3J5IGluZm9ybWF0aW9uIGNvbnZlbmllbnRseSwgYWx0ZXIgdGhlIFwKK2luZGV4IGRpcmVjdGx5LCBoYW5kbGUgcmVtb3Rlcywgb3IgZ28gZG93biB0byBsb3ctbGV2ZWwgb2JqZWN0IGRhdGFiYXNlIFwKK2FjY2VzcyB3aXRoIGJpZy1maWxlcyBzdXBwb3J0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04YjhkMjZjMzdjMWQ1YTA0ZjliMDE4NmVkYmViYzE4MyIKKworU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL0cvR2l0UHl0aG9uL0dpdFB5dGhvbi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYTBiYTlkZjBhYmU0YzhmMzVkZDdiYjliZTg1ZDU2ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOGU3YWRhYWNjZWVkZDNkMDQzZTZjZDI1NDRmNTdkYmUwMGM1M2ZjMjYzNzQ4ODBiN2NlYTY3ZjMxODhhYTY4IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9HaXRQeXRob24vIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL0dpdFB5dGhvbi8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCisKK1MgPSAiJHtXT1JLRElSfS9HaXRQeXRob24tJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMS4wLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMGY4MDUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLVNVTU1BUlkgPSAiUHl0aG9uIGxpYnJhcnkgdXNlZCB0byBpbnRlcmFjdCB3aXRoIEdpdCByZXBvc2l0b3JpZXMiCi1ERVNDUklQVElPTiA9ICJHaXRQeXRob24gcHJvdmlkZXMgb2JqZWN0IG1vZGVsIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byBcCi1hIGdpdCByZXBvc2l0b3J5LiBBY2Nlc3MgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiBjb252ZW5pZW50bHksIGFsdGVyIHRoZSBcCi1pbmRleCBkaXJlY3RseSwgaGFuZGxlIHJlbW90ZXMsIG9yIGdvIGRvd24gdG8gbG93LWxldmVsIG9iamVjdCBkYXRhYmFzZSBcCi1hY2Nlc3Mgd2l0aCBiaWctZmlsZXMgc3VwcG9ydC4iCi1IT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9HaXRQeXRob24iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OGI4ZDI2YzM3YzFkNWEwNGY5YjAxODZlZGJlYmMxODMiCi1ERVBFTkRTID0gInB5dGhvbi1naXRkYiIKLQotU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9HL0dpdFB5dGhvbi9HaXRQeXRob24tJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZDkyZDk2YThkYTBmYzc3Y2YxNDFkM2UxNjA4NGUwOTQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODVkZTcyNTU2NzgxNDgwYTM4ODk3YTc3ZGU1YjQ1OGFlMzgzOGIwZmQ1ODk1OTM2NzlhMWI1ZjM0ZDE4MWQ4NCIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvR2l0UHl0aG9uLyIKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9HaXRQeXRob24vKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspIgotCi1TID0gIiR7V09SS0RJUn0vR2l0UHl0aG9uLSR7UFZ9IgotCi1pbmhlcml0IHNldHVwdG9vbHMKLQotUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1naXRkYiBweXRob24tbGFuZyBweXRob24taW8gcHl0aG9uLXNoZWxsIHB5dGhvbi1tYXRoIHB5dGhvbi1yZSBweXRob24tc3VicHJvY2VzcyBweXRob24tc3RyaW5nb2xkIHB5dGhvbi11bml4YWRtaW4iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8yLjAuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMi4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5ZGJlYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMi4wLjcuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHB5dGhvbi1naXQuaW5jCisKK0RFUEVORFMgPSAicHl0aG9uLWdpdGRiIgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1naXRkYiBweXRob24tbGFuZyBweXRob24taW8gcHl0aG9uLXNoZWxsIHB5dGhvbi1tYXRoIHB5dGhvbi1yZSBweXRob24tc3VicHJvY2VzcyBweXRob24tc3RyaW5nb2xkIHB5dGhvbi11bml4YWRtaW4iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGIuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE5M2ZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkEgcHVyZS1QeXRob24gZ2l0IG9iamVjdCBkYXRhYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2dpdGRiIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU5ZTVlY2IxMzMzOWE5MzZlZWRmODMyODJlYWY0NTI4IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvZy9naXRkYi9naXRkYi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NGU0MzY2YjhiZGZkMzA2YjA3NWMzYTUyYzk2YWUxYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhM2ViYmMyN2JlMDM1YTJlODc0ZWQ5MDRkZjUxNmUzNWY0YTI5YTc3OGE3NjQzODVkZTA5ZGU5ZTBmMTM5NjU4IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9naXRkYi8iCisKK1MgPSAiJHtXT1JLRElSfS9naXRkYi0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIKaW5kZXggYzgyZGYxZS4uMTc3NzM5NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYgpAQCAtMSwyMSArMSw3IEBACi1TVU1NQVJZID0gIkEgcHVyZS1QeXRob24gZ2l0IG9iamVjdCBkYXRhYmFzZSIKLUhPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2dpdGRiIgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU5ZTVlY2IxMzMzOWE5MzZlZWRmODMyODJlYWY0NTI4IgorcmVxdWlyZSBweXRob24tZ2l0ZGIuaW5jCisKIERFUEVORFMgPSAicHl0aG9uLWFzeW5jIHB5dGhvbi1zbW1hcCIKIAotU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvZy9naXRkYi9naXRkYi0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI0NGU0MzY2YjhiZGZkMzA2YjA3NWMzYTUyYzk2YWUxYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhM2ViYmMyN2JlMDM1YTJlODc0ZWQ5MDRkZjUxNmUzNWY0YTI5YTc3OGE3NjQzODVkZTA5ZGU5ZTBmMTM5NjU4IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9naXRkYi8iCi0KLVMgPSAiJHtXT1JLRElSfS9naXRkYi0ke1BWfSIKLQogaW5oZXJpdCBkaXN0dXRpbHMKIAogUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1zbW1hcCBweXRob24tYXN5bmMgcHl0aG9uLW1tYXAgcHl0aG9uLWxhbmcgcHl0aG9uLXpsaWIgcHl0aG9uLWlvIHB5dGhvbi1zaGVsbCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NzUzMDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotRnJvbSAwN2Q0ZjA5NWE5ZTIyYWU2NzZhOGQ2ODA3MzEwMTEzMWU2NTAxMmRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KLURhdGU6IFR1ZSwgMTUgTm92IDIwMTEgMTM6MTY6NTQgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gcHl0aG9uIGltYWdpbmcgc2V0dXAucHk6IGZvcmNlIHBhdGhzIGZvciB6bGliLCBmcmVldHlwZSBhbmQganBlZyBhbmQgZG9uJ3QgYWRkIGhvc3QgcGF0aHMKLQotU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLS0tLQotIHNldHVwLnB5IHwgICAxNCArKystLS0tLS0tLS0tLQotIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKLWluZGV4IDVkNGQ1M2EuLmIxYTIyZWMgMTAwNjQ0Ci0tLS0gYS9zZXR1cC5weQotKysrIGIvc2V0dXAucHkKLUBAIC0zNCwxMCArMzQsMTAgQEAgZGVmIGxpYmluY2x1ZGUocm9vdCk6Ci0gIyBUSUZGX1JPT1QgPSBsaWJpbmNsdWRlKCIvb3B0L3RpZmYiKQotIAotIFRDTF9ST09UID0gTm9uZQotLUpQRUdfUk9PVCA9IE5vbmUKLS1aTElCX1JPT1QgPSBOb25lCi0rSlBFR19ST09UID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXQotK1pMSUJfUk9PVCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10KLSBUSUZGX1JPT1QgPSBOb25lCi0tRlJFRVRZUEVfUk9PVCA9IE5vbmUKLStGUkVFVFlQRV9ST09UID0gIG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10sIG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10KLSBMQ01TX1JPT1QgPSBOb25lCi0gCi0gIyBGSVhNRTogYWRkIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5ICpkaXNhYmxlKiB0aGUgdXNlIG9mIGEgbGlicmFyeQotQEAgLTE0Nyw3ICsxNDcsNiBAQCBjbGFzcyBwaWxfYnVpbGRfZXh0KGJ1aWxkX2V4dCk6Ci0gICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvb3B0L2xvY2FsL2xpYiIpCi0gICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsICIvb3B0L2xvY2FsL2luY2x1ZGUiKQotIAotLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xvY2FsL2xpYiIpCi0gICAgICAgICAjIEZJWE1FOiBjaGVjayAvb3B0L3N0dWZmIGRpcmVjdG9yaWVzIGhlcmU/Ci0gCi0gICAgICAgICBwcmVmaXggPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoInByZWZpeCIpCi1AQCAtMjA3LDEzICsyMDYsNiBAQCBjbGFzcyBwaWxfYnVpbGRfZXh0KGJ1aWxkX2V4dCk6Ci0gICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRjbF9kaXIsICJ0ay5oIikpOgotICAgICAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgdGNsX2RpcikKLSAKLS0gICAgICAgICMgc3RhbmRhcmQgbG9jYXRpb25zCi0tICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbG9jYWwvbGliIikKLS0gICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL3Vzci9sb2NhbC9pbmNsdWRlIikKLS0KLS0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9saWIiKQotLSAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsICIvdXNyL2luY2x1ZGUiKQotLQotICAgICAgICAgIwotICAgICAgICAgIyBpbnNlcnQgbmV3IGRpcnMgKmJlZm9yZSogZGVmYXVsdCBsaWJzLCB0byBhdm9pZCBjb25mbGljdHMKLSAgICAgICAgICMgYmV0d2VlbiBQeXRob24gUFlEIHN0dWIgbGlicyBhbmQgcmVhbCBsaWJyYXJpZXMKLS0tIAotMS43LjIuNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NjBlZDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotQXQgbGVhc3QgbGNtcyB3YXNuJ3QgZGV0ZXJtaW5pc3RpY2x5IGRldGVjdGVkIGZyb20gc3lzcm9vdC4KLQotVGhpcyB3aWxsIGFsbG93IHRvIGV4cG9ydCBMQ01TX0VOQUJMRUQ9RmFsc2Ugd2hlbiBsY21zIGlzbid0IGluIFBBQ0tBR0VDT05GSUcuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgotCi1kaWZmIC11TnIgSW1hZ2luZy0xLjEuNy5vcmlnL3NldHVwLnB5IEltYWdpbmctMS4xLjcvc2V0dXAucHkKLS0tLSBJbWFnaW5nLTEuMS43Lm9yaWcvc2V0dXAucHkJMjAxMy0wNy0yMiAxMDoxNzowMi4wODE0NTcwNzUgKzAyMDAKLSsrKyBJbWFnaW5nLTEuMS43L3NldHVwLnB5CTIwMTMtMDctMjIgMTM6MTA6MDkuMDI5NzA3NDkyICswMjAwCi1AQCAtMzksNiArMzksMTIgQEAKLSBUSUZGX1JPT1QgPSBOb25lCi0gRlJFRVRZUEVfUk9PVCA9ICBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddCi0gTENNU19ST09UID0gTm9uZQotK1RDTF9FTkFCTEVEID0gb3MuZ2V0ZW52KCdUQ0xfRU5BQkxFRCcsICJUcnVlIikKLStKUEVHX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0pQRUdfRU5BQkxFRCcsICJUcnVlIikKLStaTElCX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1pMSUJfRU5BQkxFRCcsICJUcnVlIikKLStUSUZGX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1RJRkZfRU5BQkxFRCcsICJUcnVlIikKLStGUkVFVFlQRV9FTkFCTEVEID0gb3MuZ2V0ZW52KCdGUkVFVFlQRV9FTkFCTEVEJywgIlRydWUiKQotK0xDTVNfRU5BQkxFRCA9IG9zLmdldGVudignTENNU19FTkFCTEVEJywgIlRydWUiKQotIAotICMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKLSAKLUBAIC0yMjAsMjIgKzIyNiwyMiBAQAotICAgICAgICAgICAgIHpsaWIgPSBqcGVnID0gdGlmZiA9IGZyZWV0eXBlID0gdGNsID0gdGsgPSBsY21zID0gTm9uZQotICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmUoKQotIAotLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgotKyAgICAgICAgaWYgWkxJQl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgotICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6Iik6Ci0gICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6IgotICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6bGliIik6Ci0gICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6bGliIiAjIGFsdGVybmF0aXZlIG5hbWUKLSAKLS0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKLSsgICAgICAgIGlmIEpQRUdfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKLSAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAianBlZyIpOgotICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAianBlZyIKLSAgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAibGlianBlZyIpOgotICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAibGlianBlZyIgIyBhbHRlcm5hdGl2ZSBuYW1lCi0gCi0tICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGlmZiIpOgotKyAgICAgICAgaWYgVElGRl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRpZmYiKToKLSAgICAgICAgICAgICBmZWF0dXJlLnRpZmYgPSAidGlmZiIKLSAKLS0gICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgotKyAgICAgICAgaWYgRlJFRVRZUEVfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgotICAgICAgICAgICAgICMgbG9vayBmb3IgZnJlZXR5cGUyIGluY2x1ZGUgZmlsZXMKLSAgICAgICAgICAgICBmcmVldHlwZV92ZXJzaW9uID0gMAotICAgICAgICAgICAgIGZvciBkaXIgaW4gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnM6Ci1AQCAtMjU2LDExICsyNjIsMTEgQEAKLSAgICAgICAgICAgICAgICAgaWYgZGlyOgotICAgICAgICAgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgZGlyLCAwKQotIAotLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgotKyAgICAgICAgaWYgTENNU19FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgotICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJsY21zIik6Ci0gICAgICAgICAgICAgICAgIGZlYXR1cmUubGNtcyA9ICJsY21zIgotIAotLSAgICAgICAgaWYgX3RraW50ZXIgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ0ay5oIik6Ci0rICAgICAgICBpZiBUQ0xfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIF90a2ludGVyIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAidGsuaCIpOgotICAgICAgICAgICAgICMgdGhlIGxpYnJhcnkgbmFtZXMgbWF5IHZhcnkgc29tZXdoYXQgKGUuZy4gdGNsODQgb3IgdGNsOC40KQotICAgICAgICAgICAgIHZlcnNpb24gPSBUQ0xfVkVSU0lPTlswXSArIFRDTF9WRVJTSU9OWzJdCi0gICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRjbCIgKyB2ZXJzaW9uKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVjYzYzYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1Gcm9tIGM2MDQwZjYxOGQ4ZjI3MDZhN2I0NmQxY2RmMzdkMWE1ODdmOTcwMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbmRyZXcgU3Ryb21ub3YgPHN0cm9tbm92QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMjggTm92IDIwMTMgMTY6NTg6NDMgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gZml4IGNvbXBpbGluZyB3aXRoIEZyZWVUeXBlIDIuNS4xCi0KLS0tLQotIF9pbWFnaW5nZnQuYyB8IDQgKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL19pbWFnaW5nZnQuYyBiL19pbWFnaW5nZnQuYwotaW5kZXggNDdkNTBiZC4uZjE5NTU1YiAxMDA2NDQKLS0tLSBhL19pbWFnaW5nZnQuYwotKysrIGIvX2ltYWdpbmdmdC5jCi1AQCAtNTksNyArNTksMTEgQEAgc3RydWN0IHsKLSAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKLSB9IGZ0X2Vycm9yc1tdID0KLSAKLSsjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEVfMl8xKQotKyNpbmNsdWRlIEZUX0VSUk9SU19ICi0rI2Vsc2UKLSAjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KLSsjZW5kaWYKLSAKLSAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotIC8qIGZvbnQgb2JqZWN0cyAqLwotLS0gCi0xLjguNS4xCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZ18xLjEuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjc4MzI4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotU1VNTUFSWSA9ICJQeXRob24gSW1hZ2luZyBMaWJyYXJ5IChQSUwpIgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9OTI7ZW5kbGluZT0xMjA7bWQ1PWM0MzcxYWY0NTc5ZjFlNDg5Y2Y4ODFjMTQ0M2RkNGVjIgotREVQRU5EUyA9ICJmcmVldHlwZSBqcGVnIHRpZmYiCi1TUkNOQU1FID0gIkltYWdpbmciCi1QUiA9ICJyNSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZWZmYm90Lm9yZy9kb3dubG9hZHMvSW1hZ2luZy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmYzE0YTU0ZTFjZTAyYTAyMjViZTg4NTRiZmJhNDc4ZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4OTViYzdjMjQ5OGM4ZTFmOWI5OTkzOGYxYTQwZGM4NmIzZjE0OTc0MWYxMDVjZjdjN2JkMmUwNzI1NDA1MjExIgotUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCi0KLSMgVGhlcmUgaXNuJ3QgZW5hYmxlL2Rpc2FibGUgb3B0aW9uLCBhbmQgbGNtcyBpcyBpbiBtZXRhLW9lLCBhdCBsZWFzdCBtYWtlIGl0IGV4cGxpY2l0IHdoZW4gZW5hYmxlZAotIyBzZXR1cC5weSBhbHJlYWR5IGhhcyBGSVhNRTogYWRkIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5ICpkaXNhYmxlKiB0aGUgdXNlIG9mIGEgbGlicmFyeQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbbGNtc10gPSAiLCxsY21zIgotCi1pbmhlcml0IGRpc3R1dGlscwotCi1kb19jb21waWxlKCkgewotICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfQotICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfQotICAgIGV4cG9ydCBMQ01TX0VOQUJMRUQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbGNtcycsICdUcnVlJywgJ0ZhbHNlJywgZCl9Ci0gICAgZGlzdHV0aWxzX2RvX2NvbXBpbGUKLX0KLQotZG9faW5zdGFsbCgpIHsKLSAgICBleHBvcnQgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0KLSAgICBleHBvcnQgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0KLSAgICBleHBvcnQgTENNU19FTkFCTEVEPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2xjbXMnLCAnVHJ1ZScsICdGYWxzZScsIGQpfQotICAgIGRpc3R1dGlsc19kb19pbnN0YWxsCi0gICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59L2h0bWwvCi0gICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vUkVBRE1FICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vCi0gICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vRG9jcy8qICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vaHRtbC8KLQotICAgICMgZ2V0IHJpZCBvZiAjIS91c3IvbG9jYWwvYmluL3B5dGhvbgotICAgIHNlZCAtaSAtZSAnczovdXNyL2xvY2FsL2Jpbi86JHtiaW5kaXJ9L2VudiA6ZycgJHtEfSR7YmluZGlyfS8qCi19Ci0KLVJERVBFTkRTXyR7UE59ICs9ICJweXRob24tbGFuZyBweXRob24tc3RyaW5nb2xkIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha28uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha28uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZWMyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrby5pbmMKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJUZW1wbGF0aW5nIGxpYnJhcnkgZm9yIFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYmIyMWZhMmQyZjdhNTM0Yzg4NGI5OTA0MzBhNjg2MyIKKworU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL00vTWFrby9NYWtvLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImM1ZmMzMWEzMjNkZDQ5OTA2ODNkMmYyZGEwMmQ0ZTIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlZDk5ZGJlNGQwZGRiMjdhMzNlZTQ5MTBkODcwOGFjYTllZjFmZTg1NGU2NjgzODdhOWFiOWE5MGNiZjkwNTkiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL21ha28vIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL01ha28vKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspIgorCitTID0gIiR7V09SS0RJUn0vTWFrby0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha29fMS4wLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmZDcwMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLVNVTU1BUlkgPSAiVGVtcGxhdGluZyBsaWJyYXJ5IGZvciBQeXRob24iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGViM2ZmOGU0YzE3YWFmN2I4MDg4OWI2YjJiZjRjODMiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL00vTWFrby9NYWtvLSR7UFZ9LnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gImE3OGYyMGY2MzY2YThhMDY1OWNlNTUzMmY4NjE0ZTUzIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc2NDRiYzBlZTM1OTY1ZDJlMTQ2ZGRlMzE4MjdiODk4MmVkNzBhNTgyODEwODVmYWM0Mjg2OWEwOTc2NGQzOGMiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL21ha28vIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL01ha28vKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspIgotCi1TID0gIiR7V09SS0RJUn0vTWFrby0ke1BWfSIKLQotaW5oZXJpdCBzZXR1cHRvb2xzCi0KLVJERVBFTkRTXyR7UE59ID0gInB5dGhvbi10aHJlYWRpbmcgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCi0gICAgICAgICAgICAgICAgICBweXRob24taHRtbCBcCi0iCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMDA0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuNC5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHB5dGhvbi1tYWtvLmluYworCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXRocmVhZGluZyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1odG1sIFwKKyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBUaGUgc2FtZSB1dGlsaXR5IGlzIHBhY2thZ2VkIGluIHB5dGhvbjMtbWFrbywgc28gaXQgd291bGQgY29uZmxpY3QKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtIC1mICR7RH0ke2JpbmRpcn0vbWFrby1yZW5kZXIKKyAgICBybWRpciAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODlhYWZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLQotIyBUaGUgcHJvcGVyIHByZWZpeCBpcyBpbnNpZGUgb3VyIHN0YWdpbmcgYXJlYS4KLSMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+Ci0jIFNpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+Ci0KLS0tLSBQeXRob24tMi42LjYvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkub3JpZwkyMDEyLTAxLTAzIDE0OjAyOjAzLjAyNzAwNTI5NiArMDAwMAotKysrIFB5dGhvbi0yLjYuNi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQkyMDEyLTAxLTAzIDE0OjAyOjMxLjUxNzYwMTA4MSArMDAwMAotQEAgLTE5LDggKzE5LDggQEAKLSBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKLSAKLSAjIFRoZXNlIGFyZSBuZWVkZWQgaW4gYSBjb3VwbGUgb2Ygc3BvdHMsIHNvIGp1c3QgY29tcHV0ZSB0aGVtIG9uY2UuCi0tUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQotLUVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCi0rUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQotK0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCi0gCi0gIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQotICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAotQEAgLTcwLDcgKzcwLDcgQEAKLSAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCi0gICAgICIiIgotICAgICBpZiBwcmVmaXggaXMgTm9uZToKLS0gICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAotKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXS5yc3RyaXAoJ2luY2x1ZGUnKQotIAotICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6Ci0gICAgICAgICBpZiBweXRob25fYnVpbGQ6Ci1AQCAtMTE1LDEyICsxMTUsMTYgQEAKLSAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5wcmVmaXggb3IKLSAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCi0gICAgICIiIgotKyAgICBsaWJfYmFzZW5hbWUgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnNwbGl0KCcvJylbLTFdCi0gICAgIGlmIHByZWZpeCBpcyBOb25lOgotLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCi0rICAgICAgICBpZiBwbGF0X3NwZWNpZmljOgotKyAgICAgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10ucnN0cmlwKGxpYl9iYXNlbmFtZSkKLSsgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgcHJlZml4ID0gUFJFRklYCi0gCi0gICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKLSAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Jhc2VuYW1lLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQotICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgotICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KLSAgICAgICAgIGVsc2U6Ci1AQCAtMjE2LDcgKzIyMCw3IEBACi0gICAgIGVsc2U6Ci0gICAgICAgICAjIFRoZSBuYW1lIG9mIHRoZSBjb25maWcuaCBmaWxlIGNoYW5nZWQgaW4gMi4yCi0gICAgICAgICBjb25maWdfaCA9ICdweWNvbmZpZy5oJwotLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKQotKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQotIAotIAotIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKLUBAIC0yMjUsNyArMjI5LDcgQEAKLSAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2VmaWxlIikKLSAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCi0tICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpCi0rICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCi0gCi0gCi0gZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCBnPU5vbmUpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaAppbmRleCA1Mjc5ZTdjLi5hNTkyZWE0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaApAQCAtNCw4ICs0LDggQEAKIAogLSBJbXBsZW1lbnRzIFJpY2hhcmQgUHVyZGllJ3MgaWRlYQogCi1TaWduZWQtT2ZmLUJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KLVNpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KIAogSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoCmluZGV4IDVlYzEwZDYuLjM2MTc4ODIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaApAQCAtMSwyNCArMSwyNyBAQAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKLUluZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi42LjEub3JpZy9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAwOS0xMS0xMyAxNjowNDo1NC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMDktMTEtMTMgMTY6MDY6MjcuMDAwMDAwMDAwICswMDAwCi1AQCAtMzAwLDYgKzMwMCw4IEBACi0gICAgICAgICBkeWxpYl9mID0gc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKGxpYiwgbGliX3R5cGU9J2R5bGliJykKLSAgICAgICAgIHN0YXRpY19mID0gc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKGxpYiwgbGliX3R5cGU9J3N0YXRpYycpCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CitAQCAtMjc4LDYgKzI3OCw4IEBAIGNsYXNzIFVuaXhDQ29tcGlsZXIoQ0NvbXBpbGVyKToKKyAKKyAKICAKICsgICAgICAgIHByaW50ICJMb29raW5nIGluICVzIGZvciAlcyIgJSAobGliLCBkaXJzKQogKwogICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgICAgICAgIHNoYXJlZCA9IG9zLnBhdGguam9pbihkaXIsIHNoYXJlZF9mKQogICAgICAgICAgICAgIGR5bGliID0gb3MucGF0aC5qb2luKGRpciwgZHlsaWJfZikKLUBAIC0zMDksMTAgKzMxMSwxMyBAQAorQEAgLTI5OCwxMiArMzAwLDE2IEBAIGNsYXNzIFVuaXhDQ29tcGlsZXIoQ0NvbXBpbGVyKToKICAgICAgICAgICAgICAjIGFzc3VtaW5nIHRoYXQgKmFsbCogVW5peCBDIGNvbXBpbGVycyBkby4gIEFuZCBvZiBjb3Vyc2UgSSdtCiAgICAgICAgICAgICAgIyBpZ25vcmluZyBldmVuIEdDQydzICItc3RhdGljIiBvcHRpb24uICBTbyBzdWUgbWUuCiAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHlsaWIpOgogKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKGR5bGliKQogICAgICAgICAgICAgICAgICByZXR1cm4gZHlsaWIKKyAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHhjb2RlX3N0dWIpOgorKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKHhjb2RlX3N0dWIpCisgICAgICAgICAgICAgICAgIHJldHVybiB4Y29kZV9zdHViCiAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzaGFyZWQpOgogKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKHNoYXJlZCkKICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2gKaW5kZXggOGNhODllNy4uOTE2YjQwZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoCkBAIC0xLDYgKzEsNiBAQAogUmViYXNlZCBmb3IgUHl0aG9uIDIuNy45CiAKLVNpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CiAKIDIwMTEvMDkvMjkKIFRoZSBweXRob24gcmVjaXBlIGJ1aWxkaW5nIHdhcyBmYWlsaW5nIGJlY2F1c2UgcHl0aG9uLW5hdGl2ZSAKQEAgLTEwLDEyICsxMCwxMiBAQAogCiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLXNwZWNpZmljXQogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIAotSW5kZXg6IFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCitJbmRleDogUHl0aG9uLTIuNy4xMi9JbmNsdWRlL3B5dGhvbnJ1bi5oCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAotKysrIFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMi43LjEyL0luY2x1ZGUvcHl0aG9ucnVuLmgKIEBAIC0xMDgsNiArMTA4LDcgQEAgUHlBUElfRlVOQyhjaGFyICopIFB5X0dldFBhdGgodm9pZCk7CiAgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCiAgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CkBAIC0yNCwxMCArMjQsMTAgQEAKICBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOwogIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKICBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOwotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKIEBAIC0yMiw2ICsyMiw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCiAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKICAKQEAgLTQ2LDExICs0NiwxMSBAQAogICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKICAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCiAgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi1JbmRleDogUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3B5ZG9jLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3B5ZG9jLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQotQEAgLTM4Myw3ICszODMsNyBAQCBjbGFzcyBEb2M6CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL3B5ZG9jLnB5CitAQCAtMzg0LDcgKzM4NCw3IEBAIGNsYXNzIERvYzoKICAKICAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkiKQpAQCAtNTksMTAgKzU5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iK3N5cy52ZXJzaW9uWzA6M10pCiAgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKICAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3NpdGUucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc2l0ZS5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL3NpdGUucHkKIEBAIC0yODgsMTMgKzI4OCwxOSBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CiAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CiAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKQEAgLTg2LDEwICs4NiwxMCBAQAogICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgogICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKICAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KLUluZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3Rlc3QvdGVzdF9kbC5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3RfZGwucHkKLSsrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvdGVzdC90ZXN0X2RsLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvdGVzdC90ZXN0X2RsLnB5CiBAQCAtNCwxMCArNCwxMSBAQAogIGltcG9ydCB1bml0dGVzdAogIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKQEAgLTEwNCwxMCArMTA0LDEwIEBACiAgICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCiAgICAgICgnL3Vzci9saWIvbGliYy5keWxpYicsICdnZXRwaWQnKSwKICAgICAgXQotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi90cmFjZS5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90cmFjZS5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvdHJhY2UucHkKIEBAIC03NTQsMTAgKzc1NCwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgogICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCiAgCkBAIC0xMjEsMTEgKzEyMSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCiAgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCiAgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQotSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0luZGV4OiBQeXRob24tMi43LjEyL01ha2VmaWxlLnByZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgotKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KLUBAIC04Nyw2ICs4Nyw3IEBAIFBZX0NGTEFHUz0JJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUcKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy4xMi9NYWtlZmlsZS5wcmUuaW4KK0BAIC05Miw2ICs5Miw3IEBAIFBZX0NGTEFHUz0JJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUcKICAKICAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCiAgTUFDSERFUD0JQE1BQ0hERVBACkBAIC0xMzMsNyArMTMzLDcgQEAKICAKICAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKICBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACi1AQCAtMTA2LDcgKzEwNyw3IEBAIExJQkRJUj0JCUBsaWJkaXJACitAQCAtMTExLDcgKzExMiw3IEBAIExJQkRJUj0JCUBsaWJkaXJACiAgTUFORElSPQkJQG1hbmRpckAKICBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKICBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgCiAgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcwogIEJJTkxJQkRFU1Q9CSQoTElCRElSKS9weXRob24kKFZFUlNJT04pCi1AQCAtNTk3LDYgKzU5OCw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKK0BAIC02NjksNiArNjcwLDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAogIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAogIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKICAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKQEAgLTE1MCw3ICsxNTAsNyBAQAogIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCiAgCiAgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKLUBAIC02MzksNyArNjQxLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKK0BAIC03MjAsNyArNzIyLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKICBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCiAgCiAgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYwpAQCAtMTU5LDI1ICsxNTksMjUgQEAKICAKICBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCiAgCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCi1JbmRleDogUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCitJbmRleDogUHl0aG9uLTIuNy4xMi9Nb2R1bGVzL2dldHBhdGguYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCi0rKysgUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCi1AQCAtMTE2LDkgKzExNiwxMSBAQAotICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTIuNy4xMi9Nb2R1bGVzL2dldHBhdGguYworQEAgLTEwMCw2ICsxMDAsMTMgQEAKKyAjZXJyb3IgIlBSRUZJWCwgRVhFQ19QUkVGSVgsIFZFUlNJT04sIGFuZCBWUEFUSCBtdXN0IGJlIGNvbnN0YW50IGRlZmluZWQiCiAgI2VuZGlmCiAgCiArI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgogKwotICNpZm5kZWYgUFlUSE9OUEFUSAotLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCi0tICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjaWZuZGVmIFBZVEhPTlBBVEgKICsjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCi0rICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgotICNlbmRpZgotIAorKyAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKysjZW5kaWYKKysKICAjaWZuZGVmIExBTkRNQVJLCi1AQCAtMTI5LDcgKzEzMSw3IEBAIHN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOworICNkZWZpbmUgTEFORE1BUksgIm9zLnB5IgorICNlbmRpZgorQEAgLTEwOCw3ICsxMTUsNyBAQCBzdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKICBzdGF0aWMgY2hhciBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOwogIHN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07CiAgc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7CkBAIC0xODYsMTAgKzE4NiwxMCBAQAogIAogIHN0YXRpYyB2b2lkCiAgcmVkdWNlKGNoYXIgKmRpcikKLUluZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKK0luZGV4OiBQeXRob24tMi43LjEyL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKLSsrKyBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysrKyBQeXRob24tMi43LjEyL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCiBAQCAtMTAsMyArMTAsMTMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKICB7CiAgCXJldHVybiBQTEFURk9STTsKQEAgLTIwNCwxMCArMjA0LDEwIEBACiArewogKwlyZXR1cm4gTElCOwogK30KLUluZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCitJbmRleDogUHl0aG9uLTIuNy4xMi9QeXRob24vc3lzbW9kdWxlLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKLSsrKyBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0yLjcuMTIvUHl0aG9uL3N5c21vZHVsZS5jCiBAQCAtMTQzNyw2ICsxNDM3LDggQEAgX1B5U3lzX0luaXQodm9pZCkKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CiAgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKQEAgLTIxNywxMSArMjE3LDExIEBACiAgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkpKTsKICAgICAgU0VUX1NZU19GUk9NX1NUUklORygicHJlZml4IiwKLUluZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCitJbmRleDogUHl0aG9uLTIuNy4xMi9jb25maWd1cmUuYWMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9jb25maWd1cmUuYWMKLSsrKyBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCi1AQCAtNzM2LDYgKzczNiwxMSBAQCBTdW5PUyopCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0yLjcuMTIvY29uZmlndXJlLmFjCitAQCAtNzU2LDYgKzc1NiwxMSBAQCBTdW5PUyopCiAgICAgIDs7CiAgZXNhYwogIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoCmluZGV4IDhhNDUyZTkuLjA3ODA2MGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbm9ob3N0bGlicy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2gKQEAgLTIsOCArMiw4IEBACiAKIDIwMTQvMTIvMTUKIFJlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KLVNpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgogCiBJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzIwNGE0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotcmVxdWlyZSBweXRob24uaW5jCi0KLUVYVFJBTkFUSVZFUEFUSCArPSAiYnppcDItbmF0aXZlIgotREVQRU5EUyA9ICJvcGVuc3NsLW5hdGl2ZSBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIgotUFIgPSAiJHtJTkNfUFJ9LjEiCi0KLVNSQ19VUkkgKz0gIlwKLSAgICAgICAgICAgIGZpbGU6Ly8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJ1Zy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbm9ob3N0bGlicy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbXVsdGlsaWIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYnVpbGRkaXIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIFwKLSAgICAgICAgICAgIgotUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKLQotRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vJHtQTn06IgotCi1pbmhlcml0IG5hdGl2ZQotCi1SUFJPVklERVMgKz0gInB5dGhvbi1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbi1jb21wcmVzc2lvbi1uYXRpdmUgcHl0aG9uLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uLWNvZGVjcy1uYXRpdmUgcHl0aG9uLWNvcmUtbmF0aXZlIHB5dGhvbi11bml0dGVzdC1uYXRpdmUiCi0KLUVYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tYmluZGlyPSR7YmluZGlyfS8ke1BOfSIKLQotRVhUUkFfT0VNQUtFID0gJ1wKLSAgQlVJTERfU1lTPSIiIFwKLSAgSE9TVF9TWVM9IiIgXAotICBMSUJDPSIiIFwKLSAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKLSAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKLScKLQotZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKLQlhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCi0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LyR7UE59Ci0JaW5zdGFsbCAtbSAwNzU1IFBhcnNlci9wZ2VuICR7RH0ke2JpbmRpcn0vJHtQTn0KLQotCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0JZm9yIFBZVEhTQ1JJUFQgaW4gYGdyZXAgLXJJbCAke2JpbmRpcn0vJHtQTn0vcHl0aG9uICR7RH0ke2JpbmRpcn0vJHtQTn1gOyBkbwotCQlzZWQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbnwnICRQWVRIU0NSSVBUCi0JZG9uZQotCi0JIyBBZGQgYSBzeW1saW5rIHRvIHRoZSBuYXRpdmUgUHl0aG9uIHNvIHRoYXQgc2NyaXB0cyBjYW4ganVzdCBpbnZva2UKLQkjICJuYXRpdmVweXRob24iIGFuZCBnZXQgdGhlIHJpZ2h0IG9uZSB3aXRob3V0IG5lZWRpbmcgYWJzb2x1dGUgcGF0aHMKLQkjICh0aGVzZSBvZnRlbiBlbmQgdXAgdG9vIGxvbmcgZm9yIHRoZSAjISBwYXJzZXIgaW4gdGhlIGtlcm5lbCBhcyB0aGUKLQkjIGJ1ZmZlciBpcyAxMjggYnl0ZXMgbG9uZykuCi0JbG4gLXMgcHl0aG9uLW5hdGl2ZS9weXRob24gJHtEfSR7YmluZGlyfS9uYXRpdmVweXRob24KLQotCSMgV2UgZG9uJ3Qgd2FudCBtb2R1bGVzIGluIH4vLmxvY2FsIGJlaW5nIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZQotCSMgaW5zdGFsbGVkIGluIHRoZSBuYXRpdmUgc3lzcm9vdCwgc28gZGlzYWJsZSB1c2VyIHNpdGUgc3VwcG9ydC4KLQlzZWQgLWkgLWUgJ3MsXlwoRU5BQkxFX1VTRVJfU0lURSA9IFwpLiosXDFGYWxzZSwnICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlLnB5Ci19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODNjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy4xMi5iYgpAQCAtMCwwICsxLDYxIEBACityZXF1aXJlIHB5dGhvbi5pbmMKKworRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCitERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUgZXhwYXQtbmF0aXZlIgorUFIgPSAiJHtJTkNfUFJ9LjEiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1kaXN0dXRpbHMtc2V0LXRoZS1wcmVmaXgtdG8tYmUtaW5zaWRlLXN0YWdpbmctZGlyZWN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJ1Zy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbm9ob3N0bGlicy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYnVpbGRkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaCBcCisgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vJHtQTn06IgorCitpbmhlcml0IG5hdGl2ZQorCitSUFJPVklERVMgKz0gInB5dGhvbi1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbi1jb21wcmVzc2lvbi1uYXRpdmUgcHl0aG9uLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uLWNvZGVjcy1uYXRpdmUgcHl0aG9uLWNvcmUtbmF0aXZlIHB5dGhvbi11bml0dGVzdC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tYmluZGlyPSR7YmluZGlyfS8ke1BOfSAtLXdpdGgtc3lzdGVtLWV4cGF0PSR7U1RBR0lOR19ESVJfSE9TVH0iCisKK0VYVFJBX09FTUFLRSA9ICdcCisgIExJQkM9IiIgXAorICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorJworCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJFBZVEhTQ1JJUFQKKwlkb25lCisKKwkjIEFkZCBhIHN5bWxpbmsgdG8gdGhlIG5hdGl2ZSBQeXRob24gc28gdGhhdCBzY3JpcHRzIGNhbiBqdXN0IGludm9rZQorCSMgIm5hdGl2ZXB5dGhvbiIgYW5kIGdldCB0aGUgcmlnaHQgb25lIHdpdGhvdXQgbmVlZGluZyBhYnNvbHV0ZSBwYXRocworCSMgKHRoZXNlIG9mdGVuIGVuZCB1cCB0b28gbG9uZyBmb3IgdGhlICMhIHBhcnNlciBpbiB0aGUga2VybmVsIGFzIHRoZQorCSMgYnVmZmVyIGlzIDEyOCBieXRlcyBsb25nKS4KKwlsbiAtcyBweXRob24tbmF0aXZlL3B5dGhvbiAke0R9JHtiaW5kaXJ9L25hdGl2ZXB5dGhvbgorCisJIyBXZSBkb24ndCB3YW50IG1vZHVsZXMgaW4gfi8ubG9jYWwgYmVpbmcgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlCisJIyBpbnN0YWxsZWQgaW4gdGhlIG5hdGl2ZSBzeXNyb290LCBzbyBkaXNhYmxlIHVzZXIgc2l0ZSBzdXBwb3J0LgorCXNlZCAtaSAtZSAncyxeXChFTkFCTEVfVVNFUl9TSVRFID0gXCkuKixcMUZhbHNlLCcgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGUucHkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjcuYmIKaW5kZXggZWM2MTU4Zi4uMzc1N2YzYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjcuYmIKQEAgLTUsNyArNSw3IEBACiBMSUNFTlNFID0gIkxHUEx2Mi4xIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGdwbC50eHQ7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgogCi1TUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL24vbm9zZS9ub3NlLSR7UFZ9LnRhci5neiIKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9uL25vc2Uvbm9zZS0ke1BWfS50YXIuZ3oiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI0ZDNhZDBmZjA3YjYxMzczZDJjZWZjODljNWQwYjIwYiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJmMWJmZmVmOWNiYzgyNjI4ZjZlN2Q3YjQwZDdlMjU1YWVmYWExYWRiNmExYjFkMjZjNjlhOGI3OWU2MjA4YTk4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxZTVhMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQotI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAotI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCi0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORwotI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgotI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAotI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKLSNkZWZpbmUgTlBZX05PX1NNUCAwCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAotI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCi0jZGVmaW5lIE5QWV9FTkFCTEVfU0VQQVJBVEVfQ09NUElMQVRJT04gMQotI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKLSNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKLSNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMEEKLQotI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUwotI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hZGQtZ2xpYmMtY2hlY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWRkLWdsaWJjLWNoZWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTc2OGYzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hZGQtZ2xpYmMtY2hlY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1Eb250IHB1bmlzaCBtdXNsIGZvciBnbGliYydzIHRyaWdub21ldGVyaWMgZnVuY3Rpb25zIHByb2JsZW1zCi1hZGRpdGlvbmFsbHkgZW5zdXJlIHRoYXQgZ2xpYmMgc3BlY2lmaWMgbWFjcm9zIGFyZSBub3QgdXNlZAotdW5jb25kaXRpb25hbGx5Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBudW1weS0xLjEwLjQvbnVtcHkvY29yZS9zcmMvcHJpdmF0ZS9ucHlfY29uZmlnLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBudW1weS0xLjEwLjQub3JpZy9udW1weS9jb3JlL3NyYy9wcml2YXRlL25weV9jb25maWcuaAotKysrIG51bXB5LTEuMTAuNC9udW1weS9jb3JlL3NyYy9wcml2YXRlL25weV9jb25maWcuaAotQEAgLTc1LDEwICs3NSwxMiBAQAotIAotICNpZiBkZWZpbmVkKEhBVkVfRkVBVFVSRVNfSCkKLSAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaWZkZWYgX19HTElCQ19fCi0gI2RlZmluZSBUUklHX09LIF9fR0xJQkNfUFJFUkVRKDIsIDE2KQotICNlbHNlCi0gI2RlZmluZSBUUklHX09LIDAKLSAjZW5kaWYKLSsjZW5kaWYKLSAKLSAjaWYgIVRSSUdfT0sKLSAjdW5kZWYgSEFWRV9DQVNJTgotSW5kZXg6IG51bXB5LTEuMTAuNC9udW1weS9jb3JlL3NyYy9ucHltYXRoL2llZWU3NTQuYy5zcmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBudW1weS0xLjEwLjQub3JpZy9udW1weS9jb3JlL3NyYy9ucHltYXRoL2llZWU3NTQuYy5zcmMKLSsrKyBudW1weS0xLjEwLjQvbnVtcHkvY29yZS9zcmMvbnB5bWF0aC9pZWVlNzU0LmMuc3JjCi1AQCAtNjEyLDcgKzYxMiw3IEBAIHZvaWQgbnB5X3NldF9mbG9hdHN0YXR1c19pbnZhbGlkKHZvaWQpCi0gfQotIAotIAotLSNlbGlmIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgXAotKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgXAotICAgICAgIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgXAotICAgICAgIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAyMTE0KSkKLSAjICBpbmNsdWRlIDxmZW52Lmg+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWQyYjhiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCi0jZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCi0jZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCi0jZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAotI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMTYKLSNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCi0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAotI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAotI2RlZmluZSBOUFlfTk9fU01QIDAKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCi0jZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKLSNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCi0jZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5Ci0jZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDBBCi0KLSNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9fbnVtcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyYjVkMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCi0jZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCi0jZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCi0jZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAotI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCi0jZGVmaW5lIE5QWV9FTkFCTEVfU0VQQVJBVEVfQ09NUElMQVRJT04gMQotI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAotI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKLSNkZWZpbmUgTlBZX05PX1NNUCAwCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAotI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCi0jZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQotI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQotI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQotI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwQQotCi0jaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCi0jZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGJmNjU0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvbnVtcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIGNhdCAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvbnVtcHljb25maWcuaCAqLwotLyoKLSAqICAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgbnVtcHkvY29yZS9zZXR1cC5weWMuIERPIE5PVCBFRElUIAotICogICAqLwotI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIDIgCi0jZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIDQgCi0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyA0IAotI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQgCi0jZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDggCi0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxMiAKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0IAotI2RlZmluZSBOUFlfTk9fU01QIDAKLQotI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDggCi0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDggCi0vKiAjZGVmaW5lIENIQVJfQklUIDggKi8KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvX251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY0NWQ1Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQotI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAotI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCi0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORwotI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgotI2RlZmluZSBOUFlfRU5BQkxFX1NFUEFSQVRFX0NPTVBJTEFUSU9OIDEKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4Ci0jZGVmaW5lIE5QWV9OT19TTVAgMAotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQotI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKLSNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQotI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKLSNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKLSNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMEEKLQotI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUwotI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTJiNWQwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKLSNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKLSNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAotI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKLSNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgotI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKLSNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCi0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAotI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAotI2RlZmluZSBOUFlfTk9fU01QIDAKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCi0jZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKLSNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCi0jZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5Ci0jZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDBBCi0KLSNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS4xMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuMTAuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE1NjJkYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS4xMC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLVNVTU1BUlkgPSAiQSBzb3BoaXN0aWNhdGVkIE51bWVyaWMgUHJvY2Vzc2luZyBQYWNrYWdlIGZvciBQeXRob24iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiUFNGIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTlmNGU4OGI1NzQ4ZTgzMTNjYWFmMzNkMDgxY2U2NWEzIgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9udW1weS9udW1weS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3JlbW92ZS1idWlsZC1wYXRoLWluLWNvbW1lbnRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FkZC1nbGliYy1jaGVjay5wYXRjaCBcCi0gICAgICAgICAgICR7Q09ORklHRklMRVNVUkl9ICIKLQotQ09ORklHRklMRVNVUkkgPz0gIiIKLQotQ09ORklHRklMRVNVUklfYWFyY2g2NCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX2FybSA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfYXJtZWIgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHNlbCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfeDg2ID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV94ODYtNjQgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9taXBzID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfcG93ZXJwYyA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX3Bvd2VycGM2NCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHM2NCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHM2NG4zMiA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L251bXB5LSR7UFZ9IgotCi1pbmhlcml0IGRpc3R1dGlscwotCi0jIE1ha2UgdGhlIGJ1aWxkIGZhaWwgYW5kIHJlcGxhY2UgKmNvbmZpZy5oIHdpdGggcHJvcGVyIG9uZQotIyBUaGlzIGlzIGEgdWdseSwgdWdseSBoYWNrIC0gS29lbgotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKLSAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKLSAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAotICAgIHRydWUKLSAgICBjcCAke1dPUktESVJ9Lypjb25maWcuaCAke1N9L2J1aWxkLyQobHMgJHtTfS9idWlsZCB8IGdyZXAgc3JjKS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvCi19Ci0KLUZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vbnVtcHkvY29yZS9saWIvKi5hIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOTBiYjkwMzQ2NTJjZWZiYWRhMTljZjdkMTQxYTZhNjEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjdmOTE4NDIwNTZhN2NmNjgwYjBlYWY4Y2VmYzVlNDZjNjllMjUyMWU2NTExMjhkMmU2YWFhY2NlYzg2NTJhZSIKLQotIyBpbnN0YWxsIHdoYXQgaXMgbmVlZGVkIGZvciBudW1weS50ZXN0KCkKLVJERVBFTkRTXyR7UE59ID0gInB5dGhvbi11bml0dGVzdCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tZGlmZmxpYiBcCi0gICAgICAgICAgICAgICAgICBweXRob24tcHByaW50IFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1waWNrbGUgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLXNoZWxsIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1ub3NlIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1kb2N0ZXN0IFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1kYXRldGltZSBcCi0gICAgICAgICAgICAgICAgICBweXRob24tZGlzdHV0aWxzIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1taXNjIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1tbWFwIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1uZXRjbGllbnQgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLW51bWJlcnMgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLXB5ZG9jIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1wa2d1dGlsIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1lbWFpbCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tc3VicHJvY2VzcyBcCi0gICAgICAgICAgICAgICAgICBweXRob24tY29tcHJlc3Npb24gXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLWN0eXBlcyBcCi0gICAgICAgICAgICAgICAgICBweXRob24tdGhyZWFkaW5nIFwKLSIKLQotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfNC4wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF80LjAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YxNDJhMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF80LjAuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAiQSBQdXJlIFB5dGhvbiBFeHBlY3QgbGlrZSBNb2R1bGUgZm9yIFB5dGhvbiIKLUhPTUVQQUdFID0gImh0dHA6Ly9wZXhwZWN0LnJlYWR0aGVkb2NzLm9yZy8iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiSVNDIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjZjMjM3OGE5NmIzMDdkNTZiZmIzYTllNThlZGFmYTgiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGV4cGVjdC9wZXhwZWN0LSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICIwNTZkZjgxZTZjYTcwODFmMTAxNWI0YjE0N2I5NzdiNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyMzI3OTVlYmNhYWYyZTEyMDM5NmRiYmFhM2ExMjllZGE1MTc1N2VlYWFlMTkxMTU1OGY0ZWY4ZWU0MTRmYzZjIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9wZXhwZWN0IgotCi1TID0gIiR7V09SS0RJUn0vcGV4cGVjdC0ke1BWfSIKLQotaW5oZXJpdCBkaXN0dXRpbHMKLQotUkRFUEVORFNfJHtQTn0gPSAiXAotICAgIHB5dGhvbi1jb3JlIFwKLSAgICBweXRob24taW8gXAotICAgIHB5dGhvbi10ZXJtaW5hbCBcCi0gICAgcHl0aG9uLXJlc291cmNlIFwKLSAgICBweXRob24tZmNudGwgXAotIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzQuMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfNC4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlMGZhOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzQuMi4wLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQSBQdXJlIFB5dGhvbiBFeHBlY3QgbGlrZSBNb2R1bGUgZm9yIFB5dGhvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZXhwZWN0LnJlYWR0aGVkb2NzLm9yZy8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiSVNDIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MWM3YTcyNTI1MTg4MGFmOGM2YTE0ODE4MTY2NTM4NWIiCisKK1NSQ05BTUUgPSAicGV4cGVjdCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL3AvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MDcxZWM1ZGYwZjNkNTE1ZGFlZGFmYWQ2NzJkMTYzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZjY4MTZiOGNjOGQzMDFhNDk5ZTdhZGYzMzg4MjhiMzliYzc1NDhlYjY0ZGJlZDRkZDQxMGVkOTNkOTVmODUzIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9wZXhwZWN0IgorCitTID0gIiR7V09SS0RJUn0vcGV4cGVjdC0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBweXRob24tY29yZSBcCisgICAgcHl0aG9uLWlvIFwKKyAgICBweXRob24tdGVybWluYWwgXAorICAgIHB5dGhvbi1yZXNvdXJjZSBcCisgICAgcHl0aG9uLWZjbnRsIFwKKyAgICBweXRob24tcHR5cHJvY2VzcyBcCisiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB0eXByb2Nlc3NfMC41LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHR5cHJvY2Vzc18wLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzFlNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB0eXByb2Nlc3NfMC41LjEuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJSdW4gYSBzdWJwcm9jZXNzIGluIGEgcHNldWRvIHRlcm1pbmFsIgorSE9NRVBBR0UgPSAiaHR0cDovL3B0eXByb2Nlc3MucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0LyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJJU0MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1jZmRjZDUxZmE3ZDU4MDhkYTRlNzQzNDZlZTM5NDQ5MCIKKworU1JDTkFNRSA9ICJwdHlwcm9jZXNzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjk0ZTUzNzEyMjkxNGNjOWVjOWMxZWFkY2QzNmU3M2ExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA1MzBjZTYzYTkyOTViZmFlN2JkMDZlZGMwMmI2YWE5MzU2MTlmNDg2ZjBmMWRjMDk3MmY1MTYyNjVlZTgxYTYiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3B0eXByb2Nlc3MiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIHB5dGhvbi1jb3JlIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZmUyNWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBDYWlybyBjYW52YXMgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9weWNhaXJvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCi1TRUNUSU9OID0gInB5dGhvbi1kZXZlbCIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEgJiBNUEwtMS4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjJlMDcxYWI3Mjk3ODQzMWIyOTRhMGQ2OTYzMjc0MjEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1MR1BMLTIuMTttZDU9ZmFkOWIzMzMyYmU4OTRiYWI5YmM1MDE1NzI4NjRiMjkgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1NUEwtMS4xO21kNT1iZmUxZjc1ZDYwNjkxMmE0MTExYzkwNzQzZDZjNzMyNSIKLQotIyBjYWlybyA+PSAxLjguOAotREVQRU5EUyA9ICJjYWlybyIKLVBSID0gInIyIgotCi1TUkNfVVJJID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9yZWxlYXNlcy9weTJjYWlyby0ke1BWfS50YXIuYnoyIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMjAzMzcxMzJjNGFiMDZjMTE0NmFkMzg0ZDU1MzcyYzUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDMwNDM5ZjA2YzJlYzFhMzllMjc0NjRjNmM4MjhiNmVmYWNlM2IyMmVlMTdiMmRlMDVkYzQwOWU0MjlhNzQzMSIKLQotUyA9ICIke1dPUktESVJ9L3B5MmNhaXJvLSR7UFZ9IgotCi1pbmhlcml0IGRpc3R1dGlscyBwa2djb25maWcKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLWRvX2NvbmZpZ3VyZSgpIHsKLQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IC4vd2FmIGNvbmZpZ3VyZSAtLXByZWZpeD0ke0R9JHtwcmVmaXh9IC0tbGliZGlyPSR7RH0ke2xpYmRpcn0KLX0KLQotZG9fY29tcGlsZSgpIHsKLQkuL3dhZiBidWlsZCAke1BBUkFMTEVMX01BS0V9Ci19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JLi93YWYgaW5zdGFsbAotCXNlZCBcCi0JCS1lICdzOkBwcmVmaXhAOiR7cHJlZml4fTonIFwKLQkJLWUgJ3M6QFZFUlNJT05AOiR7UFZ9OicgXAotCQktZSAnczpAaW5jbHVkZWRpckA6JHtpbmNsdWRlZGlyfTonIFwKLQkJcHljYWlyby5wYy5pbiA+IHB5Y2Fpcm8ucGMKLQlpbnN0YWxsIC1tIDA2NDQgcHljYWlyby5wYyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8KLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3RfMy4xOC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8zLjE4LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ODcxZmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8zLjE4LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1TVU1NQVJZID0gIlB5dGhvbiBHT2JqZWN0IGJpbmRpbmdzIgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZGlzdHV0aWxzLWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uCi0KLURFUEVORFMgKz0gInB5dGhvbiBnbGliLTIuMCBnbm9tZS1jb21tb24iCi0KLVNSQ05BTUU9InB5Z29iamVjdCIKLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy8ke1NSQ05BTUV9LyR7QGdub21lX3ZlcmRpcigiJHtQVn0iKX0vJHtTUkNOQU1FfS0ke1BWfS50YXIueHogXAotICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtc3lzcm9vdC1wYXRoLXRvLUdJX0RBVEFESVItZG9uLXQtc2UucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMGE5NTZmM2U3ODVlMjNiMGYxMzY4MzJmMmU1N2E4NjIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmEzY2FkMTUxNzkxNmI3NGUxMzFlNjAwMmMzODI0MzYxYWVlMDY3MWZmYjBkNTVkZWQxMTk0NzdmYzFjMmM1ZiIKLQotUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWNhaXJvIC0td2l0aC1weXRob249cHl0aG9uMi43IgotCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNldHVwdG9vbHMgcHl0aG9uLWltcG9ydGxpYiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGVmMWFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXJlcXVpcmUgcHl0aG9uLXB5cmV4XyR7UFZ9LmJiCi1pbmhlcml0IG5hdGl2ZSBweXRob25uYXRpdmUKLURFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSIKLVJERVBFTkRTXyR7UE59ID0gIiIKLVBSID0gInIzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC9weXJleC1maXgtb3B0aW1pemVkLW1vZGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OGMzMjguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogUHlyZXgtMC45LjguNC9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHlyZXgtMC45LjguNC5vcmlnL1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKLSsrKyBQeXJleC0wLjkuOC40L1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKLUBAIC0xNSw3ICsxNSw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgd2FybmluZ3MgPSBOb25lCi0gCi0gY2xhc3MgRXh0ZW5zaW9uKF9FeHRlbnNpb24uRXh0ZW5zaW9uKToKLS0gICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyArIFwKLSsgICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyBvciAiIiArIFwKLSAgICAgIiIicHlyZXhfaW5jbHVkZV9kaXJzIDogW3N0cmluZ10KLSAgICAgICAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBQeXJleCBoZWFkZXIgZmlsZXMgKC5weGQpIChpbgotICAgICAgICAgVW5peCBmb3JtIGZvciBwb3J0YWJpbGl0eSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRkZDJlNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXhfMC45LjkuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVU1NQVJZID0gIkxhbmd1YWdlIGZvciB3cml0aW5nIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlcyIKLURFU0NSSVBUSU9OID0gIlB5cmV4IGlzIGEgbGFuZ3VhZ2Ugc3BlY2lhbGx5IGRlc2lnbmVkIGZvciB3cml0aW5nIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlcy4gXAotSXQncyBkZXNpZ25lZCB0byBicmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBuaWNlLCBoaWdoLWxldmVsLCBlYXN5LXRvLXVzZSB3b3JsZCBvZiBQeXRob24gXAotYW5kIHRoZSBtZXNzeSwgbG93LWxldmVsIHdvcmxkIG9mIEMuIgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIkFwYWNoZS0yLjAiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NzcxZDQ3MmY1M2Y5MzMwMzNmNTdlZWVlNzgwOGU1YmQiCi1TUkNOQU1FID0gIlB5cmV4IgotUFIgPSAicjQiCi0KLVNSQ19VUkkgPSAiXAotICBodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9ncmVnLmV3aW5nL3B5dGhvbi8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKLSAgZmlsZTovL3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1MTVkZWU2N2QxNWQ0MzkzODQxZTJkNjBlODM0MTk0NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1Zjg3ZGYwNjgzMWQwYjM0MTJlYjRiYzlkM2ZjMmVlN2JmYWUxYjkxM2Q3ZGE4YzIzYWIyYmY1Njk5ZmI2YjUwIgotUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL1B5cmV4L0NvbXBpbGVyL0xleGljb24ucGlja2xlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi41LjAuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi40LjEuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi41LjAuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjQuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk2Y2Y1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi40LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVU1NQVJZID0gIlNvZnR3YXJlIENvbnN0cnVjdGlvbiB0b29sIChtYWtlL2F1dG90b29scyByZXBsYWNlbWVudCkiCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTIzYmMxNTMwYzU1ZTlmMGQxYjcwOTA1NmJjZWEyMzdkIgotU1JDTkFNRSA9ICJzY29ucyIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vc2NvbnMvc2NvbnMtJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWEwZGRmMzNkOTgzOWYwNDM4MGUwZmFlODdjYzRiNDAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGZjNGY0MjkyOGM2OWJjYmIzM2UxYmU5NGI2NDZmMmM3MDBiNjU5NjkzZmFiYzc3OGMxOTJkNGQyMmY3NTNhNyIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc2NvbnMvZmlsZXMvc2NvbnMvIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL3Njb25zLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCi0KLVMgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgotCi1pbmhlcml0IGRpc3R1dGlscwotCi1SREVQRU5EU18ke1BOfSA9ICJcCi0gIHB5dGhvbi1mY250bCBcCi0gIHB5dGhvbi1pbyBcCi0gICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjUuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQzYzQxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuNS4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiU29mdHdhcmUgQ29uc3RydWN0aW9uIHRvb2wgKG1ha2UvYXV0b3Rvb2xzIHJlcGxhY2VtZW50KSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9M2E4ODVkZmY2ZDE0ZTRjZDg3NmQ5MDA4YTA5YTQyZGUiCitTUkNOQU1FID0gInNjb25zIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmRhNTUzMGE3MGE0MWE3ODMxZDgzYzhiMTkxYzAyMWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDFmMWIzZDYwMjM1MTZhOGUxYjVlNzc3OTllNWE4MmEyM2IzMjk1M2IxMTAyZDMzOTA1OWZmZWNhODYwMDQ5MyIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvU0NvbnMvIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uLWZjbnRsIFwKKyAgcHl0aG9uLWlvIFwKKyAgcHl0aG9uLWpzb24gXAorICBweXRob24tc3VicHJvY2VzcyBcCisgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzLmluYwppbmRleCAwOTE3ZTg4Li45MmNhOWEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29scy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHMuaW5jCkBAIC0xLDIxICsxLDIxIEBACiBTVU1NQVJZID0gIkRvd25sb2FkLCBidWlsZCwgaW5zdGFsbCwgdXBncmFkZSwgYW5kIHVuaW5zdGFsbCBQeXRob24gcGFja2FnZXMiCiBIT01FUEFHRSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NldHVwdG9vbHMiCiBTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiUFNGIHwgWlBMLTIuMCIKK0xJQ0VOU0UgPSAiTUlUIgogCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXR1cC5weTtiZWdpbmxpbmU9Nzg7ZW5kbGluZT03ODttZDU9OGEzMTQyNzBkZDdhOGRiY2E3NDE3NzU0MTVmMTcxNmUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXR1cC5weTtiZWdpbmxpbmU9MTM0O2VuZGxpbmU9MTM0O21kNT0zZThkZjAyNGQ2YzE0NDJkMThlODRhY2Y4ZmJiYzQ3NSIKIAogU1JDTkFNRSA9ICJzZXR1cHRvb2xzIgogCi1TUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3MvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiIKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9zLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3oiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJjNWE3ZDkwYzFlMGFjZjhjNGVjNWMyYmYzMWJjMjViNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyMTRiZjI5OTMzZjQ3Y2YyNWU2ZmFhNTY5ZjcxMDczMTcyOGEwN2ExOWNhZTkxZWE2NGY4MjYwNTFmNjhhOGNmIgorU1JDX1VSSVttZDVzdW1dID0gIjg2OWYzMDI5ZGNjNjZhNjRiYTM5ODc1ZTJhMmYwNDRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE5YWFkMTk0NzEwNTJkNWRhZWZlOTZmMmMxZmEyZTg4ZGNkYjE3NDg4YmY4NzA4ZDdlNjM1Njg4MWVhODMzY2IiCiAKIFVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NldHVwdG9vbHMiCiAKIFMgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgogCiBkb19pbnN0YWxsX3ByZXBlbmQoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMKKyAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTkuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzE5LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNzIwMzkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTkuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLXJlcXVpcmUgcHl0aG9uLXNldHVwdG9vbHMuaW5jCi0KLVBST1ZJREVTID0gInB5dGhvbi1kaXN0cmlidXRlIgotCi1ERVBFTkRTICs9ICJweXRob24iCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uLW5hdGl2ZSIKLQotaW5oZXJpdCBkaXN0dXRpbHMKLQotRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKLQotUkRFUEVORFNfJHtQTn0gPSAiXAotICBweXRob24tc3RyaW5nb2xkIFwKLSAgcHl0aG9uLWVtYWlsIFwKLSAgcHl0aG9uLXNoZWxsIFwKLSAgcHl0aG9uLWRpc3R1dGlscyBcCi0gIHB5dGhvbi1jb21wcmVzc2lvbiBcCi0gIHB5dGhvbi1wa2d1dGlsIFwKLSAgcHl0aG9uLXBsaXN0bGliIFwKLSAgcHl0aG9uLW51bWJlcnMgXAotICBweXRob24taHRtbCBcCi0gIHB5dGhvbi1uZXRzZXJ2ZXIgXAotICBweXRob24tY3R5cGVzIFwKLSAgcHl0aG9uLXN1YnByb2Nlc3MgXAotICBweXRob24tdW5pdHRlc3QgXAotICBweXRob24tY29tcGlsZSBcCi0iCi0KLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJcCi0gIHB5dGhvbi1kaXN0dXRpbHMgXAotICBweXRob24tY29tcHJlc3Npb24gXAotIgotCi1SUkVQTEFDRVNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCi1SUFJPVklERVNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCi1SQ09ORkxJQ1RTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18yMi4wLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18yMi4wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2NDc0YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzIyLjAuNS5iYgpAQCAtMCwwICsxLDM4IEBACityZXF1aXJlIHB5dGhvbi1zZXR1cHRvb2xzLmluYworCitQUk9WSURFUyA9ICJweXRob24tZGlzdHJpYnV0ZSIKKworREVQRU5EUyArPSAicHl0aG9uIgorREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gInB5dGhvbi1uYXRpdmUiCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbi1zdHJpbmdvbGQgXAorICBweXRob24tZW1haWwgXAorICBweXRob24tc2hlbGwgXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyAgcHl0aG9uLXBrZ3V0aWwgXAorICBweXRob24tcGxpc3RsaWIgXAorICBweXRob24tbnVtYmVycyBcCisgIHB5dGhvbi1odG1sIFwKKyAgcHl0aG9uLW5ldHNlcnZlciBcCisgIHB5dGhvbi1jdHlwZXMgXAorICBweXRob24tc3VicHJvY2VzcyBcCisgIHB5dGhvbi11bml0dGVzdCBcCisgIHB5dGhvbi1jb21waWxlIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIlwKKyAgcHl0aG9uLWRpc3R1dGlscyBcCisgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JSRVBMQUNFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JQUk9WSURFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JDT05GTElDVFNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaXguaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxMmZhOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaXguaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIDIgYW5kIDMgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zaXgvIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTZmMDBkNGE1MDcxM2ZhODU5ODU4ZGQ5YWJhYTM1YjIxIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy9zaXgvc2l4LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNGVlZDUwNzU0ODExN2IyYWI1MjNhYjE0YjJmOGI1NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMDVmOGQ2ODYxNmY4MjQ4ZTI0YmYwZTkzNzJlZjA0ZDNjYzEwMTA0ZjE5ODBmNTRkNTdiMmNlNzNhNWFkNTZhIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zaXgvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL3NpeC8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUyA9ICIke1dPUktESVJ9L3NpeC0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaXhfMS4xMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeF8xLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MDQ4NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaXhfMS4xMC4wLmJiCkBAIC0wLDAgKzEsNCBAQAoraW5oZXJpdCBzZXR1cHRvb2xzCityZXF1aXJlIHB5dGhvbi1zaXguaW5jCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24taW8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9jaGFubmVscy1ycG1fc3lzLXVzZS1tZDVzdW0taW5zdGVhZC1vZi1tdGltZS1hcy10aGUtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vY2hhbm5lbHMtcnBtX3N5cy11c2UtbWQ1c3VtLWluc3RlYWQtb2YtbXRpbWUtYXMtdGhlLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE0YTEyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vY2hhbm5lbHMtcnBtX3N5cy11c2UtbWQ1c3VtLWluc3RlYWQtb2YtbXRpbWUtYXMtdGhlLS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitjaGFubmVscy9ycG1fc3lzOiB1c2UgbWQ1c3VtIGluc3RlYWQgb2YgbXRpbWUgYXMgdGhlIGRpZ2VzdAorCitVc2UgdGhlIGludGVybmFsIGdldEZpbGVEaWdlc3QoKSBmdW5jdGlvbiAod2hpY2ggZGVmYXVsdHMgdG8gbWQ1KSBpbnN0ZWFkIG9mCittdGltZSBmb3IgZ2V0dGluZyB0aGUgZmlsZSBkaWdlc3QuIE9uIHNvbWUgc3lzdGVtcyBtdGltZSBwcm92ZWQgdG8gYmUKK3VucmVsaWFibGUgYmVjYXVzZSBvZiBkZWxheWVkIHVwZGF0ZS4gVGhpcyBjYXVzZWQgc21hcnQgdG8gbWlzcyBycG0gZGIgdXBkYXRlcworYW5kIHRodXMgZ2V0IGl0cyB1bmRlcnN0YW5kaW5nIG9mIGluc3RhbGxlZCBwYWNrYWdlcyBvdXQgb2Ygc3luYy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmt1cyBMZWh0b25lbiA8bWFya3VzLmxlaHRvbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNtYXJ0L2NoYW5uZWxzL3JwbV9zeXMucHkgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NtYXJ0L2NoYW5uZWxzL3JwbV9zeXMucHkgYi9zbWFydC9jaGFubmVscy9ycG1fc3lzLnB5CitpbmRleCBiOWZkYTI3Li42ZjFmZTk0IDEwMDY0NAorLS0tIGEvc21hcnQvY2hhbm5lbHMvcnBtX3N5cy5weQorKysrIGIvc21hcnQvY2hhbm5lbHMvcnBtX3N5cy5weQorQEAgLTIyLDYgKzIyLDcgQEAKKyBmcm9tIHNtYXJ0LmJhY2tlbmRzLnJwbS5oZWFkZXIgaW1wb3J0IFJQTURCTG9hZGVyCisgZnJvbSBzbWFydC5iYWNrZW5kcy5ycG0uYmFzZSBpbXBvcnQgZ2V0VFMsIHJwbV9qb2luX2RicGF0aAorIGZyb20gc21hcnQuY2hhbm5lbCBpbXBvcnQgUGFja2FnZUNoYW5uZWwKKytmcm9tIHNtYXJ0LnV0aWwuZmlsZXRvb2xzIGltcG9ydCBnZXRGaWxlRGlnZXN0CisgZnJvbSBzbWFydCBpbXBvcnQgKgorIGltcG9ydCBvcworIAorQEAgLTM1LDcgKzM2LDcgQEAgY2xhc3MgUlBNU3lzQ2hhbm5lbChQYWNrYWdlQ2hhbm5lbCk6CisgICAgICAgICBkYmRpciA9IHJwbV9qb2luX2RicGF0aChzeXNjb25mLmdldCgicnBtLXJvb3QiLCAiLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25mLmdldCgicnBtLWRicGF0aCIsICJ2YXIvbGliL3JwbSIpKQorICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkYmRpciwgIlBhY2thZ2VzIikKKy0gICAgICAgIGRpZ2VzdCA9IG9zLnBhdGguZ2V0bXRpbWUocGF0aCkKKysgICAgICAgIGRpZ2VzdCA9IGdldEZpbGVEaWdlc3QocGF0aCkKKyAgICAgICAgIGlmIGRpZ2VzdCA9PSBzZWxmLl9kaWdlc3Q6CisgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIHNlbGYucmVtb3ZlTG9hZGVycygpCistLSAKKzIuNi42CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1kZXVnZ2luZy13aGVuLXRhcmdldHBhdGgtaXMtZW1wdHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZGV1Z2dpbmctd2hlbi10YXJnZXRwYXRoLWlzLWVtcHR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODA4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZGV1Z2dpbmctd2hlbi10YXJnZXRwYXRoLWlzLWVtcHR5LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gMDFlNTFhZmQwMzEzMTk0N2Y4ZDc0YjlhMjNmZGJjMDA3ODI0OTQ5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAzIEF1ZyAyMDE2IDA3OjQ3OjA5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZldGNoZXIucHk6IEFkZCBkZWJ1Z2dpbmcgd2hlbiB0YXJnZXRwYXRoIGlzIGVtcHR5CisKK1RoZXJlIGFyZSBzZXZlcmFsIGVycm9ycyB3aGVuIG9wZW5pbmluZyBmaWxlcyBvciBtYW5pcHVsYXRpbmcKK3BhdGggc3RyaW5ncywgdGhvc2UgZXJyb3JzIHBvaW50IHRhcmdldHBhdGggcGFzc2VkIHRvCitzZXRTdWNjZWVkZWQoKSBpcyBlbXB0eS4gVGhpcyBwYXRjaCB3b24ndCBzb2x2ZSB0aGUgcHJvYmxlbXMsCitidXQgd2lsbCBhZGQgZGVidWdnaW5nIHRvIGdpdmUgYW4gaWRlYSB3aHkgaXMgZmFpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJ1Z2dpbmddCisKK1NpZ25lZC1vZmYtYnk6IE1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAbGludXguaW50ZWwuY29tPgorLS0tCisgc21hcnQvZmV0Y2hlci5weSB8IDE2ICsrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvZmV0Y2hlci5weSBiL3NtYXJ0L2ZldGNoZXIucHkKK2luZGV4IGRkM2ZmNmIuLjY0YWE5NzkgMTAwNjQ0CistLS0gYS9zbWFydC9mZXRjaGVyLnB5CisrKysgYi9zbWFydC9mZXRjaGVyLnB5CitAQCAtNTk0LDYgKzU5NCwyMiBAQCBjbGFzcyBGZXRjaEl0ZW0ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgc2VsZi5fZXRhID0gTm9uZQorIAorICAgICBkZWYgc2V0U3VjY2VlZGVkKHNlbGYsIHRhcmdldHBhdGgsIGZldGNoZWRzaXplPTApOgorKyAgICAgICAgIyBJdCBzZWVtcyB0aGUgaW4gc29tZSBvZGQgY2FzZXMgdGFyZ2V0cGF0aCBoZXJlCisrICAgICAgICAjIGlzIGVtcHR5LCB0aGlzIHdpbGwgbGVhZCB0byBidWdzIGluIHNldmVyYWwgcGxhY2VzCisrICAgICAgICBpZiBub3QgdGFyZ2V0cGF0aDoKKysgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisrICAgICAgICAgICAgdGJfc3RyID0gIiIKKysgICAgICAgICAgICBmb3IgdGhyZWFkSWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgorKyAgICAgICAgICAgICAgICB0Yl9zdHIgKz0gJ1xuVGhyZWFkSUQ6ICVzJyAlIHRocmVhZElkCisrICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0YWNrKToKKysgICAgICAgICAgICAgICAgICAgIHRiX3N0ciArPSAnXG5GaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkKKysgICAgICAgICAgICAgICAgICAgIGlmIGxpbmU6CisrICAgICAgICAgICAgICAgICAgICAgICAgdGJfc3RyICs9ICJcbiAgJXMiICUgbGluZS5zdHJpcCgpCisrICAgICAgICAgICAgZXJyb3Jfc3RyaW5nID0gWyJObyBmaWxlIHBhdGggc3BlY2lmaWVkIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSTDogJXMiICUgc2VsZi5fdXJsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhdHVzOiAlcyIgJSBzZWxmLl9zdGF0dXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFjZWJhY2s6ICVzIiAlIHRiX3N0cl0KKysgICAgICAgICAgICByYWlzZSBFcnJvciwgXygiXG4iLmpvaW4oZXJyb3Jfc3RyaW5nKSkKKyAgICAgICAgIGlmIHNlbGYuX3N0YXR1cyBpcyBub3QgRkFJTEVEOgorICAgICAgICAgICAgIHNlbGYuX3N0YXR1cyA9IFNVQ0NFRURFRAorICAgICAgICAgICAgIHNlbGYuX3RhcmdldHBhdGggPSB0YXJnZXRwYXRoCistLSAKKzIuNi42CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LnBhdGNoCmluZGV4IGVjOThlMDMuLjVhZWRjODggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICBkZWwgZ2V0VFMudHMKICAgICAgICAgICAgICBjYi5ncmFiT3V0cHV0KEZhbHNlKQotKyAgICAgICAgICAgIGlmIHByb2JzIGFuZCBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKToKKysgICAgICAgICAgICBpZiAocHJvYnMgaXMgbm90IE5vbmUpIGFuZCBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKToKICsgICAgICAgICAgICAgICAgZGVmIHJlbW92ZV9jb25mbGljdChwa2dORVZSKToKICsgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gY2hhbmdlc2V0LmtleXMoKToKICsgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2dORVZSID09IHN0cihrZXkpOgpAQCAtNjcsOCArNjcsOCBAQAogKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5ID0gMAogKwogICAgICAgICAgICAgIHByb2cuc2V0RG9uZSgpCi0tICAgICAgICAgICAgaWYgcHJvYnM6Ci0rICAgICAgICAgICAgaWYgcHJvYnMgYW5kIChub3QgcmV0cnkpOgorLSAgICAgICAgICAgIGlmIHByb2JzIGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgIGlmIChwcm9icyBpcyBub3QgTm9uZSkgYW5kIChub3QgcmV0cnkpOgogICAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgIlxuIi5qb2luKFt4WzBdIGZvciB4IGluIHByb2JzXSkKICAgICAgICAgICAgICBwcm9nLnN0b3AoKQogKyAgICAgICAgICAgIGlmIHJldHJ5IGFuZCBsZW4oY2hhbmdlc2V0KToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWwtcmVtb3ZlLWFsbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWwtcmVtb3ZlLWFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTIzZTdjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbC1yZW1vdmUtYWxsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNmQyMzYzYTcwNTY5N2Y2MTVkOWU1YWY1ZDY3MDNiMjkxZTYxOGI0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbmllbCBLbGF1ZXIgPGRhbmllbC5rbGF1ZXJAZ2luLmRlPgorRGF0ZTogVGh1LCAxMiBNYXkgMjAxNiAxNzo1NTowMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggY2hhbm5lbCBjb21tYW5kIC0tcmVtb3ZlLWFsbCBvcHRpb24gcGFyc2luZworCitPcHRpb24udGFrZV9hY3Rpb24oKSBzdG9yZXMgYSBsaXN0IG9mIG9wdGlvbnMgZ2l2ZW4gZm9yIHZhbGlkYXRpb24gbGF0ZXIuCitJdCBzdHJpcHMgbGVhZGluZyBkYXNoZXMgYW5kIHR1cm5zIHJlbWFpbmluZyBkYXNoZXMgaW50byB1bmRlcnNjb3Jlcy4KK1RoaXMgbGlzdCBpcyB3aGF0IGVuc3VyZV9hY3Rpb24oKSB3aWxsIGNvbXBhcmUgaXRzIGFyZ3VtZW50cyBhZ2FpbnN0LAordGh1cyB3ZSBtdXN0IHVzZSB1bmRlcnNjb3JlcyBoZXJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGFuaWVsIEtsYXVlciA8ZGFuaWVsLmtsYXVlckBnaW4uZGU+CistLS0KKyBzbWFydC9jb21tYW5kcy9jaGFubmVsLnB5IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvY29tbWFuZHMvY2hhbm5lbC5weSBiL3NtYXJ0L2NvbW1hbmRzL2NoYW5uZWwucHkKK2luZGV4IDEwOGYzZjEuLjYyMzRmNjkgMTAwNjQ0CistLS0gYS9zbWFydC9jb21tYW5kcy9jaGFubmVsLnB5CisrKysgYi9zbWFydC9jb21tYW5kcy9jaGFubmVsLnB5CitAQCAtMTY0LDcgKzE2NCw3IEBAIGRlZiBtYWluKGN0cmwsIG9wdHMpOgorICAgICBvcHRzLmNoZWNrX2FyZ3Nfb2Zfb3B0aW9uKCJlZGl0IiwgMCkKKyAgICAgb3B0cy5jaGVja19hcmdzX29mX29wdGlvbigiZW5hYmxlIiwgLTEpCisgICAgIG9wdHMuY2hlY2tfYXJnc19vZl9vcHRpb24oImRpc2FibGUiLCAtMSkKKy0gICAgb3B0cy5lbnN1cmVfYWN0aW9uKCJjaGFubmVsIiwgWyJhZGQiLCAic2V0IiwgInJlbW92ZSIsICJyZW1vdmUtYWxsIiwKKysgICAgb3B0cy5lbnN1cmVfYWN0aW9uKCJjaGFubmVsIiwgWyJhZGQiLCAic2V0IiwgInJlbW92ZSIsICJyZW1vdmVfYWxsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IiwgInNob3ciLCAieWFtbCIsICJlbmFibGUiLCAiZGlzYWJsZSJdKQorICAgICBvcHRzLmNoZWNrX3JlbWFpbmluZ19hcmdzKCkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyMjY1Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLUltcHJvdmUgZXJyb3IgcmVwb3J0aW5nIGluIHNtYXJ0Ci0KLUFkZCBjb2RlIHRvIGNoZWNrIHByb3BlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciB2YXJpb3VzCi1zbWFydCBjb21tYW5kcy4gRXhpdCB3aXRoIGVycm9yIGlmIGVycm9uZW91cy9hZGRpdGlvbmFsIGFyZ3VtZW50cwotYXJlIGdpdmVuIGluIHRoZSBjb21tYW5kIGxpbmUuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBCb2dkYW4gTWFyaW5lc2N1IDxib2dkYW4uYS5tYXJpbmVzY3VAaW50ZWwuY29tPgotCi1kaWZmIC0tZ2l0IGEvc21hcnQvdXRpbC9vcHRwYXJzZS5weSBiL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKLWluZGV4IDZmZmYxYmMuLmY0NDVhM2IgMTAwNjQ0Ci0tLS0gYS9zbWFydC91dGlsL29wdHBhcnNlLnB5Ci0rKysgYi9zbWFydC91dGlsL29wdHBhcnNlLnB5Ci1AQCAtNzAsNiArNzAsOCBAQCBpbXBvcnQgc3lzLCBvcwotIGltcG9ydCB0eXBlcwotIGltcG9ydCB0ZXh0d3JhcAotIGZyb20gZ2V0dGV4dCBpbXBvcnQgZ2V0dGV4dCBhcyBfCi0rZnJvbSBzbWFydCBpbXBvcnQgRXJyb3IKLStpbXBvcnQgcmUKLSAKLSBkZWYgX3JlcHIoc2VsZik6Ci0gICAgIHJldHVybiAiPCVzIGF0IDB4JXg6ICVzPiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGlkKHNlbGYpLCBzZWxmKQotQEAgLTcxMCw2ICs3MTIsMTIgQEAgY2xhc3MgT3B0aW9uOgotICAgICAgICAgICAgIHNlbGYuYWN0aW9uLCBzZWxmLmRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKQotIAotICAgICBkZWYgdGFrZV9hY3Rpb24oc2VsZiwgYWN0aW9uLCBkZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcik6Ci0rICAgICAgICAjIEtlZXAgYWxsIHRoZSBvcHRpb25zIGluIHRoZSBjb21tYW5kIGxpbmUgaW4gdGhlICdfZ2l2ZW5fb3B0cycgYXJyYXkKLSsgICAgICAgICMgVGhpcyB3aWxsIGJlIHVzZWQgbGF0ZXIgdG8gdmFsaWRhdGUgdGhlIGNvbW1hbmQgbGluZQotKyAgICAgICAgZ2l2ZW5fb3B0cyA9IGdldGF0dHIocGFyc2VyLnZhbHVlcywgIl9naXZlbl9vcHRzIiwgW10pCi0rICAgICAgICB1c2VyX29wdCA9IHJlLnN1YihyIl5cLSoiLCAiIiwgb3B0KS5yZXBsYWNlKCItIiwgIl8iKQotKyAgICAgICAgZ2l2ZW5fb3B0cy5hcHBlbmQodXNlcl9vcHQpCi0rICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsICJfZ2l2ZW5fb3B0cyIsIGdpdmVuX29wdHMpCi0gICAgICAgICBpZiBhY3Rpb24gPT0gInN0b3JlIjoKLSAgICAgICAgICAgICBzZXRhdHRyKHZhbHVlcywgZGVzdCwgdmFsdWUpCi0gICAgICAgICBlbGlmIGFjdGlvbiA9PSAic3RvcmVfY29uc3QiOgotQEAgLTgyMSw2ICs4MjksNTQgQEAgY2xhc3MgVmFsdWVzOgotICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgYXR0ciwgdmFsdWUpCi0gICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBhdHRyKQotIAotKyAgICAjIENoZWNrIGlmIHRoZSBnaXZlbiBvcHRpb24gaGFzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGFyZ3VtZW50cwotKyAgICAjIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvcHRpb24gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cwotKyAgICAjIEEgbmVnYXRpdmUgbnVtYmVyIGZvciAnbmFyZ3MnIG1lYW5zICJhdCBsZWFzdCB8bmFyZ3N8IGFyZ3VtZW50cyBhcmUgbmVlZGVkIgotKyAgICBkZWYgY2hlY2tfYXJnc19vZl9vcHRpb24oc2VsZiwgb3B0LCBuYXJncywgZXJyPU5vbmUpOgotKyAgICAgICAgZ2l2ZW5fb3B0cyA9IGdldGF0dHIoc2VsZiwgIl9naXZlbl9vcHRzIiwgW10pCi0rICAgICAgICBpZiBub3Qgb3B0IGluIGdpdmVuX29wdHM6Ci0rICAgICAgICAgICAgcmV0dXJuCi0rICAgICAgICB2YWx1ZXMgPSBnZXRhdHRyKHNlbGYsIG9wdCwgW10pCi0rICAgICAgICBpZiB0eXBlKHZhbHVlcykgIT0gdHlwZShbXSk6Ci0rICAgICAgICAgICAgcmV0dXJuCi0rICAgICAgICBpZiBuYXJncyA8IDA6Ci0rICAgICAgICAgICAgbmFyZ3MgPSAtbmFyZ3MKLSsgICAgICAgICAgICBpZiBsZW4odmFsdWVzKSA+PSBuYXJnczoKLSsgICAgICAgICAgICAgICAgcmV0dXJuCi0rICAgICAgICAgICAgaWYgbm90IGVycjoKLSsgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPT0gMToKLSsgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpICUgb3B0Ci0rICAgICAgICAgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyBhdCBsZWFzdCAlZCBhcmd1bWVudHMiKSAlIChvcHQsIG5hcmdzKQotKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBlcnIKLSsgICAgICAgIGVsaWYgbmFyZ3MgPT0gMDoKLSsgICAgICAgICAgICBpZiBsZW4oIHZhbHVlcyApID09IDA6Ci0rICAgICAgICAgICAgICAgIHJldHVybgotKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBlcnIKLSsgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPT0gbmFyZ3M6Ci0rICAgICAgICAgICAgICAgIHJldHVybgotKyAgICAgICAgICAgIGlmIG5vdCBlcnI6Ci0rICAgICAgICAgICAgICAgIGlmIG5hcmdzID09IDE6Ci0rICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyBvbmUgYXJndW1lbnQiKSAlIG9wdAotKyAgICAgICAgICAgICAgICBlbHNlOgotKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgJWQgYXJndW1lbnRzIikgJSAob3B0LCBuYXJncykKLSsgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCi0rCi0rICAgICMgQ2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIG9wdGlvbnMgaW4gJ2FjdGxpc3QnIHdhcyBnaXZlbiBhcyBhbiBhcmd1bWVudAotKyAgICAjIHRvIHRoZSBjb21tYW5kICdjbWRuYW1lJwotKyAgICBkZWYgZW5zdXJlX2FjdGlvbihzZWxmLCBjbWRuYW1lLCBhY3RsaXN0KToKLSsgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHNlbGYsICJfZ2l2ZW5fb3B0cyIsIFtdKQotKyAgICAgICAgZm9yIGFjdGlvbiBpbiBhY3RsaXN0OgotKyAgICAgICAgICAgIGlmIGFjdGlvbiBpbiBnaXZlbl9vcHRzOgotKyAgICAgICAgICAgICAgICByZXR1cm4KLSsgICAgICAgIHJhaXNlIEVycm9yLCBfKCJObyBhY3Rpb24gc3BlY2lmaWVkIGZvciBjb21tYW5kICclcyciKSAlIGNtZG5hbWUKLSsKLSsgICAgIyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFyZ3VtZW50cyBsZWZ0IGFmdGVyIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZSBhbmQKLSsgICAgIyByYWlzZSBhbiBlcnJvciBpZiBzdWNoIGFyZ3VtZW50cyBhcmUgZm91bmQKLSsgICAgZGVmIGNoZWNrX3JlbWFpbmluZ19hcmdzKHNlbGYpOgotKyAgICAgICAgaWYgc2VsZi5hcmdzOgotKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJJbnZhbGlkIGFyZ3VtZW50KHMpICclcyciICUgc3RyKHNlbGYuYXJncykpCi0gCi0gY2xhc3MgT3B0aW9uQ29udGFpbmVyOgotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtbG9jYWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWRmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorcnBtIG9yIGNvbW1hbmRzIHJ1biBieSBycG0gY2FuIHVzZSBvdXRwdXQgd2hpY2ggaXNuJ3Qgc3RyaWN0bHkgYWNzaWkgc3VjaAorYXMgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXJvdW5kIGV4cHJlc3Npb24gd2hpY2ggYXJlIGNoYXJhY3RlciAweGUyLgorCitVc2UgdXRmLTggYXMgYW4gZW5jb2RpbmcgcmF0aGVyIHRoYW4gd2hhdGV2ZXIgdGhlIHN5c3RlbSBzdWdnZXN0cyB0bworZW5zdXJlIHNtYXJ0IGNvcGVzIHdpdGggdGhpcyByYXRoZXIgdGhhbiBlcnJvcmluZyB3aXRoIHVuaWNvZGUgZXJyb3JzLgorCitSUCAyMDE2LzUvMTkKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK0luZGV4OiBnaXQvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgZ2l0L3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTMyLDExICszMiw3IEBAIGZyb20gc21hcnQucG0gaW1wb3J0IFBhY2thZ2VNYW5hZ2VyCisgZnJvbSBzbWFydCBpbXBvcnQgc3lzY29uZiwgaWZhY2UsIEVycm9yLCBfCisgCisgCistdHJ5OgorLSAgICBFTkNPRElORyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCistZXhjZXB0IGxvY2FsZS5FcnJvcjoKKy0gICAgRU5DT0RJTkcgPSAiYXNjaWkiCistCisrRU5DT0RJTkcgPSAidXRmLTgiCisgCisgZGVmIGdldF9wdWJsaWNfa2V5KGhlYWRlcik6CisgICAgIHJldHVybiBoZWFkZXIuc3ByaW50ZigiJXxEU0FIRUFERVI/eyV7RFNBSEVBREVSOnBncHNpZ319OiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJwbS10cmFuc2FjdGlvbi1mYWlsdXJlLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtLXRyYW5zYWN0aW9uLWZhaWx1cmUtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4YzNhZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJwbS10cmFuc2FjdGlvbi1mYWlsdXJlLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gMGM1NWQ3ZTE4ZjQwNDY1ZTk1ZThlNGJmMjJhZjAxZjVkNDQ3N2QzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbmllbCBLbGF1ZXIgPGRhbmllbC5rbGF1ZXJAZ2luLmRlPgorRGF0ZTogV2VkLCAxMSBNYXkgMjAxNiAxNzoyMjo0OSArMDIwMAorU3ViamVjdDogW1BBVENIXSBycG06IERvbid0IGlnbm9yZSB0cmFuc2FjdGlvbiBlcnJvciB3aXRoIGVtcHR5IHByb2JsZW1zIGxpc3QKKworU21hcnRQTSBjb3VsZCBtaXNpbnRlcnByZXQgUlBNIHRyYW5zYWN0aW9uIGVycm9yIGFzIHN1Y2Nlc3MsCitpZiB0cy5ydW4oKSAoUlBNIFB5dGhvbiBBUEkpIHJldHVybnMgYW4gZW1wdHkgcHJvYmxlbXMgbGlzdCwKK2JlY2F1c2Ugb2YgaW5jb3JyZWN0IGNoZWNrIGZvciBOb25lIHdoaWNoIHRyZWF0ZWQgZW1wdHkgbGlzdAordG8gYmUgdGhlIHNhbWUgYXMgTm9uZSB3aGVuIGl0IGhhcyBkaWZmZXJlbnQgbWVhbmluZy4KKwordHMucnVuKCkgcmV0dXJuczoKKyogTm9uZSBpbiBjYXNlIG9mIHN1Y2Nlc3MKKyogcHJvYmxlbXMgbGlzdCBpbiBjYXNlIG9mIGVycm9yLCBtYXkgYmUgZW1wdHkKKyhsb29rIGF0IHJwbXRzX1J1bigpIGluIHJwbS01LjQuMTQvcHl0aG9uL3JwbXRzLXB5LmMgWzFdKQorCisiaWYgbXlsaXN0IiBpcyBub3QgZ29vZCBlbm91Z2ggdG8gY2hlY2sgZm9yIGVycm9yIGhlcmUsIGJlY2F1c2UgaXQgd2lsbAordHJlYXQgYW4gZW1wdHkgbGlzdCBhcyAiZmFsc2UiIGJlY2F1c2UgaXRzIGxlbigpID09IDAgWzJdLgorCit0cy5jaGVjaygpIHNlZW1zIHRvIGJlIGRpZmZlcmVudCAoaXQncyBvayBmb3IgaXQgdG8gcmV0dXJuIGFuIGVtcHR5IGxpc3QpLAorYnV0IGZvciBjb25zaXN0ZW5jeSBpdCBzaG91bGQgYmUgbWFkZSBjbGVhciB0aGF0IGl0IGNhbiByZXR1cm4gZWl0aGVyIE5vbmUsCithbiBlbXB0eSBsaXN0IG9yIGEgbm9uLWVtcHR5IGxpc3QuCisKK1sxXSBodHRwOi8vcnBtNS5vcmcvY3ZzL2ZpbGV2aWV3P2Y9cnBtL3B5dGhvbi9ycG10cy1weS5jJnY9MS4xMTEuMi4zCitbMl0gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHJ1dGgtdmFsdWUtdGVzdGluZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGFuaWVsIEtsYXVlciA8ZGFuaWVsLmtsYXVlckBnaW4uZGU+CistLS0KKyBzbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitpbmRleCA5YmJkOTUyLi42MzVmNzI2IDEwMDY0NAorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0yMDgsNyArMjA4LDcgQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgZm9yY2UgPSBzeXNjb25mLmdldCgicnBtLWZvcmNlIiwgRmFsc2UpCisgICAgICAgICBpZiBub3QgZm9yY2U6CisgICAgICAgICAgICAgcHJvYnMgPSB0cy5jaGVjaygpCistICAgICAgICAgICAgaWYgcHJvYnM6CisrICAgICAgICAgICAgaWYgKHByb2JzIGlzIG5vdCBOb25lKSBhbmQgKGxlbihwcm9icykgIT0gMCk6CisgICAgICAgICAgICAgICAgIHByb2JsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgIGZvciBwcm9iIGluIHByb2JzOgorICAgICAgICAgICAgICAgICAgICAgbmFtZTEgPSAiJXMtJXMtJXMiICUgcHJvYlswXQorQEAgLTI0Nyw3ICsyNDcsNyBAQCBjbGFzcyBSUE1QYWNrYWdlTWFuYWdlcihQYWNrYWdlTWFuYWdlcik6CisgICAgICAgICAgICAgZGVsIGdldFRTLnRzCisgICAgICAgICAgICAgY2IuZ3JhYk91dHB1dChGYWxzZSkKKyAgICAgICAgICAgICBwcm9nLnNldERvbmUoKQorLSAgICAgICAgICAgIGlmIHByb2JzOgorKyAgICAgICAgICAgIGlmIHByb2JzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgIlxuIi5qb2luKFt4WzBdIGZvciB4IGluIHByb2JzXSkKKyAgICAgICAgICAgICBwcm9nLnN0b3AoKQorCistLQorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWZiMjlhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0cG0tcnBtNS1ub2RpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLVJQTTUgaGFzIHJlbW92ZWQgc3VwcG9ydCBmb3IgUlBNVlNGX05PU0lHTkFUVVJFUwotCi1QYXRjaCBzbWFydCB0byBubyBsb25nZXIgdXNlIHRoaXMgZmxhZwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgotCi1kaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQotLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKLSsrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5Ci1AQCAtNjMsMTEgKzYzLDExIEBAIGRlZiBnZXRUUyhuZXc9RmFsc2UpOgotICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKToKLSAgICAgICAgICAgICBycG0uYWRkTWFjcm8oJ19kYnBhdGgnLCAiLyIgKyBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpKQotICAgICAgICAgZ2V0VFMudHMgPSBycG0udHMoZ2V0VFMucm9vdCkKLS0gICAgICAgIGlmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6Ci0tICAgICAgICAgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgotLSAgICAgICAgICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKLS0gICAgICAgICAgICBlbHNlOgotLSAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQotKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6Ci0rICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKLSsgICAgICAgICMgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQotKyAgICAgICAgIyAgICBlbHNlOgotKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKLSAgICAgICAgIHJwbV9kYnBhdGggPSBzeXNjb25mLmdldCgicnBtLWRicGF0aCIsICJ2YXIvbGliL3JwbSIpCi0gICAgICAgICBkYmRpciA9IHJwbV9qb2luX2RicGF0aChnZXRUUy5yb290LCBycG1fZGJwYXRoKQotICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGJkaXIpOgotQEAgLTg5LDExICs4OSwxMSBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKLSAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6Ci0gICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKLSAgICAgICAgIHRzID0gcnBtLnRzKGdldFRTLnJvb3QpCi0tICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgotLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKLS0gICAgICAgICAgICAgICAgdHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCi0tICAgICAgICAgICAgZWxzZToKLS0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKLSsgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgotKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6Ci0rICAgICAgICAjICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKLSsgICAgICAgICMgICAgZWxzZToKLSsgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCi0gICAgICAgICByZXR1cm4gdHMKLSAgICAgZWxzZToKLSAgICAgICAgIHJldHVybiBnZXRUUy50cwotZGlmZiAtLWdpdCBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5Ci0tLS0gYS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5Ci0rKysgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5Ci1AQCAtNTYsOCArNTYsOCBAQCBkZWYgX2dldHJlbGVhc2V2ZXIoKToKLSAKLSAgICAgcnBtcm9vdCA9IHN5c2NvbmYuZ2V0KCJycG0tcm9vdCIsICIvIikKLSAgICAgdHMgPSBycG1VdGlscy50cmFuc2FjdGlvbi5pbml0UmVhZE9ubHlUcmFuc2FjdGlvbihyb290PXJwbXJvb3QpCi0tICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgotLSAgICAgICAgdHMucHVzaFZTRmxhZ3MofihycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLl9SUE1WU0ZfTk9ESUdFU1RTKSkKLSsgICAgI2lmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgotKyAgICAjICAgIHRzLnB1c2hWU0ZsYWdzKH4ocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5fUlBNVlNGX05PRElHRVNUUykpCi0gICAgIHJlbGVhc2V2ZXIgPSBOb25lCi0gICAgICMgSEFDSzogd2UncmUgaGFyZC1jb2RpbmcgdGhlIG1vc3QgdXNlZCBkaXN0cm9zLCB3aWxsIGFkZCBtb3JlIGlmIG5lZWRlZAotICAgICBpZHggPSB0cy5kYk1hdGNoKCdwcm92aWRlcycsICdmZWRvcmEtcmVsZWFzZScpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtc3VwcG9ydC1jaGVjay1zaWduYXR1cmVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LXN1cHBvcnQtY2hlY2stc2lnbmF0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY3YTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LXN1cHBvcnQtY2hlY2stc2lnbmF0dXJlcy5wYXRjaApAQCAtMCwwICsxLDExMiBAQAorRnJvbSA1Yjc5ZTI4YmQ3MGEwZWM1YjM0YzVmZjE5YjY2Y2JiZGQxZTQ4ODM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSGFpcWluZyBCYWkgPEhhaXFpbmcuQmFpQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE4IE1hciAyMDE2IDEzOjM0OjA3ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2Ugc21hcnRwbSB0byBzdXBwb3J0IGNoZWNrIHNpZ25hdHVyZXMgb2YgcnBtdjUuCisKK1RoZSBvcmlnaW5hbCBzdXBwb3J0IGZvciAncnBtLWNoZWNrLXNpZ25hdHVyZXMnIGhhcyBiZWVuCitkaXNhYmxlZCBmb3IgdGhlIFJQTXY1IGRvZXMgbm90IHN1cHBvcnQgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJworbm93LiBUaGlzIGZpeCByZXBsYWNlcyB0aGUgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyB3aXRoCitycG0gVlMgZmxhZ3Mgc2V0OlJQTVZTRl9OT0RTQUhFQURFUnxSUE1WU0ZfTk9SU0FIRUFERVJ8CitSUE1WU0ZfTk9EU0F8UlBNVlNGX05PUlNBLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEhhaXFpbmcgQmFpIDxIYWlxaW5nLkJhaUB3aW5kcml2ZXIuY29tPgorLS0tCisgc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkgICAgICB8IDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5ICAgICAgICB8ICAyICstCisgc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weSB8ICA1ICsrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK2luZGV4IDg1ZjRkNDkuLmRiZDYxNjUgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC02MywxMSArNjMsMjMgQEAgZGVmIGdldFRTKG5ldz1GYWxzZSk6CisgICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpOgorICAgICAgICAgICAgIHJwbS5hZGRNYWNybygnX2RicGF0aCcsICIvIiArIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIikpCisgICAgICAgICBnZXRUUy50cyA9IHJwbS50cyhnZXRUUy5yb290KQorLSAgICAgICAgaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKy0gICAgICAgICAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CistICAgICAgICAgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisrCisrICAgICAgICAjIF9SUE1WU0ZfTk9TSUdOQVRVUkVTIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUlBNdjUsIHNvIGhlcmUgdXNlcworKyAgICAgICAgIyBSUE1WU0ZfTk9EU0FIRUFERVJ8UlBNVlNGX05PUlNBSEVBREVSfFJQTVZTRl9OT0RTQXxSUE1WU0ZfTk9SU0EKKysgICAgICAgICMgdG8gcmVwbGFjZSAnX1JQTVZTRl9OT1NJR05BVFVSRVMnIHRvIGNvbnRpbnVlIHRvIHN1cHBvcnQgY2hlY2sKKysgICAgICAgICMgcnBtIHNpZ25hdHVyZXMKKysKKysgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CisrICAgICAgICAjICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKysgICAgICAgICMgICAgZWxzZToKKysgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisrICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiKSA9PSBGYWxzZToKKysgICAgICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5SUE1WU0ZfTk9EU0FIRUFERVJ8cnBtLlJQTVZTRl9OT1JTQUhFQURFUnxcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycG0uUlBNVlNGX05PRFNBfHJwbS5SUE1WU0ZfTk9SU0EpCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MoMCkKKysKKyAgICAgICAgIHJwbV9kYnBhdGggPSBzeXNjb25mLmdldCgicnBtLWRicGF0aCIsICJ2YXIvbGliL3JwbSIpCisgICAgICAgICBkYmRpciA9IHJwbV9qb2luX2RicGF0aChnZXRUUy5yb290LCBycG1fZGJwYXRoKQorICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGJkaXIpOgorQEAgLTg5LDExICsxMDEsMjIgQEAgZGVmIGdldFRTKG5ldz1GYWxzZSk6CisgICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpOgorICAgICAgICAgICAgIHJwbS5hZGRNYWNybygnX2RicGF0aCcsICIvIiArIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIikpCisgICAgICAgICB0cyA9IHJwbS50cyhnZXRUUy5yb290KQorLSAgICAgICAgaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKy0gICAgICAgICAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CistICAgICAgICAgICAgICAgIHRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisrCisrICAgICAgICAjIF9SUE1WU0ZfTk9TSUdOQVRVUkVTIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUlBNdjUsIHNvIGhlcmUgdXNlcworKyAgICAgICAgIyBSUE1WU0ZfTk9EU0FIRUFERVJ8UlBNVlNGX05PUlNBSEVBREVSfFJQTVZTRl9OT0RTQXxSUE1WU0ZfTk9SU0EKKysgICAgICAgICMgdG8gcmVwbGFjZSAnX1JQTVZTRl9OT1NJR05BVFVSRVMnIHRvIGNvbnRpbnVlIHRvIHN1cHBvcnQgY2hlY2sKKysgICAgICAgICMgcnBtIHNpZ25hdHVyZXMKKysKKysgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CisrICAgICAgICAjICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKysgICAgICAgICMgICAgZWxzZToKKysgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisrICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiKSA9PSBGYWxzZToKKysgICAgICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5SUE1WU0ZfTk9EU0FIRUFERVJ8cnBtLlJQTVZTRl9OT1JTQUhFQURFUnxcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycG0uUlBNVlNGX05PRFNBfHJwbS5SUE1WU0ZfTk9SU0EpCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHRzLnNldFZTRmxhZ3MoMCkKKyAgICAgICAgIHJldHVybiB0cworICAgICBlbHNlOgorICAgICAgICAgcmV0dXJuIGdldFRTLnRzCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitpbmRleCBiNTdhODQ0Li43YjY1MWI1IDEwMDY0NAorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0xODAsNyArMTgwLDcgQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocGF0aCwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIGggPSB0cy5oZHJGcm9tRmRubyhmZCkKKy0gICAgICAgICAgICAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKysgICAgICAgICAgICAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBnZXRfcHVibGljX2tleShoKSA9PSAnKG5vbmUpJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHJwbS5lcnJvcigncGFja2FnZSBpcyBub3Qgc2lnbmVkJykKKyAgICAgICAgICAgICAgICAgZXhjZXB0IHJwbS5lcnJvciwgZToKK2RpZmYgLS1naXQgYS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5IGIvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQoraW5kZXggZjgxMDdlNi4uMmRjNTQ4MiAxMDA2NDQKKy0tLSBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKKysrKyBiL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKK0BAIC01Niw4ICs1Niw5IEBAIGRlZiBfZ2V0cmVsZWFzZXZlcigpOgorIAorICAgICBycG1yb290ID0gc3lzY29uZi5nZXQoInJwbS1yb290IiwgIi8iKQorICAgICB0cyA9IHJwbVV0aWxzLnRyYW5zYWN0aW9uLmluaXRSZWFkT25seVRyYW5zYWN0aW9uKHJvb3Q9cnBtcm9vdCkKKy0gICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpIGFuZCBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9ESUdFU1RTJyk6CistICAgICAgICB0cy5wdXNoVlNGbGFncyh+KHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uX1JQTVZTRl9OT0RJR0VTVFMpKQorKyAgICAjX1JQTVZTRl9OT1NJR05BVFVSRVMgaXMgbm90IHN1cHBvcnRlZCBpbiBSUE12NQorKyAgICAjaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpIGFuZCBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9ESUdFU1RTJyk6CisrICAgICMgICAgdHMucHVzaFZTRmxhZ3MofihycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLl9SUE1WU0ZfTk9ESUdFU1RTKSkKKyAgICAgcmVsZWFzZXZlciA9IE5vbmUKKyAgICAgIyBIQUNLOiB3ZSdyZSBoYXJkLWNvZGluZyB0aGUgbW9zdCB1c2VkIGRpc3Ryb3MsIHdpbGwgYWRkIG1vcmUgaWYgbmVlZGVkCisgICAgIGlkeCA9IHRzLmRiTWF0Y2goJ3Byb3ZpZGVzJywgJ2ZlZG9yYS1yZWxlYXNlJykKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiCmluZGV4IGQ5YTkwOGQuLjg2MTkxMGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIKQEAgLTEzLDE2ICsxMywyMCBAQAogCiBTUkNfVVJJID0gIlwKICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL3NtYXJ0cG0vc21hcnQuZ2l0IFwKLSAgICAgICAgICBmaWxlOi8vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoIFwKICAgICAgICAgICBmaWxlOi8vc21hcnQtcmVjb21tZW5kcy5wYXRjaCBcCi0gICAgICAgICAgZmlsZTovL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoIFwKICAgICAgICAgICBmaWxlOi8vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1ycG0tdHJhbnNhY3Rpb24tZmFpbHVyZS1jaGVjay5wYXRjaCBcCiAgICAgICAgICAgZmlsZTovL3NtYXJ0LWF0dGVtcHQucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaCBcCiAgICAgICAgICAgZmlsZTovL3NtYXJ0LWFkZC1mb3ItcnBtLWlnbm9yZXNpemUtY2hlY2sucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly9zbWFydC1hbHJlYWR5LWluc3RhbGxlZC1tZXNzYWdlLnBhdGNoIFwKICAgICAgICAgICBmaWxlOi8vc21hcnQtc2V0LW5vcHJvZ3Jlc3MtZm9yLXB5Y3VybC5wYXRjaCBcCiAgICAgICAgICAgZmlsZTovL3NtYXJ0LWNhY2hlLnB5LWdldFBhY2thZ2VzLW1hdGNoZXMtbmFtZS12ZXJzaW9uLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtY2hhbm5lbC1yZW1vdmUtYWxsLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtbG9jYWxlLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnRwbS1ycG01LXN1cHBvcnQtY2hlY2stc2lnbmF0dXJlcy5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWFkZC1kZXVnZ2luZy13aGVuLXRhcmdldHBhdGgtaXMtZW1wdHkucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9jaGFubmVscy1ycG1fc3lzLXVzZS1tZDVzdW0taW5zdGVhZC1vZi1tdGltZS1hcy10aGUtLnBhdGNoIFwKICAgICAgICAgICIKIAogU1JDUkVWID0gIjQwN2E3ZWNhNzY2NDMxMjU3ZGNkMWRhMTUxNzVjYzM2YTFiYjIyZDAiCkBAIC01Myw0MSArNTcsNDEgQEAKIAogZG9faW5zdGFsbF9hcHBlbmQoKSB7CiAgICAjIFdlIGRvbid0IHN1cHBvcnQgdGhlIGZvbGxvd2luZyBpdGVtcwotICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3NsYWNrCi0gICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvYXJjaAotICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvcXQKKyAgIHJtIC1yZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvYmFja2VuZHMvc2xhY2sKKyAgIHJtIC1yZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvYmFja2VuZHMvYXJjaAorICAgcm0gLXJmICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9pbnRlcmZhY2VzL3F0CiAKICAgICMgVGVtcG9yYXJ5LCBkZWJpYW4gc3VwcG9ydCBpbiBPRSBpcyBtaXNzaW5nIHRoZSBweXRob24gbW9kdWxlCi0gICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2FwdGNoYW5uZWxzeW5jLnB5KgotICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9kZWJkaXIucHkqCi0gICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvZGViCisgICBybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvcGx1Z2lucy9hcHRjaGFubmVsc3luYy5weSoKKyAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9wbHVnaW5zL2RlYmRpci5weSoKKyAgIHJtIC1yZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvYmFja2VuZHMvZGViCiAKICAgICMgRGlzYWJsZSBhdXRvbWF0aWMgY2hhbm5lbCBkZXRlY3Rpb24KLSAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvZGV0ZWN0c3lzLnB5KgorICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L3BsdWdpbnMvZGV0ZWN0c3lzLnB5KgogCiAgICAjIERpc2FibGUgbGFuZHNjYXBlIHN1cHBvcnQKLSAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvbGFuZHNjYXBlLnB5KgorICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L3BsdWdpbnMvbGFuZHNjYXBlLnB5KgogCiAgICAjIERpc2FibGUgdXJwbWkgY2hhbm5lbCBzdXBwb3J0Ci0gICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3VycG1pY2hhbm5lbHN5bmMucHkqCisgICBybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvcGx1Z2lucy91cnBtaWNoYW5uZWxzeW5jLnB5KgogCiAgICAjIERpc2FibGUgeXVtIGNoYW5uZWwgc3VwcG9ydAotICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weSoKKyAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5KgogCiAgICAjIERpc2FibGUgenlwcGVyIGNoYW5uZWwgc3VwcG9ydAotICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy96eXBwY2hhbm5lbHN5bmMucHkqCisgICBybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvcGx1Z2lucy96eXBwY2hhbm5lbHN5bmMucHkqCiAKICAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JwbScsICdycG0nLCAnJywgZCl9IiBdOyB0aGVuCi0gICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3JwbWRpci5weSoKLSAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0KKyAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9wbHVnaW5zL3JwbWRpci5weSoKKyAgICAgIHJtIC1yZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvYmFja2VuZHMvcnBtCiAgICBmaQogCiAgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdxdDQnLCAncXQ0JywgJycsIGQpfSIgXTsgdGhlbgotICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvcXQ0CisgICAgICBybSAtcmYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L2ludGVyZmFjZXMvcXQ0CiAgICBmaQogCiAgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdndGsrJywgJ2d0aycsICcnLCBkKX0iIF07IHRoZW4KLSAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL2d0aworICAgICAgcm0gLXJmICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9pbnRlcmZhY2VzL2d0awogICAgZmkKIH0KIApAQCAtMTI3LDEwICsxMzEsMTAgQEAKIAogRklMRVNfc21hcnRwbSA9ICIke2JpbmRpcn0vc21hcnQiCiAKLUZJTEVTXyR7UE59LWJhY2tlbmQtcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvcnBtIgorRklMRVNfJHtQTn0tYmFja2VuZC1ycG0gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvYmFja2VuZHMvcnBtIgogCi1GSUxFU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQiCi1GSUxFU18ke1BOfS1pbnRlcmZhY2UtZ3RrID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9ndGsiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L2ludGVyZmFjZXMvcXQ0IgorRklMRVNfJHtQTn0taW50ZXJmYWNlLWd0ayA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9pbnRlcmZhY2VzL2d0ayIKIEZJTEVTXyR7UE59LWludGVyZmFjZS1pbWFnZXMgPSAiJHtkYXRhZGlyfS8ke2Jhc2VsaWJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL2ltYWdlcyIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3ZTZiNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcC5pbmMKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJQeXRob24gaW1wbGVtZW50YXRpb24gb2YgYSBzbGlkaW5nIHdpbmRvdyBtZW1vcnkgbWFwIG1hbmFnZXIiCitERVNDUklQVElPTiA9ICJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyBtZW1vcnkgbWFwIHRvIFwKK2hlbHAgdW5pZnlpbmcgbWVtb3J5IG1hcHBlZCBhY2Nlc3Mgb24gMzIgYW5kIDY0IGJpdCBzeXN0ZW1zIGFuZCB0byBoZWxwIFwKK21hbmFnaW5nIHJlc291cmNlcyBtb3JlIGVmZmljaWVudGx5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PWU5MTBiMzViMGVmNGUxZjY2NWI5YTc1ZDZhZmI3NzA5IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy9zbW1hcC9zbW1hcC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiZDc5MzJkNWFjZTIwNmJmNGFlMTUxOThjZjM2ZmI2YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUyYjYyYjQ5N2JkNWYwYWZlYmMwMDJlZGE0ZDkwZGY5ZDIwOWMzMGVmMjU3ZTg2NzNjOTBhNmI1YzExOWQ2MiIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc21tYXAvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL3NtbWFwLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKSIKKworUyA9ICIke1dPUktESVJ9L3NtbWFwLSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYgppbmRleCA1ZjljZjQ1Li5jMTE4ZGQ4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiCkBAIC0xLDIzICsxLDUgQEAKLVNVTU1BUlkgPSAiUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyB3aW5kb3cgbWVtb3J5IG1hcCBtYW5hZ2VyIgotREVTQ1JJUFRJT04gPSAiQSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHNsaWRpbmcgbWVtb3J5IG1hcCB0byBcCi1oZWxwIHVuaWZ5aW5nIG1lbW9yeSBtYXBwZWQgYWNjZXNzIG9uIDMyIGFuZCA2NCBiaXQgc3lzdGVtcyBhbmQgdG8gaGVscCBcCi1tYW5hZ2luZyByZXNvdXJjZXMgbW9yZSBlZmZpY2llbnRseS4iCi1IT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9HaXRQeXRob24iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUEtHLUlORk87YmVnaW5saW5lPTg7ZW5kbGluZT04O21kNT1lOTEwYjM1YjBlZjRlMWY2NjViOWE3NWQ2YWZiNzcwOSIKLQotU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NtbWFwL3NtbWFwLSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJkNzkzMmQ1YWNlMjA2YmY0YWUxNTE5OGNmMzZmYjZhYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwZTJiNjJiNDk3YmQ1ZjBhZmViYzAwMmVkYTRkOTBkZjlkMjA5YzMwZWYyNTdlODY3M2M5MGE2YjVjMTE5ZDYyIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zbW1hcC8iCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvc21tYXAvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspIgotCi1TID0gIiR7V09SS0RJUn0vc21tYXAtJHtQVn0iCityZXF1aXJlIHB5dGhvbi1zbW1hcC5pbmMKIAogaW5oZXJpdCBzZXR1cHRvb2xzCiAKIFJERVBFTkRTXyR7UE59ICs9ICJweXRob24tY29kZWNzIHB5dGhvbi1tbWFwIHB5dGhvbi1sYW5nIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCmluZGV4IGY0ODE4YzYuLjc5YTQzMWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwpAQCAtNSwxMiArNSwxMiBAQAogIyBidW1wIHRoaXMgb24gZXZlcnkgY2hhbmdlIGluIGNvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQogSU5DX1BSID0gInIxIgogCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZDk4ZDAxZDQ3MWZhYzhkOGRiZGQ5NzUyMjlkYmEwMyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTZiNjAyNTgxMzBlNGVkMTBkMzEwMTUxN2ViNWI5Mzg1IgogCiBTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHoiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICIxZGJjYzg0OGI0Y2Q4Mzk5YTgxOTlkMDAwZjlmODIzYyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5NjJiNGM0NWFmNTAxMjRlYTYxZjExYTMwZGViNDM0MmZjMGJjMjExMjY3OTBmYTFkN2Y2Yzc5ODA5NDEzZjQ2IgorU1JDX1VSSVttZDVzdW1dID0gIjU3ZGZmY2VlOWNlZThiYjJhYjVmODJhZjFkOGU5YTY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ3ODM3MTIxZGQ1NjUyYTA1ZmVmODA3YzM2MTkwOWQyNTVkMTczMjgwYzRlMWE0ZGVkOTRkNzNkODBhMWY5NzgiCiAKICMgcHl0aG9uIHJlY2lwZSBpcyBhY3R1YWxseSBweXRob24gMi54CiAjIGFsc28sIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAwMDEtZGlzdHV0aWxzLXNldC10aGUtcHJlZml4LXRvLWJlLWluc2lkZS1zdGFnaW5nLWRpcmVjdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMDAxLWRpc3R1dGlscy1zZXQtdGhlLXByZWZpeC10by1iZS1pbnNpZGUtc3RhZ2luZy1kaXJlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyZjg0OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMDAxLWRpc3R1dGlscy1zZXQtdGhlLXByZWZpeC10by1iZS1pbnNpZGUtc3RhZ2luZy1kaXJlY3QucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSA0Y2RmMmU5ZGYxM2M2MzI3ZmNjOTRkNTNlNDk1MzAwNTU0M2FlZjNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDYgQXByIDIwMTYgMTc6NDM6MDIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8xMF0gZGlzdHV0aWxzOiBzZXQgdGhlIHByZWZpeCB0byBiZSBpbnNpZGUgc3RhZ2luZworIGRpcmVjdG9yeQorCitUaGUgcHJvcGVyIHByZWZpeCBpcyBpbnNpZGUgb3VyIHN0YWdpbmcgYXJlYS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgfCAxMCArKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK2luZGV4IGRlN2RhMWQuLmYzYWFjZjcgMTAwNjQ0CistLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC03NSw3ICs3NSw3IEBAIGRlZiBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTAsIHByZWZpeD1Ob25lKToKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorICAgICBpZiBwcmVmaXggaXMgTm9uZToKKy0gICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXS5yc3RyaXAoJ2luY2x1ZGUnKQorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBpZiBweXRob25fYnVpbGQ6CitAQCAtMTE1LDEyICsxMTUsMTYgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTAsIHByZWZpeD1Ob25lKToKKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5wcmVmaXggb3IKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorKyAgICBsaWJfYmFzZW5hbWUgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnNwbGl0KCcvJylbLTFdCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisrICAgICAgICBpZiBwbGF0X3NwZWNpZmljOgorKyAgICAgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10ucnN0cmlwKGxpYl9iYXNlbmFtZSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgcHJlZml4ID0gUFJFRklYCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Jhc2VuYW1lLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CistLSAKKzIuOC4wLnJjMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2gKaW5kZXggMTI1N2NhNi4uYjJhOGMzYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaApAQCAtNywxMyArNywxMyBAQAogU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CiAKIFJlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQotU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KIAotSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0luZGV4OiBQeXRob24tMi43LjEyL01ha2VmaWxlLnByZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgotKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KLUBAIC0yMzQsNiArMjM0LDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy4xMi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0yNDYsNiArMjQ2LDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICMgUGFyc2VyCiAgUEdFTj0JCVBhcnNlci9wZ2VuJChFWEUpCkBAIC0yMSw3ICsyMSw3IEBACiAgCiAgUFNSQ1M9CQlcCiAgCQlQYXJzZXIvYWNjZWxlci5jIFwKLUBAIC00NDUsNyArNDQ2LDcgQEAgJChCVUlMRFBZVEhPTik6CU1vZHVsZXMvcHl0aG9uLm8gJChMSUJSQQorQEAgLTUxMyw3ICs1MTQsNyBAQCAkKEJVSUxEUFlUSE9OKToJTW9kdWxlcy9weXRob24ubyAkKExJQlJBCiAgCQkJJChCTERMSUJSQVJZKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKICAKICBwbGF0Zm9ybTogJChCVUlMRFBZVEhPTikgcHlidWlsZGRpci50eHQKQEAgLTMwLDE2ICszMCwxNiBAQAogIAogICMgQ3JlYXRlIGJ1aWxkIGRpcmVjdG9yeSBhbmQgZ2VuZXJhdGUgdGhlIHN5c2NvbmZpZyBidWlsZC10aW1lIGRhdGEgdGhlcmUuCiAgIyBweWJ1aWxkZGlyLnR4dCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYnVpbGQgZGlyIGFuZCBpcyB1c2VkIGZvcgotQEAgLTYxMSw3ICs2MTIsNyBAQCBNb2R1bGVzL3B3ZG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wCi0gJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCi0gCQlAJChNS0RJUl9QKSBJbmNsdWRlCi0gCQkkKE1BS0UpICQoUEdFTikKLS0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCi0rCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKLSAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCi0gCQkkKE1BS0UpICQoR1JBTU1BUl9IKQotIAkJdG91Y2ggJChHUkFNTUFSX0MpCi1AQCAtMTA0MywyNyArMTA0NCwyNyBAQCBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMCitAQCAtNjg0LDcgKzY4NSw3IEBAICQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU4pCisgCUAkKE1LRElSX1ApIEluY2x1ZGUKKyAJIyBBdm9pZCBjb3B5aW5nIHRoZSBmaWxlIG9udG8gaXRzZWxmIGZvciBhbiBpbi10cmVlIGJ1aWxkCisgCWlmIHRlc3QgIiQoY3Jvc3NfY29tcGlsaW5nKSIgIT0gInllcyI7IHRoZW4gXAorLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQyk7IFwKKysJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKTsgXAorIAllbHNlIFwKKyAJCWNwICQoc3JjZGlyKS9JbmNsdWRlL2dyYW1pbml0LmggJChHUkFNTUFSX0gpLnRtcDsgXAorIAkJbXYgJChHUkFNTUFSX0gpLnRtcCAkKEdSQU1NQVJfSCk7IFwKK0BAIC0xMTMzLDI3ICsxMTM0LDI3IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKICAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCiAgCWZpCiAgCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCkBAIC03MywxMSArNzMsMTEgQEAKICAKICAjIENyZWF0ZSB0aGUgUExBVERJUiBzb3VyY2UgZGlyZWN0b3J5LCBpZiBvbmUgd2Fzbid0IGRpc3RyaWJ1dGVkLi4KICAkKHNyY2RpcikvTGliLyQoUExBVERJUik6Ci1JbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9zZXR1cC5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL3NldHVwLnB5Ci0rKysgUHl0aG9uLTIuNy45L3NldHVwLnB5Ci1AQCAtMzM0LDYgKzMzNCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43LjEyL3NldHVwLnB5CitAQCAtMzUwLDYgKzM1MCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKICAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCiAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKioqIFdBUk5JTkc6IHJlbmFtaW5nICIlcyIgc2luY2UgaW1wb3J0aW5nIGl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICVzJyAlIChleHQubmFtZSwgd2h5KSwgbGV2ZWw9MykKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuaW5wbGFjZQogICAgICAgICAgICAgIGJhc2VuYW1lLCB0YWlsID0gb3MucGF0aC5zcGxpdGV4dChleHRfZmlsZW5hbWUpCiAgICAgICAgICAgICAgbmV3bmFtZSA9IGJhc2VuYW1lICsgIl9mYWlsZWQiICsgdGFpbAotQEAgLTU1OCw2ICs1NTksOSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CitAQCAtNTc0LDYgKzU3NSw5IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKICAKICAgICAgICAgICMgWFhYIE9taXR0ZWQgbW9kdWxlczogZ2wsIHB1cmUsIGRsLCBTR0ktc3BlY2lmaWMgbW9kdWxlcwogIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaAppbmRleCBlNDUyY2I2Li40MzViMzE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaApAQCAtMTEsNyArMTEsNyBAQAogCiAyMDExLzA5LzI5CiBSZWJhc2VkIGZvciBweXRob24gMi43LjIKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogCiBTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL0NWRS0yMDE2LTU2MzYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vQ1ZFLTIwMTYtNTYzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTM3NDcxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL0NWRS0yMDE2LTU2MzYucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEJlbmphbWluIFBldGVyc29uIDxiZW5qYW1pbkBweXRob24ub3JnPgorIyBEYXRlIDE0NTMzNTc0MjQgMjg4MDAKKyMgTm9kZSBJRCA5ODVmYzY0YzYwZDZhZGZmZDExMzhiNmNjNDZkZjM4OGNhOTFjYTVkCisjIFBhcmVudCAgN2VjOTU0YjlmYzU0NDQ4YTM1YjU2ZDI3MTM0MGJhMTA5ZWIzODFiOQorcHJldmVudCBidWZmZXIgb3ZlcmZsb3cgaW4gZ2V0X2RhdGEgKGNsb3NlcyAjMjYxNzEpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK2h0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL3Jldi85ODVmYzY0YzYwZDYKKworQ1ZFOiBDVkUtMjAxNi01NjM2CitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuMTEvTWlzYy9ORVdTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4xMS5vcmlnL01pc2MvTkVXUworKysrIFB5dGhvbi0yLjcuMTEvTWlzYy9ORVdTCitAQCAtNyw2ICs3LDkgQEAgV2hhdCdzIE5ldyBpbiBQeXRob24gMi43LjExPworIAorICpSZWxlYXNlIGRhdGU6IDIwMTUtMTItMDUqCisgCisrLSBJc3N1ZSAjMjYxNzE6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IGFuZCBoZWFwIGNvcnJ1cHRpb24gaW4KKysgIHppcGltcG9ydGVyLmdldF9kYXRhKCkuCisrCisgTGlicmFyeQorIC0tLS0tLS0KKyAKK0luZGV4OiBQeXRob24tMi43LjExL01vZHVsZXMvemlwaW1wb3J0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjExLm9yaWcvTW9kdWxlcy96aXBpbXBvcnQuYworKysrIFB5dGhvbi0yLjcuMTEvTW9kdWxlcy96aXBpbXBvcnQuYworQEAgLTg5NSw2ICs4OTUsMTEgQEAgZ2V0X2RhdGEoY2hhciAqYXJjaGl2ZSwgUHlPYmplY3QgKnRvY19lbgorICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsgICAgICAgIC8qIGxvY2FsIGhlYWRlciBzaXplICovCisgICAgIGZpbGVfb2Zmc2V0ICs9IGw7ICAgICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGRhdGEgKi8KKyAKKysgICAgaWYgKGRhdGFfc2l6ZSA+IExPTkdfTUFYIC0gMSkgeworKyAgICAgICAgZmNsb3NlKGZwKTsKKysgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorICAgICByYXdfZGF0YSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgY29tcHJlc3MgPT0gMCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zaXplIDogZGF0YV9zaXplICsgMSk7CisgICAgIGlmIChyYXdfZGF0YSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaAppbmRleCBlOWJhZTMyLi44MDEyMjQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKQEAgLTQsOCArNCw4IEBACiAKIC0gSW1wbGVtZW50cyBSaWNoYXJkIFB1cmRpZSdzIGlkZWEKIAotU2lnbmVkLU9mZi1CeTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+Ci1TaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CiAKIEluZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaAppbmRleCBlNDI2MmQ5Li41ZjczMDkzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKQEAgLTQsMTUgKzQsMTUgQEAKIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIG5hdGl2ZSBweXRob24gYmluYXJ5IG1vZHVsZXMgZmluZGFibGUKIGluIHRoZSBpbnN0YWxsIHByb2Nlc3Mgb2YgdGhlIGhvc3QgcHl0aG9uLgogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIERhdGU6IDIwMTIvMDMvMTQKIAogVXBkYXRlZCBmb3IgcHl0aG9uIDIuNy4zCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIERhdGU6IDIwMTIvMDUvMDEKIAogUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45Ci1TaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgogCiAKIEluZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoCmluZGV4IDBiZmEwZDIuLmIxNjkxMzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKQEAgLTEsMTEgKzEsMTEgQEAKIFJlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQotU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KIAotSW5kZXg6IFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0luZGV4OiBQeXRob24tMi43LjEyL2NvbmZpZ3VyZS5hYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKLUBAIC03MzYsNiArNzM2LDEwIEBAIFN1bk9TKikKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy4xMi9jb25maWd1cmUuYWMKK0BAIC03NTYsNiArNzU2LDEwIEBAIFN1bk9TKikKICAgICAgOzsKICBlc2FjCiAgCkBAIC0xNiwxMCArMTYsMTAgQEAKICAKICBBQ19TVUJTVChMSUJSQVJZKQogIEFDX01TR19DSEVDS0lORyhMSUJSQVJZKQotSW5kZXg6IFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCitJbmRleDogUHl0aG9uLTIuNy4xMi9JbmNsdWRlL3B5dGhvbnJ1bi5oCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAotKysrIFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMi43LjEyL0luY2x1ZGUvcHl0aG9ucnVuLmgKIEBAIC0xMDgsNiArMTA4LDcgQEAgUHlBUElfRlVOQyhjaGFyICopIFB5X0dldFBhdGgodm9pZCk7CiAgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCiAgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CkBAIC0yOCwxMCArMjgsMTAgQEAKICBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOwogIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKICBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOwotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKIEBAIC0yMiw2ICsyMiw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCiAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKICAKQEAgLTUwLDEwICs1MCwxMCBAQAogICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKICAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCiAgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi1JbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQogQEAgLTExOSw4ICsxMTksMTEgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbgogICAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCiAgCkBAIC02OCwxMSArNjgsMTEgQEAKICAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKICAgICAgICAgICAgICByZXR1cm4gbGlicHl0aG9uCiAgICAgICAgICBlbHNlOgotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi9weWRvYy5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9weWRvYy5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKLUBAIC0zODMsNyArMzgzLDcgQEAgY2xhc3MgRG9jOgorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvcHlkb2MucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi9weWRvYy5weQorQEAgLTM4NCw3ICszODQsNyBAQCBjbGFzcyBEb2M6CiAgCiAgICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5IikKQEAgLTgxLDEwICs4MSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIitzeXMudmVyc2lvblswOjNdKQogICAgICAgICAgaWYgKGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlKG9zKSkgYW5kCiAgICAgICAgICAgICAgKG9iamVjdC5fX25hbWVfXyBpbiAoJ2Vycm5vJywgJ2V4Y2VwdGlvbnMnLCAnZ2MnLCAnaW1wJywKLUluZGV4OiBQeXRob24tMi43LjkvTGliL3NpdGUucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi9zaXRlLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3NpdGUucHkKLSsrKyBQeXRob24tMi43LjkvTGliL3NpdGUucHkKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi9zaXRlLnB5CiBAQCAtMjg4LDEzICsyODgsMTggQEAgZGVmIGdldHNpdGVwYWNrYWdlcygpOgogICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgogICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgogICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKICAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KLUluZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3N5c2NvbmZpZy5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zeXNjb25maWcucHkKLSsrKyBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvc3lzY29uZmlnLnB5CiBAQCAtNywxMCArNywxMCBAQCBmcm9tIG9zLnBhdGggaW1wb3J0IHBhcmRpciwgcmVhbHBhdGgKICAKICBfSU5TVEFMTF9TQ0hFTUVTID0gewpAQCAtMTM5LDEwICsxMzksMTAgQEAKICAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAogICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAogICAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCi1JbmRleDogUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi90ZXN0L3Rlc3RfZGwucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdGVzdC90ZXN0X2RsLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTGliL3Rlc3QvdGVzdF9kbC5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL3Rlc3QvdGVzdF9kbC5weQogQEAgLTQsMTAgKzQsMTEgQEAKICBpbXBvcnQgdW5pdHRlc3QKICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCkBAIC0xNTcsMTEgKzE1NywxMSBAQAogICAgICAoJy91c3IvYmluL2N5Z3dpbjEuZGxsJywgJ2dldHBpZCcpLAogICAgICAoJy91c3IvbGliL2xpYmMuZHlsaWInLCAnZ2V0cGlkJyksCiAgICAgIF0KLUluZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvdGVzdC90ZXN0X3NpdGUucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdGVzdC90ZXN0X3NpdGUucHkKLSsrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9zaXRlLnB5Ci1AQCAtMjQxLDEyICsyNDEsMTYgQEAgY2xhc3MgSGVscGVyRnVuY3Rpb25zVGVzdHModW5pdHRlc3QuVGVzdAorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorQEAgLTI0NiwxMiArMjQ2LDE2IEBAIGNsYXNzIEhlbHBlckZ1bmN0aW9uc1Rlc3RzKHVuaXR0ZXN0LlRlc3QKICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMl0sIHdhbnRlZCkKICAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKICAgICAgICAgICAgICAjIE9TIFggbm9uLWZyYW13ZXdvcmsgYnVpbGRzLCBMaW51eCwgRnJlZUJTRCwgZXRjCkBAIC0xODEsMTAgKzE4MSwxMCBAQAogICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAjIG90aGVyIHBsYXRmb3JtcwogICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi90cmFjZS5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90cmFjZS5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvdHJhY2UucHkKIEBAIC03NTQsMTAgKzc1NCwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgogICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCiAgCkBAIC0xOTgsMTEgKzE5OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCiAgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCiAgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQotSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0luZGV4OiBQeXRob24tMi43LjEyL01ha2VmaWxlLnByZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgotKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KLUBAIC04Nyw2ICs4Nyw3IEBAIFBZX0NGTEFHUz0JJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUcKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy4xMi9NYWtlZmlsZS5wcmUuaW4KK0BAIC05Miw2ICs5Miw3IEBAIFBZX0NGTEFHUz0JJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUcKICAKICAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCiAgTUFDSERFUD0JQE1BQ0hERVBACkBAIC0yMTAsNyArMjEwLDcgQEAKICAKICAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKICBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACi1AQCAtMTA2LDcgKzEwNyw3IEBAIExJQkRJUj0JCUBsaWJkaXJACitAQCAtMTExLDcgKzExMiw3IEBAIExJQkRJUj0JCUBsaWJkaXJACiAgTUFORElSPQkJQG1hbmRpckAKICBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKICBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQpAQCAtMjE5LDcgKzIxOSw3IEBACiAgCiAgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcwogIEJJTkxJQkRFU1Q9CSQoTElCRElSKS9weXRob24kKFZFUlNJT04pCi1AQCAtNTk4LDYgKzU5OSw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKK0BAIC02NzAsNiArNjcxLDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAogIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAogIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKICAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKQEAgLTIyNyw3ICsyMjcsNyBAQAogIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCiAgCiAgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKLUBAIC02NDAsNyArNjQyLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKK0BAIC03MjEsNyArNzIzLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKICBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCiAgCiAgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYwpAQCAtMjM2LDI1ICsyMzYsMjUgQEAKICAKICBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCiAgCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCi1JbmRleDogUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCitJbmRleDogUHl0aG9uLTIuNy4xMi9Nb2R1bGVzL2dldHBhdGguYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCi0rKysgUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCi1AQCAtMTE2LDkgKzExNiwxMSBAQAotICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTIuNy4xMi9Nb2R1bGVzL2dldHBhdGguYworQEAgLTEwMCw2ICsxMDAsMTMgQEAKKyAjZXJyb3IgIlBSRUZJWCwgRVhFQ19QUkVGSVgsIFZFUlNJT04sIGFuZCBWUEFUSCBtdXN0IGJlIGNvbnN0YW50IGRlZmluZWQiCiAgI2VuZGlmCiAgCiArI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgogKwotICNpZm5kZWYgUFlUSE9OUEFUSAotLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCi0tICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjaWZuZGVmIFBZVEhPTlBBVEgKICsjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCiArICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgotICNlbmRpZgotIAorKyNlbmRpZgorKwogICNpZm5kZWYgTEFORE1BUksKLUBAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07CisgI2RlZmluZSBMQU5ETUFSSyAib3MucHkiCisgI2VuZGlmCitAQCAtMTA4LDcgKzExNSw3IEBAIHN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwogIHN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07CiAgc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKICBzdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKQEAgLTI2MywxMCArMjYzLDEwIEBACiAgCiAgc3RhdGljIHZvaWQKICByZWR1Y2UoY2hhciAqZGlyKQotSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworSW5kZXg6IFB5dGhvbi0yLjcuMTIvUHl0aG9uL2dldHBsYXRmb3JtLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYwotKysrIFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0yLjcuMTIvUHl0aG9uL2dldHBsYXRmb3JtLmMKIEBAIC0xMCwzICsxMCwxMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQogIHsKICAJcmV0dXJuIFBMQVRGT1JNOwpAQCAtMjgxLDEwICsyODEsMTAgQEAKICt7CiArCXJldHVybiBMSUI7CiArfQotSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKK0luZGV4OiBQeXRob24tMi43LjEyL1B5dGhvbi9zeXNtb2R1bGUuYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYwotKysrIFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTIuNy4xMi9QeXRob24vc3lzbW9kdWxlLmMKIEBAIC0xNDM3LDYgKzE0MzcsOCBAQCBfUHlTeXNfSW5pdCh2b2lkKQogICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKICAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3B5dGhvbi1maXgtQ1ZFLTIwMTYtMTAwMDExMC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ODhlMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2gKQEAgLTAsMCArMSwxNjIgQEAKK0Zyb20gY2IyNWZiZDVhYmMwZjRlYjA3ZGJiOGVhODE5ZTljMjZiZGE0ZmM5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNlbnRoaWwgS3VtYXJhbiA8c2VudGhpbEB1dGhjb2RlLmNvbT4KK0RhdGU6IFNhdCwgMzAgSnVsIDIwMTYgMDU6NDk6NTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHl0aG9uOiBmaXggQ1ZFLTIwMTYtMTAwMDExMAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitQcmV2ZW50IEhUVFBveHkgYXR0YWNrIChDVkUtMjAxNi0xMDAwMTEwKQorCitJZ25vcmUgdGhlIEhUVFBfUFJPWFkgdmFyaWFibGUgd2hlbiBSRVFVRVNUX01FVEhPRCBlbnZpcm9ubWVudCBpcyBzZXQsIHdoaWNoCitpbmRpY2F0ZXMgdGhhdCB0aGUgc2NyaXB0IGlzIGluIENHSSBtb2RlLgorCitJc3N1ZSByZXBvcnRlZCBhbmQgcGF0Y2ggY29udHJpYnV0ZWQgYnkgUsOpbWkgUmFtcGluLgorCitCYWNrcG9ydCBwYXRjaCBmcm9tIGh0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL3Jldi9iYTkxNWQ1NjE2NjcvCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTYtMTAwMDExMAorU2lnbmVkLW9mZi1ieTogTWluZ2xpIFl1IDxNaW5nbGkuWXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIERvYy9ob3d0by91cmxsaWIyLnJzdCAgIHwgIDUgKysrKysKKyBEb2MvbGlicmFyeS91cmxsaWIucnN0ICB8IDEwICsrKysrKysrKysKKyBEb2MvbGlicmFyeS91cmxsaWIyLnJzdCB8ICA1ICsrKysrCisgTGliL3Rlc3QvdGVzdF91cmxsaWIucHkgfCAxMiArKysrKysrKysrKysKKyBMaWIvdXJsbGliLnB5ICAgICAgICAgICB8ICA5ICsrKysrKysrKworIE1pc2MvQUNLUyAgICAgICAgICAgICAgIHwgIDEgKworIE1pc2MvTkVXUyAgICAgICAgICAgICAgIHwgIDQgKysrKworIDcgZmlsZXMgY2hhbmdlZCwgNDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3VybGxpYjIucnN0IGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CitpbmRleCA2YmIwNmQ0Li41Y2YyYzBjIDEwMDY0NAorLS0tIGEvRG9jL2hvd3RvL3VybGxpYjIucnN0CisrKysgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKK0BAIC01MjUsNiArNTI1LDExIEBAIHNldHRpbmcgdXAgYSBgQmFzaWMgQXV0aGVudGljYXRpb25gXyBoYW5kbGVyOiA6OgorICAgICB0aHJvdWdoIGEgcHJveHkuICBIb3dldmVyLCB0aGlzIGNhbiBiZSBlbmFibGVkIGJ5IGV4dGVuZGluZyB1cmxsaWIyIGFzCisgICAgIHNob3duIGluIHRoZSByZWNpcGUgWyNdXy4KKyAKKysuLiBub3RlOjoKKysKKysgICAgYGBIVFRQX1BST1hZYGAgd2lsbCBiZSBpZ25vcmVkIGlmIGEgdmFyaWFibGUgYGBSRVFVRVNUX01FVEhPRGBgIGlzIHNldDsgc2VlCisrICAgIHRoZSBkb2N1bWVudGF0aW9uIG9uIDpmdW5jOmB+dXJsbGliLmdldHByb3hpZXNgLgorKworIAorIFNvY2tldHMgYW5kIExheWVycworID09PT09PT09PT09PT09PT09PQorZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYi5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIucnN0CitpbmRleCAzYjVkYzE2Li5iZGRjYmE5IDEwMDY0NAorLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnJzdAorKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliLnJzdAorQEAgLTI5NSw2ICsyOTUsMTYgQEAgVXRpbGl0eSBmdW5jdGlvbnMKKyAgICBJZiBib3RoIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBleGlzdCAoYW5kIGRpc2FncmVlKSwKKyAgICBsb3dlcmNhc2UgaXMgcHJlZmVycmVkLgorIAorKyAgICAuLiBub3RlOjoKKysKKysgICAgICAgIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYFJFUVVFU1RfTUVUSE9EYGAgaXMgc2V0LCB3aGljaCB1c3VhbGx5CisrICAgICAgICBpbmRpY2F0ZXMgeW91ciBzY3JpcHQgaXMgcnVubmluZyBpbiBhIENHSSBlbnZpcm9ubWVudCwgdGhlIGVudmlyb25tZW50CisrICAgICAgICB2YXJpYWJsZSBgYEhUVFBfUFJPWFlgYCAodXBwZXJjYXNlIGBgX1BST1hZYGApIHdpbGwgYmUgaWdub3JlZC4gVGhpcyBpcworKyAgICAgICAgYmVjYXVzZSB0aGF0IHZhcmlhYmxlIGNhbiBiZSBpbmplY3RlZCBieSBhIGNsaWVudCB1c2luZyB0aGUgIlByb3h5OiIKKysgICAgICAgIEhUVFAgaGVhZGVyLiBJZiB5b3UgbmVlZCB0byB1c2UgYW4gSFRUUCBwcm94eSBpbiBhIENHSSBlbnZpcm9ubWVudCwKKysgICAgICAgIGVpdGhlciB1c2UgYGBQcm94eUhhbmRsZXJgYCBleHBsaWNpdGx5LCBvciBtYWtlIHN1cmUgdGhlIHZhcmlhYmxlIG5hbWUKKysgICAgICAgIGlzIGluIGxvd2VyY2FzZSAob3IgYXQgbGVhc3QgdGhlIGBgX3Byb3h5YGAgc3VmZml4KS4KKysKKyAuLiBub3RlOjoKKyAgICAgdXJsbGliIGFsc28gZXhwb3NlcyBjZXJ0YWluIHV0aWxpdHkgZnVuY3Rpb25zIGxpa2Ugc3BsaXR0eXBlLCBzcGxpdGhvc3QgYW5kCisgICAgIG90aGVycyBwYXJzaW5nIFVSTCBpbnRvIHZhcmlvdXMgY29tcG9uZW50cy4gQnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZQorZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYjIucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliMi5yc3QKK2luZGV4IDhhNGM4MGUuLmI4MDhiOTggMTAwNjQ0CistLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIyLnJzdAorKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliMi5yc3QKK0BAIC0yMjksNiArMjI5LDExIEBAIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgcHJvdmlkZWQ6CisgCisgICAgVG8gZGlzYWJsZSBhdXRvZGV0ZWN0ZWQgcHJveHkgcGFzcyBhbiBlbXB0eSBkaWN0aW9uYXJ5LgorIAorKyAgICAuLiBub3RlOjoKKysKKysgICAgICAgYGBIVFRQX1BST1hZYGAgd2lsbCBiZSBpZ25vcmVkIGlmIGEgdmFyaWFibGUgYGBSRVFVRVNUX01FVEhPRGBgIGlzIHNldDsKKysgICAgICAgc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIDpmdW5jOmB+dXJsbGliLmdldHByb3hpZXNgLgorKworIAorIC4uIGNsYXNzOjogSFRUUFBhc3N3b3JkTWdyKCkKKyAKK2RpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CitpbmRleCA0MzRkNTMzLi4yN2ExZDM4IDEwMDY0NAorLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKKysrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CitAQCAtMTcwLDYgKzE3MCwxOCBAQCBjbGFzcyBQcm94eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCdhbm90aGVyZG9tYWluLmNvbTo4ODg4JykpCisgICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnbmV3ZG9tYWluLmNvbToxMjM0JykpCisgCisrICAgIGRlZiB0ZXN0X3Byb3h5X2NnaV9pZ25vcmUoc2VsZik6CisrICAgICAgICB0cnk6CisrICAgICAgICAgICAgc2VsZi5lbnYuc2V0KCdIVFRQX1BST1hZJywgJ2h0dHA6Ly9zb21ld2hlcmU6MzEyOCcpCisrICAgICAgICAgICAgcHJveGllcyA9IHVybGxpYi5nZXRwcm94aWVzX2Vudmlyb25tZW50KCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vc29tZXdoZXJlOjMxMjgnLCBwcm94aWVzWydodHRwJ10pCisrICAgICAgICAgICAgc2VsZi5lbnYuc2V0KCdSRVFVRVNUX01FVEhPRCcsICdHRVQnKQorKyAgICAgICAgICAgIHByb3hpZXMgPSB1cmxsaWIuZ2V0cHJveGllc19lbnZpcm9ubWVudCgpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaHR0cCcsIHByb3hpZXMpCisrICAgICAgICBmaW5hbGx5OgorKyAgICAgICAgICAgIHNlbGYuZW52LnVuc2V0KCdSRVFVRVNUX01FVEhPRCcpCisrICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoJ0hUVFBfUFJPWFknKQorKworICAgICBkZWYgdGVzdF9wcm94eV9ieXBhc3NfZW52aXJvbm1lbnRfaG9zdF9tYXRjaChzZWxmKToKKyAgICAgICAgIGJ5cGFzcyA9IHVybGxpYi5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQKKyAgICAgICAgIHNlbGYuZW52LnNldCgnTk9fUFJPWFknLAorZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIucHkgYi9MaWIvdXJsbGliLnB5CitpbmRleCAxMzlmYWI5Li5jM2JhMmM5IDEwMDY0NAorLS0tIGEvTGliL3VybGxpYi5weQorKysrIGIvTGliL3VybGxpYi5weQorQEAgLTEzODAsMTIgKzEzODAsMjEgQEAgZGVmIGdldHByb3hpZXNfZW52aXJvbm1lbnQoKToKKyAgICAgSWYgeW91IG5lZWQgYSBkaWZmZXJlbnQgd2F5LCB5b3UgY2FuIHBhc3MgYSBwcm94aWVzIGRpY3Rpb25hcnkgdG8gdGhlCisgICAgIFtGYW5jeV1VUkxvcGVuZXIgY29uc3RydWN0b3IuCisgICAgICIiIgorKyAgICAjIEdldCBhbGwgdmFyaWFibGVzCisgICAgIHByb3hpZXMgPSB7fQorICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gb3MuZW52aXJvbi5pdGVtcygpOgorICAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQorICAgICAgICAgaWYgdmFsdWUgYW5kIG5hbWVbLTY6XSA9PSAnX3Byb3h5JzoKKyAgICAgICAgICAgICBwcm94aWVzW25hbWVbOi02XV0gPSB2YWx1ZQorIAorKyAgICAjIENWRS0yMDE2LTEwMDAxMTAgLSBJZiB3ZSBhcmUgcnVubmluZyBhcyBDR0kgc2NyaXB0LCBmb3JnZXQgSFRUUF9QUk9YWQorKyAgICAjIChub24tYWxsLWxvd2VyY2FzZSkgYXMgaXQgbWF5IGJlIHNldCBmcm9tIHRoZSB3ZWIgc2VydmVyIGJ5IGEgIlByb3h5OiIKKysgICAgIyBoZWFkZXIgZnJvbSB0aGUgY2xpZW50CisrICAgICMgSWYgInByb3h5IiBpcyBsb3dlcmNhc2UsIGl0IHdpbGwgc3RpbGwgYmUgdXNlZCB0aGFua3MgdG8gdGhlIG5leHQgYmxvY2sKKysgICAgaWYgJ1JFUVVFU1RfTUVUSE9EJyBpbiBvcy5lbnZpcm9uOgorKyAgICAgICAgcHJveGllcy5wb3AoJ2h0dHAnLCBOb25lKQorKworKyAgICAjIEdldCBsb3dlcmNhc2UgdmFyaWFibGVzCisgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBvcy5lbnZpcm9uLml0ZW1zKCk6CisgICAgICAgICBpZiBuYW1lWy02Ol0gPT0gJ19wcm94eSc6CisgICAgICAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQorZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUworaW5kZXggZWUzYTQ2NS4uOWMzNzRiNyAxMDA2NDQKKy0tLSBhL01pc2MvQUNLUworKysrIGIvTWlzYy9BQ0tTCitAQCAtMTEyMSw2ICsxMTIxLDcgQEAgQnVydG9uIFJhZG9ucworIEplZmYgUmFtbmFuaQorIFZhcnB1IFJhbnRhbGEKKyBCcm9kaWUgUmFvCisrUsOpbWkgUmFtcGluCisgU2Vua28gUmFzaWMKKyBBbnR0aSBSYXNpbmVuCisgTmlrb2xhdXMgUmF0aAorZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUworaW5kZXggNGFiM2E3MC4uY2MyZjY1YiAxMDA2NDQKKy0tLSBhL01pc2MvTkVXUworKysrIGIvTWlzYy9ORVdTCitAQCAtMTg3LDYgKzE4NywxMCBAQCBMaWJyYXJ5CisgLSBJc3N1ZSAjMjY2NDQ6IFJhaXNlIFZhbHVlRXJyb3IgcmF0aGVyIHRoYW4gU3lzdGVtRXJyb3Igd2hlbiBhIG5lZ2F0aXZlCisgICBsZW5ndGggaXMgcGFzc2VkIHRvIFNTTFNvY2tldC5yZWN2KCkgb3IgcmVhZCgpLgorIAorKy0gSXNzdWUgIzI3NTY4OiBQcmV2ZW50IEhUVFBveHkgYXR0YWNrIChDVkUtMjAxNi0xMDAwMTEwKS4gSWdub3JlIHRoZQorKyAgSFRUUF9QUk9YWSB2YXJpYWJsZSB3aGVuIFJFUVVFU1RfTUVUSE9EIGVudmlyb25tZW50IGlzIHNldCwgd2hpY2ggaW5kaWNhdGVzCisrICB0aGF0IHRoZSBzY3JpcHQgaXMgaW4gQ0dJIG1vZGUuCisrCisgLSBJc3N1ZSAjMjM4MDQ6IEZpeCBTU0wgcmVjdigwKSBhbmQgcmVhZCgwKSBtZXRob2RzIHRvIHJldHVybiB6ZXJvIGJ5dGVzCisgICBpbnN0ZWFkIG9mIHVwIHRvIDEwMjQuCisgCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYXN5bmNfMC42LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFzeW5jXzAuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YTMwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFzeW5jXzAuNi4yLmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBweXRob24tYXN5bmMuaW5jCisKK2luaGVyaXQgc2V0dXB0b29sczMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbjMtdGhyZWFkaW5nIHB5dGhvbjMtbGFuZyIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kYnVzXzEuMi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kYnVzXzEuMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWEwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWRidXNfMS4yLjQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBEQnVzIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBzeXN0ZW0iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBiODMwNDdjZTllOTQ4YjY3YzBmYWNjNWYyMzM0NzZhIgorREVQRU5EUyA9ICJleHBhdCBkYnVzIGRidXMtZ2xpYiB2aXJ0dWFsL2xpYmludGwiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMtcHl0aG9uL2RidXMtcHl0aG9uLSR7UFZ9LnRhci5neiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MzcyYTU4OGM4M2E3MjMyYjRlMDgxNTliZmQ0OGZlNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMmYxZDY4NzFmNzRmYmEyMzY1MmU1MWQxMDg3M2U1NGY3MWFkYWIwNTI1ODMzYzE5YmFkOWU5OWIxYjJmOWNjIgorUyA9ICIke1dPUktESVJ9L2RidXMtcHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMtYmFzZSBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz0gIiIKK1BBQ0tBR0VDT05GSUdbZG9jc10gPSAiLS1lbmFibGUtaHRtbC1kb2NzLC0tZGlzYWJsZS1odG1sLWRvY3MscHl0aG9uMy1kb2N1dGlscy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW2FwaS1kb2NzXSA9ICItLWVuYWJsZS1hcGktZG9jcywtLWRpc2FibGUtYXBpLWRvY3MscHl0aG9uMy1kb2N1dGlscy1uYXRpdmUgcHl0aG9uMy1lcHlkb2MtbmF0aXZlIgorCitSREVQRU5EU18ke1BOfSA9ICJweXRob24zLWlvIHB5dGhvbjMtbG9nZ2luZyBweXRob24zLXN0cmluZ29sZCBweXRob24zLXRocmVhZGluZyBweXRob24zLXhtbCIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcGtnY29uZmlnIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kb2N1dGlsc18wLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kb2N1dGlsc18wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OGZhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWRvY3V0aWxzXzAuMTIuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJUZXh0IHByb2Nlc3Npbmcgc3lzdGVtIGZvciBkb2N1bWVudGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQU0YgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT1hNzIyZmJkYzIwMzQ3ZGI3YjY5MjIzNTk0ZGQ1NDU3NCIKKworREVQRU5EUyA9ICJweXRob24zIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2N1dGlscy9kb2N1dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNDYyMjI2M2I2MmM1Yzc3MWMwMzUwMmFmYTMxNTc3NjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzdkYjcxNzgxMGFiNjk2NWY2NmM4Y2YwMzk4YTk4YzlkOGRmOTgyZGEzOWI0Y2Q3ZjE2MjkxMWViODk1OTZmYSIKKworUyA9ICIke1dPUktESVJ9L2RvY3V0aWxzLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZ2l0XzIuMC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRfMi4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmZTliYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZ2l0XzIuMC43LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBweXRob24tZ2l0LmluYworCitERVBFTkRTID0gInB5dGhvbjMtZ2l0ZGIiCisKK2luaGVyaXQgc2V0dXB0b29sczMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbjMtZ2l0ZGIgcHl0aG9uMy1sYW5nIHB5dGhvbjMtaW8gcHl0aG9uMy1zaGVsbCBweXRob24zLW1hdGggcHl0aG9uMy1yZSBweXRob24zLXN1YnByb2Nlc3MgcHl0aG9uMy1zdHJpbmdvbGQgcHl0aG9uMy11bml4YWRtaW4gcHl0aG9uMy1lbnVtIHB5dGhvbjMtbG9nZ2luZyBweXRob24zLWRhdGV0aW1lIHB5dGhvbjMtbmV0Y2xpZW50IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRkYl8wLjYuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZ2l0ZGJfMC42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkOWQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZ2l0ZGJfMC42LjQuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHB5dGhvbi1naXRkYi5pbmMKKworREVQRU5EUyA9ICJweXRob24zLWFzeW5jIHB5dGhvbjMtc21tYXAiCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1zbW1hcCBweXRob24zLWFzeW5jIHB5dGhvbjMtbW1hcCBweXRob24zLWxhbmcgcHl0aG9uMy1pbyBweXRob24zLXNoZWxsIHB5dGhvbjMtY3J5cHQgcHl0aG9uMy1jb21wcmVzc2lvbiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbWFrb18xLjAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbWFrb18xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjUwZmZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1tYWtvXzEuMC40LmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgcHl0aG9uLW1ha28uaW5jCisKK2luaGVyaXQgc2V0dXB0b29sczMKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uMy10aHJlYWRpbmcgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1uZXRjbGllbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1odG1sIFwKKyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy41LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYWQxMWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy41LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKLQotUFIgPSAiJHtJTkNfUFJ9LjAiCi1QWVRIT05fTUFKTUlOID0gIjMuNSIKLURJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKLURJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCi1TUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHogXAotZmlsZTovLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBcCi1maWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCi1maWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAotZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKLWZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKLWZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAotZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAotZmlsZTovLzExMC1lbmFibGUtemxpYi5wYXRjaCBcCi1maWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKLWZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCi1maWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCi1maWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKLWZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAotZmlsZTovL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2ggXAotZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCi1maWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAotZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAotJHtESVNUUk9fU1JDX1VSSX0gXAotZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCi1maWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKLWZpbGU6Ly8wMDAxLURvLW5vdC11c2UtdGhlLXNoZWxsLXZlcnNpb24tb2YtcHl0aG9uLWNvbmZpZy10aGF0LXcucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gImU5ZWE2ZjI2MjNmZmZjZGQ4NzFiN2IxOTExM2ZkZTgwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2ZDU3YzBjMzY2ZDkwNjBhYjZjMGNkZjg4OWViZjNkOTI3MTFkNDY2Y2MwMTE5YzQ0MWRiZjI3NDZmNzI1YzkiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRkOThkMDFkNDcxZmFjOGQ4ZGJkZDk3NTIyOWRiYTAzIgotCi0jIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCi0KLVMgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCi0KLUVYVFJBTkFUSVZFUEFUSCArPSAiYnppcDItbmF0aXZlIgotREVQRU5EUyA9ICJvcGVuc3NsLW5hdGl2ZSBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIgotCi1pbmhlcml0IG5hdGl2ZQotCi1SUFJPVklERVMgKz0gInB5dGhvbjMtZGlzdHV0aWxzLW5hdGl2ZSBweXRob24zLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24zLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uMy1jb3JlLW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IC0td2l0aG91dC1lbnN1cmVwaXAiCi0KLUVYVFJBX09FTUFLRSA9ICdcCi0gIEJVSUxEX1NZUz0iIiBcCi0gIEhPU1RfU1lTPSIiIFwKLSAgTElCQz0iIiBcCi0gIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCi0gIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCi0gIExJQj0ke2Jhc2VsaWJ9IFwKLSAgQVJDSD0ke1RBUkdFVF9BUkNIfSBcCi0nCi0KLSMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKLVBZVEhPTkxTQk9QVFMgPSAiIgotCi1kb19jb25maWd1cmVfYXBwZW5kKCkgewotCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKLX0KLQotZG9faW5zdGFsbCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCi0Jb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCi0JaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgotCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KLQlmaQotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8ke1BOfQotCWluc3RhbGwgLW0gMDc1NSBQYXJzZXIvcGdlbiAke0R9JHtiaW5kaXJ9LyR7UE59Ci0KLQkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHB5dGhvbgotCWZvciBQWVRIU0NSSVBUIGluIGBncmVwIC1ySWwgJHtiaW5kaXJ9LyR7UE59L3B5dGhvbiAke0R9JHtiaW5kaXJ9LyR7UE59YDsgZG8KLQkJc2VkIC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob24zfCcgJFBZVEhTQ1JJUFQKLQlkb25lCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjUuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NGYxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjUuMi5iYgpAQCAtMCwwICsxLDk4IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKworUFIgPSAiJHtJTkNfUFJ9LjAiCitQWVRIT05fTUFKTUlOID0gIjMuNSIKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHogXAorZmlsZTovLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBcCitmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCitmaWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAorZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKK2ZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAorZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAorZmlsZTovLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaCBcCitmaWxlOi8vMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggXAorZmlsZTovL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggXAorZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCitmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKK2ZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2ggXAorZmlsZTovL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoIFwKK2ZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKKyR7RElTVFJPX1NSQ19VUkl9IFwKK2ZpbGU6Ly9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2ggXAorZmlsZTovL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaCBcCitmaWxlOi8vMDAwMS1Eby1ub3QtdXNlLXRoZS1zaGVsbC12ZXJzaW9uLW9mLXB5dGhvbi1jb25maWctdGhhdC13LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjg5MDZlZmJhY2ZjZGM3YzNjOTE5OGFlZWZhZmQxNTllIiAgCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDAxMGY1NjEwMGI5Yjc0MjU5ZWJjZDVkNGIyOTVhMzIzMjRiNThiNTE3NDAzYTEwZDFhMmFhN2NiMjJiY2E0MCIgCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTZiNjAyNTgxMzBlNGVkMTBkMzEwMTUxN2ViNWI5Mzg1IgorCisjIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK0VYVFJBTkFUSVZFUEFUSCArPSAiYnppcDItbmF0aXZlIgorREVQRU5EUyA9ICJvcGVuc3NsLW5hdGl2ZSBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIgorCitpbmhlcml0IG5hdGl2ZQorCitSUFJPVklERVMgKz0gIiBcCisgICAgcHl0aG9uMy1jb21wcmVzc2lvbi1uYXRpdmUgXAorICAgIHB5dGhvbjMtY29yZS1uYXRpdmUgXAorICAgIHB5dGhvbjMtZGlzdHV0aWxzLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1lbWFpbC1uYXRpdmUgXAorICAgIHB5dGhvbjMtaW1wb3J0bGliLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1pby1uYXRpdmUgXAorICAgIHB5dGhvbjMtanNvbi1uYXRpdmUgXAorICAgIHB5dGhvbjMtbGFuZy1uYXRpdmUgXAorICAgIHB5dGhvbjMtbWlzYy1uYXRpdmUgXAorICAgIHB5dGhvbjMtbmV0Y2xpZW50LW5hdGl2ZSBcCisgICAgcHl0aG9uMy1uZXRzZXJ2ZXItbmF0aXZlIFwKKyAgICBweXRob24zLW51bWJlcnMtbmF0aXZlIFwKKyAgICBweXRob24zLXBrZ3V0aWwtbmF0aXZlIFwKKyAgICBweXRob24zLXBwcmludC1uYXRpdmUgXAorICAgIHB5dGhvbjMtcmUtbmF0aXZlIFwKKyAgICBweXRob24zLXNoZWxsLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1zdWJwcm9jZXNzLW5hdGl2ZSBcCisgICAgcHl0aG9uMy10ZXh0dXRpbHMtbmF0aXZlIFwKKyAgICBweXRob24zLXRocmVhZGluZy1uYXRpdmUgXAorICAgIHB5dGhvbjMtdW5pdHRlc3QtbmF0aXZlIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IC0td2l0aG91dC1lbnN1cmVwaXAiCisKK0VYVFJBX09FTUFLRSA9ICdcCisgIExJQkM9IiIgXAorICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorICBMSUI9JHtiYXNlbGlifSBcCisgIEFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorJworCisjIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCitQWVRIT05MU0JPUFRTID0gIiIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9uM3wnICRQWVRIU0NSSVBUCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1ub3NlXzEuMy43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1ub3NlXzEuMy43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YmJhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5vc2VfMS4zLjcuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJFeHRlbmRzIFB5dGhvbiB1bml0dGVzdCB0byBtYWtlIHRlc3RpbmcgZWFzaWVyIgorREVTQ1JJUFRJT04gPSAibm9zZSBleHRlbmRzIHRoZSB0ZXN0IGxvYWRpbmcgYW5kIHJ1bm5pbmcgZmVhdHVyZXMgb2YgdW5pdHRlc3QsIFwKK21ha2luZyBpdCBlYXNpZXIgdG8gd3JpdGUsIGZpbmQgYW5kIHJ1biB0ZXN0cy4iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sZ3BsLnR4dDttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9uL25vc2Uvbm9zZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZDNhZDBmZjA3YjYxMzczZDJjZWZjODljNWQwYjIwYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMWJmZmVmOWNiYzgyNjI4ZjZlN2Q3YjQwZDdlMjU1YWVmYWExYWRiNmExYjFkMjZjNjlhOGI3OWU2MjA4YTk4IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9ub3NlLyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9ub3NlLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKSIKKworUyA9ICIke1dPUktESVJ9L25vc2UtJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29sczMKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gIlwKKyAgcHl0aG9uMy11bml0dGVzdCBcCisgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1waXBfOC4wLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF84LjAuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM0ZWNkYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF84LjAuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLVNVTU1BUlkgPSAiVGhlIFB5UEEgcmVjb21tZW5kZWQgdG9vbCBmb3IgaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMiCi1zSE9NRVBBR0Vzc3MgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9waXAiCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTI1ZmJhNDUxMDk1NjVmODdkZTIwYmFlODViYzM5NDUyIgotCi1TUkNOQU1FID0gInBpcCIKLURFUEVORFMgKz0gInB5dGhvbjMgcHl0aG9uMy1zZXR1cHRvb2xzLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICIgXAotICBodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9wLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAotIgotU1JDX1VSSVttZDVzdW1dID0gIjU2MDFjNDMyMzQ2NGFkZDE0ODIyOTE2MzQxNDI4OTRkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwMTEyYjI5NjE1MmYyNzBjYjhkZGRjZDE5YjdiODc0ODhkOWUwMDJlOGNmNjIyZTE0YzRkYTljMmY2MzE5YjEiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKLQotUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzMwotCi1ESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgotCi1kb19pbnN0YWxsX3ByZXBlbmQoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMKLX0KLQotIyBVc2Ugc2V0dXB0b29scyBzaXRlLnB5IGluc3RlYWQsIGF2b2lkIHNoYXJlZCBzdGF0ZSBpc3N1ZQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgcm0gJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL3NpdGUucHkKLSAgICBybSAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvX19weWNhY2hlX18vc2l0ZS5jcHl0aG9uLSoucHljCi0KLSAgICAjIEluc3RhbGwgYXMgcGlwMyBhbmQgbGVhdmUgcGlwMiBhcyBkZWZhdWx0Ci0gICAgcm0gJHtEfS8ke2JpbmRpcn0vcGlwCi0KLSAgICAjIEluc3RhbGxlZCBlZ2dzIG5lZWQgdG8gYmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBpbnRlcnByZXRlciB2aWEgYSBwdGggZmlsZQotICAgIGVjaG8gIi4vJHtTUkNOQU1FfS0ke1BWfS1weSR7UFlUSE9OX0JBU0VWRVJTSU9OfS5lZ2ciID4gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyR7U1JDTkFNRX0tJHtQVn0ucHRoCi19Ci0KLVJERVBFTkRTXyR7UE59ID0gIlwKLSAgcHl0aG9uMy1jb21waWxlIFwKLSAgcHl0aG9uMy1pbyBcCi0gIHB5dGhvbjMtanNvbiBcCi0gIHB5dGhvbjMtbmV0c2VydmVyIFwKLSAgcHl0aG9uMy1zZXR1cHRvb2xzIFwKLSAgcHl0aG9uMy11bml4YWRtaW4gXAotICBweXRob24zLXhtbHJwYyBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF84LjEuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzguMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZmI0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF84LjEuMi5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIlRoZSBQeVBBIHJlY29tbWVuZGVkIHRvb2wgZm9yIGluc3RhbGxpbmcgUHl0aG9uIHBhY2thZ2VzIgorc0hPTUVQQUdFc3NzID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGlwIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0yNWZiYTQ1MTA5NTY1Zjg3ZGUyMGJhZTg1YmMzOTQ1MiIKKworU1JDTkFNRSA9ICJwaXAiCitERVBFTkRTICs9ICJweXRob24zIHB5dGhvbjMtc2V0dXB0b29scy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9wLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzA4M2MwYjk4Njc5NjNiMjlmN2FiYTM2MTNlOGY0YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZDI0YjAzZmZhNjc2MzhhM2ZhOTMxYzA5ZmQ5ZTAyNzNmZmE5MDRlOTVlYmViZTdkNGIxYTU0YzkzZDdiNzMyIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9waXAiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorfQorCisjIFVzZSBzZXR1cHRvb2xzIHNpdGUucHkgaW5zdGVhZCwgYXZvaWQgc2hhcmVkIHN0YXRlIGlzc3VlCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2l0ZS5weQorICAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9fX3B5Y2FjaGVfXy9zaXRlLmNweXRob24tKi5weWMKKworICAgICMgSW5zdGFsbCBhcyBwaXAzIGFuZCBsZWF2ZSBwaXAyIGFzIGRlZmF1bHQKKyAgICBybSAke0R9LyR7YmluZGlyfS9waXAKKworICAgICMgSW5zdGFsbGVkIGVnZ3MgbmVlZCB0byBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGludGVycHJldGVyIHZpYSBhIHB0aCBmaWxlCisgICAgZWNobyAiLi8ke1NSQ05BTUV9LSR7UFZ9LXB5JHtQWVRIT05fQkFTRVZFUlNJT059LmVnZyIgPiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vJHtTUkNOQU1FfS0ke1BWfS5wdGgKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24zLWNvbXBpbGUgXAorICBweXRob24zLWlvIFwKKyAgcHl0aG9uMy1qc29uIFwKKyAgcHl0aG9uMy1uZXRzZXJ2ZXIgXAorICBweXRob24zLXNldHVwdG9vbHMgXAorICBweXRob24zLXVuaXhhZG1pbiBcCisgIHB5dGhvbjMteG1scnBjIFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHljYWlyb18xLjEwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Y2Fpcm9fMS4xMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MDMxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Y2Fpcm9fMS4xMC4wLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQ2Fpcm8gY2FudmFzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcHljYWlybyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJweXRob24tZGV2ZWwiCitMSUNFTlNFID0gIkxHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKKworIyBjYWlybyA+PSAxLjguOAorREVQRU5EUyA9ICJjYWlybyIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9yZWxlYXNlcy9weWNhaXJvLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNmZkM2YyZjFlNmE3MmUwZGIwODY4YzQ5ODU2NjljNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YWE0MDc4ZTdlYjViZTU4M2FlYWJiZThkODcxNzI3OTc3MTdmOTVlOGM0MzM4ZjBkNGExN2I2ODNhNzI1M2JlIgorCitTID0gIiR7V09SS0RJUn0vcHljYWlyby0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgeworCVBZVEhPTj0ke1BZVEhPTn0gLi93YWYgY29uZmlndXJlIC0tcHJlZml4PSR7RH0ke3ByZWZpeH0gLS1saWJkaXI9JHtEfSR7bGliZGlyfQorfQorCitkb19jb21waWxlKCkgeworCS4vd2FmIGJ1aWxkICR7UEFSQUxMRUxfTUFLRX0KK30KKworZG9faW5zdGFsbCgpIHsKKwkuL3dhZiBpbnN0YWxsCisJc2VkIFwKKwkJLWUgJ3M6QHByZWZpeEA6JHtwcmVmaXh9OicgXAorCQktZSAnczpAVkVSU0lPTkA6JHtQVn06JyBcCisJCS1lICdzOkBpbmNsdWRlZGlyQDoke2luY2x1ZGVkaXJ9OicgXAorCQlweTNjYWlyby5wYy5pbiA+IHB5M2NhaXJvLnBjCisJaW5zdGFsbCAtbSAwNjQ0IHB5M2NhaXJvLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtc3lzcm9vdC1wYXRoLXRvLUdJX0RBVEFESVItZG9uLXQtc2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z29iamVjdC8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtc3lzcm9vdC1wYXRoLXRvLUdJX0RBVEFESVItZG9uLXQtc2UucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3QvMDAwMS1jb25maWd1cmUuYWMtYWRkLXN5c3Jvb3QtcGF0aC10by1HSV9EQVRBRElSLWRvbi10LXNlLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z29iamVjdC8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtc3lzcm9vdC1wYXRoLXRvLUdJX0RBVEFESVItZG9uLXQtc2UucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlnb2JqZWN0XzMuMjAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlnb2JqZWN0XzMuMjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGExNmYxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWdvYmplY3RfMy4yMC4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIEdPYmplY3QgYmluZGluZ3MiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljNyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBkaXN0dXRpbHMzLWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCitERVBFTkRTICs9ICJweXRob24zIGdsaWItMi4wIgorCitTUkNOQU1FPSJweWdvYmplY3QiCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvJHtTUkNOQU1FfS8ke0Bnbm9tZV92ZXJkaXIoIiR7UFZ9Iil9LyR7U1JDTkFNRX0tJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtYWRkLXN5c3Jvb3QtcGF0aC10by1HSV9EQVRBRElSLWRvbi10LXNlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzNTRjNjI4M2IxMzVmODU5NTYzYjcyNDU3ZjZhMzIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNkMjYxMDA1ZDZmZWQ2YTkyYWM0YzI1ZjI4Mzc5MjU1MmY3ZGFkODY1ZDFiN2UwYzAzYzJiODRjMDRkYmQ3NDUiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jYWlybyIKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbjMtc2V0dXB0b29scyBweXRob24zLWltcG9ydGxpYiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18xOS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzE5LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMjkzMWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzE5LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1yZXF1aXJlIHB5dGhvbi1zZXR1cHRvb2xzLmluYwotCi1ERVBFTkRTICs9ICJweXRob24zIgotREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gInB5dGhvbjMtbmF0aXZlIgotCi1pbmhlcml0IGRpc3R1dGlsczMKLQotRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKLQotIyBUaGUgaW5zdGFsbGVyIHB1dHMgdGhlIHdyb25nIHBhdGggaW4gdGhlIHNldHVwdG9vbHMucHRoIGZpbGUuICBDb3JyZWN0IGl0LgotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NldHVwdG9vbHMucHRoCi0gICAgbXYgJHtEfSR7YmluZGlyfS9lYXN5X2luc3RhbGwgJHtEfSR7YmluZGlyfS9lYXN5M19pbnN0YWxsCi0gICAgZWNobyAiLi8ke1NSQ05BTUV9LSR7UFZ9LXB5JHtQWVRIT05fQkFTRVZFUlNJT059LmVnZyIgPiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKLX0KLQotUkRFUEVORFNfJHtQTn0gPSAiXAotICBweXRob24zLWRpc3R1dGlscyBcCi0gIHB5dGhvbjMtY29tcHJlc3Npb24gXAotIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gIlwKLSAgcHl0aG9uMy1jdHlwZXMgXAotICBweXRob24zLWRpc3R1dGlscyBcCi0gIHB5dGhvbjMtZW1haWwgXAotICBweXRob24zLWltcG9ydGxpYiBcCi0gIHB5dGhvbjMtbnVtYmVycyBcCi0gIHB5dGhvbjMtY29tcHJlc3Npb24gXAotICBweXRob24zLXNoZWxsIFwKLSAgcHl0aG9uMy1zdWJwcm9jZXNzIFwKLSAgcHl0aG9uMy10ZXh0dXRpbHMgXAotICBweXRob24zLXBrZ3V0aWwgXAotICBweXRob24zLXRocmVhZGluZyBcCi0gIHB5dGhvbjMtbWlzYyBcCi0gIHB5dGhvbjMtdW5pdHRlc3QgXAotICBweXRob24zLXhtbCBcCi0iCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18yMi4wLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMjIuMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YWY2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMjIuMC41LmJiCkBAIC0wLDAgKzEsMzcgQEAKK3JlcXVpcmUgcHl0aG9uLXNldHVwdG9vbHMuaW5jCisKK0RFUEVORFMgKz0gInB5dGhvbjMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uMy1uYXRpdmUiCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKKworIyBUaGUgaW5zdGFsbGVyIHB1dHMgdGhlIHdyb25nIHBhdGggaW4gdGhlIHNldHVwdG9vbHMucHRoIGZpbGUuICBDb3JyZWN0IGl0LgorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NldHVwdG9vbHMucHRoCisgICAgbXYgJHtEfSR7YmluZGlyfS9lYXN5X2luc3RhbGwgJHtEfSR7YmluZGlyfS9lYXN5M19pbnN0YWxsCisgICAgZWNobyAiLi8ke1NSQ05BTUV9LSR7UFZ9LXB5JHtQWVRIT05fQkFTRVZFUlNJT059LmVnZyIgPiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24zLWRpc3R1dGlscyBcCisgIHB5dGhvbjMtY29tcHJlc3Npb24gXAorIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gIlwKKyAgcHl0aG9uMy1jdHlwZXMgXAorICBweXRob24zLWRpc3R1dGlscyBcCisgIHB5dGhvbjMtZW1haWwgXAorICBweXRob24zLWltcG9ydGxpYiBcCisgIHB5dGhvbjMtbnVtYmVycyBcCisgIHB5dGhvbjMtY29tcHJlc3Npb24gXAorICBweXRob24zLXNoZWxsIFwKKyAgcHl0aG9uMy1zdWJwcm9jZXNzIFwKKyAgcHl0aG9uMy10ZXh0dXRpbHMgXAorICBweXRob24zLXBrZ3V0aWwgXAorICBweXRob24zLXRocmVhZGluZyBcCisgIHB5dGhvbjMtbWlzYyBcCisgIHB5dGhvbjMtdW5pdHRlc3QgXAorICBweXRob24zLXhtbCBcCisiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2l4XzEuMTAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2l4XzEuMTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGE0N2I3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zaXhfMS4xMC4wLmJiCkBAIC0wLDAgKzEsNCBAQAoraW5oZXJpdCBzZXR1cHRvb2xzMworcmVxdWlyZSBweXRob24tc2l4LmluYworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1pbyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc21tYXBfMC45LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNtbWFwXzAuOS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOGEyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNtbWFwXzAuOS4wLmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBweXRob24tc21tYXAuaW5jCisKK2luaGVyaXQgc2V0dXB0b29sczMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbjMtY29kZWNzIHB5dGhvbjMtbW1hcCBweXRob24zLWxhbmciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaAppbmRleCAyOGZlNzBhLi4yZDgyMjIxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTksMTkgKzksMTkgQEAKICBNYWtlZmlsZS5wcmUuaW4gfCAgIDI1ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KICAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCiAKLUluZGV4OiBQeXRob24tMy41LjEvTWFrZWZpbGUucHJlLmluCitJbmRleDogUHl0aG9uLTMuNS4yL01ha2VmaWxlLnByZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMS5vcmlnL01ha2VmaWxlLnByZS5pbgotKysrIFB5dGhvbi0zLjUuMS9NYWtlZmlsZS5wcmUuaW4KKy0tLSBQeXRob24tMy41LjIub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMy41LjIvTWFrZWZpbGUucHJlLmluCiBAQCAtMjIwLDYgKzIyMCw3IEBAIExJQk9CSlM9CUBMSUJPQkpTQAogIAogIFBZVEhPTj0JCXB5dGhvbiQoRVhFKQogIEJVSUxEUFlUSE9OPQlweXRob24kKEJVSUxERVhFKQogK0hPU1RQWVRIT049CSQoQlVJTERQWVRIT04pCiAgCisgY3Jvc3NfY29tcGlsaW5nPUBjcm9zc19jb21waWxpbmdACiAgUFlUSE9OX0ZPUl9CVUlMRD1AUFlUSE9OX0ZPUl9CVUlMREAKLSBfUFlUSE9OX0hPU1RfUExBVEZPUk09QF9QWVRIT05fSE9TVF9QTEFURk9STUAKLUBAIC0yNzYsNiArMjc3LDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKK0BAIC0yNzksNiArMjgwLDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICMgUGFyc2VyCiAgUEdFTj0JCVBhcnNlci9wZ2VuJChFWEUpCkBAIC0yOSw3ICsyOSw3IEBACiAgCiAgUFNSQ1M9CQlcCiAgCQlQYXJzZXIvYWNjZWxlci5jIFwKLUBAIC01MDYsNyArNTA4LDcgQEAgYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGU6CitAQCAtNTA5LDcgKzUxMSw3IEBAIGJ1aWxkX2FsbF9nZW5lcmF0ZV9wcm9maWxlOgogIAogIHJ1bl9wcm9maWxlX3Rhc2s6CiAgCTogIyBGSVhNRTogY2FuJ3QgcnVuIGZvciBhIGNyb3NzIGJ1aWxkCkBAIC0zOCwxNiArMzgsMTYgQEAKICAKICBidWlsZF9hbGxfbWVyZ2VfcHJvZmlsZToKICAJJChMTFZNX1BST0ZfTUVSR0VSKQotQEAgLTc3OSw3ICs3ODEsNyBAQCAkKElPX09CSlMpOiAkKElPX0gpCi0gCi0gJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTikKLSAJCUAkKE1LRElSX1ApIEluY2x1ZGUKLS0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCi0rCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKLSAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKQotIAkJdG91Y2ggJChHUkFNTUFSX0MpCi0gCi1AQCAtOTY4LDcgKzk3MCw3IEBAICQoTElCUkFSWV9PQkpTKSAkKE1PRE9CSlMpIFByb2dyYW1zL3B5dGgKK0BAIC03OTIsNyArNzk0LDcgQEAgJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTikKKyAJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkjIEF2b2lkIGNvcHlpbmcgdGhlIGZpbGUgb250byBpdHNlbGYgZm9yIGFuIGluLXRyZWUgYnVpbGQKKyAJaWYgdGVzdCAiJChjcm9zc19jb21waWxpbmcpIiAhPSAieWVzIjsgdGhlbiBcCistCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKTsgXAorKwkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpOyBcCisgCWVsc2UgXAorIAkJY3AgJChzcmNkaXIpL0luY2x1ZGUvZ3JhbWluaXQuaCAkKEdSQU1NQVJfSCkudG1wOyBcCisgCQltdiAkKEdSQU1NQVJfSCkudG1wICQoR1JBTU1BUl9IKTsgXAorQEAgLTk5MCw3ICs5OTIsNyBAQCAkKExJQlJBUllfT0JKUykgJChNT0RPQkpTKSBQcm9ncmFtcy9weXRoCiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIAogIFRFU1RPUFRTPQkkKEVYVFJBVEVTVE9QVFMpCkBAIC01Niw3ICs1Niw3IEBACiAgVEVTVFJVTk5FUj0JJChURVNUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9ydW5fdGVzdHMucHkKICBURVNUVElNRU9VVD0JMzYwMAogIAotQEAgLTE0NTUsNyArMTQ1Nyw3IEBAIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmU6CSQoTERMSUJSQVJZKQorQEAgLTE0ODEsNyArMTQ4Myw3IEBAIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmU6CSQoTERMSUJSQVJZKQogIAkJZmk7IFwKICAJZG9uZQogIAkkKExOKSAtZnNuIGluY2x1ZGUvcHl0aG9uJChMRFZFUlNJT04pICQoREVTVERJUikkKHByZWZpeCkvSGVhZGVycwpAQCAtNjUsNyArNjUsNyBAQAogIAkkKExOKSAtZnNuICQoVkVSU0lPTikgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvQ3VycmVudAogIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvJChQWVRIT05GUkFNRVdPUkspICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpLyQoUFlUSE9ORlJBTUVXT1JLKQogIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvSGVhZGVycyAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9IZWFkZXJzCi1AQCAtMTUyMSw3ICsxNTIzLDcgQEAgY29uZmlnLnN0YXR1czoJJChzcmNkaXIpL2NvbmZpZ3VyZQorQEAgLTE1NDcsNyArMTU0OSw3IEBAIGNvbmZpZy5zdGF0dXM6CSQoc3JjZGlyKS9jb25maWd1cmUKICAKICAjIFJ1biByZWluZGVudCBvbiB0aGUgbGlicmFyeQogIHJlaW5kZW50OgpAQCAtNzQsNyArNzQsNyBAQAogIAogICMgUmVydW4gY29uZmlndXJlIHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyBpdCB3YXMgcnVuIGxhc3QgdGltZSwKICAjIHByb3ZpZGVkIHRoZSBjb25maWcuc3RhdHVzIHNjcmlwdCBleGlzdHMKLUBAIC0xNjU2LDcgKzE2NTgsNyBAQCBmdW5ueToKK0BAIC0xNjgzLDcgKzE2ODUsNyBAQCBmdW5ueToKICAKICAjIFBlcmZvcm0gc29tZSB2ZXJpZmljYXRpb24gY2hlY2tzIG9uIGFueSBtb2RpZmllZCBmaWxlcy4KICBwYXRjaGNoZWNrOiBhbGwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiOTJhMTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1FbmFibGUgemxpYiBpbiBweXRob24KLQotLUtoZW0KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KLQotLS0tCi0gTW9kdWxlcy9TZXR1cC5kaXN0IHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi0tLS0gYS9Nb2R1bGVzL1NldHVwLmRpc3QKLSsrKyBiL01vZHVsZXMvU2V0dXAuZGlzdAotQEAgLTM1NCw3ICszNTQsNyBAQCBfc3ltdGFibGUgc3ltdGFibGVtb2R1bGUuYwotICMgQW5kcmV3IEt1Y2hsaW5nJ3MgemxpYiBtb2R1bGUuCi0gIyBUaGlzIHJlcXVpcmUgemxpYiAxLjEuMyAob3IgbGF0ZXIpLgotICMgU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8KLS0jemxpYiB6bGlibW9kdWxlLmMgLUkkKHByZWZpeCkvaW5jbHVkZSAtTCQoZXhlY19wcmVmaXgpL2xpYiAtbHoKLSt6bGliIHpsaWJtb2R1bGUuYyAtbHoKLSAKLSAjIEludGVyZmFjZSB0byB0aGUgRXhwYXQgWE1MIHBhcnNlcgotICMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKaW5kZXggOGI5M2MxYy4uYzUzZWMwYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIGQ0ZGQ2N2RhYTE1NTViZjEzMjcyY2MwNzE3MDYzMzg1NzI1MzliYWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDc2MzBhYjIyNTc4NzQ2ZDNkNzkwZDA1OThjMGQyNzljZjdhZmVkOTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogVHVlLCAxNCBNYXkgMjAxMyAxNTowMDoyNiAtMDcwMAogU3ViamVjdDogW1BBVENIIDAxLzIwXSBweXRob24zOiBBZGQgdGFyZ2V0IGFuZCBuYXRpdmUgcmVjaXBlcwpAQCAtMTQsMjcgKzE0LDE0IEBACiAjIFNpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgogCiAtLS0KKyBMaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSB8IDEwICsrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCiBkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQotaW5kZXggNTczNzI0ZC4uNDE4YjQ3OCAxMDA2NDQKK2luZGV4IDU3MzcyNGQuLjM5MGM0ODUgMTAwNjQ0CiAtLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQogKysrIGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKLUBAIC0xNywxMCArMTcsMTEgQEAgaW1wb3J0IHN5cwotIGZyb20gLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgotIAotICMgVGhlc2UgYXJlIG5lZWRlZCBpbiBhIGNvdXBsZSBvZiBzcG90cywgc28ganVzdCBjb21wdXRlIHRoZW0gb25jZS4KLS1QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCi0tRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKLS1CQVNFX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KQotLUJBU0VfRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX2V4ZWNfcHJlZml4KQotK1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKLStFWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQotK0JBU0VfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCi0rQkFTRV9FWEVDX1BSRUZJWD0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9leGVjX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKLSsKLSAKLSAjIFBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LiBPbiBXaW5kb3dzIHRoZSBiaW5hcnkgbWF5Ci0gIyBsaXZlIGluIHByb2plY3QvUENCdWlsZC93aW4zMiBvciBwcm9qZWN0L1BDQnVpbGQvYW1kNjQuCi1AQCAtODQsNyArODUsOSBAQCBkZWYgZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wLCBwcmVmaXg9Tm9uZSk6CitAQCAtODQsNyArODQsOSBAQCBkZWYgZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wLCBwcmVmaXg9Tm9uZSk6CiAgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMuYmFzZV9wcmVmaXggb3IKICAgICAgc3lzLmJhc2VfZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KICAgICAgIiIiCkBAIC00NSw3ICszMiw3IEBACiAgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBCQVNFX0VYRUNfUFJFRklYIG9yIEJBU0VfUFJFRklYCiAgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKLUBAIC0xMjUsNiArMTI4LDEwIEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0wLCBwcmVmaXg9Tm9uZSk6CitAQCAtMTI1LDYgKzEyNywxMCBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuZGFyZF9saWI9MCwgcHJlZml4PU5vbmUpOgogICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLmJhc2VfcHJlZml4IG9yCiAgICAgIHN5cy5iYXNlX2V4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCiAgICAgICIiIgpAQCAtNTYsNyArNDMsNyBAQAogICAgICBpZiBwcmVmaXggaXMgTm9uZToKICAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKICAgICAgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBCQVNFX0VYRUNfUFJFRklYIG9yIEJBU0VfUFJFRklYCi1AQCAtMTMzLDcgKzE0MCw3IEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0wLCBwcmVmaXg9Tm9uZSk6CitAQCAtMTMzLDcgKzEzOSw3IEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0wLCBwcmVmaXg9Tm9uZSk6CiAgCiAgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCkBAIC02NSwyNCArNTIsNiBAQAogICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgogICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KICAgICAgICAgIGVsc2U6Ci1AQCAtMjMzLDcgKzI0MCw3IEBAIGRlZiBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKToKLSAgICAgZWxzZToKLSAgICAgICAgIGluY19kaXIgPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTEpCi0gCi0tICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnKQotKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsICdweWNvbmZpZy5oJy5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKSkKLSAKLSAKLSBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6Ci1AQCAtMjQyLDcgKzI0OSw3IEBAIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKLSAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oX3N5c19ob21lIG9yIHByb2plY3RfYmFzZSwgIk1ha2VmaWxlIikKLSAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCi0gICAgIGNvbmZpZ19maWxlID0gJ2NvbmZpZy17fXt9Jy5mb3JtYXQoZ2V0X3B5dGhvbl92ZXJzaW9uKCksIGJ1aWxkX2ZsYWdzKQotLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsIGNvbmZpZ19maWxlLCAnTWFrZWZpbGUnKQotKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsIGNvbmZpZ19maWxlLCAnTWFrZWZpbGUnKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQotIAotIAotIGRlZiBwYXJzZV9jb25maWdfaChmcCwgZz1Ob25lKToKIC0tIAotMi43LjAKKzIuOC4wLnJjMwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL0NWRS0yMDE2LTU2MzYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL0NWRS0yMDE2LTU2MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0OTRkMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvQ1ZFLTIwMTYtNTYzNi5wYXRjaApAQCAtMCwwICsxLDQ0IEBACisKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgQmVuamFtaW4gUGV0ZXJzb24gPGJlbmphbWluQHB5dGhvbi5vcmc+CisjIERhdGUgMTQ1MzM1NzUwNiAyODgwMAorIyBOb2RlIElEIDEwZGFkNmRhMWIyOGVhNGFmNzhhZDk1MjllNDY5ZmRiZjRlYmJjOGYKKyMgUGFyZW50ICBhM2FjMmNkOTNkYjlkNTMzNmRmZDdiNWIyN2VmZGUyYzU2OGQ4Nzk0IyBQYXJlbnQgIDAxZGRkNjA4Yjg1Yzg1OTUyNTM3ZDk1YTQzYmJhYmY0ZmI2NTUwNTcKK21lcmdlIDMuNCAoIzI2MTcxKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitDVkU6IENWRS0yMDE2LTU2MzYKKworaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vcmF3LXJldi8xMGRhZDZkYTFiMjgKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCitJbmRleDogUHl0aG9uLTMuNS4xL01pc2MvTkVXUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjUuMS5vcmlnL01pc2MvTkVXUworKysrIFB5dGhvbi0zLjUuMS9NaXNjL05FV1MKK0BAIC05MSw2ICs5MSw5IEBAIENvcmUgYW5kIEJ1aWx0aW5zCisgICBQeXRob24uaCBoZWFkZXIgdG8gZml4IGEgY29tcGlsYXRpb24gZXJyb3Igd2l0aCBPcGVuTVAuIFB5VGhyZWFkU3RhdGVfR0VUKCkKKyAgIGJlY29tZXMgYW4gYWxpYXMgdG8gUHlUaHJlYWRTdGF0ZV9HZXQoKSB0byBhdm9pZCBBQkkgaW5jb21wYXRpYmlsaWVzLgorIAorKy0gSXNzdWUgIzI2MTcxOiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBhbmQgaGVhcCBjb3JydXB0aW9uIGluCisrICB6aXBpbXBvcnRlci5nZXRfZGF0YSgpLgorKworIExpYnJhcnkKKyAtLS0tLS0tCisgCitJbmRleDogUHl0aG9uLTMuNS4xL01vZHVsZXMvemlwaW1wb3J0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy41LjEub3JpZy9Nb2R1bGVzL3ppcGltcG9ydC5jCisrKysgUHl0aG9uLTMuNS4xL01vZHVsZXMvemlwaW1wb3J0LmMKK0BAIC0xMTEyLDYgKzExMTIsMTEgQEAgZ2V0X2RhdGEoUHlPYmplY3QgKmFyY2hpdmUsIFB5T2JqZWN0ICp0bworICAgICB9CisgICAgIGZpbGVfb2Zmc2V0ICs9IGw7ICAgICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGRhdGEgKi8KKyAKKysgICAgaWYgKGRhdGFfc2l6ZSA+IExPTkdfTUFYIC0gMSkgeworKyAgICAgICAgZmNsb3NlKGZwKTsKKysgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorICAgICBieXRlc19zaXplID0gY29tcHJlc3MgPT0gMCA/IGRhdGFfc2l6ZSA6IGRhdGFfc2l6ZSArIDE7CisgICAgIGlmIChieXRlc19zaXplID09IDApCisgICAgICAgICBieXRlc19zaXplKys7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCmluZGV4IGNkMWE5NzguLjA2MTA1NjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCkBAIC00LDExICs0LDExIEBACiBUaGlzIHBhdGNoIG1ha2VzIHRoZSBuYXRpdmUgcHl0aG9uIGJpbmFyeSBtb2R1bGVzIGZpbmRhYmxlCiBpbiB0aGUgaW5zdGFsbCBwcm9jZXNzIG9mIHRoZSBob3N0IHB5dGhvbi4KIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiBEYXRlOiAyMDEyLzAzLzE0CiAKIFVwZGF0ZWQgZm9yIHB5dGhvbiAyLjcuMwotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiBEYXRlOiAyMDEyLzA1LzAxCiAKIEluZGV4OiBQeXRob24tMy4zLjByYzIvTGliL3N5c2NvbmZpZy5weQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCmluZGV4IDQ0ZWM0MjQuLjA1NmU4ZTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2gKQEAgLTcsMTAgKzcsMTAgQEAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KIAotSW5kZXg6IFB5dGhvbi0zLjUuMC9JbmNsdWRlL3B5dGhvbnJ1bi5oCitJbmRleDogUHl0aG9uLTMuNS4yL0luY2x1ZGUvcHl0aG9ucnVuLmgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMy41LjAub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCi0rKysgUHl0aG9uLTMuNS4wL0luY2x1ZGUvcHl0aG9ucnVuLmgKKy0tLSBQeXRob24tMy41LjIub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKysgUHl0aG9uLTMuNS4yL0luY2x1ZGUvcHl0aG9ucnVuLmgKIEBAIC0yMyw2ICsyMyw5IEBAIHR5cGVkZWYgc3RydWN0IHsKICB9IFB5Q29tcGlsZXJGbGFnczsKICAjZW5kaWYKQEAgLTIxLDEwICsyMSwxMCBAQAogICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICBQeUFQSV9GVU5DKGludCkgUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBQeUNvbXBpbGVyRmxhZ3MgKik7CiAgUHlBUElfRlVOQyhpbnQpIFB5UnVuX0FueUZpbGVGbGFncyhGSUxFICosIGNvbnN0IGNoYXIgKiwgUHlDb21waWxlckZsYWdzICopOwotSW5kZXg6IFB5dGhvbi0zLjUuMC9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorSW5kZXg6IFB5dGhvbi0zLjUuMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMC5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Ci0rKysgUHl0aG9uLTMuNS4wL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CistLS0gUHl0aG9uLTMuNS4yLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrKyBQeXRob24tMy41LjIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKIEBAIC0xOSw2ICsxOSw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCiAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKICBIQVNfVVNFUl9TSVRFID0gVHJ1ZQpAQCAtNDMsMjMgKzQzLDIzIEBACiAgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0JGFiaWZsYWdzLyRkaXN0X25hbWUnLAogICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKICAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKLUluZGV4OiBQeXRob24tMy41LjAvTGliL3B5ZG9jLnB5CitJbmRleDogUHl0aG9uLTMuNS4yL0xpYi9weWRvYy5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMC5vcmlnL0xpYi9weWRvYy5weQotKysrIFB5dGhvbi0zLjUuMC9MaWIvcHlkb2MucHkKLUBAIC0zOTMsNyArMzkzLDcgQEAgY2xhc3MgRG9jOgorLS0tIFB5dGhvbi0zLjUuMi5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0zLjUuMi9MaWIvcHlkb2MucHkKK0BAIC0zODQsNyArMzg0LDcgQEAgY2xhc3MgRG9jOgorICAgICBkb2Ntb2R1bGUgPSBkb2NjbGFzcyA9IGRvY3JvdXRpbmUgPSBkb2NvdGhlciA9IGRvY3Byb3BlcnR5ID0gZG9jZGF0YSA9IGZhaWwKICAKLSAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwgc2VsZi5QWVRIT05ET0NTKQorICAgICBkZWYgZ2V0ZG9jbG9jKHNlbGYsIG9iamVjdCwKKy0gICAgICAgICAgICAgICAgICBiYXNlZGlyPW9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgYmFzZWRpcj1vcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVkLiVkIiAlICBzeXMudmVyc2lvbl9pbmZvWzoyXSkpOgorICAgICAgICAgIiIiUmV0dXJuIHRoZSBsb2NhdGlvbiBvZiBtb2R1bGUgZG9jcyBvciBOb25lIiIiCiAgCi0tICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCAibGliIiwKLSsgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsIHN5cy5saWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24lZC4lZCIgJSAgc3lzLnZlcnNpb25faW5mb1s6Ml0pCi0gICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKLSAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAotSW5kZXg6IFB5dGhvbi0zLjUuMC9MaWIvdHJhY2UucHkKK0luZGV4OiBQeXRob24tMy41LjIvTGliL3RyYWNlLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvTGliL3RyYWNlLnB5Ci0rKysgUHl0aG9uLTMuNS4wL0xpYi90cmFjZS5weQorLS0tIFB5dGhvbi0zLjUuMi5vcmlnL0xpYi90cmFjZS5weQorKysrIFB5dGhvbi0zLjUuMi9MaWIvdHJhY2UucHkKIEBAIC03NDksMTAgKzc0OSwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgogICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCiAgCkBAIC03MywxMSArNzMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQogICAgICAgICAgICAgICAgICBzID0gb3MucGF0aC5ub3JtcGF0aChzKQogICAgICAgICAgICAgICAgICBpZ25vcmVfZGlycy5hcHBlbmQocykKLUluZGV4OiBQeXRob24tMy41LjAvTWFrZWZpbGUucHJlLmluCitJbmRleDogUHl0aG9uLTMuNS4yL01ha2VmaWxlLnByZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMC5vcmlnL01ha2VmaWxlLnByZS5pbgotKysrIFB5dGhvbi0zLjUuMC9NYWtlZmlsZS5wcmUuaW4KLUBAIC0xMDEsNiArMTAxLDggQEAgUFlfQ09SRV9DRkxBR1M9CSQoUFlfQ0ZMQUdTKSAkKFBZX0NGTEFHUworLS0tIFB5dGhvbi0zLjUuMi5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0zLjUuMi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDYsNiArMTA2LDggQEAgUFlfQ09SRV9DRkxBR1M9CSQoUFlfQ0ZMQUdTKSAkKFBZX0NGTEFHUwogIAogICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKICBNQUNIREVQPQlATUFDSERFUEAKQEAgLTg2LDcgKzg2LDcgQEAKICAKICAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKICBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACi1AQCAtMTIwLDcgKzEyMiw3IEBAIExJQkRJUj0JCUBsaWJkaXJACitAQCAtMTI1LDcgKzEyNyw3IEBAIExJQkRJUj0JCUBsaWJkaXJACiAgTUFORElSPQkJQG1hbmRpckAKICBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKICBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQpAQCAtOTUsNyArOTUsNyBAQAogIEFCSUZMQUdTPQlAQUJJRkxBR1NACiAgCiAgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcwotQEAgLTcyOSw2ICs3MzEsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CitAQCAtNzU1LDYgKzc1Nyw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKICAJCS1ERVhFQ19QUkVGSVg9JyIkKGV4ZWNfcHJlZml4KSInIFwKICAJCS1EVkVSU0lPTj0nIiQoVkVSU0lPTikiJyBcCiAgCQktRFZQQVRIPSciJChWUEFUSCkiJyBcCkBAIC0xMDMsNyArMTAzLDcgQEAKICAJCS1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL2dldHBhdGguYwogIAogIFByb2dyYW1zL3B5dGhvbi5vOiAkKHNyY2RpcikvUHJvZ3JhbXMvcHl0aG9uLmMKLUBAIC03OTgsNyArODAxLDcgQEAgJChPUENPREVfSCk6ICQoc3JjZGlyKS9MaWIvb3Bjb2RlLnB5ICQoTworQEAgLTgzNSw3ICs4MzgsNyBAQCAkKE9QQ09ERV9IKTogJChzcmNkaXIpL0xpYi9vcGNvZGUucHkgJChPCiAgUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQogIAogIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKQEAgLTExMiwyNSArMTEyLDI1IEBACiAgCiAgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYwogIAkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCi1JbmRleDogUHl0aG9uLTMuNS4wL01vZHVsZXMvZ2V0cGF0aC5jCitJbmRleDogUHl0aG9uLTMuNS4yL01vZHVsZXMvZ2V0cGF0aC5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKLSsrKyBQeXRob24tMy41LjAvTW9kdWxlcy9nZXRwYXRoLmMKLUBAIC0xMTcsOSArMTE3LDExIEBACi0gI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKy0tLSBQeXRob24tMy41LjIub3JpZy9Nb2R1bGVzL2dldHBhdGguYworKysrIFB5dGhvbi0zLjUuMi9Nb2R1bGVzL2dldHBhdGguYworQEAgLTEwNSw2ICsxMDUsMTMgQEAKKyAjZXJyb3IgIlBSRUZJWCwgRVhFQ19QUkVGSVgsIFZFUlNJT04sIGFuZCBWUEFUSCBtdXN0IGJlIGNvbnN0YW50IGRlZmluZWQiCiAgI2VuZGlmCiAgCiArI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgogKwotICNpZm5kZWYgUFlUSE9OUEFUSAotLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCi0tICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjaWZuZGVmIFBZVEhPTlBBVEgKICsjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCi0rICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgotICNlbmRpZgotIAorKyAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKysjZW5kaWYKKysKICAjaWZuZGVmIExBTkRNQVJLCi1AQCAtMTMwLDYgKzEzMiw3IEBAIHN0YXRpYyB3Y2hhcl90IHByZWZpeFtNQVhQQVRITEVOKzFdOworICNkZWZpbmUgTEFORE1BUksgTCJvcy5weSIKKyAjZW5kaWYKK0BAIC0xMTMsNiArMTIwLDcgQEAgc3RhdGljIHdjaGFyX3QgcHJlZml4W01BWFBBVEhMRU4rMV07CiAgc3RhdGljIHdjaGFyX3QgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKICBzdGF0aWMgd2NoYXJfdCBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwogIHN0YXRpYyB3Y2hhcl90ICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwpAQCAtMTM4LDEwICsxMzgsMTAgQEAKICAKICAvKiBHZXQgZmlsZSBzdGF0dXMuIEVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlIGVuY29kaW5nLiAqLwogIAotSW5kZXg6IFB5dGhvbi0zLjUuMC9QeXRob24vZ2V0cGxhdGZvcm0uYworSW5kZXg6IFB5dGhvbi0zLjUuMi9QeXRob24vZ2V0cGxhdGZvcm0uYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMC5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCi0rKysgUHl0aG9uLTMuNS4wL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistLS0gUHl0aG9uLTMuNS4yLm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysrKyBQeXRob24tMy41LjIvUHl0aG9uL2dldHBsYXRmb3JtLmMKIEBAIC0xMCwzICsxMCwyMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQogIHsKICAJcmV0dXJuIFBMQVRGT1JNOwpAQCAtMTY2LDExICsxNjYsMTEgQEAKICt7CiArCXJldHVybiBMSUI7CiArfQotSW5kZXg6IFB5dGhvbi0zLjUuMC9QeXRob24vc3lzbW9kdWxlLmMKK0luZGV4OiBQeXRob24tMy41LjIvUHl0aG9uL3N5c21vZHVsZS5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCi0rKysgUHl0aG9uLTMuNS4wL1B5dGhvbi9zeXNtb2R1bGUuYwotQEAgLTE3NjcsNiArMTc2NywxMCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorLS0tIFB5dGhvbi0zLjUuMi5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0zLjUuMi9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNzkwLDYgKzE3OTAsMTAgQEAgX1B5U3lzX0luaXQodm9pZCkKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRDb3B5cmlnaHQoKSkpOwogICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwbGF0Zm9ybSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOwpAQCAtMTgxLDExICsxODEsMTEgQEAKICAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZXhlY3V0YWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCksIC0xKSk7Ci1JbmRleDogUHl0aG9uLTMuNS4wL3NldHVwLnB5CitJbmRleDogUHl0aG9uLTMuNS4yL3NldHVwLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvc2V0dXAucHkKLSsrKyBQeXRob24tMy41LjAvc2V0dXAucHkKLUBAIC00NzIsNyArNDcyLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorLS0tIFB5dGhvbi0zLjUuMi5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTMuNS4yL3NldHVwLnB5CitAQCAtNDkyLDcgKzQ5Miw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKICAgICAgICAgICMgZGlyZWN0b3JpZXMgKGkuZS4gJy4nIGFuZCAnSW5jbHVkZScpIG11c3QgYmUgZmlyc3QuICBTZWUgaXNzdWUKICAgICAgICAgICMgMTA1MjAuCiAgICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKICAgICAgICAgICMgb25seSBjaGFuZ2UgdGhpcyBmb3IgY3Jvc3MgYnVpbGRzIGZvciAzLjMsIGlzc3VlcyBvbiBNYWdlaWEKICAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKLUBAIC01MzAsOCArNTMwLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorQEAgLTU1MCw4ICs1NTAsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CiAgICAgICAgICAjIGJlIGFzc3VtZWQgdGhhdCBubyBhZGRpdGlvbmFsIC1JLC1MIGRpcmVjdGl2ZXMgYXJlIG5lZWRlZC4KICAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CiAgICAgICAgICAgICAgbGliX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyArIFsKQEAgLTIwNCw3ICsyMDQsNyBAQAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgaW5jX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycyArIFsnL3Vzci9pbmNsdWRlJ10KICAgICAgICAgIGVsc2U6Ci1AQCAtNzE2LDExICs3MTUsMTEgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorQEAgLTc0MywxMSArNzQyLDExIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKICAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgogICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKICAgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKwpAQCAtMjE4LDEwICsyMTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1yZWFkbGluZV9leHRyYV9saW5rX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9cmVhZGxpbmVfbGlicykgKQogICAgICAgICAgZWxzZToKLUluZGV4OiBQeXRob24tMy41LjAvTGliL3N5c2NvbmZpZy5weQorSW5kZXg6IFB5dGhvbi0zLjUuMi9MaWIvc3lzY29uZmlnLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvTGliL3N5c2NvbmZpZy5weQotKysrIFB5dGhvbi0zLjUuMC9MaWIvc3lzY29uZmlnLnB5CistLS0gUHl0aG9uLTMuNS4yLm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0zLjUuMi9MaWIvc3lzY29uZmlnLnB5CiBAQCAtMjAsMTAgKzIwLDEwIEBAIF9fYWxsX18gPSBbCiAgCiAgX0lOU1RBTExfU0NIRU1FUyA9IHsKQEAgLTI2NCwxMSArMjY0LDExIEBACiAgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKICAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKICAgICAgICAgICdkYXRhJzogJ3t1c2VyYmFzZX0nLAotSW5kZXg6IFB5dGhvbi0zLjUuMC9jb25maWd1cmUuYWMKK0luZGV4OiBQeXRob24tMy41LjIvY29uZmlndXJlLmFjCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvY29uZmlndXJlLmFjCi0rKysgUHl0aG9uLTMuNS4wL2NvbmZpZ3VyZS5hYwotQEAgLTg1OCw2ICs4NTgsNDEgQEAgUExBVERJUj1wbGF0LSRNQUNIREVQCistLS0gUHl0aG9uLTMuNS4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTMuNS4yL2NvbmZpZ3VyZS5hYworQEAgLTg3Niw2ICs4NzYsNDEgQEAgUExBVERJUj1wbGF0LSRNQUNIREVQCiAgQUNfU1VCU1QoUExBVERJUikKICBBQ19TVUJTVChQTEFURk9STV9UUklQTEVUKQogIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLWZpeC1DVkUtMjAxNi0xMDAwMTEwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLWZpeC1DVkUtMjAxNi0xMDAwMTEwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMWI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2gKQEAgLTAsMCArMSwxNDggQEAKK0Zyb20gYWFiM2U4YzQzMmI5MDUwOGFjMTQ3NTUxMjhmNWE2ODdiZTJmZGY0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdsaSBZdSA8TWluZ2xpLll1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDIyIFNlcCAyMDE2IDE2OjM5OjQ5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHB5dGhvbjM6IGZpeCBDVkUtMjAxNi0xMDAwMTEwCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0lnbm9yZSB0aGUgSFRUUF9QUk9YWSB2YXJpYWJsZSB3aGVuIFJFUVVFU1RfTUVUSE9EIGVudmlyb25tZW50IGlzIHNldCwgd2hpY2gKK2luZGljYXRlcyB0aGF0IHRoZSBzY3JpcHQgaXMgaW4gQ0dJIG1vZGUuCisKK0lzc3VlICMyNzU2OCBSZXBvcnRlZCBhbmQgcGF0Y2ggY29udHJpYnV0ZWQgYnkgUsOpbWkgUmFtcGluLiBbIzI3NTY4XQorCitCYWNrcG9ydCBwYXRjaCBmcm9tIGh0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL3Jldi9hMGFjNTJlZDhmNzkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNi0xMDAwMTEwCitTaWduZWQtb2ZmLWJ5OiBNaW5nbGkgWXUgPE1pbmdsaS5ZdUB3aW5kcml2ZXIuY29tPgorLS0tCisgRG9jL2hvd3RvL3VybGxpYjIucnN0ICAgICAgICAgIHwgIDUgKysrKysKKyBEb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QgfCAxNyArKysrKysrKysrKysrKysrLQorIExpYi90ZXN0L3Rlc3RfdXJsbGliLnB5ICAgICAgICB8IDE0ICsrKysrKysrKysrKystCisgTGliL3VybGxpYi9yZXF1ZXN0LnB5ICAgICAgICAgIHwgIDYgKysrKysrCisgTWlzYy9ORVdTICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrKworIDUgZmlsZXMgY2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91cmxsaWIyLnJzdCBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAoraW5kZXggMjRhNDE1Ni4uZDJjNzk5MSAxMDA2NDQKKy0tLSBhL0RvYy9ob3d0by91cmxsaWIyLnJzdAorKysrIGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CitAQCAtNTM4LDYgKzUzOCwxMSBAQCBzZXR0aW5nIHVwIGEgYEJhc2ljIEF1dGhlbnRpY2F0aW9uYF8gaGFuZGxlcjogOjoKKyAgICAgdGhyb3VnaCBhIHByb3h5LiAgSG93ZXZlciwgdGhpcyBjYW4gYmUgZW5hYmxlZCBieSBleHRlbmRpbmcgdXJsbGliLnJlcXVlc3QgYXMKKyAgICAgc2hvd24gaW4gdGhlIHJlY2lwZSBbI11fLgorIAorKy4uIG5vdGU6OgorKworKyAgICBgYEhUVFBfUFJPWFlgYCB3aWxsIGJlIGlnbm9yZWQgaWYgYSB2YXJpYWJsZSBgYFJFUVVFU1RfTUVUSE9EYGAgaXMgc2V0OyBzZWUKKysgICAgdGhlIGRvY3VtZW50YXRpb24gb24gOmZ1bmM6YH51cmxsaWIucmVxdWVzdC5nZXRwcm94aWVzYC4KKysKKyAKKyBTb2NrZXRzIGFuZCBMYXllcnMKKyA9PT09PT09PT09PT09PT09PT0KK2RpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKK2luZGV4IDEzMzg5MDYuLjEyOTFhZWIgMTAwNjQ0CistLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKKysrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAorQEAgLTE3Myw2ICsxNzMsMTYgQEAgVGhlIDptb2Q6YHVybGxpYi5yZXF1ZXN0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAgICBJZiBib3RoIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBleGlzdCAoYW5kIGRpc2FncmVlKSwKKyAgICBsb3dlcmNhc2UgaXMgcHJlZmVycmVkLgorIAorKyAgICAuLiBub3RlOjoKKysKKysgICAgICAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQsIHdoaWNoIHVzdWFsbHkKKysgICAgICAgaW5kaWNhdGVzIHlvdXIgc2NyaXB0IGlzIHJ1bm5pbmcgaW4gYSBDR0kgZW52aXJvbm1lbnQsIHRoZSBlbnZpcm9ubWVudAorKyAgICAgICB2YXJpYWJsZSBgYEhUVFBfUFJPWFlgYCAodXBwZXJjYXNlIGBgX1BST1hZYGApIHdpbGwgYmUgaWdub3JlZC4gVGhpcyBpcworKyAgICAgICBiZWNhdXNlIHRoYXQgdmFyaWFibGUgY2FuIGJlIGluamVjdGVkIGJ5IGEgY2xpZW50IHVzaW5nIHRoZSAiUHJveHk6IiBIVFRQCisrICAgICAgIGhlYWRlci4gSWYgeW91IG5lZWQgdG8gdXNlIGFuIEhUVFAgcHJveHkgaW4gYSBDR0kgZW52aXJvbm1lbnQsIGVpdGhlciB1c2UKKysgICAgICAgYGBQcm94eUhhbmRsZXJgYCBleHBsaWNpdGx5LCBvciBtYWtlIHN1cmUgdGhlIHZhcmlhYmxlIG5hbWUgaXMgaW4KKysgICAgICAgbG93ZXJjYXNlIChvciBhdCBsZWFzdCB0aGUgYGBfcHJveHlgYCBzdWZmaXgpLgorKworIAorIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgcHJvdmlkZWQ6CisgCitAQCAtMjgwLDYgKzI5MCwxMSBAQCBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIHByb3ZpZGVkOgorICAgIGxpc3Qgb2YgaG9zdG5hbWUgc3VmZml4ZXMsIG9wdGlvbmFsbHkgd2l0aCBgYDpwb3J0YGAgYXBwZW5kZWQsIGZvciBleGFtcGxlCisgICAgYGBjZXJuLmNoLG5jc2EudWl1Yy5lZHUsc29tZS5ob3N0OjgwODBgYC4KKyAKKysgICAgLi4gbm90ZTo6CisrCisrICAgICAgIGBgSFRUUF9QUk9YWWBgIHdpbGwgYmUgaWdub3JlZCBpZiBhIHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQ7CisrICAgICAgIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LmdldHByb3hpZXNgLgorKworIAorIC4uIGNsYXNzOjogSFRUUFBhc3N3b3JkTWdyKCkKKyAKK0BAIC0xMTM4LDcgKzExNTMsNyBAQCB0aGUgcmV0dXJuZWQgYnl0ZXMgb2JqZWN0IHRvIHN0cmluZyBvbmNlIGl0IGRldGVybWluZXMgb3IgZ3Vlc3NlcworIHRoZSBhcHByb3ByaWF0ZSBlbmNvZGluZy4KKyAKKyBUaGUgZm9sbG93aW5nIFczQyBkb2N1bWVudCwgaHR0cHM6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvTy1jaGFyc2V0XCAsIGxpc3RzCistdGhlIHZhcmlvdXMgd2F5cyBpbiB3aGljaCBhIChYKUhUTUwgb3IgYSBYTUwgZG9jdW1lbnQgY291bGQgaGF2ZSBzcGVjaWZpZWQgaXRzCisrdGhlIHZhcmlvdXMgd2F5cyBpbiB3aGljaCBhbiAoWClIVE1MIG9yIGFuIFhNTCBkb2N1bWVudCBjb3VsZCBoYXZlIHNwZWNpZmllZCBpdHMKKyBlbmNvZGluZyBpbmZvcm1hdGlvbi4KKyAKKyBBcyB0aGUgcHl0aG9uLm9yZyB3ZWJzaXRlIHVzZXMgKnV0Zi04KiBlbmNvZGluZyBhcyBzcGVjaWZpZWQgaW4gaXRzIG1ldGEgdGFnLCB3ZQorZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKK2luZGV4IDVkMDVmOGQuLjI0NzU5OGEgMTAwNjQ0CistLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQorKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKK0BAIC0xLDQgKzEsNCBAQAorLSIiIlJlZ3Jlc3NzaW9uIHRlc3RzIGZvciB3aGF0IHdhcyBpbiBQeXRob24gMidzICJ1cmxsaWIiIG1vZHVsZSIiIgorKyIiIlJlZ3Jlc3Npb24gdGVzdHMgZm9yIHdoYXQgd2FzIGluIFB5dGhvbiAyJ3MgInVybGxpYiIgbW9kdWxlIiIiCisgCisgaW1wb3J0IHVybGxpYi5wYXJzZQorIGltcG9ydCB1cmxsaWIucmVxdWVzdAorQEAgLTIzMiw2ICsyMzIsMTggQEAgY2xhc3MgUHJveHlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnJlcXVlc3QucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCdhbm90aGVyZG9tYWluLmNvbTo4ODg4JykpCisgICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnJlcXVlc3QucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCduZXdkb21haW4uY29tOjEyMzQnKSkKKyAKKysgICAgZGVmIHRlc3RfcHJveHlfY2dpX2lnbm9yZShzZWxmKToKKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBzZWxmLmVudi5zZXQoJ0hUVFBfUFJPWFknLCAnaHR0cDovL3NvbWV3aGVyZTozMTI4JykKKysgICAgICAgICAgICBwcm94aWVzID0gdXJsbGliLnJlcXVlc3QuZ2V0cHJveGllc19lbnZpcm9ubWVudCgpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL3NvbWV3aGVyZTozMTI4JywgcHJveGllc1snaHR0cCddKQorKyAgICAgICAgICAgIHNlbGYuZW52LnNldCgnUkVRVUVTVF9NRVRIT0QnLCAnR0VUJykKKysgICAgICAgICAgICBwcm94aWVzID0gdXJsbGliLnJlcXVlc3QuZ2V0cHJveGllc19lbnZpcm9ubWVudCgpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaHR0cCcsIHByb3hpZXMpCisrICAgICAgICBmaW5hbGx5OgorKyAgICAgICAgICAgIHNlbGYuZW52LnVuc2V0KCdSRVFVRVNUX01FVEhPRCcpCisrICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoJ0hUVFBfUFJPWFknKQorKworICAgICBkZWYgdGVzdF9wcm94eV9ieXBhc3NfZW52aXJvbm1lbnRfaG9zdF9tYXRjaChzZWxmKToKKyAgICAgICAgIGJ5cGFzcyA9IHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudAorICAgICAgICAgc2VsZi5lbnYuc2V0KCdOT19QUk9YWScsCitkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5IGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CitpbmRleCAxNzMxZmUzLi4zYmUzMjdkIDEwMDY0NAorLS0tIGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5CisrKysgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKK0BAIC0yNDEyLDYgKzI0MTIsMTIgQEAgZGVmIGdldHByb3hpZXNfZW52aXJvbm1lbnQoKToKKyAgICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCkKKyAgICAgICAgIGlmIHZhbHVlIGFuZCBuYW1lWy02Ol0gPT0gJ19wcm94eSc6CisgICAgICAgICAgICAgcHJveGllc1tuYW1lWzotNl1dID0gdmFsdWUKKysgICAgIyBDVkUtMjAxNi0xMDAwMTEwIC0gSWYgd2UgYXJlIHJ1bm5pbmcgYXMgQ0dJIHNjcmlwdCwgZm9yZ2V0IEhUVFBfUFJPWFkKKysgICAgIyAobm9uLWFsbC1sb3dlcmNhc2UpIGFzIGl0IG1heSBiZSBzZXQgZnJvbSB0aGUgd2ViIHNlcnZlciBieSBhICJQcm94eToiCisrICAgICMgaGVhZGVyIGZyb20gdGhlIGNsaWVudAorKyAgICAjIElmICJwcm94eSIgaXMgbG93ZXJjYXNlLCBpdCB3aWxsIHN0aWxsIGJlIHVzZWQgdGhhbmtzIHRvIHRoZSBuZXh0IGJsb2NrCisrICAgIGlmICdSRVFVRVNUX01FVEhPRCcgaW4gb3MuZW52aXJvbjoKKysgICAgICAgIHByb3hpZXMucG9wKCdodHRwJywgTm9uZSkKKyAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG9zLmVudmlyb24uaXRlbXMoKToKKyAgICAgICAgIGlmIG5hbWVbLTY6XSA9PSAnX3Byb3h5JzoKKyAgICAgICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCitkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCitpbmRleCA0YWQyNTUxLi4yZmNjOTViIDEwMDY0NAorLS0tIGEvTWlzYy9ORVdTCisrKysgYi9NaXNjL05FV1MKK0BAIC0zMjksNiArMzI5LDEwIEBAIExpYnJhcnkKKyAtIElzc3VlICMyNjY0NDogUmFpc2UgVmFsdWVFcnJvciByYXRoZXIgdGhhbiBTeXN0ZW1FcnJvciB3aGVuIGEgbmVnYXRpdmUKKyAgIGxlbmd0aCBpcyBwYXNzZWQgdG8gU1NMU29ja2V0LnJlY3YoKSBvciByZWFkKCkuCisgCisrLSBJc3N1ZSAjMjc1Njg6IFByZXZlbnQgSFRUUG94eSBhdHRhY2sgKENWRS0yMDE2LTEwMDAxMTApLiBJZ25vcmUgdGhlCisrICBIVFRQX1BST1hZIHZhcmlhYmxlIHdoZW4gUkVRVUVTVF9NRVRIT0QgZW52aXJvbm1lbnQgaXMgc2V0LCB3aGljaCBpbmRpY2F0ZXMKKysgIHRoYXQgdGhlIHNjcmlwdCBpcyBpbiBDR0kgbW9kZS4KKysKKyAtIElzc3VlICMyMzgwNDogRml4IFNTTCByZWN2KDApIGFuZCByZWFkKDApIG1ldGhvZHMgdG8gcmV0dXJuIHplcm8gYnl0ZXMKKyAgIGluc3RlYWQgb2YgdXAgdG8gMTAyNC4KKyAKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCmluZGV4IDdiOTBmMTMuLjNlMmIxZDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2gKQEAgLTE4LDkgKzE4LDkgQEAKICAKICAgICAgZGVmIGxpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgogLSAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKLSsgICAgICAgIGlmIGRpci5zdGFydHN3aXRoKCIuIik6Ci0rICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKLSsgICAgICAgIHJldHVybiAiLUw9IiArIGRpcgorKyAgICAgICAgaWYgZGlyLnN0YXJ0c3dpdGgoIi8iKToKKysgICAgICAgICAgICByZXR1cm4gIi1MPSIgKyBkaXIKKysgICAgICAgIHJldHVybiAiLUwiICsgZGlyCiAgCiAgICAgIGRlZiBfaXNfZ2NjKHNlbGYsIGNvbXBpbGVyX25hbWUpOgogICAgICAgICAgcmV0dXJuICJnY2MiIGluIGNvbXBpbGVyX25hbWUgb3IgImcrKyIgaW4gY29tcGlsZXJfbmFtZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91c2VfcGFja2VkX2ltcG9ydGxpYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdXNlX3BhY2tlZF9pbXBvcnRsaWIucGF0Y2gKaW5kZXggNmM0YjBjZC4uNzA3MDhhMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91c2VfcGFja2VkX2ltcG9ydGxpYi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VzZV9wYWNrZWRfaW1wb3J0bGliLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogdGhpcyBhdm9pZHMgZXhlY3V0aW5nIHRoZSBiaW5hcnkgYW5kIGZvcmNlcyBpdCB0byB1c2UgdGhlIHBhY2tlZCBpbXBvcnRsaWIqLmggZmlsZXMuCiAKICAKLVNpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiAKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiAKIAogSW5kZXg6IFB5dGhvbi0zLjUuMC9NYWtlZmlsZS5wcmUuaW4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmJiM2NiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCi0KLURFUEVORFMgPSAicHl0aG9uMy1uYXRpdmUgbGliZmZpIGJ6aXAyIGRiIGdkYm0gb3BlbnNzbCByZWFkbGluZSBzcWxpdGUzIHpsaWIgdmlydHVhbC9saWJpbnRsIHh6IgotUFIgPSAiJHtJTkNfUFJ9LjAiCi1QWVRIT05fTUFKTUlOID0gIjMuNSIKLVBZVEhPTl9CSU5BQkk9ICIke1BZVEhPTl9NQUpNSU59bSIKLURJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKLURJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCi1TUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHogXAotZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAotZmlsZTovLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoIFwKLWZpbGU6Ly8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBcCi1maWxlOi8vMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBcCi1maWxlOi8vMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoIFwKLWZpbGU6Ly8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIFwKLWZpbGU6Ly8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggXAotZmlsZTovLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaCBcCi1maWxlOi8vMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggXAotZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCi1maWxlOi8vdHdlYWstTVVMVElBUkNILWZvci1wb3dlcnBjLWxpbnV4LWdudXNwZS5wYXRjaCBcCi0ke0RJU1RST19TUkNfVVJJfSBcCi0iCi0KLVNSQ19VUkkgKz0gIlwKLSAgICAgICAgICAgIGZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly91c2VfcGFja2VkX2ltcG9ydGxpYi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmFjLWZpeC1MSUJQTC5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJlOWVhNmYyNjIzZmZmY2RkODcxYjdiMTkxMTNmZGU4MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjNmQ1N2MwYzM2NmQ5MDYwYWI2YzBjZGY4ODllYmYzZDkyNzExZDQ2NmNjMDExOWM0NDFkYmYyNzQ2ZjcyNWM5IgotCi0jIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRkOThkMDFkNDcxZmFjOGQ4ZGJkZDk3NTIyOWRiYTAzIgotCi1TID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgotCi1pbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHl0aG9uM25hdGl2ZSBwa2djb25maWcKLQotQ09ORklHVVJFT1BUUyArPSAiIC0td2l0aC1zeXN0ZW0tZmZpICIKLQotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vIFwKLSAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xjaGZsYWdzPW5vIFwKLSAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9eWVzIFwKLSAgICAgICAgICAgICAgICBhY19jdl9idWdneV9nZXRhZGRyaW5mbz1ubyBcCi0gICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIFwKLSAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRjPW5vIFwKLSIKLQotVEFSR0VUX0NDX0FSQ0ggKz0gIi1ETkRFQlVHIC1mbm8taW5saW5lIgotU0RLX0NDX0FSQ0ggKz0gIi1ETkRFQlVHIC1mbm8taW5saW5lIgotRVhUUkFfT0VNQUtFICs9ICJDUk9TU19DT01QSUxFPXllcyIKLUVYVFJBX09FQ09ORiArPSAiQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyAtLXdpdGhvdXQtZW5zdXJlcGlwIgotCi1leHBvcnQgQ1JPU1NfQ09NUElMRSA9ICIke1RBUkdFVF9QUkVGSVh9IgotZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9CQVNFID0gIiR7Qn0iCi1leHBvcnQgX1BZVEhPTl9QUk9KRUNUX1NSQyA9ICIke1N9IgotZXhwb3J0IENDU0hBUkVEID0gIi1mUElDIgotCi0jIEZpeCBjdHlwZXMgY3Jvc3MgY29tcGlsYXRpb24KLWV4cG9ydCBDUk9TU1BZVEhPTlBBVEggPSAiJHtCfS9idWlsZC9saWIubGludXgtJHtUQVJHRVRfQVJDSH0tJHtQWVRIT05fTUFKTUlOfToke1N9L0xpYjoke1N9L0xpYi9wbGF0LWxpbnV4IgotCi0jIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCi1QWVRIT05MU0JPUFRTID0gIiIKLQotZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKLQlybSAtZiAke1N9L01ha2VmaWxlLm9yaWcKLQlhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKLX0KLQotZG9fY29tcGlsZSgpIHsKLSAgICAgICAgIyByZWdlbmVyYXRlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIHN5c3RlbSBoZWFkZXJzCi0gICAgICAgIGNkICR7U30vTGliL3BsYXQtbGludXgqCi0gICAgICAgIGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKLSAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKLSAgICAgICAgY2QgLQotCi0KLQkjIHJlbW92ZSBhbnkgYm9ndXMgTERfTElCUkFSWV9QQVRICi0Jc2VkIC1pIC1lIHMsUlVOU0hBUkVEPS4qLFJVTlNIQVJFRD0sIE1ha2VmaWxlCi0KLQlpZiBbICEgLWYgTWFrZWZpbGUub3JpZyBdOyB0aGVuCi0JCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5vcmlnCi0JZmkKLQlzZWQgLWkgLWUgJ3MsXkNPTkZJR1VSRV9MREZMQUdTPS4qLENPTkZJR1VSRV9MREZMQUdTPS1MLiAtTCR7U1RBR0lOR19MSUJESVJ9LGcnIFwKLQkJLWUgJ3MsbGliZGlyPSR7bGliZGlyfSxsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAotCQktZSAncyxsaWJleGVjZGlyPSR7bGliZXhlY2Rpcn0sbGliZXhlY2Rpcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSxnJyBcCi0JCS1lICdzLF5MSUJESVI9LiosTElCRElSPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKLQkJLWUgJ3MsaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9LGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAotCQktZSAncyxeSU5DTFVERURJUj0uKixJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKLQkJLWUgJ3MsXkNPTkZJTkNMVURFRElSPS4qLENPTkZJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKLQkJTWFrZWZpbGUKLQkjIHNhdmUgY29weSBvZiBpdCBub3csIGJlY2F1c2UgaWYgd2UgZG8gaXQgaW4gZG9faW5zdGFsbCBhbmQgCi0JIyB0aGVuIGNhbGwgZG9faW5zdGFsbCB0d2ljZSB3ZSBnZXQgTWFrZWZpbGUub3JpZyA9PSBNYWtlZmlsZS5zeXNyb290Ci0JaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLnN5c3Jvb3QKLQotCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAotCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKLQkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAotCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKLQkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAotCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKLQkJTElCPSR7YmFzZWxpYn0gXAotCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKLQkJT1BUPSIke0NGTEFHU30iIGxpYnB5dGhvbjMuc28KLQotCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAotCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKLQkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAotCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCi0JCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAotCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKLQkJTElCPSR7YmFzZWxpYn0gXAotCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKLQkJT1BUPSIke0NGTEFHU30iCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKLQkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgotCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCi0KLQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCi0JaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnCi0KLQkjIHJlcnVuIHRoZSBidWlsZCBvbmNlIGFnYWluIHdpdGggb3JpZ2luYWwgbWFrZWZpbGUgdGhpcyB0aW1lCi0JIyBydW4gaW5zdGFsbCBpbiBhIHNlcGFyYXRlIHN0ZXAgdG8gYXZvaWQgY29tcGlsZS9pbnN0YWxsIHJhY2UKLQlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKLQkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCi0JCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKLQkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAotCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKLQkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCi0JCUxJQj0ke2Jhc2VsaWJ9IFwKLQkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCi0JCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9Ci0JCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0JCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKLQkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCi0JCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAotCQlMSUI9JHtiYXNlbGlifSBcCi0JCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAotCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCi0KLQkjIGF2b2lkIGNvbmZsaWN0IHdpdGggMnRvMyBmcm9tIFB5dGhvbiAyCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vMnRvMwotCi0JaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKLQotCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KLQkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59Ci0JZmkKLQotCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnLmgKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKLQljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0gVEVSTUlORk9fRElSUz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8nCi19Ci0KLVNTVEFURV9TQ0FOX0ZJTEVTICs9ICJNYWtlZmlsZSIKLVBBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicHlfcGFja2FnZV9wcmVwcm9jZXNzIgotCi1weV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgewotCSMgY29weSBiYWNrIHRoZSBvbGQgTWFrZWZpbGUgdG8gZml4IHRhcmdldCBwYWNrYWdlCi0JaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQotCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKLQlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKLQkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAotCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5Ci19Ci0KLXJlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCi0KLSMgbWFudWFsIGRlcGVuZGVuY3kgYWRkaXRpb25zCi1SUFJPVklERVNfJHtQTn0tY29yZSA9ICIke1BOfSIKLVJSRUNPTU1FTkRTXyR7UE59LWNvcmUgPSAiJHtQTn0tcmVhZGxpbmUiCi1SUkVDT01NRU5EU18ke1BOfS1jcnlwdCA9ICJvcGVuc3NsIgotUlJFQ09NTUVORFNfJHtQTn0tY3J5cHRfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1vcGVuc3NsIgotCi1GSUxFU18ke1BOfS0ydG8zICs9ICIke2JpbmRpcn0vMnRvMy0ke1BZVEhPTl9NQUpNSU59IgotRklMRVNfJHtQTn0tcHlkb2MgKz0gIiR7YmluZGlyfS9weWRvYyR7UFlUSE9OX01BSk1JTn0gJHtiaW5kaXJ9L3B5ZG9jMyIKLUZJTEVTXyR7UE59LWlkbGUgKz0gIiR7YmluZGlyfS9pZGxlMyAke2JpbmRpcn0vaWRsZSR7UFlUSE9OX01BSk1JTn0iCi0KLVBBQ0tBR0VTID0rICIke1BOfS1weXZlbnYiCi1GSUxFU18ke1BOfS1weXZlbnYgKz0gIiR7YmluZGlyfS9weXZlbnYtJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHl2ZW52IgotCi0jIHBhY2thZ2UgbGlicHl0aG9uMwotUEFDS0FHRVMgPSsgImxpYnB5dGhvbjMgbGlicHl0aG9uMy1zdGF0aWNkZXYiCi1GSUxFU19saWJweXRob24zID0gIiR7bGliZGlyfS9saWJweXRob24qLnNvLioiCi1GSUxFU19saWJweXRob24zLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnLSR7UFlUSE9OX0JJTkFCSX0vbGlicHl0aG9uJHtQWVRIT05fQklOQUJJfS5hIgotSU5TQU5FX1NLSVBfJHtQTn0tZGV2ICs9ICJkZXYtZWxmIgotCi0jIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCi1QQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKLVJERVBFTkRTXyR7UE59LW1pc2MgKz0gIiR7UE59LWNvcmUiCi1SREVQRU5EU18ke1BOfS1tb2R1bGVzICs9ICIke1BOfS1taXNjIgotRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSIKLQotIyBjYXRjaCBtYW5wYWdlCi1QQUNLQUdFUyArPSAiJHtQTn0tbWFuIgotRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2Y2JiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNS4yLmJiCkBAIC0wLDAgKzEsMjI0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKworREVQRU5EUyA9ICJweXRob24zLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiB2aXJ0dWFsL2xpYmludGwgeHoiCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy41IgorUFlUSE9OX0JJTkFCST0gIiR7UFlUSE9OX01BSk1JTn1tIgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCitmaWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAorZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKK2ZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAorZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAorZmlsZTovLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaCBcCitmaWxlOi8vMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggXAorZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCitmaWxlOi8vdHdlYWstTVVMVElBUkNILWZvci1wb3dlcnBjLWxpbnV4LWdudXNwZS5wYXRjaCBcCiske0RJU1RST19TUkNfVVJJfSBcCisiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWMtZml4LUxJQlBMLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLWZpeC1DVkUtMjAxNi0xMDAwMTEwLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjg5MDZlZmJhY2ZjZGM3YzNjOTE5OGFlZWZhZmQxNTllIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwMTBmNTYxMDBiOWI3NDI1OWViY2Q1ZDRiMjk1YTMyMzI0YjU4YjUxNzQwM2ExMGQxYTJhYTdjYjIyYmNhNDAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTZiNjAyNTgxMzBlNGVkMTBkMzEwMTUxN2ViNWI5Mzg1IgorCisjIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBweXRob24zbmF0aXZlIHBrZ2NvbmZpZworCitDT05GSUdVUkVPUFRTICs9ICIgLS13aXRoLXN5c3RlbS1mZmkgIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJhY19jdl9oYXZlX2NoZmxhZ3M9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD15ZXMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRteD15ZXMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8gXAorIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiLUROREVCVUcgLWZuby1pbmxpbmUiCitTREtfQ0NfQVJDSCArPSAiLUROREVCVUcgLWZuby1pbmxpbmUiCitFWFRSQV9PRU1BS0UgKz0gIkNST1NTX0NPTVBJTEU9eWVzIgorRVhUUkFfT0VDT05GICs9ICJDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIC0td2l0aG91dC1lbnN1cmVwaXAiCisKK2V4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCitleHBvcnQgX1BZVEhPTl9QUk9KRUNUX0JBU0UgPSAiJHtCfSIKK2V4cG9ydCBfUFlUSE9OX1BST0pFQ1RfU1JDID0gIiR7U30iCitleHBvcnQgQ0NTSEFSRUQgPSAiLWZQSUMiCisKKyMgRml4IGNyb3NzIGNvbXBpbGF0aW9uIG9mIGRpZmZlcmVudCBtb2R1bGVzCitleHBvcnQgQ1JPU1NQWVRIT05QQVRIID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLzoke0J9L2J1aWxkL2xpYi5saW51eC0ke1RBUkdFVF9BUkNIfS0ke1BZVEhPTl9NQUpNSU59OiR7U30vTGliOiR7U30vTGliL3BsYXQtbGludXgiCisKKyMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKK1BZVEhPTkxTQk9QVFMgPSAiIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXJtIC1mICR7U30vTWFrZWZpbGUub3JpZworCWF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKKyAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eCoKKyAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisgICAgICAgICAgICAgICAgJHtTfS9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vZGxmY24uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXgvY2Ryb20uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbmV0aW5ldC9pbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9zeXMvdHlwZXMuaAorICAgICAgICBzZWQgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgLWkgKi5weQorICAgICAgICBjZCAtCisKKworCSMgcmVtb3ZlIGFueSBib2d1cyBMRF9MSUJSQVJZX1BBVEgKKwlzZWQgLWkgLWUgcyxSVU5TSEFSRUQ9LiosUlVOU0hBUkVEPSwgTWFrZWZpbGUKKworCWlmIFsgISAtZiBNYWtlZmlsZS5vcmlnIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLm9yaWcKKwlmaQorCXNlZCAtaSAtZSAncyxeQ09ORklHVVJFX0xERkxBR1M9LiosQ09ORklHVVJFX0xERkxBR1M9LUwuIC1MJHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxsaWJkaXI9JHtsaWJkaXJ9LGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSxsaWJleGVjZGlyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9LGcnIFwKKwkJLWUgJ3MsXkxJQkRJUj0uKixMSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0saW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5JTkNMVURFRElSPS4qLElOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeQ09ORklOQ0xVREVESVI9LiosQ09ORklOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQlNYWtlZmlsZQorCSMgc2F2ZSBjb3B5IG9mIGl0IG5vdywgYmVjYXVzZSBpZiB3ZSBkbyBpdCBpbiBkb19pbnN0YWxsIGFuZCAKKwkjIHRoZW4gY2FsbCBkb19pbnN0YWxsIHR3aWNlIHdlIGdldCBNYWtlZmlsZS5vcmlnID09IE1ha2VmaWxlLnN5c3Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUuc3lzcm9vdAorCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCU9QVD0iJHtDRkxBR1N9IiBsaWJweXRob24zLnNvCisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJT1BUPSIke0NGTEFHU30iCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKKwkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnCisKKwkjIHJlcnVuIHRoZSBidWlsZCBvbmNlIGFnYWluIHdpdGggb3JpZ2luYWwgbWFrZWZpbGUgdGhpcyB0aW1lCisJIyBydW4gaW5zdGFsbCBpbiBhIHNlcGFyYXRlIHN0ZXAgdG8gYXZvaWQgY29tcGlsZS9pbnN0YWxsIHJhY2UKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KKwkKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAorCisJIyBhdm9pZCBjb25mbGljdCB3aXRoIDJ0bzMgZnJvbSBQeXRob24gMgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9LzJ0bzMKKworCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5zeXNyb290ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fTUFKTUlOfSR7UFlUSE9OX0FCSX0vTWFrZWZpbGUKKworCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0gVEVSTUlORk9fRElSUz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8nCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJNYWtlZmlsZSIKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicHlfcGFja2FnZV9wcmVwcm9jZXNzIgorCitweV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCSMgY29weSBiYWNrIHRoZSBvbGQgTWFrZWZpbGUgdG8gZml4IHRhcmdldCBwYWNrYWdlCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fTUFKTUlOfSR7UFlUSE9OX0FCSX0vTWFrZWZpbGUKKwkjIFJlbW92ZSByZWZlcmVuY2VzIHRvIGJ1aWxkbWFjaGluZSBwYXRocyBpbiB0YXJnZXQgTWFrZWZpbGUgYW5kIF9zeXNjb25maWdkYXRhCisJc2VkIC1pIC1lICdzOi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH06OmcnIC1lIHM6Jy0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9Jzo6ZyBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fTUFKTUlOfSR7UFlUSE9OX0FCSX0vTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5Cit9CisKK3JlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCisKKyMgbWFudWFsIGRlcGVuZGVuY3kgYWRkaXRpb25zCitSUFJPVklERVNfJHtQTn0tY29yZSA9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmUgPSAiJHtQTn0tcmVhZGxpbmUiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdCA9ICJvcGVuc3NsIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHRfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1vcGVuc3NsIgorCitGSUxFU18ke1BOfS0ydG8zICs9ICIke2JpbmRpcn0vMnRvMy0ke1BZVEhPTl9NQUpNSU59IgorRklMRVNfJHtQTn0tcHlkb2MgKz0gIiR7YmluZGlyfS9weWRvYyR7UFlUSE9OX01BSk1JTn0gJHtiaW5kaXJ9L3B5ZG9jMyIKK0ZJTEVTXyR7UE59LWlkbGUgKz0gIiR7YmluZGlyfS9pZGxlMyAke2JpbmRpcn0vaWRsZSR7UFlUSE9OX01BSk1JTn0iCisKK1BBQ0tBR0VTID0rICIke1BOfS1weXZlbnYiCitGSUxFU18ke1BOfS1weXZlbnYgKz0gIiR7YmluZGlyfS9weXZlbnYtJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHl2ZW52IgorCisjIHBhY2thZ2UgbGlicHl0aG9uMworUEFDS0FHRVMgPSsgImxpYnB5dGhvbjMgbGlicHl0aG9uMy1zdGF0aWNkZXYiCitGSUxFU19saWJweXRob24zID0gIiR7bGliZGlyfS9saWJweXRob24qLnNvLioiCitGSUxFU19saWJweXRob24zLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnLSR7UFlUSE9OX0JJTkFCSX0vbGlicHl0aG9uJHtQWVRIT05fQklOQUJJfS5hIgorSU5TQU5FX1NLSVBfJHtQTn0tZGV2ICs9ICJkZXYtZWxmIgorCisjIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCitQQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gIiR7UE59LWNvcmUgJHtQTn0tZW1haWwgJHtQTn0tY29kZWNzICR7UE59LXRleHR1dGlscyAke1BOfS1hcmdwYXJzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZXMgKz0gIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgorCisjIGNhdGNoIG1hbnBhZ2UKK1BBQ0tBR0VTICs9ICIke1BOfS1tYW4iCitGSUxFU18ke1BOfS1tYW4gPSAiJHtkYXRhZGlyfS9tYW4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNmYxNTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi1yZXF1aXJlIHB5dGhvbi5pbmMKLURFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiIKLVBSID0gIiR7SU5DX1BSfSIKLQotRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgotRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKLVNSQ19VUkkgKz0gIlwKLSAgZmlsZTovLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoIFwKLSAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCi0gIGZpbGU6Ly8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoIFwKLSAgJHtESVNUUk9fU1JDX1VSSX0gXAotICBmaWxlOi8vbXVsdGlsaWIucGF0Y2ggXAotICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKLSAgZmlsZTovL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoIFwKLSAgZmlsZTovL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaCBcCi0gIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCi0gIGZpbGU6Ly9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggXAotICBmaWxlOi8vc2V0dXB0d2Vha3MucGF0Y2ggXAotICBmaWxlOi8vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaCBcCi0gIGZpbGU6Ly9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaCBcCi0gIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAotICBmaWxlOi8vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoIFwKLSAgZmlsZTovL3B5dGhvbi0yLjcuMy1yZW1vdmUtYnNkYi1ycGF0aC5wYXRjaCBcCi0gIGZpbGU6Ly9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoIFwKLSAgZmlsZTovL3J1bi1wdGVzdCBcCi0gIGZpbGU6Ly9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIFwKLSAgZmlsZTovL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoIFwKLSAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBcCi0gIGZpbGU6Ly9hZGQtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbi1kaXIgcHl0aG9ubmF0aXZlCi0KLUNPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCi0KLUVYVFJBX09FQ09ORiArPSAiYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8iCi0KLWRvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7Ci0Jcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCi0gICAgICAgIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQotfQotCi1kb19jb21waWxlKCkgewotICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKLSAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eDIKLSAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAotICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKLSAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKLSAgICAgICAgY2QgLQotCi0JIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAotCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQotCi0JaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgotCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZwotCWZpCi0Jc2VkIC1pIC1lICdzI15MREZMQUdTPS4qI0xERkxBR1M9JHtMREZMQUdTfSAtTC4gLUwke1NUQUdJTkdfTElCRElSfSNnJyBcCi0JCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKLQkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAotCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCi0JCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKLQkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCi0JCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCi0JCU1ha2VmaWxlCi0JIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAotCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAotCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290Ci0KLQlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKLQlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCi0KLQlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAotCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCi0JCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKLQkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAotCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKLQkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCi0JCU9QVD0iJHtDRkxBR1N9IgotfQotCi1kb19pbnN0YWxsKCkgewotCSMgbWFrZSBpbnN0YWxsIG5lZWRzIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSwgb3Igb3RoZXJ3aXNlIHRoZSBpbmNsdWVzIHdvdWxkCi0JIyBnbyB0byAke0R9JHtTVEFHSU5HLi4ufS8uLi4KLQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUub3JpZyBNYWtlZmlsZQotCi0JZXhwb3J0IENST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iCi0JZXhwb3J0IFBZVEhPTkJVSUxERElSPSIke0J9IgotCi0JIyBBZnRlciBzd2l6emxpbmcgdGhlIG1ha2VmaWxlLCB3ZSBuZWVkIHRvIHJ1biB0aGUgYnVpbGQgYWdhaW4uCi0JIyBpbnN0YWxsIGNhbiByYWNlIHdpdGggdGhlIGJ1aWxkIHNvIHdlIGhhdmUgdG8gcnVuIHRoaXMgZmlyc3QsIHRoZW4gaW5zdGFsbAotCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKLQkJQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyBcCi0JCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKLQkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAotCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKLQkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCi0JCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9Ci0JCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKLQkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAotCQlDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIFwKLQkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAotCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCi0JCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAotCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKLQkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAotCi0JaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKLQotCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KLQkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59Ci0JZmkKLQotCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9NQUpNSU59L3B5Y29uZmlnLmgKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKLQljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbjIuNyBQWVRIT05IT01FPScke3ByZWZpeH0nIFRFUk1JTkZPX0RJUlM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvJwotfQotCi1TU1RBVEVfU0NBTl9GSUxFUyArPSAiTWFrZWZpbGUiCi1QQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInB5X3BhY2thZ2VfcHJlcHJvY2VzcyIKLQotcHlfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKLQkjIGNvcHkgYmFjayB0aGUgb2xkIE1ha2VmaWxlIHRvIGZpeCB0YXJnZXQgcGFja2FnZQotCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKLQotCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKLQlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKLQkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAotCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5Ci19Ci0KLXJlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCi0KLSMgbWFudWFsIGRlcGVuZGVuY3kgYWRkaXRpb25zCi1SUFJPVklERVNfJHtQTn0tY29yZSA9ICIke1BOfSIKLVJSRUNPTU1FTkRTXyR7UE59LWNvcmUgPSAiJHtQTn0tcmVhZGxpbmUiCi1SUkVDT01NRU5EU18ke1BOfS1jb3JlX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIG5hdGl2ZXNkay1weXRob24tbW9kdWxlcyIKLVJSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCi0KLSMgcGFja2FnZSBsaWJweXRob24yCi1QQUNLQUdFUyA9KyAibGliJHtCUE59MiIKLUZJTEVTX2xpYiR7QlBOfTIgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKLQotIyBjYXRjaCBhbGwgdGhlIHJlc3QgKHVuc29ydGVkKQotUEFDS0FHRVMgKz0gIiR7UE59LW1pc2MiCi1GSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgotUkRFUEVORFNfJHtQTn0tbW9kdWxlcyArPSAiJHtQTn0tbWlzYyIKLVJERVBFTkRTXyR7UE59LXB0ZXN0ID0gIiR7UE59LW1vZHVsZXMiCi0jaW5oZXJpdCBwdGVzdCBhZnRlciAicmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMiIHNvIFBBQ0tBR0VTIGRvZXNuJ3QgZ2V0IG92ZXJ3cml0dGVuCi1pbmhlcml0IHB0ZXN0Ci0KLSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgaW5oZXJpdCBwdGVzdCBmb3IgdGhlIG92ZXJyaWRlIHRvIHRha2UgZWZmZWN0Ci1kb19pbnN0YWxsX3B0ZXN0KCkgewotCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KLQlzZWQgLWUgczpMSUJESVIvcHl0aG9uL3B0ZXN0OiR7UFRFU1RfUEFUSH06ZyBcCi0JIC1lIHM6TElCRElSOiR7bGliZGlyfTpnIFwKLQkgLWkgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0Ci19Ci0KLSMgY2F0Y2ggbWFucGFnZQotUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKLUZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmUzNWRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy4xMi5iYgpAQCAtMCwwICsxLDE3MSBAQAorcmVxdWlyZSBweXRob24uaW5jCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUgbGliZmZpIGJ6aXAyIGRiIGdkYm0gb3BlbnNzbCByZWFkbGluZSBzcWxpdGUzIHpsaWIiCitQUiA9ICIke0lOQ19QUn0iCisKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJICs9ICJcCisgIGZpbGU6Ly8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaCBcCisgIGZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorICBmaWxlOi8vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaCBcCisgICR7RElTVFJPX1NSQ19VUkl9IFwKKyAgZmlsZTovL211bHRpbGliLnBhdGNoIFwKKyAgZmlsZTovL2NnaV9weS5wYXRjaCBcCisgIGZpbGU6Ly9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaCBcCisgIGZpbGU6Ly9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggXAorICBmaWxlOi8vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggXAorICBmaWxlOi8vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIFwKKyAgZmlsZTovL3NldHVwdHdlYWtzLnBhdGNoIFwKKyAgZmlsZTovL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2ggXAorICBmaWxlOi8vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKKyAgZmlsZTovL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaCBcCisgIGZpbGU6Ly9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2ggXAorICBmaWxlOi8vZml4LW1ha2VmaWxlLWZvci1wdGVzdC5wYXRjaCBcCisgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICBmaWxlOi8vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaCBcCisgIGZpbGU6Ly91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaCBcCisgIGZpbGU6Ly9hZGQtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIFwKKyAgZmlsZTovL3B5dGhvbi1maXgtQ1ZFLTIwMTYtMTAwMDExMC5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBweXRob24tZGlyIHB5dGhvbm5hdGl2ZQorCitDT05GSUdVUkVPUFRTICs9ICIgLS13aXRoLXN5c3RlbS1mZmkgIgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBhY19jdl9maWxlX19kZXZfcHRjPW5vIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXJtIC1mICR7U30vTWFrZWZpbGUub3JpZworICAgICAgICBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIyByZWdlbmVyYXRlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIHN5c3RlbSBoZWFkZXJzCisgICAgICAgIGNkICR7U30vTGliL3BsYXQtbGludXgyCisgICAgICAgIGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAke1N9L1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9kbGZjbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9saW51eC9jZHJvbS5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9uZXRpbmV0L2luLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L3N5cy90eXBlcy5oCisgICAgICAgIHNlZCAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAtaSAqLnB5CisgICAgICAgIGNkIC0KKworCSMgcmVtb3ZlIGFueSBib2d1cyBMRF9MSUJSQVJZX1BBVEgKKwlzZWQgLWkgLWUgcyxSVU5TSEFSRUQ9LiosUlVOU0hBUkVEPSwgTWFrZWZpbGUKKworCWlmIFsgISAtZiBNYWtlZmlsZS5vcmlnIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLm9yaWcKKwlmaQorCXNlZCAtaSAtZSAncyNeTERGTEFHUz0uKiNMREZMQUdTPSR7TERGTEFHU30gLUwuIC1MJHtTVEFHSU5HX0xJQkRJUn0jZycgXAorCQktZSAncyxsaWJkaXI9JHtsaWJkaXJ9LGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSxsaWJleGVjZGlyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9LGcnIFwKKwkJLWUgJ3MsXkxJQkRJUj0uKixMSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0saW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5JTkNMVURFRElSPS4qLElOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeQ09ORklOQ0xVREVESVI9LiosQ09ORklOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQlNYWtlZmlsZQorCSMgc2F2ZSBjb3B5IG9mIGl0IG5vdywgYmVjYXVzZSBpZiB3ZSBkbyBpdCBpbiBkb19pbnN0YWxsIGFuZCAKKwkjIHRoZW4gY2FsbCBkb19pbnN0YWxsIHR3aWNlIHdlIGdldCBNYWtlZmlsZS5vcmlnID09IE1ha2VmaWxlLnN5c3Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUuc3lzcm9vdAorCisJZXhwb3J0IENST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iCisJZXhwb3J0IFBZVEhPTkJVSUxERElSPSIke0J9IgorCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCU9QVD0iJHtDRkxBR1N9IgorfQorCitkb19pbnN0YWxsKCkgeworCSMgbWFrZSBpbnN0YWxsIG5lZWRzIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSwgb3Igb3RoZXJ3aXNlIHRoZSBpbmNsdWVzIHdvdWxkCisJIyBnbyB0byAke0R9JHtTVEFHSU5HLi4ufS8uLi4KKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUub3JpZyBNYWtlZmlsZQorCisJZXhwb3J0IENST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iCisJZXhwb3J0IFBZVEhPTkJVSUxERElSPSIke0J9IgorCisJIyBBZnRlciBzd2l6emxpbmcgdGhlIG1ha2VmaWxlLCB3ZSBuZWVkIHRvIHJ1biB0aGUgYnVpbGQgYWdhaW4uCisJIyBpbnN0YWxsIGNhbiByYWNlIHdpdGggdGhlIGJ1aWxkIHNvIHdlIGhhdmUgdG8gcnVuIHRoaXMgZmlyc3QsIHRoZW4gaW5zdGFsbAorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KKwkKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCUNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IGluc3RhbGwKKworCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5zeXNyb290ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9weWNvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9weXRob24yLjcgUFlUSE9OSE9NRT0nJHtwcmVmaXh9JyBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgorUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3B5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwkjIFJlbW92ZSByZWZlcmVuY2VzIHRvIGJ1aWxkbWFjaGluZSBwYXRocyBpbiB0YXJnZXQgTWFrZWZpbGUgYW5kIF9zeXNjb25maWdkYXRhCisJc2VkIC1pIC1lICdzOi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH06OmcnIC1lIHM6Jy0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9Jzo6ZyBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc3lzY29uZmlnZGF0YS5weQorICAgIHB5dGhvbiAtbSBweV9jb21waWxlICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKK30KKworcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKK1JQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmVfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHQgPSAib3BlbnNzbCIKKworIyBwYWNrYWdlIGxpYnB5dGhvbjIKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0yIgorRklMRVNfbGliJHtCUE59MiA9ICIke2xpYmRpcn0vbGlicHl0aG9uKi5zby4qIgorCisjIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCitQQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCitSREVQRU5EU18ke1BOfS1tb2R1bGVzICs9ICIke1BOfS1taXNjIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiJHtQTn0tbW9kdWxlcyIKKyNpbmhlcml0IHB0ZXN0IGFmdGVyICJyZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYyIgc28gUEFDS0FHRVMgZG9lc24ndCBnZXQgb3ZlcndyaXR0ZW4KK2luaGVyaXQgcHRlc3QKKworIyBUaGlzIG11c3QgY29tZSBhZnRlciBpbmhlcml0IHB0ZXN0IGZvciB0aGUgb3ZlcnJpZGUgdG8gdGFrZSBlZmZlY3QKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfQorCXNlZCAtZSBzOkxJQkRJUi9weXRob24vcHRlc3Q6JHtQVEVTVF9QQVRIfTpnIFwKKwkgLWUgczpMSUJESVI6JHtsaWJkaXJ9OmcgXAorCSAtaSAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKK30KKworIyBjYXRjaCBtYW5wYWdlCitQQUNLQUdFUyArPSAiJHtQTn0tbWFuIgorRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIKaW5kZXggNTFkMWM1OS4uOTQzY2E1ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIKQEAgLTEsMTUgKzEsMTYgQEAKIFNVTU1BUlkgPSAiUWVtdSBoZWxwZXIgc2NyaXB0cyIKIExJQ0VOU0UgPSAiR1BMdjIiCi1SREVQRU5EU18ke1BOfSA9ICJuYXRpdmVzZGstcWVtdSIKK1JERVBFTkRTXyR7UE59ID0gIm5hdGl2ZXNkay1xZW11IG5hdGl2ZXNkay1weXRob24zLXN1YnByb2Nlc3MgXAorICAgICAgICAgICAgICAgICAgbmF0aXZlc2RrLXB5dGhvbjMtc2hlbGwgbmF0aXZlc2RrLXB5dGhvbjMtZmNudGwgXAorICAgICAgICAgICAgICAgICIKKwogUFIgPSAicjkiCiAKLQogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS90dW5jdGwuYztlbmRsaW5lPTQ7bWQ1PWZmM2EwOTk5NmJjNWZmZjZiYzVkNGUwYjRjMjhmOTk5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdTtlbmRsaW5lPTE4O21kNT03N2ZiZTQ0MmE4OGIxYmNkYzI5YzNiYTY3NzMzYjIxYiIKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdTtlbmRsaW5lPTE5O21kNT1hOGFkMTkwNWM3MDlhMmRlYWEwNTc2MDhlYmFmNzA1YSIKIAogCiBTUkNfVVJJID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUgXAotICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWludGVybmFsIFwKICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1hZGRwdGFibGUyaW1hZ2UgXAogICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzIFwKICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1pZnVwIFwKQEAgLTE4LDcgKzE5LDYgQEAKICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1leHRyYWN0LXNkayBcCiAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZXhwb3J0LXJvb3RmcyBcCiAgICAgICAgICAgIGZpbGU6Ly90dW5jdGwuYyBcCi0gICAgICAgICAgIGZpbGU6Ly9yYXcyZmxhc2guYyBcCiAgICAgICAgICAgIgogCiBTID0gIiR7V09SS0RJUn0iCkBAIC0yNyw4ICsyNyw2IEBACiAKIGRvX2NvbXBpbGUoKSB7CiAJJHtDQ30gdHVuY3RsLmMgLW8gdHVuY3RsCi0JJHtDQ30gcmF3MmZsYXNoLmMgLW8gcmF3MmZsYXNoLnNwaXR6Ci0JJHtDQ30gcmF3MmZsYXNoLmMgLW8gZmxhc2gycmF3LnNwaXR6IC1EZmxhc2gycmF3CiB9CiAKIGRvX2luc3RhbGwoKSB7CkBAIC0zNiwxMiArMzQsNCBAQAogCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9JHtDT1JFQkFTRX0vc2NyaXB0cy9vZS0qICR7RH0ke2JpbmRpcn0vCiAJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUqICR7RH0ke2JpbmRpcn0vCiAJaW5zdGFsbCB0dW5jdGwgJHtEfSR7YmluZGlyfS8KLQlpbnN0YWxsIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9LwotCWluc3RhbGwgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vCi0JbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC5ha2l0YQotCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2guYm9yem9pCi0JbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC50ZXJyaWVyCi0JbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy5ha2l0YQotCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcuYm9yem9pCi0JbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy50ZXJyaWVyCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvcmF3MmZsYXNoLmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvcmF3MmZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZmFmNjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbmVkSGFuZCBMdGQuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdOVSBHUEwgdjIuCi0gKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jZGVmaW5lIFRGUihfKQkJXwotI2RlZmluZSBWRVJCT1NFCi0jZGVmaW5lIFBCQVJfTEVOCTQwCi0KLSNkZWZpbmUgUEFSVElUSU9OX1NUQVJUCTB4MDA3MDAwMDAKLQotc3RhdGljIGNvbnN0IGludCBlY2NfcG9zOFtdID0gewotCTB4MCwgMHgxLCAweDIsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGVjY19wb3MxNltdID0gewotCTB4MCwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGVjY19wb3M2NFtdID0gewotCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCi0JMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAotfTsKLQotc3RhdGljIGNvbnN0IGludCBlY2NfYWtpdGFbXSA9IHsKLQkweDA1LCAweDAxLCAweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDE1LCAweDExLAotCTB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCi0JMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzNywKLX07Ci0KLXN0cnVjdCBqZmZzX21hcmtlcl9zIHsKLQlpbnQgcG9zOwotCXVpbnQ4X3QgdmFsdWU7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3M4W10gPSB7Ci0JeyAweDAzLCAweGZmIH0sIHsgMHgwNCwgMHhmZiB9LCB7IDB4MDYsIDB4ODUgfSwgeyAweDA3LCAweDE5IH0sCi0JeyAtMSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfcG9zMTZbXSA9IHsKLQl7IDB4MDgsIDB4ODUgfSwgeyAweDA5LCAweDE5IH0sIHsgMHgwYSwgMHgwMyB9LCB7IDB4MGIsIDB4MjAgfSwKLQl7IDB4MGMsIDB4MDggfSwgeyAweDBkLCAweDAwIH0sIHsgMHgwZSwgMHgwMCB9LCB7IDB4MGYsIDB4MDAgfSwKLQl7IC0xIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3M2NFtdID0gewotCXsgMHgwMiwgMHhmZiB9LCB7IDB4MDMsIDB4ZmYgfSwgeyAweDA0LCAweGZmIH0sIHsgMHgwNSwgMHhmZiB9LAotCXsgMHgwNiwgMHhmZiB9LCB7IDB4MDcsIDB4ZmYgfSwgeyAweDA4LCAweGZmIH0sIHsgMHgwOSwgMHhmZiB9LAotCXsgMHgwYSwgMHhmZiB9LCB7IDB4MGIsIDB4ZmYgfSwgeyAweDBjLCAweGZmIH0sIHsgMHgwZCwgMHhmZiB9LAotCXsgMHgwZSwgMHhmZiB9LCB7IDB4MGYsIDB4ZmYgfSwgeyAweDEwLCAweDg1IH0sIHsgMHgxMSwgMHgxOSB9LAotCXsgMHgxMiwgMHgwMyB9LCB7IDB4MTMsIDB4MjAgfSwgeyAweDE0LCAweDA4IH0sIHsgMHgxNSwgMHgwMCB9LAotCXsgMHgxNiwgMHgwMCB9LCB7IDB4MTcsIDB4MDAgfSwgeyAweDE4LCAweGZmIH0sIHsgMHgxOSwgMHhmZiB9LAotCXsgMHgxYSwgMHhmZiB9LCB7IDB4MWIsIDB4ZmYgfSwgeyAweDFjLCAweGZmIH0sIHsgMHgxZCwgMHhmZiB9LAotCXsgMHgxZSwgMHhmZiB9LCB7IDB4MWYsIDB4ZmYgfSwgeyAweDIwLCAweGZmIH0sIHsgMHgyMSwgMHhmZiB9LAotCXsgMHgyMiwgMHhmZiB9LCB7IDB4MjMsIDB4ZmYgfSwgeyAweDI0LCAweGZmIH0sIHsgMHgyNSwgMHhmZiB9LAotCXsgMHgyNiwgMHhmZiB9LCB7IDB4MjcsIDB4ZmYgfSwKLQl7IC0xIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9ha2l0YVtdID0gewotCXsgMHgwOCwgMHg4NSB9LCB7IDB4MDksIDB4MTkgfSwgeyAweDBhLCAweDAzIH0sIHsgMHgwYiwgMHgyMCB9LAotCXsgMHgwYywgMHgwOCB9LCB7IDB4MGQsIDB4MDAgfSwgeyAweDBlLCAweDAwIH0sIHsgMHgwZiwgMHgwMCB9LAotCXsgMHgxMCwgMHhmZiB9LAotCXsgLTEgfSwKLX07Ci0KLSNkZWZpbmUgTEVOKGFycmF5KQkoc2l6ZW9mKGFycmF5KSAvIHNpemVvZigqYXJyYXkpKQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVjY19zdHlsZV9zIHsKLQlpbnQgcGFnZV9zaXplOwotCWludCBvb2Jfc2l6ZTsKLQlpbnQgZWNjYnl0ZXM7Ci0JaW50IGVjY3NpemU7Ci0JY29uc3QgaW50ICplY2Nwb3M7Ci0JaW50IHJvbXNpemU7Ci0JY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgKmZyZWVwb3M7Ci19IHNwaXR6ID0gewotCTB4MjAwLCAweDEwLCAweDEwMCwgTEVOKGVjY19wb3MxNiksIGVjY19wb3MxNiwgMHgwMTAwMDAwMCwgZnJlZV9wb3MxNgotfSwgYWtpdGEgPSB7Ci0JMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCi19LCBib3J6b2kgPSB7Ci0JMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCi19LCB0ZXJyaWVyID0gewotCTB4ODAwLCAweDQwLCAweDEwMCwgTEVOKGVjY19ha2l0YSksIGVjY19ha2l0YSwgMHgwODAwMDAwMCwgZnJlZV9ha2l0YQotfTsKLQotc3RydWN0IGVjY19zdGF0ZV9zIHsKLQlpbnQgY291bnQ7Ci0JdWludDhfdCBjcDsKLQl1aW50OF90IGxwWzJdOwotCWNvbnN0IHN0cnVjdCBlY2Nfc3R5bGVfcyAqc3R5bGU7Ci19OwotCi0jaWZuZGVmIGZsYXNoMnJhdwotLyoKLSAqIFByZS1jYWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkuICBUYWJsZSBib3Jyb3dlZCBmcm9tIExpbnV4LgotICovCi1zdGF0aWMgY29uc3QgdWludDhfdCBlY2NfcHJlY2FsY190YWJsZVtdID0gewotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsCi0JMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLAotCTB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCi0JMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywKLQkweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksCi0JMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKLQkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLAotCTB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCi0JMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwKLQkweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsCi0JMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLAotCTB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCi0JMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwKLQkweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsCi0JMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKLQkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LAotCTB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCi0JMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywKLQkweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksCi0JMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLAotCTB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCi0JMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwKLQkweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsCi0JMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwKLX07Ci0KLS8qIFVwZGF0ZSBFQ0MgcGFyaXR5IGNvdW50ICovCi1zdGF0aWMgaW5saW5lIHVpbnQ4X3QgZWNjX2RpZ2VzdChzdHJ1Y3QgZWNjX3N0YXRlX3MgKnMsIHVpbnQ4X3Qgc2FtcGxlKSB7Ci0JdWludDhfdCBpZHggPSBlY2NfcHJlY2FsY190YWJsZVtzYW1wbGVdOwotCi0Jcy0+Y3AgXj0gaWR4ICYgMHgzZjsKLQlpZiAoaWR4ICYgMHg0MCkgewotCQlzLT5scFswXSBePSB+KHMtPmNvdW50ICYgMHhmZik7Ci0JCXMtPmxwWzFdIF49IHMtPmNvdW50ICYgMHhmZjsKLQl9Ci0Jcy0+Y291bnQgKys7Ci0KLQlyZXR1cm4gc2FtcGxlOwotfQotCi1zdGF0aWMgdm9pZCBidWZmZXJfZGlnZXN0KHN0cnVjdCBlY2Nfc3RhdGVfcyAqZWNjLAotCQljb25zdCB1aW50OF90ICpidWYsIHVpbnQ4X3QgKm91dCkgewotCWludCBpLCBscF9hWzJdOwotCi0JZWNjLT5scFswXSA9IDB4MDA7Ci0JZWNjLT5scFsxXSA9IDB4MDA7Ci0JZWNjLT5jcCA9IDB4MDA7Ci0JZWNjLT5jb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGVjYy0+c3R5bGUtPmVjY2J5dGVzOyBpICsrKQotCQllY2NfZGlnZXN0KGVjYywgYnVmW2ldKTsKLQotIyBkZWZpbmUgQlNIUihieXRlLCBmcm9tLCB0bykJKChlY2MtPmxwW2J5dGVdID4+IChmcm9tIC0gdG8pKSAmICgxIDw8IHRvKSkKLQlscF9hWzBdID0KLQkJQlNIUigwLCA0LCAwKSB8IEJTSFIoMCwgNSwgMikgfAotCQlCU0hSKDAsIDYsIDQpIHwgQlNIUigwLCA3LCA2KSB8Ci0JCUJTSFIoMSwgNCwgMSkgfCBCU0hSKDEsIDUsIDMpIHwKLQkJQlNIUigxLCA2LCA1KSB8IEJTSFIoMSwgNywgNyk7Ci0KLSMgZGVmaW5lIEJTSEwoYnl0ZSwgZnJvbSwgdG8pCSgoZWNjLT5scFtieXRlXSA8PCAodG8gLSBmcm9tKSkgJiAoMSA8PCB0bykpCi0JbHBfYVsxXSA9Ci0JCUJTSEwoMCwgMCwgMCkgfCBCU0hMKDAsIDEsIDIpIHwKLQkJQlNITCgwLCAyLCA0KSB8IEJTSEwoMCwgMywgNikgfAotCQlCU0hMKDEsIDAsIDEpIHwgQlNITCgxLCAxLCAzKSB8Ci0JCUJTSEwoMSwgMiwgNSkgfCBCU0hMKDEsIDMsIDcpOwotCi0Jb3V0WzBdID0gfmxwX2FbMV07Ci0Jb3V0WzFdID0gfmxwX2FbMF07Ci0Jb3V0WzJdID0gKH5lY2MtPmNwIDw8IDIpIHwgMHgwMzsKLX0KLQotc3RhdGljIHZvaWQgamZmczJfZm9ybWF0KGNvbnN0IHN0cnVjdCBlY2Nfc3RhdGVfcyAqZWNjLCB1aW50OF90IG9vYltdKSB7Ci0JY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgKmJ5dGU7Ci0JZm9yIChieXRlID0gZWNjLT5zdHlsZS0+ZnJlZXBvczsgYnl0ZS0+cG9zID49IDA7IGJ5dGUgKyspCi0JCW9vYltieXRlLT5wb3NdID0gYnl0ZS0+dmFsdWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1ZmZlcl9maWxsKGNvbnN0IHN0cnVjdCBlY2Nfc3RhdGVfcyAqZWNjLCB1aW50OF90IGJ1ZmZlcltdLAotCQlpbnQgKmxlbiwgaW50ICpwYXJ0aXRpb24sIGludCBjb3VudCwgdWludDhfdCBqZmZzX2J1ZmZlcltdKSB7Ci0JaW50IHJldDsKLQotCXN3aXRjaCAoKnBhcnRpdGlvbikgewotCWNhc2UgMDoKLQkJaWYgKGNvdW50IDwgUEFSVElUSU9OX1NUQVJUKSB7Ci0JCQltZW1jcHkoYnVmZmVyLCBqZmZzX2J1ZmZlciArIGNvdW50LAotCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyk7Ci0JCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7Ci0JCQlicmVhazsKLQkJfQotCQkqcGFydGl0aW9uID0gMTsKLQljYXNlIDE6Ci0JCWlmIChjb3VudCAtIFBBUlRJVElPTl9TVEFSVCA8IFBBUlRJVElPTl9TVEFSVCkgewotCQkJbWVtY3B5KGJ1ZmZlciwgamZmc19idWZmZXIgKyBjb3VudCAtIFBBUlRJVElPTl9TVEFSVCwKLQkJCQkJZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpOwotCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOwotCQkJYnJlYWs7Ci0JCX0KLQotCQl3aGlsZSAoKmxlbiA8IGVjYy0+c3R5bGUtPmVjY2J5dGVzKSB7Ci0JCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIgKyAqbGVuLCAweDgwMCAtICpsZW4pKTsKLQkJCWlmIChyZXQgPD0gMCkKLQkJCQlicmVhazsKLQkJCSpsZW4gKz0gcmV0OwotCQl9Ci0KLQkJaWYgKCpsZW4gPT0gMCkKLQkJCSpwYXJ0aXRpb24gPSAyOwotCQllbHNlIGlmICgqbGVuIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiXG5XYXJuaW5nOiAlaSBzdHJheSBieXRlc1xuIiwgKmxlbik7Ci0JCQltZW1zZXQoYnVmZmVyICsgKmxlbiwgMHhmZiwKLQkJCQkJZWNjLT5zdHlsZS0+ZWNjYnl0ZXMgLSAqbGVuKTsKLQkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKLQkJCWJyZWFrOwotCQl9IGVsc2UKLQkJCWJyZWFrOwotCWNhc2UgMjoKLQkJbWVtc2V0KGJ1ZmZlciwgMHhmZiwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpOwotCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7Ci0JCWJyZWFrOwotCX0KLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdKSB7Ci0Jc3RydWN0IGVjY19zdGF0ZV9zIGVjYzsKLQl1aW50OF90IGJ1ZmZlclsweDEwMDBdLCBlY2NfcGF5bG9hZFsweDQwXSwgcmVnc1szXSwgKmpmZnM7Ci0JaW50IHJldCwgbGVuLCBlY2NieXRlLCBjb3VudCwgcGFydGl0aW9uOwotCi0JLyogQ2hlY2sgaWYgd2UncmUgY2FsbGVkIGJ5ICJyYXcyZmxhc2guc3BpdHoiIG9yIHNpbWlsYXIgKi8KLQlsZW4gPSBzdHJsZW4oYXJndlswXSk7Ci0JaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA1LCAiYWtpdGEiKSkKLQkJZWNjLnN0eWxlID0gJmFraXRhOwotCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA2LCAiYm9yem9pIikpCi0JCWVjYy5zdHlsZSA9ICZib3J6b2k7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDcsICJ0ZXJyaWVyIikpCi0JCWVjYy5zdHlsZSA9ICZ0ZXJyaWVyOwotCWVsc2UKLQkJZWNjLnN0eWxlID0gJnNwaXR6OwotCi0jIGlmZGVmIFZFUkJPU0UKLQlmcHJpbnRmKHN0ZGVyciwgIlsiKTsKLSMgZW5kaWYKLQotCS8qIFNraXAgZmlyc3QgMTAgYnl0ZXMgKi8KLQlURlIocmVhZCgwLCBidWZmZXIsIDB4MTApKTsKLQotCWxlbiA9IDA7Ci0JamZmcyA9ICh1aW50OF90ICopIG1hbGxvYyhQQVJUSVRJT05fU1RBUlQpOwotCXdoaWxlIChsZW4gPCBQQVJUSVRJT05fU1RBUlQpIHsKLQkJcmV0ID0gVEZSKHJlYWQoMCwgamZmcyArIGxlbiwgUEFSVElUSU9OX1NUQVJUIC0gbGVuKSk7Ci0JCWlmIChyZXQgPD0gMCkKLQkJCWJyZWFrOwotCQlsZW4gKz0gcmV0OwotCX0KLQotCS8qIENvbnZlcnQgZGF0YSBmcm9tIHN0ZGluICovCi0JcGFydGl0aW9uID0gbGVuID0gZWNjYnl0ZSA9IGNvdW50ID0gMDsKLQltZW1zZXQoZWNjX3BheWxvYWQsIDB4ZmYsIGVjYy5zdHlsZS0+b29iX3NpemUpOwotCWpmZnMyX2Zvcm1hdCgmZWNjLCBlY2NfcGF5bG9hZCk7Ci0Jd2hpbGUgKGNvdW50IDwgZWNjLnN0eWxlLT5yb21zaXplKSB7Ci0JCWJ1ZmZlcl9maWxsKCZlY2MsIGJ1ZmZlciwgJmxlbiwgJnBhcnRpdGlvbiwgY291bnQsIGpmZnMpOwotCQlidWZmZXJfZGlnZXN0KCZlY2MsIGJ1ZmZlciwgcmVncyk7Ci0KLQkJZWNjX3BheWxvYWRbZWNjLnN0eWxlLT5lY2Nwb3NbZWNjYnl0ZSArK11dID0gcmVnc1swXTsKLQkJZWNjX3BheWxvYWRbZWNjLnN0eWxlLT5lY2Nwb3NbZWNjYnl0ZSArK11dID0gcmVnc1sxXTsKLQkJZWNjX3BheWxvYWRbZWNjLnN0eWxlLT5lY2Nwb3NbZWNjYnl0ZSArK11dID0gcmVnc1syXTsKLQotCQlURlIod3JpdGUoMSwgYnVmZmVyLCBlY2Muc3R5bGUtPmVjY2J5dGVzKSk7Ci0JCWNvdW50ICs9IGVjYy5zdHlsZS0+ZWNjYnl0ZXM7Ci0JCWxlbiAtPSBlY2Muc3R5bGUtPmVjY2J5dGVzOwotCQltZW1tb3ZlKGJ1ZmZlciwgYnVmZmVyICsgZWNjLnN0eWxlLT5lY2NieXRlcywgbGVuKTsKLQotCQlpZiAoZWNjYnl0ZSA+PSBlY2Muc3R5bGUtPmVjY3NpemUpIHsKLQkJCVRGUih3cml0ZSgxLCBlY2NfcGF5bG9hZCwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSkpOwotCQkJZWNjYnl0ZSA9IDA7Ci0JCQltZW1zZXQoZWNjX3BheWxvYWQsIDB4ZmYsIGVjYy5zdHlsZS0+b29iX3NpemUpOwotCQkJaWYgKHBhcnRpdGlvbiA8IDIpCi0JCQkJamZmczJfZm9ybWF0KCZlY2MsIGVjY19wYXlsb2FkKTsKLQkJfQotCi0jIGlmZGVmIFZFUkJPU0UKLQkJaWYgKGNvdW50ICogUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUgPgotCQkJCShjb3VudCAtIGVjYy5zdHlsZS0+ZWNjYnl0ZXMpICoKLQkJCQlQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSkKLQkJCWZwcmludGYoc3RkZXJyLCAiIyIpOwotIyBlbmRpZgotCX0KLQotIyBpZmRlZiBWRVJCT1NFCi0JZnByaW50ZihzdGRlcnIsICJdXG4iKTsKLSMgZW5kaWYKLQlmcmVlKGpmZnMpOwotCXJldHVybiAwOwotfQotI2Vsc2UKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmVudnBbXSkgewotCXN0cnVjdCBlY2Nfc3RhdGVfcyBlY2M7Ci0JdWludDhfdCBidWZmZXJbMHgxMDAwXTsKLQlpbnQgcmV0LCBsZW4sIGNvdW50OwotCi0JLyogQ2hlY2sgaWYgd2UncmUgY2FsbGVkIGJ5ICJmbGFzaDJyYXcuc3BpdHoiIG9yIHNpbWlsYXIgKi8KLQlsZW4gPSBzdHJsZW4oYXJndlswXSk7Ci0JaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA1LCAiYWtpdGEiKSkKLQkJZWNjLnN0eWxlID0gJmFraXRhOwotCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA2LCAiYm9yem9pIikpCi0JCWVjYy5zdHlsZSA9ICZib3J6b2k7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDcsICJ0ZXJyaWVyIikpCi0JCWVjYy5zdHlsZSA9ICZ0ZXJyaWVyOwotCWVsc2UKLQkJZWNjLnN0eWxlID0gJnNwaXR6OwotCi0jIGlmZGVmIFZFUkJPU0UKLQlmcHJpbnRmKHN0ZGVyciwgIlsiKTsKLSMgZW5kaWYKLQotCS8qIENvbnZlcnQgZGF0YSBmcm9tIHN0ZGluICovCi0JY291bnQgPSAwOwotCXdoaWxlIChjb3VudCA8IGVjYy5zdHlsZS0+cm9tc2l6ZSkgewotCQlsZW4gPSAwOwotCQl3aGlsZSAobGVuIDwgZWNjLnN0eWxlLT5wYWdlX3NpemUpIHsKLQkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciArIGxlbiwKLQkJCQkJCWVjYy5zdHlsZS0+cGFnZV9zaXplIC0gbGVuKSk7Ci0JCQlpZiAocmV0IDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlsZW4gKz0gcmV0OwotCQl9Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWJyZWFrOwotCQlpZiAobGVuIDwgZWNjLnN0eWxlLT5wYWdlX3NpemUpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiXG5XYXJuaW5nOiAlaSBzdHJheSBieXRlc1xuIiwgbGVuKTsKLQkJfQotCi0JCVRGUih3cml0ZSgxLCBidWZmZXIsIGVjYy5zdHlsZS0+cGFnZV9zaXplKSk7Ci0KLQkJY291bnQgKz0gbGVuOwotCQlsZW4gPSAwOwotCQl3aGlsZSAobGVuIDwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSkgewotCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyLCBlY2Muc3R5bGUtPm9vYl9zaXplIC0gbGVuKSk7Ci0JCQlpZiAocmV0IDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlsZW4gKz0gcmV0OwotCQl9Ci0KLSMgaWZkZWYgVkVSQk9TRQotCQlpZiAoY291bnQgKiBQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSA+Ci0JCQkJKGNvdW50IC0gZWNjLnN0eWxlLT5wYWdlX3NpemUpICoKLQkJCQlQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSkKLQkJCWZwcmludGYoc3RkZXJyLCAiIyIpOwotIyBlbmRpZgotCX0KLQotIyBpZmRlZiBWRVJCT1NFCi0JZnByaW50ZihzdGRlcnIsICJdXG4iKTsKLSMgZW5kaWYKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jCmluZGV4IDI2OWM4OTguLmI0NmU3ZjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMKQEAgLTIsNyArMiw3IEBACiBIT01FUEFHRSA9ICJodHRwOi8vcWVtdS5vcmciCiBMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCiBERVBFTkRTID0gImdsaWItMi4wIHpsaWIgcGl4bWFuIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICJiYXNoIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAiYmFzaCIKIFJERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggbWFrZSIKIAogcmVxdWlyZSBxZW11LXRhcmdldHMuaW5jCkBAIC0yMSw2ICsyMSw3IEBACiAgICAgZmlsZTovL3dhY29tLnBhdGNoIFwKICAgICBmaWxlOi8vYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoIFwKICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICBmaWxlOi8vMDAwMS10YXJnZXQtbWlwcy1hZGQtMjRLRWMtQ1BVLWRlZmluaXRpb24ucGF0Y2ggXAogICAgICIKIAogU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIlwKQEAgLTMwLDggKzMxLDEyIEBACiAKIEVYVFJBX09FQ09ORiArPSAiLS10YXJnZXQtbGlzdD0ke0BnZXRfcWVtdV90YXJnZXRfbGlzdChkKX0gLS1kaXNhYmxlLXdlcnJvciAgLS1kaXNhYmxlLWJsdWV6IC0tZGlzYWJsZS1saWJpc2NzaSAtLXdpdGgtc3lzdGVtLXBpeG1hbiAtLWV4dHJhLWNmbGFncz0nJHtDRkxBR1N9JyIKIAotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXRhcmdldC1saXN0PSR7QGdldF9xZW11X3RhcmdldF9saXN0KGQpfSAtLWRpc2FibGUtd2Vycm9yIFwKLQkJCQkiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0tdGFyZ2V0LWxpc3Q9JHtAZ2V0X3FlbXVfdGFyZ2V0X2xpc3QoZCl9IC0tZGlzYWJsZS13ZXJyb3IiCisKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBMRD0nJHtMRH0nIEFSPScke0FSfScgT0JKQ09QWT0nJHtPQkpDT1BZfScgTERGTEFHUz0nJHtMREZMQUdTfSciCisKK0xERkxBR1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLWZ1c2UtbGQ9YmZkIgorCiBleHBvcnQgTElCVE9PTD0iJHtIT1NUX1NZU30tbGlidG9vbCIKIAogZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgewpAQCAtMzksMTMgKzQ0LDEyIEBACiAJQkhPU1RfUEtHQ09ORklHX1BBVEg9JChQQVRIPS91c3IvYmluOi9iaW4gcGtnLWNvbmZpZyAtLXZhcmlhYmxlIHBjX3BhdGggcGtnLWNvbmZpZyB8fCBlY2hvICIiKQogCWlmIFsgISAteiAiJEJIT1NUX1BLR0NPTkZJR19QQVRIIiBdOyB0aGVuCiAJCWV4cG9ydCBQS0dfQ09ORklHX1BBVEg9JFBLR19DT05GSUdfUEFUSDokQkhPU1RfUEtHQ09ORklHX1BBVEgKLQkJIyBsaW5rIHdpdGggc3lzdGVtIGRidXMgb24gVWJ1bnR1IDE1LjEwCi0JCSMgRklYTUU6IHJlbW92ZSBiZWxvdyA0IGxpbmVzIHdoZW4gb2UgZGJ1cyBpcyB1cGdyYWRlZAotCQlpZiBbIC1yIC9ldGMvbHNiLXJlbGVhc2UgLWEgIiQobHNiX3JlbGVhc2UgLWlzKSQobHNiX3JlbGVhc2UgLXJzKSIgPSAiVWJ1bnR1MTUuMTAiIF0gOyB0aGVuCi0JCQlsaWJzPSQoUEtHX0NPTkZJR19BTExPV19TWVNURU1fTElCUz0xIFBLR19DT05GSUdfUEFUSD0kQkhPU1RfUEtHQ09ORklHX1BBVEggUEFUSD0vdXNyL2JpbjovYmluIHBrZy1jb25maWcgLS1saWJzIGRidXMtMSB8fCBlY2hvICIiKQotCQkJWyAtbiAiJGxpYnMiIF0gJiYgZXhwb3J0IExERkxBR1M9IiRsaWJzICRMREZMQUdTIgotCQlmaQogCWZpCisKKwkjIEFsdGVyIHRhcmdldCBtYWtlZmlsZXMgdG8gYWNjZXB0IENGTEFHUyBzZXQgdmlhIGVudgorCXNlZCAtaSAtciBcCisJCS1lICdzL14oQ3xPUF9DfEhFTFBFUl9DKUZMQUdTPS9cMUZMQUdTKz0vJyBcCisJCSIke1N9Ii9NYWtlZmlsZSAiJHtTfSIvTWFrZWZpbGUudGFyZ2V0CiB9CiAKIEtWTUVOQUJMRSA9ICItLWVuYWJsZS1rdm0iCkBAIC03Miw3ICs3Niw3IEBACiAJY3AgLXJMICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0KIAlmaW5kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzIC10eXBlIGYgLW5hbWUgIiouW1NzaGNvZF0iIHwgeGFyZ3MgLWkgcm0gLXJmIHt9CiAKLQljcCAke1N9L3Rlc3RzL01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCisJY3AgJHtTfS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCiB9CiAKIGRvX2luc3RhbGwgKCkgewpAQCAtMTAzLDkgKzEwNyw4IEBACiAJIgogUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICJmZHQgYWxzYSB1dWlkIgogUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPz89ICJmZHQgc2RsIgotTkFUSVZFREVQUyA9ICIiCi1OQVRJVkVERVBTX2NsYXNzLW5hdGl2ZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdsaWJ4ZXh0LW5hdGl2ZScsICcnLGQpfSIKLVBBQ0tBR0VDT05GSUdbc2RsXSA9ICItLWVuYWJsZS1zZGwsLS1kaXNhYmxlLXNkbCxsaWJzZGwgJHtOQVRJVkVERVBTfSwiCisKK1BBQ0tBR0VDT05GSUdbc2RsXSA9ICItLWVuYWJsZS1zZGwsLS1kaXNhYmxlLXNkbCxsaWJzZGwiCiBQQUNLQUdFQ09ORklHW3ZpcnRmc10gPSAiLS1lbmFibGUtdmlydGZzIC0tZW5hYmxlLWF0dHIsLS1kaXNhYmxlLXZpcnRmcyxsaWJjYXAgYXR0ciwiCiBQQUNLQUdFQ09ORklHW2Fpb10gPSAiLS1lbmFibGUtbGludXgtYWlvLC0tZGlzYWJsZS1saW51eC1haW8sbGliYWlvLCIKIFBBQ0tBR0VDT05GSUdbeGZzXSA9ICItLWVuYWJsZS14ZnNjdGwsLS1kaXNhYmxlLXhmc2N0bCx4ZnNwcm9ncywiCkBAIC0xMTcsNyArMTIwLDcgQEAKIFBBQ0tBR0VDT05GSUdbbnNzXSA9ICItLWVuYWJsZS1zbWFydGNhcmQsLS1kaXNhYmxlLXNtYXJ0Y2FyZCxuc3MsIgogUEFDS0FHRUNPTkZJR1t1dWlkXSA9ICItLWVuYWJsZS11dWlkLC0tZGlzYWJsZS11dWlkLHV0aWwtbGludXgsIgogUEFDS0FHRUNPTkZJR1tjdXJzZXNdID0gIi0tZW5hYmxlLWN1cnNlcywtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgotUEFDS0FHRUNPTkZJR1tndGsrXSA9ICItLWVuYWJsZS1ndGsgLS1lbmFibGUtdnRlLC0tZGlzYWJsZS1ndGsgLS1kaXNhYmxlLXZ0ZSxndGsrIGxpYnZ0ZSwiCitQQUNLQUdFQ09ORklHW2d0aytdID0gIi0tZW5hYmxlLWd0ayAtLXdpdGgtZ3RrYWJpPTMuMCAtLWVuYWJsZS12dGUsLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtdnRlLGd0ayszIHZ0ZSIKIFBBQ0tBR0VDT05GSUdbbGliY2FwLW5nXSA9ICItLWVuYWJsZS1jYXAtbmcsLS1kaXNhYmxlLWNhcC1uZyxsaWJjYXAtbmcsIgogUEFDS0FHRUNPTkZJR1tzc2gyXSA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIsIgogUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0tZW5hYmxlLWdjcnlwdCwtLWRpc2FibGUtZ2NyeXB0LGdjcnlwdCwiCkBAIC0xMjksNiArMTMyLDcgQEAKIFBBQ0tBR0VDT05GSUdbbHpvXSA9ICItLWVuYWJsZS1sem8sLS1kaXNhYmxlLWx6byxsem8iCiBQQUNLQUdFQ09ORklHW251bWFdID0gIi0tZW5hYmxlLW51bWEsLS1kaXNhYmxlLW51bWEsbnVtYWN0bCIKIFBBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLWVuYWJsZS1nbnV0bHMsLS1kaXNhYmxlLWdudXRscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLWVuYWJsZS1iemlwMiwtLWRpc2FibGUtYnppcDIsYnppcDIiCiAKIEVYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYWxzYScsICctLWF1ZGlvLWRydi1saXN0PW9zcyxhbHNhJywgJycsIGQpfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvMDAwMS10YXJnZXQtbWlwcy1hZGQtMjRLRWMtQ1BVLWRlZmluaXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS8wMDAxLXRhcmdldC1taXBzLWFkZC0yNEtFYy1DUFUtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGRiZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvMDAwMS10YXJnZXQtbWlwcy1hZGQtMjRLRWMtQ1BVLWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA5MjZiYzE5NGY5MThkNDZiZDkzNTU3YjE1ZGE4MTUzYjZhOTRhMWQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGdpdEBhbmRyZWQubmV0PgorRGF0ZTogTW9uLCAyNSBKdWwgMjAxNiAyMzo1ODoyMiArMDEwMAorU3ViamVjdDogW1BBVENIXSB0YXJnZXQtbWlwczogYWRkIDI0S0VjIENQVSBkZWZpbml0aW9uCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0RlZmluZSBhIG5ldyBDUFUgZGVmaW5pdGlvbiBzdXBwb3J0aW5nIDI0S0VjIGNvcmVzLCBzaW1pbGFyIHRvCit0aGUgZXhpc3RpbmcgMjRLYywgYnV0IHdpdGggYWRkZWQgc3VwcG9ydCBmb3IgRFNQIGluc3RydWN0aW9ucworYW5kIE1JUFMxNmUgKGFuZCB3aXRob3V0IEZQVSkuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxnaXRAYW5kcmVkLm5ldD4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9saXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9xZW11LWRldmVsLzIwMTYtMDcvbXNnMDU3NzguaHRtbF0KKyB0YXJnZXQtbWlwcy90cmFuc2xhdGVfaW5pdC5jIHwgMjIgKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90YXJnZXQtbWlwcy90cmFuc2xhdGVfaW5pdC5jIGIvdGFyZ2V0LW1pcHMvdHJhbnNsYXRlX2luaXQuYworaW5kZXggMzllZDVjNC4uNmFlMjNlNCAxMDA2NDQKKy0tLSBhL3RhcmdldC1taXBzL3RyYW5zbGF0ZV9pbml0LmMKKysrKyBiL3RhcmdldC1taXBzL3RyYW5zbGF0ZV9pbml0LmMKK0BAIC0yNTYsNiArMjU2LDI4IEBAIHN0YXRpYyBjb25zdCBtaXBzX2RlZl90IG1pcHNfZGVmc1tdID0KKyAgICAgICAgIC5tbXVfdHlwZSA9IE1NVV9UWVBFX1I0MDAwLAorICAgICB9LAorICAgICB7CisrICAgICAgICAubmFtZSA9ICIyNEtFYyIsCisrICAgICAgICAuQ1AwX1BSaWQgPSAweDAwMDE5NjAwLAorKyAgICAgICAgLkNQMF9Db25maWcwID0gTUlQU19DT05GSUcwIHwgKDB4MSA8PCBDUDBDMF9BUikgfAorKyAgICAgICAgICAgICAgICAgICAgICAgKE1NVV9UWVBFX1I0MDAwIDw8IENQMEMwX01UKSwKKysgICAgICAgIC5DUDBfQ29uZmlnMSA9IE1JUFNfQ09ORklHMSB8ICgxNSA8PCBDUDBDMV9NTVUpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICgwIDw8IENQMEMxX0lTKSB8ICgzIDw8IENQMEMxX0lMKSB8ICgxIDw8IENQMEMxX0lBKSB8CisrICAgICAgICAgICAgICAgICAgICAgICAoMCA8PCBDUDBDMV9EUykgfCAoMyA8PCBDUDBDMV9ETCkgfCAoMSA8PCBDUDBDMV9EQSkgfAorKyAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgQ1AwQzFfQ0EpLAorKyAgICAgICAgLkNQMF9Db25maWcyID0gTUlQU19DT05GSUcyLAorKyAgICAgICAgLkNQMF9Db25maWczID0gTUlQU19DT05GSUczIHwgKDEgPDwgQ1AwQzNfRFNQUCkgfCAoMCA8PCBDUDBDM19WSW50KSwKKysgICAgICAgIC5DUDBfTExBZGRyX3J3X2JpdG1hc2sgPSAwLAorKyAgICAgICAgLkNQMF9MTEFkZHJfc2hpZnQgPSA0LAorKyAgICAgICAgLlNZTkNJX1N0ZXAgPSAzMiwKKysgICAgICAgIC5DQ1JlcyA9IDIsCisrICAgICAgICAvKiB3ZSBoYXZlIGEgRFNQLCBidXQgbm8gRlBVICovCisrICAgICAgICAuQ1AwX1N0YXR1c19yd19iaXRtYXNrID0gMHgxMzc4RkYxRiwKKysgICAgICAgIC5TRUdCSVRTID0gMzIsCisrICAgICAgICAuUEFCSVRTID0gMzIsCisrICAgICAgICAuaW5zbl9mbGFncyA9IENQVV9NSVBTMzJSMiB8IEFTRV9NSVBTMTYgfCBBU0VfRFNQLAorKyAgICAgICAgLm1tdV90eXBlID0gTU1VX1RZUEVfUjQwMDAsCisrICAgIH0sCisrICAgIHsKKyAgICAgICAgIC5uYW1lID0gIjI0S2YiLAorICAgICAgICAgLkNQMF9QUmlkID0gMHgwMDAxOTMwMCwKKyAgICAgICAgIC5DUDBfQ29uZmlnMCA9IE1JUFNfQ09ORklHMCB8ICgweDEgPDwgQ1AwQzBfQVIpIHwKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMTU2OC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE2LTE1NjgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZmQzNDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMTU2OC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLUZyb20gNGFiMDM1OWE4YWUxODJhN2FjNWM5OTYwOTY2NzI3MzE2NzcwM2ZhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFByYXNhZCBKIFBhbmRpdCA8cGpwQGZlZG9yYXByb2plY3Qub3JnPgotRGF0ZTogTW9uLCAxMSBKYW4gMjAxNiAxNDoxMDo0MiAtMDUwMAotU3ViamVjdDogW1BBVENIXSBpZGU6IGFoY2k6IHJlc2V0IG5jcSBvYmplY3QgdG8gdW51c2VkIG9uIGVycm9yCi0KLVdoZW4gcHJvY2Vzc2luZyBOQ1EgY29tbWFuZHMsIEFIQ0kgZGV2aWNlIGVtdWxhdGlvbiBwcmVwYXJlcyBhCi1OQ1EgdHJhbnNmZXIgb2JqZWN0OyBUbyB3aGljaCBhbiBhaW8gY29udHJvbCBibG9jayhhaW9jYikgb2JqZWN0Ci1pcyBhc3NpZ25lZCBpbiAnZXhlY3V0ZV9uY3FfY29tbWFuZCcuIEluIGNhc2UsIHdoZW4gdGhlIE5DUQotY29tbWFuZCBpcyBpbnZhbGlkLCB0aGUgJ2Fpb2NiJyBvYmplY3QgaXMgbm90IGFzc2lnbmVkLCBhbmQgTkNRCi10cmFuc2ZlciBvYmplY3QgaXMgbGVmdCBhcyAndXNlZCcuIFRoaXMgbGVhZHMgdG8gYSB1c2UgYWZ0ZXIKLWZyZWUga2luZCBvZiBlcnJvciBpbiAnYmRydl9haW9fY2FuY2VsX2FzeW5jJyB2aWEgJ2FoY2lfcmVzZXRfcG9ydCcuCi1SZXNldCBOQ1EgdHJhbnNmZXIgb2JqZWN0IHRvICd1bnVzZWQnIHRvIGF2b2lkIGl0LgotCi1bTWFpbnRhaW5lciBlZGl0OiBzL0FDSEkvQUhDSS8gaW4gdGhlIGNvbW1pdCBtZXNzYWdlLiAtLWpzXQotCi1SZXBvcnRlZC1ieTogUWluZ2hhbyBUYW5nIDxsdW9kYWxvbmdkZUBnbWFpbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBQcmFzYWQgSiBQYW5kaXQgPHBqcEBmZWRvcmFwcm9qZWN0Lm9yZz4KLVJldmlld2VkLWJ5OiBKb2huIFNub3cgPGpzbm93QHJlZGhhdC5jb20+Ci1NZXNzYWdlLWlkOiAxNDUyMjgyNTExLTQxMTYtMS1naXQtc2VuZC1lbWFpbC1wcGFuZGl0QHJlZGhhdC5jb20KLVNpZ25lZC1vZmYtYnk6IEpvaG4gU25vdyA8anNub3dAcmVkaGF0LmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1odHRwOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0O2g9NGFiMDM1OWE4YWUxODJhN2FjNWM5OTYwOTY2NzI3MzE2NzcwM2ZhYgotCi1DVkU6IENWRS0yMDE2LTE1NjgKLVtZb2N0byAjIDkwMTNdCi0KLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBody9pZGUvYWhjaS5jIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLUluZGV4OiBxZW11LTIuNS4wL2h3L2lkZS9haGNpLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBxZW11LTIuNS4wLm9yaWcvaHcvaWRlL2FoY2kuYwotKysrIHFlbXUtMi41LjAvaHcvaWRlL2FoY2kuYwotQEAgLTkxMCw2ICs5MTAsNyBAQCBzdGF0aWMgdm9pZCBuY3FfZXJyKE5DUVRyYW5zZmVyU3RhdGUgKm5jCi0gICAgIGlkZV9zdGF0ZS0+ZXJyb3IgPSBBQlJUX0VSUjsKLSAgICAgaWRlX3N0YXRlLT5zdGF0dXMgPSBSRUFEWV9TVEFUIHwgRVJSX1NUQVQ7Ci0gICAgIG5jcV90ZnMtPmRyaXZlLT5wb3J0X3JlZ3Muc2NyX2VyciB8PSAoMSA8PCBuY3FfdGZzLT50YWcpOwotKyAgICBuY3FfdGZzLT51c2VkID0gMDsKLSB9Ci0gCi0gc3RhdGljIHZvaWQgbmNxX2ZpbmlzaChOQ1FUcmFuc2ZlclN0YXRlICpuY3FfdGZzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMjE5Ny5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE2LTIxOTcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NjQzNWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMjE5Ny5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLUZyb206IFByYXNhZCBKIFBhbmRpdCA8YWRkcmVzc0BoaWRkZW4+Ci0KLVdoZW4gSURFIEFIQ0kgZW11bGF0aW9uIHVzZXMgRnJhbWUgSW5mb3JtYXRpb24gU3RydWN0dXJlcyhGSVMpCi1lbmdpbmUgZm9yIGRhdGEgdHJhbnNmZXIsIHRoZSBtYXBwZWQgRklTIGJ1ZmZlciBhZGRyZXNzIGlzIHN0b3JlZAotaW4gYSBzdGF0aWMgJ2JvdW5jZS5idWZmZXInLiBXaGVuIGEgcmVxdWVzdCBpcyBtYWRlIHRvIG1hcCBhbm90aGVyCi1tZW1vcnkgcmVnaW9uLCBhZGRyZXNzX3NwYWNlX21hcCgpIHJldHVybnMgTlVMTCBiZWNhdXNlCi0nYm91bmNlLmJ1ZmZlcicgaXMgaW5fdXNlLiBJdCBsZWFkcyB0byBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZQotZXJyb3Igd2hpbGUgZG9pbmcgJ2RtYV9tZW1vcnlfdW5tYXAnLiBBZGQgYSBjaGVjayB0byBhdm9pZCBpdC4KLQotUmVwb3J0ZWQtYnk6IFp1b3poaSBmenogPGFkZHJlc3NAaGlkZGVuPgotU2lnbmVkLW9mZi1ieTogUHJhc2FkIEogUGFuZGl0IDxhZGRyZXNzQGhpZGRlbj4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9xZW11LWRldmVsLzIwMTYtMDEvbXNnMDU3NDAuaHRtbAotCi1DVkU6IENWRS0yMDE2LTIxOTcKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBody9pZGUvYWhjaS5jIHwgMTYgKysrKysrKysrKy0tLS0tLQotICAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKLQotICBVcGRhdGUgYXMgcGVyIHJldmlldwotICAgIC0+IGh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvcWVtdS1kZXZlbC8yMDE2LTAxL21zZzA1NzE1Lmh0bWwKLQotSW5kZXg6IHFlbXUtMi41LjAvaHcvaWRlL2FoY2kuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHFlbXUtMi41LjAub3JpZy9ody9pZGUvYWhjaS5jCi0rKysgcWVtdS0yLjUuMC9ody9pZGUvYWhjaS5jCi1AQCAtNjYxLDkgKzY2MSwxMSBAQCBzdGF0aWMgYm9vbCBhaGNpX21hcF9maXNfYWRkcmVzcyhBSENJRGV2Ci0gCi0gc3RhdGljIHZvaWQgYWhjaV91bm1hcF9maXNfYWRkcmVzcyhBSENJRGV2aWNlICphZCkKLSB7Ci0tICAgIGRtYV9tZW1vcnlfdW5tYXAoYWQtPmhiYS0+YXMsIGFkLT5yZXNfZmlzLCAyNTYsCi0tICAgICAgICAgICAgICAgICAgICAgRE1BX0RJUkVDVElPTl9GUk9NX0RFVklDRSwgMjU2KTsKLS0gICAgYWQtPnJlc19maXMgPSBOVUxMOwotKyAgICBpZiAoYWQtPnJlc19maXMpIHsKLSsgICAgICAgIGRtYV9tZW1vcnlfdW5tYXAoYWQtPmhiYS0+YXMsIGFkLT5yZXNfZmlzLCAyNTYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9ESVJFQ1RJT05fRlJPTV9ERVZJQ0UsIDI1Nik7Ci0rICAgICAgICBhZC0+cmVzX2ZpcyA9IE5VTEw7Ci0rICAgIH0KLSB9Ci0gCi0gc3RhdGljIGJvb2wgYWhjaV9tYXBfY2xiX2FkZHJlc3MoQUhDSURldmljZSAqYWQpCi1AQCAtNjc3LDkgKzY3OSwxMSBAQCBzdGF0aWMgYm9vbCBhaGNpX21hcF9jbGJfYWRkcmVzcyhBSENJRGV2Ci0gCi0gc3RhdGljIHZvaWQgYWhjaV91bm1hcF9jbGJfYWRkcmVzcyhBSENJRGV2aWNlICphZCkKLSB7Ci0tICAgIGRtYV9tZW1vcnlfdW5tYXAoYWQtPmhiYS0+YXMsIGFkLT5sc3QsIDEwMjQsCi0tICAgICAgICAgICAgICAgICAgICAgRE1BX0RJUkVDVElPTl9GUk9NX0RFVklDRSwgMTAyNCk7Ci0tICAgIGFkLT5sc3QgPSBOVUxMOwotKyAgICBpZiAoYWQtPmxzdCkgewotKyAgICAgICAgZG1hX21lbW9yeV91bm1hcChhZC0+aGJhLT5hcywgYWQtPmxzdCwgMTAyNCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0RJUkVDVElPTl9GUk9NX0RFVklDRSwgMTAyNCk7Ci0rICAgICAgICBhZC0+bHN0ID0gTlVMTDsKLSsgICAgfQotIH0KLSAKLSBzdGF0aWMgdm9pZCBhaGNpX3dyaXRlX2Zpc19zZGIoQUhDSVN0YXRlICpzLCBOQ1FUcmFuc2ZlclN0YXRlICpuY3FfdGZzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMjE5OC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE2LTIxOTgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMjAxZjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMjE5OC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLUZyb206IFByYXNhZCBKIFBhbmRpdCA8YWRkcmVzc0BoaWRkZW4+Ci0KLVVTQiBFaGNpIGVtdWxhdGlvbiBzdXBwb3J0cyBob3N0IGNvbnRyb2xsZXIgY2FwYWJpbGl0eSByZWdpc3RlcnMuCi1CdXQgaXRzIG1taW8gJy53cml0ZScgZnVuY3Rpb24gd2FzIG1pc3NpbmcsIHdoaWNoIGxlYWQgdG8gYSBudWxsCi1wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlLiBBZGQgYSBkbyBub3RoaW5nICdlaGNpX2NhcHNfd3JpdGUnCi1kZWZpbml0aW9uIHRvIGF2b2lkIGl0OyBEbyBub3RoaW5nIGJlY2F1c2UgY2FwYWJpbGl0eSByZWdpc3RlcnMKLWFyZSBSZWFkIE9ubHkoUk8pLgotCi1SZXBvcnRlZC1ieTogWnVvemhpIEZ6eiA8YWRkcmVzc0BoaWRkZW4+Ci1TaWduZWQtb2ZmLWJ5OiBQcmFzYWQgSiBQYW5kaXQgPGFkZHJlc3NAaGlkZGVuPgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1odHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL3FlbXUtZGV2ZWwvMjAxNi0wMS9tc2cwNTg5OS5odG1sCi0KLUNWRTogQ1ZFLTIwMTYtMjE5OAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGh3L3VzYi9oY2QtZWhjaS5jIHwgNiArKysrKysKLSAgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQotCi1JbmRleDogcWVtdS0yLjUuMC9ody91c2IvaGNkLWVoY2kuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHFlbXUtMi41LjAub3JpZy9ody91c2IvaGNkLWVoY2kuYwotKysrIHFlbXUtMi41LjAvaHcvdXNiL2hjZC1laGNpLmMKLUBAIC04OTMsNiArODkzLDExIEBAIHN0YXRpYyB1aW50NjRfdCBlaGNpX2NhcHNfcmVhZCh2b2lkICpwdHIKLSAgICAgcmV0dXJuIHMtPmNhcHNbYWRkcl07Ci0gfQotIAotK3N0YXRpYyB2b2lkIGVoY2lfY2Fwc193cml0ZSh2b2lkICpwdHIsIGh3YWRkciBhZGRyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsLCB1bnNpZ25lZCBzaXplKQotK3sKLSt9Ci0rCi0gc3RhdGljIHVpbnQ2NF90IGVoY2lfb3ByZWdfcmVhZCh2b2lkICpwdHIsIGh3YWRkciBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSkKLSB7Ci1AQCAtMjMxMCw2ICsyMzE1LDcgQEAgc3RhdGljIHZvaWQgZWhjaV9mcmFtZV90aW1lcih2b2lkICpvcGFxdQotIAotIHN0YXRpYyBjb25zdCBNZW1vcnlSZWdpb25PcHMgZWhjaV9tbWlvX2NhcHNfb3BzID0gewotICAgICAucmVhZCA9IGVoY2lfY2Fwc19yZWFkLAotKyAgICAud3JpdGUgPSBlaGNpX2NhcHNfd3JpdGUsCi0gICAgIC52YWxpZC5taW5fYWNjZXNzX3NpemUgPSAxLAotICAgICAudmFsaWQubWF4X2FjY2Vzc19zaXplID0gNCwKLSAgICAgLmltcGwubWluX2FjY2Vzc19zaXplID0gMSwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaAppbmRleCBhOTlmNzIwLi4yY2UzNDc4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoCkBAIC00LDE0ICs0LDE0IEBACiAKIFNpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgogLS0tCi0gdGVzdHMvTWFrZWZpbGUgfCAgIDEwICsrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQorIHRlc3RzL01ha2VmaWxlLmluY2x1ZGUgfCA4ICsrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQogCi1kaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQotaW5kZXggODhmNzEwNS4uM2Y0MGI0YiAxMDA2NDQKLS0tLSBhL3Rlc3RzL01ha2VmaWxlCi0rKysgYi90ZXN0cy9NYWtlZmlsZQotQEAgLTQwNSwzICs0MDUsMTIgQEAgYWxsOiAkKFFFTVVfSU9URVNUU19IRUxQRVJTLXkpCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuaW5jbHVkZSBiL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKK2luZGV4IDE0YmU0OTEuLjBmY2UzN2EgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlCisrKysgYi90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlCitAQCAtNzc2LDMgKzc3NiwxMSBAQCBhbGw6ICQoUUVNVV9JT1RFU1RTX0hFTFBFUlMteSkKICAKICAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzLyouZCkKICAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzL2xpYnFvcy8qLmQpCkBAIC0yMyw3ICsyMyw2IEBACiArCQluZj0kJChlY2hvICQkZiB8IHNlZCAncy90ZXN0c1wvL1wuXC8vZycpOyBcCiArCQkkJG5mOyBcCiArCWRvbmUKLSsKLS0tCi0xLjcuOS41CistLSAKKzIuOS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2Rpc2FibGUtZ3JhYnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCmluZGV4IDQxNzI2YjEuLjEyMzgzM2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2Rpc2FibGUtZ3JhYnMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZGlzYWJsZS1ncmFicy5wYXRjaApAQCAtMjksOSArMjksOSBAQAogLS0tIGEvdWkvc2RsLmMKICsrKyBiL3VpL3NkbC5jCiBAQCAtNTksNiArNTksMTAgQEAgc3RhdGljIFNETF9DdXJzb3IgKmd1ZXN0X3Nwcml0ZSA9IE5VTEw7Ci0gc3RhdGljIFNETF9QaXhlbEZvcm1hdCBob3N0X2Zvcm1hdDsKICBzdGF0aWMgaW50IHNjYWxpbmdfYWN0aXZlID0gMDsKICBzdGF0aWMgTm90aWZpZXIgbW91c2VfbW9kZV9ub3RpZmllcjsKKyBzdGF0aWMgaW50IGlkbGVfY291bnRlcjsKICsjaWZuZGVmIFRydWUKICsjZGVmaW5lIFRydWUgMQogKyNlbmRpZgpAQCAtNDAsNyArNDAsNyBAQAogIHN0YXRpYyB2b2lkIHNkbF91cGRhdGUoRGlzcGxheUNoYW5nZUxpc3RlbmVyICpkY2wsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKIEBAIC0zODQsMTQgKzM4OCwxNiBAQCBzdGF0aWMgdm9pZCBzZGxfZ3JhYl9zdGFydCh2b2lkKQotICAgICAgICAgICAgIFNETF9XYXJwTW91c2UoZ3Vlc3RfeCwgZ3Vlc3RfeSk7CisgICAgICAgICAgICAgfQogICAgICB9IGVsc2UKICAgICAgICAgIHNkbF9oaWRlX2N1cnNvcigpOwogLSAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09OKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2gKaW5kZXggMTNhNmVhMi4uY2VlNmE2NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2gKQEAgLTY3LDkgKzY3LDkgQEAKICAjaW5jbHVkZSA8c3lzL3Zmcy5oPgogICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KIEBAIC0yNiw3ICsyNSwxMSBAQAotICNpbmNsdWRlICJ2aXJ0aW8tOXAtbWFyc2hhbC5oIgotICNpbmNsdWRlICJody85cGZzL3ZpcnRpby05cC1wcm94eS5oIgotICNpbmNsdWRlICJmc2Rldi92aXJ0aW8tOXAtbWFyc2hhbC5oIgorICNpbmNsdWRlICI5cC1pb3YtbWFyc2hhbC5oIgorICNpbmNsdWRlICJody85cGZzLzlwLXByb3h5LmgiCisgI2luY2x1ZGUgImZzZGV2LzlwLWlvdi1tYXJzaGFsLmgiCiAtCiArLyoKICsgKiBJbmNsdWRlIHRoaXMgb25lIGxhc3QgZHVlIHRvIHNvbWUgdmVyc2lvbnMgb2YgaXQgYmVpbmcgYnVnZ3k6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LTIuNS4wLWNmbGFncy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtMi41LjAtY2ZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzM5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LTIuNS4wLWNmbGFncy5wYXRjaApAQCAtMCwwICsxLDEzIEBACistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ0NjgsMTAgKzQ0NjgsNiBAQCBmaQorIGlmIHRlc3QgIiRnY292IiA9ICJ5ZXMiIDsgdGhlbgorICAgQ0ZMQUdTPSItZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UgLWcgJENGTEFHUyIKKyAgIExERkxBR1M9Ii1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSAkTERGTEFHUyIKKy1lbGlmIHRlc3QgIiRmb3J0aWZ5X3NvdXJjZSIgPSAieWVzIiA7IHRoZW4KKy0gIENGTEFHUz0iLU8yIC1VX0ZPUlRJRllfU09VUkNFIC1EX0ZPUlRJRllfU09VUkNFPTIgJENGTEFHUyIKKy1lbGlmIHRlc3QgIiRkZWJ1ZyIgPSAibm8iOyB0aGVuCistICBDRkxBR1M9Ii1PMiAkQ0ZMQUdTIgorIGZpCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjUuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ5YThkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotcmVxdWlyZSBxZW11LmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NDFjMjhkMmNmODZlMTVhMzdmYTQ3ZTE1YTcyZmJhYyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjtlbmRsaW5lPTI0O21kNT1jMDRkZWY3YWUzODg1MGU3ZDNlZjU0ODU4ODE1OTkxMyIKLQotU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9uby12YWxncmluZC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMTU2OC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMjE5Ny5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMjE5OC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcGF0aGxpbWl0LnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSV9wcmVwZW5kID0gImh0dHA6Ly93aWtpLnFlbXUtcHJvamVjdC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmJ6MiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJmNDY5ZjIzMzBiYmU3NmUzZTM5ZGIxMGU5YWM0ZjhkYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzNDQzODg3NDAxNjE5ZmUzM2JmYTVkOTAwYTRmMmQ2YTc5NDI1YWUyYjdlNDNkNWI4YzM2ZWI3YTY4Mzc3MmQ0IgotCi1DT01QQVRJQkxFX0hPU1RfY2xhc3MtdGFyZ2V0X21pcHM2NCA9ICJudWxsIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICAjIFByZXZlbnQgUUEgd2FybmluZ3MgYWJvdXQgaW5zdGFsbGVkICR7bG9jYWxzdGF0ZWRpcn0vcnVuCi0gICAgaWYgWyAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gXTsgdGhlbiBybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW47IGZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjcuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOWI4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjcuMC5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIHFlbXUuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ0MWMyOGQyY2Y4NmUxNWEzN2ZhNDdlMTVhNzJmYmFjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO2VuZGxpbmU9MjQ7bWQ1PWMwNGRlZjdhZTM4ODUwZTdkM2VmNTQ4NTg4MTU5OTEzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL25vLXZhbGdyaW5kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wYXRobGltaXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3FlbXUtMi41LjAtY2ZsYWdzLnBhdGNoIFwKKyIKKworU1JDX1VSSV9wcmVwZW5kID0gImh0dHA6Ly93aWtpLnFlbXUtcHJvamVjdC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwOGQ0ZDA2ZDFjYjU5OGVmZWNkNzk2MTM3ZjQ4NDRhYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMjZlNzM5NTA2YmE2OTBkYWY2OWZjMTdiZDM5MTNhNmMzMTNkOTkyOGQ3NDNiZDhlZGRiODJmNDAzZjgxZTUzIgorCitDT01QQVRJQkxFX0hPU1RfY2xhc3MtdGFyZ2V0X21pcHM2NCA9ICJudWxsIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjIFByZXZlbnQgUUEgd2FybmluZ3MgYWJvdXQgaW5zdGFsbGVkICR7bG9jYWxzdGF0ZWRpcn0vcnVuCisgICAgaWYgWyAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gXTsgdGhlbiBybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW47IGZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgppbmRleCA3ZjRjNmQ5Li41M2IzMDJkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIKQEAgLTQxLDEwICs0MSw2IEBACiAJY2htb2QgK3ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKIH0KIAotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJxZW11d3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MiCi0KLXFlbXV3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7Ci0Jc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQotfQorU1lTUk9PVF9ESVJTICs9ICIke2JpbmRpcl9jcm9zc3NjcmlwdHN9IgogCiBJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYwppbmRleCA0ZTM5M2M0Li41MTJiNzk4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYwpAQCAtNDgsMTAgKzQ4LDEwIEBACiB9CiAKIGRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JdGFyIC1jZiAtIGJpbi8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQotCXRhciAtY2YgLSBjb21wYXQvIC0tZXhjbHVkZSBcKi5pbiB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKLQl0YXIgLWNmIC0gcXVpbHQvIC0tZXhjbHVkZSBcKi5pbiB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKLQl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIG1haWwudGVzdCAtLWV4Y2x1ZGUgZGVsZXRlLnRlc3QgfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSAmJiBjaG1vZCA3NzcgdGVzdCkKKwl0YXIgLWMgLS1leGNsdWRlPVwqLmluIGJpbi8gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jIC0tZXhjbHVkZT1cKi5pbiBjb21wYXQvIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtYyAtLWV4Y2x1ZGU9XCouaW4gcXVpbHQvIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtYyAtLWV4Y2x1ZGU9bWFpbC50ZXN0IC0tZXhjbHVkZT1kZWxldGUudGVzdCB0ZXN0LyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICYmIGNobW9kIDc3NyB0ZXN0KQogCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KIAljcCAke1dPUktESVJ9L3Rlc3Quc2ggJHtEfSR7UFRFU1RfUEFUSH0KIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXN5c3RlbS5oLXF1ZXJ5LmMtc3VwcG9ydC1ub3NpZ25hdHVyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXN5c3RlbS5oLXF1ZXJ5LmMtc3VwcG9ydC1ub3NpZ25hdHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2RjNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLzAwMDEtc3lzdGVtLmgtcXVlcnkuYy1zdXBwb3J0LW5vc2lnbmF0dXJlLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gZDhmY2MzY2JlZWM0ZGVmYjViYWJkZTViZDA5ZWEyOTRkZDNmZDA4YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCAzIEp1bCAyMDE2IDE5OjAxOjU5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHN5c3RlbS5oL3F1ZXJ5LmM6IHN1cHBvcnQgbm9zaWduYXR1cmUKKworKiBEZWZpbmUgU1VQUE9SVF9OT1NJR05BVFVSRVMgdG8gMSBpbiBzeXN0ZW0uaAorKiAhUVZBX0lTU0VUKHF2YS0+cXZhX2ZsYWdzLCBTSUdOQVRVUkUpIC0+IFFWQV9JU1NFVChxdmEtPnF2YV9mbGFncywgU0lHTkFUVVJFKSwKKyAgb3RoZXJ3aXNlLCB3aGVuIHVzZSAtLW5vc2lnbmF0dXJlIHdvdWxkIHJlYWQgZGF0YWJhc2UgYW5kIHZlcmlmeQorICBzaWduYXR1cmUsIHRoaXMgaXMgbm90IGV4cGVjdGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbU2VudCBlbWFpbCB0byBycG0tZGV2ZWxAcnBtNS5vcmddCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL3F1ZXJ5LmMgfCA2ICsrKy0tLQorIHN5c3RlbS5oICAgIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcXVlcnkuYyBiL2xpYi9xdWVyeS5jCitpbmRleCA1MGE3NDUzLi5iNzYxZDc2IDEwMDY0NAorLS0tIGEvbGliL3F1ZXJ5LmMKKysrKyBiL2xpYi9xdWVyeS5jCitAQCAtOTU0LDE5ICs5NTQsMTkgQEAgSkJKREVCVUcoKHN0ZGVyciwgIi0tPiAlcyglcCwlcCwlcClcbiIsIF9fRlVOQ1RJT05fXywgdHMsIHF2YSwgYXJndikpOworICAgICB2c2ZsYWdzID0gKHJwbVZTRmxhZ3MpIHJwbUV4cGFuZE51bWVyaWMoIiV7P192c2ZsYWdzX3F1ZXJ5fSIpOworICAgICB2c2ZsYWdzID0gKHJwbVZTRmxhZ3MpIDA7CS8qIFhYWCBGSVhNRTogaWdub3JlIGRlZmF1bHQgZGlzYWJsZXJzLiAqLworICNpZiBkZWZpbmVkKFNVUFBPUlRfTk9TSUdOQVRVUkVTKQorLSAgICBpZiAoIVFWQV9JU1NFVChxdmEtPnF2YV9mbGFncywgRElHRVNUKSkgeworKyAgICBpZiAoUVZBX0lTU0VUKHF2YS0+cXZhX2ZsYWdzLCBESUdFU1QpKSB7CisgCVZTRl9TRVQodnNmbGFncywgTk9TSEExSEVBREVSKTsKKyAJVlNGX1NFVCh2c2ZsYWdzLCBOT01ENUhFQURFUik7CisgCVZTRl9TRVQodnNmbGFncywgTk9TSEExKTsKKyAJVlNGX1NFVCh2c2ZsYWdzLCBOT01ENSk7CisgICAgIH0KKy0gICAgaWYgKCFRVkFfSVNTRVQocXZhLT5xdmFfZmxhZ3MsIFNJR05BVFVSRSkpIHsKKysgICAgaWYgKFFWQV9JU1NFVChxdmEtPnF2YV9mbGFncywgU0lHTkFUVVJFKSkgeworIAlWU0ZfU0VUKHZzZmxhZ3MsIE5PRFNBSEVBREVSKTsKKyAJVlNGX1NFVCh2c2ZsYWdzLCBOT1JTQUhFQURFUik7CisgCVZTRl9TRVQodnNmbGFncywgTk9EU0EpOworIAlWU0ZfU0VUKHZzZmxhZ3MsIE5PUlNBKTsKKyAgICAgfQorLSAgICBpZiAoIVFWQV9JU1NFVChxdmEtPnF2YV9mbGFncywgSERSQ0hLKSkgeworKyAgICBpZiAoUVZBX0lTU0VUKHF2YS0+cXZhX2ZsYWdzLCBIRFJDSEspKSB7CisgCVZTRl9TRVQodnNmbGFncywgTk9IRFJDSEspOworICAgICB9CisgICAgIFZTRl9DTFIodnNmbGFncywgTkVFRFBBWUxPQUQpOwkvKiBYWFggbmVlZGVkPyAqLworZGlmZiAtLWdpdCBhL3N5c3RlbS5oIGIvc3lzdGVtLmgKK2luZGV4IDJmZjg5MDYuLmFkNDYxOWEgMTAwNjQ0CistLS0gYS9zeXN0ZW0uaAorKysrIGIvc3lzdGVtLmgKK0BAIC03ODcsOSArNzg3LDkgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpyY3NpZChjb25zdCBjaGFyICpwKSB7IFwKKyAjZGVmaW5lIFNVUFBPUlRfSTE4TlNUUklOR19UWVBFCTEKKyAKKyAvKioKKy0gKiBFbGltaW5hdGUgc2lnbmF0dXJlL2RpZ2VzdCBkaXNhYmxlcnMuCisrICogU2lnbmF0dXJlL2RpZ2VzdCBkaXNhYmxlcnMuCisgICovCistI3VuZGVmCVNVUFBPUlRfTk9TSUdOQVRVUkVTCisrI2RlZmluZSBTVVBQT1JUX05PU0lHTkFUVVJFUyAxCisgCisgLyoqCisgICogUGVybWl0IGFyKDEpIHBheWxvYWRzLiBEaXNhYmxlZCB3aGlsZSBycG1pby9pb3NtLmMgaXMgdW5kZXIgZGV2ZWxvcG1lbnQuCistLSAKKzIuOS4wCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZ2NjNi1zdGRsaWIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZ2NjNi1zdGRsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzNzJjNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9nY2M2LXN0ZGxpYi5wYXRjaApAQCAtMCwwICsxLDU0IEBACitnY2M2IGhhcyBmaXhlZCBhIGxvbmcgc3RhbmRpbmcgYysrIGluY2x1ZGUgaXNzdWUgd2hlcmUgPGNoZWFkZXI+Cit3YXMgZGlmZmVyZW50IGZyb20gPGhlYWRlci5oPiBpbmNsdXNpb24gdmlhCisKK2h0dHBzOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMTYtMDEvbXNnMDAwMjUuaHRtbAorCithbmQgaXRzIGFsc28gZGVzY2liZWQgaW4gaHR0cHM6Ly9nY2MuZ251Lm9yZy9nY2MtNi9wb3J0aW5nX3RvLmh0bWwKK3JwbWlvIGNvbXBvbmVudCB1c2VzIHNvbWUgLmNwcCBhbmQgLmNjIGZpZXMgd2hpY2ggbmVlZCB0byB1c2UKK0Mgc3RkbGliLmggZnJvbSBDIGxpYnJhcnkgYW5kIG5vdCB0aGUgQysrIGxpYnN0ZGMrKyBoZWFkZXIKK3RoZXJlZm9yZSB3ZSBwYXNzIF9HTElCQ1hYX0lOQ0xVREVfTkVYVF9DX0hFQURFUlMgc28gdGhhdCBpdAora2VlcHMgdGhlIG9sZCBiZWhhdmlvcgorCisvYS9idWlsZC90bXAvc3lzcm9vdHMvcmFzcGJlcnJ5cGkyL3Vzci9pbmNsdWRlL2MrKy82LjAuMS9jc3RkbGliOjE0MzoxMTogZXJyb3I6ICc6OmdldGVudicgaGFzIG5vdCBiZWVuIGRlY2xhcmVkCisgICB1c2luZyA6OmdldGVudjsKKyAgICAgICAgICAgXn5+fn5+CitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vLi4vcnBtLTUuNC4xNS9zeXN0ZW0uaDoyMDE6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9ycG0tNS40LjE1L3JwbWlvL3JwbWpzLmNwcDoxOgorL2EvYnVpbGQvdG1wL3N5c3Jvb3RzL3Jhc3BiZXJyeXBpMi91c3IvaW5jbHVkZS9jKysvNi4wLjEvc3RkbGliLmg6NjI6MTI6IGVycm9yOiAnc3RkOjpnZXRlbnYnIGhhcyBub3QgYmVlbiBkZWNsYXJlZAorIHVzaW5nIHN0ZDo6Z2V0ZW52OworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE1L3JwbWlvL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNS5vcmlnL3JwbWlvL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNS9ycG1pby9NYWtlZmlsZS5hbQorQEAgLTE1MSw3ICsxNTEsNyBAQCBsaWJycG1pb19sYV9TT1VSQ0VTID0gXAorIAlncm9lc3RsLmMgaGFtc2kuYyBqaC5jIGtlY2Nhay5jIGxhbmUuYyBsdWZmYS5jIG1kMi5jIG1kNi5jIHJhZGlvZ2F0dW4uY1wKKyAJc2Fsc2ExMC5jIHNhbHNhMjAuYyBzaGFiYWwuYyBzaGF2aXRlMy5jIHNpbWQuYyBza2Vpbi5jIHRpYjMuYyB0aWdlci5jIFwKKyAJcnBtZ2l0LmMgcnBtaW8tc3R1Yi5jIFwKKy0JcnBtanMuY3BwIHJwbWpzaW8uYyBycG1rZXlyaW5nLmMgXAorKwlycG1qbmkuY2MgcnBtanMuY3BwIHJwbWpzaW8uYyBycG1rZXlyaW5nLmMgXAorIAlycG1uaXguYyBycG1vZGJjLmMgcnBtc3FsLmMgc2V0LmMgXAorIAlhci5jIFwKKyAJYXJndi5jIFwKK0BAIC0xOTUsNyArMTk1LDYgQEAgbGlicnBtaW9fbGFfU09VUkNFUyA9IFwKKyAJcnBtaG9vay5jIFwKKyAJcnBtaW8uYyBcCisgCXJwbWlvYi5jIFwKKy0JcnBtam5pLmNjIFwKKyAJcnBta3UuYyBcCisgCXJwbWxvZy5jIFwKKyAJcnBtbHRjLmMgXAorQEAgLTI3OSw3ICsyNzgsOSBAQCBrZWNjYWsubG86ICQodG9wX3NyY2RpcikvcnBtaW8va2VjY2FrLmMKKyAjcnBtanMubG86ICQodG9wX3NyY2RpcikvcnBtaW8vcnBtanMuYworICMJQCQoTFRDT01QSUxFKSAtTzAgLWMgJDwKKyBycG1qcy5sbzogJCh0b3Bfc3JjZGlyKS9ycG1pby9ycG1qcy5jcHAKKy0JQCQoTFRDT01QSUxFKSAtTzAgLWMgJDwKKysJQCQoTFRDT01QSUxFKSAtTzAgLWMgLURfR0xJQkNYWF9JTkNMVURFX05FWFRfQ19IRUFERVJTICQ8CisrcnBtam5pLmxvOiAkKHRvcF9zcmNkaXIpL3JwbWlvL3JwbWpuaS5jYworKwlAJChMVENPTVBJTEUpIC1PMCAtYyAtRF9HTElCQ1hYX0lOQ0xVREVfTkVYVF9DX0hFQURFUlMgJDwKKyAKKyBZQUNDID0gYnlhY2MgLWQKKyBnZXRkYXRlLmM6IGdldGRhdGUueQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1lbnN1cmUtcnBtMmNwaW8tY2FsbC1ycG0tcmVsb2NhdGlvbi1jb2RlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1lbnN1cmUtcnBtMmNwaW8tY2FsbC1ycG0tcmVsb2NhdGlvbi1jb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWYxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWVuc3VyZS1ycG0yY3Bpby1jYWxsLXJwbS1yZWxvY2F0aW9uLWNvZGUucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorV2UgbmVlZCB0byBjYWxsIHJwbWNsaUluaXQgdG8gZW5zdXJlIHRoZSBycG0gcmVsb2NhdGlvbiBjb2RlIGlzIGNhbGxlZAorYW5kIGl0IGNvcnJlY3RseSBob25vdXJzIHRoZSByZWxvY2F0aW9uIGVudmlyb25tZW50YWwgdmFyaWFibGVzLgorCit3aGVuIHdlIGV4cG9ydCB0aGUgd3JzZGsgYW5kIHNvdXJjZSB0aGUgc2RrLCB0aGVuIGV4ZWN1dGUgcnBtMmNwaW8geHh4LnJwbXxjcGlvIC10Lgord2Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBlcnJvciA6CisicnBtLTUuNC4xNC9ycG1kYi9kYmNvbmZpZy5jOjQ5MzoKK2RiM05ldzogQXNzZXJ0aW9uIGBkYk9wdHMgIT0gKCh2b2lkICopMCkgJiYgKmRiT3B0cyAhPSAnXDAnJyBmYWlsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8emhpeGlvbmcuY2hpQHdpbmRyaXZlci5jb20+CitJbmRleDogcnBtLTUuNC4xNS90b29scy9ycG0yY3Bpby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNS5vcmlnL3Rvb2xzL3JwbTJjcGlvLmMJMjAxMi0wNC0yNyAwMTo0Njo1MS4wMDAwMDAwMDAgKzA4MDAKKysrKyBycG0tNS40LjE1L3Rvb2xzL3JwbTJjcGlvLmMJMjAxNi0wOS0wNSAxMTowNzozMC40MTk5MDMzMzggKzA4MDAKK0BAIC04Nyw2ICs4Nyw4IEBACisgI2VuZGlmCisgCSh2b2lkKSBycG10c1NldFZTRmxhZ3ModHMsIHZzZmxhZ3MpOworIAorKwlycG1jbGlJbml0KGFyZ2MsIGFyZ3YsIE5VTEwpOworKworIAkvKkAtbXVzdG1vZEAqLyAgICAgIC8qIExDTDogc2VnZmF1bHQgKi8KKyAJcmMgPSBycG1SZWFkUGFja2FnZUZpbGUodHMsIGZkaSwgInJwbTJjcGlvIiwgJmgpOworIAkvKkA9bXVzdG1vZEAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRiLW1vcmUtdmVyYm9zZS1lcnJvci1sb2dnaW5nLWluLXJwbVRlbXBGaWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRiLW1vcmUtdmVyYm9zZS1lcnJvci1sb2dnaW5nLWluLXJwbVRlbXBGaWxlLnBhdGNoCmluZGV4IDgwOWU1NGUuLjNhNmY4NzQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kYi1tb3JlLXZlcmJvc2UtZXJyb3ItbG9nZ2luZy1pbi1ycG1UZW1wRmlsZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGItbW9yZS12ZXJib3NlLWVycm9yLWxvZ2dpbmctaW4tcnBtVGVtcEZpbGUucGF0Y2gKQEAgLTUsMzIgKzUsMTAgQEAKIFNpZ25lZC1vZmYtYnk6IE1hcmt1cyBMZWh0b25lbiA8bWFya3VzLmxlaHRvbmVuQGxpbnV4LmludGVsLmNvbT4KIAogZGlmZiAtLWdpdCBhL3JwbWRiL3NpZ25hdHVyZS5jIGIvcnBtZGIvc2lnbmF0dXJlLmMKLWluZGV4IGRjZTZjNGUuLmExZDBmMDYgMTAwNjQ0CitpbmRleCAxMDAyMDRiLi5lNTZhYjNkIDEwMDY0NAogLS0tIGEvcnBtZGIvc2lnbmF0dXJlLmMKICsrKyBiL3JwbWRiL3NpZ25hdHVyZS5jCi1AQCAtMzcsNiArMzcsNyBAQCBpbnQgcnBtVGVtcEZpbGUoY29uc3QgY2hhciAqIHByZWZpeCwgY29uc3QgY2hhciAqKiBmbnB0ciwgdm9pZCAqIGZkcHRyKQotICAgICBpbnQgdGVtcHV0OwotICAgICBGRF90IGZkID0gTlVMTDsKLSAgICAgdW5zaWduZWQgaW50IHJhbjsKLSsgICAgaW50IHJldCA9IDA7Ci0gCi0gICAgIGlmICghcHJlZml4KSBwcmVmaXggPSAiIjsKLSAKLUBAIC00NCw4ICs0NSwxMSBAQCBpbnQgcnBtVGVtcEZpbGUoY29uc3QgY2hhciAqIHByZWZpeCwgY29uc3QgY2hhciAqKiBmbnB0ciwgdm9pZCAqIGZkcHRyKQotICAgICBpZiAoIV9pbml0aWFsaXplZCkgewotIAlfaW5pdGlhbGl6ZWQgPSAxOwotIAl0ZW1wZm4gPSBycG1HZW5QYXRoKHByZWZpeCwgdHBtYWNybywgTlVMTCk7Ci0tCWlmIChycG1pb01rcGF0aCh0ZW1wZm4sIDA3NTUsICh1aWRfdCkgLTEsIChnaWRfdCkgLTEpKQotLQkgICAgZ290byBlcnJ4aXQ7Ci0rICAgICAgICByZXQgPSBycG1pb01rcGF0aCh0ZW1wZm4sIDA3NTUsICh1aWRfdCkgLTEsIChnaWRfdCkgLTEpOwotKyAgICAgICAgaWYgKHJldCkgewotKyAgICAgICAgICAgIHJwbWxvZyhSUE1MT0dfRVJSLCBfKCJlcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiAlZFxuIiksIHRlbXBmbiwgcmV0KTsKLSsgICAgICAgICAgICBnb3RvIGVycnhpdDsKLSsgICAgICAgIH0KLSAgICAgfQotIAotICAgICAvKiBYWFggc2hvdWxkIHByb2JhYmx5IHVzZSBta3N0ZW1wIGhlcmUgKi8KLUBAIC02OCwxMiArNzIsMTYgQEAgaW50IHJwbVRlbXBGaWxlKGNvbnN0IGNoYXIgKiBwcmVmaXgsIGNvbnN0IGNoYXIgKiogZm5wdHIsIHZvaWQgKiBmZHB0cikKK0BAIC03MiwxMiArNzIsMTYgQEAgaW50IHJwbVRlbXBGaWxlKGNvbnN0IGNoYXIgKiBwcmVmaXgsIGNvbnN0IGNoYXIgKiogZm5wdHIsIHZvaWQgKiBmZHB0cikKICAjZW5kaWYKICAKICAJdGVtcHV0ID0gdXJsUGF0aCh0ZW1wZm4sICZ0Zm4pOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRiLXByZXZlbnQtcmFjZS1pbi10bXBkaXItY3JlYXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGItcHJldmVudC1yYWNlLWluLXRtcGRpci1jcmVhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDgzZjNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRiLXByZXZlbnQtcmFjZS1pbi10bXBkaXItY3JlYXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorcnBtZGI6IHByZXZlbnQgcmFjZSBpbiB0bXBkaXIgY3JlYXRpb24KKworSWYgdHdvIChvciBtb3JlKSBpbnN0YW5jZXMgb2YgcnBtIGFyZSBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUgdGhleSBtYXkKK2JlIHRyeWluZyB0byBjcmVhdGUgdGhlIHNhbWUgKGJhc2UtKXRlbXBvcmFyeSBkaXJlY3RvcnkgYXQgdGhlIHNhbWUgdGltZQord2hpY2ggY2F1c2VzIHRoZSBvdGhlciBta2RpciB0byBmYWlsIHdpdGggRUVYSVNULiBUaGlzIHBhdGNoIHByZXZlbnRzIGEKK2ZhaWx1cmUgY2F1c2VkIGJ5IHRoaXMgcmFjZSBieSBpZ25vcmluZyBFRVhJU1QgZXJyb3Igb24gZGlyZWN0b3J5CitjcmVhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmt1cyBMZWh0b25lbiA8bWFya3VzLmxlaHRvbmVuQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3JwbWRiL3NpZ25hdHVyZS5jIGIvcnBtZGIvc2lnbmF0dXJlLmMKK2luZGV4IGRjZTZjNGUuLjEwMDIwNGIgMTAwNjQ0CistLS0gYS9ycG1kYi9zaWduYXR1cmUuYworKysrIGIvcnBtZGIvc2lnbmF0dXJlLmMKK0BAIC0zNyw2ICszNyw3IEBAIGludCBycG1UZW1wRmlsZShjb25zdCBjaGFyICogcHJlZml4LCBjb25zdCBjaGFyICoqIGZucHRyLCB2b2lkICogZmRwdHIpCisgICAgIGludCB0ZW1wdXQ7CisgICAgIEZEX3QgZmQgPSBOVUxMOworICAgICB1bnNpZ25lZCBpbnQgcmFuOworKyAgICBpbnQgcmV0ID0gMDsKKyAKKyAgICAgaWYgKCFwcmVmaXgpIHByZWZpeCA9ICIiOworIAorQEAgLTQ0LDggKzQ1LDExIEBAIGludCBycG1UZW1wRmlsZShjb25zdCBjaGFyICogcHJlZml4LCBjb25zdCBjaGFyICoqIGZucHRyLCB2b2lkICogZmRwdHIpCisgICAgIGlmICghX2luaXRpYWxpemVkKSB7CisgCV9pbml0aWFsaXplZCA9IDE7CisgCXRlbXBmbiA9IHJwbUdlblBhdGgocHJlZml4LCB0cG1hY3JvLCBOVUxMKTsKKy0JaWYgKHJwbWlvTWtwYXRoKHRlbXBmbiwgMDc1NSwgKHVpZF90KSAtMSwgKGdpZF90KSAtMSkpCistCSAgICBnb3RvIGVycnhpdDsKKysgICAgICAgIHJldCA9IHJwbWlvTWtwYXRoKHRlbXBmbiwgMDc1NSwgKHVpZF90KSAtMSwgKGdpZF90KSAtMSk7CisrICAgICAgICBpZiAocmV0ICYmIHJldCAhPSBFRVhJU1QpIHsKKysgICAgICAgICAgICBycG1sb2coUlBNTE9HX0VSUiwgXygiZXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczogJWRcbiIpLCB0ZW1wZm4sIHJldCk7CisrICAgICAgICAgICAgZ290byBlcnJ4aXQ7CisrICAgICAgICB9CisgICAgIH0KKyAKKyAgICAgLyogWFhYIHNob3VsZCBwcm9iYWJseSB1c2UgbWtzdGVtcCBoZXJlICovCistLSAKKzIuNi42CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNCtjdnMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OTFmNmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNCtjdnMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3MzAgKzAsMCBAQAotU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCi1ERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAotcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAotdmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKLXBhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKLXRoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCi0KLVNVTU1BUllfJHtQTn0tbGlicyA9ICJMaWJyYXJpZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCi1ERVNDUklQVElPTl8ke1BOfS1saWJzID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIHNoYXJlZCBsaWJyYXJpZXMuIgotCi1TVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKLURFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAotZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAotbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKLXNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCi1vdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCi10byBmdW5jdGlvbi4iCi0KLVNVTU1BUllfJHtQTn0tY29tbW9uID0gIkNvbW1vbiBSUE0gcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24iCi1ERVNDUklQVElPTl8ke1BOfS1jb21tb24gPSAiVGhlIHJwbS1jb21tb24gcGFja2FnZSBjb250YWlucyBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBcCi1hbmQgY29uZmlndXJhdGlvbiBjb21tb24gYmV0d2VlbiBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKLQotU1VNTUFSWV8ke1BOfS1idWlsZCA9ICJTY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMiCi1ERVNDUklQVElPTl8ke1BOfS1idWlsZCA9ICJUaGUgcnBtLWJ1aWxkIHBhY2thZ2VjIG9udGFpbnMgdGhlIHNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgXAotdGhhdCBhcmUgdXNlZCB0byBidWlsZCBwYWNrYWdlcyB1c2luZyB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlci4iCi0KLVNVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKLURFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKLXdyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCi1zdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgotCi1TVU1NQVJZX3BlcmwtbW9kdWxlLXJwbSA9ICJQZXJsIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMiCi1ERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtID0gIlRoZSBwZXJsLW1vZHVsZXMtcnBtIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCi13cml0dGVuIGluIHRoZSBQZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKLXN1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly9ycG01Lm9yZy8iCi1MSUNFTlNFID0gIkxHUEx2Mi4xICYgQXBhY2hlLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKLUxJQ19GSUxFU19DSEtTVU0gKz0gImZpbGU6Ly9ycG1pby9tb25nby5jO2JlZ2luPTU7ZW5kPTE4O21kNT1kODMyN2JhMmM3MTY2NGMwNTkxNDNlNmQzMzNiODkwMSIKLQotIyBXZSBtdXN0IGhhdmUgZ2V0dGV4dC1uYXRpdmUsIHdlIG5lZWQgZ2V0dGV4dGl6ZSwgd2hpY2ggbWF5IG5vdCBiZSBwcm92aWRlZAotREVQRU5EUyA9ICJsaWJwY3JlIGF0dHIgYWNsIG9zc3AtdXVpZCBmaWxlIGJ5YWNjLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKLURFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCi0KLSMgQXBwbHkgdmFyaW91cyBmaXh1cHMgdGhhdCBhcmUgdW5pcXVlIHRvIHRoZSBDVlMgZW52aXJvbm1lbnQKLWRvX2ZpeHVwX3VucGFjayAoKSB7Ci0JIyAnbG4nIGlzbid0IHJlbGlhYmxlLCBhbmQgJ212JyBjb3VsZCBicmVhayBsYXRlciBidWlsZHMKLQlybSAtcmYgJHtTfS9zeWNrIDsgY3AgLXIgJHtXT1JLRElSfS9zeWNrICR7U30vLgotCXJtIC1yZiAke1N9L2x1YSA7IGNwIC1yICR7V09SS0RJUn0vbHVhICR7U30vLgotCXJtIC1yZiAke1N9L3BvcHQgOyBjcCAtciAke1dPUktESVJ9L3BvcHQgJHtTfS8uCi0Jcm0gLXJmICR7U30vYmVlY3J5cHQgOyBjcCAtciAke1dPUktESVJ9L2JlZWNyeXB0ICR7U30vLgotfQotCi1hZGR0YXNrIGZpeHVwX3VucGFjayBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCi0KLSMgVGhpcyByZWNpcGUgaXMgcmVhbGx5IGRlc2lnbmVkIGZvciBkZXZlbG9wbWVudC4uLiB0byBUcnkgb3V0IHRoZSBsYXRlc3QKLSMgY29tbXVuaXR5IHdvcmsgaW4gcHJvZ3Jlc3MuCi1ERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCi0KLVMgPSAiJHtXT1JLRElSfS9ycG0iCi0KLSMgcnBtMmNwaW8gaXMgYSBzaGVsbCBzY3JpcHQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJwbSBzcmMucnBtLiAgSXQgaXMgbmVlZGVkCi0jIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIGRpc3RyaWJ1dGlvbiBTUlBNIGludG8gYSBmb3JtYXQgd2UgY2FuIGV4dHJhY3QuLi4KLVNSQ19VUkkgPSAiY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9cnBtIFwKLQkgICBjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1zeWNrIFwKLQkgICBjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1sdWEgXAotCSAgIGN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPXBvcHQgXAotCSAgIGN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPWJlZWNyeXB0IFwKLQkgICBmaWxlOi8vcGVyZmlsZV9ycG1kZXBzLnNoIFwKLQkgICBmaWxlOi8vcHl0aG9uZGVwcy5zaCBcCi0iCi0KLSMgQnVnIGZpeGVzCi1TUkNfVVJJICs9ICIgXAotCSAgIGZpbGU6Ly9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tbGlic3FsLWZpeC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1wbGF0Zm9ybS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1wbGF0Zm9ybTIucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1jYW5vbmFyY2gucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tbm8tbG9vcG1zZy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1yZXNvbHZlZGVwLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2ggXAotCSAgIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbWF0Y2gucGF0Y2ggXAotCSAgIGZpbGU6Ly9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2ggXAotCSAgIGZpbGU6Ly9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoIFwKLQkgICBmaWxlOi8vZGVidWdlZGl0LXNlZ3YucGF0Y2ggXAotCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoIFwKLQkgICBmaWxlOi8vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2ggXAotCSAgIGZpbGU6Ly8wMDAxLWRlZmluZS1FTV9BQVJDSDY0LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXJwbWZjLmMtZml4LWZvci1OMzItTUlQUzY0LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWxpYi10cmFuc2FjdGlvbi5jLWZpeC1maWxlLWNvbmZsaWN0cy1mb3ItbWlwczY0LU4zMi5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1tb25nb2RiLXNhc2wucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tZml4LXBhcnNlRW1iZWRkZWQucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcnBtaW8taGVhZGVycy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1weXRob24tcmVzdG9yZS1vcmlnaW4ucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0ta2VjY2FrLXNzZS1pbnRyaW4ucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tYXRvbWljLW9wcy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1nbnUtYXRvbWljLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXRhZ25hbWUtdHlwZS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1weXRob24tdGFnbmFtZS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1weXRob24tQWRkRXJhc2UucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcnBtcGdwLXBvcHQucGF0Y2ggXAotCSAgIGZpbGU6Ly8wMDAxLURpc2FibGUtX19zeW5jX2FkZF9hbmRfZmV0Y2hfOC1vbi1uaW9zMi5wYXRjaCBcCi0iCi0KLSMgT0Ugc3BlY2lmaWMgY2hhbmdlcwotU1JDX1VSSSArPSAiIFwKLQkgICBmaWxlOi8vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWRiLXJlZHVjZS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1hdXRvZ2VuLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXNob3dyYy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1maWxlY2xhc3MucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaCBcCi0JICAgZmlsZTovL3JwbWRlcHMtb2Vjb3JlLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1tYWNyb3MucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tbHVhLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLW9zc3AtdXVpZC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS11dWlkLWluY2x1ZGUucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaCBcCi0JICAgZmlsZTovL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoIFwKLQkgICBmaWxlOi8vZGJjb252ZXJ0LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1weS1pbml0LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1kYjUtb3ItZGI2LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWRiNjAucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG1xdl9jY19iX2dvbmUucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcmVhbHBhdGgucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tY2hlY2stcm9vdHBhdGgtcmVhc29uYWJsZW5lc3MucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaCBcCi0JICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1jaGVjay1mb3ItYm90aC1ncGcyLWFuZC1ncGcucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tZGlzYWJsZS1hdXRvLXN0YWNrLXByb3RlY3Rvci5wYXRjaCBcCi0JICAgZmlsZTovL3BvcHQtZGlzYWJsZS1hdXRvLXN0YWNrLXByb3RlY3Rvci5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1zeWNrLWZpeC1ncmFtLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXJwbWRiLWdyYW1tYXIucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tZGlzYWJsZS1ibGFrZXRlc3QucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tYXV0b2dlbi1mb3JjZS5wYXRjaCBcCi0iCi0KLVNSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXJwbS1GaXgtYnVpbGQtb24tbXVzbC5wYXRjaCBcCi0iCi0jIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIHBsYXRmb3JtIHNjb3JlIGRlYnVnZ2luZwotIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGlkZW50aWZ5aW5nIGlzc3VlcyB3aXRoIFNtYXJ0IGJlaW5nIHVuYWJsZQotIyB0byBwcm9jZXNzIGNlcnRhaW4gcGFja2FnZSBmZWVkcy4KLSNTUkNfVVJJICs9ICJmaWxlOi8vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoIgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0Ci0KLWFjcGF0aHMgPSAiLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWwgLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWxfamF2YSIKLQotIyBUaGUgbG9jYWwgZGlzdHJpYnV0aW9uIG1hY3JvIGRpcmVjdG9yeQotZGlzdHJvbWFjcm9kaXIgPSAiJHtsaWJkaXJ9L3JwbS9wb2t5IgotCi0jIFNwZWNpZnkgdGhlIGRlZmF1bHQgcnBtIG1hY3JvcyBpbiB0ZXJtcyBvZiBhZGp1c3RhYmxlIHZhcmlhYmxlcwotcnBtX21hY3JvcyA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6JXtfZXRjcnBtfS9tYWNyb3MuKjole19ldGNycG19L21hY3Jvczole19ldGNycG19LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgotcnBtX21hY3Jvc19jbGFzcy1uYXRpdmUgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgotcnBtX21hY3Jvc19jbGFzcy1uYXRpdmVzZGsgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgotCi0jIHNxbGl0ZSBsdWEgdGNsIGF1Z2VhcyBuc3MgZ2NyeXB0IG5lb24geHogeGFyIGtleXV0aWxzIHBlcmwgc2VsaW51eAotCi0jIFNldCB0aGUgZGlnZXN0IGFsZ29yaXRobSB1c2VkIGZvciB2ZXJpZnlpbmcgZmlsZSBpbnRlZ3JpdHkKLSMgSWYgdGhpcyB2YWx1ZSBjaGFuZ2VzLCBhbmQgdHdvIGRpZmZlcmVudCBwYWNrYWdlcyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMKLSMgdGhlICJzYW1lIGZpbGUiIHZhbGlkYXRpb24gKHR3byBwYWNrYWdlcyBoYXZlIGEgbm9uLWNvbmZsaWN0IGZpbGUpCi0jIHdpbGwgZmFpbC4gIFRoaXMgbWF5IGxlYWQgdG8gdXBncmFkZSBwcm9ibGVtcy4gIFlvdSBzaG91bGQgdHJlYXQgdGhpcwotIyB2YWx1ZSBhcyBhIGRpc3RyaWJ1dGlvbiB3aWRlIHNldHRpbmcsIGFuZCBvbmx5IGNoYW5nZSBpdCB3aGVuIHlvdSBpbnRlbmQKLSMgYSBmdWxsIHN5c3RlbSB1cGdyYWRlIQotIwotIyBEZWZpbmVkIGZpbGUgZGlnZXN0IGFsZ29yaXRobSB2YWx1ZXMgKG5vdGU6IG5vdCBhbGwgYXJlIGF2YWlsYWJsZSEpOgotIyAgICAgICAxICAgICAgIE1ENSAobGVnYWN5IFJQTSBkZWZhdWx0KQotIyAgICAgICAyICAgICAgIFNIQTEKLSMgICAgICAgMyAgICAgICBSSVBFTUQtMTYwCi0jICAgICAgIDUgICAgICAgTUQyCi0jICAgICAgIDYgICAgICAgVElHRVItMTkyCi0jICAgICAgIDggICAgICAgU0hBMjU2Ci0jICAgICAgIDkgICAgICAgU0hBMzg0Ci0jICAgICAgIDEwICAgICAgU0hBNTEyCi0jICAgICAgIDExICAgICAgU0hBMjI0Ci0jICAgICAgIDEwNCAgICAgTUQ0Ci0jICAgICAgIDEwNSAgICAgUklQRU1ELTEyOAotIyAgICAgICAxMDYgICAgIENSQy0zMgotIyAgICAgICAxMDcgICAgIEFETEVSLTMyCi0jICAgICAgIDEwOCAgICAgQ1JDLTY0IChFQ01BLTE4MiBwb2x5bm9taWFsLCB1bnRlc3RlZCB1aW50NjRfdCBwcm9ibGVtcykKLSMgICAgICAgMTA5ICAgICBKZW5raW5zIGxvb2t1cDMuYyBoYXNobGl0dGxlKCkKLSMgICAgICAgMTExICAgICBSSVBFTUQtMjU2Ci0jICAgICAgIDExMiAgICAgUklQRU1ELTMyMAotIyAgICAgICAxODggICAgIEJMQUtFMkIKLSMgICAgICAgMTg5ICAgICBCTEFLRTJCUAotIyAgICAgICAxOTAgICAgIEJMQUtFMlMKLSMgICAgICAgMTkxICAgICBCTEFLRTJTUAotUlBNX0ZJTEVfRElHRVNUX0FMR08gPz0gIjEiCi0KLSMgQWxsIHBhY2thZ2VzIGJ1aWxkIHdpdGggUlBNNSBjb250YWluIGEgbm9uLXJlcHVkaWFibGUgc2lnbmF0dXJlLgotIyBUaGUgcHVycG9zZSBvZiB0aGlzIHNpZ25hdHVyZSBpcyBub3QgdG8gc2hvdyBhdXRoZW50aWNpdHkgb2YgYSBwYWNrYWdlLAotIyBidXQgaW5zdGVhZCBhY3QgYXMgYSBzZWNvbmRhcnkgcGFja2FnZSB3aWRlIHZhbGlkYXRpb24gdGhhdCBzaG93cyBpdAotIyB3YXNuJ3QgZGFtYWdlZCBieSBhY2NpZGVudCBpbiB0cmFuc3BvcnQuICAoV2hlbiBsYXRlciB5b3Ugc2lnbiB0aGUgcGFja2FnZSwgCi0jIHRoaXMgc2lnbmF0dXJlIG1heSBvciBtYXkgbm90IGJlIHJlcGxhY2VkIGFzIHRoZXJlIGFyZSB0aHJlZSBzaWduYXR1cmUgCi0jIHNsb3RzLCBvbmUgZm9yIERTQS9SU0EsIG9uZSBmb3IgRUNTREEsIGFuZCBvbmUgcmVzZXJ2ZWQuKQotIwotIyBUaGVyZSBpcyBhIGtub3duIGlzc3VlIHcvIFJTQSBzaWduYXR1cmVzIHRoYXQgaWYgdGhleSBzdGFydCB3aXRoIGFuIDB4MDAKLSMgdGhlIHNpZ25pbmcgYW5kIHZhbGlkYXRpb24gbWF5IGZhaWwuCi0jCi0jIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIG5vbi1ycHVkaWFibGUgc2lnbmF0dXJlCi0jIChub3RlOiBub3QgYWxsIG9mIHRoZXNlIGFyZSBpbXBsZW1lbnRlZCk6Ci0jICAgICAgIERTQSAgICAgICAgICAgICAoZGVmYXVsdCkKLSMgICAgICAgUlNBICAgICAgICAgICAgIChpbXBsaWVzIFNIQTEpCi0jICAgICAgIEVDRFNBICAgICAgICAgICAoaW1wbGllcyBTSEEyNTYpCi0jICAgICAgIERTQS9TSEExCi0jICAgICAgIERTQS9TSEEyMjQKLSMgICAgICAgRFNBL1NIQTI1NgotIyAgICAgICBEU0EvU0hBMzg0Ci0jICAgICAgIERTQS9TSEE1MTIKLSMgICAgICAgUlNBL1NIQTEKLSMgICAgICAgUlNBL1NIQTIyNAotIyAgICAgICBSU0EvU0hBMjU2Ci0jICAgICAgIFJTQS9TSEEzODQKLSMgICAgICAgUlNBL1NIQTUxMgotIyAgICAgICBFQ0RTQS9TSEEyMjQgICAgKHVzaW5nIE5JU1QgUC0yMjQpCi0jICAgICAgIEVDRFNBL1NIQTI1NiAgICAodXNpbmcgTklTVCBQLTI1NikKLSMgICAgICAgRUNEU0EvU0hBMzg0ICAgICh1c2luZyBOSVNUIFAtMzg0KQotIyAgICAgICBFQ0RTQS9TSEE1MTIgICAgKHVzaW5nIE5JU1QgUC01MjEpCi1SUE1fU0VMRl9TSUdOX0FMR08gPz0gIkRTQSIKLQotIyBOb3RlOiBwZXJsIGFuZCBzcWxpdGUgdy9vIGRiIHNwZWNpZmllZCBkb2VzIG5vdCBjdXJyZW50bHkgd29yay4KLSMgICAgICAgdGNsLCBhdWdlYXMsIG5zcywgZ2NyeXB0LCB4YXIgYW5kIGtleXV0aWxzIHN1cHBvcnQgaXMgdW50ZXN0ZWQuCi1QQUNLQUdFQ09ORklHID8/PSAiZGIgYnppcDIgemxpYiBwb3B0IG9wZW5zc2wgbGliZWxmIHB5dGhvbiIKLQotIyBOb3RlOiBzd2l0Y2hpbmcgdG8gaW50ZXJuYWwgcG9wdCBtYXkgbm90IHdvcmssIGFzIGl0IHdpbGwgZ2VuZXJhdGUKLSMgYSBzaGFyZWQgbGlicmFyeSB3aGljaCB3aWxsIGludGVudGlvbmFsbHkgbm90IGJlIHBhY2thZ2VkLgotIwotIyBJZiB5b3UgaW50ZW5kIHRvIHVzZSB0aGUgaW50ZXJuYWwgdmVyc2lvbiwgYWRkaXRpb25hbCB3b3JrIG1heSBiZSByZXF1aXJlZC4KLVBBQ0tBR0VDT05GSUdbcG9wdF0gPSAiLS13aXRoLXBvcHQ9ZXh0ZXJuYWwsLS13aXRoLXBvcHQ9aW50ZXJuYWwscG9wdCwiCi0KLVBBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0td2l0aC1iemlwMiwtLXdpdGhvdXQtYnppcDIsYnppcDIsIgotUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLXh6LC0td2l0aG91dC14eix4eiwiCi1QQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIsIgotUEFDS0FHRUNPTkZJR1t4YXJdID0gIi0td2l0aC14YXIsLS13aXRob3V0LXhhcix4YXIsIgotCi1XSVRIX1BZVEhPTiA9ICIgLS13aXRoLXB5dGhvbj0ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAotCQktLXdpdGgtcHl0aG9uLWluYy1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IFwKLQkJLS13aXRoLXB5dGhvbi1saWItZGlyPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcyBcCi0JCS0td2l0aG91dC1weXRob25lbWJlZCIKLVBBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIke1dJVEhfUFlUSE9OfSwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbiwiCi0KLSMgUGVybCBtb2R1bGVzIGFyZSBub3QgYnVpbHQsIGJ1dCB0aGV5IGNvdWxkIGJlIGVuYWJsZWQgZmFpcmx5IGVhc2lseQotIyB0aGUgcGVybCBtb2R1bGUgY3JlYXRpb24gYW5kIGluc3RhbGxhdGlvbiB3b3VsZCBuZWVkIHRvIGJlIHBhdGNoZWQuCi0jIChjdXJyZW50bHkgaGFzIGhvc3QgcGVybCBjb250YW1pbmF0aW9uIGlzc3VlcykKLVdJVEhfUEVSTCA9ICItLXdpdGgtcGVybCAtLXdpdGhvdXQtcGVybGVtYmVkIC0td2l0aG91dC1wZXJsLXVycG0iCi1XSVRIT1VUX1BFUkwgPSAiLS13aXRob3V0LXBlcmwgLS13aXRob3V0LXBlcmwtdXJwbSIKLVBBQ0tBR0VDT05GSUdbcGVybF0gPSAiJHtXSVRIX1BFUkx9LCR7V0lUSE9VVF9QRVJMfSxwZXJsLCIKLQotIyBUaGUgLS13aXRoLWRic3FsIHdpbGwgb25seSB0ZWxsIFJQTSB0byBjaGVjayBmb3Igc3VwcG9ydCwgZGIKLSMgbWF5IG9yIG1heSBub3QgYmUgYnVpbHQgdy8gdGhlIGRic3FsIHN1cHBvcnQuCi1XSVRIX0RCID0gIi0td2l0aC1kYiAtLXdpdGgtZGJzcWwgLS13aXRob3V0LWRiLXRvb2xzLWludGVncmF0ZWQiCi1QQUNLQUdFQ09ORklHW2RiXSA9ICIke1dJVEhfREJ9LC0td2l0aG91dC1kYixkYiwiCi0KLVBBQ0tBR0VDT05GSUdbc3FsaXRlXSA9ICItLXdpdGgtc3FsaXRlLC0td2l0aG91dC1zcWxpdGUsc3FsaXRlMywiCi0KLSMgVGhpcyBzd2l0Y2ggc2ltcGx5IGRpc2FibGVzIGV4dGVybmFsIGJlZWNyeXB0LCBSUE01IGFsd2F5cyB1c2VzIGJlZWNyeXB0Ci0jIGZvciBiYXNlNjQgcHJvY2Vzc2luZyBhbmQgdmFyaW91cyBkaWdlc3QgYWxnb3JpdGhtcy4KLSMgQmVlY3J5cHQgaXMgb25seSB0aGUgcHJlZmVycmVkIGNyeXB0byBlbmdpbmUgaWYgaXQncyB0aGUgb25seSBlbmdpbmUgZW5hYmxlZC4KLVBBQ0tBR0VDT05GSUdbYmVlY3J5cHRdID0gIi0td2l0aC1iZWVjcnlwdD1leHRlcm5hbCwtLXdpdGgtYmVlY3J5cHQ9aW50ZXJuYWwsYmVlY3J5cHQsIgotCi0jIC0td2l0aC11c2VjcnlwdG89IHNldHRpbmcgZGVmaW5lZCB0aGUgaXRlbSBhcyB0aGUgcHJlZmVycmVkIHN5c3RlbQotIyBjcnlwdG8gZW5naW5lLCB3aGljaCB3aWxsIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgaW5jbHVkZWQgYmVlY3J5cHQKLVBBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wgLS13aXRoLXVzZWNyeXB0bz1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgotUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0td2l0aC1uc3MgLS13aXRoLXVzZWNyeXB0bz1uc3MsLS13aXRob3V0LW5zcyxuc3MsIgotUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0td2l0aC1nY3J5cHQgLS13aXRoLXVzZWNyeXB0bz1nY3J5cHQsLS13aXRob3V0LWdjcnlwdCxnY3J5cHQsIgotCi1QQUNLQUdFQ09ORklHW2tleXV0aWxzXSA9ICItLXdpdGgta2V5dXRpbHMsLS13aXRob3V0LWtleXV0aWxzLGtleXV0aWxzLCIKLVBBQ0tBR0VDT05GSUdbbGliZWxmXSA9ICItLXdpdGgtbGliZWxmLC0td2l0aG91dC1saWJlbGYsZWxmdXRpbHMsIgotCi1XSVRIX1NFTElOVVggPSAiLS13aXRoLXNlbGludXggLS13aXRoLXNlcG9sIC0td2l0aC1zZW1hbmFnZSIKLVdJVEhPVVRfU0VMSU5VWCA9ICItLXdpdGhvdXQtc2VsaW51eCAtLXdpdGhvdXQtc2Vwb2wgLS13aXRob3V0LXNlbWFuYWdlIgotUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIke1dJVEhfU0VMSU5VWH0sJHtXSVRIT1VUX1NFTElOVVh9LGxpYnNlbGludXgsIgotCi1XSVRIX05FT04gPSAiLS13aXRoLW5lb24gLS13aXRoLWxpYnByb3h5IC0td2l0aC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgotV0lUSE9VVF9ORU9OID0gIi0td2l0aG91dC1uZW9uIC0td2l0aG91dC1saWJwcm94eSAtLXdpdGhvdXQtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKLVBBQ0tBR0VDT05GSUdbbmVvbl0gPSAiJHtXSVRIX05FT059LCR7V0lUSE9VVF9ORU9OfSxuZW9uIGV4cGF0LCIKLQotUEFDS0FHRUNPTkZJR1tsdWFdID0gIi0td2l0aC1sdWEsLS13aXRob3V0LWx1YSxleHBhdCwiCi1QQUNLQUdFQ09ORklHW3RjbF0gPSAiLS13aXRoLXRjbCwtLXdpdGhvdXQtdGNsLHRjbCwiCi0KLVBBQ0tBR0VDT05GSUdbYXVnZWFzXSA9ICItLXdpdGgtYXVnZWFzLC0td2l0aG91dC1hdWdlYXMsYXVnZWFzLCIKLQotRVhUUkFfT0VDT05GICs9ICItLXZlcmJvc2UgXAotCQktLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCi0JCS0td2l0aC1maWxlIFwKLQkJLS13aXRoLXBhdGgtbWFnaWM9JXtfdXNybGlicnBtfS8uLi8uLi9zaGFyZS9taXNjL21hZ2ljLm1nYyBcCi0JCS0td2l0aC1zeWNrPWludGVybmFsIFwKLQkJLS13aXRob3V0LXJlYWRsaW5lIFwKLQkJLS13aXRob3V0LWxpYnRhc24xIFwKLQkJLS13aXRob3V0LXBha2Nob2lzIFwKLQkJLS13aXRob3V0LWdudXRscyBcCi0JCS0td2l0aC1wY3JlIFwKLQkJLS1lbmFibGUtdXRmOCBcCi0JCS0td2l0aC11dWlkIFwKLQkJLS13aXRoLWF0dHIgXAotCQktLXdpdGgtYWNsIFwKLQkJLS13aXRoLXB0aHJlYWRzIFwKLQkJLS13aXRob3V0LWN1ZGYgXAotCQktLXdpdGhvdXQtZmljbCBcCi0JCS0td2l0aG91dC1hdGVybSBcCi0JCS0td2l0aG91dC1uaXggXAotCQktLXdpdGhvdXQtYmFzaCBcCi0JCS0td2l0aG91dC1yYyBcCi0JCS0td2l0aG91dC1qcyBcCi0JCS0td2l0aG91dC1ncHNlZSBcCi0JCS0td2l0aG91dC1ydWJ5IFwKLQkJLS13aXRob3V0LXNxdWlycmVsIFwKLQkJLS13aXRob3V0LXNhc2wyIFwKLQkJLS13aXRoLWJ1aWxkLWV4dGxpYmRlcCBcCi0JCS0td2l0aC1idWlsZC1tYXhleHRsaWJkZXAgXAotCQktLXdpdGhvdXQtdmFsZ3JpbmQgXAotCQktLWRpc2FibGUtb3Blbm1wIFwKLQkJLS1lbmFibGUtYnVpbGQtcGljIFwKLQkJLS1lbmFibGUtYnVpbGQtdmVyc2lvbnNjcmlwdCBcCi0JCS0tZW5hYmxlLWJ1aWxkLXdhcm5pbmdzIFwKLQkJLS1lbmFibGUtYnVpbGQtZGVidWcgXAotCQktLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgXAotCQktLXdpdGgtcGF0aC1tYWNyb3M9JHtycG1fbWFjcm9zfSBcCi0JCS0td2l0aC1wYXRoLWxpYj0ke2xpYmRpcn0vcnBtIFwKLQkJLS13aXRoLWJ1Z3JlcG9ydD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyBcCi0JCS0tcHJvZ3JhbS1wcmVmaXg9IFwKLQkJWUFDQz1ieWFjYyIKLQotQ0ZMQUdTX2FwcGVuZCA9ICIgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UiCi0KLUxERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIi1scnQgLWxwdGhyZWFkIgotCi1QQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0gJHtQTn0tZG9jICR7UE59LWxpYnMgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1jb21tb24gJHtQTn0tYnVpbGQgcHl0aG9uLXJwbSBwZXJsLW1vZHVsZS1ycG0gJHtQTn0tbG9jYWxlIgotCi1TT0xJQlMgPSAiNS40LnNvIgotCi0jIEJhc2VkIG9uICVmaWxlcyBzZWN0aW9uIGluIHRoZSBycG0uc3BlYwotCi1GSUxFU18ke1BOfSA9ICAiJHtiaW5kaXJ9L3JwbSBcCi0JCSR7YmluZGlyfS9ycG1jb25zdGFudCBcCi0JCSR7bGliZGlyfS9ycG0vcnBtLiogXAotCQkke2xpYmRpcn0vcnBtL3RncGcgXAotCQkke2xpYmRpcn0vcnBtL21hY3JvcyBcCi0JCSR7bGliZGlyfS9ycG0vcnBtcG9wdCBcCi0JCSR7bGliZGlyfS9ycG0vcnBtMmNwaW8gXAotCQkke2xpYmRpcn0vcnBtL3ZjaGVjayBcCi0JCSR7bGliZGlyfS9ycG0vaGVscGVycyBcCi0JCSR7bGliZGlyfS9ycG0vcWYgXAotCQkke2xpYmRpcn0vcnBtL2NwdWluZm8ueWFtbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL210cmVlIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBta2V5IFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwbyBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbXJlcG8ucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbXNwZWNkdW1wIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3dnZXQgXAotCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlIFwKLQkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9ycG0gXAotCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3dkaiBcCi0JCSR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKLQkJJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtIFwKLQkJJHtsb2NhbHN0YXRlZGlyfS9saWIvd2RqIFwKLQkJJHtiaW5kaXJ9L3JwbS5yZWFsIFwKLQkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50LnJlYWwgXAotCQkke2JpbmRpcn0vcnBtMmNwaW8ucmVhbCBcCi0JCSIKLQotRklMRVNfJHtQTn0tY29tbW9uID0gIiR7YmluZGlyfS9ycG0yY3BpbyBcCi0JCSR7YmluZGlyfS9nZW5kaWZmIFwKLQkJJHtzeXNjb25mZGlyfS9ycG0gXAotCQkke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL3JlcGFja2FnZSBcCi0JCSIKLQotRklMRVNfJHtQTn0tbGlicyA9ICIke2xpYmRpcn0vbGlicnBtLSouc28gXAotCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQtKi5zbyBcCi0JCSR7bGliZGlyfS9saWJycG1kYi0qLnNvIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWlvLSouc28gXAotCQkke2xpYmRpcn0vbGlicnBtbWlzYy0qLnNvIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLSouc28gXAotCQkiCi0KLUZJTEVTXyR7UE59LWJ1aWxkID0gIiR7cHJlZml4fS9zcmMvcnBtIFwKLQkJJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKLQkJJHtiaW5kaXJ9L3JwbWJ1aWxkLnJlYWwgXAotCQkke2xpYmRpcn0vcnBtL2JycC0qIFwKLQkJJHtsaWJkaXJ9L3JwbS9jaGVjay1maWxlcyBcCi0JCSR7bGliZGlyfS9ycG0vY3Jvc3MtYnVpbGQgXAotCQkke2xpYmRpcn0vcnBtL2ZpbmQtZGVidWdpbmZvLnNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9maW5kLWxhbmcuc2ggXAotCQkke2xpYmRpcn0vcnBtL2ZpbmQtcHJvdi5wbCBcCi0JCSR7bGliZGlyfS9ycG0vZmluZC1wcm92aWRlcy5wZXJsIFwKLQkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcS5wbCBcCi0JCSR7bGliZGlyfS9ycG0vZmluZC1yZXF1aXJlcy5wZXJsIFwKLQkJJHtsaWJkaXJ9L3JwbS9nZXRwby5zaCBcCi0JCSR7bGliZGlyfS9ycG0vaHR0cC5yZXEgXAotCQkke2xpYmRpcn0vcnBtL2phdmFkZXBzLnNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9tb25vLWZpbmQtcHJvdmlkZXMgXAotCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1yZXF1aXJlcyBcCi0JCSR7bGliZGlyfS9ycG0vZXhlY3V0YWJsZWRlcHMuc2ggXAotCQkke2xpYmRpcn0vcnBtL2xpYnRvb2xkZXBzLnNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9vc2dpZGVwcy5wbCBcCi0JCSR7bGliZGlyfS9ycG0vcGVybGRlcHMucGwgXAotCQkke2xpYmRpcn0vcnBtL3BlcmwucHJvdiBcCi0JCSR7bGliZGlyfS9ycG0vcGVybC5yZXEgXAotCQkke2xpYmRpcn0vcnBtL3BocC5wcm92IFwKLQkJJHtsaWJkaXJ9L3JwbS9waHAucmVxIFwKLQkJJHtsaWJkaXJ9L3JwbS9wa2djb25maWdkZXBzLnNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0IFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0LnJlYWwgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jYWNoZSBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlLnJlYWwgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jbXAgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jbXAucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLnJlYWwgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZSBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlLnJlYWwgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kaWdlc3QgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kaWdlc3QucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL2FiaS1jb21wbGlhbmNlLWNoZWNrZXIucGwgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWF1dG90ZXN0LnBsIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vY2hyb290IFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vY3AgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9kYnNxbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL2ZpbmQgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9pbnN0YWxsLXNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vbHVhIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vbHVhYyBcCi0JCSR7bGliZGlyfS9ycG0vYmluL21raW5zdGFsbGRpcnMgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1sdWEgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1sdWFjIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vc3FsaXRlMyBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvY21ha2UgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2phdmEgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2xpYnRvb2wgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21hbmRyaXZhIFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9tb25vIFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9wZXJsIFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9waHAgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BrZ2NvbmZpZyBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcHl0aG9uIFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9ydWJ5IFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9zZWxpbnV4IFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC90Y2wgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5ycG1idWlsZCBcCi0JCSR7bGliZGlyfS9ycG0vdV9wa2cuc2ggXAotCQkke2xpYmRpcn0vcnBtL3Zwa2ctcHJvdmlkZXMuc2ggXAotCQkke2xpYmRpcn0vcnBtL3Zwa2ctcHJvdmlkZXMyLnNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2ggXAotCQkke2Rpc3Ryb21hY3JvZGlyfSBcCi0JCSIKLVJERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgotUkRFUEVORFNfJHtQTn0tYnVpbGQgPSAiZmlsZSBiYXNoIHBlcmwiCi0KLVJERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0gcHl0aG9uIgotCi1GSUxFU19weXRob24tcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtIgotUFJPVklERVMgKz0gInB5dGhvbi1ycG0iCi0KLUZJTEVTX3BlcmwtbW9kdWxlLXJwbSA9ICIke2xpYmRpcn0vcGVybC8qLyogXAotCQkiCi0KLVJERVBFTkRTXyR7UE59LWRldiArPSAiYmFzaCIKLQotRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vcnBtIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbS5sYSBcCi0JCSR7bGliZGlyfS9saWJycG0uc28gXAotCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQubGEgXAotCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuc28gXAotCQkke2xpYmRpcn0vbGlicnBtZGIubGEgXAotCQkke2xpYmRpcn0vbGlicnBtZGIuc28gXAotCQkke2xpYmRpcn0vbGlicnBtaW8ubGEgXAotCQkke2xpYmRpcn0vbGlicnBtaW8uc28gXAotCQkke2xpYmRpcn0vbGlicnBtbWlzYy5sYSBcCi0JCSR7bGliZGlyfS9saWJycG1taXNjLnNvIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmxhIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLnNvIFwKLQkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmxhIFwKLQkJJHtsaWJkaXJ9L3BrZ2NvbmZpZy9ycG0ucGMgXAotCQkke2xpYmRpcn0vcnBtL3JwbWRiX2xvYWRjdnQgXAotCQkiCi0KLUZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIgXAotCQkke2xpYmRpcn0vbGlicnBtLmEgXAotCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuYSBcCi0JCSR7bGliZGlyfS9saWJycG1kYi5hIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWlvLmEgXAotCQkke2xpYmRpcn0vbGlicnBtbWlzYy5hIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmEgXAotCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEuYSBcCi0JCSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLyouYSBcCi0JCSIKLQotZG9fY29uZmlndXJlKCkgewotCSMgRGlzYWJsZSB0ZXN0cyEKLQllY2hvICJhbGw6IiA+ICR7U30vdGVzdHMvTWFrZWZpbGUuYW0KLQlzZWQgLWUgJ3MvQF9fTUtESVJfUEAvJXtfX21rZGlyfSAtcC8nIC1pICR7U30vbWFjcm9zL21hY3Jvcy5pbgotCi0JKCBjZCAke1N9OyAke1N9L2F1dG9nZW4uc2ggKQotCi0JIyBOQVNUWSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgZmlsZXMgdGhlIHJpZ2h0IHBrZy1jb25maWcgZmlsZS4uLgotCXNlZCAtZSAncy9wa2ctY29uZmlnIC0tZXhpc3RzIHV1aWQvcGtnLWNvbmZpZyAtLWV4aXN0cyBvc3NwLXV1aWQvZycgXAotCSAgICAtZSAncy9wa2ctY29uZmlnIHV1aWQvcGtnLWNvbmZpZyBvc3NwLXV1aWQvZycgLWkgJHtTfS9jb25maWd1cmUKLQotCSggY2QgJHtTfS9zeWNrIDsgc2V0ICtlIDsgcm0gLS0gLWwqIDsgbWFrZSBkaXN0Y2xlYW4gKSB8fCA6Ci0KLQlleHBvcnQgdmFycHJlZml4PSR7bG9jYWxzdGF0ZWRpcn0KLQlvZV9ydW5jb25mCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgQ29uZmlndXJlIC1kaXN0cmlidXRpb24gd2lkZS0gcGFja2FnZSBjcnlwdG8gc2V0dGluZ3MKLQkjIElmIHRoZXNlIGNoYW5nZSwgZWZmZWN0aXZlbHkgYWxsIHBhY2thZ2VzIGhhdmUgdG8gYmUgdXBncmFkZWQhCi0Jc2VkIC1pIC1lICdzLCVfYnVpbGRfZmlsZV9kaWdlc3RfYWxnby4qLCVfYnVpbGRfc2lnbiAke1JQTV9GSUxFX0RJR0VTVF9BTEdPfSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MucnBtYnVpbGQKLQlzZWQgLWkgLWUgJ3MsJV9idWlsZF9zaWduLiosJV9idWlsZF9zaWduICR7UlBNX1NFTEZfU0lHTl9BTEdPfSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MucnBtYnVpbGQKLQotCXNlZCAtaSAtZSAncywlX19zY3JpcHRsZXRfcmVxdWlyZXMsIyUlX19zY3JpcHRsZXRfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCi0Jc2VkIC1pIC1lICdzLCVfX3BlcmxfcHJvdmlkZXMsIyUlX19wZXJsX3Byb3ZpZGVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgotCXNlZCAtaSAtZSAncywlX19wZXJsX3JlcXVpcmVzLCMlJV9fcGVybF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKLQlzZWQgLWkgLWUgJ3MsJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzW15fXS4qLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlcyAwLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcwotCXNlZCAtaSAtZSAncyxeIyVfb3BlbmFsbF9iZWZvcmVfY2hyb290LiosJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3RcdDEsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCi0KLQkjIEVuYWJsZSBNSVBTNjQgTjMyIHRyYW5zYWN0aW9ucy4gIChUaGlzIGlzIGEgbm8tb3Agb24gbm9uLU1JUFMgdGFyZ2V0cy4pCi0Jc2VkIC1pIC1lICdzLCVfdHJhbnNhY3Rpb25fY29sb3JbXl9dLiosJV90cmFuc2FjdGlvbl9jb2xvciA3LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcwotCi0JIyBFbmFibGUgRGViaWFuIHN0eWxlIGFyYml0cmFyeSB0YWdzLi4uCi0Jc2VkIC1pIC1lICdzLCVfYXJiaXRyYXJ5X3RhZ3NbXl9dLiosJV9hcmJpdHJhcnlfdGFncyAle19hcmJpdHJhcnlfdGFnc19kZWJpYW59LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcwotCi0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BlcmZpbGVfcnBtZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCi0KLQkjIFJlbW92ZSB1bnBhY2thZ2VkIGZpbGVzIChiYXNlZCBvbiBsaXN0IGluIHJwbS5zcGVjKQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS97U3BlY2ZpbGUucG0sY3BhbmZsdXRlLGNwYW5mbHV0ZTIscnBtZGlmZixycG1kaWZmLmNnaSxzcWwucHJvdixzcWwucmVxLHRjbC5yZXEsdHJwbX0KLQotCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtY2FjaGUuOCoKLQlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWdyYXBoLjgqCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWNhY2hlLjgqCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWdyYXBoLjgqCi0Jcm0gLXJmICR7RH0vJHttYW5kaXJ9L3tmcixrb30KLQotCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9wb3B0LmgKLQlybSAtZiAke0R9LyR7bGliZGlyfS9saWJwb3B0LioKLQlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvcG9wdC5wYwotCXJtIC1mICR7RH0vJHtkYXRhZGlyfS9sb2NhbGUvKi9MQ19NRVNTQUdFUy9wb3B0Lm1vCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMy9wb3B0LjMKLQotCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEveGFyLjEqCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0veGFyCi0Jcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS94YXIKLQlybSAtZiAke0R9LyR7bGliZGlyfS9saWJ4YXIqCi0KLQlybSAtZiAke0R9LyR7YmluZGlyfS9seioKLQlybSAtZiAke0R9LyR7YmluZGlyfS91bmx6bWEKLQlybSAtZiAke0R9LyR7YmluZGlyfS91bnh6Ci0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0veHoqCi0Jcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS9sem1hKgotCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEvbHoqLjEKLQlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlibHptYSoKLQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLmEKLQlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi5sYQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi5hCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLmxhCi0KLQkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBmIC1hIFwoIC1uYW1lIHBlcmxsb2NhbC5wb2QgLW8gLW5hbWUgLnBhY2tsaXN0IFwKLQkjCS1vIFwoIC1uYW1lICcqLmJzJyAtYSAtZW1wdHkgXCkgXCkgLWV4ZWMgcm0gLWYge30gJzsnCi0JI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZCAtZGVwdGggLWV4ZWMgcm1kaXIge30gMj4vZGV2L251bGwgJzsnCi0KLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZGJjb252ZXJ0LnNoCi0KLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbGlic3FsZGIuKgotCi0JIyBXZSBkb24ndCB3YW50LCBub3IgbmVlZCB0aGUgTWFuZHJpdmEgbXVsdGlhcmNoIGl0ZW1zCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLXBsYXRmb3JtCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2NoZWNrLW11bHRpYXJjaC1maWxlcwotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ta211bHRpYXJjaAotCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2guaAotCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dzdHJlYW1lci5zaAotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nZW1faGVscGVyLnJiCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3J1YnlnZW1zLnJiCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2ttb2QtZGVwcy5zaAotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25lZ2dzLnB5Ci0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2tlcm5lbAotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9nc3RyZWFtZXIKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL21nbwotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGJjb252ZXJ0Ci0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9wb20yc3BlYwotCi0Jcm0gLXJmICR7RH0vdmFyL2xpYi93ZGogJHtEfS92YXIvY2FjaGUvd2RqCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWNoZWNrZXIucGwKLQotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0JIyBDcmVhdGUgYW5kIGluc3RhbGwgZGlzdHJpYnV0aW9uIHNwZWNpZmljIG1hY3JvcwotCW1rZGlyIC1wICR7RH0vJHtkaXN0cm9tYWNyb2Rpcn0KLQljYXQgPDwgRU9GID4gJHtEfS8ke2Rpc3Ryb21hY3JvZGlyfS9tYWNyb3MKLSVfZGVmYXVsdGRvY2RpcgkJJHtkb2NkaXJ9Ci0KLSVfcHJlZml4ICAgICAgICAgICAgICAgICR7cHJlZml4fQotJV9leGVjX3ByZWZpeCAgICAgICAgICAgJHtleGVjX3ByZWZpeH0KLSVfZGF0YXJvb3RkaXIgICAgICAgICAgICR7ZGF0YWRpcn0KLSVfYmluZGlyICAgICAgICAgICAgICAgICR7YmluZGlyfQotJV9zYmluZGlyICAgICAgICAgICAgICAgJHtzYmluZGlyfQotJV9saWJleGVjZGlyICAgICAgICAgICAgJXtfbGliZGlyfS8le25hbWV9Ci0lX2RhdGFkaXIgICAgICAgICAgICAgICAke2RhdGFkaXJ9Ci0lX3N5c2NvbmZkaXIgICAgICAgICAgICAke3N5c2NvbmZkaXJ9Ci0lX3NoYXJlZHN0YXRlZGlyICAgICAgICAke3NoYXJlZHN0YXRlZGlyfQotJV9sb2NhbHN0YXRlZGlyICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfQotJV9saWIgICAgICAgICAgICAgICAgICAgbGliCi0lX2xpYmRpciAgICAgICAgICAgICAgICAle19leGVjX3ByZWZpeH0vJXtfbGlifQotJV9pbmNsdWRlZGlyICAgICAgICAgICAgJHtpbmNsdWRlZGlyfQotJV9vbGRpbmNsdWRlZGlyICAgICAgICAgJHtvbGRpbmNsdWRlZGlyfQotJV9pbmZvZGlyICAgICAgICAgICAgICAgJHtpbmZvZGlyfQotJV9tYW5kaXIgICAgICAgICAgICAgICAgJHttYW5kaXJ9Ci0lX2xvY2FsZWRpciAgICAgICAgICAgICAle19saWJkaXJ9L2xvY2FsZQotRU9GCi0KLQkjIENyZWF0ZSBhbmQgaW5zdGFsbCBtdWx0aWxpYiBzcGVjaWZpYyBtYWNyb3MKLQkke0BtdWx0aWxpYl9ycG1tYWNyb3MoZCl9Ci19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7Ci0Jc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAke0R9LyR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vdHJhbnNhY3Rpb24ucHkKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKLQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9weXRob258IyEgL3Vzci9iaW4vZW52IHB5dGhvbnwnICR7RH0vJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS90cmFuc2FjdGlvbi5weQotfQotCi1kZWYgbXVsdGlsaWJfcnBtbWFjcm9zKGQpOgotICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCi0gICAgIyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBUT09MQ0hBSU5fT1BUSU9OUyAoLS1zeXNyb290KQotICAgIGxvY2FsZGF0YS5kZWxWYXIoJ1RPT0xDSEFJTl9PUFRJT05TJykKLQotICAgICMgU2V0ICdsb2NhbGRhdGEnIHZhbHVlcyB0byBiZSBjb25zaXN0ZW50IHdpdGggJ2QnIHZhbHVlcy4KLSAgICBsb2NhbGRhdGEuc2V0VmFyKCdkaXN0cm9tYWNyb2RpcicsIGQuZ2V0VmFyKCdkaXN0cm9tYWNyb2RpcicsIFRydWUpKQotICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignV09SS0RJUicsIFRydWUpKQotCi0gICAgcmV0ID0gZ2VuX2FyY2hfbWFjcm8obG9jYWxkYXRhKQotCi0gICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgotICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6Ci0gICAgICAgICMgTG9hZCBvdmVycmlkZXMgZnJvbSAnZCcgdG8gYXZvaWQgaGF2aW5nIHRvIHJlc2V0IHRoZSB2YWx1ZS4uLgotICAgICAgICBsb2NhbGRhdGEgPSBkLmNyZWF0ZUNvcHkoKQotICAgICAgICBvdmVycmlkZXMgPSBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KLSAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQotICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIGl0ZW0gKyAiLSIpCi0gICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQotICAgICAgICByZXQgKz0gZ2VuX2FyY2hfbWFjcm8obG9jYWxkYXRhKQotICAgIHJldHVybiByZXQKLQotZGVmIGdlbl9hcmNoX21hY3JvKGQpOgotICAgICMgR2VuZXJhdGUgc2hlbGwgc2NyaXB0IHRvIHByb2R1Y2UgdGhlIGZpbGUgYXMgcGFydCBvZiBkb19pbnN0YWxsCi0gICAgdmFsICA9ICJta2RpciAtcCAke0R9LyR7ZGlzdHJvbWFjcm9kaXJ9LyR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfVxuIgotICAgIHZhbCArPSAiY2F0IDw8IEVPRiA+ICR7RH0vJHtkaXN0cm9tYWNyb2Rpcn0vJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9L21hY3Jvc1xuIgotICAgIHZhbCArPSAiJV9saWIgICAgICAgICAgICAgICAke2Jhc2VsaWJ9XG4iCi0gICAgdmFsICs9ICIlX2xpYmRpciAgICAgICAgICAgICR7bGliZGlyfVxuIgotICAgIHZhbCArPSAiJV9sb2NhbGVkaXIgICAgICAgICAke2xvY2FsZWRpcn1cbiIKLSAgICB2YWwgKz0gIlxuIgotICAgIHZhbCArPSAiIyBUb29sY2hhaW4gY29uZmlndXJhdGlvblxuIgotICAgIHZhbCArPSAiJVRPT0xDSEFJTl9PUFRJT05TICAle25pbH1cbiIKLSAgICB2YWwgKz0gIiVfX2FyICAgICAgICAgICAgICAgJHtAZC5nZXRWYXIoJ0FSJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIiVfX2FzICAgICAgICAgICAgICAgJHtAZC5nZXRWYXIoJ0FTJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIiVfX2NjICAgICAgICAgICAgICAgJHtAZC5nZXRWYXIoJ0NDJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIiVfX2NwcCAgICAgICAgICAgICAgJHtAZC5nZXRWYXIoJ0NQUCcsIFRydWUpLnJlcGxhY2UoJyQnLCclJyl9XG4iCi0gICAgdmFsICs9ICIlX19jeHggICAgICAgICAgICAgICR7QGQuZ2V0VmFyKCdDWFgnLCBUcnVlKS5yZXBsYWNlKCckJywnJScpfVxuIgotICAgIHZhbCArPSAiJV9fbGQgICAgICAgICAgICAgICAke0BkLmdldFZhcignTEQnLCBUcnVlKS5yZXBsYWNlKCckJywnJScpfVxuIgotICAgIHZhbCArPSAiJV9fbm0gICAgICAgICAgICAgICAke0BkLmdldFZhcignTk0nLCBUcnVlKS5yZXBsYWNlKCckJywnJScpfVxuIgotICAgIHZhbCArPSAiJV9fb2JqY29weSAgICAgICAgICAke0BkLmdldFZhcignT0JKQ09QWScsIFRydWUpLnJlcGxhY2UoJyQnLCclJyl9XG4iCi0gICAgdmFsICs9ICIlX19vYmpkdW1wICAgICAgICAgICR7QGQuZ2V0VmFyKCdPQkpEVU1QJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIiVfX3JhbmxpYiAgICAgICAgICAgJHtAZC5nZXRWYXIoJ1JBTkxJQicsIFRydWUpLnJlcGxhY2UoJyQnLCclJyl9XG4iCi0gICAgdmFsICs9ICIlX19zdHJpcCAgICAgICAgICAgICR7QGQuZ2V0VmFyKCdTVFJJUCcsIFRydWUpLnJlcGxhY2UoJyQnLCclJyl9XG4iCi0gICAgdmFsICs9ICJFT0ZcbiIKLSAgICB2YWwgKz0gIlxuIgotICAgIHJldHVybiBkLmV4cGFuZCh2YWwpCi0KLQotYWRkX25hdGl2ZV93cmFwcGVyKCkgewotICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0gXAotCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCi0JCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAotCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKLQotICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0yY3BpbyBcCi0JCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKLQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCi0JCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQotCi0gICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKLQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAotCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKLQkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCi0KLSAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtY29uc3RhbnQgXAotCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCi0JCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAotCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKLQotCWZvciBycG1fYmluYXJ5IGluICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcnBtKiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdDsgZG8KLSAgICAgICAgCWNyZWF0ZV93cmFwcGVyICRycG1fYmluYXJ5IFwKLQkJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKLQkJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAotCQkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCi0JZG9uZQotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0JYWRkX25hdGl2ZV93cmFwcGVyCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKLQlhZGRfbmF0aXZlX3dyYXBwZXIKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTYuYmIKaW5kZXggZjJjMTJkMi4uMTMzMjM5NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40LjE2LmJiCkBAIC0xMTYsNiArMTE2LDkgQEAKIAkgICBmaWxlOi8vcnBtLWZpeC1sdWEtdGVzdHMtY29tcGlsYXRpb24tZmFpbHVyZS5wYXRjaCBcCiAJICAgZmlsZTovL3JwbXF2LmMtY2hlY2stX2dwZ19wYXNzcGhyYXNlLWJlZm9yZS1hc2stZm9yLWlucHV0LnBhdGNoIFwKIAkgICBmaWxlOi8vMDAwMS1EaXNhYmxlLV9fc3luY19hZGRfYW5kX2ZldGNoXzgtb24tbmlvczIucGF0Y2ggXAorCSAgIGZpbGU6Ly9nY2M2LXN0ZGxpYi5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtc3lzdGVtLmgtcXVlcnkuYy1zdXBwb3J0LW5vc2lnbmF0dXJlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWVuc3VyZS1ycG0yY3Bpby1jYWxsLXJwbS1yZWxvY2F0aW9uLWNvZGUucGF0Y2ggXAogIgogCiAjIE9FIHNwZWNpZmljIGNoYW5nZXMKQEAgLTE1MSw2ICsxNTQsNyBAQAogCSAgIGZpbGU6Ly9ycG0tcnBtZGItZ3JhbW1hci5wYXRjaCBcCiAJICAgZmlsZTovL3JwbS1kaXNhYmxlLWJsYWtldGVzdC5wYXRjaCBcCiAJICAgZmlsZTovL3JwbS1hdXRvZ2VuLWZvcmNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtZGItcHJldmVudC1yYWNlLWluLXRtcGRpci1jcmVhdGlvbi5wYXRjaCBcCiAJICAgZmlsZTovL3JwbWRiLW1vcmUtdmVyYm9zZS1lcnJvci1sb2dnaW5nLWluLXJwbVRlbXBGaWxlLnBhdGNoIFwKICIKIApAQCAtMTY0LDcgKzE2OCw3IEBACiAKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gInJwbS0oP1A8cHZlcj4oXGQrW1wuXC1fXSopKyktLiokIgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0Citpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB5dGhvbi1kaXIKIAogYWNwYXRocyA9ICItSSAke1N9L2RiL2Rpc3QvYWNsb2NhbCAtSSAke1N9L2RiL2Rpc3QvYWNsb2NhbF9qYXZhIgogCkBAIC0yNTcsNyArMjYxLDcgQEAKIAogV0lUSF9QWVRIT04gPSAiIC0td2l0aC1weXRob249JHtQWVRIT05fQkFTRVZFUlNJT059IFwKIAkJLS13aXRoLXB5dGhvbi1pbmMtZGlyPSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCi0JCS0td2l0aC1weXRob24tbGliLWRpcj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMgXAorCQktLXdpdGgtcHl0aG9uLWxpYi1kaXI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAogCQktLXdpdGhvdXQtcHl0aG9uZW1iZWQiCiBQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiJHtXSVRIX1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24sIgogCkBAIC0zNDQsNyArMzQ4LDcgQEAKIAkJLS1wcm9ncmFtLXByZWZpeD0gXAogCQlZQUNDPWJ5YWNjIgogCi1DRkxBR1NfYXBwZW5kID0gIiAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSIKK0NGTEFHU19hcHBlbmQgPSAiIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FIC1EX0dMSUJDWFhfSU5DTFVERV9ORVhUX0NfSEVBREVSUyIKIAogTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiLWxydCAtbHB0aHJlYWQiCiAKQEAgLTQ3NSw3ICs0NzksNyBAQAogCiBSREVQRU5EU19weXRob24tcnBtID0gIiR7UE59IHB5dGhvbiIKIAotRklMRVNfcHl0aG9uLXJwbSA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbSIKK0ZJTEVTX3B5dGhvbi1ycG0gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vcnBtIgogUFJPVklERVMgKz0gInB5dGhvbi1ycG0iCiAKIEZJTEVTX3BlcmwtbW9kdWxlLXJwbSA9ICIke2xpYmRpcn0vcGVybC8qLyogXApAQCAtNTEwLDcgKzUxNCw3IEBACiAJCSR7bGliZGlyfS9saWJycG1taXNjLmEgXAogCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuYSBcCiAJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5hIFwKLQkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5hIFwKKwkJJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vcnBtLyouYSBcCiAJCSIKIAogZG9fY29uZmlndXJlKCkgewpAQCAtNTI0LDcgKzUyOCw3IEBACiAJc2VkIC1lICdzL3BrZy1jb25maWcgLS1leGlzdHMgdXVpZC9wa2ctY29uZmlnIC0tZXhpc3RzIG9zc3AtdXVpZC9nJyBcCiAJICAgIC1lICdzL3BrZy1jb25maWcgdXVpZC9wa2ctY29uZmlnIG9zc3AtdXVpZC9nJyAtaSAke1N9L2NvbmZpZ3VyZQogCi0JKCBjZCAke1N9L3N5Y2sgOyBzZXQgK2UgOyBybSAtLSAtbCogOyBtYWtlIGRpc3RjbGVhbiApIHx8IDoKKwkoIGNkICR7U30vc3ljayA7IHNldCArZSA7IHJtIC0tIC1sKiA7IHJtIE1ha2VmaWxlIGNvbmZpZy5oIGNvbmZpZy5zdGF0dXMgbGliL01ha2VmaWxlIGxpYnRvb2wgc3RhbXAtaDEgdGVzdHMvLmRlcHMgdGVzdHMvTWFrZWZpbGUgICkgfHwgOgogCiAJZXhwb3J0IHZhcnByZWZpeD0ke2xvY2Fsc3RhdGVkaXJ9CiAJb2VfcnVuY29uZgpAQCAtNTUxLDU0ICs1NTUsMjAgQEAKIAlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9weXRob25kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoCiAJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcGVyZmlsZV9ycG1kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKIAotCSMgUmVtb3ZlIHVucGFja2FnZWQgZmlsZXMgKGJhc2VkIG9uIGxpc3QgaW4gcnBtLnNwZWMpCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3tTcGVjZmlsZS5wbSxjcGFuZmx1dGUsY3BhbmZsdXRlMixycG1kaWZmLHJwbWRpZmYuY2dpLHNxbC5wcm92LHNxbC5yZXEsdGNsLnJlcSx0cnBtfQotCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1jYWNoZS44KgotCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtZ3JhcGguOCoKLQlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtY2FjaGUuOCoKLQlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtZ3JhcGguOCoKLQlybSAtcmYgJHtEfS8ke21hbmRpcn0ve2ZyLGtvfQotCiAJcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L3BvcHQuaAogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnBvcHQuKgogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9wb3B0LnBjCiAJcm0gLWYgJHtEfS8ke2RhdGFkaXJ9L2xvY2FsZS8qL0xDX01FU1NBR0VTL3BvcHQubW8KIAlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4zL3BvcHQuMwogCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS94YXIuMSoKLQlybSAtZiAke0R9LyR7YmluZGlyfS94YXIKLQlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L3hhcgotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnhhcioKLQotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L2x6KgotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VubHptYQotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VueHoKLQlybSAtZiAke0R9LyR7YmluZGlyfS94eioKLQlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L2x6bWEqCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS9seiouMQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJsem1hKgotCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyouYQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLmxhCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLmEKLQlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoubGEKLQotCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGYgLWEgXCggLW5hbWUgcGVybGxvY2FsLnBvZCAtbyAtbmFtZSAucGFja2xpc3QgXAotCSMJLW8gXCggLW5hbWUgJyouYnMnIC1hIC1lbXB0eSBcKSBcKSAtZXhlYyBybSAtZiB7fSAnOycKLQkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBkIC1kZXB0aCAtZXhlYyBybWRpciB7fSAyPi9kZXYvbnVsbCAnOycKKwlybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hCisJcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoubGEKKwlybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vcnBtLyouYQorCXJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9ycG0vKi5sYQogCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2RiY29udmVydC5zaAotCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2xpYnNxbGRiLioKIAotCSMgV2UgZG9uJ3Qgd2FudCwgbm9yIG5lZWQgdGhlIE1hbmRyaXZhIG11bHRpYXJjaCBpdGVtcwotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1kaXNwYXRjaAotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1wbGF0Zm9ybQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9jaGVjay1tdWx0aWFyY2gtZmlsZXMKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWttdWx0aWFyY2gKLQlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoLmgKLQogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nc3RyZWFtZXIuc2gKIAlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ2VtX2hlbHBlci5yYgogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ydWJ5Z2Vtcy5yYgpAQCAtNjA3LDEyICs1NzcsMTAgQEAKIAlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQva2VybmVsCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2dzdHJlYW1lcgogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vbWdvCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kYmNvbnZlcnQKIAlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3BvbTJzcGVjCiAKIAlybSAtcmYgJHtEfS92YXIvbGliL3dkaiAke0R9L3Zhci9jYWNoZS93ZGoKIAlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktY2hlY2tlci5wbAotCiB9CiAKIGRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKQEAgLTY0NSwxMSArNjEzLDExIEBACiB9CiAKIGRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7Ci0Jc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAke0R9LyR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vdHJhbnNhY3Rpb24ucHkKKwlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9weXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9ycG0vdHJhbnNhY3Rpb24ucHkKIH0KIAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKLQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9weXRob258IyEgL3Vzci9iaW4vZW52IHB5dGhvbnwnICR7RH0vJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS90cmFuc2FjdGlvbi5weQorCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL3B5dGhvbnwjISAvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3JwbS90cmFuc2FjdGlvbi5weQogfQogCiBkZWYgbXVsdGlsaWJfcnBtbWFjcm9zKGQpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYwppbmRleCBjNjVmMjcwLi4zNzg5N2FiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYwpAQCAtMywxMSArMyw2IEBACiBCVUdUUkFDS0VSID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvYnVnemlsbGEuaHRtbCIKIFNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgogCi0jIEdQTHYyKyAoPDwgMy4wLjApLCBHUEx2MysgKD49IDMuMC4wKQotTElDRU5TRSA9ICJHUEx2MysiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLQotIyBuZWVkcyB0byBhZGQgYWNsIGFuZCBhdHRyCiBERVBFTkRTID0gInBvcHQiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9mdHAvcnN5bmMvc3JjL3JzeW5jLSR7UFZ9LnRhci5neiBcCkBAIC0yMSwzICsxNiw1IEBACiB9CiAKIEVYVFJBX09FTUFLRT0nU1RSSVA9IiInCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18yLjYuOS5iYgppbmRleCA2ODU0Yzc3Li5lZmRmMjU1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIKQEAgLTEsMjggKzEsMTUgQEAKLVNVTU1BUlkgPSAiRmlsZSBzeW5jaHJvbml6YXRpb24gdG9vbCIKLUhPTUVQQUdFID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2J1Z3ppbGxhLmh0bWwiCi1TRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK3JlcXVpcmUgcnN5bmMuaW5jCiAKLSMgbmVlZHMgdG8gYWRkIGFjbCBhbmQgYXR0cgotREVQRU5EUyA9ICJwb3B0IgotCi1TUkNfVVJJID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvZnRwL3JzeW5jL3NyYy9yc3luYy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3JzeW5jZC5jb25mIgorU1JDX1VSSSArPSAiZmlsZTovL3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnN5bmNkLmNvbmYgXAorIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiOTk2ZDhkODgzMWRiY2ExNzkxMDA5NGU1NmRjYjU5NDIiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2E0MzczMDFiZWNkODkwZTczMzAwYmM2OWEzOTE4OWZmMTU2NGJhYTc2MTk0OGZmMTQ5YjNkZDdiZGU2MzNmOSIKIAotaW5oZXJpdCBhdXRvdG9vbHMKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JzeW5jZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9Ci19Ci0KLUVYVFJBX09FTUFLRT0nU1RSSVA9IiInCi0KIExJQ0VOU0UgPSAiR1BMdjIrIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmQ1YTlkNGM0ZDNhZjI1Y2Q2OGZkODNlOGE4Y2IwOWMiCiAKIFBSID0gInI0IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMy4xLjIuYmIKaW5kZXggOTYzN2VkNC4uYzZjYjMzMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4yLmJiCkBAIC01LDcgKzUsMTMgQEAKIFNSQ19VUklbbWQ1c3VtXSA9ICIwZjc1OGQ3ZTAwMGMwZjdmN2QzNzkyNjEwZmFkNzBjYiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJlY2ZhNjJhN2ZhM2M0YzE4YjllY2NkOGMxNmVhZGRlZTRiZDMwOGE3NmVhNTBiNWMwMmE1ODQwZjA5YzBhMWMyIgogCi1QQUNLQUdFQ09ORklHID8/PSAiYWNsIGF0dHIiCisjIEdQTHYyKyAoPDwgMy4wLjApLCBHUEx2MysgKD49IDMuMC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImFjbCBhdHRyIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorIgogUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbC1zdXBwb3J0LC0tZGlzYWJsZS1hY2wtc3VwcG9ydCxhY2wsIgogUEFDS0FHRUNPTkZJR1thdHRyXSA9ICItLWVuYWJsZS14YXR0ci1zdXBwb3J0LC0tZGlzYWJsZS14YXR0ci1zdXBwb3J0LGF0dHIsIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS5pbmMKaW5kZXggMzEzZTc1Mi4uZmRlNjdlOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYwpAQCAtMjAsNyArMjAsOCBAQAogU0hSVF9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKIFNSQ19VUkkgPSAiaHR0cDovL2NhY2hlLnJ1YnktbGFuZy5vcmcvcHViL3J1YnkvJHtTSFJUX1ZFUn0vcnVieS0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vZXh0bWsucGF0Y2ggXAotIgorICAgICAgICAgICBmaWxlOi8vMDAwMi1PYmV5LUxERkxBR1MtZm9yLXRoZS1saW5rLW9mLWxpYnJ1YnkucGF0Y2ggXAorICAgICAgICAgICAiCiAKIGluaGVyaXQgYXV0b3Rvb2xzCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LzAwMDItT2JleS1MREZMQUdTLWZvci10aGUtbGluay1vZi1saWJydWJ5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkvMDAwMi1PYmV5LUxERkxBR1MtZm9yLXRoZS1saW5rLW9mLWxpYnJ1YnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxMTRiYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LzAwMDItT2JleS1MREZMQUdTLWZvci10aGUtbGluay1vZi1saWJydWJ5LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDMwNmU5NWE5ODE4ZDM5ZDMzNDkwNzVhYWM5NjA5ZTA2MmIwZjE5Y2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorRGF0ZTogVGh1LCA1IE1heSAyMDE2IDEwOjU5OjA3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBPYmV5IExERkxBR1MgZm9yIHRoZSBsaW5rIG9mIGxpYnJ1YnkKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggN2RhMjQ4OC4uNWI0YWVhMSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTc1LDcgKzc1LDcgQEAgRVhUTElCUyA9CisgTElCUyA9IEBMSUJTQCAkKEVYVExJQlMpCisgTUlTU0lORyA9IEBMSUJPQkpTQCBAQUxMT0NBQAorIExEU0hBUkVEID0gQExJQlJVQllfTERTSEFSRURACistRExERkxBR1MgPSBATElCUlVCWV9ETERGTEFHU0AgJChYTERGTEFHUykgJChBUkNIX0ZMQUcpCisrRExERkxBR1MgPSBATElCUlVCWV9ETERGTEFHU0AgQExERkxBR1NAICQoWExERkxBR1MpICQoQVJDSF9GTEFHKQorIFNPTElCUyA9IEBTT0xJQlNACisgTUFJTkxJQlMgPSBATUFJTkxJQlNACisgQVJDSE1JTklPQkpTID0gQE1JTklPQkpTQAorLS0gCisyLjguMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzE1MDIzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotcmVxdWlyZSBydWJ5LmluYwotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzI2ZTk5ZGRjNzUzODFjN2I1MGM4NWY3MDg5ZjMyNjAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZmYzBmMzE3ZTQyOWU2YjI5ZDRhOThhYzUyMWMzY2U2NTQ4MWJmZDIyYThjZjg0NWZhMDJhN2IxMTNkOWI0NCIKLQotIyBpdCdzIHVua25vd24gdG8gY29uZmlndXJlIHNjcmlwdCwgYnV0IHRoZW4gcGFzc2VkIHRvIGV4dGNvbmYucmIKLSMgbWF5YmUgaXQncyBub3QgcmVhbGx5IG5lZWRlZCBhcyB3ZSdyZSBoYXJkY29kaW5nIHRoZSByZXN1bHQgd2l0aAotIyAwMDAxLXNvY2tldC1leHRjb25mLWhhcmRjb2RlLXdpZGUtZ2V0YWRkci1pbmZvLXRlc3Qtb3V0Y28ucGF0Y2gKLVVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbyIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUcgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKLQotUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS13aXRoLXZhbGdyaW5kPXllcywgLS13aXRoLXZhbGdyaW5kPW5vLCB2YWxncmluZCIKLVBBQ0tBR0VDT05GSUdbZ3BtXSA9ICItLXdpdGgtZ21wPXllcywgLS13aXRoLWdtcD1ubywgZ21wIgotUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICIsLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbywiCi0KLUVYVFJBX09FQ09ORiA9ICJcCi0gICAgLS1kaXNhYmxlLXZlcnNpb25lZC1wYXRocyBcCi0gICAgLS1kaXNhYmxlLXJwYXRoIFwKLSAgICAtLWRpc2FibGUtZHRyYWNlIFwKLSAgICAtLWVuYWJsZS1zaGFyZWQgXAotICAgIC0tZW5hYmxlLWxvYWQtcmVsYXRpdmUgXAotIgotCi1FWFRSQV9PRU1BS0UgPSAiIFwKLSAgICBMSUJSVUJZQVJHPSctbHJ1Ynktc3RhdGljJyBcCi0iCi0KLWRvX2luc3RhbGwoKSB7Ci0gICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCi19Ci0KLVBBQ0tBR0VTID0rICIke1BOfS1yaS1kb2NzICR7UE59LXJkb2MiCi0KLVNVTU1BUllfJHtQTn0tcmktZG9jcyA9ICJyaSAoUnVieSBJbnRlcmFjdGl2ZSkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFJ1Ynkgc3RhbmRhcmQgbGlicmFyeSIKLVJERVBFTkRTXyR7UE59LXJpLWRvY3MgPSAiJHtQTn0iCi1GSUxFU18ke1BOfS1yaS1kb2NzICs9ICIke2RhdGFkaXJ9L3JpIgotCi1TVU1NQVJZXyR7UE59LXJkb2MgPSAiUkRvYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRvciBmcm9tIFJ1Ynkgc291cmNlIgotUkRFUEVORFNfJHtQTn0tcmRvYyA9ICIke1BOfSIKLUZJTEVTXyR7UE59LXJkb2MgKz0gIiR7bGliZGlyfS9ydWJ5LyovcmRvYyAke2JpbmRpcn0vcmRvYyIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcnVieWdlbXMiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY0NTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjUuYmIKQEAgLTAsMCArMSw0MiBAQAorcmVxdWlyZSBydWJ5LmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYmQ4ZTM0OWQ0ZmIyYzc1ZDkwODE3NjQ5Njc0Zjk0YmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzBjNGIzMTY5N2E0Y2E0ZWEwYzhkYjhhZDMwY2Y0NWU2NjkwYTBmMDk2ODdlNWQ0ODNjOTMzYzAzY2EzMzVlMyIKKworIyBpdCdzIHVua25vd24gdG8gY29uZmlndXJlIHNjcmlwdCwgYnV0IHRoZW4gcGFzc2VkIHRvIGV4dGNvbmYucmIKKyMgbWF5YmUgaXQncyBub3QgcmVhbGx5IG5lZWRlZCBhcyB3ZSdyZSBoYXJkY29kaW5nIHRoZSByZXN1bHQgd2l0aAorIyAwMDAxLXNvY2tldC1leHRjb25mLWhhcmRjb2RlLXdpZGUtZ2V0YWRkci1pbmZvLXRlc3Qtb3V0Y28ucGF0Y2gKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUcgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS13aXRoLXZhbGdyaW5kPXllcywgLS13aXRoLXZhbGdyaW5kPW5vLCB2YWxncmluZCIKK1BBQ0tBR0VDT05GSUdbZ3BtXSA9ICItLXdpdGgtZ21wPXllcywgLS13aXRoLWdtcD1ubywgZ21wIgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICIsLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbywiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1kaXNhYmxlLXZlcnNpb25lZC1wYXRocyBcCisgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAtLWRpc2FibGUtZHRyYWNlIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLWxvYWQtcmVsYXRpdmUgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcmktZG9jcyAke1BOfS1yZG9jIgorCitTVU1NQVJZXyR7UE59LXJpLWRvY3MgPSAicmkgKFJ1YnkgSW50ZXJhY3RpdmUpIGRvY3VtZW50YXRpb24gZm9yIHRoZSBSdWJ5IHN0YW5kYXJkIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1yaS1kb2NzID0gIiR7UE59IgorRklMRVNfJHtQTn0tcmktZG9jcyArPSAiJHtkYXRhZGlyfS9yaSIKKworU1VNTUFSWV8ke1BOfS1yZG9jID0gIlJEb2MgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgZnJvbSBSdWJ5IHNvdXJjZSIKK1JERVBFTkRTXyR7UE59LXJkb2MgPSAiJHtQTn0iCitGSUxFU18ke1BOfS1yZG9jICs9ICIke2xpYmRpcn0vcnVieS8qL3Jkb2MgJHtiaW5kaXJ9L3Jkb2MiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3J1YnlnZW1zIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzCmluZGV4IDUzYThlMWQuLjA0YmEzOTQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cwpAQCAtNiw3ICs2LDcgQEAKICMKIAogIyBUaGUgZm9sbG93aW5nIHNjcmlwdCB3aWxsIHJ1biBhbGwgdGhlIHNjcmlwdGxldHMgZm91bmQgaW4gI1NZU0NPTkZESVIjL2RlYi1wb3N0aW5zdHMsCi0jICNTWVNDT05GRElSIy9pcGstcG9zdGluc3RzIG9yICNTWVNDT05GRElSIy9ycG0tcG9zaW5zdHMuCisjICNTWVNDT05GRElSIy9pcGstcG9zdGluc3RzIG9yICNTWVNDT05GRElSIy9ycG0tcG9zdGluc3RzLgogCiAjIHRoZSBvcmRlciBvZiB0aGlzIGxpc3QgaXMgaW1wb3J0YW50LCBkbyBub3QgY2hhbmdlIQogYmFja2VuZF9saXN0PSJycG0gZGViIGlwayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIKaW5kZXggNTk3NTM2NS4uOTdiMzA4YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIKQEAgLTIyLDggKzIyLDYgQEAKIAogU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJzZ21sX2NvbW1vbl9uYXRpdmVfbWFuZ2xlIgogU1NUQVRFUE9TVElOU1RGVU5DUyArPSAic2dtbF9jb21tb25fc3N0YXRlX3Bvc3RpbnN0IgotQ0xFQU5GVU5DUyArPSAic2dtbF9jb21tb25fc3N0YXRlX2NsZWFuIgotCiAKIGRvX2luc3RhbGxfYXBwZW5kKCkgewogCSMgaW5zdGFsbC1jYXRhbG9nIHNjcmlwdCBjb250YWlucyBoYXJkLWNvZGVkIHJlZmVyZW5jZXMgdG8KQEAgLTU5LDEzICs1NywxNCBAQAogCQkJCWZpCiAJCQlkb25lCiAJCWZpCi0JZmkKLX0KKwkJY2F0IDw8IEVPRiA+ICR7U1NUQVRFX0lOU1RfUE9TVFJNfQorIyEvYmluL3NoCiAKLXNnbWxfY29tbW9uX3NzdGF0ZV9jbGVhbiAoKSB7Ci0JIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKLQkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgotCWlmIFsgLWYgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXTsgdGhlbgotCQlzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZW50LmNhdC9kJyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKyMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCitpZiBbIC1mICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IF07IHRoZW4KKwlzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZW50LmNhdC9kJyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorZmkKK0VPRgogCWZpCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1GaXgtYnVpbGQtd2hlbi11c2luZy1ub24tZ2xpYmMtbGliYy1pbXBsZW1lbnRhdGlvbi1vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtRml4LWJ1aWxkLXdoZW4tdXNpbmctbm9uLWdsaWJjLWxpYmMtaW1wbGVtZW50YXRpb24tby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjU5MjEwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtRml4LWJ1aWxkLXdoZW4tdXNpbmctbm9uLWdsaWJjLWxpYmMtaW1wbGVtZW50YXRpb24tby5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDFmMGMyMmI3OTA0NWNmY2RjOTc2NjQzZjM4M2MxZDA5NTg5ZDMwODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAzMCBBcHIgMjAxNiAxNjoyMzo1NiArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgd2hlbiB1c2luZyBub24tZ2xpYmMgbGliYyBpbXBsZW1lbnRhdGlvbiBvbiBwcGMKKworZ2xpYmMgaW5jbHVkZXMgdGhlIGtlcm5lbCBoZWFkZXIgaW50byBpdHMgb3duIGhlYWRlciBmb3IgbWFjcm9zCittdXNsIGRvZXMgbm90CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHB0cmFjZS5oIHwgOCArKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3B0cmFjZS5oIGIvcHRyYWNlLmgKK2luZGV4IGQ4YWY5NzYuLjQ5NzhhNjkgMTAwNjQ0CistLS0gYS9wdHJhY2UuaAorKysrIGIvcHRyYWNlLmgKK0BAIC01Miw3ICs1MiwxMyBAQCBleHRlcm4gbG9uZyBwdHJhY2UoaW50LCBpbnQsIGNoYXIgKiwgbG9uZyk7CisgIyBkZWZpbmUgcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3MgWFhYX3B0cmFjZV9wZWVrc2lnaW5mb19hcmdzCisgI2VuZGlmCisgCistI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorKyNpZiBkZWZpbmVkKFBPV0VSUEMpICYmICFkZWZpbmVkKF9fR0xJQkNfXykKKysjZGVmaW5lIHB0X3JlZ3MgdWFwaV9wdF9yZWdzCisrI2VuZGlmCisrIyBpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKysjaWYgZGVmaW5lZChQT1dFUlBDKSAmJiAhZGVmaW5lZChfX0dMSUJDX18pCisrIyB1bmRlZiBwdF9yZWdzCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfU1RSVUNUX0lBNjRfRlBSRUcKKyAjIHVuZGVmIGlhNjRfZnByZWcKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1Nb3ZlLWdjYy1jb21wYXQtbWFjcm9zLXRvLWdjY19jb21wYXQuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLU1vdmUtZ2NjLWNvbXBhdC1tYWNyb3MtdG8tZ2NjX2NvbXBhdC5oLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTYxZTE1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLU1vdmUtZ2NjLWNvbXBhdC1tYWNyb3MtdG8tZ2NjX2NvbXBhdC5oLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLUZyb20gZjMyMTI2YmE3OTBkZDRlNjFkNDNhMjE0MGIyNGYwMjQyNjI5N2JiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJEbWl0cnkgVi4gTGV2aW4iIDxsZHZAYWx0bGludXgub3JnPgotRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAxNDoxOTo0MSArMDAwMAotU3ViamVjdDogW1BBVENIXSBNb3ZlIGdjYyBjb21wYXQgbWFjcm9zIHRvIGdjY19jb21wYXQuaAotCi0qIGRlZnMuaDogSW5jbHVkZSAiZ2NjX2NvbXBhdC5oIi4KLShHTlVDX1BSRVJFUSwgQVRUUklCVVRFX05PUkVUVVJOLCBBVFRSSUJVVEVfRk9STUFULAotQVRUUklCVVRFX0FMSUdORUQsIEFUVFJJQlVURV9QQUNLRUQsIEFUVFJJQlVURV9NQUxMT0MsCi1BVFRSSUJVVEVfTk9JTkxJTkUsIEFUVFJJQlVURV9BTExPQ19TSVpFKTogTW92ZSAuLi4KLSogZ2NjX2NvbXBhdC5oOiAuLi4gaGVyZS4KLSogTWFrZWZpbGUuYW0gKHN0cmFjZV9TT1VSQ0VTKTogQWRkIGdjY19jb21wYXQuaC4KLS0tLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotIE1ha2VmaWxlLmFtICB8ICAxICsKLSBkZWZzLmggICAgICAgfCA0MyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIGdjY19jb21wYXQuaCB8IDczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIDMgZmlsZXMgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGdjY19jb21wYXQuaAotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggYWI1Mjc3OC4uZDQzNjA4ZCAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmFtCi0rKysgYi9NYWtlZmlsZS5hbQotQEAgLTk3LDYgKzk3LDcgQEAgc3RyYWNlX1NPVVJDRVMgPQlcCi0gCWZsb2NrLmMJCVwKLSAJZmxvY2suaAkJXAotIAlmdXRleC5jCQlcCi0rCWdjY19jb21wYXQuaAlcCi0gCWdldF9yb2J1c3RfbGlzdC5jIFwKLSAJZ2V0Y3B1LmMJXAotIAlnZXRjd2QuYwlcCi1kaWZmIC0tZ2l0IGEvZGVmcy5oIGIvZGVmcy5oCi1pbmRleCAyODNhYjFmLi5iYWUyMTJjIDEwMDY0NAotLS0tIGEvZGVmcy5oCi0rKysgYi9kZWZzLmgKLUBAIC01NSw2ICs1NSw3IEBACi0gI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+Ci0gCi0gI2luY2x1ZGUgIm1wZXJzX3R5cGUuaCIKLSsjaW5jbHVkZSAiZ2NjX2NvbXBhdC5oIgotIAotICNpZm5kZWYgSEFWRV9TVFJFUlJPUgotIGNvbnN0IGNoYXIgKnN0cmVycm9yKGludCk7Ci1AQCAtNjgsNDggKzY5LDYgQEAgY29uc3QgY2hhciAqc3RyZXJyb3IoaW50KTsKLSBleHRlcm4gY2hhciAqc3RwY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKLSAjZW5kaWYKLSAKLS0jaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fR05VQ19NSU5PUl9fCi0tIyBkZWZpbmUgR05VQ19QUkVSRVEobWFqLCBtaW4pCVwKLS0JKChfX0dOVUNfXyA8PCAxNikgKyBfX0dOVUNfTUlOT1JfXyA+PSAoKG1haikgPDwgMTYpICsgKG1pbikpCi0tI2Vsc2UKLS0jIGRlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCS8qIGVtcHR5ICovCi0tIyBkZWZpbmUgR05VQ19QUkVSRVEobWFqLCBtaW4pCTAKLS0jZW5kaWYKLS0KLS0jaWYgR05VQ19QUkVSRVEoMiwgNSkKLS0jIGRlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4JX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKLS0jZWxzZQotLSMgZGVmaW5lIEFUVFJJQlVURV9OT1JFVFVSTgkvKiBlbXB0eSAqLwotLSNlbmRpZgotLQotLSNpZiBHTlVDX1BSRVJFUSgyLCA3KQotLSMgZGVmaW5lIEFUVFJJQlVURV9GT1JNQVQoYXJncykJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyBhcmdzKSkKLS0jIGRlZmluZSBBVFRSSUJVVEVfQUxJR05FRChhcmcpCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKGFyZykpKQotLSMgZGVmaW5lIEFUVFJJQlVURV9QQUNLRUQJX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpCi0tI2Vsc2UKLS0jIGRlZmluZSBBVFRSSUJVVEVfRk9STUFUKGFyZ3MpCS8qIGVtcHR5ICovCi0tIyBkZWZpbmUgQVRUUklCVVRFX0FMSUdORUQoYXJnKQkvKiBlbXB0eSAqLwotLSMgZGVmaW5lIEFUVFJJQlVURV9QQUNLRUQJLyogZW1wdHkgKi8KLS0jZW5kaWYKLS0KLS0jaWYgR05VQ19QUkVSRVEoMywgMCkKLS0jIGRlZmluZSBBVFRSSUJVVEVfTUFMTE9DCV9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKQotLSNlbHNlCi0tIyBkZWZpbmUgQVRUUklCVVRFX01BTExPQwkvKiBlbXB0eSAqLwotLSNlbmRpZgotLQotLSNpZiBHTlVDX1BSRVJFUSgzLCAxKQotLSMgZGVmaW5lIEFUVFJJQlVURV9OT0lOTElORQlfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQotLSNlbHNlCi0tIyBkZWZpbmUgQVRUUklCVVRFX05PSU5MSU5FCS8qIGVtcHR5ICovCi0tI2VuZGlmCi0tCi0tI2lmIEdOVUNfUFJFUkVRKDQsIDMpCi0tIyBkZWZpbmUgQVRUUklCVVRFX0FMTE9DX1NJWkUoYXJncykJX19hdHRyaWJ1dGVfXygoX19hbGxvY19zaXplX18gYXJncykpCi0tI2Vsc2UKLS0jIGRlZmluZSBBVFRSSUJVVEVfQUxMT0NfU0laRShhcmdzKQkvKiBlbXB0eSAqLwotLSNlbmRpZgotLQotICNpZm5kZWYgb2Zmc2V0b2YKLSAjIGRlZmluZSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpCVwKLSAJKCgoY2hhciAqKSAmKCgodHlwZSAqKSBOVUxMKS0+bWVtYmVyKSkgLSAoKGNoYXIgKikgKHR5cGUgKikgTlVMTCkpCi1kaWZmIC0tZ2l0IGEvZ2NjX2NvbXBhdC5oIGIvZ2NjX2NvbXBhdC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMWYyYzgzNQotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2NjX2NvbXBhdC5oCi1AQCAtMCwwICsxLDczIEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0rICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSsgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSsgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0rICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0rICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICovCi0rCi0rI2lmbmRlZiBHQ0NfQ09NUEFUX0hfCi0rI2RlZmluZSBHQ0NfQ09NUEFUX0hfCi0rCi0rI2lmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX0dOVUNfTUlOT1JfXwotKyMgZGVmaW5lIEdOVUNfUFJFUkVRKG1haiwgbWluKQlcCi0rCSgoX19HTlVDX18gPDwgMTYpICsgX19HTlVDX01JTk9SX18gPj0gKChtYWopIDw8IDE2KSArIChtaW4pKQotKyNlbHNlCi0rIyBkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQkvKiBlbXB0eSAqLwotKyMgZGVmaW5lIEdOVUNfUFJFUkVRKG1haiwgbWluKQkwCi0rI2VuZGlmCi0rCi0rI2lmIEdOVUNfUFJFUkVRKDIsIDUpCi0rIyBkZWZpbmUgQVRUUklCVVRFX05PUkVUVVJOCV9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCi0rI2Vsc2UKLSsjIGRlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4JLyogZW1wdHkgKi8KLSsjZW5kaWYKLSsKLSsjaWYgR05VQ19QUkVSRVEoMiwgNykKLSsjIGRlZmluZSBBVFRSSUJVVEVfRk9STUFUKGFyZ3MpCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gYXJncykpCi0rIyBkZWZpbmUgQVRUUklCVVRFX0FMSUdORUQoYXJnKQlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhhcmcpKSkKLSsjIGRlZmluZSBBVFRSSUJVVEVfUEFDS0VECV9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQotKyNlbHNlCi0rIyBkZWZpbmUgQVRUUklCVVRFX0ZPUk1BVChhcmdzKQkvKiBlbXB0eSAqLwotKyMgZGVmaW5lIEFUVFJJQlVURV9BTElHTkVEKGFyZykJLyogZW1wdHkgKi8KLSsjIGRlZmluZSBBVFRSSUJVVEVfUEFDS0VECS8qIGVtcHR5ICovCi0rI2VuZGlmCi0rCi0rI2lmIEdOVUNfUFJFUkVRKDMsIDApCi0rIyBkZWZpbmUgQVRUUklCVVRFX01BTExPQwlfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSkKLSsjZWxzZQotKyMgZGVmaW5lIEFUVFJJQlVURV9NQUxMT0MJLyogZW1wdHkgKi8KLSsjZW5kaWYKLSsKLSsjaWYgR05VQ19QUkVSRVEoMywgMSkKLSsjIGRlZmluZSBBVFRSSUJVVEVfTk9JTkxJTkUJX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkKLSsjZWxzZQotKyMgZGVmaW5lIEFUVFJJQlVURV9OT0lOTElORQkvKiBlbXB0eSAqLwotKyNlbmRpZgotKwotKyNpZiBHTlVDX1BSRVJFUSg0LCAzKQotKyMgZGVmaW5lIEFUVFJJQlVURV9BTExPQ19TSVpFKGFyZ3MpCV9fYXR0cmlidXRlX18oKF9fYWxsb2Nfc2l6ZV9fIGFyZ3MpKQotKyNlbHNlCi0rIyBkZWZpbmUgQVRUUklCVVRFX0FMTE9DX1NJWkUoYXJncykJLyogZW1wdHkgKi8KLSsjZW5kaWYKLSsKLSsjZW5kaWYKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtYXJjLW1ldGFnLW5pb3MyLW9yMWstdGlsZS1maXgtYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1hcmMtbWV0YWctbmlvczItb3Ixay10aWxlLWZpeC1idWlsZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkMzIwMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1hcmMtbWV0YWctbmlvczItb3Ixay10aWxlLWZpeC1idWlsZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi1Gcm9tIGRkMWE4MGM4ZDIxM2VlZDk1ZmU1NWI3ZWJjYjA3ZWUxNjVkZDhlNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiRG1pdHJ5IFYuIExldmluIiA8bGR2QGFsdGxpbnV4Lm9yZz4KLURhdGU6IFRodSwgMjQgRGVjIDIwMTUgMTU6NDA6NTUgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gYXJjLCBtZXRhZywgbmlvczIsIG9yMWssIHRpbGU6IGZpeCBidWlsZAotCi1GaXggYnVpbGQgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IGNvbW1pdAotMzQ2ODNlMzkyNmQ4YzJkYWEzNjhhZmI4MDVkYTQyMmVlNzA0MzM5Ni4KLQotKiBsaW51eC8zMi9zeXNjYWxsZW50Lmg6IEFkZCBzeXNfIHByZWZpeCB0byBBUkNIX21tYXAgYW5kIG1tYXAuCi0qIGxpbnV4L2FyYy9zeXNjYWxsZW50Lmg6IEFkZCBzeXNfIHByZWZpeCB0byBBUkNIX21tYXAgYW5kIG1tYXBfcGdvZmYuCi0qIGxpbnV4L25pb3MyL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCi0qIGxpbnV4L29yMWsvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KLSogbGludXgvdGlsZS9zeXNjYWxsZW50MS5oOiBBZGQgc3lzXyBwcmVmaXggdG8gQVJDSF9tbWFwIGFuZCBzeXNfbW1hcF80a29mZi4KLSogcGF0aHRyYWNlLmMgKHBhdGh0cmFjZV9tYXRjaCk6IEhhbmRsZSBTRU5fQVJDSF9tbWFwLgotKiBORVdTOiBNZW50aW9uIHRoaXMgYnVpbGQgZml4LgotCi1SZXBvcnRlZC1ieTogQWxleGV5IEJyb2RraW4gPEFsZXhleS5Ccm9ka2luQHN5bm9wc3lzLmNvbT4KLVNpZ25lZC1vZmYtYnk6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotLS0tCi0gTkVXUyAgICAgICAgICAgICAgICAgICAgIHwgMyArKysKLSBsaW51eC8zMi9zeXNjYWxsZW50LmggICAgfCA2ICsrKy0tLQotIGxpbnV4L2FyYy9zeXNjYWxsZW50LmggICB8IDIgKy0KLSBsaW51eC9uaW9zMi9zeXNjYWxsZW50LmggfCAyICstCi0gbGludXgvb3Ixay9zeXNjYWxsZW50LmggIHwgMiArLQotIGxpbnV4L3RpbGUvc3lzY2FsbGVudDEuaCB8IDIgKy0KLSBwYXRodHJhY2UuYyAgICAgICAgICAgICAgfCAxICsKLSA3IGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9ORVdTIGIvTkVXUwotaW5kZXggZmU0MGNhNC4uMDkyNjNlYiAxMDA2NDQKLS0tLSBhL05FV1MKLSsrKyBiL05FV1MKLUBAIC0xLDMgKzEsOSBAQAotK05vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlID8uPz8gKD8/Pz8tPz8tPz8pCi0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsKLSsqIEJ1ZyBmaXhlcwotKyAgKiBGaXhlZCBidWlsZCBvbiBhcmMsIG1ldGFnLCBuaW9zMiwgb3IxaywgYW5kIHRpbGUgYXJjaGl0ZWN0dXJlcy4KLSsKLSBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSA0LjExICgyMDE1LTEyLTIxKQotID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gCi1kaWZmIC0tZ2l0IGEvbGludXgvMzIvc3lzY2FsbGVudC5oIGIvbGludXgvMzIvc3lzY2FsbGVudC5oCi1pbmRleCA1Zjk5N2U3Li5lNmY4OTVjIDEwMDY0NAotLS0tIGEvbGludXgvMzIvc3lzY2FsbGVudC5oCi0rKysgYi9saW51eC8zMi9zeXNjYWxsZW50LmgKLUBAIC0xLDUgKzEsNSBAQAotLSNpZm5kZWYgQVJDSF9tbWFwCi0tIyBkZWZpbmUgQVJDSF9tbWFwIG1tYXAKLSsjaWZuZGVmIHN5c19BUkNIX21tYXAKLSsjIGRlZmluZSBzeXNfQVJDSF9tbWFwIHN5c19tbWFwCi0gI2VuZGlmCi0gWyAgMF0gPSB7IDIsCTAsCQlTRU4oaW9fc2V0dXApLAkJCSJpb19zZXR1cCIJCX0sCi0gWyAgMV0gPSB7IDEsCTAsCQlTRU4oaW9fZGVzdHJveSksCQkiaW9fZGVzdHJveSIJCX0sCi1AQCAtMjc2LDUgKzI3Niw1IEBACi0gWzI4M10gPSB7IDIsCTAsCQlTRU4obWVtYmFycmllciksCQkibWVtYmFycmllciIsCQl9LAotIFsyODRdID0geyAzLAlUTSwJCVNFTihtbG9jazIpLAkJCSJtbG9jazIiCQl9LAotIAotLSN1bmRlZiBBUkNIX21tYXAKLSsjdW5kZWYgc3lzX0FSQ0hfbW1hcAotICN1bmRlZiBBUkNIX1dBTlRfU1lOQ19GSUxFX1JBTkdFMgotZGlmZiAtLWdpdCBhL2xpbnV4L2FyYy9zeXNjYWxsZW50LmggYi9saW51eC9hcmMvc3lzY2FsbGVudC5oCi1pbmRleCA1ODQ3ZGM0Li4xMTAwMDA4IDEwMDY0NAotLS0tIGEvbGludXgvYXJjL3N5c2NhbGxlbnQuaAotKysrIGIvbGludXgvYXJjL3N5c2NhbGxlbnQuaAotQEAgLTEsNCArMSw0IEBACi0tI2RlZmluZSBBUkNIX21tYXAgbW1hcF9wZ29mZgotKyNkZWZpbmUgc3lzX0FSQ0hfbW1hcCBzeXNfbW1hcF9wZ29mZgotICNpbmNsdWRlICIzMi9zeXNjYWxsZW50LmgiCi0gWzI0NF0gPSB7IDMsCTAsCVNFTihwcmludGFyZ3MpLAkiYXJjX2NhY2hlZmx1c2gifSwKLSBbMjQ1XSA9IHsgMSwJMCwJU0VOKHByaW50YXJncyksCSJhcmNfc2V0dGxzIgl9LAotZGlmZiAtLWdpdCBhL2xpbnV4L25pb3MyL3N5c2NhbGxlbnQuaCBiL2xpbnV4L25pb3MyL3N5c2NhbGxlbnQuaAotaW5kZXggOGE0YjcwZS4uMDFlZmUzYSAxMDA2NDQKLS0tLSBhL2xpbnV4L25pb3MyL3N5c2NhbGxlbnQuaAotKysrIGIvbGludXgvbmlvczIvc3lzY2FsbGVudC5oCi1AQCAtMSw0ICsxLDQgQEAKLS0jZGVmaW5lIEFSQ0hfbW1hcCBtbWFwX3Bnb2ZmCi0rI2RlZmluZSBzeXNfQVJDSF9tbWFwIHN5c19tbWFwX3Bnb2ZmCi0gI2luY2x1ZGUgIjMyL3N5c2NhbGxlbnQuaCIKLSBbMjQ0XSA9IHs0LCAgICAwLAlTRU4oY2FjaGVmbHVzaCksICJjYWNoZWZsdXNoIn0sCi0gWzI0NSAuLi4gMjU5XSA9IHsgfSwKLWRpZmYgLS1naXQgYS9saW51eC9vcjFrL3N5c2NhbGxlbnQuaCBiL2xpbnV4L29yMWsvc3lzY2FsbGVudC5oCi1pbmRleCBlZDg0YjNiLi4zNTFmZTI1IDEwMDY0NAotLS0tIGEvbGludXgvb3Ixay9zeXNjYWxsZW50LmgKLSsrKyBiL2xpbnV4L29yMWsvc3lzY2FsbGVudC5oCi1AQCAtMSw0ICsxLDQgQEAKLS0jZGVmaW5lIEFSQ0hfbW1hcCBtbWFwX3Bnb2ZmCi0rI2RlZmluZSBzeXNfQVJDSF9tbWFwIHN5c19tbWFwX3Bnb2ZmCi0gI2luY2x1ZGUgIjMyL3N5c2NhbGxlbnQuaCIKLSBbMjQ0XSA9IHsgMywJTkYsCVNFTihvcjFrX2F0b21pYyksCSJvcjFrX2F0b21pYyIJfSwKLSBbMjQ1IC4uLiAyNTldID0geyB9LAotZGlmZiAtLWdpdCBhL2xpbnV4L3RpbGUvc3lzY2FsbGVudDEuaCBiL2xpbnV4L3RpbGUvc3lzY2FsbGVudDEuaAotaW5kZXggYzg2ZjA1OS4uMjhkYmFiNCAxMDA2NDQKLS0tLSBhL2xpbnV4L3RpbGUvc3lzY2FsbGVudDEuaAotKysrIGIvbGludXgvdGlsZS9zeXNjYWxsZW50MS5oCi1AQCAtMSw0ICsxLDQgQEAKLS0jZGVmaW5lIEFSQ0hfbW1hcCBtbWFwXzRrb2ZmCi0rI2RlZmluZSBzeXNfQVJDSF9tbWFwIHN5c19tbWFwXzRrb2ZmCi0gI2RlZmluZSBBUkNIX1dBTlRfU1lOQ19GSUxFX1JBTkdFMiAxCi0gI2luY2x1ZGUgIjMyL3N5c2NhbGxlbnQuaCIKLSBbMjQ0XSA9IHsgMSwJMCwJU0VOKHByaW50YXJncyksCSJjbXB4Y2hnX2JhZGFkZHIiCX0sCi1kaWZmIC0tZ2l0IGEvcGF0aHRyYWNlLmMgYi9wYXRodHJhY2UuYwotaW5kZXggZDUzMGVjMi4uZTcyY2RmNyAxMDA2NDQKLS0tLSBhL3BhdGh0cmFjZS5jCi0rKysgYi9wYXRodHJhY2UuYwotQEAgLTIxNiw2ICsyMTYsNyBAQCBwYXRodHJhY2VfbWF0Y2goc3RydWN0IHRjYiAqdGNwKQotIAljYXNlIFNFTl9tbWFwOgotIAljYXNlIFNFTl9tbWFwXzRrb2ZmOgotIAljYXNlIFNFTl9tbWFwX3Bnb2ZmOgotKwljYXNlIFNFTl9BUkNIX21tYXA6Ci0gCQkvKiB4LCB4LCB4LCB4LCBmZCAqLwotIAkJcmV0dXJuIGZkbWF0Y2godGNwLCB0Y3AtPnVfYXJnWzRdKTsKLSAKLS0tIAotMi42LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtc2NtX3JpZ2h0cy1mZC50ZXN0LXJld3JpdGUtd2l0aG91dC1mb3JrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtc2NtX3JpZ2h0cy1mZC50ZXN0LXJld3JpdGUtd2l0aG91dC1mb3JrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGU2NDViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXNjbV9yaWdodHMtZmQudGVzdC1yZXdyaXRlLXdpdGhvdXQtZm9yay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi1Gcm9tIDNmZGNkZDQ3YzZhNjc1ODUxMjNhMGEwYzhmZmZhYmNjOWY3OWEzYTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiRG1pdHJ5IFYuIExldmluIiA8bGR2QGFsdGxpbnV4Lm9yZz4KLURhdGU6IFR1ZSwgMTIgSmFuIDIwMTYgMTQ6NDc6MTIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gc2NtX3JpZ2h0cy1mZC50ZXN0OiByZXdyaXRlIHdpdGhvdXQgZm9yawotCi0qIHRlc3RzL3NjbV9yaWdodHMuYyAobWFpbik6IFJld3JpdGUgd2l0aG91dCBmb3JrLgotUGxhY2UgYWxsIG9iamVjdHMgcGFzc2VkIHRvIHNlbmRtc2cgYW5kIHJlY3Ztc2cgYXQgdGhlIGVuZAotb2YgbWVtb3J5IHBhZ2VzIGZvbGxvd2VkIGJ5IGluYWNjZXNzaWJsZSBwYWdlcy4KLSogdGVzdHMvc2NtX3JpZ2h0cy1mZC50ZXN0OiBVcGRhdGUuCi0tLS0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLSB0ZXN0cy9zY21fcmlnaHRzLWZkLnRlc3QgfCAgMTIgKystLS0KLSB0ZXN0cy9zY21fcmlnaHRzLmMgICAgICAgfCAxMjIgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDYzIGluc2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvc2NtX3JpZ2h0cy1mZC50ZXN0IGIvdGVzdHMvc2NtX3JpZ2h0cy1mZC50ZXN0Ci1pbmRleCBhMzJlZjM2Li40OGM1MDI4IDEwMDc1NQotLS0tIGEvdGVzdHMvc2NtX3JpZ2h0cy1mZC50ZXN0Ci0rKysgYi90ZXN0cy9zY21fcmlnaHRzLWZkLnRlc3QKLUBAIC00OSwxOCArNDksMTggQEAgdG91Y2ggLS0gIiRmaWxlIiB8fAotIAlmcmFtZXdvcmtfc2tpcF8gJ2ZhaWxlZCB0byBjcmVhdGUgYSBmaWxlJwotIAotIHJ1bl9wcm9nIC4vc2NtX3JpZ2h0cyAvZGV2L3plcm8KLS1ydW5fc3RyYWNlX21lcmdlIC15IC14IC1lbmV0d29yayAkYXJncyAiJGZpbGUiCi0rcnVuX3N0cmFjZSAteSAteCAtZW5ldHdvcmsgJGFyZ3MgIiRmaWxlIgotIAotK3NhbXBsZT0nXFx4ZjFcXHhmMlxceGYzXFx4ZjRcXHhmNVxceGY2XFx4ZjdcXHhmOFxceGY5XFx4ZmFcXHhmYlxceGZjXFx4ZmRcXHhmZVxceGZmJwotIG49J1sxLTldWzAtOV0qJwotLW1zZz0nXHttc2dfbmFtZVwoMFwpPU5VTEwsIG1zZ19pb3ZcKDFcKT1cW1x7IlxceDAwXFx4MDBcXHgwMFxceDAwW14iXSoiLCAnIiRuIidcfVxdLCBtc2dfY29udHJvbGxlbj0nIiRuIgotLXJpZ2h0cz0nXHtjbXNnX2xlbj0nIiRuIicsIGNtc2dfbGV2ZWw9U09MX1NPQ0tFVCwgY21zZ190eXBlPVNDTV9SSUdIVFMsIFxbMzwvZGV2L251bGw+LCA0PC9kZXYvemVybz4sIDU8L1tefT5dKi8oQVxcbil7MTI3fVo+XF1cfScKLSttc2c9J1x7bXNnX25hbWVcKDBcKT1OVUxMLCBtc2dfaW92XCgxXCk9XFtceyInIiRzYW1wbGUiJyIsIDE1XH1cXSwgbXNnX2NvbnRyb2xsZW49JyIkbiIKLStyaWdodHM9J1x7Y21zZ19sZW49JyIkbiInLCBjbXNnX2xldmVsPVNPTF9TT0NLRVQsIGNtc2dfdHlwZT1TQ01fUklHSFRTLCBcWzQ8L2Rldi9udWxsPiwgNTwvZGV2L3plcm8+LCA2PC9bXn0+XSovKEFcXG4pezEyN31aPlxdXH0nCi0gY3JlZHM9J1x7Y21zZ19sZW49JyIkbiInLCBjbXNnX2xldmVsPVNPTF9TT0NLRVQsIGNtc2dfdHlwZT1TQ01fQ1JFREVOVElBTFMsIFx7cGlkPSciJG4iJywgdWlkPVswLTldKywgZ2lkPVswLTldK1x9XH0nCi0tcHJlZml4PSdbMS05XVswLTldKiArWzAtOV0rOlswLTldKzpbMC05XStcLlswLTldKyArJwotIEVYUEVDVEVEPSIkTE9HLmV4cGVjdGVkIgotIAotIGNhdCA+ICIkRVhQRUNURUQiIDw8IF9fRU9GX18KLS0ke3ByZWZpeH1zZW5kbXNnXFwoMTxzb2NrZXQ6XFxbWzAtOV0rXFxdPiwgJG1zZywgXFxbJHJpZ2h0c1xcXSwgbXNnX2ZsYWdzPTBcXH0sIDBcXCkgKz0gJG4KLS0ke3ByZWZpeH1yZWN2bXNnXFwoMDxzb2NrZXQ6XFxbWzAtOV0rXFxdPiwgJG1zZywgXFxbJGNyZWRzLCAkcmlnaHRzXFxdLCBtc2dfZmxhZ3M9MFxcfSwgMFxcKSArPSAkbgotK3NlbmRtc2dcXCgzPHNvY2tldDpcXFtbMC05XStcXF0+LCAkbXNnLCBcXFskcmlnaHRzXFxdLCBtc2dfZmxhZ3M9MFxcfSwgMFxcKSA9IDE1Ci0rcmVjdm1zZ1xcKDA8c29ja2V0OlxcW1swLTldK1xcXT4sICRtc2csIFxcWyRjcmVkcywgJHJpZ2h0c1xcXSwgbXNnX2ZsYWdzPTBcXH0sIDBcXCkgPSAxNQotIF9fRU9GX18KLSAKLSBtYXRjaF9ncmVwICIkTE9HIiAiJEVYUEVDVEVEIgotZGlmZiAtLWdpdCBhL3Rlc3RzL3NjbV9yaWdodHMuYyBiL3Rlc3RzL3NjbV9yaWdodHMuYwotaW5kZXggMWU1ZTg1MC4uMDBhZjRkNSAxMDA2NDQKLS0tLSBhL3Rlc3RzL3NjbV9yaWdodHMuYwotKysrIGIvdGVzdHMvc2NtX3JpZ2h0cy5jCi1AQCAtMjcsMjYgKzI3LDM5IEBACi0gCi0gI2luY2x1ZGUgInRlc3RzLmgiCi0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxmY250bC5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0tI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0gCi0gaW50IG1haW4oaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCi0gewotLQlpbnQgaTsKLS0JaW50IGRhdGEgPSAwOwotLQlzdHJ1Y3QgaW92ZWMgaW92ID0gewotLQkJLmlvdl9iYXNlID0gJmRhdGEsCi0tCQkuaW92X2xlbiA9IHNpemVvZihpb3YpCi0tCX07Ci0rCWFzc2VydChhYyA+IDApOwotKwlpbnQgZmRzW2FjXTsKLSsKLSsJc3RhdGljIGNvbnN0IGNoYXIgc2FtcGxlW10gPQotKwkJIlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiI7Ci0rCWNvbnN0IHVuc2lnbmVkIGludCBkYXRhX3NpemUgPSBzaXplb2Yoc2FtcGxlKSAtIDE7Ci0rCXZvaWQgKmRhdGEgPSB0YWlsX2FsbG9jKGRhdGFfc2l6ZSk7Ci0rCW1lbWNweShkYXRhLCBzYW1wbGUsIGRhdGFfc2l6ZSk7Ci0rCi0rCXN0cnVjdCBpb3ZlYyAqaW92ID0gdGFpbF9hbGxvYyhzaXplb2Yoc3RydWN0IGlvdmVjKSk7Ci0rCWlvdi0+aW92X2Jhc2UgPSBkYXRhOwotKwlpb3YtPmlvdl9sZW4gPSBkYXRhX3NpemU7Ci0gCi0tCXdoaWxlICgoaSA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUikpIDwgMykKLSsJc3RydWN0IG1zZ2hkciAqbWggPSB0YWlsX2FsbG9jKHNpemVvZihzdHJ1Y3QgbXNnaGRyKSk7Ci0rCW1lbXNldChtaCwgMCwgc2l6ZW9mKCptaCkpOwotKwltaC0+bXNnX2lvdiA9IGlvdjsKLSsJbWgtPm1zZ19pb3ZsZW4gPSAxOwotKwotKwlpbnQgaTsKLSsJd2hpbGUgKChpID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKSkgPD0gYWMgKyAyKQotIAkJYXNzZXJ0KGkgPj0gMCk7Ci0tCSh2b2lkKSBjbG9zZSgzKTsKLSsJd2hpbGUgKGkgPiAyKQotKwkJYXNzZXJ0KGNsb3NlKGktLSkgPT0gMCk7Ci0rCWFzc2VydChjbG9zZSgwKSA9PSAwKTsKLSAKLSAJaW50IHN2WzJdOwotIAlpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc3YpKQotQEAgLTU1LDYwICs2OCwzOSBAQCBpbnQgbWFpbihpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKLSAJaWYgKHNldHNvY2tvcHQoc3ZbMF0sIFNPTF9TT0NLRVQsIFNPX1BBU1NDUkVELCAmb25lLCBzaXplb2Yob25lKSkpCi0gCQlwZXJyb3JfbXNnX2FuZF9za2lwKCJzZXRzb2Nrb3B0Iik7Ci0gCi0tCXBpZF90IHBpZCA9IGZvcmsoKTsKLS0JaWYgKHBpZCA8IDApCi0tCQlwZXJyb3JfbXNnX2FuZF9mYWlsKCJmb3JrIik7Ci0tCi0tCWlmIChwaWQpIHsKLS0JCWFzc2VydChjbG9zZShzdlswXSkgPT0gMCk7Ci0tCQlhc3NlcnQoZHVwMihzdlsxXSwgMSkgPT0gMSk7Ci0tCQlhc3NlcnQoY2xvc2Uoc3ZbMV0pID09IDApOwotLQotLQkJaW50IGZkc1thY107Ci0tCQlhc3NlcnQoKGZkc1swXSA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUikpID09IDMpOwotLQkJZm9yIChpID0gMTsgaSA8IGFjOyArK2kpCi0tCQkJYXNzZXJ0KChmZHNbaV0gPSBvcGVuKGF2W2ldLCBPX1JET05MWSkpID09IGkgKyAzKTsKLS0KLS0JCXVuaW9uIHsKLS0JCQlzdHJ1Y3QgY21zZ2hkciBjbXNnOwotLQkJCWNoYXIgYnVmW0NNU0dfTEVOKHNpemVvZihmZHMpKV07Ci0tCQl9IGNvbnRyb2w7Ci0tCi0tCQljb250cm9sLmNtc2cuY21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7Ci0tCQljb250cm9sLmNtc2cuY21zZ190eXBlID0gU0NNX1JJR0hUUzsKLS0JCWNvbnRyb2wuY21zZy5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihmZHMpKTsKLS0JCW1lbWNweShDTVNHX0RBVEEoJmNvbnRyb2wuY21zZyksIGZkcywgc2l6ZW9mKGZkcykpOwotLQotLQkJc3RydWN0IG1zZ2hkciBtaCA9IHsKLS0JCQkubXNnX2lvdiA9ICZpb3YsCi0tCQkJLm1zZ19pb3ZsZW4gPSAxLAotLQkJCS5tc2dfY29udHJvbCA9ICZjb250cm9sLAotLQkJCS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKQotLQkJfTsKLS0KLS0JCWFzc2VydChzZW5kbXNnKDEsICZtaCwgMCkgPT0gc2l6ZW9mKGlvdikpOwotLQkJYXNzZXJ0KGNsb3NlKDEpID09IDApOwotLQotLSAgICAgICAgICAgICAgICBpbnQgc3RhdHVzOwotLQkJYXNzZXJ0KHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA9PSBwaWQpOwotLQkJYXNzZXJ0KHN0YXR1cyA9PSAwKTsKLS0JfSBlbHNlIHsKLS0JCWFzc2VydChjbG9zZShzdlsxXSkgPT0gMCk7Ci0tCQlhc3NlcnQoZHVwMihzdlswXSwgMCkgPT0gMCk7Ci0tCQlhc3NlcnQoY2xvc2Uoc3ZbMF0pID09IDApOwotLQotLQkJc3RydWN0IGNtc2doZHIgY29udHJvbFs0ICsgYWMgKiBzaXplb2YoaW50KSAvIHNpemVvZihzdHJ1Y3QgY21zZ2hkcildOwotLQotLQkJc3RydWN0IG1zZ2hkciBtaCA9IHsKLS0JCQkubXNnX2lvdiA9ICZpb3YsCi0tCQkJLm1zZ19pb3ZsZW4gPSAxLAotLQkJCS5tc2dfY29udHJvbCA9IGNvbnRyb2wsCi0tCQkJLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpCi0tCQl9OwotLQotLQkJYXNzZXJ0KHJlY3Ztc2coMCwgJm1oLCAwKSA9PSBzaXplb2YoaW92KSk7Ci0tCQlhc3NlcnQoY2xvc2UoMCkgPT0gMCk7Ci0rCWFzc2VydCgoZmRzWzBdID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKSkgPT0gNCk7Ci0rCWZvciAoaSA9IDE7IGkgPCBhYzsgKytpKQotKwkJYXNzZXJ0KChmZHNbaV0gPSBvcGVuKGF2W2ldLCBPX1JET05MWSkpID09IGkgKyA0KTsKLSsKLSsJdW5zaWduZWQgaW50IGNtc2dfc2l6ZSA9IENNU0dfU1BBQ0Uoc2l6ZW9mKGZkcykpOwotKwlzdHJ1Y3QgY21zZ2hkciAqY21zZyA9IHRhaWxfYWxsb2MoY21zZ19zaXplKTsKLSsJbWVtc2V0KGNtc2csIDAsIGNtc2dfc2l6ZSk7Ci0rCWNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOwotKwljbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwotKwljbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihmZHMpKTsKLSsJbWVtY3B5KENNU0dfREFUQShjbXNnKSwgZmRzLCBzaXplb2YoZmRzKSk7Ci0rCi0rCW1oLT5tc2dfY29udHJvbCA9IGNtc2c7Ci0rCW1oLT5tc2dfY29udHJvbGxlbiA9IGNtc2dfc2l6ZTsKLSsKLSsJYXNzZXJ0KHNlbmRtc2coc3ZbMV0sIG1oLCAwKSA9PSAoaW50KSBkYXRhX3NpemUpOwotKwotKwlhc3NlcnQoY2xvc2Uoc3ZbMV0pID09IDApOwotKwlhc3NlcnQob3BlbigiL2Rldi9udWxsIiwgT19SRFdSKSA9PSBzdlsxXSk7Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCBhYzsgKytpKSB7Ci0rCQlhc3NlcnQoY2xvc2UoZmRzW2ldKSA9PSAwKTsKLSsJCWZkc1tpXSA9IDA7Ci0gCX0KLSAKLSsJY21zZ19zaXplICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB1Y3JlZCkpOwotKwljbXNnID0gdGFpbF9hbGxvYyhjbXNnX3NpemUpOwotKwltZW1zZXQoY21zZywgMCwgY21zZ19zaXplKTsKLSsJbWgtPm1zZ19jb250cm9sID0gY21zZzsKLSsJbWgtPm1zZ19jb250cm9sbGVuID0gY21zZ19zaXplOwotKwotKwlhc3NlcnQocmVjdm1zZygwLCBtaCwgMCkgPT0gKGludCkgZGF0YV9zaXplKTsKLSsJYXNzZXJ0KGNsb3NlKDApID09IDApOwotKwotIAlyZXR1cm4gMDsKLSB9Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXRlc3RzLWludHJvZHVjZS1saWJ0ZXN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXRlc3RzLWludHJvZHVjZS1saWJ0ZXN0cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3NWVjZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS10ZXN0cy1pbnRyb2R1Y2UtbGlidGVzdHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotRnJvbSA4N2U2YjIzMGZmZjgwMGViNzY4YjY4YjJlNTE3M2ViYmU4M2ZkM2VmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogIkRtaXRyeSBWLiBMZXZpbiIgPGxkdkBhbHRsaW51eC5vcmc+Ci1EYXRlOiBTYXQsIDIgSmFuIDIwMTYgMTI6MDU6MTQgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gdGVzdHM6IGludHJvZHVjZSBsaWJ0ZXN0cwotCi1JbnRyb2R1Y2UgdGVzdHMvbGlidGVzdHMuYSB3aXRoIGNvbW1vbiBmdW5jdGlvbnMgZm9yIHVzZSBpbiB0ZXN0cy4KLQotKiB0ZXN0cy90ZXN0cy5oOiBOZXcgZmlsZS4KLSogdGVzdHMvZXJyb3JfbXNnLmM6IExpa2V3aXNlLgotKiB0ZXN0cy90YWlsX2FsbG9jLmM6IExpa2V3aXNlLgotKiB0ZXN0cy9nZXRfcGFnZV9zaXplLmM6IExpa2V3aXNlLgotKiB0ZXN0cy9NYWtlZmlsZS5hbSAobGlidGVzdHNfYV9TT1VSQ0VTLCBsaWJ0ZXN0c19hX0NQUEZMQUdTLAotY2hlY2tfTElCUkFSSUVTLCBMREFERCk6IE5ldyB2YXJpYWJsZXMuCi0oY2xvY2tfeGV0dGltZV9MREFERCwgZmlsdGVyX3VuYXZhaWxhYmxlX0xEQURELCBtcV9MREFERCwKLXBjX0xEQURELCB0aW1lc19MREFERCk6IEFkZCAkKExEQUREKS4KLSogdGVzdHMvLmdpdGlnbm9yZTogQWRkIGxpYnRlc3RzLmEuCi0tLS0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLSB0ZXN0cy8uZ2l0aWdub3JlICAgICAgfCAgMSArCi0gdGVzdHMvTWFrZWZpbGUuYW0gICAgIHwgMjAgKysrKysrKysrKy0tLS0KLSB0ZXN0cy9lcnJvcl9tc2cuYyAgICAgfCA3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSB0ZXN0cy9nZXRfcGFnZV9zaXplLmMgfCAxMyArKysrKysrKysKLSB0ZXN0cy90YWlsX2FsbG9jLmMgICAgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSB0ZXN0cy90ZXN0cy5oICAgICAgICAgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSA2IGZpbGVzIGNoYW5nZWQsIDIxNyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9lcnJvcl9tc2cuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZXRfcGFnZV9zaXplLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdGFpbF9hbGxvYy5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3Rlc3RzLmgKLQotZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KLWluZGV4IDM4NmEyYzIuLjYyZDBlNTYgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQotKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KLUBAIC00MCw2ICs0MCwxNiBAQCBBTV9DUFBGTEFHUyA9ICQoQVJDSF9NRkxBR1MpIFwKLSAJICAgICAgLUkkKHRvcF9zcmNkaXIpCi0gQU1fTERGTEFHUyA9ICQoQVJDSF9NRkxBR1MpCi0gCi0rbGlidGVzdHNfYV9TT1VSQ0VTID0gXAotKwlnZXRfcGFnZV9zaXplLmMgXAotKwllcnJvcl9tc2cuYyBcCi0rCXRhaWxfYWxsb2MuYyBcCi0rCXRlc3RzLmggXAotKwkjIGVuZCBvZiBsaWJ0ZXN0c19hX1NPVVJDRVMKLStsaWJ0ZXN0c19hX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NAotK2NoZWNrX0xJQlJBUklFUyA9IGxpYnRlc3RzLmEKLStMREFERCA9IGxpYnRlc3RzLmEKLSsKLSBjaGVja19QUk9HUkFNUyA9IFwKLSAJX25ld3NlbGVjdCBcCi0gCWFkanRpbWV4IFwKLUBAIC0xNDYsMTkgKzE1NiwxOSBAQCBjaGVja19QUk9HUkFNUyA9IFwKLSAJeGV0dGltZW9mZGF5IFwKLSAJIyBlbmQgb2YgY2hlY2tfUFJPR1JBTVMKLSAKLS1jbG9ja194ZXR0aW1lX0xEQUREID0gLWxydAotLWZpbHRlcl91bmF2YWlsYWJsZV9MREFERCA9IC1scHRocmVhZAotK2Nsb2NrX3hldHRpbWVfTERBREQgPSAtbHJ0ICQoTERBREQpCi0rZmlsdGVyX3VuYXZhaWxhYmxlX0xEQUREID0gLWxwdGhyZWFkICQoTERBREQpCi0gZnN0YXQ2NF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLSBmc3RhdGF0NjRfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0gZnRydW5jYXRlNjRfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0gbHN0YXQ2NF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLSBtbWFwNjRfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0tbXFfTERBREQgPSAtbHJ0Ci0rbXFfTERBREQgPSAtbHJ0ICQoTERBREQpCi0gbmV3ZnN0YXRhdF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLS1wY19MREFERCA9ICQoZGxfTElCUykKLStwY19MREFERCA9ICQoZGxfTElCUykgJChMREFERCkKLSBzdGF0NjRfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0gc3RhdGZzX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NAotLXRpbWVzX0xEQUREID0gLWxydAotK3RpbWVzX0xEQUREID0gLWxydCAkKExEQUREKQotIHRydW5jYXRlNjRfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0gdWlvX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NAotIHN0YWNrX2ZjYWxsX1NPVVJDRVMgPSBzdGFjay1mY2FsbC5jIFwKLWRpZmYgLS1naXQgYS90ZXN0cy9lcnJvcl9tc2cuYyBiL3Rlc3RzL2Vycm9yX21zZy5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uM2ZkMzQxMQotLS0tIC9kZXYvbnVsbAotKysrIGIvdGVzdHMvZXJyb3JfbXNnLmMKLUBAIC0wLDAgKzEsNzQgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAxNiBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+Ci0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSsgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0rICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0rICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSsgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSsgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0rICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0rICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKi8KLSsKLSsjaW5jbHVkZSAidGVzdHMuaCIKLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLSt2b2lkCi0rcGVycm9yX21zZ19hbmRfZmFpbChjb25zdCBjaGFyICpmbXQsIC4uLikKLSt7Ci0rCWludCBlcnJfbm8gPSBlcnJubzsKLSsJdmFfbGlzdCBwOwotKwotKwl2YV9zdGFydChwLCBmbXQpOwotKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgcCk7Ci0rCWlmIChlcnJfbm8pCi0rCQlmcHJpbnRmKHN0ZGVyciwgIjogJXNcbiIsIHN0cmVycm9yKGVycl9ubykpOwotKwllbHNlCi0rCQlwdXRjKCdcbicsIHN0ZGVycik7Ci0rCWV4aXQoMSk7Ci0rfQotKwotK3ZvaWQKLStlcnJvcl9tc2dfYW5kX3NraXAoY29uc3QgY2hhciAqZm10LCAuLi4pCi0rewotKwl2YV9saXN0IHA7Ci0rCi0rCXZhX3N0YXJ0KHAsIGZtdCk7Ci0rCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBwKTsKLSsJcHV0YygnXG4nLCBzdGRlcnIpOwotKwlleGl0KDc3KTsKLSt9Ci0rCi0rdm9pZAotK3BlcnJvcl9tc2dfYW5kX3NraXAoY29uc3QgY2hhciAqZm10LCAuLi4pCi0rewotKwlpbnQgZXJyX25vID0gZXJybm87Ci0rCXZhX2xpc3QgcDsKLSsKLSsJdmFfc3RhcnQocCwgZm10KTsKLSsJdmZwcmludGYoc3RkZXJyLCBmbXQsIHApOwotKwlpZiAoZXJyX25vKQotKwkJZnByaW50ZihzdGRlcnIsICI6ICVzXG4iLCBzdHJlcnJvcihlcnJfbm8pKTsKLSsJZWxzZQotKwkJcHV0YygnXG4nLCBzdGRlcnIpOwotKwlleGl0KDc3KTsKLSt9Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvZ2V0X3BhZ2Vfc2l6ZS5jIGIvdGVzdHMvZ2V0X3BhZ2Vfc2l6ZS5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uYWVlYTg2MQotLS0tIC9kZXYvbnVsbAotKysrIGIvdGVzdHMvZ2V0X3BhZ2Vfc2l6ZS5jCi1AQCAtMCwwICsxLDEzIEBACi0rI2luY2x1ZGUgInRlc3RzLmgiCi0rI2luY2x1ZGUgPHVuaXN0ZC5oPgotKwotK3NpemVfdAotK2dldF9wYWdlX3NpemUodm9pZCkKLSt7Ci0rCXN0YXRpYyBzaXplX3QgcGFnZV9zaXplOwotKwotKwlpZiAoIXBhZ2Vfc2l6ZSkKLSsJCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKLSsKLSsJcmV0dXJuIHBhZ2Vfc2l6ZTsKLSt9Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvdGFpbF9hbGxvYy5jIGIvdGVzdHMvdGFpbF9hbGxvYy5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMmI4YjE0ZQotLS0tIC9kZXYvbnVsbAotKysrIGIvdGVzdHMvdGFpbF9hbGxvYy5jCi1AQCAtMCwwICsxLDUyIEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+Ci0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSsgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0rICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0rICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSsgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSsgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0rICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0rICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKi8KLSsKLSsjaW5jbHVkZSAidGVzdHMuaCIKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0rCi0rdm9pZCAqCi0rdGFpbF9hbGxvYyhjb25zdCBzaXplX3Qgc2l6ZSkKLSt7Ci0rCWNvbnN0IHNpemVfdCBwYWdlX3NpemUgPSBnZXRfcGFnZV9zaXplKCk7Ci0rCWNvbnN0IHNpemVfdCBsZW4gPSAoc2l6ZSArIHBhZ2Vfc2l6ZSAtIDEpICYgLXBhZ2Vfc2l6ZTsKLSsJY29uc3Qgc2l6ZV90IGFsbG9jX3NpemUgPSBsZW4gKyAyICogcGFnZV9zaXplOwotKwotKwl2b2lkICpwID0gbW1hcChOVUxMLCBhbGxvY19zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotKwkJICAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwotKwlpZiAoTUFQX0ZBSUxFRCA9PSBwKQotKwkJcGVycm9yX21zZ19hbmRfZmFpbCgibW1hcCglenUpIiwgYWxsb2Nfc2l6ZSk7Ci0rCi0rCXZvaWQgKnN0YXJ0X3dvcmsgPSBwICsgcGFnZV9zaXplOwotKwl2b2lkICp0YWlsX2d1YXJkID0gc3RhcnRfd29yayArIGxlbjsKLSsKLSsJaWYgKG11bm1hcChwLCBwYWdlX3NpemUpIHx8IG11bm1hcCh0YWlsX2d1YXJkLCBwYWdlX3NpemUpKQotKwkJcGVycm9yX21zZ19hbmRfZmFpbCgibXVubWFwIik7Ci0rCi0rCW1lbXNldChzdGFydF93b3JrLCAweGZmLCBsZW4pOwotKwlyZXR1cm4gdGFpbF9ndWFyZCAtIHNpemU7Ci0rfQotZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3RzLmggYi90ZXN0cy90ZXN0cy5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uOTFmYTI0ZQotLS0tIC9kZXYvbnVsbAotKysrIGIvdGVzdHMvdGVzdHMuaAotQEAgLTAsMCArMSw2MiBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDE2IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0rICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSsgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0rICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSsgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSsgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqLwotKwotKyNpZm5kZWYgVEVTVFNfSF8KLSsjIGRlZmluZSBURVNUU19IXwotKwotKyMgaWZkZWYgSEFWRV9DT05GSUdfSAotKyMgIGluY2x1ZGUgImNvbmZpZy5oIgotKyMgZW5kaWYKLSsKLSsjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotKyMgaW5jbHVkZSAiZ2NjX2NvbXBhdC5oIgotKwotKy8qIENhY2hlZCBzeXNjb25mKF9TQ19QQUdFU0laRSkuICovCi0rc2l6ZV90IGdldF9wYWdlX3NpemUodm9pZCk7Ci0rCi0rLyogUHJpbnQgbWVzc2FnZSBhbmQgc3RyZXJyb3IoZXJybm8pIHRvIHN0ZGVyciwgdGhlbiBleGl0KDEpLiAqLwotK3ZvaWQgcGVycm9yX21zZ19hbmRfZmFpbChjb25zdCBjaGFyICosIC4uLikKLSsJQVRUUklCVVRFX0ZPUk1BVCgocHJpbnRmLCAxLCAyKSkgQVRUUklCVVRFX05PUkVUVVJOOwotKy8qIFByaW50IG1lc3NhZ2UgdG8gc3RkZXJyLCB0aGVuIGV4aXQoNzcpLiAqLwotK3ZvaWQgZXJyb3JfbXNnX2FuZF9za2lwKGNvbnN0IGNoYXIgKiwgLi4uKQotKwlBVFRSSUJVVEVfRk9STUFUKChwcmludGYsIDEsIDIpKSBBVFRSSUJVVEVfTk9SRVRVUk47Ci0rLyogUHJpbnQgbWVzc2FnZSBhbmQgc3RyZXJyb3IoZXJybm8pIHRvIHN0ZGVyciwgdGhlbiBleGl0KDc3KS4gKi8KLSt2b2lkIHBlcnJvcl9tc2dfYW5kX3NraXAoY29uc3QgY2hhciAqLCAuLi4pCi0rCUFUVFJJQlVURV9GT1JNQVQoKHByaW50ZiwgMSwgMikpIEFUVFJJQlVURV9OT1JFVFVSTjsKLSsKLSsvKgotKyAqIEFsbG9jYXRlIG1lbW9yeSB0aGF0IGVuZHMgb24gdGhlIHBhZ2UgYm91bmRhcnkuCi0rICogUGFnZXMgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCBhcmUgcHJlY2VlZGVkIGJ5IGFuIHVubWFwcGVkIHBhZ2UKLSsgKiBhbmQgZm9sbG93ZWQgYWxzbyBieSBhbiB1bm1hcHBlZCBwYWdlLgotKyAqLwotK3ZvaWQgKnRhaWxfYWxsb2MoY29uc3Qgc2l6ZV90KQotKwlBVFRSSUJVVEVfTUFMTE9DIEFUVFJJQlVURV9BTExPQ19TSVpFKCgxKSk7Ci0rCi0rIyBkZWZpbmUgU0tJUF9NQUlOX1VOREVGSU5FRChhcmcpIFwKLSsJaW50IG1haW4odm9pZCkgeyBlcnJvcl9tc2dfYW5kX3NraXAoInVuZGVmaW5lZDogJXMiLCBhcmcpOyB9Ci0rCi0rI2VuZGlmCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXRlc3RzLXNjbV9yaWdodHMuYy11c2UtbGlidGVzdHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS10ZXN0cy1zY21fcmlnaHRzLmMtdXNlLWxpYnRlc3RzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmJhYjhiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXRlc3RzLXNjbV9yaWdodHMuYy11c2UtbGlidGVzdHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1Gcm9tIDMzOWExNWI2MTliNDc5YzYzY2FmYmEyMWQ1ZmMzNTllNjEzZDllZTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiRG1pdHJ5IFYuIExldmluIiA8bGR2QGFsdGxpbnV4Lm9yZz4KLURhdGU6IE1vbiwgNCBKYW4gMjAxNiAyMzo1MzozMSArMDAwMAotU3ViamVjdDogW1BBVENIXSB0ZXN0cy9zY21fcmlnaHRzLmM6IHVzZSBsaWJ0ZXN0cwotCi0qIHRlc3RzL3NjbV9yaWdodHMuYyAobWFpbik6IFVzZSBwZXJyb3JfbXNnX2FuZF9mYWlsIGFuZCBwZXJyb3JfbXNnX2FuZF9za2lwLgotLS0tCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0gdGVzdHMvc2NtX3JpZ2h0cy5jIHwgMTIgKysrKysrKystLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3Rlc3RzL3NjbV9yaWdodHMuYyBiL3Rlc3RzL3NjbV9yaWdodHMuYwotaW5kZXggYzQxNDQ0Zi4uMWU1ZTg1MCAxMDA2NDQKLS0tLSBhL3Rlc3RzL3NjbV9yaWdodHMuYwotKysrIGIvdGVzdHMvc2NtX3JpZ2h0cy5jCi1AQCAtMSw1ICsxLDUgQEAKLSAvKgotLSAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+Ci0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotQEAgLTI1LDYgKzI1LDcgQEAKLSAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICAqLwotIAotKyNpbmNsdWRlICJ0ZXN0cy5oIgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotQEAgLTQ4LDEyICs0OSwxNSBAQCBpbnQgbWFpbihpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKLSAJKHZvaWQpIGNsb3NlKDMpOwotIAotIAlpbnQgc3ZbMl07Ci0tCWFzc2VydChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzdikgPT0gMCk7Ci0rCWlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzdikpCi0rCQlwZXJyb3JfbXNnX2FuZF9za2lwKCJzb2NrZXRwYWlyIik7Ci0gCWludCBvbmUgPSAxOwotLQlhc3NlcnQoc2V0c29ja29wdChzdlswXSwgU09MX1NPQ0tFVCwgU09fUEFTU0NSRUQsICZvbmUsIHNpemVvZihvbmUpKSA9PSAwKTsKLSsJaWYgKHNldHNvY2tvcHQoc3ZbMF0sIFNPTF9TT0NLRVQsIFNPX1BBU1NDUkVELCAmb25lLCBzaXplb2Yob25lKSkpCi0rCQlwZXJyb3JfbXNnX2FuZF9za2lwKCJzZXRzb2Nrb3B0Iik7Ci0gCi0gCXBpZF90IHBpZCA9IGZvcmsoKTsKLS0JYXNzZXJ0KHBpZCA+PSAwKTsKLSsJaWYgKHBpZCA8IDApCi0rCQlwZXJyb3JfbXNnX2FuZF9mYWlsKCJmb3JrIik7Ci0gCi0gCWlmIChwaWQpIHsKLSAJCWFzc2VydChjbG9zZShzdlswXSkgPT0gMCk7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaAppbmRleCA4MjQwMzFlLi4yYjc2ZThhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCkBAIC0xMCwyMyArMTAsMjIgQEAKICAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggMDIwOWJhYy4uYjk2OWUyNSAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCiBAQCAtMzYsNyArMzYsNyBAQCBBQ19JTklUKFtzdHJhY2VdLAogIEFDX0NPTkZJR19TUkNESVIoW3N0cmFjZS5jXSkKICBBQ19DT05GSUdfQVVYX0RJUihbLl0pCiAgQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKLS1BTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIG5vc3RkaW5jIGRpc3QteHogbm8tZGlzdC1nemlwIHNpbGVudC1ydWxlcyBwYXJhbGxlbC10ZXN0c10pCi0rQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBub3N0ZGluYyBkaXN0LXh6IG5vLWRpc3QtZ3ppcCBzaWxlbnQtcnVsZXMgc2VyaWFsLXRlc3RzXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIG5vc3RkaW5jIGRpc3QteHogc2lsZW50LXJ1bGVzIHBhcmFsbGVsLXRlc3RzXSkKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIG5vc3RkaW5jIGRpc3QteHogc2lsZW50LXJ1bGVzIHNlcmlhbC10ZXN0c10pCiAgQU1fTUFJTlRBSU5FUl9NT0RFCiAgQUNfQ0FOT05JQ0FMX0hPU1QKICAKIGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCi1pbmRleCAwZjIzYjRiLi40MjlmN2U5IDEwMDY0NAoraW5kZXggOTAyMzAyOS4uZTE5MTdmYSAxMDA2NDQKIC0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCiArKysgYi90ZXN0cy9NYWtlZmlsZS5hbQotQEAgLTMzMiwzICszMzIsMjEgQEAga3N5c2VudC5oOiAkKHNyY2Rpcikva3N5c2VudC5zZWQKK0BAIC03ODQsMyArNzg0LDIxIEBAIGtzeXNlbnQuaDogJChzcmNkaXIpL2tzeXNlbnQuc2VkCiAgCiAgQlVJTFRfU09VUkNFUyA9IGtzeXNlbnQuaAogIENMRUFORklMRVMgPSBrc3lzZW50LmggJChURVNUUzo9LnRtcCkKQEAgLTQ4LDYgKzQ3LDMgQEAKICsJCXNlZCAtaSAtZSAncy8kJHtzcmNkaXI9Ln0vLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRmaWxlOyBcCiArCWRvbmUKICsJZm9yIGkgaW4gbmV0IG5ldC1mZCBzY21fcmlnaHRzLWZkIHNpZ2FjdGlvbjsgZG8gc2VkIC1pIC1lICdzLyQkc3JjZGlyLy4vZycgJChERVNURElSKS8kKFRFU1RESVIpLyQkaS50ZXN0OyBkb25lCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9taXBzLVNJR0VNVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9taXBzLVNJR0VNVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQzNzhiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL21pcHMtU0lHRU1ULnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1NJR0VNVCBpcyBub3QgZGVmaW5lZCBldmVyeXdoZXJlIGUuZyBtdXNsIGRvZXMKK25vdCBkZWZpbmUgaXQuIFRoZXJlZm9yZSBjaGVjayBpdCBiZWluZyBkZWZpbmVkCitiZWZvcmUgdXNpbmcgaXQuCisKK0ZpeGVzIGVycm9ycyBlLmcuCisuLi8uLi9zdHJhY2UtNC4xMy90ZXN0cy9zaWduYWwybmFtZS5jOjQ1Ojc6IGVycm9yOiAnU0lHRU1UJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogc3RyYWNlLTQuMTMvdGVzdHMvc2lnbmFsMm5hbWUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN0cmFjZS00LjEzLm9yaWcvdGVzdHMvc2lnbmFsMm5hbWUuYworKysrIHN0cmFjZS00LjEzL3Rlc3RzL3NpZ25hbDJuYW1lLmMKK0BAIC00Miw3ICs0Miw5IEBAIHNpZ25hbDJuYW1lKGludCBzaWcpCisgCUNBU0UoU0lHRU1UKTsKKyAJQ0FTRShTSUdMT1NUKTsKKyAjZWxpZiBkZWZpbmVkIE1JUFMKKysjaWZkZWYgU0lHRU1UCisgCUNBU0UoU0lHRU1UKTsKKysjZW5kaWYKKyAJQ0FTRShTSUdJT1QpOworIAlDQVNFKFNJR1BXUik7CisgI2Vsc2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS91cGRhdGUtZ2F3ay1wYXRocy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS91cGRhdGUtZ2F3ay1wYXRocy5wYXRjaAppbmRleCBiZmM3ZjM0Li45NGVlNTNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvdXBkYXRlLWdhd2stcGF0aHMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3VwZGF0ZS1nYXdrLXBhdGhzLnBhdGNoCkBAIC0xMiwxOSArMTIsMjAgQEAKIAogU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KIC0tLQotIG1wZXJzLmF3ayAgICAgICAgICAgICAgICAgfCAyICstCi0gdGVzdHMvY2Fwcy5hd2sgICAgICAgICAgICB8IDIgKy0KLSB0ZXN0cy9tYXRjaC5hd2sgICAgICAgICAgIHwgMiArLQotIHRlc3RzL25ldC15eS1hY2NlcHQuYXdrICAgfCAyICstCi0gdGVzdHMvbmV0LXl5LWNvbm5lY3QuYXdrICB8IDIgKy0KLSB0ZXN0cy9zaWdhY3Rpb24uYXdrICAgICAgIHwgMiArLQotIHRlc3RzL3VpZC5hd2sgICAgICAgICAgICAgfCAyICstCi0gdGVzdHMvdW5peC15eS1hY2NlcHQuYXdrICB8IDIgKy0KLSB0ZXN0cy91bml4LXl5LWNvbm5lY3QuYXdrIHwgMiArLQotIDkgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorIG1wZXJzLmF3ayAgICAgICAgICAgICAgICB8IDIgKy0KKyB0ZXN0cy1tMzIvY2Fwcy5hd2sgICAgICAgfCAyICstCisgdGVzdHMtbTMyL21hdGNoLmF3ayAgICAgIHwgMiArLQorIHRlc3RzLW0zMi9zaWdhY3Rpb24uYXdrICB8IDIgKy0KKyB0ZXN0cy1teDMyL2NhcHMuYXdrICAgICAgfCAyICstCisgdGVzdHMtbXgzMi9tYXRjaC5hd2sgICAgIHwgMiArLQorIHRlc3RzLW14MzIvc2lnYWN0aW9uLmF3ayB8IDIgKy0KKyB0ZXN0cy9jYXBzLmF3ayAgICAgICAgICAgfCAyICstCisgdGVzdHMvbWF0Y2guYXdrICAgICAgICAgIHwgMiArLQorIHRlc3RzL3NpZ2FjdGlvbi5hd2sgICAgICB8IDIgKy0KKyAxMCBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL21wZXJzLmF3ayBiL21wZXJzLmF3awotaW5kZXggNzNiZjBiMC4uNTBlNmMxNiAxMDA2NDQKK2luZGV4IDk5MjQ4YzUuLmZmMTA1MjAgMTAwNjQ0CiAtLS0gYS9tcGVycy5hd2sKICsrKyBiL21wZXJzLmF3awogQEAgLTEsNCArMSw0IEBACkBAIC0zMiwxNyArMzMsNzcgQEAKICsjIS91c3IvYmluL2dhd2sKICAjCiAgIyBDb3B5cmlnaHQgKGMpIDIwMTUgRWx2aXJhIEtoYWJpcm92YSA8bGluZXByaW50ZXIwQGdtYWlsLmNvbT4KLSAjIENvcHlyaWdodCAoYykgMjAxNSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvY2Fwcy5hd2sgYi90ZXN0cy9jYXBzLmF3awotaW5kZXggYmFkOGIwZi4uODQ1ZjM3YyAxMDA2NDQKLS0tLSBhL3Rlc3RzL2NhcHMuYXdrCi0rKysgYi90ZXN0cy9jYXBzLmF3aworICMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgorZGlmZiAtLWdpdCBhL3Rlc3RzLW0zMi9jYXBzLmF3ayBiL3Rlc3RzLW0zMi9jYXBzLmF3aworaW5kZXggNjcwMDNhYy4uYTY2ZjFmMCAxMDA2NDQKKy0tLSBhL3Rlc3RzLW0zMi9jYXBzLmF3aworKysrIGIvdGVzdHMtbTMyL2NhcHMuYXdrCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vZ2F3aworKyMhL3Vzci9iaW4vZ2F3aworICMKKyAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNhcHMgc3RyYWNlIHRlc3QuCisgIworZGlmZiAtLWdpdCBhL3Rlc3RzLW0zMi9tYXRjaC5hd2sgYi90ZXN0cy1tMzIvbWF0Y2guYXdrCitpbmRleCBhYmZiYWU5Li5mMjc0MGJmIDEwMDY0NAorLS0tIGEvdGVzdHMtbTMyL21hdGNoLmF3aworKysrIGIvdGVzdHMtbTMyL21hdGNoLmF3awogQEAgLTEsNCArMSw0IEBACiAtIyEvYmluL2dhd2sKICsjIS91c3IvYmluL2dhd2sKICAjCiAgIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CiAgIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorZGlmZiAtLWdpdCBhL3Rlc3RzLW0zMi9zaWdhY3Rpb24uYXdrIGIvdGVzdHMtbTMyL3NpZ2FjdGlvbi5hd2sKK2luZGV4IDVjNmI2ZDAuLjNlMTQ0NjQgMTAwNjQ0CistLS0gYS90ZXN0cy1tMzIvc2lnYWN0aW9uLmF3aworKysrIGIvdGVzdHMtbTMyL3NpZ2FjdGlvbi5hd2sKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9nYXdrCisrIyEvdXNyL2Jpbi9nYXdrCisgIworICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgorICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK2RpZmYgLS1naXQgYS90ZXN0cy1teDMyL2NhcHMuYXdrIGIvdGVzdHMtbXgzMi9jYXBzLmF3aworaW5kZXggNjcwMDNhYy4uYTY2ZjFmMCAxMDA2NDQKKy0tLSBhL3Rlc3RzLW14MzIvY2Fwcy5hd2sKKysrKyBiL3Rlc3RzLW14MzIvY2Fwcy5hd2sKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9nYXdrCisrIyEvdXNyL2Jpbi9nYXdrCisgIworICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgY2FwcyBzdHJhY2UgdGVzdC4KKyAjCitkaWZmIC0tZ2l0IGEvdGVzdHMtbXgzMi9tYXRjaC5hd2sgYi90ZXN0cy1teDMyL21hdGNoLmF3aworaW5kZXggYWJmYmFlOS4uZjI3NDBiZiAxMDA2NDQKKy0tLSBhL3Rlc3RzLW14MzIvbWF0Y2guYXdrCisrKysgYi90ZXN0cy1teDMyL21hdGNoLmF3aworQEAgLTEsNCArMSw0IEBACistIyEvYmluL2dhd2sKKysjIS91c3IvYmluL2dhd2sKKyAjCisgIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CisgIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorZGlmZiAtLWdpdCBhL3Rlc3RzLW14MzIvc2lnYWN0aW9uLmF3ayBiL3Rlc3RzLW14MzIvc2lnYWN0aW9uLmF3aworaW5kZXggNWM2YjZkMC4uM2UxNDQ2NCAxMDA2NDQKKy0tLSBhL3Rlc3RzLW14MzIvc2lnYWN0aW9uLmF3aworKysrIGIvdGVzdHMtbXgzMi9zaWdhY3Rpb24uYXdrCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vZ2F3aworKyMhL3Vzci9iaW4vZ2F3aworICMKKyAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KKyAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitkaWZmIC0tZ2l0IGEvdGVzdHMvY2Fwcy5hd2sgYi90ZXN0cy9jYXBzLmF3aworaW5kZXggNjcwMDNhYy4uYTY2ZjFmMCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2NhcHMuYXdrCisrKysgYi90ZXN0cy9jYXBzLmF3aworQEAgLTEsNCArMSw0IEBACistIyEvYmluL2dhd2sKKysjIS91c3IvYmluL2dhd2sKKyAjCisgIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBjYXBzIHN0cmFjZSB0ZXN0LgorICMKIGRpZmYgLS1naXQgYS90ZXN0cy9tYXRjaC5hd2sgYi90ZXN0cy9tYXRjaC5hd2sKIGluZGV4IGFiZmJhZTkuLmYyNzQwYmYgMTAwNjQ0CiAtLS0gYS90ZXN0cy9tYXRjaC5hd2sKQEAgLTUzLDI2ICsxMTQsNiBAQAogICMKICAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KICAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1kaWZmIC0tZ2l0IGEvdGVzdHMvbmV0LXl5LWFjY2VwdC5hd2sgYi90ZXN0cy9uZXQteXktYWNjZXB0LmF3awotaW5kZXggZmVkM2UzMC4uZTkxNmFiMCAxMDA2NDQKLS0tLSBhL3Rlc3RzL25ldC15eS1hY2NlcHQuYXdrCi0rKysgYi90ZXN0cy9uZXQteXktYWNjZXB0LmF3awotQEAgLTEsNCArMSw0IEBACi0tIyEvYmluL2dhd2sKLSsjIS91c3IvYmluL2dhd2sKLSAjCi0gIyBDb3B5cmlnaHQgKGMpIDIwMTQgTWFzYXRha2UgWUFNQVRPIDx5YW1hdG9AcmVkaGF0LmNvbT4KLSAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLWRpZmYgLS1naXQgYS90ZXN0cy9uZXQteXktY29ubmVjdC5hd2sgYi90ZXN0cy9uZXQteXktY29ubmVjdC5hd2sKLWluZGV4IGY0ZGNmOTEuLmIzY2VjOGMgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9uZXQteXktY29ubmVjdC5hd2sKLSsrKyBiL3Rlc3RzL25ldC15eS1jb25uZWN0LmF3awotQEAgLTEsNCArMSw0IEBACi0tIyEvYmluL2dhd2sKLSsjIS91c3IvYmluL2dhd2sKLSAjCi0gIyBDb3B5cmlnaHQgKGMpIDIwMTQgTWFzYXRha2UgWUFNQVRPIDx5YW1hdG9AcmVkaGF0LmNvbT4KLSAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KIGRpZmYgLS1naXQgYS90ZXN0cy9zaWdhY3Rpb24uYXdrIGIvdGVzdHMvc2lnYWN0aW9uLmF3awogaW5kZXggNWM2YjZkMC4uM2UxNDQ2NCAxMDA2NDQKIC0tLSBhL3Rlc3RzL3NpZ2FjdGlvbi5hd2sKQEAgLTgzLDM2ICsxMjQsMyBAQAogICMKICAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KICAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1kaWZmIC0tZ2l0IGEvdGVzdHMvdWlkLmF3ayBiL3Rlc3RzL3VpZC5hd2sKLWluZGV4IGE1NmM1YmUuLjY3YjA3NDkgMTAwNjQ0Ci0tLS0gYS90ZXN0cy91aWQuYXdrCi0rKysgYi90ZXN0cy91aWQuYXdrCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS9iaW4vZ2F3awotKyMhL3Vzci9iaW4vZ2F3awotICMKLSAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1kaWZmIC0tZ2l0IGEvdGVzdHMvdW5peC15eS1hY2NlcHQuYXdrIGIvdGVzdHMvdW5peC15eS1hY2NlcHQuYXdrCi1pbmRleCA0ZWQ2MGU0Li4yYTlkOWMwIDEwMDY0NAotLS0tIGEvdGVzdHMvdW5peC15eS1hY2NlcHQuYXdrCi0rKysgYi90ZXN0cy91bml4LXl5LWFjY2VwdC5hd2sKLUBAIC0xLDQgKzEsNCBAQAotLSMhL2Jpbi9nYXdrCi0rIyEvdXNyL2Jpbi9nYXdrCi0gIwotICMgQ29weXJpZ2h0IChjKSAyMDE0IE1hc2F0YWtlIFlBTUFUTyA8eWFtYXRvQHJlZGhhdC5jb20+Ci0gIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvdW5peC15eS1jb25uZWN0LmF3ayBiL3Rlc3RzL3VuaXgteXktY29ubmVjdC5hd2sKLWluZGV4IDI2MmJmMmUuLmM4MDlkZmEgMTAwNjQ0Ci0tLS0gYS90ZXN0cy91bml4LXl5LWNvbm5lY3QuYXdrCi0rKysgYi90ZXN0cy91bml4LXl5LWNvbm5lY3QuYXdrCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS9iaW4vZ2F3awotKyMhL3Vzci9iaW4vZ2F3awotICMKLSAjIENvcHlyaWdodCAoYykgMjAxNCBNYXNhdGFrZSBZQU1BVE8gPHlhbWF0b0ByZWRoYXQuY29tPgotICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzkxMzg4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotU1VNTUFSWSA9ICJTeXN0ZW0gY2FsbCB0cmFjaW5nIHRvb2wiCi1IT01FUEFHRSA9ICJodHRwOi8vc3RyYWNlLnNvdXJjZWZvcmdlLm5ldCIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTI0NTAwYzIxZTg1NmYwOTEyZGYyOTI5NWJhMTA0YzciCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3N0cmFjZS9zdHJhY2UtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL21vcmUtcm9idXN0LXRlc3QtZm9yLW0zMi1teDMyLWNvbXBpbGUtc3VwcG9ydC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly91cGRhdGUtZ2F3ay1wYXRocy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly91c2UtYXNtLXNnaWRlZnMuaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWFyYy1tZXRhZy1uaW9zMi1vcjFrLXRpbGUtZml4LWJ1aWxkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLXB0ZXN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtc2NtX3JpZ2h0cy5jLXVzZS1saWJ0ZXN0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXNjbV9yaWdodHMtZmQudGVzdC1yZXdyaXRlLXdpdGhvdXQtZm9yay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLU1vdmUtZ2NjLWNvbXBhdC1tYWNyb3MtdG8tZ2NjX2NvbXBhdC5oLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtaW50cm9kdWNlLWxpYnRlc3RzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYTE1ZDI1NTVhN2ZlYmI1NmQwMGM2ZTFhNTFjNjU1ZGMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTg2YTVmNmNkOGY5NDFmNjdmM2U0YjI4ZjRlNjBmM2Q5MTg1Yzk1MWNmMjY2NDA0NTMzMjEwYTJlNWNkODE1MiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmx1ZXRvb3RoCi0KLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIGNvcmV1dGlscyBncmVwIGdhd2sgc2VkIgotCi1QQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/Pz0gIlwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAotIgotCi1QQUNLQUdFQ09ORklHW2JsdWV6XSA9ICJhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPXllcyxhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPW5vLCR7QkxVRVp9IgotUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCi0KLVRFU1RESVIgPSAidGVzdHMiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgV2UgZG9uJ3Qgc2hpcCBzdHJhY2UtZ3JhcGggaGVyZSBiZWNhdXNlIGl0IG5lZWRzIHBlcmwKLQlybSAke0R9JHtiaW5kaXJ9L3N0cmFjZS1ncmFwaAotfQotCi1kb19jb21waWxlX3B0ZXN0KCkgewotCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBidWlsZHRlc3QtVEVTVFMKLX0KLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9Ci0Jc2VkIC1pIC1lICcvXnNyYy9zL3N0cmFjZS4qWzEtOV0vcHRlc3QvJyAke0R9LyR7UFRFU1RfUEFUSH0vJHtURVNURElSfS9NYWtlZmlsZQotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlN2YyMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEzLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGNhbGwgdHJhY2luZyB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3N0cmFjZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyNDUwMGMyMWU4NTZmMDkxMmRmMjkyOTViYTEwNGM3IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zdHJhY2Uvc3RyYWNlLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWdpdC12ZXJzaW9uLWdlbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3JlLXJvYnVzdC10ZXN0LWZvci1tMzItbXgzMi1jb21waWxlLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXBkYXRlLWdhd2stcGF0aHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdoZW4tdXNpbmctbm9uLWdsaWJjLWxpYmMtaW1wbGVtZW50YXRpb24tby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzLVNJR0VNVC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjRiNzhjN2ZlYmRkMjRjNzlkNTE0NzgyNGQxYTA4MGEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ0OGY3MzI1NzZjOTFlY2UzNmE1ODQzZDYzZjliZTA1NGM0MGVmNTlmMWU0NzczOTg2MDQyNjM2ODYxNjI1ZDciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJsdWV0b290aAorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBjb3JldXRpbHMgZ3JlcCBnYXdrIHNlZCIKKworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1tibHVlel0gPSAiYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD15ZXMsYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD1ubywke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLXdpdGgtbGlidW53aW5kLC0td2l0aG91dC1saWJ1bndpbmQsbGlidW53aW5kIgorCitURVNURElSID0gInRlc3RzIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFdlIGRvbid0IHNoaXAgc3RyYWNlLWdyYXBoIGhlcmUgYmVjYXVzZSBpdCBuZWVkcyBwZXJsCisJcm0gJHtEfSR7YmluZGlyfS9zdHJhY2UtZ3JhcGgKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGluc3RhbGwtcHRlc3QgQlVJTERESVI9JHtCfSBERVNURElSPSR7RH0ke1BURVNUX1BBVEh9IFRFU1RESVI9JHtURVNURElSfQorCXNlZCAtaSAtZSAnL15zcmMvcy9zdHJhY2UuKlsxLTldL3B0ZXN0LycgJHtEfS8ke1BURVNUX1BBVEh9LyR7VEVTVERJUn0vTWFrZWZpbGUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitUT09MQ0hBSU4gPSAiZ2NjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS45LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5YTY3NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLVNVTU1BUlkgPSAiU3VidmVyc2lvbiAoc3ZuKSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGNsaWVudCIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotREVQRU5EUyA9ICJhcHItdXRpbCBzZXJmIHNxbGl0ZTMgZmlsZSIKLURFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCi1SREVQRU5EU18ke1BOfSA9ICJzZXJmIgotTElDRU5TRSA9ICJBcGFjaGUtMiIKLUhPTUVQQUdFID0gImh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmciCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1pbmhlcml0IGdldHRleHQgcHl0aG9ubmF0aXZlCi0KLVNSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9tYWNvcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtbGlidG9vbC1uYW1lLWluLWNvbmZpZ3VyZS5hYy5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICIyNDMwMzZlYjI4YjUwY2U1MTdmYzIyOGViMzI1MGFkZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4YmJmNmJiMTI1MDAzZDg4ZWUxYzIyOTM1YTM2YjdiMWFiN2Q5NTdlMGM4YjVmYmZlNWNiNjMxMGI2ZTg2YWUwIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hZjgxYWU0OWJhMzU5ZTcwNjI2YzA1ZTliZjMxMzcwOSIKLQotUEFDS0FHRUNPTkZJR1tzYXNsXSA9ICItLXdpdGgtc2FzbCwtLXdpdGhvdXQtc2FzbCxjeXJ1cy1zYXNsIgotUEFDS0FHRUNPTkZJR1tnbm9tZS1rZXlyaW5nXSA9ICItLXdpdGgtZ25vbWUta2V5cmluZywtLXdpdGhvdXQtZ25vbWUta2V5cmluZyxnbGliLTIuMCBnbm9tZS1rZXlyaW5nIgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAgICAgICAgICAgICAtLXdpdGhvdXQtYmVya2VsZXktZGIgLS13aXRob3V0LWFweHMgXAotICAgICAgICAgICAgICAgIC0td2l0aG91dC1zd2lnIC0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gXAotICAgICAgICAgICAgICAgIC0td2l0aC1hcHItdXRpbD0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWtleWNoYWluIFwKLSAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1JVQlk9bm9uZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMKLQotZXhwb3J0IExERkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9ICIKLUNQUEZMQUdTICs9ICItUCIKLUJVSUxEX0NQUEZMQUdTICs9ICItUCIKLQotYWNwYXRocyA9ICItSSBidWlsZC8gLUkgYnVpbGQvYWMtbWFjcm9zLyIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCXJtIC1mICR7U30vbGlidG9vbAotCXJtIC1mICR7U30vYnVpbGQvbGlidG9vbC5tNCAke1N9L2J1aWxkL2x0bWFpbi5zaCAke1N9L2J1aWxkL2x0b3B0aW9ucy5tNCAke1N9L2J1aWxkL2x0c3VnYXIubTQgJHtTfS9idWlsZC9sdHZlcnNpb24ubTQgJHtTfS9idWlsZC9sdH5vYnNvbGV0ZS5tNAotCXJtIC1mICR7U30vYWNsb2NhbC5tNAotCXNlZCAtaSAtZSAnczp3aXRoX3Nhc2w9Ii91c3IvbG9jYWwiOndpdGhfc2FzbD0iJHtTVEFHSU5HX0RJUn0iOicgJHtTfS9idWlsZC9hYy1tYWNyb3Mvc2FzbC5tNAotfQotCi0jfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX2xvY2FsL2xpYnN2bl9yYV9sb2NhbC0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sc3ZuX2RlbHRhLTF8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9saWJzdm5fcmFfc3ZuLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zZXJmL2xpYnN2bl9yYV9zZXJmLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJwotI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IGVycm9yOiByZWxpbmsgYGxpYnN2bl9yYV9zZXJmLTEubGEnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQKLSN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgLi4vLi4vc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJwotI3wgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvc3VidmVyc2lvbi0xLjguOS9idWlsZC1vdXRwdXRzLm1rOjEwOTA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdpbnN0YWxsLXNlcmYtbGliJyBmYWlsZWQKLSN8IG1ha2U6ICoqKiBbaW5zdGFsbC1zZXJmLWxpYl0gRXJyb3IgMQotUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS45LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U4M2MxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS45LjQuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJTdWJ2ZXJzaW9uIChzdm4pIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gY2xpZW50IgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gImFwci11dGlsIHNlcmYgc3FsaXRlMyBmaWxlIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInNlcmYiCitMSUNFTlNFID0gIkFwYWNoZS0yIgorSE9NRVBBR0UgPSAiaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgZ2V0dGV4dAorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfbWFjb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWxpYnRvb2wtbmFtZS1pbi1jb25maWd1cmUuYWMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOTEyMWEwMzhmODc2NDEwNTVhODE4M2Y0OWU5NzM5ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMjY3ZjllMmFiOTgzZjI2MDYyM2JlZTg0MWU2YzljYzQ1OGJmNGJmNzc2MjM4ZWQ1ZjEwMDk4M2Y3OWU5Mjk5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hZjgxYWU0OWJhMzU5ZTcwNjI2YzA1ZTliZjMxMzcwOSIKKworUEFDS0FHRUNPTkZJR1tzYXNsXSA9ICItLXdpdGgtc2FzbCwtLXdpdGhvdXQtc2FzbCxjeXJ1cy1zYXNsIgorUEFDS0FHRUNPTkZJR1tnbm9tZS1rZXlyaW5nXSA9ICItLXdpdGgtZ25vbWUta2V5cmluZywtLXdpdGhvdXQtZ25vbWUta2V5cmluZyxnbGliLTIuMCBnbm9tZS1rZXlyaW5nIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtYmVya2VsZXktZGIgLS13aXRob3V0LWFweHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zd2lnIC0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gXAorICAgICAgICAgICAgICAgIC0td2l0aC1hcHItdXRpbD0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWtleWNoYWluIFwKKyAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1JVQlk9bm9uZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZXhwb3J0IExERkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9ICIKK0NQUEZMQUdTICs9ICItUCIKK0JVSUxEX0NQUEZMQUdTICs9ICItUCIKKworYWNwYXRocyA9ICItSSBidWlsZC8gLUkgYnVpbGQvYWMtbWFjcm9zLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbGlidG9vbAorCXJtIC1mICR7U30vYnVpbGQvbGlidG9vbC5tNCAke1N9L2J1aWxkL2x0bWFpbi5zaCAke1N9L2J1aWxkL2x0b3B0aW9ucy5tNCAke1N9L2J1aWxkL2x0c3VnYXIubTQgJHtTfS9idWlsZC9sdHZlcnNpb24ubTQgJHtTfS9idWlsZC9sdH5vYnNvbGV0ZS5tNAorCXJtIC1mICR7U30vYWNsb2NhbC5tNAorCXNlZCAtaSAtZSAnczp3aXRoX3Nhc2w9Ii91c3IvbG9jYWwiOndpdGhfc2FzbD0iJHtTVEFHSU5HX0RJUn0iOicgJHtTfS9idWlsZC9hYy1tYWNyb3Mvc2FzbC5tNAorfQorCisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX2xvY2FsL2xpYnN2bl9yYV9sb2NhbC0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sc3ZuX2RlbHRhLTF8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9saWJzdm5fcmFfc3ZuLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zZXJmL2xpYnN2bl9yYV9zZXJmLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IGVycm9yOiByZWxpbmsgYGxpYnN2bl9yYV9zZXJmLTEubGEnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgLi4vLi4vc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvc3VidmVyc2lvbi0xLjguOS9idWlsZC1vdXRwdXRzLm1rOjEwOTA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdpbnN0YWxsLXNlcmYtbGliJyBmYWlsZWQKKyN8IG1ha2U6ICoqKiBbaW5zdGFsbC1zZXJmLWxpYl0gRXJyb3IgMQorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2FiYmVyL3N3YWJiZXItbmF0aXZlX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMzEzYmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2FiYmVyL3N3YWJiZXItbmF0aXZlX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLVNVTU1BUlkgPSAiVG9vbCB0byBtb25pdG9yIGFuZCByZXBvcnQgb24gaG9zdCBzeXN0ZW0gZmlsZSB1c2FnZSIKLUhPTUVQQUdFID0gImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3N3YWJiZXIiCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCi0KLVNSQ1JFViA9ICIyZDFmZTM2ZmIwYTRmZGFhZTg4MjNhOTgxOGE2Nzg1MTgyZDc1ZTY2IgotUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3N3YWJiZXIiCi0KLWluaGVyaXQgbmF0aXZlCi0KLWRvX2NvbmZpZ3VyZSAoKSB7Ci0JOgotfQotCi1kb19pbnN0YWxsKCkgewotICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYwppbmRleCA5ZGE0MGRmLi43MDRiYjI3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcuaW5jCkBAIC03LDE0ICs3LDE0IEBACiAKIFNFQ1RJT04gPSAiZGV2ZWwiCiAKLURFUEVORFMgPSAibGlicGNyZSBweXRob24iCitERVBFTkRTID0gImxpYnBjcmUgcHl0aG9uMyIKIAogU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3oiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHB5dGhvbm5hdGl2ZQoraW5oZXJpdCBhdXRvdG9vbHMgcHl0aG9uM25hdGl2ZQogCiBFWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OfSBcCisgICAgLS13aXRoLXB5dGhvbjM9JHtQWVRIT059IFwKICAgICAtLXdpdGhvdXQtYWxsZWdyb2NsIFwKICAgICAtLXdpdGhvdXQtYW5kcm9pZCBcCiAgICAgLS13aXRob3V0LWJvb3N0IFwKQEAgLTMzLDcgKzMzLDYgQEAKICAgICAtLXdpdGhvdXQtcGVybDUgXAogICAgIC0td2l0aG91dC1waWtlIFwKICAgICAtLXdpdGhvdXQtcGhwIFwKLSAgICAtLXdpdGhvdXQtcHl0aG9uMyBcCiAgICAgLS13aXRob3V0LXIgXAogICAgIC0td2l0aG91dC1ydWJ5IFwKICAgICAtLXdpdGhvdXQtdGNsIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzdGVtZC1ib290Y2hhcnQvc3lzdGVtZC1ib290Y2hhcnRfMjMwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXN0ZW1kLWJvb3RjaGFydC9zeXN0ZW1kLWJvb3RjaGFydF8yMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlNjI5YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzdGVtZC1ib290Y2hhcnQvc3lzdGVtZC1ib290Y2hhcnRfMjMwLmJiCkBAIC0wLDAgKzEsMjkgQEAKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDIuMTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwyO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC1ib290Y2hhcnQuZ2l0O3Byb3RvY29sPWh0dHBzIgorCisjIE1vZGlmeSB0aGVzZSBhcyBkZXNpcmVkCitQViA9ICIyMzArZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiZGNiMjQ2YjQ2MjM5MjU5ZWM5OWIzYzZlNmFiN2QyN2UxYTVhOGE4NCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyA9ICJzeXN0ZW1kIGxpYnhzbHQtbmF0aXZlIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUgaW50bHRvb2wiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBzeXN0ZW1kIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAic3lzdGVtZCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInN5c3RlbWQtYm9vdGNoYXJ0LnNlcnZpY2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgaW50bHRvb2wubTQgaXMgYSBzb2Z0IGxpbmsgdG8gL3Vzci9zaGFyZS9hY2xvY2FsL200LCBkZWxldGUgaXQgYW5kIHVzZSB0aGUgb25lIGluIG91ciBzeXNyb290CisgICAgcm0gLWYgJHtTfS9tNC9pbnRsdG9vbC5tNAorfQorCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbWQtYm9vdGNoYXJ0IgorCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC1yb290cHJlZml4PSR7YmFzZV9wcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtiYXNlX2xpYmRpcn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYgppbmRleCBhYjJmY2Q3Li5lNWU0MWYxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKQEAgLTUsMTEgKzUsMTEgQEAKIExJQ0VOU0UgPSAiRVBMLTEuMCB8IEVETC0xLjAiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9lZGwtdjEwLmh0bWw7bWQ1PTUyMmEzOTBhODNkYzE4NjUxM2YwNTAwNTQzYWQzNjc5IgogCi1TUkNSRVYgPSAiYjlhNzM1ZTljN2NmODJmODBkNDEyYjdhYjE1ZDA4Yjg5ZDVhNGNjYyIKLVBWID0gIjEuMy4wK2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjJkZGRkNWY0NDBhMTVkNTQwNjAzMmZhYzIwZjIwNjQ4NDUxMzY0NmYiCitQViA9ICIxLjQuMCtnaXQke1NSQ1BWfSIKIAogVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCi1TUkNfVVJJID0gImdpdDovL2dpdC5lY2xpcHNlLm9yZy9naXRyb290L3RjZi9vcmcuZWNsaXBzZS50Y2YuYWdlbnQuZ2l0O2JyYW5jaD0xLjNfbWFyc19idWdmaXggXAorU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZWNsaXBzZS5vcmcvZ2l0cm9vdC90Y2Yvb3JnLmVjbGlwc2UudGNmLmFnZW50O2JyYW5jaD0xLjRfbmVvbl9idWdmaXggXAogICAgICAgICAgICBmaWxlOi8vZml4X3JhbmxpYi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtY2Fub25pY2FsaXplX2ZpbGVfbmFtZS1pcy1zcGVjaWZpYy10by1nbGliYy5wYXRjaDtzdHJpcGxldmVsPTIgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2gKaW5kZXggNWI1ZGUwNy4uNzJhMGZhNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoCkBAIC0xMiw3ICsxMiw3IEBACiB8IE1ha2luZyBkaXJlY3RvcnkgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlL3Vzci9iaW4KIHwgbWFrZTogKioqIFtpbnN0YWxsLW1zZ3NdIEVycm9yIDEKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA0LzI2CiAKIEluZGV4OiB1bml4L01ha2VmaWxlLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ub19wYWNrYWdlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCmluZGV4IGFiNmNjNDMuLjVjNjIyYTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCkBAIC01LDI2ICs1LDI2IEBACiAKIFNpZ25lZC1vZmYtYnk6IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+CiAKLUluZGV4OiB1bml4L01ha2VmaWxlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MTIuMjM1NDI1ODkxIC0wODAwCi0rKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM4OjEyLjIzMTQyNTg5MSAtMDgwMAotQEAgLTYxMSw3ICs2MTEsNyBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGI3MjlmZmQuLjJjMmU4MjQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC02MTIsNyArNjEyLDcgQEAgU1JDUyA9ICQoR0VORVJJQ19TUkNTKSAkKFRPTU1BVEhfU1JDUykgJChVTklYX1NSQ1MpICQoTk9USUZZX1NSQ1MpIFwKICAjIFN0YXJ0IG9mIHJ1bGVzCiAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgCiAtYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jIHBhY2thZ2VzCiArYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jCiAgCi0gYmluYXJpZXM6ICR7TElCX0ZJTEV9ICQoU1RVQl9MSUJfRklMRSkgJHtUQ0xfRVhFfQorIGJpbmFyaWVzOiAke0xJQl9GSUxFfSAke1RDTF9FWEV9CiAgCi1AQCAtNjUzLDEyICs2NTMsMTIgQEAKK0BAIC02NTYsMTIgKzY1NiwxMiBAQCBNYWtlZmlsZTogJChVTklYX0RJUikvTWFrZWZpbGUuaW4gJChETFRFU1RfRElSKS9NYWtlZmlsZS5pbgogICN0Y2xDb25maWcuaDogJChVTklYX0RJUikvdGNsQ29uZmlnLmguaW4KICAjCSQoU0hFTEwpIGNvbmZpZy5zdGF0dXMKICAKIC1jbGVhbjogY2xlYW4tcGFja2FnZXMKICtjbGVhbjoKLSAJcm0gLWYgKi5hICoubyBsaWJ0Y2wqIGNvcmUgZXJycyAqfiBcIyogVEFHUyAqLkUgYS5vdXQgXAorIAlybSAtcmYgKi5hICoubyBsaWJ0Y2wqIGNvcmUgZXJycyAqfiBcIyogVEFHUyAqLkUgYS5vdXQgXAogIAkJZXJyb3JzICR7VENMX0VYRX0gJHtUQ0xURVNUX0VYRX0gbGliLmV4cCBUY2wgQERUUkFDRV9IRFJACiAgCWNkIGRsdGVzdCA7ICQoTUFLRSkgY2xlYW4KICAKQEAgLTMzLDcgKzMzLDcgQEAKICAJcm0gLXJmIE1ha2VmaWxlIGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgdGNsQ29uZmlnLnNoIFwKICAJCXRjbENvbmZpZy5oICoucGxpc3QgVGNsLmZyYW1ld29yayB0Y2wucGMKICAJY2QgZGx0ZXN0IDsgJChNQUtFKSBkaXN0Y2xlYW4KLUBAIC03MDYsNyArNzA2LDcgQEAKK0BAIC03MDksNyArNzA5LDcgQEAgdGNsdGVzdC1yZWFsOgogICMgdGNsdGVzdCwgaWU6CiAgIwklIG1ha2UgdGVzdCBURVNURkxBR1M9Ii12ZXJib3NlIGJwcyAtZmlsZSBmaWxlTmFtZS50ZXN0IgogIApAQCAtNDIsNyArNDIsNyBAQAogIAogIHRlc3QtdGNsOiAke1RDTFRFU1RfRVhFfQogIAkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQotQEAgLTc3MSw3ICs3NzEsNyBAQAorQEAgLTc3NCw3ICs3NzQsNyBAQCBJTlNUQUxMX1BBQ0tBR0VfVEFSR0VUUyA9IGluc3RhbGwtcGFja2FnZXMKICBJTlNUQUxMX0RFVl9UQVJHRVRTID0gaW5zdGFsbC1oZWFkZXJzCiAgSU5TVEFMTF9FWFRSQV9UQVJHRVRTID0gQEVYVFJBX0lOU1RBTExACiAgSU5TVEFMTF9UQVJHRVRTID0gJChJTlNUQUxMX0JBU0VfVEFSR0VUUykgJChJTlNUQUxMX0RPQ19UQVJHRVRTKSAkKElOU1RBTExfREVWX1RBUkdFVFMpIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOTJiM2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotU1VNTUFSWSA9ICJUb29sIENvbW1hbmQgTGFuZ3VhZ2UiCi1IT01FUEFHRSA9ICJodHRwOi8vdGNsLnNvdXJjZWZvcmdlLm5ldCIKLVNFQ1RJT04gPSAiZGV2ZWwvdGNsdGsiCi0KLSMgaHR0cDovL3d3dy50Y2wudGsvc29mdHdhcmUvdGNsdGsvbGljZW5zZS5odG1sCi1MSUNFTlNFID0gInRjbCAmIEJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vY29tcGF0L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vbGlicmFyeS9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCi0gICAgZmlsZTovLy4uL21hY29zeC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCi0gICAgZmlsZTovLy4uL3Rlc3RzL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vd2luL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSIKLQotREVQRU5EUyA9ICJ0Y2wtbmF0aXZlIHpsaWIiCi0KLUJBU0VfU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vdGNsLyR7QlBOfSR7UFZ9LXNyYy50YXIuZ3ogXAotICAgICAgICAgICAgICAgIGZpbGU6Ly90Y2wtYWRkLXNvbmFtZS5wYXRjaCIKLVNSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbm9fcGFja2FnZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICJkN2NiYjkxZjFkZWQxOTE5MzcwYTMwZWRkMTUzNDMwNCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZTZlZDk0Yzk4MWMxZDBjNWY1ZmVmYjgxMTJkMDZjNmJmNGQwNTBhNzMyN2U5NWU3MWQ0MTdjNDE2NTE5YzhkIgotCi1TUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke0JBU0VfU1JDX1VSSX0iCi0KLVMgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfS91bml4IgotCi1WRVIgPSAiJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJpbmNvbmZpZwotCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRocmVhZHMgLS1kaXNhYmxlLXJwYXRoIC0tbGliZGlyPSR7bGliZGlyfSIKLQotZG9fY29uZmlndXJlKCkgewotCWNkICR7U30KLQlnbnUtY29uZmlnaXplCi0JY2QgJHtCfQotCW9lX3J1bmNvbmYKLX0KLQotZG9fY29tcGlsZV9wcmVwZW5kKCkgewotCWVjaG8gPiAke1N9Ly4uL2NvbXBhdC9maXhzdHJ0b2QuYwotfQotCi1kb19pbnN0YWxsKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsIGluc3RhbGwtcHJpdmF0ZS1oZWFkZXJzCi0JbG4gLXNmIC4vdGNsc2gke1ZFUn0gJHtEfSR7YmluZGlyfS90Y2xzaAotCWxuIC1zZiB0Y2xzaDguNiAke0R9JHtiaW5kaXJ9L3RjbHNoJHtWRVJ9Ci0Jc2VkIC1pICJzKy1MJHtCfSstTCR7U1RBR0lOR19MSUJESVJ9K2ciIHRjbENvbmZpZy5zaAotCXNlZCAtaSAicyske1dPUktESVJ9KyR7U1RBR0lOR19JTkNESVJ9K2ciIHRjbENvbmZpZy5zaAotCXNlZCAtaSAicywtTCR7bGliZGlyfSwtTD0ke2xpYmRpcn0sZyIgdGNsQ29uZmlnLnNoCi0Jc2VkIC1pICJzLC1JJHtpbmNsdWRlZGlyfSwtST0ke2luY2x1ZGVkaXJ9LGciIHRjbENvbmZpZy5zaAotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KLQlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Ci0JaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtsaWJkaXJ9Ci0JY2QgLi4KLQlmb3IgZGlyIGluIGNvbXBhdCBnZW5lcmljIHVuaXg7IGRvCi0JCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIKLQkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vLi4vJGRpci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIvCi0JZG9uZQotfQotCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInRjbF9zeXNyb290X3ByZXByb2Nlc3MiCi10Y2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKLQlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Ci19Ci0KLVBBQ0tBR0VTID0rICJ0Y2wtbGliIgotRklMRVNfdGNsLWxpYiA9ICIke2xpYmRpcn0vbGlidGNsOC42LnNvLioiCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3RjbCR7VkVSfSAke2xpYmRpcn0vdGNsOC42ICR7bGliZGlyfS90Y2w4IgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vdGNsQ29uZmlnLnNoICR7bGliZGlyfS90Y2xvb0NvbmZpZy5zaCIKLQotIyBpc24ndCBnZXR0aW5nIHBpY2tlZCB1cCBieSBzaGxpYnMgY29kZQotUkRFUEVORFNfJHtQTn0gKz0gInRjbC1saWIiCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYmdjYyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0Jb2VfcnVubWFrZSB0Y2x0ZXN0Ci19Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JY3AgJHtCfS90Y2x0ZXN0ICR7RH0ke1BURVNUX1BBVEh9Ci0JY3AgLXIgJHtTfS8uLi9saWJyYXJ5ICR7RH0ke1BURVNUX1BBVEh9Ci0JY3AgLXIgJHtTfS8uLi90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQotfQotCi0jIEZpeCBzb21lIHBhdGhzIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBUY2wgZXh0ZW5zaW9ucwotQklOQ09ORklHX0dMT0IgPSAiKkNvbmZpZy5zaCIKLQotIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCi1TU1RBVEVfU0NBTl9GSUxFUyArPSAiKkNvbmZpZy5zaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkMGE3YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi42LmJiCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiVG9vbCBDb21tYW5kIExhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3RjbC5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImRldmVsL3RjbHRrIgorCisjIGh0dHA6Ly93d3cudGNsLnRrL3NvZnR3YXJlL3RjbHRrL2xpY2Vuc2UuaHRtbAorTElDRU5TRSA9ICJ0Y2wgJiBCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL2NvbXBhdC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL2xpYnJhcnkvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9tYWNvc3gvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi90ZXN0cy9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL3dpbi9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisiCisKK0RFUEVORFMgPSAidGNsLW5hdGl2ZSB6bGliIgorCitCQVNFX1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3RjbC8ke0JQTn0ke1BWfS1zcmMudGFyLmd6IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vdGNsLWFkZC1zb25hbWUucGF0Y2giCitTUkNfVVJJID0gIiR7QkFTRV9TUkNfVVJJfSBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfbm9uX25hdGl2ZV9idWlsZF9pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vX3BhY2thZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbHRlci1pbmNsdWRlZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNTE5M2FlYTgxMDc4MzlhNzlkZjhhYzcwOTU1MmVjYjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTI2NTQwOTc4MWU0YjNlZGNjNGVmODIyNTMzMDcxYjM0YzNkYzY3OTBiODkzOTYzODA5YjlmZTIyMWJlZmUwNyIKKworU1JDX1VSSV9jbGFzcy1uYXRpdmUgPSAiJHtCQVNFX1NSQ19VUkl9IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59JHtQVn0vdW5peCIKKworVkVSID0gIiR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdCBiaW5jb25maWcKKworREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10aHJlYWRzIC0tZGlzYWJsZS1ycGF0aCAtLWxpYmRpcj0ke2xpYmRpcn0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwljZCAke1N9CisJZ251LWNvbmZpZ2l6ZQorCWNkICR7Qn0KKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwllY2hvID4gJHtTfS8uLi9jb21wYXQvZml4c3RydG9kLmMKK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbCBpbnN0YWxsLXByaXZhdGUtaGVhZGVycworCWxuIC1zZiAuL3RjbHNoJHtWRVJ9ICR7RH0ke2JpbmRpcn0vdGNsc2gKKwlsbiAtc2YgdGNsc2g4LjYgJHtEfSR7YmluZGlyfS90Y2xzaCR7VkVSfQorCXNlZCAtaSAicystTCR7Qn0rLUwke1NUQUdJTkdfTElCRElSfStnIiB0Y2xDb25maWcuc2gKKwlzZWQgLWkgInMrJHtXT1JLRElSfSske1NUQUdJTkdfSU5DRElSfStnIiB0Y2xDb25maWcuc2gKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCWluc3RhbGwgLW0gMDc1NSB0Y2xDb25maWcuc2ggJHtEfSR7bGliZGlyfQorCWNkIC4uCisJZm9yIGRpciBpbiBjb21wYXQgZ2VuZXJpYyB1bml4OyBkbworCQlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9LyR7QlBOfSR7VkVSfS8kZGlyCisJCWluc3RhbGwgLW0gMDY0NCAke1N9Ly4uLyRkaXIvKi5oICR7RH0ke2luY2x1ZGVkaXJ9LyR7QlBOfSR7VkVSfS8kZGlyLworCWRvbmUKK30KKworU1lTUk9PVF9ESVJTICs9ICIke2JpbmRpcl9jcm9zc3NjcmlwdHN9IgorCitQQUNLQUdFUyA9KyAidGNsLWxpYiIKK0ZJTEVTX3RjbC1saWIgPSAiJHtsaWJkaXJ9L2xpYnRjbDguNi5zby4qIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90Y2wke1ZFUn0gJHtsaWJkaXJ9L3RjbDguNiAke2xpYmRpcn0vdGNsOCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3RjbENvbmZpZy5zaCAke2xpYmRpcn0vdGNsb29Db25maWcuc2giCisKKyMgaXNuJ3QgZ2V0dGluZyBwaWNrZWQgdXAgYnkgc2hsaWJzIGNvZGUKK1JERVBFTkRTXyR7UE59ICs9ICJ0Y2wtbGliIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJsaWJnY2MiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgdGNsdGVzdAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwICR7Qn0vdGNsdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yICR7U30vLi4vbGlicmFyeSAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yICR7U30vLi4vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworIyBGaXggc29tZSBwYXRocyB0aGF0IG1pZ2h0IGJlIHVzZWQgYnkgVGNsIGV4dGVuc2lvbnMKK0JJTkNPTkZJR19HTE9CID0gIipDb25maWcuc2giCisKKyMgRml4IHRoZSBwYXRoIGluIHNzdGF0ZQorU1NUQVRFX1NDQU5fRklMRVMgKz0gIipDb25maWcuc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDk3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5Ny5iYgppbmRleCBlYmExMTM5Li5lNzU3NGZiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDk3LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTcuYmIKQEAgLTksOCArOSw4IEBACiBDSEVDS19EQVRFID0gIkRlYyAxMCwgMjAxNSIKIAogREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgZmxleCIKLURFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgbGlidGlycGMgIgotREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICs9ICJmbGV4LW5hdGl2ZXNkayIKK0RFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgbGlidGlycGMiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIGZsZXgtbmF0aXZlc2RrIgogCiBNT0RfUFYgPSAiNDk3IgogUyA9ICIke1dPUktESVJ9L3RydW5rIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jCmluZGV4IDJhODg3NWYuLjM0YzlkYjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMKQEAgLTExLDcgKzExLDcgQEAKIExJQ0VOU0UgPSAiTEdQTHYyLjEiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKIAotU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMV19IgorU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKVsxXX0iCiAKIFNSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvJHtCUE59LyR7U0hSVF9WRVJ9LyR7QlB9LnRhci54eiIKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KQEAgLTM2LDE1ICszNiwxNCBAQAogICAgICAgICBpbnN0YWxsICR7Qn0vdmFwaWdlbi13cmFwcGVyICR7RH0ke2JpbmRpcn0vCiB9CiAKKyMgUHV0IHZhcGlnZW4gd3JhcHBlciBpbnRvIHRhcmdldCBzeXNyb290IHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgd2hlbiBidWlsZGluZworIyB2YXBpIGZpbGVzLgorU1lTUk9PVF9ESVJTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7YmluZGlyfSIKIAotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy10YXJnZXQgKz0gInZhcGlnZW5fc3lzcm9vdF9wcmVwcm9jZXNzIgotCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgdmFwaWdlbl9zeXNyb290X3ByZXByb2Nlc3MiCiB2YXBpZ2VuX3N5c3Jvb3RfcHJlcHJvY2VzcygpIHsKLSAgICAgICAgIyBQdXQgdmFwaWdlbiB3cmFwcGVyIGludG8gdGFyZ2V0IHN5c3Jvb3Qgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB3aGVuIGJ1aWxkaW5nIHZhcGkgZmlsZXMuCi0gICAgICAgIHN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcn0gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ci0KLSAgICAgICAgIyBBbHNvLCB0d2VhayB0aGUgdmFwaWdlbiBuYW1lIGluIHZhcGlnZW4gcGtnY29uZmlnIGZpbGUsIHNvIHRoYXQgaXQgcGlja3MgdXAgb3VyCi0gICAgICAgICMgd3JhcHBlci4KKyAgICAgICAgIyBUd2VhayB0aGUgdmFwaWdlbiBuYW1lIGluIHRoZSB2YXBpZ2VuIHBrZ2NvbmZpZyBmaWxlLCBzbyB0aGF0IGl0IHBpY2tzCisgICAgICAgICMgdXAgb3VyIHdyYXBwZXIuCiAgICAgICAgIHNlZCAtaSBcCiAgICAgICAgICAgIC1lICJzfHZhcGlnZW49Lip8dmFwaWdlbj0ke2JpbmRpcn0vdmFwaWdlbi13cmFwcGVyfCIgXAogICAgICAgICAgICAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L3BrZ2NvbmZpZy92YXBpZ2VuLSR7U0hSVF9WRVJ9LnBjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjMwLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjMwLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTRhZmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4zMC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1yZXF1aXJlICR7QlBOfS5pbmMKLQotU1JDX1VSSSArPSAiIGZpbGU6Ly8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2ggXAotICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXZhcGlnZW4ubTQtdXNlLVBLR19DT05GSUdfU1lTUk9PVF9ESVIucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiY2MyZWIyMzg0ZmMxMDAzOGI2NDM3NTNkNzM0YTVhNTEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjNhZGQ3OGU1YzZhNWU2ZGYwMTlkNGE4ODVjOWM3OTgxNGM5ZTBiOTU3NTE5ZWM4YTRmNGQ4MjZjNGU1ZGYyYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMzIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMzIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQwODZlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4zMi4xLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoIFwKKyAgICAgICAgICAgICBmaWxlOi8vMDAwMS12YXBpZ2VuLm00LXVzZS1QS0dfQ09ORklHX1NZU1JPT1RfRElSLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjc1NTg4MTc3MGJmZmFjMDIwYjVlYTVmNjI1ZmJlNTI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRkMGQ0N2U1NDhhMzRjZmIxZTRiMDQxNDlhY2QwODJhODY0MTRjNDkwNTdmZmI3OTkwMmViOWE1MDhhMTYxYTkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2djYzUtcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZ2NjNS1wb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmM4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2djYzUtcG9ydC5wYXRjaApAQCAtMCwwICsxLDY0IEBACitiYWNrcG9ydCBmaXggZnJvbSB1cHN0cmVhbSB0byBmaXggYnVpbGQgZXJyb3JzIHdpdGggZ2NjIDYKKworaHR0cDovL3ZhbGdyaW5kLjEwOTA4Lm43Lm5hYmJsZS5jb20vVmFsZ3JpbmQtcjE1NzczLWluLXRydW5rLWNvbmZpZ3VyZS1hYy1kcmQtdGVzdHMtc3RkLXRocmVhZC1jcHAtZHJkLXRlc3RzLXN0ZC10aHJlYWQyLWNwcC10ZDU2MTA5Lmh0bWwKKworLi4vLi4vLi4vdmFsZ3JpbmQtMy4xMS4wL2RyZC90ZXN0cy9zdGRfdGhyZWFkLmNwcDozMDozOiBlcnJvcjogJ19JbXBsX2Jhc2UnIGlzIG5vdCBhIG1lbWJlciBvZiAnc3RkOjp0aHJlYWQnCisgICBzdGQ6OnRocmVhZDo6X0ltcGxfYmFzZSogX190ID0gc3RhdGljX2Nhc3Q8c3RkOjp0aHJlYWQ6Ol9JbXBsX2Jhc2UqPihfX3ApOworICAgXn5+CisuLi8uLi8uLi92YWxncmluZC0zLjExLjAvZHJkL3Rlc3RzL3N0ZF90aHJlYWQuY3BwOjMwOjI4OiBlcnJvcjogJ19fdCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICBzdGQ6OnRocmVhZDo6X0ltcGxfYmFzZSogX190ID0gc3RhdGljX2Nhc3Q8c3RkOjp0aHJlYWQ6Ol9JbXBsX2Jhc2UqPihfX3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fgorLi4vLi4vLi4vdmFsZ3JpbmQtMy4xMS4wL2RyZC90ZXN0cy9zdGRfdGhyZWFkLmNwcDozMDo1OTogZXJyb3I6ICdfSW1wbF9iYXNlJyBpbiAnY2xhc3Mgc3RkOjp0aHJlYWQnIGRvZXMgbm90IG5hbWUgYSB0eXBlCisgICBzdGQ6OnRocmVhZDo6X0ltcGxfYmFzZSogX190ID0gc3RhdGljX2Nhc3Q8c3RkOjp0aHJlYWQ6Ol9JbXBsX2Jhc2UqPihfX3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBjb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2NvbmZpZ3VyZS5hYwkocmV2aXNpb24gMTU3NzIpCisrKysgYi9jb25maWd1cmUuYWMJKHJldmlzaW9uIDE1NzczKQorQEAgLTE2MCw3ICsxNjAsNyBAQAorICAgICAgaWNjLTFbWzMtOV1dLiopCisgCUFDX01TR19SRVNVTFQoW29rIChJQ0MgdmVyc2lvbiAke2djY192ZXJzaW9ufSldKQorIAk7OworLSAgICAgbm90Y2xhbmctW1szLTldXS4qfG5vdGNsYW5nLVtbMS05XVswLTldXSopCisrICAgICBub3RjbGFuZy1bWzMtOV1dfG5vdGNsYW5nLVtbMy05XV0uKnxub3RjbGFuZy1bWzEtOV1bMC05XV0qKQorIAlBQ19NU0dfUkVTVUxUKFtvayAoJHtnY2NfdmVyc2lvbn0pXSkKKyAJOzsKKyAgICAgIGNsYW5nLTIuOXxjbGFuZy1bWzMtOV1dLip8Y2xhbmctW1sxLTldWzAtOV1dKikKK0luZGV4OiBkcmQvdGVzdHMvc3RkX3RocmVhZDIuY3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9kcmQvdGVzdHMvc3RkX3RocmVhZDIuY3BwCShyZXZpc2lvbiAxNTc3MikKKysrKyBiL2RyZC90ZXN0cy9zdGRfdGhyZWFkMi5jcHAJKHJldmlzaW9uIDE1NzczKQorQEAgLTI2LDYgKzI2LDcgQEAKKyAgIHJldHVybiAwOworIH0KKyAKKysjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gLTAgPCA2CisgLy8KKyAvLyBGcm9tIGxpYnN0ZGMrKy12My9zcmMvYysrMTEvdGhyZWFkLmNjCisgLy8KK0BAIC03MCwzICs3MSw0IEBACisgICAgIH0KKyAgIH0KKyB9CisrI2VuZGlmCitJbmRleDogZHJkL3Rlc3RzL3N0ZF90aHJlYWQuY3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9kcmQvdGVzdHMvc3RkX3RocmVhZC5jcHAJKHJldmlzaW9uIDE1NzcyKQorKysrIGIvZHJkL3Rlc3RzL3N0ZF90aHJlYWQuY3BwCShyZXZpc2lvbiAxNTc3MykKK0BAIC0yMSw2ICsyMSw3IEBACisgICByZXR1cm4gMDsKKyB9CisgCisrI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fIC0wIDwgNgorIC8vCisgLy8gRnJvbSBsaWJzdGRjKystdjMvc3JjL2MrKzExL3RocmVhZC5jYworIC8vCitAQCAtNjUsMyArNjYsNCBAQAorICAgICB9CisgICB9CisgfQorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjExLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTEuMC5iYgppbmRleCA1MWM4OGJmLi40MmZkMjdmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTEuMC5iYgpAQCAtMjMsNiArMjMsNyBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1SZW1vdmUtdGVzdHMtdGhhdC1mYWlsLXRvLWJ1aWxkLW9uLXNvbWUtUFBDMzItY29uZmlnLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3VzZS1hcHByb3ByaWF0ZS1tYXJjaC1tY3B1LW1mcHUtZm9yLUFSTS10ZXN0LWFwcHMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vYXZvaWQtbmVvbi1mb3ItdGFyZ2V0cy13aGljaC1kb24tdC1zdXBwb3J0LWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2djYzUtcG9ydC5wYXRjaCBcCiAiCiBTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYnVpbGQtZm9yLW11c2wtdGFyZ2V0cy5wYXRjaCBcCkBAIC0zNyw2ICszOCwxMCBAQAogQ09NUEFUSUJMRV9IT1NUX2FybXY1ID0gJ251bGwnCiBDT01QQVRJQkxFX0hPU1RfYXJtdjYgPSAnbnVsbCcKIAorIyB2YWxncmluZCBkb2Vzbid0IGxpa2UgbWlwcyBzb2Z0IGZsb2F0CitDT01QQVRJQkxFX0hPU1RfbWlwcyA9ICIke0BiYi51dGlscy5jb250YWlucygiVEFSR0VUX0ZQVSIsICJzb2Z0IiwgIm51bGwiLCAiLiotbGludXgiLCBkKX0iCitDT01QQVRJQkxFX0hPU1RfbWlwc2VsID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUQVJHRVRfRlBVIiwgInNvZnQiLCAibnVsbCIsICIuKi1saW51eCIsIGQpfSIKKwogaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKIAogRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRscyAtLXdpdGhvdXQtbXBpY2MiCkBAIC02OCw5ICs3Myw5IEBACiBSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHNlZCBwZXJsIHBlcmwtbW9kdWxlLWZpbGUtZ2xvYiIKIFJERVBFTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBnbGliYy11dGlscyIKIAotIyBPbmUgb2YgdGhlIHRlc3RzIGNvbnRhaW5zIGEgYm9ndXMgaW50ZXJwcmV0ZXIgcGF0aCBvbiBwdXJwb3NlLCBhbmQgUUEKLSMgY2hlY2sgY29tcGxhaW5zIGFib3V0IGl0Ci1JTlNBTkVfU0tJUF8ke1BOfS1wdGVzdCArPSAiZmlsZS1yZGVwcyIKKyMgT25lIG9mIHRoZSB0ZXN0cyBjb250YWlucyBhIGJvZ3VzIGludGVycHJldGVyIHBhdGggb24gcHVycG9zZS4KKyMgU2tpcCBmaWxlIGRlcGVuZGVuY3kgY2hlY2sKK1NLSVBfRklMRURFUFNfJHtQTn0tcHRlc3QgPSAnMScKIAogZG9fY29tcGlsZV9wdGVzdCgpIHsKICAgICBvZV9ydW5tYWtlIGNoZWNrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI4LmJiCmluZGV4IDcxZjg3M2YuLmFhYWViNmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI4LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI4LmJiCkBAIC0xMyw4ICsxMyw5IEBACiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmY5ODZiN2M5YTBlOWFjNjcyODE0NzY2OGU3NzZkNDA1NDY1Mjg0ZTEzYzc0ZDQxNDZjOWNiYzUxZmQ4YWFkMyIKIAogaW5oZXJpdCBhdXRvdG9vbHMKK1JERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ4c2x0LW5hdGl2ZSIKIAotIyB4bWx0byBuZWVkcyBnZXRvcHQveG1sbGludC94c2x0cHJvYy9iYXNoIGF0IHJ1bnRpbWUKKyMgeG1sdG8gbmVlZHMgZ2V0b3B0L3htbGxpbnQveHNsdHByb2MvYmFzaC90YWlsIGF0IHJ1bnRpbWUKIFJERVBFTkRTXyR7UE59ID0gImRvY2Jvb2steG1sLWR0ZDQgXAogICAgICAgICAgICAgICAgICAgZG9jYm9vay14c2wtc3R5bGVzaGVldHMgXAogICAgICAgICAgICAgICAgICAgdXRpbC1saW51eCBcCkBAIC0yMyw3ICsyNCw5IEBACiAiCiBSREVQRU5EU18ke1BOfV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCiAgICAgICAgICAgICAgICAgICBsaWJ4c2x0LWJpbiBcCisgICAgICAgICAgICAgICAgICBjb3JldXRpbHMgXAogIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfVEFJTD0ke2JpbmRpcn0vdGFpbCIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXNjaWlkb2MvYXNjaWlkb2NfOC42LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FzY2lpZG9jL2FzY2lpZG9jXzguNi45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDE0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FzY2lpZG9jL2FzY2lpZG9jXzguNi45LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiVG9vbCBmb3IgY3JlYXRpbmcgSFRNTCwgUERGLCBFUFVCLCBtYW4gcGFnZXMiCitERVNDUklQVElPTiA9ICJBc2NpaURvYyBpcyBhIHRleHQgZG9jdW1lbnQgZm9ybWF0IGZvciB3cml0aW5nIHNob3J0IGRvY3VtZW50cywgXAorYXJ0aWNsZXMsIGJvb2tzIGFuZCBVTklYIG1hbiBwYWdlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9hc2NpaWRvYy5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWVJJR0hUO21kNT0wMjlhZDU0MjhiYTVlZmEyMDE3NmIzOTYyMjJkNDA2OSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0LyR7QlBOfS8ke0JQTn0vJHtQVn0vJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImM1OTAxOGYxMDViZThkMDIyNzE0YjgyNmIwYmUxMzBhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4ZGI5ZDA1NjdjOGFiNjU3MGE2ZWZmN2ZmZGY4NGVhZGQ5MWYyZGZjMGE5MmEyZDAxMDVkMzIzY2FiNGUxZjAiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hc2NpaWRvYy9maWxlcy8iCisKK2luaGVyaXQgZGlzdHV0aWxzIGF1dG90b29scy1icm9rZW5zZXAKKworZXhwb3J0IERFU1RESVIgPSAiJHtEfSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbiIgCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworQ0xFQU5CUk9LRU4gPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWZpeC13aXRoLXdpdGhvdXQtc2VsaW51eC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWZpeC13aXRoLXdpdGhvdXQtc2VsaW51eC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5YWYxZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1maXgtd2l0aC13aXRob3V0LXNlbGludXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1Gcm9tIGMwMjM1NGFmN2YzZDk0MjZkYTMxNTAzYWJmYWU3MDk1MmM2OTlhOWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KLURhdGU6IEZyaSwgMTggTWFyIDIwMTYgMDM6MjM6MTEgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBmaXggd2l0aC93aXRob3V0IHNlbGludXgKLQotUHJvYmxlbToKLXdpdGhvdXQtc2VsaW51eCBkb2Vzbid0IHdvcmsgc2luY2UgV0lUSF9TRUxJTlVYIGlzIGFsd2F5cyBiZSBkZWZpbmVkIG5vCi1tYXR0ZXIgd2hpY2ggb3B0aW9uIGlzIGdpdmVuOiB3aXRoLXNlbGludXgsIHdpdGhvdXQtc2VsaW51eC4KLQotRml4OgotRGlzYWJsZSBzZWxpbnV4IHN1cHBvcnQgaWYgd2l0aG91dC1zZWxpbnV4IGlzIGdpdmVuOyBvdGhlcndpc2UgY2hlY2sKLWxpYnNlbGludXggdG8gZGV0ZXJtaW5lIGlmIHNlbGludXggc3VwcG9ydCBzaG91bGQgYmUgZW5hYmxlZC4KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2F0QHBhY2thZ2VzLmRlYmlhbi5vcmddCi0KLVNpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMTkgKysrKysrKysrKysrKysrLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA1YTQzNDE5Li44YzlkZTYyIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0yNDAsMTAgKzI0MCwyMSBAQCBBQ19BUkdfV0lUSChkYWVtb25fdXNlcm5hbWUsCi0gQUNfU1VCU1QoREFFTU9OX1VTRVJOQU1FKQotIAotIEFDX0FSR19XSVRIKHNlbGludXgsCi0tWyAtLXdpdGgtc2VsaW51eCAgICAgICBEZWZpbmUgdG8gcnVuIHdpdGggc2VsaW51eF0sCi0tQUNfREVGSU5FKFdJVEhfU0VMSU5VWCwgMSwgW0RlZmluZSBpZiB5b3UgYXJlIGJ1aWxkaW5nIHdpdGhfc2VsaW51eF0pLAotLSkKLS1BQ19DSEVDS19MSUIoc2VsaW51eCwgaXNfc2VsaW51eF9lbmFibGVkLCBTRUxJTlVYTElCPS1sc2VsaW51eCkKLStbIC0td2l0aC1zZWxpbnV4ICAgICAgIERlZmluZSB0byBydW4gd2l0aCBzZWxpbnV4IChkZWZhdWx0PWNoZWNrKV0sCi0rW10sCi0rW3dpdGhfc2VsaW51eD1jaGVja10pCi0rCi0raWYgdGVzdCAieCR3aXRoX3NlbGludXgiICE9IHhubzsgdGhlbgotKyAgQUNfQ0hFQ0tfTElCKFtzZWxpbnV4XSwgW2lzX3NlbGludXhfZW5hYmxlZF0sCi0rICAgIFtTRUxJTlVYTElCPS1sc2VsaW51eAotKyAgICAgQUNfREVGSU5FKFdJVEhfU0VMSU5VWCwgMSwgW0RlZmluZSBpZiB5b3UgYXJlIGJ1aWxkaW5nIHdpdGhfc2VsaW51eF0pCi0rICAgIF0sCi0rICAgIFtpZiB0ZXN0ICJ4JHdpdGhfc2VsaW51eCIgIT0geGNoZWNrOyB0aGVuCi0rICAgICAgIEFDX01TR19GQUlMVVJFKFstLXdpdGgtc2VsaW51eCBpcyBnaXZlbiwgYnV0IHRlc3QgZm9yIHNlbGludXggZmFpbGVkXSkKLSsgICAgIGZpCi0rICAgIF0KLSsgICkKLStmaQotIEFDX1NVQlNUKFNFTElOVVhMSUIpCi0gQUNfU1VCU1QoV0lUSF9TRUxJTlVYKQotIAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzA0NGY1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE4LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotU1VNTUFSWSA9ICJEZWxheWVkIGpvYiBleGVjdXRpb24gYW5kIGJhdGNoIHByb2Nlc3NpbmciCi1ERVNDUklQVElPTiA9ICJBdCBhbGxvd3MgZm9yIGNvbW1hbmRzIHRvIGJlIHJ1biBhdCBhIHBhcnRpY3VsYXIgdGltZS4gIEJhdGNoIHdpbGwgZXhlY3V0ZSBjb21tYW5kcyB3aGVuIFwKLXRoZSBzeXN0ZW0gbG9hZCBsZXZlbHMgZHJvcCB0byBhIHBhcnRpY3VsYXIgbGV2ZWwuIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCIKLURFUEVORFMgPSAiZmxleCBmbGV4LW5hdGl2ZSBcCi0gICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCi0KLVJERVBFTkRTXyR7UE59ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX0RFUFN9JywgJycsIGQpfSBcCi0iCi0KLVBBTV9ERVBTID0gImxpYnBhbSBsaWJwYW0tcnVudGltZSBwYW0tcGx1Z2luLWVudiBwYW0tcGx1Z2luLWxpbWl0cyIKLQotUkNPTkZMSUNUU18ke1BOfSA9ICJhdGQiCi1SUkVQTEFDRVNfJHtQTn0gPSAiYXRkIgotCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2F0L2F0XyR7UFZ9Lm9yaWcudGFyLmd6O3N1YmRpcj0ke0JQfSBcCi0gICAgZmlsZTovL2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaCBcCi0gICAgZmlsZTovL3Bvc2l4dG0uYyBcCi0gICAgZmlsZTovL3Bvc2l4dG0uaCBcCi0gICAgZmlsZTovL2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaCBcCi0gICAgZmlsZTovL2F0ZC5pbml0IFwKLSAgICBmaWxlOi8vYXRkLnNlcnZpY2UgXAotICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCi0gICAgZmlsZTovL21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2ggXAotICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LXdpdGgtd2l0aG91dC1zZWxpbnV4LnBhdGNoIFwKLSAgICAiCi0KLVBBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uY29uZi5wYXRjaCBcCi0gICAgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZjY3YTdhYWI1NTdjZDViNGExMzExMDc5YTA4YWNlYmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGJkNWM4Y2I4ZWRkNTNlZjQ2NzM2M2MzYWYwMzkxYzA4NzY5ZjFkYmJkNGQ1MDAyYzU5YTRjZDRjYWMxMWQ1MiIKLQotRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NFTkRNQUlMPS9iaW4vdHJ1ZSBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fdXNlcm5hbWU9cm9vdCBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fZ3JvdXBuYW1lPXJvb3QgXAotICAgICAgICAgICAgICAgICAtLXdpdGgtam9iZGlyPS92YXIvc3Bvb2wvYXQvam9icyBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1hdHNwb29sPS92YXIvc3Bvb2wvYXQvc3Bvb2wgXAotICAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfc2VjdXJpdHlfcGFtX2FwcGxfaD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd5ZXMnLCAnbm8nLCBkKX0gIgotCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgc3lzdGVtZCB1cGRhdGUtcmMuZAotCi1JTklUU0NSSVBUX05BTUUgPSAiYXRkIgotSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCi0KLVNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhdGQuc2VydmljZSIKLQotY29weV9zb3VyY2VzKCkgewotCWNwIC1mICR7V09SS0RJUn0vcG9zaXh0bS5bY2hdICR7U30KLX0KLWRvX3BhdGNoW3Bvc3RmdW5jc10gKz0gImNvcHlfc291cmNlcyIKLQotZG9faW5zdGFsbCAoKSB7Ci0Jb2VfcnVubWFrZSAtZSAiSVJPT1Q9JHtEfSIgaW5zdGFsbAotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKLQlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9hdGQuaW5pdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2F0ZAotCi0JIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcwotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hdGQuc2VydmljZQotCi0JaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCi0JCWluc3RhbGwgLUQgLW0gMDY0NCAke1dPUktESVJ9LyR7QlB9L3BhbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2F0ZAotCWZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4yMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NDU5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4yMC5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIkRlbGF5ZWQgam9iIGV4ZWN1dGlvbiBhbmQgYmF0Y2ggcHJvY2Vzc2luZyIKK0RFU0NSSVBUSU9OID0gIkF0IGFsbG93cyBmb3IgY29tbWFuZHMgdG8gYmUgcnVuIGF0IGEgcGFydGljdWxhciB0aW1lLiAgQmF0Y2ggd2lsbCBleGVjdXRlIGNvbW1hbmRzIHdoZW4gXAordGhlIHN5c3RlbSBsb2FkIGxldmVscyBkcm9wIHRvIGEgcGFydGljdWxhciBsZXZlbC4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IgorREVQRU5EUyA9ICJmbGV4IGZsZXgtbmF0aXZlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fREVQU30nLCAnJywgZCl9IFwKKyIKKworUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tZW52IHBhbS1wbHVnaW4tbGltaXRzIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImF0ZCIKK1JSRVBMQUNFU18ke1BOfSA9ICJhdGQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjA3MjhUMDQzNDQzWi9wb29sL21haW4vYS8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICBmaWxlOi8vZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vcG9zaXh0bS5jIFwKKyAgICBmaWxlOi8vcG9zaXh0bS5oIFwKKyAgICBmaWxlOi8vZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIFwKKyAgICBmaWxlOi8vYXRkLmluaXQgXAorICAgIGZpbGU6Ly9hdGQuc2VydmljZSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICBmaWxlOi8vbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaCBcCisgICAgIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vcGFtLmNvbmYucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImU3YmQ3Yjc4NWIyY2JiMTdlMTMzZDZiZGMwZmIwOTllIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA4NzE5MjNjYWI3MzA1MGI5OGFjZTAyMDY2NGViMmRkYzFlNjY5ZTQxNjZiNWFiYjY0ZDg2NGQwMmZjZWZhYjkiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYS9hdC8iCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9TRU5ETUFJTD0vYmluL3RydWUgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZGFlbW9uX3VzZXJuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZGFlbW9uX2dyb3VwbmFtZT1yb290IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWpvYmRpcj0vdmFyL3Nwb29sL2F0L2pvYnMgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtYXRzcG9vbD0vdmFyL3Nwb29sL2F0L3Nwb29sIFwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfaGVhZGVyX3NlY3VyaXR5X3BhbV9hcHBsX2g9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAneWVzJywgJ25vJywgZCl9ICIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHN5c3RlbWQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImF0ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYXRkLnNlcnZpY2UiCisKK2NvcHlfc291cmNlcygpIHsKKwljcCAtZiAke1dPUktESVJ9L3Bvc2l4dG0uW2NoXSAke1N9Cit9Citkb19wYXRjaFtwb3N0ZnVuY3NdICs9ICJjb3B5X3NvdXJjZXMiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgLWUgIklST09UPSR7RH0iIGluc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vYXRkLmluaXQJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hdGQKKworCSMgaW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vYXRkLnNlcnZpY2UKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDA2NDQgJHtXT1JLRElSfS8ke0JQfS9wYW0uY29uZiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9hdGQKKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZDEyY2EuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAiQXVnZWFzIGNvbmZpZ3VyYXRpb24gQVBJIgotSE9NRVBBR0UgPSAiaHR0cDovL2F1Z2Vhcy5uZXQvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvYXVnZWFzL3JlcG9ydC8xIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIgotCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5hdWdlYXMubmV0LyR7QlB9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3NlcGJ1aWxkZml4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICIKLQotREVQRU5EUyA9ICJyZWFkbGluZSBsaWJ4bWwyIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotUEFDS0FHRVMgPSsgIiR7UE59LWxlbnNlcyBsaWIke0JQTn0iCi0KLUZJTEVTXyR7UE59LWxlbnNlcyA9ICIke2RhdGFkaXJ9L2F1Z2Vhcy9sZW5zZXMiCi1GSUxFU19saWIke0JQTn0gPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30iCi0KLVJERVBFTkRTX2xpYiR7QlBOfSArPSAiJHtQTn0tbGVuc2VzIgotUlJFQ09NTUVORFNfbGliJHtCUE59ICs9ICIke1BOfSIKLQotTEVBRF9TT05BTUUgPSAibGliYXVnZWFzLnNvIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlybSAtZnIgJHtEfSR7ZGF0YWRpcn0vdmltCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTE5ODc2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKLQotbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAotd2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQotcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCi1jb3JldXRpbHMKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBsaWIvZ251bGliLm1rIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhdWdlYXMtMS4yLjAub3JpZy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCi0rKysgYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KLUBAIC00NjMsNyArNDYzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCi0gCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAotIAkgICAgZGFyd2luWzU2XSopIFwKLSAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAotLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAotKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCi0gCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCi0gCSAgICAqKSBcCi0gCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYmRiYWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1BZGQgbWlzc2luZyBHTF9HRU5FUkFURV9BUkdaX0ggY29uZGl0aW9uYWwKLQotLSBHTF9HRU5FUkFURV9BUkdaX0ggaXMgdXNlZCBpbiBnbnVsaWIvbGliL01ha2VmaWxlLmFtCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgotCi1JbmRleDogYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGF1Z2Vhcy0xLjAuMC5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIGF1Z2Vhcy0xLjAuMC9jb25maWd1cmUuYWMKLUBAIC01NSw2ICs1NSw4IEBAIEFDX0FSR19XSVRIKFtmYWlsbWFsbG9jXSwKLSAKLSBBTV9DT05ESVRJT05BTChbV0lUSF9GQUlMTUFMTE9DXSwgW3Rlc3QgeCR3aXRoX2ZhaWxtYWxsb2MgIT0geG5vXSkKLSAKLStBTV9DT05ESVRJT05BTChbR0xfR0VORVJBVEVfQVJHWl9IXSwgW3Rlc3QgLW4gIiRBUkdaX0giXSkKLSsKLSBkbmwgLS1lbmFibGUtZGVidWc9KHllc3xubykKLSBBQ19BUkdfRU5BQkxFKFtkZWJ1Z10sCi0gICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRlYnVnPW5vL3llc10sCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvc2VwYnVpbGRmaXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvc2VwYnVpbGRmaXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MmEzZWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotRW5zdXJlIHRoYXQgYnVpbGRzIGluIHNlcGFyYXRlIGJ1aWxkZGlycyAoJHtCfSAhPSAke1N9KSBjb3JyZWN0bHkgaW5zdGFsbCB0aGUgCi1sZW5zZXMgZmlsZXMuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1SUCAyMDEzLzQvMTcKLQotSW5kZXg6IGF1Z2Vhcy0xLjAuMC9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGF1Z2Vhcy0xLjAuMC5vcmlnL01ha2VmaWxlLmFtCTIwMTItMTEtMDIgMTU6MjA6MTEuMDAwMDAwMDAwICswMDAwCi0rKysgYXVnZWFzLTEuMC4wL01ha2VmaWxlLmFtCTIwMTMtMDQtMTcgMTA6MzY6MjQuMDMzNDAwMTI1ICswMDAwCi1AQCAtNSw4ICs1LDggQEAKLSBsZW5zZGlyPSQoZGF0YWRpcikvYXVnZWFzL2xlbnNlcy9kaXN0Ci0gbGVuc3Rlc3RkaXI9JChkYXRhZGlyKS9hdWdlYXMvbGVuc2VzL2Rpc3QvdGVzdHMKLSAKLS1kaXN0X2xlbnNfREFUQT0kKHdpbGRjYXJkIGxlbnNlcy8qLmF1ZykKLS1kaXN0X2xlbnN0ZXN0X0RBVEE9JCh3aWxkY2FyZCBsZW5zZXMvdGVzdHMvKi5hdWcpCi0rZGlzdF9sZW5zX0RBVEE9JCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL2xlbnNlcy8qLmF1ZykKLStkaXN0X2xlbnN0ZXN0X0RBVEE9JCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpbGVuc2VzL3Rlc3RzLyouYXVnKQotIAotIEVYVFJBX0RJU1Q9YXVnZWFzLnNwZWMgYnVpbGQvYXV4L21vdmUtaWYtY2hhbmdlIE1ha2VmaWxlLmFtIEhBQ0tJTkcKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2NGFkNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXNfMS40LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXJlcXVpcmUgYXVnZWFzLmluYwotCi1TUkNfVVJJW21kNXN1bV0gPSAiYTI1MzZhOWMzZDc0NGRjMDlkMjM0MjI4ZmU0YjBjOTMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU5ZmFlN2FjMjI5MDI5ZTYwYTg2OWEzYjg4YzYxNmNmZDUxY2YyZmJhMjg2Y2RmZTNhZjNhMDUyY2IzNWIzMCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9idWlsZC10ZXN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9idWlsZC10ZXN0cy5wYXRjaAppbmRleCA5MTM0MWVlLi5lNjM0NTdjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvYnVpbGQtdGVzdHMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0xMSwxNSArMTEsMTUgQEAKICAKICByZWNobyQoRVhFRVhUKToJCSQoU1VQUE9SVF9TUkMpcmVjaG8uYwogLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoU1VQUE9SVF9TUkMpcmVjaG8uYyAke0xJQlNfRk9SX0JVSUxEfQotKwlAJChDQykgJChDQ0ZMQUdTKSAtbyAkQCAkPAorKwlAJChDQykgJChDQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQ8CiAgCiAgemVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXplY2hvLmMKIC0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKFNVUFBPUlRfU1JDKXplY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KLSsJQCQoQ0MpICQoQ0NGTEFHUykgLW8gJEAgJDwKKysJQCQoQ0MpICQoQ0NGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkPAogIAogIHByaW50ZW52JChFWEVFWFQpOgkkKFNVUFBPUlRfU1JDKXByaW50ZW52LmMKIC0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKFNVUFBPUlRfU1JDKXByaW50ZW52LmMgJHtMSUJTX0ZPUl9CVUlMRH0KLSsJQCQoQ0MpICQoQ0NGTEFHUykgLW8gJEAgJDwKKysJQCQoQ0MpICQoQ0NGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkPAogIAogLXRlc3QgdGVzdHMgY2hlY2s6CWZvcmNlICQoUHJvZ3JhbSkgJChURVNUU19TVVBQT1JUKQogK3Rlc3QgdGVzdHMgY2hlY2s6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvc3RyaW5nLWZvcm1hdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9zdHJpbmctZm9ybWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTM5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvc3RyaW5nLWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitGaXggYSBzdHJpbmcgZm9ybWF0IHdhcm5pbmcgd2hlbiB1c2luZyBzZWN1cml0eSBmbGFnczoKKworfCAuLi9iYXNoLTMuMi40OC9wcmludF9jbWQuYzoxMTUyOjM6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICBjcHJpbnRmIChpbmRlbnRhdGlvbl9zdHJpbmcpOworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvcHJpbnRfY21kLmMgYi9wcmludF9jbWQuYworaW5kZXggZDFkZmQxYS4uOTU2ZGI1MyAxMDA2NDQKKy0tLSBhL3ByaW50X2NtZC5jCisrKysgYi9wcmludF9jbWQuYworQEAgLTExNDksNyArMTE0OSw3IEBAIGluZGVudCAoYW1vdW50KQorICAgZm9yIChpID0gMDsgYW1vdW50ID4gMDsgYW1vdW50LS0pCisgICAgIGluZGVudGF0aW9uX3N0cmluZ1tpKytdID0gJyAnOworICAgaW5kZW50YXRpb25fc3RyaW5nW2ldID0gJ1wwJzsKKy0gIGNwcmludGYgKGluZGVudGF0aW9uX3N0cmluZyk7CisrICBjcHJpbnRmICgiJXMiLCBpbmRlbnRhdGlvbl9zdHJpbmcpOworIH0KKyAKKyBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCmluZGV4IDkzY2EwMGIuLjFkMDg1MjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMKQEAgLTIsNyArMiw3IEBACiBIT01FUEFHRSA9ICJodHRwOi8vdGlzd3d3LmNhc2UuZWR1L3BocC9jaGV0L2Jhc2gvYmFzaHRvcC5odG1sIgogU0VDVElPTiA9ICJiYXNlL3NoZWxsIgogCi1ERVBFTkRTID0gIm5jdXJzZXMgYmlzb24tbmF0aXZlIgorREVQRU5EUyA9ICJuY3Vyc2VzIGJpc29uLW5hdGl2ZSB2aXJ0dWFsL2xpYmljb252IgogCiBpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBwdGVzdAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC8wMDAxLWhlbHAtZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLzAwMDEtaGVscC1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MDVjODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC8wMDAxLWhlbHAtZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGU1ODM3YTQyZjhmNDhhNmE3MjE4MDVmZjhmN2ZjZDMyODYxZDA5Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcj1DMz1BOT0yMERyYXN6aWs/PSA8YWRyYXN6aWtAdHljb2ludC5jb20+CitEYXRlOiBUdWUsIDI2IEp1bCAyMDE2IDEzOjA5OjQ3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGhlbHA6IGZpeCBwcmludGYoKSBmb3JtYXQgc2VjdXJpdHkgd2FybmluZworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCit8IC4uLy4uL2Jhc2gtNC4zLjMwL2J1aWx0aW5zLy4uLy4uL2Jhc2gtNC4zLjMwL2J1aWx0aW5zL2hlbHAuZGVmOiBJbiBmdW5jdGlvbiAnaGVscF9idWlsdGluJzoKK3wgLi4vLi4vYmFzaC00LjMuMzAvYnVpbHRpbnMvLi4vLi4vYmFzaC00LjMuMzAvYnVpbHRpbnMvaGVscC5kZWY6MTMwOjc6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICAgcHJpbnRmIChuZ2V0dGV4dCAoIlNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmQgYCIsICJTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkcyBgIiwgKGxpc3QtPm5leHQgPyAyIDogMSkpKTsKK3wgICAgICAgIF5+fn5+fgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworIGJ1aWx0aW5zL2hlbHAuZGVmIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbnMvaGVscC5kZWYgYi9idWlsdGlucy9oZWxwLmRlZgoraW5kZXggMTg5NGYxNy4uY2Y2MjRjNiAxMDA2NDQKKy0tLSBhL2J1aWx0aW5zL2hlbHAuZGVmCisrKysgYi9idWlsdGlucy9oZWxwLmRlZgorQEAgLTEyNyw3ICsxMjcsNyBAQCBoZWxwX2J1aWx0aW4gKGxpc3QpCisgCisgICBpZiAoZ2xvYl9wYXR0ZXJuX3AgKGxpc3QtPndvcmQtPndvcmQpKQorICAgICB7CistICAgICAgcHJpbnRmIChuZ2V0dGV4dCAoIlNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmQgYCIsICJTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkcyBgIiwgKGxpc3QtPm5leHQgPyAyIDogMSkpKTsKKysgICAgICBwcmludGYgKCIlcyIsIG5nZXR0ZXh0ICgiU2hlbGwgY29tbWFuZHMgbWF0Y2hpbmcga2V5d29yZCBgIiwgIlNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmRzIGAiLCAobGlzdC0+bmV4dCA/IDIgOiAxKSkpOworICAgICAgIHByaW50X3dvcmRfbGlzdCAobGlzdCwgIiwgIik7CisgICAgICAgcHJpbnRmICgiJ1xuXG4iKTsKKyAgICAgfQorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWJ1aWx0aW5zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZml4LXJ1bi1idWlsdGlucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmEzODgzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZml4LXJ1bi1idWlsdGlucy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDBjNGNhYjk1OTRjOTZjMmRjNDM1YThkOTcyNDYwNTgyNGJjYmY5MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxOSBBcHIgMjAxNiAwMjo1Nzo0NSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBmaXggcnVuLWJ1aWx0aW5zIGZhaWxlZAorCitGQUlMOiBydW4tYnVpbHRpbnMKKzEuIHJlZGlyZWN0IHRoZSBzdGRlcnIgb3V0cHV0IG9mIGNvbW1hbmQgZXhlYyB3aXRoIC1sIG9wdGlvbiBpbgorICAgYnVpbHRpbnMudGVzdHMgdG8gL2Rldi9udWxsCisyLiBlbnN1cmUgdGhlIHN5c3RlbSBjb250YWluIHRoZSBsb2NhbGVzICJlbl9VUy5VVEYtOCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9idWlsdGlucy50ZXN0cyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL2J1aWx0aW5zLnRlc3RzIGIvdGVzdHMvYnVpbHRpbnMudGVzdHMKK2luZGV4IDlkNzc1MjAuLjYzZjNhZjggMTAwNjQ0CistLS0gYS90ZXN0cy9idWlsdGlucy50ZXN0cworKysrIGIvdGVzdHMvYnVpbHRpbnMudGVzdHMKK0BAIC0xMDksNyArMTA5LDcgQEAgZXNhYworIAorICMgdGVzdCBvcHRpb25zIHRvIGV4ZWMKKyAoZXhlYyAtYSBzcGVjaWFsbmFtZSAke1RISVNfU0h9IC1jICdlY2hvICQwJyApCistKGV4ZWMgLWwgLWEgc3BlY2lhbG5hbWUgJHtUSElTX1NIfSAtYyAnZWNobyAkMCcgKQorKyhleGVjIC1sIC1hIHNwZWNpYWxuYW1lICR7VEhJU19TSH0gLWMgJ2VjaG8gJDAnICkgMj4gL2Rldi9udWxsCisgIyB0ZXN0IGBjbGVhbicgZW52aXJvbm1lbnQuICBpZiAvYmluL3NoIGlzIGJhc2gsIGFuZCB0aGUgc2NyaXB0IHZlcnNpb24gb2YKKyAjIHByaW50ZW52IGlzIHJ1biwgdGhlcmUgd2lsbCBiZSB2YXJpYWJsZXMgaW4gdGhlIGVudmlyb25tZW50IHRoYXQgYmFzaAorICMgc2V0cyBvbiBzdGFydHVwLiAgQWxzbyB0ZXN0IGNvZGUgdGhhdCBwcmVmaXhlcyBhcmd2WzBdIHdpdGggYSBkYXNoLgorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWludGwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWludGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhMzQwOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2ZpeC1ydW4taW50bC5wYXRjaApAQCAtMCwwICsxLDExMCBAQAorRnJvbSBhMDBkMzE2MWZkN2I2YTY5OGJkZDJlZDVmMGFjNWZhYWM1ODBlZTJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMyBBdWcgMjAxNiAyMzoxMzowMCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBmaXggcnVuLWludGwgZmFpbGVkCisKKzEuIEZpbHRlciBleHRyYSB3aGl0ZSBzcGFjZSBvZiBpbnRsLnJpZ2h0CisKKyAgIER1ZSB0byB0aGUgZXh0cmEgd2hpdGUgc3BhY2Ugb2YgaW50bC5yaWdodCwgd2hlbiB0aGUgcmVzdWx0IG9mCisgICBzdWItdGVzdCB1bmljb2RlMi5zdWIgb2YgaW50bC50ZXN0cyBjb21wYXJlZCB0byBpdCwgdGhlIHRlc3QKKyAgIGZhaWxlZC4KKworICAgU28gd2UgbmVlZCB0byBmaWx0ZXIgdGhlIGV4dHJhIHdoaXRlIHNwYWNlIG9mIGludGwucmlnaHQuCisKKyAgIEltcG9ydCB0aGlzIHBhdGNoIGZvciBpbnRsLnJpZ2h0IGZyb20gYmFzaCBkZXZlbCBicmFuY2g6CisKKwlodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9iYXNoLmdpdC9sb2cvP2g9ZGV2ZWwKKworICAgY29tbWl0IGlzOgorCisJODVlYzA3NzhmOWQ3NzhlMTgyMGZiOGMwZTNlOTk2ZjJkMTEwM2I0NQorCisyLiBDaGFuZ2UgaW50bC5yaWdodCBjb3JyZXNwb25kIHRvIHRoZSB1bmljb2RlMy5zdWIncyBvdXRwdXQKKworICAgSW4gc3ViLXRlc3QgdW5pY29kZTMuc3ViIG9mIGludGwudGVzdHMsIHRoZSBwYXlsb2FkIHZhbHVlIGlzOgorCisJcGF5bG9hZD0kJ1wwNjVcMjQ3XDEwMFwwNjNcMjMxXDA1M1wzMDZcMTIzXDA3MFwyMzdcMjQyXDM1MlwyNjMnCisKKyAgIEl0IHVzZWQgcXVvdGVkIHN0cmluZyBleHBhbnNpb24oZXNjYXBlZCBvY3RhbCkgdG8gYXNzaWduIEFTQ0lJCisgICBjaGFyYWN0ZXJzIHRvIHZhcmlhYmxlcy4gU28gd2hlbiB0aGUgdGVzdCBydW4gdGhlIGZvbGxvd2luZzoKKworCXByaW50ZiAlcSAiJHBheWxvYWQiCisKKyAgIEl0IHByb2R1Y2VkOgorCisJJCc1XDI0N0AzXDIzMStcMzA2UzhcMjM3XDI0MlwzNTJcMjYzJworCisgICBXaGVuIGNvbXBhcmVkIHRvIHRoZSBpbnRsLnJpZ2h0KGNvbnRhaW4gdGhlIGNvbnZlcnRlZCBjaGFyYWN0ZXIpLCBpdCBmYWlsZWQuCisKKyAgIEltcG9ydCBwYXJ0cyBvZiBwYXRjaCBmb3IgaW50bC5yaWdodCBmcm9tIGJhc2ggZGV2ZWwgYnJhbmNoOgorCisJaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvYmFzaC5naXQvbG9nLz9oPWRldmVsCisKKyAgIGNvbW1pdCBpczoKKworCTc0YjhjYmI0MTM5OGI0NDUzZDhiYTA0ZDBjZGQxYjI1ZjlkY2I5ZTMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvaW50bC5yaWdodCB8IDMwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL2ludGwucmlnaHQgYi90ZXN0cy9pbnRsLnJpZ2h0CitpbmRleCBhY2YxMDhhLi4xZWZkZmJlIDEwMDY0NAorLS0tIGEvdGVzdHMvaW50bC5yaWdodAorKysrIGIvdGVzdHMvaW50bC5yaWdodAorQEAgLTE4LDM0ICsxOCwzNCBAQCBhw6liCisgMS4wMDAwCisgMSwwMDAwCisgUGFzc2VkIGFsbCAxMzc4IFVuaWNvZGUgdGVzdHMKKy0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzMDMgMjc3IDAxMgorIDAwMDAwMDMKKy0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzMDMgMjc3IDAxMgorIDAwMDAwMDMKKy0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzMDMgMjc3IDAxMgorIDAwMDAwMDMKKy0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzMDMgMjc3IDAxMgorIDAwMDAwMDMKKy0wMDAwMDAwICAgMzU3IDI3NyAyNzcgMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzNTcgMjc3IDI3NyAwMTIKKyAwMDAwMDA0CistMDAwMDAwMCAgIDM1NyAyNzcgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKzAwMDAwMDAgMzU3IDI3NyAyNzcgMDEyCisgMDAwMDAwNAorLTAwMDAwMDAgICAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDAxMgorIDAwMDAwMDEKKy0wMDAwMDAwICAgMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAwMTIKKyAwMDAwMDAxCistMDAwMDAwMCAgIDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKzAwMDAwMDAgMDEyCisgMDAwMDAwMQorLTAwMDAwMDAgICAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDAxMgorIDAwMDAwMDEKKy0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzMDMgMjc3IDAxMgorIDAwMDAwMDMKKy0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzMDMgMjc3IDAxMgorIDAwMDAwMDMKKy0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzMDMgMjc3IDAxMgorIDAwMDAwMDMKKy0wMDAwMDAwICAgMTAxIDA0MCAzMDIgMjQzIDA0MCAzMDUgMjIyIDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAxMDEgMDQwIDMwMiAyNDMgMDQwIDMwNSAyMjIgMDEyCisgMDAwMDAxMAorIC4vdW5pY29kZTMuc3ViOiBsaW5lIDI6IDWnQDOZK8ZTOJ+i6rM6IGNvbW1hbmQgbm90IGZvdW5kCistNadAM5krxlM4n6LqsworKyQnNVwyNDdAM1wyMzErXDMwNlM4XDIzN1wyNDJcMzUyXDI2MycKKyArIDogJCc1XDI0N0AzXDIzMStcMzA2UzhcMjM3XDI0MlwzNTJcMjYzJworLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ydW4tcHRlc3QKaW5kZXggMjA5OGZhNC4uYzYxZmFiZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvcnVuLXB0ZXN0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdApAQCAtMSwyICsxLDIyIEBACiAjIS9iaW4vc2gKKworZW5fVVM9YGxvY2FsZSAtYSB8IGdyZXAgZW5fVVMqYAorZnJfRlI9YGxvY2FsZSAtYSB8IGdyZXAgZnJfRlIqYAorZGVfREU9YGxvY2FsZSAtYSB8IGdyZXAgZGVfREUqYAorCitpZiBbIC16ICIkZW5fVVMiIF0KK3RoZW4KKyAgICAgICAgZWNobyAiV2FybmluZzogVGhlIGVuX1VTKiBsb2NhbGVzIGlzIG5lZWRlZCB0byBydW4gdGhlIGludGwudGVzdHMsIHBsZWFzZSBhZGQgaXQuIgorZmkKKyAKK2lmIFsgLXogIiRmcl9GUiIgXQordGhlbgorICAgICAgICBlY2hvICJXYXJuaW5nOiBUaGUgZnJfRlIqIGxvY2FsZXMgaXMgbmVlZGVkIHRvIHJ1biB0aGUgaW50bC50ZXN0cywgcGxlYXNlIGFkZCBpdC4iCitmaQorIAoraWYgWyAteiAiJGRlX0RFIiBdCit0aGVuCisgICAgICAgIGVjaG8gIldhcm5pbmc6IFRoZSBkZV9ERSogbG9jYWxlcyBpcyBuZWVkZWQgdG8gcnVuIHRoZSBpbnRsLnRlc3RzLCBwbGVhc2UgYWRkIGl0LiIKK2ZpCisKIG1ha2UgLWsgVEhJU19TSD0vYmluL2Jhc2ggQlVJTERfRElSPWBwd2RgIHNyY2Rpcj1gcHdkYCAgcnVudGVzdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiCmluZGV4IGQ0MmIyOTIuLjZiNDAyOGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzMuMi40OC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF8zLjIuNDguYmIKQEAgLTIwLDYgKzIwLDcgQEAKICAgICAgICAgICAgZmlsZTovL3Rlc3Qtb3V0cHV0LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCiAgICAgICAgICAgIGZpbGU6Ly9kb250LWluY2x1ZGUtdGFyZ2V0LUNGTEFHUy1pbi1ob3N0LUxERkxBR1MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3RyaW5nLWZvcm1hdC5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICIzMzhkY2Y5NzVhOTM2NDBiYjNlYWE4NDNjYTQyZTNmOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgppbmRleCA0NDI2Y2YwLi43NjU1NjJmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjMuMzAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfNC4zLjMwLmJiCkBAIC0xNCwxMiArMTQsMjIgQEAKICAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzcgXAogICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM4O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzOCBcCiAgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzk7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM5IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0MDthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDQxO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0MSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wNDI7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDQyIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0MzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDMgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDQ0O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0NCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wNDU7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDQ1IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0NjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDYgXAogICAgICAgICAgICBmaWxlOi8vZXhlY3V0ZV9jbWQucGF0Y2g7c3RyaXBsZXZlbD0wIFwKICAgICAgICAgICAgZmlsZTovL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vYnVpbGQtdGVzdHMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vdGVzdC1vdXRwdXQucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZml4LXJ1bi1jb3Byb2MtcnVuLWhlcmVkb2MtcnVuLWV4ZWNzY3JpcHQtcnVuLXRlc3QtZi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZml4LXJ1bi1idWlsdGlucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWhlbHAtZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcnVuLWludGwucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImEyN2IzZWU5YmU4M2JkM2JhNDQ4YzBmZjUyYjI4NDQ3IgpAQCAtNDMsNSArNTMsMTkgQEAKIFNSQ19VUklbcGF0Y2gwMzguc2hhMjU2c3VtXSA9ICJhZGJlYWE1MDBjYTdhODI1MzVmMGU4OGQ2NzM2NjE5NjNmOGE1ZmNkYzdhZDYzNDQ1ZTY4YmY1YjQ5Nzg2MzY3IgogU1JDX1VSSVtwYXRjaDAzOS5tZDVzdW1dID0gImE0Nzc1NDg3YWJlOTU4NTM2NzUxYzhjZTUzY2RmNmY5IgogU1JDX1VSSVtwYXRjaDAzOS5zaGEyNTZzdW1dID0gImFiOTRkY2VkMjIxNTU0MTA5NzY5MWY2MGMzZWIzMjNjYzI4ZWYyNTQ5NDYzZTZhNTMzNGJiY2MxZTYxZTc0ZWMiCitTUkNfVVJJW3BhdGNoMDQwLm1kNXN1bV0gPSAiODBkMzU4N2M1ODg1NGUyMjYwNTVlZjA5OWZmZWI1MzUiCitTUkNfVVJJW3BhdGNoMDQwLnNoYTI1NnN1bV0gPSAiODRiYjM5NmI5MjYyOTkyY2E1NDI0ZmVhYjZlZDNlYzM5ZjE5M2VmNWM3NmRmZTRhNjJiNTUxYmQ4ZGQ5ZDc2YiIKK1NSQ19VUklbcGF0Y2gwNDEubWQ1c3VtXSA9ICIyMGJmNjNlZWY3Y2I0NDFjMGIxY2M0OWVmMzE5MWQwMyIKK1NSQ19VUklbcGF0Y2gwNDEuc2hhMjU2c3VtXSA9ICI0ZWM0MzI5NjZlNDE5ODUyNGE3ZTBjZDY4NWZlMjIyZTk2MDQzNzY5Yzk2MTNlNjY3NDJhYzQ3NWRiMTMyYzFhIgorU1JDX1VSSVtwYXRjaDA0Mi5tZDVzdW1dID0gIjcwNzkwNjQ2YWU2MWUyMDdjOTk1ZTQ0OTMxMzkwZTUwIgorU1JDX1VSSVtwYXRjaDA0Mi5zaGEyNTZzdW1dID0gImFjMjE5MzIyZGIyNzkxZGE4N2E0OTZlZTZlOGU1NTQ0ODQ2NDk0YmRhYWVhMjYyNjI3MGMyZjczYzEwNDQ5MTkiCitTUkNfVVJJW3BhdGNoMDQzLm1kNXN1bV0gPSAiODU1YTQ2OTU1Y2IyNTE1MzRlODBiNDczMmI3NDhlMzciCitTUkNfVVJJW3BhdGNoMDQzLnNoYTI1NnN1bV0gPSAiNDdhOGEzYzAwNWI0NmUyNTgyMWY0ZDhmNWNjYjA0YzFkNjUzYjFjODI5Y2I0MDU2OGQ1NTNkYzQ0ZjdhNjE4MCIKK1NSQ19VUklbcGF0Y2gwNDQubWQ1c3VtXSA9ICIyOTYyM2QzMjgyZmNiYjM3ZTExNTgxMzY1MDliNWJiOCIKK1NSQ19VUklbcGF0Y2gwNDQuc2hhMjU2c3VtXSA9ICI5MzM4ODIwNjMwYmY2NzM3M2I0NGQ4ZWE2ODQwOWY2NTE2MmVhN2E0N2I5YjI5YWNlMDZhMGFlZDEyNTY3Zjk5IgorU1JDX1VSSVtwYXRjaDA0NS5tZDVzdW1dID0gIjQ0NzMyNDRjYTVhYmZkNGIwMThlYTI2ZGM3M2U3NDEyIgorU1JDX1VSSVtwYXRjaDA0NS5zaGEyNTZzdW1dID0gImJhNmVjMzk3OGU5ZWFhMWViM2ZhYmRhZjNjYzZmZGY4YzQ2MDZhYzFjNTk5ZmFhZWI0ZTJkNjk4NjQxNTAwMjMiCitTUkNfVVJJW3BhdGNoMDQ2Lm1kNXN1bV0gPSAiN2U1ZmIwOTk5MWMwNzcwNzZiODZlMGUwNTc3OTg5MTMiCitTUkNfVVJJW3BhdGNoMDQ2LnNoYTI1NnN1bV0gPSAiYjNiNDU2YTZiNjkwY2QyOTMzNTNmMTdlMjJkOTJhMjAyYjNjOGJjZTU4N2FlNWYyNjY3YzIwYzlhYjZmNjg4ZiIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIKaW5kZXggZDYyNTBhOS4uNDU1MWMzMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2xfNC03LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sXzQtNy5iYgpAQCAtOSw3ICs5LDcgQEAKIAogREVQRU5EUyA9ICJnbGliLTIuMCIKIAotU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYi9ibGt0b29sL2Jsa3Rvb2xfNC5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9iLyR7QlBOfS8ke0JQTn1fNC5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaCBcCkBAIC0yMCw2ICsyMCw3IEBACiAKICMgZm9yIHRoaXMgcGFja2FnZSB3ZSdyZSBtb3N0bHkgaW50ZXJlc3RlZCBpbiB0cmFja2luZyBkZWJpYW4gcGF0Y2hlcywKICMgYW5kIG5vdCBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB3aGVyZSBhbGwgZGV2ZWxvcG1lbnQgaGFzIGVmZmVjdGl2ZWx5IHN0b3BwZWQKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYi9ibGt0b29sLyIKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPigoXGQrXC4qKSspLSgoXGQrXC4qKSspKVwuKGRpZmZ8ZGViaWFuXC50YXIpXC4oZ3p8eHopIgogCiBTID0gIiR7V09SS0RJUn0vJHtCUE59LTQub3JpZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2NfMjAxNTA3MTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWI1NDUxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2NfMjAxNTA3MTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jIFNpZ2guIFRoaXMgaXMgb25lIG9mIHRob3NlIHBsYWNlcyB3aGVyZSBldmVyeW9uZSBsaWNlbnNlcyBpdCBkaWZmZXJlbnRseS4gU29tZW9uZQotIyBldmVuIGFwcGx5IFVDQiB0byBpdCAoRnJlZS9OZXQvT3BlbkJTRCkuIFRoZSBtYWludGFpbmVyIHN0YXRlcyB0aGF0OgotIyAiSSd2ZSBmb3VuZCBubyByZWxpYWJsZSBzb3VyY2Ugd2hpY2ggc3RhdGVzIHRoYXQgYnlhY2MgbXVzdCBiZWFyIGEgVUNCIGNvcHlyaWdodC4iCi0jIFNldHRpbmcgdG8gUEQgYXMgdGhpcyBpcyB3aGF0IHRoZSB1cHN0cmVhbSBoYXMgaXQgYXMuCi0KLUxJQ0VOU0UgPSAiUEQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wYWNrYWdlL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWM1MmZiMmQxYjNmNzViM2I3NTM0OTI3ODA3YTFiNzE0IgotcmVxdWlyZSBieWFjYy5pbmMKLQotU1JDX1VSSVttZDVzdW1dID0gIjI3MDA0MDEwMzA1ODNjNGU5MTY5YWM3ZWE3ZDA4ZGU4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImMzNTRlNGVlMTRjNGExYmYxMWU1NWRkZTkyNzUwMTFkMTQ4ODdlZjA2NjQwNmEwODhiNmZhNTZjYWYwMzkyNDgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTYwNjA2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE2MDYwNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODEyOWQwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE2MDYwNi5iYgpAQCAtMCwwICsxLDEyIEBACisjIFNpZ2guIFRoaXMgaXMgb25lIG9mIHRob3NlIHBsYWNlcyB3aGVyZSBldmVyeW9uZSBsaWNlbnNlcyBpdCBkaWZmZXJlbnRseS4gU29tZW9uZQorIyBldmVuIGFwcGx5IFVDQiB0byBpdCAoRnJlZS9OZXQvT3BlbkJTRCkuIFRoZSBtYWludGFpbmVyIHN0YXRlcyB0aGF0OgorIyAiSSd2ZSBmb3VuZCBubyByZWxpYWJsZSBzb3VyY2Ugd2hpY2ggc3RhdGVzIHRoYXQgYnlhY2MgbXVzdCBiZWFyIGEgVUNCIGNvcHlyaWdodC4iCisjIFNldHRpbmcgdG8gUEQgYXMgdGhpcyBpcyB3aGF0IHRoZSB1cHN0cmVhbSBoYXMgaXQgYXMuCisKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wYWNrYWdlL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTc0NTMzZDMyZmZkMzhiY2E0Y2JmMWYxMzA1ZjhiYzYwIgorcmVxdWlyZSBieWFjYy5pbmMKKworCitTUkNfVVJJW21kNXN1bV0gPSAiZDUyN2M4MTFiMzYwZjA0YThjNWY1YTBhOTA2MjU5NjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2M4ZmRjZWQ0ODZjYjcwY2VjN2E3YzkzNThkZTgzNmJmZDI2N2QxOWQ2NDU2NzYwYmI0NzIxY2NmZWE1YWM5MSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvQ1ZFLTIwMTYtMzE4OS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvQ1ZFLTIwMTYtMzE4OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDBjM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9DVkUtMjAxNi0zMTg5LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK2h0dHBzOi8vYnVnemlsbGEuc3VzZS5jb20vYXR0YWNobWVudC5jZ2k/aWQ9NjgxMzM0CisKK0NWRTogQ1ZFLTIwMTYtMzE4OQorU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiBiemlwMi0xLjAuNi9iemlwMnJlY292ZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ6aXAyLTEuMC42Lm9yaWcvYnppcDJyZWNvdmVyLmMKKysrKyBiemlwMi0xLjAuNi9iemlwMnJlY292ZXIuYworQEAgLTQ1Nyw2ICs0NTcsNyBAQCBJbnQzMiBtYWluICggSW50MzIgYXJnYywgQ2hhcioqIGFyZ3YgKQorICAgICAgICAgICAgIGJzUHV0VUNoYXIgKCBic1dyLCAweDUwICk7IGJzUHV0VUNoYXIgKCBic1dyLCAweDkwICk7CisgICAgICAgICAgICAgYnNQdXRVSW50MzIgKCBic1dyLCBibG9ja0NSQyApOworICAgICAgICAgICAgIGJzQ2xvc2UgKCBic1dyICk7CisrICAgICAgICAgICAgb3V0RmlsZSA9IE5VTEw7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh3ckJsb2NrID49IHJiQ3RyKSBicmVhazsKKyAgICAgICAgICB3ckJsb2NrKys7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMl8xLjAuNi5iYgppbmRleCBmNzE3ZDg1Li5lZjdiYzg5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKQEAgLTEyLDcgKzEyLDkgQEAKICAgICAgICAgICAgZmlsZTovL2ZpeC1idW56aXAyLXF0LXJldHVybnMtMC1mb3ItY29ycnVwdC1hcmNoaXZlcy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWM7c3ViZGlyPSR7QlB9IFwKICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmFtO3N1YmRpcj0ke0JQfSBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMzE4OS5wYXRjaCBcCisgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjAwYjUxNmY0NzA0ZDRhN2NiNTBhMWQ5N2U2ZThlMTViIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyODQ4ZjM0ZmNkNWQ2Y2Y0N2RlZjAwNDYxZmNiNTI4YTA0ODRkOGVkZWY4MjA4ZDZkMmUyOTA5ZGM2MWQ5Y2QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMKaW5kZXggMWJkYzYxNy4uMzFhZGI3MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fdjIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvX3YyLmluYwpAQCAtMzksMyArMzksNSBAQAogCiBBTFRFUk5BVElWRV9QUklPUklUWVtybXRdID0gIjUwIgogQUxURVJOQVRJVkVfTElOS19OQU1FW3JtdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtQXBwbHktcGF0Y2gtdG8tZml4LUNWRS0yMDE2LTYzMTgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtQXBwbHktcGF0Y2gtdG8tZml4LUNWRS0yMDE2LTYzMTgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MWFjOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1BcHBseS1wYXRjaC10by1maXgtQ1ZFLTIwMTYtNjMxOC5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorRnJvbSA0N2U1ZGVjNTIxYWI2MjQzYzliMjQ5ZGQ2NWI5M2QyMzJkOTBkNmIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFuIERpdHRiZXJuZXIgPGphbkBkaXR0YmVybmVyLmluZm8+CitEYXRlOiBUaHUsIDI1IEF1ZyAyMDE2IDE3OjEzOjQ5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFwcGx5IHBhdGNoIHRvIGZpeCBDVkUtMjAxNi02MzE4CisKK1RoaXMgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2l0aCBhIHN0YWNrLWJhc2VkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuCitwYXJzaW5nIGxhcmdlIEdFQ09TIGZpZWxkLiBTZWUKK2h0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMTYtNjMxOCBhbmQKK2h0dHBzOi8vc2VjdXJpdHktdHJhY2tlci5kZWJpYW4ub3JnL3RyYWNrZXIvQ1ZFLTIwMTYtNjMxOCBmb3IgbW9yZQoraW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2l0aHViLmNvbS9jcmFja2xpYi9jcmFja2xpYi9jb21taXQvNDdlNWRlYzUyMWFiNjI0M2M5YjI0OWRkNjViOTNkMjMyZDkwZDZiMV0KK0NWRTogQ1ZFLTIwMTYtNjMxOAorU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9mYXNjaXN0LmMgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2Zhc2Npc3QuYyBiL2xpYi9mYXNjaXN0LmMKK2luZGV4IGE5OTY1MDkuLmQ0ZGViMTUgMTAwNjQ0CistLS0gYS9saWIvZmFzY2lzdC5jCisrKysgYi9saWIvZmFzY2lzdC5jCitAQCAtNTAyLDcgKzUwMiw3IEBAIEZhc2Npc3RHZWNvc1VzZXIoY2hhciAqcGFzc3dvcmQsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdlY29zKQorICAgICBjaGFyIGdidWZmZXJbU1RSSU5HU0laRV07CisgICAgIGNoYXIgdGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAgICAgY2hhciAqdXdvcmRzW1NUUklOR1NJWkVdOworLSAgICBjaGFyIGxvbmdidWZmZXJbU1RSSU5HU0laRSAqIDJdOworKyAgICBjaGFyIGxvbmdidWZmZXJbU1RSSU5HU0laRV07CisgCisgICAgIGlmIChnZWNvcyA9PSBOVUxMKQorIAlnZWNvcyA9ICIiOworQEAgLTU4MywzOCArNTgzLDQ3IEBAIEZhc2Npc3RHZWNvc1VzZXIoY2hhciAqcGFzc3dvcmQsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdlY29zKQorICAgICB7CisgCWZvciAoaSA9IDA7IGkgPCBqOyBpKyspCisgCXsKKy0JICAgIHN0cmNweShsb25nYnVmZmVyLCB1d29yZHNbaV0pOworLQkgICAgc3RyY2F0KGxvbmdidWZmZXIsIHV3b3Jkc1tqXSk7CistCistCSAgICBpZiAoR1RyeShsb25nYnVmZmVyLCBwYXNzd29yZCkpCisrCSAgICBpZiAoc3RybGVuKHV3b3Jkc1tpXSkgKyBzdHJsZW4odXdvcmRzW2pdKSA8IFNUUklOR1NJWkUpCisgCSAgICB7CistCQlyZXR1cm4gXygiaXQgaXMgZGVyaXZlZCBmcm9tIHlvdXIgcGFzc3dvcmQgZW50cnkiKTsKKy0JICAgIH0KKysJCXN0cmNweShsb25nYnVmZmVyLCB1d29yZHNbaV0pOworKwkJc3RyY2F0KGxvbmdidWZmZXIsIHV3b3Jkc1tqXSk7CisgCistCSAgICBzdHJjcHkobG9uZ2J1ZmZlciwgdXdvcmRzW2pdKTsKKy0JICAgIHN0cmNhdChsb25nYnVmZmVyLCB1d29yZHNbaV0pOworKwkJaWYgKEdUcnkobG9uZ2J1ZmZlciwgcGFzc3dvcmQpKQorKwkJeworKwkJICAgIHJldHVybiBfKCJpdCBpcyBkZXJpdmVkIGZyb20geW91ciBwYXNzd29yZCBlbnRyeSIpOworKwkJfQorIAorLQkgICAgaWYgKEdUcnkobG9uZ2J1ZmZlciwgcGFzc3dvcmQpKQorLQkgICAgeworLQkJcmV0dXJuIF8oIml0J3MgZGVyaXZlZCBmcm9tIHlvdXIgcGFzc3dvcmQgZW50cnkiKTsKKy0JICAgIH0KKysJCXN0cmNweShsb25nYnVmZmVyLCB1d29yZHNbal0pOworKwkJc3RyY2F0KGxvbmdidWZmZXIsIHV3b3Jkc1tpXSk7CisgCistCSAgICBsb25nYnVmZmVyWzBdID0gdXdvcmRzW2ldWzBdOworLQkgICAgbG9uZ2J1ZmZlclsxXSA9ICdcMCc7CistCSAgICBzdHJjYXQobG9uZ2J1ZmZlciwgdXdvcmRzW2pdKTsKKysJCWlmIChHVHJ5KGxvbmdidWZmZXIsIHBhc3N3b3JkKSkKKysJCXsKKysJCSAgIHJldHVybiBfKCJpdCdzIGRlcml2ZWQgZnJvbSB5b3VyIHBhc3N3b3JkIGVudHJ5Iik7CisrCQl9CisrCSAgICB9CisgCistCSAgICBpZiAoR1RyeShsb25nYnVmZmVyLCBwYXNzd29yZCkpCisrCSAgICBpZiAoc3RybGVuKHV3b3Jkc1tqXSkgPCBTVFJJTkdTSVpFIC0gMSkKKyAJICAgIHsKKy0JCXJldHVybiBfKCJpdCBpcyBkZXJpdmFibGUgZnJvbSB5b3VyIHBhc3N3b3JkIGVudHJ5Iik7CisrCQlsb25nYnVmZmVyWzBdID0gdXdvcmRzW2ldWzBdOworKwkJbG9uZ2J1ZmZlclsxXSA9ICdcMCc7CisrCQlzdHJjYXQobG9uZ2J1ZmZlciwgdXdvcmRzW2pdKTsKKysKKysJCWlmIChHVHJ5KGxvbmdidWZmZXIsIHBhc3N3b3JkKSkKKysJCXsKKysJCSAgICByZXR1cm4gXygiaXQgaXMgZGVyaXZhYmxlIGZyb20geW91ciBwYXNzd29yZCBlbnRyeSIpOworKwkJfQorIAkgICAgfQorIAorLQkgICAgbG9uZ2J1ZmZlclswXSA9IHV3b3Jkc1tqXVswXTsKKy0JICAgIGxvbmdidWZmZXJbMV0gPSAnXDAnOworLQkgICAgc3RyY2F0KGxvbmdidWZmZXIsIHV3b3Jkc1tpXSk7CistCistCSAgICBpZiAoR1RyeShsb25nYnVmZmVyLCBwYXNzd29yZCkpCisrCSAgICBpZiAoc3RybGVuKHV3b3Jkc1tpXSkgPCBTVFJJTkdTSVpFIC0gMSkKKyAJICAgIHsKKy0JCXJldHVybiBfKCJpdCdzIGRlcml2YWJsZSBmcm9tIHlvdXIgcGFzc3dvcmQgZW50cnkiKTsKKysJCWxvbmdidWZmZXJbMF0gPSB1d29yZHNbal1bMF07CisrCQlsb25nYnVmZmVyWzFdID0gJ1wwJzsKKysJCXN0cmNhdChsb25nYnVmZmVyLCB1d29yZHNbaV0pOworKworKwkJaWYgKEdUcnkobG9uZ2J1ZmZlciwgcGFzc3dvcmQpKQorKwkJeworKwkJICAgIHJldHVybiBfKCJpdCdzIGRlcml2YWJsZSBmcm9tIHlvdXIgcGFzc3dvcmQgZW50cnkiKTsKKysJCX0KKyAJICAgIH0KKyAJfQorICAgICB9CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiCmluZGV4IDNiZDNmOTMuLjgyOTk1MjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYl8yLjkuNS5iYgpAQCAtNCwxNSArNCwxMyBAQAogTElDRU5TRSA9ICJMR1BMdjIuMSsiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZTNlZGEwMWQ5ODE1ZjhkMjRhYWUyZGJkODliNjhiMDYiCiAKLURFUEVORFMgPSAiY3JhY2tsaWItbmF0aXZlIHpsaWIgcHl0aG9uIgotUkRFUEVORF8ke1BOfS1weXRob24gKz0gInB5dGhvbiIKK0RFUEVORFMgPSAiY3JhY2tsaWItbmF0aXZlIHpsaWIiCiAKLVBBQ0tBR0VTICs9ICIke1BOfS1weXRob24iCi0KLUVYVFJBX09FQ09ORiA9ICItLXdpdGgtcHl0aG9uIC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IgorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCiAKIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2NyYWNrbGliL2NyYWNrbGliLSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhY2tsaWIuYy1zdXBwb3J0LWRpY3Rpb25hcnktYnl0ZS1vcmRlci1kZXBlbmRlbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BcHBseS1wYXRjaC10by1maXgtQ1ZFLTIwMTYtNjMxOC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMzc2NzkwYTk1YzFmYjY0NWU1OWU2ZTk4MDNjNzg1ODIiCkBAIC0yMSwyNyArMTksMTEgQEAKIFVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NyYWNrbGliL2ZpbGVzL2NyYWNrbGliLyIKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9jcmFja2xpYi8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykvIgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB5dGhvbm5hdGl2ZSBweXRob24tZGlyCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CiAKIGRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKIAljcmVhdGUtY3JhY2tsaWItZGljdCAtbyAke0R9JHtkYXRhZGlyfS9jcmFja2xpYi9wd19kaWN0ICR7RH0ke2RhdGFkaXJ9L2NyYWNrbGliL2NyYWNrbGliLXNtYWxsCiB9CiAKLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCXNyY19kaXI9IiR7RH0ke2Jhc2VfbGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCi0Jcm0gLWYgJHNyY19kaXIvdGVzdF9jcmFja2xpYi5weSoKLQotCWlmIFsgIiR7YmFzZV9saWJkaXJ9IiAhPSAiJHtsaWJkaXJ9IiBdIDsgdGhlbgotCSAgICMgTW92ZSBweXRob24gZmlsZXMgZnJvbSAke2Jhc2VfbGliZGlyfSB0byAke2xpYmRpcn0gc2luY2UgdXNlZCAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfQotCSAgIGluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCi0JICAgbXYgJHNyY19kaXIvKiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KLQkgICBybSAtZnIgJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0KLQlmaQotfQotCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCiAKLUZJTEVTXyR7UE59LXB5dGhvbiA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9jcmFja2xpYi5weSogXAotCSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi4qIgotCi1GSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi5hIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaAppbmRleCA2NzU4NzJjLi42YzkyODE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaApAQCAtNCwxNiArNCwxOSBAQAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKIFNpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgotLS0tIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQub3JpZwkyMDEwLTEyLTE2IDE2OjU5OjAyLjAwMDAwMDAwMCArMDgwMAotKysrIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQJMjAxMS0wNy0yMCAwOTo0NzoxNi4wODA4MTkyMDMgKzA4MDAKLUBAIC00LDcgKzQsNyBAQAorSW5kZXg6IGNyb25pZS0xLjUuMS9wYW0vY3JvbmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcm9uaWUtMS41LjEub3JpZy9wYW0vY3JvbmQKKysrKyBjcm9uaWUtMS41LjEvcGFtL2Nyb25kCitAQCAtNCw4ICs0LDggQEAKICAjCi0gIyBObyBQQU0gYXV0aGVudGljYXRpb24gY2FsbGVkLCBhdXRoIG1vZHVsZXMgbm90IG5lZWRlZAorICMgQWx0aG91Z2ggbm8gUEFNIGF1dGhlbnRpY2F0aW9uIGlzIGNhbGxlZCwgYXV0aCBtb2R1bGVzCisgIyBhcmUgdXNlZCBmb3IgY3JlZGVudGlhbCBzZXR0aW5nCistYXV0aCAgICAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKKythdXRoICAgICAgIGluY2x1ZGUgICAgY29tbW9uLWF1dGgKICBhY2NvdW50ICAgIHJlcXVpcmVkICAgcGFtX2FjY2Vzcy5zbwogLWFjY291bnQgICAgaW5jbHVkZSAgICBwYXNzd29yZC1hdXRoCiArYWNjb3VudCAgICBpbmNsdWRlICAgIGNvbW1vbi1hY2NvdW50CiAgc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9sb2dpbnVpZC5zbwogLXNlc3Npb24gICAgaW5jbHVkZSAgICBwYXNzd29yZC1hdXRoCi0tYXV0aCAgICAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKICtzZXNzaW9uICAgIGluY2x1ZGUgICAgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKLSthdXRoICAgICAgIGluY2x1ZGUgICAgY29tbW9uLWF1dGgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3NTAxYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1TVU1NQVJZID0gIkNyb24gZGFlbW9uIGZvciBleGVjdXRpbmcgcHJvZ3JhbXMgYXQgc2V0IHRpbWVzIgotREVTQ1JJUFRJT04gPSAiQ3JvbmllIGNvbnRhaW5zIHRoZSBzdGFuZGFyZCBVTklYIGRhZW1vbiBjcm9uZCB0aGF0IHJ1bnMgXAotc3BlY2lmaWVkIHByb2dyYW1zIGF0IHNjaGVkdWxlZCB0aW1lcyBhbmQgcmVsYXRlZCB0b29scy4gSXQgaXMgYmFzZWQgb24gdGhlIFwKLW9yaWdpbmFsIGNyb24gYW5kIGhhcyBzZWN1cml0eSBhbmQgY29uZmlndXJhdGlvbiBlbmhhbmNlbWVudHMgbGlrZSB0aGUgXAotYWJpbGl0eSB0byB1c2UgcGFtIGFuZCBTRUxpbnV4LiIKLUhPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9jcm9uaWUvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20iCi0KLSMgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtIExpY2Vuc2UKLUxJQ0VOU0UgPSAiSVNDICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGQyYTU5MjE3MDc2MGUxMzg2Yzc2OWUxMDQzYjM3MjIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Nyb24uYztlbmRsaW5lPTIwO21kNT1iNDI1YzMzNDI2NTAyNjE3NzEyODM1M2ExNDI2MzNiNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcG9wZW4uYztiZWdpbmxpbmU9MztlbmRsaW5lPTMxO21kNT1lZGQ1MDc0MmQ4ZGVmNzEyZTk0NzJkYmEzNTM2NjhhOSIKLQotU0VDVElPTiA9ICJ1dGlscyIKLQotU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvYy9yL2Nyb25pZS9jcm9uaWUtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2Nyb25kLmluaXQgXAotICAgICAgICAgICBmaWxlOi8vY3JvbnRhYiBcCi0gICAgICAgICAgIGZpbGU6Ly9jcm9uZC5zZXJ2aWNlIFwKLSAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IgotCi1QQU1fU1JDX1VSSSA9ICJmaWxlOi8vY3JvbmRfcGFtX2NvbmZpZy5wYXRjaCIKLVBBTV9ERVBTID0gImxpYnBhbSBsaWJwYW0tcnVudGltZSBwYW0tcGx1Z2luLWFjY2VzcyBwYW0tcGx1Z2luLWxvZ2ludWlkIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWRiNzVlMTg4NGQ4M2E0NWUwMDJkMTQ1YzZjNTRkNDUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWNmMGUzZjRmNTA0MmE5YzA5NDEzZDYyYzhlMGMwNTVlMTI0MDFmNzBiMTEyNDY1ZjBmODFmMmM4NGViZmIzZiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCi0KLVBBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCi0KLVBBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0td2l0aC1hdWRpdCwtLXdpdGhvdXQtYXVkaXQsYXVkaXQsIgotUEFDS0FHRUNPTkZJR1twYW1dID0gIi0td2l0aC1wYW0sLS13aXRob3V0LXBhbSxsaWJwYW0sJHtQQU1fREVQU30iCi0KLUlOSVRTQ1JJUFRfTkFNRSA9ICJjcm9uZCIKLUlOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDkwIDIgMyA0IDUgLiBzdG9wIDYwIDAgMSA2IC4iCi0KLVVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCi1HUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBjcm9udGFiIgotCi1TWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiY3JvbmQuc2VydmljZSIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnLwotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLwotCWluc3RhbGwgLW0gMDY0NCAke1N9L2Nyb25kLnN5c2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvY3JvbmQKLQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9uZC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jcm9uZAotCi0JIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcwotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9jcm9uZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0Jc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAotCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCi0JICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Nyb25kLnNlcnZpY2UKLQotCSMgYmVsb3cgYXJlIG5lY2Vzc2FyeSBmb3IgYSBjb21wbGV0ZSBjcm9uIGVudmlyb25tZW50Ci0JaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCi0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY3JvbnRhYiAke0R9JHtzeXNjb25mZGlyfS8KLQlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmQKLQlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmhvdXJseQotCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKLQlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLndlZWtseQotCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ubW9udGhseQotCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGVueQotCi0JIyBiZWxvdyBzZXR0aW5nIGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBub3JtYWwgdXNlciB1c2luZyBjcm9udGFiCi0KLQkjIHNldGdpZCBmb3IgY3JvbnRhYiBiaW5hcnkKLQljaG93biByb290OmNyb250YWIgJHtEfSR7YmluZGlyfS9jcm9udGFiCi0JY2htb2QgMjc1NSAke0R9JHtiaW5kaXJ9L2Nyb250YWIKLQotCSMgYWxsb3cgJ2Nyb250YWInIGdyb3VwIHdyaXRlIHRvIC92YXIvc3Bvb2wvY3JvbgotCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCi0JY2htb2QgNzcwICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KLQotCWNobW9kIDYwMCAke0R9JHtzeXNjb25mZGlyfS9jcm9udGFiCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb24qIgotQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb250YWIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliMmJiNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMS5iYgpAQCAtMCwwICsxLDgxIEBACitTVU1NQVJZID0gIkNyb24gZGFlbW9uIGZvciBleGVjdXRpbmcgcHJvZ3JhbXMgYXQgc2V0IHRpbWVzIgorREVTQ1JJUFRJT04gPSAiQ3JvbmllIGNvbnRhaW5zIHRoZSBzdGFuZGFyZCBVTklYIGRhZW1vbiBjcm9uZCB0aGF0IHJ1bnMgXAorc3BlY2lmaWVkIHByb2dyYW1zIGF0IHNjaGVkdWxlZCB0aW1lcyBhbmQgcmVsYXRlZCB0b29scy4gSXQgaXMgYmFzZWQgb24gdGhlIFwKK29yaWdpbmFsIGNyb24gYW5kIGhhcyBzZWN1cml0eSBhbmQgY29uZmlndXJhdGlvbiBlbmhhbmNlbWVudHMgbGlrZSB0aGUgXAorYWJpbGl0eSB0byB1c2UgcGFtIGFuZCBTRUxpbnV4LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9jcm9uaWUvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20iCisKKyMgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtIExpY2Vuc2UKK0xJQ0VOU0UgPSAiSVNDICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGQyYTU5MjE3MDc2MGUxMzg2Yzc2OWUxMDQzYjM3MjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Nyb24uYztlbmRsaW5lPTIwO21kNT1iNDI1YzMzNDI2NTAyNjE3NzEyODM1M2ExNDI2MzNiNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcG9wZW4uYztiZWdpbmxpbmU9MztlbmRsaW5lPTMxO21kNT1lZGQ1MDc0MmQ4ZGVmNzEyZTk0NzJkYmEzNTM2NjhhOSIKKworU0VDVElPTiA9ICJ1dGlscyIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvYy9yL2Nyb25pZS9jcm9uaWUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vY3JvbnRhYiBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9uZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vY3JvbmRfcGFtX2NvbmZpZy5wYXRjaCIKK1BBTV9ERVBTID0gImxpYnBhbSBsaWJwYW0tcnVudGltZSBwYW0tcGx1Z2luLWFjY2VzcyBwYW0tcGx1Z2luLWxvZ2ludWlkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTEwZTZlZmZjYzAzMjk5OGIwYTQ5ZmJkNDYzMjJlMTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmM3MzY2NjEwMmE2YjVkMzVlMmVhZjFiZDA2OTI1ZjJkNGIwY2VmOGQzMzIzYzM3Mjg2ZGRhMzA4OWE4NTMzOCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0td2l0aC1hdWRpdCwtLXdpdGhvdXQtYXVkaXQsYXVkaXQsIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0td2l0aC1wYW0sLS13aXRob3V0LXBhbSxsaWJwYW0sJHtQQU1fREVQU30iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJjcm9uZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDkwIDIgMyA0IDUgLiBzdG9wIDYwIDAgMSA2IC4iCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBjcm9udGFiIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiY3JvbmQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L2Nyb25kLnN5c2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvY3JvbmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9uZC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jcm9uZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9jcm9uZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Nyb25kLnNlcnZpY2UKKworCSMgYmVsb3cgYXJlIG5lY2Vzc2FyeSBmb3IgYSBjb21wbGV0ZSBjcm9uIGVudmlyb25tZW50CisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY3JvbnRhYiAke0R9JHtzeXNjb25mZGlyfS8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmQKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmhvdXJseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLndlZWtseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ubW9udGhseQorCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGVueQorCisJIyBiZWxvdyBzZXR0aW5nIGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBub3JtYWwgdXNlciB1c2luZyBjcm9udGFiCisKKwkjIHNldGdpZCBmb3IgY3JvbnRhYiBiaW5hcnkKKwljaG93biByb290OmNyb250YWIgJHtEfSR7YmluZGlyfS9jcm9udGFiCisJY2htb2QgMjc1NSAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKworCSMgYWxsb3cgJ2Nyb250YWInIGdyb3VwIHdyaXRlIHRvIC92YXIvc3Bvb2wvY3JvbgorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCisJY2htb2QgNzcwICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKworCWNobW9kIDYwMCAke0R9JHtzeXNjb25mZGlyfS9jcm9udGFiCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb24qIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb250YWIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMKaW5kZXggNGIyZDIxNC4uMDJiNjM1OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYwpAQCAtMywxMyArMywxMyBAQAogTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiIKIERFUEVORFMgPSAiZ251dGxzIGxpYnBuZyBqcGVnIGRidXMgZGJ1cy1nbGliIHpsaWIgbGlidXNiIgogCi1TUkNfVVJJID0gImh0dHBzOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLyR7UFZ9LyR7QlB9LXNvdXJjZS50YXIuYnoyIFwKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FwcGxlL2N1cHMvcmVsZWFzZXMvZG93bmxvYWQvcmVsZWFzZS0ke1BWfS8ke0JQfS1zb3VyY2UudGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRvbi10LXRyeS10by1ydW4tZ2VuZXJhdGVkLWJpbmFyaWVzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2N1cHNfc2VydmVyYmluLnBhdGNoIFwKIAkgICIKIAotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUucGhwIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9jdXBzL3JlbGVhc2VzIgogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiY3Vwcy0oP1A8cHZlcj5cZCtcLlxkKyhcLlxkKyk/KS1zb3VyY2UudGFyIgogCiBMRUFEX1NPTkFNRSA9ICJsaWJjdXBzZHJpdmVyLnNvIgpAQCAtNDQsNiArNDQsNyBAQAogICAgICAgICAgICAgICAgLS13aXRob3V0LXBlcmwgXAogICAgICAgICAgICAgICAgLS13aXRob3V0LXB5dGhvbiBcCiAgICAgICAgICAgICAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgICAgICAgICAgICBEU09GTEFHUz0nJHtMREZMQUdTfScgXAogICAgICAgICAgICAgICAgIgogCiBFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4xLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZjIxMWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4xLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXJlcXVpcmUgY3Vwcy5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTZjNWEzNTA1OTZmYmEwMjc1NGJkOTZlYjZkZjNhZmQwIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNjJiOGZhZmQ1OTBlNzVmNzIzMTY5MTU3OTBiMDg1MGEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzZhNzBkNDM1ODRhZWEyNjE3ZGE5MTRiOTMzMWUyMzM0MWMzNTAxYTgyNTRjNGQyZWFlOWMxMWVjMDFmZDRkMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhYjgwNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMS40LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBjdXBzLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NmM1YTM1MDU5NmZiYTAyNzU0YmQ5NmViNmRmM2FmZDAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZjliZjZlM2I5YzIwYTM1MTliNGRjNDA5NjY2ZDZlNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YjE0ZmQ4MzMxODBhYzUyOWViZWJlYTc2NmEwOTA5NGMyNTY4YmY4NDI2ZTIxOWNiM2ExNzE1MzA0ZWY3MjhkIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAppbmRleCBjYzA1ZDFkLi5mODYzOGJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMTAsNyArMTAsNyBAQAogfCBjb25maWd1cmUuYWM6OTA6IHRoZSB0b3AgbGV2ZWwKIHwgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNS8wNAogCiBJbmRleDogZGlmZnV0aWxzLTIuOC4xL200L3ByZXJlcS5tNApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2ZpeF9nY2M2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2ZpeF9nY2M2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MTUyODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZml4X2djYzYucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRml4ZXMgdG8gYWxsb3cgZGlmZnV0aWxzIHRvIGJ1aWxkIHdpdGggZ2NjIHY2LgorCitSUAorMjAxNi81LzI1CisKK0luZGV4OiBkaWZmdXRpbHMtMi44LjEvbGliL3Bvc2l4L3JlZ2V4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaWZmdXRpbHMtMi44LjEub3JpZy9saWIvcG9zaXgvcmVnZXguaAorKysrIGRpZmZ1dGlscy0yLjguMS9saWIvcG9zaXgvcmVnZXguaAorQEAgLTUyOSw3ICs1MjksOSBAQCBleHRlcm4gaW50IHJlX2V4ZWMgX1JFX0FSR1MgKChjb25zdCBjaGFyCisgLyogRm9yIG5vdyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lIF9fcmVzdHJpY3RfYXJyIHRvIGV4cGFuZCB0byBub3RoaW5nLgorICAgIElkZWFsbHkgd2Ugd291bGQgaGF2ZSBhIHRlc3QgZm9yIHRoZSBjb21waWxlciB3aGljaCBhbGxvd3MgZGVmaW5pbmcKKyAgICBpdCB0byByZXN0cmljdC4gICovCisrI2lmbmRlZiBfX3Jlc3RyaWN0X2FycgorICNkZWZpbmUgX19yZXN0cmljdF9hcnIKKysjZW5kaWYKKyAKKyAvKiBQT1NJWCBjb21wYXRpYmlsaXR5LiAgKi8KKyBleHRlcm4gaW50IHJlZ2NvbXAgX1JFX0FSR1MgKChyZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKK0luZGV4OiBkaWZmdXRpbHMtMi44LjEvc3JjL2RpZmYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRpZmZ1dGlscy0yLjguMS5vcmlnL3NyYy9kaWZmLmMKKysrKyBkaWZmdXRpbHMtMi44LjEvc3JjL2RpZmYuYworQEAgLTcxLDYgKzcxLDcgQEAgc3RhdGljIHZvaWQgdXNhZ2UgKHZvaWQpOworIHN0YXRpYyBib29sIHJlY3Vyc2l2ZTsKKyAKKyAvKiBJbiBjb250ZXh0IGRpZmZzLCBzaG93IHByZXZpb3VzIGxpbmVzIHRoYXQgbWF0Y2ggdGhlc2UgcmVnZXhwcy4gICovCisrc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIGZ1bmN0aW9uX3JlZ2V4cDsKKyBzdGF0aWMgc3RydWN0IHJlZ2V4cF9saXN0IGZ1bmN0aW9uX3JlZ2V4cF9saXN0OworIAorIC8qIElnbm9yZSBjaGFuZ2VzIGFmZmVjdGluZyBvbmx5IGxpbmVzIHRoYXQgbWF0Y2ggdGhlc2UgcmVnZXhwcy4gICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy40LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjQvcnVuLXB0ZXN0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuNC9ydW4tcHRlc3QKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYgppbmRleCBiZjQyNWJiLi5mZTU2ZjljIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMi44LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzIuOC4xLmJiCkBAIC02LDcgKzYsOCBAQAogUFIgPSAicjcuMCIKIAogU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCisgICAgICAgICAgIGZpbGU6Ly9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9nY2M2LnBhdGNoIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNzFmOWM1YWUxOWI2MDYwOGY2YzdmMTYyZGE4NmE0MjgiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzUwMDE3NDhiMDY5MjI0ZGQ5OGJmMWJiOWVlODc3MzIxYzdkZThiMzMyYzhhYWQ1YWYzZTJhNzM3MmQyM2Y1YSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDA4NjkwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1MSUNFTlNFID0gIkdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi1yZXF1aXJlIGRpZmZ1dGlscy5pbmMKLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSIKLQotRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2lnc2Vndi1wcmVmaXgiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQkjIE5lZWQgdG8gcmVtb3ZlIGdldHRleHQgbWFjcm9zIHdpdGggd2VpcmQgbWl4IG9mIHZlcnNpb25zCi0JZm9yIGkgaW4gY29kZXNldC5tNCBnZXR0ZXh0X2dsLm00IGludGxtYWNvc3gubTQgaW50dHlwZXMtcHJpLm00IGxpYi1sZF9nbC5tNCBsaWItcHJlZml4X2dsLm00IHBvX2dsLm00IHNzaXplX3QubTQgd2NoYXJfdC5tNCB3aW50X3QubTQ7IGRvCi0JCXJtIC1mICR7U30vbTQvJGkKLQlkb25lCi19Ci0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5OTE4MDIwOGVjMmE4MmNlNzFmNTViMGQ3Mzg5ZjFiMyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjVlODlhOGFiNjVmZGVkMTczMWU0MTg2YmUxYmIyNWNkYTk2NzgzNGI2ZGY5NzM1OTljZGNkNWFiZGZjMTljIgotCi1pbmhlcml0IHB0ZXN0Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JdD0ke0R9JHtQVEVTVF9QQVRIfQotCWluc3RhbGwgLUQgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4L3Rlc3QtZHJpdmVyCi0JY3AgLXIgJHtTfS90ZXN0cyAkdC8KLQlpbnN0YWxsICR7Qn0vdGVzdHMvTWFrZWZpbGUgJHQvdGVzdHMvCi0Jc2VkIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnIFwKLQkgICAgLWUgJ3N8YmFzaHxzaHwnIFwKLQkgICAgLWUgJ3N8XnRvcF9zcmNkaXIgPSBcKC4qXCl8dG9wX3NyY2RpciA9IC4uXC98JyBcCi0JICAgIC1lICdzfF5zcmNkaXIgPSBcKC4qXCl8c3JjZGlyID0gLnwnIFwKLQkgICAgLWUgJ3N8ImAkKGJ1aWx0X3Byb2dyYW1zKWAifGRpZmZ8JyBcCi0JICAgIC1lICdzfGdhd2t8YXdrfGcnIFwKLQkgICAgLWkgJHQvdGVzdHMvTWFrZWZpbGUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzA5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy40LmJiCkBAIC0wLDAgKzEsMzcgQEAKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK3JlcXVpcmUgZGlmZnV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgTmVlZCB0byByZW1vdmUgZ2V0dGV4dCBtYWNyb3Mgd2l0aCB3ZWlyZCBtaXggb2YgdmVyc2lvbnMKKwlmb3IgaSBpbiBjb2Rlc2V0Lm00IGdldHRleHRfZ2wubTQgaW50bG1hY29zeC5tNCBpbnR0eXBlcy1wcmkubTQgbGliLWxkX2dsLm00IGxpYi1wcmVmaXhfZ2wubTQgcG9fZ2wubTQgc3NpemVfdC5tNCB3Y2hhcl90Lm00IHdpbnRfdC5tNDsgZG8KKwkJcm0gLWYgJHtTfS9tNC8kaQorCWRvbmUKK30KKworU1JDX1VSSVttZDVzdW1dID0gImRmOWNhNDY1ZjMwMzA3Y2ZmZDAzZGExNzZhNDNhNWQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiNTNjMDI1ZjJhYzNkMjE3YmNmNzUzZGFkNmRlZTdiNDEwYjMzZDA5NDg0OTVmZjAxNWFhZjhiOTExODljZTIiCisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAtRCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAkdC9idWlsZC1hdXgvdGVzdC1kcml2ZXIKKwljcCAtciAke1N9L3Rlc3RzICR0LworCWluc3RhbGwgJHtCfS90ZXN0cy9NYWtlZmlsZSAkdC90ZXN0cy8KKwlzZWQgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgXAorCSAgICAtZSAnc3xiYXNofHNofCcgXAorCSAgICAtZSAnc3xedG9wX3NyY2RpciA9IFwoLipcKXx0b3Bfc3JjZGlyID0gLi5cL3wnIFwKKwkgICAgLWUgJ3N8XnNyY2RpciA9IFwoLipcKXxzcmNkaXIgPSAufCcgXAorCSAgICAtZSAnc3wiYCQoYnVpbHRfcHJvZ3JhbXMpYCJ8ZGlmZnwnIFwKKwkgICAgLWUgJ3N8Z2F3a3xhd2t8ZycgXAorCSAgICAtaSAkdC90ZXN0cy9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWRmNzg0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAiRGlzcGxheSBvciBjaGFuZ2UgZXRoZXJuZXQgY2FyZCBzZXR0aW5ncyIKLURFU0NSSVBUSU9OID0gIkEgc21hbGwgdXRpbGl0eSBmb3IgZXhhbWluaW5nIGFuZCB0dW5pbmcgdGhlIHNldHRpbmdzIG9mIHlvdXIgZXRoZXJuZXQtYmFzZWQgbmV0d29yayBpbnRlcmZhY2VzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLyIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ldGh0b29sLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YzE5YjMwNTQ4YzU4MjU3N2ZjNmI0NDM2MjZmYzEyMTYiCi0KLVNSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvZXRodG9vbC0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNWI1NWY3Y2Q3NmU5MDFkZmMyNzM4YWMyMmNhYjk2Y2EiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjg0MjI2ZGI4ZGQxOGFmYWY5MWQ4ZDAwZjVjYjhmODdlYzNkN2Y3ODdkMmEzNjA1ZGUwOGQ2ZGZhOTVhYjhlZiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgotCi1kb19jb21waWxlX3B0ZXN0KCkgewotICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKLX0KLQotZG9faW5zdGFsbF9wdGVzdCAoKSB7Ci0gICBjcCAke0J9L01ha2VmaWxlICAgICAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQotICAgaW5zdGFsbCAke0J9L3Rlc3QtY21kbGluZSAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KLSAgIGluc3RhbGwgJHtCfS90ZXN0LWZlYXR1cmVzICAgICAgICR7RH0ke1BURVNUX1BBVEh9Ci0gICBpbnN0YWxsICR7Qn0vZXRodG9vbCAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9ldGh0b29sCi0gICBzZWQgLWkgJ3MvXk1ha2VmaWxlL19NYWtlZmlsZS8nICAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGQ0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjYuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJEaXNwbGF5IG9yIGNoYW5nZSBldGhlcm5ldCBjYXJkIHNldHRpbmdzIgorREVTQ1JJUFRJT04gPSAiQSBzbWFsbCB1dGlsaXR5IGZvciBleGFtaW5pbmcgYW5kIHR1bmluZyB0aGUgc2V0dGluZ3Mgb2YgeW91ciBldGhlcm5ldC1iYXNlZCBuZXR3b3JrIGludGVyZmFjZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V0aHRvb2wuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1jMTliMzA1NDhjNTgyNTc3ZmM2YjQ0MzYyNmZjMTIxNiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC9ldGh0b29sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMTg2ZGQ4M2EwMzg0MTA5YjkyYzZjZDQwYTdiYjBlNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZDQ1NjIwODg3ZjdlNjEzMTJmYzJmOWNhM2ZkNTBkNDlhYzc3MzdlZDg3NGIwYjAyODQ1ZDA3ZTBmYTNjYTQ5IgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICBvZV9ydW5tYWtlIGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgIGNwICR7Qn0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vdGVzdC1jbWRsaW5lICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L3Rlc3QtZmVhdHVyZXMgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS9ldGh0b29sICAgICAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9L2V0aHRvb2wKKyAgIHNlZCAtaSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggMmQwZGRiNC4uMWI3ZjhjZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtNiw3ICs2LDcgQEAKIAogfCBjb25maWd1cmUuaW46NzU6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA1LzA0CiAKIEluZGV4OiBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzLTQuMC4xNy9DVkUtMjAxNS04MzI3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzLTQuMC4xNy9DVkUtMjAxNS04MzI3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZWRjODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtNC4wLjE3L0NWRS0yMDE1LTgzMjcucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisKK2h0dHA6Ly9ienIubGludXhmb3VuZGF0aW9uLm9yZy9sb2dnZXJoZWFkL29wZW5wcmludGluZy9jdXBzLWZpbHRlcnMvcmV2aXNpb24vNzQwNgorCitIYW5kIGFwcGxpZWQgY2hhbmdlIHRvIHV0aWwuYy4gRml4IHdhcyBmb3IgY3Vwcy1maWx0ZXJzIGJ1dCBhbHNvIGFwcGxpZWQgdG8gZm9vbWF0aWMtZmlsdGVycy4KKworQ1ZFOiBDVkUtMjAxNS04MzI3CitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IHV0aWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvdXRpbC5jCisrKysgYi91dGlsLmMKK0BAIC0zMSw3ICszMSw3IEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorIAorIAorLWNvbnN0IGNoYXIqIHNoZWxsZXNjYXBlcyA9ICJ8Ozw+JiEkXCdcIiMqPygpW117fSI7CisrY29uc3QgY2hhciogc2hlbGxlc2NhcGVzID0gInw7PD4mISRcJ1wiYCMqPygpW117fSI7CisgCisgY29uc3QgY2hhciAqIHRlbXBfZGlyKCkKKyB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtNC4wLjE3L0NWRS0yMDE1LTg1NjAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtNC4wLjE3L0NWRS0yMDE1LTg1NjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5NzNjNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy00LjAuMTcvQ1ZFLTIwMTUtODU2MC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKworaHR0cDovL2J6ci5saW51eGZvdW5kYXRpb24ub3JnL2xvZ2dlcmhlYWQvb3BlbnByaW50aW5nL2N1cHMtZmlsdGVycy9yZXZpc2lvbi83NDE5CisKK0hhbmQgYXBwbGllZCBjaGFuZ2UgdG8gdXRpbC5jLiBGaXggd2FzIGZvciBjdXBzLWZpbHRlcnMgYnV0IGFsc28gYXBwbGllZCB0byBmb29tYXRpYy1maWx0ZXJzLgorCitDVkU6IENWRS0yMDE1LTg1NjAKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCitJbmRleDogdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTMxLDcgKzMxLDcgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgCisgCistY29uc3QgY2hhciogc2hlbGxlc2NhcGVzID0gInw8PiYhJFwnXCIjKj8oKVtde30iOworK2NvbnN0IGNoYXIqIHNoZWxsZXNjYXBlcyA9ICJ8Ozw+JiEkXCdcIiMqPygpW117fSI7CisgCisgY29uc3QgY2hhciAqIHRlbXBfZGlyKCkKKyB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgppbmRleCAwY2ZmZWRkLi4zZjQzOWU3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVyc180LjAuMTcuYmIKQEAgLTE3LDYgKzE3LDEwIEBACiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5vcGVucHJpbnRpbmcub3JnL2Rvd25sb2FkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtJHtQVn0udGFyLmd6IgogCitTUkNfVVJJICs9ICJmaWxlOi8vQ1ZFLTIwMTUtODU2MC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtODMyNy5wYXRjaCBcCisgICAgICAgICAgICIKKwogU1JDX1VSSVttZDVzdW1dID0gImIwNWY1ZGNiZmUzNTlmMTk4ZWVmM2RmNWIyODNkODk2IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyZTJlNTNlNTAyNTcxZTg4ZWViOTAxMGM0NWEwZDU0NjcxZjE1NzA3ZWUxMDRmNWM5YzIyYjU5ZWE3YTMzZTMiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41LzAwMDEtZ2F3ay1maXgtbm9uLWdsaWJjLWdjYy00LWNvbXBpbGF0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvMDAwMS1nYXdrLWZpeC1ub24tZ2xpYmMtZ2NjLTQtY29tcGlsYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5MjAxYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41LzAwMDEtZ2F3ay1maXgtbm9uLWdsaWJjLWdjYy00LWNvbXBpbGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gNTM0OTZlMmUzMDZiMTZhYzU5ODAxNTUzZjc3NWJjY2ExNjRlNmEzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxnaXRAYW5kcmVkLm5ldD4KK0RhdGU6IFdlZCwgMTQgU2VwIDIwMTYgMTY6MjA6MzcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGdjYyA+PSA0IGNvbXBpbGF0aW9uCisKK3wgLi4vZ2F3ay0zLjEuNS9oYXJkLWxvY2FsZS5oOiBJbiBmdW5jdGlvbiAnaGFyZF9sb2NhbGUnOgorfCAuLi9nYXdrLTMuMS41L2hhcmQtbG9jYWxlLmg6NDM6MjA6IGVycm9yOiBpbnZhbGlkIHN0b3JhZ2UgY2xhc3MgZm9yIGZ1bmN0aW9uICd4bWFsbG9jJworfCAgICAgICAgc3RhdGljIHB0cl90IHhtYWxsb2MgUEFSQU1TICgoc2l6ZV90IG4pKTsKK3wgICAgICAgICAgICAgICAgICAgICBefn5+fn5+CisKK3wgLi4vZ2F3ay0zLjEuNS9oYXJkLWxvY2FsZS5oOjQ1OjIyOiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAneG1hbGxvYycgWy1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCit8ICAgICAgICBjaGFyICpsb2NhbGUgPSB4bWFsbG9jIChzdHJsZW4gKHApICsgMSk7Cit8ICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+Cit8IC4uL2dhd2stMy4xLjUvaGFyZC1sb2NhbGUuaDo0NToyMjogd2FybmluZzogaW5pdGlhbGl6YXRpb24gbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBhIGNhc3QgWy1XaW50LWNvbnZlcnNpb25dCit8IC4uL2dhd2stMy4xLjUvZGZhLmM6IEF0IHRvcCBsZXZlbDoKK3wgLi4vZ2F3ay0zLjEuNS9kZmEuYzoxMjU6MTQ6IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ3htYWxsb2MnCit8ICBzdGF0aWMgcHRyX3QgeG1hbGxvYyBQQVJBTVMgKChzaXplX3QgbikpOworfCAgICAgICAgICAgICAgIF5+fn5+fn4KK3wgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2dhd2stMy4xLjUvZGZhLmM6MTEyOjA6Cit8IC4uL2dhd2stMy4xLjUvaGFyZC1sb2NhbGUuaDo0NToyMjogbm90ZTogcHJldmlvdXMgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgJ3htYWxsb2MnIHdhcyBoZXJlCit8ICAgICAgICBjaGFyICpsb2NhbGUgPSB4bWFsbG9jIChzdHJsZW4gKHApICsgMSk7Cit8ICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcmVxdWlyZWQgZm9yIGdhd2sgMy4xLjUgKEdQTHYyKSByZWNpcGUgb25seV0KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGdpdEBhbmRyZWQubmV0PgorLS0tCisgZGZhLmMgICAgICAgICB8IDIgKy0KKyBoYXJkLWxvY2FsZS5oIHwgMiAtLQorIDIgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kZmEuYyBiL2RmYS5jCitpbmRleCA3MWUzNzM2Li45N2Y2MDQ1IDEwMDY0NAorLS0tIGEvZGZhLmMKKysrKyBiL2RmYS5jCitAQCAtMTA5LDYgKzEwOSw3IEBAIGV4dGVybiB2b2lkIGZyZWUoKTsKKyAKKyAjaW5jbHVkZSAicmVnZXguaCIKKyAjaW5jbHVkZSAiZGZhLmgiCisrc3RhdGljIHB0cl90IHhtYWxsb2MgUEFSQU1TICgoc2l6ZV90IG4pKTsKKyAjaW5jbHVkZSAiaGFyZC1sb2NhbGUuaCIKKyAKKyAvKiBIUFVYLCBkZWZpbmUgdGhvc2UgYXMgbWFjcm9zIGluIHN5cy9wYXJhbS5oICovCitAQCAtMTIyLDcgKzEyMyw2IEBAIGV4dGVybiB2b2lkIGZyZWUoKTsKKyBzdGF0aWMgdm9pZCBkZmFtdXN0IFBBUkFNUyAoKHN0cnVjdCBkZmEgKmRmYSkpOworIAorIHN0YXRpYyBwdHJfdCB4Y2FsbG9jIFBBUkFNUyAoKHNpemVfdCBuLCBzaXplX3QgcykpOworLXN0YXRpYyBwdHJfdCB4bWFsbG9jIFBBUkFNUyAoKHNpemVfdCBuKSk7Cisgc3RhdGljIHB0cl90IHhyZWFsbG9jIFBBUkFNUyAoKHB0cl90IHAsIHNpemVfdCBuKSk7CisgI2lmZGVmIERFQlVHCisgc3RhdGljIHZvaWQgcHJ0b2sgUEFSQU1TICgodG9rZW4gdCkpOworZGlmZiAtLWdpdCBhL2hhcmQtbG9jYWxlLmggYi9oYXJkLWxvY2FsZS5oCitpbmRleCAwZjQ5ODZiLi45ZWU1N2UwIDEwMDY0NAorLS0tIGEvaGFyZC1sb2NhbGUuaAorKysrIGIvaGFyZC1sb2NhbGUuaAorQEAgLTQwLDggKzQwLDYgQEAgaGFyZF9sb2NhbGUgKGludCBjYXRlZ29yeSkKKyAgICAgICBpZiAoc3RyY21wIChwLCAiQyIpID09IDAgfHwgc3RyY21wIChwLCAiUE9TSVgiKSA9PSAwKQorIAloYXJkID0gMDsKKyAjIGVsc2UKKy0gICAgICBzdGF0aWMgcHRyX3QgeG1hbGxvYyBQQVJBTVMgKChzaXplX3QgbikpOworLQorICAgICAgIGNoYXIgKmxvY2FsZSA9IHhtYWxsb2MgKHN0cmxlbiAocCkgKyAxKTsKKyAgICAgICBzdHJjcHkgKGxvY2FsZSwgcCk7CisgCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggYjNlNzk4Ny4uYzQyYzMzYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTExLDcgKzExLDcgQEAKIC4uLgogfCBNYWtlZmlsZS5hbToyNzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDQKIAogSW5kZXg6IGdhd2stMy4xLjUvY29uZmlndXJlLmFjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiCmluZGV4IDdjOTJiZGUuLjYzZmQzMmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiCkBAIC0xNSw4ICsxNSwxMSBAQAogUkRFUEVORFNfcGdhd2sgKz0gImdhd2stY29tbW9uIgogUFIgPSAicjIiCiAKLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nYXdrL2dhd2stJHtQVn0udGFyLmd6IFwKLQlmaWxlOi8vZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCitTUkNfVVJJID0gIlwKKyAgICAke0dOVV9NSVJST1J9L2dhd2svZ2F3ay0ke1BWfS50YXIuZ3ogXAorICAgIGZpbGU6Ly9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtZ2F3ay1maXgtbm9uLWdsaWJjLWdjYy00LWNvbXBpbGF0aW9uLnBhdGNoIFwKKyIKIAogU1JDX1VSSVttZDVzdW1dID0gIjQ3NjAzMjU0ODk0NzljYWMxN2ZlMDExNGI4ZjYyZjMwIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2M2RjYjlkMGNhMzk4YjFkNGY1YTMzMmY2Y2Q5Y2VjNTY0NDEyNjVmY2E2MTZmMmVhMWI0NGQ0NTllOWYwZjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2ZpbGVzLzAwMDEtQnVnLTY5NjQ5Ny1GaXgtc3VwcG9ydC1mb3ItYnVpbGRpbmctd2l0aC1uby1qYmlnMi1kZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvMDAwMS1CdWctNjk2NDk3LUZpeC1zdXBwb3J0LWZvci1idWlsZGluZy13aXRoLW5vLWpiaWcyLWRlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTg2YTFkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvMDAwMS1CdWctNjk2NDk3LUZpeC1zdXBwb3J0LWZvci1idWlsZGluZy13aXRoLW5vLWpiaWcyLWRlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotRnJvbSAxZDE5OTk4MDkxMTU0Zjg5YjgyOTRlNDU5NGEwNTk4NmI0YzJmODIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQ2hyaXMgTGlkZGVsbCA8Y2hyaXMubGlkZGVsbEBhcnRpZmV4LmNvbT4KLURhdGU6IFdlZCwgMTMgSmFuIDIwMTYgMDI6MDg6NDIgLTA1MDAKLVN1YmplY3Q6IFtQQVRDSCAxLzJdIEJ1ZyA2OTY0OTc6IEZpeCBzdXBwb3J0IGZvciBidWlsZGluZyB3aXRoIG5vIGpiaWcyCi0gZGVjb2RlcgotCi1BdXRob3I6IENocmlzIExpZGRlbGwgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLWh0dHA6Ly9idWdzLmdob3N0c2NyaXB0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9Njk2NDk3Ci1odHRwOi8vZ2l0Lmdob3N0c2NyaXB0LmNvbS8/cD1naG9zdHBkbC5naXQ7YT1jb21taXRkaWZmO2g9YjBmNWE5NzUKLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJhc2UvbGliLm1hayB8ICA5ICsrKysrKysrKwotIHBzaS9pbnQubWFrICB8IDIzICsrKysrKysrKysrKysrKysrKy0tLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYmFzZS9saWIubWFrIGIvYmFzZS9saWIubWFrCi1pbmRleCAyNDFkZjJmLi5kYWE3MDU2IDEwMDY0NAotLS0tIGEvYmFzZS9saWIubWFrCi0rKysgYi9iYXNlL2xpYi5tYWsKLUBAIC0xNzMyLDYgKzE3MzIsMTAgQEAgJChHTEQpc2piaWcyX2piaWcyZGVjLmRldiA6ICQoTElCX01BSykgJChFQ0hPR1NfWEUpIFwKLSAJJChTRVRNT0QpICQoR0xEKXNqYmlnMl9qYmlnMmRlYyAkKHNqYmlnMl9qYmlnMmRlYykKLSAJJChBRERNT0QpICQoR0xEKXNqYmlnMl9qYmlnMmRlYyAtaW5jbHVkZSAkKEdMRClqYmlnMmRlYy5kZXYKLSAKLSskKEdMRClzamJpZzJfLmRldiA6ICQoTElCX01BSykgJChFQ0hPR1NfWEUpIFwKLSsgICQoTElCX01BSykgJChNQUtFRElSUykKLSsJJChTRVRNT0QpICQoR0xEKXNqYmlnMl8KLSsKLSAjIGpiaWcyZGVjLmRldiBpcyBkZWZpbmVkIGluIGpiaWcyLm1hawotIAotICQoR0xPQkopc2piaWcyLiQoT0JKKSA6ICQoR0xTUkMpc2piaWcyLmMgJChBSykgXAotQEAgLTE3MzksNiArMTc0MywxMSBAQCAkKEdMT0JKKXNqYmlnMi4kKE9CSikgOiAkKEdMU1JDKXNqYmlnMi5jICQoQUspIFwKLSAgJChzamJpZzJfaCkgJChzdHJpbXBsX2gpICQoTUFLRURJUlMpCi0gCSQoR0xKQklHMkNDKSAkKEdMT18pc2piaWcyLiQoT0JKKSAkKENfKSAkKEdMU1JDKXNqYmlnMi5jCi0gCi0rJChHTE9CSilzbm9qYmlnMi4kKE9CSikgOiAkKEdMU1JDKXNub2piaWcyLmMgJChBSykgXAotKyAkKHN0ZGludF9faCkgJChtZW1vcnlfX2gpICQoc3RkaW9fX2gpICQoZ3NlcnJvcnNfaCkgJChnZGVidWdfaCkgXAotKyAkKHN0cmltcGxfaCkgJChMSUJfTUFLKSAkKE1BS0VESVJTKQotKwkkKEdMSkJJRzJDQykgJChHTE9fKXNub2piaWcyLiQoT0JKKSAkKENfKSAkKEdMU1JDKXNub2piaWcyLmMKLSsKLSAjIGx1cmF0ZWNoIHZlcnNpb24KLSBzamJpZzJfbHVyYXRlY2g9JChHTE9CSilzamJpZzJfbHVyYXRlY2guJChPQkopCi0gCi1kaWZmIC0tZ2l0IGEvcHNpL2ludC5tYWsgYi9wc2kvaW50Lm1hawotaW5kZXggNjE0OWEzYi4uZjlkNjY3ZCAxMDA2NDQKLS0tLSBhL3BzaS9pbnQubWFrCi0rKysgYi9wc2kvaW50Lm1hawotQEAgLTEyNTQsMTEgKzEyNTQsMjQgQEAgJChQU09CSil6ZmFlcy4kKE9CSikgOiAkKFBTU1JDKXpmYWVzLmMgJChPUCkgJChtZW1vcnlfX2gpXAotICMgdGhpcyBjYW4gYmUgdHVybmVkIG9uIGFuZCBvZmYgd2l0aCBhIEZFQVRVUkVfREVWCi0gCi0gZmpiaWcyXz0kKFBTT0JKKXpmamJpZzJfJChKQklHMl9MSUIpLiQoT0JKKQotLSQoUFNEKWpiaWcyLmRldiA6ICQoSU5UX01BSykgJChFQ0hPR1NfWEUpICQoZmpiaWcyXykgJChHTEQpc2piaWcyLmRldlwKLS0gJChNQUtFRElSUykKLS0JJChTRVRNT0QpICQoUFNEKWpiaWcyICQoZmpiaWcyXykKLS0JJChBRERNT0QpICQoUFNEKWpiaWcyIC1pbmNsdWRlICQoR0xEKXNqYmlnMgotLQkkKEFERE1PRCkgJChQU0QpamJpZzIgLW9wZXIgemZqYmlnMgotKwotKyQoUFNEKWpiaWcyX2piaWcyZGVjLmRldiA6ICQoRUNIT0dTX1hFKSAkKGZqYmlnMl8pICQoR0xEKXNqYmlnMi5kZXZcCi0rICQoSU5UX01BSykgJChNQUtFRElSUykKLSsJJChTRVRNT0QpICQoUFNEKWpiaWcyX2piaWcyZGVjICQoZmpiaWcyXykKLSsJJChBRERNT0QpICQoUFNEKWpiaWcyX2piaWcyZGVjIC1pbmNsdWRlICQoR0xEKXNqYmlnMgotKwkkKEFERE1PRCkgJChQU0QpamJpZzJfamJpZzJkZWMgLW9wZXIgemZqYmlnMgotKwotKyQoUFNEKWpiaWcyX2x1cmF0ZWNoLmRldiA6ICQoRUNIT0dTX1hFKSAkKGZqYmlnMl8pICQoR0xEKXNqYmlnMi5kZXZcCi0rICQoSU5UX01BSykgJChNQUtFRElSUykKLSsJJChTRVRNT0QpICQoUFNEKWpiaWcyX2x1cmF0ZWNoICQoZmpiaWcyXykKLSsJJChBRERNT0QpICQoUFNEKWpiaWcyX2x1cmF0ZWNoIC1pbmNsdWRlICQoR0xEKXNqYmlnMgotKwkkKEFERE1PRCkgJChQU0QpamJpZzJfbHVyYXRlY2ggLW9wZXIgemZqYmlnMgotKwotKyQoUFNEKWpiaWcyXy5kZXYgOiAkKEVDSE9HU19YRSkgJChJTlRfTUFLKSAkKE1BS0VESVJTKQotKwkkKFNFVE1PRCkgJChQU0QpamJpZzJfIAotKwotKyQoUFNEKWpiaWcyLmRldiA6ICQoUFNEKWpiaWcyXyQoSkJJRzJfTElCKS5kZXYgJChJTlRfTUFLKSAkKE1BS0VESVJTKQotKwkkKENQXykgJChQU0QpamJpZzJfJChKQklHMl9MSUIpLmRldiAkKFBTRClqYmlnMi5kZXYKLSAKLSAkKFBTT0JKKXpmamJpZzJfamJpZzJkZWMuJChPQkopIDogJChQU1NSQyl6ZmpiaWcyLmMgJChPUCkgJChtZW1vcnlfX2gpXAotICAkKGdzc3RydWN0X2gpICQoZ3N0eXBlc19oKSAkKGlhbGxvY19oKSAkKGlkaWN0X2gpICQoaWZpbHRlcl9oKVwKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9maWxlcy8wMDAyLUJ1Zy02OTY0OTctcGFydC0yLWZpeC1zdXBwb3J0LWZvci1idWlsZGluZy13aXRoLWEtSlAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2ZpbGVzLzAwMDItQnVnLTY5NjQ5Ny1wYXJ0LTItZml4LXN1cHBvcnQtZm9yLWJ1aWxkaW5nLXdpdGgtYS1KUC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNmYzQ3OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2ZpbGVzLzAwMDItQnVnLTY5NjQ5Ny1wYXJ0LTItZml4LXN1cHBvcnQtZm9yLWJ1aWxkaW5nLXdpdGgtYS1KUC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLUZyb20gM2I0M2Y5M2VjMDI2MTFjNGQ1NTQ2MTI5NTNmNWI2NDc2NWI4NjgzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IENocmlzIExpZGRlbGwgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+Ci1EYXRlOiBXZWQsIDEzIEphbiAyMDE2IDAyOjE0OjU1IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0ggMi8yXSBCdWcgNjk2NDk3IChwYXJ0IDIpOiBmaXggc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2l0aCBhIEpQWAotIGRlY29kZXIKLQotQXV0aG9yOiBDaHJpcyBMaWRkZWxsIDxjaHJpcy5saWRkZWxsQGFydGlmZXguY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1odHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5NjQ5NwotaHR0cDovL2dpdC5naG9zdHNjcmlwdC5jb20vP3A9Z2hvc3RwZGwuZ2l0O2E9Y29tbWl0ZGlmZjtoPWIwZjVhOTc1Ci1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBiYXNlL2xpYi5tYWsgfCAzICsrKwotIHBzaS9pbnQubWFrICB8IDMgKysrCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2Jhc2UvbGliLm1hayBiL2Jhc2UvbGliLm1hawotaW5kZXggZGFhNzA1Ni4uODg1M2RkNSAxMDA2NDQKLS0tLSBhL2Jhc2UvbGliLm1hawotKysrIGIvYmFzZS9saWIubWFrCi1AQCAtMTc3NCw2ICsxNzc0LDkgQEAgJChHTE9CSilzanB4LiQoT0JKKSA6ICQoR0xTUkMpc2pweC5jICQoQUspIFwKLSAgJChnZGVidWdfaCkgJChzdHJpbXBsX2gpICQoc2pweF9oKSAkKE1BS0VESVJTKQotIAkkKEdMSkFTQ0MpICQoR0xPXylzanB4LiQoT0JKKSAkKENfKSAkKEdMU1JDKXNqcHguYwotIAotKyQoR0xEKXNqcHhfLmRldiA6ICQoTElCX01BSykgJChFQ0hPR1NfWEUpICQoTElCX01BSykgJChNQUtFRElSUykKLSsJJChTRVRNT0QpICQoR0xEKXNqcHhfCi0rCi0gIyBsdXJhdGVjaCB2ZXJzaW9uCi0gc2pweF9sdXJhdGVjaD0kKEdMT0JKKXNqcHhfbHVyYXRlY2guJChPQkopCi0gJChHTEQpc2pweF9sdXJhdGVjaC5kZXYgOiAkKExJQl9NQUspICQoRUNIT0dTX1hFKSBcCi1kaWZmIC0tZ2l0IGEvcHNpL2ludC5tYWsgYi9wc2kvaW50Lm1hawotaW5kZXggZjlkNjY3ZC4uZGIwMWI2NSAxMDA2NDQKLS0tLSBhL3BzaS9pbnQubWFrCi0rKysgYi9wc2kvaW50Lm1hawotQEAgLTEyOTAsNiArMTI5MCw5IEBAICQoUFNEKWpweC5kZXYgOiAkKElOVF9NQUspICQoRUNIT0dTX1hFKSAkKFBTRClqcHhfJChKUFhfTElCKS5kZXZcCi0gICQoTUFLRURJUlMpCi0gCSQoQ1BfKSAkKFBTRClqcHhfJChKUFhfTElCKS5kZXYgJChQU0QpanB4LmRldgotIAotKyQoUFNEKWpweF8uZGV2IDogJChFQ0hPR1NfWEUpICQoSU5UX01BSykgJChNQUtFRElSUykKLSsJJChTRVRNT0QpICQoUFNEKWpweF8KLSsKLSBmanB4X2x1cmF0ZWNoPSQoUFNPQkopemZqcHhfbHVyYXRlY2guJChPQkopCi0gCi0gJChQU09CSil6ZmpweC4kKE9CSikgOiAkKFBTU1JDKXpmanB4LmMgJChPUCkgJChtZW1vcnlfX2gpXAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2ZpbGVzL2RvLW5vdC1jaGVjay1sb2NhbC1saWJwbmctc291cmNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9maWxlcy9kby1ub3QtY2hlY2stbG9jYWwtbGlicG5nLXNvdXJjZS5wYXRjaAppbmRleCBiNDQ1YTZjLi5jM2U0NGZlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2ZpbGVzL2RvLW5vdC1jaGVjay1sb2NhbC1saWJwbmctc291cmNlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvZG8tbm90LWNoZWNrLWxvY2FsLWxpYnBuZy1zb3VyY2UucGF0Y2gKQEAgLTE2LDE3ICsxNiwxNyBAQAogIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGFiMzBhOTcuLmI3NjJmZDcgMTAwNjQ0CitpbmRleCBiZjZkM2Y1Li4wMWRmMDNmIDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC05NTUsMTEgKzk1NSwxMSBAQCBBQ19TVUJTVChaTElCRElSKQorQEAgLTkzMCwxMSArOTMwLDExIEBAIEFDX1NVQlNUKFpMSUJESVIpCiAgQUNfU1VCU1QoRlRfU1lTX1pMSUIpCiAgCiAgZG5sIHBuZyBmb3IgdGhlIHBuZyBvdXRwdXQgZGV2aWNlOyBpdCBhbHNvIHJlcXVpcmVzIHpsaWIKIC1MSUJQTkdESVI9c3JjCiArTElCUE5HRElSPSRzcmNkaXIvbGlicG5nCiAgUE5HREVWUz0nJwotIFBOR0RFVlNfQUxMPSdwbmc0OCBwbmcxNm0gcG5nZ3JheSBwbmdtb25vIHBuZzI1NiBwbmcxNiBwbmdhbHBoYScKKyBQTkdERVZTX0FMTD0ncG5nNDggcG5nMTZtIHBuZ2dyYXkgcG5nbW9ubyBwbmdtb25vZCBwbmcyNTYgcG5nMTYgcG5nYWxwaGEnCiAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbG9jYWwgcG5nIGxpYnJhcnkgc291cmNlXSkKIC1pZiB0ZXN0IC1mICRzcmNkaXIvbGlicG5nL3BuZ3JlYWQuYzsgdGhlbgogK2lmIGZhbHNlOyB0aGVuCkBAIC0zNCw1ICszNCw1IEBACiAgICAgICAgICBTSEFSRV9MSUJQTkc9MAogICAgICAgICAgTElCUE5HRElSPSRzcmNkaXIvbGlicG5nCiAtLSAKLTEuOS4xCisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCmluZGV4IGJjMjliZTUuLmU3MDkxOTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotdXN0IHVzZSBjb21tYW5kcyBwcm92aWRlZCBieSBnaG9zdHNjcmlwdC1uYXRpdmUsIHByZXZlbnRpbmcgcmVjb21waWxlIHRoZW0gd2hlbgorSnVzdCB1c2UgY29tbWFuZHMgcHJvdmlkZWQgYnkgZ2hvc3RzY3JpcHQtbmF0aXZlLCBwcmV2ZW50aW5nIHJlY29tcGlsZSB0aGVtIHdoZW4KIGNvbXBpbGUgZ2hvc3RzY3JpcHQuCiBXYXkgdG8gZW5hYmxlIGNyb3NzIGNvbXBpbGUuCiAKQEAgLTcsOTQgKzcsOTMgQEAKIFNpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgogU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CiAKK1JlYmFzZSB0byA5LjE5CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBiYXNlL3VuaXgtYXV4Lm1hayB8IDY0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKIGRpZmYgLS1naXQgYS9iYXNlL3VuaXgtYXV4Lm1hayBiL2Jhc2UvdW5peC1hdXgubWFrCi1pbmRleCBhOTFmYjI2Li5jOTkxZDExIDEwMDY0NAoraW5kZXggMDExMDY2Ny4uZTJlYjFhMSAxMDA2NDQKIC0tLSBhL2Jhc2UvdW5peC1hdXgubWFrCiArKysgYi9iYXNlL3VuaXgtYXV4Lm1hawotQEAgLTY5LDQ2ICs2OSw0NiBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuYyAkKHN0ZGlvX19oKSAkKHRpbWVfX2gpICQoQUspXAotICAkKE1BS0VESVJTKQotIAkkKEdMQ0MpICQoR0xPXylncF9zeXN2LiQoT0JKKSAkKENfKSAkKEdMU1JDKWdwX3N5c3YuYworQEAgLTcxLDQ0ICs3MSw0NCBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuYyAkKHN0ZGlvX19oKSAkKHRpbWVfX2gpICQoQUspXAogIAotLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCi0tCi0tJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoTUFLRURJUlMpCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgcHJvZ3JhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAKKy0kKEVDSE9HU19YRSk6ICQoR0xTUkMpZWNob2dzLmMgJChBSykgJChzdGRwcmVfaCkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCiAtCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKIC0KLS0jIE9uIHRoZSBSUy82MDAwIChhdCBsZWFzdCksIGNvbXBpbGluZyBnZW5hcmNoLmMgd2l0aCBnY2Mgd2l0aCAtTwotLSMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgotLSQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorKyMkKEVDSE9HU19YRSk6ICQoR0xTUkMpZWNob2dzLmMgJChBSykgJChzdGRwcmVfaCkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChFQ0hPR1NfWEUpICQoR0xTUkMpZWNob2dzLmMgJChBVVhFWFRSQUxJQlMpCisrIworICMgT24gdGhlIFJTLzYwMDAgKGF0IGxlYXN0KSwgY29tcGlsaW5nIGdlbmFyY2guYyB3aXRoIGdjYyB3aXRoIC1PCisgIyBwcm9kdWNlcyBhIGJ1Z2d5IGV4ZWN1dGFibGUuCistJChHRU5BUkNIX1hFKTogJChHTFNSQylnZW5hcmNoLmMgJChBSykgJChHRU5BUkNIX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQogLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKIC0KLS0kKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKy0kKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCiAtCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQogLQotLSQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKE1BS0VESVJTKQorLSQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKIC0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOREVWX1hFKSAkKEdMU1JDKWdlbmRldi5jICQoQVVYRVhUUkFMSUJTKQogLQotLSQoR0VOSFRfWEUpOiAkKEdMU1JDKWdlbmh0LmMgJChBSykgJChHRU5IVF9ERVBTKSAkKE1BS0VESVJTKQorLSQoR0VOSFRfWEUpOiAkKEdMU1JDKWdlbmh0LmMgJChBSykgJChHRU5IVF9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKIC0JJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKIC0KLS0jIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5Ci0tIyB3aGljaCBtZWFucyB0aGF0IHRoZSBta3JvbWZzIGJ1aWxkIGNhbid0IGZpbmQgdGhlIHpsaWIgc291cmNlIGl0IG5lZWRzLgotLSMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKysjJChHRU5BUkNIX1hFKTogJChHTFNSQylnZW5hcmNoLmMgJChBSykgJChHRU5BUkNIX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5DT05GX1hFKSAkKEdMU1JDKWdlbmNvbmYuYyAkKEFVWEVYVFJBTElCUykKKysjCisrIyQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkRFVl9YRSkgJChHTFNSQylnZW5kZXYuYyAkKEFVWEVYVFJBTElCUykKKysjCisrIyQoR0VOSFRfWEUpOiAkKEdMU1JDKWdlbmh0LmMgJChBSykgJChHRU5IVF9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCisrIworICMgVG8gZ2V0IEdTIHRvIHVzZSB0aGUgc3lzdGVtIHpsaWIsIHlvdSByZW1vdmUvaGlkZSB0aGUgZ3MvemxpYiBkaXJlY3RvcnkKKyAjIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG1rcm9tZnMgYnVpbGQgY2FuJ3QgZmluZCB0aGUgemxpYiBzb3VyY2UgaXQgbmVlZHMuCisgIyBTbyBpdCdzIHNwbGl0IGludG8gdHdvIHRhcmdldHMsIG9uZSB1c2luZyB0aGUgemxpYiBzb3VyY2UgZGlyZWN0bHkuLi4uLgogLU1LUk9NRlNfT0JKU18wPSQoTUtST01GU19aTElCX09CSlMpICQoQVVYKWdwbWlzYy4kKE9CSikgJChBVVgpZ3BfZ2V0bnYuJChPQkopIFwKIC0gJChBVVgpZ3NjZGVmcy4kKE9CSikgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCiAtICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopICQoQVVYKW1lbWVudG8uJChPQkopCiAtCi0tJChNS1JPTUZTX1hFKV8wOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzApICQoTUFLRURJUlMpCistJChNS1JPTUZTX1hFKV8wOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzApICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQogLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQogLQotLSMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCisrI01LUk9NRlNfT0JKU18wPSQoTUtST01GU19aTElCX09CSlMpICQoQVVYKWdwbWlzYy4kKE9CSikgJChBVVgpZ3BfZ2V0bnYuJChPQkopIFwKKysjICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorKyMgJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikgJChBVVgpbWVtZW50by4kKE9CSikKKysjCisrIyQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCisrIworICMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCiAtTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAogLSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCiAtICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAogLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQogLQotLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKE1BS0VESVJTKQorLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKIC0JJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMSAkKE1LUk9NRlNfT0JKU18xKSAkKEFVWEVYVFJBTElCUykKIC0KLS0kKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKy0kKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCiAtCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQotKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEF1eGlsaWFyeSBwcm9ncmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwotKyMKLSsjJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoTUFLRURJUlMpCi0rIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChFQ0hPR1NfWEUpICQoR0xTUkMpZWNob2dzLmMgJChBVVhFWFRSQUxJQlMpCi0rIwotKyMjIE9uIHRoZSBSUy82MDAwIChhdCBsZWFzdCksIGNvbXBpbGluZyBnZW5hcmNoLmMgd2l0aCBnY2Mgd2l0aCAtTwotKyMjIHByb2R1Y2VzIGEgYnVnZ3kgZXhlY3V0YWJsZS4KLSsjJChHRU5BUkNIX1hFKTogJChHTFNSQylnZW5hcmNoLmMgJChBSykgJChHRU5BUkNIX0RFUFMpICQoTUFLRURJUlMpCi0rIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKLSsjCi0rIyQoR0VOQ09ORl9YRSk6ICQoR0xTUkMpZ2VuY29uZi5jICQoQUspICQoR0VOQ09ORl9ERVBTKSAkKE1BS0VESVJTKQotKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCi0rIwotKyMkKEdFTkRFVl9YRSk6ICQoR0xTUkMpZ2VuZGV2LmMgJChBSykgJChHRU5ERVZfREVQUykgJChNQUtFRElSUykKLSsjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkRFVl9YRSkgJChHTFNSQylnZW5kZXYuYyAkKEFVWEVYVFJBTElCUykKLSsjCi0rIyQoR0VOSFRfWEUpOiAkKEdMU1JDKWdlbmh0LmMgJChBSykgJChHRU5IVF9ERVBTKSAkKE1BS0VESVJTKQotKyMJJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKLSsjCi0rIyMgVG8gZ2V0IEdTIHRvIHVzZSB0aGUgc3lzdGVtIHpsaWIsIHlvdSByZW1vdmUvaGlkZSB0aGUgZ3MvemxpYiBkaXJlY3RvcnkKLSsjIyB3aGljaCBtZWFucyB0aGF0IHRoZSBta3JvbWZzIGJ1aWxkIGNhbid0IGZpbmQgdGhlIHpsaWIgc291cmNlIGl0IG5lZWRzLgotKyMjIFNvIGl0J3Mgc3BsaXQgaW50byB0d28gdGFyZ2V0cywgb25lIHVzaW5nIHRoZSB6bGliIHNvdXJjZSBkaXJlY3RseS4uLi4uCi0rI01LUk9NRlNfT0JKU18wPSQoTUtST01GU19aTElCX09CSlMpICQoQVVYKWdwbWlzYy4kKE9CSikgJChBVVgpZ3BfZ2V0bnYuJChPQkopIFwKLSsjICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAotKyMgJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikgJChBVVgpbWVtZW50by4kKE9CSikKLSsjCi0rIyQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKE1BS0VESVJTKQotKyMJJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMCAkKE1LUk9NRlNfT0JKU18wKSAkKEFVWEVYVFJBTElCUykKLSsjCi0rIyMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCiArI01LUk9NRlNfT0JKU18xPSQoQVVYKWdzY2RlZnMuJChPQkopIFwKICsjICQoQVVYKWdwbWlzYy4kKE9CSikgJChBVVgpZ3BfZ2V0bnYuJChPQkopIFwKICsjICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAogKyMgJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikKICsjCi0rIyQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKE1BS0VESVJTKQorKyMkKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCiArIwkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQogKyMKLSsjJChNS1JPTUZTX1hFKTogJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUFLRURJUlMpCisrIyQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKICsjCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQogIAogICMgUXVlcnkgdGhlIGVudmlyb25tZW50IHRvIGNvbnN0cnVjdCBnY29uZmlnXy5oLgogICMgVGhlc2UgYXJlIGFsbCBkZWZpbmVkIGNvbmRpdGlvbmFsbHkgKGV4Y2VwdCB0aGUgSmFzUEVSIG9uZSksIHNvIHRoYXQKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wbmdfbWFrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wbmdfbWFrLnBhdGNoCmluZGV4IGRhOTAwZWEuLjhiODQ5ODYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG5nX21hay5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3BuZ19tYWsucGF0Y2gKQEAgLTEsMjEgKzEsMzIgQEAKIGdob3N0c2NyaXB0OiBhZGQgZGVwZW5kZW5jeSBmb3IgcG5nbGliY29uZi5oCi0gICAgCisKIFdoZW4gdXNpbmcgcGFyYWxsZWwgbWFrZSBqb2JzLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdAogcG5nbGliY29uZi5oIGlzIGNyZWF0ZWQgYmVmb3JlIHdlIHRyeSB0byByZWZlcmVuY2UgaXQsCiBzbyBhZGQgYSBydWxlIHRvIHBuZy5tYWsuCiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotICAgIAorCiBTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+CiAKK1JlYmFzZSB0byA5LjE5CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBiYXNlL3BuZy5tYWsgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYmFzZS9wbmcubWFrIGIvYmFzZS9wbmcubWFrCitpbmRleCBmZTVjNmUyLi44YWJiNTNhIDEwMDY0NAogLS0tIGEvYmFzZS9wbmcubWFrCiArKysgYi9iYXNlL3BuZy5tYWsKLUBAIC04MSw2ICs4MSw4IEBAIHBuZy5jb25maWctY2xlYW4gOgotICQocG5nbGliY29uZl9oKSA6ICQoUE5HU1JDKXNjcmlwdHMkKEQpcG5nbGliY29uZi5oLnByZWJ1aWx0Ci0gCSQoQ1BfKSAgJChQTkdTUkMpc2NyaXB0cyQoRClwbmdsaWJjb25mLmgucHJlYnVpbHQgJChwbmdsaWJjb25mX2gpCitAQCAtNzQsNiArNzQsOCBAQCBwbmcuY2xlYW4tbm90LWNvbmZpZy1jbGVhbiA6CisgCisgcG5nbGliY29uZl9oPSQoUE5HR0VORElSKSQoRClwbmdsaWJjb25mLmgKICAKICskKE1BS0VESVJTKSA6ICQocG5nbGliY29uZl9oKQogKwotIFBERVA9JChBSykgJChwbmdsaWJjb25mX2gpICQoTUFLRURJUlMpCi0gCi0gcG5nXzE9JChQTkdPQkopcG5nLiQoT0JKKSAkKFBOR09CSilwbmdtZW0uJChPQkopICQoUE5HT0JKKXBuZ2Vycm9yLiQoT0JKKSAkKFBOR09CSilwbmdzZXQuJChPQkopCisgcG5nLmNvbmZpZy1jbGVhbiA6CisgCSQoUk1fKSAkKHBuZ2xpYmNvbmZfaCkKKyAJJChSTV8pICQoUE5HR0VOKWxwZyouZGV2CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQyMjJjNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMTguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotU1VNTUFSWSA9ICJUaGUgR1BMIEdob3N0c2NyaXB0IFBvc3RTY3JpcHQvUERGIGludGVycHJldGVyIgotREVTQ1JJUFRJT04gPSAiR2hvc3RzY3JpcHQgaXMgdXNlZCBmb3IgUG9zdFNjcmlwdC9QREYgcHJldmlldyBhbmQgcHJpbnRpbmcuICBVc3VhbGx5IGFzIFwKLWEgYmFjay1lbmQgdG8gYSBwcm9ncmFtIHN1Y2ggYXMgZ2hvc3R2aWV3LCBpdCBjYW4gZGlzcGxheSBQb3N0U2NyaXB0IGFuZCBQREYgXAotZG9jdW1lbnRzIGluIGFuIFgxMSBlbnZpcm9ubWVudC4gXAotXAotRnVydGhlcm1vcmUsIGl0IGNhbiByZW5kZXIgUG9zdFNjcmlwdCBhbmQgUERGIGZpbGVzIGFzIGdyYXBoaWNzIHRvIGJlIHByaW50ZWQgXAotb24gbm9uLVBvc3RTY3JpcHQgcHJpbnRlcnMuIFN1cHBvcnRlZCBwcmludGVycyBpbmNsdWRlIGNvbW1vbiBcCi1kb3QtbWF0cml4LCBpbmtqZXQgYW5kIGxhc2VyIG1vZGVscy4gXAotIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20iCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi0KLUxJQ0VOU0UgPSAiR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMTdjZWE1NDc0MzQzNWFiMmE1ODFjMjM3YmVhMjk0YSIKLQotREVQRU5EUyA9ICJnaG9zdHNjcmlwdC1uYXRpdmUgdGlmZiBqcGVnIGZvbnRjb25maWcgY3VwcyBsaWJwbmciCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJwbmctbmF0aXZlIgotCi1TUkNfVVJJX0JBU0UgPSAiaHR0cDovL2Rvd25sb2Fkcy5naG9zdHNjcmlwdC5jb20vcHVibGljL2dob3N0c2NyaXB0LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMTUtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCi0gICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoIFwKLSAgICAgICAgICAgICAgICBmaWxlOi8vcG5nX21hay5wYXRjaCBcCi0gICAgICAgICAgICAgICAgZmlsZTovLzAwMDEtQnVnLTY5NjQ5Ny1GaXgtc3VwcG9ydC1mb3ItYnVpbGRpbmctd2l0aC1uby1qYmlnMi1kZS5wYXRjaCBcCi0gICAgICAgICAgICAgICAgZmlsZTovLzAwMDItQnVnLTY5NjQ5Ny1wYXJ0LTItZml4LXN1cHBvcnQtZm9yLWJ1aWxkaW5nLXdpdGgtYS1KUC5wYXRjaCBcCi0gICAgICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGVjay1sb2NhbC1saWJwbmctc291cmNlLnBhdGNoIFwKLSIKLQotU1JDX1VSSSA9ICIke1NSQ19VUklfQkFTRX0gXAotICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItZ2VuYXJjaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9vYmphcmNoLmggXAotICAgICAgICAgICBmaWxlOi8vY3Vwcy1uby1nY3J5cHQucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklfY2xhc3MtbmF0aXZlID0gIiR7U1JDX1VSSV9CQVNFfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjMzYTQ3NTY3ZDdhNTkxYzAwYTI1M2NhZGRkMTJhODhhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmYzkzMDc5NzQ5YTI1MGJlNTQwNGM0NjU5NDM4NTBlM2VkNWZmYmMwZDVjMDdlMTBjN2M1ZWU4YWZiYmRiMWIiCi0KLUVYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmYgLS13aXRob3V0LWpiaWcyZGVjIFwKLSAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCi0gICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmlkbiAtLXdpdGgtY3Vwcy1zZXJ2ZXJiaW49JHtleGVjX3ByZWZpeH0vbGliL2N1cHMgXAotICAgICAgICAgICAgICAgIC0td2l0aC1jdXBzLWRhdGFkaXI9JHtkYXRhZGlyfS9jdXBzIFwKLSAgICAgICAgICAgICAgICAke0BiYXNlX2NvbmRpdGlvbmFsKCdTSVRFSU5GT19FTkRJQU5ORVNTJywgJ2xlJywgJy0tZW5hYmxlLWxpdHRsZS1lbmRpYW4nLCAnLS1lbmFibGUtYmlnLWVuZGlhbicsIGQpfSBcCi0gICAgICAgICAgICAgICAgIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kX21pcHMgPSAiIC0td2l0aC1sYXJnZV9jb2xvcl9pbmRleD0wIgotRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzZWwgPSAiIC0td2l0aC1sYXJnZV9jb2xvcl9pbmRleD0wIgotCi0jIEV4cGxpY2l0eSBkaXNhYmxlIGxpYnRpZmYsIGZvbnRjb25maWcsCi0jIGZyZWV0eXBlLCBjdXBzIGZvciBnaG9zdHNjcmlwdC1uYXRpdmUKLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LXggLS13aXRoLXN5c3RlbS1saWJ0aWZmPW5vIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWpiaWcyZGVjIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRwYXRoPSR7ZGF0YWRpcn0vZm9udHMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliaWRuIC0tZGlzYWJsZS1mb250Y29uZmlnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZyZWV0eXBlIC0tZGlzYWJsZS1jdXBzIgotCi0jIFRoaXMgaGFzIGJlZW4gZml4ZWQgdXBzdHJlYW0gYnV0IGZvciBub3cgd2UgbmVlZCB0byBzdWJ2ZXJ0IHRoZSBjaGVjayBmb3IgdGltZS5oCi0jIGh0dHA6Ly9idWdzLmdob3N0c2NyaXB0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NjkyNDQzCi0jIGh0dHA6Ly9idWdzLmdob3N0c2NyaXB0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NjkyNDI2Ci1DRkxBR1MgKz0gIi1ESEFWRV9TWVNfVElNRV9IPTEiCi1CVUlMRF9DRkxBR1MgKz0gIi1ESEFWRV9TWVNfVElNRV9IPTEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQlta2RpciAtcCBvYmoKLQlta2RpciAtcCBzb29iagotCWlmIFsgLWUgJHtXT1JLRElSfS9vYmphcmNoLmggXTsgdGhlbgotCQljcCAke1dPUktESVJ9L29iamFyY2guaCBvYmovYXJjaC5oCi0JZmkKLX0KLQotZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7Ci0JIyBjb3B5IHRvb2xzIGZyb20gdGhlIG5hdGl2ZSBnaG9zdHNjcmlwdCBidWlsZAotCWlmIFsgIiR7UE59IiAhPSAiZ2hvc3RzY3JpcHQtbmF0aXZlIiBdOyB0aGVuCi0JCW1rZGlyIC1wIG9iai9hdXggc29vYmoKLQkJZm9yIGkgaW4gZ2VuYXJjaCBnZW5jb25mIG1rcm9tZnMgZWNob2dzIGdlbmRldiBnZW5odDsgZG8KLQkJCWNwICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9naG9zdHNjcmlwdC0ke1BWfS8kaSBvYmovYXV4LyRpCi0JCWRvbmUKLQlmaQotfQotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0gICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCi0gICAgY3AgLXIgJHtTfS9SZXNvdXJjZSAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KLSAgICBjcCAtciAke1N9L2ljY3Byb2ZpbGVzICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LwotfQotCi1kb19jb21waWxlX2NsYXNzLW5hdGl2ZSAoKSB7Ci0gICAgbWtkaXIgLXAgb2JqCi0gICAgZm9yIGkgaW4gZ2VuYXJjaCBnZW5jb25mIG1rcm9tZnMgZWNob2dzIGdlbmRldiBnZW5odDsgZG8KLSAgICAgICAgb2VfcnVubWFrZSBvYmovYXV4LyRpCi0gICAgZG9uZQotfQotCi1kb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSAoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9L2dob3N0c2NyaXB0LSR7UFZ9Ci0gICAgZm9yIGkgaW4gZ2VuYXJjaCBnZW5jb25mIG1rcm9tZnMgZWNob2dzIGdlbmRldiBnZW5odDsgZG8KLSAgICAgICAgaW5zdGFsbCAtbSA3NTUgb2JqL2F1eC8kaSAke0R9JHtiaW5kaXJ9L2dob3N0c2NyaXB0LSR7UFZ9LyRpCi0gICAgZG9uZQotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTIwMTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE5LmJiCkBAIC0wLDAgKzEsMTA2IEBACitTVU1NQVJZID0gIlRoZSBHUEwgR2hvc3RzY3JpcHQgUG9zdFNjcmlwdC9QREYgaW50ZXJwcmV0ZXIiCitERVNDUklQVElPTiA9ICJHaG9zdHNjcmlwdCBpcyB1c2VkIGZvciBQb3N0U2NyaXB0L1BERiBwcmV2aWV3IGFuZCBwcmludGluZy4gIFVzdWFsbHkgYXMgXAorYSBiYWNrLWVuZCB0byBhIHByb2dyYW0gc3VjaCBhcyBnaG9zdHZpZXcsIGl0IGNhbiBkaXNwbGF5IFBvc3RTY3JpcHQgYW5kIFBERiBcCitkb2N1bWVudHMgaW4gYW4gWDExIGVudmlyb25tZW50LiBcCitcCitGdXJ0aGVybW9yZSwgaXQgY2FuIHJlbmRlciBQb3N0U2NyaXB0IGFuZCBQREYgZmlsZXMgYXMgZ3JhcGhpY3MgdG8gYmUgcHJpbnRlZCBcCitvbiBub24tUG9zdFNjcmlwdCBwcmludGVycy4gU3VwcG9ydGVkIHByaW50ZXJzIGluY2x1ZGUgY29tbW9uIFwKK2RvdC1tYXRyaXgsIGlua2pldCBhbmQgbGFzZXIgbW9kZWxzLiBcCisiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdob3N0c2NyaXB0LmNvbSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWIxN2NlYTU0NzQzNDM1YWIyYTU4MWMyMzdiZWEyOTRhIgorCitERVBFTkRTID0gImdob3N0c2NyaXB0LW5hdGl2ZSB0aWZmIGpwZWcgZm9udGNvbmZpZyBjdXBzIGxpYnBuZyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnBuZy1uYXRpdmUiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vQXJ0aWZleFNvZnR3YXJlL2dob3N0cGRsLWRvd25sb2Fkcy9yZWxlYXNlcyIKKworU1JDX1VSSV9CQVNFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9BcnRpZmV4U29mdHdhcmUvZ2hvc3RwZGwtZG93bmxvYWRzL3JlbGVhc2VzL2Rvd25sb2FkL2dzOTE5LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgZmlsZTovL3BuZ19tYWsucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9kby1ub3QtY2hlY2stbG9jYWwtbGlicG5nLXNvdXJjZS5wYXRjaCBcCisiCisKK1NSQ19VUkkgPSAiJHtTUkNfVVJJX0JBU0V9IFwKKyAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqYXJjaC5oIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMtbm8tZ2NyeXB0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke1NSQ19VUklfQkFTRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjOTY4MmNlNmI4NTJmOTE5N2M2OTkwNWE0MzkyODkwNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZjNjMGRjZTY3ZGIxNTU3YTg3MzY2OTY5OTQ1ZjljNTIzNTg4Nzk4OWMwYjU4NWUwMzdhZjM2NmRjMDM1OTg5IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXggLS13aXRoLXN5c3RlbS1saWJ0aWZmIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRwYXRoPSR7ZGF0YWRpcn0vZm9udHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS13aXRoLWN1cHMtc2VydmVyYmluPSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vwcy1kYXRhZGlyPSR7ZGF0YWRpcn0vY3VwcyBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHMgPSAiIC0td2l0aC1sYXJnZV9jb2xvcl9pbmRleD0wIgorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzZWwgPSAiIC0td2l0aC1sYXJnZV9jb2xvcl9pbmRleD0wIgorCisjIEV4cGxpY2l0eSBkaXNhYmxlIGxpYnRpZmYsIGZvbnRjb25maWcsCisjIGZyZWV0eXBlLCBjdXBzIGZvciBnaG9zdHNjcmlwdC1uYXRpdmUKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LXggLS13aXRoLXN5c3RlbS1saWJ0aWZmPW5vIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWpiaWcyZGVjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRwYXRoPSR7ZGF0YWRpcn0vZm9udHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliaWRuIC0tZGlzYWJsZS1mb250Y29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZyZWV0eXBlIC0tZGlzYWJsZS1jdXBzIgorCisjIFRoaXMgaGFzIGJlZW4gZml4ZWQgdXBzdHJlYW0gYnV0IGZvciBub3cgd2UgbmVlZCB0byBzdWJ2ZXJ0IHRoZSBjaGVjayBmb3IgdGltZS5oCisjIGh0dHA6Ly9idWdzLmdob3N0c2NyaXB0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NjkyNDQzCisjIGh0dHA6Ly9idWdzLmdob3N0c2NyaXB0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NjkyNDI2CitDRkxBR1MgKz0gIi1ESEFWRV9TWVNfVElNRV9IPTEiCitCVUlMRF9DRkxBR1MgKz0gIi1ESEFWRV9TWVNfVElNRV9IPTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCBvYmoKKwlta2RpciAtcCBzb29iagorCWlmIFsgLWUgJHtXT1JLRElSfS9vYmphcmNoLmggXTsgdGhlbgorCQljcCAke1dPUktESVJ9L29iamFyY2guaCBvYmovYXJjaC5oCisJZmkKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisJIyBjb3B5IHRvb2xzIGZyb20gdGhlIG5hdGl2ZSBnaG9zdHNjcmlwdCBidWlsZAorCWlmIFsgIiR7UE59IiAhPSAiZ2hvc3RzY3JpcHQtbmF0aXZlIiBdOyB0aGVuCisJCW1rZGlyIC1wIG9iai9hdXggc29vYmoKKwkJZm9yIGkgaW4gZ2VuYXJjaCBnZW5jb25mIG1rcm9tZnMgZWNob2dzIGdlbmRldiBnZW5odDsgZG8KKwkJCWNwICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9naG9zdHNjcmlwdC0ke1BWfS8kaSBvYmovYXV4LyRpCisJCWRvbmUKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCisgICAgY3AgLXIgJHtTfS9SZXNvdXJjZSAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KKyAgICBjcCAtciAke1N9L2ljY3Byb2ZpbGVzICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworfQorCitkb19jb21waWxlX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgbWtkaXIgLXAgb2JqCisgICAgZm9yIGkgaW4gZ2VuYXJjaCBnZW5jb25mIG1rcm9tZnMgZWNob2dzIGdlbmRldiBnZW5odDsgZG8KKyAgICAgICAgb2VfcnVubWFrZSBvYmovYXV4LyRpCisgICAgZG9uZQorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9L2dob3N0c2NyaXB0LSR7UFZ9CisgICAgZm9yIGkgaW4gZ2VuYXJjaCBnZW5jb25mIG1rcm9tZnMgZWNob2dzIGdlbmRldiBnZW5odDsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgb2JqL2F1eC8kaSAke0R9JHtiaW5kaXJ9L2dob3N0c2NyaXB0LSR7UFZ9LyRpCisgICAgZG9uZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2gKaW5kZXggNWE0MTQ5Yy4uY2U1OTUwOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2gKQEAgLTEsNiArMSw2IEBACiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Bva3kgU3BlY2lmaWMgdGhpcyBpcyBncGx2MiB2ZXJzaW9uXQogCi1TaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KIAogSW5kZXg6IGdyZXAtMi41LjFhL2RvYy9ncmVwLnRleGkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoCmluZGV4IDcyMWYyYTAuLmE0MGE5ZjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaApAQCAtMTIsNyArMTIsNyBAQAogYWNjZXB0aW5nIHBhdGNoZXMuICBUaGlzIGlzIG5vdCBhIGJhY2twb3J0LgogQ1ZFOiBDVkUtMjAxMi01NjY3CiAKLVNpZ25lZC1vZmYtYnkgTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KIC0tLQogIGdyZXAuYyB8ICAgIDcgKysrLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggM2NjY2U1Zi4uZDliMWUzNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMTMsNyArMTMsNyBAQAogfCBzcmMvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAogfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDQKIAogSW5kZXg6IGdyZXAtMi41LjFhL2NvbmZpZ3VyZS5pbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi4yMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZmYzMmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi4yMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLVNVTU1BUlkgPSAiR05VIGdyZXAgdXRpbGl0eSIKLUhPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL2dyZXAvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9ncm91cD1ncmVwIgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTgwMDZkOWM4MTQyNzdjMWJmYzRjYTIyYWY5NGI1OWVlIgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JlcC9ncmVwLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmNDZhYTlkMGQyNTc3YjkyMTJhMTA0MzQ4YTI4Njc4NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1NGZjNDc4ZWUxY2UxNzc4MDEwOTgyMGVmMzA3MzBjOWUxODcxNWE5NDlmN2Q1YzZhZmM2NzNhZGIyYTU2ZWNmIgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1wZXJsLXJlZ2V4cCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCXJtIC1mICR7U30vbTQvaW5pdC5tNAotfQotCi1kb19pbnN0YWxsICgpIHsKLQlhdXRvdG9vbHNfZG9faW5zdGFsbAotCWlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9Ci0JCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAotCQltdiAke0R9JHtiaW5kaXJ9L2VncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9lZ3JlcAotCQltdiAke0R9JHtiaW5kaXJ9L2ZncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9mZ3JlcAotCQlybWRpciAke0R9JHtiaW5kaXJ9LwotCWZpCi19Ci0KLWluaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCi0KLUFMVEVSTkFUSVZFXyR7UE59ID0gImdyZXAgZWdyZXAgZmdyZXAiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3JlcCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtlZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZWdyZXAiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZmdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2ZncmVwIgotCi1leHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyMGQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjUuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA0ZTk2YjBlNmYwZmU2YTE4MGFlNjJjODhmY2QwYWY2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyMWU4M2JhYzUwNDUwZTBkMGQ2MWE0MmMxNTRlZTBkY2VhYWNkYmY0ZjYwNGVmNmU3OTA3MWNiOGU1OTY4MzAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXBlcmwtcmVnZXhwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9pbml0Lm00Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJbXYgJHtEfSR7YmluZGlyfS9ncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9ncmVwCisJCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCisJCW12ICR7RH0ke2JpbmRpcn0vZmdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2ZncmVwCisJCXJtZGlyICR7RH0ke2JpbmRpcn0vCisJZmkKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ3JlcCBlZ3JlcCBmZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9ncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2VncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9lZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZmdyZXAiCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2ZpeC1uYXJyb3dpbmctY29udmVyc2lvbi1lcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZml4LW5hcnJvd2luZy1jb252ZXJzaW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMDE3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2ZpeC1uYXJyb3dpbmctY29udmVyc2lvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDYxIEBACitGcm9tIGZjMjg5YWI2OWM2ZDdlNGFkNDg5MTcyNTA5YTg1ZjY4YWZlYzQzZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI5IEp1bCAyMDE2IDAzOjE5OjM5IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBuYXJyb3dpbmcgY29udmVyc2lvbiBlcnJvcgorCitXaGlsZSBnY2M2IHVzZWQsIGJ1aWxkIG9sZCBncm9mZiAoZm9yIGFudGktR1BMdjMgcmVhc29ucykgZmFpbGVkOgorLi4uLi4KK3xncm9mZi0xLjE4LjEuNC9zcmMvZGV2aWNlcy9ncm9sYnAvY2hhcnNldC5oOjY5OjE6IGVycm9yOiBuYXJyb3dpbmcKK2NvbnZlcnNpb24gb2YgJzEzMCcgZnJvbSAnaW50JyB0byAnY2hhcicgaW5zaWRlIHsgfSBbLVduYXJyb3dpbmddCisuLi4uLi4KKworSW4gdXBzdHJlYW0gZ2l0Oi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ3JvZmYuZ2l0LAordGhlIGZvbGxvd2luZyBjb21taXQgZml4IHRoZSBpc3N1ZSwgYnV0IHRoZSBsaWNlbnNlIGlzIEdQTFYzLAord2UgY291bGQgbm90IGJhY2twb3J0IGl0IHRvIHRoZSBvbGQgZ3JvZmYgd2hpY2ggbGljZW5zZSBpcyBHUExWMi4KKy4uLgorY29tbWl0IGQxODAwMzhhZTBkYTE5NjU1YmMyNzYwYWUyMDQzZWZhMDU1MGE3NmMKK0F1dGhvcjogV2VybmVyIExFTUJFUkcgPHdsQGdudS5vcmc+CitEYXRlOiAgIFdlZCBBcHIgMTYgMjE6MTE6MDcgMjAwMyArMDAwMAorICAgICogc3JjL2RldmljZXMvZ3JvbGJwL2NoYXJzZXQuaCAoc3ltc2V0KTogVXNlIGB1bnNpZ25lZCBjaGFyJy4KKy4uLgorCitXZSB1c2UgYW5vdGhlciBkaWZmZXJlbnQgd2F5IHRvIGZpeCB0aGUgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvZGV2aWNlcy9ncm9sYnAvY2hhcnNldC5oIHwgMiArLQorIHNyYy9kZXZpY2VzL2dyb2xicC9sYnAuY2MgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kZXZpY2VzL2dyb2xicC9jaGFyc2V0LmggYi9zcmMvZGV2aWNlcy9ncm9sYnAvY2hhcnNldC5oCitpbmRleCBhZGM3NmY0Li5lOWM2YzViIDEwMDY0NAorLS0tIGEvc3JjL2RldmljZXMvZ3JvbGJwL2NoYXJzZXQuaAorKysrIGIvc3JjL2RldmljZXMvZ3JvbGJwL2NoYXJzZXQuaAorQEAgLTEsNiArMSw2IEBACisgLy8gRGVmaW5pdGlvbiBvZiB0aGUgV1A1NCBjaGFyYWN0ZXIgc2V0CisgCistY2hhciBzeW1zZXRbXSA9IHsKKytpbnQgc3ltc2V0W10gPSB7CisgMHg1NywweDUwLDB4MzUsMHgzNCwweDAwLDB4NDEsMHg3NiwweDYxLDB4NmUsMHg3NCwweDQ3LDB4NjEsCisgMHg3MiwweDY0LDB4NjUsMHgyZCwweDQyLDB4NmYsMHg2ZiwweDZiLDB4MDAsMHg0MSwweDc2LAorIDB4NjEsMHg2ZSwweDc0LDB4NDcsMHg2MSwweDcyLDB4NjQsMHg2NSwweDJkLDB4NDQsMHg2NSwKK2RpZmYgLS1naXQgYS9zcmMvZGV2aWNlcy9ncm9sYnAvbGJwLmNjIGIvc3JjL2RldmljZXMvZ3JvbGJwL2xicC5jYworaW5kZXggNzZkYjMyYS4uMDBkNGNhNyAxMDA2NDQKKy0tLSBhL3NyYy9kZXZpY2VzL2dyb2xicC9sYnAuY2MKKysrKyBiL3NyYy9kZXZpY2VzL2dyb2xicC9sYnAuY2MKK0BAIC0xNTIsOCArMTUyLDggQEAgc3RhdGljIHZvaWQgd3A1NGNoYXJzZXQoKQorIHsKKyAgIHVuc2lnbmVkIGludCBpOworICAgbGJwcHV0cygiXDAzM1s3MTQ7MTAwOzI5OzA7MzI7MTIwLn0iKTsKKy0gIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3ltc2V0KTsgaSsrKQorLSAgICBsYnBwdXRjKHN5bXNldFtpXSk7CisrICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN5bXNldCkvc2l6ZW9mKHN5bXNldFswXSk7IGkrKykKKysgICAgbGJwcHV0YygoY2hhcilzeW1zZXRbaV0mMHhGRik7CisgICBsYnBwdXRzKCJcMDMzWzEwMDswIEQiKTsKKyAgIHJldHVybjsKKyB9CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMTguMS40LmJiCmluZGV4IGJkNzg2YTMuLmZjN2ViNDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgpAQCAtMTMsNiArMTMsNyBAQAogICAgICAgICAgIGZpbGU6Ly9tYW4tbG9jYWwucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly9tZG9jLWxvY2FsLnBhdGNoIFwKICAgICAgICAgICBmaWxlOi8vZ3JvZmYtMS4xOC4xLjQtZml4LWJpbmRpci5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2ZpeC1uYXJyb3dpbmctY29udmVyc2lvbi1lcnJvci5wYXRjaCBcCiAiIAogCiBpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiCmluZGV4IDRiZmZhODEuLmRkMjQxZjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiCkBAIC01Niw2ICs1NiwxNyBAQAogCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzIF07IHRoZW4KIAkJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcwogCWZpCisKKwkjIGF3ayBpcyBsb2NhdGVkIGF0IC91c3IvYmluLywgbm90IC9iaW4vCisJU1BFQ0lBTF9BV0s9YGZpbmQgJHtEfSAtbmFtZSBzcGVjaWFsLmF3a2AKKwlpZiBbIC1mICR7U1BFQ0lBTF9BV0t9IF07IHRoZW4KKwkJc2VkIC1pIC1lICdzOiMhLiphd2s6IyEgJHtVU1JCSU5QQVRIfS9hd2s6JyAke1NQRUNJQUxfQVdLfQorCWZpCisKKwkjIG5vdCBzaGlwIC91c3IvYmluL2dsaWx5cG9uZCBhbmQgaXRzIHJlbGVhdGVkIGZpbGVzIGluIGVtYmVkZGVkIHRhcmdldCBzeXN0ZW0KKwlybSAtcmYgJHtEfSR7YmluZGlyfS9nbGlseXBvbmQKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9ncm9mZi9nbGlseXBvbmQKKwlybSAtcmYgJHtEfSR7bWFuZGlyfS9tYW4xL2dsaWx5cG9uZCoKIH0KIAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mjg2M2Q2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuNi93cm9uZy1wYXRoLWZpeC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLWZpeCBNYWtlTWFrZXIgaXNzdWVzIHdpdGggdXNpbmcgd3JvbmcgU0hFTEwvR1JFUAotCi1BIHNldCBvZiBzdWJzdGl0dXRpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbCB0YXJnZXQgc2NyaXB0cyB3aXRoIHNlZCBieQotcmVwbGFjaW5nIHNvbWUga2V5IHdvcmRzIHdpdGggdGhlIGRldGVjdGVkIHZhbHVlcyBhdCBjb25maWd1cmUgdGltZSwgdGhpcwotaXMgZXhhY3RseSBub3QgY29tcGxpYW50IHdpdGggY3Jvc3MgY29tcGxpbmcsIGFuZCB3aWxsIGNhdXNlIG1pc3NpbmcgcGF0aAotZXJyb3JzIGF0IHJ1biB0aW1lIGxpa2U6Ci0iL3Vzci9iaW4vemdyZXA6IGxpbmUgMjMwOiAvdXNyL2Jpbi9ncmVwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgotCi1GaXhlZCBieSByZW1vdmluZyB1bm5lZWRlZCBzdWJzdGl0dXRpb24gYW5kIHVzaW5nIHJlYWwgcnVudGltZSBwYXRocwotaW5zdGVhZC4KLQotU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogZ3ppcC0xLjMuMTIvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRpZmYgLXVycE4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi0tLS0gYS9NYWtlZmlsZS5hbQkyMDEzLTExLTMwIDEwOjA2OjA5LjQwMjIzNDg3MSArMDgwMAotKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0xMS0zMCAxMDoxMzo0Mi45NTIyMzYwMjUgKzA4MDAKLUBAIC04MSw5ICs4MSw4IEBAIGd6aXAuZG9jLmd6OiBnemlwLmRvYyAkKGJpbl9QUk9HUkFNUykKLSBTVUZGSVhFUyA9IC5pbgotIC5pbjoKLSAJJChBTV9WX0dFTilzZWQgXAotLQkJLWUgJ3N8L2Jpbi9zaHwkKFNIRUxMKXxnJyBcCi0gCQktZSAnc3xbQF1iaW5kaXJAfCdcJyckKGJpbmRpciknXCcnfGcnIFwKLS0JCS1lICdzfFtAXUdSRVBAfCQoR1JFUCl8ZycgXAotKwkJLWUgJ3N8W0BdR1JFUEB8JChiYXNlX2JpbmRpcikvZ3JlcHxnJyBcCi0gCQktZSAnc3xbQF1WRVJTSU9OQHwkKFZFUlNJT04pfGcnIFwKLSAJCSQoc3JjZGlyKS8kQC5pbiA+JEAtdCBcCi0gCSAgJiYgY2htb2QgYSt4ICRALXQgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS44L3dyb25nLXBhdGgtZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS44L3dyb25nLXBhdGgtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzEwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjgvd3JvbmctcGF0aC1maXgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorZml4IE1ha2VNYWtlciBpc3N1ZXMgd2l0aCB1c2luZyB3cm9uZyBTSEVMTC9HUkVQCisKK0Egc2V0IG9mIHN1YnN0aXR1dGlvbiBpcyBiZWluZyBwcm9jZXNzZWQgdG8gYWxsIHRhcmdldCBzY3JpcHRzIHdpdGggc2VkIGJ5CityZXBsYWNpbmcgc29tZSBrZXkgd29yZHMgd2l0aCB0aGUgZGV0ZWN0ZWQgdmFsdWVzIGF0IGNvbmZpZ3VyZSB0aW1lLCB0aGlzCitpcyBleGFjdGx5IG5vdCBjb21wbGlhbnQgd2l0aCBjcm9zcyBjb21wbGluZywgYW5kIHdpbGwgY2F1c2UgbWlzc2luZyBwYXRoCitlcnJvcnMgYXQgcnVuIHRpbWUgbGlrZToKKyIvdXNyL2Jpbi96Z3JlcDogbGluZSAyMzA6IC91c3IvYmluL2dyZXA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCisKK0ZpeGVkIGJ5IHJlbW92aW5nIHVubmVlZGVkIHN1YnN0aXR1dGlvbiBhbmQgdXNpbmcgcmVhbCBydW50aW1lIHBhdGhzCitpbnN0ZWFkLgorCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnemlwLTEuOC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd6aXAtMS44Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnemlwLTEuOC9NYWtlZmlsZS5hbQorQEAgLTgxLDggKzgxLDcgQEAgZ3ppcC5kb2MuZ3o6IGd6aXAuZG9jICQoYmluX1BST0dSQU1TKQorIFNVRkZJWEVTID0gLmluCisgLmluOgorIAkkKEFNX1ZfR0VOKXNlZCBcCistCQktZSAnc3wvYmluL3NofCQoU0hFTEwpfGcnIFwKKy0JCS1lICdzfFtAXUdSRVBAfCQoR1JFUCl8ZycgXAorKwkJLWUgJ3N8W0BdR1JFUEB8JChiYXNlX2JpbmRpcikvZ3JlcHxnJyBcCisgCQktZSAnc3xbQF1WRVJTSU9OQHwkKFZFUlNJT04pfGcnIFwKKyAJCSQoc3JjZGlyKS8kQC5pbiA+JEAtdCBcCisgCSAgJiYgY2htb2QgYSt4ICRALXQgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAuaW5jCmluZGV4IDZlODE4ODMuLjA0ZjhmOTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMKQEAgLTIyLDExICsyMiw2IEBACiAJZmkKIH0KIAotZG9faW5zdGFsbF9hcHBlbmRfbGliYy1tdXNsICgpIHsKLQlybSAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKLQlybWRpciAke0R9JHtsaWJkaXJ9Ci19Ci0KIGluaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcwogCiBBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNDdmMGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcmVxdWlyZSBnemlwLmluYwotCi1MSUNFTlNFID0gIkdQTHYzKyIKLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d6aXAvJHtCUH0udGFyLmd6IgotU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBmaWxlOi8vd3JvbmctcGF0aC1maXgucGF0Y2giCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIwO21kNT02ZTQ3Y2FhYTYzMGUwYzhiZjlmMWJjOGQ5NGE4ZWQwZSIKLQotUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ3ppcC1yZXBsYWNlbWVudC1uYXRpdmUiCi1OQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzg2MDNjYjI4NDNiZjU2ODFmZjQxYWFiM2JjZDZhMjAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTdlYjgzYjc2M2Q5ZTVhZDM1ZjM1MWZlNTUxN2U2YjcxNTIxZDdhYWM3YWNmM2UzY2FjZGI2YjE0OTZkOGY3ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTliOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS44LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgZ3ppcC5pbmMKKworTElDRU5TRSA9ICJHUEx2MysiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nemlwLyR7QlB9LnRhci5neiIKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZmlsZTovL3dyb25nLXBhdGgtZml4LnBhdGNoIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nemlwLmg7YmVnaW5saW5lPTg7ZW5kbGluZT0yMDttZDU9NmU0N2NhYWE2MzBlMGM4YmY5ZjFiYzhkOTRhOGVkMGUiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGd6aXAtcmVwbGFjZW1lbnQtbmF0aXZlIgorTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjczMjU1MzE1MjgxNGIyMmRjMzVhYTAyNjdkZjUyODZjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmZjdhZWRiM2Q2NmEwZDczZjQ0MmY2MjYxZTRiMzg2MGRmNmZkNmM5NDAyNWMyY2IzMWEyMDJjOWM2MGZlMGUiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjQ4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKaW5kZXggZWMzZDI2Zi4uY2Q4NTc3NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKQEAgLTIsOCArMiwxMiBAQAogREVTQ1JJUFRJT04gPSAiaGRwYXJtIGlzIGEgTGludXggc2hlbGwgdXRpbGl0eSBmb3Igdmlld2luZyBcCiBhbmQgbWFuaXB1bGF0aW5nIHZhcmlvdXMgSURFIGRyaXZlIGFuZCBkcml2ZXIgcGFyYW1ldGVycy4iCiBTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1MSUNFTlNFID0gIkJTRCIKKworTElDRU5TRSA9ICJCU0QgJiBHUEx2MiIKK0xJQ0VOU0VfJHtQTn0gPSAiQlNEIgorTElDRU5TRV8ke1BOfS1kYmcgPSAiQlNEIgogTElDRU5TRV93aXBlciA9ICJHUEx2MiIKKwogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5UWFQ7bWQ1PTkxMGE4YTQyYzk2MmQyMzg2MTljNzVmZGI3OGJkYjI0IFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWE4MmQ3YmEzYWRlOWU4ZWM5MDI3NDlkYjk4YzU5MmYzIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL0dQTHYyLnR4dDttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjcgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1rZXJuZWwtZGV2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1rZXJuZWwtZGV2LmJiCmluZGV4IDI2Yjg4YzkuLmE0MGIzYWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWtlcm5lbC1kZXYuYmIKQEAgLTE0LDcgKzE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCiAKICMgV2UgbmVlZCBleHRyYSBzcGFjZSBmb3IgdGhpbmdzIGxpa2Uga2VybmVsIGJ1aWxkcywgZXRjLgotSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFX2FwcGVuZCArPSAiKyAzMDAwMDAwIgorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFX2FwcGVuZCA9ICIgKyAzMDAwMDAwIgogCiAjIExldCdzIGRlZmluZSBvdXIgb3duIHN1YnNldCB0byB0ZXN0LCB3ZSBjYW4gbGF0ZXIgYWRkIGEgb24tdGFyZ2V0IGtlcm5lbCBidWlsZCBldmVuIQogREVGQVVMVF9URVNUX1NVSVRFUyA9ICJwaW5nIHNzaCBkZiBjb25ubWFuIHN5c2xvZyBzY3AgZGF0ZSBwYXJzZWxvZ3MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcy5iYgppbmRleCBhZDE0MDdjLi4wOWE2ZDE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKQEAgLTE4LDMgKzE4LDYgQEAKIElNQUdFX1JPT1RGU19TSVpFID0gIjgxOTIiCiBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiMCIKIEJBRF9SRUNPTU1FTkRBVElPTlMgKz0gImJ1c3lib3gtc3lzbG9nIgorCisjIFVzZSB0aGUgc2FtZSByZXN0cmljdGlvbiBhcyBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3RmcworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vbGliYWlvX2ZpeF9mb3JfeDMyLnBhdGNoCmluZGV4IDUwOGY1YTEuLmRjNGJhNTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaApAQCAtNiw3ICs2LDcgQEAKIAogUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMS8xMi8wMgogCiAtLS0gbGliYWlvLTAuMy4xMDkvc3JjL3N5c2NhbGwteDg2XzY0LmgueDMyCTIwMDktMTAtMDkgMTE6MTc6MDIuMDAwMDAwMDAwIC0wNzAwCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiCmluZGV4IDJhZGZhMGEuLjc1OTc1ZDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiCkBAIC01LDcgKzUsNyBAQAogTElDRU5TRSA9ICJMR1BMdjIuMSsiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kODA0NWYzYjhmOTI5YzFjYjI5YTFlM2ZkNzM3YjQ5OSIKIAotU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGliYS9saWJhaW8vbGliYWlvXyR7UFZ9Lm9yaWcudGFyLmd6IFwKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjA3MjhUMDQzNDQzWi9wb29sL21haW4vbGliYS8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDBfYXJjaGVzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2Rlc3RkaXIucGF0Y2ggXApAQCAtMTcsNiArMTcsOCBAQAogU1JDX1VSSVttZDVzdW1dID0gIjJhMzU2MDJlNDM3NzgzODNlMmY0OTA3YTRjYTM5YWI4IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwMTkwMjhlNjMxNzI1NzI5Mzc2MjUwZTMyYjQ3MzAxMmY3Y2I2OGUxZjcyNzViZmMxYmJjZGQwZjg3NDVmN2UiCiAKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGliYS9saWJhaW8vIgorCiBFWFRSQV9PRU1BS0UgPSsgInByZWZpeD0ke3ByZWZpeH0gaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9IGxpYmRpcj0ke2xpYmRpcn0iCiAKIGRvX2luc3RhbGwgKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvMDAwMS1TZXQteGF0dHJzLWFmdGVyLXNldHRpbmctdGltZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS8wMDAxLVNldC14YXR0cnMtYWZ0ZXItc2V0dGluZy10aW1lcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3NGU4Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS8wMDAxLVNldC14YXR0cnMtYWZ0ZXItc2V0dGluZy10aW1lcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLUZyb20gNTQ1ZGVkNTYwOTVjNTcwNDI2ZmUxMDJmZjIxOTI4ODk2ODFlYTc1YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBSb3poa292IDxkbWl0cnkucm96aGtvdkBsaW51eC5pbnRlbC5jb20+Ci1EYXRlOiBNb24sIDI5IEZlYiAyMDE2IDE0OjM4OjI1ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIFNldCB4YXR0cnMgYWZ0ZXIgc2V0dGluZyB0aW1lcwotCi1XaXRoIEludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUgKElNQSkgZW5hYmxlZCBpbiBMaW51eAota2VybmVsIHRoZSBzZWN1cml0eS5pbWEgZXh0ZW5kZWQgYXR0cmlidXRlIGdldHMgb3ZlcndyaXR0ZW4KLXdoZW4gc2V0dGluZyB0aW1lcyBvbiBhIGZpbGUgd2l0aCBhIGZ1dGltZW5zKCkgY2FsbC4gU28gaXQncyBzYWZlcgotdG8gc2V0IHhhdHRycyBhZnRlciB0aW1lcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcHVsbC82NjRdCi0KLVNpZ25lZC1vZmYtYnk6IERtaXRyeSBSb3poa292IDxkbWl0cnkucm96aGtvdkBsaW51eC5pbnRlbC5jb20+Ci0KLS0tLQotIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgfCAyMSArKysrKysrKysrKy0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwotaW5kZXggMGZjNjE5My4uMjdjOWMxZSAxMDA2NDQKLS0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKLSsrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKLUBAIC0xNjIwLDE2ICsxNjIwLDYgQEAgX2FyY2hpdmVfd3JpdGVfZGlza19maW5pc2hfZW50cnkoc3RydWN0IGFyY2hpdmUgKl9hKQotCX0KLQotCS8qCi0tCSAqIFNlY3VyaXR5LXJlbGF0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoc3VjaCBhcwotLQkgKiBzZWN1cml0eS5jYXBhYmlsaXR5IG9uIExpbnV4KSBoYXZlIHRvIGJlIHJlc3RvcmVkIGxhc3QsCi0tCSAqIHNpbmNlIHRoZXkncmUgaW1wbGljaXRseSByZW1vdmVkIGJ5IG90aGVyIGZpbGUgY2hhbmdlcy4KLS0JICovCi0tCWlmIChhLT50b2RvICYgVE9ET19YQVRUUikgewotLQkJaW50IHIyID0gc2V0X3hhdHRycyhhKTsKLS0JCWlmIChyMiA8IHJldCkgcmV0ID0gcjI7Ci0tCX0KLS0KLS0JLyoKLQkgKiBTb21lIGZsYWdzIHByZXZlbnQgZmlsZSBtb2RpZmljYXRpb247IHRoZXkgbXVzdCBiZSByZXN0b3JlZCBhZnRlcgotCSAqIGZpbGUgY29udGVudHMgYXJlIHdyaXR0ZW4uCi0JICovCi1AQCAtMTY0OCw2ICsxNjM4LDE3IEBAIF9hcmNoaXZlX3dyaXRlX2Rpc2tfZmluaXNoX2VudHJ5KHN0cnVjdCBhcmNoaXZlICpfYSkKLQl9Ci0KLQkvKgotKwkgKiBTZWN1cml0eS1yZWxhdGVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHN1Y2ggYXMKLSsJICogc2VjdXJpdHkuY2FwYWJpbGl0eSBvciBzZWN1cml0eS5pbWEgb24gTGludXgpIGhhdmUgdG8gYmUgcmVzdG9yZWQgbGFzdCwKLSsJICogc2luY2UgdGhleSdyZSBpbXBsaWNpdGx5IHJlbW92ZWQgYnkgb3RoZXIgZmlsZSBjaGFuZ2VzIGxpa2Ugc2V0dGluZwotKwkgKiB0aW1lcy4KLSsJICovCi0rCWlmIChhLT50b2RvICYgVE9ET19YQVRUUikgewotKwkJaW50IHIyID0gc2V0X3hhdHRycyhhKTsKLSsJCWlmIChyMiA8IHJldCkgcmV0ID0gcjI7Ci0rCX0KLSsKLSsJLyoKLQkgKiBNYWMgZXh0ZW5kZWQgbWV0YWRhdGEgaW5jbHVkZXMgQUNMcy4KLQkgKi8KLQlpZiAoYS0+dG9kbyAmIFRPRE9fTUFDX01FVEFEQVRBKSB7Ci0tLQotMi41LjAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk1MjNmNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlLUNWRS0yMDEzLTAyMTEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1Gcm9tIDJmNTVkNmJkMzA4ZWE2MTk3NTU1OGMyNDY5YWUzNDlkYmEyOTdlODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLURhdGU6IFNhdCwgMjIgRmViIDIwMTQgMTQ6MzU6NTkgKzA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IENWRS0yMDEzLTAyMTEKLQotVGhpcyBwYXRjaCBjb21lcyBmcm9tOmh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29tbWl0LzIyNTMxNTQ1NTE0MDQzZTA0NjMzZTFjMDE1Yzc1NDBiOWRlOWRiZTQKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxMy0wMjExCi0KLVNpZ25lZC1vZmYtYnk6IEJhb2dlbiBzaGFuZyA8YmFvZ2VuLnNoYW5nQHdpbmRyaXZlci5jb20+Ci0KLVVwZGF0ZSB0aGUgcGF0Y2ggYmVjYXVzZSBvZiB1cHJldiBvbiAyMDE0MDIyMgotCi1TaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jIHwgNCArKysrCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYwotaW5kZXggYTNkMWEzMy4uYTMyMzU4OCAxMDA2NDQKLS0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCi0rKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYwotQEAgLTY3MSw4ICs2NzEsMTIgQEAgc3RhdGljIHNzaXplX3QKLSBfYXJjaGl2ZV93cml0ZV9kYXRhKHN0cnVjdCBhcmNoaXZlICpfYSwgY29uc3Qgdm9pZCAqYnVmZiwgc2l6ZV90IHMpCi0gewotIAlzdHJ1Y3QgYXJjaGl2ZV93cml0ZSAqYSA9IChzdHJ1Y3QgYXJjaGl2ZV93cml0ZSAqKV9hOwotKwljb25zdCBzaXplX3QgbWF4X3dyaXRlID0gSU5UX01BWDsKLSAJYXJjaGl2ZV9jaGVja19tYWdpYygmYS0+YXJjaGl2ZSwgQVJDSElWRV9XUklURV9NQUdJQywKLSAJICAgIEFSQ0hJVkVfU1RBVEVfREFUQSwgImFyY2hpdmVfd3JpdGVfZGF0YSIpOwotKwkvKiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGNhdGNoZXMgYXR0ZW1wdHMgdG8gcGFzcyBuZWdhdGl2ZSB2YWx1ZXMuICovCi0rCWlmIChzID4gbWF4X3dyaXRlKQotKwkJcyA9IG1heF93cml0ZTsKLSAJYXJjaGl2ZV9jbGVhcl9lcnJvcigmYS0+YXJjaGl2ZSk7Ci0gCXJldHVybiAoKGEtPmZvcm1hdF93cml0ZV9kYXRhKShhLCBidWZmLCBzKSk7Ci0gfQotLS0gCi0xLjguMi4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTUtMjMwNC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTUtMjMwNC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMyNDM5Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlLUNWRS0yMDE1LTIzMDQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotRnJvbSA1OTM1NzE1NzcwNmQ0N2MzNjViMjIyNzczOWUxN2RhYmEzNjA3NTI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxlc3NhbmRybyBHaGVkaW5pIDxhbGVzc2FuZHJvQGdoZWRpbmkubWU+Ci1EYXRlOiBTdW4sIDEgTWFyIDIwMTUgMTI6MDc6NDUgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gQWRkIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTIG9wdGlvbgotCi1UaGlzIGZpeGVzIGEgZGlyZWN0b3J5IHRyYXZlcnNhbCBpbiB0aGUgY3BpbyB0b29sLgotCi0KLVVwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKLUNWRTogQ1ZFLTIwMTUtMjMwNAotCi1TaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+Ci0tLS0KLSBjcGlvL2JzZGNwaW8uMSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArKy0KLSBjcGlvL2NwaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArKwotIGxpYmFyY2hpdmUvYXJjaGl2ZS5oICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsrCi0gbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMyAgICAgICAgICB8ICAgIDMgKysrCi0gbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYyAgICB8ICAgMTQgKysrKysrKysrKystLS0KLSBsaWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jIHwgICAyMyArKysrKysrKysrKysrKysrKysrKysrKwotIDYgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NwaW8vYnNkY3Bpby4xIGIvY3Bpby9ic2RjcGlvLjEKLWluZGV4IGY5NjZhYTAuLmU1MjU0NmUgMTAwNjQ0Ci0tLS0gYS9jcGlvL2JzZGNwaW8uMQotKysrIGIvY3Bpby9ic2RjcGlvLjEKLUBAIC0xNTYsNyArMTU2LDggQEAgU2VlIGFib3ZlIGZvciBkZXNjcmlwdGlvbi4KLSAuSXQgRmwgRmwgaW5zZWN1cmUKLSAoaSBhbmQgcCBtb2RlIG9ubHkpCi0gRGlzYWJsZSBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGV4dHJhY3Rpb24gb3IgY29weWluZy4KLS1UaGlzIGFsbG93cyBleHRyYWN0aW9uIHZpYSBzeW1ib2xpYyBsaW5rcyBhbmQgcGF0aCBuYW1lcyBjb250YWluaW5nCi0rVGhpcyBhbGxvd3MgZXh0cmFjdGlvbiB2aWEgc3ltYm9saWMgbGlua3MsIGFic29sdXRlIHBhdGhzLAotK2FuZCBwYXRoIG5hbWVzIGNvbnRhaW5pbmcKLSAuU3EgLi4KLSBpbiB0aGUgbmFtZS4KLSAuSXQgRmwgSiAsIEZsIEZsIHh6Ci1kaWZmIC0tZ2l0IGEvY3Bpby9jcGlvLmMgYi9jcGlvL2NwaW8uYwotaW5kZXggMGFjZGUxMS4uYjI2N2U5YiAxMDA2NDQKLS0tLSBhL2NwaW8vY3Bpby5jCi0rKysgYi9jcGlvL2NwaW8uYwotQEAgLTE3MSw2ICsxNzEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX05PX09WRVJXUklURV9ORVdFUjsKLSAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX1NZTUxJTktTOwotIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9ET1RET1Q7Ci0rCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFM7Ci0gCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1BFUk07Ci0gCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX0ZGTEFHUzsKLSAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfQUNMOwotQEAgLTI1Niw2ICsyNTcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCQljYXNlIE9QVElPTl9JTlNFQ1VSRToKLSAJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX1NZTUxJTktTOwotIAkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9ET1RET1Q7Ci0rCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFM7Ci0gCQkJYnJlYWs7Ci0gCQljYXNlICdMJzogLyogR05VIGNwaW8gKi8KLSAJCQljcGlvLT5vcHRpb25fZm9sbG93X2xpbmtzID0gMTsKLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmUuaCBiL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCi1pbmRleCAxZjBmYzM4Li5lZjYzNWFjIDEwMDY0NAotLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlLmgKLSsrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCi1AQCAtNjQ5LDYgKzY0OSw4IEBAIF9fTEFfREVDTCBpbnQgYXJjaGl2ZV9yZWFkX3NldF9wYXNzcGhyYXNlX2NhbGxiYWNrKHN0cnVjdCBhcmNoaXZlICosCi0gLyogRGVmYXVsdDogRG8gbm90IHVzZSBIRlMrIGNvbXByZXNzaW9uIGlmIGl0IHdhcyBub3QgY29tcHJlc3NlZC4gKi8KLSAvKiBUaGlzIGhhcyBubyBlZmZlY3QgZXhjZXB0IG9uIE1hYyBPUyB2MTAuNiBvciBsYXRlci4gKi8KLSAjZGVmaW5lCUFSQ0hJVkVfRVhUUkFDVF9IRlNfQ09NUFJFU1NJT05fRk9SQ0VECSgweDgwMDApCi0rLyogRGVmYXVsdDogRG8gbm90IHJlamVjdCBlbnRyaWVzIHdpdGggYWJzb2x1dGUgcGF0aHMgKi8KLSsjZGVmaW5lIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTICgweDEwMDAwKQotIAotIF9fTEFfREVDTCBpbnQgYXJjaGl2ZV9yZWFkX2V4dHJhY3Qoc3RydWN0IGFyY2hpdmUgKiwgc3RydWN0IGFyY2hpdmVfZW50cnkgKiwKLSAJCSAgICAgaW50IGZsYWdzKTsKLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMwotaW5kZXggZmE5MjVjYy4uYTJlN2FmYSAxMDA2NDQKLS0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKLSsrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKLUBAIC0xNzcsNiArMTc3LDkgQEAgVGhlIGRlZmF1bHQgaXMgdG8gbm90IHJlZnVzZSBzdWNoIHBhdGhzLgotIE5vdGUgdGhhdCBwYXRocyBlbmRpbmcgaW4KLSAuUGEgLi4KLSBhbHdheXMgY2F1c2UgYW4gZXJyb3IsIHJlZ2FyZGxlc3Mgb2YgdGhpcyBmbGFnLgotKy5JdCBDbSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUwotK1JlZnVzZSB0byBleHRyYWN0IGFuIGFic29sdXRlIHBhdGguCi0rVGhlIGRlZmF1bHQgaXMgdG8gbm90IHJlZnVzZSBzdWNoIHBhdGhzLgotIC5JdCBDbSBBUkNISVZFX0VYVFJBQ1RfU1BBUlNFCi0gU2NhbiBkYXRhIGZvciBibG9ja3Mgb2YgTlVMIGJ5dGVzIGFuZCB0cnkgdG8gcmVjcmVhdGUgdGhlbSB3aXRoIGhvbGVzLgotIFRoaXMgcmVzdWx0cyBpbiBzcGFyc2UgZmlsZXMsIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdGhlIGFyY2hpdmUgZm9ybWF0Ci1kaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKLWluZGV4IGFiM2JkYWMuLmMxMjkwZWIgMTAwNjQ0Ci0tLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCi0rKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCi1AQCAtMjUwOSw4ICsyNTA5LDkgQEAgY2xlYW51cF9wYXRobmFtZV93aW4oc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKLSAvKgotICAqIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIHN0cmlwcyBkdXBsaWNhdGUKLSAgKiAnLycgY2hhcmFjdGVycywgJy4nIGVsZW1lbnRzLCBhbmQgdHJhaWxpbmcgJy8nLiAgSXQgYWxzbyByYWlzZXMgYW4KLS0gKiBlcnJvciBmb3IgYW4gZW1wdHkgcGF0aCwgYSB0cmFpbGluZyAnLi4nIG9yIChpZiBfU0VDVVJFX05PRE9URE9UIGlzCi0tICogc2V0KSBhbnkgJy4uJyBpbiB0aGUgcGF0aC4KLSsgKiBlcnJvciBmb3IgYW4gZW1wdHkgcGF0aCwgYSB0cmFpbGluZyAnLi4nLCAoaWYgX1NFQ1VSRV9OT0RPVERPVCBpcwotKyAqIHNldCkgYW55ICcuLicgaW4gdGhlIHBhdGggb3IgKGlmIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTCi0rICogaXMgc2V0KSBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4KLSAgKi8KLSBzdGF0aWMgaW50Ci0gY2xlYW51cF9wYXRobmFtZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQotQEAgLTI1MjksOCArMjUzMCwxNSBAQCBjbGVhbnVwX3BhdGhuYW1lKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCi0gCWNsZWFudXBfcGF0aG5hbWVfd2luKGEpOwotICNlbmRpZgotIAkvKiBTa2lwIGxlYWRpbmcgJy8nLiAqLwotLQlpZiAoKnNyYyA9PSAnLycpCi0rCWlmICgqc3JjID09ICcvJykgewotKwkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMpIHsKLSsJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotKwkJCSAgICAgICAgICAgICAgICAgICJQYXRoIGlzIGFic29sdXRlIik7Ci0rCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0rCQl9Ci0rCi0gCQlzZXBhcmF0b3IgPSAqc3JjKys7Ci0rCX0KLSAKLSAJLyogU2NhbiB0aGUgcGF0aG5hbWUgb25lIGVsZW1lbnQgYXQgYSB0aW1lLiAqLwotIAlmb3IgKDs7KSB7Ci1kaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYyBiL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMKLWluZGV4IDMxYzViZmQuLjJjOTQyMDYgMTAwNjQ0Ci0tLS0gYS9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jCi0rKysgYi9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jCi1AQCAtMTc4LDYgKzE3OCwyOSBAQCBERUZJTkVfVEVTVCh0ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlKQotIAlhc3NlcnQoU19JU0RJUihzdC5zdF9tb2RlKSk7Ci0gCWFyY2hpdmVfZW50cnlfZnJlZShhZSk7Ci0gCi0rCS8qCi0rCSAqIFdpdGhvdXQgc2VjdXJpdHkgY2hlY2tzLCB3ZSBzaG91bGQgYmUgYWJsZSB0bwotKwkgKiBleHRyYWN0IGFuIGFic29sdXRlIHBhdGguCi0rCSAqLwotKwlhc3NlcnQoKGFlID0gYXJjaGl2ZV9lbnRyeV9uZXcoKSkgIT0gTlVMTCk7Ci0rCWFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZShhZSwgIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKTsKLSsJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShhZSwgU19JRlJFRyB8IDA3NzcpOwotKwlhc3NlcnQoMCA9PSBhcmNoaXZlX3dyaXRlX2hlYWRlcihhLCBhZSkpOwotKwlhc3NlcnQoMCA9PSBhcmNoaXZlX3dyaXRlX2ZpbmlzaF9lbnRyeShhKSk7Ci0rCWFzc2VydEZpbGVFeGlzdHMoIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKTsKLSsJYXNzZXJ0KDAgPT0gdW5saW5rKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIikpOwotKwotKwkvKiBCdXQgd2l0aCBzZWN1cml0eSBjaGVja3MgZW5hYmxlZCwgdGhpcyBzaG91bGQgZmFpbC4gKi8KLSsJYXNzZXJ0KGFyY2hpdmVfZW50cnlfY2xlYXIoYWUpICE9IE5VTEwpOwotKwlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWUoYWUsICIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7Ci0rCWFyY2hpdmVfZW50cnlfc2V0X21vZGUoYWUsIFNfSUZSRUcgfCAwNzc3KTsKLSsJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9vcHRpb25zKGEsIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTKTsKLSsJZmFpbHVyZSgiRXh0cmFjdGluZyBhbiBhYnNvbHV0ZSBwYXRoIHNob3VsZCBmYWlsIGhlcmUuIik7Ci0rCWFzc2VydEVxdWFsSW50KEFSQ0hJVkVfRkFJTEVELCBhcmNoaXZlX3dyaXRlX2hlYWRlcihhLCBhZSkpOwotKwlhcmNoaXZlX2VudHJ5X2ZyZWUoYWUpOwotKwlhc3NlcnQoMCA9PSBhcmNoaXZlX3dyaXRlX2ZpbmlzaF9lbnRyeShhKSk7Ci0rCWFzc2VydEZpbGVOb3RFeGlzdHMoIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKTsKLSsKLSAJYXNzZXJ0RXF1YWxJbnQoQVJDSElWRV9PSywgYXJjaGl2ZV93cml0ZV9mcmVlKGEpKTsKLSAKLSAJLyogVGVzdCB0aGUgZW50cmllcyBvbiBkaXNrLiAqLwotLS0gCi0xLjcuOS41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbWtkaXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOWEyOTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbWtkaXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1BZGQgbWlzc2luZyBta2RpciBjYWxscyBzbyB0aGF0IG91dC1vZi10cmVlIGJ1aWxkcyB3b3JrLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wdWxsLzUzNCkKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi1pbmRleCAzZmEyZDIyLi41ZWNjYTUyIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuYW0KLSsrKyBiL01ha2VmaWxlLmFtCi1AQCAtNTA4LDYgKzUwOCw3IEBAIGxpYmFyY2hpdmVfdGVzdF9MREFERD0gJChMVExJQklDT05WKQotICMgQnVpbGRpbmcgaXQgYXV0b21hdGljYWxseSBwcm92aWRlcyBhIHNhbml0eS1jaGVjayBvbiBsaWJhcmNoaXZlX3Rlc3RfU09VUkNFUwotICMgYWJvdmUuCi0gbGliYXJjaGl2ZS90ZXN0L2xpc3QuaDogTWFrZWZpbGUKLSsJJChNS0RJUl9QKSBsaWJhcmNoaXZlL3Rlc3QKLSAJY2F0ICQodG9wX3NyY2RpcikvbGliYXJjaGl2ZS90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGxpYmFyY2hpdmUvdGVzdC9saXN0LmgKLSAKLSBsaWJhcmNoaXZlX1RFU1RTX0VOVklST05NRU5UPSBMSUJBUkNISVZFX1RFU1RfRklMRVM9YGNkICQodG9wX3NyY2Rpcik7L2Jpbi9wd2RgL2xpYmFyY2hpdmUvdGVzdCBMUlpJUD1OT0NPTkZJRwotQEAgLTgzNSw2ICs4MzYsNyBAQCBic2R0YXJfdGVzdF9DUFBGTEFHUz1cCi0gCSQoUExBVEZPUk1DUFBGTEFHUykKLSAKLSB0YXIvdGVzdC9saXN0Lmg6IE1ha2VmaWxlCi0rCSQoTUtESVJfUCkgdGFyL3Rlc3QKLSAJY2F0ICQodG9wX3NyY2RpcikvdGFyL3Rlc3QvdGVzdF8qLmMgfCBncmVwIERFRklORV9URVNUID4gdGFyL3Rlc3QvbGlzdC5oCi0gCi0gaWYgQlVJTERfQlNEVEFSCi1AQCAtOTc1LDYgKzk3Nyw3IEBAIGJzZGNwaW9fdGVzdF9DUFBGTEFHUz0gXAotIGJzZGNwaW9fdGVzdF9MREFERD1saWJhcmNoaXZlX2ZlLmxhCi0gCi0gY3Bpby90ZXN0L2xpc3QuaDogTWFrZWZpbGUKLSsJJChNS0RJUl9QKSBjcGlvL3Rlc3QKLSAJY2F0ICQodG9wX3NyY2RpcikvY3Bpby90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGNwaW8vdGVzdC9saXN0LmgKLSAKLSBpZiBCVUlMRF9CU0RDUElPCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAzOGJkMjk5Li43YmRiMDBjIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xMDIsNiArMTAyLDcgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCi0gQUNfTElCVE9PTF9XSU4zMl9ETEwKLSBBQ19QUk9HX0xJQlRPT0wKLSBBQ19DSEVDS19UT09MKFtTVFJJUF0sW3N0cmlwXSkKLStBQ19QUk9HX01LRElSX1AKLSAKLSAjCi0gIyBPcHRpb25zIGZvciBidWlsZGluZyBic2R0YXIuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wa2djb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wa2djb25maWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NmFmOTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcGtnY29uZmlnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotVXNlIHBrZy1jb25maWcgZm9yIHRoZSBsaWJ4bWwyIGRlcGVuZGVuY3ksIG5vdCB0aGUgLWNvbmZpZyBzY3JpcHQuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1SUCAyMDE0LzUvMjIKLQotSW5kZXg6IGxpYmFyY2hpdmUtMy4xLjIvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGliYXJjaGl2ZS0zLjEuMi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTA5IDE3OjIzOjAzLjAwMDAwMDAwMCArMDAwMAotKysrIGxpYmFyY2hpdmUtMy4xLjIvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTU6MjY6NDUuNDQ2NDk5MTA4ICswMDAwCi1AQCAtMzI5LDEwICszMjksMTAgQEAKLSAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZXhwYXRdLCBbRG9uJ3QgYnVpbGQgc3VwcG9ydCBmb3IgeGFyIHRocm91Z2ggZXhwYXRdKSkKLSAKLSBpZiB0ZXN0ICJ4JHdpdGhfeG1sMiIgIT0gInhubyI7IHRoZW4KLS0gIEFDX1BBVEhfUFJPRyhbWE1MMl9DT05GSUddLCBbeG1sMi1jb25maWddLCwgWyR7UEFUSH1dKQotLSAgaWYgdGVzdCAieCRYTUwyX0NPTkZJRyIgIT0gIngiOyB0aGVuCi0tICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSBgJHtYTUwyX0NPTkZJR30gLS1jZmxhZ3NgIgotLSAgICBMSUJTPSIke0xJQlN9IGAke1hNTDJfQ09ORklHfSAtLWxpYnNgIgotKyAgUEtHX0NIRUNLX01PRFVMRVMoUEtHX1hNTDIsIFtsaWJ4bWwtMi4wXSwsKQotKyAgaWYgdGVzdCAieCRQS0dfWE1MMl9DRkxBR1MiICE9ICJ4IjsgdGhlbgotKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gJHtQS0dfWE1MMl9DRkxBR1N9IgotKyAgICBMSUJTPSIke0xJQlN9ICR7UEtHX1hNTDJfTElCU30iCi0gICAgIEFDX0NIRUNLX0xJQih4bWwyLHhtbEluaXRQYXJzZXIsW3RydWVdLEFDX01TR19GQUlMVVJFKE1pc3NpbmcgeG1sMiBsaWJyYXJ5KSkKLSAgIGVsc2UKLSAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNjc3YWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1TVU1NQVJZID0gIlN1cHBvcnQgZm9yIHJlYWRpbmcgdmFyaW91cyBhcmNoaXZlIGZvcm1hdHMiCi1ERVNDUklQVElPTiA9ICJDIGxpYnJhcnkgYW5kIGNvbW1hbmQtbGluZSB0b29scyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0YXIsIGNwaW8sIHppcCwgSVNPLCBhbmQgb3RoZXIgYXJjaGl2ZSBmb3JtYXRzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJhcmNoaXZlLm9yZy8iCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNGUzZmZkNjA3ZDY2ODZjNmNiMmY2MzM5NDM3MDg0MSIKLQotREVQRU5EUyA9ICJlMmZzcHJvZ3MtbmF0aXZlIgotCi1QQUNLQUdFQ09ORklHID89ICJ6bGliIGJ6MiIKLQotUEFDS0FHRUNPTkZJR19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKLQlsaWJ4bWwyIFwKLQkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKLQkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSBcCi0JJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCi0iCi0KLVBBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbGFyZ2VmaWxlIgotCi1QQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsLCIKLVBBQ0tBR0VDT05GSUdbeGF0dHJdID0gIi0tZW5hYmxlLXhhdHRyLC0tZGlzYWJsZS14YXR0cixhdHRyLCIKLVBBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgotUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKLVBBQ0tBR0VDT05GSUdbYnoyXSA9ICItLXdpdGgtYnoybGliLC0td2l0aG91dC1iejJsaWIsYnppcDIsIgotUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLWx6bWFkZWMgLS13aXRoLWx6bWEsLS13aXRob3V0LWx6bWFkZWMgLS13aXRob3V0LWx6bWEseHosIgotUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKLVBBQ0tBR0VDT05GSUdbbGlieG1sMl0gPSAiLS13aXRoLXhtbDIsLS13aXRob3V0LXhtbDIsbGlieG1sMiwiCi1QQUNLQUdFQ09ORklHW2V4cGF0XSA9ICItLXdpdGgtZXhwYXQsLS13aXRob3V0LWV4cGF0LGV4cGF0LCIKLVBBQ0tBR0VDT05GSUdbbHpvXSA9ICItLXdpdGgtbHpvMiwtLXdpdGhvdXQtbHpvMixsem8sIgotUEFDS0FHRUNPTkZJR1tuZXR0bGVdID0gIi0td2l0aC1uZXR0bGUsLS13aXRob3V0LW5ldHRsZSxuZXR0bGUsIgotCi1TUkNfVVJJID0gImh0dHA6Ly9saWJhcmNoaXZlLm9yZy9kb3dubG9hZHMvbGliYXJjaGl2ZS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJhcmNoaXZlLUNWRS0yMDE1LTIzMDQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1TZXQteGF0dHJzLWFmdGVyLXNldHRpbmctdGltZXMucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlZmFkNWE1MDNmNjYzMjliYjlkMmY0MzA4YjVkZTk4YSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlYjg3ZWFjZDhmZTQ5ZThkOTBjOGZkYzE4OTgxMzAyM2NjYzMxOWM1ZTc1MmIwMWZiNmFkMGNjN2IyYzUzZDVlIgotCi1pbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZwotCi1DUFBGTEFHUyArPSAiLUkke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzIgotCi1kb19jb25maWd1cmVbY2xlYW5kaXJzXSArPSAiJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcyIKLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotCSMgV2UganVzdCBuZWVkIHRoZSBoZWFkZXJzIGZvciBzb21lIHR5cGUgY29uc3RhbnRzLCBzbyBubyBuZWVkIHRvCi0JIyBidWlsZCBhbGwgb2YgZTJmc3Byb2dzIGZvciB0aGUgdGFyZ2V0Ci0JY3AgLVIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2V4dDJmcyAke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzLwotfQotCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCi0KLVBBQ0tBR0VTID0rICJic2R0YXIiCi1GSUxFU19ic2R0YXIgPSAiJHtiaW5kaXJ9L2JzZHRhciIKLQotQUxURVJOQVRJVkVfYnNkdGFyID0gInRhciIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVt0YXJdID0gIiR7YmFzZV9iaW5kaXJ9L3RhciIKLUFMVEVSTkFUSVZFX1RBUkdFVFt0YXJdID0gIiR7YmluZGlyfS9ic2R0YXIiCi0KLVBBQ0tBR0VTID0rICJic2RjcGlvIgotRklMRVNfYnNkY3BpbyA9ICIke2JpbmRpcn0vYnNkY3BpbyIKLQotQUxURVJOQVRJVkVfYnNkY3BpbyA9ICJjcGlvIgotQUxURVJOQVRJVkVfTElOS19OQU1FW2NwaW9dID0gIiR7YmFzZV9iaW5kaXJ9L2NwaW8iCi1BTFRFUk5BVElWRV9UQVJHRVRbY3Bpb10gPSAiJHtiaW5kaXJ9L2JzZGNwaW8iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1YjVkZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMi4xLmJiCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUlkgPSAiU3VwcG9ydCBmb3IgcmVhZGluZyB2YXJpb3VzIGFyY2hpdmUgZm9ybWF0cyIKK0RFU0NSSVBUSU9OID0gIkMgbGlicmFyeSBhbmQgY29tbWFuZC1saW5lIHRvb2xzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRhciwgY3BpbywgemlwLCBJU08sIGFuZCBvdGhlciBhcmNoaXZlIGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYmFyY2hpdmUub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVkOTlhY2EwMDZiYzM0Njk3NGJiNzQ1YTM1MzM2NDI1IgorCitERVBFTkRTID0gImUyZnNwcm9ncy1uYXRpdmUiCisKK1BBQ0tBR0VDT05GSUcgPz0gInpsaWIgYnoyIgorCitQQUNLQUdFQ09ORklHX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAorCWxpYnhtbDIgXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsJywgJ2FjbCcsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAneGF0dHInLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdsYXJnZWZpbGUnLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBsYXJnZWZpbGUiCisKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgorUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLS1lbmFibGUteGF0dHIsLS1kaXNhYmxlLXhhdHRyLGF0dHIsIgorUEFDS0FHRUNPTkZJR1tsYXJnZWZpbGVdID0gIi0tZW5hYmxlLWxhcmdlZmlsZSwtLWRpc2FibGUtbGFyZ2VmaWxlLCwiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIsIgorUEFDS0FHRUNPTkZJR1tiejJdID0gIi0td2l0aC1iejJsaWIsLS13aXRob3V0LWJ6MmxpYixiemlwMiwiCitQQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgtbHptYWRlYyAtLXdpdGgtbHptYSwtLXdpdGhvdXQtbHptYWRlYyAtLXdpdGhvdXQtbHptYSx4eiwiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgorUEFDS0FHRUNPTkZJR1tsaWJ4bWwyXSA9ICItLXdpdGgteG1sMiwtLXdpdGhvdXQteG1sMixsaWJ4bWwyLCIKK1BBQ0tBR0VDT05GSUdbZXhwYXRdID0gIi0td2l0aC1leHBhdCwtLXdpdGhvdXQtZXhwYXQsZXhwYXQsIgorUEFDS0FHRUNPTkZJR1tsem9dID0gIi0td2l0aC1sem8yLC0td2l0aG91dC1sem8yLGx6bywiCitQQUNLQUdFQ09ORklHW25ldHRsZV0gPSAiLS13aXRoLW5ldHRsZSwtLXdpdGhvdXQtbmV0dGxlLG5ldHRsZSwiCitQQUNLQUdFQ09ORklHW2x6NF0gPSAiLS13aXRoLWx6NCwtLXdpdGhvdXQtbHo0LGx6NCwiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmFyY2hpdmUub3JnL2Rvd25sb2Fkcy9saWJhcmNoaXZlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImFmYTI1NzA0N2QxOTQxYTU2NTIxNmVkYmYwMTcxZTcyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyZWUxYTRlM2ZkNTM0NTI1ZjEzYTBiYTFhYTdiMDViMjAzZDE4NmUwYzYwNzJhOGE0NzM4NjQ5ZDBiM2NmZDIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCisKK0NQUEZMQUdTICs9ICItSSR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCisKK2RvX2NvbmZpZ3VyZVtjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzIgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBXZSBqdXN0IG5lZWQgdGhlIGhlYWRlcnMgZm9yIHNvbWUgdHlwZSBjb25zdGFudHMsIHNvIG5vIG5lZWQgdG8KKwkjIGJ1aWxkIGFsbCBvZiBlMmZzcHJvZ3MgZm9yIHRoZSB0YXJnZXQKKwljcCAtUiAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZXh0MmZzICR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMvCit9CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworUEFDS0FHRVMgPSsgImJzZHRhciIKK0ZJTEVTX2JzZHRhciA9ICIke2JpbmRpcn0vYnNkdGFyIgorCitBTFRFUk5BVElWRV9ic2R0YXIgPSAidGFyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Rhcl0gPSAiJHtiYXNlX2JpbmRpcn0vdGFyIgorQUxURVJOQVRJVkVfVEFSR0VUW3Rhcl0gPSAiJHtiaW5kaXJ9L2JzZHRhciIKKworUEFDS0FHRVMgPSsgImJzZGNwaW8iCitGSUxFU19ic2RjcGlvID0gIiR7YmluZGlyfS9ic2RjcGlvIgorCitBTFRFUk5BVElWRV9ic2RjcGlvID0gImNwaW8iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY3Bpb10gPSAiJHtiYXNlX2JpbmRpcn0vY3BpbyIKK0FMVEVSTkFUSVZFX1RBUkdFVFtjcGlvXSA9ICIke2JpbmRpcn0vYnNkY3BpbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuLzAwMDEtaWRuLWZpeC1wcmludGYtZm9ybWF0LXNlY3VyaXR5LXdhcm5pbmdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuLzAwMDEtaWRuLWZpeC1wcmludGYtZm9ybWF0LXNlY3VyaXR5LXdhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZGM3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vMDAwMS1pZG4tZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZ3MucGF0Y2gKQEAgLTAsMCArMSwxODEgQEAKK0Zyb20gODJmOThkY2JjNDI5YmJlODlhOTgzN2M1MzNjYmNiYzAyZTc3Yzc5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KK0RhdGU6IFR1ZSwgMjggSnVuIDIwMTYgMTI6NDM6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaWRuOiBmaXggcHJpbnRmKCkgZm9ybWF0IHNlY3VyaXR5IHdhcm5pbmdzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOiBJbiBmdW5jdGlvbiAnbWFpbic6Cit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzoxNzI6NzogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgICBlcnJvciAoMCwgMCwgXygib25seSBvbmUgb2YgLXMsIC1lLCAtZCwgLWEsIC11IG9yIC1uIGNhbiBiZSBzcGVjaWZpZWQiKSk7Cit8ICAgICAgICBefn5+fgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MTg3OjU6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiVHlwZSBlYWNoIGlucHV0IHN0cmluZyBvbiBhIGxpbmUgYnkgaXRzZWxmLCAiCit8ICAgICAgXn5+fn5+fgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjAyOjQ6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oImlucHV0IGVycm9yIikpOworfCAgICAgXn5+fn4KK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjIyMDo4OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworfCAgICAgICAgIF4KK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjI0NTo4OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworfCAgICAgICAgIF4KK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjI4MTo2OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKK3wgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MzQwOjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVDUy00IHRvIFVURi04IikpOworfCAgICAgICBeCit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzozNjQ6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7Cit8ICAgICAgIF4KK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjQ0Mjo4OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVDUy00IHRvIFVURi04IikpOworfCAgICAgICAgIF4KK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjQ5ODo2OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKK3wgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NTI3OjU6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Cit8ICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NTQwOjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJjb3VsZCBub3QgZG8gTkZLQyBub3JtYWxpemF0aW9uIikpOworfCAgICAgICBefn5+fgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NTUxOjU6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Cit8ICAgICAgXgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL2lkbi5jIHwgMjcgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2lkbi5jIGIvc3JjL2lkbi5jCitpbmRleCBiZTFjN2QxLi42OGU0MjkxIDEwMDY0NAorLS0tIGEvc3JjL2lkbi5jCisrKysgYi9zcmMvaWRuLmMKK0BAIC0xNzAsNyArMTcwLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICAoYXJnc19pbmZvLmlkbmFfdG9fdW5pY29kZV9naXZlbiA/IDEgOiAwKSArCisgICAgICAgKGFyZ3NfaW5mby5uZmtjX2dpdmVuID8gMSA6IDApICE9IDEpCisgICAgIHsKKy0gICAgICBlcnJvciAoMCwgMCwgXygib25seSBvbmUgb2YgLXMsIC1lLCAtZCwgLWEsIC11IG9yIC1uIGNhbiBiZSBzcGVjaWZpZWQiKSk7CisrICAgICAgZXJyb3IgKDAsIDAsICIlcyIsIF8oIm9ubHkgb25lIG9mIC1zLCAtZSwgLWQsIC1hLCAtdSBvciAtbiBjYW4gYmUgc3BlY2lmaWVkIikpOworICAgICAgIHVzYWdlIChFWElUX0ZBSUxVUkUpOworICAgICB9CisgCitAQCAtMTg1LDcgKzE4NSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICBpZiAoIWFyZ3NfaW5mby5xdWlldF9naXZlbgorICAgICAgICYmIGFyZ3NfaW5mby5pbnB1dHNfbnVtID09IDAKKyAgICAgICAmJiBpc2F0dHkgKGZpbGVubyAoc3RkaW4pKSkKKy0gICAgZnByaW50ZiAoc3RkZXJyLCBfKCJUeXBlIGVhY2ggaW5wdXQgc3RyaW5nIG9uIGEgbGluZSBieSBpdHNlbGYsICIKKysgICAgZnByaW50ZiAoc3RkZXJyLCAiJXMiLCBfKCJUeXBlIGVhY2ggaW5wdXQgc3RyaW5nIG9uIGEgbGluZSBieSBpdHNlbGYsICIKKyAJCSAgICAgICAidGVybWluYXRlZCBieSBhIG5ld2xpbmUgY2hhcmFjdGVyLlxuIikpOworIAorICAgZG8KK0BAIC0xOTcsNyArMTk3LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICBpZiAoZmVvZiAoc3RkaW4pKQorIAkgICAgYnJlYWs7CisgCistCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oImlucHV0IGVycm9yIikpOworKwkgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiJXMiLCBfKCJpbnB1dCBlcnJvciIpKTsKKyAJfQorIAorICAgICAgIGlmIChzdHJsZW4gKGxpbmUpID4gMCkKK0BAIC0yMTUsNyArMjE1LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICBpZiAoIXEpCisgCSAgICB7CisgCSAgICAgIGZyZWUgKHApOworLQkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAorIAkJICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworIAkgICAgfQorIAorQEAgLTI0MCw3ICsyNDAsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGlmICghcSkKKyAJICAgIHsKKyAJICAgICAgZnJlZSAocik7CistCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCSAgICB9CisgCitAQCAtMjc3LDcgKzI3Nyw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgcSA9IHN0cmluZ3ByZXBfdXRmOF90b191Y3M0IChwLCAtMSwgJmxlbik7CisgCSAgZnJlZSAocCk7CisgCSAgaWYgKCFxKQorLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworIAorIAkgIGlmIChhcmdzX2luZm8uZGVidWdfZ2l2ZW4pCitAQCAtMzM2LDcgKzMzNiw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgciA9IHN0cmluZ3ByZXBfdWNzNF90b191dGY4IChxLCAtMSwgTlVMTCwgTlVMTCk7CisgCSAgZnJlZSAocSk7CisgCSAgaWYgKCFyKQorLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVDUy00IHRvIFVURi04IikpOworIAorIAkgIHAgPSBzdHJpbmdwcmVwX3V0ZjhfdG9fbG9jYWxlIChyKTsKK0BAIC0zNjAsNyArMzYwLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICBxID0gc3RyaW5ncHJlcF91dGY4X3RvX3VjczQgKHAsIC0xLCBOVUxMKTsKKyAJICBmcmVlIChwKTsKKyAJICBpZiAoIXEpCistCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCSAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7CisgCisgCSAgaWYgKGFyZ3NfaW5mby5kZWJ1Z19naXZlbikKK0BAIC00MzgsNyArNDM4LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICBpZiAoIXEpCisgCSAgICB7CisgCSAgICAgIGZyZWUgKHApOworLQkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAorIAkJICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVDUy00IHRvIFVURi04IikpOworIAkgICAgfQorIAorQEAgLTQ5NCw3ICs0OTQsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIHIgPSBzdHJpbmdwcmVwX3VjczRfdG9fdXRmOCAocSwgLTEsIE5VTEwsIE5VTEwpOworIAkgIGZyZWUgKHEpOworIAkgIGlmICghcikKKy0JICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAorIAkJICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKKyAKKyAJICBwID0gc3RyaW5ncHJlcF91dGY4X3RvX2xvY2FsZSAocik7CitAQCAtNTIzLDcgKzUyMyw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgICAgIGlmICghcSkKKyAJCXsKKyAJCSAgZnJlZSAocCk7CistCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkJIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCQl9CisgCitAQCAtNTM3LDcgKzUzNyw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgciA9IHN0cmluZ3ByZXBfdXRmOF9uZmtjX25vcm1hbGl6ZSAocCwgLTEpOworIAkgIGZyZWUgKHApOworIAkgIGlmICghcikKKy0JICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImNvdWxkIG5vdCBkbyBORktDIG5vcm1hbGl6YXRpb24iKSk7CisrCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAorKwkJICAgXygiY291bGQgbm90IGRvIE5GS0Mgbm9ybWFsaXphdGlvbiIpKTsKKyAKKyAJICBpZiAoYXJnc19pbmZvLmRlYnVnX2dpdmVuKQorIAkgICAgeworQEAgLTU0Nyw3ICs1NDgsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgICAgICBpZiAoIXEpCisgCQl7CisgCQkgIGZyZWUgKHIpOworLQkJICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkJICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAorIAkJCSBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworIAkJfQorIAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2F2b2lkX0FNX1BST0dfTUtESVJfUF93YXJuaW5nX2Vycm9yX3dpdGhfYXV0b21ha2VfMS4xMi5wYXRjaAppbmRleCAzNDc2YmI5Li45OGJhNGQ2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKQEAgLTcsNyArNyw3IEBACiBlbGltaW5hdGVkIHRoZXNlIGRlcHJlY2F0ZWQgbWFjcm9zIHlldC4gU28gZGlzYWJsZSB0aGUgdHJlYXRtZW50IG9mIHdhcm5pbmdzCiBhcyBlcnJvcnMgdW50aWwgZ2V0dGV4dCBpcyB1cGRhdGVkIHRvIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBtYWNyb3MuCiAKLVNpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNy8xMAogCiBJbmRleDogbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCmluZGV4IDIwYWZkMjUuLjU2ODNkM2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiB3YXJuaW5nOiAnbGliaWRuLmxhJzogbGlua2luZyBsaWJ0b29sIGxpYnJhcmllcyB1c2luZyBhIG5vbi1QT1NJWAogfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiBhcmNoaXZlciByZXF1aXJlcyAnQU1fUFJPR19BUicgaW4gJ2NvbmZpZ3VyZS5hYycKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA1LzAzCiAKIEluZGV4OiBsaWJpZG4tMS4yNC9jb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNmU4ODUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1TVU1NQVJZID0gIkludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lIHN1cHBvcnQgbGlicmFyeSIKLURFU0NSSVBUSU9OID0gIkltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJpbmdwcmVwLCBQdW55Y29kZSBhbmQgSUROQSBzcGVjaWZpY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBJRVRGIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyAoSUROKSB3b3JraW5nIGdyb3VwLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpZG4vIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICIoTEdQTHYyLjErIHwgTEdQTHYzKSAmIEdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRmNGJlNDc5NDBhOTFlZTY5NTU2ZjVmNzFlZWQ0YWVjIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvaWRuYS5oO2VuZGxpbmU9MjE7bWQ1PTdjMGIzODI4ZDFiMTUzNjYzYmU5YTA0YWQ0Zjc5NzVmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pZG4uYztlbmRsaW5lPTIwO21kNT1mNDIzNWYyYTJjYjJiNjU3ODZiMjk3OWZiM2NmN2ZiZiIKLQotaW5oZXJpdCBwa2djb25maWcgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbwotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGliaWRuLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNGRkODM1NmJhNTc3Mjg3ZWE3MDc2YmZhMTU1NGI1MzQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmE1ZDVhZmVlMmJlZmY3MDNhMzRlZTA5NDY2OGRhNWM2ZWE1YWZhMzg3ODRjZWJiYTg5MjQxMDVlMTg1YzRmNSIKLQotIyBjb21tYW5kIHRvb2wgaXMgdW5kZXIgR1BMdjMrLCB3aGlsZSBsaWJpZG4gaXRzZWxmIGlzIHVuZGVyIExHUEx2Mi4xKyBvciBMR1BMdjMKLSMgc28gcGFja2FnZSBjb21tYW5kIGludG8gYSBzZXBhcmF0ZSBwYWNrYWdlCi1QQUNLQUdFUyA9KyAiaWRuIgotRklMRVNfaWRuID0gIiR7YmluZGlyfS8qIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWNzaGFycCIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0Jcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2VtYWNzCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2QwZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzMuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiKExHUEx2Mi4xKyB8IExHUEx2MykgJiBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZjRiZTQ3OTQwYTkxZWU2OTU1NmY1ZjcxZWVkNGFlYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYyO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2lkbmEuaDtlbmRsaW5lPTIxO21kNT0zN2NmZmFkMjQ4MDdmNDQ2YTI0ZGUzZTczNzFmMjBiOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaWRuLmM7ZW5kbGluZT0yMDttZDU9MDllOTcwMzRhODg3N2IzNDUxY2I2NTA2NWZjMmMwNmUiCitERVBFTkRTID0gInZpcnR1YWwvbGliaWNvbnYiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gZ3RrLWRvYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGliaWRuLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pZG4tZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZ3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTlhYTdlMDAzNjY1ZGU5YzgyYmQzZjlmYzZjY2YzMDgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDRhN2FhYjYzNWJiNzIxY2VlZjZiZWVjYzRkNDlkZmQxOTQ3ODMyNWUxYjQ3ZjMxOTZmN2QyYWNjNDkzMGUxOSIKKworIyBjb21tYW5kIHRvb2wgaXMgdW5kZXIgR1BMdjMrLCB3aGlsZSBsaWJpZG4gaXRzZWxmIGlzIHVuZGVyIExHUEx2Mi4xKyBvciBMR1BMdjMKKyMgc28gcGFja2FnZSBjb21tYW5kIGludG8gYSBzZXBhcmF0ZSBwYWNrYWdlCitQQUNLQUdFUyA9KyAiaWRuIgorRklMRVNfaWRuID0gIiR7YmluZGlyfS8qIgorCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyB8IExHUEx2MyIKK0xJQ0VOU0VfaWRuID0gIkdQTHYzKyIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jc2hhcnAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2LzAwMDEtQWRkLWZhbGxiYWNrLWZvcGVuY29va2llLWltcGxlbWVudGF0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHYvMDAwMS1BZGQtZmFsbGJhY2stZm9wZW5jb29raWUtaW1wbGVtZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlMjIyOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2LzAwMDEtQWRkLWZhbGxiYWNrLWZvcGVuY29va2llLWltcGxlbWVudGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjU0IEBACitGcm9tIDViNmUxMTNmNTQ4YmQ4YTJiMTAwMjY3YmM1ZDU0Y2VlODYxYTRiOTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/TmVhbD0yMEdvbXBhPTIwPTI4PUUzPTgzPThCPUUzPTgzPUJDPUUzPTgzPUFCPUUzPTgzPUJCPz0KKyA9P1VURi04P3E/PUUzPTgyPUIzPUUzPTgyPTk5PUUzPTgzPUIzPUUzPTgzPThGPUUzPTgyPTlBPTI5Pz0KKyA8bmdvbXBhMTNAZ21haWwuY29tPgorRGF0ZTogV2VkLCAxMSBOb3YgMjAxNSAyMDozMjoxNyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBBZGQgZmFsbGJhY2sgZm9wZW5jb29raWUoKSBpbXBsZW1lbnRhdGlvbgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitJbiBlbnZpcm9ubWVudHMgd2hlcmUgbmVpdGhlciBmb3BlbmNvb2tpZSgpIG5vciBmdW5vcGVuKCkKK2FyZSBpbXBsZW1lbnRlZCwgd2UgbmVlZCB0byBwcm92aWRlIGEgc3VpdGFibGUgaW1wbGVtZW50YXRpb24KK29mIGZvcGVuY29va2llKCkgdGhhdCB3ZSBjYW4gdXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2L3B1bGwvMTEyIF0KKworU2lnbmVkLW9mZi1ieTogTmVhbCBHb21wYSAo44OL44O844Or44O744Kz44KZ44Oz44OP44KaKSA8bmdvbXBhMTNAZ21haWwuY29tPmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgorLS0tCisgZXh0L0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKysKKyBleHQvc29sdl94Zm9wZW4uYyAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArLS0KKyBleHQvc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuYyB8IDEyNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBleHQvc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuaCB8ICAyOCArKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5oCisKK2RpZmYgLS1naXQgYS9leHQvQ01ha2VMaXN0cy50eHQgYi9leHQvQ01ha2VMaXN0cy50eHQKK2luZGV4IGFkNTI0OTUuLjRmMjgyY2UgMTAwNjQ0CistLS0gYS9leHQvQ01ha2VMaXN0cy50eHQKKysrKyBiL2V4dC9DTWFrZUxpc3RzLnR4dAorQEAgLTQsNiArNCwxMyBAQCBTRVQgKGxpYnNvbHZleHRfU1JDUworIFNFVCAobGlic29sdmV4dF9IRUFERVJTCisgICAgIHRvb2xzX3V0aWwuaCBzb2x2X3hmb3Blbi5oIHRlc3RjYXNlLmgpCisgCisrSUYgKE5PVCBIQVZFX0ZPUEVOQ09PS0lFIEFORCBOT1QgSEFWRV9GVU5PUEVOKQorKyAgICBTRVQgKGxpYnNvbHZleHRfU1JDUyAke2xpYnNvbHZleHRfU1JDU30KKysgICAgICAgIHNvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmMpCisrICAgIFNFVCAobGlic29sdmV4dF9IRUFERVJTICR7bGlic29sdmV4dF9IRUFERVJTfQorKyAgICAgICAgc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuaCkKKytFTkRJRiAoTk9UIEhBVkVfRk9QRU5DT09LSUUgQU5EIE5PVCBIQVZFX0ZVTk9QRU4pCisrCisgSUYgKEVOQUJMRV9SUE1EQikKKyAgICAgU0VUIChsaWJzb2x2ZXh0X1NSQ1MgJHtsaWJzb2x2ZXh0X1NSQ1N9CisgICAgICAgICBwb29sX2ZpbGVjb25mbGljdHMuYyByZXBvX3JwbWRiLmMpCitkaWZmIC0tZ2l0IGEvZXh0L3NvbHZfeGZvcGVuLmMgYi9leHQvc29sdl94Zm9wZW4uYworaW5kZXggYjA0MjFiZi4uMzEzNDVkZCAxMDA2NDQKKy0tLSBhL2V4dC9zb2x2X3hmb3Blbi5jCisrKysgYi9leHQvc29sdl94Zm9wZW4uYworQEAgLTEzLDYgKzEzLDEwIEBACisgI2luY2x1ZGUgPHpsaWIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKysjaWYgIWRlZmluZWQoSEFWRV9GVU5PUEVOKSAmJiAhZGVmaW5lZChIQVZFX0ZPUEVOQ09PS0lFKQorKyNpbmNsdWRlICJzb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5oIgorKyNlbmRpZgorKworICNpbmNsdWRlICJzb2x2X3hmb3Blbi5oIgorICNpbmNsdWRlICJ1dGlsLmgiCisgCitAQCAtMzksNyArNDMsNyBAQCBzdGF0aWMgRklMRSAqY29va2llb3Blbih2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKm1vZGUsCisgCXNzaXplX3QgKCpjd3JpdGUpKHZvaWQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpLAorIAlpbnQgKCpjY2xvc2UpKHZvaWQgKikpCisgeworLSNpZmRlZiBIQVZFX0ZVTk9QRU4KKysjaWYgZGVmaW5lZChIQVZFX0ZVTk9QRU4pICYmICFkZWZpbmVkKEhBVkVfRk9QRU5DT09LSUUpCisgICBpZiAoIWNvb2tpZSkKKyAgICAgcmV0dXJuIDA7CisgICByZXR1cm4gZnVub3Blbihjb29raWUsCitAQCAtNDgsNyArNTIsNyBAQCBzdGF0aWMgRklMRSAqY29va2llb3Blbih2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKm1vZGUsCisgICAgICAgKGZwb3NfdCAoKikodm9pZCAqLCBmcG9zX3QsIGludCkpTlVMTCwJCQkJCS8qIHNlZWtmbiAqLworICAgICAgIGNjbG9zZQorICAgICAgICk7CistI2VsaWYgZGVmaW5lZChIQVZFX0ZPUEVOQ09PS0lFKQorKyNlbHNlCisgICBjb29raWVfaW9fZnVuY3Rpb25zX3QgY2lvOworIAorICAgaWYgKCFjb29raWUpCitAQCAtNjAsOCArNjQsNiBAQCBzdGF0aWMgRklMRSAqY29va2llb3Blbih2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKm1vZGUsCisgICAgIGNpby53cml0ZSA9IGN3cml0ZTsKKyAgIGNpby5jbG9zZSA9IGNjbG9zZTsKKyAgIHJldHVybiAgZm9wZW5jb29raWUoY29va2llLCAqbW9kZSA9PSAndycgPyAidyIgOiAiciIsIGNpbyk7CistI2Vsc2UKKy0jIGVycm9yIE5lZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBJL08KKyAjZW5kaWYKKyB9CisgCitkaWZmIC0tZ2l0IGEvZXh0L3NvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmMgYi9leHQvc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg5NDI2YTkKKy0tLSAvZGV2L251bGwKKysrKyBiL2V4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5jCitAQCAtMCwwICsxLDEyNCBAQAorKy8qCisrICoJUHJvdmlkZXMgYSB2ZXJ5IGxpbWl0ZWQgZm9wZW5jb29raWUoKSBmb3IgZW52aXJvbm1lbnRzIHdpdGggYSBsaWJjCisrICoJdGhhdCBsYWNrcyBpdC4KKysgKgorKyAqCUF1dGhvcnM6IHpoYXNoYSAmIG5zegorKyAqCU1vZGlmaWVkIGZvciBsaWJzb2x2IGJ5IE5lYWwgR29tcGEKKysgKgorKyAqCVRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UsIHJlYWQgTElDRU5TRS5CU0QKKysgKglmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKysgKgorKyAqLworKworKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAxCisrI2luY2x1ZGUgPHB0aHJlYWQuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSAic29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuaCIKKysKKytleHRlcm4gaW50IHBpcGUyKGludFsyXSwgaW50KTsKKysKKytzdHJ1Y3QgY3R4IHsKKysgICAgaW50IGZkOworKyAgICB2b2lkICpjb29raWU7CisrICAgIHN0cnVjdCBjb29raWVfaW9fZnVuY3Rpb25zX3QgaW87CisrICAgIGNoYXIgYnVmWzEwMjRdOworK307CisrCisrc3RhdGljIHZvaWQgKnByb3h5KHZvaWQgKmFyZykKKyt7CisrICAgIHN0cnVjdCBjdHggKmN0eCA9IGFyZzsKKysgICAgc3NpemVfdCByOworKyAgICBzaXplX3QgbiwgazsKKysKKysgICAgcHRocmVhZF9kZXRhY2gocHRocmVhZF9zZWxmKCkpOworKworKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgciA9IGN0eC0+aW8ucmVhZCA/CisrICAgICAgICAgICAgKGN0eC0+aW8ucmVhZCkoY3R4LT5jb29raWUsIGN0eC0+YnVmLCBzaXplb2YoY3R4LT5idWYpKSA6CisrICAgICAgICAgICAgcmVhZChjdHgtPmZkLCBjdHgtPmJ1Ziwgc2l6ZW9mKGN0eC0+YnVmKSk7CisrICAgICAgICBpZiAociA8IDApIHsKKysgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsgYnJlYWs7IH0KKysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChyID09IDApIHsgYnJlYWs7IH0KKysKKysgICAgICAgIG4gPSByLCBrID0gMDsKKysgICAgICAgIHdoaWxlIChuID4gMCkgeworKyAgICAgICAgICAgIHIgPSBjdHgtPmlvLndyaXRlID8KKysgICAgICAgICAgICAgICAgKGN0eC0+aW8ud3JpdGUpKGN0eC0+Y29va2llLCBjdHgtPmJ1ZiArIGssIG4pIDoKKysgICAgICAgICAgICAgICAgd3JpdGUoY3R4LT5mZCwgY3R4LT5idWYgKyBrLCBuKTsKKysgICAgICAgICAgICBpZiAociA8IDApIHsKKysgICAgICAgICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7IGJyZWFrOyB9CisrICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBpZiAociA9PSAwKSB7IGJyZWFrOyB9CisrCisrICAgICAgICAgICAgbiAtPSByLCBrICs9IHI7CisrICAgICAgICB9CisrICAgICAgICBpZiAobiA+IDApIHsgYnJlYWs7IH0KKysgICAgfQorKworKyAgICBpZiAoY3R4LT5pby5jbG9zZSkgeyAoY3R4LT5pby5jbG9zZSkoY3R4LT5jb29raWUpOyB9CisrICAgIGNsb3NlKGN0eC0+ZmQpOworKyAgICByZXR1cm4gTlVMTDsKKyt9CisrCisrRklMRSAqZm9wZW5jb29raWUodm9pZCAqY29va2llLCBjb25zdCBjaGFyICptb2RlLCBzdHJ1Y3QgY29va2llX2lvX2Z1bmN0aW9uc190IGlvKQorK3sKKysgICAgc3RydWN0IGN0eCAqY3R4ID0gTlVMTDsKKysgICAgaW50IHJkID0gMCwgd3IgPSAwOworKyAgICBpbnQgcFsyXSA9IHsgLTEsIC0xIH07CisrICAgIEZJTEUgKmYgPSBOVUxMOworKyAgICBwdGhyZWFkX3QgZHVtbXk7CisrCisrICAgIHN3aXRjaCAobW9kZVswXSkgeworKyAgICAgICAgY2FzZSAnYSc6CisrICAgICAgICBjYXNlICd3Jzogd3IgPSAxOyBicmVhazsKKysgICAgICAgIGNhc2UgJ3InOiByZCA9IDE7IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyAgICBzd2l0Y2ggKG1vZGVbMV0pIHsKKysgICAgICAgIGNhc2UgJ1wwJzogYnJlYWs7CisrICAgICAgICBjYXNlICcrJzoKKysgICAgICAgICAgICBpZiAobW9kZVsyXSA9PSAnXDAnKSB7CisrICAgICAgICAgICAgICAgIGVycm5vID0gRU5PVFNVUDsKKysgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyAgICBpZiAoaW8uc2VlaykgeworKyAgICAgICAgZXJybm8gPSBFTk9UU1VQOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgY3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7CisrICAgIGlmICghY3R4KSB7IHJldHVybiBOVUxMOyB9CisrICAgIGlmIChwaXBlMihwLCBPX0NMT0VYRUMpICE9IDApIHsgZ290byBlcnI7IH0KKysgICAgaWYgKChmID0gZmRvcGVuKHBbd3JdLCBtb2RlKSkgPT0gTlVMTCkgeyBnb3RvIGVycjsgfQorKyAgICBwW3dyXSA9IC0xOworKyAgICBjdHgtPmZkID0gcFtyZF07CisrICAgIGN0eC0+Y29va2llID0gY29va2llOworKyAgICBjdHgtPmlvLnJlYWQgPSByZCA/IGlvLnJlYWQgOiBOVUxMOworKyAgICBjdHgtPmlvLndyaXRlID0gd3IgPyBpby53cml0ZSA6IE5VTEw7CisrICAgIGN0eC0+aW8uc2VlayA9IE5VTEw7CisrICAgIGN0eC0+aW8uY2xvc2UgPSBpby5jbG9zZTsKKysgICAgaWYgKHB0aHJlYWRfY3JlYXRlKCZkdW1teSwgTlVMTCwgcHJveHksIGN0eCkgIT0gMCkgeyBnb3RvIGVycjsgfQorKworKyAgICByZXR1cm4gZjsKKysKKytlcnI6CisrICAgIGlmIChwWzBdID49IDApIHsgY2xvc2UocFswXSk7IH0KKysgICAgaWYgKHBbMV0gPj0gMCkgeyBjbG9zZShwWzFdKTsgfQorKyAgICBpZiAoZikgeyBmY2xvc2UoZik7IH0KKysgICAgZnJlZShjdHgpOworKyAgICByZXR1cm4gTlVMTDsKKyt9CitkaWZmIC0tZ2l0IGEvZXh0L3NvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmggYi9leHQvc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyMjNlM2YKKy0tLSAvZGV2L251bGwKKysrKyBiL2V4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5oCitAQCAtMCwwICsxLDI4IEBACisrLyoKKysgKglQcm92aWRlcyBhIHZlcnkgbGltaXRlZCBmb3BlbmNvb2tpZSgpIGZvciBlbnZpcm9ubWVudHMgd2l0aCBhIGxpYmMKKysgKgl0aGF0IGxhY2tzIGl0LgorKyAqCisrICoJQXV0aG9yczogemhhc2hhICYgbnN6CisrICoJTW9kaWZpZWQgZm9yIGxpYnNvbHYgYnkgTmVhbCBHb21wYQorKyAqCisrICoJVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZSwgcmVhZCBMSUNFTlNFLkJTRAorKyAqCWZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorKyAqCisrICovCisrCisrI2lmbmRlZiBTT0xWX1hGT1BFTl9GQUxMQkFDS19GT1BFTkNPT0tJRV9ICisrI2RlZmluZSBTT0xWX1hGT1BFTl9GQUxMQkFDS19GT1BFTkNPT0tJRV9ICisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworK3R5cGVkZWYgc3RydWN0IGNvb2tpZV9pb19mdW5jdGlvbnNfdCB7CisrICAgIHNzaXplX3QgKCpyZWFkKSh2b2lkICosIGNoYXIgKiwgc2l6ZV90KTsKKysgICAgc3NpemVfdCAoKndyaXRlKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKysgICAgaW50ICgqc2Vlaykodm9pZCAqLCBvZmY2NF90LCBpbnQpOworKyAgICBpbnQgKCpjbG9zZSkodm9pZCAqKTsKKyt9IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKKysKKytGSUxFICpmb3BlbmNvb2tpZSh2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKm1vZGUsIHN0cnVjdCBjb29raWVfaW9fZnVuY3Rpb25zX3QgaW8pOworKworKyNlbmRpZgorLS0gCisyLjQuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdi8wMDAxLUNNYWtlTGlzdHMudHh0LWZpeC1NQU5fSU5TVEFMTF9ESVIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdi8wMDAxLUNNYWtlTGlzdHMudHh0LWZpeC1NQU5fSU5TVEFMTF9ESVIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MmVjYzkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHYvMDAwMS1DTWFrZUxpc3RzLnR4dC1maXgtTUFOX0lOU1RBTExfRElSLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotRnJvbSAyODBmMGQzN2M2NDJkNjhiYWQyYTJlNDllZjQzNzk1MzQ3NGQ5OWU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBXZWQsIDYgQXByIDIwMTYgMjM6MTU6MDIgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gQ01ha2VMaXN0cy50eHQ6IGZpeCBNQU5fSU5TVEFMTF9ESVIKLQotSXQgY2hlY2tzICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L3NoYXJlL21hbiB3aGVuIGNvbmZpZ3VyZSwgYnV0IGl0IG1heQotbm90IGV4aXN0IHdoZW4gY3Jvc3Njb21waWxlLCBmb3IgZXhhbXBsZSwgd2hlbiBDTUFLRV9JTlNUQUxMX1BSRUZJWD0iLyIsCi1pdCBpcyBPSywgYnV0IHdoZW4gQ01BS0VfSU5TVEFMTF9QUkVGSVg9Ii9zb21lL3BhdGgvZWxzZSIsIHRoZW4gaXQKLWRvZXNuJ3QgZXhpc3QsIGFuZCB0aGUgbWFuIGRpciB3b3VsZCBiZSBzZXQgdG8gIi91c3IvbWFuIiB3aGljaCBpcwotaW5jb3JyZWN0LgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBDTWFrZUxpc3RzLnR4dCB8IDUgKy0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0Ci1pbmRleCBmZDE0MjZiLi43NDdkYjIyIDEwMDY0NAotLS0tIGEvQ01ha2VMaXN0cy50eHQKLSsrKyBiL0NNYWtlTGlzdHMudHh0Ci1AQCAtNTcsMTAgKzU3LDcgQEAgZWxzZSAoREVGSU5FRCBJTkNMVURFKQotIEVORElGIChERUZJTkVEICBJTkNMVURFKQotIE1FU1NBR0UgKFNUQVRVUyAiSGVhZGVyIGZpbGVzIHdpbGwgYmUgaW5zdGFsbGVkIGluICR7SU5DTFVERV9JTlNUQUxMX0RJUn0iKQotIFNFVCAoQklOX0lOU1RBTExfRElSICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4iKQotLVNFVCAoTUFOX0lOU1RBTExfRElSICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9tYW4iKQotLUlGIChJU19ESVJFQ1RPUlkgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L3NoYXJlL21hbiIgIEFORCBOT1QgSVNfRElSRUNUT1JZICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9tYW4iKQotLSAgU0VUIChNQU5fSU5TVEFMTF9ESVIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L3NoYXJlL21hbiIpCi0tRU5ESUYgKElTX0RJUkVDVE9SWSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vc2hhcmUvbWFuIiAgQU5EIE5PVCBJU19ESVJFQ1RPUlkgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L21hbiIpCi0rU0VUIChNQU5fSU5TVEFMTF9ESVIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L3NoYXJlL21hbiIpCi0gTUVTU0FHRShTVEFUVVMgIk1hbiBwYWdlcyB3aWxsIGJlIGluc3RhbGxlZCBpbiAke01BTl9JTlNUQUxMX0RJUn0iKQotIAotICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0tLSAKLTIuNy40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2XzAuNi4yMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2XzAuNi4yMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2YzZDZlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHZfMC42LjIzLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3Igc29sdmluZyBwYWNrYWdlcyBhbmQgcmVhZGluZyByZXBvc2l0b3JpZXMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvbGlic29sdiIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2xpYnNvbHYvaXNzdWVzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5CU0Q7bWQ1PTYyMjcyYmQxMWM5NzM5NmQ0YWFmMWM0MWJjMTFmN2Q4IgorCitERVBFTkRTID0gImV4cGF0IHpsaWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2LmdpdCBcCisgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwMS1BZGQtZmFsbGJhY2stZm9wZW5jb29raWUtaW1wbGVtZW50YXRpb24ucGF0Y2giCisKK1NSQ1JFViA9ICJmNjU0YzhjZmE1MjQyN2VkNDJkNzE0MmU1ODQ1MmRhZTA4YzBjMmQwIgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGNtYWtlCisKK0VYVFJBX09FQ01BS0UgPSAiLURMSUI9JHtiYXNlbGlifSAtRE1VTFRJX1NFTUFOVElDUz1PTiIKKworUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzICR7UE59ZXh0IgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UvTW9kdWxlcy9GaW5kTGliU29sdi5jbWFrZSIKK0ZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS8qIgorRklMRVNfJHtQTn1leHQgPSAiJHtsaWJkaXJ9LyR7UE59ZXh0LnNvLioiCisKK0JCQ0xBU1NFWFRFTkQgPSsgIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiODFjOGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHZfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBzb2x2aW5nIHBhY2thZ2VzIGFuZCByZWFkaW5nIHJlcG9zaXRvcmllcyIKLUhPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2IgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvbGlic29sdi9pc3N1ZXMiCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkJTRDttZDU9NjIyNzJiZDExYzk3Mzk2ZDRhYWYxYzQxYmMxMWY3ZDgiCi0KLURFUEVORFMgPSAiZXhwYXQgemxpYiIKLQotUFYgPSAiMC42LjE5IgotCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vb3BlblNVU0UvbGlic29sdi5naXQgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1DTWFrZUxpc3RzLnR4dC1maXgtTUFOX0lOU1RBTExfRElSLnBhdGNoIFwKLSIKLVNSQ1JFViA9ICI0YzVhZjQwMWE4OTg1OGQ0Y2ViYmZlNDBjNTlhMDAzMWZmOWRiNWIwIgotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGNtYWtlCi0KLUVYVFJBX09FQ01BS0UgPSAiLURMSUI9JHtiYXNlbGlifSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzICR7UE59ZXh0IgotCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UvTW9kdWxlcy9GaW5kTGliU29sdi5jbWFrZSIKLUZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS8qIgotRklMRVNfJHtQTn1leHQgPSAiJHtsaWJkaXJ9LyR7UE59ZXh0LnNvLioiCi0KLUJCQ0xBU1NFWFRFTkQgPSsgIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlci8wMDAxLW1vZHVsZXMtZmlsZXMuYy1wYXJzZV9maWVsZC1maXgtc3RyaW5nLWZvcm1hdGluZy1pbi0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlci8wMDAxLW1vZHVsZXMtZmlsZXMuYy1wYXJzZV9maWVsZC1maXgtc3RyaW5nLWZvcm1hdGluZy1pbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0N2RmMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyLzAwMDEtbW9kdWxlcy1maWxlcy5jLXBhcnNlX2ZpZWxkLWZpeC1zdHJpbmctZm9ybWF0aW5nLWluLS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGE0ODU3OTExZWNlNWViZmNkZWY0MmFlZTRjMDcwZWIyMTZmMzk1OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBGcmksIDEzIE1heSAyMDE2IDExOjQwOjEzIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1vZHVsZXMvZmlsZXMuYzogcGFyc2VfZmllbGQgZml4IHN0cmluZyBmb3JtYXRpbmcgaW4KKyBnX3dhcm5pbmdzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1tZT0NUTyAjOTU0N10KKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbW9kdWxlcy9maWxlcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9maWxlcy5jIGIvbW9kdWxlcy9maWxlcy5jCitpbmRleCA0ZWYwYTU3Li4zNWVhZmM5IDEwMDY0NAorLS0tIGEvbW9kdWxlcy9maWxlcy5jCisrKysgYi9tb2R1bGVzL2ZpbGVzLmMKK0BAIC01MzQsNyArNTM0LDcgQEAgcGFyc2VfZmllbGQoY29uc3Qgc3RydWN0IGZvcm1hdF9zcGVjaWZpZXIgKmZvcm1hdCwgR1ZhbHVlICp2YWx1ZSwKKyAJCQkJCQkgc3RyaW5nLCAmZXJyKTsKKyAJaWYgKHJldCA9PSBGQUxTRSkgeworIAkJZ19hc3NlcnQoZXJyICE9IE5VTEwpOworLQkJZ193YXJuaW5nKGx1X3N0cmVycm9yKGVycikpOworKwkJZ193YXJuaW5nKGx1X3N0cmVycm9yKGVyciksIE5VTEwpOworIAkJbHVfZXJyb3JfZnJlZSgmZXJyKTsKKyAJfQorIAlyZXR1cm4gcmV0OworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ1c2VyL2xpYnVzZXJfMC42Mi5iYgppbmRleCAxMzY5YWU4Li4zZDBiNTE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKQEAgLTE0LDE2ICsxNCwxNyBAQAogU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9pL2xpYnVzZXIvbGlidXNlci0ke1BWfS50YXIueHogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1DaGVjay1mb3ItaXNzZXR1Z2lkLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItcmVtb3ZlLXVudXNlZC1leGVjaW5mby5oLnBhdGNoIFwKLSAgICAgICAgICAiCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1vZHVsZXMtZmlsZXMuYy1wYXJzZV9maWVsZC1maXgtc3RyaW5nLWZvcm1hdGluZy1pbi0ucGF0Y2ggXAorICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI2M2U1ZTVjNTUxZTk5ZGM1MzAyYjQwYjgwYmQ2ZDRmMiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJhNThmZjRmYWJiMDFhMjUwNDNiMTQyMTg1YTMzZWVlYTk2MTEwOWRkNjBkNGI0MGI2YTlkZjRmYTNjYWNlMjBiIgogCi1ERVBFTkRTID0gInBvcHQgbGlicGFtIGdsaWItMi4wIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGxpbnV4ZG9jLXRvb2xzLW5hdGl2ZSBweXRob24iCitERVBFTkRTID0gInBvcHQgbGlicGFtIGdsaWItMi4wIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGxpbnV4ZG9jLXRvb2xzLW5hdGl2ZSBweXRob24zIgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB5dGhvbm5hdGl2ZSBweXRob24tZGlyIHBrZ2NvbmZpZworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBweXRob24zbmF0aXZlIHB5dGhvbjMtZGlyIHBrZ2NvbmZpZyBndGstZG9jCiAKLUVYVFJBX09FTUFLRSA9ICJQWVRIT05fQ1BQRkxBR1M9LUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorRVhUUkFfT0VNQUtFID0gIlBZVEhPTl9DUFBGTEFHUz0tSSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0ke1BZVEhPTl9BQkl9IgogCiBQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uICIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLVVzZS1wa2ctY29uZmlnLWZvci1wY3JlLWRlcGVuZGVuY3ktaW5zdGVhZC1vZi1jb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkLzAwMDEtVXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGVwZW5kZW5jeS1pbnN0ZWFkLW9mLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGM3ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLVVzZS1wa2ctY29uZmlnLWZvci1wY3JlLWRlcGVuZGVuY3ktaW5zdGVhZC1vZi1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBlN2E4YzkyNWI5MzE2YTcyYmRjOGYzMjc4OWZmZTU2ZmRhNWM0Nzg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI2IEF1ZyAyMDE2IDE4OjIwOjMyICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSBwa2ctY29uZmlnIGZvciBwY3JlIGRlcGVuZGVuY3kgaW5zdGVhZCBvZiAtY29uZmlnIHNjcmlwdC4KKworUlAgMjAxNC81LzIyCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTEgKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAxZDE3MmExLi5hOTIzNmRhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zODAsMTEgKzM4MCwxMiBAQCBpZiB0ZXN0ICIkV0lUSF9QQ1JFIiAhPSAibm8iOyB0aGVuCisgCQkJUENSRV9MSUI9Ii1MJFdJVEhfUENSRS9saWIgLWxwY3JlIgorIAkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkV0lUSF9QQ1JFL2luY2x1ZGUiCisgCQllbHNlCistCQkJQUNfUEFUSF9QUk9HKFBDUkVDT05GSUcsIHBjcmUtY29uZmlnKQorLQkJCWlmIHRlc3QgeCIkUENSRUNPTkZJRyIgIT0geDsgdGhlbgorLQkJCQlQQ1JFX0xJQj1gJFBDUkVDT05GSUcgLS1saWJzYAorLQkJCQlDUFBGTEFHUz0iJENQUEZMQUdTIGAkUENSRUNPTkZJRyAtLWNmbGFnc2AiCistCQkJZmkKKysJCQlQS0dfQ0hFQ0tfTU9EVUxFUyhQQ1JFUEtHLCBbbGlicGNyZV0sIFsKKysJCQkJUENSRV9MSUI9JHtQQ1JFUEtHX0xJQlN9CisrCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJHtQQ1JFUEtHX0NGTEFHU30iCisrCQkJXSwgWworKwkJCQlBQ19NU0dfRVJST1IoW3BjcmUgcGtnY29uZmlnIG5vdCBmb3VuZCwgaW5zdGFsbCB0aGUgcGNyZS1kZXZlbCBwYWNrYWdlIG9yIGJ1aWxkIHdpdGggLS13aXRob3V0LXBjcmVdKQorKwkJCV0pCisgCQlmaQorIAorICAgaWYgdGVzdCB4IiRQQ1JFX0xJQiIgIT0geDsgdGhlbgorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvcGtnY29uZmlnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzk1ZjkyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvcGtnY29uZmlnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotVXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGVwZW5kZW5jeSBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0LgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotUlAgMjAxNC81LzIyCi0KLQotSW5kZXg6IGxpZ2h0dHBkLTEuNC4zNS9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaWdodHRwZC0xLjQuMzUub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wMy0wNiAxNDowODowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBsaWdodHRwZC0xLjQuMzUvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTY6NTg6MzAuNzU4NDcxMTY5ICswMDAwCi1AQCAtMzA5LDE2ICszMDksMTQgQEAKLSBBQ19NU0dfUkVTVUxUKFskV0lUSF9QQ1JFXSkKLSAKLSBpZiB0ZXN0ICIkV0lUSF9QQ1JFIiAhPSAibm8iOyB0aGVuCi0tICBBQ19QQVRIX1BST0coUENSRUNPTkZJRywgcGNyZS1jb25maWcpCi0tCi0tICBpZiB0ZXN0IHgiJFBDUkVDT05GSUciICE9IHg7IHRoZW4KLS0gICAgUENSRV9MSUI9YCRQQ1JFQ09ORklHIC0tbGlic2AKLS0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJFBDUkVDT05GSUcgLS1jZmxhZ3NgIgotKyAgUEtHX0NIRUNLX01PRFVMRVMoUENSRVBLRywgW2xpYnBjcmVdLCBbCi0rICAgIFBDUkVfTElCPSR7UENSRVBLR19MSUJTfQotKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICR7UENSRVBLR19DRkxBR1N9IgotICAgICBBQ19ERUZJTkUoW0hBVkVfTElCUENSRV0sIFsxXSwgW2xpYnBjcmVdKQotICAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV9IXSwgWzFdLCBbcGNyZS5oXSkKLS0gIGVsc2UKLSsgIF0sIFsKLSAgICAgIEFDX01TR19FUlJPUihbcGNyZS1jb25maWcgbm90IGZvdW5kLCBpbnN0YWxsIHRoZSBwY3JlLWRldmVsIHBhY2thZ2Ugb3IgYnVpbGQgd2l0aCAtLXdpdGhvdXQtcGNyZV0pCi0tICBmaQotKyAgXSkKLSBmaQotIAotIEFDX1NVQlNUKFBDUkVfTElCKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zOS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc4YWNjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zOS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLVNVTU1BUlkgPSAiTGlnaHR3ZWlnaHQgaGlnaC1wZXJmb3JtYW5jZSB3ZWIgc2VydmVyIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWdodHRwZC5uZXQvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvaXNzdWVzIgotCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0ZGFjNWM2YWIxNjlhYTIxMmZlYjUwMjg4NTNhNTc5IgotCi1TRUNUSU9OID0gIm5ldCIKLURFUEVORFMgPSAiemxpYiBsaWJwY3JlIgotUkRFUEVORFNfJHtQTn0gKz0gIiBcCi0gICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtYWNjZXNzIFwKLSAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3Nsb2cgXAotICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWluZGV4ZmlsZSBcCi0gICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtZGlybGlzdGluZyBcCi0gICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtc3RhdGljZmlsZSBcCi0iCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmxpZ2h0dHBkLm5ldC9saWdodHRwZC9yZWxlYXNlcy0xLjQueC9saWdodHRwZC0ke1BWfS50YXIueHogXAotICAgICAgICBmaWxlOi8vaW5kZXguaHRtbC5saWdodHRwZCBcCi0gICAgICAgIGZpbGU6Ly9saWdodHRwZC5jb25mIFwKLSAgICAgICAgZmlsZTovL2xpZ2h0dHBkIFwKLSAgICAgICAgZmlsZTovL2xpZ2h0dHBkLnNlcnZpY2UgXAotICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKLSAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNjNjNzU2M2JlMWM3YTdhOTgxOWE1MWYwN2YxYWY4YjIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2ViOWExODUzYzNkNmRkNTg1MTY4MmIwNzMzYTcyOWJhNDE1OGQ2YmRmZjgwOTc0ZDVlZjVmMWY2ODg3MzY1YiIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCi1QQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLCAtLXdpdGhvdXQtb3BlbnNzbCwgb3BlbnNzbCIKLQotRVhUUkFfT0VDT05GID0gIiBcCi0gICAgICAgICAgICAgLS13aXRob3V0LWJ6aXAyIFwKLSAgICAgICAgICAgICAtLXdpdGhvdXQtbGRhcCBcCi0gICAgICAgICAgICAgLS13aXRob3V0LWx1YSBcCi0gICAgICAgICAgICAgLS13aXRob3V0LW1lbWNhY2hlIFwKLSAgICAgICAgICAgICAtLXdpdGgtcGNyZSBcCi0gICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1wcm9wcyBcCi0gICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1sb2NrcyBcCi0gICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCi0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBnZXR0ZXh0IHN5c3RlbWQKLQotSU5JVFNDUklQVF9OQU1FID0gImxpZ2h0dHBkIgotSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNzAiCi0KLVNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJsaWdodHRwZC5zZXJ2aWNlIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCAke0R9JHtzeXNjb25mZGlyfS9saWdodHRwZC5kICR7RH0vd3d3L3BhZ2VzL2RhdgotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2xpZ2h0dHBkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmRleC5odG1sLmxpZ2h0dHBkICR7RH0vd3d3L3BhZ2VzL2luZGV4Lmh0bWwKLQotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0Jc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKLQkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAotCQktZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKLQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbGlnaHR0cGQuc2VydmljZQotCSNGb3IgRkhTIGNvbXBsaWFuY2UsIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyB0byAvdmFyL2xvZyBhbmQgL3Zhci90bXAgZm9yIGxvZ3MgYW5kIHRlbXBvcmFyeSBkYXRhCi0JbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vbG9nICR7RH0vd3d3L2xvZ3MKLQlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS90bXAgJHtEfS93d3cvdmFyCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9IC93d3ciCi0KLUNPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmNvbmYiCi0KLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWdodHRwZC1tb2R1bGUtLioiCi0KLXB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKLSAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC40MS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhM2YzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC40MS5iYgpAQCAtMCwwICsxLDc5IEBACitTVU1NQVJZID0gIkxpZ2h0d2VpZ2h0IGhpZ2gtcGVyZm9ybWFuY2Ugd2ViIHNlcnZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlnaHR0cGQubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3JlZG1pbmUubGlnaHR0cGQubmV0L3Byb2plY3RzL2xpZ2h0dHBkL2lzc3VlcyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNGRhYzVjNmFiMTY5YWEyMTJmZWI1MDI4ODUzYTU3OSIKKworU0VDVElPTiA9ICJuZXQiCitERVBFTkRTID0gInpsaWIgbGlicGNyZSIKK1JERVBFTkRTXyR7UE59ICs9ICIgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWFjY2VzcyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtYWNjZXNzbG9nIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1pbmRleGZpbGUgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWRpcmxpc3RpbmcgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLXN0YXRpY2ZpbGUgXAorIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5saWdodHRwZC5uZXQvbGlnaHR0cGQvcmVsZWFzZXMtMS40LngvbGlnaHR0cGQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgZmlsZTovL2luZGV4Lmh0bWwubGlnaHR0cGQgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQuY29uZiBcCisgICAgICAgIGZpbGU6Ly9saWdodHRwZCBcCisgICAgICAgIGZpbGU6Ly9saWdodHRwZC5zZXJ2aWNlIFwKKyAgICAgICAgZmlsZTovLzAwMDEtVXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGVwZW5kZW5jeS1pbnN0ZWFkLW9mLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjFkZjJlNGRiYzk2NWNmZTZmOTlmMDA4YWMzZGI0ZDhkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRiY2MzODNlZjZkNmRjN2IyODRmNjg4ODJkNzFhMTc4ZTI5ODZjODNjNGU4NWVlYjNjOGYzYjg4MmUzNDZiNmMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvcGVuc3NsIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwgLS13aXRob3V0LW9wZW5zc2wsIG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtYnppcDIgXAorICAgICAgICAgICAgIC0td2l0aG91dC1sZGFwIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtbHVhIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtbWVtY2FjaGVkIFwKKyAgICAgICAgICAgICAtLXdpdGgtcGNyZSBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1wcm9wcyBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1sb2NrcyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBnZXR0ZXh0IHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImxpZ2h0dHBkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNzAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJsaWdodHRwZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCAke0R9JHtzeXNjb25mZGlyfS9saWdodHRwZC5kICR7RH0vd3d3L3BhZ2VzL2RhdgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2xpZ2h0dHBkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmRleC5odG1sLmxpZ2h0dHBkICR7RH0vd3d3L3BhZ2VzL2luZGV4Lmh0bWwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbGlnaHR0cGQuc2VydmljZQorCSNGb3IgRkhTIGNvbXBsaWFuY2UsIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyB0byAvdmFyL2xvZyBhbmQgL3Zhci90bXAgZm9yIGxvZ3MgYW5kIHRlbXBvcmFyeSBkYXRhCisJbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vbG9nICR7RH0vd3d3L2xvZ3MKKwlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS90bXAgJHtEfS93d3cvdmFyCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9IC93d3ciCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmNvbmYiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWdodHRwZC1tb2R1bGUtLioiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2gKaW5kZXggMDgwOWM5Yi4uMTdjOTAwMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaApAQCAtMTEsMTMgKzExLDE0IEBACiBpbmRleCA2ODUwMDQ2Li4xMTIyM2Y3IDEwMDY0NAogLS0tIGEvcmMuZC9pbml0LmQvZnVuY3Rpb25zCiArKysgYi9yYy5kL2luaXQuZC9mdW5jdGlvbnMKLUBAIC01OTcsNSArNTk3LDUgQEAgaWYgWyAiJF91c2Vfc3lzdGVtY3RsIiA9ICIxIiBdOyB0aGVuCitAQCAtNTk3LDYgKzU5Nyw2IEBAIGlmIFsgIiRfdXNlX3N5c3RlbWN0bCIgPSAiMSIgXTsgdGhlbgogIAlmaQogIGZpCiAgCiAtc3Ryc3RyICIkKGNhdCAvcHJvYy9jbWRsaW5lKSIgInJjLmRlYnVnIiAmJiBzZXQgLXgKICtzdHJzdHIgIiQoY2F0IC9wcm9jL2NtZGxpbmUpIiAicmMuZGVidWciICYmIHNldCAteCB8fCB0cnVlCi0gCisgcmV0dXJuIDAKKwogLS0gCiAyLjEuMAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0c185LjY0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3MzA1MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0c185LjY0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotU1VNTUFSWSA9ICJTeXNWIGluaXQgc2NyaXB0cyB3aGljaCBhcmUgb25seSB1c2VkIGluIGFuIExTQiBpbWFnZSIKLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1ERVBFTkRTID0gInBvcHQgZ2xpYi0yLjAiCi0KLVJERVBFTkRTXyR7UE59ICs9ICJ1dGlsLWxpbnV4IgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYmY0ZThiNDk3ODBhYjE4N2Q1MWJkMjZhYWEwMjJjNiIKLQotUz0iJHtXT1JLRElSfS9pbml0c2NyaXB0cy0ke1BWfSIKLVNSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIvOWNjZTJhZTEwMDk3NTBlODRiZTM3YzA5YTAyODc1N2UvaW5pdHNjcmlwdHMtJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9mdW5jdGlvbnMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoIFwKLSAgICAgICAgICAiIAotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWNjZTJhZTEwMDk3NTBlODRiZTM3YzA5YTAyODc1N2UiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDhiNTljZTgxNTdjZmM1OGJiZDRiMWRmYTU4YWQxMDg3MjQ1NzYxYWUxMWMyMDMzYjY2YWUzODY0ZWE3ZTFjZiIKLQotaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCi0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKLUFMVEVSTkFUSVZFXyR7UE59ID0gImZ1bmN0aW9ucyIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtmdW5jdGlvbnNdID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucyIKLQotIyBTaW5jZSB3ZSBhcmUgb25seSB0YWtpbmcgdGhlIHBhdGNoZWQgdmVyc2lvbiBvZiBmdW5jdGlvbnMsIG5vIG5lZWQgdG8KLSMgY29uZmlndXJlIG9yIGNvbXBpbGUgYW55dGhpbmcgc28gZG8gbm90IGV4ZWN1dGUgdGhlc2UKLWRvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiIAotZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiIAotCi1kb19pbnN0YWxsKCl7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCi0JaW5zdGFsbCAtbSAwNjQ0ICR7U30vcmMuZC9pbml0LmQvZnVuY3Rpb25zICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0c185LjY4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDhmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0c185LjY4LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiU3lzViBpbml0IHNjcmlwdHMgd2hpY2ggYXJlIG9ubHkgdXNlZCBpbiBhbiBMU0IgaW1hZ2UiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorREVQRU5EUyA9ICJwb3B0IGdsaWItMi4wIgorCitSREVQRU5EU18ke1BOfSArPSAidXRpbC1saW51eCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWJmNGU4YjQ5NzgwYWIxODdkNTFiZDI2YWFhMDIyYzYiCisKK1M9IiR7V09SS0RJUn0vaW5pdHNjcmlwdHMtJHtQVn0iCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyLzZhNTFhNWFmMzhlMDE0NDVmNTM5ODllZDA3MjdjM2UxL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIiAKKworU1JDX1VSSVttZDVzdW1dID0gIjZhNTFhNWFmMzhlMDE0NDVmNTM5ODllZDA3MjdjM2UxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJhMWM2ZTlkYmFhMzdhNjc2NTE4ZjQ4MDNiNTAxZTEwN2MwNThiYjE0ZWY3YThkYjI0YzUyYjc3ZmJjYmE1MzEiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmdW5jdGlvbnMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnVuY3Rpb25zXSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMiCisKKyMgU2luY2Ugd2UgYXJlIG9ubHkgdGFraW5nIHRoZSBwYXRjaGVkIHZlcnNpb24gb2YgZnVuY3Rpb25zLCBubyBuZWVkIHRvCisjIGNvbmZpZ3VyZSBvciBjb21waWxlIGFueXRoaW5nIHNvIGRvIG5vdCBleGVjdXRlIHRoZXNlCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIiAKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIiAKKworZG9faW5zdGFsbCgpeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9MU0JfVGVzdC5zaAppbmRleCBiOTk3MWExLi5jMzFhM2ViIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKQEAgLTExMyw3ICsxMTMsNyBAQAogI2ZpCiAKIFNFUlZFUjE9IlwKLQlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9iYXNlLyR7TFNCX1JFTEVBU0V9L2JpbmFyeSIKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9iYXNlL3JlbGVhc2VkLWFsbC9iaW5hcnkiCQogU0VSVkVSMj0iXAogCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL3Rlc3Rfc3VpdGVzL3JlbGVhc2VkLWFsbC9iaW5hcnkvcnVudGltZSIKIFNFUlZFUjM9IlwKQEAgLTQyOSw3ICs0MjksNiBAQAogL29wdC9sc2IvdGVzdC9kZXNrdG9wL2ZyZWV0eXBlCiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AvZ3RrdnRzCiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AvbGlicG5nCi0vb3B0L2xzYi90ZXN0L2Rlc2t0b3AvcXQzCiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AveGZ0CiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AveG1sCiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AveHJlbmRlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9wYWNrYWdlc19saXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9wYWNrYWdlc19saXN0CmluZGV4IDI3ZDgzNTIuLjk1OWY5MzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3BhY2thZ2VzX2xpc3QKQEAgLTEsNCArMSw0IEBACi1MU0JfUkVMRUFTRT0icmVsZWFzZWQtNC4xLjAiCitMU0JfUkVMRUFTRT0icmVsZWFzZWQtNS4wIgogTFNCX0FSQ0g9ImxzYmFyY2giCiAKIEJBU0VfUEFDS0FHRVNfTElTVD0ibHNiLXNldHVwLTQuMS4wLTEubm9hcmNoLnJwbSIKQEAgLTksMzYgKzksMzUgQEAKIAlsc2IteHZmYi0xLjIuMC0yMi50YXJnZXRhcmNoLnJwbSBcCiAJIgogCi1SVU5USU1FX1BBQ0tBR0VTX0xJU1Q9ImxzYi1jbWRjaGstNC4xLjQtNS50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLWxpYmNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItcW0tMi4yLTEyLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10YXNrLWRpc3QtdGVzdGtpdC00LjEuOS0xLm5vYXJjaC5ycG0gXAotCWxzYi10ZXN0LWNvcmUtNC4xLjE1LTEudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10ZXN0LWNwcC10MmMtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QtZGVza3RvcC00LjEuOS0xLnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1kZXNrdG9wLXQyYy00LjEuMy0zLnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1saWJzdGRjcHAtNC4xLjAtMTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3Qtb2x2ZXItY29yZS00LjEuNC0xLnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1wZXJsLTQuMS44LTEubm9hcmNoLnJwbSBcCi0JbHNiLXRlc3QtcHJpbnRpbmctNC4xLjItMS50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QtcHl0aG9uLTQuMS41LTEudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10ZXN0LXF0My1hem92LTQuMS4xLTMudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10ZXN0LXF0NC1hem92LTQuMS4zLTEudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10ZXN0LXh0czUtNS4xLjUtNDUubHNiNC50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QtYWxzYS10MmMtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QtY29yZS10MmMtNC4xLjItMy50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QteG1sMi1hem92LTQuMS4wLTEudGFyZ2V0YXJjaC5ycG0gXAorUlVOVElNRV9QQUNLQUdFU19MSVNUPSJsc2ItY21kY2hrLTUuMC4zLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1saWJjaGstNS4wLjMtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXFtLTIuMi0xLmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10YXNrLWRpc3QtdGVzdGtpdC01LjAuMC0yLm5vYXJjaC5ycG0gXAorCWxzYi10ZXN0LWNvcmUtNS4wLjEtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY3BwLXQyYy01LjAuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1kZXNrdG9wLTUuMC4wLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWRlc2t0b3AtdDJjLTUuMC4wLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWxpYnN0ZGNwcC00LjEuMC0yMi5sc2IxLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1vbHZlci1jb3JlLTUuMC4wLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXBlcmwtNS4wLjItMS5ub2FyY2gucnBtIFwKKwlsc2ItdGVzdC1wcmludGluZy01LjAuMS0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1weXRob24tNS4wLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQ0LWF6b3YtNS4wLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteHRzNS01LjEuNS00Ny5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1hbHNhLXQyYy01LjEuOTEtNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS10MmMtNS4wLjEtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteG1sMi1hem92LTUuMC4wLTEudGFyZ2V0YXJjaC5ycG0gXAogCSIKIAotQVBQX1BBQ0tBR0VTX0xJU1Q9ImxzYi1weXRob24tMi40LjYtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItYXBhY2hlLTIuMi4xNC04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10Y2wtOC41LjctOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItZXhwZWN0LTUuNDMuMC0xMy5sc2I0LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItZ3JvZmYtMS4yMC4xLTcubHNiNC50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXJhcHRvci0xLjQuMTktNS5sc2I0LnRhcmdldGFyY2gucnBtIFwKLQlsc2IteHBkZi0xLjAxLTE0LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi1zYW1iYS0zLjQuMy05LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi1yc3luYy0zLjAuNi02LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorQVBQX1BBQ0tBR0VTX0xJU1Q9ImxzYi1weXRob24tMi40LjYtMTAubHNiNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLWFwYWNoZS0yLjIuMTktNS5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGNsLTguNS45LTIxLmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1leHBlY3QtNS40My4wLTIxLmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1ncm9mZi0xLjIwLjEtOS5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcmFwdG9yLTEuNC4yMS00LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14cGRmLTEuMDEtMTcubHNiNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXNhbWJhLTMuNS45LTUubHNiNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXJzeW5jLTMuMC44LTMubHNiNS50YXJnZXRhcmNoLnJwbSBcCiAJIgogCiBBUFBfVEVTVEZJTEVTX0xJU1Q9ImV4cGVjdC10ZXN0cy50YXIgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uCmluZGV4IDg1Y2EyZWYuLjNhYmNjYTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3Qvc2Vzc2lvbgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3Nlc3Npb24KQEAgLTEyNiwxNSArMTI2LDYgQEAKIEFVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbgogQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbi9yZXN1bHRzCiAKLVtxdDMtYXpvdl0KLVJVTjogMQotVkVSU0lPTjogbG9jYWx8KgotCi1bcXQzLWF6b3Z8bG9jYWx8Kl0KLUFVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3F0My1hem92Ci1BVVRPUkVQTFlfWDExX0ZPTlRfUEFUSDogW2RlZmF1bHRdCi1BVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcXQzLWF6b3YvcmVzdWx0cwotCiBbcXQ0LWF6b3ZdCiBSVU46IDEKIFZFUlNJT046IGxvY2FsfCoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9sc29mXzQuODkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCmluZGV4IGMxMDMzN2IuLmI3MzJjZjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9sc29mXzQuODkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgpAQCAtNDcsOCArNDcsNiBAQAogZXhwb3J0IEkgPSAiJHtTVEFHSU5HX0lOQ0RJUn0iCiBleHBvcnQgTCA9ICIke1NUQUdJTkdfSU5DRElSfSIKIAotRVhUUkFfT0VNQUtFID0gIiIKLQogZG9fY29tcGlsZSAoKSB7CiAJb2VfcnVubWFrZSAnQ0M9JHtDQ30nICdDRkdMPSR7TERGTEFHU30gLUwuL2xpYiAtbGxzb2YnICdERUJVRz0nICdJTkNMPSR7Q0ZMQUdTfScKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLXRlc3RjYXNlcy1uZXR3b3JrLW5mc3Y0LWFjbC1hY2wxLmMtU2VjdXJpdHktZml4LW9uLXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS10ZXN0Y2FzZXMtbmV0d29yay1uZnN2NC1hY2wtYWNsMS5jLVNlY3VyaXR5LWZpeC1vbi1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTMyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS10ZXN0Y2FzZXMtbmV0d29yay1uZnN2NC1hY2wtYWNsMS5jLVNlY3VyaXR5LWZpeC1vbi1zLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gNjcyYTU2YmUxNDQyNmVhZTQ0ODY0NjczYzZjMmFmY2EwYWI4OWQ0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IEZyaSwgMTMgTWF5IDIwMTYgMTE6MTE6MjggLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdGNhc2VzL25ldHdvcmsvbmZzdjQvYWNsL2FjbDEuYzogU2VjdXJpdHkgZml4IG9uIHN0cmluZworIHByaW50ZgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitGaXhlczoKKworYWNsMS5jOiBJbiBmdW5jdGlvbiAndGVzdF9hY2xfZGVmYXVsdCc6CithY2wxLmM6MzE3OjI6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMKK1stV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KKyAgcHJpbnRmKGNtZCk7CisKK1tZT0NUTyAjOTU0OF0KKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdGVzdGNhc2VzL25ldHdvcmsvbmZzdjQvYWNsL2FjbDEuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3b3JrL25mc3Y0L2FjbC9hY2wxLmMgYi90ZXN0Y2FzZXMvbmV0d29yay9uZnN2NC9hY2wvYWNsMS5jCitpbmRleCBiOGI2N2I0Li43YzdjNTA2IDEwMDY0NAorLS0tIGEvdGVzdGNhc2VzL25ldHdvcmsvbmZzdjQvYWNsL2FjbDEuYworKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvbmZzdjQvYWNsL2FjbDEuYworQEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIHRlc3RfYWNsX2RlZmF1bHQoY2hhciAqZGlyLCBhY2xfdCBhY2wpCisgCWNoYXIgKmNtZCA9IG1hbGxvYygyNTYpOworIAorIAlzdHJjcHkoY21kLCAiY2htb2QgNzc3NyAiKTsKKy0JcHJpbnRmKGNtZCk7CisrCXByaW50ZihjbWQsIE5VTEwpOworIAlzdHJjYXQoY21kLCBkaXIpOworIAlzeXN0ZW0oY21kKTsKKyAJYWNsMiA9IGFjbF9nZXRfZmlsZShwYXRoLCBBQ0xfVFlQRV9BQ0NFU1MpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMi1BZGQta25vYi10by1jb250cm9sLXdoZXRoZXItbnVtYS1zdXBwb3J0LXNob3VsZC1iZS1jLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDItQWRkLWtub2ItdG8tY29udHJvbC13aGV0aGVyLW51bWEtc3VwcG9ydC1zaG91bGQtYmUtYy5wYXRjaAppbmRleCA2ODcyNWRjLi4wNjg0YmVlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMi1BZGQta25vYi10by1jb250cm9sLXdoZXRoZXItbnVtYS1zdXBwb3J0LXNob3VsZC1iZS1jLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAyLUFkZC1rbm9iLXRvLWNvbnRyb2wtd2hldGhlci1udW1hLXN1cHBvcnQtc2hvdWxkLWJlLWMucGF0Y2gKQEAgLTcsNyArNyw3IEBACiBvdGhlcndpc2UgdW5kZXRlcm1pbmlzdGljIGRlcGVuZGVuY3kgd2lsbCBiZSBnZW5lcmF0ZWQKIGR1cmluZyBidWlsZCBkZXBlbmRpbmcgdXBvbmcgbnVtYSBiZWluZyBzdGFnZWQgb3Igbm90CiAKLXNpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAtLS0KICBtNC9sdHAtbnVtYS5tNCB8IDEwICsrKysrKysrKy0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE2MDEyNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE2MDEyNi5iYgppbmRleCAwOTdjMTZkLi43NjMxZTBlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNjAxMjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTYwMTI2LmJiCkBAIC02Miw2ICs2Miw3IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDMzLXNobWF0MS1Db3Zlci1HTlUtc3BlY2lmaWMtY29kZS11bmRlci1fX1VTRV9HTlUucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAzNC1wZXJpb2RpY19vdXRwdXQucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAzNS1maXgtdGVzdF9wcm9jX2tpbGwtaGFuZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3RjYXNlcy1uZXR3b3JrLW5mc3Y0LWFjbC1hY2wxLmMtU2VjdXJpdHktZml4LW9uLXMucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCkBAIC05MSw2ICs5MiwxNCBAQAogICAgIGluc3RhbGwgLWQgJHtEfS9vcHQvbHRwLwogICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IFNLSVBfSURDSEVDSz0xIGluc3RhbGwKIAorICAgICMgZml4dXAgbm90IGRlcGxveSBTVFBmYWlsdXJlX3JlcG9ydC5wbCB0byBhdm9pZCBjb25mdXNpbmcgYWJvdXQgaXQgZmFpbHMgdG8gcnVuCisgICAgIyBhcyBpdCBsYWNrcyBkZXBlbmRlbmN5IG9uIHNvbWUgcGVybCBtb3VkbGUgc3VjaCBhcyBMV1A6OlNpbXBsZQorICAgICMgQW5kIHRoaXMgc2NyaXB0IHByZXZpb3VzbHkgd29ya3MgYXMgYSB0b29sIGZvciBhbmFseXppbmcgZmFpbHVyZXMgZnJvbSBMVFAKKyAgICAjIHJ1bnMgb24gdGhlIE9TREwncyBTY2FsZWFibGUgVGVzdCBQbGF0Zm9ybSAoU1RQKSBhbmQgaXQgbWFpbmx5IGFjY2Vzc2VzCisgICAgIyBodHRwOi8va2hhY2sub3NkbC5vcmcgdG8gcmV0cmlldmUgbHRwIHRlc3QgcmVzdWx0cyBydW4gb24KKyAgICAjIE9TREwncyBTY2FsZWFibGUgVGVzdCBQbGF0Zm9ybSwgYnV0IG5vdyBodHRwOi8va2hhY2sub3NkbC5vcmcgdW5hY2Nlc3NpYmxlCisgICAgcm0gLXJmICR7RH0vb3B0L2x0cC9iaW4vU1RQZmFpbHVyZV9yZXBvcnQucGwKKwogICAgICMgQ29weSBQT1NJWCB0ZXN0IHN1aXRlIGludG8gJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcyBieSBtYW51YWwKICAgICBjcCAtciB0ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUgJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcwogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgppbmRleCA0YTMyZDJmLi45ZGQ3MTBhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgpAQCAtMTEsNyArMTEsNyBAQAogCiBERVBFTkRTID0gIm9wZW5zc2wiCiAKLVNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS5vcmlnLnRhci5nejtuYW1lPWFyY2hpdmUgXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUub3JpZy50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggXApAQCAtMjgsNiArMjgsNyBAQAogCiAjIGZvciB0aGlzIHBhY2thZ2Ugd2UncmUgbW9zdGx5IGludGVyZXN0ZWQgaW4gdHJhY2tpbmcgZGViaWFuIHBhdGNoZXMsCiAjIGFuZCBub3QgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gd2hlcmUgYWxsIGRldmVsb3BtZW50IGhhcyBlZmZlY3RpdmVseSBzdG9wcGVkCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2gvaGVpcmxvb20tbWFpbHgvIgogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+KChcZCtcLiopKyktKChcZCtcLiopKykpXC4oZGlmZnxkZWJpYW5cLnRhcilcLihnenx4eikiCiAKIFMgPSAiJHtXT1JLRElSfS9oZWlybG9vbS1tYWlseC0xMi41IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVkZjBhYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLVNVTU1BUlkgPSAiTGludXggbWFuLXBhZ2VzIgotREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IG1hbi1wYWdlcyBwcm9qZWN0IGRvY3VtZW50cyB0aGUgTGludXgga2VybmVsIGFuZCBDIGxpYnJhcnkgaW50ZXJmYWNlcyB0aGF0IGFyZSBlbXBsb3llZCBieSB1c2VyIHByb2dyYW1zIgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9kb2NzL21hbi1wYWdlcyIKLUxJQ0VOU0UgPSAiR1BMdjIrIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PThmMmEzZDQzMDU3ZDQ1OGU1MDY2NzE0OTgwNTY3YTYwIgotU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2RvY3MvJHtCUE59L0FyY2hpdmUvJHtCUH0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOTAxY2Q1MmUwZWUyYTlkNzUwOGFlMWFiMTVkNWU4MzUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmZmMDcyNDYyYmFlYThkMWI4ZTQ1Njg3NTkzMjRjNWVkNmM3NjA3MTZmZTgzMGJjYTcxMTI5Y2MwOWUwMDY2OCIKLQotUkRFUEVORFNfJHtQTn0gPSAibWFuIgotCi1kb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgotZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCi0KLWRvX2luc3RhbGwoKSB7Ci0gICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KLX0KLQotIyBPbmx5IGRlbGl2ZXJlcyBtYW4tcGFnZXMgc28gRklMRVNfJHtQTn0gZ2V0cyBldmVyeXRoaW5nCi1GSUxFU18ke1BOfS1kb2MgPSAiIgotRklMRVNfJHtQTn0gPSAiJHttYW5kaXJ9LyoiCi0KLWluaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJwYXNzd2QuNSBnZXRzcG5hbS4zIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3Bhc3N3ZC41XSA9ICIke21hbmRpcn0vbWFuNS9wYXNzd2QuNSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXRzcG5hbS4zXSA9ICIke21hbmRpcn0vbWFuMy9nZXRzcG5hbS4zIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmEzZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDcuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJMaW51eCBtYW4tcGFnZXMiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggbWFuLXBhZ2VzIHByb2plY3QgZG9jdW1lbnRzIHRoZSBMaW51eCBrZXJuZWwgYW5kIEMgbGlicmFyeSBpbnRlcmZhY2VzIHRoYXQgYXJlIGVtcGxveWVkIGJ5IHVzZXIgcHJvZ3JhbXMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2RvY3MvbWFuLXBhZ2VzIgorTElDRU5TRSA9ICJHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9OGYyYTNkNDMwNTdkNDU4ZTUwNjY3MTQ5ODA1NjdhNjAiCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvZG9jcy8ke0JQTn0vQXJjaGl2ZS8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNWJhMWNiMjFlOTlkMDJiZDdiYzFhNTkzNzg5NjVkMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjOTczMzUxMTMxOTMxZjc3MDBmNWU5ZmJmNGVmMzY2YzQzZWE3YzE1MTVkMjgyZThkNWRiOWM3NzU5MGM0YzkzIgorCitSREVQRU5EU18ke1BOfSA9ICJtYW4iCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCisjIE9ubHkgZGVsaXZlcmVzIG1hbi1wYWdlcyBzbyBGSUxFU18ke1BOfSBnZXRzIGV2ZXJ5dGhpbmcKK0ZJTEVTXyR7UE59LWRvYyA9ICIiCitGSUxFU18ke1BOfSA9ICIke21hbmRpcn0vKiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhc3N3ZC41IGdldHNwbmFtLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE1LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzNhMTZhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE1LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotU1VNTUFSWSA9ICJNaWRuaWdodCBDb21tYW5kZXIgaXMgYW4gbmN1cnNlcyBiYXNlZCBmaWxlIG1hbmFnZXIiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MGJiYWZlMzYwZTczZjk4NDBiZDc5ODE2MjFmOWMyIgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotREVQRU5EUyA9ICJuY3Vyc2VzIGdsaWItMi4wIHV0aWwtbGludXgiCi1SREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiZGI0OGNlMjZiYTQyNWE2MWVkYzUxOTMwZTk0MjI3ZmQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjc0ZTNkYTcwNDEwOTc1Y2RlYjI3ZWU5YTY2ZDFkZDgxMjI1MGI2ZDNlZGUzNjRiY2E3MjhkZDVhNDhlNTQ3MSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKLQotIwotIyBCb3RoIFNhbWJhIChzbWIpIGFuZCBzZnRwIHJlcXVpcmUgcGFja2FnZSBkZWxpdmVyZWQgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZAotIwotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS12ZnMtc21iLC0tZGlzYWJsZS12ZnMtc21iLHNhbWJhLCIKLVBBQ0tBR0VDT05GSUdbc2Z0cF0gPSAiLS1lbmFibGUtdmZzLXNmdHAsLS1kaXNhYmxlLXZmcy1zZnRwLGxpYnNzaDIsIgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNjcmVlbj1uY3Vyc2VzIC0td2l0aG91dC1ncG0tbW91c2UgLS13aXRob3V0LXgiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCi0Jc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhJHtiaW5kaXJ9L2VudiBweXRob24sJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKLX0KLQotUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMtcHl0aG9uICR7QlBOfS1oZWxwZXJzICR7QlBOfS1maXNoIgotCi1TVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFBlcmwtYmFzZWQgaGVscGVyIHNjcmlwdHMiCi1GSUxFU18ke0JQTn0taGVscGVycy1wZXJsID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYXB0KyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWIgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmEgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViZCAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZHBrZysgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvbWFpbGZzICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9wYXRjaGZzIFwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9ycG1zKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWxpYiBcIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdXppcCIKLVJERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAicGVybCIKLQotU1VNTUFSWV8ke0JQTn0taGVscGVycy1weXRob24gPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFB5dGhvbi1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKLUZJTEVTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvczMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEiCi1SREVQRU5EU18ke0JQTn0taGVscGVycy1weXRob24gPSAicHl0aG9uIgotCi1TVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKLUZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKLQotU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgotRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWM0ZWNlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTcuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJNaWRuaWdodCBDb21tYW5kZXIgaXMgYW4gbmN1cnNlcyBiYXNlZCBmaWxlIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MGJiYWZlMzYwZTczZjk4NDBiZDc5ODE2MjFmOWMyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorREVQRU5EUyA9ICJuY3Vyc2VzIGdsaWItMi4wIHV0aWwtbGludXgiCitSREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNmU5YzA3MDY2ZTQwYWYwNmIyNjNhMTNmYWQxN2EwN2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjZkMGNiMzdiYWFlZDhlZjkzMGY4YWQyNWE2MzRhZGFkNGYyNjRlYjYxODIwODkzOTIwYWM4N2I5ZGZiNzgzYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIworIyBCb3RoIFNhbWJhIChzbWIpIGFuZCBzZnRwIHJlcXVpcmUgcGFja2FnZSBkZWxpdmVyZWQgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZAorIworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS12ZnMtc21iLC0tZGlzYWJsZS12ZnMtc21iLHNhbWJhLCIKK1BBQ0tBR0VDT05GSUdbc2Z0cF0gPSAiLS1lbmFibGUtdmZzLXNmdHAsLS1kaXNhYmxlLXZmcy1zZnRwLGxpYnNzaDIsIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNjcmVlbj1uY3Vyc2VzIC0td2l0aG91dC1ncG0tbW91c2UgLS13aXRob3V0LXgiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhJHtiaW5kaXJ9L2VudiBweXRob24sJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKK30KKworUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMtcHl0aG9uICR7QlBOfS1oZWxwZXJzICR7QlBOfS1maXNoIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFBlcmwtYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1wZXJsID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYXB0KyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWIgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViZCAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZHBrZysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvbWFpbGZzICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9wYXRjaGZzIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9ycG1zKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWxpYiBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdXppcCIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAicGVybCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1weXRob24gPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFB5dGhvbi1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvczMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1weXRob24gPSAicHl0aG9uIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKKworU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgorRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC1zb21lLXR5cGUtY29tcGFyaXNvbi1wcm9ibGVtcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1GaXgtc29tZS10eXBlLWNvbXBhcmlzb24tcHJvYmxlbXMucGF0Y2gKaW5kZXggZWU0ODJiNS4uZjgyOTQ2NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC1zb21lLXR5cGUtY29tcGFyaXNvbi1wcm9ibGVtcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXNvbWUtdHlwZS1jb21wYXJpc29uLXByb2JsZW1zLnBhdGNoCkBAIC0xMSw3ICsxMSw3IEBACiAKIFVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKIAotU2lnbmVkLW9mZi1ieSA6IFhpYW8gTmkgPHhuaUByZWRoYXQuY29tPgorU2lnbmVkLW9mZi1ieTogOiBYaWFvIE5pIDx4bmlAcmVkaGF0LmNvbT4KIFNpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgogLS0tCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1tZGFkbS5oLVVuZGVmaW5lLWRwcmludGYtYmVmb3JlLXJlZGVmaW5pbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtbWRhZG0uaC1VbmRlZmluZS1kcHJpbnRmLWJlZm9yZS1yZWRlZmluaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjgwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtbWRhZG0uaC1VbmRlZmluZS1kcHJpbnRmLWJlZm9yZS1yZWRlZmluaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gNmQzNjllOGYyMjY1OTQ2MzJjZTQyNjAxMjk1MDlkYWY3MDMwZGUwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDkgTWF5IDIwMTYgMjI6MDM6NTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWRhZG0uaDogVW5kZWZpbmUgZHByaW50ZiBiZWZvcmUgcmVkZWZpbmluZworCitkcHJpbnRmIGlzIGFsc28gZGVmaW5lZCBpbiBsaWJjIHNlZQordXNyL2luY2x1ZGUvYml0cy9zdGRpbzIuaCwgdGhpcyBjb21lcyBpbnRvCitwbGF5IGVzcGVjaWFsbHkgd2hlbiBmb3J0aWZ5IHNvdXJjZXMgaXMgZW5hYmxlZAorYW5kIGNvbXBpbGVycyBsaWtlIGNsYW5nIHJlcG9ydHMgdGhlIG92ZXJyaWRlCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSBwb2xpY3kuYzoyNToKKy4vbWRhZG0uaDoxNTYyOjk6IGVycm9yOiAnZHByaW50ZicgbWFjcm8gcmVkZWZpbmVkIFstV2Vycm9yLC1XbWFjcm8tcmVkZWZpbmVkXQorICAgICAgICBeCisvbW50L29lL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8yLmg6MTQ1OjEyOiBub3RlOiBwcmV2aW91cyBkZWZpbml0aW9uIGlzIGhlcmUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBtZGFkbS5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21kYWRtLmggYi9tZGFkbS5oCitpbmRleCAyMzBlNjBmLi44YzhmNGQxIDEwMDc1NQorLS0tIGEvbWRhZG0uaAorKysrIGIvbWRhZG0uaAorQEAgLTE1NTQsMTEgKzE1NTQsMTMgQEAgc3RhdGljIGlubGluZSBjaGFyICp0b19zdWJhcnJheShzdHJ1Y3QgbWRzdGF0X2VudCAqZW50LCBjaGFyICpjb250YWluZXIpCisgfQorIAorICNpZmRlZiBERUJVRworKyN1bmRlZiBkcHJpbnRmCisgI2RlZmluZSBkcHJpbnRmKGZtdCwgYXJnLi4uKSBcCisgCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzOiAiZm10LCBOYW1lLCBfX2Z1bmNfXywgIyNhcmcpCisgI2RlZmluZSBkcHJpbnRmX2NvbnQoZm10LCBhcmcuLi4pIFwKKyAJZnByaW50ZihzdGRlcnIsIGZtdCwgIyNhcmcpCisgI2Vsc2UKKysjdW5kZWYgZHByaW50ZgorICNkZWZpbmUgZHByaW50ZihmbXQsIGFyZy4uLikgXAorICAgICAgICAgKHsgaWYgKDApIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzOiAiIGZtdCwgTmFtZSwgX19mdW5jX18sICMjYXJnKTsgMDsgfSkKKyAjZGVmaW5lIGRwcmludGZfY29udChmbXQsIGFyZy4uLikgXAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtcmFpZDZjaGVjay1GaXgtaWYtZWxzZS1pbmRlbnRhdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1yYWlkNmNoZWNrLUZpeC1pZi1lbHNlLWluZGVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMzRiODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtcmFpZDZjaGVjay1GaXgtaWYtZWxzZS1pbmRlbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDFiMGFhMWRlYmY2ZmJlOTkyM2M5YWFjNjcxZDI4OTRmNzZjMzJmOWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyMCBBcHIgMjAxNiAxNjozODoxMyArMDAwMAorU3ViamVjdDogW1BBVENIXSByYWlkNmNoZWNrOiBGaXggaWYtZWxzZSBpbmRlbnRhdGlvbgorCitnY2MgNiB3YXJucyBhYm91dCBhbWJpZ3VpdHkgZHVlIHRvIHRoaXMgaW5kZW50YXRpb24KK3wgcmFpZDZjaGVjay5jOiBJbiBmdW5jdGlvbiAnbWFudWFsX3JlcGFpcic6Cit8IHJhaWQ2Y2hlY2suYzoyNjc6NDogZXJyb3I6IHRoaXMgJ2Vsc2UnIGNsYXVzZSBkb2VzIG5vdCBndWFyZC4uLiBbLVdlcnJvcj1taXNsZWFkaW5nLWluZGVudGF0aW9uXQorfCAgICAgZWxzZQorfCAgICAgXn5+fgorfCByYWlkNmNoZWNrLmM6MjY5OjU6IG5vdGU6IC4uLnRoaXMgc3RhdGVtZW50LCBidXQgdGhlIGxhdHRlciBpcyBtaXNsZWFkaW5nbHkgaW5kZW50ZWQgYXMgaWYgaXQgaXMgZ3VhcmRlZCBieSB0aGUgJ2Vsc2UnCit8ICAgICAgcHJpbnRmKCJSZXBhaXJpbmcgRCglZCkgYW5kIFBcbiIsIGZhaWxlZF9kYXRhKTsKK3wgICAgICBefn5+fn4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIHJhaWQ2Y2hlY2suYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JhaWQ2Y2hlY2suYyBiL3JhaWQ2Y2hlY2suYworaW5kZXggYWQ3ZmZlNy4uNDA5YjFiNiAxMDA2NDQKKy0tLSBhL3JhaWQ2Y2hlY2suYworKysrIGIvcmFpZDZjaGVjay5jCitAQCAtMjY2LDcgKzI2Niw3IEBAIGludCBtYW51YWxfcmVwYWlyKGludCBjaHVua19zaXplLCBpbnQgc3luZHJvbWVfZGlza3MsCisgCQkJCWZhaWxlZF9kYXRhID0gZmFpbGVkX3Nsb3QyOworIAkJCWVsc2UKKyAJCQkJZmFpbGVkX2RhdGEgPSBmYWlsZWRfc2xvdDE7CistCQkJCXByaW50ZigiUmVwYWlyaW5nIEQoJWQpIGFuZCBQXG4iLCBmYWlsZWRfZGF0YSk7CisrCQkJcHJpbnRmKCJSZXBhaXJpbmcgRCglZCkgYW5kIFBcbiIsIGZhaWxlZF9kYXRhKTsKKyAJCQlyYWlkNl9kYXRhcF9yZWNvdihzeW5kcm9tZV9kaXNrcysyLCBjaHVua19zaXplLAorIAkJCQkJICBmYWlsZWRfZGF0YSwgKHVpbnQ4X3QqKilibG9ja3MsIDEpOworIAkJfSBlbHNlIHsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4yLjJfZml4X2Zvcl94MzIucGF0Y2gKaW5kZXggNDBhY2MxNC4uODRjMzgyZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogQXMgdGhlIGJpdGJha2UgZGVmaW5lZCBDQyBpcyBnb29kLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlZGZpbmUgQ0MgaW4gdGhlIAogbWFrZSBmaWxlLCBoZW5jZSBtYWtpbmcgdGhlIENDIGRlZmluaXRpb24gaW4gdGhlIE1ha2VmaWxlIGNvbmRpdGlvbmFsLgogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA3CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA3CiAKIEluZGV4OiBtZGFkbS0zLjMvTWFrZWZpbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9tZGFkbV8zLjQuYmIKaW5kZXggMTQyZGZkZC4uMjYxMDU0ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9tZGFkbV8zLjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9tZGFkbV8zLjQuYmIKQEAgLTE5LDcgKzE5LDkgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LXNvbWUtdHlwZS1jb21wYXJpc29uLXByb2JsZW1zLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LXRoZS1wYXRoLW9mLWNvcm9zeW5jLWFuZC1kbG0taGVhZGVyLWZpbGVzLWNoZWNrLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0JICAiCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXJhaWQ2Y2hlY2stRml4LWlmLWVsc2UtaW5kZW50YXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tZGFkbS5oLVVuZGVmaW5lLWRwcmludGYtYmVmb3JlLXJlZGVmaW5pbmcucGF0Y2ggXAorICAgICAgICAgICAiCiBTUkNfVVJJW21kNXN1bV0gPSAiMDRiOGIyMWY2Mzc1NDAzNTBmODUxN2M3ZTY4ZDNjNjMiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjdkMGJlNDYyN2QzOGExMmRkY2QxYzFjMzcyMWQ2NDlkNGU4OWUxMDkzOTE0NDk3ZTIyYjU3MjQ1Y2RhODgwOCIKIApAQCAtNDQsOCArNDYsNiBAQAogCWF1dG90b29sc19kb19pbnN0YWxsCiB9CiAKLUZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvKi5ydWxlcyIKLQogaW5oZXJpdCBwdGVzdAogCiBkb19jb21waWxlX3B0ZXN0KCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmQ3OGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAibXNtdHAgaXMgYW4gU01UUCBjbGllbnQiCi1ERVNDUklQVElPTiA9ICJBIHNlbmRtYWlsIHJlcGxhY2VtZW50IGZvciB1c2UgaW4gTVRBcyBsaWtlIG11dHQiCi1IT01FUEFHRSA9ICJodHRwOi8vbXNtdHAuc291cmNlZm9yZ2UubmV0LyIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotCi1MSUNFTlNFID0gIkdQTHYzIgotREVQRU5EUyA9ICJ6bGliIGdudXRscyIKLQotI0NPUFlJTkcgb3IgTGljZW5jZQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tc210cC9maWxlcy9tc210cC8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2ZDkzODRjMDk0MDVkYjk0NzZiZWFhMjIzN2M1NjcwNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmOTgyYmUwNjljMDc3MmMzZWU4MzkyNWY1NTJmNWRhYzVmYjMwN2QyZDFjNjgyMDJmOTkyNmJiMTNiNzU3MzU1IgotCi1pbmhlcml0IGdldHRleHQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCi0KLUVYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnNlY3JldCAtLXdpdGhvdXQtbGliZ3Nhc2wgLS13aXRob3V0LWxpYmlkbiIKLQotQUxURVJOQVRJVkVfJHtQTn0gPSAic2VuZG1haWwiCi1BTFRFUk5BVElWRV9UQVJHRVRbc2VuZG1haWxdID0gIiR7YmluZGlyfS9tc210cCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtzZW5kbWFpbF0gPSAiJHtzYmluZGlyfS9zZW5kbWFpbCIKLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKLQotcGtnX3Bvc3RpbnN0XyR7UE59X2xpbnV4c3RkYmFzZSAoKSB7Ci0JIyAvdXNyL2xpYi9zZW5kbWlhbCBpcyByZXF1aXJlZCBieSBMU0IgY29yZSB0ZXN0Ci0JWyAhIC1MICREL3Vzci9saWIvc2VuZG1haWwgXSAmJiBsbiAtc2YgJHtzYmluZGlyfS9zZW5kbWFpbCAkRC91c3IvbGliLwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjMzllYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjUuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJtc210cCBpcyBhbiBTTVRQIGNsaWVudCIKK0RFU0NSSVBUSU9OID0gIkEgc2VuZG1haWwgcmVwbGFjZW1lbnQgZm9yIHVzZSBpbiBNVEFzIGxpa2UgbXV0dCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tc210cC5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitERVBFTkRTID0gInpsaWIgZ251dGxzIgorCisjQ09QWUlORyBvciBMaWNlbmNlCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21zbXRwL2ZpbGVzL21zbXRwLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUwYThjOWJiNzJmODIyMjc3OWRiNmI0YWFlMjk2NWUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc2YTBkNjA2OTNjN2U2NWQwYzdhMTJmMDFkMzAwODgyZDI4MGIxZTFiZTAyMDJmNTQ3MzBhZTQ0ZDQ0YTUwMDYiCisKK2luaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2VjcmV0IC0td2l0aG91dC1saWJnc2FzbCAtLXdpdGhvdXQtbGliaWRuIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZW5kbWFpbCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzZW5kbWFpbF0gPSAiJHtiaW5kaXJ9L21zbXRwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NlbmRtYWlsXSA9ICIke3NiaW5kaXJ9L3NlbmRtYWlsIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitwa2dfcG9zdGluc3RfJHtQTn1fbGludXhzdGRiYXNlICgpIHsKKwkjIC91c3IvbGliL3NlbmRtaWFsIGlzIHJlcXVpcmVkIGJ5IExTQiBjb3JlIHRlc3QKKwlbICEgLUwgJEQvdXNyL2xpYi9zZW5kbWFpbCBdICYmIGxuIC1zZiAke3NiaW5kaXJ9L3NlbmRtYWlsICREL3Vzci9saWIvCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvMDAwMS1saWItaW5ldDYuYy1JTkVUNl9ycmVzb2x2ZS12YXJpb3VzLWZpeGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzLzAwMDEtbGliLWluZXQ2LmMtSU5FVDZfcnJlc29sdmUtdmFyaW91cy1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmU0NWNjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzLzAwMDEtbGliLWluZXQ2LmMtSU5FVDZfcnJlc29sdmUtdmFyaW91cy1maXhlcy5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIDA4YWJmY2Q5MjNlOWYzN2QxOTAyZGIyNjc3MWIxZGM2NzMxZWIyNjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaXJpIFBvcGVsa2EgPGpwb3BlbGthQHJlZGhhdC5jb20+CitEYXRlOiBGcmksIDI3IFNlcCAyMDEzIDE4OjQwOjA2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBsaWIvaW5ldDYuYzpJTkVUNl9ycmVzb2x2ZSgpIC0gdmFyaW91cyBmaXhlcworCisxKSBGYWxsLWJhY2sgdG8gbnVtZXJpYyBhZGRyZXNzIGlmIGdldG5hbWVpbmZvIGZhaWxzLgorICAgUmV2ZXJzZSBsb29rdXAgaXMgbm90IG1hbmRhdG9yeSwgdGhlcmVmb3JlIGl0cyBmYWlsCisgICBpcyBub3QgYW4gZXJyb3IuIEp1c3QgcmV0dXJuIG51bWVyaWMgYWRkcmVzcyBpbiB0aGF0IGNhc2UuCisgICBUaGlzIG1ha2VzIG5ldHN0YXQvcm91dGUgc2hvdyBJUHY2IGFkZHJlc3MgaW5zdGVhZCBvZgorICAgW1VOS05PV05dIGluIGNhc2Ugb2YgRE5TIHByb2JsZW1zLgorCisyKSBQYXNzIGxlbmd0aCBvZiAnbmFtZScgYnVmZmVyIGludG8gZnVuY3Rpb24uCisgICAnbmFtZScgaXMgYSBwb2ludGVyIGFuZCB0aGVyZWZvcmUgc2l6ZW9mKG5hbWUpCisgICByZXR1cm5zIHNpemUgb2YgcG9pbnRlciBhbmQgbm90IHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAgIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE0Mjk4NzEwL2MtcG9pbnRlcnMtYW5kLWFycmF5cy1zaXplb2Ytb3BlcmF0b3IKKyAgIFRoZSBzaXplb2YoKSB1c2FnZSB3YXMgYWRkZWQgd2l0aCBjb21taXQgNjA0Nzg1YWRjLAorICAgc28gSSBjaGVja2VkIGFsbCB0aGUgb3RoZXIgY2hhbmdlcyBpbiB0aGF0IGNvbW1pdAorICAgYW5kIHRoZXkgc2VlbSB0byBiZSBPSy4KKworMykgcmVtb3ZlIHVudXNlZCAncycgdmFyaWFibGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNoYW4gSGFpIDxzaGFuLmhhaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmlhbmNodWFuIFdhbmcgPGppYW5jaHVhbi53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvaW5ldDYuYyB8IDIxICsrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9pbmV0Ni5jIGIvbGliL2luZXQ2LmMKK2luZGV4IDlhNDg0YTAuLjJhOWM0NTkgMTAwNjQ0CistLS0gYS9saWIvaW5ldDYuYworKysrIGIvbGliL2luZXQ2LmMKK0BAIC04NCwxMCArODQsOSBAQCBzdGF0aWMgaW50IElORVQ2X3Jlc29sdmUoY2hhciAqbmFtZSwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikKKyAjZW5kaWYKKyAKKyAKKy1zdGF0aWMgaW50IElORVQ2X3JyZXNvbHZlKGNoYXIgKm5hbWUsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsIGludCBudW1lcmljKQorK3N0YXRpYyBpbnQgSU5FVDZfcnJlc29sdmUoY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkJICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42LCBpbnQgbnVtZXJpYykKKyB7CistICAgIGludCBzOworLQorICAgICAvKiBHcm1wZi4gLUZ2SyAqLworICAgICBpZiAoc2luNi0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKKyAjaWZkZWYgREVCVUcKK0BAIC05OCwyMSArOTcsMjAgQEAgc3RhdGljIGludCBJTkVUNl9ycmVzb2x2ZShjaGFyICpuYW1lLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42LCBpbnQgbnVtZXJpYykKKyAJcmV0dXJuICgtMSk7CisgICAgIH0KKyAgICAgaWYgKG51bWVyaWMgJiAweDdGRkYpIHsKKy0JaW5ldF9udG9wKCBBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgbmFtZSwgODApOworKwlpbmV0X250b3AoIEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBuYW1lLCBuYW1lbGVuKTsKKyAJcmV0dXJuICgwKTsKKyAgICAgfQorICAgICBpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKyAgICAgICAgIGlmIChudW1lcmljICYgMHg4MDAwKQorLQkgICAgc3RyY3B5KG5hbWUsICJkZWZhdWx0Iik7CisrCSAgICBzYWZlX3N0cm5jcHkobmFtZSwgImRlZmF1bHQiLCBuYW1lbGVuKTsKKyAJZWxzZQorLQkgICAgc3RyY3B5KG5hbWUsICJbOjpdIik7CisrCSAgICBzYWZlX3N0cm5jcHkobmFtZSwgIls6Ol0iLCBuYW1lbGVuKTsKKyAJcmV0dXJuICgwKTsKKyAgICAgfQorIAorLSAgICBpZiAoKHMgPSBnZXRuYW1laW5mbygoc3RydWN0IHNvY2thZGRyICopIHNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSwKKy0JCQkgbmFtZSwgMjU1IC8qICEhICovICwgTlVMTCwgMCwgMCkpKSB7CistCWZwdXRzKCJnZXRuYW1laW5mbyBmYWlsZWRcbiIsIHN0ZGVycik7CistCXJldHVybiAtMTsKKysgICAgaWYgKGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIgKikgc2luNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAorKwkJICAgIG5hbWUsIG5hbWVsZW4gLCBOVUxMLCAwLCAwKSkgeworKwlpbmV0X250b3AoIEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBuYW1lLCBuYW1lbGVuKTsKKyAgICAgfQorICAgICByZXR1cm4gKDApOworIH0KK0BAIC0xNDMsNyArMTQxLDggQEAgc3RhdGljIGNoYXIgKklORVQ2X3NwcmludChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgaW50IG51bWVyaWMpCisgCisgICAgIGlmIChzYXAtPnNhX2ZhbWlseSA9PSAweEZGRkYgfHwgc2FwLT5zYV9mYW1pbHkgPT0gMCkKKyAJcmV0dXJuIHNhZmVfc3RybmNweShidWZmLCBfKCJbTk9ORSBTRVRdIiksIHNpemVvZihidWZmKSk7CistICAgIGlmIChJTkVUNl9ycmVzb2x2ZShidWZmLCAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzYXAsIG51bWVyaWMpICE9IDApCisrICAgIGlmIChJTkVUNl9ycmVzb2x2ZShidWZmLCBzaXplb2YoYnVmZiksCisrCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc2FwLCBudW1lcmljKSAhPSAwKQorIAlyZXR1cm4gc2FmZV9zdHJuY3B5KGJ1ZmYsIF8oIltVTktOT1dOXSIpLCBzaXplb2YoYnVmZikpOworICAgICByZXR1cm4gKGZpeF92NF9hZGRyZXNzKGJ1ZmYsICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXApLT5zaW42X2FkZHIpKTsKKyB9CistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtZml4LWJ1aWxkaW5nLXdpdGgtbGludXgtNC44LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1maXgtYnVpbGRpbmctd2l0aC1saW51eC00LjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1ZWViMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtZml4LWJ1aWxkaW5nLXdpdGgtbGludXgtNC44LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gNGQ1NjY0NWVhMTQ0YTM0ZjdjZGQzZTNlZGU2NDUyZDgxZmJhZTI1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJhbmR5IE1hY0xlb2QgPFJhbmR5Lk1hY0xlb2RAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgOCBPY3QgMjAxNiAxNDo0Mjo1NCArMDgwMAorU3ViamVjdDogW1BBVENIXSBpcHR1bm5lbC5jOiBpbmNsdWRlIGxpbnV4L2lwLmggdG8gZml4IGJ1aWxkaW5nIHdpdGggbGludXgtNC44CisKK0ZpeCBhIGJ1aWxkIGVycm9yIHdoZW4gdXNpbmcgdGhlIGxpbnV4LTQuOCBoZWFkZXJzIHRoYXQgcmVzdWx0cyBpbjoKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tCisuLi4vc3lzcm9vdHMvcWVtdWFybTY0L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oOjY6MCwKKyAgICAgICAgICAgICAgICAgIGZyb20gaXB0dW5uZWwuYzozOToKKy4uLi9xZW11YXJtNjQvdXNyL2luY2x1ZGUvbGludXgvaXAuaDo4NTo4OiBlcnJvcjogcmVkZWZpbml0aW9uIG9mCisnc3RydWN0IGlwaGRyJworICBzdHJ1Y3QgaXBoZHIgeworICAgICAgICAgXn5+fn4KK0luIGZpbGUgaW5jbHVkZWQgZnJvbSBpcHR1bm5lbC5jOjI5OjA6CisuLi4vcWVtdWFybTY0L3Vzci9pbmNsdWRlL25ldGluZXQvaXAuaDo0NDo4OiBub3RlOiBvcmlnaW5hbGx5IGRlZmluZWQgaGVyZQorICBzdHJ1Y3QgaXBoZHIKKyAgICAgICAgIF5+fn5+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsxXQorCitbMV0gaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtdG9vbHMvbWFpbG1hbi9tZXNzYWdlLzM1NDEzMDIyLworCitTaWduZWQtb2ZmLWJ5OiBSYW5keSBNYWNMZW9kIDxSYW5keS5NYWNMZW9kQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgaXB0dW5uZWwuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2lwdHVubmVsLmMgYi9pcHR1bm5lbC5jCitpbmRleCA0OTQzZDgzLi5hY2ZjYmM3IDEwMDY0NAorLS0tIGEvaXB0dW5uZWwuYworKysrIGIvaXB0dW5uZWwuYworQEAgLTI2LDcgKzI2LDYgQEAKKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorLSNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSkKKyAjaW5jbHVkZSA8bmV0L2lmLmg+CitAQCAtMzYsNiArMzUsNyBAQAorICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8bGludXgvaXAuaD4KKyAjaW5jbHVkZSA8bGludXgvaWZfdHVubmVsLmg+CisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorLS0gCisyLjguMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHNfMS42MC0yNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCmluZGV4IDYzYjIwNTEuLjQ3YTY4YTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCkBAIC0xNSw2ICsxNSw4IEBACiAgICAgICAgICAgIGZpbGU6Ly9uZXQtdG9vbHMtMS42MC1zY3RwMS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9uZXQtdG9vbHMtMS42MC1zY3RwMi1xdWlldC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9uZXQtdG9vbHMtMS42MC1zY3RwMy1hZGRycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYi1pbmV0Ni5jLUlORVQ2X3JyZXNvbHZlLXZhcmlvdXMtZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmV0LXRvb2xzLWZpeC1idWlsZGluZy13aXRoLWxpbnV4LTQuOC5wYXRjaCBcCiAgICAgICAgICAgIgogCiAjIGZvciB0aGlzIHBhY2thZ2Ugd2UncmUgbW9zdGx5IGludGVyZXN0ZWQgaW4gdHJhY2tpbmcgZGViaWFuIHBhdGNoZXMsCkBAIC05OSw2ICsxMDEsMTAgQEAKIGJhc2VfYmluZGlyX3Byb2dzICA9ICJkbnNkb21haW5uYW1lIGRvbWFpbm5hbWUgaG9zdG5hbWUgbmV0c3RhdCBuaXNkb21haW5uYW1lIHlwZG9tYWlubmFtZSIKIAogQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiYXNlX3NiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9IgorQUxURVJOQVRJVkVfJHtQTn0tZG9jICs9ICJob3N0bmFtZS4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2hvc3RuYW1lLjFdID0gIiR7bWFuZGlyfS9tYW4xL2hvc3RuYW1lLjEiCitBTFRFUk5BVElWRV9QUklPUklUWVtob3N0bmFtZS4xXSA9ICIxMCIKKwogcHl0aG9uIF9fYW5vbnltb3VzKCkgewogCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgogCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy8wMDAxLWRldGVjdC1nb2xkLWFzLUdOVS1saW5rZXItdG9vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzLzAwMDEtZGV0ZWN0LWdvbGQtYXMtR05VLWxpbmtlci10b28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiM2FmZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy8wMDAxLWRldGVjdC1nb2xkLWFzLUdOVS1saW5rZXItdG9vLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gNTgyNDViODU5ZmZiY2IxNzgwNTc1YmYxYjBhMDE4ZDU1ZTc0ZTQzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjEgU2VwIDIwMTYgMjE6MTQ6NDAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gZGV0ZWN0IGdvbGQgYXMgR05VIGxpbmtlciB0b28KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMDNlOGJkYS4uYzJmY2U1MSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjgsNyArMjgsNyBAQCBBQ19DSEVDS19TSVpFT0YoW3ZvaWQgKl0pCisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKyBMRD1gJENDIC1wcmludC1wcm9nLW5hbWU9bGQgMj4mNWAKKyAKKy1pZiB0ZXN0IGAkTEQgLXYgMj4mMSB8ICRhY19jdl9wYXRoX0dSRVAgLWMgIkdOVSBsZCJgID0gMDsgdGhlbgorK2lmIHRlc3QgYCRMRCAtdiAyPiYxIHwgJGFjX2N2X3BhdGhfR1JFUCAtYyAiR05VICJgID0gMDsgdGhlbgorICAgIyBOb3QKKyAgIEdOVV9MRD0iIgorICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLS0gCisyLjUuNQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjM0ZWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotSW5kZXg6IGdpdC9NYWtlZmlsZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL01ha2VmaWxlLmluCi0rKysgZ2l0L01ha2VmaWxlLmluCi1AQCAtNSw3ICs1LDcgQEAgQ0MgPSBAQ0NACi0gQ1BQID0gQENQUEAKLSBDRkxBR1MgPSBAQ0ZMQUdTQAotIExERkxBR1MgPSBATERGTEFHU0AKLS1DUFBGTEFHUyA9IC1EX0dOVV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvc2xhbmcgQENQUEZMQUdTQCAKLStDUFBGTEFHUyA9IC1EX0dOVV9TT1VSQ0UgQENQUEZMQUdTQCAKLSBHTlVfTEQgPSBAR05VX0xEQAotIAotIFZFUlNJT04gPSBAVkVSU0lPTkAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDQ3NTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XyR7UFZ9LmJiCi0KLVNVTU1BUlkgLj0gIiAtIHB5dGhvbiIKLURFUEVORFMgPSAibGlibmV3dCBweXRob24iCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWNvcmUiCi0KLWluaGVyaXQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIKLQotRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uIgotRVhUUkFfT0VNQUtFICs9ICJQWVRIT05WRVJTPSR7UFlUSE9OX0RJUn0iCi0KLQotZG9fY29tcGlsZSAoKSB7Ci0JVkVSU0lPTj0iJChzZWQgLW4gJ3MvXlZFUlNJT04gPSAvL3AnIE1ha2VmaWxlKSIKLQlvZV9ydW5tYWtlIF9zbmFjay5zbwotfQotCi1kb19pbnN0YWxsICgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQotCWluc3RhbGwgLW0gMDc1NSAke1BZVEhPTl9ESVJ9L19zbmFjay5zbyAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCi0JaW5zdGFsbCAtbSAwNjQ0IHNuYWNrLnB5ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KLX0KLQotUEFDS0FHRVNfcmVtb3ZlID0gIndoaXB0YWlsIgotCi1GSUxFU18ke1BOfSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzNjllZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE5LmJiCkBAIC0wLDAgKzEsMjggQEAKK3JlcXVpcmUgcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfJHtQVn0uYmIKKworU1VNTUFSWSAuPSAiIC0gcHl0aG9uIgorREVQRU5EUyA9ICJsaWJuZXd0IHB5dGhvbjMiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1jb3JlIgorCitpbmhlcml0IHB5dGhvbjNuYXRpdmUgcHl0aG9uMy1kaXIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uIgorRVhUUkFfT0VNQUtFICs9ICJQWVRIT05WRVJTPSR7UFlUSE9OX0RJUn0iCisKKworZG9fY29tcGlsZSAoKSB7CisJVkVSU0lPTj0iJChzZWQgLW4gJ3MvXlZFUlNJT04gPSAvL3AnIE1ha2VmaWxlKSIKKwlvZV9ydW5tYWtlIF9zbmFjay5zbworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorCWluc3RhbGwgLW0gMDc1NSAke1BZVEhPTl9ESVJ9L19zbmFjay5zbyAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJaW5zdGFsbCAtbSAwNjQ0IHNuYWNrLnB5ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KK30KKworUEFDS0FHRVNfcmVtb3ZlID0gIndoaXB0YWlsIgorCitGSUxFU18ke1BOfSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI5NjRiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMTguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi1TVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcyIKLQotREVTQ1JJUFRJT04gPSAiTmV3dCBpcyBhIHByb2dyYW1taW5nIGxpYnJhcnkgZm9yIGNvbG9yIHRleHQgbW9kZSwgd2lkZ2V0IGJhc2VkIHVzZXIgXAotaW50ZXJmYWNlcy4gIE5ld3QgY2FuIGJlIHVzZWQgdG8gYWRkIHN0YWNrZWQgd2luZG93cywgZW50cnkgd2lkZ2V0cywgXAotY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgbGFiZWxzLCBwbGFpbiB0ZXh0IGZpZWxkcywgc2Nyb2xsYmFycywgXAotZXRjLiwgdG8gdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcy4gIFRoaXMgcGFja2FnZSBhbHNvIGNvbnRhaW5zIHRoZSBcCi1zaGFyZWQgbGlicmFyeSBuZWVkZWQgYnkgcHJvZ3JhbXMgYnVpbHQgd2l0aCBuZXd0LCBhcyB3ZWxsIGFzIGEgXAotL3Vzci9iaW4vZGlhbG9nIHJlcGxhY2VtZW50IGNhbGxlZCB3aGlwdGFpbC4gIE5ld3QgaXMgYmFzZWQgb24gdGhlIFwKLXNsYW5nIGxpYnJhcnkuIgotCi1IT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbmV3dC8iCi1TRUNUSU9OID0gImxpYnMiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCi0KLSMgc2xhbmcgbmVlZHMgdG8gYmUgPj0gMi4yCi1ERVBFTkRTID0gInNsYW5nIHBvcHQiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL24vZS9uZXd0L25ld3QtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9TSEFSRURESVIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY3Jvc3NfYXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tQWRkLXRpbmZvLWxpYnJhcnktdG8tdGhlLWxpbmtpbmctbGlicmFyaS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9waWUtZmxhZ3MucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNjg1NzIxYmVlMWEzMTg1NzA3MDRiMTlkY2YzMWQyNjgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzcxYjBlNjM0ZWRlNTZhZTZhNmFjZDkxMDcyOGJiNTgzMmFjMTNkZGIwZDFkMjc5MTlkMjQ5OGRhYjcwYzkxZSIKLQotUyA9ICIke1dPUktESVJ9L25ld3QtJHtQVn0iCi0KLUVYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtdGNsIC0td2l0aG91dC1weXRob24iCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAotCi1DTEVBTkJST0tFTiA9ICIxIgotCi1leHBvcnQgU1RBR0lOR19JTkNESVIKLWV4cG9ydCBTVEFHSU5HX0xJQkRJUgotZXhwb3J0IENQUEZMQUdTCi0KLWV4cG9ydCBCVUlMRF9TWVMKLWV4cG9ydCBIT1NUX1NZUwotCi1QQUNLQUdFU19wcmVwZW5kID0gIndoaXB0YWlsICIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgc2ggYXV0b2dlbi5zaAotfQotCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0gICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSwotICAgIHJtIC1mICR7Qn0vLmRlcGVuZAotfQotCi1GSUxFU193aGlwdGFpbCA9ICIke2JpbmRpcn0vd2hpcHRhaWwiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2Y2UxZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMTkuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMiCisKK0RFU0NSSVBUSU9OID0gIk5ld3QgaXMgYSBwcm9ncmFtbWluZyBsaWJyYXJ5IGZvciBjb2xvciB0ZXh0IG1vZGUsIHdpZGdldCBiYXNlZCB1c2VyIFwKK2ludGVyZmFjZXMuICBOZXd0IGNhbiBiZSB1c2VkIHRvIGFkZCBzdGFja2VkIHdpbmRvd3MsIGVudHJ5IHdpZGdldHMsIFwKK2NoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGxhYmVscywgcGxhaW4gdGV4dCBmaWVsZHMsIHNjcm9sbGJhcnMsIFwKK2V0Yy4sIHRvIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMuICBUaGlzIHBhY2thZ2UgYWxzbyBjb250YWlucyB0aGUgXAorc2hhcmVkIGxpYnJhcnkgbmVlZGVkIGJ5IHByb2dyYW1zIGJ1aWx0IHdpdGggbmV3dCwgYXMgd2VsbCBhcyBhIFwKKy91c3IvYmluL2RpYWxvZyByZXBsYWNlbWVudCBjYWxsZWQgd2hpcHRhaWwuICBOZXd0IGlzIGJhc2VkIG9uIHRoZSBcCitzbGFuZyBsaWJyYXJ5LiIKKworSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL25ld3QvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCisjIHNsYW5nIG5lZWRzIHRvIGJlID49IDIuMgorREVQRU5EUyA9ICJzbGFuZyBwb3B0IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9uL2UvbmV3dC9uZXd0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfU0hBUkVERElSLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb3NzX2FyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmluLUFkZC10aW5mby1saWJyYXJ5LXRvLXRoZS1saW5raW5nLWxpYnJhcmkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGllLWZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZGV0ZWN0LWdvbGQtYXMtR05VLWxpbmtlci10b28ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTRhYTBmNzk0M2VkZDM5YzUyNDgxYTg3ZjY4ZjQxMmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDhjMGRiNTZjMjE5OTZhZjZhN2NiYWI5OTQ5MWI3NzRjNmMwOWNlZjkxY2Q5YjAzOTAzYzg0NjM0YmZmMmU4MCIKKworUyA9ICIke1dPUktESVJ9L25ld3QtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtdGNsIC0td2l0aG91dC1weXRob24iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDTEVBTkJST0tFTiA9ICIxIgorCitleHBvcnQgQ1BQRkxBR1MKKworUEFDS0FHRVNfcHJlcGVuZCA9ICJ3aGlwdGFpbCAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNoIGF1dG9nZW4uc2gKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly5kZXBlbmQKK30KKworRklMRVNfd2hpcHRhaWwgPSAiJHtiaW5kaXJ9L3doaXB0YWlsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiCmluZGV4IDFkN2U2MDguLmE2MGE2OGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS5iYgpAQCAtNSw3ICs1LDYgQEAKIFNVTU1BUlkgPSAiU3RhbmRhcmQgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0iCiBERVNDUklQVElPTiA9ICJQYWNrYWdlIGdyb3VwIGJyaW5naW5nIGluIHBhY2thZ2VzIG5lZWRlZCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIgogUFIgPSAicjYiCi1MSUNFTlNFID0gIk1JVCIKIAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAKIApAQCAtMTQ0LDcgKzE0Myw2IEBACiAgICAgY3JvbmllIFwKICAgICBkYnVzIFwKICAgICBkYnVzLWdsaWIgXAotICAgIHB5dGhvbi1kYnVzIFwKICAgICBlbGZ1dGlscyBcCiAgICAgZ3ppcCBcCiAgICAgbGVzcyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYgppbmRleCBhMjljM2Q3Li4yOTU2NGUwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1sc2IuYmIKQEAgLTUsNyArNSw2IEBACiBTVU1NQVJZID0gIkxpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikiCiBERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzYXRpc2Z5IHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHNwZWNpZmljYXRpb24iCiBQUiA9ICJyMTAiCi1MSUNFTlNFID0gIk1JVCIKIAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCiAKQEAgLTIwMSwxNiArMjAwLDYgQEAKICAgICBweXRob24tbWlzYyBcCiAiCiAKLWRlZiBnZXRfbGlicXQzKGQpOgotICAgIGlmICdsaW51eHN0ZGJhc2UnIGluIGQuZ2V0VmFyKCdESVNUUk9PVkVSUklERVMnLCBGYWxzZSkgb3IgIiI6Ci0gICAgICAgIGlmICdxdDMnIGluIGQuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBGYWxzZSkgb3IgIiI6Ci0gICAgICAgICAgICByZXR1cm4gJ2xpYnF0LW10MycKLQotICAgICAgICBiYi53YXJuKCdUaGUgbWV0YS1xdDMgbGF5ZXIgc2hvdWxkIGJlIGFkZGVkLCB0aGlzIGxheWVyIHByb3ZpZGVzIFF0IDMueCcgXAotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMuIEl0cyBpbnRlbmRlZCB1c2UgaXMgZm9yIHBhc3NpbmcgTFNCIHRlc3RzIGFzIFF0MyBpcycgXAotICAgICAgICAgICAgICAgICdhIHJlcXVpcmVtZW50IGZvciBMU0IuJykKLSAgICByZXR1cm4gJycKLQogUVQ0UEtHUyA9ICIgXAogICAgIGxpYnF0Y29yZTQgXAogICAgIGxpYnF0Z3VpNCBcCkBAIC0yMjksOCArMjE4LDggQEAKICAgICAgICAgaWYgJ3F0NCcgaW4gZC5nZXRWYXIoJ0JCRklMRV9DT0xMRUNUSU9OUycsIEZhbHNlKSBvciAiIjoKICAgICAgICAgICAgIHJldHVybiBkLmdldFZhcignUVQ0UEtHUycsIEZhbHNlKQogCi0gICAgICAgIGJiLndhcm4oJ1RoZSBtZXRhLXF0NCBsYXllciBzaG91bGQgYmUgYWRkZWQsIHRoaXMgbGF5ZXIgcHJvdmlkZXMgUXQgNC54JyBcCi0gICAgICAgICAgICAgICAgJ2xpYnJhcmllcy4gSXRzIGludGVuZGVkIHVzZSBpcyBmb3IgcGFzc2luZyBMU0IgdGVzdHMgYXMgUXQ0IGlzJyBcCisgICAgICAgIGJiLndhcm4oJ1RoZSBtZXRhLXF0NCBsYXllciBzaG91bGQgYmUgYWRkZWQsIHRoaXMgbGF5ZXIgcHJvdmlkZXMgUXQgNC54ICcgXAorICAgICAgICAgICAgICAgICdsaWJyYXJpZXMuIEl0cyBpbnRlbmRlZCB1c2UgaXMgZm9yIHBhc3NpbmcgTFNCIHRlc3RzIGFzIFF0NCBpcyAnIFwKICAgICAgICAgICAgICAgICAnYSByZXF1aXJlbWVudCBmb3IgTFNCLicpCiAgICAgcmV0dXJuICcnCiAKQEAgLTI1NSw3ICsyNDQsNiBAQAogICAgIGF0ayBcCiAgICAgbGliYXNvdW5kIFwKICAgICAke0BnZXRfbGlicXQ0KGQpfSBcCi0gICAgJHtAZ2V0X2xpYnF0MyhkKX0gXAogIgogCiBSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcnVudGltZS1hZGQgPSAiXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2gKaW5kZXggYmVjODJhNS4uOTE3YThhZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vY3J5cHRfY29uZmlndXJlLnBhdGNoCkBAIC0xLDMxICsxLDQwIEBACitGcm9tIGI4NjU3NWFiNGEwZGYwN2RhMTYwMjgzNDU5ZGEyNzBlMWMwMzcyYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiTWF4aW4gQi4gSm9obiIgPG1heGluLmpvaG5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyNCBNYXkgMjAxNiAxNDoxMTowOSArMDMwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdF9jb25maWd1cmUKKwogVGhpcyBwYXRjaCBmaXhlcyBhIGNhc2Ugd2hlcmUgaXQgZmluZCBjcnlwdCBkZWZpbmVkIGluIGxpYmMgKG11c2wpIGJ1dAogbm90IGluIHNwZWNpZmllZCBsaWJyYXJpZXMgdGhlbiBpdCBlbmRzIHVwIGFzc2lnbmluZwotCiBMSUJDUllQVD0iLWwiIHdoaWNoIHRoZW4gZ29lcyBpbnRvIG1ha2VmaWxlIGNhdXNlIGFsbCBzb3J0IG9mIHByb2JsZW1zCiBlLmcuCiAKIGxkOiBjYW5ub3QgZmluZCAtbC1tMzIKIHwgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCi0KLVRoZSByZWFzb24gaXMgdGhhdCAtbCBhcHBlYXJzIG9uIGNvbW1hbmRsaW5lIHdpdGggb3V0IGFueSBsaWJyYXJ5IGFuZAotY29tcGlsZXIgdHJlYXRzIHRoZSBuZXh0IGFyZ3VtZW50IGFzIGxpYnJhcnkgbmFtZSB3aGF0ZXZlciBpdCBpcy4KLQorVGhlIHJlYXNvbiBpcyB0aGF0IC1sIGFwcGVhcnMgb24gY29tbWFuZGxpbmUgd2l0aAorb3V0IGFueSBsaWJyYXJ5IGFuZCBjb21waWxlciB0cmVhdHMgdGhlIG5leHQgYXJndW1lbnQgYXMgbGlicmFyeSBuYW1lCit3aGF0ZXZlciBpdCBpcy4KIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogCi1JbmRleDogTGludXgtUEFNLTEuMS42L2NvbmZpZ3VyZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIExpbnV4LVBBTS0xLjEuNi5vcmcvY29uZmlndXJlLmFjCi0rKysgTGludXgtUEFNLTEuMS42L2NvbmZpZ3VyZS5hYwotQEAgLTQwMCw3ICs0MDAsOSBAQCBBU19JRihbdGVzdCAieCRhY19jdl9oZWFkZXJfeGNyeXB0X2giID0KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZGYzOWQwNy4uZTY4ZDg1NiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDAxLDcgKzQwMSw3IEBAIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2hlYWRlcl94Y3J5cHRfaCIgPSAieHllcyJdLAogICAgW2NyeXB0X2xpYnM9ImNyeXB0Il0pCiAgCiAgQkFDS1VQX0xJQlM9JExJQlMKLS1BQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sIExJQkNSWVBUPSItbCRhY19saWIiLCBMSUJDUllQVD0iIikKLStBQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sCi0rCSAgICAgICBbdGVzdCAiJGFjX2N2X3NlYXJjaF9jcnlwdCIgPSAibm9uZSByZXF1aXJlZCIgfHwKLSsJCUxJQkNSWVBUPSIkYWNfY3Zfc2VhcmNoX2NyeXB0Il0pCistQUNfU0VBUkNIX0xJQlMoW2NyeXB0XSxbJGNyeXB0X2xpYnNdLCBMSUJDUllQVD0iJHthY19saWI6Ky1sJGFjX2xpYn0iLCBMSUJDUllQVD0iIikKKytBQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sIFt0ZXN0ICIkYWNfY3Zfc2VhcmNoX2NyeXB0IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJDUllQVD0iJGFjX2N2X3NlYXJjaF9jcnlwdCJdKQogIEFDX0NIRUNLX0ZVTkNTKGNyeXB0X3IgY3J5cHRfZ2Vuc2FsdF9yKQogIExJQlM9JEJBQ0tVUF9MSUJTCiAgQUNfU1VCU1QoTElCQ1JZUFQpCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU1NTFhYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLW5vLWlubmV0Z3IucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi1pbm5ldGdyIG1heSBub3QgYmUgdGhlcmUgc28gbWFrZSBzdXJlIHRoYXQgd2hlbiBpbm5ldGdyIGlzIG5vdCBwcmVzZW50Ci10aGVuIHdlIGluZm9ybSBhYm91dCBpdCBhbmQgbm90IHVzZSBpdC4KLQotLUtoZW0KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgotCi1JbmRleDogTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX2dyb3VwL3BhbV9ncm91cC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKLSsrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKLUBAIC02NTksNyArNjU5LDExIEBAIHN0YXRpYyBpbnQgY2hlY2tfYWNjb3VudChwYW1faGFuZGxlX3QgKnAKLSAJfQotIAkvKiBJZiBidWZmZXIgc3RhcnRzIHdpdGggQCwgd2UgYXJlIHVzaW5nIG5ldGdyb3VwcyAqLwotIAlpZiAoYnVmZmVyWzBdID09ICdAJykKLS0JICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOwotKyNpZmRlZiBIQVZFX0lOTkVUR1IKLSsgICAgICAgICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7Ci0rI2Vsc2UKLSsgICAgICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fZ3JvdXAgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7Ci0rI2VuZGlmCi0gCS8qIG90aGVyd2lzZSwgaWYgdGhlIGJ1ZmZlciBzdGFydHMgd2l0aCAlLCBpdCdzIGEgVU5JWCBncm91cCAqLwotIAllbHNlIGlmIChidWZmZXJbMF0gPT0gJyUnKQotICAgICAgICAgICBnb29kICY9IHBhbV9tb2R1dGlsX3VzZXJfaW5fZ3JvdXBfbmFtX25hbShwYW1oLCB1c2VyLCAmYnVmZmVyWzFdKTsKLUluZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCi0rKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3RpbWUvcGFtX3RpbWUuYwotQEAgLTU1NSw5ICs1NTUsMTMgQEAgY2hlY2tfYWNjb3VudChwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0Ci0gCSAgfQotIAkgIC8qIElmIGJ1ZmZlciBzdGFydHMgd2l0aCBALCB3ZSBhcmUgdXNpbmcgbmV0Z3JvdXBzICovCi0gCSAgaWYgKGJ1ZmZlclswXSA9PSAnQCcpCi0tCSAgICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOwotKyNpZmRlZiBIQVZFX0lOTkVUR1IKLSsJICAgICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7Ci0rI2Vsc2UKLSsJICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fdGltZSBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKLSsjZW5kaWYKLSAJICBlbHNlCi0tCSAgICBnb29kICY9IGxvZ2ljX2ZpZWxkKHBhbWgsIHVzZXIsIGJ1ZmZlciwgY291bnQsIGlzX3NhbWUpOwotKwkgICAgICAgZ29vZCAmPSBsb2dpY19maWVsZChwYW1oLCB1c2VyLCBidWZmZXIsIGNvdW50LCBpc19zYW1lKTsKLSAJICBEKCgid2l0aCB1c2VyOiAlcyIsIGdvb2QgPyAicGFzc2VzIjoiZmFpbHMiICkpOwotIAotIAkgIC8qIGhlcmUgd2UgZ2V0IHRoZSB0aW1lIGZpZWxkICovCi1JbmRleDogTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIExpbnV4LVBBTS0xLjEuMy5vcmlnL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYwotKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9zdWNjZWVkX2lmL3BhbV9zdWNjZWVkX2lmLmMKLUBAIC0yMzEsMTggKzIzMSwyNyBAQCBldmFsdWF0ZV9ub3Rpbmdyb3VwKHBhbV9oYW5kbGVfdCAqcGFtaCwKLSB9Ci0gLyogUmV0dXJuIFBBTV9TVUNDRVNTIGlmIHRoZSAoaG9zdCx1c2VyKSBpcyBpbiB0aGUgbmV0Z3JvdXAuICovCi0gc3RhdGljIGludAotLWV2YWx1YXRlX2lubmV0Z3IoY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCi0rZXZhbHVhdGVfaW5uZXRncihjb25zdCBwYW1faGFuZGxlX3QqIHBhbWgsIGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQotIHsKLSsjaWZkZWYgSEFWRV9JTk5FVEdSCi0gCWlmIChpbm5ldGdyKGdyb3VwLCBob3N0LCB1c2VyLCBOVUxMKSA9PSAxKQotIAkJcmV0dXJuIFBBTV9TVUNDRVNTOwotKyNlbHNlCi0rICAgICAgICBwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3N1Y2NlZWRfaWYgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7Ci0rI2VuZGlmCi0rCi0gCXJldHVybiBQQU1fQVVUSF9FUlI7Ci0gfQotIC8qIFJldHVybiBQQU1fU1VDQ0VTUyBpZiB0aGUgKGhvc3QsdXNlcikgaXMgTk9UIGluIHRoZSBuZXRncm91cC4gKi8KLSBzdGF0aWMgaW50Ci0tZXZhbHVhdGVfbm90aW5uZXRncihjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKLStldmFsdWF0ZV9ub3Rpbm5ldGdyKGNvbnN0IHBhbV9oYW5kbGVfdCogcGFtaCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCi0gewotKyNpZmRlZiBIQVZFX0lOTkVUR1IKLSAJaWYgKGlubmV0Z3IoZ3JvdXAsIGhvc3QsIHVzZXIsIE5VTEwpID09IDApCi0gCQlyZXR1cm4gUEFNX1NVQ0NFU1M7Ci0rI2Vsc2UKLSsJcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9zdWNjZWVkX2lmIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOwotKyNlbmRpZgotIAlyZXR1cm4gUEFNX0FVVEhfRVJSOwotIH0KLSAKLUBAIC0zNjEsMTQgKzM3MCwxNCBAQCBldmFsdWF0ZShwYW1faGFuZGxlX3QgKnBhbWgsIGludCBkZWJ1ZywKLSAJCWNvbnN0IHZvaWQgKnJob3N0OwotIAkJaWYgKHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fUkhPU1QsICZyaG9zdCkgIT0gUEFNX1NVQ0NFU1MpCi0gCQkJcmhvc3QgPSBOVUxMOwotLQkJcmV0dXJuIGV2YWx1YXRlX2lubmV0Z3Iocmhvc3QsIHVzZXIsIHJpZ2h0KTsKLSsJCXJldHVybiBldmFsdWF0ZV9pbm5ldGdyKHBhbWgsIHJob3N0LCB1c2VyLCByaWdodCk7Ci0gCX0KLSAJLyogKFJob3N0LCB1c2VyKSBpcyBub3QgaW4gdGhpcyBncm91cC4gKi8KLSAJaWYgKHN0cmNhc2VjbXAocXVhbCwgIm5vdGlubmV0Z3IiKSA9PSAwKSB7Ci0gCQljb25zdCB2b2lkICpyaG9zdDsKLSAJCWlmIChwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1JIT1NULCAmcmhvc3QpICE9IFBBTV9TVUNDRVNTKQotIAkJCXJob3N0ID0gTlVMTDsKLS0JCXJldHVybiBldmFsdWF0ZV9ub3Rpbm5ldGdyKHJob3N0LCB1c2VyLCByaWdodCk7Ci0rCQlyZXR1cm4gZXZhbHVhdGVfbm90aW5uZXRncihwYW1oLCByaG9zdCwgdXNlciwgcmlnaHQpOwotIAl9Ci0gCS8qIEZhaWwgY2xvc2VkLiAqLwotIAlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaAppbmRleCAzMjQxZTgyLi5kMmNjNjY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaApAQCAtMSw5ICsxLDExIEBACi1Gcm9tIDliZGMxOTc0NzQ3OTVmMmQwMDBjMmJjMDRmNThmN2NlZjg4OThmMjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4KLURhdGU6IFdlZCwgMTUgSnVsIDIwMTUgMTM6MDc6MjAgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gRGViaWFuIHBhdGNoIHRvIGFkZCBhIG5ldyAnbnVsbG9rX3NlY3VyZScgb3B0aW9uIHRvIHBhbV91bml4LAotIHdoaWNoIGFjY2VwdHMgdXNlcnMgd2l0aCBudWxsIHBhc3N3b3JkcyBvbmx5IHdoZW4gdGhlIGFwcGxpY2FudCBpcyBjb25uZWN0ZWQKLSBmcm9tIGEgdHR5IGxpc3RlZCBpbiAvZXRjL3NlY3VyZXR0eS4KK0Zyb20gYjY1NDViODNmOTRjNWZiN2FlYzE0NzhiOGQ0NThhMTM5M2Y0NzljOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJNYXhpbiBCLiBKb2huIiA8bWF4aW4uam9obkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDI1IE1heSAyMDE2IDE0OjEyOjI1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhbV91bml4OiBzdXBwb3J0ICdudWxsb2tfc2VjdXJlJyBvcHRpb24KKworRGViaWFuIHBhdGNoIHRvIGFkZCBhIG5ldyAnbnVsbG9rX3NlY3VyZScgb3B0aW9uIHRvIHBhbV91bml4LAord2hpY2ggYWNjZXB0cyB1c2VycyB3aXRoIG51bGwgcGFzc3dvcmRzIG9ubHkgd2hlbiB0aGUgYXBwbGljYW50IGlzCitjb25uZWN0ZWQgZnJvbSBhIHR0eSBsaXN0ZWQgaW4gL2V0Yy9zZWN1cmV0dHkuCiAKIEF1dGhvcnM6IFNhbSBIYXJ0bWFuIDxoYXJ0bWFuc0BkZWJpYW4ub3JnPiwKICAgICAgICAgIFN0ZXZlIExhbmdhc2VrIDx2b3Jsb25AZGViaWFuLm9yZz4KQEAgLTExLDc4ICsxMywzMSBAQAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKIFNpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgotCi12MjoKLQktIEZvcndhcmQgcG9ydGVkIGZyb20gdjEuMS42IHRvIHYxLjIuMQotCiBTaWduZWQtb2ZmLWJ5OiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgogLS0tCiAgbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbSAgICB8ICAzICsrLQotIG1vZHVsZXMvcGFtX3VuaXgvUkVBRE1FICAgICAgICAgfCAxMSArKysrKysrKysrLQotIG1vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOCAgICAgfCAgOSArKysrKysrKy0KICBtb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sIHwgMTkgKysrKysrKysrKysrKysrKysrLQogIG1vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jICAgICAgfCA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCiAgbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmggICAgICB8ICA4ICsrKysrKy0tCi0gNiBmaWxlcyBjaGFuZ2VkLCA3OSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKyA0IGZpbGVzIGNoYW5nZWQsIDYxIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtIGIvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbQotaW5kZXggNTZlZDU5MS4uOWEzNzJhYyAxMDA2NDQKK2luZGV4IDU2ZGYxNzguLjJiYmE0NjAgMTAwNjQ0CiAtLS0gYS9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCiArKysgYi9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCiBAQCAtMzAsNyArMzAsOCBAQCBpZiBIQVZFX1ZFUlNJT05JTkcKICAgIHBhbV91bml4X2xhX0xERkxBR1MgKz0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpLy4uL21vZHVsZXMubWFwCiAgZW5kaWYKICBwYW1fdW5peF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicGFtL2xpYnBhbS5sYSBcCi0tCUBMSUJDUllQVEAgQExJQlNFTElOVVhAICQoTklTX0xJQlMpCi0rCUBMSUJDUllQVEAgQExJQlNFTElOVVhAICQoTklTX0xJQlMpIFwKKy0JQExJQkNSWVBUQCBATElCU0VMSU5VWEAgQFRJUlBDX0xJQlNAIEBOU0xfTElCU0AKKysJQExJQkNSWVBUQCBATElCU0VMSU5VWEAgQFRJUlBDX0xJQlNAIEBOU0xfTElCU0AgXAogKwkuLi9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUubG8KICAKICBzZWN1cmVsaWJfTFRMSUJSQVJJRVMgPSBwYW1fdW5peC5sYQogIAotZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKLWluZGV4IDM5MzVkYmEuLjc4ODBkOTEgMTAwNjQ0Ci0tLS0gYS9tb2R1bGVzL3BhbV91bml4L1JFQURNRQotKysrIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKLUBAIC02Nyw3ICs2NywxNiBAQCBudWxsb2sKLSAKLSAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKLSAgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxvayBhcmd1bWVudCBvdmVycmlkZXMKLS0gICAgdGhpcyBkZWZhdWx0LgotKyAgICB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZQotKyAgICBzZXJ2aWNlLgotKwotK251bGxva19zZWN1cmUKLSsKLSsgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKLSsgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxva19zZWN1cmUgYXJndW1lbnQKLSsgICAgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MKLSsgICAgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mIHRoZSB2YWx1ZXMKLSsgICAgZm91bmQgaW4gL2V0Yy9zZWN1cmV0dHkuCi0gCi0gdHJ5X2ZpcnN0X3Bhc3MKLSAKLWRpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjggYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKLWluZGV4IDMzOTE3OGIuLmE0YmQ5MDYgMTAwNjQ0Ci0tLS0gYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKLSsrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAotQEAgLTkyLDcgKzkyLDE0IEBAIFR1cm5zIG9mZiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIG5hbWVseSBtZXNzYWdlcyBhYm91dCBzZXNzaW9uIG9wZW4gYW5kIGNsb3NlIHZpCi0gLlJTIDQKLSBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rXCYuIFRoZQotIFxmQm51bGxva1xmUgotLWFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHRcJi4KLSthcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUgc2VydmljZVwmLgotKy5SRQotKy5QUAotK1xmQm51bGxva19zZWN1cmVcZlIKLSsuUlMgNAotK1RoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmtcJi4gVGhlCi0rXGZCbnVsbG9rX3NlY3VyZVxmUgotK2FyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlIGFzIGxvbmcgYXMgdGhlIHZhbHVlIG9mIFBBTV9UVFkgaXMgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5XCYuCi0gLlJFCi0gLlBQCi0gXGZCdHJ5X2ZpcnN0X3Bhc3NcZlIKIGRpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sIGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbAotaW5kZXggYThiNjRiYi4uMWNlZDZmNCAxMDA2NDQKK2luZGV4IDFiMzE4ZjEuLmJlMDMzMGUgMTAwNjQ0CiAtLS0gYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCiArKysgYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCiBAQCAtMTU5LDcgKzE1OSwyNCBAQApAQCAtMTEyLDEwICs2NywxMCBAQAogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIGRpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCi1pbmRleCBhYmNjZDgyLi4yMzYxOTU3IDEwMDY0NAoraW5kZXggZmM4NTk1ZS4uMjllMzM0MSAxMDA2NDQKIC0tLSBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCiArKysgYi9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYwotQEAgLTE4OSwxMyArMTg5LDIyIEBAIGludCBfc2V0X2N0cmwocGFtX2hhbmRsZV90ICpwYW1oLCBpbnQgZmxhZ3MsIGludCAqcmVtZW1iZXIsIGludCAqcm91bmRzLAorQEAgLTE4MywxMyArMTgzLDIyIEBAIGludCBfc2V0X2N0cmwocGFtX2hhbmRsZV90ICpwYW1oLCBpbnQgZmxhZ3MsIGludCAqcmVtZW1iZXIsIGludCAqcm91bmRzLAogIAkvKiBub3cgcGFyc2UgdGhlIGFyZ3VtZW50cyB0byB0aGlzIG1vZHVsZSAqLwogIAogIAlmb3IgKDsgYXJnYy0tID4gMDsgKythcmd2KSB7CkBAIC0xNDEsNyArOTYsNyBAQAogIAkJCX0KICAJCX0KICAKLUBAIC01NjYsNiArNTc1LDcgQEAgc3RhdGljIGludCBfdW5peF9ydW5faGVscGVyX2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnBhc3N3ZCwKK0BAIC01NjAsNiArNTY5LDcgQEAgc3RhdGljIGludCBfdW5peF9ydW5faGVscGVyX2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnBhc3N3ZCwKICAgICAgaWYgKGNoaWxkID09IDApIHsKICAJc3RhdGljIGNoYXIgKmVudnBbXSA9IHsgTlVMTCB9OwogIAljb25zdCBjaGFyICphcmdzW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKQEAgLTE0OSw3ICsxMDQsNyBAQAogIAogIAkvKiBYWFggLSBzaG91bGQgcmVhbGx5IHRpZHkgdXAgUEFNIGhlcmUgdG9vICovCiAgCi1AQCAtNTkzLDcgKzYwMywxNiBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAorQEAgLTU4Nyw3ICs1OTcsMTYgQEAgc3RhdGljIGludCBfdW5peF9ydW5faGVscGVyX2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnBhc3N3ZCwKICAJLyogZXhlYyBiaW5hcnkgaGVscGVyICovCiAgCWFyZ3NbMF0gPSBDSEtQV0RfSEVMUEVSOwogIAlhcmdzWzFdID0gdXNlcjsKQEAgLTE2Nyw3ICsxMjIsNyBAQAogIAkgIGFyZ3NbMl09Im51bGxvayI7CiAgCX0gZWxzZSB7CiAgCSAgYXJnc1syXT0ibm9udWxsIjsKLUBAIC02NzgsNiArNjk3LDE3IEBAIF91bml4X2JsYW5rcGFzc3dkIChwYW1faGFuZGxlX3QgKnBhbWgsIHVuc2lnbmVkIGludCBjdHJsLCBjb25zdCBjaGFyICpuYW1lKQorQEAgLTY3Miw2ICs2OTEsMTcgQEAgX3VuaXhfYmxhbmtwYXNzd2QgKHBhbV9oYW5kbGVfdCAqcGFtaCwgdW5zaWduZWQgaW50IGN0cmwsIGNvbnN0IGNoYXIgKm5hbWUpCiAgCWlmIChvbihVTklYX19OT05VTEwsIGN0cmwpKQogIAkJcmV0dXJuIDA7CS8qIHdpbGwgZmFpbCBidXQgZG9uJ3QgbGV0IG9uIHlldCAqLwogIApAQCAtMTg1LDcgKzE0MCw3IEBACiAgCS8qIFVOSVggcGFzc3dvcmRzIGFyZWEgKi8KICAKICAJcmV0dmFsID0gZ2V0X3B3ZF9oYXNoKHBhbWgsIG5hbWUsICZwd2QsICZzYWx0KTsKLUBAIC03NjQsNyArNzk0LDcgQEAgaW50IF91bml4X3ZlcmlmeV9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oLCBjb25zdCBjaGFyICpuYW1lCitAQCAtNzU4LDcgKzc4OCw3IEBAIGludCBfdW5peF92ZXJpZnlfcGFzc3dvcmQocGFtX2hhbmRsZV90ICogcGFtaCwgY29uc3QgY2hhciAqbmFtZQogIAkJCX0KICAJCX0KICAJfSBlbHNlIHsKQEAgLTE5NSw0NiArMTUwLDQ2IEBACiAgCiAgCWlmIChyZXR2YWwgPT0gUEFNX1NVQ0NFU1MpIHsKIGRpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaCBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCi1pbmRleCAzNzI5Y2UwLi40M2NkYmVhIDEwMDY0NAoraW5kZXggYjRjMjc5Yy4uOGRhNGE4ZSAxMDA2NDQKIC0tLSBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCiArKysgYi9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaAotQEAgLTk5LDggKzk5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgewotICNkZWZpbmUgVU5JWF9NSU5fUEFTU19MRU4gICAgICAgIDI3CS8qIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkICovCitAQCAtOTgsOCArOTgsOSBAQCB0eXBlZGVmIHN0cnVjdCB7CiAgI2RlZmluZSBVTklYX1FVSUVUCQkgMjgJLyogRG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLwotICNkZWZpbmUgVU5JWF9ERVMgICAgICAgICAgICAgICAgIDI5ICAgICAvKiBERVMsIGRlZmF1bHQgKi8KLSsjZGVmaW5lIFVOSVhfTlVMTE9LX1NFQ1VSRSAgICAgICAzMCAgICAgLyogTlVMTCBwYXNzd29yZHMgYWxsb3dlZCBvbmx5IG9uIHNlY3VyZSB0dHlzICovCisgI2RlZmluZSBVTklYX05PX1BBU1NfRVhQSVJZICAgICAgMjkgICAgIC8qIERvbid0IGNoZWNrIGZvciBwYXNzd29yZCBleHBpcmF0aW9uIGlmIG5vdCB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiAqLworICNkZWZpbmUgVU5JWF9ERVMgICAgICAgICAgICAgICAgIDMwICAgICAvKiBERVMsIGRlZmF1bHQgKi8KKysjZGVmaW5lIFVOSVhfTlVMTE9LX1NFQ1VSRSAgICAgICAzMSAgICAgLyogTlVMTCBwYXNzd29yZHMgYWxsb3dlZCBvbmx5IG9uIHNlY3VyZSB0dHlzICovCiAgLyogLS0tLS0tLS0tLS0tLS0gKi8KLS0jZGVmaW5lIFVOSVhfQ1RSTFNfICAgICAgICAgICAgICAzMAkvKiBudW1iZXIgb2YgY3RybCBhcmd1bWVudHMgZGVmaW5lZCAqLwotKyNkZWZpbmUgVU5JWF9DVFJMU18gICAgICAgICAgICAgIDMxCS8qIG51bWJlciBvZiBjdHJsIGFyZ3VtZW50cyBkZWZpbmVkICovCistI2RlZmluZSBVTklYX0NUUkxTXyAgICAgICAgICAgICAgMzEJLyogbnVtYmVyIG9mIGN0cmwgYXJndW1lbnRzIGRlZmluZWQgKi8KKysjZGVmaW5lIFVOSVhfQ1RSTFNfICAgICAgICAgICAgICAzMgkvKiBudW1iZXIgb2YgY3RybCBhcmd1bWVudHMgZGVmaW5lZCAqLwogIAogICNkZWZpbmUgVU5JWF9ERVNfQ1JZUFQoY3RybCkJKG9mZihVTklYX01ENV9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CSUdDUllQVCxjdHJsKSYmb2ZmKFVOSVhfU0hBMjU2X1BBU1MsY3RybCkmJm9mZihVTklYX1NIQTUxMl9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CTE9XRklTSF9QQVNTLGN0cmwpKQogIAotQEAgLTExOCw3ICsxMTksNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KLSAvKiBVTklYX05PVF9TRVRfUEFTUyAqLyAgICB7Im5vdF9zZXRfcGFzcyIsICAgIF9BTExfT05fLCAgICAgICAgICAgICAgICAwMTAwLCAwfSwKK0BAIC0xMTcsNyArMTE4LDcgQEAgc3RhdGljIGNvbnN0IFVOSVhfQ3RybHMgdW5peF9hcmdzW1VOSVhfQ1RSTFNfXSA9CisgLyogVU5JWF9BVVRIVE9LX1RZUEUgKi8gICAgeyJhdXRodG9rX3R5cGU9IiwgICBfQUxMX09OXywgICAgICAgICAgICAgICAgMDEwMCwgMH0sCiAgLyogVU5JWF9fUFJFTElNICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDYwMCksICAgICAgICAgMDIwMCwgMH0sCiAgLyogVU5JWF9fVVBEQVRFICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDYwMCksICAgICAgICAgMDQwMCwgMH0sCiAtLyogVU5JWF9fTk9OVUxMICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAgICAgICAwMTAwMCwgMH0sCi0rLyogVU5JWF9fTk9OVUxMICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDIwMDAwMDAwMDApLCAgIDAxMDAwLCAwfSwKKysvKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwMjAwMDAwMDAwMCksIDAxMDAwLCAwfSwKICAvKiBVTklYX19RVUlFVCAqLyAgICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDAyMDAwLCAwfSwKICAvKiBVTklYX1VTRV9BVVRIVE9LICovICAgICB7InVzZV9hdXRodG9rIiwgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDA0MDAwLCAwfSwKICAvKiBVTklYX1NIQURPVyAqLyAgICAgICAgICB7InNoYWRvdyIsICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgMDEwMDAwLCAwfSwKIEBAIC0xMzksNiArMTQwLDcgQEAgc3RhdGljIGNvbnN0IFVOSVhfQ3RybHMgdW5peF9hcmdzW1VOSVhfQ1RSTFNfXSA9Ci0gLyogVU5JWF9NSU5fUEFTU19MRU4gKi8gICAgeyJtaW5sZW49IiwJCV9BTExfT05fLCAgICAgICAgIDA0MDAwMDAwMDAsIDB9LAogIC8qIFVOSVhfUVVJRVQgKi8gICAgICAgICAgIHsicXVpZXQiLCAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgMDEwMDAwMDAwMDAsIDB9LAorIC8qIFVOSVhfTk9fUEFTU19FWFBJUlkgKi8gIHsibm9fcGFzc19leHBpcnkiLCAgX0FMTF9PTl8sICAgICAgICAgMDIwMDAwMDAwMDAsIDB9LAogIC8qIFVOSVhfREVTICovICAgICAgICAgICAgIHsiZGVzIiwgICAgICAgICAgICAgX0FMTF9PTl9eKDAyNjA0MjAwMDApLCAgICAgIDAsIDF9LAotKy8qIFVOSVhfTlVMTE9LX1NFQ1VSRSAqLyAgIHsibnVsbG9rX3NlY3VyZSIsICAgX0FMTF9PTl9eKDAxMDAwKSwgIDAyMDAwMDAwMDAwLCAwfSwKKysvKiBVTklYX05VTExPS19TRUNVUkUgKi8gICB7Im51bGxva19zZWN1cmUiLCAgIF9BTExfT05fXigwMTAwMCksIDAyMDAwMDAwMDAwLCAwfSwKICB9OwogIAogICNkZWZpbmUgVU5JWF9ERUZBVUxUUyAgKHVuaXhfYXJnc1tVTklYX19OT05VTExdLmZsYWcpCi1AQCAtMTcxLDYgKzE3Myw4IEBAIGV4dGVybiBpbnQgX3VuaXhfcmVhZF9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oCi0gCQkJLGNvbnN0IGNoYXIgKnByb21wdDIKK0BAIC0xNzIsNiArMTc0LDggQEAgZXh0ZXJuIGludCBfdW5peF9yZWFkX3Bhc3N3b3JkKHBhbV9oYW5kbGVfdCAqIHBhbWgKICAJCQksY29uc3QgY2hhciAqZGF0YV9uYW1lCiAgCQkJLGNvbnN0IHZvaWQgKipwYXNzKTsKLStleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLAotKyAgICAgICAgIGNvbnN0IGNoYXIgKnV0dHluYW1lKTsKICAKKytleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICp1dHR5bmFtZSk7CisrCiAgZXh0ZXJuIGludCBfdW5peF9ydW5fdmVyaWZ5X2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsCiAgCQkJdW5zaWduZWQgaW50IGN0cmwsIGNvbnN0IGNoYXIgKnVzZXIsIGludCAqZGF5c2xlZnQpOworICNlbmRpZiAvKiBfUEFNX1VOSVhfU1VQUE9SVF9IICovCiAtLSAKLTIuMS40CisyLjQuMAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MWVhMjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMi4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLVNVTU1BUlkgPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcykiCi1ERVNDUklQVElPTiA9ICJMaW51eC1QQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzIGZvciBMaW51eCksIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBhdXRoZW50aWNhdGluZyB1c2VycyIKLUhPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saW51eC1wYW0vIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtL25ld3RpY2tldCIKLVNFQ1RJT04gPSAiYmFzZSIKLSMgUEFNIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBCU0QuCi0jIC9ldGMvcGFtLmQgY29tZXMgZnJvbSBEZWJpYW4gbGlicGFtLXJ1bnRpbWUgaW4gMjAwOS0xMSAoYXQgdGhhdCB0aW1lCi0jIGxpYnBhbS1ydW50aW1lLTEuMC4xIGlzIEdQTHYyKyksIGJ5IG9wZW5lbWJlZGRlZAotTElDRU5TRSA9ICJHUEx2MisgfCBCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZWI1YzFiZjg1NGU4ODgxMDA1ZDY3MzU5OWVlNzRkMyIKLQotU1JDX1VSSSA9ICJodHRwOi8vbGludXgtcGFtLm9yZy9saWJyYXJ5L0xpbnV4LVBBTS0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovLzk5X3BhbSBcCi0gICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYWNjb3VudCBcCi0gICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYXV0aCBcCi0gICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tcGFzc3dvcmQgXAotICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24gXAotICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgXAotICAgICAgICAgICBmaWxlOi8vcGFtLmQvb3RoZXIgXAotICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWRjNTMwNjc1NTZkMmRkNTY3ODA4ZmQ1MDk1MTlkZDYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzQyYjEyMTFjMGQzYjIwM2E3ZGYyNTQwYTViMDNhNDI4YTA4N2JkOGE0OGMxN2U0OWFlMjY4Zjk5MmIzMzRkOSIKLQotU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly9wYW0tbm8taW5uZXRnci5wYXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VzZS11dG1weC5wYXRjaCIKLQotU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vcGFtLW5vLWlubmV0Z3IucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGVmaW5pbmctbWlzc2luZy1mdW5jaXRvbmFsaXR5LnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGVfcGF0aHNfaGVhZGVyLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLQotREVQRU5EUyA9ICJiaXNvbiBmbGV4IGZsZXgtbmF0aXZlIGNyYWNrbGliIgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLWRiLXVuaXF1ZW5hbWU9X3BhbSBcCi0gICAgICAgICAgICAgICAgLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0vc2VjdXJpdHkgXAotICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmlzIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVnZW5lcmF0ZS1kb2N1IFwKLQkJLS1kaXNhYmxlLXByZWx1ZGUiCi0KLUNGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKLQotUFIgPSAicjUiCi0KLVMgPSAiJHtXT1JLRElSfS9MaW51eC1QQU0tJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCi0KLVBBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCwiCi0KLVBBQ0tBR0VTICs9ICIke1BOfS1ydW50aW1lICR7UE59LXh0ZXN0cyIKLUZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU30iCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSAke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgotRklMRVNfJHtQTn0tcnVudGltZSA9ICIke3N5c2NvbmZkaXJ9IgotRklMRVNfJHtQTn0teHRlc3RzID0gIiR7ZGF0YWRpcn0vTGludXgtUEFNL3h0ZXN0cyIKLQotUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7TUxQUkVGSVh9cGFtLXBsdWdpbi0uKiIKLQotZGVmIGdldF9tdWx0aWxpYl9iaXQoZCk6Ci0gICAgYmFzZWxpYiA9IGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkgb3IgJycKLSAgICByZXR1cm4gYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKLQotbGlicGFtX3N1ZmZpeCA9ICJzdWZmaXgke0BnZXRfbXVsdGlsaWJfYml0KGQpfSIKLQotUlBST1ZJREVTXyR7UE59ICs9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IgotUlBST1ZJREVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7UE59LXJ1bnRpbWUtJHtsaWJwYW1fc3VmZml4fSIKLQotUkRFUEVORFNfJHtQTn0tcnVudGltZSA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tZGVueS0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcGVybWl0LSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi13YXJuLSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi11bml4LSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICIKLVJERVBFTkRTXyR7UE59LXh0ZXN0cyA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tYWNjZXNzLSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZWJ1Zy0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tY3JhY2tsaWItJHtsaWJwYW1fc3VmZml4fSBcCi0gICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXB3aGlzdG9yeS0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tc3VjY2VlZC1pZi0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tdGltZS0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICBjb3JldXRpbHMiCi0KLSMgRklYTUU6IE5hdGl2ZSBzdWZmaXggYnJlYWtzIGhlcmUsIGRpc2FibGUgaXQgZm9yIG5vdwotUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgotUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgewotICAgIGRlZiBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKHBuLCBkaXIsIGZpbGUpOgotICAgICAgICBuZiA9IG9zLnBhdGguam9pbihkaXIsIGZpbGUpCi0gICAgICAgIG9mID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwbiwgVHJ1ZSkKLSAgICAgICAgaWYgb2Y6Ci0gICAgICAgICAgICBuZiA9IG9mICsgIiAiICsgbmYKLSAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwbiwgbmYpCi0KLSAgICBkZWYgcGFtX3BsdWdpbl9ob29rKGZpbGUsIHBrZywgcGF0dGVybiwgZm9ybWF0LCBiYXNlbmFtZSk6Ci0gICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKLSAgICAgICAgbGlicGFtX3N1ZmZpeCA9IGQuZ2V0VmFyKCdsaWJwYW1fc3VmZml4JywgVHJ1ZSkKLQotICAgICAgICByZGVwcyA9IGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKQotICAgICAgICBpZiByZGVwczoKLSAgICAgICAgICAgIHJkZXBzID0gcmRlcHMgKyAiICIgKyBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJkZXBzID0gcG4gKyAiLSIgKyBsaWJwYW1fc3VmZml4Ci0gICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCByZGVwcykKLQotICAgICAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkKLSAgICAgICAgaWYgcHJvdmlkZXM6Ci0gICAgICAgICAgICBwcm92aWRlcyA9IHByb3ZpZGVzICsgIiAiICsgcGtnICsgIi0iICsgbGlicGFtX3N1ZmZpeAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJvdmlkZXMgPSBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4Ci0gICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgcHJvdmlkZXMpCi0KLSAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCi0gICAgZHZhciA9IGJiLmRhdGEuZXhwYW5kKCcke1dPUktESVJ9L3BhY2thZ2UnLCBkLCBUcnVlKQotICAgIHBhbV9saWJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHknKQotICAgIHBhbV9zYmluZGlyID0gZC5leHBhbmQoJyR7c2JpbmRpcn0nKQotICAgIHBhbV9maWx0ZXJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlcicpCi0gICAgcGFtX3BrZ25hbWUgPSBtbHByZWZpeCArICdwYW0tcGx1Z2luJXMnCi0KLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwYW1fbGliZGlyLCAnXnBhbSguKilcLnNvJCcsIHBhbV9wa2duYW1lLAotICAgICAgICAgICAgICAgICAgICAgICdQQU0gcGx1Z2luIGZvciAlcycsIGhvb2s9cGFtX3BsdWdpbl9ob29rLCBleHRyYV9kZXBlbmRzPScnKQotICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfY2hrcHdkJykKLSAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdW5peCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICd1bml4X3VwZGF0ZScpCi0gICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseScpCi0gICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5MicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGFsbHkyJykKLSAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGltZXN0YW1wJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90aW1lc3RhbXBfY2hlY2snKQotICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi1ta2hvbWVkaXInICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAnbWtob21lZGlyX2hlbHBlcicpCi0gICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLWNvbnNvbGUnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX2NvbnNvbGVfYXBwbHknKQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9maWx0ZXJkaXIsICdeKC4qKSQnLCAncGFtLWZpbHRlci0lcycsICdQQU0gZmlsdGVyIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JYXV0b3Rvb2xzX2RvX2luc3RhbGwKLQotCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL3J1biB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCi0Jcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcwotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3BhbSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcwotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wYW0uZC8qICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLwotCi0JIyBUaGUgbHNiIHJlcXVpcmVzIHVuaXhfY2hrcHdkIGhhcyBzZXR1aWQgcGVybWlzc2lvbgotCWNobW9kIDQ3NTUgJHtEfSR7c2JpbmRpcn0vdW5peF9jaGtwd2QKLQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KLQkJZWNobyAic2Vzc2lvbiBvcHRpb25hbCBwYW1fc3lzdGVtZC5zbyIgPj4gJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24KLQlmaQotfQotCi1weXRob24gZG9fcGFtX3Nhbml0eSAoKSB7Ci0gICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgVHJ1ZSwgRmFsc2UsIGQpOgotICAgICAgICBiYi53YXJuKCJCdWlsZGluZyBsaWJwYW0gYnV0ICdwYW0nIGlzbid0IGluIERJU1RST19GRUFUVVJFUywgUEFNIHdvbid0IHdvcmsgY29ycmVjdGx5IikKLX0KLWFkZHRhc2sgcGFtX3Nhbml0eSBiZWZvcmUgZG9fY29uZmlndXJlCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIG5hdGl2ZSIKLQotQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24iCi1DT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYXV0aCIKLUNPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1wYXNzd29yZCIKLUNPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIgotQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLWFjY291bnQiCi1DT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9zZWN1cml0eS9saW1pdHMuY29uZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjMuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjVhNGJkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMy4wLmJiCkBAIC0wLDAgKzEsMTY5IEBACitTVU1NQVJZID0gIkxpbnV4LVBBTSAoUGx1Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZXMpIgorREVTQ1JJUFRJT04gPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcyBmb3IgTGludXgpLCBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgYXV0aGVudGljYXRpbmcgdXNlcnMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpbnV4LXBhbS9uZXd0aWNrZXQiCitTRUNUSU9OID0gImJhc2UiCisjIFBBTSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIEdQTCBhbmQgQlNELgorIyAvZXRjL3BhbS5kIGNvbWVzIGZyb20gRGViaWFuIGxpYnBhbS1ydW50aW1lIGluIDIwMDktMTEgKGF0IHRoYXQgdGltZQorIyBsaWJwYW0tcnVudGltZS0xLjAuMSBpcyBHUEx2MispLCBieSBvcGVuZW1iZWRkZWQKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ViNWMxYmY4NTRlODg4MTAwNWQ2NzM1OTllZTc0ZDMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpbnV4LXBhbS5vcmcvbGlicmFyeS9MaW51eC1QQU0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly85OV9wYW0gXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLWFjY291bnQgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLWF1dGggXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXBhc3N3b3JkIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1zZXNzaW9uIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL290aGVyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBhbS14dGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4c2VwYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBhbS14dGVzdHMtcmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcnlwdF9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImRhNGIyMjg5YjdjZmIxOTU4M2Q1NGU5ZWFhZWYxYzNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI0MWFlZDFlZjUyMmY2NmVkNjcyNzE5ZWNmMjIwNWVjNTEzZmQwMDc1ZWQ4MGNkYThlMDg2YTViMWEwMWQxYmIiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vdXNlLXV0bXB4LnBhdGNoIgorCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWZpbmluZy1taXNzaW5nLWZ1bmNpdG9uYWxpdHkucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZV9wYXRoc19oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSBmbGV4IGZsZXgtbmF0aXZlIGNyYWNrbGliIGxpYnhtbDItbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWRiLXVuaXF1ZW5hbWU9X3BhbSBcCisgICAgICAgICAgICAgICAgLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0vc2VjdXJpdHkgXAorICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmlzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVnZW5lcmF0ZS1kb2N1IFwKKwkJLS1kaXNhYmxlLXByZWx1ZGUiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKKworUFIgPSAicjUiCisKK1MgPSAiJHtXT1JLRElSfS9MaW51eC1QQU0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1ydW50aW1lICR7UE59LXh0ZXN0cyIKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU30iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSAke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tcnVudGltZSA9ICIke3N5c2NvbmZkaXJ9IgorRklMRVNfJHtQTn0teHRlc3RzID0gIiR7ZGF0YWRpcn0vTGludXgtUEFNL3h0ZXN0cyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7TUxQUkVGSVh9cGFtLXBsdWdpbi0uKiIKKworZGVmIGdldF9tdWx0aWxpYl9iaXQoZCk6CisgICAgYmFzZWxpYiA9IGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkgb3IgJycKKyAgICByZXR1cm4gYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKworbGlicGFtX3N1ZmZpeCA9ICJzdWZmaXgke0BnZXRfbXVsdGlsaWJfYml0KGQpfSIKKworUlBST1ZJREVTXyR7UE59ICs9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IgorUlBST1ZJREVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7UE59LXJ1bnRpbWUtJHtsaWJwYW1fc3VmZml4fSIKKworUkRFUEVORFNfJHtQTn0tcnVudGltZSA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tZGVueS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcGVybWl0LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi13YXJuLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi11bml4LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICIKK1JERVBFTkRTXyR7UE59LXh0ZXN0cyA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tYWNjZXNzLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZWJ1Zy0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tY3JhY2tsaWItJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXB3aGlzdG9yeS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tc3VjY2VlZC1pZi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tdGltZS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICBjb3JldXRpbHMiCisKKyMgRklYTUU6IE5hdGl2ZSBzdWZmaXggYnJlYWtzIGhlcmUsIGRpc2FibGUgaXQgZm9yIG5vdworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGRlZiBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKHBuLCBkaXIsIGZpbGUpOgorICAgICAgICBuZiA9IG9zLnBhdGguam9pbihkaXIsIGZpbGUpCisgICAgICAgIG9mID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgb2Y6CisgICAgICAgICAgICBuZiA9IG9mICsgIiAiICsgbmYKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwbiwgbmYpCisKKyAgICBkZWYgcGFtX3BsdWdpbl9ob29rKGZpbGUsIHBrZywgcGF0dGVybiwgZm9ybWF0LCBiYXNlbmFtZSk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgbGlicGFtX3N1ZmZpeCA9IGQuZ2V0VmFyKCdsaWJwYW1fc3VmZml4JywgVHJ1ZSkKKworICAgICAgICByZGVwcyA9IGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiByZGVwczoKKyAgICAgICAgICAgIHJkZXBzID0gcmRlcHMgKyAiICIgKyBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJkZXBzID0gcG4gKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCByZGVwcykKKworICAgICAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcHJvdmlkZXM6CisgICAgICAgICAgICBwcm92aWRlcyA9IHByb3ZpZGVzICsgIiAiICsgcGtnICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvdmlkZXMgPSBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgcHJvdmlkZXMpCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgZHZhciA9IGJiLmRhdGEuZXhwYW5kKCcke1dPUktESVJ9L3BhY2thZ2UnLCBkLCBUcnVlKQorICAgIHBhbV9saWJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHknKQorICAgIHBhbV9zYmluZGlyID0gZC5leHBhbmQoJyR7c2JpbmRpcn0nKQorICAgIHBhbV9maWx0ZXJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlcicpCisgICAgcGFtX3BrZ25hbWUgPSBtbHByZWZpeCArICdwYW0tcGx1Z2luJXMnCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwYW1fbGliZGlyLCAnXnBhbSguKilcLnNvJCcsIHBhbV9wa2duYW1lLAorICAgICAgICAgICAgICAgICAgICAgICdQQU0gcGx1Z2luIGZvciAlcycsIGhvb2s9cGFtX3BsdWdpbl9ob29rLCBleHRyYV9kZXBlbmRzPScnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfY2hrcHdkJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdW5peCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICd1bml4X3VwZGF0ZScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5MicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGFsbHkyJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGltZXN0YW1wJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90aW1lc3RhbXBfY2hlY2snKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi1ta2hvbWVkaXInICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAnbWtob21lZGlyX2hlbHBlcicpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLWNvbnNvbGUnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX2NvbnNvbGVfYXBwbHknKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9maWx0ZXJkaXIsICdeKC4qKSQnLCAncGFtLWZpbHRlci0lcycsICdQQU0gZmlsdGVyIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL3J1biB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3BhbSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wYW0uZC8qICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCisJIyBUaGUgbHNiIHJlcXVpcmVzIHVuaXhfY2hrcHdkIGhhcyBzZXR1aWQgcGVybWlzc2lvbgorCWNobW9kIDQ3NTUgJHtEfSR7c2JpbmRpcn0vdW5peF9jaGtwd2QKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJZWNobyAic2Vzc2lvbiBvcHRpb25hbCBwYW1fc3lzdGVtZC5zbyIgPj4gJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24KKwlmaQorfQorCitweXRob24gZG9fcGFtX3Nhbml0eSAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBiYi53YXJuKCJCdWlsZGluZyBsaWJwYW0gYnV0ICdwYW0nIGlzbid0IGluIERJU1RST19GRUFUVVJFUywgUEFNIHdvbid0IHdvcmsgY29ycmVjdGx5IikKK30KK2FkZHRhc2sgcGFtX3Nhbml0eSBiZWZvcmUgZG9fY29uZmlndXJlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIG5hdGl2ZSIKKworQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24iCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYXV0aCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1wYXNzd29yZCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLWFjY291bnQiCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9zZWN1cml0eS9saW1pdHMuY29uZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2gKaW5kZXggODA4NzhmMy4uN2FkYmQwMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTksNyArOSw3IEBACiAgICAgc2l6ZSBvZiBvZmZfdCB0byBzZWUgaWYgZmlsZSBvZmZzZXQgaXMgNjRiaXQuICBUaGlzIHBhdGNoIGFkZHMKICAgICBBQ19DSEVDS19TSVpFT0Yob2ZmX3QpIGFuZCBjaGVja3MgU0laRU9GX09GRl9UID09IDguCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDYKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDYKIAogSW5kZXg6IHBheC0zLjQvY29uZmlndXJlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnel8yLjMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiCmluZGV4IDA4MGJlMmIuLjllOTcyNzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiCkBAIC0xLDYgKzEsOCBAQAogcmVxdWlyZSBwaWd6LmluYwogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcGlnei5jO2JlZ2lubGluZT03O2VuZGxpbmU9MjE7bWQ1PWEyMWQ0MDc1Y2IwMGFiNGNhMTdmY2U1ZTc1MzRjYTk1IgogCitVUFNUUkVBTV9DSEVDS19VUkkgOj0gIiR7U1JDX1VSSX0iCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8ke0JQfS50YXIuZ3oiCiBTUkNfVVJJICs9ICJmaWxlOi8vbGluay1vcmRlci5wYXRjaCIKIAogU1JDX1VSSVttZDVzdW1dID0gIjAxZDdhMTZjY2U3NzkyOWNjMWE3OGFhMWJkZmI2OGNiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwc18zLjMuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZGNjYzYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLVNVTU1BUlkgPSAiU3lzdGVtIGFuZCBwcm9jZXNzIG1vbml0b3JpbmcgdXRpbGl0aWVzIgotREVTQ1JJUFRJT04gPSAiUHJvY3BzIGNvbnRhaW5zIGEgc2V0IG9mIHN5c3RlbSB1dGlsaXRpZXMgdGhhdCBwcm92aWRlIHN5c3RlbSBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZXMgdXNpbmcgXAotdGhlIC9wcm9jIGZpbGVzeXN0ZW0uIFRoZSBwYWNrYWdlIGluY2x1ZGVzIHRoZSBwcm9ncmFtcyBwcywgdG9wLCB2bXN0YXQsIHcsIGtpbGwsIGFuZCBza2lsbC4iCi1IT01FUEFHRSA9ICJodHRwczovL2dpdG9yaW91cy5vcmcvcHJvY3BzIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTT0iZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGNmNjZhNDk4NDEyMDAwN2M5ODgxY2M4NzFjZjQ5ZGIgXAotICAgICAgICAgICAgICAgICAiCi0KLURFUEVORFMgPSAibmN1cnNlcyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHJvY3BzLW5nL1Byb2R1Y3Rpb24vcHJvY3BzLW5nLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9zeXNjdGwuY29uZiBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmNjNWI5NGMxYzViOGNiYzg5YWQzNDVhN2I1MjJmNzQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTk0OTMxNjlhMmQyYWRjMGJjMDQ1NTM4NzA3MzEwYzhlODc3YjM4NWU0ZTI5NjE0M2I2MjYwN2QyYmIwNDRlZCIKLQotUyA9ICIke1dPUktESVJ9L3Byb2Nwcy1uZy0ke1BWfSIKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNraWxsIC0tZGlzYWJsZS1tb2Rlcm4tdG9wIgotCi1DUFBGTEFHUyArPSAiLUkke1N9IgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KLQlbICIke2JpbmRpcn0iICE9ICIke2Jhc2VfYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2VfYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiYXNlX2JpbmRpcn0vJGk7IGRvbmUKLQlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KLQlbICIke3NiaW5kaXJ9IiAhPSAiJHtiYXNlX3NiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9zYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7c2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9zYmluZGlyfS8kaTsgZG9uZQotICAgICAgICBpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIke3NiaW5kaXJ9IiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgcm1kaXIgJHtEfSR7c2JpbmRpcn0KLSAgICAgICAgZmkKLQotICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9Ci0gICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mCi0gICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KLSAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kCi0gICAgICAgICAgICAgICAgbG4gLXNmIC4uL3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLzk5LXN5c2N0bC5jb25mCi0gICAgICAgIGZpCi19Ci0KLUNPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mIgotCi1iaW5kaXJfcHJvZ3MgPSAiZnJlZSBwa2lsbCBwbWFwIHBncmVwIHB3ZHggc2tpbGwgc25pY2UgdG9wIHVwdGltZSIKLWJhc2VfYmluZGlyX3Byb2dzICs9ICJraWxsIHBpZG9mIHBzIHdhdGNoIgotYmFzZV9zYmluZGlyX3Byb2dzICs9ICJzeXNjdGwiCi0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjIwMCIKLQotQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7YmFzZV9zYmluZGlyX3Byb2dzfSIKLQotQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImtpbGwuMSB1cHRpbWUuMSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCi0KLXB5dGhvbiBfX2Fub255bW91cygpIHsKLSAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgotICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQotCi0gICAgZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6Ci0gICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQotfQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2ExYTUwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMi5iYgpAQCAtMCwwICsxLDY2IEBACitTVU1NQVJZID0gIlN5c3RlbSBhbmQgcHJvY2VzcyBtb25pdG9yaW5nIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlByb2NwcyBjb250YWlucyBhIHNldCBvZiBzeXN0ZW0gdXRpbGl0aWVzIHRoYXQgcHJvdmlkZSBzeXN0ZW0gaW5mb3JtYXRpb24gYWJvdXQgcHJvY2Vzc2VzIHVzaW5nIFwKK3RoZSAvcHJvYyBmaWxlc3lzdGVtLiBUaGUgcGFja2FnZSBpbmNsdWRlcyB0aGUgcHJvZ3JhbXMgcHMsIHRvcCwgdm1zdGF0LCB3LCBraWxsLCBhbmQgc2tpbGwuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRvcmlvdXMub3JnL3Byb2NwcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU09ImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRjZjY2YTQ5ODQxMjAwMDdjOTg4MWNjODcxY2Y0OWRiIFwKKyAgICAgICAgICAgICAgICAgIgorCitERVBFTkRTID0gIm5jdXJzZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Byb2Nwcy1uZy9Qcm9kdWN0aW9uL3Byb2Nwcy1uZy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vc3lzY3RsLmNvbmYgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjk1N2U0MmU4YjE5MzQ5MGIyMTExMjUyZTRhMmI0NDNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZlZDY1YWI4NjMxOGYzNzkwNGU4ZjkwMTQ0MTVhMDk4YmVjNWJjNTM2NTNlNWQ5YWI0MDRmOTVjYTVlMWE3ZDQiCisKK1MgPSAiJHtXT1JLRElSfS9wcm9jcHMtbmctJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1za2lsbCAtLWRpc2FibGUtbW9kZXJuLXRvcCIKKworQ1BQRkxBR1MgKz0gIi1JJHtTfSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJWyAiJHtiaW5kaXJ9IiAhPSAiJHtiYXNlX2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9iaW5kaXJ9LyRpOyBkb25lCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJWyAiJHtzYmluZGlyfSIgIT0gIiR7YmFzZV9zYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2Vfc2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke3NiaW5kaXJ9LyRpICR7RH0ke2Jhc2Vfc2JpbmRpcn0vJGk7IGRvbmUKKyAgICAgICAgaWYgWyAiJHtiYXNlX3NiaW5kaXJ9IiAhPSAiJHtzYmluZGlyfSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHJtZGlyICR7RH0ke3NiaW5kaXJ9CisgICAgICAgIGZpCisKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zeXNjdGwuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNjdGwuY29uZgorICAgICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjdGwuZAorICAgICAgICAgICAgICAgIGxuIC1zZiAuLi9zeXNjdGwuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNjdGwuZC85OS1zeXNjdGwuY29uZgorICAgICAgICBmaQorfQorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXNjdGwuY29uZiIKKworYmluZGlyX3Byb2dzID0gImZyZWUgcGtpbGwgcG1hcCBwZ3JlcCBwd2R4IHNraWxsIHNuaWNlIHRvcCB1cHRpbWUiCitiYXNlX2JpbmRpcl9wcm9ncyArPSAia2lsbCBwaWRvZiBwcyB3YXRjaCIKK2Jhc2Vfc2JpbmRpcl9wcm9ncyArPSAic3lzY3RsIgorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIiR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke2Jhc2Vfc2JpbmRpcl9wcm9nc30iCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJraWxsLjEgdXB0aW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXB0aW1lLjFdID0gIiR7bWFuZGlyfS9tYW4xL3VwdGltZS4xIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2VfYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBwcm9nKSkKKworICAgIGZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKaW5kZXggNjhlMDY1Ni4uOThhODQ3MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jCkBAIC0xNSw2ICsxNSw5IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKIAorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKIEFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCiAKIFBBQ0tBR0VTID0rICJmdXNlciBmdXNlci1kb2Mga2lsbGFsbCBraWxsYWxsLWRvYyBwc3RyZWUgcHN0cmVlLWRvYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwMS1Vc2UtTkdST1VQU19NQVgtaW5zdGVhZC1vZi1OR1JPVVBTLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDAxLVVzZS1OR1JPVVBTX01BWC1pbnN0ZWFkLW9mLU5HUk9VUFMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiMmRhZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwMS1Vc2UtTkdST1VQU19NQVgtaW5zdGVhZC1vZi1OR1JPVVBTLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gZmVjYTZkMmU1NWQ5OTJiYmUxNzZlZThmYWE3MzRjMTA1ZWIxYjJlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitEYXRlOiBUdWUsIDI5IE1hciAyMDE2IDIwOjQ4OjA1IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSBOR1JPVVBTX01BWCBpbnN0ZWFkIG9mIE5HUk9VUFMKKworTkdSUk9VUFNfTUFYIGlzIHdoYXQgaXMgZGVmaW5lZCBieSBTdVN2MzsgTkdST1VQUyBpcyBub3QgZ3VhcmFudGVlZCBieQorYW55IHN0YW5kYXJkLCBidXQgaXMganVzdCBhbiBhbmNpZW50IEJTRCdpc20uICBTaW5jZSBBbmRyb2lkJ3MgYmlvbmljCitsaWJjIGhhcyB0aGUgZm9ybWVyIGJ1dCBub3QgdGhlIGxhdHRlciwgbGV0J3MgdXNlIE5HUk9VUFNfTUFYIGluc3RlYWQuCisKK1NpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitTaWduZWQtb2ZmLWJ5OiBKYW4gS2FyYSA8amFja0BzdXNlLmN6PgorLS0tCisgcXVvdGEuYyAgICB8IDUgKysrLS0KKyBxdW90YW9wcy5jIHwgNSArKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcXVvdGEuYyBiL3F1b3RhLmMKK2luZGV4IDA0OWRhYzQuLmUxOTVlYWQgMTAwNjQ0CistLS0gYS9xdW90YS5jCisrKysgYi9xdW90YS5jCitAQCAtNDgsNiArNDgsNyBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpZmRlZiBSUEMKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorICNpbmNsdWRlICJycXVvdGEuaCIKK0BAIC0yOTYsNyArMjk3LDcgQEAgc3RhdGljIGludCBzaG93cXVvdGFzKGludCB0eXBlLCBxaWRfdCBpZCwgaW50IG1udGNudCwgY2hhciAqKm1udCkKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworIAlpbnQgbmdyb3VwczsKKy0JZ2lkX3QgZ2lkc2V0W05HUk9VUFNdLCAqZ2lkc2V0cDsKKysJZ2lkX3QgZ2lkc2V0W05HUk9VUFNfTUFYXSwgKmdpZHNldHA7CisgCWludCBpLCByZXQ7CisgCXN0cnVjdCBvcHRpb24gbG9uZ19vcHRzW10gPSB7CisgCQl7ICJoZWxwIiwgMCwgTlVMTCwgJ2gnIH0sCitAQCAtNDA1LDcgKzQwNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlyZXQgfD0gc2hvd3F1b3RhcyhVU1JRVU9UQSwgZ2V0dWlkKCksIGFyZ2MsIGFyZ3YpOworIAkJaWYgKGZsYWdzICYgRkxfR1JPVVApIHsKKyAJCQluZ3JvdXBzID0gc3lzY29uZihfU0NfTkdST1VQU19NQVgpOworLQkJCWlmIChuZ3JvdXBzID4gTkdST1VQUykgeworKwkJCWlmIChuZ3JvdXBzID4gTkdST1VQU19NQVgpIHsKKyAJCQkJZ2lkc2V0cCA9IG1hbGxvYyhuZ3JvdXBzICogc2l6ZW9mKGdpZF90KSk7CisgCQkJCWlmICghZ2lkc2V0cCkKKyAJCQkJCWRpZSgxLCBfKCJHaWQgc2V0IGFsbG9jYXRpb24gKCVkKTogJXNcbiIpLCBuZ3JvdXBzLCBzdHJlcnJvcihlcnJubykpOworZGlmZiAtLWdpdCBhL3F1b3Rhb3BzLmMgYi9xdW90YW9wcy5jCitpbmRleCAxMzZhZWMzLi41OTBkYzFiIDEwMDY0NAorLS0tIGEvcXVvdGFvcHMuYworKysrIGIvcXVvdGFvcHMuYworQEAgLTUxLDYgKzUxLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisgCisgI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlICJycXVvdGEuaCIKK0BAIC05Nyw3ICs5OCw3IEBAIHN0cnVjdCBkcXVvdCAqZ2V0cHJpdnMocWlkX3QgaWQsIHN0cnVjdCBxdW90YV9oYW5kbGUgKipoYW5kbGVzLCBpbnQgcXVpZXQpCisgI2lmIGRlZmluZWQoQlNEX0JFSEFWSU9VUikKKyAJaW50IGosIG5ncm91cHM7CisgCXVpZF90IGV1aWQ7CistCWdpZF90IGdpZHNldFtOR1JPVVBTXSwgKmdpZHNldHA7CisrCWdpZF90IGdpZHNldFtOR1JPVVBTX01BWF0sICpnaWRzZXRwOworICNlbmRpZgorIAorIAlmb3IgKGkgPSAwOyBoYW5kbGVzW2ldOyBpKyspIHsKK0BAIC0xMTUsNyArMTE2LDcgQEAgc3RydWN0IGRxdW90ICpnZXRwcml2cyhxaWRfdCBpZCwgc3RydWN0IHF1b3RhX2hhbmRsZSAqKmhhbmRsZXMsIGludCBxdWlldCkKKyAJCQkJaWYgKGdldGV1aWQoKSA9PSAwKQorIAkJCQkJYnJlYWs7CisgCQkJCW5ncm91cHMgPSBzeXNjb25mKF9TQ19OR1JPVVBTX01BWCk7CistCQkJCWlmIChuZ3JvdXBzID4gTkdST1VQUykgeworKwkJCQlpZiAobmdyb3VwcyA+IE5HUk9VUFNfTUFYKSB7CisgCQkJCQlnaWRzZXRwID0gbWFsbG9jKG5ncm91cHMgKiBzaXplb2YoZ2lkX3QpKTsKKyAJCQkJCWlmICghZ2lkc2V0cCkgeworIAkJCQkJCWdpZDJncm91cChpZCwgbmFtZSk7CistLSAKKzIuNi4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwMi1BbGxvdy1idWlsZGluZy1vbi1zeXN0ZW1zLXRoYXQtZG8tbm90LWhhdmUtcnBjLWhlYWRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDAyLUFsbG93LWJ1aWxkaW5nLW9uLXN5c3RlbXMtdGhhdC1kby1ub3QtaGF2ZS1ycGMtaGVhZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlYTU0OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwMi1BbGxvdy1idWlsZGluZy1vbi1zeXN0ZW1zLXRoYXQtZG8tbm90LWhhdmUtcnBjLWhlYWRlLnBhdGNoCkBAIC0wLDAgKzEsMTUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIGYzMGUxYWRhODMyNjQ2M2NjMGFmMDQ4YWZhMDU4YmMyZjFkYzkzNzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorRGF0ZTogVHVlLCAyOSBNYXIgMjAxNiAyMDo0ODowNCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyBidWlsZGluZyBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgcnBjIGhlYWRlciBmaWxlcworCitBbmRyb2lkJ3MgYmlvbmljIEMgbGlicmFyeSBkb2Vzbid0IGhhdmUgU3VuIFJQQyBzdXBwb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorU2lnbmVkLW9mZi1ieTogSmFuIEthcmEgPGphY2tAc3VzZS5jej4KKy0tLQorIE1ha2VmaWxlLmFtIHwgMzAgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCisgcXVvdGFvcHMuYyAgfCAgMiArKworIHNldHF1b3RhLmMgIHwgIDIgKysKKyAzIGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNmQ3ZWEwZS4uODJkYjk5ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEsNyArMSw1IEBACisgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKKyAKKy1CVUlMVF9TT1VSQ0VTID0gcnF1b3RhLmggcnF1b3RhLmMgcnF1b3RhX2NsbnQuYworLQorIGRvY2RpciA9ICQoZGF0YWRpcikvZG9jL0BQQUNLQUdFQAorIGRvY19EQVRBID0gXAorIAlSRUFETUUubWFpbHNlcnZlciBcCitAQCAtMTIsMTEgKzEwLDYgQEAgZG9jX0RBVEEgPSBcCisgCWRvYy9xdW90YXMucHJlZm9ybWF0ZWQgXAorIAlkb2MvcXVvdGFzLTEuZXBzCisgCistcnBjc3ZjZGlyID0gJChpbmNsdWRlZGlyKS9ycGNzdmMKKy1ycGNzdmNfREFUQSA9IFwKKy0JcnF1b3RhLmggXAorLQlycXVvdGEueAorLQorIHN5c2NvbmZfREFUQSA9IFwKKyAJd2FybnF1b3RhLmNvbmYgXAorIAlxdW90YXRhYiBcCitAQCAtMzUsMTUgKzI4LDEyIEBAIG1hbl9NQU5TID0gXAorIAlxdW90YS4xIFwKKyAJcXVvdC44IFwKKyAJcmVwcXVvdGEuOCBcCistCXJwYy5ycXVvdGFkLjggXAorIAlycXVvdGEuMyBcCisgCXNldHF1b3RhLjggXAorIAl3YXJucXVvdGEuY29uZi41IFwKKyAJd2FybnF1b3RhLjggXAorIAl4cW1zdGF0cy44CisgCistQ0xFQU5GSUxFUyA9IHJxdW90YS5jIHJxdW90YS5oIHJxdW90YV9jbG50LmMKKy0KKyBTVUJESVJTID0gcG8KKyAKKyBFWFRSQV9ESVNUID0gXAorQEAgLTU1LDkgKzQ1LDE1IEBAIEVYVFJBX0RJU1QgPSBcCisgCUNoYW5nZWxvZyBcCisgCWxkYXAtc2NyaXB0cworIAorLW5vaW5zdF9MSUJSQVJJRVMgPSBcCistCWxpYnF1b3RhLmEgXAorLQlsaWJycGNjbGllbnQuYQorK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJxdW90YS5hCisrCisraWYgV0lUSF9SUEMKKytycGNzdmNkaXIgPSAkKGluY2x1ZGVkaXIpL3JwY3N2YworK3JwY3N2Y19EQVRBID0gXAorKwlycXVvdGEuaCBcCisrCXJxdW90YS54CisrCisrbm9pbnN0X0xJQlJBUklFUyArPSBsaWJycGNjbGllbnQuYQorIAorIGxpYnJwY2NsaWVudF9hX1NPVVJDRVMgPSBcCisgCXJxdW90YS5jIFwKK0BAIC02Nyw4ICs2MywxMCBAQCBsaWJycGNjbGllbnRfYV9TT1VSQ0VTID0gXAorIAlycXVvdGFfY2xudC5jCisgbGlicnBjY2xpZW50X2FfQ0ZMQUdTID0gLVduby11bnVzZWQKKyAKKy1pZiBXSVRIX1JQQworIFJQQ0xJQlMgPSBsaWJycGNjbGllbnQuYQorK0JVSUxUX1NPVVJDRVMgPSBycXVvdGEuaCBycXVvdGEuYyBycXVvdGFfY2xudC5jCisrQ0xFQU5GSUxFUyA9IHJxdW90YS5jIHJxdW90YS5oIHJxdW90YV9jbG50LmMKKyttYW5fTUFOUyArPSBycGMucnF1b3RhZC44CisgZW5kaWYKKyAKKyBsaWJxdW90YV9hX1NPVVJDRVMgPSBcCitAQCAtMjE3LDYgKzIxNSw3IEBAIGNvbnZlcnRxdW90YV9MREFERCA9IFwKKyAJbGlicXVvdGEuYSBcCisgCSQoUlBDTElCUykKKyAKKytpZiBXSVRIX1JQQworIHJwY19ycXVvdGFkX1NPVVJDRVMgPSBcCisgCXJxdW90YV9zZXJ2ZXIuYyBcCisgCXJxdW90YV9zdmMuYyBcCitAQCAtMjI1LDYgKzIyNCw3IEBAIHJwY19ycXVvdGFkX0xEQUREID0gXAorIAlsaWJxdW90YS5hIFwKKyAJJChXUkFQX0xJQlMpIFwKKyAJJChSUENMSUJTKQorK2VuZGlmCisgCisgcXVvdGFfbmxkX1NPVVJDRVMgPSBxdW90YV9ubGQuYworIHF1b3RhX25sZF9DRkxBR1MgPSBcCitAQCAtMjM2LDYgKzIzNiw3IEBAIHF1b3RhX25sZF9MREFERCA9IFwKKyAJJChEQlVTX0xJQlMpIFwKKyAJJChMSUJOTDNfTElCUykKKyAKKytpZiBXSVRIX1JQQworICMgLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBScGNnZW4gY29udmVyc2lvbnMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLQorQEAgLTI1MCw2ICsyNTEsNyBAQCBxdW90YV9ubGRfTERBREQgPSBcCisgcnF1b3RhX2NsbnQuYzogcnF1b3RhLngKKyAJQHJtIC1mICRACisgCUAkKFJQQ0dFTikgLWwgLW8gJEAgJDwKKytlbmRpZgorIAorICMgLS0tLS0tLS0KKyAjIFF1b3Rhb2ZmCitkaWZmIC0tZ2l0IGEvcXVvdGFvcHMuYyBiL3F1b3Rhb3BzLmMKK2luZGV4IDQ3ZWY5YTcuLjEzNmFlYzMgMTAwNjQ0CistLS0gYS9xdW90YW9wcy5jCisrKysgYi9xdW90YW9wcy5jCitAQCAtMzQsNyArMzQsOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CitkaWZmIC0tZ2l0IGEvc2V0cXVvdGEuYyBiL3NldHF1b3RhLmMKK2luZGV4IDUxZDdiM2MuLjhlY2Q5YzMgMTAwNjQ0CistLS0gYS9zZXRxdW90YS5jCisrKysgYi9zZXRxdW90YS5jCitAQCAtNyw3ICs3LDkgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlIDxycGMvcnBjLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorLS0gCisyLjYuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhLzAwMDMtRG9uLXQtYnVpbGQtcnBjLnJxdW90YWQtd2hlbi1kaXNhYmxlLXJwYy13YXMtcmVxdWVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwMy1Eb24tdC1idWlsZC1ycGMucnF1b3RhZC13aGVuLWRpc2FibGUtcnBjLXdhcy1yZXF1ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NTUzODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhLzAwMDMtRG9uLXQtYnVpbGQtcnBjLnJxdW90YWQtd2hlbi1kaXNhYmxlLXJwYy13YXMtcmVxdWVzdC5wYXRjaApAQCAtMCwwICsxLDYyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIGM3YTc2MjM3ZTdhNTFhNjlkMDIzNmViZmMxOTFlNDYyZjgwNWNmNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMYXJzIFdlbmRsZXIgPHBvbHlub21pYWwtY0BnZW50b28ub3JnPgorRGF0ZTogTW9uLCAxNSBGZWIgMjAxNiAxNDo0MjoxNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCBidWlsZCBycGMucnF1b3RhZCB3aGVuIC0tZGlzYWJsZS1ycGMgd2FzIHJlcXVlc3RlZC4KKworVGhpcyBmaXhlcyBhIGJ1Y2ggb2YgdW5kZWZpbmVkIHJlZmVyZW5jZXM6CisKK3g4Nl82NC1wYy1saW51eC1nbnUtZ2NjICAtbWFyY2g9bmF0aXZlIC1tdHVuZT1uYXRpdmUgLU8yIC1waXBlIC1EX0dOVV9TT1VSQ0UgLVdhCitsbCAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtZlBJQyAtcGllIC1XbCwtTzEgLVdsLC0taGFzaC1zdAoreWxlPWdudSAtV2wsLS1zb3J0LWNvbW1vbiAtV2wsLS1hcy1uZWVkZWQgLW8gcnBjLnJxdW90YWQgcnF1b3RhX3NlcnZlci5vIHJxdW90YV8KK3N2Yy5vIHN2Y19zb2NrZXQubyBsaWJxdW90YS5hCitycXVvdGFfc3ZjLm86IEluIGZ1bmN0aW9uIGBycXVvdGFwcm9nXzInOgorcnF1b3RhX3N2Yy5jOigudGV4dCsweDFkMyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHhkcl9zZXRxdW90YV9yc2x0JworcnF1b3RhX3N2Yy5jOigudGV4dCsweDFkYSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHhkcl9leHRfc2V0cXVvdGFfYXJncycKK3JxdW90YV9zdmMuYzooLnRleHQrMHgyYjIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfc2V0cXVvdGFfcnNsdCcKK3JxdW90YV9zdmMuYzooLnRleHQrMHgyYjkpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfZXh0X3NldHF1b3RhX2FyZ3MnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4MmZmKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2dldHF1b3RhX3JzbHQnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4MzA2KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2V4dF9nZXRxdW90YV9hcmdzJworcnF1b3RhX3N2Yy5jOigudGV4dCsweDMxYSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHhkcl9nZXRxdW90YV9yc2x0JworcnF1b3RhX3N2Yy5jOigudGV4dCsweDMyMSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHhkcl9leHRfZ2V0cXVvdGFfYXJncycKK3JxdW90YV9zdmMubzogSW4gZnVuY3Rpb24gYHJxdW90YXByb2dfMSc6CitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4M2YzKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX3NldHF1b3RhX3JzbHQnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4M2ZhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX3NldHF1b3RhX2FyZ3MnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4NGQyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX3NldHF1b3RhX3JzbHQnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4NGQ5KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX3NldHF1b3RhX2FyZ3MnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4NTFmKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2dldHF1b3RhX3JzbHQnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4NTI2KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2dldHF1b3RhX2FyZ3MnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4NTNhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2dldHF1b3RhX3JzbHQnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4NTQxKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2dldHF1b3RhX2FyZ3MnCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK01ha2VmaWxlOjkwMTogcmVjaXBlIGZvciB0YXJnZXQgJ3JwYy5ycXVvdGFkJyBmYWlsZWQKKworU2lnbmVkLW9mZi1ieTogTGFycyBXZW5kbGVyIDxwb2x5bm9taWFsLWNAZ2VudG9vLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+CistLS0KKyBNYWtlZmlsZS5hbSB8IDUgKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA3N2Y4NDAwLi42ZDdlYTBlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTE2LDggKzExNiwxMSBAQCBzYmluX1BST0dSQU1TID0gXAorIAl4cW1zdGF0cyBcCisgCWVkcXVvdGEgXAorIAlzZXRxdW90YSBcCistCWNvbnZlcnRxdW90YSBcCisrCWNvbnZlcnRxdW90YQorK2lmIFdJVEhfUlBDCisrc2Jpbl9QUk9HUkFNUyArPSBcCisgCXJwYy5ycXVvdGFkCisrZW5kaWYKKyBpZiBXSVRIX05FVExJTksKKyBzYmluX1BST0dSQU1TICs9IFwKKyAJcXVvdGFfbmxkCistLSAKKzIuNi4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwNC1GaXgtd2FybmluZ3MtZHVlLXRvLW1pc3Npbmctc3RkbGliLmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhLzAwMDQtRml4LXdhcm5pbmdzLWR1ZS10by1taXNzaW5nLXN0ZGxpYi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjRjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhLzAwMDQtRml4LXdhcm5pbmdzLWR1ZS10by1taXNzaW5nLXN0ZGxpYi5oLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gYzRiNTZlZTU4YjliNzZkMjU5ODUzNWNmNjEwOWEyN2IyMmU2MGFiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+CitEYXRlOiBXZWQsIDMwIE1hciAyMDE2IDEwOjIxOjEzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB3YXJuaW5ncyBkdWUgdG8gbWlzc2luZyBzdGRsaWIuaAorCitXaGVuIGNvbXBpbGluZyB3aXRob3V0IFJQQywgd2UgZG8gbm90IGdldCBzdGRsaWIuaCBhdXRvbWF0aWNhbGx5CitpbmNsdWRlZCB2aWEgb3RoZXIgaW5jbHVkZXMgYW5kIHRodXMgbWlzcyBzb21lIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorSW5jbHVkZSBzdGRsaWIuaCBleHBsaWNpdGVseS4KKworU2lnbmVkLW9mZi1ieTogSmFuIEthcmEgPGphY2tAc3VzZS5jej4KKy0tLQorIHF1b3Rhb3BzLmMgfCAxICsKKyBzZXRxdW90YS5jIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3F1b3Rhb3BzLmMgYi9xdW90YW9wcy5jCitpbmRleCA1OTBkYzFiLi41NmNmNjIyIDEwMDY0NAorLS0tIGEvcXVvdGFvcHMuYworKysrIGIvcXVvdGFvcHMuYworQEAgLTUyLDYgKzUyLDcgQEAKKyAjaW5jbHVkZSA8dGltZS5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlICJycXVvdGEuaCIKK2RpZmYgLS1naXQgYS9zZXRxdW90YS5jIGIvc2V0cXVvdGEuYworaW5kZXggOGVjZDljMy4uNDIxNjMxZSAxMDA2NDQKKy0tLSBhL3NldHF1b3RhLmMKKysrKyBiL3NldHF1b3RhLmMKK0BAIC0xNyw2ICsxNyw3IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorIAorICNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSAicnF1b3RhLmgiCistLSAKKzIuNi4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2ZjbnRsLnBhdGNoCmluZGV4IDI3ZTYwZmQuLjJkMzc5NzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaApAQCAtNTksMjAgKzU5LDYgQEAKICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAgI2luY2x1ZGUgInF1b3RhX3RyZWUuaCIKICAKLUluZGV4OiBxdW90YS10b29scy9xdW90YW9wcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YW9wcy5jCi0rKysgcXVvdGEtdG9vbHMvcXVvdGFvcHMuYwotQEAgLTM0LDcgKzM0LDkgQEAKLSAKLSAjaW5jbHVkZSAiY29uZmlnLmgiCi0gCi0rI2lmIGRlZmluZWQoUlBDKQotICNpbmNsdWRlIDxycGMvcnBjLmg+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotICNpbmNsdWRlIDxzeXMvZmlsZS5oPgogSW5kZXg6IHF1b3RhLXRvb2xzL3JxdW90YV9jbGllbnQuYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0tIHF1b3RhLXRvb2xzLm9yaWcvcnF1b3RhX2NsaWVudC5jCkBAIC05NywxNyArODMsMyBAQAogICNpbmNsdWRlICJjb21tb24uaCIKICAjaW5jbHVkZSAicXVvdGFpby5oIgogICNpbmNsdWRlICJxdW90YXN5cy5oIgotSW5kZXg6IHF1b3RhLXRvb2xzL3NldHF1b3RhLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBxdW90YS10b29scy5vcmlnL3NldHF1b3RhLmMKLSsrKyBxdW90YS10b29scy9zZXRxdW90YS5jCi1AQCAtNyw3ICs3LDkgQEAKLSAKLSAjaW5jbHVkZSAiY29uZmlnLmgiCi0gCi0rI2lmIGRlZmluZWQoUlBDKQotICNpbmNsdWRlIDxycGMvcnBjLmg+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAzLmJiCmluZGV4IDRhOTgwNDYuLjIyYWFiNDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGFfNC4wMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDMuYmIKQEAgLTEyLDYgKzEyLDEwIEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1hY2NpZGVudGFseS1vdmVycmlkZS1jb21tYW5kbGluZS1wYXNzZWQtQ0ZMQUcucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZmNudGwucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX25vbl9wb3NpeF90eXBlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1OR1JPVVBTX01BWC1pbnN0ZWFkLW9mLU5HUk9VUFMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1BbGxvdy1idWlsZGluZy1vbi1zeXN0ZW1zLXRoYXQtZG8tbm90LWhhdmUtcnBjLWhlYWRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRG9uLXQtYnVpbGQtcnBjLnJxdW90YWQtd2hlbi1kaXNhYmxlLXJwYy13YXMtcmVxdWVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LUZpeC13YXJuaW5ncy1kdWUtdG8tbWlzc2luZy1zdGRsaWIuaC5wYXRjaCBcCiAgICAgICAgICAgIgogU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoIgogCkBAIC0yNSw4ICsyOSw4IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHBrZ2NvbmZpZwogCi1DRkxBR1MgKz0gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vdGlycGMiCi1MREZMQUdTICs9ICItbHRpcnBjIgorQ0ZMQUdTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdycGMnLCAnLUkke1NUQUdJTkdfSU5DRElSfS90aXJwYycsICcnLCBkKX0iCitMREZMQUdTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdycGMnLCAnLWx0aXJwYycsICcnLCBkKX0iCiBBU05FRURFRCA9ICIiCiAKIFBBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMgcnBjIGJzZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLUZpeC1zdGFjay1vdmVyZmxvdy1kdWUtdG8tdG9vLWRlZXAtcmVjdXJzaW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtRml4LXN0YWNrLW92ZXJmbG93LWR1ZS10by10b28tZGVlcC1yZWN1cnNpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYzgyMGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtRml4LXN0YWNrLW92ZXJmbG93LWR1ZS10by10b28tZGVlcC1yZWN1cnNpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1CdWc6IDQ1NzEzCi0KLUhvdyB0byByZXByb2R1Y2U6Ci1SdW4gdGhpcyBjb21tYW5kIGluc2lkZSBzY3JlZW4KLSQgcHJpbnRmICdceDFiWzEwMDAwMDAwVCcKLQotc2NyZWVuIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCBNU2Nyb2xsViB0byBkZXB0aCBuLzI1Ni4KLVRoaXMgaXMgdGltZSBjb25zdW1pbmcgYW5kIHdpbGwgb3ZlcmZsb3cgc3RhY2sgaWYgbiBpcyBodWdlLgotCi1GaXhlcyBDVkUtMjAxNS02ODA2Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTUtNjgwNgotCi1TaWduZWQtb2ZmLWJ5OiBLdWFuZy1jaGUgV3UgPGtjd3VAY3NpZS5vcmc+Ci1TaWduZWQtb2ZmLWJ5OiBBbWFkZXVzeiBTxYJhd2nFhHNraSA8YW1hZGVAYXNtYmxyLm5ldD4KLVNpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgotLS0tCi1kaWZmIC1OYXVyIHNjcmVlbi00LjMuMS1vcmlnL2Fuc2kuYyBzY3JlZW4tNC4zLjEvYW5zaS5jCi0tLS0gc2NyZWVuLTQuMy4xLW9yaWcvYW5zaS5jCTIwMTUtMDYtMjkgMDA6MjI6NTUuMDAwMDAwMDAwICswMzAwCi0rKysgc2NyZWVuLTQuMy4xL2Fuc2kuYwkyMDE1LTEwLTA2IDEzOjEzOjU4LjI5NzY0ODAzOSArMDMwMAotQEAgLTI1MDIsMTMgKzI1MDIsMTMgQEAKLSAgICAgcmV0dXJuOwotICAgaWYgKG4gPiAwKQotICAgICB7Ci0rICAgICAgaWYgKHllIC0geXMgKyAxIDwgbikKLSsJICBuID0geWUgLSB5cyArIDE7Ci0gICAgICAgaWYgKG4gPiAyNTYpCi0gCXsKLSAJICBNU2Nyb2xsVihwLCBuIC0gMjU2LCB5cywgeWUsIGJjZSk7Ci0gCSAgbiA9IDI1NjsKLSAJfQotLSAgICAgIGlmICh5ZSAtIHlzICsgMSA8IG4pCi0tCW4gPSB5ZSAtIHlzICsgMTsKLSAjaWZkZWYgQ09QWV9QQVNURQotICAgICAgIGlmIChjb21wYWN0aGlzdCkKLSAJewotQEAgLTI1NjIsMTUgKzI1NjIsMTUgQEAKLSAgICAgfQotICAgZWxzZQotICAgICB7Ci0tICAgICAgaWYgKG4gPCAtMjU2KQotLQl7Ci0tCSAgTVNjcm9sbFYocCwgbiArIDI1NiwgeXMsIHllLCBiY2UpOwotLQkgIG4gPSAtMjU2OwotLQl9Ci0gICAgICAgbiA9IC1uOwotICAgICAgIGlmICh5ZSAtIHlzICsgMSA8IG4pCi0gCW4gPSB5ZSAtIHlzICsgMTsKLSAKLSsgICAgICBpZiAobiA+IDI1NikKLSsgICAgICB7Ci0rICAgICAgICBNU2Nyb2xsVihwLCAtIChuIC0gMjU2KSwgeXMsIHllLCBiY2UpOwotKyAgICAgICAgbiA9IDI1NjsKLSsgICAgICB9Ci0gICAgICAgbWwgPSBwLT53X21saW5lcyArIHllOwotICAgICAgIC8qIENsZWFyIGxpbmVzICovCi0gICAgICAgZm9yIChpID0geWU7IGkgPiB5ZSAtIG47IGktLSwgbWwtLSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMS1maXgtZm9yLW11bHRpam9iLWJ1aWxkLnBhdGNoCmluZGV4IDQwZWNlZjAuLmZiZGIwZWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaApAQCAtMSwzICsxLDEzIEBACitGcm9tIDc5YWQyODg1ZTI2NjMxMDc3ZGQ2YjhhZWJlMTdhZTk1YjM4MTMzYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyNiBKdWwgMjAxNiAxNDoyMzo1OSArMDgwMAorU3ViamVjdDogW1BBVENIXSBmaXggZm9yIG11bHRpam9iIGJ1aWxkCisKK21ha2Ugc3VyZSB0aGF0IGNvbW0uc2ggc2NyaXB0IGdlbmVyYXRlcyBjb21tLmggaGVhZGVyIGJlZm9yZSBkb2luZworYW55dGhpbmcgZWxzZQorCitTaWduZWQtb2ZmLWJ5OiBBbWFkZXVzeiBTYXdpc2tpIDxhbWFkZUBhc21ibHIubmV0PgorCiBVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CiAKIEJhY2twb3J0IHBhdGNoIHRvIGZpeCBwYXJhbGxlbCBidWlsZCBmYWlsdXJlIGFuZCB1cGRhdGUgY29udGV4dCB0byBtYWtlIHBhdGNoCkBAIC02LDI1ICsxNiwxMyBAQAogaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvc2NyZWVuLmdpdC9jb21taXQ/aWQ9YzBkZTZkZAogCiBTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CiAtLS0KLUZyb20gYzBkZTZkZDc5NzBiMmM3YjQyNmE1YzM5ZGNiYzMxYzJiZWY4NzIzMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRGLTg/cT9BbWFkZXVzej0yMFM9QzU9ODJhd2k9QzU9ODRza2k/PSA8YW1hZGVAYXNtYmxyLm5ldD4KLURhdGU6IFRodSwgMiBKYW4gMjAxNCAxODoxODowNiArMDEwMAotU3ViamVjdDogW1BBVENIXSBmaXggZm9yIG11bHRpam9iIGJ1aWxkCi1NSU1FLVZlcnNpb246IDEuMAotQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Ci1Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci0KLW1ha2Ugc3VyZSB0aGF0IGNvbW0uc2ggc2NyaXB0IGdlbmVyYXRlcyBjb21tLmggaGVhZGVyIGJlZm9yZSBkb2luZwotYW55dGhpbmcgZWxzZQotCi1TaWduZWQtb2ZmLWJ5OiBBbWFkZXVzeiBTxYJhd2nFhHNraSA8YW1hZGVAYXNtYmxyLm5ldD4KLS0tLQotIE1ha2VmaWxlLmluIHwgMTAgKysrKystLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisgTWFrZWZpbGUuaW4gfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IGNlODZjYmMuLmRlYTE2ZDggMTAwNjQ0CitpbmRleCBhY2E3ZGEzLi4zNjA3NzExIDEwMDY0NAogLS0tIGEvTWFrZWZpbGUuaW4KICsrKyBiL01ha2VmaWxlLmluCiBAQCAtMjk4LDcgKzI5OCw3IEBAIHNlYXJjaC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHNlYXJjaC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhCkBAIC01MSw4ICs0OSwxMCBAQAogICBicmFpbGxlLmgKIC1saXN0X2dlbmVyaWMubzogbGlzdF9nZW5lcmljLmggbGlzdF9nZW5lcmljLmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCiAtbGlzdF9kaXNwbGF5Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZGlzcGxheS5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaAotLWxpc3Rfd2luZG93Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3Rfd2luZG93LmMgd2luZG93LmggbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCiArbGlzdF9nZW5lcmljLm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZ2VuZXJpYy5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaCBjb21tLmgKICtsaXN0X2Rpc3BsYXkubzogbGlzdF9nZW5lcmljLmggbGlzdF9kaXNwbGF5LmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAotK2xpc3Rfd2luZG93Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3Rfd2luZG93LmMgd2luZG93LmggbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorIGxpc3Rfd2luZG93Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3Rfd2luZG93LmMgd2luZG93LmggbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAogIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZDg3OGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuMy4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotU1VNTUFSWSA9ICJNdWx0aXBsZXhpbmcgdGVybWluYWwgbWFuYWdlciIKLURFU0NSSVBUSU9OID0gIlNjcmVlbiBpcyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBtYW5hZ2VyIFwKLXRoYXQgbXVsdGlwbGV4ZXMgYSBwaHlzaWNhbCB0ZXJtaW5hbCBiZXR3ZWVuIHNldmVyYWwgXAotcHJvY2Vzc2VzLCB0eXBpY2FsbHkgaW50ZXJhY3RpdmUgc2hlbGxzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zY3JlZW4vIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/ZnVuYz1hZGRpdGVtJmdyb3VwPXNjcmVlbiIKLQotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotCi1MSUNFTlNFID0gIkdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbi5oO2VuZGxpbmU9MjY7bWQ1PTM5NzExNDI5ODkyODlhODE5OGE1NDQyMjA3MDNjMmJmIgotCi1ERVBFTkRTID0gIm5jdXJzZXMgXAotICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCi1SREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2NyZWVuL3NjcmVlbi0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdmaWxlOi8vc2NyZWVuLnBhbScsICcnLCBkKX0gXAotICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtc3RhY2stb3ZlcmZsb3ctZHVlLXRvLXRvby1kZWVwLXJlY3Vyc2lvbi5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNWJiM2IwZmYyNjc0ZTI5Mzc4YzMxYWQzNDExMTcwYWQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmE0MDQ5ZjhhZWUyODNkZTYyZTI4M2Q0MjdmMmNmZDM1ZDZjMzY5YjQwZjdmNDVmOTQ3ZGJmZDkxNTY5OWQ2MyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1t1dGVtcHRlcl0gPSAiYWNfY3ZfaGVhZGVyX3V0ZW1wdGVyX2g9eWVzLGFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPW5vLGxpYnV0ZW1wdGVyLCIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1wdHktbW9kZT0wNjIwIC0td2l0aC1wdHktZ3JvdXA9NSBcCi0gICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLWVuYWJsZS1wYW0nLCAnLS1kaXNhYmxlLXBhbScsIGQpfSIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgotCQlpbnN0YWxsIC1EIC1tIDY0NCAke1dPUktESVJ9L3NjcmVlbi5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3NjcmVlbgotCWZpCi19Ci0KLXBrZ19wb3N0aW5zdF8ke1BOfSAoKSB7Ci0JZ3JlcCAtcSAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzIHx8IGVjaG8gJHtiaW5kaXJ9L3NjcmVlbiA+PiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCi19Ci0KLXBrZ19wb3N0cm1fJHtQTn0gKCkgewotCXByaW50ZiAiJChncmVwIC12ICJeJHtiaW5kaXJ9L3NjcmVlbiQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMpXG4iID4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuNC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OWJhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC40LjAuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJNdWx0aXBsZXhpbmcgdGVybWluYWwgbWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIlNjcmVlbiBpcyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBtYW5hZ2VyIFwKK3RoYXQgbXVsdGlwbGV4ZXMgYSBwaHlzaWNhbCB0ZXJtaW5hbCBiZXR3ZWVuIHNldmVyYWwgXAorcHJvY2Vzc2VzLCB0eXBpY2FsbHkgaW50ZXJhY3RpdmUgc2hlbGxzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zY3JlZW4vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/ZnVuYz1hZGRpdGVtJmdyb3VwPXNjcmVlbiIKKworU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbi5oO2VuZGxpbmU9MjY7bWQ1PTM5NzExNDI5ODkyODlhODE5OGE1NDQyMjA3MDNjMmJmIgorCitERVBFTkRTID0gIm5jdXJzZXMgXAorICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2NyZWVuL3NjcmVlbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdmaWxlOi8vc2NyZWVuLnBhbScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImQyNmUxMWEzNjQ4YzJiMTFhYWVmYTIxNWE1NWRmZDM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmNzIyYTU0NzU5YTNiZjIzYWFkMjcyYmJmMzNjNDE0YzEwNzhjYWQ2YmNkOTgyZmFkYTkzYzBkNzkxNzIxOGIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbdXRlbXB0ZXJdID0gImFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPXllcyxhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD1ubyxsaWJ1dGVtcHRlciwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcHR5LW1vZGU9MDYyMCAtLXdpdGgtcHR5LWdyb3VwPTUgXAorICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtJywgJy0tZGlzYWJsZS1wYW0nLCBkKX0iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zY3JlZW4ucGFtICR7RH0vJHtzeXNjb25mZGlyfS9wYW0uZC9zY3JlZW4KKwlmaQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmluZGlyfS9zY3JlZW4gPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9zZWQtNC4xLjJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggODA1OTQwNi4uYzdjMGFhMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTYsNyArNiw3IEBACiB8IG1ha2VbMV06IG1rZGlyX3BAOiBDb21tYW5kIG5vdCBmb3VuZAogfCBtYWtlWzFdOiAqKiogW2luc3RhbGwtZGF0YS15ZXNdIEVycm9yIDEyNwogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDcvMTMKIAogSW5kZXg6IHNlZC00LjEuMi9pbnRsL01ha2VmaWxlLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvc2VkLWFkZC1wdGVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCmluZGV4IDEwNWU4YjcuLjAyOTM5MDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCkBAIC01NCw3ICs1NCw3IEBACiAgIyBkdW1teSB0YXJnZXRzIGZvciAkKFRFU1RTKSBzbyB0aGF0IG1ha2UgZG9lcyBub3QgY29tcGxhaW4uCiAgCiAraW5zdGFsbC1wdGVzdDoKLSsJY2QgJChCVUlMRERJUik7IHRhciAtY2YgLSAkKFRFU1RESVIpIC0tZXhjbHVkZSAqLm8gfCAoIGNkICQoREVTVERJUikgJiYgdGFyIC14ZiAtICkKKysJY2QgJChCVUlMRERJUik7IHRhciAtYyAtLWV4Y2x1ZGU9Ki5vICQoVEVTVERJUikgfCAoIGNkICQoREVTVERJUikgJiYgdGFyIC14ZiAtICkKICsJZm9yIGkgaW4gJChFWFRSQV9ESVNUKSB0c3QtcmVnZXgyLmM7IGRvIGluc3RhbGwgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpLyQoVEVTVERJUik7IGRvbmUKICsJc2VkIC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nIC1lICdzL15zcmNkaXIgPSBcKC4qXCkvc3JjZGlyID0gLi8nIC1lICdzL2Jhc2gvc2gvJyAtaSAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKICsJZm9yIGkgaW4gYGdyZXAgLXJsICIuLi9zZWQvc2VkIiAkKERFU1RESVIpLyQoVEVTVERJUilgOyBkbyBzZWQgLWUgJ3MvLi5cL3NlZFwvc2VkL3NlZC8nIC1pICQkaTsgZG9uZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXJlbGF4ZWQtdXNlcm5hbWVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXJlbGF4ZWQtdXNlcm5hbWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZjA0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctcmVsYXhlZC11c2VybmFtZXMucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKKworVGhlIGdyb3VwYWRkIGZyb20gc2hhZG93IGRvZXMgbm90IGFsbG93IHVwcGVyIGNhc2UgZ3JvdXAgbmFtZXMsIHRoZQorc2FtZSBpcyB0cnVlIGZvciB0aGUgdXBzdHJlYW0gc2hhZG93LiBCdXQgZGlzdHJpYnV0aW9ucyBsaWtlCitEZWJpYW4vVWJ1bnR1L0NlbnRPUyBoYXMgdGhlaXIgb3duIHdheSB0byBjb3BlIHdpdGggdGhpcyBwcm9ibGVtLAordGhpcyBwYXRjaCBpcyBwaWNrZWQgdXAgZnJvbSBDZW50T1MgcmVsZWFzZSA3LjAgdG8gcmVsYXggdGhlIHVzZXJuYW1lcworcmVzdHJpY3Rpb25zIHRvIGFsbG93IHRoZSB1cHBlciBjYXNlIGdyb3VwIG5hbWVzLCBhbmQgdGhlIHJlbGF4YXRpb24gaXMKK1BPU0lYIGNvbXBsaWFudCBiZWNhdXNlIFBPU0lYIGluZGljYXRlIHRoYXQgdXNlcm5hbWVzIGFyZSBjb21wb3NlZCBvZiAKK2NoYXJhY3RlcnMgZnJvbSB0aGUgcG9ydGFibGUgZmlsZW5hbWUgY2hhcmFjdGVyIHNldCBbQS1aYS16MC05Ll8tXS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNoYW4gSGFpIDxzaGFuLmhhaUB3aW5kcml2ZXIuY29tPiAKKworZGlmZiAtdXJwTiBhL2xpYm1pc2MvY2hrbmFtZS5jIGIvbGlibWlzYy9jaGtuYW1lLmMKK2luZGV4IDUwODkxMTIuLmY0MGEwZGEgMTAwNjQ0CistLS0gYS9saWJtaXNjL2Noa25hbWUuYworKysrIGIvbGlibWlzYy9jaGtuYW1lLmMKK0BAIC00OSwyMSArNDksMjggQEAKKyBzdGF0aWMgYm9vbCBpc192YWxpZF9uYW1lIChjb25zdCBjaGFyICpuYW1lKQorIHsKKyAJLyoKKy0JICogVXNlci9ncm91cCBuYW1lcyBtdXN0IG1hdGNoIFthLXpfXVthLXowLTlfLV0qWyRdCistCSAqLworLQlpZiAoKCdcMCcgPT0gKm5hbWUpIHx8CistCSAgICAhKCgoJ2EnIDw9ICpuYW1lKSAmJiAoJ3onID49ICpuYW1lKSkgfHwgKCdfJyA9PSAqbmFtZSkpKSB7CisrICAgICAgICAgKiBVc2VyL2dyb3VwIG5hbWVzIG11c3QgbWF0Y2ggZ251IGUtcmVnZXg6CisrICAgICAgICAgKiAgICBbYS16QS1aMC05Xy5dW2EtekEtWjAtOV8uLV17MCwzMH1bYS16QS1aMC05Xy4kLV0/CisrICAgICAgICAgKgorKyAgICAgICAgICogYXMgYSBub24tUE9TSVgsIGV4dGVuc2lvbiwgYWxsb3cgIiQiIGFzIHRoZSBsYXN0IGNoYXIgZm9yCisrICAgICAgICAgKiBzYWtlIG9mIFNhbWJhIDMueCAiYWRkIG1hY2hpbmUgc2NyaXB0IgorKyAgICAgICAgICovCisrCWlmICggKCdcMCcgPT0gKm5hbWUpIHx8CisrICAgICAgICAgICAgICEoKCpuYW1lID49ICdhJyAmJiAqbmFtZSA8PSAneicpIHx8CisrICAgICAgICAgICAgICAgKCpuYW1lID49ICdBJyAmJiAqbmFtZSA8PSAnWicpIHx8CisrICAgICAgICAgICAgICAgKCpuYW1lID49ICcwJyAmJiAqbmFtZSA8PSAnOScpIHx8CisrICAgICAgICAgICAgICAgKCpuYW1lID09ICdfJykgfHwgKCpuYW1lID09ICcuJykgCisrCSAgICAgICkpIHsKKyAJCXJldHVybiBmYWxzZTsKKyAJfQorIAorIAl3aGlsZSAoJ1wwJyAhPSAqKytuYW1lKSB7CistCQlpZiAoISgoICgnYScgPD0gKm5hbWUpICYmICgneicgPj0gKm5hbWUpICkgfHwKKy0JCSAgICAgICggKCcwJyA8PSAqbmFtZSkgJiYgKCc5JyA+PSAqbmFtZSkgKSB8fAorLQkJICAgICAgKCdfJyA9PSAqbmFtZSkgfHwKKy0JCSAgICAgICgnLScgPT0gKm5hbWUpIHx8CistCQkgICAgICAoJy4nID09ICpuYW1lKSB8fAorLQkJICAgICAgKCAoJyQnID09ICpuYW1lKSAmJiAoJ1wwJyA9PSAqKG5hbWUgKyAxKSkgKQorLQkJICAgICApKSB7CisrICAgICAgICAgICAgICAgIGlmICghKCAgKCpuYW1lID49ICdhJyAmJiAqbmFtZSA8PSAneicpIHx8CisrICAgICAgICAgICAgICAgICAgICAgICAgKCpuYW1lID49ICdBJyAmJiAqbmFtZSA8PSAnWicpIHx8CisrICAgICAgICAgICAgICAgICAgICAgICAgKCpuYW1lID49ICcwJyAmJiAqbmFtZSA8PSAnOScpIHx8CisrICAgICAgICAgICAgICAgICAgICAgICAgKCpuYW1lID09ICdfJykgfHwgKCpuYW1lID09ICcuJykgfHwgKCpuYW1lID09ICctJykgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKm5hbWUgPT0gJyQnICYmICoobmFtZSArIDEpID09ICdcMCcpIAorKyAgICAgICAgICAgICAgICAgICAgICkpIHsKKyAJCQlyZXR1cm4gZmFsc2U7CisgCQl9CisgCX0KK2RpZmYgLXVycE4gYS9tYW4vZ3JvdXBhZGQuOC54bWwgYi9tYW4vZ3JvdXBhZGQuOC54bWwKK2luZGV4IDIzMGZkMGMuLjk0Zjc4MDcgMTAwNjQ0CistLS0gYS9tYW4vZ3JvdXBhZGQuOC54bWwKKysrKyBiL21hbi9ncm91cGFkZC44LnhtbAorQEAgLTIyMiwxMiArMjIyLDYgQEAKKyAgICA8cmVmc2VjdDEgaWQ9J2NhdmVhdHMnPgorICAgICAgPHRpdGxlPkNBVkVBVFM8L3RpdGxlPgorICAgICAgPHBhcmE+CistICAgICAgIEdyb3VwbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbG93ZXIgY2FzZSBsZXR0ZXIgb3IgYW4gdW5kZXJzY29yZSwKKy0gICAgICAgZm9sbG93ZWQgYnkgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHVuZGVyc2NvcmVzLCBvciBkYXNoZXMuCistICAgICAgIFRoZXkgY2FuIGVuZCB3aXRoIGEgZG9sbGFyIHNpZ24uCistICAgICAgIEluIHJlZ3VsYXIgZXhwcmVzc2lvbiB0ZXJtczogW2Etel9dW2EtejAtOV8tXSpbJF0/CistICAgICA8L3BhcmE+CistICAgICA8cGFyYT4KKyAgICAgICAgR3JvdXBuYW1lcyBtYXkgb25seSBiZSB1cCB0byAmR1JPVVBfTkFNRV9NQVhfTEVOR1RIOyBjaGFyYWN0ZXJzIGxvbmcuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KK2RpZmYgLXVycE4gYS9tYW4vdXNlcmFkZC44LnhtbCBiL21hbi91c2VyYWRkLjgueG1sCitpbmRleCA1ZGVjOTg5Li5mZTYyM2I5IDEwMDY0NAorLS0tIGEvbWFuL3VzZXJhZGQuOC54bWwKKysrKyBiL21hbi91c2VyYWRkLjgueG1sCitAQCAtMzM2LDcgKzMzNiw3IEBACisgCTwvdGVybT4KKyAJPGxpc3RpdGVtPgorIAkgIDxwYXJhPgorLQkgICAgRG8gbm8gY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIGV2ZW4gaWYgdGhlIHN5c3RlbQorKwkgICAgRG8gbm90IGNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCBldmVuIGlmIHRoZSBzeXN0ZW0KKyAJICAgIHdpZGUgc2V0dGluZyBmcm9tIDxmaWxlbmFtZT4vZXRjL2xvZ2luLmRlZnM8L2ZpbGVuYW1lPgorIAkgICAgKDxvcHRpb24+Q1JFQVRFX0hPTUU8L29wdGlvbj4pIGlzIHNldCB0bworIAkgICAgPHJlcGxhY2VhYmxlPnllczwvcmVwbGFjZWFibGU+LgorQEAgLTYwNywxMiArNjA3LDYgQEAKKyAgICAgPC9wYXJhPgorIAorICAgICA8cGFyYT4KKy0gICAgICBVc2VybmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbG93ZXIgY2FzZSBsZXR0ZXIgb3IgYW4gdW5kZXJzY29yZSwKKy0gICAgICBmb2xsb3dlZCBieSBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZXMsIG9yIGRhc2hlcy4KKy0gICAgICBUaGV5IGNhbiBlbmQgd2l0aCBhIGRvbGxhciBzaWduLgorLSAgICAgIEluIHJlZ3VsYXIgZXhwcmVzc2lvbiB0ZXJtczogW2Etel9dW2EtejAtOV8tXSpbJF0/CistICAgIDwvcGFyYT4KKy0gICAgPHBhcmE+CisgICAgICAgVXNlcm5hbWVzIG1heSBvbmx5IGJlIHVwIHRvIDMyIGNoYXJhY3RlcnMgbG9uZy4KKyAgICAgPC9wYXJhPgorICAgPC9yZWZzZWN0MT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIKaW5kZXggNjk3NTY5Yy4uZWYwMTQ2MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIKQEAgLTIxLDEyICsyMSwxMCBAQAogCiBkb19pbnN0YWxsKCkgewogCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KLQlpbnN0YWxsIC1wIC1tIDc1NSAke1N9L2xvZ2luLmRlZnNfc2hhZG93LXN5c3Jvb3QgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCiB9CiAKLXN5c3Jvb3Rfc3RhZ2VfYWxsKCkgewotCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0gJHtTWVNST09UX0RFU1RESVJ9Ci19CitTWVNST09UX0RJUlMgKz0gIiR7c3lzY29uZmRpcn0iCiAKICMgZG9uJ3QgY3JlYXRlIGFueSBwYWNrYWdlcwogIyBvdGhlcndpc2U6IGRidXMtZGV2IGRlcGVuZHMgb24gc2hhZG93LXN5c3Jvb3QtZGV2IHdoaWNoIGRlcGVuZHMgb24gc2hhZG93LXN5c3Jvb3QgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYwppbmRleCBkMDI0YjAxLi4zNWExOGY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy5pbmMKQEAgLTIyLDYgKzIyLDcgQEAKIFNSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAogICAgICAgICAgICBmaWxlOi8vbG9naW5fZGVmc19wYW0uc2VkIFwKICAgICAgICAgICAgZmlsZTovL3NoYWRvdy11cGRhdGUtcGFtLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2hhZG93LXJlbGF4ZWQtdXNlcm5hbWVzLnBhdGNoIFwKICAgICAgICAgICAgIgogCiBTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIFwKQEAgLTE3OSwxMCArMTgwLDExIEBACiBBTFRFUk5BVElWRV9MSU5LX05BTUVbbG9naW5dID0gIiR7YmFzZV9iaW5kaXJ9L2xvZ2luIgogQUxURVJOQVRJVkVfTElOS19OQU1FW3N1XSA9ICIke2Jhc2VfYmluZGlyfS9zdSIKIAotQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInBhc3N3ZC41IGdldHNwbmFtLjMgZ3JvdXBzLjEiCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyBncm91cHMuMSBzdS4xIgogQUxURVJOQVRJVkVfTElOS19OQU1FW3Bhc3N3ZC41XSA9ICIke21hbmRpcn0vbWFuNS9wYXNzd2QuNSIKIEFMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXRzcG5hbS4zXSA9ICIke21hbmRpcn0vbWFuMy9nZXRzcG5hbS4zIgogQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdS4xXSA9ICIke21hbmRpcn0vbWFuMS9zdS4xIgogCiBwa2dfcG9zdGluc3RfJHtQTn0gKCkgewogCWlmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2NoYW5nZS1jaGFyLXR5cGUtdG8tc2lnbmVkLWNoYXItaW4tbWFjcm9zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWExZmZkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotc2xhbmc6IGNoYW5nZSBjaGFyIHR5cGUgdG8gc2lnbmVkIGNoYXIgaW4gbWFjcm9zCi0KLUMgbGFuZ3VhZ2UgaGFzIDMgZGlzdGluY3QgY2hhciB0eXBlczoKLSAgICAgICAgIGNoYXIKLSAgICAgICAgIHVuc2lnbmVkIGNoYXIKLSAgICAgICAgIHNpZ25lZCBjaGFyCi1BIGNoYXIgaGFzIHRoZSBzYW1lIHJhbmdlIG9mIHZhbHVlcyBhcyBzaWduZWQgY2hhciBvbiBYODYsCi1idXQgc2FtZSBhcyB1bnNpZ25lZCBjaGFyIG9uIEFSTSB3aGljaCBtYWRlIFNsYW5nJ3MgdHlwZWNhc3QoKQotYW5kIGFycmF5X3NvcnQoKSB1bmFibGUgdG8gd29yayBmb3IgY2hhciB2YWx1ZSBvbiBBUk0sIHNpbmNlCi1TbGFuZyBpcyBhc3N1bWluZyAiY2hhciIgYXMgInNpZ25lZCBjaGFyIi4KLQotTm93IHdlIGNoYW5nZSAiY2hhciIgYXMgInNpZ25lZCBjaGFyIiBleHBsaWNpdGx5IGluCi11dGlsL21rc2xhcml0aDIuc2wsIGFuZCB1c2UgaXQgdG8gcmVnZW5lcmF0ZSBzcmMvc2xhcml0aDIuaW5jCi0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi1TaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBzcmMvc2xhcml0aDIuaW5jICAgICAgIHwgICA3MiArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCB8ICAgIDIgLQotIDIgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCi0KLS0tLSBhL3NyYy91dGlsL21rc2xhcml0aDIuc2wKLSsrKyBiL3NyYy91dGlsL21rc2xhcml0aDIuc2wKLUBAIC0xLDcgKzEsNyBAQAotICMhL3Vzci9iaW4vZW52IHNsc2gKLSAKLSBwcml2YXRlIHZhcmlhYmxlIENUeXBlcyA9Ci0tICBbImNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKLSsgIFsic2lnbmVkIGNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKLSAgICAibG9uZyIsICJ1bnNpZ25lZCBsb25nIiwgImxvbmcgbG9uZyIsICJ1bnNpZ25lZCBsb25nIGxvbmciLAotICAgICJmbG9hdCIsICJkb3VibGUiLCAibG9uZyBkb3VibGUiXTsKLSBwcml2YXRlIHZhcmlhYmxlIElzX0ludF9UeXBlID0KLS0tLSBhL3NyYy9zbGFyaXRoMi5pbmMKLSsrKyBiL3NyYy9zbGFyaXRoMi5pbmMKLUBAIC0xLDQzICsxLDQzIEBACi0gLyogRE8gTk9UIEVESVQgLS0gdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCAqLwotLS8qIC0tLS0tLS0tLS0tLSBjaGFyIC0tLS0tLS0tLS0gKi8KLS1ERUZVTl8xKGNvcHlfY2hhcl90b19jaGFyLGNoYXIsY2hhcikKLSsvKiAtLS0tLS0tLS0tLS0gc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLwotK0RFRlVOXzEoY29weV9jaGFyX3RvX2NoYXIsc2lnbmVkIGNoYXIsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBjaGFyX3RvX2NoYXIJTlVMTAotICNkZWZpbmUgY29weV9jaGFyX3RvX3VjaGFyCWNvcHlfY2hhcl90b19jaGFyCi0gI2RlZmluZSBjaGFyX3RvX3VjaGFyCU5VTEwKLS1ERUZVTl8xKGNvcHlfY2hhcl90b19zaG9ydCxjaGFyLHNob3J0KQotK0RFRlVOXzEoY29weV9jaGFyX3RvX3Nob3J0LHNpZ25lZCBjaGFyLHNob3J0KQotICNkZWZpbmUgY2hhcl90b19zaG9ydAlOVUxMCi0tREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LGNoYXIsdW5zaWduZWQgc2hvcnQpCi0rREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LHNpZ25lZCBjaGFyLHVuc2lnbmVkIHNob3J0KQotICNkZWZpbmUgY2hhcl90b191c2hvcnQJTlVMTAotLURFRlVOXzEoY29weV9jaGFyX3RvX2ludCxjaGFyLGludCkKLS1ERUZVTl8yKGNoYXJfdG9faW50LGNoYXIsaW50LGNvcHlfY2hhcl90b19pbnQpCi0tREVGVU5fMShjb3B5X2NoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCkKLS1ERUZVTl8yKGNoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCxjb3B5X2NoYXJfdG9fdWludCkKLS1ERUZVTl8xKGNvcHlfY2hhcl90b19sb25nLGNoYXIsbG9uZykKLS1ERUZVTl8yKGNoYXJfdG9fbG9uZyxjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCi0tREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsY2hhcix1bnNpZ25lZCBsb25nKQotLURFRlVOXzIoY2hhcl90b191bG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcsY29weV9jaGFyX3RvX3Vsb25nKQotK0RFRlVOXzEoY29weV9jaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQpCi0rREVGVU5fMihjaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQsY29weV9jaGFyX3RvX2ludCkKLStERUZVTl8xKGNvcHlfY2hhcl90b191aW50LHNpZ25lZCBjaGFyLHVuc2lnbmVkIGludCkKLStERUZVTl8yKGNoYXJfdG9fdWludCxzaWduZWQgY2hhcix1bnNpZ25lZCBpbnQsY29weV9jaGFyX3RvX3VpbnQpCi0rREVGVU5fMShjb3B5X2NoYXJfdG9fbG9uZyxzaWduZWQgY2hhcixsb25nKQotK0RFRlVOXzIoY2hhcl90b19sb25nLHNpZ25lZCBjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCi0rREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZykKLStERUZVTl8yKGNoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyxjb3B5X2NoYXJfdG9fdWxvbmcpCi0gI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCi0tREVGVU5fMShjb3B5X2NoYXJfdG9fbGxvbmcsY2hhcixsb25nIGxvbmcpCi0tREVGVU5fMihjaGFyX3RvX2xsb25nLGNoYXIsbG9uZyBsb25nLGNvcHlfY2hhcl90b19sbG9uZykKLStERUZVTl8xKGNvcHlfY2hhcl90b19sbG9uZyxzaWduZWQgY2hhcixsb25nIGxvbmcpCi0rREVGVU5fMihjaGFyX3RvX2xsb25nLHNpZ25lZCBjaGFyLGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fbGxvbmcpCi0gI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCi0gI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCi0tREVGVU5fMShjb3B5X2NoYXJfdG9fdWxsb25nLGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQotLURFRlVOXzIoY2hhcl90b191bGxvbmcsY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY29weV9jaGFyX3RvX3VsbG9uZykKLStERUZVTl8xKGNvcHlfY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQotK0RFRlVOXzIoY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNvcHlfY2hhcl90b191bGxvbmcpCi0gI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCi0gI2lmIFNMQU5HX0hBU19GTE9BVAotLURFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQpCi0tREVGVU5fMihjaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQsY29weV9jaGFyX3RvX2Zsb2F0KQotK0RFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LHNpZ25lZCBjaGFyLGZsb2F0KQotK0RFRlVOXzIoY2hhcl90b19mbG9hdCxzaWduZWQgY2hhcixmbG9hdCxjb3B5X2NoYXJfdG9fZmxvYXQpCi0gI2VuZGlmIC8qIFNMQU5HX0hBU19GTE9BVCAqLwotICNpZiBTTEFOR19IQVNfRkxPQVQKLS1ERUZVTl8xKGNvcHlfY2hhcl90b19kb3VibGUsY2hhcixkb3VibGUpCi0tREVGVU5fMihjaGFyX3RvX2RvdWJsZSxjaGFyLGRvdWJsZSxjb3B5X2NoYXJfdG9fZG91YmxlKQotK0RFRlVOXzEoY29weV9jaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUpCi0rREVGVU5fMihjaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUsY29weV9jaGFyX3RvX2RvdWJsZSkKLSAjZW5kaWYgLyogU0xBTkdfSEFTX0ZMT0FUICovCi0gI2lmIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkKLS1ERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLGNoYXIsbG9uZyBkb3VibGUpCi0tREVGVU5fMihjaGFyX3RvX2xkb3VibGUsY2hhcixsb25nIGRvdWJsZSxjb3B5X2NoYXJfdG9fbGRvdWJsZSkKLStERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlKQotK0RFRlVOXzIoY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlLGNvcHlfY2hhcl90b19sZG91YmxlKQotICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpICovCi0gI2lmIFNMQU5HX0hBU19GTE9BVAotLVRPX0RPVUJMRV9GVU4oY2hhcl90b19vbmVfZG91YmxlLGNoYXIpCi0rVE9fRE9VQkxFX0ZVTihjaGFyX3RvX29uZV9kb3VibGUsc2lnbmVkIGNoYXIpCi0gI2VuZGlmCi0gCi0gLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLwotQEAgLTgyLDcgKzgyLDcgQEAgVE9fRE9VQkxFX0ZVTih1Y2hhcl90b19vbmVfZG91YmxlLHVuc2lnbgotICNlbmRpZgotIAotIC8qIC0tLS0tLS0tLS0tLSBzaG9ydCAtLS0tLS0tLS0tICovCi0tREVGVU5fMShjb3B5X3Nob3J0X3RvX2NoYXIsc2hvcnQsY2hhcikKLStERUZVTl8xKGNvcHlfc2hvcnRfdG9fY2hhcixzaG9ydCxzaWduZWQgY2hhcikKLSAjZGVmaW5lIHNob3J0X3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV9zaG9ydF90b191Y2hhcixzaG9ydCx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgc2hvcnRfdG9fdWNoYXIJTlVMTAotQEAgLTEyMyw3ICsxMjMsNyBAQCBUT19ET1VCTEVfRlVOKHNob3J0X3RvX29uZV9kb3VibGUsc2hvcnQpCi0gI2VuZGlmCi0gCi0gLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIHNob3J0IC0tLS0tLS0tLS0gKi8KLS1ERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsY2hhcikKLStERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSB1c2hvcnRfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X3VzaG9ydF90b191Y2hhcix1bnNpZ25lZCBzaG9ydCx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgdXNob3J0X3RvX3VjaGFyCU5VTEwKLUBAIC0xNjQsNyArMTY0LDcgQEAgVE9fRE9VQkxFX0ZVTih1c2hvcnRfdG9fb25lX2RvdWJsZSx1bnNpZwotICNlbmRpZgotIAotIC8qIC0tLS0tLS0tLS0tLSBpbnQgLS0tLS0tLS0tLSAqLwotLURFRlVOXzEoY29weV9pbnRfdG9fY2hhcixpbnQsY2hhcikKLStERUZVTl8xKGNvcHlfaW50X3RvX2NoYXIsaW50LHNpZ25lZCBjaGFyKQotICNkZWZpbmUgaW50X3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV9pbnRfdG9fdWNoYXIsaW50LHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBpbnRfdG9fdWNoYXIJTlVMTAotQEAgLTIwNSw3ICsyMDUsNyBAQCBUT19ET1VCTEVfRlVOKGludF90b19vbmVfZG91YmxlLGludCkKLSAjZW5kaWYKLSAKLSAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgaW50IC0tLS0tLS0tLS0gKi8KLS1ERUZVTl8xKGNvcHlfdWludF90b19jaGFyLHVuc2lnbmVkIGludCxjaGFyKQotK0RFRlVOXzEoY29weV91aW50X3RvX2NoYXIsdW5zaWduZWQgaW50LHNpZ25lZCBjaGFyKQotICNkZWZpbmUgdWludF90b19jaGFyCU5VTEwKLSBERUZVTl8xKGNvcHlfdWludF90b191Y2hhcix1bnNpZ25lZCBpbnQsdW5zaWduZWQgY2hhcikKLSAjZGVmaW5lIHVpbnRfdG9fdWNoYXIJTlVMTAotQEAgLTI0Niw3ICsyNDYsNyBAQCBUT19ET1VCTEVfRlVOKHVpbnRfdG9fb25lX2RvdWJsZSx1bnNpZ25lCi0gI2VuZGlmCi0gCi0gLyogLS0tLS0tLS0tLS0tIGxvbmcgLS0tLS0tLS0tLSAqLwotLURFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxjaGFyKQotK0RFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxzaWduZWQgY2hhcikKLSAjZGVmaW5lIGxvbmdfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X2xvbmdfdG9fdWNoYXIsbG9uZyx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgbG9uZ190b191Y2hhcglOVUxMCi1AQCAtMjg3LDcgKzI4Nyw3IEBAIFRPX0RPVUJMRV9GVU4obG9uZ190b19vbmVfZG91YmxlLGxvbmcpCi0gI2VuZGlmCi0gCi0gLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGxvbmcgLS0tLS0tLS0tLSAqLwotLURFRlVOXzEoY29weV91bG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcsY2hhcikKLStERUZVTl8xKGNvcHlfdWxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nLHNpZ25lZCBjaGFyKQotICNkZWZpbmUgdWxvbmdfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X3Vsb25nX3RvX3VjaGFyLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhcikKLSAjZGVmaW5lIHVsb25nX3RvX3VjaGFyCU5VTEwKLUBAIC0zMjksNyArMzI5LDcgQEAgVE9fRE9VQkxFX0ZVTih1bG9uZ190b19vbmVfZG91YmxlLHVuc2lnbgotIAotIC8qIC0tLS0tLS0tLS0tLSBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLwotICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQotLURFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxjaGFyKQotK0RFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxzaWduZWQgY2hhcikKLSAjZGVmaW5lIGxsb25nX3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV9sbG9uZ190b191Y2hhcixsb25nIGxvbmcsdW5zaWduZWQgY2hhcikKLSAjZGVmaW5lIGxsb25nX3RvX3VjaGFyCU5VTEwKLUBAIC0zNzIsNyArMzcyLDcgQEAgVE9fRE9VQkxFX0ZVTihsbG9uZ190b19vbmVfZG91YmxlLGxvbmcgbAotIAotIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLwotICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQotLURFRlVOXzEoY29weV91bGxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY2hhcikKLStERUZVTl8xKGNvcHlfdWxsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyBsb25nLHNpZ25lZCBjaGFyKQotICNkZWZpbmUgdWxsb25nX3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV91bGxvbmdfdG9fdWNoYXIsdW5zaWduZWQgbG9uZyBsb25nLHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSB1bGxvbmdfdG9fdWNoYXIJTlVMTAotQEAgLTQxNSw3ICs0MTUsNyBAQCBUT19ET1VCTEVfRlVOKHVsbG9uZ190b19vbmVfZG91YmxlLHVuc2lnCi0gCi0gLyogLS0tLS0tLS0tLS0tIGZsb2F0IC0tLS0tLS0tLS0gKi8KLSAjaWYgU0xBTkdfSEFTX0ZMT0FUCi0tREVGVU5fMShjb3B5X2Zsb2F0X3RvX2NoYXIsZmxvYXQsY2hhcikKLStERUZVTl8xKGNvcHlfZmxvYXRfdG9fY2hhcixmbG9hdCxzaWduZWQgY2hhcikKLSAjZGVmaW5lIGZsb2F0X3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV9mbG9hdF90b191Y2hhcixmbG9hdCx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgZmxvYXRfdG9fdWNoYXIJTlVMTAotQEAgLTQ1OCw3ICs0NTgsNyBAQCBUT19ET1VCTEVfRlVOKGZsb2F0X3RvX29uZV9kb3VibGUsZmxvYXQpCi0gCi0gLyogLS0tLS0tLS0tLS0tIGRvdWJsZSAtLS0tLS0tLS0tICovCi0gI2lmIFNMQU5HX0hBU19GTE9BVAotLURFRlVOXzEoY29weV9kb3VibGVfdG9fY2hhcixkb3VibGUsY2hhcikKLStERUZVTl8xKGNvcHlfZG91YmxlX3RvX2NoYXIsZG91YmxlLHNpZ25lZCBjaGFyKQotICNkZWZpbmUgZG91YmxlX3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV9kb3VibGVfdG9fdWNoYXIsZG91YmxlLHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBkb3VibGVfdG9fdWNoYXIJTlVMTAotQEAgLTUwMSw3ICs1MDEsNyBAQCBUT19ET1VCTEVfRlVOKGRvdWJsZV90b19vbmVfZG91YmxlLGRvdWJsCi0gCi0gLyogLS0tLS0tLS0tLS0tIGxvbmcgZG91YmxlIC0tLS0tLS0tLS0gKi8KLSAjaWYgZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKQotLURFRlVOXzEoY29weV9sZG91YmxlX3RvX2NoYXIsbG9uZyBkb3VibGUsY2hhcikKLStERUZVTl8xKGNvcHlfbGRvdWJsZV90b19jaGFyLGxvbmcgZG91YmxlLHNpZ25lZCBjaGFyKQotICNkZWZpbmUgbGRvdWJsZV90b19jaGFyCU5VTEwKLSBERUZVTl8xKGNvcHlfbGRvdWJsZV90b191Y2hhcixsb25nIGRvdWJsZSx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgbGRvdWJsZV90b191Y2hhcglOVUxMCi1AQCAtNTQ1LDcgKzU0NSw3IEBAIFRPX0RPVUJMRV9GVU4obGRvdWJsZV90b19vbmVfZG91YmxlLGxvbmcKLSAjaWYgU0xBTkdfSEFTX0ZMT0FUCi0gc3RhdGljIFRvX0RvdWJsZV9GdW5fVGFibGVfVHlwZSBUb19Eb3VibGVfRnVuX1RhYmxlIFtNQVhfQVJJVEhNRVRJQ19UWVBFU10gPQotIHsKLS0gICB7c2l6ZW9mKGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAotKyAgIHtzaXplb2Yoc2lnbmVkIGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAotICAgIHtzaXplb2YodW5zaWduZWQgY2hhciksIHVjaGFyX3RvX29uZV9kb3VibGV9LAotICAgIHtzaXplb2Yoc2hvcnQpLCBzaG9ydF90b19vbmVfZG91YmxlfSwKLSAgICB7c2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgdXNob3J0X3RvX29uZV9kb3VibGV9LAotQEAgLTU4Myw3ICs1ODMsNyBAQCBzdGF0aWMgVG9fRG91YmxlX0Z1bl9UYWJsZV9UeXBlIFRvX0RvdWJsCi0gCi0gc3RhdGljIEJpbmFyeV9NYXRyaXhfVHlwZSBCaW5hcnlfTWF0cml4IFtNQVhfQVJJVEhNRVRJQ19UWVBFU11bTUFYX0FSSVRITUVUSUNfVFlQRVNdID0KLSB7Ci0tICAgLyogY2hhciAqLwotKyAgIC8qIHNpZ25lZCBjaGFyICovCi0gICAgewotICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b19jaGFyLCBjaGFyX3RvX2NoYXJ9LAotICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b191Y2hhciwgY2hhcl90b191Y2hhcn0sCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2ZpeC1jaGVjay1wY3JlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaAppbmRleCAwYzE1NTNhLi5hMGVjMGZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2ZpeC1jaGVjay1wY3JlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2gKQEAgLTExLDE0ICsxMSwxMyBAQAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCiBTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CiAtLS0KLSBjb25maWd1cmUgfCAgIDYwICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKyBjb25maWd1cmUgfCAgIDcyICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKLWluZGV4IGYxNTg2YzMuLmQyMjgxNGYgMTAwNzU1CiAtLS0gYS9jb25maWd1cmUKICsrKyBiL2NvbmZpZ3VyZQotQEAgLTY5OTEsNiArNjk5MSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CitAQCAtNzE5MSw2ICs3MTkxLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwY3JlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KICAJIC91c3IvaW5jbHVkZS9wY3JlLC91c3IvbGliIFwKICAJIC91c3IvcGNyZS9pbmNsdWRlLC91c3IvcGNyZS9saWIgXAogIAkgL3Vzci9pbmNsdWRlLC91c3IvbGliIFwKQEAgLTI2LDcgKzI1LDcgQEAKICAJIC9vcHQvaW5jbHVkZS9wY3JlLC9vcHQvbGliIFwKICAJIC9vcHQvcGNyZS9pbmNsdWRlLC9vcHQvcGNyZS9saWIgXAogIAkgL29wdC9pbmNsdWRlLC9vcHQvbGliIgotQEAgLTcwMjEsMTQgKzcwMjIsMTQgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwY3JlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KK0BAIC03MjIxLDE0ICs3MjIyLDE0IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CiAgICAgICAgICB4aW5jZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDF9J2AKICAJeGxpYmRpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQyfSdgCiAgCWZvdW5kPTAKQEAgLTQ1LDcgKzQ0LDcgQEAKICAJICAgICAgamRfd2l0aF9wY3JlX2xpYnJhcnk9InllcyIKICAJICAgICAgZm91bmQ9MQogIAkgICAgICBicmVhawotQEAgLTcwNTQsNTYgKzcwNTUsNyBAQCAkYXNfZWNobyAieWVzOiAkamRfcGNyZV9saWJyYXJ5X2RpciBhbmQgJGpkX3BjcmVfaW5jbHVkZV9kaXIiID4mNjsgfQorQEAgLTcyNTUsNjggKzcyNTUsNyBAQCAkYXNfZWNobyAieWVzOiAkamRfcGNyZV9saWJyYXJ5X2RpciBhbmQgJGpkX3BjcmVfaW5jbHVkZV9kaXIiID4mNjsgfQogICAgICB0aGVuCiAgICAgICAgUENSRV9MSUI9IiIKICAgICAgZWxzZQpAQCAtNzQsNyArNzMsNyBAQAogLSAgICAgIGZpCiAtICAgIGZpCiAtICA7OwotLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgKm9zZip8Km9wZW5ic2QqfCpmcmVlYnNkKikKIC0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcwogLSAgICB0aGVuCiAtICAgICAgUlBBVEg9Ii1XbCwtcnBhdGgsIgpAQCAtOTUsNyArOTQsMTkgQEAKIC0gICAgICBSUEFUSD0iJFJQQVRIJGpkX3BjcmVfbGlicmFyeV9kaXIiCiAtICAgIGZpCiAtICBlbHNlCi0tICAgIFJQQVRIPSIkUlBBVEg6JGpkX3BjcmVfbGlicmFyeV9kaXIiCistICAgIF9hbHJlYWR5X3RoZXJlPTAKKy0gICAgZm9yIFggaW4gYGVjaG8gJFJQQVRIIHwgc2VkICdzLzovIC9nJ2AKKy0gICAgZG8KKy0gICAgICBpZiB0ZXN0ICIkWCIgPSAiJGpkX3BjcmVfbGlicmFyeV9kaXIiCistICAgICAgdGhlbgorLSAgICAgICAgX2FscmVhZHlfdGhlcmU9MQorLQlicmVhaworLSAgICAgIGZpCistICAgIGRvbmUKKy0gICAgaWYgdGVzdCAkX2FscmVhZHlfdGhlcmUgPSAwCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iJFJQQVRIOiRqZF9wY3JlX2xpYnJhcnlfZGlyIgorLSAgICBmaQogLSAgZmkKIC1maQogLQpAQCAtMTAzLDYgKzExNCwzIEBACiAgICAgIGZpCiAgCiAgICAgIFBDUkVfSU5DPS1JJGpkX3BjcmVfaW5jbHVkZV9kaXIKLS0tIAotMS43LjQuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9ycGF0aGZpeC5wYXRjaAppbmRleCA1MGNhYzkyLi5mODJhNTMxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKQEAgLTEwLDcgKzEwLDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSBzbGFuZy0yLjIuNC5vcmlnL2NvbmZpZ3VyZQkyMDEyLTAzLTE0IDIzOjQwOjAxLjI4MzU2MDY3OSArMDAwMAogKysrIHNsYW5nLTIuMi40L2NvbmZpZ3VyZQkyMDEyLTAzLTE0IDIzOjQxOjE4LjAyMzU1ODkwMCArMDAwMAotQEAgLTYwODEsNTYgKzYwODEsNyBAQAorQEAgLTYyNDYsNjggKzYyNDYsNyBAQCBlc2FjCiAgRUxGX0NGTEFHUz0iJEVMRl9DRkxBR1MgJElFRUVfQ0ZMQUdTIgogIENGTEFHUz0iJENGTEFHUyAkSUVFRV9DRkxBR1MiCiAgCkBAIC0zOSw3ICszOSw3IEBACiAtICAgICAgZmkKIC0gICAgZmkKIC0gIDs7Ci0tICAqb3NmKnwqb3BlbmJzZCopCistICAqb3NmKnwqb3BlbmJzZCp8KmZyZWVic2QqKQogLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCiAtICAgIHRoZW4KIC0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCkBAIC02MCw3ICs2MCwxOSBAQAogLSAgICAgIFJQQVRIPSIkUlBBVEgkbGliZGlyIgogLSAgICBmaQogLSAgZWxzZQotLSAgICBSUEFUSD0iJFJQQVRIOiRsaWJkaXIiCistICAgIF9hbHJlYWR5X3RoZXJlPTAKKy0gICAgZm9yIFggaW4gYGVjaG8gJFJQQVRIIHwgc2VkICdzLzovIC9nJ2AKKy0gICAgZG8KKy0gICAgICBpZiB0ZXN0ICIkWCIgPSAiJGxpYmRpciIKKy0gICAgICB0aGVuCistICAgICAgICBfYWxyZWFkeV90aGVyZT0xCistCWJyZWFrCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgICBpZiB0ZXN0ICRfYWxyZWFkeV90aGVyZSA9IDAKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEg6JGxpYmRpciIKKy0gICAgZmkKIC0gIGZpCiAtZmkKIC0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoCmluZGV4IDk1OGZlOTguLjg1MDU1MWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaApAQCAtMTksMTQgKzE5LDE0IEBACiAKIFNpZ25lZC1vZmYtYnk6IFpoZW5nIEp1bmxpbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgogLS0tCi0gY29uZmlndXJlIHwgNjAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisgY29uZmlndXJlIHwgICA3MiArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDY2IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCi1pbmRleCA3YTk2MjU2Li45MTYzMmYzIDEwMDc1NQoraW5kZXggZmEzOTVmZi4uN2ZhNzY5YyAxMDA3NTUKIC0tLSBhL2NvbmZpZ3VyZQogKysrIGIvY29uZmlndXJlCi1AQCAtNzkwOSw2ICs3OTA5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CitAQCAtODI1OSw2ICs4MjU5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CiAgCSAvdXNyL2luY2x1ZGUvaWNvbnYsL3Vzci9saWIgXAogIAkgL3Vzci9pY29udi9pbmNsdWRlLC91c3IvaWNvbnYvbGliIFwKICAJIC91c3IvaW5jbHVkZSwvdXNyL2xpYiBcCkBAIC0zNCw3ICszNCw3IEBACiAgCSAvb3B0L2luY2x1ZGUvaWNvbnYsL29wdC9saWIgXAogIAkgL29wdC9pY29udi9pbmNsdWRlLC9vcHQvaWNvbnYvbGliIFwKICAJIC9vcHQvaW5jbHVkZSwvb3B0L2xpYiIKLUBAIC03OTM5LDE0ICs3OTQwLDE0IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgaWNvbnYgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorQEAgLTgyODksMTQgKzgyOTAsMTQgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CiAgICAgICAgICB4aW5jZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDF9J2AKICAJeGxpYmRpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQyfSdgCiAgCWZvdW5kPTAKQEAgLTUzLDcgKzUzLDcgQEAKICAJICAgICAgamRfd2l0aF9pY29udl9saWJyYXJ5PSJ5ZXMiCiAgCSAgICAgIGZvdW5kPTEKICAJICAgICAgYnJlYWsKLUBAIC03OTcyLDU2ICs3OTczLDcgQEAgJGFzX2VjaG8gInllczogJGpkX2ljb252X2xpYnJhcnlfZGlyIGFuZCAkamRfaWNvbnZfaW5jbHVkZV9kaXIiID4mNjsgfQorQEAgLTgyMDEsNjggKzgyMDEsNyBAQCAkYXNfZWNobyAieWVzOiAkamRfaWNvbnZfbGlicmFyeV9kaXIgYW5kICRqZF9pY29udl9pbmNsdWRlX2RpciIgPiY2OyB9CiAgICAgIHRoZW4KICAgICAgICBJQ09OVl9MSUI9IiIKICAgICAgZWxzZQpAQCAtODIsNyArODIsNyBAQAogLSAgICAgIGZpCiAtICAgIGZpCiAtICA7OwotLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgKm9zZip8Km9wZW5ic2QqfCpmcmVlYnNkKikKIC0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcwogLSAgICB0aGVuCiAtICAgICAgUlBBVEg9Ii1XbCwtcnBhdGgsIgpAQCAtMTAzLDcgKzEwMywxOSBAQAogLSAgICAgIFJQQVRIPSIkUlBBVEgkamRfaWNvbnZfbGlicmFyeV9kaXIiCiAtICAgIGZpCiAtICBlbHNlCi0tICAgIFJQQVRIPSIkUlBBVEg6JGpkX2ljb252X2xpYnJhcnlfZGlyIgorLSAgICBfYWxyZWFkeV90aGVyZT0wCistICAgIGZvciBYIGluIGBlY2hvICRSUEFUSCB8IHNlZCAncy86LyAvZydgCistICAgIGRvCistICAgICAgaWYgdGVzdCAiJFgiID0gIiRqZF9pY29udl9saWJyYXJ5X2RpciIKKy0gICAgICB0aGVuCistICAgICAgICBfYWxyZWFkeV90aGVyZT0xCistCWJyZWFrCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgICBpZiB0ZXN0ICRfYWxyZWFkeV90aGVyZSA9IDAKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEg6JGpkX2ljb252X2xpYnJhcnlfZGlyIgorLSAgICBmaQogLSAgZmkKIC1maQogLQpAQCAtMTExLDYgKzEyMywzIEBACiAgICAgIGZpCiAgCiAgICAgIElDT05WX0lOQz0tSSRqZF9pY29udl9pbmNsdWRlX2RpcgotLS0gCi0xLjguMy40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMDAwMWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUZyb20gM2EwNWQxYTkyMDE0MGU5ZjJjNzI3OTFjMTJmNjY0MjEzZmViNDZkZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1hbmZyZWQgSGFua2UgPE1hbmZyZWQuSGFua2VAdG5ndGVjaC5jb20+Ci1EYXRlOiBUaHUsIDIwIEp1biAyMDEzIDEwOjI0OjEyICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIHNwcmludGYgYnVnIChjb25jZXJuaW5nICVjIGZvciA4LWJpdCBjaGFyYWN0ZXIgaW4gbm9uLVVURjgKLSBtb2RlKSBmaXhlZAotCi1jaGFyICpzdHIgcG9pbnRzIHRvIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltdLCB3aGljaCBoYWQgdG9vIHNtYWxsIHNjb3BlCi0KLXNyYy90ZXN0L3N0cm9wcy5zbCBmYWlsZWQgaW4gdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudDoKLSAtIGNvbXBpbGVyOiAgZ2NjIChEZWJpYW4gNC43LjItNSkgNC43LjIKLSAtIENGTEFHUzogICAgLWcgLU8yCi0gLSBsaWJjOiAgICAgIEdOVSBDIExpYnJhcnkgKERlYmlhbiBFR0xJQkMgMi4xMy0zOCkgc3RhYmxlIHJlbGVhc2UgdmVyc2lvbiAyLjEzCi0gLSBrZXJuZWw6ICAgIDMuMi4wLTQtNjg2LXBhZSAjMSBTTVAgRGViaWFuIDMuMi4zOS0yIGk2ODYgR05VL0xpbnV4Ci0tLS0KLSBzcmMvc2xzdHJvcHMuYyB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9zbHN0cm9wcy5jIGIvc3JjL3Nsc3Ryb3BzLmMKLWluZGV4IGNlNmFjYjAuLmNiYmJiMDEgMTAwNjQ0Ci0tLS0gYS9zcmMvc2xzdHJvcHMuYwotKysrIGIvc3JjL3Nsc3Ryb3BzLmMKLUBAIC0xODg0LDYgKzE4ODQsNyBAQCBzdGF0aWMgY2hhciAqU0xkb19zcHJpbnRmIChjaGFyICpmbXQpIC8qe3t7Ki8KLSAjZW5kaWYKLSAgICB1bnNpZ25lZCBjaGFyIHVjaDsKLSAgICBpbnQgdXNlX2xvbmcgPSAwLCB1c2VfYWx0X2Zvcm1hdCA9IDA7Ci0rICAgU0x1Y2hhcl9UeXBlIHV0ZjhfYnVmW1NMVVRGOF9NQVhfTUJMRU4rMV07Ci0gCi0gICAgd2hpbGUgKDEpCi0gICAgICB7Ci1AQCAtMjA3MSw3ICsyMDcyLDYgQEAgc3RhdGljIGNoYXIgKlNMZG9fc3ByaW50ZiAoY2hhciAqZm10KSAvKnt7eyovCi0gI2VuZGlmCi0gCSAgICAgICB7Ci0gCQkgIFNMd2NoYXJfVHlwZSB3YzsKLS0JCSAgU0x1Y2hhcl9UeXBlIHV0ZjhfYnVmW1NMVVRGOF9NQVhfTUJMRU4rMV07Ci0gCi0gCQkgIGlmICgtMSA9PSBTTGFuZ19wb3Bfd2NoYXIgKCZ3YykpCi0gCQkgICAgcmV0dXJuIG91dDsKLS0tIAotMS43LjkuNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZ18yLjIuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM3ZTlmMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotU1VNTUFSWSA9ICJUaGUgc2hhcmVkIGxpYnJhcnkgZm9yIHRoZSBTLUxhbmcgZXh0ZW5zaW9uIGxhbmd1YWdlIgotCi1ERVNDUklQVElPTiA9ICJTLUxhbmcgaXMgYW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgYW5kIGEgcHJvZ3JhbW1pbmcgbGlicmFyeS4gIFRoZSBcCi1TLUxhbmcgbGFuZ3VhZ2Ugd2FzIGRlc2lnbmVkIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbnRvIFwKLWEgcHJvZ3JhbSB0byBwcm92aWRlIHRoZSBwcm9ncmFtIHdpdGggYSBwb3dlcmZ1bCBleHRlbnNpb24gbGFuZ3VhZ2UuIFwKLVRoZSBTLUxhbmcgbGlicmFyeSwgcHJvdmlkZWQgaW4gdGhpcyBwYWNrYWdlLCBwcm92aWRlcyB0aGUgUy1MYW5nIFwKLWV4dGVuc2lvbiBsYW5ndWFnZS4gIFMtTGFuZydzIHN5bnRheCByZXNlbWJsZXMgQywgd2hpY2ggbWFrZXMgaXQgZWFzeSBcCi10byByZWNvZGUgUy1MYW5nIHByb2NlZHVyZXMgaW4gQyBpZiB5b3UgbmVlZCB0by4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvc2xhbmcvIgotU0VDVElPTiA9ICJsaWJzIgotREVQRU5EUyA9ICJwY3JlIG5jdXJzZXMiCi1QUiA9ICJyMTIiCi0KLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNTJhMThhNDcyZDRmN2U0NTQ3OWIwNjU2MzcxN2MwMiIKLQotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvcmVsZWFzZXMvc2xhbmcvb2xkL3NsYW5nLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vcnBhdGhmaXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LWNoZWNrLXBjcmUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaCBcCi0gICAgICAgICAgIgotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvcmVsZWFzZXMvc2xhbmcvIgotCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKLQotQ0xFQU5CUk9LRU4gPSAiMSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjdmY2ZkNDQ3ZTM3OGYwN2RkMGMwYmFlNjcxZmU2NDg3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhODI1N2E5YTJhNTUwOTlhZjg1OGIxMzMzOGRjOGYzYTA2ZGQyMDY5ZjQ2ZjBkZjJjOWMzYmI4NGEwMWQ1ZGIiCi0KLUVYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC16IC0td2l0aG91dC1wbmcgLS13aXRob3V0LW9uaWcgLS14LWluY2x1ZGVzPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2luY2x1ZGUvWDExIC0teC1saWJyYXJpZXM9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvbGliIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICAjIHNsYW5nIGtlZXBzIGNvbmZpZ3VyZS5hYyBhbmQgcmVzdCBvZiBhdXRvY29uZiBmaWxlcyBpbiBhdXRvY29uZi8gZGlyZWN0b3J5Ci0gICAgIyB3ZSBoYXZlIHRvIGdvIHRoZXJlIHRvIGJlIGFibGUgdG8gcnVuIGdudS1jb25maWdpemUgY2F1c2UgaXQgZXhwZWN0cyBjb25maWd1cmUue2luLGFjfQotICAgICMgdG8gYmUgcHJlc2VudC4gUmVzdWx0aW5nIGZpbGVzIGxhbmQgaW4gYXV0b2NvbmYvYXV0b2NvbmYvIHNvIHdlIG5lZWQgdG8gbW92ZSB0aGVtLgotICAgIGNkICR7U30vYXV0b2NvbmYgJiYgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICYmIG12IGF1dG9jb25mL2NvbmZpZy4qIC4KLSAgICBjZCAke0J9Ci19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSAtZSAnSU5TVF9MSUJfRElSPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2xpYicKLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vdjIvbW9kdWxlcy8gJHtkYXRhZGlyfS9zbHNoLyIKLQotUEFSQUxMRUxfTUFLRSA9ICIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZ18yLjMuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZmJiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4zLjAuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJUaGUgc2hhcmVkIGxpYnJhcnkgZm9yIHRoZSBTLUxhbmcgZXh0ZW5zaW9uIGxhbmd1YWdlIgorCitERVNDUklQVElPTiA9ICJTLUxhbmcgaXMgYW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgYW5kIGEgcHJvZ3JhbW1pbmcgbGlicmFyeS4gIFRoZSBcCitTLUxhbmcgbGFuZ3VhZ2Ugd2FzIGRlc2lnbmVkIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbnRvIFwKK2EgcHJvZ3JhbSB0byBwcm92aWRlIHRoZSBwcm9ncmFtIHdpdGggYSBwb3dlcmZ1bCBleHRlbnNpb24gbGFuZ3VhZ2UuIFwKK1RoZSBTLUxhbmcgbGlicmFyeSwgcHJvdmlkZWQgaW4gdGhpcyBwYWNrYWdlLCBwcm92aWRlcyB0aGUgUy1MYW5nIFwKK2V4dGVuc2lvbiBsYW5ndWFnZS4gIFMtTGFuZydzIHN5bnRheCByZXNlbWJsZXMgQywgd2hpY2ggbWFrZXMgaXQgZWFzeSBcCit0byByZWNvZGUgUy1MYW5nIHByb2NlZHVyZXMgaW4gQyBpZiB5b3UgbmVlZCB0by4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvc2xhbmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJwY3JlIG5jdXJzZXMiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNTJhMThhNDcyZDRmN2U0NTQ3OWIwNjU2MzcxN2MwMiIKKworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcnBhdGhmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNoZWNrLXBjcmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoIFwKKyAgICAgICAgICAiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9yZWxlYXNlcy9zbGFuZy8iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDTEVBTkJST0tFTiA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2JjYzc5MDQ2MGQ1MmRiMTMxNmMyMDM5NWI3YWMyZjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjk1MjI0MDYwZjQ1ZTBkODIxMmE1MDM5YjMzOWFmYTVmMWE5NGExYmIwMjk4ZTc5NjEwNGU1YjEyZTkyNjEyOSIKKworRVhUUkFfT0VDT05GICs9ICIgLS13aXRob3V0LXogLS13aXRob3V0LXBuZyAtLXdpdGhvdXQtb25pZyAtLXgtaW5jbHVkZXM9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvaW5jbHVkZS9YMTEgLS14LWxpYnJhcmllcz0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9saWIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgc2xhbmcga2VlcHMgY29uZmlndXJlLmFjIGFuZCByZXN0IG9mIGF1dG9jb25mIGZpbGVzIGluIGF1dG9jb25mLyBkaXJlY3RvcnkKKyAgICAjIHdlIGhhdmUgdG8gZ28gdGhlcmUgdG8gYmUgYWJsZSB0byBydW4gZ251LWNvbmZpZ2l6ZSBjYXVzZSBpdCBleHBlY3RzIGNvbmZpZ3VyZS57aW4sYWN9CisgICAgIyB0byBiZSBwcmVzZW50LiBSZXN1bHRpbmcgZmlsZXMgbGFuZCBpbiBhdXRvY29uZi9hdXRvY29uZi8gc28gd2UgbmVlZCB0byBtb3ZlIHRoZW0uCisgICAgY2QgJHtTfS9hdXRvY29uZiAmJiBnbnUtY29uZmlnaXplIC0tZm9yY2UgJiYgbXYgYXV0b2NvbmYvY29uZmlnLiogLgorICAgIGNkICR7Qn0KK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IC1lICdJTlNUX0xJQl9ESVI9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvbGliJworfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS92Mi9tb2R1bGVzLyAke2RhdGFkaXJ9L3Nsc2gvIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LXNlY3VyaXR5LWZvcm1hdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDFlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LXNlY3VyaXR5LWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitzdGF0OiBGaXhpbmcgc2VjdXJpdHkgZm9ybWF0dGluZyBpc3N1ZXMKKworRml4IHNlY3VyaXR5IGZvcm1hdHRpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gcHJpbnRmIHdpdGhvdXQgTlVMTCBhcmd1bWVudCAKKworc3RhdC5jOiBJbiBmdW5jdGlvbiAncHJpbnRfaHVtYW5fYWNjZXNzJzoKK3N0YXQuYzoyOTI6MTM6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorICAgICBwcmludGYgKGFjY2Vzcyk7CisgICAgICAgICAgICAgXgorc3RhdC5jOiBJbiBmdW5jdGlvbiAncHJpbnRfaHVtYW5fdGltZSc6CitzdGF0LmM6Mjk5OjU3OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KKyAgIGlmIChzdHJmdGltZShzdHIsIDQwLCAiJWMiLCBsb2NhbHRpbWUodCkpID4gMCkgcHJpbnRmKHN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitzdGF0LmM6IEluIGZ1bmN0aW9uICdwcmludF9pdCc6CitzdGF0LmM6NjEzOjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorICAgICAgcHJpbnRmKGIpOworICAgICAgXgorc3RhdC5jOjY0Mjo2OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KKyAgICAgIHByaW50ZihiKTsKKyAgICAgIF4KKworW1lPQ1RPICM5NTUwXQorW2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU1MF0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zdGF0LmMgYi9zdGF0LmMKK2luZGV4IDFlZDA3YTkuLjJiZTZmNjIgMTAwNjQ0CistLS0gYS9zdGF0LmMKKysrKyBiL3N0YXQuYworQEAgLTI4OSwxNSArMjg5LDE1IEBAIHZvaWQgcHJpbnRfaHVtYW5fYWNjZXNzKHN0cnVjdCBzdGF0ICpzdGF0YnVmKQorICAgICBkZWZhdWx0OgorICAgICAgIGFjY2Vzc1swXSA9ICc/JzsKKyAgICAgfQorLSAgICBwcmludGYgKGFjY2Vzcyk7CisrICAgIGZwdXRzKGFjY2VzcyxzdGRvdXQpOworIH0KKyAKKyB2b2lkIHByaW50X2h1bWFuX3RpbWUodGltZV90ICp0KQorIHsKKyAgIGNoYXIgc3RyWzQwXTsKKyAgIAorLSAgaWYgKHN0cmZ0aW1lKHN0ciwgNDAsICIlYyIsIGxvY2FsdGltZSh0KSkgPiAwKSBwcmludGYoc3RyKTsKKy0gIGVsc2UgcHJpbnRmKCJDYW5ub3QgY2FsY3VsYXRlIGh1bWFuIHJlYWRhYmxlIHRpbWUsIHNvcnJ5Iik7CisrICBpZiAoc3RyZnRpbWUoc3RyLCA0MCwgIiVjIiwgbG9jYWx0aW1lKHQpKSA+IDApIGZwdXRzKHN0cixzdGRvdXQpOworKyAgZWxzZSBmcHV0cygiQ2Fubm90IGNhbGN1bGF0ZSBodW1hbiByZWFkYWJsZSB0aW1lLCBzb3JyeSIsc3Rkb3V0KTsKKyB9CisgCisgLyogcHJpbnQgc3RhdGZzIGluZm8gKi8KK0BAIC02MTAsNyArNjEwLDcgQEAgdm9pZCBwcmludF9pdChjaGFyICptYXN0ZXJmb3JtYXQsIGNoYXIgKmZpbGVuYW1lLAorIAl7CisgCSAgICBzdHJjcHkgKHBmb3JtYXQsICIlIik7CisgCSAgICAqbSsrID0gJ1wwJzsKKy0JICAgIHByaW50ZihiKTsKKysJICAgIGZwdXRzKGIsc3Rkb3V0KTsKKyAKKyAJICAgIC8qIGNvcHkgYWxsIGZvcm1hdCBzcGVjaWZpZXJzIHRvIG91ciBmb3JtYXQgc3RyaW5nICovCisgCSAgICB3aGlsZSAoaXNkaWdpdCgqbSkgfHwgc3RyY2hyKCIjMC0rLiBJIiwgKm0pKQorQEAgLTYzOSw3ICs2MzksNyBAQCB2b2lkIHByaW50X2l0KGNoYXIgKm1hc3RlcmZvcm1hdCwgY2hhciAqZmlsZW5hbWUsCisgCX0KKyAJZWxzZQorIAl7CistCSAgICBwcmludGYoYik7CisrCSAgICBmcHV0cyhiLHN0ZG91dCk7CisgCSAgICBiID0gTlVMTDsKKyAJfQorICAgICB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKaW5kZXggYTVlY2UwNy4uMDY5N2M3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYgpAQCAtNiw2ICs2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL0dQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5pYmlibGlvLm9yZy9wdWIvTGludXgvdXRpbHMvZmlsZS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXNlY3VyaXR5LWZvcm1hdC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtZXJyb3ItcmV0dXJuLnBhdGNoIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMzdlMjQ3ZThlNDAwYWQ5MjA1ZjFiMDUwMGI3MjhmZDMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjA0M2VjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLXJlcXVpcmUgc3Vkby5pbmMKLQotU1JDX1VSSSA9ICJodHRwOi8vZnRwLnN1ZG8ud3Mvc3Vkby9kaXN0L3N1ZG8tJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1QQU1fU1JDX1VSSSA9ICJmaWxlOi8vc3Vkby5wYW0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI3Y2Y2YjliNzZkMDQ3OGE1NzI0MzJiZWQ0ODFkZDdiNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0MzE2MzgxNzA4MzI0ZGE4YjZjYjE1MWY2NTVjMWExMTg1NTIwN2M3YzAyMjQ0ZDhmZmRlYTUxMDRkN2NjMzA4IgotCi1ERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKLVJERVBFTkRTXyR7UE59ICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtLXBsdWdpbi1saW1pdHMgcGFtLXBsdWdpbi1rZXlpbml0JywgJycsIGQpfSIKLQotRVhUUkFfT0VDT05GICs9ICIgXAotICAgICAgICAgICAgIGFjX2N2X3R5cGVfcnNpemVfdD1ubyBcCi0gICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS13aXRoLXBhbScsICctLXdpdGhvdXQtcGFtJywgZCl9IFwKLSAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnLS1lbmFibGUtdG1wZmlsZXMuZD0ke2xpYmRpcn0vdG1wZmlsZXMuZCcsICctLWRpc2FibGUtdG1wZmlsZXMuZCcsIGQpfSBcCi0gICAgICAgICAgICAgIgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCi0JCWluc3RhbGwgLUQgLW0gNjQ0ICR7V09SS0RJUn0vc3Vkby5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3N1ZG8KLQlmaQotCi0JY2htb2QgNDExMSAke0R9JHtiaW5kaXJ9L3N1ZG8KLQljaG1vZCAwNDQwICR7RH0ke3N5c2NvbmZkaXJ9L3N1ZG9lcnMKLQotCSMgRXhwbGljaXRseSByZW1vdmUgdGhlICR7bG9jYWxzdGF0ZWRpcn0vcnVuIGRpcmVjdG9yeSB0byBhdm9pZCBRQSBlcnJvcgotCXJtZGlyIC1wIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bi9zdWRvCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdG1wZmlsZXMuZCIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJleGVjZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTREVWfSAke2xpYmV4ZWNkaXJ9LyR7QlBOfS8qLmxhIFwKLSAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZXhlY2Rpcn0vKi5sYSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xN3AxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE3cDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0YWQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xN3AxLmJiCkBAIC0wLDAgKzEsMzYgQEAKK3JlcXVpcmUgc3Vkby5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLnN1ZG8ud3Mvc3Vkby9kaXN0L3N1ZG8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vc3Vkby5wYW0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MGE4NDBhNjg4Y2ViNmZhM2FiMjRmYzBhZGY0ZmEyMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNjkwZDcwN2ZiNTYxYjNlY2RmNmE2ZGU1NTYzYmMwYjc2OTM4OGVmZjIwMWM4NTFlZGJhY2U0MDhiYjE1NWNjIgorCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59ICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtLXBsdWdpbi1saW1pdHMgcGFtLXBsdWdpbi1rZXlpbml0JywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgICAgICAgICAgIGFjX2N2X3R5cGVfcnNpemVfdD1ubyBcCisgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS13aXRoLXBhbScsICctLXdpdGhvdXQtcGFtJywgZCl9IFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnLS1lbmFibGUtdG1wZmlsZXMuZD0ke2xpYmRpcn0vdG1wZmlsZXMuZCcsICctLWRpc2FibGUtdG1wZmlsZXMuZCcsIGQpfSBcCisgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gNjQ0ICR7V09SS0RJUn0vc3Vkby5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3N1ZG8KKwlmaQorCisJY2htb2QgNDExMSAke0R9JHtiaW5kaXJ9L3N1ZG8KKwljaG1vZCAwNDQwICR7RH0ke3N5c2NvbmZkaXJ9L3N1ZG9lcnMKKworCSMgRXhwbGljaXRseSByZW1vdmUgdGhlICR7bG9jYWxzdGF0ZWRpcn0vcnVuIGRpcmVjdG9yeSB0byBhdm9pZCBRQSBlcnJvcgorCXJtZGlyIC1wIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bi9zdWRvCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdG1wZmlsZXMuZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJleGVjZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTREVWfSAke2xpYmV4ZWNkaXJ9LyR7QlBOfS8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZXhlY2Rpcn0vKi5sYSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMKaW5kZXggMWUzNjNkYi4uNWMxNWZmZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMKQEAgLTU1LDcgKzU1LDcgQEAKIHBrZ19wcmVybV8ke1BOfSAoKSB7CiAJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgogCWlmIHRlc3QgIiQxIiA9ICJ1cGdyYWRlIiAtbyAiJDEiID0gInJlbW92ZSI7IHRoZW4KLQkJL2V0Yy9pbml0LmQvc3lzbG9nIHN0b3AKKwkJL2V0Yy9pbml0LmQvc3lzbG9nIHN0b3AgfHwgOgogCWZpCiAJZmkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYwppbmRleCBjMzUzMjkxLi5iYjU2MjlkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jCkBAIC0xNCw2ICsxNCw3IEBACiAKIERFUEVORFMgKz0gImJhc2UtcGFzc3dkIgogCisjIGF1dG90b29scy1icm9rZW5zZXAgYXMgdGhpcyBwYWNrYWdlIGRvZXNuJ3QgdXNlIGF1dG9tYWtlCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCBzeXN0ZW1kCiAKIEVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNlbnNvcnMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4yLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4yLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhOGViOTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuMi4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1yZXF1aXJlIHN5c3N0YXQuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1JbmNsdWRlLW5lZWRlZC1oZWFkZXJzLWV4cGxpY2l0bHkucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlOGI2MTU3NzVhZDk4NzgwZTNmMDY3NWI5MWVkZGIxOSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODA2YjlhNjYyNTY4Nzk2ZDNmYjkzZWNkMDFlY2VhMTBkODE1ZTY2ODMzN2E2NDY0OTQ5NTNiZmY0YmM0MTU1IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuNC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjgzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS40LjAuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHN5c3N0YXQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWEyM2E3NGIzZjRjYWY5NjE2MjMwNzg5ZDk0MjE3YWNiIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1JbmNsdWRlLW5lZWRlZC1oZWFkZXJzLWV4cGxpY2l0bHkucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZTdiOGMwYjEzOWExMWE3YTM0MThkYzA2NThjYTFiZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiODUxOGNhODhhY2ZjYmM0NzRhNDA2MDIyZWU5YzBjMzIxMGNjZWY0ZjBlYzgwZTViM2U4YzQxZGRhOGMxNmYyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoCmluZGV4IDBiOGJlMzkuLmYyNGRlOTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci9yZW1vdmUtZ2V0cy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTMsMjAgKzMsMjcgQEAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotSW5kZXg6IHRhci0xLjI3L2dudS9zdGRpby5pbi5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGFyLTEuMjcub3JpZy9nbnUvc3RkaW8uaW4uaAkyMDEzLTA2LTI5IDA4OjU0OjI2LjAwMDAwMDAwMCArMDMwMAotKysrIHRhci0xLjI3L2dudS9zdGRpby5pbi5oCTIwMTMtMTAtMTYgMTU6MjI6NDYuOTc3MjA0NzM3ICswMzAwCi1AQCAtNzEwLDEwICs3MTAsMTIgQEAKKy0tLQorIGdudS9zdGRpby5pbi5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dudS9zdGRpby5pbi5oIGIvZ251L3N0ZGlvLmluLmgKK2luZGV4IGVjNDM4NzQuLjUwMmUzYWUgMTAwNjQ0CistLS0gYS9nbnUvc3RkaW8uaW4uaAorKysrIGIvZ251L3N0ZGlvLmluLmgKK0BAIC03MjIsMTAgKzcyMiwxMiBAQCBfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHVucG9ydGFibGUgLSAiCiAgLyogSXQgaXMgdmVyeSByYXJlIHRoYXQgdGhlIGRldmVsb3BlciBldmVyIGhhcyBmdWxsIGNvbnRyb2wgb2Ygc3RkaW4sCiAgICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZzsgYmVzaWRlcywgQzExCiAgICAgcmVtb3ZlZCBpdC4gICovCiArI2lmIGRlZmluZWQgZ2V0cwogICN1bmRlZiBnZXRzCi0gI2lmIEhBVkVfUkFXX0RFQ0xfR0VUUworICNpZiBIQVZFX1JBV19ERUNMX0dFVFMgJiYgIWRlZmluZWQgX19jcGx1c3BsdXMKICBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CiAgI2VuZGlmCiArI2VuZGlmCiAgCi0gCiAgI2lmIEBHTlVMSUJfT0JTVEFDS19QUklOVEZAIHx8IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACisgc3RydWN0IG9ic3RhY2s7CistLSAKKzIuOC4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOGU2MjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1yZXF1aXJlIHRhci5pbmMKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbYWNsXSA9ICItLXdpdGgtcG9zaXgtYWNscywgLS13aXRob3V0LXBvc2l4LWFjbHMsIGFjbCwiCi0KLUxJQ0VOU0UgPSAiR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLQotU1JDX1VSSSArPSAiZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9tdXNsX2RpcmVudC5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI4ZjMyYjJiYzFlZDdkZGY0Y2Y0ZTRhMzk3MTEzNDFiMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2MGU0YmZlMDYwMmZlZjM0Y2Q5MDhkOTFjZjYzOGUxN2VlYjA5Mzk0ZDdiOThjMjQ4NzIxN2RjNGQzMTQ3NTYyIgotCi1kb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2woKSB7Ci0Jcm0gLWYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCi0Jcm1kaXIgJHtEfSR7bGliZGlyfQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmNlNTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjkuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB0YXIuaW5jCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS13aXRoLXBvc2l4LWFjbHMsIC0td2l0aG91dC1wb3NpeC1hY2xzLCBhY2wsIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbXVzbF9kaXJlbnQucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiOTU1Y2Q1MzM5NTVhY2IxODA0YjgzZmQ3MDIxOGRhNTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjM2YjExMTkwYzBhM2E2ODg1YmRiOGQ2MTQyNGYyYjM2YTU4NzI4NjlhYTNmN2Y2OTVkZWE0YjQ4NDNhZTJmMiIKKworZG9faW5zdGFsbF9hcHBlbmRfbGliYy1tdXNsKCkgeworCXJtIC1mICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworCXJtZGlyICR7RH0ke2xpYmRpcn0KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNmMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTZjLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmI5MmVhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNmMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIG5vdGUgdGhhdCB3ZSBhbGxvdyBmb3IgdXMgdG8gdXNlIGRhdGEgbGF0ZXIgdGhhbiBvdXIgY29kZSB2ZXJzaW9uCi0jCi1TVU1NQVJZID0gInR6Y29kZSwgdGltZXpvbmUgem9uZWluZm8gdXRpbHMgLS0gemljLCB6ZHVtcCwgdHpzZWxlY3QiCi1MSUNFTlNFID0gIlBEICYgQlNEICYgQlNELTMtQ2xhdXNlIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmFlMmJlY2ZjYjlhNjg1MDQxYzZmMTY2YjQ0YzJjMiIKLQotU1JDX1VSSSA9IiBodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy90emNvZGUke1BWfS50YXIuZ3o7bmFtZT10emNvZGUgXAotICAgICAgICAgICBodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy90emRhdGEke1BWfS50YXIuZ3o7bmFtZT10emRhdGEiCi0KLVNSQ19VUklbdHpjb2RlLm1kNXN1bV0gPSAiZmZiODJhYjBiNTg4MTM4NzU5OTAyYjQ2MjdhNmE4MGQiCi1TUkNfVVJJW3R6Y29kZS5zaGEyNTZzdW1dID0gIjM0NGIxYmQ0ODY5MzViY2EyYjdiYWE0N2RiM2I5OWIzMjIxMWM0NWYzMWVjMGQxZWFkOGJhY2QxMDNjNWE0MTYiCi1TUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gIjAzMzBjY2QxNjE0MGQzYjY0MzhhMThkYWU5YjM0YjkzIgotU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICI4NzAwZDk4MWU2ZjIwMDdhYzAzN2RhYmI1ZDJiMTJmMzkwZTg2MjliYmMzMGU1NjRiYzIxY2YwYzA2OWEyZDQ4IgotCi1TID0gIiR7V09SS0RJUn0iCi0KLWluaGVyaXQgbmF0aXZlCi0KLWRvX2luc3RhbGwgKCkgewotICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCi0gICAgICAgIGluc3RhbGwgLW0gNzU1IHppYyAke0R9JHtiaW5kaXJ9LwotICAgICAgICBpbnN0YWxsIC1tIDc1NSB6ZHVtcCAke0R9JHtiaW5kaXJ9LwotICAgICAgICBpbnN0YWxsIC1tIDc1NSB0enNlbGVjdCAke0R9JHtiaW5kaXJ9LwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE2Zy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNmcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlNjIxNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNmcuYmIKQEAgLTAsMCArMSwyNiBAQAorIyBub3RlIHRoYXQgd2UgYWxsb3cgZm9yIHVzIHRvIHVzZSBkYXRhIGxhdGVyIHRoYW4gb3VyIGNvZGUgdmVyc2lvbgorIworU1VNTUFSWSA9ICJ0emNvZGUsIHRpbWV6b25lIHpvbmVpbmZvIHV0aWxzIC0tIHppYywgemR1bXAsIHR6c2VsZWN0IgorTElDRU5TRSA9ICJQRCAmIEJTRCAmIEJTRC0zLUNsYXVzZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZWYxYTM1MmI5MDFlZTdiNzVhNzVkZjgxNzFkNmFjYTciCisKK1NSQ19VUkkgPSIgaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzL3JlcG9zaXRvcnkvcmVsZWFzZXMvdHpjb2RlJHtQVn0udGFyLmd6O25hbWU9dHpjb2RlIFwKKyAgICAgICAgICAgaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzL3JlcG9zaXRvcnkvcmVsZWFzZXMvdHpkYXRhJHtQVn0udGFyLmd6O25hbWU9dHpkYXRhIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKKworU1JDX1VSSVt0emNvZGUubWQ1c3VtXSA9ICJmODk4NjcwMTM2NzZlM2NiOTU0NGJlMmRmN2QzNmE5MSIKK1NSQ19VUklbdHpjb2RlLnNoYTI1NnN1bV0gPSAiMWZmOTBiNDdhZDc5ODYxNDBhNTEzYjUyODdiMTg1MWM0MGY4MGZkNDRmZDYzNmRiNWNjNWI0NmQwNmY5ZmEyYiIKK1NSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiM2M3ZTk3ZWM4NTI3MjExMTA0ZDI3Y2MxZDk3YTIzZGUiCitTUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjNjNzEzN2IyYmM0NzMyM2IwZGU0N2I3Nzc4NmJhY2Y4MWVkNTAzZDRiMmM2OTNmZjhhZGEyZmJkMTI4MWViZDEiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgemljICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHpkdW1wICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHR6c2VsZWN0ICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNmMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNmMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYjg1YjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTZjLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLVNVTU1BUlkgPSAiVGltZXpvbmUgZGF0YSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiUEQgJiBCU0QgJiBCU0QtMy1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmFlMmJlY2ZjYjlhNjg1MDQxYzZmMTY2YjQ0YzJjMiIKLQotREVQRU5EUyA9ICJ0emNvZGUtbmF0aXZlIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKLQotU1JDX1VSSVt0emRhdGEubWQ1c3VtXSA9ICIwMzMwY2NkMTYxNDBkM2I2NDM4YTE4ZGFlOWIzNGI5MyIKLVNSQ19VUklbdHpkYXRhLnNoYTI1NnN1bV0gPSAiODcwMGQ5ODFlNmYyMDA3YWMwMzdkYWJiNWQyYjEyZjM5MGU4NjI5YmJjMzBlNTY0YmMyMWNmMGMwNjlhMmQ0OCIKLQotaW5oZXJpdCBhbGxhcmNoCi0KLVJDT05GTElDVFNfJHtQTn0gPSAidGltZXpvbmVzIHRpbWV6b25lLWFmcmljYSB0aW1lem9uZS1hbWVyaWNhIHRpbWV6b25lLWFudGFyY3RpY2EgXAotICAgICAgICAgICAgIHRpbWV6b25lLWFyY3RpYyB0aW1lem9uZS1hc2lhIHRpbWV6b25lLWF0bGFudGljIFwKLSAgICAgICAgICAgICB0aW1lem9uZS1hdXN0cmFsaWEgdGltZXpvbmUtZXVyb3BlIHRpbWV6b25lLWluZGlhbiBcCi0gICAgICAgICAgICAgdGltZXpvbmUtaXNvMzE2Ni50YWIgdGltZXpvbmUtcGFjaWZpYyB0aW1lem9uZS16b25lLnRhYiIKLQotUyA9ICIke1dPUktESVJ9IgotCi1ERUZBVUxUX1RJTUVaT05FID89ICJVbml2ZXJzYWwiCi1JTlNUQUxMX1RJTUVaT05FX0ZJTEUgPz0gIjEiCi0KLVRaT05FUz0gImFmcmljYSBhbnRhcmN0aWNhIGFzaWEgYXVzdHJhbGFzaWEgZXVyb3BlIG5vcnRoYW1lcmljYSBzb3V0aGFtZXJpY2EgIFwKLSAgICAgICAgIGZhY3RvcnkgZXRjZXRlcmEgYmFja3dhcmQgc3lzdGVtdiBcCi0gICAgICAgICIKLSMgcGFjaWZpY25ldyAKLQotZG9fY29tcGlsZSAoKSB7Ci0gICAgICAgIGZvciB6b25lIGluICR7VFpPTkVTfTsgZG8gXAotICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mbyAtTCAvZGV2L251bGwgXAotICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCi0gICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4IC1MIC9kZXYvbnVsbCBcCi0gICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKLSAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQgLUwgJHtTfS9sZWFwc2Vjb25kcyBcCi0gICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKLSAgICAgICAgZG9uZQotfQotCi1kb19pbnN0YWxsICgpIHsKLSAgICAgICAgaW5zdGFsbCAtZCAke0R9LyRleGVjX3ByZWZpeCAke0R9JHtkYXRhZGlyfS96b25laW5mbwotICAgICAgICBjcCAtcFBSICR7U30vJGV4ZWNfcHJlZml4ICR7RH0vCi0gICAgICAgICMgbGliYyBpcyByZW1vdmluZyB6b25laW5mbyBmaWxlcyBmcm9tIHBhY2thZ2UKLSAgICAgICAgY3AgLXBQICIke1N9L3pvbmUudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbwotICAgICAgICBjcCAtcFAgIiR7U30vaXNvMzE2Ni50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCi0KLSAgICAgICAgIyBJbnN0YWxsIGRlZmF1bHQgdGltZXpvbmUKLSAgICAgICAgaWYgWyAtZSAke0R9JHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9IF07IHRoZW4KLSAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KLSAgICAgICAgICAgIGlmIFsgIiR7SU5TVEFMTF9USU1FWk9ORV9GSUxFfSIgPSAiMSIgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gJHtERUZBVUxUX1RJTUVaT05FfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RpbWV6b25lCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgbG4gLXMgJHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9ICR7RH0ke3N5c2NvbmZkaXJ9L2xvY2FsdGltZQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYmVycm9yICJERUZBVUxUX1RJTUVaT05FIGlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlLiIKLSAgICAgICAgICAgIGV4aXQgMQotICAgICAgICBmaQotCi0gICAgICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Ci19Ci0KLXBrZ19wb3N0aW5zdF8ke1BOfSAoKSB7Ci0JZXRjX2x0PSIkRCR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgotCXNyYz0iJEQke3N5c2NvbmZkaXJ9L3RpbWV6b25lIgotCi0JaWYgWyAtZSAke3NyY30gXSA7IHRoZW4KLQkJdHo9JChzZWQgLWUgJ3M6Iy4qOjonIC1lICdzOltbOnNwYWNlOl1dKjo6ZycgLWUgJy9eJC9kJyAiJHtzcmN9IikKLQlmaQotCQotCWlmIFsgLXogIiR7dHp9IiBdIDsgdGhlbgotCQlleGl0IDAKLQlmaQotCQotCWlmIFsgISAtZSAiJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IiBdIDsgdGhlbgotCQllY2hvICJZb3UgaGF2ZSBhbiBpbnZhbGlkIFRJTUVaT05FIHNldHRpbmcgaW4gJHtzcmN9IgotCQllY2hvICJZb3VyICR7ZXRjX2x0fSBoYXMgYmVlbiByZXNldCB0byBVbml2ZXJzYWw7IGVuam95ISIKLQkJdHo9IlVuaXZlcnNhbCIKLQkJZWNobyAiVXBkYXRpbmcgJHtldGNfbHR9IHdpdGggJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IgotCQlpZiBbIC1MICR7ZXRjX2x0fSBdIDsgdGhlbgotCQkJcm0gLWYgIiR7ZXRjX2x0fSIKLQkJZmkKLQkJbG4gLXMgIiR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iICIke2V0Y19sdH0iCi0JZmkKLX0KLQotIyBQYWNrYWdlcyBwcmltYXJpbHkgb3JnYW5pemVkIGJ5IGRpcmVjdG9yeSB3aXRoIGEgbWFqb3IgY2l0eQotIyBpbiBtb3N0IHRpbWUgem9uZXMgaW4gdGhlIGJhc2UgcGFja2FnZQotCi1QQUNLQUdFUyA9ICJ0emRhdGEgdHpkYXRhLW1pc2MgdHpkYXRhLXBvc2l4IHR6ZGF0YS1yaWdodCB0emRhdGEtYWZyaWNhIFwKLSAgICB0emRhdGEtYW1lcmljYXMgdHpkYXRhLWFudGFyY3RpY2EgdHpkYXRhLWFyY3RpYyB0emRhdGEtYXNpYSBcCi0gICAgdHpkYXRhLWF0bGFudGljIHR6ZGF0YS1hdXN0cmFsaWEgdHpkYXRhLWV1cm9wZSB0emRhdGEtcGFjaWZpYyIKLQotRklMRVNfdHpkYXRhLWFmcmljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvKiIKLVJQUk9WSURFU190emRhdGEtYWZyaWNhID0gInR6ZGF0YS1hZnJpY2EiCi0KLUZJTEVTX3R6ZGF0YS1hbWVyaWNhcyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhLyogIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VTLyogICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQnJhemlsLyogICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DYW5hZGEvKiAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01leGljby8qICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ2hpbGUvKiIKLVJQUk9WSURFU190emRhdGEtYW1lcmljYXMgPSAidHpkYXRhLWFtZXJpY2FzIgotCi1GSUxFU190emRhdGEtYW50YXJjdGljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbnRhcmN0aWNhLyoiCi1SUFJPVklERVNfdHpkYXRhLWFudGFyY3RpY2EgPSAidHpkYXRhLWFudGFyY3RpY2EiCi0KLUZJTEVTX3R6ZGF0YS1hcmN0aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXJjdGljLyoiCi1SUFJPVklERVNfdHpkYXRhLWFyY3RpYyA9ICJ0emRhdGEtYXJjdGljIgotCi1GSUxFU190emRhdGEtYXNpYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9Bc2lhLyogICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0luZGlhbi8qICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWlkZWFzdC8qIgotUlBST1ZJREVTX3R6ZGF0YS1hc2lhID0gInR6ZGF0YS1hc2lhIgotCi1GSUxFU190emRhdGEtYXRsYW50aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXRsYW50aWMvKiIKLVJQUk9WSURFU190emRhdGEtYXRsYW50aWMgPSAidHpkYXRhLWF0bGFudGljIgotCi1GSUxFU190emRhdGEtYXVzdHJhbGlhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS8qIgotUlBST1ZJREVTX3R6ZGF0YS1hdXN0cmFsaWEgPSAidHpkYXRhLWF1c3RyYWxpYSIKLQotRklMRVNfdHpkYXRhLWV1cm9wZSArPSAiJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvKiIKLVJQUk9WSURFU190emRhdGEtZXVyb3BlID0gInR6ZGF0YS1ldXJvcGUiCi0KLUZJTEVTX3R6ZGF0YS1wYWNpZmljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvKiIKLVJQUk9WSURFU190emRhdGEtcGFjaWZpYyA9ICJ0emRhdGEtcGFjaWZpYyIKLQotRklMRVNfdHpkYXRhLXBvc2l4ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4LyoiCi1SUFJPVklERVNfdHpkYXRhLXBvc2l4ID0gInR6ZGF0YS1wb3NpeCIKLQotRklMRVNfdHpkYXRhLXJpZ2h0ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0LyoiCi1SUFJPVklERVNfdHpkYXRhLXJpZ2h0ID0gInR6ZGF0YS1yaWdodCIKLQotCi1GSUxFU190emRhdGEtbWlzYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9DdWJhICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FZ3lwdCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FaXJlICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9GYWN0b3J5ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQi1FaXJlICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ib25na29uZyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JY2VsYW5kICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JcmFuICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Jc3JhZWwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYW1haWNhICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYXBhbiAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ld2FqYWxlaW4gICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9MaWJ5YSAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OYXZham8gICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb2xhbmQgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb3J0dWdhbCAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9TaW5nYXBvcmUgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9UdXJrZXkiCi1SUFJPVklERVNfdHpkYXRhLW1pc2MgPSAidHpkYXRhLW1pc2MiCi0KLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ib25vbHVsdSAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9BbmNob3JhZ2UgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9Mb3NfQW5nZWxlcyAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9EZW52ZXIgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DaGljYWdvICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9OZXdfWW9yayAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DYXJhY2FzICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9TYW9fUGF1bG8gICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL0xvbmRvbiAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL1BhcmlzICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQWZyaWNhL0NhaXJvICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL01vc2NvdyAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EdWJhaSAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9LYXJhY2hpICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EaGFrYSAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9CYW5rb2sgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ib25nX0tvbmcgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ub2t5byAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0RhcndpbiAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0FkZWxhaWRlICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0JyaXNiYW5lICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL1N5ZG5leSAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ob3VtZWEgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ0VUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ1NUNkNEVCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRUVUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUNUVEVCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR0IgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UKzAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01ULTAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UMCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR3JlZW53aWNoICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSFNUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTUVUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUN01EVCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlogICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlotQ0hBVCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFJDICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFNUOFBEVCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9DICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9LICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVUNUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVRDICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVW5pdmVyc2FsICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVy1TVSAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vV0VUICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vWnVsdSAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vem9uZS50YWIgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vaXNvMzE2Ni50YWIgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXRjLyoiCi0KLUNPTkZGSUxFU18ke1BOfSArPSAiJHtAICIke3N5c2NvbmZkaXJ9L3RpbWV6b25lIiBpZiBiYi51dGlscy50b19ib29sZWFuKGQuZ2V0VmFyKCdJTlNUQUxMX1RJTUVaT05FX0ZJTEUnLCBUcnVlKSkgZWxzZSAiIiB9IgotQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2xvY2FsdGltZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE2Zy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE2Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWU0YjVhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTZnLmJiCkBAIC0wLDAgKzEsMjEzIEBACitTVU1NQVJZID0gIlRpbWV6b25lIGRhdGEiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIlBEICYgQlNEICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZWYxYTM1MmI5MDFlZTdiNzVhNzVkZjgxNzFkNmFjYTciCisKK0RFUEVORFMgPSAidHpjb2RlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy90emRhdGEke1BWfS50YXIuZ3o7bmFtZT10emRhdGEiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzIgorCitTUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gIjNjN2U5N2VjODUyNzIxMTEwNGQyN2NjMWQ5N2EyM2RlIgorU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICIzYzcxMzdiMmJjNDczMjNiMGRlNDdiNzc3ODZiYWNmODFlZDUwM2Q0YjJjNjkzZmY4YWRhMmZiZDEyODFlYmQxIgorCitpbmhlcml0IGFsbGFyY2gKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ0aW1lem9uZXMgdGltZXpvbmUtYWZyaWNhIHRpbWV6b25lLWFtZXJpY2EgdGltZXpvbmUtYW50YXJjdGljYSBcCisgICAgICAgICAgICAgdGltZXpvbmUtYXJjdGljIHRpbWV6b25lLWFzaWEgdGltZXpvbmUtYXRsYW50aWMgXAorICAgICAgICAgICAgIHRpbWV6b25lLWF1c3RyYWxpYSB0aW1lem9uZS1ldXJvcGUgdGltZXpvbmUtaW5kaWFuIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1pc28zMTY2LnRhYiB0aW1lem9uZS1wYWNpZmljIHRpbWV6b25lLXpvbmUudGFiIgorCitTID0gIiR7V09SS0RJUn0iCisKK0RFRkFVTFRfVElNRVpPTkUgPz0gIlVuaXZlcnNhbCIKK0lOU1RBTExfVElNRVpPTkVfRklMRSA/PSAiMSIKKworVFpPTkVTPSAiYWZyaWNhIGFudGFyY3RpY2EgYXNpYSBhdXN0cmFsYXNpYSBldXJvcGUgbm9ydGhhbWVyaWNhIHNvdXRoYW1lcmljYSAgXAorICAgICAgICAgZmFjdG9yeSBldGNldGVyYSBiYWNrd2FyZCBzeXN0ZW12IFwKKyAgICAgICAgIgorIyBwYWNpZmljbmV3IAorCitkb19jb21waWxlICgpIHsKKyAgICAgICAgZm9yIHpvbmUgaW4gJHtUWk9ORVN9OyBkbyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvIC1MIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXggLUwgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mby9yaWdodCAtTCAke1N9L2xlYXBzZWNvbmRzIFwKKyAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAorICAgICAgICBkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0vJGV4ZWNfcHJlZml4ICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisgICAgICAgIGNwIC1wUFIgJHtTfS8kZXhlY19wcmVmaXggJHtEfS8KKyAgICAgICAgIyBsaWJjIGlzIHJlbW92aW5nIHpvbmVpbmZvIGZpbGVzIGZyb20gcGFja2FnZQorICAgICAgICBjcCAtcFAgIiR7U30vem9uZS50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisgICAgICAgIGNwIC1wUCAiJHtTfS9pc28zMTY2LnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKworICAgICAgICAjIEluc3RhbGwgZGVmYXVsdCB0aW1lem9uZQorICAgICAgICBpZiBbIC1lICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gXTsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICAgICAgaWYgWyAiJHtJTlNUQUxMX1RJTUVaT05FX0ZJTEV9IiA9ICIxIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAke0RFRkFVTFRfVElNRVpPTkV9ID4gJHtEfSR7c3lzY29uZmRpcn0vdGltZXpvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBsbiAtcyAke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gJHtEfSR7c3lzY29uZmRpcn0vbG9jYWx0aW1lCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJiZXJyb3IgIkRFRkFVTFRfVElNRVpPTkUgaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUuIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlldGNfbHQ9IiREJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCisJc3JjPSIkRCR7c3lzY29uZmRpcn0vdGltZXpvbmUiCisKKwlpZiBbIC1lICR7c3JjfSBdIDsgdGhlbgorCQl0ej0kKHNlZCAtZSAnczojLio6OicgLWUgJ3M6W1s6c3BhY2U6XV0qOjpnJyAtZSAnL14kL2QnICIke3NyY30iKQorCWZpCisJCisJaWYgWyAteiAiJHt0en0iIF0gOyB0aGVuCisJCWV4aXQgMAorCWZpCisJCisJaWYgWyAhIC1lICIkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iIF0gOyB0aGVuCisJCWVjaG8gIllvdSBoYXZlIGFuIGludmFsaWQgVElNRVpPTkUgc2V0dGluZyBpbiAke3NyY30iCisJCWVjaG8gIllvdXIgJHtldGNfbHR9IGhhcyBiZWVuIHJlc2V0IHRvIFVuaXZlcnNhbDsgZW5qb3khIgorCQl0ej0iVW5pdmVyc2FsIgorCQllY2hvICJVcGRhdGluZyAke2V0Y19sdH0gd2l0aCAkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iCisJCWlmIFsgLUwgJHtldGNfbHR9IF0gOyB0aGVuCisJCQlybSAtZiAiJHtldGNfbHR9IgorCQlmaQorCQlsbiAtcyAiJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgIiR7ZXRjX2x0fSIKKwlmaQorfQorCisjIFBhY2thZ2VzIHByaW1hcmlseSBvcmdhbml6ZWQgYnkgZGlyZWN0b3J5IHdpdGggYSBtYWpvciBjaXR5CisjIGluIG1vc3QgdGltZSB6b25lcyBpbiB0aGUgYmFzZSBwYWNrYWdlCisKK1BBQ0tBR0VTID0gInR6ZGF0YSB0emRhdGEtbWlzYyB0emRhdGEtcG9zaXggdHpkYXRhLXJpZ2h0IHR6ZGF0YS1hZnJpY2EgXAorICAgIHR6ZGF0YS1hbWVyaWNhcyB0emRhdGEtYW50YXJjdGljYSB0emRhdGEtYXJjdGljIHR6ZGF0YS1hc2lhIFwKKyAgICB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSB0emRhdGEtZXVyb3BlIHR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtYWZyaWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hZnJpY2EgPSAidHpkYXRhLWFmcmljYSIKKworRklMRVNfdHpkYXRhLWFtZXJpY2FzICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvKiAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVMvKiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9CcmF6aWwvKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NhbmFkYS8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWV4aWNvLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DaGlsZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hbWVyaWNhcyA9ICJ0emRhdGEtYW1lcmljYXMiCisKK0ZJTEVTX3R6ZGF0YS1hbnRhcmN0aWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FudGFyY3RpY2EvKiIKK1JQUk9WSURFU190emRhdGEtYW50YXJjdGljYSA9ICJ0emRhdGEtYW50YXJjdGljYSIKKworRklMRVNfdHpkYXRhLWFyY3RpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BcmN0aWMvKiIKK1JQUk9WSURFU190emRhdGEtYXJjdGljID0gInR6ZGF0YS1hcmN0aWMiCisKK0ZJTEVTX3R6ZGF0YS1hc2lhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvKiAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSW5kaWFuLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NaWRlYXN0LyoiCitSUFJPVklERVNfdHpkYXRhLWFzaWEgPSAidHpkYXRhLWFzaWEiCisKK0ZJTEVTX3R6ZGF0YS1hdGxhbnRpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdGxhbnRpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1hdGxhbnRpYyA9ICJ0emRhdGEtYXRsYW50aWMiCisKK0ZJTEVTX3R6ZGF0YS1hdXN0cmFsaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhLyoiCitSUFJPVklERVNfdHpkYXRhLWF1c3RyYWxpYSA9ICJ0emRhdGEtYXVzdHJhbGlhIgorCitGSUxFU190emRhdGEtZXVyb3BlICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1ldXJvcGUgPSAidHpkYXRhLWV1cm9wZSIKKworRklMRVNfdHpkYXRhLXBhY2lmaWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1wYWNpZmljID0gInR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtcG9zaXggKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXgvKiIKK1JQUk9WSURFU190emRhdGEtcG9zaXggPSAidHpkYXRhLXBvc2l4IgorCitGSUxFU190emRhdGEtcmlnaHQgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQvKiIKK1JQUk9WSURFU190emRhdGEtcmlnaHQgPSAidHpkYXRhLXJpZ2h0IgorCisKK0ZJTEVTX3R6ZGF0YS1taXNjICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0N1YmEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VneXB0ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VpcmUgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ZhY3RvcnkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCLUVpcmUgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hvbmdrb25nICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ljZWxhbmQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lyYW4gICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lzcmFlbCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phbWFpY2EgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phcGFuICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0t3YWphbGVpbiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0xpYnlhICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05hdmFqbyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvbGFuZCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvcnR1Z2FsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1NpbmdhcG9yZSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1R1cmtleSIKK1JQUk9WSURFU190emRhdGEtbWlzYyA9ICJ0emRhdGEtbWlzYyIKKworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0FuY2hvcmFnZSAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0RlbnZlciAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NoaWNhZ28gICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NhcmFjYXMgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTG9uZG9uICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvUGFyaXMgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvQ2Fpcm8gICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTW9zY293ICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0R1YmFpICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0thcmFjaGkgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0RoYWthICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0JhbmtvayAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0hvbmdfS29uZyAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL1Rva3lvICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvRGFyd2luICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQWRlbGFpZGUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQnJpc2JhbmUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL05vdW1lYSAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DU1Q2Q0RUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1Q1RURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQrMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQtMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQwICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HcmVlbndpY2ggICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9IU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1Q3TURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWi1DSEFUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QUkMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QU1Q4UERUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0MgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0sgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VQ1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VVEMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Vbml2ZXJzYWwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XLVNVICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9adWx1ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby96b25lLnRhYiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9pc28zMTY2LnRhYiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdGMvKiIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke0AgIiR7c3lzY29uZmRpcn0vdGltZXpvbmUiIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoJ0lOU1RBTExfVElNRVpPTkVfRklMRScsIFRydWUpKSBlbHNlICIiIH0iCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOWIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAordW56aXA6IEZpeGluZyBzZWN1cml0eSBmb3JtYXR0aW5nIGlzc3VlcworCitGaXggc2VjdXJpdHkgZm9ybWF0dGluZyBpc3N1ZXMgcmVsYXRlZCB0byBzcHJpbnRmIHBhcmFtZXRlcnMgZXhwZXRlZC4gCisKK1tZT0NUTyAjOTU1MV0KK1todHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NTFdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZXh0cmFjdC5jIGIvZXh0cmFjdC5jCitpbmRleCA3Y2Q5MTIzLi4yNWM1YTYyIDEwMDY0NAorLS0tIGEvZXh0cmFjdC5jCisrKysgYi9leHRyYWN0LmMKK0BAIC00NzUsNyArNDc1LDcgQEAgaW50IGV4dHJhY3Rfb3JfdGVzdF9maWxlcyhfX0cpICAgIC8qIHJldHVybiBQSy10eXBlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZhclN0cmluZyhDZW50U2lnTXNnKSwgaiArIGJsa251bSpESVJfQkxLU0laICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorLSAgICAgICAgICAgICAgICAgICAgICBMb2FkRmFyU3RyaW5nKFJlcG9ydE1zZykpKTsKKysgICAgICAgICAgICAgICAgICAgICAgIiVzIixMb2FkRmFyU3RyaW5nKFJlcG9ydE1zZykpKTsKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yX2luX2FyY2hpdmUgPSBQS19CQURFUlI7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgcmVhY2hlZF9lbmQgPSBUUlVFOyAgICAgLyogLi4uc28gbm8gbW9yZSBsZWZ0IHRvIGRvICovCitAQCAtNzU0LDggKzc1NCw4IEBAIGludCBleHRyYWN0X29yX3Rlc3RfZmlsZXMoX19HKSAgICAvKiByZXR1cm4gUEstdHlwZSBlcnJvciBjb2RlICovCisKKyAjaWZuZGVmIFNGWAorICAgICBpZiAobm9fZW5kc2lnX2ZvdW5kKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGp1c3QgdG8gbWFrZSBzdXJlICovCistICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsIExvYWRGYXJTdHJpbmcoRW5kU2lnTXNnKSkpOworLSAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKFJlcG9ydE1zZykpKTsKKysgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwgIiVzIiwgTG9hZEZhclN0cmluZyhFbmRTaWdNc2cpKSk7CisrICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsICIlcyIsIExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworICAgICAgICAgaWYgKCFlcnJvcl9pbl9hcmNoaXZlKSAgICAgICAvKiBkb24ndCBvdmVyd3JpdGUgc3Ryb25nZXIgZXJyb3IgKi8KKyAgICAgICAgICAgICBlcnJvcl9pbl9hcmNoaXZlID0gUEtfV0FSTjsKKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpc3QuYyBiL2xpc3QuYworaW5kZXggMTVlMDAxMS4uMGI0ODRmNiAxMDA2NDQKKy0tLSBhL2xpc3QuYworKysrIGIvbGlzdC5jCitAQCAtMTgxLDcgKzE4MSw3IEBAIGludCBsaXN0X2ZpbGVzKF9fRykgICAgLyogcmV0dXJuIFBLLXR5cGUgZXJyb3IgY29kZSAqLworICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwKKyAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhDZW50U2lnTXNnKSwgaikpOworICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwKKy0gICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhSZXBvcnRNc2cpKSk7CisrICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopc2xpZGUsICIlcyIsIExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworICAgICAgICAgICAgICAgICByZXR1cm4gUEtfQkFERVJSOyAgIC8qIHNpZyBub3QgZm91bmQgKi8KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CitAQCAtNTA3LDcgKzUwNyw3IEBAIGludCBsaXN0X2ZpbGVzKF9fRykgICAgLyogcmV0dXJuIFBLLXR5cGUgZXJyb3IgY29kZSAqLworICAgICAgICAgICAgICYmICghRy5lY3JlYy5pc196aXA2NF9hcmNoaXZlKQorICAgICAgICAgICAgICYmIChtZW1jbXAoRy5zaWcsIGVuZF9jZW50cmFsX3NpZywgNCkgIT0gMCkKKyAgICAgICAgICAgICkgeyAgICAgICAgICAvKiBqdXN0IHRvIG1ha2Ugc3VyZSBhZ2FpbiAqLworLSAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhFbmRTaWdNc2cpKSk7CisrICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLCAiJXMiLCBMb2FkRmFyU3RyaW5nKEVuZFNpZ01zZykpKTsKKyAgICAgICAgICAgICBlcnJvcl9pbl9hcmNoaXZlID0gUEtfV0FSTjsgICAvKiBkaWRuJ3QgZmluZCBzaWcgKi8KKyAgICAgICAgIH0KKworQEAgLTU5MSw3ICs1OTEsNyBAQCBpbnQgZ2V0X3RpbWVfc3RhbXAoX19HX18gbGFzdF9tb2R0aW1lLCBubWVtYmVyKSAgLyogcmV0dXJuIFBLLXR5cGUgZXJyb3IgY29kZSAqLworICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwKKyAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhDZW50U2lnTXNnKSwgaikpOworICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwKKy0gICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhSZXBvcnRNc2cpKSk7CisrICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopc2xpZGUsICIlcyIsIExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworICAgICAgICAgICAgICAgICByZXR1cm4gUEtfQkFERVJSOyAgIC8qIHNpZyBub3QgZm91bmQgKi8KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CitAQCAtNjc0LDcgKzY3NCw3IEBAIGludCBnZXRfdGltZV9zdGFtcChfX0dfXyBsYXN0X21vZHRpbWUsIG5tZW1iZXIpICAvKiByZXR1cm4gUEstdHlwZSBlcnJvciBjb2RlICovCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICAgICBpZiAobWVtY21wKEcuc2lnLCBlbmRfY2VudHJhbF9zaWcsIDQpKSB7ICAgIC8qIGp1c3QgdG8gbWFrZSBzdXJlIGFnYWluICovCistICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsIExvYWRGYXJTdHJpbmcoRW5kU2lnTXNnKSkpOworKyAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLCAiJXMiLCBMb2FkRmFyU3RyaW5nKEVuZFNpZ01zZykpKTsKKyAgICAgICAgIGVycm9yX2luX2FyY2hpdmUgPSBQS19XQVJOOworICAgICB9CisgICAgIGlmICgqbm1lbWJlciA9PSAwTCAmJiBlcnJvcl9pbl9hcmNoaXZlIDw9IFBLX1dBUk4pCitkaWZmIC0tZ2l0IGEvemlwaW5mby5jIGIvemlwaW5mby5jCitpbmRleCAwYWM3NWIzLi4xZTdmYTgyIDEwMDY0NAorLS0tIGEvemlwaW5mby5jCisrKysgYi96aXBpbmZvLmMKK0BAIC04MzMsNyArODMzLDcgQEAgaW50IHppcGluZm8oX19HKSAgIC8qIHJldHVybiBQSy10eXBlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsCisgICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopc2xpZGUsIExvYWRGYXJTdHJpbmcoQ2VudFNpZ01zZyksIGopKTsKKyAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsCistICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopc2xpZGUsIExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworKyAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKXNsaWRlLCAiJXMiLCBMb2FkRmFyU3RyaW5nKFJlcG9ydE1zZykpKTsKKyAgICAgICAgICAgICAgICAgZXJyb3JfaW5fYXJjaGl2ZSA9IFBLX0JBREVSUjsgICAvKiBzaWcgbm90IGZvdW5kICovCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KK0BAIC0xMDIyLDcgKzEwMjIsNyBAQCBpbnQgemlwaW5mbyhfX0cpICAgLyogcmV0dXJuIFBLLXR5cGUgZXJyb3IgY29kZSAqLworICAgICAgICAgICAgICYmICghRy5lY3JlYy5pc196aXA2NF9hcmNoaXZlKQorICAgICAgICAgICAgICYmIChtZW1jbXAoRy5zaWcsIGVuZF9jZW50cmFsX3NpZywgNCkgIT0gMCkKKyAgICAgICAgICAgICkgeyAgICAgICAgICAvKiBqdXN0IHRvIG1ha2Ugc3VyZSBhZ2FpbiAqLworLSAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhFbmRTaWdNc2cpKSk7CisrICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLCAiJXMiLCBMb2FkRmFyU3RyaW5nKEVuZFNpZ01zZykpKTsKKyAgICAgICAgICAgICBlcnJvcl9pbl9hcmNoaXZlID0gUEtfV0FSTjsgICAvKiBkaWRuJ3QgZmluZCBzaWcgKi8KKyAgICAgICAgIH0KKyAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKaW5kZXggOWVmZTc1Ni4uNTQ3Mzc5YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKQEAgLTYsNyArNiw3IEBACiBQRSA9ICIxIgogUFIgPSAicjUiCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvdW56aXA2MC50Z3ogXAorU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vaW5mb3ppcC9VblppcCUyMDYueCUyMCUyOGxhdGVzdCUyOS9VblppcCUyMDYuMC91bnppcDYwLnRhci5neiBcCiAJZmlsZTovL2F2b2lkLXN0cmlwLnBhdGNoIFwKIAlmaWxlOi8vZGVmaW5lLWxkZmxhZ3MucGF0Y2ggXAogCWZpbGU6Ly8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2ggXApAQCAtMTYsNiArMTYsNyBAQAogCWZpbGU6Ly8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaCBcCiAJZmlsZTovL0NWRS0yMDE1LTc2OTYucGF0Y2ggXAogCWZpbGU6Ly9DVkUtMjAxNS03Njk3LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2ggXAogIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNjJiNDkwNDA3NDg5NTIxZGI4NjNiNTIzYTdmODYzNzUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZmlnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZjQwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlNvZnR3YXJlIHdhdGNoZG9nIgorREVTQ1JJUFRJT04gPSAiV2F0Y2hkb2cgaXMgYSBkYWVtb24gdGhhdCBjaGVja3MgaWYgeW91ciBzeXN0ZW0gaXMgc3RpbGwgXAord29ya2luZy4gSWYgcHJvZ3JhbXMgaW4gdXNlciBzcGFjZSBhcmUgbm90IGxvbmdlciBleGVjdXRlZCBpdCB3aWxsIHJlYm9vdCBcCit0aGUgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXRjaGRvZy5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE3MjAzMCZhdGlkPTg2MDE5NCIKKworTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gIiBcCisgICAgZmlsZTovL3dhdGNoZG9nLmRlZmF1bHQgXAorICAgIGZpbGU6Ly93YXRjaGRvZy5jb25mIFwKKyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1EbSAwNjQ0ICR7V09SS0RJUn0vd2F0Y2hkb2cuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3dhdGNoZG9nCisgICAgaW5zdGFsbCAtRG0gMDY0NCAke1dPUktESVJ9L3dhdGNoZG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vd2F0Y2hkb2cuY29uZgorfQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy93YXRjaGRvZy5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy1jb25maWcvd2F0Y2hkb2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDkzZDEyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy1jb25maWcvd2F0Y2hkb2cuY29uZgpAQCAtMCwwICsxLDQyIEBACisjcGluZwkJCT0gMTcyLjMxLjE0LjEKKyNwaW5nCQkJPSAxNzIuMjYuMS4yNTUKKyNpbnRlcmZhY2UJCT0gZXRoMAorI2ZpbGUJCQk9IC92YXIvbG9nL21lc3NhZ2VzCisjY2hhbmdlCQkJPSAxNDA3CisKKyMgVW5jb21tZW50IHRvIGVuYWJsZSB0ZXN0LiBTZXR0aW5nIG9uZSBvZiB0aGVzZSB2YWx1ZXMgdG8gJzAnIGRpc2FibGVzIGl0LgorIyBUaGVzZSB2YWx1ZXMgd2lsbCBob3BlZnVsbHkgbmV2ZXIgcmVib290IHlvdXIgbWFjaGluZSBkdXJpbmcgbm9ybWFsIHVzZQorIyAoaWYgeW91ciBtYWNoaW5lIGlzIHJlYWxseSBodW5nLCB0aGUgbG9hZGF2ZyB3aWxsIGdvIG11Y2ggaGlnaGVyIHRoYW4gMjUpCisjbWF4LWxvYWQtMQkJPSAyNAorI21heC1sb2FkLTUJCT0gMTgKKyNtYXgtbG9hZC0xNQkJPSAxMgorCisjIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgcGFnZXMhCisjIFRvIGdldCB0aGUgcmVhbCBzaXplLCBjaGVjayBob3cgbGFyZ2UgdGhlIHBhZ2VzaXplIGlzIG9uIHlvdXIgbWFjaGluZS4KKyNtaW4tbWVtb3J5CQk9IDEKKworI3JlcGFpci1iaW5hcnkJCT0gL3Vzci9zYmluL3JlcGFpcgorI3JlcGFpci10aW1lb3V0CQk9IAorI3Rlc3QtYmluYXJ5CQk9IAorI3Rlc3QtdGltZW91dAkJPSAKKword2F0Y2hkb2ctZGV2aWNlCT0gL2Rldi93YXRjaGRvZworCisjIERlZmF1bHRzIGNvbXBpbGVkIGludG8gdGhlIGJpbmFyeQorI3RlbXBlcmF0dXJlLWRldmljZQk9CisjbWF4LXRlbXBlcmF0dXJlCT0gMTIwCisKKyMgRGVmYXVsdHMgY29tcGlsZWQgaW50byB0aGUgYmluYXJ5CisjYWRtaW4JCQk9IHJvb3QKKyNpbnRlcnZhbAkJPSAxCisjbG9ndGljayAgICAgICAgICAgICAgICA9IDEKKyNsb2ctZGlyCQk9IC92YXIvbG9nL3dhdGNoZG9nCisKKyMgVGhpcyBncmVhdGx5IGRlY3JlYXNlcyB0aGUgY2hhbmNlIHRoYXQgd2F0Y2hkb2cgd29uJ3QgYmUgc2NoZWR1bGVkIGJlZm9yZQorIyB5b3VyIG1hY2hpbmUgaXMgcmVhbGx5IGxvYWRlZAorcmVhbHRpbWUJCT0geWVzCitwcmlvcml0eQkJPSAxCisKKyMgQ2hlY2sgaWYgcnN5c2xvZ2QgaXMgc3RpbGwgcnVubmluZyBieSBlbmFibGluZyB0aGUgZm9sbG93aW5nIGxpbmUKKyNwaWRmaWxlCQk9IC92YXIvcnVuL3JzeXNsb2dkLnBpZCAgIAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy93YXRjaGRvZy5kZWZhdWx0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy1jb25maWcvd2F0Y2hkb2cuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDdkNWFiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy1jb25maWcvd2F0Y2hkb2cuZGVmYXVsdApAQCAtMCwwICsxLDIgQEAKKyMgU3RhcnQgd2F0Y2hkb2cgYXQgYm9vdCB0aW1lPyAwIG9yIDEKK3J1bl93YXRjaGRvZz0xCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLzAwMDEtRml4LWJ1aWxkLWlzc3Vlcy1mb3VuZC13aXRoLW5vbi1nbGliYy1DLWxpYnJhcmllcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvMDAwMS1GaXgtYnVpbGQtaXNzdWVzLWZvdW5kLXdpdGgtbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWZlZDVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvMDAwMS1GaXgtYnVpbGQtaXNzdWVzLWZvdW5kLXdpdGgtbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotRnJvbSA4M2VjMzRkZjM1NzIxOGExYzljZmMxM2EyM2QzMzY3ZDMzMzY1MmMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMzAgRGVjIDIwMTUgMDE6MDE6MTUgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIGlzc3VlcyBmb3VuZCB3aXRoIG5vbiBnbGliYyBDIGxpYnJhcmllcwotCi1BZGQgdGltZS5oIGZvciBnZXR0aW5nIHRpbWVfdCBkZWZpbml0aW9uCi1saW1pdHMuaCBmb3IgUEFUSF9NQVgKLWxpbnV4L3BhcmFtLmggZm9yIEVYRUNfUEFHRVNJWkUKLVJlcGxhY2UgZGVwcmVjYXRlZCBNTlRUQUIgd2l0aCBfUEFUSF9NTlRUQUIKLWluY2x1ZGUgZXh0Ml9tbnQuaCBmb3IgTU5UT1BUX1VTUlFVT1RBIGFuZCBNTlRPUFRfR1JQUVVPVEEgYW5kCi1NTlRUWVBFX0VYVDIKLUluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIHVfY2hhciBkZWZpbml0aW9uCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotIGluY2x1ZGUvZXh0ZXJuLmggfCAxICsKLSBzcmMvY29uZmlnZmlsZS5jIHwgMSArCi0gc3JjL21lbW9yeS5jICAgICB8IDMgKysrCi0gc3JjL25ldC5jICAgICAgICB8IDEgKwotIHNyYy9zaHV0ZG93bi5jICAgfCAzICsrLQotIDUgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9pbmNsdWRlL2V4dGVybi5oIGIvaW5jbHVkZS9leHRlcm4uaAotaW5kZXggMjFkYjExYi4uMDRiMTZiYyAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvZXh0ZXJuLmgKLSsrKyBiL2luY2x1ZGUvZXh0ZXJuLmgKLUBAIC0zLDYgKzMsNyBAQAotIAotICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHRpbWUuaD4KLSAKLSAjaW5jbHVkZSAibG9nbWVzc2FnZS5oIgotICNpbmNsdWRlICJ4bWFsbG9jLmgiCi1kaWZmIC0tZ2l0IGEvc3JjL2NvbmZpZ2ZpbGUuYyBiL3NyYy9jb25maWdmaWxlLmMKLWluZGV4IGJlNWQ3YjMuLjdjMWQxZGQgMTAwNjQ0Ci0tLS0gYS9zcmMvY29uZmlnZmlsZS5jCi0rKysgYi9zcmMvY29uZmlnZmlsZS5jCi1AQCAtMTYsNiArMTYsNyBAQAotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8ZGlyZW50Lmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotIAotICNpbmNsdWRlICJleHRlcm4uaCIKLWRpZmYgLS1naXQgYS9zcmMvbWVtb3J5LmMgYi9zcmMvbWVtb3J5LmMKLWluZGV4IGU5NjA3ZTQuLmI1ZTA4YWEgMTAwNjQ0Ci0tLS0gYS9zcmMvbWVtb3J5LmMKLSsrKyBiL3NyYy9tZW1vcnkuYwotQEAgLTIxLDYgKzIxLDkgQEAKLSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0gI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0rI2lmZGVmIF9fbGludXhfXwotKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotKyNlbmRpZgotIAotICNpbmNsdWRlICJleHRlcm4uaCIKLSAjaW5jbHVkZSAid2F0Y2hfZXJyLmgiCi1kaWZmIC0tZ2l0IGEvc3JjL25ldC5jIGIvc3JjL25ldC5jCi1pbmRleCAyMTgyM2FlLi44OTMwY2FmIDEwMDY0NAotLS0tIGEvc3JjL25ldC5jCi0rKysgYi9zcmMvbmV0LmMKLUBAIC0xNyw2ICsxNyw3IEBACi0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4JCS8qIGZvciBnZXRob3N0bmFtZSgpIGV0YyAqLwotICNpbmNsdWRlIDxuZXRkYi5oPgkJLyogZm9yIGdldGhvc3RieW5hbWUoKSAqLwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CS8qIGZvciBNQVhIT1NUTkFNRUxFTiAqLwotICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0gI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLWRpZmYgLS1naXQgYS9zcmMvc2h1dGRvd24uYyBiL3NyYy9zaHV0ZG93bi5jCi1pbmRleCA3NGFhZmE1Li40NmI5OWNmIDEwMDY0NAotLS0tIGEvc3JjL3NodXRkb3duLmMKLSsrKyBiL3NyYy9zaHV0ZG93bi5jCi1AQCAtMjUsNiArMjUsNyBAQAotIAotICNpbmNsdWRlICJ3YXRjaF9lcnIuaCIKLSAjaW5jbHVkZSAiZXh0ZXJuLmgiCi0rI2luY2x1ZGUgImV4dDJfbW50LmgiCi0gCi0gI2lmIGRlZmluZWQgX19HTElCQ19fCi0gI2luY2x1ZGUgImV4dDJfbW50LmgiCi1AQCAtMTIzLDcgKzEyNCw3IEBAIHN0YXRpYyB2b2lkIG1udF9vZmYoKQotIAlGSUxFICpmcDsKLSAJc3RydWN0IG1udGVudCAqbW50OwotIAotLQlmcCA9IHNldG1udGVudChNTlRUQUIsICJyIik7Ci0rCWZwID0gc2V0bW50ZW50KF9QQVRIX01OVFRBQiwgInIiKTsKLSAJLyogaW4gc29tZSByYXJlIGNhc2VzIGZwIG1pZ2h0IGJlIE5VTEwgc28gYmUgY2FyZWZ1bCAqLwotIAl3aGlsZSAoZnAgIT0gTlVMTCAmJiAoKG1udCA9IGdldG1udGVudChmcCkpICE9IChzdHJ1Y3QgbW50ZW50ICopMCkpIHsKLSAJCS8qIEZpcnN0IGNoZWNrIGlmIHN3YXAgKi8KLS0tIAotMi42LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy8wMDAxLUluY2x1ZGUtbGludXgtcGFyYW0uaC1mb3ItRVhFQ19QQUdFU0laRS1kZWZpbml0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy8wMDAxLUluY2x1ZGUtbGludXgtcGFyYW0uaC1mb3ItRVhFQ19QQUdFU0laRS1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OGYxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLzAwMDEtSW5jbHVkZS1saW51eC1wYXJhbS5oLWZvci1FWEVDX1BBR0VTSVpFLWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4ZjkxMzg1ZGJkNWU3YzE0YjM2ZWNiZDhhMDFjYTgyYzcwOWY2ZDc3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjQgSnVuIDIwMTYgMTg6MTk6MjkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBsaW51eC9wYXJhbS5oIGZvciBFWEVDX1BBR0VTSVpFIGRlZmluaXRpb24KKworTXVzbCBkb2VzIG5vdCBpbmNsdWRlIGxpbnV4L3BhcmFtLmggd2hlcmVhcyBnbGliYworZG9lcywgc28gaXQgZmFpbHMgdG8gYnVpbGQgb24gbXVzbC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIHNyYy93YXRjaGRvZy5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvd2F0Y2hkb2cuYyBiL3NyYy93YXRjaGRvZy5jCitpbmRleCBhY2Y2NDUwLi40ODYzODRhIDEwMDY0NAorLS0tIGEvc3JjL3dhdGNoZG9nLmMKKysrKyBiL3NyYy93YXRjaGRvZy5jCitAQCAtMjYsNiArMjYsOSBAQAorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4JCS8qIEZvciBFWEVDX1BBR0VTSVpFICovCisgI2luY2x1ZGUgPGxpbnV4L29vbS5oPgorICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorKyNpZmRlZiBfX2xpbnV4X18KKysjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisgI2luY2x1ZGUgPGxpYmdlbi5oPgorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhYjljNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1GaXggcGluZyBtb2RlIGZhaWx1cmUKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nICAKLQotV2hlbiB3YXRjaGRvZyB3b3JrcyBvbiBwaW5nIG1vZGUsIHRoZSBzeXN0ZW0gd2lsbCBiZSByZWJvb3RlZCBzaW5jZQotd2F0Y2hkb2cgY2FuIG5vdCByZWNlaXZlIHRoZSBleHBlY3RlZCBFQ09SRVBMWSBvbiBhIHNldHRpbmcgaW50ZXJ2YWwuCi0KLVBpbmcgbW9kZSB1c2VzIGEgcmF3IHNvY2tldCB0byBzZW5kIGEgRUNPIHBhY2tldCwgdGhlbiB1c2VzIHNlbGVjdCgpCi10byB3YWl0IGFuZCByZWN2ZnJvbSgpIHRvIHJlY2VpdmUgdGhlIEVDT1JFUExZIHBhY2tldCwgaWYgc2VsZWN0KCkKLXNob3dzIHRoZSBkYXRhIGlzIHJlYWR5LCBhbmQgdGhlIGRhdGEgaXMgbm90IHRoZSBleHBlY3RlZCBFQ09SRVBMWSwKLWFuZCB3YWl0aW5nIHRpbWUgaXMgbm90IG92ZXJkdWUsIGl0IHdpbGwgY29udGludWUgdXNlIHNlbGVjdCgpIGFuZAotcmVjdmZyb20oKS4KLQotUHJvYmxlbSBpcyB0aGF0IHRoZSByYXcgc29ja2V0IGNhbiByZWNlaXZlIGFueSBpY21wIHBhY2tldHMsIGlmIHdlIGRvCi1ub3Qgc2V0IGZpbHRlcnMsIGFuZCB0aGVyZSBhcmUgbWFueSBpY21wIHBhY2tldHMgb24gc29ja2V0LCB0aGlzCi1wcm9ncmFtIHdpbGwgbm90IGZpbmQgaXRzIGludGVyZXN0ZWQgRUNPUkVQTFkgcGFja2V0IGluIGEgc3BlY2lhbAotaW50ZXJ2YWwsIHdoaWNoIG1ha2VzIHRoZSBwaW5nIG1vZGUgZmFpbC4KLQotCi1PdGhlciBwcm9ncmFtIGlzIHRoYXQgd2F0Y2hkb2cgc29tZXRpbWUgY2FuIG5vdCByZWFjaCB0aGUgY2FsbCBvZgotcmVjdmZyb20gdG8gdHJ5IHRvIHJlY2VpdmUgcGFja2V0cyBzaW5jZSB0dl9zZWMgb2Ygc3RydWN0IHRpbWV2YWwKLW9mIHNlbGVjdCBwYXJhbWV0ZXIgaXMgMC4KLQotVGhlIHRpbWVvdXQgb2Ygc2VsZWN0KCkgaXMgdGhlIHJlc3VsdCBvZiBwaW5nIGludGVydmFsIG1pbnVzaW5nIHRoZQotdGltZSBvZiBjYWxsaW5nIGdldHRpbWVvZmRheSBzcGVuZGluZywgd2hlbiBwaW5nIGludGVydmFsIGlzIDEgc2Vjb25kLAotYW5kIHRoZSBjYWxsIG9mIGdldHRpbWVvZmRheSgpIHNwZW5kcyBzZXZlcmFsIHVzZWNvbmRzLCB0aGUgdHZfc2VjIG9mCi1zdHJ1Y3QgdGltZXZhbCBvZiBzZWxlY3QgcGFyYW1ldGVyIG11c3QgYmUgMCwgYXQgdGhhdCBjb25kaXRpb24sIHdlCi1zaG91bGQgaXQgaXMgdmFsaWQgb2YgdHZfc2VjIG9mIHN0cnVjdCB0aW1ldmFsIG9mIHNlbGVjdCBwYXJhbWV0ZXIgYmUgMCAKLQotU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgotLS0tCi0gc3JjL25ldC5jICAgICAgfCAgICAyICstCi0gc3JjL3dhdGNoZG9nLmMgfCAgICA1ICsrKystCi0gMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLUluZGV4OiB3YXRjaGRvZy01LjE0L3NyYy93YXRjaGRvZy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gd2F0Y2hkb2ctNS4xNC5vcmlnL3NyYy93YXRjaGRvZy5jCi0rKysgd2F0Y2hkb2ctNS4xNC9zcmMvd2F0Y2hkb2cuYwotQEAgLTI0LDYgKzI0LDcgQEAKLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotICNpbmNsdWRlIDxsaW51eC9vb20uaD4KLSsjaW5jbHVkZSA8bGludXgvaWNtcC5oPgotICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAKLUluZGV4OiB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHdhdGNoZG9nLTUuMTQub3JpZy9zcmMvbmV0LmMKLSsrKyB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYwotQEAgLTExLDcgKzExLDggQEAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgotLSNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KLSsjaW5jbHVkZSA8bGludXgvaWNtcC5oPgotKy8vI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBmb3IgZ2V0aG9zdG5hbWUoKSBldGMgKi8KLUBAIC0xNzksNiArMTgwLDkgQEAgaW50IG9wZW5fbmV0Y2hlY2soc3RydWN0IGxpc3QgKnRsaXN0KQotIHsKLSAJc3RydWN0IGxpc3QgKmFjdDsKLSAJaW50IGhvbGQgPSAwOwotKwlzdHJ1Y3QgaWNtcF9maWx0ZXIgZmlsdDsKLSsJZmlsdC5kYXRhID0gfigxPDxJQ01QX0VDSE9SRVBMWSk7Ci0rCi0gCi0gCWlmICh0bGlzdCAhPSBOVUxMKSB7Ci0gCQlmb3IgKGFjdCA9IHRsaXN0OyBhY3QgIT0gTlVMTDsgYWN0ID0gYWN0LT5uZXh0KSB7Ci1AQCAtMjAyLDYgKzIwNiw3IEBAIGludCBvcGVuX25ldGNoZWNrKHN0cnVjdCBsaXN0ICp0bGlzdCkKLSAJCQkgICAgZmF0YWxfZXJyb3IoRVhfU1lTRVJSLCAiZXJyb3Igb3BlbmluZyBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7Ci0gCQkJfQotIAotKwkJCXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfUkFXLCBJQ01QX0ZJTFRFUiwgKGNoYXIqKSZmaWx0LCBzaXplb2YoZmlsdCkpOwotIAkJCS8qIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBicm9hZGNhc3QgcGluZ3MgdG8gd29yayAqLwotIAkJCSh2b2lkKXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIChjaGFyICopJmhvbGQsIHNpemVvZihob2xkKSk7Ci0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeHNlcGJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhZDNhMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeHNlcGJ1aWxkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotRml4IG91dCBvZiB0cmVlIGJ1aWxkIHN1cHBvcnQ6Ci0KLXwgaW5zdGFsbGluZyAvZXRjL3dhdGNoZG9nLmNvbmYKLXwgIC9iaW4vbWtkaXIgLXAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjUnCi18ICAvYmluL21rZGlyIC1wICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW44JwotfCAgL3Vzci9iaW4vaW5zdGFsbCAtYyAtbSA2NDQgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuY29uZi41ICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW41JwotfCAgL3Vzci9iaW4vaW5zdGFsbCAtYyAtbSA2NDQgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuOCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93ZF9rZWVwYWxpdmUuOCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93ZF9pZGVudGlmeS44ICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW44JwotfCAvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgd2F0Y2hkb2cuY29uZic6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLXwgbWFrZVsyXTogKioqIFtpbnN0YWxsLWV0Yy1sb2NhbF0gRXJyb3IgMQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotUlAgMjAxMy8wMy8yMQotCi1JbmRleDogd2F0Y2hkb2ctNS4xMy9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHdhdGNoZG9nLTUuMTMub3JpZy9NYWtlZmlsZS5hbQkyMDEzLTAyLTAxIDExOjE1OjQ0LjAwMDAwMDAwMCArMDAwMAotKysrIHdhdGNoZG9nLTUuMTMvTWFrZWZpbGUuYW0JMjAxMy0wMy0yMSAxMTo1OTozNS42MzcxMzkwMzEgKzAwMDAKLUBAIC0xNiw3ICsxNiw3IEBACi0gCWVsc2UgXAotIAkgICAgICAgIGVjaG8gImluc3RhbGxpbmcgJChDT05GSUdfRklMRU5BTUUpIjsgXAotIAkJJChta2luc3RhbGxkaXJzKSBgZGlybmFtZSAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpYDsgXAotLQkgICAgICAgICQoSU5TVEFMTF9EQVRBKSB3YXRjaGRvZy5jb25mICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSk7IFwKLSsJICAgICAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3dhdGNoZG9nLmNvbmYgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKTsgXAotIAlmaQotIAotIGluc3RhbGwtZGF0YS1sb2NhbDogaW5zdGFsbC1ldGMtbG9jYWwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2Rfa2VlcGFsaXZlLmluaXQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dkX2tlZXBhbGl2ZS5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkM2U0YzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dkX2tlZXBhbGl2ZS5pbml0CkBAIC0wLDAgKzEsMTIxIEBACisjIS9iaW4vc2gKKyMvZXRjL2luaXQuZC93ZF9rZWVwYWxpdmU6IHN0YXJ0IHdkX2tlZXBhbGl2ZSBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHdkX2tlZXBhbGl2ZQorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RhcnQgd2F0Y2hkb2cga2VlcGFsaXZlIGRhZW1vbgorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcworIyBYLVN0YXJ0LUJlZm9yZTogICAgJGFsbAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3AKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KKwordGVzdCAteCAvdXNyL3NiaW4vd2Rfa2VlcGFsaXZlIHx8IGV4aXQgMAorCisjIEZvciBjb25maWd1cmF0aW9uIG9mIHRoZSBpbml0IHNjcmlwdCB1c2UgdGhlIGZpbGUKKyMgL2V0Yy9kZWZhdWx0L3dhdGNoZG9nLCBkbyBub3QgZWRpdCB0aGlzIGluaXQgc2NyaXB0LgorCisjIFNldCBydW5fd2F0Y2hkb2cgdG8gMSB0byBzdGFydCB3YXRjaGRvZyBvciAwIHRvIGRpc2FibGUgaXQuCitydW5fd2F0Y2hkb2c9MAorCisjIFNwZWNpZnkgYWRkaXRpb25hbCB3YXRjaGRvZyBvcHRpb25zIGhlcmUgKHNlZSBtYW5wYWdlKS4KK3dhdGNoZG9nX29wdGlvbnM9IiIKKworIyBTcGVjaWZ5IG1vZHVsZSB0byBsb2FkCit3YXRjaGRvZ19tb2R1bGU9Im5vbmUiCisKK1sgLWUgL2V0Yy9kZWZhdWx0L3dhdGNoZG9nIF0gJiYgLiAvZXRjL2RlZmF1bHQvd2F0Y2hkb2cKKworTkFNRT13ZF9rZWVwYWxpdmUKK0RBRU1PTj0vdXNyL3NiaW4vd2Rfa2VlcGFsaXZlCisKK1NUT1BfUkVUUllfU0NIRURVTEU9J1RFUk0vMTAvZm9yZXZlci9LSUxMLzEnCisKKyMgLiAvbGliL2xzYi9pbml0LWZ1bmN0aW9ucworCisjIE1vY2sgRGViaWFuIHN0dWZmCitsb2dfYmVnaW5fbXNnKCkgeworICAgIGVjaG8gLW4gJCoKK30KKworbG9nX2VuZF9tc2coKSB7CisgICAgaWYgWyAiJDEiID0gIjAiIF07IHRoZW4KKyAgICAgICAgZWNobyAnZG9uZScKKyAgICBlbHNlCisgICAgICAgIGVjaG8gJ2Vycm9yJworICAgIGZpCit9CisKK2xvZ19kYWVtb25fbXNnKCkgeworICAgIGVjaG8gJCoKK30KKworbG9nX3Byb2dyZXNzX21zZygpIHsKKyAgICBlY2hvICQqCit9CisKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGlmIFsgJHJ1bl93YXRjaGRvZyA9IDEgXQorICAgIHRoZW4KKyAgICAgICAgWyAke3dhdGNoZG9nX21vZHVsZTotbm9uZX0gIT0gIm5vbmUiIF0gJiYgL3NiaW4vbW9kcHJvYmUgJHdhdGNoZG9nX21vZHVsZQorCWVjaG8gLW4gIlN0YXJ0aW5nIHdhdGNoZG9nIGtlZXBhbGl2ZSBkYWVtb246ICIKKwlpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgXAorCSAgICAtLWV4ZWMgJERBRU1PTiAtLSAkd2F0Y2hkb2dfb3B0aW9ucworCXRoZW4KKwkgICAgZWNobyB3ZF9rZWVwYWxpdmUuCisJZWxzZQorCSAgICBlY2hvCisJZmkKKyAgICBmaQorICAgIDs7CisKKyAgc3RvcCkKKyAgICBpZiBbICRydW5fd2F0Y2hkb2cgPSAxIF0KKyAgICB0aGVuCisJZWNobyAtbiAiU3RvcHBpbmcgd2F0Y2hkb2cga2VlcGFsaXZlIGRhZW1vbjogIgorCWlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCSAgICAkU1RPUF9SRVRSWV9TQ0hFRFVMRQorCXRoZW4KKwkgICAgZWNobyB3ZF9rZWVwYWxpdmUuCisJZWxzZQorCSAgICBlY2hvCisJZmkKKyAgICBmaQorICAgIDs7CisKKyAgc3RhdHVzKQorICAgIHN0YXR1c19vZl9wcm9jICIkREFFTU9OIiAiJE5BTUUiICYmIGV4aXQgMCB8fCBleGl0ICQ/CisgICAgOzsKKworICByZXN0YXJ0KQorICAgICQwIGZvcmNlLXJlbG9hZAorICAgIDs7CisKKyAgZm9yY2UtcmVsb2FkKQorICAgIGlmIFsgJHJ1bl93YXRjaGRvZyA9IDAgXTsgdGhlbiBleGl0IDA7IGZpCisgICAgZWNobyAtbiAiUmVzdGFydGluZyAkTkFNRSBkYWVtb24uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCSRTVE9QX1JFVFJZX1NDSEVEVUxFCisgICAgZWNobyAtbiAiLiIKKyAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJLS1leGVjICREQUVNT04gLS0gJHdhdGNoZG9nX29wdGlvbnMKKyAgICB0aGVuCisJZWNobyAiZG9uZS4iCisgICAgZWxzZQorCWVjaG8KKyAgICBmaQorICAgIDs7CisKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvd2Rfa2VlcGFsaXZlIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisgICAgZXhpdCAxCisKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMzMDIzOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1TVU1NQVJZID0gIlNvZnR3YXJlIHdhdGNoZG9nIgotREVTQ1JJUFRJT04gPSAiV2F0Y2hkb2cgaXMgYSBkYWVtb24gdGhhdCBjaGVja3MgaWYgeW91ciBzeXN0ZW0gaXMgc3RpbGwgXAotd29ya2luZy4gSWYgcHJvZ3JhbXMgaW4gdXNlciBzcGFjZSBhcmUgbm90IGxvbmdlciBleGVjdXRlZCBcCi1pdCB3aWxsIHJlYm9vdCB0aGUgc3lzdGVtLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93YXRjaGRvZy5zb3VyY2Vmb3JnZS5uZXQvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE3MjAzMCZhdGlkPTg2MDE5NCIKLQotTElDRU5TRSA9ICJHUEwtMi4wKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVjYzA1NTFiZjU0YWQ5N2Y2YjU0MTcyMGY4NGQ2NTY5IgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS93YXRjaGRvZy93YXRjaGRvZy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZml4c2VwYnVpbGQucGF0Y2ggXAotCSAgIGZpbGU6Ly9maXgtcGluZy1mYWlsdXJlLnBhdGNoIFwKLQkgICBmaWxlOi8vd2F0Y2hkb2ctaW5pdC5wYXRjaCBcCi0JICAgZmlsZTovL3dhdGNoZG9nLWNvbmYucGF0Y2ggXAotCSAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1pc3N1ZXMtZm91bmQtd2l0aC1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNWIyZGJhMGM1OTM5NDJmNGFjYzEwMGJjYTBkNTYwYzQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjIwYjJmNDllOTg3OWYyZTg1YzczZDRjMWY0MjJmOTEwMWU2YjM4ZTgyNGZlYTI0MTRiZWZkOGJiNjg2NmFkMSIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvd2F0Y2hkb2cvZmlsZXMvd2F0Y2hkb2cvIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL3dhdGNoZG9nLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi1pbmhlcml0IHVwZGF0ZS1yYy5kCi0KLURFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgbGlidGlycGMgIgotQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0vdGlycGMgIgotTERGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtbHRpcnBjICIKLUVYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1tdXNsID0gIiAtLWRpc2FibGUtbmZzICIKLQotSU5JVFNDUklQVF9OQU1FID0gIndhdGNoZG9nLnNoIgotSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTUgMSAyIDMgNCA1IC4gc3RvcCA4NSAwIDYgLiIKLQotUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1zb2Z0ZG9nIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlpbnN0YWxsIC1EICR7U30vcmVkaGF0L3dhdGNoZG9nLmluaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93YXRjaGRvZy5zaAotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGZjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTUuYmIKQEAgLTAsMCArMSw1OSBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSB3YXRjaGRvZyIKK0RFU0NSSVBUSU9OID0gIldhdGNoZG9nIGlzIGEgZGFlbW9uIHRoYXQgY2hlY2tzIGlmIHlvdXIgc3lzdGVtIGlzIHN0aWxsIFwKK3dvcmtpbmcuIElmIHByb2dyYW1zIGluIHVzZXIgc3BhY2UgYXJlIG5vdCBsb25nZXIgZXhlY3V0ZWQgXAoraXQgd2lsbCByZWJvb3QgdGhlIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd2F0Y2hkb2cuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNzIwMzAmYXRpZD04NjAxOTQiCisKK0xJQ0VOU0UgPSAiR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lY2MwNTUxYmY1NGFkOTdmNmI1NDE3MjBmODRkNjU2OSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vd2F0Y2hkb2cvd2F0Y2hkb2ctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1saW51eC1wYXJhbS5oLWZvci1FWEVDX1BBR0VTSVpFLWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vd2F0Y2hkb2ctaW5pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly93YXRjaGRvZy1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3dkX2tlZXBhbGl2ZS5pbml0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjY3OGMzMmY2ZjM1YTA0OTJjOWMxYjc2YjRhYTg4ODI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmZGM4NjUxMzdhZDVkOGU1MzY2NGJkMjJiYWQ0ZGU2Y2ExMzZkMWI0NjM2NzIwMzIwY2I1MmFmMGMxODk0N2MiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3dhdGNoZG9nL2ZpbGVzL3dhdGNoZG9nLyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi93YXRjaGRvZy8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykvIgorCitpbmhlcml0IGF1dG90b29scworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGxpYnRpcnBjICIKK0NGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtSSR7U1RBR0lOR19JTkNESVJ9L3RpcnBjICIKK0xERkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLWx0aXJwYyAiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLS1kaXNhYmxlLW5mcyAiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0ta2VlcGFsaXZlIgorCitJTklUU0NSSVBUX05BTUVfJHtQTn0gPSAid2F0Y2hkb2cuc2giCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfSA9ICJzdGFydCAxNSAxIDIgMyA0IDUgLiBzdG9wIDg1IDAgNiAuIgorCitJTklUU0NSSVBUX05BTUVfJHtQTn0ta2VlcGFsaXZlID0gIndkX2tlZXBhbGl2ZSIKK0lOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LWtlZXBhbGl2ZSA9ICJzdGFydCAxNSAxIDIgMyA0IDUgLiBzdG9wIDg1IDAgNiAuIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1EICR7U30vcmVkaGF0L3dhdGNoZG9nLmluaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93YXRjaGRvZy5zaAorICAgIGluc3RhbGwgLURtIDA3NTUgJHtXT1JLRElSfS93ZF9rZWVwYWxpdmUuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvd2Rfa2VlcGFsaXZlCisKKyAgICAjIHdhdGNoZG9nLmNvbmYgaXMgcHJvdmlkZWQgYnkgdGhlIHdhdGNoZG9nLWNvbmZpZyByZWNpcGUKKyAgICBybSAke0R9JHtzeXNjb25mZGlyfS93YXRjaGRvZy5jb25mCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1rZWVwYWxpdmUiCisKK0ZJTEVTXyR7UE59LWtlZXBhbGl2ZSA9ICIgXAorICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3dkX2tlZXBhbGl2ZSBcCisgICAgJHtzYmluZGlyfS93ZF9rZWVwYWxpdmUgXAorIgorCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tY29uZmlnICR7UE59LWtlZXBhbGl2ZSIKK1JERVBFTkRTXyR7UE59LWtlZXBhbGl2ZSArPSAiJHtQTn0tY29uZmlnIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLXNvZnRkb2ciCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYwppbmRleCBkYzM4MWE2Li5jNGFiZmU0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jCkBAIC05LDcgKzksNyBAQAogCiBpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKIAotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWlwdjYgLS13aXRoLXNzbD1nbnV0bHMgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1pcmkgXAorRVhUUkFfT0VDT05GID0gIi0td2l0aC1zc2w9Z251dGxzIC0tZGlzYWJsZS1ycGF0aCAtLWRpc2FibGUtaXJpIFwKICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliZ251dGxzLXByZWZpeCBhY19jdl9oZWFkZXJfdXVpZF91dWlkX2g9bm8iCiAKIEFMVEVSTkFUSVZFXyR7UE59ID0gIndnZXQiCkBAIC0yMCw4ICsyMCw5IEBACiAKIEJCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZXNkayIKIAotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCiBQQUNLQUdFQ09ORklHW2xpYnV1aWRdID0gIi0td2l0aC1saWJ1dWlkLCAtLXdpdGhvdXQtbGlidXVpZCx1dGlsLWxpbnV4IgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKIAogIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuCiAjIGFic29sdXRlLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE3LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE3LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYTVkMWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNy4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vd2dldC93Z2V0LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhNmE5MDhjOWFlMGU2YTQxOTRjNjI4OTc0Y2MzZjA1YSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwMjlmYmI5M2JkYzFjMGM1YTc1MDdiNjA3NmE2ZWMyZjhkMzQyMDRhODVhYTg3ZTViMmY2MWE5NDA1YjI5MGY1IgotCi1yZXF1aXJlIHdnZXQuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY5Yjk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xOC5iYgpAQCAtMCwwICsxLDggQEAKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS93Z2V0L3dnZXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZjMmRlYmQ4Mzk5ZTNiOTMzYTliMjI2Nzk0ZTJhODg2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEwMGE2NWZhYjg0Y2M0NmUyNGM1M2NlODhjNDU2MDQ2NjhhN2E0NzkyNzZlMDM3ZGMyZjU1OGUzNDcxN2ZiMmQiCisKK3JlcXVpcmUgd2dldC5pbmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoCmluZGV4IGZiOWIxYTQuLjBlMDk4OGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2ZpeF9uYW1lX2NvbmZsaWN0X2dyb3VwX21lbWJlci5wYXRjaApAQCAtMyw3ICszLDcgQEAKICMgZ2xpYmMgYWxzbyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbiBncm91cF9tZW1iZXIuIFRvIGF2b2lkIG5hbWUgY29uZmxpY3QsCiAjIGhlcmUgbGV0IHVzIGFwcGVuZCBhICJfIiB0byB3aGljaCdzIHZlcnNpb24uCiAjCi0jIFNpZ25lZC1vZmYtYnkgRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+LCAyMDEwLTA4LTIwCisjIFNpZ25lZC1vZmYtYnk6IERleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPiwgMjAxMC0wOC0yMAogIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKIAogLS0tIHdoaWNoLTIuMTgvYmFzaC5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHNfMS4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHNfMS4xLjEuYmIKaW5kZXggYzE0NzJjZi4uNTAwNzQ5OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMS5iYgpAQCAtMjcsNiArMjcsNyBAQAogCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJ4ZGctdXRpbHMtKD9QPHB2ZXI+KChcZCtbXC5cLV9dKikrKSgocmN8YWxwaGF8YmV0YSlcZCspPylcLih0YXJcLmd6fHRneikiCiAKKyMgTmVlZHMgYnJva2Vuc2VwIGFzIHRoaXMgZG9lc24ndCB1c2UgYXV0b21ha2UKIGluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKIAogIyBUaGUgeHByb3AgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLTMuMC9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLTMuMC9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDg1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXAtMy4wL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAoremlwOiBGaXhpbmcgc2VjdXJpdHkgZm9ybWF0dGluZyBpc3N1ZXMKKworRml4IHNlY3VyaXR5IGZvcm1hdHRpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gcHJpbnRpbmcgd2l0aG91dCBOVUxMIGFyZ3VtZW50CisKK3ppcC5jOiBJbiBmdW5jdGlvbiAnaGVscF9leHRlbmRlZCc6Cit6aXAuYzoxMDMxOjU6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorICAgICBwcmludGYodGV4dFtpXSk7CisgICAgIF4KK3ppcC5jOiBJbiBmdW5jdGlvbiAndmVyc2lvbl9pbmZvJzoKK3ppcC5jOjEyMjg6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCisgICAgIHByaW50ZihjcnlwdG5vdGVbaV0pOworICAgICBeCisKK1tZT0NUTyAjOTU1Ml0KK1todHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NTJdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvemlwLmMgYi96aXAuYworaW5kZXggNDM5ODIxZi4uZDdkYTc2OCAxMDA2NDQKKy0tLSBhL3ppcC5jCisrKysgYi96aXAuYworQEAgLTEwMjgsNyArMTAyOCw3IEBAIGxvY2FsIHZvaWQgaGVscF9leHRlbmRlZCgpCisgCisgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRleHQpL3NpemVvZihjaGFyICopOyBpKyspCisgICB7CistICAgIHByaW50Zih0ZXh0W2ldKTsKKysgICAgZnB1dHModGV4dFtpXSxzdGRvdXQpOworICAgICBwdXRjaGFyKCdcbicpOworICAgfQorICNpZmRlZiBET1MKK0BAIC0xMjI1LDcgKzEyMjUsNyBAQCBsb2NhbCB2b2lkIHZlcnNpb25faW5mbygpCisgICAgICAgICAgICAgQ1JfTUFKT1JWRVIsIENSX01JTk9SVkVSLCBDUl9CRVRBX1ZFUiwgQ1JfVkVSU0lPTl9EQVRFKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoY3J5cHRub3RlKS9zaXplb2YoY2hhciAqKTsgaSsrKQorICAgeworLSAgICBwcmludGYoY3J5cHRub3RlW2ldKTsKKysgICAgZnB1dHMoY3J5cHRub3RlW2ldLHN0ZG91dCk7CisgICAgIHB1dGNoYXIoJ1xuJyk7CisgICB9CisgICArK2k7ICAvKiBjcnlwdCBzdXBwb3J0IG1lYW5zIHRoZXJlIElTIGF0IGxlYXN0IG9uZSBjb21waWxhdGlvbiBvcHRpb24gKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXAuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjIxYzVlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1TVU1NQVJZID0gIkNvbXByZXNzb3IvYXJjaGl2ZXIgZm9yIGNyZWF0aW5nIGFuZCBtb2RpZnlpbmcgLnppcCBmaWxlcyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mby16aXAub3JnIgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotCi1MSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTA0ZDQzYzVkNzBiNDk2YzAzMjMwODEwNmUyNmFlMTdkIgotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3ppcCR7QGQuZ2V0VmFyKCdQVicsMSkucmVwbGFjZSgnLicsICcnKX0udGd6IgotCi1FWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnQklORD0ke0NDfScgJ0FTPSR7Q0N9IC1jJyAnQ1BQPSR7Q1BQfScgXAotCQknQ0ZMQUdTPS1JLiAtRFVOSVggJHtDRkxBR1N9JyAnSU5TVEFMTD1pbnN0YWxsJyBcCi0JCSdCSU5GTEFHUz0wNzU1JyAnSU5TVEFMTF9EPWluc3RhbGwgLWQnIgotCi1kb19jb21waWxlKCkgewotCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBmbGFncyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQotCXNlZCAtaSAncyNMRkxBR1MxPSIiI0xGTEFHUzE9IiR7TERGTEFHU30iIycgZmxhZ3MKLQlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZ2VuZXJpYyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQotfQotCi1kb19pbnN0YWxsKCkgewotCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBwcmVmaXg9JHtEfSR7cHJlZml4fSBcCi0JCSAgIEJJTkRJUj0ke0R9JHtiaW5kaXJ9IE1BTkRJUj0ke0R9JHttYW5kaXJ9L21hbjEgXAotCQkgICBpbnN0YWxsCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwXzMuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKaW5kZXggMzgzZGE0Yi4uMDg3NDIzYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwXzMuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiCkBAIC0xLDE4ICsxLDQyIEBACi1yZXF1aXJlIHppcC5pbmMKK1NVTU1BUlkgPSAiQ29tcHJlc3Nvci9hcmNoaXZlciBmb3IgY3JlYXRpbmcgYW5kIG1vZGlmeWluZyAuemlwIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvLXppcC5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCiAKLVBSPSJyMiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDRkNDNjNWQ3MGI0OTZjMDMyMzA4MTA2ZTI2YWUxN2QiCiAKLSMgemlwLTIuMzIgc3RpbGwgdXNlcyBkaXJlY3RvcnkgbmFtZSBvZiB6aXAtMi4zMAorUFIgPSAicjIiCisKIFMgPSAiJHtXT1JLRElSfS96aXAzMCIKIAorU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vaW5mb3ppcC9aaXAlMjAzLnglMjAlMjhsYXRlc3QlMjkvMy4wL3ppcDMwLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoIgorCiBTUkNfVVJJW21kNXN1bV0gPSAiN2I3NDU1MWU2M2Y4ZWU2YWFiNmZiYzg2Njc2YzBkMzciCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjBlOGJiMWY5YjdlYjBiMDEyODU0OTVhMjY5OWRmM2E0Yjc2Njc4NGMxNzY1YThmMWFlZWRmNjNjMDgwNjM2OSIKIAotIyBleGNsdWRlIHZlcnNpb24gMi4zLjIgd2hpY2ggdHJpZ2dlcnMgYSBmYWxzZSBwb3NpdGl2ZQotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiXnppcCg/UDxwdmVyPig/ITIzMikuKylcLnRneiIKLQogIyB6aXAuaW5jIHNldHMgQ0ZMQUdTLCBidXQgd2hhdCBNYWtlZmlsZSBhY3R1YWxseSB1c2VzIGlzCiAjIENGTEFHU19OT09QVC4gIEl0IHdpbGwgYWxzbyBmb3JjZSAtTzMgb3B0aW1pemF0aW9uLCBvdmVycmlkaW5nCiAjIHdoYXRldmVyIHdlIHNldC4KLSMKLUVYVFJBX09FTUFLRV9hcHBlbmQgPSAiICdDRkxBR1NfTk9PUFQ9LUkuIC1EVU5JWCAke0NGTEFHU30nIgorRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgJ0JJTkQ9JHtDQ30nICdBUz0ke0NDfSAtYycgJ0NQUD0ke0NQUH0nIFwKKwkJJ0NGTEFHUz0tSS4gLURVTklYICR7Q0ZMQUdTfScgXAorCQknQ0ZMQUdTX05PT1BUPS1JLiAtRFVOSVggJHtDRkxBR1N9JyBcCisJCSdJTlNUQUxMPWluc3RhbGwnICdJTlNUQUxMX0Q9aW5zdGFsbCAtZCcgXAorCQknQklORkxBR1M9MDc1NSciCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGZsYWdzIElaX0JaSVAyPW5vX3N1Y2hfZGlyZWN0b3J5CisJc2VkIC1pICdzI0xGTEFHUzE9IiIjTEZMQUdTMT0iJHtMREZMQUdTfSIjJyBmbGFncworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBnZW5lcmljIElaX0JaSVAyPW5vX3N1Y2hfZGlyZWN0b3J5Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIHByZWZpeD0ke0R9JHtwcmVmaXh9IFwKKwkJICAgQklORElSPSR7RH0ke2JpbmRpcn0gTUFORElSPSR7RH0ke21hbmRpcn0vbWFuMSBcCisJCSAgIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKyMgZXhjbHVkZSB2ZXJzaW9uIDIuMy4yIHdoaWNoIHRyaWdnZXJzIGEgZmFsc2UgcG9zaXRpdmUKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIl56aXAoP1A8cHZlcj4oPyEyMzIpLispXC50Z3oiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMTguNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xOC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njk1NjljLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xOC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotU1VNTUFSWSA9ICJXZWJLaXQgYmFzZWQgd2ViIGJyb3dzZXIgZm9yIEdOT01FIgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLQotREVQRU5EUyA9ICJsaWJzb3VwLTIuNCB3ZWJraXRndGsgZ3RrKzMgaXNvLWNvZGVzIGNhLWNlcnRpZmljYXRlcyBhdmFoaSBsaWJub3RpZnkgZ2NyIGxpYnduY2szIFwKLQkgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdub21lLWRlc2t0b3AzIGxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSIKLQotaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KLSMgbGlid25jazMgaXMgeDExIG9ubHkKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2giCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIxNzJiNzgyNTYxMDBlOGQzYzYyOTc2NGFiZDBlMTQ5NSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImJlNjk5ZDQ4NDM3MTExMWFiYWU3NTRlNjY5MTg3MjE1ZGY3M2UyMTUzM2Y0NjFlNTEzYjc5NTM3ZDdhMWMxYzEiCi0KLUVYVFJBX09FQ09ORiArPSAiIC0tZGlzYWJsZS1uc3MgLS13aXRoLWRpc3RyaWJ1dG9yLW5hbWU9JHtESVNUUk99IgotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICB0b3VjaCAke1N9L2dub21lLWRvYy11dGlscy5tYWtlCi0gICAgc2VkIC1pIC1lIHM6aGVscDo6ZyAke1N9L01ha2VmaWxlLmFtCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGRhdGEgJHtkYXRhZGlyfS9kYnVzLTEgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbC9zZWFyY2gtcHJvdmlkZXJzIgotUkRFUEVORFNfJHtQTn0gPSAiaXNvLWNvZGVzIGFkd2FpdGEtaWNvbi10aGVtZSIKLVJSRUNPTU1FTkRTXyR7UE59ID0gImNhLWNlcnRpZmljYXRlcyIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjIwLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmE0ODBiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjIwLjMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJXZWJLaXQgYmFzZWQgd2ViIGJyb3dzZXIgZm9yIEdOT01FIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworREVQRU5EUyA9ICJsaWJzb3VwLTIuNCB3ZWJraXRndGsgZ3RrKzMgaXNvLWNvZGVzIGNhLWNlcnRpZmljYXRlcyBhdmFoaSBsaWJub3RpZnkgZ2NyIGxpYnduY2szIFwKKwkgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdub21lLWRlc2t0b3AzIGxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KKyMgbGlid25jazMgaXMgeDExIG9ubHkKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2giCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzMTgyMmI2YjE5OWY3MjRmMjEyYWU5MjAwYmMwNTVmMSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjRkOWRlMWJkYjQ0YzE0YWRmMjVhYTZkYzAyZWEzZGU2MDkyNWNmZjVlYjAxZmU4OTU0NWU2MDMyYzliNDI0YTIiCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZGlzYWJsZS1uc3MgLS13aXRoLWRpc3RyaWJ1dG9yLW5hbWU9JHtESVNUUk99IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgLWUgczpoZWxwOjpnICR7U30vTWFrZWZpbGUuYW0KK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwZGF0YSAke2RhdGFkaXJ9L2RidXMtMSAke2RhdGFkaXJ9L2dub21lLXNoZWxsL3NlYXJjaC1wcm92aWRlcnMiCitSREVQRU5EU18ke1BOfSA9ICJpc28tY29kZXMgYWR3YWl0YS1pY29uLXRoZW1lIgorUlJFQ09NTUVORFNfJHtQTn0gPSAiY2EtY2VydGlmaWNhdGVzIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xOC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMTguMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1MjNhNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xOC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGJpdHMgb2YgY3J5cHRvIFVJIGFuZCBwYXJzaW5nIGV0YyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCi0KLURFUEVORFMgPSAiZ3RrKzMgcDExLWtpdCBnbGliLTIuMCBsaWJnY3J5cHQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdub21lYmFzZSBndGstaWNvbi1jYWNoZSBndGstZG9jIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gdmFsYSBnb2JqZWN0LWludHJvc3BlY3Rpb24KLSMgZGVwZW5kcyBvbiBndGsrMywgYnV0IGFsc28geDExIHRocm91Z2ggZ3RrKy14MTEKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImI5NTliYWM5OWUxN2M5YmIwOTkwYTE1YzliZTExYWVkIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDRkMTZkYTVhZjU1MTQ4YTY5NDA1NTgzNWNjZDA3YWQzNGRhZjBhZDAzYmRhZDkyOWJmN2NhZDE1NjM3Y2UwMCIKLQotRklMRVNfJHtQTn0gKz0gIiBcCi0gICAgJHtkYXRhZGlyfS9kYnVzLTEgXAotICAgICR7ZGF0YWRpcn0vZ2NyLTMgXAotIgotCi0jIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDIyOS8KLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi0jIG9uIHg4Ni02NCB0aGUgaW50cm9zcGVjdGlvbiBiaW5hcnkgZ29lcyBpbnRvIAotIyBhbiBpbmZpbml0ZSBsb29wIHVuZGVyIHFlbXUgZHVyaW5nIGNvbXBpbGF0aW9uLCAKLSMgcHJpbnRpbmcgdGhlIGZvbGxvd2luZzoKLSMgCi0jIGdjcnlwdC1NZXNzYWdlOiBzZWxlY3QoKSBlcnJvcjogQmFkIGFkZHJlc3MKLSMKLSMgZ2NyeXB0LU1lc3NhZ2U6IHNlbGVjdCgpIGVycm9yOiBCYWQgYWRkcmVzcwotIwotIyBnY3J5cHQtTWVzc2FnZTogc2VsZWN0KCkgZXJyb3I6IEJhZCBhZGRyZXNzCi0jCi0jIFRoaXMgd2lsbCBiZSBpbnZlc3RpZ2F0ZWQgbGF0ZXIuCi1FWFRSQV9PRUNPTkZfYXBwZW5kX3g4Ni02NCA9ICIgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCi0KLSMgR2NyLTMuYnJva2VuOiBwb2t5L2J1aWxkLW1pcHM2NC90bXAvd29yay9taXBzNjQtcG9reS1saW51eC9saWJncGctZXJyb3IvMS4xOS1yMC9saWJncGctZXJyb3ItMS4xOS9zcmMvcG9zaXgtbG9jay5jOjExOTogZ2V0X2xvY2tfb2JqZWN0OiBBc3NlcnRpb24gYCEic2l6ZW9mIGxvY2sgb2JqIicgZmFpbGVkLgotIyBxZW11OiB1bmNhdWdodCB0YXJnZXQgc2lnbmFsIDYgKEFib3J0ZWQpIC0gY29yZSBkdW1wZWQKLUVYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ID0gIiAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjIwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyYTQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjIwLjAuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGJpdHMgb2YgY3J5cHRvIFVJIGFuZCBwYXJzaW5nIGV0YyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCisKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIGd0ayszIHAxMS1raXQgZ2xpYi0yLjAgbGliZ2NyeXB0IgorCitpbmhlcml0IGF1dG90b29scyBnbm9tZWJhc2UgZ3RrLWljb24tY2FjaGUgZ3RrLWRvYyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIHZhbGEgZ29iamVjdC1pbnRyb3NwZWN0aW9uCisjIGRlcGVuZHMgb24gZ3RrKzMsIGJ1dCBhbHNvIHgxMSB0aHJvdWdoIGd0aysteDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI0MzE0YmY4OWVhYzI5M2RkMGE5ZDgwNjU5M2ZmMWIzNSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjkwNTcyYzYyNmQ4YTcwODIyNTU2MGM0MmI0NDIxZjc5NDEzMTUyNDdmYTE2NzlkNGVmNTY5YmRlN2Y0YmIzNzkiCisKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7ZGF0YWRpcn0vZGJ1cy0xIFwKKyAgICAke2RhdGFkaXJ9L2djci0zIFwKKyIKKworIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjAyMjkvCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworIyBvbiB4ODYtNjQgdGhlIGludHJvc3BlY3Rpb24gYmluYXJ5IGdvZXMgaW50byAKKyMgYW4gaW5maW5pdGUgbG9vcCB1bmRlciBxZW11IGR1cmluZyBjb21waWxhdGlvbiwgCisjIHByaW50aW5nIHRoZSBmb2xsb3dpbmc6CisjIAorIyBnY3J5cHQtTWVzc2FnZTogc2VsZWN0KCkgZXJyb3I6IEJhZCBhZGRyZXNzCisjCisjIGdjcnlwdC1NZXNzYWdlOiBzZWxlY3QoKSBlcnJvcjogQmFkIGFkZHJlc3MKKyMKKyMgZ2NyeXB0LU1lc3NhZ2U6IHNlbGVjdCgpIGVycm9yOiBCYWQgYWRkcmVzcworIworIyBUaGlzIHdpbGwgYmUgaW52ZXN0aWdhdGVkIGxhdGVyLgorRVhUUkFfT0VDT05GX2FwcGVuZF94ODYtNjQgPSAiIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS1ndGstZG9jIgorCisjIEdjci0zLmJyb2tlbjogcG9reS9idWlsZC1taXBzNjQvdG1wL3dvcmsvbWlwczY0LXBva3ktbGludXgvbGliZ3BnLWVycm9yLzEuMTktcjAvbGliZ3BnLWVycm9yLTEuMTkvc3JjL3Bvc2l4LWxvY2suYzoxMTk6IGdldF9sb2NrX29iamVjdDogQXNzZXJ0aW9uIGAhInNpemVvZiBsb2NrIG9iaiInIGZhaWxlZC4KKyMgcWVtdTogdW5jYXVnaHQgdGFyZ2V0IHNpZ25hbCA2IChBYm9ydGVkKSAtIGNvcmUgZHVtcGVkCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NCA9ICIgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLWd0ay1kb2MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMyLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMyLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhOTRlZWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zMi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLVNVTU1BUlkgPSAiSW1hZ2UgbG9hZGluZyBsaWJyYXJ5IGZvciBHVEsrIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi5oO2VuZGxpbmU9MjY7bWQ1PTcyYjM5ZGE3Y2JkZGUyZTY2NTMyOWZlZjYxOGUxZDZiIgotCi1TRUNUSU9OID0gImxpYnMiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAiCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLQotU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL2ZhdGFsLWxvYWRlci5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjkyNzUwNzY2MzliYWEyNGEzNDJmM2UwMmM0MDI5MjBlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJiNjc3MWYxYWM3MmY2ODdhODk3MWU1OTgxMGI4ZGM2NThlNjVlN2QzMDg2YmQyZTY3NmU2MThmZDU0MWQwMzEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHBpeGJ1ZmNhY2hlIHB0ZXN0LWdub21lIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotTElCViA9ICIyLjEwLjAiCi0KLUdES19QSVhCVUZfTE9BREVSUyA/PSAicG5nIGpwZWciCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0dES19QSVhCVUZfTE9BREVSU30iCi1QQUNLQUdFQ09ORklHX2xpbnV4c3RkYmFzZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9ICR7R0RLX1BJWEJVRl9MT0FERVJTfSIKLVBBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKLQotUEFDS0FHRUNPTkZJR1twbmddID0gIi0td2l0aC1saWJwbmcsLS13aXRob3V0LWxpYnBuZyxsaWJwbmciCi1QQUNLQUdFQ09ORklHW2pwZWddID0gIi0td2l0aC1saWJqcGVnLC0td2l0aG91dC1saWJqcGVnLGpwZWciCi1QQUNLQUdFQ09ORklHW3RpZmZdID0gIi0td2l0aC1saWJ0aWZmLC0td2l0aG91dC1saWJ0aWZmLHRpZmYiCi1QQUNLQUdFQ09ORklHW2pwZWcyMDAwXSA9ICItLXdpdGgtbGliamFzcGVyLC0td2l0aG91dC1saWJqYXNwZXIsamFzcGVyIgotCi0jIFVzZSBHSU8gdG8gc25pZmYgaW1hZ2UgZm9ybWF0IGluc3RlYWQgb2YgdHJ5aW5nIGFsbCBsb2FkZXJzCi1QQUNLQUdFQ09ORklHW2dpby1zbmlmZl0gPSAiLS1lbmFibGUtZ2lvLXNuaWZmaW5nLC0tZGlzYWJsZS1naW8tc25pZmZpbmcsLHNoYXJlZC1taW1lLWluZm8iCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgxMSwtLXdpdGhvdXQteDExLHZpcnR1YWwvbGlieDExIgotCi1QQUNLQUdFUyA9KyAiJHtQTn0teGxpYiIKLQotRklMRVNfJHtQTn0teGxpYiA9ICIke2xpYmRpcn0vKnBpeGJ1Zl94bGliKiR7U09MSUJTfSIKLUFMTE9XX0VNUFRZXyR7UE59LXhsaWIgPSAiMSIKLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMiCi0KLUZJTEVTXyR7UE59LWRldiArPSAiIFwKLQkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKLQkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKLQkke2luY2x1ZGVkaXJ9LyogXAotCSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMvKi5sYSBcCi0iCi0KLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5nZGstcGl4YnVmLWxvYWRlci0uKiIKLVBBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgewotICAgIHBvc3RpbnN0X3BpeGJ1ZmxvYWRlciA9IGQuZ2V0VmFyKCJwb3N0aW5zdF9waXhidWZsb2FkZXIiLCBUcnVlKQotCi0gICAgbG9hZGVyc19yb290ID0gZC5leHBhbmQoJyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMnKQotCi0gICAgcGFja2FnZXMgPSAnICcuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBsb2FkZXJzX3Jvb3QsICdebGlicGl4YnVmbG9hZGVyLSguKilcLnNvJCcsICdnZGstcGl4YnVmLWxvYWRlci0lcycsICdHREsgcGl4YnVmIGxvYWRlciBmb3IgJXMnKSkKLSAgICBkLnNldFZhcignUElYQlVGX1BBQ0tBR0VTJywgcGFja2FnZXMpCi0KLSAgICAjIFRoZSB0ZXN0IHN1aXRlIGV4ZXJjaXNlcyBhbGwgdGhlIGxvYWRlcnMsIHNvIGVuc3VyZSB0aGV5IGFyZSBhbGwKLSAgICAjIGRlcGVuZGVuY2llcyBvZiB0aGUgcHRlc3QgcGFja2FnZS4KLSAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfZ2RrLXBpeGJ1Zi1wdGVzdCIsICIgIiArIHBhY2thZ2VzKQotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIE1vdmUgZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIGludG8gbGliZGlyIHNvIGl0IGlzIGFsd2F5cyBhdmFpbGFibGUKLQkjIGluIG11bHRpbGliIGJ1aWxkcy4KLQltdiAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgJHtEfS8ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLQlmaW5kICR7RH0ke2xpYmRpcn0gLW5hbWUgImxpYnBpeGJ1ZmxvYWRlci0qLmxhIiAtZXhlYyBybSBce1x9IFw7Ci0KLQljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLWNzb3VyY2UgXAotCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKLQotCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcGl4ZGF0YSBcCi0JCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQotCi0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKLQkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlIFwKLQkJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycwotfQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLVNTVEFURVBSRUlOU1RGVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnZGtwaXhidWZfc3N0YXRlX3ByZWluc3QiCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ2RrcGl4YnVmX3NzdGF0ZV9wcmVpbnN0IgotCi1nZGtwaXhidWZfc3N0YXRlX3ByZWluc3QoKSB7Ci0JaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIF07IHRoZW4KLQkJcm0gLXJmICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9LyoKLQlmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zNC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMzk0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjM0LjAuYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiSW1hZ2UgbG9hZGluZyBsaWJyYXJ5IGZvciBHVEsrIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi5oO2VuZGxpbmU9MjY7bWQ1PTcyYjM5ZGE3Y2JkZGUyZTY2NTMyOWZlZjYxOGUxZDZiIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2ZhdGFsLWxvYWRlci5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYzY2IxOWY5MmNmNzcwOWNjZjQ0YmJiNmZlMWZmNzBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ1NWU1YjM4M2VlMjE5YmQwZTIzYmY2ZWQ0NDI3ZDU2YTdkYjUzNzk3MjlhNmUzZTBhMGUwZWJhOWE4ZDg4NzkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHBpeGJ1ZmNhY2hlIHB0ZXN0LWdub21lIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYworCitMSUJWID0gIjIuMTAuMCIKKworR0RLX1BJWEJVRl9MT0FERVJTID89ICJwbmcganBlZyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKK1BBQ0tBR0VDT05GSUdfbGludXhzdGRiYXNlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gJHtHREtfUElYQlVGX0xPQURFUlN9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgorCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS13aXRoLWxpYnBuZywtLXdpdGhvdXQtbGlicG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS13aXRoLWxpYmpwZWcsLS13aXRob3V0LWxpYmpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbdGlmZl0gPSAiLS13aXRoLWxpYnRpZmYsLS13aXRob3V0LWxpYnRpZmYsdGlmZiIKK1BBQ0tBR0VDT05GSUdbanBlZzIwMDBdID0gIi0td2l0aC1saWJqYXNwZXIsLS13aXRob3V0LWxpYmphc3BlcixqYXNwZXIiCisKKyMgVXNlIEdJTyB0byBzbmlmZiBpbWFnZSBmb3JtYXQgaW5zdGVhZCBvZiB0cnlpbmcgYWxsIGxvYWRlcnMKK1BBQ0tBR0VDT05GSUdbZ2lvLXNuaWZmXSA9ICItLWVuYWJsZS1naW8tc25pZmZpbmcsLS1kaXNhYmxlLWdpby1zbmlmZmluZywsc2hhcmVkLW1pbWUtaW5mbyIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteDExLC0td2l0aG91dC14MTEsdmlydHVhbC9saWJ4MTEiCisKK1BBQ0tBR0VTID0rICIke1BOfS14bGliIgorCitGSUxFU18ke1BOfS14bGliID0gIiR7bGliZGlyfS8qcGl4YnVmX3hsaWIqJHtTT0xJQlN9IgorQUxMT1dfRU1QVFlfJHtQTn0teGxpYiA9ICIxIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIgXAorCSR7YmluZGlyfS9nZGstcGl4YnVmLWNzb3VyY2UgXAorCSR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAorCSR7aW5jbHVkZWRpcn0vKiBcCisJJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmdkay1waXhidWYtbG9hZGVyLS4qIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgcG9zdGluc3RfcGl4YnVmbG9hZGVyID0gZC5nZXRWYXIoInBvc3RpbnN0X3BpeGJ1ZmxvYWRlciIsIFRydWUpCisKKyAgICBsb2FkZXJzX3Jvb3QgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycycpCisKKyAgICBwYWNrYWdlcyA9ICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxvYWRlcnNfcm9vdCwgJ15saWJwaXhidWZsb2FkZXItKC4qKVwuc28kJywgJ2dkay1waXhidWYtbG9hZGVyLSVzJywgJ0dESyBwaXhidWYgbG9hZGVyIGZvciAlcycpKQorICAgIGQuc2V0VmFyKCdQSVhCVUZfUEFDS0FHRVMnLCBwYWNrYWdlcykKKworICAgICMgVGhlIHRlc3Qgc3VpdGUgZXhlcmNpc2VzIGFsbCB0aGUgbG9hZGVycywgc28gZW5zdXJlIHRoZXkgYXJlIGFsbAorICAgICMgZGVwZW5kZW5jaWVzIG9mIHRoZSBwdGVzdCBwYWNrYWdlLgorICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU19nZGstcGl4YnVmLXB0ZXN0IiwgIiAiICsgcGFja2FnZXMpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92ZSBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgaW50byBsaWJkaXIgc28gaXQgaXMgYWx3YXlzIGF2YWlsYWJsZQorCSMgaW4gbXVsdGlsaWIgYnVpbGRzLgorCW12ICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyAke0R9LyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSAibGlicGl4YnVmbG9hZGVyLSoubGEiIC1leGVjIHJtIFx7XH0gXDsKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUgXAorCQlHREtfUElYQlVGX01PRFVMRURJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzCit9CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1NUQVRFUFJFSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGdka3BpeGJ1Zl9zc3RhdGVfcHJlaW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnZGtwaXhidWZfc3N0YXRlX3ByZWluc3QiCisKK2dka3BpeGJ1Zl9zc3RhdGVfcHJlaW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgXTsgdGhlbgorCQlybSAtcmYgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vKgorCWZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xOC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMTguMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0NjBkOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xOC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotU1VNTUFSWSA9ICJHTk9NRSBsaWJyYXJ5IGZvciByZWFkaW5nIC5kZXNrdG9wIGZpbGVzIgotU0VDVElPTiA9ICJ4MTEvZ25vbWUiCi1MSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgotCi1CUE4gPSAiZ25vbWUtZGVza3RvcCIKLQotaW5oZXJpdCBnbm9tZSBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiOWE1ODc1MjQ3YWJkYjk5YmFkOTNmMWM0MjMwZDFkNmQiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJkZGQ0NmQwMjJkZTEzNzU0M2E3MWY1MGM3MzkyYjMyZjliOThkNWQzZjJiNTMwNDBiMzVmNTgwMmRlMmU3YjU2IgotCi1ERVBFTkRTICs9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdjb25mIGxpYnhyYW5kciB2aXJ0dWFsL2xpYngxMSBndGsrMyBnbGliLTIuMCBnbm9tZS1kb2MtdXRpbHMgZ25vbWUtY29tbW9uIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHhrZXlib2FyZC1jb25maWcgaXNvLWNvZGVzIgotCi1pbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjawotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXNrdG9wLWRvY3MiCi0KLVBBQ0tBR0VTID0rICJsaWJnbm9tZS1kZXNrdG9wMyIKLUZJTEVTX2xpYmdub21lLWRlc2t0b3AzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vbGliZ25vbWUtZGVza3RvcCovcG5wLmlkcyAke2RhdGFkaXJ9L2dub21lLyp4bWwiCi0KLVJSRUNPTU1FTkRTX2xpYmdub21lLWRlc2t0b3AzICs9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4yMC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjA2MWIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMjAuMi5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkdOT01FIGxpYnJhcnkgZm9yIHJlYWRpbmcgLmRlc2t0b3AgZmlsZXMiCitTRUNUSU9OID0gIngxMS9nbm9tZSIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK0JQTiA9ICJnbm9tZS1kZXNrdG9wIgorCitpbmhlcml0IGdub21lIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI4MzU0ZWQzODYyNGY1ZWI2YjVkMzQyNjdiNjU4YTljOSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjQ5MmMyZGE3YWE4YzNhOGI2NTc5NmU4MTcxZmM4ZjBkZmI1ZDMyMmRkMjc5OWMwZDc2MzkyZTFmYjA2MWUyYjIiCisKK0RFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdjb25mIGxpYnhyYW5kciB2aXJ0dWFsL2xpYngxMSBndGsrMyBnbGliLTIuMCBzdGFydHVwLW5vdGlmaWNhdGlvbiB4a2V5Ym9hcmQtY29uZmlnIGlzby1jb2RlcyIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgZ3RrLWRvYworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXNrdG9wLWRvY3MiCisKK1BBQ0tBR0VTID0rICJsaWJnbm9tZS1kZXNrdG9wMyIKK0ZJTEVTX2xpYmdub21lLWRlc2t0b3AzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vbGliZ25vbWUtZGVza3RvcCovcG5wLmlkcyAke2RhdGFkaXJ9L2dub21lLyp4bWwiCisKK1JSRUNPTU1FTkRTX2xpYmdub21lLWRlc2t0b3AzICs9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xOC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xOC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWM4ODQ1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTguMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLVNVTU1BUlkgPSAiR1RLKyBpY29uIHRoZW1lIgotSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvYWR3YWl0YS1pY29uLXRoZW1lLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJ4MTEvZ25vbWUiCi0KLUxJQ0VOU0UgPSAiTEdQTC0zLjAgfCBDQy1CWS1TQS0zLjAiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jODRjYWM4OGU0NmZjMDc2NDdlYTA3ZTZjMjRlZWI3YyIKLQotaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaWNvbi1jYWNoZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KLQotREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgotCi1NQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlYzFmYTNmZGU4M2FkMTY2YWU3MDc1YTk3ZGMxZWM0YiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZTljZTcyNjAwMWZkZDhlZTkzYzM5NGZkYzNjZGI5ZTE2MDNiYmVkNWI3YzYyZGY0NTNjY2Y1MjFlYzUwZTU4IgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIEJ1aWxkIHVzZXMgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgdG8gY3JlYXRlIHBuZyB2ZXJzaW9uczoKLSAgICAgICAgIyBubyBuZWVkIHRvIHN0b3JlIHRoZSBzdmdzIGFueW1vcmUuCi0Jcm0gLWYgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy5zdmcgXAotCSAgICAgICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMtcnRsLnN2ZwotfQotCi1QQUNLQUdFUyA9ICIke1BOfS1jdXJzb3JzICR7UE59LXN5bWJvbGljICR7UE59LWhpcmVzICR7UE59IgotCi1SUkVQTEFDRVNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKLVJDT05GTElDVFNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKLVJQUk9WSURFU18ke1BOfSA9ICJnbm9tZS1pY29uLXRoZW1lIgotCi1GSUxFU18ke1BOfS1jdXJzb3JzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL2N1cnNvcnMvIgotRklMRVNfJHtQTn0tc3ltYm9saWMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvKi8qLyouc3ltYm9saWMucG5nIgotRklMRVNfJHtQTn0taGlyZXMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMjU2eDI1Ni8iCi1GSUxFU18ke1BOfSA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8gXAotICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL3BrZ2NvbmZpZy9hZHdhaXRhLWljb24tdGhlbWUucGMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjIwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjBlYWViCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4yMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkdUSysgaWNvbiB0aGVtZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2Fkd2FpdGEtaWNvbi10aGVtZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitMSUNFTlNFID0gIkxHUEwtMy4wIHwgQ0MtQlktU0EtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Yzg0Y2FjODhlNDZmYzA3NjQ3ZWEwN2U2YzI0ZWViN2MiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWljb24tY2FjaGUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDExYmUyYmQ2OGRkOGIwYTNjODZhY2EyZWIzNTFjZTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2EwYTg4NzM0OWYzNDBkZDY0NDAzMmY4OWQ4MTI2NGI2OTRjNGIwMDZiZDUxYWYxYzJjMzY4ZDQzMWU3YWUzNSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBCdWlsZCB1c2VzIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIHRvIGNyZWF0ZSBwbmcgdmVyc2lvbnM6CisgICAgICAgICMgbm8gbmVlZCB0byBzdG9yZSB0aGUgc3ZncyBhbnltb3JlLgorCXJtIC1mICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMuc3ZnIFwKKwkgICAgICAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvc2NhbGFibGUvKi8qLXN5bWJvbGljLXJ0bC5zdmcKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tY3Vyc29ycyAke1BOfS1zeW1ib2xpYy1oaXJlcyAke1BOfS1zeW1ib2xpYyAke1BOfS1oaXJlcyAke1BOfSIKKworUlJFUExBQ0VTXyR7UE59ID0gImdub21lLWljb24tdGhlbWUiCitSQ09ORkxJQ1RTXyR7UE59ID0gImdub21lLWljb24tdGhlbWUiCitSUFJPVklERVNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKKworRklMRVNfJHtQTn0tY3Vyc29ycyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9jdXJzb3JzLyIKK0ZJTEVTXyR7UE59LXN5bWJvbGljLWhpcmVzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzk2eDk2LyovKi5zeW1ib2xpYy5wbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvNjR4NjQvKi8qLnN5bWJvbGljLnBuZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS80OHg0OC8qLyouc3ltYm9saWMucG5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzMyeDMyLyovKi5zeW1ib2xpYy5wbmciCitGSUxFU18ke1BOfS1zeW1ib2xpYyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8xNngxNi8qLyouc3ltYm9saWMucG5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzI0eDI0LyovKi5zeW1ib2xpYy5wbmciCitGSUxFU18ke1BOfS1oaXJlcyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8yNTZ4MjU2LyIKK0ZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvcGtnY29uZmlnL2Fkd2FpdGEtaWNvbi10aGVtZS5wYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFkZmFjNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1TVU1NQVJZID0gIkEgY29sbGVjdGlvbiBvZiBkb2N1bWVudGF0aW9uIHV0aWxpdGllcyBmb3IgdGhlIEdub21lIHByb2plY3QiCi1ERVNDUklQVElPTiA9ICJUaGUgR05PTUUgRG9jdW1lbnRhdGlvbiBCdWlsZCBVdGlsaXRpZXMgKGdub21lLWRvYy0gXAotdXRpbHMpIHdlcmUgY3JlYXRlZCB0byBtYWtlIGl0IGVhc2llciBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0byBcCi1pbmNsdWRlIGFuZCBjcmVhdGUgZG9jdW1lbnRhdGlvbiBpbiB0aGVpciByZWxlYXNlcy4gVGhleSBpbmNsdWRlIHRoZSBcCi14bWwycG8gdG9vbCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhbnNsYXRlIGFuZCBrZWVwIHVwIHRvIGRhdGUgXAotdHJhbnNsYXRpb25zIG9mIGRvY3VtZW50YXRpb24uIgotTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgotREVQRU5EUyA9ICJsaWJ4bWwyIGxpYnhzbHQgbGlieHNsdC1uYXRpdmUgZ25vbWUtZG9jLXV0aWxzLW5hdGl2ZSBnbGliLTIuMCIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbDItbmF0aXZlIGxpYnhzbHQtbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCi0KLWluaGVyaXQgZ25vbWViYXNlIGdldHRleHQgcHl0aG9uLWRpciBweXRob25uYXRpdmUgYXV0b3Rvb2xzLWJyb2tlbnNlcAotCi1DTEVBTkJST0tFTiA9ICIxIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1zY3JvbGxrZWVwZXIiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Ci19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7Ci0Jc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vZW52IHB5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJHtEfSR7YmluZGlyfS94bWwycG8KLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0veG1sKiAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgotCi1SREVQRU5EU18ke1BOfSA9ICJiYXNoIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy8wMDAxLWdsaWItZ2V0dGV4dC5tNC1VcGRhdGUtQU1fR0xJQl9HTlVfR0VUVEVYVC10by1tYXRjaC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy8wMDAxLWdsaWItZ2V0dGV4dC5tNC1VcGRhdGUtQU1fR0xJQl9HTlVfR0VUVEVYVC10by1tYXRjaC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmY2FiZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLzAwMDEtZ2xpYi1nZXR0ZXh0Lm00LVVwZGF0ZS1BTV9HTElCX0dOVV9HRVRURVhULXRvLW1hdGNoLS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDQyNmUzODQ2ODQ2M2E0YWJiNDk1Y2Y2YTI2OWI5NjM1YjIxMDc1MTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxNyBNYXkgMjAxNiAxMzo1MToyNCArMDMwMAorU3ViamVjdDogW1BBVENIXSBnbGliLWdldHRleHQubTQ6IFVwZGF0ZSBBTV9HTElCX0dOVV9HRVRURVhUIHRvIG1hdGNoIGdsaWIKKworVGhpcyBhdm9pZHMKKyAgZXJyb3I6IG00X2NvcHk6IHdvbid0IG92ZXJ3cml0ZSBkZWZpbmVkIG1hY3JvOiBnbGliX0RFRlVOCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW05vIHVwc3RyZWFtXQorLS0tCisgbTQvZ2xpYi1nZXR0ZXh0Lm00IHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tNC9nbGliLWdldHRleHQubTQgYi9tNC9nbGliLWdldHRleHQubTQKK2luZGV4IDgxZjhmZDIuLmUyYjE0MmIgMTAwNjQ0CistLS0gYS9tNC9nbGliLWdldHRleHQubTQKKysrKyBiL200L2dsaWItZ2V0dGV4dC5tNAorQEAgLTMxMCw3ICszMTAsNyBAQCBtc2dzdHIgIiIKKyAjIG9uIHZhcmlvdXMgdmFyaWFibGVzIG5lZWRlZCBieSB0aGUgTWFrZWZpbGUuaW4uaW4gaW5zdGFsbGVkIGJ5CisgIyBnbGliLWdldHRleHRpemUuCisgZG5sCistZ2xpYl9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCisrQVVfREVGVU4oW0dMSUJfR05VX0dFVFRFWFRdLAorICAgW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorICAgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSlkbmwKKyAKK0BAIC0zODEsNyArMzgxLDggQEAgZ2xpYl9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCisgICAgcm0gLWYgcG8vUE9URklMRVMKKyAgICBzZWQgLWUgIi9eIy9kIiAtZSAiL15cJC9kIiAtZSAicywuKiwJJHBvc3JjcHJlZml4JiBcXFxcLCIgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iIFwKKyAJPCAkc3JjZGlyL3BvL1BPVEZJTEVTLmluID4gcG8vUE9URklMRVMKKy0gIF0pCisrICBdCisrICBbWyQwOiBUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQuIFlvdSBzaG91bGQgdXNlIHVwc3RyZWFtIGdldHRleHQgaW5zdGVhZC5dXSkKKyAKKyAjIEFYX0dMSUJfREVGSU5FX0xPQ0FMRURJUihWQVJJQUJMRSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE2ZDY5OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUluIGNyb3NzIGVudmlyb25tZW50IHdlIGhhdmUgdG8gcHJlcGVuZCB0aGUgc3lzcm9vdCB0byB0aGUgcGF0aCBmb3VuZCBieQotcGtnY29uZmlnIHNpbmNlIHRoZSBwYXRoIHJldHVybmVkIGZyb20gcGtnY29uZmlnIGRvZXMgbm90IGhhdmUgc3lzcm9vdCBwcmVmaXhlZAotaXQgZW5kcyB1cCB1c2luZyB0aGUgZmlsZXMgZnJvbSBob3N0IHN5c3RlbS4gTm93IHVzdWFsbHkgcGVvcGxlIGhhdmUgZ25vbWUgaW5zdGFsbGVkCi1zbyB0aGUgYnVpbGQgc3VjY2VlZHMgYnV0IGlmIHlvdSBkb250IGhhdmUgZ25vbWUgaW5zdGFsbGVkIG9uIGJ1aWxkIGhvc3QgdGhlbgotaXQgd29udCBmaW5kIHRoZSBmaWxlcyBvbiBob3N0IHN5c3RlbSBhbmQgcGFja2FnZXMgdXNpbmcgZ25vbWUtZG9jLXV0aWxzIHdvbnQKLWNvbXBpbGUuCi0KLVRoaXMgc2hvdWxkIHdvcmsgb2sgd2l0aCBub24gc3lzcm9vdGVkIGJ1aWxkcyB0b28gc2luY2UgaW4gdGhvc2UgY2FzZXMgUEtHX0NPTkZJR19TWVNST09UX0RJUgotd2lsbCBiZSBlbXB0eQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+Ci0KLUluZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKLSsrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQotQEAgLTEzMywxMSArMTMzLDExIEBAIF9ET0NfQUJTX1NSQ0RJUiA9IEBhYnNfc3JjZGlyQAotIF94bWwycG8gPz0gYHdoaWNoIHhtbDJwb2AKLSBfeG1sMnBvX21vZGUgPSAkKGlmICQoRE9DX0lEKSxtYWxsYXJkLGRvY2Jvb2spCi0gCi0tX2RiMmh0bWwgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSBkYjJodG1sIGdub21lLWRvYy11dGlsc2AKLS1fZGIyb21mICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCi0tX2NodW5rcyAgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAotLV9jcmVkaXRzID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NyZWRpdHMueHNsCi0tX2lkcyA/PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzKS9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvaWRzLnhzbAotK19kYjJodG1sID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAotK19kYjJvbWYgID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCi0rX2NodW5rcyAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NodW5rcy54c2wKLStfY3JlZGl0cyA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKLStfaWRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0kKHNoZWxsICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzKS9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvaWRzLnhzbAotIAotIGlmIEVOQUJMRV9TSwotIF9FTkFCTEVfU0sgPSB0cnVlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMTk2YzAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotV2UgY2FuJ3QgdXNlICMhL2Z1bGwvcGF0aC90by9weXRob24gLXUgYXMgdGhpcyBjYW4gYmUgbG9uZ2VyIHRoYW4gc2hlYmFuZwotYWxsb3dzIGZvci4gIEluIG9yZGVyIHRvIGJlIGFwcHJvcHJhaXRlIGZvciB1cHN0cmVhbSBtb3JlIHdvcmsgd291bGQgYmUKLW5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbWFpbiB4bWwycG8gY29kZSBkb2Vzbid0IHJlbHkgb24gcHl0aG9uCi1iZWluZyBpbnZva2VkIHdpdGggLXUgKGZvcmNlIHN0ZGluL291dC9lcnIgdG8gYmUgdXNlZCByYXcpLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1dvdWxkIGJyZWFrIGJlaGF2aW9yIG9uIFdpbmRvd3NdCi1TaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+Ci0KLUluZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy94bWwycG8veG1sMnBvL01ha2VmaWxlLmFtCi0rKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQotQEAgLTcsNyArNyw2IEBAIENMRUFORklMRVMgPSB4bWwycG8KLSAKLSB4bWwycG86IHhtbDJwby5weS5pbgotIAkkKEFNX1ZfR0VOKXNlZCAtZSAicy9eVkVSU0lPTiA9LiovVkVSU0lPTiA9IFwiQFZFUlNJT05AXCIvIiBcCi0tCSAgICAtZSAicyteIyEuKnB5dGhvbi4qKyMhJChQWVRIT04pKyIgXAotIAkgIDwgJChzcmNkaXIpL3htbDJwby5weS5pbiA+IHhtbDJwbwotIAkkKEFNX1ZfYXQpY2htb2QgK3ggeG1sMnBvCi0gCi1JbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby94bWwycG8ucHkuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCi0rKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby94bWwycG8ucHkuaW4KLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vcHl0aG9uIC11Ci0rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0gIyAtKi0gZW5jb2Rpbmc6IHV0Zi04IC0qLQotICMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1LCAyMDA2IERhbmlsbyDFoGVnYW4gPGRhbmlsb0Bnbm9tZS5vcmc+LgotICMgQ29weXJpZ2h0IChjKSAyMDA5IENsYXVkZSBQYXJveiA8Y2xhdWRlQDJ4bGlicmUubmV0Pi4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNDY0OTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi1UaGlzIGFkZHMgdGhlIC1ub25ldCBvcHRpb24gdG8geHNsdHByb2MgaW52b2NhdGlvbnMsIHdoaWNoIGZpeGVzCi1jb21waWxlIGVycm9ycyB3aGVuIGJ1aWxkaW5nIHRoZSBnbm9tZS1kb2MtdXRpbHMgZG9jcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+Ci0KLUluZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvZG9jL3hzbHQvTWFrZWZpbGUuYW0KLSsrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQotQEAgLTIxLDE0ICsyMSwxNCBAQCBhbGw6ICQoeHNsZG9jX2RvY3MpICQoeHNsZG9jX3htbHMpCi0gCi0gJCh4c2xkb2NfZG9jcyk6ICQoeHNsZG9jX3hzbHMpIHhzbGRvYy5hd2sgeHNsZG9jLWZpbGwueHNsCi0gCSQoQU1fVl9HRU4pJChHRFVfQVdLKSAtZiAiJChzcmNkaXIpL3hzbGRvYy5hd2siICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCi0tCXwgeHNsdHByb2MgLW8gIiRAIiBcCi0rCXwgeHNsdHByb2MgLW5vbmV0IC1vICIkQCIgXAotIAktLXN0cmluZ3BhcmFtIGJhc2VuYW1lICIkKGJhc2VuYW1lICQobm90ZGlyICRAKSkiIFwKLSAJLS1zdHJpbmdwYXJhbSB4c2xfZmlsZSAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAotIAkiJChzcmNkaXIpL3hzbGRvYy1maWxsLnhzbCIgLQotIAotICQoeHNsZG9jX3htbHMpOiB4c2xkb2MtZG9jYm9vay54c2wKLSAkKHhzbGRvY194bWxzKTogQy8lLnhtbCA6IEMvJS54c2xkb2MKLS0JJChBTV9WX0dFTil4c2x0cHJvYyAtbyAiJEAiIFwKLSsJJChBTV9WX0dFTil4c2x0cHJvYyAtbm9uZXQgLW8gIiRAIiBcCi0gCS0tc3RyaW5ncGFyYW0gYmFzZW5hbWUgIiQoYmFzZW5hbWUgJChub3RkaXIgJEApKSIgXAotIAktLXN0cmluZ3BhcmFtIHhzbF9maWxlICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCi0gCSIkKHNyY2RpcikveHNsZG9jLWRvY2Jvb2sueHNsIiAiJDwiCi1AQCAtNjIsNyArNjIsNyBAQCBnbm9tZS1kb2MteHNsdC1jaGVjay1pbmNsdWRlczoKLSBnbm9tZS1kb2MteHNsdC1jaGVjay14c2xkb2M6ICQoeHNsZG9jX2RvY3MpCi0gCUBlY2hvICJSdW5uaW5nIHhzbGRvYyBjaGVja3MiOwotIAlAKGVjaG8gIjx4c2xkb2M+IjsgY2F0ICQoeHNsZG9jX2RvY3MpOyBlY2hvICI8L3hzbGRvYz4iKSBcCi0tCXwgeHNsdHByb2MgIiQoc3JjZGlyKS94c2xkb2MtY2hlY2sueHNsIiAtIDE+IC9kZXYvbnVsbAotKwl8IHhzbHRwcm9jIC1ub25ldCAiJChzcmNkaXIpL3hzbGRvYy1jaGVjay54c2wiIC0gMT4gL2Rldi9udWxsCi0gCi0gLlBIT05ZOiBjbGVhbi14c2xkb2MKLSBjbGVhbi1sb2NhbDogY2xlYW5feHNsZG9jCi1JbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCi0rKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKLUBAIC0zNyw3ICszNyw3IEBAICQoRE9DX0hfRklMRSk6ICQoRE9DX0hfRE9DUyk7Ci0gCWxpc3Q9JyQoRE9DX0hfRE9DUyknOyBmb3IgZG9jIGluICQkbGlzdDsgZG8gXAotIAkgIHhtbHBhdGg9ImBlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2A6JChzcmNkaXIpL2BlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2AiOyBcCi0gCSAgaWYgISB0ZXN0IC1mICIkJGRvYyI7IHRoZW4gZG9jPSIkKHNyY2RpcikvJCRkb2MiOyBmaTsgXAotLQkgIHhzbHRwcm9jIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9jcmVkaXRzKSAkJGRvYzsgXAotKwkgIHhzbHRwcm9jIC1ub25ldCAtLXBhdGggIiQkeG1scGF0aCIgJChfY3JlZGl0cykgJCRkb2M7IFwKLSAJZG9uZSB8IHNvcnQgfCB1bmlxIFwKLSAJICB8IGF3ayAnQkVHSU57cz0iIn17bj1zcGxpdCgkJDAsdywiPCIpO2lmKHMhPSIiJiZzIT1zdWJzdHIod1sxXSwxLGxlbmd0aCh3WzFdKS0xKSl7cHJpbnQgc307aWYobj4xKXtwcmludCAkJDA7cz0iIn1lbHNle3M9JCQwfX07RU5Ee2lmKHMhPSIiKXtwcmludCBzfX0nIFwKLSAJICB8IHNlZCAtZSAncy9cXC9cXFxcLycgLWUgJ3MvIi9cXCIvJyAtZSAncy9cKC4qXCkvXHQiXDEiLC8nID4+ICRALnRtcAotQEAgLTUwLDcgKzUwLDcgQEAgJChET0NfSF9GSUxFKTogJChET0NfSF9ET0NTKTsKLSAJICBkb2NpZD1gZWNobyAiJCRkb2MiIHwgc2VkIC1lICdzLy4qXC9cKFteL10qXClcLnhtbC9cMS8nIFwKLSAJICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYDsgXAotIAkgIGVjaG8gJCR4bWxwYXRoOyBcCi0tCSAgaWRzPWB4c2x0cHJvYyAtLXhpbmNsdWRlIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9pZHMpICQkZG9jYDsgXAotKwkgIGlkcz1geHNsdHByb2MgLW5vbmV0IC0teGluY2x1ZGUgLS1wYXRoICIkJHhtbHBhdGgiICQoX2lkcykgJCRkb2NgOyBcCi0gCSAgZm9yIGlkIGluICQkaWRzOyBkbyBcCi0gCSAgICBlY2hvICcjZGVmaW5lIEhFTFBfJ2BlY2hvICQkZG9jaWRgJ18nYGVjaG8gJCRpZCBcCi0gCSAgICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYCcgIickJGlkJyInID4+ICRALnRtcDsgXAotQEAgLTE5Nyw3ICsxOTcsNyBAQCAkKF9ET0NfT01GX0RCKSA6ICQoRE9DX01PRFVMRSktJS5vbWYgOiAlCi0gCSAgZWNobyAiVGhlIGZpbGUgJyQoX3NrY29udGVudHNsaXN0KScgZG9lcyBub3QgZXhpc3QuIiA+JjI7CQlcCi0gCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKLSAJICBleGl0IDE7IH0KLS0JJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCdkb2Nib29rJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KLSsJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwnZG9jYm9vaycpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9Ci0gCi0gIyMgQCBfRE9DX09NRl9IVE1MCi0gIyMgVGhlIE9NRiBmaWxlcyBmb3IgSFRNTCBvdXRwdXQKLUBAIC0yMTIsNyArMjEyLDcgQEAgaWYgRU5BQkxFX1NLCi0gCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKLSAJICBleGl0IDE7IH0KLSBlbmRpZgotLQkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ3hodG1sJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KLSsJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwneGh0bWwnKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQotIAotICMjIEAgX0RPQ19PTUZfQUxMCi0gIyMgQWxsIE9NRiBvdXRwdXQgZmlsZXMgdG8gYmUgYnVpbHQKLUBAIC0yNjcsNyArMjY3LDcgQEAgX0RPQ19DX0ZJR1VSRVMgPSAkKGlmICQoRE9DX0ZJR1VSRVMpLAotICMjIEFsbCBIVE1MIGRvY3VtZW50YXRpb24gaW4gdGhlIEMgbG9jYWxlCi0gIyBGSVhNRTogcHJvYmFibHkgaGF2ZSB0byBzaGVsbCBlc2NhcGUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG5hbWVzCi0gX0RPQ19DX0hUTUwgPSAkKGZvcmVhY2ggZiwJCQkJCQlcCi0tCSQoc2hlbGwgeHNsdHByb2MgLS14aW5jbHVkZSAJCQkJCVwKLSsJJChzaGVsbCB4c2x0cHJvYyAtbm9uZXQgLS14aW5jbHVkZSAJCQkJCVwKLSAJICAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIgkJXAotIAkgICQoX2NodW5rcykgIkMvJChET0NfTU9EVUxFKS54bWwiKSwJCQkJXAotIAlDLyQoZikueGh0bWwpCi1AQCAtMzkzLDcgKzM5Myw3IEBAIF9ET0NfSFRNTF9BTEwgPSAkKGlmICQoZmlsdGVyIGh0bWwgSFRNTCwKLSBfRE9DX0hUTUxfVE9QUyA9ICQoZm9yZWFjaCBsYyxDICQoX0RPQ19SRUFMX0xJTkdVQVMpLCQobGMpLyQoRE9DX01PRFVMRSkueGh0bWwpCi0gCi0gJChfRE9DX0hUTUxfVE9QUyk6ICQoX0RPQ19DX0RPQ1MpICQoX0RPQ19MQ19ET0NTKQotLQkkKEdEVV9WX0RCMkhUTSl4c2x0cHJvYyAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCi0rCSQoR0RVX1ZfREIySFRNKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCi0gCi0gCi0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzXzAuMjAuMTAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNjMDA1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzXzAuMjAuMTAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1yZXF1aXJlIGdub21lLWRvYy11dGlscy5pbmMKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCi0JCSAgICBmaWxlOi8vQ09QWUlORy5MR1BMO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3hzbHRwcm9jX25vbmV0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzYzY0YWQ3YmFjZDYxN2IwNDk5OWU0YTE2OGFmYWFjNSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImNiMDYzOWZmYTk1NTBiNmRkZjNiNjJmM2IxYWRkOTJmYjkyYWI0NjkwZDM1MWYyMzUzY2ZmZTY2OGJlOGM0YTYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLXRoZW1lcy1zdGFuZGFyZF8zLjIwLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLXRoZW1lcy1zdGFuZGFyZF8zLjIwLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4ZDg3MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtdGhlbWVzLXN0YW5kYXJkXzMuMjAuMi5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkdUSysyIHN0YW5kYXJkIHRoZW1lcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2dub21lLXRoZW1lcy1zdGFuZGFyZC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitMSUNFTlNFID0gIkxHUEwtMi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1pY29uLWNhY2hlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCisKK0RFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSBndGsrIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZGMzYjFkNTczMzA1NjFmZWE1MjQ4NDJkMGMwYjQ4NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZDBkOWM0YjJjOWY5MDA4MzAxYzNjMTg3OGViYjk1ODU5YTczNWI3ZmQ0YTZhNTE4ODAyYjk2MzdlNGE3OTE1IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWd0azMtZW5naW5lIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgIyBPbmx5IGJ1aWxkaW5nIEFkd2FpdGEsIHJlbW92ZSBoaWdoY29udHJhc3QgZmlsZXMKKyAgICAgICAgcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvdGhlbWVzL0hpZ2hDb250cmFzdCBcCisgICAgICAgICAgICAgICAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zCit9CisKKyMgVGhlcmUgY291bGQgYmUgZ25vbWUtdGhlbWUtaGlnaGNvbnRyYXN0IGFzIHdlbGwgYnV0IHRoYXQgcmVxdWlyZXMKKyMgZ3RrKzMgYW5kIGluY2x1ZGVzIGxvdHMgb2YgaWNvbnMgKGlzIGFsc28gYnJva2VuIHdpdGggQiAhPSBTKS4KK1BBQ0tBR0VTICs9ICJnbm9tZS10aGVtZS1hZHdhaXRhIFwKKyAgICAgICAgICAgICBnbm9tZS10aGVtZS1hZHdhaXRhLWRiZyBcCisgICAgICAgICAgICAgZ25vbWUtdGhlbWUtYWR3YWl0YS1kZXYiCisKK0ZJTEVTX2dub21lLXRoZW1lLWFkd2FpdGEgPSAiJHtwcmVmaXh9L3NoYXJlL3RoZW1lcy9BZHdhaXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMi4wLzIuMTAuMC9lbmdpbmVzL2xpYmFkd2FpdGEuc28iCitGSUxFU19nbm9tZS10aGVtZS1hZHdhaXRhLWRldiA9ICIke2xpYmRpcn0vZ3RrLTIuMC8yLjEwLjAvZW5naW5lcy9saWJhZHdhaXRhLmxhIgorRklMRVNfZ25vbWUtdGhlbWUtYWR3YWl0YS1kYmcgPSAiJHtsaWJkaXJ9L2d0ay0yLjAvMi4xMC4wL2VuZ2luZXMvLmRlYnVnL2xpYmFkd2FpdGEuc28iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1QcmVmaXgtcGtnLWNvbmZpZy1wYXRocy13aXRoLVBLR19DT05GSUdfU1lTUk9PVF9ESVItLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDEtUHJlZml4LXBrZy1jb25maWctcGF0aHMtd2l0aC1QS0dfQ09ORklHX1NZU1JPT1RfRElSLS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyNmQ4MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1QcmVmaXgtcGtnLWNvbmZpZy1wYXRocy13aXRoLVBLR19DT05GSUdfU1lTUk9PVF9ESVItLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotRnJvbSBhNTc2MDRlMjA1ZTY1MzVhY2Q5OTg5NDQ0YWQxZjVmNTAzOGY0ZmJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDggT2N0IDIwMTUgMTg6MzA6MzUgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSCAxLzRdIFByZWZpeCBwa2ctY29uZmlnIHBhdGhzIHdpdGggUEtHX0NPTkZJR19TWVNST09UX0RJUgotIGVudmlyb25tZW50IHZhcmlhYmxlCi0KLVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0cyB0aGUgbG9jYXRpb24gb2Ygc3lzcm9vdCBkaXJlY3RvcnkgaW4gY3Jvc3MtY29tcGlsYXRpb24KLWVudmlyb25tZW50czsgaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIHRoZSBwcmVmaXggd2lsbCBiZSBlbXB0eS4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtyZXZpZXcgb24gb2UtY29yZSBsaXN0XQotU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci0KLS0tLQotIE1ha2VmaWxlLWdpci5hbSAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KLSBtNC9pbnRyb3NwZWN0aW9uLm00IHwgIDggKysrKy0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUtZ2lyLmFtIGIvTWFrZWZpbGUtZ2lyLmFtCi1pbmRleCA5YWNhNjY0Li4wOWI5MzYwIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUtZ2lyLmFtCi0rKysgYi9NYWtlZmlsZS1naXIuYW0KLUBAIC01NSw4ICs1NSw4IEBAIGVsc2UKLSBlbmRpZgotIAotICMgZ2xpYgotLUdMSUJfSU5DTFVERURJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2xpYi0yLjApL2dsaWItMi4wCi0tR0xJQl9MSUJESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ2xpYi0yLjApCi0rR0xJQl9JTkNMVURFRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2xpYi0yLjApL2dsaWItMi4wCi0rR0xJQl9MSUJESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdsaWItMi4wKQotIAotIEdMSUJfTElCUkFSWT1nbGliLTIuMAotIAotQEAgLTkyLDggKzkyLDggQEAgR0xpYi0yLjAuZ2lyOiBnLWlyLXNjYW5uZXIgZy1pci1jb21waWxlciQoRVhFRVhUKQotIGdpci9EQnVzR0xpYi0xLjAudHlwZWxpYjogR09iamVjdC0yLjAuZ2lyCi0gCi0gIyBnb2JqZWN0Ci0tR09CSkVDVF9JTkNMVURFRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnb2JqZWN0LTIuMCkvZ2xpYi0yLjAKLS1HT0JKRUNUX0xJQkRJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnb2JqZWN0LTIuMCkKLStHT0JKRUNUX0lOQ0xVREVESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnb2JqZWN0LTIuMCkvZ2xpYi0yLjAKLStHT0JKRUNUX0xJQkRJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ29iamVjdC0yLjApCi0gCi0gR09CSkVDVF9MSUJSQVJZPWdvYmplY3QtMi4wCi0gCi1AQCAtMTIwLDggKzEyMCw4IEBAIEdPYmplY3RfMl8wX2dpcl9GSUxFUyA9IFwKLSBCVUlMVF9HSVJTT1VSQ0VTICs9IEdPYmplY3QtMi4wLmdpcgotIAotICMgZ21vZHVsZQotLUdNT0RVTEVfSU5DTFVERURJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ21vZHVsZS0yLjApL2dsaWItMi4wCi0tR01PRFVMRV9MSUJESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ21vZHVsZS0yLjApCi0rR01PRFVMRV9JTkNMVURFRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ21vZHVsZS0yLjApL2dsaWItMi4wCi0rR01PRFVMRV9MSUJESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdtb2R1bGUtMi4wKQotIAotIEdNT0RVTEVfTElCUkFSWT1nbW9kdWxlLTIuMAotIAotQEAgLTE0NiwxMyArMTQ2LDEzIEBAIEdNb2R1bGVfMl8wX2dpcl9GSUxFUyA9ICQoR0xJQl9JTkNMVURFRElSKS9nbW9kdWxlLmggXAotIEJVSUxUX0dJUlNPVVJDRVMgKz0gR01vZHVsZS0yLjAuZ2lyCi0gCi0gIyBnaW8KLS1HSU9fSU5DTFVERURJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2lvLTIuMCkvZ2xpYi0yLjAKLS1HSU9fTElCRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdpby0yLjApCi0rR0lPX0lOQ0xVREVESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnaW8tMi4wKS9nbGliLTIuMAotK0dJT19MSUJESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdpby0yLjApCi0gCi0gR0lPX0xJQlJBUlk9Z2lvLTIuMAotIAotIGlmIEhBVkVfR0lPX1VOSVgKLS1HSU9fVU5JWF9IRFJTPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnaW8tdW5peC0yLjApL2dpby11bml4LTIuMC9naW8vKi5oCi0rR0lPX1VOSVhfSERSUz0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdpby11bml4LTIuMCkvZ2lvLXVuaXgtMi4wL2dpby8qLmgKLSBHSU9fVU5JWF9QQUNLQUdFUyA9IGdpby11bml4LTIuMAotIGVsc2UKLSBHSU9fVU5JWF9IRFJTPQotZGlmZiAtLWdpdCBhL200L2ludHJvc3BlY3Rpb24ubTQgYi9tNC9pbnRyb3NwZWN0aW9uLm00Ci1pbmRleCBkODljM2Q5Li5iNTYyMjY2IDEwMDY0NAotLS0tIGEvbTQvaW50cm9zcGVjdGlvbi5tNAotKysrIGIvbTQvaW50cm9zcGVjdGlvbi5tNAotQEAgLTU2LDE0ICs1NiwxNCBAQCBtNF9kZWZpbmUoW19HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUxdLAotICAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj0KLSAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPQotICAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCi0tICAgICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX3NjYW5uZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLS0gICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2NvbXBpbGVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0tICAgICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotKyAgICAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9JFBLR19DT05GSUdfU1lTUk9PVF9ESVJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX3NjYW5uZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLSsgICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfY29tcGlsZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLSsgICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfZ2VuZXJhdGUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLSAgICAgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2lyZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0iJCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXR5cGVsaWJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCkiCi0gICAgICAgIElOVFJPU1BFQ1RJT05fQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgICBJTlRST1NQRUNUSU9OX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotLSAgICAgICBJTlRST1NQRUNUSU9OX01BS0VGSUxFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0rICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9JFBLR19DT05GSUdfU1lTUk9PVF9ESVJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1kYXRhZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgL2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvTWFrZWZpbGUuaW50cm9zcGVjdGlvbgotICAgICBmaQotICAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX1NDQU5ORVIpCi0gICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCi0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLVJldmVydC1hbi1pbmNvbXBsZXRlLXVwc3RyZWFtLWF0dGVtcHQtYXQtY3Jvc3MtY29tcGkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1SZXZlcnQtYW4taW5jb21wbGV0ZS11cHN0cmVhbS1hdHRlbXB0LWF0LWNyb3NzLWNvbXBpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYmFlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1SZXZlcnQtYW4taW5jb21wbGV0ZS11cHN0cmVhbS1hdHRlbXB0LWF0LWNyb3NzLWNvbXBpLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gM2E5ZDFlNWVlMGFhZTU2ZmFmZWMwYmViYTIwMTRjMTllNGZmMzEwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyMyBNYXIgMjAxNiAxNzowNzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDEvNV0gUmV2ZXJ0IGFuIGluY29tcGxldGUgdXBzdHJlYW0gYXR0ZW1wdCBhdCBjcm9zcy1jb21waWxlCisgc3VwcG9ydAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgY29tbW9uLm1rICAgICAgICAgICAgICAgIHwgNCAtLS0tCisgZ2lzY2FubmVyL2dkdW1wcGFyc2VyLnB5IHwgNiAtLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29tbW9uLm1rIGIvY29tbW9uLm1rCitpbmRleCBiNzc4ZjdhLi5lMjZjNjM3IDEwMDY0NAorLS0tIGEvY29tbW9uLm1rCisrKysgYi9jb21tb24ubWsKK0BAIC0yNCwxMiArMjQsOCBAQCBJTlRST1NQRUNUSU9OX1NDQU5ORVJfQVJHUyA9IFwKKyAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKSBcCisgICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9idWlsZGRpcikvZ2lyCisgCistIyBHSV9DUk9TU19MQVVOQ0hFUiBpcyB0aGUgY29tbWFuZCB0byB1c2UgZm9yIGV4ZWN1dGluZyBnLWlyLWNvbXBpbGVyLgorLSMgTm9ybWFsbHkgd2lsbCBiZSB1bmRlZmluZWQgYnV0IGNhbiBiZSBzZXQgKGUuZy4gdG8gd2luZSBvciBxZW11KQorLSMgd2hlbiBjcm9zcy1jb21waWxpbmcKKyBJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gXAorICAgICBlbnYgUEFUSD0iLmxpYnM6JChQQVRIKSIgXAorLSAgICAgICAgJChHSV9DUk9TU19MQVVOQ0hFUikgXAorICAgICAgICAgJCh0b3BfYnVpbGRkaXIpL2ctaXItY29tcGlsZXIkKEVYRUVYVCkKKyAKKyBJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MgPSBcCitkaWZmIC0tZ2l0IGEvZ2lzY2FubmVyL2dkdW1wcGFyc2VyLnB5IGIvZ2lzY2FubmVyL2dkdW1wcGFyc2VyLnB5CitpbmRleCAxMTM0ZjMzLi45YmRjMmJjIDEwMDY0NAorLS0tIGEvZ2lzY2FubmVyL2dkdW1wcGFyc2VyLnB5CisrKysgYi9naXNjYW5uZXIvZ2R1bXBwYXJzZXIucHkKK0BAIC0xNjIsMTIgKzE2Miw2IEBAIGJsb2IgY29udGFpbmluZyBkYXRhIGdsZWFuZWQgZnJvbSBHT2JqZWN0J3MgcHJpbWl0aXZlIGludHJvc3BlY3Rpb24uIiIiCisgICAgICAgICBvdXRfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9iaW5hcnkudG1wZGlyLCAnZHVtcC54bWwnKQorIAorICAgICAgICAgYXJncyA9IFtdCistCistICAgICAgICAjIFByZXBlbmQgdGhlIGxhdW5jaGVyIGNvbW1hbmQgYW5kIGFyZ3VtZW50cywgaWYgZGVmaW5lZAorLSAgICAgICAgbGF1bmNoZXIgPSBvcy5lbnZpcm9uLmdldCgnR0lfQ1JPU1NfTEFVTkNIRVInKQorLSAgICAgICAgaWYgbGF1bmNoZXI6CistICAgICAgICAgICAgYXJncy5leHRlbmQobGF1bmNoZXIuc3BsaXQoKSkKKy0KKyAgICAgICAgIGFyZ3MuZXh0ZW5kKHNlbGYuX2JpbmFyeS5hcmdzKQorICAgICAgICAgYXJncy5hcHBlbmQoJy0taW50cm9zcGVjdC1kdW1wPSVzLCVzJyAlIChpbl9wYXRoLCBvdXRfcGF0aCkpCisgCistLSAKKzIuNy4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtaG9zdC1naS1naS1jcm9zcy13cmFwcGVyLWFuZC1naS1sZGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1jb25maWd1cmUuYWMtYWRkLWhvc3QtZ2ktZ2ktY3Jvc3Mtd3JhcHBlci1hbmQtZ2ktbGRkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZlZmFiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtaG9zdC1naS1naS1jcm9zcy13cmFwcGVyLWFuZC1naS1sZGQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotRnJvbSBjNmU0ZjgzYzM3M2I1NzcxNjZhN2U0NjEzMGNlOGZmMDI1ZWU4NTE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDE5IE9jdCAyMDE1IDE4OjI5OjIxICswMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogYWRkIGhvc3QtZ2ksIGdpLWNyb3NzLXdyYXBwZXIsIGdpLWxkZC13cmFwcGVyCi0gYW5kIGludHJvc3BlY3Rpb24tZGF0YSBvcHRpb25zCi0KLVdpdGggdGhlIGZpcnN0IG9wdGlvbiwgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHRvb2xzIChnLWlyLWRvYy10b29sIGFuZCBnLWlyLXNjYW5uZXIpCi10aGF0IGFyZSBhbHJlYWR5IGluc3RhbGxlZCBpbiB0aGUgaG9zdCBzeXN0ZW0gd2lsbCBiZSB1c2VkIGZvciBidWlsZGluZyB0aGUgc291cmNlIHRyZWUuCi0KLVdpdGggdGhlIHNlY29uZCBvcHRpb24sIGctaXItc2Nhbm5lciB3aWxsIGJlIGluc3RydWN0ZWQgdG8gdXNlIGFuIGV4ZWN1dGFibGUKLXdyYXBwZXIgdG8gcnVuIGJpbmFyaWVzIGl0J3MgcHJvZHVjaW5nLCBhbmQgZy1pci1jb21waWxlciB3aWxsIGJlIHJ1bgotdGhyb3VnaCB0aGUgc2FtZSB3cmFwcGVyIChob3N0IHN5c3RlbSdzIGctaXItY29tcGlsZXIgY2Fubm90IGJlIHVzZWQgYmVjYXVzZQotaXQncyBwcm9kdWNpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG91dHB1dCkuCi0KLVdpdGggdGhlIHRoaXJkIG9wdGlvbiwgZ2lzY2FubmVyIHdpbGwgYmUgaW5zdHJ1Y3RlZCB0byB1c2UgYSBzcGVjaWFsIGxkZAotY29tbWFuZCBpbnN0ZWFkIG9mIHN5c3RlbSdzIGxkZCAod2hpY2ggZG9lcyBub3Qgd29yayB3aGVuIHRoZSBiaW5hcnkgdG8gaW5zcGVjdAotaXMgY29tcGlsZWQgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSkuCi0KLVdpdGggdGhlIGZvdXJ0aCBvcHRpb24sIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgYnVpbGRpbmcgb2YgaW50cm9zcGVjdGlvbiBkYXRhCi0oLmdpciBhbmQgLnR5cGVsaWIgZmlsZXMpLCB3aGljaCBtYXkgYmUgZGlmZmljdWx0IG9yIGltcG9zc2libGUgaW4gY3Jvc3MtY29tcGlsYXRpb24KLWVudmlyb25tZW50cywgYmVjYXVzZSBvZiBsYWNrIG9mIGVtdWxhdGlvbiAob3IgbmF0aXZlIGhhcmR3YXJlKSBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUKLW9uIHdoaWNoIHRoZSB0YXJnZXQgYmluYXJpZXMgY2FuIGJlIHJ1bi4KLQotVGhlc2Ugb3B0aW9ucyBhcmUgdXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGZvciBhIGRpZmZlcmVudCB0YXJnZXQgYXJjaGl0ZWN0dXJlLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3JldmlldyBvbiBvZS1jb3JlIGxpc3RdCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLQotLS0tCi0gTWFrZWZpbGUuYW0gICAgICAgfCAgMiArKwotIGNvbW1vbi5tayAgICAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gY29uZmlndXJlLmFjICAgICAgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSB0ZXN0cy9NYWtlZmlsZS5hbSB8ICA1ICsrKystCi0gNCBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi1pbmRleCA0MzdjNjczLi4xZWIzNTQ1IDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuYW0KLSsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMjEsNyArMjEsOSBAQCBpbmNsdWRlIE1ha2VmaWxlLWNtcGguYW0KLSBpbmNsdWRlIE1ha2VmaWxlLWdpcmVwb3NpdG9yeS5hbQotIGluY2x1ZGUgTWFrZWZpbGUtZ2lzY2FubmVyLmFtCi0gaW5jbHVkZSBNYWtlZmlsZS1leGFtcGxlcy5hbQotK2lmIEJVSUxEX0lOVFJPU1BFQ1RJT05fREFUQQotIGluY2x1ZGUgTWFrZWZpbGUtZ2lyLmFtCi0rZW5kaWYKLSBpbmNsdWRlIE1ha2VmaWxlLXRvb2xzLmFtCi0gaW5jbHVkZSBNYWtlZmlsZS1tc3ZjcHJvai5hbQotIAotZGlmZiAtLWdpdCBhL2NvbW1vbi5tayBiL2NvbW1vbi5tawotaW5kZXggZTI2YzYzNy4uOWYzYTY1ZiAxMDA2NDQKLS0tLSBhL2NvbW1vbi5tawotKysrIGIvY29tbW9uLm1rCi1AQCAtNiw2ICs2LDE1IEBACi0gIyBtb2R1bGUgaXRzZWxmLgotICMKLSAKLStpZiBVU0VfSE9TVF9HSQotK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IFwKLSsgICAgZW52IFBBVEg9IiQoUEFUSCkiIFwKLSsgICAgICAgIExQQVRIPS5saWJzIFwKLSsgICAgICAgIENDPSIkKENDKSIgXAotKyAgICAgICAgUFlUSE9OUEFUSD0kKHRvcF9idWlsZGRpcik6JCh0b3Bfc3JjZGlyKSBcCi0rICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX0JVSUxERElSPSQodG9wX2J1aWxkZGlyKSBcCi0rICAgICAgICBnLWlyLXNjYW5uZXIKLStlbHNlCi0gSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gXAotICAgICBlbnYgUEFUSD0iLmxpYnM6JChQQVRIKSIgXAotICAgICAgICAgTFBBVEg9LmxpYnMgXAotQEAgLTE0LDkgKzIzLDI0IEBAIElOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IFwKLSAgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fU1JDRElSPSQodG9wX3NyY2RpcikgXAotICAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9CVUlMRERJUj0kKHRvcF9idWlsZGRpcikgXAotICAgICAgICAgJCh0b3BfYnVpbGRkaXIpL2ctaXItc2Nhbm5lcgotK2VuZGlmCi0rCi0raWYgVVNFX0NST1NTX1dSQVBQRVIKLStDUk9TU19XUkFQUEVSX0FSRyA9IC0tdXNlLWJpbmFyeS13cmFwcGVyPSQoR0lfQ1JPU1NfV1JBUFBFUikKLStlbHNlCi0rQ1JPU1NfV1JBUFBFUl9BUkcgPQotK2VuZGlmCi0rCi0raWYgVVNFX0xERF9XUkFQUEVSCi0rTEREX1dSQVBQRVJfQVJHID0gLS11c2UtbGRkLXdyYXBwZXI9JChHSV9MRERfV1JBUFBFUikKLStlbHNlCi0rTEREX1dSQVBQRVJfQVJHID0KLStlbmRpZgotIAotIElOVFJPU1BFQ1RJT05fU0NBTk5FUl9BUkdTID0gXAotICAgICAtLXZlcmJvc2UgXAotKyAgICAkKENST1NTX1dSQVBQRVJfQVJHKSBcCi0rICAgICQoTEREX1dSQVBQRVJfQVJHKSBcCi0gICAgIC1JJCh0b3Bfc3JjZGlyKSBcCi0gICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHNyY2RpcikgXAotICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3Bfc3JjZGlyKS9naXIgXAotQEAgLTI0LDkgKzQ4LDE1IEBAIElOVFJPU1BFQ1RJT05fU0NBTk5FUl9BUkdTID0gXAotICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpIFwKLSAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9naXIKLSAKLStpZiBVU0VfQ1JPU1NfV1JBUFBFUgotK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBcCi0rICAgIGVudiBQQVRIPSIubGliczokKFBBVEgpIiBcCi0rICAgICAgICAkKEdJX0NST1NTX1dSQVBQRVIpICQodG9wX2J1aWxkZGlyKS8ubGlicy9nLWlyLWNvbXBpbGVyJChFWEVFWFQpCi0rZWxzZQotIElOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBcCi0gICAgIGVudiBQQVRIPSIubGliczokKFBBVEgpIiBcCi0gICAgICAgICAkKHRvcF9idWlsZGRpcikvZy1pci1jb21waWxlciQoRVhFRVhUKQotK2VuZGlmCi0gCi0gSU5UUk9TUEVDVElPTl9DT01QSUxFUl9BUkdTID0gXAotICAgICAtLWluY2x1ZGVkaXI9JChzcmNkaXIpIFwKLUBAIC0zNSw2ICs2NSwxNCBAQCBJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MgPSBcCi0gICAgIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikgXAotICAgICAtLWluY2x1ZGVkaXI9JCh0b3BfYnVpbGRkaXIpL2dpcgotIAotK2lmIFVTRV9IT1NUX0dJCi0rSU5UUk9TUEVDVElPTl9ET0NUT09MID0gXAotKyAgICBlbnYgUEFUSD0iJChQQVRIKSIgXAotKyAgICAgICAgTFBBVEg9LmxpYnMgXAotKyAgICAgICAgUFlUSE9OUEFUSD0kKHRvcF9idWlsZGRpcik6JCh0b3Bfc3JjZGlyKSBcCi0rICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX0JVSUxERElSPSQodG9wX2J1aWxkZGlyKSBcCi0rICAgICAgICBnLWlyLWRvYy10b29sCi0rZWxzZQotIElOVFJPU1BFQ1RJT05fRE9DVE9PTCA9IFwKLSAgICAgZW52IFBBVEg9Ii5saWJzOiQoUEFUSCkiIFwKLSAgICAgICAgIExQQVRIPS5saWJzIFwKLUBAIC00Miw2ICs4MCw3IEBAIElOVFJPU1BFQ1RJT05fRE9DVE9PTCA9IFwKLSAgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fU1JDRElSPSQodG9wX3NyY2RpcikgXAotICAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9CVUlMRERJUj0kKHRvcF9idWlsZGRpcikgXAotICAgICAgICAgJCh0b3BfYnVpbGRkaXIpL2ctaXItZG9jLXRvb2wKLStlbmRpZgotIAotIElOVFJPU1BFQ1RJT05fRE9DVE9PTF9BUkdTID0gXAotICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JChzcmNkaXIpIFwKLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGIxMTU5NmIuLmQ3OGFlNTIgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTM0Nyw2ICszNDcsNDggQEAgZmkKLSAKLSBBQ19TVUJTVChFWFRSQV9MSU5LX0ZMQUdTKQotIAotK0FDX0FSR19FTkFCTEUoW2hvc3QtZ2ldLAotK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtaG9zdC1naV0sW1VzZSBnb2JqZWN0IGludHJvc3BlY3Rpb24gdG9vbHMgaW5zdGFsbGVkIGluIHRoZSBob3N0IHN5c3RlbSAodXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nKV0pXSwKLStbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotKyAgeWVzKSBob3N0X2dpPXRydWUgOzsKLSsgIG5vKSAgaG9zdF9naT1mYWxzZSA7OwotKyAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1ob3N0LWdpXSkgOzsKLStlc2FjXSxbaG9zdF9naT1mYWxzZV0pCi0rQU1fQ09ORElUSU9OQUwoW1VTRV9IT1NUX0dJXSwgW3Rlc3QgeCRob3N0X2dpID0geHRydWVdKQotKwotK0FDX0FSR19FTkFCTEUoW2dpLWNyb3NzLXdyYXBwZXJdLAotK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2ktY3Jvc3Mtd3JhcHBlcj1wYXRoXSxbVXNlIGEgd3JhcHBlciB0byBydW4gZ2ljb21waWxlciBhbmQgYmluYXJpZXMgcHJvZHVjZWQgYnkgZ2lzY2FubmVyICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpXSldLAotK1sKLStHSV9DUk9TU19XUkFQUEVSPSIke2VuYWJsZXZhbH0iCi0rdXNlX3dyYXBwZXI9dHJ1ZQotK10sWwotK0dJX0NST1NTX1dSQVBQRVI9IiIKLSt1c2Vfd3JhcHBlcj1mYWxzZQotK10pCi0rQUNfU1VCU1QoR0lfQ1JPU1NfV1JBUFBFUikKLStBTV9DT05ESVRJT05BTChbVVNFX0NST1NTX1dSQVBQRVJdLCBbdGVzdCB4JHVzZV93cmFwcGVyID0geHRydWVdKQotKwotK0FDX0FSR19FTkFCTEUoW2dpLWxkZC13cmFwcGVyXSwKLStbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdpLWxkZC13cmFwcGVyPXBhdGhdLFtVc2UgYSBsZGQgd3JhcHBlciBpbnN0ZWFkIG9mIHN5c3RlbSdzIGxkZCBjb21tYW5kIGluIGdpc2Nhbm5lciAodXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nKV0pXSwKLStbCi0rR0lfTEREX1dSQVBQRVI9IiR7ZW5hYmxldmFsfSIKLSt1c2VfbGRkX3dyYXBwZXI9dHJ1ZQotK10sWwotK0dJX0xERF9XUkFQUEVSPSIiCi0rdXNlX2xkZF93cmFwcGVyPWZhbHNlCi0rXSkKLStBQ19TVUJTVChHSV9MRERfV1JBUFBFUikKLStBTV9DT05ESVRJT05BTChbVVNFX0xERF9XUkFQUEVSXSwgW3Rlc3QgeCR1c2VfbGRkX3dyYXBwZXIgPSB4dHJ1ZV0pCi0rCi0rQUNfQVJHX0VOQUJMRShbaW50cm9zcGVjdGlvbi1kYXRhXSwKLStbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWludHJvc3BlY3Rpb24tZGF0YV0sW0J1aWxkIGludHJvc3BlY3Rpb24gZGF0YSAoLmdpciBhbmQgLnR5cGVsaWIgZmlsZXMpIGluIGFkZGl0aW9uIHRvIGxpYnJhcnkgYW5kIHRvb2xzXSldLAotK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCi0rICB5ZXMpIGludHJvc3BlY3Rpb25fZGF0YT10cnVlIDs7Ci0rICBubykgIGludHJvc3BlY3Rpb25fZGF0YT1mYWxzZSA7OwotKyAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uLWRhdGFdKSA7OwotK2VzYWNdLFtpbnRyb3NwZWN0aW9uX2RhdGE9dHJ1ZV0pCi0rQU1fQ09ORElUSU9OQUwoW0JVSUxEX0lOVFJPU1BFQ1RJT05fREFUQV0sIFt0ZXN0IHgkaW50cm9zcGVjdGlvbl9kYXRhID0geHRydWVdKQotKwotIEFDX0NPTkZJR19GSUxFUyhbCi0gTWFrZWZpbGUKLSB0ZXN0cy9NYWtlZmlsZQotZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KLWluZGV4IGJkZDBmYTcuLjc1ZGQzYzkgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQotKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KLUBAIC0xLDYgKzEsOSBAQAotIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24ubWsKLSAKLS1TVUJESVJTID0gLiBzY2FubmVyIHJlcG9zaXRvcnkgb2Zmc2V0cyB3YXJuCi0rU1VCRElSUyA9IC4gc2Nhbm5lciByZXBvc2l0b3J5IHdhcm4KLStpZiBCVUlMRF9JTlRST1NQRUNUSU9OX0RBVEEKLStTVUJESVJTICs9IG9mZnNldHMKLStlbmRpZgotIAotIEVYVFJBX0RJU1Q9Ci0gQlVJTFRfU09VUkNFUz0KLS0tIAotMi42LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDEtZ2lzY2FubmVyLWFkZC1hLXVzZS1sZGQtd3JhcHBlci1vcHRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1naXNjYW5uZXItYWRkLWEtdXNlLWxkZC13cmFwcGVyLW9wdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyM2RjYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1naXNjYW5uZXItYWRkLWEtdXNlLWxkZC13cmFwcGVyLW9wdGlvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLUZyb20gMjkxYTkyZjIwMDk4MWE3NzJiMmQwMzczOWRmZmI1OTI2YTgyYzVhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotRGF0ZTogRnJpLCAzMCBPY3QgMjAxNSAxNjoyODo0NiArMDIwMAotU3ViamVjdDogW1BBVENIIDEvMl0gZ2lzY2FubmVyOiBhZGQgYSAtLXVzZS1sZGQtd3JhcHBlciBvcHRpb24KLQotVGhpcyBpcyB1c2VmdWwgaW4gY3Jvc3MtY29tcGlsZSBlbnZpcm9ubWVudHMgd2hlcmUgc3lzdGVtJ3MgbGRkCi1jb21tYW5kIGRvZXMgbm90IHdvcmsgb24gYmluYXJpZXMgYnVpbHQgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3JldmlldyBpbiBvZS1jb3JlXQotU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci0KLS0tLQotIGdpc2Nhbm5lci9zY2FubmVybWFpbi5weSB8IDMgKysrCi0gZ2lzY2FubmVyL3NobGlicy5weSAgICAgIHwgNCArKystCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weSBiL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weQotaW5kZXggZTM3ZDNlMy4uYjhmZmY1ZiAxMDA3NTUKLS0tLSBhL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weQotKysrIGIvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5Ci1AQCAtMTIxLDYgKzEyMSw5IEBAIGRlZiBfZ2V0X29wdGlvbl9wYXJzZXIoKToKLSAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXVzZS1iaW5hcnktd3JhcHBlciIsCi0gICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJ3cmFwcGVyIiwgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ3cmFwcGVyIHRvIHVzZSBmb3IgcnVubmluZyBwcm9ncmFtcyAodXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nKSIpCi0rICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS11c2UtbGRkLXdyYXBwZXIiLAotKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0ibGRkX3dyYXBwZXIiLCBkZWZhdWx0PU5vbmUsCi0rICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IndyYXBwZXIgdG8gdXNlIGluc3RlYWQgb2YgbGRkICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpIikKLSAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXByb2dyYW0tYXJnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJwcm9ncmFtX2FyZ3MiLCBkZWZhdWx0PVtdLAotICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJleHRyYSBhcmd1bWVudHMgdG8gcHJvZ3JhbSIpCi1kaWZmIC0tZ2l0IGEvZ2lzY2FubmVyL3NobGlicy5weSBiL2dpc2Nhbm5lci9zaGxpYnMucHkKLWluZGV4IDFhZDc1ZWUuLjQxMTE3YzYgMTAwNjQ0Ci0tLS0gYS9naXNjYW5uZXIvc2hsaWJzLnB5Ci0rKysgYi9naXNjYW5uZXIvc2hsaWJzLnB5Ci1AQCAtMTAwLDcgKzEwMCw5IEBAIGRlZiBfcmVzb2x2ZV9ub25fbGlidG9vbChvcHRpb25zLCBiaW5hcnksIGxpYnJhcmllcyk6Ci0gICAgICAgICAgICAgYXJncy5leHRlbmQobGlidG9vbCkKLSAgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1tb2RlPWV4ZWN1dGUnKQotICAgICAgICAgcGxhdGZvcm1fc3lzdGVtID0gcGxhdGZvcm0uc3lzdGVtKCkKLS0gICAgICAgIGlmIHBsYXRmb3JtX3N5c3RlbSA9PSAnRGFyd2luJzoKLSsgICAgICAgIGlmIG9wdGlvbnMubGRkX3dyYXBwZXI6Ci0rICAgICAgICAgICAgYXJncy5leHRlbmQoW29wdGlvbnMubGRkX3dyYXBwZXIsIGJpbmFyeS5hcmdzWzBdXSkKLSsgICAgICAgIGVsaWYgcGxhdGZvcm1fc3lzdGVtID09ICdEYXJ3aW4nOgotICAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFsnb3Rvb2wnLCAnLUwnLCBiaW5hcnkuYXJnc1swXV0pCi0gICAgICAgICBlbHNlOgotICAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFsnbGRkJywgYmluYXJ5LmFyZ3NbMF1dKQotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1naXNjYW5uZXItYWRkLXVzZS1iaW5hcnktd3JhcHBlci1vcHRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1naXNjYW5uZXItYWRkLXVzZS1iaW5hcnktd3JhcHBlci1vcHRpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMjQxYTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDEtZ2lzY2FubmVyLWFkZC11c2UtYmluYXJ5LXdyYXBwZXItb3B0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotRnJvbSAyMzIyZjM2MDU2MjY1ZjgwOWFhZmZiNzRmY2Y1YWMwYzgzMTI5NzUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDE5IE9jdCAyMDE1IDE4OjI2OjQwICswMzAwCi1TdWJqZWN0OiBbUEFUQ0ggMi80XSBnaXNjYW5uZXI6IGFkZCAtLXVzZS1iaW5hcnktd3JhcHBlciBvcHRpb24KLQotV2l0aCB0aGlzIG9wdGlvbiwgZ2lzY2FubmVyIHdpbGwgdXNlIGEgd3JhcHBlciBleGVjdXRhYmxlIHRvIHJ1bgotYmluYXJpZXMgaXQncyBwcm9kdWNpbmcsIGluc3RlYWQgb2YgcnVubmluZyB0aGVtIGRpcmVjdGx5LiBUaGlzCi1pcyB1c2VmdWwgd2hlbiBiaW5hcmllcyBhcmUgY3Jvc3MtY29tcGlsZWQgYW5kIGNhbm5vdCBiZSBydW4gZGlyZWN0bHksCi1idXQgdGhleSBjYW4gYmUgcnVuIHVzaW5nIGZvciBleGFtcGxlIFFFTVUgZW11bGF0aW9uLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3JldmlldyBvbiBvZS1jb3JlIGxpc3RdCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLQotLS0tCi0gZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5IHwgMTQgKysrKysrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5IGIvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5Ci1pbmRleCBiMzYyODRkLi5lMzdkM2UzIDEwMDc1NQotLS0tIGEvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5Ci0rKysgYi9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKLUBAIC0xMTgsNiArMTE4LDkgQEAgZGVmIF9nZXRfb3B0aW9uX3BhcnNlcigpOgotICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcHJvZ3JhbSIsCi0gICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwcm9ncmFtIiwgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwcm9ncmFtIHRvIGV4ZWN1dGUiKQotKyAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdXNlLWJpbmFyeS13cmFwcGVyIiwKLSsgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9IndyYXBwZXIiLCBkZWZhdWx0PU5vbmUsCi0rICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IndyYXBwZXIgdG8gdXNlIGZvciBydW5uaW5nIHByb2dyYW1zICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpIikKLSAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXByb2dyYW0tYXJnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJwcm9ncmFtX2FyZ3MiLCBkZWZhdWx0PVtdLAotICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJleHRyYSBhcmd1bWVudHMgdG8gcHJvZ3JhbSIpCi1AQCAtNDA2LDYgKzQwOSwxNyBAQCBkZWYgY3JlYXRlX2JpbmFyeSh0cmFuc2Zvcm1lciwgb3B0aW9ucywgYXJncyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkdW1wX3BhcnNlci5nZXRfZXJyb3JfcXVhcmtfZnVuY3Rpb25zKCkpCi0gCi0gICAgIHNobGlicyA9IHJlc29sdmVfc2hsaWJzKG9wdGlvbnMsIGJpbmFyeSwgb3B0aW9ucy5saWJyYXJpZXMpCi0rICAgIGlmIG9wdGlvbnMud3JhcHBlcjoKLSsgICAgICAgICMgVGhlIHdyYXBwZXIgbmVlZHMgdGhlIGJpbmFyeSBpdHNlbGYsIG5vdCB0aGUgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCwKLSsgICAgICAgICMgc28gd2UgY2hlY2sgaWYgbGlidG9vbCBoYXMgc25lYWtlZCB0aGUgYmluYXJ5IGludG8gLmxpYnMgc3ViZGlyZWN0b3J5Ci0rICAgICAgICAjIGFuZCBhZGp1c3QgdGhlIHBhdGggYWNjb3JkaW5nbHkKLSsJaW1wb3J0IG9zLnBhdGgKLSsgICAgICAgIGRpcl9uYW1lLCBiaW5hcnlfbmFtZSAgPSBvcy5wYXRoLnNwbGl0KGJpbmFyeS5hcmdzWzBdKQotKyAgICAgICAgbGlidG9vbF9iaW5hcnkgPSBvcy5wYXRoLmpvaW4oZGlyX25hbWUsICcubGlicycsIGJpbmFyeV9uYW1lKQotKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGlidG9vbF9iaW5hcnkpOgotKwkgICAgYmluYXJ5LmFyZ3NbMF0gPSBsaWJ0b29sX2JpbmFyeQotKwkjIFRoZW4gcHJlcGVuZCB0aGUgd3JhcHBlciB0byB0aGUgY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUKLSsgICAgICAgIGJpbmFyeS5hcmdzID0gW29wdGlvbnMud3JhcHBlcl0gKyBiaW5hcnkuYXJncwotICAgICBnZHVtcF9wYXJzZXIuc2V0X2ludHJvc3BlY3Rpb25fYmluYXJ5KGJpbmFyeSkKLSAgICAgZ2R1bXBfcGFyc2VyLnBhcnNlKCkKLSAgICAgcmV0dXJuIHNobGlicwotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMi1jb25maWd1cmUuYWMtYWRkLWhvc3QtZ2ktZ2ktY3Jvc3Mtd3JhcHBlci1naS1sZGQtd3JhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDItY29uZmlndXJlLmFjLWFkZC1ob3N0LWdpLWdpLWNyb3NzLXdyYXBwZXItZ2ktbGRkLXdyYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEwYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDItY29uZmlndXJlLmFjLWFkZC1ob3N0LWdpLWdpLWNyb3NzLXdyYXBwZXItZ2ktbGRkLXdyYS5wYXRjaApAQCAtMCwwICsxLDIwMyBAQAorRnJvbSBiMTUwM2ZlMjY5M2Q2MDJiM2UyNGU0YjgzMmRjMDkzNDk2MGQ1ZDIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBNb24sIDE5IE9jdCAyMDE1IDE4OjI5OjIxICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBjb25maWd1cmUuYWM6IGFkZCBob3N0LWdpLCBnaS1jcm9zcy13cmFwcGVyLAorIGdpLWxkZC13cmFwcGVyIGFuZCBpbnRyb3NwZWN0aW9uLWRhdGEgb3B0aW9ucworCitXaXRoIHRoZSBmaXJzdCBvcHRpb24sIGdvYmplY3QtaW50cm9zcGVjdGlvbiB0b29scyAoZy1pci1kb2MtdG9vbCBhbmQgZy1pci1zY2FubmVyKQordGhhdCBhcmUgYWxyZWFkeSBpbnN0YWxsZWQgaW4gdGhlIGhvc3Qgc3lzdGVtIHdpbGwgYmUgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIHNvdXJjZSB0cmVlLgorCitXaXRoIHRoZSBzZWNvbmQgb3B0aW9uLCBnLWlyLXNjYW5uZXIgd2lsbCBiZSBpbnN0cnVjdGVkIHRvIHVzZSBhbiBleGVjdXRhYmxlCit3cmFwcGVyIHRvIHJ1biBiaW5hcmllcyBpdCdzIHByb2R1Y2luZywgYW5kIGctaXItY29tcGlsZXIgd2lsbCBiZSBydW4KK3Rocm91Z2ggdGhlIHNhbWUgd3JhcHBlciAoaG9zdCBzeXN0ZW0ncyBnLWlyLWNvbXBpbGVyIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UKK2l0J3MgcHJvZHVjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvdXRwdXQpLgorCitXaXRoIHRoZSB0aGlyZCBvcHRpb24sIGdpc2Nhbm5lciB3aWxsIGJlIGluc3RydWN0ZWQgdG8gdXNlIGEgc3BlY2lhbCBsZGQKK2NvbW1hbmQgaW5zdGVhZCBvZiBzeXN0ZW0ncyBsZGQgKHdoaWNoIGRvZXMgbm90IHdvcmsgd2hlbiB0aGUgYmluYXJ5IHRvIGluc3BlY3QKK2lzIGNvbXBpbGVkIGZvciBhIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUpLgorCitXaXRoIHRoZSBmb3VydGggb3B0aW9uLCBpdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIGJ1aWxkaW5nIG9mIGludHJvc3BlY3Rpb24gZGF0YQorKC5naXIgYW5kIC50eXBlbGliIGZpbGVzKSwgd2hpY2ggbWF5IGJlIGRpZmZpY3VsdCBvciBpbXBvc3NpYmxlIGluIGNyb3NzLWNvbXBpbGF0aW9uCitlbnZpcm9ubWVudHMsIGJlY2F1c2Ugb2YgbGFjayBvZiBlbXVsYXRpb24gKG9yIG5hdGl2ZSBoYXJkd2FyZSkgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlCitvbiB3aGljaCB0aGUgdGFyZ2V0IGJpbmFyaWVzIGNhbiBiZSBydW4uCisKK1RoZXNlIG9wdGlvbnMgYXJlIHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZyBmb3IgYSBkaWZmZXJlbnQgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtyZXZpZXcgb24gb2UtY29yZSBsaXN0XQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICB8ICAyICsrCisgY29tbW9uLm1rICAgICAgICAgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBjb25maWd1cmUuYWMgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHRlc3RzL01ha2VmaWxlLmFtIHwgIDUgKysrKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDg3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGIwODBhODkuLmNlOGQyOWIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yMSw3ICsyMSw5IEBAIGluY2x1ZGUgTWFrZWZpbGUtY21waC5hbQorIGluY2x1ZGUgTWFrZWZpbGUtZ2lyZXBvc2l0b3J5LmFtCisgaW5jbHVkZSBNYWtlZmlsZS1naXNjYW5uZXIuYW0KKyBpbmNsdWRlIE1ha2VmaWxlLWV4YW1wbGVzLmFtCisraWYgQlVJTERfSU5UUk9TUEVDVElPTl9EQVRBCisgaW5jbHVkZSBNYWtlZmlsZS1naXIuYW0KKytlbmRpZgorIGluY2x1ZGUgTWFrZWZpbGUtdG9vbHMuYW0KKyBpbmNsdWRlIE1ha2VmaWxlLW1zdmNwcm9qLmFtCisgCitkaWZmIC0tZ2l0IGEvY29tbW9uLm1rIGIvY29tbW9uLm1rCitpbmRleCBlMjZjNjM3Li45ZjNhNjVmIDEwMDY0NAorLS0tIGEvY29tbW9uLm1rCisrKysgYi9jb21tb24ubWsKK0BAIC02LDYgKzYsMTUgQEAKKyAjIG1vZHVsZSBpdHNlbGYuCisgIworIAorK2lmIFVTRV9IT1NUX0dJCisrSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gXAorKyAgICBlbnYgUEFUSD0iJChQQVRIKSIgXAorKyAgICAgICAgTFBBVEg9LmxpYnMgXAorKyAgICAgICAgQ0M9IiQoQ0MpIiBcCisrICAgICAgICBQWVRIT05QQVRIPSQodG9wX2J1aWxkZGlyKTokKHRvcF9zcmNkaXIpIFwKKysgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fQlVJTERESVI9JCh0b3BfYnVpbGRkaXIpIFwKKysgICAgICAgIGctaXItc2Nhbm5lcgorK2Vsc2UKKyBJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBcCisgICAgIGVudiBQQVRIPSIubGliczokKFBBVEgpIiBcCisgICAgICAgICBMUEFUSD0ubGlicyBcCitAQCAtMTQsOSArMjMsMjQgQEAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gXAorICAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9TUkNESVI9JCh0b3Bfc3JjZGlyKSBcCisgICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX0JVSUxERElSPSQodG9wX2J1aWxkZGlyKSBcCisgICAgICAgICAkKHRvcF9idWlsZGRpcikvZy1pci1zY2FubmVyCisrZW5kaWYKKysKKytpZiBVU0VfQ1JPU1NfV1JBUFBFUgorK0NST1NTX1dSQVBQRVJfQVJHID0gLS11c2UtYmluYXJ5LXdyYXBwZXI9JChHSV9DUk9TU19XUkFQUEVSKQorK2Vsc2UKKytDUk9TU19XUkFQUEVSX0FSRyA9CisrZW5kaWYKKysKKytpZiBVU0VfTEREX1dSQVBQRVIKKytMRERfV1JBUFBFUl9BUkcgPSAtLXVzZS1sZGQtd3JhcHBlcj0kKEdJX0xERF9XUkFQUEVSKQorK2Vsc2UKKytMRERfV1JBUFBFUl9BUkcgPQorK2VuZGlmCisgCisgSU5UUk9TUEVDVElPTl9TQ0FOTkVSX0FSR1MgPSBcCisgICAgIC0tdmVyYm9zZSBcCisrICAgICQoQ1JPU1NfV1JBUFBFUl9BUkcpIFwKKysgICAgJChMRERfV1JBUFBFUl9BUkcpIFwKKyAgICAgLUkkKHRvcF9zcmNkaXIpIFwKKyAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQoc3JjZGlyKSBcCisgICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9zcmNkaXIpL2dpciBcCitAQCAtMjQsOSArNDgsMTUgQEAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSX0FSR1MgPSBcCisgICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9idWlsZGRpcikgXAorICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dpcgorIAorK2lmIFVTRV9DUk9TU19XUkFQUEVSCisrSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IFwKKysgICAgZW52IFBBVEg9Ii5saWJzOiQoUEFUSCkiIFwKKysgICAgICAgICQoR0lfQ1JPU1NfV1JBUFBFUikgJCh0b3BfYnVpbGRkaXIpLy5saWJzL2ctaXItY29tcGlsZXIkKEVYRUVYVCkKKytlbHNlCisgSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IFwKKyAgICAgZW52IFBBVEg9Ii5saWJzOiQoUEFUSCkiIFwKKyAgICAgICAgICQodG9wX2J1aWxkZGlyKS9nLWlyLWNvbXBpbGVyJChFWEVFWFQpCisrZW5kaWYKKyAKKyBJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MgPSBcCisgICAgIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgXAorQEAgLTM1LDYgKzY1LDE0IEBAIElOVFJPU1BFQ1RJT05fQ09NUElMRVJfQVJHUyA9IFwKKyAgICAgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKSBcCisgICAgIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ2lyCisgCisraWYgVVNFX0hPU1RfR0kKKytJTlRST1NQRUNUSU9OX0RPQ1RPT0wgPSBcCisrICAgIGVudiBQQVRIPSIkKFBBVEgpIiBcCisrICAgICAgICBMUEFUSD0ubGlicyBcCisrICAgICAgICBQWVRIT05QQVRIPSQodG9wX2J1aWxkZGlyKTokKHRvcF9zcmNkaXIpIFwKKysgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fQlVJTERESVI9JCh0b3BfYnVpbGRkaXIpIFwKKysgICAgICAgIGctaXItZG9jLXRvb2wKKytlbHNlCisgSU5UUk9TUEVDVElPTl9ET0NUT09MID0gXAorICAgICBlbnYgUEFUSD0iLmxpYnM6JChQQVRIKSIgXAorICAgICAgICAgTFBBVEg9LmxpYnMgXAorQEAgLTQyLDYgKzgwLDcgQEAgSU5UUk9TUEVDVElPTl9ET0NUT09MID0gXAorICAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9TUkNESVI9JCh0b3Bfc3JjZGlyKSBcCisgICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX0JVSUxERElSPSQodG9wX2J1aWxkZGlyKSBcCisgICAgICAgICAkKHRvcF9idWlsZGRpcikvZy1pci1kb2MtdG9vbAorK2VuZGlmCisgCisgSU5UUk9TUEVDVElPTl9ET0NUT09MX0FSR1MgPSBcCisgICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHNyY2RpcikgXAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNmM5MWZhNS4uMjEzNDBhNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzYwLDYgKzM2MCw0OCBAQCBmaQorIAorIEFDX1NVQlNUKEVYVFJBX0xJTktfRkxBR1MpCisgCisrQUNfQVJHX0VOQUJMRShbaG9zdC1naV0sCisrW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ob3N0LWdpXSxbVXNlIGdvYmplY3QgaW50cm9zcGVjdGlvbiB0b29scyBpbnN0YWxsZWQgaW4gdGhlIGhvc3Qgc3lzdGVtICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpXSldLAorK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIGhvc3RfZ2k9dHJ1ZSA7OworKyAgbm8pICBob3N0X2dpPWZhbHNlIDs7CisrICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWhvc3QtZ2ldKSA7OworK2VzYWNdLFtob3N0X2dpPWZhbHNlXSkKKytBTV9DT05ESVRJT05BTChbVVNFX0hPU1RfR0ldLCBbdGVzdCB4JGhvc3RfZ2kgPSB4dHJ1ZV0pCisrCisrQUNfQVJHX0VOQUJMRShbZ2ktY3Jvc3Mtd3JhcHBlcl0sCisrW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1naS1jcm9zcy13cmFwcGVyPXBhdGhdLFtVc2UgYSB3cmFwcGVyIHRvIHJ1biBnaWNvbXBpbGVyIGFuZCBiaW5hcmllcyBwcm9kdWNlZCBieSBnaXNjYW5uZXIgKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZyldKV0sCisrWworK0dJX0NST1NTX1dSQVBQRVI9IiR7ZW5hYmxldmFsfSIKKyt1c2Vfd3JhcHBlcj10cnVlCisrXSxbCisrR0lfQ1JPU1NfV1JBUFBFUj0iIgorK3VzZV93cmFwcGVyPWZhbHNlCisrXSkKKytBQ19TVUJTVChHSV9DUk9TU19XUkFQUEVSKQorK0FNX0NPTkRJVElPTkFMKFtVU0VfQ1JPU1NfV1JBUFBFUl0sIFt0ZXN0IHgkdXNlX3dyYXBwZXIgPSB4dHJ1ZV0pCisrCisrQUNfQVJHX0VOQUJMRShbZ2ktbGRkLXdyYXBwZXJdLAorK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2ktbGRkLXdyYXBwZXI9cGF0aF0sW1VzZSBhIGxkZCB3cmFwcGVyIGluc3RlYWQgb2Ygc3lzdGVtJ3MgbGRkIGNvbW1hbmQgaW4gZ2lzY2FubmVyICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpXSldLAorK1sKKytHSV9MRERfV1JBUFBFUj0iJHtlbmFibGV2YWx9IgorK3VzZV9sZGRfd3JhcHBlcj10cnVlCisrXSxbCisrR0lfTEREX1dSQVBQRVI9IiIKKyt1c2VfbGRkX3dyYXBwZXI9ZmFsc2UKKytdKQorK0FDX1NVQlNUKEdJX0xERF9XUkFQUEVSKQorK0FNX0NPTkRJVElPTkFMKFtVU0VfTEREX1dSQVBQRVJdLCBbdGVzdCB4JHVzZV9sZGRfd3JhcHBlciA9IHh0cnVlXSkKKysKKytBQ19BUkdfRU5BQkxFKFtpbnRyb3NwZWN0aW9uLWRhdGFdLAorK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtaW50cm9zcGVjdGlvbi1kYXRhXSxbQnVpbGQgaW50cm9zcGVjdGlvbiBkYXRhICguZ2lyIGFuZCAudHlwZWxpYiBmaWxlcykgaW4gYWRkaXRpb24gdG8gbGlicmFyeSBhbmQgdG9vbHNdKV0sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgaW50cm9zcGVjdGlvbl9kYXRhPXRydWUgOzsKKysgIG5vKSAgaW50cm9zcGVjdGlvbl9kYXRhPWZhbHNlIDs7CisrICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWludHJvc3BlY3Rpb24tZGF0YV0pIDs7CisrZXNhY10sW2ludHJvc3BlY3Rpb25fZGF0YT10cnVlXSkKKytBTV9DT05ESVRJT05BTChbQlVJTERfSU5UUk9TUEVDVElPTl9EQVRBXSwgW3Rlc3QgeCRpbnRyb3NwZWN0aW9uX2RhdGEgPSB4dHJ1ZV0pCisrCisgQUNfQ09ORklHX0ZJTEVTKFsKKyBNYWtlZmlsZQorIHRlc3RzL01ha2VmaWxlCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggYmRkMGZhNy4uNzVkZDNjOSAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw5IEBACisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi5taworIAorLVNVQkRJUlMgPSAuIHNjYW5uZXIgcmVwb3NpdG9yeSBvZmZzZXRzIHdhcm4KKytTVUJESVJTID0gLiBzY2FubmVyIHJlcG9zaXRvcnkgd2FybgorK2lmIEJVSUxEX0lOVFJPU1BFQ1RJT05fREFUQQorK1NVQkRJUlMgKz0gb2Zmc2V0cworK2VuZGlmCisgCisgRVhUUkFfRElTVD0KKyBCVUlMVF9TT1VSQ0VTPQorLS0gCisyLjcuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMy1naXNjYW5uZXItYWRkLXVzZS1iaW5hcnktd3JhcHBlci1vcHRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMy1naXNjYW5uZXItYWRkLXVzZS1iaW5hcnktd3JhcHBlci1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxZWFjYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAzLWdpc2Nhbm5lci1hZGQtdXNlLWJpbmFyeS13cmFwcGVyLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDcwNGI4ODhkMGFiZmIwMTA2NzM1MmM0MDE1NmY0OWY2NTU2OTFjN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTkgT2N0IDIwMTUgMTg6MjY6NDAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIGdpc2Nhbm5lcjogYWRkIC0tdXNlLWJpbmFyeS13cmFwcGVyIG9wdGlvbgorCitXaXRoIHRoaXMgb3B0aW9uLCBnaXNjYW5uZXIgd2lsbCB1c2UgYSB3cmFwcGVyIGV4ZWN1dGFibGUgdG8gcnVuCitiaW5hcmllcyBpdCdzIHByb2R1Y2luZywgaW5zdGVhZCBvZiBydW5uaW5nIHRoZW0gZGlyZWN0bHkuIFRoaXMKK2lzIHVzZWZ1bCB3aGVuIGJpbmFyaWVzIGFyZSBjcm9zcy1jb21waWxlZCBhbmQgY2Fubm90IGJlIHJ1biBkaXJlY3RseSwKK2J1dCB0aGV5IGNhbiBiZSBydW4gdXNpbmcgZm9yIGV4YW1wbGUgUUVNVSBlbXVsYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbcmV2aWV3IG9uIG9lLWNvcmUgbGlzdF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5IHwgMTQgKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5IGIvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5CitpbmRleCA2MzM0OTZmLi5kNjg0Y2QwIDEwMDc1NQorLS0tIGEvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5CisrKysgYi9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKK0BAIC0xMjQsNiArMTI0LDkgQEAgZGVmIF9nZXRfb3B0aW9uX3BhcnNlcigpOgorICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcHJvZ3JhbSIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwcm9ncmFtIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwcm9ncmFtIHRvIGV4ZWN1dGUiKQorKyAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdXNlLWJpbmFyeS13cmFwcGVyIiwKKysgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9IndyYXBwZXIiLCBkZWZhdWx0PU5vbmUsCisrICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IndyYXBwZXIgdG8gdXNlIGZvciBydW5uaW5nIHByb2dyYW1zICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpIikKKyAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXByb2dyYW0tYXJnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJwcm9ncmFtX2FyZ3MiLCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJleHRyYSBhcmd1bWVudHMgdG8gcHJvZ3JhbSIpCitAQCAtNDE5LDYgKzQyMiwxNyBAQCBkZWYgY3JlYXRlX2JpbmFyeSh0cmFuc2Zvcm1lciwgb3B0aW9ucywgYXJncyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkdW1wX3BhcnNlci5nZXRfZXJyb3JfcXVhcmtfZnVuY3Rpb25zKCkpCisgCisgICAgIHNobGlicyA9IHJlc29sdmVfc2hsaWJzKG9wdGlvbnMsIGJpbmFyeSwgb3B0aW9ucy5saWJyYXJpZXMpCisrICAgIGlmIG9wdGlvbnMud3JhcHBlcjoKKysgICAgICAgICMgVGhlIHdyYXBwZXIgbmVlZHMgdGhlIGJpbmFyeSBpdHNlbGYsIG5vdCB0aGUgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCwKKysgICAgICAgICMgc28gd2UgY2hlY2sgaWYgbGlidG9vbCBoYXMgc25lYWtlZCB0aGUgYmluYXJ5IGludG8gLmxpYnMgc3ViZGlyZWN0b3J5CisrICAgICAgICAjIGFuZCBhZGp1c3QgdGhlIHBhdGggYWNjb3JkaW5nbHkKKysgICAgICAgIGltcG9ydCBvcy5wYXRoCisrICAgICAgICBkaXJfbmFtZSwgYmluYXJ5X25hbWUgID0gb3MucGF0aC5zcGxpdChiaW5hcnkuYXJnc1swXSkKKysgICAgICAgIGxpYnRvb2xfYmluYXJ5ID0gb3MucGF0aC5qb2luKGRpcl9uYW1lLCAnLmxpYnMnLCBiaW5hcnlfbmFtZSkKKysgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxpYnRvb2xfYmluYXJ5KToKKysgICAgICAgICAgICBiaW5hcnkuYXJnc1swXSA9IGxpYnRvb2xfYmluYXJ5CisrCSMgVGhlbiBwcmVwZW5kIHRoZSB3cmFwcGVyIHRvIHRoZSBjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZQorKyAgICAgICAgYmluYXJ5LmFyZ3MgPSBbb3B0aW9ucy53cmFwcGVyXSArIGJpbmFyeS5hcmdzCisgICAgIGdkdW1wX3BhcnNlci5zZXRfaW50cm9zcGVjdGlvbl9iaW5hcnkoYmluYXJ5KQorICAgICBnZHVtcF9wYXJzZXIucGFyc2UoKQorICAgICByZXR1cm4gc2hsaWJzCistLSAKKzIuNy4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDA0LWdpc2Nhbm5lci1hZGQtYS11c2UtbGRkLXdyYXBwZXItb3B0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDQtZ2lzY2FubmVyLWFkZC1hLXVzZS1sZGQtd3JhcHBlci1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiNzFlNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDA0LWdpc2Nhbm5lci1hZGQtYS11c2UtbGRkLXdyYXBwZXItb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gZDRhZDU3ZmQ0YTMyYzRmMGQyZjA1MjJhMzA5MGVmOTQwNzQ2NDMxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogRnJpLCAzMCBPY3QgMjAxNSAxNjoyODo0NiArMDIwMAorU3ViamVjdDogW1BBVENIIDQvNV0gZ2lzY2FubmVyOiBhZGQgYSAtLXVzZS1sZGQtd3JhcHBlciBvcHRpb24KKworVGhpcyBpcyB1c2VmdWwgaW4gY3Jvc3MtY29tcGlsZSBlbnZpcm9ubWVudHMgd2hlcmUgc3lzdGVtJ3MgbGRkCitjb21tYW5kIGRvZXMgbm90IHdvcmsgb24gYmluYXJpZXMgYnVpbHQgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3JldmlldyBpbiBvZS1jb3JlXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBnaXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkgfCAzICsrKworIGdpc2Nhbm5lci9zaGxpYnMucHkgICAgICB8IDQgKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkgYi9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKK2luZGV4IGQ2ODRjZDAuLjFiM2IzNjkgMTAwNzU1CistLS0gYS9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKKysrKyBiL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weQorQEAgLTEyNyw2ICsxMjcsOSBAQCBkZWYgX2dldF9vcHRpb25fcGFyc2VyKCk6CisgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS11c2UtYmluYXJ5LXdyYXBwZXIiLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0id3JhcHBlciIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0id3JhcHBlciB0byB1c2UgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMgKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZykiKQorKyAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdXNlLWxkZC13cmFwcGVyIiwKKysgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImxkZF93cmFwcGVyIiwgZGVmYXVsdD1Ob25lLAorKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ3cmFwcGVyIHRvIHVzZSBpbnN0ZWFkIG9mIGxkZCAodXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nKSIpCisgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1wcm9ncmFtLWFyZyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0icHJvZ3JhbV9hcmdzIiwgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZXh0cmEgYXJndW1lbnRzIHRvIHByb2dyYW0iKQorZGlmZiAtLWdpdCBhL2dpc2Nhbm5lci9zaGxpYnMucHkgYi9naXNjYW5uZXIvc2hsaWJzLnB5CitpbmRleCBjOTNkMjBjLi5jNWI1OTQyIDEwMDY0NAorLS0tIGEvZ2lzY2FubmVyL3NobGlicy5weQorKysrIGIvZ2lzY2FubmVyL3NobGlicy5weQorQEAgLTEwNSw3ICsxMDUsOSBAQCBkZWYgX3Jlc29sdmVfbm9uX2xpYnRvb2wob3B0aW9ucywgYmluYXJ5LCBsaWJyYXJpZXMpOgorICAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKGxpYnRvb2wpCisgICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0tbW9kZT1leGVjdXRlJykKKyAgICAgICAgIHBsYXRmb3JtX3N5c3RlbSA9IHBsYXRmb3JtLnN5c3RlbSgpCistICAgICAgICBpZiBwbGF0Zm9ybV9zeXN0ZW0gPT0gJ0Rhcndpbic6CisrICAgICAgICBpZiBvcHRpb25zLmxkZF93cmFwcGVyOgorKyAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFtvcHRpb25zLmxkZF93cmFwcGVyLCBiaW5hcnkuYXJnc1swXV0pCisrICAgICAgICBlbGlmIHBsYXRmb3JtX3N5c3RlbSA9PSAnRGFyd2luJzoKKyAgICAgICAgICAgICBhcmdzLmV4dGVuZChbJ290b29sJywgJy1MJywgYmluYXJ5LmFyZ3NbMF1dKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBhcmdzLmV4dGVuZChbJ2xkZCcsIGJpbmFyeS5hcmdzWzBdXSkKKy0tIAorMi43LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDUtUHJlZml4LXBrZy1jb25maWctcGF0aHMtd2l0aC1QS0dfQ09ORklHX1NZU1JPT1RfRElSLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDA1LVByZWZpeC1wa2ctY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTkZJR19TWVNST09UX0RJUi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhMThlYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDA1LVByZWZpeC1wa2ctY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTkZJR19TWVNST09UX0RJUi0ucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSBlMDhiMzY3N2RkMDRkNmVjNDA3YmE4Zjc0ZjYwMWIyZDUxMzEwZWZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDggT2N0IDIwMTUgMTg6MzA6MzUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzVdIFByZWZpeCBwa2ctY29uZmlnIHBhdGhzIHdpdGggUEtHX0NPTkZJR19TWVNST09UX0RJUgorIGVudmlyb25tZW50IHZhcmlhYmxlCisKK1RoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0cyB0aGUgbG9jYXRpb24gb2Ygc3lzcm9vdCBkaXJlY3RvcnkgaW4gY3Jvc3MtY29tcGlsYXRpb24KK2Vudmlyb25tZW50czsgaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIHRoZSBwcmVmaXggd2lsbCBiZSBlbXB0eS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtyZXZpZXcgb24gb2UtY29yZSBsaXN0XQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS1naXIuYW0gICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgbTQvaW50cm9zcGVjdGlvbi5tNCB8ICA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLWdpci5hbSBiL01ha2VmaWxlLWdpci5hbQoraW5kZXggYTA5MjYwYS4uYmE2ZTg5ZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLWdpci5hbQorKysrIGIvTWFrZWZpbGUtZ2lyLmFtCitAQCAtNTUsOCArNTUsOCBAQCBlbHNlCisgZW5kaWYKKyAKKyAjIGdsaWIKKy1HTElCX0lOQ0xVREVESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdsaWItMi4wKS9nbGliLTIuMAorLUdMSUJfTElCRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdsaWItMi4wKQorK0dMSUJfSU5DTFVERURJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdsaWItMi4wKS9nbGliLTIuMAorK0dMSUJfTElCRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnbGliLTIuMCkKKyAKKyBHTElCX0xJQlJBUlk9Z2xpYi0yLjAKKyAKK0BAIC05Miw4ICs5Miw4IEBAIEdMaWItMi4wLmdpcjogZy1pci1zY2FubmVyIGctaXItY29tcGlsZXIkKEVYRUVYVCkKKyBnaXIvREJ1c0dMaWItMS4wLnR5cGVsaWI6IEdPYmplY3QtMi4wLmdpcgorIAorICMgZ29iamVjdAorLUdPQkpFQ1RfSU5DTFVERURJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ29iamVjdC0yLjApL2dsaWItMi4wCistR09CSkVDVF9MSUJESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ29iamVjdC0yLjApCisrR09CSkVDVF9JTkNMVURFRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ29iamVjdC0yLjApL2dsaWItMi4wCisrR09CSkVDVF9MSUJESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdvYmplY3QtMi4wKQorIAorIEdPQkpFQ1RfTElCUkFSWT1nb2JqZWN0LTIuMAorIAorQEAgLTEyMCw4ICsxMjAsOCBAQCBHT2JqZWN0XzJfMF9naXJfRklMRVMgPSBcCisgQlVJTFRfR0lSU09VUkNFUyArPSBHT2JqZWN0LTIuMC5naXIKKyAKKyAjIGdtb2R1bGUKKy1HTU9EVUxFX0lOQ0xVREVESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdtb2R1bGUtMi4wKS9nbGliLTIuMAorLUdNT0RVTEVfTElCRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdtb2R1bGUtMi4wKQorK0dNT0RVTEVfSU5DTFVERURJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdtb2R1bGUtMi4wKS9nbGliLTIuMAorK0dNT0RVTEVfTElCRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnbW9kdWxlLTIuMCkKKyAKKyBHTU9EVUxFX0xJQlJBUlk9Z21vZHVsZS0yLjAKKyAKK0BAIC0xNDYsMTMgKzE0NiwxMyBAQCBHTW9kdWxlXzJfMF9naXJfRklMRVMgPSAkKEdMSUJfSU5DTFVERURJUikvZ21vZHVsZS5oIFwKKyBCVUlMVF9HSVJTT1VSQ0VTICs9IEdNb2R1bGUtMi4wLmdpcgorIAorICMgZ2lvCistR0lPX0lOQ0xVREVESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdpby0yLjApL2dsaWItMi4wCistR0lPX0xJQkRJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnaW8tMi4wKQorK0dJT19JTkNMVURFRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2lvLTIuMCkvZ2xpYi0yLjAKKytHSU9fTElCRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnaW8tMi4wKQorIAorIEdJT19MSUJSQVJZPWdpby0yLjAKKyAKKyBpZiBIQVZFX0dJT19VTklYCistR0lPX1VOSVhfSU5DTFVERURJUiA9ICQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnaW8tdW5peC0yLjApL2dpby11bml4LTIuMAorK0dJT19VTklYX0lOQ0xVREVESVIgPSAkKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdpby11bml4LTIuMCkvZ2lvLXVuaXgtMi4wCisgR0lPX1VOSVhfSERSUyA9ICQoR0lPX1VOSVhfSU5DTFVERURJUikvZ2lvLyouaAorIEdJT19VTklYX1BBQ0tBR0VTID0gZ2lvLXVuaXgtMi4wCisgZWxzZQorZGlmZiAtLWdpdCBhL200L2ludHJvc3BlY3Rpb24ubTQgYi9tNC9pbnRyb3NwZWN0aW9uLm00CitpbmRleCBkODljM2Q5Li5iNTYyMjY2IDEwMDY0NAorLS0tIGEvbTQvaW50cm9zcGVjdGlvbi5tNAorKysrIGIvbTQvaW50cm9zcGVjdGlvbi5tNAorQEAgLTU2LDE0ICs1NiwxNCBAQCBtNF9kZWZpbmUoW19HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUxdLAorICAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj0KKyAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPQorICAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCistICAgICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX3NjYW5uZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKy0gICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2NvbXBpbGVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCistICAgICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorKyAgICAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9JFBLR19DT05GSUdfU1lTUk9PVF9ESVJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX3NjYW5uZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKysgICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfY29tcGlsZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKysgICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfZ2VuZXJhdGUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2lyZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0iJCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXR5cGVsaWJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCkiCisgICAgICAgIElOVFJPU1BFQ1RJT05fQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgICBJTlRST1NQRUNUSU9OX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorLSAgICAgICBJTlRST1NQRUNUSU9OX01BS0VGSUxFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCisrICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9JFBLR19DT05GSUdfU1lTUk9PVF9ESVJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1kYXRhZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgL2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvTWFrZWZpbGUuaW50cm9zcGVjdGlvbgorICAgICBmaQorICAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX1NDQU5ORVIpCisgICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCistLSAKKzIuNy4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbl8xLjQ2LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb25fMS40Ni4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjE2MTQ3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbl8xLjQ2LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotSE9NRVBBR0UgPSAiaHR0cDovL2dub21lLm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJMR1BMdjIrICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBkNTc3NTM1YTM4OThlMWFlNWRiZjBhZTM1MDlhOGMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdG9vbHMvY29tcGlsZXIuYztlbmRsaW5lPTIwO21kNT1mYzUwMDdmYzIwMDIyNzIwZTZjMGIwY2RkZTQxZmFiZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naXNjYW5uZXIvc291cmNlc2Nhbm5lci5jO2VuZGxpbmU9MjI7bWQ1PTE5NGQ2ZTBjMWQwMDY2MmYzMmQwMzBjZTQ0ZGU4ZDM5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dpcmVwb3NpdG9yeS9naXJlZ2lzdGVyZWR0eXBlaW5mby5jO2VuZGxpbmU9MjE7bWQ1PTY2MTg0NzYxMWFlNjk3OTQ2NTQxNWYzMWE3NTliYTI3IgotCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vMS40Ni8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtUHJlZml4LXBrZy1jb25maWctcGF0aHMtd2l0aC1QS0dfQ09ORklHX1NZU1JPT1RfRElSLS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWdpc2Nhbm5lci1hZGQtdXNlLWJpbmFyeS13cmFwcGVyLW9wdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWdpc2Nhbm5lci1hZGQtYS11c2UtbGRkLXdyYXBwZXItb3B0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWFkZC1ob3N0LWdpLWdpLWNyb3NzLXdyYXBwZXItYW5kLWdpLWxkZC5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJhZGI0MGEzMWM3YzgwYjY1YjBmNGM4ZmQ3MWI0OTNkYyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2NjU4YmQzYzJiODgxM2ViM2UyNTExZWUxNTMyMzhkMDlhY2U5ZDMwOWU0NTc0YWYyNzQ0M2Q4NzQyM2U0MjMzIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYyBweXRob25uYXRpdmUgcWVtdSBnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLSMgbmVjZXNzYXJ5IHRvIGxldCB0aGUgY2FsbCBmb3IgcHl0aG9uLWNvbmZpZyBmcm9tIGNvbmZpZ3VyZS5hYyBzdWNjZWVkCi1leHBvcnQgQlVJTERfU1lTCi1leHBvcnQgSE9TVF9TWVMKLWV4cG9ydCBTVEFHSU5HX0lOQ0RJUgotZXhwb3J0IFNUQUdJTkdfTElCRElSCi0KLSMgbmVlZGVkIGZvciB3cml0aW5nIG91dCB0aGUgcWVtdSB3cmFwcGVyIHNjcmlwdAotZXhwb3J0IFNUQUdJTkdfRElSX0hPU1QKLWV4cG9ydCBCCi0KLURFUEVORFNfYXBwZW5kID0gIiBsaWJmZmkgemxpYiBnbGliLTIuMCBweXRob24iCi0KLSMgdGFyZ2V0IGJ1aWxkIG5lZWRzIHFlbXUgdG8gcnVuIHRlbXBvcmFyeSBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzIGNyZWF0ZWQKLSMgb24gdGhlIGZseSBieSBnLWlyLXNjYW5uZXIgYW5kIGEgbmF0aXZlIHZlcnNpb24gb2YgaXRzZWxmIHRvIHJ1bgotIyBuYXRpdmUgdmVyc2lvbnMgb2YgaXRzIG93biB0b29scyBkdXJpbmcgYnVpbGQuCi0jIEFsc28gcHJlbGluay1ydGxkIGlzIHVzZWQgdG8gZmluZCBvdXQgbGlicmFyeSBkZXBlbmRlbmNpZXMgb2YgaW50cm9zcGVjdGlvbiBiaW5hcmllcwotIyAoc3RhbmRhcmQgbGRkIGRvZXNuJ3Qgd29yayB3aGVuIGNyb3NzLWNvbXBpbGluZykuCi1ERVBFTkRTX2NsYXNzLXRhcmdldF9hcHBlbmQgPSAiIGdvYmplY3QtaW50cm9zcGVjdGlvbi1uYXRpdmUgcWVtdS1uYXRpdmUgcHJlbGluay1uYXRpdmUiCi0KLVNTVEFURV9TQ0FOX0ZJTEVTICs9ICJnLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgZy1pci1zY2FubmVyLXdyYXBwZXIgZy1pci1jb21waWxlci13cmFwcGVyIGctaXItc2Nhbm5lci1sZGR3cmFwcGVyIEdpby0yLjAuZ2lyIgotCi1kb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0gICAgICAgICMgVHdlYWsgdGhlIG5hdGl2ZSBweXRob24gc2NyaXB0cyBzbyB0aGF0IHRoZXkgZG9uJ3QgcmVmZXIgdG8gdGhlCi0gICAgICAgICMgZnVsbCBwYXRoIG9mIG5hdGl2ZSBweXRob24gYmluYXJ5ICh0aGUgc29sdXRpb24gaXMgdGFrZW4gZnJvbSBnbGliLTIuMCByZWNpcGUpCi0gICAgICAgICMgVGhpcyByZW1vdmVzIHRoZSByaXNrIG9mIGV4Y2VlZGluZyBMaW51eCBrZXJuZWwncyBzaGViYW5nIGxpbmUgbGltaXQgKDEyOCBieXRlcykKLSAgICAgICAgc2VkIC1pIC1lICcxcywjIS4qLCMhJHtVU1JCSU5QQVRIfS9lbnYgbmF0aXZlcHl0aG9uLCcgJHtTfS90b29scy9nLWlyLXRvb2wtdGVtcGxhdGUuaW4KLX0KLQotZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgewotICAgICAgICAjIFdyaXRlIG91dCBhIHFlbXUgd3JhcHBlciB0aGF0IHdpbGwgYmUgZ2l2ZW4gdG8gZ2ktc2Nhbm5lciBzbyB0aGF0IGl0Ci0gICAgICAgICMgY2FuIHJ1biB0YXJnZXQgaGVscGVyIGJpbmFyaWVzIHRocm91Z2ggdGhhdC4KLSAgICAgICAgcWVtdV9iaW5hcnk9IiR7QHFlbXVfd3JhcHBlcl9jbWRsaW5lKGQsICckU1RBR0lOR19ESVJfSE9TVCcsIFsnXCRHSVJfRVhUUkFfTElCU19QQVRIJywnLmxpYnMnLCckU1RBR0lOR19ESVJfSE9TVC8ke2xpYmRpcn0nLCckU1RBR0lOR19ESVJfSE9TVC8ke2Jhc2VfbGliZGlyfSddKX0iCi0gICAgICAgIGNhdCA+ICR7Qn0vZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyIDw8IEVPRgotIyEvYmluL3NoCi0jIFVzZSBhIG1vZHVsZXMgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgZXhpc3Qgc28gd2UgZG9uJ3QgbG9hZCByYW5kb20gdGhpbmdzCi0jIHdoaWNoIG1heSB0aGVuIGdldCBkZWxldGVkIChvciB0aGVpciBkZXBlbmRlbmNpZXMpIGFuZCBwb3RlbnRpYWxseSBzZWdmYXVsdAotZXhwb3J0IEdJT19NT0RVTEVfRElSPSR7U1RBR0lOR19MSUJESVJ9L2dpby9tb2R1bGVzLWR1bW15Ci0KLSRxZW11X2JpbmFyeSAiXCRAIgotaWYgWyBcJD8gLW5lIDAgXTsgdGhlbgotICAgIGVjaG8gIklmIHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIGlzIGFib3V0IG1pc3NpbmcgLnNvIGxpYnJhcmllcywgdGhlbiBzZXR0aW5nIHVwIEdJUl9FWFRSQV9MSUJTX1BBVEggaW4gdGhlIHJlY2lwZSBzaG91bGQgaGVscC4iCi0gICAgZWNobyAiKHR5cGljYWxseSBsaWtlIHRoaXM6IEdJUl9FWFRSQV9MSUJTX1BBVEg9XCIkIiJ7Qn0vc29tZXRoaW5nLy5saWJzXCIgKSIKLSAgICBleGl0IDEKLWZpCi1FT0YKLSAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIKLQotICAgICAgICAjIFdyaXRlIG91dCBhIHdyYXBwZXIgZm9yIGctaXItc2Nhbm5lciBpdHNlbGYsIHdoaWNoIHdpbGwgYmUgdXNlZCB3aGVuIGJ1aWxkaW5nIGludHJvc3BlY3Rpb24gZmlsZXMKLSAgICAgICAgIyBmb3IgZ2xpYi1iYXNlZCBwYWNrYWdlcy4gVGhpcyB3cmFwcGVyIGNhbGxzIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiB0aGUgc2Nhbm5lciwgYW5kIHRlbGxzIGl0IHRvIHVzZQotICAgICAgICAjIGEgcWVtdSB3cmFwcGVyIGZvciBydW5uaW5nIHRyYW5zaWVudCB0YXJnZXQgYmluYXJpZXMgcHJvZHVjZWQgYnkgdGhlIHNjYW5uZXIsIGFuZCBhbiBpbmNsdWRlIGRpcmVjdG9yeSAKLSAgICAgICAgIyBmcm9tIHRoZSB0YXJnZXQgc3lzcm9vdC4KLSAgICAgICAgY2F0ID4gJHtCfS9nLWlyLXNjYW5uZXItd3JhcHBlciA8PCBFT0YKLSMhL2Jpbi9zaAotIyBUaGlzIHByZXZlbnRzIGctaXItc2Nhbm5lciBmcm9tIHdyaXRpbmcgY2FjaGUgZGF0YSB0byAkSE9NRQotZXhwb3J0IEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT0xCi0KLWctaXItc2Nhbm5lciAtLXVzZS1iaW5hcnktd3JhcHBlcj0ke1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgLS11c2UtbGRkLXdyYXBwZXI9JHtTVEFHSU5HX0JJTkRJUn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgLS1hZGQtaW5jbHVkZS1wYXRoPSR7U1RBR0lOR19EQVRBRElSfS9naXItMS4wICJcJEAiCi1FT0YKLSAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItd3JhcHBlcgotCi0gICAgICAgICMgV3JpdGUgb3V0IGEgd3JhcHBlciBmb3IgZy1pci1jb21waWxlciwgd2hpY2ggcnVucyB0aGUgdGFyZ2V0IHZlcnNpb24gb2YgaXQgdGhyb3VnaCBxZW11LgotICAgICAgICAjIGctaXItY29tcGlsZXIgd3JpdGVzIG91dCB0aGUgcmF3IGNvbnRlbnQgb2YgYSBDIHN0cnVjdCB0byBkaXNrLCBhbmQgdGhlcmVmb3JlIGlzIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCi0gICAgICAgIGNhdCA+ICR7Qn0vZy1pci1jb21waWxlci13cmFwcGVyIDw8IEVPRgotIyEvYmluL3NoCi0ke1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgJHtTVEFHSU5HX0JJTkRJUn0vZy1pci1jb21waWxlciAiXCRAIgotRU9GCi0gICAgICAgIGNobW9kICt4ICR7Qn0vZy1pci1jb21waWxlci13cmFwcGVyCi0KLSAgICAgICAgIyBXcml0ZSBvdXQgYSB3cmFwcGVyIHRvIHVzZSBpbnN0ZWFkIG9mIGxkZCwgd2hpY2ggZG9lcyBub3Qgd29yayB3aGVuIGEgYmluYXJ5IGlzIGJ1aWx0Ci0gICAgICAgICMgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZQotICAgICAgICBjYXQgPiAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyIDw8IEVPRgotIyEvYmluL3NoCi1wcmVsaW5rLXJ0bGQgLS1yb290PSRTVEFHSU5HX0RJUl9IT1NUICJcJEAiCi1FT0YKLSAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlcgotCi0gICAgICAgICMgQWxzbyB0d2VhayB0aGUgdGFyZ2V0IHB5dGhvbiBzY3JpcHRzIHNvIHRoYXQgdGhleSBkb24ndCByZWZlciB0byB0aGUKLSAgICAgICAgIyBuYXRpdmUgdmVyc2lvbiBvZiBweXRob24gYmluYXJ5ICh0aGUgc29sdXRpb24gaXMgdGFrZW4gZnJvbSBnbGliLTIuMCByZWNpcGUpCi0gICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKiwjISR7VVNSQklOUEFUSH0vZW52IHB5dGhvbiwnICR7U30vdG9vbHMvZy1pci10b29sLXRlbXBsYXRlLmluCi19Ci0KLSMgQ29uZmlndXJlIHRhcmdldCBidWlsZCB0byB1c2UgbmF0aXZlIHRvb2xzIG9mIGl0c2VsZiBhbmQgdG8gdXNlIGEgcWVtdSB3cmFwcGVyCi0jIGFuZCBvcHRpb25hbGx5IHRvIGdlbmVyYXRlIGludHJvc3BlY3Rpb24gZGF0YQotRVhUUkFfT0VDT05GX2NsYXNzLXRhcmdldCArPSAiLS1lbmFibGUtaG9zdC1naSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1naS1jcm9zcy13cmFwcGVyPSR7Qn0vZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWdpLWxkZC13cmFwcGVyPSR7Qn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0dJX0RBVEFfRU5BQkxFRCcsICdUcnVlJywgJy0tZW5hYmxlLWludHJvc3BlY3Rpb24tZGF0YScsICctLWRpc2FibGUtaW50cm9zcGVjdGlvbi1kYXRhJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotCi0KLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0gICAgICAgICMgVGhpcyBwcmV2ZW50cyBnLWlyLXNjYW5uZXIgZnJvbSB3cml0aW5nIGNhY2hlIGRhdGEgdG8gJEhPTUUKLSAgICAgICAgZXhwb3J0IEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT0xCi0KLSAgICAgICAgIyBOZWVkZWQgdG8gcnVuIGctaXIgdW5pdCB0ZXN0cywgd2hpY2ggd29uJ3QgYmUgYWJsZSB0byBmaW5kIHRoZSBidWlsdCBsaWJyYXJpZXMgb3RoZXJ3aXNlCi0gICAgICAgIGV4cG9ydCBHSVJfRVhUUkFfTElCU19QQVRIPSRCLy5saWJzCi19Ci0KLSMgT3VyIHdyYXBwZXJzIG5lZWQgdG8gYmUgYXZhaWxhYmxlIHN5c3RlbS13aWRlLCBiZWNhdXNlIHRoZXkgd2lsbCBiZSB1c2VkIAotIyB0byBidWlsZCBpbnRyb3NwZWN0aW9uIGZpbGVzIGZvciBhbGwgb3RoZXIgZ29iamVjdC1iYXNlZCBwYWNrYWdlcwotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgewotICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCi0gICAgICAgIGluc3RhbGwgJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci13cmFwcGVyICR7RH0ke2JpbmRpcn0vCi0gICAgICAgIGluc3RhbGwgJHtCfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyICR7RH0ke2JpbmRpcn0vCi19Ci0KLSMgLnR5cGVsaWIgZmlsZXMgYXJlIG5lZWRlZCBhdCBydW50aW1lIGFuZCBzbyB0aGV5IGdvIHRvIHRoZSBtYWluIHBhY2thZ2UKLUZJTEVTXyR7UE59X2FwcGVuZCA9ICIgJHtsaWJkaXJ9L2dpcmVwb3NpdG9yeS0qLyoudHlwZWxpYiIKLQotIyAuZ2lyIGZpbGVzIGdvIHRvIGRldiBwYWNrYWdlLCBhcyB0aGV5J3JlIG5lZWRlZCBmb3IgZGV2ZWxvcGluZyAoYnV0IG5vdCBmb3IgcnVubmluZykKLSMgdGhpbmdzIHRoYXQgZGVwZW5kcyBvbiBpbnRyb3NwZWN0aW9uLgotRklMRVNfJHtQTn0tZGV2X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9naXItKi8qLmdpciIKLQotIyBUaGVzZSBhcmUgdXNlZCBieSBnb2JqZWN0LWJhc2VkIHBhY2thZ2VzCi0jIHRvIGdlbmVyYXRlIHRyYW5zaWVudCBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzCi1GSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvZ2R1bXAuYyBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvTWFrZWZpbGUuaW50cm9zcGVjdGlvbiIKLQotIyBUaGVzZSBhcmUgdXNlZCBieSBkZXBlbmRlbnQgcGFja2FnZXMgKGUuZy4gcHlnb2JqZWN0KSB0byBidWlsZCB0aGVpcgotIyB0ZXN0c3VpdGVzLgotRklMRVNfJHtQTn0tZGV2X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL3Rlc3RzLyouYyBcCi0gICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL3Rlc3RzLyouaCIKLQotRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dpc2Nhbm5lci8uZGVidWcvIgotRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dpc2Nhbm5lci8qLmEiCi0KLSMgd2UgbmVlZCB0YXJnZXQgdmVyc2lvbnMgb2YgaW50cm9zcGVjdGlvbiB0b29scyBpbiBzeXNyb290IHNvIHRoYXQgdGhleSBjYW4gYmUgcnVuIHZpYSBxZW11Ci0jIHdoZW4gYnVpbGRpbmcgaW50cm9zcGVjdGlvbiBmaWxlcyBpbiBvdGhlciBwYWNrYWdlcwotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy10YXJnZXQgKz0gImdpX2JpbmFyaWVzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLQotZ2lfYmluYXJpZXNfc3lzcm9vdF9wcmVwcm9jZXNzKCkgewotICAgICAgICBzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJ9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfQotCi0gICAgICAgICMgQWxzbywgdHdlYWsgdGhlIGJpbmFyeSBuYW1lcyBpbiBpbnRyb3NwZWN0aW9uIHBrZ2NvbmZpZyBmaWxlLCBzbyB0aGF0IGl0IHBpY2tzIHVwIG91ciAKLSAgICAgICAgIyB3cmFwcGVycyB3aGljaCBkbyB0aGUgY3Jvc3MtY29tcGlsZSBhbmQgcWVtdSBtYWdpYy4KLSAgICAgICAgc2VkIC1pIFwKLSAgICAgICAgICAgLWUgInN8Z19pcl9zY2FubmVyPS4qfGdfaXJfc2Nhbm5lcj0ke2JpbmRpcn0vZy1pci1zY2FubmVyLXdyYXBwZXJ8IiBcCi0gICAgICAgICAgIC1lICJzfGdfaXJfY29tcGlsZXI9Lip8Z19pcl9jb21waWxlcj0ke2JpbmRpcn0vZy1pci1jb21waWxlci13cmFwcGVyfCIgXAotICAgICAgICAgICAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0vcGtnY29uZmlnL2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAucGMKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbl8xLjQ4LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb25fMS40OC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYWE0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb25fMS40OC4wLmJiCkBAIC0wLDAgKzEsMTczIEBACitTVU1NQVJZID0gIk1pZGRsZXdhcmUgbGF5ZXIgYmV0d2VlbiBHT2JqZWN0LXVzaW5nIEMgbGlicmFyaWVzIGFuZCBsYW5ndWFnZSBiaW5kaW5ncyIKK0hPTUVQQUdFID0gImh0dHBzOi8vd2lraS5nbm9tZS5vcmcvYWN0aW9uL3Nob3cvUHJvamVjdHMvR09iamVjdEludHJvc3BlY3Rpb24iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTkwZDU3NzUzNWEzODk4ZTFhZTVkYmYwYWUzNTA5YThjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rvb2xzL2NvbXBpbGVyLmM7ZW5kbGluZT0yMDttZDU9ZmM1MDA3ZmMyMDAyMjcyMGU2YzBiMGNkZGU0MWZhYmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2lzY2FubmVyL3NvdXJjZXNjYW5uZXIuYztlbmRsaW5lPTIyO21kNT0xOTRkNmUwYzFkMDA2NjJmMzJkMDMwY2U0NGRlOGQzOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naXJlcG9zaXRvcnkvZ2lyZWdpc3RlcmVkdHlwZWluZm8uYztlbmRsaW5lPTIxO21kNT02NjE4NDc2MTFhZTY5Nzk0NjU0MTVmMzFhNzU5YmEyNyIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LzEuNDgvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJldmVydC1hbi1pbmNvbXBsZXRlLXVwc3RyZWFtLWF0dGVtcHQtYXQtY3Jvc3MtY29tcGkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1jb25maWd1cmUuYWMtYWRkLWhvc3QtZ2ktZ2ktY3Jvc3Mtd3JhcHBlci1naS1sZGQtd3JhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtZ2lzY2FubmVyLWFkZC11c2UtYmluYXJ5LXdyYXBwZXItb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtZ2lzY2FubmVyLWFkZC1hLXVzZS1sZGQtd3JhcHBlci1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1QcmVmaXgtcGtnLWNvbmZpZy1wYXRocy13aXRoLVBLR19DT05GSUdfU1lTUk9PVF9ESVItLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjAxMzAxZmE5MDE5NjY3ZDQ4ZTkyNzM1M2UwOGJjMjE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZhMjc1YWFjY2RiZmM5MWVjMGJjOWE2ZmQwNTYyMDUxYWNkYmE3MzFlN2Q1ODRiNjRhMjc3ZmVjNjBlNzU4NzciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jIHB5dGhvbjNuYXRpdmUgcWVtdSBnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIG5lZWRlZCBmb3Igd3JpdGluZyBvdXQgdGhlIHFlbXUgd3JhcHBlciBzY3JpcHQKK2V4cG9ydCBTVEFHSU5HX0RJUl9IT1NUCitleHBvcnQgQgorCitERVBFTkRTX2FwcGVuZCA9ICIgbGliZmZpIHpsaWIgZ2xpYi0yLjAgcHl0aG9uMyBmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKKyMgdGFyZ2V0IGJ1aWxkIG5lZWRzIHFlbXUgdG8gcnVuIHRlbXBvcmFyeSBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzIGNyZWF0ZWQKKyMgb24gdGhlIGZseSBieSBnLWlyLXNjYW5uZXIgYW5kIGEgbmF0aXZlIHZlcnNpb24gb2YgaXRzZWxmIHRvIHJ1bgorIyBuYXRpdmUgdmVyc2lvbnMgb2YgaXRzIG93biB0b29scyBkdXJpbmcgYnVpbGQuCisjIEFsc28gcHJlbGluay1ydGxkIGlzIHVzZWQgdG8gZmluZCBvdXQgbGlicmFyeSBkZXBlbmRlbmNpZXMgb2YgaW50cm9zcGVjdGlvbiBiaW5hcmllcworIyAoc3RhbmRhcmQgbGRkIGRvZXNuJ3Qgd29yayB3aGVuIGNyb3NzLWNvbXBpbGluZykuCitERVBFTkRTX2NsYXNzLXRhcmdldF9hcHBlbmQgPSAiIGdvYmplY3QtaW50cm9zcGVjdGlvbi1uYXRpdmUgcWVtdS1uYXRpdmUgcHJlbGluay1uYXRpdmUiCisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJnLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgZy1pci1zY2FubmVyLXdyYXBwZXIgZy1pci1jb21waWxlci13cmFwcGVyIGctaXItc2Nhbm5lci1sZGR3cmFwcGVyIEdpby0yLjAuZ2lyIgorCitkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgICAgICMgVHdlYWsgdGhlIG5hdGl2ZSBweXRob24gc2NyaXB0cyBzbyB0aGF0IHRoZXkgZG9uJ3QgcmVmZXIgdG8gdGhlCisgICAgICAgICMgZnVsbCBwYXRoIG9mIG5hdGl2ZSBweXRob24gYmluYXJ5ICh0aGUgc29sdXRpb24gaXMgdGFrZW4gZnJvbSBnbGliLTIuMCByZWNpcGUpCisgICAgICAgICMgVGhpcyByZW1vdmVzIHRoZSByaXNrIG9mIGV4Y2VlZGluZyBMaW51eCBrZXJuZWwncyBzaGViYW5nIGxpbmUgbGltaXQgKDEyOCBieXRlcykKKyAgICAgICAgc2VkIC1pIC1lICcxcywjIS4qLCMhJHtVU1JCSU5QQVRIfS9lbnYgcHl0aG9uMywnICR7U30vdG9vbHMvZy1pci10b29sLXRlbXBsYXRlLmluCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAgICAgIyBXcml0ZSBvdXQgYSBxZW11IHdyYXBwZXIgdGhhdCB3aWxsIGJlIGdpdmVuIHRvIGdpLXNjYW5uZXIgc28gdGhhdCBpdAorICAgICAgICAjIGNhbiBydW4gdGFyZ2V0IGhlbHBlciBiaW5hcmllcyB0aHJvdWdoIHRoYXQuCisgICAgICAgIHFlbXVfYmluYXJ5PSIke0BxZW11X3dyYXBwZXJfY21kbGluZShkLCAnJFNUQUdJTkdfRElSX0hPU1QnLCBbJ1wkR0lSX0VYVFJBX0xJQlNfUEFUSCcsJy5saWJzJywnJFNUQUdJTkdfRElSX0hPU1QvJHtsaWJkaXJ9JywnJFNUQUdJTkdfRElSX0hPU1QvJHtiYXNlX2xpYmRpcn0nXSl9IgorICAgICAgICBjYXQgPiAke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciA8PCBFT0YKKyMhL2Jpbi9zaAorIyBVc2UgYSBtb2R1bGVzIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGV4aXN0IHNvIHdlIGRvbid0IGxvYWQgcmFuZG9tIHRoaW5ncworIyB3aGljaCBtYXkgdGhlbiBnZXQgZGVsZXRlZCAob3IgdGhlaXIgZGVwZW5kZW5jaWVzKSBhbmQgcG90ZW50aWFsbHkgc2VnZmF1bHQKK2V4cG9ydCBHSU9fTU9EVUxFX0RJUj0ke1NUQUdJTkdfTElCRElSfS9naW8vbW9kdWxlcy1kdW1teQorCiskcWVtdV9iaW5hcnkgIlwkQCIKK2lmIFsgXCQ/IC1uZSAwIF07IHRoZW4KKyAgICBlY2hvICJJZiB0aGUgYWJvdmUgZXJyb3IgbWVzc2FnZSBpcyBhYm91dCBtaXNzaW5nIC5zbyBsaWJyYXJpZXMsIHRoZW4gc2V0dGluZyB1cCBHSVJfRVhUUkFfTElCU19QQVRIIGluIHRoZSByZWNpcGUgc2hvdWxkIGhlbHAuIgorICAgIGVjaG8gIih0eXBpY2FsbHkgbGlrZSB0aGlzOiBHSVJfRVhUUkFfTElCU19QQVRIPVwiJCIie0J9L3NvbWV0aGluZy8ubGlic1wiICkiCisgICAgZXhpdCAxCitmaQorRU9GCisgICAgICAgIGNobW9kICt4ICR7Qn0vZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyCisKKyAgICAgICAgIyBXcml0ZSBvdXQgYSB3cmFwcGVyIGZvciBnLWlyLXNjYW5uZXIgaXRzZWxmLCB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbiBidWlsZGluZyBpbnRyb3NwZWN0aW9uIGZpbGVzCisgICAgICAgICMgZm9yIGdsaWItYmFzZWQgcGFja2FnZXMuIFRoaXMgd3JhcHBlciBjYWxscyB0aGUgbmF0aXZlIHZlcnNpb24gb2YgdGhlIHNjYW5uZXIsIGFuZCB0ZWxscyBpdCB0byB1c2UKKyAgICAgICAgIyBhIHFlbXUgd3JhcHBlciBmb3IgcnVubmluZyB0cmFuc2llbnQgdGFyZ2V0IGJpbmFyaWVzIHByb2R1Y2VkIGJ5IHRoZSBzY2FubmVyLCBhbmQgYW4gaW5jbHVkZSBkaXJlY3RvcnkgCisgICAgICAgICMgZnJvbSB0aGUgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgIGNhdCA+ICR7Qn0vZy1pci1zY2FubmVyLXdyYXBwZXIgPDwgRU9GCisjIS9iaW4vc2gKKyMgVGhpcyBwcmV2ZW50cyBnLWlyLXNjYW5uZXIgZnJvbSB3cml0aW5nIGNhY2hlIGRhdGEgdG8gJEhPTUUKK2V4cG9ydCBHSV9TQ0FOTkVSX0RJU0FCTEVfQ0FDSEU9MQorCitnLWlyLXNjYW5uZXIgLS11c2UtYmluYXJ5LXdyYXBwZXI9JHtTVEFHSU5HX0JJTkRJUn0vZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyIC0tdXNlLWxkZC13cmFwcGVyPSR7U1RBR0lOR19CSU5ESVJ9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyIC0tYWRkLWluY2x1ZGUtcGF0aD0ke1NUQUdJTkdfREFUQURJUn0vZ2lyLTEuMCAiXCRAIgorRU9GCisgICAgICAgIGNobW9kICt4ICR7Qn0vZy1pci1zY2FubmVyLXdyYXBwZXIKKworICAgICAgICAjIFdyaXRlIG91dCBhIHdyYXBwZXIgZm9yIGctaXItY29tcGlsZXIsIHdoaWNoIHJ1bnMgdGhlIHRhcmdldCB2ZXJzaW9uIG9mIGl0IHRocm91Z2ggcWVtdS4KKyAgICAgICAgIyBnLWlyLWNvbXBpbGVyIHdyaXRlcyBvdXQgdGhlIHJhdyBjb250ZW50IG9mIGEgQyBzdHJ1Y3QgdG8gZGlzaywgYW5kIHRoZXJlZm9yZSBpcyBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorICAgICAgICBjYXQgPiAke0J9L2ctaXItY29tcGlsZXItd3JhcHBlciA8PCBFT0YKKyMhL2Jpbi9zaAorJHtTVEFHSU5HX0JJTkRJUn0vZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyICR7U1RBR0lOR19CSU5ESVJ9L2ctaXItY29tcGlsZXIgIlwkQCIKK0VPRgorICAgICAgICBjaG1vZCAreCAke0J9L2ctaXItY29tcGlsZXItd3JhcHBlcgorCisgICAgICAgICMgV3JpdGUgb3V0IGEgd3JhcHBlciB0byB1c2UgaW5zdGVhZCBvZiBsZGQsIHdoaWNoIGRvZXMgbm90IHdvcmsgd2hlbiBhIGJpbmFyeSBpcyBidWlsdAorICAgICAgICAjIGZvciBhIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUKKyAgICAgICAgY2F0ID4gJHtCfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlciA8PCBFT0YKKyMhL2Jpbi9zaAorcHJlbGluay1ydGxkIC0tcm9vdD0kU1RBR0lOR19ESVJfSE9TVCAiXCRAIgorRU9GCisgICAgICAgIGNobW9kICt4ICR7Qn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIKKworICAgICAgICAjIEFsc28gdHdlYWsgdGhlIHRhcmdldCBweXRob24gc2NyaXB0cyBzbyB0aGF0IHRoZXkgZG9uJ3QgcmVmZXIgdG8gdGhlCisgICAgICAgICMgbmF0aXZlIHZlcnNpb24gb2YgcHl0aG9uIGJpbmFyeSAodGhlIHNvbHV0aW9uIGlzIHRha2VuIGZyb20gZ2xpYi0yLjAgcmVjaXBlKQorICAgICAgICBzZWQgLWkgLWUgJzFzLCMhLiosIyEke1VTUkJJTlBBVEh9L2VudiBweXRob24zLCcgJHtTfS90b29scy9nLWlyLXRvb2wtdGVtcGxhdGUuaW4KK30KKworIyBDb25maWd1cmUgdGFyZ2V0IGJ1aWxkIHRvIHVzZSBuYXRpdmUgdG9vbHMgb2YgaXRzZWxmIGFuZCB0byB1c2UgYSBxZW11IHdyYXBwZXIKKyMgYW5kIG9wdGlvbmFsbHkgdG8gZ2VuZXJhdGUgaW50cm9zcGVjdGlvbiBkYXRhCitFWFRSQV9PRUNPTkZfY2xhc3MtdGFyZ2V0ICs9ICItLWVuYWJsZS1ob3N0LWdpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWdpLWNyb3NzLXdyYXBwZXI9JHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtZ2ktbGRkLXdyYXBwZXI9JHtCfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnR0lfREFUQV9FTkFCTEVEJywgJ1RydWUnLCAnLS1lbmFibGUtaW50cm9zcGVjdGlvbi1kYXRhJywgJy0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uLWRhdGEnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiIKK1BBQ0tBR0VDT05GSUdbZG9jdG9vbF0gPSAiLS1lbmFibGUtZG9jdG9vbCwtLWRpc2FibGUtZG9jdG9vbCxweXRob24zLW1ha28sIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgICAgICMgVGhpcyBwcmV2ZW50cyBnLWlyLXNjYW5uZXIgZnJvbSB3cml0aW5nIGNhY2hlIGRhdGEgdG8gJEhPTUUKKyAgICAgICAgZXhwb3J0IEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT0xCisKKyAgICAgICAgIyBOZWVkZWQgdG8gcnVuIGctaXIgdW5pdCB0ZXN0cywgd2hpY2ggd29uJ3QgYmUgYWJsZSB0byBmaW5kIHRoZSBidWlsdCBsaWJyYXJpZXMgb3RoZXJ3aXNlCisgICAgICAgIGV4cG9ydCBHSVJfRVhUUkFfTElCU19QQVRIPSRCLy5saWJzCit9CisKKyMgT3VyIHdyYXBwZXJzIG5lZWQgdG8gYmUgYXZhaWxhYmxlIHN5c3RlbS13aWRlLCBiZWNhdXNlIHRoZXkgd2lsbCBiZSB1c2VkIAorIyB0byBidWlsZCBpbnRyb3NwZWN0aW9uIGZpbGVzIGZvciBhbGwgb3RoZXIgZ29iamVjdC1iYXNlZCBwYWNrYWdlcworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci13cmFwcGVyICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgJHtCfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyICR7RH0ke2JpbmRpcn0vCit9CisKKyMgLnR5cGVsaWIgZmlsZXMgYXJlIG5lZWRlZCBhdCBydW50aW1lIGFuZCBzbyB0aGV5IGdvIHRvIHRoZSBtYWluIHBhY2thZ2UKK0ZJTEVTXyR7UE59X2FwcGVuZCA9ICIgJHtsaWJkaXJ9L2dpcmVwb3NpdG9yeS0qLyoudHlwZWxpYiIKKworIyAuZ2lyIGZpbGVzIGdvIHRvIGRldiBwYWNrYWdlLCBhcyB0aGV5J3JlIG5lZWRlZCBmb3IgZGV2ZWxvcGluZyAoYnV0IG5vdCBmb3IgcnVubmluZykKKyMgdGhpbmdzIHRoYXQgZGVwZW5kcyBvbiBpbnRyb3NwZWN0aW9uLgorRklMRVNfJHtQTn0tZGV2X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9naXItKi8qLmdpciIKKworIyBUaGVzZSBhcmUgdXNlZCBieSBnb2JqZWN0LWJhc2VkIHBhY2thZ2VzCisjIHRvIGdlbmVyYXRlIHRyYW5zaWVudCBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzCitGSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvZ2R1bXAuYyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvTWFrZWZpbGUuaW50cm9zcGVjdGlvbiIKKworIyBUaGVzZSBhcmUgdXNlZCBieSBkZXBlbmRlbnQgcGFja2FnZXMgKGUuZy4gcHlnb2JqZWN0KSB0byBidWlsZCB0aGVpcgorIyB0ZXN0c3VpdGVzLgorRklMRVNfJHtQTn0tZGV2X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL3Rlc3RzLyouYyBcCisgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL3Rlc3RzLyouaCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dpc2Nhbm5lci8uZGVidWcvIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dpc2Nhbm5lci8qLmEiCisKKyMgd2UgbmVlZCB0YXJnZXQgdmVyc2lvbnMgb2YgaW50cm9zcGVjdGlvbiB0b29scyBpbiBzeXNyb290IHNvIHRoYXQgdGhleSBjYW4gYmUgcnVuIHZpYSBxZW11CisjIHdoZW4gYnVpbGRpbmcgaW50cm9zcGVjdGlvbiBmaWxlcyBpbiBvdGhlciBwYWNrYWdlcworU1lTUk9PVF9ESVJTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7YmluZGlyfSIKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGdpX2JpbmFyaWVzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK2dpX2JpbmFyaWVzX3N5c3Jvb3RfcHJlcHJvY2VzcygpIHsKKyAgICAgICAgIyBUd2VhayB0aGUgYmluYXJ5IG5hbWVzIGluIHRoZSBpbnRyb3NwZWN0aW9uIHBrZ2NvbmZpZyBmaWxlLCBzbyB0aGF0IGl0CisgICAgICAgICMgcGlja3MgdXAgb3VyIHdyYXBwZXJzIHdoaWNoIGRvIHRoZSBjcm9zcy1jb21waWxlIGFuZCBxZW11IG1hZ2ljLgorICAgICAgICBzZWQgLWkgXAorICAgICAgICAgICAtZSAic3xnX2lyX3NjYW5uZXI9Lip8Z19pcl9zY2FubmVyPSR7YmluZGlyfS9nLWlyLXNjYW5uZXItd3JhcHBlcnwiIFwKKyAgICAgICAgICAgLWUgInN8Z19pcl9jb21waWxlcj0uKnxnX2lyX2NvbXBpbGVyPSR7YmluZGlyfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXJ8IiBcCisgICAgICAgICAgICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9wa2djb25maWcvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC5wYworfQorCisjIE5lZWQgdG8gZW5zdXJlIGxkLnNvLmNvbmYgZXhpc3RzIHNvIHByZWxpbmstbmF0aXZlIHdvcmtzCisjIGJvdGggYmVmb3JlIHdlIGJ1aWxkIGFuZCBpZiB3ZSBpbnN0YWxsIGZyb20gc3N0YXRlCitkb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICJnb2JqZWN0X2ludHJvc3BlY3Rpb25fcHJlY29uZmlndXJlIgorcHl0aG9uIGdvYmplY3RfaW50cm9zcGVjdGlvbl9wcmVjb25maWd1cmUgKCkgeworICAgIG9lLnV0aWxzLndyaXRlX2xkX3NvX2NvbmYoZCkKK30KKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZ29iamVjdF9pbnRyb3NwZWN0aW9uX3Bvc3RpbnN0IgorcHl0aG9uIGdvYmplY3RfaW50cm9zcGVjdGlvbl9wb3N0aW5zdCAoKSB7CisgICAgaWYgZC5nZXRWYXIoIkJCX0NVUlJFTlRUQVNLIiwgVHJ1ZSkuc3RhcnRzd2l0aCgicG9wdWxhdGVfc3lzcm9vdCIpOgorICAgICAgICBvZS51dGlscy53cml0ZV9sZF9zb19jb25mKGQpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE5LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE5LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZmRhYmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXNfMy4xOS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotU1VNTUFSWSA9ICJHTk9NRSBkZXNrdG9wLXdpZGUgR1NldHRpbmdzIHNjaGVtYXMiCi1IT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIgotCi1pbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MgZ2V0dGV4dCBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZmRjOTJhYmNmZmU0NjgyMWJlNDIzMTkzYjI3NWNmOGIiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI5MDg0OTg5Yjc1Y2E5YjNmYzU5ODRjOGEwZDI5N2E5M2QzZDEyNGY1MWNhZGQyYmRhYWFhNzVhNzgzYzgwNjM1IgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjIwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjIwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5MjRjZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMjAuMC5iYgpAQCAtMCwwICsxLDEzIEBACitTVU1NQVJZID0gIkdOT01FIGRlc2t0b3Atd2lkZSBHU2V0dGluZ3Mgc2NoZW1hcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnZXR0ZXh0IGdvYmplY3QtaW50cm9zcGVjdGlvbiB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYzVkODdlYTQ4MGFhOWJmNjZiMTM0ZGRiNWI4ZWEwZjgiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI1NWE0MWI1MzNjMGFiOTU1ZTBhMzZhODRkNzM4Mjk0NTFjODhiMDI3ZDhkNzE5OTU1ZDhmNjk1YzM1YzZkOWMxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jCmluZGV4IDViYmZlNmIuLmMyNDBiYWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMKQEAgLTU4LDcgKzU4LDE0IEBACiAJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJmZXJyZXQuc28gXAogCSIKIAotR1RLQkFTRV9SUkVDT01NRU5EUyA/PSAibGliZXJhdGlvbi1mb250cyBnZGstcGl4YnVmLWxvYWRlci1wbmcgZ2RrLXBpeGJ1Zi1sb2FkZXItanBlZyBnZGstcGl4YnVmLWxvYWRlci1naWYgZ2RrLXBpeGJ1Zi1sb2FkZXIteHBtIHNoYXJlZC1taW1lLWluZm8iCitHVEtCQVNFX1JSRUNPTU1FTkRTID89ICJsaWJlcmF0aW9uLWZvbnRzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLXBuZyBcCisgICAgICAgICAgICAgICAgICAgICAgICBnZGstcGl4YnVmLWxvYWRlci1qcGVnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLWdpZiBcCisgICAgICAgICAgICAgICAgICAgICAgICBnZGstcGl4YnVmLWxvYWRlci14cG0gXAorICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkLW1pbWUtaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICBnbm9tZS10aGVtZS1hZHdhaXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKIEdUS0dMSUJDX1JSRUNPTU1FTkRTID89ICIke0dUS0JBU0VfUlJFQ09NTUVORFN9IGdsaWJjLWdjb252LWlzbzg4NTktMSIKIAogUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtHVEtCQVNFX1JSRUNPTU1FTkRTfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jCmluZGV4IGJkMjkzMDAuLjgzZTliOTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLmluYwpAQCAtNiw3ICs2LDcgQEAKIFNFQ1RJT04gPSAibGlicyIKIAogREVQRU5EUyA9ICJnbGliLTIuMCBjYWlybyBwYW5nbyBhdGsganBlZyBsaWJwbmcgZ2RrLXBpeGJ1ZiBcCi0gICAgICAgICAgIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGdkay1waXhidWYtbmF0aXZlIGxpYmVwb3h5IgorICAgICAgICAgICBkb2Nib29rLXV0aWxzLW5hdGl2ZSBnZGstcGl4YnVmLW5hdGl2ZSIKIAogTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgogCkBAIC0yMSw2ICsyMSw4IEBACiAgICAgIyBEbyB0aGlzIGJlY2F1c2UgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgcnVubmluZyAuL2xpYnRvb2wgZGlyZWN0bHkKICAgICBybSAtZiBsaWJ0b29sCiAgICAgbG4gLXMgJHtUQVJHRVRfUFJFRklYfWxpYnRvb2wgbGlidG9vbAorICAgICNkZWxldGUgYSBmaWxlIHRoYXQgd2lsbCBnZXQgY29uZnVzZWQgd2l0aCBnZW5lcmF0ZWQgb25lIGluICR7Qn0KKyAgICBybSAtZiAke1N9L2d0ay9ndGt0eXBlZnVuY3MuYwogfQogCiBFWFRSQV9PRUNPTkYgKz0gIiBcCkBAIC0yOSwxOSArMzEsMjUgQEAKICAgICAgICAgICAgICAgICAgLS1lbmFibGUtbW9kdWxlcyBcCiAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jdXBzIFwKICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWNvbG9yZCBcCi0iCisgICAgICAgICAgICAgICAgIFdBWUxBTkRfUFJPVE9DT0xTX1NZU1JPT1RfRElSPSR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0gXAorICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIngxMSIsICIiLCAiLS1kaXNhYmxlLWd0ay1kb2MiLCBkKX0gXAorICAgICAgICAgICAgICAgICAiCitFWFRSQV9PRUNPTkZbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKICAgICAgICAgZXhwb3J0IEdJUl9FWFRSQV9MSUJTX1BBVEg9IiR7Qn0vZ2RrLy5saWJzIgogfQogCiBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ4MTEiLCAieDExIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJvcGVuZ2wiLCAib3BlbmdsIiwgIiIsIGQpfSBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJvcGVuZ2wgeDExIiwgImdseCIsICIiLCBkKX0gXAogICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAid2F5bGFuZCIsICJ3YXlsYW5kIiwgIiIsIGQpfSIKIAogUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMS1iYWNrZW5kLC0tZGlzYWJsZS14MTEtYmFja2VuZCxhdC1zcGkyLWF0ayBmb250Y29uZmlnIGxpYngxMSBsaWJ4ZXh0IGxpYnhjdXJzb3IgbGlieGkgbGlieGRhbWFnZSBsaWJ4cmFuZHIgbGlieHJlbmRlciBsaWJ4Y29tcG9zaXRlIGxpYnhmaXhlcyIKKyMgdGhpcyBpcyBwcm92aWRlZCBieSBvZS1jb3JlIHBhdGNoIHRoYXQgcmVtb3ZlcyBlcG94eS9nbCBkZXBlbmRlbmN5IGZyb20gYSBYMTEgYnVpbGQKK1BBQ0tBR0VDT05GSUdbb3BlbmdsXSA9ICItLWVuYWJsZS1vcGVuZ2wsLS1kaXNhYmxlLW9wZW5nbCxsaWJlcG94eSIKIFBBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbHgsLS1kaXNhYmxlLWdseCwsbGliZ2wiCi1QQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtYmFja2VuZCwtLWRpc2FibGUtd2F5bGFuZC1iYWNrZW5kLHdheWxhbmQgbGlieGtiY29tbW9uIHZpcnR1YWwvbWVzYSB3YXlsYW5kLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1iYWNrZW5kLC0tZGlzYWJsZS13YXlsYW5kLWJhY2tlbmQsd2F5bGFuZCB3YXlsYW5kLXByb3RvY29scyBsaWJ4a2Jjb21tb24gdmlydHVhbC9tZXNhIHdheWxhbmQtbmF0aXZlIgogCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKIAltdiAke0R9JHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZS0zLjAKQEAgLTYxLDEwICs2OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci8qL2FwcHMvZ3RrMy1kZW1vKi5wbmcgXAogICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvKi9hcHBzL2d0azMtd2lkZ2V0LWZhY3RvcnkqLnBuZyIKIAotIyBUaGUgZGVtbyB1c2VzIFBORyBmaWxlcyBhbmQgbWltZSB0eXBlIHNuaWZmaW5nLCBzbyBlbnN1cmUgdGhhdCB0aGVzZQotIyBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQuCi1SREVQRU5EU18ke1BOfS1kZW1vICs9ICJnZGstcGl4YnVmLWxvYWRlci1wbmcgc2hhcmVkLW1pbWUtaW5mbyIKLQogRklMRVNfJHtQTn1fYXBwZW5kID0gIiAke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMCBcCiAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAgXAogICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1sYXVuY2ggXApAQCAtNzUsNiArNzksNyBAQAogRklMRVNfJHtQTn0tZGV2ICs9ICIgXAogICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2d0ay0zLjAvZ3RrYnVpbGRlci5ybmcgXAogICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2d0ay0zLjAvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2V0dGV4dC9pdHMgXAogICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9pbmNsdWRlIFwKICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAogICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2ltbW9kdWxlcy8qLmxhIFwKQEAgLTg0LDkgKzg5LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0IFwKICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIFwKICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1idWlsZGVyLXRvb2wgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLXF1ZXJ5LXNldHRpbmdzIFwKICAgICAgICAgICAgICAgICAgICAgIgogCi1SUkVDT01NRU5EU18ke1BOfSA9ICJhZHdhaXRhLWljb24tdGhlbWUtc3ltYm9saWMiCitHVEtCQVNFX1JSRUNPTU1FTkRTID89ICJsaWJlcmF0aW9uLWZvbnRzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLXBuZyBcCisgICAgICAgICAgICAgICAgICAgICAgICBnZGstcGl4YnVmLWxvYWRlci1qcGVnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLWdpZiBcCisgICAgICAgICAgICAgICAgICAgICAgICBnZGstcGl4YnVmLWxvYWRlci14cG0gXAorICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkLW1pbWUtaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICBhZHdhaXRhLWljb24tdGhlbWUtc3ltYm9saWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorR1RLR0xJQkNfUlJFQ09NTUVORFMgPz0gIiR7R1RLQkFTRV9SUkVDT01NRU5EU30gZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICIke0dUS0JBU0VfUlJFQ09NTUVORFN9IgorUlJFQ09NTUVORFNfJHtQTn1fbGliYy1nbGliYyA9ICIke0dUS0dMSUJDX1JSRUNPTU1FTkRTfSIKK1JERVBFTkRTXyR7UE59LWRldiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlBBQ0tBR0VDT05GSUciLCAid2F5bGFuZCIsICJ3YXlsYW5kLXByb3RvY29scyIsICIiLCBkKX0iCiAKIFBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGszLWltbW9kdWxlLS4qIF5ndGszLXByaW50YmFja2VuZC0uKiIKIApAQCAtMTEwLDQgKzEyOCwzIEBACiAgICAgaWYgKGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKSk6CiAgICAgICAgIGQuc2V0VmFyKGQuZXhwYW5kKCdQS0dfJHtQTn0nKSwgJyR7TUxQUkVGSVh9bGliZ3RrLTMuMCcpCiB9Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAxLUhhcmRjb2RlZC1saWJ0b29sLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDEtSGFyZGNvZGVkLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkYTFmMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAxLUhhcmRjb2RlZC1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gNWE3M2E1YjkyNTY2ZTMxNGJiYzhhMWJkNDBmMWVjMjA0ODM3YzExMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDIxIEp1biAyMDE2IDE0OjUzOjU2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBIYXJkY29kZWQgbGlidG9vbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjNkMzA3Ny4uYjY5MzFkNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjEwLDcgKzYxMCw3IEBAIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB3cml0ZSBkZXBlbmRlbmNpZXMgaW50byAucGMgZmlsZXNdKQorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICE9IHhwYXNzX2FsbCB8fCB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0geHllcyA7IHRoZW4KKyAgICAgICBlbmFibGVfZXhwbGljaXRfZGVwcz15ZXMKKyAgICAgZWxzZQorQEAgLTg3Niw3ICs4NzYsNyBAQCBlbHNlCisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIG1vZHVsZV9kZXBsaWJzX2NoZWNrPWAkbW9kdWxlX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtMTYzMCw3ICsxNjMwLDcgQEAgQUNfU1VCU1QoR1RLX1BSSU5UX0JBQ0tFTkRTKQorICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKKyAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCisgZXhwb3J0IFNFRAorLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrZXhwb3J0X2R5bmFtaWM9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfREVQX0xJQlM9YGVjaG8gJEdES19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCisgICBHVEtfREVQX0xJQlM9YGVjaG8gJEdUS19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAxLVJlZG8tZm9jdXMtaGFuZGxpbmctaW4tdHJlZXZpZXctb25jZS1tb3JlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDEtUmVkby1mb2N1cy1oYW5kbGluZy1pbi10cmVldmlldy1vbmNlLW1vcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxOWFkZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAxLVJlZG8tZm9jdXMtaGFuZGxpbmctaW4tdHJlZXZpZXctb25jZS1tb3JlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzI5ZmFhMmRiXQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCitGcm9tIDI5ZmFhMmRiNDRiMDRiOWNmN2Y0ZDk2ZTMyNjkxZjQyNDQ5MGM3MzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KK0RhdGU6IFN1biwgMTEgU2VwIDIwMTYgMTE6NDc6NTUgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVkbyBmb2N1cyBoYW5kbGluZyBpbiB0cmVldmlldyBvbmNlIG1vcmUKKworVGhlIGZpeCBmb3IgYnVnIDc2NzQ2OCBoYWQgc29tZSB1bmludGVuZGVkIHNpZGUtZWZmZWN0cy4gVGhpcyBpcworYW4gYXR0ZW1wdCBhdCBkb2luZyB0aGUgc2FtZSBmaXggKGRvbid0IGdyYWIgZm9jdXMgd2hlbiB3ZSBhcmUKK2dyYWItc2hhZG93ZWQpLCB3aGlsZSBhdm9pZGluZyB0aGUgYnJlYWthZ2UsIGJ5IHVzaW5nIEdUSysncworaW50ZXJuYWwgdHJhY2tpbmcgZm9yIGdyYWItc2hhZG93ZWQtbmVzcy4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDUwOAorLS0tCisgZ3RrL2d0a3RyZWV2aWV3LmMgfCAzICstLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9ndGt0cmVldmlldy5jIGIvZ3RrL2d0a3RyZWV2aWV3LmMKK2luZGV4IGE3NDYzY2MuLjczZDM1NTcgMTAwNjQ0CistLS0gYS9ndGsvZ3RrdHJlZXZpZXcuYworKysrIGIvZ3RrL2d0a3RyZWV2aWV3LmMKK0BAIC0zMDUwLDExICszMDUwLDEwIEBAIHN0YXRpYyB2b2lkCisgZ3JhYl9mb2N1c19hbmRfdW5zZXRfZHJhd19rZXlmb2N1cyAoR3RrVHJlZVZpZXcgKnRyZWVfdmlldykKKyB7CisgICBHdGtXaWRnZXQgKndpZGdldCA9IEdUS19XSURHRVQgKHRyZWVfdmlldyk7CistICBHdGtXaWRnZXQgKmdyYWJfd2lkZ2V0ID0gZ3RrX2dyYWJfZ2V0X2N1cnJlbnQgKCk7CisgCisgICBpZiAoZ3RrX3dpZGdldF9nZXRfY2FuX2ZvY3VzICh3aWRnZXQpICYmCisgICAgICAgIWd0a193aWRnZXRfaGFzX2ZvY3VzICh3aWRnZXQpICYmCistICAgICAgKCFncmFiX3dpZGdldCB8fCBncmFiX3dpZGdldCA9PSB3aWRnZXQpKQorKyAgICAgICFfZ3RrX3dpZGdldF9nZXRfc2hhZG93ZWQgKHdpZGdldCkpCisgICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyAod2lkZ2V0KTsKKyAKKyAgIHRyZWVfdmlldy0+cHJpdi0+ZHJhd19rZXlmb2N1cyA9IDA7CistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAyLURvLW5vdC10cnktdG8taW5pdGlhbGl6ZS1HTC13aXRob3V0LWxpYkdMLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDItRG8tbm90LXRyeS10by1pbml0aWFsaXplLUdMLXdpdGhvdXQtbGliR0wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5NzE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAyLURvLW5vdC10cnktdG8taW5pdGlhbGl6ZS1HTC13aXRob3V0LWxpYkdMLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0Zyb20gZDYzYjkyNmY4YzhkOGI1YzlmOWVjMzNkMDc4Yjc3NWYwNDA5ZDg4YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDE2IE9jdCAyMDE1IDE2OjM1OjE2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBEbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgR0wgd2l0aG91dCBsaWJHTAorCitfZ2RrX3gxMV9zY3JlZW5fdXBkYXRlX3Zpc3VhbHNfZm9yX2dsKCkgd2lsbCBlbmQgdXAgY2FsbGluZyBlcG94eXMKK0dMWCBhcGkgd2hpY2ggd2lsbCBleGl0KCkgaWYgbGliR0wuc28uMSBpcyBub3QgcHJlc2VudC4gV2UgZG8gbm90Cit3YW50IHRoYXQgdG8gaGFwcGVuIGFuZCB3ZSBkb24ndCB3YW50IGV2ZXJ5IGFwcCB0byBoYXZlIHRvIHNldAorIkdES19HTD1kaXNhYmxlZCIgZW52aXJvbm1lbnQgdmFyaWFibGU6IHNvIHVzZSAjaWZkZWYgc2V0IGJhc2VkIG9uCitvcGVuZ2wgZGlzdHJvIGZlYXR1cmUuCisKK1Vwc3RyZWFtIGlzIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBmaXggYXMgaXQgaXM6IEVpdGhlciBlcG94eSBzaG91bGQgYmUKK2ZpeGVkICh0byBub3QgZXhpdCkgb3IgR1RLKyBwb3NzaWJseSBjb3VsZCBkbyBzb21lIGFkZGl0aW9uYWwgcHJvYmluZworYmVmb3JlIGNhbGxpbmcgZXBveHkgQVBJcy4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICB8IDcgKysrKysrKworIGdkay94MTEvZ2RrdmlzdWFsLXgxMS5jIHwgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiNjkzMWQ2Li5lMjdkYTQ5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNDIsNiArMzQyLDEzIEBAIEFDX0FSR19FTkFCTEUobWlyLWJhY2tlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSB0aGUgTWlyIGdkayBiYWNrZW5kXSldLAorIAkJCSAgICAgIFtiYWNrZW5kX3NldD15ZXNdKQorIAorK0FDX0FSR19FTkFCTEUoZ2x4LAorKyAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbHhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtXaGVuIGVuYWJsZWQgR2RrIHdpbGwgdHJ5IHRvIGluaXRpYWxpemUgR0xYXSldKQorK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9nbHgiICE9ICJ4bm8iXSwgWworKyAgQUNfREVGSU5FKFtIQVZFX0dMWF0sIFtdLCBbR0xYIHdpbGwgYmUgYXZhaWxhYmxlIGF0IHJ1bnRpbWVdKQorK10pCisrCisgaWYgdGVzdCAteiAiJGJhY2tlbmRfc2V0IjsgdGhlbgorICAgaWYgdGVzdCAiJHBsYXRmb3JtX3dpbjMyIiA9IHllczsgdGhlbgorICAgICBlbmFibGVfd2luMzJfYmFja2VuZD15ZXMKK2RpZmYgLS1naXQgYS9nZGsveDExL2dka3Zpc3VhbC14MTEuYyBiL2dkay94MTEvZ2RrdmlzdWFsLXgxMS5jCitpbmRleCA4MTQ3OWQ4Li4zYzhjNWMwIDEwMDY0NAorLS0tIGEvZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMKKysrKyBiL2dkay94MTEvZ2RrdmlzdWFsLXgxMS5jCitAQCAtMzA2LDcgKzMwNiwxMiBAQCBfZ2RrX3gxMV9zY3JlZW5faW5pdF92aXN1YWxzIChHZGtTY3JlZW4gKnNjcmVlbikKKyAgIC8qIElmIEdMIGlzIGF2YWlsYWJsZSB3ZSB3YW50IHRvIHBpY2sgYmV0dGVyIGRlZmF1bHQvcmdiYSB2aXN1YWxzLAorICAgICAgYXMgd2UgY2FyZSBhYm91dCBnbHggZGV0YWlscyBzdWNoIGFzIGFscGhhL2RlcHRoL3N0ZW5jaWwgZGVwdGgsCisgICAgICBzdGVyZW8gYW5kIGRvdWJsZSBidWZmZXJpbmcgKi8KKysgIC8qIHVwZGF0ZV92aXN1YWxzX2Zvcl9nbCgpIHdpbGwgZW5kIHVwIGNhbGxpbmcgZXBveHkgR0xYIGFwaSB3aGljaAorKyAgICAgd2lsbCBleGl0IGlmIGxpYmdsIGlzIG5vdCB0aGVyZTogc28gb25seSBkbyB0aGlzIGlmIHdlIGtub3cgR0wKKysgICAgIGlzIGF2YWlsYWJsZSAqLworKyNpZmRlZiBIQVZFX0dMWAorICAgX2dka194MTFfc2NyZWVuX3VwZGF0ZV92aXN1YWxzX2Zvcl9nbCAoc2NyZWVuKTsKKysjZW5kaWYKKyB9CisgCisgZ2ludAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwMy1BZGQtZGlzYWJsZS1vcGVuZ2wtY29uZmlndXJlLW9wdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAzLUFkZC1kaXNhYmxlLW9wZW5nbC1jb25maWd1cmUtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTJjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwMy1BZGQtZGlzYWJsZS1vcGVuZ2wtY29uZmlndXJlLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDk1NCBAQAorRnJvbSBhOGZhNTQ3ZmRjMTQxNmIzMzBhY2VkODA1ZjUzNDNhZDkxMjkzMmFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgSnVuIDIwMTYgMTU6MTE6MzkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIEFkZCAtLWRpc2FibGUtb3BlbmdsIGNvbmZpZ3VyZSBvcHRpb24KKworLS1kaXNhYmxlLW9wZW5nbCB3aWxsIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiBsaWJlcG94eSBhbmQgb24gdGhlCitPcGVuR0wgQVBJcy4gVGhpcyBpcyB1c2VmdWwgZm9yIHRob3NlIHdobyB3YW50IHRvIGtlZXAgdXNpbmcgZ3RrKzMKK3dpdGhvdXQgdGhlICJvcGVuZ2wiIGRpc3RybyBmZWF0dXJlLgorCitHdGtHTEFyZWEgaXMgc3RpbGwgcGFydCBvZiB0aGUgQVBJIChpdCBqdXN0IGRvZXNuJ3Qgd29yaykgZXZlbiB3aGVuCitPcGVuR0wgaXMgZGlzYWJsZWQuIEdka1gxMUdMQ29udGV4dCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBHdGsgQVBJCitjb21wbGV0ZWx5OiB0aGF0IG9iamVjdCBleHBvc2VzIEdMIEFQSSBlbGVtZW50cyBzbyBpdCBoYWQgdG8gYmUgYXQKK3RoZSB2ZXJ5IGxlYXN0IG1vZGlmaWVkLgorCitUaGUgcGF0Y2ggaXMgX25vdF8gZ3JlYXQgZnJvbSBhIG1haW50ZW5hbmNlIHBvaW50IG9mIHZpZXcgYW5kCittb2RpZnlpbmcgdGhlIGxpYnJhcnkgQVBJIGlzIGFsc28gYSBmYWlybHkgbmFzdHkgdGhpbmcgdG8gZG8uCitMb25nLXRlcm0gaXQgd291bGQgYmUgZ29vZCB0byBmaW5kIGFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHRvIHRoaXMKKyhtYXliZSBhIG5vLW9wIGJhY2tlbmQgZm9yIGxpYmVwb3h5PykKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFdmlsIGV5ZSBleHBlY3RlZCBmcm9tIHVwc3RyZWFtXQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICB8IDEzICsrKysrKysrKysrLS0KKyBkZW1vcy9ndGstZGVtby9nbGFyZWEuYyAgICAgICAgICAgfCAxMyArKysrKysrKysrKysrCisgZG9jcy90b29scy9NYWtlZmlsZS5hbSAgICAgICAgICAgIHwgIDkgKysrKysrKy0tCisgZG9jcy90b29scy93aWRnZXRzLmMgICAgICAgICAgICAgIHwgIDQgKysrLQorIGdkay9nZGtkaXNwbGF5LmMgICAgICAgICAgICAgICAgICB8ICA0ICsrKy0KKyBnZGsvZ2RrZ2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMCArKysrKysrKysrCisgZ2RrL2dka2dsY29udGV4dC5jICAgICAgICAgICAgICAgIHwgIDYgKysrKysrCisgZ2RrL2dka3dpbmRvdy5jICAgICAgICAgICAgICAgICAgIHwgMTMgKysrKysrKysrKysrKworIGdkay94MTEvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIGdkay94MTEvZ2RrZGlzcGxheS14MTEuYyAgICAgICAgICB8ICA2ICsrKysrLQorIGdkay94MTEvZ2Rrc2NyZWVuLXgxMS5jICAgICAgICAgICB8ICA1ICsrKysrCisgZ2RrL3gxMS9nZGt3aW5kb3cteDExLmMgICAgICAgICAgIHwgIDQgKysrKworIGdkay94MTEvZ2RreC1hdXRvY2xlYW51cHMuaCAgICAgICB8ICAyICsrCisgZ2RrL3gxMS9nZGt4LXdpdGgtZ2wtY29udGV4dC5oICAgIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBnZGsveDExL2dka3gtd2l0aG91dC1nbC1jb250ZXh0LmggfCA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ2RrL3gxMS9nZGt4LmggICAgICAgICAgICAgICAgICAgIHwgNTkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBndGsvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgfCAgMyArLS0KKyBndGsvZ3RrZ2xhcmVhLmMgICAgICAgICAgICAgICAgICAgfCAyMCArKysrKysrKysrKysrKysrKysrLQorIGd0ay9pbnNwZWN0b3IvZ2VuZXJhbC5jICAgICAgICAgICB8ICA2ICsrKysrKworIHRlc3RzL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICB8IDEwICsrKysrKystLS0KKyB0ZXN0c3VpdGUvZ3RrL29iamVjdHMtZmluYWxpemUuYyAgfCAgMiArKworIDIxIGZpbGVzIGNoYW5nZWQsIDI2MCBpbnNlcnRpb25zKCspLCA3NiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTAxODI0ZS4uZGRlOWRjNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzQyLDYgKzM0MiwxNSBAQCBBQ19BUkdfRU5BQkxFKG1pci1iYWNrZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgdGhlIE1pciBnZGsgYmFja2VuZF0pXSwKKyAJCQkgICAgICBbYmFja2VuZF9zZXQ9eWVzXSkKKyAKKytBQ19BUkdfRU5BQkxFKG9wZW5nbCwKKysgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtb3BlbmdsXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbV2hlbiBlbmFibGVkLCBHdGsrIHdpbGwgdXNlIGxpYmVwb3h5IGFuZCBleHBvc2VzIEd0a0dMQXJlYSB3aWRnZXQgXSldKQorK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9vcGVuZ2wiICE9ICJ4bm8iXSwgWworKyAgQUNfREVGSU5FKFtIQVZFX09QRU5HTF0sIFsxXSwgW2xpYmVwb3h5IGFuZCBvcGVuZ2wgQVBJcyBhcmUgYXZhaWxhYmxlIGF0IGJ1aWxkdGltZV0pCisrICBFUE9YWV9QQUNLQUdFUz0iZXBveHkgPj0gZXBveHlfcmVxdWlyZWRfdmVyc2lvbiIKKytdKQorK0FNX0NPTkRJVElPTkFMKFtIQVZFX09QRU5HTF0sW3Rlc3QgIngkZW5hYmxlX29wZW5nbCIgIT0gInhubyJdKQorKworIEFDX0FSR19FTkFCTEUoZ2x4LAorICAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtXaGVuIGVuYWJsZWQgR2RrIHdpbGwgdHJ5IHRvIGluaXRpYWxpemUgR0xYXSldKQorQEAgLTEzMzMsNyArMTM0Miw3IEBAIENGTEFHUz0iJHNhdmVkX2NmbGFncyIKKyBMREZMQUdTPSIkc2F2ZWRfbGRmbGFncyIKKyAKKyBHREtfUEFDS0FHRVM9IiRQQU5HT19QQUNLQUdFUyBnZGstcGl4YnVmLTIuMCA+PSBnZGtfcGl4YnVmX3JlcXVpcmVkX3ZlcnNpb24gY2Fpcm8gPj0gY2Fpcm9fcmVxdWlyZWRfdmVyc2lvbiBjYWlyby1nb2JqZWN0ID49IGNhaXJvX3JlcXVpcmVkX3ZlcnNpb24iCistR0RLX1BSSVZBVEVfUEFDS0FHRVM9IiRHREtfR0lPX1BBQ0tBR0UgJFhfUEFDS0FHRVMgJFdBWUxBTkRfUEFDS0FHRVMgJE1JUl9QQUNLQUdFUyAkY2Fpcm9fYmFja2VuZHMgZXBveHkgPj0gZXBveHlfcmVxdWlyZWRfdmVyc2lvbiIKKytHREtfUFJJVkFURV9QQUNLQUdFUz0iJEdES19HSU9fUEFDS0FHRSAkWF9QQUNLQUdFUyAkV0FZTEFORF9QQUNLQUdFUyAkTUlSX1BBQ0tBR0VTICRjYWlyb19iYWNrZW5kcyAkRVBPWFlfUEFDS0FHRVMiCisgCisgUEtHX0NIRUNLX01PRFVMRVMoR0RLX0RFUCwgJEdES19QQUNLQUdFUyAkR0RLX1BSSVZBVEVfUEFDS0FHRVMpCisgR0RLX0RFUF9MSUJTPSIkR0RLX0VYVFJBX0xJQlMgJEdES19ERVBfTElCUyAkTUFUSF9MSUIiCitAQCAtMTM2Nyw3ICsxMzc2LDcgQEAgZmkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhBVEssICRBVEtfUEFDS0FHRVMpCisgCisgR1RLX1BBQ0tBR0VTPSJhdGsgPj0gYXRrX3JlcXVpcmVkX3ZlcnNpb24gY2Fpcm8gPj0gY2Fpcm9fcmVxdWlyZWRfdmVyc2lvbiBjYWlyby1nb2JqZWN0ID49IGNhaXJvX3JlcXVpcmVkX3ZlcnNpb24gZ2RrLXBpeGJ1Zi0yLjAgPj0gZ2RrX3BpeGJ1Zl9yZXF1aXJlZF92ZXJzaW9uIGdpby0yLjAgPj0gZ2xpYl9yZXF1aXJlZF92ZXJzaW9uIgorLUdUS19QUklWQVRFX1BBQ0tBR0VTPSIkQVRLX1BBQ0tBR0VTICRXQVlMQU5EX1BBQ0tBR0VTICRNSVJfUEFDS0FHRVMgZXBveHkgPj0gZXBveHlfcmVxdWlyZWRfdmVyc2lvbiIKKytHVEtfUFJJVkFURV9QQUNLQUdFUz0iJEFUS19QQUNLQUdFUyAkV0FZTEFORF9QQUNLQUdFUyAkTUlSX1BBQ0tBR0VTICRFUE9YWV9QQUNLQUdFUyIKKyBpZiB0ZXN0ICJ4JGVuYWJsZV94MTFfYmFja2VuZCIgPSB4eWVzIC1vICJ4JGVuYWJsZV93YXlsYW5kX2JhY2tlbmQiID0geHllczsgdGhlbgorICAgR1RLX1BSSVZBVEVfUEFDS0FHRVM9IiRHVEtfUFJJVkFURV9QQUNLQUdFUyBwYW5nb2Z0MiIKKyBmaQorZGlmZiAtLWdpdCBhL2RlbW9zL2d0ay1kZW1vL2dsYXJlYS5jIGIvZGVtb3MvZ3RrLWRlbW8vZ2xhcmVhLmMKK2luZGV4IDNhYmE3MjkuLmM2Yzc5ZjcgMTAwNjQ0CistLS0gYS9kZW1vcy9ndGstZGVtby9nbGFyZWEuYworKysrIGIvZGVtb3MvZ3RrLWRlbW8vZ2xhcmVhLmMKK0BAIC01LDcgKzUsOSBAQAorIAorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPGd0ay9ndGsuaD4KKysjaWYgSEFWRV9PUEVOR0wKKyAjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMgR3RrV2lkZ2V0ICpkZW1vX3dpbmRvdyA9IE5VTEw7CisgCitAQCAtMjMsNiArMjUsOCBAQCBlbnVtIHsKKyAvKiBSb3RhdGlvbiBhbmdsZXMgb24gZWFjaCBheGlzICovCisgc3RhdGljIGZsb2F0IHJvdGF0aW9uX2FuZ2xlc1tOX0FYSVNdID0geyAwLjAgfTsKKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKysKKyAvKiBUaGUgb2JqZWN0IHdlIGFyZSBkcmF3aW5nICovCisgc3RhdGljIGNvbnN0IEdMZmxvYXQgdmVydGV4X2RhdGFbXSA9IHsKKyAgIDAuZiwgICAwLjVmLCAgIDAuZiwgMS5mLAorQEAgLTIxMyw2ICsyMTcsNyBAQCBjb21wdXRlX212cCAoZmxvYXQgKnJlcywKKyBzdGF0aWMgR0x1aW50IHBvc2l0aW9uX2J1ZmZlcjsKKyBzdGF0aWMgR0x1aW50IHByb2dyYW07Cisgc3RhdGljIEdMdWludCBtdnBfbG9jYXRpb247CisrI2VuZGlmCisgCisgLyogV2UgbmVlZCB0byBzZXQgdXAgb3VyIHN0YXRlIHdoZW4gd2UgcmVhbGl6ZSB0aGUgR3RrR0xBcmVhIHdpZGdldCAqLworIHN0YXRpYyB2b2lkCitAQCAtMjIzLDggKzIyOCwxMCBAQCByZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCkKKyAgIGlmIChndGtfZ2xfYXJlYV9nZXRfZXJyb3IgKEdUS19HTF9BUkVBICh3aWRnZXQpKSAhPSBOVUxMKQorICAgICByZXR1cm47CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBpbml0X2J1ZmZlcnMgKCZwb3NpdGlvbl9idWZmZXIsIE5VTEwpOworICAgaW5pdF9zaGFkZXJzICgmcHJvZ3JhbSwgJm12cF9sb2NhdGlvbik7CisrI2VuZGlmCisgfQorIAorIC8qIFdlIHNob3VsZCB0ZWFyIGRvd24gdGhlIHN0YXRlIHdoZW4gdW5yZWFsaXppbmcgKi8KK0BAIC0yMzYsMTAgKzI0MywxMyBAQCB1bnJlYWxpemUgKEd0a1dpZGdldCAqd2lkZ2V0KQorICAgaWYgKGd0a19nbF9hcmVhX2dldF9lcnJvciAoR1RLX0dMX0FSRUEgKHdpZGdldCkpICE9IE5VTEwpCisgICAgIHJldHVybjsKKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIGdsRGVsZXRlQnVmZmVycyAoMSwgJnBvc2l0aW9uX2J1ZmZlcik7CisgICBnbERlbGV0ZVByb2dyYW0gKHByb2dyYW0pOworKyNlbmRpZgorIH0KKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyBzdGF0aWMgdm9pZAorIGRyYXdfdHJpYW5nbGUgKHZvaWQpCisgeworQEAgLTI3Miw2ICsyODIsNyBAQCBkcmF3X3RyaWFuZ2xlICh2b2lkKQorICAgZ2xCaW5kQnVmZmVyIChHTF9BUlJBWV9CVUZGRVIsIDApOworICAgZ2xVc2VQcm9ncmFtICgwKTsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIGdib29sZWFuCisgcmVuZGVyIChHdGtHTEFyZWEgICAgKmFyZWEsCitAQCAtMjgwLDYgKzI5MSw3IEBAIHJlbmRlciAoR3RrR0xBcmVhICAgICphcmVhLAorICAgaWYgKGd0a19nbF9hcmVhX2dldF9lcnJvciAoYXJlYSkgIT0gTlVMTCkKKyAgICAgcmV0dXJuIEZBTFNFOworIAorKyNpZmRlZiBIQVZFX09QRU5HTAorICAgLyogQ2xlYXIgdGhlIHZpZXdwb3J0ICovCisgICBnbENsZWFyQ29sb3IgKDAuNSwgMC41LCAwLjUsIDEuMCk7CisgICBnbENsZWFyIChHTF9DT0xPUl9CVUZGRVJfQklUKTsKK0BAIC0yODksNiArMzAxLDcgQEAgcmVuZGVyIChHdGtHTEFyZWEgICAgKmFyZWEsCisgCisgICAvKiBGbHVzaCB0aGUgY29udGVudHMgb2YgdGhlIHBpcGVsaW5lICovCisgICBnbEZsdXNoICgpOworKyNlbmRpZgorIAorICAgcmV0dXJuIFRSVUU7CisgfQorZGlmZiAtLWdpdCBhL2RvY3MvdG9vbHMvTWFrZWZpbGUuYW0gYi9kb2NzL3Rvb2xzL01ha2VmaWxlLmFtCitpbmRleCA2YTZkNzBmLi41Y2RmMzEyIDEwMDY0NAorLS0tIGEvZG9jcy90b29scy9NYWtlZmlsZS5hbQorKysrIGIvZG9jcy90b29scy9NYWtlZmlsZS5hbQorQEAgLTksMTMgKzksMTggQEAgQU1fQ1BQRkxBR1MgPSBcCisgCSQoR1RLX0RFQlVHX0ZMQUdTKQkJXAorIAkkKEdUS19ERVBfQ0ZMQUdTKQorIAorK2lmIEhBVkVfT1BFTkdMCisrR0VBUlNfTERBREQgPSAkKHRvcF9idWlsZGRpcikvdGVzdHMvZ3RrZ2VhcnMubworK2VuZGlmCisrCisgREVQUyA9IFwKKy0JJCh0b3BfYnVpbGRkaXIpL2d0ay9saWJndGstMy5sYQorKwkkKHRvcF9idWlsZGRpcikvZ3RrL2xpYmd0ay0zLmxhCVwKKysJJChHRUFSU19MREFERCkKKyAKKyBMREFERFMgPSBcCisgCSQodG9wX2J1aWxkZGlyKS9ndGsvbGliZ3RrLTMubGEJXAorIAkkKHRvcF9idWlsZGRpcikvZ2RrL2xpYmdkay0zLmxhCVwKKy0JJCh0b3BfYnVpbGRkaXIpL3Rlc3RzL2d0a2dlYXJzLm8gXAorKwkkKEdFQVJTX0xEQUREKQkJCVwKKyAJJChHVEtfREVQX0xJQlMpCQkJXAorIAkkKEdES19ERVBfTElCUykJCQlcCisgCS1sbQorZGlmZiAtLWdpdCBhL2RvY3MvdG9vbHMvd2lkZ2V0cy5jIGIvZG9jcy90b29scy93aWRnZXRzLmMKK2luZGV4IDkzMmRhZjEuLjU0MjM5ZDYgMTAwNjQ0CistLS0gYS9kb2NzL3Rvb2xzL3dpZGdldHMuYworKysrIGIvZG9jcy90b29scy93aWRnZXRzLmMKK0BAIC0xNTI2LDkgKzE1MjYsMTEgQEAgY3JlYXRlX2dsX2FyZWEgKHZvaWQpCisgICB3aWRnZXQgPSBndGtfZnJhbWVfbmV3IChOVUxMKTsKKyAgIGd0a19mcmFtZV9zZXRfc2hhZG93X3R5cGUgKEdUS19GUkFNRSAod2lkZ2V0KSwgR1RLX1NIQURPV19JTik7CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBnZWFycyA9IGd0a19nZWFyc19uZXcgKCk7CisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAod2lkZ2V0KSwgZ2VhcnMpOworLSAKKysjZW5kaWYKKysKKyAgIGluZm8gPSBuZXdfd2lkZ2V0X2luZm8gKCJnbGFyZWEiLCB3aWRnZXQsIE1FRElVTSk7CisgCisgICByZXR1cm4gaW5mbzsKK2RpZmYgLS1naXQgYS9nZGsvZ2RrZGlzcGxheS5jIGIvZ2RrL2dka2Rpc3BsYXkuYworaW5kZXggNjE1MGVmNy4uMjIyMzYyOSAxMDA2NDQKKy0tLSBhL2dkay9nZGtkaXNwbGF5LmMKKysrKyBiL2dkay9nZGtkaXNwbGF5LmMKK0BAIC0yMzYwLDcgKzIzNjAsOSBAQCBnYm9vbGVhbgorIGdka19kaXNwbGF5X21ha2VfZ2xfY29udGV4dF9jdXJyZW50IChHZGtEaXNwbGF5ICAgKmRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0dMQ29udGV4dCAqY29udGV4dCkKKyB7CistICByZXR1cm4gR0RLX0RJU1BMQVlfR0VUX0NMQVNTIChkaXNwbGF5KS0+bWFrZV9nbF9jb250ZXh0X2N1cnJlbnQgKGRpc3BsYXksIGNvbnRleHQpOworKyAgaWYgKEdES19ESVNQTEFZX0dFVF9DTEFTUyAoZGlzcGxheSktPm1ha2VfZ2xfY29udGV4dF9jdXJyZW50KQorKyAgICByZXR1cm4gR0RLX0RJU1BMQVlfR0VUX0NMQVNTIChkaXNwbGF5KS0+bWFrZV9nbF9jb250ZXh0X2N1cnJlbnQgKGRpc3BsYXksIGNvbnRleHQpOworKyAgcmV0dXJuIEZBTFNFOworIH0KKyAKKyBHZGtSZW5kZXJpbmdNb2RlCitkaWZmIC0tZ2l0IGEvZ2RrL2dka2dsLmMgYi9nZGsvZ2RrZ2wuYworaW5kZXggZThiYTc3MC4uYmE3Yzg0YiAxMDA2NDQKKy0tLSBhL2dkay9nZGtnbC5jCisrKysgYi9nZGsvZ2RrZ2wuYworQEAgLTIyLDcgKzIyLDkgQEAKKyAKKyAjaW5jbHVkZSAiZ2RraW50ZXJuYWxzLmgiCisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPG1hdGguaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCitAQCAtMzYsNiArMzgsNyBAQCBnZGtfY2Fpcm9fc3VyZmFjZV9tYXJrX2FzX2RpcmVjdCAoY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX29iamVjdF9yZWYgKHdpbmRvdyksICBnX29iamVjdF91bnJlZik7CisgfQorIAorKyNpZmRlZiBIQVZFX09QRU5HTAorIHN0YXRpYyBjb25zdCBjaGFyICoKKyBnZXRfdmVydGV4X3R5cGVfbmFtZSAoaW50IHR5cGUpCisgeworQEAgLTI1NCw2ICsyNTcsNyBAQCB1c2VfdGV4dHVyZV9yZWN0X3Byb2dyYW0gKEdka0dMQ29udGV4dFBhaW50RGF0YSAqcGFpbnRfZGF0YSkKKyAgICAgICBnbFVzZVByb2dyYW0gKHBhaW50X2RhdGEtPmN1cnJlbnRfcHJvZ3JhbS0+cHJvZ3JhbSk7CisgICAgIH0KKyB9CisrI2VuZGlmCisgCisgdm9pZAorIGdka19nbF90ZXh0dXJlX3F1YWRzIChHZGtHTENvbnRleHQgKnBhaW50X2NvbnRleHQsCitAQCAtMjYxLDYgKzI2NSw3IEBAIGdka19nbF90ZXh0dXJlX3F1YWRzIChHZGtHTENvbnRleHQgKnBhaW50X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBuX3F1YWRzLAorICAgICAgICAgICAgICAgICAgICAgICBHZGtUZXh0dXJlZFF1YWQgKnF1YWRzKQorIHsKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIEdka0dMQ29udGV4dFBhaW50RGF0YSAqcGFpbnRfZGF0YSAgPSBnZGtfZ2xfY29udGV4dF9nZXRfcGFpbnRfZGF0YSAocGFpbnRfY29udGV4dCk7CisgICBHZGtHTENvbnRleHRQcm9ncmFtICpwcm9ncmFtOworICAgR2RrV2luZG93ICp3aW5kb3cgPSBnZGtfZ2xfY29udGV4dF9nZXRfd2luZG93IChwYWludF9jb250ZXh0KTsKK0BAIC0zMjQsNiArMzI5LDcgQEAgZ2RrX2dsX3RleHR1cmVfcXVhZHMgKEdka0dMQ29udGV4dCAqcGFpbnRfY29udGV4dCwKKyAKKyAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IChwcm9ncmFtLT5wb3NpdGlvbl9sb2NhdGlvbik7CisgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAocHJvZ3JhbS0+dXZfbG9jYXRpb24pOworKyNlbmRpZgorIH0KKyAKKyAvKiB4LHksd2lkdGgsaGVpZ2h0IGRlc2NyaWJlcyBhIHJlY3RhbmdsZSBpbiB0aGUgZ2wgcmVuZGVyIGJ1ZmZlcgorQEAgLTM3Miw2ICszNzgsNyBAQCBnZGtfY2Fpcm9fZHJhd19mcm9tX2dsIChjYWlyb190ICAgICAgICAgICAgICAqY3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBoZWlnaHQpCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgR2RrR0xDb250ZXh0ICpwYWludF9jb250ZXh0OworICAgY2Fpcm9fc3VyZmFjZV90ICppbWFnZTsKKyAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKK0BAIC02OTIsNiArNjk5LDcgQEAgZ2RrX2NhaXJvX2RyYXdfZnJvbV9nbCAoY2Fpcm9fdCAgICAgICAgICAgICAgKmNyLAorICAgaWYgKGNsaXBfcmVnaW9uKQorICAgICBjYWlyb19yZWdpb25fZGVzdHJveSAoY2xpcF9yZWdpb24pOworIAorKyNlbmRpZgorIH0KKyAKKyAvKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgcGFpbnQgY29udGV4dCBjdXJyZW50ICovCitAQCAtNjk5LDYgKzcwNyw3IEBAIHZvaWQKKyBnZGtfZ2xfdGV4dHVyZV9mcm9tX3N1cmZhY2UgKGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSwKKyAJCQkgICAgIGNhaXJvX3JlZ2lvbl90ICAqcmVnaW9uKQorIHsKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIEdka0dMQ29udGV4dCAqcGFpbnRfY29udGV4dDsKKyAgIGNhaXJvX3N1cmZhY2VfdCAqaW1hZ2U7CisgICBkb3VibGUgZGV2aWNlX3hfb2Zmc2V0LCBkZXZpY2VfeV9vZmZzZXQ7CitAQCAtNzk5LDQgKzgwOCw1IEBAIGdka19nbF90ZXh0dXJlX2Zyb21fc3VyZmFjZSAoY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlLAorIAorICAgZ2xEaXNhYmxlIChHTF9TQ0lTU09SX1RFU1QpOworICAgZ2xEZWxldGVUZXh0dXJlcyAoMSwgJnRleHR1cmVfaWQpOworKyNlbmRpZgorIH0KK2RpZmYgLS1naXQgYS9nZGsvZ2RrZ2xjb250ZXh0LmMgYi9nZGsvZ2RrZ2xjb250ZXh0LmMKK2luZGV4IDAwYTMzZWIuLmJkOGE3OTMgMTAwNjQ0CistLS0gYS9nZGsvZ2RrZ2xjb250ZXh0LmMKKysrKyBiL2dkay9nZGtnbGNvbnRleHQuYworQEAgLTg1LDcgKzg1LDkgQEAKKyAjaW5jbHVkZSAiZ2RraW50bC5oIgorICNpbmNsdWRlICJnZGstcHJpdmF0ZS5oIgorIAorKyNpZmRlZiBIQVZFX09QRU5HTAorICNpbmNsdWRlIDxlcG94eS9nbC5oPgorKyNlbmRpZgorIAorIHR5cGVkZWYgc3RydWN0IHsKKyAgIEdka0Rpc3BsYXkgKmRpc3BsYXk7CitAQCAtMjM5LDYgKzI0MSw3IEBAIGdka19nbF9jb250ZXh0X3VwbG9hZF90ZXh0dXJlIChHZGtHTENvbnRleHQgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgIHRleHR1cmVfdGFyZ2V0KQorIHsKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKEdES19JU19HTF9DT05URVhUIChjb250ZXh0KSk7CisgCisgICBnbFBpeGVsU3RvcmVpIChHTF9VTlBBQ0tfQUxJR05NRU5ULCA0KTsKK0BAIC0yNDYsNiArMjQ5LDcgQEAgZ2RrX2dsX2NvbnRleHRfdXBsb2FkX3RleHR1cmUgKEdka0dMQ29udGV4dCAgICAqY29udGV4dCwKKyAgIGdsVGV4SW1hZ2UyRCAodGV4dHVyZV90YXJnZXQsIDAsIEdMX1JHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwKKyAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YSAoaW1hZ2Vfc3VyZmFjZSkpOworICAgZ2xQaXhlbFN0b3JlaSAoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDApOworKyNlbmRpZgorIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTYzNSw2ICs2MzksNyBAQCBnZGtfZ2xfY29udGV4dF9yZWFsaXplIChHZGtHTENvbnRleHQgICpjb250ZXh0LAorIHN0YXRpYyB2b2lkCisgZ2RrX2dsX2NvbnRleHRfY2hlY2tfZXh0ZW5zaW9ucyAoR2RrR0xDb250ZXh0ICpjb250ZXh0KQorIHsKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIEdka0dMQ29udGV4dFByaXZhdGUgKnByaXYgPSBnZGtfZ2xfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZSAoY29udGV4dCk7CisgICBnYm9vbGVhbiBoYXNfbnBvdCwgaGFzX3RleHR1cmVfcmVjdGFuZ2xlOworIAorQEAgLTY3Nyw2ICs2ODIsNyBAQCBnZGtfZ2xfY29udGV4dF9jaGVja19leHRlbnNpb25zIChHZGtHTENvbnRleHQgKmNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT51c2VfdGV4dHVyZV9yZWN0YW5nbGUgPyAieWVzIiA6ICJubyIpKTsKKyAKKyAgIHByaXYtPmV4dGVuc2lvbnNfY2hlY2tlZCA9IFRSVUU7CisrI2VuZGlmCisgfQorIAorIC8qKgorZGlmZiAtLWdpdCBhL2dkay9nZGt3aW5kb3cuYyBiL2dkay9nZGt3aW5kb3cuYworaW5kZXggNjZlYmI5ZC4uNzRhMGMzYSAxMDA2NDQKKy0tLSBhL2dkay9nZGt3aW5kb3cuYworKysrIGIvZ2RrL2dka3dpbmRvdy5jCitAQCAtNDQsNyArNDQsOSBAQAorIAorICNpbmNsdWRlIDxtYXRoLmg+CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisrI2VuZGlmCisgCisgLyogZm9yIHRoZSB1c2Ugb2Ygcm91bmQoKSAqLworICNpbmNsdWRlICJmYWxsYmFjay1jODkuYyIKK0BAIC0yNzU5LDYgKzI3NjEsMTMgQEAgZ2RrX3dpbmRvd19nZXRfcGFpbnRfZ2xfY29udGV4dCAoR2RrV2luZG93ICAqd2luZG93LAorIHsKKyAgIEdFcnJvciAqaW50ZXJuYWxfZXJyb3IgPSBOVUxMOworIAorKyNpZm5kZWYgSEFWRV9PUEVOR0wKKysgIGdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHREtfR0xfRVJST1IsCisrICAgICAgICAgICAgICAgICAgICAgICBHREtfR0xfRVJST1JfTk9UX0FWQUlMQUJMRSwKKysgICAgICAgICAgICAgICAgICAgICAgIF8oIkdMIHN1cHBvcnQgZGlzYWJsZWQgd2l0aCAtLWRpc2FibGUtb3BlbmdsIikpOworKyAgcmV0dXJuIE5VTEw7CisrI2VuZGlmCisrCisgICBpZiAoX2dka19nbF9mbGFncyAmIEdES19HTF9ESVNBQkxFKQorICAgICB7CisgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdES19HTF9FUlJPUiwKK0BAIC0yOTU1LDYgKzI5NjQsNyBAQCBnZGtfd2luZG93X2JlZ2luX3BhaW50X3JlZ2lvbiAoR2RrV2luZG93ICAgICAgICp3aW5kb3csCisgICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgICAgeworKyNpZmRlZiBIQVZFX09QRU5HTAorIAkgIGdka19nbF9jb250ZXh0X21ha2VfY3VycmVudCAoY29udGV4dCk7CisgICAgICAgICAgIC8qIFdpdGggZ2wgd2UgYWx3YXlzIG5lZWQgYSBzdXJmYWNlIHRvIGNvbWJpbmUgdGhlIGdsCisgICAgICAgICAgICAgIGRyYXdpbmcgd2l0aCB0aGUgbmF0aXZlIGRyYXdpbmcuICovCitAQCAtMjk2OSw2ICsyOTc5LDcgQEAgZ2RrX3dpbmRvd19iZWdpbl9wYWludF9yZWdpb24gKEdka1dpbmRvdyAgICAgICAqd2luZG93LAorICAgICAgICAgICBnbEJsZW5kRnVuYyAoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAKKyAgICAgICAgICAgZ2xWaWV3cG9ydCAoMCwgMCwgd3csIHdoKTsKKysjZW5kaWYKKyAgICAgICAgIH0KKyAgICAgfQorIAorQEAgLTMxMTcsNiArMzEyOCw3IEBAIGdka193aW5kb3dfZW5kX3BhaW50IChHZGtXaW5kb3cgKndpbmRvdykKKyAKKyAgICAgICAgICAgZ2RrX2dsX2NvbnRleHRfbWFrZV9jdXJyZW50ICh3aW5kb3ctPmdsX3BhaW50X2NvbnRleHQpOworIAorKyNpZmRlZiBIQVZFX09QRU5HTAorICAgICAgICAgICBpZiAoIWNhaXJvX3JlZ2lvbl9pc19lbXB0eSAob3BhcXVlX3JlZ2lvbikpCisgICAgICAgICAgICAgZ2RrX2dsX3RleHR1cmVfZnJvbV9zdXJmYWNlICh3aW5kb3ctPmN1cnJlbnRfcGFpbnQuc3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYXF1ZV9yZWdpb24pOworQEAgLTMxMjcsNiArMzEzOSw3IEBAIGdka193aW5kb3dfZW5kX3BhaW50IChHZGtXaW5kb3cgKndpbmRvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LT5jdXJyZW50X3BhaW50Lm5lZWRfYmxlbmRfcmVnaW9uKTsKKyAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7CisgICAgICAgICAgICAgfQorKyNlbmRpZgorIAorICAgICAgICAgICBjYWlyb19yZWdpb25fZGVzdHJveSAob3BhcXVlX3JlZ2lvbik7CisgCitkaWZmIC0tZ2l0IGEvZ2RrL3gxMS9NYWtlZmlsZS5hbSBiL2dkay94MTEvTWFrZWZpbGUuYW0KK2luZGV4IGM0ODhhMzEuLjRjZTNjMDcgMTAwNjQ0CistLS0gYS9nZGsveDExL01ha2VmaWxlLmFtCisrKysgYi9nZGsveDExL01ha2VmaWxlLmFtCitAQCAtMzksOCArMzksNiBAQCBsaWJnZGtfeDExX2xhX1NPVVJDRVMgPSAJXAorIAlnZGtldmVudHRyYW5zbGF0b3IuYwlcCisgCWdka2V2ZW50dHJhbnNsYXRvci5oCVwKKyAJZ2RrZ2VvbWV0cnkteDExLmMgIAlcCistCWdka2dsY29udGV4dC14MTEuYwlcCistCWdka2dsY29udGV4dC14MTEuaAlcCisgCWdka2tleXMteDExLmMJCVwKKyAJZ2RrbWFpbi14MTEuYwkJXAorIAlnZGtwcm9wZXJ0eS14MTEuYwlcCitAQCAtNTMsMTQgKzUxLDMyIEBAIGxpYmdka194MTFfbGFfU09VUkNFUyA9IAlcCisgCWdka3dpbmRvdy14MTEuaAkJXAorIAlnZGt4ZnRkZWZhdWx0cy5jCVwKKyAJZ2RreGlkLmMJCVwKKy0JZ2RreC5oCQkJXAorIAlnZGtwcml2YXRlLXgxMS5oCVwKKyAJeHNldHRpbmdzLWNsaWVudC5oCVwKKyAJeHNldHRpbmdzLWNsaWVudC5jCisgCisraWYgSEFWRV9PUEVOR0wKKytsaWJnZGtfeDExX2xhX1NPVVJDRVMgKz0gICAgICAgIFwKKysJZ2RrZ2xjb250ZXh0LXgxMS5jCVwKKysJZ2RrZ2xjb250ZXh0LXgxMS5oCisrZW5kaWYKKysKKyBsaWJnZGtpbmNsdWRlX0hFQURFUlMgPSAJXAorIAlnZGt4LmgKKyAKKytpZiBIQVZFX09QRU5HTAorK0dES1hfSEVBREVSID0gZ2RreC13aXRoLWdsLWNvbnRleHQuaAorK2Vsc2UKKytHREtYX0hFQURFUiA9IGdka3gtd2l0aG91dC1nbC1jb250ZXh0LmgKKytlbmRpZgorKworK0JVSUxUX1NPVVJDRVMgPSBnZGt4LmgKKysKKysuUEhPTlk6IGdka3guaAorK2dka3guaDoKKysJJChBTV9WX0dFTikgY2QgJChzcmNkaXIpIFwKKysJJiYgKGNtcCAtcyAkKEdES1hfSEVBREVSKSBnZGt4LmggfHwgY3AgJChHREtYX0hFQURFUikgZ2RreC5oICkKKysKKyBsaWJnZGt4MTFpbmNsdWRlX0hFQURFUlMgPSAJXAorIAlnZGt4LWF1dG9jbGVhbnVwcy5oCVwKKyAJZ2RreDExYXBwbGF1bmNoY29udGV4dC5oIFwKK0BAIC03NCw3ICs5MCw2IEBAIGxpYmdka3gxMWluY2x1ZGVfSEVBREVSUyA9IAlcCisgCWdka3gxMWRpc3BsYXkuaAkJXAorIAlnZGt4MTFkaXNwbGF5bWFuYWdlci5oCVwKKyAJZ2RreDExZG5kLmgJCVwKKy0JZ2RreDExZ2xjb250ZXh0LmgJXAorIAlnZGt4MTFrZXlzLmgJCVwKKyAJZ2RreDExcHJvcGVydHkuaAlcCisgCWdka3gxMXNjcmVlbi5oCQlcCitAQCAtODMsOSArOTgsMTYgQEAgbGliZ2RreDExaW5jbHVkZV9IRUFERVJTID0gCVwKKyAJZ2RreDExdmlzdWFsLmgJCVwKKyAJZ2RreDExd2luZG93LmgKKyAKKytpZiBIQVZFX09QRU5HTAorK2xpYmdka3gxMWluY2x1ZGVfSEVBREVSUyArPSBnZGt4MTFnbGNvbnRleHQuaAorK2VuZGlmCisrCisgIyBXZSBuZWVkIHRvIGluY2x1ZGUgYWxsIHRoZXNlIEMgZmlsZXMgaGVyZSBzaW5jZSB0aGUgY29uZGl0aW9uYWxzCisgIyBkb24ndCBzZWVtIHRvIGJlIGNvcnJlY3RseSBleHBhbmRlZCBmb3IgdGhlIGRpc3QgZmlsZXMuCisgRVhUUkFfRElTVCArPSAJCQlcCisrCWdka3guaAkJCVwKKyAJZ2Rrc2V0dGluZ3MuYworIAorK01BSU5UQUlORVJDTEVBTkZJTEVTID0gZ2RreC5oCisrCisgLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9naXQubWsKK2RpZmYgLS1naXQgYS9nZGsveDExL2dka2Rpc3BsYXkteDExLmMgYi9nZGsveDExL2dka2Rpc3BsYXkteDExLmMKK2luZGV4IGRlOTFjNjQuLjQyZDUwZjYgMTAwNjQ0CistLS0gYS9nZGsveDExL2dka2Rpc3BsYXkteDExLmMKKysrKyBiL2dkay94MTEvZ2RrZGlzcGxheS14MTEuYworQEAgLTM3LDcgKzM3LDkgQEAKKyAjaW5jbHVkZSAiZ2RrZGlzcGxheS14MTEuaCIKKyAjaW5jbHVkZSAiZ2RrcHJpdmF0ZS14MTEuaCIKKyAjaW5jbHVkZSAiZ2Rrc2NyZWVuLXgxMS5oIgorKyNpZmRlZiBIQVZFX09QRU5HTAorICNpbmNsdWRlICJnZGtnbGNvbnRleHQteDExLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImdkay1wcml2YXRlLmgiCisgCisgI2luY2x1ZGUgPGdsaWIuaD4KK0BAIC0yOTU5LDcgKzI5NjEsOSBAQCBnZGtfeDExX2Rpc3BsYXlfY2xhc3NfaW5pdCAoR2RrWDExRGlzcGxheUNsYXNzICogY2xhc3MpCisgICBkaXNwbGF5X2NsYXNzLT50ZXh0X3Byb3BlcnR5X3RvX3V0ZjhfbGlzdCA9IF9nZGtfeDExX2Rpc3BsYXlfdGV4dF9wcm9wZXJ0eV90b191dGY4X2xpc3Q7CisgICBkaXNwbGF5X2NsYXNzLT51dGY4X3RvX3N0cmluZ190YXJnZXQgPSBfZ2RrX3gxMV9kaXNwbGF5X3V0ZjhfdG9fc3RyaW5nX3RhcmdldDsKKyAKKy0gIGRpc3BsYXlfY2xhc3MtPm1ha2VfZ2xfY29udGV4dF9jdXJyZW50ID0gZ2RrX3gxMV9kaXNwbGF5X21ha2VfZ2xfY29udGV4dF9jdXJyZW50OworKyNpZmRlZiBIQVZFX09QRU5HTAorKyAgIGRpc3BsYXlfY2xhc3MtPm1ha2VfZ2xfY29udGV4dF9jdXJyZW50ID0gZ2RrX3gxMV9kaXNwbGF5X21ha2VfZ2xfY29udGV4dF9jdXJyZW50OworKyNlbmRpZgorIAorICAgZGlzcGxheV9jbGFzcy0+Z2V0X2RlZmF1bHRfc2VhdCA9IGdka194MTFfZGlzcGxheV9nZXRfZGVmYXVsdF9zZWF0OworIAorZGlmZiAtLWdpdCBhL2dkay94MTEvZ2Rrc2NyZWVuLXgxMS5jIGIvZ2RrL3gxMS9nZGtzY3JlZW4teDExLmMKK2luZGV4IDlkOGVkMjAuLmJkNDZiMDAgMTAwNjQ0CistLS0gYS9nZGsveDExL2dka3NjcmVlbi14MTEuYworKysrIGIvZ2RrL3gxMS9nZGtzY3JlZW4teDExLmMKK0BAIC0xOTY4LDMgKzE5NjgsOCBAQCBnZGtfeDExX3NjcmVlbl9nZXRfY3VycmVudF9kZXNrdG9wIChHZGtTY3JlZW4gKnNjcmVlbikKKyB7CisgICByZXR1cm4gZ2V0X25ldHdtX2NhcmRpbmFsX3Byb3BlcnR5IChzY3JlZW4sICJfTkVUX0NVUlJFTlRfREVTS1RPUCIpOworIH0KKysKKysjaWZuZGVmIEhBVkVfT1BFTkdMCisrLyogRnVuY3Rpb24gZnJvbSBpbiBnZGsveDExL2dka2dsY29udGV4dC14MTEuYyAqLworK3ZvaWQgX2dka194MTFfc2NyZWVuX3VwZGF0ZV92aXN1YWxzX2Zvcl9nbCAoR2RrU2NyZWVuICpzY3JlZW4pIHt9CisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvZ2RrL3gxMS9nZGt3aW5kb3cteDExLmMgYi9nZGsveDExL2dka3dpbmRvdy14MTEuYworaW5kZXggOWVkMDg3YS4uMzBkNmViNyAxMDA2NDQKKy0tLSBhL2dkay94MTEvZ2Rrd2luZG93LXgxMS5jCisrKysgYi9nZGsveDExL2dka3dpbmRvdy14MTEuYworQEAgLTM2LDcgKzM2LDkgQEAKKyAjaW5jbHVkZSAiZ2RrYXN5bmMuaCIKKyAjaW5jbHVkZSAiZ2RrZXZlbnRzb3VyY2UuaCIKKyAjaW5jbHVkZSAiZ2RrZGlzcGxheS14MTEuaCIKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAjaW5jbHVkZSAiZ2RrZ2xjb250ZXh0LXgxMS5oIgorKyNlbmRpZgorICNpbmNsdWRlICJnZGtwcml2YXRlLXgxMS5oIgorICNpbmNsdWRlICJnZGstcHJpdmF0ZS5oIgorIAorQEAgLTU3ODIsNyArNTc4NCw5IEBAIGdka193aW5kb3dfaW1wbF94MTFfY2xhc3NfaW5pdCAoR2RrV2luZG93SW1wbFgxMUNsYXNzICprbGFzcykKKyAgIGltcGxfY2xhc3MtPnNldF9vcGFxdWVfcmVnaW9uID0gZ2RrX3gxMV93aW5kb3dfc2V0X29wYXF1ZV9yZWdpb247CisgICBpbXBsX2NsYXNzLT5zZXRfc2hhZG93X3dpZHRoID0gZ2RrX3gxMV93aW5kb3dfc2V0X3NoYWRvd193aWR0aDsKKyAgIGltcGxfY2xhc3MtPnNob3dfd2luZG93X21lbnUgPSBnZGtfeDExX3dpbmRvd19zaG93X3dpbmRvd19tZW51OworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgaW1wbF9jbGFzcy0+Y3JlYXRlX2dsX2NvbnRleHQgPSBnZGtfeDExX3dpbmRvd19jcmVhdGVfZ2xfY29udGV4dDsKKyAgIGltcGxfY2xhc3MtPmludmFsaWRhdGVfZm9yX25ld19mcmFtZSA9IGdka194MTFfd2luZG93X2ludmFsaWRhdGVfZm9yX25ld19mcmFtZTsKKysjZW5kaWYKKyAgIGltcGxfY2xhc3MtPmdldF91bnNjYWxlZF9zaXplID0gZ2RrX3gxMV93aW5kb3dfZ2V0X3Vuc2NhbGVkX3NpemU7CisgfQorZGlmZiAtLWdpdCBhL2dkay94MTEvZ2RreC1hdXRvY2xlYW51cHMuaCBiL2dkay94MTEvZ2RreC1hdXRvY2xlYW51cHMuaAoraW5kZXggZWRiMGVhNy4uYTMxN2Q2MSAxMDA2NDQKKy0tLSBhL2dkay94MTEvZ2RreC1hdXRvY2xlYW51cHMuaAorKysrIGIvZ2RrL3gxMS9nZGt4LWF1dG9jbGVhbnVwcy5oCitAQCAtMzAsNyArMzAsOSBAQCBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHZGtYMTFEZXZpY2VYSTIsIGdfb2JqZWN0X3VucmVmKQorIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdka1gxMURpc3BsYXksIGdfb2JqZWN0X3VucmVmKQorIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdka1gxMURpc3BsYXlNYW5hZ2VyLCBnX29iamVjdF91bnJlZikKKyBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHZGtYMTFEcmFnQ29udGV4dCwgZ19vYmplY3RfdW5yZWYpCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR2RrWDExR0xDb250ZXh0LCBnX29iamVjdF91bnJlZikKKysjZW5kaWYKKyBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHZGtYMTFLZXltYXAsIGdfb2JqZWN0X3VucmVmKQorIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdka1gxMVNjcmVlbiwgZ19vYmplY3RfdW5yZWYpCisgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR2RrWDExVmlzdWFsLCBnX29iamVjdF91bnJlZikKK2RpZmYgLS1naXQgYS9nZGsveDExL2dka3gtd2l0aC1nbC1jb250ZXh0LmggYi9nZGsveDExL2dka3gtd2l0aC1nbC1jb250ZXh0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hZTA1ZmE2CistLS0gL2Rldi9udWxsCisrKysgYi9nZGsveDExL2dka3gtd2l0aC1nbC1jb250ZXh0LmgKK0BAIC0wLDAgKzEsNTkgQEAKKysvKiBHREsgLSBUaGUgR0lNUCBEcmF3aW5nIEtpdAorKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IFBldGVyIE1hdHRpcywgU3BlbmNlciBLaW1iYWxsIGFuZCBKb3NoIE1hY0RvbmFsZAorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrICovCisrCisrLyoKKysgKiBNb2RpZmllZCBieSB0aGUgR1RLKyBUZWFtIGFuZCBvdGhlcnMgMTk5Ny0yMDAwLiAgU2VlIHRoZSBBVVRIT1JTCisrICogZmlsZSBmb3IgYSBsaXN0IG9mIHBlb3BsZSBvbiB0aGUgR1RLKyBUZWFtLiAgU2VlIHRoZSBDaGFuZ2VMb2cKKysgKiBmaWxlcyBmb3IgYSBsaXN0IG9mIGNoYW5nZXMuICBUaGVzZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgd2l0aAorKyAqIEdUSysgYXQgZnRwOi8vZnRwLmd0ay5vcmcvcHViL2d0ay8uCisrICovCisrCisrI2lmbmRlZiBfX0dES19YX0hfXworKyNkZWZpbmUgX19HREtfWF9IX18KKysKKysjaW5jbHVkZSA8Z2RrL2dkay5oPgorKworKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKysKKysjZGVmaW5lIF9fR0RLWF9IX0lOU0lERV9fCisrCisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExYXBwbGF1bmNoY29udGV4dC5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWN1cnNvci5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZS1jb3JlLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlLXhpMi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZW1hbmFnZXIuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2VtYW5hZ2VyLWNvcmUuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2VtYW5hZ2VyLXhpMi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRpc3BsYXkuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkaXNwbGF5bWFuYWdlci5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRuZC5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWdsY29udGV4dC5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWtleXMuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFwcm9wZXJ0eS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXNjcmVlbi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXNlbGVjdGlvbi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXV0aWxzLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExdmlzdWFsLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExd2luZG93Lmg+CisrCisrI2luY2x1ZGUgPGdkay94MTEvZ2RreC1hdXRvY2xlYW51cHMuaD4KKysKKysjdW5kZWYgX19HREtYX0hfSU5TSURFX18KKysKKysjZW5kaWYgLyogX19HREtfWF9IX18gKi8KK2RpZmYgLS1naXQgYS9nZGsveDExL2dka3gtd2l0aG91dC1nbC1jb250ZXh0LmggYi9nZGsveDExL2dka3gtd2l0aG91dC1nbC1jb250ZXh0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jOWUyNjE3CistLS0gL2Rldi9udWxsCisrKysgYi9nZGsveDExL2dka3gtd2l0aG91dC1nbC1jb250ZXh0LmgKK0BAIC0wLDAgKzEsNTggQEAKKysvKiBHREsgLSBUaGUgR0lNUCBEcmF3aW5nIEtpdAorKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IFBldGVyIE1hdHRpcywgU3BlbmNlciBLaW1iYWxsIGFuZCBKb3NoIE1hY0RvbmFsZAorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrICovCisrCisrLyoKKysgKiBNb2RpZmllZCBieSB0aGUgR1RLKyBUZWFtIGFuZCBvdGhlcnMgMTk5Ny0yMDAwLiAgU2VlIHRoZSBBVVRIT1JTCisrICogZmlsZSBmb3IgYSBsaXN0IG9mIHBlb3BsZSBvbiB0aGUgR1RLKyBUZWFtLiAgU2VlIHRoZSBDaGFuZ2VMb2cKKysgKiBmaWxlcyBmb3IgYSBsaXN0IG9mIGNoYW5nZXMuICBUaGVzZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgd2l0aAorKyAqIEdUSysgYXQgZnRwOi8vZnRwLmd0ay5vcmcvcHViL2d0ay8uCisrICovCisrCisrI2lmbmRlZiBfX0dES19YX0hfXworKyNkZWZpbmUgX19HREtfWF9IX18KKysKKysjaW5jbHVkZSA8Z2RrL2dkay5oPgorKworKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKysKKysjZGVmaW5lIF9fR0RLWF9IX0lOU0lERV9fCisrCisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExYXBwbGF1bmNoY29udGV4dC5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWN1cnNvci5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZS1jb3JlLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlLXhpMi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZW1hbmFnZXIuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2VtYW5hZ2VyLWNvcmUuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2VtYW5hZ2VyLXhpMi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRpc3BsYXkuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkaXNwbGF5bWFuYWdlci5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRuZC5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWtleXMuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFwcm9wZXJ0eS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXNjcmVlbi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXNlbGVjdGlvbi5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXV0aWxzLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExdmlzdWFsLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExd2luZG93Lmg+CisrCisrI2luY2x1ZGUgPGdkay94MTEvZ2RreC1hdXRvY2xlYW51cHMuaD4KKysKKysjdW5kZWYgX19HREtYX0hfSU5TSURFX18KKysKKysjZW5kaWYgLyogX19HREtfWF9IX18gKi8KK2RpZmYgLS1naXQgYS9nZGsveDExL2dka3guaCBiL2dkay94MTEvZ2RreC5oCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGFlMDVmYTYuLjAwMDAwMDAKKy0tLSBhL2dkay94MTEvZ2RreC5oCisrKysgL2Rldi9udWxsCitAQCAtMSw1OSArMCwwIEBACistLyogR0RLIC0gVGhlIEdJTVAgRHJhd2luZyBLaXQKKy0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBQZXRlciBNYXR0aXMsIFNwZW5jZXIgS2ltYmFsbCBhbmQgSm9zaCBNYWNEb25hbGQKKy0gKgorLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKy0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCistICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCistICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLSAqCistICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistICoKKy0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCistICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorLSAqLworLQorLS8qCistICogTW9kaWZpZWQgYnkgdGhlIEdUSysgVGVhbSBhbmQgb3RoZXJzIDE5OTctMjAwMC4gIFNlZSB0aGUgQVVUSE9SUworLSAqIGZpbGUgZm9yIGEgbGlzdCBvZiBwZW9wbGUgb24gdGhlIEdUSysgVGVhbS4gIFNlZSB0aGUgQ2hhbmdlTG9nCistICogZmlsZXMgZm9yIGEgbGlzdCBvZiBjaGFuZ2VzLiAgVGhlc2UgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIHdpdGgKKy0gKiBHVEsrIGF0IGZ0cDovL2Z0cC5ndGsub3JnL3B1Yi9ndGsvLgorLSAqLworLQorLSNpZm5kZWYgX19HREtfWF9IX18KKy0jZGVmaW5lIF9fR0RLX1hfSF9fCistCistI2luY2x1ZGUgPGdkay9nZGsuaD4KKy0KKy0jaW5jbHVkZSA8WDExL1hsaWIuaD4KKy0jaW5jbHVkZSA8WDExL1h1dGlsLmg+CistCistI2RlZmluZSBfX0dES1hfSF9JTlNJREVfXworLQorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWFwcGxhdW5jaGNvbnRleHQuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFjdXJzb3IuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2UuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2UtY29yZS5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZS14aTIuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2VtYW5hZ2VyLmg+CistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlbWFuYWdlci1jb3JlLmg+CistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlbWFuYWdlci14aTIuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkaXNwbGF5Lmg+CistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGlzcGxheW1hbmFnZXIuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkbmQuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFnbGNvbnRleHQuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFrZXlzLmg+CistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExcHJvcGVydHkuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFzY3JlZW4uaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFzZWxlY3Rpb24uaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTF1dGlscy5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMXZpc3VhbC5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMXdpbmRvdy5oPgorLQorLSNpbmNsdWRlIDxnZGsveDExL2dka3gtYXV0b2NsZWFudXBzLmg+CistCistI3VuZGVmIF9fR0RLWF9IX0lOU0lERV9fCistCistI2VuZGlmIC8qIF9fR0RLX1hfSF9fICovCitkaWZmIC0tZ2l0IGEvZ3RrL01ha2VmaWxlLmFtIGIvZ3RrL01ha2VmaWxlLmFtCitpbmRleCA2YTUzYTJiLi40OWEzNWU2IDEwMDY0NAorLS0tIGEvZ3RrL01ha2VmaWxlLmFtCisrKysgYi9ndGsvTWFrZWZpbGUuYW0KK0BAIC0xMzUxLDE0ICsxMzUxLDEzIEBAIGd0a3ByaXZhdGV0eXBlYnVpbHRpbnMuYzogJChndGtfcHJpdmF0ZV90eXBlX2hfc291cmNlcykgIGd0a3ByaXZhdGV0eXBlYnVpbHRpbnMuCisgCSYmIGNwIHhnZW4tZ3B0YmMgZ3RrcHJpdmF0ZXR5cGVidWlsdGlucy5jICBcCisgCSYmIHJtIC1mIHhnZW4tZ3B0YmMKKyAKKy0KKyBndGt0eXBlZnVuY3MuYzogc3RhbXAtZ3RrdHlwZWJ1aWx0aW5zLmggc3RhbXAtZ3RrcHJpdmF0ZXR5cGVidWlsdGlucy5oICQodG9wX3NyY2RpcikvZ3RrLyouaCAkKHRvcF9zcmNkaXIpL2d0ay9hMTF5LyouaCAkKHRvcF9zcmNkaXIpL2d0ay9kZXByZWNhdGVkLyouaCAkKHRvcF9zcmNkaXIpL2dkay8qLmggTWFrZWZpbGUKKyAJJChBTV9WX0dFTikgKGVjaG8gJyN1bmRlZiBHVEtfQ09NUElMQVRJT04nICYmIGVjaG8gJyNpbmNsdWRlIDxndGsvZ3RreC5oPicpID4geGdlbi1ndGZzcmMuYyAmJiBcCisgCSAgZWNobyAnR19HTlVDX0JFR0lOX0lHTk9SRV9ERVBSRUNBVElPTlMnID4geGdlbi1ndGYgJiYgXAorIAkgICR7Q1BQfSAkKERFRlMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgeGdlbi1ndGZzcmMuYyB8IFwKKyAJICAkKEdSRVApIC1vICdcYmdbdGRda19bYS16QS1aMC05X10qX2dldF90eXBlXGInIHwgXAorIAkgIHNvcnQgfCB1bmlxIHwgXAorLQkgICQoU0VEKSAneyBzL14vKnRwKysgPSAvOyBzLyQkLygpOy87IHMvXi4qXChnZGtfeDExXHxndGtfcGx1Z19cfGd0a19zb2NrZXRfXCkuKiQkLyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMVxuJlxuI2VuZGlmLzsgfScgPj4geGdlbi1ndGYgXAorKwkgICQoU0VEKSAneyBzL14vKnRwKysgPSAvOyBzLyQkLygpOy87IHMvXi4qXChnZGtfeDExXHxndGtfcGx1Z19cfGd0a19zb2NrZXRfXCkuKiQkLyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMVxuJlxuI2VuZGlmLzsgcy9eLipnZGtfeDExX2dsLiokJC8jaWZkZWYgSEFWRV9PUEVOR0xcbiZcbiNlbmRpZi87IH0nID4+IHhnZW4tZ3RmIFwKKyAJJiYgY3AgeGdlbi1ndGYgJEAgJiYgcm0gLWYgeGdlbi1ndGYKKyBndGt0ZXN0dXRpbHMuYzogZ3RrdHlwZWZ1bmNzLmMKKyAKK2RpZmYgLS1naXQgYS9ndGsvZ3RrZ2xhcmVhLmMgYi9ndGsvZ3RrZ2xhcmVhLmMKK2luZGV4IDI0NWZjNmIuLjQyMTRhZDEgMTAwNjQ0CistLS0gYS9ndGsvZ3RrZ2xhcmVhLmMKKysrKyBiL2d0ay9ndGtnbGFyZWEuYworQEAgLTI4LDcgKzI4LDkgQEAKKyAjaW5jbHVkZSAiZ3RrcHJpdmF0ZS5oIgorICNpbmNsdWRlICJndGtyZW5kZXIuaCIKKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKysjZW5kaWYKKyAKKyAvKioKKyAgKiBTRUNUSU9OOmd0a2dsYXJlYQorQEAgLTM1Nyw5ICszNTksMTIgQEAgZ3RrX2dsX2FyZWFfcmVhbF9jcmVhdGVfY29udGV4dCAoR3RrR0xBcmVhICphcmVhKQorIHN0YXRpYyB2b2lkCisgZ3RrX2dsX2FyZWFfcmVzaXplIChHdGtHTEFyZWEgKmFyZWEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyB7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBnbFZpZXdwb3J0ICgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKysjZW5kaWYKKyB9CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgLyoKKyAgKiBDcmVhdGVzIGFsbCB0aGUgYnVmZmVyIG9iamVjdHMgbmVlZGVkIGZvciByZW5kZXJpbmcgdGhlIHNjZW5lCisgICovCitAQCAtNDY3LDYgKzQ3Miw3IEBAIGd0a19nbF9hcmVhX2FsbG9jYXRlX2J1ZmZlcnMgKEd0a0dMQXJlYSAqYXJlYSkKKyAKKyAgIHByaXYtPm5lZWRzX3JlbmRlciA9IFRSVUU7CisgfQorKyNlbmRpZgorIAorIC8qKgorICAqIGd0a19nbF9hcmVhX2F0dGFjaF9idWZmZXJzOgorQEAgLTQ4NSw2ICs0OTEsNyBAQCBndGtfZ2xfYXJlYV9hbGxvY2F0ZV9idWZmZXJzIChHdGtHTEFyZWEgKmFyZWEpCisgdm9pZAorIGd0a19nbF9hcmVhX2F0dGFjaF9idWZmZXJzIChHdGtHTEFyZWEgKmFyZWEpCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgR3RrR0xBcmVhUHJpdmF0ZSAqcHJpdiA9IGd0a19nbF9hcmVhX2dldF9pbnN0YW5jZV9wcml2YXRlIChhcmVhKTsKKyAKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19HTF9BUkVBIChhcmVhKSk7CitAQCAtNTE3LDExICs1MjQsMTMgQEAgZ3RrX2dsX2FyZWFfYXR0YWNoX2J1ZmZlcnMgKEd0a0dMQXJlYSAqYXJlYSkKKyAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQgKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JFTkRFUkJVRkZFUl9FWFQsIHByaXYtPmRlcHRoX3N0ZW5jaWxfYnVmZmVyKTsKKyAgICAgfQorKyNlbmRpZgorIH0KKyAKKyBzdGF0aWMgdm9pZAorIGd0a19nbF9hcmVhX2RlbGV0ZV9idWZmZXJzIChHdGtHTEFyZWEgKmFyZWEpCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgR3RrR0xBcmVhUHJpdmF0ZSAqcHJpdiA9IGd0a19nbF9hcmVhX2dldF9pbnN0YW5jZV9wcml2YXRlIChhcmVhKTsKKyAKKyAgIGlmIChwcml2LT5jb250ZXh0ID09IE5VTEwpCitAQCAtNTUzLDYgKzU2Miw3IEBAIGd0a19nbF9hcmVhX2RlbGV0ZV9idWZmZXJzIChHdGtHTEFyZWEgKmFyZWEpCisgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgKDEsICZwcml2LT5mcmFtZV9idWZmZXIpOworICAgICAgIHByaXYtPmZyYW1lX2J1ZmZlciA9IDA7CisgICAgIH0KKysjZW5kaWYKKyB9CisgCisgc3RhdGljIHZvaWQKK0BAIC02NjMsNiArNjczLDcgQEAgZ3RrX2dsX2FyZWFfZHJhdyAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICBHdGtHTEFyZWEgKmFyZWEgPSBHVEtfR0xfQVJFQSAod2lkZ2V0KTsKKyAgIEd0a0dMQXJlYVByaXZhdGUgKnByaXYgPSBndGtfZ2xfYXJlYV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSAoYXJlYSk7CisgICBnYm9vbGVhbiB1bnVzZWQ7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBpbnQgdywgaCwgc2NhbGU7CisgICBHTGVudW0gc3RhdHVzOworIAorQEAgLTY3NCw3ICs2ODUsNiBAQCBndGtfZ2xfYXJlYV9kcmF3IChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodCAod2lkZ2V0KSk7CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CistCisgICBpZiAocHJpdi0+Y29udGV4dCA9PSBOVUxMKQorICAgICByZXR1cm4gRkFMU0U7CisgCitAQCAtNzIwLDYgKzczMCwxNCBAQCBndGtfZ2xfYXJlYV9kcmF3IChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAgfQorIAorICAgcmV0dXJuIFRSVUU7CisrI2Vsc2UKKysgIGlmIChwcml2LT5lcnJvciAhPSBOVUxMKQorKyAgICAgIGd0a19nbF9hcmVhX2RyYXdfZXJyb3Jfc2NyZWVuIChhcmVhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX3dpZHRoICh3aWRnZXQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0ICh3aWRnZXQpKTsKKysgIHJldHVybiBGQUxTRTsKKysjZW5kaWYKKyB9CisgCisgc3RhdGljIGdib29sZWFuCitkaWZmIC0tZ2l0IGEvZ3RrL2luc3BlY3Rvci9nZW5lcmFsLmMgYi9ndGsvaW5zcGVjdG9yL2dlbmVyYWwuYworaW5kZXggNGVhYjNhNy4uYzRlOTAwZSAxMDA2NDQKKy0tLSBhL2d0ay9pbnNwZWN0b3IvZ2VuZXJhbC5jCisrKysgYi9ndGsvaW5zcGVjdG9yL2dlbmVyYWwuYworQEAgLTMzLDggKzMzLDEwIEBACisgCisgI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCisgI2luY2x1ZGUgIngxMS9nZGt4LmgiCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgI2luY2x1ZGUgPGVwb3h5L2dseC5oPgorICNlbmRpZgorKyNlbmRpZgorIAorICNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisgI2luY2x1ZGUgIndpbjMyL2dka3dpbjMyLmgiCitAQCAtMTQ3LDYgKzE0OSw3IEBAIGFwcGVuZF9leHRlbnNpb25fcm93IChHdGtJbnNwZWN0b3JHZW5lcmFsICpnZW4sCisgICBndGtfc2l6ZV9ncm91cF9hZGRfd2lkZ2V0IChHVEtfU0laRV9HUk9VUCAoZ2VuLT5wcml2LT5sYWJlbHMpLCBsYWJlbCk7CisgfQorIAorKyNpZmRlZiBIQVZFX09QRU5HTAorICNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorIHN0YXRpYyB2b2lkCisgYXBwZW5kX2dseF9leHRlbnNpb25fcm93IChHdGtJbnNwZWN0b3JHZW5lcmFsICpnZW4sCitAQCAtMTU2LDYgKzE1OSw3IEBAIGFwcGVuZF9nbHhfZXh0ZW5zaW9uX3JvdyAoR3RrSW5zcGVjdG9yR2VuZXJhbCAqZ2VuLAorICAgYXBwZW5kX2V4dGVuc2lvbl9yb3cgKGdlbiwgZXh0LCBlcG94eV9oYXNfZ2x4X2V4dGVuc2lvbiAoZHB5LCAwLCBleHQpKTsKKyB9CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2lmZGVmIEdES19XSU5ET1dJTkdfV0FZTEFORAorIHN0YXRpYyB2b2lkCitAQCAtMTcxLDYgKzE3NSw3IEBAIGFwcGVuZF9lZ2xfZXh0ZW5zaW9uX3JvdyAoR3RrSW5zcGVjdG9yR2VuZXJhbCAqZ2VuLAorIHN0YXRpYyB2b2lkCisgaW5pdF9nbCAoR3RrSW5zcGVjdG9yR2VuZXJhbCAqZ2VuKQorIHsKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAgIGlmIChHREtfSVNfWDExX0RJU1BMQVkgKGdka19kaXNwbGF5X2dldF9kZWZhdWx0ICgpKSkKKyAgICAgeworQEAgLTE5Nyw2ICsyMDIsNyBAQCBpbml0X2dsIChHdGtJbnNwZWN0b3JHZW5lcmFsICpnZW4pCisgICAgIH0KKyAgIGVsc2UKKyAjZW5kaWYKKysjZW5kaWYKKyAjaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECisgICBpZiAoR0RLX0lTX1dBWUxBTkRfRElTUExBWSAoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQgKCkpKQorICAgICB7CitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNjgxODA3ZC4uMjk0MWEzNiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTgwLDggKzgwLDYgQEAgbm9pbnN0X1BST0dSQU1TID0gICQoVEVTVF9QUk9HUykJXAorIAl0ZXN0ZnVsbHNjcmVlbgkJCVwKKyAJdGVzdGdlb21ldHJ5CQkJXAorIAl0ZXN0Z2ljb25waXhidWYJCQlcCistCXRlc3RnbGFyZWEJCQlcCistCXRlc3RnbGJsZW5kaW5nCQkJXAorIAl0ZXN0Z3JpZAkJCVwKKyAJdGVzdGd0awkJCQlcCisgCXRlc3RoZWFkZXJiYXIJCQlcCitAQCAtMTY5LDExICsxNjcsMTcgQEAgbm9pbnN0X1BST0dSQU1TID0gICQoVEVTVF9QUk9HUykJXAorIAl0ZXN0YWN0aW9uYmFyCQkJXAorIAl0ZXN0d2luZG93c2l6ZQkJCVwKKyAJdGVzdHBvcG92ZXIJCQlcCistCWdka2dlYXJzCQkJXAorIAlsaXN0bW9kZWwJCQlcCisgCXRlc3Rwb3B1cAkJCVwKKyAJJChOVUxMKQorIAorK2lmIEhBVkVfT1BFTkdMCisrbm9pbnN0X1BST0dSQU1TICs9CisrCXRlc3RnbGFyZWEgICAgICAgICAgICAgICAgICAgICAgXAorKwl0ZXN0Z2xibGVuZGluZyAgICAgICAgICAgICAgICAgIFwKKysJZ2RrZ2VhcnMKKytlbmRpZgorKworIGlmIFVTRV9YMTEKKyBub2luc3RfUFJPR1JBTVMgKz0gdGVzdGVycm9ycworIGVuZGlmCitkaWZmIC0tZ2l0IGEvdGVzdHN1aXRlL2d0ay9vYmplY3RzLWZpbmFsaXplLmMgYi90ZXN0c3VpdGUvZ3RrL29iamVjdHMtZmluYWxpemUuYworaW5kZXggZTBlYmVlMC4uNzAzNjQzYyAxMDA2NDQKKy0tLSBhL3Rlc3RzdWl0ZS9ndGsvb2JqZWN0cy1maW5hbGl6ZS5jCisrKysgYi90ZXN0c3VpdGUvZ3RrL29iamVjdHMtZmluYWxpemUuYworQEAgLTExNSw4ICsxMTUsMTAgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgIGFsbF90eXBlc1tpXSAhPSBHREtfVFlQRV9YMTFfREVWSUNFX01BTkFHRVJfQ09SRSAmJgorIAkgIGFsbF90eXBlc1tpXSAhPSBHREtfVFlQRV9YMTFfREVWSUNFX01BTkFHRVJfWEkyICYmCisgCSAgYWxsX3R5cGVzW2ldICE9IEdES19UWVBFX1gxMV9ESVNQTEFZX01BTkFHRVIgJiYKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAJICBhbGxfdHlwZXNbaV0gIT0gR0RLX1RZUEVfWDExX0dMX0NPTlRFWFQgJiYKKyAjZW5kaWYKKysjZW5kaWYKKyAJICAvKiBOb3QgYWxsb3dlZCB0byBmaW5hbGl6ZSBhIEdka1BpeGJ1ZkxvYWRlciB3aXRob3V0IGNhbGxpbmcgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UoKSAqLworIAkgIGFsbF90eXBlc1tpXSAhPSBHREtfVFlQRV9QSVhCVUZfTE9BREVSICYmCisgCSAgYWxsX3R5cGVzW2ldICE9IGdka19waXhidWZfc2ltcGxlX2FuaW1faXRlcl9nZXRfdHlwZSgpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDQtY29uZmlndXJlLmFjLUZpeC13YXlsYW5kLXByb3RvY29scy1wYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDQtY29uZmlndXJlLmFjLUZpeC13YXlsYW5kLXByb3RvY29scy1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNGIzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwNC1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA5N2I3OGU1NjY2MzQ1NzliYmFlNTFiZTkxNGFlYWFhOTIxMTM3YThiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgOSBKdW4gMjAxNiAxMToyMTozNiArMDMwMAorU3ViamVjdDogW1BBVENIIDQvNF0gY29uZmlndXJlLmFjOiBGaXggd2F5bGFuZC1wcm90b2NvbHMgcGF0aAorCitUaGUgd2F5bGFuZC1wcm90b2NvbHMgZGlyZWN0b3J5IGlzIHVzZWQgZHVyaW5nIGJ1aWxkOiBGaXggdGhlIHBhdGgKK3RvIHBvaW50IHRvIHN5c3Jvb3Qgc3BlY2lmaWVkIGluIHJlY2lwZS4KKworTm9ybWFsbHkgUEtHX0NPTkZJR19TWVNST09UX0RJUiBjb3VsZCBiZSB1c2VkIGluIGNvbmZpZ3VyZS5hYyBidXQgdGhhdAorYnJlYWtzIG11bHRpbGliIGd0aysgYXMgaXQgd291bGQgcG9pbnQgdG8gbXVsdGlsaWIgc3lzcm9vdCB3aGVuIHRoZQorKGFsbGFyY2gpIHdheWxhbmQtcHJvdG9jb2xzIGlzIGFjdHVhbGx5IGluIHRoZSBtYWNoaW5lIHN5c3Jvb3QuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhM2U5YmViLi5kZGU5ZGM1IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00NjEsNyArNDYxLDcgQEAgZmkKKyBpZiB0ZXN0ICIkZW5hYmxlX3dheWxhbmRfYmFja2VuZCIgPSAieWVzIjsgdGhlbgorICAgIyBGb3IgdGhlIGNhaXJvIGltYWdlIGJhY2tlbmQKKyAgIGNhaXJvX2JhY2tlbmRzPSIkY2Fpcm9fYmFja2VuZHMgY2Fpcm8iCistICBBQ19TVUJTVChXQVlMQU5EX1BST1RPQ09MU19EQVRBRElSLCBgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wa2dkYXRhZGlyIHdheWxhbmQtcHJvdG9jb2xzYCkKKysgIEFDX1NVQlNUKFdBWUxBTkRfUFJPVE9DT0xTX0RBVEFESVIsICR7V0FZTEFORF9QUk9UT0NPTFNfU1lTUk9PVF9ESVJ9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGtnZGF0YWRpciB3YXlsYW5kLXByb3RvY29sc2ApCisgICBHREtfQkFDS0VORFM9IiRHREtfQkFDS0VORFMgd2F5bGFuZCIKKyAgIEdES19XSU5ET1dJTkc9IiRHREtfV0lORE9XSU5HCisgI2RlZmluZSBHREtfV0lORE9XSU5HX1dBWUxBTkQiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eby1ub3QtdHJ5LXRvLWluaXRpYWxpemUtR0wtd2l0aG91dC1saWJHTC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eby1ub3QtdHJ5LXRvLWluaXRpYWxpemUtR0wtd2l0aG91dC1saWJHTC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhjNDgwYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG8tbm90LXRyeS10by1pbml0aWFsaXplLUdMLXdpdGhvdXQtbGliR0wucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1Gcm9tIGZjMjIwNThhMTBkYjkxMzUzNGYxMTM0OGY4NjY4MWZlOWUxODM4ZTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotRGF0ZTogRnJpLCAxNiBPY3QgMjAxNSAxNjozNToxNiArMDMwMAotU3ViamVjdDogW1BBVENIXSBEbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgR0wgd2l0aG91dCBsaWJHTAotCi1fZ2RrX3gxMV9zY3JlZW5fdXBkYXRlX3Zpc3VhbHNfZm9yX2dsKCkgd2lsbCBlbmQgdXAgY2FsbGluZyBlcG94eXMKLUdMWCBhcGkgd2hpY2ggd2lsbCBleGl0KCkgaWYgbGliR0wuc28uMSBpcyBub3QgcHJlc2VudC4gV2UgZG8gbm90Ci13YW50IHRoYXQgdG8gaGFwcGVuIGFuZCB3ZSBkb24ndCB3YW50IGV2ZXJ5IGFwcCB0byBoYXZlIHRvIHNldAotIkdES19HTD1kaXNhYmxlZCIgZW52aXJvbm1lbnQgdmFyaWFibGU6IHNvIHVzZSAjaWZkZWYgc2V0IGJhc2VkIG9uCi1vcGVuZ2wgZGlzdHJvIGZlYXR1cmUuCi0KLVVwc3RyZWFtIGlzIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBmaXggYXMgaXQgaXM6IEVpdGhlciBlcG94eSBzaG91bGQgYmUKLWZpeGVkICh0byBub3QgZXhpdCkgb3IgR1RLKyBwb3NzaWJseSBjb3VsZCBkbyBzb21lIGFkZGl0aW9uYWwgcHJvYmluZwotYmVmb3JlIGNhbGxpbmcgZXBveHkgQVBJcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgICAgICAgICAgICB8IDcgKysrKysrKwotIGdkay94MTEvZ2RrdmlzdWFsLXgxMS5jIHwgNSArKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA3MjlhNjJlLi41OGNjMWFjIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0zMjgsNiArMzI4LDEzIEBAIEFDX0FSR19FTkFCTEUobWlyLWJhY2tlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSB0aGUgTWlyIGdkayBiYWNrZW5kXSldLAotIAkJCSAgICAgIFtiYWNrZW5kX3NldD15ZXNdKQotIAotK0FDX0FSR19FTkFCTEUoZ2x4LAotKyAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbHhdLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtXaGVuIGVuYWJsZWQgR2RrIHdpbGwgdHJ5IHRvIGluaXRpYWxpemUgR0xYXSldKQotK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9nbHgiICE9ICJ4bm8iXSwgWwotKyAgQUNfREVGSU5FKFtIQVZFX0dMWF0sIFtdLCBbR0xYIHdpbGwgYmUgYXZhaWxhYmxlIGF0IHJ1bnRpbWVdKQotK10pCi0rCi0gaWYgdGVzdCAteiAiJGJhY2tlbmRfc2V0IjsgdGhlbgotICAgaWYgdGVzdCAiJHBsYXRmb3JtX3dpbjMyIiA9IHllczsgdGhlbgotICAgICBlbmFibGVfd2luMzJfYmFja2VuZD15ZXMKLWRpZmYgLS1naXQgYS9nZGsveDExL2dka3Zpc3VhbC14MTEuYyBiL2dkay94MTEvZ2RrdmlzdWFsLXgxMS5jCi1pbmRleCBmM2IwNjJkLi5jODI0M2Y0IDEwMDY0NAotLS0tIGEvZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMKLSsrKyBiL2dkay94MTEvZ2RrdmlzdWFsLXgxMS5jCi1AQCAtMzQ1LDcgKzM0NSwxMiBAQCBfZ2RrX3gxMV9zY3JlZW5faW5pdF92aXN1YWxzIChHZGtTY3JlZW4gKnNjcmVlbikKLSAgIC8qIElmIEdMIGlzIGF2YWlsYWJsZSB3ZSB3YW50IHRvIHBpY2sgYmV0dGVyIGRlZmF1bHQvcmdiYSB2aXN1YWxzLAotICAgICAgYXMgd2UgY2FyZSBhYm91dCBnbHggZGV0YWlscyBzdWNoIGFzIGFscGhhL2RlcHRoL3N0ZW5jaWwgZGVwdGgsCi0gICAgICBzdGVyZW8gYW5kIGRvdWJsZSBidWZmZXJpbmcgKi8KLSsgIC8qIHVwZGF0ZV92aXN1YWxzX2Zvcl9nbCgpIHdpbGwgZW5kIHVwIGNhbGxpbmcgZXBveHkgR0xYIGFwaSB3aGljaAotKyAgICAgd2lsbCBleGl0IGlmIGxpYmdsIGlzIG5vdCB0aGVyZTogc28gb25seSBkbyB0aGlzIGlmIHdlIGtub3cgR0wKLSsgICAgIGlzIGF2YWlsYWJsZSAqLwotKyNpZmRlZiBIQVZFX0dMWAotICAgX2dka194MTFfc2NyZWVuX3VwZGF0ZV92aXN1YWxzX2Zvcl9nbCAoc2NyZWVuKTsKLSsjZW5kaWYKLSB9Ci0gCi0gZ2ludAotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZDhhODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvbnQtZm9yY2UtY3NkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLXdpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLQotCi1Gcm9tIGM1ZTVlZTY3NDkwZTdlN2FmNTYwNTJkOGY4YmViNzVkYjAwMmMyZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBFbW1hbnVlbGUgQmFzc2kgPGViYXNzaUBnbm9tZS5vcmc+Ci1EYXRlOiBXZWQsIDMgSnVuIDIwMTUgMTQ6MDc6MjkgKzAxMDAKLVN1YmplY3Q6IHdpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KLQotVGhlIGNoYW5nZSBpbiAwMzIxM2I5NTA5ZmMxZGYxNmM2NjE5NGVhMTY4YWVkNmMxNTExMGU5IGNoYW5nZWQgdGhlIHJ1bGVzCi1hcyB0byB3aGVuIENTRCBjYW4gYmUgZW5hYmxlZCwgYnV0IGl0IGFsc28gdW5jb25kaXRpb25hbGx5IGVuYWJsZXMgQ1NECi13aXRoIHRoZSBpbXBsaWNpdCBhc3N1bXB0aW9uIHRoYXQgY2xpZW50LXNpZGUgc2hhZG93cyB3ZXJlIHRoZSByZWFsCi1pc3N1ZSwgYW5kIHRoYXQgd2UgY291bGQgd29yayBhcm91bmQgdGhhdCBieSBkcmF3aW5nIG91ciBvd24gYm9yZGVycy4KLVRoaXMgYWxzbyBtZWFucyB0aGF0IHNldHRpbmcgYSB0aXRsZWJhciBmb3IgYSBHdGtXaW5kb3cgd2lsbCBlbmFibGUgQ1NECi11bmNvbmRpdGlvbmFsbHkuCi0KLUluIHJlYWxpdHksIHNvbWUgd2luZG93IG1hbmFnZXJzIChsaWtlIE1hdGNoYm94KSAqb25seSogc3VwcG9ydAotc2VydmVyLXNpZGUgZGVjb3JhdGlvbnMsIGFuZCB3aWxsIGlnbm9yZSBhbGwgaGludHMgdG8gdGhlIGNvbnRyYXJ5LCB0bwotdGhlIHBvaW50IG9mIGRyYXdpbmcgZGVjb3JhdGlvbnMgYXQgcmFuZG9tIGxvY2F0aW9ucyBvbiB0b3Agb2YgdGhlCi13aW5kb3cuCi0KLVNpbmNlIENTRCBhcmUgZW5hYmxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBHVEtfQ1NEIGVudmlyb25tZW50IHZhcmlhYmxlCi1pcyBhbHNvIG5vdCBhIHN1aXRhYmxlIGVzY2FwZSBoYXRjaC4KLQotSW4gdGhlIGdyYW5kIHRyYWRpdGlvbiBvZiBhc2tpbmcgb3Vyc2VsdmVzIGlmIHdlIHNob3VsZCBkbyBzb21ldGhpbmcKLWp1c3QgYmVjYXVzZSB3ZSBjYW4sIHdlIHNob3VsZCBzcGxpdCB0aGUgZW52aXJvbm1lbnQgY2hlY2tzIGZyb20gdGhlCi1jaGVja3Mgb24gd2hhdCB0aGUgdXNlciByZXF1ZXN0ZWQ7IGJ5IGRvaW5nIHRoYXQsIHdlIGNhbiBhbHNvIGNoZWNrCi13aGVuIGVuYWJsaW5nIGNsaWVudC1zaWRlIGRlY29yYXRpb25zLCBhbmQgaWRlYWxseSBiYWlsIG91dCBpZiBuZWVkZWQuCi0KLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAzNDMKLQotZGlmZiAtLWdpdCBhL2d0ay9ndGt3aW5kb3cuYyBiL2d0ay9ndGt3aW5kb3cuYwotaW5kZXggNDIzYzZiZC4uOWZlODgyZiAxMDA2NDQKLS0tLSBhL2d0ay9ndGt3aW5kb3cuYwotKysrIGIvZ3RrL2d0a3dpbmRvdy5jCi1AQCAtNDA1Niw2ICs0MDU2LDMyIEBAIGd0a193aW5kb3dfc3VwcG9ydHNfY2xpZW50X3NoYWRvdyAoR3RrV2luZG93ICp3aW5kb3cpCi0gICByZXR1cm4gVFJVRTsKLSB9Ci0gCi0rc3RhdGljIGdib29sZWFuCi0rZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCi0rewotKyAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7Ci0rCi0rI2lmZGVmIEdES19XSU5ET1dJTkdfQlJPQURXQVkKLSsgIGlmIChHREtfSVNfQlJPQURXQVlfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQotKyAgICByZXR1cm4gVFJVRTsKLSsjZW5kaWYKLSsKLSsjaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECi0rICBpZiAoR0RLX0lTX1dBWUxBTkRfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQotKyAgICByZXR1cm4gVFJVRTsKLSsjZW5kaWYKLSsKLSsjaWZkZWYgR0RLX1dJTkRPV0lOR19NSVIKLSsgIGlmIChHREtfSVNfTUlSX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKLSsgICAgcmV0dXJuIFRSVUU7Ci0rI2VuZGlmCi0rCi0rICBjc2RfZW52ID0gZ19nZXRlbnYgKCJHVEtfQ1NEIik7Ci0rCi0rICAvKiBJZiBHVEtfQ1NEIGlzIHVuc2V0IHdlIGRlZmF1bHQgdG8gQ1NEIHN1cHBvcnQgKi8KLSsgIHJldHVybiBjc2RfZW52ID09IE5VTEwgfHwgKHN0cmNtcCAoY3NkX2VudiwgIjEiKSA9PSAwKTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBndGtfd2luZG93X2VuYWJsZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQotIHsKLUBAIC00MDYzLDYgKzQwODksMTAgQEAgZ3RrX3dpbmRvd19lbmFibGVfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKLSAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gR1RLX1dJREdFVCAod2luZG93KTsKLSAgIEdka1Zpc3VhbCAqdmlzdWFsOwotIAotKyAgLyogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgQ1NELCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZW5hYmxpbmcgdGhlbSAqLwotKyAgaWYgKCFndGtfd2luZG93X2Nhbl91c2VfY3NkICh3aW5kb3cpKQotKyAgICByZXR1cm47Ci0rCi0gICAvKiBXZSBuZWVkIGEgdmlzdWFsIHdpdGggYWxwaGEgZm9yIGNsaWVudCBzaGFkb3dzICovCi0gICBpZiAocHJpdi0+dXNlX2NsaWVudF9zaGFkb3cpCi0gICAgIHsKLUBAIC01ODM5LDcgKzU4NjksNiBAQCBzdGF0aWMgZ2Jvb2xlYW4KLSBndGtfd2luZG93X3Nob3VsZF91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKLSB7Ci0gICBHdGtXaW5kb3dQcml2YXRlICpwcml2ID0gd2luZG93LT5wcml2OwotLSAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7Ci0gCi0gICBpZiAocHJpdi0+Y3NkX3JlcXVlc3RlZCkKLSAgICAgcmV0dXJuIFRSVUU7Ci1AQCAtNTg1MCwyNCArNTg3OSw3IEBAIGd0a193aW5kb3dfc2hvdWxkX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQotICAgaWYgKHByaXYtPnR5cGUgPT0gR1RLX1dJTkRPV19QT1BVUCkKLSAgICAgcmV0dXJuIEZBTFNFOwotIAotLSNpZmRlZiBHREtfV0lORE9XSU5HX0JST0FEV0FZCi0tICBpZiAoR0RLX0lTX0JST0FEV0FZX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKLS0gICAgcmV0dXJuIFRSVUU7Ci0tI2VuZGlmCi0tCi0tI2lmZGVmIEdES19XSU5ET1dJTkdfV0FZTEFORAotLSAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKLS0gICAgcmV0dXJuIFRSVUU7Ci0tI2VuZGlmCi0tCi0tI2lmZGVmIEdES19XSU5ET1dJTkdfTUlSCi0tICBpZiAoR0RLX0lTX01JUl9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCi0tICAgIHJldHVybiBUUlVFOwotLSNlbmRpZgotLQotLSAgY3NkX2VudiA9IGdfZ2V0ZW52ICgiR1RLX0NTRCIpOwotLQotLSAgcmV0dXJuIChnX3N0cmNtcDAgKGNzZF9lbnYsICIxIikgPT0gMCk7Ci0rICByZXR1cm4gZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAod2luZG93KTsKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLS0tIAotY2dpdCB2MC4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I0YmVlYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgotCi1JbmRleDogZ3RrKy0zLjguMi9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBndGsrLTMuOC4yLm9yaWcvY29uZmlndXJlLmFjCi0rKysgZ3RrKy0zLjguMi9jb25maWd1cmUuYWMKLUBAIC01MzEsNyArNTMxLDcgQEAgQUNfTVNHX0NIRUNLSU5HKFtXaGV0aGVyIHRvIHdyaXRlIGRlcGVuZAotIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCi0gICBhdXRvKQotICAgICBleHBvcnQgU0VECi0tICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCi0rICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCi0gICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICE9IHhwYXNzX2FsbCB8fCB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0geHllcyA7IHRoZW4KLSAgICAgICBlbmFibGVfZXhwbGljaXRfZGVwcz15ZXMKLSAgICAgZWxzZQotQEAgLTc5Myw3ICs3OTMsNyBAQCBlbHNlCi0gICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcwotICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCi0gICAgIGlmICRkeW53b3JrczsgdGhlbgotLSAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCi0rICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKLSAgICAgICAgIG1vZHVsZV9kZXBsaWJzX2NoZWNrPWAkbW9kdWxlX2xpYnRvb2xfY29uZmlnIHwgXAotICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKLSAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCi1AQCAtMTUyOCw3ICsxNTI4LDcgQEAgZmkKLSAjIFdlIGFyZSB1c2luZyBnbW9kdWxlLW5vLWV4cG9ydCBub3csIGJ1dCBJJ20gbGVhdmluZyB0aGUgc3RyaXBwaW5nCi0gIyBjb2RlIGluIHBsYWNlIGZvciBub3csIHNpbmNlIHBhbmdvIGFuZCBhdGsgc3RpbGwgcmVxdWlyZSBnbW9kdWxlLgotIGV4cG9ydCBTRUQKLS1leHBvcnRfZHluYW1pYz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAotK2V4cG9ydF9keW5hbWljPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCi0gaWYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgotICAgR0RLX0RFUF9MSUJTPWBlY2hvICRHREtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYAotICAgR1RLX0RFUF9MSUJTPWBlY2hvICRHVEtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTguOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE4LjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NmMwY2MuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTguOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgZ3RrKzMuaW5jCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLyR7TUFKX1ZFUn0vZ3RrKy0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vRG9udC1mb3JjZS1jc2QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vRG8tbm90LXRyeS10by1pbml0aWFsaXplLUdMLXdpdGhvdXQtbGliR0wucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjk2NzFhY2I0MWRjMTM1NjFkMTkyMzNmMWE3NWNmMTg0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFjNTNlZjFiYjU1MzY0Njk4ZjcxODNlY2QxODViNTQ3ZjkyZjRhM2E3YWJmYWZkNTMxNDAwMjMyZTJlMDUyZjgiCi0KLVMgPSAiJHtXT1JLRElSfS9ndGsrLSR7UFZ9IgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNTttZDU9MWQ4ZGMwZmNjZGJmYTI2Mjg3YTI3MWRjZTg4YWY3MzcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9MjU7bWQ1PWM5MjBjZTM5ZGM4OGM2ZjA2ZDNlN2M1MGUwODA4NmYyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI1O21kNT1jYjczMmRhZWUxZDgyYWY3YTJiZjk1M2NmM2NmMjZmMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjIwLjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4yMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZTA5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4yMC45LmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgZ3RrKzMuaW5jCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLyR7TUFKX1ZFUn0vZ3RrKy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1IYXJkY29kZWQtbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLURvLW5vdC10cnktdG8taW5pdGlhbGl6ZS1HTC13aXRob3V0LWxpYkdMLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtQWRkLWRpc2FibGUtb3BlbmdsLWNvbmZpZ3VyZS1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SZWRvLWZvY3VzLWhhbmRsaW5nLWluLXRyZWV2aWV3LW9uY2UtbW9yZS5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImNjNzZjYWM1ZTE4Yzc3MmM2Nzg0YmYxOWEzZGZmMDhiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzYTYwOWJhMmYzNDI0YjU1MDllNzM5NjdjNDljNjc4MzNhZjQ2NmQ2ZjkxMDgxYjI0ZWU1YzY0ZmNlNmFjMTciCisKK1MgPSAiJHtXT1JLRElSfS9ndGsrLSR7UFZ9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNTttZDU9MWQ4ZGMwZmNjZGJmYTI2Mjg3YTI3MWRjZTg4YWY3MzcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9MjU7bWQ1PWM5MjBjZTM5ZGM4OGM2ZjA2ZDNlN2M1MGUwODA4NmYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI1O21kNT1jYjczMmRhZWUxZDgyYWY3YTJiZjk1M2NmM2NmMjZmMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrK18yLjI0LjI5LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjU1ZDIwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjkuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1yZXF1aXJlIGd0aysuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI3O21kNT1jNTllMGI0NDkwZGQxMzVhNTcyNmViZjg1MWY5YjE3ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNzttZDU9MDdkYjI4NWVjMjA4ZmIzZTBiZjdkODYxYjA2MTQyMDIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9Mjc7bWQ1PTI2MmRiNWRiNWY3NzZmOTg2M2U1NmRmMzE0MjNlMjRjIgotU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLzIuMjQvZ3RrKy0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3RvZ2dsZS1mb250LmRpZmY7c3RyaXBsZXZlbD0wIFwKLSAgICAgICAgICAgZmlsZTovL2RvYy1maXhlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaCBcCi0JICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxYjdhMzY4OWY2NTYxNzM4N2I1YjU0NTIwZjQ0MzllOCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzQxYzU5NjAwZDNkODEwYTIyMzg2NjQ1M2RjMmJiYjE4Y2U0NzIzODI4NjgxYmEyNGFhNjUxOWMzNzYzMWI4IgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUteGtiIC0tZGlzYWJsZS1nbGlidGVzdCAtLWRpc2FibGUtY3VwcyAtLWRpc2FibGUteGluZXJhbWEiCi0KLUxJQlYgPSAiMi4xMC4wIgotCi1QQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrLWltbW9kdWxlLS4qIF5ndGstcHJpbnRiYWNrZW5kLS4qIgotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7Ci0gICAgZ3RrX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9JykKLSAgICBpbW1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAnaW1tb2R1bGVzJykKLSAgICBwcmludG1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAncHJpbnRiYWNrZW5kcycpOwotCi0gICAgZC5zZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGltbW9kdWxlc19yb290LCAnXmltLSguKilcLnNvJCcsICdndGstaW1tb2R1bGUtJXMnLCAnR1RLIGlucHV0IG1vZHVsZSBmb3IgJXMnKSkpCi0gICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcHJpbnRtb2R1bGVzX3Jvb3QsICdebGlicHJpbnRiYWNrZW5kLSguKilcLnNvJCcsICdndGstcHJpbnRiYWNrZW5kLSVzJywgJ0dUSyBwcmludGJhY2tlbmQgbW9kdWxlIGZvciAlcycpCi0KLSAgICBpZiAoZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpKToKLSAgICAgICAgZC5zZXRWYXIoZC5leHBhbmQoJ1BLR18ke1BOfScpLCAnJHtNTFBSRUZJWH1saWJndGstMi4wJykKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMzAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrK18yLjI0LjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTk5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrK18yLjI0LjMwLmJiCkBAIC0wLDAgKzEsMzQgQEAKK3JlcXVpcmUgZ3RrKy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9Mjc7bWQ1PWM1OWUwYjQ0OTBkZDEzNWE1NzI2ZWJmODUxZjliMTdmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI3O21kNT0wN2RiMjg1ZWMyMDhmYjNlMGJmN2Q4NjFiMDYxNDIwMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNzttZDU9MjYyZGI1ZGI1Zjc3NmY5ODYzZTU2ZGYzMTQyM2UyNGMiCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvMi4yNC9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG9nZ2xlLWZvbnQuZGlmZjtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vZG9jLWZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoIFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA0NTY4YmE1YzU4Yjc1ZTNjNzU0M2U0NTYyOGFkNzg5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkMTVjZWMzYjZkNTVjNjBlYWMyMDViMWYzYmE4MWExZWQ0ZWFkZDlkMGY4ZTdjNTA4YmM3MDY1ZDBjNGNhNTAiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS14a2IgLS1kaXNhYmxlLWdsaWJ0ZXN0IC0tZGlzYWJsZS1jdXBzIC0tZGlzYWJsZS14aW5lcmFtYSIKKworTElCViA9ICIyLjEwLjAiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGstaW1tb2R1bGUtLiogXmd0ay1wcmludGJhY2tlbmQtLioiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBndGtfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0nKQorICAgIGltbW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdpbW1vZHVsZXMnKQorICAgIHByaW50bW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdwcmludGJhY2tlbmRzJyk7CisKKyAgICBkLnNldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgJyAnLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgaW1tb2R1bGVzX3Jvb3QsICdeaW0tKC4qKVwuc28kJywgJ2d0ay1pbW1vZHVsZS0lcycsICdHVEsgaW5wdXQgbW9kdWxlIGZvciAlcycpKSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwcmludG1vZHVsZXNfcm9vdCwgJ15saWJwcmludGJhY2tlbmQtKC4qKVwuc28kJywgJ2d0ay1wcmludGJhY2tlbmQtJXMnLCAnR1RLIHByaW50YmFja2VuZCBtb2R1bGUgZm9yICVzJykKKworICAgIGlmIChkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSkpOgorICAgICAgICBkLnNldFZhcihkLmV4cGFuZCgnUEtHXyR7UE59JyksICcke01MUFJFRklYfWxpYmd0ay0yLjAnKQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjE4LjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTguOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzZjE0YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTguOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLVNVTU1BUlkgPSAiTmF0aXZlIGljb24gdXRpbHMgZm9yIEdUSysiCi1ERVNDUklQVElPTiA9ICJndGstdXBkYXRlLWljb24tY2FjaGUgYW5kIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIGJ1aWx0IGZyb20gR1RLKyBuYXRpdmVseSwgZm9yIGJ1aWxkIHRpbWUgYW5kIG9uLWhvc3QgcG9zdGluc3Qgc2NyaXB0IGV4ZWN1dGlvbi4iCi1TRUNUSU9OID0gImxpYnMiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAtbmF0aXZlIGdkay1waXhidWYtbmF0aXZlIGxpYnJzdmctbmF0aXZlIgotCi1MSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisgJiBMR1BMdjIuMSsiCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLyR7TUFKX1ZFUn0vZ3RrKy0ke1BWfS50YXIueHogXAotICAgICAgICAgIGZpbGU6Ly9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaCIKLVNSQ19VUklbbWQ1c3VtXSA9ICI5NjcxYWNiNDFkYzEzNTYxZDE5MjMzZjFhNzVjZjE4NCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIxYzUzZWYxYmI1NTM2NDY5OGY3MTgzZWNkMTg1YjU0N2Y5MmY0YTNhN2FiZmFmZDUzMTQwMDIzMmUyZTA1MmY4IgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNTttZDU9MWQ4ZGMwZmNjZGJmYTI2Mjg3YTI3MWRjZTg4YWY3MzcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9MjU7bWQ1PWM5MjBjZTM5ZGM4OGM2ZjA2ZDNlN2M1MGUwODA4NmYyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI1O21kNT1jYjczMmRhZWUxZDgyYWY3YTJiZjk1M2NmM2NmMjZmMSIKLQotUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCi0KLWluaGVyaXQgcGtnY29uZmlnIG5hdGl2ZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KLQotUEtHX0NPTkZJR19GT1JfQlVJTEQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BrZy1jb25maWctbmF0aXZlIgotCi1kb19jb25maWd1cmUoKSB7Ci0JIyBRdWl0ZSB1Z2x5IGJ1dCBkZWZpbmVzIGVub3VnaCB0byBjb21waWxlIHRoZSB0b29scy4KLQlpZiAhIHRlc3QgLWYgZ3RrL2NvbmZpZy5oOyB0aGVuCi0JCWVjaG8gIiNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFIFwiZ3RrMzBcIiIgPj4gZ3RrL2NvbmZpZy5oCi0JCWVjaG8gIiNkZWZpbmUgSEFWRV9VTklTVERfSCAxIiA+PiBndGsvY29uZmlnLmgKLQkJZWNobyAiI2RlZmluZSBIQVZFX0ZUV19IIDEiID4+IGd0ay9jb25maWcuaAotCWZpCi0JaWYgISB0ZXN0IC1mIGdkay9jb25maWcuaDsgdGhlbgotCQl0b3VjaCBnZGsvY29uZmlnLmgKLQlmaQotfQotCi1kb19jb21waWxlKCkgewotCSR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IFwKLQkJJHtTfS9ndGsvdXBkYXRlaWNvbmNhY2hlLmMgXAotCQkkKCR7UEtHX0NPTkZJR19GT1JfQlVJTER9IC0tY2ZsYWdzIC0tbGlicyBnZGstcGl4YnVmLTIuMCkgXAotCQktbyBndGstdXBkYXRlLWljb24tY2FjaGUKLQotCSR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IFwKLQkJJHtTfS9ndGsvZW5jb2Rlc3ltYm9saWMuYyBcCi0JCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdpby0yLjAgZ2RrLXBpeGJ1Zi0yLjApIFwKLQkJLW8gZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcKLX0KLQotZG9faW5zdGFsbCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KLQlpbnN0YWxsIC1tIDA3NTUgJHtCfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfQotCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnICR7RH0ke2JpbmRpcn0KLQotCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSBcCi0JCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCi0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgXAotCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycy5jYWNoZQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjIwLjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWMxZDYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjIwLjkuYmIKQEAgLTAsMCArMSw2MCBAQAorU1VNTUFSWSA9ICJOYXRpdmUgaWNvbiB1dGlscyBmb3IgR1RLKyIKK0RFU0NSSVBUSU9OID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSBhbmQgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgYnVpbHQgZnJvbSBHVEsrIG5hdGl2ZWx5LCBmb3IgYnVpbGQgdGltZSBhbmQgb24taG9zdCBwb3N0aW5zdCBzY3JpcHQgZXhlY3V0aW9uLiIKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlicnN2Zy1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgZmlsZTovL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImNjNzZjYWM1ZTE4Yzc3MmM2Nzg0YmYxOWEzZGZmMDhiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzYTYwOWJhMmYzNDI0YjU1MDllNzM5NjdjNDljNjc4MzNhZjQ2NmQ2ZjkxMDgxYjI0ZWU1YzY0ZmNlNmFjMTciCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgorCitTID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKKworaW5oZXJpdCBwa2djb25maWcgbmF0aXZlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCitQS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIFF1aXRlIHVnbHkgYnV0IGRlZmluZXMgZW5vdWdoIHRvIGNvbXBpbGUgdGhlIHRvb2xzLgorCWlmICEgdGVzdCAtZiBndGsvY29uZmlnLmg7IHRoZW4KKwkJZWNobyAiI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgXCJndGszMFwiIiA+PiBndGsvY29uZmlnLmgKKwkJZWNobyAiI2RlZmluZSBIQVZFX1VOSVNURF9IIDEiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfRlRXX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJZmkKKwlpZiAhIHRlc3QgLWYgZ2RrL2NvbmZpZy5oOyB0aGVuCisJCXRvdWNoIGdkay9jb25maWcuaAorCWZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay91cGRhdGVpY29uY2FjaGUuYyBcCisJCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay11cGRhdGUtaWNvbi1jYWNoZQorCisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay9lbmNvZGVzeW1ib2xpYy5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2lvLTIuMCBnZGstcGl4YnVmLTIuMCkgXAorCQktbyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgJHtEfSR7YmluZGlyfQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2Mtc3R1Yi9maWxlcy8wMDAxLVJldmVydC1JbXBvcnQtaW50cm9zcGVjdGlvbi1zdHViLW1hY2hpbmVyeS10b28ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2Mtc3R1Yi9maWxlcy8wMDAxLVJldmVydC1JbXBvcnQtaW50cm9zcGVjdGlvbi1zdHViLW1hY2hpbmVyeS10b28ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYjA1MjEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZmlsZXMvMDAwMS1SZXZlcnQtSW1wb3J0LWludHJvc3BlY3Rpb24tc3R1Yi1tYWNoaW5lcnktdG9vLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLUZyb20gZDYzNmJlMjliZjk1Mzk2YjRlMjdmY2QxN2ZmODRjYjcwOTFjY2E5MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotRGF0ZTogVGh1LCA4IE9jdCAyMDE1IDE1OjM3OjQwICswMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiSW1wb3J0IGludHJvc3BlY3Rpb24gc3R1YiBtYWNoaW5lcnkgdG9vIgotCi1UaGlzIHJldmVydHMgY29tbWl0IDNkZmQwYTA5ZGU2OTZlYzhjNTQ0NzYyNzQ3ZjhhMGY3NzE1MzYyMmUuCi1BcyB3ZSBwcm92aWRlIHRoZSBmdWxsIGludHJvc3BlY3Rpb24gc3VwcG9ydCwgd2UgbmVlZCB0byByZW1vdmUKLXRoZSBzdHVicyBmcm9tIHRoaXMgcGFja2FnZSB0aGF0IGNvbmZsaWN0IHdpdGggaXQuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbcmV2aWV3IG9uIG9lLWNvcmUgbGlzdF0KLVNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotLS0tCi0gTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNCAtLQotIE1ha2VmaWxlLmludHJvc3BlY3Rpb24gfCAxNjMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIGludHJvc3BlY3Rpb24ubTQgICAgICAgfCAgOTYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAzIGZpbGVzIGNoYW5nZWQsIDI2MyBkZWxldGlvbnMoLSkKLSBkZWxldGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUuaW50cm9zcGVjdGlvbgotIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRyb3NwZWN0aW9uLm00Ci0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCi1pbmRleCA3Y2I2Y2U1Li5hZDQyMzFhIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUKLSsrKyBiL01ha2VmaWxlCi1AQCAtMjMsNyArMjMsMyBAQCBpbnN0YWxsOiAkKGJpbl9wcm9ncmFtcykKLSAKLSAJbWtkaXIgLXAgJChERVNURElSKSQoZGF0YXJvb3RkaXIpL2FjbG9jYWwvCi0gCWluc3RhbGwgLW0gMDY0NCAkKHNyY2RpcikvZ3RrLWRvYy5tNCAkKERFU1RESVIpJChkYXRhcm9vdGRpcikvYWNsb2NhbC9ndGstZG9jLm00Ci0tCi0tCW1rZGlyIC1wICQoREVTVERJUikkKGRhdGFyb290ZGlyKS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wCi0tCWluc3RhbGwgLW0gMDY0NCAkKHNyY2RpcikvTWFrZWZpbGUuaW50cm9zcGVjdGlvbiAkKERFU1RESVIpJChkYXRhcm9vdGRpcikvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0tCWluc3RhbGwgLW0gMDY0NCAkKHNyY2RpcikvaW50cm9zcGVjdGlvbi5tNCAkKERFU1RESVIpJChkYXRhcm9vdGRpcikvYWNsb2NhbC9pbnRyb3NwZWN0aW9uLm00Ci1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW50cm9zcGVjdGlvbiBiL01ha2VmaWxlLmludHJvc3BlY3Rpb24KLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggNzU1ZGQxNS4uMDAwMDAwMAotLS0tIGEvTWFrZWZpbGUuaW50cm9zcGVjdGlvbgotKysrIC9kZXYvbnVsbAotQEAgLTEsMTYzICswLDAgQEAKLS0jIC0qLSBNb2RlOiBtYWtlIC0qLQotLSMgQ29weXJpZ2h0IDIwMDktMjAxMCBKb2hhbiBEYWhsaW4KLS0jCi0tIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIGF1dGhvcihzKSBnaXZlcyB1bmxpbWl0ZWQKLS0jIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0tIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLS0jCi0tIyAqIElucHV0IHZhcmlhYmxlczoKLS0jCi0tIyAgIElOVFJPU1BFQ1RJT05fR0lSUyAtIExpc3Qgb2YgR0lSUyB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQKLS0jICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSIC0gQ29tbWFuZCB0byBpbnZva2Ugc2Nhbm5lciwgbm9ybWFsbHkgc2V0IGJ5Ci0tIyAgICAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9SRVFVSVJFL0NIRUNLKCkgaW4gaW50cm9zcGVjdGlvbi5tNAotLSMgICBJTlRST1NQRUNUSU9OX1NDQU5ORVJfQVJHUyAtIEFkZGl0aW9uYWwgYXJncyB0byBwYXNzIGluIHRvIHRoZSBzY2FubmVyCi0tIyAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUl9FTlYgLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGJlZm9yZSBydW5uaW5nCi0tIyAgICAgIHRoZSBzY2FubmVyCi0tIyAgIElOVFJPU1BFQ1RJT05fQ09NUElMRVIgLSBDb21tYW5kIHRvIGludm9rZSBjb21waWxlciwgbm9ybWFsbHkgc2V0IGJ5Ci0tIyAgICAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9SRVFVSVJFL0NIRUNLKCkgaW4gaW50cm9zcGVjdGlvbi5tNAotLSMgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MgLSBBZGRpdGlvbmFsIGFyZ3MgdG8gcGFzcyBpbiB0byB0aGUgY29tcGlsZXIKLS0jCi0tIyAqIFNpbXBsZSB0dXRvcmlhbAotLSMKLS0jIEFkZCB0aGlzIHRvIGNvbmZpZ3VyZS5hYzoKLS0jICAgLVduby1wb3J0YWJpbGl0eSB0byBBTV9JTklUX0FVVE9NQUtFCi0tIyAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDSyhbMC42LjddKQotLSMKLS0jIEFkZCB0aGlzIHRvIE1ha2VmaWxlLmFtIHdoZXJlIHlvdXIgbGlicmFyeS9wcm9ncmFtIGlzIGJ1aWx0OgotLSMgICBpbmNsdWRlICQoSU5UUk9TUEVDVElPTl9NQUtFRklMRSkKLS0jICAgSU5UUk9TUEVDVElPTl9HSVJTID0gWW91ckxpYi0xLjAuZ2lyCi0tIyAgIFlvdXJMaWJfMV8wX2dpcl9OQU1FU1BBQ0UgPSBZb3VyTGliCi0tIyAgIFlvdXJMaWJfMV8wX2dpcl9WRVJTSU9OID0gMS4wCi0tIyAgIFlvdXJMaWJfMV8wX2dpcl9MSUJTID0gbGlieW91cmxpYi5sYQotLSMgICBZb3VyTGliXzFfMF9naXJfRklMRVMgPSAkKGxpYnlvdXJsaWJfMV8wX1NPVVJDRVMpCi0tIyAgIGdpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAotLSMgICBkaXN0X2dpcl9EQVRBID0gWW91ckxpYi0xLjAuZ2lyCi0tIyAgIHR5cGVsaWJkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMAotLSMgICB0eXBlbGliX0RBVEEgPSBZb3VyTGliLTEuMC50eXBlbGliCi0tIyAgIENMRUFORklMRVMgPSAkKGRpc3RfZ2lyX0RBVEEpICQodHlwZWxpYl9EQVRBKQotLSMKLS0KLS0jIE1ha2Ugc3VyZSB0aGUgcmVxdWlyZWQgdmFyaWFibGVzIGFyZSBzZXQsIHRoZXNlIHNob3VsZCB1bmRlciBub3JtYWwKLS0jIGNpcmN1bXN0YW5jZXMgY29tZSBmcm9tIGludHJvc3BlY3Rpb24ubTQKLS0kKGlmICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSwsJChlcnJvciBOZWVkIHRvIGRlZmluZSBJTlRST1NQRUNUSU9OX1NDQU5ORVIpKQotLSQoaWYgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSwsJChlcnJvciBOZWVkIHRvIGRlZmluZSBJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSkKLS0KLS0jIFByaXZhdGUgZnVuY3Rpb25zCi0tCi0tIyMgVHJhbnNmb3JtIHRoZSBnaXIgZmlsZW5hbWUgdG8gc29tZXRoaW5nIHdoaWNoIGNhbiByZWZlcmVuY2UgdGhyb3VnaCBhIHZhcmlhYmxlCi0tIyMgd2l0aG91dCBhdXRvbWFrZS9tYWtlIGNvbXBsYWluaW5nLCBlZyBHdGstMi4wLmdpciAtPiBHdGtfMl8wX2dpcgotLV9naXJfbmFtZSA9ICQoc3Vic3QgLyxfLCQoc3Vic3QgLSxfLCQoc3Vic3QgLixfLCQoMSkpKSkKLS0KLS0jIE5hbWVzcGFjZSBhbmQgVmVyc2lvbiBpcyBlaXRoZXIgZmV0Y2hlZCBmcm9tIHRoZSBnaXIgZmlsZW5hbWUKLS0jIG9yIHRoZSBfTkFNRVNQQUNFL19WRVJTSU9OIHZhcmlhYmxlIGNvbWJvCi0tX2dpcl9uYW1lc3BhY2UgPSAkKG9yICQoJChfZ2lyX25hbWUpX05BTUVTUEFDRSksJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJChub3RkaXIgJCgxKSkpKSkKLS1fZ2lyX3ZlcnNpb24gPSAkKG9yICQoJChfZ2lyX25hbWUpX1ZFUlNJT04pLCQobGFzdHdvcmQgJChzdWJzdCAtLCAsJCgxOi5naXI9KSkpKQotLQotLSMgX1BST0dSQU0gaXMgYW4gb3B0aW9uYWwgdmFyaWFibGUgd2hpY2ggbmVlZHMgaXQncyBvd24gLS1wcm9ncmFtIGFyZ3VtZW50Ci0tX2dpcl9wcm9ncmFtID0gJChpZiAkKCQoX2dpcl9uYW1lKV9QUk9HUkFNKSwtLXByb2dyYW09JCgkKF9naXJfbmFtZSlfUFJPR1JBTSkpCi0tCi0tIyBWYXJpYWJsZXMgd2hpY2ggcHJvdmlkZXMgYSBsaXN0IG9mIHRoaW5ncwotLV9naXJfbGlicmFyaWVzID0gJChmb3JlYWNoIGxpYiwkKCQoX2dpcl9uYW1lKV9MSUJTKSwtLWxpYnJhcnk9JChsaWIpKQotLV9naXJfcGFja2FnZXMgPSAkKGZvcmVhY2ggcGtnLCQoJChfZ2lyX25hbWUpX1BBQ0tBR0VTKSwtLXBrZz0kKHBrZykpCi0tX2dpcl9pbmNsdWRlcyA9ICQoZm9yZWFjaCBpbmNsdWRlLCQoJChfZ2lyX25hbWUpX0lOQ0xVREVTKSwtLWluY2x1ZGU9JChpbmNsdWRlKSkKLS1fZ2lyX2V4cG9ydF9wYWNrYWdlcyA9ICQoZm9yZWFjaCBwa2csJCgkKF9naXJfbmFtZSlfRVhQT1JUX1BBQ0tBR0VTKSwtLXBrZy1leHBvcnQ9JChwa2cpKQotLQotLSMgUmV1c2UgdGhlIExJQlRPT0wgdmFyaWFibGUgZnJvbSBhdXRvbWFrZSBpZiBpdCdzIHNldCwgYnV0Ci0tIyB3b3JrIGFyb3VuZCBNU1lTIHdlaXJkbmVzczogV2hlbiBydW5uaW5nIGctaXItc2Nhbm5lciwgTVNZUyBjaGFuZ2VzCi0tIyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudCAtLWxpYnRvb2w9Ii9iaW4vc2ggLi4vLi4vbGlidG9vbCIgaW50bwotLSMgLS1saWJ0b29sPWM6L29wdC9tc3lzLzEuMC9iaW4vbGlidG9vbC4gU28ganVzdCB1c2Ugc2guZXhlIHdpdGhvdXQgcGF0aAotLSMgYmVjYXVzZSB3ZSBhbHJlYWR5ICJrbm93IiB3aGVyZSB0aGUgbGlidG9vbCBjb25maWd1cmUgcHJvZHVjZWQgaXMuCi0tX2dpcl9saWJ0b29sID0gJChpZiAkKGZpbmRzdHJpbmcgTUlOR1czMiwkKHNoZWxsIHVuYW1lIC1zKSksLS1saWJ0b29sPSIkKHRvcF9idWlsZGRpcikvbGlidG9vbCIsJChpZiAkKExJQlRPT0wpLC0tbGlidG9vbD0iJChMSUJUT09MKSIpKQotLQotLSMgTWFjcm9zIGZvciBBTV9TSUxFTlRfUlVMRVMgcHJldHRpbmVzcwotLV9naXJfdmVyYm9zaXR5ID0gJChpZiAkKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSwkKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSwxKQotLQotLV9naXJfc2lsZW50X3NjYW5uZXJfcHJlZml4ID0gJChfZ2lyX3NpbGVudF9zY2FubmVyX3ByZWZpeF8kKFYpKQotLV9naXJfc2lsZW50X3NjYW5uZXJfcHJlZml4XyA9ICQoX2dpcl9zaWxlbnRfc2Nhbm5lcl9wcmVmaXhfJChfZ2lyX3ZlcmJvc2l0eSkpCi0tX2dpcl9zaWxlbnRfc2Nhbm5lcl9wcmVmaXhfMCA9IEBlY2hvICIgIEdJU0NBTiAkKDEpIjsKLS1fZ2lyX3NpbGVudF9zY2FubmVyX29wdHMgPSAkKF9naXJfc2lsZW50X3NjYW5uZXJfb3B0c18kKFYpKQotLV9naXJfc2lsZW50X3NjYW5uZXJfb3B0c18gPSAkKF9naXJfc2lsZW50X3NjYW5uZXJfb3B0c18kKF9naXJfdmVyYm9zaXR5KSkKLS1fZ2lyX3NpbGVudF9zY2FubmVyX29wdHNfMCA9IC0tcXVpZXQKLS0KLS1fZ2lyX3NpbGVudF9jb21waWxlciA9ICQoX2dpcl9zaWxlbnRfY29tcGlsZXJfJChWKSkKLS1fZ2lyX3NpbGVudF9jb21waWxlcl8gPSAkKF9naXJfc2lsZW50X2NvbXBpbGVyXyQoX2dpcl92ZXJib3NpdHkpKQotLV9naXJfc2lsZW50X2NvbXBpbGVyXzAgPSBAZWNobyAiICBHSUNPTVAgJCgxKSI7Ci0tCi0tIwotLSMgQ3JlYXRlcyBhIEdJUiBieSBzY2FubmluZyBDIGhlYWRlcnMvc291cmNlcwotLSMgJCgxKSAtIE5hbWUgb2YgdGhlIGdpciBmaWxlIChvdXRwdXQpCi0tIwotLSMgSWYgb3V0cHV0IGlzIEd0ay0yLjAuZ2lyIHRoZW4geW91IHNob3VsZCBuYW1lIHRoZSB2YXJpYWJsZXMgbGlrZQotLSMgR3RrXzJfMF9naXJfTkFNRVNQQUNFLCBHdGtfMl8wX2dpcl9WRVJTSU9OIGV0Yy4KLS0jIFJlcXVpcmVkIHZhcmlhYmxlczoKLS0jIEZJTEVTIC0gQyBzb3VyY2VzIGFuZCBoZWFkZXJzIHdoaWNoIHNob3VsZCBiZSBzY2FubmVkCi0tIwotLSMgT25lIG9mIHRoZXNlIHZhcmlhYmxlcyBhcmUgcmVxdWlyZWQ6Ci0tIyBMSUJTIC0gTGlicmFyeSB3aGVyZSB0aGUgc3ltYm9sIHJlcHJlc2VudGVkIGluIHRoZSBnaXIgY2FuIGJlIGZvdW5kCi0tIyBQUk9HUkFNIC0gUHJvZ3JhbSB3aGVyZSB0aGUgc3ltYm9sIHJlcHJlc2VudGVkIGluIHRoZSBnaXIgY2FuIGJlIGZvdW5kCi0tIwotLSMgT3B0aW9uYWwgdmFyaWFibGVzCi0tIyBOQU1FU1BBQ0UgLSBOYW1lc3BhY2Ugb2YgdGhlIGdpciwgZmlyc3QgbGV0dGVyIGNhcGl0YWwsCi0tIyAgIHJlc3Qgc2hvdWxkIGJlIGxvd2VyIGNhc2UsIGZvciBpbnN0YW5jZTogJ0d0aycsICdDbHV0dGVyJywgJ0NsdXR0ZXJHdGsnLgotLSMgICBJZiBub3QgcHJlc2VudCB0aGUgbmFtZXNwYWNlIHdpbGwgYmUgZmV0Y2hlZCBmcm9tIHRoZSBnaXIgZmlsZW5hbWUsCi0tIyAgIHRoZSBwYXJ0IGJlZm9yZSB0aGUgZmlyc3QgZGFzaC4gRm9yICdHdGstMi4wJywgbmFtZXNwYWNlIHdpbGwgYmUgJ0d0aycuCi0tIyBWRVJTSU9OIC0gVmVyc2lvbiBvZiB0aGUgZ2lyLCBpZiBub3QgcHJlc2VudCwgd2lsbCBiZSBmZXRjaGVkIGZyb20gZ2lyCi0tIyBmaWxlbmFtZSwgdGhlIHBhcnQgYWZ0ZXIgdGhlIGZpcnN0IGRhc2guIEZvciAnR3RrLTIuMCcsIHZlcnNpb24gd2lsbCBiZSAnMi4wJy4KLS0jIExJQlRPT0wgLSBDb21tYW5kIHRvIGludm9rZSBsaWJ0b29sLCB1c3VhbGx5IHNldCBieSBhdXRvbWFrZQotLSMgU0NBTk5FUkZMQUdTIC0gRmxhZ3MgdG8gcGFzcyBpbiB0byB0aGUgc2Nhbm5lciwgc2VlIGctaXItc2Nhbm5lcigxKSBmb3IgYSBsaXN0Ci0tIyBDRkxBR1MgLSBGbGFncyB0byBwYXNzIGluIHRvIHRoZSBwYXJzZXIgd2hlbiBzY2FubmluZyBoZWFkZXJzCi0tIyBMREZMQUdTIC0gTGlua2VyIGZsYWdzIHVzZWQgYnkgdGhlIHNjYW5uZXIKLS0jIFBBQ0tBR0VTIC0gbGlzdCBvZiBwa2ctY29uZmlnIG5hbWVzIHdoaWNoIGNmbGFncyBhcmUgcmVxdWlyZWQgdG8gcGFyc2UKLS0jICAgdGhlIGhlYWRlcnMgb2YgdGhpcyBnaXIKLS0jIElOQ0xVREVTIC0gR2lyIGZpbGVzIHRvIGluY2x1ZGUgd2l0aG91dCB0aGUgLmdpciBzdWZmaXgsIGZvciBpbnN0YW5jZQotLSMgICBHTGliLTIuMCwgR3RrLTIuMC4gVGhpcyBpcyBuZWVkZWQgZm9yIGFsbCBsaWJyYXJpZXMgd2hpY2ggeW91IGRlcGVuZCBvbiB0aGF0Ci0tIyAgIHByb3ZpZGVzIGludHJvc3BlY3Rpb24gaW5mb3JtYXRpb24uCi0tIyBFWFBPUlRfUEFDS0FHRVMgLSBsaXN0IG9mIHBrZy1jb25maWcgbmFtZXMgdGhhdCBhcmUgcHJvdmlkZWQgYnkgdGhpcyBnaXIuCi0tIyAgIEJ5IGRlZmF1bHQgdGhlIG5hbWVzIGluIHRoZSBQQUNLQUdFUyB2YXJpYWJsZSB3aWxsIGJlIHVzZWQuCi0tIwotLQotLWRlZmluZSBpbnRyb3NwZWN0aW9uLXNjYW5uZXIKLS0KLS0jIEJhc2ljIHNhbml0eSBjaGVjaywgdG8gbWFrZSBzdXJlIHJlcXVpcmVkIHZhcmlhYmxlcyBhcmUgc2V0Ci0tJChpZiAkKCQoX2dpcl9uYW1lKV9GSUxFUyksLCQoZXJyb3IgTmVlZCB0byBkZWZpbmUgJChfZ2lyX25hbWUpX0ZJTEVTKSkKLS0kKGlmICQob3IgJChmaW5kc3RyaW5nIC0taGVhZGVyLW9ubHksJCgkKF9naXJfbmFtZSlfU0NBTk5FUkZMQUdTKSksCi0tICAgICAgICAgICQoJChfZ2lyX25hbWUpX0xJQlMpLAotLSAgICAgICAgICAkKCQoX2dpcl9uYW1lKV9QUk9HUkFNKSksLAotLSAgICAkKGVycm9yIE5lZWQgdG8gZGVmaW5lICQoX2dpcl9uYW1lKV9MSUJTIG9yICQoX2dpcl9uYW1lKV9QUk9HUkFNKSkKLS0KLS0jIE9ubHkgZGVwZW5kZW5jaWVzIHdlIGtub3cgYXJlIGFjdHVhbGx5IGZpbGVuYW1lcyBnb2VzIGludG8gX0ZJTEVTLCBtYWtlCi0tIyBzdXJlIHRoZXNlIGFyZSBidWlsdCBiZWZvcmUgcnVubmluZyB0aGUgc2Nhbm5lci4gTGlicmFyaWVzIGFuZCBwcm9ncmFtcwotLSMgbmVlZHMgdG8gYmUgYWRkZWQgbWFudWFsbHkuCi0tJCgxKTogJCQoJChfZ2lyX25hbWUpX0ZJTEVTKQotLQlAICQoTUtESVJfUCkgJChkaXIgJCgxKSkKLS0JJChfZ2lyX3NpbGVudF9zY2FubmVyX3ByZWZpeCkgJChJTlRST1NQRUNUSU9OX1NDQU5ORVJfRU5WKSAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgJChfZ2lyX3NpbGVudF9zY2FubmVyX29wdHMpIFwKLS0JJChJTlRST1NQRUNUSU9OX1NDQU5ORVJfQVJHUykgXAotLQkgIC0tbmFtZXNwYWNlPSQoX2dpcl9uYW1lc3BhY2UpIFwKLS0JICAtLW5zdmVyc2lvbj0kKF9naXJfdmVyc2lvbikgXAotLQkgICQoX2dpcl9saWJ0b29sKSBcCi0tCSAgJChfZ2lyX3BhY2thZ2VzKSBcCi0tCSAgJChfZ2lyX2luY2x1ZGVzKSBcCi0tCSAgJChfZ2lyX2V4cG9ydF9wYWNrYWdlcykgXAotLQkgICQoX2dpcl9wcm9ncmFtKSBcCi0tCSAgJChfZ2lyX2xpYnJhcmllcykgXAotLQkgICQoJChfZ2lyX25hbWUpX1NDQU5ORVJGTEFHUykgXAotLQkgICQoJChfZ2lyX25hbWUpX0NGTEFHUykgXAotLQkgICQoJChfZ2lyX25hbWUpX0xERkxBR1MpIFwKLS0JICAkJF4gXAotLQkgIC0tb3V0cHV0ICQoMSkKLS1lbmRlZgotLQotLSQoZm9yZWFjaCBnaXIsJChJTlRST1NQRUNUSU9OX0dJUlMpLCQoZXZhbCAkKGNhbGwgaW50cm9zcGVjdGlvbi1zY2FubmVyLCQoZ2lyKSkpKQotLQotLSMKLS0jIENvbXBpbGVzIGEgZ2lyIGludG8gYSB0eXBlbGliCi0tIyAkKDEpOiBnaXIgZmlsZW5hbWUgKGlucHV0KQotLSMgJCgyKTogdHlwZWxpYiBmaWxlbmFtZSAob3V0cHV0KQotLSMKLS1kZWZpbmUgaW50cm9zcGVjdGlvbi1jb21waWxlcgotLSQoX2dpcl9zaWxlbnRfY29tcGlsZXIpICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MpIC0taW5jbHVkZWRpcj0uICQoMSkgLW8gJCgyKQotLWVuZGVmCi0tCi0tIyBTaW1wbGUgcnVsZSB0byBjb21waWxlIGEgdHlwZWxpYi4KLS0lLnR5cGVsaWI6ICUuZ2lyCi0tCSQoY2FsbCBpbnRyb3NwZWN0aW9uLWNvbXBpbGVyLCQ8LCRAKQotZGlmZiAtLWdpdCBhL2ludHJvc3BlY3Rpb24ubTQgYi9pbnRyb3NwZWN0aW9uLm00Ci1kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IGQ4OWMzZDkuLjAwMDAwMDAKLS0tLSBhL2ludHJvc3BlY3Rpb24ubTQKLSsrKyAvZGV2L251bGwKLUBAIC0xLDk2ICswLDAgQEAKLS1kbmwgLSotIG1vZGU6IGF1dG9jb25mIC0qLQotLWRubCBDb3B5cmlnaHQgMjAwOSBKb2hhbiBEYWhsaW4KLS1kbmwKLS1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBhdXRob3IocykgZ2l2ZXMgdW5saW1pdGVkCi0tZG5sIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0tZG5sIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotLWRubAotLQotLSMgc2VyaWFsIDEKLS0KLS1tNF9kZWZpbmUoW19HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUxdLAotLVsKLS0gICAgQUNfQkVGT1JFKFtBQ19QUk9HX0xJQlRPT0xdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKLS0gICAgQUNfQkVGT1JFKFtBTV9QUk9HX0xJQlRPT0xdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKLS0gICAgQUNfQkVGT1JFKFtMVF9JTklUXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0Ci0tCi0tICAgIGRubCBlbmFibGUvZGlzYWJsZSBpbnRyb3NwZWN0aW9uCi0tICAgIG00X2lmKFskMl0sIFtyZXF1aXJlXSwKLS0gICAgW2RubAotLSAgICAgICAgZW5hYmxlX2ludHJvc3BlY3Rpb249eWVzCi0tICAgIF0sW2RubAotLSAgICAgICAgQUNfQVJHX0VOQUJMRShpbnRyb3NwZWN0aW9uLAotLSAgICAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnRyb3NwZWN0aW9uWz1APDpAbm8vYXV0by95ZXNAOj5AXV0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0VuYWJsZSBpbnRyb3NwZWN0aW9uIGZvciB0aGlzIGJ1aWxkXSksLCAKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlX2ludHJvc3BlY3Rpb249YXV0b10pCi0tICAgIF0pZG5sCi0tCi0tICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGdvYmplY3QtaW50cm9zcGVjdGlvbl0pCi0tCi0tICAgIGRubCBwcmVzZW5jZS92ZXJzaW9uIGNoZWNraW5nCi0tICAgIEFTX0NBU0UoWyRlbmFibGVfaW50cm9zcGVjdGlvbl0sCi0tICAgIFtub10sIFtkbmwKLS0gICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249Im5vIChkaXNhYmxlZCwgdXNlIC0tZW5hYmxlLWludHJvc3BlY3Rpb24gdG8gZW5hYmxlKSIKLS0gICAgXSxkbmwKLS0gICAgW3llc10sW2RubAotLSAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMF0sLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgaXMgbm90IGluc3RhbGxlZF0pKQotLSAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAkMV0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1lvdSBuZWVkIHRvIGhhdmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uID49ICQxIGluc3RhbGxlZCB0byBidWlsZCBBQ19QQUNLQUdFX05BTUVdKSkKLS0gICAgXSxkbmwKLS0gICAgW2F1dG9dLFtkbmwKLS0gICAgICAgIFBLR19DSEVDS19FWElTVFMoW2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gJDFdLCBmb3VuZF9pbnRyb3NwZWN0aW9uPXllcywgZm91bmRfaW50cm9zcGVjdGlvbj1ubykKLS0JZG5sIENhbm9uaWNhbGl6ZSBlbmFibGVfaW50cm9zcGVjdGlvbgotLQllbmFibGVfaW50cm9zcGVjdGlvbj0kZm91bmRfaW50cm9zcGVjdGlvbgotLSAgICBdLGRubAotLSAgICBbZG5sCQotLSAgICAgICAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uLCBzaG91bGQgYmUgb25lIG9mIEA8OkBuby9hdXRvL3llc0A6PkBdKQotLSAgICBdKWRubAotLQotLSAgICBBQ19NU0dfUkVTVUxUKFskZm91bmRfaW50cm9zcGVjdGlvbl0pCi0tCi0tICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj0KLS0gICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj0KLS0gICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT0KLS0gICAgSU5UUk9TUEVDVElPTl9HSVJESVI9Ci0tICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0KLS0gICAgaWYgdGVzdCAieCRmb3VuZF9pbnRyb3NwZWN0aW9uIiA9ICJ4eWVzIjsgdGhlbgotLSAgICAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9zY2FubmVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0tICAgICAgIElOVFJPU1BFQ1RJT05fQ09NUElMRVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9jb21waWxlciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotLSAgICAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfZ2VuZXJhdGUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLS0gICAgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2lyZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0tICAgICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0iJCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXR5cGVsaWJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCkiCi0tICAgICAgIElOVFJPU1BFQ1RJT05fQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotLSAgICAgICBJTlRST1NQRUNUSU9OX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotLSAgICAgICBJTlRST1NQRUNUSU9OX01BS0VGSUxFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0tICAgIGZpCi0tICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fU0NBTk5FUikKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9HRU5FUkFURSkKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9HSVJESVIpCi0tICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUikKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9DRkxBR1MpCi0tICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fTElCUykKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9NQUtFRklMRSkKLS0KLS0gICAgQU1fQ09ORElUSU9OQUwoSEFWRV9JTlRST1NQRUNUSU9OLCB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiKQotLV0pCi0tCi0tCi0tZG5sIFVzYWdlOgotLWRubCAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDSyhbbWluaW11bS1nLWktdmVyc2lvbl0pCi0tCi0tQUNfREVGVU4oW0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS10sCi0tWwotLSAgX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTChbJDFdKQotLV0pCi0tCi0tZG5sIFVzYWdlOgotLWRubCAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9SRVFVSVJFKFttaW5pbXVtLWctaS12ZXJzaW9uXSkKLS0KLS0KLS1BQ19ERUZVTihbR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkVdLAotLVsKLS0gIF9HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUwoWyQxXSwgW3JlcXVpcmVdKQotLV0pCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2Mtc3R1Yi9ndGstZG9jLXN0dWJfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGU0OWMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1TVU1NQVJZID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYyIKLURFU0NSSVBUSU9OID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYywgYXMgd2UgZG9uJ3Qgd2FudCB0byBidWlsZCB0aGUgQVBJIGRvY3VtZW50YXRpb24iCi1TRUNUSU9OID0gIngxMS9iYXNlIgotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgotCi1QUk9WSURFUyA9ICJndGstZG9jIgotCi1TUkNSRVYgPSAiMWRlYTI2NjU5M2VkYjc2NmQ2ZDg5OGM3OTQ1MWVmMTkzZWIxN2NmYSIKLVBWID0gIjEuMStnaXQke1NSQ1BWfSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7QlBOfSBcCi0JICAgZmlsZTovLzAwMDEtUmV2ZXJ0LUltcG9ydC1pbnRyb3NwZWN0aW9uLXN0dWItbWFjaGluZXJ5LXRvby5wYXRjaCBcCi0JICAiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWRvX2NvbmZpZ3VyZSgpIHsKLQkuL2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gXAotICAgICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCi0gICAgICAgICAgICAgICAgICAgIC0tYmluZGlyPSR7YmluZGlyfSBcCi0gICAgICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7bGliZGlyfSBcCi0gICAgICAgICAgICAgICAgICAgIC0tZGF0YWRpcj0ke2RhdGFkaXJ9IFwKLSAgICAgICAgICAgICAgICAgICAgLS1kYXRhcm9vdGRpcj0ke2RhdGFkaXJ9Ci19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9IiR7RH0iCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYtcGVybC1pcy1ub3QtZm91bmQtb3ItaXRzLXZlcnNpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZmlsZXMvMDAwMS1Eby1ub3QtZXJyb3Itb3V0LWlmLXBlcmwtaXMtbm90LWZvdW5kLW9yLWl0cy12ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOTAyODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZmlsZXMvMDAwMS1Eby1ub3QtZXJyb3Itb3V0LWlmLXBlcmwtaXMtbm90LWZvdW5kLW9yLWl0cy12ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gZTczMzI0MWZiNTgwZjAzMmVmYmJlNjg0ZWMzNWQ0YzlkMjdmMTU5NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCA4IFNlcCAyMDE2IDEzOjM4OjM5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCBlcnJvciBvdXQgaWYgcGVybCBpcyBub3QgZm91bmQgb3IgaXRzIHZlcnNpb24gaXMgdG9vCisgb2xkLgorCitUaGlzIGFsbG93cyB1c2UgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIHBlcmwtbmF0aXZlIGlmIHdlJ3JlIG5vdCBnb2luZwordG8gdXNlIGl0ICh3aGVuIGFwaS1kb2NzIGFyZSBkaXNhYmxlZCkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2UtY29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMmE2MWQ2ZS4uMjk0MTViZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzYsNyArMzYsNyBAQCBkbmwgQ2hlY2sgZm9yIFBlcmwuCisgZG5sCisgQUNfUEFUSF9QUk9HKFtQRVJMXSwgW3BlcmxdKQorIGlmIHRlc3QgLXogIiRQRVJMIjsgdGhlbgorLQlBQ19NU0dfRVJST1IoW3Blcmwgbm90IGZvdW5kXSkKKysJQUNfTVNHX1dBUk4oW3Blcmwgbm90IGZvdW5kXSkKKyBmaQorIAorIEFDX01TR19DSEVDS0lORyhbaWYgUGVybCB2ZXJzaW9uID49IDUuMTguMF0pCitAQCAtNDQsNyArNDQsNyBAQCBpZiAiJFBFUkwiIC1lICJyZXF1aXJlIHY1LjE4LjAiOyB0aGVuCisgCUFDX01TR19SRVNVTFQoW3llc10pCisgZWxzZQorIAlBQ19NU0dfUkVTVUxUKFtub10pCistCUFDX01TR19FUlJPUihbcGVybCA+PSA1LjE4LjAgaXMgcmVxdWlyZWQgZm9yIGd0ay1kb2NdKQorKwlBQ19NU0dfV0FSTihbcGVybCA+PSA1LjE4LjAgaXMgcmVxdWlyZWQgZm9yIGd0ay1kb2NdKQorIGZpCisgCisgZG5sCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYteHNsdHByb2MtaXMtbm90LWZvdW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzLzAwMDEtRG8tbm90LWVycm9yLW91dC1pZi14c2x0cHJvYy1pcy1ub3QtZm91bmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhZTRkNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYteHNsdHByb2MtaXMtbm90LWZvdW5kLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gOGI3ZmJiYjQwNTk1OWYyODY4YWQ2ZWFkZDdkZDAwMDE4NzU4YThhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCA3IFNlcCAyMDE2IDE0OjUyOjA0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCBlcnJvciBvdXQgaWYgeHNsdHByb2MgaXMgbm90IGZvdW5kLgorCitUaGlzIGFsbG93cyB1cyB0byBkcm9wIHRoZSBoYXJkIHhzbHRwcm9jIGRlcGVuZGVuY3ksIGlmIHdlJ3JlIG5vdAorZ29pbmcgdG8gYWN0dWFsbHkgcnVuIHRoZSBndGtkb2Mgc2NyaXB0cyAod2hlbiBhcGkgZG9jdW1lbnRhdGlvbiBpcworZGlzYWJsZWQpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLWNvcmUgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjBjODhkNy4uMmE2MWQ2ZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTgsNyArNTgsNyBAQCBkbmwgQ2hlY2sgZm9yIHhzbHRwcm9jCisgZG5sCisgQUNfUEFUSF9QUk9HKFtYU0xUUFJPQ10sIFt4c2x0cHJvY10pCisgaWYgdGVzdCAteiAiJFhTTFRQUk9DIjsgdGhlbgorLQlBQ19NU0dfRVJST1IoW3hzbHRwcm9jIG5vdCBmb3VuZF0pCisrCUFDX01TR19XQVJOKFt4c2x0cHJvYyBub3QgZm91bmRdKQorIGZpCisgCisgZG5sCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy8wMDAxLURvLW5vdC1oYXJkb2NvZGUtcGF0aHMtdG8tcGVybC1weXRob24taW4tc2NyaXB0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy8wMDAxLURvLW5vdC1oYXJkb2NvZGUtcGF0aHMtdG8tcGVybC1weXRob24taW4tc2NyaXB0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzdmYzlhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzLzAwMDEtRG8tbm90LWhhcmRvY29kZS1wYXRocy10by1wZXJsLXB5dGhvbi1pbi1zY3JpcHRzLnBhdGNoCkBAIC0wLDAgKzEsMTM5IEBACitGcm9tIDZmYWI4MmI5M2M3YmQzMDFlYjQyNDQ4NTE1YjAyZjdjYjMzMDY4OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMzEgQXVnIDIwMTYgMTY6NDQ6NDYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG8gbm90IGhhcmRvY29kZSBwYXRocyB0byBwZXJsL3B5dGhvbiBpbiBzY3JpcHRzLgorCitEb2luZyBzbyB3aGVuIHRoZSBpbnRlcnByZXRlcnMgYXJlIHNvbWV3aGVyZSBkZWVwIGluIGEgc3lzcm9vdCBkaXJlY3RvcnkKK2NhbiByZWFjaCB0aGUgc2hlYmFuZyBsaW5lIGxpbWl0LCBhbmQgcmVzdWx0aW5nIHNjcmlwdHMgd291bGRuJ3Qgd29yaworb24gdGFyZ2V0cyBlaXRoZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2UtY29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZ3RrZG9jLWNoZWNrLmluICAgICB8IDIgKy0KKyBndGtkb2MtY29tbW9uLnBsLmluIHwgMiArLQorIGd0a2RvYy1kZXBzY2FuLmluICAgfCAyICstCisgZ3RrZG9jLWZpeHhyZWYuaW4gICB8IDIgKy0KKyBndGtkb2MtbWtkYi5pbiAgICAgIHwgMiArLQorIGd0a2RvYy1ta3RtcGwuaW4gICAgfCAyICstCisgZ3RrZG9jLXJlYmFzZS5pbiAgICB8IDIgKy0KKyBndGtkb2Mtc2Nhbi5pbiAgICAgIHwgMiArLQorIGd0a2RvYy1zY2FuZ29iai5pbiAgfCAyICstCisgdGVzdHMvdG9vbHMuc2guaW4gICB8IDQgKystLQorIDEwIGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrZG9jLWNoZWNrLmluIGIvZ3RrZG9jLWNoZWNrLmluCitpbmRleCA1NjBkNjliLi5iNjA4NTdmIDEwMDc1NQorLS0tIGEvZ3RrZG9jLWNoZWNrLmluCisrKysgYi9ndGtkb2MtY2hlY2suaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBFUkxAIC13CisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMgLSotIGNwZXJsIC0qLQorICMKKyAjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KK2RpZmYgLS1naXQgYS9ndGtkb2MtY29tbW9uLnBsLmluIGIvZ3RrZG9jLWNvbW1vbi5wbC5pbgoraW5kZXggNDc0NzM5Ni4uY2ZhZGI3OCAxMDA2NDQKKy0tLSBhL2d0a2RvYy1jb21tb24ucGwuaW4KKysrKyBiL2d0a2RvYy1jb21tb24ucGwuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBFUkxAIC13CisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMgLSotIGNwZXJsIC0qLQorICMKKyAjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KK2RpZmYgLS1naXQgYS9ndGtkb2MtZGVwc2Nhbi5pbiBiL2d0a2RvYy1kZXBzY2FuLmluCitpbmRleCA4M2FmMDFiLi45MTdlMjQ3IDEwMDY0NAorLS0tIGEvZ3RrZG9jLWRlcHNjYW4uaW4KKysrKyBiL2d0a2RvYy1kZXBzY2FuLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBQWVRIT05ACisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisgCisgaW1wb3J0IGd6aXAsIG9zLnBhdGgsIHJlCisgCitkaWZmIC0tZ2l0IGEvZ3RrZG9jLWZpeHhyZWYuaW4gYi9ndGtkb2MtZml4eHJlZi5pbgoraW5kZXggM2Q5ZThkMC4uZDU1MTkwYiAxMDA3NTUKKy0tLSBhL2d0a2RvYy1maXh4cmVmLmluCisrKysgYi9ndGtkb2MtZml4eHJlZi5pbgorQEAgLTEsNCArMSw0IEBACistIyFAUEVSTEAgLXcKKysjIS91c3IvYmluL2VudiBwZXJsCisgIyAtKi0gY3BlcmwgLSotCisgIworICMgZ3RrLWRvYyAtIEdUSyBEb2NCb29rIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgorZGlmZiAtLWdpdCBhL2d0a2RvYy1ta2RiLmluIGIvZ3RrZG9jLW1rZGIuaW4KK2luZGV4IDhkZDZkNWUuLmQ4MDg3NTAgMTAwNzU1CistLS0gYS9ndGtkb2MtbWtkYi5pbgorKysrIGIvZ3RrZG9jLW1rZGIuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBFUkxAIC13CisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMgLSotIGNwZXJsIC0qLQorICMKKyAjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KK2RpZmYgLS1naXQgYS9ndGtkb2MtbWt0bXBsLmluIGIvZ3RrZG9jLW1rdG1wbC5pbgoraW5kZXggYzY0ZGZkMy4uMmY0NmMxOCAxMDA3NTUKKy0tLSBhL2d0a2RvYy1ta3RtcGwuaW4KKysrKyBiL2d0a2RvYy1ta3RtcGwuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBFUkxAIC13CisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMgLSotIGNwZXJsIC0qLQorICMKKyAjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KK2RpZmYgLS1naXQgYS9ndGtkb2MtcmViYXNlLmluIGIvZ3RrZG9jLXJlYmFzZS5pbgoraW5kZXggMzc1NDgyZC4uY2YwNWI0NSAxMDA2NDQKKy0tLSBhL2d0a2RvYy1yZWJhc2UuaW4KKysrKyBiL2d0a2RvYy1yZWJhc2UuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBFUkxAIC13CisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMgLSotIGNwZXJsIC0qLQorICMKKyAjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KK2RpZmYgLS1naXQgYS9ndGtkb2Mtc2Nhbi5pbiBiL2d0a2RvYy1zY2FuLmluCitpbmRleCAwNDhlNWM5Li43OGM2MTM2IDEwMDc1NQorLS0tIGEvZ3RrZG9jLXNjYW4uaW4KKysrKyBiL2d0a2RvYy1zY2FuLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBQRVJMQCAtdworKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjIC0qLSBjcGVybCAtKi0KKyAjCisgIyBndGstZG9jIC0gR1RLIERvY0Jvb2sgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IuCitkaWZmIC0tZ2l0IGEvZ3RrZG9jLXNjYW5nb2JqLmluIGIvZ3RrZG9jLXNjYW5nb2JqLmluCitpbmRleCBmYjY2Yjc2Li42N2VlOGY3IDEwMDY0NAorLS0tIGEvZ3RrZG9jLXNjYW5nb2JqLmluCisrKysgYi9ndGtkb2Mtc2NhbmdvYmouaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBFUkxAIC13CisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMgLSotIGNwZXJsIC0qLQorICMKKyAjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KK2RpZmYgLS1naXQgYS90ZXN0cy90b29scy5zaC5pbiBiL3Rlc3RzL3Rvb2xzLnNoLmluCitpbmRleCBhMTE0YTQyLi43MDczODgzIDEwMDY0NAorLS0tIGEvdGVzdHMvdG9vbHMuc2guaW4KKysrKyBiL3Rlc3RzL3Rvb2xzLnNoLmluCitAQCAtMTEsNyArMTEsNyBAQCBlY2hvICJSdW5uaW5nIHN1aXRlKHMpOiBndGstZG9jLSRzdWl0ZSI7CisgCisgIyB0ZXN0IHBlcmwgc2NyaXB0cworIGZvciBmaWxlIGluIGd0a2RvYy1jaGVjayBndGtkb2MtZml4eHJlZiBndGtkb2MtbWtkYiBndGtkb2MtbWt0bXBsIGd0a2RvYy1yZWJhc2UgZ3RrZG9jLXNjYW4gZ3RrZG9jLXNjYW5nb2JqIDsgZG8KKy0gIEBQRVJMQCAtY3dUIGB3aGljaCAkZmlsZWAKKysgIHBlcmwgLWN3VCBgd2hpY2ggJGZpbGVgCisgICBpZiB0ZXN0ICQ/ID0gMSA7IHRoZW4gZmFpbGVkPWBleHByICRmYWlsZWQgKyAxYDsgZmkKKyAgIHRlc3RlZD1gZXhwciAkdGVzdGVkICsgMWAKKyBkb25lCitAQCAtMzQsNyArMzQsNyBAQCBkb25lCisgCisgCisgIyB0ZXN0IHB5dGhvbiBzY3JpcHRzCistQFBZVEhPTkAgLW0gcHlfY29tcGlsZSBgd2hpY2ggZ3RrZG9jLWRlcHNjYW5gCisrcHl0aG9uIC1tIHB5X2NvbXBpbGUgYHdoaWNoIGd0a2RvYy1kZXBzY2FuYAorIGlmIHRlc3QgJD8gIT0gMCA7IHRoZW4gZmFpbGVkPWBleHByICRmYWlsZWQgKyAxYDsgZmkKKyB0ZXN0ZWQ9YGV4cHIgJHRlc3RlZCArIDFgCisgCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy9wa2ctY29uZmlnLW5hdGl2ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy9wa2ctY29uZmlnLW5hdGl2ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzY4ODcwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzL3BrZy1jb25maWctbmF0aXZlLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1VzZSBuYXRpdmUgcGtnLWNvbmZpZyB3aGVuIGxvb2tpbmcgZm9yIGd0ay1kb2MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2d0ay1kb2MubTQgYi9ndGstZG9jLm00CitpbmRleCAzNjc1NTQzLi45NDg4MWFlIDEwMDY0NAorLS0tIGEvZ3RrLWRvYy5tNAorKysrIGIvZ3RrLWRvYy5tNAorQEAgLTEsNiArMSw2IEBACisgZG5sIC0qLSBtb2RlOiBhdXRvY29uZiAtKi0KKworLSMgc2VyaWFsIDIKKysjIHNlcmlhbCAyLjEKKworIGRubCBVc2FnZToKKyBkbmwgICBHVEtfRE9DX0NIRUNLKFttaW5pbXVtLWd0ay1kb2MtdmVyc2lvbl0pCitAQCAtMTAsMTEgKzEwLDE2IEBAIEFDX0RFRlVOKFtHVEtfRE9DX0NIRUNLXSwKKyAgIEFDX0JFRk9SRShbQUNfUFJPR19MSUJUT09MXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0CisgICBBQ19CRUZPUkUoW0FNX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorCisrICBndGtkb2NfcGtnY29uZmlnX3NhdmU9JFBLR19DT05GSUcKKysgIFBLR19DT05GSUc9cGtnLWNvbmZpZy1uYXRpdmUKKysKKyAgIGlmZWxzZShbJDFdLFtdLFtndGtfZG9jX3JlcXVpcmVzPSJndGstZG9jIl0sW2d0a19kb2NfcmVxdWlyZXM9Imd0ay1kb2MgPj0gJDEiXSkKKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIGd0ay1kb2NdKQorICAgUEtHX0NIRUNLX0VYSVNUUyhbJGd0a19kb2NfcmVxdWlyZXNdLFtoYXZlX2d0a19kb2M9eWVzXSxbaGF2ZV9ndGtfZG9jPW5vXSkKKyAgIEFDX01TR19SRVNVTFQoJGhhdmVfZ3RrX2RvYykKKworKyAgUEtHX0NPTkZJRz0kZ3RrZG9jX3BrZ2NvbmZpZ19zYXZlCisrCisgICBpZiB0ZXN0ICIkaGF2ZV9ndGtfZG9jIiA9ICJubyI7IHRoZW4KKyAgICAgICBBQ19NU0dfV0FSTihbCisgICBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBjcmVhdGUgc291cmNlIHBhY2thZ2VzIHdpdGggJ21ha2UgZGlzdCcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9ndGstZG9jXzEuMjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZ3RrLWRvY18xLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjk5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZ3RrLWRvY18xLjI1LmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiRG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgZm9yIGdsaWItYmFzZWQgc29mdHdhcmUiCitERVNDUklQVElPTiA9ICJHdGstZG9jIGlzIGEgc2V0IG9mIHNjcmlwdHMgdGhhdCBleHRyYWN0IHNwZWNpYWxseSBmb3JtYXR0ZWQgY29tbWVudHMgXAorICAgICAgICAgICAgICAgZnJvbSBnbGliLWJhc2VkIHNvZnR3YXJlIGFuZCBwcm9kdWNlIGEgc2V0IG9mIGh0bWwgZG9jdW1lbnRhdGlvbiBmaWxlcyBmcm9tIHRoZW0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmcvZ3RrLWRvYy8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK2luaGVyaXQgZ25vbWViYXNlCisKKyMgQ29uZmlndXJlIHRoZSBzY3JpcHRzIGNvcnJlY3RseSAoYW5kIGJ1aWxkIHRoZWlyIGRlcGVuZGVuY2llcykgb25seSBpZiB0aGV5IGFyZSBhY3R1YWxseQorIyBnb2luZyB0byBiZSB1c2VkOyBvdGhlcml3c2Ugd2UgbmVlZCBvbmx5IHRoZSBtNC9tYWtlZmlsZSBpbmNsdWRlcyBmcm9tIHRoZSBndGstZG9jIHRhcmJhbGwuCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJhcGktZG9jdW1lbnRhdGlvbiIsICJ3b3JraW5nLXNjcmlwdHMiLCAiIiwgZCl9IgorCisjIFRoaXMgd2lsbCBjYXVzZSB0YXJnZXQgZ3RrLWRvYyB0byBoYXJkY29kZSBwYXRocyBvZiBuYXRpdmUgZGVwZW5kZW5jaWVzCisjIGludG8gaXRzIHNjcmlwdHMuIFRoaXMgbWVhbnMgdGhhdCB0YXJnZXQgZ3RrLWRvYyBwYWNrYWdlIGlzIGJyb2tlbjsKKyMgaG9wZWZ1bGx5IG5vIG9uZSBtaW5kcyBiZWNhdXNlIGl0cyBzY3JpcHRzIGFyZSBub3QgdXNlZCBmb3IgYW55dGhpbmcgZHVyaW5nIGJ1aWxkCisjIGFuZCBzaG91bGRuJ3QgYmUgdXNlZCBvbiB0YXJnZXRzLgorUEFDS0FHRUNPTkZJR1t3b3JraW5nLXNjcmlwdHNdID0gIi0td2l0aC1oaWdobGlnaHQ9c291cmNlLWhpZ2hsaWdodCwtLXdpdGgtaGlnaGxpZ2h0PW5vLGxpYnhzbHQtbmF0aXZlIHhtbHRvLW5hdGl2ZSBzb3VyY2UtaGlnaGxpZ2h0LW5hdGl2ZSBwZXJsLW5hdGl2ZSIKKworIyBXZSBjYW5ub3QgdXNlIGhvc3QgcGVybCwgYmVjYXVzZSBpdCBtYXkgYmUgdG9vIG9sZCBmb3IgZ3RrLWRvYworRVhUUkFOQVRJVkVQQVRIICs9ICJwZXJsLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtRG8tbm90LWhhcmRvY29kZS1wYXRocy10by1wZXJsLXB5dGhvbi1pbi1zY3JpcHRzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYteHNsdHByb2MtaXMtbm90LWZvdW5kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYtcGVybC1pcy1ub3QtZm91bmQtb3ItaXRzLXZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9wa2ctY29uZmlnLW5hdGl2ZS5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMGRjNjU3MDk1MzExMmE0NjRhNDA5ZmI5OTI1OGNjYmMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxZWE0NmVkNDAwZTY1MDFmOTc1YWNhYWZlYTMxNDc5Y2VhOGYzMmY5MTFkY2E0ZGZmMDM2ZjU5ZTY0NjRmZDQyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBEbyBub3QgY2hlY2sgZm9yIFhNTCBjYXRhbG9ncyB3aGVuIGJ1aWxkaW5nIGJlY2F1c2UgdGhhdAorIyBpbmZvcm1hdGlvbiBpcyBub3QgdXNlZCBmb3IgYW55dGhpbmcgZHVyaW5nIGJ1aWxkLiBSZWNpcGUKKyMgZGVwZW5kZW5jaWVzIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgcmlnaHQgYml0cy4KK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICBzZWQgLWkgLWUgJ3MsXkpIX0NIRUNLX1hNTF9DQVRBTE9HLiosLCcgJHtTfS9jb25maWd1cmUuYWMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vc2dtbCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2NtYWtlIgorRklMRVNfJHtQTn0tZG9jID0gIiIKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGd0a2RvY19tYWtlZmlsZXNfc3lzcm9vdF9wcmVwcm9jZXNzIgorZ3RrZG9jX21ha2VmaWxlc19zeXNyb290X3ByZXByb2Nlc3MoKSB7CisgICAgICAgICMgUGF0Y2ggdGhlIGd0ay1kb2MgbWFrZWZpbGVzIHNvIHRoYXQgdGhlIHFlbXUgd3JhcHBlciBpcyB1c2VkIHRvIHJ1biB0cmFuc2llbnQgYmluYXJpZXMKKyAgICAgICAgIyBpbnN0ZWFkIG9mIGxpYnRvb2wgd3JhcHBlciBvciBydW5uaW5nIHRoZW0gZGlyZWN0bHkKKyAgICAgICAgc2VkIC1pIFwKKyAgICAgICAgICAgLWUgInN8R1RLRE9DX1JVTiA9Lip8R1RLRE9DX1JVTiA9IFwkKHRvcF9idWlsZGRpcikvZ3RrZG9jLXFlbXV3cmFwcGVyfCIgXAorICAgICAgICAgICAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2d0ay1kb2MvZGF0YS9ndGstZG9jKm1ha2UKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBiODc4ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1Gcm9tIDhkNDlhMzg2ZjQ2N2NiZjhlMDg0MmQyMjE4MTI2ZjY0M2U1MGY4MzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEb21pbmlxdWUgTGV1ZW5iZXJnZXIgPGRpbXN0YXJAb3BlbnN1c2Uub3JnPgotRGF0ZTogU3VuLCAyNyBOb3YgMjAxMSAxNDoyNDo1NyArMDAwMAotU3ViamVjdDogRml4IGJ1aWxkIHdpdGggZ2xpYiAyLjMxOiBPbmx5IGdsaWIuaCBjYW4gYmUgI2luY2x1ZGUnZC4gRml4ZXMgYnVnICM2NjQ5MTQKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0tLS0KLWRpZmYgLS1naXQgYS9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jIGIvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYwotaW5kZXggMWY3YTQxZi4uNTZhOTI4NiAxMDA2NDQKLS0tLSBhL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMKLSsrKyBiL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMKLUBAIC0yOCw3ICsyOCw3IEBACi0gI2luY2x1ZGUgImFuaW1hdGlvbi5oIgotIAotICNpZmRlZiBIQVZFX1dPUktJTkdfQU5JTUFUSU9OCi0tI2luY2x1ZGUgPGdsaWIvZ3RpbWVyLmg+Ci0rI2luY2x1ZGUgPGdsaWIuaD4KLSAKLSBzdHJ1Y3QgX0FuaW1hdGlvbkluZm8gewotIAlHVGltZXIgKnRpbWVyOwotLS0KLWNnaXQgdjAuOS4wLjIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9zdWJzdGl0dXRlLXRlc3RzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzU1N2JhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KLWRpZmYgLU51cmQgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYyBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCi0tLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYwkyMDEwLTEwLTAxIDE1OjQyOjM3LjAwMDAwMDAwMCArMDMwMAotKysrIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMJMjAxMy0wOC0yMCAwMjo1MDoyNy45MzA1MTA1NjUgKzAzMDAKLUBAIC0xNjYsNiArMTY2LDkgQEAKLQotIEFDX1NVQlNUKERFVkVMT1BNRU5UX0NGTEFHUykKLQotK0FDX1NVQlNUKFtleHBvcnRlZF9zeW1ib2xzX3Rlc3RzXSwgW1skKEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMpXV0pCi0rQUNfU1VCU1QoW3RvcnR1cmVfdGVzdF90ZXN0c10sIFtbJChUT1JUVVJFX1RFU1RfVEVTVFMpXV0pCi0rCi0gQU1fQ09ORklHX0hFQURFUihbZW5naW5lcy9zdXBwb3J0L2NvbmZpZy5oXSkKLQotIEFDX0NPTkZJR19GSUxFUyhbCi1kaWZmIC1OdXJkIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCi0tLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMC0wOS0xOSAxODoxODoyMS4wMDAwMDAwMDAgKzAzMDAKLSsrKyBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQkyMDEzLTA4LTIwIDAyOjUwOjM2Ljg0MjUxMDg2NSArMDMwMAotQEAgLTY2LDcgKzY2LDcgQEAKLSAjIFByZWZpeCB3aXRoIGV4cG9ydGVkXwotIEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMgPSAkKHBhdHN1YnN0ICUsZXhwb3J0ZWRfJSwkKEJVSUxEX0VOR0lORVMpKQotCi0tVEVTVFMgKz0gJChFWFBPUlRFRF9TWU1CT0xTX1RFU1RTKQotK1RFU1RTICs9IEBleHBvcnRlZF9zeW1ib2xzX3Rlc3RzQAotCi0KLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1AQCAtODgsNyArODgsNyBAQAotIFRPUlRVUkVfVEVTVF9URVNUUyA9IHRvcnR1cmVfYnVpbGRpbiAkKHBhdHN1YnN0ICUsdG9ydHVyZV8lLCQoVE9SVFVSRV9URVNUX0VOR0lORVMpKQotCi0gIyBBZGQgVE9SVFVSRV9URVNUX0VOR0lORVMgdG8gbGlzdCBvZiB0ZXN0cwotLVRFU1RTICs9ICQoVE9SVFVSRV9URVNUX1RFU1RTKQotK1RFU1RTICs9IEB0b3J0dXJlX3Rlc3RfdGVzdHNACi0KLSAjIFBvc3NpYmxlIG90aGVyIHRlc3RzOgotICMgIC0gQW4gZXh0ZW5zaXZlIHRoZW1lIHN3aXRjaCB0ZXN0cyB0aGF0IGxvYWRzL3VubG9hZHMgdGhlIGVuZ2luZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lc18yLjIwLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBhYzkxMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLVNVTU1BUlkgPSAiR1RLKyB0aGVtZSBlbmdpbmVzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKLQotU0VDVElPTiA9ICJ4MTEvYmFzZSIKLURFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIGd0aysgZ2V0dGV4dC1uYXRpdmUiCi0KLVBSID0gInIzIgotCi1QQUNLQUdFUyArPSAiJHtQTn0tc2NoZW1hcyIKLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGstZW5naW5lLS4qIF5ndGstdGhlbWUtLioiCi0KLVJERVBFTkRTX2d0ay10aGVtZS1yZWRtb25kID0gImd0ay1lbmdpbmUtcmVkbW9uZDk1IgotUkRFUEVORFNfZ3RrLXRoZW1lLW1ldGFsID0gImd0ay1lbmdpbmUtbWV0YWwiCi1SREVQRU5EU19ndGstdGhlbWUtbWlzdCA9ICJndGstZW5naW5lLW1pc3QiCi1SREVQRU5EU19ndGstdGhlbWUtY3J1eCA9ICJndGstZW5naW5lLWNydXgtZW5naW5lIgotUkRFUEVORFNfZ3RrLXRoZW1lLWxpZ2h0aG91c2VibHVlID0gImd0ay1lbmdpbmUtbGlnaHRob3VzZWJsdWUiCi1SREVQRU5EU19ndGstdGhlbWUtdGhpbmljZSA9ICJndGstZW5naW5lLXRoaW5pY2UiCi1SREVQRU5EU19ndGstdGhlbWUtaW5kdXN0cmlhbCA9ICJndGstZW5naW5lLWluZHVzdHJpYWwiCi1SREVQRU5EU19ndGstdGhlbWUtY2xlYXJsb29rcyA9ICJndGstZW5naW5lLWNsZWFybG9va3MiCi0KLUZJTEVTXyR7UE59ID0gIiIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyoubGEiCi1GSUxFU18ke1BOfS1zY2hlbWFzID0gIiR7ZGF0YWRpcn0vZ3RrLWVuZ2luZXMvKi54bWwiCi0KLUNGTEFHU19wcmVwZW5kID0gIi1ESEFWRV9BTklNQVRJT04gIgotCi1SREVQRU5EU18ke1BOfS1kZXYgPSAiIgotCi1pbmhlcml0IGdub21lYmFzZQotR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgotCi1pbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjawotQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCi0KLSMgVGhpcyBwaWNrcyBzdGFibGUgcmVsZWFzZXMgaW4gdGhlIDIueCBzZXJpZXMgKGJ1dCBub3QgMi45MCBvbndhcmRzLAotIyB3aGljaCB3ZXJlIEdOT01FIDMgYmV0YXMpLgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+MlwuKFswLThdKlswMjQ2OF0pKyhcLlxkKykrKSIKLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7Ci0gICAgZW5naW5lc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImd0ay0yLjAvMi4xMC4wL2VuZ2luZXMiKQotICAgIHRoZW1lc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksICJ0aGVtZXMiKQotCi0gICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZW5naW5lc19yb290LCAnXmxpYiguKilcLnNvJCcsICdndGstZW5naW5lLSVzJywgJ0dUSyAlcyB0aGVtZSBlbmdpbmUnLCBleHRyYV9kZXBlbmRzPScnKQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHRoZW1lc19yb290LCAnKC4qKScsICdndGstdGhlbWUtJXMnLCAnR1RLIHRoZW1lICVzJywgYWxsb3dfZGlycz1UcnVlLCBleHRyYV9kZXBlbmRzPScnKQotICAgICMgVE9ETzogbWFyayB0aGVtZSBwYWNrYWdlcyBhcyBhcmNoIGFsbAotfQotCi1TUkNfVVJJICs9ICJmaWxlOi8vZ2xpYi0yLjMyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zdWJzdGl0dXRlLXRlc3RzLnBhdGNoIgotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNWRlYjI4N2JjNjA3NWRjMjE4MTIxMzA2MDRjN2RjNGYiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxNWI2ODBhYmNhNmM3NzNlY2I4NTI1MzUyMWZhMTAwZGQzYjg1NDliZWZlZWNjNzU5NWIxMDIwOWQ2MmQ2NmI1IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2UzOGNlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVNVTU1BUlkgPSAiSlNPTi1HTGliIGltcGxlbWVudHMgYSBmdWxsIEpTT04gcGFyc2VyIHVzaW5nIEdMaWIgYW5kIEdPYmplY3QiCi1ERVNDUklQVElPTiA9ICJVc2UgSlNPTi1HTGliIGl0IGlzIHBvc3NpYmxlIHRvIHBhcnNlIGFuZCBnZW5lcmF0ZSB2YWxpZCBKU09OXAotIGRhdGEgc3RydWN0dXJlcywgdXNpbmcgYSBET00tbGlrZSBBUEkuIEpTT04tR0xpYiBhbHNvIG9mZmVycyBHT2JqZWN0IFwKLWludGVncmF0aW9uLCBwcm92aWRpbmcgdGhlIGFiaWxpdHkgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBHT2JqZWN0IFwKLWluc3RhbmNlcyB0byBhbmQgZnJvbSBKU09OIGRhdGEgdHlwZXMuIgotSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL0pzb25HbGliIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjMxMzFiMDQxN2VjZGUzZGExYWU3MmFjY2VhYTM3NWNmIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODBmMzU5M2NiNmJkMTNmMTQ2NTgyOGU0NmE5Zjc0MGUyZTliZDNjZDIyNTc4ODk0NDJiM2U2MmJkNmRlMDVjZCIKLQotaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBsaWJfcGFja2FnZSBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4yLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmMmE0MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjIuMi5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkpTT04tR0xpYiBpbXBsZW1lbnRzIGEgZnVsbCBKU09OIHBhcnNlciB1c2luZyBHTGliIGFuZCBHT2JqZWN0IgorREVTQ1JJUFRJT04gPSAiVXNlIEpTT04tR0xpYiBpdCBpcyBwb3NzaWJsZSB0byBwYXJzZSBhbmQgZ2VuZXJhdGUgdmFsaWQgSlNPTlwKKyBkYXRhIHN0cnVjdHVyZXMsIHVzaW5nIGEgRE9NLWxpa2UgQVBJLiBKU09OLUdMaWIgYWxzbyBvZmZlcnMgR09iamVjdCBcCitpbnRlZ3JhdGlvbiwgcHJvdmlkaW5nIHRoZSBhYmlsaXR5IHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgR09iamVjdCBcCitpbnN0YW5jZXMgdG8gYW5kIGZyb20gSlNPTiBkYXRhIHR5cGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9Kc29uR2xpYiIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjMWRhZWZiOGQwZmI1OTYxMmFmMGMwNzJjOGFhYmI1OCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImVhMTI4YWI1MmE4MjRmY2QwNmU1NDQ4ZmJiMmJkOGQ5YTEzNzQwZDUxYzY2ZDQ0NTgyOGVkYmE3MTMyMWE2MjEiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgbGliX3BhY2thZ2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L2dsYWRlLWNydWZ0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkNTg2NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L2dsYWRlLWNydWZ0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1kaWZmIC11ciBsaWJnbGFkZS0yLjQuMH4vY29uZmlndXJlLmluIGxpYmdsYWRlLTIuNC4wL2NvbmZpZ3VyZS5pbgotLS0tIGxpYmdsYWRlLTIuNC4wfi9jb25maWd1cmUuaW4JMjAwNC0wNS0xNyAxMjozODozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBsaWJnbGFkZS0yLjQuMC9jb25maWd1cmUuaW4JMjAwNC0wNy0yOCAxNjo1MzowOS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNDcsNiArMTQ3LDE4IEBACi0gQU1fQ09ORElUSU9OQUwoSEFWRV9QWVRIT04sICRoYXZlX3B5dGhvbikKLSBBQ19TVUJTVChQWVRIT04pCi0gCi0rQUNfTVNHX0NIRUNLSU5HKFtmb3IgY3J1ZnQgaW4gbGliZ3RrXSkKLStBQ19UUllfTElOSyhbCi0rI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLStdLCAgICAgIFsgZ3RrX3RyZWVfZ2V0X3R5cGUgKCk7IHJldHVybiAwOyBdLAotKyAgICAgICAgWyBBQ19NU0dfUkVTVUxUKHllcykKLSsgICAgICAgICAgaGF2ZV9jcnVmdD15ZXMgXSwKLSsgICAgICAgIFsgQUNfTVNHX1JFU1VMVChubykKLSsJICBBQ19ERUZJTkUoRElTQUJMRV9DUlVGVCwsW2xlYXZlIG91dCBzdXBwb3J0IGZvciBvbGQsIGJyb2tlbiB3aWRnZXRzXSkKLSsgICAgICAgICAgaGF2ZV9jcnVmdD1ubyBdKQotK0FDX1NVQlNUKERJU0FCTEVfQ1JVRlQpCi0rCi0gZG5sIGFkZCBkZWJ1Z2dpbmcgb3B0aW9ucyAuLi4KLSBjaGFuZ2VxdW90ZSgsKWRubAotIGlmIHRlc3QgIngkR0NDIiA9IHh5ZXM7IHRoZW4KLU9ubHkgaW4gbGliZ2xhZGUtMi40LjA6IGNvbmZpZ3VyZS5pbi5vcmlnCi1kaWZmIC11ciBsaWJnbGFkZS0yLjQuMH4vZ2xhZGUvZ2xhZGUtZ3RrLmMgbGliZ2xhZGUtMi40LjAvZ2xhZGUvZ2xhZGUtZ3RrLmMKLS0tLSBsaWJnbGFkZS0yLjQuMH4vZ2xhZGUvZ2xhZGUtZ3RrLmMJMjAwNC0wMy0xMyAxMzo0NzozNS4wMDAwMDAwMDAgKzAwMDAKLSsrKyBsaWJnbGFkZS0yLjQuMC9nbGFkZS9nbGFkZS1ndGsuYwkyMDA0LTA3LTI4IDE2OjUzOjUyLjAwMDAwMDAwMCArMDEwMAotQEAgLTIxMyw2ICsyMTMsOCBAQAotIAlndGtfY2xpc3RfY29sdW1uX3RpdGxlc19oaWRlIChHVEtfQ0xJU1QgKHcpKTsKLSB9Ci0gCi0rI2lmbmRlZiBESVNBQkxFX0NSVUZUCi0rCi0gc3RhdGljIHZvaWQKLSB0cmVlX3NldF9zZWxlY3Rpb25fbW9kZSAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAotIAkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLUBAIC0yMzgsNiArMjQwLDggQEAKLSAgICAgZ3RrX3RyZWVfc2V0X3ZpZXdfbGluZXMgKEdUS19UUkVFICh3KSwgQk9PTCAodmFsdWUpKTsKLSB9Ci0gCi0rI2VuZGlmCi0rCi0gc3RhdGljIHZvaWQKLSBsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAotIAkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLUBAIC0yNTQsNiArMjU4LDcgQEAKLSAgICAgZ3RrX2NoZWNrX21lbnVfaXRlbV9zZXRfc2hvd190b2dnbGUgKEdUS19DSEVDS19NRU5VX0lURU0gKHcpLCBCT09MICh2YWx1ZSkpOwotIH0KLSAKLSsjaWZuZGVmIERJU0FCTEVfQ1JVRlQKLSBzdGF0aWMgdm9pZAotIHRleHRfc2V0X3RleHQgKEdsYWRlWE1MICp4bWwsIEd0a1dpZGdldCAqdywKLSAJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQotQEAgLTI2Miw2ICsyNjcsNyBAQAotIAotICAgICBndGtfZWRpdGFibGVfaW5zZXJ0X3RleHQgKEdUS19FRElUQUJMRSAodyksIHZhbHVlLCAtMSwgJnBvcyk7Ci0gfQotKyNlbmRpZgotIAotIHN0YXRpYyB2b2lkCi0gcmFkaW9fbWVudV9pdGVtX3NldF9ncm91cCAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAotQEAgLTExMjUsMTMgKzExMzEsMTcgQEAKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2VsZWN0aW9uX21vZGUiLCBjbGlzdF9zZXRfc2VsZWN0aW9uX21vZGUpOwotICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzaGFkb3dfdHlwZSIsIGNsaXN0X3NldF9zaGFkb3dfdHlwZSk7Ci0gICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNob3dfdGl0bGVzIiwgY2xpc3Rfc2V0X3Nob3dfdGl0bGVzKTsKLSsjaWZuZGVmIERJU0FCTEVfQ1JVRlQKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RSRUUsICJzZWxlY3Rpb25fbW9kZSIsIHRyZWVfc2V0X3NlbGVjdGlvbl9tb2RlKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RSRUUsICJ2aWV3X21vZGUiLCB0cmVlX3NldF92aWV3X21vZGUpOwotICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInZpZXdfbGluZSIsIHRyZWVfc2V0X3ZpZXdfbGluZSk7Ci0rI2VuZGlmCi0gICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9MSVNULCAic2VsZWN0aW9uX21vZGUiLCBsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSk7Ci0gICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DSEVDS19NRU5VX0lURU0sICJhbHdheXNfc2hvd190b2dnbGUiLAotIAkJCQljaGVja19tZW51X2l0ZW1fc2V0X2Fsd2F5c19zaG93X3RvZ2dsZSk7Ci0rI2lmbmRlZiBESVNBQkxFX0NSVUZUCi0gICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9URVhULCAidGV4dCIsIHRleHRfc2V0X3RleHQpOwotKyNlbmRpZgotICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfUkFESU9fTUVOVV9JVEVNLCAiZ3JvdXAiLAotIAkJCQlyYWRpb19tZW51X2l0ZW1fc2V0X2dyb3VwKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RPT0xCQVIsICJ0b29sdGlwcyIsIHRvb2xiYXJfc2V0X3Rvb2x0aXBzKTsKLUBAIC0xMjg4LDggKzEyOTgsMTAgQEAKLSAJCQkgICBnbGFkZV9zdGFuZGFyZF9idWlsZF9jaGlsZHJlbiwgTlVMTCk7Ci0gICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVEVBUk9GRl9NRU5VX0lURU0sIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKLSAJCQkgICBOVUxMLCBOVUxMKTsKLSsjaWZuZGVmIERJU0FCTEVfQ1JVRlQKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URVhULCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCi0gCQkJICAgTlVMTCwgTlVMTCk7Ci0rI2VuZGlmCi0gICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVEVYVF9WSUVXLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCi0gCQkJICAgTlVMTCwgTlVMTCk7Ci0gICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVElQU19RVUVSWSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAotQEAgLTEzMDQsOCArMTMxNiwxMCBAQAotIAkJCSAgIGdsYWRlX3N0YW5kYXJkX2J1aWxkX2NoaWxkcmVuLCBOVUxMKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9UT09MX0JVVFRPTiwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAotIAkJCSAgIE5VTEwsIE5VTEwpOwotKyNpZm5kZWYgRElTQUJMRV9DUlVGVAotICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RSRUUsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKLSAJCQkgICBOVUxMLCBOVUxMKTsKLSsjZW5kaWYKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9UUkVFX1ZJRVcsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKLSAJCQkgICBOVUxMLCBOVUxMKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9WQlVUVE9OX0JPWCwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzRjMDkyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUwMSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0KLWRpZmYgLXVyTiBsaWJnbGFkZS0yLjQuMi5vcmlnL2NvbmZpZ3VyZS5pbiBsaWJnbGFkZS0yLjQuMi9jb25maWd1cmUuaW4KLS0tLSBsaWJnbGFkZS0yLjQuMi5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA1LTAyLTExIDEyOjQyOjU4LjAwMDAwMDAwMCArMDEwMAotKysrIGxpYmdsYWRlLTIuNC4yL2NvbmZpZ3VyZS5pbgkyMDA1LTAzLTIyIDAxOjIyOjAwLjAwMDAwMDAwMCArMDEwMAotQEAgLTUyLDExICs1MiwzMyBAQAotIEFDX1BBVEhfUFJPRyhQS0dfQ09ORklHLCBwa2ctY29uZmlnLCBubykKLSAKLSBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJHTEFERSwgW2RubAotLSAgbGlieG1sLTIuMCA+PSByZXF1aXJlZF9saWJ4bWxfdmVyc2lvbiBkbmwKLSAgIGF0ayA+PSByZXF1aXJlZF9hdGtfdmVyc2lvbiBkbmwKLSAgIGd0aystMi4wID49IHJlcXVpcmVkX2d0a192ZXJzaW9uIGRubAotICAgZ2xpYi0yLjAgPj0gcmVxdWlyZWRfZ2xpYl92ZXJzaW9uXSkKLSAKLStkaXNhYmxlX3htbDI9bm8KLStBQ19BUkdfV0lUSChbbGlieG1sMl0sCi0rICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYnhtbDJdLCBbRG9uJ3QgdXNlIGxpYnhtbDIsIHVzZSBHbGliJ3MgR01hcmt1cFBhcnNlciBpbnN0ZWFkXSksCi0rICBbZGlzYWJsZV94bWwyPXllc10sCi0rICBbZGlzYWJsZV94bWwyPW5vXSkKLSsKLStBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGFyZSB1c2luZyBsaWJ4bWwyXSkKLStpZiB0ZXN0ICJ4JGRpc2FibGVfeG1sMiIgPT0gInhubyI7IHRoZW4KLSsgIEFDX01TR19SRVNVTFQoeWVzKQotKyAgUEtHX0NIRUNLX01PRFVMRVMoWE1MMiwgbGlieG1sLTIuMCA+PSAyLjQuMTApCi0rICBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyPSJsaWJ4bWwtMi4wIgotKyAgTElCR0xBREVfQ0ZMQUdTPSIkTElCR0xBREVfQ0ZMQUdTICRYTUwyX0NGTEFHUyIKLSsgIExJQkdMQURFX0xJQlM9IiRMSUJHTEFERV9MSUJTICRYTUwyX0xJQlMiCi0rZWxzZQotKyAgTElCR0xBREVfQ0ZMQUdTPSIkTElCR0xBREVfQ0ZMQUdTIC1EVVNFX0dNQVJLVVBfUEFSU0VSIgotKyAgUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMj0iIgotKyAgQUNfTVNHX1JFU1VMVChubykKLStmaQotKwotK0FDX1NVQlNUKFhNTDJfTElCUykKLStBQ19TVUJTVChYTUwyX0NGTEFHUykKLStBQ19TVUJTVChQS0dDRkdfUkVRVUlSRV9MSUJYTUwyKQotKwotIEFDX01TR19DSEVDS0lORyhbZm9yIG5hdGl2ZSBXaW4zMl0pCi0gY2FzZSAiJGhvc3QiIGluCi0gICAqLSotbWluZ3cqKQotQEAgLTExNiw2ICsxMzgsMjEgQEAKLSAgIGZpCi0gZmkKLSAKLStpZiB0ZXN0ICJ4JGRpc2FibGVfeG1sMiIgPT0gInh5ZXMiOyB0aGVuCi0rICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKLSsgIGVjaG8gIiAgWW91IGNob3NlIHRvIGRpc2FibGUgbGlieG1sMiBhbmQgdXNlIEdsaWIncyIKLSsgIGVjaG8gIiAgR01hcmt1cFBhcnNlciBpbnN0ZWFkLiIgCi0rICBlY2hvICAKLSsgIGVjaG8gIiAgUGxlYXNlIGJlYXIgaW4gbWluZCB0aGF0IHVzaW5nIGxpYmdsYWRlIHdpdGgiCi0rICBlY2hvICIgIEdNYXJrdXBQYXJzZXIgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgb25seS4iCi0rICBlY2hvCi0rICBlY2hvICIgIFBsZWFzZSBwb3N0IHByb2JsZW1zIG9yIHN1Y2Nlc3Mgc3RvcmllcyB0byIKLSsgIGVjaG8gIiAgdGhlIGdsYWRlLWRldmVsIG1haWxpbmcgbGlzdC4gVGhhbmsgeW91LiIKLSsgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgotK2ZpCi0rCi0rCi0rCi0gR1RLX0RPQ19DSEVDSygxLjApCi0gCi0gZG5sIGdldHRleHQgc3R1ZmYgLi4uIHRoZXJlIGlzIG5vIG1lc3NhZ2UgY2F0YWxvZyBmb3IgbGliZ2xhZGUgLS0gbGliZ2xhZGUKLWRpZmYgLXVyTiBsaWJnbGFkZS0yLjQuMi5vcmlnL2dsYWRlL2dsYWRlLXBhcnNlci5jIGxpYmdsYWRlLTIuNC4yL2dsYWRlL2dsYWRlLXBhcnNlci5jCi0tLS0gbGliZ2xhZGUtMi40LjIub3JpZy9nbGFkZS9nbGFkZS1wYXJzZXIuYwkyMDA0LTExLTExIDExOjU2OjEzLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYmdsYWRlLTIuNC4yL2dsYWRlL2dsYWRlLXBhcnNlci5jCTIwMDUtMDMtMjIgMDE6MjA6MDAuMDAwMDAwMDAwICswMTAwCi1AQCAtMzQsNyArMzQsMTUgQEAKLSAjICBkZWZpbmUgZGdldHRleHQoRG9tYWluLCBTdHJpbmcpIChTdHJpbmcpCi0gI2VuZGlmCi0gCi0tI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KLSsjaWZkZWYgVVNFX0dNQVJLVVBfUEFSU0VSCi0rIyAgaW5jbHVkZSA8emxpYi5oPgotKyNlbHNlCi0rIyAgaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgotKyNlbmRpZgotKwotKyNpZmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsjICBkZWZpbmUgeG1sQ2hhciBnY2hhcgotKyNlbmRpZgotIAotICNpbmNsdWRlICJnbGFkZS1wYXJzZXIuaCIKLSAjaW5jbHVkZSAiZ2xhZGUtcHJpdmF0ZS5oIgotQEAgLTUwOCw3ICs1MTYsOSBAQAotICAgICBjYXNlIFBBUlNFUl9TVEFSVDoKLSAJaWYgKCFzdHJjbXAobmFtZSwgImdsYWRlLWludGVyZmFjZSIpKSB7Ci0gCSAgICBzdGF0ZS0+c3RhdGUgPSBQQVJTRVJfR0xBREVfSU5URVJGQUNFOwotLSNpZiAwCi0rCi0rI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsgI2lmIDAKLSAJICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IFhNTCBuYW1lc3BhY2UgKi8KLSAJICAgIGZvciAoaSA9IDA7IGF0dHJzICYmIGF0dHJzW2ldICE9IE5VTEw7IGkgKz0gMikgewotIAkJaWYgKCFzdHJjbXAoYXR0cnNbaV0sICJ4bWxucyIpICYmCi1AQCAtNTE4LDcgKzUyOCw5IEBACi0gCQkgICAgZ193YXJuaW5nKCJ1bmtub3duIGF0dHJpYnV0ZSBgJXMnIGZvciA8Z2xhZGUtaW50ZXJmYWNlPiIsCi0gCQkJICAgICAgYXR0cnNbaV0pOwotIAkgICAgfQotKyAjZW5kaWYKLSAjZW5kaWYKLSsKLSAJfSBlbHNlIHsKLSAJICAgIGdfd2FybmluZygiRXhwZWN0ZWQgPGdsYWRlLWludGVyZmFjZT4uICBHb3QgPCVzPi4iLCBuYW1lKTsKLSAJICAgIHN0YXRlLT5wcmV2X3N0YXRlID0gc3RhdGUtPnN0YXRlOwotQEAgLTEwNjMsMTIgKzEwNzUsMTggQEAKLSAgICAgfQotIH0KLSAKLSsjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKwotIHN0YXRpYyB4bWxFbnRpdHlQdHIKLSBnbGFkZV9wYXJzZXJfZ2V0X2VudGl0eShHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCB4bWxDaGFyICpuYW1lKQotIHsKLSAgICAgcmV0dXJuIHhtbEdldFByZWRlZmluZWRFbnRpdHkobmFtZSk7Ci0gfQotIAotKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCi0rCi0rI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsKLSBzdGF0aWMgdm9pZAotIGdsYWRlX3BhcnNlcl93YXJuaW5nKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQotIHsKLUBAIC0xMDc5LDYgKzEwOTcsMTAgQEAKLSAgICAgdmFfZW5kKGFyZ3MpOwotIH0KLSAKLSsjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLwotKwotKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCi0rCi0gc3RhdGljIHZvaWQKLSBnbGFkZV9wYXJzZXJfZXJyb3IoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCi0gewotQEAgLTEwODksNiArMTExMSwxMCBAQAotICAgICB2YV9lbmQoYXJncyk7Ci0gfQotIAotKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCi0rCi0rI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsKLSBzdGF0aWMgdm9pZAotIGdsYWRlX3BhcnNlcl9mYXRhbF9lcnJvcihHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKLSB7Ci1AQCAtMTA5OSw2ICsxMTI1LDEwIEBACi0gICAgIHZhX2VuZChhcmdzKTsKLSB9Ci0gCi0rI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KLSsKLSsjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKwotIHN0YXRpYyB4bWxTQVhIYW5kbGVyIGdsYWRlX3BhcnNlciA9IHsKLSAgICAgKGludGVybmFsU3Vic2V0U0FYRnVuYylOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJuYWxTdWJzZXQgKi8KLSAgICAgKGlzU3RhbmRhbG9uZVNBWEZ1bmMpTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXNTdGFuZGFsb25lICovCi1AQCAtMTEyNiw2ICsxMTU2LDgyIEBACi0gICAgIChmYXRhbEVycm9yU0FYRnVuYylnbGFkZV9wYXJzZXJfZmF0YWxfZXJyb3IsICAgICAgIC8qIGZhdGFsRXJyb3IgKi8KLSB9OwotIAotKyNlbHNlIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLwotKwotK3N0YXRpYyB2b2lkCi0rZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnRfd3JhcHBlcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqbmFtZSwgCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKiphdHRyX25hbWVzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICoqYXR0cl92YWx1ZXMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAqKmVycm9yKQotK3sKLSsgICAgZ3VpbnQgaSA9IDA7Ci0rCi0rICAgIC8qIFBhY2sgYXR0cmlidXRlIG5hbWVzL3ZhbHVlcyBmcm9tIHR3byBzZXBhcmF0ZQotKyAgICAgKiAgYXJyYXlzIChHTWFya3VwUGFyc2VyIHN0eWxlKSBpbnRvIG9uZSBzaW5nbGUKLSsgICAgICogIGFycmF5IChsaWJ4bWwgU0FYUGFyc2VyIHN0eWxlKS4gVGhpcyBpcyBub3QKLSsgICAgICogIHZlcnkgZWZmaWNpZW50LCBidXQgd2UgZG8gaXQgdG8gbWFrZSB0aGUKLSsgICAgICogIEdNYXJrdXBQYXJzZXIgY29kZSBhcyBsaXR0bGUgaW52YXNpdmUgYXMKLSsgICAgICogIHBvc3NpYmxlLiAqLwotKwotKyAgICB3aGlsZSAoYXR0cl9uYW1lc1tpXSAhPSBOVUxMKSB7Ci0rICAgICAgKytpOwotKyAgICB9Ci0rCi0rICAgIGlmICgxKQotKyAgICB7Ci0rICAgICAgICBjb25zdCBnY2hhciAqYXR0clsoaSoyKSsxXTsKLSsgICAgICAgIGd1aW50IGosIGs7Ci0rICAgICAgIAotKyAgICAgICAgZm9yIChqPTAsIGs9MDsgIGsgPCBpOyAgaiArPSAyKQotKyAgICAgICAgewotKyAgICAgICAgICAgIGF0dHJbal0gPSBhdHRyX25hbWVzW2tdOwotKyAgICAgICAgICAgIGF0dHJbaisxXSA9IGF0dHJfdmFsdWVzW2tdOwotKyAgICAgICAgICAgICsrazsKLSsgICAgICAgIH0KLSsgICAgICAgIGF0dHJbaSoyXSA9IE5VTEw7Ci0rCi0rICAgICAgICBnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudCgoR2xhZGVQYXJzZVN0YXRlKilzdGF0ZSwgbmFtZSwgYXR0cik7Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStnbGFkZV9wYXJzZXJfZW5kX2VsZW1lbnRfd3JhcHBlcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LCAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpuYW1lLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHN0YXRlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAqKmVycikKLSt7Ci0rICAgIGdsYWRlX3BhcnNlcl9lbmRfZWxlbWVudCgoR2xhZGVQYXJzZVN0YXRlKilzdGF0ZSwgbmFtZSk7Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rZ2xhZGVfcGFyc2VyX2NoYXJhY3RlcnNfd3JhcHBlcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LCAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKmNoYXJzLCAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICAgICAgICAgICAgICAgIGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHN0YXRlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyKQotK3sKLSsgICAgZ2xhZGVfcGFyc2VyX2NoYXJhY3RlcnMoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIGNoYXJzLCAoaW50KSBsZW4pOwotK30KLSsKLStzdGF0aWMgdm9pZAotK2dsYWRlX3BhcnNlcl9lcnJvcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LCBHRXJyb3IgKmVyciwgZ3BvaW50ZXIgZGF0YSkKLSt7Ci0rICAgIGdfbG9nKCJHbGFkZS1QYXJzZXIiLCBHX0xPR19MRVZFTF9DUklUSUNBTCwgIiVzIiwgZXJyLT5tZXNzYWdlKTsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IEdNYXJrdXBQYXJzZXIgICBnbGFkZV9wYXJzZXIgPSB7Ci0rICAgIGdsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50X3dyYXBwZXIsICAvKiBlbGVtZW50IG9wZW4gICAqLwotKyAgICBnbGFkZV9wYXJzZXJfZW5kX2VsZW1lbnRfd3JhcHBlciwgICAgLyogZWxlbWVudCBjbG9zZSAgKi8KLSsgICAgZ2xhZGVfcGFyc2VyX2NoYXJhY3RlcnNfd3JhcHBlciwgICAgIC8qIHRleHQgY29udGVudCAgICovCi0rICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYXNzdGhyb3VnaCAgICAqLwotKyAgICBnbGFkZV9wYXJzZXJfZXJyb3IsICAgICAgICAgICAgICAgICAgLyogcGFyc2UgZXJyb3IgICAgKi8KLSt9OwotKwotKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KLSsKLSsKLSBzdGF0aWMgdm9pZAotIHdpZGdldF9pbmZvX2ZyZWUoR2xhZGVXaWRnZXRJbmZvICppbmZvKQotIHsKLUBAIC0xMTkxLDYgKzEyOTcsOSBAQAotICAqCi0gICogUmV0dXJuczogdGhlIEdsYWRlSW50ZXJmYWNlIHN0cnVjdHVyZSBmb3IgdGhlIFhNTCBmaWxlLgotICAqLwotKwotKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCi0rCi0gR2xhZGVJbnRlcmZhY2UgKgotIGdsYWRlX3BhcnNlcl9wYXJzZV9maWxlKGNvbnN0IGdjaGFyICpmaWxlLCBjb25zdCBnY2hhciAqZG9tYWluKQotIHsKLUBAIC0xMjIyLDYgKzEzMzEsMzEgQEAKLSAgICAgcmV0dXJuIHN0YXRlLmludGVyZmFjZTsKLSB9Ci0gCi0rI2Vsc2UgLyogZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCi0rCi0rR2xhZGVJbnRlcmZhY2UgKgotK2dsYWRlX3BhcnNlcl9wYXJzZV9maWxlKGNvbnN0IGdjaGFyICpmaWxlLCBjb25zdCBnY2hhciAqZG9tYWluKQotK3sKLSsgICAgR2xhZGVJbnRlcmZhY2UgICppbnRlcmZhY2U7Ci0rICAgIEdFcnJvciAgICAgICAgICAqZXJyICAgICA9IE5VTEw7Ci0rICAgIGdjaGFyICAgICAgICAgICAqY29udGVudCA9IE5VTEw7Ci0rICAgIGdzaXplICAgICAgICAgICAgY2xlbjsKLSsKLSsgICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGUsICZjb250ZW50LCAmY2xlbiwgJmVycikpIHsKLSsgICAgICAgIGdfd2FybmluZygiY291bGQgbm90IGxvYWQgZ2xhZGUgZmlsZTogJXMiLCBlcnItPm1lc3NhZ2UpOwotKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycik7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotKwotKyAgICBpbnRlcmZhY2UgPSBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnRlbnQsIChnaW50KSBjbGVuLCBkb21haW4pOwotKwotKyAgICBnX2ZyZWUoY29udGVudCk7Ci0rCi0rICAgIHJldHVybiBpbnRlcmZhY2U7Ci0rfQotKwotKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KLSsKLSAvKioKLSAgKiBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyCi0gICogQGJ1ZmZlcjogYSBidWZmZXIgaW4gbWVtb3J5IGNvbnRhaW5pbmcgWE1MIGRhdGEuCi1AQCAtMTIzNyw2ICsxMzcxLDkgQEAKLSAgKgotICAqIFJldHVybnM6IHRoZSBHbGFkZUludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBYTUwgYnVmZmVyLgotICAqLwotKwotKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCi0rCi0gR2xhZGVJbnRlcmZhY2UgKgotIGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCi0gewotQEAgLTEyNjMsNiArMTQwMCwxNjEgQEAKLSAgICAgcmV0dXJuIHN0YXRlLmludGVyZmFjZTsKLSB9Ci0gCi0rI2Vsc2UgLyogZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCi0rCi0rCi0rc3RhdGljIEdsYWRlSW50ZXJmYWNlICoKLStnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQotK3sKLSsJR01hcmt1cFBhcnNlQ29udGV4dCAgKmNvbnRleHQ7Ci0rCUdsYWRlUGFyc2VTdGF0ZSAgICAgICBzdGF0ZSA9IHsgMCB9OwotKwlHRXJyb3IgICAgICAgICAgICAgICAqZXJyICAgPSBOVUxMOwotKwotKwlzdGF0ZS5pbnRlcmZhY2UgPSBOVUxMOwotKwlpZiAoZG9tYWluKQotKwkJc3RhdGUuZG9tYWluID0gZG9tYWluOwotKwllbHNlCi0rCQlzdGF0ZS5kb21haW4gPSB0ZXh0ZG9tYWluKE5VTEwpOwotKwotKwkvKiBGSVhNRTogVGhpcyBzdHJzdHIoKSBpcyBub3Qgc2FmZSwgYXMgaXQgaWdub3JlcyB0aGUgbGVuCi0rCSAqICAgICAgICBhcmd1bWVudCBhbmQgYXNzdW1lcyB0aGUgYnVmZmVyIGlzIE5VTC10ZXJtaW5hdGVkICovCi0rCWlmIChzdHJzdHIoYnVmZmVyLCAiPD94bWwiKSA9PSBOVUxMKSB7Ci0rCQlnX3dhcm5pbmcoIk5vIFhNTCBoZWFkZXIgZm91bmQgaW4gZG9jdW1lbnQhIik7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwljb250ZXh0ID0gZ19tYXJrdXBfcGFyc2VfY29udGV4dF9uZXcoJmdsYWRlX3BhcnNlciwgKEdNYXJrdXBQYXJzZUZsYWdzKSAwLCAmc3RhdGUsIE5VTEwpOwotKwotKwlnbGFkZV9wYXJzZXJfc3RhcnRfZG9jdW1lbnQoJnN0YXRlKTsKLSsKLSsJaWYgKCFnX21hcmt1cF9wYXJzZV9jb250ZXh0X3BhcnNlKGNvbnRleHQsIGJ1ZmZlciwgKGdzc2l6ZSkgbGVuLCAmZXJyKSkgewotKwkJZ193YXJuaW5nKCJkb2N1bWVudCBub3Qgd2VsbCBmb3JtZWQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSsJCWdfZXJyb3JfZnJlZShlcnIpOwotKwkJaWYgKHN0YXRlLmludGVyZmFjZSkKLSsJCQlnbGFkZV9pbnRlcmZhY2VfZGVzdHJveSAoc3RhdGUuaW50ZXJmYWNlKTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCWdsYWRlX3BhcnNlcl9lbmRfZG9jdW1lbnQoJnN0YXRlKTsKLSsKLSsJaWYgKHN0YXRlLnN0YXRlICE9IFBBUlNFUl9GSU5JU0gpIHsKLSsJCWdfd2FybmluZygiZGlkIG5vdCBmaW5pc2ggaW4gUEFSU0VSX0ZJTklTSCBzdGF0ZSEiKTsKLSsKLSsJCWlmIChzdGF0ZS5pbnRlcmZhY2UpCi0rCQkJZ2xhZGVfaW50ZXJmYWNlX2Rlc3Ryb3koc3RhdGUuaW50ZXJmYWNlKTsKLSsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCXJldHVybiBzdGF0ZS5pbnRlcmZhY2U7Ci0rfQotKwotK3N0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkcgotK3sKLSsJZ3VpbnQ4CWlkMSwgaWQyLCBjbSwgZmxhZ3M7Ci0rCWd1aW50MzIgbXRpbWU7Ci0rCWd1aW50OCAgeGZsYWdzOwotKwlndWludDggIG9zOwotK307Ci0rCi0rc3RhdGljIEdsYWRlSW50ZXJmYWNlICoKLStnbGFkZV9wYXJzZXJfcGFyc2VfZ3ppcHBlZF9idWZmZXIoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCi0rewotKwlzdHJ1Y3QgX2d6aXBfcmZjMTk1Ml9oZHIgKmhkciA9IChzdHJ1Y3QgX2d6aXBfcmZjMTk1Ml9oZHIqKWJ1ZmZlcjsKLSsJc3RydWN0IHpfc3RyZWFtX3MgICAgICAgICB6c3RyZWFtOwotKwlHbGFkZUludGVyZmFjZSAgICAgICAgICAgKmludGVyZmFjZTsKLSsJY29uc3QgZ3VpbnQ4ICAgICAgICAgICAgICpjYnVmOyAgICAgICAgICAgICAgLyogc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhICovCi0rCWd1aW50OCAgICAgICAgICAgICAgICAgICAqZGVjb21wcmVzc19idWY7Ci0rCWd1bG9uZyAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzc19sZW4gPSAwOwotKwlnaW50ICAgICAgICAgICAgICAgICAgICAgIHJldDsKLSsKLSsJZ19hc3NlcnQoaGRyICE9IE5VTEwgJiYgaGRyLT5pZDEgPT0gMHgxZiAmJiBoZHItPmlkMiA9PSAweDhiKTsKLSsKLSsJaWYgKGhkci0+Y20gIT0gWl9ERUZMQVRFRCkgewotKwkJZ193YXJuaW5nKCJVbmtub3duIGRlY29tcHJlc3Npb24gbWV0aG9kICV1IiwgKGd1aW50KSBoZHItPmNtKTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCS8qIFVuY29tcHJlc3NlZCBzaXplIChtb2R1bG8gMl4zMikgaXMgbGFzdAotKwkgKiAgNCBieXRlcyBvZiBnemlwcGVkIGZpbGUsIGFuZCBsaXR0bGUgZW5kaWFuLgotKwkgKiAgU2VlIFJGQyAxOTUyICovCi0rCWRlY29tcHJlc3NfbGVuID0gR1VJTlQzMl9GUk9NX0xFKCooKGd1aW50MzIqKSgoKGd1aW50OCopYnVmZmVyKSArIGxlbiAtIDQpKSk7Ci0rCi0rCS8qIHBhcmFub2lkIG1vZGU6IGdsYWRlIGZpbGVzID4gNU1CIGFyZSB1bmxpa2VseSAqLwotKwlnX3JldHVybl92YWxfaWZfZmFpbChkZWNvbXByZXNzX2xlbiA8IDUqMTAyNCoxMDI0LCBOVUxMKTsKLSsKLSsJZGVjb21wcmVzc19idWYgPSBnX21hbGxvYzAoZGVjb21wcmVzc19sZW4gKyAxKTsgLyogKzEgZm9yIE5VTC10ZXJtaW5hdG9yICovCi0rCi0rCS8qIGZpbmQgc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhLCBza2lwcGluZyBoZWFkZXIgc3R1ZmYgKi8KLSsJY2J1ZiA9IChndWludDgqKWJ1ZmZlciArIDEwOwotKwlpZiAoaGRyLT5mbGFncyAmIDB4MDQpIHsKLSsJCWd1aW50MTYgeGxlbiA9IEdVSU5UMTZfRlJPTV9MRSgqKChndWludDE2KiljYnVmKSk7Ci0rCQljYnVmICs9IHhsZW4gKyAyOwotKwl9Ci0rCWlmIChoZHItPmZsYWdzICYgMHgwOCkgewotKwkJZ3VpbnQxNiBvbmFtZWxlbiA9IHN0cmxlbihjYnVmKTsKLSsJCWNidWYgKz0gb25hbWVsZW4gKyAxOwotKwl9Ci0rCWlmIChoZHItPmZsYWdzICYgMHgxMCkgewotKwkJZ3VpbnQxNiBjb21tZW50bGVuID0gc3RybGVuKGNidWYpOwotKwkJY2J1ZiArPSBjb21tZW50bGVuICsgMTsKLSsJfQotKwlpZiAoaGRyLT5mbGFncyAmIDB4MDIpCi0rCXsKLSsJCWNidWYgKz0gMjsgLyogc2tpcCBoZWFkZXIgQ1JDMTYgKi8KLSsJfQotKwotKwl6c3RyZWFtLm5leHRfaW4gID0gKHZvaWQqKWNidWY7Ci0rCXpzdHJlYW0uYXZhaWxfaW4gPSAodUxvbmdmKSBsZW4gLSAoKHZvaWQqKWNidWYtKHZvaWQqKWJ1ZmZlcikgLSA0IC0gNCArMTsgCi0rCXpzdHJlYW0ubmV4dF9vdXQgPSBkZWNvbXByZXNzX2J1ZjsKLSsJenN0cmVhbS5hdmFpbF9vdXQ9IGRlY29tcHJlc3NfbGVuOwotKwl6c3RyZWFtLnphbGxvYyAgID0gWl9OVUxMOwotKwl6c3RyZWFtLnpmcmVlICAgID0gWl9OVUxMOwotKwl6c3RyZWFtLm9wYXF1ZSAgID0gWl9OVUxMOwotKwotKwlyZXQgPSBpbmZsYXRlSW5pdDIoJnpzdHJlYW0sIC1NQVhfV0JJVFMpOwotKwotKwlpZiAocmV0ICE9IFpfT0spIHsKLSsJCWdfd2FybmluZygiaW5mbGF0ZUluaXQyKCkgZmFpbGVkLiB6bGliIGVycm9yIGNvZGU6ICVkIiwgcmV0KTsKLSsJCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlyZXQgPSBpbmZsYXRlKCZ6c3RyZWFtLCBaX0ZJTklTSCk7Ci0rCi0rCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7Ci0rCQlnX3dhcm5pbmcoInpsaWIgZGVjb21wcmVzc2lvbiBmYWlsZWQuIHpsaWIgZXJyb3IgY29kZTogJWQiLCByZXQpOwotKwkJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCWludGVyZmFjZSA9IGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXJfaW50ZXJuYWwoZGVjb21wcmVzc19idWYsIGRlY29tcHJlc3NfbGVuLCBkb21haW4pOwotKwotKwlnX2ZyZWUoZGVjb21wcmVzc19idWYpOwotKwotKwlyZXR1cm4gaW50ZXJmYWNlOwotK30KLSsKLStHbGFkZUludGVyZmFjZSAqCi0rZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKLSt7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGJ1ZmZlciAhPSBOVUxMLCBOVUxMKTsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGVuID4gMCwgTlVMTCk7Ci0rCi0rCS8qIENoZWNrIGlmIGJ1ZmZlciBpcyBnemlwcGVkICovCi0rCWlmIChidWZmZXJbMF0gPT0gMHgxZiAmJiBidWZmZXJbMV0gPT0gKGdjaGFyKTB4OGIpIHsKLSsJCXJldHVybiBnbGFkZV9wYXJzZXJfcGFyc2VfZ3ppcHBlZF9idWZmZXIoYnVmZmVyLCBsZW4sIGRvbWFpbik7Ci0rCX0KLSsKLSsJLyogQnVmZmVyIGlzIGNsZWFydGV4dC4gKi8KLSsJcmV0dXJuIGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXJfaW50ZXJuYWwoYnVmZmVyLCBsZW4sIGRvbWFpbik7Ci0rfQotKwotKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KLSsKLSsKLSsjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKwotIHN0YXRpYyB2b2lkCi0gZHVtcF93aWRnZXQoeG1sTm9kZSAqcGFyZW50LCBHbGFkZVdpZGdldEluZm8gKmluZm8sIGdpbnQgaW5kZW50KQotIHsKLUBAIC0xMzgyLDYgKzE2NzQsOCBAQAotIAl4bWxOb2RlQWRkQ29udGVudCh3aWRnZXQsICIgICIpOwotIH0KLSAKLSsjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLwotKwotIC8qKgotICAqIGdsYWRlX2ludGVyZmFjZV9kdW1wCi0gICogQGludGVyZmFjZTogdGhlIEdsYWRlSW50ZXJmYWNlCi1AQCAtMTM5MCw2ICsxNjg0LDkgQEAKLSAgKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIHRoZSBjb250ZW50cyBvZiBhIEdsYWRlSW50ZXJmYWNlIGludG8gYSBmaWxlIGFzCi0gICogWE1MLiAgSXQgaXMgaW50ZW5kZWQgbWFpbmx5IGFzIGEgZGVidWdnaW5nIHRvb2wuCi0gICovCi0rCi0rI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsKLSB2b2lkCi0gZ2xhZGVfaW50ZXJmYWNlX2R1bXAoR2xhZGVJbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKQotIHsKLUBAIC0xNDI4LDYgKzE3MjUsMTcgQEAKLSAgICAgeG1sRnJlZURvYyhkb2MpOwotIH0KLSAKLSsjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KLSsKLSt2b2lkCi0rZ2xhZGVfaW50ZXJmYWNlX2R1bXAoR2xhZGVJbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKQotK3sKLSsgICAgZ193YXJuaW5nKCJnbGFkZV9pbnRlcmZhY2VfZHVtcCgpIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggbGlieG1sMi4iKTsKLSt9Ci0rCi0rI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLwotKwotKwotICNpZiAwCi0gaW50Ci0gbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKLWRpZmYgLXVyTiBsaWJnbGFkZS0yLjQuMi5vcmlnL2xpYmdsYWRlLTIuMC5wYy5pbiBsaWJnbGFkZS0yLjQuMi9saWJnbGFkZS0yLjAucGMuaW4KLS0tLSBsaWJnbGFkZS0yLjQuMi5vcmlnL2xpYmdsYWRlLTIuMC5wYy5pbgkyMDAxLTEyLTEyIDE1OjI4OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYmdsYWRlLTIuNC4yL2xpYmdsYWRlLTIuMC5wYy5pbgkyMDA1LTAzLTIyIDAxOjIwOjAwLjAwMDAwMDAwMCArMDEwMAotQEAgLTExLDcgKzExLDcgQEAKLSBOYW1lOiBMaWJnbGFkZQotIERlc2NyaXB0aW9uOiBhIGxpYnJhcnkgZm9yIGR5bmFtaWNhbGx5IGxvYWRpbmcgR0xBREUgaW50ZXJmYWNlIGZpbGVzCi0gVmVyc2lvbjogQFZFUlNJT05ACi0tUmVxdWlyZXM6IGd0aystMi4wIGxpYnhtbC0yLjAKLStSZXF1aXJlczogZ3RrKy0yLjAgQFBLR0NGR19SRVFVSVJFX0xJQlhNTDJACi0gTGliczogLUwke2xpYmRpcn0gLWxnbGFkZS0yLjAKLSBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9saWJnbGFkZS0yLjAKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YjJlYzQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1Vc2luZyBAUFlUSE9OQCBmb3IgdGhpcyBwYXRoIHdvdWxkIHJlc3VsdCBpbiB0aGUgYnVpbGQgc3lzdGVtIHB5dGhvbiBiZWluZyAKLXJlZmVycmVkIHRvLiBJbnN0ZWFkIHdlIHdhbnQgdG8gbG9jYXRlIHB5dGhvbiBmcm9tIHRoZSBlbnZpcm9ubWVudC4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1kaWZmIC1ydU4gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbiBsaWJnbGFkZS0yLjYuNC9saWJnbGFkZS1jb252ZXJ0LmluCi0tLS0gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbgkyMDExLTA5LTIyIDEwOjE4OjI4Ljk5MTE2NDAwMyArMDgwMAotKysrIGxpYmdsYWRlLTIuNi40L2xpYmdsYWRlLWNvbnZlcnQuaW4JMjAxMS0wOS0yMiAxMDoxODo1NS40MzExNjQwMDMgKzA4MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMhQFBZVEhPTkAKLSsjIS91c3IvYmluL2VudiBweXRob24KLSAjIC0qLSBtb2RlOiBweXRob24gLSotCi0gCi0gIyB5ZXMsIHRoaXMgcmVxdWlyZXMgcHl0aG9uIDIueCBhbmQgYW4gWE1MIHBhcnNlciBtb2R1bGUgKGVnLiBQeUV4cGF0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZV8yLjYuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1M2UxOWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZV8yLjYuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLVNVTU1BUlkgPSAiUnVudGltZSBzdXBwb3J0IGZvciB0aGUgR1RLKyBpbnRlcmZhY2UgYnVpbGRlciIKLUhPTUVQQUdFID0gImh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9saWJnbGFkZS8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKLQotTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xhZGUvZ2xhZGUuaDtlbmRsaW5lPTIyO21kNT1hMDRmNDYxYzk2NGJhNGI1N2ExNzJkMWZiY2Q4ZjhmYyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGFkZS9nbGFkZS1ndGsuYztlbmRsaW5lPTIyO21kNT03NjZmOTkzNDMzZTI2NDJmZWM4NzkzNmQzMTk5OTBmZiIKLQotU0VDVElPTiA9ICJsaWJzIgotUFIgPSAicjUiCi1ERVBFTkRTID0gInpsaWIgZ2RrLXBpeGJ1ZiBndGsrIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKLUdOT01FX0NPTVBSRVNTX1RZUEU9ImJ6MiIKLQotU1JDX1VSSSArPSAiZmlsZTovL2dsYWRlLWNydWZ0LnBhdGNoIGZpbGU6Ly9uby14bWwyLnBhdGNoIGZpbGU6Ly9weXRob25fZW52aXJvbm1lbnQucGF0Y2giCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImQxNzc2YjQwZjRlMTY2YjVlOWMxMDdmMWM4ZmU0MTM5IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNjQzNjFlNzY0NzgzOWQzNmVkODMzNmQ5OTJmZDIxMGQzZTgxMzk4ODIyNjliZWQ0N2RjNDY3NDk4MDE2NWRlYyIKLQotRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlieG1sMiIKLQotQ0ZMQUdTICs9ICItbHoiCi0KLVBBQ0tBR0VTICs9ICIgJHtQTn0tZGF0YSIKLUZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqLnNvLioiCi1GSUxFU18ke1BOfS1kYXRhID0gIiR7ZGF0YWRpcn0veG1sL2xpYmdsYWRlL2dsYWRlLTIuMC5kdGQiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9saWJnbGFkZS1jb252ZXJ0IgotI1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWRhdGEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmd1ZGV2L2xpYmd1ZGV2XzIzMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ3VkZXYvbGliZ3VkZXZfMjMwLmJiCmluZGV4IDZhMTA1MDIuLjcwOTU1M2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ3VkZXYvbGliZ3VkZXZfMjMwLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ3VkZXYvbGliZ3VkZXZfMjMwLmJiCkBAIC0xMCw1ICsxMCw3IEBACiBMSUNFTlNFID0gIkxHUEx2Mi4xIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCiAKLWluaGVyaXQgZ25vbWViYXNlIGdvYmplY3QtaW50cm9zcGVjdGlvbgoraW5oZXJpdCBnbm9tZWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MKIAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2xpYmd1ZGV2LyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPihcZCspKSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Z18yLjQwLjEzLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWM1MmY3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlbmRlcmluZyBTVkcgZmlsZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9saWJyc3ZnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkxHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yc3ZnLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0yNDttZDU9MjBiNDExM2M0OTA5YmJmMGQ2N2UwMDY3NzgzMDJiYzYiCi0KLVNFQ1RJT04gPSAieDExL3V0aWxzIgotREVQRU5EUyA9ICJjYWlybyBnZGstcGl4YnVmIGdsaWItMi4wIGxpYmNyb2NvIGxpYnhtbDIgcGFuZ28iCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIHBpeGJ1ZmNhY2hlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotU1JDX1VSSSArPSAiZmlsZTovL2d0ay1vcHRpb24ucGF0Y2giCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImFkMDM3ODBlMTJjNTZlNTI0NzRkOGVkZjg2OTc2YzczIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNGQ2ZWE5M2VjMDVmNWRhYmU3MjYyZDcxMWQyNDZhMGE5OWIyMzExZTIxNTM2MGRkM2RjYWJkNmFmZTNiOTgwNCIKLQotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfcGF0aF9HREtfUElYQlVGX1FVRVJZTE9BREVSUz0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIgotCi0jIFRoZSBvbGRlciBsZCAoMi4yMikgb24gdGhlIGhvc3QgKENlbnRvcyA2LjUpIGRvZXNuJ3QgaGF2ZSB0aGUKLSMgLUJzeW1ib2xpYy1mdW5jdGlvbnMgb3B0aW9uLCB3ZSBjYW4gZGlzYWJsZSBpdCBmb3IgbmF0aXZlLgotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLUJzeW1ib2xpYz1hdXRvIgotCi1QQUNLQUdFQ09ORklHID8/PSAiZ2RrcGl4YnVmIgotIyBUaGUgZ2RrLXBpeGJ1ZiBsb2FkZXIKLVBBQ0tBR0VDT05GSUdbZ2RrcGl4YnVmXSA9ICItLWVuYWJsZS1waXhidWYtbG9hZGVyLC0tZGlzYWJsZS1waXhidWYtbG9hZGVyLGdkay1waXhidWYtbmF0aXZlIgotIyBHVEsrIHRlc3QgYXBwbGljYXRpb24gKHJzdmctdmlldykKLVBBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrMywtLXdpdGhvdXQtZ3RrMyxndGsrMyIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBMb2FkYWJsZSBtb2R1bGVzIGRvbid0IG5lZWQgLmEgb3IgLmxhIG9uIExpbnV4Ci0Jcm0gLWYgJHtEfSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvKi5hICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyoubGEKLX0KLQotUEFDS0FHRVMgPSsgImxpYnJzdmctZ3RrIHJzdmciCi1GSUxFU19yc3ZnID0gIiR7YmluZGlyfS9yc3ZnKiBcCi0JICAgICAgJHtkYXRhZGlyfS9waXhtYXBzL3N2Zy12aWV3ZXIuc3ZnIFwKLQkgICAgICAke2RhdGFkaXJ9L3RoZW1lcyIKLUZJTEVTX2xpYnJzdmctZ3RrID0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qLyovKi5zbyIKLQotUElYQlVGX1BBQ0tBR0VTID0gImxpYnJzdmctZ3RrIgotCi1QSVhCVUZDQUNIRV9TWVNST09UX0RFUFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgaGFyZmJ1enotbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgcGFuZ28tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgaWN1LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyNDNjOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTYuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZW5kZXJpbmcgU1ZHIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvbGlicnN2Zy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcnN2Zy5oO2JlZ2lubGluZT0zO2VuZGxpbmU9MjQ7bWQ1PTIwYjQxMTNjNDkwOWJiZjBkNjdlMDA2Nzc4MzAyYmM2IgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0RFUEVORFMgPSAiY2Fpcm8gZ2RrLXBpeGJ1ZiBnbGliLTIuMCBsaWJjcm9jbyBsaWJ4bWwyIHBhbmdvIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBwaXhidWZjYWNoZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ndGstb3B0aW9uLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmNDc0ZmUzNzE3N2EyYmY4MDUwNzg3ZGYyMDQ2MDk1YyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImQ0OGJjZjZiMDNmYTk4ZjA3ZGYxMDMzMmZiNDlkOGMwMTA3ODZkZGNhNmFiMzRjYmJhMjE3Njg0ZjUzM2ZmMmUiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImFjX2N2X3BhdGhfR0RLX1BJWEJVRl9RVUVSWUxPQURFUlM9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycyIKKworIyBUaGUgb2xkZXIgbGQgKDIuMjIpIG9uIHRoZSBob3N0IChDZW50b3MgNi41KSBkb2Vzbid0IGhhdmUgdGhlCisjIC1Cc3ltYm9saWMtZnVuY3Rpb25zIG9wdGlvbiwgd2UgY2FuIGRpc2FibGUgaXQgZm9yIG5hdGl2ZS4KK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1Cc3ltYm9saWM9YXV0byIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImdka3BpeGJ1ZiIKKyMgVGhlIGdkay1waXhidWYgbG9hZGVyCitQQUNLQUdFQ09ORklHW2dka3BpeGJ1Zl0gPSAiLS1lbmFibGUtcGl4YnVmLWxvYWRlciwtLWRpc2FibGUtcGl4YnVmLWxvYWRlcixnZGstcGl4YnVmLW5hdGl2ZSIKKyMgR1RLKyB0ZXN0IGFwcGxpY2F0aW9uIChyc3ZnLXZpZXcpCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0azMsLS13aXRob3V0LWd0azMsZ3RrKzMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTG9hZGFibGUgbW9kdWxlcyBkb24ndCBuZWVkIC5hIG9yIC5sYSBvbiBMaW51eAorCXJtIC1mICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyouYSAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmxhCit9CisKK1BBQ0tBR0VTID0rICJsaWJyc3ZnLWd0ayByc3ZnIgorRklMRVNfcnN2ZyA9ICIke2JpbmRpcn0vcnN2ZyogXAorCSAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcy9zdmctdmlld2VyLnN2ZyBcCisJICAgICAgJHtkYXRhZGlyfS90aGVtZXMiCitGSUxFU19saWJyc3ZnLWd0ayA9ICIke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi8qLyouc28iCisKK1BJWEJVRl9QQUNLQUdFUyA9ICJsaWJyc3ZnLWd0ayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWFhYmEwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1TVU1NQVJZID0gImxpYnNlY3JldCBpcyBhIGxpYnJhcnkgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgcGFzc3dvcmRzIGFuZCBvdGhlciBzZWNyZXRzIgotTElDRU5TRSA9ICJMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIzYzJhNWUwMTA2Yjk5ZDc1MjM4OTg2NTU5YmI1ZmM2IgotCi1pbmhlcml0IGdub21lYmFzZSBndGstZG9jIHZhbGEgZ29iamVjdC1pbnRyb3NwZWN0aW9uCi0KLURFUEVORFMgKz0gImdsaWItMi4wIGxpYmdjcnlwdCBnZXR0ZXh0LW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUiCi0KLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLW1hbnBhZ2VzIgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1MTkwZGExZWU2ODY0MzcwNDZiYzEwMDY4ZjEyMGQxZCIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjBmMjliNTE2OTgxOThlNjk5OWM5MWY0YWRjZTMxMTljOGM0NTdmNTQ2YjEzM2E4NWJhZWE1ZWE5MDEwYTE5ZWQiCi0KLSMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwMjI4LwotQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCi0KLSMgdmFwaWdlbi5tNCBidW5kbGVkIHdpdGggdGhlIHRhcmJhbGwgZG9lcyBub3QgeWV0IGhhdmUgb3VyIGNyb3NzLWNvbXBpbGF0aW9uIGZpeGVzCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICBybSAtZiAke1N9L2J1aWxkL200L3ZhcGlnZW4ubTQKLX0KLQotIyBTZWNyZXQtMTogcG9reS9idWlsZC1taXBzNjQvdG1wL3dvcmsvbWlwczY0LXBva3ktbGludXgvbGliZ3BnLWVycm9yLzEuMTktcjAvbGliZ3BnLWVycm9yLTEuMTkvc3JjL3Bvc2l4LWxvY2suYzoxMTk6IGdldF9sb2NrX29iamVjdDogQXNzZXJ0aW9uIGAhInNpemVvZiBsb2NrIG9iaiInIGZhaWxlZC4KLSMgcWVtdTogdW5jYXVnaHQgdGFyZ2V0IHNpZ25hbCA2IChBYm9ydGVkKSAtIGNvcmUgZHVtcGVkCi1FWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NCA9ICIgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjMwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC41LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAibGlic2VjcmV0IGlzIGEgbGlicmFyeSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBwYXNzd29yZHMgYW5kIG90aGVyIHNlY3JldHMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjNjMmE1ZTAxMDZiOTlkNzUyMzg5ODY1NTliYjVmYzYiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgdmFsYSBnb2JqZWN0LWludHJvc3BlY3Rpb24KKworREVQRU5EUyArPSAiZ2xpYi0yLjAgbGliZ2NyeXB0IGdldHRleHQtbmF0aXZlIGludGx0b29sLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtbWFucGFnZXMiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjJkNjg4ODI1OTIxMzEzZGE4NzMxMzEzYjBhN2YzOTRjIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOWNlN2JkOGRkNTgzMWYyNzg2YzkzNWQ4MjYzOGFjNDI4ZmEwODUwNTdjYzY3ODBhYmEwZTM5Mzc1ODg3Y2NiMyIKKworIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjAyMjgvCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworIyB2YXBpZ2VuLm00IGJ1bmRsZWQgd2l0aCB0aGUgdGFyYmFsbCBkb2VzIG5vdCB5ZXQgaGF2ZSBvdXIgY3Jvc3MtY29tcGlsYXRpb24gZml4ZXMKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHJtIC1mICR7U30vYnVpbGQvbTQvdmFwaWdlbi5tNAorfQorCisjIFNlY3JldC0xOiBwb2t5L2J1aWxkLW1pcHM2NC90bXAvd29yay9taXBzNjQtcG9reS1saW51eC9saWJncGctZXJyb3IvMS4xOS1yMC9saWJncGctZXJyb3ItMS4xOS9zcmMvcG9zaXgtbG9jay5jOjExOTogZ2V0X2xvY2tfb2JqZWN0OiBBc3NlcnRpb24gYCEic2l6ZW9mIGxvY2sgb2JqIicgZmFpbGVkLgorIyBxZW11OiB1bmNhdWdodCB0YXJnZXQgc2lnbmFsIDYgKEFib3J0ZWQpIC0gY29yZSBkdW1wZWQKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ID0gIiAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtZ3RrLWRvYyIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlid25jay9saWJ3bmNrM18zLjE0LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NTg5NGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLVNVTU1BUlkgPSAiV2luZG93IG5hdmlnYXRpb24gY29uc3RydWN0aW9uIHRvb2xraXQiCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgotCi1CUE4gPSAibGlid25jayIKLQotU0VDVElPTiA9ICJ4MTEvbGlicyIKLURFUEVORFMgPSAiZ3RrKzMgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlieHJlcyIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gInN0YXJ0dXAtbm90aWZpY2F0aW9uIgotUEFDS0FHRUNPTkZJR1tzdGFydHVwLW5vdGlmaWNhdGlvbl0gPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sLS1kaXNhYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLHN0YXJ0dXAtbm90aWZpY2F0aW9uIgotCi1pbmhlcml0IGdub21lYmFzZSBnb2JqZWN0LWludHJvc3BlY3Rpb24KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImQ5NmMwYjc0YzRkYzVmZGFlNzU4OTY0MDk4NjAzYzkwIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYmI2NDNjOWM0MjNjOGFhNzljNTk5NzNjZTI3Y2U5MWQzYjE4MGQxZTk5MDc5MDIyNzhmYjc5MzkxZjUyYmVmYSIKLQotaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLSMgbGlieHJlcyBtZWFucyB4MTEgb25seQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMjAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlid25jay9saWJ3bmNrM18zLjIwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0ZWY2OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlid25jay9saWJ3bmNrM18zLjIwLjEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJXaW5kb3cgbmF2aWdhdGlvbiBjb25zdHJ1Y3Rpb24gdG9vbGtpdCIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK0JQTiA9ICJsaWJ3bmNrIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgZ3RrKzMgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlieHJlcyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInN0YXJ0dXAtbm90aWZpY2F0aW9uIgorUEFDS0FHRUNPTkZJR1tzdGFydHVwLW5vdGlmaWNhdGlvbl0gPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sLS1kaXNhYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLHN0YXJ0dXAtbm90aWZpY2F0aW9uIgorCitpbmhlcml0IGdub21lYmFzZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNDg3OTM4ZDY1ZDRiZmFlMWYyNTAxMDUyYjFiZDc0OTIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxY2IwMzcxNmJjNDc3MDU4ZGZkZjNlYmZhNGY1MzRkZTNiMTNiMWFhMDY3ZmNkMDY0ZDBiNzgxMzI5MWNiYTcyIgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBsaWJ4cmVzIG1lYW5zIHgxMSBvbmx5CitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfc2Vzc2lvbi5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9idWlsZGVyX3Nlc3Npb24uc2gKaW5kZXggMDAxYTAzMy4uNGU1MDlhNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfc2Vzc2lvbi5zaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9zZXNzaW9uLnNoCkBAIC0yMyw4ICsyMyw4IEBACiAgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHgtc2NoZW1lLWhhbmRsZXIvaHR0cHMKICAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgdGV4dC9odG1sCiAKLSAgICAjcmVnaXN0ZXIgdGV4dCBmaWxlcyB3aXRoIGxlYWZwYWQgdGV4dCBlZGl0b3IKLSAgICB4ZGctbWltZSBkZWZhdWx0IGxlYWZwYWQuZGVza3RvcCB0ZXh0L3BsYWluCisgICAgI3JlZ2lzdGVyIHRleHQgZmlsZXMgd2l0aCBsM2FmcGFkIHRleHQgZWRpdG9yCisgICAgeGRnLW1pbWUgZGVmYXVsdCBsM2FmcGFkLmRlc2t0b3AgdGV4dC9wbGFpbgogZmkKIAogY2QgL2hvbWUvYnVpbGRlci9wb2t5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCmluZGV4IGM3ZTY4NmQuLmM0YjZmMzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRlZSBcCiAgICAgICAgICAgICAgICAgIgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ3RrLWRvYwogCiAjIFdlIGRvbid0IGRlcGVuZCBvbiBiaW51dGlscyBzbyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhpcwogZXhwb3J0IGFjX2N2X2xpYl9iZmRfYmZkX29wZW5yPSJubyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjYuYmIKaW5kZXggMjBiNDY2OC4uZDJjMWUxMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjYuYmIKQEAgLTcsOCArNyw2IEBACiBTUkNfVVJJW21kNXN1bV0gPSAiMjNhMGIyZjAyMzU0MzFkMzUyMzhkZjFkM2E1MTdmZGIiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjEzY2IzODQ0N2I3NmE5M2ZmNzIzNWUxN2FjZDU1YTc4YjUyZWE4NGE5ZGYxMjhjM2YyMjU3ZjhlYWE3YjI1MiIKIAotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiY2Fpcm8tKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCi0KIFBBQ0tBR0VTID0rICJjYWlyby1nb2JqZWN0IGNhaXJvLXNjcmlwdC1pbnRlcnByZXRlciBjYWlyby1wZXJmLXV0aWxzIgogCiBTVU1NQVJZXyR7UE59ID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2FudGFyZWxsLWZvbnRzL2NhbnRhcmVsbC1mb250c19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhbnRhcmVsbC1mb250cy9jYW50YXJlbGwtZm9udHNfZ2l0LmJiCmluZGV4IDEyN2YwYTEuLmUzZTRjZGUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2FudGFyZWxsLWZvbnRzL2NhbnRhcmVsbC1mb250c19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYW50YXJlbGwtZm9udHMvY2FudGFyZWxsLWZvbnRzX2dpdC5iYgpAQCAtMTAsMTAgKzEwLDExIEBACiBMSUNFTlNFID0gIk9GTC0xLjEiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZjkxZTNmZmNhYjhjZmI5NzJhNjZiZjExMjU1MTg4ZCIKIAotUFYgPSAiMC4wLjIxK2dpdCR7U1JDUFZ9IgorUFYgPSAiMC4wLjI0IgogCi1TUkNSRVYgPSAiNjExYzE2OWRmNTI4N2MwNTlkNjNiMGM4ZjA1NzA2NDdjNzVjOTE4OSIKK1NSQ1JFViA9ICIwN2I2ZWEyY2JiZWJmYzM2MGFhNDY2ODYxMmEzNzZiZTVlMjE0ZWFhIgogU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnL2NhbnRhcmVsbC1mb250cztwcm90b2NvbD1naXQ7YnJhbmNoPW1hc3RlciIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPig/ITBcLjEzKSg/ITBcLjEwXC4xKVxkK1wuXGQrKFwuXGQrKSspIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvMDAwMS1SZW1vdmUtY2x1dHRlci50eXBlcy1hcy1pdC1pcy1idWlsZC1jb25maWd1cmF0aW9uLXNwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLzAwMDEtUmVtb3ZlLWNsdXR0ZXIudHlwZXMtYXMtaXQtaXMtYnVpbGQtY29uZmlndXJhdGlvbi1zcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjNjMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLzAwMDEtUmVtb3ZlLWNsdXR0ZXIudHlwZXMtYXMtaXQtaXMtYnVpbGQtY29uZmlndXJhdGlvbi1zcC5wYXRjaApAQCAtMCwwICsxLDE0MyBAQAorRnJvbSAzYTA0MDRkZmJjNjVjNmE4NjRlMDFkMTIwMGE0ODA3NGUxOWQ1ZGVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIgU2VwIDIwMTYgMTQ6Mjg6MzggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlIGNsdXR0ZXIudHlwZXMgYXMgaXQgaXMgYnVpbGQgY29uZmlndXJhdGlvbi1zcGVjaWZpYy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIGRvYy9yZWZlcmVuY2UvY2x1dHRlci50eXBlcyB8IDEyMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMjIgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGRvYy9yZWZlcmVuY2UvY2x1dHRlci50eXBlcworCitkaWZmIC0tZ2l0IGEvZG9jL3JlZmVyZW5jZS9jbHV0dGVyLnR5cGVzIGIvZG9jL3JlZmVyZW5jZS9jbHV0dGVyLnR5cGVzCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMzdhY2MuLjAwMDAwMDAKKy0tLSBhL2RvYy9yZWZlcmVuY2UvY2x1dHRlci50eXBlcworKysrIC9kZXYvbnVsbAorQEAgLTEsMTIyICswLDAgQEAKKy1jYWxseV9hY3Rvcl9nZXRfdHlwZQorLWNhbGx5X2Nsb25lX2dldF90eXBlCistY2FsbHlfZ3JvdXBfZ2V0X3R5cGUKKy1jYWxseV9yZWN0YW5nbGVfZ2V0X3R5cGUKKy1jYWxseV9yb290X2dldF90eXBlCistY2FsbHlfc3RhZ2VfZ2V0X3R5cGUKKy1jYWxseV90ZXh0X2dldF90eXBlCistY2FsbHlfdGV4dHVyZV9nZXRfdHlwZQorLWNhbGx5X3V0aWxfZ2V0X3R5cGUKKy1jbHV0dGVyX2FjdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfYWN0b3JfYm94X2dldF90eXBlCistY2x1dHRlcl9hY3Rvcl9nZXRfdHlwZQorLWNsdXR0ZXJfYWN0b3JfbWV0YV9nZXRfdHlwZQorLWNsdXR0ZXJfYWxpZ25fY29uc3RyYWludF9nZXRfdHlwZQorLWNsdXR0ZXJfYWxwaGFfZ2V0X3R5cGUKKy1jbHV0dGVyX2FuaW1hdGFibGVfZ2V0X3R5cGUKKy1jbHV0dGVyX2FuaW1hdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfYW5pbWF0b3JfZ2V0X3R5cGUKKy1jbHV0dGVyX2FuaW1hdG9yX2tleV9nZXRfdHlwZQorLWNsdXR0ZXJfYmFja2VuZF9nZXRfdHlwZQorLWNsdXR0ZXJfYmVoYXZpb3VyX2RlcHRoX2dldF90eXBlCistY2x1dHRlcl9iZWhhdmlvdXJfZWxsaXBzZV9nZXRfdHlwZQorLWNsdXR0ZXJfYmVoYXZpb3VyX2dldF90eXBlCistY2x1dHRlcl9iZWhhdmlvdXJfb3BhY2l0eV9nZXRfdHlwZQorLWNsdXR0ZXJfYmVoYXZpb3VyX3BhdGhfZ2V0X3R5cGUKKy1jbHV0dGVyX2JlaGF2aW91cl9yb3RhdGVfZ2V0X3R5cGUKKy1jbHV0dGVyX2JlaGF2aW91cl9zY2FsZV9nZXRfdHlwZQorLWNsdXR0ZXJfYmluX2xheW91dF9nZXRfdHlwZQorLWNsdXR0ZXJfYmluZF9jb25zdHJhaW50X2dldF90eXBlCistY2x1dHRlcl9iaW5kaW5nX3Bvb2xfZ2V0X3R5cGUKKy1jbHV0dGVyX2JsdXJfZWZmZWN0X2dldF90eXBlCistY2x1dHRlcl9ib3hfZ2V0X3R5cGUKKy1jbHV0dGVyX2JveF9sYXlvdXRfZ2V0X3R5cGUKKy1jbHV0dGVyX2JyaWdodG5lc3NfY29udHJhc3RfZWZmZWN0X2dldF90eXBlCistY2x1dHRlcl9jYWlyb190ZXh0dXJlX2dldF90eXBlCistY2x1dHRlcl9jYW52YXNfZ2V0X3R5cGUKKy1jbHV0dGVyX2NoaWxkX21ldGFfZ2V0X3R5cGUKKy1jbHV0dGVyX2NsaWNrX2FjdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfY2xpcF9ub2RlX2dldF90eXBlCistY2x1dHRlcl9jbG9uZV9nZXRfdHlwZQorLWNsdXR0ZXJfY29sb3JfZ2V0X3R5cGUKKy1jbHV0dGVyX2NvbG9yX25vZGVfZ2V0X3R5cGUKKy1jbHV0dGVyX2NvbG9yaXplX2VmZmVjdF9nZXRfdHlwZQorLWNsdXR0ZXJfY29uc3RyYWludF9nZXRfdHlwZQorLWNsdXR0ZXJfY29udGFpbmVyX2dldF90eXBlCistY2x1dHRlcl9jb250ZW50X2dldF90eXBlCistY2x1dHRlcl9kZWZvcm1fZWZmZWN0X2dldF90eXBlCistY2x1dHRlcl9kZXNhdHVyYXRlX2VmZmVjdF9nZXRfdHlwZQorLWNsdXR0ZXJfZGV2aWNlX21hbmFnZXJfZ2V0X3R5cGUKKy1jbHV0dGVyX2RyYWdfYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl9kcm9wX2FjdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfZWZmZWN0X2dldF90eXBlCistY2x1dHRlcl9ldmVudF9nZXRfdHlwZQorLWNsdXR0ZXJfZXZlbnRfc2VxdWVuY2VfZ2V0X3R5cGUKKy1jbHV0dGVyX2ZpeGVkX2xheW91dF9nZXRfdHlwZQorLWNsdXR0ZXJfZmxvd19sYXlvdXRfZ2V0X3R5cGUKKy1jbHV0dGVyX2ZvZ19nZXRfdHlwZQorLWNsdXR0ZXJfZ2VvbWV0cnlfZ2V0X3R5cGUKKy1jbHV0dGVyX2dlc3R1cmVfYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl9nbHhfdGV4dHVyZV9waXhtYXBfZ2V0X3R5cGUKKy1jbHV0dGVyX2dyaWRfbGF5b3V0X2dldF90eXBlCistY2x1dHRlcl9ncm91cF9nZXRfdHlwZQorLWNsdXR0ZXJfaW1hZ2VfZ2V0X3R5cGUKKy1jbHV0dGVyX2lucHV0X2RldmljZV9nZXRfdHlwZQorLWNsdXR0ZXJfaW50ZXJ2YWxfZ2V0X3R5cGUKKy1jbHV0dGVyX2tleWZyYW1lX3RyYW5zaXRpb25fZ2V0X3R5cGUKKy1jbHV0dGVyX2tub3RfZ2V0X3R5cGUKKy1jbHV0dGVyX2xheW91dF9tYW5hZ2VyX2dldF90eXBlCistY2x1dHRlcl9sYXlvdXRfbWV0YV9nZXRfdHlwZQorLWNsdXR0ZXJfbGlzdF9tb2RlbF9nZXRfdHlwZQorLWNsdXR0ZXJfbWFyZ2luX2dldF90eXBlCistY2x1dHRlcl9tZWRpYV9nZXRfdHlwZQorLWNsdXR0ZXJfbW9kZWxfZ2V0X3R5cGUKKy1jbHV0dGVyX21vZGVsX2l0ZXJfZ2V0X3R5cGUKKy1jbHV0dGVyX29mZnNjcmVlbl9lZmZlY3RfZ2V0X3R5cGUKKy1jbHV0dGVyX3BhZ2VfdHVybl9lZmZlY3RfZ2V0X3R5cGUKKy1jbHV0dGVyX3BhaW50X25vZGVfZ2V0X3R5cGUKKy1jbHV0dGVyX3BhaW50X3ZvbHVtZV9nZXRfdHlwZQorLWNsdXR0ZXJfcGFuX2FjdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfcGFyYW1fY29sb3JfZ2V0X3R5cGUKKy1jbHV0dGVyX3BhcmFtX2ZpeGVkX2dldF90eXBlCistY2x1dHRlcl9wYXJhbV91bml0c19nZXRfdHlwZQorLWNsdXR0ZXJfcGF0aF9jb25zdHJhaW50X2dldF90eXBlCistY2x1dHRlcl9wYXRoX2dldF90eXBlCistY2x1dHRlcl9wYXRoX25vZGVfZ2V0X3R5cGUKKy1jbHV0dGVyX3BlcnNwZWN0aXZlX2dldF90eXBlCistY2x1dHRlcl9waXBlbGluZV9ub2RlX2dldF90eXBlCistY2x1dHRlcl9wb2ludF9nZXRfdHlwZQorLWNsdXR0ZXJfcHJvcGVydHlfdHJhbnNpdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfcmVjdF9nZXRfdHlwZQorLWNsdXR0ZXJfcmVjdGFuZ2xlX2dldF90eXBlCistY2x1dHRlcl9yb3RhdGVfYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl9zY29yZV9nZXRfdHlwZQorLWNsdXR0ZXJfc2NyaXB0X2dldF90eXBlCistY2x1dHRlcl9zY3JpcHRhYmxlX2dldF90eXBlCistY2x1dHRlcl9zY3JvbGxfYWN0b3JfZ2V0X3R5cGUKKy1jbHV0dGVyX3NldHRpbmdzX2dldF90eXBlCistY2x1dHRlcl9zaGFkZXJfZWZmZWN0X2dldF90eXBlCistY2x1dHRlcl9zaGFkZXJfZmxvYXRfZ2V0X3R5cGUKKy1jbHV0dGVyX3NoYWRlcl9nZXRfdHlwZQorLWNsdXR0ZXJfc2hhZGVyX2ludF9nZXRfdHlwZQorLWNsdXR0ZXJfc2hhZGVyX21hdHJpeF9nZXRfdHlwZQorLWNsdXR0ZXJfc2l6ZV9nZXRfdHlwZQorLWNsdXR0ZXJfc25hcF9jb25zdHJhaW50X2dldF90eXBlCistY2x1dHRlcl9zdGFnZV9nZXRfdHlwZQorLWNsdXR0ZXJfc3RhZ2VfbWFuYWdlcl9nZXRfdHlwZQorLWNsdXR0ZXJfc3RhdGVfZ2V0X3R5cGUKKy1jbHV0dGVyX3N0YXRlX2tleV9nZXRfdHlwZQorLWNsdXR0ZXJfc3dpcGVfYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl90YWJsZV9sYXlvdXRfZ2V0X3R5cGUKKy1jbHV0dGVyX3RhcF9hY3Rpb25fZ2V0X3R5cGUKKy1jbHV0dGVyX3RleHRfYnVmZmVyX2dldF90eXBlCistY2x1dHRlcl90ZXh0X2dldF90eXBlCistY2x1dHRlcl90ZXh0X25vZGVfZ2V0X3R5cGUKKy1jbHV0dGVyX3RleHR1cmVfZ2V0X3R5cGUKKy1jbHV0dGVyX3RleHR1cmVfbm9kZV9nZXRfdHlwZQorLWNsdXR0ZXJfdGltZWxpbmVfZ2V0X3R5cGUKKy1jbHV0dGVyX3RyYW5zaXRpb25fZ2V0X3R5cGUKKy1jbHV0dGVyX3RyYW5zaXRpb25fZ3JvdXBfZ2V0X3R5cGUKKy1jbHV0dGVyX3VuaXRzX2dldF90eXBlCistY2x1dHRlcl92ZXJ0ZXhfZ2V0X3R5cGUKKy1jbHV0dGVyX3pvb21fYWN0aW9uX2dldF90eXBlCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC8wMDAxLWJ1aWxkLVVzZS1BQ19DT01QSUxFX0lGRUxTRS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC8wMDAxLWJ1aWxkLVVzZS1BQ19DT01QSUxFX0lGRUxTRS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlZGZmMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvMDAwMS1idWlsZC1Vc2UtQUNfQ09NUElMRV9JRkVMU0UucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotRnJvbSA0ODNhNGJiMDBlN2RkMmYxNGQ4NmUxNjdjODAxM2M4NjM4NzIzYzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRW1tYW51ZWxlIEJhc3NpIDxlYmFzc2lAZ25vbWUub3JnPgotRGF0ZTogVGh1LCAxOCBGZWIgMjAxNiAxNzoxOTowOSArMDAwMAotU3ViamVjdDogW1BBVENIXSBidWlsZDogVXNlIEFDX0NPTVBJTEVfSUZFTFNFCi0KLUluc3RlYWQgb2YgQUNfVFJZX0NPTVBJTEUsIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnkgbmV3ZXIgYXV0b2NvbmYuCi0tLS0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLSBjb25maWd1cmUuYWMgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDRkNzJlMGMuLjhjYTNmOTQgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTM0OCwyNCArMzQ4LDI1IEBAIEFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV93YXlsYW5kIiAhPSB4bm9dLAotICAgICAgICAgIyBXZSBuZWVkIHRvIG1hbnVhbGx5IGNoZWNrIGZvciBXYXlsYW5kIHN1cHBvcnQgaW4gQ29nbCBiZWNhdXNlCi0gICAgICAgICAjIHRoZSB3aW5kb3dpbmcgc3lzdGVtcyBhcmUgbm90IGV4cG9zZWQgaW4gdGhlIHBrZy1jb25maWcgZmlsZQotICAgICAgICAgc2F2ZWRfQ0ZMQUdTPSIke0NGTEFHU30iCi0tICAgICAgICBDRkxBR1M9ImAkUEtHX0NPTkZJRyAtLWNmbGFncyAkQ0xVVFRFUl9CQVNFX1BDX0ZJTEVTYCIKLSsgICAgICAgIENGTEFHUz0iYCRQS0dfQ09ORklHIC0tY2ZsYWdzIGNvZ2wtMS4wYCIKLSAKLSAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFdheWxhbmQgQ29nbCBiYWNrZW5kXSkKLS0gICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y29nbC9jb2dsLmg+XSwKLS0gICAgICAgICAgICAgICAgICAgICAgIFsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgI2lmbmRlZiBDT0dMX0hBU19FR0xfUExBVEZPUk1fV0FZTEFORF9TVVBQT1JUCi0tICAgICAgICAgICAgICAgICAgICAgICAgICNlcnJvciAiTm8gV2F5bGFuZCBzdXBwb3J0IGluIENvZ2wiCi0tICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQotLSAgICAgICAgICAgICAgICAgICAgICAgXSwKLS0gICAgICAgICAgICAgICAgICAgICAgIFsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0tICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVfY29nbF93YXlsYW5kPXllcwotLSAgICAgICAgICAgICAgICAgICAgICAgXSwKLS0gICAgICAgICAgICAgICAgICAgICAgIFsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLS0gICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZV9jb2dsX3dheWxhbmQ9bm8KLS0gICAgICAgICAgICAgICAgICAgICAgIF0pCi0rCi0rICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCi0rI2luY2x1ZGUgPGNvZ2wvY29nbC5oPgotK11dLAotK1tbCi0rI2lmbmRlZiBDT0dMX0hBU19FR0xfUExBVEZPUk1fV0FZTEFORF9TVVBQT1JUCi0rI2Vycm9yIENvZ2wgY29tcGlsZWQgd2l0aG91dCBXYXlsYW5kIHN1cHBvcnQKLSsjZW5kaWYKLStdXSldLCBbCi0rICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotKyAgICAgICAgICBoYXZlX2NvZ2xfd2F5bGFuZD15ZXMKLSsgICAgICAgIF0sIFsKLSsgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLSsgICAgICAgICAgaGF2ZV9jb2dsX3dheWxhbmQ9bm8KLSsgICAgICAgIF0pCi0rCi0gICAgICAgICBDRkxBR1M9IiR7c2F2ZWRfQ0ZMQUdTfSIKLSAgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfY29nbF93YXlsYW5kIiA9IHh5ZXNdLAotICAgICAgICAgICAgICAgWwotQEAgLTQ5OSwyNiArNTAwLDI1IEBAIEFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9taXIiID0gInh5ZXMiXSwKLSAgICAgICAgICMgV2UgbmVlZCB0byBtYW51YWxseSBjaGVjayBmb3IgTWlyIHN1cHBvcnQgaW4gQ29nbCBiZWNhdXNlCi0gICAgICAgICAjIHRoZSB3aW5kb3dpbmcgc3lzdGVtcyBhcmUgbm90IGV4cG9zZWQgaW4gdGhlIHBrZy1jb25maWcgZmlsZQotICAgICAgICAgc2F2ZWRfQ0ZMQUdTPSIke0NGTEFHU30iCi0tICAgICAgICBDRkxBR1M9ImAkUEtHX0NPTkZJRyAtLWNmbGFncyAkQ0xVVFRFUl9CQVNFX1BDX0ZJTEVTYCIKLSsgICAgICAgIENGTEFHUz0iYCRQS0dfQ09ORklHIC0tY2ZsYWdzIGNvZ2wtMS4wYCIKLSAKLSAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIE1pciBDb2dsIGJhY2tlbmRdKQotLSAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxjb2dsL2NvZ2wuaD5dLAotLSAgICAgICAgICAgICAgICAgICAgICAgWwotLSAgICAgICAgICAgICAgICAgICAgICAgICNpZm5kZWYgQ09HTF9IQVNfRUdMX1BMQVRGT1JNX01JUl9TVVBQT1JUCi0tICAgICAgICAgICAgICAgICAgICAgICAgI2Vycm9yICJObyBNaXIgc3VwcG9ydCBpbiBDb2dsIgotLSAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYWluICh2b2lkKSB7IHJldHVybiAwOyB9Ci0tICAgICAgICAgICAgICAgICAgICAgICBdLAotLSAgICAgICAgICAgICAgICAgICAgICAgWwotLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKLS0gICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZV9jb2dsX21pcj15ZXMKLS0gICAgICAgICAgICAgICAgICAgICAgIF0sCi0tICAgICAgICAgICAgICAgICAgICAgICBbCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCi0tICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVfY29nbF9taXI9bm8KLS0gICAgICAgICAgICAgICAgICAgICAgIF0pCi0gCi0tICAgICAgICBDRkxBR1M9IiR7c2F2ZWRfQ0ZMQUdTfSIKLSsgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKLSsjaW5jbHVkZSA8Y29nbC9jb2dsLmg+Ci0rXV0sCi0rW1sKLSsjaWZuZGVmIENPR0xfSEFTX0VHTF9QTEFURk9STV9NSVJfU1VQUE9SVAotKyNlcnJvciBDb2dsIGNvbXBpbGVkIHdpdGhvdXQgTWlyIHN1cHBvcnQKLSsjZW5kaWYKLStdXSldLCBbCi0rICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotKyAgICAgICAgICBoYXZlX2NvZ2xfbWlyPXllcwotKyAgICAgICAgXSwgWwotKyAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotKyAgICAgICAgICBoYXZlX2NvZ2xfbWlyPW5vCi0rICAgICAgICBdKQotKwotICAgICAgICAgQVNfSUYoW3Rlc3QgIngkaGF2ZV9jb2dsX21pciIgPSB4bm9dLCBbQUNfTVNHX0VSUk9SKCIqKiogQ29nbCBpcyBtaXNzaW5nIE1pciBzdXBwb3J0LiIpXSkKLSAKLSAgICAgICAgIFBLR19DSEVDS19FWElTVFMoW21pcmNsaWVudF0sCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjI0LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjBfMS4yNC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTNiM2U3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjI0LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1yZXF1aXJlIGNsdXR0ZXItMS4wLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiM2I5OGUxYjMzNzE5OTgyYTU3MzZhZTQyY2JmNzE4M2UiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI5NjMxYzk4Y2I0YmNiZmVjMTVlMWJiZTllYWE2ZWVmMGYxMjcyMDE1NTJmY2U0MGQ3ZDI4ZjIxMzM4MDNjZDYzIgotU1JDX1VSSSArPSAiZmlsZTovL2luc3RhbGwtZXhhbXBsZXMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLVVzZS1BQ19DT01QSUxFX0lGRUxTRS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjI2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhMWNmZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjI2LjAuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBjbHV0dGVyLTEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImIwNjVlOWNhNTNkMWY2YmMxZWMyNmFlYjI3MzM4YmI3IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNjc1MTRlNzgyNGIzZmViNDcyMzE2NDA4NGIzNmQ2Y2UxYWU0MWNiM2E5ODk3ZTlmMWE1NmM4MzM0OTkzY2UwNiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1SZW1vdmUtY2x1dHRlci50eXBlcy1hcy1pdC1pcy1idWlsZC1jb25maWd1cmF0aW9uLXNwLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC4xNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjE2LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2Y1MjQyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjE2LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1yZXF1aXJlIGNsdXR0ZXItZ3N0LTMuMC5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY2x1dHRlci1nc3QvY2x1dHRlci1nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI0O21kNT05NWJhYWNiYTE5NGU4MTRjMTEwZWEzYmRmMjVkZGJmNCIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiY2EyNGViOTJhMGQzNGZjOWU2NmZkNjg2YTk2NWQ1MWMiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4MDNlOGI3MjY1ZTYzZTA1ODFlMjFmZDBjNjA2NDc5MmRmZTk1MTUxMmU5ZjUxNWU5ZTdhOWI0NTJjYWFmOWYwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI2Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuMTguYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNsdXR0ZXItZ3N0LTMuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY2x1dHRlci1nc3QvY2x1dHRlci1nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI0O21kNT05NWJhYWNiYTE5NGU4MTRjMTEwZWEzYmRmMjVkZGJmNCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiM2U0ZjY0NDc3ZjI2ZDljZmQyZGIwNmQzYWFlZDIwM2EiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwYWVjMGQwYzYwMjBjZDE5YTViYjBkYWIxMTY1YTkyNzQ4ZjgxYTlhM2FjZGZhYmIwZjk2NmQ1ZjUzYmM4MDkzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMjU3YmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotcmVxdWlyZSBjbHV0dGVyLWd0ay0xLjAuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI3OWRjM2Q3YTg2NDVmODdkODNhOWNjY2E4YTA4YWE4ZSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjk0NDBhNjg2MDBmNThkMDBmZTBhZjM1MzgzNzM4OTQzZThlYWQ5OTA3ZjRjZjUwN2ExMDJkOTY4MjI0MzRhMjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wXzEuOC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzUzNjVjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjguMC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgY2x1dHRlci1ndGstMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMzUxY2Y5MjI5Y2Y5NDFkMzZiNDQxZWRlMjIzNmQ3NDIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI3NDJlZjlkNjhlY2UzNmNiYjFiMmUxYTRhNmZiZGFkOTMyZjY2NDUzNjBiZTdlNmRlNzVhYmJiMTQwZGZiZjFkIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKaW5kZXggNjkwZWEzYi4uN2E3OWFhNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jCkBAIC03MywzICs3Myw1IEBACiBSUFJPVklERVNfbGliY29nbCA9ICJjb2dsLTEuMCIKIFJDT05GTElDVFNfbGliY29nbCA9ICJjb2dsLTEuMCIKIFJSRVBMQUNFU19saWJjb2dsID0gImNvZ2wtMS4wIgorCitDT01QQVRJQkxFX0hPU1RfYXJtdjQgPSAnbnVsbCcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXMvY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MTdlYTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1Gcm9tIDg4MDc3ZWQxNTZhNzE0ZjMyYmI0MDhmNDIyMjc4ZDYxNjExZmZkNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgotRGF0ZTogU2F0LCAyNiBKdWwgMjAxNCAxNjo1Nzo0NiAtMDMwMAotU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuaW46IEZpeCBzdHJpbmcgYXJndW1lbnQgc3ludGF4Ci0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi0KLVNpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+Ci0tLS0KLSBjb25maWd1cmUuaW4gfCAgICAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KLWluZGV4IGJmZTFiODIuLmU5MzliYmQgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuaW4KLSsrKyBiL2NvbmZpZ3VyZS5pbgotQEAgLTY1LDcgKzY1LDcgQEAgZmkpCi0gCi0gRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTj0xLjQuMTQKLSAKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhESVJFQ1RGQiwgZGlyZWN0ZmIgPj0gJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04sWyBXQVRFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT13YXRlciBkaXJlY3RmYmAgXSwKLStQS0dfQ0hFQ0tfTU9EVUxFUyhbRElSRUNURkJdLCBkaXJlY3RmYiA+PSAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTixbIFdBVEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXdhdGVyIGRpcmVjdGZiYCBdLAotIAlBQ19NU0dfRVJST1IoWyRESVJFQ1RGQl9QS0dfRVJST1JTCi0gKioqIERpcmVjdEZCICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OIG9yIG5ld2VyIGlzIHJlcXVpcmVkLiBUaGUgbGF0ZXN0IHZlcnNpb24KLSAqKiogb2YgRGlyZWN0RkIgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5kaXJlY3RmYi5vcmcvLl0pKQotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlc18xLjcuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkwN2M1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotU1VNTUFSWSA9ICJFeGFtcGxlIERpcmVjdEZCIGFwcGxpY2F0aW9ucyIKLURFU0NSSVBUSU9OID0gIlRoZSBEaXJlY3RGQi1leGFtcGxlcyBwYWNrYWdlIGNvbnRhaW5zIGEgc2V0IG9mIHNpbXBsZSBEaXJlY3RGQiBcCi0gICAgICBhcHBsaWNhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGFuZCBkZW1vbnN0cmF0ZSB2YXJpb3VzIERpcmVjdEZCIFwKLSAgICAgIGZlYXR1cmVzIgotREVQRU5EUyA9ICJkaXJlY3RmYiIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiTUlUIgotCi1TUkNfVVJJID0gIiBcCi0gICAgICAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9EaXJlY3RGQi1leGFtcGxlcy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoIFwKLSAgICAgICAgICAiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVjZjZmZDJiMTk5MTVhZmM0ZGE1NjA0MzkyNmNhMThmIgotCi1TID0gIiR7V09SS0RJUn0vRGlyZWN0RkItZXhhbXBsZXMtJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1TUkNfVVJJW21kNXN1bV0gPSAiOGI2MGM4NjdhZjI5NTQ4MWMzMmE4YzdmYzU4MDIzMDciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWEyMTA0Y2M0ZGE4MTIzYzgzNzE4MTM1NTFiNjZiOTQzMTk4OTc5Zjc0NWNiZWJjMDM0YmI1ZTEwODQ0MTIyYSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YjdjYmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1TVU1NQVJZID0gIkdyYXBoaWNzIGFic3RyYWN0aW9uIGxpYnJhcnkgZm9yIHRoZSBMaW51eCBGcmFtZWJ1ZmZlciBEZXZpY2UiCi1ERVNDUklQVElPTiA9ICJEaXJlY3RGQiBpcyBhIHRoaW4gbGlicmFyeSB0aGF0IHByb3ZpZGVzIGRldmVsb3BlcnMgXAotd2l0aCBoYXJkd2FyZSBncmFwaGljcyBhY2NlbGVyYXRpb24sIGlucHV0IGRldmljZSBoYW5kbGluZyBhbmQgXAotYWJzdHJhY3Rpb24sIGFuIGludGVncmF0ZWQgd2luZG93aW5nIHN5c3RlbSB3aXRoIHN1cHBvcnQgZm9yIFwKLXRyYW5zbHVjZW50IHdpbmRvd3MgYW5kIG11bHRpcGxlIGRpc3BsYXkgbGF5ZXJzIG9uIHRvcCBvZiB0aGUgXAotTGludXggZnJhbWVidWZmZXIgZGV2aWNlLiIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kY2YzYzgyNTY1OWU4MjUzOTY0NWRhNDFhNzkwODU4OSIKLQotSE9NRVBBR0UgPSAiaHR0cDovL2RpcmVjdGZiLm9yZyIKLURFUEVORFMgPSAianBlZyBsaWJwbmcgZnJlZXR5cGUgemxpYiB0c2xpYiBzeXNmc3V0aWxzIgotCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9EaXJlY3RGQi0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlZml4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2Z1c2lvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9iYXNoaXNtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NvbXBhcl9mbl90LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VuaW9uLXNpZ3ZhbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly91c2UtUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUucGF0Y2ggXAotICAgICAgICAgICIKLQotUyA9ICIke1dPUktESVJ9L0RpcmVjdEZCLSR7UFZ9IgotCi1MREZMQUdTX2FwcGVuZCA9IiAtbHRzIC1sbSIKLQotIyBXb3JrYXJvdW5kIGZvciBsaW5raW5nIGlzc3VlcyBzZWVuIHdpdGggYXJtdjdhICsgZ29sZAotTERGTEFHU19hcHBlbmRfYXJtID0gIiR7QGJhc2VfY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJyAtZnVzZS1sZD1iZmQgJywgJycsIGQpfSIKLQotQklOQ09ORklHID0gIiR7YmluZGlyfS9kaXJlY3RmYi1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbanBlZzIwMDBdID0gIi0tZW5hYmxlLWpwZWcyMDAwLC0tZGlzYWJsZS1qcGVnMjAwMCxqYXNwZXIiCi1QQUNLQUdFQ09ORklHW2RybWttc10gPSAiLS1lbmFibGUtZHJta21zLC0tZGlzYWJsZS1kcm1rbXMsbGliZHJtIgotUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLWVuYWJsZS10aWZmLC0tZGlzYWJsZS10aWZmLHRpZmYiCi1QQUNLQUdFQ09ORklHW3dlYnBdID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKLQotRVhUUkFfT0VDT05GID0gIlwKLSAgLS13aXRoLWdmeGRyaXZlcnM9bm9uZSBcCi0gIC0tZW5hYmxlLWZyZWV0eXBlPXllcyBcCi0gIC0tZW5hYmxlLXpsaWIgXAotICAtLWRpc2FibGUtaW1saWIyIFwKLSAgLS1kaXNhYmxlLW1lc2EgXAotICAtLWRpc2FibGUtc2RsIFwKLSAgLS1kaXNhYmxlLXZuYyBcCi0gIC0tZGlzYWJsZS14MTEgXAotIgotCi0jT25jZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBvcHRpb24gb2YgZ2NjIGlzIGFkZGVkIGludG8gVEFSR0VUX0NMRkFHUyBhcyBkZWZhdWx0Ci0jdGhpcyB3aWxsIGNhdXNlIGRpcmVjdGZiIGJ1aWxkIGZhaWx1cmUgb24geDg2IGFyY2gsIHNvIGZpbHRlciBvdXQgaXQuCi1UQVJHRVRfQ0ZMQUdTX3JlbW92ZV94ODYgPSAiLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiCi0KLSNQQUNLQUdFU19EWU5BTUlDICs9ICJeZGlyZWN0ZmItaW5wdXRkcml2ZXJzLS4qIgotIwotI3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKLSMgICAgaW5wdXRkcml2ZXJzX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzJykKLSMgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgaW5wdXRkcml2ZXJzX2xpYmRpciwgJyouc28kJywgJ2RpcmVjdGZiLWlucHV0ZHJpdmVycy0lcycsICdEaXJlY3RmYiBwbHVnaW4gZm9yICVzJykKLSN9Ci0KLSMgTk9URTogbW9ub2xpdGhpYyBwYWNrYWdpbmcgZm9yIG5vdywgc2hvdWxkIGltcHJvdmUgdGhhdCBldmVudHVhbGx5Ci0KLUZJTEVTXyR7UE59LWRldiArPSAiXAotICAke2JpbmRpcn0vZGlyZWN0ZmItY29uZmlnIFwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3N5c3RlbXMvKi5sYSBcCi0gICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMvKi5sYSBcCi0gICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnRlcmZhY2VzLyovKi5sYSBcCi0gICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS93bS8qLmxhIFwKLSIKLQotRklMRVNfJHtQTn0gKz0gIlwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3N5c3RlbXMvKi5zbyBcCi0gICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMvKi5zbyBcCi0gICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnRlcmZhY2VzLyovKi5zbyBcCi0gICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS93bS8qLnNvIFwKLSAgJHtkYXRhZGlyfS9kaXJlY3RmYi0ke1BWfSBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZlMGY3NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotRnJvbSBmNDNlZjQ0ODA2ZmZiOGUzYjM1ZDk5MDcwZGRlOWI2Y2MxNzE0ZDNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgOCBTZXAgMjAxNSAyMTozMjoyMCArMDAwMAotU3ViamVjdDogW1BBVENIXSBnZngsZGlyZWN0OiBBYm9pZCB1c25nIFZMQXMgYW5kIHByaW50ZiBmb3JtYXRzCi0KLVZMQXMgYXJlIGZsYWdnZWQgYnkgY2xhbmcgd2hlbiB1c2luZyBub24tUE9EIHR5cGVzLCB0aGVyZWZvcmUgcmVwbGFjZQotdGhlIHVzYWdlIHdpdGggYWxsb2NhIHdoaWNoIGlzIGV4YWN0IHNhbWUgYWxsb2NhdGlvbiBvbiBzdGFjawotCi0gX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXykpKSBpcyBub3QgcG9ydGFibGUgYXMgdXNlZCBoZXJlCi0gdGhlcmVmb3JlIGRpc2FibGUgdGhlIGNoZWNrIGZvciBjbGFuZyBoZXJlLCB3ZSBsb3NlIG5vIGZ1bmN0aW9uYWxpdHkKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSBsaWIvZGlyZWN0L3V0aWwuaCB8IDIgKy0KLSBzcmMvZ2Z4L3V0aWwuY3BwICB8IDggKysrKy0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYi9kaXJlY3QvdXRpbC5oIGIvbGliL2RpcmVjdC91dGlsLmgKLWluZGV4IDcyOTQxZTkuLjhlN2ZhNGEgMTAwNjQ0Ci0tLS0gYS9saWIvZGlyZWN0L3V0aWwuaAotKysrIGIvbGliL2RpcmVjdC91dGlsLmgKLUBAIC05OCw3ICs5OCw3IEBACi0gI2RlZmluZSBEX0NPTlNUX0ZVTkMKLSAjZW5kaWYKLSAKLS0jaWYgX19HTlVDX18gPj0gMwotKyNpZiBfX0dOVUNfXyA+PSAzICYmICFkZWZpbmVkIF9fY2xhbmdfXwotICNkZWZpbmUgRF9GT1JNQVRfUFJJTlRGKG4pICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgbiwgbisxKSkpCi0gI2RlZmluZSBEX0ZPUk1BVF9WUFJJTlRGKG4pICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBuLCAwKSkpCi0gI2Vsc2UKLWRpZmYgLS1naXQgYS9zcmMvZ2Z4L3V0aWwuY3BwIGIvc3JjL2dmeC91dGlsLmNwcAotaW5kZXggNDAwMzJiYy4uZDEwMTVkNCAxMDA2NDQKLS0tLSBhL3NyYy9nZngvdXRpbC5jcHAKLSsrKyBiL3NyYy9nZngvdXRpbC5jcHAKLUBAIC0yOTQsOCArMjk0LDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfc3RlcmVvKCBDb3JlU3VyZmFjZSAgICAgICAgICAgKnNvdXJjZSwKLSB7Ci0gICAgICB1bnNpZ25lZCBpbnQgaSwgbiA9IDA7Ci0gICAgICBERkJSZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgc291cmNlLT5jb25maWcuc2l6ZS53LCBzb3VyY2UtPmNvbmZpZy5zaXplLmggfTsKLS0gICAgIERGQlJlY3RhbmdsZSByZWN0c1tudW1dOwotLSAgICAgREZCUG9pbnQgICAgIHBvaW50c1tudW1dOwotKyAgICAgREZCUmVjdGFuZ2xlICpyZWN0cyA9ICAoREZCUmVjdGFuZ2xlKilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUmVjdGFuZ2xlKSAqIG51bSk7Ci0rICAgICBERkJQb2ludCAqcG9pbnRzID0gIChERkJQb2ludCopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlBvaW50KSAqIG51bSk7Ci0gCi0gICAgICBmb3IgKGk9MDsgaTxudW07IGkrKykgewotICAgICAgICAgICBERkJfUkVHSU9OX0FTU0VSVCggJnJlZ2lvbnNbaV0gKTsKLUBAIC0zNTEsOCArMzUxLDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfY2xpZW50KCBDb3JlU3VyZmFjZSAgICAgICAgICAgICAqc291cmNlLAotIHsKLSAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICBpLCBuID0gMDsKLSAgICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICByZWN0ID0geyAwLCAwLCBzb3VyY2UtPmNvbmZpZy5zaXplLncsIHNvdXJjZS0+Y29uZmlnLnNpemUuaCB9OwotLSAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgIHJlY3RzW251bV07Ci0tICAgICBERkJQb2ludCAgICAgICAgICAgICAgICAgcG9pbnRzW251bV07Ci0rICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAqcmVjdHMgPSAgKERGQlJlY3RhbmdsZSopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlJlY3RhbmdsZSkgKiBudW0pOwotKyAgICAgREZCUG9pbnQgICAgICAgICAgICAgICAgKnBvaW50cyA9ICAoREZCUG9pbnQqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJQb2ludCkgKiBudW0pOwotICAgICAgQ29yZUdyYXBoaWNzU3RhdGVDbGllbnQgKmNsaWVudCA9IF9jbGllbnQgPyBfY2xpZW50IDogJlN0YXRlQ2xpZW50OjpHZXQoKS0+Y2xpZW50OwotICAgICAgQ2FyZFN0YXRlICAgICAgICAgICAgICAgKnN0YXRlICA9IGNsaWVudC0+c3RhdGU7Ci0gICAgICBDYXJkU3RhdGUgICAgICAgICAgICAgICAgYmFja3VwOwotLS0gCi0yLjUuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjRlOTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9iYXNoaXNtLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotJHt4Ly95L30gaXMgYSBiYXNoIHN5bnRheC4gUmVwbGFjZSB3aXRoIHNvbWV0aGluZyBkYXNoIGNvbXBhdGlibGUKLQotUlAgMjAxNS81LzMKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogRGlyZWN0RkItMS43LjcvY29uZmlndXJlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gRGlyZWN0RkItMS43Ljcub3JpZy9jb25maWd1cmUuaW4KLSsrKyBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KLUBAIC0yNjk2LDcgKzI2OTYsNyBAQCBBTV9DT05ESVRJT05BTChCVUlMRF9UT09MUywgdGVzdCAiJHdpdGhfCi0gQU1fQ09ORElUSU9OQUwoQ1JPU1NfQ09NUElMSU5HLCB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9ICJ5ZXMiKQotIAotIENGTEFHUz0iJENGTEFHUyAkREZCX0lOVEVSTkFMX0NGTEFHUyIKLS1DWFhGTEFHUz0iJENYWEZMQUdTICR7Q0ZMQUdTLy8tV2Vycm9yLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uL30iCi0rQ1hYRkxBR1M9IiRDWFhGTEFHUyAkKHByaW50ZiAnJXNcbicgIiRDRkxBR1MiIHwgc2VkICdzLy1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24vL2cnKSIKLSBERkJfTERGTEFHUz0iJExERkxBR1MgJFpMSUJfTElCUyIKLSAKLSBDRkxBR1M9IiRDRkxBR1MgJENGTEFHU19TVEQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbXBhcl9mbl90LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb21wYXJfZm5fdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0ZDkwMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbXBhcl9mbl90LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotdGVzdCBmb3IgX19jb21wYXJfZm5fdCBhbmQgaWYgbm90IGRlZmluZWQgYnkgbGliYyB0aGVuIGRlZmluZSBpdAotaGVscCBtYWtlIGRpcmVjdGZiIGNvbXBpbGUgd2l0aCBtdXNsCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotSW5kZXg6IERpcmVjdEZCLTEuNy43L2NvbmZpZ3VyZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIERpcmVjdEZCLTEuNy43Lm9yaWcvY29uZmlndXJlLmluCi0rKysgRGlyZWN0RkItMS43LjcvY29uZmlndXJlLmluCi1AQCAtMTEyLDYgKzExMiwxNyBAQCBBQ19DSEVDS19TSVpFT0YobG9uZykKLSBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQotIEFDX0NIRUNLX0ZVTkNTKGZvcmspCi0gCi0rQUNfQ0FDSEVfQ0hFQ0soW2ZvciBjb21wYXJfZm5fdCBpbiBzdGRsaWIuaF0sY2NhY2hlX2N2X0NPTVBBUl9GTl9ULCBbCi0rICAgIEFDX1RSWV9DT01QSUxFKAotKyAgICAgICAgWyNpbmNsdWRlIDxzdGRsaWIuaD5dLAotKyAgICAgICAgW3ZvaWQgdGVzdF9mbih2b2lkKSB7IHFzb3J0KE5VTEwsIDAsIDAsIChfX2NvbXBhcl9mbl90KU5VTEwpOyB9XSwKLSsgICAgICAgIGNjYWNoZV9jdl9DT01QQVJfRk5fVD15ZXMsCi0rICAgICAgICBjY2FjaGVfY3ZfQ09NUEFSX0ZOX1Q9bm8pXSkKLStpZiB0ZXN0IHgiJGNjYWNoZV9jdl9DT01QQVJfRk5fVCIgPSB4InllcyI7IHRoZW4KLSsgICBBQ19ERUZJTkUoSEFWRV9DT01QQVJfRk5fVCwgMSwKLSsgICAgICAgICAgICAgRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2NvbXBhcl9mbl90JyB0eXBlZGVmLikKLStmaQotKwotIEFDX1BBVEhfUFJPR1MoUEVSTCwgcGVybDUgcGVybCkKLSAKLSBBQ19QQVRIX1BST0coTUFOMkhUTUwsIG1hbjJodG1sLCBubykKLUluZGV4OiBEaXJlY3RGQi0xLjcuNy9pbnB1dGRyaXZlcnMvbGlyYy9saXJjLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBEaXJlY3RGQi0xLjcuNy5vcmlnL2lucHV0ZHJpdmVycy9saXJjL2xpcmMuYwotKysrIERpcmVjdEZCLTEuNy43L2lucHV0ZHJpdmVycy9saXJjL2xpcmMuYwotQEAgLTU5LDYgKzU5LDExIEBACi0gCi0gI2luY2x1ZGUgPGNvcmUvaW5wdXRfZHJpdmVyLmg+Ci0gCi0rI2lmIEhBVkVfQ09NUEFSX0ZOX1QKLSsjZGVmaW5lIENPTVBBUl9GTl9UIF9fY29tcGFyX2ZuX3QKLSsjZWxzZQotK3R5cGVkZWYgaW50ICgqQ09NUEFSX0ZOX1QpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKLSsjZW5kaWYKLSAKLSBERkJfSU5QVVRfRFJJVkVSKCBsaXJjICkKLSAKLUBAIC05Nyw3ICsxMDIsNyBAQCBzdGF0aWMgREZCSW5wdXREZXZpY2VLZXlTeW1ib2wgbGlyY19wYXJzCi0gICAgICAgICAgIHFzb3J0ICgga2V5bmFtZXMsCi0gICAgICAgICAgICAgICAgICAgRF9BUlJBWV9TSVpFKCBrZXluYW1lcyApLAotICAgICAgICAgICAgICAgICAgIHNpemVvZihrZXluYW1lc1swXSksCi0tICAgICAgICAgICAgICAgICAgKF9fY29tcGFyX2ZuX3QpIGtleW5hbWVzX3NvcnRfY29tcGFyZSApOwotKyAgICAgICAgICAgICAgICAgIChDT01QQVJfRk5fVCkga2V5bmFtZXNfc29ydF9jb21wYXJlICk7Ci0gICAgICAgICAgIGtleW5hbWVzX3NvcnRlZCA9IHRydWU7Ci0gICAgICB9Ci0gCi1AQCAtMTI0LDcgKzEyOSw3IEBAIHN0YXRpYyBERkJJbnB1dERldmljZUtleVN5bWJvbCBsaXJjX3BhcnMKLSAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZSA9IGJzZWFyY2goIG5hbWUsIGtleW5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRF9BUlJBWV9TSVpFKCBrZXluYW1lcyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtleW5hbWVzWzBdKSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2NvbXBhcl9mbl90KSBrZXluYW1lc19jb21wYXJlICk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ09NUEFSX0ZOX1QpIGtleW5hbWVzX2NvbXBhcmUgKTsKLSAgICAgICAgICAgICAgICBpZiAoc3ltYm9sX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sX25hbWUtPnN5bWJvbDsKLSAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29uZmlndXJlZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkOGMwMTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1MaWJ0b29sIG5lZWRzIHRoZXNlIHNldCBjb3JyZWN0bHkgZWxzZSB3ZSBlbmQgdXAgd2l0aCBwb2ludGxlc3MgcnBhdGhzCi1zdWNoIGFzIHRoZSBRQSB3YXJuaW5nczoKLQotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZibGF5ZXIgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZibWFzdGVyIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL21rZGdpZmZ0IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmR1bXAgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5wdXQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZnggY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZic2NyZWVuIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL21rZGdpZmYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5zcGVjdG9yIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZmlmZiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmluZm8gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJwZW5tb3VudCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmcgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJmdXNpb24tMS40LnNvLjYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJkaXJlY3RmYi0xLjQuc28uNi4wLjkgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJkaXJlY3RmYi0xLjQuc28uNiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmZ1c2lvbi0xLjQuc28uNi4wLjkgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2ZiZGV2LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvc3lzdGVtcy9saWJkaXJlY3RmYl9kZXZtZW0uc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2R1bW15LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJWaWRlb1Byb3ZpZGVyL2xpYmlkaXJlY3RmYnZpZGVvcHJvdmlkZXJfdjRsLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJWaWRlb1Byb3ZpZGVyL2xpYmlkaXJlY3RmYnZpZGVvcHJvdmlkZXJfZ2lmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JQ29yZVJlc291cmNlTWFuYWdlci9saWJpY29yZXJlc291cmNlbWFuYWdlcl90ZXN0LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfanBlZy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX3BuZy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX2RmaWZmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfZ2lmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJGb250L2xpYmlkaXJlY3RmYmZvbnRfZnQyLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJGb250L2xpYmlkaXJlY3RmYmZvbnRfZGdpZmYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi93bS9saWJkaXJlY3RmYndtX2RlZmF1bHQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfenl0cm9uaWMuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfcGVubW91bnQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbGludXhfaW5wdXQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfc2VyaWFsbW91c2Uuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbXV0b3VjaC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl90c2xpYi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9qb3lzdGljay5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9zb255cGkuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbGlyYy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl93bTk3eHhfdHMuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfcHMybW91c2Uuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfa2V5Ym9hcmQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1SUCAyMDEyLzAzLzE2Ci0KLUluZGV4OiBEaXJlY3RGQi0xLjQuMTUvY29uZmlndXJlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gRGlyZWN0RkItMS40LjE1Lm9yaWcvY29uZmlndXJlLmluCTIwMTItMDMtMTYgMTM6MzI6MjMuNjkyNDAyODc5ICswMDAwCi0rKysgRGlyZWN0RkItMS40LjE1L2NvbmZpZ3VyZS5pbgkyMDEyLTAzLTE2IDEzOjMzOjIyLjMxMjQwMDk2MCArMDAwMAotQEAgLTk3LDEzICs5Nyw2IEBACi0gQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKLSBBQ19DSEVDS19GVU5DUyhmb3JrKQotIAotLQotLSMjIFdvcmsgYXJvdW5kIGxpYnN0dWhsIGR1cmluZyBjcm9zcyBidWlsZC4uLgotLWlmIHRlc3QgIiRob3N0IiAhPSAiJGJ1aWxkIjsgdGhlbgotLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiIKLS0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iIgotLWZpCi0tCi0gQUNfUEFUSF9QUk9HUyhQRVJMLCBwZXJsNSBwZXJsKQotIAotIEFDX1BBVEhfUFJPRyhNQU4ySFRNTCwgbWFuMmh0bWwsIG5vKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY4MWE2Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLWRpcmVjdGZiOiBGaXggZm9yIGhhbmdzIGluIGRpcmVjdF90ZXN0LCBmdXNpb25fc2tpcm1pc2ggb24gZXhpdAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IExhdXJlbiBQb3N0IDxsYXVyZW4ucG9zdEBmcmVlc2NhbGUuY29tPgotCi0tLS0gYS9saWIvZnVzaW9uL2Z1c2lvbi5jCTIwMTMtMDEtMTggMjI6NTc6MTEuMDAwMDAwMDAwICswODAwCi0rKysgYi9saWIvZnVzaW9uL2Z1c2lvbi5jCTIwMTMtMDctMDQgMTA6NDI6NTYuNTAyNjk5MTE5ICswODAwCi1AQCAtMjg1Myw5ICsyODUzLDE0IEBACi0gICAgICAgICAgIGRpcmVjdF9tdXRleF9sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKLSAKLSAgICAgICAgICAgd2hpbGUgKDEpIHsKLS0gICAgICAgICAgICAgICBpZiAoIXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnMpCi0rICAgICAgICAgICAgICAgaWYgKCF3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzKXsKLSAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF93YWl0cXVldWVfd2FpdCggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2NvbmQsICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOwotLQotKyAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmxkLT5kaXNwYXRjaF9zdG9wKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIERfREVCVUdfQVQoIEZ1c2lvbl9NYWluX0Rpc3BhdGNoLCAiICAtPiBJR05PUklORyAoZGlzcGF0Y2hfc3RvcCEpXG4iICk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF9tdXRleF91bmxvY2soICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOwotKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnVmID0gKEZ1c2lvbkV2ZW50RGlzcGF0Y2hlckJ1ZmZlciAqKXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnM7Ci0gICAgICAgICAgICAgICAgRF9NQUdJQ19BU1NFUlQoIGJ1ZiwgRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICk7Ci0gCi1AQCAtMjg3Miw2ICsyODc3LDExIEBACi0gLy9EX0lORk8oIndhaXRpbmcuLi5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgRF9BU1NFUlQoIGJ1Zi0+cmVhZF9wb3MgPT0gYnVmLT53cml0ZV9wb3MgKTsKLSAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF93YWl0cXVldWVfd2FpdCggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2NvbmQsICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOwotKwkJICAgICAgaWYgKHdvcmxkLT5kaXNwYXRjaF9zdG9wKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIERfREVCVUdfQVQoIEZ1c2lvbl9NYWluX0Rpc3BhdGNoLCAiICAtPiBJR05PUklORyAoZGlzcGF0Y2hfc3RvcCEpXG4iICk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF9tdXRleF91bmxvY2soICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOwotKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAgICAgYnVmID0gKEZ1c2lvbkV2ZW50RGlzcGF0Y2hlckJ1ZmZlciAqKXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnM7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL3VuaW9uLXNpZ3ZhbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvdW5pb24tc2lndmFsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWY0NWM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvdW5pb24tc2lndmFsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tIGdlbnRvbyBtdXNsIG92ZXJsYXkKLXNpZ3ZhbF90IGlzIGdsaWJjIG9ubHkgY29uc3RydWN0LCB3ZSB1c2UgYSB1bmlvbiBvZiBzaWd2YWwKLXdoaWNoIHByZXR0eSBtdWNoIGlzIHNhbWUgZWZmZWN0IGFzIHNpZ3ZhbF90Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotZGlmZiAtTmF1ciBEaXJlY3RGQi0xLjcuNi5vcmlnL2xpYi9kaXJlY3Qvb3MvbGludXgvZ2xpYmMvc3lzdGVtLmMgRGlyZWN0RkItMS43LjYvbGliL2RpcmVjdC9vcy9saW51eC9nbGliYy9zeXN0ZW0uYwotLS0tIERpcmVjdEZCLTEuNy42Lm9yaWcvbGliL2RpcmVjdC9vcy9saW51eC9nbGliYy9zeXN0ZW0uYwkyMDE0LTA3LTE1IDAyOjU0OjU4LjAwMDAwMDAwMCAtMDQwMAotKysrIERpcmVjdEZCLTEuNy42L2xpYi9kaXJlY3Qvb3MvbGludXgvZ2xpYmMvc3lzdGVtLmMJMjAxNS0wNy0xOCAxNjo1NTozNS4wNzc5ODkxNjYgLTA0MDAKLUBAIC0xMTEsNyArMTExLDcgQEAKLSB2b2lkCi0gZGlyZWN0X3RyYXAoIGNvbnN0IGNoYXIgKmRvbWFpbiwgaW50IHNpZyApCi0gewotLSAgICAgc2lndmFsX3QgdmFsOwotKyAgICAgdW5pb24gc2lndmFsIHZhbDsKLSAKLSAgICAgIGlmIChkaXJlY3RfY29uZmlnLT5kZWxheV90cmFwX21zKSB7Ci0gICAgICAgICAgIERfTE9HKCBEaXJlY3RfVHJhcCwgVkVSQk9TRSwgIk5PVCBSQUlTSU5HIHNpZ25hbCAlZCBmcm9tICVzLCB3YWl0aW5nIGZvciAlZG1zLi4uIGF0dGFjaCBnZGIgLS1waWQ9JWRcbiIsIHNpZywgZG9tYWluLCBkaXJlY3RfY29uZmlnLT5kZWxheV90cmFwX21zLCBnZXRwaWQoKSApOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi91c2UtUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL3VzZS1QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0OGY2OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL3VzZS1QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi1SZW1vdmUgdXNlIG9mIERJUkVDVF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIgaXRzIG5vdCBwb3J0YWJsZQotdXNlIHBvcnRhYmxlIHdheSB0byBpbml0aWFsaXplIHJlY3Vyc2l2ZSBtdXRleCB1c2luZyBwdGhyZWFkX29uY2UoKSBhbmQgZGlyZWN0X3JlY3Vyc2l2ZV9tdXRleF9pbml0KCkKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotSW5kZXg6IERpcmVjdEZCLTEuNy43L2xpYi9kaXJlY3Qvb3MvbGludXgvZ2xpYmMvbXV0ZXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIERpcmVjdEZCLTEuNy43Lm9yaWcvbGliL2RpcmVjdC9vcy9saW51eC9nbGliYy9tdXRleC5oCi0rKysgRGlyZWN0RkItMS43LjcvbGliL2RpcmVjdC9vcy9saW51eC9nbGliYy9tdXRleC5oCi1AQCAtNDYsNyArNDYsNiBAQCBzdHJ1Y3QgX19EX0RpcmVjdE11dGV4IHsKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAKLSAjZGVmaW5lIERJUkVDVF9NVVRFWF9JTklUSUFMSVpFUihuYW1lKSAgICAgICAgICAgIHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiB9Ci0tI2RlZmluZSBESVJFQ1RfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpICB7IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QIH0KLSAKLSAjZW5kaWYKLSAKLUluZGV4OiBEaXJlY3RGQi0xLjcuNy9saWIvZGlyZWN0L3RyYWNlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBEaXJlY3RGQi0xLjcuNy5vcmlnL2xpYi9kaXJlY3QvdHJhY2UuYwotKysrIERpcmVjdEZCLTEuNy43L2xpYi9kaXJlY3QvdHJhY2UuYwotQEAgLTg5LDggKzg5LDE1IEBAIHN0cnVjdCBfX0RfRGlyZWN0VHJhY2VCdWZmZXIgewotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAKLSBzdGF0aWMgRGlyZWN0TGluayAgKmJ1ZmZlcnM7Ci0tc3RhdGljIERpcmVjdE11dGV4ICBidWZmZXJzX2xvY2sgPSBESVJFQ1RfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSKGJ1ZmZlcnNfbG9jayk7Ci0gCi0rc3RhdGljIHB0aHJlYWRfb25jZV90IGJ1ZmZlcnNfbG9ja19pbml0X29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKLStzdGF0aWMgRGlyZWN0TXV0ZXggYnVmZmVyc19sb2NrOwotKwotK3N0YXRpYyB2b2lkCi0rYnVmZmVyc19sb2NrX2luaXQoIHZvaWQgKQotK3sKLSsgICAgIGRpcmVjdF9yZWN1cnNpdmVfbXV0ZXhfaW5pdCgmYnVmZmVyc19sb2NrKTsKLSt9Ci0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIAotIF9fZGZiX25vX2luc3RydW1lbnRfZnVuY3Rpb25fXwotQEAgLTExMyw2ICsxMjAsNyBAQCBnZXRfdHJhY2VfYnVmZmVyKCB2b2lkICkKLSAKLSAgICAgICAgICAgRF9NQUdJQ19TRVQoIGJ1ZmZlciwgRGlyZWN0VHJhY2VCdWZmZXIgKTsKLSAKLSsgICAgICAgICAgcHRocmVhZF9vbmNlKCZidWZmZXJzX2xvY2tfaW5pdF9vbmNlLCBidWZmZXJzX2xvY2tfaW5pdCk7Ci0gICAgICAgICAgIGRpcmVjdF9tdXRleF9sb2NrKCAmYnVmZmVyc19sb2NrICk7Ci0gICAgICAgICAgIGRpcmVjdF9saXN0X2FwcGVuZCggJmJ1ZmZlcnMsICZidWZmZXItPmxpbmsgKTsKLSAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJmJ1ZmZlcnNfbG9jayApOwotQEAgLTEzOCw4ICsxNDYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgewotIH0gU3ltYm9sVGFibGU7Ci0gCi0gc3RhdGljIERpcmVjdExpbmsgICp0YWJsZXMgICAgICA9IE5VTEw7Ci0tc3RhdGljIERpcmVjdE11dGV4ICB0YWJsZXNfbG9jayA9IERJUkVDVF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIodGFibGVzX2xvY2spOwotK3N0YXRpYyBwdGhyZWFkX29uY2VfdCB0YWJsZXNfbG9ja19pbml0X29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKLStzdGF0aWMgRGlyZWN0TXV0ZXggdGFibGVzX2xvY2s7Ci0gCi0rc3RhdGljIHZvaWQKLSt0YWJsZXNfbG9ja19pbml0KCB2b2lkICkKLSt7Ci0rICAgICBkaXJlY3RfcmVjdXJzaXZlX211dGV4X2luaXQoJnRhYmxlc3NfbG9jayk7Ci0rfQotIAotIF9fZGZiX25vX2luc3RydW1lbnRfZnVuY3Rpb25fXwotIHN0YXRpYyB2b2lkCi1AQCAtMzcwLDYgKzM4NCw3IEBAIGRpcmVjdF90cmFjZV9sb29rdXBfc3ltYm9sKCBjb25zdCBjaGFyICoKLSAgICAgIFN5bWJvbCAgICAgICpzeW1ib2w7Ci0gICAgICBTeW1ib2xUYWJsZSAqdGFibGU7Ci0gCi0rICAgICBwdGhyZWFkX29uY2UoJnRhYmxlc19sb2NrX2luaXRfb25jZSwgdGFibGVzX2xvY2tfaW5pdCk7Ci0gICAgICBkaXJlY3RfbXV0ZXhfbG9jayggJnRhYmxlc19sb2NrICk7Ci0gCi0gICAgICB0YWJsZSA9IGZpbmRfdGFibGUoIGZpbGVuYW1lICk7Ci1AQCAtNTE0LDYgKzUyOSw3IEBAIGRpcmVjdF90cmFjZV9wcmludF9zdGFja3MoKQotICAgICAgRGlyZWN0VHJhY2VCdWZmZXIgKmI7Ci0gICAgICBEaXJlY3RUcmFjZUJ1ZmZlciAqYnVmZmVyID0gZ2V0X3RyYWNlX2J1ZmZlcigpOwotIAotKyAgICAgcHRocmVhZF9vbmNlKCZidWZmZXJzX2xvY2tfaW5pdF9vbmNlLCBidWZmZXJzX2xvY2tfaW5pdCk7Ci0gICAgICBkaXJlY3RfbXV0ZXhfbG9jayggJmJ1ZmZlcnNfbG9jayApOwotIAotICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmxldmVsKQotQEAgLTYxMSw2ICs2MjcsNyBAQCBkaXJlY3RfdHJhY2VfZnJlZV9idWZmZXIoIERpcmVjdFRyYWNlQnVmCi0gICAgICBEX01BR0lDX0FTU0VSVCggYnVmZmVyLCBEaXJlY3RUcmFjZUJ1ZmZlciApOwotIAotICAgICAgaWYgKGJ1ZmZlci0+dGhyZWFkKSB7Ci0rICAgICAgICAgIHB0aHJlYWRfb25jZSgmYnVmZmVyc19sb2NrX2luaXRfb25jZSwgYnVmZmVyc19sb2NrX2luaXQpOwotICAgICAgICAgICBkaXJlY3RfbXV0ZXhfbG9jayggJmJ1ZmZlcnNfbG9jayApOwotICAgICAgICAgICBkaXJlY3RfbGlzdF9yZW1vdmUoICZidWZmZXJzLCAmYnVmZmVyLT5saW5rICk7Ci0gICAgICAgICAgIGRpcmVjdF9tdXRleF91bmxvY2soICZidWZmZXJzX2xvY2sgKTsKLUluZGV4OiBEaXJlY3RGQi0xLjcuNy9zcmMvZGlyZWN0ZmIuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIERpcmVjdEZCLTEuNy43Lm9yaWcvc3JjL2RpcmVjdGZiLmMKLSsrKyBEaXJlY3RGQi0xLjcuNy9zcmMvZGlyZWN0ZmIuYwotQEAgLTk5LDYgKzk5LDE1IEBAIGNvbnN0IHVuc2lnbmVkIGludCBkaXJlY3RmYl9taWNyb192ZXJzaW8KLSBjb25zdCB1bnNpZ25lZCBpbnQgZGlyZWN0ZmJfYmluYXJ5X2FnZSAgICA9IERJUkVDVEZCX0JJTkFSWV9BR0U7Ci0gY29uc3QgdW5zaWduZWQgaW50IGRpcmVjdGZiX2ludGVyZmFjZV9hZ2UgPSBESVJFQ1RGQl9JTlRFUkZBQ0VfQUdFOwotIAotK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBsb2NrX2luaXRfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotK3N0YXRpYyBEaXJlY3RNdXRleCBsb2NrOwotKwotK3N0YXRpYyB2b2lkCi0rbG9ja19pbml0KCB2b2lkICkKLSt7Ci0rICAgICBkaXJlY3RfcmVjdXJzaXZlX211dGV4X2luaXQoJmxvY2spOwotK30KLSsKLSBjb25zdCBjaGFyICoKLSBEaXJlY3RGQkNoZWNrVmVyc2lvbiggdW5zaWduZWQgaW50IHJlcXVpcmVkX21ham9yLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfbWlub3IsCi1AQCAtMjE1LDggKzIyNCw3IEBAIERpcmVjdEZCQ3JlYXRlKCBJRGlyZWN0RkIgKippbnRlcmZhY2VfcHQKLSAgICAgIGlmIChkZmJfY29uZmlnLT5yZW1vdGUuaG9zdCkKLSAgICAgICAgICAgcmV0dXJuIENyZWF0ZVJlbW90ZSggZGZiX2NvbmZpZy0+cmVtb3RlLmhvc3QsIGRmYl9jb25maWctPnJlbW90ZS5wb3J0LCBpbnRlcmZhY2VfcHRyICk7Ci0gCi0tICAgICBzdGF0aWMgRGlyZWN0TXV0ZXggbG9jayA9IERJUkVDVF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIobG9jayk7Ci0tCi0rICAgICBwdGhyZWFkX29uY2UoJmxvY2tfaW5pdF9vbmNlLCBsb2NrX2luaXQpOwotICAgICAgZGlyZWN0X211dGV4X2xvY2soICZsb2NrICk7Ci0gCi0gICAgICBpZiAoIWRmYl9jb25maWctPm5vX3NpbmdsZXRvbiAmJiBpZGlyZWN0ZmJfc2luZ2xldG9uKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYl8xLjcuNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjMDcwZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1yZXF1aXJlIGRpcmVjdGZiLmluYwotCi1SViA9ICIxLjctNyIKLQotTEVBRF9TT05BTUUgPSAibGliZGlyZWN0ZmItMS43LnNvLjAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxNTJjZjE4NjNiMWEzYTI4YWExMzcwZTkwNTM0NDBiZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzg1YzYzOGRjMzFiOGZlM2E3YzgxYmUxNDc1Yzg5YjIyNTVhYjNkNjdiNzc3Yzc0N2QzZmJjNTJmODAyN2EzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtLzAwMDEtY29uZmlndXJlLmFjLUFsbG93LWV4cGxpY2l0LWVuYWJsaW5nLW9mLWN1bml0LXRlc3RzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtLzAwMDEtY29uZmlndXJlLmFjLUFsbG93LWV4cGxpY2l0LWVuYWJsaW5nLW9mLWN1bml0LXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTI2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vMDAwMS1jb25maWd1cmUuYWMtQWxsb3ctZXhwbGljaXQtZW5hYmxpbmctb2YtY3VuaXQtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSBlNmJkNDIwNWIwYjU0NmFmZTk5MWFlNmY3MjI1NjY0NWY0NDA0YWQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgNSBTZXAgMjAxNiAxNDo0MTozNyArMDMwMAorU3ViamVjdDogW1BBVENIIGxpYmRybV0gY29uZmlndXJlLmFjOiBBbGxvdyBleHBsaWNpdCBlbmFibGluZyBvZiBjdW5pdCB0ZXN0cworCitBZGQgLS13aXRoLWN1bml0IHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHJlcHJvZHVjaWJsZSBidWlsZHMuIERlZmF1bHQKK2lzIHN0aWxsIHRvIHByb2JlIGN1bml0IGFuZCBidWlsZCBvcHBvcnR1bmlzdGljYWxseS4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFttYWlsaW5nIGxpc3RdCistLS0KKyBjb25maWd1cmUuYWMgfCAxNCArKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlMzA0OGM3Li45MThkMjFkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMzcsNiArMTM3LDEyIEBAIEFDX0FSR19FTkFCTEUoaW5zdGFsbC10ZXN0LXByb2dyYW1zLAorIAkJICBbSW5zdGFsbCB0ZXN0IHByb2dyYW1zIChkZWZhdWx0OiBubyldKSwKKyAJCSAgW0lOU1RBTExfVEVTVFM9JGVuYWJsZXZhbF0sIFtJTlNUQUxMX1RFU1RTPW5vXSkKKyAKKytBQ19BUkdfV0lUSChbY3VuaXRdLAorKyAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWN1bml0XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0J1aWxkIHRlc3RzIHRoYXQgdXNlIGN1bml0IChkZWZhdWx0OiBhdXRvKV0pXSwKKysgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICBbd2l0aF9jdW5pdD1hdXRvXSkKKysKKyBkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgZG5sIGNoZWNrIGNvbXBpbGVyIGZsYWdzCisgQUNfREVGVU4oW0xJQkRSTV9DQ19UUllfRkxBR10sIFsKK0BAIC0zNzIsNyArMzc4LDcgQEAgaWYgdGVzdCAieCRSQURFT04iID0geHllczsgdGhlbgorIAlBQ19ERUZJTkUoSEFWRV9SQURFT04sIDEsIFtIYXZlIHJhZGVvbiBzdXBwb3J0XSkKKyBmaQorIAorLWlmIHRlc3QgIngkQU1ER1BVIiAhPSB4bm87IHRoZW4KKytpZiB0ZXN0ICJ4JHdpdGhfY3VuaXQiICE9IHhubyAtYSAieCRBTURHUFUiICE9IHhubzsgdGhlbgorIAkjIERldGVjdCBjdW5pdCBsaWJyYXJ5CisgCVBLR19DSEVDS19NT0RVTEVTKFtDVU5JVF0sIFtjdW5pdCA+PSAyLjFdLCBbaGF2ZV9jdW5pdD15ZXNdLCBbaGF2ZV9jdW5pdD1ub10pCisgCSMgSWYgcGtnLWNvbmZpZyBkb2VzIG5vdCBmaW5kIGN1bml0LCBjaGVjayBpdCB1c2luZyBBQ19DSEVDS19MSUIuICBXZQorQEAgLTM5OSw3ICs0MDYsMTEgQEAgaWYgdGVzdCAieCRBTURHUFUiID0geHllczsgdGhlbgorIAlBQ19ERUZJTkUoSEFWRV9DVU5JVCwgW3Rlc3QgIngkaGF2ZV9jdW5pdCIgIT0gInhubyJdLCBbRW5hYmxlIENVTklUIEhhdmUgYW1kZ3B1IHN1cHBvcnRdKQorIAorIAlpZiB0ZXN0ICJ4JGhhdmVfY3VuaXQiID0gInhubyI7IHRoZW4KKy0JCUFDX01TR19XQVJOKFtDb3VsZCBub3QgZmluZCBjdW5pdCBsaWJyYXJ5LiBEaXNhYmxpbmcgYW1kZ3B1IHRlc3RzXSkKKysJCWlmIHRlc3QgIngkd2l0aF9jdW5pdCIgPSAieHllcyI7IHRoZW4KKysJCQlBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGN1bml0IGxpYnJhcnkgYnV0IC0td2l0aC1jdW5pdCB3YXMgZ2l2ZW5dKQorKwkJZWxpZiB0ZXN0ICJ4JHdpdGhfY3VuaXQiID0gInhhdXRvIjsgdGhlbgorKwkJCUFDX01TR19XQVJOKFtDb3VsZCBub3QgZmluZCBjdW5pdCBsaWJyYXJ5LiBEaXNhYmxpbmcgYW1kZ3B1IHRlc3RzXSkKKysJCWZpCisgCWZpCisgZmkKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2ZpeF9PX0NMT0VYRUNfdW5kZWNsYXJlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9maXhfT19DTE9FWEVDX3VuZGVjbGFyZWQucGF0Y2gKaW5kZXggMjg2ZTU0OC4uNDcwOGJmMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2ZpeF9PX0NMT0VYRUNfdW5kZWNsYXJlZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vZml4X09fQ0xPRVhFQ191bmRlY2xhcmVkLnBhdGNoCkBAIC0xOSw2ICsxOSw2IEBACiAgICovCiAgCiArI2luY2x1ZGUgPGNvbmZpZy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgogICNpbmNsdWRlIDxzdGRpby5oPgogICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjY3LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGQ2OTdmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1TVU1NQVJZID0gIlVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCBEUk0gc2VydmljZXMiCi1ERVNDUklQVElPTiA9ICJUaGUgcnVudGltZSBsaWJyYXJ5IGZvciBhY2Nlc3NpbmcgdGhlIGtlcm5lbCBEUk0gc2VydmljZXMuICBEUk0gXAotc3RhbmRzIGZvciBcIkRpcmVjdCBSZW5kZXJpbmcgTWFuYWdlclwiLCB3aGljaCBpcyB0aGUga2VybmVsIHBvcnRpb24gb2YgdGhlIFwKLVwiRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZVwiIChEUkkpLiAgRFJJIGlzIHJlcXVpcmVkIGZvciBtYW55IGhhcmR3YXJlIFwKLWFjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnIgotU0VDVElPTiA9ICJ4MTEvYmFzZSIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGY4NmRybS5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzI7bWQ1PWM4YTNiOTYxYWY3NjY3YzUzMDgxNjc2MWU5NDlkYzcxIgotUFJPVklERVMgPSAiZHJtIgotREVQRU5EUyA9ICJsaWJwdGhyZWFkLXN0dWJzIHVkZXYgbGlicGNpYWNjZXNzIgotCi1TUkNfVVJJID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnL2xpYmRybS8ke0JQfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL2luc3RhbGx0ZXN0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXhfT19DTE9FWEVDX3VuZGVjbGFyZWQucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImI4NDRjNmFmMzRlNjEzZWJmNTJmODBiM2NkOGQ3MDU1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlNWI3MWUxMTEzYmUzNzU0NGQwNzUyNjgxYzEyZjA0MGMwMWY3ODJlMjkzM2RmN2Q3YmMyMWZkMGQxMGNlYmUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1FWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1jYWlyby10ZXN0cyBcCi0gICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9tYXAtZXhwZXJpbWVudGFsLWFwaSBcCi0gICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtdGVzdC1wcm9ncmFtcyBcCi0gICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1tYW5wYWdlcyBcCi0gICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12YWxncmluZCBcCi0gICAgICAgICAgICAgICAgIgotCi1BTExPV19FTVBUWV8ke1BOfS1kcml2ZXJzID0gIjEiCi1QQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMgJHtQTn0tZHJpdmVycyAke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwIFwKLSAgICAgICAgICAgICAke1BOfS1pbnRlbCAke1BOfS1leHlub3MgJHtQTn0ta21zICR7UE59LWZyZWVkcmVubyAke1BOfS1hbWRncHUiCi0KLVJSRUNPTU1FTkRTXyR7UE59LWRyaXZlcnMgPSAiJHtQTn0tcmFkZW9uICR7UE59LW5vdXZlYXUgJHtQTn0tb21hcCAke1BOfS1pbnRlbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7UE59LWV4eW5vcyAke1BOfS1mcmVlZHJlbm8gJHtQTn0tYW1kZ3B1IgotCi1GSUxFU18ke1BOfS10ZXN0cyA9ICIke2JpbmRpcn0vKiIKLUZJTEVTXyR7UE59LXJhZGVvbiA9ICIke2xpYmRpcn0vbGliZHJtX3JhZGVvbi5zby4qIgotRklMRVNfJHtQTn0tbm91dmVhdSA9ICIke2xpYmRpcn0vbGliZHJtX25vdXZlYXUuc28uKiIKLUZJTEVTXyR7UE59LW9tYXAgPSAiJHtsaWJkaXJ9L2xpYmRybV9vbWFwLnNvLioiCi1GSUxFU18ke1BOfS1pbnRlbCA9ICIke2xpYmRpcn0vbGliZHJtX2ludGVsLnNvLioiCi1GSUxFU18ke1BOfS1leHlub3MgPSAiJHtsaWJkaXJ9L2xpYmRybV9leHlub3Muc28uKiIKLUZJTEVTXyR7UE59LWttcyA9ICIke2xpYmRpcn0vbGlia21zKi5zby4qIgotRklMRVNfJHtQTn0tZnJlZWRyZW5vID0gIiR7bGliZGlyfS9saWJkcm1fZnJlZWRyZW5vLnNvLioiCi1GSUxFU18ke1BOfS1hbWRncHUgPSAiJHtsaWJkaXJ9L2xpYmRybV9hbWRncHUuc28uKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNzAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjcwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjUyODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjcwLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIGludGVyZmFjZSB0byB0aGUga2VybmVsIERSTSBzZXJ2aWNlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBydW50aW1lIGxpYnJhcnkgZm9yIGFjY2Vzc2luZyB0aGUga2VybmVsIERSTSBzZXJ2aWNlcy4gIERSTSBcCitzdGFuZHMgZm9yIFwiRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyXCIsIHdoaWNoIGlzIHRoZSBrZXJuZWwgcG9ydGlvbiBvZiB0aGUgXAorXCJEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlXCIgKERSSSkuICBEUkkgaXMgcmVxdWlyZWQgZm9yIG1hbnkgaGFyZHdhcmUgXAorYWNjZWxlcmF0ZWQgT3BlbkdMIGRyaXZlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Zjg2ZHJtLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMjttZDU9YzhhM2I5NjFhZjc2NjdjNTMwODE2NzYxZTk0OWRjNzEiCitQUk9WSURFUyA9ICJkcm0iCitERVBFTkRTID0gImxpYnB0aHJlYWQtc3R1YnMgdWRldiBsaWJwY2lhY2Nlc3MiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmcvbGliZHJtLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vaW5zdGFsbHRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9PX0NMT0VYRUNfdW5kZWNsYXJlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1BbGxvdy1leHBsaWNpdC1lbmFibGluZy1vZi1jdW5pdC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTIwOTU3Y2ZlMjVhODBlZmIwMmJlOWJkOTBiZjNjMWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjE3ZDRiMzllZDk3Y2EwZTRjZmZhMGRiMDZmZjYwOWU2MTdiYWM5NDY0NmVjMzhlOGUwNTc5ZDUzMDU0MGU3YiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNhaXJvLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWN1bml0IFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtb21hcC1leHBlcmltZW50YWwtYXBpIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC10ZXN0LXByb2dyYW1zIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZhbGdyaW5kIFwKKyAgICAgICAgICAgICAgICAiCisKK0FMTE9XX0VNUFRZXyR7UE59LWRyaXZlcnMgPSAiMSIKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyAke1BOfS1kcml2ZXJzICR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgXAorICAgICAgICAgICAgICR7UE59LWludGVsICR7UE59LWV4eW5vcyAke1BOfS1rbXMgJHtQTn0tZnJlZWRyZW5vICR7UE59LWFtZGdwdSIKKworUlJFQ09NTUVORFNfJHtQTn0tZHJpdmVycyA9ICIke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwICR7UE59LWludGVsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh5bm9zICR7UE59LWZyZWVkcmVubyAke1BOfS1hbWRncHUiCisKK0ZJTEVTXyR7UE59LXRlc3RzID0gIiR7YmluZGlyfS8qIgorRklMRVNfJHtQTn0tcmFkZW9uID0gIiR7bGliZGlyfS9saWJkcm1fcmFkZW9uLnNvLioiCitGSUxFU18ke1BOfS1ub3V2ZWF1ID0gIiR7bGliZGlyfS9saWJkcm1fbm91dmVhdS5zby4qIgorRklMRVNfJHtQTn0tb21hcCA9ICIke2xpYmRpcn0vbGliZHJtX29tYXAuc28uKiIKK0ZJTEVTXyR7UE59LWludGVsID0gIiR7bGliZGlyfS9saWJkcm1faW50ZWwuc28uKiIKK0ZJTEVTXyR7UE59LWV4eW5vcyA9ICIke2xpYmRpcn0vbGliZHJtX2V4eW5vcy5zby4qIgorRklMRVNfJHtQTn0ta21zID0gIiR7bGliZGlyfS9saWJrbXMqLnNvLioiCitGSUxFU18ke1BOfS1mcmVlZHJlbm8gPSAiJHtsaWJkaXJ9L2xpYmRybV9mcmVlZHJlbm8uc28uKiIKK0ZJTEVTXyR7UE59LWFtZGdwdSA9ICIke2xpYmRpcn0vbGliZHJtX2FtZGdwdS5zby4qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvMDAwMS1SZXZlcnQtY2hhbmdlcy1tYWRlLXRvLUZjQ29uZmlnQXBwRm9udEFkZERpci1yZWNlbnRsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvMDAwMS1SZXZlcnQtY2hhbmdlcy1tYWRlLXRvLUZjQ29uZmlnQXBwRm9udEFkZERpci1yZWNlbnRsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmZkNWQ0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnLzAwMDEtUmV2ZXJ0LWNoYW5nZXMtbWFkZS10by1GY0NvbmZpZ0FwcEZvbnRBZGREaXItcmVjZW50bC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi1Gcm9tIDQ2ZWM2YTUyZDRjYzQ0N2NjM2ZmNGExM2IyMDY3ZWNiNzZjOWRiMmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBCZWhkYWQgRXNmYWhib2QgPGJlaGRhZEBiZWhkYWQub3JnPgotRGF0ZTogRnJpLCAyNiBKdW4gMjAxNSAxNzowMjoxMyAtMDcwMAotU3ViamVjdDogW1BBVENIXSBSZXZlcnQgY2hhbmdlcyBtYWRlIHRvIEZjQ29uZmlnQXBwRm9udEFkZERpcigpIHJlY2VudGx5Ci0KLUluIDMyYWM3Yzc1ZThkYjAxMzVlZjM3Y2Y4NmY5MmQ4YjliZTAwMGM4YmIgdGhlIGJlaGF2aW9yIG9mCi1GY0NvbmZpZ0FwcEZvbnRBZGRGaWxlL0RpcigpIHdlcmUgY2hhbmdlZCB0byByZXR1cm4gZmFsc2UKLWlmIG5vdCBmb250cyB3ZXJlIGZvdW5kLiAgV2hpbGUgdGhpcyBpcyB3ZWxsZGVmaW5lZCBhbmQgdXNlZnVsCi1mb3IgQWRkRmlsZSgpLCBpdCdzIHF1aXRlIHByb2JsZW1hdGljIGZvciBBZGREaXIoKS4gIEZvciBleGFtcGxlLAotaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eSwgaXMgdGhhdCBhIGZhaWx1cmUgb3Igc3VjY2Vzcz8gIFdvcnNlLAotdGhlIGZhbHNlIHZhbHVlIGZyb20gQWRkRGlyKCkgd2FzIGJlaW5nIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkKLXRvIEZjSW5pdCgpIHJldHVybmluZyBmYWxzZSBub3cuICBUaGlzIG9ubHkgaGFwcGVuZWQgdXBvbiBtZW1vcnkKLWFsbG9jYXRpb24gZmFpbHVyZSBiZWZvcmUsIGFuZCBzb21lIGNsaWVudHMgYXNzZXJ0IHRoYXQgRmNJbml0KCkKLWlzIHN1Y2Nlc3NmdWwuCi0KLVdpdGggdGhpcyBjaGFuZ2UsIEFkZERpcigpIGlzIHJldmVydGVkIGJhY2sgdG8gd2hhdCBpdCB3YXMuCi1BZGRGb250KCkgY2hhbmdlICh3aGljaCB3YXMgYWN0dWFsbHkgaW4gZmNkaXIuYykgZnJvbSB0aGUgb3JpZ2luYWwKLWNvbW1pdCBpcyBsZWZ0IGluLgotCi1VcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KLS0tLQotIGRvYy9mY2NvbmZpZy5mbmNzIHwgICAgMiArLQotIHNyYy9mY2NmZy5jICAgICAgIHwgICAyOSArKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQotIHNyYy9mY2ludC5oICAgICAgIHwgICAgMyAtLS0KLSBzcmMvZmNzdHIuYyAgICAgICB8ICAgIDggLS0tLS0tLS0KLSA0IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQotCi1JbmRleDogZm9udGNvbmZpZy0yLjExLjk0L2RvYy9mY2NvbmZpZy5mbmNzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZm9udGNvbmZpZy0yLjExLjk0Lm9yaWcvZG9jL2ZjY29uZmlnLmZuY3MKLSsrKyBmb250Y29uZmlnLTIuMTEuOTQvZG9jL2ZjY29uZmlnLmZuY3MKLUBAIC0yMzIsNyArMjMyLDcgQEAgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyB1c2VkLgotIEBERVNDQAotIFNjYW5zIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGZvciBmb250cywgYWRkaW5nIGVhY2ggb25lIGZvdW5kIHRvIHRoZQotIGFwcGxpY2F0aW9uLXNwZWNpZmljIHNldCBvZiBmb250cy4gUmV0dXJucyBGY0ZhbHNlCi0taWYgdGhlIGZvbnRzIGNhbm5vdCBiZSBhZGRlZCAoZHVlIHRvIGFsbG9jYXRpb24gZmFpbHVyZSBvciBubyBmb250cyBmb3VuZCkuCi0raWYgdGhlIGZvbnRzIGNhbm5vdCBiZSBhZGRlZCAoZHVlIHRvIGFsbG9jYXRpb24gZmFpbHVyZSkuCi0gT3RoZXJ3aXNlIHJldHVybnMgRmNUcnVlLiBJZiA8cGFyYW1ldGVyPmNvbmZpZzwvcGFyYW1ldGVyPiBpcyBOVUxMLAotIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgdXNlZC4KLSBAQAotSW5kZXg6IGZvbnRjb25maWctMi4xMS45NC9zcmMvZmNjZmcuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGZvbnRjb25maWctMi4xMS45NC5vcmlnL3NyYy9mY2NmZy5jCi0rKysgZm9udGNvbmZpZy0yLjExLjk0L3NyYy9mY2NmZy5jCi1AQCAtMzY4LDcgKzM2OCw2IEBAIEZjQ29uZmlnQWRkRGlyTGlzdCAoRmNDb25maWcgKmNvbmZpZywgRmMKLSAgICAgRmNTdHJMaXN0CSAgICAqZGlybGlzdDsKLSAgICAgRmNDaGFyOAkgICAgKmRpcjsKLSAgICAgRmNDYWNoZQkgICAgKmNhY2hlOwotLSAgICBGY0Jvb2wJICAgICByZXQgPSBGY0ZhbHNlOwotIAotICAgICBkaXJsaXN0ID0gRmNTdHJMaXN0Q3JlYXRlIChkaXJTZXQpOwotICAgICBpZiAoIWRpcmxpc3QpCi1AQCAtMzgzLDEwICszODIsOSBAQCBGY0NvbmZpZ0FkZERpckxpc3QgKEZjQ29uZmlnICpjb25maWcsIEZjCi0gCSAgICBjb250aW51ZTsKLSAJRmNDb25maWdBZGRDYWNoZSAoY29uZmlnLCBjYWNoZSwgc2V0LCBkaXJTZXQpOwotIAlGY0RpckNhY2hlVW5sb2FkIChjYWNoZSk7Ci0tCXJldCA9IEZjVHJ1ZTsKLSAgICAgfQotICAgICBGY1N0ckxpc3REb25lIChkaXJsaXN0KTsKLS0gICAgcmV0dXJuIHJldDsKLSsgICAgcmV0dXJuIEZjVHJ1ZTsKLSB9Ci0gCi0gLyoKLUBAIC0yMTk5LDcgKzIxOTcsNiBAQCBGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlIChGY0NvbmZpZyAgICAqY29uCi0gICAgIEZjU3RyU2V0CSpzdWJkaXJzOwotICAgICBGY1N0ckxpc3QJKnN1Ymxpc3Q7Ci0gICAgIEZjQ2hhcjgJKnN1YmRpcjsKLS0gICAgRmNCb29sCSByZXQgPSBGY0ZhbHNlOwotIAotICAgICBpZiAoIWNvbmZpZykKLSAgICAgewotQEAgLTIyMjksMTkgKzIyMjYsMTYgQEAgRmNDb25maWdBcHBGb250QWRkRmlsZSAoRmNDb25maWcgICAgKmNvbgotIAlGY1N0clNldERlc3Ryb3kgKHN1YmRpcnMpOwotIAlyZXR1cm4gRmNGYWxzZTsKLSAgICAgfQotLSAgICBpZiAoc3ViZGlycy0+bnVtID09IDApCi0tCXJldCA9IEZjVHJ1ZTsKLS0gICAgZWxzZSBpZiAoKHN1Ymxpc3QgPSBGY1N0ckxpc3RDcmVhdGUgKHN1YmRpcnMpKSkKLSsgICAgaWYgKChzdWJsaXN0ID0gRmNTdHJMaXN0Q3JlYXRlIChzdWJkaXJzKSkpCi0gICAgIHsKLSAJd2hpbGUgKChzdWJkaXIgPSBGY1N0ckxpc3ROZXh0IChzdWJsaXN0KSkpCi0gCXsKLS0JICAgIGlmIChGY0NvbmZpZ0FwcEZvbnRBZGREaXIgKGNvbmZpZywgc3ViZGlyKSkKLS0JCXJldCA9IEZjVHJ1ZTsKLSsJICAgIEZjQ29uZmlnQXBwRm9udEFkZERpciAoY29uZmlnLCBzdWJkaXIpOwotIAl9Ci0gCUZjU3RyTGlzdERvbmUgKHN1Ymxpc3QpOwotICAgICB9Ci0gICAgIEZjU3RyU2V0RGVzdHJveSAoc3ViZGlycyk7Ci0tICAgIHJldHVybiByZXQ7Ci0rICAgIHJldHVybiBGY1RydWU7Ci0gfQotIAotIEZjQm9vbAotQEAgLTIyNTAsNyArMjI0NCw2IEBAIEZjQ29uZmlnQXBwRm9udEFkZERpciAoRmNDb25maWcJICAgICpjb24KLSB7Ci0gICAgIEZjRm9udFNldAkqc2V0OwotICAgICBGY1N0clNldAkqZGlyczsKLS0gICAgRmNCb29sCSByZXQgPSBGY1RydWU7Ci0gCi0gICAgIGlmICghY29uZmlnKQotICAgICB7Ci1AQCAtMjI2OSw4ICsyMjYyLDggQEAgRmNDb25maWdBcHBGb250QWRkRGlyIChGY0NvbmZpZwkgICAgKmNvbgotIAlzZXQgPSBGY0ZvbnRTZXRDcmVhdGUgKCk7Ci0gCWlmICghc2V0KQotIAl7Ci0tCSAgICByZXQgPSBGY0ZhbHNlOwotLQkgICAgZ290byBiYWlsOwotKwkgICAgRmNTdHJTZXREZXN0cm95IChkaXJzKTsKLSsJICAgIHJldHVybiBGY0ZhbHNlOwotIAl9Ci0gCUZjQ29uZmlnU2V0Rm9udHMgKGNvbmZpZywgc2V0LCBGY1NldEFwcGxpY2F0aW9uKTsKLSAgICAgfQotQEAgLTIyNzgsMTAgKzIyNzEsMTIgQEAgRmNDb25maWdBcHBGb250QWRkRGlyIChGY0NvbmZpZwkgICAgKmNvbgotICAgICBGY1N0clNldEFkZEZpbGVuYW1lIChkaXJzLCBkaXIpOwotIAotICAgICBpZiAoIUZjQ29uZmlnQWRkRGlyTGlzdCAoY29uZmlnLCBGY1NldEFwcGxpY2F0aW9uLCBkaXJzKSkKLS0JcmV0ID0gRmNGYWxzZTsKLS1iYWlsOgotKyAgICB7Ci0rCUZjU3RyU2V0RGVzdHJveSAoZGlycyk7Ci0rCXJldHVybiBGY0ZhbHNlOwotKyAgICB9Ci0gICAgIEZjU3RyU2V0RGVzdHJveSAoZGlycyk7Ci0tICAgIHJldHVybiByZXQ7Ci0rICAgIHJldHVybiBGY1RydWU7Ci0gfQotIAotIHZvaWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjExLjk0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDI3OTQ3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1TVU1NQVJZID0gIkdlbmVyaWMgZm9udCBjb25maWd1cmF0aW9uIGxpYnJhcnkiCi1ERVNDUklQVElPTiA9ICJGb250Y29uZmlnIGlzIGEgZm9udCBjb25maWd1cmF0aW9uIGFuZCBjdXN0b21pemF0aW9uIGxpYnJhcnksIHdoaWNoIFwKLWRvZXMgbm90IGRlcGVuZCBvbiB0aGUgWCBXaW5kb3cgU3lzdGVtLiBJdCBpcyBkZXNpZ25lZCB0byBsb2NhdGUgXAotZm9udHMgd2l0aGluIHRoZSBzeXN0ZW0gYW5kIHNlbGVjdCB0aGVtIGFjY29yZGluZyB0byByZXF1aXJlbWVudHMgXAotc3BlY2lmaWVkIGJ5IGFwcGxpY2F0aW9ucy4gXAotRm9udGNvbmZpZyBpcyBub3QgYSByYXN0ZXJpemF0aW9uIGxpYnJhcnksIG5vciBkb2VzIGl0IGltcG9zZSBhIFwKLXBhcnRpY3VsYXIgcmFzdGVyaXphdGlvbiBsaWJyYXJ5IG9uIHRoZSBhcHBsaWNhdGlvbi4gVGhlIFgtc3BlY2lmaWMgXAotbGlicmFyeSAnWGZ0JyB1c2VzIGZvbnRjb25maWcgYWxvbmcgd2l0aCBmcmVldHlwZSB0byBzcGVjaWZ5IGFuZCBcCi1yYXN0ZXJpemUgZm9udHMuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZvbnRjb25maWcub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1mb250Y29uZmlnIgotCi1MSUNFTlNFID0gIk1JVC1zdHlsZSAmIE1JVCAmIFBEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2EwNDQ5ZTliYzUzNzA0MDJhOTRjMDAyMDRiZWNhM2QgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZjZnJlZXR5cGUuYztlbmRsaW5lPTQ1O21kNT01ZDk1MTNlMzE5NmExZmJmZGZhOTQwNTFjMDlkZmM4NCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmNjYWNoZS5jO2JlZ2lubGluZT0xMTk5O2VuZGxpbmU9MTIxNDttZDU9MDMyNmNmZWI0YTczMzNkZDRkZDI1ZmJiYzRiOWYyN2YiCi0KLVNFQ1RJT04gPSAibGlicyIKLQotREVQRU5EUyA9ICJleHBhdCBmcmVldHlwZSB6bGliIgotCi1TUkNfVVJJID0gImh0dHA6Ly9mb250Y29uZmlnLm9yZy9yZWxlYXNlL2ZvbnRjb25maWctJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtUmV2ZXJ0LWNoYW5nZXMtbWFkZS10by1GY0NvbmZpZ0FwcEZvbnRBZGREaXItcmVjZW50bC5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI0NzliZTg3MGM3ZjgzZjE1Zjg3YmFjMDg1YjYxZDY0MSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3M2Y2ZDMyM2M3YmNmYmRlMjVkNzgzOTc2NzUxOTFkNTViOGY0MTM5MTMyYzZhOTQ0NDQxMGYzYTJkOGE5YTk1IgotCi1QQUNLQUdFUyA9KyAiZm9udGNvbmZpZy11dGlscyIKLUZJTEVTXyR7UE59ID0rICIke2RhdGFkaXJ9L3htbC8qIgotRklMRVNfZm9udGNvbmZpZy11dGlscyA9ICIke2JpbmRpcn0vKiIKLQotIyBXb3JrIGFyb3VuZCBwYXN0IGJyZWFrYWdlIGluIGRlYmlhbi5iYmNsYXNzCi1SUFJPVklERVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgotUlJFUExBQ0VTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKLVJDT05GTElDVFNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgotREVCSUFOX05PQVVUT05BTUVfZm9udGNvbmZpZy11dGlscyA9ICIxIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKLQotIyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzCi0jIC91c3Ivc2hhcmUvZm9udHMgaXMgYWxyZWFkeSBpbmNsdWRlZCBieSBkZWZhdWx0ICh5b3UgY2FuIGNoYW5nZSBpdCB3aXRoIC0td2l0aC1kZWZhdWx0LWZvbnRzKQotRk9OVENPTkZJR19GT05UX0RJUlMgPz0gIm5vIgotCi1FWFRSQV9PRUNPTkYgPSAiIC0tZGlzYWJsZS1kb2NzIC0td2l0aC1kZWZhdWx0LWZvbnRzPSR7ZGF0YWRpcn0vZm9udHMgLS13aXRoLWNhY2hlLWRpcj0ke0ZPTlRDT05GSUdfQ0FDSEVfRElSfSAtLXdpdGgtYWRkLWZvbnRzPSR7Rk9OVENPTkZJR19GT05UX0RJUlN9IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTVmNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMi4xLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBmb250IGNvbmZpZ3VyYXRpb24gbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkZvbnRjb25maWcgaXMgYSBmb250IGNvbmZpZ3VyYXRpb24gYW5kIGN1c3RvbWl6YXRpb24gbGlicmFyeSwgd2hpY2ggXAorZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBYIFdpbmRvdyBTeXN0ZW0uIEl0IGlzIGRlc2lnbmVkIHRvIGxvY2F0ZSBcCitmb250cyB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgc2VsZWN0IHRoZW0gYWNjb3JkaW5nIHRvIHJlcXVpcmVtZW50cyBcCitzcGVjaWZpZWQgYnkgYXBwbGljYXRpb25zLiBcCitGb250Y29uZmlnIGlzIG5vdCBhIHJhc3Rlcml6YXRpb24gbGlicmFyeSwgbm9yIGRvZXMgaXQgaW1wb3NlIGEgXAorcGFydGljdWxhciByYXN0ZXJpemF0aW9uIGxpYnJhcnkgb24gdGhlIGFwcGxpY2F0aW9uLiBUaGUgWC1zcGVjaWZpYyBcCitsaWJyYXJ5ICdYZnQnIHVzZXMgZm9udGNvbmZpZyBhbG9uZyB3aXRoIGZyZWV0eXBlIHRvIHNwZWNpZnkgYW5kIFwKK3Jhc3Rlcml6ZSBmb250cy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZm9udGNvbmZpZy5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PWZvbnRjb25maWciCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlICYgTUlUICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03YTA0NDllOWJjNTM3MDQwMmE5NGMwMDIwNGJlY2EzZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmNmcmVldHlwZS5jO2VuZGxpbmU9NDU7bWQ1PTVkOTUxM2UzMTk2YTFmYmZkZmE5NDA1MWMwOWRmYzg0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2NhY2hlLmM7YmVnaW5saW5lPTEzNjA7ZW5kbGluZT0xMzc1O21kNT0wMzI2Y2ZlYjRhNzMzM2RkNGRkMjVmYmJjNGI5ZjI3ZiIKKworU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImV4cGF0IGZyZWV0eXBlIHpsaWIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZvbnRjb25maWcub3JnL3JlbGVhc2UvZm9udGNvbmZpZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiY2U1NWU1MjVjMzcxNDdlZWUxNGNjMmRlNmNjMDlmNmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTlmNDJkMDM5NDlmOTQ4YTNhNGY3NjIyODdkYmMxNmU1M2E5MjdjOTFhMDdlZTY0MjA3ZWJkOTBhOWU1ZTI5MiIKKworUEFDS0FHRVMgPSsgImZvbnRjb25maWctdXRpbHMiCitGSUxFU18ke1BOfSA9KyAiJHtkYXRhZGlyfS94bWwvKiIKK0ZJTEVTX2ZvbnRjb25maWctdXRpbHMgPSAiJHtiaW5kaXJ9LyoiCisKKyMgV29yayBhcm91bmQgcGFzdCBicmVha2FnZSBpbiBkZWJpYW4uYmJjbGFzcworUlBST1ZJREVTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JSRVBMQUNFU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCitSQ09ORkxJQ1RTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK0RFQklBTl9OT0FVVE9OQU1FX2ZvbnRjb25maWctdXRpbHMgPSAiMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZPTlRDT05GSUdfQ0FDSEVfRElSID89ICIke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2ZvbnRjb25maWciCisKKyMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBkaXJlY3RvcmllcworIyAvdXNyL3NoYXJlL2ZvbnRzIGlzIGFscmVhZHkgaW5jbHVkZWQgYnkgZGVmYXVsdCAoeW91IGNhbiBjaGFuZ2UgaXQgd2l0aCAtLXdpdGgtZGVmYXVsdC1mb250cykKK0ZPTlRDT05GSUdfRk9OVF9ESVJTID89ICJubyIKKworRVhUUkFfT0VDT05GID0gIiAtLWRpc2FibGUtZG9jcyAtLXdpdGgtZGVmYXVsdC1mb250cz0ke2RhdGFkaXJ9L2ZvbnRzIC0td2l0aC1jYWNoZS1kaXI9JHtGT05UQ09ORklHX0NBQ0hFX0RJUn0gLS13aXRoLWFkZC1mb250cz0ke0ZPTlRDT05GSUdfRk9OVF9ESVJTfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VkOTA3MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotU1VNTUFSWSA9ICJGcmVldHlwZSBmb250IHJlbmRlcmluZyBsaWJyYXJ5IgotREVTQ1JJUFRJT04gPSAiRnJlZVR5cGUgaXMgYSBzb2Z0d2FyZSBmb250IGVuZ2luZSB0aGF0IGlzIGRlc2lnbmVkIHRvIGJlIHNtYWxsLCBlZmZpY2llbnQsIFwKLWhpZ2hseSBjdXN0b21pemFibGUsIGFuZCBwb3J0YWJsZSB3aGlsZSBjYXBhYmxlIG9mIHByb2R1Y2luZyBoaWdoLXF1YWxpdHkgb3V0cHV0IChnbHlwaCBcCi1pbWFnZXMpLiBJdCBjYW4gYmUgdXNlZCBpbiBncmFwaGljcyBsaWJyYXJpZXMsIGRpc3BsYXkgc2VydmVycywgZm9udCBjb252ZXJzaW9uIHRvb2xzLCB0ZXh0IFwKLWltYWdlIGdlbmVyYXRpb24gdG9vbHMsIGFuZCBtYW55IG90aGVyIHByb2R1Y3RzIGFzIHdlbGwuIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLm5vbmdudS5vcmcvYnVncy8/Z3JvdXA9ZnJlZXR5cGUiCi1TRUNUSU9OID0gImxpYnMiCi0KLUxJQ0VOU0UgPSAiRnJlZVR5cGUgfCBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL0xJQ0VOU0UuVFhUO21kNT00YWY2MjIxNTA2ZjIwMjc3NGVmNzRmNjQ5MzI4NzhhMSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL0ZUTC5UWFQ7bWQ1PWQ0NzllODM3OTdmNjk5ZmU4NzNiMzhkYWRkMGZjZDRjIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvR1BMdjIuVFhUO21kNT04ZWYzODA0NzZmNjQyYzIwZWJmNDBmZWNiMGFkZDJlYyIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZnJlZXR5cGUvZnJlZXR5cGUtJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly91c2UtcmlnaHQtbGlidG9vbC5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjAwMzdiMjVhOGMwOTBiYzhhMTIxOGU4NjdiMzJiZWIxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM3MWU3MDdhYTUyMmFjZjViMTVjZTkzZjExMTgzYzcyNWI4ZWQxZWU4NTQ2ZDdiM2FmNTQ5ODYzMDQ1ODYzYTIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgbXVsdGlsaWJfaGVhZGVyCi0KLSMgQWRhcHQgYXV0b3Rvb2xzIHRvIHdvcmsgd2l0aCB0aGUgbWluaW1hbCBhdXRvY29uZiB1c2FnZSBpbiBmcmVldHlwZQotQVVUT1RPT0xTX1NDUklQVF9QQVRIID0gIiR7U30vYnVpbGRzL3VuaXgiCi1DT05GSUdVUkVfU0NSSVBUID0gIiR7U30vY29uZmlndXJlIgotRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIgLS1leGNsdWRlPWF1dG9tYWtlIgotCi1QQUNLQUdFQ09ORklHID8/PSAiemxpYiIKLQotUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS13aXRoLWJ6aXAyLC0td2l0aG91dC1iemlwMixiemlwMiIKLSMgaGFyZmJ1enogcmVzdWx0cyBpbiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgc28gZW5hYmxpbmcgaXMgbm9uLXRyaXZpYWwKLVBBQ0tBR0VDT05GSUdbaGFyZmJ1enpdID0gIi0td2l0aC1oYXJmYnV6eiwtLXdpdGhvdXQtaGFyZmJ1enosaGFyZmJ1enoiCi1QQUNLQUdFQ09ORklHW3BpeG1hcF0gPSAiLS13aXRoLXBuZywtLXdpdGhvdXQtcG5nLGxpYnBuZyIKLVBBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiIKLQotRVhUUkFfT0VDT05GID0gIkNDX0JVSUxEPScke0JVSUxEX0NDfSciCi0KLVRBUkdFVF9DUFBGTEFHUyArPSAiLURfRklMRV9PRkZTRVRfQklUUz02NCIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0Jb2VfbXVsdGlsaWJfaGVhZGVyIGZyZWV0eXBlMi9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaAotfQotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2ZyZWV0eXBlLWNvbmZpZyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2RkZTNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuNS5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkZyZWV0eXBlIGZvbnQgcmVuZGVyaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJGcmVlVHlwZSBpcyBhIHNvZnR3YXJlIGZvbnQgZW5naW5lIHRoYXQgaXMgZGVzaWduZWQgdG8gYmUgc21hbGwsIGVmZmljaWVudCwgXAoraGlnaGx5IGN1c3RvbWl6YWJsZSwgYW5kIHBvcnRhYmxlIHdoaWxlIGNhcGFibGUgb2YgcHJvZHVjaW5nIGhpZ2gtcXVhbGl0eSBvdXRwdXQgKGdseXBoIFwKK2ltYWdlcykuIEl0IGNhbiBiZSB1c2VkIGluIGdyYXBoaWNzIGxpYnJhcmllcywgZGlzcGxheSBzZXJ2ZXJzLCBmb250IGNvbnZlcnNpb24gdG9vbHMsIHRleHQgXAoraW1hZ2UgZ2VuZXJhdGlvbiB0b29scywgYW5kIG1hbnkgb3RoZXIgcHJvZHVjdHMgYXMgd2VsbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz9ncm91cD1mcmVldHlwZSIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJGcmVlVHlwZSB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvTElDRU5TRS5UWFQ7bWQ1PTRhZjYyMjE1MDZmMjAyNzc0ZWY3NGY2NDkzMjg3OGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvRlRMLlRYVDttZDU9MTNiMjU0MTMyNzRjOWIzYjA5YjYzZTQwMjgyMTZmZjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9HUEx2Mi5UWFQ7bWQ1PThlZjM4MDQ3NmY2NDJjMjBlYmY0MGZlY2IwYWRkMmVjIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mcmVldHlwZS9mcmVldHlwZS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1yaWdodC1saWJ0b29sLnBhdGNoIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9mcmVldHlwZS9maWxlcy9mcmVldHlwZTIvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmEzODY5NjRlMThiYTI4Y2I5MzM3MGU1N2ExOTAzMWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTIwYTZlMTQwMDc5OGZkNWUzZDgzMWRkODIxYjYxYzM1YjFmOWE2NDY1ZDZiMThhNTNhOWRmNGNmNDQxYWNmMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIKKworIyBBZGFwdCBhdXRvdG9vbHMgdG8gd29yayB3aXRoIHRoZSBtaW5pbWFsIGF1dG9jb25mIHVzYWdlIGluIGZyZWV0eXBlCitBVVRPVE9PTFNfU0NSSVBUX1BBVEggPSAiJHtTfS9idWlsZHMvdW5peCIKK0NPTkZJR1VSRV9TQ1JJUFQgPSAiJHtTfS9jb25maWd1cmUiCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciAtLWV4Y2x1ZGU9YXV0b21ha2UiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ6bGliIgorCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyIgorIyBoYXJmYnV6eiByZXN1bHRzIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBzbyBlbmFibGluZyBpcyBub24tdHJpdmlhbAorUEFDS0FHRUNPTkZJR1toYXJmYnV6el0gPSAiLS13aXRoLWhhcmZidXp6LC0td2l0aG91dC1oYXJmYnV6eixoYXJmYnV6eiIKK1BBQ0tBR0VDT05GSUdbcGl4bWFwXSA9ICItLXdpdGgtcG5nLC0td2l0aG91dC1wbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliIgorCitFWFRSQV9PRUNPTkYgPSAiQ0NfQlVJTEQ9JyR7QlVJTERfQ0N9JyIKKworVEFSR0VUX0NQUEZMQUdTICs9ICItRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCit9CisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZnJlZXR5cGUtY29uZmlnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEzLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEzLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNWM0MDUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMy4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotU1VNTUFSWSA9ICJPcGVuR0wgZXh0ZW5zaW9uIGxvYWRpbmcgbGlicmFyeSIKLURFU0NSSVBUSU9OID0gIlRoZSBPcGVuR0wgRXh0ZW5zaW9uIFdyYW5nbGVyIExpYnJhcnkgKEdMRVcpIGlzIGEgY3Jvc3MtcGxhdGZvcm0gb3Blbi1zb3VyY2UgQy9DKysgZXh0ZW5zaW9uIGxvYWRpbmcgbGlicmFyeS4iCi1IT01FUEFHRSA9ICJodHRwOi8vZ2xldy5zb3VyY2Vmb3JnZS5uZXQvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTY3NTg2IgotU0VDVElPTiA9ICJ4MTEiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0yYWMyNTE1NThkZTY4NWM2Yjk0NzhkODliZTMxNDljMiIKLQotREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSB2aXJ0dWFsL2xpYmdsIGxpYmdsdSBsaWJ4ZXh0IGxpYnhpIGxpYnhtdSIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9nbGV3L2dsZXcvJHtQVn0vZ2xldy0ke1BWfS50Z3ogXAotICAgICAgICAgICBmaWxlOi8vbm8tc3RyaXAucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI3Y2JhZGEzMTY2ZDJhYWRmYzQxNjljNDI4MzcwMTA2NiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhYTI1ZGM0OGVkODRiMGI2NGI4ZDQxY2RkNDJjOGY0MGYxNDljMzdmYTJmZmEzOWNkOTdmNDJjNzhkMTI4YmM3IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nbGV3L2ZpbGVzL2dsZXciCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvZ2xldy8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykvIgotCi1pbmhlcml0IGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotIyBPdmVycmlkZSBTWVNURU0gdG8gYXZvaWQgY2FsbGluZyBjb25maWcuZ3Vlc3MsIHdlJ3JlIGNyb3NzLWNvbXBpbGluZy4gIFBhc3MKLSMgb3VyIENGTEFHUyB2aWEgUE9QVCBhcyB0aGF0J3MgdGhlIG9wdGltaXNhdGlvbiB2YXJpYWJsZSBhbmQgc2FmZWx5Ci0jIG92ZXJ3cml0dGVuLgotRVhUUkFfT0VNQUtFID0gIlNZU1RFTT0nbGludXgnIFwKLSAgICAgICAgICAgICAgICBDQz0nJHtDQ30nIExEPScke0NDfScgU1RSSVA9JycgXAotICAgICAgICAgICAgICAgIExERkxBR1MuRVhUUkE9JyR7TERGTEFHU30nIFwKLSAgICAgICAgICAgICAgICBQT1BUPScke0NGTEFHU30nIFwKLSAgICAgICAgICAgICAgICBHTEVXX1BSRUZJWD0nJHtwcmVmaXh9JyBCSU5ESVI9JyR7YmluZGlyfScgXAotICAgICAgICAgICAgICAgIExJQkRJUj0nJHtsaWJkaXJ9JyBJTkNESVI9JyR7aW5jbHVkZWRpcn0vR0wnIgotCi1kb19jb21waWxlKCkgewotCW9lX3J1bm1ha2UKLX0KLQotZG9faW5zdGFsbCgpIHsKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwuYWxsCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18yLjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzIuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OWRkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18yLjAuMC5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIk9wZW5HTCBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgTGlicmFyeSAoR0xFVykgaXMgYSBjcm9zcy1wbGF0Zm9ybSBvcGVuLXNvdXJjZSBDL0MrKyBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9nbGV3LnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9Njc1ODYiCitTRUNUSU9OID0gIngxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTJhYzI1MTU1OGRlNjg1YzZiOTQ3OGQ4OWJlMzE0OWMyIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIHZpcnR1YWwvbGliZ2wgbGliZ2x1IGxpYnhleHQgbGlieGkgbGlieG11IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2dsZXcvZ2xldy8ke1BWfS9nbGV3LSR7UFZ9LnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1zdHJpcC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJhMmNkN2M5OGYxMzg1NGQyZmNkZGFlMGQyYjIwNDExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1NzJjMzBhNGU2NDY4OWMzNDJiYTE2MjQxMzBhYzk4OTM2ZDdhZjkwYzMxMDNmOWNlMTJiOGEwYzU3MzY3NjQiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dsZXcvZmlsZXMvZ2xldyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9nbGV3Lyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCisKK2luaGVyaXQgbGliX3BhY2thZ2UgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjIE92ZXJyaWRlIFNZU1RFTSB0byBhdm9pZCBjYWxsaW5nIGNvbmZpZy5ndWVzcywgd2UncmUgY3Jvc3MtY29tcGlsaW5nLiAgUGFzcworIyBvdXIgQ0ZMQUdTIHZpYSBQT1BUIGFzIHRoYXQncyB0aGUgb3B0aW1pc2F0aW9uIHZhcmlhYmxlIGFuZCBzYWZlbHkKKyMgb3ZlcndyaXR0ZW4uCitFWFRSQV9PRU1BS0UgPSAiU1lTVEVNPSdsaW51eCcgXAorICAgICAgICAgICAgICAgIENDPScke0NDfScgTEQ9JyR7Q0N9JyBTVFJJUD0nJyBcCisgICAgICAgICAgICAgICAgTERGTEFHUy5FWFRSQT0nJHtMREZMQUdTfScgXAorICAgICAgICAgICAgICAgIFBPUFQ9JyR7Q0ZMQUdTfScgXAorICAgICAgICAgICAgICAgIEdMRVdfUFJFRklYPScke3ByZWZpeH0nIEJJTkRJUj0nJHtiaW5kaXJ9JyBcCisgICAgICAgICAgICAgICAgTElCRElSPScke2xpYmRpcn0nIElOQ0RJUj0nJHtpbmNsdWRlZGlyfS9HTCcgUEtHRElSPScke2xpYmRpcn0vcGtnY29uZmlnJyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLmFsbAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjIuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS4yLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTg4NWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjIuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLVNVTU1BUlkgPSAiVGV4dCBzaGFwaW5nIGxpYnJhcnkiCi1ERVNDUklQVElPTiA9ICJIYXJmQnV6eiBpcyBhbiBPcGVuVHlwZSB0ZXh0IHNoYXBpbmcgZW5naW5lLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvSGFyZkJ1enoiCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUhhcmZCdXp6IgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDIxZGQ2ZGRhNmZmMWU2YjEwNDQwMDJmYzY2MmI5YiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaGItdWNkbi9DT1BZSU5HO21kNT05OTRiYTBmMTI5NWYxNWI0YmRhNDk5OWE1YmJlZGRlZiBcCi0iCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgY2Fpcm8gZm9udGNvbmZpZyBmcmVldHlwZSIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9oYXJmYnV6ei9yZWxlYXNlLyR7QlB9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJkYThkOTdlMjYyZTZlZjgyODhlMWFlNzYzNjk0MjFiZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4MjE2ZDI0MDRhYWFiN2ZkZTg3YmUwMzY1YTkwZDY0YWE2YzU1OTI4ZTEwNDU1N2NmY2IzN2I1NGEwOTZjYjhjIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbGliX3BhY2thZ2UKLQotUEFDS0FHRUNPTkZJRyA/Pz0gImljdSIKLVBBQ0tBR0VDT05GSUdbaWN1XSA9ICItLXdpdGgtaWN1LC0td2l0aG91dC1pY3UsaWN1IgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAtLXdpdGgtY2Fpcm8gXAotICAgIC0td2l0aC1mb250Y29uZmlnIFwKLSAgICAtLXdpdGgtZnJlZXR5cGUgXAotICAgIC0td2l0aC1nbGliIFwKLSAgICAtLXdpdGhvdXQtZ3JhcGhpdGUyIFwKLSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LWljdSAke1BOfS1pY3UtZGV2IgotCi1GSUxFU18ke1BOfS1pY3UgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zby4qIgotRklMRVNfJHtQTn0taWN1LWRldiA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LmxhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zbyBcCi0gICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvaGFyZmJ1enotaWN1LnBjIFwKLSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjRjNDQzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjMuMC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlRleHQgc2hhcGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSGFyZkJ1enogaXMgYW4gT3BlblR5cGUgdGV4dCBzaGFwaW5nIGVuZ2luZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL0hhcmZCdXp6IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1IYXJmQnV6eiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAyMWRkNmRkYTZmZjFlNmIxMDQ0MDAyZmM2NjJiOWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2hiLXVjZG4vQ09QWUlORzttZDU9OTk0YmEwZjEyOTVmMTViNGJkYTQ5OTlhNWJiZWRkZWYgXAorIgorCitERVBFTkRTID0gImdsaWItMi4wIGNhaXJvIGZvbnRjb25maWcgZnJlZXR5cGUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvaGFyZmJ1enovcmVsZWFzZS8ke0JQfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTgyZDQ5ZmY2NzE5N2JjM2M5NmVhMzRiOTg4ODBjNTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjA0YmUzMTYzM2VmZWUyY2FlMWQ2MmQ0NjQzNDU4NzMwMjU1NGZhODM3MjI0ODQ1YTYyNTY1ZWM2OGEwMzM0ZCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlIGd0ay1kb2MKKworUEFDS0FHRUNPTkZJRyA/Pz0gImljdSIKK1BBQ0tBR0VDT05GSUdbaWN1XSA9ICItLXdpdGgtaWN1LC0td2l0aG91dC1pY3UsaWN1IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLXdpdGgtY2Fpcm8gXAorICAgIC0td2l0aC1mb250Y29uZmlnIFwKKyAgICAtLXdpdGgtZnJlZXR5cGUgXAorICAgIC0td2l0aC1nbGliIFwKKyAgICAtLXdpdGhvdXQtZ3JhcGhpdGUyIFwKKyIKKworUEFDS0FHRVMgPSsgIiR7UE59LWljdSAke1BOfS1pY3UtZGV2IgorCitGSUxFU18ke1BOfS1pY3UgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zby4qIgorRklMRVNfJHtQTn0taWN1LWRldiA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvaGFyZmJ1enotaWN1LnBjIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0MTE5NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotU1VNTUFSWSA9ICJBbiBpbWFnZSB0aGF0IHVzZXMgRGlyZWN0RkIgaW5zdGVhZCBvZiBYMTEiCi1MSUNFTlNFID0gIk1JVCIKLQotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKLQotaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiZGlyZWN0ZmIiCi1DT05GTElDVF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1JTUFHRV9JTlNUQUxMICs9ICJcCi0JJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0gXAotCXBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCi0JcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgXAotIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYgppbmRleCA1MmUyNzFkLi5lMzY2NTVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYgpAQCAtOSwzICs5LDQgQEAKIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ3YXlsYW5kIgogCiBDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTCArPSAid2VzdG9uIHdlc3Rvbi1pbml0IHdlc3Rvbi1leGFtcGxlcyBndGsrMy1kZW1vIGNsdXR0ZXItMS4wLWV4YW1wbGVzIgorQ09SRV9JTUFHRV9CQVNFX0lOU1RBTEwgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3dlc3Rvbi14d2F5bGFuZCBtYXRjaGJveC10ZXJtaW5hbCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2pwZWcvbGlianBlZy10dXJib18xLjUuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZTcwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2pwZWcvbGlianBlZy10dXJib18xLjUuMC5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIkhhcmR3YXJlIGFjY2VsZXJhdGVkIEpQRUcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGlianBlZy10dXJibyBpcyBhIGRlcml2YXRpdmUgb2YgbGlianBlZyB0aGF0IHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwgU1NFMiwgTkVPTikgdG8gYWNjZWxlcmF0ZSBiYXNlbGluZSBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmpwZWctdHVyYm8ub3JnLyIKKworTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jZGpwZWcuaDtlbmRsaW5lPTEzO21kNT0wNWJhYjdjN2FkODk5ZDg1YmZiYTYwZGExYTEyNzFmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9qcGVnbGliLmg7ZW5kbGluZT0xNjttZDU9ZjY3ZDcwZTU0N2EyNjYyYzA3OTc4MWM3MmY4NzdmNzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGpwZWcuYztlbmRsaW5lPTExO21kNT1iOTBiNmQyYjQxMTlmOWU1ODA3Y2QyNzNmNTI1ZDJhZiBcCisiCitERVBFTkRTID0gIm5hc20tbmF0aXZlIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZmM1ZDliNmE4YmNlOTYxNjE2NTlhZTdhOTkzOTI1NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZjM5N2MzMWE2N2QyYjAwZWUzNzU5N2RhMjU4OThiMDNlYjI4MmNjZDg3YjEzNWE1MGE2OTk5M2I2YTIwMzVmIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlianBlZy10dXJiby9maWxlcy8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvbGlianBlZy10dXJiby9maWxlcy8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykvIgorCitQRT0gIjEiCisKKyMgRHJvcC1pbiByZXBsYWNlbWVudCBmb3IganBlZworUFJPVklERVMgPSAianBlZyIKK1JQUk9WSURFU18ke1BOfSArPSAianBlZyIKK1JSRVBMQUNFU18ke1BOfSArPSAianBlZyIKK1JDT05GTElDVFNfJHtQTn0gKz0gImpwZWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIFdvcmsgYXJvdW5kIG1pc3NpbmcgeDMyIEFCSSBzdXBwb3J0CitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICItLXdpdGhvdXQtc2ltZCIsICIiLCBkKX0iCisKKyMgV29yayBhcm91bmQgbWlzc2luZyBub24tZmxvYXRpbmcgcG9pbnQgQUJJIHN1cHBvcnQgaW4gTUlQUworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNSVBTUEtHU0ZYX0ZQVSIsICItbmYiLCAiLS13aXRob3V0LXNpbWQiLCAiIiwgZCl9IgorCisjIFByb3ZpZGUgYSB3b3JrYXJvdW5kIGlmIEFsdGl2ZWMgdW5pdCBpcyBub3QgcHJlc2VudCBpbiBQUEMKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0X3Bvd2VycGMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWx0aXZlYyIsICIiLCAiLS13aXRob3V0LXNpbWQiLCBkKX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldF9wb3dlcnBjNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWx0aXZlYyIsICIiLCAiLS13aXRob3V0LXNpbWQiLCBkKX0iCisKK1BBQ0tBR0VTID0rICJqcGVnLXRvb2xzIGxpYnR1cmJvanBlZyIKKworREVTQ1JJUFRJT05fanBlZy10b29scyA9ICJUaGUganBlZy10b29scyBwYWNrYWdlIGluY2x1ZGVzIGNsaWVudCBwcm9ncmFtcyB0byBhY2Nlc3MgbGlianBlZyBmdW5jdGlvbmFsaXR5LiAgVGhlc2UgdG9vbHMgYWxsb3cgZm9yIHRoZSBjb21wcmVzc2lvbiwgZGVjb21wcmVzc2lvbiwgdHJhbnNmb3JtYXRpb24gYW5kIGRpc3BsYXkgb2YgSlBFRyBmaWxlcyBhbmQgYmVuY2htYXJraW5nIG9mIHRoZSBsaWJqcGVnIGxpYnJhcnkuIgorRklMRVNfanBlZy10b29scyA9ICIke2JpbmRpcn0vKiIKKworREVTQ1JJUFRJT05fbGlidHVyYm9qcGVnID0gIkEgU0lNRC1hY2NlbGVyYXRlZCBKUEVHIGNvZGVjIHdoaWNoIHByb3ZpZGVzIG9ubHkgVHVyYm9KUEVHIEFQSXMiCitGSUxFU19saWJ0dXJib2pwZWcgPSAiJHtsaWJkaXJ9L2xpYnR1cmJvanBlZy5zby4qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvXzhkKzEuNC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9qcGVnL2xpYmpwZWctdHVyYm9fOGQrMS40LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTk0MzEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9qcGVnL2xpYmpwZWctdHVyYm9fOGQrMS40LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1ERVNDUklQVElPTiA9ICJsaWJqcGVnLXR1cmJvIGlzIGEgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHRoYXQgdXNlcyBTSU1EIGluc3RydWN0aW9ucyAoTU1YLCBTU0UyLCBORU9OKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24iCi1IT01FUEFHRSA9ICJodHRwOi8vbGlianBlZy10dXJiby5vcmcvIgotCi1MSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NkanBlZy5oO2VuZGxpbmU9MTI7bWQ1PWNhZDk1NWQxNTE0NWMzZmRjZWVjNjg1NWUwNzhlOTUzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2pwZWdsaWIuaDtlbmRsaW5lPTE0O21kNT1kZmM4MDNkYzUxYWUyMTE3OGQxMzc2ZWM3M2M0NDU0ZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kanBlZy5jO2VuZGxpbmU9OTttZDU9ZTkzYThmMjA2MWU4YTBhYzcxYzdhNDg1YzEwNDg5ZTIgXAotIgotCi1ERVBFTkRTID0gIm5hc20tbmF0aXZlIgotCi1CQVNFUFYgPSAiJHtAZC5nZXRWYXIoJ1BWJyxUcnVlKS5zcGxpdCgnKycpWzFdfSIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke0JBU0VQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gIjg2YjBkNWY3NTA3YzJlNmMyMWMwMDIxOTE2MmMzYzQ0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyMWJiNWQzMDQzZTdhYzA2M2NlMzAyNmQ5YTU5Y2MyYWIyZTk2MzZjNjU1YTI1MTVhZjVmNDcwNjEyMjIzM2UiCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJqcGVnLXR1cmJvL2ZpbGVzLyIKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9saWJqcGVnLXR1cmJvL2ZpbGVzLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCi0KLVMgPSAiJHtXT1JLRElSfS8ke0JQTn0tJHtCQVNFUFZ9IgotCi0jIERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGpwZWcKLVBST1ZJREVTID0gImpwZWciCi1SUFJPVklERVNfJHtQTn0gKz0gImpwZWciCi1SUkVQTEFDRVNfJHtQTn0gKz0gImpwZWciCi1SQ09ORkxJQ1RTXyR7UE59ICs9ICJqcGVnIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotIyBXb3JrIGFyb3VuZCBtaXNzaW5nIHgzMiBBQkkgc3VwcG9ydAotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLS13aXRob3V0LXNpbWQiLCAiIiwgZCl9IgotCi1QQUNLQUdFUyA9KyAianBlZy10b29scyBsaWJ0dXJib2pwZWciCi0KLURFU0NSSVBUSU9OX2pwZWctdG9vbHMgPSAiVGhlIGpwZWctdG9vbHMgcGFja2FnZSBpbmNsdWRlcyBjbGllbnQgcHJvZ3JhbXMgdG8gYWNjZXNzIGxpYmpwZWcgZnVuY3Rpb25hbGl0eS4gIFRoZXNlIHRvb2xzIGFsbG93IGZvciB0aGUgY29tcHJlc3Npb24sIGRlY29tcHJlc3Npb24sIHRyYW5zZm9ybWF0aW9uIGFuZCBkaXNwbGF5IG9mIEpQRUcgZmlsZXMgYW5kIGJlbmNobWFya2luZyBvZiB0aGUgbGlianBlZyBsaWJyYXJ5LiIKLUZJTEVTX2pwZWctdG9vbHMgPSAiJHtiaW5kaXJ9LyoiCi0KLURFU0NSSVBUSU9OX2xpYnR1cmJvanBlZyA9ICJBIFNJTUQtYWNjZWxlcmF0ZWQgSlBFRyBjb2RlYyB3aGljaCBwcm92aWRlcyBvbmx5IFR1cmJvSlBFRyBBUElzIgotRklMRVNfbGlidHVyYm9qcGVnID0gIiR7bGliZGlyfS9saWJ0dXJib2pwZWcuc28uKiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94L2xpYnBuZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2Q1MDdmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotRnJvbSAxOWMzZDI0MjAzNDc0OGIzYzYwNzY1NjgzZTFmZjRlMmRmOTcwMjA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLURhdGU6IFR1ZSwgMTAgRGVjIDIwMTMgMTE6Mzc6MzIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBpbXByb3ZlIGxpYnBuZyBkZXRlY3Rpb24KLQotSW5zdGVhZCBvZiBsb29raW5nIGZvciAibGlicG5nMTIiIGV4cGxpY2l0bHkgdGhvdWdoIHBrZy1jb25maWcgYW5kIHRoZW4gZmFsbGluZwotYmFjayB0byBsaWJyYXJ5IGh1bnRpbmcsIGp1c3QgdXNlIHBrZy1jb25maWcgdG8gZmluZCAibGlicG5nIiB3aGljaCBpcyBwcm92aWRlZAotYnkgYm90aCBsaWJwbmcxMiBhbmQgbGlicG5nMTYuCi0KLVRoaXMgYWxzbyBtYWtlcyB0aGUgbGlicG5nIGRldGVjdGlvbiBkZXRlcm1pbmlzdGljLgotCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMjkgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggOGEyODA3Ni4uNjVkN2M3OSAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzQsNyArMzQsNyBAQCBBQ19BUkdfRU5BQkxFKGpwZWcsCi0gICBlbmFibGVfanBlZz0kZW5hYmxldmFsLCBlbmFibGVfanBlZz1ubykKLSAKLSBBQ19BUkdfRU5BQkxFKHBuZywKLS0gIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgcG5nIHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwKLSsgIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgUE5HIHN1cHBvcnQgW2RlZmF1bHQ9ZW5hYmxlZF1dLAotICAgICAgZW5hYmxlX3BuZz0kZW5hYmxldmFsLCBlbmFibGVfcG5nPXllcyApCi0gCi0gQUNfQVJHX0VOQUJMRShkb3h5Z2VuLWRvY3MsICAgICAKLUBAIC0xNTYsMjkgKzE1NiwxMCBAQCBmaQotIGRubCAtLS0tLS0gQ2hlY2sgZm9yIFBORyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAKLSBpZiB0ZXN0IHgkZW5hYmxlX3BuZyAhPSB4bm87IHRoZW4KLS0gIEFDX01TR19DSEVDS0lORyhmb3IgbGlicG5nMTIpCi0tICBpZiB0ZXN0IHgkUEtHX0NPTkZJRyAhPSB4bm8gJiYgJFBLR19DT05GSUcgLS1leGlzdHMgbGlicG5nMTI7IHRoZW4gCi0tICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKLS0gICAgICAgIFBOR19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgbGlicG5nMTJgCi0tCVBOR19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGxpYnBuZzEyYAotLSAgICAgICAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQbmddKQotLQlTVVBQT1JUU19QTkc9MQotLQlQTkdfUkVRVUlSRUQ9ImxpYnBuZzEyIgotLSAgZWxzZQotLQlBQ19NU0dfUkVTVUxUKG5vKQotLSAgICAgICAgIyBBQ19DSEVDS19IRUFERVJTKHBuZy5oLCBbIGhhdmVfcG5nX2g9InllcyIgXSwgWyBoYXZlX3BuZ19oPSJubyIgXSApCi0tICAgICAgICBBQ19DSEVDS19MSUIoW3BuZ10sIFtwbmdfY3JlYXRlX3JlYWRfc3RydWN0XSwgW2hhdmVfcG5nPSJ5ZXMiXSwgW2hhdmVfcG5nPSJubyJdKQotLQotLSAgICAgICAgaWYgdGVzdCB4JGhhdmVfcG5nPXh5ZXMgJiYgdGVzdCB4JGhhdmVfcG5nX2g9eHllczsgdGhlbiAKLS0gICAgICAgICAgICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBuZ10pCi0tCSAgICBTVVBQT1JUU19QTkc9MQotLSAgICAgICAgICAgIFBOR19MSUJTPSItbHBuZyAtbHoiCi0tICAgICAgICAgICAgTUJfRVhUUkFfTElCUz0iJE1CX0VYVFJBX0xJQlMgJFBOR19MSUJTIgotLSAgICAgICAgZWxzZQotLQkgICAgQUNfTVNHX1dBUk4oWyoqKiBDYW5ub3QgZmluZCBQTkcsIGRpc2FibGluZyBzdXBwb3J0XSkKLS0gICAgICAgICAgICBlbmFibGVfcG5nPW5vCi0tCWZpCi0tICBmaQotKyAgUEtHX0NIRUNLX01PRFVMRVMoUE5HLCBsaWJwbmcpCi0rICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBOR10pCi0rICBTVVBQT1JUU19QTkc9MQotKyAgUE5HX1JFUVVJUkVEPSJsaWJwbmciCi0gZmkKLSAKLSAKLS0tIAotMS44LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmViNjc1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLVNVTU1BUlkgPSAiTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgY29yZSBsaWJyYXJ5IgotU0VDVElPTiA9ICJ4MTEvbGlicyIKLUhPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3QuY29tLyIKLQotTElDRU5TRSA9ICJMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibWIvbWJleHAuYztlbmRsaW5lPTIwO21kNT0yOGMwYWVmM2IyM2UzMDg0NjRmNWRhZTZhMTFiMGQyZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi9tYmRvdGRlc2t0b3AuYztlbmRsaW5lPTIxO21kNT01YTI4NzE1NmIzMjA3ZTg1MWMxZDY4ZDA5YzQzOWI1MSIKLQotREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IgotCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC8ke0JQTn0vJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vbGlicG5nLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZmM2Y2M4MDdmNTVhM2U3Yzc1MmQ4MDEzMTc2ODc1ZDciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU0Y2FiNTJlMzA0YTM1MTJjOGRmNGJlNTlkNjkwY2YzOTIxYmJiNjhhMjhlZGU3ZmUyNmI5MzUzNDIxN2I1MyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1QQUNLQUdFQ09ORklHID8/PSAianBlZyBwbmcgeGZ0IHhzZXR0aW5ncyIKLVBBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgotUEFDS0FHRUNPTkZJR1twYW5nb10gPSAiLS1lbmFibGUtcGFuZ28sLS1kaXNhYmxlLXBhbmdvLHBhbmdvIgotUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLGxpYnBuZyIKLVBBQ0tBR0VDT05GSUdbeGZ0XSA9ICItLWVuYWJsZS14ZnQsLS1kaXNhYmxlLXhmdCxsaWJ4ZnQiCi1QQUNLQUdFQ09ORklHW3hzZXR0aW5nc10gPSAiLS1lbmFibGUteHNldHRpbmdzLC0tZGlzYWJsZS14c2V0dGluZ3MsbGlieHNldHRpbmdzLWNsaWVudCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQ1ZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjEyLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgY29yZSBsaWJyYXJ5IgorU0VDVElPTiA9ICJ4MTEvbGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3QuY29tLyIKKworTElDRU5TRSA9ICJMR1BMdjIrICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5NSVQ7bWQ1PWY0NWVkOTMzMmI0ZjUwYTM1YWRmMjA2NWFkZGU0Y2E3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1iL21iZXhwLmM7ZW5kbGluZT0yMDttZDU9MjhjMGFlZjNiMjNlMzA4NDY0ZjVkYWU2YTExYjBkMmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibWIveHNldHRpbmdzLWNsaWVudC5jO2VuZGxpbmU9MjA7bWQ1PTRiMTA2YTM4NzYwMmRiOGQ5MWE1MGQ1Y2RmZDY1MDMxIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhleHQiCisKKyNTUkNSRVYgZm9yIDEuMTIKK1NSQ1JFViA9ICJlODQ2ZWU0MzRmOGUyM2Q5ZGIzOGFmMTNjNTIzZjc5MTQ5NWUwZTg3IgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImpwZWcgcG5nIHhmdCIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1twYW5nb10gPSAiLS1lbmFibGUtcGFuZ28sLS1kaXNhYmxlLXBhbmdvLHBhbmdvIgorUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbeGZ0XSA9ICItLWVuYWJsZS14ZnQsLS1kaXNhYmxlLXhmdCxsaWJ4ZnQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMi8wMDAxLXNyYy12aWRlby1tYWtlLWl0LWNvbXBhdGlibGUtd2l0aC13YXlsYW5kLTEuMTAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMi8wMDAxLXNyYy12aWRlby1tYWtlLWl0LWNvbXBhdGlibGUtd2l0aC13YXlsYW5kLTEuMTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlNmQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyLzAwMDEtc3JjLXZpZGVvLW1ha2UtaXQtY29tcGF0aWJsZS13aXRoLXdheWxhbmQtMS4xMC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIGIxZWQzNTMzNDMzNTAxZWM1MmM4Mjg5YTViM2EyOTRlNTdlN2Y3OTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDI2IE1heSAyMDE2IDExOjMxOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy92aWRlbzogbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggd2F5bGFuZCAxLjEwCisKK3wgYnVpbGQvLmxpYnMvU0RMX3dheWxhbmRldmVudHMubzogSW4gZnVuY3Rpb24gYHdsX3JlZ2lzdHJ5X2JpbmQnOgorfCAvdXNyL2luY2x1ZGUvd2F5bGFuZC1jbGllbnQtcHJvdG9jb2wuaDozMDU6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3JfdmVyc2lvbmVkJworfCAvdXNyL2luY2x1ZGUvd2F5bGFuZC1jbGllbnQtcHJvdG9jb2wuaDozMDU6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3JfdmVyc2lvbmVkJworfCBidWlsZC8ubGlicy9TRExfd2F5bGFuZGtleWJvYXJkLm86IEluIGZ1bmN0aW9uIGB3bF9yZWdpc3RyeV9iaW5kJzoKK3wgL3Vzci9pbmNsdWRlL3dheWxhbmQtY2xpZW50LXByb3RvY29sLmg6MzA1OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3bF9wcm94eV9tYXJzaGFsX2NvbnN0cnVjdG9yX3ZlcnNpb25lZCcKK3wgL3Vzci9pbmNsdWRlL3dheWxhbmQtY2xpZW50LXByb3RvY29sLmg6MzA1OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3bF9wcm94eV9tYXJzaGFsX2NvbnN0cnVjdG9yX3ZlcnNpb25lZCcKK3wgYnVpbGQvLmxpYnMvU0RMX3dheWxhbmR2aWRlby5vOiBJbiBmdW5jdGlvbiBgd2xfcmVnaXN0cnlfYmluZCc6Cit8IC91c3IvaW5jbHVkZS93YXlsYW5kLWNsaWVudC1wcm90b2NvbC5oOjMwNTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3Rvcl92ZXJzaW9uZWQnCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworfCBtYWtlOiAqKiogW2J1aWxkL2xpYlNETDIubGFdIEVycm9yIDEKK3wgRVJST1I6IG9lX3J1bm1ha2UgZmFpbGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0KKyBzcmMvdmlkZW8vd2F5bGFuZC9TRExfd2F5bGFuZGR5bi5oIHwgMSArCisgc3JjL3ZpZGVvL3dheWxhbmQvU0RMX3dheWxhbmRzeW0uaCB8IDQgKysrKworIHNyYy92aWRlby93ZWJvcy9TRExfd2F5bGFuZGR5bi5oICAgfCAxICsKKyBzcmMvdmlkZW8vd2Vib3MvU0RMX3dheWxhbmRzeW0uaCAgIHwgNCArKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvdmlkZW8vd2F5bGFuZC9TRExfd2F5bGFuZGR5bi5oIGIvc3JjL3ZpZGVvL3dheWxhbmQvU0RMX3dheWxhbmRkeW4uaAoraW5kZXggOGQ5MzEzYS4uYzdiMDE1NyAxMDA2NDQKKy0tLSBhL3NyYy92aWRlby93YXlsYW5kL1NETF93YXlsYW5kZHluLmgKKysrKyBiL3NyYy92aWRlby93YXlsYW5kL1NETF93YXlsYW5kZHluLmgKK0BAIC03OSw2ICs3OSw3IEBAIHZvaWQgU0RMX1dBWUxBTkRfVW5sb2FkU3ltYm9scyh2b2lkKTsKKyAjZGVmaW5lIHdsX3Byb3h5X2dldF91c2VyX2RhdGEgKCpXQVlMQU5EX3dsX3Byb3h5X2dldF91c2VyX2RhdGEpCisgI2RlZmluZSB3bF9wcm94eV9hZGRfbGlzdGVuZXIgKCpXQVlMQU5EX3dsX3Byb3h5X2FkZF9saXN0ZW5lcikKKyAjZGVmaW5lIHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3IgKCpXQVlMQU5EX3dsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3IpCisrI2RlZmluZSB3bF9wcm94eV9tYXJzaGFsX2NvbnN0cnVjdG9yX3ZlcnNpb25lZCAoKldBWUxBTkRfd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3Rvcl92ZXJzaW9uZWQpCisgCisgI2RlZmluZSB3bF9zZWF0X2ludGVyZmFjZSAoKldBWUxBTkRfd2xfc2VhdF9pbnRlcmZhY2UpCisgI2RlZmluZSB3bF9zdXJmYWNlX2ludGVyZmFjZSAoKldBWUxBTkRfd2xfc3VyZmFjZV9pbnRlcmZhY2UpCitkaWZmIC0tZ2l0IGEvc3JjL3ZpZGVvL3dheWxhbmQvU0RMX3dheWxhbmRzeW0uaCBiL3NyYy92aWRlby93YXlsYW5kL1NETF93YXlsYW5kc3ltLmgKK2luZGV4IGMzYjRmYTUuLmI5YTBkOTcgMTAwNjQ0CistLS0gYS9zcmMvdmlkZW8vd2F5bGFuZC9TRExfd2F5bGFuZHN5bS5oCisrKysgYi9zcmMvdmlkZW8vd2F5bGFuZC9TRExfd2F5bGFuZHN5bS5oCitAQCAtNTUsNiArNTUsMTAgQEAgU0RMX1dBWUxBTkRfU1lNKHZvaWQsIHdsX2xpc3RfaW5zZXJ0X2xpc3QsIChzdHJ1Y3Qgd2xfbGlzdCAqLCBzdHJ1Y3Qgd2xfbGlzdCAqKSkKKyBTRExfV0FZTEFORF9NT0RVTEUoV0FZTEFORF9DTElFTlRfMV80KQorIFNETF9XQVlMQU5EX1NZTShzdHJ1Y3Qgd2xfcHJveHkgKiwgd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3RvciwgKHN0cnVjdCB3bF9wcm94eSAqLCB1aW50MzJfdCBvcGNvZGUsIGNvbnN0IHN0cnVjdCB3bF9pbnRlcmZhY2UgKmludGVyZmFjZSwgLi4uKSkKKyAKKysvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBXYXlsYW5kID49IDEuMTAgKi8KKytTRExfV0FZTEFORF9NT0RVTEUoV0FZTEFORF9DTElFTlRfMV8xMCkKKytTRExfV0FZTEFORF9TWU0oc3RydWN0IHdsX3Byb3h5ICosIHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3JfdmVyc2lvbmVkLCAoc3RydWN0IHdsX3Byb3h5ICpwcm94eSwgdWludDMyX3Qgb3Bjb2RlLCBjb25zdCBzdHJ1Y3Qgd2xfaW50ZXJmYWNlICppbnRlcmZhY2UsIHVpbnQzMl90IHZlcnNpb24sIC4uLikpCisrCisgU0RMX1dBWUxBTkRfSU5URVJGQUNFKHdsX3NlYXRfaW50ZXJmYWNlKQorIFNETF9XQVlMQU5EX0lOVEVSRkFDRSh3bF9zdXJmYWNlX2ludGVyZmFjZSkKKyBTRExfV0FZTEFORF9JTlRFUkZBQ0Uod2xfc2htX3Bvb2xfaW50ZXJmYWNlKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMl8yLjAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC40LmJiCmluZGV4IDQyODIzMDcuLjg0NGZmMzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC40LmJiCkBAIC0xNSw3ICsxNSw5IEBACiBERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEgbmF0aXZlc2RrLWxpYnhyYW5kciBuYXRpdmVzZGstbGlieHJlbmRlciBuYXRpdmVzZGstbGlieGV4dCcsICcnLCBkKX0iCiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnL3JlbGVhc2UvU0RMMi0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vbGlua2FnZS5wYXRjaCIKKyAgICAgICAgICAgZmlsZTovL2xpbmthZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtdmlkZW8tbWFrZS1pdC1jb21wYXRpYmxlLXdpdGgtd2F5bGFuZC0xLjEwLnBhdGNoIFwKKyIKIAogUyA9ICIke1dPUktESVJ9L1NETDItJHtQVn0iCiAKQEAgLTQ0LDcgKzQ2LDcgQEAKICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKICIKIFBBQ0tBR0VDT05GSUdbYWxzYV0gICAgICAgPSAiLS1lbmFibGUtYWxzYSAtLWRpc2FibGUtYWxzYXRlc3QsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIsIgotUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gICA9ICItLWVuYWJsZS12aWRlby1kaXJlY3RmYiAtLWRpc2FibGUtdmlkZW8tZGlyZWN0ZmIsZGlyZWN0ZmIiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSAgID0gIi0tZW5hYmxlLXZpZGVvLWRpcmVjdGZiLC0tZGlzYWJsZS12aWRlby1kaXJlY3RmYixkaXJlY3RmYiIKIFBBQ0tBR0VDT05GSUdbZ2xlczJdICAgICAgPSAiLS1lbmFibGUtdmlkZW8tb3BlbmdsZXMsLS1kaXNhYmxlLXZpZGVvLW9wZW5nbGVzLHZpcnR1YWwvbGliZ2xlczIiCiBQQUNLQUdFQ09ORklHW29wZW5nbF0gICAgID0gIi0tZW5hYmxlLXZpZGVvLW9wZW5nbCwtLWRpc2FibGUtdmlkZW8tb3BlbmdsLHZpcnR1YWwvbGliZ2wiCiBQQUNLQUdFQ09ORklHW3B1bHNlYXVkaW9dID0gIi0tZW5hYmxlLXB1bHNlYXVkaW8sLS1kaXNhYmxlLXB1bHNlYXVkaW8scHVsc2VhdWRpbyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L01JVC1zdHlsZS1saWNlbnNlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOGRlOTguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMDEgUmVkIEhhdCwgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKLSAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwotICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgUmVkIEhhdCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgotICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAotICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgUmVkIEhhdCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCi0gKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKLSAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqIFJFRCBIQVQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFJFRCBIQVQKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgotICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiAKLSAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKgotICogQXV0aG9yOiAgT3dlbiBUYXlsb3IsIFJlZCBIYXQsIEluYy4KLSAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvbGluay14MTEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA4ZDBkNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotSW5kZXg6IFhzZXR0aW5ncy1jbGllbnQtMC4xMC9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFhzZXR0aW5ncy1jbGllbnQtMC4xMC5vcmlnL01ha2VmaWxlLmFtCTIwMDgtMDItMDcgMTQ6NDk6NTQuMDAwMDAwMDAwICswMDAwCi0rKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL01ha2VmaWxlLmFtCTIwMDgtMDItMDcgMTQ6NTA6MDAuMDAwMDAwMDAwICswMDAwCi1AQCAtOSw0ICs5LDQgQEAKLSAKLSBsaWJYc2V0dGluZ3NfY2xpZW50X2xhX1NPVVJDRVM9ICQoc291cmNlX2MpICQoc291cmNlX2gpCi0gCi0tbGliWHNldHRpbmdzX2NsaWVudF9sYV9MSUJBREQgICAgICA9IEBYX0xJQlNACi1cIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLStsaWJYc2V0dGluZ3NfY2xpZW50X2xhX0xJQkFERCAgICAgID0gQFhfTElCU0AgLWxYMTEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA1ZDA4ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KLWRpZmYgLU51cmQgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCi0tLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYwkyMDAzLTAzLTI4IDEyOjM5OjUxLjAwMDAwMDAwMCArMDIwMAotKysrIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMJMjAxMy0wMS0xMSAwNzozNzoyMS40OTE1OTc3NDMgKzAyMDAKLUBAIC0xLDcgKzEsNyBAQAotICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KLSBBQ19JTklUKHhzZXR0aW5ncy1jbGllbnQuYykKLSBBTV9JTklUX0FVVE9NQUtFKFhzZXR0aW5ncy1jbGllbnQsIDAuMTApCi0tQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKLStBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKLQotIENGTEFHUz0iLU9zIC1XYWxsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50XzAuMTAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YzVlMjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLVNVTU1BUlkgPSAidXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBYc2V0dGluZ3MgcHJvdG9jb2wiCi1ERVNDUklQVElPTiA9ICJMaWJyYXJpZXMgdXNlZCBmb3IgYXBwbGljYXRpb25zIG1ha2luZyB1c2Ugb2YgdGhlIFhzZXR0aW5ncyBjb25maWd1cmF0aW9uIFwKLXNldHRpbmcgcHJvcGFnYXRpb24gcHJvdG9jb2wuIENvbnRyb2xzIHNldHRpbmcgb2YgZG91YmxlIGNsaWNrIHRpbWVvdXQsIGRyYWctYW5kLWRyb3AgXAotdGhyZXNob2xkLCBhbmQgZGVmYXVsdCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBmb3IgYWxsIGFwcGxpY2F0aW9ucyBydW5uaW5nIHdpdGhpbiBhIFwKLWRlc2t0b3AuIgotSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnL3NvdXJjZXMvb3B0aW9uYWwtZGVwZW5kZW5jaWVzLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotU0VDVElPTiA9ICJ4L2xpYnMiCi1MSUNFTlNFID0gIk1JVC1zdHlsZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jbGllbnQuaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY29tbW9uLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIiCi1ERVBFTkRTID0gInZpcnR1YWwvbGlieDExIgotCi1QUiA9ICJyNSIKLQotaGVhZGVycyA9ICJ4c2V0dGluZ3MtY29tbW9uLmggeHNldHRpbmdzLWNsaWVudC5oIgotCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC9vcHRpb25hbC1kZXBlbmRlbmNpZXMvWHNldHRpbmdzLWNsaWVudC0wLjEwLnRhci5neiBcCi0gICAgICAgIGZpbGU6Ly9NSVQtc3R5bGUtbGljZW5zZSBcCi0gICAgICAgIGZpbGU6Ly9saW5rLXgxMS5wYXRjaDthcHBseT15ZXMgXAotICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImMxNGFhOWRiNmMwOTdlMDMwNmRhYzk3ZmI3ZGExYWRkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImYyNzRhNGJjOTY5YWUxOTI5OTRhODU2YjdmNzg2YzZmY2U5NmJhZTc3Zjk2YzFjMmI3MWRkOTc1OTllMDZlNDMiCi0KLVMgPSAiJHtXT1JLRElSfS9Yc2V0dGluZ3MtY2xpZW50LTAuMTAiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0jIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgICMgVGhpcyBwYWNrYWdlIGRvZXNuJ3Qgc2hpcCB3aXRoIGl0cyBvd24gQ09QWUlORyBmaWxlIGFuZAotICAgICMgYXV0b3Rvb2xzIHdpbGwgaW5zdGFsbCBhIEdQTHYyIG9uZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgTUlULXN0eWxlIGxpY2Vuc2UgaGVyZS4KLSAgICAjIEFkZCB0aGUgY29ycmVjdCBsaWNlbnNlIGhlcmUgdG8gYXZvaWQgY29uZnVzaW9uLgotICAgIGNwIC1mICR7V09SS0RJUn0vTUlULXN0eWxlLWxpY2Vuc2UgJHtTfS9DT1BZSU5HCi19Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fMS4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZDJkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtXzEuMi4xLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggbGlnaHR3ZWlnaHQgd2luZG93IG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvd20uaDtlbmRsaW5lPTIxO21kNT1hN2U4NDQ0NjVlZGJjZjc5YzI4MjM2OWY5M2NhYTgzNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTNlNWQ5ZjgzMmI1MjdiMGQ3MmRiZThlM2M0YzYwYjk1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy93bS5jO2VuZGxpbmU9MjE7bWQ1PThkYzlkMjQ0NzdkODdlZjVkZmJjMmU0OTI3MTQ2YWFiIgorCitTRUNUSU9OID0gIngxMS93bSIKK0RFUEVORFMgPSAibGlibWF0Y2hib3ggdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4cmVuZGVyIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGV4cGF0IGdjb25mIGxpYnhjdXJzb3IgbGlieGZpeGVzIgorCisjIFNSQ1JFViB0YWdnZWQgMS4yLjEKK1NSQ1JFViA9ICI5ZmQxODA2ZGZhN2M4ZjIyMDJkYjE4YjdiYzg4MDg1N2EzMDE5ZjhjIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tYXRjaGJveC13aW5kb3ctbWFuYWdlciBcCisgICAgICAgICAgIGZpbGU6Ly9rYmRjb25maWciCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL2Jsb25kaWUvbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvRGVmYXVsdC9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9NQk9wdXMvbWF0Y2hib3giCisKK0VYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteHJtIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtZXhwYXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtbGliPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWV4cGF0LWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9IgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisJaW5zdGFsbCAke1dPUktESVJ9L2tiZGNvbmZpZyAke1N9L2RhdGEva2JkY29uZmlnCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTc2ODI4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotU1VNTUFSWSA9ICJNYXRjaGJveCBsaWdodHdlaWdodCB3aW5kb3cgbWFuYWdlciIKLUhPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy93bS5oO2VuZGxpbmU9MjE7bWQ1PWE3ZTg0NDQ2NWVkYmNmNzljMjgyMzY5ZjkzY2FhODM1IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0yMTttZDU9M2U1ZDlmODMyYjUyN2IwZDcyZGJlOGUzYzRjNjBiOTUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dtLmM7ZW5kbGluZT0yMTttZDU9OGRjOWQyNDQ3N2Q4N2VmNWRmYmMyZTQ5MjcxNDZhYWIiCi0KLVNFQ1RJT04gPSAieDExL3dtIgotREVQRU5EUyA9ICJsaWJtYXRjaGJveCB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyZW5kZXIgc3RhcnR1cC1ub3RpZmljYXRpb24gZXhwYXQgZ2NvbmYgbGlieGN1cnNvciBsaWJ4Zml4ZXMiCi0KLVNSQ1JFViA9ICI4MTc4ZTcwZDVjNzQyYzRjZDYzYjUxZGYyMjhjYzhhYTM1OTRkNTE4IgotUFYgPSAiMS4yK2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIFwKLSAgICAgICAgICAgZmlsZTovL2tiZGNvbmZpZyIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1GSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94IFwKLSAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWF0Y2hib3ggXAotICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvYmxvbmRpZS9tYXRjaGJveCBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9EZWZhdWx0L21hdGNoYm94IFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL01CT3B1cy9tYXRjaGJveCIKLQotRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiBcCi0gICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14cm0gXAotICAgICAgICAgICAgICAgICAtLWVuYWJsZS1leHBhdCBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1leHBhdC1saWI9JHtTVEFHSU5HX0xJQkRJUn0gXAotICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtaW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0iCi0KLWRvX2luc3RhbGxfcHJlcGVuZCgpIHsKLQlpbnN0YWxsICR7V09SS0RJUn0va2JkY29uZmlnICR7U30vZGF0YS9rYmRjb25maWcKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVudS1jYWNoZS9tZW51LWNhY2hlXzEuMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjEuYmIKaW5kZXggZWI4MGNkMy4uYTFhOGUyNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjEuYmIKQEAgLTYsNyArNiw3IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wOTY0YzY4OWZjZjRjMjFjNjc5N2VhODc0MDg0MTZiNiIKIAogU0VDVElPTiA9ICJ4MTEvbGlicyIKLURFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIGxpYmZtLWV4dHJhIgorREVQRU5EUyA9ICJnbGliLTIuMCBsaWJmbS1leHRyYSIKIAogU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbHhkZS9tZW51LWNhY2hlLSR7UFZ9LnRhci54eiIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL2NsYW5nLWNvbXBpbGUtUFI4OTU5OS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy9jbGFuZy1jb21waWxlLVBSODk1OTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiZDMyNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy9jbGFuZy1jb21waWxlLVBSODk1OTkucGF0Y2gKQEAgLTAsMCArMSwxMTYgQEAKK0Zyb20gNWVjMTQwYzE3YjU0YzI1OTIwMDkxNTAxYjY2NWI5YWE4MDljYzVlOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hdHQgVHVybmVyIDxtYXR0c3Q4OEBnbWFpbC5jb20+CitEYXRlOiBNb24sIDExIEp1bCAyMDE2IDEwOjQ0OjI1IC0wNzAwCitTdWJqZWN0OiBtYXBpOiBNYXNzYWdlIGNvZGUgdG8gYWxsb3cgY2xhbmcgdG8gY29tcGlsZS4KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworQWNjb3JkaW5nIHRvIGh0dHBzOi8vbGx2bS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzgjYzMgdGhpcyBjb2RlCit3YXMgdmlvbGF0aW5nIHRoZSBzcGVjLCByZXN1bHRpbmcgaW4gaXQgZmFpbGluZyB0byBjb21waWxlLgorCitDYzogbWVzYS1zdGFibGVAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCitDby1hdXRob3JlZC1ieTogVG9tYXN6IFBhd2XFgiBHYWpjIDx0cGd4eXpAZ21haWwuY29tPgorQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NTk5CitSZXZpZXdlZC1ieTogRW1pbCBWZWxpa292IDxlbWlsLnZlbGlrb3ZAY29sbGFib3JhLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzc5OWQ4ZC4uMWNhODM1OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjI2LDYgKzIyNiw3IEBAIEFYX0dDQ19GVU5DX0FUVFJJQlVURShbcGFja2VkXSkKKyBBWF9HQ0NfRlVOQ19BVFRSSUJVVEUoW3B1cmVdKQorIEFYX0dDQ19GVU5DX0FUVFJJQlVURShbcmV0dXJuc19ub25udWxsXSkKKyBBWF9HQ0NfRlVOQ19BVFRSSUJVVEUoW3VudXNlZF0pCisrQVhfR0NDX0ZVTkNfQVRUUklCVVRFKFt2aXNpYmlsaXR5XSkKKyBBWF9HQ0NfRlVOQ19BVFRSSUJVVEUoW3dhcm5fdW51c2VkX3Jlc3VsdF0pCisgQVhfR0NDX0ZVTkNfQVRUUklCVVRFKFt3ZWFrXSkKKyAKK2RpZmYgLS1naXQgYS9zcmMvbWFwaS9lbnRyeV94ODYtNjRfdGxzLmggYi9zcmMvbWFwaS9lbnRyeV94ODYtNjRfdGxzLmgKK2luZGV4IDM4ZmFjY2MuLmM1MjYyYTEgMTAwNjQ0CistLS0gYS9zcmMvbWFwaS9lbnRyeV94ODYtNjRfdGxzLmgKKysrKyBiL3NyYy9tYXBpL2VudHJ5X3g4Ni02NF90bHMuaAorQEAgLTI1LDYgKzI1LDExIEBACisgICogICAgQ2hpYS1JIFd1IDxvbHZAbHVuYXJnLmNvbT4KKyAgKi8KKyAKKysjaWZkZWYgSEFWRV9GVU5DX0FUVFJJQlVURV9WSVNJQklJVFkKKysjZGVmaW5lIEhJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisrI2Vsc2UKKysjZGVmaW5lIEhJRERFTgorKyNlbmRpZgorIAorIF9fYXNtX18oIi50ZXh0XG4iCisgICAgICAgICAiLmJhbGlnbiAzMlxuIgorQEAgLTU0LDggKzU5LDggQEAgZW50cnlfcGF0Y2hfcHVibGljKHZvaWQpCisgeworIH0KKyAKKy1zdGF0aWMgY2hhcgorLXg4Nl82NF9lbnRyeV9zdGFydFtdOworK2V4dGVybiBjaGFyCisreDg2XzY0X2VudHJ5X3N0YXJ0W10gSElEREVOOworIAorIG1hcGlfZnVuYworIGVudHJ5X2dldF9wdWJsaWMoaW50IHNsb3QpCitkaWZmIC0tZ2l0IGEvc3JjL21hcGkvZW50cnlfeDg2X3Rscy5oIGIvc3JjL21hcGkvZW50cnlfeDg2X3Rscy5oCitpbmRleCA0NmQyZWNlLi4yMzFiNDA5IDEwMDY0NAorLS0tIGEvc3JjL21hcGkvZW50cnlfeDg2X3Rscy5oCisrKysgYi9zcmMvbWFwaS9lbnRyeV94ODZfdGxzLmgKK0BAIC0yNyw2ICsyNywxMiBAQAorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysjaWZkZWYgSEFWRV9GVU5DX0FUVFJJQlVURV9WSVNJQklJVFkKKysjZGVmaW5lIEhJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisrI2Vsc2UKKysjZGVmaW5lIEhJRERFTgorKyNlbmRpZgorKworIF9fYXNtX18oIi50ZXh0Iik7CisgCisgX19hc21fXygieDg2X2N1cnJlbnRfdGxzOlxuXHQiCitAQCAtNzEsOCArNzcsOCBAQCBfX2FzbV9fKCIudGV4dCIpOworIGV4dGVybiB1bnNpZ25lZCBsb25nCisgeDg2X2N1cnJlbnRfdGxzKCk7CisgCistc3RhdGljIGNoYXIgeDg2X2VudHJ5X3N0YXJ0W107Cistc3RhdGljIGNoYXIgeDg2X2VudHJ5X2VuZFtdOworK2V4dGVybiBjaGFyIHg4Nl9lbnRyeV9zdGFydFtdIEhJRERFTjsKKytleHRlcm4gY2hhciB4ODZfZW50cnlfZW5kW10gSElEREVOOworIAorIHZvaWQKKyBlbnRyeV9wYXRjaF9wdWJsaWModm9pZCkKK2RpZmYgLS1naXQgYS9zcmMvbWFwaS9lbnRyeV94ODZfdHNkLmggYi9zcmMvbWFwaS9lbnRyeV94ODZfdHNkLmgKK2luZGV4IGVhN2JhY2IuLjAzZDk3MzUgMTAwNjQ0CistLS0gYS9zcmMvbWFwaS9lbnRyeV94ODZfdHNkLmgKKysrKyBiL3NyYy9tYXBpL2VudHJ5X3g4Nl90c2QuaAorQEAgLTI1LDYgKzI1LDExIEBACisgICogICAgQ2hpYS1JIFd1IDxvbHZAbHVuYXJnLmNvbT4KKyAgKi8KKyAKKysjaWZkZWYgSEFWRV9GVU5DX0FUVFJJQlVURV9WSVNJQklJVFkKKysjZGVmaW5lIEhJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisrI2Vsc2UKKysjZGVmaW5lIEhJRERFTgorKyNlbmRpZgorIAorICNkZWZpbmUgWDg2X0VOVFJZX1NJWkUgMzIKKyAKK0BAIC01OCw4ICs2Myw4IEBAIF9fYXNtX18oIi5iYWxpZ24gMzJcbiIKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgInVfZXhlY21lbS5oIgorIAorLXN0YXRpYyBjb25zdCBjaGFyIHg4Nl9lbnRyeV9zdGFydFtdOworLXN0YXRpYyBjb25zdCBjaGFyIHg4Nl9lbnRyeV9lbmRbXTsKKytleHRlcm4gY29uc3QgY2hhciB4ODZfZW50cnlfc3RhcnRbXSBISURERU47CisrZXh0ZXJuIGNvbnN0IGNoYXIgeDg2X2VudHJ5X2VuZFtdIEhJRERFTjsKKyAKKyB2b2lkCisgZW50cnlfcGF0Y2hfcHVibGljKHZvaWQpCistLSAKK2NnaXQgdjAuMTAuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvZGlzYWJsZS1hc20tb24tbm9uLWdjYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy9kaXNhYmxlLWFzbS1vbi1ub24tZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZDY3NTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvZGlzYWJsZS1hc20tb24tbm9uLWdjYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitDb25maWd1cmUgY2hlY2tzIGZvciBjb21waWxlciB0byBiZSBnY2MgYW5kIHRoZW4gaXQgZW5hYmxlcyBhc21fb2Zmc2V0cworZ2VuZXJhdGlvbi4gc2VlCisKK2h0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvbWVzYS9tZXNhL2NvbW1pdC8/aWQ9NzNjOWI0YjBlMDVmYzY2NjI5YmEyNTA4NDY5NDhkYzU1YzBlN2EwZAorCitIb3dldmVyLCB3ZSBtaXNzZWQgdGhlIGNoZWNrIHdoZW4gZW5hYmxpbmcgdGhpcyBvbiBjcm9zcyBjb21waWxhdGlvbgord2hlbiBhcmNoaXRlY3R1cmUgZm9yIGJvdGggaG9zdCBhbmQgdGFyZ2V0IGlzIHg4NgorCitGaXhlcyBlcnJvcnMgbGlrZQorLi9nZW5fbWF0eXBlcyA+IG1hdHlwZXMuaAorL2Jpbi9iYXNoOiAuL2dlbl9tYXR5cGVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0luZGV4OiBtZXNhLTEyLjAuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtZXNhLTEyLjAuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIG1lc2EtMTIuMC4xL2NvbmZpZ3VyZS5hYworQEAgLTczMiw3ICs3MzIsNyBAQCB0ZXN0ICJ4JGVuYWJsZV9hc20iID0geG5vICYmIEFDX01TR19SRVNVCisgaWYgdGVzdCAieCRlbmFibGVfYXNtIiA9IHh5ZXMgLWEgIngkY3Jvc3NfY29tcGlsaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICBpPzg2IHwgeDg2XzY0IHwgYW1kNjQpCistICAgICAgICBpZiB0ZXN0ICJ4JGhvc3RfY3B1IiAhPSAieCR0YXJnZXRfY3B1IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAieCRob3N0X2NwdSIgIT0gIngkdGFyZ2V0X2NwdSIgLW8gIngkYWN2X21lc2FfQ0xBTkciID0geHllczsgdGhlbgorICAgICAgICAgICAgIGVuYWJsZV9hc209bm8KKyAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtubywgY3Jvc3MgY29tcGlsaW5nXSkKKyAgICAgICAgIGZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MDU0Y2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotRnJvbSAzNjgyOWE4ZDdhZDI4ODg1MTVmYmVlOTVjMmE3MGIzZDYzNmQ3NTM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLURhdGU6IFdlZCwgOSBKdWwgMjAxNCAxNDozMDozMyArMDIwMAotU3ViamVjdDogW1BBVENIIDIvOV0gQ29ycmVjdGx5IGltcGxlbWVudCB3aXRoIEFDX1dJVEgoZ2x1dCkgc28gdGhhdAotIC0td2l0aG91dC1nbHV0IHdvcmtzLgotCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC82NDQxNy8pCi0KLS0tLQotIGNvbmZpZ3VyZS5hYyB8IDI2ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBjNGVlMTJiLi45NDQ1NDI0IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC02NywyMSArNjcsMjUgQEAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xfQ0ZMQUdTIgotIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xfTElCUyIKLSAKLSBkbmwgQ2hlY2sgZm9yIEdMVVQKLS1HTFVUX0NGTEFHUz0iIgotLUdMVVRfTElCUz0tbGdsdXQKLS1nbHV0X2VuYWJsZWQ9eWVzCi0rZ2x1dF9lbmFibGVkPW5vCi0gQUNfQVJHX1dJVEgoW2dsdXRdLAotIAlbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbHV0PURJUl0sCi0gCQkJW2dsdXQgaW5zdGFsbCBkaXJlY3RvcnldKV0sCi0gCVtHTFVUX0NGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlIgotLQkgR0xVVF9MSUJTPSItTCR3aXRodmFsL2xpYiAtbGdsdXQiXSkKLS1BQ19DSEVDS19IRUFERVIoW0dML2dsdXQuaF0sCi0tCQlbXSwKLS0JCVtnbHV0X2VuYWJsZWQ9bm9dKQotLUFDX0NIRUNLX0xJQihbZ2x1dF0sCi0tCQlbZ2x1dEluaXRdLAotLQkJW10sCi0tCQlbZ2x1dF9lbmFibGVkPW5vXSkKLSsJIEdMVVRfTElCUz0iLUwkd2l0aHZhbC9saWIgLWxnbHV0Il0sCi0rCVtHTFVUX0NGTEFHUz0iIgotKwkgR0xVVF9MSUJTPSItbGdsdXQiXQotKyAgICAgICAgKQotK0FTX0lGKFt0ZXN0ICJ4JHdpdGhfZ2x1dCIgIT0geG5vXSwKLSsgICAgICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHV0LmhdLAotKyAgICAgICAgICAgICAgICAgICAgICAgW10sCi0rICAgICAgICAgICAgICAgICAgICAgICBbZ2x1dF9lbmFibGVkPW5vXSkKLSsgICAgICAgQUNfQ0hFQ0tfTElCKFtnbHV0XSwKLSsgICAgICAgICAgICAgICAgICAgIFtnbHV0SW5pdF0sCi0rICAgICAgICAgICAgICAgICAgICBbXSwKLSsgICAgICAgICAgICAgICAgICAgIFtnbHV0X2VuYWJsZWQ9bm9dKQotKyAgICAgICBnbHV0X2VuYWJsZWQ9eWVzCi0rXSkKLSAKLSBkbmwgQ2hlY2sgZm9yIEZyZWVHTFVUIDIuNiBvciBsYXRlcgotIEFDX0VHUkVQX0hFQURFUihbZ2x1dEluaXRDb250ZXh0UHJvZmlsZV0sCi0tLSAKLTIuMC4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaAppbmRleCA2YjU4YzJiLi5mNmI1OWExIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCkBAIC0xLDggKzEsNyBAQAotRnJvbSBiMjVlOWM2NzVjZjU2MGI4YjAzN2RjODU1YzZiM2IxZDA5OTU3ODY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA3Nzk0Mzg3NzBiZWRmM2Q1M2U2YWQ4ZjdjZDY4ODliN2Y1MGRhZjNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgogRGF0ZTogV2VkLCA5IEp1bCAyMDE0IDE0OjIzOjQxICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMy85XSBjb25maWd1cmU6IEFsbG93IHRvIGRpc2FibGUgZGVtb3Mgd2hpY2ggcmVxdWlyZSBHTEVXIG9yCi0gR0xVCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogQWxsb3cgdG8gZGlzYWJsZSBkZW1vcyB3aGljaCByZXF1aXJlIEdMRVcgb3IgR0xVCiAKICogaW4gc29tZSBzeXN0ZW1zIHdpdGhvdXQgWDExIHN1cHBvcnQgd2UgZG9uJ3QgaGF2ZSBHTEVXLCBidXQKICAgbWVzYS1kZW1vcyBhcmUgc3RpbGwgdXNlZnVsCkBAIC0xMCwxNyArOSwyMCBAQAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKIFNpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworUG9ydCB0byA4LjMuMAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KIC0tLQogIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgIHwgNDkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KLSBzcmMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8IDE0ICsrKysrKy0tLQorIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgMTggKysrKysrKystLS0KICBzcmMvZGVtb3MvTWFrZWZpbGUuYW0gICAgICAgICB8IDczICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KICBzcmMvZWdsL01ha2VmaWxlLmFtICAgICAgICAgICB8ICA4ICsrKy0tCi0gc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gfCA0NCArKysrKysrKysrKysrKystLS0tLS0tLS0tLQotIHNyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtIHwgMzMgKysrKysrKysrKy0tLS0tLS0tLQotIDYgZmlsZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDg2IGRlbGV0aW9ucygtKQorIHNyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIHwgMTAgKysrKy0tCisgc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gfCAyOSArKysrKysrKy0tLS0tLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA5NDQ1NDI0Li5iYzRjOGQxIDEwMDY0NAoraW5kZXggMDUyNWIwOS4uMjg4MzRjZCAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCiBAQCAtOTMsMjUgKzkzLDQ0IEBAIEFDX0VHUkVQX0hFQURFUihbZ2x1dEluaXRDb250ZXh0UHJvZmlsZV0sCkBAIC05MiwxMCArOTQsMTEgQEAKICBBTV9DT05ESVRJT05BTChIQVZFX0dMRVNWMSwgdGVzdCAieCRnbGVzdjFfZW5hYmxlZCIgPSAieHllcyIpCiAgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjIsIHRlc3QgIngkZ2xlc3YyX2VuYWJsZWQiID0gInh5ZXMiKQogZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQotaW5kZXggMTY0N2Q2NC4uNzU0YzQ3YyAxMDA2NDQKK2luZGV4IDE2NDdkNjQuLjhiODlkZWUgMTAwNjQ0CiAtLS0gYS9zcmMvTWFrZWZpbGUuYW0KICsrKyBiL3NyYy9NYWtlZmlsZS5hbQotQEAgLTIzLDE0ICsyMywxOCBAQAorQEAgLTIyLDE1ICsyMiwxOSBAQAorICMgQXV0aG9yczoKICAjICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CiAgCiAraWYgSEFWRV9HTEVXCkBAIC0xMTYsNyArMTE5LDcgQEAKICAJb2Jqdmlld2VyIFwKICAJb3NkZW1vcyBcCiAgCXBlcmYgXAotQEAgLTQwLDggKzM5LDEyIEBAIFNVQkRJUlMgPSBcCitAQCAtNDAsOCArNDQsMTIgQEAgU1VCRElSUyA9IFwKICAJc2xhbmcgXAogIAl0ZXN0cyBcCiAgCXRvb2xzIFwKQEAgLTI4OSwxMCArMjkyLDEwIEBACiArCW9wZW52ZwogK2VuZGlmCiBkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQotaW5kZXggN2E5ODI4ZC4uMzQ1NWU3NSAxMDA2NDQKK2luZGV4IGZhMzk3YzIuLjIxODUzZTggMTAwNjQ0CiAtLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQogKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KLUBAIC0zNiwyOCArMzYsNDMgQEAgQU1fTERGTEFHUyA9IFwKK0BAIC0zNiw5ICszNiwxMiBAQCBBTV9MREZMQUdTID0gXAogIAkkKEVHTF9MSUJTKSBcCiAgCS1sbQogIApAQCAtMzAxLDQyICszMDQsMTMgQEAKICBpZiBIQVZFX0VHTAogIGlmIEhBVkVfR0xFU1YxCiAtbm9pbnN0X1BST0dSQU1TID0gXAotLQliaW5kdGV4IFwKLS0JY2xlYXIgXAotK25vaW5zdF9QUk9HUkFNUyArPSBcCi0gCWRyYXd0ZXhfc2NyZWVuIFwKLSsJZ2VhcnNfc2NyZWVuIFwKLSsJdG9ydXNfc2NyZWVuIFwKLSsJdHJpX3NjcmVlbgotKwotK2RyYXd0ZXhfc2NyZWVuX1NPVVJDRVMgPSBkcmF3dGV4LmMKLStnZWFyc19zY3JlZW5fU09VUkNFUyA9IGdlYXJzLmMKLSt0b3J1c19zY3JlZW5fU09VUkNFUyA9IHRvcnVzLmMKLSt0cmlfc2NyZWVuX1NPVVJDRVMgPSB0cmkuYwotKwotK2RyYXd0ZXhfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0rZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0rdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0rdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQotKwogK2lmIEhBVkVfWDExCi0rbm9pbnN0X1BST0dSQU1TICs9IFwKLSsJY2xlYXIKLSsKICtiaW5fUFJPR1JBTVMgPSBcCi0rCWJpbmR0ZXggXAorIAliaW5kdGV4IFwKKyAJY2xlYXIgXAogIAlkcmF3dGV4X3gxMSBcCi0gCWVnbGZiZGV2IFwKLSAJZXMxX2luZm8gXAotLQlnZWFyc19zY3JlZW4gXAotIAlnZWFyc194MTEgXAotIAltc2FhIFwKLSAJcGJ1ZmZlclwKLSAJcmVuZGVyX3RleCBcCi0gCXRleHR1cmVfZnJvbV9waXhtYXAgXAotLQl0b3J1c19zY3JlZW4gXAorQEAgLTUyLDggKzU1LDYgQEAgbm9pbnN0X1BST0dSQU1TID0gXAogIAl0b3J1c194MTEgXAotLQl0cmlfc2NyZWVuIFwKICAJdHJpX3gxMSBcCiAgCXR3b193aW4KIC1lbmRpZgpAQCAtMzQ0LDI2ICszMTgsNyBAQAogIAogIGJpbmR0ZXhfTERBREQgPSAkKFgxMV9MSUJTKQogIGVzMV9pbmZvX0xEQUREID0gJChYMTFfTElCUykKLUBAIC03MSwyMiArODYsMTUgQEAgdHdvX3dpbl9MREFERCA9ICQoWDExX0xJQlMpCi0gY2xlYXJfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEgJChFR0xfTElCUykgJChYMTFfTElCUykKLSBjbGVhcl9MREZMQUdTID0KLSAKLS1kcmF3dGV4X3NjcmVlbl9TT1VSQ0VTID0gZHJhd3RleC5jCi0tZ2VhcnNfc2NyZWVuX1NPVVJDRVMgPSBnZWFycy5jCi0tdG9ydXNfc2NyZWVuX1NPVVJDRVMgPSB0b3J1cy5jCi0tdHJpX3NjcmVlbl9TT1VSQ0VTID0gdHJpLmMKLS0KLSBkcmF3dGV4X3gxMV9TT1VSQ0VTID0gZHJhd3RleC5jCi0gZ2VhcnNfeDExX1NPVVJDRVMgPSBnZWFycy5jCi0gdG9ydXNfeDExX1NPVVJDRVMgPSB0b3J1cy5jCi0gdHJpX3gxMV9TT1VSQ0VTID0gdHJpLmMKLSAKLS1kcmF3dGV4X3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQotLWdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQotLXRvcnVzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQotLXRyaV9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKLS0KLSBkcmF3dGV4X3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorQEAgLTc2LDMgKzc3LDYgQEAgZHJhd3RleF94MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKICBnZWFyc194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKICB0b3J1c194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKICB0cmlfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCkBAIC0zNzEsMzUgKzMyNiwzNSBAQAogK2VuZGlmCiArZW5kaWYKIGRpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCi1pbmRleCA0MWMxYjgwLi43NGFmNDYwIDEwMDY0NAoraW5kZXggYjgwYmE1MC4uMTdmOGQ0OSAxMDA2NDQKIC0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCiArKysgYi9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQotQEAgLTM2LDI2ICszNiwyOSBAQCBBTV9MREZMQUdTID0gXAorQEAgLTMzLDI3ICszMywyOCBAQCBBTV9MREZMQUdTID0gXAorIAkkKEVHTF9MSUJTKSBcCisgCS1sbQorIAorK2Jpbl9QUk9HUkFNUyA9CisrCiAgaWYgSEFWRV9FR0wKICBpZiBIQVZFX0dMRVNWMgotIGJpbl9QUk9HUkFNUyA9IFwKKy1iaW5fUFJPR1JBTVMgPQorLWlmIEhBVkVfWDExCistYmluX1BST0dSQU1TICs9IFwKIC0JZXMyX2luZm8gXAotLQllczJnZWFyc19zY3JlZW4gXAogLQllczJnZWFyc194MTEgXAogLQllczJ0cmkKLSsJZXMyZ2VhcnNfc2NyZWVuCi0rCi0rZXMyZ2VhcnNfc2NyZWVuX1NPVVJDRVMgPSBlczJnZWFycy5jCi0rZXMyZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0rCistZW5kaWYKICBpZiBIQVZFX1dBWUxBTkQKICBiaW5fUFJPR1JBTVMgKz0gZXMyZ2VhcnNfd2F5bGFuZAogLWVuZGlmCiAtZW5kaWYKLS1lbmRpZgorKworK2VzMmdlYXJzX3dheWxhbmRfU09VUkNFUyA9IGVzMmdlYXJzLmMKKytlczJnZWFyc193YXlsYW5kX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfd2F5bGFuZC5sYQorIGVuZGlmCiAgCiAtZXMyX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQogLWVzMnRyaV9MREFERCA9ICQoWDExX0xJQlMpCi0rZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYwotK2VzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCi0rZW5kaWYKLSAKLS1lczJnZWFyc19zY3JlZW5fU09VUkNFUyA9IGVzMmdlYXJzLmMKICtpZiBIQVZFX1gxMQogK2Jpbl9QUk9HUkFNUyArPSBcCiArCWVzMnRyaSBcCkBAIC00MDksOCArMzY0LDYgQEAKICtlczJfaW5mb19MREFERCA9ICQoWDExX0xJQlMpCiAgZXMyZ2VhcnNfeDExX1NPVVJDRVMgPSBlczJnZWFycy5jCiAtCi0tZXMyZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0tCiAgZXMyZ2VhcnNfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCiArZXMydHJpX0xEQUREID0gJChYMTFfTElCUykKICtlbmRpZgpAQCAtNDIwLDUgKzM3Myw1IEBACiAtZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYwogLWVzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCiAtLSAKLTIuMC4wCisyLjEuNAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYzJhMzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLUZyb20gNDUzMzUzYTIyMWRlOWM2NDQ3OWY0MzcyNTY1ZDJjZDg1OTFiMzZjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgotRGF0ZTogRnJpLCAyOSBKdW4gMjAxMiAxMToyNjowNCArMDEwMAotU3ViamVjdDogW1BBVENIIDUvOV0gRml4IGJ1aWxkIHdoZW4gRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uIGlzbid0Ci0gcHJlc2VudAotCi1UaGUgRUdMIGRlbW9zIHdvbid0IGJ1aWxkIGFnYWluc3QgRUdMIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0IHN1cHBvcnQKLXRoZSBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24uIEZpeCB0aGlzLCBpbiBtb3N0IGNhc2VzLCBieQotd3JhcHBpbmcgcmVsZXZhbnQgYml0cyBvZiBjb2RlIGluICNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS4KLQotU2lnbmVkLW9mZi1ieTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+Ci0KLUFwcGxpZWQgYW5kIGZpeGVkIHVwIGluIFlvY3RvIGJ5Li4uCi0KLUludGVncmF0ZWQtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBsaW51eC5pbnRlbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jICAgICAgICB8ICA5ICsrKysrKystLQotIHNyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMgfCAxNCArKysrKysrKysrKysrKwotIHNyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgICAgICAgfCAgMiArKwotIHNyYy9lZ2wvb3BlbmdsL2RlbW8yLmMgICAgICAgfCAgNyArKysrKystCi0gc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYyAgICAgICB8ICA3ICsrKysrKy0KLSA1IGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvZWdsL2VnbHV0L2VnbHV0LmMgYi9zcmMvZWdsL2VnbHV0L2VnbHV0LmMKLWluZGV4IDJlZTZmMTUuLmY2YTJhZDQgMTAwNjQ0Ci0tLS0gYS9zcmMvZWdsL2VnbHV0L2VnbHV0LmMKLSsrKyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYwotQEAgLTc2LDggKzc2LDkgQEAgX2VnbHV0Tm93KHZvaWQpCi0gc3RhdGljIHZvaWQKLSBfZWdsdXREZXN0cm95V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbikKLSB7Ci0tICAgaWYgKF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9QQlVGRkVSX0JJVCAmJgotLSAgICAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSAhPSBFR0xfU0NSRUVOX0JJVF9NRVNBKQotKwotKyAgIGlmIChfZWdsdXQtPnN1cmZhY2VfdHlwZSA9PSBFR0xfV0lORE9XX0JJVCB8fAotKyAgICAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSA9PSBFR0xfUElYTUFQX0JJVCkKLSAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShfZWdsdXQtPmRweSwgd2luLT5zdXJmYWNlKTsKLSAKLSAgICBfZWdsdXROYXRpdmVGaW5pV2luZG93KHdpbik7Ci1AQCAtMTc1LDcgKzE3Niw5IEBAIF9lZ2x1dENyZWF0ZVdpbmRvdyhjb25zdCBjaGFyICp0aXRsZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCi0gICAgICAgICAgICAgd2luLT5jb25maWcsIHdpbi0+bmF0aXZlLnUucGl4bWFwLCBOVUxMKTsKLSAgICAgICBicmVhazsKLSAgICBjYXNlIEVHTF9QQlVGRkVSX0JJVDoKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBjYXNlIEVHTF9TQ1JFRU5fQklUX01FU0E6Ci0rI2VuZGlmCi0gICAgICAgd2luLT5zdXJmYWNlID0gd2luLT5uYXRpdmUudS5zdXJmYWNlOwotICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci1AQCAtMjg5LDggKzI5MiwxMCBAQCBlZ2x1dERlc3Ryb3lXaW5kb3coaW50IHdpbikKLSAgICBpZiAod2luZG93LT5pbmRleCAhPSB3aW4pCi0gICAgICAgcmV0dXJuOwotIAotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICAgIC8qIFhYWCBpdCBjYXVzZXMgc29tZSBidWcgaW4gc3QvZWdsIEtNUyBiYWNrZW5kICovCi0gICAgaWYgKCBfZWdsdXQtPnN1cmZhY2VfdHlwZSAhPSBFR0xfU0NSRUVOX0JJVF9NRVNBKQotKyNlbmRpZgotICAgICAgIGVnbE1ha2VDdXJyZW50KF9lZ2x1dC0+ZHB5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAKLSAgICBfZWdsdXREZXN0cm95V2luZG93KF9lZ2x1dC0+Y3VycmVudCk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKLWluZGV4IDAyMWE4ZjEuLjA5NGE0ZTIgMTAwNjQ0Ci0tLS0gYS9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jCi0rKysgYi9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jCi1AQCAtMzUsMjYgKzM1LDMzIEBACi0gCi0gI2RlZmluZSBNQVhfTU9ERVMgMTAwCi0gCi0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gc3RhdGljIEVHTFNjcmVlbk1FU0Ega21zX3NjcmVlbjsKLSBzdGF0aWMgRUdMTW9kZU1FU0Ega21zX21vZGU7Ci0gc3RhdGljIEVHTGludCBrbXNfd2lkdGgsIGttc19oZWlnaHQ7Ci0rI2VuZGlmCi0gCi0gdm9pZAotIF9lZ2x1dE5hdGl2ZUluaXREaXNwbGF5KHZvaWQpCi0gewotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICAgIF9lZ2x1dC0+bmF0aXZlX2RweSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7Ci0gICAgX2VnbHV0LT5zdXJmYWNlX3R5cGUgPSBFR0xfU0NSRUVOX0JJVF9NRVNBOwotKyNlbmRpZgotIH0KLSAKLSB2b2lkCi0gX2VnbHV0TmF0aXZlRmluaURpc3BsYXkodm9pZCkKLSB7Ci0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gICAga21zX3NjcmVlbiA9IDA7Ci0gICAga21zX21vZGUgPSAwOwotICAgIGttc193aWR0aCA9IDA7Ci0gICAga21zX2hlaWdodCA9IDA7Ci0rI2VuZGlmCi0gfQotIAotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotIHN0YXRpYyB2b2lkCi0gaW5pdF9rbXModm9pZCkKLSB7Ci1AQCAtOTQsMTkgKzEwMSwyMyBAQCBpbml0X2ttcyh2b2lkKQotICAgIGttc193aWR0aCA9IHdpZHRoOwotICAgIGttc19oZWlnaHQgPSBoZWlnaHQ7Ci0gfQotKyNlbmRpZgotIAotIHZvaWQKLSBfZWdsdXROYXRpdmVJbml0V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbiwgY29uc3QgY2hhciAqdGl0bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKLSB7Ci0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gICAgRUdMaW50IHN1cmZfYXR0cmlic1sxNl07Ci0gICAgRUdMaW50IGk7Ci0rI2VuZGlmCi0gICAgY29uc3QgY2hhciAqZXh0czsKLSAKLSAgICBleHRzID0gZWdsUXVlcnlTdHJpbmcoX2VnbHV0LT5kcHksIEVHTF9FWFRFTlNJT05TKTsKLSAgICBpZiAoIWV4dHMgfHwgIXN0cnN0cihleHRzLCAiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UiKSkKLSAgICAgICBfZWdsdXRGYXRhbCgiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0gCi0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gICAgaW5pdF9rbXMoKTsKLSAKLSAgICBpID0gMDsKLUBAIC0xMjgsMTQgKzEzOSwxNyBAQCBfZWdsdXROYXRpdmVJbml0V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbiwgY29uc3QgY2hhciAqdGl0bGUsCi0gCi0gICAgd2luLT5uYXRpdmUud2lkdGggPSBrbXNfd2lkdGg7Ci0gICAgd2luLT5uYXRpdmUuaGVpZ2h0ID0ga21zX2hlaWdodDsKLSsjZW5kaWYKLSB9Ci0gCi0gdm9pZAotIF9lZ2x1dE5hdGl2ZUZpbmlXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luKQotIHsKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBlZ2xTaG93U2NyZWVuU3VyZmFjZU1FU0EoX2VnbHV0LT5kcHksCi0gICAgICAgICAga21zX3NjcmVlbiwgRUdMX05PX1NVUkZBQ0UsIDApOwotICAgIGVnbERlc3Ryb3lTdXJmYWNlKF9lZ2x1dC0+ZHB5LCB3aW4tPm5hdGl2ZS51LnN1cmZhY2UpOwotKyNlbmRpZgotIH0KLSAKLSB2b2lkCi1kaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKLWluZGV4IGQ4OTI3MzQuLjNhMzU2NGMgMTAwNjQ0Ci0tLS0gYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCi0rKysgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCi1AQCAtMTgsNiArMTgsNyBAQAotIHN0YXRpYyB2b2lkCi0gVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCi0gewotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICNkZWZpbmUgTUFYIDgKLSAgICBFR0xTY3JlZW5NRVNBIHNjcmVlbnNbTUFYXTsKLSAgICBFR0xpbnQgbnVtU2NyZWVuczsKLUBAIC0yOCw2ICsyOSw3IEBAIFRlc3RTY3JlZW5zKEVHTERpc3BsYXkgZHB5KQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1TY3JlZW5zOyBpKyspIHsKLSAgICAgICBwcmludGYoIiBTY3JlZW4gJWQgaGFuZGxlOiAlZFxuIiwgaSwgKGludCkgc2NyZWVuc1tpXSk7Ci0gICAgfQotKyNlbmRpZgotIH0KLSAKLSAvKioKLWRpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMi5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYwotaW5kZXggNTA1YjQ3NC4uYmZlZjU5ZSAxMDA2NDQKLS0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMKLSsrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMKLUBAIC0xNiw2ICsxNiw3IEBACi0gCi0gLyojZGVmaW5lIEZST05UQlVGRkVSKi8KLSAKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSBzdGF0aWMgdm9pZCBfc3Vic2V0X1JlY3RmKEdMZmxvYXQgeDEsIEdMZmxvYXQgeTEsIEdMZmxvYXQgeDIsIEdMZmxvYXQgeTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IHIsIEdMZmxvYXQgZywgR0xmbG9hdCBiKQotIHsKLUBAIC05NSwxMiArOTYsMTMgQEAgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCi0gICAgICAgcHJpbnRmKCIgU2NyZWVuICVkIGhhbmRsZTogJWRcbiIsIGksIChpbnQpIHNjcmVlbnNbaV0pOwotICAgIH0KLSB9Ci0tCi0rI2VuZGlmCi0gCi0gaW50Ci0gbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotIHsKLSAgICBpbnQgbWFqLCBtaW47Ci0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gICAgRUdMQ29udGV4dCBjdHg7Ci0gICAgRUdMU3VyZmFjZSBwYnVmZmVyLCBzY3JlZW5fc3VyZjsKLSAgICBFR0xDb25maWcgY29uZmlnc1sxMF07Ci1AQCAtMTE1LDYgKzExNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgICBFR0xNb2RlTUVTQSBtb2RlOwotICAgIEVHTFNjcmVlbk1FU0Egc2NyZWVuOwotICAgIEVHTGludCBjb3VudDsKLSsjZW5kaWYKLSAKLSAgICBFR0xEaXNwbGF5IGQgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAgIGFzc2VydChkKTsKLUBAIC0xMzIsNiArMTM1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgICAgIGV4aXQoMSk7Ci0gICAgfQotIAotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgMTAsICZudW1Db25maWdzKTsKLSAgICBwcmludGYoIkdvdCAlZCBFR0wgY29uZmlnczpcbiIsIG51bUNvbmZpZ3MpOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db25maWdzOyBpKyspIHsKLUBAIC0yMTEsNiArMjE1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgIGVnbERlc3Ryb3lTdXJmYWNlKGQsIHBidWZmZXIpOwotICAgIGVnbERlc3Ryb3lDb250ZXh0KGQsIGN0eCk7Ci0gICAgZWdsVGVybWluYXRlKGQpOwotKyNlbmRpZgotIAotICAgIHJldHVybiAwOwotIH0KLWRpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMy5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYwotaW5kZXggZjg0Y2EyMy4uMzFiNWQ4YiAxMDA2NDQKLS0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMKLSsrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMKLUBAIC00Niw3ICs0Niw3IEBAIEdMdWJ5dGUgT3BlbkdMX2JpdHNbXSA9IHsKLSAgICAweDNlLCAweDAwLCAweDAwLCAweGY4LCAweDBjLCAweDAwLCAKLSB9OwotIAotLQotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotIHN0YXRpYyB2b2lkIEluaXQodm9pZCkKLSB7Ci0gCi1AQCAtNTUxLDExICs1NTEsMTMgQEAgd3JpdGVfcHBtKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBHTHVieXRlICpidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLSAgICAgICBmY2xvc2UoZik7Ci0gICAgfQotIH0KLSsjZW5kaWYKLSAKLSBpbnQKLSBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gewotICAgIGludCBtYWosIG1pbjsKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBFR0xDb250ZXh0IGN0eDsKLSAgICBFR0xTdXJmYWNlIHNjcmVlbl9zdXJmOwotICAgIEVHTENvbmZpZyBjb25maWdzWzEwXTsKLUBAIC01NjYsNiArNTY4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgIGNvbnN0IEdMdWJ5dGUgKmJpdG1hcDsKLSAgICBFR0xpbnQgc2NyZWVuQXR0cmlic1szMl07Ci0gICAgRUdMaW50IGk7Ci0rI2VuZGlmCi0gCi0gICAgRUdMRGlzcGxheSBkID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKLSAgICBhc3NlcnQoZCk7Ci1AQCAtNTgzLDYgKzU4Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgICAgICBleGl0KDEpOwotICAgIH0KLSAKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBlZ2xHZXRDb25maWdzKGQsIGNvbmZpZ3MsIDEwLCAmbnVtQ29uZmlncyk7Ci0gICAgZWdsR2V0U2NyZWVuc01FU0EoZCwgJnNjcmVlbiwgMSwgJmNvdW50KTsKLSAgICBlZ2xHZXRNb2Rlc01FU0EoZCwgc2NyZWVuLCAmbW9kZSwgMSwgJmNvdW50KTsKLUBAIC02NDIsNiArNjQ2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgIGVnbERlc3Ryb3lTdXJmYWNlKGQsIHNjcmVlbl9zdXJmKTsKLSAgICBlZ2xEZXN0cm95Q29udGV4dChkLCBjdHgpOwotICAgIGVnbFRlcm1pbmF0ZShkKTsKLSsjZW5kaWYKLSAKLSAgICByZXR1cm4gMDsKLSB9Ci0tLSAKLTIuMC4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJlMDgwNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1Gcm9tIDZhMTlkYmExZDI3NTU3OWM3M2U3NzYzYjA1NTQ0MTBmZjRlMWU2NTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KLURhdGU6IEZyaSwgMjkgSnVuIDIwMTIgMTI6MDA6MjYgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSCA2LzldIFF1ZXJ5IGRpc3BsYXkgZm9yIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbgotIGJlZm9yZSB1c2luZyBpdAotCi1UaGlzIGNvZGUgbWFrZXMgaGVhdnkgdXNlIG9mIHRoZSBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24gc28KLWNoZWNrIHRoZSBkaXNwbGF5IHRvIGRldGVybWluZSBpZiBpdCdzIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBFR0wKLWltcGxlbWVudGF0aW9uLiBJZiBpdCBkb2Vzbid0IHRoZW4gYmFpbC4KLQotU2lnbmVkLW9mZi1ieTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+Ci0KLUFwcGxpZWQgYW5kIGZpeGVkIHVwIGluIFlvY3RvIGJ5Li4uCi0KLUludGVncmF0ZWQtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBsaW51eC5pbnRlbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyB8IDYgKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKLWluZGV4IDNhMzU2NGMuLjA2ZTIxMzggMTAwNjQ0Ci0tLS0gYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCi0rKysgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCi1AQCAtMTEwLDYgKzExMCwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gICAgcHJpbnRmKCJFR0wgdmVyc2lvbiA9ICVkLiVkXG4iLCBtYWosIG1pbik7Ci0gICAgcHJpbnRmKCJFR0xfVkVORE9SID0gJXNcbiIsIGVnbFF1ZXJ5U3RyaW5nKGQsIEVHTF9WRU5ET1IpKTsKLSAKLSsgICBpZiAoIXN0cnN0cihlZ2xRdWVyeVN0cmluZyhkLCBFR0xfRVhURU5TSU9OUyksCi0rICAgICAgICAgICAgICAgIkVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIikpIHsKLSsgICAgICBwcmludGYoIkVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwotKyAgICAgIGV4aXQoMSk7Ci0rICAgfQotKwotICAgIGVnbEdldENvbmZpZ3MoZCwgTlVMTCwgMCwgJm51bUNvbmZpZ3MpOwotICAgIGNvbmZpZ3MgPSBtYWxsb2Moc2l6ZW9mKCpjb25maWdzKSAqbnVtQ29uZmlncyk7Ci0gICAgZWdsR2V0Q29uZmlncyhkLCBjb25maWdzLCBudW1Db25maWdzLCAmbnVtQ29uZmlncyk7Ci0tLSAKLTIuMC4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKaW5kZXggODlkMmZhYy4uNmI2NzZjZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKQEAgLTEsMTEgKzEsMTMgQEAKLUZyb20gZDkzMGIyZGE1N2Y3YzllZmI4MGM4Y2VmOGY4YWRhZDE1YmJiYzBkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gYzU5ZTI4NmZhNGU4MThjYTAxNWRkNDBlNDcyNTYzNjMwOTk3MGVhOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTAgSnVsIDIwMTQgMTQ6MzA6NTIgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA3LzldIEluc3RhbGwgZmV3IG1vcmUgdGVzdCBwcm9ncmFtcworU3ViamVjdDogW1BBVENIXSBJbnN0YWxsIGZldyBtb3JlIHRlc3QgcHJvZ3JhbXMKIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKIFNpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KIC0tLQogIHNyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtICAgIHwgIDIgKy0KICBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDEwICsrKystLS0tLS0KQEAgLTEzLDcgKzE1LDcgQEAKICAzIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KLWluZGV4IDBjNzIyOGYuLjg3YjJmMWEgMTAwNjQ0CitpbmRleCBmZTdmYWE5Li4zZTQ4MTQxIDEwMDY0NAogLS0tIGEvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KICsrKyBiL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCiBAQCAtNTAsNyArNTAsNyBAQCBlbmRpZgpAQCAtMjIsNDIgKzI0LDExIEBACiAgaWYgSEFWRV9FR0wKIC1ub2luc3RfUFJPR1JBTVMgPSBcCiArYmluX1BST0dSQU1TID0gXAotIAlkZW1vMSBcCi0gCWRlbW8yIFwKLSAJZGVtbzMgXAotZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KLWluZGV4IDM0NTVlNzUuLjUxNmU1MTYgMTAwNjQ0Ci0tLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQotKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KLUBAIC0zNiwxMSArMzYsMTEgQEAgQU1fTERGTEFHUyA9IFwKLSAJJChFR0xfTElCUykgXAotIAktbG0KLSAKLS1ub2luc3RfUFJPR1JBTVMgPQotK2Jpbl9QUk9HUkFNUyA9Ci0gCi0gaWYgSEFWRV9FR0wKLSBpZiBIQVZFX0dMRVNWMQotLW5vaW5zdF9QUk9HUkFNUyArPSBcCi0rYmluX1BST0dSQU1TICs9IFwKLSAJZHJhd3RleF9zY3JlZW4gXAotIAlnZWFyc19zY3JlZW4gXAotIAl0b3J1c19zY3JlZW4gXAotQEAgLTU3LDEwICs1Nyw4IEBAIHRvcnVzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQotIHRyaV9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKLSAKLSBpZiBIQVZFX1gxMQotLW5vaW5zdF9QUk9HUkFNUyArPSBcCi0tCWNsZWFyCi0tCi0tYmluX1BST0dSQU1TID0gXAotK2Jpbl9QUk9HUkFNUyArPSBcCi0rCWNsZWFyIFwKLSAJYmluZHRleCBcCi0gCWRyYXd0ZXhfeDExIFwKLSAJZWdsZmJkZXYgXAorIAllZ2xpbmZvIFwKKyAJcGVnbGdlYXJzIFwKKyAJJChFR0xfRFJNX0RFTU9TKSBcCiBkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQotaW5kZXggNzMxOGE0My4uYjU0NTIyNSAxMDA2NDQKK2luZGV4IGIwZjEyMTIuLjVmZDFjZjggMTAwNjQ0CiAtLS0gYS9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQogKysrIGIvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KIEBAIC00OSw3ICs0OSw3IEBAIGVuZGlmCkBAIC02Niw5ICszNyw5IEBACiAgaWYgSEFWRV9WRwogLW5vaW5zdF9QUk9HUkFNUyA9IFwKICtiaW5fUFJPR1JBTVMgPSBcCi0gCWxpb25fc2NyZWVuIFwKLSAJc3Bfc2NyZWVuIFwKICAJJChFR0xfWDExX0RFTU9TKQorIGVuZGlmCisgZW5kaWYKIC0tIAotMi4wLjAKKzIuMS40CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMTAtc2hhcmVkdGV4X210LWZpeC1yZW5kZXJpbmctdGhyZWFkLWhhbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDEwLXNoYXJlZHRleF9tdC1maXgtcmVuZGVyaW5nLXRocmVhZC1oYW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGUxYjQ0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMTAtc2hhcmVkdGV4X210LWZpeC1yZW5kZXJpbmctdGhyZWFkLWhhbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1Gcm9tIDUyNWZhOWRlZDcyZDIyYjUzYzVlYjM2NmY2MWUyYWMxZDQwN2EyZGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBd2FpcyBCZWxhbCA8YXdhaXNfYmVsYWxAbWVudG9yLmNvbT4KLURhdGU6IFRodSwgOCBPY3QgMjAxNSAxMzo0OTozMSArMDUwMAotU3ViamVjdDogW1BBVENIXSBzaGFyZWR0ZXhfbXQ6IGZpeCByZW5kZXJpbmcgdGhyZWFkIGhhbmcKLQotWE5leHRFdmVudCBpcyBhIGJsb2NraW5nIGNhbGwgd2hpY2ggbG9ja3MgdXAgdGhlIGRpc3BsYXkgbXV0ZXgKLXRoaXMgY2F1c2VzIHRoZSByZW5kZXJpbmcgdGhyZWFkcyB0byBoYW5nIHdoZW4gdGhleSB0cnkgY2FsbAotZ2xYU3dhcEJ1ZmZlcnMoKSBhcyB0aGF0IHRyaWVzIHRvIHRha2UgdGhlIHNhbWUgbXV0ZXggaW4KLXVuZGVybHlpbmcgY2FsbHMgdGhyb3VnaCBYQ29weUFyZWEoKS4KLVNvIHdlIG9ubHkgZ28gdG8gWE5leHRFdmVudCB3aGVuIGl0IGhhcyBhdCBsZWFzdCBvbmUgZXZlbnQKLWFuZCB3ZSB3b3VsZG4ndCBsb2NrIGluZGVmaW5pdGVseS4KLQotU2lnbmVkLW9mZi1ieTogQXdhaXMgQmVsYWwgPGF3YWlzX2JlbGFsQG1lbnRvci5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0ICgyYjMwNGU3NjU2OTVkMzg1ZmQzYmY0MTRlNmU0NDQwMjBiZWRiMGE4KQotCi0tLS0KLSBzcmMveGRlbW9zL3NoYXJlZHRleF9tdC5jIHwgOSArKysrKysrLS0KLSAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3hkZW1vcy9zaGFyZWR0ZXhfbXQuYyBiL3NyYy94ZGVtb3Mvc2hhcmVkdGV4X210LmMKLWluZGV4IGE5MDkwM2EuLjFkNTAzYzQgMTAwNjQ0Ci0tLS0gYS9zcmMveGRlbW9zL3NoYXJlZHRleF9tdC5jCi0rKysgYi9zcmMveGRlbW9zL3NoYXJlZHRleF9tdC5jCi1AQCAtNDIwLDkgKzQyMCwxNCBAQCBSZXNpemUoc3RydWN0IHdpbmRvdyAqaCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQotIHN0YXRpYyB2b2lkCi0gRXZlbnRMb29wKHZvaWQpCi0gewotKyAgIGludCBpOwotKyAgIFhFdmVudCBldmVudDsKLSAgICB3aGlsZSAoMSkgewotLSAgICAgIGludCBpOwotLSAgICAgIFhFdmVudCBldmVudDsKLSsgICAgICAvKiBEbyB3ZSBoYXZlIGFuIGV2ZW50PyAqLwotKyAgICAgIGlmIChYUGVuZGluZyhnRHB5KSA9PSAwKSB7Ci0rICAgICAgICAgdXNsZWVwKDEwMDAwKTsKLSsgICAgICAgICBjb250aW51ZTsKLSsgICAgICB9Ci0gICAgICAgWE5leHRFdmVudChnRHB5LCAmZXZlbnQpOwotICAgICAgIGZvciAoaSA9IDA7IGkgPCBOdW1XaW5kb3dzOyBpKyspIHsKLSAJIHN0cnVjdCB3aW5kb3cgKmggPSAmV2luZG93c1tpXTsKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAxMi1tZXNhLWRlbW9zLU9wZW5WRy1kZW1vcy13aXRoLXNpbmdsZS1mcmFtZS1uZWVkLWVnbFN3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAxMi1tZXNhLWRlbW9zLU9wZW5WRy1kZW1vcy13aXRoLXNpbmdsZS1mcmFtZS1uZWVkLWVnbFN3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODc2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDEyLW1lc2EtZGVtb3MtT3BlblZHLWRlbW9zLXdpdGgtc2luZ2xlLWZyYW1lLW5lZWQtZWdsU3cucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSAzYWE4NGM0N2U4OGE0YzM4NDQ2Y2UxMzIzYWJmNmYyYzc3Mzg5MTA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUHJhYmh1IDxwcmFiaHUuc3VuZGFyYXJhakBmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCAxNiBOb3YgMjAxNSAxNzowOTozMiAtMDYwMAorU3ViamVjdDogW1BBVENIXSBtZXNhLWRlbW9zOiBPcGVuVkcgZGVtb3Mgd2l0aCBzaW5nbGUgZnJhbWUgbmVlZCBlZ2xTd2FwQnVmZmVyCisKK3NwIGFuZCB0ZXh0IGRlbW9zIHJlbmRlcmluZyBzaW5nbGUgZnJhbWUuIHRvIGRpc3BsYXkgdGhlCitzaW5nbGUgZnJhbWUgcmVuZGVyZWQgbmVlZGVkIGEgZWdsU3dhcEJ1ZmZlciB0byBkaXBsYXkgdG8gd2luZG93LgorSGVuY2UgYWRkZWQgZWdsdXRQb3N0UmVkaXNwbGF5IHRvIGRpc3BsYXkgdGhlIGZyYW1lCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQcmFiaHUgPHByYWJodS5zdW5kYXJhcmFqQGZyZWVzY2FsZS5jb20+CistLS0KKyBzcmMvZWdsL29wZW52Zy9zcC5jICAgfCAxICsKKyBzcmMvZWdsL29wZW52Zy90ZXh0LmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVudmcvc3AuYyBiL3NyYy9lZ2wvb3BlbnZnL3NwLmMKK2luZGV4IGEyMGMwYTMuLjQ2OGU5MWUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW52Zy9zcC5jCisrKysgYi9zcmMvZWdsL29wZW52Zy9zcC5jCitAQCAtNTAwLDYgKzUwMCw3IEBAIGRyYXcodm9pZCkKKyAgICB9CisgCisgICAgdmdGbHVzaCgpOworKyAgIGVnbHV0UG9zdFJlZGlzcGxheSgpOworIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW52Zy90ZXh0LmMgYi9zcmMvZWdsL29wZW52Zy90ZXh0LmMKK2luZGV4IGY1YzZkZTguLjQ5MjU4MWMgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW52Zy90ZXh0LmMKKysrKyBiL3NyYy9lZ2wvb3BlbnZnL3RleHQuYworQEAgLTM2MCw2ICszNjAsNyBAQCBkaXNwbGF5KHZvaWQpCisgeworICAgIHZnQ2xlYXIoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgZ2x5cGhfc3RyaW5nX2RyYXcoMTAuMCwgMTAuMCk7CisrICAgZWdsdXRQb3N0UmVkaXNwbGF5KCk7CisgfQorIAorIAorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDEzLW9ubHktYnVpbGQtR0xYLWRlbW9zLWlmLW5lZWRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMTMtb25seS1idWlsZC1HTFgtZGVtb3MtaWYtbmVlZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmU0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDEzLW9ubHktYnVpbGQtR0xYLWRlbW9zLWlmLW5lZWRlZC5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIDMyMmFmMjk0MzkwYTdmNGUxNTI0YzVhNzkzMTJiZTZjYmViY2U5ODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBd2FpcyBCZWxhbCA8YXdhaXNfYmVsYWxAbWVudG9yLmNvbT4KK0RhdGU6IFdlZCwgMTEgTm92IDIwMTUgMTc6MjI6MTIgKzA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gb25seSBidWlsZCBHTFggZGVtb3MgaWYgbmVlZGVkCisKK1RoZXJlIGFyZSBwbGF0Zm9ybXMgdGhhdCBkZWZhdWx0IHRvIEVHTCBvbmx5IGNvbmZpZ3VyYXRpb25zCitpbiB3aGljaCBjYXNlIHRoZSBHTFggYXBwbGljYXRpb25zIGFyZSBub3QgcmVxdWlyZWQKK2F0IGFsbC4gQWxsb3cgdGhlIHVzZXIgdG8gY29udHJvbCBnZW5lcmF0aW9uIG9mIHRoZXNlCitkZW1vcyBhcyBuZWVkZWQgdGhyb3VnaCBhIGNvbmZpZ3VyZSBzd2l0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEF3YWlzIEJlbGFsIDxhd2Fpc19iZWxhbEBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgICAgfCA5ICsrKysrKysrKworIHNyYy9NYWtlZmlsZS5hbSB8IDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGY4ZWM3ZTMuLjFhNGQ5NmQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEzMiw2ICsxMzIsMTEgQEAgaWYgdGVzdCAieCRlbmFibGVfZ2x1IiA9IHh5ZXM7IHRoZW4KKyAgICAgREVNT19MSUJTPSIkREVNT19MSUJTICRHTFVfTElCUyIKKyBmaQorIAorK0FDX0FSR19FTkFCTEUoW2dseC1kZW1vc10sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2x4LWRlbW9zXSwKKysgICAgICAgIFtlbmFibGUgR0xYIGRlbW9zIEA8OkBkZWZhdWx0PWF1dG9AOj5AXSldLAorKyAgICBbZ2x4X2RlbW9zX2VuYWJsZWQ9IiRlbmFibGV2YWwiXSwKKysgICAgW2dseF9kZW1vc19lbmFibGVkPXllc10pCisgQUNfQVJHX0VOQUJMRShbZWdsXSwKKyAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1lZ2xdLAorICAgICAgICAgW2VuYWJsZSBFR0wgbGlicmFyeSBAPDpAZGVmYXVsdD1hdXRvQDo+QF0pXSwKK0BAIC0zMjUsNiArMzMzLDcgQEAgQUNfU1VCU1QoW1dBWUxBTkRfTElCU10pCisgCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTFUsIHRlc3QgIngkZ2x1X2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xFVywgdGVzdCAieCRnbGV3X2VuYWJsZWQiID0gInh5ZXMiKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfR0xYLCB0ZXN0ICJ4JGdseF9kZW1vc19lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0VHTCwgdGVzdCAieCRlZ2xfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjEsIHRlc3QgIngkZ2xlc3YxX2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xFU1YyLCB0ZXN0ICJ4JGdsZXN2Ml9lbmFibGVkIiA9ICJ4eWVzIikKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDhiODlkZWUuLmE0ZDdlOGYgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTQ0LDggKzQ0LDEyIEBAIFNVQkRJUlMgPSBcCisgCXNsYW5nIFwKKyAJdGVzdHMgXAorIAl0b29scyBcCistCXdnbCBcCisrCXdnbAorKworK2lmIEhBVkVfR0xYCisrU1VCRElSUyArPSBcCisgCXhkZW1vcworK2VuZGlmCisgCisgaWYgSEFWRV9HTEVXCisgU1VCRElSUyArPSBcCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1N2I4YzYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1TVU1NQVJZID0gIk1lc2EgZGVtbyBhcHBsaWNhdGlvbnMiCi1ERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgdGhlIGRlbW9uc3RyYXRpb24gYXBwbGljYXRpb24sIHN1Y2ggYXMgZ2x4Z2VhcnMuIFwKLVRoZXNlIGFwcGxpY2F0aW9ucyBjYW4gYmUgdXNlZCBmb3IgTWVzYSB2YWxpZGF0aW9uIGFuZCBiZW5jaG1hcmtpbmcuIgotSE9NRVBBR0UgPSAiaHR0cDovL21lc2EzZC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCi1TRUNUSU9OID0gIngxMSIKLQotTElDRU5TRSA9ICJNSVQgJiBQRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy94ZGVtb3MvZ2x4Z2VhcnMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT05MTQyMjU3ODU0NTBlZmY2NDRhODZjODcxZDNhZTAwZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMveGRlbW9zL2dseGRlbW8uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTg7bWQ1PWIwMWQ1YWIxYWVlOTRkMzViN2VmYWEyZWY0OGUxYTA2IgotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5mcmVlZGVza3RvcC5vcmcvcHViL21lc2EvZGVtb3MvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgIGZpbGU6Ly8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA5LWdsc2wtcGVyZi1JbnN0YWxsLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxMC1zaGFyZWR0ZXhfbXQtZml4LXJlbmRlcmluZy10aHJlYWQtaGFuZy5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiNzI2MTNhMmM4YzAxMzcxNmRiMDJlM2ZmNTlkMjkwNjEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTRiZmVjYjU4MTZkZGQ0YjdiMzdjMWJjODc2YjYzZjFmN2YwNmZkYTU4NzkyMjFhOTc3NGQwOTUyZjkwYmE5MiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotIyBkZXBlbmRzIG9uIHZpcnR1YWwvZWdsLCB2aXJ0dWFsL2xpYmdsIC4uLgotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKLQotUEFDS0FHRUNPTkZJRyA/PSAiZHJtIG9zbWVzYSBmcmVldHlwZTIgZ2JtIGVnbCBnbGVzMSBnbGVzMiBcCi0gICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEgZ2xldyBnbHUnLCAnJywgZCl9IgotCi0jIFRoZSBXYXlsYW5kIGNvZGUgZG9lc24ndCB3b3JrIHdpdGggV2F5bGFuZCAxLjAsIHNvIGRpc2FibGUgaXQgZm9yIG5vdwotIyR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1zeXN0ZW0tZGF0YS1maWxlcyIKLQotUEFDS0FHRUNPTkZJR1tkcm1dID0gIi0tZW5hYmxlLWxpYmRybSwtLWRpc2FibGUtbGliZHJtLGxpYmRybSIKLVBBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wsLS1kaXNhYmxlLWVnbCx2aXJ0dWFsL2VnbCIKLVBBQ0tBR0VDT05GSUdbZnJlZXR5cGUyXSA9ICItLWVuYWJsZS1mcmVldHlwZTIsLS1kaXNhYmxlLWZyZWV0eXBlMixmcmVldHlwZSIKLVBBQ0tBR0VDT05GSUdbZ2JtXSA9ICItLWVuYWJsZS1nYm0sLS1kaXNhYmxlLWdibSx2aXJ0dWFsL2xpYmdsIgotUEFDS0FHRUNPTkZJR1tnbGVzMV0gPSAiLS1lbmFibGUtZ2xlczEsLS1kaXNhYmxlLWdsZXMxLHZpcnR1YWwvbGliZ2xlczEiCi1QQUNLQUdFQ09ORklHW2dsZXMyXSA9ICItLWVuYWJsZS1nbGVzMiwtLWRpc2FibGUtZ2xlczIsdmlydHVhbC9saWJnbGVzMiIKLVBBQ0tBR0VDT05GSUdbZ2x1dF0gPSAiLS13aXRoLWdsdXQ9JHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9LC0td2l0aG91dC1nbHV0LCIKLVBBQ0tBR0VDT05GSUdbb3NtZXNhXSA9ICItLWVuYWJsZS1vc21lc2EsLS1kaXNhYmxlLW9zbWVzYSwiCi1QQUNLQUdFQ09ORklHW3ZnXSA9ICItLWVuYWJsZS12ZywtLWRpc2FibGUtdmcsdmlydHVhbC9saWJvcGVudmciCi1QQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQsLS1kaXNhYmxlLXdheWxhbmQsdmlydHVhbC9saWJnbCB3YXlsYW5kIgotUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLHZpcnR1YWwvbGlieDExIgotUEFDS0FHRUNPTkZJR1tnbGV3XSA9ICItLWVuYWJsZS1nbGV3LC0tZGlzYWJsZS1nbGV3LGdsZXciCi1QQUNLQUdFQ09ORklHW2dsdV0gPSAiLS1lbmFibGUtZ2x1LC0tZGlzYWJsZS1nbHUsdmlydHVhbC9saWJnbCIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBpdCBjYW4gYmUgY29tcGxldGVseSBlbXB0eSB3aGVuIGFsbCBQQUNLQUdFQ09ORklHIG9wdGlvbnMgYXJlIGRpc2FibGVkCi0Jcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7YmluZGlyfQotCi0JaWYgWyAtZiAke0R9JHtiaW5kaXJ9L2NsZWFyIF07IHRoZW4KLSAgICAgICAgCW12ICR7RH0ke2JpbmRpcn0vY2xlYXIgJHtEfSR7YmluZGlyfS9jbGVhci5tZXNhLWRlbW9zCi0JZmkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiMGJkYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMy4wLmJiCkBAIC0wLDAgKzEsNTkgQEAKK1NVTU1BUlkgPSAiTWVzYSBkZW1vIGFwcGxpY2F0aW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVtb25zdHJhdGlvbiBhcHBsaWNhdGlvbiwgc3VjaCBhcyBnbHhnZWFycy4gXAorVGhlc2UgYXBwbGljYXRpb25zIGNhbiBiZSB1c2VkIGZvciBNZXNhIHZhbGlkYXRpb24gYW5kIGJlbmNobWFya2luZy4iCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIk1JVCAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3hkZW1vcy9nbHhnZWFycy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTkxNDIyNTc4NTQ1MGVmZjY0NGE4NmM4NzFkM2FlMDBlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy94ZGVtb3MvZ2x4ZGVtby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9YjAxZDVhYjFhZWU5NGQzNWI3ZWZhYTJlZjQ4ZTFhMDYiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9kZW1vcy8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1tZXNhLWRlbW9zLU9wZW5WRy1kZW1vcy13aXRoLXNpbmdsZS1mcmFtZS1uZWVkLWVnbFN3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtb25seS1idWlsZC1HTFgtZGVtb3MtaWYtbmVlZGVkLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjYyOGU3NWMyM2MxNzM5NGYxMWEzMTZjMzZmOGU0MTY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMxNzMxNTRiYmQwZDVmYjUzZDczMjQ3MTk4NGRlZjQyZmIxYjE0YWM4NWZjYjgzNDEzOGZiOTUxOGIzZTBiZWYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2VnbCwgdmlydHVhbC9saWJnbCAuLi4KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJvcGVuZ2wgeDExIgorCitQQUNLQUdFQ09ORklHID89ICJkcm0gb3NtZXNhIGZyZWV0eXBlMiBnYm0gZWdsIGdsZXMxIGdsZXMyIFwKKyAgICAgICAgICAgICAgICAgIHgxMSBnbGV3IGdsdSBnbHgiCisKKyMgVGhlIFdheWxhbmQgY29kZSBkb2Vzbid0IHdvcmsgd2l0aCBXYXlsYW5kIDEuMCwgc28gZGlzYWJsZSBpdCBmb3Igbm93CisjJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXN5c3RlbS1kYXRhLWZpbGVzIgorCitQQUNLQUdFQ09ORklHW2RybV0gPSAiLS1lbmFibGUtbGliZHJtLC0tZGlzYWJsZS1saWJkcm0sbGliZHJtIgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCwtLWRpc2FibGUtZWdsLHZpcnR1YWwvZWdsIgorUEFDS0FHRUNPTkZJR1tmcmVldHlwZTJdID0gIi0tZW5hYmxlLWZyZWV0eXBlMiwtLWRpc2FibGUtZnJlZXR5cGUyLGZyZWV0eXBlIgorUEFDS0FHRUNPTkZJR1tnYm1dID0gIi0tZW5hYmxlLWdibSwtLWRpc2FibGUtZ2JtLHZpcnR1YWwvbGliZ2wiCitQQUNLQUdFQ09ORklHW2dsZXMxXSA9ICItLWVuYWJsZS1nbGVzMSwtLWRpc2FibGUtZ2xlczEsdmlydHVhbC9saWJnbGVzMSIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMix2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1tnbHV0XSA9ICItLXdpdGgtZ2x1dD0ke1NUQUdJTkdfRVhFQ1BSRUZJWERJUn0sLS13aXRob3V0LWdsdXQsIgorUEFDS0FHRUNPTkZJR1tvc21lc2FdID0gIi0tZW5hYmxlLW9zbWVzYSwtLWRpc2FibGUtb3NtZXNhLCIKK1BBQ0tBR0VDT05GSUdbdmddID0gIi0tZW5hYmxlLXZnLC0tZGlzYWJsZS12Zyx2aXJ0dWFsL2xpYm9wZW52ZyIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZCwtLWRpc2FibGUtd2F5bGFuZCx2aXJ0dWFsL2xpYmdsIHdheWxhbmQiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHW2dsZXddID0gIi0tZW5hYmxlLWdsZXcsLS1kaXNhYmxlLWdsZXcsZ2xldyIKK1BBQ0tBR0VDT05GSUdbZ2x1XSA9ICItLWVuYWJsZS1nbHUsLS1kaXNhYmxlLWdsdSx2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLWdseC1kZW1vcywtLWRpc2FibGUtZ2x4LWRlbW9zIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIGl0IGNhbiBiZSBjb21wbGV0ZWx5IGVtcHR5IHdoZW4gYWxsIFBBQ0tBR0VDT05GSUcgb3B0aW9ucyBhcmUgZGlzYWJsZWQKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtiaW5kaXJ9CisKKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vY2xlYXIgXTsgdGhlbgorICAgICAgICAJbXYgJHtEfSR7YmluZGlyfS9jbGVhciAke0R9JHtiaW5kaXJ9L2NsZWFyLm1lc2EtZGVtb3MKKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTEuMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTEuMS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzJiY2E5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzExLjEuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXJlcXVpcmUgbWVzYV8ke1BWfS5iYgotCi1TVU1NQVJZICs9ICIgKE9wZW5HTCBvbmx5LCBubyBFR0wvR0xFUykiCi0KLUZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L21lc2E6IgotCi1QUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmdsIHZpcnR1YWwvbWVzYSIKLQotUyA9ICIke1dPUktESVJ9L21lc2EtJHtQVn0iCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJkcmkgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKLQotRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMi4wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMi4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2YTNlOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEyLjAuMS5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG1lc2FfJHtQVn0uYmIKKworU1VNTUFSWSArPSAiIChPcGVuR0wgb25seSwgbm8gRUdML0dMRVMpIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9tZXNhOiIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJnbCB2aXJ0dWFsL21lc2EiCisKK1MgPSAiJHtXT1JLRElSfS9tZXNhLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiZHJpICR7TUVTQV9DUllQVE99ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jCmluZGV4IDQ0MjQ3OWEuLmU0ODgwZmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKQEAgLTEwLDcgKzEwLDcgQEAKIEJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKIFNFQ1RJT04gPSAieDExIgogTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL2xpY2Vuc2UuaHRtbDttZDU9NmEyMzQ0NTk4MmE3YTk3MmFjMTk4ZTkzY2MxY2IzZGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL2xpY2Vuc2UuaHRtbDttZDU9ODk5ZmJlN2U0MmQ0OTRjN2M4YzE1OWM3MDAxNjkzZDUiCiAKIFBFID0gIjIiCiAKQEAgLTI0LDExICsyNCwxMyBAQAogCiBFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkLWdsYXBpIgogCi1QQUNLQUdFQ09ORklHID8/PSAiZWdsIGdsZXMgZHJpICR7TUVTQV9DUllQVE99IFwKK1BBQ0tBR0VDT05GSUcgPz89ICJnYm0gZWdsIGdsZXMgZHJpICR7TUVTQV9DUllQVE99IFwKIAkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfVwKIAkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9XAogCQkiCiAKK1BBQ0tBR0VDT05GSUdbZ2JtXSA9ICItLWVuYWJsZS1nYm0sLS1kaXNhYmxlLWdibSIKKwogWDExX0RFUFMgPSAieGY4NmRyaXByb3RvIGdscHJvdG8gdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4eGY4NnZtIGxpYnhkYW1hZ2UgbGlieGZpeGVzIgogUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLWdseC10bHMsLS1kaXNhYmxlLWdseCwke1gxMV9ERVBTfSIKIFBBQ0tBR0VDT05GSUdbeHZtY10gPSAiLS1lbmFibGUteHZtYywtLWRpc2FibGUteHZtYyxsaWJ4dm1jIgpAQCAtMzcsNyArMzksNyBAQAogRFJJRFJJVkVSUyA9ICJzd3Jhc3QiCiBEUklEUklWRVJTX2FwcGVuZF94ODYgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgogRFJJRFJJVkVSU19hcHBlbmRfeDg2LTY0ID0gIixyYWRlb24scjIwMCxub3V2ZWF1LGk5NjUsaTkxNSIKLVBBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmkgLS13aXRoLWRyaS1kcml2ZXJzPSR7RFJJRFJJVkVSU30gLS1lbmFibGUtZ2JtLCAtLWRpc2FibGUtZHJpLCBkcmkycHJvdG8gbGliZHJtIgorUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSAtLXdpdGgtZHJpLWRyaXZlcnM9JHtEUklEUklWRVJTfSwgLS1kaXNhYmxlLWRyaSwgZHJpMnByb3RvIGxpYmRybSIKIFBBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywgLS1kaXNhYmxlLWRyaTMsIGRyaTNwcm90byBwcmVzZW50cHJvdG8gbGlieHNobWZlbmNlIgogCiBQQUNLQUdFQ09ORklHW2dsZXNdID0gIi0tZW5hYmxlLWdsZXMxIC0tZW5hYmxlLWdsZXMyLCAtLWRpc2FibGUtZ2xlczEgLS1kaXNhYmxlLWdsZXMyIgpAQCAtMTQwLDE2ICsxNDIsMTcgQEAKICAgICAgICAgZC5zZXRWYXIoIlJSRVBMQUNFU18lcyIgJSBwa2csIHBrZy5yZXBsYWNlKCJtZXNhIiwgIm1lc2EtZHJpIiwgMSkpCiAKICAgICBpbXBvcnQgcmUKLSAgICBkcmlfZHJpdmVyc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImRyaSIpCi0gICAgZHJpX3BrZ3MgPSBvcy5saXN0ZGlyKGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkgKyBkcmlfZHJpdmVyc19yb290KQotICAgIGxpYl9uYW1lID0gZC5leHBhbmQoIiR7TUxQUkVGSVh9bWVzYS1tZWdhZHJpdmVyIikKLSAgICBmb3IgcCBpbiBkcmlfcGtnczoKLSAgICAgICAgbSA9IHJlLm1hdGNoKCdeKC4qKV9kcmlcLnNvJCcsIHApCi0gICAgICAgIGlmIG06Ci0gICAgICAgICAgICBwa2dfbmFtZSA9ICIgJHtNTFBSRUZJWH1tZXNhLWRyaXZlci0lcyIgJSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtLmdyb3VwKDEpKQotICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCi0gICAgICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCi0gICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICBkcmlfZHJpdmVyc19yb290ID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSksIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImRyaSIpCisgICAgaWYgb3MucGF0aC5pc2RpcihkcmlfZHJpdmVyc19yb290KToKKyAgICAgICAgZHJpX3BrZ3MgPSBvcy5saXN0ZGlyKGRyaV9kcml2ZXJzX3Jvb3QpCisgICAgICAgIGxpYl9uYW1lID0gZC5leHBhbmQoIiR7TUxQUkVGSVh9bWVzYS1tZWdhZHJpdmVyIikKKyAgICAgICAgZm9yIHAgaW4gZHJpX3BrZ3M6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJ14oLiopX2RyaVwuc28kJywgcCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgcGtnX25hbWUgPSAiICR7TUxQUkVGSVh9bWVzYS1kcml2ZXItJXMiICUgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCiAKICAgICBwaXBlX2RyaXZlcnNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignbGliZGlyJywgVHJ1ZSksICJnYWxsaXVtLXBpcGUiKQogICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBpcGVfZHJpdmVyc19yb290LCAnXnBpcGVfKC4qKVwuc28kJywgJ21lc2EtZHJpdmVyLXBpcGUtJXMnLCAnTWVzYSAlcyBwaXBlIGRyaXZlcicsIGV4dHJhX2RlcGVuZHM9JycpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMS4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMS4xLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMmFmY2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTEuMS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcmVxdWlyZSAke0JQTn0uaW5jCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS8ke1BWfS9tZXNhLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9yZXBsYWNlX2dsaWJjX2NoZWNrX3dpdGhfbGludXgucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMTA0M2RmYjkwN2JlZWNiMmE3NjEyNzI0NTU5NjA0MjciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjRkYjA3NGZjNTE0MTM2YjVmYjM4OTAxMTFmMGQ1MDYwNGRiNTJmMGIxZTk0YmEzZmNiMGZlODY2OGE3ZmQyMCIKLQotI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCi0jbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCi0gICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCi0gICAgZmkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEyLjAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEyLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDE4OWUzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTIuMC4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5mcmVlZGVza3RvcC5vcmcvcHViL21lc2EvJHtQVn0vbWVzYS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vcmVwbGFjZV9nbGliY19jaGVja193aXRoX2xpbnV4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsYW5nLWNvbXBpbGUtUFI4OTU5OS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWFzbS1vbi1ub24tZ2NjLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjk3MmZkNWFkNWE2M2FlYWJmMTczZmI5YWRlZmM2NTIyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJhYjI0ZmI3OWY3OGM4NzYwNzM1MjdmNTE1ZWQ4NzFmYzljODFkODE2ZjY2YzhhMGIwNTFkOGQ2NTM4OTYzODkiCisKKyNiZWNhdXNlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgYWxsIGFwcHMgd2lsbCB1c2UgcGtnY29uZmlnLAorI21ha2UgZWdscGxhdGZvcm0uaCBpbmRlcGVuZGVudCBvZiBNRVNBX0VHTF9OT19YMTFfSEVBREVSCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdlZ2wnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MvXiNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSQvI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpIHx8ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICcwJywgJzEnLCBkKX0vJyAke0R9JHtpbmNsdWRlZGlyfS9FR0wvZWdscGxhdGZvcm0uaAorICAgIGZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M4YTgzMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotRml4IGJ1aWxkIGZvciBTICE9IEIKLQotVGhpcyBwYXRjaCBpcyBzcGVjaWZpYyB0byB2ZXJzaW9uIDEuNC54Ci1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBAIGh0dHBzOi8vZ2l0aHViLmNvbS9jbHV0dGVyLXByb2plY3QvbXgvaXNzdWVzLzgxCi1TaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KLS0tCi1JbmRleDogZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjA3OjAyLjAyNzE1NDc4OCArMDEwMAotKysrIGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC1ndGsvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToxNDozMy42ODQzMTg2NTAgKzAxMDAKLUBAIC0xLDMgKzEsNiBAQAotK0VYVFJBX0RJU1Q9Ci0rQ0xFQU5GSUxFUz0KLSsKLSAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KLSAKLSAjIFdlIHJlcXVpcmUgYXV0b21ha2UgMS42IGF0IGxlYXN0LgotQEAgLTc3LDcgKzgwLDcgQEAKLSBHVEtET0NfTElCUz0kKE1YX0xJQlMpICQodG9wX2J1aWxkZGlyKS9teC1ndGsvbGlibXgtZ3RrLSQoTVhfQVBJX1ZFUlNJT04pLmxhCi0gCi0gIyBUaGlzIGluY2x1ZGVzIHRoZSBzdGFuZGFyZCBndGstZG9jIG1ha2UgcnVsZXMsIGNvcGllZCBieSBndGtkb2NpemUuCi0taW5jbHVkZSAkKHRvcF9zcmNkaXIpL2d0ay1kb2MubWFrZQotK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL2d0ay1kb2MubWFrZQotIAotICMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZQotIEVYVFJBX0RJU1QgKz0gdmVyc2lvbi54bWwuaW4KLUluZGV4OiBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjA3OjAyLjAyNzE1NDc4OCArMDEwMAotKysrIGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE0OjI0LjQ1NjM3ODEzNSArMDEwMAotQEAgLTEsMyArMSw2IEBACi0rRVhUUkFfRElTVD0KLStDTEVBTkZJTEVTPQotKwotICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgotIAotICMgV2UgcmVxdWlyZSBhdXRvbWFrZSAxLjYgYXQgbGVhc3QuCi1AQCAtMTA2LDcgKzEwOSw3IEBACi0gR1RLRE9DX0xJQlM9JChNWF9MSUJTKSAkKHRvcF9idWlsZGRpcikvbXgvbGlibXgtJChNWF9BUElfVkVSU0lPTikubGEKLSAKLSAjIFRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbWFrZSBydWxlcywgY29waWVkIGJ5IGd0a2RvY2l6ZS4KLS1pbmNsdWRlICQodG9wX3NyY2RpcikvZ3RrLWRvYy5tYWtlCi0raW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZ3RrLWRvYy5tYWtlCi0gCi0gIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlCi0gRVhUUkFfRElTVCArPSB2ZXJzaW9uLnhtbC5pbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYgppbmRleCA1NTQ1YzFlLi41OGE2OTk3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYgpAQCAtOCw3ICs4LDYgQEAKIFVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPl5cZCsoXC4oPyE5OSlcZCspKykiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9jbHV0dGVyLXByb2plY3QvbXguZ2l0O2JyYW5jaD1teC0xLjQgXAotCSAgIGZpbGU6Ly9maXgtYnVpbGQtZGlyLnBhdGNoIFwKIAkgICBmaWxlOi8vZml4LXRlc3QtaW5jbHVkZXMucGF0Y2ggXAogCSAgIgogUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXguaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMKaW5kZXggNGYxMDk1Ny4uZDMwNDgzNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMKQEAgLTEsMTYgKzEsMTUgQEAKIFNVTU1BUlkgPSAiQ2x1dHRlciBiYXNlZCBVSSB3aWRnZXQgbGlicmFyeSIKIExJQ0VOU0UgPSAiTEdQTHYyLjEiCiAKLWluaGVyaXQgY2x1dHRlciBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjayBnb2JqZWN0LWludHJvc3BlY3Rpb24KK2luaGVyaXQgY2x1dHRlciBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jCiAjIGRlcGVuZHMgb24gY2x1dHRlci0xLjAgd2hpY2ggZGVwZW5kcyBvbiBjb2dsLTEuMAogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKIAotREVQRU5EUyA9ICJjbHV0dGVyLTEuMCBkYnVzLWdsaWIgZ2RrLXBpeGJ1ZiIKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIGNsdXR0ZXItMS4wIGRidXMtZ2xpYiBnZGstcGl4YnVmIgogCiBTUkNfVVJJID0gImh0dHA6Ly9zb3VyY2UuY2x1dHRlci1wcm9qZWN0Lm9yZy9zb3VyY2VzL214LyR7QGdldF92ZXJkaXIoIiR7UFZ9Iil9L214LSR7UFZ9LnRhci54eiIKIAotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGstZG9jCQlcCi0JICAgICAgICAtLWRpc2FibGUtZ3RrLXdpZGdldHMJCVwKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3RrLXdpZGdldHMJCVwKIAkJLS13aXRoLWRidXMJCQlcCiAJCS0td2l0aC13aW5zeXM9bm9uZQkJXAogCQktLXdpdGhvdXQtY2x1dHRlci1pbWNvbnRleHQJXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYgppbmRleCA1NzM0YjI3Li44N2M3MDBlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYgpAQCAtMyw3ICszLDYgQEAKICMKIAogU1VNTUFSWSA9ICJDbHV0dGVyIHBhY2thZ2UgZ3JvdXBzIgotTElDRU5TRSA9ICJNSVQiCiAKIFBSID0gInI2IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NTdhMWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotU1VNTUFSWSA9ICJEaXJlY3RGQiB3aXRob3V0IFgxMSIKLUxJQ0VOU0UgPSAiTUlUIgotCi1QQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgotCi1pbmhlcml0IHBhY2thZ2Vncm91cAotCi1UT1VDSCA9ICcgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidG91Y2hzY3JlZW4iLCAidHNsaWIgdHNsaWItY2FsaWJyYXRlIHRzbGliLXRlc3RzIiwgIiIsZCl9JwotCi1SREVQRU5EU18ke1BOfSA9ICIgXAotCQlkaXJlY3RmYiBcCi0JCWRpcmVjdGZiLWV4YW1wbGVzIFwKLQkJcGFuZ28gXAotCQlmb250Y29uZmlnIFwKLQkJJHtUT1VDSH0gXAotIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCmluZGV4IDE3MzAxYTAuLjdlYTcyZDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIKQEAgLTEsNiArMSw1IEBACiBTVU1NQVJZID0gIkJhc2ljIFgxMSBzZXNzaW9uIgogREVTQ1JJUFRJT04gPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc2V0IHVwIGEgYmFzaWMgd29ya2luZyBYMTEgc2Vzc2lvbiIKLUxJQ0VOU0UgPSAiTUlUIgogUFIgPSAicjEiCiAKIGluaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjawpAQCAtMTEsNyArMTAsNiBAQAogICAgIHBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyIFwKICAgICBwYWNrYWdlZ3JvdXAtY29yZS14MTEtdXRpbHMgXAogICAgIGRidXMgXAotICAgIHBvaW50ZXJjYWwgXAogICAgIG1hdGNoYm94LXRlcm1pbmFsIFwKICAgICBtYXRjaGJveC13bSBcCiAgICAgbWluaS14LXNlc3Npb24gXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiCmluZGV4IGM1M2YxYjcuLjZiNTAwMjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlci5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKQEAgLTMsNyArMyw2IEBACiAjCiAKIFNVTU1BUlkgPSAiWDExIGRpc3BsYXkgc2VydmVyIgotTElDRU5TRSA9ICJNSVQiCiBQUiA9ICJyNDAiCiAKIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYgppbmRleCAzNTM3ZDhjLi40MjkxNDI0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIKQEAgLTIsNyArMiw2IEBACiAjIENvcHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgogIwogCi1MSUNFTlNFID0gIk1JVCIKIFBSID0gInI0MCIKIAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLzAwMDEtRW5mb3JjZS1yZWNyZWF0aW9uLW9mLWRvY3MtcGFuZ28udHlwZXMtaXQtaXMtYnVpbGQtYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vMDAwMS1FbmZvcmNlLXJlY3JlYXRpb24tb2YtZG9jcy1wYW5nby50eXBlcy1pdC1pcy1idWlsZC1jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ODRhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLzAwMDEtRW5mb3JjZS1yZWNyZWF0aW9uLW9mLWRvY3MtcGFuZ28udHlwZXMtaXQtaXMtYnVpbGQtYy5wYXRjaApAQCAtMCwwICsxLDE0NyBAQAorRnJvbSA1MjZhNmE5ZmM5YTFjZmU3NWM1MjFjOGJiMzliNjE3NTRmZTQyZmU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIgU2VwIDIwMTYgMTQ6MDA6MjQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRW5mb3JjZSByZWNyZWF0aW9uIG9mIGRvY3MvcGFuZ28udHlwZXM7IGl0IGlzIGJ1aWxkCisgY29uZmlndXJhdGlvbi1zcGVjaWZpYy4KKworSW4gcGFydGljdWxhciwgaXQgbmVlZHMgdG8gZXhjbHVkZSByZWZlcmVuY2VzIHRvIFBhbmdvWGZ0IGlmIFhmdCBpcyBub3QgYXZhaWxhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZG9jcy9NYWtlZmlsZS5hbSB8IDE3ICsrKystLS0tLS0tLQorIGRvY3MvcGFuZ28udHlwZXMgfCA4MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA5MiBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZG9jcy9wYW5nby50eXBlcworCitkaWZmIC0tZ2l0IGEvZG9jcy9NYWtlZmlsZS5hbSBiL2RvY3MvTWFrZWZpbGUuYW0KK2luZGV4IGY1ZjEzMTcuLjg5NDdhOTkgMTAwNjQ0CistLS0gYS9kb2NzL01ha2VmaWxlLmFtCisrKysgYi9kb2NzL01ha2VmaWxlLmFtCitAQCAtNDksNiArNDksMTAgQEAgSUdOT1JFX0hGSUxFUz0JCQlcCisgCXBhbmdvY29yZXRleHQtcHJpdmF0ZS5oCQlcCisgCXBhbmdvYXRzdWktcHJpdmF0ZS5oCisgCisraWYgIUhBVkVfWEZUCisrSUdOT1JFX0hGSUxFUyArPSBwYW5nb3hmdCBwYW5nb3hmdC1yZW5kZXIuaAorK2VuZGlmCisrCisgIyBDRkxBR1MgYW5kIExERkxBR1MgZm9yIGNvbXBpbGluZyBzY2FuIHByb2dyYW0uIE9ubHkgbmVlZGVkCisgIyBpZiAkKERPQ19NT0RVTEUpLnR5cGVzIGlzIG5vbi1lbXB0eS4KKyBJTkNMVURFUyA9ICAgICAgICAgICAgICAgCVwKK0BAIC0xMDMsMTYgKzEwNyw2IEBAIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9ndGstZG9jLm1ha2UKKyAjIFRoaXMgbGluZSByZWFsbHkgYmVsb25ncyBpbiBndGstZG9jLm1rCisgJChSRVBPUlRfRklMRVMpOiBzZ21sLWJ1aWxkLnN0YW1wCisgCistcGFuZ28udHlwZXM6CistCUBlY2hvICJSZWJ1aWxkaW5nICRAIgorLQlATEFORz1DOyBMSVNUPSQkKGdyZXAgJ3BhbmdvX1tfYS16QS1aMC05XSpfZ2V0X3R5cGUnICQoSEZJTEVfR0xPQikgfCBncmVwIC12ICdcKHByaXZhdGVcfGF0c3VpXHxjb3JlX3RleHRcfHdpbjMyXCknIHwgc2VkICdzL1woW146XSo6XCkuKlwocGFuZ29bX2EtekEtWjAtOV0qX2dldF90eXBlXCkuKi9cMVwyLycpICYmIFwKKy0JZWNobyAiJCRMSVNUIiB8IHNlZCAncy8uKlwvXChwYW5nb1wvLipcKTouKi8jaW5jbHVkZSA8XDE+LycgfCBzb3J0IC11ID4gJEAudG1wICYmIFwKKy0JZWNobyA+PiAkQC50bXAgJiYgXAorLQllY2hvICIkJExJU1QiIHwgY3V0IC1kIDogLWYgMiB8IHNvcnQgLXUgPj4gJEAudG1wICYmIFwKKy0JbXYgJEAudG1wICRACistCistQlVJTFRfU09VUkNFUyA9IHBhbmdvLnR5cGVzCistCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgCisgTUFJTlRBSU5FUkNMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpCitAQCAtMTIwLDggKzExNCw3IEBAIEVYVFJBX0RJU1QgKz0JCQkJXAorIAlsYXlvdXQuZmlnCQkJXAorIAlsYXlvdXQuZXBzCQkJXAorIAl2ZXJzaW9uLnhtbC5pbgkJCVwKKy0JY2hlY2suZG9jcwkJCVwKKy0JcGFuZ28udHlwZXMKKysJY2hlY2suZG9jcworIAorICMgZm9yY2UgZG9jIHJlYnVsaWQgYWZ0ZXIgY29uZmlndXJlCisgZGlzdC1ob29rLWxvY2FsOiBkaXN0LWxvY2FsLWNoZWNrLW5vLWNyb3NzLXJlZmVyZW5jZXMgYWxsLWxvY2FsCitkaWZmIC0tZ2l0IGEvZG9jcy9wYW5nby50eXBlcyBiL2RvY3MvcGFuZ28udHlwZXMKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggN2Q5M2NkYS4uMDAwMDAwMAorLS0tIGEvZG9jcy9wYW5nby50eXBlcworKysrIC9kZXYvbnVsbAorQEAgLTEsODAgKzAsMCBAQAorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1hdHRyaWJ1dGVzLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWNvbnRleHQuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tZW5naW5lLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWVudW0tdHlwZXMuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tZm9udC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1mb250bWFwLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWZvbnRzZXQuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tZ2x5cGgtaXRlbS5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1nbHlwaC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1pdGVtLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWxhbmd1YWdlLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWxheW91dC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1tYXRyaXguaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tb3QuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tcmVuZGVyZXIuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tdGFicy5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLWZjLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1kZWNvZGVyLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nb2ZjLWZvbnRtYXAuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ29mdDIuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ294ZnQtcmVuZGVyLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdveGZ0Lmg+CistCistcGFuZ29fYWxpZ25tZW50X2dldF90eXBlCistcGFuZ29fYXR0cl9saXN0X2dldF90eXBlCistcGFuZ29fYXR0cl90eXBlX2dldF90eXBlCistcGFuZ29fYmlkaV90eXBlX2dldF90eXBlCistcGFuZ29fY2Fpcm9fZmNfZm9udF9tYXBfZ2V0X3R5cGUKKy1wYW5nb19jYWlyb19mb250X2dldF90eXBlCistcGFuZ29fY2Fpcm9fZm9udF9tYXBfZ2V0X3R5cGUKKy1wYW5nb19jb2xvcl9nZXRfdHlwZQorLXBhbmdvX2NvbnRleHRfZ2V0X3R5cGUKKy1wYW5nb19jb3ZlcmFnZV9sZXZlbF9nZXRfdHlwZQorLXBhbmdvX2RpcmVjdGlvbl9nZXRfdHlwZQorLXBhbmdvX2VsbGlwc2l6ZV9tb2RlX2dldF90eXBlCistcGFuZ29fZW5naW5lX2dldF90eXBlCistcGFuZ29fZW5naW5lX2xhbmdfZ2V0X3R5cGUKKy1wYW5nb19lbmdpbmVfc2hhcGVfZ2V0X3R5cGUKKy1wYW5nb19mY19kZWNvZGVyX2dldF90eXBlCistcGFuZ29fZmNfZm9udF9nZXRfdHlwZQorLXBhbmdvX2ZjX2ZvbnRfbWFwX2dldF90eXBlCistcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfdHlwZQorLXBhbmdvX2ZvbnRfZmFjZV9nZXRfdHlwZQorLXBhbmdvX2ZvbnRfZmFtaWx5X2dldF90eXBlCistcGFuZ29fZm9udF9nZXRfdHlwZQorLXBhbmdvX2ZvbnRfbWFwX2dldF90eXBlCistcGFuZ29fZm9udF9tYXNrX2dldF90eXBlCistcGFuZ29fZm9udF9tZXRyaWNzX2dldF90eXBlCistcGFuZ29fZm9udHNldF9nZXRfdHlwZQorLXBhbmdvX2ZvbnRzZXRfc2ltcGxlX2dldF90eXBlCistcGFuZ29fZnQyX2ZvbnRfbWFwX2dldF90eXBlCistcGFuZ29fZ2x5cGhfaXRlbV9nZXRfdHlwZQorLXBhbmdvX2dseXBoX2l0ZW1faXRlcl9nZXRfdHlwZQorLXBhbmdvX2dseXBoX3N0cmluZ19nZXRfdHlwZQorLXBhbmdvX2dyYXZpdHlfZ2V0X3R5cGUKKy1wYW5nb19ncmF2aXR5X2hpbnRfZ2V0X3R5cGUKKy1wYW5nb19pdGVtX2dldF90eXBlCistcGFuZ29fbGFuZ3VhZ2VfZ2V0X3R5cGUKKy1wYW5nb19sYXlvdXRfZ2V0X3R5cGUKKy1wYW5nb19sYXlvdXRfaXRlcl9nZXRfdHlwZQorLXBhbmdvX2xheW91dF9saW5lX2dldF90eXBlCistcGFuZ29fbWF0cml4X2dldF90eXBlCistcGFuZ29fb3RfaW5mb19nZXRfdHlwZQorLXBhbmdvX290X3J1bGVzZXRfZ2V0X3R5cGUKKy1wYW5nb19yZW5kZXJfcGFydF9nZXRfdHlwZQorLXBhbmdvX3JlbmRlcmVyX2dldF90eXBlCistcGFuZ29fc2NyaXB0X2dldF90eXBlCistcGFuZ29fc3RyZXRjaF9nZXRfdHlwZQorLXBhbmdvX3N0eWxlX2dldF90eXBlCistcGFuZ29fdGFiX2FsaWduX2dldF90eXBlCistcGFuZ29fdGFiX2FycmF5X2dldF90eXBlCistcGFuZ29fdW5kZXJsaW5lX2dldF90eXBlCistcGFuZ29fdmFyaWFudF9nZXRfdHlwZQorLXBhbmdvX3dlaWdodF9nZXRfdHlwZQorLXBhbmdvX3dyYXBfbW9kZV9nZXRfdHlwZQorLXBhbmdvX3hmdF9mb250X2dldF90eXBlCistcGFuZ29feGZ0X2ZvbnRfbWFwX2dldF90eXBlCistcGFuZ29feGZ0X3JlbmRlcmVyX2dldF90eXBlCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS4zOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM4LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzY1ZmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM4LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1TVU1NQVJZID0gIkZyYW1ld29yayBmb3IgbGF5b3V0IGFuZCByZW5kZXJpbmcgb2YgaW50ZXJuYXRpb25hbGl6ZWQgdGV4dCIKLURFU0NSSVBUSU9OID0gIlBhbmdvIGlzIGEgbGlicmFyeSBmb3IgbGF5aW5nIG91dCBhbmQgcmVuZGVyaW5nIG9mIHRleHQsIFwKLXdpdGggYW4gZW1waGFzaXMgb24gaW50ZXJuYXRpb25hbGl6YXRpb24uIFBhbmdvIGNhbiBiZSB1c2VkIGFueXdoZXJlIFwKLXRoYXQgdGV4dCBsYXlvdXQgaXMgbmVlZGVkLCB0aG91Z2ggbW9zdCBvZiB0aGUgd29yayBvbiBQYW5nbyBzbyBmYXIgaGFzIFwKLWJlZW4gZG9uZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgR1RLKyB3aWRnZXQgdG9vbGtpdC4gUGFuZ28gZm9ybXMgdGhlIFwKLWNvcmUgb2YgdGV4dCBhbmQgZm9udCBoYW5kbGluZyBmb3IgR1RLKy0yLnguIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wYW5nby5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJMR1BMdjIuMCsiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IgotCi1pbmhlcml0IGdub21lYmFzZSBndGstZG9jIHB0ZXN0LWdub21lIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1Ecm9wLWludHJvc3BlY3Rpb24tbWFjcm9zLWZyb20tYWNpbmNsdWRlLm00LnBhdGNoIFwKLSIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiN2ZkZTM1ZDRhMTI3YjU1Y2U4YmJjZWZlMTA5YmM4MGQiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxMzIwNTY5ZjZjNmQ3NWQ2YjY2MTcyYjJkMjhlNTljNTZlZTg2NGVlOWRmMjAyYjc2Nzk5YzQ1MDZhMjE0ZWI3IgotCi1ERVBFTkRTID0gImdsaWItMi4wIGdsaWItMi4wLW5hdGl2ZSBmb250Y29uZmlnIGZyZWV0eXBlIHZpcnR1YWwvbGliaWNvbnYgY2Fpcm8gaGFyZmJ1enoiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgotUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14ZnQsLS13aXRob3V0LXhmdCx2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQiCi0KLUVYVFJBX0FVVE9SRUNPTkYgPSAiIgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLQkgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyBcCi0JICAgICAgICAiCi0KLUxFQURfU09OQU1FID0gImxpYnBhbmdvLTEuMCoiCi1MSUJWID0gIjEuOC4wIgotCi0jIFRoaXMgYmluYXJ5IG5lZWRzIHRvIGJlIGNvbXBpbGVkIGZvciB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuICBUaGlzIGlzbid0IHByZXR0eSEKLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgewotCWlmICR7QGJhc2VfY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCi0JCW1ha2UgQ0M9IiR7QlVJTERfQ0N9IiBDRkxBR1M9IiIgTERGTEFHUz0iIiBBTV9DUFBGTEFHUz0iJChwa2ctY29uZmlnLW5hdGl2ZSAtLWNmbGFncyBnbGliLTIuMCkiIGdlbl9hbGxfdW5pY29kZV9MREFERD0iJChwa2ctY29uZmlnLW5hdGl2ZSAtLWxpYnMgZ2xpYi0yLjApIiAtQyAke0J9L3Rlc3RzIGdlbi1hbGwtdW5pY29kZQotCWZpCi19Ci0KLUZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7bGliZGlyfS9saWJwYW5nbyoke1NPTElCU30iCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvKi5sYSIKLQotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYmVyYXRpb24tZm9udHMgY2FudGFyZWxsLWZvbnRzIgotCi1SUFJPVklERVNfJHtQTn0gKz0gInBhbmdvLW1vZHVsZXMgcGFuZ28tbW9kdWxlLWluZGljLWxhbmcgXAotICAgICAgICAgICAgICAgICAgICBwYW5nby1tb2R1bGUtYmFzaWMtZmMgcGFuZ28tbW9kdWxlLWFyYWJpYy1sYW5nIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS40MC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjQwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmMzQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS40MC4xLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiRnJhbWV3b3JrIGZvciBsYXlvdXQgYW5kIHJlbmRlcmluZyBvZiBpbnRlcm5hdGlvbmFsaXplZCB0ZXh0IgorREVTQ1JJUFRJT04gPSAiUGFuZ28gaXMgYSBsaWJyYXJ5IGZvciBsYXlpbmcgb3V0IGFuZCByZW5kZXJpbmcgb2YgdGV4dCwgXAord2l0aCBhbiBlbXBoYXNpcyBvbiBpbnRlcm5hdGlvbmFsaXphdGlvbi4gUGFuZ28gY2FuIGJlIHVzZWQgYW55d2hlcmUgXAordGhhdCB0ZXh0IGxheW91dCBpcyBuZWVkZWQsIHRob3VnaCBtb3N0IG9mIHRoZSB3b3JrIG9uIFBhbmdvIHNvIGZhciBoYXMgXAorYmVlbiBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBHVEsrIHdpZGdldCB0b29sa2l0LiBQYW5nbyBmb3JtcyB0aGUgXAorY29yZSBvZiB0ZXh0IGFuZCBmb250IGhhbmRsaW5nIGZvciBHVEsrLTIueC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBhbmdvLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgcHRlc3QtZ25vbWUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgorCitTUkNfVVJJICs9ICJmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLURyb3AtaW50cm9zcGVjdGlvbi1tYWNyb3MtZnJvbS1hY2luY2x1ZGUubTQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtRW5mb3JjZS1yZWNyZWF0aW9uLW9mLWRvY3MtcGFuZ28udHlwZXMtaXQtaXMtYnVpbGQtYy5wYXRjaCBcCisiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI2ZmM4OGM2NTI5ODkwZDZjOGUwMzA3NGQ1N2EzZWNlYiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImUyN2FmNTQxNzJjNzJiM2FjNmJlNTNjOWE0YzY3MDUzZTE2YzkwNWUwMmFkZGNmM2E2MDNjZWIyMDA1YzFhNDAiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGZvbnRjb25maWcgZnJlZXR5cGUgdmlydHVhbC9saWJpY29udiBjYWlybyBoYXJmYnV6eiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXhmdCwtLXdpdGhvdXQteGZ0LHZpcnR1YWwvbGlieDExIGxpYnhmdCIKKworRVhUUkFfQVVUT1JFQ09ORiA9ICIiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorCSAgICAgICAgLS1kaXNhYmxlLWRlYnVnIFwKKwkgICAgICAgICIKKworTEVBRF9TT05BTUUgPSAibGlicGFuZ28tMS4wKiIKK0xJQlYgPSAiMS44LjAiCisKKyMgVGhpcyBiaW5hcnkgbmVlZHMgdG8gYmUgY29tcGlsZWQgZm9yIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gIFRoaXMgaXNuJ3QgcHJldHR5IQorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCW1ha2UgQ0M9IiR7QlVJTERfQ0N9IiBDRkxBR1M9IiIgTERGTEFHUz0iJHtCVUlMRF9MREZMQUdTfSIgQU1fQ1BQRkxBR1M9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1jZmxhZ3MgZ2xpYi0yLjApIiBnZW5fYWxsX3VuaWNvZGVfTERBREQ9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1saWJzIGdsaWItMi4wKSIgLUMgJHtCfS90ZXN0cyBnZW4tYWxsLXVuaWNvZGUKKwlmaQorfQorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke2xpYmRpcn0vbGlicGFuZ28qJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzLyoubGEiCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJsaWJlcmF0aW9uLWZvbnRzIGNhbnRhcmVsbC1mb250cyIKKworUlBST1ZJREVTXyR7UE59ICs9ICJwYW5nby1tb2R1bGVzIHBhbmdvLW1vZHVsZS1pbmRpYy1sYW5nIFwKKyAgICAgICAgICAgICAgICAgICAgcGFuZ28tbW9kdWxlLWJhc2ljLWZjIHBhbmdvLW1vZHVsZS1hcmFiaWMtbGFuZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS1jbWFrZS1MaW5rLXRlc3QtdXRpbHMtd2l0aC1sZGwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS1jbWFrZS1MaW5rLXRlc3QtdXRpbHMtd2l0aC1sZGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxYzk0NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLWNtYWtlLUxpbmstdGVzdC11dGlscy13aXRoLWxkbC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitCYWNrcG9ydCBwYXRjaCB0byBmaXggYnVpbGQgd2l0aCBnb2xkIGxpbmtlci4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworCisKK0Zyb20gOTNhNzExMzQ4NWNmMWM1NWZkNzA3NjExNmZhZjViM2E2OTA3MDZiMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDMwIEF1ZyAyMDE2IDE3OjE3OjI4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNtYWtlOiBMaW5rIHRlc3QgdXRpbHMgd2l0aCAiLWxkbCIKKworV2l0aG91dCB0aGlzIGxpbmtpbmcgQ1hYIGV4ZWN1dGFibGVzIChlLmcuIGZiby1ibGl0LXN0cmV0Y2gpIGZhaWxzCit3aXRoIGdvbGQgbGlua2VyOgorCit8IGxpYnBpZ2xpdHV0aWxfZ2wuc28uMDogZXJyb3I6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gJ2Rsc3ltJworfCBsaWJwaWdsaXR1dGlsX2dsLnNvLjA6IGVycm9yOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvICdkbGVycm9yJworfCBsaWJwaWdsaXR1dGlsX2dsLnNvLjA6IGVycm9yOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvICdkbG9wZW4nCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitSZXZpZXdlZC1ieTogRW1pbCBWZWxpa292IDxlbWlsLnZlbGlrb3ZAY29sbGFib3JhLmNvbT4KKy0tLQorIHRlc3RzL3V0aWwvQ01ha2VMaXN0cy50eHQgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvdXRpbC9DTWFrZUxpc3RzLnR4dCBiL3Rlc3RzL3V0aWwvQ01ha2VMaXN0cy50eHQKK2luZGV4IGUxZjgwNzMuLjNkNWJlZjUgMTAwNjQ0CistLS0gYS90ZXN0cy91dGlsL0NNYWtlTGlzdHMudHh0CisrKysgYi90ZXN0cy91dGlsL0NNYWtlTGlzdHMudHh0CitAQCAtMTEsNiArMTEsOCBAQCBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoCisgCVBST1BFUlRJRVMgR0VORVJBVEVEIDEKKyAJKQorIAorK2xpbmtfbGlicmFyaWVzKCR7Q01BS0VfRExfTElCU30pCisrCisgaWYoSEFWRV9MSUJDQUNBKQorICAgICBsaW5rX2xpYnJhcmllcyhjYWNhKQorIGVuZGlmKCkKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtY21ha2UtTGluay11dGlscy13aXRoLXhjYi1leHBsaWNpdGx5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtY21ha2UtTGluay11dGlscy13aXRoLXhjYi1leHBsaWNpdGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTgwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS1jbWFrZS1MaW5rLXV0aWxzLXdpdGgteGNiLWV4cGxpY2l0bHkucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA3M2U0ZmJjNTc3N2VkZGQ4OWJiMGZiMTZlOTAzNDM1NTFmZTNlMGVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgNSBKdWwgMjAxNiAxMDo1NjoyMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBjbWFrZTogTGluayB1dGlscyB3aXRoIHhjYiBleHBsaWNpdGx5CisKK0xpbmtpbmcgd2l0aCBnKysgY2FuIHJlcG9ydGVkbHkgbGVhZCB0bzoKKworbGlicGlnbGl0dXRpbF9nbC5zby4wOiBlcnJvcjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byAneGNiX2Nvbm5lY3QnCitsaWJwaWdsaXR1dGlsX2dsLnNvLjA6IGVycm9yOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvICd4Y2JfZ2V0X3NldHVwJworbGlicGlnbGl0dXRpbF9nbC5zby4wOiBlcnJvcjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byAneGNiX3NldHVwX3Jvb3RzX2l0ZXJhdG9yJworCitUaGlzIG1heSBoYXZlIGFwcGVhcmVkIG5vdyBiZWNhdXNlIHhjYi1kcmkyIHVzZWQgdG8gb3ZlcmxpbmsgcHVibGljbHkKK2J1dCBub3cgZG9lcyBub3QuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCistLS0KKyBDTWFrZUxpc3RzLnR4dCAgICAgICAgICAgIHwgMSArCisgdGVzdHMvdXRpbC9DTWFrZUxpc3RzLnR4dCB8IDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAoraW5kZXggOGUyYWJiYS4uMmUxYTQ3MyAxMDA2NDQKKy0tLSBhL0NNYWtlTGlzdHMudHh0CisrKysgYi9DTWFrZUxpc3RzLnR4dAorQEAgLTE1MSw2ICsxNTEsNyBAQCBJRigke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJMaW51eCIpCisgCisgCXBrZ19jaGVja19tb2R1bGVzKExJQkRSTSBRVUlFVCBsaWJkcm0pCisgCXBrZ19jaGVja19tb2R1bGVzKExJQkRSTV9JTlRFTCBRVUlFVCBsaWJkcm1faW50ZWwpCisrCXBrZ19jaGVja19tb2R1bGVzKFhDQiBRVUlFVCB4Y2IpCisgCXBrZ19jaGVja19tb2R1bGVzKFhDQl9EUkkyIFFVSUVUIHhjYi1kcmkyKQorIAlwa2dfY2hlY2tfbW9kdWxlcyhHTFBST1RPIFFVSUVUIGdscHJvdG8pCisgRUxTRUlGKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIldpbmRvd3MiKQorZGlmZiAtLWdpdCBhL3Rlc3RzL3V0aWwvQ01ha2VMaXN0cy50eHQgYi90ZXN0cy91dGlsL0NNYWtlTGlzdHMudHh0CitpbmRleCBmYjIyZmZhLi5lMWY4MDczIDEwMDY0NAorLS0tIGEvdGVzdHMvdXRpbC9DTWFrZUxpc3RzLnR4dAorKysrIGIvdGVzdHMvdXRpbC9DTWFrZUxpc3RzLnR4dAorQEAgLTEyMSwxMSArMTIxLDEzIEBAIGlmKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIkxpbnV4IikKKyAKKyAJCWxpc3QoQVBQRU5EIFVUSUxfR0xfTElCUworIAkJCSR7TElCRFJNX0xERkxBR1N9CisrCQkJJHtYQ0JfTERGTEFHU30KKyAJCQkke1hDQl9EUkkyX0xERkxBR1N9CisgCQkpCisgCisgCQlsaXN0KEFQUEVORCBVVElMX0dMX0lOQ0xVREVTCisgCQkJJHtMSUJEUk1fSU5DTFVERV9ESVJTfQorKwkJCSR7WENCX0lOQ0xVREVfRElSU30KKyAJCQkke1hDQl9EUkkyX0lOQ0xVREVfRElSU30KKyAJCSkKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtY21ha2UtaW5zdGFsbC1iYXNoLWNvbXBsZXRpb25zLWluLXRoZS1yaWdodC1wbGFjZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLWNtYWtlLWluc3RhbGwtYmFzaC1jb21wbGV0aW9ucy1pbi10aGUtcmlnaHQtcGxhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3ZTgxMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLWNtYWtlLWluc3RhbGwtYmFzaC1jb21wbGV0aW9ucy1pbi10aGUtcmlnaHQtcGxhY2UucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAyNmZhYTJjMTU3YTI3YTE4YTlmNzY3OTc2NzMwZmUwYzExNWUzYWY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTMgSnVsIDIwMTYgMTk6MTk6MDIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY21ha2U6IGluc3RhbGwgYmFzaC1jb21wbGV0aW9ucyBpbiB0aGUgcmlnaHQgcGxhY2UKKworVGhlIGNvbXBsZXRpb25zZGlyIHZhcmlhYmxlIGlzIGEgZnVsbCBwYXRoIGFuZCBzaG91bGQgbm90IGJlCitwcmVmaXhlZC4KKworVGhpcyBkb2VzIG1lYW4gdGhlIGZpbGVzIG1heSBiZSBpbnN0YWxsZWQgb3V0c2lkZSBvZgorQ01BS0VfSU5TVEFMTF9QUkVGSVggLS0gdGhlIGFsdGVybmF0aXZlIGlzIG1vcmUgZGlmZmljdWx0IGFuZAorbWVhbnMgdGhhdCBiYXNoIGNvbXBsZXRpb24gZmlsZXMgbWF5IGJlIGluc3RhbGxlZCB3aGVyZQorYmFzaC1jb21wbGV0aW9uIGNhbid0IGZpbmQgdGhlbS4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFttYWlsaW5nIGxpc3RdCistLS0KKyBDTWFrZUxpc3RzLnR4dCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKK2luZGV4IDhlMmFiYmEuLjc4NGE4ZjkgMTAwNjQ0CistLS0gYS9DTWFrZUxpc3RzLnR4dAorKysrIGIvQ01ha2VMaXN0cy50eHQKK0BAIC01MzIsNyArNTMyLDcgQEAgaW5zdGFsbCAoCisgaWYgKEJBU0hfQ09NUExFVElPTl9GT1VORCkKKyAJaW5zdGFsbCgKKyAJCUZJTEVTIGNvbXBsZXRpb25zL2Jhc2gvcGlnbGl0CistCQlERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke0JBU0hfQ09NUExFVElPTl9DT01QTEVUSU9OU0RJUn0vCisrCQlERVNUSU5BVElPTiAke0JBU0hfQ09NUExFVElPTl9DT01QTEVUSU9OU0RJUn0vCisgCSkKKyBlbmRpZiAoQkFTSF9DT01QTEVUSU9OX0ZPVU5EKQorIAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyN2NjMDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KLQotRnJvbSBlNDBlMGEyNWY5OTZkMmUyMDVjNGJkZWMyYzhhNWNjN2Y3NGU1MDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KLURhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTY6MjU6MzAgLTAzMDAKLVN1YmplY3Q6IHRlc3RzOiBGaXggbWlzc2luZyBpbmNsdWRlIG9mIFh1dGlsLmgKLQotVGhlIEVHTCB0ZXN0cyByZWx5IG9uIFh1dGlsLmggYmVpbmcgaW5jbHVkZWQuIFNvbWUgRUdMIGltcGxlbWVudGF0aW9uCi1kb2VzIG5vdCBleHBsaXRseSBpbmNsdWRlIGl0IGJ5IGRlZmF1bHQgYW5kIHRoZW4gdGhlIGJ1aWxkIGZhaWxzLgotCi1TaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgotUmV2aWV3ZWQtYnk6IE5laWwgUm9iZXJ0cyA8bmVpbEBsaW51eC5pbnRlbC5jb20+Ci0KLWRpZmYgLS1naXQgYS90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jIGIvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYwotaW5kZXggMDUwNGEyNi4uMTU0YjU1YyAxMDA2NDQKLS0tLSBhL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKLSsrKyBiL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKLUBAIC0zMiw2ICszMiw3IEBACi0gLyogQ2h1bmtzIG9mIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSB0YWtlbiBmcm9tIGVnbC11dGlsLmMgKi8KLSAKLSAjaW5jbHVkZSA8WDExL1hsaWIuaD4KLSsjaW5jbHVkZSA8WDExL1h1dGlsLmg+Ci0gCi0gI2luY2x1ZGUgInBpZ2xpdC11dGlsLWdsLmgiCi0gI2luY2x1ZGUgInBpZ2xpdC11dGlsLWVnbC5oIgotLS0gCi1jZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLVVzZS1GRV9VUFdBUkQtb25seS1pZi1pdHMtZGVmaW5lZC1pbi1mZW52LmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1Vc2UtRkVfVVBXQVJELW9ubHktaWYtaXRzLWRlZmluZWQtaW4tZmVudi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTFhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1Vc2UtRkVfVVBXQVJELW9ubHktaWYtaXRzLWRlZmluZWQtaW4tZmVudi5oLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gMGZjMmMyOTMyNjk5Y2ZkNjhiZTk2YzgyMGZkZGZkZDc5YjQ4Yjc4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDkgSnVsIDIwMTYgMDc6NTI6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdHM6IFVzZSBGRV9VUFdBUkQgb25seSBpZiBpdHMgZGVmaW5lZCBpbiBmZW52LmgKKworT24gQVJNLCBtdXNsIGRvZXMgbm90IGRlZmluZSBGRV8qIHdoZW4gYXJjaCBkb2VzIG5vdCBoYXZlCitWRlAsICh3aGljaCBpcyByaWdodCBpbnRlcnByZXRhdGlvbiksIHRoZXJlZm9yZSBjaGVjayBpZgoraXRzIGRlZmluZWQgYmVmb3JlIHVzaW5nIGl0CisKK0ZpeGVzIGVycm9ycyBsaWtlCisKK3Rlc3RzL2dlbmVyYWwvcm91bmRtb2RlLXBpeGVsc3RvcmUuYzo4MjoxOTogZXJyb3I6ICdGRV9VUFdBUkQnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorICByZXQgPSBmZXNldHJvdW5kKEZFX1VQV0FSRCk7CisgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgdGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtZ2V0aW50ZWdlcnYuYyB8IDIgKysKKyB0ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1waXhlbHN0b3JlLmMgIHwgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1nZXRpbnRlZ2Vydi5jIGIvdGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtZ2V0aW50ZWdlcnYuYworaW5kZXggMjhlY2ZhZi4uNWMyNzU3OSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2dlbmVyYWwvcm91bmRtb2RlLWdldGludGVnZXJ2LmMKKysrKyBiL3Rlc3RzL2dlbmVyYWwvcm91bmRtb2RlLWdldGludGVnZXJ2LmMKK0BAIC04MSw3ICs4MSw5IEBAIHBpZ2xpdF9pbml0KGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CisgCWludCByZXQ7CisgCWJvb2wgcGFzcyA9IHRydWU7CisrI2lmZGVmIEZFX1VQV0FSRAorIAlyZXQgPSBmZXNldHJvdW5kKEZFX1VQV0FSRCk7CisrI2VuZGlmCisgCWlmIChyZXQgIT0gMCkgeworIAkJcHJpbnRmKCJDb3VsZG4ndCBzZXQgcm91bmRpbmcgbW9kZVxuIik7CisgCQlwaWdsaXRfcmVwb3J0X3Jlc3VsdChQSUdMSVRfU0tJUCk7CitkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtcGl4ZWxzdG9yZS5jIGIvdGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtcGl4ZWxzdG9yZS5jCitpbmRleCA5Mjg0ZjQzLi4zZmNiMzk2IDEwMDY0NAorLS0tIGEvdGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtcGl4ZWxzdG9yZS5jCisrKysgYi90ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1waXhlbHN0b3JlLmMKK0BAIC03OSw3ICs3OSw5IEBAIHBpZ2xpdF9pbml0KGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CisgCWludCByZXQ7CisgCWJvb2wgcGFzcyA9IHRydWU7CisrI2lmZGVmIEZFX1VQV0FSRAorIAlyZXQgPSBmZXNldHJvdW5kKEZFX1VQV0FSRCk7CisrI2VuZGlmCisgCWlmIChyZXQgIT0gMCkgeworIAkJcHJpbnRmKCJDb3VsZG4ndCBzZXQgcm91bmRpbmcgbW9kZVxuIik7CisgCQlwaWdsaXRfcmVwb3J0X3Jlc3VsdChQSUdMSVRfU0tJUCk7CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIKaW5kZXggNjA3ZjIzNi4uODJhZGNkZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCkBAIC0zLDE4ICszLDIyIEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMmJlZGVkNzEwM2EzZDhhNDQyYTJhMDM5MWQ2MDdiMCIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9waWdsaXQgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2giCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNtYWtlLWluc3RhbGwtYmFzaC1jb21wbGV0aW9ucy1pbi10aGUtcmlnaHQtcGxhY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0cy1Vc2UtRkVfVVBXQVJELW9ubHktaWYtaXRzLWRlZmluZWQtaW4tZmVudi5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY21ha2UtTGluay11dGlscy13aXRoLXhjYi1leHBsaWNpdGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY21ha2UtTGluay10ZXN0LXV0aWxzLXdpdGgtbGRsLnBhdGNoIFwKKyAgICAgICAgICAgIgogCi0jIEZyb20gMjAxNS0wMi0xOQotU1JDUkVWID0gImM0NTg1NDI3OTEzZTRjYjI4OTk0YjRiZmIxMWQ0OTc3ODI3M2FhMmMiCisjIEZyb20gMjAxNi0wNy0wNworU1JDUkVWID0gImMzOWU0MWE4NjU1MWViMzkwYjhkYTIzMjMyZGM4NTc3NjM5NDAzZDAiCiAjICh3aGVuIFBWIGdvZXMgYWJvdmUgMS4wIHJlbW92ZSB0aGUgdHJhaWxpbmcgcikKIFBWID0gIjEuMCtnaXRyJHtTUkNQVn0iCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKLURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieHJlbmRlciB3YWZmbGUgdmlydHVhbC9saWJnbCBsaWJnbHUgcHl0aG9uLW1ha28tbmF0aXZlIHB5dGhvbi1udW1weS1uYXRpdmUiCitERVBFTkRTID0gImxpYnBuZyB2aXJ0dWFsL2xpYngxMSBsaWJ4cmVuZGVyIHdhZmZsZSB2aXJ0dWFsL2xpYmdsIGxpYmdsdSBweXRob24zLW1ha28tbmF0aXZlIHB5dGhvbjMtbnVtcHktbmF0aXZlIHB5dGhvbjMtc2l4LW5hdGl2ZSIKIAotaW5oZXJpdCBjbWFrZSBweXRob25uYXRpdmUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCitpbmhlcml0IGNtYWtlIHB5dGhvbjNuYXRpdmUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGJhc2gtY29tcGxldGlvbgogIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCkBAIC0zNCwxMCArMzgsMTUgQEAKICAgIGZpCiB9CiAKLVJERVBFTkRTXyR7UE59ID0gIndhZmZsZSBweXRob24gcHl0aG9uLW1ha28gcHl0aG9uLWpzb24gcHl0aG9uLXN1YnByb2Nlc3MgXAotCXB5dGhvbi1hcmdwYXJzZSBweXRob24taW1wb3J0bGliIHB5dGhvbi11bml4YWRtaW4gcHl0aG9uLXhtbCBcCi0JcHl0aG9uLW11bHRpcHJvY2Vzc2luZyBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1uZXRzZXJ2ZXIgcHl0aG9uLXNoZWxsIFwKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAtQyAke0J9ICdERVNURElSPSR7RH0nIGluc3RhbGwvc3RyaXAKK30KKworUkRFUEVORFNfJHtQTn0gPSAid2FmZmxlIHB5dGhvbjMgcHl0aG9uMy1tYWtvIHB5dGhvbjMtanNvbiBcCisJcHl0aG9uMy1zdWJwcm9jZXNzIHB5dGhvbjMtbWlzYyBweXRob24zLWltcG9ydGxpYiBcCisJcHl0aG9uMy11bml4YWRtaW4gcHl0aG9uMy14bWwgcHl0aG9uMy1tdWx0aXByb2Nlc3NpbmcgXAorCXB5dGhvbjMtc2l4IHB5dGhvbjMtc2hlbGwgcHl0aG9uMy1pbyBweXRob24zLWFyZ3BhcnNlIFwKIAltZXNhLWRlbW9zIGJhc2ggXAogCSIKIAotSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28gYWxyZWFkeS1zdHJpcHBlZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYgppbmRleCAwZTFhNzkyLi42YzNiY2Q4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9ja18xLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCkBAIC0xMyw3ICsxMyw3IEBACiBTID0gIiR7V09SS0RJUn0iCiAKIGRvX2NvbXBpbGUgKCkgewotCSR7Q0N9IC1vIHBvbmctY2xvY2sgcG9uZy1jbG9jay1uby1mbGlja2VyLmMgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIHgxMSB4YXUgeGRtY3BgCisJJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30gLW8gcG9uZy1jbG9jayBwb25nLWNsb2NrLW5vLWZsaWNrZXIuYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgeDExIHhhdSB4ZG1jcGAKIH0KIAogZG9faW5zdGFsbCAoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMGRhOTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90cy5jb25mCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBVbmNvbW1lbnQgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBsaW51eCBpbnB1dCBsYXllciBldmVudCBpbnRlcmZhY2UKLW1vZHVsZV9yYXcgaW5wdXQKLQotIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgU2hhcnAgWmF1cnVzIFNMLTU1MDAvU0wtNTAwMGQKLSMgbW9kdWxlX3JhdyBjb2xsaWUKLQotIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgU2hhcnAgWmF1cnVzIFNMLUM3MDAvQzc1MC9DNzYwL0M4NjAKLSMgbW9kdWxlX3JhdyBjb3JnaQotCi0jIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBkZXZpY2Ugd2l0aCBhIFVDQjEyMDAvMTMwMC8xNDAwIFRTIGludGVyZmFjZQotIyBtb2R1bGVfcmF3IHVjYjF4MDAKLQotIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGFuIEhQIGlQYXEgaDM2MDAgb3Igc2ltaWxhcgotIyBtb2R1bGVfcmF3IGgzNjAwCi0KLSMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIEhpdGFjaGkgV2VicGFkCi0jIG1vZHVsZV9yYXcgbWs3MTIKLQotIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGFuIElCTSBBcmN0aWMgSUkKLSMgbW9kdWxlX3JhdyBhcmN0aWMyCi0KLW1vZHVsZSBwdGhyZXMgcG1pbj0xCi1tb2R1bGUgdmFyaWFuY2UgZGVsdGE9MzAKLW1vZHVsZSBkZWppdHRlciBkZWx0YT0xMDAKLW1vZHVsZSBsaW5lYXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzbGliLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDY4ZThkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1pZiBbIC1lIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIF07IHRoZW4KLSAgICBUU0xJQl9UU0RFVklDRT0vZGV2L2lucHV0L3RvdWNoc2NyZWVuMAotCi0gICAgZXhwb3J0IFRTTElCX1RTREVWSUNFCi1maQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDI2NGMzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotU1VNTUFSWSA9ICJBbiBhYnN0cmFjdGlvbiBsYXllciBmb3IgdG91Y2hzY3JlZW4gcGFuZWwgZXZlbnRzIgotREVTQ1JJUFRJT04gPSAiVHNsaWIgaXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRvdWNoc2NyZWVuIHBhbmVsIFwKLWV2ZW50cywgYXMgd2VsbCBhcyBhIGZpbHRlciBzdGFjayBmb3IgdGhlIG1hbmlwdWxhdGlvbiBvZiB0aG9zZSBldmVudHMuIFwKLVRzbGliIGlzIGdlbmVyYWxseSB1c2VkIG9uIGVtYmVkZGVkIGRldmljZXMgdG8gcHJvdmlkZSBhIGNvbW1vbiB1c2VyIFwKLXNwYWNlIGludGVyZmFjZSB0byB0b3VjaHNjcmVlbiBmdW5jdGlvbmFsaXR5LiIKLUhPTUVQQUdFID0gImh0dHA6Ly90c2xpYi5iZXJsaW9zLmRlLyIKLQotQVVUSE9SID0gIlJ1c3NlbGwgS2luZyB3LyBwbHVnaW5zIGJ5IENocmlzIExhcnNvbiBldC4gYWwuIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMzBhOTcxNmVmMzc2MmUzNDY3YTJmNjJiZjc5MGYwYSIKLQotU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS90c2xpYi0ke1BWfS50YXIueHo7ZG93bmxvYWRmaWxlbmFtZT10c2xpYi0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vdHMuY29uZiBcCi0gICAgICAgICAgIGZpbGU6Ly90c2xpYi5zaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxNDc3MWY4NjA3YjM0MWJiNGIyOTc4MTlkMzdlODM3ZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmZTM1ZTVmNzEwZWE5MzNiMTE4ZjcxMGUyY2U0NDAzYWMwNzZmZTY5OTI2YjU3MDMzMzg2N2Q0ZGUwODJhNTFjIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2tlcmdvdGgvdHNsaWIvcmVsZWFzZXMiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1oMzYwMCAtLWVuYWJsZS1pbnB1dCAtLWRpc2FibGUtY29yZ2kgLS1kaXNhYmxlLWNvbGxpZSAtLWRpc2FibGUtbWs3MTIgLS1kaXNhYmxlLWFyY3RpYzIgLS1kaXNhYmxlLXVjYjF4MDAiCi0KLWRvX2luc3RhbGxfcHJlcGVuZCgpIHsKLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90cy5jb25mICR7U30vZXRjL3RzLmNvbmYKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCi0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdHNsaWIuc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLwotfQotCi0jIFBlb3BsZSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdWRldidzIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIHN5bWxpbmsKLSMgaW5zdGVhZCBvZiBkZXRlY3Qtc3R5bHVzCi0jUkRFUEVORFNfdHNsaWItY29uZl93ZWlyZC1tYWNoaW5lID0gImRldGVjdC1zdHlsdXMiCi1SUFJPVklERVNfdHNsaWItY29uZiA9ICJsaWJ0cy0wLjAtY29uZiIKLQotUEFDS0FHRVMgPSsgInRzbGliLWNvbmYgdHNsaWItdGVzdHMgdHNsaWItY2FsaWJyYXRlIgotREVCSUFOX05PQVVUT05BTUVfdHNsaWItY29uZiA9ICIxIgotREVCSUFOX05PQVVUT05BTUVfdHNsaWItdGVzdHMgPSAiMSIKLURFQklBTl9OT0FVVE9OQU1FX3RzbGliLWNhbGlicmF0ZSA9ICIxIgotCi1SREVQRU5EU18ke1BOfSA9ICJ0c2xpYi1jb25mIgotUlJFQ09NTUVORFNfJHtQTn0gPSAicG9pbnRlcmNhbCIKLQotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vdHMvKi5sYSIKLUZJTEVTX3RzbGliLWNvbmYgPSAiJHtzeXNjb25mZGlyfS90cy5jb25mICR7c3lzY29uZmRpcn0vcHJvZmlsZS5kL3RzbGliLnNoICR7ZGF0YWRpcn0vdHNsaWIiCi1GSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKi5zby4qICR7bGliZGlyfS90cy8qLnNvKiIKLUZJTEVTX3RzbGliLWNhbGlicmF0ZSArPSAiJHtiaW5kaXJ9L3RzX2NhbGlicmF0ZSIKLUZJTEVTX3RzbGliLXRlc3RzID0gIiR7YmluZGlyfS90c19oYXJ2ZXN0ICR7YmluZGlyfS90c19wcmludCAke2JpbmRpcn0vdHNfcHJpbnRfcmF3ICR7YmluZGlyfS90c190ZXN0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2gKaW5kZXggOTdjNjNiZC4uYjUyYjQ5NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAogVGhpcyBpcyBhIHdvcmthcm91bmQgdXBzdHJlYW0gc3VnZ2VzdHMgZm9yIHVzZSB3aXRoIGtlcm5lbCA0LjEuCiAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGVtcG9yYXJ5IHdvcmstYXJvdW5kXQotU2lnbmVkLU9mZi1CeTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CiAKIAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS4xLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS4xLjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNjc2NzkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzEuMS40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJyYXJ5IHRvIGhhbmRsZSBpbnB1dCBkZXZpY2VzIGluIFdheWxhbmQgY29tcG9zaXRvcnMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmlucHV0LyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yMTg0YWVmMzhmZjEzN2VkMzNjZTlhNjNiOWQxZWI4ZiIKLQotREVQRU5EUyA9ICJsaWJldmRldiB1ZGV2IG10ZGV2IgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlLyR7QlBOfS8ke0JQfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICIwOTQ1MzE4MTQxYzFhOWY1Mjg1N2JiZjY1ZDE3NWYzMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzMDJjYjc2MjA5YjljNTdhNWEzMThlMTc4ZjliYzQ0NmVlZGU4ZWE3OTM4NjEwM2I1MjkxY2JmYWE1ZmFiNWI2IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLXdpdGgtbGlidW53aW5kLC0td2l0aG91dC1saWJ1bndpbmQsbGlidW53aW5kIgotUEFDS0FHRUNPTkZJR1tndWldID0gIi0tZW5hYmxlLWV2ZW50LWd1aSwtLWRpc2FibGUtZXZlbnQtZ3VpLGNhaXJvIGd0ayszIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3VkZXYvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzEuNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzEuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODAzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS40LjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHRvIGhhbmRsZSBpbnB1dCBkZXZpY2VzIGluIFdheWxhbmQgY29tcG9zaXRvcnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmlucHV0LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yMTg0YWVmMzhmZjEzN2VkMzNjZTlhNjNiOWQxZWI4ZiIKKworREVQRU5EUyA9ICJsaWJldmRldiB1ZGV2IG10ZGV2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTdiYTU3N2VkNzRkOGQxYmFlYjA3ZGJkNGZiOTEyYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNmU3YjNhYjQ5OTM1OGNhYmE0OTk3MDU2ODBlYTdlNTg1MWFmMmJkMzdkYzMyZjJiZTY0MTgxNjEwZDYzOTJhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLXdpdGgtbGlidW53aW5kLC0td2l0aG91dC1saWJ1bndpbmQsbGlidW53aW5kIgorUEFDS0FHRUNPTkZJR1tsaWJ3YWNvbV0gPSAiLS1lbmFibGUtbGlid2Fjb20sLS1kaXNhYmxlLWxpYndhY29tLGxpYndhY29tIgorUEFDS0FHRUNPTkZJR1tndWldID0gIi0tZW5hYmxlLWV2ZW50LWd1aSwtLWRpc2FibGUtZXZlbnQtZ3VpLGNhaXJvIGd0ayszIgorCitVREVWRElSID0gImBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YCIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtdWRldi1kaXI9JHtVREVWRElSfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kLXByb3RvY29sc18xLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC1wcm90b2NvbHNfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMmYwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC1wcm90b2NvbHNfMS43LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBhZGRpdGlvbmFsIFdheWxhbmQgcHJvdG9jb2xzIgorREVTQ1JJUFRJT04gPSAiV2F5bGFuZCBwcm90b2NvbHMgdGhhdCBhZGQgZnVuY3Rpb25hbGl0eSBub3QgXAorYXZhaWxhYmxlIGluIHRoZSBXYXlsYW5kIGNvcmUgcHJvdG9jb2wuIFN1Y2ggcHJvdG9jb2xzIGVpdGhlciBhZGQgXAorY29tcGxldGVseSBuZXcgZnVuY3Rpb25hbGl0eSwgb3IgZXh0ZW5kIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHNvbWUgb3RoZXIgXAorcHJvdG9jb2wgZWl0aGVyIGluIFdheWxhbmQgY29yZSwgb3Igc29tZSBvdGhlciBwcm90b2NvbCBpbiBcCit3YXlsYW5kLXByb3RvY29scy4iCitIT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM3YjEyYjY3MDJkYTM4Y2EwMjhhY2U1NGFhZTNkNDg0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3N0YWJsZS9wcmVzZW50YXRpb24tdGltZS9wcmVzZW50YXRpb24tdGltZS54bWw7ZW5kbGluZT0yNjttZDU9NDY0NmNkN2Q5ZWRjOWZhNTVkYjk0MWYyZDNhN2RjNTMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjlhY2ZjOTU1NmY3Y2ZlZGM0NGQ5N2FmNjBkYTY2YTVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzNWYyYTkzN2QzMThmMWZlY2I5N2I1NDA3NGNhMjExNDg2ZTM4YWY5NDM4NjhkZDBmYTgyZWEzOGQwOTFjMWYiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnL3dheWxhbmQtcHJvdG9jb2xzLnBjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvMDAwMS1zY2FubmVyLVVzZS11bml0MzJfdC1pbnN0ZWFkLW9mLXVpbnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC8wMDAxLXNjYW5uZXItVXNlLXVuaXQzMl90LWluc3RlYWQtb2YtdWludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWNlOTVjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvMDAwMS1zY2FubmVyLVVzZS11bml0MzJfdC1pbnN0ZWFkLW9mLXVpbnQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA1NTE2ZDMyZTY5NGJhZGNhMzViNmM3MWIwMmEzZjA4ZjY1MDMwOGJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTUgSnVsIDIwMTYgMTY6MjM6NDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2Nhbm5lcjogVXNlIHVuaXQzMl90IGluc3RlYWQgb2YgdWludAorCit1aW50MzJfdCBpcyBDOTkgZGVmaW5lZCBzdGRpbnQgdHlwZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCistLS0KKyBzcmMvc2Nhbm5lci5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3NjYW5uZXIuYyBiL3NyYy9zY2FubmVyLmMKK2luZGV4IDVmMDZlOGUuLjEwYTQwMjMgMTAwNjQ0CistLS0gYS9zcmMvc2Nhbm5lci5jCisrKysgYi9zcmMvc2Nhbm5lci5jCitAQCAtODA4LDcgKzgwOCw3IEBAIGZpbmRfZW51bWVyYXRpb24oc3RydWN0IHByb3RvY29sICpwcm90b2NvbCwKKyAJc3RydWN0IGludGVyZmFjZSAqaTsKKyAJc3RydWN0IGVudW1lcmF0aW9uICplOworIAljaGFyICplbnVtX25hbWU7CistCXVpbnQgaWR4ID0gMCwgajsKKysJdWludDMyX3QgaWR4ID0gMCwgajsKKyAKKyAJZm9yIChqID0gMDsgaiArIDEgPCBzdHJsZW4oZW51bV9hdHRyaWJ1dGUpOyBqKyspIHsKKyAJCWlmIChlbnVtX2F0dHJpYnV0ZVtqXSA9PSAnLicpIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS4xMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS4xMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MTM0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjExLjAuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJXYXlsYW5kLCBhIHByb3RvY29sIGJldHdlZW4gYSBjb21wb3NpdG9yIGFuZCBjbGllbnRzIgorREVTQ1JJUFRJT04gPSAiV2F5bGFuZCBpcyBhIHByb3RvY29sIGZvciBhIGNvbXBvc2l0b3IgdG8gdGFsayB0byBpdHMgY2xpZW50cyBcCithcyB3ZWxsIGFzIGEgQyBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIG9mIHRoYXQgcHJvdG9jb2wuIFRoZSBjb21wb3NpdG9yIGNhbiBiZSBcCithIHN0YW5kYWxvbmUgZGlzcGxheSBzZXJ2ZXIgcnVubmluZyBvbiBMaW51eCBrZXJuZWwgbW9kZXNldHRpbmcgYW5kIGV2ZGV2IFwKK2lucHV0IGRldmljZXMsIGFuIFggYXBwbGljYXRpb24sIG9yIGEgd2F5bGFuZCBjbGllbnQgaXRzZWxmLiBUaGUgY2xpZW50cyBjYW4gXAorYmUgdHJhZGl0aW9uYWwgYXBwbGljYXRpb25zLCBYIHNlcnZlcnMgKHJvb3RsZXNzIG9yIGZ1bGxzY3JlZW4pIG9yIG90aGVyIFwKK2Rpc3BsYXkgc2VydmVycy4iCitIT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIzMWQ4ZjUzYjZhYWYyYjQ5ODVkN2RkNzgxMGE3MGQxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy93YXlsYW5kLXNlcnZlci5jO2VuZGxpbmU9MjQ7bWQ1PWI4ZTA0NjE2NGE3NjZiYjFlZGU4YmEzOGU5ZGNkN2NlIgorCitTUkNfVVJJID0gImh0dHBzOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNjYW5uZXItVXNlLXVuaXQzMl90LWluc3RlYWQtb2YtdWludC5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmY2NmNjgwYmUwNjZlMjM0NzI5ZDViNjllMGJkMGZhOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NTQwOTI1Zjc5MjhiZWNmZGY1ZTNiODRjNzA3NTdmNjU4OWJmMWNlZWYwOWJlYTc4Nzg0ZDhlNDc3MmMwZGIwIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0tZGlzYWJsZS1saWJyYXJpZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0RFUEVORFMgPSAiZXhwYXQgbGlieG1sMiBsaWJmZmkgd2F5bGFuZC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiAtLXdpdGgtaG9zdC1zY2FubmVyIgorCisjIFdheWxhbmQgaW5zdGFsbHMgYSBNNCBtYWNybyBmb3Igb3RoZXIgcHJvamVjdHMgdG8gdXNlLCB3aGljaCB1c2VzIHRoZSB0YXJnZXQKKyMgcGtnLWNvbmZpZyB0byBmaW5kIGZpbGVzLiAgUmVwbGFjZSBwa2ctY29uZmlnIHdpdGggcGtnLWNvbmZpZy1uYXRpdmUuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgIHNlZCAtZSAncyxQS0dfQ0hFQ0tfTU9EVUxFUyguKiksLGcnIFwKKyAgICAgIC1lICdzLCRQS0dfQ09ORklHLHBrZy1jb25maWctbmF0aXZlLGcnIFwKKyAgICAgIC1pICR7RH0vJHtkYXRhZGlyfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNAorfQorCitzeXNyb290X3N0YWdlX2FsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKwlybSAke1NZU1JPT1RfREVTVERJUn0vJHtkYXRhZGlyfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNAorCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQgJHtTWVNST09UX0RFU1RESVJ9LyR7ZGF0YWRpcn0vYWNsb2NhbC8KK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyoke1NPTElCU30iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L3dheWxhbmQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjkuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTJhYzE4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotU1VNTUFSWSA9ICJXYXlsYW5kLCBhIHByb3RvY29sIGJldHdlZW4gYSBjb21wb3NpdG9yIGFuZCBjbGllbnRzIgotREVTQ1JJUFRJT04gPSAiV2F5bGFuZCBpcyBhIHByb3RvY29sIGZvciBhIGNvbXBvc2l0b3IgdG8gdGFsayB0byBpdHMgY2xpZW50cyBcCi1hcyB3ZWxsIGFzIGEgQyBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIG9mIHRoYXQgcHJvdG9jb2wuIFRoZSBjb21wb3NpdG9yIGNhbiBiZSBcCi1hIHN0YW5kYWxvbmUgZGlzcGxheSBzZXJ2ZXIgcnVubmluZyBvbiBMaW51eCBrZXJuZWwgbW9kZXNldHRpbmcgYW5kIGV2ZGV2IFwKLWlucHV0IGRldmljZXMsIGFuIFggYXBwbGljYXRpb24sIG9yIGEgd2F5bGFuZCBjbGllbnQgaXRzZWxmLiBUaGUgY2xpZW50cyBjYW4gXAotYmUgdHJhZGl0aW9uYWwgYXBwbGljYXRpb25zLCBYIHNlcnZlcnMgKHJvb3RsZXNzIG9yIGZ1bGxzY3JlZW4pIG9yIG90aGVyIFwKLWRpc3BsYXkgc2VydmVycy4iCi1IT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIzMWQ4ZjUzYjZhYWYyYjQ5ODVkN2RkNzgxMGE3MGQxIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy93YXlsYW5kLXNlcnZlci5jO2VuZGxpbmU9MjQ7bWQ1PWI4ZTA0NjE2NGE3NjZiYjFlZGU4YmEzOGU5ZGNkN2NlIgotCi1TUkNfVVJJID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IgotU1JDX1VSSVttZDVzdW1dID0gIjVlMTQxYjNmMmE3MDA1ZDZjODlkNmYyMzNjODdjMzE3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljODc3MDcyMGFhMDAzNDQ3OTczNWY1OGE0ZGM0Y2E5YjE3MmVjZmVkZTI4ZjUxMzQzMTJlMTM1YjczMDFlZmEiCi0KLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24gLS1kaXNhYmxlLWxpYnJhcmllcyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotREVQRU5EUyA9ICJleHBhdCBsaWJmZmkgd2F5bGFuZC1uYXRpdmUiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiAtLXdpdGgtaG9zdC1zY2FubmVyIgotCi0jIFdheWxhbmQgaW5zdGFsbHMgYSBNNCBtYWNybyBmb3Igb3RoZXIgcHJvamVjdHMgdG8gdXNlLCB3aGljaCB1c2VzIHRoZSB0YXJnZXQKLSMgcGtnLWNvbmZpZyB0byBmaW5kIGZpbGVzLiAgUmVwbGFjZSBwa2ctY29uZmlnIHdpdGggcGtnLWNvbmZpZy1uYXRpdmUuCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0gIHNlZCAtZSAncyxQS0dfQ0hFQ0tfTU9EVUxFUyguKiksLGcnIFwKLSAgICAgIC1lICdzLCRQS0dfQ09ORklHLHBrZy1jb25maWctbmF0aXZlLGcnIFwKLSAgICAgIC1pICR7RH0vJHtkYXRhZGlyfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNAotfQotCi1zeXNyb290X3N0YWdlX2FsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKLQlybSAke1NZU1JPT1RfREVTVERJUn0vJHtkYXRhZGlyfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNAotCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQgJHtTWVNST09UX0RFU1RESVJ9LyR7ZGF0YWRpcn0vYWNsb2NhbC8KLX0KLQotRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyoke1NPTElCU30iCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L3dheWxhbmQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKaW5kZXggNjUzNTQxZS4uMjkxY2QxNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYgpAQCAtMywxNiArMywxOSBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAiCiAKIFNSQ19VUkkgPSAiZmlsZTovL2luaXQgXAotICAgICAgICAgICBmaWxlOi8vd2VzdG9uLnNlcnZpY2UiCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24uc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24tc3RhcnQiCiAKIFMgPSAiJHtXT1JLRElSfSIKIAogZG9faW5zdGFsbCgpIHsKLQlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQKLQlpbnN0YWxsIC1tNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL3dlc3RvbgorCWluc3RhbGwgLURtNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL3dlc3RvbgorCWluc3RhbGwgLURtMDY0NCAke1dPUktESVJ9L3dlc3Rvbi5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L3dlc3Rvbi5zZXJ2aWNlCiAKLQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9Ci0JaW5zdGFsbCAtbTA2NDQgJHtXT1JLRElSfS93ZXN0b24uc2VydmljZSAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfQorCSMgSW5zdGFsbCB3ZXN0b24tc3RhcnQgc2NyaXB0CisJaW5zdGFsbCAtRG03NTUgJHtXT1JLRElSfS93ZXN0b24tc3RhcnQgJHtEfSR7YmluZGlyfS93ZXN0b24tc3RhcnQKKwlzZWQgLWkgJ3MsQERBVEFESVJALCR7ZGF0YWRpcn0sZycgJHtEfSR7YmluZGlyfS93ZXN0b24tc3RhcnQKKwlzZWQgLWkgJ3MsQExPQ0FMU1RBVEVESVJALCR7bG9jYWxzdGF0ZWRpcn0sZycgJHtEfSR7YmluZGlyfS93ZXN0b24tc3RhcnQKIH0KIAogaW5oZXJpdCBhbGxhcmNoIHVwZGF0ZS1yYy5kIGRpc3Ryb19mZWF0dXJlc19jaGVjayBzeXN0ZW1kCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0CmluZGV4IDJlOTM4ZjQuLmQzZTg3YzYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0CkBAIC0zMSwxNCArMzEsNyBAQAogICBzdGFydCkKICAgICAgICAgLiAvZXRjL3Byb2ZpbGUKIAotICAgICAgICAjIFRoaXMgaXMgYWxsIGEgbmFzdHkgaGFjawotICAgICAgICBpZiB0ZXN0IC16ICIkWERHX1JVTlRJTUVfRElSIjsgdGhlbgotICAgICAgICAgICAgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVI9L3J1bi91c2VyL3Jvb3QKLSAgICAgICAgICAgICAgICBta2RpciAtLXBhcmVudHMgJFhER19SVU5USU1FX0RJUgotICAgICAgICAgICAgICAgIGNobW9kIDA3MDAgJFhER19SVU5USU1FX0RJUgotICAgICAgICBmaQotCi0gICAgICAgIG9wZW52dCAtcyB3ZXN0b24gLS0gJE9QVEFSR1MKKyAgICAgICAgd2VzdG9uLXN0YXJ0IC0tICRPUFRBUkdTCiAgIDs7CiAKICAgc3RvcCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC93ZXN0b24tc3RhcnQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvd2VzdG9uLXN0YXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3MmZiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvd2VzdG9uLXN0YXJ0CkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIENvcHlyaWdodCAoQykgMjAxNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgorCitleHBvcnQgUEFUSD0iL3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW4iCisKK3VzYWdlKCkgeworICAgIGNhdCA8PEVPRgorICAgICQwIFs8b3BlbnZ0IGFyZ3VtZW50cz5dIFstLSA8d2VzdG9uIG9wdGlvbnM+XQorRU9GCit9CisKKyMjIE1vZHVsZSBzdXBwb3J0Cittb2R1bGVzX2Rpcj1AREFUQURJUkAvd2VzdG9uLXN0YXJ0CisKKyMgQWRkIHdlc3RvbiBleHRyYSBhcmd1bWVudAorYWRkX3dlc3Rvbl9hcmd1bWVudCgpIHsKKwl3ZXN0b25fYXJncz0iJHdlc3Rvbl9hcmdzICQxIgorfQorCisjIEFkZCBvcGVudnQgZXh0cmEgYXJndW1lbnQKK2FkZF9vcGVudnRfYXJndW1lbnQoKSB7CisJb3BlbnZ0X2FyZ3M9IiRvcGVudnRfYXJncyAkMSIKK30KKworaWYgWyAtbiAiJFdBWUxBTkRfRElTUExBWSIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBBIFdheWxhbmQgY29tcG9zaXRvciBpcyBhbHJlYWR5IHJ1bm5pbmcsIG5lc3RlZCBXZXN0b24gaW5zdGFuY2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorCWV4aXQgMQorZmkKK2lmIFsgLW4gIiRESVNQTEFZIiBdOyB0aGVuCisJbGF1bmNoZXI9Indlc3RvbiIKK2Vsc2UKKwlsYXVuY2hlcj0id2VzdG9uLWxhdW5jaCAtLSIKK2ZpCisKK29wZW52dF9hcmdzPSItcyIKK3doaWxlIFsgLW4gIiQxIiBdOyBkbworCWlmIFsgIiQxIiA9ICItLSIgXTsgdGhlbgorCQlzaGlmdAorCQlicmVhaworCWZpCisJb3BlbnZ0X2FyZ3M9IiRvcGVudnRfYXJncyAkMSIKKwlzaGlmdAorZG9uZQorCit3ZXN0b25fYXJncz0kKgorCisjIExvYWQgYW5kIHJ1biBtb2R1bGVzCitpZiBbIC1kICIkbW9kdWxlc19kaXIiIF07IHRoZW4KKwlmb3IgbSBpbiAiJG1vZHVsZXNfZGlyIi8qOyBkbworCQkjIFNraXAgYmFja3VwIGZpbGVzCisJCWlmIFsgImBlY2hvICRtIHwgc2VkIC1lICdzL1x+JC8vJ2AiICE9ICIkbSIgXTsgdGhlbgorCQkJY29udGludWUKKwkJZmkKKworCQkjIHByb2Nlc3MgbW9kdWxlCisJCS4gJG0KKwlkb25lCitmaQorCitpZiB0ZXN0IC16ICIkWERHX1JVTlRJTUVfRElSIjsgdGhlbgorICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVI9L3J1bi91c2VyL2BpZCAtdWAKKyAgICBpZiAhIHRlc3QgLWQgIiRYREdfUlVOVElNRV9ESVIiOyB0aGVuCisgICAgICAgIG1rZGlyIC0tcGFyZW50cyAkWERHX1JVTlRJTUVfRElSCisgICAgICAgIGNobW9kIDA3MDAgJFhER19SVU5USU1FX0RJUgorICAgIGZpCitmaQorCitleGVjIG9wZW52dCAkb3BlbnZ0X2FyZ3MgLS0gJGxhdW5jaGVyICR3ZXN0b25fYXJncyAtLWxvZz1ATE9DQUxTVEFURURJUkAvbG9nL3dlc3Rvbi5sb2cKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC93ZXN0b24uc2VydmljZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC93ZXN0b24uc2VydmljZQppbmRleCA0ZjFmN2ZmLi42ODljZTQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvd2VzdG9uLnNlcnZpY2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L3dlc3Rvbi5zZXJ2aWNlCkBAIC0xLDE0ICsxLDExIEBACiBbVW5pdF0KLURlc2NyaXB0aW9uPVdlc3RvbiBXYXlsYW5kIGNvbXBvc2l0b3Igc3RhcnR1cAorRGVzY3JpcHRpb249V2VzdG9uIFdheWxhbmQgQ29tcG9zaXRvcgogUmVxdWlyZXNNb3VudHNGb3I9L3J1bgogCiBbU2VydmljZV0KIFVzZXI9cm9vdAogRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvd2VzdG9uCi1FbnZpcm9ubWVudD0iWERHX1JVTlRJTUVfRElSPS9ydW4vdXNlci9yb290IgotRXhlY1N0YXJ0UHJlPS9iaW4vbWtkaXIgLXAgL3J1bi91c2VyL3Jvb3QKLUV4ZWNTdGFydFByZT0vYmluL2NobW9kIDA3MDAgL3J1bi91c2VyL3Jvb3QKLUV4ZWNTdGFydD0vdXNyL2Jpbi9vcGVudnQgLXYgLWUgL3Vzci9iaW4vd2VzdG9uIC0tICRPUFRBUkdTCitFeGVjU3RhcnQ9L3Vzci9iaW4vd2VzdG9uLXN0YXJ0IC12IC1lIC0tICRPUFRBUkdTCiAKIFtJbnN0YWxsXQogV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtY29uZmlndXJlLmFjLUZpeC13YXlsYW5kLXByb3RvY29scy1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTE4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtY29uZmlndXJlLmFjLUZpeC13YXlsYW5kLXByb3RvY29scy1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMWNmYzE0MzRhNWQzODVhNzRkZTU5M2VjNzYwMTY3NGRiYTM5ZTJmZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDExIE1heSAyMDE2IDE2OjE2OjMwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogRml4IHdheWxhbmQtcHJvdG9jb2xzIHBhdGgKKworVGhlIHdheWxhbmQtcHJvdG9jb2xzIGRpcmVjdG9yeSBpcyB1c2VkIGR1cmluZyBidWlsZDogRml4IHRoZSBwYXRoCit0byBwb2ludCB0byBzeXNyb290IHNwZWNpZmllZCBpbiByZWNpcGUuCisKK05vcm1hbGx5IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgY291bGQgYmUgdXNlZCBpbiBjb25maWd1cmUuYWMgYnV0IHRoYXQKK2JyZWFrcyBtdWx0aWxpYiB3ZXN0b24gYXMgaXQgd291bGQgcG9pbnQgdG8gbXVsdGlsaWIgc3lzcm9vdCB3aGVuIHRoZQorKGFsbGFyY2gpIHdheWxhbmQtcHJvdG9jb2xzIGlzIGFjdHVhbGx5IGluIHRoZSBtYWNoaW5lIHN5c3Jvb3QuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiYzdjMzI5Li4xNWEwNWQzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xODcsNyArMTg3LDcgQEAgUEtHX0NIRUNLX01PRFVMRVMoTElCSU5QVVRfQkFDS0VORCwgW2xpYmlucHV0ID49IDAuOC4wXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhDT01QT1NJVE9SLCBbJENPTVBPU0lUT1JfTU9EVUxFU10pCisgCisgUEtHX0NIRUNLX01PRFVMRVMoV0FZTEFORF9QUk9UT0NPTFMsIFt3YXlsYW5kLXByb3RvY29scyA+PSAxLjJdLAorLQkJICBbYWNfd2F5bGFuZF9wcm90b2NvbHNfcGtnZGF0YWRpcj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wa2dkYXRhZGlyIHdheWxhbmQtcHJvdG9jb2xzYF0pCisrCQkgIFthY193YXlsYW5kX3Byb3RvY29sc19wa2dkYXRhZGlyPSR7V0FZTEFORF9QUk9UT0NPTFNfU1lTUk9PVF9ESVJ9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGtnZGF0YWRpciB3YXlsYW5kLXByb3RvY29sc2BdKQorIEFDX1NVQlNUKFdBWUxBTkRfUFJPVE9DT0xTX0RBVEFESVIsICRhY193YXlsYW5kX3Byb3RvY29sc19wa2dkYXRhZGlyKQorIAorIEFDX0FSR19FTkFCTEUod2F5bGFuZC1jb21wb3NpdG9yLCBbICAtLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3JdLCwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLXNoYXJlZC1pbmNsdWRlLXN0ZGludC5oLWZvci1pbnQzMl90LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLXNoYXJlZC1pbmNsdWRlLXN0ZGludC5oLWZvci1pbnQzMl90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZWY3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtc2hhcmVkLWluY2x1ZGUtc3RkaW50LmgtZm9yLWludDMyX3QucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBiYTAyYjhhYmU0ZTJhZmFjMmJmYmYyNTU5OTcyZDUwNTlkNzVhMDQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFNhdCwgMTYgSnVsIDIwMTYgMjI6NTA6MTkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCB3ZXN0b25dIHNoYXJlZDogaW5jbHVkZSBzdGRpbnQuaCBmb3IgaW50MzJfdAorCitUaGlzIGZpeGVzIGJ1aWxkIG9uIG11c2wuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisgc2hhcmVkL3hhbGxvYy5oIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zaGFyZWQveGFsbG9jLmggYi9zaGFyZWQveGFsbG9jLmgKK2luZGV4IDg1ZmNjYjQuLjQ4NGRlMmQgMTAwNjQ0CistLS0gYS9zaGFyZWQveGFsbG9jLmgKKysrKyBiL3NoYXJlZC94YWxsb2MuaAorQEAgLTMwLDYgKzMwLDcgQEAKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKKyAKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLXdlc3Rvbi1sYXVuY2gtUHJvdmlkZS1hLWRlZmF1bHQtdmVyc2lvbi10aGF0LWRvZXNuLXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtd2VzdG9uLWxhdW5jaC1Qcm92aWRlLWEtZGVmYXVsdC12ZXJzaW9uLXRoYXQtZG9lc24tdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQyMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLXdlc3Rvbi1sYXVuY2gtUHJvdmlkZS1hLWRlZmF1bHQtdmVyc2lvbi10aGF0LWRvZXNuLXQucGF0Y2gKQEAgLTAsMCArMSwxNzMgQEAKK0Zyb20gZDAyMjI2YjNkNTg3MmIxODRjMWQ1MGM3ZjQ3MDZhYzk0NjdmZmI4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRvbSBIb2Noc3RlaW4gPHRvbS5ob2Noc3RlaW5AbnhwLmNvbT4KK0RhdGU6IEZyaSwgMTUgSnVsIDIwMTYgMTE6MDA6MTUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2VzdG9uLWxhdW5jaDogUHJvdmlkZSBhIGRlZmF1bHQgdmVyc2lvbiB0aGF0IGRvZXNuJ3QgcmVxdWlyZQorIFBBTQorCit3ZXN0b24tbGF1bmNoIHJlcXVpcmVzIFBBTSBmb3Igc3RhcnRpbmcgd2VzdG9uIGFzIGEgbm9uLXJvb3QgdXNlci4KKworU2luY2Ugc3RhcnRpbmcgd2VzdG9uIGFzIHJvb3QgaXMgYSB2YWxpZCB1c2UgY2FzZSBieSBpdHNlbGYsIGlmCitQQU0gaXMgbm90IGF2YWlsYWJsZSwgcHJvdmlkZSBhIGRlZmF1bHQgdmVyc2lvbiBvZiB3ZXN0b24tbGF1bmNoCit3aXRob3V0IG5vbi1yb290LXVzZXIgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBIb2Noc3RlaW4gPHRvbS5ob2Noc3RlaW5AbnhwLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgfCAgOSArKysrKysrLS0KKyBzcmMvd2VzdG9uLWxhdW5jaC5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMyZmRkZTcuLjI0MDk2NmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQxNiwxMyArNDE2LDE3IEBAIEFDX0FSR19FTkFCTEUocmVzaXplLW9wdGltaXphdGlvbiwKKyBBU19JRihbdGVzdCAieCRlbmFibGVfcmVzaXplX29wdGltaXphdGlvbiIgPSAieHllcyJdLAorICAgICAgIFtBQ19ERUZJTkUoW1VTRV9SRVNJWkVfUE9PTF0sIFsxXSwgW1VzZSByZXNpemUgbWVtb3J5IHBvb2wgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25dKV0pCisgCisrQUNfQVJHX1dJVEgocGFtLAorKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFtXSwgW1VzZSBQQU1dKSwKKysgICAgICAgICAgICBbdXNlX3BhbT0kd2l0aHZhbF0sIFt1c2VfcGFtPXllc10pCisgQUNfQVJHX0VOQUJMRSh3ZXN0b24tbGF1bmNoLCBbICAtLWVuYWJsZS13ZXN0b24tbGF1bmNoXSwsIGVuYWJsZV93ZXN0b25fbGF1bmNoPXllcykKKyBBTV9DT05ESVRJT05BTChCVUlMRF9XRVNUT05fTEFVTkNILCB0ZXN0IHgkZW5hYmxlX3dlc3Rvbl9sYXVuY2ggPT0geHllcykKKy1pZiB0ZXN0IHgkZW5hYmxlX3dlc3Rvbl9sYXVuY2ggPT0geHllczsgdGhlbgorK2lmIHRlc3QgeCRlbmFibGVfd2VzdG9uX2xhdW5jaCA9IHh5ZXMgLWEgeCR1c2VfcGFtID0geHllczsgdGhlbgorICAgV0VTVE9OX1NFQVJDSF9MSUJTKFtQQU1dLCBbcGFtXSwgW3BhbV9vcGVuX3Nlc3Npb25dLCBbaGF2ZV9wYW09eWVzXSwgW2hhdmVfcGFtPW5vXSkKKyAgIGlmIHRlc3QgeCRoYXZlX3BhbSA9PSB4bm87IHRoZW4KKy0gICAgQUNfRVJST1IoW3dlc3Rvbi1sYXVuY2ggcmVxdWlyZXMgcGFtXSkKKysgICAgQUNfRVJST1IoW1BBTSBzdXBwb3J0IGlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBidXQgbGlicGFtIGNvdWxkbid0IGJlIGZvdW5kXSkKKyAgIGZpCisrICBBQ19ERUZJTkUoW0hBVkVfUEFNXSwgWzFdLCBbRGVmaW5lIGlmIFBBTSBpcyBhdmFpbGFibGVdKQorIGZpCisgCisgQU1fQ09ORElUSU9OQUwoSEFWRV9QQU5HTywgdGVzdCAieCRoYXZlX3BhbmdvIiA9ICJ4eWVzIikKK0BAIC02NzMsNiArNjc3LDcgQEAgQUNfTVNHX1JFU1VMVChbCisgCUVuYWJsZSBkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbgkke2VuYWJsZV9kZXZkb2NzfQorIAorIAl3ZXN0b24tbGF1bmNoIHV0aWxpdHkJCSR7ZW5hYmxlX3dlc3Rvbl9sYXVuY2h9CisrCVBBTSBzdXBwb3J0CQkJJHt1c2VfcGFtfQorIAlzeXN0ZW1kLWxvZ2luIHN1cHBvcnQJCSR7aGF2ZV9zeXN0ZW1kX2xvZ2lufQorIAlzeXN0ZW1kIG5vdGlmeSBzdXBwb3J0CQkke2VuYWJsZV9zeXN0ZW1kX25vdGlmeX0KKyAKK2RpZmYgLS1naXQgYS9zcmMvd2VzdG9uLWxhdW5jaC5jIGIvc3JjL3dlc3Rvbi1sYXVuY2guYworaW5kZXggYjhiMmJhMC4uYTg2NTA2MSAxMDA2NDQKKy0tLSBhL3NyYy93ZXN0b24tbGF1bmNoLmMKKysrKyBiL3NyYy93ZXN0b24tbGF1bmNoLmMKK0BAIC01MSw3ICs1MSw5IEBACisgCisgI2luY2x1ZGUgPHB3ZC5oPgorICNpbmNsdWRlIDxncnAuaD4KKysjaWZkZWYgSEFWRV9QQU0KKyAjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX2FwcGwuaD4KKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9TWVNURU1EX0xPR0lOCisgI2luY2x1ZGUgPHN5c3RlbWQvc2QtbG9naW4uaD4KK0BAIC05Myw4ICs5NSwxMCBAQCBkcm1TZXRNYXN0ZXIoaW50IGRybV9mZCkKKyAjZW5kaWYKKyAKKyBzdHJ1Y3Qgd2VzdG9uX2xhdW5jaCB7CisrI2lmZGVmIEhBVkVfUEFNCisgCXN0cnVjdCBwYW1fY29udiBwYzsKKyAJcGFtX2hhbmRsZV90ICpwaDsKKysjZW5kaWYKKyAJaW50IHR0eTsKKyAJaW50IHR0eW5yOworIAlpbnQgc29ja1syXTsKK0BAIC0xODEsNiArMTg1LDcgQEAgd2VzdG9uX2xhdW5jaF9hbGxvd2VkKHN0cnVjdCB3ZXN0b25fbGF1bmNoICp3bCkKKyAJcmV0dXJuIGZhbHNlOworIH0KKyAKKysjaWZkZWYgSEFWRV9QQU0KKyBzdGF0aWMgaW50CisgcGFtX2NvbnZlcnNhdGlvbl9mbihpbnQgbXNnX2NvdW50LAorIAkJICAgIGNvbnN0IHN0cnVjdCBwYW1fbWVzc2FnZSAqKm1lc3NhZ2VzLAorQEAgLTIyMSw2ICsyMjYsNyBAQCBzZXR1cF9wYW0oc3RydWN0IHdlc3Rvbl9sYXVuY2ggKndsKQorIAorIAlyZXR1cm4gMDsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIGludAorIHNldHVwX2xhdW5jaGVyX3NvY2tldChzdHJ1Y3Qgd2VzdG9uX2xhdW5jaCAqd2wpCitAQCAtNDE0LDYgKzQyMCw3IEBAIHF1aXQoc3RydWN0IHdlc3Rvbl9sYXVuY2ggKndsLCBpbnQgc3RhdHVzKQorIAljbG9zZSh3bC0+c2lnbmFsZmQpOworIAljbG9zZSh3bC0+c29ja1swXSk7CisgCisrI2lmZGVmIEhBVkVfUEFNCisgCWlmICh3bC0+bmV3X3VzZXIpIHsKKyAJCWVyciA9IHBhbV9jbG9zZV9zZXNzaW9uKHdsLT5waCwgMCk7CisgCQlpZiAoZXJyKQorQEAgLTQyMSw2ICs0MjgsNyBAQCBxdWl0KHN0cnVjdCB3ZXN0b25fbGF1bmNoICp3bCwgaW50IHN0YXR1cykKKyAJCQkJZXJyLCBwYW1fc3RyZXJyb3Iod2wtPnBoLCBlcnIpKTsKKyAJCXBhbV9lbmQod2wtPnBoLCBlcnIpOworIAl9CisrI2VuZGlmCisgCisgCWlmIChpb2N0bCh3bC0+dHR5LCBLRFNLQk1VVEUsIDApICYmCisgCSAgICBpb2N0bCh3bC0+dHR5LCBLRFNLQk1PREUsIHdsLT5rYl9tb2RlKSkKK0BAIC02MDAsNiArNjA4LDcgQEAgc2V0dXBfc2Vzc2lvbihzdHJ1Y3Qgd2VzdG9uX2xhdW5jaCAqd2wpCisgCXNldGVudigiSE9NRSIsIHdsLT5wdy0+cHdfZGlyLCAxKTsKKyAJc2V0ZW52KCJTSEVMTCIsIHdsLT5wdy0+cHdfc2hlbGwsIDEpOworIAorKyNpZmRlZiBIQVZFX1BBTQorIAllbnYgPSBwYW1fZ2V0ZW52bGlzdCh3bC0+cGgpOworIAlpZiAoZW52KSB7CisgCQlmb3IgKGkgPSAwOyBlbnZbaV07ICsraSkgeworQEAgLTYwOCw2ICs2MTcsNyBAQCBzZXR1cF9zZXNzaW9uKHN0cnVjdCB3ZXN0b25fbGF1bmNoICp3bCkKKyAJCX0KKyAJCWZyZWUoZW52KTsKKyAJfQorKyNlbmRpZgorIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTY2NSw3ICs2NzUsOSBAQCBzdGF0aWMgdm9pZAorIGhlbHAoY29uc3QgY2hhciAqbmFtZSkKKyB7CisgCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFthcmdzLi4uXSBbLS0gW3dlc3RvbiBhcmdzLi5dXVxuIiwgbmFtZSk7CisrI2lmZGVmIEhBVkVfUEFNCisgCWZwcmludGYoc3RkZXJyLCAiICAtdSwgLS11c2VyICAgICAgU3RhcnQgc2Vzc2lvbiBhcyBzcGVjaWZpZWQgdXNlcm5hbWVcbiIpOworKyNlbmRpZgorIAlmcHJpbnRmKHN0ZGVyciwgIiAgLXQsIC0tdHR5ICAgICAgIFN0YXJ0IHNlc3Npb24gb24gYWx0ZXJuYXRpdmUgdHR5XG4iKTsKKyAJZnByaW50ZihzdGRlcnIsICIgIC12LCAtLXZlcmJvc2UgICBCZSB2ZXJib3NlXG4iKTsKKyAJZnByaW50ZihzdGRlcnIsICIgIC1oLCAtLWhlbHAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlXG4iKTsKK0BAIC02NzgsNyArNjkwLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlpbnQgaSwgYzsKKyAJY2hhciAqdHR5ID0gTlVMTDsKKyAJc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisrI2lmZGVmIEhBVkVfUEFNCisgCQl7ICJ1c2VyIiwgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd1JyB9LAorKyNlbmRpZgorIAkJeyAidHR5IiwgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndCcgfSwKKyAJCXsgInZlcmJvc2UiLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3YnIH0sCisgCQl7ICJoZWxwIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdoJyB9LAorQEAgLTY5MCw5ICs3MDQsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAidTp0Ojp2aCIsIG9wdHMsICZpKSkgIT0gLTEpIHsKKyAJCXN3aXRjaCAoYykgeworIAkJY2FzZSAndSc6CisrI2lmZGVmIEhBVkVfUEFNCisgCQkJd2wubmV3X3VzZXIgPSBvcHRhcmc7CisgCQkJaWYgKGdldHVpZCgpICE9IDApCisgCQkJCWVycm9yKDEsIDAsICJQZXJtaXNzaW9uIGRlbmllZC4gLXUgYWxsb3dlZCBmb3Igcm9vdCBvbmx5Iik7CisrI2Vsc2UKKysJCQllcnJvcigxLCAwLCAiLXUgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyB3ZXN0b24tbGF1bmNoIGJ1aWxkIik7CisrI2VuZGlmCisgCQkJYnJlYWs7CisgCQljYXNlICd0JzoKKyAJCQl0dHkgPSBvcHRhcmc7CitAQCAtNzMwLDggKzc0OCwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWlmIChzZXR1cF90dHkoJndsLCB0dHkpIDwgMCkKKyAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyAKKysjaWZkZWYgSEFWRV9QQU0KKyAJaWYgKHdsLm5ld191c2VyICYmIHNldHVwX3BhbSgmd2wpIDwgMCkKKyAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKysjZW5kaWYKKyAKKyAJaWYgKHNldHVwX2xhdW5jaGVyX3NvY2tldCgmd2wpIDwgMCkKKyAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9leHBsaWNpdC1lbmFibGUtZGlzYWJsZS1zeXN0ZW1kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9leHBsaWNpdC1lbmFibGUtZGlzYWJsZS1zeXN0ZW1kLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDBlYWYxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vZXhwbGljaXQtZW5hYmxlLWRpc2FibGUtc3lzdGVtZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLUZyb20gOGUxZWZjZDQwYjNiYWQ4MWM4Mzc0NGUyZTEyMGQ3MGMyYjU2N2VmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEZyZWRlcmljbyBDYWRldGUgPGZyZWRlcmljb0BjYWRldGUuZXU+Ci1EYXRlOiBNb24sIDI4IFNlcCAyMDE1IDAwOjMwOjEwICswMjAwCi1TdWJqZWN0OiBjb25maWd1cmUuYWM6IGFkZCBleHBsaWNpdCBlbmFibGUvZGlzYWJsZSBmb3Igc3lzdGVtZC1sb2dpbiBzdXBwb3J0Ci0KLU90aGVyd2lzZSwgYXV0by1lbmFibGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHN5c3RlbSBoYXMgdGhlIG5lY2Vzc2FyeQotbGlicmFyaWVzLgotCi1bVXBkYXRlZCBoZWxwIHRleHQgYXMgcGVyIHBxIHN1Z2dlc3Rpb24gLS0gYndoXQotCi1SZXZpZXdlZC1ieTogQnJ5Y2UgSGFycmluZ3RvbiA8YnJ5Y2VAb3NnLnNhbXN1bmcuY29tPgotUmV2aWV3ZWQtYnk6IFBla2thIFBhYWxhbmVuIDxwZWtrYS5wYWFsYW5lbkBjb2xsYWJvcmEuY28udWs+Ci1UZXN0ZWQtYnk6IFBla2thIFBhYWxhbmVuIDxwZWtrYS5wYWFsYW5lbkBjb2xsYWJvcmEuY28udWs+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUJhY2twb3J0ZWQgZnJvbSBXZXN0b24gZ2l0OgotaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3dheWxhbmQvd2VzdG9uL2NvbW1pdC8/aWQ9OGUxZWZjCi0KLVNpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NodWEubG9ja0Bjb2xsYWJvcmEuY28udWs+Ci0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGE5Y2Q0MjkuLjY3ZTgwZDAgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTM4MCwxOCArMzgwLDMwIEBAIEFDX0FSR19FTkFCTEUocmVzaXplLW9wdGltaXphdGlvbiwKLSBBU19JRihbdGVzdCAieCRlbmFibGVfcmVzaXplX29wdGltaXphdGlvbiIgPSAieHllcyJdLAotICAgICAgIFtBQ19ERUZJTkUoW1VTRV9SRVNJWkVfUE9PTF0sIFsxXSwgW1VzZSByZXNpemUgbWVtb3J5IHBvb2wgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25dKV0pCi0gCi0tUEtHX0NIRUNLX01PRFVMRVMoU1lTVEVNRF9MT0dJTiwKLS0gICAgICAgICAgICAgICAgICBbbGlic3lzdGVtZCA+PSAyMDldLAotLSAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW5fMjA5PXllcztoYXZlX3N5c3RlbWRfbG9naW49eWVzXSwKLS0gICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luXzIwOT1ubztoYXZlX3N5c3RlbWRfbG9naW49bm9dKQotLQotLSMgT2xkZXIgdmVyc2lvbnMgb2Ygc3lzdGVtZCBwYWNrYWdlIHN5c3RlbWQtbG9naW4gc2VwYXJhdGVseS4gRmFsbCBiYWNrIG9uIHRoYXQKLS1BU19JRihbdGVzdCB4JGhhdmVfc3lzdGVtZF9sb2dpbiAhPSB4eWVzXSxbCi0tICAgICAgUEtHX0NIRUNLX01PRFVMRVMoU1lTVEVNRF9MT0dJTiwKLS0gICAgICAgICAgICAgICAgICAgICAgICBbbGlic3lzdGVtZC1sb2dpbiA+PSAxOThdLAotLSAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW49eWVzXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luPW5vXSkKLS0gICAgICBdKQotK0FDX0FSR19FTkFCTEUoc3lzdGVtZC1sb2dpbiwKLSsgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zeXN0ZW1kLWxvZ2luXSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtFbmFibGUgbG9naW5kIHN1cHBvcnRdKSwsCi0rICAgICAgICAgICAgICBlbmFibGVfc3lzdGVtZF9sb2dpbj1hdXRvKQotK2lmIHRlc3QgeCRlbmFibGVfc3lzdGVtZF9sb2dpbiAhPSB4bm87IHRoZW4KLSsgIFBLR19DSEVDS19NT0RVTEVTKFNZU1RFTURfTE9HSU4sCi0rICAgICAgICAgICAgICAgICAgICBbbGlic3lzdGVtZCA+PSAyMDldLAotKyAgICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbl8yMDk9eWVzO2hhdmVfc3lzdGVtZF9sb2dpbj15ZXNdLAotKyAgICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbl8yMDk9bm87aGF2ZV9zeXN0ZW1kX2xvZ2luPW5vXSkKLSsKLSsgICMgT2xkZXIgdmVyc2lvbnMgb2Ygc3lzdGVtZCBwYWNrYWdlIHN5c3RlbWQtbG9naW4gc2VwYXJhdGVseS4gRmFsbCBiYWNrIG9uIHRoYXQKLSsgIEFTX0lGKFt0ZXN0IHgkaGF2ZV9zeXN0ZW1kX2xvZ2luICE9IHh5ZXNdLFsKLSsgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKFNZU1RFTURfTE9HSU4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlic3lzdGVtZC1sb2dpbiA+PSAxOThdLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbj15ZXNdLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbj1ub10pCi0rICAgICAgICBdKQotK2Vsc2UKLSsgIGhhdmVfc3lzdGVtZF9sb2dpbj1ubwotK2ZpCi0rCi0raWYgdGVzdCAieCRoYXZlX3N5c3RlbWRfbG9naW4iID0gInhubyIgLWEgIngkZW5hYmxlX3N5c3RlbWRfbG9naW4iID0gInh5ZXMiOyB0aGVuCi0rICBBQ19NU0dfRVJST1IoW3N5c3RlbWQtbG9naW4gc3VwcG9ydCBleHBsaWNpdGx5IGVuYWJsZWQsIGJ1dCBjYW4ndCBmaW5kIGxpYnN5c3RlbWQ+PTIwOSBvciBsaWJzeXN0ZW1kLWxvZ2luXSkKLStmaQotIAotIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfc3lzdGVtZF9sb2dpbiIgPSAieHllcyJdLAotICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfU1lTVEVNRF9MT0dJTl0sIFsxXSwgW0hhdmUgc3lzdGVtZC1sb2dpbl0pXSkKLS0tIAotY2dpdCB2MC4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbGlic3lzdGVtZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbGlic3lzdGVtZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQyOGQ1Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2xpYnN5c3RlbWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1Gcm9tIDVlYjAyNWE4NjdiNDJmOGJjN2JjNzMyNzllYWM4ZGU1OGU1MWExM2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBGcmVkZXJpY28gQ2FkZXRlIDxmcmVkZXJpY29AY2FkZXRlLmV1PgotRGF0ZTogTW9uLCAyOCBTZXAgMjAxNSAwMDozMDowOSArMDIwMAotU3ViamVjdDogY29uZmlndXJlLmFjOiBhZGQgc3VwcG9ydCBmb3IgbmV3IHZlcnNpb25zIG9mIHN5c3RlbWQKLQotU3RhcnRpbmcgZnJvbSBzeXN0ZW1kIHZlcnNpb24gMjA5LCBhIHNpbmdsZSBsaWJzeXN0ZW1kLnBjIGlzIHByb3ZpZGVkLgotRm9yIHByZXZpb3VzIHZlcnNpb25zLCBmYWxsIGJhY2sgb24gbGlic3lzdGVtZC1sb2dpbi5wYy4KLQotU2lnbmVkLW9mZi1ieTogRnJlZGVyaWNvIENhZGV0ZSA8ZnJlZGVyaWNvQGNhZGV0ZS5ldT4KLVJldmlld2VkLWJ5OiBCcnljZSBIYXJyaW5ndG9uIDxicnljZUBvc2cuc2Ftc3VuZy5jb20+Ci1SZXZpZXdlZC1ieTogRGVyZWsgRm9yZW1hbiA8ZGVyZWtmQG9zZy5zYW1zdW5nLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQmFja3BvcnRlZCBmcm9tIFdlc3RvbiBnaXQ6Ci1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvd2F5bGFuZC93ZXN0b24vY29tbWl0Lz9pZD01ZWIwMjUKLQotU2lnbmVkLW9mZi1ieTogSm9zaHVhIExvY2sgPGpvc2h1YS5sb2NrQGNvbGxhYm9yYS5jby51az4KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggMDQ1MjkxYy4uYTljZDQyOSAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzgwLDE0ICszODAsMjMgQEAgQUNfQVJHX0VOQUJMRShyZXNpemUtb3B0aW1pemF0aW9uLAotIEFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9yZXNpemVfb3B0aW1pemF0aW9uIiA9ICJ4eWVzIl0sCi0gICAgICAgW0FDX0RFRklORShbVVNFX1JFU0laRV9QT09MXSwgWzFdLCBbVXNlIHJlc2l6ZSBtZW1vcnkgcG9vbCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbl0pXSkKLSAKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhTWVNURU1EX0xPR0lOLCBbbGlic3lzdGVtZC1sb2dpbiA+PSAxOThdLAotLSAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW49eWVzXSwgW2hhdmVfc3lzdGVtZF9sb2dpbj1ub10pCi0rUEtHX0NIRUNLX01PRFVMRVMoU1lTVEVNRF9MT0dJTiwKLSsgICAgICAgICAgICAgICAgICBbbGlic3lzdGVtZCA+PSAyMDldLAotKyAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW5fMjA5PXllcztoYXZlX3N5c3RlbWRfbG9naW49eWVzXSwKLSsgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luXzIwOT1ubztoYXZlX3N5c3RlbWRfbG9naW49bm9dKQotKwotKyMgT2xkZXIgdmVyc2lvbnMgb2Ygc3lzdGVtZCBwYWNrYWdlIHN5c3RlbWQtbG9naW4gc2VwYXJhdGVseS4gRmFsbCBiYWNrIG9uIHRoYXQKLStBU19JRihbdGVzdCB4JGhhdmVfc3lzdGVtZF9sb2dpbiAhPSB4eWVzXSxbCi0rICAgICAgUEtHX0NIRUNLX01PRFVMRVMoU1lTVEVNRF9MT0dJTiwKLSsgICAgICAgICAgICAgICAgICAgICAgICBbbGlic3lzdGVtZC1sb2dpbiA+PSAxOThdLAotKyAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW49eWVzXSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luPW5vXSkKLSsgICAgICBdKQotKwotIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfc3lzdGVtZF9sb2dpbiIgPSAieHllcyJdLAotICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfU1lTVEVNRF9MT0dJTl0sIFsxXSwgW0hhdmUgc3lzdGVtZC1sb2dpbl0pXSkKLSBBTV9DT05ESVRJT05BTChIQVZFX1NZU1RFTURfTE9HSU4sIHRlc3QgIngkaGF2ZV9zeXN0ZW1kX2xvZ2luIiA9ICJ4eWVzIikKLSAKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhTWVNURU1EX0xPR0lOXzIwOSwgW2xpYnN5c3RlbWQtbG9naW4gPj0gMjA5XSwKLS0gICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luXzIwOT15ZXNdLCBbaGF2ZV9zeXN0ZW1kX2xvZ2luXzIwOT1ub10pCi0gQVNfSUYoW3Rlc3QgIngkaGF2ZV9zeXN0ZW1kX2xvZ2luXzIwOSIgPSAieHllcyJdLAotICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfU1lTVEVNRF9MT0dJTl8yMDldLCBbMV0sIFtIYXZlIHN5c3RlbWQtbG9naW4gPj0gMjA5XSldKQotIAotLS0gCi1jZ2l0IHYwLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVlNmQ2Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLXdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWM6IG1ha2UgbGNtcyBleHBsaWNpdGx5IGNvbmZpZ3VyYWJsZQotCi1UaGUgbGNtcyBwYWNrYWdlIGlzIG91dHNpZGUgb2Ygb3BlbmVtYmVkZGVkLWNvcmUsIHNvIG1ha2UgaXQKLWV4cGxpY2l0bHkgY29uZmlndXJhYmxlLiBNYWtlIGl0IGRldGVybWluaXN0aWMsIHNvIHRoYXQgaWYgbGNtcwotZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLCBhdXRvY29uZiB0aHJvd3MgYSBmYXRhbCBlcnJvci4gRm9sbG93Ci11cHN0cmVhbSBzdHlsZSB0byBtYWtlIGl0IG1vcmUgbGlrZWx5IHRvIGJlIG1lcmdlZC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gd2VzdG9uLTEuNS4wLm9yaWcvY29uZmlndXJlLmFjCi0rKysgd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYwotQEAgLTQ5MSwxMiArNDkxLDI0IEBAIEFDX0FSR19FTkFCTEUoZGVtby1jbGllbnRzLWluc3RhbGwsCi0gCQkJICAgICBlbmFibGVfZGVtb19jbGllbnRzX2luc3RhbGw9bm8pCi0gQU1fQ09ORElUSU9OQUwoSU5TVEFMTF9ERU1PX0NMSUVOVFMsIFt0ZXN0ICJ4JGVuYWJsZV9kZW1vX2NsaWVudHNfaW5zdGFsbCIgPSAieHllcyJdKQotIAotLVBLR19DSEVDS19NT0RVTEVTKExDTVMsIGxjbXMyLAotLSAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9eWVzXSwgW2hhdmVfbGNtcz1ub10pCi0taWYgdGVzdCAieCRoYXZlX2xjbXMiID0geHllczsgdGhlbgotLSAgICAgICBBQ19ERUZJTkUoSEFWRV9MQ01TLCAxLCBbSGF2ZSBsY21zIHN1cHBvcnRdKQotK0FDX0FSR19FTkFCTEUobGNtcywKLSsgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGNtc10sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBsY21zIHN1cHBvcnRdKSwsCi0rICAgICAgICAgICAgICBlbmFibGVfbGNtcz1hdXRvKQotK0FNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkZW5hYmxlX2xjbXMiID0geHllc10pCi0raWYgdGVzdCAieCRlbmFibGVfbGNtcyIgIT0gInhubyI7IHRoZW4KLSsgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKExDTVMsIAotKyAgICAgICAgICAgICAgICAgICAgICAgICBsY21zMiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz15ZXNdLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPW5vXSkKLSsgICAgICAgIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9ICJ4bm8iIC1hICJ4JGVuYWJsZV9sY21zIiA9ICJ4eWVzIjsgdGhlbgotKyAgICAgICAgICBBQ19NU0dfRVJST1IoW2xjbXMgc3VwcG9ydCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgYnV0IGxjbXMgY291bGRuJ3QgYmUgZm91bmRdKQotKyAgICAgICAgZmkKLSsgICAgICAgIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9ICJ4eWVzIjsgdGhlbgotKyAgICAgICAgICAgICAgICBlbmFibGVfbGNtcz15ZXMKLSsgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTENNUywgMSwgW0hhdmUgbGNtcyBzdXBwb3J0XSkKLSsgICAgICAgIGZpCi0gZmkKLS1BTV9DT05ESVRJT05BTChIQVZFX0xDTVMsIFt0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzXSkKLSAKLSBBQ19QQVRIX1BST0coW3dheWxhbmRfc2Nhbm5lcl0sIFt3YXlsYW5kLXNjYW5uZXJdKQotIGlmIHRlc3QgeCR3YXlsYW5kX3NjYW5uZXIgPSB4OyB0aGVuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDA3ZDRmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotCi1UaGUgbGlid2VicCBwYWNrYWdlIGlzIG91dHNpZGUgb2Ygb3BlbmVtYmVkZGVkLWNvcmUsIHNvIG1ha2UgaXQKLWV4cGxpY2l0bHkgY29uZmlndXJhYmxlLiBNYWtlIGl0IGRldGVybWluaXN0aWMsIHNvIHRoYXQgaWYgbGlid2VicCAKLWRlcGVuZGVuY2llcyBhcmUgbWlzc2luZywgYXV0b2NvbmYgdGhyb3dzIGEgZmF0YWwgZXJyb3IuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHdlc3Rvbi0xLjUuMC5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKLUBAIC0yNjgsOSArMjY4LDIyIEBAIGZpCi0gCi0gUEtHX0NIRUNLX01PRFVMRVMoUElYTUFOLCBbcGl4bWFuLTFdKQotIFBLR19DSEVDS19NT0RVTEVTKFBORywgW2xpYnBuZ10pCi0tUEtHX0NIRUNLX01PRFVMRVMoV0VCUCwgW2xpYndlYnBdLCBbaGF2ZV93ZWJwPXllc10sIFtoYXZlX3dlYnA9bm9dKQotLUFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieHllcyJdLAotLSAgICAgIFtBQ19ERUZJTkUoW0hBVkVfV0VCUF0sIFsxXSwgW0hhdmUgd2VicF0pXSkKLStBQ19BUkdfRU5BQkxFKHdlYnAsCi0rICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXdlYnBdLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgbGlid2VicCBzdXBwb3J0XSksLAotKyAgICAgICAgICAgICAgZW5hYmxlX3dlYnA9YXV0bykKLStBTV9DT05ESVRJT05BTChIQVZFX1dFQlAsIFt0ZXN0ICJ4JGVuYWJsZV93ZWJwIiA9IHh5ZXNdKQotK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV93ZWJwIiAhPSAieG5vIl0sCi0rICAgIFBLR19DSEVDS19NT0RVTEVTKFdFQlAsCi0rICAgICAgICAgICAgICAgICAgICAgW2xpYndlYnBdLAotKyAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3dlYnA9eWVzXSwKLSsgICAgICAgICAgICAgICAgICAgICBbaGF2ZV93ZWJwPW5vXSkKLSsgICAgQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4bm8iIC1hICJ4JGVuYWJsZV93ZWJwIiA9ICJ4eWVzIl0sCi0rICAgICAgICBBQ19NU0dfRVJST1IoW2xpYndlYnAgc3VwcG9ydCBleHBsaWNpdGx5IHJlcXVlc3QsIGJ1dCBsaXB3ZWJwIGNvdWxkIG5vdCBiZSBmb3VuZF0pKQotKyAgICBBU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInh5ZXMiXSwKLSsgICAgICAgIFtlbmFibGVfd2VicD15ZXNdCi0rICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1dFQlBdLCBbMV0sIFtIYXZlIHdlYnBdKV0pCi0rKQotIAotIEFDX0FSR19FTkFCTEUodmFhcGktcmVjb3JkZXIsIFsgIC0tZW5hYmxlLXZhYXBpLXJlY29yZGVyXSwsCi0gCSAgICAgIGVuYWJsZV92YWFwaV9yZWNvcmRlcj1hdXRvKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLXdlc3Rvbi1sYXVuY2gtZXhpdC1mb3ItdW5yZWNvZ25pemVkLW9wdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS13ZXN0b24tbGF1bmNoLWV4aXQtZm9yLXVucmVjb2duaXplZC1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0MDhhNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS13ZXN0b24tbGF1bmNoLWV4aXQtZm9yLXVucmVjb2duaXplZC1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBlOGI2MTUyNTBmNzAwZjc4NTRiNDIzYWFhZjBhMGFlZWE5MmMwNWE5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVG9tIEhvY2hzdGVpbiA8dG9tLmhvY2hzdGVpbkBueHAuY29tPgorRGF0ZTogU2F0LCA3IE1heSAyMDE2IDA4OjUxOjU4IC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHdlc3Rvbi1sYXVuY2g6IEhhbmRsZSBpbnZhbGlkIGNvbW1hbmQgbGluZSBvcHRpb25zCitPcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitFeGl0IHRoZSBwcm9ncmFtIGlmIGFuIHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIGZvdW5kLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBUb20gSG9jaHN0ZWluIDx0b20uaG9jaHN0ZWluQG54cC5jb20+CitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorLS0tCisKKyBzcmMvd2VzdG9uLWxhdW5jaC5jIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy93ZXN0b24tbGF1bmNoLmMgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitpbmRleCBiOGRmYjE3Li45OTg3ZDhlIDEwMDY0NAorLS0tIGEvc3JjL3dlc3Rvbi1sYXVuY2guYworKysrIGIvc3JjL3dlc3Rvbi1sYXVuY2guYworQEAgLTcwMyw2ICs3MDMsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQljYXNlICdoJzoKKyAJCQloZWxwKCJ3ZXN0b24tbGF1bmNoIik7CisgCQkJZXhpdChFWElUX0ZBSUxVUkUpOworKwkJZGVmYXVsdDoKKysJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisgCQl9CisgCX0KKyAKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi94d2F5bGFuZC53ZXN0b24tc3RhcnQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3h3YXlsYW5kLndlc3Rvbi1zdGFydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDgzYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi94d2F5bGFuZC53ZXN0b24tc3RhcnQKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworaWYgdHlwZSBYd2F5bGFuZCAgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCW1rZGlyIC1wIC90bXAvLlgxMS11bml4CisKKwlhZGRfd2VzdG9uX2FyZ3VtZW50ICItLW1vZHVsZXM9eHdheWxhbmQuc28iCitmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjExLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuMTEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQzMDlkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjExLjAuYmIKQEAgLTAsMCArMSwxMTcgQEAKK1NVTU1BUlkgPSAiV2VzdG9uLCBhIFdheWxhbmQgY29tcG9zaXRvciIKK0RFU0NSSVBUSU9OID0gIldlc3RvbiBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIGEgV2F5bGFuZCBjb21wb3NpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzllZTllNjZiYjBmOTVkMzM4NmE3YWNhZTc4MGI3MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY29tcG9zaXRvci5jO2VuZGxpbmU9MjM7bWQ1PTFkNTM1ZmVkMjY2Y2YzOWY2ZDhjMDY0N2Y1MmFjMzMxIgorCitTUkNfVVJJID0gImh0dHBzOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24ucG5nIFwKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5kZXNrdG9wIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1GaXgtd2F5bGFuZC1wcm90b2NvbHMtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNoYXJlZC1pbmNsdWRlLXN0ZGludC5oLWZvci1pbnQzMl90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3h3YXlsYW5kLndlc3Rvbi1zdGFydCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLXdlc3Rvbi1sYXVuY2gtZXhpdC1mb3ItdW5yZWNvZ25pemVkLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXdlc3Rvbi1sYXVuY2gtUHJvdmlkZS1hLWRlZmF1bHQtdmVyc2lvbi10aGF0LWRvZXNuLXQucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImJjNmY5MGEyMDM5MTYzODA0YWVjZmE2NjNiNjljNGMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA1ZTA4NmU5ZjE4NmEwNjg0M2I5ZjdhNWUxYWJmMTkzNDdiMWE2ZTRiZTI2ZDdlNzQ5MjdhYmMxN2I2YjcxMjUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1c2VyYWRkIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvZWdsCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgorCitERVBFTkRTID0gImxpYnhrYmNvbW1vbiBnZGstcGl4YnVmIHBpeG1hbiBjYWlybyBnbGliLTIuMCBqcGVnIgorREVQRU5EUyArPSAid2F5bGFuZCB3YXlsYW5kLXByb3RvY29scyBsaWJpbnB1dCB2aXJ0dWFsL2VnbCBwYW5nbyB3YXlsYW5kLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNldHVpZC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBpLWNvbXBvc2l0b3IgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZHAtY29tcG9zaXRvciBcCisgICAgICAgICAgICAgICAgV0FZTEFORF9QUk9UT0NPTFNfU1lTUk9PVF9ESVI9JHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSBcCisgICAgICAgICAgICAgICAgIgorRVhUUkFfT0VDT05GW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX3FlbXV4ODYgPSAiXAorCQlXRVNUT05fTkFUSVZFX0JBQ0tFTkQ9ZmJkZXYtYmFja2VuZC5zbyBcCisJCSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4Ni02NCA9ICJcCisJCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKKwkJIgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICdrbXMgZmJkZXYgd2F5bGFuZCBlZ2wnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMSB3YXlsYW5kJywgJ3h3YXlsYW5kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICBjbGllbnRzIGxhdW5jaCIKKyMKKyMgQ29tcG9zaXRvciBjaG9pY2VzCisjCisjIFdlc3RvbiBvbiBLTVMKK1BBQ0tBR0VDT05GSUdba21zXSA9ICItLWVuYWJsZS1kcm0tY29tcG9zaXRvciwtLWRpc2FibGUtZHJtLWNvbXBvc2l0b3IsZHJtIHVkZXYgdmlydHVhbC9tZXNhIG10ZGV2IgorIyBXZXN0b24gb24gV2F5bGFuZCAobmVzdGVkIFdlc3RvbikKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1jb21wb3NpdG9yLC0tZGlzYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsdmlydHVhbC9tZXNhIgorIyBXZXN0b24gb24gWDExCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXgxMS1jb21wb3NpdG9yLHZpcnR1YWwvbGlieDExIGxpYnhjYiBsaWJ4Y2IgbGlieGN1cnNvciBjYWlybyIKKyMgSGVhZGxlc3MgV2VzdG9uCitQQUNLQUdFQ09ORklHW2hlYWRsZXNzXSA9ICItLWVuYWJsZS1oZWFkbGVzcy1jb21wb3NpdG9yLC0tZGlzYWJsZS1oZWFkbGVzcy1jb21wb3NpdG9yIgorIyBXZXN0b24gb24gZnJhbWVidWZmZXIKK1BBQ0tBR0VDT05GSUdbZmJkZXZdID0gIi0tZW5hYmxlLWZiZGV2LWNvbXBvc2l0b3IsLS1kaXNhYmxlLWZiZGV2LWNvbXBvc2l0b3IsdWRldiBtdGRldiIKKyMgd2VzdG9uLWxhdW5jaAorUEFDS0FHRUNPTkZJR1tsYXVuY2hdID0gIi0tZW5hYmxlLXdlc3Rvbi1sYXVuY2gsLS1kaXNhYmxlLXdlc3Rvbi1sYXVuY2gsZHJtIgorIyBWQS1BUEkgZGVza3RvcCByZWNvcmRlcgorUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGktcmVjb3JkZXIsLS1kaXNhYmxlLXZhYXBpLXJlY29yZGVyLGxpYnZhIgorIyBXZXN0b24gd2l0aCBFR0wgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLWVuYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsLS1kaXNhYmxlLWVnbCAtLWRpc2FibGUtc2ltcGxlLWVnbC1jbGllbnRzLHZpcnR1YWwvZWdsIgorIyBXZXN0b24gd2l0aCBjYWlybyBnbGVzdjIgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tjYWlyby1nbGVzdjJdID0gIi0td2l0aC1jYWlyby1nbGVzdjIsLS13aXRoLWNhaXJvPWltYWdlLGNhaXJvIgorIyBXZXN0b24gd2l0aCBsY21zIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbbGNtc10gPSAiLS1lbmFibGUtbGNtcywtLWRpc2FibGUtbGNtcyxsY21zIgorIyBXZXN0b24gd2l0aCB3ZWJwIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS13aXRoLXdlYnAsLS13aXRob3V0LXdlYnAsbGlid2VicCIKKyMgV2VzdG9uIHdpdGggdW53aW5kaW5nIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLWVuYWJsZS1saWJ1bndpbmQsLS1kaXNhYmxlLWxpYnVud2luZCxsaWJ1bndpbmQiCisjIFdlc3RvbiB3aXRoIHN5c3RlbWQtbG9naW4gc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLWVuYWJsZS1zeXN0ZW1kLWxvZ2luLC0tZGlzYWJsZS1zeXN0ZW1kLWxvZ2luLHN5c3RlbWQgZGJ1cyIKKyMgV2VzdG9uIHdpdGggWHdheWxhbmQgc3VwcG9ydCAocmVxdWlyZXMgWDExIGFuZCBXYXlsYW5kKQorUEFDS0FHRUNPTkZJR1t4d2F5bGFuZF0gPSAiLS1lbmFibGUteHdheWxhbmQsLS1kaXNhYmxlLXh3YXlsYW5kIgorIyBjb2xvcmQgQ01TIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbY29sb3JkXSA9ICItLWVuYWJsZS1jb2xvcmQsLS1kaXNhYmxlLWNvbG9yZCxjb2xvcmQiCisjIENsaWVudHMgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tjbGllbnRzXSA9ICItLWVuYWJsZS1jbGllbnRzIC0tZW5hYmxlLXNpbXBsZS1jbGllbnRzIC0tZW5hYmxlLWRlbW8tY2xpZW50cy1pbnN0YWxsLC0tZGlzYWJsZS1jbGllbnRzIC0tZGlzYWJsZS1zaW1wbGUtY2xpZW50cyIKKyMgV2VzdG9uIHdpdGggUEFNIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLXdpdGgtcGFtLC0td2l0aG91dC1wYW0sbGlicGFtIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFdlc3RvbiBkb2Vzbid0IG5lZWQgdGhlIC5sYSBmaWxlcyB0byBsb2FkIG1vZHVsZXMsIHNvIHdpcGUgdGhlbQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3dlc3Rvbi8qLmxhCisKKwkjIElmIFgxMSwgc2hpcCBhIGRlc2t0b3AgZmlsZSB0byBsYXVuY2ggaXQKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IiA9ICJ4MTEiIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKwkJaW5zdGFsbCAke1dPUktESVJ9L3dlc3Rvbi5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci80OHg0OC9hcHBzCisJCWluc3RhbGwgJHtXT1JLRElSfS93ZXN0b24ucG5nICR7RH0ke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvNDh4NDgvYXBwcworCWZpCisKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4d2F5bGFuZCcsICd5ZXMnLCAnbm8nLCBkKX0iID0gInllcyIgXTsgdGhlbgorCQlpbnN0YWxsIC1EbSA2NDQgJHtXT1JLRElSfS94d2F5bGFuZC53ZXN0b24tc3RhcnQgJHtEfSR7ZGF0YWRpcn0vd2VzdG9uLXN0YXJ0L3h3YXlsYW5kCisJZmkKK30KKworUEFDS0FHRV9CRUZPUkVfUE4gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3h3YXlsYW5kJywgJyR7UE59LXh3YXlsYW5kJywgJycsIGQpfSIKK1BBQ0tBR0VTICs9ICIke1BOfS1leGFtcGxlcyIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3dlc3RvbiAke2JpbmRpcn0vd2VzdG9uLXRlcm1pbmFsICR7YmluZGlyfS93ZXN0b24taW5mbyAke2JpbmRpcn0vd2VzdG9uLWxhdW5jaCAke2JpbmRpcn0vd2NhcC1kZWNvZGUgJHtsaWJleGVjZGlyfSAke2xpYmRpcn0vJHtCUE59Lyouc28gJHtkYXRhZGlyfSIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7YmluZGlyfS8qIgorCitGSUxFU18ke1BOfS14d2F5bGFuZCA9ICIke2xpYmRpcn0vJHtCUE59L3h3YXlsYW5kLnNvIgorUkRFUEVORFNfJHtQTn0teHdheWxhbmQgKz0gInhzZXJ2ZXIteG9yZy14d2F5bGFuZCIKKworUkRFUEVORFNfJHtQTn0gKz0gInhrZXlib2FyZC1jb25maWciCitSUkVDT01NRU5EU18ke1BOfSA9ICJsaWJlcmF0aW9uLWZvbnRzIgorUlJFQ09NTUVORFNfJHtQTn0tZGV2ICs9ICJ3YXlsYW5kLXByb3RvY29scyIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIHdlc3Rvbi1sYXVuY2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjkuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhNzg4ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLVNVTU1BUlkgPSAiV2VzdG9uLCBhIFdheWxhbmQgY29tcG9zaXRvciIKLURFU0NSSVBUSU9OID0gIldlc3RvbiBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIGEgV2F5bGFuZCBjb21wb3NpdG9yIgotSE9NRVBBR0UgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzllZTllNjZiYjBmOTVkMzM4NmE3YWNhZTc4MGI3MCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY29tcG9zaXRvci5jO2VuZGxpbmU9MjM7bWQ1PTFkNTM1ZmVkMjY2Y2YzOWY2ZDhjMDY0N2Y1MmFjMzMxIgotCi1TUkNfVVJJID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5wbmcgXAotICAgICAgICAgICBmaWxlOi8vd2VzdG9uLmRlc2t0b3AgXAotICAgICAgICAgICBmaWxlOi8vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLW1ha2UtZXJyb3ItcG9ydGFibGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGlic3lzdGVtZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9leHBsaWNpdC1lbmFibGUtZGlzYWJsZS1zeXN0ZW1kLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICI2NmJiYmExMmY1NDY1NzBiNGQ5N2Y2NzZiYzc5YTI4ZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzFiMDNmMzE4NGZhMGIwZGZkZjY3ZTIxNTA0ODA4NTE1NmUxYTJjYTM0NGFmNjYxM2ZlZDM2Nzk0YWM0OGNmIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXNlcmFkZCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLSMgZGVwZW5kcyBvbiB2aXJ0dWFsL2VnbAotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKLQotREVQRU5EUyA9ICJsaWJ4a2Jjb21tb24gZ2RrLXBpeGJ1ZiBwaXhtYW4gY2Fpcm8gZ2xpYi0yLjAganBlZyIKLURFUEVORFMgKz0gIndheWxhbmQgbGliaW5wdXQgdmlydHVhbC9lZ2wgcGFuZ28gd2F5bGFuZC1uYXRpdmUiCi0KLUVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zZXR1aWQtaW5zdGFsbCBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtc2ltcGxlLWNsaWVudHMgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNsaWVudHMgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWRlbW8tY2xpZW50cy1pbnN0YWxsIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBpLWNvbXBvc2l0b3IgXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZHAtY29tcG9zaXRvciBcCi0gICAgICAgICAgICAgICAgIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kX3FlbXV4ODYgPSAiXAotCQlXRVNUT05fTkFUSVZFX0JBQ0tFTkQ9ZmJkZXYtYmFja2VuZC5zbyBcCi0JCSIKLUVYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4Ni02NCA9ICJcCi0JCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKLQkJIgotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICdrbXMgZmJkZXYgd2F5bGFuZCBlZ2wnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsYXVuY2gnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgIgotIwotIyBDb21wb3NpdG9yIGNob2ljZXMKLSMKLSMgV2VzdG9uIG9uIEtNUwotUEFDS0FHRUNPTkZJR1trbXNdID0gIi0tZW5hYmxlLWRybS1jb21wb3NpdG9yLC0tZGlzYWJsZS1kcm0tY29tcG9zaXRvcixkcm0gdWRldiB2aXJ0dWFsL21lc2EgbXRkZXYiCi0jIFdlc3RvbiBvbiBXYXlsYW5kIChuZXN0ZWQgV2VzdG9uKQotUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix2aXJ0dWFsL21lc2EiCi0jIFdlc3RvbiBvbiBYMTEKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtY29tcG9zaXRvciwtLWRpc2FibGUteDExLWNvbXBvc2l0b3IsdmlydHVhbC9saWJ4MTEgbGlieGNiIGxpYnhjYiBsaWJ4Y3Vyc29yIGNhaXJvIgotIyBIZWFkbGVzcyBXZXN0b24KLVBBQ0tBR0VDT05GSUdbaGVhZGxlc3NdID0gIi0tZW5hYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IsLS1kaXNhYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IiCi0jIFdlc3RvbiBvbiBmcmFtZWJ1ZmZlcgotUEFDS0FHRUNPTkZJR1tmYmRldl0gPSAiLS1lbmFibGUtZmJkZXYtY29tcG9zaXRvciwtLWRpc2FibGUtZmJkZXYtY29tcG9zaXRvcix1ZGV2IG10ZGV2IgotIyB3ZXN0b24tbGF1bmNoCi1QQUNLQUdFQ09ORklHW2xhdW5jaF0gPSAiLS1lbmFibGUtd2VzdG9uLWxhdW5jaCwtLWRpc2FibGUtd2VzdG9uLWxhdW5jaCxsaWJwYW0gZHJtIgotIyBWQS1BUEkgZGVza3RvcCByZWNvcmRlcgotUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGktcmVjb3JkZXIsLS1kaXNhYmxlLXZhYXBpLXJlY29yZGVyLGxpYnZhIgotIyBXZXN0b24gd2l0aCBFR0wgc3VwcG9ydAotUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLWVuYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsLS1kaXNhYmxlLWVnbCAtLWRpc2FibGUtc2ltcGxlLWVnbC1jbGllbnRzLHZpcnR1YWwvZWdsIgotIyBXZXN0b24gd2l0aCBjYWlybyBnbGVzdjIgc3VwcG9ydAotUEFDS0FHRUNPTkZJR1tjYWlyby1nbGVzdjJdID0gIi0td2l0aC1jYWlyby1nbGVzdjIsLS13aXRoLWNhaXJvPWltYWdlLGNhaXJvIgotIyBXZXN0b24gd2l0aCBsY21zIHN1cHBvcnQKLVBBQ0tBR0VDT05GSUdbbGNtc10gPSAiLS1lbmFibGUtbGNtcywtLWRpc2FibGUtbGNtcyxsY21zIgotIyBXZXN0b24gd2l0aCB3ZWJwIHN1cHBvcnQKLVBBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgotIyBXZXN0b24gd2l0aCB1bndpbmRpbmcgc3VwcG9ydAotUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKLSMgV2VzdG9uIHdpdGggc3lzdGVtZC1sb2dpbiBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQtbG9naW4sLS1kaXNhYmxlLXN5c3RlbWQtbG9naW4sc3lzdGVtZCBkYnVzIgotIyBXZXN0b24gd2l0aCBYd2F5bGFuZCBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW3h3YXlsYW5kXSA9ICItLWVuYWJsZS14d2F5bGFuZCwtLWRpc2FibGUteHdheWxhbmQsbGlieGNiIGxpYnhjdXJzb3IgY2Fpcm8iCi0jIGNvbG9yZCBDTVMgc3VwcG9ydAotUEFDS0FHRUNPTkZJR1tjb2xvcmRdID0gIi0tZW5hYmxlLWNvbG9yZCwtLWRpc2FibGUtY29sb3JkLGNvbG9yZCIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBXZXN0b24gZG9lc24ndCBuZWVkIHRoZSAubGEgZmlsZXMgdG8gbG9hZCBtb2R1bGVzLCBzbyB3aXBlIHRoZW0KLQlybSAtZiAke0R9LyR7bGliZGlyfS93ZXN0b24vKi5sYQotCi0JIyBJZiBYMTEsIHNoaXAgYSBkZXNrdG9wIGZpbGUgdG8gbGF1bmNoIGl0Ci0JaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIgPSAieDExIiBdOyB0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCi0JCWluc3RhbGwgJHtXT1JLRElSfS93ZXN0b24uZGVza3RvcCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKLQotCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvNDh4NDgvYXBwcwotCQlpbnN0YWxsICR7V09SS0RJUn0vd2VzdG9uLnBuZyAke0R9JHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKLSAgICAgICAgZmkKLX0KLQotUEFDS0FHRVMgKz0gIiR7UE59LWV4YW1wbGVzIgotCi1GSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vd2VzdG9uICR7YmluZGlyfS93ZXN0b24tdGVybWluYWwgJHtiaW5kaXJ9L3dlc3Rvbi1pbmZvICR7YmluZGlyfS93ZXN0b24tbGF1bmNoICR7YmluZGlyfS93Y2FwLWRlY29kZSAke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS8ke0JQTn0vKi5zbyAke2RhdGFkaXJ9IgotRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtiaW5kaXJ9LyoiCi0KLVJERVBFTkRTXyR7UE59ICs9ICJ4a2V5Ym9hcmQtY29uZmlnIgotUlJFQ09NTUVORFNfJHtQTn0gPSAibGliZXJhdGlvbi1mb250cyIKLQotVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKLUdST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIHdlc3Rvbi1sYXVuY2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9Yc2VydmVyLmluIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vWHNlcnZlci5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhlZWQ3Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9Yc2VydmVyLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0KLVhTRVJWRVI9L3Vzci9iaW4vWG9yZwotCi0uIC9ldGMvcHJvZmlsZQotCi1BUkdTPSIgLWJyIC1wbiBAQkxBTktfQVJHU0AiCi0KLURJU1BMQVk9JzowJwotCi1leGVjIHhpbml0IC9ldGMvWDExL1hzZXNzaW9uIC0tICRYU0VSVkVSICRESVNQTEFZICRBUkdTICQqCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoCmluZGV4IDkxNTk0YjkuLjZiZDQwYjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoCkBAIC03LDcgKzcsNyBAQAogIyBJbiB0aGUgaWRlYWwgY2FzZSB3aGVyZSBTeXN0ZW1EIGlzIGJvb3RpbmcgYW5kIHVzZXJzcGFjZSBpcyBpbml0aWF0ZWQgYnkgYQogIyBTeXN0ZW1EIHVzZXIgc2Vzc2lvbiB0aGlzIHdpbGwgaGF2ZSBiZWVuIHNldCBhbHJlYWR5LCBzbyBkb24ndCBvdmVyd3JpdGUgaXQuCiAKLWlmIFsgLXogIiRYR0RfUlVOVElNRV9ESVIiIF07IHRoZW4KLQlYREdfUlVOVElNRV9ESVI9Ii90bXAiCi0gICAgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVIKK2lmIFsgLXogIiRYREdfUlVOVElNRV9ESVIiIF07IHRoZW4KKyAgICBYREdfUlVOVElNRV9ESVI9Ii90bXAiCisgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUgogZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYgppbmRleCA2ZDdjMzQ3Li5hYjlhOTM5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbl8wLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCkBAIC05LDIyICs5LDE0IEBACiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCiBTUkNfVVJJID0gImZpbGU6Ly9ldGMgXAotICAgICAgICAgICBmaWxlOi8vWHNlcnZlci5pbiBcCiAgICAgICAgICAgIGZpbGU6Ly9ncGx2Mi1saWNlbnNlLnBhdGNoIgogCiBTID0gIiR7V09SS0RJUn0iCiAKLVBBQ0tBR0VDT05GSUcgPz89ICJibGFuayIKLSMgZHBtcyBhbmQgc2NyZWVuIHNhdmVyIHdpbGwgYmUgb24gb25seSBpZiAnYmxhbmsnIGlzIGluIFBBQ0tBR0VDT05GSUcKLVBBQ0tBR0VDT05GSUdbYmxhbmtdID0gIiIKLQogZG9faW5zdGFsbCgpIHsKIAljcCAtUiAke1N9L2V0YyAke0R9JHtzeXNjb25mZGlyfQotCXNlZCAtZSAncy9AQkxBTktfQVJHU0AvJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYmxhbmsnLCAnJywgJy1zIDAgLWRwbXMnLCBkKX0vJyBcCi0JCSR7U30vWHNlcnZlci5pbiA+ICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2VydmVyCi0KIAljaG1vZCAtUiA3NTUgJHtEfSR7c3lzY29uZmRpcn0KIH0KIAotUkRFUEVORFNfJHtQTn0gPSAiZGJ1cy14MTEgeG1vZG1hcCB4ZHB5aW5mbyB4dHNjYWwgeGluaXQgZm9ybWZhY3RvciIKK1JERVBFTkRTXyR7UE59ID0gImRidXMteDExIHhtb2RtYXAgeGRweWluZm8geGlucHV0LWNhbGlicmF0b3IgZm9ybWZhY3RvciIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiCmluZGV4IGI2OGQ0MGUuLmE2ZDBkNWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIKQEAgLTUsMTAgKzUsMTAgQEAKIFBSID0gInIzMSIKIAogU1JDX1VSSSA9ICJmaWxlOi8veHNlcnZlci1ub2RtIFwKLSAgICAgICAgICAgZmlsZTovL1h1c2VybmFtZSBcCisgICAgICAgICAgIGZpbGU6Ly9Yc2VydmVyIFwKICAgICAgICAgICAgZmlsZTovL2dwbHYyLWxpY2Vuc2UucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8veHNlcnZlci1ub2RtLnNlcnZpY2UgXAotICAgICAgICAgICBmaWxlOi8veHNlcnZlci1ub2RtLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8veHNlcnZlci1ub2RtLnNlcnZpY2UuaW4gXAorICAgICAgICAgICBmaWxlOi8veHNlcnZlci1ub2RtLmNvbmYuaW4gXAogIgogCiBTID0gIiR7V09SS0RJUn0iCkBAIC0xNiwzNSArMTYsNDQgQEAKICMgU2luY2Ugd2UgcmVmZXIgdG8gUk9PVExFU1NfWCB3aGljaCBpcyBub3JtYWxseSBlbmFibGVkIHBlci1tYWNoaW5lCiBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgogCi1pbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImJsYW5rIgorIyBkcG1zIGFuZCBzY3JlZW4gc2F2ZXIgd2lsbCBiZSBvbiBvbmx5IGlmICdibGFuaycgaXMgaW4gUEFDS0FHRUNPTkZJRworUEFDS0FHRUNPTkZJR1tibGFua10gPSAiIgogCiBkb19pbnN0YWxsKCkgewotICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCi0gICAgaW5zdGFsbCB4c2VydmVyLW5vZG0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisgICAgaW5zdGFsbCB4c2VydmVyLW5vZG0uY29uZi5pbiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veHNlcnZlci1ub2RtCisgICAgaW5zdGFsbCBYc2VydmVyICR7RH0ke3N5c2NvbmZkaXJ9L3hzZXJ2ZXItbm9kbS9Yc2VydmVyCisKKyAgICBCTEFOS19BUkdTPSIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdibGFuaycsICcnLCAnLXMgMCAtZHBtcycsIGQpfSIKKyAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgICBYVVNFUl9IT01FPSIvaG9tZS94dXNlciIKKyAgICAgICAgWFVTRVI9Inh1c2VyIgorICAgIGVsc2UKKyAgICAgICAgWFVTRVJfSE9NRT0ke1JPT1RfSE9NRX0KKyAgICAgICAgWFVTRVI9InJvb3QiCisgICAgZmkKKyAgICBzZWQgLWkgInM6QEhPTUVAOiR7WFVTRVJfSE9NRX06OyBzOkBVU0VSQDoke1hVU0VSfTo7IHM6QEJMQU5LX0FSR1NAOiR7QkxBTktfQVJHU306IiBcCisgICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveHNlcnZlci1ub2RtCiAKICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCi0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAotICAgICAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveHNlcnZlci1ub2RtCiAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLSAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veHNlcnZlci1ub2RtLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLSAgICAgICAgaWYgWyAiJHtST09UTEVTU19YfSIgPSAiMSIgXSA7IHRoZW4KLSAgICAgICAgICAgIHNlZCAtaSAncyFeSE9NRT0uKiFIT01FPS9ob21lL3h1c2VyIScgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KLSAgICAgICAgICAgIHNlZCAtaSAncyFeVXNlcj0uKiFVc2VyPXh1c2VyIScgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veHNlcnZlci1ub2RtLnNlcnZpY2UKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VkIC1pICdzIV5IT01FPS4qIUhPTUU9JHtST09UX0hPTUV9IScgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KLSAgICAgICAgICAgIHNlZCAtaSAnL15Vc2VyPS9kJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQotICAgICAgICBmaQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94c2VydmVyLW5vZG0uc2VydmljZS5pbiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQorICAgICAgICBzZWQgLWkgInM6QFVTRVJAOiR7WFVTRVJ9OiIgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veHNlcnZlci1ub2RtLnNlcnZpY2UKICAgICBmaQogCiAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KLSAgICAgICAgaWYgWyAiJHtST09UTEVTU19YfSIgPSAiMSIgXSA7IHRoZW4KLSAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vWDExCi0gICAgICAgICAgICBpbnN0YWxsIFh1c2VybmFtZSAke0R9JHtzeXNjb25mZGlyfS9YMTEKLSAgICAgICAgZmkKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICAgICAgaW5zdGFsbCB4c2VydmVyLW5vZG0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCiAgICAgZmkKIH0KIAotUkRFUEVORFNfJHtQTn0gPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnUk9PVExFU1NfWCcsICcxJywgJ3h1c2VyLWFjY291bnQnLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gPSAieGluaXQgJHtAYmFzZV9jb25kaXRpb25hbCgnUk9PVExFU1NfWCcsICcxJywgJ3h1c2VyLWFjY291bnQnLCAnJywgZCl9IgogCiBJTklUU0NSSVBUX05BTUUgPSAieHNlcnZlci1ub2RtIgogSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOSA1IC4gc3RvcCAyMCAwIDEgMiAzIDYgLiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9Yc2VydmVyIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1hzZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkYmZiZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9Yc2VydmVyCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisjIFRoaXMgc2NyaXB0IGlzIG9ubHkgbmVlZGVkIHRvIG1ha2Ugc3VyZSAvZXRjL1gxMS94c2VydmVyLWNvbW1vbgorIyBjYW4gYWZmZWN0IFhTRVJWRVIsIEFSR1MgJiBEUEk6IG90aGVyd2lzZSBzeXN0ZW1kIGNvdWxkIGp1c3QgdXNlCisjIC9ldGMvZGVmYXVsdC94c2VydmVyLW5vZG0gYXMgRW52aXJvbm1lbnRGaWxlIGFuZCBzeXN2aW5pdCBjb3VsZCBqdXN0CisjIHNvdXJjZSB0aGUgc2FtZSBmaWxlCisKKy4gL2V0Yy9wcm9maWxlCisKKyMgbG9hZCBkZWZhdWx0IHZhbHVlcyBmb3IgWFNFUlZFUiwgQVJHUywgRElTUExBWS4uLgorLiAvZXRjL2RlZmF1bHQveHNlcnZlci1ub2RtCisKKyMgQWxsb3cgeHNlcnZlci1jb21tb24gdG8gb3ZlcnJpZGUgQVJHUywgWFNFUlZFUiwgRFBJCitpZiBbIC1lIC9ldGMvWDExL3hzZXJ2ZXItY29tbW9uIF0gOyB0aGVuCisgICAgLiAvZXRjL1gxMS94c2VydmVyLWNvbW1vbgorICAgIGlmIFsgISAtZSAkWFNFUlZFUiBdIDsgdGhlbgorICAgICAgICBYU0VSVkVSPSQod2hpY2ggJFhTRVJWRVIpCisgICAgZmkKK2ZpCisKK2lmIFsgLW4gIiREUEkiIF0gOyB0aGVuCisgICAgQVJHUz0iJEFSR1MgLWRwaSAkRFBJIgorZmkKKworZXhlYyB4aW5pdCAvZXRjL1gxMS9Yc2Vzc2lvbiAtLSAkWFNFUlZFUiAkRElTUExBWSAkQVJHUyAkKgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNjBlNWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXh1c2VyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbQppbmRleCBiZmEwYThkLi42YzU0ODU1IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0KQEAgLTI2LDEwICsyNiwxMSBAQAogY2FzZSAiJDEiIGluCiAgIHN0YXJ0KQogICAgICAgIC4gL2V0Yy9wcm9maWxlCi0gICAgICAgdXNlcm5hbWU9cm9vdAorCisgICAgICAgI2RlZmF1bHQgZm9yIFVTRVIKKyAgICAgICAuIC9ldGMvZGVmYXVsdC94c2VydmVyLW5vZG0KICAgICAgICBlY2hvICJTdGFydGluZyBYc2VydmVyIgotICAgICAgIGlmIFsgLWYgL2V0Yy9YMTEvWHVzZXJuYW1lIF07IHRoZW4KLSAgICAgICAgICAgdXNlcm5hbWU9YGNhdCAvZXRjL1gxMS9YdXNlcm5hbWVgCisgICAgICAgaWYgWyAiJFVTRVIiICE9ICJyb290IiBdOyB0aGVuCiAgICAgICAgICAgICMgc2V0dGluZyBmb3Igcm9vdGxlc3MgWAogICAgICAgICAgICBjaG1vZCBvK3cgL3Zhci9sb2cKICAgICAgICAgICAgY2htb2QgZytyIC9kZXYvdHR5WzAtM10KQEAgLTM4LDggKzM5LDkgQEAKICAgICAgICAgICAgICAgIGNobW9kIG8rcncgL2Rldi9oaWRyYXcqCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKKwogICAgICAgICMgVXNpbmcgc3UgcmF0aGVyIHRoYW4gc3VkbyBhcyBsYXRlc3QgMS44LjEgY2F1c2UgZmFpbHVyZSBbWU9DVE8gIzEyMTFdCi0gICAgICAgc3UgLWwgLWMgJy9ldGMvWDExL1hzZXJ2ZXImJyAkdXNlcm5hbWUgCisgICAgICAgc3UgLWwgLWMgJy9ldGMveHNlcnZlci1ub2RtL1hzZXJ2ZXIgJicgJFVTRVIKICAgICAgICAjIFdhaXQgZm9yIHRoZSBkZXNrdG9wIHRvIHNheSBpdHMgZmluaXNoZWQgbG9hZGluZwogICAgICAgICMgYmVmb3JlIGxvYWRpbmcgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbQogICAgICAgICMgZGJ1cy13YWl0IG9yZy5tYXRjaGJveF9wcm9qZWN0LmRlc2t0b3AgTG9hZGVkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMDU4MmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5jb25mCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotSE9NRT0vaG9tZS9yb290CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYuaW4gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3YzIzZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZi5pbgpAQCAtMCwwICsxLDcgQEAKKyMgY29tbW9uIGVudmlyb25tZW50IGZpbGUgZm9yIHN5c3Zpbml0IGFuZCBzeXN0ZW1kCisKK1hTRVJWRVI9L3Vzci9iaW4vWG9yZworRElTUExBWT06MAorQVJHUz0iIC1iciAtcG4gQEJMQU5LX0FSR1NAICIKK0hPTUU9QEhPTUVACitVU0VSPUBVU0VSQApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmQ5NzlmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLVtVbml0XQotRGVzY3JpcHRpb249WHNlcnZlciBzdGFydHVwIHdpdGhvdXQgYSBkaXNwbGF5IG1hbmFnZXIKLQotW1NlcnZpY2VdCi1Vc2VyPXJvb3QKLUVudmlyb25tZW50RmlsZT0vZXRjL2RlZmF1bHQveHNlcnZlci1ub2RtCi1FeGVjU3RhcnQ9L2V0Yy9YMTEvWHNlcnZlcgotCi1bSW5zdGFsbF0KLUFsaWFzPWRpc3BsYXktbWFuYWdlci5zZXJ2aWNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UuaW4gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0YTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZS5pbgpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVhzZXJ2ZXIgc3RhcnR1cCB3aXRob3V0IGEgZGlzcGxheSBtYW5hZ2VyCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS9ldGMvZGVmYXVsdC94c2VydmVyLW5vZG0KK1VzZXI9QFVTRVJACitFeGVjU3RhcnQ9L2V0Yy94c2VydmVyLW5vZG0vWHNlcnZlcgorCitbSW5zdGFsbF0KK0FsaWFzPWRpc3BsYXktbWFuYWdlci5zZXJ2aWNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3FlbXVhbGwvcG9pbnRlcmNhbC54aW5wdXQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3FlbXVhbGwvcG9pbnRlcmNhbC54aW5wdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxNmQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcWVtdWFsbC9wb2ludGVyY2FsLnhpbnB1dApAQCAtMCwwICsxLDIgQEAKKyMgRHVtbXkgcG9pbnRlcmNhbC54aW5wdXQgZmlsZSB0byBwcmV2ZW50IHhpbnB1dF9jYWxpYnJhdG9yCisjIGZyb20gcnVubmluZyBvbiBxZW11IHN0YXJ0dXAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvYWRkLWdlb21ldHJ5LWlucHV0LXdoZW4tY2FsaWJyYXRpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL2FkZC1nZW9tZXRyeS1pbnB1dC13aGVuLWNhbGlicmF0aW5nLnBhdGNoCmluZGV4IDkzNTEzMzEuLjlkYzk0YWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvYWRkLWdlb21ldHJ5LWlucHV0LXdoZW4tY2FsaWJyYXRpbmcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9hZGQtZ2VvbWV0cnktaW5wdXQtd2hlbi1jYWxpYnJhdGluZy5wYXRjaApAQCAtMSwzMyArMSwzNCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyBsb25nZXIgbWFpbnRhaW5lZF0KLQotRnJvbSA5M2FiZjI4ZDYwMmRhNjM3Mzc2Yjc4ZGU4Yzg4YjdhYjVjZjEzYjRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSm9uYXRoYW4gRGF2aWQgPGpvbmF0aGFuLmRhdmlkQG5pLmNvbT4KLURhdGU6IE1vbiwgMzAgTm92IDIwMTUgMTI6MTI6MjAgLTA2MDAKK0Zyb20gMWNiODM3NTk2MzJiYjIxODU1OWM0ZDBkNjVmZjc5Zjg2OGMwM2RjNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJNYXhpbiBCLiBKb2huIiA8bWF4aW4uam9obkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDkgQXVnIDIwMTYgMTc6MDM6MzEgKzAzMDAKIFN1YmplY3Q6IFtQQVRDSF0gYWRkIGdlb21ldHJ5IGlucHV0IHdoZW4gY2FsaWJyYXRpbmcKIAogU2VuZCBtb25pdG9yIGdlb21ldHJ5IHRvIHhpbnB1dF9jYWxpYnJhdG9yIHdoZW4gcnVubmluZyB0aGUgc2NyaXB0CitVcGRhdGU6CisgICAgICAgIFJlbW92ZSBiYXNoaXNtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gbG9uZ2VyIG1haW50YWluZWRdCiAKIFNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIERhdmlkIDxqb25hdGhhbi5kYXZpZEBuaS5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KIC0tLQotIHNjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCB8IDUgKysrKy0KLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2ggYi9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKLWluZGV4IDBhZGE3ZGEuLjZhM2FkZWQgMTAwNzU1CitpbmRleCBmY2NiMTk3Li5mZWE3YzJmIDEwMDc1NQogLS0tIGEvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCiArKysgYi9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKLUBAIC0zNyw3ICszNywxMCBAQCBkb25lCi0gCi0gWyAiJFVTRVIiICE9ICJyb290IiBdICYmIENBTEZJTEU9JFVTRVJfQ0FMRklMRQorQEAgLTI0LDcgKzI0LDggQEAgaWYgWyAtZSAkQ0FMRklMRSBdIDsgdGhlbgorICAgZmkKKyBmaQogIAogLUNBTERBVEE9YCRCSU5BUlkgLS1vdXRwdXQtdHlwZSB4aW5wdXQgLXYgfCB0ZWUgJExPR0ZJTEUgfCBncmVwICcgICAgeGlucHV0IHNldCcgfCBzZWQgJ3MvXiAgICAvL2c7IHMvJC87L2cnYAotK3JlYWQgUkVTT0xVVElPTiA8PDwgJCh4cmFuZHIgfCBhd2sgLUYgJ1tbOnNwYWNlOl0rXScgJy8gY29ubmVjdGVkLyBcCi0rICB7IGlmICgkMyAhPSAicHJpbWFyeSIpIHByaW50ICQzOyBpZiAoJDMgPT0gInByaW1hcnkiKSBwcmludCAkNCB9JykKLSsKKytSRVNPTFVUSU9OPSQoeHJhbmRyIHwgYXdrIC1GICdbWzpzcGFjZTpdK10nICcvIGNvbm5lY3RlZC8geyBpZiAoJDMgIT0gInByaW1hcnkiKSBwcmludCAkMzsgaWYgKCQzID09ICJwcmltYXJ5IikgcHJpbnQgJDQgfScpCiArQ0FMREFUQT1gJEJJTkFSWSAtLWdlb21ldHJ5ICRSRVNPTFVUSU9OIC0tb3V0cHV0LXR5cGUgeGlucHV0IC12IHwgdGVlICRMT0dGSUxFIHwgZ3JlcCAnICAgIHhpbnB1dCBzZXQnIHwgc2VkICdzL14gICAgLy9nOyBzLyQvOy9nJ2AKICBpZiBbICEgLXogIiRDQUxEQVRBIiBdIDsgdGhlbgogICAgZWNobyAkQ0FMREFUQSA+ICRDQUxGSUxFCiAgICBlY2hvICJDYWxpYnJhdGlvbiBkYXRhIHN0b3JlZCBpbiAkQ0FMRklMRSAobG9nIGluICRMT0dGSUxFKSIKIC0tIAotMS45LjEKKzIuNC4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIKaW5kZXggYWM1YjcwYy4uNTdjM2E3YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIKQEAgLTM0LDUgKzM0LDUgQEAKIH0KIAogRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0veGRnL2F1dG9zdGFydCIKLVJERVBFTkRTXyR7UE59ID0gInhpbnB1dCBmb3JtZmFjdG9yIgorUkRFUEVORFNfJHtQTn0gPSAieGlucHV0IGZvcm1mYWN0b3IgeHJhbmRyIgogUlJFQ09NTUVORFNfJHtQTn0gPSAicG9pbnRlcmNhbC14aW5wdXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94YXV0aF8xLjAuOS5iYgppbmRleCBiMTczZjRmLi41OWIzMzIzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIKQEAgLTEwLDMgKzEwLDYgQEAKIAogU1JDX1VSSVttZDVzdW1dID0gIjdkNjAwM2YzMjgzOGQ1YjY4OGUyYzhhMTMxMDgzMjcxIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU2Y2UxNTIzZWI0OGIxZjhhNGY0MjQ0ZmUxYzNkOGU2YWYxYTNiN2Q0YjBlNjA2MzU4MjQyMWIwYjY4ZGMyOGYiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIKaW5kZXggODI1NzM3Zi4uZjIzZDI1OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiCkBAIC0xNSwzICsxNSw2IEBACiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJmNWQ0OTA3MzhiMTQ4Y2I3ZjJmZTc2MGY0MGY5MjUxNiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI5M2U2MTllZTE1NDcxZjU3NmNmYjMwYzY2M2UxOGY1YmM3MGFjYTU3N2E2M2QyYzJjMDNmMDA2YTc4MzdjMjlhIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYmQ0MjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1yZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKLQotU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGNvbW1hbmQiCi0KLURFU0NSSVBUSU9OID0gIlhyYW5kciBpcyB1c2VkIHRvIHNldCB0aGUgc2l6ZSwgb3JpZW50YXRpb24gYW5kL29yIFwKLXJlZmxlY3Rpb24gb2YgdGhlIG91dHB1dHMgZm9yIGEgc2NyZWVuLiBJdCBjYW4gYWxzbyBzZXQgdGhlIHNjcmVlbiBcCi1zaXplLiIKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZTE2MDhiZGIzM2NmOGM2MmE0NDM4ZjdkMzQ2NzliMyIKLURFUEVORFMgKz0gImxpYnhyYW5kciBsaWJ4cmVuZGVyIgotUEUgPSAiMSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjQ0MWZkYjk4ZDJhYmM2MDUxMTA4YjcwNzVkOTQ4ZmM3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxNTRhYzM0ODZiODY5MjM2OTJmMmQ2Y2RiMjk5MWEyZWU3MmJjMzJhZjJjNDM3OWE2ZjFjMDY4ZjIwNGJlMWIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjUuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjg5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjUuMC5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGNvbW1hbmQiCisKK0RFU0NSSVBUSU9OID0gIlhyYW5kciBpcyB1c2VkIHRvIHNldCB0aGUgc2l6ZSwgb3JpZW50YXRpb24gYW5kL29yIFwKK3JlZmxlY3Rpb24gb2YgdGhlIG91dHB1dHMgZm9yIGEgc2NyZWVuLiBJdCBjYW4gYWxzbyBzZXQgdGhlIHNjcmVlbiBcCitzaXplLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZTE2MDhiZGIzM2NmOGM2MmE0NDM4ZjdkMzQ2NzliMyIKK0RFUEVORFMgKz0gImxpYnhyYW5kciBsaWJ4cmVuZGVyIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImViZmZhYzk4MDIxYjhmMWRjNzFkYTBjMTkxOGU5YjU3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMxY2ZkNGUxZDRkNzA4YzAzMWQ2MDgwMWU1MjdhYmM5YjZkMzRiODVmMmZmYTJjYWRkMjFmNzVmZjM4MTUxY2QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi4xMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuMTAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3N2FkMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi4xMC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKLQotU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBldmVudCBkZXZpY2VzIChldmRldikgaW5wdXQgZHJpdmVyIgotCi1ERVNDUklQVElPTiA9ICJldmRldiBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgTGludXgncyBnZW5lcmljIGV2ZW50IFwKLWRldmljZXMuIEl0IHRoZXJlZm9yZSBzdXBwb3J0cyBhbGwgaW5wdXQgZGV2aWNlcyB0aGF0IHRoZSBrZXJuZWwga25vd3MgXAotYWJvdXQsIGluY2x1ZGluZyBtb3N0IG1pY2UgYW5kIGtleWJvYXJkcy4gXAotXAotVGhlIGV2ZGV2IGRyaXZlciBjYW4gc2VydmUgYXMgYm90aCBhIHBvaW50ZXIgYW5kIGEga2V5Ym9hcmQgaW5wdXQgXAotZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgYm90aCB0aGUgY29yZSBrZXlib2FyZCBhbmQgdGhlIGNvcmUgcG9pbnRlci4gXAotTXVsdGlwbGUgaW5wdXQgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIFwKLWRyaXZlciwgd2l0aCBvbmUgTG9hZCBkaXJlY3RpdmUgZm9yIGV2ZGV2IGluIHRoZSBNb2R1bGUgc2VjdGlvbiBvZiB5b3VyIFwKLXhvcmcuY29uZiBmb3IgZWFjaCBpbnB1dCBkZXZpY2UgdGhhdCB3aWxsIHVzZSB0aGlzIGRyaXZlci4gIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZWZlMzNiMWNmMGNhY2JhMGU3MmUzYjBmYTBmMGUxNiIKLQotREVQRU5EUyArPSAibXRkZXYgbGliZXZkZXYiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5NmQ4OWQ5NDA2YTAyZjVlMzZiZGFhNGVkZDlhMjQzYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhZjljMmI0N2Y1YjI3MmFlNTZiNDVkYTZiZDg0NjEwZmM5YTNkODBhNGIzMmM4MjE1ODQyYTM5ZDg2MmRlMDE3IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuMTAuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjEwLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxYzNlYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjEwLjMuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBldmVudCBkZXZpY2VzIChldmRldikgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJldmRldiBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgTGludXgncyBnZW5lcmljIGV2ZW50IFwKK2RldmljZXMuIEl0IHRoZXJlZm9yZSBzdXBwb3J0cyBhbGwgaW5wdXQgZGV2aWNlcyB0aGF0IHRoZSBrZXJuZWwga25vd3MgXAorYWJvdXQsIGluY2x1ZGluZyBtb3N0IG1pY2UgYW5kIGtleWJvYXJkcy4gXAorXAorVGhlIGV2ZGV2IGRyaXZlciBjYW4gc2VydmUgYXMgYm90aCBhIHBvaW50ZXIgYW5kIGEga2V5Ym9hcmQgaW5wdXQgXAorZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgYm90aCB0aGUgY29yZSBrZXlib2FyZCBhbmQgdGhlIGNvcmUgcG9pbnRlci4gXAorTXVsdGlwbGUgaW5wdXQgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIFwKK2RyaXZlciwgd2l0aCBvbmUgTG9hZCBkaXJlY3RpdmUgZm9yIGV2ZGV2IGluIHRoZSBNb2R1bGUgc2VjdGlvbiBvZiB5b3VyIFwKK3hvcmcuY29uZiBmb3IgZWFjaCBpbnB1dCBkZXZpY2UgdGhhdCB3aWxsIHVzZSB0aGlzIGRyaXZlci4gIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZWZlMzNiMWNmMGNhY2JhMGU3MmUzYjBmYTBmMGUxNiIKKworREVQRU5EUyArPSAibXRkZXYgbGliZXZkZXYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYTMzNjNjZTUwNjFkMGM0ZDFlN2Y3MDE5Yjk5NzE2ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YWEyMWJhNGJlOGRmOTI3ZTU2NzZhOTljN2Y0ZjAzNDNhYmMwODlmNTQ1MWI3ZTczZTM5NTM2ZjI5YjMzMmEyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWxpYmlucHV0XzAuMTYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1saWJpbnB1dF8wLjE2LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNTJiYWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWxpYmlucHV0XzAuMTYuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXJlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCi0KLVNVTU1BUlkgPSAiR2VuZXJpYyBpbnB1dCBkcml2ZXIgZm9yIHRoZSBYLk9yZyBzZXJ2ZXIgYmFzZWQgb24gbGliaW5wdXQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZTZiMjBlYTJlZjk0YTk5ODE0NWYwZWEzZjc4OGVlMCIKLQotREVQRU5EUyArPSAibGliaW5wdXQiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyYzhjYjUyMGY4OGRhN2JhZmFjZWViYzBiMzRlYTFkNCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGFkZTUzMWU5MWU3OWFjZjZkY2U4YWM1NWZhNGY2NWFiZTNmMTM1OGM1ZDNkNzc3YWU0OGRiYzc0Yjc2ZjQ5IgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbGliaW5wdXRfMC4xOS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWxpYmlucHV0XzAuMTkuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTVjNDcxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWxpYmlucHV0XzAuMTkuMC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIkdlbmVyaWMgaW5wdXQgZHJpdmVyIGZvciB0aGUgWC5Pcmcgc2VydmVyIGJhc2VkIG9uIGxpYmlucHV0IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWU2YjIwZWEyZWY5NGE5OTgxNDVmMGVhM2Y3ODhlZTAiCisKK0RFUEVORFMgKz0gImxpYmlucHV0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTJjMzhiMTM2OTc2NDI0M2JmY2Y2ZWFkMWU0YzZkMzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmM1ZDMwZGM3YzhiOGFlMzQyNjEzNDBlMWRjOWNiYjhlZjQzNTA3OGUwODRiOGVmNTA3NTI3YThhMjFhZjQ3NyIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXZtbW91c2VfMTMuMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXZtbW91c2VfMTMuMS4wLmJiCmluZGV4IDg2MTViNDguLjkyYTFiMjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIKQEAgLTIzLDQgKzIzLDQgQEAKIAogRVhUUkFfT0VDT05GID0gIi0td2l0aC11ZGV2LXJ1bGVzLWRpcj0ke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZCIKIAotRklMRVNfJHtQTn0gKz0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLyAke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC8wMDAxLWdlbjgtRml4LXRoZS1ZVVYtUkdCLXNoYWRlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC8wMDAxLWdlbjgtRml4LXRoZS1ZVVYtUkdCLXNoYWRlci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3NjIxOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvMDAwMS1nZW44LUZpeC10aGUtWVVWLVJHQi1zaGFkZXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1Gcm9tIGM0MzYxN2I3MzllMzU4MDY0Mzk2OTEyYzdhN2E4MDI4Y2E5MWQyMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiA9P1VURi04P3E/VmlsbGU9MjBTeXJqPUMzPUE0bD1DMz1BND89IDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLURhdGU6IFRodSwgMTYgQXByIDIwMTUgMjA6NDA6MzkgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gZ2VuODogRml4IHRoZSBZVVYtPlJHQiBzaGFkZXIKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLQotVXNlIHRoZSBjb3JyZWN0IHJlZ2lzdGVyIChZbl8wMSkgd2l0aCBmaXJzdCBoYWxmIG9mIHRoZQotWSBzYW1wbGVzIGluc3RlYWQgb2YgdXNpbmcgdGhlIHJlZ2lzdGVyIChZbl8yMykgd2l0aCB0aGUKLXNlY29uZCBoYWxmIHR3aWNlIHdoZW4gY29tcHV0aW5nIHRoZSBncmVlbiBjaGFubmVsLgotCi1BbHNvIHVzZSB0aGUgWW5fMDEgcmVnaXN0ZXIgbmFtZSBpbnN0ZWFkIG9mIFluIGZvciB0aGUgcmVkCi1jaGFubmVsIGFzIHdlbGwsIGp1c3QgZm9yIGEgYml0IG9mIGV4dHJhIGNvbnNpc3RlbmN5LgotCi1CdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4MDcKLVNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci1UZXN0ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+Ci0KLS0tLQotIHNyYy9yZW5kZXJfcHJvZ3JhbS9leGFfd21feXV2X3JnYi5nOGEgfCA0ICsrLS0KLSBzcmMvcmVuZGVyX3Byb2dyYW0vZXhhX3dtX3l1dl9yZ2IuZzhiIHwgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3JlbmRlcl9wcm9ncmFtL2V4YV93bV95dXZfcmdiLmc4YSBiL3NyYy9yZW5kZXJfcHJvZ3JhbS9leGFfd21feXV2X3JnYi5nOGEKLWluZGV4IDdkZWYwOTMuLjM0OTczYmEgMTAwNjQ0Ci0tLS0gYS9zcmMvcmVuZGVyX3Byb2dyYW0vZXhhX3dtX3l1dl9yZ2IuZzhhCi0rKysgYi9zcmMvcmVuZGVyX3Byb2dyYW0vZXhhX3dtX3l1dl9yZ2IuZzhhCi1AQCAtNzYsNyArNzYsNyBAQCBhZGQgKDE2KSAgICBDYm48MT5GCQlDYjw4LDgsMT5GCS0wLjUwMTk2MUYgIHsgY29tcHIgYWxpZ24xIH07Ci0gICAgIC8qIAotICAgICAgKiBSID0gWSArIENyICogMS41OTYKLSAgICAgICovCi0tbW92ICg4KSAgICBhY2MwPDE+RgkJWW48OCw4LDE+RgkJICAgIHsgY29tcHIgYWxpZ24xIH07Ci0rbW92ICg4KSAgICBhY2MwPDE+RgkJWW5fMDE8OCw4LDE+RgkJICAgIHsgY29tcHIgYWxpZ24xIH07Ci0gbWFjLnNhdCg4KSBzcmNfc2FtcGxlX3JfMDE8MT5GCUNybl8wMTw4LDgsMT5GCTEuNTk2RgkgICAgeyBjb21wciBhbGlnbjEgfTsKLSAgICAgIAotIG1vdiAoOCkgICAgYWNjMDwxPkYJCVluXzIzPDgsOCwxPkYJCSAgICB7IGNvbXByIGFsaWduMSB9OwotQEAgLTg0LDcgKzg0LDcgQEAgbWFjLnNhdCg4KSBzcmNfc2FtcGxlX3JfMjM8MT5GCUNybl8yMzw4LDgsMT5GCTEuNTk2RgkgICAgeyBjb21wciBhbGlnbjEgfTsKLSAgICAgLyoKLSAgICAgICogRyA9IENybiAqIC0wLjgxMyArIENibiAqIC0wLjM5MiArIFkKLSAgICAgICovCi0tbW92ICg4KSAgICBhY2MwPDE+RgkJWW5fMjM8OCw4LDE+RgkJICAgIHsgY29tcHIgYWxpZ24xIH07Ci0rbW92ICg4KSAgICBhY2MwPDE+RgkJWW5fMDE8OCw4LDE+RgkJICAgIHsgY29tcHIgYWxpZ24xIH07Ci0gbWFjICg4KSAgICBhY2MwPDE+RgkJQ3JuXzAxPDgsOCwxPkYgICAgCS0wLjgxM0YJICAgIHsgY29tcHIgYWxpZ24xIH07Ci0gbWFjLnNhdCg4KSBzcmNfc2FtcGxlX2dfMDE8MT5GCUNibl8wMTw4LDgsMT5GICAgIAktMC4zOTJGCSAgICB7IGNvbXByIGFsaWduMSB9OwotIAotZGlmZiAtLWdpdCBhL3NyYy9yZW5kZXJfcHJvZ3JhbS9leGFfd21feXV2X3JnYi5nOGIgYi9zcmMvcmVuZGVyX3Byb2dyYW0vZXhhX3dtX3l1dl9yZ2IuZzhiCi1pbmRleCA0NDk0OTUzLi4yY2Q2ZmM0IDEwMDY0NAotLS0tIGEvc3JjL3JlbmRlcl9wcm9ncmFtL2V4YV93bV95dXZfcmdiLmc4YgotKysrIGIvc3JjL3JlbmRlcl9wcm9ncmFtL2V4YV93bV95dXZfcmdiLmc4YgotQEAgLTYsNyArNiw3IEBACi0gICAgeyAweDgwNjAwMDQ4LCAweDIxYzAzYWU4LCAweDNlOGQwMmMwLCAweDNmY2M0OWJhIH0sCi0gICAgeyAweDAwNjAwMDAxLCAweDI0MDAzYWUwLCAweDAwOGQwMzIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDgwNjAwMDQ4LCAweDIxZTAzYWU4LCAweDNlOGQwMmUwLCAweDNmY2M0OWJhIH0sCi0tICAgeyAweDAwNjAwMDAxLCAweDI0MDAzYWUwLCAweDAwOGQwMzIwLCAweDAwMDAwMDAwIH0sCi0rICAgeyAweDAwNjAwMDAxLCAweDI0MDAzYWUwLCAweDAwOGQwMzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwNjAwMDQ4LCAweDI0MDAzYWUwLCAweDNlOGQwMmMwLCAweGJmNTAyMGM1IH0sCi0gICAgeyAweDgwNjAwMDQ4LCAweDIyMDAzYWU4LCAweDNlOGQwMzQwLCAweGJlYzhiNDM5IH0sCi0gICAgeyAweDAwNjAwMDAxLCAweDI0MDAzYWUwLCAweDAwOGQwMzIwLCAweDAwMDAwMDAwIH0sCi0tLSAKLTIuNS4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC8wMDAxLXV4YS1maXgtdGhlLWNhbGwtdG8tUGl4bWFwU3luY0RpcnR5SGVscGVyLWJyb2tlbi1ieS0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvMDAwMS11eGEtZml4LXRoZS1jYWxsLXRvLVBpeG1hcFN5bmNEaXJ0eUhlbHBlci1icm9rZW4tYnktLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTkyNGJiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC8wMDAxLXV4YS1maXgtdGhlLWNhbGwtdG8tUGl4bWFwU3luY0RpcnR5SGVscGVyLWJyb2tlbi1ieS0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Gcm9tIDJjNTA2MzkzOGNjODA5ZjYyNGU1NmVmZDQ2NzMwNDFmYTgxNDFlODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJ0aW4gUGVyZXMgPG1hcnRpbi5wZXJlc0BsaW51eC5pbnRlbC5jb20+Ci1EYXRlOiBUaHUsIDkgSnVsIDIwMTUgMTE6MjY6MzggKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gdXhhOiBmaXggdGhlIGNhbGwgdG8gUGl4bWFwU3luY0RpcnR5SGVscGVyLCBicm9rZW4gYnkKLSB4c2VydmVyJ3MgOTBkYjVlZAotCi1baWNrbGU6IHN3aXRjaCB0byBIQVNfRElSVFlUUkFDS0lOR19ST1RBVElPTiBhcyBzdWdnZXN0ZWQgYnkgRGF2ZSBBaXJsaWVdCi1TaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gUGVyZXMgPG1hcnRpbi5wZXJlc0BsaW51eC5pbnRlbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KLS0tLQotIHNyYy9jb21wYXQtYXBpLmggfCA0ICsrKysKLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9zcmMvY29tcGF0LWFwaS5oIGIvc3JjL2NvbXBhdC1hcGkuaAotaW5kZXggYWE5M2JlZS4uMjkzZTlkNyAxMDA2NDQKLS0tLSBhL3NyYy9jb21wYXQtYXBpLmgKLSsrKyBiL3NyYy9jb21wYXQtYXBpLmgKLUBAIC0yNDcsMyArMjQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIEZyZWVQaXhtYXAoUGl4bWFwUHRyIHBpeG1hcCkKLSAjZW5kaWYKLSAKLSAjZW5kaWYKLSsKLSsjaWYgSEFTX0RJUlRZVFJBQ0tJTkdfUk9UQVRJT04KLSsjZGVmaW5lIFBpeG1hcFN5bmNEaXJ0eUhlbHBlcihkLCBkZCkgUGl4bWFwU3luY0RpcnR5SGVscGVyKGQpCi0rI2VuZGlmCi0tLSAKLTIuNS4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2gKaW5kZXggZGRhNTA4ZC4uM2RkZGQzMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2gKQEAgLTEyLDYgKzEyLDYgQEAKIGluZGV4IGJkNjU0ZjMuLjc4YTBlMGQgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUuYWMKICsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTI1MSArMjUxIEBAIGZpCi0tUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKLSsjUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKK0BAIC0yNzkgKzI3OSBAQCBmaQorLVBLR19DSEVDS19NT0RVTEVTKFgxMV9EUkkzLCBbeGNiLWRyaTMgeGNiLXN5bmMgeGNiLXhmaXhlcyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeGNvbXBvc2l0ZSB4ZGFtYWdlIHhyZW5kZXIgeHJhbmRyIHh4Zjg2dm0geGV4dCBsaWJkcm1dLCBbeDExX2RyaTM9InllcyJdLCBbeDExX2RyaTM9Im5vIl0pCisrI1BLR19DSEVDS19NT0RVTEVTKFgxMV9EUkkzLCBbeGNiLWRyaTMgeGNiLXN5bmMgeGNiLXhmaXhlcyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeGNvbXBvc2l0ZSB4ZGFtYWdlIHhyZW5kZXIgeHJhbmRyIHh4Zjg2dm0geGV4dCBsaWJkcm1dLCBbeDExX2RyaTM9InllcyJdLCBbeDExX2RyaTM9Im5vIl0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODlkNTJlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotRnJvbSA3ZmUyYjI5NDg2NTI0NDNmZjQzZDkwNzg1NWJkN2EwNTFkNTRkMzA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci1EYXRlOiBUaHUsIDE5IE1hciAyMDE1IDIzOjE0OjE3ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIHNuYTogUHJvdGVjdCBhZ2FpbnN0IEFCSSBicmVha2FnZSBpbiByZWNlbnQgdmVyc2lvbnMgb2YKLSBsaWJkcm0KLQotY29tbWl0IDdmZTJiMjk0ODY1MjQ0M2ZmNDNkOTA3ODU1YmQ3YTA1MWQ1NGQzMDkgdXBzdHJlYW0uCi0KLVNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+Ci0KLWRpZmYgLS1naXQgYS9zcmMvc25hL2tnZW0uYyBiL3NyYy9zbmEva2dlbS5jCi1pbmRleCAxMWYwODI4ZjJiYmMuLjZmMTZjYmFjODdmMiAxMDA2NDQKLS0tLSBhL3NyYy9zbmEva2dlbS5jCi0rKysgYi9zcmMvc25hL2tnZW0uYwotQEAgLTE4Miw2ICsxODIsMTUgQEAgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NhY2hpbmcgewotICNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fU0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgTE9DQUxfSTkxNV9HRU1fU0VUX0NBQ0hJTkcsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nKQotICNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fR0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgTE9DQUxfSTkxNV9HRU1fR0VUX0NBQ0hJTkcsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nKQotIAotK3N0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwIHsKLSsJdWludDMyX3QgaGFuZGxlOwotKwl1aW50MzJfdCBwYWQ7Ci0rCXVpbnQ2NF90IG9mZnNldDsKLSsJdWludDY0X3Qgc2l6ZTsKLSsJdWludDY0X3QgYWRkcl9wdHI7Ci0rfTsKLSsjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX01NQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9NTUFQLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCkKLSsKLSBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcDIgewotIAl1aW50MzJfdCBoYW5kbGU7Ci0gCXVpbnQzMl90IHBhZDsKLUBAIC01MTQsMTUgKzUyMywxNSBAQCByZXRyeV93YzoKLSAKLSBzdGF0aWMgdm9pZCAqX19rZ2VtX2JvX21hcF9fY3B1KHN0cnVjdCBrZ2VtICprZ2VtLCBzdHJ1Y3Qga2dlbV9ibyAqYm8pCi0gewotLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgbW1hcF9hcmc7Ci0rCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwIGFyZzsKLSAJaW50IGVycjsKLSAKLSByZXRyeToKLS0JVkdfQ0xFQVIobW1hcF9hcmcpOwotLQltbWFwX2FyZy5oYW5kbGUgPSBiby0+aGFuZGxlOwotLQltbWFwX2FyZy5vZmZzZXQgPSAwOwotLQltbWFwX2FyZy5zaXplID0gYnl0ZXMoYm8pOwotLQlpZiAoKGVyciA9IGRvX2lvY3RsKGtnZW0tPmZkLCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJm1tYXBfYXJnKSkpIHsKLSsJVkdfQ0xFQVIoYXJnKTsKLSsJYXJnLmhhbmRsZSA9IGJvLT5oYW5kbGU7Ci0rCWFyZy5vZmZzZXQgPSAwOwotKwlhcmcuc2l6ZSA9IGJ5dGVzKGJvKTsKLSsJaWYgKChlcnIgPSBkb19pb2N0bChrZ2VtLT5mZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fTU1BUCwgJmFyZykpKSB7Ci0gCQlhc3NlcnQoZXJyICE9IEVJTlZBTCk7Ci0gCi0gCQlpZiAoX19rZ2VtX3Rocm90dGxlX3JldGlyZShrZ2VtLCAwKSkKLUBAIC01MzYsMTAgKzU0NSwxMCBAQCByZXRyeToKLSAJCXJldHVybiBOVUxMOwotIAl9Ci0gCi0tCVZHKFZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQobW1hcF9hcmcuYWRkcl9wdHIsIGJ5dGVzKGJvKSkpOwotKwlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKGFyZy5hZGRyX3B0ciwgYnl0ZXMoYm8pKSk7Ci0gCi0gCURCRygoIiVzOiBjYWNoaW5nIENQVSB2bWEgZm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIGJvLT5oYW5kbGUpKTsKLS0JcmV0dXJuIGJvLT5tYXBfX2NwdSA9ICh2b2lkICopKHVpbnRwdHJfdCltbWFwX2FyZy5hZGRyX3B0cjsKLSsJcmV0dXJuIGJvLT5tYXBfX2NwdSA9ICh2b2lkICopKHVpbnRwdHJfdClhcmcuYWRkcl9wdHI7Ci0gfQotIAotIHN0YXRpYyBpbnQgZ2VtX3dyaXRlKGludCBmZCwgdWludDMyX3QgaGFuZGxlLAotLS0gCi0yLjQuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTY3NWVlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotRnJvbSAxMmFmOGE1NzVkMTUxOGQ0MDQxNmY4MzE5NTA0OTE1N2MzYTA2MmE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci1EYXRlOiBUdWUsIDI0IEZlYiAyMDE1IDE1OjI1OjQwICswMDAwCi1TdWJqZWN0OiBzbmE6IHVkZXYgaW50ZWdyYXRpb24gZGVwZW5kcyBvbiBmc3RhdCBhbmQgc3lzL3N0YXQuaAotCi1zcmMvc25hL3NuYV9kcml2ZXIuYzogSW4gZnVuY3Rpb24gJ3NuYV9oYW5kbGVfdWV2ZW50cyc6Ci1zcmMvc25hL3NuYV9kcml2ZXIuYzo3NTk6MjogZXJyb3I6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdmc3RhdCcgWy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCi0KLUFsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaW5jbHVkZSB1ZGV2IHN1cHBvcnQgaW4gdGhlIGNvbmZpZ3VyZQotc3VtbWFyeS4KLQotU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDc0NzZlMmIuLmRlM2E0YjMgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTE5NywxMSArMTk3LDE1IEBAIEFDX0FSR19FTkFCTEUodWRldiwKLSAKLSBpZiB0ZXN0ICJ4JFVERVYiICE9ICJ4bm8iOyB0aGVuCi0gCVBLR19DSEVDS19NT0RVTEVTKFVERVYsIFtsaWJ1ZGV2XSwgW3VkZXY9InllcyJdLCBbdWRldj0ibm8iXSkKLSsJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3N0YXQuaF0sIFtdLCBbdWRldj0ibm8iXSkKLSAJaWYgdGVzdCAieCRVREVWIiA9ICJ4eWVzIiAtYSAieCR1ZGV2IiAhPSAieHllcyI7IHRoZW4KLSAJCUFDX01TR19FUlJPUihbdWRldiBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbm90IGZvdW5kIChsaWJ1ZGV2KV0pCi0gCWZpCi0gCWlmIHRlc3QgIngkdWRldiIgPSAieHllcyI7IHRoZW4KLSAJCUFDX0RFRklORShIQVZFX1VERVYsMSxbRW5hYmxlIHVkZXYtYmFzZWQgbW9uaXRvciBob3RwbHVnIGRldGVjdGlvbl0pCi0rCQl1ZGV2X21zZz0iIHllcyIKLSsJZWxzZQotKwkJdWRldl9tc2c9IiBubyIKLSAJZmkKLSBmaQotIAotQEAgLTkxMSw2ICs5MTUsNyBAQCBlY2hvICIgIFN1cHBvcnQgZm9yIEtlcm5lbCBNb2RlIFNldHRpbmc/ICRLTVMiCi0gZWNobyAiICBTdXBwb3J0IGZvciBsZWdhY3kgVXNlciBNb2RlIFNldHRpbmcgKGZvciBpODEwKT8gJFVNUyIKLSBlY2hvICIgIFN1cHBvcnQgZm9yIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmU6JGRyaV9tc2ciCi0gZWNobyAiICBTdXBwb3J0IGZvciBYdiBtb3Rpb24gY29tcGVuc2F0aW9uIChYdk1DIGFuZCBsaWJYdk1DKTokeHZtY19tc2ciCi0rZWNobyAiICBTdXBwb3J0IGZvciBkaXNwbGF5IGhvdHBsdWcgbm90aWZpY2F0aW9ucyAodWRldik6JHVkZXZfbXNnIgotIGVjaG8gIiAgQnVpbGQgYWRkaXRpb25hbCB0b29scyBhbmQgdXRpbGl0aWVzPyR0b29sc19tc2ciCi0gaWYgdGVzdCAtbiAiJHhwX21zZyI7IHRoZW4KLSBlY2hvICIgIEV4cGVyaW1lbnRhbCBzdXBwb3J0OiR4cF9tc2ciCi1kaWZmIC0tZ2l0IGEvc3JjL3NuYS9zbmFfZHJpdmVyLmMgYi9zcmMvc25hL3NuYV9kcml2ZXIuYwotaW5kZXggOGMwZDBiNS4uYmMyMGVmMCAxMDA2NDQKLS0tLSBhL3NyYy9zbmEvc25hX2RyaXZlci5jCi0rKysgYi9zcmMvc25hL3NuYV9kcml2ZXIuYwotQEAgLTc0MCw2ICs3NDAsOCBAQCBzbmFfd2FrZXVwX2hhbmRsZXIoV0FLRVVQSEFORExFUl9BUkdTX0RFQ0wpCi0gfQotIAotICNpZiBIQVZFX1VERVYKLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsKLSBzdGF0aWMgdm9pZAotIHNuYV9oYW5kbGVfdWV2ZW50cyhpbnQgZmQsIHZvaWQgKmNsb3N1cmUpCi0gewotLS0gCi1jZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF8yLjk5LjkxNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF8yLjk5LjkxNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc1YjQ0Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1yZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYwotCi1TVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIEludGVsIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHNldHMgZHJpdmVyIgotCi1ERVNDUklQVElPTiA9ICJpbnRlbCBpcyBhbiBYb3JnIGRyaXZlciBmb3IgSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBcCi1jaGlwc2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBkZXB0aHMgOCwgMTUsIDE2IGFuZCAyNC4gT24gc29tZSBjaGlwc2V0cywgXAotdGhlIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBhY2NlbGVyYXRlZCAzRCB2aWEgdGhlIERpcmVjdCBSZW5kZXJpbmcgXAotSW5mcmFzdHJ1Y3R1cmUgKERSSSkuIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04NzMwYWQ1OGQxMWM3YmJhZDlhNzA2NmQ2OWY3ODA4ZSIKLQotU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGUteDExLWRyaTMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3VkZXYtZnN0YXQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtdXhhLWZpeC10aGUtY2FsbC10by1QaXhtYXBTeW5jRGlydHlIZWxwZXItYnJva2VuLWJ5LS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1nZW44LUZpeC10aGUtWVVWLVJHQi1zaGFkZXIucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmYTE5NmE2NmU1MmMwYzYyNGZlNWQzNTBhZjdhNWU3YiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwMGI3ODFlZWEwNTU1ODI4MjBhMTIzYzQ3YjYyNDExYmRmNmFhYmY0ZjAzZGMwNTY4ZmFlYzU1ZmFmOTY2N2M5IgotCi1ERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBkcm0gbGlicGNpYWNjZXNzIHBpeG1hbiIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gInh2bWMgc25hIHVkZXYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZHJpIGRyaTEgZHJpMicsICcnLCBkKX0iCi0KLVBBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmksLS1kaXNhYmxlLWRyaSIKLVBBQ0tBR0VDT05GSUdbZHJpMV0gPSAiLS1lbmFibGUtZHJpMSwtLWRpc2FibGUtZHJpMSx4Zjg2ZHJpcHJvdG8iCi1QQUNLQUdFQ09ORklHW2RyaTJdID0gIi0tZW5hYmxlLWRyaTIsLS1kaXNhYmxlLWRyaTIsZHJpMnByb3RvIgotUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLC0tZGlzYWJsZS1kcmkzLGRyaTNwcm90byIKLVBBQ0tBR0VDT05GSUdbc25hXSA9ICItLWVuYWJsZS1zbmEsLS1kaXNhYmxlLXNuYSIKLVBBQ0tBR0VDT05GSUdbdXhhXSA9ICItLWVuYWJsZS11eGEsLS1kaXNhYmxlLXV4YSIKLVBBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS1lbmFibGUtdWRldiwtLWRpc2FibGUtdWRldix1ZGV2IgotUEFDS0FHRUNPTkZJR1t4dm1jXSA9ICItLWVuYWJsZS14dm1jLC0tZGlzYWJsZS14dm1jLGxpYnh2bWMgeGNiLXV0aWwiCi1QQUNLQUdFQ09ORklHW3Rvb2xzXSA9ICItLWVuYWJsZS10b29scywtLWRpc2FibGUtdG9vbHMsbGlieGluZXJhbWEgbGlieHJhbmRyIGxpYnhkYW1hZ2UgbGlieGZpeGVzIGxpYnhjdXJzb3IgbGlieHRzdCBsaWJ4ZXh0IGxpYnhyZW5kZXIiCi0KLSMgLS1lbmFibGUta21zLW9ubHkgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IFJPT1RMRVNTX1gKLUVYVFJBX09FQ09ORiArPSAnJHtAYmFzZV9jb25kaXRpb25hbCggIlJPT1RMRVNTX1giLCAiMSIsICIgLS1lbmFibGUta21zLW9ubHkiLCAiIiwgZCApfScKLQotQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcG9sa2l0LTEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmNjNzMwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsX2dpdC5iYgpAQCAtMCwwICsxLDQzIEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIEludGVsIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHNldHMgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJpbnRlbCBpcyBhbiBYb3JnIGRyaXZlciBmb3IgSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBcCitjaGlwc2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBkZXB0aHMgOCwgMTUsIDE2IGFuZCAyNC4gT24gc29tZSBjaGlwc2V0cywgXAordGhlIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBhY2NlbGVyYXRlZCAzRCB2aWEgdGhlIERpcmVjdCBSZW5kZXJpbmcgXAorSW5mcmFzdHJ1Y3R1cmUgKERSSSkuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04NzMwYWQ1OGQxMWM3YmJhZDlhNzA2NmQ2OWY3ODA4ZSIKKworU1JDUkVWID0gIjhmMzNmODAxMDAwOTZmNzc5MGM3YjgxOWNlMzdhM2VkOGNlOGI1ZmEiCitQViA9ICIyLjk5LjkxNytnaXQke1NSQ1BWfSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcveG9yZy9kcml2ZXIveGY4Ni12aWRlby1pbnRlbCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYTE5NmE2NmU1MmMwYzYyNGZlNWQzNTBhZjdhNWU3YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMGI3ODFlZWEwNTU1ODI4MjBhMTIzYzQ3YjYyNDExYmRmNmFhYmY0ZjAzZGMwNTY4ZmFlYzU1ZmFmOTY2N2M5IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBkcm0gbGlicGNpYWNjZXNzIHBpeG1hbiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInh2bWMgc25hIHVkZXYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZHJpIGRyaTEgZHJpMicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmksLS1kaXNhYmxlLWRyaSIKK1BBQ0tBR0VDT05GSUdbZHJpMV0gPSAiLS1lbmFibGUtZHJpMSwtLWRpc2FibGUtZHJpMSx4Zjg2ZHJpcHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTJdID0gIi0tZW5hYmxlLWRyaTIsLS1kaXNhYmxlLWRyaTIsZHJpMnByb3RvIgorUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLC0tZGlzYWJsZS1kcmkzLGRyaTNwcm90byIKK1BBQ0tBR0VDT05GSUdbc25hXSA9ICItLWVuYWJsZS1zbmEsLS1kaXNhYmxlLXNuYSIKK1BBQ0tBR0VDT05GSUdbdXhhXSA9ICItLWVuYWJsZS11eGEsLS1kaXNhYmxlLXV4YSIKK1BBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS1lbmFibGUtdWRldiwtLWRpc2FibGUtdWRldix1ZGV2IgorUEFDS0FHRUNPTkZJR1t4dm1jXSA9ICItLWVuYWJsZS14dm1jLC0tZGlzYWJsZS14dm1jLGxpYnh2bWMgeGNiLXV0aWwiCitQQUNLQUdFQ09ORklHW3Rvb2xzXSA9ICItLWVuYWJsZS10b29scywtLWRpc2FibGUtdG9vbHMsbGlieGluZXJhbWEgbGlieHJhbmRyIGxpYnhkYW1hZ2UgbGlieGZpeGVzIGxpYnhjdXJzb3IgbGlieHRzdCBsaWJ4ZXh0IGxpYnhyZW5kZXIiCisKKyMgLS1lbmFibGUta21zLW9ubHkgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IFJPT1RMRVNTX1gKK0VYVFJBX09FQ09ORiArPSAnJHtAYmFzZV9jb25kaXRpb25hbCggIlJPT1RMRVNTX1giLCAiMSIsICIgLS1lbmFibGUta21zLW9ubHkiLCAiIiwgZCApfScKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcG9sa2l0LTEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIKaW5kZXggOTA4NDZkOC4uMzY3NjZmMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5nc18xLjAuNC5iYgpAQCAtOSw3ICs5LDcgQEAKIFBFID0gIjEiCiBQUiA9ICIke0lOQ19QUn0uMSIKIAotREVQRU5EUyA9ICJta2ZvbnRzY2FsZS1uYXRpdmUgZm9udC11dGlsLW5hdGl2ZSIKK0RFUEVORFMgPSAibWtmb250c2NhbGUtbmF0aXZlIG1rZm9udGRpci1uYXRpdmUgZm9udC11dGlsLW5hdGl2ZSIKIFJERVBFTkRTXyR7UE59ID0gIiIKIAogU1JDX1VSSSArPSAiZmlsZTovL25vY29tcGlsZXIucGF0Y2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIKaW5kZXggMjI4NTEyNC4uMzQ2NDZmZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtdXRpbF8xLjMuMS5iYgpAQCAtMTksNyArMTksNCBAQAogU1JDX1VSSVttZDVzdW1dID0gIjIzNzU2ZGFiODA5ZjllYzUwMTFiYjI3ZmIyYzNjN2Q2IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImFhN2ViZGIwNzE1MTA2ZGQyNTUwODJmMjMxMGRiYWEyY2Q3ZTIyNTk1N2MyYTc3ZDcxOTcyMGM3Y2M5MmI5MjEiCiAKLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZm9udHV0aWxfc3lzcm9vdF9wcmVwcm9jZXNzIgotZm9udHV0aWxfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKLQlzeXNyb290X3N0YWdlX2RpciAke0R9JHtkYXRhZGlyfS9mb250cy8gJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9mb250cy8KLX0KK1NZU1JPT1RfRElSU19CTEFDS0xJU1RfcmVtb3ZlID0gIiR7ZGF0YWRpcn0vZm9udHMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmljZV8xLjAuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiCmluZGV4IDUwNDliN2UuLmIzNjFhZDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiCkBAIC0yMyw1ICsyMyw2IEBACiBTUkNfVVJJW21kNXN1bV0gPSAiYWRkZmIxZTg5N2NhODA3OTUzMTY2OWM3Yzc3MTE3MjYiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGY3MDMyZjJjMWM2NDM1MmI1NDIzZjZiNDhhOGViZGMzMzljYzYzMDY0YWYzNGQ2NmE2YzlhYTc5NzU5ZTIwMiIKIAotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCiBQQUNLQUdFQ09ORklHW2FyYzRdID0gImFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9eWVzLGFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9bm8sbGliYnNkIgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnNtXzEuMi4yLmJiCmluZGV4IDE5MjUxMzYuLmRhNGVkOTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYgpAQCAtMjYsMyArMjYsNiBAQAogCiBTUkNfVVJJW21kNXN1bV0gPSAiNDk5YTc3NzNjNjVhYmE1MTM2MDlmZTY1MTg1M2M1ZjMiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJhY2E4YzlmNWQ5MzQ0NTBhNzA4OTZjNGFkMzhkMDY0NzU1MjEyNTVjYTYzYjcxN2E2NTEwZmRiNmUyODdiZCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi9GaXgtaW5jb25zaXN0ZW50LXVzZS1vZi10YWJzLXZzLi1zcGFjZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL0ZpeC1pbmNvbnNpc3RlbnQtdXNlLW9mLXRhYnMtdnMuLXNwYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTIzODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi9GaXgtaW5jb25zaXN0ZW50LXVzZS1vZi10YWJzLXZzLi1zcGFjZS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIDg3NDBhMjg4Y2E0Njg0MzMxNDEzNDEzNDdhYTExNWI5NTQ0ODkxZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorRGF0ZTogVGh1LCAxOSBNYXkgMjAxNiAxNzozMToxOCArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggaW5jb25zaXN0ZW50IHVzZSBvZiB0YWJzIHZzLiBzcGFjZS4KKworTmVlZGVkIGZvciBhdCBsZWFzdCBweXRob24tMy41LnguCisKK1NpZ25lZC1vZmYtYnk6IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBVbGkgU2NobGFjaHRlciA8cHN5Y2hvbkB6bmMuaW4+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvY19jbGllbnQucHkgfCAxNCArKysrKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY19jbGllbnQucHkgYi9zcmMvY19jbGllbnQucHkKK2luZGV4IDU3ZGUzZmIuLjA0MzMzOGQgMTAwNjQ0CistLS0gYS9zcmMvY19jbGllbnQucHkKKysrKyBiL3NyYy9jX2NsaWVudC5weQorQEAgLTEzNjQsNyArMTM2NCw3IEBAIGRlZiBfY19zZXJpYWxpemUoY29udGV4dCwgc2VsZik6CisgICAgICAgICAgICAgX2MoJyAgICB1bnNpZ25lZCBpbnQgeGNiX2FsaWduX3RvID0gMDsnKQorICAgICAgICAgaWYgc2VsZi5pc19zd2l0Y2g6CisgICAgICAgICAgICAgX2MoJyAgICB1bnNpZ25lZCBpbnQgeGNiX3BhZGRpbmdfb2Zmc2V0ID0gJWQ7JywKKy0JICAgICAgIHNlbGYuZ2V0X2FsaWduX29mZnNldCgpICkKKysgICAgICAgICAgICAgICBzZWxmLmdldF9hbGlnbl9vZmZzZXQoKSApCisgICAgICAgICBwcmVmaXggPSBbKCdfYXV4JywgJy0+Jywgc2VsZildCisgICAgICAgICBhdXhfcHRyID0gJ3hjYl9vdXQnCisgCitAQCAtMTM5MCw3ICsxMzkwLDcgQEAgZGVmIF9jX3NlcmlhbGl6ZShjb250ZXh0LCBzZWxmKToKKyAgICAgICAgIF9jKCcgICAgdW5zaWduZWQgaW50IHhjYl9hbGlnbl90byA9IDA7JykKKyAgICAgICAgIGlmIHNlbGYuaXNfc3dpdGNoOgorICAgICAgICAgICAgIF9jKCcgICAgdW5zaWduZWQgaW50IHhjYl9wYWRkaW5nX29mZnNldCA9ICVkOycsCistCSAgICAgICBzZWxmLmdldF9hbGlnbl9vZmZzZXQoKSApCisrICAgICAgICAgICAgICAgc2VsZi5nZXRfYWxpZ25fb2Zmc2V0KCkgKQorIAorICAgICBlbGlmICdzaXplb2YnID09IGNvbnRleHQ6CisgICAgICAgICBwYXJhbV9uYW1lcyA9IFtwWzJdIGZvciBwIGluIHBhcmFtc10KK0BAIC0xOTMwLDE0ICsxOTMwLDE0IEBAIGRlZiBfY19hY2Nlc3NvcnNfbGlzdChzZWxmLCBmaWVsZCk6CisgICAgICAgICAgICAgICAgICAgICAjIGZyb20gdGhlIHJlcXVlc3Qgc2l6ZSBhbmQgZGl2aWRlIHRoYXQgYnkgdGhlIG1lbWJlciBzaXplCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJygoKFItPmxlbmd0aCAqIDQpIC0gc2l6ZW9mKCcrIHNlbGYuY190eXBlICsgJykpLycrJ3NpemVvZignK2ZpZWxkLnR5cGUubWVtYmVyLmNfd2lyZXR5cGUrJykpJworICAgICAgICAgICAgICAgICBlbHNlOgorLQkJICAgICMgdXNlIHRoZSBhY2Nlc3NvciB0byBnZXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LCB0aGVuCistCQkgICAgIyBjb21wdXRlIHRoZSBsZW5ndGggb2YgaXQgYnkgc3VidHJhY3RpbmcgaXQgZnJvbQorKyAgICAgICAgICAgICAgICAgICAgIyB1c2UgdGhlIGFjY2Vzc29yIHRvIGdldCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QsIHRoZW4KKysgICAgICAgICAgICAgICAgICAgICMgY29tcHV0ZSB0aGUgbGVuZ3RoIG9mIGl0IGJ5IHN1YnRyYWN0aW5nIGl0IGZyb20KKyAgICAgICAgICAgICAgICAgICAgICMgdGhlIGFkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgIyByZXF1ZXN0CistCQkgICAgYWZ0ZXJfZW5kX29mX3JlcXVlc3QgPSAnKCgoY2hhciopUikgKyBSLT5sZW5ndGggKiA0KScKKy0JCSAgICBzdGFydF9vZl9saXN0ID0gJyVzKFIpJyAlIChmaWVsZC5jX2FjY2Vzc29yX25hbWUpCisrICAgICAgICAgICAgICAgICAgICBhZnRlcl9lbmRfb2ZfcmVxdWVzdCA9ICcoKChjaGFyKilSKSArIFItPmxlbmd0aCAqIDQpJworKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfb2ZfbGlzdCA9ICclcyhSKScgJSAoZmllbGQuY19hY2Nlc3Nvcl9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgYnl0ZXNpemVfb2ZfbGlzdCA9ICclcyAtIChjaGFyKikoJXMpJyAlIChhZnRlcl9lbmRfb2ZfcmVxdWVzdCwgc3RhcnRfb2ZfbGlzdCkKKy0JCSAgICByZXR1cm4gJyglcykgLyBzaXplb2YoJXMpJyAlIChieXRlc2l6ZV9vZl9saXN0LCBmaWVsZC50eXBlLm1lbWJlci5jX3dpcmV0eXBlKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcoJXMpIC8gc2l6ZW9mKCVzKScgJSAoYnl0ZXNpemVfb2ZfbGlzdCwgZmllbGQudHlwZS5tZW1iZXIuY193aXJldHlwZSkKKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAibGVuZ3RobGVzcyBsaXN0cyB3aXRoIHZhcnNpemVkIG1lbWJlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEZpZWxkbmFtZSAnJXMnIgorLS0gCisyLjkuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NTZjMTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyBsaWJyYXJ5IgotREVTQ1JJUFRJT04gPSAiVGhlIFggcHJvdG9jb2wgQy1sYW5ndWFnZSBCaW5kaW5nIChYQ0IpIGlzIGEgcmVwbGFjZW1lbnQgXAotZm9yIFhsaWIgZmVhdHVyaW5nIGEgc21hbGwgZm9vdHByaW50LCBsYXRlbmN5IGhpZGluZywgZGlyZWN0IGFjY2VzcyB0byBcCi10aGUgcHJvdG9jb2wsIGltcHJvdmVkIHRocmVhZGluZyBzdXBwb3J0LCBhbmQgZXh0ZW5zaWJpbGl0eS4iCi1IT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9WENCIgotU0VDVElPTiA9ICJ4MTEvbGlicyIKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzYzYjA4MWNiMTBjMjIzNDM1YjAxZTAwZGMwYWJhNyIKLQotU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnhjYi0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3hjYmluY2x1ZGVkaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1jaGVjay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9nY2MtbWlwcy1wcjY4MzAyLW1pcHMtd29ya2Fyb3VuZC5wYXRjaCBcCi0gICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImY5N2E2NWU2MTU4Nzc1ZGU1MThhYzM5MTkzNTYzNGMyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3MjBmZDZjN2QyMDBlNTM3MWFmZmRiM2YwNDljYzhmODhjZmY5YWVkOTQyZmYxYjgyNGQ5NWVlZGJmNjlkMzAiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotREVQRU5EUyA9ICJ4Y2ItcHJvdG8geHByb3RvIGxpYnhhdSBsaWJwdGhyZWFkLXN0dWJzIGxpYnhkbWNwIgotCi1QQUNLQUdFU19EWU5BTUlDID0gIl5saWJ4Y2ItLioiCi0KLUZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJ4Y2Iuc28uKiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi0jIFRoZSBsaWJ4YXUgYW5kIG90aGVycyByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTX2NsYXNzLW5hdGl2ZSA9ICIiCi0KLXB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCAnJHtsaWJkaXJ9JywgJ15saWJ4Y2ItKC4qKVwuc29cLi4qJCcsICdsaWJ4Y2ItJXMnLCAnWENCIGxpYnJhcnkgbW9kdWxlIGZvciAlcycsIGFsbG93X2xpbmtzPVRydWUpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzhiZGVhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMi5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgWCBwcm90b2NvbCBDLWxhbmd1YWdlIEJpbmRpbmcgKFhDQikgaXMgYSByZXBsYWNlbWVudCBcCitmb3IgWGxpYiBmZWF0dXJpbmcgYSBzbWFsbCBmb290cHJpbnQsIGxhdGVuY3kgaGlkaW5nLCBkaXJlY3QgYWNjZXNzIHRvIFwKK3RoZSBwcm90b2NvbCwgaW1wcm92ZWQgdGhyZWFkaW5nIHN1cHBvcnQsIGFuZCBleHRlbnNpYmlsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCitTRUNUSU9OID0gIngxMS9saWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QvbGlieGNiLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8veGNiaW5jbHVkZWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2djYy1taXBzLXByNjgzMDItbWlwcy13b3JrYXJvdW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1pbmNvbnNpc3RlbnQtdXNlLW9mLXRhYnMtdnMuLXNwYWNlLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMjhlNTUyYmQ3OGJjMTA1MGI2YjI2Y2ExZGIwZTViYjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGFkZmIxYjdjNjdlOTliYzljMmNjYjExMGIyZjE3NTY4NjU3NmQyZjc5MmM4YTcxYjljOGIxOTAxNDA1N2I1YiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitERVBFTkRTID0gInhjYi1wcm90byB4cHJvdG8gbGlieGF1IGxpYnB0aHJlYWQtc3R1YnMgbGlieGRtY3AiCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxpYnhjYi0uKiIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYnhjYi5zby4qIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnhhdSBhbmQgb3RoZXJzIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVNfY2xhc3MtbmF0aXZlID0gIiIKKworZXhwb3J0IFBZVEhPTiA9ICJweXRob24zIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgJyR7bGliZGlyfScsICdebGlieGNiLSguKilcLnNvXC4uKiQnLCAnbGlieGNiLSVzJywgJ1hDQiBsaWJyYXJ5IG1vZHVsZSBmb3IgJXMnLCBhbGxvd19saW5rcz1UcnVlKQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIKaW5kZXggYThlNGYyNC4uMTc2MjkwNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiCkBAIC0xMiw3ICsxMiw3IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04OTAyZTY2NDNmN2JjZDc3OTNiMjNkY2Q1ZDgwMzFhNCIKIAogREVQRU5EUyArPSAibGlieHJlbmRlciBsaWJ4Zml4ZXMiCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKIAogUEUgPSAiMSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiCmluZGV4IGVmYThiNjUuLjA2M2U1MzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIKQEAgLTEzLDcgKzEzLDcgQEAKIExJQ0VOU0UgPSAiTUlULXN0eWxlIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc5Y2UyNjY3ODU0MTRiZDFjYmMzYmMyZjRkOWQ3YzgiCiAKLURFUEVORFMgKz0gInhwcm90byB2aXJ0dWFsL2xpYngxMSB4ZXh0cHJvdG8gbGlieGF1IGxpYnhkbWNwIgorREVQRU5EUyArPSAieHByb3RvIHZpcnR1YWwvbGlieDExIHhleHRwcm90byIKIFBST1ZJREVTID0gInhleHQiCiAKIFBFID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0X2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5OTE4Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCi0KLVNVTU1BUlkgPSAiWEV4dDogWCBFeHRlbnNpb24gbGlicmFyeSIKLQotREVTQ1JJUFRJT04gPSAibGliWGV4dCBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byBcCi1zZXZlcmFsIGV4dGVuc2lvbnMgdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgc3VwcG9ydGVkIHByb3RvY29sIGV4dGVuc2lvbnMgXAotYXJlIERPVUJMRS1CVUZGRVIsIERQTVMsIEV4dGVuZGVkLVZpc3VhbC1JbmZvcm1hdGlvbiwgTEJYLCBNSVRfU0hNLCBcCi1NSVRfU1VORFJZLU5PTlNUQU5EQVJELCBNdWx0aS1CdWZmZXJpbmcsIFNFQ1VSSVRZLCBTSEFQRSwgU1lOQywgVE9HLUNVUCwgXAotWEMtQVBQR1JPVVAsIFhDLU1JU0MsIFhURVNULiAgbGliWGV4dCBhbHNvIHByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIFwKLXV0aWxpdHkgZnVuY3Rpb25zIHRvIGFpZCBhdXRob3JzIG9mIGNsaWVudCBBUElzIGZvciBYIHByb3RvY29sIFwKLWV4dGVuc2lvbnMuIgotCi1ERVBFTkRTICs9ICJ4cHJvdG8gdmlydHVhbC9saWJ4MTEgeGV4dHByb3RvIGxpYnhhdSBsaWJ4ZG1jcCIKLVBST1ZJREVTID0gInhleHQiCi1TUkNSRVYgPSAiZDFmM2JjNzdhNDhjOGU0Mjc3MTU3OWUzZmRmMzM3MGIzNWQzMjA5ZCIKLVBFID0gIjEiCi1QViA9ICIxLjAuOTkuMStnaXRyJHtTUkNQVn0iCi0KLVhPUkdfUE4gPSAibGliWGV4dCIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9saWIvJHtYT1JHX1BOfSIKLVMgPSAiJHtXT1JLRElSfS9naXQvIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMjc0MGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVU1NQVJZID0gIlhGaXhlczogWCBGaXhlcyBleHRlbnNpb24gbGlicmFyeSIKLQotREVTQ1JJUFRJT04gPSAiWCBhcHBsaWNhdGlvbnMgaGF2ZSBvZnRlbiBuZWVkZWQgdG8gd29yayBhcm91bmQgdmFyaW91cyBcCi1zaG9ydGNvbWluZ3MgaW4gdGhlIGNvcmUgWCB3aW5kb3cgc3lzdGVtLiAgVGhpcyBleHRlbnNpb24gaXMgZGVzaWduZWQgdG8gXAotcHJvdmlkZSB0aGUgbWluaW1hbCBzZXJ2ZXItc2lkZSBzdXBwb3J0IG5lY2Vzc2FyeSB0byBlbGltaW5hdGUgcHJvYmxlbXMgXAotY2F1c2VkIGJ5IHRoZXNlIHdvcmthcm91bmRzLiIKLQotcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCi0KLUxJQ0VOU0UgPSAiTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2MxY2U0MmMzMzRhNmY1Y2NjYjAyNzc1NTZhMDUzZTAiCi0KLURFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHhwcm90byBmaXhlc3Byb3RvIHhleHRwcm90byIKLQotUEUgPSAiMSIKLQotWE9SR19QTiA9ICJsaWJYZml4ZXMiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotU1JDX1VSSVttZDVzdW1dID0gImI5ODViODVmOGI5Mzg2Yzg1ZGRjZmUxMDczOTA2YjRkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzYmVjMDg1MDg0ZmEzY2FhZWU1MTgwNDkwZGQ4NzFmMWViMjAyMGJhOWU5YjM5YTMwZjkzNjkzZmZjMzQ3NjciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNzhhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMi5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhGaXhlczogWCBGaXhlcyBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWCBhcHBsaWNhdGlvbnMgaGF2ZSBvZnRlbiBuZWVkZWQgdG8gd29yayBhcm91bmQgdmFyaW91cyBcCitzaG9ydGNvbWluZ3MgaW4gdGhlIGNvcmUgWCB3aW5kb3cgc3lzdGVtLiAgVGhpcyBleHRlbnNpb24gaXMgZGVzaWduZWQgdG8gXAorcHJvdmlkZSB0aGUgbWluaW1hbCBzZXJ2ZXItc2lkZSBzdXBwb3J0IG5lY2Vzc2FyeSB0byBlbGltaW5hdGUgcHJvYmxlbXMgXAorY2F1c2VkIGJ5IHRoZXNlIHdvcmthcm91bmRzLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2MxY2U0MmMzMzRhNmY1Y2NjYjAyNzc1NTZhMDUzZTAiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHhwcm90byBmaXhlc3Byb3RvIHhleHRwcm90byIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZml4ZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjU0NGQ3M2RmOTRlNjM4YmE3YjY0MTQ3YmU0MTZlNTc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjliZDIwZWRmZWMwODRhMWJlZDQ4MWQ0OGRkNDgxNWRlZTg4MTM5ZmZmYWQwOTE0MThjZGRhMDgxMTI5YTlhZWEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zm9udF8xLjUuMS5iYgppbmRleCAxYjZlMzNjLi5lMDFmMzMxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIKQEAgLTIwLDMgKzIwLDYgQEAKIAogU1JDX1VSSVttZDVzdW1dID0gIjk2Zjc2YmE5NGI0YzkwOTIzMGJhYzFlMmRjZDU1MWM0IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3MDg5ODUyN2M3M2Y5NzU4ZjU1MWJiYWI2MTJhZjYxMWI4YTA5NjIyMDI4Mjk1NjhkOTRmM2VkZjRkODYwOTgiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGluZXJhbWFfMS4xLjMuYmIKaW5kZXggMDI3YzgwNC4uYmIwM2Y0NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiCkBAIC0xOCwzICsxOCw1IEBACiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI5MzM2ZGM0NmFlM2JmNWY4MWMyNDdmNzEzMTQ2MWVmZCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI3YTQ1Njk5ZjE3NzMwOTVhM2Y4MjFlNDkxY2JkNWUxMGM4ODdjNWE1ZmNlNWQ4ZDNmY2VkMTVjMmZmNzY5OGUyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTIyYTgxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotU1VNTUFSWSA9ICJHZW5lcmljIFhLQiBrZXltYXAgbGlicmFyeSIKLURFU0NSSVBUSU9OID0gImxpYnhrYmNvbW1vbiBpcyBhIGtleW1hcCBjb21waWxlciBhbmQgc3VwcG9ydCBsaWJyYXJ5IHdoaWNoIFwKLXByb2Nlc3NlcyBhIHJlZHVjZWQgc3Vic2V0IG9mIGtleW1hcHMgYXMgZGVmaW5lZCBieSB0aGUgWEtCIHNwZWNpZmljYXRpb24uIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54a2Jjb21tb24ub3JnIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDk0NTdiMTU2ZTMxNTU5NzJhYmViY2FhYWEwY2I0MzQiCi1MSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKLQotREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyBmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3hrYmNvbW1vbi5vcmcvZG93bmxvYWQvJHtCUE59LSR7UFZ9LnRhci54eiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjJlMWZhZWFmY2M2MDljMzBhZjNhNTYxYTkxZTg0MTU4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwYmQ3ODI0NzQyYjlhNmY1MmE2Y2Y4MGUyY2FkZDZmNTM0OWNmNjAwYTM1OGQwODI2MDc3MjYxNWI4OWQxOWMiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8veGtiY29tbW9uLm9yZy8iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3MiCi0KLVBBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsbGlieGNiIHhrZXlib2FyZC1jb25maWcsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC42LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzA4MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC42LjEuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJHZW5lcmljIFhLQiBrZXltYXAgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gImxpYnhrYmNvbW1vbiBpcyBhIGtleW1hcCBjb21waWxlciBhbmQgc3VwcG9ydCBsaWJyYXJ5IHdoaWNoIFwKK3Byb2Nlc3NlcyBhIHJlZHVjZWQgc3Vic2V0IG9mIGtleW1hcHMgYXMgZGVmaW5lZCBieSB0aGUgWEtCIHNwZWNpZmljYXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54a2Jjb21tb24ub3JnIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDk0NTdiMTU2ZTMxNTU5NzJhYmViY2FhYWEwY2I0MzQiCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKKworREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyBmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hrYmNvbW1vbi5vcmcvZG93bmxvYWQvJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjY3YThmMzIyYjVmYTMyMzUyMjcyZTgxMWJiOTBkZDczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViMDg4N2IwODBiNDIxNjkwOTZhNjExMDY2NjFmOGQzNWJhZTc4M2Y4YjZjNThmOTdlYmNkM2FmODNlYTg3NjAiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8veGtiY29tbW9uLm9yZy8iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3MiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsbGlieGNiIHhrZXlib2FyZC1jb25maWcsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYgppbmRleCAwMDNiYWVjLi5kNTkzNWZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYgpAQCAtMzAsMyArMzAsNiBAQAogCiBTUkNfVVJJW21kNXN1bV0gPSAiNDFkOTJhYjYyN2RmYTA2NTY4MDc2MDQzZjNlMDg5ZTQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzU2ZWRjN2MzODMyNTRlZWY4YjRlMWI3MzNjM2JmMWRjMDYxYjUyM2M5Zjk4MzNhYzcwNTgzNzhiODM0OWQwYiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKaW5kZXggOWZkZTA0MC4uNDRjYjJlMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVuZGVyXzAuOS45LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYgpAQCAtMTEsNyArMTEsNyBAQAogTElDRU5TRSA9ICJNSVQtc3R5bGUiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kOGJjNzE5ODZkM2I5YjM2MzlmNmRmZDZmYWM4ZjE5NiIKIAotREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgcmVuZGVycHJvdG8geHByb3RvIHhkbWNwIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgcmVuZGVycHJvdG8geHByb3RvIgogCiBQRSA9ICIxIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaAppbmRleCBjZTZjNzU2Li5mZmMyYzE1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTMsNyArMyw3IEBACiBUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIHdpdGggeDMyIHRvb2xjaGFpbi4KIAogUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+Ci1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzEKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMQogCiAKIC0tLSBsaWJYdC0xLjEuMS9pbmNsdWRlL1gxMS9YdG9zLmgueDMyCTIwMTEtMDItMDggMDc6NTY6NDAuMDAwMDAwMDAwIC0wODAwCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLXRlc3QtdXRpbHMtQ2hlY2stZm9yLUZFX0lOVkFMSUQtZGVmaW5pdGlvbi1iZWZvcmUtdXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLXRlc3QtdXRpbHMtQ2hlY2stZm9yLUZFX0lOVkFMSUQtZGVmaW5pdGlvbi1iZWZvcmUtdXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyYzFkYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtdGVzdC11dGlscy1DaGVjay1mb3ItRkVfSU5WQUxJRC1kZWZpbml0aW9uLWJlZm9yZS11cy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDBjY2Q5MDZiOTA0ZDIxNTM2ZDVhYjQxYzYxOTY3NjBlM2U1ZDcyY2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxNyBNYXkgMjAxNiAxNzozMDowMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0L3V0aWxzOiBDaGVjayBmb3IgRkVfSU5WQUxJRCBkZWZpbml0aW9uIGJlZm9yZSB1c2UKKworU29tZSBhcmNoaXRlY3R1cmVzIGUuZy4gbmlvczIgZG8gbm90IHN1cHBvcnQgYWxsIGV4Y2VwdGlvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIHRlc3QvdXRpbHMuYyB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90ZXN0L3V0aWxzLmMgYi90ZXN0L3V0aWxzLmMKK2luZGV4IGY4ZTQyYTUuLmZlMzJiMWUgMTAwNjQ0CistLS0gYS90ZXN0L3V0aWxzLmMKKysrKyBiL3Rlc3QvdXRpbHMuYworQEAgLTk3OCw5ICs5NzgsMTEgQEAgZW5hYmxlX2ludmFsaWRfZXhjZXB0aW9ucyAodm9pZCkKKyB7CisgI2lmZGVmIEhBVkVfRkVOVl9ICisgI2lmZGVmIEhBVkVfRkVFTkFCTEVFWENFUFQKKysjaWZkZWYgRkVfSU5WQUxJRAorICAgICBmZWVuYWJsZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisgI2VuZGlmCisgI2VuZGlmCisrI2VuZGlmCisgfQorIAorIHZvaWQgKgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLXYzLXRlc3QtYWRkLWEtY2hlY2stZm9yLUZFX0RJVkJZWkVSTy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtdjMtdGVzdC1hZGQtYS1jaGVjay1mb3ItRkVfRElWQllaRVJPLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjdjMWU2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtdjMtdGVzdC1hZGQtYS1jaGVjay1mb3ItRkVfRElWQllaRVJPLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotRnJvbSBmY2Q1ZWI5YmQwZTg2NzRhNmY0OTg3YThmY2U3ZGMxYmE4ZjkzMjBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+Ci1EYXRlOiBUaHUsIDE3IFNlcCAyMDE1IDAzOjA4OjM2ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIFt2M10gdGVzdDogYWRkIGEgY2hlY2sgZm9yIEZFX0RJVkJZWkVSTwotCi1Tb21lIGFyY2hpdGVjdHVyZXMsIHN1Y2ggYXMgTWljcm9ibGF6ZSBhbmQgTmlvczIsIGN1cnJlbnRseSBkbyBub3QKLWltcGxlbWVudCBGRV9ESVZCWVpFUk8sIGV2ZW4gdGhvdWdoIHRoZXkgaGF2ZSA8ZmVudi5oPiBhbmQKLWZlZW5hYmxlZXhjZXB0KCkuIFRoaXMgY29tbWl0IGFkZHMgYSBjb25maWd1cmUuYWMgY2hlY2sgdG8gdmVyaWZ5Ci13aGV0aGVyIEZFX0RJVkJZWkVSTyBpcyBkZWZpbmVkIG9yIG5vdCwgYW5kIGlmIG5vdCwgZGlzYWJsZXMgdGhlCi1wcm9ibGVtYXRpYyBjb2RlIGluIHRlc3QvdXRpbHMuYy4KLQotU2lnbmVkLW9mZi1ieTogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2NvbW1pdCA0Mjk3ZTkwNThdCi0tLS0KLUNoYW5nZXMgdjEgLT4gdjI6Ci0KLSAqIFVzZSB0aGUgYWNfY3ZfaGF2ZV9kZWNsX0ZFX0RJVkJZWkVSTyB2YXJpYWJsZSwgd2hpY2ggaXMKLSAgIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IEFDX0NIRUNLX0RFQ0wsIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdAotICAgSEFWRV9GRURJVkJZWkVSTyBzaG91bGQgYmUgZGVmaW5lZC4KLQotQ2hhbmdlcyB2MiAtPiB2MzoKLQotICogVXNlIGFjdGlvbi1pZi15ZXMgb2YgQUNfQ0hFQ0tfREVDTCBhcyBzdWdnZXN0ZWQgaW4KLSAgIGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvcGl4bWFuLzIwMTQtRmVicnVhcnkvMDAzMTc2Lmh0bWwKLS0tLQotIGNvbmZpZ3VyZS5hYyB8IDUgKysrKysKLSB0ZXN0L3V0aWxzLmMgfCAyICsrCi0gMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggZjkzY2MzMC4uNDI0YmZkMyAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtODkxLDYgKzg5MSwxMSBAQCBpZiB0ZXN0IHgkaGF2ZV9mZWVuYWJsZWV4Y2VwdCA9IHh5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9GRUVOQUJMRUVYQ0VQVCwgMSwgW1doZXRoZXIgd2UgaGF2ZSBmZWVuYWJsZWV4Y2VwdCgpXSkKLSBmaQotIAotK0FDX0NIRUNLX0RFQ0woW0ZFX0RJVkJZWkVST10sCi0rCVtBQ19ERUZJTkUoSEFWRV9GRURJVkJZWkVSTywgMSwgW1doZXRoZXIgd2UgaGF2ZSBGRV9ESVZCWVpFUk9dKV0sCi0rCVtdLAotKwlbWyNpbmNsdWRlIDxmZW52Lmg+XV0pCi0rCi0gQUNfQ0hFQ0tfRlVOQyhnZXR0aW1lb2ZkYXksIGhhdmVfZ2V0dGltZW9mZGF5PXllcywgaGF2ZV9nZXR0aW1lb2ZkYXk9bm8pCi0gQUNfQ0hFQ0tfSEVBREVSKHN5cy90aW1lLmgsIGhhdmVfc3lzX3RpbWVfaD15ZXMsIGhhdmVfc3lzX3RpbWVfaD1ubykKLSBpZiB0ZXN0IHgkaGF2ZV9nZXR0aW1lb2ZkYXkgPSB4eWVzICYmIHRlc3QgeCRoYXZlX3N5c190aW1lX2ggPSB4eWVzOyB0aGVuCi1kaWZmIC0tZ2l0IGEvdGVzdC91dGlscy5jIGIvdGVzdC91dGlscy5jCi1pbmRleCAyMjJkNGQ1Li44NjU3OTY2IDEwMDY0NAotLS0tIGEvdGVzdC91dGlscy5jCi0rKysgYi90ZXN0L3V0aWxzLmMKLUBAIC05NjYsOSArOTY2LDExIEBAIGVuYWJsZV9kaXZieXplcm9fZXhjZXB0aW9ucyAodm9pZCkKLSB7Ci0gI2lmZGVmIEhBVkVfRkVOVl9ICi0gI2lmZGVmIEhBVkVfRkVFTkFCTEVFWENFUFQKLSsjaWZkZWYgSEFWRV9GRURJVkJZWkVSTwotICAgICBmZWVuYWJsZWV4Y2VwdCAoRkVfRElWQllaRVJPKTsKLSsjZW5kaWYKLSAjZW5kaWYKLSAjZW5kaWYKLSB9Ci0gCi0gdm9pZAotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YTVmZDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotUmV2ZXJ0IGEgY29tbWl0IGluIHBpeG1hbiAwLjMyLjYgd2hpY2ggYnJlYWtzIGNvbXBsaWF0aW9uIG9uIE1JUFMgbWFjaGluZXMgd2l0aAotZXJyb3JzIHN1Y2ggYXM6Ci0KLXBpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5TOjQyNjc6Ci1FcnJvcjogaW52YWxpZCBvcGVyYW5kcyBgbWZsbyAkMTQsJGFjMycKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi0tLS0gYi9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLmgKLSsrKyBhL3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uaAotQEAgLTcyLDEwICs3Miw3IEBACi0gI2RlZmluZSBMRUFGX01JUFMzMlIyKHN5bWJvbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIC5nbG9ibCAgc3ltYm9sOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIC5hbGlnbiAgMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tI2lmZGVmIF9fRUxGX18KLS0gICAgICAgICAgICAgICAgLmhpZGRlbiBzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgLnR5cGUgICBzeW1ib2wsIEBmdW5jdGlvbjsgICAgICAgICAgICAgIFwKLS0jZW5kaWYKLSAgICAgICAgICAgICAgICAgLmVudCAgICBzeW1ib2wsIDA7ICAgICAgICAgICAgICAgICAgICAgIFwKLSBzeW1ib2w6ICAgICAgICAgLmZyYW1lICBzcCwgMCwgcmE7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgLnNldCAgICBwdXNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUzY2UzNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1TVU1NQVJZID0gIlBpeG1hbjogUGl4ZWwgTWFuaXB1bGF0aW9uIGxpYnJhcnkiCi0KLURFU0NSSVBUSU9OID0gIlBpeG1hbiBwcm92aWRlcyBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBwaXhlbCByZWdpb25zIFwKLS0tIGEgc2V0IG9mIFktWCBiYW5kZWQgcmVjdGFuZ2xlcywgaW1hZ2UgY29tcG9zaXRpbmcgdXNpbmcgdGhlIFwKLVBvcnRlci9EdWZmIG1vZGVsIGFuZCBpbXBsaWNpdCBtYXNrIGdlbmVyYXRpb24gZm9yIGdlb21ldHJpYyBwcmltaXRpdmVzIFwKLWluY2x1ZGluZyB0cmFwZXpvaWRzLCB0cmlhbmdsZXMsIGFuZCByZWN0YW5nbGVzLiIKLQotcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCi0KLSMgc2VlIGh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9yZWxlYXNlcy8gLSBvbmx5IGV2ZW4gbWlub3IgdmVyc2lvbnMgYXJlIHN0YWJsZQotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAicGl4bWFuLSg/UDxwdmVyPlxkK1wuKFxkKlswMjQ2OF0pKyhcLlxkKykrKSIKLQotTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUgJiBQRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDk2Yzc2OWFlMGNiYjVmY2I5NGVjNDY4YmUxMWIzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BpeG1hbi9waXhtYW4tbWF0cml4LmM7ZW5kbGluZT0yNTttZDU9YmE2ZTg3NjliZmFhZWUyYzQxNjk4NzU1YWYwNGM0YmUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1hcm0tbmVvbi1hc20uaDtlbmRsaW5lPTI0O21kNT05YTljYzFlNTFhYmJmMWRhNThmNGQ5NTI4ZWM5ZDQ5YiBcCi0gICAgICAgICAgICAgICAgICAgIgotREVQRU5EUyArPSAiemxpYiBsaWJwbmciCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLVBFID0gIjEiCi0KLUlXTU1YVCA9ICItLWRpc2FibGUtYXJtLWl3bW14dCIKLUxPT05HU09OX01NSSA9ICItLWRpc2FibGUtbG9vbmdzb24tbW1pIgotIyBJZiB0YXJnZXQgc3VwcG9ydHMgbmVvbiB0aGVuIGRpc2FibGUgdGhlICdzaW1kJyAoaWUgVkZQdjIpIGZhbGxiYWNrLCBvdGhlcndpc2UgZGlzYWJsZSBuZW9uLgotTkVPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIi0tZGlzYWJsZS1hcm0tc2ltZCIsICItLWRpc2FibGUtYXJtLW5lb24iICxkKX0iCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3RrICR7SVdNTVhUfSAke0xPT05HU09OX01NSX0gJHtORU9OfSIKLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWd0ayIKLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS1kaXNhYmxlLWd0ayIKLQotU1JDX1VSSSArPSAiXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoIFwKLQkgICAgZmlsZTovL2FzbV9pbmNsdWRlLnBhdGNoIFwKLQkgICAgZmlsZTovLzAwMDEtdjMtdGVzdC1hZGQtYS1jaGVjay1mb3ItRkVfRElWQllaRVJPLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjE4ZDZiNjJhYmRiN2JjMGY4ZTZiMGRkZjQ4OTg2YjJjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNjNkYmIzNTIzZmM0ZDg2ZWQ0MTg2Njc3ODE1OTE4YTk0MWI3Y2IzOTBkNWVlYzRmNTVjYjVkNjZiNTlmYjEiCi0KLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjM0LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjM0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjYTYyMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzQuMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIlBpeG1hbjogUGl4ZWwgTWFuaXB1bGF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlBpeG1hbiBwcm92aWRlcyBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBwaXhlbCByZWdpb25zIFwKKy0tIGEgc2V0IG9mIFktWCBiYW5kZWQgcmVjdGFuZ2xlcywgaW1hZ2UgY29tcG9zaXRpbmcgdXNpbmcgdGhlIFwKK1BvcnRlci9EdWZmIG1vZGVsIGFuZCBpbXBsaWNpdCBtYXNrIGdlbmVyYXRpb24gZm9yIGdlb21ldHJpYyBwcmltaXRpdmVzIFwKK2luY2x1ZGluZyB0cmFwZXpvaWRzLCB0cmlhbmdsZXMsIGFuZCByZWN0YW5nbGVzLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKKyMgc2VlIGh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9yZWxlYXNlcy8gLSBvbmx5IGV2ZW4gbWlub3IgdmVyc2lvbnMgYXJlIHN0YWJsZQorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAicGl4bWFuLSg/UDxwdmVyPlxkK1wuKFxkKlswMjQ2OF0pKyhcLlxkKykrKSIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDk2Yzc2OWFlMGNiYjVmY2I5NGVjNDY4YmUxMWIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BpeG1hbi9waXhtYW4tbWF0cml4LmM7ZW5kbGluZT0yNTttZDU9YmE2ZTg3NjliZmFhZWUyYzQxNjk4NzU1YWYwNGM0YmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1hcm0tbmVvbi1hc20uaDtlbmRsaW5lPTI0O21kNT05YTljYzFlNTFhYmJmMWRhNThmNGQ5NTI4ZWM5ZDQ5YiBcCisgICAgICAgICAgICAgICAgICAgIgorREVQRU5EUyArPSAiemxpYiBsaWJwbmciCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BFID0gIjEiCisKK0lXTU1YVCA9ICItLWRpc2FibGUtYXJtLWl3bW14dCIKK0xPT05HU09OX01NSSA9ICItLWRpc2FibGUtbG9vbmdzb24tbW1pIgorIyBJZiB0YXJnZXQgc3VwcG9ydHMgbmVvbiB0aGVuIGRpc2FibGUgdGhlICdzaW1kJyAoaWUgVkZQdjIpIGZhbGxiYWNrLCBvdGhlcndpc2UgZGlzYWJsZSBuZW9uLgorTkVPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIi0tZGlzYWJsZS1hcm0tc2ltZCIsICItLWRpc2FibGUtYXJtLW5lb24iICxkKX0iCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3RrICR7SVdNTVhUfSAke0xPT05HU09OX01NSX0gJHtORU9OfSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWd0ayIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS1kaXNhYmxlLWd0ayIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaCBcCisJICAgIGZpbGU6Ly9hc21faW5jbHVkZS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAxLXRlc3QtdXRpbHMtQ2hlY2stZm9yLUZFX0lOVkFMSUQtZGVmaW5pdGlvbi1iZWZvcmUtdXMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDAyYTRmY2I2NDRkZGZjYjRiMGU0MTkxNTc2YTBkNTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzliYTM0MzhmM2QxN2M0NjRiMGNiOGJlMDA2ZGFjYmNhMGFiNWFlZTk3ZWJkZTY5ZmVjN2VjZGJmODU3OTRhMCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTFmNGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1TVU1NQVJZID0gIktleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggV2luZG93IgotCi1ERVNDUklQVElPTiA9ICJUaGUgbm9uLWFyY2gga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBcCi1XaW5kb3cuICBUaGUgZ29hbCBpcyB0byBwcm92aWRlIHRoZSBjb25zaXN0ZW50LCB3ZWxsLXN0cnVjdHVyZWQsIFwKLWZyZXF1ZW50bHkgcmVsZWFzZWQgb3BlbiBzb3VyY2Ugb2YgWCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGEgZm9yIFggXAotV2luZG93IFN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuICBUaGUgcHJvamVjdCBpcyB0YXJnZXRlZCB0byBYS0ItYmFzZWQgXAotc3lzdGVtcy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9YS2V5Ym9hcmRDb25maWciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhrZXlib2FyZC1jb25maWciCi0KLUxJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGU3ZjIxY2E3ZGI5NzVjNjM0NjdkMmU3NjI0YTEyZjkiCi0KLVNSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9kYXRhL3hrZXlib2FyZC1jb25maWcvJHtCUE59LSR7UFZ9LnRhci5iejIiCi1TUkNfVVJJW21kNXN1bV0gPSAiYmY2YWEzMTE5NTU4NGNmY2UwMWIyMTk0YzNlNWVhMjYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWU4YTFmMjEyYzk2YjdmNzFjYTBiMDVkYTM2MWNhYzE4MTZkMjdiYWFlMWQ4ZTAzZTdiNTMwNDliNThkMWQ1OCIKLQotU0VDVElPTiA9ICJ4MTEvbGlicyIKLURFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIHZpcnR1YWwvZ2V0dGV4dCB1dGlsLW1hY3JvcyBsaWJ4c2x0LW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC14a2ItcnVsZXMtc3ltbGluaz14b3JnIC0tZGlzYWJsZS1ydW50aW1lLWRlcHMiCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94a2IiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQKLSAgICBjZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL3J1bGVzICYmIGxuIC1zZiBiYXNlIHhvcmcKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmY2JkOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE4LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiS2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBXaW5kb3ciCisKK0RFU0NSSVBUSU9OID0gIlRoZSBub24tYXJjaCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGFiYXNlIGZvciBYIFwKK1dpbmRvdy4gIFRoZSBnb2FsIGlzIHRvIHByb3ZpZGUgdGhlIGNvbnNpc3RlbnQsIHdlbGwtc3RydWN0dXJlZCwgXAorZnJlcXVlbnRseSByZWxlYXNlZCBvcGVuIHNvdXJjZSBvZiBYIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgWCBcCitXaW5kb3cgU3lzdGVtIGltcGxlbWVudGF0aW9ucy4gIFRoZSBwcm9qZWN0IGlzIHRhcmdldGVkIHRvIFhLQi1iYXNlZCBcCitzeXN0ZW1zLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL1hLZXlib2FyZENvbmZpZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eGtleWJvYXJkLWNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZTdmMjFjYTdkYjk3NWM2MzQ2N2QyZTc2MjRhMTJmOSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2RhdGEveGtleWJvYXJkLWNvbmZpZy8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMjhjZjQ1NjE2YmZlYzI3Njg3OTM2MGJjMzZjNmIyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNDFkOTE3ZDZjOGE1OWZlYjdjY2JkYTUxYzQwYTZhZGE4MjRmZGQxZTk2ODRiNTJkZDQ4Yzk1MzA2MTdkZGQwIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgdmlydHVhbC9nZXR0ZXh0IHV0aWwtbWFjcm9zIGxpYnhzbHQtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXhrYi1ydWxlcy1zeW1saW5rPXhvcmcgLS1kaXNhYmxlLXJ1bnRpbWUtZGVwcyIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL3hrYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vWDExL3hrYi9jb21waWxlZAorICAgIGNkICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvcnVsZXMgJiYgbG4gLXNmIGJhc2UgeG9yZworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3NGY0OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXJlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCi0KLVNVTU1BUlkgPSAiRFJJMjogRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAyIGhlYWRlcnMiCi0KLURFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERpcmVjdCBcCi1SZW5kZXJpbmcgSWZucmFzdHJ1Y3R1cmUgMi4gIERJUiBpcyByZXF1aXJlZCBmb3IgbWF5IGhhcmR3YXJlIFwKLWFjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKLQotU1JDUkVWID0gIjY2YzU2YWIxMGQ5MTdlM2Y0N2Y5MzE3OGQ3ZWFjNjQzMDk3MGQzYzQiCi1QViA9ICIxLjk5LjMrZ2l0JHtTUkNQVn0iCi1QUiA9ICJyMiIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9kcmkycHJvdG8iCi0KLUxJQ19GSUxFU19DSEtTVU09ImZpbGU6Ly9DT1BZSU5HO21kNT0yZTM5NmZhOTE4MzRmODc4NjAzMmNhZDJkYTU2MzhmMyIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fMi4zLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4ZTBjMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXJlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCi0KLVNVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGhlYWRlcnMiCi0KLURFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggSW5wdXQgXAotZXh0ZW5zaW9uLiAgVGhlIGV4dGVuc2lvbiBzdXBwb3J0cyBpbnB1dCBkZXZpY2VzIG90aGVyIHRoZW4gdGhlIGNvcmUgWCBcCi1rZXlib2FyZCBhbmQgcG9pbnRlci4iCi0KLUxJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTU2MmNjMGY2NTg3Yjk2MWYwMzIyMTFkODE2MGYzMWUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEkycHJvdG8uaDtlbmRsaW5lPTQ4O21kNT0xYWMxNTgxZTYxMTg4ZGEyODg1Y2MxNGZmNDliMjBiZSIKLQotUEUgPSAiMSIKLQotaW5oZXJpdCBnZXR0ZXh0Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotU1JDX1VSSVttZDVzdW1dID0gIjZjYWViZWFkNGI3NzliYTAzMTcyN2Y2NmE3ZmZhMzU4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNDdlZTYyMDUzYTZhY2VmM2E4M2Y1MDYzMTI0OTRiZTE0NjEwNjhkMGI5MjY5ZDgxODgzOTcwM2I5NWMxZDEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWU2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMi5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIElucHV0IFwKK2V4dGVuc2lvbi4gIFRoZSBleHRlbnNpb24gc3VwcG9ydHMgaW5wdXQgZGV2aWNlcyBvdGhlciB0aGVuIHRoZSBjb3JlIFggXAora2V5Ym9hcmQgYW5kIHBvaW50ZXIuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU1NjJjYzBmNjU4N2I5NjFmMDMyMjExZDgxNjBmMzFlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1hJMnByb3RvLmg7ZW5kbGluZT00ODttZDU9MWFjMTU4MWU2MTE4OGRhMjg4NWNjMTRmZjQ5YjIwYmUiCisKK1BFID0gIjEiCisKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMjkwYTQ2M2FmN2RlZjQ4M2U2ZTE5MGRlNDYwZjMxYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OTNhNmFmNTU3MzMyNjIwNThhMjdiMzhlZWIxZWRjNzMzNjY5ZjAxZDQwNGU4NTgxYjE2N2YwM2MwM2VmMzFkIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1hc2NpaWRvYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyMGYzYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b19naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1yZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYwotCi1TVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBoZWFkZXJzIgotCi1ERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIElucHV0IFwKLWV4dGVuc2lvbi4gIFRoZSBleHRlbnNpb24gc3VwcG9ydHMgaW5wdXQgZGV2aWNlcyBvdGhlciB0aGVuIHRoZSBjb3JlIFggXAota2V5Ym9hcmQgYW5kIHBvaW50ZXIuIgotCi1QUiA9ICJyMSIKLVBFID0gIjEiCi1TUkNSRVYgPSAiNzIwMzAzNjUyMmJhOWQ0YjIyNGQyODJkNmFmYzJkMGI5NDc3MTFlZSIKLVBWID0gIjEuOS45OS4xMitnaXQke1NSQ1BWfSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9pbnB1dHByb3RvIgotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBnZXR0ZXh0Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYWE3NTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1yZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYwotCi1TVU1NQVJZID0gIlh2OiBYIFZpZGVvIGV4dGVuc2lvbiBoZWFkZXJzIgotCi1ERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFZpZGVvIFwKLWV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsb3dzIGZvciBhY2NlcmxhdGVkIGRyYXdpbmcgb2YgdmlkZW9zLiIKLQotTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jZTM0NzJhMTE5YTg2NDA4NWZhNDE1NWNiMDk3OWE3YiIKLQotUEUgPSAiMSIKLQotU1JDX1VSSVttZDVzdW1dID0gImU2NTg2NDE1OTUzMjdkMzk5MGVhYjcwZmRiNTVjYThiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkYWUxNjhjYjgyMGZjZDMyZjU2NDg3OWFmYjNmMjRkMjdjMTc2MzAwZDlhZjY2ODE5YTE4MjY1NTM5YmQ0YjYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOTdhMjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlh2OiBYIFZpZGVvIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFZpZGVvIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsb3dzIGZvciBhY2NlcmxhdGVkIGRyYXdpbmcgb2YgdmlkZW9zLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jZTM0NzJhMTE5YTg2NDA4NWZhNDE1NWNiMDk3OWE3YiIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImZlODZkZThlYTNlYjUzYjVhOGY1Mjk1NmM1Y2QzMTc0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3ODAzODg5ZmQwOGU2ZmNhZjdiNjhjYzM5NGZiMDM4YjIzMjVkMWYzMTVlNTcxYTY5NTQ1NzdlMDdjY2E3MDIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzAzZDYzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyBoZWFkZXJzIgotREVTQ1JJUFRJT04gPSAiRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIFggcHJvdG9jb2wgQy1sYW5ndWFnZSBCaW5kaW5nIFwKLShYQ0IpLiAgWENCIGlzIGEgcmVwbGFjZW1lbnQgZm9yIFhsaWIgZmVhdHVyaW5nIGEgc21hbGwgZm9vdHByaW50LCBcCi1sYXRlbmN5IGhpZGluZywgZGlyZWN0IGFjY2VzcyB0byB0aGUgcHJvdG9jb2wsIGltcHJvdmVkIHRocmVhZGluZyBcCi1zdXBwb3J0LCBhbmQgZXh0ZW5zaWJpbGl0eS4iCi1IT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9WENCIgotCi1TRUNUSU9OID0gIngxMS9saWJzIgotTElDRU5TRSA9ICJNSVQtWCIKLQotU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L3hjYi1wcm90by0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL25vLXB5dGhvbi1uYXRpdmUucGF0Y2giCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFUyArPSAicHl0aG9uLXhjYmdlbiIKLQotRklMRVNfJHtQTn0gPSAiIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3hjYi8qLnhtbCAke2RhdGFkaXJ9L3hjYi8qLnhzZCIKLUZJTEVTX3B5dGhvbi14Y2JnZW4gPSAiJHtsaWJkaXJ9L3hjYi1wcm90byIKLQotUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKLVJSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8vMDAwMS1NYWtlLXdoaXRlc3BhY2UtdXNlLWNvbnNpc3RlbnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLzAwMDEtTWFrZS13aGl0ZXNwYWNlLXVzZS1jb25zaXN0ZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZWM2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLzAwMDEtTWFrZS13aGl0ZXNwYWNlLXVzZS1jb25zaXN0ZW50LnBhdGNoCkBAIC0wLDAgKzEsMjE1IEBACitGcm9tIGVhN2EzYWM2YzY1ODE2NDY5MGUwZmViYjU1ZjQ0NjdjYjllMGJjYWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorRGF0ZTogVGh1LCAxOSBNYXkgMjAxNiAxNzozMDowNCArMDIwMAorU3ViamVjdDogW1BBVENIIDEvMl0gTWFrZSB3aGl0ZXNwYWNlIHVzZSBjb25zaXN0ZW50LgorCitBdCBsZWFzdCBweXRob24tMy41LnggY29tcGxhaW5zIGFib3V0IHRoaXMgZm9yY2VmdWxseS4KKworU2lnbmVkLW9mZi1ieTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK1NpZ25lZC1vZmYtYnk6IFVsaSBTY2hsYWNodGVyIDxwc3ljaG9uQHpuYy5pbj4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHhjYmdlbi9hbGlnbi5weSB8IDk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3hjYmdlbi9hbGlnbi5weSBiL3hjYmdlbi9hbGlnbi5weQoraW5kZXggNWUzMTgzOC4uZDRjMTJlZSAxMDA2NDQKKy0tLSBhL3hjYmdlbi9hbGlnbi5weQorKysrIGIveGNiZ2VuL2FsaWduLnB5CitAQCAtMTYsMTIgKzE2LDEyIEBAIGNsYXNzIEFsaWdubWVudChvYmplY3QpOgorICAgICAgICAgcmV0dXJuIHNlbGYuYWxpZ24gPT0gb3RoZXIuYWxpZ24gYW5kIHNlbGYub2Zmc2V0ID09IG90aGVyLm9mZnNldAorIAorICAgICBkZWYgX19zdHJfXyhzZWxmKToKKy0JcmV0dXJuICIoYWxpZ249JWQsIG9mZnNldD0lZCkiICUgKHNlbGYuYWxpZ24sIHNlbGYub2Zmc2V0KQorKyAgICAgICAgcmV0dXJuICIoYWxpZ249JWQsIG9mZnNldD0lZCkiICUgKHNlbGYuYWxpZ24sIHNlbGYub2Zmc2V0KQorIAorICAgICBAc3RhdGljbWV0aG9kCisgICAgIGRlZiBmb3JfcHJpbWl0aXZlX3R5cGUoc2l6ZSk6CistCSMgY29tcHV0ZSB0aGUgcmVxdWlyZWQgc3RhcnRfYWxpZ25tZW50IGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSB0eXBlCistCWlmIHNpemUgJSA4ID09IDA6CisrICAgICAgICAjIGNvbXB1dGUgdGhlIHJlcXVpcmVkIHN0YXJ0X2FsaWdubWVudCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgdHlwZQorKyAgICAgICAgaWYgc2l6ZSAlIDggPT0gMDoKKyAgICAgICAgICAgICAjIGRvIDgtYnl0ZSBwcmltaXRpdmVzIHJlcXVpcmUgOC1ieXRlIGFsaWdubWVudCBpbiBYMTE/CisgICAgICAgICAgICAgcmV0dXJuIEFsaWdubWVudCg4LDApCisgICAgICAgICBlbGlmIHNpemUgJSA0ID09IDA6CitAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBBbGlnbm1lbnQob2JqZWN0KToKKyAKKyAKKyAgICAgZGVmIGFsaWduX2FmdGVyX2ZpeGVkX3NpemUoc2VsZiwgc2l6ZSk6CistCW5ld19vZmZzZXQgPSAoc2VsZi5vZmZzZXQgKyBzaXplKSAlIHNlbGYuYWxpZ24KKysgICAgICAgIG5ld19vZmZzZXQgPSAoc2VsZi5vZmZzZXQgKyBzaXplKSAlIHNlbGYuYWxpZ24KKyAgICAgICAgIHJldHVybiBBbGlnbm1lbnQoc2VsZi5hbGlnbiwgbmV3X29mZnNldCkKKyAKKyAKK0BAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEFsaWdubWVudChvYmplY3QpOgorICAgICAgICAgJycnCisgICAgICAgICBBc3N1bWluZyB0aGUgZ2l2ZW4gZXh0ZXJuYWxfYWxpZ24sIGNoZWNrcyB3aGV0aGVyCisgICAgICAgICBzZWxmIGlzIGZ1bGZpbGxlZCBmb3IgYWxsIGNhc2VzLgorLQlSZXR1cm5zIFRydWUgaWYgeWVzLCBGYWxzZSBvdGhlcndpc2UuCisrICAgICAgICBSZXR1cm5zIFRydWUgaWYgeWVzLCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgICAnJycKKyAgICAgICAgIGlmIHNlbGYuYWxpZ24gPT0gMSBhbmQgc2VsZi5vZmZzZXQgPT0gMDoKKyAgICAgICAgICAgICAjIGFsaWdubWVudCAxIHdpdGggb2Zmc2V0IDAgaXMgYWx3YXlzIGZ1bGZpbGxlZAorQEAgLTU1LDkgKzU1LDkgQEAgY2xhc3MgQWxpZ25tZW50KG9iamVjdCk6CisgICAgICAgICAgICAgIyB0aGUgZXh0ZXJuYWwgYWxpZ24gZ3VhcmFudGVlcyBsZXNzIGFsaWdubWVudCAtPiBub3QgZ3VhcmFudGVlZAorICAgICAgICAgICAgIHJldHVybiBGYWxzZQorIAorLQlpZiBleHRlcm5hbF9hbGlnbi5hbGlnbiAlIHNlbGYuYWxpZ24gIT0gMDoKKysgICAgICAgIGlmIGV4dGVybmFsX2FsaWduLmFsaWduICUgc2VsZi5hbGlnbiAhPSAwOgorICAgICAgICAgICAgICMgdGhlIGV4dGVybmFsIGFsaWduIGNhbm5vdCBiZSBkaXZpZGVkIGJ5IG91ciBhbGlnbgorLQkgICAgIyAtPiBub3QgZ3VhcmFudGVlZAorKyAgICAgICAgICAgICMgLT4gbm90IGd1YXJhbnRlZWQKKyAgICAgICAgICAgICAjICh0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGVyZSBhcmUgYWxpZ25tZW50cyB0aGF0IGFyZSBub3QKKyAgICAgICAgICAgICAjIGEgcG93ZXIgb2YgMiwgd2hpY2ggaXMgaGlnaGx5IGRpc2NvdXJhZ2VkLiBCdXQgYmV0dGVyIGJlCisgICAgICAgICAgICAgIyBzYWZlIGFuZCBjaGVjayBmb3IgaXQpCitAQCAtNzIsNyArNzIsNyBAQCBjbGFzcyBBbGlnbm1lbnQob2JqZWN0KToKKyAKKyAgICAgZGVmIGNvbWJpbmVfd2l0aChzZWxmLCBvdGhlcik6CisgICAgICAgICAjIHJldHVybnMgdGhlIGFsaWdubWVudCB0aGF0IGlzIGd1YXJhbnRlZWQgd2hlbgorLQkjIGJvdGgsIHNlbGYgb3Igb3RoZXIsIGNhbiBoYXBwZW4KKysgICAgICAgICMgYm90aCwgc2VsZiBvciBvdGhlciwgY2FuIGhhcHBlbgorICAgICAgICAgbmV3X2FsaWduID0gZ2NkKHNlbGYuYWxpZ24sIG90aGVyLmFsaWduKQorICAgICAgICAgbmV3X29mZnNldF9jYW5kaWRhdGUxID0gc2VsZi5vZmZzZXQgJSBuZXdfYWxpZ24KKyAgICAgICAgIG5ld19vZmZzZXRfY2FuZGlkYXRlMiA9IG90aGVyLm9mZnNldCAlIG5ld19hbGlnbgorQEAgLTgzLDggKzgzLDggQEAgY2xhc3MgQWxpZ25tZW50KG9iamVjdCk6CisgICAgICAgICAgICAgbmV3X2FsaWduID0gZ2NkKG5ld19hbGlnbiwgb2Zmc2V0X2RpZmYpCisgICAgICAgICAgICAgbmV3X29mZnNldF9jYW5kaWRhdGUxID0gc2VsZi5vZmZzZXQgJSBuZXdfYWxpZ24KKyAgICAgICAgICAgICBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTIgPSBvdGhlci5vZmZzZXQgJSBuZXdfYWxpZ24KKy0JICAgIGFzc2VydCBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTEgPT0gbmV3X29mZnNldF9jYW5kaWRhdGUyCistCSAgICBuZXdfb2Zmc2V0ID0gbmV3X29mZnNldF9jYW5kaWRhdGUxCisrICAgICAgICAgICAgYXNzZXJ0IG5ld19vZmZzZXRfY2FuZGlkYXRlMSA9PSBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTIKKysgICAgICAgICAgICBuZXdfb2Zmc2V0ID0gbmV3X29mZnNldF9jYW5kaWRhdGUxCisgICAgICAgICAjIHJldHVybiB0aGUgcmVzdWx0CisgICAgICAgICByZXR1cm4gQWxpZ25tZW50KG5ld19hbGlnbiwgbmV3X29mZnNldCkKKyAKK0BAIC05Miw0NCArOTIsNDQgQEAgY2xhc3MgQWxpZ25tZW50KG9iamVjdCk6CisgY2xhc3MgQWxpZ25tZW50TG9nKG9iamVjdCk6CisgCisgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKy0Jc2VsZi5va19saXN0ID0gW10KKy0Jc2VsZi5mYWlsX2xpc3QgPSBbXQorLQlzZWxmLnZlcmJvc2l0eSA9IDEKKysgICAgICAgIHNlbGYub2tfbGlzdCA9IFtdCisrICAgICAgICBzZWxmLmZhaWxfbGlzdCA9IFtdCisrICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDEKKyAKKyAgICAgZGVmIF9fc3RyX18oc2VsZik6CistCXJlc3VsdCA9ICIiCisrICAgICAgICByZXN1bHQgPSAiIgorIAorLQkjIG91dHB1dCB0aGUgT0stbGlzdAorLQlmb3IgKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgYWxpZ25fYWZ0ZXIpIGluIHNlbGYub2tfbGlzdDoKKy0JICAgIHN0YWNrc2l6ZSA9IGxlbihjYWxsc3RhY2spCisrICAgICAgICAjIG91dHB1dCB0aGUgT0stbGlzdAorKyAgICAgICAgZm9yIChhbGlnbl9iZWZvcmUsIGZpZWxkX25hbWUsIHR5cGVfb2JqLCBjYWxsc3RhY2ssIGFsaWduX2FmdGVyKSBpbiBzZWxmLm9rX2xpc3Q6CisrICAgICAgICAgICAgc3RhY2tzaXplID0gbGVuKGNhbGxzdGFjaykKKyAgICAgICAgICAgICBpbmRlbnQgPSAnICAnICogc3RhY2tzaXplCistCSAgICBpZiBzZWxmLm9rX2NhbGxzdGFja19pc19yZWxldmFudChjYWxsc3RhY2spOgorKyAgICAgICAgICAgIGlmIHNlbGYub2tfY2FsbHN0YWNrX2lzX3JlbGV2YW50KGNhbGxzdGFjayk6CisgICAgICAgICAgICAgICAgIGlmIGZpZWxkX25hbWUgaXMgTm9uZSBvciBmaWVsZF9uYW1lID09ICIiOgorLQkgICAgICAgICAgICByZXN1bHQgKz0gKCIgICAgJXNvazogJXM6XG5cdCVzYmVmb3JlOiAlcywgYWZ0ZXI6ICVzXG4iCistCQkgICAgICAgICUgKGluZGVudCwgc3RyKHR5cGVfb2JqKSwgaW5kZW50LCBzdHIoYWxpZ25fYmVmb3JlKSwgc3RyKGFsaWduX2FmdGVyKSkpCistCSAgICAgICAgZWxzZToKKy0JCSAgICByZXN1bHQgKz0gKCIgICAgJXNvazogZmllbGQgXCIlc1wiIGluICVzOlxuXHQlc2JlZm9yZTogJXMsIGFmdGVyOiAlc1xuIgorLQkJICAgICAgICAlIChpbmRlbnQsIHN0cihmaWVsZF9uYW1lKSwgc3RyKHR5cGVfb2JqKSwKKy0JCSAgICAgICAgICAgaW5kZW50LCBzdHIoYWxpZ25fYmVmb3JlKSwgc3RyKGFsaWduX2FmdGVyKSkpCisrICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gKCIgICAgJXNvazogJXM6XG5cdCVzYmVmb3JlOiAlcywgYWZ0ZXI6ICVzXG4iCisrICAgICAgICAgICAgICAgICAgICAgICAgJSAoaW5kZW50LCBzdHIodHlwZV9vYmopLCBpbmRlbnQsIHN0cihhbGlnbl9iZWZvcmUpLCBzdHIoYWxpZ25fYWZ0ZXIpKSkKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoIiAgICAlc29rOiBmaWVsZCBcIiVzXCIgaW4gJXM6XG5cdCVzYmVmb3JlOiAlcywgYWZ0ZXI6ICVzXG4iCisrICAgICAgICAgICAgICAgICAgICAgICAgJSAoaW5kZW50LCBzdHIoZmllbGRfbmFtZSksIHN0cih0eXBlX29iaiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50LCBzdHIoYWxpZ25fYmVmb3JlKSwgc3RyKGFsaWduX2FmdGVyKSkpCisgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zaXR5ID49IDE6CistCQkgICAgcmVzdWx0ICs9IHNlbGYuY2FsbHN0YWNrX3RvX3N0cihpbmRlbnQsIGNhbGxzdGFjaykKKysgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLmNhbGxzdGFja190b19zdHIoaW5kZW50LCBjYWxsc3RhY2spCisgCistCSMgb3V0cHV0IHRoZSBmYWlsLWxpc3QKKy0JZm9yIChhbGlnbl9iZWZvcmUsIGZpZWxkX25hbWUsIHR5cGVfb2JqLCBjYWxsc3RhY2ssIHJlYXNvbikgaW4gc2VsZi5mYWlsX2xpc3Q6CistCSAgICBzdGFja3NpemUgPSBsZW4oY2FsbHN0YWNrKQorKyAgICAgICAgIyBvdXRwdXQgdGhlIGZhaWwtbGlzdAorKyAgICAgICAgZm9yIChhbGlnbl9iZWZvcmUsIGZpZWxkX25hbWUsIHR5cGVfb2JqLCBjYWxsc3RhY2ssIHJlYXNvbikgaW4gc2VsZi5mYWlsX2xpc3Q6CisrICAgICAgICAgICAgc3RhY2tzaXplID0gbGVuKGNhbGxzdGFjaykKKyAgICAgICAgICAgICBpbmRlbnQgPSAnICAnICogc3RhY2tzaXplCistCSAgICBpZiBmaWVsZF9uYW1lIGlzIE5vbmUgb3IgZmllbGRfbmFtZSA9PSAiIjoKKy0JICAgICAgICByZXN1bHQgKz0gKCIgICAgJXNmYWlsOiBhbGlnbiAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aFxuXHQlcyVzXG5cdCVzUmVhc29uOiAlc1xuIgorLQkJICAgICUgKGluZGVudCwgc3RyKGFsaWduX2JlZm9yZSksIGluZGVudCwgc3RyKHR5cGVfb2JqKSwgaW5kZW50LCByZWFzb24pKQorLQkgICAgZWxzZToKKy0JCXJlc3VsdCArPSAoIiAgICAlc2ZhaWw6IGFsaWduICVzIGlzIGluY29tcGF0aWJsZSB3aXRoXG5cdCVzZmllbGQgXCIlc1wiIGluICVzXG5cdCVzUmVhc29uOiAlc1xuIgorLQkJICAgICUgKGluZGVudCwgc3RyKGFsaWduX2JlZm9yZSksIGluZGVudCwgc3RyKGZpZWxkX25hbWUpLCBzdHIodHlwZV9vYmopLCBpbmRlbnQsIHJlYXNvbikpCisrICAgICAgICAgICAgaWYgZmllbGRfbmFtZSBpcyBOb25lIG9yIGZpZWxkX25hbWUgPT0gIiI6CisrICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoIiAgICAlc2ZhaWw6IGFsaWduICVzIGlzIGluY29tcGF0aWJsZSB3aXRoXG5cdCVzJXNcblx0JXNSZWFzb246ICVzXG4iCisrICAgICAgICAgICAgICAgICAgICAlIChpbmRlbnQsIHN0cihhbGlnbl9iZWZvcmUpLCBpbmRlbnQsIHN0cih0eXBlX29iaiksIGluZGVudCwgcmVhc29uKSkKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gKCIgICAgJXNmYWlsOiBhbGlnbiAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aFxuXHQlc2ZpZWxkIFwiJXNcIiBpbiAlc1xuXHQlc1JlYXNvbjogJXNcbiIKKysgICAgICAgICAgICAgICAgICAgICUgKGluZGVudCwgc3RyKGFsaWduX2JlZm9yZSksIGluZGVudCwgc3RyKGZpZWxkX25hbWUpLCBzdHIodHlwZV9vYmopLCBpbmRlbnQsIHJlYXNvbikpCisgCisgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NpdHkgPj0gMToKKy0JICAgICAgICByZXN1bHQgKz0gc2VsZi5jYWxsc3RhY2tfdG9fc3RyKGluZGVudCwgY2FsbHN0YWNrKQorKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VsZi5jYWxsc3RhY2tfdG9fc3RyKGluZGVudCwgY2FsbHN0YWNrKQorIAorIAorLQlyZXR1cm4gcmVzdWx0CisrICAgICAgICByZXR1cm4gcmVzdWx0CisgCisgCisgICAgIGRlZiBjYWxsc3RhY2tfdG9fc3RyKHNlbGYsIGluZGVudCwgY2FsbHN0YWNrKToKK0BAIC0xMzcsNDEgKzEzNyw0MSBAQCBjbGFzcyBBbGlnbm1lbnRMb2cob2JqZWN0KToKKyAgICAgICAgIGZvciBzdGFja19lbGVtIGluIGNhbGxzdGFjazoKKyAgICAgICAgICAgICByZXN1bHQgKz0gIlx0ICAlcyVzXG4iICUgKGluZGVudCwgc3RyKHN0YWNrX2VsZW0pKQorICAgICAgICAgcmVzdWx0ICs9ICJcdCVzXVxuIiAlIGluZGVudAorLQlyZXR1cm4gcmVzdWx0CisrICAgICAgICByZXR1cm4gcmVzdWx0CisgCisgCisgICAgIGRlZiBva19jYWxsc3RhY2tfaXNfcmVsZXZhbnQoc2VsZiwgb2tfY2FsbHN0YWNrKToKKyAgICAgICAgICMgZGV0ZXJtaW5lIHdoZXRoZXIgYW4gb2sgY2FsbHN0YWNrIGlzIHJlbGV2YW50IGZvciBsb2dnaW5nCistCWlmIHNlbGYudmVyYm9zaXR5ID49IDI6CistCSAgICByZXR1cm4gVHJ1ZQorKyAgICAgICAgaWYgc2VsZi52ZXJib3NpdHkgPj0gMjoKKysgICAgICAgICAgICByZXR1cm4gVHJ1ZQorIAorICAgICAgICAgIyBlbXB0eSBjYWxsc3RhY2tzIGFyZSBhbHdheXMgcmVsZXZhbnQKKy0JaWYgbGVuKG9rX2NhbGxzdGFjaykgPT0gMDoKKysgICAgICAgIGlmIGxlbihva19jYWxsc3RhY2spID09IDA6CisgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAKKy0JIyBjaGVjayB3aGV0aGVyIHRoZSBva19jYWxsc3RhY2sgaXMgYSBzdWJzZXQgb3IgZXF1YWwgdG8gYSBmYWlsX2NhbGxzdGFjaworKyAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSBva19jYWxsc3RhY2sgaXMgYSBzdWJzZXQgb3IgZXF1YWwgdG8gYSBmYWlsX2NhbGxzdGFjaworICAgICAgICAgZm9yIChhbGlnbl9iZWZvcmUsIGZpZWxkX25hbWUsIHR5cGVfb2JqLCBmYWlsX2NhbGxzdGFjaywgcmVhc29uKSBpbiBzZWxmLmZhaWxfbGlzdDoKKyAgICAgICAgICAgICBpZiBsZW4ob2tfY2FsbHN0YWNrKSA8PSBsZW4oZmFpbF9jYWxsc3RhY2spOgorICAgICAgICAgICAgICAgICB6aXBwZWQgPSB6aXAob2tfY2FsbHN0YWNrLCBmYWlsX2NhbGxzdGFja1s6bGVuKG9rX2NhbGxzdGFjayldKQorLQkJaXNfc3Vic2V0ID0gYWxsKFtpID09IGogZm9yIGksIGogaW4gemlwcGVkXSkKKy0JCWlmIGlzX3N1YnNldDoKKysgICAgICAgICAgICAgICAgaXNfc3Vic2V0ID0gYWxsKFtpID09IGogZm9yIGksIGogaW4gemlwcGVkXSkKKysgICAgICAgICAgICAgICAgaWYgaXNfc3Vic2V0OgorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAKKyAgICAgICAgIHJldHVybiBGYWxzZQorIAorIAorICAgICBkZWYgb2soc2VsZiwgYWxpZ25fYmVmb3JlLCBmaWVsZF9uYW1lLCB0eXBlX29iaiwgY2FsbHN0YWNrLCBhbGlnbl9hZnRlcik6CistCXNlbGYub2tfbGlzdC5hcHBlbmQoKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgYWxpZ25fYWZ0ZXIpKQorKyAgICAgICAgc2VsZi5va19saXN0LmFwcGVuZCgoYWxpZ25fYmVmb3JlLCBmaWVsZF9uYW1lLCB0eXBlX29iaiwgY2FsbHN0YWNrLCBhbGlnbl9hZnRlcikpCisgCisgICAgIGRlZiBmYWlsKHNlbGYsIGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgcmVhc29uKToKKy0Jc2VsZi5mYWlsX2xpc3QuYXBwZW5kKChhbGlnbl9iZWZvcmUsIGZpZWxkX25hbWUsIHR5cGVfb2JqLCBjYWxsc3RhY2ssIHJlYXNvbikpCisrICAgICAgICBzZWxmLmZhaWxfbGlzdC5hcHBlbmQoKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgcmVhc29uKSkKKyAKKyAgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6CistCXNlbGYub2tfbGlzdC5leHRlbmQob3RoZXIub2tfbGlzdCkKKy0Jc2VsZi5mYWlsX2xpc3QuZXh0ZW5kKG90aGVyLmZhaWxfbGlzdCkKKysgICAgICAgIHNlbGYub2tfbGlzdC5leHRlbmQob3RoZXIub2tfbGlzdCkKKysgICAgICAgIHNlbGYuZmFpbF9saXN0LmV4dGVuZChvdGhlci5mYWlsX2xpc3QpCisgCisgICAgIGRlZiBva19jb3VudChzZWxmKToKKy0JcmV0dXJuIGxlbihzZWxmLm9rX2xpc3QpCisrICAgICAgICByZXR1cm4gbGVuKHNlbGYub2tfbGlzdCkKKyAKKyAKKyAKKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by8wMDAyLXByaW50LWlzLWEtZnVuY3Rpb24tYW5kLW5lZWRzLXBhcmVudGhlc2VzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by8wMDAyLXByaW50LWlzLWEtZnVuY3Rpb24tYW5kLW5lZWRzLXBhcmVudGhlc2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MmFjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLzAwMDItcHJpbnQtaXMtYS1mdW5jdGlvbi1hbmQtbmVlZHMtcGFyZW50aGVzZXMucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBiZWE1ZTFjODViZGMwOTUwOTEzNzkwMzY0ZTE4MjI4ZjIwMzk1YTNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK0RhdGU6IFRodSwgMTkgTWF5IDIwMTYgMTc6MzA6MDUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHByaW50KCkgaXMgYSBmdW5jdGlvbiBhbmQgbmVlZHMgcGFyZW50aGVzZXMuCisKK0ZpeGVzIGJ1aWxkIHdpdGggcHl0aG9uLTMueC4KKworU2lnbmVkLW9mZi1ieTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK1NpZ25lZC1vZmYtYnk6IFVsaSBTY2hsYWNodGVyIDxwc3ljaG9uQHpuYy5pbj4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHhjYmdlbi94dHlwZXMucHkgfCAxMiArKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGNiZ2VuL3h0eXBlcy5weSBiL3hjYmdlbi94dHlwZXMucHkKK2luZGV4IGMzYjU3NTguLmI4M2IxMTkgMTAwNjQ0CistLS0gYS94Y2JnZW4veHR5cGVzLnB5CisrKysgYi94Y2JnZW4veHR5cGVzLnB5CitAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNzIENvbXBsZXhUeXBlKFR5cGUpOgorICAgICAgICAgICAgICAgICBpbnQocmVxdWlyZWRfc3RhcnRfYWxpZ25fZWxlbWVudC5nZXQoJ2FsaWduJywgIjQiKSwgMCksCisgICAgICAgICAgICAgICAgIGludChyZXF1aXJlZF9zdGFydF9hbGlnbl9lbGVtZW50LmdldCgnb2Zmc2V0JywgIjAiKSwgMCkpCisgICAgICAgICAgICAgaWYgdmVyYm9zZV9hbGlnbl9sb2c6CistICAgICAgICAgICAgICAgIHByaW50ICJFeHBsaWNpdCBzdGFydC1hbGlnbiBmb3IgJXM6ICVzXG4iICUgKHNlbGYsIHNlbGYucmVxdWlyZWRfc3RhcnRfYWxpZ24pCisrICAgICAgICAgICAgICAgIHByaW50ICgiRXhwbGljaXQgc3RhcnQtYWxpZ24gZm9yICVzOiAlc1xuIiAlIChzZWxmLCBzZWxmLnJlcXVpcmVkX3N0YXJ0X2FsaWduKSkKKyAKKyAgICAgZGVmIHJlc29sdmUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIGlmIHNlbGYucmVzb2x2ZWQ6CitAQCAtNTkyLDcgKzU5Miw3IEBAIGNsYXNzIENvbXBsZXhUeXBlKFR5cGUpOgorICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlX2FsaWduX2xvZzoKKyAgICAgICAgICAgICAgICAgICAgIHByaW50ICgiY2FsY19yZXF1aXJlZF9zdGFydF9hbGlnbjogJXMgaGFzIHN0YXJ0LWFsaWduICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKHN0cihzZWxmKSwgc3RyKHNlbGYucmVxdWlyZWRfc3RhcnRfYWxpZ24pKSkKKy0gICAgICAgICAgICAgICAgICAgIHByaW50ICJEZXRhaWxzOlxuIiArIHN0cihsb2cpCisrICAgICAgICAgICAgICAgICAgICBwcmludCAoIkRldGFpbHM6XG4iICsgc3RyKGxvZykpCisgICAgICAgICAgICAgICAgIGlmIHNlbGYucmVxdWlyZWRfc3RhcnRfYWxpZ24ub2Zmc2V0ICE9IDA6CisgICAgICAgICAgICAgICAgICAgICBwcmludCAoKCJXQVJOSU5HOiAlc1xuXHRoYXMgc3RhcnQtYWxpZ24gd2l0aCBub24temVybyBvZmZzZXQ6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICsgIlxuXHRzdWdnZXN0IHRvIGFkZCBleHBsaWNpdCBkZWZpbml0aW9uIHdpdGg6IgorQEAgLTYxOSwxMiArNjE5LDEyIEBAIGNsYXNzIENvbXBsZXhUeXBlKFR5cGUpOgorICAgICAgICAgICAgIGZvciBvZmZzZXQgaW4gcmFuZ2UoMCxhbGlnbik6CisgICAgICAgICAgICAgICAgIGFsaWduX2NhbmRpZGF0ZSA9IEFsaWdubWVudChhbGlnbiwgb2Zmc2V0KQorICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlX2FsaWduX2xvZzoKKy0gICAgICAgICAgICAgICAgICAgIHByaW50ICJ0cnlpbmcgJXMgZm9yICVzIiAlIChzdHIoYWxpZ25fY2FuZGlkYXRlKSwgc3RyKHNlbGYpKQorKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJ0cnlpbmcgJXMgZm9yICVzIiAlIChzdHIoYWxpZ25fY2FuZGlkYXRlKSwgc3RyKHNlbGYpKSkKKyAgICAgICAgICAgICAgICAgbXlfbG9nID0gQWxpZ25tZW50TG9nKCkKKyAgICAgICAgICAgICAgICAgaWYgc2VsZi5pc19wb3NzaWJsZV9zdGFydF9hbGlnbihhbGlnbl9jYW5kaWRhdGUsIGNhbGxzdGFjaywgbXlfbG9nKToKKyAgICAgICAgICAgICAgICAgICAgIGxvZy5hcHBlbmQobXlfbG9nKQorICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZV9hbGlnbl9sb2c6CistICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImZvdW5kIHN0YXJ0LWFsaWduICVzIGZvciAlcyIgJSAoc3RyKGFsaWduX2NhbmRpZGF0ZSksIHN0cihzZWxmKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAoImZvdW5kIHN0YXJ0LWFsaWduICVzIGZvciAlcyIgJSAoc3RyKGFsaWduX2NhbmRpZGF0ZSksIHN0cihzZWxmKSkpCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpZ25fY2FuZGlkYXRlCisgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICBteV9va19jb3VudCA9IG15X2xvZy5va19jb3VudCgpCitAQCAtNjQxLDcgKzY0MSw3IEBAIGNsYXNzIENvbXBsZXhUeXBlKFR5cGUpOgorICAgICAgICAgIyBub25lIG9mIHRoZSBjYW5kaWRhdGVzIGFwcGxpZXMKKyAgICAgICAgICMgdGhpcyB0eXBlIGhhcyBpbGxlZ2FsIGludGVybmFsIGFsaWducyBmb3IgYWxsIHBvc3NpYmxlIHN0YXJ0X2FsaWducworICAgICAgICAgaWYgdmVyYm9zZV9hbGlnbl9sb2c6CistICAgICAgICAgICAgcHJpbnQgImRpZG4ndCBmaW5kIHN0YXJ0LWFsaWduIGZvciAlcyIgJSBzdHIoc2VsZikKKysgICAgICAgICAgICBwcmludCAoImRpZG4ndCBmaW5kIHN0YXJ0LWFsaWduIGZvciAlcyIgJSBzdHIoc2VsZikpCisgICAgICAgICBsb2cuYXBwZW5kKGJlc3RfbG9nKQorICAgICAgICAgcmV0dXJuIE5vbmUKKyAKK0BAIC05MDAsNyArOTAwLDcgQEAgY2xhc3MgU3dpdGNoVHlwZShDb21wbGV4VHlwZSk6CisgICAgICMgYXV4IGZ1bmN0aW9uIGZvciB1bmNoZWNrZWRfZ2V0X2FsaWdubWVudF9hZnRlcgorICAgICBkZWYgZ2V0X2FsaWduX2Zvcl9zZWxlY3RlZF9jYXNlX2ZpZWxkKHNlbGYsIGNhc2VfZmllbGQsIHN0YXJ0X2FsaWduLCBjYWxsc3RhY2ssIGxvZyk6CisgICAgICAgICBpZiB2ZXJib3NlX2FsaWduX2xvZzoKKy0gICAgICAgICAgICBwcmludCAiZ2V0X2FsaWduX2Zvcl9zZWxlY3RlZF9jYXNlX2ZpZWxkOiAlcywgY2FzZV9maWVsZCA9ICVzIiAlIChzdHIoc2VsZiksIHN0cihjYXNlX2ZpZWxkKSkKKysgICAgICAgICAgICBwcmludCAoImdldF9hbGlnbl9mb3Jfc2VsZWN0ZWRfY2FzZV9maWVsZDogJXMsIGNhc2VfZmllbGQgPSAlcyIgJSAoc3RyKHNlbGYpLCBzdHIoY2FzZV9maWVsZCkpKQorICAgICAgICAgdG90YWxfYWxpZ24gPSBzdGFydF9hbGlnbgorICAgICAgICAgZm9yIGZpZWxkIGluIHNlbGYuYml0Y2FzZXM6CisgICAgICAgICAgICAgbXlfY2FsbHN0YWNrID0gY2FsbHN0YWNrWzpdCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8vbm8tcHl0aG9uLW5hdGl2ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8vbm8tcHl0aG9uLW5hdGl2ZS5wYXRjaAppbmRleCBmODA4ZTE5Li4wOWI2MDg4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvL25vLXB5dGhvbi1uYXRpdmUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by9uby1weXRob24tbmF0aXZlLnBhdGNoCkBAIC0yMCw3ICsyMCw3IEBACiAtQU1fUEFUSF9QWVRIT04oWzIuNV0pCiArcHl0aG9uZGlyPSIke2xpYmRpcn0veGNiLXByb3RvIgogK0FDX1NVQlNUKHB5dGhvbmRpcikKLStQWVRIT049InB5dGhvbiIKKytQWVRIT049InB5dGhvbjMiCiArQUNfU1VCU1QoUFlUSE9OKQogCiAgeGNiaW5jbHVkZWRpcj0nJHtkYXRhZGlyfS94Y2InCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYzVhMTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b18xLjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1pbmNsdWRlIHhjYi1wcm90by5pbmMKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzYzYjA4MWNiMTBjMjIzNDM1YjAxZTAwZGMwYWJhNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZHJpMi54bWw7YmVnaW5saW5lPTI7ZW5kbGluZT0yODttZDU9Zjg3NjNiMTNmZjQzMmU4NTk3ZTBkNjEwY2Y1OThlNjUiCi0KLQotU1JDX1VSSVttZDVzdW1dID0gIjZiZjI3OTc0NDVkYzZkNDNlOWU0NzA3YzA4MmVmZjljIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0YWNlZWU2NTAyYTBjZTQ1ZmMzOWIzM2M1NDFhMmRmNDcxNWQwMGI3MmU2NjBlYmU4YzViYjQ0NDc3MWUzMmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwNGJjNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMi5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIGhlYWRlcnMiCitERVNDUklQVElPTiA9ICJGdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgWCBwcm90b2NvbCBDLWxhbmd1YWdlIEJpbmRpbmcgXAorKFhDQikuICBYQ0IgaXMgYSByZXBsYWNlbWVudCBmb3IgWGxpYiBmZWF0dXJpbmcgYSBzbWFsbCBmb290cHJpbnQsIFwKK2xhdGVuY3kgaGlkaW5nLCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBwcm90b2NvbCwgaW1wcm92ZWQgdGhyZWFkaW5nIFwKK3N1cHBvcnQsIGFuZCBleHRlbnNpYmlsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kcmkyLnhtbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTI4O21kNT1mODc2M2IxM2ZmNDMyZTg1OTdlMGQ2MTBjZjU5OGU2NSIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L3hjYi1wcm90by0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL25vLXB5dGhvbi1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1NYWtlLXdoaXRlc3BhY2UtdXNlLWNvbnNpc3RlbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1wcmludC1pcy1hLWZ1bmN0aW9uLWFuZC1uZWVkcy1wYXJlbnRoZXNlcy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNGU2MDkxOWY4NTk1NjBmMjg0MjZhNjg1YTU1NTk2MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OTIyYWJhNGM2NjRhYjc4OTlhMjlkOTJlYTkxYTg3YWE0YzFmYzdlYjVlZTU1MDMyNWMzMjE2YzQ4MGE0OTA2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRVMgKz0gInB5dGhvbi14Y2JnZW4iCisKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS94Y2IvKi54bWwgJHtkYXRhZGlyfS94Y2IvKi54c2QiCitGSUxFU19weXRob24teGNiZ2VuID0gIiR7bGliZGlyfS94Y2ItcHJvdG8iCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgTWFrZWZpbGUncyBkb19pbnN0YWxsIGNyZWF0ZXMgLnB5YyBmaWxlcyBmb3IgcHl0aG9uMywgbm93IGFsc28gY3JlYXRlCisgICAgIyB0aGVtIGZvciBweXRob24yIHNvIHRoYXQgdGhleSB3aWxsIGJlIHJlY29yZGVkIGJ5IG1hbmlmZXN0LCBhbmQgY2FuIGJlCisgICAgIyBjbGVhbmVkIGNvcnJlY3RseS4KKyAgICBweXRob24gLW0gcHlfY29tcGlsZSAke0R9JHtsaWJkaXJ9L3hjYi1wcm90by94Y2JnZW4vKi5weQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVhNGQwNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgotCi1pbmNsdWRlIHhjYi1wcm90by5pbmMKLVNSQ1JFViA9ICJkODFjYTIzM2U5OGJlOGZhNTllOGM5MGQyNjJjMDUxNjk0NGM1YTY2IgotUFYgPSAiMS4yK2dpdHIke1NSQ1BWfSIKLVBSID0gInI0IgotCi1TUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94Y2IvcHJvdG8iCi1TID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hpbmVyYW1hcHJvdG9fMS4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYgppbmRleCBkMDA3NzRlLi5kZGU3ZTlkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYgpAQCAtMTUsMyArMTUsNSBAQAogCiBTUkNfVVJJW21kNXN1bV0gPSAiOTk1OWZlMGJmYjIyYTBlNzI2MDQzM2I4ZDE5OTU5MGEiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTc3NTc0YmIzZGMxOTJlY2Q5YzU1ZjU5Zjk5MWVjMWRmZjM0MGJlM2UzMTM5MmM5NWRlZmY0MjNkYTUyNDg1YiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90by94cHJvdG9fZml4X2Zvcl94MzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaAppbmRleCA1NDBhZDI3Li44YTVmZjU4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaApAQCAtOCw3ICs4LDcgQEAKIFRoaXMgZml4ZXMgY29tcGlsYXRpb24gd2l0aCB4MzIgdG9vbGNoYWluLgogCiBSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMQorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8xCiAKIC0tLSB4cHJvdG8tNy4wLjIyL1htZC5oLngzMgkyMDA5LTA3LTExIDA0OjE5OjUwLjAwMDAwMDAwMCAtMDcwMAogKysrIHhwcm90by03LjAuMjIvWG1kLmgJMjAxMS0xMS0zMCAxNzoxNDoxOS4yOTAzOTU4OTMgLTA4MDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MjdhN2QuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1yZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYwotCi1TVU1NQVJZID0gIlhsaWI6IEMgTGFuZ3VhZ2UgWCBpbnRlcmZhY2UgaGVhZGVycyIKLQotREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBiYXNpYyBoZWFkZXJzIGZvciB0aGUgWCBXaW5kb3cgXAotU3lzdGVtLiIKLQotTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iOWUwNTExMDdkNTYyODk2NjczOWEwYjJlOWIzMjY3NiIKLQotUEUgPSAiMSIKLQotU1JDX1VSSSArPSAiZmlsZTovL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCIKLQotRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzY2UyZjIzMGM1ZDhmYTkyOWYzMjZhZDFmMGZhNDBhOCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyOWU4NTU2OGQxZjY4Y2VlZjhhMmMwODFkYWQ5YmMwZTU1MDBhNTNjZmZmZGUyNGI1NjRkYzQzZDQ2ZGRmNmNhIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMmI2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOS5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhsaWI6IEMgTGFuZ3VhZ2UgWCBpbnRlcmZhY2UgaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBiYXNpYyBoZWFkZXJzIGZvciB0aGUgWCBXaW5kb3cgXAorU3lzdGVtLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iOWUwNTExMDdkNTYyODk2NjczOWEwYjJlOWIzMjY3NiIKKworUEUgPSAiMSIKKworU1JDX1VSSSArPSAiZmlsZTovL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZWVhZTFmNDdkNDNhMzNlZjBkNWM1NjcyNzQxMDMyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2YzFhNDc3MDkyY2E3MzIzMzkwMmI4ZDVmMzMwMTI2MzVjNGIwMjA4ZjE3ZTc4MzNjYzdlZmU1YzkzYmE5ZjhhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKaW5kZXggN2NlYjZmZC4uNzJlNGZiZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCkBAIC0zLDcgKzMsNyBAQAogICAgIExvYWQgImZiIgogICAgIExvYWQgInNoYWRvdyIKICAgICBMb2FkICJzaGFkb3dmYiIKKyAgICBMb2FkICJpbnQxMCIKICAgICBMb2FkICJ2YmUiCiAgICAgTG9hZCAidmdhaHciCiBFbmRTZWN0aW9uCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jCmluZGV4IGY0YzU0NjkuLjI5NTAzYjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgIHhmODYtdmlkZW8tbW9kZXNldHRpbmciCiAKIFNVTU1BUllfeGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICJYLk9yZyBYIHNlcnZlciAtLSBtb2Rlc2V0dGluZyBkaXNwbGF5IGRyaXZlciIKLUlOU0FORV9TS0lQX3hmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAieG9yZy1kcml2ZXItYWJpIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH14Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gInhvcmctZHJpdmVyLWFiaSIKIAogWFNFUlZFUl9SUkVDT01NRU5EUyA9ICJ4a2V5Ym9hcmQtY29uZmlnIHJnYiB4c2VydmVyLXhmODYtY29uZmlnIHhrYmNvbXAiCiBSUkVDT01NRU5EU18ke1BOfSArPSAiJHtYU0VSVkVSX1JSRUNPTU1FTkRTfSIKQEAgLTEzMSw2ICsxMzEsNyBAQAogIyBEUkkzIHJlcXVpcmVzIHhzaG1mZW5jZSB0byBhbHNvIGJlIGVuYWJsZWQKIFBBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywtLWRpc2FibGUtZHJpMyxkcmkzcHJvdG8iCiBQQUNLQUdFQ09ORklHW2dseF0gPSAiLS1lbmFibGUtZ2x4LC0tZGlzYWJsZS1nbHgsZ2xwcm90byB2aXJ0dWFsL2xpYmdsIHZpcnR1YWwvbGlieDExIgorUEFDS0FHRUNPTkZJR1tnbGFtb3JdID0gIi0tZW5hYmxlLWdsYW1vciwtLWRpc2FibGUtZ2xhbW9yLGxpYmVwb3h5LGxpYmVnbCIKIFBBQ0tBR0VDT05GSUdbdW53aW5kXSA9ICItLWVuYWJsZS1saWJ1bndpbmQsLS1kaXNhYmxlLWxpYnVud2luZCxsaWJ1bndpbmQiCiBQQUNLQUdFQ09ORklHW3hzaG1mZW5jZV0gPSAiLS1lbmFibGUteHNobWZlbmNlLC0tZGlzYWJsZS14c2htZmVuY2UsbGlieHNobWZlbmNlIgogUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCkBAIC0xNjcsOSArMTY4LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncz0icGtnLWNvbmZpZyAtLXZhcmlhYmxlPSVzIHhvcmctc2VydmVyIiAlIGFiaXNbbmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIGVudj1uZXdlbnYsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIG91dHB1dCA9IHAuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBvdXRwdXQgPSBzdGRvdXQuZGVjb2RlKCJ1dGYtOCIpLnNwbGl0KCIuIilbMF0KICAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJwotICAgICAgICByZXR1cm4gIiVzeG9yZy1hYmktJXMtJXMiICUgKG1scHJlZml4LCBuYW1lLCBvdXRwdXQuc3BsaXQoIi4iKVswXSkKKyAgICAgICAgcmV0dXJuICIlc3hvcmctYWJpLSVzLSVzIiAlIChtbHByZWZpeCwgbmFtZSwgb3V0cHV0KQogCiAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQogICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIHBuLCAiICIgKyBnZXRfYWJpKCJpbnB1dCIpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL2NvbmZpZ3VyZS5hYy1Vc2UtbGlic3lzdGVtZC1pbi1SRVFVSVJFRF9MSUJTLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL2NvbmZpZ3VyZS5hYy1Vc2UtbGlic3lzdGVtZC1pbi1SRVFVSVJFRF9MSUJTLWNoZWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDMwOTk5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy9jb25maWd1cmUuYWMtVXNlLWxpYnN5c3RlbWQtaW4tUkVRVUlSRURfTElCUy1jaGVjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLUZyb20gMGMyMTUzZDQ2ODIyOWY1NmU2ZmVmNzFkMmYwMDJlMGNhZTE0YWE1NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1EYXRlOiBNb24sIDE2IE5vdiAyMDE1IDE2OjE4OjQwICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogVXNlIGxpYnN5c3RlbWQgaW4gUkVRVUlSRURfTElCUyBjaGVjawotCi1SRVFVSVJFRF9MSUJTIG5lZWRzIHRvIGJlIHNldCB0byB0aGUgY29ycmVjdCBzeXN0ZW1kIGxpYnJhcnksCi1vdGhlcndpc2UgdGhlIGxhdGVyIGNoZWNrIHdpbGwgZWl0aGVyIGZhaWwgb3IgdXNlIHRoZSB3cm9uZwotcGMgZmlsZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW3hvcmctZGV2ZWxAbGlzdHMueC5vcmddCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMTMgKysrKysrKysrKy0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA5NmMwMjQyLi5mNjNlY2ExIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC04MzcsOSArODM3LDE2IEBAIEFDX0FSR19XSVRIKFtzeXN0ZW1kLWRhZW1vbl0sCi0gCQlbc3VwcG9ydCBzeXN0ZW1kIHNvY2tldCBhY3RpdmF0aW9uIChkZWZhdWx0OiBhdXRvKV0pLAotIAlbV0lUSF9TWVNURU1EX0RBRU1PTj0kd2l0aHZhbF0sIFtXSVRIX1NZU1RFTURfREFFTU9OPWF1dG9dKQotIFBLR19DSEVDS19NT0RVTEVTKFtTWVNURU1EX0RBRU1PTl0sIFtsaWJzeXN0ZW1kLWRhZW1vbl0sCi0tICAgICAgICAgICAgICAgICAgW0hBVkVfU1lTVEVNRF9EQUVNT049eWVzXSwKLSsgICAgICAgICAgICAgICAgICBbUkVRVUlSRURfU1lTVEVNRF9EQUVNT049bGlic3lzdGVtZC1kYWVtb25dLAotICAgICAgICAgICAgICAgICAgIFtQS0dfQ0hFQ0tfTU9EVUxFUyhbU1lTVEVNRF9EQUVNT05dLCBbbGlic3lzdGVtZF0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIQVZFX1NZU1RFTURfREFFTU9OPXllc10sIFtIQVZFX1NZU1RFTURfREFFTU9OPW5vXSldKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUkVRVUlSRURfU1lTVEVNRF9EQUVNT049bGlic3lzdGVtZF0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSRVFVSVJFRF9TWVNURU1EX0RBRU1PTj1dKV0pCi0raWYgdGVzdCAieCRSRVFVSVJFRF9TWVNURU1EX0RBRU1PTiIgPSB4OyB0aGVuCi0rICAgICAgICBIQVZFX1NZU1RFTURfREFFTU9OPW5vCi0rZWxzZQotKyAgICAgICAgSEFWRV9TWVNURU1EX0RBRU1PTj15ZXMKLStmaQotKwotIGlmIHRlc3QgIngkV0lUSF9TWVNURU1EX0RBRU1PTiIgPSB4YXV0bzsgdGhlbgotIAlXSVRIX1NZU1RFTURfREFFTU9OPSIkSEFWRV9TWVNURU1EX0RBRU1PTiIKLSBmaQotQEAgLTg0OCw3ICs4NTUsNyBAQCBpZiB0ZXN0ICJ4JFdJVEhfU1lTVEVNRF9EQUVNT04iID0geHllczsgdGhlbgotIAkJQUNfTVNHX0VSUk9SKFtzeXN0ZW1kIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBubyBsaWJyYXJ5IGhhcyBiZWVuIGZvdW5kXSkKLSAJZmkKLSAJQUNfREVGSU5FKEhBVkVfU1lTVEVNRF9EQUVNT04sIDEsIFtEZWZpbmUgdG8gMSBpZiBsaWJzeXN0ZW1kLWRhZW1vbiBpcyBhdmFpbGFibGVdKQotLQlSRVFVSVJFRF9MSUJTPSIkUkVRVUlSRURfTElCUyBsaWJzeXN0ZW1kLWRhZW1vbiIKLSsJUkVRVUlSRURfTElCUz0iJFJFUVVJUkVEX0xJQlMgJFJFUVVJUkVEX1NZU1RFTURfREFFTU9OIgotIGZpCi0gQU1fQ09ORElUSU9OQUwoW0hBVkVfU1lTVEVNRF9EQUVNT05dLCBbdGVzdCAieCRIQVZFX1NZU1RFTURfREFFTU9OIiA9ICJ4eWVzIl0pCi0gCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy9tb2Rlc2V0dGluZ19saWJkcm1fcmVxdWlyZW1lbnRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21vZGVzZXR0aW5nX2xpYmRybV9yZXF1aXJlbWVudHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTg2Y2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21vZGVzZXR0aW5nX2xpYmRybV9yZXF1aXJlbWVudHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Gcm9tIGJmMjNkYjQyYTRlNTk0MzEyOTUwMTIyM2E0N2I0ODg4NGNkZWI2MmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0LmNvbT4KLURhdGU6IFdlZCwgMjcgSmFuIDIwMTYgMTE6NTA6MTMgLTA1MDAKLVN1YmplY3Q6IG1vZGVzZXR0aW5nOiBSZXF1aXJlIHN1ZmZpY2llbnRseSBuZXcgbGliZHJtCi0KLUJ1Z3ppbGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLzkzODgzCi1TaWduZWQtb2ZmLWJ5OiBBZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0LmNvbT4KLVJldmlld2VkLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Ci1SZXZpZXdlZC1ieTogSnVsaWVuIENyaXN0YXUgPGpjcmlzdGF1QGRlYmlhbi5vcmc+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IEpvaGFubmVzIFBvaW50bmVyIDxqb2hhbm5lcy5wb2ludG5lckBnbWFpbC5jb20+Ci0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGFjM2JiNjQuLjMxMmZjNjkgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTIwMzUsOCArMjAzNSw3IEBAIGlmIHRlc3QgIngkWE9SRyIgPSB4eWVzOyB0aGVuCi0gCi0gCWlmIHRlc3QgIngkRFJNIiA9IHh5ZXM7IHRoZW4KLSAJCWRubCAyLjQuNDYgaXMgcmVxdWlyZWQgZm9yIGN1cnNvciBob3RzcG90IHN1cHBvcnQuCi0tCQlQS0dfQ0hFQ0tfRVhJU1RTKGxpYmRybSA+PSAyLjQuNDYpCi0tCQlYT1JHX0RSSVZFUl9NT0RFU0VUVElORz15ZXMKLSsJCVBLR19DSEVDS19FWElTVFMobGliZHJtID49IDIuNC40NiwgWE9SR19EUklWRVJfTU9ERVNFVFRJTkc9eWVzLCBYT1JHX0RSSVZFUl9NT0RFU0VUVElORz1ubykKLSAJZmkKLSAKLSAJQUNfU1VCU1QoW1hPUkdfTElCU10pCi0tLSAKLWNnaXQgdjAuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xOC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTguMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3OWI0MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xOC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotcmVxdWlyZSB4c2VydmVyLXhvcmcuaW5jCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUuYWMtVXNlLWxpYnN5c3RlbWQtaW4tUkVRVUlSRURfTElCUy1jaGVjay5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbXVzbC1hcm0taW5iLW91dGIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL21vZGVzZXR0aW5nX2xpYmRybV9yZXF1aXJlbWVudHMucGF0Y2ggXAotICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiM2MxYzEwNTdkM2FkMjczODBkOGRkODdmZmNjMTgyY2QiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTk1NjcwODE5Njk1ZDljZWRkOGRkZTk1ZmJlMDY5YmUwZDBmNDg4YTc3Nzk3YTJkNDA5ZjlmNzAyZGFmMzEyZSIKLQotIyBUaGVzZSBleHRlbnNpb25zIGFyZSBub3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzZXJ2ZXIsIHNvIGRlY2xhcmUgdGhlIG1pZ3JhdGlvbgotIyBwYXRoIGZvciBpbi1wbGFjZSB1cGdyYWRlcy4KLQotUlJFUExBQ0VTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAotICAgICAgICAgICAgICAgICAgICIKLVJQUk9WSURFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKLSAgICAgICAgICAgICAgICAgICAiCi1SQ09ORkxJQ1RTXyR7UE59ID0gIiR7UE59LWV4dGVuc2lvbi1kcmkgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCi0gICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTguNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE4LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwMDU2NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE4LjQuYmIKQEAgLTAsMCArMSwyNyBAQAorcmVxdWlyZSB4c2VydmVyLXhvcmcuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9tdXNsLWFybS1pbmItb3V0Yi5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDg0MmRmZTNiZDlhOWQwNjJmMmZhMWRmOTEwNGE0NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNzg0NTliMmMzMWQ2MWExNTY1NWQ5NWE3MmZiNzk5MzBjNDgwYTZiYjhjZjkyMjZlNDhhMDdkZjhiMWQzMWM4IgorCisjIFRoZXNlIGV4dGVuc2lvbnMgYXJlIG5vdyBpbnRlZ3JhdGVkIGludG8gdGhlIHNlcnZlciwgc28gZGVjbGFyZSB0aGUgbWlncmF0aW9uCisjIHBhdGggZm9yIGluLXBsYWNlIHVwZ3JhZGVzLgorCitSUkVQTEFDRVNfJHtQTn0gPSAgIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgorUlBST1ZJREVTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKK1JDT05GTElDVFNfJHtQTn0gPSAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsLzMweFRzX0NhbGlicmF0ZS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE0MzYxNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZwotCi1pZiBbICIkSEFWRV9UT1VDSFNDUkVFTiIgPSAiMSIgXTsgdGhlbgotCW49MQotCXdoaWxlIFsgISAteiAkVFNMSUJfVFNERVZJQ0UgXSAmJiBbICEgLWYgL2V0Yy9wb2ludGVyY2FsIF0gJiYgWyAkbiAtbGUgNSBdCi0JZG8KLQkgICAvdXNyL2Jpbi94dHNjYWwKLQkgICBzbGVlcCAxCi0JICAgbj0kKCgkbisxKSkKLQlkb25lCi1maQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jaGFuZ2UtY3Jvc3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYTc3MTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0tLS0gdG1wL21haW4uYy5vcmlnCTIwMDctMDEtMDIgMTU6Mzk6NTQuMDAwMDAwMDAwICswMDAwCi0rKysgdG1wL21haW4uYwkyMDA3LTAxLTAyIDE1OjM5OjU0LjAwMDAwMDAwMCArMDAwMAotQEAgLTEzMSw5ICsxMzEsMTAgQEAKLSB7Ci0gICBYUmVuZGVyRmlsbFJlY3RhbmdsZXMgKGRweSwgUGljdE9wU3JjLCBwaWN0LCAmcmVjdF9jb2xvciwgcmVjdGFuZ2xlcywgMik7Ci0gCi0tICBYRmlsbEFyYyAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLCAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwgCi0tCSAgICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwKLS0JICAgIFdJRFRIICsgMSwgV0lEVEggKyAxLCAwLCAzNjAgKiA2NCk7Ci0rICBYRmlsbFJlY3RhbmdsZSAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLAotKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAotKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAotKwkJICBXSURUSCwgV0lEVEgpOwotIH0KLSAKLSB2b2lkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2xlYW51cC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2IwODU0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjIxICswLDAgQEAKLS0tLQotIE1ha2VmaWxlLmFtICB8ICAgIDkgLS0KLSBjb25maWd1cmUuYWMgfCAgICAzIAotIGdwZS1kaXN0LmFtICB8ICAgMTIgLS0tCi0gaDM2MDBfdHMuaCAgIHwgIDIxNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIG1haW4uYyAgICAgICB8ICAyMTAgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0geHRzY2FsLmluICAgIHwgICAxOSAtLS0tLQotIDYgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNDU1IGRlbGV0aW9ucygtKQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotSW5kZXg6IHh0c2NhbC0wLjYuMy94dHNjYWwuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB4dHNjYWwtMC42LjMub3JpZy94dHNjYWwuaW4JMjAwNC0wOS0xMCAyMDoxMDozNi4wMDAwMDAwMDAgKzAxMDAKLSsrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLUBAIC0xLDE5ICswLDAgQEAKLS0jIS9iaW4vc2gKLS0KLS1tb2R1bGVfaWQoKSB7Ci0tICAgICMgR2V0IG1vZGVsIG5hbWUKLS0gICAgZWNobyBgZ3JlcCAiXkhhcmR3YXJlIiAvcHJvYy9jcHVpbmZvIHwgc2VkIC1lICJzLy4qOiAqLy8iIHwgdHIgYS16IEEtWmAKLS19Ci0tCi0tY2FzZSBgbW9kdWxlX2lkYCBpbgotLQkiSFAgSVBBUSBIMzEwMCIgfCAiSFAgSVBBUSBIMzgwMCIgKQotLQkJQVJHUz0iLXJvdGF0ZSA5MCIgOzsKLS0JIkhQIElQQVEgSDM2MDAiIHwgIkhQIElQQVEgSDM3MDAiIHwgIkhQIElQQVEgSDM5MDAiIHwgKkNPTExJRSB8ICpQT09ETEUpCi0tCQlBUkdTPSItcm90YXRlIDI3MCIgOzsKLS0JIyBIMjIwMDogd29ya3Mgd2l0aG91dCByb3RhdGlvbgotLWVzYWMKLS0KLS0jIHRoZSB0aGluZ3Mgd2UgZG8gZm9yIGF1dG9jb25mCi0tcHJlZml4PUBwcmVmaXhACi0tZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAotLWV4ZWMgQGxpYmV4ZWNkaXJAL3h0c2NhbC5iaW4gJEFSR1MgJCoKLUluZGV4OiB4dHNjYWwtMC42LjMvbWFpbi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0geHRzY2FsLTAuNi4zLm9yaWcvbWFpbi5jCTIwMDctMDctMDEgMDE6MTI6NTIuMDAwMDAwMDAwICswMTAwCi0rKysgeHRzY2FsLTAuNi4zL21haW4uYwkyMDA3LTA3LTAxIDAxOjEyOjU1LjAwMDAwMDAwMCArMDEwMAotQEAgLTIyLDEyICsyMiwxMCBAQAotICNpbmNsdWRlIDxYMTEvWGxpYi5oPgotIAotICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+Ci0tI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyYW5kci5oPgotICNpbmNsdWRlIDxYMTEvWGZ0L1hmdC5oPgotICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy94Y2FsaWJyYXRlLmg+Ci0gI2luY2x1ZGUgPFgxMS9rZXlzeW0uaD4KLSAKLS0jaW5jbHVkZSAiaDM2MDBfdHMuaCIKLSAjaW5jbHVkZSAiY2FsaWJyYXRlLmgiCi0gCi0gRGlzcGxheSAqZHB5OwotQEAgLTQ1LDE1ICs0MywxMSBAQCBYZnRDb2xvciB4ZnRjb2w7Ci0gWGZ0RHJhdyAqeGZ0ZHJhdzsKLSBYZnRGb250ICp4ZnRmb250OwotIGludCBzY3JlZW5feCwgc2NyZWVuX3k7Ci0taW50IHRzX2ZkOwotIGludCBzYW1wbGVzOwotIFBpeG1hcCBiZ19waXhtYXA7Ci0gaW50IGZsYWdfZGVidWc7Ci0taW50IHJvdGF0aW9uID0gMDsKLSBpbnQgZXJyb3JfYmFzZSwgZXZlbnRfYmFzZTsKLSAKLS1pbnQgdXNpbmdfeGNhbGlicmF0ZTsKLS0KLSBpbnQgbW92aW5nOwotIAotICNkZWZpbmUgQ1JPU1NIQUlSX1NJWkUJMjUKLUBAIC02Myw3ICs1Nyw2IEBAIGludCBtb3Zpbmc7Ci0gI2RlZmluZSBFTk9VR0ggNQotICNkZWZpbmUgTUFYX1NBTVBMRVMgNDAKLSAKLS0jZGVmaW5lIFJBV19ERVZJQ0UgIi9kZXYvaDM2MDBfdHNyYXciCi0gI2RlZmluZSBGT05UTkFNRSAic2Fucy0xMCIKLSAKLSBzdHJ1Y3QgcG9pbnQgCi1AQCAtMjg3LDEyICsyODAsOCBAQCBzb3J0X2J5X3kgKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQgKmIpCi0gdm9pZAotIHNldF9jYWxpYnJhdGlvbiAoY2FsaWJyYXRpb24gKmNhbCkKLSB7Ci0tICBUU19DQUwgdGM7Ci0tICBpbnQgeHRyYW5zLCB5dHJhbnMsIHhzY2FsZSwgeXNjYWxlLCB4eXNjYWxlLCB5eHNjYWxlOwotICAgY2FsaWJyYXRpb24gb2NhbCA9ICpjYWw7Ci0gCi0tICBpZiAodXNpbmdfeGNhbGlicmF0ZSkKLS0gICAgewotICAgICAgIEZJTEUgKmZwOwotICAgICAgIGlmIChmbGFnX2RlYnVnKQotIAlwcmludGYgKCJjb25zdGFudHMgYXJlOiAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgY2FsLT5hWzFdLCBjYWwtPmFbMl0sIGNhbC0+YVswXSwgY2FsLT5hWzRdLCBjYWwtPmFbNV0sIGNhbC0+YVszXSwgY2FsLT5hWzZdKTsKLUBAIC0zMDQsMjkgKzI5Myw2IEBAIHNldF9jYWxpYnJhdGlvbiAoY2FsaWJyYXRpb24gKmNhbCkKLSAJfQotICAgICAgIGZwcmludGYgKGZwLCAiJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIGNhbC0+YVsxXSwgY2FsLT5hWzJdLCBjYWwtPmFbMF0sIGNhbC0+YVs0XSwgY2FsLT5hWzVdLCBjYWwtPmFbM10sIGNhbC0+YVs2XSk7Ci0gICAgICAgZmNsb3NlIChmcCk7IAotLSAgICAgIHJldHVybjsKLS0gICAgfQotLQotLSAgeHRyYW5zID0gY2FsLT5hWzBdIC8gY2FsLT5hWzZdOwotLSAgeXRyYW5zID0gY2FsLT5hWzNdIC8gY2FsLT5hWzZdOwotLSAgeHNjYWxlID0gY2FsLT5hWzFdICogMjU2IC8gY2FsLT5hWzZdOwotLSAgeXNjYWxlID0gY2FsLT5hWzVdICogMjU2IC8gY2FsLT5hWzZdOwotLSAgeHlzY2FsZSA9IGNhbC0+YVsyXSAqIDI1NiAvIGNhbC0+YVs2XTsKLS0gIHl4c2NhbGUgPSBjYWwtPmFbNF0gKiAyNTYgLyBjYWwtPmFbNl07Ci0tICAKLS0gIHRjLnh0cmFucyA9IHh0cmFuczsKLS0gIHRjLnl0cmFucyA9IHl0cmFuczsKLS0gIHRjLnhzY2FsZSA9IHhzY2FsZTsKLS0gIHRjLnlzY2FsZSA9IHlzY2FsZTsKLS0gIHRjLnh5c3dhcCA9IDA7Ci0tCi0tICBwcmludGYgKCIlZCAlZCAlZCAlZCAlZFxuIiwgdGMueHNjYWxlLCB0Yy54dHJhbnMsIHRjLnlzY2FsZSwgdGMueXRyYW5zLCB0Yy54eXN3YXApOwotLQotLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfU0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCi0tICAgIHsKLS0gICAgICBwZXJyb3IgKCJUU19TRVRfQ0FMIik7Ci0tICAgICAgZXhpdCAoMSk7Ci0tICAgIH0KLSB9Ci0gCi0gdm9pZAotQEAgLTM5OCw4MCArMzY0LDEzIEBAIGhhbmRsZV90c19ldmVudCAoaW50IHgsIGludCB5LCBpbnQgcHJlc3MKLSB9Ci0gCi0gdm9pZAotLXJlYWRfdHMgKHZvaWQpCi0tewotLSAgVFNfRVZFTlQgdHNfZXY7Ci0tICBpbnQgcjsKLS0KLS0gIHIgPSByZWFkICh0c19mZCwgJnRzX2V2LCBzaXplb2YgKHRzX2V2KSk7Ci0tICBpZiAociA9PSBzaXplb2YgKHRzX2V2KSkKLS0gICAgaGFuZGxlX3RzX2V2ZW50ICh0c19ldi54LCB0c19ldi55LCB0c19ldi5wcmVzc3VyZSk7Ci0tfQotLQotLXZvaWQKLS1kb19jYWwgKGNoYXIgKiphcmdzKQotLXsKLS0gIFRTX0NBTCB0YzsKLS0KLS0gIHRjLnhzY2FsZSA9IGF0b2kgKGFyZ3NbMF0pOwotLSAgdGMueHRyYW5zID0gYXRvaSAoYXJnc1sxXSk7Ci0tICB0Yy55c2NhbGUgPSBhdG9pIChhcmdzWzJdKTsKLS0gIHRjLnl0cmFucyA9IGF0b2kgKGFyZ3NbM10pOwotLSAgdGMueHlzd2FwID0gYXRvaSAoYXJnc1s0XSk7Ci0tCi0tICBpZiAoZmxhZ19kZWJ1ZykKLS0gICAgZnByaW50ZiAoc3RkZXJyLCAic2V0dGluZzogJWQgJWQgJWQgJWQgJWRcbiIsIAotLQkgICAgIHRjLnh0cmFucywgdGMueXRyYW5zLCB0Yy54c2NhbGUsIHRjLnlzY2FsZSwgdGMueHlzd2FwKTsKLS0gICAgCi0tICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19TRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKLS0gICAgewotLSAgICAgIHBlcnJvciAoIlRTX1NFVF9DQUwiKTsKLS0gICAgICBleGl0ICgxKTsKLS0gICAgfQotLSAgCi0tICBleGl0ICgwKTsKLS19Ci0tCi0tdm9pZAotLXNob3dfY2FsICh2b2lkKQotLXsKLS0gIFRTX0NBTCB0YzsKLS0KLS0gIGlmIChpb2N0bCAodHNfZmQsIFRTX0dFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQotLSAgICB7Ci0tICAgICAgcGVycm9yICgiVFNfR0VUX0NBTCIpOwotLSAgICAgIGV4aXQgKDEpOwotLSAgICB9Ci0tCi0tICBwcmludGYgKCIlZCAlZCAlZCAlZCAlZFxuIiwgdGMueHNjYWxlLCB0Yy54dHJhbnMsIHRjLnlzY2FsZSwgdGMueXRyYW5zLCB0Yy54eXN3YXApOwotLX0KLS0KLS12b2lkCi0gdXNhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpCi0gewotLSAgZnByaW50ZiAoc3RkZXJyLCAidXNhZ2U6ICVzIC12aWV3XG4iLCBuYW1lKTsKLS0gIGZwcmludGYgKHN0ZGVyciwgIiAgICAgICAlcyBbLXJvdGF0ZSA8MCB8IDkwIHwgMTgwIHwgMjcwPl1cbiIsIG5hbWUpOwotLSAgZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICVzIC1jYWwgPHhzPiA8eHQ+IDx5cz4gPHl0PiA8eHlzd2FwPlxuIiwgbmFtZSk7Ci0tCi0rICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgWy1kZWJ1Z11cbiIsIG5hbWUpOwotICAgZXhpdCAoMSk7Ci0gfQotIAotIGludAotLXhycl9zdXBwb3J0ZWQgKHZvaWQpCi0tewotLSAgaW50IHhycl9ldmVudF9iYXNlLCB4cnJfZXJyb3JfYmFzZTsKLS0gIGludCB4cnJfbWFqb3IsIHhycl9taW5vcjsKLS0KLS0gIGlmIChYUlJRdWVyeUV4dGVuc2lvbiAoZHB5LCAmeHJyX2V2ZW50X2Jhc2UsICZ4cnJfZXJyb3JfYmFzZSkgPT0gRmFsc2UKLS0gICAgICB8fCBYUlJRdWVyeVZlcnNpb24gKGRweSwgJnhycl9tYWpvciwgJnhycl9taW5vcikgPT0gMAotLSAgICAgIHx8IHhycl9tYWpvciAhPSAxCi0tICAgICAgfHwgeHJyX21pbm9yIDwgMSkKLS0gICAgcmV0dXJuIDA7Ci0tCi0tICByZXR1cm4gMTsKLS19Ci0tCi0taW50Ci0gbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSB7Ci0gICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotQEAgLTQ4MCwzMSArMzc5LDExIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gICBpbnQgbWF4X2ZkOwotICAgR0MgYmdfZ2M7Ci0gICBpbnQgaTsKLS0gIGludCBoYXZlX3hyYW5kcjsKLSAKLSAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0gICAgIHsKLS0gICAgICBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi12aWV3IikpCi0tCXsKLS0JICBzaG93X2NhbCAoKTsKLS0JICBleGl0ICgwKTsKLS0JfQotLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItZGVidWciKSkKLSsgICAgICBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1kZWJ1ZyIpKQotIAlmbGFnX2RlYnVnID0gMTsKLS0gICAgICBlbHNlIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWNhbCIpKQotLQl7Ci0tCSAgaWYgKGFyZ2MgPiAoaSArIDUpKQotLQkgICAgZG9fY2FsIChhcmd2ICsgaSArIDEpOwotLQkgIGVsc2UKLS0JICAgIHVzYWdlIChhcmd2WzBdKTsKLS0JfQotLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItcm90YXRlIikpCi0tCXsKLS0JICBpZiAoYXJnYyA+IChpICsgMSkpCi0tCSAgICByb3RhdGlvbiA9IGF0b2kgKGFyZ3ZbKytpXSk7Ci0tCSAgZWxzZQotLQkgICAgdXNhZ2UgKGFyZ3ZbMF0pOwotLQl9Ci0gICAgICAgZWxzZQotIAl1c2FnZSAoYXJndlswXSk7Ci0gICAgIH0KLUBAIC01MzEsNDggKzQxMCwxMSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAkgIGZwcmludGYgKHN0ZGVyciwgImZhaWxlZCB0byBzZXQgcmF3IG1vZGU6IGVycm9yICVkXG4iLCByKTsKLSAJICBleGl0ICgxKTsKLSAJfQotLQotLSAgICAgIHVzaW5nX3hjYWxpYnJhdGUgPSAxOwotLSAgICB9Ci0tCi0tICBoYXZlX3hyYW5kciA9IHhycl9zdXBwb3J0ZWQgKCk7Ci0tICBpZiAoaGF2ZV94cmFuZHIpCi0tICAgIHsKLS0gICAgICBYUlJTY3JlZW5Db25maWd1cmF0aW9uICpycl9zY3JlZW47Ci0tICAgICAgUm90YXRpb24gY3VycmVudF9yb3RhdGlvbjsKLS0KLS0gICAgICBpZiAoZmxhZ19kZWJ1ZykKLS0JZnByaW50ZiAoc3RkZXJyLCAiWFJBTkRSIGlzIHN1cHBvcnRlZFxuIik7Ci0tCi0tICAgICAgcnJfc2NyZWVuID0gWFJSR2V0U2NyZWVuSW5mbyAoZHB5LCBSb290V2luZG93IChkcHksIHNjcmVlbikpOwotLQotLSAgICAgIFhSUlJvdGF0aW9ucyAoZHB5LCBzY3JlZW4sICZjdXJyZW50X3JvdGF0aW9uKTsKLS0KLS0gICAgICBYUlJGcmVlU2NyZWVuQ29uZmlnSW5mbyAocnJfc2NyZWVuKTsKLS0KLS0gICAgICBpZiAoZmxhZ19kZWJ1ZykKLS0JZnByaW50ZiAoc3RkZXJyLCAiQ3VycmVudCBSQU5EUiByb3RhdGlvbiBpcyAlZFxuIiwgY3VycmVudF9yb3RhdGlvbik7Ci0tCi0tICAgICAgc3dpdGNoIChjdXJyZW50X3JvdGF0aW9uKQotLQl7Ci0tCWNhc2UgUlJfUm90YXRlXzI3MDoKLS0JICByb3RhdGlvbiArPSA5MDsKLS0JY2FzZSBSUl9Sb3RhdGVfMTgwOgotLQkgIHJvdGF0aW9uICs9IDkwOwotLQljYXNlIFJSX1JvdGF0ZV85MDoKLS0JICByb3RhdGlvbiArPSA5MDsKLS0JICByb3RhdGlvbiAlPSAzNjA7Ci0tCWNhc2UgUlJfUm90YXRlXzA6Ci0tCSAgYnJlYWs7Ci0tCWRlZmF1bHQ6Ci0tCSAgZnByaW50ZiAoc3RkZXJyLCAiVW5rbm93biBSQU5EUiByb3RhdGlvbjogJWRcbiIsIGN1cnJlbnRfcm90YXRpb24pOwotLQkgIGJyZWFrOwotLQl9Ci0gICAgIH0KLSAgIGVsc2UKLSAgICAgewotLSAgICAgIGlmIChmbGFnX2RlYnVnKQotLQlmcHJpbnRmIChzdGRlcnIsICJYUkFORFIgbm90IHN1cHBvcnRlZFxuIik7Ci0rICAgICAgcGVycm9yICgiWENBTElCUkFURSBleHRlbnNpb24gbWlzc2luZyIpOwotKyAgICAgIGV4aXQgKDEpOwotICAgICB9Ci0gCi0gICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gZmxhZ19kZWJ1ZyA/IEZhbHNlIDogVHJ1ZTsKLUBAIC02NjYsNDUgKzUwOCwxNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAotICAgZm9yIChpID0gMDsgaSA8IE5SX1BPSU5UUzsgaSsrKQotICAgICB7Ci0tICAgICAgc3dpdGNoIChyb3RhdGlvbikKLS0JewotLQljYXNlIDA6Ci0tCSAgY2FsLnhmYltpXSA9IGNhbC54c2NyW2ldOwotLQkgIGNhbC55ZmJbaV0gPSBjYWwueXNjcltpXTsKLS0JICBicmVhazsKLS0JY2FzZSA5MDoKLS0JICBjYWwueGZiW2ldID0gY2FsLnlzY3JbaV07Ci0tCSAgY2FsLnlmYltpXSA9IHNjcmVlbl94IC0gY2FsLnhzY3JbaV07Ci0tCSAgYnJlYWs7Ci0tCWNhc2UgMTgwOgotLQkgIGNhbC54ZmJbaV0gPSBzY3JlZW5feCAtIGNhbC54c2NyW2ldOwotLQkgIGNhbC55ZmJbaV0gPSBzY3JlZW5feSAtIGNhbC55c2NyW2ldOwotLQkgIGJyZWFrOwotLQljYXNlIDI3MDoKLS0JICBjYWwueGZiW2ldID0gc2NyZWVuX3kgLSBjYWwueXNjcltpXTsKLS0JICBjYWwueWZiW2ldID0gY2FsLnhzY3JbaV07Ci0tCSAgYnJlYWs7Ci0tCX0KLSsgICAgICBjYWwueGZiW2ldID0gY2FsLnhzY3JbaV07Ci0rICAgICAgY2FsLnlmYltpXSA9IGNhbC55c2NyW2ldOwotKyAgICAgIFhDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkIChkcHksICZjYWwueGZiW2ldLCAmY2FsLnlmYltpXSk7Ci0gCi0gICAgICAgaWYgKGZsYWdfZGVidWcpCi0tCXByaW50ZiAoInJvdGF0aW9uICVkOiAoJWQsJWQpIC0+ICglZCwlZClcbiIsIHJvdGF0aW9uLCAKLSsJcHJpbnRmICgicm90YXRpb24gY29udmVyc2lvbjogKCVkLCVkKSAtPiAoJWQsJWQpXG4iLAotIAkJY2FsLnhzY3JbaV0sIGNhbC55c2NyW2ldLCBjYWwueGZiW2ldLCBjYWwueWZiW2ldKTsKLSAgICAgfQotIAotICAgbmV4dF9ldmVudCAoKTsKLSAKLS0gIGlmICghdXNpbmdfeGNhbGlicmF0ZSkKLS0gICAgewotLSAgICAgIHRzX2ZkID0gb3BlbiAoUkFXX0RFVklDRSwgT19SRE9OTFkpOwotLSAgICAgIGlmICh0c19mZCA8IDApCi0tCXsKLS0JICBwZXJyb3IgKFJBV19ERVZJQ0UpOwotLQkgIGV4aXQgKDEpOwotLQl9Ci0tICAgIH0KLS0KLS0gIG1heF9mZCA9ICh4ZmQgPiB0c19mZCkgPyB4ZmQgOiB0c19mZDsKLS0KLSAgIGZvciAoOzspCi0gICAgIHsKLSAgICAgICBmZF9zZXQgZmRzOwotQEAgLTcxMywxMiArNTI3LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAKLSAgICAgICBGRF9aRVJPICgmZmRzKTsKLSAgICAgICBGRF9TRVQgKHhmZCwgJmZkcyk7Ci0tICAgICAgaWYgKHRzX2ZkICE9IC0xKQotLQlGRF9TRVQgKHRzX2ZkLCAmZmRzKTsKLSAKLS0gICAgICBzZWxlY3QgKG1heF9mZCArIDEsICZmZHMsIE5VTEwsIE5VTEwsIE5VTEwpOwotLSAgICAgIAotLSAgICAgIGlmICh0c19mZCAhPSAtMSAmJiBGRF9JU1NFVCAodHNfZmQsICZmZHMpKQotLQlyZWFkX3RzICgpOwotKyAgICAgIHNlbGVjdCAoeGZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgIH0KLSB9Ci0rCi1JbmRleDogeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA0LTA5LTEwIDIwOjExOjEyLjAwMDAwMDAwMCArMDEwMAotKysrIHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMJMjAwNy0wNy0wMSAwMToxMjo1NS4wMDAwMDAwMDAgKzAxMDAKLUBAIC05LDggKzksNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQotICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KLSBBQ19QUk9HX0NDCi0gCi0tUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeHJhbmRyIHhjYWxpYnJhdGUpCi0rUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSkKLSAKLSBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKLS1BQ19DT05GSUdfRklMRVMoW3h0c2NhbF0pCi0gQUNfT1VUUFVUCi1JbmRleDogeHRzY2FsLTAuNi4zL2dwZS1kaXN0LmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0geHRzY2FsLTAuNi4zLm9yaWcvZ3BlLWRpc3QuYW0JMjAwNC0wNi0wMiAyMzowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLUBAIC0xLDEyICswLDAgQEAKLS1DVlNUQUcgOj0gJChzaGVsbCBlY2hvICQoUEFDS0FHRSktJChWRVJTSU9OKSB8IHRyIFthLXouXSBbQS1aX10pCi0tCi0tZGlzdC11cGxvYWQ6IGRpc3QKLS0Jc2NwICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIuYnoyICQoVVNFUilAaGFuZGhlbGRzLm9yZzovaG9tZS9mdHAvcHViL3Byb2plY3RzL2dwZS9zb3VyY2UvCi0tCi0tdGFnOgotLQljdnMgdGFnICQoQ1ZTVEFHKQotLQotLXJldGFnOgotLQljdnMgdGFnIC1GICQoQ1ZTVEFHKQotLQotLXNvdXJjZTogdGFnIGRpc3QtdXBsb2FkCi1JbmRleDogeHRzY2FsLTAuNi4zL2gzNjAwX3RzLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB4dHNjYWwtMC42LjMub3JpZy9oMzYwMF90cy5oCTIwMDMtMDctMDUgMTc6Mjc6MTAuMDAwMDAwMDAwICswMTAwCi0rKysgL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCi1AQCAtMSwyMTYgKzAsMCBAQAotLS8qCi0tKgotLSogRHJpdmVyIGZvciB0aGUgSDM2MDAgVG91Y2ggU2NyZWVuIGFuZCBvdGhlciBBdG1lbCBjb250cm9sbGVkIGRldmljZXMuCi0tKgotLSogQ29weXJpZ2h0IDIwMDAgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uLgotLSoKLS0qIFVzZSBjb25zaXN0ZW50IHdpdGggdGhlIEdOVSBHUEwgaXMgcGVybWl0dGVkLAotLSogcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLS0qIHByZXNlcnZlZCBpbiBpdHMgZW50aXJldHkgaW4gYWxsIGNvcGllcyBhbmQgZGVyaXZlZCB3b3Jrcy4KLS0qCi0tKiBDT01QQVEgQ09NUFVURVIgQ09SUE9SQVRJT04gTUFLRVMgTk8gV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SIElNUExJRUQsCi0tKiBBUyBUTyBUSEUgVVNFRlVMTkVTUyBPUiBDT1JSRUNUTkVTUyBPRiBUSElTIENPREUgT1IgSVRTCi0tKiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgotLSoKLS0qIEF1dGhvcjogQ2hhcmxlcyBGbHlubi4KLS0qCi0tKi8KLS0KLS0KLS0jaWZuZGVmIF9fSDM2MDBfVFNfSF9fCi0tI2RlZmluZSBfX0gzNjAwX1RTX0hfXwotLQotLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotLQotLWVudW0gaDM2MDBfdHNfbWlub3JfZGV2aWNlcyB7Ci0tCVRTX01JTk9SICAgID0gMCwKLS0JVFNSQVdfTUlOT1IgPSAxLAotLQlLRVlfTUlOT1IgICA9IDIKLS19OwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uIHsKLS0gICAgICAgIGludCB4c2NhbGU7Ci0tICAgICAgICBpbnQgeHRyYW5zOwotLSAgICAgICAgaW50IHlzY2FsZTsKLS0gICAgICAgIGludCB5dHJhbnM7Ci0tICAgICAgICBpbnQgeHlzd2FwOwotLX0gVFNfQ0FMOwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2V2ZW50IHsKLS0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByZXNzdXJlOwotLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeDsKLS0gICAgICAgIHVuc2lnbmVkIHNob3J0IHk7Ci0tICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7Ci0tfSBUU19FVkVOVDsKLS0KLS0vKiBEZXByZWNhdGVkIC0gZG8gbm90IHVzZSAqLwotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX3JldHVybiB7Ci0tICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcmVzc3VyZTsKLS0gICAgICAgIHVuc2lnbmVkIHNob3J0IHg7Ci0tICAgICAgICB1bnNpZ25lZCBzaG9ydCB5OwotLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFkOwotLX0gVFNfUkVUOwotLQotLWVudW0gcG93ZXJfYnV0dG9uX21vZGUgewotLSAgIFBCTV9TVVNQRU5EICAgICAgICAgICA9IDAsCi0tICAgUEJNX0dFTkVSQVRFX0tFWVBSRVNTID0gMQotLX07Ci0tCi0tCi0tLyogKysrKysrKysrKysrKysgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAqLwotLQotLXR5cGVkZWYgc3RydWN0IHRoZXJtX2RldiB7Ci0tCXNob3J0IGRhdGE7Ci0tfSBUSEVSTV9ERVY7Ci0tCi0tI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fQUxLQUxJTkUgICAgICAgIDB4MDEKLS0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9OSUNEICAgICAgICAgICAgMHgwMgotLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05JTUggICAgICAgICAgICAweDAzCi0tI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTElPTiAgICAgICAgICAgIDB4MDQKLS0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9MSVBPTFkgICAgICAgICAgMHgwNQotLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05PVF9JTlNUQUxMRUQgICAweDA2Ci0tI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fVU5LTk9XTiAgICAgICAgIDB4ZmYKLS0KLS0vKiBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIGFwbV9iaW9zLmggZGVmaW5pdGlvbnMgKi8KLS0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19PRkZMSU5FCTB4MDAKLS0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19PTkxJTkUJMHgwMQotLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX0JBQ0tVUAkweDAyICAgLyogV2hhdCBkb2VzIHRoaXMgbWVhbj8gKi8KLS0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19VTktOT1dOCTB4ZmYKLS0KLS0vKiBUaGVzZSBiaXRmaWVsZHMgYXJlIHJhcmVseSAib3InZCIgdG9nZXRoZXIgKi8KLS0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0hJR0gJCTB4MDEKLS0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0xPVwkJMHgwMgotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ1JJVElDQUwJMHgwNAotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ0hBUkdJTkcJMHgwOAotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ0hBUkdFX01BSU4gICAweDEwCi0tI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19ERUFEICAgICAgICAgIDB4MjAgICAvKiBCYXR0ZXJ5IHdpbGwgbm90IGNoYXJnZSAqLwotLSNkZWZpbmUgSDM2MDBfQkFUVF9OT1RfSU5TVEFMTEVEICAgICAgICAweDIwICAgLyogRm9yIGV4cGFuc2lvbiBwYWNrIGJhdHRlcmllcyAqLwotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfRlVMTCAgICAgICAgICAweDQwICAgLyogQmF0dGVyeSBmdWxseSBjaGFyZ2VkIChhbmQgY29ubmVjdGVkIHRvIEFDKSAqLwotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfTk9CQVRUCTB4ODAKLS0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX1VOS05PV04JMHhmZgotLQotLXN0cnVjdCBiYXR0ZXJ5X2RhdGEgewotLQl1bnNpZ25lZCBjaGFyICBjaGVtaXN0cnk7Ci0tCXVuc2lnbmVkIGNoYXIgIHN0YXR1czsKLS0JdW5zaWduZWQgc2hvcnQgdm9sdGFnZTsgICAgLyogVm9sdGFnZSBmb3IgYmF0dGVyeSAjMDsgdW5rbm93biBmb3IgYmF0dGVyeSAjMSAqLwotLQl1bnNpZ25lZCBzaG9ydCBwZXJjZW50YWdlOyAvKiBQZXJjZW50YWdlIG9mIGZ1bGwgY2hhcmdlICovCi0tCXVuc2lnbmVkIHNob3J0IGxpZmU7ICAgICAgIC8qIExpZmUgcmVtYWluaW5nIGluIG1pbnV0ZXMgKi8KLS19OwotLQotLXN0cnVjdCBoMzYwMF9iYXR0ZXJ5IHsKLS0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgYWNfc3RhdHVzOwotLQl1bnNpZ25lZCBjaGFyICAgICAgIGJhdHRlcnlfY291bnQ7ICAvKiBIb3cgbWFueSBiYXR0ZXJpZXMgd2UgaGF2ZSAqLwotLQlzdHJ1Y3QgYmF0dGVyeV9kYXRhIGJhdHRlcnlbMl07Ci0tfTsKLS0KLS0vKiAtLS0tLS0tLSBFRVBST00gYW5kIFNQSSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0tLS0tLSovCi0tCi0tI2RlZmluZSBFRVBST01fUkRfQlVGU0laIDYJLyogRUVQUk9NIHJlYWRzIGFyZSAxNiBiaXRzICovCi0tI2RlZmluZSBFRVBST01fV1JfQlVGU0laIDUJLyogQWxsb3cgcm9vbSBmb3IgOGJpdCAnYWRkcicgZmllbGQgaW4gYnVmZmVyKi8gCi0tI2RlZmluZSBTUElfUkRfQlVGU0laCSAxNgkvKiBTUEkgcmVhZHMgYXJlIDggYml0cyAqLwotLSNkZWZpbmUgU1BJX1dSX0JVRlNJWgkgNwotLQotLS8qIFRoZSBFRVBST00gaXMgd2hlcmUgaW50ZXJuYWwgcHJvZ3JhbXMgYXJlIHN0b3JlZCBvbiB0aGUgQW10ZWwuCi0tICAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGVzZSB2YWx1ZXMgKi8KLS0KLS10eXBlZGVmIHN0cnVjdCBoMzYwMF9lZXByb21fcmVhZF9yZXF1ZXN0IHsKLS0JdW5zaWduZWQgY2hhciBhZGRyOyAgICAvKiA4Yml0IEFkZHJlc3MgT2Zmc2V0IDAtMjU1ICovCi0tCXVuc2lnbmVkIGNoYXIgbGVuOyAgICAgLyogTnVtYmVyIG9mIDE2Yml0IHdvcmRzIHRvIHJlYWQgMC0xMjggICovCi0tCXVuc2lnbmVkIHNob3J0IGJ1ZmZbRUVQUk9NX1JEX0JVRlNJWl07Ci0tfSBFRVBST01fUkVBRDsKLS0KLS10eXBlZGVmIHN0cnVjdCBoMzYwMF9lZXByb21fd3JpdGVfcmVxdWVzdCB7Ci0tCXVuc2lnbmVkIGNoYXIgbGVuOwkvKiB1c2VkIG9ubHkgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgKi8KLS0JdW5zaWduZWQgY2hhciBhZGRyOyAgICAvKiAwLTEyOCAgKi8KLS0JdW5zaWduZWQgc2hvcnQgYnVmZltFRVBST01fV1JfQlVGU0laXTsKLS19IEVFUFJPTV9XUklURTsKLS0KLS0vKiBUaGUgU1BJIGJ1cyBjb25uZWN0cyB0byBFRVBST01zIGxvY2F0ZWQgb24gc2xlZXZlcyBwbHVnZ2VkIGludG8KLS0gICB0aGUgaVBBUS4gIFlvdSBtYXkgd2FudCB0byByZWFkIHRoZXNlIHZhbHVlcyAgKi8KLS0KLS10eXBlZGVmIHN0cnVjdCBoMzYwMF9zcGlfcmVhZF9yZXF1ZXN0IHsKLS0JdW5zaWduZWQgc2hvcnQgYWRkcjsgICAgLyogMTZiaXQgQWRkcmVzcyBPZmZzZXQgMC0xMjggKi8KLS0JdW5zaWduZWQgY2hhciBsZW47ICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgKi8KLS0JdW5zaWduZWQgY2hhciBidWZmW1NQSV9SRF9CVUZTSVpdOwotLX0gU1BJX1JFQUQ7Ci0tCi0tI2RlZmluZSBTUElfUkVBRF9TVEFUVVNfQllURSAgMHhmZmZmICAgLyogVXNlIHRoaXMgYWRkcmVzcyB0byByZWFkIHRoZSBzdGF0dXMgYnl0ZSAqLwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3NwaV93cml0ZV9yZXF1ZXN0IHsKLS0JdW5zaWduZWQgc2hvcnQgbGVuOwkvKiB1c2VkIG9ubHkgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgKi8KLS0JdW5zaWduZWQgc2hvcnQgYWRkcjsJLyogdGhpcyAxNmJpdCBhZGRyZXNzIGFjY2Vzc2VzIGEgc2luZ2xlIGJ5dGUgKi8KLS0JdW5zaWduZWQgY2hhciAgYnVmZltTUElfV1JfQlVGU0laXTsKLS19IFNQSV9XUklURTsKLS0KLS0KLS0vKiAtLS0tLS0tLSBlbmQgb2YgRUVQUk9NIGFuZCBTUEkgSW50ZXJmYWNlcyAtLS0tLS0tLS0tLS0tLS0qLwotLQotLS8qIFVzZXIgc3BhY2Ugc3RydWN0dXJlcyBmb3IgSU9DVEwgY2FsbHMgKi8KLS0KLS10eXBlZGVmIHN0cnVjdCBoMzYwMF90c192ZXJzaW9uIHsKLS0JdW5zaWduZWQgY2hhciBob3N0X3ZlcnNpb25bOF07CS8qIGFzY2lpICJ4Lnl5IiAqLwotLQl1bnNpZ25lZCBjaGFyIHBhY2tfdmVyc2lvbls4XTsJLyogYXNjaWkgIngueXkiICovCi0tCXVuc2lnbmVkIGNoYXIgYm9vdF90eXBlOwkJLyogVE9ETyA/PyAqLwotLX0gVkVSX1JFVDsKLS0KLS10eXBlZGVmIHN0cnVjdCBoMzYwMF90c19sZWQgewotLSAgICAgICAgdW5zaWduZWQgY2hhciBPZmZPbkJsaW5rOyAgICAgICAvKiAwPW9mZiAxPW9uIDI9QmxpbmsgKi8KLS0gICAgICAgIHVuc2lnbmVkIGNoYXIgVG90YWxUaW1lOyAgICAgICAgLyogVW5pdHMgb2YgNSBzZWNvbmRzICovCi0tICAgICAgICB1bnNpZ25lZCBjaGFyIE9uVGltZTsgICAgICAgICAgIC8qIHVuaXRzIG9mIDEwMG0vcyAqLwotLSAgICAgICAgdW5zaWduZWQgY2hhciBPZmZUaW1lOyAgICAgICAgICAvKiB1bml0cyBvZiAxMDBtL3MgKi8KLS19IExFRF9JTjsKLS0KLS1lbnVtIGZsaXRlX21vZGUgewotLSAgICAgICAgRkxJVEVfTU9ERTEgPSAxLAotLQlGTElURV9BVVRPX01PREUgICA9IDEsICAgICAvKiBmb3IgcmVmZXJlbmNlIG9ubHkgKi8KLS0JRkxJVEVfTUFOVUFMX01PREUgPSAyLCAgICAgLyogVXNlIHRoaXMgbm9ybWFsbHk/ICovCi0tCUZMSVRFX0dFVF9MSUdIVF9TRU5TT1IgPSAzIC8qIFJldHVybnMgbGlnaHQgcmVhZGluZyBpbiAiYnJpZ2h0bmVzcyIgZmllbGQgKi8KLS19OwotLWVudW0gZmxpdGVfcHdyIHsKLS0gICAgICAgIEZMSVRFX1BXUl9PRkYgPSAwLAotLSAgICAgICAgRkxJVEVfUFdSX09OICA9IDEKLS19OwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2ZsaXRlIHsKLS0gICAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZTsKLS0gICAgICAgIHVuc2lnbmVkIGNoYXIgcHdyOwotLSAgICAgICAgdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOwotLX0gRkxJVEVfSU47Ci0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBVcGRhdGVkICJ1bml2ZXJzYWwiIHN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKi8KLS0KLS0vKiBTZXRzIGJhY2tsaWdodCBmb3IgYm90aCBIMzEwMCBhbmQgSDM2MDAgbW9kZWxzIC0gdGVjaG5pY2FsbHkgImZyb250bGlnaHQiIGZvciBIMzYwMCAqLwotLXN0cnVjdCBoMzYwMF90c19iYWNrbGlnaHQgewotLQllbnVtIGZsaXRlX3B3ciBwb3dlcjsgICAgICAgICAgLyogMCA9IG9mZiwgMSA9IG9uICovCi0tCXVuc2lnbmVkIGNoYXIgIGJyaWdodG5lc3M7ICAgICAvKiAwIC0gMjU1ICAgICAgICAgKi8KLS19OwotLQotLXN0cnVjdCBoMzYwMF90c19jb250cmFzdCB7ICAgICAgICAgICAgLyogT25seSB1c2VmdWwgb24gSDMxMDAgbW9kZWwgKi8KLS0JdW5zaWduZWQgY2hhciBjb250cmFzdDsgICAgICAgLyogMCAtIDI1NSAqLwotLX07Ci0tCi0tLyogSU9DVEwgY21kcyAgdXNlciBvciBrZXJuZWwgc3BhY2UgKi8KLS0KLS0vKiBVc2UgJ2YnIGFzIG1hZ2ljIG51bWJlciAqLwotLSNkZWZpbmUgSU9DX0gzNjAwX1RTX01BR0lDICAnZicKLS0KLS0vKiBUT0RPOiBTb21lIG9mIHRoZXNlIElPV1IgdmFsdWVzIGFyZSBqdXN0IHBsYWluIHdyb25nICovCi0tI2RlZmluZSBHRVRfVkVSU0lPTgkJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICAxLCBzdHJ1Y3QgaDM2MDBfdHNfdmVyc2lvbiApCi0tI2RlZmluZSBSRUFEX0VFUFJPTQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyLCBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3JlYWRfcmVxdWVzdCkKLS0jZGVmaW5lIFdSSVRFX0VFUFJPTQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCAzLCBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3dyaXRlX3JlcXVlc3QpCi0tI2RlZmluZSBHRVRfVEhFUk1BTAkJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICA0LCBzdHJ1Y3QgdGhlcm1fZGV2KQotLSNkZWZpbmUgTEVEX09OCQkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsICA1LCBzdHJ1Y3QgaDM2MDBfdHNfbGVkKQotLSNkZWZpbmUgR0VUX0JBVFRFUllfU1RBVFVTCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAgNiwgc3RydWN0IGgzNjAwX2JhdHRlcnkpCi0tI2RlZmluZSBGTElURV9PTgkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsICA3LCBzdHJ1Y3QgaDM2MDBfdHNfZmxpdGUpCi0tI2RlZmluZSBSRUFEX1NQSQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCA4LCBzdHJ1Y3QgaDM2MDBfc3BpX3JlYWRfcmVxdWVzdCkKLS0jZGVmaW5lIFdSSVRFX1NQSQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCA5LCBzdHJ1Y3QgaDM2MDBfc3BpX3dyaXRlX3JlcXVlc3QpCi0tI2RlZmluZSBUU19HRVRfQ0FMCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgMTAsIHN0cnVjdCBoMzYwMF90c19jYWxpYnJhdGlvbikKLS0jZGVmaW5lIFRTX1NFVF9DQUwJCV9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAxMSwgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uKQotLQotLS8qIE5ldyBJT0NUTCBpbnRlcmZhY2VzIC0gZGVmaW5lZCB0byBiZSBtb3JlIHVzZXIgZnJpZW5kbHkgKi8KLS0jZGVmaW5lIFRTX0dFVF9CQUNLTElHSFQgICAgICAgIF9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyMCwgc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCkKLS0jZGVmaW5lIFRTX1NFVF9CQUNLTElHSFQgICAgICAgIF9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAyMCwgc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCkKLS0jZGVmaW5lIFRTX0dFVF9DT05UUkFTVCAgICAgICAgIF9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyMSwgc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0KQotLSNkZWZpbmUgVFNfU0VUX0NPTlRSQVNUICAgICAgICAgX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDIxLCBzdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QpCi0tCi0tI2VuZGlmCi1JbmRleDogeHRzY2FsLTAuNi4zL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0geHRzY2FsLTAuNi4zLm9yaWcvTWFrZWZpbGUuYW0JMjAwNC0wNi0wMiAyMzowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyB4dHNjYWwtMC42LjMvTWFrZWZpbGUuYW0JMjAwNy0wNy0wMiAxMjo1MTowMi4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xLDExICsxLDggQEAKLS1saWJleGVjX1BST0dSQU1TID0geHRzY2FsLmJpbgotLWJpbl9TQ1JJUFRTID0geHRzY2FsCi0rYmluX1BST0dSQU1TID0geHRzY2FsCi0gCi0teHRzY2FsX2Jpbl9TT1VSQ0VTID0gbWFpbi5jIGNhbGlicmF0ZS5jIGNhbGlicmF0ZS5oIGgzNjAwX3RzLmgKLSt4dHNjYWxfU09VUkNFUyA9IG1haW4uYyBjYWxpYnJhdGUuYyBjYWxpYnJhdGUuaAotIAotLXh0c2NhbF9iaW5fTERBREQgPSBAWFRTQ0FMX0xJQlNACi0reHRzY2FsX0xEQUREID0gQFhUU0NBTF9MSUJTQAotIAotIElOQ0xVREVTID0gQFhUU0NBTF9DRkxBR1NAIC1ETlJfUE9JTlRTPTUKLSAKLS1pbmNsdWRlIGdwZS1kaXN0LmFtCi0tCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTQ1MzNmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotYWZ0ZXIgZ2NjIGxpbmtpbmcgaGFzIGNoYW5nZWQsIGFsbCB0aGUgbGlicmFyaWVzIG11c3QgYmUgZXhwbGljaXRlbHkgc3BlY2lmaWVkIAotVGhpcyBwYXRjaCBhdm9pZHMgdGhpcyBsaW5raW5nIGVycm9yOgotCi18IGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4ICAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbyB4dHNjYWwgbWFpbi5vIGNhbGlicmF0ZS5vIC1sWDExIC1sWGZ0IC1sWGV4dCAtbFhjYWxpYnJhdGVeTQotfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWJleGVjL2k1ODYtcG9reS1saW51eC9nY2MvaTU4Ni1wb2t5LWxpbnV4LzQuNS4xL2xkOiBePzogaW52YWxpZCBEU08gZm9yIHN5bWJvbCBgWFJlbmRlckNoYW5nZVBpY3R1cmUnIGRlZmluaXRpb25eTQotfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4L3Vzci9saWIvbGliWHJlbmRlci5zby4xOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBCYWQgdmFsdWVeTQotfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c15NCi18IG1ha2U6ICoqKiBbeHRzY2FsXSBFcnJvciAxCi0KLU5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+Ci1EYXRlOiAyMDExLzAxLzExCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMKLUBAIC05LDcgKzksNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQotICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KLSBBQ19QUk9HX0NDCi0gCi0tUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSkKLStQS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlIHhyZW5kZXIpCi0gCi0gQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZV0pCi0gQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZmRkZjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsXzAuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgotCi1ERVNDUklQVElPTiA9ICJCYXNpYyB0b3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgotCi1IT01FUEFHRSA9ICJodHRwOi8vZ3BlLmxpbnV4dG9nby5vcmciCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmxpbnV4dG9nby5vcmciCi1MSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MTA7bWQ1PTg3MjFiY2IwOGFlOWYyNGU1ZmU0YzgyOTQxODczYzg3IgotCi1TRUNUSU9OID0gIngxMS9iYXNlIgotCi1ERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhmdCBsaWJ4Y2FsaWJyYXRlIgotCi1QUiA9ICJyMTMiCi0KLVNSQ19VUkkgPSAiJHtHUEVfTUlSUk9SfS94dHNjYWwtJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9jaGFuZ2UtY3Jvc3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY2xlYW51cC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzMweFRzX0NhbGlicmF0ZS5zaCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjliY2FiODBiNDc0ZDU0NTQ0NzdkMWNhMTY2YTY4YzM0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3YjlkYzIyMDNkZTliMTcwNmNhMzlmYTZjYTgwZWNhYjg4MDc5MDllYzkwMWM0YTM0NWI4ZTQxMTc4ODAwYTEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLSMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KLSAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8zMHhUc19DYWxpYnJhdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYuaW5jCmluZGV4IGFkZTdlZjkuLjE2MGFiMzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYuaW5jCkBAIC0zLDcgKzMsOSBAQAogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgogCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5nbmEub3JnL2NyeXB0b2Rldi1saW51eC9jcnlwdG9kZXYtbGludXgtJHtQVn0udGFyLmd6IgorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuZ25hLm9yZy9jcnlwdG9kZXYtbGludXgvY3J5cHRvZGV2LWxpbnV4LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wNmQ2YjU2MGM2ZTQ1ZGMzMTdkYWU0N2M3NDcwNmZhNDNmNGEzMWQ4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NiMTg2ZjY4MjY3OTM4M2U4YjU4MDYyNDA5Mjc5MDM3MzBjZTg1ZDkucGF0Y2giCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICIwMjY0NGNjNGNkMDIzMDFlMGI1MDNhMzMyZWIyZjBiNSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI2N2ZhYmRlOWZiNjdiMjg2YTk2YzRmNDViNTk0YjBlY2NkMGY3NjFiNDk1NzA1YzE4ZjJhZTk0NjFiODMxMzc2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzA2ZDZiNTYwYzZlNDVkYzMxN2RhZTQ3Yzc0NzA2ZmE0M2Y0YTMxZDgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDZkNmI1NjBjNmU0NWRjMzE3ZGFlNDdjNzQ3MDZmYTQzZjRhMzFkOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjU1NmUxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzA2ZDZiNTYwYzZlNDVkYzMxN2RhZTQ3Yzc0NzA2ZmE0M2Y0YTMxZDgucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBmMTRiNDcwNmIwZDA0OTg4ZTdlNWJjOGM0ZDJhZWZlZjlmMDI5ZDlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBXZWlzZXIgPG1pY2hhZWwud2Vpc2VyQGdteC5kZT4KK0RhdGU6IEZyaSwgNSBBdWcgMjAxNiAxODo0Mzo1NSArMDIwMAorU3ViamVjdDogW1BBVENIXSBBZGp1c3QgdG8gcmVjZW50IHVzZXIgcGFnZSBBUEkgY2hhbmdlcworCis0LjYuMCBiYXNpY2FsbHkgcmVuYW1lZCBnZXRfdXNlcl9wYWdlcygpIHRvIGdldF91c2VyX3BhZ2VzX3JlbW90ZSgpIGFuZAoraW50cm9kdWNlZCBhIG5ldyBnZXRfdXNlcl9wYWdlcygpIHRoYXQgYWx3YXlzIHdvcmtzIG9uIHRoZSBjdXJyZW50Cit0YXNrLlsxXSBEaXN0aW5ndWlzaCB0aGUgdHdvIEFQSXMgYmFzZWQgb24ga2VybmVsIHZlcnNpb24gd2UncmUKK2NvbXBpbGluZyBmb3IuCisKK0Fsc28sIHRoZXJlIHNlZW1zIHRvIGhhdmUgYmVlbiBhIG1hc3NpdmUgY2xlYW5zaW5nIG9mCitwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkgaW4gZmF2b3VyIG9mIHB1dF9wYWdlKHBhZ2UpWzJdIHdoaWNoIHdhcyBhbgorYWxpYXMgZm9yIHB1dF9wYWdlKHBhZ2UpWzNdIHNpbmNlIDIuNi4wLiBCZWZvcmUgdGhhdCBiZWdpbm5pbmcgd2l0aAorMi40LjAgYm90aCBwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkgYW5kIHB1dF9wYWdlKHBhZ2UpIGhhdmUgYmVlbiBhbGlhc2VzCitmb3IgX19mcmVlX3BhZ2UocGFnZSkuIFNvIHVzaW5nIHB1dF9wYWdlKCkgaW5zdGVhZCBvZgorcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpIHdpbGwgcHJvZHVjZSBpZGVudGljYWwgY29kZSBmb3IgYW55dGhpbmcgYWZ0ZXIKKzIuNC4wLgorCitbMV0gaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTYvMi8xMC81NTUKK1syXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1mc2RldmVsL21zZzk1OTIzLmh0bWwKK1szXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1mc2RldmVsL21zZzk1OTIyLmh0bWwKKy0tLQorIHpjLmMgfCA5ICsrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gbWFzdGVyIGZvciA0Ljgga2VybmVsc10KKworSW5kZXg6IGNyeXB0b2Rldi1saW51eC0xLjgvemMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyeXB0b2Rldi1saW51eC0xLjgub3JpZy96Yy5jCisrKysgY3J5cHRvZGV2LWxpbnV4LTEuOC96Yy5jCitAQCAtNTksNyArNTksMTIgQEAgaW50IF9fZ2V0X3VzZXJidWYodWludDhfdCBfX3VzZXIgKmFkZHIsCisgCX0KKyAKKyAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworLQlyZXQgPSBnZXRfdXNlcl9wYWdlcyh0YXNrLCBtbSwKKysjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LCA2LCAwKSkKKysJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKAorKyNlbHNlCisrCXJldCA9IGdldF91c2VyX3BhZ2VzKAorKyNlbmRpZgorKwkJCXRhc2ssIG1tLAorIAkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIHBnY291bnQsIHdyaXRlLCAwLCBwZywgTlVMTCk7CisgCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisgCWlmIChyZXQgIT0gcGdjb3VudCkKK0BAIC0xMTksNyArMTI0LDcgQEAgdm9pZCByZWxlYXNlX3VzZXJfcGFnZXMoc3RydWN0IGNzZXNzaW9uCisgCQllbHNlCisgCQkJc2VzLT5yZWFkb25seV9wYWdlcy0tOworIAorLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHNlcy0+cGFnZXNbaV0pOworKwkJcHV0X3BhZ2Uoc2VzLT5wYWdlc1tpXSk7CisgCX0KKyAJc2VzLT51c2VkX3BhZ2VzID0gMDsKKyB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvY2IxODZmNjgyNjc5MzgzZThiNTgwNjI0MDkyNzkwMzczMGNlODVkOS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy9jYjE4NmY2ODI2NzkzODNlOGI1ODA2MjQwOTI3OTAzNzMwY2U4NWQ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMGVhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvY2IxODZmNjgyNjc5MzgzZThiNTgwNjI0MDkyNzkwMzczMGNlODVkOS5wYXRjaApAQCAtMCwwICsxLDI3OSBAQAorRnJvbSBjYjE4NmY2ODI2NzkzODNlOGI1ODA2MjQwOTI3OTAzNzMwY2U4NWQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBXZWlzZXIgPG1pY2hhZWwud2Vpc2VyQGdteC5kZT4KK0RhdGU6IEZyaSwgNSBBdWcgMjAxNiAxNzoyNjoyNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBTdXBwb3J0IHNrY2lwaGVyIGluIGFkZGl0aW9uIHRvIGFibGtjaXBoZXIgQVBJCisKK1RoZSBhYmxrY2lwaGVyIEFQSSBpcyBiZWluZyBwaGFzZWQgb3V0WzFdLiBUaGUgdW5pZmllZCBza2NpcGhlciBBUEkKK3NlZW1zIHRvIGhhdmUgbWFkZSBpdHMgZW50cnkgd2l0aCA0LjMuWzMsIDRdIEJ5IHdoYXQgY2FuIGJlIHNlZW4gZnJvbQorbWlncmF0aW9uIHBhdGNoZXNbMS5mZi5dLCBpdCdzIGEgZHJvcC1pbiByZXBsYWNlbWVudC4KKworQWxzbywgZGVhbGxvY2F0b3JzIHN1Y2ggYXMgY3J5cHRvX2ZyZWVfc2tjaXBoZXIoKSBhcmUgTlVMTC1zYWZlIG5vd1syXS4KKworQWRkIGEgbmV3IGhlYWRlciBjaXBoZXJhcGkuaCB0byBhaWQgbWlncmF0aW9uIGZyb20gYWJsa2NpcGhlciB0byBza2NpcGhlciBhbmQKK3JldGFpbiBzdXBwb3J0IGZvciBvbGQga2VybmVscy4gTWFrZSBpdCBkZWNpZGUgd2hpY2ggQVBJIHRvIHVzZSBhbmQgcHJvdmlkZQorYXBwcm9wcmlhdGUgZnVuY3Rpb24gY2FsbHMgYW5kIHR5cGUgZGVmaW5pdGlvbnMuIFNpbmNlIHRoZSBhYmxrY2lwaGVyIGFuZAorc2tjaXBoZXIgQVBJcyBhcmUgc28gc2ltaWxhciwgdGhvc2UgYXJlIG1haW5seSBkZWZpbmVzIGZvciBjb3JyZXNwb25kaW5nCitwc2V1ZG8tZnVuY3Rpb25zIGluIG5hbWVzcGFjZSBjcnlwdG9kZXZfIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGVpciBBUEkKK2NvdW50ZXJwYXJ0cy4KKworQ29tcGlsZXMgYW5kIHdvcmtzIChpLmUuIGNoZWNrcyBwYXNzKSB3aXRoIERlYmlhbiB0ZXN0aW5nIDQuNi40IGtlcm5lbAorYXMgd2VsbCBhcyA0LjgtcmMyKyBMaW51cyBnaXQgdHJlZSBhcyBvZiB0b2RheS4gKEJvdGggcmVxdWlyZSBhIGZpeCBmb3IKK2NoYW5nZWQgcGFnZSBhY2Nlc3MgQVBJWzVdLikKKworWzFdIGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LWNyeXB0by9tc2cxODEzMy5odG1sCitbMl0gaHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtY3J5cHRvL21zZzE4MTU0Lmh0bWwsIGxpbmUgMTIwCitbM10gaHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtY3J5cHRvL21zZzE2MzczLmh0bWwKK1s0XSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1jcnlwdG8vbXNnMTYyOTQuaHRtbAorWzVdIGh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG9kZXYtbGludXgvY3J5cHRvZGV2LWxpbnV4L3B1bGwvMTQKKy0tLQorIGNpcGhlcmFwaS5oIHwgNjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgY3J5cHRsaWIuYyAgfCA0MCArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgY3J5cHRsaWIuaCAgfCAgNiArKysrLS0KKyBpb2N0bC5jICAgICB8ICA0ICsrLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDg0IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjaXBoZXJhcGkuaAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIG1hc3RlciBmb3IgNC44IGtlcm5lbHNdCisKK0luZGV4OiBjcnlwdG9kZXYtbGludXgtMS44L2NpcGhlcmFwaS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgY3J5cHRvZGV2LWxpbnV4LTEuOC9jaXBoZXJhcGkuaAorQEAgLTAsMCArMSw2MCBAQAorKyNpZm5kZWYgQ0lQSEVSQVBJX0gKKysjIGRlZmluZSBDSVBIRVJBUElfSAorKworKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisrCisrI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTig0LCA4LCAwKSkKKysjIGluY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorKworK3R5cGVkZWYgc3RydWN0IGFibGtjaXBoZXJfYWxnIGNyeXB0b2Rldl9ibGtjaXBoZXJfYWxnX3Q7CisrdHlwZWRlZiBzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfdDsKKyt0eXBlZGVmIHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3Q7CisrCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19hbGxvY19ibGtjaXBoZXIgY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9hbGcgY3J5cHRvX2FibGtjaXBoZXJfYWxnCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplIGNyeXB0b19hYmxrY2lwaGVyX2Jsb2Nrc2l6ZQorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9hbGlnbm1hc2sgY3J5cHRvX2FibGtjaXBoZXJfYWxpZ25tYXNrCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfc2V0a2V5IGNyeXB0b19hYmxrY2lwaGVyX3NldGtleQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9kZXZfY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3QgKmMpIHsKKysJaWYgKGMpCisrCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGMpOworK30KKysKKysjIGRlZmluZSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfYWxsb2MgYWJsa2NpcGhlcl9yZXF1ZXN0X2FsbG9jCisrIyBkZWZpbmUgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayBhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrCisrCisrc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9mcmVlKGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF90ICpyKSB7CisrCWlmIChyKQorKwkJYWJsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUocik7CisrfQorKworKyMgZGVmaW5lIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQgYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdAorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQgY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdAorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQgY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdAorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3RmbSBjcnlwdG9fYWJsa2NpcGhlcl90Zm0KKysjZWxzZQorKyNpbmNsdWRlIDxjcnlwdG8vc2tjaXBoZXIuaD4KKysKKyt0eXBlZGVmIHN0cnVjdCBza2NpcGhlcl9hbGcgY3J5cHRvZGV2X2Jsa2NpcGhlcl9hbGdfdDsKKyt0eXBlZGVmIHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfdDsKKyt0eXBlZGVmIHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0IGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF90OworKworKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYWxsb2NfYmxrY2lwaGVyIGNyeXB0b19hbGxvY19za2NpcGhlcgorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2FsZyBjcnlwdG9fc2tjaXBoZXJfYWxnCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplIGNyeXB0b19za2NpcGhlcl9ibG9ja3NpemUKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUgY3J5cHRvX3NrY2lwaGVyX2l2c2l6ZQorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2FsaWdubWFzayBjcnlwdG9fc2tjaXBoZXJfYWxpZ25tYXNrCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfc2V0a2V5IGNyeXB0b19za2NpcGhlcl9zZXRrZXkKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2ZyZWVfYmxrY2lwaGVyIGNyeXB0b19mcmVlX3NrY2lwaGVyCisrIyBkZWZpbmUgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X2FsbG9jIHNrY2lwaGVyX3JlcXVlc3RfYWxsb2MKKysjIGRlZmluZSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrIHNrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrCisrIyBkZWZpbmUgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUgc2tjaXBoZXJfcmVxdWVzdF9mcmVlCisrIyBkZWZpbmUgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdCBza2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdAorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQgY3J5cHRvX3NrY2lwaGVyX2VuY3J5cHQKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0IGNyeXB0b19za2NpcGhlcl9kZWNyeXB0CisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfdGZtIGNyeXB0b19za2NpcGhlcl90Zm0KKysjZW5kaWYKKysKKysjZW5kaWYKK0luZGV4OiBjcnlwdG9kZXYtbGludXgtMS44L2NyeXB0bGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcnlwdG9kZXYtbGludXgtMS44Lm9yaWcvY3J5cHRsaWIuYworKysrIGNyeXB0b2Rldi1saW51eC0xLjgvY3J5cHRsaWIuYworQEAgLTIzLDcgKzIzLDYgQEAKKyAgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgICovCisgCistI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorICNpbmNsdWRlIDxsaW51eC9tbS5oPgorICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisgI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CitAQCAtMzcsNiArMzYsNyBAQAorICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2F1dGhlbmMuaD4KKyAjaW5jbHVkZSAiY3J5cHRvZGV2X2ludC5oIgorKyNpbmNsdWRlICJjaXBoZXJhcGkuaCIKKyAKKyAKKyBzdHJ1Y3QgY3J5cHRvZGV2X3Jlc3VsdCB7CitAQCAtMTMzLDE1ICsxMzMsMTUgQEAgaW50IGNyeXB0b2Rldl9jaXBoZXJfaW5pdChzdHJ1Y3QgY2lwaGVyXworIAlpbnQgcmV0OworIAorIAlpZiAoYWVhZCA9PSAwKSB7CistCQlzdHJ1Y3QgYWJsa2NpcGhlcl9hbGcgKmFsZzsKKysJCWNyeXB0b2Rldl9ibGtjaXBoZXJfYWxnX3QgKmFsZzsKKyAKKy0JCW91dC0+YXN5bmMucyA9IGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKGFsZ19uYW1lLCAwLCAwKTsKKysJCW91dC0+YXN5bmMucyA9IGNyeXB0b2Rldl9jcnlwdG9fYWxsb2NfYmxrY2lwaGVyKGFsZ19uYW1lLCAwLCAwKTsKKyAJCWlmICh1bmxpa2VseShJU19FUlIob3V0LT5hc3luYy5zKSkpIHsKKyAJCQlkZGVidWcoMSwgIkZhaWxlZCB0byBsb2FkIGNpcGhlciAlcyIsIGFsZ19uYW1lKTsKKyAJCQkJcmV0dXJuIC1FSU5WQUw7CisgCQl9CisgCistCQlhbGcgPSBjcnlwdG9fYWJsa2NpcGhlcl9hbGcob3V0LT5hc3luYy5zKTsKKysJCWFsZyA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2FsZyhvdXQtPmFzeW5jLnMpOworIAkJaWYgKGFsZyAhPSBOVUxMKSB7CisgCQkJLyogV2FzIGNvcnJlY3Qga2V5IGxlbmd0aCBzdXBwbGllZD8gKi8KKyAJCQlpZiAoYWxnLT5tYXhfa2V5c2l6ZSA+IDAgJiYKK0BAIC0xNTQsMTEgKzE1NCwxMSBAQCBpbnQgY3J5cHRvZGV2X2NpcGhlcl9pbml0KHN0cnVjdCBjaXBoZXJfCisgCQkJfQorIAkJfQorIAorLQkJb3V0LT5ibG9ja3NpemUgPSBjcnlwdG9fYWJsa2NpcGhlcl9ibG9ja3NpemUob3V0LT5hc3luYy5zKTsKKy0JCW91dC0+aXZzaXplID0gY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKG91dC0+YXN5bmMucyk7CistCQlvdXQtPmFsaWdubWFzayA9IGNyeXB0b19hYmxrY2lwaGVyX2FsaWdubWFzayhvdXQtPmFzeW5jLnMpOworKwkJb3V0LT5ibG9ja3NpemUgPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUob3V0LT5hc3luYy5zKTsKKysJCW91dC0+aXZzaXplID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfaXZzaXplKG91dC0+YXN5bmMucyk7CisrCQlvdXQtPmFsaWdubWFzayA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2FsaWdubWFzayhvdXQtPmFzeW5jLnMpOworIAorLQkJcmV0ID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KG91dC0+YXN5bmMucywga2V5cCwga2V5bGVuKTsKKysJCXJldCA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3NldGtleShvdXQtPmFzeW5jLnMsIGtleXAsIGtleWxlbik7CisgCX0gZWxzZSB7CisgCQlvdXQtPmFzeW5jLmFzID0gY3J5cHRvX2FsbG9jX2FlYWQoYWxnX25hbWUsIDAsIDApOworIAkJaWYgKHVubGlrZWx5KElTX0VSUihvdXQtPmFzeW5jLmFzKSkpIHsKK0BAIC0xOTEsMTQgKzE5MSwxNCBAQCBpbnQgY3J5cHRvZGV2X2NpcGhlcl9pbml0KHN0cnVjdCBjaXBoZXJfCisgCWluaXRfY29tcGxldGlvbigmb3V0LT5hc3luYy5yZXN1bHQtPmNvbXBsZXRpb24pOworIAorIAlpZiAoYWVhZCA9PSAwKSB7CistCQlvdXQtPmFzeW5jLnJlcXVlc3QgPSBhYmxrY2lwaGVyX3JlcXVlc3RfYWxsb2Mob3V0LT5hc3luYy5zLCBHRlBfS0VSTkVMKTsKKysJCW91dC0+YXN5bmMucmVxdWVzdCA9IGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9hbGxvYyhvdXQtPmFzeW5jLnMsIEdGUF9LRVJORUwpOworIAkJaWYgKHVubGlrZWx5KCFvdXQtPmFzeW5jLnJlcXVlc3QpKSB7CisgCQkJZGVycigxLCAiZXJyb3IgYWxsb2NhdGluZyBhc3luYyBjcnlwdG8gcmVxdWVzdCIpOworIAkJCXJldCA9IC1FTk9NRU07CisgCQkJZ290byBlcnJvcjsKKyAJCX0KKyAKKy0JCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2sob3V0LT5hc3luYy5yZXF1ZXN0LAorKwkJY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhvdXQtPmFzeW5jLnJlcXVlc3QsCisgCQkJCQlDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKKyAJCQkJCWNyeXB0b2Rldl9jb21wbGV0ZSwgb3V0LT5hc3luYy5yZXN1bHQpOworIAl9IGVsc2UgeworQEAgLTIxOCwxMCArMjE4LDggQEAgaW50IGNyeXB0b2Rldl9jaXBoZXJfaW5pdChzdHJ1Y3QgY2lwaGVyXworIAlyZXR1cm4gMDsKKyBlcnJvcjoKKyAJaWYgKGFlYWQgPT0gMCkgeworLQkJaWYgKG91dC0+YXN5bmMucmVxdWVzdCkKKy0JCQlhYmxrY2lwaGVyX3JlcXVlc3RfZnJlZShvdXQtPmFzeW5jLnJlcXVlc3QpOworLQkJaWYgKG91dC0+YXN5bmMucykKKy0JCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKG91dC0+YXN5bmMucyk7CisrCQljcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfZnJlZShvdXQtPmFzeW5jLnJlcXVlc3QpOworKwkJY3J5cHRvZGV2X2NyeXB0b19mcmVlX2Jsa2NpcGhlcihvdXQtPmFzeW5jLnMpOworIAl9IGVsc2UgeworIAkJaWYgKG91dC0+YXN5bmMuYXJlcXVlc3QpCisgCQkJYWVhZF9yZXF1ZXN0X2ZyZWUob3V0LT5hc3luYy5hcmVxdWVzdCk7CitAQCAtMjM3LDEwICsyMzUsOCBAQCB2b2lkIGNyeXB0b2Rldl9jaXBoZXJfZGVpbml0KHN0cnVjdCBjaXBoCisgeworIAlpZiAoY2RhdGEtPmluaXQpIHsKKyAJCWlmIChjZGF0YS0+YWVhZCA9PSAwKSB7CistCQkJaWYgKGNkYXRhLT5hc3luYy5yZXF1ZXN0KQorLQkJCQlhYmxrY2lwaGVyX3JlcXVlc3RfZnJlZShjZGF0YS0+YXN5bmMucmVxdWVzdCk7CistCQkJaWYgKGNkYXRhLT5hc3luYy5zKQorLQkJCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGNkYXRhLT5hc3luYy5zKTsKKysJCQljcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfZnJlZShjZGF0YS0+YXN5bmMucmVxdWVzdCk7CisrCQkJY3J5cHRvZGV2X2NyeXB0b19mcmVlX2Jsa2NpcGhlcihjZGF0YS0+YXN5bmMucyk7CisgCQl9IGVsc2UgeworIAkJCWlmIChjZGF0YS0+YXN5bmMuYXJlcXVlc3QpCisgCQkJCWFlYWRfcmVxdWVzdF9mcmVlKGNkYXRhLT5hc3luYy5hcmVxdWVzdCk7CitAQCAtMjg5LDEwICsyODUsMTAgQEAgc3NpemVfdCBjcnlwdG9kZXZfY2lwaGVyX2VuY3J5cHQoc3RydWN0CisgCXJlaW5pdF9jb21wbGV0aW9uKCZjZGF0YS0+YXN5bmMucmVzdWx0LT5jb21wbGV0aW9uKTsKKyAKKyAJaWYgKGNkYXRhLT5hZWFkID09IDApIHsKKy0JCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QsCisrCQljcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0LAorIAkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzcmMsIGRzdCwKKyAJCQlsZW4sIGNkYXRhLT5hc3luYy5pdik7CistCQlyZXQgPSBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0KTsKKysJCXJldCA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QpOworIAl9IGVsc2UgeworIAkJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChjZGF0YS0+YXN5bmMuYXJlcXVlc3QsCisgCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNyYywgZHN0LAorQEAgLTMxMSwxMCArMzA3LDEwIEBAIHNzaXplX3QgY3J5cHRvZGV2X2NpcGhlcl9kZWNyeXB0KHN0cnVjdAorIAorIAlyZWluaXRfY29tcGxldGlvbigmY2RhdGEtPmFzeW5jLnJlc3VsdC0+Y29tcGxldGlvbik7CisgCWlmIChjZGF0YS0+YWVhZCA9PSAwKSB7CistCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0LAorKwkJY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCwKKyAJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopc3JjLCBkc3QsCisgCQkJbGVuLCBjZGF0YS0+YXN5bmMuaXYpOworLQkJcmV0ID0gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCk7CisrCQlyZXQgPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0KTsKKyAJfSBlbHNlIHsKKyAJCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoY2RhdGEtPmFzeW5jLmFyZXF1ZXN0LAorIAkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzcmMsIGRzdCwKK0luZGV4OiBjcnlwdG9kZXYtbGludXgtMS44L2NyeXB0bGliLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcnlwdG9kZXYtbGludXgtMS44Lm9yaWcvY3J5cHRsaWIuaAorKysrIGNyeXB0b2Rldi1saW51eC0xLjgvY3J5cHRsaWIuaAorQEAgLTMsNiArMyw4IEBACisgCisgI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyAKKysjaW5jbHVkZSAiY2lwaGVyYXBpLmgiCisrCisgc3RydWN0IGNpcGhlcl9kYXRhIHsKKyAJaW50IGluaXQ7IC8qIDAgdW5pbml0aWFsaXplZCAqLworIAlpbnQgYmxvY2tzaXplOworQEAgLTEyLDggKzE0LDggQEAgc3RydWN0IGNpcGhlcl9kYXRhIHsKKyAJaW50IGFsaWdubWFzazsKKyAJc3RydWN0IHsKKyAJCS8qIGJsb2NrIGNpcGhlcnMgKi8KKy0JCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqczsKKy0JCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcXVlc3Q7CisrCQljcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl90ICpzOworKwkJY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3QgKnJlcXVlc3Q7CisgCisgCQkvKiBBRUFEIGNpcGhlcnMgKi8KKyAJCXN0cnVjdCBjcnlwdG9fYWVhZCAqYXM7CitJbmRleDogY3J5cHRvZGV2LWxpbnV4LTEuOC9pb2N0bC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3J5cHRvZGV2LWxpbnV4LTEuOC5vcmlnL2lvY3RsLmMKKysrKyBjcnlwdG9kZXYtbGludXgtMS44L2lvY3RsLmMKK0BAIC0zNCw3ICszNCw2IEBACisgICovCisgCisgI2luY2x1ZGUgPGNyeXB0by9oYXNoLmg+CistI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorICNpbmNsdWRlIDxsaW51eC9tbS5oPgorICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisgI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CitAQCAtNTMsNiArNTIsNyBAQAorICNpbmNsdWRlICJjcnlwdG9kZXZfaW50LmgiCisgI2luY2x1ZGUgInpjLmgiCisgI2luY2x1ZGUgInZlcnNpb24uaCIKKysjaW5jbHVkZSAiY2lwaGVyYXBpLmgiCisgCisgTU9EVUxFX0FVVEhPUigiTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgPG5tYXZAZ251dGxzLm9yZz4iKTsKKyBNT0RVTEVfREVTQ1JJUFRJT04oIkNyeXB0b0RldiBkcml2ZXIiKTsKK0BAIC03NjUsNyArNzY1LDcgQEAgc3RhdGljIGludCBnZXRfc2Vzc2lvbl9pbmZvKHN0cnVjdCBmY3J5cAorIAorIAlpZiAoc2VzX3B0ci0+Y2RhdGEuaW5pdCkgeworIAkJaWYgKHNlc19wdHItPmNkYXRhLmFlYWQgPT0gMCkKKy0JCQl0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl90Zm0oc2VzX3B0ci0+Y2RhdGEuYXN5bmMucyk7CisrCQkJdGZtID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfdGZtKHNlc19wdHItPmNkYXRhLmFzeW5jLnMpOworIAkJZWxzZQorIAkJCXRmbSA9IGNyeXB0b19hZWFkX3RmbShzZXNfcHRyLT5jZGF0YS5hc3luYy5hcyk7CisgCQl0Zm1faW5mb190b19hbGdfaW5mbygmc2lvcC0+Y2lwaGVyX2luZm8sIHRmbSk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiCmluZGV4IDQ0NWQwM2EuLmQ4MDQxZGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiCkBAIC0xLDEwICsxLDEwIEBACiBTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5hZ2luZyBZb2N0byBQcm9qZWN0IHN0eWxlIGJyYW5jaGVkIGtlcm5lbHMiCiBMSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ2l0L3Rvb2xzL2tnaXQ7YmVnaW5saW5lPTU7ZW5kbGluZT05O21kNT1kOGQxZDcyOWE3MGNkNWY1Mjk3MmY4ODg0YjgwNzQzZCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2dpdC90b29scy9rZ2l0O2JlZ2lubGluZT01O2VuZGxpbmU9OTttZDU9YTZjMmZhOGFlZjFiZGE0MDBlMjgyODg0NWJhMGQwNmMiCiAKIERFUEVORFMgPSAiZ2l0LW5hdGl2ZSIKIAotU1JDUkVWID0gIjE3ZDg5ZDE4NjFiNTMyYmJmMWE4MWMxZjAyNDk1M2U0NDBkYjhkZTciCitTUkNSRVYgPSAiOWEzOTk1ZWU4ZGFhYmYzN2U5MmUxYjUxYjEzM2NmODU4MmQ4NTgwOSIKIFBSID0gInIxMiIKIFBWID0gIjAuMitnaXQke1NSQ1BWfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jCmluZGV4IDc1OGEzYTcuLmJkZmUwMjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMKQEAgLTIyLDYgKzIyLDEwIEBACiBJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgogCiBkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBSZW1vdmUgdGhlIHByZXBhY2thZ2VkIGNvbmZpZy5oIGZyb20gdGhlIHNvdXJjZSB0cmVlIGFzIGl0IG92ZXJyaWRlcworICAgICMgdGhlIHNhbWUgZmlsZSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlIGFuZCBwbGFjZWQgaW4gdGhlIGJ1aWxkIHRyZWUKKyAgICBybSAtZiAke1N9L2luY2x1ZGUvY29uZmlnLmgKKwogICAgICMgUmVtb3ZlIHRoZSAnKi5kJyBmaWxlIHRvIG1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LCiAgICAgZm9yIGRlcCBpbiBgZmluZCAke0J9IC10eXBlIGYgLW5hbWUgJyouZCdgOyBkbwogICAgICAgICBkZXBfbm9fZD0iYGVjaG8gJGRlcCB8IHNlZCAncyMuZCQjIydgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2R1bXAgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcAppbmRleCAzZmIxMzNmLi4yMzQ3MjA1IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcApAQCAtOCwyMyArOCw3IEBACiAjCiAKICNkZWZhdWx0Ci1LRFVNUF9LVkVSPSJgdW5hbWUgLXJgIgotS0RVTVBfS0lNQUdFPSIvYm9vdC9iekltYWdlLSR7S0RVTVBfS1ZFUn0iCi1LRFVNUF9DTURMSU5FPSJgY2F0IC9wcm9jL2NtZGxpbmVgIgotS0RVTVBfQ01ETElORV9BUFBFTkQ9ImtkdW1wX25lZWRlZCBtYXhjcHVzPTEgaXJxcG9sbCByZXNldF9kZXZpY2VzIgotS0RVTVBfVk1DT1JFX1BBVEg9Ii92YXIvY3Jhc2gvYGRhdGUgKyIlWS0lbS0lZCJgIgotCi0jZ2V0IHJpZ2h0IGtlcm5lbCBpbWFnZQotbWFyY2g9ImB1bmFtZSAtbWAiCi1jYXNlICR7bWFyY2h9IGluCi0JeDg2KnxpPzg2KQotCQk7OwotCQkqKQotCQlLRFVNUF9LSU1BR0U9Ii9ib290L3VJbWFnZS0ke0tEVU1QX0tWRVJ9IgotCQk7OwotZXNhYwotCi1LRVhFQz11c3Ivc2Jpbi9rZXhlYworS0VYRUM9L3Vzci9zYmluL2tleGVjCiBLRVhFQ19BUkdTPSItcCIKIAogTUFLRURVTVBGSUxFPS91c3IvYmluL21ha2VkdW1wZmlsZQpAQCAtMzQsNiArMTgsOSBAQAogCiBpZiBbIC1mIC9ldGMvc3lzY29uZmlnL2tkdW1wLmNvbmYgXTsgdGhlbgogCS4gL2V0Yy9zeXNjb25maWcva2R1bXAuY29uZgorZWxzZQorCWVjaG8gIm5vIC9ldGMvc3lzY29uZmlnL2tkdW1wLmNvbmYiCisJZXhpdCAxOwogZmkKIAogZG9fY2hlY2soKQpAQCAtNDEsMjQgKzI4LDMzIEBACiAJI2NoZWNrIG1ha2VkdW1wZmlsZQogCWlmIFsgISAtZSAke01BS0VEVU1QRklMRX0gLW8gISAteCAke01BS0VEVU1QRklMRX0gXSA7dGhlbgogCQllY2hvICJObyBtYWtlZHVtcGZpbGUgZm91bmQuIgotCQlyZXR1cm4gMTsKKwkJZXhpdCAwCiAJZmkKIAogCSNjaGVjayBrZXhlYwogCWlmIFsgISAtZSAke0tFWEVDfSAtbyAhIC14ICR7S0VYRUN9IF0gO3RoZW4KIAkJZWNobyAiTm8ga2V4ZWMgZm91bmQuIgotCQlyZXR1cm4gMTsKKwkJZXhpdCAwCiAJZmkKIAogCSNjaGVjayB3aGV0aGVyIGtkdW1wIGtlcm5lbCBpbWFnZSBleGlzdHMgb24gdGhlIHN5c3RlbQotCWlmIFsgISAtZiAke0tEVU1QX0tJTUFHRX0gXTsgdGhlbgorCWlmIFsgLXogIiR7S0RVTVBfS0lNQUdFfSIgLW8gISAtZiAiJHtLRFVNUF9LSU1BR0V9IiBdOyB0aGVuCiAJCWVjaG8gIk5vIGtkdW1wIGtlcm5lbCBpbWFnZSBmb3VuZC4iCi0JCXJldHVybiAxCisJCWV4aXQgMAorCWZpCisKKwlpZiBbICIke0tEVU1QX0NNRExJTkV9InggPSAieCIgXSA7IHRoZW4KKwkJZWNobyAiS0RVTVBfQ01ETElORSBpcyBub3QgY29uZmlndXJlZCIKKwkJZXhpdCAwCiAJZmkKIH0KIAogZG9fc2F2ZV92bWNvcmUoKQogeworCWlmIFsgJHtLRFVNUF9WTUNPUkVfUEFUSH14ID0geCBdOyB0aGVuCisJCUtEVU1QX1ZNQ09SRV9QQVRIPSIvdmFyL2NyYXNoL2BkYXRlICsiJVktJW0tJWQiYCIKKwlmaQorCiAJbWtkaXIgLXAgJHtLRFVNUF9WTUNPUkVfUEFUSH0KIAllY2hvICJTYXZpbmcgYSB2bWNvcmUgdG8gJHtLRFVNUF9WTUNPUkVfUEFUSH0uIgogCkBAIC0xMDEsMjAgKzk3LDYgQEAKIAkJcmV0dXJuIDEKIAlmaQogCi0JI2hhbmRsZSBrZHVtcCBjbWRsaW5lIHBhcmFtZXRlcnMsIHJlbW92ZSBzb21lIHVzZWxlc3Mgb3B0aW9ucwotCWtjbWRsaW5lPSIiCi0JZm9yIHggaW4gYGNhdCAvcHJvYy9jbWRsaW5lYDsgZG8KLQkJY2FzZSAkeCBpbgotCQkJY3Jhc2hrZXJuZWwqKQotCQkJCTs7Ci0JCQkqKQotCQkJCWtjbWRsaW5lPSIke2tjbWRsaW5lfSAkeCIKLQkJCQk7OwotCQllc2FjCi0JZG9uZQotCi0JS0RVTVBfQ01ETElORT0iJHtrY21kbGluZX0gJHtLRFVNUF9DTURMSU5FX0FQUEVORH0iCi0KIAkjTG9hZCB0aGUga2R1bXAga2VybmVsIGltYWdlCiAJJHtLRVhFQ30gJHtLRVhFQ19BUkdTfSAiJHtLRFVNUF9LSU1BR0V9IiAtLWFwcGVuZD0iJHtLRFVNUF9DTURMSU5FfSIKIAlpZiBbICQ/ICE9IDAgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2R1bXAuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tkdW1wLmNvbmYKaW5kZXggNDJhMjQzNS4uMzgxOTBkMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2R1bXAuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcC5jb25mCkBAIC0xLDEzICsxLDkgQEAKICN0aGUga2R1bXAga2VybmVsIHZlcnNpb24gc3RyaW5nLgogI0tEVU1QX0tWRVI9ImB1bmFtZSAtcmAiCiAKLSN0aGlzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBrZHVtcCBrZXJuZWwgYXMga2R1bXAga2VybmVsIGNvbW1hbmQgbGluZSwgaXQKLSN1c3VhbGx5IGNvbWVzIGZyb20gL3Byb2MvY21kbGluZQorI3RoaXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGtkdW1wIGtlcm5lbCBhcyBrZHVtcCBrZXJuZWwgY29tbWFuZCBsaW5lCiAjS0RVTVBfQ01ETElORT0iYGNhdCAvcHJvYy9jbWRsaW5lYCIKIAotIyBhcHBlbmQgYXJndW1lbnRzIHRvIHRoZSBrZHVtcCBjb21tYW5kbGluZQotI0tEVU1QX0NNRExJTkVfQVBQRU5EPSJrZHVtcF9uZWVkZWQgbWF4Y3B1cz0xIGlycXBvbGwgcmVzZXRfZGV2aWNlcyIKLQogI3RoZSBrZXJuZWwgaW1hZ2UgZm9yIGtkdW1wCiAjS0RVTVBfS0lNQUdFPSIvYm9vdC9iekltYWdlLSR7S0RVTVBfS1ZFUn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOThlYjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1rZXhlYy10b29sczogUmVmaW5lIGtkdW1wIGRldmljZV90cmVlIHNvcnQKLQotVGhlIGNvbW1pdCBiMDJkNzM1YmYgd2FzIHRvIHJlYXJyYW5nZSB0aGUgZGV2aWNlLXRyZWUgZW50cmllcywgYW5kCi1hc3N1bWVkIHRoYXQgdGhlc2UgZW50cmllcyBhcmUgc29ydGVkIGluIHRoZSBhc2NlbmRpbmcgb3JkZXIuIGJ1dAotYWNjdHVhbGx5IHdoZW4gSSB3YXMgdmFsaWRhdGluZyBrZXhlYyBhbmQga2R1bXAsIHRoZSBvcmRlciBvZgotc2VyaWFsIG5vZGUgc3RpbGwgaXMgY2hhbmdlZC4gU28gdGhlIHBhdGNoIGlzIHRvIHNvcnQgdGhlc2UgZW50cmllcwotYnkgdGhlIGRpcmVjdG9yeSBuYW1lIGluIGFzY2VuZGluZyBvcmRlci4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFlhbmcgV2VpIDxXZWkuWWFuZ0B3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+Ci0tLS0KLSBrZXhlYy9hcmNoL3BwYy9mczJkdC5jIHwgICAxMyArKysrKysrKysrLS0tCi0ga2V4ZWMvZnMyZHQuYyAgICAgICAgICB8ICAgMTMgKysrKysrKysrKy0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvYXJjaC9wcGMvZnMyZHQuYwotKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCi1AQCAtMjk2LDYgKzI5Niw5IEBAIHN0YXRpYyBpbnQgY29tcGFyZWZ1bmMoY29uc3Qgdm9pZCAqZGVudHIKLSB7Ci0gCWNoYXIgKnN0cjEgPSAoKihzdHJ1Y3QgZGlyZW50ICoqKWRlbnRyeTEpLT5kX25hbWU7Ci0gCWNoYXIgKnN0cjIgPSAoKihzdHJ1Y3QgZGlyZW50ICoqKWRlbnRyeTIpLT5kX25hbWU7Ci0rCWNoYXIqIHB0cjEgPSBzdHJjaHIoc3RyMSwgJ0AnKTsKLSsJY2hhciogcHRyMiA9IHN0cmNocihzdHIyLCAnQCcpOwotKwlpbnQgbGVuMSwgbGVuMjsKLSAKLSAJLyoKLSAJICogc3RyY21wIHNjYW5zIGZyb20gbGVmdCB0byByaWdodCBhbmQgZmFpbHMgdG8gaWRldGlmeSBmb3Igc29tZQotQEAgLTMwMyw5ICszMDYsMTMgQEAgc3RhdGljIGludCBjb21wYXJlZnVuYyhjb25zdCB2b2lkICpkZW50cgotIAkgKiBUaGVyZWZvcmUsIHdlIGdldCB0aGUgd3Jvbmcgc29ydGVkIG9yZGVyIGxpa2UgbWVtb3J5QDEwMDAwMDAwIGFuZAotIAkgKiBtZW1vcnlAZjAwMDAwMC4KLSAJICovCi0tCWlmIChzdHJjaHIoc3RyMSwgJ0AnKSAmJiBzdHJjaHIoc3RyMiwgJ0AnKSAmJgotLQkJKHN0cmxlbihzdHIxKSA+IHN0cmxlbihzdHIyKSkpCi0tCQlyZXR1cm4gMTsKLSsJaWYgKHB0cjEgJiYgcHRyMikgewotKwkJbGVuMSA9IHB0cjEgLSBzdHIxOwotKwkJbGVuMiA9IHB0cjIgLSBzdHIyOwotKwkJaWYgKCFzdHJuY21wKHN0cjEsIHN0cjIsIGxlbjEgPmxlbjIgPyBsZW4xOiBsZW4yKSAmJgotKwkJCQkJKHN0cmxlbihzdHIxKSA+IHN0cmxlbihzdHIyKSkpCi0rCQkJCXJldHVybiAxOwotKwl9Ci0gCi0gCXJldHVybiBzdHJjbXAoc3RyMSwgc3RyMik7Ci0gfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWM5N2FmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLXJlcXVpcmUga2V4ZWMtdG9vbHMuaW5jCi1leHBvcnQgTERGTEFHUyA9ICItTCR7U1RBR0lOR19MSUJESVJ9IgotRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtemxpYj15ZXMiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8va2V4ZWMtYWFyY2g2NC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8va2V4ZWMteDMyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS12bWNvcmUtZG1lc2ctRGVmaW5lLV9HTlVfU09VUkNFLnBhdGNoIFwKLSAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjg2ZGUwNjY4NTlmMjg5MDQ4ZjFiMjg2YWY2ZjAzZjc4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg0ZjY1MmViZjFkZTNmN2I5ZGU3NTdhNTBjZGJmNmQ1NjM5ZDg4YzFkNWI1ZWY5ZjUyNWVkZGU1ZWY5NTkwYzIiCi0KLVBBQ0tBR0VTID0rICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCi0KLUFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCi1SUkVDT01NRU5EU18ke1BOfSA9ICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCi0KLUZJTEVTX2tleGVjID0gIiR7c2JpbmRpcn0va2V4ZWMiCi1GSUxFU19rZHVtcCA9ICIke3NiaW5kaXJ9L2tkdW1wICR7c3lzY29uZmRpcn0vaW5pdC5kL2tkdW1wIFwKLSAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzY29uZmlnL2tkdW1wLmNvbmYiCi1GSUxFU192bWNvcmUtZG1lc2cgPSAiJHtzYmluZGlyfS92bWNvcmUtZG1lc2ciCi0KLWluaGVyaXQgdXBkYXRlLXJjLmQKLQotSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJrZHVtcCIKLUlOSVRTQ1JJUFRfTkFNRV9rZHVtcCA9ICJrZHVtcCIKLUlOSVRTQ1JJUFRfUEFSQU1TX2tkdW1wID0gInN0YXJ0IDU2IDIgMyA0IDUgLiBzdG9wIDU2IDAgMSA2IC4iCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKLSAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0va2R1bXAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2tkdW1wCi0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnCi0gICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2tkdW1wLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzNzZjOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMi5iYgpAQCAtMCwwICsxLDM3IEBACityZXF1aXJlIGtleGVjLXRvb2xzLmluYworZXhwb3J0IExERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSfSIKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXpsaWI9eWVzIgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLWFhcmNoNjQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLXgzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtdm1jb3JlLWRtZXNnLURlZmluZS1fR05VX1NPVVJDRS5wYXRjaCBcCisgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMGRkYWFlMGU4NmFmNTQ0MDdiMTY0YTFmNWEzOWNjMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYzdiNjBkYWQwZGEyMDIwMDQwNDhhNjE3OWQ4YTUzNjA2OTQzMDYyZGQ2MjdhMmVkYmE0NWE4ZWEzYTg1MTM1IgorCitQQUNLQUdFUyA9KyAia2V4ZWMga2R1bXAgdm1jb3JlLWRtZXNnIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2V4ZWMga2R1bXAgdm1jb3JlLWRtZXNnIgorCitGSUxFU19rZXhlYyA9ICIke3NiaW5kaXJ9L2tleGVjIgorRklMRVNfa2R1bXAgPSAiJHtzYmluZGlyfS9rZHVtcCAke3N5c2NvbmZkaXJ9L2luaXQuZC9rZHVtcCBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9rZHVtcC5jb25mIgorRklMRVNfdm1jb3JlLWRtZXNnID0gIiR7c2JpbmRpcn0vdm1jb3JlLWRtZXNnIgorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAia2R1bXAiCitJTklUU0NSSVBUX05BTUVfa2R1bXAgPSAia2R1bXAiCitJTklUU0NSSVBUX1BBUkFNU19rZHVtcCA9ICJzdGFydCA1NiAyIDMgNCA1IC4gc3RvcCA1NiAwIDEgNiAuIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2tkdW1wICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9rZHVtcAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9rZHVtcC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2QvZGVwbW9kd3JhcHBlci1jcm9zc18xLjAuYmIKaW5kZXggYzJjMjU4OS4uNWM3ZGQ1MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiCkBAIC00MSwxMCArNDEsNiBAQAogCWNobW9kICt4ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2RlcG1vZHdyYXBwZXIKIH0KIAotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJkZXBtb2R3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLQotZGVwbW9kd3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MgKCkgewotCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KLX0KK1NZU1JPT1RfRElSUyArPSAiJHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSIKIAogaW5oZXJpdCBub3BhY2thZ2VzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYwppbmRleCAwYmNkY2Y2Li4xNjZiM2YwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKQEAgLTksMTYgKzksMTQgQEAKIExJQ0VOU0VfbGlia21vZCA9ICJMR1BMLTIuMSsiCiBTRUNUSU9OID0gImJhc2UiCiAKLURFUEVORFMgKz0gInBrZ2NvbmZpZy1uYXRpdmUiCi0KIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmttb2QvQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAogICAgICAgICAgICAgICAgICAgICIKLWluaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgcGtnY29uZmlnCiAKLVNSQ1JFViA9ICI0MmYzMmI4YWU0NWFkOGUzYTFkYTI5YzliMjBhZjliNWUyZTllNjc2IgorU1JDUkVWID0gIjY1YTg4NWRmNWY2ZjE1MjIyYjQ0ZmQ2OTVjNWVhY2ExN2U4MzdhMTQiCiAjIExvb2tvdXQgZm9yIFBWIGJ1bXAgdG9vIHdoZW4gU1JDUkVWIGlzIGNoYW5nZWQKLVBWID0gIjIyK2dpdCR7U1JDUFZ9IgorUFYgPSAiMjMrZ2l0JHtTUkNQVn0iCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9rZXJuZWwva21vZC9rbW9kLmdpdCBcCiAgICAgICAgICAgIGZpbGU6Ly9kZXBtb2Qtc2VhcmNoLmNvbmYgXApAQCAtMzUsNyArMzMsNyBAQAogUEFDS0FHRUNPTkZJR1tsb2dnaW5nXSA9ICIgLS1lbmFibGUtbG9nZ2luZywtLWRpc2FibGUtbG9nZ2luZyIKIAogZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotICAgICAgICBndGtkb2NpemUgLS1kb2NkaXIgJHtTfS9saWJrbW9kL2RvY3MgfHwgdG91Y2ggJHtTfS9saWJrbW9kL2RvY3MvZ3RrLWRvYy5tYWtlCisgICAgICAgIGd0a2RvY2l6ZSAtLWRvY2RpciAke1N9L2xpYmttb2QvZG9jcyAtLXNyY2RpciAke1N9CiB9CiAKIGRvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzL2ZpeC1taXNsZWFkaW5nLWluZGVudGF0aW9uLWVycm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzL2ZpeC1taXNsZWFkaW5nLWluZGVudGF0aW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDQ3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvZml4LW1pc2xlYWRpbmctaW5kZW50YXRpb24tZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeCBjb21waWxlIGVycm9yOgorCit8IHN5c3RfY291bnQuYzozNDY6MzogZXJyb3I6IHRoaXMgJ2ZvcicgY2xhdXNlIGRvZXMgbm90IGd1YXJkLi4uIFstV2Vycm9yPW1pc2xlYWRpbmctaW5kZW50YXRpb25dIAorfCAgICBmb3IoYz1jbWluIDsgYyA8IGNtYXg7IGMrKykgCit8ICAgICAgIF5+fiAKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLS1naXQgYS9wZXJmX2V4YW1wbGVzL3N5c3RfY291bnQuYyBiL3BlcmZfZXhhbXBsZXMvc3lzdF9jb3VudC5jCitpbmRleCAwZDUzMDc4Li4yZGZiOWI5IDEwMDY0NAorLS0tIGEvcGVyZl9leGFtcGxlcy9zeXN0X2NvdW50LmMKKysrKyBiL3BlcmZfZXhhbXBsZXMvc3lzdF9jb3VudC5jCitAQCAtMzQzLDggKzM0Myw5IEBAIG1lYXN1cmUodm9pZCkKKyAKKyAJCWZvciAoZGVsYXkgPSAxIDsgZGVsYXkgPD0gb3B0aW9ucy5kZWxheTsgZGVsYXkrKykgeworIAorLQkJZm9yKGM9Y21pbiA7IGMgPCBjbWF4OyBjKyspCistCQkJc3RhcnRfY3B1KGMpOworKwkJCWZvcihjPWNtaW4gOyBjIDwgY21heDsgYysrKSB7CisrCQkJCXN0YXJ0X2NwdShjKTsKKysJCQl9CisgCisgCQkJaWYgKDApIHsKKyAJCQkJdHYudHZfc2VjID0gMDsKK0BAIC0zNTMsOCArMzU0LDkgQEAgbWVhc3VyZSh2b2lkKQorIAkJCX0gZWxzZQorIAkJCQlzbGVlcCgxKTsKKyAKKy0JCWZvcihjPWNtaW4gOyBjIDwgY21heDsgYysrKQorLQkJCXN0b3BfY3B1KGMpOworKwkJCWZvcihjPWNtaW4gOyBjIDwgY21heDsgYysrKSB7CisrCQkJCXN0b3BfY3B1KGMpOworKwkJCX0KKyAKKyAJCQlmb3IoYyA9IGNtaW47IGMgPCBjbWF4OyBjKyspIHsKKyAJCQkJcHJpbnRmKCIjICUnZHMgLS0tLS1cbiIsIGRlbGF5KTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9saWJwZm00XzQuNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIKaW5kZXggMGIwMjRhZC4uNDEzNmVhYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIKQEAgLTE0LDYgKzE0LDcgQEAKIAogU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3BlcmZtb24yLyR7QlBOfS9saWJwZm0tJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LW1pc2xlYWRpbmctaW5kZW50YXRpb24tZXJyb3IucGF0Y2ggXAogICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjUwNzdiOTAyMjQ0MGU0OTUxZDk2ZjJkMGU3M2JkNDg3IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiCmluZGV4IGE0ZTY0ZDUuLjhlNjhhZTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKQEAgLTU1LDEzICs1NSwxNCBAQAogICAgICYgRmlybXdhcmUteGM0MDAwIFwKICAgICAmIEZpcm13YXJlLXhjNTAwMCBcCiAgICAgJiBGaXJtd2FyZS14YzUwMDBjIFwKKyAgICAmIFdIRU5DRSBcCiAiCiAKIExJQ19GSUxFU19DSEtTVU0gPSAiXAogICAgIGZpbGU6Ly9MSUNFTkNFLkFiaWxpczttZDU9YjVlZTNmNDEwNzgwZTU2NzExYWQ0OGVhZGMyMmI4YmMgXAogICAgIGZpbGU6Ly9MSUNFTkNFLmFkc3Bfc3N0O21kNT02MTVjNDViOTFhNWE0YTlmZTA0NmQ2YWI5YTJkZjcyOCBcCiAgICAgZmlsZTovL0xJQ0VOQ0UuYWdlcmU7bWQ1PWFmMDEzM2RlNmI0YTliMjUyMmRlZmQ1ZjE4OGFmZDMxIFwKLSAgICBmaWxlOi8vTElDRU5TRS5hbWRncHU7bWQ1PWE4NTkyYzI0YzI2NzIwNjJlMDNjNzM5MmZjN2ZlM2JjIFwKKyAgICBmaWxlOi8vTElDRU5TRS5hbWRncHU7bWQ1PTNmZThhMzQzMDcwMGE1MTg5OTBjM2IzZDc1Mjk3MjA5IFwKICAgICBmaWxlOi8vTElDRU5TRS5hbWQtdWNvZGU7bWQ1PTNhMGRlNDUxMjUzY2MxZWRiZjMwYTNjNjIxZWZmZWUzIFwKICAgICBmaWxlOi8vTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlO21kNT0zMGExNGM3ODIzYmVlZGFjOWZhMzljNjRmZGQwMWExMyBcCiAgICAgZmlsZTovL0xJQ0VOU0UuYXRtZWw7bWQ1PWFhNzRhYzBjNjA1OTVkZWU0ZDRlMjM5MTA3ZWE3N2EzIFwKQEAgLTk3LDcgKzk4LDcgQEAKICAgICBmaWxlOi8vTElDRU5TRS5RdWFsY29tbUF0aGVyb3NfYXIzazttZDU9YjVmZTI0NGZiMmI1MzIzMTFkZTE0NzJhM2JjMDZkYTUgXAogICAgIGZpbGU6Ly9MSUNFTlNFLlF1YWxjb21tQXRoZXJvc19hdGgxMGs7bWQ1PWI1ZmUyNDRmYjJiNTMyMzExZGUxNDcyYTNiYzA2ZGE1IFwKICAgICBmaWxlOi8vTElDRU5DRS5yOGE3Nzl4X3VzYjM7bWQ1PTRjMTY3MTY1NjE1MzAyNWQ3MDc2MTA1YTVkYTdlNDk4IFwKLSAgICBmaWxlOi8vTElDRU5TRS5yYWRlb247bWQ1PTZjN2Y5N2M2YzYyYmRkOTU5NmQwMjM4YmIyMDUxMThjIFwKKyAgICBmaWxlOi8vTElDRU5TRS5yYWRlb247bWQ1PTY5NjEyZjRmN2IxNDFhOTc2NTljYjFkNjA5YTFiZGUyIFwKICAgICBmaWxlOi8vTElDRU5DRS5yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlO21kNT03MjhmMWE4NWZkNTNmZDY3ZmE4ZDdhZmIwODBiYzQzNSBcCiAgICAgZmlsZTovL0xJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dDttZDU9YWIyYzI2OTI3N2M0NTQ3NmZiNDQ5NjczOTExYTJkZmQgXAogICAgIGZpbGU6Ly9MSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0O21kNT0wMGQwNmNmZDNlZGRkNWEyNjk4OTQ4ZWFkMmFkNTRhNSBcCkBAIC0xMTEsNiArMTEyLDcgQEAKICAgICBmaWxlOi8vTElDRU5DRS54YzQwMDA7bWQ1PTBmZjUxZDJkYzQ5ZmNlMDQ4MTRjOTE1NTA4MTA5MmYwIFwKICAgICBmaWxlOi8vTElDRU5DRS54YzUwMDA7bWQ1PTFlMTcwYzEzMTc1MzIzYzMyYzdmNGQwOTk4ZDUzZjY2IFwKICAgICBmaWxlOi8vTElDRU5DRS54YzUwMDBjO21kNT0xMmIwMmVmYTMwNDlkYjY1ZDUyNGFlYjQxOGRkODdjYSBcCisgICAgZmlsZTovL1dIRU5DRTttZDU9ZjUxNGEwYzUzYzVkNzNjMmZlOThkNTg2MTEwM2YwYzYgXAogIgogCiAjIFRoZXNlIGFyZSBub3QgY29tbW9uIGxpY2Vuc2VzLCBzZXQgTk9fR0VORVJJQ19MSUNFTlNFIGZvciB0aGVtCkBAIC0xNjgsMTMgKzE3MCwyMCBAQAogTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNDAwMF0gPSAiTElDRU5DRS54YzQwMDAiCiBOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM1MDAwXSA9ICJMSUNFTkNFLnhjNTAwMCIKIE5PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzUwMDBjXSA9ICJMSUNFTkNFLnhjNTAwMGMiCitOT19HRU5FUklDX0xJQ0VOU0VbV0hFTkNFXSA9ICJXSEVOQ0UiCiAKLVNSQ1JFViA9ICI1ZjhjYTBjMWRiNjEwNmEyZDZkN2U4NWVlZTc3ODkxN2ZmMDNjM2RlIgorU1JDUkVWID0gIjQyYWQ1MzY3ZGQzODM3MWIyYTFiYjI2M2I2ZWZhODVmOWI5MmZjOTMiCiBQRSA9ICIxIgogUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9maXJtd2FyZS9saW51eC1maXJtd2FyZS5naXQiCiAKKyMgU29tZSBkZXZpY2VzIG5lZWQgYSBzcGVjaWZpYyB2ZXJzaW9uLCBub3QgdGhlIGxhdGVzdAorU1JDX1VSSSArPSAiaHR0cHM6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvaXdsd2lmaS9saW51eC1maXJtd2FyZS5naXQvcGxhaW4vaXdsd2lmaS04MDAwQy0xOS51Y29kZTtuYW1lPWl3bHdpZmktMTkiCisKK1NSQ19VUklbaXdsd2lmaS0xOS5tZDVzdW1dID0gIjEzMmZiYWVlMzZiZWVjNWU5ODcxNGYwYmQ2NmY3YTFkIgorU1JDX1VSSVtpd2x3aWZpLTE5LnNoYTI1NnN1bV0gPSAiMjAzNDQ3MGRmNjRkMzIzYjgyN2M0ZjJkNGQwZDU1YmUyODQ2YjczNjAxNzliNTU3NGFhMjhmZjc3YjZjOTQ3MSIKKwogUyA9ICIke1dPUktESVJ9L2dpdCIKIAogaW5oZXJpdCBhbGxhcmNoIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKQEAgLTIwNCw2ICsyMTMsOSBAQAogCiAJIyBmaXh1cCB3bDEyeHggbG9jYXRpb24sIGFmdGVyIDIuNi4zNyB0aGUga2VybmVsIHNlYXJjaGVzIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvciBpdAogCSggY2QgJHtEfS9saWIvZmlybXdhcmUgOyBsbiAtc2YgdGktY29ubmVjdGl2aXR5LyogLiApCisKKyAgICAgICAgIyBDb3B5IHRoZSBpd2x3aWZpIHVjb2RlCisgICAgICAgIGNwICR7V09SS0RJUn0vaXdsd2lmaS04MDAwQy0xOS51Y29kZSAke0R9L2xpYi9maXJtd2FyZS8KIH0KIAogCkBAIC0yMTMsMTEgKzIyNSwxMiBAQAogICAgICAgICAgICAgICR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlICR7UE59LXdsMTJ4eCAke1BOfS13bDE4eHggXAogICAgICAgICAgICAgICR7UE59LXZ0NjY1Ni1saWNlbnNlICR7UE59LXZ0NjY1NiBcCiAgICAgICAgICAgICAgJHtQTn0tcnRsLWxpY2Vuc2UgJHtQTn0tcnRsODE5MmN1ICR7UE59LXJ0bDgxOTJjZSAke1BOfS1ydGw4MTkyc3UgXAotICAgICAgICAgICAgICR7UE59LWJyb2FkY29tLWxpY2Vuc2UgJHtQTn0tYmNtNDMyOSAke1BOfS1iY200MzMwICR7UE59LWJjbTQzMzQgJHtQTn0tYmNtNDMzNDAgJHtQTn0tYmNtNDMzOSAke1BOfS1iY200MzU0IFwKLSAgICAgICAgICAgICAke1BOfS1hdGhlcm9zLWxpY2Vuc2UgJHtQTn0tYXI5MTcwICR7UE59LWF0aDZrICR7UE59LWF0aDlrIFwKKyAgICAgICAgICAgICAke1BOfS1icm9hZGNvbS1saWNlbnNlICR7UE59LWJjbTQzMjkgJHtQTn0tYmNtNDMzMCAke1BOfS1iY200MzM0ICR7UE59LWJjbTQzMzQwICR7UE59LWJjbTQzMzkgJHtQTn0tYmNtNDM0MzAgJHtQTn0tYmNtNDM1NCBcCisgICAgICAgICAgICAgJHtQTn0tYXRoZXJvcy1saWNlbnNlICR7UE59LWFyOTE3MCAke1BOfS1jYXJsOTE3MCAke1BOfS1hdGg2ayAke1BOfS1hdGg5ayBcCiAgICAgICAgICAgICAgJHtQTn0tYXIzay1saWNlbnNlICAke1BOfS1hcjNrICAke1BOfS1hdGgxMGstbGljZW5zZSAgJHtQTn0tYXRoMTBrICBcCiAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICR7UE59LWl3bHdpZmktbGljZW5zZSAke1BOfS1pd2x3aWZpLTEzNS02IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLWxpY2Vuc2UgJHtQTn0taXdsd2lmaSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS0xMzUtNiBcCiAgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS0zMTYwLTcgJHtQTn0taXdsd2lmaS0zMTYwLTggJHtQTn0taXdsd2lmaS0zMTYwLTkgXAogICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjAwMC00ICR7UE59LWl3bHdpZmktNjAwMGcyYS01ICR7UE59LWl3bHdpZmktNjAwMGcyYS02IFwKICAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTYwMDBnMmItNSAke1BOfS1pd2x3aWZpLTYwMDBnMmItNiBcCkBAIC0yMjUsOCArMjM4LDExIEBACiAgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjYwIFwKICAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTcyNjUgXAogICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNzI2NWQgJHtQTn0taXdsd2lmaS04MDAwYyAke1BOfS1pd2x3aWZpLTgyNjUgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktbWlzYyBcCiAgICAgICAgICAgICAgJHtQTn0taTkxNS1saWNlbnNlICR7UE59LWk5MTUgXAogICAgICAgICAgICAgICR7UE59LWFkc3Atc3N0LWxpY2Vuc2UgJHtQTn0tYWRzcC1zc3QgXAorICAgICAgICAgICAgICR7UE59LWJueDItbWlwcyBcCisgICAgICAgICAgICAgJHtQTn0td2hlbmNlLWxpY2Vuc2UgXAogICAgICAgICAgICAgICR7UE59LWxpY2Vuc2UgXAogICAgICAgICAgICAgICIKIApAQCAtMjM0LDExICsyNTAsMTUgQEAKIExJQ0VOU0VfJHtQTn0tYXI5MTcwID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWF0aDZrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWF0aDlrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWF0aGVyb3MtbGljZW5zZSA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgogCiBGSUxFU18ke1BOfS1hdGhlcm9zLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLmF0aGVyb3NfZmlybXdhcmUiCiBGSUxFU18ke1BOfS1hcjkxNzAgPSAiIFwKICAgL2xpYi9maXJtd2FyZS9hcjkxNzAqLmZ3IFwKICIKK0ZJTEVTXyR7UE59LWNhcmw5MTcwID0gIiBcCisgIC9saWIvZmlybXdhcmUvY2FybDkxNzAqLmZ3IFwKKyIKIEZJTEVTXyR7UE59LWF0aDZrID0gIiBcCiAgIC9saWIvZmlybXdhcmUvYXRoNmsgXAogIgpAQCAtMjUwLDEyICsyNzAsMTUgQEAKICIKIAogUkRFUEVORFNfJHtQTn0tYXI5MTcwICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1jYXJsOTE3MCArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgogUkRFUEVORFNfJHtQTn0tYXRoNmsgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWF0aDlrICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCiAKICMgRm9yIFF1YWxDb21tQXRob3MKIExJQ0VOU0VfJHtQTn0tYXIzayA9ICJGaXJtd2FyZS1xdWFsY29tbUF0aG9zX2FyM2siCitMSUNFTlNFXyR7UE59LWFyM2stbGljZW5zZSA9ICJGaXJtd2FyZS1xdWFsY29tbUF0aG9zX2FyM2siCiBMSUNFTlNFXyR7UE59LWF0aDEwayA9ICJGaXJtd2FyZS1xdWFsY29tbUF0aG9zX2F0aDEwayIKK0xJQ0VOU0VfJHtQTn0tYXRoMTBrLWxpY2Vuc2UgPSAiRmlybXdhcmUtcXVhbGNvbW1BdGhvc19hdGgxMGsiCiAKIEZJTEVTXyR7UE59LWFyM2stbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOU0UuUXVhbGNvbW1BdGhlcm9zX2FyM2siCiBGSUxFU18ke1BOfS1hcjNrID0gIiBcCkBAIC0yNzIsNiArMjk1LDcgQEAKIAogIyBGb3IgcmFsaW5rCiBMSUNFTlNFXyR7UE59LXJhbGluayA9ICJGaXJtd2FyZS1yYWxpbmstZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LXJhbGluay1saWNlbnNlID0gIkZpcm13YXJlLXJhbGluay1maXJtd2FyZSIKIAogRklMRVNfJHtQTn0tcmFsaW5rLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQiCiBGSUxFU18ke1BOfS1yYWxpbmsgPSAiIFwKQEAgLTI4Miw2ICszMDYsNyBAQAogCiAjIEZvciByYWRlb24KIExJQ0VOU0VfJHtQTn0tcmFkZW9uID0gIkZpcm13YXJlLXJhZGVvbiIKK0xJQ0VOU0VfJHtQTn0tcmFkZW9uLWxpY2Vuc2UgPSAiRmlybXdhcmUtcmFkZW9uIgogCiBGSUxFU18ke1BOfS1yYWRlb24tbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOU0UucmFkZW9uIgogRklMRVNfJHtQTn0tcmFkZW9uID0gIiBcCkBAIC0yOTUsNiArMzIwLDcgQEAKIExJQ0VOU0VfJHtQTn0tc2Q4Njg4ID0gIkZpcm13YXJlLU1hcnZlbGwiCiBMSUNFTlNFXyR7UE59LXNkODc4NyA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgogTElDRU5TRV8ke1BOfS1zZDg3OTcgPSAiRmlybXdhcmUtTWFydmVsbCIKK0xJQ0VOU0VfJHtQTn0tbWFydmVsbC1saWNlbnNlID0gIkZpcm13YXJlLU1hcnZlbGwiCiAKIEZJTEVTXyR7UE59LW1hcnZlbGwtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuTWFydmVsbCIKIEZJTEVTXyR7UE59LXNkODY4NiA9ICIgXApAQCAtMzIxLDYgKzM0Nyw3IEBACiBMSUNFTlNFXyR7UE59LXJ0bDgxOTJjdSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgogTElDRU5TRV8ke1BOfS1ydGw4MTkyY2UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0tcnRsODE5MnN1ID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LXJ0bC1saWNlbnNlID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCiAKIEZJTEVTXyR7UE59LXJ0bC1saWNlbnNlID0gIiBcCiAgIC9saWIvZmlybXdhcmUvTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCBcCkBAIC0zNDIsNiArMzY5LDcgQEAKICMgRm9yIHRpLWNvbm5lY3Rpdml0eQogTElDRU5TRV8ke1BOfS13bDEyeHggPSAiRmlybXdhcmUtdGktY29ubmVjdGl2aXR5IgogTElDRU5TRV8ke1BOfS13bDE4eHggPSAiRmlybXdhcmUtdGktY29ubmVjdGl2aXR5IgorTElDRU5TRV8ke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSA9ICJGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkiCiAKIEZJTEVTXyR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS50aS1jb25uZWN0aXZpdHkiCiBGSUxFU18ke1BOfS13bDEyeHggPSAiIFwKQEAgLTM2MCw2ICszODgsNyBAQAogCiAjIEZvciB2dDY2NTYKIExJQ0VOU0VfJHtQTn0tdnQ2NjU2ID0gIkZpcm13YXJlLXZpYV92dDY2NTYiCitMSUNFTlNFXyR7UE59LXZ0NjY1Ni1saWNlbnNlID0gIkZpcm13YXJlLXZpYV92dDY2NTYiCiAKIEZJTEVTXyR7UE59LXZ0NjY1Ni1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS52aWFfdnQ2NjU2IgogRklMRVNfJHtQTn0tdnQ2NjU2ID0gIiBcCkBAIC0zNzksNyArNDA4LDkgQEAKIExJQ0VOU0VfJHtQTn0tYmNtNDMzNCA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgogTElDRU5TRV8ke1BOfS1iY200MzM0MCA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgogTElDRU5TRV8ke1BOfS1iY200MzM5ID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCitMSUNFTlNFXyR7UE59LWJjbTQzNDMwID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCiBMSUNFTlNFXyR7UE59LWJjbTQzNTQgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKK0xJQ0VOU0VfJHtQTn0tYnJvYWRjb20tbGljZW5zZSA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgogCiBGSUxFU18ke1BOfS1icm9hZGNvbS1saWNlbnNlID0gIiBcCiAgIC9saWIvZmlybXdhcmUvTElDRU5DRS5icm9hZGNvbV9iY200M3h4IFwKQEAgLTM5OSw2ICs0MzAsOSBAQAogRklMRVNfJHtQTn0tYmNtNDMzOSA9ICIgXAogICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzM5LXNkaW8uYmluIFwKICIKK0ZJTEVTXyR7UE59LWJjbTQzNDMwID0gIiBcCisgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzNDMwLXNkaW8uYmluIFwKKyIKIEZJTEVTXyR7UE59LWJjbTQzNTQgPSAiIFwKICAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDM1NC1zZGlvLmJpbiBcCiAiCkBAIC00MTcsMTUgKzQ1MSwzMyBAQAogQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMzBbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzAtc2Rpby5iaW4iCiBBTFRFUk5BVElWRV9saW51eC1maXJtd2FyZS1iY200MzM5ID0gImJyY21mbWFjLXNkaW8uYmluIgogQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMzlbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzktc2Rpby5iaW4iCitBTFRFUk5BVElWRV9QUklPUklUWV9saW51eC1maXJtd2FyZS1iY200MzM5W2JyY21mbWFjLXNkaW8uYmluXSA9ICIyMCIKK0FMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzNDMwID0gImJyY21mbWFjLXNkaW8uYmluIgorQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzNDMwW2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzQzMC1zZGlvLmJpbiIKIAogUkRFUEVORFNfJHtQTn0tYmNtNDMyOSArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWJjbTQzMzAgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1iY200MzM0ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgogUkRFUEVORFNfJHtQTn0tYmNtNDMzNDAgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1iY200MzM5ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYmNtNDM0MzAgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1iY200MzU0ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgogCisjIEZvciBCcm9hZGNvbSBibngyLW1pcHMKKyMKKyMgd2hpY2ggaXMgYSBzZXBhcmF0ZSBjYXNlIHRvIHRoZSBvdGhlciBCcm9hZGNvbSBmaXJtd2FyZXMgc2luY2UgaXRzCisjIGxpY2Vuc2UgaXMgY29udGFpbmVkIGluIHRoZSBzaGFyZWQgV0hFTkNFIGZpbGUuCisKK0xJQ0VOU0VfJHtQTn0tYm54Mi1taXBzID0gIldIRU5DRSIKK0xJQ0VOU0VfJHtQTn0td2hlbmNlLWxpY2Vuc2UgPSAiV0hFTkNFIgorCitGSUxFU18ke1BOfS1ibngyLW1pcHMgPSAiL2xpYi9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wOS02LjIuMWIuZnciCitGSUxFU18ke1BOfS13aGVuY2UtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL1dIRU5DRSIKKworUkRFUEVORFNfJHtQTn0tYm54Mi1taXBzICs9ICIke1BOfS13aGVuY2UtbGljZW5zZSIKKwogIyBGb3IgaXdsd2lmaQorTElDRU5TRV8ke1BOfS1pd2x3aWZpICAgICAgICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgogTElDRU5TRV8ke1BOfS1pd2x3aWZpLTEzNS02ICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgogTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtNyAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgogTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgpAQCAtNDMzLDcgKzQ4NSw3IEBACiBMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMC00ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYS02ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCi1MSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYi01ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYi02ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktNjA1MC00ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktNjA1MC01ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCkBAIC00NDIsNiArNDk0LDggQEAKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjY1ZCAgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS04MDAwYyAgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS04MjY1ICAgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS1taXNjICAgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS1saWNlbnNlICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIAogCiBGSUxFU18ke1BOfS1pd2x3aWZpLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmUiCkBAIC00NjEsNiArNTE1LDcgQEAKIEZJTEVTXyR7UE59LWl3bHdpZmktNzI2NWQgICA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2NUQtKi51Y29kZSIKIEZJTEVTXyR7UE59LWl3bHdpZmktODAwMGMgICA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktODAwMEMtKi51Y29kZSIKIEZJTEVTXyR7UE59LWl3bHdpZmktODI2NSAgID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS04MjY1LSoudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLW1pc2MgICA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktKi51Y29kZSIKIAogUkRFUEVORFNfJHtQTn0taXdsd2lmaS0xMzUtNiAgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgogUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTcgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgpAQCAtNDY5LDcgKzUyNCw3IEBACiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDAtNCAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCi1SREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNSA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwNTAtNCAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwNTAtNSAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCkBAIC00NzgsNiArNTMzLDE1IEBACiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTcyNjVkICAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTgwMDBjICAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTgyNjUgICAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLW1pc2MgICAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCisKKyMgLWl3bHdpZmktbWlzYyBpcyBhICJjYXRjaCBhbGwiIHBhY2thZ2UgdGhhdCBpbmNsdWRlcyBhbGwgdGhlIGl3bHdpZmkKKyMgZmlybXdhcmVzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGluY2x1ZGVkIGluIG90aGVyIC1pd2x3aWZpLSBwYWNrYWdlcy4KKyMgLWl3bHdpZmkgaXMgYSB2aXJ0dWFsIHBhY2thZ2UgdGhhdCBkZXBlbmRzIHVwb24gYWxsIGl3bHdpZmkgcGFja2FnZXMuCisjIFRoZXNlIGFyZSBkaXN0aW5jdCBpbiBvcmRlciB0byBhbGxvdyB0aGUgLW1pc2MgZmlybXdhcmVzIHRvIGJlIGluc3RhbGxlZAorIyB3aXRob3V0IHB1bGxpbmcgaW4gZXZlcnkgb3RoZXIgaXdsd2lmaSBwYWNrYWdlLgorQUxMT1dfRU1QVFlfJHtQTn0taXdsd2lmaSA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0taXdsd2lmaS1taXNjID0gIjEiCiAKICMgSGFuZGxlIHBhY2thZ2UgdXBkYXRpbmcgZm9yIHRoZSBuZXdseSBtZXJnZWQgaXdsd2lmaSBncm91cGluZ3MKIFJQUk9WSURFU18ke1BOfS1pd2x3aWZpLTcyNjUgPSAiJHtQTn0taXdsd2lmaS03MjY1LTggJHtQTn0taXdsd2lmaS03MjY1LTkiCkBAIC00ODksMTIgKzU1MywxNCBAQAogUkNPTkZMSUNUU18ke1BOfS1pd2x3aWZpLTcyNjAgPSAiJHtQTn0taXdsd2lmaS03MjYwLTcgJHtQTn0taXdsd2lmaS03MjYwLTggJHtQTn0taXdsd2lmaS03MjYwLTkiCiAKIExJQ0VOU0VfJHtQTn0taTkxNSAgICAgICA9ICJGaXJtd2FyZS1pOTE1IgorTElDRU5TRV8ke1BOfS1pOTE1LWxpY2Vuc2UgPSAiRmlybXdhcmUtaTkxNSIKIEZJTEVTXyR7UE59LWk5MTUtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOU0UuaTkxNSIKIEZJTEVTXyR7UE59LWk5MTUgICAgICAgICA9ICIvbGliL2Zpcm13YXJlL2k5MTUiCiBSREVQRU5EU18ke1BOfS1pOTE1ICAgICAgPSAiJHtQTn0taTkxNS1saWNlbnNlIgogCiBGSUxFU18ke1BOfS1hZHNwLXNzdC1saWNlbnNlICAgICAgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLmFkc3Bfc3N0IgogTElDRU5TRV8ke1BOfS1hZHNwLXNzdCAgICAgICAgICAgID0gIkZpcm13YXJlLWFkc3Bfc3N0IgorTElDRU5TRV8ke1BOfS1hZHNwLXNzdC1saWNlbnNlICAgID0gIkZpcm13YXJlLWFkc3Bfc3N0IgogRklMRVNfJHtQTn0tYWRzcC1zc3QgICAgICAgICAgICAgID0gIi9saWIvZmlybXdhcmUvaW50ZWwvZHNwX2Z3KiIKIFJERVBFTkRTXyR7UE59LWFkc3Atc3N0ICAgICAgICAgICA9ICIke1BOfS1hZHNwLXNzdC1saWNlbnNlIgogCkBAIC01MzQsNiArNjAwLDcgQEAKICAgICAmIEZpcm13YXJlLXI4YTc3OXhfdXNiMyBcCiAgICAgJiBGaXJtd2FyZS1yYWRlb24gXAogICAgICYgRmlybXdhcmUtcmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1yYWxpbmstZmlybXdhcmUgXAogICAgICYgRmlybXdhcmUtc2lhbm8gXAogICAgICYgRmlybXdhcmUtdGRhNzcwNi1maXJtd2FyZSBcCiAgICAgJiBGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkgXApAQCAtNTQzLDE0ICs2MTAsMjAgQEAKICAgICAmIEZpcm13YXJlLXhjNDAwMCBcCiAgICAgJiBGaXJtd2FyZS14YzUwMDAgXAogICAgICYgRmlybXdhcmUteGM1MDAwYyBcCisgICAgJiBXSEVOQ0UgXAogIgogCiBGSUxFU18ke1BOfS1saWNlbnNlICs9ICIvbGliL2Zpcm13YXJlL0xJQ0VOKiIKIEZJTEVTXyR7UE59ICs9ICIvbGliL2Zpcm13YXJlLyoiCiBSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tbGljZW5zZSIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS13aGVuY2UtbGljZW5zZSIKIAogIyBNYWtlIGxpbnV4LWZpcm13YXJlIGRlcGVuZCBvbiBhbGwgb2YgdGhlIHNwbGl0LW91dCBwYWNrYWdlcy4KKyMgTWFrZSBsaW51eC1maXJtd2FyZS1pd2x3aWZpIGRlcGVuZCBvbiBhbGwgb2YgdGhlIHNwbGl0LW91dCBpd2x3aWZpIHBhY2thZ2VzLgogcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgewogICAgIGZpcm13YXJlX3BrZ3MgPSBvZS51dGlscy5wYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQogICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU19saW51eC1maXJtd2FyZScsICcgJyArICcgJy5qb2luKGZpcm13YXJlX3BrZ3MpKQorCisgICAgaXdsd2lmaV9wa2dzID0gZmlsdGVyKGxhbWJkYSB4OiB4LmZpbmQoJy1pd2x3aWZpLScpICE9IC0xLCBmaXJtd2FyZV9wa2dzKQorICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU19saW51eC1maXJtd2FyZS1pd2x3aWZpJywgJyAnICsgJyAnLmpvaW4oaXdsd2lmaV9wa2dzKSkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMKaW5kZXggMmJhNmVkNS4uMDc4ZDc1MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMKQEAgLTE4LDkgKzE4LDEwIEBACiAjIEJ1dCB5b3UgaGF2ZSBzb21lIGtlcm5lbCBoZWFkZXJzIHlvdSBuZWVkIGZvciBzb21lIGRyaXZlcj8gVGhhdCBpcyBmaW5lCiAjIGJ1dCBnZXQgdGhlbSBmcm9tIFNUQUdJTkdfS0VSTkVMX0RJUiB3aGVyZSB0aGUga2VybmVsIGluc3RhbGxzIGl0c2VsZi4KICMgVGhpcyB3aWxsIG1ha2UgdGhlIHBhY2thZ2UgdXNpbmcgdGhlbSBtYWNoaW5lIHNwZWNpZmljIGJ1dCB0aGlzIGlzIG11Y2gKLSMgYmV0dGVyIHRoYW4gaGF2aW5nIGEgbWFjaGluZSBzcGVjaWZpYyBDIGxpYnJhcnkuIFRoaXMgZG9lcyBtZWFuIHlvdXIgCi0jIHJlY2lwZSBuZWVkcyBhIERFUEVORFMgKz0gInZpcnR1YWwva2VybmVsIiBidXQgYWdhaW4sIHRoYXQgaXMgZmluZSBhbmQKLSMgbWFrZXMgdG90YWwgc2Vuc2UuCisjIGJldHRlciB0aGFuIGhhdmluZyBhIG1hY2hpbmUgc3BlY2lmaWMgQyBsaWJyYXJ5LiBUaGlzIGRvZXMgbWVhbiB5b3VyCisjIHJlY2lwZSBuZWVkcyBhCisjICAgIGRvX2NvbmZpZ3VyZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisjIGJ1dCBhZ2FpbiwgdGhhdCBpcyBmaW5lIGFuZCBtYWtlcyB0b3RhbCBzZW5zZS4KICMKICMgVGhlcmUgY2FuIGFsc28gYmUgYSBjYXNlIHdoZXJlIHlvdXIga2VybmVsIGV4dHJlbWVseSBvbGQgYW5kIHlvdSB3YW50CiAjIGFuIG9sZGVyIGxpYmMgQUJJIGZvciB0aGF0IG9sZCBrZXJuZWwuIFRoZSBoZWFkZXJzIGluc3RhbGxlZCBieSB0aGlzCkBAIC00OSw4ICs1MCw3IEBACiAKIFMgPSAiJHtXT1JLRElSfS9saW51eC0ke1BWfSIKIAotIyBGb3IgdGhlIGtlcm5lbCwgd2UgZG9uJ3Qgd2FudCB0aGUgJy1lIE1BS0VGTEFHUz0nIGluIEVYVFJBX09FTUFLRS4KLUVYVFJBX09FTUFLRSA9ICIiCitFWFRSQV9PRU1BS0UgPSAiIEhPU1RDQz0iJHtCVUlMRF9DQ30iIEhPU1RDUFA9IiR7QlVJTERfQ1BQfSIiCiAKIGRvX2NvbmZpZ3VyZSgpIHsKIAlvZV9ydW5tYWtlIGFsbG5vY29uZmlnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDEtbGliYy1jb21wYXQuaC1maXgtc29tZS1pc3N1ZXMtYXJpc2luZy1mcm9tLWluNi5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy8wMDAxLWxpYmMtY29tcGF0LmgtZml4LXNvbWUtaXNzdWVzLWFyaXNpbmctZnJvbS1pbjYuaC5wYXRjaAppbmRleCA2YWQ0Nzk4Li44YmI3NzVjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDEtbGliYy1jb21wYXQuaC1maXgtc29tZS1pc3N1ZXMtYXJpc2luZy1mcm9tLWluNi5oLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMS1saWJjLWNvbXBhdC5oLWZpeC1zb21lLWlzc3Vlcy1hcmlzaW5nLWZyb20taW42LmgucGF0Y2gKQEAgLTExLDEwICsxMSwxMCBAQAogIGluY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oIHwgMjUgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQogCi1JbmRleDogbGludXgtNC40L2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCitJbmRleDogbGludXgtNC44LXJjNC9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpbnV4LTQuNC5vcmlnL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCi0rKysgbGludXgtNC40L2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCistLS0gbGludXgtNC44LXJjNC5vcmlnL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCisrKysgbGludXgtNC44LXJjNC9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAogQEAgLTQ4LDEzICs0OCwxMiBAQAogICNpZm5kZWYgX1VBUElfTElCQ19DT01QQVRfSAogICNkZWZpbmUgX1VBUElfTElCQ19DT01QQVRfSApAQCAtMjMsMTYgKzIzLDE3IEBACiAtI2lmIGRlZmluZWQoX19HTElCQ19fKQogKyNpZm5kZWYgX19LRVJORUxfXyAvKiB3ZSdyZSB1c2VkIGZyb20gdXNlcnNwYWNlICovCiAgCi0tLyogQ29vcmRpbmF0ZSB3aXRoIGdsaWJjIG5ldGluZXQvaW4uaCBoZWFkZXIuICovCi0rLyogQ29vcmRpbmF0ZSB3aXRoIGxpYmMgbmV0aW5ldC9pbi5oIGhlYWRlci4gKi8KLSAjaWYgZGVmaW5lZChfTkVUSU5FVF9JTl9IKQorLS8qIENvb3JkaW5hdGUgd2l0aCBnbGliYyBuZXQvaWYuaCBoZWFkZXIuICovCistI2lmIGRlZmluZWQoX05FVF9JRl9IKSAmJiBkZWZpbmVkKF9fVVNFX01JU0MpCisrLyogQ29vcmRpbmF0ZSB3aXRoIGxpYmMgbmV0L2lmLmggaGVhZGVyLiAqLworKyNpZiBkZWZpbmVkKF9ORVRfSUZfSCkKICAKIC0vKiBHTElCQyBoZWFkZXJzIGluY2x1ZGVkIGZpcnN0IHNvIGRvbid0IGRlZmluZSBhbnl0aGluZwogKy8qIExJQkMgaGVhZGVycyBpbmNsdWRlZCBmaXJzdCBzbyBkb24ndCBkZWZpbmUgYW55dGhpbmcKICAgKiB0aGF0IHdvdWxkIGFscmVhZHkgYmUgZGVmaW5lZC4gKi8KLSAjZGVmaW5lIF9fVUFQSV9ERUZfSU5fQUREUgkJMAotICNkZWZpbmUgX19VQVBJX0RFRl9JTl9JUFBST1RPCQkwCi1AQCAtNjQsMTUgKzYzLDcgQEAKKyAKKyAjZGVmaW5lIF9fVUFQSV9ERUZfSUZfSUZDT05GIDAKK0BAIC05OCwxNSArOTcsNyBAQAogICNkZWZpbmUgX19VQVBJX0RFRl9JTl9DTEFTUwkJMAogIAogICNkZWZpbmUgX19VQVBJX0RFRl9JTjZfQUREUgkJMApAQCAtNDgsNyArNDksNyBAQAogICNkZWZpbmUgX19VQVBJX0RFRl9TT0NLQUREUl9JTjYJCTAKICAjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRCQkwCiAgI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYJCTAKLUBAIC04MCwxMCArNzEsMTAgQEAKK0BAIC0xMTQsMTAgKzEwNSwxMCBAQAogICNkZWZpbmUgX19VQVBJX0RFRl9JTjZfUEtUSU5GTwkJMAogICNkZWZpbmUgX19VQVBJX0RFRl9JUDZfTVRVSU5GTwkJMAogIApAQCAtNjEsNyArNjIsNyBAQAogICAqIF9fVUFQSV9ERUZfKiBkZWZpbmVzIGFuZCBhZGp1c3QgYXBwcm9wcmlhdGVseS4gKi8KICAjZGVmaW5lIF9fVUFQSV9ERUZfSU5fQUREUgkJMQogICNkZWZpbmUgX19VQVBJX0RFRl9JTl9JUFBST1RPCQkxCi1AQCAtOTMsNyArODQsNyBAQAorQEAgLTEyNyw3ICsxMTgsNyBAQAogICNkZWZpbmUgX19VQVBJX0RFRl9JTl9DTEFTUwkJMQogIAogICNkZWZpbmUgX19VQVBJX0RFRl9JTjZfQUREUgkJMQpAQCAtNzAsMTYgKzcxLDE2IEBACiAgICogY29vcmRpbmF0ZS4gKi8KICAjZGVmaW5lIF9fVUFQSV9ERUZfSU42X0FERFJfQUxUCQkxCiAgI2RlZmluZSBfX1VBUElfREVGX1NPQ0tBRERSX0lONgkJMQotQEAgLTExNSw3ICsxMDYsNyBAQAorQEAgLTE0OSw3ICsxNDAsNyBAQAogIC8qIElmIHdlIGRpZCBub3Qgc2VlIGFueSBoZWFkZXJzIGZyb20gYW55IHN1cHBvcnRlZCBDIGxpYnJhcmllcywKICAgKiBvciB3ZSBhcmUgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCwgdGhlbiBkZWZpbmUgZXZlcnl0aGluZwogICAqIHRoYXQgd2UgbmVlZC4gKi8KIC0jZWxzZSAvKiAhZGVmaW5lZChfX0dMSUJDX18pICovCiArI2Vsc2UgLyogX19LRVJORUxfXyAqLwogIAotIC8qIERlZmluaXRpb25zIGZvciBpbi5oICovCi0gI2RlZmluZSBfX1VBUElfREVGX0lOX0FERFIJCTEKLUBAIC0xMzgsNiArMTI5LDYgQEAKKyAvKiBEZWZpbml0aW9ucyBmb3IgaWYuaCAqLworICNkZWZpbmUgX19VQVBJX0RFRl9JRl9JRkNPTkYgMQorQEAgLTE4Miw2ICsxNzMsNiBAQAogIC8qIERlZmluaXRpb25zIGZvciB4YXR0ci5oICovCiAgI2RlZmluZSBfX1VBUElfREVGX1hBVFRSCQkxCiAgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDItbGliYy1jb21wYXQuaC1wcmV2ZW50LXJlZGVmaW5pdGlvbi1vZi1zdHJ1Y3QtZXRoaGRyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy8wMDAyLWxpYmMtY29tcGF0LmgtcHJldmVudC1yZWRlZmluaXRpb24tb2Ytc3RydWN0LWV0aGhkci5wYXRjaAppbmRleCBjNjE3MDkzLi44ZGMxZWRjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDItbGliYy1jb21wYXQuaC1wcmV2ZW50LXJlZGVmaW5pdGlvbi1vZi1zdHJ1Y3QtZXRoaGRyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMi1saWJjLWNvbXBhdC5oLXByZXZlbnQtcmVkZWZpbml0aW9uLW9mLXN0cnVjdC1ldGhoZHIucGF0Y2gKQEAgLTExLDEwICsxMSwxMCBAQAogIGluY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oIHwgNiArKysrKysKICAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaAotaW5kZXggYWE2M2VkMC4uZTk0ZGE1NyAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oCi0rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaAorSW5kZXg6IGxpbnV4LTQuOC1yYzQvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaW51eC00LjgtcmM0Lm9yaWcvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgKKysrKyBsaW51eC00LjgtcmM0L2luY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oCiBAQCAtMjIsNiArMjIsNyBAQAogICNkZWZpbmUgX1VBUElfTElOVVhfSUZfRVRIRVJfSAogIApAQCAtMjMsNyArMjMsNyBAQAogIAogIC8qCiAgICoJSUVFRSA4MDIuMyBFdGhlcm5ldCBtYWdpYyBjb25zdGFudHMuICBUaGUgZnJhbWUgc2l6ZXMgb21pdCB0aGUgcHJlYW1ibGUKLUBAIC0xMzQsMTEgKzEzNSwxMiBAQAorQEAgLTEzOCwxMSArMTM5LDEyIEBACiAgICoJVGhpcyBpcyBhbiBFdGhlcm5ldCBmcmFtZSBoZWFkZXIuCiAgICovCiAgCkBAIC0zNywxMCArMzcsMTAgQEAKICsjZW5kaWYKICAKICAjZW5kaWYgLyogX1VBUElfTElOVVhfSUZfRVRIRVJfSCAqLwotZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKLWluZGV4IGFmZTE1YzIuLjdkMGM3OGEgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAotKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKK0luZGV4OiBsaW51eC00LjgtcmM0L2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGludXgtNC44LXJjNC5vcmlnL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCisrKysgbGludXgtNC44LXJjNC9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAogQEAgLTUwLDYgKzUwLDEyIEBACiAgCiAgI2lmbmRlZiBfX0tFUk5FTF9fIC8qIHdlJ3JlIHVzZWQgZnJvbSB1c2Vyc3BhY2UgKi8KQEAgLTUxLDkgKzUxLDYgQEAKICsjZGVmaW5lIF9fVUFQSV9ERUZfRVRISERSIDEKICsjZW5kaWYKICsKLSAvKiBDb29yZGluYXRlIHdpdGggbGliYyBuZXRpbmV0L2luLmggaGVhZGVyLiAqLwotICNpZiBkZWZpbmVkKF9ORVRJTkVUX0lOX0gpCisgLyogQ29vcmRpbmF0ZSB3aXRoIGxpYmMgbmV0L2lmLmggaGVhZGVyLiAqLworICNpZiBkZWZpbmVkKF9ORVRfSUZfSCkgJiYgZGVmaW5lZChfX1VTRV9NSVNDKQogIAotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDMtcmVtb3ZlLWluY2x1c2lvbi1vZi1zeXNpbmZvLmgtaW4ta2VybmVsLmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDMtcmVtb3ZlLWluY2x1c2lvbi1vZi1zeXNpbmZvLmgtaW4ta2VybmVsLmgucGF0Y2gKaW5kZXggNmQ5ZThkOC4uYjVjNGUxNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy8wMDAzLXJlbW92ZS1pbmNsdXNpb24tb2Ytc3lzaW5mby5oLWluLWtlcm5lbC5oLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMy1yZW1vdmUtaW5jbHVzaW9uLW9mLXN5c2luZm8uaC1pbi1rZXJuZWwuaC5wYXRjaApAQCAtMTMsMTAgKzEzLDEwIEBACiAgaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC5oIHwgMiArKwogIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKIAotZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwuaAotaW5kZXggMzIxZTM5OS4uZThmZjgyMSAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwuaAotKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC5oCitJbmRleDogbGludXgtNC44LXJjNC9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaW51eC00LjgtcmM0Lm9yaWcvaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC5oCisrKysgbGludXgtNC44LXJjNC9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLmgKIEBAIC0xLDcgKzEsOSBAQAogICNpZm5kZWYgX1VBUElfTElOVVhfS0VSTkVMX0gKICAjZGVmaW5lIF9VQVBJX0xJTlVYX0tFUk5FTF9ICkBAIC0yNyw2ICsyNywzIEBACiAgCiAgLyoKICAgKiAna2VybmVsLmgnIGNvbnRhaW5zIHNvbWUgb2Z0ZW4tdXNlZCBmdW5jdGlvbiBwcm90b3R5cGVzIGV0YwotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZTA4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuOC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGxpbnV4LWxpYmMtaGVhZGVycy5pbmMKKworUFYgPSAiNC44IgorCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiXAorICAgIGZpbGU6Ly8wMDAxLWxpYmMtY29tcGF0LmgtZml4LXNvbWUtaXNzdWVzLWFyaXNpbmctZnJvbS1pbjYuaC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItbGliYy1jb21wYXQuaC1wcmV2ZW50LXJlZGVmaW5pdGlvbi1vZi1zdHJ1Y3QtZXRoaGRyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1yZW1vdmUtaW5jbHVzaW9uLW9mLXN5c2luZm8uaC1pbi1rZXJuZWwuaC5wYXRjaCBcCisgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMWFmMGFmYmQzZGYzNWMxY2NkYzdhNTExOGNkMmQwNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZTkxNTAwNjVmMTkzZDNkOTRiY2Y0NmExZmU5ZjAzM2M3ZWY3MTIyYWI3MWQ3NWE3ZmI1YTJmMGM5YTdlMTFhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIKaW5kZXggMTk2YzhjNy4uMGZkZDBhZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiCkBAIC0yOCw5ICsyOCw2IEBACiBkb19jb21waWxlW25vZXhlY10gPSAiMSIKIGRvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgogCi0jIERlZmluZSB3aGVyZSB0aGUga2VybmVsIGhlYWRlcnMgYXJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0IGFzIHdlbGwgYXMgd2hlcmUKLSMgdGhleSBhcmUgc3RhZ2VkLgotS0VSTkVMX1NSQ19QQVRIID0gIi91c3Ivc3JjL2tlcm5lbCIKIFMgPSAiJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgogQiA9ICIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMKaW5kZXggNzRmNWVmOC4uODUyOGQ2NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCkBAIC0zMywxMiArMzMsMTMgQEAKIGRvX2luc3RhbGxfYXBwZW5kKCkgewogCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCiAJCURUQj1gbm9ybWFsaXplX2R0YiAiJHtEVEJ9ImAKLQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCURUQl9FWFQ9JHtEVEIjIyoufQorCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQn0gLiIke0RUQl9FWFR9ImAKIAkJZm9yIHR5cGUgaW4gJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfTsgZG8KIAkJCXN5bWxpbmtfbmFtZT0ke3R5cGV9Ii0iJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfQogCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke3N5bWxpbmtfbmFtZX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAogCQkJRFRCX1BBVEg9YGdldF9yZWFsX2R0Yl9wYXRoX2luX2tlcm5lbCAiJHtEVEJ9ImAKLQkJCWluc3RhbGwgLW0gMDY0NCAke0RUQl9QQVRIfSAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0vZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LmR0YgorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uJHtEVEJfRVhUfQogCQlkb25lCiAJZG9uZQogfQpAQCAtNDYsNyArNDcsOCBAQAogZG9fZGVwbG95X2FwcGVuZCgpIHsKIAlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbwogCQlEVEI9YG5vcm1hbGl6ZV9kdGIgIiR7RFRCfSJgCi0JCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSAuZHRiYAorCQlEVEJfRVhUPSR7RFRCIyMqLn0KKwkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC4iJHtEVEJfRVhUfSJgCiAJCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX07IGRvCiAJCQliYXNlX25hbWU9JHt0eXBlfSItIiR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0KIAkJCXN5bWxpbmtfbmFtZT0ke3R5cGV9Ii0iJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfQpAQCAtNTQsOCArNTYsOCBAQAogCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke3N5bWxpbmtfbmFtZX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAogCQkJRFRCX1BBVEg9YGdldF9yZWFsX2R0Yl9wYXRoX2luX2tlcm5lbCAiJHtEVEJ9ImAKIAkJCWluc3RhbGwgLWQgJHtERVBMT1lESVJ9Ci0JCQlpbnN0YWxsIC1tIDA2NDQgJHtEVEJfUEFUSH0gJHtERVBMT1lESVJ9LyR7RFRCX05BTUV9LmR0YgotCQkJbG4gLXNmICR7RFRCX05BTUV9LmR0YiAke0RFUExPWURJUn0vJHtEVEJfU1lNTElOS19OQU1FfS5kdGIKKwkJCWluc3RhbGwgLW0gMDY0NCAke0RUQl9QQVRIfSAke0RFUExPWURJUn0vJHtEVEJfTkFNRX0uJHtEVEJfRVhUfQorCQkJbG4gLXNmICR7RFRCX05BTUV9LiR7RFRCX0VYVH0gJHtERVBMT1lESVJ9LyR7RFRCX1NZTUxJTktfTkFNRX0uJHtEVEJfRVhUfQogCQlkb25lCiAJZG9uZQogfQpAQCAtNjUsOSArNjcsMTAgQEAKIAlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbwogCQlmb3IgdHlwZSBpbiAke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9OyBkbwogCQkJc3ltbGlua19uYW1lPSR7dHlwZX0iLSIke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9CisJCQlEVEJfRVhUPSR7RFRCIyMqLn0KIAkJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSB8IGF3ayAtRiAiLiIgJ3twcmludCAkMX0nYAogCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke3N5bWxpbmtfbmFtZX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAotCQkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgLyR7S0VSTkVMX0lNQUdFREVTVH0vJHtEVEJfQkFTRV9OQU1FfS5kdGIgJHtEVEJfQkFTRV9OQU1FfS5kdGIgL2Jvb3QvZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LmR0YiAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQorCQkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgLyR7S0VSTkVMX0lNQUdFREVTVH0vJHtEVEJfQkFTRV9OQU1FfS4ke0RUQl9FWFR9ICR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfSAvYm9vdC9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uJHtEVEJfRVhUfSAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQogCQlkb25lCiAJZG9uZQogfQpAQCAtNzcsOSArODAsMTAgQEAKIAlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbwogCQlmb3IgdHlwZSBpbiAke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9OyBkbwogCQkJc3ltbGlua19uYW1lPSR7dHlwZX0iLSIke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9CisJCQlEVEJfRVhUPSR7RFRCIyMqLn0KIAkJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSB8IGF3ayAtRiAiLiIgJ3twcmludCAkMX0nYAogCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke3N5bWxpbmtfbmFtZX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAotCQkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLXJlbW92ZSAke0RUQl9CQVNFX05BTUV9LmR0YiAvYm9vdC9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCisJCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfSAvYm9vdC9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uJHtEVEJfRVhUfSAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQogCQlkb25lCiAJZG9uZQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgppbmRleCBjYzBlNGU2Li45OTRhYzc0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgpAQCAtMTgsNiArMTgsOCBAQAogQUxMT1dfRU1QVFlfa2VybmVsLW1vZHVsZXMgPSAiMSIKIERFU0NSSVBUSU9OX2tlcm5lbC1tb2R1bGVzID0gIktlcm5lbCBtb2R1bGVzIG1ldGEgcGFja2FnZSIKIAorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKwogI0NPTVBBVElCTEVfTUFDSElORSA9ICJ5b3VyX21hY2hpbmUiCiAKIFBSID0gInIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiCmluZGV4IDMwODUyNjMuLjkxNTRiYjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIKQEAgLTE0LDE0ICsxNCw2IEBACiAjIHByb3ZpZGUgdGhpcyAuaW5jIHRvIHNldCBzcGVjaWZpYyByZXZpc2lvbnMKIGluY2x1ZGUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LXJldmlzaW9ucy5pbmMKIAotIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQotIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBuZXR3b3JrIGFjY2VzcyByZXF1aXJlZAotIyBieSB0aGUgdXNlIG9mIEFVVE9SRVYgU1JDUkVWcywgd2hpY2ggYXJlIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZS4KLXB5dGhvbiAoKSB7Ci0gICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9ICJsaW51eC15b2N0by1kZXYiOgotICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1kZXYgdG8gZW5hYmxlIGl0IikKLX0KLQogS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgogS01FVEEgPSAia2VybmVsLW1ldGEiCiAKQEAgLTM2LDEyICsyOCwxNCBAQAogU1JDUkVWX21hY2hpbmUgPz0gJyR7QG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCAibGludXgteW9jdG8tZGV2IiwgIiR7QVVUT1JFVn0iLCAiMjk1OTQ0MDRkN2ZlNzNjZDgwZWFhNGVlOGM0M2RjYzUzOTcwYzYwZSIsIGQpfScKIFNSQ1JFVl9tZXRhID89ICcke0BvZS51dGlscy5jb25kaXRpb25hbCgiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgImxpbnV4LXlvY3RvLWRldiIsICIke0FVVE9SRVZ9IiwgIjI5NTk0NDA0ZDdmZTczY2Q4MGVhYTRlZThjNDNkY2M1Mzk3MGM2MGUiLCBkKX0nCiAKLUxJTlVYX1ZFUlNJT04gPz0gIjQuNi1yYysiCitMSU5VWF9WRVJTSU9OID89ICI0LjgtcmMrIgogTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0b2Rldi0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKIENPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdWFybXxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0KSIKIAorS0VSTkVMX0RFVklDRVRSRUVfcWVtdWFybSA9ICJ2ZXJzYXRpbGUtcGIuZHRiIgorCiAjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKIEtFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MgZmVhdHVyZXMvdGFza3N0YXRzL3Rhc2tzdGF0cy5zY2MiCiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIKaW5kZXggYTEzODk1Ny4uYjk1ZmI1OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpAQCAtMiwxMyArMiwyMiBAQAogCiByZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwogCi1TUkNSRVZfbWFjaGluZSA/PSAiMjhkOGNmZGJjYjE4YTZlZWYyMDIwOTljY2E2NjQzMGZkM2I2ZWFlMCIKLVNSQ1JFVl9tZXRhID89ICJhNGY4OGMzZmFkODg3ZTFjNTU5ZDAzYWUxYjUzMWNhMjY3MTM3YjY5IgorIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBlcnJvcnMgd2hlbiB0cnlpbmcKKyMgdG8gYnVpbGQgbXVsdGlwbGUgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXJzLCBlLmcuIGFzIGRlcGVuZGVuY3kgb2YKKyMgY29yZS1pbWFnZS1ydC1zZGssIGNvcmUtaW1hZ2UtcnQuCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCBUcnVlKSAhPSAibGludXgteW9jdG8tcnQiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1ydCB0byBlbmFibGUgaXQiKQorfQorCitTUkNSRVZfbWFjaGluZSA/PSAiOTY2ZGRkZTQ5MDAzMDE2NjAxMGM1NzcwZjhmODZjZGQwZTk2MWM3NiIKK1NSQ1JFVl9tZXRhID89ICIzYzMxOTdlNjViNmYyZjU1MTQ4NTNjMWZlNzhhZThmZmMxMzFiMDJjIgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKIAotTElOVVhfVkVSU0lPTiA/PSAiNC4xLjE4IgorTElOVVhfVkVSU0lPTiA/PSAiNC4xLjMzIgogCiBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjQuYmIKaW5kZXggZDgxY2ExMy4uNmMxMTM4MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuNC5iYgpAQCAtMSwxNCArMSwyMyBAQAotS0JSQU5DSCA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydCIKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIKIAogcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKIAotU1JDUkVWX21hY2hpbmUgPz0gIjJiYzExMmE2Y2NkMTY4MDBhNGM0NWU0N2NjYjMwMThhMTA0MmFiZGYiCi1TUkNSRVZfbWV0YSA/PSAiYmNjNjUwOTA4NDBmNTFhNmFjOTM3Mjk3YmU1YzIyZmUyNjhkMDFhYiIKKyMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKKyMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gdHJ5aW5nCisjIHRvIGJ1aWxkIG11bHRpcGxlIHZpcnR1YWwva2VybmVsIHByb3ZpZGVycywgZS5nLiBhcyBkZXBlbmRlbmN5IG9mCisjIGNvcmUtaW1hZ2UtcnQtc2RrLCBjb3JlLWltYWdlLXJ0LgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgVHJ1ZSkgIT0gImxpbnV4LXlvY3RvLXJ0IjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tcnQgdG8gZW5hYmxlIGl0IikKK30KKworU1JDUkVWX21hY2hpbmUgPz0gIjY1MmI1NjQ5ODVkYjU1NWI1NDllZjczNDA1YWVhNmMzODkxOWVlZmMiCitTUkNSRVZfbWV0YSA/PSAiMzAzMDMzMGIwNjZhMzNjZTIxMTY0YThiMzBkMDUwM2NmOWY2OGU1YiIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCiAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC40O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCiAKLUxJTlVYX1ZFUlNJT04gPz0gIjQuNC4zIgorTElOVVhfVkVSU0lPTiA/PSAiNC40LjI2IgogCiBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxYzljZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuOC5iYgpAQCAtMCwwICsxLDM4IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKKyMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gdHJ5aW5nCisjIHRvIGJ1aWxkIG11bHRpcGxlIHZpcnR1YWwva2VybmVsIHByb3ZpZGVycywgZS5nLiBhcyBkZXBlbmRlbmN5IG9mCisjIGNvcmUtaW1hZ2UtcnQtc2RrLCBjb3JlLWltYWdlLXJ0LgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgVHJ1ZSkgIT0gImxpbnV4LXlvY3RvLXJ0IjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tcnQgdG8gZW5hYmxlIGl0IikKK30KKworU1JDUkVWX21hY2hpbmUgPz0gIjQwNTc1NTZjMDQxZjZhYWMwZDI5YWEzNDI1NTg3ZDQxNGM5YTAwOTAiCitTUkNSRVZfbWV0YSA/PSAiODMxMTBkOTRlZGViODU2YTM2NjdiNjI5MDNlZDRhZTkxYzI0MTE3ZCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjguZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC44O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuOC4zIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitMSU5VWF9LRVJORUxfVFlQRSA9ICJwcmVlbXB0LXJ0IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODZ8cWVtdXg4Ni02NHxxZW11YXJtfHFlbXVwcGN8cWVtdW1pcHMpIgorCitLRVJORUxfREVWSUNFVFJFRV9xZW11YXJtID0gInZlcnNhdGlsZS1wYi5kdGIiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdWFsbD0iIGNmZy92aXJ0aW8uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiCmluZGV4IDI4YzcyMTMuLmJhMDE3MDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiCkBAIC00LDEzICs0LDEzIEBACiAKIHJlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCiAKLUxJTlVYX1ZFUlNJT04gPz0gIjQuMS4xOCIKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMS4zMyIKIAogS01FVEEgPSAia2VybmVsLW1ldGEiCiBLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKIAotU1JDUkVWX21hY2hpbmUgPz0gIjkxZjYyZDRhMGEzMTkxOWQ5YjJjY2RhZjg4MTEzMGY5OWI2MWZjNWUiCi1TUkNSRVZfbWV0YSA/PSAiYTRmODhjM2ZhZDg4N2UxYzU1OWQwM2FlMWI1MzFjYTI2NzEzN2I2OSIKK1NSQ1JFVl9tYWNoaW5lID89ICJmNGQwOTAwYjI4NTFlODI5ZTk5MGUwZjY0YjA5ZWQzYjhlMzU1ZmFlIgorU1JDUkVWX21ldGEgPz0gIjNjMzE5N2U2NWI2ZjJmNTUxNDg1M2MxZmU3OGFlOGZmYzEzMWIwMmMiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmIKaW5kZXggNjg0ZTg4MC4uNzZjNDE2MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmIKQEAgLTQsMTMgKzQsMTMgQEAKIAogcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKIAotTElOVVhfVkVSU0lPTiA/PSAiNC40LjMiCitMSU5VWF9WRVJTSU9OID89ICI0LjQuMjYiCiAKIEtNRVRBID0gImtlcm5lbC1tZXRhIgogS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCiAKLVNSQ1JFVl9tYWNoaW5lID89ICIxYTcyY2VjODM0ZGUyYzgwYjU1NjNmOGFmYmVlYTc2NjRmZDVlZTA1IgotU1JDUkVWX21ldGEgPz0gImJjYzY1MDkwODQwZjUxYTZhYzkzNzI5N2JlNWMyMmZlMjY4ZDAxYWIiCitTUkNSRVZfbWFjaGluZSA/PSAiY2E2YTA4YmQ3Zjg2ZWJlZjExZjc2M2QyNmY3ODdmN2Q2NTI3MDQ3MyIKK1NSQ1JFVl9tZXRhID89ICIzMDMwMzMwYjA2NmEzM2NlMjExNjRhOGIzMGQwNTAzY2Y5ZjY4ZTViIgogCiBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZGRiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYgpAQCAtMCwwICsxLDI1IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC90aW55L2NvbW1vbi1wYyIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiNC44LjMiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICIxYWRmOWQzNjMzOGRjM2M2M2NkYmY2Zjk4YmNiZGM3YmJhNDJhNzk0IgorU1JDUkVWX21ldGEgPz0gIjgzMTEwZDk0ZWRlYjg1NmEzNjY3YjYyOTAzZWQ0YWU5MWMyNDExN2QiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC44LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuODtkZXN0c3VmZml4PSR7S01FVEF9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODYkKSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRkVBVFVSRVMgPSAiIgorCitLRVJORUxfREVWSUNFVFJFRV9xZW11YXJtID0gInZlcnNhdGlsZS1wYi5kdGIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKaW5kZXggNmIxNjFmYy4uMDljZDFmMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpAQCAtOCw2ICs4LDE1IEBACiAKIElOQ19QUiA9ICJyNCIKIAorIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBuZXR3b3JrIGFjY2VzcyByZXF1aXJlZAorIyBieSB0aGUgdXNlIG9mIEFVVE9SRVYgU1JDUkVWcywgd2hpY2ggYXJlIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZS4KK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9IGQuZ2V0VmFyKCJQTiIsIFRydWUpOgorICAgICAgICBkLmRlbFZhcigiQkJfRE9OVF9DQUNIRSIpCisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJTZXQgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIHRvICVzIHRvIGVuYWJsZSBpdCIgJSAoZC5nZXRWYXIoIlBOIiwgVHJ1ZSkpKQorfQorCiBERVBFTkRTICs9ICJ4ei1uYXRpdmUgYmMtbmF0aXZlIgogREVQRU5EU19hcHBlbmRfYWFyY2g2NCA9ICIgbGliZ2NjIgogS0VSTkVMX0NDX2FwcGVuZF9hYXJjaDY0ID0gIiAke1RPT0xDSEFJTl9PUFRJT05TfSIKQEAgLTE3LDYgKzI2LDggQEAKIEtFUk5FTF9DQ19hcHBlbmRfbmlvczIgPSAiICR7VE9PTENIQUlOX09QVElPTlN9IgogS0VSTkVMX0xEX2FwcGVuZF9uaW9zMiA9ICIgJHtUT09MQ0hBSU5fT1BUSU9OU30iCiAKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdWFsbD0iIGZlYXR1cmVzL2RlYnVnL3ByaW50ay5zY2MiCisKICMgQSBLTUFDSElORSBpcyB0aGUgbWFwcGluZyBvZiBhIHlvY3RvICRNQUNISU5FIHRvIHdoYXQgaXMgYnVpbHQKICMgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGJyYW5jaCB0aGF0IHNob3VsZCBiZSBidWlsdCwKICMgYW5kIGl0IGNhbiBiZSBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBvciBzaGFyZWQKQEAgLTM1LDYgKzQ2LDcgQEAKICMgICAyOiByZXBvcnQgb3B0aW9ucyB0aGF0IGFyZSBub3QgaGFyZHdhcmUgcmVsYXRlZCwgYnV0IHNldCBieSBhIEJTUAogS0NPTkZfQVVESVRfTEVWRUwgPz0gIjEiCiBLQ09ORl9CU1BfQVVESVRfTEVWRUwgPz0gIjAiCitLTUVUQV9BVURJVCA/PSAieWVzIgogCiBMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAiLXlvY3RvLSR7TElOVVhfS0VSTkVMX1RZUEV9IgogCkBAIC01Miw2ICs2NCw3IEBACiB9CiAKICMgZXh0cmEgdGFza3MKLWFkZHRhc2sga2VybmVsX2xpbmtfdm1saW51eCBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19pbnN0YWxsCithZGR0YXNrIGtlcm5lbF92ZXJzaW9uX3Nhbml0eV9jaGVjayBhZnRlciBkb19rZXJuZWxfbWV0YWRhdGEgZG9fa2VybmVsX2NoZWNrb3V0IGJlZm9yZSBkb19jb21waWxlCithZGR0YXNrIGtlcm5lbF9saW5rX2ltYWdlcyBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19zdHJpcAogYWRkdGFzayB2YWxpZGF0ZV9icmFuY2hlcyBiZWZvcmUgZG9fcGF0Y2ggYWZ0ZXIgZG9fa2VybmVsX2NoZWNrb3V0CiBhZGR0YXNrIGtlcm5lbF9jb25maWdjaGVjayBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYgppbmRleCBhZWNiNTE3Li43ODhhOGVhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCkBAIC0xMSwyMCArMTEsMjAgQEAKIEtCUkFOQ0hfcWVtdXg4Ni02NCA/PSAic3RhbmRhcmQvYmFzZSIKIEtCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCiAKLVNSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjIzMmUyZDg4ODQxYzdlMjA4NTczNTAyNzVkODBmNTU4NWVkOTM3MzQiCi1TUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjkxZjYyZDRhMGEzMTkxOWQ5YjJjY2RhZjg4MTEzMGY5OWI2MWZjNWUiCi1TUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiN2QzNjkwYzA3NjJmMTFlMDM4ZjE0MzEwYTUwY2ExY2RjODEzY2MyMiIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjkxZjYyZDRhMGEzMTkxOWQ5YjJjY2RhZjg4MTEzMGY5OWI2MWZjNWUiCi1TUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICI5MWY2MmQ0YTBhMzE5MTlkOWIyY2NkYWY4ODExMzBmOTliNjFmYzVlIgotU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiOTFmNjJkNGEwYTMxOTE5ZDliMmNjZGFmODgxMTMwZjk5YjYxZmM1ZSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gImI3MWU0Y2Q3ZDQ1ZjAzMDQ4YWQzMWUyYTM2ZGZlNWE0M2YwMjFiNTEiCi1TUkNSRVZfbWFjaGluZSA/PSAiOTFmNjJkNGEwYTMxOTE5ZDliMmNjZGFmODgxMTMwZjk5YjYxZmM1ZSIKLVNSQ1JFVl9tZXRhID89ICJhNGY4OGMzZmFkODg3ZTFjNTU5ZDAzYWUxYjUzMWNhMjY3MTM3YjY5IgorU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiZDY3ZWY0ODVjZTE0MjBkZjExYmRhMmQ5ZjZmYjc4ZWY1MGMxYWRmZiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiZjRkMDkwMGIyODUxZTgyOWU5OTBlMGY2NGIwOWVkM2I4ZTM1NWZhZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICI2NTExNjMzOWNmZDIxMDk5MGM5YzQ3MTBjZGZlYzNlYmQ1OWFiYjBlIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiMzA4MTY5MDc2NTNiNTdmMWYzZDVmOWE3YTJmNjMzOWJhYjE0YTY4MCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImY0ZDA5MDBiMjg1MWU4MjllOTkwZTBmNjRiMDllZDNiOGUzNTVmYWUiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICJmNGQwOTAwYjI4NTFlODI5ZTk5MGUwZjY0YjA5ZWQzYjhlMzU1ZmFlIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiZjdhMGI1MzJiNmFjODE3NTdkODViMGM5YTkyOGY0NWE4N2M5ZTM2NCIKK1NSQ1JFVl9tYWNoaW5lID89ICJmNGQwOTAwYjI4NTFlODI5ZTk5MGUwZjY0YjA5ZWQzYjhlMzU1ZmFlIgorU1JDUkVWX21ldGEgPz0gIjNjMzE5N2U2NWI2ZjJmNTUxNDg1M2MxZmU3OGFlOGZmYzEzMWIwMmMiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKIAotTElOVVhfVkVSU0lPTiA/PSAiNC4xLjE4IgorTElOVVhfVkVSU0lPTiA/PSAiNC4xLjMzIgogCiBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmIKaW5kZXggM2M1ZWUxYi4uZTNhM2Q5MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYgpAQCAtMTEsMjAgKzExLDIwIEBACiBLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2Jhc2UiCiBLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgogCi1TUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICJlYzkxNjdiY2IwY2NkNDg5NzE3N2M1ZTIzNWFmNjhiNTg5MGFhMzI2IgotU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICIxYTcyY2VjODM0ZGUyYzgwYjU1NjNmOGFmYmVlYTc2NjRmZDVlZTA1IgotU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjkwMGY5OGQzYWI2NDk4YmM3ZjRmZjZiN2E0ODlkYjNiY2E0ZTY0MTciCi1TUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICIxYTcyY2VjODM0ZGUyYzgwYjU1NjNmOGFmYmVlYTc2NjRmZDVlZTA1IgotU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiMWE3MmNlYzgzNGRlMmM4MGI1NTYzZjhhZmJlZWE3NjY0ZmQ1ZWUwNSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gIjFhNzJjZWM4MzRkZTJjODBiNTU2M2Y4YWZiZWVhNzY2NGZkNWVlMDUiCi1TUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICI0YjA4ZGZiMWZiM2JjNzY1OWU4ZjNlMTM2NjU1OTdkOWE5ZjA4MTZkIgotU1JDUkVWX21hY2hpbmUgPz0gIjFhNzJjZWM4MzRkZTJjODBiNTU2M2Y4YWZiZWVhNzY2NGZkNWVlMDUiCi1TUkNSRVZfbWV0YSA/PSAiYmNjNjUwOTA4NDBmNTFhNmFjOTM3Mjk3YmU1YzIyZmUyNjhkMDFhYiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjE4N2JjYzEzZjMwMjNjM2FlMGEzYmE1YzY5YWU4NWM0ZTVlNjkzYWMiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gImNhNmEwOGJkN2Y4NmViZWYxMWY3NjNkMjZmNzg3ZjdkNjUyNzA0NzMiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiMmYyNzM1NTY0OTVkZDI4NzFmMDhjNzNmYzNmNDBkMWFkNTQ2YzYzOCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gImNhNmEwOGJkN2Y4NmViZWYxMWY3NjNkMjZmNzg3ZjdkNjUyNzA0NzMiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICJjYTZhMDhiZDdmODZlYmVmMTFmNzYzZDI2Zjc4N2Y3ZDY1MjcwNDczIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiY2E2YTA4YmQ3Zjg2ZWJlZjExZjc2M2QyNmY3ODdmN2Q2NTI3MDQ3MyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gIjBhMTljYWNmNTczODg3NjY2NmE0YjUzMGE5ZmExNGYwNWIzNTUyOTkiCitTUkNSRVZfbWFjaGluZSA/PSAiY2E2YTA4YmQ3Zjg2ZWJlZjExZjc2M2QyNmY3ODdmN2Q2NTI3MDQ3MyIKK1NSQ1JFVl9tZXRhID89ICIzMDMwMzMwYjA2NmEzM2NlMjExNjRhOGIzMGQwNTAzY2Y5ZjY4ZTViIgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuNC5naXQ7bmFtZT1tYWNoaW5lO2JyYW5jaD0ke0tCUkFOQ0h9OyBcCiAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC40O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCiAKLUxJTlVYX1ZFUlNJT04gPz0gIjQuNC4zIgorTElOVVhfVkVSU0lPTiA/PSAiNC40LjI2IgogCiBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3NzhiOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYgpAQCAtMCwwICsxLDQ0IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9iYXNlIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIGJvYXJkIHNwZWNpZmljIGJyYW5jaGVzCitLQlJBTkNIX3FlbXVhcm0gID89ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKK0tCUkFOQ0hfcWVtdWFybTY0ID89ICJzdGFuZGFyZC9xZW11YXJtNjQiCitLQlJBTkNIX3FlbXVtaXBzID89ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKK0tCUkFOQ0hfcWVtdXBwYyAgPz0gInN0YW5kYXJkL3FlbXVwcGMiCitLQlJBTkNIX3FlbXV4ODYgID89ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiNGNjNTQ0YWQwOWFkNzA0MzIyY2I2NmZlNGJhMTk3YTZhMDVkYzcxZiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiMWFkZjlkMzYzMzhkYzNjNjNjZGJmNmY5OGJjYmRjN2JiYTQyYTc5NCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICJjMjg1OTY5ZDRmOTM3NmE2NzExNjdlY2YzOTc1NzhjOGFkM2U2YTc1IgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiMWFkZjlkMzYzMzhkYzNjNjNjZGJmNmY5OGJjYmRjN2JiYTQyYTc5NCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gIjFhZGY5ZDM2MzM4ZGMzYzYzY2RiZjZmOThiY2JkYzdiYmE0MmE3OTQiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICIxYWRmOWQzNjMzOGRjM2M2M2NkYmY2Zjk4YmNiZGM3YmJhNDJhNzk0IgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiNjRmOTZiYTUzMGU1ODQ1NjA3MGYyNmIwZjNmY2NlM2Y2NDk4OGI3MiIKK1NSQ1JFVl9tYWNoaW5lID89ICIxYWRmOWQzNjMzOGRjM2M2M2NkYmY2Zjk4YmNiZGM3YmJhNDJhNzk0IgorU1JDUkVWX21ldGEgPz0gIjgzMTEwZDk0ZWRlYjg1NmEzNjY3YjYyOTAzZWQ0YWU5MWMyNDExN2QiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC44LmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00Ljg7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC44LjMiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0tFUk5FTF9ERVZJQ0VUUkVFX3FlbXVhcm0gPSAidmVyc2F0aWxlLXBiLmR0YiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdWFsbD0iIGNmZy92aXJ0aW8uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTJjNGUxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotRnJvbSBlNGNhZDkwMDk5NGNmMjg2ZDk3MTc5NmE5NDdmZWE3ODJkZmM2NjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTE6NDM6MDIgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IGludmFsaWQgcG9pbnRlciBmcmVlIHdpdGggdHJhY2UgY29sbGVjdGlvbgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotCi1QYXRjaCBwcm9wb3NlZCBieSBMaSBSb25nUWluZyByZWxhdGVkIHRvIGJ1ZyMgNzkwCi0KLVNpZ25lZC1vZmYtYnk6IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KLS0tLQotIGxpYi9jb250ZXh0LmMgfCA4ICsrKy0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYi9jb250ZXh0LmMgYi9saWIvY29udGV4dC5jCi1pbmRleCA0NWFhYjM0Li44ZDM3NzBmIDEwMDY0NAotLS0tIGEvbGliL2NvbnRleHQuYwotKysrIGIvbGliL2NvbnRleHQuYwotQEAgLTc5LDcgKzc5LDcgQEAgaW50IGJ0X2NvbnRleHRfYWRkX3RyYWNlKHN0cnVjdCBidF9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGgsCi0gCXN0cnVjdCBidF90cmFjZV9kZXNjcmlwdG9yICp0ZDsKLSAJc3RydWN0IGJ0X2Zvcm1hdCAqZm10OwotIAlzdHJ1Y3QgYnRfdHJhY2VfaGFuZGxlICpoYW5kbGU7Ci0tCWludCByZXQsIGNsb3NlcmV0OwotKwlpbnQgcmV0OwotIAotIAlpZiAoIWN0eCB8fCAhZm9ybWF0X25hbWUgfHwgKCFwYXRoICYmICFzdHJlYW1fbGlzdCkpCi0gCQlyZXR1cm4gLUVJTlZBTDsKLUBAIC0xNTksMTAgKzE1OSw4IEBAIGludCBidF9jb250ZXh0X2FkZF90cmFjZShzdHJ1Y3QgYnRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoLAotIAlyZXR1cm4gaGFuZGxlLT5pZDsKLSAKLSBlcnJvcjoKLS0JY2xvc2VyZXQgPSBmbXQtPmNsb3NlX3RyYWNlKHRkKTsKLS0JaWYgKGNsb3NlcmV0KSB7Ci0tCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluIGNsb3NlX3RyYWNlIGNhbGxiYWNrXG4iKTsKLS0JfQotKwlpZiAoaGFuZGxlKQotKwkJYnRfY29udGV4dF9yZW1vdmVfdHJhY2UoY3R4LCBoYW5kbGUtPmlkKTsKLSBlbmQ6Ci0gCXJldHVybiByZXQ7Ci0gfQotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlLzAwMDEtbHR0bmctbGl2ZS1JbmNsdWRlLXN5cy1wYXJhbS5oLWZvci1NQVhOQU1MRU4tZGVmaW50aS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1sdHRuZy1saXZlLUluY2x1ZGUtc3lzLXBhcmFtLmgtZm9yLU1BWE5BTUxFTi1kZWZpbnRpLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjE2Y2QxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1sdHRuZy1saXZlLUluY2x1ZGUtc3lzLXBhcmFtLmgtZm9yLU1BWE5BTUxFTi1kZWZpbnRpLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRnJvbSA4MzMxYjg3ODQ1Y2FmZGRhNDBlNTlhNjgyZjJjYTgxMjBlZDBjNDcyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMzEgRGVjIDIwMTUgMDg6MTc6NDAgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gbHR0bmctbGl2ZTogSW5jbHVkZSBzeXMvcGFyYW0uaCBmb3IgTUFYTkFNTEVOIGRlZmludGlvbgotCi1leHBvc2VkIG9uIG11c2wgYmFzZWQgc3lzdGVtcwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKLQotIGZvcm1hdHMvbHR0bmctbGl2ZS9sdHRuZy1saXZlLmggfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL2Zvcm1hdHMvbHR0bmctbGl2ZS9sdHRuZy1saXZlLmggYi9mb3JtYXRzL2x0dG5nLWxpdmUvbHR0bmctbGl2ZS5oCi1pbmRleCA0YWI2NDFkLi44MDhlZDJiIDEwMDY0NAotLS0tIGEvZm9ybWF0cy9sdHRuZy1saXZlL2x0dG5nLWxpdmUuaAotKysrIGIvZm9ybWF0cy9sdHRuZy1saXZlL2x0dG5nLWxpdmUuaAotQEAgLTI1LDYgKzI1LDcgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8c3RkaW50Lmg+Ci0rI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotICNpbmNsdWRlICJsdHRuZy12aWV3ZXItYWJpLmgiCi0gCi0gI2RlZmluZSBMVFROR19ERUZBVUxUX05FVFdPUktfVklFV0VSX1BPUlQJNTM0NAotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMy4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjMuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2NjAyNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMy4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotU1VNTUFSWSA9ICJCYWJlbHRyYWNlIC0gVHJhY2UgRm9ybWF0IEJhYmVsIFRvd2VyIgotREVTQ1JJUFRJT04gPSAiQmFiZWx0cmFjZSBwcm92aWRlcyB0cmFjZSByZWFkIGFuZCB3cml0ZSBsaWJyYXJpZXMgaW4gaG9zdCBzaWRlLCBhcyB3ZWxsIGFzIGEgdHJhY2UgY29udmVydGVyLCB3aGljaCB1c2VkIHRvIGNvbnZlcnQgTFRUbmcgMi4wIHRyYWNlcyBpbnRvIGh1bWFuLXJlYWRhYmxlIGxvZy4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9iYWJlbHRyYWNlIgotCi1MSUNFTlNFID0gIk1JVCAmIEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzZiYTE1ZGQ3NmEyNDhlMWRkNTI2YmNhMGUyMTI1ZmEiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgdXRpbC1saW51eCBwb3B0IGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVNSQ1JFViA9ICI2ZTJiOTA5NmM3NzEzODU5MzA5NzMzNWI5YjI3MjAyZDk4OTE4MDg5IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC5lZmZpY2lvcy5jb20vYmFiZWx0cmFjZS5naXQ7YnJhbmNoPXN0YWJsZS0xLjMgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbHR0bmctbGl2ZS1JbmNsdWRlLXN5cy1wYXJhbS5oLWZvci1NQVhOQU1MRU4tZGVmaW50aS5wYXRjaCBcCi0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQkoIGNkICR7U307ICR7U30vYm9vdHN0cmFwICkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS40LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYWRlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuNC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQmFiZWx0cmFjZSAtIFRyYWNlIEZvcm1hdCBCYWJlbCBUb3dlciIKK0RFU0NSSVBUSU9OID0gIkJhYmVsdHJhY2UgcHJvdmlkZXMgdHJhY2UgcmVhZCBhbmQgd3JpdGUgbGlicmFyaWVzIGluIGhvc3Qgc2lkZSwgYXMgd2VsbCBhcyBhIHRyYWNlIGNvbnZlcnRlciwgd2hpY2ggdXNlZCB0byBjb252ZXJ0IExUVG5nIDIuMCB0cmFjZXMgaW50byBodW1hbi1yZWFkYWJsZSBsb2cuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5lZmZpY2lvcy5jb20vYmFiZWx0cmFjZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5sdHRuZy5vcmcvcHJvamVjdHMvYmFiZWx0cmFjZSIKKworTElDRU5TRSA9ICJNSVQgJiBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc2YmExNWRkNzZhMjQ4ZTFkZDUyNmJjYTBlMjEyNWZhIgorCitERVBFTkRTID0gImdsaWItMi4wIHV0aWwtbGludXggcG9wdCBiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZWZmaWNpb3MuY29tL2ZpbGVzL2JhYmVsdHJhY2UvYmFiZWx0cmFjZS0ke1BWfS50YXIuYnoyIFwKKyIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZWJ1Zy1pbmZvIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmE5OTA2NDA0OGFmNWM5YzZmZjAwZTQ4OWFjODA5YzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTQ2OWVlYjIyNjE3Y2QxMjY2ODY4M2IwNGMyNzAwM2U1MzM3ZTlhYzY2YWRlOTE0OTg4ZGYzNjQyZmMwZDBlNCIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlcy9NYWtlZmlsZS1Eby1ub3QtZmFpbC1pZi1DT05GSUdfVFJBQ0VQT0lOVFMtaXMtbm90LWVuLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlcy9NYWtlZmlsZS1Eby1ub3QtZmFpbC1pZi1DT05GSUdfVFJBQ0VQT0lOVFMtaXMtbm90LWVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTFmMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzL01ha2VmaWxlLURvLW5vdC1mYWlsLWlmLUNPTkZJR19UUkFDRVBPSU5UUy1pcy1ub3QtZW4ucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSAxYjBlNTc0ZDY4MDEwMTEwNWE2YzFlODkzMWM3ODgyNGY1YTk3YTQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IE1vbiwgNSBTZXAgMjAxNiAxNzowODo1NiArMDAwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogRG8gbm90IGZhaWwgaWYgQ09ORklHX1RSQUNFUE9JTlRTIGlzIG5vdCBlbmFibGVkCitPcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitUaGUgbHR0bmctbW9kdWxlcyBhcmUgYmVpbmcgcHVsbGVkIGJ5IHRoZSB0b29scy1wcm9maWxlIGltYWdlIGZlYXR1cmUsCitob3dldmVyLCBub3QgZXZlcnkga2VybmVsIGhhcyB0aGUgQ09ORklHX1RSQUNFUE9JTlRTIGZlYXR1cmUgZW5hYmxlZC4KKworVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIGJ1aWxkIGRvIG5vdCBmYWlsIHdoZW4gQ09ORklHX1RSQUNFUE9JTlRTIGlzIG5vdAorYXZhaWxhYmxlLCBhbGxvd2luZyBpdCB0byBiZSBrZXB0IGJlaW5nIHB1bGxlZCBieSBkZWZhdWx0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CistLS0KKyBNYWtlZmlsZSB8IDkgKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDg2MDI2NDkuLjc1NTUwY2MgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC04LDEwICs4LDcgQEAgaWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQorICAgIyBhbmQgZGVmaW5lcyB0aGUgbW9kdWxlcyB0byBiZSBidWlsdC4KKyAKKyAgIGlmZGVmIENPTkZJR19MT0NBTFZFUlNJT04JIyBDaGVjayBpZiBkb3QtY29uZmlnIGlzIGluY2x1ZGVkLgorLSAgICBpZmVxICgkKENPTkZJR19UUkFDRVBPSU5UUyksKQorLSAgICAgICQoZXJyb3IgVGhlIG9wdGlvbiBDT05GSUdfVFJBQ0VQT0lOVFMgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uKQorLSAgICBlbmRpZiAjIENPTkZJR19UUkFDRVBPSU5UUworLSAgZW5kaWYgIyBpZmRlZiBDT05GSUdfTE9DQUxWRVJTSU9OCisrICAgIGlmbmVxICgkKENPTkZJR19UUkFDRVBPSU5UUyksKQorIAorICAgVE9QX0xUVE5HX01PRFVMRVNfRElSIDo9ICQoc2hlbGwgZGlybmFtZSAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKQorIAorQEAgLTk0LDYgKzkxLDEwIEBAIGlmbmVxICgkKEtFUk5FTFJFTEVBU0UpLCkKKyAgIG9iai0kKENPTkZJR19MVFRORykgKz0gbGliLworICAgb2JqLSQoQ09ORklHX0xUVE5HKSArPSB0ZXN0cy8KKyAKKysgICAgZWxzZQorKyAgICAgICQod2FybmluZyBUaGUgb3B0aW9uIENPTkZJR19UUkFDRVBPSU5UUyBuZWVkcyB0byBiZSBlbmFibGVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24pCisrICAgIGVuZGlmICMgQ09ORklHX1RSQUNFUE9JTlRTCisrICBlbmRpZiAjIGlmZGVmIENPTkZJR19MT0NBTFZFUlNJT04KKyBlbHNlICMgS0VSTkVMUkVMRUFTRQorIAorICMgVGhpcyBwYXJ0IG9mIHRoZSBNYWtlZmlsZSBpcyB1c2VkIHdoZW4gdGhlICdtYWtlJyBjb21tYW5kIGlzIHJ1bm5lZCBpbiB0aGUKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgppbmRleCAyZWIxYTUxLi43MDE0NTQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgpAQCAtOCwxMiArOCwxMyBAQAogCiBpbmhlcml0IG1vZHVsZQogCi1TUkNSRVYgPSAiNDVlMGViZDkxZjk5NWNjNzNjMmIwZDVjNjBjZjlkMTJlOGM4MzhiZiIKLVBWID0gIjIuNy4xK2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjZlNGZjNmYzNmQ2OGZiM2M4ZDQwMTEzZjg2NzBlYjZlOWM4ZmZkNzYiCitQViA9ICIyLjguMCtnaXQke1NSQ1BWfSIKIAogQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFhcmNoNjR8bWlwc3xuaW9zMnxhcm0pLiotbGludXgnCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy1tb2R1bGVzLmdpdDticmFuY2g9c3RhYmxlLTIuNyIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy1tb2R1bGVzLmdpdDticmFuY2g9c3RhYmxlLTIuOCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1Eby1ub3QtZmFpbC1pZi1DT05GSUdfVFJBQ0VQT0lOVFMtaXMtbm90LWVuLnBhdGNoIgogCiBleHBvcnQgSU5TVEFMTF9NT0RfRElSPSJrZXJuZWwvbHR0bmctbW9kdWxlcyIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvMDAwMS1GaXgtZXJyb3IuaC1jb21tb24tZXJyb3IuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzLzAwMDEtRml4LWVycm9yLmgtY29tbW9uLWVycm9yLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4YTliMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzLzAwMDEtRml4LWVycm9yLmgtY29tbW9uLWVycm9yLmgucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA2NzEyZGI2MTdmZTkxNTVlYTIzNmY2ODQwYzJiZDE4ZGJlYzRjODcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBKZWFuc29uIDxtamVhbnNvbkBlZmZpY2lvcy5jb20+CitEYXRlOiBXZWQsIDE1IEp1biAyMDE2IDE3OjE4OjAzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeDogZXJyb3IuaCAtPiBjb21tb24vZXJyb3IuaAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgSmVhbnNvbiA8bWplYW5zb25AZWZmaWNpb3MuY29tPgorU2lnbmVkLW9mZi1ieTogSsOpcsOpbWllIEdhbGFybmVhdSA8amVyZW1pZS5nYWxhcm5lYXVAZWZmaWNpb3MuY29tPgorU2lnbmVkLW9mZi1ieTogUGV0ZXIgTGl1IDxwZXRlci54LmxpdUBleHRlcm5hbC5hdGxhc2NvcGNvLmNvbT4KKy0tLQorIHNyYy9iaW4vbHR0bmctc2Vzc2lvbmQvYWdlbnQuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvYWdlbnQuYyBiL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvYWdlbnQuYworaW5kZXggN2NiYmJkZS4uMzEwYTdlOCAxMDA2NDQKKy0tLSBhL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvYWdlbnQuYworKysrIGIvc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9hZ2VudC5jCitAQCAtMjksNyArMjksNyBAQAorICNpbmNsdWRlICJhZ2VudC5oIgorICNpbmNsdWRlICJ1c3QtYXBwLmgiCisgI2luY2x1ZGUgInV0aWxzLmgiCistI2luY2x1ZGUgImVycm9yLmgiCisrI2luY2x1ZGUgImNvbW1vbi9lcnJvci5oIgorIAorICNkZWZpbmUgQUdFTlRfUkVUX0NPREVfSU5ERVgoY29kZSkgKGNvZGUgLSBBR0VOVF9SRVRfQ09ERV9TVUNDRVNTKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9SZXZlcnQtQnVpbGQtbG9vay1mb3ItcHl0aG9uLTMuMC13aGVuLWJ1aWxkaW5nLXB5dGhvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvUmV2ZXJ0LUJ1aWxkLWxvb2stZm9yLXB5dGhvbi0zLjAtd2hlbi1idWlsZGluZy1weXRoby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA1YzA0Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9SZXZlcnQtQnVpbGQtbG9vay1mb3ItcHl0aG9uLTMuMC13aGVuLWJ1aWxkaW5nLXB5dGhvLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KLURhdGU6IEZyaSwgNCBEZWMgMjAxNSAxNjoxMTo0MSArMDAwMAotU3ViamVjdDogW1BBVENIXSBSZXZlcnQgIkJ1aWxkOiBsb29rIGZvciBweXRob24gPj0gMy4wIHdoZW4gYnVpbGRpbmcgcHl0aG9uIGJpbmRpbmdzIgotT3JnYW5pemF0aW9uOiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KLQotVGhpcyByZXZlcnRzIGNvbW1pdCAyMjc3MDNhMmNlYWRhM2MxMDRlZGQ1Njc1NmQ0ODQ1NWNhNGMyNzFhLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KLS0tLQotIGNvbmZpZ3VyZS5hYyB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggNGRlZTRiNC4uNjYwOGJjZCAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzM5LDcgKzMzOSw3IEBAIEFNX0NPTkRJVElPTkFMKFtQWVRIT05fQklORElOR10sIFt0ZXN0ICJ4JHtlbmFibGVfcHl0aG9uX2JpbmRpbmc6LXllc30iID0geHllc10pCi0gCi0gaWYgdGVzdCAieCR7ZW5hYmxlX3B5dGhvbl9iaW5kaW5nOi15ZXN9IiA9IHh5ZXM7IHRoZW4KLSAgIEFYX1BLR19TV0lHKCRzd2lnX3ZlcnNpb24sIFtdLCBbIEFDX01TR19FUlJPUihbU1dJRyAkc3dpZ192ZXJzaW9uIG9yIG5ld2VyIGlzIG5lZWRlZF0pIF0pCi0tICBBTV9QQVRIX1BZVEhPTihbMy4wXSkKLSsgIEFNX1BBVEhfUFlUSE9OCi0gCi0gICBBQ19BUkdfVkFSKFtQWVRIT05fSU5DTFVERV0sIFtJbmNsdWRlIGZsYWdzIGZvciBweXRob24sIGJ5cGFzc2luZyBweXRob24tY29uZmlnXSkKLSAgIEFDX0FSR19WQVIoW1BZVEhPTl9DT05GSUddLCBbUGF0aCB0byBweXRob24tY29uZmlnXSkKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0CmluZGV4IGU3NTg4MTUuLjYyMzAwNjMgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bi1wdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKQEAgLTEsNCArMSw1IEBACiAjIS9iaW4vc2gKLQotbWFrZSAtQyB0ZXN0cyBpbnN0YWxsY2hlY2sKLQorIyBXaXRob3V0IC0taWdub3JlLWV4aXQsIHRoZSB0YXAgaGFybmVzcyBjYXVzZXMgYW55IEZBSUxzIHdpdGhpbiBhCisjIHRlc3QgcGxhbiB0byByYWlzZSBFUlJPUnM7IHRoaXMgaXMganVzdCBub2lzZS4KK21ha2VhcmdzPSJMT0dfRFJJVkVSX0ZMQUdTPS0taWdub3JlLWV4aXQiCittYWtlIC10IGFsbCA+L2Rldi9udWxsIDI+JjEgJiYgZXhlYyBtYWtlIC1zICRtYWtlYXJncyBjaGVjayAyPi9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1OGJjZTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi1pbmRleCA1ODRmNTliLi5jMmJjYWJkIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuYW0KLSsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMTIsMyArMTIsOSBAQCBkaXN0X2RvY19EQVRBID0gTElDRU5TRSBcCi0gZGlzdF9ub2luc3RfREFUQSA9IENvZGluZ1N0eWxlCi0gCi0gRVhUUkFfRElTVCA9IGV4dHJhcy9sdHRuZy1iYXNoX2NvbXBsZXRpb24gZ3BsLTIuMC50eHQgbGdwbC0yLjEudHh0Ci0rCi0raW5zdGFsbC1wdGVzdDoKLSsJY3AgLXIgJChzcmNkaXIpL3Rlc3RzICQoREVTVERJUikKLSsJZm9yIG0gaW4gJCQoZmluZCAkKERFU1RESVIpL3Rlc3RzIC1uYW1lIE1ha2VmaWxlKTsgZG8gXAotKyAgICAgICAgICBzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJCRtOyBcCi0rICAgICAgICBkb25lCi1kaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLnNoIGIvdGVzdHMvcnVuLnNoCi1pbmRleCBjNmM1MGZkLi42NDU1MzU5IDEwMDc1NQotLS0tIGEvdGVzdHMvcnVuLnNoCi0rKysgYi90ZXN0cy9ydW4uc2gKLUBAIC0xOSw0ICsxOSw3IEBACi0gCi0gWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IE5vIHRlc3RsaXN0LiBQbGVhc2Ugc3BlY2lmeSBhIHRlc3RsaXN0IHRvIHJ1bi4iICYmIGV4aXQgMQotIAotLXByb3ZlIC0tbWVyZ2UgLS1leGVjICcnIC0gPCAkMQotK3Byb3ZlIC0tbWVyZ2UgLXYgLS1leGVjICcnIC0gPCAkMSB8IHNlZCBcCi0rICAtZSAnc3xeb2sgXCguKlwpfFBBU1M6IFwxfCcgXAotKyAgLWUgJ3N8Xm5vdCBvayBcKC4qXCl8RkFJTDogXDF8JyBcCi0rICB8IGVncmVwIC1oICdQQVNTfEZBSUwnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9zdG9wLXVzaW5nLVNJR1VOVVNFRC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3N0b3AtdXNpbmctU0lHVU5VU0VELnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDRmN2QxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3N0b3AtdXNpbmctU0lHVU5VU0VELnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotRnJvbSAxZjU0MTgxYzJkZjFmYjkyYzMzMjNhNmRiZjgyNzNmYjY2Yjg4M2I2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP0o9QzM9QTlyPUMzPUE5bWllPTIwR2FsYXJuZWF1Pz0KLSA8amVyZW1pZS5nYWxhcm5lYXVAZWZmaWNpb3MuY29tPgotRGF0ZTogU2F0LCAxNyBPY3QgMjAxNSAxOTo0MTo0NyAtMDQwMAotU3ViamVjdDogW1BBVENIXSBQb3J0OiBEb24ndCB1c2UgU0lHVU5VU0VEIHdoaWNoIGlzIG5vdCBkZWZpbmVkIG9uIFNvbGFyaXMKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLU9yZ2FuaXphdGlvbjogTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzIuOC4wXQotCi1TaWduZWQtb2ZmLWJ5OiBKw6lyw6ltaWUgR2FsYXJuZWF1IDxqZXJlbWllLmdhbGFybmVhdUBlZmZpY2lvcy5jb20+Ci0tLS0KLSBzcmMvY29tbW9uL3J1bmFzLmMgfCAxOCArKysrKy0tLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vcnVuYXMuYyBiL3NyYy9jb21tb24vcnVuYXMuYwotaW5kZXggNTdmNzM4Mi4uMDgyNTQ3MCAxMDA2NDQKLS0tLSBhL3NyYy9jb21tb24vcnVuYXMuYwotKysrIGIvc3JjL2NvbW1vbi9ydW5hcy5jCi1AQCAtNTMwLDIxICs1MzAsMTMgQEAgaW50IHJ1bl9hc19ybWRpcl9yZWN1cnNpdmUoY29uc3QgY2hhciAqcGF0aCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCi0gc3RhdGljCi0gaW50IHJlc2V0X3NpZ2hhbmRsZXIodm9pZCkKLSB7Ci0tCWludCBzaWcsIHJldCA9IDA7Ci0rCWludCBzaWc7Ci0gCi0tCWZvciAoc2lnID0gU0lHSFVQOyBzaWcgPD0gU0lHVU5VU0VEOyBzaWcrKykgewotLQkJLyogU2tpcCB1bmJsb2NrYWJsZSBzaWduYWxzLiAqLwotLQkJaWYgKHNpZyA9PSBTSUdLSUxMIHx8IHNpZyA9PSBTSUdTVE9QKSB7Ci0tCQkJY29udGludWU7Ci0tCQl9Ci0tCQlpZiAoc2lnbmFsKHNpZywgU0lHX0RGTCkgPT0gU0lHX0VSUikgewotLQkJCVBFUlJPUigicmVzZXQgc2lnbmFsICVkIiwgc2lnKTsKLS0JCQlyZXQgPSAtMTsKLS0JCQlnb3RvIGVuZDsKLS0JCX0KLSsJREJHKCJSZXNldHRpbmcgcnVuX2FzIHdvcmtlciBzaWduYWwgaGFuZGxlcnMgdG8gZGVmYXVsdCIpOwotKwlmb3IgKHNpZyA9IDE7IHNpZyA8PSAzMTsgc2lnKyspIHsKLSsJCSh2b2lkKSBzaWduYWwoc2lnLCBTSUdfREZMKTsKLSAJfQotLWVuZDoKLS0JcmV0dXJuIHJldDsKLSsJcmV0dXJuIDA7Ci0gfQotIAotIHN0YXRpYwotLS0gCi0yLjYuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc19naXQuYmIKaW5kZXggOGJkMDk4OS4uYmZjNjU3YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzX2dpdC5iYgpAQCAtOSw0MCArOSw0MSBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3BsLTIuMC50eHQ7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xncGwtMi4xLnR4dDttZDU9MGYwZDcxNTAwZTZhNTdmZDI0ZDgyNWYzMzI0MmI5Y2EiCiAKLURFUEVORFMgPSAibGlidXJjdSBwb3B0IGxpYnhtbDIiCitERVBFTkRTID0gImxpYnVyY3UgcG9wdCBsaWJ4bWwyIHV0aWwtbGludXgiCiBSREVQRU5EU18ke1BOfSA9ICJsaWJnY2MiCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBwZXJsIGJhc2giCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBwZXJsIGJhc2ggZ2F3ayAke1BOfSBiYWJlbHRyYWNlIHByb2NwcyIKKyMgYmFiZWxzdGF0cy5wbCB3YW50cyBnZXRvcHQtbG9uZworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gInBlcmwtbW9kdWxlLWdldG9wdC1sb25nIgogCi1TUkNSRVYgPSAiYTkwZjJjMWUxMGI3NTk3ODI2NTNhODE4MTU2MjVlOWQxYmJiNzVjYSIKLVBWID0gIjIuNy4xK2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gImQxMWUwZGJhMGRmOTAyNGI4NjEzYzUxZTE2N2EzNzliOTFlOGIyMGIiCitQViA9ICIyLjguMStnaXQke1NSQ1BWfSIKIAotUFlUSE9OX09QVElPTiA9ICJhbV9jdl9weXRob25fcHlleGVjZGlyPScke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMnIFwKLSAgICAgICAgICAgICAgICAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0nJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzJyBcCi0gICAgICAgICAgICAgICAgIFBZVEhPTl9JTkNMVURFPSctSSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfScgXAorUFlUSE9OX09QVElPTiA9ICJhbV9jdl9weXRob25fcHlleGVjZGlyPScke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfScgXAorICAgICAgICAgICAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPScke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfScgXAorICAgICAgICAgICAgICAgICBQWVRIT05fSU5DTFVERT0nLUkke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0ke1BZVEhPTl9BQkl9JyBcCiAiCiBQQUNLQUdFQ09ORklHID8/PSAibHR0bmctdXN0IgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbi1iaW5kaW5ncyAke1BZVEhPTl9PUFRJT059LCxweXRob24gc3dpZy1uYXRpdmUiCi1QQUNLQUdFQ09ORklHW2x0dG5nLXVzdF0gPSAiLS1lbmFibGUtbHR0bmctdXN0LCAtLWRpc2FibGUtbHR0bmctdXN0LCBsdHRuZy11c3QiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS1lbmFibGUtcHl0aG9uLWJpbmRpbmdzICR7UFlUSE9OX09QVElPTn0sLHB5dGhvbjMgc3dpZy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW2x0dG5nLXVzdF0gPSAiLS13aXRoLWx0dG5nLXVzdCwgLS13aXRob3V0LWx0dG5nLXVzdCwgbHR0bmctdXN0IgogUEFDS0FHRUNPTkZJR1trbW9kXSA9ICItLWVuYWJsZS1rbW9kLCAtLWRpc2FibGUta21vZCwga21vZCIKK1BBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLW1hbi1wYWdlcywgLS1kaXNhYmxlLW1hbi1wYWdlcywgYXNjaWlkb2MtbmF0aXZlIgogUEFDS0FHRUNPTkZJR19yZW1vdmVfbGliYy1tdXNsID0gImx0dG5nLXVzdCIKIAotU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLXRvb2xzLmdpdDticmFuY2g9c3RhYmxlLTIuNyBcCi0gICAgICAgICAgIGZpbGU6Ly9SZXZlcnQtQnVpbGQtbG9vay1mb3ItcHl0aG9uLTMuMC13aGVuLWJ1aWxkaW5nLXB5dGhvLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3N0b3AtdXNpbmctU0lHVU5VU0VELnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bnRlc3QtMi40LjAucGF0Y2ggXAorU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLXRvb2xzLmdpdDticmFuY2g9c3RhYmxlLTIuOCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1lcnJvci5oLWNvbW1vbi1lcnJvci5oLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIAotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0IHBrZ2NvbmZpZyB1c2VyYWRkCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcHRlc3QgcGtnY29uZmlnIHVzZXJhZGQgcHl0aG9uMy1kaXIKIAogVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKIEdST1VQQUREX1BBUkFNXyR7UE59ID0gInRyYWNpbmciCiAKIEZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbHR0bmcvbGliZXhlYy8qICR7ZGF0YWRpcn0veG1sL2x0dG5nIFwKLSAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKiIKLUZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzLyouYSIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzLyoubGEiCisgICAgICAgICAgICAgICAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmxhIgogCiAjIFNpbmNlIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW50byAke2xpYmRpcn0vbHR0bmcvbGliZXhlYyB3ZSBtYXRjaCAKICMgdGhlIGxpYmV4ZWMgaW5zYW5lIHRlc3Qgc28gc2tpcCBpdC4KQEAgLTUyLDMxICs1Myw2NCBAQAogCiBkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CiAJIyBEZWxldGUgYSBzaGlwcGVkIG00IGZpbGUgdGhhdCBvdmVycmlkZXMgb3VyIHBhdGNoZWQgb25lCi0Jcm0gLWYgJHtTfS9jb25maWcvbGlieG1sLm00CisJcm0gLWYgJHtTfS9tNC9saWJ4bWwubTQKIH0KIAogZG9faW5zdGFsbF9wdGVzdCAoKSB7Ci0JY2htb2QgK3ggJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdXRpbHMvdXRpbHMuc2gKLQlmb3IgaSBpbiBgZmluZCAke0R9JHtQVEVTVF9QQVRIfSAtcGVybSAvdSt4IC10eXBlIGZgOyBkbwotCQlzZWQgLWUgInM6XCRURVNURElSLiovc3JjL2Jpbi9sdHRuZy9cJExUVE5HX0JJTjpcJExUVE5HX0JJTjpnIiBcCi0JCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvXCRTRVNTSU9ORF9CSU46XCRTRVNTSU9ORF9CSU46ZyIgXAotCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvXCRTRVNTSU9ORF9CSU46XCRTRVNTSU9ORF9CSU46ZyIgXAotCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLWNvbnN1bWVyZC86JHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvOmciIFwKLQkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLWNvbnN1bWVyZC86JHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvOmciIFwKLQkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1yZWxheWQvXCRSRUxBWURfQklOOlwkUkVMQVlEX0JJTjpnIiBcCi0JCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9sdHRuZy1zZXNzaW9uZDpcJFNFU1NJT05EX0JJTjpnIiBcCi0JCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1yZWxheWQvXCRSRUxBWURfQklOOlwkUkVMQVlEX0JJTjpnIiBcCi0JCSAgLWUgInM6XCRESVIvLi4vYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKLQkJICAtaSAkaQorCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9CisKKwljcCAtYSAtVCAke0J9ICR7RH0ke1BURVNUX1BBVEh9CisKKwkjIFByZXZlbnQgYXR0ZW1wdHMgdG8gdXBkYXRlIE1ha2VmaWxlcyBkdXJpbmcgdGVzdCBydW5zLCBhbmQKKwkjIHNpbGVuY2UgIk1ha2luZyBjaGVjayBpbiAkU1VCRElSIiBtZXNzYWdlcy4KKwlmaW5kICR7RH0ke1BURVNUX1BBVEh9IC1uYW1lIE1ha2VmaWxlIC10eXBlIGYgLWV4ZWMgXAorCQlzZWQgLWkgLWUgJ3MhXk1ha2VmaWxlOiFfTWFrZWZpbGU6IScgXAorCQktZSAnL2VjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFxcL2QnIHt9ICsKKworCSMgUHJldmVudCBhdHRlbXB0cyB0byB1cGRhdGUgdmVyc2lvbi5oIGR1cmluZyB0ZXN0IHJ1bnMuCisJc2VkIC1pIC1lICcvXlwuUEhPTlk6IHZlcnNpb25cLmgkL2QnICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUvTWFrZWZpbGUKKworCSMgU2lsZW5jZSAiTWFraW5nIGNoZWNrIGluICRTVUJESVIiIG1lc3NhZ2VzLgorCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gLW5hbWUgTWFrZWZpbGUgLXR5cGUgZiAtZXhlYyBcCisJCXNlZCAtaSAtZSAnL2VjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFxcL2QnIHt9ICsKKworCSMgU3Vic3RpdHV0ZSBsaW5rcyB0byBpbnN0YWxsZWQgYmluYXJpZXMuCisJZm9yIHByb2cgaW4gbHR0bmcgbHR0bmctcmVsYXlkIGx0dG5nLXNlc3Npb25kIGx0dG5nLWNvbnN1bWVyZCA7IGRvCisJCW9yaWc9IiR7RH0ke1BURVNUX1BBVEh9L3NyYy9iaW4vJHtwcm9nfS8ke3Byb2d9IgorCQlybSAiJG9yaWciCisJCWNhc2UgIiRwcm9nIiBpbgorCQkJbHR0bmctY29uc3VtZXJkKQorCQkJCWxuIC1zICIke2xpYmRpcn0vbHR0bmcvbGliZXhlYy8kcHJvZyIgIiRvcmlnIgorCQkJCTs7CisJCQkqKQorCQkJCWxuIC1zICIke2JpbmRpcn0vJHByb2ciICIkb3JpZyIKKwkJCQk7OworCQllc2FjCiAJZG9uZQogCi0JIyBVcGRhdGUgbGliZGlyIHJlZmVyZW5jZXMgaW4gY29waWVkIC5sYSBmaWxlcwotCWZvciBpIGluIGBmaW5kICR7RH0ke1BURVNUX1BBVEh9IC10eXBlIGYgLW5hbWUgKi5sYWA7IGRvCi0JCXNlZCAtaSAtZSAncyMke1N9L3Rlc3RzLyMke1NUQUdJTkdfRElSfSR7UFRFU1RfUEFUSH0jZycgJGkKKwkjIFJlbW92ZSBsaWJ0b29sIGFydGlmYWN0cy4KKwlmaW5kICR7RH0ke1BURVNUX1BBVEh9IFwoIC1uYW1lICcqLmxbYW9dJyAtbyAtbmFtZSAnKi5sYWknIFwpIC1kZWxldGUKKworCSMgUmVtb3ZlIG9iamVjdCBmaWxlcyBhbmQgYXJjaGl2ZXMuCisJZmluZCAke0R9JHtQVEVTVF9QQVRIfSAtbmFtZSAnKi5bb2FdJyAtdHlwZSBmIC1kZWxldGUKKworCSMgUmVtb3ZlIE1ha2VmaWxlLmFtIGFuZCBNYWtlZmlsZS5pbi4KKwlmaW5kICR7RH0ke1BURVNUX1BBVEh9IC1uYW1lICdNYWtlZmlsZS4qJyAtdHlwZSBmIC1kZWxldGUKKworCSMgUmVtb3ZlIGF1dG9tNHRlLmNhY2hlLgorCXJtIC1yZiAke0R9JHtQVEVTVF9QQVRIfS9hdXRvbTR0ZS5jYWNoZQorCisJIyBSZXBsYWNlIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzICh3aGljaCB3b24ndCB3b3JrIG9uIHRoZQorCSMgdGFyZ2V0KSB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgYmluYXJpZXMuCisJZm9yIHByb2cgaW4gdW5pdC9pbmlfY29uZmlnL2luaV9jb25maWcgXAorCQlyZWdyZXNzaW9uL3Rvb2xzL2xpdmUvbGl2ZV90ZXN0IFwKKwkJcmVncmVzc2lvbi90b29scy9oZWFsdGgvaGVhbHRoX2NoZWNrIDsgZG8KKwkJYmFzZW5hbWU9JHtwcm9nIyMqL30KKwkJbGRpcj0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8ke3Byb2clLyp9CisJCW12IC1mICR7bGRpcn0vLmxpYnMvJHtiYXNlbmFtZX0gJHtsZGlyfQogCWRvbmUKIAotCXNlZCAtZSAiczpzcmMvYmluOmJpbjpnIiAtZSAiczpsdC06OmciIFwKLQktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAotCXNlZCAtZSAiczppbmlfY29uZmlnOlwubGlic1wvaW5pX2NvbmZpZzoiIFwKLQktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91bml0L2luaV9jb25maWcvdGVzdF9pbmlfY29uZmlnCisJIyBjaGVja3BhdGNoLnBsIGlzIHVubmVlZGVkIG9uIHRhcmdldCBhbmQgY2F1c2VzIGZpbGUtcmRlcHMgUUEKKwkjIHdhcm5pbmdzLgorCXJtIC1mICR7RH0ke1BURVNUX1BBVEh9L2V4dHJhcy9jaGVja3BhdGNoLnBsCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWFkZC1zdXBwb3J0LWZvci1hYXJjaDY0X2JlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1hZGQtc3VwcG9ydC1mb3ItYWFyY2g2NF9iZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIzN2E0YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWFkZC1zdXBwb3J0LWZvci1hYXJjaDY0X2JlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotbHR0bmctdXN0OiBhZGQgc3VwcG9ydCBmb3IgYWFyY2g2NF9iZQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+Ci0KLWRpZmYgLS1ydU4gYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLS0tLSBhL2NvbmZpZ3VyZS5hYwkyMDE2LTAyLTE4IDE0OjU0OjU0LjY1MTcxMzY0NyArMDEwMAotKysrIGIvY29uZmlndXJlLmFjCTIwMTYtMDItMTggMTQ6NTY6MTEuMDU3ODY1Mjk3ICswMTAwCi1AQCAtMjQwLDYgKzI0MCw3IEBACi0gCXMzOTB4KSBOT19VTkFMSUdORURfQUNDRVNTPTEgOzsKLSAgICAgICAgIGFybSopIE5PX1VOQUxJR05FRF9BQ0NFU1M9MSA7OwotIAlhYXJjaDY0KSBOT19VTkFMSUdORURfQUNDRVNTPTEgOzsKLSsgICAgICAgIGFhcmNoNjRfYmUpIE5PX1VOQUxJR05FRF9BQ0NFU1M9MSA7OwotIAltaXBzKikgTk9fVU5BTElHTkVEX0FDQ0VTUz0xIDs7Ci0gCXRpbGUqKSBOT19VTkFMSUdORURfQUNDRVNTPTEgOzsKLSAJKikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoCmluZGV4IGI2OGE5ODkuLmNhZjBiOGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaApAQCAtMTEsNyArMTEsNyBAQAogLS0tIGEvZG9jL01ha2VmaWxlLmFtCiArKysgYi9kb2MvTWFrZWZpbGUuYW0KIEBAIC0xLDQgKzEsNCBAQAotLVNVQkRJUlMgPSAuIGV4YW1wbGVzCistU1VCRElSUyA9IC4gbWFuIGV4YW1wbGVzCiArU1VCRElSUyA9IC4KICAKICBkaXN0X21hbl9NQU5TID0gbWFuL2x0dG5nLWdlbi10cC4xIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfZ2l0LmJiCmluZGV4IDE1ZDkyNWQuLmJhZmY3MWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYgpAQCAtMTEsMjIgKzExLDMwIEBACiBpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZQogCiBERVBFTkRTID0gImxpYnVyY3UgdXRpbC1saW51eCIKLVJERVBFTkRTXyR7UE59LWJpbiA9ICJweXRob24tY29yZSIKK1JERVBFTkRTXyR7UE59LWJpbiA9ICJweXRob24zLWNvcmUiCiAKICMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFmdGVyIHJlbmFtZQogUlBST1ZJREVTXyR7UE59ID0gImx0dG5nMi11c3QiCiBSUkVQTEFDRVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKIFJDT05GTElDVFNfJHtQTn0gPSAibHR0bmcyLXVzdCIKIAotU1JDUkVWID0gImY4OWMxYTNjZjJiMDZhNDk3MGI5MTU0YzAwZmY2NDA5ODcwYWVmYjUiCitTUkNSRVYgPSAiNTE0YTg3ZjNiNjQxODFlMzg0Mzk5OTM1YTU3MDhhOGY4NWIwY2M4MyIKIFBFID0gIjIiCi1QViA9ICIyLjcuMStnaXQke1NSQ1BWfSIKK1BWID0gIjIuOC4xK2dpdCR7U1JDUFZ9IgogCi1TUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdXN0LmdpdDticmFuY2g9c3RhYmxlLTIuNyBcCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdXN0LmdpdDticmFuY2g9c3RhYmxlLTIuOCBcCiAgICAgICAgICAgIGZpbGU6Ly9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbHR0bmctdXN0LWFkZC1zdXBwb3J0LWZvci1hYXJjaDY0X2JlLnBhdGNoIFwKICAgICAgICAgICAiCiAKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLW1hbi1wYWdlcyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgICAgICMgUGF0Y2ggcHl0aG9uIHRvb2xzIHRvIHVzZSBQeXRob24gMzsgdGhleSBzaG91bGQgYmUgc291cmNlIGNvbXBhdGlibGUsIGJ1dAorICAgICAgICAjIHN0aWxsIHJlZmVyIHRvIFB5dGhvbiAyIGluIHRoZSBzaGViYW5nCisgICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtiaW5kaXJ9L2x0dG5nLWdlbi10cAorfQorCisKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYwppbmRleCBjZjNhZDQzLi45NmVmNDNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jCkBAIC0yNCw3ICsyNCw5IEBACiAgICAgICAgICAgIGZpbGU6Ly9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCiAgICAgICAgICAgIGZpbGU6Ly9yb290LWhvbWUtZGlyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLXJtYi1kZWZpbml0aW9uLWZvci1OSU9TMi1hcmNoaXRlY3R1cmUucGF0Y2giCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1ybWItZGVmaW5pdGlvbi1mb3ItTklPUzItYXJjaGl0ZWN0dXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LUZUQkZTLXByb2JsZW0td2l0aC1HQ0MtNi5wYXRjaCBcCisiCiAKIFNSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL211c2wucGF0Y2giCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLzAwMDEtRml4LUZUQkZTLXByb2JsZW0td2l0aC1HQ0MtNi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLzAwMDEtRml4LUZUQkZTLXByb2JsZW0td2l0aC1HQ0MtNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcyZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvMDAwMS1GaXgtRlRCRlMtcHJvYmxlbS13aXRoLUdDQy02LnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gMzlkNGQ0NmEwYmQ1MDRhYzcwOGZmZTcyZGY4N2JmNzRjZDEyYWQzMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdpbGxpYW0gQ29oZW4gPHdjb2hlbkByZWRoYXQuY29tPgorRGF0ZTogRnJpLCA1IEZlYiAyMDE2IDE3OjMwOjE5IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBGVEJGUyBwcm9ibGVtIHdpdGggR0NDLTYKKworR0NDLTYgaXMgcGlja2llciBhYm91dCBzb21lIG9mIHRoZSB0eXBlIGNvbnZlcnNpb25zIGNhdXNpbmcgdGhlIEZlZG9yYQorMjQgbWFzcyByZWJ1aWxkIHRoZSBidWlsZCBvZiBvcHJvZmlsZSBmYWlsZWQgd2l0aDoKKworbWFrZVszXTogRW50ZXJpbmcgZGlyZWN0b3J5ICcvYnVpbGRkaXIvYnVpbGQvQlVJTEQvb3Byb2ZpbGUtMS4xLjAvbGlidXRpbCsrJworZysrIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLiAgLUkgLi4vbGlidXRpbCAtSSAuLi9saWJvcCAtSSAuLi9saWJwcCAgIC1XIC1XYWxsIC1mbm8tY29tbW9uIC1mdGVtcGxhdGUtZGVwdGgtNTAgLU8yIC1nIC1waXBlIC1XYWxsIC1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5IC1XcCwtRF9GT1JUSUZZX1NPVVJDRT0yIC1mZXhjZXB0aW9ucyAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgLS1wYXJhbT1zc3AtYnVmZmVyLXNpemU9NCAtZ3JlY29yZC1nY2Mtc3dpdGNoZXMgLXNwZWNzPS91c3IvbGliL3JwbS9yZWRoYXQvcmVkaGF0LWhhcmRlbmVkLWNjMSAtbTMyIC1tYXJjaD1pNjg2IC1tdHVuZT1hdG9tIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMgLWMgLW8gb3BfYmZkLm8gb3BfYmZkLmNwcAorb3BfYmZkLmNwcDogSW4gbWVtYmVyIGZ1bmN0aW9uICd2b2lkIG9wX2JmZDo6Z2V0X3N5bWJvbF9yYW5nZShzeW1ib2xfaW5kZXhfdCwgbG9uZyBsb25nIHVuc2lnbmVkIGludCYsIGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQmKSBjb25zdCc6CitvcF9iZmQuY3BwOjUzODo0NzogZXJyb3I6IGNhbm5vdCBjb252ZXJ0ICdzdGQ6Om9zdHJlYW0ge2FrYSBzdGQ6OmJhc2ljX29zdHJlYW08Y2hhcj59JyB0byAnY29uc3QgYm9vbCcgaW4gaW5pdGlhbGl6YXRpb24KKyAgYm9vbCBjb25zdCB2ZXJib3NlID0gY3ZlcmIgPDwgKHZiZmQgJiB2bGV2ZWwxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorb3BfYmZkLmNwcDo1NDY6NzogZXJyb3I6IGluIGFyZ3VtZW50IHRvIHVuYXJ5ICEKKyAgaWYgKCF2ZXJib3NlKQorICAgICAgIF5+fn5+fn4KKworQXZvaWQgdGhlIGludGVybWVkaWF0ZSBib29sIHR5cGUgdG8gbWFrZSBHQ0MtNiBoYXBweS4KKworU2lnbmVkLW9mZi1ieTogV2lsbGlhbSBDb2hlbiA8d2NvaGVuQHJlZGhhdC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIGxpYnV0aWwrKy9vcF9iZmQuY3BwIHwgNCArLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL29wX2JmZC5jcHAgYi9saWJ1dGlsKysvb3BfYmZkLmNwcAoraW5kZXggMzg5YzkyMC4uZjJlYjQyYiAxMDA2NDQKKy0tLSBhL2xpYnV0aWwrKy9vcF9iZmQuY3BwCisrKysgYi9saWJ1dGlsKysvb3BfYmZkLmNwcAorQEAgLTUzNSwxNSArNTM1LDEzIEBAIHZvaWQgb3BfYmZkOjpnZXRfc3ltYm9sX3JhbmdlKHN5bWJvbF9pbmRleF90IHN5bV9pZHgsCisgeworIAlvcF9iZmRfc3ltYm9sIGNvbnN0ICYgc3ltID0gc3ltc1tzeW1faWR4XTsKKyAKKy0JYm9vbCBjb25zdCB2ZXJib3NlID0gY3ZlcmIgPDwgKHZiZmQgJiB2bGV2ZWwxKTsKKy0KKyAJaWYgKGFub25fb2JqKQorIAkJc3RhcnQgPSBzeW0udm1hKCk7CisgCWVsc2UKKyAJCXN0YXJ0ID0gc3ltLmZpbGVwb3MoKTsKKyAJZW5kID0gc3RhcnQgKyBzeW0uc2l6ZSgpOworIAorLQlpZiAoIXZlcmJvc2UpCisrCWlmICghKGN2ZXJiIDw8ICh2YmZkICYgdmxldmVsMSkpKQorIAkJcmV0dXJuOworIAorIAlpb19zdGF0ZSBzdGF0ZShjdmVyYiA8PCAodmJmZCAmIHZsZXZlbDEpKTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDI1NDRlYTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMhL2Jpbi9zaAotIyMjIEJFR0lOIElOSVQgSU5GTwotIyBQcm92aWRlczogICAgICAgICAgb3Byb2ZpbGUtc2VydmVyCi0jIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yawotIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKLSMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKLSMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2Ci0jIFNob3J0LURlc2NyaXB0aW9uOiBPUHJvZmlsZVVJIHNlcnZlcgotIyBEZXNjcmlwdGlvbjogICAgICAgCi0jIyMgRU5EIElOSVQgSU5GTwotCi0uIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucwotCi1jYXNlICIkMSIgaW4KLSAgc3RhcnQpCi0gICAgICAgIGVjaG8gIlN0YXJ0aW5nIE9Qcm9maWxlVUkgc2VydmVyIgotCS4gL2V0Yy9wcm9maWxlCi0JL3Vzci9iaW4vb3Byb2ZpbGUtc2VydmVyICYKLSAgOzsKLQotICBzdG9wKQotICAgICAgICBlY2hvICJTdG9wcGluZyBPUHJvZmlsZVVJIHNlcnZlciIKLSAgICAgICAga2lsbHByb2Mgb3Byb2ZpbGUtc2VydmVyCi0gIDs7Ci0KLSAgcmVzdGFydCkKLQkkMCBzdG9wCi0gICAgICAgIHNsZWVwIDEKLSAgICAgICAgJDAgc3RhcnQKLSAgOzsKLQotICAqKQotICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCi0gIDs7Ci1lc2FjCi0KLWV4aXQgMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMmNiZTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotW1VuaXRdCi1EZXNjcmlwdGlvbj1PUHJvZmlsZVVJIFNlcnZlcgotQWZ0ZXI9bmV0d29yay50YXJnZXQKLQotW1NlcnZpY2VdCi1FeGVjU3RhcnQ9L2Jpbi9zaCAtYyAiLiBAU1lTQ09ORkRJUkAvcHJvZmlsZTsgQEJJTkRJUkAvb3Byb2ZpbGUtc2VydmVyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzM0NzdiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLXJlcXVpcmUgb3Byb2ZpbGV1aS5pbmMKLQotU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCi1QViA9ICIwLjArZ2l0JHtTUkNQVn0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSBcCi0gICAgICAgICAgIGZpbGU6Ly9pbml0IFwKLSAgICAgICAgICAgZmlsZTovL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgIgotCi1ERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUiCi0KLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNsaWVudCAtLWVuYWJsZS1zZXJ2ZXIiCi0KLVJERVBFTkRTXyR7UE59ID0gIm9wcm9maWxlIGF2YWhpLWRhZW1vbiIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKLQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vcHJvZmlsZXVpLXNlcnZlcgotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCi0Jc2VkIC1pIC1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKLQkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKLX0KLQotaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCi0KLUlOSVRTQ1JJUFRfTkFNRSA9ICJvcHJvZmlsZXVpLXNlcnZlciIKLUlOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKLQotU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wcm9maWxldWktc2VydmVyLnNlcnZpY2UiCi1TWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmNmMDE0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotU1VNTUFSWSA9ICJVc2VyIEludGVyZmFjZSBmb3IgdGhlIFN5c3RlbS1XaWRlIFByb2ZpbGVyIgotREVTQ1JJUFRJT04gPSAiVXNlciBpbnRlcmZhY2UgZm9yIHRoZSBPUHJvZmlsZSB0b29sIgotSE9NRVBBR0UgPSAiaHR0cDovL2xhYnMuby1oYW5kLmNvbS9vcHJvZmlsZXVpLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1TRUNUSU9OID0gIngxMSIKLQotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgotCi1ERVBFTkRTID0gImdsaWItMi4wIGF2YWhpIGludGx0b29sLW5hdGl2ZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1hdmFoaSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZmM2Q4ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXJlcXVpcmUgb3Byb2ZpbGV1aS5pbmMKLQotREVQRU5EUyArPSAiZ3RrKyBsaWJnbGFkZSBsaWJ4bWwyIGF2YWhpLXVpIGdjb25mIGdldHRleHQtbmF0aXZlIgotCi1pbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjawotQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCi0KLVNSQ1JFViA9ICIzODllMTg3NWFmNDcyMWQ1MmM3ZTY1Y2Y5Y2ZmZmI2OWIwZWQ2YTU5IgotUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkiCi0KLUVYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtY2xpZW50IC0tZGlzYWJsZS1zZXJ2ZXIiCi0KLVBBQ0tBR0VTID0rICJvcHJvZmlsZXVpLXZpZXdlciIKLQotRklMRVNfb3Byb2ZpbGV1aS12aWV3ZXIgPSAiJHtiaW5kaXJ9L29wYXJjaGNvbnYgJHtiaW5kaXJ9L29wcm9maWxlLXZpZXdlciAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8gJHtkYXRhZGlyfS9vcHJvZmlsZXVpLyAke2RhdGFkaXJ9L2ljb25zIgotUkRFUEVORFNfb3Byb2ZpbGV1aS12aWV3ZXIgPSAib3Byb2ZpbGUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIKaW5kZXggM2Q2ZmZiMy4uNDcxMDIzZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYgpAQCAtMzAsNiArMzAsOCBAQAogICAgICR7U0NSSVBUSU5HX0RFUEVORFN9IFwKICAgICAke0xJQlVOV0lORF9ERVBFTkRTfSBcCiAgICAgYmlzb24gZmxleCB4eiBcCisgICAgeG1sdG8tbmF0aXZlIFwKKyAgICBhc2NpaWRvYy1uYXRpdmUgXAogIgogCiBkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgpAQCAtNDAsMTAgKzQyLDYgQEAKIAogIyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSB0b29scy9wZXJmIFB5dGhvbiBiaW5kaW5ncwogaW5oZXJpdCBweXRob24tZGlyCi1leHBvcnQgU1RBR0lOR19JTkNESVIKLWV4cG9ydCBTVEFHSU5HX0xJQkRJUgotZXhwb3J0IEJVSUxEX1NZUwotZXhwb3J0IEhPU1RfU1lTCiBleHBvcnQgUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIKIAogI2tlcm5lbCAzLjErIHN1cHBvcnRzIFdFUlJPUiB0byBkaXNhYmxlIHdhcm5pbmdzIGFzIGVycm9ycwpAQCAtODEsNiArNzksNyBAQAogICAgIEFSQ0g9JHtBUkNIfSBcCiAgICAgQ0M9IiR7Q0N9IiBcCiAgICAgQVI9IiR7QVJ9IiBcCisgICAgTEQ9IiR7TER9IiBcCiAgICAgRVhUUkFfQ0ZMQUdTPSItbGR3IiBcCiAgICAgcGVyZmV4ZWNkaXI9JHtsaWJleGVjZGlyfSBcCiAgICAgTk9fR1RLMj0xICR7VFVJX0RFRklORVN9IE5PX0RXQVJGPTEgJHtMSUJVTldJTkRfREVGSU5FU30gXApAQCAtOTQsMTQgKzkzLDEyIEBACiAgICAgJ3NoYXJlZGlyPSR7ZGF0YWRpcn0nIFwKICAgICAnc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9JyBcCiAgICAgJ3BlcmZleGVjZGlyPSR7bGliZXhlY2Rpcn0vcGVyZi1jb3JlJyBcCi0gICAgXAogICAgICdFVENfUEVSRkNPTkZJRz0ke0Bvcy5wYXRoLnJlbHBhdGgoc3lzY29uZmRpciwgcHJlZml4KX0nIFwKICAgICAnc2hhcmVkaXI9JHtAb3MucGF0aC5yZWxwYXRoKGRhdGFkaXIsIHByZWZpeCl9JyBcCiAgICAgJ21hbmRpcj0ke0Bvcy5wYXRoLnJlbHBhdGgobWFuZGlyLCBwcmVmaXgpfScgXAogICAgICdpbmZvZGlyPSR7QG9zLnBhdGgucmVscGF0aChpbmZvZGlyLCBwcmVmaXgpfScgXAogIgogCi0KIGRvX2NvbXBpbGUoKSB7CiAJIyBMaW51eCBrZXJuZWwgYnVpbGQgc3lzdGVtIGlzIGV4cGVjdGVkIHRvIGRvIHRoZSByaWdodCB0aGluZwogCXVuc2V0IENGTEFHUwpAQCAtMTM2LDExICsxMzMsMjQgQEAKICAgICAjIHdpdGggZWFjaCBvdGhlciBpZiBpdHMgaW4gdGhlIHNoYXJlZCBzb3VyY2UgZGlyZWN0b3J5CiAgICAgIwogICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUiIF07IHRoZW4KKyAgICAgICAgcGVyZmNvbmZpZz0iJHtTfS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZSIKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWciIF07IHRoZW4KKyAgICAgICAgcGVyZmNvbmZpZz0iJHtTfS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyIKKyAgICBmaQorICAgIGlmIFsgLW4gIiR7cGVyZmNvbmZpZ30iIF07IHRoZW4KICAgICAgICAgIyBNYXRjaCAkKHByZWZpeCkvJChsaWIpIGFuZCAkKHByZWZpeCkvbGliCiAgICAgICAgIHNlZCAtaSAtZSAncyxebGliZGlyID0gXCgkKHByZWZpeCkvLipsaWJcKSxsaWJkaXIgPz0gXDEsJyBcCiAgICAgICAgICAgICAgICAtZSAncyxecGVyZmV4ZWNkaXIgPSBcKC4qXCkscGVyZmV4ZWNkaXIgPz0gXDEsJyBcCiAgICAgICAgICAgICAgICAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAotICAgICAgICAgICAgJHtTfS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZQorICAgICAgICAgICAgJHtwZXJmY29uZmlnfQorICAgIGZpCisgICAgIyBUaGUgbWFuIHBhZ2VzIGluc3RhbGxhdGlvbiBpcyAiJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuMWRpcikiCisgICAgIyBpbiAke1N9L3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSwgaWYgdGhlIG1hbmRpciBzZXQgdG8gJz89JywgaXQKKyAgICAjIHdpbGwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoICdzaGFyZS9tYW4nLCBpbiB0aGUgd2F5IGl0IHdpbGwgcmVzdWx0aW5nIGluCisgICAgIyBpbmNvcnJlY3QgaW5zdGFsbGF0aW9uIGZvciBtYW4gcGFnZXMuCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vTWFrZWZpbGUiIF07IHRoZW4KKwlzZWQgLWkgJ3MsXm1hbmRpcj89LG1hbmRpcjo9LCcgJHtTfS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKICAgICBmaQogICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCiAgICAgICAgIHNlZCAtaSAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXApAQCAtMTYwLDEwICsxNzAsMTIgQEAKICAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiIgXTsgdGhlbgogICAgICAgICBzZWQgLWkgJ3MsQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjLCNDQywnICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCiAgICAgICAgIHNlZCAtaSAncyxBUiA9ICQoQ1JPU1NfQ09NUElMRSlhciwjQVIsJyAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgICAgICBzZWQgLWkgJ3MsTEQgPSAkKENST1NTX0NPTVBJTEUpbGQsI0xELCcgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKICAgICBmaQogICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZSIgXTsgdGhlbgogICAgICAgICBzZWQgLWkgJ3MsQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjLCNDQywnICR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZQogICAgICAgICBzZWQgLWkgJ3MsQVIgPSAkKENST1NTX0NPTVBJTEUpYXIsI0FSLCcgJHtTfS90b29scy9saWIvYXBpL01ha2VmaWxlCisgICAgICAgIHNlZCAtaSAncyxMRCA9ICQoQ1JPU1NfQ09NUElMRSlsZCwjTEQsJyAke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUKICAgICBmaQogICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvbGliL3N1YmNtZC9NYWtlZmlsZSIgXTsgdGhlbgogICAgICAgICBzZWQgLWkgJ3MsQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjLCNDQywnICR7U30vdG9vbHMvbGliL3N1YmNtZC9NYWtlZmlsZQpAQCAtMjAxLDYgKzIxMyw3IEBACiBQQUNLQUdFUyA9KyAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1BOfS1wZXJsICR7UE59LXB5dGhvbiIKIAogUkRFUEVORFNfJHtQTn0gKz0gImVsZnV0aWxzIGJhc2giCitSREVQRU5EU18ke1BOfS1kb2MgKz0gIm1hbiIKIFJERVBFTkRTXyR7UE59LWFyY2hpdmUgPSsgImJhc2giCiBSREVQRU5EU18ke1BOfS1weXRob24gPSsgImJhc2ggcHl0aG9uIHB5dGhvbi1tb2R1bGVzIgogUkRFUEVORFNfJHtQTn0tcGVybCA9KyAiYmFzaCBwZXJsIHBlcmwtbW9kdWxlcyIKQEAgLTIwOSwxMCArMjIyLDExIEBACiBSU1VHR0VTVFNfU0NSSVBUSU5HID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsICcke1BOfS1wZXJsICR7UE59LXB5dGhvbicsICcnLGQpfSIKIFJTVUdHRVNUU18ke1BOfSArPSAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1JTVUdHRVNUU19TQ1JJUFRJTkd9IgogCisjRklMRVNfJHtQTn0gKz0gIiR7bGliZXhlY2Rpcn0vcGVyZi1jb3JlICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvcGVyZi1jb3JlIC91c3IvbGliNjQvdHJhY2VldmVudCAke2xpYmRpcn0vdHJhY2VldmVudCIKIEZJTEVTXyR7UE59ICs9ICIke2xpYmV4ZWNkaXJ9L3BlcmYtY29yZSAke2V4ZWNfcHJlZml4fS9saWJleGVjL3BlcmYtY29yZSAke2xpYmRpcn0vdHJhY2VldmVudCIKIEZJTEVTXyR7UE59LWFyY2hpdmUgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3BlcmYtYXJjaGl2ZSIKIEZJTEVTXyR7UE59LXRlc3RzID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS90ZXN0cyAke2xpYmV4ZWNkaXJ9L3BlcmYtY29yZS90ZXN0cyIKLUZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzICR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiIKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCiBGSUxFU18ke1BOfS1weXRob24gKz0gIiR7bGliZXhlY2Rpcn0vcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uLyoiCiBGSUxFU18ke1BOfS1wZXJsID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9zY3JpcHRzL3BlcmwiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1Bdm9pZC1idWlsZGluZy1kb2NzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLUF2b2lkLWJ1aWxkaW5nLWRvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyZjM1NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1Bdm9pZC1idWlsZGluZy1kb2NzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMjdkZjUyMWM2OGU3YzhiNWIwNTBkYWIxNWY0MGFhMTVmZDAzNjIzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDQgTWF5IDIwMTYgMTQ6NTg6MjQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQXZvaWQgYnVpbGRpbmcgZG9jcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSB8IDIgKy0KKyBtNC95ZWxwLm00ICB8IDYgLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGI5MTlhM2YuLjNhMzg1MWQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xLDQgKzEsNCBAQAorLVNVQkRJUlMgPSBkYWVtb24gZGF0YSBoZWxwIGxpYiBwbyBzcmMgdG9vbHMgdGVzdHMKKytTVUJESVJTID0gZGFlbW9uIGRhdGEgbGliIHBvIHNyYyB0b29scyB0ZXN0cworIAorIEVYVFJBX0RJU1QgPSBBVVRIT1JTIHRhcC10ZXN0IENPUFlJTkcuZ3BsLTIKKyAKK2RpZmYgLS1naXQgYS9tNC95ZWxwLm00IGIvbTQveWVscC5tNAoraW5kZXggNWRiODQ3Zi4uMWI2ZWRlNCAxMDA2NDQKKy0tLSBhL200L3llbHAubTQKKysrKyBiL200L3llbHAubTQKK0BAIC0yNywxMiArMjcsNiBAQCBBQ19BUkdfV0lUSChbaGVscC1kaXJdLAorIEhFTFBfRElSPSIkd2l0aF9oZWxwX2RpciIKKyBBQ19TVUJTVChIRUxQX0RJUikKKyAKKy1BQ19BUkdfVkFSKFtJVFNUT09MXSwgW1BhdGggdG8gdGhlIGBpdHN0b29sYCBjb21tYW5kXSkKKy1BQ19DSEVDS19QUk9HKFtJVFNUT09MXSwgW2l0c3Rvb2xdLCBbaXRzdG9vbF0pCistaWYgdGVzdCB4IiRJVFNUT09MIiA9IHg7IHRoZW4KKy0gIEFDX01TR19FUlJPUihbaXRzdG9vbCBub3QgZm91bmRdKQorLWZpCistCisgQUNfQVJHX1ZBUihbWE1MTElOVF0sIFtQYXRoIHRvIHRoZSBgeG1sbGludGAgY29tbWFuZF0pCisgQUNfQ0hFQ0tfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorIGlmIHRlc3QgeCIkWE1MTElOVCIgPSB4OyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1EaXNhYmxlLWNoZWNrLWZvci1wb2xraXQtZm9yLVVJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLURpc2FibGUtY2hlY2stZm9yLXBvbGtpdC1mb3ItVUkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4NTIzMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1EaXNhYmxlLWNoZWNrLWZvci1wb2xraXQtZm9yLVVJLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNzY1ZDU3ODE0NWUzMWRkYzk0OTVhZGZhYjgwMzdhZGUzM2M2YTljYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDQgTWF5IDIwMTYgMTA6NTk6MzYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSBjaGVjayBmb3IgcG9sa2l0IGZvciBVSQorCitUaGUgY2hlY2sgaXMgbm90IHRlY2huaWNhbGx5IHJlcXVpcmVkOiBzeXNwcm9mIGp1c3QgbmVlZHMKK3RvIGJlIGFibGUgdG8gYWNjZXNzIHN5c3RlbSBwZXJmIGNvdW50ZXJzIGF0IHJ1bnRpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDg1NTk1OTcuLmVjZjkzYWQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEzMSw4ICsxMzEsOCBAQCBBU19JRihbdGVzdCAiJGVuYWJsZV9ndGsiID0gYXV0b10sWworIAlBU19JRihbdGVzdCAiJGhhdmVfZ3RrIiA9ICJ5ZXMiICYmIHRlc3QgIiRoYXZlX3BvbGtpdCIgPSAieWVzIl0sW2VuYWJsZV9ndGs9eWVzXSxbZW5hYmxlX2d0az1ub10pCisgXSkKKyBBU19JRihbdGVzdCAiJGVuYWJsZV9ndGsiID0gInllcyJdLFsKKy0JQVNfSUYoW3Rlc3QgIiRoYXZlX2d0ayIgPSAieWVzIiAmJiB0ZXN0ICIkaGF2ZV9wb2xraXQiID0gInllcyJdLFtdLFsKKy0JCUFDX01TR19FUlJPUihbLS1lbmFibGUtZ3RrIHJlcXVpcmVzIGd0aystMy4wID49IGd0a19yZXF1aXJlZF92ZXJzaW9uIGFuZCBwb2xraXQtZ29iamVjdC0xXSkKKysJQVNfSUYoW3Rlc3QgIiRoYXZlX2d0ayIgPSAieWVzIl0sW10sWworKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1ndGsgcmVxdWlyZXMgZ3RrKy0zLjAgPj0gZ3RrX3JlcXVpcmVkX3ZlcnNpb25dKQorIAldKQorIF0pCisgQU1fQ09ORElUSU9OQUwoRU5BQkxFX0dUSywgdGVzdCAiJGVuYWJsZV9ndGsiID0gInllcyIpCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1Gb3J3YXJkLXBvcnQtbWlwcy1hcm0tbWVtb3J5LWJhcnJpZXItcGF0Y2hlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1Gb3J3YXJkLXBvcnQtbWlwcy1hcm0tbWVtb3J5LWJhcnJpZXItcGF0Y2hlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmU4MDRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLUZvcndhcmQtcG9ydC1taXBzLWFybS1tZW1vcnktYmFycmllci1wYXRjaGVzLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYTJkMzg1ZTUwNDMyMzY0MWIxMTI3ODIxODMzYzYxZTc3MzAxYzkwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBTYXQsIDExIEp1biAyMDE2IDIyOjQ1OjM3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZvcndhcmQgcG9ydCBtaXBzICYgYXJtIG1lbW9yeSBiYXJyaWVyIHBhdGNoZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgbGliL3V0aWwvdXRpbC5oIHwgMTUgKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYi91dGlsL3V0aWwuaCBiL2xpYi91dGlsL3V0aWwuaAoraW5kZXggNTkxNzIyZC4uMDc2ODA1NiAxMDA2NDQKKy0tLSBhL2xpYi91dGlsL3V0aWwuaAorKysrIGIvbGliL3V0aWwvdXRpbC5oCitAQCAtMjksNCArMjksMTkgQEAKKyAjZGVmaW5lIHJlYWRfYmFycmllcigpICAgICAgICAgICBhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorICNlbmRpZgorIAorKyNpZmRlZiBfX2FybV9fCisrLyoKKysgKiBVc2UgdGhlIF9fa3VzZXJfbWVtb3J5X2JhcnJpZXIgaGVscGVyIGluIHRoZSBDUFUgaGVscGVyIHBhZ2UuIFNlZQorKyAqIGFyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGRldGFpbHMuCisrICovCisrI2RlZmluZSByZWFkX2JhcnJpZXIoKSAgICAgICAgICgodm9pZCgqKSh2b2lkKSkweGZmZmYwZmEwKSgpCisrI2VuZGlmCisrCisrI2lmZGVmIF9fbWlwc19fCisrI2RlZmluZSByZWFkX2JhcnJpZXIoKSAgICAgICAgIGFzbSB2b2xhdGlsZSgiLnNldCAgIG1pcHMyXG5cdCIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bmNcblx0IiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnNldCAgIG1pcHMwIiA6OjogIm1lbW9yeSIpCisrI2VuZGlmCisrCisrCisgI2VuZGlmIC8qIFNQX1VUSUxfSCAqLworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzLzAwMDEtY2FsbGdyYXBoLVVzZS1VNjRfVE9fUE9JTlRFUi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1jYWxsZ3JhcGgtVXNlLVU2NF9UT19QT0lOVEVSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTM4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzLzAwMDEtY2FsbGdyYXBoLVVzZS1VNjRfVE9fUE9JTlRFUi5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDA1ODE2ZTZmOWNkNjViMjYyNGJiMDRkZTY1ZmRmNjEwMzFjNzAxN2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCAxMCBKdW4gMjAxNiAxNDowMTo1NCArMDMwMAorU3ViamVjdDogW1BBVENIXSBjYWxsZ3JhcGg6IFVzZSBVNjRfVE9fUE9JTlRFUgorCitUaGlzIGZpeGVzIGEgImNhc3QgdG8gcG9pbnRlciBmcm9tIGludGVnZXIgb2YgZGlmZmVyZW50IHNpemUiIG9uIGk1ODYuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYi9zcC1jYWxsZ3JhcGgtdmlldy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL3NwLWNhbGxncmFwaC12aWV3LmMgYi9saWIvc3AtY2FsbGdyYXBoLXZpZXcuYworaW5kZXggMDJjYzE3Yi4uNTgzMTViMCAxMDA2NDQKKy0tLSBhL2xpYi9zcC1jYWxsZ3JhcGgtdmlldy5jCisrKysgYi9saWIvc3AtY2FsbGdyYXBoLXZpZXcuYworQEAgLTEzNSw3ICsxMzUsNyBAQCBidWlsZF9mdW5jdGlvbnNfc3RvcmUgKFN0YWNrTm9kZSAqbm9kZSwKKyAKKyAgIGd0a19saXN0X3N0b3JlX2FwcGVuZCAoc3RhdGUtPnN0b3JlLCAmaXRlcik7CisgICBndGtfbGlzdF9zdG9yZV9zZXQgKHN0YXRlLT5zdG9yZSwgJml0ZXIsCistICAgICAgICAgICAgICAgICAgICAgIENPTFVNTl9OQU1FLCAoY29uc3QgZ2NoYXIgKilub2RlLT5kYXRhLAorKyAgICAgICAgICAgICAgICAgICAgICBDT0xVTU5fTkFNRSwgVTY0X1RPX1BPSU5URVIobm9kZS0+ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgIENPTFVNTl9TRUxGLCAxMDAuMCAqIHNpemUgLyBzdGF0ZS0+cHJvZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICBDT0xVTU5fVE9UQUwsIDEwMC4wICogdG90YWwgLyBzdGF0ZS0+cHJvZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICBDT0xVTU5fUE9JTlRFUiwgbm9kZSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLXBvbGtpdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1wb2xraXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4ZDk5NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1wb2xraXQucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAyYjQwMDVkNzJkMzM5MzkzM2E3OTE0YmUxMDJlYTY1NTA1YzUzNmNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk1heGluIEIuIEpvaG4iIDxtYXhpbi5qb2huQGludGVsLmNvbT4KK0RhdGU6IFRodSwgMjEgSnVsIDIwMTYgMTE6NTM6MzEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBBZGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIHBvbGtpdAorCitDaGFuZ2VzIHRoZSBjb25maWd1cmUgYmVoYXZpb3VyIGZyb20gYXV0b2RldGVjdGluZyB0aGUgcG9sa2l0IGJ5IGRlZmF1bHQKK3RvIGhhdmluZyBhbiBvcHRpb24gdG8gZGlzYWJsZSBpdCBleHBsaWNpdGx5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDggKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDIyNDZkNWEuLjNkM2ZlMGYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNCwxMCArMTA0LDE4IEBAIFBLR19DSEVDS19NT0RVTEVTKEdUSywKKyAgICAgICAgICAgICAgICAgICBbZ3RrKy0zLjAgPj0gZ3RrX3JlcXVpcmVkX3ZlcnNpb25dLAorICAgICAgICAgICAgICAgICAgIFtoYXZlX2d0az15ZXNdLAorICAgICAgICAgICAgICAgICAgIFtoYXZlX2d0az1ub10pCisrQUNfQVJHX0VOQUJMRShbcG9sa2l0XSwKKysgICAgICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1wb2xraXRdLCBbRG8gbm90IHVzZSBQb2xraXRdKSwKKysgICAgICAgICAgICAgICAgICAgW2VuYWJsZV9wb2xraXQ9IiRlbmFibGV2YWwiXSwgW2VuYWJsZV9wb2xraXQ9InllcyJdKQorKworK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9wb2xraXQiID0gInh5ZXMiXSwgWworIFBLR19DSEVDS19NT0RVTEVTKFBPTEtJVCwKKyAgICAgICAgICAgICAgICAgICBbcG9sa2l0LWdvYmplY3QtMV0sCisgICAgICAgICAgICAgICAgICAgW2hhdmVfcG9sa2l0PXllc10sCisgICAgICAgICAgICAgICAgICAgW2hhdmVfcG9sa2l0PW5vXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisrQU1fQ09ORElUSU9OQUwoW0hBVkVfUE9MS0lUXSwgW3Rlc3QgIngkZW5hYmxlX3BvbGtpdCIgPSAieHllcyJdKQorKworIFBLR19DSEVDS19NT0RVTEVTKFNZU1RFTUQsCisgICAgICAgICAgICAgICAgICAgW2xpYnN5c3RlbWQgPj0gc3lzdGVtZF9yZXF1aXJlZF92ZXJzaW9uXSwKKyAgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kPXllc10sCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaAppbmRleCBkY2MyY2JlLi5mNzVkZGFkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoCkBAIC03LDggKzcsOCBAQAogCiBJbmRleDogZ2l0L2VsZnBhcnNlci5oCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvZWxmcGFyc2VyLmgJMjAxMS0wNy0xNiAxODo1Nzo0MS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBnaXQvZWxmcGFyc2VyLmgJMjAxMS0wNy0xNiAyMDoyODo1NC43MzM4Mjk4OTUgLTA3MDAKKy0tLSBnaXQub3JpZy9saWIvdXRpbC9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDE4OjU3OjQxLjAwMDAwMDAwMCAtMDcwMAorKysrIGdpdC9saWIvdXRpbC9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDIwOjI4OjU0LjczMzgyOTg5NSAtMDcwMAogQEAgLTE3LDYgKzE3LDEwIEBACiAgICovCiAgI2luY2x1ZGUgPGdsaWIuaD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZ3VpLWFyZ3VtZW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ndWktYXJndW1lbnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYzA1M2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ndWktYXJndW1lbnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1BZGQgdGhlIGFiaWxpdHkgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBHVUkgc3VwcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLS0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKLSsrKyBnaXQvY29uZmlndXJlLmFjCi1AQCAtNjIsMTIgKzYyLDI0IEBAIEtNSUNSTz1gdW5hbWUgLXIgfCBjdXQgLWQiLiIgLWYgMyB8IGN1dAotICMgUGtnY29uZmlnIGRlcGVuZGVuY2llcwotIAotIGNvcmVfZGVwPSJnbGliLTIuMCA+PSAyLjYuMCIKLS1ndWlfZGVwPSJndGsrLTIuMCA+IDIuNi4wIGdkay1waXhidWYtMi4wIHBhbmdvZnQyIGxpYmdsYWRlLTIuMCIKLSAKLSBQS0dfQ0hFQ0tfTU9EVUxFUyhDT1JFX0RFUCwgJGNvcmVfZGVwLCBbXSwgQUNfTVNHX0VSUk9SKFtzeXNwcm9mIGRlcGVuZGVuY2llcyBub3Qgc2F0aXNmaWVkXSkpCi0gCi0tYnVpbGRfZ3VpPXllcwotLVBLR19DSEVDS19NT0RVTEVTKEdVSV9ERVAsICRndWlfZGVwLCBbXSwgYnVpbGRfZ3VpPW5vKQotK2d1aV9kZXA9Imd0aystMi4wID4gMi42LjAgZ2RrLXBpeGJ1Zi0yLjAgcGFuZ29mdDIgbGliZ2xhZGUtMi4wIgotKwotK0FDX0FSR19FTkFCTEUoW2d1aV0sCi0rICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1ndWldLAotKyAgICBbRGlzYWJsZSBHVUkgZnVuY3Rpb25hbGl0eSAocmVxdWlyZXMgZ3RrKywgZ2RrLXBpeGJ1ZiwgcGFuZ29mdDIsIGxpYmdsYWRlKSBAPDpAZGVmYXVsdD1hdXRvQDo+QF0pXSwKLSsgIFtdLAotKyAgW2VuYWJsZV9ndWk9YXV0b10pCi0rCi0rYnVpbGRfZ3VpPW5vCi0rQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2d1aSIgIT0geG5vXSwKLSsgIFtQS0dfQ0hFQ0tfTU9EVUxFUyhHVUlfREVQLCAkZ3VpX2RlcCwgYnVpbGRfZ3VpPXllcywKLSsgICAgW2lmIHRlc3QgIngkZW5hYmxlX2d1aSIgIT0geGF1dG87IHRoZW4KLSsgICAgICAgQUNfTVNHX0ZBSUxVUkUoCi0rICAgICAgICAgWy0tZW5hYmxlLWd1aSB3YXMgZ2l2ZW4sIGJ1dCBndWkgZGVwZW5kZW5jaWVzIHdlcmUgbm90IHNhdGlzZmllZF0pCi0rICAgICBmaV0pXSkKLSAKLSBBTV9DT05ESVRJT05BTChbQlVJTERfR1VJXSwgW3Rlc3QgIiRidWlsZF9ndWkiID0geWVzXSkKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzYWM2NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1hcm0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogZ2l0L3V0aWwuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL3V0aWwuaAkyMDEwLTEyLTA3IDIyOjQxOjU3LjE1NjI0MzAwMSAtMDYwMAotKysrIGdpdC91dGlsLmgJMjAxMC0xMi0wNyAyMjo0Mzo0Ny42MTYyNDMwMDIgLTA2MDAKLUBAIC0zNyw0ICszNywxMyBAQAotICNkZWZpbmUgY3B1X3JlbGF4KCkgICAgIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpOwotICNlbmRpZgotIAotKyNpZmRlZiBfX2FybV9fCi0rLyoKLSsgKiBVc2UgdGhlIF9fa3VzZXJfbWVtb3J5X2JhcnJpZXIgaGVscGVyIGluIHRoZSBDUFUgaGVscGVyIHBhZ2UuIFNlZQotKyAqIGFyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGRldGFpbHMuCi0rICovCi0rI2RlZmluZSBybWIoKQkJKCh2b2lkKCopKHZvaWQpKTB4ZmZmZjBmYTApKCkKLSsjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQotKyNlbmRpZgotKwotICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNTViOGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogZ2l0L3V0aWwuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL3V0aWwuaAkyMDEwLTEyLTA4IDAxOjIyOjQ0LjQ4NjI0MzAwMSAtMDYwMAotKysrIGdpdC91dGlsLmgJMjAxMC0xMi0wOCAwMToyMzoyNy44MzYyNDMwMDEgLTA2MDAKLUBAIC0zNyw0ICszNywxNSBAQAotICNkZWZpbmUgY3B1X3JlbGF4KCkgICAgIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpOwotICNlbmRpZgotIAotKyNpZmRlZiBfX21pcHNfXwotKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgJCQkJCVwKLSsJCQkJIi5zZXQJbWlwczJcblx0IgkJCVwKLSsJCQkJInN5bmNcblx0IgkJCQlcCi0rCQkJCSIuc2V0CW1pcHMwIgkJCQlcCi0rCQkJCTogLyogbm8gb3V0cHV0ICovCQkJXAotKwkJCQk6IC8qIG5vIGlucHV0ICovCQkJXAotKwkJCQk6ICJtZW1vcnkiKQotKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKLSsjZW5kaWYKLSsKLSAjZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfZ2l0LmJiCmluZGV4IDg0YzZhYWQuLjhkOGI2MjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYgpAQCAtMSwzMSArMSw0MCBAQAogU1VNTUFSWSA9ICJTeXN0ZW0td2lkZSBQZXJmb3JtYW5jZSBQcm9maWxlciBmb3IgTGludXgiCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zcC1hcHBsaWNhdGlvbi5jO2VuZGxpbmU9MTc7bWQ1PTQwZTU1NTc3ZWYxMjJjODhmZTIwMDUyYWNkYTY0ODc1IgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IHN5c3RlbWQKIAogREVQRU5EUyA9ICJnbGliLTIuMCIKIAotU1JDUkVWID0gImNkNDRlZTY2NDRjMzY0MTUwN2ZiNTNiOGEyYTY5MTM3ZjI5NzEyMTkiCi1QViA9ICIxLjIuMCtnaXQke1NSQ1BWfSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCitTUkNSRVYgPSAiOWM2Y2VjOWI0OTc2NmJmNzdjMTcxM2JjNWE3YzZkNjUxZTYyODA2OCIKK1BWID0gIjMuMjAuMCtnaXQke1NSQ1BWfSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnL3N5c3Byb2YgXAogICAgICAgICAgICBmaWxlOi8vZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ndWktYXJndW1lbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1wb2xraXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLWNoZWNrLWZvci1wb2xraXQtZm9yLVVJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQXZvaWQtYnVpbGRpbmctZG9jcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNhbGxncmFwaC1Vc2UtVTY0X1RPX1BPSU5URVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Gb3J3YXJkLXBvcnQtbWlwcy1hcm0tbWVtb3J5LWJhcnJpZXItcGF0Y2hlcy5wYXRjaCBcCiAgICAgICAgICAgIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDU2ZTg0OTIwMzNiNjBlMjQ3NjM0NzMxZTdmNzYwYjkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI0YTMzOGFkNDFiZmZmYWU4N2VmMjgxZjZlNzVjOTY2MGIzZTBjNjY3MWJmNTIzM2JlMGMzZjU1YTVlNWIxY2U1IgogCi1TUkNfVVJJX2FwcGVuZF9hcm0gID0gIiBmaWxlOi8vcm1iLWFybS5wYXRjaCIKLVNSQ19VUklfYXBwZW5kX2FybWViICA9ICIgZmlsZTovL3JtYi1hcm0ucGF0Y2giCi1TUkNfVVJJX2FwcGVuZF9taXBzID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCi1TUkNfVVJJX2FwcGVuZF9taXBzNjQgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKLVNSQ19VUklfYXBwZW5kX21pcHM2NG4zMiA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkLWF1eCIKIAotUyA9ICIke1dPUktESVJ9L2dpdCIKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1jb21waWxlLXdhcm5pbmdzIgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnRElTVFJPX0ZFQVRVUkVTJywgJyR7R1RLM0RJU1RST0ZFQVRVUkVTfScsICdndGsnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0tZW5hYmxlLWd0aywtLWRpc2FibGUtZ3RrLGd0ayszIgorUEFDS0FHRUNPTkZJR1twb2xraXRdID0gIi0tZW5hYmxlLXBvbGtpdCwtLWRpc2FibGUtcG9sa2l0LHBvbGtpdCBkYnVzIgogCi1QQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWluc19hbnkoJ0RJU1RST19GRUFUVVJFUycsICcke0dUSzJESVNUUk9GRUFUVVJFU30nLCAnZ3VpJywgJycsIGQpfSIKLVBBQ0tBR0VDT05GSUdbZ3VpXSA9ICItLWVuYWJsZS1ndWksLS1kaXNhYmxlLWd1aSxndGsrIGdkay1waXhidWYgcGFuZ28gbGliZ2xhZGUiCitTT0xJQlMgPSAiLnNvIgorRklMRVNfU09MSUJTREVWID0gIiIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zLyIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BvbGtpdCcsICdzeXNwcm9mMi5zZXJ2aWNlJywgJycsIGQpfSIKIAogIyBXZSBkbyBub3QgeWV0IHdvcmsgZm9yIGFhcmNoNjQuCi0jCiBDT01QQVRJQkxFX0hPU1QgPSAiXig/IWFhcmNoNjQpLioiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiCmluZGV4IDM2ODZjMmYuLjQ2ODIwZWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC11cHJvYmVzX2dpdC5iYgpAQCAtMTMsOCArMTMsNiBAQAogCiBGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzIgogCi1FWFRSQV9PRU1BS0UgPSAiIgotCiAjIENvbXBpbGUgYW5kIGluc3RhbGwgdGhlIHVwcm9iZXMga2VybmVsIG1vZHVsZSBvbiBtYWNoaW5lcyB3aXRoIHV0cmFjZQogIyBzdXBwb3J0LiAgTm90ZSB0aGF0IHN0YXBydW4gZXhwZWN0cyBpdCBpbiB0aGUgc3lzdGVtdGFwL3J1bnRpbWUgZGlyZWN0b3J5LAogIyBub3QgaW4gL2xpYi9tb2R1bGVzLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYTg5OTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KLQotSW5kZXg6IGdpdC9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0JMjAxMi0wNC0xMyAwODo0Mzo0Ni4yNjMzMzkwMDMgLTA1MDAKLSsrKyBnaXQvZG9jL1N5c3RlbVRhcF9UYXBzZXRfUmVmZXJlbmNlL01ha2VmaWxlLmFtCTIwMTItMDQtMTMgMDk6MzE6MjIuNDcwMDgzOTE1IC0wNTAwCi1AQCAtMjcsNiArMjcsMTAgQEAKLSBub2luc3RfUFJPR1JBTVMgPSBkb2Nwcm9jCi0gU1JDVFJFRT0kKGFic190b3Bfc3JjZGlyKS8KLSBET0NQUk9DPSQoYWJzX2J1aWxkZGlyKS9kb2Nwcm9jCi0rZG9jcHJvY19MSU5LID0gJChDQ19GT1JfQlVJTEQpICQoTERGTEFHU19GT1JfQlVJTEQpIC1vICRACi0rCi0rZG9jcHJvYy5vOiAkKHNyY2RpcikvZG9jcHJvYy5jCi0rCSQoQ0NfRk9SX0JVSUxEKSAtYyAkKENGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoc3JjZGlyKS9kb2Nwcm9jLmMKLSAKLSBhbGw6ICQoUERGRE9DUykgc3RhbXAtaHRtbGRvY3Mgc3RhbXAtbWFuZG9jcwotIHRhcHNldHMueG1sOiBkb2Nwcm9jICQoc2hlbGwgZmluZCAkKFNSQ1RSRUUpL3RhcHNldCAtbmFtZSAnKi5zdHAnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9tb25pdG9yLW9wdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvbW9uaXRvci1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0M2E3OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvbW9uaXRvci1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorQWRkIGFuIG9wdGlvbiB0byBleHBsaWNpdGx5IGRpc2FibGUgdGhlIG1vbml0b3IgKGFuZCB0aGVyZWZvcmUgdGhlIGRlcGVuZGVuY3kgb24KK2pzb24tYyBhbmQgbmN1cnNlcykuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2Q3ODFhMi4uZTU2MDc5YSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTcwLDEzICs1NzQsMTYgQEAgZG5sIFNlZSBpZiB3ZSBoYXZlIGVub3VnaCBsaWJyYXJpZXMgYW5kIHRvb2xzIHRvIGJ1aWxkIHRoZSB2aXJ0IHNlcnZlcgorIGZpCisgQU1fQ09ORElUSU9OQUwoW0JVSUxEX1ZJUlRdLCBbdGVzdCAiJHtoYXZlX2xpYnZpcnR9IiA9PSAieWVzIiAtYSAiJHtoYXZlX2xpYnhtbDJ9IiA9PSAieWVzIiAtYSAiJGVuYWJsZV92aXJ0IiAhPSAibm8iXSkKKworK0FDX0FSR19FTkFCTEUoW21vbml0b3JdLCBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLW1vbml0b3JdLFtEaXNhYmxlIG1vbml0b3JdKSkKKytpZiB0ZXN0ICIkZW5hYmxlX21vbml0b3IiICE9ICJubyI7IHRoZW4KKyBkbmwgQ2hlY2sgZm9yIHByZXNlbmNlIG9mIGpzb24tYyBhbmQgbmN1cnNlcyBmb3IgdXNlIGluIG1vbml0b3IgbW9kZQorIFBLR19DSEVDS19NT0RVTEVTKFtqc29uY10sIFtqc29uLWNdLCBbaGF2ZV9qc29uYz15ZXNdLCBbaGF2ZV9qc29uYz1ub10pCisgUEtHX0NIRUNLX01PRFVMRVMoW25jdXJzZXNdLCBbbmN1cnNlc10sIFtoYXZlX25jdXJzZXM9eWVzXSwgW2hhdmVfbmN1cnNlcz1ub10pCistQU1fQ09ORElUSU9OQUwoW0hBVkVfTU9OSVRPUl9MSUJTXSwgW3Rlc3QgIiR7aGF2ZV9qc29uY30iID09ICJ5ZXMiIC1hICIke2hhdmVfbmN1cnNlc30iID09ICJ5ZXMiXSkKKyBpZiB0ZXN0ICIke2hhdmVfanNvbmN9IiA9PSAieWVzIiAtYSAiJHtoYXZlX25jdXJzZXN9IiA9PSB5ZXM7IHRoZW4KKyAgIEFDX0RFRklORShbSEFWRV9NT05JVE9SX0xJQlNdLFsxXSxbRGVmaW5lIHRvIDEgaWYganNvbi1jIGFuZCBuY3Vyc2VzIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkXSkKKyBmaQorK2ZpCisrQU1fQ09ORElUSU9OQUwoW0hBVkVfTU9OSVRPUl9MSUJTXSwgW3Rlc3QgIiR7aGF2ZV9qc29uY30iID09ICJ5ZXMiIC1hICIke2hhdmVfbmN1cnNlc30iID09ICJ5ZXMiIC1hICIkZW5hYmxlX21vbml0b3IiICE9ICJubyJdKQorCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhc3NlbWJsZXIgLnNlY3Rpb24gIj8iIGZsYWdzIHN1cHBvcnRdLCBzdGFwX2N2X3NlY3Rpb25xLCBbCisgb2xkX0NGTEFHUz0iJENGTEFHUyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIKaW5kZXggOTcwNjRiOC4uNDNiZjY5ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIKQEAgLTIsMTcgKzIsMTQgQEAKIAogcmVxdWlyZSBzeXN0ZW10YXBfZ2l0LmluYwogCi1ERVBFTkRTID0gImVsZnV0aWxzIHNxbGl0ZTMgc3lzdGVtdGFwLW5hdGl2ZSIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gImVsZnV0aWxzLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKLURFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1lbGZ1dGlscyBuYXRpdmVzZGstc3FsaXRlMyBuYXRpdmVzZGstZ2V0dGV4dCIKK0RFUEVORFMgPSAiYm9vc3QgZWxmdXRpbHMiCiAKLVJERVBFTkRTXyR7UE59ICs9ICJweXRob24gYmFzaCIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uLW5hdGl2ZSIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayArPSAicHl0aG9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24zLWNvcmUgYmFzaCIKIAogRVhUUkFfT0VDT05GICs9ICItLXdpdGgtbGliZWxmPSR7U1RBR0lOR19ESVJfVEFSR0VUfSAtLXdpdGhvdXQtcnBtIFwKICAgICAgICAgICAgIC0td2l0aG91dC1uc3MgLS13aXRob3V0LWF2YWhpIC0td2l0aG91dC1keW5pbnN0IFwKICAgICAgICAgICAgIC0tZGlzYWJsZS1zZXJ2ZXIgLS1kaXNhYmxlLWdyYXBoZXIgLS1lbmFibGUtcHJvbG9ndWVzIFwKKyAgICAgICAgICAgIC0td2l0aC1weXRob24zIFwKICAgICAgICAgICAgIGFjX2N2X3Byb2dfaGF2ZV9qYXZhYz1ubyBcCiAgICAgICAgICAgICBhY19jdl9wcm9nX2hhdmVfamFyPW5vICIKIApAQCAtMjAsOCArMTcsMTAgQEAKIAogRVhUUkFfT0VDT05GICs9ICIke1NUQVBfRE9DU30gIgogCi1QQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJRyA/Pz0gInNxbGl0ZSBtb25pdG9yIgogUEFDS0FHRUNPTkZJR1tsaWJ2aXJ0XSA9ICItLWVuYWJsZS1saWJ2aXJ0LC0tZGlzYWJsZS1saWJ2aXJ0LGxpYnZpcnQiCitQQUNLQUdFQ09ORklHW3NxbGl0ZV0gPSAiLS1lbmFibGUtc3FsaXRlLC0tZGlzYWJsZS1zcWxpdGUsc3FsaXRlMyIKK1BBQ0tBR0VDT05GSUdbbW9uaXRvcl0gPSAiLS1lbmFibGUtbW9uaXRvciwtLWRpc2FibGUtbW9uaXRvcixuY3Vyc2VzIGpzb24tYyIKIAogaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCmluZGV4IDY1NmYxNWYuLjMwNGViOTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMKQEAgLTEsMTQgKzEsMTQgQEAKIExJQ0VOU0UgPSAiR1BMdjIiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKLVNSQ1JFViA9ICI3MDA5ZjJmNzgyZTUyZDYxMDVmZTY4ZDZlYTJhOTgyMGExMDk5YzA2IgotUFYgPSAiMi45IgorU1JDUkVWID0gIjYxNmVjN2EwYjkxNmRmNzc4NWQ5MTFiODI0YzNkZjZlYjAyMmIyMTMiCitQViA9ICIzLjAiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L3N5c3RlbXRhcC5naXQgXAotICAgICAgICAgICBmaWxlOi8vZG9jcHJvYy1idWlsZC1maXgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly94MzJfYWJpX3RpbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW9uaXRvci1vcHRpb24ucGF0Y2ggXAogICAgICAgICAgICIKIAogIyBzeXN0ZW10YXAgZG9lc24ndCBzdXBwb3J0IG1pcHMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtdG9wb2xvZ3ktQWRkLW1pc3NpbmctaW5jbHVkZS1zeXMtc3RhdC5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS10b3BvbG9neS1BZGQtbWlzc2luZy1pbmNsdWRlLXN5cy1zdGF0LmgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYWQwY2QuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS10b3BvbG9neS1BZGQtbWlzc2luZy1pbmNsdWRlLXN5cy1zdGF0LmgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDNmMWRiYTlhODIxYjUzYjQyMDAxNjA1ZjlhMTI2YTk1ODgwNDg4NGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+Ci1EYXRlOiBNb24sIDkgTm92IDIwMTUgMTM6Mzc6MjYgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gdG9wb2xvZ3k6IEFkZCBtaXNzaW5nIGluY2x1ZGUgc3lzL3N0YXQuaAotCi1OZWNlc3NhcnkgZm9yIHByb3BlciBkZWZpbml0aW9ucyBvZiBTX0lSVVNSICYgY28uIE90aGVyd2lzZSBpdAotcmVzdWx0cyBpbiBjb21waWxlIGVycm9ycyB3aXRoIG9sZCBnbGliYyBhbmQgdWNsaWJjOgotICBwYXJzZXIuYzogSW4gZnVuY3Rpb24gJ3NuZF90cGxnX2J1aWxkX2ZpbGUnOgotICBwYXJzZXIuYzoyNjI6IGVycm9yOiAnU19JUlVTUicgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCi0gIHBhcnNlci5jOjI2MjogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UKLSAgcGFyc2VyLmM6MjYyOiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgotU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+Ci0tLS0KLSBzcmMvdG9wb2xvZ3kvcGFyc2VyLmMgfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL3NyYy90b3BvbG9neS9wYXJzZXIuYyBiL3NyYy90b3BvbG9neS9wYXJzZXIuYwotaW5kZXggODBhMGFlMC4uMThiYjljNyAxMDA2NDQKLS0tLSBhL3NyYy90b3BvbG9neS9wYXJzZXIuYwotKysrIGIvc3JjL3RvcG9sb2d5L3BhcnNlci5jCi1AQCAtMTYsNiArMTYsNyBAQAotICAgICAgICAgICAgTGlhbSBHaXJkd29vZCA8bGlhbS5yLmdpcmR3b29kQGxpbnV4LmludGVsLmNvbT4KLSAqLwotIAotKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgotICNpbmNsdWRlICJsaXN0LmgiCi0gI2luY2x1ZGUgInRwbGdfbG9jYWwuaCIKLSAKLS0tIAotMi40LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvYXZvaWQtaW5jbHVkaW5nLXN5cy1wb2xsLmgtZGlyZWN0bHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaAppbmRleCAxNjE2MTliLi4zZDQ0NTg1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gN2RjZjQ2OTY5ZTg1Yzg4MWM5MDFkZjRiNDkzMDllOTA5MWNhZDE2YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gYzJjMTNjZjBjNDY5ODYyY2QzOWIyYTY5ODYyMDAyMzMxYWI3YzhjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CiBEYXRlOiBUdWUsIDkgRmViIDIwMTYgMTQ6MDE6MTggLTA4MDAKIFN1YmplY3Q6IFtQQVRDSF0gYXZvaWQgaW5jbHVkaW5nIDxzeXMvcG9sbC5oPiBkaXJlY3RseQpAQCAtMjQsNyArMjQsNyBAQAogIDEyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvYXNlcnZlci9hc2VydmVyLmMgYi9hc2VydmVyL2FzZXJ2ZXIuYwotaW5kZXggMTU3OWRhNy4uZWY2NDI0OCAxMDA2NDQKK2luZGV4IGFjMjA3MDYuLjQ2ZjczMWEgMTAwNjQ0CiAtLS0gYS9hc2VydmVyL2FzZXJ2ZXIuYwogKysrIGIvYXNlcnZlci9hc2VydmVyLmMKIEBAIC0yMCw3ICsyMCw3IEBACkBAIC02Miw3ICs2Miw3IEBACiAgI2luY2x1ZGUgPHN0ZGFyZy5oPgogICNpbmNsdWRlIDxlbmRpYW4uaD4KIGRpZmYgLS1naXQgYS9pbmNsdWRlL2xvY2FsLmggYi9pbmNsdWRlL2xvY2FsLmgKLWluZGV4IGI0MjlmNWQuLmUwNTg5OGYgMTAwNjQ0CitpbmRleCAzMTdmMmUzLi42YTQzYTQ3IDEwMDY0NAogLS0tIGEvaW5jbHVkZS9sb2NhbC5oCiArKysgYi9pbmNsdWRlL2xvY2FsLmgKIEBAIC00Nyw3ICs0Nyw3IEBACkBAIC03MywyMCArNzMsMjAgQEAKICsjaW5jbHVkZSA8cG9sbC5oPgogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pCiBkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyb2wvY29udHJvbC5jIGIvc3JjL2NvbnRyb2wvY29udHJvbC5jCi1pbmRleCA0YTI4Y2Y2Li4wNzFjNWRiIDEwMDY0NAoraW5kZXggNmMwMGI4ZS4uZmQwYzMwMyAxMDA2NDQKIC0tLSBhL3NyYy9jb250cm9sL2NvbnRyb2wuYwogKysrIGIvc3JjL2NvbnRyb2wvY29udHJvbC5jCi1AQCAtNDgsNyArNDgsNyBAQCBhbmQgSUVDOTU4IHN0cnVjdHVyZS4KK0BAIC05MCw3ICs5MCw3IEBAIEkvTyBvcGVyYXRpb25zLgogICNpbmNsdWRlIDxzdHJpbmcuaD4KICAjaW5jbHVkZSA8ZmNudGwuaD4KICAjaW5jbHVkZSA8c2lnbmFsLmg+CiAtI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiArI2luY2x1ZGUgPHBvbGwuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgogICNpbmNsdWRlICJjb250cm9sX2xvY2FsLmgiCiAgCi0gLyoqCiBkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyb2wvY29udHJvbF9zaG0uYyBiL3NyYy9jb250cm9sL2NvbnRyb2xfc2htLmMKIGluZGV4IGJkMDdkNGEuLjlhMmUyNjggMTAwNjQ0CiAtLS0gYS9zcmMvY29udHJvbC9jb250cm9sX3NobS5jCkBAIC0xMDEsNyArMTAxLDcgQEAKICAjaW5jbHVkZSA8c3lzL3Vpby5oPgogICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogZGlmZiAtLWdpdCBhL3NyYy9wY20vcGNtX2RpcmVjdC5jIGIvc3JjL3BjbS9wY21fZGlyZWN0LmMKLWluZGV4IGZkMzg3N2MuLjUyYWMwOTMgMTAwNjQ0CitpbmRleCBjMzkyNWNjLi4xOGYxZGQ1IDEwMDY0NAogLS0tIGEvc3JjL3BjbS9wY21fZGlyZWN0LmMKICsrKyBiL3NyYy9wY20vcGNtX2RpcmVjdC5jCiBAQCAtMzAsNyArMzAsNyBAQApAQCAtMTE0LDcgKzExNCw3IEBACiAgI2luY2x1ZGUgPHN5cy9zZW0uaD4KICAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KIGRpZmYgLS1naXQgYS9zcmMvcGNtL3BjbV9tbWFwLmMgYi9zcmMvcGNtL3BjbV9tbWFwLmMKLWluZGV4IDVjNGZiZTEuLjJjZmE3ZGIgMTAwNjQ0CitpbmRleCAxOTQ4Mjg5Li40Y2YyMjBhIDEwMDY0NAogLS0tIGEvc3JjL3BjbS9wY21fbW1hcC5jCiArKysgYi9zcmMvcGNtL3BjbV9tbWFwLmMKIEBAIC0yMiw3ICsyMiw3IEBACkBAIC0xNTMsNyArMTUzLDcgQEAKICAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogZGlmZiAtLWdpdCBhL3NyYy9zZXEvc2VxLmMgYi9zcmMvc2VxL3NlcS5jCi1pbmRleCA2MjBjYTNmLi42ODFjZWYxIDEwMDY0NAoraW5kZXggOTI3OTgzMC4uZDIwMjdjYiAxMDA2NDQKIC0tLSBhL3NyYy9zZXEvc2VxLmMKICsrKyBiL3NyYy9zZXEvc2VxLmMKIEBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBldmVudF9maWx0ZXIoc25kX3NlcV90ICpzZXEsIHNuZF9zZXFfZXZlbnRfdCAqZXYpCkBAIC0xNzksNSArMTc5LDUgQEAKICAjaW5jbHVkZSA8c3lzL3NobS5oPgogICNpbmNsdWRlICJsaXN0LmgiCiAtLSAKLTEuOS4xCisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzNkYTI4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotU1VNTUFSWSA9ICJBTFNBIHNvdW5kIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKLVNFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgotTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zb2NrZXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI2O21kNT0xMWZmODlhOGE3YTRhNjkwYTVjNzhlZmZlODE1OTU0NSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi0jIGNvbmZpZ3VyZS5pbiBzZXRzIC1EX19hcm1fXyBvbiB0aGUgY29tbWFuZCBsaW5lIGZvciBhbnkgYXJtIHN5c3RlbQotIyAobm90IGp1c3QgdGhvc2Ugd2l0aCB0aGUgQVJNIGluc3RydWN0aW9uIHNldCksIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQsCi0jIChvciByZXBsYWNlZCBieSBhIHBlcm1pdHRlZCAjZGVmaW5lKS4KLSNGSVhNRTogcmVtb3ZlIHRoZSBmb2xsb3dpbmcKLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi9saWIvJHtCUH0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXRvcG9sb2d5LUFkZC1taXNzaW5nLWluY2x1ZGUtc3lzLXN0YXQuaC5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiNjk1MTVjYTczYzNjNGEyMTJlZjQ1MTYwZGVhODQ2YzEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGZkZTY1ZDExZTgyYjY4ZjgyZTU2MmFiNjIyOGMxZmI3Yzc4ODU0MzQ1ZDNjNTdlMmM2OGE5ZGQzZGFlMWYxNSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLXJlcXVpcmUgYWxzYS1mcHUuaW5jCi1FWFRSQV9PRUNPTkYgKz0gIiR7QGdldF9hbHNhX2ZwdV9zZXR0aW5nKGJiLCBkKX0gIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXB5dGhvbiIKLQotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS13aXRoLXZlcnNpb25lZD1ubyAiCi0KLVBBQ0tBR0VTID0rICJhbHNhLXNlcnZlciBsaWJhc291bmQgYWxzYS1jb25mLWJhc2UgYWxzYS1jb25mIGFsc2EtZG9jIgotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLyouc28iCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLyoubGEiCi1GSUxFU19saWJhc291bmQgPSAiJHtsaWJkaXJ9L2xpYmFzb3VuZC5zby4qIgotRklMRVNfYWxzYS1zZXJ2ZXIgPSAiJHtiaW5kaXJ9LyoiCi1GSUxFU19hbHNhLWNvbmYgPSAiJHtkYXRhZGlyfS9hbHNhLyIKLUZJTEVTX2Fsc2EtY29uZi1iYXNlID0gIlwKLSR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYgXAotJHtkYXRhZGlyfS9hbHNhL2NhcmRzL2FsaWFzZXMuY29uZiBcCi0ke2RhdGFkaXJ9L2Fsc2EvcGNtL2RlZmF1bHQuY29uZiBcCi0ke2RhdGFkaXJ9L2Fsc2EvcGNtL2RtaXguY29uZiBcCi0ke2RhdGFkaXJ9L2Fsc2EvcGNtL2Rzbm9vcC5jb25mIgotCi1SREVQRU5EU19saWJhc291bmQgPSAiYWxzYS1jb25mLWJhc2UgYWxzYS1jb25mIgotIyB1cGdyYWRlIHBhdGgKLVJQUk9WSURFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCi1SUkVQTEFDRVNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgotUkNPTkZMSUNUU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjEuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMTNkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjEuMi5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIkFMU0Egc291bmQgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2Fsc2EtcHJvamVjdC5vcmcvbWFpbi9pbmRleC5waHAvQnVnX1RyYWNraW5nIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NvY2tldC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjY7bWQ1PTExZmY4OWE4YTdhNGE2OTBhNWM3OGVmZmU4MTU5NTQ1IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL2xpYi8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL0NoZWNrLWlmLXdvcmRleHAtZnVuY3Rpb24taXMtc3VwcG9ydGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxOTQ2ZTY0MzhiODI2MmE3YjhmZGFkYWNkMGUwNmJhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMzhkYWNkOTg5MmIwNmI4YmZmMDQ5MjNjMzgwYjM4ZmIyZTM3OWVlNTUzODkzNWZmMzdlNDViMzk1ZDg2MWQ2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworcmVxdWlyZSBhbHNhLWZwdS5pbmMKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2Fsc2FfZnB1X3NldHRpbmcoYmIsIGQpfSAiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcHl0aG9uIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtdmVyc2lvbmVkPW5vICIKKworUEFDS0FHRVMgPSsgImFsc2Etc2VydmVyIGxpYmFzb3VuZCBhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYgYWxzYS1kb2MiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5zbyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5sYSIKK0ZJTEVTX2xpYmFzb3VuZCA9ICIke2xpYmRpcn0vbGliYXNvdW5kLnNvLioiCitGSUxFU19hbHNhLXNlcnZlciA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2Fsc2EtY29uZiA9ICIke2RhdGFkaXJ9L2Fsc2EvIgorRklMRVNfYWxzYS1jb25mLWJhc2UgPSAiXAorJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZiBcCiske2RhdGFkaXJ9L2Fsc2EvY2FyZHMvYWxpYXNlcy5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZGVmYXVsdC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZG1peC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZHNub29wLmNvbmYiCisKK1JERVBFTkRTX2xpYmFzb3VuZCA9ICJhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYiCisjIHVwZ3JhZGUgcGF0aAorUlBST1ZJREVTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JSRVBMQUNFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCitSQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLXBwaC1pbmNsdWRlLWNvbmZpZy5oLWZyb20tcmF0ZV9zcGVleHJhdGUuYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLXBwaC1pbmNsdWRlLWNvbmZpZy5oLWZyb20tcmF0ZV9zcGVleHJhdGUuYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU1YjZhMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1wcGgtaW5jbHVkZS1jb25maWcuaC1mcm9tLXJhdGVfc3BlZXhyYXRlLmMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDQzNTAzMTRjOTQxNDg5ODMzYThiYWE5MzBlMTY1MTJlNTVmNzJhMTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+Ci1EYXRlOiBXZWQsIDI3IEphbiAyMDE2IDEzOjIyOjM4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIHBwaDogaW5jbHVkZSBjb25maWcuaCBmcm9tIHJhdGVfc3BlZXhyYXRlLmMKLQotRml4ZXMgY29tcGlsYXRpb24gYWdhaW5zdCBsaWJzcGVleGRzcCAxLjJyYzMuCi0KLXJhdGVfc3BlZXhyYXRlLmMgaW5jbHVkZXMgc3BlZXhfcmVzYW1wbGVyLmgsIHdoaWNoIGRlcGVuZHMgb24gY29uZmlnLmgKLWJ5IHJlZmVyZW5jaW5nIHRoZSBIQVZFX1NQRUVYX1NQRUVYRFNQX1RZUEVTX0ggbWFjcm8uIEFGQUlLIGl0J3Mgbm90Ci1hIGdvb2QgaWRlYSB0byBpbmNsdWRlIGNvbmZpZy5oIGZyb20gaGVhZGVycyAoSSBkb24ndCBrbm93L3JlbWVtYmVyCi13aHksIHRob3VnaCksIHdoaWNoIGlzIHdoeSBJIGluY2x1ZGUgY29uZmlnLmggZnJvbSByYXRlX3NwZWV4cmF0ZS5jCi1pbnN0ZWFkIG9mIHNwZWV4X3Jlc2FtcGxlci5oLgotCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtleHBlY3RlZCBpbiAxLjEuMV0KLQotU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotLS0tCi0gcHBoL3JhdGVfc3BlZXhyYXRlLmMgfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL3BwaC9yYXRlX3NwZWV4cmF0ZS5jIGIvcHBoL3JhdGVfc3BlZXhyYXRlLmMKLWluZGV4IDBhMTMyNWMuLjhmYzRjZWYgMTAwNjQ0Ci0tLS0gYS9wcGgvcmF0ZV9zcGVleHJhdGUuYwotKysrIGIvcHBoL3JhdGVfc3BlZXhyYXRlLmMKLUBAIC0yOCw2ICsyOCw3IEBACi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSsjaW5jbHVkZSAiY29uZmlnLmgiCi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+Ci0gI2luY2x1ZGUgPGFsc2EvcGNtX3JhdGUuaD4KLS0tIAotMi43LjAucmMzCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNjU3NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4xLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotU1VNTUFSWSA9ICJBTFNBIFBsdWdpbnMiCi1IT01FUEFHRSA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZyIKLVNFQ1RJT04gPSAibXVsdGltZWRpYSIKLQotIyBUaGUgcHJpbWFyeSBsaWNlbnNlIG9mIGFsc2EtcGx1Z2lucyBpcyBMR1BMdjIuMS4KLSMKLSMgbTQvYXR0cmlidXRlcy5tNCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisuIG00L2F0dHJpYnV0ZXMubTQgaXMgcGFydCBvZiB0aGUKLSMgYnVpbGQgc3lzdGVtLCBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGxpY2Vuc2luZyBvZiB0aGUgYnVpbGQgcmVzdWx0LgotIwotIyBUaGUgc2FtcGxlcmF0ZSBwbHVnaW4gc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrIHRvIGJlIGNvbnNpc3RlbnQKLSMgd2l0aCB0aGUgbGlic2FtcGxlcmF0ZSBsaWNlbnNlLiBIb3dldmVyLCBpZiB0aGUgbGljZW5zZWUgaGFzIGEgY29tbWVyY2lhbAotIyBsaWNlbnNlIGZvciBsaWJzYW1wbGVyYXRlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4gbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCi0jIG9mIExHUEx2Mi4xIGxpa2UgdGhlIHJlc3Qgb2YgdGhlIHBsdWdpbnMuCi1MSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJcCi0gICAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCi0gICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICBmaWxlOi8vbTQvYXR0cmlidXRlcy5tNDtlbmRsaW5lPTMzO21kNT1iMjU5NThkYTQ0YzAyMjMxZTM2NDFmMWJjY2VmNTNlYiBcCi0gICAgICAgIGZpbGU6Ly9yYXRlL3JhdGVfc2FtcGxlcmF0ZS5jO2VuZGxpbmU9MzU7bWQ1PWZkNzdiY2U4NWY0YTMzOGMwZThhYjE4NDMwYjY5ZmFlIFwKLSIKLQotU1JDX1VSSSA9ICJcCi0gICAgICAgIGZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi9wbHVnaW5zLyR7QlB9LnRhci5iejIgXAotICAgICAgICBmaWxlOi8vMDAwMS1wcGgtaW5jbHVkZS1jb25maWcuaC1mcm9tLXJhdGVfc3BlZXhyYXRlLmMucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gImIxMjNlNDJlZDg4MWI5YWRiYzk5ZTQwNDBmMjU3YzM5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNiODNjMzI5OTUzYmVmOTlmNWZlMjVhZTA0ZWM0YTQ1NWZlNjUxNDkzOWYzYjQ1YTUzMjE5NjY2NTJiMmM5ZWUiCi0KLURFUEVORFMgKz0gImFsc2EtbGliIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIlwKLSAgICAgICAgc2FtcGxlcmF0ZSBcCi0gICAgICAgIHNwZWV4ZHNwIFwKLSAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IFwKLSIKLVBBQ0tBR0VDT05GSUdbYXZjb2RlY10gPSAiLS1lbmFibGUtYXZjb2RlYywtLWRpc2FibGUtYXZjb2RlYyxsaWJhdiIKLVBBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgotUEFDS0FHRUNPTkZJR1ttYWVtby1wbHVnaW5dID0gIi0tZW5hYmxlLW1hZW1vLXBsdWdpbiwtLWRpc2FibGUtbWFlbW8tcGx1Z2luIgotUEFDS0FHRUNPTkZJR1ttYWVtby1yZXNvdXJjZS1tYW5hZ2VyXSA9ICItLWVuYWJsZS1tYWVtby1yZXNvdXJjZS1tYW5hZ2VyLC0tZGlzYWJsZS1tYWVtby1yZXNvdXJjZS1tYW5hZ2VyLGRidXMiCi1QQUNLQUdFQ09ORklHW3B1bHNlYXVkaW9dID0gIi0tZW5hYmxlLXB1bHNlYXVkaW8sLS1kaXNhYmxlLXB1bHNlYXVkaW8scHVsc2VhdWRpbyIKLVBBQ0tBR0VDT05GSUdbc2FtcGxlcmF0ZV0gPSAiLS1lbmFibGUtc2FtcGxlcmF0ZSwtLWRpc2FibGUtc2FtcGxlcmF0ZSxsaWJzYW1wbGVyYXRlMCIKLVBBQ0tBR0VDT05GSUdbc3BlZXhkc3BdID0gIi0td2l0aC1zcGVleD1saWIsLS13aXRoLXNwZWV4PW5vLHNwZWV4ZHNwIgotCi1QQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHVsc2VhdWRpbycsICdhbHNhLXBsdWdpbnMtcHVsc2VhdWRpby1jb25mJywgJycsIGQpfSIKLQotUEFDS0FHRVNfRFlOQU1JQyA9ICJebGliYXNvdW5kLW1vZHVsZS0uKiIKLQotIyBUaGUgYWxzYS1wbHVnaW5zIHBhY2thZ2UgZG9lc24ndCBpdHNlbGYgY29udGFpbiBhbnl0aGluZywgaXQganVzdCBkZXBlbmRzIG9uCi0jIGFsbCBidWlsdCBwbHVnaW5zLgotQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0Jcm0gJHtEfSR7bGliZGlyfS9hbHNhLWxpYi8qLmxhCi0KLQkjIFdlIHVzZSB0aGUgZXhhbXBsZSBhcyBpcywgc28ganVzdCBkcm9wIHRoZSAuZXhhbXBsZSBzdWZmaXguCi0JaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHVsc2VhdWRpbycsICd5ZXMnLCAnbm8nLCBkKX0iID0gInllcyIgXTsgdGhlbgotCQltdiAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mLmV4YW1wbGUgJHtEfSR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZgotCWZpCi19Ci0KLXB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgewotICAgIHBsdWdpbmRpciA9IGJiLmRhdGEuZXhwYW5kKCcke2xpYmRpcn0vYWxzYS1saWIvJywgZCkKLSAgICBwYWNrYWdlcyA9ICIgIi5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbmRpciwgJ15saWJhc291bmRfbW9kdWxlXyguKilcLnNvJCcsICdsaWJhc291bmQtbW9kdWxlLSVzJywgJ0Fsc2EgcGx1Z2luIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpKQotICAgIGQuc2V0VmFyKCJSREVQRU5EU19hbHNhLXBsdWdpbnMiLCBwYWNrYWdlcykKLX0KLQotIyBUaGUgcmF0ZSBwbHVnaW5zIGNyZWF0ZSBzb21lIHN5bWxpbmtzLiBGb3IgZXhhbXBsZSwgdGhlIHNhbXBsZXJhdGUgcGx1Z2luCi0jIGNyZWF0ZXMgdGhlc2UgbGlua3MgdG8gdGhlIG1haW4gcGx1Z2luIGZpbGU6Ci0jCi0jICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfYmVzdC5zbwotIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX2xpbmVhci5zbwotIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX21lZGl1bS5zbwotIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX29yZGVyLnNvCi0jCi0jIFRoZSBvdGhlciByYXRlIHBsdWdpbnMgY3JlYXRlIHNpbWlsYXIgbGlua3MuIFdlIGhhdmUgdG8gYWRkIHRoZSBsaW5rcyB0bwotIyBGSUxFUyBtYW51YWxseSwgYmVjYXVzZSBkb19zcGxpdF9wYWNrYWdlcygpIHNraXBzIHRoZSBsaW5rcyAod2hpY2ggaXMgZ29vZCwKLSMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB3YW50IGRvX3NwbGl0X3BhY2thZ2VzKCkgdG8gY3JlYXRlIHNlcGFyYXRlIHBhY2thZ2VzIGZvcgotIyB0aGUgc3ltbGlua3MpLgotIwotIyBUaGUgc3ltbGlua3MgY2F1c2UgUUEgZXJyb3JzLCBiZWNhdXNlIHVzdWFsbHkgaXQncyBhIGJ1ZyBpZiBhIG5vbgotIyAtZGV2Ly1kYmcvLW5hdGl2ZXNkayBwYWNrYWdlIGNvbnRhaW5zIGxpbmtzIHRvIC5zbyBmaWxlcywgYnV0IGluIHRoaXMgY2FzZQotIyB0aGUgZXJyb3JzIGFyZSBmYWxzZSBwb3NpdGl2ZXMsIHNvIHdlIGRpc2FibGUgdGhlIFFBIGNoZWNrcy4KLUZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLWxhdmNyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfbGF2Y3JhdGVfKi5zbyIKLUZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNhbXBsZXJhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9zYW1wbGVyYXRlXyouc28iCi1GSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9zcGVleHJhdGVfKi5zbyIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLWxhdmNyYXRlID0gImRldi1zbyIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNhbXBsZXJhdGUgPSAiZGV2LXNvIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc3BlZXhyYXRlID0gImRldi1zbyIKLQotIyA1MC1wdWxzZWF1ZGlvLmNvbmYgZGVmaW5lcyBhIGRldmljZSBuYW1lZCAicHVsc2UiIHRoYXQgYXBwbGljYXRpb25zIGNhbiB1c2UKLSMgaWYgdGhleSBleHBsaWNpdGx5IHdhbnQgdG8gdXNlIHRoZSBQdWxzZUF1ZGlvIHBsdWdpbi4KLSMgOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYgY29uZmlndXJlcyB0aGUgImRlZmF1bHQiIGRldmljZSB0byB1c2UgdGhlCi0jIFB1bHNlQXVkaW8gcGx1Z2luLgotRklMRVNfJHtQTn0tcHVsc2VhdWRpby1jb25mICs9ICJcCi0gICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC81MC1wdWxzZWF1ZGlvLmNvbmYgXAotICAgICAgICAke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYgXAotIgotCi1SREVQRU5EU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKLSAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1jb25mLXB1bHNlIFwKLSAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1jdGwtcHVsc2UgXAotICAgICAgICBsaWJhc291bmQtbW9kdWxlLXBjbS1wdWxzZSBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1ZWE1NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuMS5iYgpAQCAtMCwwICsxLDEwMyBAQAorU1VNTUFSWSA9ICJBTFNBIFBsdWdpbnMiCitIT01FUEFHRSA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2Fsc2EtcHJvamVjdC5vcmcvbWFpbi9pbmRleC5waHAvQnVnX1RyYWNraW5nIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorCisjIFRoZSBwcmltYXJ5IGxpY2Vuc2Ugb2YgYWxzYS1wbHVnaW5zIGlzIExHUEx2Mi4xLgorIworIyBtNC9hdHRyaWJ1dGVzLm00IGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKy4gbTQvYXR0cmlidXRlcy5tNCBpcyBwYXJ0IG9mIHRoZQorIyBidWlsZCBzeXN0ZW0sIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgbGljZW5zaW5nIG9mIHRoZSBidWlsZCByZXN1bHQuCisjCisjIFRoZSBzYW1wbGVyYXRlIHBsdWdpbiBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisgdG8gYmUgY29uc2lzdGVudAorIyB3aXRoIHRoZSBsaWJzYW1wbGVyYXRlIGxpY2Vuc2UuIEhvd2V2ZXIsIGlmIHRoZSBsaWNlbnNlZSBoYXMgYSBjb21tZXJjaWFsCisjIGxpY2Vuc2UgZm9yIGxpYnNhbXBsZXJhdGUsIHRoZSBzYW1wbGVyYXRlIHBsdWdpbiBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyMgb2YgTEdQTHYyLjEgbGlrZSB0aGUgcmVzdCBvZiB0aGUgcGx1Z2lucy4KK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKKyAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgIGZpbGU6Ly9tNC9hdHRyaWJ1dGVzLm00O2VuZGxpbmU9MzM7bWQ1PWIyNTk1OGRhNDRjMDIyMzFlMzY0MWYxYmNjZWY1M2ViIFwKKyAgICAgICAgZmlsZTovL3JhdGUvcmF0ZV9zYW1wbGVyYXRlLmM7ZW5kbGluZT0zNTttZDU9ZmQ3N2JjZTg1ZjRhMzM4YzBlOGFiMTg0MzBiNjlmYWUgXAorIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi9wbHVnaW5zLyR7QlB9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiNjlmOWYzZTJkZTNjOTdmYzcxZDQ5NmU5MWUyNzFmZTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGVhNGQxZTA4MmMzNjUyOGE4OTZhMjU4MWU1ZWI2MmQ0ZGMyNjgzMjM4ZTM1MzA1MGQwZDYyNGU2NWY5MDFmMSIKKworREVQRU5EUyArPSAiYWxzYS1saWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiXAorICAgICAgICBzYW1wbGVyYXRlIFwKKyAgICAgICAgc3BlZXhkc3AgXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW21hZW1vLXBsdWdpbl0gPSAiLS1lbmFibGUtbWFlbW8tcGx1Z2luLC0tZGlzYWJsZS1tYWVtby1wbHVnaW4iCitQQUNLQUdFQ09ORklHW21hZW1vLXJlc291cmNlLW1hbmFnZXJdID0gIi0tZW5hYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsLS1kaXNhYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1tzYW1wbGVyYXRlXSA9ICItLWVuYWJsZS1zYW1wbGVyYXRlLC0tZGlzYWJsZS1zYW1wbGVyYXRlLGxpYnNhbXBsZXJhdGUwIgorUEFDS0FHRUNPTkZJR1tzcGVleGRzcF0gPSAiLS13aXRoLXNwZWV4PWxpYiwtLXdpdGgtc3BlZXg9bm8sc3BlZXhkc3AiCisKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ2Fsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5saWJhc291bmQtbW9kdWxlLS4qIgorCisjIFRoZSBhbHNhLXBsdWdpbnMgcGFja2FnZSBkb2Vzbid0IGl0c2VsZiBjb250YWluIGFueXRoaW5nLCBpdCBqdXN0IGRlcGVuZHMgb24KKyMgYWxsIGJ1aWx0IHBsdWdpbnMuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAke0R9JHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEKKworCSMgV2UgdXNlIHRoZSBleGFtcGxlIGFzIGlzLCBzbyBqdXN0IGRyb3AgdGhlIC5leGFtcGxlIHN1ZmZpeC4KKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCW12ICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYuZXhhbXBsZSAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mCisJZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgcGx1Z2luZGlyID0gYmIuZGF0YS5leHBhbmQoJyR7bGliZGlyfS9hbHNhLWxpYi8nLCBkKQorICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYmFzb3VuZF9tb2R1bGVfKC4qKVwuc28kJywgJ2xpYmFzb3VuZC1tb2R1bGUtJXMnLCAnQWxzYSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykpCisgICAgZC5zZXRWYXIoIlJERVBFTkRTX2Fsc2EtcGx1Z2lucyIsIHBhY2thZ2VzKQorfQorCisjIFRoZSByYXRlIHBsdWdpbnMgY3JlYXRlIHNvbWUgc3ltbGlua3MuIEZvciBleGFtcGxlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4KKyMgY3JlYXRlcyB0aGVzZSBsaW5rcyB0byB0aGUgbWFpbiBwbHVnaW4gZmlsZToKKyMKKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9iZXN0LnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbGluZWFyLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbWVkaXVtLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfb3JkZXIuc28KKyMKKyMgVGhlIG90aGVyIHJhdGUgcGx1Z2lucyBjcmVhdGUgc2ltaWxhciBsaW5rcy4gV2UgaGF2ZSB0byBhZGQgdGhlIGxpbmtzIHRvCisjIEZJTEVTIG1hbnVhbGx5LCBiZWNhdXNlIGRvX3NwbGl0X3BhY2thZ2VzKCkgc2tpcHMgdGhlIGxpbmtzICh3aGljaCBpcyBnb29kLAorIyBiZWNhdXNlIHdlIHdvdWxkbid0IHdhbnQgZG9fc3BsaXRfcGFja2FnZXMoKSB0byBjcmVhdGUgc2VwYXJhdGUgcGFja2FnZXMgZm9yCisjIHRoZSBzeW1saW5rcykuCisjCisjIFRoZSBzeW1saW5rcyBjYXVzZSBRQSBlcnJvcnMsIGJlY2F1c2UgdXN1YWxseSBpdCdzIGEgYnVnIGlmIGEgbm9uCisjIC1kZXYvLWRiZy8tbmF0aXZlc2RrIHBhY2thZ2UgY29udGFpbnMgbGlua3MgdG8gLnNvIGZpbGVzLCBidXQgaW4gdGhpcyBjYXNlCisjIHRoZSBlcnJvcnMgYXJlIGZhbHNlIHBvc2l0aXZlcywgc28gd2UgZGlzYWJsZSB0aGUgUUEgY2hlY2tzLgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9sYXZjcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NhbXBsZXJhdGVfKi5zbyIKK0ZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NwZWV4cmF0ZV8qLnNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgPSAiZGV2LXNvIgorCisjIDUwLXB1bHNlYXVkaW8uY29uZiBkZWZpbmVzIGEgZGV2aWNlIG5hbWVkICJwdWxzZSIgdGhhdCBhcHBsaWNhdGlvbnMgY2FuIHVzZQorIyBpZiB0aGV5IGV4cGxpY2l0bHkgd2FudCB0byB1c2UgdGhlIFB1bHNlQXVkaW8gcGx1Z2luLgorIyA5OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBjb25maWd1cmVzIHRoZSAiZGVmYXVsdCIgZGV2aWNlIHRvIHVzZSB0aGUKKyMgUHVsc2VBdWRpbyBwbHVnaW4uCitGSUxFU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKKyAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzUwLXB1bHNlYXVkaW8uY29uZiBcCisgICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBcCisiCisKK1JERVBFTkRTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLWNvbmYtcHVsc2UgXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLWN0bC1wdWxzZSBcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtcGNtLXB1bHNlIFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1DdXM0MjhNaWRpLUV4cGxpY2l0bHktY2FzdC1jb25zdGFudC10by1jaGFyLXR5cGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzLzAwMDEtQ3VzNDI4TWlkaS1FeHBsaWNpdGx5LWNhc3QtY29uc3RhbnQtdG8tY2hhci10eXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTVjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzLzAwMDEtQ3VzNDI4TWlkaS1FeHBsaWNpdGx5LWNhc3QtY29uc3RhbnQtdG8tY2hhci10eXBlLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK0Zyb20gMWNjMGFhNGRiZDNjN2YxMjY3ODA5ZTBlMWNhNTdkNDZmNDgwM2JmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE3IEFwciAyMDE2IDIzOjI1OjE4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEN1czQyOE1pZGk6IEV4cGxpY2l0bHkgY2FzdCBjb25zdGFudCB0byBjaGFyIHR5cGUKKworVGhpcyBpcyBmbGFnZ2VkIGJ5IGdjYzYKK0N1czQyOE1pZGkuY2M6ODM6MTogZXJyb3I6IG5hcnJvd2luZyBjb252ZXJzaW9uIG9mICctMScgZnJvbSAnaW50JyB0byAnY2hhcicgaW5zaWRlIHsgfSBbLVduYXJyb3dpbmddCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgdXM0Mjhjb250cm9sL0N1czQyOE1pZGkuY2MgfCAzMCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91czQyOGNvbnRyb2wvQ3VzNDI4TWlkaS5jYyBiL3VzNDI4Y29udHJvbC9DdXM0MjhNaWRpLmNjCitpbmRleCBiOWU2NzgzLi5iZWY3YmIxIDEwMDY0NAorLS0tIGEvdXM0Mjhjb250cm9sL0N1czQyOE1pZGkuY2MKKysrKyBiL3VzNDI4Y29udHJvbC9DdXM0MjhNaWRpLmNjCitAQCAtMzIsMjIgKzMyLDIyIEBAIGNoYXIgQ3VzNDI4TWlkaTo6S25vYlBhcmFtW10gPSB7CisgCTB4MkEsCisgCTB4MjksCisgCTB4MjgsCistCS0xLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisgCTB4MTAsCisgCTB4MTEsCisgCTB4MTgsCisgCTB4MTksCisgCTB4MUEsCistCS0xLAorLQktMSwKKy0JLTEsCistCS0xLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisgCTB4MkMsCisgCTB4MkQsCisgCTB4MkUsCisgCTB4MkYsCistCS0xLAorLQktMSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisgCTB4MjAsCisgCTB4MjEsCisgCTB4MjIsCitAQCAtNjQsMTQgKzY0LDE0IEBAIGNoYXIgQ3VzNDI4TWlkaTo6S25vYlBhcmFtW10gPSB7CisgCTUsCisgCTYsCisgCTcsCistCS0xLAorLQktMSwKKy0JLTEsCistCS0xLAorLQktMSwKKy0JLTEsCistCS0xLAorLQktMSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisgCTB4MzAsCisgCTB4MzEsCisgCTB4MzIsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHNfMS4xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMS4wLmJiCmluZGV4IDllNjMzZjEuLjhkNGExNDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHNfMS4xLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjEuMC5iYgpAQCAtMSw2ICsxLDYgQEAKIFNVTU1BUlkgPSAiQWR2YW5jZWQgdG9vbHMgZm9yIGNlcnRhaW4gQUxTQSBzb3VuZCBjYXJkIGRyaXZlcnMiCiBIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2Fsc2EtcHJvamVjdC5vcmcvbWFpbi9pbmRleC5waHAvQnVnX1RyYWNraW5nIgogU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgogTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MisiCiBERVBFTkRTID0gImFsc2EtbGliIG5jdXJzZXMgZ2xpYi0yLjAiCkBAIC0xMCwxMSArMTAsMTEgQEAKIAogU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvdG9vbHMvJHtCUH0udGFyLmJ6MiBcCiAgICAgICAgICAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2ggXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcnLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vbWFrZWZpbGVfbm9fZ3RrLnBhdGNoJywgZCl9IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJywgJ2ZpbGU6Ly9tYWtlZmlsZV9ub19ndGsucGF0Y2gnLCBkKX0gXAogICAgICAgICAgICBmaWxlOi8vZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoIFwKLSAgICAgICAgICAiCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUN1czQyOE1pZGktRXhwbGljaXRseS1jYXN0LWNvbnN0YW50LXRvLWNoYXItdHlwZS5wYXRjaCBcCisgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gImI0NzZhNWFmYWEzZWEzMjMwODU1NTUzYWQ1OWQyNTlkIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkMzQ1NThjNTkwYTUwMjk0YjM2NTc2ZDI1NzMxNmExYWM1Y2Q5NTFlYjhjZDdkMzMwZTA5ZjhjYzc1N2FiNTEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4xLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OGY5YjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotcmVxdWlyZSBhbHNhLXV0aWxzXyR7UFZ9LmJiCi0KLVNVTU1BUlkgPSAiU2hlbGwgc2NyaXB0cyB0aGF0IHNob3cgaGVscCBpbmZvIGFuZCBjcmVhdGUgQUxTQSBjb25maWd1cmF0aW9uIGZpbGVzIgotUFJPVklERVMgPSAiYWxzYS11dGlscy1hbHNhY29uZiIKLQotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vYWxzYS11dGlsczoiCi0KLVBBQ0tBR0VTID0gIiR7UE59IgotUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCi0KLUZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0vYWxzYWNvbmYgXAotICAgICAgICAgICAgICAgJHtzYmluZGlyfS9hbHNhLWluZm8uc2ggXAotICAgICAgICAgICAgICAiCi0KLVMgPSAiJHtXT1JLRElSfS9hbHNhLXV0aWxzLSR7UFZ9IgotCi1kb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KLQlpbnN0YWxsIC1tIDA3NTUgJHtCfS9hbHNhY29uZi9hbHNhY29uZiAke0R9JHtzYmluZGlyfS8KLQlpbnN0YWxsIC1tIDA3NTUgJHtTfS9hbHNhLWluZm8vYWxzYS1pbmZvLnNoICR7RH0ke3NiaW5kaXJ9LwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjc5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4xLjIuYmIKQEAgLTAsMCArMSwyNSBAQAorcmVxdWlyZSBhbHNhLXV0aWxzXyR7UFZ9LmJiCisKK1NVTU1BUlkgPSAiU2hlbGwgc2NyaXB0cyB0aGF0IHNob3cgaGVscCBpbmZvIGFuZCBjcmVhdGUgQUxTQSBjb25maWd1cmF0aW9uIGZpbGVzIgorUFJPVklERVMgPSAiYWxzYS11dGlscy1hbHNhY29uZiIKKworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vYWxzYS11dGlsczoiCisKK1BBQ0tBR0VTID0gIiR7UE59IgorUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCisKK0ZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0vYWxzYWNvbmYgXAorICAgICAgICAgICAgICAgJHtzYmluZGlyfS9hbHNhLWluZm8uc2ggXAorICAgICAgICAgICAgICAgJHtzYmluZGlyfS9hbHNhYmF0LXRlc3Quc2ggXAorICAgICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9hbHNhLXV0aWxzLSR7UFZ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9hbHNhY29uZi9hbHNhY29uZiAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9hbHNhLWluZm8vYWxzYS1pbmZvLnNoICR7RH0ke3NiaW5kaXJ9LworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2JhdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1N9L2JhdC9hbHNhYmF0LXRlc3Quc2ggJHtEfSR7c2JpbmRpcn0vCisJZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhYmF0LXJlbmFtZS10by1hdm9pZC1uYW1pbmctY29uZmxpY3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWJhdC1yZW5hbWUtdG8tYXZvaWQtbmFtaW5nLWNvbmZsaWN0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmQ3ZDRmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhYmF0LXJlbmFtZS10by1hdm9pZC1uYW1pbmctY29uZmxpY3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotRnJvbSAyOGMyOWRlY2U2YzQzNGU3ZDNkMDFlODA1NTU1YmE3ZGRmNmZiYTY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogIkx1LCBIYW4iIDxoYW4ubHVAaW50ZWwuY29tPgotRGF0ZTogV2VkLCAzIEZlYiAyMDE2IDE0OjIwOjMzICswODAwCi1TdWJqZWN0OiBbUEFUQ0hdIGFsc2FiYXQ6IHJlbmFtZSB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3QKLQotYWxzYS11dGlscyBhcyB3ZWxsIGFzIGJhcmVvcy1iYXQgKGFzIHdlbGwgYSBzb21lIEJhY3VsYSBwYWNrYWdlcykKLWFsbCBjb250YWluIGEgcHJvZ3JhbSBjYWxsZWQgL3Vzci9iaW4vYmF0LCB3aGljaCBjYXVzZXMgY29uZmxpY3RzIG9uCi12YXJpb3VzIGRpc3RyaWJ1dGlvbnMgKCJiYXNpYyBhdWRpbyB0ZXN0ZXIiIHZzICJiYXJlb3MgYWRtaW5pc3RyYXRpb24KLXRvb2wiKCJiYWN1bGEgYWRtaW5pc3RyYXRpb24gdG9vbCIpKS4KLVJlbmFtZSB0byBhdm9pZCBjb25mbGljdC4KLQotU2lnbmVkLW9mZi1ieTogTHUsIEhhbiA8aGFuLmx1QGludGVsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KLQotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbZXhwZWN0ZWQgaW4gdmVyc2lvbiAxLjEuMV0KLQotU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotLS0tCi0gYmF0L01ha2VmaWxlLmFtICAgICAgICAgIHwgMTAgKysrKystLS0tLQotIGJhdC97YmF0LjEgPT4gYWxzYWJhdC4xfSB8IDQzICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBiYXQvYmF0LmMgICAgICAgICAgICAgICAgfCAgMiArLQotIDMgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCi0gcmVuYW1lIGJhdC97YmF0LjEgPT4gYWxzYWJhdC4xfSAoNzIlKQotCi1kaWZmIC0tZ2l0IGEvYmF0L01ha2VmaWxlLmFtIGIvYmF0L01ha2VmaWxlLmFtCi1pbmRleCA4NDJhZTZiLi45ODVmMDBjIDEwMDY0NAotLS0tIGEvYmF0L01ha2VmaWxlLmFtCi0rKysgYi9iYXQvTWFrZWZpbGUuYW0KLUBAIC0xLDkgKzEsOSBAQAotLWJpbl9QUk9HUkFNUyA9IGJhdAotLW1hbl9NQU5TID0gYmF0LjEKLStiaW5fUFJPR1JBTVMgPSBhbHNhYmF0Ci0rbWFuX01BTlMgPSBhbHNhYmF0LjEKLSAKLS1FWFRSQV9ESVNUID0gYmF0LjEKLStFWFRSQV9ESVNUID0gYWxzYWJhdC4xCi0gCi0tYmF0X1NPVVJDRVMgPSBcCi0rYWxzYWJhdF9TT1VSQ0VTID0gXAotIAliYXQuYyBcCi0gCWNvbW1vbi5jIFwKLSAJYW5hbHl6ZS5jIFwKLUBAIC0yMSw0ICsyMSw0IEBAIG5vaW5zdF9IRUFERVJTID0gXAotIEFNX0NQUEZMQUdTID0gXAotIAkgICAgICAtV2FsbCAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQotIAotLWJhdF9MREFERCA9IEBGRlRXX0xJQkAKLSthbHNhYmF0X0xEQUREID0gQEZGVFdfTElCQAotZGlmZiAtLWdpdCBhL2JhdC9iYXQuMSBiL2JhdC9hbHNhYmF0LjEKLXNpbWlsYXJpdHkgaW5kZXggNzIlCi1yZW5hbWUgZnJvbSBiYXQvYmF0LjEKLXJlbmFtZSB0byBiYXQvYWxzYWJhdC4xCi1pbmRleCBlMDBmYzI3Li44ZDBiOWMwIDEwMDY0NAotLS0tIGEvYmF0L2JhdC4xCi0rKysgYi9iYXQvYWxzYWJhdC4xCi1AQCAtMSwyMyArMSwyMyBAQAotLS5USCBCQVQgMSAiMjB0aCBPY3RvYmVyIDIwMTUiCi0rLlRIIEFMU0FCQVQgMSAiMjB0aCBPY3RvYmVyIDIwMTUiCi0gLlNIIE5BTUUKLS1iYXQgXC0gY29tbWFuZFwtbGluZSBzb3VuZCB0ZXN0ZXIgZm9yIEFMU0Egc291bmQgY2FyZCBkcml2ZXIKLSthbHNhYmF0IFwtIGNvbW1hbmRcLWxpbmUgc291bmQgdGVzdGVyIGZvciBBTFNBIHNvdW5kIGNhcmQgZHJpdmVyCi0gCi0gLlNIIFNZTk9QU0lTCi0tXGZCYmF0XGZQIFtcZklmbGFnc1xmUF0KLStcZkJhbHNhYmF0XGZQIFtcZklmbGFnc1xmUF0KLSAKLSAuU0ggREVTQ1JJUFRJT04KLS1cZkJCQVQoQmFzaWMgQXVkaW8gVGVzdGVyKVxmUCBpcyBhIHNpbXBsZSBjb21tYW5kXC1saW5lIHV0aWxpdHkgaW50ZW5kZWQKLS10byBoZWxwIGF1dG9tYXRlIGF1ZGlvIGRyaXZlciBhbmQgc291bmQgc2VydmVyIHRlc3Rpbmcgd2l0aCBsaXR0bGUgaHVtYW4KLS1pbnRlcmFjdGlvbi4gQkFUIGNhbiBiZSB1c2VkIHRvIHRlc3QgYXVkaW8gcXVhbGl0eSwgc3RyZXNzIHRlc3QgZmVhdHVyZXMKLS1hbmQgdGVzdCBhdWRpbyBiZWZvcmUgYW5kIGFmdGVyIFBNIHN0YXRlIGNoYW5nZXMuCi0rXGZCQUxTQUJBVChBTFNBIEJhc2ljIEF1ZGlvIFRlc3RlcilcZlAgaXMgYSBzaW1wbGUgY29tbWFuZFwtbGluZSB1dGlsaXR5Ci0raW50ZW5kZWQgdG8gaGVscCBhdXRvbWF0ZSBhdWRpbyBkcml2ZXIgYW5kIHNvdW5kIHNlcnZlciB0ZXN0aW5nIHdpdGggbGl0dGxlCi0raHVtYW4gaW50ZXJhY3Rpb24uIEFMU0FCQVQgY2FuIGJlIHVzZWQgdG8gdGVzdCBhdWRpbyBxdWFsaXR5LCBzdHJlc3MgdGVzdAotK2ZlYXR1cmVzIGFuZCB0ZXN0IGF1ZGlvIGJlZm9yZSBhbmQgYWZ0ZXIgUE0gc3RhdGUgY2hhbmdlcy4KLSAKLS1CQVQncyBkZXNpZ24gaXMgcmVsYXRpdmVseSBzaW1wbGUuIEJBVCBwbGF5cyBhbiBhdWRpbyBzdHJlYW0gYW5kIGNhcHR1cmVzCi0tdGhlIHNhbWUgc3RyZWFtIGluIGVpdGhlciBhIGRpZ2l0YWwgb3IgYW5hbG9nIGxvb3AgYmFjay4gSXQgdGhlbiBjb21wYXJlcwotLXRoZSBjYXB0dXJlZCBzdHJlYW0gdXNpbmcgYSBGRlQgdG8gdGhlIG9yaWdpbmFsIHRvIGRldGVybWluZSBpZiB0aGUgdGVzdAotLWNhc2UgcGFzc2VzIG9yIGZhaWxzLgotK0FMU0FCQVQncyBkZXNpZ24gaXMgcmVsYXRpdmVseSBzaW1wbGUuIEFMU0FCQVQgcGxheXMgYW4gYXVkaW8gc3RyZWFtIGFuZAotK2NhcHR1cmVzIHRoZSBzYW1lIHN0cmVhbSBpbiBlaXRoZXIgYSBkaWdpdGFsIG9yIGFuYWxvZyBsb29wIGJhY2suIEl0IHRoZW4KLStjb21wYXJlcyB0aGUgY2FwdHVyZWQgc3RyZWFtIHVzaW5nIGEgRkZUIHRvIHRoZSBvcmlnaW5hbCB0byBkZXRlcm1pbmUgaWYKLSt0aGUgdGVzdCBjYXNlIHBhc3NlcyBvciBmYWlscy4KLSAKLS1CQVQgY2FuIGVpdGhlciBydW4gd2hvbGx5IG9uIHRoZSB0YXJnZXQgbWFjaGluZSBiZWluZyB0ZXN0ZWQgKHN0YW5kYWxvbmUKLS1tb2RlKSBvciBjYW4gcnVuIGFzIGEgY2xpZW50L3NlcnZlciBtb2RlIHdoZXJlIGJ5IGJhdCBjbGllbnQgcnVucyBvbiB0aGUKLStBTFNBQkFUIGNhbiBlaXRoZXIgcnVuIHdob2xseSBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUgYmVpbmcgdGVzdGVkIChzdGFuZGFsb25lCi0rbW9kZSkgb3IgY2FuIHJ1biBhcyBhIGNsaWVudC9zZXJ2ZXIgbW9kZSB3aGVyZSBieSBhbHNhYmF0IGNsaWVudCBydW5zIG9uIHRoZQotIHRhcmdldCBhbmQgcnVucyBhcyBhIHNlcnZlciBvbiBhIHNlcGFyYXRlIHRlc3RlciBtYWNoaW5lLiBUaGUgY2xpZW50L3NlcnZlcgotIG1vZGUgc3RpbGwgcmVxdWlyZXMgc29tZSBtYW51YWwgaW50ZXJhY3Rpb24gZm9yIHN5bmNocm9uaXphdGlvbiwgYnV0IHRoaXMKLSBpcyBhY3RpdmVseSBiZWluZyBkZXZlbG9wZWQgZm9yIGZ1dHVyZSByZWxlYXNlcy4KLUBAIC05Myw4ICs5Myw4IEBAIEZyZXF1ZW5jaWVzIHdpdGggYW1wbGl0dWRlIGxhcmdlciB0aGFuIHRocmVzaG9sZCB3aWxsIGJlIHJlY29nbml6ZWQgYXMgYQotIHBlYWssIGFuZCB0aGUgZnJlcXVlbmN5IHdpdGggbGFyZ2VzdCBwZWFrIHZhbHVlIHdpbGwgYmUgcmVjb2duaXplZCBhcyBhCi0gZGV0ZWN0ZWQgZnJlcXVlbmN5LgotIC5icgotLUJBVCB0aGVuIGNvbXBhcmVzIHRoZSBkZXRlY3RlZCBmcmVxdWVuY3kgdG8gdGFyZ2V0IGZyZXF1ZW5jeSwgdG8gZGVjaWRlCi0taWYgdGhlIGRldGVjdGluZyBwYXNzZXMgb3IgZmFpbHMuCi0rQUxTQUJBVCB0aGVuIGNvbXBhcmVzIHRoZSBkZXRlY3RlZCBmcmVxdWVuY3kgdG8gdGFyZ2V0IGZyZXF1ZW5jeSwgdG8KLStkZWNpZGUgaWYgdGhlIGRldGVjdGluZyBwYXNzZXMgb3IgZmFpbHMuCi0gLmJyCi0gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMy4wLgotIC5UUAotQEAgLTExNywxOCArMTE3LDE5IEBAIFRhcmdldCBXQVYgZmlsZSB0byBzYXZlIGNhcHR1cmUgdGVzdCBjb250ZW50LgotIC5UUAotIFxmSVwtXC1sb2NhbFxmUAotIEludGVybmFsIGxvb3BiYWNrIG1vZGUuCi0tUGxheWJhY2ssIGNhcHR1cmUgYW5kIGFuYWx5c2lzIGludGVybmFsIHRvIEJBVCBvbmx5LiBUaGlzIGlzIGludGVuZGVkIGZvcgotLWRldmVsb3BlcnMgdG8gdGVzdCBuZXcgQkFUIGZlYXR1cmVzIGFzIG5vIGF1ZGlvIGlzIHJvdXRlZCBvdXRzaWRlIG9mIEJBVC4KLStQbGF5YmFjaywgY2FwdHVyZSBhbmQgYW5hbHlzaXMgaW50ZXJuYWwgdG8gQUxTQUJBVCBvbmx5LiBUaGlzIGlzIGludGVuZGVkCi0rZm9yIGRldmVsb3BlcnMgdG8gdGVzdCBuZXcgQUxTQUJBVCBmZWF0dXJlcyBhcyBubyBhdWRpbyBpcyByb3V0ZWQgb3V0c2lkZQotK29mIEFMU0FCQVQuCi0gCi0gLlNIIEVYQU1QTEVTCi0gCi0gLlRQCi0tXGZCYmF0IFwtUCBwbHVnaHc6MCwwIFwtQyBwbHVnaHc6MCwwIFwtYyAyIFwtZiBTMzJfTEUgXC1GIDI1MFxmUgotK1xmQmFsc2FiYXQgXC1QIHBsdWdodzowLDAgXC1DIHBsdWdodzowLDAgXC1jIDIgXC1mIFMzMl9MRSBcLUYgMjUwXGZSCi0gR2VuZXJhdGUgYW5kIHBsYXkgYSBzaW5lIHdhdmUgb2YgMjUwIEhlcnR6IHdpdGggMiBjaGFubmVsIGFuZCBTMzJfTEUgZm9ybWF0LAotIGFuZCB0aGVuIGNhcHR1cmUgYW5kIGFuYWx5emUuCi0gCi0gLlRQCi0tXGZCYmF0IFwtUCBwbHVnaHc6MCwwIFwtQyBwbHVnaHc6MCwwIFwtXC1maWxlIDUwMEh6LndhdlxmUgotK1xmQmFsc2FiYXQgXC1QIHBsdWdodzowLDAgXC1DIHBsdWdodzowLDAgXC1cLWZpbGUgNTAwSHoud2F2XGZSCi0gUGxheSB0aGUgUklGRiBXQVYgZmlsZSAiNTAwSHoud2F2IiB3aGljaCBjb250YWlucyA1MDAgSGVydHogd2F2ZWZvcm0gTFBDTQotIGRhdGEsIGFuZCB0aGVuIGNhcHR1cmUgYW5kIGFuYWx5emUuCi0gCi1AQCAtMTUyLDcgKzE1Myw3IEBAIEN1cnJlbnRseSBvbmx5IHN1cHBvcnQgUklGRiBXQVYgZm9ybWF0IHdpdGggUENNIGRhdGEuIFBsZWFzZSByZXBvcnQgYW55IGJ1Z3MgdG8KLSB0aGUgYWxzYS1kZXZlbCBtYWlsaW5nIGxpc3QuCi0gCi0gLlNIIEFVVEhPUgotLVxmQmJhdFxmUCBpcyBieSBMaWFtIEdpcmR3b29kIDxsaWFtLnIuZ2lyZHdvb2RAbGludXguaW50ZWwuY29tPiwgQmVybmFyZCBHYXV0aWVyCi0tPGJlcm5hcmQuZ2F1dGllckBpbnRlbC5jb20+IGFuZCBIYW4gTHUgPGhhbi5sdUBpbnRlbC5jb20+LgotK1xmQmFsc2FiYXRcZlAgaXMgYnkgTGlhbSBHaXJkd29vZCA8bGlhbS5yLmdpcmR3b29kQGxpbnV4LmludGVsLmNvbT4sIEJlcm5hcmQKLStHYXV0aWVyIDxiZXJuYXJkLmdhdXRpZXJAaW50ZWwuY29tPiBhbmQgSGFuIEx1IDxoYW4ubHVAaW50ZWwuY29tPi4KLSBUaGlzIGRvY3VtZW50IGlzIGJ5IExpYW0gR2lyZHdvb2QgPGxpYW0uci5naXJkd29vZEBsaW51eC5pbnRlbC5jb20+IGFuZCBIYW4gTHUKLSA8aGFuLmx1QGludGVsLmNvbT4uCi1kaWZmIC0tZ2l0IGEvYmF0L2JhdC5jIGIvYmF0L2JhdC5jCi1pbmRleCAwODZiOWZhLi5kZGI2MGI3IDEwMDY0NAotLS0tIGEvYmF0L2JhdC5jCi0rKysgYi9iYXQvYmF0LmMKLUBAIC0yNzIsNyArMjcyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jYXB0dXJlKHN0cnVjdCBiYXQgKmJhdCkKLSBzdGF0aWMgdm9pZCB1c2FnZShzdHJ1Y3QgYmF0ICpiYXQpCi0gewotIAlmcHJpbnRmKGJhdC0+bG9nLAotLV8oIlVzYWdlOiBiYXQgWy1vcHRpb25zXS4uLlxuIgotK18oIlVzYWdlOiBhbHNhYmF0IFstb3B0aW9uc10uLi5cbiIKLSAiXG4iCi0gIiAgLWgsIC0taGVscCAgICAgICAgICAgICB0aGlzIGhlbHBcbiIKLSAiICAtRCAgICAgICAgICAgICAgICAgICAgIHBjbSBkZXZpY2UgZm9yIGJvdGggcGxheWJhY2sgYW5kIGNhcHR1cmVcbiIKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4xLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNDA0ODguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjEuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi1TVU1NQVJZID0gIkFMU0Egc291bmQgdXRpbGl0aWVzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Fsc2FjdGwvdXRpbHMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mZTk1MjZiMDU1ZTI0NmI1NTU4ODA5YTVhZTI1YzBiOSIKLURFUEVORFMgPSAiYWxzYS1saWIgbmN1cnNlcyBsaWJzYW1wbGVyYXRlMCIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gInVkZXYiCi1QQUNLQUdFQ09ORklHW2JhdF0gPSAiLS1lbmFibGUtYmF0LC0tZGlzYWJsZS1iYXQsZmZ0dyIKLVBBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPWBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kLCx1ZGV2IgotUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS1lbmFibGUteG1sdG8sIC0tZGlzYWJsZS14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvdXRpbHMvYWxzYS11dGlscy0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWFsc2FiYXQtcmVuYW1lLXRvLWF2b2lkLW5hbWluZy1jb25mbGljdC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjlkNjEwMmZiYmQwYjY4MDQwYmI3NzAyM2VkMzBjMGMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2IxYzMxMzViNzZlMTQ1MzJkM2RkMjNmYjE1NzU5ZGRkN2RhZjlmZmJjMTgzZjdhOWEwYTNhODYzNzQ3NDhmMSIKLQotIyBsYXp5IGhhY2suIG5lZWRzIHByb3BlciBmaXhpbmcgaW4gZ2V0dGV4dC5tNCwgc2VlCi0jIGh0dHA6Ly9idWdzLm9wZW5lbWJlZGRlZC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDgKLSMgcGxlYXNlIGNsb3NlIGJ1ZyBhbmQgcmVtb3ZlIHRoaXMgY29tbWVudCB3aGVuIHByb3Blcmx5IGZpeGVkCi0jCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtbmxzIgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZwotCi0jIFRoaXMgYXJlIGFsbCBwYWNrYWdlcyB0aGF0IHdlIG5lZWQgdG8gbWFrZS4gQWxzbywgdGhlIG5vdyBlbXB0eSBhbHNhLXV0aWxzCi0jIGlwayBkZXBlbmRzIG9uIHRoZW0uCi0KLUFMU0FfVVRJTFNfUEtHUyA9ICJcCi0gICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYmF0JywgJ2Fsc2EtdXRpbHMtYWxzYWJhdCcsICcnLCBkKX0gXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYW1peGVyIFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2F0cGxnIFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLW1pZGkgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXBsYXkgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYW1peGVyIFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFjb25uZWN0IFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWllY3NldCBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1zcGVha2VydGVzdCBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxbmV0IFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFkdW1wIFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FjdGwgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWxvb3AgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYXVjbSBcCi0gICAgICAgICAgICAiCi0KLVBBQ0tBR0VTICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCi1SREVQRU5EU18ke1BOfSArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgotCi1GSUxFU18ke1BOfSA9ICIiCi1GSUxFU19hbHNhLXV0aWxzLWFsc2FiYXQgICAgID0gIiR7YmluZGlyfS9hbHNhYmF0IgotRklMRVNfYWxzYS11dGlscy1hbHNhdHBsZyAgICA9ICIke2JpbmRpcn0vYWxzYXRwbGciCi1GSUxFU19hbHNhLXV0aWxzLWFwbGF5ICAgICAgID0gIiR7YmluZGlyfS9hcGxheSAke2JpbmRpcn0vYXJlY29yZCIKLUZJTEVTX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgPSAiJHtiaW5kaXJ9L2FtaXhlciIKLUZJTEVTX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgPSAiJHtiaW5kaXJ9L2Fsc2FtaXhlciIKLUZJTEVTX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgPSAiJHtiaW5kaXJ9L3NwZWFrZXItdGVzdCAke2RhdGFkaXJ9L3NvdW5kcy9hbHNhLyAke2RhdGFkaXJ9L2Fsc2Evc3BlYWtlci10ZXN0LyIKLUZJTEVTX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5bWlkaSAke2JpbmRpcn0vYXJlY29yZG1pZGkgJHtiaW5kaXJ9L2FtaWRpIgotRklMRVNfYWxzYS11dGlscy1hY29ubmVjdCAgICA9ICIke2JpbmRpcn0vYWNvbm5lY3QiCi1GSUxFU19hbHNhLXV0aWxzLWFzZXFuZXQgICAgID0gIiR7YmluZGlyfS9hc2VxbmV0IgotRklMRVNfYWxzYS11dGlscy1pZWNzZXQgICAgICA9ICIke2JpbmRpcn0vaWVjc2V0IgotRklMRVNfYWxzYS11dGlscy1hbHNhY3RsICAgICA9ICIke3NiaW5kaXJ9L2Fsc2FjdGwgKi91ZGV2L3J1bGVzLmQgKi8qL3VkZXYvcnVsZXMuZCAke3N5c3RlbWRfdW5pdGRpcn0gJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYSAke2RhdGFkaXJ9L2Fsc2EvaW5pdC8iCi1GSUxFU19hbHNhLXV0aWxzLWFzZXFkdW1wICAgID0gIiR7YmluZGlyfS9hc2VxZHVtcCIKLUZJTEVTX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgPSAiJHtiaW5kaXJ9L2Fsc2Fsb29wIgotRklMRVNfYWxzYS11dGlscy1hbHNhdWNtICAgICA9ICIke2JpbmRpcn0vYWxzYXVjbSIKLQotU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FiYXQgICAgICA9ICJDb21tYW5kLWxpbmUgc291bmQgdGVzdGVyIGZvciBBTFNBIHNvdW5kIGNhcmQgZHJpdmVyIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2F0cGxnICAgICA9ICJDb252ZXJ0cyB0b3BvbG9neSB0ZXh0IGZpbGVzIGludG8gYmluYXJ5IGZvcm1hdCBmb3Iga2VybmVsIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFwbGF5ICAgICAgICA9ICJQbGF5IChhbmQgcmVjb3JkKSBzb3VuZCBmaWxlcyB1c2luZyBBTFNBIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFtaXhlciAgICAgICA9ICJDb21tYW5kLWxpbmUgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgID0gIm5jdXJzZXMtYmFzZWQgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgID0gIkFMU0Egc3Vycm91bmQgc3BlYWtlciB0ZXN0IHV0aWxpdHkiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgID0gIk1pc2NlbGxhbmVvdXMgTUlESSB1dGlsaXRpZXMgZm9yIEFMU0EiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYWNvbm5lY3QgICAgID0gIkFMU0Egc2VxdWVuY2VyIGNvbm5lY3Rpb24gbWFuYWdlciIKLVNVTU1BUllfYWxzYS11dGlscy1hc2VxbmV0ICAgICAgPSAiTmV0d29yayBjbGllbnQvc2VydmVyIGZvciBBTFNBIHNlcXVlbmNlciIKLVNVTU1BUllfYWxzYS11dGlscy1pZWNzZXQgICAgICAgPSAiQUxTQSB1dGlsaXR5IGZvciBzZXR0aW5nL3Nob3dpbmcgSUVDOTU4IChTL1BESUYpIHN0YXR1cyBiaXRzIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FjdGwgICAgICA9ICJTYXZlcy9yZXN0b3JlcyBBTFNBLXNldHRpbmdzIGluIC9ldGMvYXNvdW5kLnN0YXRlIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFkdW1wICAgICA9ICJTaG93cyB0aGUgZXZlbnRzIHJlY2VpdmVkIGF0IGFuIEFMU0Egc2VxdWVuY2VyIHBvcnQiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgID0gIkFMU0EgUENNIGxvb3BiYWNrIHV0aWxpdHkiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYXVjbSAgICAgID0gIkFMU0EgVXNlIENhc2UgTWFuYWdlciIKLQotUlJFQ09NTUVORFNfYWxzYS11dGlscy1hbHNhY3RsID0gImFsc2Etc3RhdGVzIgotCi1BTExPV19FTVBUWV9hbHNhLXV0aWxzID0gIjEiCi0KLWRvX2luc3RhbGwoKSB7Ci0JYXV0b3Rvb2xzX2RvX2luc3RhbGwKLQotCSMgV2UgZG9uJ3Qgc2hpcCB0aGlzIGhlcmUgYmVjYXVzZSBpdCByZXF1aXJlcyBhIGRlcGVuZGVuY3kgb24gYmFzaC4KLQkjIFNlZSBhbHNhLXV0aWxzLXNjcmlwdHNfJHtQVn0uYmIKLQlybSAke0R9JHtzYmluZGlyfS9hbHNhY29uZgotCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2EtaW5mby5zaAotCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndWRldicsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCi0JICAgIyBUaGlzIGlzIHdoZXJlIGFsc2EtdXRpbHMgd2lsbCBpbnN0YWxsIGl0cyBydWxlcyBpZiB3ZSBkb24ndCB0ZWxsIGl0IGFueXRoaW5nIGVsc2UuCi0JICAgcm0gLXJmICR7RH0vbGliL3VkZXYKLQkgICBybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9L2xpYgotCWZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjJkOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjEuMi5iYgpAQCAtMCwwICsxLDEwOSBAQAorU1VNTUFSWSA9ICJBTFNBIHNvdW5kIHV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2Fsc2EtcHJvamVjdC5vcmcvbWFpbi9pbmRleC5waHAvQnVnX1RyYWNraW5nIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hbHNhY3RsL3V0aWxzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZmU5NTI2YjA1NWUyNDZiNTU1ODgwOWE1YWUyNWMwYjkiCitERVBFTkRTID0gImFsc2EtbGliIG5jdXJzZXMgbGlic2FtcGxlcmF0ZTAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ1ZGV2IgorCisjIGFsc2FiYXQgY2FuIGJlIGJ1aWx0IGFsc28gd2l0aG91dCBmZnR3IHN1cHBvcnQgKHdpdGggcmVkdWNlZCBmdW5jdGlvbmFsaXR5KS4KKyMgSXQgd291bGQgYmUgYmV0dGVyIHRvIGFsd2F5cyBlbmFibGUgYWxzYWJhdCwgYnV0IHByb3ZpZGUgYW4gb3B0aW9uIGZvcgorIyBlbmFibGluZy9kaXNhYmxpbmcgZmZ0dy4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lc24ndCBzdXBwb3J0IHRoYXQsIGhvd2V2ZXIKKyMgKGF0IGxlYXN0IGluIGFueSBvYnZpb3VzIHdheSksIHNvIGZvciBub3cgd2Ugb25seSBzdXBwb3J0IGFsc2FiYXQgd2l0aCBmZnR3CisjIG9yIG5vIGFsc2FiYXQgYXQgYWxsLgorUEFDS0FHRUNPTkZJR1tiYXRdID0gIi0tZW5hYmxlLWJhdCwtLWRpc2FibGUtYmF0LGZmdHdmIgorCitQQUNLQUdFQ09ORklHW3VkZXZdID0gIi0td2l0aC11ZGV2LXJ1bGVzLWRpcj1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAvcnVsZXMuZCwsdWRldiIKK1BBQ0tBR0VDT05GSUdbeG1sdG9dID0gIi0tZW5hYmxlLXhtbHRvLCAtLWRpc2FibGUteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3V0aWxzL2Fsc2EtdXRpbHMtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFsc2FjdGwtZG9uLXQtbGV0LXN5c3RlbWQtdW5pdC1yZXN0b3JlLXRoZS12b2x1bWUtd2gucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4YWM3Yzc4MWY4MGM0MWMwMmI0NjY0ZDhjYmFmYTg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdhZjYwM2MwODc3ZDEyNTE1OTlkNjViNGZiYzM3MmU2M2E1NDM3MWI4ODhmNWMyNmM2YTg2YWMxZDA1MTkwNzEiCisKKyMgbGF6eSBoYWNrLiBuZWVkcyBwcm9wZXIgZml4aW5nIGluIGdldHRleHQubTQsIHNlZQorIyBodHRwOi8vYnVncy5vcGVuZW1iZWRkZWQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ4CisjIHBsZWFzZSBjbG9zZSBidWcgYW5kIHJlbW92ZSB0aGlzIGNvbW1lbnQgd2hlbiBwcm9wZXJseSBmaXhlZAorIworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW5scyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIyBUaGlzIGFyZSBhbGwgcGFja2FnZXMgdGhhdCB3ZSBuZWVkIHRvIG1ha2UuIEFsc28sIHRoZSBub3cgZW1wdHkgYWxzYS11dGlscworIyBpcGsgZGVwZW5kcyBvbiB0aGVtLgorCitBTFNBX1VUSUxTX1BLR1MgPSAiXAorICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2JhdCcsICdhbHNhLXV0aWxzLWFsc2FiYXQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FtaXhlciBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhdHBsZyBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1taWRpIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFwbGF5IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFtaXhlciBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hY29ubmVjdCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1pZWNzZXQgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtc3BlYWtlcnRlc3QgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXNlcW5ldCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxZHVtcCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhY3RsIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2Fsb29wIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2F1Y20gXAorICAgICAgICAgICAgIgorCitQQUNLQUdFUyArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QUxTQV9VVElMU19QS0dTfSIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfYWxzYS11dGlscy1hbHNhYmF0ICAgICA9ICIke2JpbmRpcn0vYWxzYWJhdCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYXRwbGcgICAgPSAiJHtiaW5kaXJ9L2Fsc2F0cGxnIgorRklMRVNfYWxzYS11dGlscy1hcGxheSAgICAgICA9ICIke2JpbmRpcn0vYXBsYXkgJHtiaW5kaXJ9L2FyZWNvcmQiCitGSUxFU19hbHNhLXV0aWxzLWFtaXhlciAgICAgID0gIiR7YmluZGlyfS9hbWl4ZXIiCitGSUxFU19hbHNhLXV0aWxzLWFsc2FtaXhlciAgID0gIiR7YmluZGlyfS9hbHNhbWl4ZXIiCitGSUxFU19hbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0ID0gIiR7YmluZGlyfS9zcGVha2VyLXRlc3QgJHtkYXRhZGlyfS9zb3VuZHMvYWxzYS8gJHtkYXRhZGlyfS9hbHNhL3NwZWFrZXItdGVzdC8iCitGSUxFU19hbHNhLXV0aWxzLW1pZGkgICAgICAgID0gIiR7YmluZGlyfS9hcGxheW1pZGkgJHtiaW5kaXJ9L2FyZWNvcmRtaWRpICR7YmluZGlyfS9hbWlkaSIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWNvbm5lY3QgICAgPSAiJHtiaW5kaXJ9L2Fjb25uZWN0IgorRklMRVNfYWxzYS11dGlscy1hc2VxbmV0ICAgICA9ICIke2JpbmRpcn0vYXNlcW5ldCIKK0ZJTEVTX2Fsc2EtdXRpbHMtaWVjc2V0ICAgICAgPSAiJHtiaW5kaXJ9L2llY3NldCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYWN0bCAgICAgPSAiJHtzYmluZGlyfS9hbHNhY3RsICovdWRldi9ydWxlcy5kICovKi91ZGV2L3J1bGVzLmQgJHtzeXN0ZW1kX3VuaXRkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2EgJHtkYXRhZGlyfS9hbHNhL2luaXQvIgorRklMRVNfYWxzYS11dGlscy1hc2VxZHVtcCAgICA9ICIke2JpbmRpcn0vYXNlcWR1bXAiCitGSUxFU19hbHNhLXV0aWxzLWFsc2Fsb29wICAgID0gIiR7YmluZGlyfS9hbHNhbG9vcCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYXVjbSAgICAgPSAiJHtiaW5kaXJ9L2Fsc2F1Y20iCisKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhYmF0ICAgICAgPSAiQ29tbWFuZC1saW5lIHNvdW5kIHRlc3RlciBmb3IgQUxTQSBzb3VuZCBjYXJkIGRyaXZlciIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhdHBsZyAgICAgPSAiQ29udmVydHMgdG9wb2xvZ3kgdGV4dCBmaWxlcyBpbnRvIGJpbmFyeSBmb3JtYXQgZm9yIGtlcm5lbCIKK1NVTU1BUllfYWxzYS11dGlscy1hcGxheSAgICAgICAgPSAiUGxheSAoYW5kIHJlY29yZCkgc291bmQgZmlsZXMgdXNpbmcgQUxTQSIKK1NVTU1BUllfYWxzYS11dGlscy1hbWl4ZXIgICAgICAgPSAiQ29tbWFuZC1saW5lIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FtaXhlciAgICA9ICJuY3Vyc2VzLWJhc2VkIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgorU1VNTUFSWV9hbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0ICA9ICJBTFNBIHN1cnJvdW5kIHNwZWFrZXIgdGVzdCB1dGlsaXR5IgorU1VNTUFSWV9hbHNhLXV0aWxzLW1pZGkgICAgICAgICA9ICJNaXNjZWxsYW5lb3VzIE1JREkgdXRpbGl0aWVzIGZvciBBTFNBIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFjb25uZWN0ICAgICA9ICJBTFNBIHNlcXVlbmNlciBjb25uZWN0aW9uIG1hbmFnZXIiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcW5ldCAgICAgID0gIk5ldHdvcmsgY2xpZW50L3NlcnZlciBmb3IgQUxTQSBzZXF1ZW5jZXIiCitTVU1NQVJZX2Fsc2EtdXRpbHMtaWVjc2V0ICAgICAgID0gIkFMU0EgdXRpbGl0eSBmb3Igc2V0dGluZy9zaG93aW5nIElFQzk1OCAoUy9QRElGKSBzdGF0dXMgYml0cyIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhY3RsICAgICAgPSAiU2F2ZXMvcmVzdG9yZXMgQUxTQS1zZXR0aW5ncyBpbiAvZXRjL2Fzb3VuZC5zdGF0ZSIKK1NVTU1BUllfYWxzYS11dGlscy1hc2VxZHVtcCAgICAgPSAiU2hvd3MgdGhlIGV2ZW50cyByZWNlaXZlZCBhdCBhbiBBTFNBIHNlcXVlbmNlciBwb3J0IgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2Fsb29wICAgICA9ICJBTFNBIFBDTSBsb29wYmFjayB1dGlsaXR5IgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2F1Y20gICAgICA9ICJBTFNBIFVzZSBDYXNlIE1hbmFnZXIiCisKK1JSRUNPTU1FTkRTX2Fsc2EtdXRpbHMtYWxzYWN0bCA9ICJhbHNhLXN0YXRlcyIKKworQUxMT1dfRU1QVFlfYWxzYS11dGlscyA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIFdlIGRvbid0IHNoaXAgdGhpcyBoZXJlIGJlY2F1c2UgaXQgcmVxdWlyZXMgYSBkZXBlbmRlbmN5IG9uIGJhc2guCisJIyBTZWUgYWxzYS11dGlscy1zY3JpcHRzXyR7UFZ9LmJiCisJcm0gJHtEfSR7c2JpbmRpcn0vYWxzYWNvbmYKKwlybSAke0R9JHtzYmluZGlyfS9hbHNhLWluZm8uc2gKKwlybSAtZiAke0R9JHtzYmluZGlyfS9hbHNhYmF0LXRlc3Quc2gKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3VkZXYnLCAnZmFsc2UnLCAndHJ1ZScsIGQpfTsgdGhlbgorCQkjIFRoaXMgaXMgd2hlcmUgYWxzYS11dGlscyB3aWxsIGluc3RhbGwgaXRzIHJ1bGVzIGlmIHdlIGRvbid0IHRlbGwgaXQgYW55dGhpbmcgZWxzZS4KKwkJcm0gLXJmICR7RH0vbGliL3VkZXYKKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfS9saWIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvbWlwczY0X2NwdV9kZXRlY3Rpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9taXBzNjRfY3B1X2RldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTQyOWFmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvbWlwczY0X2NwdV9kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorSXQgd2lsbCBhZGQgLW1pcHM2NHI2IGFuZCAtbWlwczY0cjIgdG8gY21kbGluZSB3aGljaCB3aWxsCitjYXVzZSBjb25mbGljdHMKKworaW4gT0Ugd2UgdXNlciBtaXBzMzJyMiBhbmQgbWlwczY0cjIgZm9yIG1pcHMgYXJjaCB2ZXJzaW9ucworc28gdGhlcmUgaXMgbm8gYmVuZWZpdCBvZiBkZXRlY3RpbmcgaXQgYXV0b21hdGljYWxseSBieQorcG9raW5nIGF0IHRvb2xzIGVzcGVjaWFsbHkgaW4gY3Jvc3MgZW52CisKK0ZpeGVzIGVycm9ycyBsaWtlCisKK2xpbmtpbmcgLW1uYW49MjAwOCBtb2R1bGUgd2l0aCBwcmV2aW91cyAtbW5hbj1sZWdhY3kgbW9kdWxlcworZmFpbGVkIHRvIG1lcmdlIHRhcmdldCBzcGVjaWZpYyBkYXRhIG9mIGZpbGUKKworLUtoZW0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCisKK0luZGV4OiBmZm1wZWctMy4xLjEvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZmZtcGVnLTMuMS4xLm9yaWcvY29uZmlndXJlCisrKysgZmZtcGVnLTMuMS4xL2NvbmZpZ3VyZQorQEAgLTUyMjAsMTIgKzUyMjAsOSBAQCBlbGlmIGVuYWJsZWQgbWlwczsgdGhlbgorIAorICAgICAjIEVuYWJsZSBtaW5pbXVtIElTQSBiYXNlZCBvbiBzZWxlY3RlZCBvcHRpb25zCisgICAgIGlmIGVuYWJsZWQgbWlwczY0OyB0aGVuCistICAgICAgICBlbmFibGVkIG1pcHM2NHI2ICYmIGNoZWNrX2lubGluZV9hc21fZmxhZ3MgbWlwczY0cjYgJyJkbHNhICQwLCAkMCwgJDAsIDEiJyAnLW1pcHM2NHI2JworICAgICAgICAgZW5hYmxlZCBtaXBzNjRyMiAmJiBjaGVja19pbmxpbmVfYXNtX2ZsYWdzIG1pcHM2NHIyICciZGV4dCAkMCwgJDAsIDAsIDEiJyAnLW1pcHM2NHIyJworICAgICAgICAgZGlzYWJsZWQgbWlwczY0cjYgJiYgZGlzYWJsZWQgbWlwczY0cjIgJiYgY2hlY2tfaW5saW5lX2FzbV9mbGFncyBtaXBzNjRyMSAnImRhZGRpICQwLCAkMCwgMCInICctbWlwczY0JworICAgICBlbHNlCistICAgICAgICBlbmFibGVkIG1pcHMzMnI2ICYmIGNoZWNrX2lubGluZV9hc21fZmxhZ3MgbWlwczMycjYgJyJhdWkgJDAsICQwLCAwIicgJy1taXBzMzJyNicKKy0gICAgICAgIGVuYWJsZWQgbWlwczMycjUgJiYgY2hlY2tfaW5saW5lX2FzbV9mbGFncyBtaXBzMzJyNSAnImVyZXRuYyInICctbWlwczMycjUnCisgICAgICAgICBlbmFibGVkIG1pcHMzMnIyICYmIGNoZWNrX2lubGluZV9hc21fZmxhZ3MgbWlwczMycjIgJyJleHQgJDAsICQwLCAwLCAxIicgJy1taXBzMzJyMicKKyAgICAgICAgIGRpc2FibGVkIG1pcHMzMnI2ICYmIGRpc2FibGVkIG1pcHMzMnI1ICYmIGRpc2FibGVkIG1pcHMzMnIyICYmIGNoZWNrX2lubGluZV9hc21fZmxhZ3MgbWlwczMycjEgJyJhZGRpICQwLCAkMCwgMCInICctbWlwczMyJworICAgICBmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWdfMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWdfMy4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGZiYjliLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnXzMuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi1TVU1NQVJZID0gIkEgY29tcGxldGUsIGNyb3NzLXBsYXRmb3JtIHNvbHV0aW9uIHRvIHJlY29yZCwgY29udmVydCBhbmQgc3RyZWFtIGF1ZGlvIGFuZCB2aWRlby4iCi1ERVNDUklQVElPTiA9ICJGRm1wZWcgaXMgdGhlIGxlYWRpbmcgbXVsdGltZWRpYSBmcmFtZXdvcmssIGFibGUgdG8gZGVjb2RlLCBlbmNvZGUsIHRyYW5zY29kZSwgXAotICAgICAgICAgICAgICAgbXV4LCBkZW11eCwgc3RyZWFtLCBmaWx0ZXIgYW5kIHBsYXkgcHJldHR5IG11Y2ggYW55dGhpbmcgdGhhdCBodW1hbnMgYW5kIG1hY2hpbmVzIFwKLSAgICAgICAgICAgICAgIGhhdmUgY3JlYXRlZC4gSXQgc3VwcG9ydHMgdGhlIG1vc3Qgb2JzY3VyZSBhbmNpZW50IGZvcm1hdHMgdXAgdG8gdGhlIGN1dHRpbmcgZWRnZS4iCi1IT01FUEFHRSA9ICJodHRwczovL3d3dy5mZm1wZWcub3JnLyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKLQotU1JDX1VSSSA9ICJodHRwczovL3d3dy5mZm1wZWcub3JnL3JlbGVhc2VzLyR7QlB9LnRhci54eiIKLQotU1JDX1VSSVttZDVzdW1dID0gImVmOWI2NjM0YmI3YzkyMGVmYzk0MGI0ZDU1YWRmN2IyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEyZjMyY2VlNDFjNzQ0MzVmNjA4YzMwNzkzZmQ2MTZiZGY1MzQ2N2JiNTEzMjc4ZTI3M2UxMzVhNGM1OGU0NzAiCi0KLSMgQnVpbGQgZmFpbHMgd2hlbiB0aHVtYiBpcyBlbmFibGVkOiBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTcKLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi0jIFNob3VsZCBiZSBBUEkgY29tcGF0aWJsZSB3aXRoIGxpYmF2ICh3aGljaCB3YXMgYSBmb3JrIG9mIGZmbXBlZykKLSMgbGlicG9zdHByb2Mgd2FzIHByZXZpb3VzbHkgcGFja2FnZWQgZnJvbSBhIHNlcGFyYXRlIHJlY2lwZQotUFJPVklERVMgPSAibGliYXYgbGlicG9zdHByb2MiCi0KLURFUEVORFMgPSAiYWxzYS1saWIgemxpYiBsaWJvZ2cgeWFzbS1uYXRpdmUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID8/PSAiYXZkZXZpY2UgYXZmaWx0ZXIgYXZjb2RlYyBhdmZvcm1hdCBzd3Jlc2FtcGxlIHN3c2NhbGUgcG9zdHByb2MgXAotICAgICAgICAgICAgICAgICAgIGJ6bGliIGdwbCBsem1hIHRoZW9yYSB4MjY0IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEgeHYnLCAnJywgZCl9IgotCi0jIGxpYnJhcmllcyB0byBidWlsZCBpbiBhZGRpdGlvbiB0byBhdnV0aWwKLVBBQ0tBR0VDT05GSUdbYXZkZXZpY2VdID0gIi0tZW5hYmxlLWF2ZGV2aWNlLC0tZGlzYWJsZS1hdmRldmljZSIKLVBBQ0tBR0VDT05GSUdbYXZmaWx0ZXJdID0gIi0tZW5hYmxlLWF2ZmlsdGVyLC0tZGlzYWJsZS1hdmZpbHRlciIKLVBBQ0tBR0VDT05GSUdbYXZjb2RlY10gPSAiLS1lbmFibGUtYXZjb2RlYywtLWRpc2FibGUtYXZjb2RlYyIKLVBBQ0tBR0VDT05GSUdbYXZmb3JtYXRdID0gIi0tZW5hYmxlLWF2Zm9ybWF0LC0tZGlzYWJsZS1hdmZvcm1hdCIKLVBBQ0tBR0VDT05GSUdbc3dyZXNhbXBsZV0gPSAiLS1lbmFibGUtc3dyZXNhbXBsZSwtLWRpc2FibGUtc3dyZXNhbXBsZSIKLVBBQ0tBR0VDT05GSUdbc3dzY2FsZV0gPSAiLS1lbmFibGUtc3dzY2FsZSwtLWRpc2FibGUtc3dzY2FsZSIKLVBBQ0tBR0VDT05GSUdbcG9zdHByb2NdID0gIi0tZW5hYmxlLXBvc3Rwcm9jLC0tZGlzYWJsZS1wb3N0cHJvYyIKLVBBQ0tBR0VDT05GSUdbYXZyZXNhbXBsZV0gPSAiLS1lbmFibGUtYXZyZXNhbXBsZSwtLWRpc2FibGUtYXZyZXNhbXBsZSIKLQotIyBmZWF0dXJlcyB0byBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW2J6bGliXSA9ICItLWVuYWJsZS1iemxpYiwtLWRpc2FibGUtYnpsaWIsYnppcDIiCi1QQUNLQUdFQ09ORklHW2ZhYWNdID0gIi0tZW5hYmxlLWxpYmZhYWMsLS1kaXNhYmxlLWxpYmZhYWMsZmFhYyIKLVBBQ0tBR0VDT05GSUdbZ3BsXSA9ICItLWVuYWJsZS1ncGwsLS1kaXNhYmxlLWdwbCIKLVBBQ0tBR0VDT05GSUdbZ3NtXSA9ICItLWVuYWJsZS1saWJnc20sLS1kaXNhYmxlLWxpYmdzbSxsaWJnc20iCi1QQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWluZGV2PWphY2ssLS1kaXNhYmxlLWluZGV2PWphY2ssamFjayIKLVBBQ0tBR0VDT05GSUdbbGlidm9yYmlzXSA9ICItLWVuYWJsZS1saWJ2b3JiaXMsLS1kaXNhYmxlLWxpYnZvcmJpcyxsaWJ2b3JiaXMiCi1QQUNLQUdFQ09ORklHW2x6bWFdID0gIi0tZW5hYmxlLWx6bWEsLS1kaXNhYmxlLWx6bWEseHoiCi1QQUNLQUdFQ09ORklHW21wM2xhbWVdID0gIi0tZW5hYmxlLWxpYm1wM2xhbWUsLS1kaXNhYmxlLWxpYm1wM2xhbWUsbGFtZSIKLVBBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgotUEFDS0FHRUNPTkZJR1tzY2hyb2VkaW5nZXJdID0gIi0tZW5hYmxlLWxpYnNjaHJvZWRpbmdlciwtLWRpc2FibGUtbGlic2Nocm9lZGluZ2VyLHNjaHJvZWRpbmdlciIKLVBBQ0tBR0VDT05GSUdbc3BlZXhdID0gIi0tZW5hYmxlLWxpYnNwZWV4LC0tZGlzYWJsZS1saWJzcGVleCxzcGVleCIKLVBBQ0tBR0VDT05GSUdbdGhlb3JhXSA9ICItLWVuYWJsZS1saWJ0aGVvcmEsLS1kaXNhYmxlLWxpYnRoZW9yYSxsaWJ0aGVvcmEiCi1QQUNLQUdFQ09ORklHW3ZhYXBpXSA9ICItLWVuYWJsZS12YWFwaSwtLWRpc2FibGUtdmFhcGksbGlidmEiCi1QQUNLQUdFQ09ORklHW3ZweF0gPSAiLS1lbmFibGUtbGlidnB4LC0tZGlzYWJsZS1saWJ2cHgsbGlidnB4IgotUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMWdyYWIsLS1kaXNhYmxlLXgxMWdyYWIsdmlydHVhbC9saWJ4MTEgbGlieGZpeGVzIGxpYnhleHQgeHByb3RvIHZpcnR1YWwvbGlic2RsIgotUEFDS0FHRUNPTkZJR1t4MjY0XSA9ICItLWVuYWJsZS1saWJ4MjY0LC0tZGlzYWJsZS1saWJ4MjY0LHgyNjQiCi1QQUNLQUdFQ09ORklHW3h2XSA9ICItLWVuYWJsZS1vdXRkZXY9eHYsLS1kaXNhYmxlLW91dGRldj14dixsaWJ4diIKLQotIyBDaGVjayBjb2RlY3MgdGhhdCByZXF1aXJlIC0tZW5hYmxlLW5vbmZyZWUKLVVTRV9OT05GUkVFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnUEFDS0FHRUNPTkZJRycsIFsgJ2ZhYWMnLCAnb3BlbnNzbCcgXSwgJ3llcycsICcnLCBkKX0iCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0tZGlzYWJsZS1zdHJpcHBpbmcgXAotICAgIC0tZW5hYmxlLXBpYyBcCi0gICAgLS1lbmFibGUtc2hhcmVkIFwKLSAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRV9OT05GUkVFJywgJ3llcycsICctLWVuYWJsZS1ub25mcmVlJywgJycsIGQpfSBcCi0gICAgXAotICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAotICAgIFwKLSAgICAtLWxkPSIke0NDTER9IiBcCi0gICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKLSAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKLSAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKLSAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAotICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKLSAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAotICAgIC0tZW5hYmxlLWhhcmRjb2RlZC10YWJsZXMgXAotICAgICR7RVhUUkFfRkZDT05GfSBcCi0gICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKLSAgICAtLXNobGliZGlyPSR7bGliZGlyfSBcCi0gICAgLS1kYXRhZGlyPSR7ZGF0YWRpcn0vZmZtcGVnIFwKLSIKLQotZG9fY29uZmlndXJlKCkgewotICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQotfQotCi1QQUNLQUdFU19EWU5BTUlDICs9ICJebGliKGF2KGNvZGVjfGRldmljZXxmaWx0ZXJ8Zm9ybWF0fHV0aWx8cmVzYW1wbGUpfHN3c2NhbGV8c3dyZXNhbXBsZXxwb3N0cHJvYykuKiIKLQotIyBmZm1wZWcgZGlzYWJsZXMgUElDIG9uIHNvbWUgcGxhdGZvcm1zIChlLmcuIHg4Ni0zMikKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZjb2RlYyA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmRldmljZSA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmZpbHRlciA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmZvcm1hdCA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdnV0aWwgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZyZXNhbXBsZSA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJzd3NjYWxlID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYnN3cmVzYW1wbGUgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGlicG9zdHByb2MgPSAidGV4dHJlbCIKLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7Ci0gICAgYXZfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCi0gICAgYXZfcGtnY29uZmlnID0gZC5leHBhbmQoJyR7bGliZGlyfS9wa2djb25maWcnKQotCi0gICAgIyBSdW50aW1lIHBhY2thZ2UKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc29cLi4qJywKLSAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMnLAotICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBsaWJyYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnLAotICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQotCi0gICAgIyBEZXZlbG9wbWVudCBwYWNrYWdlcyAoLWRldiwgLXN0YXRpY2RldikKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc28kJywKLSAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKLSAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKLSAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9wa2djb25maWcsICdebGliKC4qKVwucGMkJywKLSAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKLSAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKLSAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUpCi0gICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLmEkJywKLSAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtc3RhdGljZGV2JywKLSAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZSAtIHN0YXRpYyBsaWJyYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAotICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQotCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnXzMuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MGYxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjEuMy5iYgpAQCAtMCwwICsxLDE0MiBAQAorU1VNTUFSWSA9ICJBIGNvbXBsZXRlLCBjcm9zcy1wbGF0Zm9ybSBzb2x1dGlvbiB0byByZWNvcmQsIGNvbnZlcnQgYW5kIHN0cmVhbSBhdWRpbyBhbmQgdmlkZW8uIgorREVTQ1JJUFRJT04gPSAiRkZtcGVnIGlzIHRoZSBsZWFkaW5nIG11bHRpbWVkaWEgZnJhbWV3b3JrLCBhYmxlIHRvIGRlY29kZSwgZW5jb2RlLCB0cmFuc2NvZGUsIFwKKyAgICAgICAgICAgICAgIG11eCwgZGVtdXgsIHN0cmVhbSwgZmlsdGVyIGFuZCBwbGF5IHByZXR0eSBtdWNoIGFueXRoaW5nIHRoYXQgaHVtYW5zIGFuZCBtYWNoaW5lcyBcCisgICAgICAgICAgICAgICBoYXZlIGNyZWF0ZWQuIEl0IHN1cHBvcnRzIHRoZSBtb3N0IG9ic2N1cmUgYW5jaWVudCBmb3JtYXRzIHVwIHRvIHRoZSBjdXR0aW5nIGVkZ2UuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZmZtcGVnLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly93d3cuZmZtcGVnLm9yZy9yZWxlYXNlcy8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbWlwczY0X2NwdV9kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3Mjc2OTMxNmE0YjJiODgwOWM3ZjZkNWE4YjY3NjZmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmODU3NWMwNzFlMmE2NDQzN2FlYjcwYzhjMDMwYjM4NWNkZGJlMGI1Y2RlMjBjOWIxOGE2ZGVmODQwMTI4ODIyIgorCisjIEJ1aWxkIGZhaWxzIHdoZW4gdGh1bWIgaXMgZW5hYmxlZDogaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE3CitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworIyBTaG91bGQgYmUgQVBJIGNvbXBhdGlibGUgd2l0aCBsaWJhdiAod2hpY2ggd2FzIGEgZm9yayBvZiBmZm1wZWcpCisjIGxpYnBvc3Rwcm9jIHdhcyBwcmV2aW91c2x5IHBhY2thZ2VkIGZyb20gYSBzZXBhcmF0ZSByZWNpcGUKK1BST1ZJREVTID0gImxpYmF2IGxpYnBvc3Rwcm9jIgorCitERVBFTkRTID0gImFsc2EtbGliIHpsaWIgbGlib2dnIHlhc20tbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gImF2ZGV2aWNlIGF2ZmlsdGVyIGF2Y29kZWMgYXZmb3JtYXQgc3dyZXNhbXBsZSBzd3NjYWxlIHBvc3Rwcm9jIFwKKyAgICAgICAgICAgICAgICAgICBiemxpYiBncGwgbHptYSB0aGVvcmEgeDI2NCBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExIHh2JywgJycsIGQpfSIKKworIyBsaWJyYXJpZXMgdG8gYnVpbGQgaW4gYWRkaXRpb24gdG8gYXZ1dGlsCitQQUNLQUdFQ09ORklHW2F2ZGV2aWNlXSA9ICItLWVuYWJsZS1hdmRldmljZSwtLWRpc2FibGUtYXZkZXZpY2UiCitQQUNLQUdFQ09ORklHW2F2ZmlsdGVyXSA9ICItLWVuYWJsZS1hdmZpbHRlciwtLWRpc2FibGUtYXZmaWx0ZXIiCitQQUNLQUdFQ09ORklHW2F2Y29kZWNdID0gIi0tZW5hYmxlLWF2Y29kZWMsLS1kaXNhYmxlLWF2Y29kZWMiCitQQUNLQUdFQ09ORklHW2F2Zm9ybWF0XSA9ICItLWVuYWJsZS1hdmZvcm1hdCwtLWRpc2FibGUtYXZmb3JtYXQiCitQQUNLQUdFQ09ORklHW3N3cmVzYW1wbGVdID0gIi0tZW5hYmxlLXN3cmVzYW1wbGUsLS1kaXNhYmxlLXN3cmVzYW1wbGUiCitQQUNLQUdFQ09ORklHW3N3c2NhbGVdID0gIi0tZW5hYmxlLXN3c2NhbGUsLS1kaXNhYmxlLXN3c2NhbGUiCitQQUNLQUdFQ09ORklHW3Bvc3Rwcm9jXSA9ICItLWVuYWJsZS1wb3N0cHJvYywtLWRpc2FibGUtcG9zdHByb2MiCitQQUNLQUdFQ09ORklHW2F2cmVzYW1wbGVdID0gIi0tZW5hYmxlLWF2cmVzYW1wbGUsLS1kaXNhYmxlLWF2cmVzYW1wbGUiCisKKyMgZmVhdHVyZXMgdG8gc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tiemxpYl0gPSAiLS1lbmFibGUtYnpsaWIsLS1kaXNhYmxlLWJ6bGliLGJ6aXAyIgorUEFDS0FHRUNPTkZJR1tmYWFjXSA9ICItLWVuYWJsZS1saWJmYWFjLC0tZGlzYWJsZS1saWJmYWFjLGZhYWMiCitQQUNLQUdFQ09ORklHW2dwbF0gPSAiLS1lbmFibGUtZ3BsLC0tZGlzYWJsZS1ncGwiCitQQUNLQUdFQ09ORklHW2dzbV0gPSAiLS1lbmFibGUtbGliZ3NtLC0tZGlzYWJsZS1saWJnc20sbGliZ3NtIgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1pbmRldj1qYWNrLC0tZGlzYWJsZS1pbmRldj1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW2xpYnZvcmJpc10gPSAiLS1lbmFibGUtbGlidm9yYmlzLC0tZGlzYWJsZS1saWJ2b3JiaXMsbGlidm9yYmlzIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1sem1hLC0tZGlzYWJsZS1sem1hLHh6IgorUEFDS0FHRUNPTkZJR1ttcDNsYW1lXSA9ICItLWVuYWJsZS1saWJtcDNsYW1lLC0tZGlzYWJsZS1saWJtcDNsYW1lLGxhbWUiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbc2Nocm9lZGluZ2VyXSA9ICItLWVuYWJsZS1saWJzY2hyb2VkaW5nZXIsLS1kaXNhYmxlLWxpYnNjaHJvZWRpbmdlcixzY2hyb2VkaW5nZXIiCitQQUNLQUdFQ09ORklHW3NwZWV4XSA9ICItLWVuYWJsZS1saWJzcGVleCwtLWRpc2FibGUtbGlic3BlZXgsc3BlZXgiCitQQUNLQUdFQ09ORklHW3RoZW9yYV0gPSAiLS1lbmFibGUtbGlidGhlb3JhLC0tZGlzYWJsZS1saWJ0aGVvcmEsbGlidGhlb3JhIgorUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGksLS1kaXNhYmxlLXZhYXBpLGxpYnZhIgorUEFDS0FHRUNPTkZJR1t2cHhdID0gIi0tZW5hYmxlLWxpYnZweCwtLWRpc2FibGUtbGlidnB4LGxpYnZweCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTFncmFiLC0tZGlzYWJsZS14MTFncmFiLHZpcnR1YWwvbGlieDExIGxpYnhmaXhlcyBsaWJ4ZXh0IHhwcm90byB2aXJ0dWFsL2xpYnNkbCIKK1BBQ0tBR0VDT05GSUdbeDI2NF0gPSAiLS1lbmFibGUtbGlieDI2NCwtLWRpc2FibGUtbGlieDI2NCx4MjY0IgorUEFDS0FHRUNPTkZJR1t4dl0gPSAiLS1lbmFibGUtb3V0ZGV2PXh2LC0tZGlzYWJsZS1vdXRkZXY9eHYsbGlieHYiCisKKyMgQ2hlY2sgY29kZWNzIHRoYXQgcmVxdWlyZSAtLWVuYWJsZS1ub25mcmVlCitVU0VfTk9ORlJFRSA9ICIke0BiYi51dGlscy5jb250YWluc19hbnkoJ1BBQ0tBR0VDT05GSUcnLCBbICdmYWFjJywgJ29wZW5zc2wnIF0sICd5ZXMnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWRpc2FibGUtc3RyaXBwaW5nIFwKKyAgICAtLWVuYWJsZS1waWMgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdVU0VfTk9ORlJFRScsICd5ZXMnLCAnLS1lbmFibGUtbm9uZnJlZScsICcnLCBkKX0gXAorICAgIFwKKyAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICBcCisgICAgLS1sZD0iJHtDQ0xEfSIgXAorICAgIC0tY2M9IiR7Q0N9IiBcCisgICAgLS1jeHg9IiR7Q1hYfSIgXAorICAgIC0tYXJjaD0ke1RBUkdFVF9BUkNIfSBcCisgICAgLS10YXJnZXQtb3M9ImxpbnV4IiBcCisgICAgLS1lbmFibGUtY3Jvc3MtY29tcGlsZSBcCisgICAgLS1leHRyYS1jZmxhZ3M9IiR7VEFSR0VUX0NGTEFHU30gJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iIFwKKyAgICAtLWV4dHJhLWxkZmxhZ3M9IiR7VEFSR0VUX0xERkxBR1N9IiBcCisgICAgLS1zeXNyb290PSIke1NUQUdJTkdfRElSX1RBUkdFVH0iIFwKKyAgICAtLWVuYWJsZS1oYXJkY29kZWQtdGFibGVzIFwKKyAgICAke0VYVFJBX0ZGQ09ORn0gXAorICAgIC0tbGliZGlyPSR7bGliZGlyfSBcCisgICAgLS1zaGxpYmRpcj0ke2xpYmRpcn0gXAorICAgIC0tZGF0YWRpcj0ke2RhdGFkaXJ9L2ZmbXBlZyBcCisiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAke1N9L2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KK30KKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpYihhdihjb2RlY3xkZXZpY2V8ZmlsdGVyfGZvcm1hdHx1dGlsfHJlc2FtcGxlKXxzd3NjYWxlfHN3cmVzYW1wbGV8cG9zdHByb2MpLioiCisKKyMgZmZtcGVnIGRpc2FibGVzIFBJQyBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiB4ODYtMzIpCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2Y29kZWMgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZkZXZpY2UgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZmaWx0ZXIgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZmb3JtYXQgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZ1dGlsID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2cmVzYW1wbGUgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGlic3dzY2FsZSA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJzd3Jlc2FtcGxlID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYnBvc3Rwcm9jID0gInRleHRyZWwiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGF2X2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGF2X3BrZ2NvbmZpZyA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGtnY29uZmlnJykKKworICAgICMgUnVudGltZSBwYWNrYWdlCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvXC4uKicsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworICAgICMgRGV2ZWxvcG1lbnQgcGFja2FnZXMgKC1kZXYsIC1zdGF0aWNkZXYpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfcGtnY29uZmlnLCAnXmxpYiguKilcLnBjJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5hJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLXN0YXRpY2RldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UgLSBzdGF0aWMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyLzAwMDEtZ3RrLXBsYXktcHJvdmlkZS1zaW1pbGFyLWJlaGF2aW91ci1mb3ItcXVpdC1hbmQtY2xvcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci8wMDAxLWd0ay1wbGF5LXByb3ZpZGUtc2ltaWxhci1iZWhhdmlvdXItZm9yLXF1aXQtYW5kLWNsb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmMWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci8wMDAxLWd0ay1wbGF5LXByb3ZpZGUtc2ltaWxhci1iZWhhdmlvdXItZm9yLXF1aXQtYW5kLWNsb3MucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSAyMjBjMjY1OWE0NWRkMzU0MjcwYTQ2NWM0NTE5Nzk3MGRhZTVmNTQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk1heGluIEIuIEpvaG4iIDxtYXhpbi5qb2huQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNSBBdWcgMjAxNiAxNzo1MjoxOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBndGstcGxheTogcHJvdmlkZSBzaW1pbGFyIGJlaGF2aW91ciBmb3IgcXVpdCBhbmQgY2xvc2UKKworSW4geDg2IHRhcmdldHMsIGd0ay1wbGF5IGp1c3QgcGF1c2UgcmF0aGVyIHRoYW4gcXVpdHRpbmcgdGhlIGFwcGxpY2F0aW9uCit3aGVuIHdlIGNsaWNrIHRoZSBjbG9zZSBidXR0b24gKGRlbGV0ZS1ldmVudCkuIENoYW5nZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KK3RvIGdldCBzaW1pbGFyIGJlaGF2aW91ciB3aGVuIHdlIGNsaWNrIG9uICJRdWl0IiBtZW51IG9wdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorCitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KKy0tLQorIGd0ay9ndGstcGxheS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggYTUyMGJlZi4uMTZhZmM2YiAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTE3Nyw3ICsxNzcsNyBAQCBsb2FkX2Zyb21fYnVpbGRlciAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgZ2Jvb2xlYW4gcmVnaXN0ZXJfc2lnX2hhbmRsZXIsCisgc3RhdGljIHZvaWQKKyBkZWxldGVfZXZlbnRfY2IgKEd0a1dpZGdldCAqIHdpZGdldCwgR2RrRXZlbnQgKiBldmVudCwgR3RrUGxheSAqIHBsYXkpCisgeworLSAgZ3N0X3BsYXllcl9zdG9wIChwbGF5LT5wbGF5ZXIpOworKyAgZ3RrX3dpZGdldF9kZXN0cm95IChHVEtfV0lER0VUIChwbGF5KSk7CisgfQorIAorIHN0YXRpYyB2b2lkCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9nc3QtcGxheWVyLmRlc2t0b3AgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wCmluZGV4IDlmZDIwN2IuLjdkZGQ0NTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9nc3QtcGxheWVyLmRlc2t0b3AKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcApAQCAtMSw3ICsxLDcgQEAKIFtEZXNrdG9wIEVudHJ5XQogTmFtZT1NZWRpYSBQbGF5ZXIKIENvbW1lbnQ9QmFzaWMgbWVkaWEgcGxheWVyCi1JY29uPWF1ZGlvLXBsYXllcgorSWNvbj1tdWx0aW1lZGlhLXBsYXllcgogVHJ5RXhlYz1ndGstcGxheQogRXhlYz1ndGstcGxheQogU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9ndGsyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2QxOGJiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9ndGsyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotQXMgdGhlIHJlc3Qgb2YgU2F0byBpcyBHVEsrIDIsIHBhdGNoIGd0ay1wbGF5IHRvIHVzZSBHVEsrIDIuICBXaGVuIHRoZSByZXN0IG9mCi1TYXRvIGhhcyBiZWVuIHBvcnRlZCB0byBHVEsrIDMgdGhpcyBwYXRjaCBjYW4gYmUgZHJvcHBlZC4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGI4YWYxM2IuLjkwYWI3NGMgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTYwLDcgKzYwLDcgQEAgQUNfU1VCU1QoR0xJQl9QUkVGSVgpCi0gR1NUX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdzdHJlYW1lci0xLjBgIgotIEFDX1NVQlNUKEdTVF9QUkVGSVgpCi0gCi0tUEtHX0NIRUNLX01PRFVMRVMoR1RLLCBbZ3RrKy0zLjBdLCBbaGF2ZV9ndGs9InllcyJdLCBbaGF2ZV9ndGs9Im5vIl0pCi0rUEtHX0NIRUNLX01PRFVMRVMoR1RLLCBbZ3RrKy0yLjBdLCBbaGF2ZV9ndGs9InllcyJdLCBbaGF2ZV9ndGs9Im5vIl0pCi0gQU1fQ09ORElUSU9OQUwoSEFWRV9HVEssIHRlc3QgIngkaGF2ZV9ndGsiICE9ICJ4bm8iKQotIAotIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDSyhbMS4zMS4xXSkKLWRpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCi1pbmRleCBmMDE1MDc3Li45NTRkNmZiIDEwMDY0NAotLS0tIGEvZ3RrL2d0ay1wbGF5LmMKLSsrKyBiL2d0ay9ndGstcGxheS5jCi1AQCAtMzQsNiArMzQsNDYgQEAgdHlwZWRlZiBzdHJ1Y3QKLSAgIGd1bG9uZyBzZWVrYmFyX3ZhbHVlX2NoYW5nZWRfc2lnbmFsX2lkOwotIH0gR3RrUGxheTsKLSAKLSsvKiBDb21wYXQgc3R1YnMgKi8KLStHdGtXaWRnZXQgKgotK2d0a19ib3hfbmV3IChHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKLSsgICAgICAgICAgICAgZ2ludCBzcGFjaW5nKQotK3sKLSsgIHN3aXRjaCAob3JpZW50YXRpb24pIHsKLSsgIGNhc2UgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw6Ci0rICAgIHJldHVybiBndGtfaGJveF9uZXcgKEZBTFNFLCBzcGFjaW5nKTsKLSsgIGNhc2UgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOgotKyAgICByZXR1cm4gZ3RrX3Zib3hfbmV3IChGQUxTRSwgc3BhY2luZyk7Ci0rICB9Ci0rfQotKwotK0d0a1dpZGdldCoKLStndGtfYnV0dG9uX25ld19mcm9tX2ljb25fbmFtZSAoY29uc3QgZ2NoYXIgKmljb25fbmFtZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrSWNvblNpemUgIHNpemUpCi0rewotKyAgR3RrV2lkZ2V0ICpidXR0b247Ci0rICBHdGtXaWRnZXQgKmltYWdlOwotKwotKyAgaW1hZ2UgPSBndGtfaW1hZ2VfbmV3X2Zyb21faWNvbl9uYW1lIChpY29uX25hbWUsIHNpemUpOwotKyAgYnV0dG9uID0gIGdfb2JqZWN0X25ldyAoR1RLX1RZUEVfQlVUVE9OLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW1hZ2UiLCBpbWFnZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0rICByZXR1cm4gYnV0dG9uOwotK30KLSsKLStHdGtXaWRnZXQgKgotK2d0a19zY2FsZV9uZXdfd2l0aF9yYW5nZSAoR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIG1pbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgbWF4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzdGVwKQotK3sKLSsgIHN3aXRjaCAob3JpZW50YXRpb24pIHsKLSsgIGNhc2UgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw6Ci0rICAgIHJldHVybiBndGtfaHNjYWxlX25ld193aXRoX3JhbmdlIChtaW4sIG1heCwgc3RlcCk7Ci0rICBjYXNlIEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDoKLSsgICAgcmV0dXJuIGd0a192c2NhbGVfbmV3X3dpdGhfcmFuZ2UgKG1pbiwgbWF4LCBzdGVwKTsKLSsgIH0KLSt9Ci0gCi0gc3RhdGljIHZvaWQKLSBzZXRfdGl0bGUgKEd0a1BsYXkgKiBwbGF5LCBjb25zdCBnY2hhciAqIHRpdGxlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllcl9naXQuYmIKaW5kZXggODEyOTE2OS4uMmE0YzlkYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCkBAIC0xLDM5ICsxLDM3IEBACiBTVU1NQVJZID0gIkdTdHJlYW1lciBwbGF5YmFjayBoZWxwZXIgbGlicmFyeSBhbmQgZXhhbXBsZXMiCiBMSUNFTlNFID0gIkxHUEwtMi4wKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTk7bWQ1PTAzYWVjYTlkODI5NWY4MTE4MTc5MDkwNzVhMTVmZjY1IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ3RrL2d0ay1wbGF5LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZjhjNzJkYWUzZDM2ODIzZWM3MTZhOWViY2FlNTkzYjkiCiAKLURFUEVORFMgPSAiZ2xpYi0yLjAgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3RrKyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIGd0ayszIgogCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vc2Ryb2VnZS9nc3QtcGxheWVyLmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly9maWxlY2hvb3Nlci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ndGsyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0ZpeC1wYXVzZS1wbGF5LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maWxlY2hvb3Nlci5wYXRjaDthcHBseT0wIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1wYXVzZS1wbGF5LnBhdGNoO2FwcGx5PTAgXAorICAgICAgICAgICBmaWxlOi8vQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoO2FwcGx5PTAgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ndGstcGxheS1wcm92aWRlLXNpbWlsYXItYmVoYXZpb3VyLWZvci1xdWl0LWFuZC1jbG9zLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2dzdC1wbGF5ZXIuZGVza3RvcCIKIAotU1JDUkVWID0gIjUzODZjNWI5ODRkNDBlZjU0MzQ2NzNlZDYyMjA0ZTY5YWFmNTI2NDUiCitTUkNSRVYgPSAiZWE5MGU2M2MxMDY0NTAzZjliYTVkNTlhYTRjYTYwNGYxM2NhNWRlZiIKK1BWID0gIjAuMC4xK2dpdCR7U1JDUFZ9IgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCi1pbmhlcml0IGF1dG90b29scyBndGstZG9jIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgZ29iamVjdC1pbnRyb3NwZWN0aW9uCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCiAKLUFOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEsyRElTVFJPRkVBVFVSRVN9IgorQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzNESVNUUk9GRUFUVVJFU30iCiAKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewogCXRvdWNoICR7U30vQ2hhbmdlTG9nCiB9CiAKLUVYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9WQUxHUklORD1ubyBhY19jdl9wYXRoX0dEQj1ubyIKLQogZG9faW5zdGFsbF9hcHBlbmQoKSB7CiAJaW5zdGFsbCAtbSAwNjQ0IC1EICR7V09SS0RJUn0vZ3N0LXBsYXllci5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9nc3QtcGxheWVyLmRlc2t0b3AKIH0KIAotRklMRVNfJHtQTn0tYmluICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmRlc2t0b3AiCi0KLVJERVBFTkRTXyR7UE59LWJpbiA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXBsYXliYWNrIgotUlJFQ09NTUVORFNfJHtQTn0tYmluID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtbWV0YSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1tZXRhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQtbWV0YSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLWxpYmF2IiwgIiIsIGQpfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS1tZXRhIiwgIiIsIGQpfSIKK1JERVBFTkRTXyR7UE59ID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtcGxheWJhY2siCitSUkVDT01NRU5EU18ke1BOfSA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLW1ldGEgXAorICAgICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTElDRU5TRV9GTEFHU19XSElURUxJU1QiLCAiY29tbWVyY2lhbCIsICJnc3RyZWFtZXIxLjAtbGliYXYiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCIsICJjb21tZXJjaWFsIiwgImdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHktbWV0YSIsICIiLCBkKX0iCitSUFJPVklERVNfJHtQTn0gKz0gIiR7UE59LWJpbiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwppbmRleCAzNjMxMDFlLi5lYTAxMTYzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jCkBAIC03LDcgKzcsNyBAQAogCiBERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIHpsaWIgYnppcDIgeHoiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ3RrLWRvYwogCiAjIENBVVRJT046IFVzaW5nIHRoZSBzeXN0ZW0gbGliYXYgaXMgbm90IHJlY29tbWVuZGVkLiBTaW5jZSB0aGUgbGliYXYgQVBJIGlzIGNoYW5naW5nIGFsbCB0aGUgdGltZSwKICMgY29tcGlsYXRpb24gZXJyb3JzIChhbmQgb3RoZXIsIG1vcmUgc3VidGxlIGJ1Z3MpIGNhbiBoYXBwZW4uIEl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIHJlbHkgb24gdGhlCkBAIC0xOCw2ICsxOCw3IEBACiBQQUNLQUdFQ09ORklHW2xpYmF2XSA9ICItLXdpdGgtc3lzdGVtLWxpYmF2LCxsaWJhdiIKIFBBQ0tBR0VDT05GSUdbb3JjXSA9ICItLWVuYWJsZS1vcmMsLS1kaXNhYmxlLW9yYyxvcmMiCiBQQUNLQUdFQ09ORklHW3lhc21dID0gIi0tZW5hYmxlLXlhc20sLS1kaXNhYmxlLXlhc20seWFzbS1uYXRpdmUiCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLWVuYWJsZS12YWxncmluZCwtLWRpc2FibGUtdmFsZ3JpbmQsdmFsZ3JpbmQiCiAKIEdTVFJFQU1FUl8xXzBfREVCVUcgPz0gIi0tZGlzYWJsZS1kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjYuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3MjMwYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjYuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLWluY2x1ZGUgZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXh0L2xpYmF2L2dzdGF2Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9YTc1MmMzNTI2N2Q4Mjc2ZmQ5Y2EzZGI2OTk0ZmNhOWMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKLQotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtbGliYXYvZ3N0LWxpYmF2LSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovLzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaCBcCi0gICAgZmlsZTovL3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImNmZTlhMDY5MTNkNGZkNDA2N2U5ZTQ3ZjZlMDVmYWMyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg1N2I5YzA2MGEwMzM3ZGUzOGM2ZDI2MjM4YzQ3MzUyNDMzYzAyZWFiZjI2YzJmODYwYzg1NGRiYzM1YmQ0YWIiCi0KLVMgPSAiJHtXT1JLRElSfS9nc3QtbGliYXYtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjguMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODYyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjguMy5iYgpAQCAtMCwwICsxLDIwIEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1saWJhdi5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V4dC9saWJhdi9nc3Rhdi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PWE3NTJjMzUyNjdkODI3NmZkOWNhM2RiNjk5NGZjYTljIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LWxpYmF2L2dzdC1saWJhdi0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggXAorICAgIGZpbGU6Ly93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNTFhNzM2MTQ3YmFjYjQwZjg1ODI3YTRlMGFlMGQyYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MDA2YTA1OTkwMDg5ZjcxNTVlZTBlODQ4MDQyZjZiYjI0ZTUyYWIxZDBhNTlmZjhkMWI1ZDdlMzMwMDFhNDk1IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LWxpYmF2LSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfZ2l0LmJiCmluZGV4IGViYzhhNWUuLmY0NjA0YTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKQEAgLTE1LDIwICsxNSwyMCBAQAogIyBhbmQgcmVtb3ZlIHRoZSBmZm1wZWcgc291cmNlcyBmcm9tIFNSQ19VUkkgYmVsb3cuIEhvd2V2ZXIsIGZpcnN0IG5vdGUgdGhlCiAjIHdhcm5pbmdzIGluIGdzdHJlYW1lcjEuMC1saWJhdi5pbmMKIFNSQ19VUkkgPSAiIFwKLSAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LWxpYmF2O25hbWU9YmFzZSBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1saWJhdjticmFuY2g9MS44O25hbWU9YmFzZSBcCiAgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247bmFtZT1jb21tb24gXAogICAgIGdpdDovL3NvdXJjZS5mZm1wZWcub3JnL2ZmbXBlZztkZXN0c3VmZml4PWdpdC9nc3QtbGlicy9leHQvbGliYXY7bmFtZT1mZm1wZWc7YnJhbmNoPXJlbGVhc2UvMy4wIFwKICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoIFwKICAgICBmaWxlOi8vd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2ggXAogIgogCi1QViA9ICIxLjcuMitnaXQke1NSQ1BWfSIKK1BWID0gIjEuOC4yK2dpdCR7U1JDUFZ9IgogCiBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKIAotU1JDUkVWX2Jhc2UgPSAiNmM0ODc4YjZhYmM5MTZiN2Y2ZjI1Yjg5MjZjNDg1OTExOWFjZjFlYyIKLVNSQ1JFVl9jb21tb24gPSAiYjY0ZjAzZjYwOTAyNDU2MjQ2MDhiZWI1ZDJmZmYzMzVlMjNhMDFjMCIKLVNSQ1JFVl9mZm1wZWcgPSAiYzQwOTgzYTZmNjMxZDIyZmVkZTcxM2Q1MzViYjljMzFkNWM5NzQwYyIKK1NSQ1JFVl9iYXNlID0gImYyODVjZjBmZDc5OWNjM2I0NmI1Y2VjYWFhNDM5ZDVhMmEzOGE5YjciCitTUkNSRVZfY29tbW9uID0gImYzNjNiMzIwNTY1OGEzOGU4NGZhNzdmMTlkZWUyMThjZDQ0NDUyNzUiCitTUkNSRVZfZmZtcGVnID0gImM2NmY0ZDFhZTY0ZGZmYWY0NTZkMDVjYmRhZGUwMjA1NDQ0NmY0OTkiCiBTUkNSRVZfRk9STUFUID0gImJhc2UiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYwppbmRleCAwZmZmNjEyLi4wN2U1YjdkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMKQEAgLTcsMTEgKzcsMTAgQEAKIAogREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0Citpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstZG9jIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgogCiBhY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCiAKLVBSID0gInIxIgogCiBHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVQgPz0gImJlbGxhZ2lvIgogR1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FID89ICIke2xpYmRpcn0vbGlib214aWwtYmVsbGFnaW8uc28uMCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwppbmRleCA5ZTJiOTRlLi4wZmU1NTY0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgJHtQQUNLQUdFQ09ORklHX0dMfSBcCiAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCBlZ2wnLCAnJywgZCl9IFwKICAgICBiejIgY3VybCBkYXNoIGR0bHMgaGxzIG5lb24gcnN2ZyBzYmMgc21vb3Roc3RyZWFtaW5nIHNuZGZpbGUgdXZjaDI2NCB3ZWJwIFwKICIKIApAQCAtMzIsMTMgKzMyLDE2IEBACiBQQUNLQUdFQ09ORklHW2Rhc2hdICAgICAgICAgICAgPSAiLS1lbmFibGUtZGFzaCwtLWRpc2FibGUtZGFzaCxsaWJ4bWwyIgogUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gICAgICAgID0gIi0tZW5hYmxlLWRpcmVjdGZiLC0tZGlzYWJsZS1kaXJlY3RmYixkaXJlY3RmYiIKIFBBQ0tBR0VDT05GSUdbZHRsc10gICAgICAgICAgICA9ICItLWVuYWJsZS1kdGxzLC0tZGlzYWJsZS1kdGxzLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW2VnbF0gICAgICAgICAgICAgPSAiLS1lbmFibGUtZWdsLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCiBQQUNLQUdFQ09ORklHW2ZhYWNdICAgICAgICAgICAgPSAiLS1lbmFibGUtZmFhYywtLWRpc2FibGUtZmFhYyxmYWFjIgogUEFDS0FHRUNPTkZJR1tmYWFkXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWZhYWQsLS1kaXNhYmxlLWZhYWQsZmFhZDIiCiBQQUNLQUdFQ09ORklHW2ZsaXRlXSAgICAgICAgICAgPSAiLS1lbmFibGUtZmxpdGUsLS1kaXNhYmxlLWZsaXRlLGZsaXRlLWFsc2EiCiBQQUNLQUdFQ09ORklHW2ZsdWlkc3ludGhdICAgICAgPSAiLS1lbmFibGUtZmx1aWRzeW50aCwtLWRpc2FibGUtZmx1aWRzeW50aCxmbHVpZHN5bnRoIgogUEFDS0FHRUNPTkZJR1tnbGVzMl0gICAgICAgICAgID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMix2aXJ0dWFsL2xpYmdsZXMyIgogUEFDS0FHRUNPTkZJR1tndGtdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWd0azMsLS1kaXNhYmxlLWd0azMsZ3RrKzMiCi1QQUNLQUdFQ09ORklHW2hsc10gICAgICAgICAgICAgPSAiLS1lbmFibGUtaGxzLC0tZGlzYWJsZS1obHMsbmV0dGxlIgorIyBlbnN1cmUgT3BlblNTTCBpcyB1c2VkIGZvciBITFMgQUVTIGRlc2NyaXB0aW9uIGluc3RlYWQgb2YgbmV0dGxlCisjIChPcGVuU1NMIGlzIGEgc2hhcmVkIGRlcGVuZGVuY3kgd2l0aCBkdGxzKQorUEFDS0FHRUNPTkZJR1tobHNdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWhscyAtLXdpdGgtaGxzLWNyeXB0bz1vcGVuc3NsLC0tZGlzYWJsZS1obHMsb3BlbnNzbCIKIFBBQ0tBR0VDT05GSUdbbGlibW1zXSAgICAgICAgICA9ICItLWVuYWJsZS1saWJtbXMsLS1kaXNhYmxlLWxpYm1tcyxsaWJtbXMiCiBQQUNLQUdFQ09ORklHW2xpYnNzaDJdICAgICAgICAgPSAiLS1lbmFibGUtbGlic3NoMiwtLWRpc2FibGUtbGlic3NoMixsaWJzc2gyIgogUEFDS0FHRUNPTkZJR1ttb2RwbHVnXSAgICAgICAgID0gIi0tZW5hYmxlLW1vZHBsdWcsLS1kaXNhYmxlLW1vZHBsdWcsbGlibW9kcGx1ZyIKQEAgLTQ2LDcgKzQ5LDkgQEAKIFBBQ0tBR0VDT05GSUdbb3BlbmFsXSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuYWwsLS1kaXNhYmxlLW9wZW5hbCxvcGVuYWwtc29mdCIKIFBBQ0tBR0VDT05GSUdbb3BlbmN2XSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuY3YsLS1kaXNhYmxlLW9wZW5jdixvcGVuY3YiCiBQQUNLQUdFQ09ORklHW29wZW5nbF0gICAgICAgICAgPSAiLS1lbmFibGUtb3BlbmdsLC0tZGlzYWJsZS1vcGVuZ2wsdmlydHVhbC9saWJnbCBsaWJnbHUiCi1QQUNLQUdFQ09ORklHW29wdXNdICAgICAgICAgICAgPSAiLS1lbmFibGUtb3B1cywtLWRpc2FibGUtb3B1cyxsaWJvcHVzIgorIyB0aGUgb3B1cyBlbmNvZGVyL2RlY29kZXIgZWxlbWVudHMgYXJlIG5vdyBpbiB0aGUgLWJhc2UgcGFja2FnZSwKKyMgYnV0IHRoZSBvcHVzIHBhcnNlciByZW1haW5zIGluIC1iYWQKK1BBQ0tBR0VDT05GSUdbb3B1c3BhcnNlXSAgICAgICA9ICItLWVuYWJsZS1vcHVzLC0tZGlzYWJsZS1vcHVzLGxpYm9wdXMiCiBQQUNLQUdFQ09ORklHW3Jlc2luZHZkXSAgICAgICAgPSAiLS1lbmFibGUtcmVzaW5kdmQsLS1kaXNhYmxlLXJlc2luZHZkLGxpYmR2ZHJlYWQgbGliZHZkbmF2IgogUEFDS0FHRUNPTkZJR1tyc3ZnXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXJzdmcsLS1kaXNhYmxlLXJzdmcsbGlicnN2ZyIKIFBBQ0tBR0VDT05GSUdbcnRtcF0gICAgICAgICAgICA9ICItLWVuYWJsZS1ydG1wLC0tZGlzYWJsZS1ydG1wLHJ0bXBkdW1wIgpAQCAtNTgsMTkgKzYzLDE5IEBACiBQQUNLQUdFQ09ORklHW3V2Y2gyNjRdICAgICAgICAgPSAiLS1lbmFibGUtdXZjaDI2NCwtLWRpc2FibGUtdXZjaDI2NCxsaWJ1c2IxIGxpYmd1ZGV2IgogUEFDS0FHRUNPTkZJR1t2b2FhY2VuY10gICAgICAgID0gIi0tZW5hYmxlLXZvYWFjZW5jLC0tZGlzYWJsZS12b2FhY2VuYyx2by1hYWNlbmMiCiBQQUNLQUdFQ09ORklHW3ZvYW1yd2JlbmNdICAgICAgPSAiLS1lbmFibGUtdm9hbXJ3YmVuYywtLWRpc2FibGUtdm9hbXJ3YmVuYyx2by1hbXJ3YmVuYyIKLVBBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgICAgICA9ICItLWVuYWJsZS13YXlsYW5kIC0tZW5hYmxlLWVnbCwtLWRpc2FibGUtd2F5bGFuZCAtLWRpc2FibGUtZWdsLHdheWxhbmQgdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdICAgICAgICAgPSAiLS1lbmFibGUtd2F5bGFuZCwtLWRpc2FibGUtd2F5bGFuZCx3YXlsYW5kLW5hdGl2ZSB3YXlsYW5kIgogUEFDS0FHRUNPTkZJR1t3ZWJwXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKIAogIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm90IGJlZW4gcG9ydGVkIHRvIDEuMCAoeWV0KToKLSMgICBhcGV4c2luayBkYzEzOTQgbHYyIGxpbnN5cyBtdXNlcGFjayBuYXMgdGltaWRpdHkgdGVsZXRleHRkZWMgc2RsIHh2aWQgd2luaW5ldAotIyAgIGFjbSBnc2V0dGluZ3Mgc25kaW8gY2R4YXBhcnNlIGRjY3AgZmFjZW92ZXJsYXkgaGR2cGFyc2UgdHRhIG12ZSBudXZkZW11eAotIyAgIHBhdGNoZGV0ZWN0IHJlYWwgc2RpIHZpZGVvbWVhc3VyZSBnc2V0dGluZ3MKKyMgICBhcGV4c2luayBkYzEzOTQgbHYyIGxpbnN5cyBtdXNlcGFjayBuYXMgdGltaWRpdHkgc2RsIHh2aWQgd2luaW5ldAorIyAgIHNuZGlvIGNkeGFwYXJzZSBkY2NwIGZhY2VvdmVybGF5IGhkdnBhcnNlIHR0YSBtdmUgbnV2ZGVtdXgKKyMgICBwYXRjaGRldGVjdCBzZGkgdmlkZW9tZWFzdXJlCiAKICMgdGhlc2UgcGx1Z2lucyBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgbGlicmFyeSBpbiBPRS1jb3JlIG9yIG1ldGEtb3BlbmVtYmVkZGVkOgotIyAgIG9wZW5uaTIgd2lua3MgZGlyZWN0M2QgZGlyZWN0c291bmQgd2luc2NyZWVuY2FwCisjICAgb3Blbm5pMiB3aW5rcyBkaXJlY3QzZCBkaXJlY3Rzb3VuZCB3aW5zY3JlZW5jYXAgYWNtCiAjICAgYXBwbGVfbWVkaWEgYW5kcm9pZF9tZWRpYSBhdmMgYnMyYiBjaHJvbWFwcmludCBkYWFsYSBkdHMgZ21lIGdzbSBrYXRlIGxhZHNwYQotIyAgIGxpYmRlMjY1IG1pbWljIG1wZWcyZW5jIG1wbGV4IG9mYSBvcGVuaDI2NCBvcGVuc2xlcyBwdnIgc291bmR0b3VjaCBzcGFuZHNwCi0jICAgc3BjIHZkcGF1IHdhc2FwaSB4MjY1IHpiYXIKKyMgICBsaWJkZTI2NSBtaW1pYyBtcGVnMmVuYyBtcGxleCBudmVuYyBvZmEgb3BlbmgyNjQgb3BlbnNsZXMgcHZyIHNvdW5kdG91Y2ggc3BhbmRzcAorIyAgIHNwYyB0ZWxldGV4dGRlYyB0aW55YWxzYSB2ZHBhdSB2dWxrYW4gd2FzYXBpIHgyNjUgemJhcgogCiAjIHF0NSBzdXBwb3J0IGlzIGRpc2FibGVkLCBiZWNhdXNlIGl0IGlzIG5vdCBwcmVzZW50IGluIE9FIGNvcmUsIGFuZCByZXF1aXJlcyBtb3JlIHdvcmsgdGhhbgogIyBqdXN0IGFkZGluZyBhIHBhY2thZ2Vjb25maWcgKGl0IHJlcXVpcmVzIGFjY2VzcyB0byBtb2MsIHVpYywgcmNjLCBhbmQgcW1ha2UgcGF0aHMpLgpAQCAtODEsNiArODYsNyBAQAogICAgIC0tZW5hYmxlLWRlY2tsaW5rIFwKICAgICAtLWVuYWJsZS1kdmIgXAogICAgIC0tZW5hYmxlLWZiZGV2IFwKKyAgICAtLWVuYWJsZS1uZXRzaW0gXAogICAgIC0tZW5hYmxlLXNobSBcCiAgICAgLS1lbmFibGUtdmNkIFwKICAgICAtLWRpc2FibGUtYWNtIFwKQEAgLTEwOSw2ICsxMTUsNyBAQAogICAgIC0tZGlzYWJsZS1tcGxleCBcCiAgICAgLS1kaXNhYmxlLW11c2VwYWNrIFwKICAgICAtLWRpc2FibGUtbmFzIFwKKyAgICAtLWRpc2FibGUtbnZlbmMgXAogICAgIC0tZGlzYWJsZS1vZmEgXAogICAgIC0tZGlzYWJsZS1vcGVuZXhyIFwKICAgICAtLWRpc2FibGUtb3BlbmgyNjQgXApAQCAtMTI1LDcgKzEzMiw5IEBACiAgICAgLS1kaXNhYmxlLXNwYyBcCiAgICAgLS1kaXNhYmxlLXRlbGV0ZXh0ZGVjIFwKICAgICAtLWRpc2FibGUtdGltaWRpdHkgXAorICAgIC0tZGlzYWJsZS10aW55YWxzYSBcCiAgICAgLS1kaXNhYmxlLXZkcGF1IFwKKyAgICAtLWRpc2FibGUtdnVsa2FuIFwKICAgICAtLWRpc2FibGUtd2FzYXBpIFwKICAgICAtLWRpc2FibGUtd2lsZG1pZGkgXAogICAgIC0tZGlzYWJsZS13aW5pbmV0IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtTWFrZWZpbGUuYW0tZG9uLXQtaGFyZGNvZGUtbGlidG9vbC1uYW1lLXdoZW4tcnVubmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtTWFrZWZpbGUuYW0tZG9uLXQtaGFyZGNvZGUtbGlidG9vbC1uYW1lLXdoZW4tcnVubmluZy5wYXRjaAppbmRleCAxNTRkMzQwLi4zM2VmYzUwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLU1ha2VmaWxlLmFtLWRvbi10LWhhcmRjb2RlLWxpYnRvb2wtbmFtZS13aGVuLXJ1bm5pbmcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoCkBAIC0xNyw3ICsxNyw3IEBACiBpbmRleCBmOTY4MzU3Li43Y2MyYzdhIDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvZ2wvTWFrZWZpbGUuYW0KLUBAIC0xNDksNyArMTQ5LDcgQEAgR3N0R0wtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0Z2wtQEdTVF9BUElfVkVSU0lPTkAKK0BAIC0xNjcsNyArMTY3LDcgQEAgR3N0R0wtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0Z2wtQEdTVF9BUElfVkVSU0lPTkAKICAJCS0tbGlicmFyeT1saWJnc3RnbC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTMwLDcgKzMwLDcgQEAKIGluZGV4IDA5ZWI5N2MuLmI3NDY4ODUgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvaW5zZXJ0YmluL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvaW5zZXJ0YmluL01ha2VmaWxlLmFtCi1AQCAtNDMsNyArNDMsNyBAQCBHc3RJbnNlcnRCaW4tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0aW5zZXJ0YmluLUBHUworQEAgLTQ0LDcgKzQ0LDcgQEAgR3N0SW5zZXJ0QmluLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGluc2VydGJpbi1AR1MKICAJCS0tbGlicmFyeT1saWJnc3RpbnNlcnRiaW4tQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbGltYWdlc2luay1Eb3ducmFuay10by1tYXJnaW5hbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4NWU5NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotRnJvbSBjNmIzN2E4MDgwNmY5MTI4ZGU0N2YxY2NjM2YyMzU0ZjhkNDM2YmI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDI0IFNlcCAyMDE1IDE5OjQ3OjMyICswMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIGdsaW1hZ2VzaW5rOiBEb3ducmFuayB0byBtYXJnaW5hbAotCi1PbiBkZXNrdG9wLCB3aGVyZSB0aGVyZSBpcyBnb29kIE9wZW5HTCwgeHZpbWFnZXNpbmsgd2lsbCBjb21lIHVwIGZpcnN0LAotb24gb3RoZXIgcGxhdGZvcm1zLCBPcGVuR0wgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0J3MgZWl0aGVyIHNvZnR3YXJlIChsaWtlCi1pbiBhIFZNKSBvciBicm9rZW4gKGxpa2Ugb24gZW1iZWRkZWQpLiwgc28gbGV0IHhpbWFnZXNpbmsgY29tZSBhYm92ZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE2ODRdCi0KLVNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotLS0tCi0gZXh0L2dsL2dzdG9wZW5nbC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZXh0L2dsL2dzdG9wZW5nbC5jIGIvZXh0L2dsL2dzdG9wZW5nbC5jCi1pbmRleCBhNGIyNTQwLi4wY2NhYWNkIDEwMDY0NAotLS0tIGEvZXh0L2dsL2dzdG9wZW5nbC5jCi0rKysgYi9leHQvZ2wvZ3N0b3BlbmdsLmMKLUBAIC0xMDEsNyArMTAxLDcgQEAgcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLSAjZW5kaWYKLSAKLSAgIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdsaW1hZ2VzaW5rIiwKLS0gICAgICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBnc3RfZ2xfaW1hZ2Vfc2lua19iaW5fZ2V0X3R5cGUgKCkpKSB7Ci0rICAgICAgICAgIEdTVF9SQU5LX01BUkdJTkFMLCBnc3RfZ2xfaW1hZ2Vfc2lua19iaW5fZ2V0X3R5cGUgKCkpKSB7Ci0gICAgIHJldHVybiBGQUxTRTsKLSAgIH0KLSAKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMi1nbHBsdWdpbi1lbmFibGUtZ2xkZWludGVybGFjZS1vbi1PcGVuR0wtRVMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAyLWdscGx1Z2luLWVuYWJsZS1nbGRlaW50ZXJsYWNlLW9uLU9wZW5HTC1FUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MWY0ZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMi1nbHBsdWdpbi1lbmFibGUtZ2xkZWludGVybGFjZS1vbi1PcGVuR0wtRVMucGF0Y2gKQEAgLTAsMCArMSw2MzQgQEAKK0Zyb20gOGEwZTk3ZjdlNjcyMzAxY2M3NmUzOTQ4NTVlOGM3YTM0NDhiMDI0OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhhaWh1YSBIdSA8amFyZWQuaHVAbnhwLmNvbT4KK0RhdGU6IEZyaSwgOCBBcHIgMjAxNiAxNjo0NzoxNSArMDgwMAorU3ViamVjdDogW1BBVENIIDQvNl0gW2dscGx1Z2luXSBlbmFibGUgZ2xkZWludGVybGFjZSBvbiBPcGVuR0wgRVMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworMS5Qb3J0aW5nIHRoZSBleGlzdCBkZWludGVybGFjZSBzaGFkZXIgYW5kIE9wZW5HTCBjYWxsYmFjaworICB0byBiZSBjb21wYXRpYmxlIHdpdGggT3BlbkdMIEVTLgorMi5BZGQgYSBvdXIgYmx1ciB2ZXJ0aWNhbCBzaGFkZXIgdG8gZ2xkZWludGVybGFjZS4KKzMuQWRkIGEgcHJvcGVydHkgbmFtZWQg4oCcbWV0aG9k4oCdIHRvIGxldCB1c2VyIGNob29zZSB3aGljaAorICBkZWludGVybGFjZSBmdW5jdGlvbiB0byB1c2UuIERlZmF1bHQgdG8gY2hvb3NlIGJsdXIgdmVydGljYWwKKyAgbWV0aG9kIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuOS4xXQorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0ODczCisKK1NpZ25lZC1vZmYtYnk6IEhhaWh1YSBIdSA8amFyZWQuaHVAbnhwLmNvbT4KKy0tLQorIGV4dC9nbC9NYWtlZmlsZS5hbSAgICAgICAgfCAgIDQgKy0KKyBleHQvZ2wvZ3N0Z2xkZWludGVybGFjZS5jIHwgMzQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyBleHQvZ2wvZ3N0Z2xkZWludGVybGFjZS5oIHwgICA2ICstCisgZXh0L2dsL2dzdG9wZW5nbC5jICAgICAgICB8ICAxMyArLQorIDQgZmlsZXMgY2hhbmdlZCwgMjc1IGluc2VydGlvbnMoKyksIDkyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0L2dsL01ha2VmaWxlLmFtIGIvZXh0L2dsL01ha2VmaWxlLmFtCitpbmRleCA1ZDU1ZjU0Li40NjQxOWE3IDEwMDY0NAorLS0tIGEvZXh0L2dsL01ha2VmaWxlLmFtCisrKysgYi9leHQvZ2wvTWFrZWZpbGUuYW0KK0BAIC00MCw2ICs0MCw3IEBAIGxpYmdzdG9wZW5nbF9sYV9TT1VSQ0VTID0gXAorIAlnc3RnbGZpbHRlcmFwcC5jIFwKKyAJZ3N0Z2x2aWV3Y29udmVydC5jIFwKKyAJZ3N0Z2xzdGVyZW9zcGxpdC5jIFwKKysJZ3N0Z2xkZWludGVybGFjZS5jIFwKKyAJZ3N0Z2xzdGVyZW9taXguYworIAorIG5vaW5zdF9IRUFERVJTID0gXAorQEAgLTYzLDIwICs2NCwxOSBAQCBub2luc3RfSEVBREVSUyA9IFwKKyAJZ3N0Z2xmaWx0ZXJhcHAuaCBcCisgCWdzdGdsc3RlcmVvc3BsaXQuaCBcCisgCWdzdGdsc3RlcmVvbWl4LmggXAorKwlnc3RnbGRlaW50ZXJsYWNlLmggXAorIAlnc3RnbHZpZXdjb252ZXJ0LmgKKyAKKyAjIGZ1bGwgb3BlbmdsIHJlcXVpcmVkCisgaWYgVVNFX09QRU5HTAorIGxpYmdzdG9wZW5nbF9sYV9TT1VSQ0VTICs9IFwKKyAJZ3N0Z2xmaWx0ZXJnbGFzcy5jIFwKKy0JZ3N0Z2xkZWludGVybGFjZS5jIFwKKyAJZ2x0ZXN0c3JjLmMgXAorIAlnc3RnbHRlc3RzcmMuYyBcCisgCWdzdGdsbW9zYWljLmMKKyAKKyBub2luc3RfSEVBREVSUyArPSBcCisgCWdzdGdsZmlsdGVyZ2xhc3MuaCBcCistCWdzdGdsZGVpbnRlcmxhY2UuaCBcCisgCWdsdGVzdHNyYy5oIFwKKyAJZ3N0Z2x0ZXN0c3JjLmggXAorIAlnc3RnbG1vc2FpYy5oIFwKK2RpZmYgLS1naXQgYS9leHQvZ2wvZ3N0Z2xkZWludGVybGFjZS5jIGIvZXh0L2dsL2dzdGdsZGVpbnRlcmxhY2UuYworaW5kZXggYmQwZWZmMC4uYzEyNTBkYyAxMDA2NDQKKy0tLSBhL2V4dC9nbC9nc3RnbGRlaW50ZXJsYWNlLmMKKysrKyBiL2V4dC9nbC9nc3RnbGRlaW50ZXJsYWNlLmMKK0BAIC00Myw3ICs0Myw4IEBAIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7CisgCisgZW51bQorIHsKKy0gIFBST1BfMAorKyAgUFJPUF8wLAorKyAgUFJPUF9NRVRIT0QKKyB9OworIAorICNkZWZpbmUgREVCVUdfSU5JVCBcCitAQCAtNTcsMTcgKzU4LDIzIEBAIHN0YXRpYyB2b2lkIGdzdF9nbF9kZWludGVybGFjZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgc3RhdGljIHZvaWQgZ3N0X2dsX2RlaW50ZXJsYWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CisgCisrc3RhdGljIGdib29sZWFuIGdzdF9nbF9kZWludGVybGFjZV9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dsX2RlaW50ZXJsYWNlX3Jlc2V0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOworLXN0YXRpYyBnYm9vbGVhbiBnc3RfZ2xfZGVpbnRlcmxhY2VfaW5pdF9zaGFkZXIgKEdzdEdMRmlsdGVyICogZmlsdGVyKTsKKytzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dsX2RlaW50ZXJsYWNlX2luaXRfZmJvIChHc3RHTEZpbHRlciAqIGZpbHRlcik7Cisgc3RhdGljIGdib29sZWFuIGdzdF9nbF9kZWludGVybGFjZV9maWx0ZXIgKEdzdEdMRmlsdGVyICogZmlsdGVyLAorICAgICBHc3RCdWZmZXIgKiBpbmJ1ZiwgR3N0QnVmZmVyICogb3V0YnVmKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dsX2RlaW50ZXJsYWNlX2ZpbHRlcl90ZXh0dXJlIChHc3RHTEZpbHRlciAqIGZpbHRlciwKKyAgICAgZ3VpbnQgaW5fdGV4LCBndWludCBvdXRfdGV4KTsKKy1zdGF0aWMgdm9pZCBnc3RfZ2xfZGVpbnRlcmxhY2VfY2FsbGJhY2sgKGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LAorK3N0YXRpYyB2b2lkIGdzdF9nbF9kZWludGVybGFjZV92ZmlyX2NhbGxiYWNrIChnaW50IHdpZHRoLCBnaW50IGhlaWdodCwKKysgICAgZ3VpbnQgdGV4dHVyZSwgZ3BvaW50ZXIgc3R1ZmYpOworK3N0YXRpYyB2b2lkIGdzdF9nbF9kZWludGVybGFjZV9ncmVlZHloX2NhbGxiYWNrIChnaW50IHdpZHRoLCBnaW50IGhlaWdodCwKKyAgICAgZ3VpbnQgdGV4dHVyZSwgZ3BvaW50ZXIgc3R1ZmYpOworIAorIC8qICpJTkRFTlQtT0ZGKiAqLworIHN0YXRpYyBjb25zdCBnY2hhciAqZ3JlZWR5aF9mcmFnbWVudF9zb3VyY2UgPQorKyAgIiNpZmRlZiBHTF9FU1xuIgorKyAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgorKyAgIiNlbmRpZlxuIgorICAgInVuaWZvcm0gc2FtcGxlcjJEIHRleDtcbiIKKyAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhfcHJldjtcbiIKKyAgICJ1bmlmb3JtIGZsb2F0IG1heF9jb21iO1xuIgorQEAgLTc1LDM1ICs4MiwzNSBAQCBzdGF0aWMgY29uc3QgZ2NoYXIgKmdyZWVkeWhfZnJhZ21lbnRfc291cmNlID0KKyAgICJ1bmlmb3JtIGZsb2F0IG1vdGlvbl9zZW5zZTtcbiIKKyAgICJ1bmlmb3JtIGZsb2F0IHdpZHRoO1xuIgorICAgInVuaWZvcm0gZmxvYXQgaGVpZ2h0O1xuIgorKyAgInZhcnlpbmcgdmVjMiB2X3RleGNvb3JkO1xuIgorIAorICAgInZvaWQgbWFpbiAoKSB7XG4iCistICAiICB2ZWMyIHRleGNvb3JkID0gZ2xfVGV4Q29vcmRbMF0ueHk7XG4iCistICAiICBpZiAoaW50KG1vZCh0ZXhjb29yZC55ICogaGVpZ2h0LCAyLjApKSA9PSAwKSB7XG4iCistICAiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4dHVyZTJEKHRleF9wcmV2LCB0ZXhjb29yZCkucmdiLCAxLjApO1xuIgorKyAgIiAgaWYgKGludChtb2Qodl90ZXhjb29yZC55ICogaGVpZ2h0LCAyLjApKSA9PSAwKSB7XG4iCisrICAiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4dHVyZTJEKHRleF9wcmV2LCB2X3RleGNvb3JkKS5yZ2IsIDEuMCk7XG4iCisgICAiICB9IGVsc2Uge1xuIgorICAgIiAgICB2ZWMyIHRleGNvb3JkX0wxX2ExLCB0ZXhjb29yZF9MM19hMSwgdGV4Y29vcmRfTDEsIHRleGNvb3JkX0wzLCB0ZXhjb29yZF9MMV8xLCB0ZXhjb29yZF9MM18xO1xuIgorICAgIiAgICB2ZWMzIEwxX2ExLCBMM19hMSwgTDEsIEwzLCBMMV8xLCBMM18xO1xuIgorIAorLSAgIiAgICB0ZXhjb29yZF9MMSA9IHZlYzIodGV4Y29vcmQueCwgdGV4Y29vcmQueSAtIDEuMCAvIGhlaWdodCk7XG4iCistICAiICAgIHRleGNvb3JkX0wzID0gdmVjMih0ZXhjb29yZC54LCB0ZXhjb29yZC55ICsgMS4wIC8gaGVpZ2h0KTtcbiIKKysgICIgICAgdGV4Y29vcmRfTDEgPSB2ZWMyKHZfdGV4Y29vcmQueCwgdl90ZXhjb29yZC55IC0gMS4wIC8gaGVpZ2h0KTtcbiIKKysgICIgICAgdGV4Y29vcmRfTDMgPSB2ZWMyKHZfdGV4Y29vcmQueCwgdl90ZXhjb29yZC55ICsgMS4wIC8gaGVpZ2h0KTtcbiIKKyAgICIgICAgTDEgPSB0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkX0wxKS5yZ2I7XG4iCisgICAiICAgIEwzID0gdGV4dHVyZTJEKHRleF9wcmV2LCB0ZXhjb29yZF9MMykucmdiO1xuIgorLSAgIiAgICBpZiAodGV4Y29vcmQueCA9PSAxLjAgJiYgdGV4Y29vcmQueSA9PSAxLjApIHtcbiIKKysgICIgICAgaWYgKHZfdGV4Y29vcmQueCA9PSAxLjAgJiYgdl90ZXhjb29yZC55ID09IDEuMCkge1xuIgorICAgIiAgICAgIEwxXzEgPSBMMTtcbiIKKyAgICIgICAgICBMM18xID0gTDM7XG4iCisgICAiICAgIH0gZWxzZSB7XG4iCistICAiICAgICAgdGV4Y29vcmRfTDFfMSA9IHZlYzIodGV4Y29vcmQueCArIDEuMCAvIHdpZHRoLCB0ZXhjb29yZC55IC0gMS4wIC8gaGVpZ2h0KTtcbiIKKy0gICIgICAgICB0ZXhjb29yZF9MM18xID0gdmVjMih0ZXhjb29yZC54ICsgMS4wIC8gd2lkdGgsIHRleGNvb3JkLnkgKyAxLjAgLyBoZWlnaHQpO1xuIgorKyAgIiAgICAgIHRleGNvb3JkX0wxXzEgPSB2ZWMyKHZfdGV4Y29vcmQueCArIDEuMCAvIHdpZHRoLCB2X3RleGNvb3JkLnkgLSAxLjAgLyBoZWlnaHQpO1xuIgorKyAgIiAgICAgIHRleGNvb3JkX0wzXzEgPSB2ZWMyKHZfdGV4Y29vcmQueCArIDEuMCAvIHdpZHRoLCB2X3RleGNvb3JkLnkgKyAxLjAgLyBoZWlnaHQpO1xuIgorICAgIiAgICAgIEwxXzEgPSB0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkX0wxXzEpLnJnYjtcbiIKKyAgICIgICAgICBMM18xID0gdGV4dHVyZTJEKHRleF9wcmV2LCB0ZXhjb29yZF9MM18xKS5yZ2I7XG4iCisgICAiICAgIH1cbiIKKyAKKy0gICIgICAgaWYgKGludChjZWlsKHRleGNvb3JkLnggKyB0ZXhjb29yZC55KSkgPT0gMCkge1xuIgorKyAgIiAgICBpZiAoaW50KGNlaWwodl90ZXhjb29yZC54ICsgdl90ZXhjb29yZC55KSkgPT0gMCkge1xuIgorICAgIiAgICAgIEwxX2ExID0gTDE7XG4iCisgICAiICAgICAgTDNfYTEgPSBMMztcbiIKKyAgICIgICAgfSBlbHNlIHtcbiIKKy0gICIgICAgICB0ZXhjb29yZF9MMV9hMSA9IHZlYzIodGV4Y29vcmQueCAtIDEuMCAvIHdpZHRoLCB0ZXhjb29yZC55IC0gMS4wIC8gaGVpZ2h0KTtcbiIKKy0gICIgICAgICB0ZXhjb29yZF9MM19hMSA9IHZlYzIodGV4Y29vcmQueCAtIDEuMCAvIHdpZHRoLCB0ZXhjb29yZC55ICsgMS4wIC8gaGVpZ2h0KTtcbiIKKysgICIgICAgICB0ZXhjb29yZF9MMV9hMSA9IHZlYzIodl90ZXhjb29yZC54IC0gMS4wIC8gd2lkdGgsIHZfdGV4Y29vcmQueSAtIDEuMCAvIGhlaWdodCk7XG4iCisrICAiICAgICAgdGV4Y29vcmRfTDNfYTEgPSB2ZWMyKHZfdGV4Y29vcmQueCAtIDEuMCAvIHdpZHRoLCB2X3RleGNvb3JkLnkgKyAxLjAgLyBoZWlnaHQpO1xuIgorICAgIiAgICAgIEwxX2ExID0gdGV4dHVyZTJEKHRleF9wcmV2LCB0ZXhjb29yZF9MMV9hMSkucmdiO1xuIgorICAgIiAgICAgIEwzX2ExID0gdGV4dHVyZTJEKHRleF9wcmV2LCB0ZXhjb29yZF9MM19hMSkucmdiO1xuIgorICAgIiAgICB9XG4iCitAQCAtMTEzLDggKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBnY2hhciAqZ3JlZWR5aF9mcmFnbWVudF9zb3VyY2UgPQorICAgIiAgICB2ZWMzIGF2Z18xID0gKEwxXzEgKyBMM18xKSAvIDIuMDtcbiIKKyAgICIgICAgdmVjMyBhdmdfcyA9IChhdmdfYTEgKyBhdmdfMSkgLyAyLjA7XG4iCisgICAiICAgIHZlYzMgYXZnX3NjID0gKGF2Z19zICsgYXZnKSAvIDIuMDtcbiIKKy0gICIgICAgdmVjMyBMMiA9IHRleHR1cmUyRCh0ZXgsIHRleGNvb3JkKS5yZ2I7XG4iCistICAiICAgIHZlYzMgTFAyID0gdGV4dHVyZTJEKHRleF9wcmV2LCB0ZXhjb29yZCkucmdiO1xuIgorKyAgIiAgICB2ZWMzIEwyID0gdGV4dHVyZTJEKHRleCwgdl90ZXhjb29yZCkucmdiO1xuIgorKyAgIiAgICB2ZWMzIExQMiA9IHRleHR1cmUyRCh0ZXhfcHJldiwgdl90ZXhjb29yZCkucmdiO1xuIgorICAgIiAgICB2ZWMzIGJlc3Q7XG4iCisgICAiICAgIGlmIChhYnMoTDIuciAtIGF2Z19zYy5yKSA8IGFicyhMUDIuciAtIGF2Z19zYy5yKSkge1xuIgorICAgIiAgICAgIGJlc3QuciA9IEwyLnI7XG4iICIgICAgfSBlbHNlIHtcbiIKK0BAIC0xNDQsOCArMTUxLDg3IEBAIHN0YXRpYyBjb25zdCBnY2hhciAqZ3JlZWR5aF9mcmFnbWVudF9zb3VyY2UgPQorICAgIiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxhc3QsIDEuMCk7XG4iCisgICAiICB9XG4iCisgICAifVxuIjsKKysKKytjb25zdCBnY2hhciAqdmZpcl9mcmFnbWVudF9zb3VyY2UgPQorKyAgIiNpZmRlZiBHTF9FU1xuIgorKyAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgorKyAgIiNlbmRpZlxuIgorKyAgInVuaWZvcm0gc2FtcGxlcjJEIHRleDtcbiIKKysgICJ1bmlmb3JtIGZsb2F0IHdpZHRoO1xuIgorKyAgInVuaWZvcm0gZmxvYXQgaGVpZ2h0O1xuIgorKyAgInZhcnlpbmcgdmVjMiB2X3RleGNvb3JkO1xuIgorKyAgInZvaWQgbWFpbigpXG4iCisrICAie1xuIgorKyAgIiAgdmVjMiB0b3Bjb29yZCwgYm90Y29vcmQ7XG4iCisrICAiICB2ZWM0IGN1cl9jb2xvciwgdG9wX2NvbG9yLCBib3RfY29sb3I7XG4iCisrICAiICB0b3Bjb29yZC54ID0gdl90ZXhjb29yZC54O1xuIgorKyAgIiAgYm90Y29vcmQueCA9IHZfdGV4Y29vcmQueDtcbiIKKysgICIgIGlmICh2X3RleGNvb3JkLnkgPT0gMC4wIHx8IHZfdGV4Y29vcmQueSA9PSAxLjApIHtcbiIKKysgICIgICAgdG9wY29vcmQueSA9IHZfdGV4Y29vcmQueSA7XG4iCisrICAiICAgIGJvdGNvb3JkLnkgPSB2X3RleGNvb3JkLnkgO1xuIgorKyAgIiAgfVxuIgorKyAgIiAgZWxzZSB7XG4iCisrICAiICAgIHRvcGNvb3JkLnkgPSB2X3RleGNvb3JkLnkgLSAxLjAvaGVpZ2h0O1xuIgorKyAgIiAgICBib3Rjb29yZC55ID0gdl90ZXhjb29yZC55ICsgMS4wL2hlaWdodDtcbiIKKysgICIgIH1cbiIKKysgICIgIGN1cl9jb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfdGV4Y29vcmQpO1xuIgorKyAgIiAgdG9wX2NvbG9yID0gdGV4dHVyZTJEKHRleCwgdG9wY29vcmQpO1xuIgorKyAgIiAgYm90X2NvbG9yID0gdGV4dHVyZTJEKHRleCwgYm90Y29vcmQpO1xuIgorKyAgIiAgZ2xfRnJhZ0NvbG9yID0gMC41KmN1cl9jb2xvciArIDAuMjUqdG9wX2NvbG9yICsgMC4yNSpib3RfY29sb3I7XG4iCisrICAifSI7CisgLyogKklOREVOVC1PTiogKi8KKyAKKysvKiBkb250JyBmb3JnZXQgdG8gZWRpdCB0aGUgZm9sbG93aW5nIHdoZW4gYSBuZXcgbWV0aG9kIGlzIGFkZGVkICovCisrdHlwZWRlZiBlbnVtCisreworKyAgR1NUX0dMX0RFSU5URVJMQUNFX1ZGSVIsCisrICBHU1RfR0xfREVJTlRFUkxBQ0VfR1JFRURZSAorK30gR3N0R0xEZWludGVybGFjZU1ldGhvZDsKKysKKytzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSAqCisrZ3N0X2dsX2RlaW50ZXJsYWNlX2dldF9tZXRob2RzICh2b2lkKQorK3sKKysgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIG1ldGhvZF90eXBlc1tdID0geworKyAgICB7R1NUX0dMX0RFSU5URVJMQUNFX1ZGSVIsICJCbHVyIFZlcnRpY2FsIiwgInZmaXIifSwKKysgICAge0dTVF9HTF9ERUlOVEVSTEFDRV9HUkVFRFlILCAiTW90aW9uIEFkYXB0aXZlOiBBZHZhbmNlZCBEZXRlY3Rpb24iLAorKyAgICAgICAgICAiZ3JlZWRoeSJ9LAorKyAgICB7MCwgTlVMTCwgTlVMTH0KKysgIH07CisrICByZXR1cm4gbWV0aG9kX3R5cGVzOworK30KKysKKysjZGVmaW5lIEdTVF9UWVBFX0dMX0RFSU5URVJMQUNFX01FVEhPRFMgKGdzdF9nbF9kZWludGVybGFjZV9tZXRob2RfZ2V0X3R5cGUgKCkpCisrc3RhdGljIEdUeXBlCisrZ3N0X2dsX2RlaW50ZXJsYWNlX21ldGhvZF9nZXRfdHlwZSAodm9pZCkKKyt7CisrICBzdGF0aWMgR1R5cGUgZ2xfZGVpbnRlcmxhY2VfbWV0aG9kX3R5cGUgPSAwOworKyAgaWYgKCFnbF9kZWludGVybGFjZV9tZXRob2RfdHlwZSkgeworKyAgICBnbF9kZWludGVybGFjZV9tZXRob2RfdHlwZSA9CisrICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0R0xEZWludGVybGFjZU1ldGhvZCIsCisrICAgICAgICBnc3RfZ2xfZGVpbnRlcmxhY2VfZ2V0X21ldGhvZHMgKCkpOworKyAgfQorKyAgcmV0dXJuIGdsX2RlaW50ZXJsYWNlX21ldGhvZF90eXBlOworK30KKysKKytzdGF0aWMgdm9pZAorK2dzdF9nbF9kZWludGVybGFjZV9zZXRfbWV0aG9kIChHc3RHTERlaW50ZXJsYWNlICogZGVpbnRlcmxhY2UsCisrICAgIGd1aW50IG1ldGhvZF90eXBlcykKKyt7CisrICBzd2l0Y2ggKG1ldGhvZF90eXBlcykgeworKyAgICBjYXNlIEdTVF9HTF9ERUlOVEVSTEFDRV9WRklSOgorKyAgICAgIGRlaW50ZXJsYWNlLT5kZWludGVybGFjZWZ1bmMgPSBnc3RfZ2xfZGVpbnRlcmxhY2VfdmZpcl9jYWxsYmFjazsKKysgICAgICBkZWludGVybGFjZS0+Y3VycmVudF9tZXRob2QgPSBtZXRob2RfdHlwZXM7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgR1NUX0dMX0RFSU5URVJMQUNFX0dSRUVEWUg6CisrICAgICAgZGVpbnRlcmxhY2UtPmRlaW50ZXJsYWNlZnVuYyA9IGdzdF9nbF9kZWludGVybGFjZV9ncmVlZHloX2NhbGxiYWNrOworKyAgICAgIGRlaW50ZXJsYWNlLT5jdXJyZW50X21ldGhvZCA9IG1ldGhvZF90eXBlczsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKysgICAgICBicmVhazsKKysgIH0KKyt9CisrCisgc3RhdGljIHZvaWQKKyBnc3RfZ2xfZGVpbnRlcmxhY2VfY2xhc3NfaW5pdCAoR3N0R0xEZWludGVybGFjZUNsYXNzICoga2xhc3MpCisgeworQEAgLTE2MywyNSArMjQ5LDYwIEBAIGdzdF9nbF9kZWludGVybGFjZV9jbGFzc19pbml0IChHc3RHTERlaW50ZXJsYWNlQ2xhc3MgKiBrbGFzcykKKyAgICAgICAiRGVpbnRlcmxhY2luZyBiYXNlZCBvbiBmcmFnbWVudCBzaGFkZXJzIiwKKyAgICAgICAiSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBtYWlsLmNvbT4iKTsKKyAKKysgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCisrICAgICAgUFJPUF9NRVRIT0QsCisrICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJtZXRob2QiLAorKyAgICAgICAgICAiRGVpbnRlcmxhY2UgTWV0aG9kIiwKKysgICAgICAgICAgIlNlbGVjdCB3aGljaCBkZWludGVybGFjZSBtZXRob2QgYXBwbHkgdG8gR0wgdmlkZW8gdGV4dHVyZSIsCisrICAgICAgICAgIEdTVF9UWVBFX0dMX0RFSU5URVJMQUNFX01FVEhPRFMsCisrICAgICAgICAgIEdTVF9HTF9ERUlOVEVSTEFDRV9WRklSLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKysKKysgIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpLT5zdGFydCA9IGdzdF9nbF9kZWludGVybGFjZV9zdGFydDsKKyAgIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpLT5zdG9wID0gZ3N0X2dsX2RlaW50ZXJsYWNlX3Jlc2V0OworIAorICAgR1NUX0dMX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLT5maWx0ZXIgPSBnc3RfZ2xfZGVpbnRlcmxhY2VfZmlsdGVyOworICAgR1NUX0dMX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLT5maWx0ZXJfdGV4dHVyZSA9CisgICAgICAgZ3N0X2dsX2RlaW50ZXJsYWNlX2ZpbHRlcl90ZXh0dXJlOworLSAgR1NUX0dMX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLT5pbml0X2ZibyA9IGdzdF9nbF9kZWludGVybGFjZV9pbml0X3NoYWRlcjsKKysgIEdTVF9HTF9GSUxURVJfQ0xBU1MgKGtsYXNzKS0+aW5pdF9mYm8gPSBnc3RfZ2xfZGVpbnRlcmxhY2VfaW5pdF9mYm87CisgCistICBHU1RfR0xfQkFTRV9GSUxURVJfQ0xBU1MgKGtsYXNzKS0+c3VwcG9ydGVkX2dsX2FwaSA9IEdTVF9HTF9BUElfT1BFTkdMOworKyAgR1NUX0dMX0JBU0VfRklMVEVSX0NMQVNTIChrbGFzcyktPnN1cHBvcnRlZF9nbF9hcGkgPQorKyAgICAgIEdTVF9HTF9BUElfT1BFTkdMIHwgR1NUX0dMX0FQSV9HTEVTMiB8IEdTVF9HTF9BUElfT1BFTkdMMzsKKyB9CisgCisgc3RhdGljIHZvaWQKKyBnc3RfZ2xfZGVpbnRlcmxhY2VfaW5pdCAoR3N0R0xEZWludGVybGFjZSAqIGZpbHRlcikKKyB7CistICBmaWx0ZXItPnNoYWRlciA9IE5VTEw7CisrICBmaWx0ZXItPnNoYWRlcnN0YWJsZSA9IE5VTEw7CisrICBmaWx0ZXItPmRlaW50ZXJsYWNlZnVuYyA9IGdzdF9nbF9kZWludGVybGFjZV92ZmlyX2NhbGxiYWNrOworKyAgZmlsdGVyLT5jdXJyZW50X21ldGhvZCA9IEdTVF9HTF9ERUlOVEVSTEFDRV9WRklSOworICAgZmlsdGVyLT5wcmV2X2J1ZmZlciA9IE5VTEw7CisgICBmaWx0ZXItPnByZXZfdGV4ID0gMDsKKyB9CisgCisgc3RhdGljIGdib29sZWFuCisrZ3N0X2dsX2RlaW50ZXJsYWNlX3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCisreworKyAgR3N0R0xEZWludGVybGFjZSAqZGVpbnRlcmxhY2VfZmlsdGVyID0gR1NUX0dMX0RFSU5URVJMQUNFICh0cmFucyk7CisrCisrICBkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcnN0YWJsZSA9IGdfaGFzaF90YWJsZV9uZXcgKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsKTsKKysKKysgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnN0YXJ0ICh0cmFucyk7CisrfQorKworK3N0YXRpYyB2b2lkCisrZ3N0X2dsX2RlaW50ZXJsYWNlX2doYXNoX2Z1bmNfY2xlYW4gKGdwb2ludGVyIGtleSwgZ3BvaW50ZXIgdmFsdWUsCisrICAgIGdwb2ludGVyIGRhdGEpCisreworKyAgR3N0R0xTaGFkZXIgKnNoYWRlciA9IChHc3RHTFNoYWRlciAqKSB2YWx1ZTsKKysgIEdzdEdMRmlsdGVyICpmaWx0ZXIgPSAoR3N0R0xGaWx0ZXIgKikgZGF0YTsKKysKKysgIC8vYmxvY2tpbmcgY2FsbCwgd2FpdCB0aGUgb3BlbmdsIHRocmVhZCBoYXMgZGVzdHJveWVkIHRoZSBzaGFkZXIKKysgIGdzdF9nbF9jb250ZXh0X2RlbF9zaGFkZXIgKEdTVF9HTF9CQVNFX0ZJTFRFUiAoZmlsdGVyKS0+Y29udGV4dCwgc2hhZGVyKTsKKysKKysgIHZhbHVlID0gTlVMTDsKKyt9CisrCisrc3RhdGljIGdib29sZWFuCisgZ3N0X2dsX2RlaW50ZXJsYWNlX3Jlc2V0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCisgeworICAgR3N0R0xEZWludGVybGFjZSAqZGVpbnRlcmxhY2VfZmlsdGVyID0gR1NUX0dMX0RFSU5URVJMQUNFICh0cmFucyk7CitAQCAtMTg5LDEwICszMTAsMTcgQEAgZ3N0X2dsX2RlaW50ZXJsYWNlX3Jlc2V0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCisgICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZkZWludGVybGFjZV9maWx0ZXItPnByZXZfYnVmZmVyLCBOVUxMKTsKKyAKKyAgIC8vYmxvY2tpbmcgY2FsbCwgd2FpdCB0aGUgb3BlbmdsIHRocmVhZCBoYXMgZGVzdHJveWVkIHRoZSBzaGFkZXIKKy0gIGlmIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcikKKy0gICAgZ3N0X2dsX2NvbnRleHRfZGVsX3NoYWRlciAoR1NUX0dMX0JBU0VfRklMVEVSICh0cmFucyktPmNvbnRleHQsCistICAgICAgICBkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcik7CistICBkZWludGVybGFjZV9maWx0ZXItPnNoYWRlciA9IE5VTEw7CisrICBpZiAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXJzdGFibGUpIHsKKysgICAgLyogcmVsZWFzZSBzaGFkZXJzIGluIHRoZSBnbCB0aHJlYWQgKi8KKysgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyc3RhYmxlLAorKyAgICAgICAgZ3N0X2dsX2RlaW50ZXJsYWNlX2doYXNoX2Z1bmNfY2xlYW4sIGRlaW50ZXJsYWNlX2ZpbHRlcik7CisrCisrICAgIC8qIGNsZWFuIHRoZSBodGFibGUgd2l0aG91dCBjYWxsaW5nIHZhbHVlcyBkZXN0cnVjdG9ycworKyAgICAgKiBiZWNhdXNlIHNoYWRlcnMgaGF2ZSBiZWVuIHJlbGVhc2VkIGluIHRoZSBnbHRocmVhZAorKyAgICAgKiB0aHJvdWdoIHRoZSBmb3JlYWNoIGZ1bmMgKi8KKysgICAgZ19oYXNoX3RhYmxlX3VucmVmIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcnN0YWJsZSk7CisrICAgIGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyc3RhYmxlID0gTlVMTDsKKysgIH0KKyAKKyAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnN0b3AgKHRyYW5zKTsKKyB9CitAQCAtMjAxLDkgKzMyOSwxMiBAQCBzdGF0aWMgdm9pZAorIGdzdF9nbF9kZWludGVybGFjZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCisgeworLSAgLy9Hc3RHTERlaW50ZXJsYWNlICpmaWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKG9iamVjdCk7CisrICBHc3RHTERlaW50ZXJsYWNlICpmaWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKG9iamVjdCk7CisgCisgICBzd2l0Y2ggKHByb3BfaWQpIHsKKysgICAgY2FzZSBQUk9QX01FVEhPRDoKKysgICAgICBnc3RfZ2xfZGVpbnRlcmxhY2Vfc2V0X21ldGhvZCAoZmlsdGVyLCBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSkpOworKyAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgYnJlYWs7CitAQCAtMjE0LDkgKzM0NSwxMiBAQCBzdGF0aWMgdm9pZAorIGdzdF9nbF9kZWludGVybGFjZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCisgeworLSAgLy9Hc3RHTERlaW50ZXJsYWNlICpmaWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKG9iamVjdCk7CisrICBHc3RHTERlaW50ZXJsYWNlICpmaWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKG9iamVjdCk7CisgCisgICBzd2l0Y2ggKHByb3BfaWQpIHsKKysgICAgY2FzZSBQUk9QX01FVEhPRDoKKysgICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZmlsdGVyLT5jdXJyZW50X21ldGhvZCk7CisrICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CisgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICBicmVhazsKK0BAIC0yMjQsMTMgKzM1OCw5IEBAIGdzdF9nbF9kZWludGVybGFjZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgfQorIAorIHN0YXRpYyBnYm9vbGVhbgorLWdzdF9nbF9kZWludGVybGFjZV9pbml0X3NoYWRlciAoR3N0R0xGaWx0ZXIgKiBmaWx0ZXIpCisrZ3N0X2dsX2RlaW50ZXJsYWNlX2luaXRfZmJvIChHc3RHTEZpbHRlciAqIGZpbHRlcikKKyB7CistICBHc3RHTERlaW50ZXJsYWNlICpkZWludGVybGFjZV9maWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKGZpbHRlcik7CistCistICAvL2Jsb2NraW5nIGNhbGwsIHdhaXQgdGhlIG9wZW5nbCB0aHJlYWQgaGFzIGNvbXBpbGVkIHRoZSBzaGFkZXIKKy0gIHJldHVybiBnc3RfZ2xfY29udGV4dF9nZW5fc2hhZGVyIChHU1RfR0xfQkFTRV9GSUxURVIgKGZpbHRlciktPmNvbnRleHQsIDAsCistICAgICAgZ3JlZWR5aF9mcmFnbWVudF9zb3VyY2UsICZkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcik7CisrICByZXR1cm4gVFJVRTsKKyB9CisgCisgc3RhdGljIGdib29sZWFuCitAQCAtMjQxLDcgKzM3MSw3IEBAIGdzdF9nbF9kZWludGVybGFjZV9maWx0ZXJfdGV4dHVyZSAoR3N0R0xGaWx0ZXIgKiBmaWx0ZXIsIGd1aW50IGluX3RleCwKKyAKKyAgIC8vYmxvY2tpbmcgY2FsbCwgdXNlIGEgRkJPCisgICBnc3RfZ2xfZmlsdGVyX3JlbmRlcl90b190YXJnZXQgKGZpbHRlciwgVFJVRSwgaW5fdGV4LCBvdXRfdGV4LAorLSAgICAgIGdzdF9nbF9kZWludGVybGFjZV9jYWxsYmFjaywgZGVpbnRlcmxhY2VfZmlsdGVyKTsKKysgICAgICBkZWludGVybGFjZV9maWx0ZXItPmRlaW50ZXJsYWNlZnVuYywgZGVpbnRlcmxhY2VfZmlsdGVyKTsKKyAKKyAgIHJldHVybiBUUlVFOworIH0KK0BAIC0yNTksMzYgKzM4OSwxMDQgQEAgZ3N0X2dsX2RlaW50ZXJsYWNlX2ZpbHRlciAoR3N0R0xGaWx0ZXIgKiBmaWx0ZXIsIEdzdEJ1ZmZlciAqIGluYnVmLAorICAgcmV0dXJuIFRSVUU7CisgfQorIAorLS8vb3BlbmdsIHNjZW5lLCBwYXJhbXM6IGlucHV0IHRleHR1cmUgKG5vdCB0aGUgb3V0cHV0IGZpbHRlci0+dGV4dHVyZSkKKytzdGF0aWMgR3N0R0xTaGFkZXIgKgorK2dzdF9nbF9kZWludGVybGFjZV9nZXRfZnJhZ21lbnRfc2hhZGVyIChHc3RHTEZpbHRlciAqIGZpbHRlciwKKysgICAgY29uc3QgZ2NoYXIgKiBzaGFkZXJfbmFtZSwgY29uc3QgZ2NoYXIgKiBzaGFkZXJfc291cmNlKQorK3sKKysgIEdzdEdMU2hhZGVyICpzaGFkZXIgPSBOVUxMOworKyAgR3N0R0xEZWludGVybGFjZSAqZGVpbnRlcmxhY2VfZmlsdGVyID0gR1NUX0dMX0RFSU5URVJMQUNFIChmaWx0ZXIpOworKyAgR3N0R0xDb250ZXh0ICpjb250ZXh0ID0gR1NUX0dMX0JBU0VfRklMVEVSIChmaWx0ZXIpLT5jb250ZXh0OworKworKyAgc2hhZGVyID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXJzdGFibGUsIHNoYWRlcl9uYW1lKTsKKysKKysgIGlmICghc2hhZGVyKSB7CisrICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworKworKyAgICBpZiAoIShzaGFkZXIgPSBnc3RfZ2xfc2hhZGVyX25ld19saW5rX3dpdGhfc3RhZ2VzIChjb250ZXh0LCAmZXJyb3IsCisrICAgICAgICAgICAgICAgIGdzdF9nbHNsX3N0YWdlX25ld19kZWZhdWx0X3ZlcnRleCAoY29udGV4dCksCisrICAgICAgICAgICAgICAgIGdzdF9nbHNsX3N0YWdlX25ld193aXRoX3N0cmluZyAoY29udGV4dCwgR0xfRlJBR01FTlRfU0hBREVSLAorKyAgICAgICAgICAgICAgICAgICAgR1NUX0dMU0xfVkVSU0lPTl9OT05FLAorKyAgICAgICAgICAgICAgICAgICAgR1NUX0dMU0xfUFJPRklMRV9FUyB8IEdTVF9HTFNMX1BST0ZJTEVfQ09NUEFUSUJJTElUWSwKKysgICAgICAgICAgICAgICAgICAgIHNoYWRlcl9zb3VyY2UpLCBOVUxMKSkpIHsKKysgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVpbnRlcmxhY2VfZmlsdGVyLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELAorKyAgICAgICAgICAoIkZhaWxlZCB0byBpbml0aWFsaXplICVzIHNoYWRlciIsIHNoYWRlcl9uYW1lKSwgKE5VTEwpKTsKKysgICAgfQorKworKyAgICBmaWx0ZXItPmRyYXdfYXR0cl9wb3NpdGlvbl9sb2MgPQorKyAgICAgICAgZ3N0X2dsX3NoYWRlcl9nZXRfYXR0cmlidXRlX2xvY2F0aW9uIChzaGFkZXIsICJhX3Bvc2l0aW9uIik7CisrICAgIGZpbHRlci0+ZHJhd19hdHRyX3RleHR1cmVfbG9jID0KKysgICAgICAgIGdzdF9nbF9zaGFkZXJfZ2V0X2F0dHJpYnV0ZV9sb2NhdGlvbiAoc2hhZGVyLCAiYV90ZXhjb29yZCIpOworKyAgfQorKworKyAgZ19oYXNoX3RhYmxlX2luc2VydCAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXJzdGFibGUsIChnY2hhciAqKSBzaGFkZXJfbmFtZSwKKysgICAgICBzaGFkZXIpOworKworKyAgcmV0dXJuIHNoYWRlcjsKKyt9CisrCisgc3RhdGljIHZvaWQKKy1nc3RfZ2xfZGVpbnRlcmxhY2VfY2FsbGJhY2sgKGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LCBndWludCB0ZXh0dXJlLAorK2dzdF9nbF9kZWludGVybGFjZV92ZmlyX2NhbGxiYWNrIChnaW50IHdpZHRoLCBnaW50IGhlaWdodCwgZ3VpbnQgdGV4dHVyZSwKKyAgICAgZ3BvaW50ZXIgc3R1ZmYpCisgeworLSAgR3N0R0xEZWludGVybGFjZSAqZGVpbnRlcmxhY2VfZmlsdGVyID0gR1NUX0dMX0RFSU5URVJMQUNFIChzdHVmZik7CisrICBHc3RHTFNoYWRlciAqc2hhZGVyOworICAgR3N0R0xGaWx0ZXIgKmZpbHRlciA9IEdTVF9HTF9GSUxURVIgKHN0dWZmKTsKKy0gIEdzdEdMRnVuY3MgKmdsID0gR1NUX0dMX0JBU0VfRklMVEVSIChmaWx0ZXIpLT5jb250ZXh0LT5nbF92dGFibGU7CisrICBHc3RHTERlaW50ZXJsYWNlICpkZWludGVybGFjZV9maWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKGZpbHRlcik7CisrICBHc3RHTENvbnRleHQgKmNvbnRleHQgPSBHU1RfR0xfQkFTRV9GSUxURVIgKGZpbHRlciktPmNvbnRleHQ7CisrICBHc3RHTEZ1bmNzICpnbCA9IGNvbnRleHQtPmdsX3Z0YWJsZTsKKysKKysgIHNoYWRlciA9IGdzdF9nbF9kZWludGVybGFjZV9nZXRfZnJhZ21lbnRfc2hhZGVyIChkZWludGVybGFjZV9maWx0ZXIsICJ2ZmlyIiwKKysgICAgICB2ZmlyX2ZyYWdtZW50X3NvdXJjZSk7CisrCisrICBpZiAoIXNoYWRlcikKKysgICAgcmV0dXJuOworKworKyNpZiBHU1RfR0xfSEFWRV9PUEVOR0wKKysgIGlmIChVU0lOR19PUEVOR0wgKGNvbnRleHQpKSB7CisrICAgIGdsLT5NYXRyaXhNb2RlIChHTF9QUk9KRUNUSU9OKTsKKysgICAgZ2wtPkxvYWRJZGVudGl0eSAoKTsKKysgIH0KKysjZW5kaWYKKysKKysgIGdzdF9nbF9zaGFkZXJfdXNlIChzaGFkZXIpOworKworKyAgZ2wtPkFjdGl2ZVRleHR1cmUgKEdMX1RFWFRVUkUwKTsKKysgIGdsLT5CaW5kVGV4dHVyZSAoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisrCisrICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFpIChzaGFkZXIsICJ0ZXgiLCAwKTsKKysgIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWYgKHNoYWRlciwgIndpZHRoIiwKKysgICAgICBHU1RfVklERU9fSU5GT19XSURUSCAoJmZpbHRlci0+b3V0X2luZm8pKTsKKysgIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWYgKHNoYWRlciwgImhlaWdodCIsCisrICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmZmlsdGVyLT5vdXRfaW5mbykpOworKworKyAgZ3N0X2dsX2ZpbHRlcl9kcmF3X3RleHR1cmUgKGZpbHRlciwgdGV4dHVyZSwgd2lkdGgsIGhlaWdodCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrZ3N0X2dsX2RlaW50ZXJsYWNlX2dyZWVkeWhfY2FsbGJhY2sgKGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LCBndWludCB0ZXh0dXJlLAorKyAgICBncG9pbnRlciBzdHVmZikKKyt7CisrICBHc3RHTFNoYWRlciAqc2hhZGVyOworKyAgR3N0R0xGaWx0ZXIgKmZpbHRlciA9IEdTVF9HTF9GSUxURVIgKHN0dWZmKTsKKysgIEdzdEdMRGVpbnRlcmxhY2UgKmRlaW50ZXJsYWNlX2ZpbHRlciA9IEdTVF9HTF9ERUlOVEVSTEFDRSAoZmlsdGVyKTsKKysgIEdzdEdMQ29udGV4dCAqY29udGV4dCA9IEdTVF9HTF9CQVNFX0ZJTFRFUiAoZmlsdGVyKS0+Y29udGV4dDsKKysgIEdzdEdMRnVuY3MgKmdsID0gY29udGV4dC0+Z2xfdnRhYmxlOworICAgZ3VpbnQgdGVtcDsKKyAKKy0gIEdMZmxvYXQgdmVydHNbXSA9IHsgLTEuMCwgLTEuMCwKKy0gICAgMS4wLCAtMS4wLAorLSAgICAxLjAsIDEuMCwKKy0gICAgLTEuMCwgMS4wCistICB9OworLSAgR0xmbG9hdCB0ZXhjb29yZHMwW10gPSB7IDAuMGYsIDAuMGYsCistICAgIDEuMGYsIDAuMGYsCistICAgIDEuMGYsIDEuMGYsCistICAgIDAuMGYsIDEuMGYKKy0gIH07CistICBHTGZsb2F0IHRleGNvb3JkczFbXSA9IHsgMC4wZiwgMC4wZiwKKy0gICAgMS4wZiwgMC4wZiwKKy0gICAgMS4wZiwgMS4wZiwKKy0gICAgMC4wZiwgMS4wZgorLSAgfTsKKysgIHNoYWRlciA9CisrICAgICAgZ3N0X2dsX2RlaW50ZXJsYWNlX2dldF9mcmFnbWVudF9zaGFkZXIgKGRlaW50ZXJsYWNlX2ZpbHRlciwgImdyZWVkaHkiLAorKyAgICAgIGdyZWVkeWhfZnJhZ21lbnRfc291cmNlKTsKKyAKKy0gIGdsLT5NYXRyaXhNb2RlIChHTF9QUk9KRUNUSU9OKTsKKy0gIGdsLT5Mb2FkSWRlbnRpdHkgKCk7CisrICBpZiAoIXNoYWRlcikKKysgICAgcmV0dXJuOworIAorLSAgZ3N0X2dsX3NoYWRlcl91c2UgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyKTsKKysjaWYgR1NUX0dMX0hBVkVfT1BFTkdMCisrICBpZiAoVVNJTkdfT1BFTkdMIChjb250ZXh0KSkgeworKyAgICBnbC0+TWF0cml4TW9kZSAoR0xfUFJPSkVDVElPTik7CisrICAgIGdsLT5Mb2FkSWRlbnRpdHkgKCk7CisrICB9CisrI2VuZGlmCisrCisrICBnc3RfZ2xfc2hhZGVyX3VzZSAoc2hhZGVyKTsKKyAKKyAgIGlmIChHX1VOTElLRUxZIChkZWludGVybGFjZV9maWx0ZXItPnByZXZfdGV4ID09IDApKSB7CisgICAgIGdzdF9nbF9jb250ZXh0X2dlbl90ZXh0dXJlIChHU1RfR0xfQkFTRV9GSUxURVIgKGZpbHRlciktPmNvbnRleHQsCitAQCAtMjk4LDQ0ICs0OTYsMjQgQEAgZ3N0X2dsX2RlaW50ZXJsYWNlX2NhbGxiYWNrIChnaW50IHdpZHRoLCBnaW50IGhlaWdodCwgZ3VpbnQgdGV4dHVyZSwKKyAgICAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJmZpbHRlci0+b3V0X2luZm8pKTsKKyAgIH0gZWxzZSB7CisgICAgIGdsLT5BY3RpdmVUZXh0dXJlIChHTF9URVhUVVJFMSk7CistICAgIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWkgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyLCAidGV4X3ByZXYiLCAxKTsKKysgICAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xaSAoc2hhZGVyLCAidGV4X3ByZXYiLCAxKTsKKyAgICAgZ2wtPkJpbmRUZXh0dXJlIChHTF9URVhUVVJFXzJELCBkZWludGVybGFjZV9maWx0ZXItPnByZXZfdGV4KTsKKyAgIH0KKyAKKyAgIGdsLT5BY3RpdmVUZXh0dXJlIChHTF9URVhUVVJFMCk7CistICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFpIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlciwgInRleCIsIDApOworKyAgZ2wtPkJpbmRUZXh0dXJlIChHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAKKy0gIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWYgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyLCAibWF4X2NvbWIiLAorLSAgICAgIDUuMGYgLyAyNTUuMGYpOworLSAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXIsICJtb3Rpb25fdGhyZXNob2xkIiwKKy0gICAgICAyNS4wZiAvIDI1NS4wZik7CistICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFmIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlciwgIm1vdGlvbl9zZW5zZSIsCistICAgICAgMzAuMGYgLyAyNTUuMGYpOworKyAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xaSAoc2hhZGVyLCAidGV4IiwgMCk7CisrICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFmIChzaGFkZXIsICJtYXhfY29tYiIsIDUuMGYgLyAyNTUuMGYpOworKyAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoc2hhZGVyLCAibW90aW9uX3RocmVzaG9sZCIsIDI1LjBmIC8gMjU1LjBmKTsKKysgIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWYgKHNoYWRlciwgIm1vdGlvbl9zZW5zZSIsIDMwLjBmIC8gMjU1LjBmKTsKKyAKKy0gIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWYgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyLCAid2lkdGgiLAorKyAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoc2hhZGVyLCAid2lkdGgiLAorICAgICAgIEdTVF9WSURFT19JTkZPX1dJRFRIICgmZmlsdGVyLT5vdXRfaW5mbykpOworLSAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXIsICJoZWlnaHQiLAorKyAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoc2hhZGVyLCAiaGVpZ2h0IiwKKyAgICAgICBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZmaWx0ZXItPm91dF9pbmZvKSk7CisgCistICBnbC0+Q2xpZW50QWN0aXZlVGV4dHVyZSAoR0xfVEVYVFVSRTApOworLQorLSAgZ2wtPkVuYWJsZUNsaWVudFN0YXRlIChHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKy0gIGdsLT5FbmFibGVDbGllbnRTdGF0ZSAoR0xfVkVSVEVYX0FSUkFZKTsKKy0KKy0gIGdsLT5WZXJ0ZXhQb2ludGVyICgyLCBHTF9GTE9BVCwgMCwgJnZlcnRzKTsKKy0gIGdsLT5UZXhDb29yZFBvaW50ZXIgKDIsIEdMX0ZMT0FULCAwLCAmdGV4Y29vcmRzMCk7CistCistICBnbC0+Q2xpZW50QWN0aXZlVGV4dHVyZSAoR0xfVEVYVFVSRTEpOworLSAgZ2wtPkVuYWJsZUNsaWVudFN0YXRlIChHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKy0gIGdsLT5UZXhDb29yZFBvaW50ZXIgKDIsIEdMX0ZMT0FULCAwLCAmdGV4Y29vcmRzMSk7CistCistICBnbC0+RHJhd0FycmF5cyAoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKy0KKy0gIGdsLT5EaXNhYmxlQ2xpZW50U3RhdGUgKEdMX1ZFUlRFWF9BUlJBWSk7CistICBnbC0+RGlzYWJsZUNsaWVudFN0YXRlIChHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKy0KKy0gIGdsLT5DbGllbnRBY3RpdmVUZXh0dXJlIChHTF9URVhUVVJFMCk7CistICBnbC0+RGlzYWJsZUNsaWVudFN0YXRlIChHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKysgIGdzdF9nbF9maWx0ZXJfZHJhd190ZXh0dXJlIChmaWx0ZXIsIHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpOworIAorICAgaWYgKHRleHR1cmUgPT0gZmlsdGVyLT5pbl90ZXhfaWQpIHsKKyAgICAgdGVtcCA9IGZpbHRlci0+aW5fdGV4X2lkOworZGlmZiAtLWdpdCBhL2V4dC9nbC9nc3RnbGRlaW50ZXJsYWNlLmggYi9leHQvZ2wvZ3N0Z2xkZWludGVybGFjZS5oCitpbmRleCBhODFhMmU3Li41OGE5YzBjIDEwMDY0NAorLS0tIGEvZXh0L2dsL2dzdGdsZGVpbnRlcmxhY2UuaAorKysrIGIvZXh0L2dsL2dzdGdsZGVpbnRlcmxhY2UuaAorQEAgLTM4LDkgKzM4LDEzIEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RHTERlaW50ZXJsYWNlQ2xhc3MgR3N0R0xEZWludGVybGFjZUNsYXNzOworIHN0cnVjdCBfR3N0R0xEZWludGVybGFjZQorIHsKKyAgIEdzdEdMRmlsdGVyICBmaWx0ZXI7CistICBHc3RHTFNoYWRlciAgKnNoYWRlcjsKKysKKysgIEdMQ0IJICAgICAgIGRlaW50ZXJsYWNlZnVuYzsgCisrICBHSGFzaFRhYmxlICAgKnNoYWRlcnN0YWJsZTsKKyAgIEdzdEJ1ZmZlciAgICAqcHJldl9idWZmZXI7CisgICBndWludCAgICAgICAgIHByZXZfdGV4OworKworKyAgZ2ludAkgICAgICAgY3VycmVudF9tZXRob2Q7CisgfTsKKyAKKyBzdHJ1Y3QgX0dzdEdMRGVpbnRlcmxhY2VDbGFzcworZGlmZiAtLWdpdCBhL2V4dC9nbC9nc3RvcGVuZ2wuYyBiL2V4dC9nbC9nc3RvcGVuZ2wuYworaW5kZXggNTA2NzZjNC4uMTM1ODYyYSAxMDA2NDQKKy0tLSBhL2V4dC9nbC9nc3RvcGVuZ2wuYworKysrIGIvZXh0L2dsL2dzdG9wZW5nbC5jCitAQCAtNjIsNiArNjIsNyBAQAorICNpbmNsdWRlICJnc3RnbHN0ZXJlb3NwbGl0LmgiCisgI2luY2x1ZGUgImdzdGdsc3RlcmVvbWl4LmgiCisgI2luY2x1ZGUgImdzdGdsdmlld2NvbnZlcnQuaCIKKysjaW5jbHVkZSAiZ3N0Z2xkZWludGVybGFjZS5oIgorIAorICNpZiBIQVZFX0dSQVBIRU5FCisgI2luY2x1ZGUgImdzdGdsdHJhbnNmb3JtYXRpb24uaCIKK0BAIC03Nyw3ICs3OCw2IEBACisgI2luY2x1ZGUgImdzdGdsdGVzdHNyYy5oIgorICNpbmNsdWRlICJnc3RnbGZpbHRlcmdsYXNzLmgiCisgLyogI2luY2x1ZGUgImdzdGdsZmlsdGVycmVmbGVjdGVkc2NyZWVuLmgiICovCistI2luY2x1ZGUgImdzdGdsZGVpbnRlcmxhY2UuaCIKKyAjaW5jbHVkZSAiZ3N0Z2xtb3NhaWMuaCIKKyAjaWYgSEFWRV9QTkcKKyAjaW5jbHVkZSAiZ3N0Z2xkaWZmZXJlbmNlbWF0dGUuaCIKK0BAIC0yMjYsNiArMjI2LDEyIEBAIHBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCisgICAgICAgICAgIEdTVF9SQU5LX05PTkUsIEdTVF9UWVBFX0dMX1NURVJFT19NSVgpKSB7CisgICAgIHJldHVybiBGQUxTRTsKKyAgIH0KKysKKysgIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdsZGVpbnRlcmxhY2UiLAorKyAgICAgICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9HTF9ERUlOVEVSTEFDRSkpIHsKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKworICNpZiBIQVZFX0pQRUcKKyAjaWYgSEFWRV9QTkcKKyAgIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdsb3ZlcmxheSIsCitAQCAtMjUwLDExICsyNTYsNiBAQCBwbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQorICAgICByZXR1cm4gRkFMU0U7CisgICB9CisgI2VuZGlmCistICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJnbGRlaW50ZXJsYWNlIiwKKy0gICAgICAgICAgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfR0xfREVJTlRFUkxBQ0UpKSB7CistICAgIHJldHVybiBGQUxTRTsKKy0gIH0KKy0KKyAgIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdsbW9zYWljIiwKKyAgICAgICAgICAgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfR0xfTU9TQUlDKSkgeworICAgICByZXR1cm4gRkFMU0U7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDItZ2xwbHVnaW4tZ2x3aW5kb3ctZml4LW1lbW9yeS1sZWFrLW9mLW5hdmlnYXRpb24tdGhyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDItZ2xwbHVnaW4tZ2x3aW5kb3ctZml4LW1lbW9yeS1sZWFrLW9mLW5hdmlnYXRpb24tdGhyZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzQ5MWExNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAyLWdscGx1Z2luLWdsd2luZG93LWZpeC1tZW1vcnktbGVhay1vZi1uYXZpZ2F0aW9uLXRocmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDk1Y2RhN2ZiY2YxYTgxMjg5ZDkzMTVjODAxYzhlMmIzZDg5NmY0Y2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBIYWlodWEgSHUgPGI1NTU5N0BmcmVlc2NhbGUuY29tPgotRGF0ZTogTW9uLCAzMCBOb3YgMjAxNSAwOTozNjowOSArMDgwMAotU3ViamVjdDogW1BBVENIIDIvNV0gW2dscGx1Z2luXSBnbHdpbmRvdzogZml4IG1lbW9yeSBsZWFrIG9mIG5hdmlnYXRpb24KLSB0aHJlYWQKLQotV2hlbiBleGl0IG5hdmlnYXRpb24gdGhyZWFkLCBjYWxsIGdfdGhyZWFkX2pvaW4oKSB0byByZWxlYXNlCi10aGUgcmVzb3VyY2UgaG9sZCBieSBpdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS43LjFdCi0KLWJ1Z3ppbGxhIFVSTDogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODgyMAotCi1TaWduZWQtb2ZmLWJ5OiBIYWlodWEgSHUgPGI1NTU5N0BmcmVlc2NhbGUuY29tPgotLS0tCi0gZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsd2luZG93LmMgfCAgICAzICsrKwotIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbHdpbmRvdy5jIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsd2luZG93LmMKLWluZGV4IDQ0Yjc0Y2EuLjQyZWYyOTYgMTAwNjQ0Ci0tLS0gYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2x3aW5kb3cuYwotKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsd2luZG93LmMKLUBAIC0zNDMsNiArMzQzLDkgQEAgZ3N0X2dsX3dpbmRvd19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLSAgICAgd2hpbGUgKHdpbmRvdy0+bmF2X2FsaXZlKSB7Ci0gICAgICAgZ19jb25kX3dhaXQgKCZ3aW5kb3ctPm5hdl9kZXN0cm95X2NvbmQsICZ3aW5kb3ctPm5hdl9sb2NrKTsKLSAgICAgfQotKyAgICAvKiByZWxlYXNlIHJlc291cmNlIGhvbGQgYnkgbmF2aWdhdGlvbiB0aHJlYWQgKi8KLSsgICAgZ190aHJlYWRfam9pbih3aW5kb3ctPnByaXYtPm5hdmlnYXRpb25fdGhyZWFkKTsKLSsgICAgd2luZG93LT5wcml2LT5uYXZpZ2F0aW9uX3RocmVhZCA9IE5VTEw7Ci0gICAgIGdfbXV0ZXhfdW5sb2NrICgmd2luZG93LT5uYXZfbG9jayk7Ci0gICB9Ci0gCi0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMy1nbGNvbG9yY29udmVydC1pbXBsZW1lbnQtbXVsdGlwbGUtcmVuZGVyLXRhcmdldHMtZm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMy1nbGNvbG9yY29udmVydC1pbXBsZW1lbnQtbXVsdGlwbGUtcmVuZGVyLXRhcmdldHMtZm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxZDhlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAzLWdsY29sb3Jjb252ZXJ0LWltcGxlbWVudC1tdWx0aXBsZS1yZW5kZXItdGFyZ2V0cy1mb3IucGF0Y2gKQEAgLTAsMCArMSwyNDQgQEAKK0Zyb20gMTI3ZTUxNzU2ODQ5MGZjMTQ3MjExZDhiMmZiNGRhMDFjZWNiYmViNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IFRodSwgMzEgTWFyIDIwMTYgMTk6NTA6MjggKzExMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzZdIGdsY29sb3Jjb252ZXJ0OiBpbXBsZW1lbnQgbXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgZm9yCisgR0xFUzMKKworVGhlcmUgYXJlIG51bWVyb3VzIHNsaWdodCBkaWZmZXJlbmNlcyByZXF1aXJlZCBiZXR3ZWVuIERlc2t0b3AgR0wgYW5kIEdMRVMzIGZvcgorbXVsdGlwbGUgcmVuZGVyIHRhcmdldHMuCisKKzEuIGdsX0ZyYWdEYXRhIGRvZXNuJ3QgZXhpc3QgYXQgYWxsIGFuZCBvbmUgaXMgcmVxdWlyZWQgdG8gdXNlCisgICAnbGF5b3V0IChsb2NhdGlvbiA9ID8pIG91dCAuLi4nIGluc3RlYWQuCisyLiBnbF9GcmFnQ29sb3IgZG9lc24ndCBleGlzdCwgc2FtZSBhcyAxCiszLiB0ZXh0dXJlMkQoKSBoYXMgYmVlbiBkZXByZWNhdGVkCisKK0ZvcnR1bmF0ZWx5IG1vc3Qgb2YgdGhlc2UgaGF2ZSBiZWVuIHRha2VuIGNhcmUgb2Ygd2l0aCBHTDMgYW5kIHRoZSBzaGFkZXIKK21hbmdsaW5nIGFscmVhZHkgZXhpc3RzIHNvIGp1c3QgZXhwYW5kIHRoZSBjb25kaXRpb25zIHRoZXkgYXJlIHVzZWQgaW4uICBUaGUKK2dsX0ZyYWdEYXRhIGlzc3VlIHJlcXVpcmVzIGEgbmV3IG1hbmdsZSBwYXNzIHRob3VnaC4gIFdlIGFsc28gdXNlIHRoaXMgbmV3CitwYXNzIG9uIGRlc2t0b3AgR0wgZm9yIGNvbnNpc3RlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjkuMV0KKworLS0tCisgZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMgfCAxMjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDk5IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYworaW5kZXggNDkwZWM1NC4uZjQ3OGZhYSAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYworQEAgLTE4MDIsMTAgKzE4MDIsMTEgQEAgX21hbmdsZV9zYW1wbGVyX3R5cGUgKGNvbnN0IGdjaGFyICogc3RyLCBHc3RHTFRleHR1cmVUYXJnZXQgZnJvbSwKKyAKKyBzdGF0aWMgZ2NoYXIgKgorIF9tYW5nbGVfdmFyeWluZ19hdHRyaWJ1dGUgKGNvbnN0IGdjaGFyICogc3RyLCBndWludCBzaGFkZXJfdHlwZSwKKy0gICAgR3N0R0xBUEkgZ2xfYXBpKQorKyAgICBHc3RHTEFQSSBnbF9hcGksIGd1aW50IGdsX21ham9yLCBndWludCBnbF9taW5vcikKKyB7CistICBpZiAoZ2xfYXBpICYgR1NUX0dMX0FQSV9PUEVOR0wzKSB7CistICAgIGlmIChzaGFkZXJfdHlwZSA9PSBHTF9WRVJURVhfU0hBREVSKSB7CisrICBpZiAoc2hhZGVyX3R5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikgeworKyAgICBpZiAoKGdsX2FwaSAmIEdTVF9HTF9BUElfT1BFTkdMMykgfHwgKGdsX2FwaSAmIEdTVF9HTF9BUElfR0xFUzIKKysgICAgICAgICAgICAmJiBnbF9tYWpvciA+PSAzKSkgeworICAgICAgIGdjaGFyICp0bXAsICp0bXAyOworICAgICAgIEdSZWdleCAqcmVnZXg7CisgCitAQCAtMTgyMSw3ICsxODIyLDEwIEBAIF9tYW5nbGVfdmFyeWluZ19hdHRyaWJ1dGUgKGNvbnN0IGdjaGFyICogc3RyLCBndWludCBzaGFkZXJfdHlwZSwKKyAKKyAgICAgICBnX2ZyZWUgKHRtcCk7CisgICAgICAgcmV0dXJuIHRtcDI7CistICAgIH0gZWxzZSBpZiAoc2hhZGVyX3R5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB7CisrICAgIH0KKysgIH0gZWxzZSBpZiAoc2hhZGVyX3R5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB7CisrICAgIGlmICgoZ2xfYXBpICYgR1NUX0dMX0FQSV9PUEVOR0wzKSB8fCAoZ2xfYXBpICYgR1NUX0dMX0FQSV9HTEVTMgorKyAgICAgICAgICAgICYmIGdsX21ham9yID4gMykpIHsKKyAgICAgICBnY2hhciAqdG1wOworICAgICAgIEdSZWdleCAqcmVnZXg7CisgCitAQCAtMTgzNywyOCArMTg0MSw0OCBAQCBfbWFuZ2xlX3ZhcnlpbmdfYXR0cmlidXRlIChjb25zdCBnY2hhciAqIHN0ciwgZ3VpbnQgc2hhZGVyX3R5cGUsCisgfQorIAorIHN0YXRpYyBnY2hhciAqCistX21hbmdsZV9mcmFnX2NvbG9yIChjb25zdCBnY2hhciAqIHN0cikKKytfbWFuZ2xlX2ZyYWdfY29sb3JfZGF0YSAoY29uc3QgZ2NoYXIgKiBzdHIpCisgeworICAgR1JlZ2V4ICpyZWdleDsKKy0gIGdjaGFyICpyZXQ7CisrICBnY2hhciAqcmV0LCAqdG1wOworIAorICAgcmVnZXggPSBnX3JlZ2V4X25ldyAoImdsX0ZyYWdDb2xvciIsIDAsIDAsIE5VTEwpOworICAgcmV0ID0gZ19yZWdleF9yZXBsYWNlX2xpdGVyYWwgKHJlZ2V4LCBzdHIsIC0xLCAwLCAiZnJhZ0NvbG9yIiwgMCwgTlVMTCk7CisgICBnX3JlZ2V4X3VucmVmIChyZWdleCk7CisgCisrICB0bXAgPSByZXQ7CisrICAvKiBzZWFyY2ggYW5kIHJlcGxhY2UgJ2dsX0ZyYWdEYXRhW05VTV0nIGludG8gZnJhZ0NvbG9yX05VTSAqLworKyAgcmVnZXggPSBnX3JlZ2V4X25ldyAoImdsX0ZyYWdEYXRhXFxbKFxcZCspXFxdIiwgMCwgMCwgTlVMTCk7CisrICByZXQgPSBnX3JlZ2V4X3JlcGxhY2UgKHJlZ2V4LCB0bXAsIC0xLCAwLCAiZnJhZ0NvbG9yX1xcMSIsIDAsIE5VTEwpOworKyAgZ19yZWdleF91bnJlZiAocmVnZXgpOworKyAgZ19mcmVlICh0bXApOworKworICAgcmV0dXJuIHJldDsKKyB9CisgCisgc3RhdGljIHZvaWQKKy1fbWFuZ2xlX3ZlcnNpb25fcHJvZmlsZV9mcm9tX2dsX2FwaSAoR3N0R0xBUEkgZ2xfYXBpLCBHc3RHTFNMVmVyc2lvbiAqIHZlcnNpb24sCistICAgIEdzdEdMU0xQcm9maWxlICogcHJvZmlsZSkKKytfbWFuZ2xlX3ZlcnNpb25fcHJvZmlsZV9mcm9tX2dsX2FwaSAoR3N0R0xBUEkgZ2xfYXBpLCBnaW50IGdsX21ham9yLAorKyAgICBnaW50IGdsX21pbm9yLCBHc3RHTFNMVmVyc2lvbiAqIHZlcnNpb24sIEdzdEdMU0xQcm9maWxlICogcHJvZmlsZSkKKyB7CisrICAqdmVyc2lvbiA9IEdTVF9HTFNMX1ZFUlNJT05fTk9ORTsKKysgICpwcm9maWxlID0gR1NUX0dMU0xfUFJPRklMRV9OT05FOworKworICAgaWYgKGdsX2FwaSAmIEdTVF9HTF9BUElfT1BFTkdMMykgeworLSAgICAqdmVyc2lvbiA9IEdTVF9HTFNMX1ZFUlNJT05fMTUwOworLSAgICAqcHJvZmlsZSA9IEdTVF9HTFNMX1BST0ZJTEVfTk9ORTsKKysgICAgaWYgKGdsX21ham9yID4gMyB8fCBnbF9taW5vciA+PSAzKSB7CisrICAgICAgKnZlcnNpb24gPSBHU1RfR0xTTF9WRVJTSU9OXzMzMDsKKysgICAgICAqcHJvZmlsZSA9IEdTVF9HTFNMX1BST0ZJTEVfQ09SRTsKKysgICAgfSBlbHNlIHsKKysgICAgICAqdmVyc2lvbiA9IEdTVF9HTFNMX1ZFUlNJT05fMTUwOworKyAgICAgICpwcm9maWxlID0gR1NUX0dMU0xfUFJPRklMRV9OT05FOworKyAgICB9CisgICB9IGVsc2UgaWYgKGdsX2FwaSAmIEdTVF9HTF9BUElfR0xFUzIpIHsKKy0gICAgKnZlcnNpb24gPSBHU1RfR0xTTF9WRVJTSU9OXzEwMDsKKy0gICAgKnByb2ZpbGUgPSBHU1RfR0xTTF9QUk9GSUxFX0VTOworKyAgICBpZiAoZ2xfbWFqb3IgPj0gMykgeworKyAgICAgICp2ZXJzaW9uID0gR1NUX0dMU0xfVkVSU0lPTl8zMDA7CisrICAgICAgKnByb2ZpbGUgPSBHU1RfR0xTTF9QUk9GSUxFX0VTOworKyAgICB9IGVsc2UgaWYgKGdsX21ham9yID49IDIpIHsKKysgICAgICAqdmVyc2lvbiA9IEdTVF9HTFNMX1ZFUlNJT05fMTAwOworKyAgICAgICpwcm9maWxlID0gR1NUX0dMU0xfUFJPRklMRV9FUzsKKysgICAgfQorICAgfSBlbHNlIGlmIChnbF9hcGkgJiBHU1RfR0xfQVBJX09QRU5HTCkgeworICAgICAqdmVyc2lvbiA9IEdTVF9HTFNMX1ZFUlNJT05fMTEwOworICAgICAqcHJvZmlsZSA9IEdTVF9HTFNMX1BST0ZJTEVfQ09NUEFUSUJJTElUWTsKK0BAIC0xODY3LDIyICsxODkxLDI4IEBAIF9tYW5nbGVfdmVyc2lvbl9wcm9maWxlX2Zyb21fZ2xfYXBpIChHc3RHTEFQSSBnbF9hcGksIEdzdEdMU0xWZXJzaW9uICogdmVyc2lvbiwKKyAKKyBzdGF0aWMgZ2NoYXIgKgorIF9tYW5nbGVfc2hhZGVyIChjb25zdCBnY2hhciAqIHN0ciwgZ3VpbnQgc2hhZGVyX3R5cGUsIEdzdEdMVGV4dHVyZVRhcmdldCBmcm9tLAorLSAgICBHc3RHTFRleHR1cmVUYXJnZXQgdG8sIEdzdEdMQVBJIGdsX2FwaSwgR3N0R0xTTFZlcnNpb24gKiB2ZXJzaW9uLAorLSAgICBHc3RHTFNMUHJvZmlsZSAqIHByb2ZpbGUpCisrICAgIEdzdEdMVGV4dHVyZVRhcmdldCB0bywgR3N0R0xBUEkgZ2xfYXBpLCBnaW50IGdsX21ham9yLCBnaW50IGdsX21pbm9yLAorKyAgICBHc3RHTFNMVmVyc2lvbiAqIHZlcnNpb24sIEdzdEdMU0xQcm9maWxlICogcHJvZmlsZSkKKyB7CisgICBnY2hhciAqdG1wLCAqdG1wMjsKKyAKKysgIF9tYW5nbGVfdmVyc2lvbl9wcm9maWxlX2Zyb21fZ2xfYXBpIChnbF9hcGksIGdsX21ham9yLCBnbF9taW5vciwgdmVyc2lvbiwKKysgICAgICBwcm9maWxlKTsKKyAgIHRtcCA9IF9tYW5nbGVfdGV4dHVyZV9hY2Nlc3MgKHN0ciwgZnJvbSwgdG8sIGdsX2FwaSk7CisgICB0bXAyID0gX21hbmdsZV9zYW1wbGVyX3R5cGUgKHRtcCwgZnJvbSwgdG8pOworICAgZ19mcmVlICh0bXApOworLSAgdG1wID0gX21hbmdsZV92YXJ5aW5nX2F0dHJpYnV0ZSAodG1wMiwgc2hhZGVyX3R5cGUsIGdsX2FwaSk7CisrICB0bXAgPQorKyAgICAgIF9tYW5nbGVfdmFyeWluZ19hdHRyaWJ1dGUgKHRtcDIsIHNoYWRlcl90eXBlLCBnbF9hcGksIGdsX21ham9yLCBnbF9taW5vcik7CisgICBnX2ZyZWUgKHRtcDIpOworLSAgaWYgKHNoYWRlcl90eXBlID09IEdMX0ZSQUdNRU5UX1NIQURFUiAmJiBnbF9hcGkgJiBHU1RfR0xfQVBJX09QRU5HTDMpIHsKKy0gICAgdG1wMiA9IF9tYW5nbGVfZnJhZ19jb2xvciAodG1wKTsKKy0gICAgZ19mcmVlICh0bXApOworLSAgICB0bXAgPSB0bXAyOworKyAgaWYgKHNoYWRlcl90eXBlID09IEdMX0ZSQUdNRU5UX1NIQURFUikgeworKyAgICBpZiAoKCpwcm9maWxlID09IEdTVF9HTFNMX1BST0ZJTEVfRVMgJiYgKnZlcnNpb24gPj0gR1NUX0dMU0xfVkVSU0lPTl8zMDApCisrICAgICAgICB8fCAoKnByb2ZpbGUgPT0gR1NUX0dMU0xfUFJPRklMRV9DT1JFCisrICAgICAgICAgICAgJiYgKnZlcnNpb24gPj0gR1NUX0dMU0xfVkVSU0lPTl8xNTApKSB7CisrICAgICAgdG1wMiA9IF9tYW5nbGVfZnJhZ19jb2xvcl9kYXRhICh0bXApOworKyAgICAgIGdfZnJlZSAodG1wKTsKKysgICAgICB0bXAgPSB0bXAyOworKyAgICB9CisgICB9CistICBfbWFuZ2xlX3ZlcnNpb25fcHJvZmlsZV9mcm9tX2dsX2FwaSAoZ2xfYXBpLCB2ZXJzaW9uLCBwcm9maWxlKTsKKyAgIHJldHVybiB0bXA7CisgfQorIAorQEAgLTE4OTksMTUgKzE5MjksMTggQEAgX2NyZWF0ZV9zaGFkZXIgKEdzdEdMQ29sb3JDb252ZXJ0ICogY29udmVydCkKKyAgIGNvbnN0IGdjaGFyICpzdHJpbmdzWzJdOworICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICBHc3RHTEFQSSBnbF9hcGk7CisrICBnaW50IGdsX21ham9yLCBnbF9taW5vcjsKKyAgIGludCBpOworIAorICAgZ2xfYXBpID0gZ3N0X2dsX2NvbnRleHRfZ2V0X2dsX2FwaSAoY29udmVydC0+Y29udGV4dCk7CisrICBnc3RfZ2xfY29udGV4dF9nZXRfZ2xfdmVyc2lvbiAoY29udmVydC0+Y29udGV4dCwgJmdsX21ham9yLCAmZ2xfbWlub3IpOworIAorICAgcmV0ID0gZ3N0X2dsX3NoYWRlcl9uZXcgKGNvbnZlcnQtPmNvbnRleHQpOworIAorICAgdG1wID0KKyAgICAgICBfbWFuZ2xlX3NoYWRlciAodGV4dF92ZXJ0ZXhfc2hhZGVyLCBHTF9WRVJURVhfU0hBREVSLCBpbmZvLT50ZW1wbC0+dGFyZ2V0LAorLSAgICAgIGNvbnZlcnQtPnByaXYtPmZyb21fdGV4dHVyZV90YXJnZXQsIGdsX2FwaSwgJnZlcnNpb24sICZwcm9maWxlKTsKKysgICAgICBjb252ZXJ0LT5wcml2LT5mcm9tX3RleHR1cmVfdGFyZ2V0LCBnbF9hcGksIGdsX21ham9yLCBnbF9taW5vciwgJnZlcnNpb24sCisrICAgICAgJnByb2ZpbGUpOworIAorICAgdG1wMSA9IGdzdF9nbHNsX3ZlcnNpb25fcHJvZmlsZV90b19zdHJpbmcgKHZlcnNpb24sIHByb2ZpbGUpOworICAgdmVyc2lvbl9zdHIgPSBnX3N0cmR1cF9wcmludGYgKCIjdmVyc2lvbiAlc1xuIiwgdG1wMSk7CitAQCAtMTk0NSw5ICsxOTc4LDM3IEBAIF9jcmVhdGVfc2hhZGVyIChHc3RHTENvbG9yQ29udmVydCAqIGNvbnZlcnQpCisgICBpZiAoaW5mby0+dGVtcGwtPnVuaWZvcm1zKQorICAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwgaW5mby0+dGVtcGwtPnVuaWZvcm1zKTsKKyAKKy0gIGlmIChnbF9hcGkgJiBHU1RfR0xfQVBJX09QRU5HTDMpIHsKKy0gICAgZ19zdHJpbmdfYXBwZW5kX2MgKHN0ciwgJ1xuJyk7CistICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCAib3V0IHZlYzQgZnJhZ0NvbG9yO1xuIik7CisrICBnX3N0cmluZ19hcHBlbmRfYyAoc3RyLCAnXG4nKTsKKysKKysgIC8qIEdMIDMuMysgYW5kIEdMIEVTIDMueCAqLworKyAgaWYgKChwcm9maWxlID09IEdTVF9HTFNMX1BST0ZJTEVfQ09SRSAmJiB2ZXJzaW9uID49IEdTVF9HTFNMX1ZFUlNJT05fMzMwKQorKyAgICAgIHx8IChwcm9maWxlID09IEdTVF9HTFNMX1BST0ZJTEVfRVMgJiYgdmVyc2lvbiA+PSBHU1RfR0xTTF9WRVJTSU9OXzMwMCkpIHsKKysgICAgaWYgKGluZm8tPm91dF9uX3RleHR1cmVzID4gMSkgeworKyAgICAgIGdpbnQgaTsKKysKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+b3V0X25fdGV4dHVyZXM7IGkrKykgeworKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLAorKyAgICAgICAgICAgICJsYXlvdXQobG9jYXRpb24gPSAlZCkgb3V0IHZlYzQgZnJhZ0NvbG9yXyVkO1xuIiwgaSwgaSk7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCAibGF5b3V0IChsb2NhdGlvbiA9IDApIG91dCB2ZWM0IGZyYWdDb2xvcjtcbiIpOworKyAgICB9CisrICB9IGVsc2UgaWYgKHByb2ZpbGUgPT0gR1NUX0dMU0xfUFJPRklMRV9DT1JFCisrICAgICAgJiYgdmVyc2lvbiA+PSBHU1RfR0xTTF9WRVJTSU9OXzE1MCkgeworKyAgICAvKiBubyBsYXlvdXQgc3BlY2lmaWVycywgdXNlIGdsQmluZEZyYWdEYXRhTG9jYXRpb24gaW5zdGVhZCAqLworKyAgICBpZiAoaW5mby0+b3V0X25fdGV4dHVyZXMgPiAxKSB7CisrICAgICAgZ2ludCBpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5vdXRfbl90ZXh0dXJlczsgaSsrKSB7CisrICAgICAgICBnY2hhciAqdmFyX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJmcmFnQ29sb3JfJWQiLCBpKTsKKysgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIm91dCB2ZWM0ICVzO1xuIiwgdmFyX25hbWUpOworKyAgICAgICAgZ3N0X2dsX3NoYWRlcl9iaW5kX2ZyYWdfZGF0YV9sb2NhdGlvbiAocmV0LCBpLCB2YXJfbmFtZSk7CisrICAgICAgICBnX2ZyZWUgKHZhcl9uYW1lKTsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgZ19zdHJpbmdfYXBwZW5kIChzdHIsICJvdXQgdmVjNCBmcmFnQ29sb3I7XG4iKTsKKysgICAgICBnc3RfZ2xfc2hhZGVyX2JpbmRfZnJhZ19kYXRhX2xvY2F0aW9uIChyZXQsIDAsICJmcmFnQ29sb3IiKTsKKysgICAgfQorICAgfQorIAorICAgZm9yIChpID0gMDsgaSA8IE1BWF9GVU5DVElPTlM7IGkrKykgeworQEAgLTE5NTksNyArMjAyMCwxOSBAQCBfY3JlYXRlX3NoYWRlciAoR3N0R0xDb2xvckNvbnZlcnQgKiBjb252ZXJ0KQorICAgICBnX3N0cmluZ19hcHBlbmRfYyAoc3RyLCAnXG4nKTsKKyAgIH0KKyAKKy0gIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCAiXG52YXJ5aW5nIHZlYzIgdl90ZXhjb29yZDtcbnZvaWQgbWFpbiAodm9pZCkge1xuIik7CisrICB7CisrICAgIGNvbnN0IGdjaGFyICp2YXJ5aW5nID0gTlVMTDsKKysKKysgICAgaWYgKChwcm9maWxlID09IEdTVF9HTFNMX1BST0ZJTEVfRVMgJiYgdmVyc2lvbiA+PSBHU1RfR0xTTF9WRVJTSU9OXzMwMCkKKysgICAgICAgIHx8IChwcm9maWxlID09IEdTVF9HTFNMX1BST0ZJTEVfQ09SRQorKyAgICAgICAgICAgICYmIHZlcnNpb24gPj0gR1NUX0dMU0xfVkVSU0lPTl8xNTApKSB7CisrICAgICAgdmFyeWluZyA9ICJpbiI7CisrICAgIH0gZWxzZSB7CisrICAgICAgdmFyeWluZyA9ICJ2YXJ5aW5nIjsKKysgICAgfQorKyAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICJcbiVzIHZlYzIgdl90ZXhjb29yZDtcbnZvaWQgbWFpbiAodm9pZCkge1xuIiwKKysgICAgICAgIHZhcnlpbmcpOworKyAgfQorICAgaWYgKGluZm8tPmZyYWdfYm9keSkgeworICAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwgInZlYzIgdGV4Y29vcmQ7XG4iKTsKKyAgICAgaWYgKGNvbnZlcnQtPnByaXYtPmZyb21fdGV4dHVyZV90YXJnZXQgPT0gR1NUX0dMX1RFWFRVUkVfVEFSR0VUX1JFQ1RBTkdMRQorQEAgLTE5NzUsNyArMjA0OCw3IEBAIF9jcmVhdGVfc2hhZGVyIChHc3RHTENvbG9yQ29udmVydCAqIGNvbnZlcnQpCisgICB0bXAgPSBnX3N0cmluZ19mcmVlIChzdHIsIEZBTFNFKTsKKyAgIGluZm8tPmZyYWdfcHJvZyA9IF9tYW5nbGVfc2hhZGVyICh0bXAsIEdMX0ZSQUdNRU5UX1NIQURFUiwKKyAgICAgICBpbmZvLT50ZW1wbC0+dGFyZ2V0LCBjb252ZXJ0LT5wcml2LT5mcm9tX3RleHR1cmVfdGFyZ2V0LCBnbF9hcGksCistICAgICAgJnZlcnNpb24sICZwcm9maWxlKTsKKysgICAgICBnbF9tYWpvciwgZ2xfbWlub3IsICZ2ZXJzaW9uLCAmcHJvZmlsZSk7CisgICBnX2ZyZWUgKHRtcCk7CisgCisgICBzdHJpbmdzWzFdID0gaW5mby0+ZnJhZ19wcm9nOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA0LWdsY29sb3Jjb252ZXJ0LWRvbi10LXVzZS10aGUtcHJlZGVmaW5lZC12YXJpYWJsZS1uYW0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA0LWdsY29sb3Jjb252ZXJ0LWRvbi10LXVzZS10aGUtcHJlZGVmaW5lZC12YXJpYWJsZS1uYW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjc1ZjQwMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDQtZ2xjb2xvcmNvbnZlcnQtZG9uLXQtdXNlLXRoZS1wcmVkZWZpbmVkLXZhcmlhYmxlLW5hbS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGIwNjk2NzJhY2UyYjc2MmY0MDBjYTZkMzE4NTcxY2JlZGY1MTQxZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+CitEYXRlOiBUaHUsIDMxIE1hciAyMDE2IDIwOjAwOjM3ICsxMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBnbGNvbG9yY29udmVydDogZG9uJ3QgdXNlIHRoZSBwcmVkZWZpbmVkIHZhcmlhYmxlIG5hbWUKKyBzYW1wbGUKKworVXNpbmcgJ3NhbXBsZScgYXMgYSB2YXJpYWJsZSBuYW1lIGlzIGFuIGVycm9yIGluIEdMRVMzCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuOS4xXQorLS0tCisgZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYworaW5kZXggZjQ3OGZhYS4uYzIzNjI0ZiAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYworQEAgLTI2MSw5ICsyNjEsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNoYWRlcl90ZW1wbCB0ZW1wbF9SR0JfdG9fUExBTkFSX1lVViA9CisgICAgICIgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpbnQoY2hyb21hX3NhbXBsaW5nLnkpOyBqKyspIHtcbiIKKyAgICAgIiAgICAgIGludCBuID0gKGkrMSkqKGorMSk7XG4iCisgICAgICIgICAgICBkZWx0YS55ID0gZmxvYXQoaik7XG4iCistICAgICIgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh0ZXgsIChjaHJvbWFfcG9zICsgZGVsdGEpIC8gdW5ub3JtYWxpemF0aW9uKS4lYyVjJWMlYztcbiIKKysgICAgIiAgICAgIHZlYzQgcyA9IHRleHR1cmUyRCh0ZXgsIChjaHJvbWFfcG9zICsgZGVsdGEpIC8gdW5ub3JtYWxpemF0aW9uKS4lYyVjJWMlYztcbiIKKyAgICAgICAgICAgIC8qIHJvbGxpbmcgYXZlcmFnZSAqLworLSAgICAiICAgICAgdXZfdGV4ZWwgPSAoZmxvYXQobi0xKSAqIHV2X3RleGVsICsgc2FtcGxlKSAvIGZsb2F0KG4pO1xuIgorKyAgICAiICAgICAgdXZfdGV4ZWwgPSAoZmxvYXQobi0xKSAqIHV2X3RleGVsICsgcykgLyBmbG9hdChuKTtcbiIKKyAgICAgIiAgICB9XG4iCisgICAgICIgIH1cbiIKKyAgICAgIn1cbiIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwNS1nbHNoYWRlci1hZGQtZ2xCaW5kRnJhZ0RhdGFMb2NhdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDUtZ2xzaGFkZXItYWRkLWdsQmluZEZyYWdEYXRhTG9jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTdlOWQxYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDUtZ2xzaGFkZXItYWRkLWdsQmluZEZyYWdEYXRhTG9jYXRpb24ucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorRnJvbSAzODIyMTA4MDE4MTIyOWQ1MjA1MjJhMjBiY2IxNjYzY2ExOWY3YWZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgorRGF0ZTogVGh1LCAzMSBNYXIgMjAxNiAxOToyNTozMiArMTEwMAorU3ViamVjdDogW1BBVENIIDIvM10gZ2xzaGFkZXI6IGFkZCBnbEJpbmRGcmFnRGF0YUxvY2F0aW9uCisKK1RoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIGl0J3MgbmVlZGVkIGZvciBiaW5kaW5nIGluL291dCB2YXJpYWJsZXMgaW4gc2hhZGVycy4KK2UuZy4gZ2xzbCAxNTAgKGdsIDMuMikgZG9lc24ndCBzdXBwb3J0IHRoZSAnbGF5b3V0IChsb2NhdGlvbiA9ID8pJyBzcGVjaWZpZXJzIGluCit0aGUgc2hhZGVyIHNvdXJjZSBzbyB3ZSBoYXZlIHRvIGJpbmQgdGhlbSBvdXJzZWx2ZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuOS4xXQorLS0tCisgZ3N0LWxpYnMvZ3N0L2dsL2dscHJvdG90eXBlcy9zaGFkZXJzLmggfCAxMCArKysrKysrKysrCisgZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmMgICAgICAgICAgfCAyMCArKysrKysrKysrKysrKysrKysrKworIGdzdC1saWJzL2dzdC9nbC9nc3RnbHNoYWRlci5oICAgICAgICAgIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2dscHJvdG90eXBlcy9zaGFkZXJzLmggYi9nc3QtbGlicy9nc3QvZ2wvZ2xwcm90b3R5cGVzL3NoYWRlcnMuaAoraW5kZXggODE3ZTQ3OS4uNmQ4MjhkYiAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9nbHByb3RvdHlwZXMvc2hhZGVycy5oCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvZ2xwcm90b3R5cGVzL3NoYWRlcnMuaAorQEAgLTM2MiwzICszNjIsMTMgQEAgR1NUX0dMX0VYVF9GVU5DVElPTiAodm9pZCwgVW5pZm9ybU1hdHJpeDN4NGZ2LAorIEdTVF9HTF9FWFRfRlVOQ1RJT04gKHZvaWQsIFVuaWZvcm1NYXRyaXg0eDNmdiwKKyAgICAgICAgICAgICAgICAgICAgICAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKSkKKyBHU1RfR0xfRVhUX0VORCAoKQorKworK0dTVF9HTF9FWFRfQkVHSU4gKGJpbmRfZnJhZ19kYXRhLAorKyAgICAgICAgICAgICAgICAgIEdTVF9HTF9BUElfT1BFTkdMIHwgR1NUX0dMX0FQSV9PUEVOR0wzLAorKyAgICAgICAgICAgICAgICAgIDMsIDAsCisrICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsCisrICAgICAgICAgICAgICAgICAgIlwwIiwKKysgICAgICAgICAgICAgICAgICAiXDAiKQorK0dTVF9HTF9FWFRfRlVOQ1RJT04gKHZvaWQsIEJpbmRGcmFnRGF0YUxvY2F0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIgKiBuYW1lKSkKKytHU1RfR0xfRVhUX0VORCAoKQorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbHNoYWRlci5jIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmMKK2luZGV4IDlkOTY3ODQuLjlmMDkyMzYgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xzaGFkZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmMKK0BAIC0xMzA2LDMgKzEzMDYsMjMgQEAgZ3N0X2dsX3NoYWRlcl9iaW5kX2F0dHJpYnV0ZV9sb2NhdGlvbiAoR3N0R0xTaGFkZXIgKiBzaGFkZXIsIEdMdWludCBpbmRleCwKKyAKKyAgIGdsLT5CaW5kQXR0cmliTG9jYXRpb24gKHByaXYtPnByb2dyYW1faGFuZGxlLCBpbmRleCwgbmFtZSk7CisgfQorKworK3ZvaWQKKytnc3RfZ2xfc2hhZGVyX2JpbmRfZnJhZ19kYXRhX2xvY2F0aW9uIChHc3RHTFNoYWRlciAqIHNoYWRlciwKKysgICAgZ3VpbnQgaW5kZXgsIGNvbnN0IGdjaGFyICogbmFtZSkKKyt7CisrICBHc3RHTFNoYWRlclByaXZhdGUgKnByaXY7CisrICBHc3RHTEZ1bmNzICpnbDsKKysKKysgIGdfcmV0dXJuX2lmX2ZhaWwgKHNoYWRlciAhPSBOVUxMKTsKKysgIGlmICghX2Vuc3VyZV9wcm9ncmFtIChzaGFkZXIpKQorKyAgICBnX3JldHVybl9pZl9mYWlsIChzaGFkZXItPnByaXYtPnByb2dyYW1faGFuZGxlKTsKKysgIHByaXYgPSBzaGFkZXItPnByaXY7CisrICBnbCA9IHNoYWRlci0+Y29udGV4dC0+Z2xfdnRhYmxlOworKyAgZ19yZXR1cm5faWZfZmFpbCAoZ2wtPkJpbmRGcmFnRGF0YUxvY2F0aW9uKTsKKysKKysgIEdTVF9UUkFDRV9PQkpFQ1QgKHNoYWRlciwgImJpbmRpbmcgcHJvZ3JhbSAlaSBmcmFnIGRhdGEgXCclc1wnIGxvY2F0aW9uICVpIiwKKysgICAgICAoaW50KSBwcml2LT5wcm9ncmFtX2hhbmRsZSwgbmFtZSwgaW5kZXgpOworKworKyAgZ2wtPkJpbmRGcmFnRGF0YUxvY2F0aW9uIChwcml2LT5wcm9ncmFtX2hhbmRsZSwgaW5kZXgsIG5hbWUpOworK30KK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xzaGFkZXIuaCBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbHNoYWRlci5oCitpbmRleCAyMTQxMGUyLi4yMjAwYjg5IDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmgKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbHNoYWRlci5oCitAQCAtMTA0LDYgKzEwNCw3IEBAIHZvaWQgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV9tYXRyaXhfNHgzZnYgKEdzdEdMU2hhZGVyICpzaGFkZXIsIGNvbnN0IGdjaGFyICpuCisgCisgZ2ludCBnc3RfZ2xfc2hhZGVyX2dldF9hdHRyaWJ1dGVfbG9jYXRpb24gIChHc3RHTFNoYWRlciAqc2hhZGVyLCBjb25zdCBnY2hhciAqbmFtZSk7Cisgdm9pZCBnc3RfZ2xfc2hhZGVyX2JpbmRfYXR0cmlidXRlX2xvY2F0aW9uIChHc3RHTFNoYWRlciAqIHNoYWRlciwgZ3VpbnQgaW5kZXgsIGNvbnN0IGdjaGFyICogbmFtZSk7Cisrdm9pZCBnc3RfZ2xfc2hhZGVyX2JpbmRfZnJhZ19kYXRhX2xvY2F0aW9uIChHc3RHTFNoYWRlciAqIHNoYWRlciwgZ3VpbnQgaW5kZXgsIGNvbnN0IGdjaGFyICogbmFtZSk7CisgCisgR19FTkRfREVDTFMKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwNi1nbGNvbG9yY29udmVydC1HTEVTMy1kZXByZWNhdGVzLXRleHR1cmUyRC1hbmQtaXQtZG9lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwNi1nbGNvbG9yY29udmVydC1HTEVTMy1kZXByZWNhdGVzLXRleHR1cmUyRC1hbmQtaXQtZG9lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5ZWY0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA2LWdsY29sb3Jjb252ZXJ0LUdMRVMzLWRlcHJlY2F0ZXMtdGV4dHVyZTJELWFuZC1pdC1kb2UucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSA3NjRmZDY5Zjg0ODJlY2E5ZjkyNWNlZmU3MmViYWUwOTBhZTU5ZDQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IFR1ZSwgMTkgQXByIDIwMTYgMTk6Mjc6MzMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIGdsY29sb3Jjb252ZXJ0OiBHTEVTMyBkZXByZWNhdGVzIHRleHR1cmUyRCgpIGFuZCBpdCBkb2VzCisgbm90IHdvcmsgYXQgYWxsIGluIG5ld2VyIHZlcnNpb25zIHRoYW4gMy4zCisKK1VzZSB0aGUgbmV3ZXIgdGV4dHVyZSgpIGZ1bmN0aW9uIGluc3RlYWQuIFRoaXMgZml4ZXMgZ2xpbWFnZXNpbmsgYW5kIG90aGVyCit0aGluZ3Mgb24gdmFyaW91cyBBbmRyb2lkIGRldmljZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuOS4xXQorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1MjY2CistLS0KKyBnc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYyB8IDcgKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCitpbmRleCBjMjM2MjRmLi5mNDcyZDVkIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCitAQCAtMTcxNiw3ICsxNzE2LDcgQEAgX3VuYmluZF9idWZmZXIgKEdzdEdMQ29sb3JDb252ZXJ0ICogY29udmVydCkKKyAKKyBzdGF0aWMgZ2NoYXIgKgorIF9tYW5nbGVfdGV4dHVyZV9hY2Nlc3MgKGNvbnN0IGdjaGFyICogc3RyLCBHc3RHTFRleHR1cmVUYXJnZXQgZnJvbSwKKy0gICAgR3N0R0xUZXh0dXJlVGFyZ2V0IHRvLCBHc3RHTEFQSSBnbF9hcGkpCisrICAgIEdzdEdMVGV4dHVyZVRhcmdldCB0bywgR3N0R0xBUEkgZ2xfYXBpLCBndWludCBnbF9tYWpvciwgZ3VpbnQgZ2xfbWlub3IpCisgeworICAgY29uc3QgZ2NoYXIgKmZyb21fc3RyID0gTlVMTCwgKnRvX3N0ciA9IE5VTEw7CisgICBnY2hhciAqcmV0LCAqdG1wOworQEAgLTE3MzAsNyArMTczMCw4IEBAIF9tYW5nbGVfdGV4dHVyZV9hY2Nlc3MgKGNvbnN0IGdjaGFyICogc3RyLCBHc3RHTFRleHR1cmVUYXJnZXQgZnJvbSwKKyAgIGlmIChmcm9tID09IEdTVF9HTF9URVhUVVJFX1RBUkdFVF9FWFRFUk5BTF9PRVMpCisgICAgIGZyb21fc3RyID0gInRleHR1cmUyRCI7CisgCistICBpZiAoZ2xfYXBpICYgR1NUX0dMX0FQSV9PUEVOR0wzKSB7CisrICBpZiAoKGdsX2FwaSAmIEdTVF9HTF9BUElfT1BFTkdMMykgfHwgKGdsX2FwaSAmIEdTVF9HTF9BUElfR0xFUzIKKysgICAgICAgICAgJiYgZ2xfbWFqb3IgPj0gMykpIHsKKyAgICAgdG9fc3RyID0gInRleHR1cmUiOworICAgfSBlbHNlIHsKKyAgICAgaWYgKHRvID09IEdTVF9HTF9URVhUVVJFX1RBUkdFVF8yRCkKK0BAIC0xODk4LDcgKzE4OTksNyBAQCBfbWFuZ2xlX3NoYWRlciAoY29uc3QgZ2NoYXIgKiBzdHIsIGd1aW50IHNoYWRlcl90eXBlLCBHc3RHTFRleHR1cmVUYXJnZXQgZnJvbSwKKyAKKyAgIF9tYW5nbGVfdmVyc2lvbl9wcm9maWxlX2Zyb21fZ2xfYXBpIChnbF9hcGksIGdsX21ham9yLCBnbF9taW5vciwgdmVyc2lvbiwKKyAgICAgICBwcm9maWxlKTsKKy0gIHRtcCA9IF9tYW5nbGVfdGV4dHVyZV9hY2Nlc3MgKHN0ciwgZnJvbSwgdG8sIGdsX2FwaSk7CisrICB0bXAgPSBfbWFuZ2xlX3RleHR1cmVfYWNjZXNzIChzdHIsIGZyb20sIHRvLCBnbF9hcGksIGdsX21ham9yLCBnbF9taW5vcik7CisgICB0bXAyID0gX21hbmdsZV9zYW1wbGVyX3R5cGUgKHRtcCwgZnJvbSwgdG8pOworICAgZ19mcmVlICh0bXApOworICAgdG1wID0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwOC1nbC1pbXBsZW1lbnQtR3N0R0xNZW1vcnlFR0wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA4LWdsLWltcGxlbWVudC1Hc3RHTE1lbW9yeUVHTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjczODFjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwOC1nbC1pbXBsZW1lbnQtR3N0R0xNZW1vcnlFR0wucGF0Y2gKQEAgLTAsMCArMSw0OTUgQEAKK0Zyb20gODA2YmJlNzViMGI2OTQ3ZjU4OWJjZTM5NjBjMjhmZWU1MWI1YzZjMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEd3YW5nIFlvb24gSHdhbmcgPHlvb25AaWdhbGlhLmNvbT4KK0RhdGU6IFRodSwgMjEgSmFuIDIwMTYgMjI6MTg6MTcgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2w6IGltcGxlbWVudCBHc3RHTE1lbW9yeUVHTAorCitCZWNhdXNlIGN1cnJlbnQgR3N0RUdMSW1hZ2VNZW1vcnkgZG9lcyBub3QgaW5oZXJpdCBHc3RHTE1lbW9yeSwgR0xVcGxvYWQKK2FsbG9jYXRlcyBhZGRpdGlvbmFsIEdMTWVtb3J5IGFuZCB1cGxvYWQgdGhlIGRlY29kZWQgY29udGVudHMgZnJvbSB0aGUgZGVjb2Rlcgord2hpY2ggdXNlcyBFR0xJbWFnZSAoZS5nLiBnc3Qtb214IGluIFJQaSkuCisKK1RoaXMgd29yayBhZGRzIEdzdEdMTWVtb3J5RUdMIHRvIGF2b2lkIHRoaXMgb3ZlcmhlYWQuIERlY29kZXJzIGFsbG9jYXRlCitHc3RHTE1lbW9yeUVHTCBhbmQgZGVjb2RlIGl0cyBjb250ZW50cyB0byB0aGUgRUdMSW1hZ2Ugb2YgR3N0R0xNZW1vcnlFR0wuICBBbmQKK0dMVXBsb2FkIHVzZXMgdGhpcyBtZW1vcnkgd2l0aG91dCBhbGxvY2F0aW9uIG9mIGFkZGl0aW9uYWwgdGV4dHVyZXMgYW5kIGJsaXQKK29wZXJhdGlvbnMuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA5MTYKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworIGdzdC1saWJzL2dzdC9nbC9lZ2wvTWFrZWZpbGUuYW0gICAgICAgIHwgICAyICsKKyBnc3QtbGlicy9nc3QvZ2wvZWdsL2dzdGdsZGlzcGxheV9lZ2wuYyB8ICAgMiArCisgZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5jICAgfCAyNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5oICAgfCAxMDggKysrKysrKysrKysrKysrCisgZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsX2Z3ZC5oICAgICAgICAgICAgfCAgIDQgKworIGdzdC1saWJzL2dzdC9nbC9nc3RnbGRpc3BsYXkuYyAgICAgICAgIHwgICAyICsKKyBnc3QtbGlicy9nc3QvZ2wvZ3N0Z2x1cGxvYWQuYyAgICAgICAgICB8ICAgOCArKworIDcgZmlsZXMgY2hhbmdlZCwgMzY3IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGdzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuaAorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9NYWtlZmlsZS5hbSBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvTWFrZWZpbGUuYW0KK2luZGV4IGI4MDgxNzguLjg3OGYxNmMgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvZ2wvZWdsL01ha2VmaWxlLmFtCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvZWdsL01ha2VmaWxlLmFtCitAQCAtNSw2ICs1LDcgQEAgbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ3N0Z2wtZWdsLmxhCisgbGliZ3N0Z2xfZWdsX2xhX1NPVVJDRVMgPSBcCisgCWdzdGdsZGlzcGxheV9lZ2wuYyBcCisgCWdzdGdsY29udGV4dF9lZ2wuYyBcCisrCWdzdGdsbWVtb3J5ZWdsLmMgXAorIAlnc3RlZ2xpbWFnZW1lbW9yeS5jCisgCisgbm9pbnN0X0hFQURFUlMgPQorQEAgLTEzLDYgKzE0LDcgQEAgbGliZ3N0Z2xfZWdsaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AL2dzdC9nbC9lZ2wKKyBsaWJnc3RnbF9lZ2xpbmNsdWRlX0hFQURFUlMgPSBcCisgCWdzdGdsZGlzcGxheV9lZ2wuaCBcCisgCWdzdGdsY29udGV4dF9lZ2wuaCBcCisrCWdzdGdsbWVtb3J5ZWdsLmggXAorIAlnc3RlZ2xpbWFnZW1lbW9yeS5oIFwKKyAJZ3N0ZWdsLmgKKyAKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZWdsL2dzdGdsZGlzcGxheV9lZ2wuYyBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5jCitpbmRleCA5YWNmNGYwLi4yMDgxNmMyIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmMKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5jCitAQCAtMjQsNiArMjQsNyBAQAorIAorICNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGdsZGlzcGxheV9lZ2wuaD4KKyAjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RlZ2xpbWFnZW1lbW9yeS5oPgorKyNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGdsbWVtb3J5ZWdsLmg+CisgCisgR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2dsX2Rpc3BsYXlfZGVidWcpOworICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9nbF9kaXNwbGF5X2RlYnVnCitAQCAtNTEsNiArNTIsNyBAQCBnc3RfZ2xfZGlzcGxheV9lZ2xfaW5pdCAoR3N0R0xEaXNwbGF5RUdMICogZGlzcGxheV9lZ2wpCisgICBkaXNwbGF5X2VnbC0+Zm9yZWlnbl9kaXNwbGF5ID0gRkFMU0U7CisgCisgICBnc3RfZWdsX2ltYWdlX21lbW9yeV9pbml0ICgpOworKyAgZ3N0X2dsX21lbW9yeV9lZ2xfaW5pdF9vbmNlICgpOworIH0KKyAKKyBzdGF0aWMgdm9pZAorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuYyBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAzY2Y0MzIKKy0tLSAvZGV2L251bGwKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuYworQEAgLTAsMCArMSwyNDEgQEAKKysvKgorKyAqIEdTdHJlYW1lcgorKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLgorKyAqICAgQGF1dGhvcjogU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisrICogQ29weXJpZ2h0IChDKSAyMDE0IEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAZ21haWwuY29tPgorKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEKKysgKiAgICBBdXRob3I6IEd3YW5nIFlvb24gSHdhbmcgPHlvb25AaWdhbGlhLmNvbT4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKysgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKKysgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKysgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuaD4KKysKKytzdGF0aWMgR3N0QWxsb2NhdG9yICpfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3I7CisrCisrR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9HTF9NRU1PUlkpOworKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfR0xfTUVNT1JZCisrCisrI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X2dsX21lbW9yeV9lZ2xfYWxsb2NhdG9yX3BhcmVudF9jbGFzcworK0dfREVGSU5FX1RZUEUgKEdzdEdMTWVtb3J5RUdMQWxsb2NhdG9yLCBnc3RfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3IsCisrICAgIEdTVF9UWVBFX0dMX01FTU9SWV9BTExPQ0FUT1IpOworKworK2dib29sZWFuCisrZ3N0X2lzX2dsX21lbW9yeV9lZ2wgKEdzdE1lbW9yeSAqIG1lbSkKKyt7CisrICByZXR1cm4gbWVtICE9IE5VTEwgJiYgbWVtLT5hbGxvY2F0b3IgIT0gTlVMTAorKyAgICAgICYmIGdfdHlwZV9pc19hIChHX09CSkVDVF9UWVBFIChtZW0tPmFsbG9jYXRvciksCisrICAgICAgR1NUX1RZUEVfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1IpOworK30KKysKKytzdGF0aWMgR3N0R0xNZW1vcnlFR0wgKgorK19nbF9tZW1fZ2V0X3BhcmVudCAoR3N0R0xNZW1vcnlFR0wgKiBnbF9tZW0pCisreworKyAgR3N0R0xNZW1vcnlFR0wgKnBhcmVudCA9IChHc3RHTE1lbW9yeUVHTCAqKWdsX21lbS0+bWVtLm1lbS5tZW0ucGFyZW50OworKyAgcmV0dXJuIHBhcmVudCA/IHBhcmVudCA6IGdsX21lbTsKKyt9CisrCisrRUdMSW1hZ2VLSFIKKytnc3RfZ2xfbWVtb3J5X2VnbF9nZXRfaW1hZ2UgKEdzdEdMTWVtb3J5RUdMICogbWVtKQorK3sKKysgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfaXNfZ2xfbWVtb3J5X2VnbCAoR1NUX01FTU9SWV9DQVNUIChtZW0pKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTk9fSU1BR0VfS0hSKTsKKysgIHJldHVybiBfZ2xfbWVtX2dldF9wYXJlbnQobWVtKS0+aW1hZ2U7CisrfQorKworK0VHTERpc3BsYXkKKytnc3RfZ2xfbWVtb3J5X2VnbF9nZXRfZGlzcGxheSAoR3N0R0xNZW1vcnlFR0wgKiBtZW0pCisreworKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9pc19nbF9tZW1vcnlfZWdsIChHU1RfTUVNT1JZX0NBU1QgKG1lbSkpLCBOVUxMKTsKKysgIHJldHVybiBHU1RfR0xfQ09OVEVYVF9FR0woX2dsX21lbV9nZXRfcGFyZW50KG1lbSkpLT5lZ2xfZGlzcGxheTsKKyt9CisrCisrR3N0VmlkZW9HTFRleHR1cmVPcmllbnRhdGlvbgorK2dzdF9nbF9tZW1vcnlfZWdsX2dldF9vcmllbnRhdGlvbiAoR3N0R0xNZW1vcnlFR0wgKiBtZW0pCisreworKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9pc19nbF9tZW1vcnlfZWdsIChHU1RfTUVNT1JZX0NBU1QgKG1lbSkpLAorKyAgICAgIEdTVF9WSURFT19HTF9URVhUVVJFX09SSUVOVEFUSU9OX1hfTk9STUFMX1lfTk9STUFMKTsKKysKKysgIHJldHVybiBfZ2xfbWVtX2dldF9wYXJlbnQobWVtKS0+b3JpZW50YXRpb247CisrfQorKworK3ZvaWQKKytnc3RfZ2xfbWVtb3J5X2VnbF9zZXRfb3JpZW50YXRpb24gKEdzdEdMTWVtb3J5RUdMICogbWVtLAorKyAgICBHc3RWaWRlb0dMVGV4dHVyZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorK3sKKysgIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9pc19nbF9tZW1vcnlfZWdsIChHU1RfTUVNT1JZX0NBU1QgKG1lbSkpKTsKKysKKysgIF9nbF9tZW1fZ2V0X3BhcmVudChtZW0pLT5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOworK30KKysKKytzdGF0aWMgR3N0TWVtb3J5ICoKKytfZ2xfbWVtX2FsbG9jIChHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGdzaXplIHNpemUsCisrICAgICAgICAgICAgICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKKyt7CisrICBnX3dhcm5pbmcgKCJVc2UgZ3N0X2dsX2Jhc2VfbWVtb3J5X2FsbG9jYXRvcl9hbGxvYygpIHRvIGFsbG9jYXRlIGZyb20gdGhpcyAiCisrICAgICAgIkdzdEdMTWVtb3J5RUdMIGFsbG9jYXRvciIpOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyB2b2lkCisrX2dsX21lbV9kZXN0cm95IChHc3RHTE1lbW9yeUVHTCAqIG1lbSkKKyt7CisrICAvKiBTaGFyZWQgbWVtb3J5IHNob3VsZCBub3QgZGVzdHJveSBhbGwgdGhlIGRhdGEgKi8KKysgIGlmICghbWVtLT5tZW0ubWVtLm1lbS5wYXJlbnQpIHsKKysgICAgR3N0R0xDb250ZXh0RUdMICpjb250ZXh0ID0gR1NUX0dMX0NPTlRFWFRfRUdMKG1lbS0+bWVtLm1lbS5jb250ZXh0KTsKKysgICAgY29udGV4dC0+ZWdsRGVzdHJveUltYWdlIChjb250ZXh0LT5lZ2xfZGlzcGxheSwgbWVtLT5pbWFnZSk7CisrICB9CisrCisrICBHU1RfR0xfQkFTRV9NRU1PUllfQUxMT0NBVE9SX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kZXN0cm95ICgoR3N0R0xCYXNlTWVtb3J5CisrICAgICAgICAgICopIG1lbSk7CisrfQorKworK3N0YXRpYyB2b2lkCisrX2dsX21lbV9pbml0IChHc3RHTE1lbW9yeUVHTCAqIG1lbSwgR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLAorKyAgICBHc3RNZW1vcnkgKiBwYXJlbnQsIEdzdEdMQ29udGV4dCAqIGNvbnRleHQsIEdzdEdMVGV4dHVyZVRhcmdldCB0YXJnZXQsCisrICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMsIEdzdFZpZGVvSW5mbyAqIGluZm8sCisrICAgIGd1aW50IHBsYW5lLCBHc3RWaWRlb0FsaWdubWVudCAqIHZhbGlnbiwgZ3BvaW50ZXIgdXNlcl9kYXRhLAorKyAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpCisreworKyAgZ3N0X2dsX21lbW9yeV9pbml0ICgoR3N0R0xNZW1vcnkgKikgbWVtLCBhbGxvY2F0b3IsIHBhcmVudCwKKysgICAgICBjb250ZXh0LCB0YXJnZXQsIHBhcmFtcywgaW5mbywgcGxhbmUsIHZhbGlnbiwgdXNlcl9kYXRhLCBub3RpZnkpOworK30KKysKKytzdGF0aWMgR3N0R0xNZW1vcnlFR0wgKgorK19nbF9tZW1fZWdsX2FsbG9jIChHc3RHTEJhc2VNZW1vcnlBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCisrICAgIEdzdEdMVmlkZW9BbGxvY2F0aW9uUGFyYW1zICogcGFyYW1zKQorK3sKKysgIGd1aW50IGFsbG9jX2ZsYWdzID0gcGFyYW1zLT5wYXJlbnQuYWxsb2NfZmxhZ3M7CisrICBHc3RHTE1lbW9yeUVHTCAqbWVtOworKworKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFsbG9jX2ZsYWdzICYgR1NUX0dMX0FMTE9DQVRJT05fUEFSQU1TX0FMTE9DX0ZMQUdfVklERU8sCisrICAgICAgTlVMTCk7CisrICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGFsbG9jX2ZsYWdzICYKKysgICAgICBHU1RfR0xfQUxMT0NBVElPTl9QQVJBTVNfQUxMT0NfRkxBR19XUkFQX0dQVV9IQU5ETEUpID09IDAsIE5VTEwpOworKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChhbGxvY19mbGFncyAmCisrICAgICAgR1NUX0dMX0FMTE9DQVRJT05fUEFSQU1TX0FMTE9DX0ZMQUdfV1JBUF9TWVNNRU0pID09IDAsIE5VTEwpOworKworKyAgbWVtID0gZ19uZXcwIChHc3RHTE1lbW9yeUVHTCwgMSk7CisrICBtZW0tPmltYWdlID0gRUdMX05PX0lNQUdFX0tIUjsKKysKKysgIF9nbF9tZW1faW5pdCAobWVtLCBHU1RfQUxMT0NBVE9SX0NBU1QgKGFsbG9jYXRvciksIE5VTEwsCisrICAgICAgcGFyYW1zLT5wYXJlbnQuY29udGV4dCwgcGFyYW1zLT50YXJnZXQsIHBhcmFtcy0+cGFyZW50LmFsbG9jX3BhcmFtcywKKysgICAgICBwYXJhbXMtPnZfaW5mbywgcGFyYW1zLT5wbGFuZSwgcGFyYW1zLT52YWxpZ24sIHBhcmFtcy0+cGFyZW50LnVzZXJfZGF0YSwKKysgICAgICBwYXJhbXMtPnBhcmVudC5ub3RpZnkpOworKworKyAgcmV0dXJuIG1lbTsKKyt9CisrCisrc3RhdGljIGdib29sZWFuCisrX2dsX21lbV9jcmVhdGUgKEdzdEdMTWVtb3J5RUdMICogZ2xfbWVtLCBHRXJyb3IgKiogZXJyb3IpCisreworKyAgR3N0R0xDb250ZXh0RUdMICpjb250ZXh0ID0gR1NUX0dMX0NPTlRFWFRfRUdMIChnbF9tZW0tPm1lbS5tZW0uY29udGV4dCk7CisrICBHc3RHTEJhc2VNZW1vcnlBbGxvY2F0b3JDbGFzcyAqYWxsb2NfY2xhc3M7CisrCisrICBpZiAoIWdzdF9nbF9jb250ZXh0X2NoZWNrX2ZlYXR1cmUgKEdTVF9HTF9DT05URVhUIChjb250ZXh0KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVHTF9LSFJfaW1hZ2VfYmFzZSIpKSB7CisrICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX0dMX0NPTlRFWFRfRVJST1IsIEdTVF9HTF9DT05URVhUX0VSUk9SX1dST05HX0FQSSwKKysgICAgICAgICAgICAgICAgICJFR0xfS0hSX2ltYWdlX2Jhc2UgaXMgbm90IHN1cHBvcnRlZCIpOworKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICBhbGxvY19jbGFzcyA9IEdTVF9HTF9CQVNFX01FTU9SWV9BTExPQ0FUT1JfQ0xBU1MgKHBhcmVudF9jbGFzcyk7CisrICBpZiAoIWFsbG9jX2NsYXNzLT5jcmVhdGUgKChHc3RHTEJhc2VNZW1vcnkgKikgZ2xfbWVtLCBlcnJvcikpCisrICAgIHJldHVybiBGQUxTRTsKKysKKysgIGdsX21lbS0+aW1hZ2UgPSBjb250ZXh0LT5lZ2xDcmVhdGVJbWFnZSAoY29udGV4dC0+ZWdsX2Rpc3BsYXksCisrICAgICAgY29udGV4dC0+ZWdsX2NvbnRleHQsIEVHTF9HTF9URVhUVVJFXzJEX0tIUiwKKysgICAgICAoRUdMQ2xpZW50QnVmZmVyKSBHU0laRV9UT19QT0lOVEVSIChnbF9tZW0tPm1lbS50ZXhfaWQpLCBOVUxMKTsKKysKKysgIEdTVF9UUkFDRSAoIkdlbmVyYXRpbmcgRUdMSW1hZ2UgaGFuZGxlOiVwIGZyb20gYSB0ZXh0dXJlOiV1IiwKKysgICAgICAgICAgICAgIGdsX21lbS0+aW1hZ2UsIGdsX21lbS0+bWVtLnRleF9pZCk7CisrCisrICBpZiAoZWdsR2V0RXJyb3IgKCkgIT0gRUdMX1NVQ0NFU1MpIHsKKysgICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfR0xfQ09OVEVYVF9FUlJPUiwgR1NUX0dMX0NPTlRFWFRfRVJST1JfRkFJTEVELAorKyAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgRUdMSW1hZ2UiKTsKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworK3N0YXRpYyBHc3RNZW1vcnkgKgorK19nbF9tZW1fY29weSAoR3N0R0xNZW1vcnlFR0wgKiBzcmMsIGdzc2l6ZSBvZmZzZXQsIGdzc2l6ZSBzaXplKQorK3sKKysgIEdTVF9DQVRfRVJST1IgKEdTVF9DQVRfR0xfTUVNT1JZLCAiR3N0R0xNZW1vcnlFR0wgZG9lcyBub3Qgc3VwcG9ydCBjb3B5Iik7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnc3RfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3JfY2xhc3NfaW5pdCAoR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3JDbGFzcyAqIGtsYXNzKQorK3sKKysgIEdzdEdMQmFzZU1lbW9yeUFsbG9jYXRvckNsYXNzICpnbF9iYXNlOworKyAgR3N0R0xNZW1vcnlBbGxvY2F0b3JDbGFzcyAqZ2xfdGV4OworKyAgR3N0QWxsb2NhdG9yQ2xhc3MgKmFsbG9jYXRvcl9jbGFzczsKKysKKysgIGdsX3RleCA9IChHc3RHTE1lbW9yeUFsbG9jYXRvckNsYXNzICopIGtsYXNzOworKyAgZ2xfYmFzZSA9IChHc3RHTEJhc2VNZW1vcnlBbGxvY2F0b3JDbGFzcyAqKSBrbGFzczsKKysgIGFsbG9jYXRvcl9jbGFzcyA9IChHc3RBbGxvY2F0b3JDbGFzcyAqKSBrbGFzczsKKysKKysgIGdsX2Jhc2UtPmFsbG9jID0gKEdzdEdMQmFzZU1lbW9yeUFsbG9jYXRvckFsbG9jRnVuY3Rpb24pIF9nbF9tZW1fZWdsX2FsbG9jOworKyAgZ2xfYmFzZS0+Y3JlYXRlID0gKEdzdEdMQmFzZU1lbW9yeUFsbG9jYXRvckNyZWF0ZUZ1bmN0aW9uKSBfZ2xfbWVtX2NyZWF0ZTsKKysgIGdsX2Jhc2UtPmRlc3Ryb3kgPSAoR3N0R0xCYXNlTWVtb3J5QWxsb2NhdG9yRGVzdHJveUZ1bmN0aW9uKSBfZ2xfbWVtX2Rlc3Ryb3k7CisrICBnbF90ZXgtPmNvcHkgPSAoR3N0R0xCYXNlTWVtb3J5QWxsb2NhdG9yQ29weUZ1bmN0aW9uKSBfZ2xfbWVtX2NvcHk7CisrCisrICBhbGxvY2F0b3JfY2xhc3MtPmFsbG9jID0gX2dsX21lbV9hbGxvYzsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnc3RfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3JfaW5pdCAoR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3IgKiBhbGxvY2F0b3IpCisreworKyAgR3N0QWxsb2NhdG9yICphbGxvYyA9IEdTVF9BTExPQ0FUT1JfQ0FTVCAoYWxsb2NhdG9yKTsKKysKKysgIGFsbG9jLT5tZW1fdHlwZSA9IEdTVF9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUl9OQU1FOworKworKyAgR1NUX09CSkVDVF9GTEFHX1NFVCAoYWxsb2NhdG9yLCBHU1RfQUxMT0NBVE9SX0ZMQUdfQ1VTVE9NX0FMTE9DKTsKKyt9CisrCisrLyoqCisrICogZ3N0X2dsX21lbW9yeV9lZ2xfaW5pdF9vbmNlOgorKyAqCisrICogSW5pdGlhbGl6ZXMgdGhlIEdMIE1lbW9yeSBhbGxvY2F0b3IuIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uCisrICogbXVsdGlwbGUgdGltZXMuICBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgR3N0R0xNZW1vcnlFR0wgb3BlcmF0aW9uLgorKyAqLworK3ZvaWQKKytnc3RfZ2xfbWVtb3J5X2VnbF9pbml0X29uY2UgKHZvaWQpCisreworKyAgc3RhdGljIHZvbGF0aWxlIGdzaXplIF9pbml0ID0gMDsKKysKKysgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJl9pbml0KSkgeworKyAgICBnc3RfZ2xfbWVtb3J5X2luaXRfb25jZSAoKTsKKysKKysgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKEdTVF9DQVRfR0xfTUVNT1JZLCAiZ2xtZW1vcnkiLCAwLAorKyAgICAgICAgIk9wZW5HTCBUZXh0dXJlIHdpdGggRUdMSW1hZ2UgbWVtb3J5Iik7CisrCisrICAgIF9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvciA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1IsIE5VTEwpOworKworKyAgICBnc3RfYWxsb2NhdG9yX3JlZ2lzdGVyIChHU1RfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1JfTkFNRSwKKysgICAgICAgIGdzdF9vYmplY3RfcmVmIChfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3IpKTsKKysgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZfaW5pdCwgMSk7CisrICB9CisrfQorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuaCBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyNTZkMzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuaAorQEAgLTAsMCArMSwxMDggQEAKKysvKgorKyAqIEdTdHJlYW1lcgorKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLgorKyAqICAgQGF1dGhvcjogU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisrICogQ29weXJpZ2h0IChDKSAyMDE0IEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAZ21haWwuY29tPgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAorKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKyAqLworKworKyNpZm5kZWYgX0dTVF9HTF9NRU1PUllfRUdMX0hfCisrI2RlZmluZSBfR1NUX0dMX01FTU9SWV9FR0xfSF8KKysKKysjaW5jbHVkZSA8Z3N0L2dzdC5oPgorKyNpbmNsdWRlIDxnc3QvZ3N0YWxsb2NhdG9yLmg+CisrI2luY2x1ZGUgPGdzdC9nc3RtZW1vcnkuaD4KKysjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisrCisrI2luY2x1ZGUgPGdzdC9nbC9nbC5oPgorKyNpbmNsdWRlICJnc3RnbGNvbnRleHRfZWdsLmgiCisrCisrI2luY2x1ZGUgPGdzdC9nbC9nc3RnbG1lbW9yeS5oPgorKworK0dfQkVHSU5fREVDTFMKKysKKysjZGVmaW5lIEdTVF9UWVBFX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SIChnc3RfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3JfZ2V0X3R5cGUoKSkKKytHVHlwZSBnc3RfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3JfZ2V0X3R5cGUodm9pZCk7CisrCisrI2RlZmluZSBHU1RfSVNfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1Iob2JqKSAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1IpKQorKyNkZWZpbmUgR1NUX0lTX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1IpKQorKyNkZWZpbmUgR1NUX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1IsIEdzdEdMTWVtb3J5RUdMQWxsb2NhdG9yQ2xhc3MpKQorKyNkZWZpbmUgR1NUX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SLCBHc3RHTE1lbW9yeUVHTEFsbG9jYXRvcikpCisrI2RlZmluZSBHU1RfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1JfQ0xBU1Moa2xhc3MpICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUiwgR3N0R0xBbGxvY2F0b3JDbGFzcykpCisrI2RlZmluZSBHU1RfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1JfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RHTE1lbW9yeUVHTEFsbG9jYXRvciAqKShvYmopKQorKworK3R5cGVkZWYgdm9pZCAoKkdzdEVHTEltYWdlRGVzdHJveU5vdGlmeSkgKEdzdEdMQ29udGV4dEVHTCAqIGNvbnRleHQsCisrICAgIGdwb2ludGVyIGRhdGEpOworKworK3R5cGVkZWYgc3RydWN0IF9Hc3RFR0xJbWFnZU1lbW9yeSBHc3RFR0xJbWFnZU1lbW9yeTsKKysKKysKKysvKioKKysgKiBHc3RHTE1lbW9yeUVHTDoKKysgKgorKyAqIFByaXZhdGUgaW5zdGFuY2UKKysgKi8KKytzdHJ1Y3QgX0dzdEdMTWVtb3J5RUdMCisreworKyAgR3N0R0xNZW1vcnkgbWVtOworKworKyAgRUdMSW1hZ2VLSFIgaW1hZ2U7CisrICBHc3RWaWRlb0dMVGV4dHVyZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOworK307CisrCisrLyoqCisrICogR1NUX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SOgorKyAqCisrICogVGhlIG5hbWUgb2YgdGhlIEdMIE1lbW9yeSBFR0wgYWxsb2NhdG9yCisrICovCisrI2RlZmluZSBHU1RfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1JfTkFNRSAiR0xNZW1vcnlFR0wiCisrCisrdm9pZCAgICAgICAgICBnc3RfZ2xfbWVtb3J5X2VnbF9pbml0X29uY2UgICAgICAgICAgICAgICAodm9pZCk7CisrZ2Jvb2xlYW4gICAgICBnc3RfaXNfZ2xfbWVtb3J5X2VnbCAgICAgICAgICAgICAgICAgICAgICAoR3N0TWVtb3J5ICogbWVtKTsKKysKKytFR0xJbWFnZUtIUiAgIGdzdF9nbF9tZW1vcnlfZWdsX2dldF9pbWFnZSAgICAgICAgICAgICAgIChHc3RHTE1lbW9yeUVHTCAqIG1lbSk7CisrRUdMRGlzcGxheSAgICBnc3RfZ2xfbWVtb3J5X2VnbF9nZXRfZGlzcGxheSAgICAgICAgICAgICAoR3N0R0xNZW1vcnlFR0wgKiBtZW0pOworKworK0dzdFZpZGVvR0xUZXh0dXJlT3JpZW50YXRpb24gZ3N0X2dsX21lbW9yeV9lZ2xfZ2V0X29yaWVudGF0aW9uCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3N0R0xNZW1vcnlFR0wgKiBtZW0pOworKworK3ZvaWQgICAgICAgICAgZ3N0X2dsX21lbW9yeV9lZ2xfc2V0X29yaWVudGF0aW9uICAgICAgICAgKEdzdEdMTWVtb3J5RUdMICogbWVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VmlkZW9HTFRleHR1cmVPcmllbnRhdGlvbiBvcmllbnRhdGlvbik7CisrCisrLyoqCisrICogR3N0R0xBbGxvY2F0b3IKKysgKgorKyAqIE9wYXF1ZSAjR3N0R0xBbGxvY2F0b3Igc3RydWN0CisrICovCisrc3RydWN0IF9Hc3RHTE1lbW9yeUVHTEFsbG9jYXRvcgorK3sKKysgIEdzdEdMTWVtb3J5QWxsb2NhdG9yIHBhcmVudDsKKyt9OworKworKy8qKgorKyAqIEdzdEdMQWxsb2NhdG9yQ2xhc3M6CisrICoKKysgKiBUaGUgI0dzdEdMQWxsb2NhdG9yQ2xhc3Mgb25seSBjb250YWlucyBwcml2YXRlIGRhdGEKKysgKi8KKytzdHJ1Y3QgX0dzdEdMTWVtb3J5RUdMQWxsb2NhdG9yQ2xhc3MKKyt7CisrICBHc3RHTE1lbW9yeUFsbG9jYXRvckNsYXNzIHBhcmVudF9jbGFzczsKKyt9OworKworK0dfRU5EX0RFQ0xTCisrCisrI2VuZGlmIC8qIF9HU1RfR0xfTUVNT1JZX0VHTF9IXyAqLworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbF9md2QuaCBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbF9md2QuaAoraW5kZXggZmI2NGZmNi4uNzNlMTdiZCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbF9md2QuaAorKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsX2Z3ZC5oCitAQCAtNTUsNiArNTUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMTWVtb3J5UEJPIEdzdEdMTWVtb3J5UEJPOworIHR5cGVkZWYgc3RydWN0IF9Hc3RHTE1lbW9yeVBCT0FsbG9jYXRvciBHc3RHTE1lbW9yeVBCT0FsbG9jYXRvcjsKKyB0eXBlZGVmIHN0cnVjdCBfR3N0R0xNZW1vcnlQQk9BbGxvY2F0b3JDbGFzcyBHc3RHTE1lbW9yeVBCT0FsbG9jYXRvckNsYXNzOworIAorK3R5cGVkZWYgc3RydWN0IF9Hc3RHTE1lbW9yeUVHTCBHc3RHTE1lbW9yeUVHTDsKKyt0eXBlZGVmIHN0cnVjdCBfR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3IgR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3I7CisrdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMTWVtb3J5RUdMQWxsb2NhdG9yQ2xhc3MgR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3JDbGFzczsKKysKKyB0eXBlZGVmIHN0cnVjdCBfR3N0R0xTTFN0YWdlICAgICAgICBHc3RHTFNMU3RhZ2U7CisgdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMU0xTdGFnZVByaXZhdGUgR3N0R0xTTFN0YWdlUHJpdmF0ZTsKKyB0eXBlZGVmIHN0cnVjdCBfR3N0R0xTTFN0YWdlQ2xhc3MgICBHc3RHTFNMU3RhZ2VDbGFzczsKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xkaXNwbGF5LmMgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xkaXNwbGF5LmMKK2luZGV4IDYwZGVjNmEuLjM0NzcwZDAgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xkaXNwbGF5LmMKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGRpc3BsYXkuYworQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisgI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgorICNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGVnbGltYWdlbWVtb3J5Lmg+CisrI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuaD4KKyAjZW5kaWYKKyAKKyBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfY29udGV4dCk7CitAQCAtMTQ0LDYgKzE0NSw3IEBAIGdzdF9nbF9kaXNwbGF5X2luaXQgKEdzdEdMRGlzcGxheSAqIGRpc3BsYXkpCisgCisgI2lmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAorICAgZ3N0X2VnbF9pbWFnZV9tZW1vcnlfaW5pdCAoKTsKKysgIGdzdF9nbF9tZW1vcnlfZWdsX2luaXRfb25jZSAoKTsKKyAjZW5kaWYKKyB9CisgCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsdXBsb2FkLmMgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2x1cGxvYWQuYworaW5kZXggMTZlZDVlYS4uNzNhOTAyOSAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbHVwbG9hZC5jCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2x1cGxvYWQuYworQEAgLTI5LDYgKzI5LDcgQEAKKyAKKyAjaWYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisgI2luY2x1ZGUgImVnbC9nc3RlZ2xpbWFnZW1lbW9yeS5oIgorKyNpbmNsdWRlICJlZ2wvZ3N0Z2xtZW1vcnllZ2wuaCIKKyAjZW5kaWYKKyAKKyAjaWYgR1NUX0dMX0hBVkVfRE1BQlVGCitAQCAtMzAxLDYgKzMwMiwxMyBAQCBfZ2xfbWVtb3J5X3VwbG9hZF9wcm9wb3NlX2FsbG9jYXRpb24gKGdwb2ludGVyIGltcGwsIEdzdFF1ZXJ5ICogZGVjaWRlX3F1ZXJ5LAorICAgICAgICAgICAgIGNvbnRleHQpKTsKKyAgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3BhcmFtIChxdWVyeSwgYWxsb2NhdG9yLCAmcGFyYW1zKTsKKyAgICAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2NhdG9yKTsKKysKKysjaWYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisrICAgIGFsbG9jYXRvciA9CisrICAgICAgICBHU1RfQUxMT0NBVE9SIChnc3RfYWxsb2NhdG9yX2ZpbmQgKEdTVF9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUl9OQU1FKSk7CisrICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbSAocXVlcnksIGFsbG9jYXRvciwgJnBhcmFtcyk7CisrICAgIGdzdF9vYmplY3RfdW5yZWYgKGFsbG9jYXRvcik7CisrI2VuZGlmCisgICB9CisgCisgICBuX3Bvb2xzID0gZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKHF1ZXJ5KTsKKy0tIAorMi41LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwOS1nbGltYWdlc2luay1Eb3ducmFuay10by1tYXJnaW5hbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDktZ2xpbWFnZXNpbmstRG93bnJhbmstdG8tbWFyZ2luYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxZmIwZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDktZ2xpbWFnZXNpbmstRG93bnJhbmstdG8tbWFyZ2luYWwucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBjNmIzN2E4MDgwNmY5MTI4ZGU0N2YxY2NjM2YyMzU0ZjhkNDM2YmI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDI0IFNlcCAyMDE1IDE5OjQ3OjMyICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGdsaW1hZ2VzaW5rOiBEb3ducmFuayB0byBtYXJnaW5hbAorCitPbiBkZXNrdG9wLCB3aGVyZSB0aGVyZSBpcyBnb29kIE9wZW5HTCwgeHZpbWFnZXNpbmsgd2lsbCBjb21lIHVwIGZpcnN0LAorb24gb3RoZXIgcGxhdGZvcm1zLCBPcGVuR0wgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0J3MgZWl0aGVyIHNvZnR3YXJlIChsaWtlCitpbiBhIFZNKSBvciBicm9rZW4gKGxpa2Ugb24gZW1iZWRkZWQpLiwgc28gbGV0IHhpbWFnZXNpbmsgY29tZSBhYm92ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE2ODRdCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZXh0L2dsL2dzdG9wZW5nbC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L2dsL2dzdG9wZW5nbC5jIGIvZXh0L2dsL2dzdG9wZW5nbC5jCitpbmRleCBhNGIyNTQwLi4wY2NhYWNkIDEwMDY0NAorLS0tIGEvZXh0L2dsL2dzdG9wZW5nbC5jCisrKysgYi9leHQvZ2wvZ3N0b3BlbmdsLmMKK0BAIC0xMTgsNyArMTE4LDcgQEAgcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKKyAjZW5kaWYKKyAKKyAgIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdsaW1hZ2VzaW5rIiwKKy0gICAgICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBnc3RfZ2xfaW1hZ2Vfc2lua19iaW5fZ2V0X3R5cGUgKCkpKSB7CisrICAgICAgICAgIEdTVF9SQU5LX01BUkdJTkFMLCBnc3RfZ2xfaW1hZ2Vfc2lua19iaW5fZ2V0X3R5cGUgKCkpKSB7CisgICAgIHJldHVybiBGQUxTRTsKKyAgIH0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjYuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViNDdjMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjYuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLWluY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03M2E1ODU1YTgxMTlkZWIwMTdmNWYxM2NmMzI3MDk1ZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2ZpbHRlcnMuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9OGEwODI3MDY1NmYyZjhhZDdiYjM2NTViODMxMzhlNWEiCi0KLSMgTm90ZTogVGhlIG1wZzEyMyBwbHVnaW4gd2FzIG1vdmVkIHRvIGdzdC1wbHVnaW5zLXVnbHkgcHJpb3IgdG8gdGhlIDEuNy4yCi0jIHJlbGVhc2UsIHNvIHRoaXMgbGluZSBzaG91bGQgYmUgcmVtb3ZlZCBkdXJpbmcgdGhlIHVwZGF0ZSB0byAxLjgueAotIyBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvY29tbWl0Lz9pZD0wOGQ4YWVmY2RhYWY4OWVjYjZkZDUzZWMxZTRmOTVjZDQyZDAxNjY0Ci1QQUNLQUdFQ09ORklHW21wZzEyM10gPSAiLS1lbmFibGUtbXBnMTIzLC0tZGlzYWJsZS1tcGcxMjMsbXBnMTIzIgotCi0jIE5vdGU6IFRoZSBnc2V0dGluZ3MgcGx1Zy1pbiB3YXMgZHJvcHBlZCBwcmlvciB0byB0aGUgMS43LjIgcmVsZWFzZSwKLSMgc28gdGhpcyBsaW5lIHNob3VsZCBiZSByZW1vdmVkIGR1cmluZyB0aGUgdXBkYXRlIHRvIDEuOC54Ci0jIGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9jb21taXQvP2lkPTkxNDI5MTgwOGFkMTA2MjFkNmE3NDAzMWYzZDQ2ZDQ1ZWVmNWEzYTMKLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWdzZXR0aW5ncyIKLQotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1iYWQvZ3N0LXBsdWdpbnMtYmFkLSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnNzaDIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMi1nbHBsdWdpbi1nbHdpbmRvdy1maXgtbWVtb3J5LWxlYWstb2YtbmF2aWdhdGlvbi10aHJlLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjQ4NTdhZGNhZmU0MWU0YjliODgwNWNmODgzMDNiZDU1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3MWIyOTEwMWQ2YTljNWUzZmU5NGQ5OWQ5NzdhMjI3ZjU4ZjBiMmQyOWI2Y2EyYzdmMjkyMDUyNTQyYjNhNjEiCi0KLVMgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjguMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOGY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjguMy5iYgpAQCAtMCwwICsxLDI2IEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzNhNTg1NWE4MTE5ZGViMDE3ZjVmMTNjZjMyNzA5NWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTIxNjgyZTRlOGZlYTUyNDEzZmQyNmM2MGFjYjkwN2U1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvY3JjMzIuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9MjdkYjI2OWM1NzVkMWU1MzE3ZmZmY2EyZDMzYjNiNTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9maWx0ZXJzLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PThhMDgyNzA2NTZmMmY4YWQ3YmIzNjU1YjgzMTM4ZTVhIgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWJhZC9nc3QtcGx1Z2lucy1iYWQtJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBcCisgICAgZmlsZTovL2ZpeC1tYXliZS11bmluaXRpYWxpemVkLXdhcm5pbmdzLXdoZW4tY29tcGlsaW5nLXdpdGgtT3MucGF0Y2ggXAorICAgIGZpbGU6Ly9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaCBcCisgICAgZmlsZTovL2Vuc3VyZS12YWxpZC1zZW50aW5lbHMtZm9yLWdzdF9zdHJ1Y3R1cmVfZ2V0LWV0Yy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtZ3N0cmVhbWVyLWdsLnBjLmluLWRvbi10LWFwcGVuZC1HTF9DRkxBR1MtdG8tQ0ZMQUdTLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1nbHBsdWdpbi1lbmFibGUtZ2xkZWludGVybGFjZS1vbi1PcGVuR0wtRVMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWdsY29sb3Jjb252ZXJ0LWltcGxlbWVudC1tdWx0aXBsZS1yZW5kZXItdGFyZ2V0cy1mb3IucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LWdsY29sb3Jjb252ZXJ0LWRvbi10LXVzZS10aGUtcHJlZGVmaW5lZC12YXJpYWJsZS1uYW0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LWdsc2hhZGVyLWFkZC1nbEJpbmRGcmFnRGF0YUxvY2F0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNi1nbGNvbG9yY29udmVydC1HTEVTMy1kZXByZWNhdGVzLXRleHR1cmUyRC1hbmQtaXQtZG9lLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1nbC1pbXBsZW1lbnQtR3N0R0xNZW1vcnlFR0wucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NTUyODFhNDNlOThjNTQ2NDU2M2ZhMDQ5ZTBhMDkxMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ODk5ZmNiMThlNmExYWYyODg4YjE5YzkwMjEzYWYwMThhNTdkNzQxYzZlNzJlYzU2YjEzM2JjNzNlYzg1MDliIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFkLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiCmluZGV4IGVmNjU4MWIuLjEzNzAzODAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIKQEAgLTgsNyArOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2ZpbHRlcnMuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9OGEwODI3MDY1NmYyZjhhZDdiYjM2NTViODMxMzhlNWEiCiAKIFNSQ19VUkkgPSAiIFwKLSAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkO25hbWU9YmFzZSBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZDticmFuY2g9MS44O25hbWU9YmFzZSBcCiAgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247bmFtZT1jb21tb24gXAogICAgIGZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoIFwKICAgICBmaWxlOi8vZml4LW1heWJlLXVuaW5pdGlhbGl6ZWQtd2FybmluZ3Mtd2hlbi1jb21waWxpbmctd2l0aC1Pcy5wYXRjaCBcCkBAIC0xNywzNiArMTcsMTYgQEAKICAgICBmaWxlOi8vMDAwMS1nc3RyZWFtZXItZ2wucGMuaW4tZG9uLXQtYXBwZW5kLUdMX0NGTEFHUy10by1DRkxBR1MucGF0Y2ggXAogIgogCi1QViA9ICIxLjcuMitnaXQke1NSQ1BWfSIKK1BWID0gIjEuOC4yK2dpdCR7U1JDUFZ9IgogCiBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKIAotU1JDUkVWX2Jhc2UgPSAiNTBhZTQ2Y2MwZjg4MjdiZjk2NjkyMGQ5YzIyMWU1Y2Y4NmU4MTFiYSIKLVNSQ1JFVl9jb21tb24gPSAiYTI1Mzk3NDQ4OTQyMDc5MDAyNjIyYmUyMzFlOWVjNDliOTg1NzQ1YSIKK1NSQ1JFVl9iYXNlID0gIjVlNzNiNWE0ODQzZDk2NzUyNDZmNGVmZWMxNTg2MjQ0NzVlZDk1ODYiCitTUkNSRVZfY29tbW9uID0gImYzNjNiMzIwNTY1OGEzOGU4NGZhNzdmMTlkZWUyMThjZDQ0NDUyNzUiCiBTUkNSRVZfRk9STUFUID0gImJhc2UiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKLSMgb3Zlci1yaWRlIHRoZSBkZWZhdWx0IGhscyBQQUNLQUdFQ09ORklHIGluIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMgdG8KLSMgcGFzcyBhbiBhZGRpdGlvbmFsIC0td2l0aC1obHMtY3J5cHRvPVhYWCBvcHRpb24gKG5ldyBpbiAxLjcueCkgYW5kIHN3aXRjaCBITFMKLSMgQUVTIGRlY3J5cHRpb24gZnJvbSBuZXR0bGUgdG8gb3BlbnNzbCAoaWUgYSBzaGFyZWQgZGVwZW5kZW5jeSB3aXRoIGR0bHMpLgotIyBUaGlzIHNob3VsZCBtb3ZlIGJhY2sgdG8gdGhlIGNvbW1vbiAuaW5jIG9uY2UgdGhlIG1haW4gcmVjaXBlIHVwZGF0ZXMgdG8gMS44LngKLVBBQ0tBR0VDT05GSUdbaGxzXSA9ICItLWVuYWJsZS1obHMgLS13aXRoLWhscy1jcnlwdG89b3BlbnNzbCwtLWRpc2FibGUtaGxzLG9wZW5zc2wiCi0KLSMgVGhlIHRpbnlhbHNhIHBsdWdpbiB3YXMgYWRkZWQgcHJpb3IgdG8gdGhlIDEuNy4yIHJlbGVhc2UKLSMgaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkL2NvbW1pdC8/aWQ9YzhiZDc0ZmE5YTgxMzk4ZjU3ZDk3NmM0NzhkMjA0M2YzMDE4ODY4NAotUEFDS0FHRUNPTkZJR1t0aW55YWxzYV0gPSAiLS1lbmFibGUtdGlueWFsc2EsLS1kaXNhYmxlLXRpbnlhbHNhLHRpbnlhbHNhIgotCi0jIFRoZSB2dWxrYW4gYmFzZWQgdmlkZW8gc2luayBwbHVnaW4gd2FzIGFkZGVkIHByaW9yIHRvIHRoZSAxLjcuMiByZWxlYXNlCi0jIGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9jb21taXQvP2lkPTVkZTZkZDlmNDA2Mjk1NjJhY2Y5MGUzNWUxZmE1ODQ2NGQ2NjYxN2QKLVBBQ0tBR0VDT05GSUdbdnVsa2FuXSA9ICItLWVuYWJsZS12dWxrYW4sLS1kaXNhYmxlLXZ1bGthbixsaWJ4Y2IiCi0KLSMgVGhlIGRlcGVuZGVuY3ktbGVzcyBuZXRzaW0gcGx1Z2luIHdhcyBhZGRlZCBwcmlvciB0byB0aGUgMS43LjIgcmVsZWFzZQotIyBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvY29tbWl0Lz9pZD1lM2Y5ZTg1NGYwOGU4MmJmYWIxMTE4MmM1YTJhYTZmOWEwYzczY2Q1Ci1FWFRSQV9PRUNPTkYgKz0gIiBcCi0gICAgLS1lbmFibGUtbmV0c2ltIFwKLSIKLQogZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CiAJJHtTfS9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCmluZGV4IDczODE0NTguLmEwNGYxNTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwpAQCAtMzEsNiArMzEsNyBAQAogUEFDS0FHRUNPTkZJR1tnaW8tdW5peC0yLjBdID0gIi0tZW5hYmxlLWdpb191bml4XzJfMCwtLWRpc2FibGUtZ2lvX3VuaXhfMl8wLGdsaWItMi4wIgogUEFDS0FHRUNPTkZJR1tpdm9yYmlzXSAgICAgID0gIi0tZW5hYmxlLWl2b3JiaXMsLS1kaXNhYmxlLWl2b3JiaXMsdHJlbW9yIgogUEFDS0FHRUNPTkZJR1tvZ2ddICAgICAgICAgID0gIi0tZW5hYmxlLW9nZywtLWRpc2FibGUtb2dnLGxpYm9nZyIKK1BBQ0tBR0VDT05GSUdbb3B1c10gICAgICAgICA9ICItLWVuYWJsZS1vcHVzLC0tZGlzYWJsZS1vcHVzLGxpYm9wdXMiCiBQQUNLQUdFQ09ORklHW3BhbmdvXSAgICAgICAgPSAiLS1lbmFibGUtcGFuZ28sLS1kaXNhYmxlLXBhbmdvLHBhbmdvIgogUEFDS0FHRUNPTkZJR1t0aGVvcmFdICAgICAgID0gIi0tZW5hYmxlLXRoZW9yYSwtLWRpc2FibGUtdGhlb3JhLGxpYnRoZW9yYSIKIFBBQ0tBR0VDT05GSUdbdmlzdWFsXSAgICAgICA9ICItLWVuYWJsZS1saWJ2aXN1YWwsLS1kaXNhYmxlLWxpYnZpc3VhbCxsaWJ2aXN1YWwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtTWFrZWZpbGUuYW0tZG9uLXQtaGFyZGNvZGUtbGlidG9vbC1uYW1lLXdoZW4tcnVubmluZy5wYXRjaAppbmRleCA3ODFlNGQ4Li4wOTRiZGFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLU1ha2VmaWxlLmFtLWRvbi10LWhhcmRjb2RlLWxpYnRvb2wtbmFtZS13aGVuLXJ1bm5pbmcucGF0Y2gKQEAgLTI0LDcgKzI0LDcgQEAKIGluZGV4IDkzNjFiZjkuLmJjN2Y1M2EgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvYWxsb2NhdG9ycy9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L2FsbG9jYXRvcnMvTWFrZWZpbGUuYW0KLUBAIC0zNyw3ICszNyw3IEBAIEdzdEFsbG9jYXRvcnMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YWxsb2NhdG9ycy1ACitAQCAtMzgsNyArMzgsNyBAQCBHc3RBbGxvY2F0b3JzLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGFsbG9jYXRvcnMtQAogIAkJLS1hZGQtaW5jbHVkZS1wYXRoPWBQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZT1naXJkaXIgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AYCBcCiAgCQktLWxpYnJhcnk9bGliZ3N0YWxsb2NhdG9ycy1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTM3LDcgKzM3LDcgQEAKIGluZGV4IDZkNmRlOGQuLmRjYzJmZTAgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvYXBwL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvYXBwL01ha2VmaWxlLmFtCi1AQCAtNTIsNyArNTIsNyBAQCBHc3RBcHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YXBwLUBHU1RfQVBJX1ZFUlNJTworQEAgLTUzLDcgKzUzLDcgQEAgR3N0QXBwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGFwcC1AR1NUX0FQSV9WRVJTSU8KICAJCS0tbGlicmFyeT1saWJnc3RhcHAtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCkBAIC01MCw3ICs1MCw3IEBACiBpbmRleCAyNzVkMjIyLi4yMzc0MTk2IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvYXVkaW8vTWFrZWZpbGUuYW0KLUBAIC0xMDYsNyArMTA2LDcgQEAgR3N0QXVkaW8tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YXVkaW8tQEdTVF9BUElfVkUKK0BAIC0xMTYsNyArMTE2LDcgQEAgR3N0QXVkaW8tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YXVkaW8tQEdTVF9BUElfVkUKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdFRhZy1AR1NUX0FQSV9WRVJTSU9OQCBcCkBAIC02Myw3ICs2Myw3IEBACiBpbmRleCAwOWIzZDY4Li5mNTQ1MzU0IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L2ZmdC9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L2ZmdC9NYWtlZmlsZS5hbQotQEAgLTY0LDcgKzY0LDcgQEAgR3N0RmZ0LUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGZmdC1AR1NUX0FQSV9WRVJTSU8KK0BAIC02NSw3ICs2NSw3IEBAIEdzdEZmdC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RmZnQtQEdTVF9BUElfVkVSU0lPCiAgCQktLWFkZC1pbmNsdWRlLXBhdGg9YFBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlPWdpcmRpciBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkBgIFwKICAJCS0tbGlicmFyeT1saWJnc3RmZnQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCkBAIC03Niw3ICs3Niw3IEBACiBpbmRleCA2NGQ1ZWIwLi45MWRjMjE0IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3BidXRpbHMvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9wYnV0aWxzL01ha2VmaWxlLmFtCi1AQCAtOTQsNyArOTQsNyBAQCBHc3RQYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHBidXRpbHMtQEdTVF9BUAorQEAgLTk5LDcgKzk5LDcgQEAgR3N0UGJ1dGlscy1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RwYnV0aWxzLUBHU1RfQVAKICAJCS0taW5jbHVkZT1Hc3RUYWctQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdFZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RBdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCkBAIC0xMDIsNyArMTAyLDcgQEAKIGluZGV4IGZkZDAxYzEuLmY1NDQ1YzEgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvcnRwL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvcnRwL01ha2VmaWxlLmFtCi1AQCAtNjQsNyArNjQsNyBAQCBHc3RSdHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cnRwLUBHU1RfQVBJX1ZFUlNJTworQEAgLTY1LDcgKzY1LDcgQEAgR3N0UnRwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHJ0cC1AR1NUX0FQSV9WRVJTSU8KICAJCS0tbGlicmFyeT1saWJnc3RydHAtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCkBAIC0xMTUsNyArMTE1LDcgQEAKIGluZGV4IGVkZTU3MDYuLjliMGIyNTggMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvcnRzcC9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L3J0c3AvTWFrZWZpbGUuYW0KLUBAIC03MSw3ICs3MSw3IEBAIEdzdFJ0c3AtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cnRzcC1AR1NUX0FQSV9WRVJTCitAQCAtNzIsNyArNzIsNyBAQCBHc3RSdHNwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHJ0c3AtQEdTVF9BUElfVkVSUwogIAkJLS1pbmNsdWRlPUdpby0yLjAgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0U2RwLUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTEyOCw3ICsxMjgsNyBAQAogaW5kZXggYTkwZjMwYi4uMGUxNDliOCAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9zZHAvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9zZHAvTWFrZWZpbGUuYW0KLUBAIC0zMSw3ICszMSw3IEBAIEdzdFNkcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RzZHAtQEdTVF9BUElfVkVSU0lPCitAQCAtMzIsNyArMzIsNyBAQCBHc3RTZHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0c2RwLUBHU1RfQVBJX1ZFUlNJTwogIAkJLS1hZGQtaW5jbHVkZS1wYXRoPWBQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZT1naXJkaXIgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AYCBcCiAgCQktLWxpYnJhcnk9bGliZ3N0c2RwLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXApAQCAtMTQxLDcgKzE0MSw3IEBACiBpbmRleCBjNTM0YTRkLi5jYWZhZmQzIDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3RhZy9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9NYWtlZmlsZS5hbQotQEAgLTQ0LDcgKzQ0LDcgQEAgR3N0VGFnLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHRhZy1AR1NUX0FQSV9WRVJTSU8KK0BAIC00NSw3ICs0NSw3IEBAIEdzdFRhZy1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3R0YWctQEdTVF9BUElfVkVSU0lPCiAgCQktLWxpYnJhcnk9bGliZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXApAQCAtMTU0LDcgKzE1NCw3IEBACiBpbmRleCA1ZDMxZmExLi5hYzY0ZWIzIDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vTWFrZWZpbGUuYW0KLUBAIC0xMTMsNyArMTEzLDcgQEAgR3N0VmlkZW8tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0dmlkZW8tQEdTVF9BUElfVkUKK0BAIC0xMTYsNyArMTE2LDcgQEAgR3N0VmlkZW8tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0dmlkZW8tQEdTVF9BUElfVkUKICAJCS0tbGlicmFyeT1saWJnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLU1ha2VmaWxlLmFtLXByZWZpeC1jYWxscy10by1wa2ctY29uZmlnLXdpdGgtUEtHX0NPTkYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1NYWtlZmlsZS5hbS1wcmVmaXgtY2FsbHMtdG8tcGtnLWNvbmZpZy13aXRoLVBLR19DT05GLnBhdGNoCmluZGV4IDg1ZmNhY2IuLjBhOGJjOWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLU1ha2VmaWxlLmFtLXByZWZpeC1jYWxscy10by1wa2ctY29uZmlnLXdpdGgtUEtHX0NPTkYucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItTWFrZWZpbGUuYW0tcHJlZml4LWNhbGxzLXRvLXBrZy1jb25maWctd2l0aC1QS0dfQ09ORi5wYXRjaApAQCAtMjQsNyArMjQsNyBAQAogaW5kZXggYmM3ZjUzYS4uMGVmNWY4NiAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9hbGxvY2F0b3JzL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvYWxsb2NhdG9ycy9NYWtlZmlsZS5hbQotQEAgLTM0LDcgKzM0LDcgQEAgR3N0QWxsb2NhdG9ycy1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhbGxvY2F0b3JzLUAKK0BAIC0zNSw3ICszNSw3IEBAIEdzdEFsbG9jYXRvcnMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YWxsb2NhdG9ycy1ACiAgCQktLWMtaW5jbHVkZSAiZ3N0L2FsbG9jYXRvcnMvYWxsb2NhdG9ycy5oIiBcCiAgCQktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAogIAkJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXApAQCAtMzMsNyArMzMsNyBAQAogIAkJLS1saWJyYXJ5PWxpYmdzdGFsbG9jYXRvcnMtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWxpYnRvb2w9IiQoTElCVE9PTCkiIFwKLUBAIC01OCw3ICs1OCw3IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK0BAIC01OSw3ICs1OSw3IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKICAJCSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgXAogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXApAQCAtNDYsNyArNDYsNyBAQAogaW5kZXggZGNjMmZlMC4uZGMwNzZjYiAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9hcHAvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9hcHAvTWFrZWZpbGUuYW0KLUBAIC00Nyw4ICs0Nyw4IEBAIEdzdEFwcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhcHAtQEdTVF9BUElfVkVSU0lPCitAQCAtNDgsOCArNDgsOCBAQCBHc3RBcHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YXBwLUBHU1RfQVBJX1ZFUlNJTwogIAkJLS1jLWluY2x1ZGUgImdzdC9hcHAvYXBwLmgiIFwKICAJCS1JJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyBcCiAgCQktSSQodG9wX2J1aWxkZGlyKS9nc3QtbGlicyBcCkBAIC02MSw3ICs2MSw3IEBACiBpbmRleCAyMzc0MTk2Li4yOTVlYjQyIDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvYXVkaW8vTWFrZWZpbGUuYW0KLUBAIC05NiwxMiArOTYsMTIgQEAgR3N0QXVkaW8tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YXVkaW8tQEdTVF9BUElfVkUKK0BAIC0xMDYsMTIgKzEwNiwxMiBAQCBHc3RBdWRpby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhdWRpby1AR1NUX0FQSV9WRQogIAkJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKICAJCS1JJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzIFwKICAJCS0tYy1pbmNsdWRlICJnc3QvYXVkaW8vYXVkaW8uaCIgXApAQCAtNzgsNyArNzgsNyBAQAogIAkJLS1saWJyYXJ5LXBhdGg9IiQodG9wX2J1aWxkZGlyKS9nc3QtbGlicy9nc3QvdGFnLyIgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCi1AQCAtMTMwLDggKzEzMCw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK0BAIC0xNDAsOCArMTQwLDggQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXAogIAkJLS1pbmNsdWRlZGlyPSIkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMvZ3N0L3RhZy8iIFwKQEAgLTkzLDcgKzkzLDcgQEAKIGluZGV4IGY1NDUzNTQuLjFiYjYyNDMgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvZmZ0L01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvZmZ0L01ha2VmaWxlLmFtCi1AQCAtNjEsNyArNjEsNyBAQCBHc3RGZnQtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0ZmZ0LUBHU1RfQVBJX1ZFUlNJTworQEAgLTYyLDcgKzYyLDcgQEAgR3N0RmZ0LUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGZmdC1AR1NUX0FQSV9WRVJTSU8KICAJCS0tYy1pbmNsdWRlICJnc3QvZmZ0L2ZmdC5oIiBcCiAgCQktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAogIAkJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXApAQCAtMTAyLDcgKzEwMiw3IEBACiAgCQktLWxpYnJhcnk9bGliZ3N0ZmZ0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1saWJ0b29sPSIkKExJQlRPT0wpIiBcCi1AQCAtODUsNyArODUsNyBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCitAQCAtODYsNyArODYsNyBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCiAgCQkkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIFwKICAJCS0taW5jbHVkZWRpcj0kKHNyY2RpcikgXAogIAkJLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIFwKQEAgLTExNSw3ICsxMTUsNyBAQAogaW5kZXggOTFkYzIxNC4uZGM4ZTFkMyAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9wYnV0aWxzL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvcGJ1dGlscy9NYWtlZmlsZS5hbQotQEAgLTc5LDE0ICs3OSwxNCBAQCBHc3RQYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHBidXRpbHMtQEdTVF9BUAorQEAgLTg0LDE0ICs4NCwxNCBAQCBHc3RQYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHBidXRpbHMtQEdTVF9BUAogIAkJLS1jLWluY2x1ZGUgImdzdC9wYnV0aWxzL3BidXRpbHMuaCIgXAogIAkJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKICAJCS1JJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzIFwKQEAgLTEzNCw3ICsxMzQsNyBAQAogIAkJLS1saWJyYXJ5LXBhdGg9IiQodG9wX2J1aWxkZGlyKS9nc3QtbGlicy9nc3QvdGFnLyIgXAogIAkJLS1saWJyYXJ5LXBhdGg9IiQodG9wX2J1aWxkZGlyKS9nc3QtbGlicy9nc3QvdmlkZW8vIiBcCiAgCQktLWxpYnJhcnktcGF0aD0iJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzL2dzdC9hdWRpby8iIFwKLUBAIC0xMTksOCArMTE5LDggQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorQEAgLTEyNCw4ICsxMjQsOCBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCiAgCQkkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIFwKICAJCS0taW5jbHVkZWRpcj0kKHNyY2RpcikgXAogIAkJLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIFwKQEAgLTE3NSw3ICsxNzUsNyBAQAogaW5kZXggZjU0NDVjMS4uNTI3YzBiNCAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9ydHAvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9ydHAvTWFrZWZpbGUuYW0KLUBAIC01OSw4ICs1OSw4IEBAIEdzdFJ0cC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RydHAtQEdTVF9BUElfVkVSU0lPCitAQCAtNjAsOCArNjAsOCBAQCBHc3RSdHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cnRwLUBHU1RfQVBJX1ZFUlNJTwogIAkJLS1jLWluY2x1ZGUgImdzdC9ydHAvcnRwLmgiIFwKICAJCS1JJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzIFwKICAJCS1JJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyBcCkBAIC0xODYsNyArMTg2LDcgQEAKICAJCS0tbGlicmFyeT1saWJnc3RydHAtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCi1AQCAtODcsOCArODcsOCBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCitAQCAtODgsOCArODgsOCBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCiAgCQkkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIFwKICAJCS0taW5jbHVkZWRpcj0kKHNyY2RpcikgXAogIAkJLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIFwKQEAgLTIwMSw3ICsyMDEsNyBAQAogaW5kZXggOWIwYjI1OC4uNGY2ZDlmOCAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9ydHNwL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvcnRzcC9NYWtlZmlsZS5hbQotQEAgLTY2LDcgKzY2LDcgQEAgR3N0UnRzcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RydHNwLUBHU1RfQVBJX1ZFUlMKK0BAIC02Nyw3ICs2Nyw3IEBAIEdzdFJ0c3AtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cnRzcC1AR1NUX0FQSV9WRVJTCiAgCQktSSQodG9wX2J1aWxkZGlyKS9nc3QtbGlicyBcCiAgCQktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAogIAkJLS1hZGQtaW5jbHVkZS1wYXRoPSQoYnVpbGRkaXIpLy4uL3NkcCBcCkBAIC0yMTAsNyArMjEwLDcgQEAKICAJCS0tbGlicmFyeT1saWJnc3RydHNwLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1HaW8tMi4wIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAotQEAgLTk2LDcgKzk2LDcgQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorQEAgLTk3LDcgKzk3LDcgQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXAogIAkJLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpLy4uL3NkcCBcCkBAIC0yMjMsNyArMjIzLDcgQEAKIGluZGV4IDBlMTQ5YjguLjlhYTA1MTIgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3Qvc2RwL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3Qvc2RwL01ha2VmaWxlLmFtCi1AQCAtMjgsNyArMjgsNyBAQCBHc3RTZHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0c2RwLUBHU1RfQVBJX1ZFUlNJTworQEAgLTI5LDcgKzI5LDcgQEAgR3N0U2RwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHNkcC1AR1NUX0FQSV9WRVJTSU8KICAJCS0td2Fybi1hbGwgXAogIAkJLS1jLWluY2x1ZGUgImdzdC9zZHAvc2RwLmgiIFwKICAJCS1JJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyBcCkBAIC0yMzIsNyArMjMyLDcgQEAKICAJCS0tbGlicmFyeT1saWJnc3RzZHAtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWxpYnRvb2w9IiQoTElCVE9PTCkiIFwKLUBAIC01Miw3ICs1Miw3IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK0BAIC01Myw3ICs1Myw3IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKICAJCSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgXAogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXApAQCAtMjQ1LDcgKzI0NSw3IEBACiBpbmRleCBjYWZhZmQzLi5iYTk5Mjc5IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3RhZy9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9NYWtlZmlsZS5hbQotQEAgLTM5LDggKzM5LDggQEAgR3N0VGFnLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHRhZy1AR1NUX0FQSV9WRVJTSU8KK0BAIC00MCw4ICs0MCw4IEBAIEdzdFRhZy1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3R0YWctQEdTVF9BUElfVkVSU0lPCiAgCQktLWMtaW5jbHVkZSAiZ3N0L3RhZy90YWcuaCIgXAogIAkJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKICAJCS1JJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzIFwKQEAgLTI1Niw3ICsyNTYsNyBAQAogIAkJLS1saWJyYXJ5PWxpYmdzdHRhZy1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBAIC02Nyw4ICs2Nyw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK0BAIC02OCw4ICs2OCw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKICAJCSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgXAogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXApAQCAtMjcxLDcgKzI3MSw3IEBACiBpbmRleCBhYzY0ZWIzLi4zNDJjOGM2IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vTWFrZWZpbGUuYW0KLUBAIC0xMDgsOCArMTA4LDggQEAgR3N0VmlkZW8tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0dmlkZW8tQEdTVF9BUElfVkUKK0BAIC0xMTEsOCArMTExLDggQEAgR3N0VmlkZW8tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0dmlkZW8tQEdTVF9BUElfVkUKICAJCS0tYy1pbmNsdWRlICJnc3QvdmlkZW8vdmlkZW8uaCIgXAogIAkJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKICAJCS1JJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzIFwKQEAgLTI4Miw3ICsyODIsNyBAQAogIAkJLS1saWJyYXJ5PWxpYmdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXAotQEAgLTEzNiw4ICsxMzYsOCBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCitAQCAtMTM5LDggKzEzOSw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKICAJCSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgXAogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtcnRzcC1kcm9wLWluY29ycmVjdC1yZWZlcmVuY2UtdG8tZ3N0cmVhbWVyLXNkcC1pbi1NYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXJ0c3AtZHJvcC1pbmNvcnJlY3QtcmVmZXJlbmNlLXRvLWdzdHJlYW1lci1zZHAtaW4tTWEucGF0Y2gKaW5kZXggNDJkOTljMS4uNGFkZjYwNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtcnRzcC1kcm9wLWluY29ycmVjdC1yZWZlcmVuY2UtdG8tZ3N0cmVhbWVyLXNkcC1pbi1NYS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1ydHNwLWRyb3AtaW5jb3JyZWN0LXJlZmVyZW5jZS10by1nc3RyZWFtZXItc2RwLWluLU1hLnBhdGNoCkBAIC0xNCw3ICsxNCw3IEBACiBpbmRleCA0ZjZkOWY4Li4wYWZhMzcwIDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3J0c3AvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9ydHNwL01ha2VmaWxlLmFtCi1AQCAtNzQsNyArNzQsNiBAQCBHc3RSdHNwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHJ0c3AtQEdTVF9BUElfVkVSUworQEAgLTc1LDcgKzc1LDYgQEAgR3N0UnRzcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RydHNwLUBHU1RfQVBJX1ZFUlMKICAJCS0tbGlidG9vbD0iJChMSUJUT09MKSIgXAogIAkJLS1wa2cgZ2lvLTIuMCBcCiAgCQktLXBrZyBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKaW5kZXggNzgxMzkxNS4uYjkyNGUzOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJzZWVrIHRvIDAgYnl0ZXMgZmFpbGVkIik7CiAgICAgICAgfQogIAotQEAgLTE2MzIsOCArMTYzMCwxMCBAQCBnc3Rfc3ViX3BhcnNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQorQEAgLTE2NDEsOCArMTYzOSwxMCBAQCBnc3Rfc3ViX3BhcnNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQogICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJnMpOwogICAgICAgIGlmIChzLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQogICAgICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWxmLT5zZWdtZW50KTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA1LWNvbnZlcnRmcmFtZS1TdXBwb3J0LXZpZGVvLWNyb3Atd2hlbi1jb252ZXJ0LWZyYW1lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDUtY29udmVydGZyYW1lLVN1cHBvcnQtdmlkZW8tY3JvcC13aGVuLWNvbnZlcnQtZnJhbWUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA5NmE2ZjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDUtY29udmVydGZyYW1lLVN1cHBvcnQtdmlkZW8tY3JvcC13aGVuLWNvbnZlcnQtZnJhbWUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotRnJvbSA1YmU2ZWQwMGFhZDAyOGQ5Y2JiNGUwYzYzYWYwYmU2OWQzMzVjNzFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KLURhdGU6IEZyaSwgMTEgRGVjIDIwMTUgMjE6NDI6MDAgKzA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gY29udmVydGZyYW1lOiBTdXBwb3J0IHZpZGVvIGNyb3Agd2hlbiBjb252ZXJ0IGZyYW1lCi0KLUdldCB0aHVtYm5haWwgd2lsbCB1c2VyIGNvbnZlcnRmcmFtZSB0byBjb252ZXJ0IHZpZGVvIGZyYW1lIHRvCi1kZXNpcmVkIHZpZGVvIGZvcm1hdCBhbmQgc2l6ZS4gQnV0IGhhdmVuJ3QgcHJvY2VzcyBjcm9wIG1ldGEgb24KLXRoZSB2aWRlbyBidWZmZXIuIEFkZCBzdXBwb3J0IHZpZGVvIGNyb3AuCi0KLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTkzMjkKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS43LjFdCi0KLS0tLQotIGdzdC1saWJzL2dzdC92aWRlby9jb252ZXJ0ZnJhbWUuYyB8IDY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2NvbnZlcnRmcmFtZS5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2NvbnZlcnRmcmFtZS5jCi1pbmRleCBhYTljM2QzLi45NDJhNTFlIDEwMDY0NAotLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2NvbnZlcnRmcmFtZS5jCi0rKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vY29udmVydGZyYW1lLmMKLUBAIC0xMTAsMTIgKzExMCwyMyBAQCBmYWlsOgotIHN0YXRpYyBHc3RFbGVtZW50ICoKLSBidWlsZF9jb252ZXJ0X2ZyYW1lX3BpcGVsaW5lIChHc3RFbGVtZW50ICoqIHNyY19lbGVtZW50LAotICAgICBHc3RFbGVtZW50ICoqIHNpbmtfZWxlbWVudCwgY29uc3QgR3N0Q2FwcyAqIGZyb21fY2FwcywKLS0gICAgY29uc3QgR3N0Q2FwcyAqIHRvX2NhcHMsIEdFcnJvciAqKiBlcnIpCi0rICAgIEdzdFZpZGVvQ3JvcE1ldGEgKiBjbWV0YSwgY29uc3QgR3N0Q2FwcyAqIHRvX2NhcHMsIEdFcnJvciAqKiBlcnIpCi0gewotLSAgR3N0RWxlbWVudCAqc3JjID0gTlVMTCwgKmNzcCA9IE5VTEwsICp2c2NhbGUgPSBOVUxMOwotLSAgR3N0RWxlbWVudCAqc2luayA9IE5VTEwsICplbmNvZGVyID0gTlVMTCwgKnBpcGVsaW5lOwotKyAgR3N0RWxlbWVudCAqdmNyb3AgPSBOVUxMLCAqY3NwID0gTlVMTCwgKmNzcDIgPSBOVUxMLCAqdnNjYWxlID0gTlVMTDsKLSsgIEdzdEVsZW1lbnQgKnNyYyA9IE5VTEwsICpzaW5rID0gTlVMTCwgKmVuY29kZXIgPSBOVUxMLCAqcGlwZWxpbmU7Ci0rICBHc3RWaWRlb0luZm8gaW5mbzsKLSAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotIAotKyAgaWYgKGNtZXRhKSB7Ci0rICAgIGlmICghY3JlYXRlX2VsZW1lbnQgKCJ2aWRlb2Nyb3AiLCAmdmNyb3AsICZlcnJvcikpIHsKLSsgICAgICBnX3dhcm5pbmcKLSsgICAgICAgICAgKCJidWlsZF9jb252ZXJ0X2ZyYW1lX3BpcGVsaW5lOiBCdWZmZXIgaGFzIGNyb3AgbWV0YWRhdGEgYnV0IHZpZGVvY3JvcCBlbGVtZW50IGlzIG5vdCBmb3VuZC4gQ3JvcHBpbmcgd2lsbCBiZSBkaXNhYmxlZCIpOwotKyAgICB9IGVsc2UgewotKyAgICAgIGlmICghY3JlYXRlX2VsZW1lbnQgKCJ2aWRlb2NvbnZlcnQiLCAmY3NwMiwgJmVycm9yKSkKLSsgICAgICAgIGdvdG8gbm9fZWxlbWVudHM7Ci0rICAgIH0KLSsgIH0KLSsKLSAgIC8qIHZpZGVvc2NhbGUgaXMgaGVyZSB0byBjb3JyZWN0IGZvciB0aGUgcGl4ZWwtYXNwZWN0LXJhdGlvIGZvciB1cyAqLwotICAgR1NUX0RFQlVHICgiY3JlYXRpbmcgZWxlbWVudHMiKTsKLSAgIGlmICghY3JlYXRlX2VsZW1lbnQgKCJhcHBzcmMiLCAmc3JjLCAmZXJyb3IpIHx8Ci1AQCAtMTMzLDE1ICsxNDQsNDIgQEAgYnVpbGRfY29udmVydF9mcmFtZV9waXBlbGluZSAoR3N0RWxlbWVudCAqKiBzcmNfZWxlbWVudCwKLSAKLSAgIEdTVF9ERUJVRyAoImFkZGluZyBlbGVtZW50cyIpOwotICAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGNzcCwgdnNjYWxlLCBzaW5rLCBOVUxMKTsKLSsgIGlmICh2Y3JvcCkKLSsgICAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCB2Y3JvcCwgY3NwMiwgTlVMTCk7Ci0gCi0gICAvKiBzZXQgY2FwcyAqLwotICAgZ19vYmplY3Rfc2V0IChzcmMsICJjYXBzIiwgZnJvbV9jYXBzLCBOVUxMKTsKLSsgIGlmICh2Y3JvcCkgewotKyAgICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBmcm9tX2NhcHMpOwotKyAgICBnX29iamVjdF9zZXQgKHZjcm9wLCAibGVmdCIsIGNtZXRhLT54LCBOVUxMKTsKLSsgICAgZ19vYmplY3Rfc2V0ICh2Y3JvcCwgInRvcCIsIGNtZXRhLT55LCBOVUxMKTsKLSsgICAgZ19vYmplY3Rfc2V0ICh2Y3JvcCwgInJpZ2h0IiwgR1NUX1ZJREVPX0lORk9fV0lEVEggKCZpbmZvKSAtIGNtZXRhLT53aWR0aCwKLSsgICAgICAgIE5VTEwpOwotKyAgICBnX29iamVjdF9zZXQgKHZjcm9wLCAiYm90dG9tIiwKLSsgICAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJmluZm8pIC0gY21ldGEtPmhlaWdodCwgTlVMTCk7Ci0rICAgIEdTVF9ERUJVRyAoImNyb3AgbWV0YSBbeCx5LHdpZHRoLGhlaWdodF06ICVkICVkICVkICVkIiwgY21ldGEtPngsIGNtZXRhLT55LAotKyAgICAgICAgY21ldGEtPndpZHRoLCBjbWV0YS0+aGVpZ2h0KTsKLSsgIH0KLSAgIGdfb2JqZWN0X3NldCAoc2luaywgImNhcHMiLCB0b19jYXBzLCBOVUxMKTsKLSAKLSAgIC8qIEZJWE1FOiBsaW5raW5nIGlzIHN0aWxsIHdheSB0b28gZXhwZW5zaXZlLCBwcm9maWxlIHRoaXMgcHJvcGVybHkgKi8KLS0gIEdTVF9ERUJVRyAoImxpbmtpbmcgc3JjLT5jc3AiKTsKLS0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19wYWRzIChzcmMsICJzcmMiLCBjc3AsICJzaW5rIikpCi0tICAgIGdvdG8gbGlua19mYWlsZWQ7Ci0rICBpZiAodmNyb3ApIHsKLSsgICAgR1NUX0RFQlVHICgibGlua2luZyBzcmMtPmNzcDIiKTsKLSsgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNyYywgInNyYyIsIGNzcDIsICJzaW5rIikpCi0rICAgICAgZ290byBsaW5rX2ZhaWxlZDsKLSsKLSsgICAgR1NUX0RFQlVHICgibGlua2luZyBjc3AyLT52Y3JvcCIpOwotKyAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkcyAoY3NwMiwgInNyYyIsIHZjcm9wLCAic2luayIpKQotKyAgICAgIGdvdG8gbGlua19mYWlsZWQ7Ci0rCi0rICAgIEdTVF9ERUJVRyAoImxpbmtpbmcgdmNyb3AtPmNzcCIpOwotKyAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkcyAodmNyb3AsICJzcmMiLCBjc3AsICJzaW5rIikpCi0rICAgICAgZ290byBsaW5rX2ZhaWxlZDsKLSsgIH0gZWxzZSB7Ci0rICAgIEdTVF9ERUJVRyAoImxpbmtpbmcgc3JjLT5jc3AiKTsKLSsgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNyYywgInNyYyIsIGNzcCwgInNpbmsiKSkKLSsgICAgICBnb3RvIGxpbmtfZmFpbGVkOwotKyAgfQotIAotICAgR1NUX0RFQlVHICgibGlua2luZyBjc3AtPnZzY2FsZSIpOwotICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAoY3NwLCAic3JjIiwgdnNjYWxlLCAic2luayIsCi1AQCAtMTkzLDggKzIzMSwxMiBAQCBub19lbGVtZW50czoKLSAgIHsKLSAgICAgaWYgKHNyYykKLSAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotKyAgICBpZiAodmNyb3ApCi0rICAgICAgZ3N0X29iamVjdF91bnJlZiAodmNyb3ApOwotICAgICBpZiAoY3NwKQotICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNzcCk7Ci0rICAgIGlmIChjc3AyKQotKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNzcDIpOwotICAgICBpZiAodnNjYWxlKQotICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHZzY2FsZSk7Ci0gICAgIGlmIChzaW5rKQotQEAgLTIwOSw3ICsyNTEsMTEgQEAgbm9fZWxlbWVudHM6Ci0gbm9fcGlwZWxpbmU6Ci0gICB7Ci0gICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0rICAgIGlmICh2Y3JvcCkKLSsgICAgICBnc3Rfb2JqZWN0X3VucmVmICh2Y3JvcCk7Ci0gICAgIGdzdF9vYmplY3RfdW5yZWYgKGNzcCk7Ci0rICAgIGlmIChjc3AyKQotKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNzcDIpOwotICAgICBnc3Rfb2JqZWN0X3VucmVmICh2c2NhbGUpOwotICAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLSAKLUBAIC0yODIsNyArMzI4LDggQEAgZ3N0X3ZpZGVvX2NvbnZlcnRfc2FtcGxlIChHc3RTYW1wbGUgKiBzYW1wbGUsIGNvbnN0IEdzdENhcHMgKiB0b19jYXBzLAotICAgfQotIAotICAgcGlwZWxpbmUgPQotLSAgICAgIGJ1aWxkX2NvbnZlcnRfZnJhbWVfcGlwZWxpbmUgKCZzcmMsICZzaW5rLCBmcm9tX2NhcHMsIHRvX2NhcHNfY29weSwgJmVycik7Ci0rICAgICAgYnVpbGRfY29udmVydF9mcmFtZV9waXBlbGluZSAoJnNyYywgJnNpbmssIGZyb21fY2FwcywKLSsgICAgICBnc3RfYnVmZmVyX2dldF92aWRlb19jcm9wX21ldGEgKGJ1ZiksIHRvX2NhcHNfY29weSwgJmVycik7Ci0gICBpZiAoIXBpcGVsaW5lKQotICAgICBnb3RvIG5vX3BpcGVsaW5lOwotIAotQEAgLTY0Niw4ICs2OTMsOCBAQCBnc3RfdmlkZW9fY29udmVydF9zYW1wbGVfYXN5bmMgKEdzdFNhbXBsZSAqIHNhbXBsZSwKLSAgIH0KLSAKLSAgIHBpcGVsaW5lID0KLS0gICAgICBidWlsZF9jb252ZXJ0X2ZyYW1lX3BpcGVsaW5lICgmc3JjLCAmc2luaywgZnJvbV9jYXBzLCB0b19jYXBzX2NvcHksCi0tICAgICAgJmVycm9yKTsKLSsgICAgICBidWlsZF9jb252ZXJ0X2ZyYW1lX3BpcGVsaW5lICgmc3JjLCAmc2luaywgZnJvbV9jYXBzLAotKyAgICAgIGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3BfbWV0YSAoYnVmKSwgdG9fY2Fwc19jb3B5LCAmZXJyb3IpOwotICAgaWYgKCFwaXBlbGluZSkKLSAgICAgZ290byBub19waXBlbGluZTsKLSAKLS0tIAotMi41LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaAppbmRleCAzMjU2NzE3Li41MzQxZTNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaApAQCAtMTcsNyArMTcsNyBAQAogaW5kZXggNjcyOGU1OC4uMzJkYWFlNCAxMDA2NDQKIC0tLSBhL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYwogKysrIGIvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jCi1AQCAtMTEzOCw4ICsxMTM4LDcgQEAgX2NyZWF0ZV9zdHJlYW1fZ3JvdXAgKEdzdEVuY29kZUJpbiAqIGViaW4sIEdzdEVuY29kaW5nUHJvZmlsZSAqIHNwcm9mLAorQEAgLTEyMjgsOCArMTIyOCw3IEBAIF9jcmVhdGVfc3RyZWFtX2dyb3VwIChHc3RFbmNvZGVCaW4gKiBlYmluLCBHc3RFbmNvZGluZ1Byb2ZpbGUgKiBzcHJvZiwKICAgICAqIFdlIG9ubHkgdXNlIGEgMWJ1ZmZlciBsb25nIHF1ZXVlIGhlcmUsIHRoZSBhY3R1YWwgcXVldWVpbmcgd2lsbCBiZSBkb25lCiAgICAgKiBpbiB0aGUgaW5wdXQgcXVldWUgKi8KICAgIGxhc3QgPSBzZ3JvdXAtPm91dHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2gKaW5kZXggMjg0YWJiZS4uYzhlNjI4NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2gKQEAgLTE5LDcgKzE5LDcgQEAKIGluZGV4IDliNmM0NzguLmFlMjI5NGEKIC0tLSBhL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYwogKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCi1AQCAtMTcwOCw2ICsxNzA4LDE5IEBAIGdzdF90YWdfZGVtdXhfcGFkX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKK0BAIC0xNzY5LDYgKzE3NjksMTkgQEAgZ3N0X3RhZ19kZW11eF9wYWRfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL21ha2UtZ2lvX3VuaXhfMl8wLWRlcGVuZGVuY3ktY29uZmlndXJhYmxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL21ha2UtZ2lvX3VuaXhfMl8wLWRlcGVuZGVuY3ktY29uZmlndXJhYmxlLnBhdGNoCmluZGV4IDAxZTk0NGQuLjQxM2VmZjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9tYWtlLWdpb191bml4XzJfMC1kZXBlbmRlbmN5LWNvbmZpZ3VyYWJsZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvbWFrZS1naW9fdW5peF8yXzAtZGVwZW5kZW5jeS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTI1LDggKzI1LDggQEAKIGluZGV4IDljNTJhZWIuLjI2Y2FjZDYgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUuYWMKICsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTc0Nyw5ICs3NDcsMTYgQEAgQUNfU1VCU1QoRlQyX0NGTEFHUykKLSBBQ19TVUJTVChGVDJfTElCUykKK0BAIC03NTIsOSArNzUyLDE2IEBAIEFDX1NVQlNUKEZUMl9DRkxBR1MpCisgZmkgZG5sIG9mIEVYVCBwbHVnaW5zCiAgCiAgZG5sICoqKiBnaW8tdW5peC0yLjAgZm9yIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy90Y3AuYyAqKioKICtBQ19BUkdfRU5BQkxFKFtnaW9fdW5peF8yXzBdLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNi4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjlkYzkzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjYuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLWluY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDciCi0KLSMgTm90ZTogVGhlIGRlcGVuZGVuY3kgb24gZnJlZXR5cGUgd2FzIGRyb3BwZWQgc2hvcnRseSBhZnRlciB0aGUgMS43LjEgcmVsZWFzZQotIyBzbyB0aGVzZSBsaW5lcyBzaG91bGQgYmUgcmVtb3ZlZCBkdXJpbmcgdGhlIHVwZGF0ZSB0byAxLjgueAotIyBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0Lz9pZD0xODM2MTBjMDM1ZGQ2OTU1YzliMzU0MGI5NDBhZWM1MDQ3NGFmMDMxCi1ERVBFTkRTICs9ICJmcmVldHlwZSIKLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWZyZWV0eXBldGVzdCIKLQotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1iYXNlL2dzdC1wbHVnaW5zLWJhc2UtJHtQVn0udGFyLnh6IFwKLSAgICBmaWxlOi8vZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIFwKLSAgICBmaWxlOi8vZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDUtY29udmVydGZyYW1lLVN1cHBvcnQtdmlkZW8tY3JvcC13aGVuLWNvbnZlcnQtZnJhbWUucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiM2RkZGUwYWQ1OThlZjY5ZjU4ZDZhMmU4N2Y4YjQ2MGYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjYxNTRmOGZkYmE0ODc3ZTk1ZWZkOTQ2MTBlZjBhZGE0ZjAxNzFjZDEyZWI4MjlhM2MzYzk3MzQ1ZDljN2E3NSIKLQotUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhc2UtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS44LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2YjVhYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjguMy5iYgpAQCAtMCwwICsxLDE5IEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM1NGNlOTM0NTcyNzE3NWZmNjZkMTdiNjdmZjUxZjU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LXBsdWdpbnMtYmFzZS0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggXAorICAgIGZpbGU6Ly9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIFwKKyAgICBmaWxlOi8vbWFrZS1naW9fdW5peF8yXzAtZGVwZW5kZW5jeS1jb25maWd1cmFibGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGQwM2RkODE4MjhlYTZiOThhNDRjOGYxYWI3ZjQ5NzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTE0ODcxZDRkNjM2MDZiNGFmNDI0YTg0MzNjZDkyM2U0ZmY2Njg5NmIyNDRiYjdhYzk3YjlkYTQ3ZjcxZTc5ZSIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhc2UtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlX2dpdC5iYgppbmRleCAzOGE5ZmNjLi4zYzJiNTA0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKQEAgLTcsMTcgKzcsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDciCiAKIFNSQ19VUkkgPSAiIFwKLSAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFzZTtuYW1lPWJhc2UgXAorICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYXNlO2JyYW5jaD0xLjg7bmFtZT1iYXNlIFwKICAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uO2Rlc3RzdWZmaXg9Z2l0L2NvbW1vbjtuYW1lPWNvbW1vbiBcCisgICAgZmlsZTovL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaCBcCisgICAgZmlsZTovL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2ggXAogICAgIGZpbGU6Ly9tYWtlLWdpb191bml4XzJfMC1kZXBlbmRlbmN5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCiAiCiAKLVBWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorUFYgPSAiMS44LjIrZ2l0JHtTUkNQVn0iCiAKIFVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgogCi1TUkNSRVZfYmFzZSA9ICI5N2UxMDhiZWJhYTU4ODIxZjQ1NjZhNzRjYmYwMTM1ZTkzNDA3YzAxIgotU1JDUkVWX2NvbW1vbiA9ICJiNjRmMDNmNjA5MDI0NTYyNDYwOGJlYjVkMmZmZjMzNWUyM2EwMWMwIgorU1JDUkVWX2Jhc2UgPSAiNzBmMzc1MDc3M2JmNWRiYTQwOThmNmQ3MmQ2M2FhNmM4NGYxZjUzOSIKK1NSQ1JFVl9jb21tb24gPSAiZjM2M2IzMjA1NjU4YTM4ZTg0ZmE3N2YxOWRlZTIxOGNkNDQ0NTI3NSIKIFNSQ1JFVl9GT1JNQVQgPSAiYmFzZSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCmluZGV4IDQ2MjFiZjguLmYxZTMwYWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYwpAQCAtMjMsMTIgKzIzLDEyIEBACiBQQUNLQUdFQ09ORklHW2phY2tdICAgICAgID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKIFBBQ0tBR0VDT05GSUdbanBlZ10gICAgICAgPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgogUEFDS0FHRUNPTkZJR1tsaWJwbmddICAgICA9ICItLWVuYWJsZS1saWJwbmcsLS1kaXNhYmxlLWxpYnBuZyxsaWJwbmciCi1QQUNLQUdFQ09ORklHW2xpYnY0bDJdICAgID0gIi0td2l0aC1saWJ2NGwyLC0td2l0aG91dC1saWJ2NGwyLGxpYnY0bDIiCitQQUNLQUdFQ09ORklHW2xpYnY0bDJdICAgID0gIi0td2l0aC1saWJ2NGwyLC0td2l0aG91dC1saWJ2NGwyLHY0bC11dGlscyIKIFBBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2UsLS1kaXNhYmxlLXB1bHNlLHB1bHNlYXVkaW8iCiBQQUNLQUdFQ09ORklHW3NvdXBdICAgICAgID0gIi0tZW5hYmxlLXNvdXAsLS1kaXNhYmxlLXNvdXAsbGlic291cC0yLjQiCiBQQUNLQUdFQ09ORklHW3NwZWV4XSAgICAgID0gIi0tZW5hYmxlLXNwZWV4LC0tZGlzYWJsZS1zcGVleCxzcGVleCIKIFBBQ0tBR0VDT05GSUdbdGFnbGliXSAgICAgPSAiLS1lbmFibGUtdGFnbGliLC0tZGlzYWJsZS10YWdsaWIsdGFnbGliIgotUEFDS0FHRUNPTkZJR1t2NGwyXSAgICAgICA9ICItLWVuYWJsZS1nc3RfdjRsMiwtLWRpc2FibGUtZ3N0X3Y0bDIiCitQQUNLQUdFQ09ORklHW3Y0bDJdICAgICAgID0gIi0tZW5hYmxlLWdzdF92NGwyIC0tZW5hYmxlLXY0bDItcHJvYmUsLS1kaXNhYmxlLWdzdF92NGwyIgogUEFDS0FHRUNPTkZJR1t2cHhdICAgICAgICA9ICItLWVuYWJsZS12cHgsLS1kaXNhYmxlLXZweCxsaWJ2cHgiCiBQQUNLQUdFQ09ORklHW3dhdnBhY2tdICAgID0gIi0tZW5hYmxlLXdhdnBhY2ssLS1kaXNhYmxlLXdhdnBhY2ssd2F2cGFjayIKIFBBQ0tBR0VDT05GSUdbeDExXSAgICAgICAgPSAiLS1lbmFibGUteCwtLWRpc2FibGUteCwke1gxMURFUEVORFN9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2gKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBkMTk3M2Q0Li5hMmNiYjcwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApAQCAtMTcsNyArMTcsNyBAQAogaW5kZXggNzkxM2Q5YS4uMTc0OWQzOSAxMDA2NDQKIC0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCiArKysgYi9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYwotQEAgLTM5MCw2ICszOTAsNyBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCitAQCAtMzkxLDYgKzM5MSw3IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKICAgIGNvbnN0IEdWYWx1ZSAqY29kZWNfZGF0YTsKICAgIGNvbnN0IGdjaGFyICptZWRpYV90eXBlID0gTlVMTDsKICAgIGdib29sZWFuIHJlczsKQEAgLTI1LDcgKzI1LDcgQEAKICAKICAgIHJ0cG1wNGdwYXkgPSBHU1RfUlRQX01QNEdfUEFZIChwYXlsb2FkKTsKICAKLUBAIC00MDAsNyArNDAxLDYgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorQEAgLTQwMSw3ICs0MDIsNiBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCiAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiZ290IGNvZGVjX2RhdGEiKTsKICAgICAgaWYgKEdfVkFMVUVfVFlQRSAoY29kZWNfZGF0YSkgPT0gR1NUX1RZUEVfQlVGRkVSKSB7CiAgICAgICAgR3N0QnVmZmVyICpidWZmZXI7CkBAIC0zMyw3ICszMyw3IEBACiAgCiAgICAgICAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGNvZGVjX2RhdGEpOwogICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiY29uZmlndXJpbmcgY29kZWNfZGF0YSIpOwotQEAgLTQyNiw2ICs0MjYsMjMgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorQEAgLTQyNyw2ICs0MjcsMjMgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQogIAogICAgICAgIHJ0cG1wNGdwYXktPmNvbmZpZyA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKICAgICAgfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNi4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjRmNDM2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjYuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWluY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhMTk1OGRmN2FhNDk4YjQyNzkzZTJmMjA0ODY3MzgxNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyNGIxOWRiNzBiMmE4MzQ2MWViZGRmZTIwMDMzZGI0MzJkYWRmZGI1ZDRiNTRmZmIxZGZhMGQ4MzAxMzRhMTc3IgotCi1TID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtZ29vZC0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjguMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M2NTc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuOC4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBcCisgICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKKyAgICBmaWxlOi8vZW5zdXJlLXZhbGlkLXNlbnRpbmVsLWZvci1nc3Rfc3RydWN0dXJlX2dldC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NzNlYmIxZjE1YzY3ZGU5OWRkYjZlNGQwMjdjMDg3NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMWQ2NTc5YmEyMDNhNzczNDkyN2MyNGI5MGJmNjU5MGQ4NDZjNWE1ZmNlYzAxYTQ4MjAxMDE4YzhhZDI4MjdhIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtZ29vZC0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCmluZGV4IDljYWRjOWEuLjliNzlhZjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kX2dpdC5iYgpAQCAtNywxOCArNywxOSBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWI2MGViZWZkNWIyZjVhOGUwY2FiNmJmZWUzOTFhNWZlIgogCiBTUkNfVVJJID0gIiBcCi0gICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2Q7bmFtZT1iYXNlIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtZ29vZDticmFuY2g9MS44O25hbWU9YmFzZSBcCiAgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247bmFtZT1jb21tb24gXAogICAgIGZpbGU6Ly9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaCBcCiAgICAgZmlsZTovL2Vuc3VyZS12YWxpZC1zZW50aW5lbC1mb3ItZ3N0X3N0cnVjdHVyZV9nZXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2ggXAogIgogCi1QViA9ICIxLjcuMitnaXQke1NSQ1BWfSIKK1BWID0gIjEuOC4yK2dpdCR7U1JDUFZ9IgogCiBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKIAotU1JDUkVWX2Jhc2UgPSAiMWI2ZmRjZTY3YzE1ZDU5OTU3ZTM5NWIxOTU3YWE2MjUzMjIwOTJkNCIKLVNSQ1JFVl9jb21tb24gPSAiYjY0ZjAzZjYwOTAyNDU2MjQ2MDhiZWI1ZDJmZmYzMzVlMjNhMDFjMCIKK1NSQ1JFVl9iYXNlID0gIjlmNzNiNTgxOGY5OGNkMDQ1ZTcwNDliYjMxM2RhMWM5NDM2MzUxMDkiCitTUkNSRVZfY29tbW9uID0gImYzNjNiMzIwNTY1OGEzOGU4NGZhNzdmMTlkZWUyMThjZDQ0NDUyNzUiCiBTUkNSRVZfRk9STUFUID0gImJhc2UiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwppbmRleCBhZmYyMjMwLi43MDhhZDdhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKQEAgLTksNyArOSw3IEBACiAKIFBBQ0tBR0VDT05GSUcgPz89ICIgXAogICAgICR7R1NUUkVBTUVSX09SQ30gXAotICAgIGE1MmRlYyBsYW1lIG1hZCBtcGVnMmRlYyBcCisgICAgYTUyZGVjIGxhbWUgbXBnMTIzIG1wZWcyZGVjIFwKICIKIAogUEFDS0FHRUNPTkZJR1thNTJkZWNdICAgPSAiLS1lbmFibGUtYTUyZGVjLC0tZGlzYWJsZS1hNTJkZWMsbGliYTUyIgpAQCAtMjAsNiArMjAsNyBAQAogUEFDS0FHRUNPTkZJR1tsYW1lXSAgICAgPSAiLS1lbmFibGUtbGFtZSwtLWRpc2FibGUtbGFtZSxsYW1lIgogUEFDS0FHRUNPTkZJR1ttYWRdICAgICAgPSAiLS1lbmFibGUtbWFkLC0tZGlzYWJsZS1tYWQsbGlibWFkIgogUEFDS0FHRUNPTkZJR1ttcGVnMmRlY10gPSAiLS1lbmFibGUtbXBlZzJkZWMsLS1kaXNhYmxlLW1wZWcyZGVjLG1wZWcyZGVjIgorUEFDS0FHRUNPTkZJR1ttcGcxMjNdICAgPSAiLS1lbmFibGUtbXBnMTIzLC0tZGlzYWJsZS1tcGcxMjMsbXBnMTIzIgogUEFDS0FHRUNPTkZJR1t4MjY0XSAgICAgPSAiLS1lbmFibGUteDI2NCwtLWRpc2FibGUteDI2NCx4MjY0IgogCiBFWFRSQV9PRUNPTkYgKz0gIiBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS42LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZGZiODEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjgiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtdWdseS9nc3QtcGx1Z2lucy11Z2x5LSR7UFZ9LnRhci54eiBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJkYmQ5MmFmYjM4MTZjYmZhOTBhYjFmMTk3MTQ0YTJlMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyZmVjZjdiN2M3ODgyZjhmNjJmMTkwMDA0OGY0MDEzZjk4YzIxNGZiM2QzMzAzZDhkODEyMjQ1YmI0MWZkMDY0IgotCi1TID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtdWdseS0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjguMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ1OTM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuOC4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvY2hlY2svZWxlbWVudHMveGluZ211eC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PTRjNzcxYjhhZjE4ODcyNDg1NWNiOTljYWRkMzkwMDY4IgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLXVnbHkvZ3N0LXBsdWdpbnMtdWdseS0ke1BWfS50YXIueHogXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGZjNjZjNzcyNTNiMGFkNWNlMjI0YmRhNjU0YjJlN2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmZhMjU5OWZkZDA3MmQzMWZiYWY1MGMzNGFmNDA2ZTJiZTk0NGEwMTBiMWY0ZWFiNjdhNWZlMzJhMDMxMDY5MyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLXVnbHktJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5X2dpdC5iYgppbmRleCA2OWFmZTRjLi4yMmNjYTNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV9naXQuYmIKQEAgLTYsMjQgKzYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3hpbmdtdXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT00Yzc3MWI4YWYxODg3MjQ4NTVjYjk5Y2FkZDM5MDA2OCIKIAogU1JDX1VSSSA9ICIgXAotICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy11Z2x5O25hbWU9YmFzZSBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXVnbHk7YnJhbmNoPTEuODtuYW1lPWJhc2UgXAogICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9jb21tb247ZGVzdHN1ZmZpeD1naXQvY29tbW9uO25hbWU9Y29tbW9uIFwKICIKIAotUFYgPSAiMS43LjIrZ2l0JHtTUkNQVn0iCitQViA9ICIxLjguMitnaXQke1NSQ1BWfSIKIAogVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCiAKLVNSQ1JFVl9iYXNlID0gIjhiZGI2OGVkYmM2MDVlMjEzMTRiNjA4ZTdhMzliZGJhYWI3MzAyYjgiCi1TUkNSRVZfY29tbW9uID0gImI2NGYwM2Y2MDkwMjQ1NjI0NjA4YmViNWQyZmZmMzM1ZTIzYTAxYzAiCitTUkNSRVZfYmFzZSA9ICI3OWZlNDNjMDA5MjU0NTVhMzdmYWI2ZmM0MjhlN2YwODY1NWE5YmJkIgorU1JDUkVWX2NvbW1vbiA9ICJmMzYzYjMyMDU2NThhMzhlODRmYTc3ZjE5ZGVlMjE4Y2Q0NDQ1Mjc1IgogU1JDUkVWX0ZPUk1BVCA9ICJiYXNlIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCi0jIFRoZSBtcGcxMjMgcGx1Z2luIHdhcyBhZGRlZCBwcmlvciB0byB0aGUgMS43LjIgcmVsZWFzZQotIyBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy11Z2x5L2NvbW1pdC8/aWQ9NDNiZDQ1YmE5OTFlZjMyNDc5NTdjYTM3Y2RjYjUyZjRiOGMwYWNiMQotUEFDS0FHRUNPTkZJR1ttcGcxMjNdID0gIi0tZW5hYmxlLW1wZzEyMywtLWRpc2FibGUtbXBnMTIzLG1wZzEyMyIKLQogZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CiAJJHtTfS9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKaW5kZXggMmRjZWM1MC4uOWNmY2VjMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKQEAgLTUsNyArNSw3IEBACiAKIERFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdsaWItMi4wLW5hdGl2ZSIKIAotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MKIAogYWNwYXRocyA9ICItSSAke1N9L2NvbW1vbi9tNCAtSSAke1N9L200IgogCkBAIC0zMyw4ICszMywyMSBAQAogZGVsZXRlX3BrZ19tNF9maWxlKCkgewogCSMgVGhpcyBtNCBmaWxlIGlzIG91dCBvZiBkYXRlIGFuZCBpcyBtaXNzaW5nIFBLR19DT05GSUdfU1lTUk9PVF9QQVRIIHR3ZWFrcyB3aGljaCB3ZSBuZWVkIGZvciBpbnRyb3NwZWN0aW9uCiAJcm0gIiR7U30vY29tbW9uL200L3BrZy5tNCIgfHwgdHJ1ZQorCXJtIC1mICIke1N9L2NvbW1vbi9tNC9ndGstZG9jLm00IgogfQogCi1kb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICIgZGVsZXRlX3BrZ19tNF9maWxlIgorIyBnc3RyZWFtZXIgaXMgbm90IHVzaW5nIHN5c3RlbS13aWRlIG1ha2VmaWxlcyAod2hpY2ggd2UgcGF0Y2ggaW4gZ3RrZG9jIHJlY2lwZSwKKyMgYnV0IGl0cyBvd24gY3VzdG9tIG9uZXMsIHdoaWNoIHdlIGhhdmUgdG8gcGF0Y2ggaGVyZQorcGF0Y2hfZ3RrX2RvY19tYWtlZmlsZXMoKSB7CisgICAgICAgICMgUGF0Y2ggdGhlIGd0ay1kb2MgbWFrZWZpbGVzIHNvIHRoYXQgdGhlIHFlbXUgd3JhcHBlciBpcyB1c2VkIHRvIHJ1biB0cmFuc2llbnQgYmluYXJpZXMKKyAgICAgICAgIyBpbnN0ZWFkIG9mIGxpYnRvb2wgd3JhcHBlciBvciBydW5uaW5nIHRoZW0gZGlyZWN0bHkKKyAgICAgICAgIyBBbHNvIHN1YnN0aXR1dGUgYSBib2d1cyBwbHVnaW4gc2Nhbm5lciwgYXMgdHJ5aW5nIHRvIHJ1biB0aGUgcmVhbCBvbmUgaXMgY2F1c2luZyBpc3N1ZXMgZHVyaW5nIGJ1aWxkIG9uIHg4Nl82NC4KKyAgICAgICAgc2VkIC1pIFwKKyAgICAgICAgICAgLWUgInN8R1RLRE9DX1JVTiA9Lip8R1RLRE9DX1JVTiA9IFwkKHRvcF9idWlsZGRpcikvZ3RrZG9jLXFlbXV3cmFwcGVyfCIgXAorICAgICAgICAgICAtZSAic3xcJChHVEtET0NfRVhUUkFfRU5WSVJPTk1FTlQpfFwkKEdUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVCkgR1NUX1BMVUdJTl9TQ0FOTkVSXzFfMD1cJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyLWR1bW15fCIgXAorICAgICAgICAgICAke1N9L2NvbW1vbi9ndGstZG9jKm1haworfQorCitkb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICIgZGVsZXRlX3BrZ19tNF9maWxlIHBhdGNoX2d0a19kb2NfbWFrZWZpbGVzIgogCiBQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS0uKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYwppbmRleCBhZTZkMzY0Li4xM2JhNDBkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCkBAIC0xMywxMiArMTMsMjYgQEAKIAogUyA9ICIke1dPUktESVJ9LyR7UE5SRUFMfS0ke1BWfSIKIAotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MKKworIyBTdGFydGluZyB3aXRoIDEuOC4wIGdzdC1ydHNwLXNlcnZlciBpbmNsdWRlcyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2lucyBhcyB3ZWxsCitMSUJWID0gIjEuMCIKK3JlcXVpcmUgZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMKIAogZGVsZXRlX3BrZ19tNF9maWxlKCkgewogICAgICAgICAjIFRoaXMgbTQgZmlsZSBpcyBvdXQgb2YgZGF0ZSBhbmQgaXMgbWlzc2luZyBQS0dfQ09ORklHX1NZU1JPT1RfUEFUSCB0d2Vha3Mgd2hpY2ggd2UgbmVlZCBmb3IgaW50cm9zcGVjdGlvbgogICAgICAgICBybSAiJHtTfS9jb21tb24vbTQvcGtnLm00IiB8fCB0cnVlCiB9CiAKLWRvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfcGtnX200X2ZpbGUiCisjIGdzdHJlYW1lciBpcyBub3QgdXNpbmcgc3lzdGVtLXdpZGUgbWFrZWZpbGVzICh3aGljaCB3ZSBwYXRjaCBpbiBndGtkb2MgcmVjaXBlLAorIyBidXQgaXRzIG93biBjdXN0b20gb25lcywgd2hpY2ggd2UgaGF2ZSB0byBwYXRjaCBoZXJlCitwYXRjaF9ndGtfZG9jX21ha2VmaWxlcygpIHsKKyAgICAgICAgIyBQYXRjaCB0aGUgZ3RrLWRvYyBtYWtlZmlsZXMgc28gdGhhdCB0aGUgcWVtdSB3cmFwcGVyIGlzIHVzZWQgdG8gcnVuIHRyYW5zaWVudCBiaW5hcmllcworICAgICAgICAjIGluc3RlYWQgb2YgbGlidG9vbCB3cmFwcGVyIG9yIHJ1bm5pbmcgdGhlbSBkaXJlY3RseQorICAgICAgICBzZWQgLWkgXAorICAgICAgICAgICAtZSAic3xHVEtET0NfUlVOID0uKnxHVEtET0NfUlVOID0gXCQodG9wX2J1aWxkZGlyKS9ndGtkb2MtcWVtdXdyYXBwZXJ8IiBcCisgICAgICAgICAgICR7U30vY29tbW9uL2d0ay1kb2MqbWFrCit9CisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfcGtnX200X2ZpbGUgcGF0Y2hfZ3RrX2RvY19tYWtlZmlsZXMiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS42LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZGFlNmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS42LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWluY2x1ZGUgZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCIKLQotU1JDX1VSSVttZDVzdW1dID0gImExY2FmZWZiNWZjMTRhYzVkN2U3ZDhjZGJkZmE5Njk0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBmNTFmOTg3OTU1NmMwOTUwMjAzYzc2NmIwOWExYjYyZjFmMjViMTdmOWE3ZDUxNmUwMWIxM2VjZjkzYzg4NTgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjguMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDU5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjguMy5iYgpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCIKKworU1JDX1VSSVttZDVzdW1dID0gImU0YjA3YjEwZGQ2NWI2YzI2YzljYTVmNzJlNTkyOTdiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAxMGYwNjgwMGMxYzk1Nzg1MWQxMzUyZTVlYzdhOGJhM2NlNmE4NTdmZWMxYjhhZmM3ZDFhOWU1ZjUzMjg4YmYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMKaW5kZXggMTBiNDY2OC4uY2IwYmQ4MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYwpAQCAtOCw3ICs4LDcgQEAKIAogREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgbGliY2FwIGxpYnhtbDIgYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MKIAogIyBUaGlzIHdheSBjb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCB3aWxsIGNvbWUgZmlyc3QKICMgKGl0IGhhcyBhIGN1c3RvbSBJTlRST1NQRUNUSU9OX0lOSVQgbWFjcm8sIGFuZCBzbyBtdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBvdXIgY29tbW9uIGludHJvc3BlY3Rpb24ubTQgZmlsZSkKQEAgLTIwLDE2ICsyMCwxNiBAQAogCiBQQUNLQUdFQ09ORklHID8/PSAiIgogCi1QQUNLQUdFQ09ORklHW2NoZWNrXSA9ICItLWVuYWJsZS1jaGVjaywtLWRpc2FibGUtY2hlY2siCiBQQUNLQUdFQ09ORklHW2RlYnVnXSA9ICItLWVuYWJsZS1kZWJ1ZywtLWRpc2FibGUtZGVidWciCiBQQUNLQUdFQ09ORklHW3Rlc3RzXSA9ICItLWVuYWJsZS10ZXN0cywtLWRpc2FibGUtdGVzdHMiCiBQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLWVuYWJsZS12YWxncmluZCwtLWRpc2FibGUtdmFsZ3JpbmQsdmFsZ3JpbmQsIgorUEFDS0FHRUNPTkZJR1tnc3QtdHJhY2VyLWhvb2tzXSA9ICItLWVuYWJsZS1nc3QtdHJhY2VyLWhvb2tzLC0tZGlzYWJsZS1nc3QtdHJhY2VyLWhvb2tzLCIKK1BBQ0tBR0VDT05GSUdbdHJhY2UtaGlzdG9yaWNdID0gIi0tZW5hYmxlLXRyYWNlLC0tZGlzYWJsZS10cmFjZSwiCiAKIEVYVFJBX09FQ09ORiA9ICIgXAogICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKICAgICAtLWRpc2FibGUtZG9jYm9vayBcCiAgICAgLS1kaXNhYmxlLWV4YW1wbGVzIFwKLSAgICAtLWRpc2FibGUtZ3RrLWRvYyBcCiAiCiAKIENBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD1ubyIKQEAgLTQ5LDkgKzQ5LDIyIEBACiBkZWxldGVfcGtnX200X2ZpbGUoKSB7CiAgICAgICAgICMgVGhpcyBtNCBmaWxlIGlzIG91dCBvZiBkYXRlIGFuZCBpcyBtaXNzaW5nIFBLR19DT05GSUdfU1lTUk9PVF9QQVRIIHR3ZWFrcyB3aGljaCB3ZSBuZWVkIGZvciBpbnRyb3NwZWN0aW9uCiAgICAgICAgIHJtICIke1N9L2NvbW1vbi9tNC9wa2cubTQiIHx8IHRydWUKKyAgICAgICAgcm0gLWYgIiR7U30vY29tbW9uL200L2d0ay1kb2MubTQiCiB9CiAKLWRvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfcGtnX200X2ZpbGUiCisjIGdzdHJlYW1lciBpcyBub3QgdXNpbmcgc3lzdGVtLXdpZGUgbWFrZWZpbGVzICh3aGljaCB3ZSBwYXRjaCBpbiBndGtkb2MgcmVjaXBlLAorIyBidXQgaXRzIG93biBjdXN0b20gb25lcywgd2hpY2ggd2UgaGF2ZSB0byBwYXRjaCBoZXJlCitwYXRjaF9ndGtfZG9jX21ha2VmaWxlcygpIHsKKyAgICAgICAgIyBQYXRjaCB0aGUgZ3RrLWRvYyBtYWtlZmlsZXMgc28gdGhhdCB0aGUgcWVtdSB3cmFwcGVyIGlzIHVzZWQgdG8gcnVuIHRyYW5zaWVudCBiaW5hcmllcworICAgICAgICAjIGluc3RlYWQgb2YgbGlidG9vbCB3cmFwcGVyIG9yIHJ1bm5pbmcgdGhlbSBkaXJlY3RseQorICAgICAgICAjIEFsc28gc3Vic3RpdHV0ZSBhIGJvZ3VzIHBsdWdpbiBzY2FubmVyLCBhcyB0cnlpbmcgdG8gcnVuIHRoZSByZWFsIG9uZSBpcyBjYXVzaW5nIGlzc3VlcyBkdXJpbmcgYnVpbGQgb24geDg2XzY0LgorICAgICAgICBzZWQgLWkgXAorICAgICAgICAgICAtZSAic3xHVEtET0NfUlVOID0uKnxHVEtET0NfUlVOID0gXCQodG9wX2J1aWxkZGlyKS9ndGtkb2MtcWVtdXdyYXBwZXJ8IiBcCisgICAgICAgICAgIC1lICJzfFwkKEdUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVCl8XCQoR1RLRE9DX0VYVFJBX0VOVklST05NRU5UKSBHU1RfUExVR0lOX1NDQU5ORVJfMV8wPVwkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXItZHVtbXl8IiBcCisgICAgICAgICAgICR7U30vY29tbW9uL2d0ay1kb2MqbWFrCit9CisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfcGtnX200X2ZpbGUgcGF0Y2hfZ3RrX2RvY19tYWtlZmlsZXMiCiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKICAgICAgICAgZXhwb3J0IEdJUl9FWFRSQV9MSUJTX1BBVEg9IiR7Qn0vZ3N0Ly5saWJzOiR7Qn0vbGlicy9nc3QvYmFzZS8ubGlicyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGY1Y2M1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1Gcm9tIDZiMjZmM2RiZjliZjU3N2Q3MTUzNGFiNzQxMGRlNjZkMDZlNDZiYTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci1EYXRlOiBTYXQsIDYgQXByIDIwMTMgMjM6NTI6MTEgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IGNyYXNoIHdpdGggZ3N0LWluc3BlY3QgQ2hyaXMgTG9yZCA8Y2hyaXNAb3BlbmVkaGFuZC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci0tLS0KLSB0b29scy9nc3QtaW5zcGVjdC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvdG9vbHMvZ3N0LWluc3BlY3QuYyBiL3Rvb2xzL2dzdC1pbnNwZWN0LmMKLWluZGV4IDIzYjdjNDQuLmI3OWIwMmUgMTAwNjQ0Ci0tLS0gYS90b29scy9nc3QtaW5zcGVjdC5jCi0rKysgYi90b29scy9nc3QtaW5zcGVjdC5jCi1AQCAtMTU1Niw3ICsxNTU2LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOwotICAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgewotLSAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKLSsgICAgZ19wcmludGVyciAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyciA/IGVyci0+bWVzc2FnZSA6ICIobnVsbCkiKTsKLSAgICAgcmV0dXJuIC0xOwotICAgfQotICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotLS0gCi0xLjguMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjYuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuNi4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTFiODNiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKLQotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjRjZGViMmI5Y2IyMGRkNmFjMDIyYTRmNDE3ZWFlMGQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjJmOTU2OGQ2N2I4N2NmNzAwYTExMWYzODExNDRiZDM3Y2I5Mzc5MGE3N2U0ZTMzMWRiMDFmZTg1NGEzN2YyNCIKLQotUyA9ICIke1dPUktESVJ9L2dzdHJlYW1lci0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1NjFlYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuOC4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0ke1BWfS50YXIueHogXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTg4ZGFkNTQyZGY5ZDk4NjgyMmU5ODIxMDVkMmI1MzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjZiMzc3NjJkNGZkY2Q2M2JjZTVhMmJlYzU3ZTA1NWY5MjQyMGU5NTAzNzM2MTYwOTkwMDI3OGMwZGI3YzUzZiIKKworUyA9ICIke1dPUktESVJ9L2dzdHJlYW1lci0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wX2dpdC5iYgppbmRleCA3NzE1YmIyLi42MTEyZjJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiCkBAIC02LDI1ICs2LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCiAKIFNSQ19VUkkgPSAiIFwKLSAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyO25hbWU9YmFzZSBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lcjticmFuY2g9MS44O25hbWU9YmFzZSBcCiAgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247bmFtZT1jb21tb24gXAogIgogCi1QViA9ICIxLjcuMitnaXQke1NSQ1BWfSIKK1BWID0gIjEuOC4yK2dpdCR7U1JDUFZ9IgogCiBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKIAotU1JDUkVWX2Jhc2UgPSAiOWUzM2JmYTJjN2E1ZjQzZGEyYzQ5YjBhODIzNWZkNDNjYmE5ZmVhZiIKLVNSQ1JFVl9jb21tb24gPSAiYjY0ZjAzZjYwOTAyNDU2MjQ2MDhiZWI1ZDJmZmYzMzVlMjNhMDFjMCIKK1NSQ1JFVl9iYXNlID0gIjNkZThhNGY3MjhhNzE5NGExMmI3ODRlYzQwODVmNmE4ZTdkOWI1YmQiCitTUkNSRVZfY29tbW9uID0gImYzNjNiMzIwNTY1OGEzOGU4NGZhNzdmMTlkZWUyMThjZDQ0NDUyNzUiCiBTUkNSRVZfRk9STUFUID0gImJhc2UiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKLSMgVGhlIG9wdGlvbiB0byBjb25maWd1cmUgdHJhY2VyIGhvb2tzIHdhcyBhZGRlZCBwcmlvciB0byB0aGUgMS43LjIgcmVsZWFzZQotIyBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvY29tbWl0Lz9pZD1lNWNhNDcyMzZlNGRmNDY4MzcwN2YwYmNmOTkxODFhOTM3ZDM1OGQ1Ci1QQUNLQUdFQ09ORklHW2dzdC10cmFjZXItaG9va3NdID0gIi0tZW5hYmxlLWdzdC10cmFjZXItaG9va3MsLS1kaXNhYmxlLWdzdC10cmFjZXItaG9va3MsIgotUEFDS0FHRUNPTkZJR1t0cmFjZS1oaXN0b3JpY10gPSAiLS1lbmFibGUtdHJhY2UsLS1kaXNhYmxlLXRyYWNlLCIKLQogZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CiAJJHtTfS9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoCmluZGV4IDU3MWExZDAuLjUxYmFlZjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaApAQCAtNCw3ICs0LDcgQEAKIHwgZG9jL21hbi9NYWtlZmlsZS5hbTozOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCiB8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCiAKLVNpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNy8xMwogCiBJbmRleDogbGFtZS0zLjk5LjUvY29uZmlndXJlLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hZGQtcGtnY29uZmlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYWRkLXBrZ2NvbmZpZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ5ZGM4Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hZGQtcGtnY29uZmlnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotSGVyZSBpcyBhIHBhdGNoIGZvciBhZGRpbmcgcGtnLWNvbmZpZyBzdXBwb3J0IHRvIGxpYm1hZC4KLUl0IHdvdWxkIG1ha2UgbGlmZSBhIGJpdCBlYXNpZXIgZm9yIGRpc3RybyBtYWludGFpbmVycyBpZiB0aGlzIHdhcyBhcHBsaWVkLgotSW4gY2FzZSB5b3UgZGlkbid0IGtub3csIHBrZy1jb25maWcgaXMgYSB0b29sIGZvciBwcm92aWRpbmcgTERGTEFHUyBhbmQKLUNGTEFHUyBmb3IgcGFja2FnZXMgdXNpbmcgc2hhcmVkIGxpYnJhcmllcy4gSXQncyBvbiBmcmVlZGVza3RvcC5vcmcuCi1EZWJpYW4gaGFzIGFscmVhZHkgYmVlbiBkaXN0cmlidXRpbmcgdGhlIHBrZy1jb25maWcgZmlsZSBtYWQucGMgd2l0aAotbGlibWFkIGZvciBzb21lIHRpbWUsIGFuZCBwZW9wbGUgZGV2ZWxvcGluZyBvbiBkZWJpYW4gKG5vdGFibHkgeG1tczIgCi1kZXZlbG9wZXJzKSBoYXZlIHN0YXJ0ZWQgcmVseWluZyBvbiB0aGlzIHN1cHBvcnQgYmVpbmcgcHJlc2VudCwgY2F1c2luZwotc29tZSBjb25mdXNpb24gZm9yIHBlb3BsZSBpbnN0YWxsaW5nIGZyb20gc291cmNlIGFuZCBvbiBzb21lIEJTRHMgd2hpY2gKLWRvIG5vdCBwcm92aWRlIG1hZC5wYyAoZ29vZ2xlOiBwa2djb25maWcgbGlibWFkKS4KLQotRU1ICi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotLS1oMzFnelpFdE5MVHFPamxGCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKLUNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSZxdW90O2xpYm1hZC0wLjE1LjFiLXBrZ2NvbmZpZy5wYXRjaCZxdW90OwotCi1kaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCi0tLS0gbGlibWFkLTAuMTUuMWIub2xkL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTIzIDEwOjQxOjMyLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTA4LTA3IDAyOjI1OjI0LjYzMzQ2MjE2OCArMDIwMAotQEAgLTQyOSw1ICs0MjksNSBAQAotIGRubCBBQ19TVUJTVChMVExJQk9CSlMpCi0gCi0gQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtc3ZjKysvTWFrZWZpbGUgIFwKLS0JbGlibWFkLmxpc3RdKQotKwlsaWJtYWQubGlzdCBtYWQucGNdKQotIEFDX09VVFBVVAotZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvbWFkLnBjLmluIGxpYm1hZC0wLjE1LjFiL21hZC5wYy5pbgotLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9tYWQucGMuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBsaWJtYWQtMC4xNS4xYi9tYWQucGMuaW4JMjAwNC0wOC0wNyAwMjowNDo1OS42MTc2OTI4NzIgKzAyMDAKLUBAIC0wLDAgKzEsMTQgQEAKLSsjIGxpYm1hZCBwa2ctY29uZmlnIHNvdXJjZSBmaWxlCi0rCi0rcHJlZml4PUBwcmVmaXhACi0rZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAotK2xpYmRpcj1AbGliZGlyQAotK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACi0rCi0rTmFtZTogbWFkCi0rRGVzY3JpcHRpb246IE1QRUcgQXVkaW8gRGVjb2RlcgotK1ZlcnNpb246IEBWRVJTSU9OQAotK1JlcXVpcmVzOgotK0NvbmZsaWN0czoKLStMaWJzOiAtTCR7bGliZGlyfSAtbG1hZCAtbG0KLStDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQotZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0gbGlibWFkLTAuMTUuMWIvTWFrZWZpbGUuYW0KLS0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0JMjAwNC0wMi0xNyAwMzowMjowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBsaWJtYWQtMC4xNS4xYi9NYWtlZmlsZS5hbQkyMDA0LTA4LTA3IDAyOjAzOjE5Ljg1OTg1ODM2OCArMDIwMAotQEAgLTI0LDYgKzI0LDkgQEAKLSBTVUJESVJTID0JCQotIERJU1RfU1VCRElSUyA9CQltc3ZjKysKLSAKLStwa2djb25maWdkaXIgPQkJJChsaWJkaXIpL3BrZ2NvbmZpZwotK3BrZ2NvbmZpZ19EQVRBID0JbWFkLnBjCi0rCi0gbGliX0xUTElCUkFSSUVTID0JbGlibWFkLmxhCi0gaW5jbHVkZV9IRUFERVJTID0JbWFkLmgKLSAKLUBAIC0zNCw3ICszNyw4IEBACi0gbWluaW1hZF9MREFERCA9CQlsaWJtYWQubGEKLSAKLSBFWFRSQV9ESVNUID0JCW1hZC5oLnNlZCAgXAotLQkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTgotKwkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTiBcCi0rCQkJbWFkLnBjLmluCi0gCi0gZXhwb3J0ZWRfaGVhZGVycyA9CXZlcnNpb24uaCBmaXhlZC5oIGJpdC5oIHRpbWVyLmggc3RyZWFtLmggZnJhbWUuaCAgXAotIAkJCXN5bnRoLmggZGVjb2Rlci5oCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU0NDI0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1QYXNzIGZvcmVpZ24gdG8gQU1fSU5JVF9BVVRPTUFLRSBzbyBpdCBkb2Vzbid0IGVuZm9yY2UgR05VIHN0cmljdG5lc3MuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggZTYwMmZkMy4uZTA3NWI4NiAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMjkgKzI5IEBAIEFDX0NPTkZJR19TUkNESVIoW2RlY29kZXIuaF0pCi0tQU1fSU5JVF9BVVRPTUFLRQotK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWM3YWEzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLWdjYyA0LjQgZGlkIHRoaXM6IFRoZSBNSVBTIHBvcnQgbm8gbG9uZ2VyIHJlY29nbml6ZXMgdGhlIGggIGFzbSBjb25zdHJhaW50LiBJdCB3YXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGlzIGNvbnN0cmFpbnQgaW4gb3JkZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyB1bnByZWRpY3RhYmxlIGNvZGUgc2VxdWVuY2VzLiAKLQotc28gdGhlIGxpYm1hZCBidWlsZCB3aXRoIGdjYy00LjUuMCB3YXMgZmFpbGluZy4KLQotRm91bmQgYSBzb2x1dGlvbiBoZXJlOgotCi1odHRwOi8vdXMuZ2VuZXJhdGlvbi1udC5jb20vYW5zd2VyL2J1Zy01Njg0MTgtbGlibWFkMC1kZXYtbXBnMzIxLWNvbXBpbGF0aW9uLWVycm9ycy1taXBzLW1pcHNlbC1hcmNoaXRlY3R1cmVzLWhlbHAtMTY5MDMzNDUxLmh0bWwKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLTIwMTAvMDcvMjkKLU5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+Ci0KLUluZGV4OiBsaWJtYWQtMC4xNS4xYi9maXhlZC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGlibWFkLTAuMTUuMWIub3JpZy9maXhlZC5oCi0rKysgbGlibWFkLTAuMTUuMWIvZml4ZWQuaAotQEAgLTI5Nyw2ICsyOTcsMTUgQEAgbWFkX2ZpeGVkX3QgbWFkX2ZfbXVsX2lubGluZShtYWRfZml4ZWRfdAotIAotIC8qIC0tLSBNSVBTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAKLSsjIGVsaWYgZGVmaW5lZChGUE1fTUlQUykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKLSsgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTY0X2RpX3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkpOwotKyMgICBkZWZpbmUgTUFEX0ZfTUxYKGhpLCBsbywgeCwgeSkgXAotKyAgICBkbyB7IFwKLSsgICAgICAgIHU2NF9kaV90IF9fbGwgPSAodTY0X2RpX3QpICh4KSAqICh5KTsgXAotKyAgICAgICAgaGkgPSBfX2xsID4+IDMyOyBcCi0rICAgICAgICBsbyA9IF9fbGw7IFwKLSsgICAgIH0gd2hpbGUgKDApCi0rCi0gIyBlbGlmIGRlZmluZWQoRlBNX01JUFMpCi0gCi0gLyoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlNmQyMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9uby1mb3JjZS1tZW0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1UaGlzIG9wdGlvbiBubyBsb25nZXIgZXhpc3RzIGluIGdjYyAzLjQuMQotCi1SUCAtIDE4LzA3LzIwMDgKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1JbmRleDogbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGlibWFkLTAuMTUuMWIub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozNy4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNDAsNyArMTQwLDYgQEAKLSAgICAgY2FzZSAiJG9wdGltaXplIiBpbgotIAktT3wiLU8gIiopCi0gCSAgICBvcHRpbWl6ZT0iLU8iCi0tCSAgICBvcHRpbWl6ZT0iJG9wdGltaXplIC1mZm9yY2UtbWVtIgotIAkgICAgb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmZvcmNlLWFkZHIiCi0gCSAgICA6ICN4IG9wdGltaXplPSIkb3B0aW1pemUgLWZpbmxpbmUtZnVuY3Rpb25zIgotIAkgICAgOiAjLSBvcHRpbWl6ZT0iJG9wdGltaXplIC1mc3RyZW5ndGgtcmVkdWNlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzg3ZDI5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OV0KLQotU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KLWRpZmYgLU51cmQgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwotLS0tIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTIzIDExOjQxOjMyLjAwMDAwMDAwMCArMDIwMAotKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTAzIDA4OjI4OjIzLjcxODY5MzY5NyArMDIwMAotQEAgLTI4LDcgKzI4LDcgQEAKLQotIEFNX0lOSVRfQVVUT01BS0UKLQotLUFNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKLStBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQotCi0gZG5sIFN5c3RlbSB0eXBlLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkXzAuMTUuMWIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MzFhYmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLVNVTU1BUlkgPSAiTVBFRyBBdWRpbyBEZWNvZGVyIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21hZC8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDkiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLQkJCWZpbGU6Ly9DT1BZUklHSFQ7bWQ1PThlNTVlYjE0ODk0ZTc4MmI4NDQ4OGQ1YTIzOWJjMjNkIFwKLQkJCWZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT1hYTA3MzExZGQzOTI4OGQ0MzQ5ZjI4ZTFkZTUxNjQ1NCIKLVNFQ1RJT04gPSAibGlicyIKLURFUEVORFMgPSAibGliaWQzdGFnIgotUFIgPSAicjMiCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLm1hcnMub3JnL3B1Yi9tcGVnL2xpYm1hZC0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vbm8tZm9yY2UtbWVtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FkZC1wa2djb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjFiZTU0M2JjMzBjNTZmYjZiZWExZDdiZjZhNjRlNjZjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiZmFjM2VkNmJmYmMyODIzZDM3NzVlYmI5MzEwODczNzFlMTQyYmIwZTliYjFiZWU1MWE3NmE2ZTAwNzg2OTAiIAotCi1TID0gIiR7V09SS0RJUn0vbGlibWFkLSR7UFZ9IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotRVhUUkFfT0VDT05GID0gIi1lbmFibGUtc3BlZWQgLS1lbmFibGUtc2hhcmVkIgotRVhUUkFfT0VDT05GX2FwcGVuZF9hcm0gPSAiIC0tZW5hYmxlLWZwbT1hcm0iCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLSMJZGFtbiBwaWNreSBhdXRvbWFrZS4uLgotCXRvdWNoIE5FV1MgQVVUSE9SUyBDaGFuZ2VMb2cKLX0KLQotQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Y2VmMWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjIxLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJMaWJwbmciCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wNmExYjZmZGU2ZDkzMTcwYmI3MjIwMWM4MDAwYmYzZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtlbmRsaW5lPTExMjttZDU9OWE4YjVmODNlMWU4MDQ2ZGY2NzJkZWFiODdmMjM1YmUiCi1ERVBFTkRTID0gInpsaWIiCi0KLVNSQ19VUkkgPSAiJHtHRU5UT09fTUlSUk9SfS9saWJwbmctJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiM2JhY2I0NzI4ZjY2OTRhNjRhZDkwNTI3NjlkNmE0Y2UiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmM4ZjE4NDllYjkyNjQyMTliZjVkNzAzNjAxZTVhYmU5MmE1ODY1MWVjYWU5MjdhMDNkMWExYWExNWVlMjA4MyIKLQotQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJwbmctY29uZmlnICR7YmluZGlyfS9saWJwbmcxNi1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKLQotIyBXb3JrIGFyb3VuZCBtaXNzaW5nIHN5bWJvbHMKLUVYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9mZiIgLGQpfSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzIgotCi1GSUxFU18ke1BOfS10b29scyA9ICIke2JpbmRpcn0vcG5nLWZpeC1pdHh0ICR7YmluZGlyfS9wbmdmaXgiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4yNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTFhYjdmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjI0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiUE5HIGltYWdlIGZvcm1hdCBkZWNvZGluZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJwbmcub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTGlicG5nIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTA4OTIxNDgzMzU4NmJhNDQ0MDQ4ZmQxZGJiYzc2YTQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcG5nLmg7ZW5kbGluZT0xNDk7bWQ1PTM3NmQ4ZmY3ZjY5YjdjNGFkM2EwOWY0NjcyY2VjNjk2IgorREVQRU5EUyA9ICJ6bGliIgorCitTUkNfVVJJID0gIiR7R0VOVE9PX01JUlJPUn0vbGlicG5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImZmY2RiZDU0OTgxNDc4N2ZhODAxMGMzNzJlMzVmZjI1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5MzJkYzllNWU0NWQ1NWVjZTlkMjA0ZTkwMTk2YmJiNWYyYzgyNzQxY2NiMGY3ZTEwZDA3ZDM2NGE2ZmQ2ZGQiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKKyMgV29yayBhcm91bmQgbWlzc2luZyBzeW1ib2xzCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vZmYiICxkKX0iCisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyIKKworRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3BuZy1maXgtaXR4dCAke2JpbmRpcn0vcG5nZml4ICR7YmluZGlyfS9wbmdjcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI2LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQzNWQ0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLVNVTU1BUlkgPSAiQXVkaW8gZm9ybWF0IENvbnZlcnNpb24gbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlIgotQVVUSE9SID0gIkVyaWsgZGUgQ2FzdHJvIExvcG8iCi1ERVBFTkRTID0gImZsYWMgbGlib2dnIGxpYnZvcmJpcyBzcWxpdGUzIgotU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlL2ZpbGVzL2xpYnNuZGZpbGUtJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZWM4MTBhMGM2MGMwODc3MmE4YTU1NTI3MDRiNjMzOTMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2Q2NTIwZWM3NjNkMWE0NTU3Mzg4NWVjYjFmOGU0ZTQyNTA1YWMxMjE4MDI2ODQ4MmE0NGIyODQ4NGEyNTA5MiIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTc3ZmU5MzIwMjczNmI0N2MwNzAzNTkxMGY0Nzk3NGEiCi0KLVMgPSAiJHtXT1JLRElSfS9saWJzbmRmaWxlLSR7UFZ9IgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgotUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhLC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliIgotCi1pbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKLQotZG9fY29uZmlndXJlX3ByZXBlbmRfYXJtKCkgewotCWV4cG9ydCBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xCi0JZXhwb3J0IGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0Ci19Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQxNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI3LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQXVkaW8gZm9ybWF0IENvbnZlcnNpb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlIgorQVVUSE9SID0gIkVyaWsgZGUgQ2FzdHJvIExvcG8iCitERVBFTkRTID0gImZsYWMgbGlib2dnIGxpYnZvcmJpcyBzcWxpdGUzIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlL2ZpbGVzL2xpYnNuZGZpbGUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmQxZDk3YzYwNzdmMDNiNWQ5ODRkNzk1NmZmZWRiN2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTM5MTk1MmYyN2Y0YTkyY2ViMmI0YzA2NDkzYWMxMDc4OTZlZDZjNzZiZTlhNjEzYTQ3MzFmMDc2ZDMwZmFjMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTc3ZmU5MzIwMjczNmI0N2MwNzAzNTkxMGY0Nzk3NGEiCisKK1MgPSAiJHtXT1JLRElSfS9saWJzbmRmaWxlLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhLC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmRfYXJtKCkgeworCWV4cG9ydCBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xCisJZXhwb3J0IGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0Cit9CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE1LTg2NjVfODY4My5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE1LTg2NjVfODY4My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM1MDU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTUtODY2NV84NjgzLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitGcm9tIGY5NGEyOWE4MjJmNTUyOGQyMzM0NTkyNzYwZmJiNzkzOGYxNWViNTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+CitEYXRlOiBTYXQsIDI2IERlYyAyMDE1IDE3OjMyOjAzICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdICogbGlidGlmZi90aWZfZ2V0aW1hZ2UuYzogZml4IG91dC1vZi1ib3VuZCByZWFkcyBpbgorIFRJRkZSR0JBSW1hZ2UgaW50ZXJmYWNlIGluIGNhc2Ugb2YgdW5zdXBwb3J0ZWQgdmFsdWVzIG9mCisgU2FtcGxlc1BlclBpeGVsL0V4dHJhU2FtcGxlcyBmb3IgTG9nTFVWIC8gQ0lFTGFiLiBBZGQgZXhwbGljaXQgY2FsbCB0bworIFRJRkZSR0JBSW1hZ2VPSygpIGluIFRJRkZSR0JBSW1hZ2VCZWdpbigpLiBGaXggQ1ZFLTIwMTUtODY2NSByZXBvcnRlZCBieQorIGxpbWluZ3hpbmcgYW5kIENWRS0yMDE1LTg2ODMgcmVwb3J0ZWQgYnkgenpmIG9mIEFsaWJhYmEuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTUtODY2NQorQ1ZFOiBDVkUtMjAxNS04NjgzCitodHRwczovL2dpdGh1Yi5jb20vdmFkei9saWJ0aWZmL2NvbW1pdC9mOTRhMjlhODIyZjU1MjhkMjMzNDU5Mjc2MGZiYjc5MzhmMTVlYjU1CisKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCistLS0KKyBDaGFuZ2VMb2cgICAgICAgICAgICAgIHwgIDggKysrKysrKysKKyBsaWJ0aWZmL3RpZl9nZXRpbWFnZS5jIHwgMzUgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitJbmRleDogdGlmZi00LjAuNi9saWJ0aWZmL3RpZl9nZXRpbWFnZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGlmZi00LjAuNi5vcmlnL2xpYnRpZmYvdGlmX2dldGltYWdlLmMKKysrKyB0aWZmLTQuMC42L2xpYnRpZmYvdGlmX2dldGltYWdlLmMKK0BAIC0xODIsMjAgKzE4MiwyMiBAQCBUSUZGUkdCQUltYWdlT0soVElGRiogdGlmLCBjaGFyIGVtc2dbMTAyCisgCQkJCSAgICAiUGxhbmFyY29uZmlndXJhdGlvbiIsIHRkLT50ZF9wbGFuYXJjb25maWcpOworIAkJCQlyZXR1cm4gKDApOworIAkJCX0KKy0JCQlpZiggdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCAhPSAzICkKKysJCQlpZiggdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCAhPSAzIHx8IGNvbG9yY2hhbm5lbHMgIT0gMyApCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBzcHJpbnRmKGVtc2csCistICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnJ5LCBjYW4gbm90IGhhbmRsZSBpbWFnZSB3aXRoICVzPSVkIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcy9waXhlbCIsIHRkLT50ZF9zYW1wbGVzcGVycGl4ZWwpOworKyAgICAgICAgICAgICAgICAgICAgICAgICJTb3JyeSwgY2FuIG5vdCBoYW5kbGUgaW1hZ2Ugd2l0aCAlcz0lZCwgJXM9JWQiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVzL3BpeGVsIiwgdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3JjaGFubmVscyIsIGNvbG9yY2hhbm5lbHMpOworICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB9CisgCQkJYnJlYWs7CisgCQljYXNlIFBIT1RPTUVUUklDX0NJRUxBQjoKKy0gICAgICAgICAgICBpZiggdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCAhPSAzIHx8IHRkLT50ZF9iaXRzcGVyc2FtcGxlICE9IDggKQorKyAgICAgICAgICAgIGlmKCB0ZC0+dGRfc2FtcGxlc3BlcnBpeGVsICE9IDMgfHwgY29sb3JjaGFubmVscyAhPSAzIHx8IHRkLT50ZF9iaXRzcGVyc2FtcGxlICE9IDggKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgc3ByaW50ZihlbXNnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICJTb3JyeSwgY2FuIG5vdCBoYW5kbGUgaW1hZ2Ugd2l0aCAlcz0lZCBhbmQgJXM9JWQiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICJTb3JyeSwgY2FuIG5vdCBoYW5kbGUgaW1hZ2Ugd2l0aCAlcz0lZCwgJXM9JWQgYW5kICVzPSVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcy9waXhlbCIsIHRkLT50ZF9zYW1wbGVzcGVycGl4ZWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yY2hhbm5lbHMiLCBjb2xvcmNoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCaXRzL3NhbXBsZSIsIHRkLT50ZF9iaXRzcGVyc2FtcGxlKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgfQorQEAgLTI1NSw2ICsyNTcsOSBAQCBUSUZGUkdCQUltYWdlQmVnaW4oVElGRlJHQkFJbWFnZSogaW1nLCBUCisgCWludCBjb2xvcmNoYW5uZWxzOworIAl1aW50MTYgKnJlZF9vcmlnLCAqZ3JlZW5fb3JpZywgKmJsdWVfb3JpZzsKKyAJaW50IG5fY29sb3I7CisrCQorKwlpZiggIVRJRkZSR0JBSW1hZ2VPSyh0aWYsIGVtc2cpICkKKysJCXJldHVybiAwOworIAorIAkvKiBJbml0aWFsaXplIHRvIG5vcm1hbCB2YWx1ZXMgKi8KKyAJaW1nLT5yb3dfb2Zmc2V0ID0gMDsKK0BAIC0yNTA4LDI5ICsyNTEzLDMzIEBAIFBpY2tDb250aWdDYXNlKFRJRkZSR0JBSW1hZ2UqIGltZykKKyAJCWNhc2UgUEhPVE9NRVRSSUNfUkdCOgorIAkJCXN3aXRjaCAoaW1nLT5iaXRzcGVyc2FtcGxlKSB7CisgCQkJCWNhc2UgODoKKy0JCQkJCWlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX0FTU09DQUxQSEEpCisrCQkJCQlpZiAoaW1nLT5hbHBoYSA9PSBFWFRSQVNBTVBMRV9BU1NPQ0FMUEhBICYmCisrCQkJCQkJaW1nLT5zYW1wbGVzcGVycGl4ZWwgPj0gNCkKKyAJCQkJCQlpbWctPnB1dC5jb250aWcgPSBwdXRSR0JBQWNvbnRpZzhiaXR0aWxlOworLQkJCQkJZWxzZSBpZiAoaW1nLT5hbHBoYSA9PSBFWFRSQVNBTVBMRV9VTkFTU0FMUEhBKQorKwkJCQkJZWxzZSBpZiAoaW1nLT5hbHBoYSA9PSBFWFRSQVNBTVBMRV9VTkFTU0FMUEhBICYmCisrCQkJCQkJCSBpbWctPnNhbXBsZXNwZXJwaXhlbCA+PSA0KQorIAkJCQkJeworIAkJCQkJCWlmIChCdWlsZE1hcFVhVG9BYShpbWcpKQorIAkJCQkJCQlpbWctPnB1dC5jb250aWcgPSBwdXRSR0JVQWNvbnRpZzhiaXR0aWxlOworIAkJCQkJfQorLQkJCQkJZWxzZQorKwkJCQkJZWxzZSBpZiggaW1nLT5zYW1wbGVzcGVycGl4ZWwgPj0gMyApCisgCQkJCQkJaW1nLT5wdXQuY29udGlnID0gcHV0UkdCY29udGlnOGJpdHRpbGU7CisgCQkJCQlicmVhazsKKyAJCQkJY2FzZSAxNjoKKy0JCQkJCWlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX0FTU09DQUxQSEEpCisrCQkJCQlpZiAoaW1nLT5hbHBoYSA9PSBFWFRSQVNBTVBMRV9BU1NPQ0FMUEhBICYmCisrCQkJCQkJaW1nLT5zYW1wbGVzcGVycGl4ZWwgPj00ICkKKyAJCQkJCXsKKyAJCQkJCQlpZiAoQnVpbGRNYXBCaXRkZXB0aDE2VG84KGltZykpCisgCQkJCQkJCWltZy0+cHV0LmNvbnRpZyA9IHB1dFJHQkFBY29udGlnMTZiaXR0aWxlOworIAkJCQkJfQorLQkJCQkJZWxzZSBpZiAoaW1nLT5hbHBoYSA9PSBFWFRSQVNBTVBMRV9VTkFTU0FMUEhBKQorKwkJCQkJZWxzZSBpZiAoaW1nLT5hbHBoYSA9PSBFWFRSQVNBTVBMRV9VTkFTU0FMUEhBICYmCisrCQkJCQkJCSBpbWctPnNhbXBsZXNwZXJwaXhlbCA+PTQgKQorIAkJCQkJeworIAkJCQkJCWlmIChCdWlsZE1hcEJpdGRlcHRoMTZUbzgoaW1nKSAmJgorIAkJCQkJCSAgICBCdWlsZE1hcFVhVG9BYShpbWcpKQorIAkJCQkJCQlpbWctPnB1dC5jb250aWcgPSBwdXRSR0JVQWNvbnRpZzE2Yml0dGlsZTsKKyAJCQkJCX0KKy0JCQkJCWVsc2UKKysJCQkJCWVsc2UgaWYoIGltZy0+c2FtcGxlc3BlcnBpeGVsID49MyApCisgCQkJCQl7CisgCQkJCQkJaWYgKEJ1aWxkTWFwQml0ZGVwdGgxNlRvOChpbWcpKQorIAkJCQkJCQlpbWctPnB1dC5jb250aWcgPSBwdXRSR0Jjb250aWcxNmJpdHRpbGU7CitAQCAtMjUzOSw3ICsyNTQ4LDcgQEAgUGlja0NvbnRpZ0Nhc2UoVElGRlJHQkFJbWFnZSogaW1nKQorIAkJCX0KKyAJCQlicmVhazsKKyAJCWNhc2UgUEhPVE9NRVRSSUNfU0VQQVJBVEVEOgorLQkJCWlmIChidWlsZE1hcChpbWcpKSB7CisrCQkJaWYgKGltZy0+c2FtcGxlc3BlcnBpeGVsID49NCAmJiBidWlsZE1hcChpbWcpKSB7CisgCQkJCWlmIChpbWctPmJpdHNwZXJzYW1wbGUgPT0gOCkgeworIAkJCQkJaWYgKCFpbWctPk1hcCkKKyAJCQkJCQlpbWctPnB1dC5jb250aWcgPSBwdXRSR0Jjb250aWc4Yml0Q01ZS3RpbGU7CitAQCAtMjYzNSw3ICsyNjQ0LDcgQEAgUGlja0NvbnRpZ0Nhc2UoVElGRlJHQkFJbWFnZSogaW1nKQorIAkJCX0KKyAJCQlicmVhazsKKyAJCWNhc2UgUEhPVE9NRVRSSUNfQ0lFTEFCOgorLQkJCWlmIChidWlsZE1hcChpbWcpKSB7CisrCQkJaWYgKGltZy0+c2FtcGxlc3BlcnBpeGVsID09IDMgJiYgYnVpbGRNYXAoaW1nKSkgeworIAkJCQlpZiAoaW1nLT5iaXRzcGVyc2FtcGxlID09IDgpCisgCQkJCQlpbWctPnB1dC5jb250aWcgPSBpbml0Q0lFTGFiQ29udmVyc2lvbihpbWcpOworIAkJCQlicmVhazsKK0luZGV4OiB0aWZmLTQuMC42L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRpZmYtNC4wLjYub3JpZy9DaGFuZ2VMb2cKKysrKyB0aWZmLTQuMC42L0NoYW5nZUxvZworQEAgLTEsMyArMSwxMSBAQAorKzIwMTUtMTItMjYgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisrCisrICAgKiBsaWJ0aWZmL3RpZl9nZXRpbWFnZS5jOiBmaXggb3V0LW9mLWJvdW5kIHJlYWRzIGluIFRJRkZSR0JBSW1hZ2UKKysgICBpbnRlcmZhY2UgaW4gY2FzZSBvZiB1bnN1cHBvcnRlZCB2YWx1ZXMgb2YgU2FtcGxlc1BlclBpeGVsL0V4dHJhU2FtcGxlcworKyAgIGZvciBMb2dMVVYgLyBDSUVMYWIuIEFkZCBleHBsaWNpdCBjYWxsIHRvIFRJRkZSR0JBSW1hZ2VPSygpIGluCisrICAgVElGRlJHQkFJbWFnZUJlZ2luKCkuIEZpeCBDVkUtMjAxNS04NjY1IHJlcG9ydGVkIGJ5IGxpbWluZ3hpbmcgYW5kCisrICAgQ1ZFLTIwMTUtODY4MyByZXBvcnRlZCBieSB6emYgb2YgQWxpYmFiYS4KKysKKyAyMDE1LTA5LTEyICBCb2IgRnJpZXNlbmhhaG4gIDxiZnJpZXNlbkBzaW1wbGUuZGFsbGFzLnR4LnVzPgorIAorIAkqIGxpYnRpZmYgNC4wLjYgcmVsZWFzZWQuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNS04NzgxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTUtODc4MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQ2ZjBmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTUtODc4MS5wYXRjaApAQCAtMCwwICsxLDE5NSBAQAorRnJvbSBhYWFiNWMzYzlkMmEyYzY5ODRmMjNjY2JjNzk3MDI2MTA0MzliYzY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogZXJvdWF1bHQgPGVyb3VhdWx0PgorRGF0ZTogU3VuLCAyNyBEZWMgMjAxNSAxNjoyNToxMSArMDAwMAorU3ViamVjdDogW1BBVENIXSAqIGxpYnRpZmYvdGlmX2x1di5jOiBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZCB3cml0ZXMgaW4KKyBkZWNvZGUgZnVuY3Rpb25zIGluIG5vbiBkZWJ1ZyBidWlsZHMgYnkgcmVwbGFjaW5nIGFzc2VydCgpcyBieSByZWd1bGFyIGlmCisgY2hlY2tzIChidWd6aWxsYSAjMjUyMikuIEZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kIHJlYWRzIGluIGNhc2Ugb2Ygc2hvcnQKKyBpbnB1dCBkYXRhLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2h0dHBzOi8vZ2l0aHViLmNvbS92YWR6L2xpYnRpZmYvY29tbWl0L2FhYWI1YzNjOWQyYTJjNjk4NGYyM2NjYmM3OTcwMjYxMDQzOWJjNjUKK2hhbmQgYXBwbGllZCBDaGFuZ2Vsb2cgY2hhbmdlcworCitDVkU6IENWRS0yMDE1LTg3ODEKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CistLS0KKyBDaGFuZ2VMb2cgICAgICAgICB8ICA3ICsrKysrKysKKyBsaWJ0aWZmL3RpZl9sdXYuYyB8IDU1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitJbmRleDogdGlmZi00LjAuNC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0aWZmLTQuMC40Lm9yaWcvQ2hhbmdlTG9nCisrKysgdGlmZi00LjAuNC9DaGFuZ2VMb2cKK0BAIC0xLDMgKzEsMTAgQEAKKysyMDE1LTEyLTI3ICBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgorKworKwkqIGxpYnRpZmYvdGlmX2x1di5jOiBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZCB3cml0ZXMgaW4gZGVjb2RlCisrCWZ1bmN0aW9ucyBpbiBub24gZGVidWcgYnVpbGRzIGJ5IHJlcGxhY2luZyBhc3NlcnQoKXMgYnkgcmVndWxhciBpZgorKwljaGVja3MgKGJ1Z3ppbGxhICMyNTIyKS4KKysJRml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmQgcmVhZHMgaW4gY2FzZSBvZiBzaG9ydCBpbnB1dCBkYXRhLgorKworIDIwMTUtMTItMjYgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisgCisgCSogbGlidGlmZi90aWZfZ2V0aW1hZ2UuYzogZml4IG91dC1vZi1ib3VuZCByZWFkcyBpbiBUSUZGUkdCQUltYWdlCitJbmRleDogdGlmZi00LjAuNC9saWJ0aWZmL3RpZl9sdXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRpZmYtNC4wLjQub3JpZy9saWJ0aWZmL3RpZl9sdXYuYworKysrIHRpZmYtNC4wLjQvbGlidGlmZi90aWZfbHV2LmMKK0BAIC0yMDIsNyArMjAyLDExIEBAIExvZ0wxNkRlY29kZShUSUZGKiB0aWYsIHVpbnQ4KiBvcCwgdG1zaXoKKyAJaWYgKHNwLT51c2VyX2RhdGFmbXQgPT0gU0dJTE9HREFUQUZNVF8xNkJJVCkKKyAJCXRwID0gKGludDE2Kikgb3A7CisgCWVsc2UgeworLQkJYXNzZXJ0KHNwLT50YnVmbGVuID49IG5waXhlbHMpOworKwkJaWYoc3AtPnRidWZsZW4gPCBucGl4ZWxzKSB7CisrCQkJVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsIG1vZHVsZSwKKysJCQkJCQkgIlRyYW5zbGF0aW9uIGJ1ZmZlciB0b28gc2hvcnQiKTsKKysJCQlyZXR1cm4gKDApOworKwkJfQorIAkJdHAgPSAoaW50MTYqKSBzcC0+dGJ1ZjsKKyAJfQorIAlfVElGRm1lbXNldCgodm9pZCopIHRwLCAwLCBucGl4ZWxzKnNpemVvZiAodHBbMF0pKTsKK0BAIC0yMTEsOSArMjE1LDExIEBAIExvZ0wxNkRlY29kZShUSUZGKiB0aWYsIHVpbnQ4KiBvcCwgdG1zaXoKKyAJY2MgPSB0aWYtPnRpZl9yYXdjYzsKKyAJLyogZ2V0IGVhY2ggYnl0ZSBzdHJpbmcgKi8KKyAJZm9yIChzaGZ0ID0gMio4OyAoc2hmdCAtPSA4KSA+PSAwOyApIHsKKy0JCWZvciAoaSA9IDA7IGkgPCBucGl4ZWxzICYmIGNjID4gMDsgKQorKwkJZm9yIChpID0gMDsgaSA8IG5waXhlbHMgJiYgY2MgPiAwOyApIHsKKyAJCQlpZiAoKmJwID49IDEyOCkgewkJLyogcnVuICovCistCQkJCXJjID0gKmJwKysgKyAoMi0xMjgpOyAgIC8qIFRPRE86IHBvdGVudGlhbCBpbnB1dCBidWZmZXIgb3ZlcnJ1biB3aGVuIGRlY29kaW5nIGNvcnJ1cHQgb3IgdHJ1bmNhdGVkIGRhdGEgKi8KKysJCQkJaWYoIGNjIDwgMiApCisrCQkJCQlicmVhazsKKysJCQkJcmMgPSAqYnArKyArICgyLTEyOCk7CisgCQkJCWIgPSAoaW50MTYpKCpicCsrIDw8IHNoZnQpOworIAkJCQljYyAtPSAyOworIAkJCQl3aGlsZSAocmMtLSAmJiBpIDwgbnBpeGVscykKK0BAIC0yMjMsNiArMjI5LDcgQEAgTG9nTDE2RGVjb2RlKFRJRkYqIHRpZiwgdWludDgqIG9wLCB0bXNpegorIAkJCQl3aGlsZSAoLS1jYyAmJiByYy0tICYmIGkgPCBucGl4ZWxzKQorIAkJCQkJdHBbaSsrXSB8PSAoaW50MTYpKmJwKysgPDwgc2hmdDsKKyAJCQl9CisrCQl9CisgCQlpZiAoaSAhPSBucGl4ZWxzKSB7CisgI2lmIGRlZmluZWQoX19XSU4zMl9fKSAmJiAoZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX01JTkdXMzJfXykpCisgCQkJVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsIG1vZHVsZSwKK0BAIC0yNjgsMTMgKzI3NSwxNyBAQCBMb2dMdXZEZWNvZGUyNChUSUZGKiB0aWYsIHVpbnQ4KiBvcCwgdG1zCisgCWlmIChzcC0+dXNlcl9kYXRhZm10ID09IFNHSUxPR0RBVEFGTVRfUkFXKQorIAkJdHAgPSAodWludDMyICopb3A7CisgCWVsc2UgeworLQkJYXNzZXJ0KHNwLT50YnVmbGVuID49IG5waXhlbHMpOworKwkJaWYoc3AtPnRidWZsZW4gPCBucGl4ZWxzKSB7CisrCQkJVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsIG1vZHVsZSwKKysJCQkJCQkgIlRyYW5zbGF0aW9uIGJ1ZmZlciB0b28gc2hvcnQiKTsKKysJCQlyZXR1cm4gKDApOworKwkJfQorIAkJdHAgPSAodWludDMyICopIHNwLT50YnVmOworIAl9CisgCS8qIGNvcHkgdG8gYXJyYXkgb2YgdWludDMyICovCisgCWJwID0gKHVuc2lnbmVkIGNoYXIqKSB0aWYtPnRpZl9yYXdjcDsKKyAJY2MgPSB0aWYtPnRpZl9yYXdjYzsKKy0JZm9yIChpID0gMDsgaSA8IG5waXhlbHMgJiYgY2MgPiAwOyBpKyspIHsKKysJZm9yIChpID0gMDsgaSA8IG5waXhlbHMgJiYgY2MgPj0gMzsgaSsrKSB7CisgCQl0cFtpXSA9IGJwWzBdIDw8IDE2IHwgYnBbMV0gPDwgOCB8IGJwWzJdOworIAkJYnAgKz0gMzsKKyAJCWNjIC09IDM7CitAQCAtMzI1LDcgKzMzNiwxMSBAQCBMb2dMdXZEZWNvZGUzMihUSUZGKiB0aWYsIHVpbnQ4KiBvcCwgdG1zCisgCWlmIChzcC0+dXNlcl9kYXRhZm10ID09IFNHSUxPR0RBVEFGTVRfUkFXKQorIAkJdHAgPSAodWludDMyKikgb3A7CisgCWVsc2UgeworLQkJYXNzZXJ0KHNwLT50YnVmbGVuID49IG5waXhlbHMpOworKwkJaWYoc3AtPnRidWZsZW4gPCBucGl4ZWxzKSB7CisrCQkJVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsIG1vZHVsZSwKKysJCQkJCQkgIlRyYW5zbGF0aW9uIGJ1ZmZlciB0b28gc2hvcnQiKTsKKysJCQlyZXR1cm4gKDApOworKwkJfQorIAkJdHAgPSAodWludDMyKikgc3AtPnRidWY7CisgCX0KKyAJX1RJRkZtZW1zZXQoKHZvaWQqKSB0cCwgMCwgbnBpeGVscypzaXplb2YgKHRwWzBdKSk7CitAQCAtMzM0LDExICszNDksMTMgQEAgTG9nTHV2RGVjb2RlMzIoVElGRiogdGlmLCB1aW50OCogb3AsIHRtcworIAljYyA9IHRpZi0+dGlmX3Jhd2NjOworIAkvKiBnZXQgZWFjaCBieXRlIHN0cmluZyAqLworIAlmb3IgKHNoZnQgPSA0Kjg7IChzaGZ0IC09IDgpID49IDA7ICkgeworLQkJZm9yIChpID0gMDsgaSA8IG5waXhlbHMgJiYgY2MgPiAwOyApCisrCQlmb3IgKGkgPSAwOyBpIDwgbnBpeGVscyAmJiBjYyA+IDA7ICkgeworIAkJCWlmICgqYnAgPj0gMTI4KSB7CQkvKiBydW4gKi8KKysJCQkJaWYoIGNjIDwgMiApCisrCQkJCQlicmVhazsKKyAJCQkJcmMgPSAqYnArKyArICgyLTEyOCk7CisgCQkJCWIgPSAodWludDMyKSpicCsrIDw8IHNoZnQ7CistCQkJCWNjIC09IDI7ICAgICAgICAgICAgICAgIC8qIFRPRE86IHBvdGVudGlhbCBpbnB1dCBidWZmZXIgb3ZlcnJ1biB3aGVuIGRlY29kaW5nIGNvcnJ1cHQgb3IgdHJ1bmNhdGVkIGRhdGEgKi8KKysJCQkJY2MgLT0gMjsKKyAJCQkJd2hpbGUgKHJjLS0gJiYgaSA8IG5waXhlbHMpCisgCQkJCQl0cFtpKytdIHw9IGI7CisgCQkJfSBlbHNlIHsJCQkvKiBub24tcnVuICovCitAQCAtMzQ2LDYgKzM2Myw3IEBAIExvZ0x1dkRlY29kZTMyKFRJRkYqIHRpZiwgdWludDgqIG9wLCB0bXMKKyAJCQkJd2hpbGUgKC0tY2MgJiYgcmMtLSAmJiBpIDwgbnBpeGVscykKKyAJCQkJCXRwW2krK10gfD0gKHVpbnQzMikqYnArKyA8PCBzaGZ0OworIAkJCX0KKysJCX0KKyAJCWlmIChpICE9IG5waXhlbHMpIHsKKyAjaWYgZGVmaW5lZChfX1dJTjMyX18pICYmIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKSkKKyAJCQlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAorQEAgLTQxMyw2ICs0MzEsNyBAQCBMb2dMdXZEZWNvZGVUaWxlKFRJRkYqIHRpZiwgdWludDgqIGJwLCB0Cisgc3RhdGljIGludAorIExvZ0wxNkVuY29kZShUSUZGKiB0aWYsIHVpbnQ4KiBicCwgdG1zaXplX3QgY2MsIHVpbnQxNiBzKQorIHsKKysJc3RhdGljIGNvbnN0IGNoYXIgbW9kdWxlW10gPSAiTG9nTDE2RW5jb2RlIjsKKyAJTG9nTHV2U3RhdGUqIHNwID0gRW5jb2RlclN0YXRlKHRpZik7CisgCWludCBzaGZ0OworIAl0bXNpemVfdCBpOworQEAgLTQzMyw3ICs0NTIsMTEgQEAgTG9nTDE2RW5jb2RlKFRJRkYqIHRpZiwgdWludDgqIGJwLCB0bXNpegorIAkJdHAgPSAoaW50MTYqKSBicDsKKyAJZWxzZSB7CisgCQl0cCA9IChpbnQxNiopIHNwLT50YnVmOworLQkJYXNzZXJ0KHNwLT50YnVmbGVuID49IG5waXhlbHMpOworKwkJaWYoc3AtPnRidWZsZW4gPCBucGl4ZWxzKSB7CisrCQkJVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsIG1vZHVsZSwKKysJCQkJCQkgIlRyYW5zbGF0aW9uIGJ1ZmZlciB0b28gc2hvcnQiKTsKKysJCQlyZXR1cm4gKDApOworKwkJfQorIAkJKCpzcC0+dGZ1bmMpKHNwLCBicCwgbnBpeGVscyk7CisgCX0KKyAJLyogY29tcHJlc3MgZWFjaCBieXRlIHN0cmluZyAqLworQEAgLTUwNiw2ICs1MjksNyBAQCBMb2dMMTZFbmNvZGUoVElGRiogdGlmLCB1aW50OCogYnAsIHRtc2l6Cisgc3RhdGljIGludAorIExvZ0x1dkVuY29kZTI0KFRJRkYqIHRpZiwgdWludDgqIGJwLCB0bXNpemVfdCBjYywgdWludDE2IHMpCisgeworKwlzdGF0aWMgY29uc3QgY2hhciBtb2R1bGVbXSA9ICJMb2dMdXZFbmNvZGUyNCI7CisgCUxvZ0x1dlN0YXRlKiBzcCA9IEVuY29kZXJTdGF0ZSh0aWYpOworIAl0bXNpemVfdCBpOworIAl0bXNpemVfdCBucGl4ZWxzOworQEAgLTUyMSw3ICs1NDUsMTEgQEAgTG9nTHV2RW5jb2RlMjQoVElGRiogdGlmLCB1aW50OCogYnAsIHRtcworIAkJdHAgPSAodWludDMyKikgYnA7CisgCWVsc2UgeworIAkJdHAgPSAodWludDMyKikgc3AtPnRidWY7CistCQlhc3NlcnQoc3AtPnRidWZsZW4gPj0gbnBpeGVscyk7CisrCQlpZihzcC0+dGJ1ZmxlbiA8IG5waXhlbHMpIHsKKysJCQlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAorKwkJCQkJCSAiVHJhbnNsYXRpb24gYnVmZmVyIHRvbyBzaG9ydCIpOworKwkJCXJldHVybiAoMCk7CisrCQl9CisgCQkoKnNwLT50ZnVuYykoc3AsIGJwLCBucGl4ZWxzKTsKKyAJfQorIAkvKiB3cml0ZSBvdXQgZW5jb2RlZCBwaXhlbHMgKi8KK0BAIC01NTMsNiArNTgxLDcgQEAgTG9nTHV2RW5jb2RlMjQoVElGRiogdGlmLCB1aW50OCogYnAsIHRtcworIHN0YXRpYyBpbnQKKyBMb2dMdXZFbmNvZGUzMihUSUZGKiB0aWYsIHVpbnQ4KiBicCwgdG1zaXplX3QgY2MsIHVpbnQxNiBzKQorIHsKKysJc3RhdGljIGNvbnN0IGNoYXIgbW9kdWxlW10gPSAiTG9nTHV2RW5jb2RlMzIiOworIAlMb2dMdXZTdGF0ZSogc3AgPSBFbmNvZGVyU3RhdGUodGlmKTsKKyAJaW50IHNoZnQ7CisgCXRtc2l6ZV90IGk7CitAQCAtNTc0LDcgKzYwMywxMSBAQCBMb2dMdXZFbmNvZGUzMihUSUZGKiB0aWYsIHVpbnQ4KiBicCwgdG1zCisgCQl0cCA9ICh1aW50MzIqKSBicDsKKyAJZWxzZSB7CisgCQl0cCA9ICh1aW50MzIqKSBzcC0+dGJ1ZjsKKy0JCWFzc2VydChzcC0+dGJ1ZmxlbiA+PSBucGl4ZWxzKTsKKysJCWlmKHNwLT50YnVmbGVuIDwgbnBpeGVscykgeworKwkJCVRJRkZFcnJvckV4dCh0aWYtPnRpZl9jbGllbnRkYXRhLCBtb2R1bGUsCisrCQkJCQkJICJUcmFuc2xhdGlvbiBidWZmZXIgdG9vIHNob3J0Iik7CisrCQkJcmV0dXJuICgwKTsKKysJCX0KKyAJCSgqc3AtPnRmdW5jKShzcCwgYnAsIG5waXhlbHMpOworIAl9CisgCS8qIGNvbXByZXNzIGVhY2ggYnl0ZSBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE1LTg3ODQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNS04Nzg0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYWY4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNS04Nzg0LnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gYjE4MDEyZGFlNTUyZjg1ZGNjNWM1N2QzYmY0ZTk5N2ExNWIxY2MxYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KK0RhdGU6IFN1biwgMjcgRGVjIDIwMTUgMTY6NTU6MjAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gKiBsaWJ0aWZmL3RpZl9uZXh0LmM6IGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kIHdyaXRlIGluCisgTmVYVERlY29kZSgpIHRyaWdnZXJlZCBieSBodHRwOi8vbGNhbXR1Zi5jb3JlZHVtcC5jeC9hZmwvdnVsbnMvbGlidGlmZjUudGlmCisgKGJ1Z3ppbGxhICMyNTA4KQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitodHRwczovL2dpdGh1Yi5jb20vdmFkei9saWJ0aWZmL2NvbW1pdC9iMTgwMTJkYWU1NTJmODVkY2M1YzU3ZDNiZjRlOTk3YTE1YjFjYzFjCitoYW5kIGFwcGxpZWQgQ2hhbmdlbG9nIGNoYW5nZXMKKworQ1ZFOiAgQ1ZFLTIwMTUtODc4NAorU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKKy0tLQorIENoYW5nZUxvZyAgICAgICAgICB8ICA2ICsrKysrKworIGxpYnRpZmYvdGlmX25leHQuYyB8IDEwICsrKysrKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiB0aWZmLTQuMC40L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRpZmYtNC4wLjQub3JpZy9DaGFuZ2VMb2cKKysrKyB0aWZmLTQuMC40L0NoYW5nZUxvZworQEAgLTEsNSArMSwxMSBAQAorIDIwMTUtMTItMjcgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisgCisrCSogbGlidGlmZi90aWZfbmV4dC5jOiBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZCB3cml0ZSBpbiBOZVhURGVjb2RlKCkKKysJdHJpZ2dlcmVkIGJ5IGh0dHA6Ly9sY2FtdHVmLmNvcmVkdW1wLmN4L2FmbC92dWxucy9saWJ0aWZmNS50aWYKKysJKGJ1Z3ppbGxhICMyNTA4KQorKworKzIwMTUtMTItMjcgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisrCisgCSogbGlidGlmZi90aWZfbHV2LmM6IGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kIHdyaXRlcyBpbiBkZWNvZGUKKyAJZnVuY3Rpb25zIGluIG5vbiBkZWJ1ZyBidWlsZHMgYnkgcmVwbGFjaW5nIGFzc2VydCgpcyBieSByZWd1bGFyIGlmCisgCWNoZWNrcyAoYnVnemlsbGEgIzI1MjIpLgorSW5kZXg6IHRpZmYtNC4wLjQvbGlidGlmZi90aWZfbmV4dC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGlmZi00LjAuNC5vcmlnL2xpYnRpZmYvdGlmX25leHQuYworKysrIHRpZmYtNC4wLjQvbGlidGlmZi90aWZfbmV4dC5jCitAQCAtMzcsNyArMzcsNyBAQAorIAljYXNlIDA6CW9wWzBdICA9ICh1bnNpZ25lZCBjaGFyKSAoKHYpIDw8IDYpOyBicmVhazsJXAorIAljYXNlIDE6CW9wWzBdIHw9ICh2KSA8PCA0OyBicmVhazsJXAorIAljYXNlIDI6CW9wWzBdIHw9ICh2KSA8PCAyOyBicmVhazsJXAorLQljYXNlIDM6CSpvcCsrIHw9ICh2KTsJICAgYnJlYWs7CVwKKysJY2FzZSAzOgkqb3ArKyB8PSAodik7CSAgIG9wX29mZnNldCsrOyBicmVhazsJXAorIAl9CQkJCQlcCisgfQorIAorQEAgLTEwNiw2ICsxMDYsNyBAQCBOZVhURGVjb2RlKFRJRkYqIHRpZiwgdWludDgqIGJ1ZiwgdG1zaXplCisgCQkJdWludDMyIGltYWdld2lkdGggPSB0aWYtPnRpZl9kaXIudGRfaW1hZ2V3aWR0aDsKKyAgICAgICAgICAgICBpZiggaXNUaWxlZCh0aWYpICkKKyAgICAgICAgICAgICAgICAgaW1hZ2V3aWR0aCA9IHRpZi0+dGlmX2Rpci50ZF90aWxld2lkdGg7CisrICAgICAgICAgICAgdG1zaXplX3Qgb3Bfb2Zmc2V0ID0gMDsKKyAKKyAJCQkvKgorIAkJCSAqIFRoZSBzY2FubGluZSBpcyBjb21wb3NlZCBvZiBhIHNlcXVlbmNlIG9mIGNvbnN0YW50CitAQCAtMTIyLDEwICsxMjMsMTUgQEAgTmVYVERlY29kZShUSUZGKiB0aWYsIHVpbnQ4KiBidWYsIHRtc2l6ZQorIAkJCQkgKiBib3VuZHMsIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBhIHNlY3VyaXR5CisgCQkJCSAqIGlzc3VlLgorIAkJCQkgKi8KKy0JCQkJd2hpbGUgKG4tLSA+IDAgJiYgbnBpeGVscyA8IGltYWdld2lkdGgpCisrCQkJCXdoaWxlIChuLS0gPiAwICYmIG5waXhlbHMgPCBpbWFnZXdpZHRoICYmIG9wX29mZnNldCA8IHNjYW5saW5lKQorIAkJCQkJU0VUUElYRUwob3AsIGdyZXkpOworIAkJCQlpZiAobnBpeGVscyA+PSBpbWFnZXdpZHRoKQorIAkJCQkJYnJlYWs7CisrICAgICAgICAgICAgICAgIGlmIChvcF9vZmZzZXQgPj0gc2NhbmxpbmUgKSB7CisrICAgICAgICAgICAgICAgICAgICBUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLCAiSW52YWxpZCBkYXRhIGZvciBzY2FubGluZSAlbGQiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSB0aWYtPnRpZl9yb3cpOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKysgICAgICAgICAgICAgICAgfQorIAkJCQlpZiAoY2MgPT0gMCkKKyAJCQkJCWdvdG8gYmFkOworIAkJCQluID0gKmJwKyssIGNjLS07CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0zMTg2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMzE4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA4YWJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMzE4Ni5wYXRjaApAQCAtMCwwICsxLDI0IEBACitCdWZmZXIgb3ZlcmZsb3cgaW4gdGhlIHJlYWRleHRlbnNpb24gZnVuY3Rpb24gaW4gZ2lmMnRpZmYuYworYWxsb3dzIHJlbW90ZSBhdHRhY2tlcnMgdG8gY2F1c2UgYSBkZW5pYWwgb2Ygc2VydmljZSB2aWEgYSBjcmFmdGVkIEdJRiBmaWxlLgorCitFeHRlcm5hbCBSZWZlcmVuY2VzOgoraHR0cHM6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDE2LTMxODYKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTUwMworCitDVkU6IENWRS0yMDE2LTMxODYKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgKFJlZEhhdCkKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD0xMTQ0MjM1JmFjdGlvbj1kaWZmCisKK1NpZ25lZC1vZmYtYnk6IFlpIFpoYW8gPHlpLnpoYW9Ad2luZGlydmVyLmNvbT4KKworLS0tIHRpZmYtNC4wLjYvdG9vbHMvZ2lmMnRpZmYuYwkyMDE2LTA0LTA2IDE1OjQzOjAxLjU4NjA0ODM0MSArMDIwMAorKysrIHRpZmYtNC4wLjYvdG9vbHMvZ2lmMnRpZmYuYwkyMDE2LTA0LTA2IDE1OjQ4OjA1LjUyMzIwNzcxMCArMDIwMAorQEAgLTM0OSw3ICszNDksNyBAQAorICAgICBpbnQgc3RhdHVzID0gMTsKKyAKKyAgICAgKHZvaWQpIGdldGMoaW5maWxlKTsKKy0gICAgd2hpbGUgKChjb3VudCA9IGdldGMoaW5maWxlKSkgJiYgY291bnQgPD0gMjU1KQorKyAgICB3aGlsZSAoKGNvdW50ID0gZ2V0YyhpbmZpbGUpKSAmJiBjb3VudCA+PSAwICYmIGNvdW50IDw9IDI1NSkKKyAgICAgICAgIGlmIChmcmVhZChidWYsIDEsIGNvdW50LCBpbmZpbGUpICE9IChzaXplX3QpIGNvdW50KSB7CisgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzaG9ydCByZWFkIGZyb20gZmlsZSAlcyAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi01MzIxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtNTMyMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2M2NjUwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtNTMyMS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIGQ5NzgzZTRhMTQ3NmI2Nzg3YTUxYzVhZTllOWIzMTU2NTI3NTg5ZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+CitEYXRlOiBNb24sIDExIEp1bCAyMDE2IDIxOjI2OjAzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSAqIHRvb2xzL3RpZmZjcm9wLmM6IEF2b2lkIGFjY2VzcyBvdXRzaWRlIG9mIHN0YWNrCisgYWxsb2NhdGVkIGFycmF5IG9uIGEgdGlsZWQgc2VwYXJhdGUgVElGRiB3aXRoIG1vcmUgdGhhbiA4IHNhbXBsZXMgcGVyIHBpeGVsLgorIFJlcG9ydGVkIGJ5IEthaXhpYW5nIFpoYW5nIG9mIHRoZSBDbG91ZCBTZWN1cml0eSBUZWFtLCBRaWhvbyAzNjAKKyAoQ1ZFLTIwMTYtNTMyMSwgYnVnemlsbGEgIzI1NTgpCisKK0NWRTogQ1ZFLTIwMTYtNTMyMQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAoraHR0cHM6Ly9naXRodWIuY29tL3ZhZHovbGlidGlmZi9jb21taXQvZDk3ODNlNGExNDc2YjY3ODdhNTFjNWFlOWU5YjMxNTY1Mjc1ODlmMAorCitTaWduZWQtb2ZmLWJ5OiBZaSBaaGFvIDx5aS56aGFvQHdpbmRpcnZlci5jb20+CistLS0KKyBDaGFuZ2VMb2cgICAgICAgIHwgNyArKysrKysrCisgdG9vbHMvdGlmZmNyb3AuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCBlOThkNTRkLi40ZTAzMDJmIDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0xLDMgKzEsMTAgQEAKKysyMDE2LTA3LTExIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisrCisrCSogdG9vbHMvdGlmZmNyb3AuYzogQXZvaWQgYWNjZXNzIG91dHNpZGUgb2Ygc3RhY2sgYWxsb2NhdGVkIGFycmF5CisrCW9uIGEgdGlsZWQgc2VwYXJhdGUgVElGRiB3aXRoIG1vcmUgdGhhbiA4IHNhbXBsZXMgcGVyIHBpeGVsLgorKwlSZXBvcnRlZCBieSBLYWl4aWFuZyBaaGFuZyBvZiB0aGUgQ2xvdWQgU2VjdXJpdHkgVGVhbSwgUWlob28gMzYwCisrCShDVkUtMjAxNi01MzIxLCBidWd6aWxsYSAjMjU1OCkKKysKKyAyMDE1LTEyLTI3ICBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgorCisJKiBsaWJ0aWZmL3RpZl9uZXh0LmM6IGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kIHdyaXRlIGluIE5lWFREZWNvZGUoKQorZGlmZiAtLWdpdCBhL3Rvb2xzL3RpZmZjcm9wLmMgYi90b29scy90aWZmY3JvcC5jCitpbmRleCBkOTU5YWUzLi42ZmM4ZmMxIDEwMDY0NAorLS0tIGEvdG9vbHMvdGlmZmNyb3AuYworKysrIGIvdG9vbHMvdGlmZmNyb3AuYworQEAgLTk4OSw3ICs5ODksNyBAQCBzdGF0aWMgaW50ICByZWFkU2VwYXJhdGVUaWxlc0ludG9CdWZmZXIgKFRJRkYqIGluLCB1aW50OCAqb2J1ZiwKKyAgICAgbnJvdyA9IChyb3cgKyB0bCA+IGltYWdlbGVuZ3RoKSA/IGltYWdlbGVuZ3RoIC0gcm93IDogdGw7CisgICAgIGZvciAoY29sID0gMDsgY29sIDwgaW1hZ2V3aWR0aDsgY29sICs9IHR3KQorICAgICAgIHsKKy0gICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwOyBzKyspCisrICAgICAgZm9yIChzID0gMDsgcyA8IHNwcCAmJiBzIDwgTUFYX1NBTVBMRVM7IHMrKykKKyAgICAgICAgIHsgIC8qIFJlYWQgZWFjaCBwbGFuZSBvZiBhIHRpbGUgc2V0IGludG8gc3JjYnVmZnNbc10gKi8KKyAJdGJ5dGVzID0gVElGRlJlYWRUaWxlKGluLCBzcmNidWZmc1tzXSwgY29sLCByb3csIDAsIHMpOworICAgICAgICAgaWYgKHRieXRlcyA8IDAgICYmICFpZ25vcmUpCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTUzMjMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi01MzIzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZWFiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi01MzIzLnBhdGNoCkBAIC0wLDAgKzEsMTA3IEBACitGcm9tIDJmNzk4NTYwOTdmNDIzZWIzMzc5NmExNWZjZjcwMGQyZWE0MWJmMzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+CitEYXRlOiBNb24sIDExIEp1bCAyMDE2IDIxOjM4OjMxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSAoQ1ZFLTIwMTYtNTMyMSAvIENWRS0yMDE2LTUzMjMgLCBidWd6aWxsYSAjMjU1OCAvICMyNTU5KQorCitDVkU6IENWRS0yMDE2LTUzMjMKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK2h0dHBzOi8vZ2l0aHViLmNvbS92YWR6L2xpYnRpZmYvY29tbWl0LzJmNzk4NTYwOTdmNDIzZWIzMzc5NmExNWZjZjcwMGQyZWE0MWJmMzEKKworU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kaXJ2ZXIuY29tPgorLS0tCisgQ2hhbmdlTG9nICAgICAgICB8ICAyICstCisgdG9vbHMvdGlmZmNyb3AuYyB8IDE2ICsrKysrKysrLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggNGUwMzAyZi4uNjJkYzFiNSAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMyw3ICszLDcgQEAKKyAJKiB0b29scy90aWZmY3JvcC5jOiBBdm9pZCBhY2Nlc3Mgb3V0c2lkZSBvZiBzdGFjayBhbGxvY2F0ZWQgYXJyYXkKKyAJb24gYSB0aWxlZCBzZXBhcmF0ZSBUSUZGIHdpdGggbW9yZSB0aGFuIDggc2FtcGxlcyBwZXIgcGl4ZWwuCisgCVJlcG9ydGVkIGJ5IEthaXhpYW5nIFpoYW5nIG9mIHRoZSBDbG91ZCBTZWN1cml0eSBUZWFtLCBRaWhvbyAzNjAKKy0JKENWRS0yMDE2LTUzMjEsIGJ1Z3ppbGxhICMyNTU4KQorKwkoQ1ZFLTIwMTYtNTMyMSAvIENWRS0yMDE2LTUzMjMgLCBidWd6aWxsYSAjMjU1OCAvICMyNTU5KQorIAorIDIwMTYtMDctMTAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKyAKK2RpZmYgLS1naXQgYS90b29scy90aWZmY3JvcC5jIGIvdG9vbHMvdGlmZmNyb3AuYworaW5kZXggNmZjOGZjMS4uMjdhYmMwYiAxMDA2NDQKKy0tLSBhL3Rvb2xzL3RpZmZjcm9wLmMKKysrKyBiL3Rvb2xzL3RpZmZjcm9wLmMKK0BAIC0zNzM4LDcgKzM3MzgsNyBAQCBjb21iaW5lU2VwYXJhdGVTYW1wbGVzOGJpdHMgKHVpbnQ4ICppbltdLCB1aW50OCAqb3V0LCB1aW50MzIgY29scywKKyAKKyAgICAgICBtYXRjaGJpdHMgPSBtYXNrYml0cyA8PCAoOCAtIHNyY19iaXQgLSBicHMpOyAKKyAgICAgICAvKiBsb2FkIHVwIG5leHQgc2FtcGxlIGZyb20gZWFjaCBwbGFuZSAqLworLSAgICAgIGZvciAocyA9IDA7IHMgPCBzcHA7IHMrKykKKysgICAgICBmb3IgKHMgPSAwOyAocyA8IHNwcCkgJiYgKHMgPCBNQVhfU0FNUExFUyk7IHMrKykKKyAgICAgICAgIHsKKyAJc3JjID0gaW5bc10gKyBzcmNfb2Zmc2V0ICsgc3JjX2J5dGU7CisgICAgICAgICBidWZmMSA9ICgoKnNyYykgJiBtYXRjaGJpdHMpIDw8IChzcmNfYml0KTsKK0BAIC0zODM3LDcgKzM4MzcsNyBAQCBjb21iaW5lU2VwYXJhdGVTYW1wbGVzMTZiaXRzICh1aW50OCAqaW5bXSwgdWludDggKm91dCwgdWludDMyIGNvbHMsCisgICAgICAgc3JjX2JpdCAgPSBiaXRfb2Zmc2V0ICUgODsKKyAKKyAgICAgICBtYXRjaGJpdHMgPSBtYXNrYml0cyA8PCAoMTYgLSBzcmNfYml0IC0gYnBzKTsgCistICAgICAgZm9yIChzID0gMDsgcyA8IHNwcDsgcysrKQorKyAgICAgIGZvciAocyA9IDA7IChzIDwgc3BwKSAmJiAocyA8IE1BWF9TQU1QTEVTKTsgcysrKQorICAgICAgICAgeworIAlzcmMgPSBpbltzXSArIHNyY19vZmZzZXQgKyBzcmNfYnl0ZTsKKyAgICAgICAgIGlmIChsaXR0bGVfZW5kaWFuKQorQEAgLTM5NDcsNyArMzk0Nyw3IEBAIGNvbWJpbmVTZXBhcmF0ZVNhbXBsZXMyNGJpdHMgKHVpbnQ4ICppbltdLCB1aW50OCAqb3V0LCB1aW50MzIgY29scywKKyAgICAgICBzcmNfYml0ICA9IGJpdF9vZmZzZXQgJSA4OworIAorICAgICAgIG1hdGNoYml0cyA9IG1hc2tiaXRzIDw8ICgzMiAtIHNyY19iaXQgLSBicHMpOyAKKy0gICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwOyBzKyspCisrICAgICAgZm9yIChzID0gMDsgKHMgPCBzcHApICYmIChzIDwgTUFYX1NBTVBMRVMpOyBzKyspCisgICAgICAgICB7CisgCXNyYyA9IGluW3NdICsgc3JjX29mZnNldCArIHNyY19ieXRlOworICAgICAgICAgaWYgKGxpdHRsZV9lbmRpYW4pCitAQCAtNDA3Myw3ICs0MDczLDcgQEAgY29tYmluZVNlcGFyYXRlU2FtcGxlczMyYml0cyAodWludDggKmluW10sIHVpbnQ4ICpvdXQsIHVpbnQzMiBjb2xzLAorICAgICAgIHNyY19iaXQgID0gYml0X29mZnNldCAlIDg7CisgCisgICAgICAgbWF0Y2hiaXRzID0gbWFza2JpdHMgPDwgKDY0IC0gc3JjX2JpdCAtIGJwcyk7IAorLSAgICAgIGZvciAocyA9IDA7IHMgPCBzcHA7IHMrKykKKysgICAgICBmb3IgKHMgPSAwOyAocyA8IHNwcCkgJiYgKHMgPCBNQVhfU0FNUExFUyk7IHMrKykKKyAJeworIAlzcmMgPSBpbltzXSArIHNyY19vZmZzZXQgKyBzcmNfYnl0ZTsKKyAJaWYgKGxpdHRsZV9lbmRpYW4pCitAQCAtNDI2Myw3ICs0MjYzLDcgQEAgY29tYmluZVNlcGFyYXRlVGlsZVNhbXBsZXM4Yml0cyAodWludDggKmluW10sIHVpbnQ4ICpvdXQsIHVpbnQzMiBjb2xzLAorIAorICAgICAgIG1hdGNoYml0cyA9IG1hc2tiaXRzIDw8ICg4IC0gc3JjX2JpdCAtIGJwcyk7IAorICAgICAgIC8qIGxvYWQgdXAgbmV4dCBzYW1wbGUgZnJvbSBlYWNoIHBsYW5lICovCistICAgICAgZm9yIChzID0gMDsgcyA8IHNwcDsgcysrKQorKyAgICAgIGZvciAocyA9IDA7IChzIDwgc3BwKSAmJiAocyA8IE1BWF9TQU1QTEVTKTsgcysrKQorICAgICAgICAgeworIAlzcmMgPSBpbltzXSArIHNyY19vZmZzZXQgKyBzcmNfYnl0ZTsKKyAgICAgICAgIGJ1ZmYxID0gKCgqc3JjKSAmIG1hdGNoYml0cykgPDwgKHNyY19iaXQpOworQEAgLTQzNjIsNyArNDM2Miw3IEBAIGNvbWJpbmVTZXBhcmF0ZVRpbGVTYW1wbGVzMTZiaXRzICh1aW50OCAqaW5bXSwgdWludDggKm91dCwgdWludDMyIGNvbHMsCisgICAgICAgc3JjX2JpdCAgPSBiaXRfb2Zmc2V0ICUgODsKKyAKKyAgICAgICBtYXRjaGJpdHMgPSBtYXNrYml0cyA8PCAoMTYgLSBzcmNfYml0IC0gYnBzKTsgCistICAgICAgZm9yIChzID0gMDsgcyA8IHNwcDsgcysrKQorKyAgICAgIGZvciAocyA9IDA7IChzIDwgc3BwKSAmJiAocyA8IE1BWF9TQU1QTEVTKTsgcysrKQorICAgICAgICAgeworIAlzcmMgPSBpbltzXSArIHNyY19vZmZzZXQgKyBzcmNfYnl0ZTsKKyAgICAgICAgIGlmIChsaXR0bGVfZW5kaWFuKQorQEAgLTQ0NzEsNyArNDQ3MSw3IEBAIGNvbWJpbmVTZXBhcmF0ZVRpbGVTYW1wbGVzMjRiaXRzICh1aW50OCAqaW5bXSwgdWludDggKm91dCwgdWludDMyIGNvbHMsCisgICAgICAgc3JjX2JpdCAgPSBiaXRfb2Zmc2V0ICUgODsKKyAKKyAgICAgICBtYXRjaGJpdHMgPSBtYXNrYml0cyA8PCAoMzIgLSBzcmNfYml0IC0gYnBzKTsgCistICAgICAgZm9yIChzID0gMDsgcyA8IHNwcDsgcysrKQorKyAgICAgIGZvciAocyA9IDA7IChzIDwgc3BwKSAmJiAocyA8IE1BWF9TQU1QTEVTKTsgcysrKQorICAgICAgICAgeworIAlzcmMgPSBpbltzXSArIHNyY19vZmZzZXQgKyBzcmNfYnl0ZTsKKyAgICAgICAgIGlmIChsaXR0bGVfZW5kaWFuKQorQEAgLTQ1OTcsNyArNDU5Nyw3IEBAIGNvbWJpbmVTZXBhcmF0ZVRpbGVTYW1wbGVzMzJiaXRzICh1aW50OCAqaW5bXSwgdWludDggKm91dCwgdWludDMyIGNvbHMsCisgICAgICAgc3JjX2JpdCAgPSBiaXRfb2Zmc2V0ICUgODsKKyAKKyAgICAgICBtYXRjaGJpdHMgPSBtYXNrYml0cyA8PCAoNjQgLSBzcmNfYml0IC0gYnBzKTsgCistICAgICAgZm9yIChzID0gMDsgcyA8IHNwcDsgcysrKQorKyAgICAgIGZvciAocyA9IDA7IChzIDwgc3BwKSAmJiAocyA8IE1BWF9TQU1QTEVTKTsgcysrKQorIAl7CisgCXNyYyA9IGluW3NdICsgc3JjX29mZnNldCArIHNyY19ieXRlOworIAlpZiAobGl0dGxlX2VuZGlhbikKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjYuYmIKaW5kZXggZTJlMjRlMC4uODE0N2JjNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC42LmJiCkBAIC0xLDEwICsxLDE1IEBACiBTVU1NQVJZID0gIlByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBUYWcgSW1hZ2UgRmlsZSBGb3JtYXQgKFRJRkYpIgogTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTM0ZGEzZGI0NmZhYjc1MDE5OTJmOTYxNWQ3ZTE1OGNmIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5yZW1vdGVzZW5zaW5nLm9yZy9saWJ0aWZmLyIKIAotU1JDX1VSSSA9ICJmdHA6Ly9mdHAucmVtb3Rlc2Vuc2luZy5vcmcvcHViL2xpYnRpZmYvdGlmZi0ke1BWfS50YXIuZ3ogXAorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3NnZW8ub3JnL2xpYnRpZmYvdGlmZi0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vbGlidG9vbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtODY2NV84NjgzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE1LTg3ODEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtODc4NC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0zMTg2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTUzMjEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtNTMyMy5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiZDFkMmU5NDBkZWEwYjVhZDQzNWYyMWYwM2Q5NmRkNzIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBnMTIzL21wZzEyM18xLjIzLjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBnMTIzL21wZzEyM18xLjIzLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlNDU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGcxMjMvbXBnMTIzXzEuMjMuNi5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIkF1ZGlvIGRlY29kZXIgZm9yIE1QRUctMSBMYXllciAxLzIvMyIKK0RFU0NSSVBUSU9OID0gIlRoZSBjb3JlIG9mIG1wZzEyMyBpcyBhbiBNUEVHLTEgTGF5ZXIgMS8yLzMgZGVjb2RpbmcgbGlicmFyeSwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgb3RoZXIgcHJvZ3JhbXMuIFwKK21wZzEyMyBhbHNvIGNvbWVzIHdpdGggYSBjb21tYW5kLWxpbmUgdG9vbCB3aGljaCBjYW4gcGxheWJhY2sgdXNpbmcgQUxTQSwgUHVsc2VBdWRpbywgT1NTLCBhbmQgc2V2ZXJhbCBvdGhlciBBUElzLCBcCithbmQgYWxzbyBjYW4gd3JpdGUgdGhlIGRlY29kZWQgYXVkaW8gdG8gV0FWLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tcGcxMjMuZGUvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbXBnMTIzL2J1Z3MvIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWU4Njc1MzYzOGQzY2YyNTEyNTI4Yjk5MDc5YmM0ZjMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly93d3cubXBnMTIzLmRlL2Rvd25sb2FkLyR7QlB9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZDIyYTNlNjY0ZjA3NmZhMDUxMzFhMzQ1NGVmODE2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDczZDljNjBhNDM4NzJmNmY1YTNhMzIyZjVlYTIxYWI3ZjA4NjlkMmVkMjVlNzljM2ViODUyMWZhM2MzMmQ0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBUaGUgb3B0aW9ucyBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZvciBjb25maWd1cmF0aW9uIHNjcmlwdC4KKyMgSWYgYm90aCBhbHNhIGFuZCBwdWxzZWF1ZGlvIGFyZSBzcGVjaWZpZWQgKGFzIGluIHRoZSBkZWZhdWx0IGRpc3RybyBmZWF0dXJlcykKKyMgcHVsc2VhdWRpbyB0YWtlcyBwcmVjZWRlbmNlLgorUEFDS0FHRUNPTkZJR19BTFNBID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcke1BBQ0tBR0VDT05GSUdfQUxTQX0nLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLS13aXRoLWRlZmF1bHQtYXVkaW89YWxzYSwsYWxzYS1saWIiCitQQUNLQUdFQ09ORklHW2VzZF0gPSAiLCxlc291bmQiCitQQUNLQUdFQ09ORklHW2phY2tdID0gIiwsamFjayIKK1BBQ0tBR0VDT05GSUdbb3BlbmFsXSA9ICIsLG9wZW5hbC1zb2Z0IgorUEFDS0FHRUNPTkZJR1twb3J0YXVkaW9dID0gIiwscG9ydGF1ZGlvLXYxOSIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS13aXRoLWRlZmF1bHQtYXVkaW89cHVsc2UsLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW3NkbF0gPSAiLCxsaWJzZGwiCisKKyMgRm9sbG93aW5nIGFyZSBwb3NzaWJsZSBzb3VuZCBvdXRwdXQgbW9kdWxlczoKKyMgYWxzYSBhcnRzIGNvcmVhdWRpbyBkdW1teSBlc2QgamFjayBuYXMgb3BlbmFsIG9zMiBvc3MgcG9ydGF1ZGlvIHB1bHNlIHNkbCBzbmRpbyBzdW4gdGlueWFsc2Egd2luMzIgd2luMzJfd2FzYXBpCitBVURJT01PRFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0iCitBVURJT01PRFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VzZCcsICdlc2QnLCAnJywgZCl9IgorQVVESU9NT0RTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdqYWNrJywgJ2phY2snLCAnJywgZCl9IgorQVVESU9NT0RTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdvcGVuYWwnLCAnb3BlbmFsJywgJycsIGQpfSIKK0FVRElPTU9EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncG9ydGF1ZGlvJywgJ3BvcnRhdWRpbycsICcnLCBkKX0iCitBVURJT01PRFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B1bHNlYXVkaW8nLCAncHVsc2UnLCAnJywgZCl9IgorQVVESU9NT0RTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzZGwnLCAnc2RsJywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLXdpdGgtYXVkaW89JyR7QVVESU9NT0RTfScgXAorICAgIC0td2l0aC1tb2R1bGUtc3VmZml4PS5zbyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbmVvbicsICctLXdpdGgtY3B1PW5lb24nLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhbHRpdmVjJywgJy0td2l0aC1jcHU9YWx0aXZlYycsICcnLCBkKX0gXAorIgorCisjIFRoZSB4ODYgYXNzZW1ibGVyIG9wdGltaXNhdGlvbnMgY29udGFpbnMgdGV4dCByZWxvY2F0aW9ucyBhbmQgdGhlcmUgYXJlIG5vCisjIHVwc3RyZWFtIHBsYW5zIHRvIGZpeCB0aGVtOiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbXBnMTIzL2J1Z3MvMTY4LworSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX3g4NiA9ICIgdGV4dHJlbCIKKworIyBGYWlscyB0byBidWlsZCB3aXRoIHRodW1iLTEgKHFlbXVhcm0pCisjfCB7c3RhbmRhcmQgaW5wdXR9OiBBc3NlbWJsZXIgbWVzc2FnZXM6CisjfCB7c3RhbmRhcmQgaW5wdXR9OjQ3OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgc211bGwgcjUscjYscjcscjQnCisjfCB7c3RhbmRhcmQgaW5wdXR9OjQ4OiBFcnJvcjogc2hpZnRzIGluIENNUC9NT1YgaW5zdHJ1Y3Rpb25zIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB1bmlmaWVkIHN5bnRheCAtLSBgbW92IHI1LHI1LGxzciMyNCcKKyMuLi4KKyN8IG1ha2VbM106ICoqKiBbZXF1YWxpemVyLmxvXSBFcnJvciAxCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYwppbmRleCAwYjA1Y2U0Li43ZTU0YWQ0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYwpAQCAtMywxMSArMywxMiBAQAogQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyIKIFNFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgogTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTDttZDU9NDMyNWFmZDM5NmZlYmNiNjU5YzM2YjQ5NTMzMTM1ZDQgXAorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZDlhZTA4OWM4ZGM1MzM5ZjhhYzlkODU2MzAzOGEyOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vR1BMO21kNT00MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcHVsc2Vjb3JlL3Jlc2FtcGxlci5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjE7bWQ1PTA5Nzk0MDEyYWUxNjkxMmMwMjcwZjMyODBjYzhmZjg0IgogCi1ERVBFTkRTID0gImxpYmF0b21pYy1vcHMgbGlic25kZmlsZTEgbGlidG9vbCIKK0RFUEVORFMgPSAibGliYXRvbWljLW9wcyBsaWJzbmRmaWxlMSBsaWJ0b29sIGludGx0b29sLW5hdGl2ZSIKICMgb3B0aW9uYWwKIERFUEVORFMgKz0gInVkZXYgYWxzYS1saWIgZ2xpYi0yLjAgZ2NvbmYiCiBERVBFTkRTICs9ICJqc29uLWMgZ2RibSBzcGVleGRzcCBsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIGxpYmNhcCIKQEAgLTMwLDYgKzMxLDcgQEAKIAkJLS13aXRob3V0LXpzaC1jb21wbGV0aW9uLWRpciBcCiAJCS0td2l0aC11ZGV2LXJ1bGVzLWRpcj1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAvcnVsZXMuZCBcCiAgICAgICAgICAgICAgICAgYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9bm8gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS10ZXN0cyBcCiAiCiAKICMgc294ciAodGhlIFNvWCBSZXNhbXBsZXIgbGlicmFyeSkgZG9lc24ndCBzZWVtIHRvIGJlIGN1cnJlbnRseSBwYWNrYWdlZCBpbgpAQCAtNDEsNiArNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAogICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAnb2Zvbm8nLCAnJywgZCl9IFwKICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSBcCiAgICAgICAgICAgICAgICAgICAgZGJ1cyBcCiAgICAgICAgICAgICAgICAgICAgIgogCkBAIC01Nyw2ICs2MCw4IEBACiAjIGFibGUgdG8gdXNlIHB1bHNlYXVkaW8gYXV0b3NwYXduIGZvciByb290IGFzIHdlbGwuCiBQQUNLQUdFQ09ORklHW2F1dG9zcGF3bi1mb3Itcm9vdF0gPSAiLCwsIgogUEFDS0FHRUNPTkZJR1tsaXJjXSA9ICItLWVuYWJsZS1saXJjLC0tZGlzYWJsZS1saXJjLGxpcmMiCitQQUNLQUdFQ09ORklHW3dlYnJ0Y10gPSAiLS1lbmFibGUtd2VicnRjLWFlYywtLWRpc2FibGUtd2VicnRjLWFlYyx3ZWJydGMtYXVkaW8tcHJvY2Vzc2luZyIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCiAKIEVYVFJBX09FQ09ORl9hcHBlbmRfYXJtID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtLWVuYWJsZS1uZW9uLW9wdD1ubyIsIGQpfSIKIEVYVFJBX09FQ09ORl9hcHBlbmRfYXJtZWIgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICIiLCAiIC0tZW5hYmxlLW5lb24tb3B0PW5vIiwgZCl9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLVJldmVydC1tb2R1bGUtc3dpdGNoLW9uLXBvcnQtYXZhaWxhYmxlLVJvdXRlLXRvLXByZWYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtUmV2ZXJ0LW1vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUtUm91dGUtdG8tcHJlZi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxZTJmYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtUmV2ZXJ0LW1vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUtUm91dGUtdG8tcHJlZi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi1Gcm9tIGI4YjliM2RhOTRhMGMyNzA5MGNlYmEyNDNmZGY1NGZiNTE4YzU0ODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+Ci1EYXRlOiBNb24sIDEgRmViIDIwMTYgMTU6MzQ6NTkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJtb2R1bGUtc3dpdGNoLW9uLXBvcnQtYXZhaWxhYmxlOiBSb3V0ZSB0byBwcmVmZXJyZWQKLSBwcm9maWxlIgotCi1UaGlzIHJldmVydHMgY29tbWl0IGU4NzEwMGQ0MWVmNmQxNGY4ZGM3ZjgwMzU4MjE5MWQ5ZjhkOGYxODMuCi0KLVRoZSByZXZlcnRlZCBjb21taXQgaGFkIHNvbWUgdW53YW50ZWQgY29uc2VxdWVuY2VzOgotaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MDMKLWh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTkzOTQ2Ci0KLVRoZSBmaXJzdCByZWdyZXNzaW9uIGhhcyBhIGZpeCBoZXJlOgotaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoLzcyMDUzLwotCi1UaGUgc2Vjb25kIHJlZ3Jlc3Npb24sIGhvd2V2ZXIsIGRvZXNuJ3QgaGF2ZSBhIGZpeCB5ZXQuIFRoZXJlZm9yZSwKLWl0J3MgYmVzdCB0byByZXZlcnQgdGhlIG9mZmVuZGluZyBwYXRjaCBmb3Igbm93LgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Vwc3RyZWFtIHBsYW5zIHRvIGZpeCB0aGUgaXNzdWVzCi1wcm9wZXJseS5dCi0KLVNpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KLS0tLQotIHNyYy9tb2R1bGVzL21vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUuYyB8IDE3MiArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCAxMDUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9tb2R1bGUtc3dpdGNoLW9uLXBvcnQtYXZhaWxhYmxlLmMgYi9zcmMvbW9kdWxlcy9tb2R1bGUtc3dpdGNoLW9uLXBvcnQtYXZhaWxhYmxlLmMKLWluZGV4IDVkZDk3ODYuLjhkZTY4YTMgMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9tb2R1bGUtc3dpdGNoLW9uLXBvcnQtYXZhaWxhYmxlLmMKLSsrKyBiL3NyYy9tb2R1bGVzL21vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUuYwotQEAgLTc0LDI1ICs3NCwyMiBAQCBzdGF0aWMgYm9vbCBwcm9maWxlX2dvb2RfZm9yX2lucHV0KHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZSkgewotIHN0YXRpYyBpbnQgdHJ5X3RvX3N3aXRjaF9wcm9maWxlKHBhX2RldmljZV9wb3J0ICpwb3J0KSB7Ci0gICAgIHBhX2NhcmRfcHJvZmlsZSAqYmVzdF9wcm9maWxlID0gTlVMTCwgKnByb2ZpbGU7Ci0gICAgIHZvaWQgKnN0YXRlOwotLSAgICB1bnNpZ25lZCBiZXN0X3ByaW8gPSAwOwotIAotLSAgICBwYV9sb2dfZGVidWcoIkZpbmRpbmcgYmVzdCBwcm9maWxlIGZvciBwb3J0ICVzLCBwcmVmZXJyZWQgPSAlcyIsCi0tICAgICAgICAgICAgICAgICBwb3J0LT5uYW1lLCBwYV9zdHJudWxsKHBvcnQtPnByZWZlcnJlZF9wcm9maWxlKSk7Ci0rICAgIHBhX2xvZ19kZWJ1ZygiRmluZGluZyBiZXN0IHByb2ZpbGUiKTsKLSAKLSAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHByb2ZpbGUsIHBvcnQtPnByb2ZpbGVzLCBzdGF0ZSkgewotICAgICAgICAgYm9vbCBnb29kID0gZmFsc2U7Ci0tICAgICAgICBjb25zdCBjaGFyICpuYW1lOwotLSAgICAgICAgdW5zaWduZWQgcHJpbyA9IHByb2ZpbGUtPnByaW9yaXR5OwotKwotKyAgICAgICAgaWYgKGJlc3RfcHJvZmlsZSAmJiBiZXN0X3Byb2ZpbGUtPnByaW9yaXR5ID49IHByb2ZpbGUtPnByaW9yaXR5KQotKyAgICAgICAgICAgIGNvbnRpbnVlOwotIAotICAgICAgICAgLyogV2UgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIGtlZXAgb3RoZXIgZGlyZWN0aW9uIHVuY2hhbmdlZCAqLwotICAgICAgICAgc3dpdGNoIChwb3J0LT5kaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICBjYXNlIFBBX0RJUkVDVElPTl9PVVRQVVQ6Ci0tICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9maWxlLT5vdXRwdXRfbmFtZTsKLSAgICAgICAgICAgICAgICAgZ29vZCA9IHByb2ZpbGVfZ29vZF9mb3Jfb3V0cHV0KHByb2ZpbGUpOwotICAgICAgICAgICAgICAgICBicmVhazsKLSAKLSAgICAgICAgICAgICBjYXNlIFBBX0RJUkVDVElPTl9JTlBVVDoKLS0gICAgICAgICAgICAgICAgbmFtZSA9IHByb2ZpbGUtPmlucHV0X25hbWU7Ci0gICAgICAgICAgICAgICAgIGdvb2QgPSBwcm9maWxlX2dvb2RfZm9yX2lucHV0KHByb2ZpbGUpOwotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLUBAIC0xMDAsMTUgKzk3LDcgQEAgc3RhdGljIGludCB0cnlfdG9fc3dpdGNoX3Byb2ZpbGUocGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKLSAgICAgICAgIGlmICghZ29vZCkKLSAgICAgICAgICAgICBjb250aW51ZTsKLSAKLS0gICAgICAgIC8qIEdpdmUgYSBoaWdoIGJvbnVzIGluIGNhc2UgdGhpcyBpcyB0aGUgcHJlZmVycmVkIHByb2ZpbGUgKi8KLS0gICAgICAgIGlmIChwb3J0LT5wcmVmZXJyZWRfcHJvZmlsZSAmJiBwYV9zdHJlcShuYW1lID8gbmFtZSA6IHByb2ZpbGUtPm5hbWUsIHBvcnQtPnByZWZlcnJlZF9wcm9maWxlKSkKLS0gICAgICAgICAgICBwcmlvICs9IDEwMDAwMDA7Ci0tCi0tICAgICAgICBpZiAoYmVzdF9wcm9maWxlICYmIGJlc3RfcHJpbyA+PSBwcmlvKQotLSAgICAgICAgICAgIGNvbnRpbnVlOwotLQotICAgICAgICAgYmVzdF9wcm9maWxlID0gcHJvZmlsZTsKLS0gICAgICAgIGJlc3RfcHJpbyA9IHByaW87Ci0gICAgIH0KLSAKLSAgICAgaWYgKCFiZXN0X3Byb2ZpbGUpIHsKLUBAIC0xMjQsMTI1ICsxMTMsOTggQEAgc3RhdGljIGludCB0cnlfdG9fc3dpdGNoX3Byb2ZpbGUocGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKLSAgICAgcmV0dXJuIDA7Ci0gfQotIAotLXN0cnVjdCBwb3J0X3BvaW50ZXJzIHsKLS0gICAgcGFfZGV2aWNlX3BvcnQgKnBvcnQ7Ci0tICAgIHBhX3NpbmsgKnNpbms7Ci0tICAgIHBhX3NvdXJjZSAqc291cmNlOwotLSAgICBib29sIGlzX3Bvc3NpYmxlX3Byb2ZpbGVfYWN0aXZlOwotLSAgICBib29sIGlzX3ByZWZlcnJlZF9wcm9maWxlX2FjdGl2ZTsKLS0gICAgYm9vbCBpc19wb3J0X2FjdGl2ZTsKLS19OwotLQotLXN0YXRpYyBjb25zdCBjaGFyKiBwcm9maWxlX25hbWVfZm9yX2RpcihwYV9jYXJkX3Byb2ZpbGUgKmNwLCBwYV9kaXJlY3Rpb25fdCBkaXIpIHsKLS0gICAgaWYgKGRpciA9PSBQQV9ESVJFQ1RJT05fT1VUUFVUICYmIGNwLT5vdXRwdXRfbmFtZSkKLS0gICAgICAgIHJldHVybiBjcC0+b3V0cHV0X25hbWU7Ci0tICAgIGlmIChkaXIgPT0gUEFfRElSRUNUSU9OX0lOUFVUICYmIGNwLT5pbnB1dF9uYW1lKQotLSAgICAgICAgcmV0dXJuIGNwLT5pbnB1dF9uYW1lOwotLSAgICByZXR1cm4gY3AtPm5hbWU7Ci0tfQotLQotLXN0YXRpYyBzdHJ1Y3QgcG9ydF9wb2ludGVycyBmaW5kX3BvcnRfcG9pbnRlcnMocGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKLS0gICAgc3RydWN0IHBvcnRfcG9pbnRlcnMgcHAgPSB7IC5wb3J0ID0gcG9ydCB9OwotK3N0YXRpYyB2b2lkIGZpbmRfc2lua19hbmRfc291cmNlKHBhX2NhcmQgKmNhcmQsIHBhX2RldmljZV9wb3J0ICpwb3J0LCBwYV9zaW5rICoqc2ksIHBhX3NvdXJjZSAqKnNvKSB7Ci0rICAgIHBhX3NpbmsgKnNpbmsgPSBOVUxMOwotKyAgICBwYV9zb3VyY2UgKnNvdXJjZSA9IE5VTEw7Ci0gICAgIHVpbnQzMl90IHN0YXRlOwotLSAgICBwYV9jYXJkICpjYXJkOwotLQotLSAgICBwYV9hc3NlcnQocG9ydCk7Ci0tICAgIHBhX2Fzc2VydF9zZShjYXJkID0gcG9ydC0+Y2FyZCk7Ci0gCi0gICAgIHN3aXRjaCAocG9ydC0+ZGlyZWN0aW9uKSB7Ci0gICAgICAgICBjYXNlIFBBX0RJUkVDVElPTl9PVVRQVVQ6Ci0tICAgICAgICAgICAgUEFfSURYU0VUX0ZPUkVBQ0gocHAuc2luaywgY2FyZC0+c2lua3MsIHN0YXRlKQotLSAgICAgICAgICAgICAgICBpZiAocG9ydCA9PSBwYV9oYXNobWFwX2dldChwcC5zaW5rLT5wb3J0cywgcG9ydC0+bmFtZSkpCi0rICAgICAgICAgICAgUEFfSURYU0VUX0ZPUkVBQ0goc2luaywgY2FyZC0+c2lua3MsIHN0YXRlKQotKyAgICAgICAgICAgICAgICBpZiAocG9ydCA9PSBwYV9oYXNobWFwX2dldChzaW5rLT5wb3J0cywgcG9ydC0+bmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBicmVhazsKLSAKLSAgICAgICAgIGNhc2UgUEFfRElSRUNUSU9OX0lOUFVUOgotLSAgICAgICAgICAgIFBBX0lEWFNFVF9GT1JFQUNIKHBwLnNvdXJjZSwgY2FyZC0+c291cmNlcywgc3RhdGUpCi0tICAgICAgICAgICAgICAgIGlmIChwb3J0ID09IHBhX2hhc2htYXBfZ2V0KHBwLnNvdXJjZS0+cG9ydHMsIHBvcnQtPm5hbWUpKQotKyAgICAgICAgICAgIFBBX0lEWFNFVF9GT1JFQUNIKHNvdXJjZSwgY2FyZC0+c291cmNlcywgc3RhdGUpCi0rICAgICAgICAgICAgICAgIGlmIChwb3J0ID09IHBhX2hhc2htYXBfZ2V0KHNvdXJjZS0+cG9ydHMsIHBvcnQtPm5hbWUpKQotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgYnJlYWs7Ci0gICAgIH0KLSAKLS0gICAgcHAuaXNfcG9zc2libGVfcHJvZmlsZV9hY3RpdmUgPQotLSAgICAgICAgY2FyZC0+YWN0aXZlX3Byb2ZpbGUgPT0gcGFfaGFzaG1hcF9nZXQocG9ydC0+cHJvZmlsZXMsIGNhcmQtPmFjdGl2ZV9wcm9maWxlLT5uYW1lKTsKLS0gICAgcHAuaXNfcHJlZmVycmVkX3Byb2ZpbGVfYWN0aXZlID0gcHAuaXNfcG9zc2libGVfcHJvZmlsZV9hY3RpdmUgJiYgKCFwb3J0LT5wcmVmZXJyZWRfcHJvZmlsZSB8fAotLSAgICAgICAgcGFfc2FmZV9zdHJlcShwb3J0LT5wcmVmZXJyZWRfcHJvZmlsZSwgcHJvZmlsZV9uYW1lX2Zvcl9kaXIoY2FyZC0+YWN0aXZlX3Byb2ZpbGUsIHBvcnQtPmRpcmVjdGlvbikpKTsKLS0gICAgcHAuaXNfcG9ydF9hY3RpdmUgPSAocHAuc2luayAmJiBwcC5zaW5rLT5hY3RpdmVfcG9ydCA9PSBwb3J0KSB8fCAocHAuc291cmNlICYmIHBwLnNvdXJjZS0+YWN0aXZlX3BvcnQgPT0gcG9ydCk7Ci0tCi0tICAgIHJldHVybiBwcDsKLSsgICAgKnNpID0gc2luazsKLSsgICAgKnNvID0gc291cmNlOwotIH0KLSAKLS0vKiBTd2l0Y2hlcyB0byBhIHBvcnQsIHN3aXRjaGluZyBwcm9maWxlcyBpZiBuZWNlc3Nhcnkgb3IgcHJlZmVycmVkICovCi0tc3RhdGljIGJvb2wgc3dpdGNoX3RvX3BvcnQocGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKLS0gICAgc3RydWN0IHBvcnRfcG9pbnRlcnMgcHAgPSBmaW5kX3BvcnRfcG9pbnRlcnMocG9ydCk7Ci0rc3RhdGljIHBhX2hvb2tfcmVzdWx0X3QgcG9ydF9hdmFpbGFibGVfaG9va19jYWxsYmFjayhwYV9jb3JlICpjLCBwYV9kZXZpY2VfcG9ydCAqcG9ydCwgdm9pZCogdXNlcmRhdGEpIHsKLSsgICAgcGFfY2FyZCogY2FyZDsKLSsgICAgcGFfc2luayAqc2luazsKLSsgICAgcGFfc291cmNlICpzb3VyY2U7Ci0rICAgIGJvb2wgaXNfYWN0aXZlX3Byb2ZpbGUsIGlzX2FjdGl2ZV9wb3J0OwotIAotLSAgICBpZiAocHAuaXNfcG9ydF9hY3RpdmUpCi0tICAgICAgICByZXR1cm4gdHJ1ZTsgLyogQWxyZWFkeSBzZWxlY3RlZCAqLwotKyAgICBpZiAocG9ydC0+YXZhaWxhYmxlID09IFBBX0FWQUlMQUJMRV9VTktOT1dOKQotKyAgICAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0gCi0tICAgIHBhX2xvZ19kZWJ1ZygiVHJ5aW5nIHRvIHN3aXRjaCB0byBwb3J0ICVzIiwgcG9ydC0+bmFtZSk7Ci0tICAgIGlmICghcHAuaXNfcHJlZmVycmVkX3Byb2ZpbGVfYWN0aXZlKSB7Ci0tICAgICAgICBpZiAodHJ5X3RvX3N3aXRjaF9wcm9maWxlKHBvcnQpIDwgMCkgewotLSAgICAgICAgICAgIGlmIChwcC5pc19wb3NzaWJsZV9wcm9maWxlX2FjdGl2ZSkKLS0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotLSAgICAgICAgfQotLSAgICAgICAgZWxzZQotLSAgICAgICAgICAgIC8qIE5vdyB0aGF0IHByb2ZpbGUgaGFzIGNoYW5nZWQsIG91ciBzaW5rIGFuZCBzb3VyY2UgcG9pbnRlcnMgbXVzdCBiZSB1cGRhdGVkICovCi0tICAgICAgICAgICAgcHAgPSBmaW5kX3BvcnRfcG9pbnRlcnMocG9ydCk7Ci0tICAgIH0KLSsgICAgY2FyZCA9IHBvcnQtPmNhcmQ7Ci0gCi0tICAgIGlmIChwcC5zb3VyY2UpCi0tICAgICAgICBwYV9zb3VyY2Vfc2V0X3BvcnQocHAuc291cmNlLCBwb3J0LT5uYW1lLCBmYWxzZSk7Ci0tICAgIGlmIChwcC5zaW5rKQotLSAgICAgICAgcGFfc2lua19zZXRfcG9ydChwcC5zaW5rLCBwb3J0LT5uYW1lLCBmYWxzZSk7Ci0tICAgIHJldHVybiB0cnVlOwotLX0KLSsgICAgaWYgKCFjYXJkKSB7Ci0rICAgICAgICBwYV9sb2dfd2FybigiUG9ydCAlcyBkb2VzIG5vdCBoYXZlIGEgY2FyZCIsIHBvcnQtPm5hbWUpOwotKyAgICAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0rICAgIH0KLSAKLS0vKiBTd2l0Y2hlcyBhd2F5IGZyb20gYSBwb3J0LCBzd2l0Y2hpbmcgcHJvZmlsZXMgaWYgbmVjZXNzYXJ5IG9yIHByZWZlcnJlZCAqLwotLXN0YXRpYyBib29sIHN3aXRjaF9mcm9tX3BvcnQocGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKLS0gICAgc3RydWN0IHBvcnRfcG9pbnRlcnMgcHAgPSBmaW5kX3BvcnRfcG9pbnRlcnMocG9ydCk7Ci0tICAgIHBhX2RldmljZV9wb3J0ICpwLCAqYmVzdF9wb3J0ID0gTlVMTDsKLS0gICAgdm9pZCAqc3RhdGU7Ci0rICAgIGlmIChwYV9pZHhzZXRfc2l6ZShjYXJkLT5zaW5rcykgPT0gMCAmJiBwYV9pZHhzZXRfc2l6ZShjYXJkLT5zb3VyY2VzKSA9PSAwKQotKyAgICAgICAgLyogVGhpcyBjYXJkIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQuIFdlJ2xsIGhhbmRsZSBpdCBpbgotKyAgICAgICAgICAgc2lua19uZXcgLyBzb3VyY2VfbmV3IGNhbGxiYWNrcyBsYXRlci4gKi8KLSsgICAgICAgIHJldHVybiBQQV9IT09LX09LOwotIAotLSAgICBpZiAoIXBwLmlzX3BvcnRfYWN0aXZlKQotLSAgICAgICAgcmV0dXJuIHRydWU7IC8qIEFscmVhZHkgZGVzZWxlY3RlZCAqLwotKyAgICBmaW5kX3NpbmtfYW5kX3NvdXJjZShjYXJkLCBwb3J0LCAmc2luaywgJnNvdXJjZSk7Ci0gCi0tICAgIC8qIFRyeSB0byBmaW5kIGEgZ29vZCBlbm91Z2ggcG9ydCB0byBzd2l0Y2ggdG8gKi8KLS0gICAgUEFfSEFTSE1BUF9GT1JFQUNIKHAsIHBvcnQtPmNhcmQtPnBvcnRzLCBzdGF0ZSkKLS0gICAgICAgIGlmIChwLT5kaXJlY3Rpb24gPT0gcG9ydC0+ZGlyZWN0aW9uICYmIHAgIT0gcG9ydCAmJiBwLT5hdmFpbGFibGUgIT0gUEFfQVZBSUxBQkxFX05PICYmCi0tICAgICAgICAgICAoIWJlc3RfcG9ydCB8fCBiZXN0X3BvcnQtPnByaW9yaXR5IDwgcC0+cHJpb3JpdHkpKQotLSAgICAgICAgICAgYmVzdF9wb3J0ID0gcDsKLSsgICAgaXNfYWN0aXZlX3Byb2ZpbGUgPSBjYXJkLT5hY3RpdmVfcHJvZmlsZSA9PSBwYV9oYXNobWFwX2dldChwb3J0LT5wcm9maWxlcywgY2FyZC0+YWN0aXZlX3Byb2ZpbGUtPm5hbWUpOwotKyAgICBpc19hY3RpdmVfcG9ydCA9IChzaW5rICYmIHNpbmstPmFjdGl2ZV9wb3J0ID09IHBvcnQpIHx8IChzb3VyY2UgJiYgc291cmNlLT5hY3RpdmVfcG9ydCA9PSBwb3J0KTsKLSAKLS0gICAgcGFfbG9nX2RlYnVnKCJUcnlpbmcgdG8gc3dpdGNoIGF3YXkgZnJvbSBwb3J0ICVzLCBmb3VuZCAlcyIsIHBvcnQtPm5hbWUsIGJlc3RfcG9ydCA/IGJlc3RfcG9ydC0+bmFtZSA6ICJubyBiZXR0ZXIgb3B0aW9uIik7Ci0rICAgIGlmIChwb3J0LT5hdmFpbGFibGUgPT0gUEFfQVZBSUxBQkxFX05PICYmICFpc19hY3RpdmVfcG9ydCkKLSsgICAgICAgIHJldHVybiBQQV9IT09LX09LOwotIAotLSAgICBpZiAoYmVzdF9wb3J0KQotLSAgICAgICAgcmV0dXJuIHN3aXRjaF90b19wb3J0KGJlc3RfcG9ydCk7Ci0rICAgIGlmIChwb3J0LT5hdmFpbGFibGUgPT0gUEFfQVZBSUxBQkxFX1lFUykgewotKyAgICAgICAgaWYgKGlzX2FjdGl2ZV9wb3J0KQotKyAgICAgICAgICAgIHJldHVybiBQQV9IT09LX09LOwotIAotLSAgICByZXR1cm4gZmFsc2U7Ci0tfQotKyAgICAgICAgaWYgKCFpc19hY3RpdmVfcHJvZmlsZSkgewotKyAgICAgICAgICAgIGlmICh0cnlfdG9fc3dpdGNoX3Byb2ZpbGUocG9ydCkgPCAwKQotKyAgICAgICAgICAgICAgICByZXR1cm4gUEFfSE9PS19PSzsKLSAKLSsgICAgICAgICAgICBwYV9hc3NlcnQoY2FyZC0+YWN0aXZlX3Byb2ZpbGUgPT0gcGFfaGFzaG1hcF9nZXQocG9ydC0+cHJvZmlsZXMsIGNhcmQtPmFjdGl2ZV9wcm9maWxlLT5uYW1lKSk7Ci0gCi0tc3RhdGljIHBhX2hvb2tfcmVzdWx0X3QgcG9ydF9hdmFpbGFibGVfaG9va19jYWxsYmFjayhwYV9jb3JlICpjLCBwYV9kZXZpY2VfcG9ydCAqcG9ydCwgdm9pZCogdXNlcmRhdGEpIHsKLS0gICAgcGFfYXNzZXJ0KHBvcnQpOwotKyAgICAgICAgICAgIC8qIE5vdyB0aGF0IHByb2ZpbGUgaGFzIGNoYW5nZWQsIG91ciBzaW5rIGFuZCBzb3VyY2UgcG9pbnRlcnMgbXVzdCBiZSB1cGRhdGVkICovCi0rICAgICAgICAgICAgZmluZF9zaW5rX2FuZF9zb3VyY2UoY2FyZCwgcG9ydCwgJnNpbmssICZzb3VyY2UpOwotKyAgICAgICAgfQotIAotLSAgICBpZiAoIXBvcnQtPmNhcmQpIHsKLS0gICAgICAgIHBhX2xvZ193YXJuKCJQb3J0ICVzIGRvZXMgbm90IGhhdmUgYSBjYXJkIiwgcG9ydC0+bmFtZSk7Ci0tICAgICAgICByZXR1cm4gUEFfSE9PS19PSzsKLSsgICAgICAgIGlmIChzb3VyY2UpCi0rICAgICAgICAgICAgcGFfc291cmNlX3NldF9wb3J0KHNvdXJjZSwgcG9ydC0+bmFtZSwgZmFsc2UpOwotKyAgICAgICAgaWYgKHNpbmspCi0rICAgICAgICAgICAgcGFfc2lua19zZXRfcG9ydChzaW5rLCBwb3J0LT5uYW1lLCBmYWxzZSk7Ci0gICAgIH0KLSAKLS0gICAgaWYgKHBhX2lkeHNldF9zaXplKHBvcnQtPmNhcmQtPnNpbmtzKSA9PSAwICYmIHBhX2lkeHNldF9zaXplKHBvcnQtPmNhcmQtPnNvdXJjZXMpID09IDApCi0tICAgICAgICAvKiBUaGlzIGNhcmQgaXMgbm90IGluaXRpYWxpemVkIHlldC4gV2UnbGwgaGFuZGxlIGl0IGluCi0tICAgICAgICAgICBzaW5rX25ldyAvIHNvdXJjZV9uZXcgY2FsbGJhY2tzIGxhdGVyLiAqLwotLSAgICAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0rICAgIGlmIChwb3J0LT5hdmFpbGFibGUgPT0gUEFfQVZBSUxBQkxFX05PKSB7Ci0rICAgICAgICBpZiAoc2luaykgewotKyAgICAgICAgICAgIHBhX2RldmljZV9wb3J0ICpwMiA9IHBhX2RldmljZV9wb3J0X2ZpbmRfYmVzdChzaW5rLT5wb3J0cyk7Ci0rCi0rICAgICAgICAgICAgaWYgKHAyICYmIHAyLT5hdmFpbGFibGUgIT0gUEFfQVZBSUxBQkxFX05PKQotKyAgICAgICAgICAgICAgICBwYV9zaW5rX3NldF9wb3J0KHNpbmssIHAyLT5uYW1lLCBmYWxzZSk7Ci0rICAgICAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgICAgIC8qIE1heWJlIHRyeSB0byBzd2l0Y2ggdG8gYW5vdGhlciBwcm9maWxlPyAqLwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSAKLS0gICAgc3dpdGNoIChwb3J0LT5hdmFpbGFibGUpIHsKLS0gICAgY2FzZSBQQV9BVkFJTEFCTEVfWUVTOgotLSAgICAgICAgc3dpdGNoX3RvX3BvcnQocG9ydCk7Ci0tICAgICAgICBicmVhazsKLS0gICAgY2FzZSBQQV9BVkFJTEFCTEVfTk86Ci0tICAgICAgICBzd2l0Y2hfZnJvbV9wb3J0KHBvcnQpOwotLSAgICAgICAgYnJlYWs7Ci0tICAgIGRlZmF1bHQ6Ci0tICAgICAgICBicmVhazsKLSsgICAgICAgIGlmIChzb3VyY2UpIHsKLSsgICAgICAgICAgICBwYV9kZXZpY2VfcG9ydCAqcDIgPSBwYV9kZXZpY2VfcG9ydF9maW5kX2Jlc3Qoc291cmNlLT5wb3J0cyk7Ci0rCi0rICAgICAgICAgICAgaWYgKHAyICYmIHAyLT5hdmFpbGFibGUgIT0gUEFfQVZBSUxBQkxFX05PKQotKyAgICAgICAgICAgICAgICBwYV9zb3VyY2Vfc2V0X3BvcnQoc291cmNlLCBwMi0+bmFtZSwgZmFsc2UpOwotKyAgICAgICAgICAgIGVsc2UgewotKyAgICAgICAgICAgICAgICAvKiBNYXliZSB0cnkgdG8gc3dpdGNoIHRvIGFub3RoZXIgcHJvZmlsZT8gKi8KLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0gICAgIH0KLSAKLSAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1hbHNhLWJsdWV0b290aC1mYWlsLWlmLXVzZXItcmVxdWVzdGVkLXByb2ZpbGUtZG9lc24tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWFsc2EtYmx1ZXRvb3RoLWZhaWwtaWYtdXNlci1yZXF1ZXN0ZWQtcHJvZmlsZS1kb2Vzbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MmNlYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1hbHNhLWJsdWV0b290aC1mYWlsLWlmLXVzZXItcmVxdWVzdGVkLXByb2ZpbGUtZG9lc24tLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gOWMzY2RmY2QxOThlZjk3MjdlYTU0MmYyODRhYzZkOGMxYmNkN2EzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KK0RhdGU6IEZyaSwgMjMgT2N0IDIwMTUgMTI6MzY6MzQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzVdIGFsc2EsIGJsdWV0b290aDogZmFpbCBpZiB1c2VyLXJlcXVlc3RlZCBwcm9maWxlIGRvZXNuJ3QKKyBleGlzdAorCitJZiB3ZSBjYW4ndCBmdWxmaWxsIHRoZSB1c2VyIHJlcXVlc3QgZnVsbHksIEkgdGhpbmsgd2Ugc2hvdWxkbid0CitmdWxmaWxsIGl0IGF0IGFsbCwgdG8gbWFrZSBpdCBjbGVhciB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uCitkaWRuJ3Qgc3VjY2VlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbZXhwZWN0ZWQgaW4gMTAuMF0KKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgorLS0tCisgc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMgICAgICAgICAgfCAxMSArKysrKysrKystLQorIHNyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jIHwgIDcgKysrKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKK2luZGV4IGU1Y2M0YWUuLmQ3NjE2ODMgMTAwNjQ0CistLS0gYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYworKysrIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKK0BAIC03OTksOCArNzk5LDE1IEBAIGludCBwYV9faW5pdChwYV9tb2R1bGUgKm0pIHsKKyAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgfQorIAorLSAgICBpZiAoKHByb2ZpbGUgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpKSkKKy0gICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoJmRhdGEsIHByb2ZpbGUpOworKyAgICBpZiAoKHByb2ZpbGUgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpKSkgeworKyAgICAgICAgaWYgKHBhX2hhc2htYXBfZ2V0KGRhdGEucHJvZmlsZXMsIHByb2ZpbGUpKQorKyAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoJmRhdGEsIHByb2ZpbGUpOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcGFfbG9nKCJObyBzdWNoIHByb2ZpbGU6ICVzIiwgcHJvZmlsZSk7CisrICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZkYXRhKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrICAgIH0KKyAKKyAgICAgdS0+Y2FyZCA9IHBhX2NhcmRfbmV3KG0tPmNvcmUsICZkYXRhKTsKKyAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZkYXRhKTsKK2RpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCitpbmRleCA5YTkyMWE1Li5hMmRlNTI1IDEwMDY0NAorLS0tIGEvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKKysrKyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCitAQCAtMjMwMSw4ICsyMzAxLDExIEBAIHN0YXRpYyBpbnQgYWRkX2NhcmQoc3RydWN0IHVzZXJkYXRhICp1KSB7CisgICAgIGlmICgoZGVmYXVsdF9wcm9maWxlID0gcGFfbW9kYXJnc19nZXRfdmFsdWUodS0+bW9kYXJncywgInByb2ZpbGUiLCBOVUxMKSkpIHsKKyAgICAgICAgIGlmIChwYV9oYXNobWFwX2dldChkYXRhLnByb2ZpbGVzLCBkZWZhdWx0X3Byb2ZpbGUpKQorICAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoJmRhdGEsIGRlZmF1bHRfcHJvZmlsZSk7CistICAgICAgICBlbHNlCistICAgICAgICAgICAgcGFfbG9nX3dhcm4oIlByb2ZpbGUgJyVzJyBub3QgdmFsaWQgb3Igbm90IHN1cHBvcnRlZCBieSBkZXZpY2UuIiwgZGVmYXVsdF9wcm9maWxlKTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHBhX2xvZygiUHJvZmlsZSAnJXMnIG5vdCB2YWxpZCBvciBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZS4iLCBkZWZhdWx0X3Byb2ZpbGUpOworKyAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfZG9uZSgmZGF0YSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorICAgICB9CisgCisgICAgIHUtPmNhcmQgPSBwYV9jYXJkX25ldyh1LT5jb3JlLCAmZGF0YSk7CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jYXJkLWFkZC1wYV9jYXJkX3Byb2ZpbGUucG9ydHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2FyZC1hZGQtcGFfY2FyZF9wcm9maWxlLnBvcnRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGM5NTE5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jYXJkLWFkZC1wYV9jYXJkX3Byb2ZpbGUucG9ydHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotRnJvbSBkMWMwMjk3MTg2N2JlYTEwYWZjYWZjODJjOTY1NDE0MDEyYzRkNmJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotRGF0ZTogRnJpLCAyMyBPY3QgMjAxNSAxMjoyMzoxMyArMDMwMAotU3ViamVjdDogW1BBVENIIDEvNF0gY2FyZDogYWRkIHBhX2NhcmRfcHJvZmlsZS5wb3J0cwotCi1IYXZpbmcgcG9ydHMgYWNjZXNzaWJsZSBmcm9tIHBhX2NhcmRfcHJvZmlsZSBhbGxvd3MgY2hlY2tpbmcgd2hldGhlciBhbGwgcG9ydHMKLW9mIGEgcHJvZmlsZSBhcmUgdW5hdmFpbGFibGUsIGFuZCB0aGVyZWZvcmUgaGVscHMgd2l0aCBtYW5hZ2luZyB0aGUgcHJvZmlsZQotYXZhaWxhYmlsaXR5IChpbXBsZW1lbnRlZCBpbiBhIGxhdGVyIHBhdGNoKS4KLQotaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NDgKLQotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLQotUmViYXNlZCBvbiA4LjAuCi0KLVVwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtUaGUgcGF0Y2ggc2V0IG5lZWRzIHNvbWUgd29yayB0byBiZSBhY2NlcHRlZC4KLVRoZSByZXZpZXcgdGhyZWFkOgotaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5wdWxzZWF1ZGlvLmdlbmVyYWwvMjQzMDFdCi0KLVNpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KLS0tLQotIHNyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jICAgICAgICAgICAgICAgIHwgIDQgKysrLQotIHNyYy9tb2R1bGVzL2Fsc2EvYWxzYS11Y20uYyAgICAgICAgICAgICAgICAgIHwgIDEgKwotIHNyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jIHwgIDYgKysrKysrCi0gc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejUtZGV2aWNlLmMgfCAgNiArKysrKysKLSBzcmMvcHVsc2Vjb3JlL2NhcmQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1ICsrKysrKysrKysrKysrKwotIHNyYy9wdWxzZWNvcmUvY2FyZC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrKwotIHNyYy9wdWxzZWNvcmUvZGV2aWNlLXBvcnQuYyAgICAgICAgICAgICAgICAgIHwgIDcgKysrKysrLQotIDcgZmlsZXMgY2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jIGIvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMKLWluZGV4IDFmZTJhMDIuLjViNzZiMDYgMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYwotKysrIGIvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMKLUBAIC00NzgzLDggKzQ3ODMsMTAgQEAgc3RhdGljIHBhX2RldmljZV9wb3J0KiBkZXZpY2VfcG9ydF9hbHNhX2luaXQocGFfaGFzaG1hcCAqcG9ydHMsIC8qIGNhcmQgcG9ydHMgKi8KLSAgICAgICAgIHBhdGgtPnBvcnQgPSBwOwotICAgICB9Ci0gCi0tICAgIGlmIChjcCkKLSsgICAgaWYgKGNwKSB7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChwLT5wcm9maWxlcywgY3AtPm5hbWUsIGNwKTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChjcCwgcCk7Ci0rICAgIH0KLSAKLSAgICAgaWYgKGV4dHJhKSB7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChleHRyYSwgcC0+bmFtZSwgcCk7Ci1kaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLXVjbS5jIGIvc3JjL21vZHVsZXMvYWxzYS9hbHNhLXVjbS5jCi1pbmRleCA0MmYzMjQyLi42OGZjYzI2IDEwMDY0NAotLS0tIGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLXVjbS5jCi0rKysgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtdWNtLmMKLUBAIC03OTEsNiArNzkxLDcgQEAgc3RhdGljIHZvaWQgdWNtX2FkZF9wb3J0X2NvbWJpbmF0aW9uKAotICAgICBpZiAoY3ApIHsKLSAgICAgICAgIHBhX2xvZ19kZWJ1ZygiQWRkaW5nIHByb2ZpbGUgJXMgdG8gcG9ydCAlcy4iLCBjcC0+bmFtZSwgcG9ydC0+bmFtZSk7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChwb3J0LT5wcm9maWxlcywgY3AtPm5hbWUsIGNwKTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChjcCwgcG9ydCk7Ci0gICAgIH0KLSAKLSAgICAgaWYgKGhhc2gpIHsKLWRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCi1pbmRleCA5YTkyMWE1Li5hZGVjYjMyIDEwMDY0NAotLS0tIGEvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKLSsrKyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCi1AQCAtMjE4MCw2ICsyMTgwLDcgQEAgc3RhdGljIHBhX2NhcmRfcHJvZmlsZSAqY3JlYXRlX2NhcmRfcHJvZmlsZShzdHJ1Y3QgdXNlcmRhdGEgKnUsIGNvbnN0IGNoYXIgKnV1aWQKLSAgICAgICAgIHAtPm1heF9zaW5rX2NoYW5uZWxzID0gMjsKLSAgICAgICAgIHAtPm1heF9zb3VyY2VfY2hhbm5lbHMgPSAwOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQob3V0cHV0X3BvcnQtPnByb2ZpbGVzLCBwLT5uYW1lLCBwKTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChwLCBvdXRwdXRfcG9ydCk7Ci0gCi0gICAgICAgICBkID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEocCk7Ci0gICAgICAgICAqZCA9IFBBX0JMVUVaNF9QUk9GSUxFX0EyRFA7Ci1AQCAtMjE5MSw2ICsyMTkyLDcgQEAgc3RhdGljIHBhX2NhcmRfcHJvZmlsZSAqY3JlYXRlX2NhcmRfcHJvZmlsZShzdHJ1Y3QgdXNlcmRhdGEgKnUsIGNvbnN0IGNoYXIgKnV1aWQKLSAgICAgICAgIHAtPm1heF9zaW5rX2NoYW5uZWxzID0gMDsKLSAgICAgICAgIHAtPm1heF9zb3VyY2VfY2hhbm5lbHMgPSAyOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQoaW5wdXRfcG9ydC0+cHJvZmlsZXMsIHAtPm5hbWUsIHApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KHAsIGlucHV0X3BvcnQpOwotIAotICAgICAgICAgZCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKHApOwotICAgICAgICAgKmQgPSBQQV9CTFVFWjRfUFJPRklMRV9BMkRQX1NPVVJDRTsKLUBAIC0yMjAzLDYgKzIyMDUsOCBAQCBzdGF0aWMgcGFfY2FyZF9wcm9maWxlICpjcmVhdGVfY2FyZF9wcm9maWxlKHN0cnVjdCB1c2VyZGF0YSAqdSwgY29uc3QgY2hhciAqdXVpZAotICAgICAgICAgcC0+bWF4X3NvdXJjZV9jaGFubmVscyA9IDE7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChpbnB1dF9wb3J0LT5wcm9maWxlcywgcC0+bmFtZSwgcCk7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChvdXRwdXRfcG9ydC0+cHJvZmlsZXMsIHAtPm5hbWUsIHApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KHAsIGlucHV0X3BvcnQpOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KHAsIG91dHB1dF9wb3J0KTsKLSAKLSAgICAgICAgIGQgPSBQQV9DQVJEX1BST0ZJTEVfREFUQShwKTsKLSAgICAgICAgICpkID0gUEFfQkxVRVo0X1BST0ZJTEVfSFNQOwotQEAgLTIyMTUsNiArMjIxOSw4IEBAIHN0YXRpYyBwYV9jYXJkX3Byb2ZpbGUgKmNyZWF0ZV9jYXJkX3Byb2ZpbGUoc3RydWN0IHVzZXJkYXRhICp1LCBjb25zdCBjaGFyICp1dWlkCi0gICAgICAgICBwLT5tYXhfc291cmNlX2NoYW5uZWxzID0gMTsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KGlucHV0X3BvcnQtPnByb2ZpbGVzLCBwLT5uYW1lLCBwKTsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KG91dHB1dF9wb3J0LT5wcm9maWxlcywgcC0+bmFtZSwgcCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQocCwgaW5wdXRfcG9ydCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQocCwgb3V0cHV0X3BvcnQpOwotIAotICAgICAgICAgZCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKHApOwotICAgICAgICAgKmQgPSBQQV9CTFVFWjRfUFJPRklMRV9IRkdXOwotZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejUtZGV2aWNlLmMKLWluZGV4IDg0ZTZkNTUuLmIwMTVjNjcgMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NS1kZXZpY2UuYwotKysrIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejUtZGV2aWNlLmMKLUBAIC0xNzkwLDYgKzE3OTAsNyBAQCBzdGF0aWMgcGFfY2FyZF9wcm9maWxlICpjcmVhdGVfY2FyZF9wcm9maWxlKHN0cnVjdCB1c2VyZGF0YSAqdSwgY29uc3QgY2hhciAqdXVpZAotICAgICAgICAgY3AtPm1heF9zaW5rX2NoYW5uZWxzID0gMjsKLSAgICAgICAgIGNwLT5tYXhfc291cmNlX2NoYW5uZWxzID0gMDsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KG91dHB1dF9wb3J0LT5wcm9maWxlcywgY3AtPm5hbWUsIGNwKTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChjcCwgb3V0cHV0X3BvcnQpOwotIAotICAgICAgICAgcCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKGNwKTsKLSAgICAgICAgICpwID0gUEFfQkxVRVRPT1RIX1BST0ZJTEVfQTJEUF9TSU5LOwotQEAgLTE4MDEsNiArMTgwMiw3IEBAIHN0YXRpYyBwYV9jYXJkX3Byb2ZpbGUgKmNyZWF0ZV9jYXJkX3Byb2ZpbGUoc3RydWN0IHVzZXJkYXRhICp1LCBjb25zdCBjaGFyICp1dWlkCi0gICAgICAgICBjcC0+bWF4X3NpbmtfY2hhbm5lbHMgPSAwOwotICAgICAgICAgY3AtPm1heF9zb3VyY2VfY2hhbm5lbHMgPSAyOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQoaW5wdXRfcG9ydC0+cHJvZmlsZXMsIGNwLT5uYW1lLCBjcCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQoY3AsIGlucHV0X3BvcnQpOwotIAotICAgICAgICAgcCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKGNwKTsKLSAgICAgICAgICpwID0gUEFfQkxVRVRPT1RIX1BST0ZJTEVfQTJEUF9TT1VSQ0U7Ci1AQCAtMTgxMyw2ICsxODE1LDggQEAgc3RhdGljIHBhX2NhcmRfcHJvZmlsZSAqY3JlYXRlX2NhcmRfcHJvZmlsZShzdHJ1Y3QgdXNlcmRhdGEgKnUsIGNvbnN0IGNoYXIgKnV1aWQKLSAgICAgICAgIGNwLT5tYXhfc291cmNlX2NoYW5uZWxzID0gMTsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KGlucHV0X3BvcnQtPnByb2ZpbGVzLCBjcC0+bmFtZSwgY3ApOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQob3V0cHV0X3BvcnQtPnByb2ZpbGVzLCBjcC0+bmFtZSwgY3ApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KGNwLCBpbnB1dF9wb3J0KTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChjcCwgb3V0cHV0X3BvcnQpOwotIAotICAgICAgICAgcCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKGNwKTsKLSAgICAgICAgICpwID0gUEFfQkxVRVRPT1RIX1BST0ZJTEVfSEVBRFNFVF9IRUFEX1VOSVQ7Ci1AQCAtMTgyNSw2ICsxODI5LDggQEAgc3RhdGljIHBhX2NhcmRfcHJvZmlsZSAqY3JlYXRlX2NhcmRfcHJvZmlsZShzdHJ1Y3QgdXNlcmRhdGEgKnUsIGNvbnN0IGNoYXIgKnV1aWQKLSAgICAgICAgIGNwLT5tYXhfc291cmNlX2NoYW5uZWxzID0gMTsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KGlucHV0X3BvcnQtPnByb2ZpbGVzLCBjcC0+bmFtZSwgY3ApOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQob3V0cHV0X3BvcnQtPnByb2ZpbGVzLCBjcC0+bmFtZSwgY3ApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KGNwLCBpbnB1dF9wb3J0KTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChjcCwgb3V0cHV0X3BvcnQpOwotIAotICAgICAgICAgcCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKGNwKTsKLSAgICAgICAgICpwID0gUEFfQkxVRVRPT1RIX1BST0ZJTEVfSEVBRFNFVF9BVURJT19HQVRFV0FZOwotZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY2FyZC5jIGIvc3JjL3B1bHNlY29yZS9jYXJkLmMKLWluZGV4IGI2Y2JiZjcuLmY5MmFjODcgMTAwNjQ0Ci0tLS0gYS9zcmMvcHVsc2Vjb3JlL2NhcmQuYwotKysrIGIvc3JjL3B1bHNlY29yZS9jYXJkLmMKLUBAIC00NSw2ICs0NSw3IEBAIHBhX2NhcmRfcHJvZmlsZSAqcGFfY2FyZF9wcm9maWxlX25ldyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKLSAgICAgYy0+bmFtZSA9IHBhX3hzdHJkdXAobmFtZSk7Ci0gICAgIGMtPmRlc2NyaXB0aW9uID0gcGFfeHN0cmR1cChkZXNjcmlwdGlvbik7Ci0gICAgIGMtPmF2YWlsYWJsZSA9IFBBX0FWQUlMQUJMRV9VTktOT1dOOwotKyAgICBjLT5wb3J0cyA9IHBhX2hhc2htYXBfbmV3KHBhX2lkeHNldF9zdHJpbmdfaGFzaF9mdW5jLCBwYV9pZHhzZXRfc3RyaW5nX2NvbXBhcmVfZnVuYyk7Ci0gCi0gICAgIHJldHVybiBjOwotIH0KLUBAIC01Miw2ICs1MywxNCBAQCBwYV9jYXJkX3Byb2ZpbGUgKnBhX2NhcmRfcHJvZmlsZV9uZXcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCi0gdm9pZCBwYV9jYXJkX3Byb2ZpbGVfZnJlZShwYV9jYXJkX3Byb2ZpbGUgKmMpIHsKLSAgICAgcGFfYXNzZXJ0KGMpOwotIAotKyAgICBpZiAoYy0+cG9ydHMpIHsKLSsgICAgICAgIHBhX2RldmljZV9wb3J0ICpwb3J0OwotKyAgICAgICAgdm9pZCAqc3RhdGU7Ci0rICAgICAgICBQQV9IQVNITUFQX0ZPUkVBQ0gocG9ydCwgYy0+cG9ydHMsIHN0YXRlKQotKyAgICAgICAgICAgIHBhX2hhc2htYXBfcmVtb3ZlIChwb3J0LT5wcm9maWxlcywgYy0+bmFtZSk7Ci0rICAgICAgICBwYV9oYXNobWFwX2ZyZWUoYy0+cG9ydHMpOwotKyAgICB9Ci0rCi0gICAgIHBhX3hmcmVlKGMtPmlucHV0X25hbWUpOwotICAgICBwYV94ZnJlZShjLT5vdXRwdXRfbmFtZSk7Ci0gICAgIHBhX3hmcmVlKGMtPm5hbWUpOwotQEAgLTU5LDYgKzY4LDEyIEBAIHZvaWQgcGFfY2FyZF9wcm9maWxlX2ZyZWUocGFfY2FyZF9wcm9maWxlICpjKSB7Ci0gICAgIHBhX3hmcmVlKGMpOwotIH0KLSAKLSt2b2lkIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGUsIHBhX2RldmljZV9wb3J0ICpwb3J0KSB7Ci0rICAgIHBhX2Fzc2VydChwcm9maWxlKTsKLSsKLSsgICAgcGFfaGFzaG1hcF9wdXQocHJvZmlsZS0+cG9ydHMsIHBvcnQtPm5hbWUsIHBvcnQpOwotK30KLSsKLSB2b2lkIHBhX2NhcmRfcHJvZmlsZV9zZXRfYXZhaWxhYmxlKHBhX2NhcmRfcHJvZmlsZSAqYywgcGFfYXZhaWxhYmxlX3QgYXZhaWxhYmxlKSB7Ci0gICAgIHBhX2NvcmUgKmNvcmU7Ci0gCi1kaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jYXJkLmggYi9zcmMvcHVsc2Vjb3JlL2NhcmQuaAotaW5kZXggMzBiZmMwZS4uZmZmOTA1NyAxMDA2NDQKLS0tLSBhL3NyYy9wdWxzZWNvcmUvY2FyZC5oCi0rKysgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuaAotQEAgLTUwLDYgKzUwLDggQEAgc3RydWN0IHBhX2NhcmRfcHJvZmlsZSB7Ci0gICAgIHVuc2lnbmVkIHByaW9yaXR5OwotICAgICBwYV9hdmFpbGFibGVfdCBhdmFpbGFibGU7IC8qIFBBX0FWQUlMQUJMRV9VTktOT1dOLCBQQV9BVkFJTEFCTEVfTk8gb3IgUEFfQVZBSUxBQkxFX1lFUyAqLwotIAotKyAgICBwYV9oYXNobWFwICpwb3J0czsgLyogcG9ydCBuYW1lIC0+IHBhX2RldmljZV9wb3J0ICovCi0rCi0gICAgIC8qIFdlIHByb2JhYmx5IHdhbnQgdG8gaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcyBsYXRlciBvbiBoZXJlICovCi0gICAgIHVuc2lnbmVkIG5fc2lua3M7Ci0gICAgIHVuc2lnbmVkIG5fc291cmNlczsKLUBAIC0xMDcsNiArMTA5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgcGFfY2FyZF9uZXdfZGF0YSB7Ci0gcGFfY2FyZF9wcm9maWxlICpwYV9jYXJkX3Byb2ZpbGVfbmV3KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBzaXplX3QgZXh0cmEpOwotIHZvaWQgcGFfY2FyZF9wcm9maWxlX2ZyZWUocGFfY2FyZF9wcm9maWxlICpjKTsKLSAKLSt2b2lkIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGUsIHBhX2RldmljZV9wb3J0ICpwb3J0KTsKLSsKLSAvKiBUaGUgcHJvZmlsZSdzIGF2YWlsYWJsZSBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KLSB2b2lkIHBhX2NhcmRfcHJvZmlsZV9zZXRfYXZhaWxhYmxlKHBhX2NhcmRfcHJvZmlsZSAqYywgcGFfYXZhaWxhYmxlX3QgYXZhaWxhYmxlKTsKLSAKLWRpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2RldmljZS1wb3J0LmMgYi9zcmMvcHVsc2Vjb3JlL2RldmljZS1wb3J0LmMKLWluZGV4IDU4MDdkM2UuLmQxMmRmYmMgMTAwNjQ0Ci0tLS0gYS9zcmMvcHVsc2Vjb3JlL2RldmljZS1wb3J0LmMKLSsrKyBiL3NyYy9wdWxzZWNvcmUvZGV2aWNlLXBvcnQuYwotQEAgLTEwNyw4ICsxMDcsMTMgQEAgc3RhdGljIHZvaWQgZGV2aWNlX3BvcnRfZnJlZShwYV9vYmplY3QgKm8pIHsKLSAgICAgaWYgKHAtPnByb3BsaXN0KQotICAgICAgICAgcGFfcHJvcGxpc3RfZnJlZShwLT5wcm9wbGlzdCk7Ci0gCi0tICAgIGlmIChwLT5wcm9maWxlcykKLSsgICAgaWYgKHAtPnByb2ZpbGVzKSB7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGU7Ci0rICAgICAgICB2b2lkICpzdGF0ZTsKLSsgICAgICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwcm9maWxlLCBwLT5wcm9maWxlcywgc3RhdGUpCi0rICAgICAgICAgICAgcGFfaGFzaG1hcF9yZW1vdmUgKHByb2ZpbGUtPnBvcnRzLCBwLT5uYW1lKTsKLSAgICAgICAgIHBhX2hhc2htYXBfZnJlZShwLT5wcm9maWxlcyk7Ci0rICAgIH0KLSAKLSAgICAgcGFfeGZyZWUocC0+cHJlZmVycmVkX3Byb2ZpbGUpOwotICAgICBwYV94ZnJlZShwLT5uYW1lKTsKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNsaWVudC1jb25mLUFkZC1hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaAppbmRleCBiYzMyNzc1Li4zM2Y3NzA5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gMWNiNTY0N2Y3NmRjOGNkN2JhY2JjZTJhNjRmYWM5ZTZjMmRjM2IxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gYmFiZWMzYTUwZGQ3MTBkMjZiNzJmNmM2ZDQzYmQ3OWIwNGU5NTRhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgogRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAxNDozMjo0MyArMDMwMAogU3ViamVjdDogW1BBVENIXSBjbGllbnQtY29uZjogQWRkIGFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdApAQCAtMjQsMTAgKzI0LDEwIEBACiAgNSBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4gYi9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4KLWluZGV4IDEwMDJkYmUuLjAwNTg0OTAgMTAwNjQ0CitpbmRleCBiODg4OThjLi5lNzM3Yzk2IDEwMDY0NAogLS0tIGEvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCiArKysgYi9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4KLUBAIC03MSw2ICs3MSwxNSBAQCBMaWNlbnNlIGFsb25nIHdpdGggUHVsc2VBdWRpbzsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorQEAgLTgyLDYgKzgyLDE1IEBAIExpY2Vuc2UgYWxvbmcgd2l0aCBQdWxzZUF1ZGlvOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgICAgIDwvb3B0aW9uPgogIAogICAgICA8b3B0aW9uPgpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgIHJ1biB3aGVuIGF1dG9zcGF3bmluZy4gRGVmYXVsdHMgdG8gYSBwYXRoIGNvbmZpZ3VyZWQgYXQgY29tcGlsZQogICAgICAgIHRpbWUuPC9wPgogZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKLWluZGV4IDgzMzMxZjguLjA0NzQ1ODMgMTAwNjQ0CitpbmRleCBhM2M5NDg2Li45ZjY4ZWU1IDEwMDY0NAogLS0tIGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKICsrKyBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCiBAQCAtMTM4LDYgKzEzOCw3IEBAIHZvaWQgcGFfY2xpZW50X2NvbmZfbG9hZChwYV9jbGllbnRfY29uZiAqYywgYm9vbCBsb2FkX2Zyb21feDExLCBib29sIGxvYWRfZnJvbV9lCkBAIC01NiwxMyArNTYsMTMgQEAKICAgICAgICAgIHsgImRpc2FibGUtc2htIiwgICAgICAgICAgICBwYV9jb25maWdfcGFyc2VfYm9vbCwgICAgICZjLT5kaXNhYmxlX3NobSwgTlVMTCB9LAogICAgICAgICAgeyAiZW5hYmxlLXNobSIsICAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9ub3RfYm9vbCwgJmMtPmRpc2FibGVfc2htLCBOVUxMIH0sCiBkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmggYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAotaW5kZXggZWFjNzA1YS4uMTMxMzkzYSAxMDA2NDQKK2luZGV4IDc2OTFlYzcuLjE5ZGI3ZWQgMTAwNjQ0CiAtLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAogKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKIEBAIC0zOCw2ICszOCw3IEBAIHR5cGVkZWYgc3RydWN0IHBhX2NsaWVudF9jb25mIHsKICAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9hcHBsaWNhdGlvbjsKICAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9jbGllbnRfY29uZjsKLSAgICAgYm9vbCBhdXRvc3Bhd24sIGRpc2FibGVfc2htLCBhdXRvX2Nvbm5lY3RfbG9jYWxob3N0LCBhdXRvX2Nvbm5lY3RfZGlzcGxheTsKKyAgICAgYm9vbCBhdXRvc3Bhd24sIGRpc2FibGVfc2htLCBkaXNhYmxlX21lbWZkLCBhdXRvX2Nvbm5lY3RfbG9jYWxob3N0LCBhdXRvX2Nvbm5lY3RfZGlzcGxheTsKICsgICAgYm9vbCBhbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3Q7CiAgICAgIHNpemVfdCBzaG1fc2l6ZTsKICB9IHBhX2NsaWVudF9jb25mOwpAQCAtODAsMTAgKzgwLDEwIEBACiAgOyBleHRyYS1hcmd1bWVudHMgPSAtLWxvZy10YXJnZXQ9c3lzbG9nCiAgCiBkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NvbnRleHQuYyBiL3NyYy9wdWxzZS9jb250ZXh0LmMKLWluZGV4IDRiYzQ0NWYuLmQ2YzNmNmQgMTAwNjQ0CitpbmRleCA2OWJlNWY0Li5kNmUxM2U4IDEwMDY0NAogLS0tIGEvc3JjL3B1bHNlL2NvbnRleHQuYwogKysrIGIvc3JjL3B1bHNlL2NvbnRleHQuYwotQEAgLTk3Niw3ICs5NzYsNyBAQCBpbnQgcGFfY29udGV4dF9jb25uZWN0KAorQEAgLTEwMjcsNyArMTAyNyw3IEBAIGludCBwYV9jb250ZXh0X2Nvbm5lY3QoCiAgICAgIGlmICghKGZsYWdzICYgUEFfQ09OVEVYVF9OT0FVVE9TUEFXTikgJiYgYy0+Y29uZi0+YXV0b3NwYXduKSB7CiAgCiAgI2lmZGVmIEhBVkVfR0VUVUlECkBAIC05Myw1ICs5Myw1IEBACiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBjLT5kb19hdXRvc3Bhd24gPSB0cnVlOwogLS0gCi0xLjkuMworMi44LjEKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAyLWFsc2EtYmx1ZXRvb3RoLWZhaWwtaWYtdXNlci1yZXF1ZXN0ZWQtcHJvZmlsZS1kb2Vzbi0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDItYWxzYS1ibHVldG9vdGgtZmFpbC1pZi11c2VyLXJlcXVlc3RlZC1wcm9maWxlLWRvZXNuLS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUzNjU1Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDItYWxzYS1ibHVldG9vdGgtZmFpbC1pZi11c2VyLXJlcXVlc3RlZC1wcm9maWxlLWRvZXNuLS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLUZyb20gMzM5ZWIxNzliYWE3ODEwMTEzZjY0NTZhY2NjMDViM2EzMmMxY2RiYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KLURhdGU6IEZyaSwgMjMgT2N0IDIwMTUgMTI6MzY6MzQgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzRdIGFsc2EsIGJsdWV0b290aDogZmFpbCBpZiB1c2VyLXJlcXVlc3RlZCBwcm9maWxlIGRvZXNuJ3QKLSBleGlzdAotCi1JZiB3ZSBjYW4ndCBmdWxmaWxsIHRoZSB1c2VyIHJlcXVlc3QgZnVsbHksIEkgdGhpbmsgd2Ugc2hvdWxkbid0Ci1mdWxmaWxsIGl0IGF0IGFsbCwgdG8gbWFrZSBpdCBjbGVhciB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uCi1kaWRuJ3Qgc3VjY2VlZC4KLQotaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NDgKLQotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW1RoZSBwYXRjaCBzZXQgbmVlZHMgc29tZSB3b3JrIHRvIGJlIGFjY2VwdGVkLgotVGhlIHJldmlldyB0aHJlYWQ6Ci1odHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yNDMwMV0KLQotU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotLS0tCi0gc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMgICAgICAgICAgfCAxMCArKysrKysrKy0tCi0gc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMgfCAgNiArKysrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYyBiL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCi1pbmRleCBhN2ZlYzA0Li4zMmY1MTdlIDEwMDY0NAotLS0tIGEvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKLSsrKyBiL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCi1AQCAtNzU0LDggKzc1NCwxNCBAQCBpbnQgcGFfX2luaXQocGFfbW9kdWxlICptKSB7Ci0gICAgICAgICBnb3RvIGZhaWw7Ci0gICAgIH0KLSAKLS0gICAgaWYgKChwcm9maWxlID0gcGFfbW9kYXJnc19nZXRfdmFsdWUodS0+bW9kYXJncywgInByb2ZpbGUiLCBOVUxMKSkpCi0tICAgICAgICBwYV9jYXJkX25ld19kYXRhX3NldF9wcm9maWxlKCZkYXRhLCBwcm9maWxlKTsKLSsgICAgaWYgKChwcm9maWxlID0gcGFfbW9kYXJnc19nZXRfdmFsdWUodS0+bW9kYXJncywgInByb2ZpbGUiLCBOVUxMKSkpIHsKLSsgICAgICAgIGlmIChwYV9oYXNobWFwX2dldChkYXRhLnByb2ZpbGVzLCBwcm9maWxlKSkKLSsgICAgICAgICAgICBwYV9jYXJkX25ld19kYXRhX3NldF9wcm9maWxlKCZkYXRhLCBwcm9maWxlKTsKLSsgICAgICAgIGVsc2UgewotKyAgICAgICAgICAgIHBhX2xvZygiTm8gc3VjaCBwcm9maWxlOiAlcyIsIHByb2ZpbGUpOwotKyAgICAgICAgICAgIGdvdG8gZmFpbDsKLSsgICAgICAgIH0KLSsgICAgfQotIAotICAgICB1LT5jYXJkID0gcGFfY2FyZF9uZXcobS0+Y29yZSwgJmRhdGEpOwotICAgICBwYV9jYXJkX25ld19kYXRhX2RvbmUoJmRhdGEpOwotZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKLWluZGV4IGI0MGM2YTAuLjk0ZTY5ODggMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYwotKysrIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKLUBAIC0yMzEwLDggKzIzMTAsMTAgQEAgc3RhdGljIGludCBhZGRfY2FyZChzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKLSAgICAgaWYgKChkZWZhdWx0X3Byb2ZpbGUgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpKSkgewotICAgICAgICAgaWYgKHBhX2hhc2htYXBfZ2V0KGRhdGEucHJvZmlsZXMsIGRlZmF1bHRfcHJvZmlsZSkpCi0gICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZSgmZGF0YSwgZGVmYXVsdF9wcm9maWxlKTsKLS0gICAgICAgIGVsc2UKLS0gICAgICAgICAgICBwYV9sb2dfd2FybigiUHJvZmlsZSAnJXMnIG5vdCB2YWxpZCBvciBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZS4iLCBkZWZhdWx0X3Byb2ZpbGUpOwotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgcGFfbG9nKCJQcm9maWxlICclcycgbm90IHZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlLiIsIGRlZmF1bHRfcHJvZmlsZSk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotICAgICB9Ci0gCi0gICAgIHUtPmNhcmQgPSBwYV9jYXJkX25ldyh1LT5jb3JlLCAmZGF0YSk7Ci0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMi1jYXJkLWRvbi10LWFsbG93LXRoZS1DQVJEX05FVy1ob29rLXRvLWZhaWwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDItY2FyZC1kb24tdC1hbGxvdy10aGUtQ0FSRF9ORVctaG9vay10by1mYWlsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYzI5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDItY2FyZC1kb24tdC1hbGxvdy10aGUtQ0FSRF9ORVctaG9vay10by1mYWlsLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gZDRlNmQwN2ZlZjI4ZDFiZDhiZmJjZWFiNGNjMTk2ZWY1NGMyM2RkOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KK0RhdGU6IFR1ZSwgNyBKdW4gMjAxNiAxNjo1MTowMCArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gY2FyZDogZG9uJ3QgYWxsb3cgdGhlIENBUkRfTkVXIGhvb2sgdG8gZmFpbAorCitUaGVyZSBpcyBjdXJyZW50bHkgbm8gdXNlIGZvciBhbGxvd2luZyBtb2R1bGVzIHRvIGNhbmNlbCBjYXJkIGNyZWF0aW9uLAorYW5kIEkgZG9uJ3Qgc2VlIG5lZWQgZm9yIHRoYXQgaW4gdGhlIGZ1dHVyZSBlaXRoZXIuIExldCdzIHNpbXBsaWZ5Cit0aGluZ3MgYnkgcmVtb3ZpbmcgdGhlIGZhaWx1cmUgaGFuZGxpbmcgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbZXhwZWN0ZWQgaW4gMTAuMF0KKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgorLS0tCisgc3JjL3B1bHNlY29yZS9jYXJkLmMgfCA3ICstLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NhcmQuYyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5jCitpbmRleCA0MTA3NDZiLi4wYWM3MGI5IDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9jYXJkLmMKKysrKyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5jCitAQCAtMTQ5LDEyICsxNDksNyBAQCBwYV9jYXJkICpwYV9jYXJkX25ldyhwYV9jb3JlICpjb3JlLCBwYV9jYXJkX25ld19kYXRhICpkYXRhKSB7CisgICAgIH0KKyAKKyAgICAgcGFfY2FyZF9uZXdfZGF0YV9zZXRfbmFtZShkYXRhLCBuYW1lKTsKKy0KKy0gICAgaWYgKHBhX2hvb2tfZmlyZSgmY29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfTkVXXSwgZGF0YSkgPCAwKSB7CistICAgICAgICBwYV94ZnJlZShjKTsKKy0gICAgICAgIHBhX25hbWVyZWdfdW5yZWdpc3Rlcihjb3JlLCBuYW1lKTsKKy0gICAgICAgIHJldHVybiBOVUxMOworLSAgICB9CisrICAgIHBhX2hvb2tfZmlyZSgmY29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfTkVXXSwgZGF0YSk7CisgCisgICAgIGMtPmNvcmUgPSBjb3JlOworICAgICBjLT5uYW1lID0gcGFfeHN0cmR1cChkYXRhLT5uYW1lKTsKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAzLWNhcmQtbW92ZS1wcm9maWxlLXNlbGVjdGlvbi1hZnRlci1wYV9jYXJkX25ldy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMy1jYXJkLW1vdmUtcHJvZmlsZS1zZWxlY3Rpb24tYWZ0ZXItcGFfY2FyZF9uZXcucGF0Y2gKaW5kZXggMGU3NzgwMS4uZTBmNDI0YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAzLWNhcmQtbW92ZS1wcm9maWxlLXNlbGVjdGlvbi1hZnRlci1wYV9jYXJkX25ldy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDMtY2FyZC1tb3ZlLXByb2ZpbGUtc2VsZWN0aW9uLWFmdGVyLXBhX2NhcmRfbmV3LnBhdGNoCkBAIC0xLDYxICsxLDYyIEBACi1Gcm9tIDEzZTg1ZGQxNzYzZTk5ZDIxYTYwMzIzNjcxYjlhNWRmMDhiZGFlNzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDBiOTgzMDlmZGJjZDM2ZmE5MmFiNTNlMzNjNTFiNDg1YjkwNWUyOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+CiBEYXRlOiBGcmksIDIzIE9jdCAyMDE1IDEyOjU5OjUzICswMzAwCi1TdWJqZWN0OiBbUEFUQ0ggMy80XSBjYXJkOiBtb3ZlIHByb2ZpbGUgc2VsZWN0aW9uIGFmdGVyIHBhX2NhcmRfbmV3KCkKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIGNhcmQ6IG1vdmUgcHJvZmlsZSBzZWxlY3Rpb24gYWZ0ZXIgcGFfY2FyZF9uZXcoKQogCiBJIHdhbnQgbW9kdWxlLWFsc2EtY2FyZCB0byBzZXQgdGhlIGF2YWlsYWJpbGl0eSBvZiB1bmF2YWlsYWJsZQogcHJvZmlsZXMgYmVmb3JlIHRoZSBpbml0aWFsIGNhcmQgcHJvZmlsZSBnZXRzIHNlbGVjdGVkLCBzbyB0aGF0IHRoZQogc2VsZWN0aW9uIGxvZ2ljIGNhbiB1c2UgY29ycmVjdCBhdmFpbGFiaWxpdHkgaW5mb3JtYXRpb24uCiBtb2R1bGUtYWxzYS1jYXJkIGluaXRpYWxpemVzIHRoZSBqYWNrIHN0YXRlIGFmdGVyIGNhbGxpbmcKIHBhX2NhcmRfbmV3KCksIGhvd2V2ZXIsIGFuZCB0aGUgcHJvZmlsZSBzZWxlY3Rpb24gaGFwcGVucyBpbgotcGFfY2FyZF9uZXcoKS4gVGhpcyBwYXRjaCBzb2x2ZXMgdGhhdCBieSBpbnRyb2R1Y2luZyBwYV9jYXJkX3B1dCgpIGFuZAotbW92aW5nIHRoZSBwcm9maWxlIHNlbGVjdGlvbiBjb2RlIHRoZXJlLgorcGFfY2FyZF9uZXcoKS4gVGhpcyBwYXRjaCBzb2x2ZXMgdGhhdCBieSBtb3ZpbmcgcGFydHMgb2YgcGFfY2FyZF9uZXcoKQordG8gcGFfY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlKCkgYW5kIHBhX2NhcmRfcHV0KCkuCisKK3BhX2NhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZSgpIGFwcGxpZXMgdGhlIHByb2ZpbGUgc2VsZWN0aW9uIHBvbGljeSwKK3NvIG1vZHVsZS1hbHNhLWNhcmQgY2FuIGZpcnN0IGNhbGwgcGFfY2FyZF9uZXcoKSwgdGhlbiBpbml0aWFsaXplIHRoZQoramFjayBzdGF0ZSwgYW5kIHRoZW4gY2FsbCBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUoKS4gQWZ0ZXIgdGhhdAorbW9kdWxlLWFsc2EtY2FyZCBjYW4gc3RpbGwgb3ZlcnJpZGUgdGhlIHByb2ZpbGUgc2VsZWN0aW9uIHBvbGljeSwgaW4KK2Nhc2UgbW9kdWxlLWFsc2EtY2FyZCB3YXMgbG9hZGVkIHdpdGggdGhlICJwcm9maWxlIiBhcmd1bWVudC4gRmluYWxseSwKK3BhX2NhcmRfcHV0KCkgZmluYWxpemVzIHRoZSBjYXJkIGNyZWF0aW9uLgogCiBBbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gbW92ZSB0aGUgamFjawogaW5pdGlhbGl6YXRpb24gdG8gaGFwcGVuIGJlZm9yZSBwYV9jYXJkX25ldygpIGFuZCB1c2UgcGFfY2FyZF9uZXdfZGF0YQogaW5zdGVhZCBvZiBwYV9jYXJkIGluIHRoZSBqYWNrIGluaXRpYWxpemF0aW9uIGNvZGUsIGJ1dCBJIGRpc2xpa2VkCiB0aGF0IGlkZWEgKEkgd2FudCB0byBnZXQgcmlkIG9mIHRoZSAibmV3IGRhdGEiIHBhdHRlcm4gZXZlbnR1YWxseSkuCiAKLVRoZSBDQVJEX05FVyBob29rIGlzIHVzZWQgd2hlbiBhcHBseWluZyB0aGUgaW5pdGlhbCBwcm9maWxlIHBvbGljeSwgc28KLXRoYXQgd2FzIG1vdmVkIHRvIHBhX2NhcmRfcHV0KCkuIFRoYXQgcmVxdWlyZWQgY2hhbmdpbmcgdGhlIGhvb2sgZGF0YQotZnJvbSBwYV9jYXJkX25ld19kYXRhIHRvIHBhX2NhcmQuIG1vZHVsZS1jYXJkLXJlc3RvcmUgbm93IHVzZXMKLXBhX2NhcmRfc2V0X3Byb2ZpbGUoKSBpbnN0ZWFkIG9mIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoKS4gVGhhdAotcmVxdWlyZWQgYWRkaW5nIGEgc3RhdGUgdmFyaWFibGUgdG8gcGFfY2FyZCwgYmVjYXVzZQotcGFfY2FyZF9zZXRfcHJvZmlsZSgpIG5lZWRzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gc2V0dGluZyB0aGUgaW5pdGlhbAotcHJvZmlsZSBhbmQgc2V0dGluZyB0aGUgcHJvZmlsZSBpbiBvdGhlciBzaXR1YXRpb25zLgotCiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGluaXRpYWwgcHJvZmlsZSBwb2xpY3kgaXMgYXBwbGllZCBpcyByZXZlcnNlZAogaW4gdGhpcyBwYXRjaC4gUHJldmlvdXNseSB0aGUgZmlyc3Qgb25lIHRvIHNldCBpdCB3b24sIG5vdyB0aGUgbGFzdAogb25lIHRvIHNldCBpdCB3aW5zLiBJIHRoaW5rIHRoaXMgaXMgYmV0dGVyLCBiZWNhdXNlIGlmIHlvdSBoYXZlIE4KIHBhcnRpZXMgdGhhdCB3YW50IHRvIHNldCB0aGUgcHJvZmlsZSwgd2UgYXZvaWQgY2hlY2tpbmcgTiB0aW1lcwogd2hldGhlciBzb21lb25lIGVsc2UgaGFzIGFscmVhZHkgc2V0IHRoZSBwcm9maWxlLgogCi1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ0OAotCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotCi1SZWJhc2VkIG9uIDguMC4KLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW1RoZSBwYXRjaCBzZXQgbmVlZHMgc29tZSB3b3JrIHRvIGJlIGFjY2VwdGVkLgotVGhlIHJldmlldyB0aHJlYWQ6Ci1odHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yNDMwMV0KK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW2V4cGVjdGVkIGluIDEwLjBdCiAKIFNpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KIC0tLQotIHNyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jICAgICAgICAgIHwgMTkgKysrLS0tLQotIHNyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jIHwgMTggKysrLS0tLQotIHNyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jIHwgIDEgKwotIHNyYy9tb2R1bGVzL21hY29zeC9tb2R1bGUtY29yZWF1ZGlvLWRldmljZS5jIHwgIDEgKwotIHNyYy9tb2R1bGVzL21vZHVsZS1jYXJkLXJlc3RvcmUuYyAgICAgICAgICAgIHwgMjQgKysrKystLS0tCi0gc3JjL3B1bHNlY29yZS9jYXJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCA4MSArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCi0gc3JjL3B1bHNlY29yZS9jYXJkLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgNyArKysKLSA3IGZpbGVzIGNoYW5nZWQsIDg2IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQorIHNyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jICAgICAgICAgIHwgMzIgKysrKystLS0tCisgc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMgfCAzMSArKysrKy0tLS0KKyBzcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NS1kZXZpY2UuYyB8ICAyICsKKyBzcmMvbW9kdWxlcy9tYWNvc3gvbW9kdWxlLWNvcmVhdWRpby1kZXZpY2UuYyB8ICAyICsKKyBzcmMvbW9kdWxlcy9tb2R1bGUtY2FyZC1yZXN0b3JlLmMgICAgICAgICAgICB8IDM2ICsrKysrKystLS0KKyBzcmMvcHVsc2Vjb3JlL2NhcmQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDk5ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyBzcmMvcHVsc2Vjb3JlL2NhcmQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKworIHNyYy9wdWxzZWNvcmUvY29yZS5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIDggZmlsZXMgY2hhbmdlZCwgMTQzIGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMgYi9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYwotaW5kZXggOWU4Y2RlMi4uZmUyNDBmMCAxMDA2NDQKK2luZGV4IGQ3NjE2ODMuLjE5NzYyMzAgMTAwNjQ0CiAtLS0gYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYwogKysrIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKLUBAIC03NzAsMTUgKzc3MCw2IEBAIGludCBwYV9faW5pdChwYV9tb2R1bGUgKm0pIHsKK0BAIC02NzEsNyArNjcxLDcgQEAgaW50IHBhX19pbml0KHBhX21vZHVsZSAqbSkgeworICAgICBzdHJ1Y3QgdXNlcmRhdGEgKnU7CisgICAgIHBhX3Jlc2VydmVfd3JhcHBlciAqcmVzZXJ2ZSA9IE5VTEw7CisgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOworLSAgICBjb25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKKysgICAgY29uc3QgY2hhciAqcHJvZmlsZV9zdHIgPSBOVUxMOworICAgICBjaGFyICpmbiA9IE5VTEw7CisgICAgIGJvb2wgbmFtZXJlZ19mYWlsID0gZmFsc2U7CisgCitAQCAtNzk5LDE2ICs3OTksNiBAQCBpbnQgcGFfX2luaXQocGFfbW9kdWxlICptKSB7CiAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgIH0KICAKQEAgLTY0LDYgKzY1LDcgQEAKIC0gICAgICAgICAgICBwYV9jYXJkX25ld19kYXRhX3NldF9wcm9maWxlKCZkYXRhLCBwcm9maWxlKTsKIC0gICAgICAgIGVsc2UgewogLSAgICAgICAgICAgIHBhX2xvZygiTm8gc3VjaCBwcm9maWxlOiAlcyIsIHByb2ZpbGUpOworLSAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfZG9uZSgmZGF0YSk7CiAtICAgICAgICAgICAgZ290byBmYWlsOwogLSAgICAgICAgfQogLSAgICB9CkBAIC03MSwyOCArNzMsNDcgQEAKICAgICAgdS0+Y2FyZCA9IHBhX2NhcmRfbmV3KG0tPmNvcmUsICZkYXRhKTsKICAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZkYXRhKTsKICAKLUBAIC03ODksNiArNzgwLDE2IEBAIGludCBwYV9faW5pdChwYV9tb2R1bGUgKm0pIHsKLSAgICAgdS0+Y2FyZC0+c2V0X3Byb2ZpbGUgPSBjYXJkX3NldF9wcm9maWxlOworQEAgLTgyMiw2ICs4MTIsMjYgQEAgaW50IHBhX19pbml0KHBhX21vZHVsZSAqbSkgeworICAgICAgICAgICAgIChwYV9ob29rX2NiX3QpIGNhcmRfc3VzcGVuZF9jaGFuZ2VkLCB1KTsKICAKICAgICAgaW5pdF9qYWNrcyh1KTsKLSsgICAgcGFfY2FyZF9wdXQodS0+Y2FyZCk7CiArCi0rICAgIGlmICgocHJvZmlsZSA9IHBhX21vZGFyZ3NfZ2V0X3ZhbHVlKHUtPm1vZGFyZ3MsICJwcm9maWxlIiwgTlVMTCkpKSB7Ci0rICAgICAgICB1LT5jYXJkLT5hY3RpdmVfcHJvZmlsZSA9IHBhX2hhc2htYXBfZ2V0KHUtPmNhcmQtPnByb2ZpbGVzLCBwcm9maWxlKTsKLSsgICAgICAgIGlmICghdS0+Y2FyZC0+YWN0aXZlX3Byb2ZpbGUpIHsKLSsgICAgICAgICAgICBwYV9sb2coIk5vIHN1Y2ggcHJvZmlsZTogJXMiLCBwcm9maWxlKTsKKysgICAgcGFfY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlKHUtPmNhcmQpOworKworKyAgICAvKiBJZiB0aGUgInByb2ZpbGUiIG1vZGFyZyBpcyBnaXZlbiwgd2UgaGF2ZSB0byBvdmVycmlkZSB3aGF0ZXZlciB0aGUgdXN1YWwKKysgICAgICogcG9saWN5IGNob3NlIGluIHBhX2NhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZSgpLiAqLworKyAgICBwcm9maWxlX3N0ciA9IHBhX21vZGFyZ3NfZ2V0X3ZhbHVlKHUtPm1vZGFyZ3MsICJwcm9maWxlIiwgTlVMTCk7CisrICAgIGlmIChwcm9maWxlX3N0cikgeworKyAgICAgICAgcGFfY2FyZF9wcm9maWxlICpwcm9maWxlOworKworKyAgICAgICAgcHJvZmlsZSA9IHBhX2hhc2htYXBfZ2V0KHUtPmNhcmQtPnByb2ZpbGVzLCBwcm9maWxlX3N0cik7CisrICAgICAgICBpZiAoIXByb2ZpbGUpIHsKKysgICAgICAgICAgICBwYV9sb2coIk5vIHN1Y2ggcHJvZmlsZTogJXMiLCBwcm9maWxlX3N0cik7CiArICAgICAgICAgICAgZ290byBmYWlsOwogKyAgICAgICAgfQorKworKyAgICAgICAgcGFfY2FyZF9zZXRfcHJvZmlsZSh1LT5jYXJkLCBwcm9maWxlLCBmYWxzZSk7CiArICAgIH0KICsKKysgICAgcGFfY2FyZF9wdXQodS0+Y2FyZCk7CisrCiAgICAgIGluaXRfcHJvZmlsZSh1KTsKICAgICAgaW5pdF9lbGRfY3Rscyh1KTsKICAKIGRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCi1pbmRleCBkZDE4MjE3Li41ZDBkM2RiIDEwMDY0NAoraW5kZXggYTJkZTUyNS4uMTNmYjdhYiAxMDA2NDQKIC0tLSBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCiArKysgYi9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYwotQEAgLTIzMDQsMTUgKzIzMDQsNiBAQCBzdGF0aWMgaW50IGFkZF9jYXJkKHN0cnVjdCB1c2VyZGF0YSAqdSkgeworQEAgLTIyMzgsNyArMjIzOCw3IEBAIHN0YXRpYyBpbnQgYWRkX2NhcmQoc3RydWN0IHVzZXJkYXRhICp1KSB7CisgICAgIHBhX2JsdWV6NF9wcm9maWxlX3QgKmQ7CisgICAgIHBhX2JsdWV6NF9mb3JtX2ZhY3Rvcl90IGZmOworICAgICBjaGFyICpuOworLSAgICBjb25zdCBjaGFyICpkZWZhdWx0X3Byb2ZpbGU7CisrICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVfc3RyOworICAgICBjb25zdCBwYV9ibHVlejRfZGV2aWNlICpkZXZpY2U7CisgICAgIGNvbnN0IHBhX2JsdWV6NF91dWlkICp1dWlkOworIAorQEAgLTIyOTgsMTYgKzIyOTgsNiBAQCBzdGF0aWMgaW50IGFkZF9jYXJkKHN0cnVjdCB1c2VyZGF0YSAqdSkgewogICAgICAqZCA9IFBBX0JMVUVaNF9QUk9GSUxFX09GRjsKICAgICAgcGFfaGFzaG1hcF9wdXQoZGF0YS5wcm9maWxlcywgcC0+bmFtZSwgcCk7CiAgCkBAIC0xMDEsNiArMTIyLDcgQEAKIC0gICAgICAgICAgICBwYV9jYXJkX25ld19kYXRhX3NldF9wcm9maWxlKCZkYXRhLCBkZWZhdWx0X3Byb2ZpbGUpOwogLSAgICAgICAgZWxzZSB7CiAtICAgICAgICAgICAgcGFfbG9nKCJQcm9maWxlICclcycgbm90IHZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlLiIsIGRlZmF1bHRfcHJvZmlsZSk7CistICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZkYXRhKTsKIC0gICAgICAgICAgICByZXR1cm4gLTE7CiAtICAgICAgICB9CiAtICAgIH0KQEAgLTEwOCwxMjcgKzEzMCwxMjYgQEAKICAgICAgdS0+Y2FyZCA9IHBhX2NhcmRfbmV3KHUtPmNvcmUsICZkYXRhKTsKICAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZkYXRhKTsKICAKLUBAIC0yMzIzLDYgKzIzMTQsMTUgQEAgc3RhdGljIGludCBhZGRfY2FyZChzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKLSAKK0BAIC0yMzE5LDYgKzIzMDksMjUgQEAgc3RhdGljIGludCBhZGRfY2FyZChzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKICAgICAgdS0+Y2FyZC0+dXNlcmRhdGEgPSB1OwogICAgICB1LT5jYXJkLT5zZXRfcHJvZmlsZSA9IGNhcmRfc2V0X3Byb2ZpbGU7Ci0rICAgIHBhX2NhcmRfcHV0KHUtPmNhcmQpOworIAorKyAgICBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUodS0+Y2FyZCk7CiArCi0rICAgIGlmICgoZGVmYXVsdF9wcm9maWxlID0gcGFfbW9kYXJnc19nZXRfdmFsdWUodS0+bW9kYXJncywgInByb2ZpbGUiLCBOVUxMKSkpIHsKLSsgICAgICAgIHUtPmNhcmQtPmFjdGl2ZV9wcm9maWxlID0gcGFfaGFzaG1hcF9nZXQodS0+Y2FyZC0+cHJvZmlsZXMsIGRlZmF1bHRfcHJvZmlsZSk7Ci0rICAgICAgICBpZiAoIXUtPmNhcmQtPmFjdGl2ZV9wcm9maWxlKSB7Ci0rICAgICAgICAgICAgcGFfbG9nKCJQcm9maWxlICclcycgbm90IHZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlLiIsIGRlZmF1bHRfcHJvZmlsZSk7CisrICAgIC8qIElmIHRoZSAicHJvZmlsZSIgbW9kYXJnIGlzIGdpdmVuLCB3ZSBoYXZlIHRvIG92ZXJyaWRlIHdoYXRldmVyIHRoZSB1c3VhbAorKyAgICAgKiBwb2xpY3kgY2hvc2UgaW4gcGFfY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlKCkuICovCisrICAgIHByb2ZpbGVfc3RyID0gcGFfbW9kYXJnc19nZXRfdmFsdWUodS0+bW9kYXJncywgInByb2ZpbGUiLCBOVUxMKTsKKysgICAgaWYgKHByb2ZpbGVfc3RyKSB7CisrICAgICAgICBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGU7CisrCisrICAgICAgICBwcm9maWxlID0gcGFfaGFzaG1hcF9nZXQodS0+Y2FyZC0+cHJvZmlsZXMsIHByb2ZpbGVfc3RyKTsKKysgICAgICAgIGlmICghcHJvZmlsZSkgeworKyAgICAgICAgICAgIHBhX2xvZygiTm8gc3VjaCBwcm9maWxlOiAlcyIsIHByb2ZpbGVfc3RyKTsKICsgICAgICAgICAgICByZXR1cm4gLTE7CiArICAgICAgICB9CisrCisrICAgICAgICBwYV9jYXJkX3NldF9wcm9maWxlKHUtPmNhcmQsIHByb2ZpbGUsIGZhbHNlKTsKICsgICAgfQotIAorKworKyAgICBwYV9jYXJkX3B1dCh1LT5jYXJkKTsKKysKICAgICAgZCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKHUtPmNhcmQtPmFjdGl2ZV9wcm9maWxlKTsKICAKKyAgICAgaWYgKCpkICE9IFBBX0JMVUVaNF9QUk9GSUxFX09GRiAmJiAoIWRldmljZS0+dHJhbnNwb3J0c1sqZF0gfHwKIGRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NS1kZXZpY2UuYyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jCi1pbmRleCBiMDE1YzY3Li43YjkwYTMxIDEwMDY0NAoraW5kZXggODRlNmQ1NS4uNDk4ZDBlMSAxMDA2NDQKIC0tLSBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jCiArKysgYi9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NS1kZXZpY2UuYwotQEAgLTE5NTksNiArMTk1OSw3IEBAIHN0YXRpYyBpbnQgYWRkX2NhcmQoc3RydWN0IHVzZXJkYXRhICp1KSB7CitAQCAtMTk1Myw2ICsxOTUzLDggQEAgc3RhdGljIGludCBhZGRfY2FyZChzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKICAKICAgICAgdS0+Y2FyZC0+dXNlcmRhdGEgPSB1OwogICAgICB1LT5jYXJkLT5zZXRfcHJvZmlsZSA9IHNldF9wcm9maWxlX2NiOworKyAgICBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUodS0+Y2FyZCk7CiArICAgIHBhX2NhcmRfcHV0KHUtPmNhcmQpOwogIAogICAgICBwID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEodS0+Y2FyZC0+YWN0aXZlX3Byb2ZpbGUpOwogICAgICB1LT5wcm9maWxlID0gKnA7CiBkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvbWFjb3N4L21vZHVsZS1jb3JlYXVkaW8tZGV2aWNlLmMgYi9zcmMvbW9kdWxlcy9tYWNvc3gvbW9kdWxlLWNvcmVhdWRpby1kZXZpY2UuYwotaW5kZXggMGM5MmQ0Mi4uNzE5MGVlOSAxMDA2NDQKK2luZGV4IDZjOWU1NWQuLmQ5MWM2NTYgMTAwNjQ0CiAtLS0gYS9zcmMvbW9kdWxlcy9tYWNvc3gvbW9kdWxlLWNvcmVhdWRpby1kZXZpY2UuYwogKysrIGIvc3JjL21vZHVsZXMvbWFjb3N4L21vZHVsZS1jb3JlYXVkaW8tZGV2aWNlLmMKLUBAIC04MDcsNiArODA3LDcgQEAgaW50IHBhX19pbml0KHBhX21vZHVsZSAqbSkgeworQEAgLTgyMSw2ICs4MjEsOCBAQCBpbnQgcGFfX2luaXQocGFfbW9kdWxlICptKSB7CiAgICAgIHBhX2NhcmRfbmV3X2RhdGFfZG9uZSgmY2FyZF9uZXdfZGF0YSk7CiAgICAgIHUtPmNhcmQtPnVzZXJkYXRhID0gdTsKICAgICAgdS0+Y2FyZC0+c2V0X3Byb2ZpbGUgPSBjYXJkX3NldF9wcm9maWxlOworKyAgICBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUodS0+Y2FyZCk7CiArICAgIHBhX2NhcmRfcHV0KHUtPmNhcmQpOwogIAogICAgICB1LT5ydHBvbGwgPSBwYV9ydHBvbGxfbmV3KCk7CiAgICAgIHBhX3RocmVhZF9tcV9pbml0KCZ1LT50aHJlYWRfbXEsIG0tPmNvcmUtPm1haW5sb29wLCB1LT5ydHBvbGwpOwogZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL21vZHVsZS1jYXJkLXJlc3RvcmUuYyBiL3NyYy9tb2R1bGVzL21vZHVsZS1jYXJkLXJlc3RvcmUuYwotaW5kZXggZjkwNjg0My4uZGNlNjY3NCAxMDA2NDQKK2luZGV4IDc1NDVhYTUuLjcxOGEwZGQgMTAwNjQ0CiAtLS0gYS9zcmMvbW9kdWxlcy9tb2R1bGUtY2FyZC1yZXN0b3JlLmMKICsrKyBiL3NyYy9tb2R1bGVzL21vZHVsZS1jYXJkLXJlc3RvcmUuYwotQEAgLTUxNSwzNCArNTE1LDM4IEBAIHN0YXRpYyBwYV9ob29rX3Jlc3VsdF90IHBvcnRfb2Zmc2V0X2NoYW5nZV9jYWxsYmFjayhwYV9jb3JlICpjLCBwYV9kZXZpY2VfcG9ydCAqCi0gICAgIHJldHVybiBQQV9IT09LX09LOwotIH0KLSAKLS1zdGF0aWMgcGFfaG9va19yZXN1bHRfdCBjYXJkX25ld19ob29rX2NhbGxiYWNrKHBhX2NvcmUgKmMsIHBhX2NhcmRfbmV3X2RhdGEgKm5ld19kYXRhLCBzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKLStzdGF0aWMgcGFfaG9va19yZXN1bHRfdCBjYXJkX25ld19ob29rX2NhbGxiYWNrKHBhX2NvcmUgKmMsIHBhX2NhcmQgKmNhcmQsIHN0cnVjdCB1c2VyZGF0YSAqdSkgewotICAgICBzdHJ1Y3QgZW50cnkgKmU7Ci0gICAgIHZvaWQgKnN0YXRlOwotICAgICBwYV9kZXZpY2VfcG9ydCAqcDsKLSAgICAgc3RydWN0IHBvcnRfaW5mbyAqcF9pbmZvOwotIAotLSAgICBwYV9hc3NlcnQobmV3X2RhdGEpOwotKyAgICBwYV9hc3NlcnQoYyk7Ci0rICAgIHBhX2Fzc2VydChjYXJkKTsKLSsgICAgcGFfYXNzZXJ0KHUpOwotIAotLSAgICBpZiAoIShlID0gZW50cnlfcmVhZCh1LCBuZXdfZGF0YS0+bmFtZSkpKQotKyAgICBpZiAoIShlID0gZW50cnlfcmVhZCh1LCBjYXJkLT5uYW1lKSkpCitAQCAtNTUxLDE2ICs1NTEsNiBAQCBzdGF0aWMgcGFfaG9va19yZXN1bHRfdCBjYXJkX25ld19ob29rX2NhbGxiYWNrKHBhX2NvcmUgKmMsIHBhX2NhcmRfbmV3X2RhdGEgKm5ldworICAgICBpZiAoIShlID0gZW50cnlfcmVhZCh1LCBuZXdfZGF0YS0+bmFtZSkpKQogICAgICAgICAgcmV0dXJuIFBBX0hPT0tfT0s7CiAgCi0gICAgIGlmIChlLT5wcm9maWxlWzBdKSB7CistICAgIGlmIChlLT5wcm9maWxlWzBdKSB7CiAtICAgICAgICBpZiAoIW5ld19kYXRhLT5hY3RpdmVfcHJvZmlsZSkgewogLSAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUobmV3X2RhdGEsIGUtPnByb2ZpbGUpOwogLSAgICAgICAgICAgIHBhX2xvZ19pbmZvKCJSZXN0b3JlZCBwcm9maWxlICclcycgZm9yIGNhcmQgJXMuIiwgbmV3X2RhdGEtPmFjdGl2ZV9wcm9maWxlLCBuZXdfZGF0YS0+bmFtZSk7CiAtICAgICAgICAgICAgbmV3X2RhdGEtPnNhdmVfcHJvZmlsZSA9IHRydWU7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGU7Ci0gCi0rICAgICAgICBwcm9maWxlID0gcGFfaGFzaG1hcF9nZXQoY2FyZC0+cHJvZmlsZXMsIGUtPnByb2ZpbGUpOwotKyAgICAgICAgaWYgKHByb2ZpbGUpIHsKLSsgICAgICAgICAgICBwYV9jYXJkX3NldF9wcm9maWxlKGNhcmQsIHByb2ZpbGUsIHRydWUpOwotKyAgICAgICAgICAgIHBhX2xvZ19pbmZvKCJSZXN0b3JlZCBwcm9maWxlICclcycgZm9yIGNhcmQgJXMuIiwgY2FyZC0+YWN0aXZlX3Byb2ZpbGUtPm5hbWUsIGNhcmQtPm5hbWUpOwotICAgICAgICAgfSBlbHNlCistCistICAgICAgICB9IGVsc2UKIC0gICAgICAgICAgICBwYV9sb2dfZGVidWcoIk5vdCByZXN0b3JpbmcgcHJvZmlsZSBmb3IgY2FyZCAlcywgYmVjYXVzZSBhbHJlYWR5IHNldC4iLCBuZXdfZGF0YS0+bmFtZSk7Ci0rICAgICAgICAgICAgcGFfbG9nX2RlYnVnKCJUcmllZCB0byByZXN0b3JlIHByb2ZpbGUgJXMgZm9yIGNhcmQgJXMsIGJ1dCB0aGUgY2FyZCBkb2Vzbid0IGhhdmUgc3VjaCBwcm9maWxlLiIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnByb2ZpbGUsIGNhcmQtPm5hbWUpOwotICAgICB9Ci0gCistICAgIH0KKy0KICAgICAgLyogQWx3YXlzIHJlc3RvcmUgdGhlIGxhdGVuY3kgb2Zmc2V0cyBiZWNhdXNlIHRoZWlyCiAgICAgICAqIGluaXRpYWwgdmFsdWUgaXMgYWx3YXlzIDAgKi8KICAKLS0gICAgcGFfbG9nX2luZm8oIlJlc3RvcmluZyBwb3J0IGxhdGVuY3kgb2Zmc2V0cyBmb3IgY2FyZCAlcy4iLCBuZXdfZGF0YS0+bmFtZSk7Ci0rICAgIHBhX2xvZ19pbmZvKCJSZXN0b3JpbmcgcG9ydCBsYXRlbmN5IG9mZnNldHMgZm9yIGNhcmQgJXMuIiwgY2FyZC0+bmFtZSk7CitAQCAtNTkwLDYgKzU4MCwzMCBAQCBzdGF0aWMgcGFfaG9va19yZXN1bHRfdCBjYXJkX25ld19ob29rX2NhbGxiYWNrKHBhX2NvcmUgKmMsIHBhX2NhcmRfbmV3X2RhdGEgKm5ldworICAgICByZXR1cm4gUEFfSE9PS19PSzsKKyB9CiAgCi0gICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwX2luZm8sIGUtPnBvcnRzLCBzdGF0ZSkKLS0gICAgICAgIGlmICgocCA9IHBhX2hhc2htYXBfZ2V0KG5ld19kYXRhLT5wb3J0cywgcF9pbmZvLT5uYW1lKSkpIHsKLSsgICAgICAgIGlmICgocCA9IHBhX2hhc2htYXBfZ2V0KGNhcmQtPnBvcnRzLCBwX2luZm8tPm5hbWUpKSkgewotICAgICAgICAgICAgIHAtPmxhdGVuY3lfb2Zmc2V0ID0gcF9pbmZvLT5vZmZzZXQ7Ci0gICAgICAgICAgICAgaWYgKCFwLT5wcmVmZXJyZWRfcHJvZmlsZSAmJiBwX2luZm8tPnByb2ZpbGUpCi0gICAgICAgICAgICAgICAgIHBhX2RldmljZV9wb3J0X3NldF9wcmVmZXJyZWRfcHJvZmlsZShwLCBwX2luZm8tPnByb2ZpbGUpOworK3N0YXRpYyBwYV9ob29rX3Jlc3VsdF90IGNhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZV9jYWxsYmFjayhwYV9jb3JlICpjb3JlLCBwYV9jYXJkICpjYXJkLCBzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKKysgICAgc3RydWN0IGVudHJ5ICplOworKworKyAgICBpZiAoIShlID0gZW50cnlfcmVhZCh1LCBjYXJkLT5uYW1lKSkpCisrICAgICAgICByZXR1cm4gUEFfSE9PS19PSzsKKysKKysgICAgaWYgKGUtPnByb2ZpbGVbMF0pIHsKKysgICAgICAgIHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZTsKKysKKysgICAgICAgIHByb2ZpbGUgPSBwYV9oYXNobWFwX2dldChjYXJkLT5wcm9maWxlcywgZS0+cHJvZmlsZSk7CisrICAgICAgICBpZiAocHJvZmlsZSkgeworKyAgICAgICAgICAgIHBhX2xvZ19pbmZvKCJSZXN0b3JpbmcgcHJvZmlsZSAnJXMnIGZvciBjYXJkICVzLiIsIGNhcmQtPmFjdGl2ZV9wcm9maWxlLT5uYW1lLCBjYXJkLT5uYW1lKTsKKysgICAgICAgICAgICBwYV9jYXJkX3NldF9wcm9maWxlKGNhcmQsIHByb2ZpbGUsIHRydWUpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwYV9sb2dfZGVidWcoIlRyaWVkIHRvIHJlc3RvcmUgcHJvZmlsZSAlcyBmb3IgY2FyZCAlcywgYnV0IHRoZSBjYXJkIGRvZXNuJ3QgaGF2ZSBzdWNoIHByb2ZpbGUuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZS0+cHJvZmlsZSwgY2FyZC0+bmFtZSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgZW50cnlfZnJlZShlKTsKKysKKysgICAgcmV0dXJuIFBBX0hPT0tfT0s7CisrfQorKworIHN0YXRpYyBwYV9ob29rX3Jlc3VsdF90IGNhcmRfcHJlZmVycmVkX3BvcnRfY2hhbmdlZF9jYWxsYmFjayhwYV9jb3JlICpjb3JlLCBwYV9jYXJkX3ByZWZlcnJlZF9wb3J0X2NoYW5nZWRfaG9va19kYXRhICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKKyAgICAgc3RydWN0IGVudHJ5ICplOworQEAgLTYzNCw2ICs2NDgsOCBAQCBpbnQgcGFfX2luaXQocGFfbW9kdWxlKm0pIHsKKyAgICAgdS0+bW9kdWxlID0gbTsKKyAKKyAgICAgcGFfbW9kdWxlX2hvb2tfY29ubmVjdChtLCAmbS0+Y29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfTkVXXSwgUEFfSE9PS19FQVJMWSwgKHBhX2hvb2tfY2JfdCkgY2FyZF9uZXdfaG9va19jYWxsYmFjaywgdSk7CisrICAgIHBhX21vZHVsZV9ob29rX2Nvbm5lY3QobSwgJm0tPmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX0NIT09TRV9JTklUSUFMX1BST0ZJTEVdLCBQQV9IT09LX05PUk1BTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFfaG9va19jYl90KSBjYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGVfY2FsbGJhY2ssIHUpOworICAgICBwYV9tb2R1bGVfaG9va19jb25uZWN0KG0sICZtLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9QVVRdLCBQQV9IT09LX05PUk1BTCwgKHBhX2hvb2tfY2JfdCkgY2FyZF9wdXRfaG9va19jYWxsYmFjaywgdSk7CisgICAgIHBhX21vZHVsZV9ob29rX2Nvbm5lY3QobSwgJm0tPmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX1BSRUZFUlJFRF9QT1JUX0NIQU5HRURdLCBQQV9IT09LX05PUk1BTCwgKHBhX2hvb2tfY2JfdCkgY2FyZF9wcmVmZXJyZWRfcG9ydF9jaGFuZ2VkX2NhbGxiYWNrLCB1KTsKKyAgICAgcGFfbW9kdWxlX2hvb2tfY29ubmVjdChtLCAmbS0+Y29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfUFJPRklMRV9DSEFOR0VEXSwgUEFfSE9PS19OT1JNQUwsIChwYV9ob29rX2NiX3QpIGNhcmRfcHJvZmlsZV9jaGFuZ2VkX2NhbGxiYWNrLCB1KTsKIGRpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NhcmQuYyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5jCi1pbmRleCBmOTJhYzg3Li4xYTZlNzA1IDEwMDY0NAoraW5kZXggMGFjNzBiOS4uYTBjM2Q5MyAxMDA2NDQKIC0tLSBhL3NyYy9wdWxzZWNvcmUvY2FyZC5jCiArKysgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuYwotQEAgLTE0OCw2ICsxNDgsNyBAQCBwYV9jYXJkICpwYV9jYXJkX25ldyhwYV9jb3JlICpjb3JlLCBwYV9jYXJkX25ld19kYXRhICpkYXRhKSB7Ci0gICAgIHBhX2Fzc2VydCghcGFfaGFzaG1hcF9pc2VtcHR5KGRhdGEtPnByb2ZpbGVzKSk7Ci0gCi0gICAgIGMgPSBwYV94bmV3MChwYV9jYXJkLCAxKTsKLSsgICAgYy0+c3RhdGUgPSBQQV9DQVJEX1NUQVRFX0lOSVQ7Ci0gCi0gICAgIGlmICghKG5hbWUgPSBwYV9uYW1lcmVnX3JlZ2lzdGVyKGNvcmUsIGRhdGEtPm5hbWUsIFBBX05BTUVSRUdfQ0FSRCwgYywgZGF0YS0+bmFtZXJlZ19mYWlsKSkpIHsKLSAgICAgICAgIHBhX3hmcmVlKGMpOwotQEAgLTE1NiwxMiArMTU3LDYgQEAgcGFfY2FyZCAqcGFfY2FyZF9uZXcocGFfY29yZSAqY29yZSwgcGFfY2FyZF9uZXdfZGF0YSAqZGF0YSkgewotIAotICAgICBwYV9jYXJkX25ld19kYXRhX3NldF9uYW1lKGRhdGEsIG5hbWUpOwotIAotLSAgICBpZiAocGFfaG9va19maXJlKCZjb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9ORVddLCBkYXRhKSA8IDApIHsKLS0gICAgICAgIHBhX3hmcmVlKGMpOwotLSAgICAgICAgcGFfbmFtZXJlZ191bnJlZ2lzdGVyKGNvcmUsIG5hbWUpOwotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgIH0KLS0KLSAgICAgYy0+Y29yZSA9IGNvcmU7Ci0gICAgIGMtPm5hbWUgPSBwYV94c3RyZHVwKGRhdGEtPm5hbWUpOwotICAgICBjLT5wcm9wbGlzdCA9IHBhX3Byb3BsaXN0X2NvcHkoZGF0YS0+cHJvcGxpc3QpOwotQEAgLTE4NCwzOCArMTc5LDQzIEBAIHBhX2NhcmQgKnBhX2NhcmRfbmV3KHBhX2NvcmUgKmNvcmUsIHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpIHsKLSAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHBvcnQsIGMtPnBvcnRzLCBzdGF0ZSkKLSAgICAgICAgIHBvcnQtPmNhcmQgPSBjOworQEAgLTE3NiwzOCArMTc2LDU2IEBAIHBhX2NhcmQgKnBhX2NhcmRfbmV3KHBhX2NvcmUgKmNvcmUsIHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpIHsKKyAgICAgYy0+cHJlZmVycmVkX2lucHV0X3BvcnQgPSBkYXRhLT5wcmVmZXJyZWRfaW5wdXRfcG9ydDsKKyAgICAgYy0+cHJlZmVycmVkX291dHB1dF9wb3J0ID0gZGF0YS0+cHJlZmVycmVkX291dHB1dF9wb3J0OwogIAogLSAgICBpZiAoZGF0YS0+YWN0aXZlX3Byb2ZpbGUpCiAtICAgICAgICBpZiAoKGMtPmFjdGl2ZV9wcm9maWxlID0gcGFfaGFzaG1hcF9nZXQoYy0+cHJvZmlsZXMsIGRhdGEtPmFjdGl2ZV9wcm9maWxlKSkpCkBAIC0yNTIsNTAgKzI3Myw4NSBAQAogLSAgICAgICAgICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwcm9maWxlLCBjLT5wcm9maWxlcywgc3RhdGUpCiAtICAgICAgICAgICAgICAgIGlmICghYy0+YWN0aXZlX3Byb2ZpbGUgfHwgcHJvZmlsZS0+cHJpb3JpdHkgPiBjLT5hY3RpdmVfcHJvZmlsZS0+cHJpb3JpdHkpCiAtICAgICAgICAgICAgICAgICAgICBjLT5hY3RpdmVfcHJvZmlsZSA9IHByb2ZpbGU7Ci0tICAgICAgICB9Ci0tICAgICAgICBwYV9hc3NlcnQoYy0+YWN0aXZlX3Byb2ZpbGUpOwotK3ZvaWQgcGFfY2FyZF9wdXQocGFfY2FyZCAqY2FyZCkgeworK3ZvaWQgcGFfY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlKHBhX2NhcmQgKmNhcmQpIHsKICsgICAgcGFfY2FyZF9wcm9maWxlICpwcm9maWxlOwogKyAgICB2b2lkICpzdGF0ZTsKKysgICAgcGFfY2FyZF9wcm9maWxlICpiZXN0ID0gTlVMTDsKICsKICsgICAgcGFfYXNzZXJ0KGNhcmQpOwogKworKyAgICAvKiBCeSBkZWZhdWx0LCBwaWNrIHRoZSBoaWdoZXN0IHByaW9yaXR5IHByb2ZpbGUgdGhhdCBpcyBub3QgdW5hdmFpbGFibGUsCisrICAgICAqIG9yIGlmIGFsbCBwcm9maWxlcyBhcmUgdW5hdmFpbGFibGUsIHBpY2sgdGhlIHByb2ZpbGUgd2l0aCB0aGUgaGlnaGVzdAorKyAgICAgKiBwcmlvcml0eSByZWdhcmRsZXNzIG9mIGl0cyBhdmFpbGFiaWxpdHkuICovCisrCiArICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwcm9maWxlLCBjYXJkLT5wcm9maWxlcywgc3RhdGUpIHsKICsgICAgICAgIGlmIChwcm9maWxlLT5hdmFpbGFibGUgPT0gUEFfQVZBSUxBQkxFX05PKQogKyAgICAgICAgICAgIGNvbnRpbnVlOwogKwotKyAgICAgICAgaWYgKCFjYXJkLT5hY3RpdmVfcHJvZmlsZSB8fCBwcm9maWxlLT5wcmlvcml0eSA+IGNhcmQtPmFjdGl2ZV9wcm9maWxlLT5wcmlvcml0eSkKLSsgICAgICAgICAgICBjYXJkLT5hY3RpdmVfcHJvZmlsZSA9IHByb2ZpbGU7CisrICAgICAgICBpZiAoIWJlc3QgfHwgcHJvZmlsZS0+cHJpb3JpdHkgPiBiZXN0LT5wcmlvcml0eSkKKysgICAgICAgICAgICBiZXN0ID0gcHJvZmlsZTsKKysgICAgfQorKworKyAgICBpZiAoIWJlc3QpIHsKKysgICAgICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwcm9maWxlLCBjYXJkLT5wcm9maWxlcywgc3RhdGUpIHsKKysgICAgICAgICAgICBpZiAoIWJlc3QgfHwgcHJvZmlsZS0+cHJpb3JpdHkgPiBiZXN0LT5wcmlvcml0eSkKKysgICAgICAgICAgICAgICAgYmVzdCA9IHByb2ZpbGU7CisgICAgICAgICB9CistICAgICAgICBwYV9hc3NlcnQoYy0+YWN0aXZlX3Byb2ZpbGUpOwogICAgICB9CisrICAgIHBhX2Fzc2VydChiZXN0KTsKICAKIC0gICAgcGFfZGV2aWNlX2luaXRfZGVzY3JpcHRpb24oYy0+cHJvcGxpc3QsIGMpOwogLSAgICBwYV9kZXZpY2VfaW5pdF9pY29uKGMtPnByb3BsaXN0LCB0cnVlKTsKIC0gICAgcGFfZGV2aWNlX2luaXRfaW50ZW5kZWRfcm9sZXMoYy0+cHJvcGxpc3QpOwotKyAgICAvKiBJZiBhbGwgcHJvZmlsZXMgYXJlIHVuYXZhaWxhYmxlLCB0aGVuIHdlIHN0aWxsIG5lZWQgdG8gcGljayBvbmUgKi8KLSsgICAgaWYgKCFjYXJkLT5hY3RpdmVfcHJvZmlsZSkgewotKyAgICAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHByb2ZpbGUsIGNhcmQtPnByb2ZpbGVzLCBzdGF0ZSkKLSsgICAgICAgICAgICBpZiAoIWNhcmQtPmFjdGl2ZV9wcm9maWxlIHx8IHByb2ZpbGUtPnByaW9yaXR5ID4gY2FyZC0+YWN0aXZlX3Byb2ZpbGUtPnByaW9yaXR5KQotKyAgICAgICAgICAgICAgICBjYXJkLT5hY3RpdmVfcHJvZmlsZSA9IHByb2ZpbGU7Ci0rICAgIH0KLSsgICAgcGFfYXNzZXJ0KGNhcmQtPmFjdGl2ZV9wcm9maWxlKTsKKysgICAgY2FyZC0+YWN0aXZlX3Byb2ZpbGUgPSBiZXN0OworKyAgICBjYXJkLT5zYXZlX3Byb2ZpbGUgPSBmYWxzZTsKICAKIC0gICAgcGFfYXNzZXJ0X3NlKHBhX2lkeHNldF9wdXQoY29yZS0+Y2FyZHMsIGMsICZjLT5pbmRleCkgPj0gMCk7Ci0rICAgIHBhX2hvb2tfZmlyZSgmY2FyZC0+Y29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfTkVXXSwgY2FyZCk7CisrICAgIC8qIExldCBwb2xpY3kgbW9kdWxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdC4gKi8KKysgICAgcGFfaG9va19maXJlKCZjYXJkLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9DSE9PU0VfSU5JVElBTF9QUk9GSUxFXSwgY2FyZCk7CisrfQogIAogLSAgICBwYV9sb2dfaW5mbygiQ3JlYXRlZCAldSBcIiVzXCIiLCBjLT5pbmRleCwgYy0+bmFtZSk7CiAtICAgIHBhX3N1YnNjcmlwdGlvbl9wb3N0KGNvcmUsIFBBX1NVQlNDUklQVElPTl9FVkVOVF9DQVJEfFBBX1NVQlNDUklQVElPTl9FVkVOVF9ORVcsIGMtPmluZGV4KTsKLSsgICAgcGFfYXNzZXJ0X3NlKHBhX2lkeHNldF9wdXQoY2FyZC0+Y29yZS0+Y2FyZHMsIGNhcmQsICZjYXJkLT5pbmRleCkgPj0gMCk7Ci0rICAgIGNhcmQtPnN0YXRlID0gUEFfQ0FSRF9TVEFURV9MSU5LRUQ7Cisrdm9pZCBwYV9jYXJkX3B1dChwYV9jYXJkICpjYXJkKSB7CisrICAgIHBhX2Fzc2VydChjYXJkKTsKICAKIC0gICAgcGFfaG9va19maXJlKCZjb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9QVVRdLCBjKTsKIC0gICAgcmV0dXJuIGM7CisrICAgIHBhX2Fzc2VydF9zZShwYV9pZHhzZXRfcHV0KGNhcmQtPmNvcmUtPmNhcmRzLCBjYXJkLCAmY2FyZC0+aW5kZXgpID49IDApOworKyAgICBjYXJkLT5saW5rZWQgPSB0cnVlOworKwogKyAgICBwYV9sb2dfaW5mbygiQ3JlYXRlZCAldSBcIiVzXCIiLCBjYXJkLT5pbmRleCwgY2FyZC0+bmFtZSk7CiArICAgIHBhX2hvb2tfZmlyZSgmY2FyZC0+Y29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfUFVUXSwgY2FyZCk7CiArICAgIHBhX3N1YnNjcmlwdGlvbl9wb3N0KGNhcmQtPmNvcmUsIFBBX1NVQlNDUklQVElPTl9FVkVOVF9DQVJEfFBBX1NVQlNDUklQVElPTl9FVkVOVF9ORVcsIGNhcmQtPmluZGV4KTsKICB9CiAgCiAgdm9pZCBwYV9jYXJkX2ZyZWUocGFfY2FyZCAqYykgewotQEAgLTMwNiwyMCArMzA2LDI3IEBAIGludCBwYV9jYXJkX3NldF9wcm9maWxlKHBhX2NhcmQgKmMsIHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZSwgYm9vbCBzYXZlKSB7CitAQCAtMjE4LDE1ICsyMzYsMTUgQEAgdm9pZCBwYV9jYXJkX2ZyZWUocGFfY2FyZCAqYykgeworIAorICAgICBjb3JlID0gYy0+Y29yZTsKKyAKKy0gICAgcGFfaG9va19maXJlKCZjb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9VTkxJTktdLCBjKTsKKy0KKy0gICAgcGFfbmFtZXJlZ191bnJlZ2lzdGVyKGNvcmUsIGMtPm5hbWUpOworLQorLSAgICBwYV9pZHhzZXRfcmVtb3ZlX2J5X2RhdGEoYy0+Y29yZS0+Y2FyZHMsIGMsIE5VTEwpOworKyAgICBpZiAoYy0+bGlua2VkKSB7CisrICAgICAgICBwYV9ob29rX2ZpcmUoJmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX1VOTElOS10sIGMpOworIAorLSAgICBwYV9sb2dfaW5mbygiRnJlZWQgJXUgXCIlc1wiIiwgYy0+aW5kZXgsIGMtPm5hbWUpOworKyAgICAgICAgcGFfaWR4c2V0X3JlbW92ZV9ieV9kYXRhKGMtPmNvcmUtPmNhcmRzLCBjLCBOVUxMKTsKKysgICAgICAgIHBhX2xvZ19pbmZvKCJGcmVlZCAldSBcIiVzXCIiLCBjLT5pbmRleCwgYy0+bmFtZSk7CisrICAgICAgICBwYV9zdWJzY3JpcHRpb25fcG9zdChjLT5jb3JlLCBQQV9TVUJTQ1JJUFRJT05fRVZFTlRfQ0FSRHxQQV9TVUJTQ1JJUFRJT05fRVZFTlRfUkVNT1ZFLCBjLT5pbmRleCk7CisrICAgIH0KKyAKKy0gICAgcGFfc3Vic2NyaXB0aW9uX3Bvc3QoYy0+Y29yZSwgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NBUkR8UEFfU1VCU0NSSVBUSU9OX0VWRU5UX1JFTU9WRSwgYy0+aW5kZXgpOworKyAgICBwYV9uYW1lcmVnX3VucmVnaXN0ZXIoY29yZSwgYy0+bmFtZSk7CisgCisgICAgIHBhX2Fzc2VydChwYV9pZHhzZXRfaXNlbXB0eShjLT5zaW5rcykpOworICAgICBwYV9pZHhzZXRfZnJlZShjLT5zaW5rcywgTlVMTCk7CitAQCAtMjk4LDIwICszMTYsMjcgQEAgaW50IHBhX2NhcmRfc2V0X3Byb2ZpbGUocGFfY2FyZCAqYywgcGFfY2FyZF9wcm9maWxlICpwcm9maWxlLCBib29sIHNhdmUpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICB9CiAgCkBAIC0zMDcsNyArMzYzLDcgQEAKICsgICAgICogYmUgcHJvYmFibHkgZ29vZCB0byBjaGFuZ2UgdGhpcyBzbyB0aGF0IGFsc28gdGhlIGluaXRpYWwgcHJvZmlsZSBjYW4gYmUKICsgICAgICogc2V0IHVwIGluIHNldF9wcm9maWxlKCksIGJ1dCBpZiBzZXRfcHJvZmlsZSgpIGZhaWxzLCB0aGF0IHdvdWxkIG5lZWQKICsgICAgICogc29tZSBiZXR0ZXIgaGFuZGxpbmcgdGhhbiB3aGF0IHdlIGRvIGhlcmUgY3VycmVudGx5LiAqLwotKyAgICBpZiAoYy0+c3RhdGUgIT0gUEFfQ0FSRF9TVEFURV9JTklUICYmIChyID0gYy0+c2V0X3Byb2ZpbGUoYywgcHJvZmlsZSkpIDwgMCkKKysgICAgaWYgKGMtPmxpbmtlZCAmJiAociA9IGMtPnNldF9wcm9maWxlKGMsIHByb2ZpbGUpKSA8IDApCiAgICAgICAgICByZXR1cm4gcjsKICAKIC0gICAgcGFfc3Vic2NyaXB0aW9uX3Bvc3QoYy0+Y29yZSwgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NBUkR8UEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NIQU5HRSwgYy0+aW5kZXgpOwpAQCAtMzIxLDcgKzM3Nyw3IEBACiAgICAgICAgICB1cGRhdGVfcG9ydF9wcmVmZXJyZWRfcHJvZmlsZShjKTsKICAKIC0gICAgcGFfaG9va19maXJlKCZjLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9QUk9GSUxFX0NIQU5HRURdLCBjKTsKLSsgICAgaWYgKGMtPnN0YXRlICE9IFBBX0NBUkRfU1RBVEVfSU5JVCkgeworKyAgICBpZiAoYy0+bGlua2VkKSB7CiArICAgICAgICBwYV9sb2dfaW5mbygiQ2hhbmdlZCBwcm9maWxlIG9mIGNhcmQgJXUgXCIlc1wiIHRvICVzIiwgYy0+aW5kZXgsIGMtPm5hbWUsIHByb2ZpbGUtPm5hbWUpOwogKyAgICAgICAgcGFfaG9va19maXJlKCZjLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9QUk9GSUxFX0NIQU5HRURdLCBjKTsKICsgICAgICAgIHBhX3N1YnNjcmlwdGlvbl9wb3N0KGMtPmNvcmUsIFBBX1NVQlNDUklQVElPTl9FVkVOVF9DQVJEfFBBX1NVQlNDUklQVElPTl9FVkVOVF9DSEFOR0UsIGMtPmluZGV4KTsKQEAgLTMzMCwzNyArMzg2LDQ0IEBACiAgICAgIHJldHVybiAwOwogIH0KIGRpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NhcmQuaCBiL3NyYy9wdWxzZWNvcmUvY2FyZC5oCi1pbmRleCBmZmY5MDU3Li5hOTQ0MzAxIDEwMDY0NAoraW5kZXggZDQ5NzBlMy4uZmQxZmUwYSAxMDA2NDQKIC0tLSBhL3NyYy9wdWxzZWNvcmUvY2FyZC5oCiArKysgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuaAotQEAgLTM0LDYgKzM0LDExIEBAIHR5cGVkZWYgZW51bSBwYV9hdmFpbGFibGUgewotICAgICBQQV9BVkFJTEFCTEVfWUVTID0gMiwKLSB9IHBhX2F2YWlsYWJsZV90OworQEAgLTg2LDYgKzg2LDggQEAgc3RydWN0IHBhX2NhcmQgewogIAotK3R5cGVkZWYgZW51bSBwYV9jYXJkX3N0YXRlIHsKLSsgICAgUEFfQ0FSRF9TVEFURV9JTklULAotKyAgICBQQV9DQVJEX1NUQVRFX0xJTktFRCwKLSt9IHBhX2NhcmRfc3RhdGVfdDsKKyAgICAgcGFfc3VzcGVuZF9jYXVzZV90IHN1c3BlbmRfY2F1c2U7CisgCisrICAgIGJvb2wgbGlua2VkOwogKwotIHN0cnVjdCBwYV9jYXJkX3Byb2ZpbGUgewotICAgICBwYV9jYXJkICpjYXJkOwotICAgICBjaGFyICpuYW1lOwotQEAgLTY2LDYgKzcxLDcgQEAgc3RydWN0IHBhX2NhcmRfcHJvZmlsZSB7CisgICAgIHZvaWQgKnVzZXJkYXRhOwogIAotIHN0cnVjdCBwYV9jYXJkIHsKLSAgICAgdWludDMyX3QgaW5kZXg7Ci0rICAgIHBhX2NhcmRfc3RhdGVfdCBzdGF0ZTsKLSAgICAgcGFfY29yZSAqY29yZTsKLSAKLSAgICAgY2hhciAqbmFtZTsKLUBAIC0xMjAsNiArMTI2LDcgQEAgdm9pZCBwYV9jYXJkX25ld19kYXRhX3NldF9wcm9maWxlKHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKnByb2ZpbGUpOworICAgICBpbnQgKCpzZXRfcHJvZmlsZSkocGFfY2FyZCAqYywgcGFfY2FyZF9wcm9maWxlICpwcm9maWxlKTsKK0BAIC0xMjgsNiArMTMwLDEzIEBAIHZvaWQgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJlZmVycmVkX3BvcnQocGFfY2FyZF9uZXdfZGF0YSAqZGF0YSwgcGFfZGlyZWN0aW9uX3QKICB2b2lkIHBhX2NhcmRfbmV3X2RhdGFfZG9uZShwYV9jYXJkX25ld19kYXRhICpkYXRhKTsKICAKICBwYV9jYXJkICpwYV9jYXJkX25ldyhwYV9jb3JlICpjLCBwYV9jYXJkX25ld19kYXRhICpkYXRhKTsKKysKKysvKiBTZWxlY3QgdGhlIGluaXRpYWwgY2FyZCBwcm9maWxlIGFjY29yZGluZyB0byB0aGUgY29uZmlndXJlZCBwb2xpY2llcy4gVGhpcworKyAqIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gcGFfY2FyZF9uZXcoKSBhbmQgcGFfY2FyZF9wdXQoKSwgYWZ0ZXIgdGhlIHBvcnQgYW5kCisrICogcHJvZmlsZSBhdmFpbGFibGl0aWVzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4gKi8KKyt2b2lkIHBhX2NhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZShwYV9jYXJkICpjYXJkKTsKKysKICt2b2lkIHBhX2NhcmRfcHV0KHBhX2NhcmQgKmMpOwogIHZvaWQgcGFfY2FyZF9mcmVlKHBhX2NhcmQgKmMpOwogIAogIHZvaWQgcGFfY2FyZF9hZGRfcHJvZmlsZShwYV9jYXJkICpjLCBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGUpOworZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY29yZS5oIGIvc3JjL3B1bHNlY29yZS9jb3JlLmgKK2luZGV4IDAwZDdmMmYuLjgwMjExMWIgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2Vjb3JlL2NvcmUuaAorKysrIGIvc3JjL3B1bHNlY29yZS9jb3JlLmgKK0BAIC0xMTgsNiArMTE4LDcgQEAgdHlwZWRlZiBlbnVtIHBhX2NvcmVfaG9vayB7CisgICAgIFBBX0NPUkVfSE9PS19DTElFTlRfUFJPUExJU1RfQ0hBTkdFRCwKKyAgICAgUEFfQ09SRV9IT09LX0NMSUVOVF9TRU5EX0VWRU5ULAorICAgICBQQV9DT1JFX0hPT0tfQ0FSRF9ORVcsCisrICAgIFBBX0NPUkVfSE9PS19DQVJEX0NIT09TRV9JTklUSUFMX1BST0ZJTEUsCisgICAgIFBBX0NPUkVfSE9PS19DQVJEX1BVVCwKKyAgICAgUEFfQ09SRV9IT09LX0NBUkRfVU5MSU5LLAorICAgICBQQV9DT1JFX0hPT0tfQ0FSRF9QUkVGRVJSRURfUE9SVF9DSEFOR0VELAogLS0gCi0yLjcuMAorMi44LjEKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDA0LWFsc2Etc2V0LWF2YWlsYWJpbGl0eS1mb3Itc29tZS11bmF2YWlsYWJsZS1wcm9maWxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwNC1hbHNhLXNldC1hdmFpbGFiaWxpdHktZm9yLXNvbWUtdW5hdmFpbGFibGUtcHJvZmlsZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZWZhNzAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDA0LWFsc2Etc2V0LWF2YWlsYWJpbGl0eS1mb3Itc29tZS11bmF2YWlsYWJsZS1wcm9maWxlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLUZyb20gNjkwZDU2N2UyOThmNjY4N2I2MWM4MjY2MGIwNTFkZjViMjU0ODJlZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KLURhdGU6IEZyaSwgMjMgT2N0IDIwMTUgMTM6Mzc6MTEgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSCA0LzRdIGFsc2E6IHNldCBhdmFpbGFiaWxpdHkgZm9yIChzb21lKSB1bmF2YWlsYWJsZSBwcm9maWxlcwotCi1UaGUgYWxzYSBjYXJkIGhhc24ndCBzbyBmYXIgc2V0IGFueSBhdmFpbGFiaWxpdHkgZm9yIHByb2ZpbGVzLiBUaGF0Ci1jYXVzZWQgYW4gaXNzdWUgd2l0aCBzb21lIEhETUkgaGFyZHdhcmU6IHRoZSBzb3VuZCBjYXJkIGhhcyB0d28gSERNSQotb3V0cHV0cywgYnV0IG9ubHkgdGhlIHNlY29uZCBvZiB0aGVtIGlzIGFjdHVhbGx5IHVzYWJsZS4gVGhlCi11bmF2YWlsYWJsZSBwb3J0IGlzIG1hcmtlZCBhcyB1bmF2YWlsYWJsZSBhbmQgdGhlIGF2YWlsYWJsZSBwb3J0IGlzCi1tYXJrZWQgYXMgYXZhaWxhYmxlLCBidXQgdGhpcyBpbmZvcm1hdGlvbiBpc24ndCBwcm9wYWdhdGVkIHRvIHRoZQotcHJvZmlsZSBhdmFpbGFiaWxpdHkuIFdpdGhvdXQgcHJvZmlsZSBhdmFpbGFiaWxpdHkgaW5mb3JtYXRpb24sIHRoZQotaW5pdGlhbCBwcm9maWxlIHBvbGljeSBwaWNrcyB0aGUgdW5hdmFpbGFibGUgb25lLCBzaW5jZSBpdCBoYXMgYQotaGlnaGVyIHByaW9yaXR5IHZhbHVlLgotCi1UaGlzIHBhdGNoIGFkZHMgc2ltcGxlIGxvZ2ljIGZvciBtYXJraW5nIHNvbWUgcHJvZmlsZXMgdW5hdmFpbGFibGU6Ci1pZiB0aGUgcHJvZmlsZSBvbmx5IGNvbnRhaW5zIHVuYXZhaWxhYmxlIHBvcnRzLCB0aGUgcHJvZmlsZSBpcwotdW5hdmFpbGFibGUgdG9vLiBUaGlzIGNhbiBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlIHNvIHRoYXQgaWYgYQotcHJvZmlsZSBjb250YWlucyBzaW5rcyBvciBzb3VyY2VzIHRoYXQgb25seSBjb250YWluIHVuYXZhaWxhYmxlIHBvcnRzLAotdGhlIHByb2ZpbGUgc2hvdWxkIGJlIG1hcmtlZCBhcyB1bmF2YWlsYWJsZS4gSW1wbGVtZW50aW5nIHRoYXQKLXJlcXVpcmVzIGFkZGluZyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaW5rcyBhbmQgc291cmNlcyB0bwotcGFfY2FyZF9wcm9maWxlLCBob3dldmVyLgotCi1CdWdMaW5rOiBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NDgKLQotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLQotUmViYXNlZCBvbiA4LjAuCi0KLVVwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtUaGUgcGF0Y2ggc2V0IG5lZWRzIHNvbWUgd29yayB0byBiZSBhY2NlcHRlZC4KLVRoZSByZXZpZXcgdGhyZWFkOgotaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5wdWxzZWF1ZGlvLmdlbmVyYWwvMjQzMDFdCi0KLVNpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KLS0tLQotIHNyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jIHwgMjUgKysrKysrKysrKysrKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYyBiL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCi1pbmRleCBmZTI0MGYwLi5iZGJkYzEyIDEwMDY0NAotLS0tIGEvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKLSsrKyBiL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCi1AQCAtMzY2LDYgKzM2Niw4IEBAIHN0YXRpYyBpbnQgcmVwb3J0X2phY2tfc3RhdGUoc25kX21peGVyX2VsZW1fdCAqbWVsZW0sIHVuc2lnbmVkIGludCBtYXNrKSB7Ci0gICAgIHZvaWQgKnN0YXRlOwotICAgICBwYV9hbHNhX2phY2sgKmphY2s7Ci0gICAgIHN0cnVjdCB0ZW1wX3BvcnRfYXZhaWwgKnRwLCAqdHBvcnRzOwotKyAgICBwYV9kZXZpY2VfcG9ydCAqcG9ydDsKLSsgICAgcGFfY2FyZF9wcm9maWxlICpwcm9maWxlOwotIAotICAgICBwYV9hc3NlcnQodSk7Ci0gCi1AQCAtNDEyLDYgKzQxNCwyOSBAQCBzdGF0aWMgaW50IHJlcG9ydF9qYWNrX3N0YXRlKHNuZF9taXhlcl9lbGVtX3QgKm1lbGVtLCB1bnNpZ25lZCBpbnQgbWFzaykgewotICAgICAgICAgICAgcGFfZGV2aWNlX3BvcnRfc2V0X2F2YWlsYWJsZSh0cC0+cG9ydCwgdHAtPmF2YWlsKTsKLSAKLSAgICAgcGFfeGZyZWUodHBvcnRzKTsKLSsKLSsgICAgLyogVXBkYXRlIHByb2ZpbGUgYXZhaWxhYmlsaXRpZXMuIFRoZSBsb2dpYyBjb3VsZCBiZSBpbXByb3ZlZDsgZm9yIG5vdyB3ZQotKyAgICAgKiBvbmx5IHNldCBvYnZpb3VzbHkgdW5hdmFpbGFibGUgcHJvZmlsZXMgKHRob3NlIHRoYXQgY29udGFpbiBvbmx5Ci0rICAgICAqIHVuYXZhaWxhYmxlIHBvcnRzKSB0byBQQV9BVkFJTEFCTEVfTk8gYW5kIGFsbCBvdGhlcnMgdG8KLSsgICAgICogUEFfQVZBSUxBQkxFX1VOS05PV04uICovCi0rICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwcm9maWxlLCB1LT5jYXJkLT5wcm9maWxlcywgc3RhdGUpIHsKLSsgICAgICAgIHZvaWQgKnN0YXRlMjsKLSsgICAgICAgIHBhX2F2YWlsYWJsZV90IGF2YWlsYWJsZSA9IFBBX0FWQUlMQUJMRV9OTzsKLSsKLSsgICAgICAgIC8qIERvbid0IHRvdWNoIHRoZSAib2ZmIiBwcm9maWxlLiAqLwotKyAgICAgICAgaWYgKHBhX2hhc2htYXBfc2l6ZShwcm9maWxlLT5wb3J0cykgPT0gMCkKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsKLSsgICAgICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwb3J0LCBwcm9maWxlLT5wb3J0cywgc3RhdGUyKSB7Ci0rICAgICAgICAgICAgaWYgKHBvcnQtPmF2YWlsYWJsZSAhPSBQQV9BVkFJTEFCTEVfTk8pIHsKLSsgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gUEFfQVZBSUxBQkxFX1VOS05PV047Ci0rICAgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9zZXRfYXZhaWxhYmxlKHByb2ZpbGUsIGF2YWlsYWJsZSk7Ci0rICAgIH0KLSsKLSAgICAgcmV0dXJuIDA7Ci0gfQotIAotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDQtY2FyZC1yZW1vdmUtcGFfY2FyZF9uZXdfZGF0YS5hY3RpdmVfcHJvZmlsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwNC1jYXJkLXJlbW92ZS1wYV9jYXJkX25ld19kYXRhLmFjdGl2ZV9wcm9maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MGYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDQtY2FyZC1yZW1vdmUtcGFfY2FyZF9uZXdfZGF0YS5hY3RpdmVfcHJvZmlsZS5wYXRjaApAQCAtMCwwICsxLDcyIEBACitGcm9tIDM3NWJjNTZmZDNkNjZmNDBhOTY1MDIyNGU1YmZlYTQwMDI0OTRhZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+CitEYXRlOiBGcmksIDIzIE9jdCAyMDE1IDEzOjUwOjM1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBjYXJkOiByZW1vdmUgcGFfY2FyZF9uZXdfZGF0YS5hY3RpdmVfcHJvZmlsZQorCitJdCdzIG5vdCBiZWluZyB1c2VkIGFueSBtb3JlLgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtleHBlY3RlZCBpbiAxMC4wXQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+CistLS0KKyBzcmMvcHVsc2Vjb3JlL2NhcmQuYyB8IDggLS0tLS0tLS0KKyBzcmMvcHVsc2Vjb3JlL2NhcmQuaCB8IDUgLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jYXJkLmMgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuYworaW5kZXggYTBjM2Q5My4uYmM1Yjc1YiAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZWNvcmUvY2FyZC5jCisrKysgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuYworQEAgLTk2LDEzICs5Niw2IEBAIHZvaWQgcGFfY2FyZF9uZXdfZGF0YV9zZXRfbmFtZShwYV9jYXJkX25ld19kYXRhICpkYXRhLCBjb25zdCBjaGFyICpuYW1lKSB7CisgICAgIGRhdGEtPm5hbWUgPSBwYV94c3RyZHVwKG5hbWUpOworIH0KKyAKKy12b2lkIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUocGFfY2FyZF9uZXdfZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqcHJvZmlsZSkgeworLSAgICBwYV9hc3NlcnQoZGF0YSk7CistCistICAgIHBhX3hmcmVlKGRhdGEtPmFjdGl2ZV9wcm9maWxlKTsKKy0gICAgZGF0YS0+YWN0aXZlX3Byb2ZpbGUgPSBwYV94c3RyZHVwKHByb2ZpbGUpOworLX0KKy0KKyB2b2lkIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3ByZWZlcnJlZF9wb3J0KHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEsIHBhX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwgcGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKKyAgICAgcGFfYXNzZXJ0KGRhdGEpOworIAorQEAgLTEyNSw3ICsxMTgsNiBAQCB2b2lkIHBhX2NhcmRfbmV3X2RhdGFfZG9uZShwYV9jYXJkX25ld19kYXRhICpkYXRhKSB7CisgICAgICAgICBwYV9oYXNobWFwX2ZyZWUoZGF0YS0+cG9ydHMpOworIAorICAgICBwYV94ZnJlZShkYXRhLT5uYW1lKTsKKy0gICAgcGFfeGZyZWUoZGF0YS0+YWN0aXZlX3Byb2ZpbGUpOworIH0KKyAKKyBwYV9jYXJkICpwYV9jYXJkX25ldyhwYV9jb3JlICpjb3JlLCBwYV9jYXJkX25ld19kYXRhICpkYXRhKSB7CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jYXJkLmggYi9zcmMvcHVsc2Vjb3JlL2NhcmQuaAoraW5kZXggZmQxZmUwYS4uNTY5OTQ3NSAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZWNvcmUvY2FyZC5oCisrKysgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuaAorQEAgLTEwMSwxNSArMTAxLDExIEBAIHR5cGVkZWYgc3RydWN0IHBhX2NhcmRfbmV3X2RhdGEgeworICAgICBwYV9tb2R1bGUgKm1vZHVsZTsKKyAKKyAgICAgcGFfaGFzaG1hcCAqcHJvZmlsZXM7CistICAgIGNoYXIgKmFjdGl2ZV9wcm9maWxlOworLQorICAgICBwYV9oYXNobWFwICpwb3J0czsKKyAgICAgcGFfZGV2aWNlX3BvcnQgKnByZWZlcnJlZF9pbnB1dF9wb3J0OworICAgICBwYV9kZXZpY2VfcG9ydCAqcHJlZmVycmVkX291dHB1dF9wb3J0OworIAorICAgICBib29sIG5hbWVyZWdfZmFpbDoxOworLQorLSAgICBib29sIHNhdmVfcHJvZmlsZToxOworIH0gcGFfY2FyZF9uZXdfZGF0YTsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CitAQCAtMTI1LDcgKzEyMSw2IEBAIHZvaWQgcGFfY2FyZF9wcm9maWxlX3NldF9hdmFpbGFibGUocGFfY2FyZF9wcm9maWxlICpjLCBwYV9hdmFpbGFibGVfdCBhdmFpbGFibGUpCisgCisgcGFfY2FyZF9uZXdfZGF0YSAqcGFfY2FyZF9uZXdfZGF0YV9pbml0KHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpOworIHZvaWQgcGFfY2FyZF9uZXdfZGF0YV9zZXRfbmFtZShwYV9jYXJkX25ld19kYXRhICpkYXRhLCBjb25zdCBjaGFyICpuYW1lKTsKKy12b2lkIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUocGFfY2FyZF9uZXdfZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqcHJvZmlsZSk7Cisgdm9pZCBwYV9jYXJkX25ld19kYXRhX3NldF9wcmVmZXJyZWRfcG9ydChwYV9jYXJkX25ld19kYXRhICpkYXRhLCBwYV9kaXJlY3Rpb25fdCBkaXJlY3Rpb24sIHBhX2RldmljZV9wb3J0ICpwb3J0KTsKKyB2b2lkIHBhX2NhcmRfbmV3X2RhdGFfZG9uZShwYV9jYXJkX25ld19kYXRhICpkYXRhKTsKKyAKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDA1LWFsc2Etc2V0LWF2YWlsYWJpbGl0eS1mb3Itc29tZS11bmF2YWlsYWJsZS1wcm9maWxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwNS1hbHNhLXNldC1hdmFpbGFiaWxpdHktZm9yLXNvbWUtdW5hdmFpbGFibGUtcHJvZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2M2QyYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwNS1hbHNhLXNldC1hdmFpbGFiaWxpdHktZm9yLXNvbWUtdW5hdmFpbGFibGUtcHJvZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRnJvbSBhZTZhMDFiYTIwNGI0ODBiZGE2YTViNDQzMWJlM2QyMmU1M2E3MDA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgorRGF0ZTogRnJpLCAyMyBPY3QgMjAxNSAxMzozNzoxMSArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gYWxzYTogc2V0IGF2YWlsYWJpbGl0eSBmb3IgKHNvbWUpIHVuYXZhaWxhYmxlIHByb2ZpbGVzCisKK1RoZSBhbHNhIGNhcmQgaGFzbid0IHNvIGZhciBzZXQgYW55IGF2YWlsYWJpbGl0eSBmb3IgcHJvZmlsZXMuIFRoYXQKK2NhdXNlZCBhbiBpc3N1ZSB3aXRoIHNvbWUgSERNSSBoYXJkd2FyZTogdGhlIHNvdW5kIGNhcmQgaGFzIHR3byBIRE1JCitvdXRwdXRzLCBidXQgb25seSB0aGUgc2Vjb25kIG9mIHRoZW0gaXMgYWN0dWFsbHkgdXNhYmxlLiBUaGUKK3VuYXZhaWxhYmxlIHBvcnQgaXMgbWFya2VkIGFzIHVuYXZhaWxhYmxlIGFuZCB0aGUgYXZhaWxhYmxlIHBvcnQgaXMKK21hcmtlZCBhcyBhdmFpbGFibGUsIGJ1dCB0aGlzIGluZm9ybWF0aW9uIGlzbid0IHByb3BhZ2F0ZWQgdG8gdGhlCitwcm9maWxlIGF2YWlsYWJpbGl0eS4gV2l0aG91dCBwcm9maWxlIGF2YWlsYWJpbGl0eSBpbmZvcm1hdGlvbiwgdGhlCitpbml0aWFsIHByb2ZpbGUgcG9saWN5IHBpY2tzIHRoZSB1bmF2YWlsYWJsZSBvbmUsIHNpbmNlIGl0IGhhcyBhCitoaWdoZXIgcHJpb3JpdHkgdmFsdWUuCisKK1RoaXMgcGF0Y2ggYWRkcyBzaW1wbGUgbG9naWMgZm9yIG1hcmtpbmcgc29tZSBwcm9maWxlcyB1bmF2YWlsYWJsZToKK2lmIHRoZSBwcm9maWxlIG9ubHkgY29udGFpbnMgdW5hdmFpbGFibGUgcG9ydHMsIHRoZSBwcm9maWxlIGlzCit1bmF2YWlsYWJsZSB0b28uIFRoaXMgY2FuIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUgc28gdGhhdCBpZiBhCitwcm9maWxlIGNvbnRhaW5zIHNpbmtzIG9yIHNvdXJjZXMgdGhhdCBvbmx5IGNvbnRhaW4gdW5hdmFpbGFibGUgcG9ydHMsCit0aGUgcHJvZmlsZSBzaG91bGQgYmUgbWFya2VkIGFzIHVuYXZhaWxhYmxlLiBJbXBsZW1lbnRpbmcgdGhhdAorcmVxdWlyZXMgYWRkaW5nIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNpbmtzIGFuZCBzb3VyY2VzIHRvCitwYV9jYXJkX3Byb2ZpbGUsIGhvd2V2ZXIuCisKK0J1Z0xpbms6IGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ0OAorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtleHBlY3RlZCBpbiAxMC4wXQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+CistLS0KKyBzcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYyB8IDI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYyBiL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCitpbmRleCAxOTc2MjMwLi4zMjNlMDhhIDEwMDY0NAorLS0tIGEvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKKysrKyBiL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCitAQCAtMzY2LDYgKzM2Niw3IEBAIHN0YXRpYyBpbnQgcmVwb3J0X2phY2tfc3RhdGUoc25kX21peGVyX2VsZW1fdCAqbWVsZW0sIHVuc2lnbmVkIGludCBtYXNrKSB7CisgICAgIHZvaWQgKnN0YXRlOworICAgICBwYV9hbHNhX2phY2sgKmphY2s7CisgICAgIHN0cnVjdCB0ZW1wX3BvcnRfYXZhaWwgKnRwLCAqdHBvcnRzOworKyAgICBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGU7CisgCisgICAgIHBhX2Fzc2VydCh1KTsKKyAKK0BAIC00MjYsNiArNDI3LDMyIEBAIHN0YXRpYyBpbnQgcmVwb3J0X2phY2tfc3RhdGUoc25kX21peGVyX2VsZW1fdCAqbWVsZW0sIHVuc2lnbmVkIGludCBtYXNrKSB7CisgICAgICAgICBpZiAodHAtPmF2YWlsID09IFBBX0FWQUlMQUJMRV9OTykKKyAgICAgICAgICAgIHBhX2RldmljZV9wb3J0X3NldF9hdmFpbGFibGUodHAtPnBvcnQsIHRwLT5hdmFpbCk7CisgCisrICAgIC8qIFVwZGF0ZSBwcm9maWxlIGF2YWlsYWJpbGl0aWVzLiBUaGUgbG9naWMgY291bGQgYmUgaW1wcm92ZWQ7IGZvciBub3cgd2UKKysgICAgICogb25seSBzZXQgb2J2aW91c2x5IHVuYXZhaWxhYmxlIHByb2ZpbGVzICh0aG9zZSB0aGF0IGNvbnRhaW4gb25seQorKyAgICAgKiB1bmF2YWlsYWJsZSBwb3J0cykgdG8gUEFfQVZBSUxBQkxFX05PIGFuZCBhbGwgb3RoZXJzIHRvCisrICAgICAqIFBBX0FWQUlMQUJMRV9VTktOT1dOLiAqLworKyAgICBQQV9IQVNITUFQX0ZPUkVBQ0gocHJvZmlsZSwgdS0+Y2FyZC0+cHJvZmlsZXMsIHN0YXRlKSB7CisrICAgICAgICBwYV9kZXZpY2VfcG9ydCAqcG9ydDsKKysgICAgICAgIHZvaWQgKnN0YXRlMjsKKysgICAgICAgIHBhX2F2YWlsYWJsZV90IGF2YWlsYWJsZSA9IFBBX0FWQUlMQUJMRV9OTzsKKysKKysgICAgICAgIC8qIERvbid0IHRvdWNoIHRoZSAib2ZmIiBwcm9maWxlLiAqLworKyAgICAgICAgaWYgKHByb2ZpbGUtPm5fc291cmNlcyA9PSAwICYmIHByb2ZpbGUtPm5fc2lua3MgPT0gMCkKKysgICAgICAgICAgICBjb250aW51ZTsKKysKKysgICAgICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwb3J0LCB1LT5jYXJkLT5wb3J0cywgc3RhdGUyKSB7CisrICAgICAgICAgICAgaWYgKCFwYV9oYXNobWFwX2dldChwb3J0LT5wcm9maWxlcywgcHJvZmlsZS0+bmFtZSkpCisrICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICAgIGlmIChwb3J0LT5hdmFpbGFibGUgIT0gUEFfQVZBSUxBQkxFX05PKSB7CisrICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IFBBX0FWQUlMQUJMRV9VTktOT1dOOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfc2V0X2F2YWlsYWJsZShwcm9maWxlLCBhdmFpbGFibGUpOworKyAgICB9CisrCisgICAgIHBhX3hmcmVlKHRwb3J0cyk7CisgICAgIHJldHVybiAwOworIH0KKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb184LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzguMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAxYmE4Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzguMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgcHVsc2VhdWRpby5pbmMKLQotU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3B1bHNlYXVkaW8vcmVsZWFzZXMvJHtCUH0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcy4wNF9wdWxzZSBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNhcmQtYWRkLXBhX2NhcmRfcHJvZmlsZS5wb3J0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLWFsc2EtYmx1ZXRvb3RoLWZhaWwtaWYtdXNlci1yZXF1ZXN0ZWQtcHJvZmlsZS1kb2Vzbi0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMy1jYXJkLW1vdmUtcHJvZmlsZS1zZWxlY3Rpb24tYWZ0ZXItcGFfY2FyZF9uZXcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNC1hbHNhLXNldC1hdmFpbGFiaWxpdHktZm9yLXNvbWUtdW5hdmFpbGFibGUtcHJvZmlsZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1SZXZlcnQtbW9kdWxlLXN3aXRjaC1vbi1wb3J0LWF2YWlsYWJsZS1Sb3V0ZS10by1wcmVmLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICI4Njc4NDQyYmEwYmI0YjRjMzNhYzZmNjI1NDI5NjJkZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2OTBlZWZlMjg2MzM0NjZjZmQxYWI5ZDg1ZWJmYTkzNzZmNmI2MjJkZWVjNmJmZWU1MDkxYWM5NzM3Y2QxOTg5IgotCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0gICAgbWtkaXIgLXAgJHtTfS9saWJsdGRsCi0gICAgY3AgJHtTVEFHSU5HX0xJQkRJUn0vbGlibHRkbCogJHtTfS9saWJsdGRsCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzkuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fOS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjU0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzkuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHB1bHNlYXVkaW8uaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFsc2EtYmx1ZXRvb3RoLWZhaWwtaWYtdXNlci1yZXF1ZXN0ZWQtcHJvZmlsZS1kb2Vzbi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1jYXJkLWRvbi10LWFsbG93LXRoZS1DQVJEX05FVy1ob29rLXRvLWZhaWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1jYXJkLW1vdmUtcHJvZmlsZS1zZWxlY3Rpb24tYWZ0ZXItcGFfY2FyZF9uZXcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1jYXJkLXJlbW92ZS1wYV9jYXJkX25ld19kYXRhLmFjdGl2ZV9wcm9maWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtYWxzYS1zZXQtYXZhaWxhYmlsaXR5LWZvci1zb21lLXVuYXZhaWxhYmxlLXByb2ZpbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcy4wNF9wdWxzZSBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZGE3MTYyNTQxYjNhOWJjMjA1NzZkYmQwZDdkMTQ4OWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzNkM2Q2NmI4MjdmMThmYmU5MDNmZTNkZjY0NzAxM2YwOWZjMWUyMTkxYzAzNWJlMWVlMmQ4MmE5ZTQwNDY4NiIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIG1rZGlyIC1wICR7U30vbGlibHRkbAorICAgIGNwICR7U1RBR0lOR19MSUJESVJ9L2xpYmx0ZGwqICR7U30vbGlibHRkbAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjUuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS93ZWJwL2xpYndlYnBfMC41LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OWFkYWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjUuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLVNVTU1BUlkgPSAiV2ViUCBpcyBhbiBpbWFnZSBmb3JtYXQgZGVzaWduZWQgZm9yIHRoZSBXZWIiCi1ERVNDUklQVElPTiA9ICJXZWJQIGlzIGEgbWV0aG9kIG9mIGxvc3N5IGFuZCBsb3NzbGVzcyBjb21wcmVzc2lvbiB0aGF0IGNhbiBiZSBcCi0gICAgICAgICAgICAgICB1c2VkIG9uIGEgbGFyZ2UgdmFyaWV0eSBvZiBwaG90b2dyYXBoaWMsIHRyYW5zbHVjZW50IGFuZCBcCi0gICAgICAgICAgICAgICBncmFwaGljYWwgaW1hZ2VzIGZvdW5kIG9uIHRoZSB3ZWIuIFRoZSBkZWdyZWUgb2YgbG9zc3kgXAotICAgICAgICAgICAgICAgY29tcHJlc3Npb24gaXMgYWRqdXN0YWJsZSBzbyBhIHVzZXIgY2FuIGNob29zZSB0aGUgdHJhZGUtb2ZmIFwKLSAgICAgICAgICAgICAgIGJldHdlZW4gZmlsZSBzaXplIGFuZCBpbWFnZSBxdWFsaXR5LiBXZWJQIHR5cGljYWxseSBhY2hpZXZlcyBcCi0gICAgICAgICAgICAgICBhbiBhdmVyYWdlIG9mIDMwJSBtb3JlIGNvbXByZXNzaW9uIHRoYW4gSlBFRyBhbmQgSlBFRyAyMDAwLCBcCi0gICAgICAgICAgICAgICB3aXRob3V0IGxvc3Mgb2YgaW1hZ2UgcXVhbGl0eS4iCi1IT01FUEFHRSA9ICJodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9zcGVlZC93ZWJwLyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZThkZWU5MzJjMjZmMmRhYjUwM2FiZjcwYzk2ZDhiYiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9QQVRFTlRTO21kNT1jNjkyNmQwY2IwN2QyOTZmODg2YWI2ZTBjYzVhODViNyIKLQotU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwLyR7QlB9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJiYTgxZWI5YmYyM2UzYzY5YTJmNWNjOGRjZGI1OTM4ZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1Y2QzYmI3YjYyM2FmZjFmNGU3MGJkNjExZGM4ZGJhYmJmNzY4OGZkNWViMjI1YjMyZTAyZTA5ZTM3ZGZiMjc0IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy53ZWJtcHJvamVjdC5vcmcvcmVsZWFzZXMvd2VicC9pbmRleC5odG1sIgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAtLWRpc2FibGUtZXhwZXJpbWVudGFsIFwKLSAgICAtLWRpc2FibGUtd2ljIFwKLSAgICAtLWVuYWJsZS1saWJ3ZWJwbXV4IFwKLSAgICAtLWVuYWJsZS1saWJ3ZWJwZGVtdXggXAotICAgIC0tZW5hYmxlLXRocmVhZGluZyBcCi0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi0KLSMgbGlid2VicGRlY29kZXIgaXMgYSBzdWJzZXQgb2YgbGlid2VicCwgZG9uJ3QgYnVpbGQgaXQgdW5sZXNzIHJlcXVlc3RlZAotUEFDS0FHRUNPTkZJR1tkZWNvZGVyXSA9ICItLWVuYWJsZS1saWJ3ZWJwZGVjb2RlciwtLWRpc2FibGUtbGlid2VicGRlY29kZXIiCi0KLSMgQXBwbHkgZm9yIGV4YW1wbGVzIHByb2dyYW1zOiBjd2VicCBhbmQgZHdlYnAKLVBBQ0tBR0VDT05GSUdbZ2lmXSA9ICItLWVuYWJsZS1naWYsLS1kaXNhYmxlLWdpZixnaWZsaWIiCi1QQUNLQUdFQ09ORklHW2pwZWddID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZyIKLVBBQ0tBR0VDT05GSUdbcG5nXSA9ICItLWVuYWJsZS1wbmcsLS1kaXNhYmxlLXBuZywsbGlicG5nIgotUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLWVuYWJsZS10aWZmLC0tZGlzYWJsZS10aWZmLHRpZmYiCi0KLSMgQXBwbHkgb25seSBmb3IgZXhhbXBsZSBwcm9ncmFtIHZ3ZWJwCi1QQUNLQUdFQ09ORklHW2dsXSA9ICItLWVuYWJsZS1nbCwtLWRpc2FibGUtZ2wsbWVzYS1nbHV0IgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tZ2lmMndlYnAiCi0KLURFU0NSSVBUSU9OXyR7UE59LWdpZjJ3ZWJwID0gIlNpbXBsZSB0b29sIHRvIGNvbnZlcnQgYW5pbWF0ZWQgR0lGcyB0byBXZWJQIgotRklMRVNfJHtQTn0tZ2lmMndlYnAgPSAiJHtiaW5kaXJ9L2dpZjJ3ZWJwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS93ZWJwL2xpYndlYnBfMC41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4MmRiNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS93ZWJwL2xpYndlYnBfMC41LjEuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJXZWJQIGlzIGFuIGltYWdlIGZvcm1hdCBkZXNpZ25lZCBmb3IgdGhlIFdlYiIKK0RFU0NSSVBUSU9OID0gIldlYlAgaXMgYSBtZXRob2Qgb2YgbG9zc3kgYW5kIGxvc3NsZXNzIGNvbXByZXNzaW9uIHRoYXQgY2FuIGJlIFwKKyAgICAgICAgICAgICAgIHVzZWQgb24gYSBsYXJnZSB2YXJpZXR5IG9mIHBob3RvZ3JhcGhpYywgdHJhbnNsdWNlbnQgYW5kIFwKKyAgICAgICAgICAgICAgIGdyYXBoaWNhbCBpbWFnZXMgZm91bmQgb24gdGhlIHdlYi4gVGhlIGRlZ3JlZSBvZiBsb3NzeSBcCisgICAgICAgICAgICAgICBjb21wcmVzc2lvbiBpcyBhZGp1c3RhYmxlIHNvIGEgdXNlciBjYW4gY2hvb3NlIHRoZSB0cmFkZS1vZmYgXAorICAgICAgICAgICAgICAgYmV0d2VlbiBmaWxlIHNpemUgYW5kIGltYWdlIHF1YWxpdHkuIFdlYlAgdHlwaWNhbGx5IGFjaGlldmVzIFwKKyAgICAgICAgICAgICAgIGFuIGF2ZXJhZ2Ugb2YgMzAlIG1vcmUgY29tcHJlc3Npb24gdGhhbiBKUEVHIGFuZCBKUEVHIDIwMDAsIFwKKyAgICAgICAgICAgICAgIHdpdGhvdXQgbG9zcyBvZiBpbWFnZSBxdWFsaXR5LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3NwZWVkL3dlYnAvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlOGRlZTkzMmMyNmYyZGFiNTAzYWJmNzBjOTZkOGJiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1BBVEVOVFM7bWQ1PWM2OTI2ZDBjYjA3ZDI5NmY4ODZhYjZlMGNjNWE4NWI3IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMud2VibXByb2plY3Qub3JnL3JlbGVhc2VzL3dlYnAvJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjNkN2RiOTJlYmJhNWI0ZjY3OTQxM2QyNWM2MDQwODgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZhZDY2YzZmY2Q2MGEwMjNkZTIwYjY4NTZiMDNkYThjN2QzNDcyNjlkNzZiMWZkOWMzMjg3ZThiNWU4ODEzZGYiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwL2luZGV4Lmh0bWwiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZGlzYWJsZS1leHBlcmltZW50YWwgXAorICAgIC0tZGlzYWJsZS13aWMgXAorICAgIC0tZW5hYmxlLWxpYndlYnBtdXggXAorICAgIC0tZW5hYmxlLWxpYndlYnBkZW11eCBcCisgICAgLS1lbmFibGUtdGhyZWFkaW5nIFwKKyIKKyMgRG8gbm90IHRydXN0IGNvbmZpZ3VyZSB0byBkZXRlcm1pbmUgaWYgbmVvbiBpcyBhdmFpbGFibGUuCisjCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwibmVvbiIsIi0tZW5hYmxlLW5lb24iLCItLWRpc2FibGUtbmVvbiIsZCl9IFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKworIyBsaWJ3ZWJwZGVjb2RlciBpcyBhIHN1YnNldCBvZiBsaWJ3ZWJwLCBkb24ndCBidWlsZCBpdCB1bmxlc3MgcmVxdWVzdGVkCitQQUNLQUdFQ09ORklHW2RlY29kZXJdID0gIi0tZW5hYmxlLWxpYndlYnBkZWNvZGVyLC0tZGlzYWJsZS1saWJ3ZWJwZGVjb2RlciIKKworIyBBcHBseSBmb3IgZXhhbXBsZXMgcHJvZ3JhbXM6IGN3ZWJwIGFuZCBkd2VicAorUEFDS0FHRUNPTkZJR1tnaWZdID0gIi0tZW5hYmxlLWdpZiwtLWRpc2FibGUtZ2lmLGdpZmxpYiIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLCxsaWJwbmciCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKKworIyBBcHBseSBvbmx5IGZvciBleGFtcGxlIHByb2dyYW0gdndlYnAKK1BBQ0tBR0VDT05GSUdbZ2xdID0gIi0tZW5hYmxlLWdsLC0tZGlzYWJsZS1nbCxtZXNhLWdsdXQiCisKK1BBQ0tBR0VTID0rICIke1BOfS1naWYyd2VicCIKKworREVTQ1JJUFRJT05fJHtQTn0tZ2lmMndlYnAgPSAiU2ltcGxlIHRvb2wgdG8gY29udmVydCBhbmltYXRlZCBHSUZzIHRvIFdlYlAiCitGSUxFU18ke1BOfS1naWYyd2VicCA9ICIke2JpbmRpcn0vZ2lmMndlYnAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCmluZGV4IDBhNjk5MDkuLjM5MzMxMGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCkBAIC00MiwxNCArNDIsMTIgQEAKICAgICAuL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KIH0KIAotIyBHZXQgcmlkIG9mIC1lCi1FWFRSQV9PRU1BS0UgPSAiIgogQVMgPSAiJHtUQVJHRVRfUFJFRklYfWdjYyIKIAogZG9faW5zdGFsbCgpIHsKICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9CiB9CiAKLSMgUElDIGNhbid0IGJlIGVuYWJsZWQgZm9yIDMyLWJpdCB4ODYKLUlOU0FORV9TS0lQXyR7UE59X2FwcGVuZF94ODYgPSAiIHRleHRyZWwiCisjIFBJQyBjYW4ndCBiZSBlbmFibGVkIGZvciBmZXcgQlNQJ3MKK0lOU0FORV9TS0lQXyR7UE59X2FwcGVuZCA9ICIgdGV4dHJlbCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC1zZGsuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgppbmRleCBkYjdkNTgxLi43ZGRmNjcxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgpAQCAtMSw1ICsxLDEzIEBACiByZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCiAKKyMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGxpbnV4LXlvY3RvLXJ0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKKyMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gdHJ5aW5nCisjIHRvIGJ1aWxkIG11bHRpcGxlIHZpcnR1YWwva2VybmVsIHByb3ZpZGVycy4KK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9ICJsaW51eC15b2N0by1ydCI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJTZXQgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIHRvIGxpbnV4LXlvY3RvLXJ0IHRvIGVuYWJsZSBpdCIpCit9CisKIERFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIGEgdGVzdCBzdWl0ZSBhbmQgXAogdG9vbHMgZm9yIHJlYWwtdGltZSB1c2UuIEl0IGluY2x1ZGVzIHRoZSBmdWxsIG1ldGEtdG9vbGNoYWluLCBkZXZlbG9wbWVudCBcCiBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgdG8gZm9ybSBhIHN0YW5kYWxvbmUgU0RLLiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LmJiCmluZGV4IGNhYjZmOGIuLjljODZmMjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC5iYgpAQCAtMSw1ICsxLDEzIEBACiByZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCiAKKyMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGxpbnV4LXlvY3RvLXJ0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKKyMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gdHJ5aW5nCisjIHRvIGJ1aWxkIG11bHRpcGxlIHZpcnR1YWwva2VybmVsIHByb3ZpZGVycy4KK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9ICJsaW51eC15b2N0by1ydCI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJTZXQgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIHRvIGxpbnV4LXlvY3RvLXJ0IHRvIGVuYWJsZSBpdCIpCit9CisKIERFU0NSSVBUSU9OID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QgcGx1cyBhIFwKIHJlYWwtdGltZSB0ZXN0IHN1aXRlIGFuZCB0b29scyBhcHByb3ByaWF0ZSBmb3IgcmVhbC10aW1lIHVzZS4iCiBERVBFTkRTID0gImxpbnV4LXlvY3RvLXJ0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLU1ha2VmaWxlLVNldC1DQy1BUi12YXJpYWJsZS1vbmx5LWlmLWl0LWRvZXNuLXQtaGF2ZS0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDEtTWFrZWZpbGUtU2V0LUNDLUFSLXZhcmlhYmxlLW9ubHktaWYtaXQtZG9lc24tdC1oYXZlLS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmY2M3ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDEtTWFrZWZpbGUtU2V0LUNDLUFSLXZhcmlhYmxlLW9ubHktaWYtaXQtZG9lc24tdC1oYXZlLS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUZyb20gOTY0MGRkZTQyNDFlMTMxNGI4ZThlYTM1YjBjOGRhYjBiMzBhZTUxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBTdW4sIDMgSmFuIDIwMTYgMTA6NTA6NTYgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IFNldCBDQy9BUiB2YXJpYWJsZSBvbmx5IGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIHZhbHVlCi0KLVRoaXMgaGVscHMgaXQgY29tcGlsZSB3aXRoIGNsYW5nIG9yIGFueSBvdGhlciBjb21waWxlcnMgYmVzaWRlcyBnY2MKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotIE1ha2VmaWxlIHwgNCArKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKLWluZGV4IDFlNGI3ZDEuLjJjMmQzOTYgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZQotKysrIGIvTWFrZWZpbGUKLUBAIC0xLDYgKzEsNiBAQAotIFZFUlNJT04gPSAwLjk2Ci0tQ0M9JChDUk9TU19DT01QSUxFKWdjYwotLUFSPSQoQ1JPU1NfQ09NUElMRSlhcgotK0NDPz0kKENST1NTX0NPTVBJTEUpZ2NjCi0rQVI/PSQoQ1JPU1NfQ09NUElMRSlhcgotIAotIE9CSkRJUiA9IGJsZAotIAotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydF9ibWFyay5weQppbmRleCBlMjI4MGU0Li4wODBhNjU1IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnRfYm1hcmsucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogICAgIEJTRC0zLUNsYXVzZQpAQCAtMTA2LDggKzEwNiw4IEBACiAKIGRlZiBsb2coKm1zZyk6CiAgICAgICAgIHRtcCA9ICIiLmpvaW4obWFwKHN0ciwgbXNnKSkgIyAnbWFwKHN0ciwgLi4uJyBhbGxvd3MgbnVtYmVycwotICAgICAgICBmb3IgbGluZSBpbiB0bXAuc3BsaXQoIlxuIik6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIiMiLCBsaW5lCisgICAgICAgIGZvciBsaW5lIGluIHRtcC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgcHJpbnQoIiMiLCBsaW5lKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBMaWtlIGxvZygpLCBidXQgd2l0aCBhIHRpbWVzdGFtcCBhZGRlZApAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgIi1kIiwgc3RyKGludGVydmFsX2RlbHRhKSwKICAgICAgICAiLWwiLCBzdHIobG9vcF9jb3VudCkKICAgICAgICApCi1yZXggPSByZS5jb21waWxlKCJDOlxzKihcZCspLipNaW46XHMqKFxkKykuKkF2ZzpccyooXGQrKS4qTWF4OlxzKihcZCspIikKK3JleCA9IHJlLmNvbXBpbGUoYiJDOlxzKihcZCspLipNaW46XHMqKFxkKykuKkF2ZzpccyooXGQrKS4qTWF4OlxzKihcZCspIikKIAogZGVmIHJ1bl9jeWNsaWN0ZXN0X29uY2UoKToKICAgICAgICAgcmVzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kKQpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgIGF2Z19zdW0gPSAwCiAgICAgICAgIGF2Z19jbnQgPSAwCiAKLSAgICAgICAgZm9yIGxpbmUgaW4gcmVzLnNwbGl0KCJcbiIpOgorICAgICAgICBmb3IgbGluZSBpbiByZXMuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgIG0gPSByZXguc2VhcmNoKGxpbmUpCiAgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxpc3QuYXBwZW5kKGludChtLmdyb3VwKDIpKSkKQEAgLTMyNCw3ICszMjQsNyBAQAogICAgICAgICB0ID0gdGltZS50aW1lKCkKICAgICAgICAgbWF4X2xpc3QgPSBbXQogCi0gICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBzdWl0ZV9zaXplKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc3VpdGVfc2l6ZSk6CiAgICAgICAgICAgICAgICAgdG1wX21pbiwgdG1wX2F2ZywgdG1wX21heCA9IHJ1bl9jeWNsaWN0ZXN0X29uY2UoKQogCiAgICAgICAgICAgICAgICAgbXNnID0gIiUyZC8lMmQ6IiAlIChpKzEsIHN1aXRlX3NpemUpCkBAIC0zNzYsMTEgKzM3NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiUEFTUyIpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCB0Y19uYW1lKG5hbWUpLCAiW01pbi91cyxBdmcvdXMsTWF4L3VzXToiLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVkLCUuMWYsJWQiICUgKGJtX21pbixibV9hdmcsIGJtX21heCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJQQVNTOiIsIHRjX25hbWUobmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCh0Y19uYW1lKG5hbWUpLCAiW01pbi91cyxBdmcvdXMsTWF4L3VzXToiLCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIlZCwlLjFmLCVkIiAlIChibV9taW4sYm1fYXZnLCBibV9tYXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlBBU1M6IiwgdGNfbmFtZShuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCkKIAogICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQpAQCAtMzkxLDkgKzM5MSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIldEOiAiLCBvcy5nZXRjd2QoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkZBSUwiKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlMOiIsIHRjX25hbWUobmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiRkFJTDoiLCB0Y19uYW1lKG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0CmluZGV4IDhlNmQzZTMuLmI3YzVlMjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0CkBAIC0xLDMgKzEsMyBAQAogIyEvYmluL3NoCiAKLXB5dGhvbiAuL3J0X2JtYXJrLnB5CitweXRob24zIC4vcnRfYm1hcmsucHkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Ni5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Ni5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyMDY5ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2h3bGF0ZGV0ZWN0XzAuOTYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1TVU1NQVJZID0gIkhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0b3IiCi1ERVNDUklQVElPTiA9ICJQeXRob24gdXRpbGl0eSBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCBoYXJkd2FyZSBsYXRlbmN5IGRldGVjdGlvbiBtb2R1bGUgKGh3bGF0X2RldGVjdG9yLmtvKS4iCi1IT01FUEFHRSA9ICJodHRwczovL3J0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQ3ljbGljdGVzdCIKLVNFQ1RJT04gPSAidGVzdHMiCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCi0KLXJlcXVpcmUgcnQtdGVzdHMuaW5jCi0KLUVYVFJBX09FTUFLRSArPSAiUFlMSUI9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9kaXN0LXBhY2thZ2VzIgotCi1kb19jb21waWxlKCkgewotCW9lX3J1bm1ha2UgaHdsYXRkZXRlY3QKLX0KLQotZG9faW5zdGFsbCgpIHsKLSAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsX2h3bGF0ZGV0ZWN0IERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gXAotCSAgICAgICAgICAgTUFORElSPSR7bWFuZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vZGlzdC1wYWNrYWdlcy9od2xhdGRldGVjdC5weSIKLVJERVBFTkRTXyR7UE59ID0gInB5dGhvbiBweXRob24tc3VicHJvY2VzcyBweXRob24tdGV4dHV0aWxzIgotUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1od2xhdC1kZXRlY3RvciIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyYjJkZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMi4wLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiSGFyZHdhcmUgbGF0ZW5jeSBkZXRlY3RvciIKK0RFU0NSSVBUSU9OID0gIlB5dGhvbiB1dGlsaXR5IGZvciBjb250cm9sbGluZyB0aGUga2VybmVsIGhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0aW9uIG1vZHVsZSAoaHdsYXRfZGV0ZWN0b3Iua28pLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vcnQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9DeWNsaWN0ZXN0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworcmVxdWlyZSBydC10ZXN0cy5pbmMKK2luaGVyaXQgcHl0aG9uMy1kaXIKKworRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBod2xhdGRldGVjdAorfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGxfaHdsYXRkZXRlY3QgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBcCisJICAgICAgICAgICBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorCisgICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9kaXN0LXBhY2thZ2VzL2h3bGF0ZGV0ZWN0LnB5Cit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMvaHdsYXRkZXRlY3QucHkiCitSREVQRU5EU18ke1BOfSA9ICJweXRob24zIHB5dGhvbjMtc3VicHJvY2VzcyBweXRob24zLXRleHR1dGlscyIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtaHdsYXQtZGV0ZWN0b3IiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jCmluZGV4IDc2ZjliM2EuLmQ4MzI4MjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jCkBAIC0xLDEzICsxLDkgQEAKICMgVmVyc2lvbiB2MC45NgotUFYgPSAiMC45NiIKLVNSQ1JFViA9ICIyNGY4YzAxNzVlMDRiYWI3OGU3NTU1Njk4ZTM0ZDcwMDJiMDFjODdmIgorU1JDUkVWID0gImUxYjE1MzdhMjBiMzVhZjc1YTQ5YmY1NWRjZjcwMjk2ZjhhNjI0NjciCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9ydC10ZXN0cy9ydC10ZXN0cy5naXQiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKLSMgbmVlZCB0byBhcHBlbmQgcnQtdGVzdHMnIGRlZmF1bHQgQ0ZMQUdTIHRvIG91cnMKLUNGTEFHUyArPSAiLUkke1N9L3NyYy9pbmNsdWRlIC1EX0dOVV9TT1VSQ0UgLVdhbGwgLVduby1ub25udWxsIgotCiAjIGNhbGxpbmcgJ3VuYW1lIC1tJyBpcyBicm9rZW4gb24gY3Jvc3NidWlsZHMKIEVYVFJBX09FTUFLRSA9ICJOVU1BPTAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzAuOTYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzAuOTYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOTZmZWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjk2LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotU1VNTUFSWSA9ICJSZWFsLVRpbWUgcHJlZW1wdGlvbiB0ZXN0Y2FzZXMiCi1IT01FUEFHRSA9ICJodHRwczovL3J0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQ3ljbGljdGVzdCIKLVNFQ1RJT04gPSAidGVzdHMiCi1ERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyB2aXJ0dWFsL2xpYmMiCi1MSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC5jO2JlZ2lubGluZT03O2VuZGxpbmU9OTttZDU9ZTc2OGI4ZGE0NDU1NWZlNjNmNjVlNWM0OTc4NDRjYjUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTk7bWQ1PWJkNDI2YTYzNGE0M2VjNjEyZTlmYmYxMjVkZmNjOTQ5IgotCi1yZXF1aXJlIHJ0LXRlc3RzLmluYwotaW5oZXJpdCBwdGVzdAotCi1TUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1NYWtlZmlsZS1TZXQtQ0MtQVItdmFyaWFibGUtb25seS1pZi1pdC1kb2Vzbi10LWhhdmUtLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotICAgICAgICAgICAgZmlsZTovL3J0X2JtYXJrLnB5IFwKLSAgICAgICAgICAgIgotIyBEbyBub3QgaW5zdGFsbCBod2xhdGRldGVjdAotRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0nJyBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0iCi0KLUNGTEFHU19wcmVwZW5kID0gIiR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgotCi1kb19pbnN0YWxsKCkgewotICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBNQU5ESVI9JHttYW5kaXJ9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQotfQotCi1kb19pbnN0YWxsX3B0ZXN0KCkgewotICAgICAgICBjcCAke1dPUktESVJ9L3J0X2JtYXJrLnB5ICR7RH0ke1BURVNUX1BBVEh9Ci19Ci0KLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIgc3RyZXNzIHB5dGhvbiBweXRob24tc3VicHJvY2VzcyBweXRob24tbXVsdGlwcm9jZXNzaW5nIHB5dGhvbi1kYXRldGltZSBweXRob24tcmUgcHl0aG9uLWxhbmciCi0KLUZJTEVTXyR7UE59ICs9ICIke3ByZWZpeH0vc3JjL2JhY2tmaXJlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18yLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzM2YzUwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18yLjAuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJSZWFsLVRpbWUgcHJlZW1wdGlvbiB0ZXN0Y2FzZXMiCitIT01FUEFHRSA9ICJodHRwczovL3J0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQ3ljbGljdGVzdCIKK1NFQ1RJT04gPSAidGVzdHMiCitERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyB2aXJ0dWFsL2xpYmMiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC5jO2JlZ2lubGluZT03O2VuZGxpbmU9OTttZDU9ZTc2OGI4ZGE0NDU1NWZlNjNmNjVlNWM0OTc4NDRjYjUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTk7bWQ1PWJkNDI2YTYzNGE0M2VjNjEyZTlmYmYxMjVkZmNjOTQ5IgorCityZXF1aXJlIHJ0LXRlc3RzLmluYworaW5oZXJpdCBwdGVzdAorCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vcnRfYm1hcmsucHkgXAorICAgICAgICAgICAiCisjIERvIG5vdCBpbnN0YWxsIGh3bGF0ZGV0ZWN0CitFWFRSQV9PRU1BS0UgKz0gIlBZTElCPScnIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBNQU5ESVI9JHttYW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgICAgICBjcCAke1dPUktESVJ9L3J0X2JtYXJrLnB5ICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIgc3RyZXNzIHB5dGhvbjMgcHl0aG9uMy1zdWJwcm9jZXNzIHB5dGhvbjMtbXVsdGlwcm9jZXNzaW5nIHB5dGhvbjMtZGF0ZXRpbWUgcHl0aG9uMy1yZSBweXRob24zLWxhbmcgcHl0aG9uMy1taXNjIgorCitGSUxFU18ke1BOfSArPSAiJHtwcmVmaXh9L3NyYy9iYWNrZmlyZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNTM4ZWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1TVU1NQVJZID0gIlNhdG8gdGhlbWUgZW5naW5lIGZvciBHVEsrIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjEgJiBMR1BMdjIrIgotCi1TRUNUSU9OID0gIngxMS9iYXNlIgotREVQRU5EUyA9ICJndGsrIgotUkRFUEVORFNfZ3RrLXRoZW1lLXNhdG8gPSAiZ3RrLXNhdG8tZW5naW5lIgotCi1pbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjawotQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCi0KLVBBQ0tBR0VTICs9ICJndGstdGhlbWUtc2F0byIKLUZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLnNvICIKLUZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKLUZJTEVTX2d0ay10aGVtZS1zYXRvID0gIiR7ZGF0YWRpcn0vaWNvbnMgJHtkYXRhZGlyfS90aGVtZXMiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0JZm9yIGkgaW4gYGxzIGd0ay1jb21tb25gOyBkbwotCQlsbiAtc2YgLi4vZ3RrLWNvbW1vbi8kaSBndGsyLWVuZ2luZS8kaQotCWRvbmUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNGQ5OGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1yZXF1aXJlIGd0ay1zYXRvLWVuZ2luZS5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zYXRvLXV0aWxzLmg7ZW5kbGluZT0yNDttZDU9NzA4ZjI4Y2ZlN2ZlMDI4ZDQ5N2FhZjQzODliODBiNjIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhdG8tbWFpbi5jO2VuZGxpbmU9MjQ7bWQ1PWI1ZTVkZGRlYmNhNTcwMjc1YmVjYjUxYjUyNmU0YzVhIgotCi1TUkNSRVYgPSAiNDc0MGFkOGQ1M2FiYTQzNjhjZTNlMDNiMDZjZmRjNjllYjg2ZGNkYyIKLVBWID0gIjAuMy4zK2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbDNhZnBhZC9sM2FmcGFkX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sM2FmcGFkL2wzYWZwYWRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZmRhMjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbDNhZnBhZC9sM2FmcGFkX2dpdC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlNpbXBsZSBHVEsrIFRleHQgRWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL3N0ZXZlbmhvbmV5bWFuL2wzYWZwYWQiCisKKyMgTm90ZSB0aGF0IENPUFlJTkcgc2VlbXMgdG8gbWlzdGFrZW5seSBjb250YWluIExHUEx2Mi4xLgorIyBUaGUgc291cmNlIGNvZGUgaXMgbWFya2VkIEdQTHYyKyBhbmQgQ09QWUlORyB1c2VkIHRvIGNvbnRhaW4KKyMgdGhhdCBhcyB3ZWxsLgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbDNhZnBhZC5oO2VuZGxpbmU9MjA7bWQ1PTg4NDhmZDY0NWNkNDUxMTVkOGNiNDdjYTVjNDJhNTBlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy91dGlscy5jO2VuZGxpbmU9MjA7bWQ1PWFlNDc5MmY2OWQzYmI3YjdiYTkxZDU4MmJhOWIxYTA1IgorCitERVBFTkRTID0gImd0ayszIGludGx0b29sLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKKworUFYgPSAiMC44LjE4LjEuMTErZ2l0JHtTUkNQVn0iCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vc3RldmVuaG9uZXltYW4vbDNhZnBhZC5naXQiCitTUkNSRVYgPSIzY2RjY2RjOTUwNTY0M2U1MGY4MjA4MTcxZDllZWU1ZGUxMWE0MmZmIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEszRElTVFJPRkVBVFVSRVN9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWVtYWNzIC0tZGlzYWJsZS1wcmludCIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2UyZDViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLVtEZXNrdG9wIEVudHJ5XQotTmFtZT1Ob3RlcwotRXhlYz0vdXNyL2Jpbi9sZWFmcGFkCi1Db21tZW50PVRleHQgRWRpdG9yCi1JY29uPWFjY2Vzc29yaWVzLXRleHQtZWRpdG9yCi1UZXJtaW5hbD1mYWxzZQotVHlwZT1BcHBsaWNhdGlvbgotQ2F0ZWdvcmllcz1HVEs7VXRpbGl0eTtUZXh0RWRpdG9yOwotWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCi1TdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYmY3NGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQotCi0tLS0gdG1wL3NyYy9tZW51LmMub3JpZwkyMDA3LTA0LTIzIDEyOjA4OjQxLjAwMDAwMDAwMCArMDEwMAotKysrIHRtcC9zcmMvbWVudS5jCTIwMDctMDQtMjMgMTI6MDg6NDEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTUyLDcgKzE1Miw3IEBACi0gCX0KLSAJCi0gCWFjY2VsX2dyb3VwID0gZ3RrX2FjY2VsX2dyb3VwX25ldygpOwotLQlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlVfQkFSLCAiPG1haW4+IiwgYWNjZWxfZ3JvdXApOwotKwlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlUsICI8bWFpbj4iLCBhY2NlbF9ncm91cCk7Ci0gCWd0a19pdGVtX2ZhY3Rvcnlfc2V0X3RyYW5zbGF0ZV9mdW5jKGlmYWN0b3J5LCBtZW51X3RyYW5zbGF0ZSwgTlVMTCwgTlVMTCk7Ci0gCWd0a19pdGVtX2ZhY3RvcnlfY3JlYXRlX2l0ZW1zKGlmYWN0b3J5LCBubWVudV9pdGVtcywgbWVudV9pdGVtcywgTlVMTCk7Ci0gCWd0a193aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1cod2luZG93KSwgYWNjZWxfZ3JvdXApOwotCi0tLS0gdG1wL3NyYy93aW5kb3cuYy5vcmlnCTIwMDctMDQtMjMgMTI6MTQ6MDcuMDAwMDAwMDAwICswMTAwCi0rKysgdG1wL3NyYy93aW5kb3cuYwkyMDA3LTA0LTIzIDEyOjE0OjA3LjAwMDAwMDAwMCArMDEwMAotQEAgLTE4LDYgKzE4LDggQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSAibGVhZnBhZC5oIgotKyNpbmNsdWRlIDxsaWJvd2wvb3dsd2luZG93bWVudS5oPgotKwotIC8qCi0gc3RhdGljIHZvaWQgY2Jfc2Nyb2xsX2V2ZW50KEd0a0FkanVzdG1lbnQgKmFkaiwgR3RrV2lkZ2V0ICp2aWV3KQotIHsKLUBAIC01Miw3ICs1NCw2IEBACi0gCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7Ci0gCQotIAltZW51YmFyID0gY3JlYXRlX21lbnVfYmFyKHdpbmRvdyk7Ci0tCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBtZW51YmFyLCBGQUxTRSwgRkFMU0UsIDApOwotIAkKLSAJc3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKLSAJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc3cpLAotCi0tLS0gdG1wL3NyYy9tYWluLmMub3JpZwkyMDA3LTA0LTIzIDEyOjE1OjAzLjAwMDAwMDAwMCArMDEwMAotKysrIHRtcC9zcmMvbWFpbi5jCTIwMDctMDQtMjMgMTI6MTU6MDMuMDAwMDAwMDAwICswMTAwCi1AQCAtMjQ0LDYgKzI0NCw3IEBACi0gCUNvbmYgKmNvbmY7Ci0gCUd0a0l0ZW1GYWN0b3J5ICppZmFjdG9yeTsKLSAJZ2NoYXIgKnN0ZGluX2RhdGEgPSBOVUxMOwotKwlHdGtXaWRnZXQgKm1lbnU7Ci0gCQotIAliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NBTEVESVIpOwotIAliaW5kX3RleHRkb21haW5fY29kZXNldChQQUNLQUdFLCAiVVRGLTgiKTsKLUBAIC0yOTMsNyArMjk0LDEwIEBACi0gCQljb25mLT5hdXRvaW5kZW50KTsKLSAJCi0gCWd0a193aWRnZXRfc2hvd19hbGwocHViLT5tdy0+d2luZG93KTsKLSsJb3dsX3NldF93aW5kb3dfbWVudSAoR1RLX1dJTkRPVyhwdWItPm13LT53aW5kb3cpLAotKwkJCSAgICAgR1RLX01FTlUocHViLT5tdy0+bWVudWJhcikpOwotKwkKLSAJZ19mcmVlKGNvbmYtPmZvbnRuYW1lKTsKLSAJZ19mcmVlKGNvbmYpOwotIAkKLQotLS0tIHRtcC9zcmMvTWFrZWZpbGUuYW0ub3JpZwkyMDA3LTA0LTIzIDEyOjE3OjU0LjAwMDAwMDAwMCArMDEwMAotKysrIHRtcC9zcmMvTWFrZWZpbGUuYW0JMjAwNy0wNC0yMyAxMjoxNzo1NC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yNyw0ICsyNyw0IEBACi0gCWkxOG4uaAotIAotIGxlYWZwYWRfQ0ZMQUdTICA9ICQoR1RLX0NGTEFHUykgJChHTk9NRVBSSU5UX0NGTEFHUykKLS1sZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykKLStsZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykgLWxvd2wKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2xlYWZwYWRfMC44LjE4LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTNiODlmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2xlYWZwYWRfMC44LjE4LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1TVU1NQVJZID0gIlNpbXBsZSBHVEsrIFRleHQgRWRpdG9yIgotSE9NRVBBR0UgPSAiaHR0cDovL3Rhcm90LmZyZWVzaGVsbC5vcmcvbGVhZnBhZC8iCi0KLUxJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbGVhZnBhZC5oO2VuZGxpbmU9MjA7bWQ1PWQzZDZhODlmNWU2MWU4YjEzYmRlYTUzNzUxMWJhMWZhIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy91dGlscy5jO2VuZGxpbmU9MjA7bWQ1PTBkMmNjNjU4NGJhMzIwMjQ0OGJiMjc0ZjYyNzM5NTcxIgotCi1ERVBFTkRTID0gImd0aysgaW50bHRvb2wtbmF0aXZlIGxpYm93bCBnZXR0ZXh0LW5hdGl2ZSIKLSMgVGhlIGxpYm93bCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1TUkNfVVJJID0gIiR7U0FWQU5OQUhfTk9OR05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotCSAgIGZpbGU6Ly9sZWFmcGFkLmRlc2t0b3AiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyNTRhNzJmYzY3NTA1ZTNhYTUyODg0YzcyOWNkN2I5NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5NTlkMjJhZTA3ZjIyODAzYmM2NmZmNDBkMzczYTg1NDUzMmE2ZTQ3MzI2ODBiZjhhOTZhM2ZiY2I5ZjgwYTJjIgotUFIgPSAicjIiCi0KLVNSQ19VUklfYXBwZW5kX3Bva3kgPSAiIGZpbGU6Ly9vd2wtbWVudS5wYXRjaDthcHBseT15ZXMgIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLUVYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtY2hvb3NlciAtLWRpc2FibGUtZW1hY3MgLS1kaXNhYmxlLXByaW50IgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucwotICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sZWFmcGFkLmRlc2t0b3AgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucwotfQotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvbGVhZnBhZC5kZXNrdG9wIgotCi1QQUNLQUdFUyArPSAibGVhZnBhZC1zdG9jay1pY29ucyIKLUZJTEVTX2xlYWZwYWQtc3RvY2staWNvbnMgPSAiJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNjNDdkYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1TVU1NQVJZID0gIk9wZW5lZEhhbmQgV2lkZ2V0IExpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dscGFuZWQuaDtlbmRsaW5lPTIwO21kNT03ZmVmODQ0YzRjYzAxYjEwNTQxYTdhYjZhYjU5NzFhZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dsdHJlZW1vZGVsc2xpY2UuaDtlbmRsaW5lPTIwO21kNT1hNTQyMWYyY2RhZThkZWJlNWU0YzQ4YzA5YTAyYmViOSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dsY29sb3Vyc3dhdGNoLmg7ZW5kbGluZT0yNDttZDU9MDYzYzQxNWM1ODcxOWQ1MzY5OTBjYThmNjA2YjU3MzAiCi0KLVNFQ1RJT04gPSAibGlicyIKLURFUEVORFMgPSAiZ3RrKyIKLVNSQ1JFViA9ICI2ZWJjOGFjOGY4NTc1Mjc4ZGQ0MGE1MzVjYWRlZmEyNjM3NGU0NGIxIgotUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi0jIFJlcXVpcmVzIGdkay9nZGt4Lmggd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaAppbmRleCA4MjU2OTQ5Li4xY2IxODRmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9maWxlcy9uby1oYW5kZWQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoCkBAIC0xLDEwICsxLDEzIEBACiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKIAotSW5kZXg6IGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMJKHJldmlzaW9uIDE2MTQpCi0rKysgYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMJKHdvcmtpbmcgY29weSkKLUBAIC0zMDAsMTEgKzMwMCwxMyBAQAorZGlmZiAtLWdpdCBhL2FwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jIGIvYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMKK2luZGV4IDZhZjgzNzYuLjcxZmQ1N2IgMTAwNjQ0CistLS0gYS9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYworKysrIGIvYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMKK0BAIC0zMTcsMTEgKzMxNywxMyBAQCBvbl9nY29uZl92YWx1ZV9jaGFuZ2VkIChHQ29uZkNsaWVudCogY2xpZW50LCBjb25zdCBnY2hhcioga2V5LCBHQ29uZlZhbHVlKiB2YWx1ZQogICAgICBndGtfZm9udF9idXR0b25fc2V0X2ZvbnRfbmFtZSAoR1RLX0ZPTlRfQlVUVE9OIChmb250X2J1dHRvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uZl92YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwogICAgfSBlbHNlIGlmIChzdHJjbXAgKGtleSwgSEFOREVEX0tFWSkgPT0gMCkgewpAQCAtMTgsMTggKzIxLDE5IEBACiAgICB9CiAgfQogIAotQEAgLTM5NSwxMiArMzk3LDEzIEBACi0gICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYWxpZ24pLCBmb250X2J1dHRvbik7CitAQCAtNDA4LDEwICs0MTAsMTIgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgCiAgICAvKiBMZWZ0L1JpZ2h0IEhhbmRlZCAqLwotLSAgCisgICAKICsjaWYgMAotICAgZnJhbWUgPSBuZXdfZnJhbWUgKF8oIk9yaWVudGF0aW9uIiksICZhbGlnbik7Ci0gICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKGJveCksIGZyYW1lLCBUUlVFLCBUUlVFLCAwKTsKICAgIGhhbmRlZF9jaGVjayA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMgKF8oIl9MZWZ0LWhhbmRlZCIpKTsKKyAgIGZyYW1lID0gbmV3X2ZyYW1lIChfKCJPcmllbnRhdGlvbiIpLGhhbmRlZF9jaGVjayk7CisgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKGJveCksIGZyYW1lLCBUUlVFLCBUUlVFLCAwKTsKICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGhhbmRlZF9jaGVjaywgInRvZ2dsZWQiLCBHX0NBTExCQUNLIChvbl9oYW5kZWRfc2V0KSwgTlVMTCk7Ci0gICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYWxpZ24pLCBoYW5kZWRfY2hlY2spOwogKyNlbmRpZgogIAogICAgZ2NvbmZfY2xpZW50X2FkZF9kaXIgKGdjb25mLCBJTlRFUkZBQ0VfRElSLCBHQ09ORl9DTElFTlRfUFJFTE9BRF9PTkVMRVZFTCwgTlVMTCk7CiAgICBnX3NpZ25hbF9jb25uZWN0IChnY29uZiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLIChvbl9nY29uZl92YWx1ZV9jaGFuZ2VkKSwgTlVMTCk7CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfMC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a18wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5M2E5NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfMC4yLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggR1RLKyB0aGVtZSBjb25maWd1cmF0aW9uIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmM7ZW5kbGluZT0yNTttZDU9ZWE5MjMzM2NmOGE2ODAyNjM5ZDYyZDg3NGMxMTRhMjgiCisKK0RFUEVORFMgPSAiZ2NvbmYgZ3RrKzMiCitSREVQRU5EU18ke1BOfSA9ICJzZXR0aW5ncy1kYWVtb24iCisKKyMgU1JDUkVWIHRhZ2dlZCAwLjIKK1NSQ1JFViA9ICJlZjIxOTJjZTk4ZDkzNzRmZmRhZDVmNzg1NDRjM2Y4ZjM1M2MxNmFhIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAorICAgICAgICAgICBmaWxlOi8vbm8taGFuZGVkLnBhdGNoIgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc2V0dGluZ3MtZGFlbW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjczYTRjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotU1VNTUFSWSA9ICJNYXRjaGJveCBHVEsrIHRoZW1lIGNvbmZpZ3VyYXRpb24gYXBwbGljYXRpb24iCi1IT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYztlbmRsaW5lPTI1O21kNT1lYTkyMzMzY2Y4YTY4MDI2MzlkNjJkODc0YzExNGEyOCIKLQotREVQRU5EUyA9ICJnY29uZiBndGsrIgotUkRFUEVORFNfJHtQTn0gPSAic2V0dGluZ3MtZGFlbW9uIgotCi1TUkNSRVYgPSAiM2VkNzRkZmI3YzU3YmUwODhhNWFiMzZlNDQ2YzBjY2RlOWZhMTAyOCIKLVBWID0gIjAuMCtnaXQke1NSQ1BWfSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAotICAgICAgICBmaWxlOi8vbm8taGFuZGVkLnBhdGNoO3N0cmlwbGV2ZWw9MCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi0jIFRoZSBzZXR0aW5ncy1kYWVtb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk3OWNiYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVU1NQVJZID0gIk1hdGNoYm94IGRlc2t0b3AgZm9sZGVycyBmb3IgdGhlIFNhdG8gZW52aXJvbm1lbnQiCi1IT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgotCi1TRUNUSU9OID0gIngxMSIKLURFUEVORFMgPSAiIgotUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1jb21tb24iCi0KLVNSQ1JFViA9ICI4MTBiMGIwOGViNzllNDY4NTIwMmRhMmVjMzQ3Yjk5MGJiNDY3ZTA3IgotUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgotUFIgPSAicjEiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy8wMDAxLURvLW5vdGhpbmctb24tZGVsZXRlLWV2ZW50LXdoZW4tbm90LVNUQU5EQUxPTkUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy8wMDAxLURvLW5vdGhpbmctb24tZGVsZXRlLWV2ZW50LXdoZW4tbm90LVNUQU5EQUxPTkUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2Mzk3ZGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvMDAwMS1Eby1ub3RoaW5nLW9uLWRlbGV0ZS1ldmVudC13aGVuLW5vdC1TVEFOREFMT05FLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotRnJvbSA1ZmUzN2VmMzg1MDBmODU4YTIyZWNkZjliZjY5YmYwNmUyMTNiZjY4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLURhdGU6IFR1ZSwgMjIgTWFyIDIwMTYgMTI6NDE6MzUgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gRG8gbm90aGluZyBvbiBkZWxldGUtZXZlbnQgd2hlbiBub3QgU1RBTkRBTE9ORQotCi1UaGlzIHByZXZlbnRzIGFuIG9wcG9ydHVuaXN0aWMgYWx0LUY0IGZyb20gY2xvc2luZyB0aGUgZGVza3RvcC4KLQotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotLS0tCi0gc3JjL2Rlc2t0b3AuYyB8IDEyICsrKysrKysrKysrLQotIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvZGVza3RvcC5jIGIvc3JjL2Rlc2t0b3AuYwotaW5kZXggZDRmYzJmYi4uOTRiNGRkZiAxMDA2NDQKLS0tLSBhL3NyYy9kZXNrdG9wLmMKLSsrKyBiL3NyYy9kZXNrdG9wLmMKLUBAIC0xMjIsNiArMTIyLDE1IEBAIGxvYWRfaXRlbXMgKFRha3VNZW51ICptZW51KQotIAotIH0KLSAKLSsjaWZuZGVmIFNUQU5EQUxPTkUKLStzdGF0aWMgZ2Jvb2xlYW4KLStkZWxldGVfZXZlbnRfY2IgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLSt7Ci0rICAvKiBwcmV2ZW50IGRlZmF1bHQgaGFuZGxlciBmcm9tIGRlc3Ryb3lpbmcgdGhlIHdpbmRvdyAqLwotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKyNlbmRpZgotKwotIHN0YXRpYyB2b2lkCi0gd29ya2FyZWFfY2hhbmdlZCAoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCi0gewotQEAgLTE0NCwxMSArMTUzLDExIEBAIGNyZWF0ZV9kZXNrdG9wICh2b2lkKQotICAgZ3RrX2ljb25fc2l6ZV9yZWdpc3RlciAoInRha3UtaWNvbiIsIDY0LCA2NCk7Ci0gCi0gICB3aW5kb3cgPSBndGtfd2luZG93X25ldyAoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0tICBnX3NpZ25hbF9jb25uZWN0ICh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLIChndGtfbWFpbl9xdWl0KSwgTlVMTCk7Ci0gICBndGtfd2lkZ2V0X3NldF9uYW1lICh3aW5kb3csICJUYWt1V2luZG93Iik7Ci0gICBndGtfd2luZG93X3NldF90aXRsZSAoR1RLX1dJTkRPVyAod2luZG93KSwgXygiRGVza3RvcCIpKTsKLSAKLSAjaWZuZGVmIFNUQU5EQUxPTkUKLSsgIGdfc2lnbmFsX2Nvbm5lY3QgKHdpbmRvdywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0sgKGRlbGV0ZV9ldmVudF9jYiksIE5VTEwpOwotICAgZ3RrX3dpbmRvd19zZXRfdHlwZV9oaW50IChHVEtfV0lORE9XICh3aW5kb3cpLCBHREtfV0lORE9XX1RZUEVfSElOVF9ERVNLVE9QKTsKLSAgIGd0a193aW5kb3dfc2V0X3NraXBfdGFza2Jhcl9oaW50IChHVEtfV0lORE9XICh3aW5kb3cpLCBUUlVFKTsKLSAKLUBAIC0xNTYsNiArMTY1LDcgQEAgY3JlYXRlX2Rlc2t0b3AgKHZvaWQpCi0gICBzY3JlZW5fdyA9IGdka19zY3JlZW5fZ2V0X3dpZHRoIChzY3JlZW4pOwotICAgc2NyZWVuX2ggPSBnZGtfc2NyZWVuX2dldF9oZWlnaHQgKHNjcmVlbik7Ci0gI2Vsc2UKLSsgIGdfc2lnbmFsX2Nvbm5lY3QgKHdpbmRvdywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0sgKGd0a19tYWluX3F1aXQpLCBOVUxMKTsKLSAgIHNjcmVlbl93ID0gNjQwOwotICAgc2NyZWVuX2ggPSA0ODA7Ci0gI2VuZGlmCi0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL0FsbC5kaXJlY3RvcnkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9BbGwuZGlyZWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYTQxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9BbGwuZGlyZWN0b3J5CkBAIC0wLDAgKzEsNSBAQAorW0Rlc2t0b3AgRW50cnldCitOYW1lPUFsbAorSWNvbj1tYmZvbGRlci5wbmcKK1R5cGU9RGlyZWN0b3J5CitNYXRjaD1tZXRhLWFsbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvQXBwbGljYXRpb25zLmRpcmVjdG9yeSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL0FwcGxpY2F0aW9ucy5kaXJlY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlMzUwMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL0FwcGxpY2F0aW9ucy5kaXJlY3RvcnkKQEAgLTAsMCArMSw2IEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9QXBwbGljYXRpb25zCitDb21tZW50PUFwcGxpY2F0aW9ucworSWNvbj1nbm9tZS1hcHBsaWNhdGlvbnMucG5nCitUeXBlPURpcmVjdG9yeQorTWF0Y2g9QXVkaW9WaWRlbztBdWRpbztWaWRlbztHcmFwaGljcztOZXR3b3JrO09mZmljZTtVdGlsaXR5O1N5c3RlbTtEZXZlbG9wbWVudDttZXRhLWZhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvR2FtZXMuZGlyZWN0b3J5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvR2FtZXMuZGlyZWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDkyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9HYW1lcy5kaXJlY3RvcnkKQEAgLTAsMCArMSw5IEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9R2FtZXMKK05hbWVbZGVdPVNwaWVsZQorQ29tbWVudD1HYW1lcyBvZiBhbGwga2luZAorQ29tbWVudFtkZV09U3BpZWxlIGFsbGVyIEFydAorSWNvbj1tYmZvbGRlci5wbmcKK1R5cGU9RGlyZWN0b3J5CitNYXRjaD1HYW1lCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL1Jvb3Qub3JkZXIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9Sb290Lm9yZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYTg2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9Sb290Lm9yZGVyCkBAIC0wLDAgKzEsNCBAQAorQXBwbGljYXRpb25zCitHYW1lcworU2V0dGluZ3MKK0FsbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvU2V0dGluZ3MuZGlyZWN0b3J5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvU2V0dGluZ3MuZGlyZWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZGUzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9TZXR0aW5ncy5kaXJlY3RvcnkKQEAgLTAsMCArMSw4IEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9U2V0dGluZ3MKK05hbWVbZGVdPUVpbnN0ZWxsdW5nZW4KK0NvbW1lbnQ9U2V0dGluZ3MgZm9yIHlvdXIgaGFuZGhlbGQgY29tcHV0ZXIKK0NvbW1lbnRbZGVdPUVpbnN0ZWxsdW5nZW4gZsO8ciBJaHJlbiBIYW5kaGVsZC1Db21wdXRlcgorSWNvbj1tYmZvbGRlci5wbmcKK1R5cGU9RGlyZWN0b3J5CitNYXRjaD1TZXR0aW5ncwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF8yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wXzIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWEyZjIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF8yLjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBXaW5kb3cgTWFuYWdlciBEZXNrdG9wIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZGVza3RvcC5jO2VuZGxpbmU9MjA7bWQ1PTM2YzliZjI5NWU2MDA3ZjM0MjMwOTVmNDA1YWY1YTJkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0xOTttZDU9MjA0NDI0NGY5N2ExOTVjMjViN2RjNjAyYWM3ZTlhMDAiCisKK0RFUEVORFMgPSAiZ3RrKzMgc3RhcnR1cC1ub3RpZmljYXRpb24gZGJ1cyIKK1NFQ1RJT04gPSAieDExL3dtIgorCisjIFNSQ1JFViB0YWdnZWQgMi4xCitTUkNSRVYgPSAiYzg0NzM1MTlhMGYzNzQ4OGI4YjNlODM5ZTI3NWIwMDBjZGRlMGI4MCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59LTIgXAorICAgICAgICAgICBmaWxlOi8vdmZvbGRlcnMvKiBcCisgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIC0td2l0aC1kYnVzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vbWF0Y2hib3gvdmZvbGRlcnMvCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdmZvbGRlcnMvKiAke0R9JHtkYXRhZGlyfS9tYXRjaGJveC92Zm9sZGVycy8KK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbWF0Y2hib3gvdmZvbGRlcnMvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJlOGMxMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVNVTU1BUlkgPSAiTWF0Y2hib3ggV2luZG93IE1hbmFnZXIgRGVza3RvcCIKLUhPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlidGFrdS9lZ2dzZXF1ZW5jZS5oO2VuZGxpbmU9MjA7bWQ1PWI5MWY2OGY3NjQyYTE0NTlmYTFmNGM5ZGY5NGE4ZjE1IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kZXNrdG9wLmM7ZW5kbGluZT0yMDttZDU9MzZjOWJmMjk1ZTYwMDdmMzQyMzA5NWY0MDVhZjVhMmQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTE5O21kNT0yMDQ0MjQ0Zjk3YTE5NWMyNWI3ZGM2MDJhYzdlOWEwMCIKLQotREVQRU5EUyA9ICJndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMiCi1TRUNUSU9OID0gIngxMS93bSIKLVNSQ1JFViA9ICI3MWUzZTZlMDQyNzFlOWQ1YTE0ZjFjMjMxZWYxMDBjN2YzMjAxMzRkIgotUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfS0yIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRG8tbm90aGluZy1vbi1kZWxldGUtZXZlbnQtd2hlbi1ub3QtU1RBTkRBTE9ORS5wYXRjaCBcCi0gICAgICAgICAgICIKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIC0td2l0aC1kYnVzIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLSMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfMC4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfMC4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1ZjEzNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF8wLjEuMS5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIk1hdGNoYm94IHZpcnR1YWwga2V5Ym9hcmQgZm9yIFgxMSIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWF0Y2hib3gta2V5Ym9hcmQuaDtlbmRsaW5lPTE3O21kNT05ZDY1ODZjNjllNGE5MjZmM2NiMGI0NDI1ZjI0YmEzYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBsZXQvYXBwbGV0LmM7ZW5kbGluZT0xODttZDU9NGEwZjcyMTcyNDc0NmIxNGQ5NWI1MWRkZDQyYjk1ZTciCisKK0RFUEVORFMgPSAibGliZmFrZWtleSBleHBhdCBsaWJ4ZnQiCisKKyNTUkNSRVYgZm9yIDAuMS4xCitTUkNSRVYgPSAiNjMwZDg5MDY4ZGMwYTFlOTE5OTMwNmQ0MDVjYjMyZjg5MmRmYTRkMyIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59O2JyYW5jaD1tYXRjaGJveC1rZXlib2FyZC0wLTEgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1kZXNrdG9wLWZpbGUtSGlkZS10aGUta2V5Ym9hcmQtZnJvbS1hcHAtbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly84MG1hdGNoYm94a2V5Ym9hcmQuc2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1pbW1vZHVsZXMtY2FjaGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnhmdCwgbGliZmFrZWtleSBhbmQgbWF0Y2hib3gtcGFuZWwtMiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWNhaXJvIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ3RrMy1pbSBhcHBsZXQiCitQQUNLQUdFQ09ORklHW2FwcGxldF0gPSAiLS1lbmFibGUtYXBwbGV0LC0tZGlzYWJsZS1hcHBsZXQsbWF0Y2hib3gtcGFuZWwtMiIKK1BBQ0tBR0VDT05GSUdbZ3RrMi1pbV0gPSAiLS1lbmFibGUtZ3RrLWltLC0tZGlzYWJsZS1ndGstaW0sZ3RrKyIKK1BBQ0tBR0VDT05GSUdbZ3RrMy1pbV0gPSAiLS1lbmFibGUtZ3RrMy1pbSwtLWRpc2FibGUtZ3RrMy1pbSxndGsrMyIKKworUEFDS0FHRVMgKz0gIiR7UE59LWltICR7UE59LWFwcGxldCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyBcCisJICAgICAgICR7c3lzY29uZmRpcn0gXAorCSAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisJICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyBcCisJICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gta2V5Ym9hcmQiCisKK0ZJTEVTXyR7UE59LWltID0gIiR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLyouc28gXAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvKi9pbW1vZHVsZXMvKi5zbyIKKworRklMRVNfJHtQTn0tYXBwbGV0ID0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIgorCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9LzgwbWF0Y2hib3hrZXlib2FyZC5zaCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvKi5sYQorCXJtIC1mICR7RH0ke2xpYmRpcn0vZ3RrLTMuMC8qL2ltbW9kdWxlcy8qLmxhCisJcm0gLWYgJHtEfSR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhCit9CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA9ICIke1BOfS1pbSIKKworUkRFUEVORFNfJHtQTn0gPSAiZm9ybWZhY3RvciBkYnVzLXdhaXQiCitSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1hcHBsZXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJhMTk3MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotU1VNTUFSWSA9ICJNYXRjaGJveCB2aXJ0dWFsIGtleWJvYXJkIGZvciBYMTEiCi1IT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLVNFQ1RJT04gPSAieDExIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21hdGNoYm94LWtleWJvYXJkLmg7ZW5kbGluZT0xNzttZDU9OWQ2NTg2YzY5ZTRhOTI2ZjNjYjBiNDQyNWYyNGJhM2MgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0L2FwcGxldC5jO2VuZGxpbmU9MTg7bWQ1PTRhMGY3MjE3MjQ3NDZiMTRkOTViNTFkZGQ0MmI5NWU3IgotCi1ERVBFTkRTID0gImxpYmZha2VrZXkgZXhwYXQgbGlieGZ0IGd0aysgbWF0Y2hib3gtcGFuZWwtMiIKLQotU1JDUkVWID0gImViYzMzMGVhYzhiOWQzOGU5YWVmOWYwMWU3MjQxYzkwNGJkMDEwNzMiCi1QViA9ICIwLjArZ2l0JHtTUkNQVn0iCi1QUiA9ICJyNCIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn07YnJhbmNoPW1hdGNoYm94LWtleWJvYXJkLTAtMSBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWRlc2t0b3AtZmlsZS1IaWRlLXRoZS1rZXlib2FyZC1mcm9tLWFwcC1saXN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzgwbWF0Y2hib3hrZXlib2FyZC5zaCIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWltbW9kdWxlcy1jYWNoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotIyBUaGUgbGlieGZ0LCBsaWJmYWtla2V5IGFuZCBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY2Fpcm8gLS1lbmFibGUtZ3RrLWltIC0tZW5hYmxlLWFwcGxldCIKLQotUEFDS0FHRVMgKz0gIiR7UE59LWltICR7UE59LWFwcGxldCIKLQotRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyBcCi0JICAgICAgICR7c3lzY29uZmRpcn0gXAotCSAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCi0JICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyBcCi0JICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gta2V5Ym9hcmQiCi0KLUZJTEVTXyR7UE59LWltID0gIiR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLyouc28iCi0KLUZJTEVTXyR7UE59LWFwcGxldCA9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyIKLQotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCi0JaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS84MG1hdGNoYm94a2V5Ym9hcmQuc2ggJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLwotCi0Jcm0gLWYgJHtEfSR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLyoubGEKLQlybSAtZiAke0R9JHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEKLX0KLQotR1RLSU1NT0RVTEVTX1BBQ0tBR0VTID0gIiR7UE59LWltIgotCi1SREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIGRidXMtd2FpdCIKLVJSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LWFwcGxldCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzLzAwMDEtYXBwbGV0cy1zeXN0cmF5LUFsbG93LWljb25zLXRvLWJlLXNtYWxsZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy8wMDAxLWFwcGxldHMtc3lzdHJheS1BbGxvdy1pY29ucy10by1iZS1zbWFsbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxM2RkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy8wMDAxLWFwcGxldHMtc3lzdHJheS1BbGxvdy1pY29ucy10by1iZS1zbWFsbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZjgzYTkxNzk2OTZiMmQwNjBlZTQ4NjA3MzNkYWZiZjM4YmJkNGI4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDI4IFNlcCAyMDE2IDE1OjA1OjQxICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFwcGxldHMvc3lzdHJheTogQWxsb3cgaWNvbnMgdG8gYmUgc21hbGxlcgorCitEb24ndCBleHBhbmQvZmlsbCB0aGUgc3lzdHJheSBpdGVtcywgYWxpZ24gdGhlbSBpbiB0aGUgY2VudGVyIG9mIHRoZQorc3lzdHJheSBwYW5lbC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBpY29ucyBhcmUgZHJhd24gYXQgdGhlIHNpemUgdGhleQorZXhwZWN0LgorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKy0tLQorIGFwcGxldHMvc3lzdHJheS9zeXN0cmF5LmMgfCA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FwcGxldHMvc3lzdHJheS9zeXN0cmF5LmMgYi9hcHBsZXRzL3N5c3RyYXkvc3lzdHJheS5jCitpbmRleCAzOTY5OGE4Li45NGE1NzUzIDEwMDY0NAorLS0tIGEvYXBwbGV0cy9zeXN0cmF5L3N5c3RyYXkuYworKysrIGIvYXBwbGV0cy9zeXN0cmF5L3N5c3RyYXkuYworQEAgLTI5LDggKzI5LDkgQEAgb25fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIHVzZXJfZGF0YSkKKyAgIHRyYXkgPSAoR3RrV2lkZ2V0ICopbmFfdHJheV9uZXdfZm9yX3NjcmVlbiAoc2NyZWVuLCBvcmllbnRhdGlvbik7CisgCisgICBndGtfd2lkZ2V0X3Nob3cgKHRyYXkpOworLQorLSAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHdpZGdldCksIHRyYXkpOworKyAgZ3RrX3dpZGdldF9zZXRfdmFsaWduICh0cmF5LCBHVEtfQUxJR05fQ0VOVEVSKTsKKysgIGd0a193aWRnZXRfc2V0X2hhbGlnbiAodHJheSwgR1RLX0FMSUdOX0NFTlRFUik7CisrICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKHdpZGdldCksIHRyYXksIEZBTFNFLCBGQUxTRSwgMCk7CisgfQorIAorIEdfTU9EVUxFX0VYUE9SVCBHdGtXaWRnZXQgKgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy8wMDAxLXNob3dkZXNrdG9wLU1ha2Utc3VyZS1hY3RpdmUtc3RhdGUtaXMtaW5pdGlhbGl6ZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy8wMDAxLXNob3dkZXNrdG9wLU1ha2Utc3VyZS1hY3RpdmUtc3RhdGUtaXMtaW5pdGlhbGl6ZWQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYWI2ZDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvMDAwMS1zaG93ZGVza3RvcC1NYWtlLXN1cmUtYWN0aXZlLXN0YXRlLWlzLWluaXRpYWxpemVkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotRnJvbSBhMGI1ZmNhMDRkYTIwODk5MGYzYzQwZTY1ZGJiMDQ1ZGE0Y2RiMzVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLURhdGU6IFN1biwgMjAgTWFyIDIwMTYgMTM6MjQ6MzcgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gc2hvd2Rlc2t0b3A6IE1ha2Ugc3VyZSBhY3RpdmUgc3RhdGUgaXMgaW5pdGlhbGl6ZWQKLQotVGhlcmUgYXJlIGNhc2VzIChpbiBxZW11IGF0IGxlYXN0KSB3aGVyZSBzZXRfYWN0aXZlKCkKLWlzIG5ldmVyIGNhbGxlZCBvbiBzdGFydHVwLiBNYWtlIHN1cmUgd2UgaW5pdGlhbGl6ZSB0aGUgYWN0aXZlCi1zdGF0ZSBzbyB0aGUgaWNvbiBnZXRzIGxvYWRlZCBhbmQgdGhlIGFwcGxldCBpcyBub3QgY29uZnVzZWQKLWFib3V0IHRoZSBjdXJyZW50IHN0YXRlLgotCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0tLS0KLSBhcHBsZXRzL3Nob3dkZXNrdG9wL3Nob3dkZXNrdG9wLmMgfCAxMCArKysrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2FwcGxldHMvc2hvd2Rlc2t0b3Avc2hvd2Rlc2t0b3AuYyBiL2FwcGxldHMvc2hvd2Rlc2t0b3Avc2hvd2Rlc2t0b3AuYwotaW5kZXggNjFkZDVjMi4uMzNjMTNlMSAxMDA2NDQKLS0tLSBhL2FwcGxldHMvc2hvd2Rlc2t0b3Avc2hvd2Rlc2t0b3AuYwotKysrIGIvYXBwbGV0cy9zaG93ZGVza3RvcC9zaG93ZGVza3RvcC5jCi1AQCAtMTgxLDYgKzE4MSwxMiBAQCBidXR0b25fY2xpY2tlZF9jYiAoR3RrQnV0dG9uICAgICAgICAgKmJ1dHRvbiwKLSAJICAgICAgICAgICAgJnhldik7Ci0gfQotIAotK3N0YXRpYyB2b2lkCi0rcmVhbGl6ZV9jYiAoR3RrV2lkZ2V0ICpidXR0b24sIFNob3dEZXNrdG9wQXBwbGV0ICphcHBsZXQpCi0rewotKyAgICAgICAgc3luY19hcHBsZXQgKGFwcGxldCk7Ci0rfQotKwotIEdfTU9EVUxFX0VYUE9SVCBHdGtXaWRnZXQgKgotIG1iX3BhbmVsX2FwcGxldF9jcmVhdGUgKGNvbnN0IGNoYXIgICAgKmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotQEAgLTIxNiw2ICsyMjIsMTAgQEAgbWJfcGFuZWxfYXBwbGV0X2NyZWF0ZSAoY29uc3QgY2hhciAgICAqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpY2tlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLIChidXR0b25fY2xpY2tlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsZXQpOwotKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCAoYnV0dG9uLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxpemUiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyAocmVhbGl6ZV9jYiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsZXQpOwotIAotICAgICAgICAgZ19vYmplY3Rfd2Vha19yZWYgKEdfT0JKRUNUIChidXR0b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHV2Vha05vdGlmeSkgc2hvd19kZXNrdG9wX2FwcGxldF9mcmVlLAotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDViYTlhMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotRG9uJ3Qgd2FybiBpZiB0aGUgbWFjaGluZSBkb2Vzbid0IGFjdHVhbGx5IGhhdmUgYSBiYXR0ZXJ5LCBvciBpZiB0aGUgYXBwbGV0cwotc3RyaW5nIGNvbnRhaW5zIGNvbnNlY3V0aXZlIHNlcGFyYXRvcnMuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLWRpZmYgLS1naXQgYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMKLWluZGV4IDY1MTVjYjAuLmM0NGRkMTIgMTAwNjQ0Ci0tLS0gYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMKLSsrKyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYwotQEAgLTE0LDggKzE0LDYgQEAgaW50IGJhdHRfc3RhdGUsIGFjX3N0YXRlOwotIGludCBwbV9zdXBwb3J0KHZvaWQpCi0gewotIAlpZihjaGVja19hY3BpX3N1cHBvcnQoKSA9PSBOT1RfU1VQUE9SVEVEKXsKLS0JCWdfd2FybmluZygiTm8gQUNQSSBzdXBwb3J0XG4iKTsKLS0KLSAJCXJldHVybiAwOwotIAl9Ci0gCi1AQCAtMzIsOCArMzAsOSBAQCBjb25zdCBjaGFyKiBwbV9iYXR0ZXJ5X2ljb24odm9pZCkKLSAJY29uc3QgY2hhciAqaWNvbjsKLSAJYmF0dGVyeV90ICpiaW5mbzsKLSAKLSsgICAgICAgIC8qIE5vIGJhdHRlcnkgYXZhaWxhYmxlIChub3QgcHJlc2VudCwgZGlzYWJsZWQsIG9yIHNvbWV0aGluZwotKyAgICAgICAgICAgZWxzZS4gU2lsZW50bHkgZG8gbm90aGluZy4gKi8KLSAJaWYgKGJhdHRfc3RhdGUgIT0gU1VDQ0VTUykgewotLQkJZ193YXJuaW5nKCJDb3VsZG50IGluaXRpYWxpemUgQUNQSSBiYXR0ZXJ5XG4iKTsKLSAJCXJldHVybiBOVUxMOwotIAl9Ci0gCi1kaWZmIC0tZ2l0IGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYwotaW5kZXggNTQ2NzQzOC4uMmYzOWNiNiAxMDA2NDQKLS0tLSBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCi0rKysgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYwotQEAgLTEwLDggKzEwLDYgQEAKLSBpbnQgcG1fc3VwcG9ydCh2b2lkKQotIHsKLSAJaWYgKDEgPT0gYXBtX2V4aXN0cyAoKSkgewotLSAgICAgICAgICAgICAgICBnX3dhcm5pbmcgKCJObyBBUE0gc3VwcG9ydCIpOwotLQotICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgIH0KLSAKLWRpZmYgLS1naXQgYS9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jIGIvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYwotaW5kZXggMmQ4Y2FmZC4uODI4YTM2ZCAxMDA2NDQKLS0tLSBhL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMKLSsrKyBiL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMKLUBAIC0xMTAsMTAgKzExMCwxNSBAQCBsb2FkX2FwcGxldHMgKGNvbnN0IGNoYXIgICAgKmFwcGxldHNfZGVzYywKLSAgICAgICAgIGFwcGxldHMgPSBnX3N0cnNwbGl0IChhcHBsZXRzX2Rlc2MsICIsIiwgLTEpOwotIAotICAgICAgICAgZm9yIChpID0gMDsgYXBwbGV0c1tpXTsgaSsrKSB7Ci0rICAgICAgICAgICAgICAgIGNoYXIgKnM7Ci0gICAgICAgICAgICAgICAgIGNoYXIgKipiaXRzOwotICAgICAgICAgICAgICAgICBHdGtXaWRnZXQgKmFwcGxldDsKLSAKLS0gICAgICAgICAgICAgICAgYml0cyA9IGdfc3Ryc3BsaXQgKGFwcGxldHNbaV0sICI6IiwgMik7Ci0rICAgICAgICAgICAgICAgIHMgPSBhcHBsZXRzW2ldOwotKyAgICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMIHx8IHNbMF0gPT0gJ1wwJykKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSsKLSsgICAgICAgICAgICAgICAgYml0cyA9IGdfc3Ryc3BsaXQgKHMsICI6IiwgMik7Ci0gCi0gICAgICAgICAgICAgICAgIGFwcGxldCA9IGxvYWRfYXBwbGV0IChiaXRzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1sxXSwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfMi4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfMi4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhlN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl8yLjExLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIEdUSysgYmFzZWQgcGFuZWwgZm9yIGhhbmRoZWxkIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5oO2VuZGxpbmU9MTA7bWQ1PTBiN2RiMjhmNGI2ODYzZmI4NTNkMDQ2N2U1OTAwMTlhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGxldHMvc3RhcnR1cC9zdGFydHVwLmM7ZW5kbGluZT0yMjttZDU9N2NiY2VhNjBiNjY3ZjYwOTQ5NTIyMmZhZjNlMDc5MTciCisKK0RFUEVORFMgPSAiZ25vbWUtY29tbW9uIGd0ayszIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMgZGJ1cy1nbGliIGRidXMtZ2xpYi1uYXRpdmUiCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYWNwaSIsICJsaWJhY3BpIiwgIiIsZCl9IgorREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICJhcG1kIiwgIiIsZCl9IgorCisjIFRoZSBzdGFydHVwLW5vdGlmaWNhdGlvbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjIFNSQ1JFViB0YWdnZWQgMi4xMQorU1JDUkVWID0gIjg1MGQ1ZmZmZGU3ZGJmYjMyMDE1OTE2NTI0ZDg4MDE0Y2MyY2ZiMzAiCisKK1JQUk9WSURFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKK1JSRVBMQUNFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXBwbGV0cy1zeXN0cmF5LUFsbG93LWljb25zLXRvLWJlLXNtYWxsZXIucGF0Y2ggXAorICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiAtLWVuYWJsZS1kYnVzIgorRVhUUkFfT0VDT05GICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYWNwaSIsICItLXdpdGgtYmF0dGVyeT1hY3BpIiwgIiIsZCl9IgorRVhUUkFfT0VDT05GICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgIi0td2l0aC1iYXR0ZXJ5PWFwbSIsICIiLGQpfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LXBhbmVsL2JyaWdodG5lc3MvKi5wbmcgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gtcGFuZWwvc3RhcnR1cC8qLnBuZyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy8iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGMzYWU0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotU1VNTUFSWSA9ICJTaW1wbGUgR1RLKyBiYXNlZCBwYW5lbCBmb3IgaGFuZGhlbGQgZGV2aWNlcyIKLUhPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmg7ZW5kbGluZT0xMDttZDU9MGI3ZGIyOGY0YjY4NjNmYjg1M2QwNDY3ZTU5MDAxOWEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0cy9zdGFydHVwL3N0YXJ0dXAuYztlbmRsaW5lPTIyO21kNT1iMGE2NGZiZWYzMDk3ZDc5ZjgyNjRlNjkwN2E5OGYwMyIKLQotREVQRU5EUyA9ICJnbm9tZS1jb21tb24gZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIGRidXMtZ2xpYiIKLURFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgImxpYmFjcGkiLCAiIixkKX0iCi1ERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgImFwbWQiLCAiIixkKX0iCi0KLSMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVNSQ1JFViA9ICIyNmEzYTY3YjQxYzUwZTBhZTE2M2Q4ZmU4NmNjZjdhMGYwYTY3MWFlIgotUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgotCi1SUFJPVklERVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCi1SUkVQTEFDRVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCi1SQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXNob3dkZXNrdG9wLU1ha2Utc3VyZS1hY3RpdmUtc3RhdGUtaXMtaW5pdGlhbGl6ZWQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vc2lsZW5jZS13YXJuaW5ncy5wYXRjaCIKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIC0tZW5hYmxlLWRidXMiCi1FWFRSQV9PRUNPTkYgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgIi0td2l0aC1iYXR0ZXJ5PWFjcGkiLCAiIixkKX0iCi1FWFRSQV9PRUNPTkYgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhcG0iLCAiLS13aXRoLWJhdHRlcnk9YXBtIiwgIiIsZCl9IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28gXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gtcGFuZWwvYnJpZ2h0bmVzcy8qLnBuZyBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1wYW5lbC9zdGFydHVwLyoucG5nICIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9pbmRleC50aGVtZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9pbmRleC50aGVtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI2MGNmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL2luZGV4LnRoZW1lCkBAIC0wLDAgKzEsNyBAQAorW1gtR05PTUUtTWV0YXRoZW1lXQorRW5jb2Rpbmc9VVRGLTgKK1R5cGU9WC1HTk9NRS1NZXRhdGhlbWUKK05hbWU9U2F0bworR3RrVGhlbWU9QWR3YWl0YQorSWNvblRoZW1lPVNhdG8KK01hdGNoYm94VGhlbWU9U2F0bwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL3Nlc3Npb24gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgppbmRleCA0MmNlNDgzLi5mNjMxM2JkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgpAQCAtMTQsMTEgKzE0LDYgQEAKICAgICBLRVlCT0FSRF9BUFBMRVQ9ImtleWJvYXJkIgogZmkKIAotIyBUZWxsIEdUSyszIHdlIHJlYWxseSB3YW50IHNlcnZlciBzaWRlIGRlY29yYXRpb25zLCBldmVuIHdpdGgKLSMgR3RrSGVhZGVyQmFyIHVzaW5nIGFwcGxpY2F0aW9uczogV2l0aG91dCB0aGF0IG1iLXBhbmVsIHdpbGwgcmVuZGVyCi0jIG9uIHRvcCBvZiB0aGUgY2xpZW50IHNpZGUgZGVjb3JhdGlvbnMuCi1leHBvcnQgR1RLX0NTRD0wCi0KIG1hdGNoYm94LWRlc2t0b3AgJgogCiAjIExpbmVzIGNvbnRhaW5pbmcgZmVhdHVyZS1bZm9vXSBhcmUgcmVtb3ZlZCBhdCBidWlsZCB0aW1lIGlmIHRoZSBtYWNoaW5lCkBAIC0yOCw2ICsyMyw2IEBACiBFTkRfQVBQTEVUUz1jbG9jayxiYXR0ZXJ5LCRLRVlCT0FSRF9BUFBMRVQsc3lzdHJheSxzdGFydHVwLW5vdGlmeSxub3RpZnkKIEVORF9BUFBMRVRTPW9wZW5tb2tvLXBhbmVsLWdzbSwkRU5EX0FQUExFVFMgIyBmZWF0dXJlLXBob25lCiAKLW1hdGNoYm94LXBhbmVsIC0tdGl0bGViYXIgLS1zdGFydC1hcHBsZXRzICRTVEFSVF9BUFBMRVRTIC0tZW5kLWFwcGxldHMgJEVORF9BUFBMRVRTICYKK21hdGNoYm94LXBhbmVsIC0tc3RhcnQtYXBwbGV0cyAkU1RBUlRfQVBQTEVUUyAtLWVuZC1hcHBsZXRzICRFTkRfQVBQTEVUUyAmCiAKLWV4ZWMgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIgLXRoZW1lIFNhdG8gLXVzZV9kZXNrdG9wX21vZGUgZGVjb3JhdGVkIC11c2VfY3Vyc29yICRTSE9XQ1VSU09SICRACitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIC10aGVtZSBTYXRvIC11c2VfY3Vyc29yICRTSE9XQ1VSU09SICRACmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG9fMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvXzAuMS5iYgppbmRleCA3NmRlMThhLi40MmM3NDJmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG9fMC4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKQEAgLTcsNyArNyw3IEBACiAKIFNFQ1RJT04gPSAieDExIgogREVQRU5EUyA9ICJnY29uZi1uYXRpdmUiCi1SREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIGd0ay1zYXRvLWVuZ2luZSBtYXRjaGJveC10aGVtZS1zYXRvIGd0ay10aGVtZS1zYXRvIG1hdGNoYm94LXBhbmVsLTIgbWF0Y2hib3gtZGVza3RvcC1zYXRvIG1hdGNoYm94LXNlc3Npb24gZ2NvbmYiCitSREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIG1hdGNoYm94LXRoZW1lLXNhdG8gbWF0Y2hib3gtcGFuZWwtMiBtYXRjaGJveC1kZXNrdG9wIG1hdGNoYm94LXNlc3Npb24gZ2NvbmYiCiBQUiA9ICJyMzAiCiAKICMgVGhpcyBwYWNrYWdlIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBiZWNhdXNlIHRoZSBzZXNzaW9uIHNjcmlwdCBpcyBtb2RpZmllZApAQCAtMTksOSArMTksMTIgQEAKICMgVGhlIG1hdGNoYm94LXRoZW1lLXNhdG8gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKIAotU1JDX1VSSSA9ICJmaWxlOi8vc2Vzc2lvbiIKK1NSQ19VUkkgPSAiZmlsZTovL3Nlc3Npb24gXAorICAgICAgICAgICBmaWxlOi8vaW5kZXgudGhlbWUiCiBTID0gIiR7V09SS0RJUn0iCiAKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3RoZW1lcy9TYXRvL2luZGV4LnRoZW1lIgorCiBkb19pbnN0YWxsKCkgewogCSMgVGhpcyBpcyB0aGUgc2V0IG9mIG1hY2hpbmUgZmVhdHVyZXMgdGhhdCB0aGUgc2NyaXB0IGhhcyBtYXJrZXJzIGZvcgogCUZFQVRVUkVTPSJwaG9uZSIKQEAgLTM0LDYgKzM3LDcgQEAKIAkJZmkKIAlkb25lCiAKKwlpbnN0YWxsIC1EICR7U30vaW5kZXgudGhlbWUgJHtEfS8ke2RhdGFkaXJ9L3RoZW1lcy9TYXRvL2luZGV4LnRoZW1lCiAJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbWF0Y2hib3gKIAlzZWQgLWYgIiRTQ1JJUFQiICR7U30vc2Vzc2lvbiA+ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCiAgICAgICAgIGNobW9kICt4ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCkBAIC00NCw3ICs0OCw4IEBACiAJCSN0eXBlLCBuYW1lLCB2YWx1ZQogCQlnY29uZnRvb2wtMiAtLWNvbmZpZy1zb3VyY2U9eG1sOjokRCR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLmRlZmF1bHRzIC0tZGlyZWN0IC0tdHlwZSAkMSAtLXNldCAvZGVza3RvcC9wb2t5L2ludGVyZmFjZS8kMiAiJDMiCiAJfQotCXNldF92YWx1ZSBzdHJpbmcgdGhlbWUgU2F0bworCXNldF92YWx1ZSBzdHJpbmcgdGhlbWUgQWR3YWl0YQorCXNldF92YWx1ZSBzdHJpbmcgbWF0Y2hib3hfdGhlbWUgU2F0bwogCXNldF92YWx1ZSBzdHJpbmcgaWNvbl90aGVtZSBTYXRvCiAJc2V0X3ZhbHVlIGJvb2wgdG91Y2hzY3JlZW4gdHJ1ZQogCXNldF92YWx1ZSBzdHJpbmcgZm9udF9uYW1lICJTYW5zIDkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRlcm1pbmFsL21hdGNoYm94LXRlcm1pbmFsXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDg4MTkxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRlcm1pbmFsL21hdGNoYm94LXRlcm1pbmFsXzAuMS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkxpZ2h0d2VpZ2h0IEdUSysgdGVybWluYWwgYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTIwO21kNT05NmUzOTE3NmQ5ZTM1NTYzOWEwYjhiMWM3YTg0MDgyMCIKKworREVQRU5EUyA9ICJndGsrMyB2dGUiCitTRUNUSU9OID0gIngxMS91dGlscyIKKworI1NSQ1JFViB0YWdnZWQgMC4xCitTUkNSRVYgPSAiM2FkMzU3ZGIyMzAyNzYwYjhhODgxN2I1ZjQ0NzhkZDg3NDc5NDQyZiIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzNESVNUUk9GRUFUVVJFU30iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRlcm1pbmFsL21hdGNoYm94LXRlcm1pbmFsX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhjYmQ1Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWdodHdlaWdodCBHVEsrIHRlcm1pbmFsIGFwcGxpY2F0aW9uIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0yMDttZDU9OTZlMzkxNzZkOWUzNTU2MzlhMGI4YjFjN2E4NDA4MjAiCi0KLURFUEVORFMgPSAiZ3RrKyB2dGUiCi1TRUNUSU9OID0gIngxMS91dGlscyIKLVNSQ1JFViA9ICI0NTJiY2EyNTM0OTJhOTdhNTg3ZjQ0MDI4OWI5YWIyN2QyMTczNTNlIgotUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2Nzg2ZGQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXJlcXVpcmUgbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKLQotUFIgPSAicjEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3Bva3lsaW51eC5vcmcvcmVsZWFzZXMvc2F0by9tYXRjaGJveC10aGVtZS1zYXRvLTAuMS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI3MmFlMjcyZWY3ODAzMTQxYTNkY2I2OWU2NzBjZmY5NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1YjU5Zjk2NDZlZGJmYjkwN2EzMDkzMzJkYjNiZDZmYTcwODBkYzFmZTI0ZGY1NDk0ODBjZmFlN2Q5NzRhM2ZiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTA0M2QzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjIuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIG1hdGNoYm94LXRoZW1lLXNhdG8uaW5jCisKKyMgU1JDUkVWIHRhZ2dlZCAwLjIKK1NSQ1JFViA9ICJkZjA4NWJhOWNkYWVhZjI5NTY4OTBiMGUyOWQ3ZWExNzc5YmY2Yzc4IgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tYXRjaGJveC1zYXRvIgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDM1NjlkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotcmVxdWlyZSBtYXRjaGJveC10aGVtZS1zYXRvLmluYwotCi1TUkNSRVYgPSAiZjcyY2Y0ZWQ3ZDcxYWQ5ZTQ3YjBmMmQzZGJjNTkzYmMyZjNlNzZmOCIKLVBWID0gIjAuMitnaXQke1NSQ1BWfSIKLQotREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXNhdG8iCi0KLUVYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncXZnYScsICctLXdpdGgtbW9kZT1xdmdhJywgJycsZCl9IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYgppbmRleCA4YmE0OTIzLi42ZmIxYjY3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYgpAQCAtMyw3ICszLDYgQEAKICMKIAogU1VNTUFSWSA9ICJTYXRvIGRlc2t0b3AiCi1MSUNFTlNFID0gIk1JVCIKIFBSID0gInIzMyIKIAogUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKQEAgLTMxLDkgKzMwLDggQEAKICAgICBtYXRjaGJveC1rZXlib2FyZC1pbSBcCiAgICAgbWF0Y2hib3gtY29uZmlnLWd0ayBcCiAgICAgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZSBcCi0gICAgc2F0by1pY29uLXRoZW1lIFwKKyAgICBhZHdhaXRhLWljb24tdGhlbWUgXAogICAgIHNldHRpbmdzLWRhZW1vbiBcCi0gICAgZ3RrLXNhdG8tZW5naW5lIFwKICAgICBzaHV0ZG93bi1kZXNrdG9wIFwKICAgICBsaWJzZGwgXAogICAgICR7TkVUV09SS19NQU5BR0VSfSBcCkBAIC00OCw4ICs0Niw4IEBACiAKIFNVTU1BUllfJHtQTn0tYXBwcyA9ICJTYXRvIGRlc2t0b3AgLSBhcHBsaWNhdGlvbnMiCiBSREVQRU5EU18ke1BOfS1hcHBzID0gIlwKLSAgICBsZWFmcGFkIFwKLSAgICBnc3QtcGxheWVyLWJpbiBcCisgICAgbDNhZnBhZCBcCisgICAgZ3N0LXBsYXllciBcCiAgICAgbWF0Y2hib3gtdGVybWluYWwgXAogICAgIHNhdG8tc2NyZWVuc2hvdCBcCiAgICAgJHtGSUxFTUFOQUdFUn0gXApAQCAtNTgsNSArNTYsNSBAQAogCiBTVU1NQVJZXyR7UE59LWdhbWVzID0gIlNhdG8gZGVza3RvcCAtIGdhbWVzIgogUkRFUEVORFNfJHtQTn0tZ2FtZXMgPSAiXAotICAgIG9oLXB1enpsZXMgXAorICAgIHB1enpsZXMgXAogICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL3BjbWFuZm1fMS4yLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi40LmJiCmluZGV4IGE2YjBhYWMuLmE2YmYyMTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL3BjbWFuZm1fMS4yLjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vcGNtYW5mbV8xLjIuNC5iYgpAQCAtNyw4ICs3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9nc2VhbC1ndGstY29tcGF0Lmg7ZW5kbGluZT0yMTttZDU9NDY5MjJjODY5MWY1OGQxMjRmOTQyMGZlMTYxNDljZTIiCiAKIFNFQ1RJT04gPSAieDExIgotREVQRU5EUyA9ICJndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGxpYmZtIGludGx0b29sLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKLURFUEVORFNfYXBwZW5kX3Bva3kgPSAiIGxpYm93bCIKK0RFUEVORFMgPSAiZ3RrKzMgc3RhcnR1cC1ub3RpZmljYXRpb24gbGliZm0gaW50bHRvb2wtbmF0aXZlIGdldHRleHQtbmF0aXZlIgogCiAKIENPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKnxtaXBzLip8cG93ZXJwYy4qfHNoLiopLShsaW51eHxmcmVlYnNkLiopJwpAQCAtMzAsNiArMjksOCBAQAogIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKIAorRVhUUkFfT0VDT05GID0gIi0td2l0aC1ndGs9MyIKKwogZG9faW5zdGFsbF9hcHBlbmQgKCkgewogCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9CiAJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcy8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTJjM2FiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotVGhpcyBwYXRjaCBlbmFibGUgb3dsIG1lbnUsIHdoaWNoIGlzIGhpZGRlbiBpbiB0aGUgdGl0bGUgYmFyIHRvIHNhdmUgc3BhY2Ugb24KLXNtYWxsIHNjcmVlbi4gSXQgaGFzIG5vdCBiZWVuIHVzZWQgZm9yIGEgbG9uZyB0aW1lLCByZWJhc2UgbmVlZGVkLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQotCi1JbmRleDogc3JjL2d0ay5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gc3JjL2d0ay5jCShyZXZpc2lvbiAyMikKLSsrKyBzcmMvZ3RrLmMJKHdvcmtpbmcgY29weSkKLUBAIC0yOCw2ICsyOCw4IEBACi0gI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0gI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgotIAotKyNpbmNsdWRlIDxsaWJvd2wvb3dsd2luZG93bWVudS5oPgotKwotICNpbmNsdWRlIDxsaWJyc3ZnL3JzdmcuaD4KLSAKLSAjaW5jbHVkZSA8WDExL1hsaWIuaD4KLUBAIC0xMjM3LDYgKzEyMzksNyBAQAotICAgICB9Ci0gfQotIAotKyNpZiAwCi0gc3RhdGljIHZvaWQKLSBhZGRfd2lkZ2V0IChHdGtVSU1hbmFnZXIgKm1lcmdlLAotIAkgICAgR3RrV2lkZ2V0ICp3aWRnZXQsCi1AQCAtMTI0NywxMCArMTI1MCwxMSBAQAotICAgICBndGtfYm94X3BhY2tfc3RhcnQgKGJveCwgd2lkZ2V0LCBGQUxTRSwgRkFMU0UsIDApOwotIAotICAgICB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsIChHVEtfV0lER0VUIChib3gpKTsKLS0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCAodG9wbGV2ZWwpOwotIH0KLSsjZW5kaWYKLSAKLSBzdGF0aWMgR3RrQWN0aW9uRW50cnkgdG9wbGV2ZWxfYWN0aW9uc1tdID0gewotKyAgICB7ICJUb3AiLCBOVUxMLCAiIiB9LAotICAgICB7ICJHYW1lIiwgTlVMTCwgTl8oIkdhbWUiKSB9LAotICAgICB7ICJTZXR0aW5ncyIsIE5VTEwsIE5fKCJTZXR0aW5ncyIpIH0sCi0gICAgIHsgIkhlbHAiLCBOVUxMLCBOXygiSGVscCIpIH0sCi1AQCAtMTMwMywxMSArMTMwNywxMyBAQAotIAkJCWZyb250ZW5kICpmZSkKLSB7Ci0gICAgIEdTdHJpbmcgKnhtbDsKLSsgICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgIGdib29sZWFuIHByZXNldHMgPSBGQUxTRTsKLSAgICAgR1NMaXN0ICpyYWRpb19ncm91cCA9IE5VTEw7Ci0gICAgIGludCBpOwotIAotLSAgICB4bWwgPSBnX3N0cmluZ19uZXcgKCI8dWk+PG1lbnViYXI+PHBsYWNlaG9sZGVyIG5hbWU9XCJUeXBlUGxhY2Vob2xkZXJcIj4iCi0rICAgIHhtbCA9IGdfc3RyaW5nX25ldyAoIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiVG9wTWVudVwiIGFjdGlvbj1cIlRvcFwiPiIKLSsJCQkiPHBsYWNlaG9sZGVyIG5hbWU9XCJUeXBlUGxhY2Vob2xkZXJcIj4iCi0gCQkJIjxtZW51IG5hbWU9XCJTZXR0aW5nc01lbnVcIiBhY3Rpb249XCJTZXR0aW5nc1wiPiIpOwotIAotICAgICBmb3IgKGkgPSAwOyBpIDwgbWlkZW5kX251bV9wcmVzZXRzKGZlLT5tZSk7IGkrKykgewotQEAgLTEzNTksOCArMTM2NSwxNCBAQAotIAkJCSAiPG1lbnVpdGVtIG5hbWU9XCJDdXN0b21NZW51XCIgYWN0aW9uPVwiQ3VzdG9tXCIvPiIpOwotICAgICB9Ci0gICAgIAotLSAgICBnX3N0cmluZ19hcHBlbmQgKHhtbCwgIjwvbWVudT48L3BsYWNlaG9sZGVyPjwvbWVudWJhcj48L3VpPiIpOwotLSAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCB4bWwtPnN0ciwgLTEsIE5VTEwpOwotKyAgICBnX3N0cmluZ19hcHBlbmQgKHhtbCwgIjwvbWVudT48L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnViYXI+PC91aT4iKTsKLSsKLSsgICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgeG1sLT5zdHIsIC0xLCAmZXJyb3IpOwotKyAgICBpZiAoZXJyb3IgIT0gTlVMTCkgewotKwlnX3dhcm5pbmcgKCJFcnJvciBhZGRpbmcgY3VzdG9tOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSsJZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0rICAgIH0KLSsKLSAgICAgZ19zdHJpbmdfZnJlZSAoeG1sLCBUUlVFKTsKLSB9Ci0gCi1AQCAtMTQzNCw2ICsxNDQ2LDcgQEAKLSBuZXdfd2luZG93KGNoYXIgKmFyZywgY2hhciAqKmVycm9yKQotIHsKLSAgICAgZnJvbnRlbmQgKmZlOwotKyAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gICAgIEd0a0JveCAqdmJveDsKLSAgICAgR3RrVUlNYW5hZ2VyICptZXJnZTsKLSAgICAgR3RrQWN0aW9uR3JvdXAgKmFjdGlvbnM7Ci1AQCAtMTQ5Niw4ICsxNTA5LDYgQEAKLSAgICAgZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyhmZS0+d2luZG93KSwgZmUtPmFjY2VsZ3JvdXApOwotIAotICAgICBtZXJnZSA9IGd0a191aV9tYW5hZ2VyX25ldyAoKTsKLS0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKG1lcmdlKSwgImFkZF93aWRnZXQiLAotLQkJICAgICAgR19DQUxMQkFDSyAoYWRkX3dpZGdldCksIHZib3gpOwotIAotICAgICBhY3Rpb25zID0gZ3RrX2FjdGlvbl9ncm91cF9uZXcgKCJQdXp6bGVBY3Rpb25zIik7Ci0gICAgIGd0a19hY3Rpb25fZ3JvdXBfYWRkX2FjdGlvbnMgKGFjdGlvbnMsIHRvcGxldmVsX2FjdGlvbnMsCi1AQCAtMTUwOSwyMiArMTUyMCwzOSBAQAotIAotICAgICBndGtfdWlfbWFuYWdlcl9pbnNlcnRfYWN0aW9uX2dyb3VwIChtZXJnZSwgYWN0aW9ucywgMCk7Ci0gICAgIAotLSAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9maWxlIChtZXJnZSwgREFUQURJUiAiL29oLXB1enpsZXMvdWkvbWVudS54bWwiLCBOVUxMKTsKLSsgICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fZmlsZSAobWVyZ2UsIERBVEFESVIgIi9vaC1wdXp6bGVzL3VpL21lbnUueG1sIiwgCi0rCQkJCSAgICAgJmVycik7Ci0rICAgIGlmIChlcnIgIT0gTlVMTCkgewotKwlnX3dhcm5pbmcgKCJFcnJvciBtYWtpbmcgVUk6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSsJZ19lcnJvcl9mcmVlIChlcnIpOwotKwllcnIgPSBOVUxMOwotKyAgICB9Ci0gCi0gICAgIGlmICh0aGVnYW1lLmNhbl9zb2x2ZSkgewotLQkgICAgY2hhciAqc3RyID0gIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiR2FtZU1lbnVcIiBhY3Rpb249XCJHYW1lXCI+IgotKwljaGFyICpzdHIgPSAiPHVpPjxtZW51YmFyPjxtZW51IG5hbWU9XCJUb3BNZW51XCIgYWN0aW9uPVwiVG9wXCI+IgotKwkgICAgIjxtZW51IG5hbWU9XCJHYW1lTWVudVwiIGFjdGlvbj1cIkdhbWVcIj4iCi0gCSAgICAiPHBsYWNlaG9sZGVyIG5hbWU9XCJTb2x2ZVBsYWNlaG9sZGVyXCI+IgotIAkgICAgIjxzZXBhcmF0b3IgbmFtZT1cIlNvbHZlU2VwXCIvPiIKLSAJICAgICI8bWVudWl0ZW0gbmFtZT1cIlNvbHZlTWVudVwiIGFjdGlvbj1cIlNvbHZlXCIvPiIKLS0JICAgICI8L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnViYXI+PC91aT4iOwotKwkgICAgIjwvcGxhY2Vob2xkZXI+PC9tZW51PjwvbWVudT48L21lbnViYXI+PC91aT4iOwotIAotLQlndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCBzdHIsIC0xLCBOVUxMKTsKLSsJZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgc3RyLCAtMSwgJmVycik7Ci0rCWlmIChlcnIgIT0gTlVMTCkgewotKwkgICAgZ193YXJuaW5nICgiRXJyb3IgYWRkaW5nIHNvbHZlLiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0rCSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0rCX0KLSAgICAgfQotIAotICAgICBpZiAoKG4gPSBtaWRlbmRfbnVtX3ByZXNldHMoZmUtPm1lKSkgPiAwIHx8IHRoZWdhbWUuY2FuX2NvbmZpZ3VyZSkgewotIAlnZW5lcmF0ZV9zZXR0aW5nc19tZW51IChtZXJnZSwgYWN0aW9ucywgZmUpOwotICAgICB9Ci0gCi0rICAgIC8qIERvIHRoaXMgc28gdGhhdCB0aGUgbWVudSBpcyBwYWNrZWQgbm93IGluc3RlYWQgb2YgaW4gdGhlIGlkbGUgbG9vcCAqLwotKyAgICBndGtfdWlfbWFuYWdlcl9lbnN1cmVfdXBkYXRlIChtZXJnZSk7Ci0rCi0rICAgIG93bF9zZXRfd2luZG93X21lbnVfaXRlbSAoR1RLX1dJTkRPVyAoZmUtPndpbmRvdyksCi0rCQkJICAgICAgR1RLX01FTlVfSVRFTSAoZ3RrX3VpX21hbmFnZXJfZ2V0X3dpZGdldCAobWVyZ2UsICIvbWVudWJhci9Ub3BNZW51IikpKTsKLSsgICAgCi0gICAgIHNldHVwX2NvbG91cnMgKGZlKTsKLSAgICAgc2V0dXBfcGl4YnVmcyAoZmUpOwotIAotQEAgLTE1NzIsNyArMTYwMCw3IEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfQlVUVE9OX1JFTEVBU0VfTUFTSyB8Ci0gCQkJICBHREtfQlVUVE9OX01PVElPTl9NQVNLKTsKLSAKLS0gICAgLyogVGhlIHdpbmRvdyBpcyBzaG93biBvbmNlIHRoZSBtZW51YmFyIGhhcyBiZWVuIGFkZGVkICovCi0rICAgIGd0a193aWRnZXRfc2hvd19hbGwgKGZlLT53aW5kb3cpOwotICAgICByZXR1cm4gZmU7Ci0gfQotIAotSW5kZXg6IHNyYy9tZW51LnhtbAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHNyYy9tZW51LnhtbAkocmV2aXNpb24gMjIpCi0rKysgc3JjL21lbnUueG1sCSh3b3JraW5nIGNvcHkpCi1AQCAtMSwyNiArMSwyNSBAQAotIDx1aT4KLSA8bWVudWJhcj4KLS08bWVudSBuYW1lPSJHYW1lTWVudSIgYWN0aW9uPSJHYW1lIj4KLS0JPG1lbnVpdGVtIG5hbWU9Ik5ld01lbnUiIGFjdGlvbj0iTmV3Ii8+Ci0tCTxtZW51aXRlbSBuYW1lPSJSZXN0YXJ0TWVudSIgYWN0aW9uPSJSZXN0YXJ0Ii8+Ci0tPCEtLQk8bWVudWl0ZW0gbmFtZT0iU3BlY2lmaWNNZW51IiBhY3Rpb249IlNwZWNpZmljIi8+IC0tPgotLQk8bWVudWl0ZW0gbmFtZT0iUmFuZG9tTWVudSIgYWN0aW9uPSJSYW5kb20iLz4KLS0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMSIvPgotLQk8bWVudWl0ZW0gbmFtZT0iTG9hZE1lbnUiIGFjdGlvbj0iTG9hZCIvPgotLQk8bWVudWl0ZW0gbmFtZT0iU2F2ZU1lbnUiIGFjdGlvbj0iU2F2ZSIvPgotLQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAyIi8+Ci0tCTxtZW51aXRlbSBuYW1lPSJVbmRvTWVudSIgYWN0aW9uPSJVbmRvIi8+Ci0tCTxtZW51aXRlbSBuYW1lPSJSZWRvTWVudSIgYWN0aW9uPSJSZWRvIi8+Ci0tCTxwbGFjZWhvbGRlciBuYW1lPSJDb3B5UGxhY2Vob2xkZXIiLz4KLS0JPHBsYWNlaG9sZGVyIG5hbWU9IlNvbHZlUGxhY2Vob2xkZXIiLz4KLS0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMyIvPgotLQk8bWVudWl0ZW0gbmFtZT0iUXVpdE1lbnUiIGFjdGlvbj0iUXVpdCIvPgotLTwvbWVudT4KLSs8bWVudSBuYW1lPSJUb3BNZW51IiBhY3Rpb249IlRvcCI+Ci0rCTxtZW51IG5hbWU9IkdhbWVNZW51IiBhY3Rpb249IkdhbWUiPgotKwkJPG1lbnVpdGVtIG5hbWU9Ik5ld01lbnUiIGFjdGlvbj0iTmV3Ii8+Ci0rCQk8bWVudWl0ZW0gbmFtZT0iUmVzdGFydE1lbnUiIGFjdGlvbj0iUmVzdGFydCIvPgotKwk8IS0tCTxtZW51aXRlbSBuYW1lPSJTcGVjaWZpY01lbnUiIGFjdGlvbj0iU3BlY2lmaWMiLz4gLS0+Ci0rCQk8bWVudWl0ZW0gbmFtZT0iUmFuZG9tTWVudSIgYWN0aW9uPSJSYW5kb20iLz4KLSsJCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDEiLz4KLSsJCTxtZW51aXRlbSBuYW1lPSJMb2FkTWVudSIgYWN0aW9uPSJMb2FkIi8+Ci0rCQk8bWVudWl0ZW0gbmFtZT0iU2F2ZU1lbnUiIGFjdGlvbj0iU2F2ZSIvPgotKwkJPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMiIvPgotKwkJPG1lbnVpdGVtIG5hbWU9IlVuZG9NZW51IiBhY3Rpb249IlVuZG8iLz4KLSsJCTxtZW51aXRlbSBuYW1lPSJSZWRvTWVudSIgYWN0aW9uPSJSZWRvIi8+Ci0rCQk8cGxhY2Vob2xkZXIgbmFtZT0iQ29weVBsYWNlaG9sZGVyIi8+Ci0rCQk8cGxhY2Vob2xkZXIgbmFtZT0iU29sdmVQbGFjZWhvbGRlciIvPgotKwk8L21lbnU+Ci0gCi0tPHBsYWNlaG9sZGVyIG5hbWU9IlR5cGVQbGFjZWhvbGRlciIvPgotLQotLTxtZW51IG5hbWU9IkhlbHBNZW51IiBhY3Rpb249IkhlbHAiPgotKwk8cGxhY2Vob2xkZXIgbmFtZT0iVHlwZVBsYWNlaG9sZGVyIi8+Ci0gCTxtZW51aXRlbSBuYW1lPSJBYm91dE1lbnUiIGFjdGlvbj0iQWJvdXQiLz4KLSsJPG1lbnVpdGVtIG5hbWU9IlF1aXRNZW51IiBhY3Rpb249IlF1aXQiLz4KLSsKLSA8L21lbnU+Ci0gPC9tZW51YmFyPgotIDwvdWk+Ci1JbmRleDogc3JjL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gc3JjL01ha2VmaWxlLmFtCShyZXZpc2lvbiAyMikKLSsrKyBzcmMvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKLUBAIC0xMCw3ICsxMCw3IEBACi0gCWxpZ2h0dXAgbG9vcHkgbWFwIG1pbmVzIG5ldCBuZXRzbGlkZSBwYXR0ZXJuIHBlZ3MgcmVjdCBzYW1lZ2FtZSBcCi0gCXNpeHRlZW4gc2xhbnQgc29sbyB0ZW50cyB0d2lkZGxlIHVudGFuZ2xlCi0gCi0tbGlicHV6emxlc19sYV9MSUJBREQgPSAkKFBVWlpMRVNfTElCUykKLStsaWJwdXp6bGVzX2xhX0xJQkFERCA9ICQoUFVaWkxFU19MSUJTKSAtbG93bAotIGxpYnB1enpsZXNfbGFfU09VUkNFUyA9IGNvbWJpLmMgXAotIAkJCWNvbmZpZ3VyYXRpb24uYyBcCi0gCQkJZHJhd2luZy5jIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYTY4YTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1TVU1NQVJZID0gIlBvcnRhYmxlIFB1enpsZSBDb2xsZWN0aW9uIgotSE9NRVBBR0UgPSAiaHR0cDovL28taGFuZC5jb20vIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCi0KLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9ZjU2ZWM2NzcyZGQxYzdjMzY3MDY3YmJlYThlYTE2NzUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3RyZWUyMzQuaDtlbmRsaW5lPTI4O21kNT1hMTg4ZTZkMjUwNDMwY2EwOTRhNTRhODJmNDg0NzJhNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdHJlZTIzNC5jO2VuZGxpbmU9Mjg7bWQ1PWI0ZmViMTk3NmZlZWJmOGYxMzc5MDkzZWQ1MmYyOTQ1IgotCi1TRUNUSU9OID0gIngxMSIKLURFUEVORFMgPSAiZ3RrKyBnY29uZiBpbnRsdG9vbC1uYXRpdmUgbGlicnN2ZyBnZXR0ZXh0LW5hdGl2ZSIKLQotIyBsaWJvd2wgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotREVQRU5EU19hcHBlbmRfcG9reSA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnbGlib3dsJywgJycsIGQpfSIKLQotIyBSZXF1aXJlcyBnZGsvZ2RreC5oIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVNSQ1JFViA9ICI5MmYxYTIwZTRiNzJlZWQ3YTM1YjAwOTg0ZDk3OTNiNTFkYzJmYjNiIgotUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgotUFIgPSAicjEwIgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKLVNSQ19VUklfYXBwZW5kX3Bva3kgPSAiIGZpbGU6Ly9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoO3N0cmlwbGV2ZWw9MCAiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotYmluZGlyID0gIi91c3IvZ2FtZXMiCi0KLUVYVFJBX09FTUFLRSArPSAiR0NPTkZfRElTQUJMRV9NQUtFRklMRV9TQ0hFTUFfSU5TVEFMTD0xIgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLwotCi0gICAgY2QgJHtEfS8ke3ByZWZpeH0vZ2FtZXMKLSAgICBmb3IgcHJvZyBpbiAqOyBkbwotCWlmIFsgLXggJHByb2cgXTsgdGhlbgotICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQotICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCi0JICAgIGVjaG8gIm1ha2luZyAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AiCi0JICAgIGNhdCA8PFNUT1AgPiAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AKLVtEZXNrdG9wIEVudHJ5XQotTmFtZT0kdGl0bGUKLUV4ZWM9JHtwcmVmaXh9L2dhbWVzLyRwcm9nCi1JY29uPWFwcGxpY2F0aW9ucy1nYW1lcwotVGVybWluYWw9ZmFsc2UKLVR5cGU9QXBwbGljYXRpb24KLUNhdGVnb3JpZXM9R2FtZTsKLVN0YXJ0dXBOb3RpZnk9dHJ1ZQotWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCi1Db21tZW50PVBsYXkgJHRpdGxlLgotU1RPUAotICAgICAgICBmaQotICAgIGRvbmUKLX0KLQotUEFDS0FHRVMgKz0gIiR7UE59LWV4dHJhIgotUkRFUEVORFNfJHtQTn0tZXh0cmEgKz0gIm9oLXB1enpsZXMiCi0KLUZJTEVTXyR7UE59ID0gIi91c3Ivc2hhcmUvcGl4bWFwcyAvdXNyL3NoYXJlL29oLXB1enpsZXMvIgotRklMRVNfJHtQTn0tZXh0cmEgPSAiL3Vzci9nYW1lcy8gL3Vzci9zaGFyZS9hcHBsaWNhdGlvbnMgL2V0Yy9nY29uZi9zY2hlbWFzIgotCi1weXRob24gX19hbm9ueW1vdXMgKCkgewotICAgIHZhciA9IGJiLmRhdGEuZXhwYW5kKCJGSUxFU18ke1BOfSIsIGQsIDEpCi0gICAgZGF0YSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKLSAgICBmb3IgbmFtZSBpbiAoImJyaWRnZXMiLCAiZmlmdGVlbiIsICJpbmVydGlhIiwgIm1hcCIsICJzYW1lZ2FtZSIsICJzbGFudCIpOgotICAgICAgICBkYXRhID0gZGF0YSArICIgL3Vzci9nYW1lcy8lcyIgJSBuYW1lCi0gICAgICAgIGRhdGEgPSBkYXRhICsgIiAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucy8lcy5kZXNrdG9wIiAlIG5hbWUKLSAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC9ldGMvZ2NvbmYvc2NoZW1hcy8lcy5zY2hlbWFzIiAlIG5hbWUKLSAgICBkLnNldFZhcih2YXIsIGRhdGEpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9wdXp6bGVzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCmluZGV4IDM0NmY0M2IuLjIwYjk4ODkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCkBAIC0yMSw0NSArMjEsNTQgQEAKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIAotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjayBwa2djb25maWcKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3Ryb19mZWF0dXJlc19jaGVjayBwa2djb25maWcKIAotUEFDS0FHRUNPTkZJRyA/Pz0gImd0azIiCitDRkxBR1NfYXBwZW5kID0gIiAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ3RrMyIKIFBBQ0tBR0VDT05GSUdbZ3RrMl0gPSAiLS13aXRoLWd0az0yLCxndGsrLCIKIFBBQ0tBR0VDT05GSUdbZ3RrM10gPSAiLS13aXRoLWd0az0zLCxndGsrMywiCiAKLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLSAgICAuL21rZmlsZXMucGwKK1BBQ0tBR0VTICs9ICIke1BOfS1leHRyYSIKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTXyR7UE59LWV4dHJhID0gIiR7cHJlZml4fS9iaW4gJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgdmFyID0gZC5leHBhbmQoIkZJTEVTXyR7UE59IikKKyAgICBkYXRhID0gZC5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICBmb3IgbmFtZSBpbiAoImJyaWRnZXMiLCAiZmlmdGVlbiIsICJpbmVydGlhIiwgIm1hcCIsICJzYW1lZ2FtZSIsICJzbGFudCIpOgorICAgICAgICBkYXRhID0gZGF0YSArICIgJHtiaW5kaXJ9LyVzIiAlIG5hbWUKKyAgICAgICAgZGF0YSA9IGRhdGEgKyAiICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyVzLmRlc2t0b3AiICUgbmFtZQorICAgIGQuc2V0VmFyKHZhciwgZGF0YSkKIH0KIAotRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L2Jpbi8qICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyoiCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgY2QgJHtTfQorICAgIC4vbWtmaWxlcy5wbAorICAgIGNkICR7Qn0KK30KIAotZG9faW5zdGFsbCAoKSB7Ci0gICAgcm0gLXJmICR7RH0vKgotICAgIGV4cG9ydCBwcmVmaXg9JHtEfQotICAgIGV4cG9ydCBERVNURElSPSR7RH0KLSAgICBpbnN0YWxsIC1kICR7RH0vJHtwcmVmaXh9L2Jpbi8KLSAgICBvZV9ydW5tYWtlIGluc3RhbGwKLQotCi0gICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgbmV0IGNvbmZsaWN0cyB3aXRoIFNhbWJhLCBzbyByZW5hbWUgaXQKKyAgICBtdiAke0R9JHtiaW5kaXJ9L25ldCAke0R9JHtiaW5kaXJ9L3B1enpsZXMtbmV0CiAKICAgICAjIENyZWF0ZSBkZXNrdG9wIHNob3J0Y3V0cworICAgIGluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8KICAgICBjZCAke0R9LyR7cHJlZml4fS9iaW4KICAgICBmb3IgcHJvZyBpbiAqOyBkbwogCWlmIFsgLXggJHByb2cgXTsgdGhlbgogICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQotICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCisgICAgICAgICAgICB0aXRsZT0kKGVjaG8gJHByb2cgfCBzZWQgJ3MvcHV6emxlcy0vLycgfCBzZWQgJ3MvXCheXHwgXCkuL1xVJi9nJykKIAkgICAgZWNobyAibWFraW5nICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcCIKIAkgICAgY2F0IDw8U1RPUCA+ICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcAogW0Rlc2t0b3AgRW50cnldCiBOYW1lPSR0aXRsZQotRXhlYz0ke3ByZWZpeH0vYmluLyRwcm9nCitFeGVjPSR7YmluZGlyfS8kcHJvZwogSWNvbj1hcHBsaWNhdGlvbnMtZ2FtZXMKIFRlcm1pbmFsPWZhbHNlCiBUeXBlPUFwcGxpY2F0aW9uCiBDYXRlZ29yaWVzPUdhbWU7CiBTdGFydHVwTm90aWZ5PXRydWUKLVgtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQogU1RPUAogICAgICAgICBmaQogICAgIGRvbmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMxNzZlZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZS8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1Gcm9tIGI5ZjAyOTg5MzEwYTNjOTIwNTg5ZjFhYTY0NmJjYmYxNmIyNTcyYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotRGF0ZTogV2VkLCAxMyBKdW4gMjAxMiAxMTowNzozMyArMDEwMAotU3ViamVjdDogW1BBVENIXSBJbmhlcml0IHRoZSBHTk9NRSBpY29uIHRoZW1lCi0KLUlmIHRoZSBHTk9NRSBpY29uIHRoZW1lIGlzbid0IGluc3RhbGxlZCB0aGlzIGlzIGEgbm8tb3AsIGJ1dCBpZiBpdCBpcyB0aGVuCi15b3UnbGwgZ2V0IGZhbGxiYWNrIGZyb20gU2F0byB0byBHTk9NRSBmb3IgaWNvbnMgdGhhdCBhcmUgbm90IGluIFNhdG8uCi0KLUFzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgZnVsbCBHTk9NRSBpY29uIHRoZW1lIGRlcGVuZCBvbiBnbm9tZS1pY29uLXRoZW1lLAotdGhpcyBqdXN0IHdvcmtzLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0tLS0KLSBpbmRleC50aGVtZSB8ICAgIDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvaW5kZXgudGhlbWUgYi9pbmRleC50aGVtZQotaW5kZXggYzRiMDNhNy4uNjg4ZmJiZiAxMDA2NDQKLS0tLSBhL2luZGV4LnRoZW1lCi0rKysgYi9pbmRleC50aGVtZQotQEAgLTEsNiArMSw3IEBACi0gW0ljb24gVGhlbWVdCi0gTmFtZT1TYXRvCi0gQ29tbWVudD1TYXRvIGljb24gdGhlbWUKLStJbmhlcml0cz1BZHdhaXRhCi0gCi0gRGlyZWN0b3JpZXM9MTZ4MTYvYXBwcywxNngxNi9zdGF0dXMsMTZ4MTYvc3RvY2ssMTZ4MTYvcGxhY2VzLDE2eDE2L21pbWV0eXBlcywxNngxNi9kZXZpY2VzLDE2eDE2L2FjdGlvbnMsMjJ4MjIvYXBwcywyMngyMi9zdGF0dXMsMjJ4MjIvc3RvY2ssMjJ4MjIvcGxhY2VzLDIyeDIyL21pbWV0eXBlcywyMngyMi9kZXZpY2VzLDIyeDIyL2FjdGlvbnMsMzJ4MzIvYXBwcywzMngzMi9zdGF0dXMsMzJ4MzIvc3RvY2ssMzJ4MzIvcGxhY2VzLDMyeDMyL21pbWV0eXBlcywzMngzMi9kZXZpY2VzLDMyeDMyL2FjdGlvbnMsNDh4NDgvYXBwcyw0OHg0OC9zdGF0dXMsNDh4NDgvc3RvY2ssNDh4NDgvcGxhY2VzLDQ4eDQ4L21pbWV0eXBlcyw0OHg0OC9kZXZpY2VzLDQ4eDQ4L2FjdGlvbnMsNjR4NjQvYXBwcyw2NHg2NC9zdGF0dXMsNjR4NjQvc3RvY2ssNjR4NjQvcGxhY2VzLDY0eDY0L21pbWV0eXBlcyw2NHg2NC9kZXZpY2VzLDY0eDY0L2FjdGlvbnMsCi0gCi0tLSAKLTEuNy4xMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZV8wLjQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWQ3MzVmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotU1VNTUFSWSA9ICJTYXRvIGljb24gdGhlbWUiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJDQy1CWS1TQS0zLjAiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NmE4MzBiYmU2ZTQ2OTdmZTZjYmJhZTAxYmI3YzJiMiIKLVNFQ1RJT04gPSAieDExIgotCi1QUiA9ICJyNiIKLQotREVQRU5EUyA9ICJpY29uLW5hbWluZy11dGlscy1uYXRpdmUgbGlieG1sLXNpbXBsZS1wZXJsLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICJodHRwOi8vcG9reWxpbnV4Lm9yZy9yZWxlYXNlcy9zYXRvLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiODZhODQ3ZjMxMjhhNDNhOWNmMjNiNzAyOWE2NTZmNTAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGIwYTI4MDdhNmE5NjkxOGFjNzk5YTg2MDk0ZWMzZThlMmM4OTJiZTBmZDY3OWE0MjMyYzJhNzdmMmY2MTczMiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGFsbGFyY2ggZ3RrLWljb24tY2FjaGUgcGVybG5hdGl2ZQotCi0jIFRoZSBjb25maWd1cmUgc2NyaXB0IHVzZXMgcGtnLWNvbmZpZyB0byBmaW5kIG5hdGl2ZSBiaW5hcmllcyB0byBleGVjdXRlLCBzbwotIyB0ZWxsIGl0IHRvIHVzZSBvdXIgcGtnLWNvbmZpZy1uYXRpdmUgd3JhcHBlci4KLWV4cG9ydCBQS0dfQ09ORklHID0gInBrZy1jb25maWctbmF0aXZlIgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9pY29ucy9TYXRvIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgcHJlZmVyZW5jZXMtc3lzdGVtLnBuZyB7fS9hcHBzL3ByZWZlcmVuY2VzLWRlc2t0b3AucG5nIFw7Ci0JZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIGZpbGUtbWFuYWdlci5wbmcge30vYXBwcy9zeXN0ZW0tZmlsZS1tYW5hZ2VyLnBuZyBcOwotCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyAuLi9hcHBzL3Rlcm1pbmFsLnBuZyB7fS9wbGFjZXMvY29tcHV0ZXIucG5nIFw7Ci19Ci0KLSMgRXhwbGljdGx5IHNldHRpbmcgIlNhdG8iIGFzIHRoZSBkZWZhdWx0IGljb24gdGhlbWUgdG8gYXZvaWQgZmxpY2tlcmluZyBmcm9tCi0jIHRoZSBkZXNrdG9wIGFuZCBzZXR0aW5ncyBkYWVtb24gcmFjaW5nLiAgVGhpcyBzaG91bGRuJ3QgYmUgZG9uZSBoZXJlIGJ1dCBpbiB0aGUgc2F0byBpbWFnZQotcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKLSAgICBta2RpciAtcCAkRC9ldGMvZ3RrLTIuMAotCi0gICAgZ3JlcCAtcyAtcSAtZSBeZ3RrLWljb24tdGhlbWUtbmFtZS4qXCJTYXRvXCIgJEQvZXRjL2d0ay0yLjAvZ3RrcmMgfHwgXAotICAgICAgICBlY2hvICdndGstaWNvbi10aGVtZS1uYW1lID0gIlNhdG8iJyA+PiAkRC9ldGMvZ3RrLTIuMC9ndGtyYwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfMC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzA1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF8wLjMuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJVbHRyYS1zaW1wbGUgc2NyZWVuIGNhcHR1cmUgdXRpbGl0eSwgYWltZWQgYXQgaGFuZGhlbGQgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9OTttZDU9MDIzZTE0ZDY0MDRkMGE5NjFlYjk3Y2JkMDExZmMxNDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2NyZWVuc2hvdC11aS5oO2VuZGxpbmU9OTttZDU9NjM4ZDlmZmE4M2U5MzI1YTM2ZGYyMjQxNjZlZDZhZDAiCisKK0RFUEVORFMgPSAibWF0Y2hib3gtcGFuZWwtMiBndGsrMyIKKworIyBTUkNSRVYgdGFnZ2VkIDAuMworU1JDUkVWID0gIjkyNTBmYTVhMDEyZDg0ZmY0NTk4NGU4YzQzNDVlZTc2MzUyMjc3NTYiCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3NjcmVlbnNob3QiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAke0R9JHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEKK30KKworIyBUaGUgbWF0Y2hib3gtcGFuZWwtMiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjJiNjVkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLVNVTU1BUlkgPSAiVWx0cmEtc2ltcGxlIHNjcmVlbiBjYXB0dXJlIHV0aWxpdHksIGFpbWVkIGF0IGhhbmRoZWxkIGRldmljZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTk7bWQ1PTAyM2UxNGQ2NDA0ZDBhOTYxZWI5N2NiZDAxMWZjMTQxIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbnNob3QtdWkuaDtlbmRsaW5lPTk7bWQ1PTYzOGQ5ZmZhODNlOTMyNWEzNmRmMjI0MTY2ZWQ2YWQwIgotCi1ERVBFTkRTID0gIm1hdGNoYm94LXBhbmVsLTIiCi1TUkNSRVYgPSAiM2E5Njg4ZThhMDFiNjNhNzhmNDAyYjRlN2MwYjhiMDA1ZmNkZmEyOSIKLVBWID0gIjAuMStnaXQke1NSQ1BWfSIKLVBSID0gInIyIgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3NjcmVlbnNob3QiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0Jcm0gJHtEfSR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhCi19Ci0KLSMgVGhlIG1hdGNoYm94LXBhbmVsLTIgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk0Mzc0NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0KLWFmdGVyIGdjYyBsaW5raW5nIGhhcyBjaGFuZ2VkLCBhbGwgdGhlIGxpYnJhcmllcyBtdXN0IGJlIGV4cGxpY2l0ZWx5IHNwZWNpZmllZCB0byBmb3IgbGlua2luZy4gCi1UaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGxpbmtpbmcgZXJyb3I6Ci0KLXwgbWFrZSAgYWxsLWFtXk0KLXwgbWFrZVsxXTogRW50ZXJpbmcgZGlyZWN0b3J5IGAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2V0dGluZ3MtZGFlbW9uLTAuMCtzdm5yMjA1OS1yMy9zZXR0aW5ncy1kYWVtb24nXk0KLXwgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggLVdhbGwgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yIC1nZ2RiIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLW8gc2V0dGluZ3MtZGFlbW9uIHNldHRpbmdzX2RhZW1vbi14c2V0dGluZ3MtY29tbW9uLm8gc2V0dGluZ3NfZGFlbW9uLXhzZXR0aW5ncy1tYW5hZ2VyLm8gc2V0dGluZ3NfZGFlbW9uLXNldHRpbmdzLWRhZW1vbi5vIC1wdGhyZWFkIC1sZ2NvbmYtMiAtbGRidXMtZ2xpYi0xIC1sZGJ1cy0xIC1scHRocmVhZCAtbGdkay14MTEtMi4wIC1sZ2RrX3BpeGJ1Zi0yLjAgLWxwYW5nb2NhaXJvLTEuMCAtbHBhbmdvLTEuMCAtbGNhaXJvIC1sZ29iamVjdC0yLjAgLWxnbW9kdWxlLTIuMCAtbGd0aHJlYWQtMi4wIC1scnQgLWxnbGliLTIuMF5NCi18IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYmV4ZWMvaTU4Ni1wb2t5LWxpbnV4L2djYy9pNTg2LXBva3ktbGludXgvNC41LjEvbGQ6ICpeQTogaW52YWxpZCBEU08gZm9yIHN5bWJvbCBgWENyZWF0ZVNpbXBsZVdpbmRvdycgZGVmaW5pdGlvbl5NCi18IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXgvdXNyL2xpYi9saWJYMTEuc28uNjogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlXk0KLXwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXNeTQotfCBtYWtlWzFdOiAqKiogW3NldHRpbmdzLWRhZW1vbl0gRXJyb3IgMV5NCi18IG1ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2V0dGluZ3MtZGFlbW9uLTAuMCtzdm5yMjA1OS1yMy9zZXR0aW5ncy1kYWVtb24nXk0KLXwgbWFrZTogKioqIFthbGxdIEVycm9yIDJeTQotCi1OaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgotRGF0ZTogMjAxMS8wMS8xMQotCi1JbmRleDogc2V0dGluZ3MtZGFlbW9uL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHNldHRpbmdzLWRhZW1vbi5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIHNldHRpbmdzLWRhZW1vbi9jb25maWd1cmUuYWMKLUBAIC0xNCw3ICsxNCw3IEBAIEFDX1BST0dfQ0MKLSAKLSAKLSBkbmwgVE9ETzogbWFrZSBnY29uZiBvcHRpb25hbAotLVBLR19DSEVDS19NT0RVTEVTKEFQUCwgW2djb25mLTIuMCBnZGsteDExLTIuMF0pCi0rUEtHX0NIRUNLX01PRFVMRVMoQVBQLCBbZ2NvbmYtMi4wIGdkay14MTEtMi4wIHgxMV0pCi0gCi0gCi0gQUNfU1VCU1QoQVBQX0NGTEFHUykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uXzAuMC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fMC4wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhZWNjYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uXzAuMC4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXMgYSBicmlkZ2UgYmV0d2VlbiBnY29uZiBhbmQgeHNldHRpbmdzIgorSE9NRVBBR0UgPSAiaHR0cDovL3N2bi5vLWhhbmQuY29tL3ZpZXcvbWF0Y2hib3gvdHJ1bmsvc2V0dGluZ3MtZGFlbW9uLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94c2V0dGluZ3MtbWFuYWdlci5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jb21tb24uaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiIKK0RFUEVORFMgPSAiZ2NvbmYgZ2xpYi0yLjAgZ3RrKzMiCitTRUNUSU9OID0gIngxMSIKKworIyBTUkNSRVYgdGFnZ2VkIDAuMC4yCitTUkNSRVYgPSAiYjJlNWRhNTAyZjhjNWZmNzVlOWU2ZGE3NzEzNzJlZjhlNDBmZDlhMiIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHNldHRpbmdzLWRhZW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRzb3VuZGtleXMucGF0Y2g7YXBwbHk9eWVzIFwKKyAgICAgICAgICAgZmlsZTovLzcwc2V0dGluZ3MtZGFlbW9uLnNoIFwKKyAgICAgICAgICAgIgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnY29uZiBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gPSAJIiR7YmluZGlyfS8qICR7c3lzY29uZmRpcn0iCisKKyMgUmVxdWlyZXMgZ2RrLXgxMS0yLjAgd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kCisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS83MHNldHRpbmdzLWRhZW1vbi5zaCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNjE1NTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJQcm92aWRlcyBhIGJyaWRnZSBiZXR3ZWVuIGdjb25mIGFuZCB4c2V0dGluZ3MiCi1IT01FUEFHRSA9ICJodHRwOi8vc3ZuLm8taGFuZC5jb20vdmlldy9tYXRjaGJveC90cnVuay9zZXR0aW5ncy1kYWVtb24vIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCi1MSUNFTlNFID0gIk1JVC1zdHlsZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hzZXR0aW5ncy1tYW5hZ2VyLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNvbW1vbi5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIgotREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCBndGsrIgotU0VDVElPTiA9ICJ4MTEiCi1TUkNSRVYgPSAiOWE5OTUyOGIwMjI1NTQ1MGRiODExNzZhYmQ5YmJjYzFkYWI5YTRjMSIKLVBWID0gIjAuMCtnaXQke1NSQ1BWfSIKLQotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3hzZXR0aW5ncy1kYWVtb24gXAotICAgICAgICAgICBmaWxlOi8vYWRkc291bmRrZXlzLnBhdGNoO2FwcGx5PXllcyBcCi0gICAgICAgICAgIGZpbGU6Ly83MHNldHRpbmdzLWRhZW1vbi5zaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2NvbmYgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLUZJTEVTXyR7UE59ID0gCSIke2JpbmRpcn0vKiAke3N5c2NvbmZkaXJ9IgotCi0jIFJlcXVpcmVzIGdkay14MTEtMi4wIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZAotCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vNzBzZXR0aW5ncy1kYWVtb24uc2ggJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLUZpeC1yYWN5LXBhcmFsbGVsLWJ1aWxkLW9mLVdlYktpdDItNC4wLmdpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1GaXgtcmFjeS1wYXJhbGxlbC1idWlsZC1vZi1XZWJLaXQyLTQuMC5naXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1ZmU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1GaXgtcmFjeS1wYXJhbGxlbC1idWlsZC1vZi1XZWJLaXQyLTQuMC5naXIucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbSA1NzYwZDM0NmI0MjgwN2I1OTZmNDc5YzgxZjdhNmI0MmViMzYwNjVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBNb24sIDI5IEF1ZyAyMDE2IDE2OjM4OjExICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCByYWN5IHBhcmFsbGVsIGJ1aWxkIG9mIFdlYktpdDItNC4wLmdpcgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgfCA5ICsrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCitpbmRleCBhZGFhMDEwLi5mMThjZjhhIDEwMDY0NAorLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCitAQCAtOTA2LDggKzkwNiw5IEBAIGVuZGlmICgpCisgc3RyaW5nKFJFR0VYIE1BVENIQUxMICItTFteIF0qIgorICAgICBJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IikKKyAKKy1hZGRfY3VzdG9tX2NvbW1hbmQoCistICAgIE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgorKyMgVGhpcyBpcyBhIHRhcmdldCBhbmQgbm90IGEgY29tbWFuZCBiZWNhdXNlIGl0J3MgdXNlZCB0byBidWlsZCBhbm90aGVyIC5naXIKKysjIGFuZCBhIC50eXBlbGliLCB3aGljaCB3b3VsZCB0cmlnZ2VyIHR3byByYWN5IHBhcmFsbGVsIGJ1aWxkcyB3aGVuIHVzaW5nIGNvbW1hbmQKKythZGRfY3VzdG9tX3RhcmdldChXZWJLaXQyLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS1naXIKKyAgICAgREVQRU5EUyBXZWJLaXQyCisgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCisgICAgIENPTU1BTkQgQ0M9JHtDTUFLRV9DX0NPTVBJTEVSfSBDRkxBR1M9LVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uc1wgJHtDTUFLRV9DX0ZMQUdTfSBMREZMQUdTPQorQEAgLTk1MCw3ICs5NTEsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCisgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyV2ViRXh0ZW5zaW9uLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKyAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKy0gICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgorKyAgICBERVBFTkRTIFdlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LWdpcgorICAgICBDT01NQU5EIENDPSR7Q01BS0VfQ19DT01QSUxFUn0gQ0ZMQUdTPS1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnNcICR7Q01BS0VfQ19GTEFHU30KKyAgICAgICAgIExERkxBR1M9IiR7SU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xERkxBR1N9IgorICAgICAgICAgJHtMT0FERVJfTElCUkFSWV9QQVRIX1ZBUn09IiR7SU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xJQlJBUllfUEFUSH0iCitAQCAtMTAwNCw3ICsxMDA1LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAorIAorIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0udHlwZWxpYgorLSAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCisrICAgIERFUEVORFMgV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0tZ2lyCisgICAgIENPTU1BTkQgJHtJTlRST1NQRUNUSU9OX0NPTVBJTEVSfSAtLWluY2x1ZGVkaXI9JHtDTUFLRV9CSU5BUllfRElSfSAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpciAtbyAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnR5cGVsaWIKKyApCisgCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1PcHRpb25zR1RLLmNtYWtlLWRyb3AtdGhlLWhhcmRjb2RlZC1pbnRyb3NwZWN0aW9uLWd0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLU9wdGlvbnNHVEsuY21ha2UtZHJvcC10aGUtaGFyZGNvZGVkLWludHJvc3BlY3Rpb24tZ3QucGF0Y2gKaW5kZXggM2QwMDRkYi4uOTNhNjljMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLU9wdGlvbnNHVEsuY21ha2UtZHJvcC10aGUtaGFyZGNvZGVkLWludHJvc3BlY3Rpb24tZ3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLU9wdGlvbnNHVEsuY21ha2UtZHJvcC10aGUtaGFyZGNvZGVkLWludHJvc3BlY3Rpb24tZ3QucGF0Y2gKQEAgLTEzLDExICsxMywxMSBAQAogIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIHwgNiAtLS0tLS0KICAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKLWluZGV4IGU1ZjFmNWIuLjQ2OTgwMzYgMTAwNjQ0Ci0tLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQotKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKLUBAIC00NDMsMTIgKzQ0Myw2IEBAIGlmIChVU0VfTElCSFlQSEVOKQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCitAQCAtNDI0LDEyICs0MjQsNiBAQCBpZiAoVVNFX0xJQkhZUEhFTikKICAgICAgZW5kaWYgKCkKICBlbmRpZiAoKQogIApAQCAtMjcsOSArMjcsNiBAQAogLSAgICBzZXQoRU5BQkxFX0lOVFJPU1BFQ1RJT04gT0ZGKQogLWVuZGlmICgpCiAtCi0gc2V0KERFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS93ZWJraXRkb20pCi0gc2V0KERFUklWRURfU09VUkNFU19XRUJLSVRHVEtfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vd2Via2l0Z3RrKQotIHNldChERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0FQSV9ESVIgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUn0vd2Via2l0KQotLS0gCi0yLjcuMAotCisgIyBPdmVycmlkZSB0aGUgY2FjaGVkIHZhcmlhYmxlLCBndGstZG9jIGRvZXMgbm90IHJlYWxseSB3b3JrIHdoZW4gYnVpbGRpbmcgb24gTWFjLgorIGlmIChBUFBMRSkKKyAgICAgc2V0KEVOQUJMRV9HVEtET0MgT0ZGKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVR3ZWFrLWd0a2RvYy1zZXR0aW5ncy1zby10aGF0LWd0a2RvYy1nZW5lcmF0aW9uLXdvcmsucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVHdlYWstZ3RrZG9jLXNldHRpbmdzLXNvLXRoYXQtZ3RrZG9jLWdlbmVyYXRpb24td29yay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODZkZDIzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVR3ZWFrLWd0a2RvYy1zZXR0aW5ncy1zby10aGF0LWd0a2RvYy1nZW5lcmF0aW9uLXdvcmsucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA0ZWVlYWVjNzc1ZTE5MGNmM2Y1ODg1ZDdjNjcxN2FjZWJkMDIwMWE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDExIEF1ZyAyMDE2IDE3OjEzOjUxICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFR3ZWFrIGd0a2RvYyBzZXR0aW5ncyBzbyB0aGF0IGd0a2RvYyBnZW5lcmF0aW9uIHdvcmtzIHVuZGVyCisgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorCitUaGlzIHJlcXVpcmVzIHNldHRpbmcgYSBmZXcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNvIHRoYXQgdGhlIHRyYW5zaWVudAorYmluYXJ5IGlzIGJ1aWxkIGFuZCBsaW5rZWQgY29ycmVjdGx5LCBhbmQgZGlzYWJsaW5nIHRoZSB0d2Vha3MgdG8gUlVOCit2YXJpYWJsZSBmcm9tIGd0a2RvYy5weSBzY3JpcHQgc28gdGhhdCBvdXIgcWVtdSB3cmFwcGVyIGlzIHRha2VuIGludG8gdXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLXNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBTb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UgfCAyICstCisgVG9vbHMvZ3RrL2d0a2RvYy5weSAgICAgIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKK2luZGV4IGFmNGQyZTMuLmI3YjkzYzcgMTAwNjQ0CistLS0gYS9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKKysrKyBiL1NvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQorQEAgLTI1LDcgKzI1LDcgQEAgbWFjcm8oQUREX0dUS0RPQ19HRU5FUkFUT1IgX3N0YW1wX25hbWUgX2V4dHJhX2FyZ3MpCisgICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgIE9VVFBVVCAiJHtDTUFLRV9CSU5BUllfRElSfS8ke19zdGFtcF9uYW1lfSIKKyAgICAgICAgIERFUEVORFMgJHtEb2N1bWVudGF0aW9uRGVwZW5kZW5jaWVzfQorLSAgICAgICAgQ09NTUFORCBDQz0ke0NNQUtFX0NfQ09NUElMRVJ9IENGTEFHUz0ke0NNQUtFX0NfRkxBR1N9ICR7Q01BS0VfU09VUkNFX0RJUn0vVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYyAke19leHRyYV9hcmdzfQorKyAgICAgICAgQ09NTUFORCBDQz0ke0NNQUtFX0NfQ09NUElMRVJ9IENGTEFHUz0ke0NNQUtFX0NfRkxBR1N9IExEPSR7Q01BS0VfQ19DT01QSUxFUn0gTERGTEFHUz0ke0NNQUtFX0NfTElOS19GTEFHU30gUlVOPSR7Q01BS0VfQklOQVJZX0RJUn0vZ3RrZG9jLXFlbXV3cmFwcGVyIEdJUl9FWFRSQV9MSUJTX1BBVEg9JHtDTUFLRV9CSU5BUllfRElSfS9saWIgJHtDTUFLRV9TT1VSQ0VfRElSfS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jICR7X2V4dHJhX2FyZ3N9CisgICAgICAgICBDT01NQU5EIHRvdWNoICR7X3N0YW1wX25hbWV9CisgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllfRElSfSIKKyAgICAgKQorZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9ndGtkb2MucHkgYi9Ub29scy9ndGsvZ3RrZG9jLnB5CitpbmRleCA0YzgyMzdiLi5jMDIwNWYwIDEwMDY0NAorLS0tIGEvVG9vbHMvZ3RrL2d0a2RvYy5weQorKysrIGIvVG9vbHMvZ3RrL2d0a2RvYy5weQorQEAgLTMxOCw5ICszMTgsOSBAQCBjbGFzcyBHVEtEb2Mob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGRmbGFncyA9ICclcyAlcycgJSAoYWRkaXRpb25hbF9sZGZsYWdzLCBhcmcpCisgICAgICAgICAgICAgbGRmbGFncyA9ICcgIi1MJXMiICVzICcgJSAoc2VsZi5saWJyYXJ5X3BhdGgsIGFkZGl0aW9uYWxfbGRmbGFncykgKyBsZGZsYWdzCisgICAgICAgICAgICAgY3VycmVudF9sZF9saWJyYXJ5X3BhdGggPSBlbnYuZ2V0KCdMRF9MSUJSQVJZX1BBVEgnKQorLSAgICAgICAgICAgIGlmIGN1cnJlbnRfbGRfbGlicmFyeV9wYXRoOgorKyAgICAgICAgICAgIGlmIGN1cnJlbnRfbGRfbGlicmFyeV9wYXRoIGFuZCAnUlVOJyBub3QgaW4gZW52OgorICAgICAgICAgICAgICAgICBlbnZbJ1JVTiddID0gJ0xEX0xJQlJBUllfUEFUSD0iJXM6JXMiICcgJSAoc2VsZi5saWJyYXJ5X3BhdGgsIGN1cnJlbnRfbGRfbGlicmFyeV9wYXRoKQorLSAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgZWxpZiAnUlVOJyBub3QgaW4gZW52OgorICAgICAgICAgICAgICAgICBlbnZbJ1JVTiddID0gJ0xEX0xJQlJBUllfUEFUSD0iJXMiICcgJSBzZWxmLmxpYnJhcnlfcGF0aAorIAorICAgICAgICAgaWYgbGRmbGFnczoKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVdlYktpdE1hY3Jvcy1BcHBlbmQtdG8tSS1hbmQtbm90LXRvLWlzeXN0ZW0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtV2ViS2l0TWFjcm9zLUFwcGVuZC10by1JLWFuZC1ub3QtdG8taXN5c3RlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWIzYzlmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVdlYktpdE1hY3Jvcy1BcHBlbmQtdG8tSS1hbmQtbm90LXRvLWlzeXN0ZW0ucGF0Y2gKQEAgLTAsMCArMSwyMjMgQEAKK0Zyb20gNTNhMDAwNTgxODRjZDcxMGM2ZjQzNzVmNGRhYWI0OWQ3ZTg4NWEzMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE3IEFwciAyMDE2IDEyOjM1OjQxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFdlYktpdE1hY3JvczogQXBwZW5kIHRvIC1JIGFuZCBub3QgdG8gLWlzeXN0ZW0KKworZ2NjLTYgaGFzIG5vdyBpbnRyb2R1Y2VkIHN0ZGxpYi5oIGluIGxpYnN0ZGMrKyBmb3IgYmV0dGVyCitjb21wbGlhbmNlIGFuZCBpdHMgaW5jbHVkaW5nIHRoZSBDIGxpYnJhcnkgc3RkbGliLmggdXNpbmcKK2luY2x1ZGVfbmV4dCB3aGljaCBpcyBzZW5zaXRpdmUgdG8gb3JkZXIgb2Ygc3lzdGVtIGhlYWRlcgoraW5jbHVkZSBwYXRocy4gSXRzIGluZmFjdCBiZXR0ZXIgdG8gbm90IHRpbmtlciB3aXRoIHRoZQorc3lzdGVtIGhlYWRlciBpbmNsdWRlIHBhdGhzIGF0IGFsbC4gU2luY2UgYWRkaW5nIC91c3IvaW5jbHVkZQordG8gLXN5c3RlbSBpcyByZWR1bmRhbnQgYW5kIGNvbXBpbGVyIGtub3dzIGFib3V0IGl0IG1vcmVvdmVyCitub3cgd2l0aCBnY2M2IGl0IGludGVyZmVyZXMgd2l0aCBjb21waWxlcidzIGZ1bmN0aW9uaW5nCithbmQgZW5kcyB1cCB3aXRoIGNvbXBpbGUgZXJyb3JzIGUuZy4KKworL3Vzci9pbmNsdWRlL2MrKy82LjAuMC9jc3RkbGliOjc1OjI1OiBmYXRhbCBlcnJvcjogc3RkbGliLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBTb3VyY2UvY21ha2UvV2ViS2l0TWFjcm9zLmNtYWtlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKysgd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKK0BAIC0xMzExLDcgKzEzMTEsNyBAQCBhZGRfc3ViZGlyZWN0b3J5KHNoZWxsKQorIAorIFdFQktJVF9XUkFQX1NPVVJDRUxJU1QoJHtKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTfSkKKyBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7SmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFU30pCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisraW5jbHVkZV9kaXJlY3Rvcmllcygke0phdmFTY3JpcHRDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKyBhZGRfbGlicmFyeShKYXZhU2NyaXB0Q29yZSAke0phdmFTY3JpcHRDb3JlX0xJQlJBUllfVFlQRX0gJHtKYXZhU2NyaXB0Q29yZV9IRUFERVJTfSAke0phdmFTY3JpcHRDb3JlX1NPVVJDRVN9KQorIHRhcmdldF9saW5rX2xpYnJhcmllcyhKYXZhU2NyaXB0Q29yZSAke0phdmFTY3JpcHRDb3JlX0xJQlJBUklFU30pCisgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEphdmFTY3JpcHRDb3JlIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiQlVJTERJTkdfSmF2YVNjcmlwdENvcmUiKQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CitAQCAtMjg2LDcgKzI4Niw3IEBAIFdFQktJVF9JTkNMVURFX0NPTkZJR19GSUxFU19JRl9FWElTVFMoKQorIAorIFdFQktJVF9XUkFQX1NPVVJDRUxJU1QoJHtXVEZfU09VUkNFU30pCisgaW5jbHVkZV9kaXJlY3Rvcmllcygke1dURl9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke1dURl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisraW5jbHVkZV9kaXJlY3Rvcmllcygke1dURl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisgYWRkX2xpYnJhcnkoV1RGICR7V1RGX0xJQlJBUllfVFlQRX0gJHtXVEZfSEVBREVSU30gJHtXVEZfU09VUkNFU30pCisgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFdURiAke1dURl9MSUJSQVJJRVN9KQorIHNldF90YXJnZXRfcHJvcGVydGllcyhXVEYgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJCVUlMRElOR19XVEYiKQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CitAQCAtMzc0OCw3ICszNzQ4LDcgQEAgV0VCS0lUX1dSQVBfU09VUkNFTElTVCgke1dlYkNvcmVfSURMX0ZJTAorIFdFQktJVF9XUkFQX1NPVVJDRUxJU1QoJHtXZWJDb3JlVGVzdFN1cHBvcnRfSURMX0ZJTEVTfSAke1dlYkNvcmVUZXN0U3VwcG9ydF9TT1VSQ0VTfSkKKyAKKyBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfSAke1dlYkNvcmVUZXN0U3VwcG9ydF9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke1dlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKyAKKyBpZiAoTVNWQykKKyAgICAgQUREX1BSRUNPTVBJTEVEX0hFQURFUigiV2ViQ29yZVByZWZpeC5oIiAiV2ViQ29yZVByZWZpeC5jcHAiIFdlYkNvcmVfU09VUkNFUykKK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorQEAgLTI4LDcgKzI4LDcgQEAgc2V0KFdlYktpdF9MSUJSQVJJRVMKKyBXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKKyAKKyBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVN9KQorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICR7V2ViS2l0X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V2ViS2l0X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKyAKKyBpZiAoTVNWQykKKyAgICAgQUREX1BSRUNPTVBJTEVEX0hFQURFUigiV2ViS2l0UHJlZml4LmgiICJ3aW4vV2ViS2l0UHJlZml4LmNwcCIgV2ViS2l0X1NPVVJDRVMpCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKK0BAIC03NTYsNyArNzU2LDcgQEAgV0VCS0lUX0lOQ0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCisgR0VORVJBVEVfV0VCS0lUMl9NRVNTQUdFX1NPVVJDRVMoV2ViS2l0Ml9ERVJJVkVEX1NPVVJDRVMgIiR7V2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFU30iKQorIAorIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICR7V2ViS2l0Ml9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisraW5jbHVkZV9kaXJlY3Rvcmllcygke1dlYktpdDJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorIGFkZF9saWJyYXJ5KFdlYktpdDIgJHtXZWJLaXQyX0xJQlJBUllfVFlQRX0gJHtXZWJLaXQyX1NPVVJDRVN9ICR7V2ViS2l0Ml9ERVJJVkVEX1NPVVJDRVN9KQorIAorIGFkZF9kZXBlbmRlbmNpZXMoV2ViS2l0MiBXZWJDb3JlICR7V0VCS0lUMl9FWFRSQV9ERVBFTkRFTkNJRVN9KQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luL0NNYWtlTGlzdHMudHh0CitAQCAtNDIsNyArNDIsNyBAQCBzZXQoV2ViS2l0VGVzdE5ldHNjYXBlUGx1Z2luX1NZU1RFTV9JTkNMCisgKQorIAorIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJLaXRUZXN0TmV0c2NhcGVQbHVnaW5fSU5DTFVERV9ESVJFQ1RPUklFU30pCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtXZWJLaXRUZXN0TmV0c2NhcGVQbHVnaW5fU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJLaXRUZXN0TmV0c2NhcGVQbHVnaW5fU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorIAorIHNldChXZWJLaXRUZXN0TmV0c2NhcGVQbHVnaW5fTElCUkFSSUVTCisgICAgICR7WDExX0xJQlJBUklFU30KK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Ub29scy9JbWFnZURpZmYvQ01ha2VMaXN0cy50eHQKKysrKyB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxpc3RzLnR4dAorQEAgLTE0LDcgKzE0LDcgQEAgc2V0KElNQUdFX0RJRkZfTElCUkFSSUVTCisgV0VCS0lUX0lOQ0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCisgCisgaW5jbHVkZV9kaXJlY3Rvcmllcygke0lNQUdFX0RJRkZfSU5DTFVERV9ESVJFQ1RPUklFU30pCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtJTUFHRV9ESUZGX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7SU1BR0VfRElGRl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisgYWRkX2V4ZWN1dGFibGUoSW1hZ2VEaWZmICR7SU1BR0VfRElGRl9TT1VSQ0VTfSkKKyB0YXJnZXRfbGlua19saWJyYXJpZXMoSW1hZ2VEaWZmICR7SU1BR0VfRElGRl9MSUJSQVJJRVN9KQorIHNldF90YXJnZXRfcHJvcGVydGllcyhJbWFnZURpZmYgUFJPUEVSVElFUyBGT0xERVIgIlRvb2xzIikKK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQ01ha2VMaXN0cy50eHQKKysrKyB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9DTWFrZUxpc3RzLnR4dAorQEAgLTU1LDcgKzU1LDcgQEAgZW5kaWYgKCkKKyBhZGRfZGVmaW5pdGlvbnMoLURHREtfVkVSU0lPTl9NSU5fUkVRVUlSRUQ9R0RLX1ZFUlNJT05fM182KQorIAorIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtNaW5pQnJvd3Nlcl9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke01pbmlCcm93c2VyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7TWluaUJyb3dzZXJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorIGFkZF9leGVjdXRhYmxlKE1pbmlCcm93c2VyICR7TWluaUJyb3dzZXJfU09VUkNFU30pCisgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKE1pbmlCcm93c2VyICR7TWluaUJyb3dzZXJfTElCUkFSSUVTfSkKKyBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTWluaUJyb3dzZXIgUFJPUEVSVElFUyBGT0xERVIgIlRvb2xzIikKK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dAorQEAgLTExNSw3ICsxMTUsNyBAQCBHRU5FUkFURV9CSU5ESU5HUyhXZWJLaXRUZXN0UnVubmVyX1NPVVJDCisgV0VCS0lUX0lOQ0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCisgCisgaW5jbHVkZV9kaXJlY3Rvcmllcygke1dlYktpdFRlc3RSdW5uZXJfSU5DTFVERV9ESVJFQ1RPUklFU30pCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtXZWJLaXRUZXN0UnVubmVyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V2ViS2l0VGVzdFJ1bm5lcl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisgCisgYWRkX2xpYnJhcnkoVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlIFNIQVJFRCAke1dlYktpdFRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZV9TT1VSQ0VTfSkKKyB0YXJnZXRfbGlua19saWJyYXJpZXMoVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlICR7V2ViS2l0VGVzdFJ1bm5lcl9MSUJSQVJJRVN9KQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCitAQCAtMzI0LDcgKzMyNCw3IEBAIGlmIChFTkFCTEVfUExVR0lOX1BST0NFU1NfR1RLMikKKyAgICAgICAgICR7R1RLMl9JTkNMVURFX0RJUlN9CisgICAgICAgICAke0dESzJfSU5DTFVERV9ESVJTfQorICAgICApCistICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFdlYkNvcmVQbGF0Zm9ybUdUSzIgU1lTVEVNIFBSSVZBVEUKKysgICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoV2ViQ29yZVBsYXRmb3JtR1RLMiBQUklWQVRFCisgICAgICAgICAke1dlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9CisgICAgICkKKyAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFdlYkNvcmVQbGF0Zm9ybUdUSzIKK0BAIC0zNjYsNyArMzY2LDcgQEAgV0VCS0lUX1NFVF9FWFRSQV9DT01QSUxFUl9GTEFHUyhXZWJDb3JlUAorIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFdlYkNvcmVQbGF0Zm9ybUdUSyBQUklWQVRFCisgICAgICR7V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfQorICkKKy10YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhXZWJDb3JlUGxhdGZvcm1HVEsgU1lTVEVNIFBSSVZBVEUKKyt0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhXZWJDb3JlUGxhdGZvcm1HVEsgUFJJVkFURQorICAgICAke1dlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9CisgICAgICR7R1RLX0lOQ0xVREVfRElSU30KKyAgICAgJHtHREtfSU5DTFVERV9ESVJTfQorQEAgLTM4NCw3ICszODQsNyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAgICAiJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfSIKKyApCisgCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0KKytpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAgICAke1dlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9CisgKQorIAorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCisrKysgd2Via2l0Z3RrLTIuMTIuMS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCitAQCAtMjAsNyArMjAsNyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0aworICkKKyAKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoCisgICAgICR7R0RLM19JTkNMVURFX0RJUlN9CisgICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgICR7R1RLM19JTkNMVURFX0RJUlN9CitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0CisrKysgd2Via2l0Z3RrLTIuMTIuMS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQKK0BAIC0yMyw3ICsyMyw3IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCisgICAgICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrCisgKQorIAorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNCisraW5jbHVkZV9kaXJlY3RvcmllcygKKyAgICAgJHtBVFNQSV9JTkNMVURFX0RJUlN9CisgICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgICR7R1NUUkVBTUVSX0lOQ0xVREVfRElSU30KK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKysgd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorQEAgLTgxNiw3ICs4MTYsNyBAQCBpZiAoRU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzIpCisgICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFdlYktpdFBsdWdpblByb2Nlc3MyIFBSSVZBVEUKKyAgICAgICAgICR7V2ViS2l0MkNvbW1vbkluY2x1ZGVEaXJlY3Rvcmllc30KKyAgICAgKQorLSAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhXZWJLaXRQbHVnaW5Qcm9jZXNzMiBTWVNURU0gUFJJVkFURQorKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhXZWJLaXRQbHVnaW5Qcm9jZXNzMiBQUklWQVRFCisgICAgICAgICAgJHtXZWJLaXQyQ29tbW9uU3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzfQorICAgICAgICAgICR7R1RLMl9JTkNMVURFX0RJUlN9CisgICAgICAgICAgJHtHREsyX0lOQ0xVREVfRElSU30KK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvc2hlbGwvQ01ha2VMaXN0cy50eHQKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9DTWFrZUxpc3RzLnR4dAorQEAgLTIwLDcgKzIwLDcgQEAgV0VCS0lUX0lOQ0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCisgCisgV0VCS0lUX1dSQVBfU09VUkNFTElTVCgke0pTQ19TT1VSQ0VTfSkKKyBpbmNsdWRlX2RpcmVjdG9yaWVzKC4vICR7SmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFU30pCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisraW5jbHVkZV9kaXJlY3Rvcmllcygke0phdmFTY3JpcHRDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKyBhZGRfZXhlY3V0YWJsZShqc2MgJHtKU0NfU09VUkNFU30pCisgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGpzYyAke0pTQ19MSUJSQVJJRVN9KQorIHNldF90YXJnZXRfcHJvcGVydGllcyhqc2MgUFJPUEVSVElFUyBGT0xERVIgIkphdmFTY3JpcHRDb3JlIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1XaGVuLWJ1aWxkaW5nLWludHJvc3BlY3Rpb24tZmlsZXMtYWRkLUNNQUtFX0NfRkxBR1MtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVdoZW4tYnVpbGRpbmctaW50cm9zcGVjdGlvbi1maWxlcy1hZGQtQ01BS0VfQ19GTEFHUy0ucGF0Y2gKaW5kZXggNDRiNDNjZC4uM2Y3MTI5NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVdoZW4tYnVpbGRpbmctaW50cm9zcGVjdGlvbi1maWxlcy1hZGQtQ01BS0VfQ19GTEFHUy0ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVdoZW4tYnVpbGRpbmctaW50cm9zcGVjdGlvbi1maWxlcy1hZGQtQ01BS0VfQ19GTEFHUy0ucGF0Y2gKQEAgLTEzLDI4ICsxMywyNSBAQAogIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIHwgNCArKy0tCiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKLWluZGV4IDcwNmYxZTguLjE0YTFjM2IgMTAwNjQ0Ci0tLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQotKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKLUBAIC04ODQsNyArODg0LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCitAQCAtOTEwLDcgKzkxMCw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCiAgICAgIERFUEVORFMgV2ViS2l0MgogICAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgogLSAgICBDT01NQU5EIENDPSR7Q01BS0VfQ19DT01QSUxFUn0gQ0ZMQUdTPS1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgTERGTEFHUz0KICsgICAgQ09NTUFORCBDQz0ke0NNQUtFX0NfQ09NUElMRVJ9IENGTEFHUz0tV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXCAke0NNQUtFX0NfRkxBR1N9IExERkxBR1M9Ci0gICAgICAgICBMRF9MSUJSQVJZX1BBVEg9IiR7SU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xJQlJBUllfUEFUSH0iCisgICAgICAgICAke0xPQURFUl9MSUJSQVJZX1BBVEhfVkFSfT0iJHtJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElCUkFSWV9QQVRIfSIKICAgICAgICAgICR7SU5UUk9TUEVDVElPTl9TQ0FOTkVSfQogICAgICAgICAgLS1xdWlldAotQEAgLTkzMCw3ICs5MzAsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCitAQCAtOTUxLDcgKzk1MSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0MldlYkV4dGVuc2lvbi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCiAgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCiAgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKIC0gICAgQ09NTUFORCBDQz0ke0NNQUtFX0NfQ09NUElMRVJ9IENGTEFHUz0tV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zCiArICAgIENPTU1BTkQgQ0M9JHtDTUFLRV9DX0NPTVBJTEVSfSBDRkxBR1M9LVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uc1wgJHtDTUFLRV9DX0ZMQUdTfQogICAgICAgICAgTERGTEFHUz0iJHtJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTERGTEFHU30iCi0gICAgICAgICBMRF9MSUJSQVJZX1BBVEg9IiR7SU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xJQlJBUllfUEFUSH0iCisgICAgICAgICAke0xPQURFUl9MSUJSQVJZX1BBVEhfVkFSfT0iJHtJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElCUkFSWV9QQVRIfSIKICAgICAgICAgICR7SU5UUk9TUEVDVElPTl9TQ0FOTkVSfQotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzL211c2wtZml4ZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzL211c2wtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkZDU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvbXVzbC1maXhlcy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitSZXBsYWNlIF9fR0xJQkNfXyB3aXRoIF9fbGludXhfXyBzaW5jZSBtdXNsIGFsc28gc3VwcG9ydHMgaXQKK3NvIGNoZWNraW5nIF9fbGludXhfXyBpcyBtb3JlIGFjY29tb2RhdGluZworCitTZWUgaHR0cDovL2dpdC5hbHBpbmVsaW51eC5vcmcvY2dpdC9hcG9ydHMvdHJlZS9jb21tdW5pdHkvd2Via2l0Mmd0ay9tdXNsLWZpeGVzLnBhdGNoP2lkPTIxOTQzNWQ4NmQ3ZThmYWM5NDc0MzQ0YTc0MzFjNjJiZDI1MjUxODQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKK0BAIC01NjYsNyArNTY2LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOgorICNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorICNlbmRpZgorIAorLSNlbGlmIGRlZmluZWQoX19HTElCQ19fKSAmJiBFTkFCTEUoSklUKQorKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSAmJiBFTkFCTEUoSklUKQorIAorICNpZiBDUFUoWDg2KQorICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRwdHJfdCkgcmVncy5tYWNoaW5lQ29udGV4dC5ncmVnc1tSRUdfRVNQXSk7CitAQCAtNjY1LDcgKzY2NSw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVyczoKKyAjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyAjZW5kaWYKKyAKKy0jZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykKKysjZWxpZiBkZWZpbmVkKF9fbGludXhfXykgLy8gZ2xpYmMgYW5kIG11c2wKKyAKKyAvLyBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGRlcGVuZHMgb24gZ2xpYmMncyBzeXMvdWNvbnRleHQuaC4KKyAjaWYgQ1BVKFg4NikKK0BAIC03NDcsNyArNzQ3LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOgorICNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorICNlbmRpZgorIAorLSNlbGlmIGRlZmluZWQoX19HTElCQ19fKQorKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSAvLyBnbGliYyBhbmQgbXVzbAorIAorIC8vIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgZGVwZW5kcyBvbiBnbGliYydzIHN5cy91Y29udGV4dC5oLgorICNpZiBDUFUoWDg2KQorQEAgLTgzOCw3ICs4MzgsNyBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6CisgI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisgI2VuZGlmCisgCistI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pCisrI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pIC8vIGdsaWJjIGFuZCBtdXNsCisgCisgLy8gVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBkZXBlbmRzIG9uIGdsaWJjJ3Mgc3lzL3Vjb250ZXh0LmguCisgI2lmIENQVShYODYpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzL3BwYy1tdXNsLWZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvcHBjLW11c2wtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNThlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzL3BwYy1tdXNsLWZpeC5wYXRjaApAQCAtMCwwICsxLDI2IEBACit1Y29udGV4dCBzdHJ1Y3R1cmUgaXMgZGlmZmVyZW50IGJldHdlZW4gbXVzbCBhbmQgZ2xpYmMgZm9yIHBwYwordGhlcmVmb3JlIGl0cyBub3QgZW5vdWdoIGp1c3QgdG8gY2hlY2sgZm9yIGFyY2ggYWxvbmUsIHdlIGFsc28KK25lZWQgdG8gY2hlY2sgZm9yIGxpYmMgdHlwZS4KKworRml4ZXMgZXJyb3JzIGxpa2UKKworU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDo5MDo2NTogZXJyb3I6ICdzdHJ1Y3QgbWNvbnRleHRfdCcgaGFzIG5vIG1lbWJlciBuYW1lZCAndWNfcmVncyc7IGRpZCB5b3UgbWVhbiAnZ3JlZ3MnPworICAgICB0aHJlYWQtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjMvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjMub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCisrKysgd2Via2l0Z3RrLTIuMTIuMy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCitAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgdm9pZCBwdGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSCisgICAgIH0KKyAKKyAgICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpOworLSNpZiBDUFUoUFBDKQorKyNpZiBDUFUoUFBDKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykKKyAgICAgdGhyZWFkLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9ICp1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQudWNfcmVnczsKKyAjZWxzZQorICAgICB0aHJlYWQtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvMDAwMS1FbmFibGUtYmFja3RyYWNlLW9uLWxpbnV4LXdoZW4tdXNpbmctZ2xpYmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay8wMDAxLUVuYWJsZS1iYWNrdHJhY2Utb24tbGludXgtd2hlbi11c2luZy1nbGliYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdlNGVmNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay8wMDAxLUVuYWJsZS1iYWNrdHJhY2Utb24tbGludXgtd2hlbi11c2luZy1nbGliYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLUZyb20gMGI2OGFkMjA2ZDJkOTBkZjc4ZDkxY2FkNGRhMTkxNTIwODQwMTRjZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDE2IFNlcCAyMDE1IDA1OjE1OjA0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIEVuYWJsZSBiYWNrdHJhY2Ugb24gbGludXggd2hlbiB1c2luZyBnbGliYwotCi1XZSBkb250IGhhdmUgYmFja3RyYWNlKCkgaW1wbGVtZW50ZWQgb24gbm9uLWdsaWJjIGxpYmMncyBvbiBsaW51eAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCi0KLSBTb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCB8IDQgKystLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCi1pbmRleCAxOTFkNTNmLi5hNGQ4NmI1IDEwMDY0NAotLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKLSsrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCi1AQCAtNjgsNyArNjgsNyBAQAotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAjZW5kaWYKLSAKLS0jaWYgT1MoREFSV0lOKSB8fCAoT1MoTElOVVgpICYmICFkZWZpbmVkKF9fVUNMSUJDX18pKQotKyNpZiBPUyhEQVJXSU4pIHx8IChPUyhMSU5VWCkgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pKQotICNpbmNsdWRlIDxjeHhhYmkuaD4KLSAjaW5jbHVkZSA8ZGxmY24uaD4KLSAjaW5jbHVkZSA8ZXhlY2luZm8uaD4KLUBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBXVEZSZXBvcnRBcmd1bWVudEFzc2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGYKLSAKLSB2b2lkIFdURkdldEJhY2t0cmFjZSh2b2lkKiogc3RhY2ssIGludCogc2l6ZSkKLSB7Ci0tI2lmIE9TKERBUldJTikgfHwgKE9TKExJTlVYKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKSkKLSsjaWYgT1MoREFSV0lOKSB8fCAoT1MoTElOVVgpICYmIGRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKSkKLSAgICAgKnNpemUgPSBiYWNrdHJhY2Uoc3RhY2ssICpzaXplKTsKLSAjZWxpZiBPUyhXSU5ET1dTKQotICAgICAvLyBUaGUgQ2FwdHVyZVN0YWNrQmFja1RyYWNlIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBYUCwgYnV0IGl0IGlzIG5vdCBkZWZpbmVkCi0tLSAKLTIuNS4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrLzAwMDEtRml4LWJ1aWxkLXdpdGgtbm9uLWdsaWJjLWxpYnJhcmllcy1vbi1saW51eC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrLzAwMDEtRml4LWJ1aWxkLXdpdGgtbm9uLWdsaWJjLWxpYnJhcmllcy1vbi1saW51eC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdlYmYzNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay8wMDAxLUZpeC1idWlsZC13aXRoLW5vbi1nbGliYy1saWJyYXJpZXMtb24tbGludXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1Gcm9tIDMwZTJlZjMwMmEzMjk4NTBiYTU1YzdjNDU4Yzk4Y2JmMzk2MTg2ZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAyMTo0NzozNCArMDAwMAotU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgd2l0aCBub24tZ2xpYmMgbGlicmFyaWVzIG9uIGxpbnV4Ci0KLXF1YWxpZnkgaXNuYW4oKSBjYWxscyB3aXRoIHN0ZCBuYW1lc3BhY2UKLW1hbGxvY190cmltIGlzIGdsaWJjIHNwZWNpZmljIEFQSSBzbyBndWFyZCBpdCB3aXRoIF9fR0xJQkNfXwotbGV0IGN0eXBlIGJlIHVzZWQgb24gbm9uLWdsaWJjICggbXVzbCApIEMgbGlicmFyeQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCi0KLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCAgICAgICAgICAgICAgICAgICAgfCAyICstCi0gU291cmNlL1dURi93dGYvRGlzYWxsb3dDVHlwZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArLQotIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcCB8IDIgKysKLSAzIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKLWluZGV4IGZlODMwYjQuLmM0OWFhZGUgMTAwNjQ0Ci0tLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAotKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKLUBAIC02MTAsNyArNjEwLDcgQEAgYm9vbCBPcHRpb246Om9wZXJhdG9yPT0oY29uc3QgT3B0aW9uJiBvdGhlcikgY29uc3QKLSAgICAgY2FzZSBPcHRpb25zOjpUeXBlOjp1bnNpZ25lZFR5cGU6Ci0gICAgICAgICByZXR1cm4gbV9lbnRyeS51bnNpZ25lZFZhbCA9PSBvdGhlci5tX2VudHJ5LnVuc2lnbmVkVmFsOwotICAgICBjYXNlIE9wdGlvbnM6OlR5cGU6OmRvdWJsZVR5cGU6Ci0tICAgICAgICByZXR1cm4gKG1fZW50cnkuZG91YmxlVmFsID09IG90aGVyLm1fZW50cnkuZG91YmxlVmFsKSB8fCAoaXNuYW4obV9lbnRyeS5kb3VibGVWYWwpICYmIGlzbmFuKG90aGVyLm1fZW50cnkuZG91YmxlVmFsKSk7Ci0rICAgICAgICByZXR1cm4gKG1fZW50cnkuZG91YmxlVmFsID09IG90aGVyLm1fZW50cnkuZG91YmxlVmFsKSB8fCAoc3RkOjppc25hbihtX2VudHJ5LmRvdWJsZVZhbCkgJiYgc3RkOjppc25hbihvdGhlci5tX2VudHJ5LmRvdWJsZVZhbCkpOwotICAgICBjYXNlIE9wdGlvbnM6OlR5cGU6OmludDMyVHlwZToKLSAgICAgICAgIHJldHVybiBtX2VudHJ5LmludDMyVmFsID09IG90aGVyLm1fZW50cnkuaW50MzJWYWw7Ci0gICAgIGNhc2UgT3B0aW9uczo6VHlwZTo6b3B0aW9uUmFuZ2VUeXBlOgotZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Rpc2FsbG93Q1R5cGUuaCBiL1NvdXJjZS9XVEYvd3RmL0Rpc2FsbG93Q1R5cGUuaAotaW5kZXggZDg1ZTc2Ny4uZGM2YmNhYiAxMDA2NDQKLS0tLSBhL1NvdXJjZS9XVEYvd3RmL0Rpc2FsbG93Q1R5cGUuaAotKysrIGIvU291cmNlL1dURi93dGYvRGlzYWxsb3dDVHlwZS5oCi1AQCAtNDAsNyArNDAsNyBAQAotIC8vIGFyZSB1c2VkIGZyb20gd3ggaGVhZGVycy4gT24gR1RLKyBmb3IgTWFjIG1hbnkgR1RLKyBmaWxlcyBpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gLy8gb3IgPGdsaWIvZ2kxOG4tbGliLmg+LCB3aGljaCBpbiB0dXJuIGluY2x1ZGUgPHhsb2NhbGUvX2N0eXBlLmg+IHdoaWNoIHVzZXMKLSAvLyBpc2FjaWkoKS4gCi0tI2lmICEoT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspKSAmJiAhUExBVEZPUk0oRUZMKSAmJiAhZGVmaW5lZChfTElCQ1BQX1ZFUlNJT04pCi0rI2lmICEoT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspKSAmJiAhUExBVEZPUk0oRUZMKSAmJiAhZGVmaW5lZChfTElCQ1BQX1ZFUlNJT04pICYmIGRlZmluZWQoX19HTElCQ19fKQotIAotICNpbmNsdWRlIDxjdHlwZS5oPgotIAotZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcAotaW5kZXggZWE2MTkwOS4uMTQ5NTY0MiAxMDA2NDQKLS0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcAotKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCi1AQCAtMjAyLDcgKzIwMiw5IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpyZXNwb25kVG9NZW1vcnlQcmVzc3VyZShDcml0aWNhbCBjcml0aWNhbCwgU3luY2hyb25vCi0gdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnBsYXRmb3JtUmVsZWFzZU1lbW9yeShDcml0aWNhbCkKLSB7Ci0gICAgIFJlbGllZkxvZ2dlciBsb2coIlJ1biBtYWxsb2NfdHJpbSIpOwotKyNpZmRlZiBfX0dMSUJDX18KLSAgICAgbWFsbG9jX3RyaW0oMCk7Ci0rI2VuZGlmCi0gfQotIAotIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpSZWxpZWZMb2dnZXI6OnBsYXRmb3JtTG9nKCkKLS0tIAotMi42LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvY2xhbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay9jbGFuZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyNjcxMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay9jbGFuZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLUNsYW5nJ3MgYnVpbHRpbiBmb3IgY2xlYXJfY2FjaGUgYWNjZXB0cyBjaGFyKiBhbmQgZXJyb3JzIG91dCB3aGVuIHVzaW5nIHZvaWQqLAotdXNpbmcgY2hhciogd29yayBvbiBib3RoIGdjYyBhbmQgY2xhbmcgc2luY2UgY2hhciogaXMgYXV0by1jb252ZXJ0ZWQgdG8gdm9pZCogaW4gZ2NjIGNhc2UKLQotU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oOjI4NTc6MzM6IGVycm9yOiBjYW5ub3QgaW5pdGlhbGl6ZSBhIHBhcmFtZXRlciBvZiB0eXBlICdjaGFyIConIHdpdGggYW4gcnZhbHVlIG9mIHR5cGUgJ3ZvaWQgKicKLSAgICAgICAgX19idWlsdGluX19fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmVnaW4pLCByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0xIGVycm9yIGdlbmVyYXRlZC4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAotCi1JbmRleDogd2Via2l0Z3RrLTIuOC41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHdlYmtpdGd0ay0yLjguNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAotKysrIHdlYmtpdGd0ay0yLjguNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKLUBAIC0yODU0LDcgKzI4NTQsNyBAQCBwdWJsaWM6Ci0gI2lmIE9TKExJTlVYKSAmJiBDT01QSUxFUihHQ0MpCi0gICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBsaW51eFBhZ2VGbHVzaCh1aW50cHRyX3QgYmVnaW4sIHVpbnRwdHJfdCBlbmQpCi0gICAgIHsKLS0gICAgICAgIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJlZ2luKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kKSk7Ci0rICAgICAgICBfX2J1aWx0aW5fX19jbGVhcl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihiZWdpbiksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVuZCkpOwotICAgICB9Ci0gI2VuZGlmCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjEwLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjEwLjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjZiOWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi4xMC43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotU1VNTUFSWSA9ICJXZWJLaXQgd2ViIHJlbmRlcmluZyBlbmdpbmUgZm9yIHRoZSBHVEsrIHBsYXRmb3JtIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy8iCi0KLUxJQ0VOU0UgPSAiQlNEICYgTEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DT1BZSU5HLkxJQjttZDU9ZDBjNmQ2Mzk3YTVkODQyODZkZGE3NThkYTU3YmQ2OTEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYktpdC9MSUNFTlNFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUFQUExFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCi0JCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTI7bWQ1PTM2MzU3ZmZkZTJiNjRhZTE3N2IyNDk0NDQ1Yjc5ZDIxIFwKLQkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMi4xO21kNT1hNzc4YTMzZWYzMzhhYmJhZjhiOGE3YzM2YjZlZWM4MCBcCi0JCSAgICIKLQotU1JDX1VSSSA9ICJcCi0gIGh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgZmlsZTovL2NsYW5nLnBhdGNoIFwKLSAgZmlsZTovLzAwMDEtRW5hYmxlLWJhY2t0cmFjZS1vbi1saW51eC13aGVuLXVzaW5nLWdsaWJjLnBhdGNoIFwKLSAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtbm9uLWdsaWJjLWxpYnJhcmllcy1vbi1saW51eC5wYXRjaCBcCi0gIGZpbGU6Ly8wMDAxLUZpbmRHT2JqZWN0SW50cm9zcGVjdGlvbi5jbWFrZS1wcmVmaXgtdmFyaWFibGVzLW9idGEucGF0Y2ggXAotICBmaWxlOi8vMDAwMS1XaGVuLWJ1aWxkaW5nLWludHJvc3BlY3Rpb24tZmlsZXMtYWRkLUNNQUtFX0NfRkxBR1MtLnBhdGNoIFwKLSAgZmlsZTovLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaCBcCi0gICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI4NDgzMmI5ZDgzMjk0MTNiNGYxZDg3ZGY1ZjdlOGVmZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5OTBkNjJjODJlZDZkZWRlMzFhNmZmMGE4MmQ4NDdmMTZiODEyODQyZmYzZTEwOTNkMTcxMTM2Mjc2NTI4NjRlIgotCi1pbmhlcml0IGNtYWtlIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBwZXJsbmF0aXZlIHB5dGhvbm5hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi0jIGRlcGVuZHMgb24gbGlieHQKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLURFUEVORFMgPSAiemxpYiBsaWJzb3VwLTIuNCBjdXJsIGxpYnhtbDIgY2Fpcm8gbGlieHNsdCBsaWJ4dCBsaWJpZG4gZ251dGxzIFwKLSAgICAgICAgICAgZ3RrKzMgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZmxleC1uYXRpdmUgZ3BlcmYtbmF0aXZlIHNxbGl0ZTMgXAotCSAgIHBhbmdvIGljdSBiaXNvbi1uYXRpdmUgZ25vbWUtY29tbW9uIGdhd2sgaW50bHRvb2wtbmF0aXZlIGxpYndlYnAgXAotCSAgIGF0ayB1ZGV2IGhhcmZidXp6IGpwZWcgbGlicG5nIHB1bHNlYXVkaW8gbGlicnN2ZyBsaWJ0aGVvcmEgbGlidm9yYmlzIGxpYnhjb21wb3NpdGUgbGlieHRzdCBcCi0JICAgcnVieS1uYXRpdmUgbGlibm90aWZ5IGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBcCi0gICAgICAgICAgIgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmFzZV9jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnd2F5bGFuZCcgLGQpfSBcCi0gICAgICAgICAgICAgICAgICAgJHtAYmFzZV9jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICd3ZWJnbCcsICcnICxkKX0gXAotICAgICAgICAgICAgICAgICAgIGVuY2hhbnQgXAotICAgICAgICAgICAgICAgICAgIGd0azIgXAotICAgICAgICAgICAgICAgICAgIGxpYnNlY3JldCBcCi0gICAgICAgICAgICAgICAgICAiCi0KLVBBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLURFTkFCTEVfV0FZTEFORF9UQVJHRVQ9T04sLURFTkFCTEVfV0FZTEFORF9UQVJHRVQ9T0ZGLHdheWxhbmQiCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLURFTkFCTEVfWDExX1RBUkdFVD1PTiwtREVOQUJMRV9YMTFfVEFSR0VUPU9GRix2aXJ0dWFsL2xpYngxMSIKLVBBQ0tBR0VDT05GSUdbZ2VvY2x1ZV0gPSAiLURFTkFCTEVfR0VPTE9DQVRJT049T04sLURFTkFCTEVfR0VPTE9DQVRJT049T0ZGLGdlb2NsdWUiCi1QQUNLQUdFQ09ORklHW2VuY2hhbnRdID0gIi1ERU5BQkxFX1NQRUxMQ0hFQ0s9T04sLURFTkFCTEVfU1BFTExDSEVDSz1PRkYsZW5jaGFudCIKLVBBQ0tBR0VDT05GSUdbZ3RrMl0gPSAiLURFTkFCTEVfUExVR0lOX1BST0NFU1NfR1RLMj1PTiwtREVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyPU9GRixndGsrIgotUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLURFTkFCTEVfR0xFUzI9T04sLURFTkFCTEVfR0xFUzI9T0ZGLHZpcnR1YWwvbGliZ2xlczIiCi1QQUNLQUdFQ09ORklHW3dlYmdsXSA9ICItREVOQUJMRV9XRUJHTD1PTiwtREVOQUJMRV9XRUJHTD1PRkYsdmlydHVhbC9saWJnbCIKLVBBQ0tBR0VDT05GSUdbbGlic2VjcmV0XSA9ICItREVOQUJMRV9DUkVERU5USUFMX1NUT1JBR0U9T04sLURFTkFCTEVfQ1JFREVOVElBTF9TVE9SQUdFPU9GRixsaWJzZWNyZXQiCi1QQUNLQUdFQ09ORklHW2xpYmh5cGhlbl0gPSAiLURVU0VfTElCSFlQSEVOPU9OLC1EVVNFX0xJQkhZUEhFTj1PRkYsbGliaHlwaGVuIgotCi1FWFRSQV9PRUNNQUtFID0gIiBcCi0JCS1EUE9SVD1HVEsgXAotCQktRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSBcCi0JCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHSV9EQVRBX0VOQUJMRUQnLCAnVHJ1ZScsICctREVOQUJMRV9JTlRST1NQRUNUSU9OPU9OJywgJy1ERU5BQkxFX0lOVFJPU1BFQ1RJT049T0ZGJywgZCl9IFwKLQkJLURFTkFCTEVfR1RLRE9DPU9GRiBcCi0JCS1ERU5BQkxFX01JTklCUk9XU0VSPU9OIFwKLQkJIgotCi0jIEphdmFzY3JpcHQgSklUIGlzIG5vdCBzdXBwb3J0ZWQgb24gcG93ZXJwYwotRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgLURFTkFCTEVfSklUPU9GRiAiCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotCi0jIEFSTSBKSVQgY29kZSBkb2VzIG5vdCBidWlsZCBvbiBBUk12NS82IGFueW1vcmUsIGFwcGFyZW50bHkgdGhleSB0ZXN0IG9ubHkgb24gdjcgb253YXJkcwotRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjUgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjYgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotCi0jIGJpbnV0aWxzIDIuMjUuMSBoYXMgYSBidWcgb24gYWFyY2g2NDoKLSMgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTg0MzAKLUVYVFJBX09FQ01BS0VfYXBwZW5kX2FhcmNoNjQgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKLQotIyBKSVQgbm90IHN1cHBvcnRlZCBvbiBNSVBTIGVpdGhlcgotRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwcyA9ICIgLURFTkFCTEVfSklUPU9GRiAiCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9taXBzNjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3dlYmtpdDJndGstNC4wL2luamVjdGVkLWJ1bmRsZS9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCi0KLSMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwMzcwLwotQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCi0KLSMgSW52YWxpZCBkYXRhIG1lbW9yeSBhY2Nlc3M6IDB4MDAwMDAwMDAKLSMgLi4uCi0jIHFlbXU6IHVuY2F1Z2h0IHRhcmdldCBzaWduYWwgMTEgKFNlZ21lbnRhdGlvbiBmYXVsdCkgLSBjb3JlIGR1bXBlZAotIyBTZWdtZW50YXRpb24gZmF1bHQKLUVYVFJBX09FQ01BS0VfYXBwZW5kX3Bvd2VycGMgPSAiIC1ERU5BQkxFX0lOVFJPU1BFQ1RJT049T0ZGICIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi4xMi41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi4xMi41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MWQwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjEyLjUuYmIKQEAgLTAsMCArMSwxMDggQEAKK1NVTU1BUlkgPSAiV2ViS2l0IHdlYiByZW5kZXJpbmcgZW5naW5lIGZvciB0aGUgR1RLKyBwbGF0Zm9ybSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvIgorCitMSUNFTlNFID0gIkJTRCAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ09QWUlORy5MSUI7bWQ1PWQwYzZkNjM5N2E1ZDg0Mjg2ZGRhNzU4ZGE1N2JkNjkxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9XZWJLaXQvTElDRU5TRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1BUFBMRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorCQkgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtTEdQTC0yO21kNT0zNjM1N2ZmZGUyYjY0YWUxNzdiMjQ5NDQ0NWI3OWQyMSBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTIuMTttZDU9YTc3OGEzM2VmMzM4YWJiYWY4YjhhN2MzNmI2ZWVjODAgXAorCQkgICAiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgIGZpbGU6Ly8wMDAxLUZpbmRHT2JqZWN0SW50cm9zcGVjdGlvbi5jbWFrZS1wcmVmaXgtdmFyaWFibGVzLW9idGEucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1XaGVuLWJ1aWxkaW5nLWludHJvc3BlY3Rpb24tZmlsZXMtYWRkLUNNQUtFX0NfRkxBR1MtLnBhdGNoIFwKKyAgZmlsZTovLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaCBcCisgIGZpbGU6Ly8wMDAxLVdlYktpdE1hY3Jvcy1BcHBlbmQtdG8tSS1hbmQtbm90LXRvLWlzeXN0ZW0ucGF0Y2ggXAorICBmaWxlOi8vbXVzbC1maXhlcy5wYXRjaCBcCisgIGZpbGU6Ly9wcGMtbXVzbC1maXgucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1GaXgtcmFjeS1wYXJhbGxlbC1idWlsZC1vZi1XZWJLaXQyLTQuMC5naXIucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1Ud2Vhay1ndGtkb2Mtc2V0dGluZ3Mtc28tdGhhdC1ndGtkb2MtZ2VuZXJhdGlvbi13b3JrLnBhdGNoIFwKKyAgIgorU1JDX1VSSVttZDVzdW1dID0gIjdhOWVhMDBlYzE5NTQ4OGRiOTBmZGViMmQxNzRkZGFmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZiMTQ3ODU0Yjg2NGE1ZjExNWZhZGI5N2IyYjYyMDBiMmY2OTZkYjAxNTIxNmEzNGU3Mjk4ZDExYzg4YjFjNDAiCisKK2luaGVyaXQgY21ha2UgbGliX3BhY2thZ2UgcGtnY29uZmlnIGdvYmplY3QtaW50cm9zcGVjdGlvbiBwZXJsbmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ3RrLWRvYworCisjIFdlIGNhbm5vdCBpbmhlcml0IHB5dGhvbm5hdGl2ZSBiZWNhdXNlIHRoYXQgd291bGQgY29uZmxpY3Qgd2l0aCBpbmhlcml0aW5nIHB5dGhvbjNuYXRpdmUKKyMgKHdoaWNoIGlzIGRvbmUgYnkgZ29iamVjdC1pbnRyb3NwZWN0aW9uKS4gQnV0IHdlYmtpdCBvbmx5IG5lZWRzIHRoZSBwYXRoIHRvIG5hdGl2ZSBQeXRob24gMi54IGJpbmFyeQorIyBzbyB3ZSBzaW1wbHkgc2V0IGl0IGV4cGxpY2l0bHkgaGVyZS4KK0VYVFJBTkFUSVZFUEFUSCArPSAicHl0aG9uLW5hdGl2ZSIKKworIyBkZXBlbmRzIG9uIGxpYnh0CitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitERVBFTkRTID0gInpsaWIgbGlic291cC0yLjQgY3VybCBsaWJ4bWwyIGNhaXJvIGxpYnhzbHQgbGlieHQgbGliaWRuIGdudXRscyBcCisgICAgICAgICAgIGd0ayszIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGZsZXgtbmF0aXZlIGdwZXJmLW5hdGl2ZSBzcWxpdGUzIFwKKwkgICBwYW5nbyBpY3UgYmlzb24tbmF0aXZlIGdhd2sgaW50bHRvb2wtbmF0aXZlIGxpYndlYnAgXAorCSAgIGF0ayB1ZGV2IGhhcmZidXp6IGpwZWcgbGlicG5nIHB1bHNlYXVkaW8gbGlicnN2ZyBsaWJ0aGVvcmEgbGlidm9yYmlzIGxpYnhjb21wb3NpdGUgbGlieHRzdCBcCisJICAgcnVieS1uYXRpdmUgbGlibm90aWZ5IGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBcCisgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJ3dheWxhbmQnICxkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3dlYmdsJywgJycgLGQpfSBcCisgICAgICAgICAgICAgICAgICAgZW5jaGFudCBcCisgICAgICAgICAgICAgICAgICAgbGlic2VjcmV0IFwKKyAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PTiwtREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PRkYsd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItREVOQUJMRV9YMTFfVEFSR0VUPU9OLC1ERU5BQkxFX1gxMV9UQVJHRVQ9T0ZGLHZpcnR1YWwvbGlieDExIgorUEFDS0FHRUNPTkZJR1tnZW9jbHVlXSA9ICItREVOQUJMRV9HRU9MT0NBVElPTj1PTiwtREVOQUJMRV9HRU9MT0NBVElPTj1PRkYsZ2VvY2x1ZSIKK1BBQ0tBR0VDT05GSUdbZW5jaGFudF0gPSAiLURFTkFCTEVfU1BFTExDSEVDSz1PTiwtREVOQUJMRV9TUEVMTENIRUNLPU9GRixlbmNoYW50IgorUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItREVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyPU9OLC1ERU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzI9T0ZGLGd0aysiCitQQUNLQUdFQ09ORklHW2dsZXMyXSA9ICItREVOQUJMRV9HTEVTMj1PTiwtREVOQUJMRV9HTEVTMj1PRkYsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbd2ViZ2xdID0gIi1ERU5BQkxFX1dFQkdMPU9OLC1ERU5BQkxFX1dFQkdMPU9GRix2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1tsaWJzZWNyZXRdID0gIi1ERU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRT1PTiwtREVOQUJMRV9DUkVERU5USUFMX1NUT1JBR0U9T0ZGLGxpYnNlY3JldCIKK1BBQ0tBR0VDT05GSUdbbGliaHlwaGVuXSA9ICItRFVTRV9MSUJIWVBIRU49T04sLURVU0VfTElCSFlQSEVOPU9GRixsaWJoeXBoZW4iCisKK0VYVFJBX09FQ01BS0UgPSAiIFwKKwkJLURQT1JUPUdUSyBcCisJCS1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlIFwKKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0dJX0RBVEFfRU5BQkxFRCcsICdUcnVlJywgJy1ERU5BQkxFX0lOVFJPU1BFQ1RJT049T04nLCAnLURFTkFCTEVfSU5UUk9TUEVDVElPTj1PRkYnLCBkKX0gXAorCQkke0BiYi51dGlscy5jb250YWlucygnR1RLRE9DX0VOQUJMRUQnLCAnVHJ1ZScsICctREVOQUJMRV9HVEtET0M9T04nLCAnLURFTkFCTEVfR1RLRE9DPU9GRicsIGQpfSBcCisJCS1ERU5BQkxFX01JTklCUk9XU0VSPU9OIFwKKwkJIgorCisjIEphdmFzY3JpcHQgSklUIGlzIG5vdCBzdXBwb3J0ZWQgb24gcG93ZXJwYworRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgLURFTkFCTEVfSklUPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorCisjIEFSTSBKSVQgY29kZSBkb2VzIG5vdCBidWlsZCBvbiBBUk12NC81LzYgYW55bW9yZQorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjUgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjYgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorCisjIGJpbnV0aWxzIDIuMjUuMSBoYXMgYSBidWcgb24gYWFyY2g2NDoKKyMgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTg0MzAKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2FhcmNoNjQgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHMgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHM2NCA9ICIgLURVU0VfTERfR09MRD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfdG9vbGNoYWluLWNsYW5nID0gIiAtRFVTRV9MRF9HT0xEPU9GRiAiCisKKyMgSklUIG5vdCBzdXBwb3J0ZWQgb24gTUlQUyBlaXRoZXIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHMgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwczY0ID0gIiAtREVOQUJMRV9KSVQ9T0ZGICIKKworU0VDVVJJVFlfQ0ZMQUdTX3JlbW92ZV9hYXJjaDY0ID0gIi1mcGllIgorU0VDVVJJVFlfQ0ZMQUdTX2FwcGVuZF9hYXJjaDY0ID0gIiAtZlBJRSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS93ZWJraXQyZ3RrLTQuMC9pbmplY3RlZC1idW5kbGUvbGlid2Via2l0Mmd0a2luamVjdGVkYnVuZGxlLnNvIgorCisjIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDM3MC8KK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY2ID0gImFybSIKKworIyBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0NzQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTg4MAorIyBKU0MgSklUIGNhbiBidWlsZCBvbiBBUk12NyB3aXRoIC1tYXJtLCBidXQgZG9lc24ndCB3b3JrIG9uIHJ1bnRpbWUuCisjIFVwc3RyZWFtIG9ubHkgdGVzdHMgcmVndWxhcmx5IHRoZSBKU0MgSklUIG9uIEFSTXY3IHdpdGggVGh1bWIyICgtbXRodW1iKS4KK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjdhID0gInRodW1iIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12N3IgPSAidGh1bWIiCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY3dmUgPSAidGh1bWIiCisKKyMgV2ViS2l0Mi00LjA6IC4uLy4uL2xpYmdwZy1lcnJvci0xLjIxL3NyYy9wb3NpeC1sb2NrLmM6MTE5OiBnZXRfbG9ja19vYmplY3Q6IEFzc2VydGlvbiBgISJzaXplb2YgbG9jayBvYmoiJyBmYWlsZWQuCisjIHFlbXU6IHVuY2F1Z2h0IHRhcmdldCBzaWduYWwgNiAoQWJvcnRlZCkgLSBjb3JlIGR1bXBlZAorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwczY0ID0gIiAtREVOQUJMRV9JTlRST1NQRUNUSU9OPU9GRiAtREVOQUJMRV9HVEtET0M9T0ZGIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYgppbmRleCBkYjE1MzA1Li4zMDJjOTM1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYgpAQCAtMzgsNiArMzgsOSBAQAogIyB4ODZfNjQtbGludXgtbGlidG9vbDogICBlcnJvcjogc3BlY2lmeSBhIHRhZyB3aXRoICctLXRhZycKIENDQUNIRSA9ICIiCiAKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKIAkjIEF2b2lkIGFic29sdXRlIHBhdGhzIGZvciBncmVwIHNpbmNlIGl0IGNhdXNlcyBmYWlsdXJlcwogCSMgd2hlbiB1c2luZyBzc3RhdGUgYmV0d2VlbiBkaWZmZXJlbnQgaG9zdHMgd2l0aCBkaWZmZXJlbnQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcmdwLXN0YW5kYWxvbmUvYXJncC1zdGFuZGFsb25lXzEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcmdwLXN0YW5kYWxvbmUvYXJncC1zdGFuZGFsb25lXzEuMy5iYgppbmRleCBkNjFjOGJlLi5iZDBjZmRmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXJncC1zdGFuZGFsb25lL2FyZ3Atc3RhbmRhbG9uZV8xLjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FyZ3Atc3RhbmRhbG9uZS9hcmdwLXN0YW5kYWxvbmVfMS4zLmJiCkBAIC0xLDcgKzEsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMTUgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KICMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKIAotREVTQ1JJUFRJT04gPSAiR2xpYmMgaGllcmFyY2hpY2FsIGFyZ3VtZW50IHBhcnNpbmcgc3RhbmRhbG9uZSBsaWJyYXJ5IgorU1VNTUFSWSA9ICJHbGliYyBoaWVyYXJjaGljYWwgYXJndW1lbnQgcGFyc2luZyBzdGFuZGFsb25lIGxpYnJhcnkiCiBIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35uaXNzZS9taXNjLyIKIExJQ0VOU0UgPSAiTEdQTC0yLjEiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hcmdwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9MDA4YjdlNTNkZWE2ZjllMWQ5ZmRlZjBkOWNmMzE4NGEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTguMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xOC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGE5M2YzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xOC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotU1VNTUFSWSA9ICJBVC1TUEkgMiBUb29sa2l0IEJyaWRnZSIKLUxJQ0VOU0UgPSAiTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLQotU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJkNzA0MGE1NWRmOTc1ODY1YWIwZDc0YTRiMzI1YWZiNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjNGIxNWY5Mzg2ZDM0ZDQ2NGRkYWQ1ZjZjYzg1NjY5NzQyYzAxNmRmODcxNDFjZWVlOTM1MTMyNDU5NzljMTJkIgotCi1ERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgYXRrIGF0LXNwaTItY29yZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KLQotIyBUaGUgYXQtc3BpMi1jb3JlIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVBBQ0tBR0VTID0rICIke1BOfS1nbm9tZSAke1BOfS1ndGsyIgotCi1GSUxFU18ke1BOfS1nbm9tZSA9ICIke2xpYmRpcn0vZ25vbWUtc2V0dGluZ3MtZGFlbW9uLTMuMC9ndGstbW9kdWxlcyIKLUZJTEVTXyR7UE59LWd0azIgPSAiJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJhdGstYnJpZGdlLioiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMjAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4yMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTIwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMjAuMS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkFULVNQSSAyIFRvb2xraXQgQnJpZGdlIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjIzMzA5YjZmOGUxNjIzODcxYWNlNjM0N2ZiNzM0ZGNlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzNThhNzk0ZTkxOGU4ZjQ3Y2UwYzczNzBlZWU4ZmM4YTYyMDdmZjFhZmU5NzZlYzlmZjU0N2EwMzI3N2JmOGUiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBhdGsgYXQtc3BpMi1jb3JlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCisjIFRoZSBhdC1zcGkyLWNvcmUgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWdub21lICR7UE59LWd0azIiCisKK0ZJTEVTXyR7UE59LWdub21lID0gIiR7bGliZGlyfS9nbm9tZS1zZXR0aW5ncy1kYWVtb24tMy4wL2d0ay1tb2R1bGVzIgorRklMRVNfJHtQTn0tZ3RrMiA9ICIke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmF0ay1icmlkZ2UuKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlLzAwMDEtYnVpbGQtQWRkLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1idWlsZC1BZGQtd2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwM2VhYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlLzAwMDEtYnVpbGQtQWRkLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gMmY0N2M5NzVlYmU1MmI2OTE2YTQ1YWRlMDIzYWUzYmFjMjFiYjBlMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDIxIEp1biAyMDE2IDE2OjAwOjAyICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJ1aWxkOiBBZGQgLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcgorCitEZWZhdWx0IHRvICJwa2ctY29uZmlnIC0tdmFyaWFibGU9c3lzdGVtZHVzZXJ1bml0ZGlyIHN5c3RlbWQiIGJ1dAorYWxsb3cgb3ZlcnJpZGluZyB0aGUgdmFsdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3OTExXQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGJ1cy9NYWtlZmlsZS5hbSB8IDIgKy0KKyBjb25maWd1cmUuYWMgICAgfCA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYnVzL01ha2VmaWxlLmFtIGIvYnVzL01ha2VmaWxlLmFtCitpbmRleCBiMTg5ZTAyLi41MmZiYjBiIDEwMDY0NAorLS0tIGEvYnVzL01ha2VmaWxlLmFtCisrKysgYi9idXMvTWFrZWZpbGUuYW0KK0BAIC0yNiw3ICsyNiw3IEBAIGRidXNzZXJ2aWNlX0RBVEEgPSBvcmcuYTExeS5CdXMuc2VydmljZQorIG9yZy5hMTF5LkJ1cy5zZXJ2aWNlOiBvcmcuYTExeS5CdXMuc2VydmljZS5pbgorIAlzZWQgLWUgJChzdWJzdGl0dXRpb25zKSAkPCA+ICRALnRtcCAmJiBtdiAkQC50bXAgJEAKKyAKKy1zeXN0ZW1kX3VzZXJkaXIgPSAkKHByZWZpeCkvbGliL3N5c3RlbWQvdXNlcgorK3N5c3RlbWRfdXNlcmRpciA9ICQoc3lzdGVtZHVzZXJ1bml0ZGlyKQorIHN5c3RlbWRfdXNlcl9EQVRBID0gYXQtc3BpLWRidXMtYnVzLnNlcnZpY2UKKyBhdC1zcGktZGJ1cy1idXMuc2VydmljZTogYXQtc3BpLWRidXMtYnVzLnNlcnZpY2UuaW4gTWFrZWZpbGUKKyAJc2VkIC1lICQoc3Vic3RpdHV0aW9ucykgJDwgPiAkQC50bXAgJiYgbXYgJEAudG1wICRACitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBmOTA2MWMyLi4yYjhlZWVkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xODMsNiArMTgzLDEzIEBAIGVsc2UKKyBmaQorIEFDX1NVQlNUKERCVVNfU0VSVklDRVNfRElSKQorIAorK0FDX0FSR19XSVRIKFtzeXN0ZW1kdXNlcnVuaXRkaXJdLAorKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyPURJUl0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RpcmVjdG9yeSBmb3Igc3lzdGVtZCBzZXJ2aWNlIGZpbGVzXSksCisrICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgW3dpdGhfc3lzdGVtZHVzZXJ1bml0ZGlyPSQoJFBLR19DT05GSUcgLS12YXJpYWJsZT1zeXN0ZW1kdXNlcnVuaXRkaXIgc3lzdGVtZCldKQorK0FDX1NVQlNUKFtzeXN0ZW1kdXNlcnVuaXRkaXJdLCBbJHdpdGhfc3lzdGVtZHVzZXJ1bml0ZGlyXSkKKysKKyBBQ19QQVRIX1BST0coR0xJQl9NS0VOVU1TLCBnbGliLW1rZW51bXMpCisgCisgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFswLjkuNl0pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTguMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTguMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlZDU5Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjE4LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1TVU1NQVJZID0gIkFzc2lzdGl2ZSBUZWNobm9sb2d5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIChkYnVzIGNvcmUpIgotTElDRU5TRSA9ICJMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKLQotTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgotCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImZjMTg4MDFlNTZmNmNlNjkxNDEyNmY4MzdkNDJmNTU2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkYTI2YWRkOTQxNTVmOTdkMGY2MDFhMjBjYjdhMGUzZmQzYmExNTg4YzM1MjBiNzI4ODMxNjQ5NDAyN2Q2MjkiCi0KLURFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCB2aXJ0dWFsL2xpYngxMSBsaWJ4aSBsaWJ4dHN0IGludGx0b29sLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLSMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS14ZXZpZSAtLXdpdGgtZGJ1cy1kYWVtb25kaXI9JHtiaW5kaXJ9IgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9hY2Nlc3NpYmlsaXR5LXNlcnZpY2VzLyouc2VydmljZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkyNDNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4yMC4yLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQXNzaXN0aXZlIFRlY2hub2xvZ3kgU2VydmljZSBQcm92aWRlciBJbnRlcmZhY2UgKGRidXMgY29yZSkiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU5ZjI4OGJhOTgyZDYwNTE4ZjM3NWI1ODk4MjgzODg2IgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLUFkZC13aXRoLXN5c3RlbWR1c2VydW5pdGRpci5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjZmNjMwM2RhMmU3MjMxN2Y4ODE3MDNmNDBiZjBjNjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODhhNGRlOWQ0MzEzOWYxM2NjYTUzMWI0N2I5MDFiYzFiNTZlMGFiMDZiYTg5OTEyNjY0NGFiZDRhYzE2YTE0MyIKKworREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIHZpcnR1YWwvbGlieDExIGxpYnhpIGxpYnh0c3QgaW50bHRvb2wtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBndGstZG9jIGdldHRleHQgc3lzdGVtZCBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS14ZXZpZSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdXNlcl91bml0ZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLWRidXMtZGFlbW9uZGlyPSR7YmluZGlyfSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvYWNjZXNzaWJpbGl0eS1zZXJ2aWNlcy8qLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGVmYXVsdHMvYXQtc3BpMiBcCisgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0vYXQtc3BpLWRidXMtYnVzLnNlcnZpY2XCoFwKKyAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjE4LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjE4LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMGU4MmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xOC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotU1VNTUFSWSA9ICJBY2Nlc3NpYmlsaXR5IHRvb2xraXQgZm9yIEdOT01FIgotSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL0dBUC8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKLVNFQ1RJT04gPSAieDExL2xpYnMiCi0KLUxJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0ay9hdGt1dGlsLmM7ZW5kbGluZT0xODttZDU9NmZkMzFjZDJmZGM5YjMwZjYxOWNhOGQ4MTliYzEyZDMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0ay5oO2VuZGxpbmU9MTg7bWQ1PWZjZDc3MTAxODdlMGVhZTQ4NWUzNTZjMzBkMWIwYzNiIgotCi1ERVBFTkRTID0gImdsaWItMi4wIgotCi1pbmhlcml0IGdub21lYmFzZSBndGstZG9jIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZmQzNjc4ZjM1MDA0YjRjOTJlM2RhMzkzNTY5OTYwNTQiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJjZTZjNDhkNzdiZjk1MTA4MzAyOWQ1YTM5NmRkNTUyZDgzNmZmZjNjMTcxNWQzYTcwMjJlOTE3ZTQ2ZDBjOTJiIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1nbGlidGVzdCBcCi0gICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjIwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjIwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyMjM1NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMjAuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkFjY2Vzc2liaWxpdHkgdG9vbGtpdCBmb3IgR05PTUUiCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvR0FQLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0a3V0aWwuYztlbmRsaW5lPTE4O21kNT02ZmQzMWNkMmZkYzliMzBmNjE5Y2E4ZDgxOWJjMTJkMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrLmg7ZW5kbGluZT0xODttZDU9ZmNkNzcxMDE4N2UwZWFlNDg1ZTM1NmMzMGQxYjBjM2IiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgZ2V0dGV4dCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjUxODdiMDk3MmY0ZDM5MDVmMjg1NTQwYjMxMzk1ZTIwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNDkzYTUwZjZjNGEwMjVmNTg4ZDM4MGE1NTFlYzI3N2UwNzBiMjhhODJlNjNlZjhlM2MwNmIzZWU3YzEyMzhmMCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ2xpYnRlc3QgXAorICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC5pbmMKaW5kZXggMTk4ZmI0Zi4uMzdhMDIxOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wuaW5jCkBAIC0xNCw2ICsxNCw3IEBACiAgICAgICAgICAgIGZpbGU6Ly9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly90ZXN0LWZpeC1pbnN1ZmZpY2llbnQtcXVvdGluZy1vZi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly90ZXN0LWZpeHVwcy1vbi1TRUxpbnV4LW1hY2hpbmVzLWZvci1yb290LXRlc3RjYXNlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LWZpeC1kaXJlY3RvcnktcGVybWlzc2lvbnMucGF0Y2ggXAogIgogCiByZXF1aXJlIGVhLWFjbC5pbmMKQEAgLTMzLDcgKzM0LDcgQEAKIGluaGVyaXQgcHRlc3QKIAogZG9faW5zdGFsbF9wdGVzdCgpIHsKLQl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIG5mcyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWMgLS1leGNsdWRlPW5mcyB0ZXN0LyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKIAlta2RpciAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlCiAJY3AgJHtTfS9pbmNsdWRlL2J1aWxkZGVmcyAke1N9L2luY2x1ZGUvYnVpbGRtYWNyb3MgJHtTfS9pbmNsdWRlL2J1aWxkcnVsZXMgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZS8KIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvcnVuLXB0ZXN0CmluZGV4IDNiMzFjYzkuLmE1Njk0NmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9ydW4tcHRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdApAQCAtMSw3ICsxLDY0IEBACiAjIS9iaW4vc2gKKyMKKyNUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biBhY2wgdGVzdCBzdWl0ZXMKIAotZ3Bhc3N3ZCAtYSBkYWVtb24gYmluCi1tYWtlIC1DIHRlc3QgLWsgdGVzdHMgcm9vdC10ZXN0cyB8c2VkIFwKLSAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBvayR8UEFTUzogXDF8JyBcCi0gLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gZmFpbGVkfEZBSUw6IFwxfCcKLWdwYXNzd2QgLWQgZGFlbW9uIGJpbgorI3VtYXNrIDA3NworCitFWFQzX0lNQUdFPWV4dDMuaW1nCitFWFQzX01PVU5UX1BPSU5UPS9tbnQvZXh0MworCit0cmFwICdybSAtZiAke0VYVDNfSU1BR0V9JyBFWElUCisKK2RkIGlmPS9kZXYvemVybyBvZj0ke0VYVDNfSU1BR0V9IGJzPTFNIGNvdW50PTEKK2lmIFsgIiQ/IiAtZXEgMCBdOyB0aGVuCisJZWNobyAiUEFTUzogZHVtcCBleHQzLmltZyIKK2Vsc2UKKwllY2hvICJGQUlMOiBkdW1wIGV4dDMuaW1nIgorCWV4aXQgMQorZmkKKworbWtmcy5leHQzIC1GICR7RVhUM19JTUFHRX0KK2lmIFsgIiQ/IiAtZXEgMCBdOyB0aGVuCisJZWNobyAiUEFTUzogbWtmcy5leHQzIC1GIGV4dDMuaW1nIgorZWxzZQorCWVjaG8gIkZBSUw6IG1rZnMuZXh0MyAtRiBleHQzLmltZyIKKwlleGl0IDEKK2ZpCisKK2lmIFsgLWQgJEVYVDNfTU9VTlRfUE9JTlQgXTsgdGhlbgorCWVjaG8gIm1vdW50IHBvaW50IGV4aXN0IgorZWxzZQorCW1rZGlyIC1wICRFWFQzX01PVU5UX1BPSU5UCitmaQorCisKK21vdW50IC1vIGxvb3AscncsYWNsICAke0VYVDNfSU1BR0V9ICRFWFQzX01PVU5UX1BPSU5UCitpZiBbICIkPyIgLWVxIDAgXTsgdGhlbgorCWVjaG8gIlBBU1M6IG1vdW50IGV4dDMuaW1nIgorZWxzZQorCWVjaG8gIkZBSUw6IG1vdW50IGV4dDMuaW1nIgorCWV4aXQgMQorZmkKKworY3AgLXJmIC4vdGVzdC8gJEVYVDNfTU9VTlRfUE9JTlQKKworY2QgJEVYVDNfTU9VTlRfUE9JTlQvdGVzdC8KKworaWYJc2VkIC1lICdzIV5iaW46eDoyOiQhYmluOng6MjpkYWVtb24hJyA8IC9ldGMvZ3JvdXAgPiBndG1wCit0aGVuCWlmCWNwIC9ldGMvZ3JvdXAgZ3JvdXAub3JpZzsKKwl0aGVuCWNwIGd0bXAgL2V0Yy9ncm91cAorCQltYWtlICAtayB0ZXN0cyByb290LXRlc3RzIHwgc2VkIFwKKwkJCS1lICdzfF5cWy4qXF0gXCguKlwpIC0tIG9rJHxQQVNTOiBcMXwnIFwKKwkgIAkJLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gZmFpbGVkfEZBSUw6IFwxfCcKKwkJY3AgZ3JvdXAub3JpZyAvZXRjL2dyb3VwCisJZWxzZQllY2hvICJGQUlMOiBjb3VsZG4ndCBzYXZlIG9yaWdpbmFsIGdyb3VwIGZpbGUuIgorCQlleGl0IDEKKwlmaQorZWxzZQllY2hvICJGQUlMOiBjb3VsZG4ndCBjcmVhdGUgbW9kaWZpZWQgZ3JvdXAgZmlsZS4iCisJZXhpdCAxCitmaQorCitjZCAtCit1bW91bnQgJEVYVDNfTU9VTlRfUE9JTlQKK3JtIC1yZiAkRVhUM19NT1VOVF9QT0lOVAorcm0gJEVYVDNfSU1BR0UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC90ZXN0LWZpeC1kaXJlY3RvcnktcGVybWlzc2lvbnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvdGVzdC1maXgtZGlyZWN0b3J5LXBlcm1pc3Npb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDUxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvdGVzdC1maXgtZGlyZWN0b3J5LXBlcm1pc3Npb25zLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2NvbW1pdCBjNDViYWU4NDgxN2E3MGZlZjZjMmI2NjFhMDdhNDkyYTBkMjNhZTg1CitBdXRob3I6IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KK0RhdGU6ICAgV2VkIE1heSAxMSAxNToxNjowNiAyMDE2IC0wNTAwCisKKyAgICBGaXggcGVybWlzc2lvbnMgb24gdGVtcG9yYXJ5IGRpcmVjdG9yeQorCisgICAgVGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkncyBwZXJtaXNzaW9ucyBoYXZlIHRvIGFsbG93IG90aGVyIHVzZXJzIHRvCisgICAgdmlldyB0aGUgZGlyZWN0b3J5LiBBIGRlZmF1bHQgdW1hc2sgb2YgMDIyIGlzIGNvbW1vbiwgYnV0IG5vdCBtYW5kYXRvcnksCisgICAgYW5kIHNlY3VyZSBzeXN0ZW1zIG1heSBoYXZlIG1vcmUgcmVzdHJpY3RpdmUgZGVmYXVsdHMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBQZXRlciBTZWViYWNoIDxwZXRlci5zZWViYWNoQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0L3Jvb3QvcGVybWlzc2lvbnMudGVzdCBiL3Rlc3Qvcm9vdC9wZXJtaXNzaW9ucy50ZXN0CitpbmRleCA0MjYxNWY1Li4wOThiNTJhIDEwMDY0NAorLS0tIGEvdGVzdC9yb290L3Blcm1pc3Npb25zLnRlc3QKKysrKyBiL3Rlc3Qvcm9vdC9wZXJtaXNzaW9ucy50ZXN0CitAQCAtMTYsNiArMTYsNyBAQCBDcnkgaW1tZWRpYXRlbHkgaWYgd2UgYXJlIG5vdCBydW5uaW5nIGFzIHJvb3QuCisgRmlyc3QsIHNldCB1cCBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNyZWF0ZSBhIHJlZ3VsYXIgZmlsZSB3aXRoCisgZGVmaW5lZCBwZXJtaXNzaW9ucy4KKyAKKysJJCB1bWFzayAwMjIKKyAJJCBta2RpciBkCisgCSQgY2QgZAorIAkkIHVtYXNrIDAyNwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwppbmRleCA2ODYwOTc4Li5lOGI1ZDA1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwpAQCAtMiw3ICsyLDcgQEAKIEhPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL2F0dHIvIgogU0VDVElPTiA9ICJsaWJzIgogCi1ERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpbnRsIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmludGwiCiAKIExJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgogTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCkBAIC0yNiw3ICsyNiw3IEBACiBpbmhlcml0IHB0ZXN0CiAKIGRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JdGFyIC1jZiAtIHRlc3QvIC0tZXhjbHVkZSBleHQgfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jIC0tZXhjbHVkZT1leHQgdGVzdC8gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCiAJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZQogCWZvciBpIGluIGJ1aWxkZGVmcyBidWlsZG1hY3JvcyBidWlsZHJ1bGVzOyBcCiAJICBkbyBjcCAke1N9L2luY2x1ZGUvJGkgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZS87IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIKaW5kZXggNDRlZWUzOS4uNTU2YzhlNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIKQEAgLTIsOSArMiw5IEBACiAKICMgY29uZmlndXJlLmFjIHdhcyBtaXNzaW5nIGZyb20gdGhlIHJlbGVhc2UgdGFyYmFsbC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4KICMgZnV0dXJlIHJlbGVhc2VzIG9mIGF0dHIsIHJlbW92ZSB0aGlzIHdoZW4gdXBkYXRpbmcgdGhlIHJlY2lwZS4KLVNSQ19VUklfYXBwZW5kICs9ICJmaWxlOi8vYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBcCi0gICAgICAgICAgICAgICAgICAgZmlsZTovL2RvbnQtdXNlLWRlY2wtbWFjcm9zLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICIKK1NSQ19VUkkgKz0gImZpbGU6Ly9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kb250LXVzZS1kZWNsLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjg0ZjU4ZGVjMDBiNjBmMmRjOGZkMWM5NzA5MjkxY2M3IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI1NzcyZjY1M2FjNWIyZTNjZWViODlkZjUwZTQ2ODg4OTFlMjFmNzIzYzQ2MDYzNjU0ODk3MTY1MmFmMGE4NTkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmFzaC1jb21wbGV0aW9uL2Jhc2gtY29tcGxldGlvbl8yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmFzaC1jb21wbGV0aW9uL2Jhc2gtY29tcGxldGlvbl8yLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjU3ZDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jhc2gtY29tcGxldGlvbi9iYXNoLWNvbXBsZXRpb25fMi4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotU1VNTUFSWSA9ICJQcm9ncmFtbWFibGUgQ29tcGxldGlvbiBmb3IgQmFzaCA0IgotSE9NRVBBR0UgPSAiaHR0cDovL2Jhc2gtY29tcGxldGlvbi5hbGlvdGguZGViaWFuLm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvYmFzaC1jb21wbGV0aW9uLyIKLQotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgotCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi0KLVNSQ19VUkk9Imh0dHA6Ly9iYXNoLWNvbXBsZXRpb24uYWxpb3RoLmRlYmlhbi5vcmcvZmlsZXMvJHtCUE59LSR7UFZ9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI0ZTJhOWYxMWE0MDQyYTM4ZWU3OWRkY2QwNDhlOGI5ZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyYjYwNjgwNGE3ZDVmODIzMzgwYTg4MmUwZjdiNmM4YTM3YjBlNzY4ZTcyYzNkNDEwN2M1MWZiZThhNDZhZTRmIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiYmFzaC1jb21wbGV0aW9uLSg/UDxwdmVyPig/ITIwMDgpLispXC50YXIiCi0KLVBBUkFMTEVMX01BS0UgPSAiIgotCi1pbmhlcml0IGF1dG90b29scwotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIGNvbXBhdGRpcgotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvCi0JZWNobyAnLiAke2RhdGFkaXJ9LyR7QlBOfS9iYXNoX2NvbXBsZXRpb24nID4ke0R9JHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24KLQotCSMgRGVsZXRlIGZpbGVzIGFscmVhZHkgcHJvdmlkZWQgYnkgdXRpbC1saW51eAotCWxvY2FsIGkKLQlmb3IgaSBpbiBjYWwgZG1lc2cgZWplY3QgaGV4ZHVtcCBod2Nsb2NrIGlvbmljZSBsb29rIHJlbmljZSBydGN3YWtlIHN1OyBkbwotCQlybSAke0R9JHtkYXRhZGlyfS8ke0JQTn0vY29tcGxldGlvbnMvJGkKLQlkb25lCi0KLQkjIERlbGV0ZSBmaWxlcyBmb3IgbmV0d29ya21hbmFnZXIKLQlybSAke0R9JHtkYXRhZGlyfS8ke0JQTn0vY29tcGxldGlvbnMvbm1jbGkKLX0KLQotUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKLQotIyBTb21lIHJlY2lwZXMgYXJlIHByb3ZpZGluZyAke1BOfS1iYXNoLWNvbXBsZXRpb24gcGFja2FnZXMKLVBBQ0tBR0VTID0rICIke1BOfS1leHRyYSIKLUZJTEVTXyR7UE59LWV4dHJhID0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbXBsZXRpb25zLyBcCi0gICAgJHtkYXRhZGlyfS8ke0JQTn0vaGVscGVycy8iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jhc2gtY29tcGxldGlvbi9iYXNoLWNvbXBsZXRpb25fMi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jhc2gtY29tcGxldGlvbi9iYXNoLWNvbXBsZXRpb25fMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzE5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmFzaC1jb21wbGV0aW9uL2Jhc2gtY29tcGxldGlvbl8yLjQuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJQcm9ncmFtbWFibGUgQ29tcGxldGlvbiBmb3IgQmFzaCA0IgorSE9NRVBBR0UgPSAiaHR0cDovL2Jhc2gtY29tcGxldGlvbi5hbGlvdGguZGViaWFuLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvYmFzaC1jb21wbGV0aW9uLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL3Njb3AvYmFzaC1jb21wbGV0aW9uL3JlbGVhc2VzL2Rvd25sb2FkLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZWE5NDg2NGZiMmIyNDQ2ZmJiZGY4MmYxMGJkMjVkZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMGY3NmI1MjAyZmVjOWVmOGZmYmE4MmY1NjA1MDI1Y2EwMDNmMjdjZmQ3YTg1MTE1ZjgzOGJhNTEzNjg5MGY2IgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiYmFzaC1jb21wbGV0aW9uLSg/UDxwdmVyPig/ITIwMDgpLispXC50YXIiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL3Njb3AvYmFzaC1jb21wbGV0aW9uL3JlbGVhc2VzIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBjb21wYXRkaXIKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kLworCWVjaG8gJy4gJHtkYXRhZGlyfS8ke0JQTn0vYmFzaF9jb21wbGV0aW9uJyA+JHtEfSR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uCisKKwkjIERlbGV0ZSBmaWxlcyBhbHJlYWR5IHByb3ZpZGVkIGJ5IHV0aWwtbGludXgKKwlsb2NhbCBpCisJZm9yIGkgaW4gbW91bnQgdW1vdW50OyBkbworCQlybSAke0R9JHtkYXRhZGlyfS8ke0JQTn0vY29tcGxldGlvbnMvJGkKKwlkb25lCit9CisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCisKKyMgU29tZSByZWNpcGVzIGFyZSBwcm92aWRpbmcgJHtQTn0tYmFzaC1jb21wbGV0aW9uIHBhY2thZ2VzCitQQUNLQUdFUyA9KyAiJHtQTn0tZXh0cmEiCitGSUxFU18ke1BOfS1leHRyYSA9ICIke2RhdGFkaXJ9LyR7QlBOfS9jb21wbGV0aW9ucy8gXAorICAgICR7ZGF0YWRpcn0vJHtCUE59L2hlbHBlcnMvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiOTA3ZmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUZyb20gODI5YTg5ZTdmNTc4NTIzOWE5Mzg0ZTNhZmQ0NmM5MDBmOWQ3NmFkYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDE5OjU1OjMyICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGZpeCBidWlsZCB3aXRoIG11c2wKLQotc2lnbmFsLmggYWxyZWFkeSBpbmNsdWRlcyBiaXRzL3NpZ2NvbnRleHQuaAotRG9jdW1lbnRhdGlvbiBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGlmIHlvdSBuZWVkIHRoZSBkZWZpbml0aW9ucyBpbgotc2lnY29udGV4dC5oLCB5b3UgYXJlIHN1cHBvc2VkIHRvIGluY2x1ZGUgc2lnbmFsLmggYW5kIG5vdCBzaWdjb250ZXh0LmguCi0KLWEgZ29vZCBmaXggc2hvdWxkIGJlIHRvIHJlbW92ZSBnbGliYwotc3BlY2lmaWMgdW5kZXJzdGFuZGluZywgaW4gdGhvc2UgaWZkZWYncwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIG9zX2RlcC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvb3NfZGVwLmMgYi9vc19kZXAuYwotaW5kZXggMDhjNTAxZC4uNWNiNzg3MyAxMDA2NDQKLS0tLSBhL29zX2RlcC5jCi0rKysgYi9vc19kZXAuYwotQEAgLTQxLDcgKzQxLDcgQEAKLSAjICAgZWxzZSAvKiBfX0dMSUJDX18gPCAyICovCi0gICAgICAgLyogbGliYzUgZG9lc24ndCBoYXZlIDxzaWdjb250ZXh0Lmg+OiBnbyBkaXJlY3RseSB3aXRoIHRoZSBrZXJuZWwgICAqLwotICAgICAgIC8qIG9uZS4gIENoZWNrIExJTlVYX1ZFUlNJT05fQ09ERSB0byBzZWUgd2hpY2ggd2Ugc2hvdWxkIHJlZmVyZW5jZS4gKi8KLS0jICAgICBpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgotKyMgICAgIGluY2x1ZGUgPHNpZ25hbC5oPgotICMgICBlbmRpZiAvKiBfX0dMSUJDX18gPCAyICovCi0gIyBlbmRpZgotICNlbmRpZiAvKiBMSU5VWCAmJiAhUE9XRVJQQyAqLwotLS0gCi0yLjUuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMi1BbHRlcmEtTklPUzItc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAyLUFsdGVyYS1OSU9TMi1zdXBwb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzNjNTQwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAyLUFsdGVyYS1OSU9TMi1zdXBwb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotRnJvbSAyNTcxZGYwZTMwYjQ5NzZkN2ExMmRiYzZmYmVjNGYxYzQwMjc5MjRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1EYXRlOiBUaHUsIDI4IEphbiAyMDE2IDA0OjEzOjEzICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEFsdGVyYSBOSU9TMiBzdXBwb3J0Ci0KLUFkZCBzaW1wbGUgbmlvczIgY29uZmlndXJhdGlvbiBzdXBwb3J0LgotCi0qIGluY2x1ZGUvcHJpdmF0ZS9nY2NvbmZpZy5oIChOSU9TMik6IE5ldyBtYWNyby4KLSogaW5jbHVkZS9wcml2YXRlL2djY29uZmlnLmggKG1hY2hfdHlwZV9rbm93biwgQ1BQX1dPUkRTWiwgTUFDSF9UWVBFLAotT1NfVFlQRSwgRFlOQU1JQ19MT0FESU5HLCBfZW5kLCBfX2RhdGFfc3RhcnQsIERBVEFTVEFSVCwgREFUQUVORCwKLUFMSUdOTUVOVCwgSEJMS1NJWkUsIEhCTEtTSVpFLCBMSU5VWF9TVEFDS0JPVFRPTSwgTk9fR0VUQ09OVEVYVCk6Ci1EZWZpbmUgZm9yIE5JT1MyLgotCi1TaWduZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWyBodHRwczovL2dpdGh1Yi5jb20vaXZtYWkvYmR3Z2MuZ2l0IDI1NzFkZjBlMzBiNDk3NmQ3YTEyZGJjNmZiZWM0ZjFjNDAyNzkyNGQgXQotLS0tCi0gaW5jbHVkZS9wcml2YXRlL2djY29uZmlnLmggfCAyNCArKysrKysrKysrKysrKysrKysrKysrKy0KLSAxIGZpbGUgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL2djY29uZmlnLmggYi9pbmNsdWRlL3ByaXZhdGUvZ2Njb25maWcuaAotaW5kZXggYzQ2N2MyNi4uOTJkNDcyNyAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvcHJpdmF0ZS9nY2NvbmZpZy5oCi0rKysgYi9pbmNsdWRlL3ByaXZhdGUvZ2Njb25maWcuaAotQEAgLTE4MSw2ICsxODEsMTAgQEAKLSAjICAgIGVuZGlmCi0gIyAgICBkZWZpbmUgbWFjaF90eXBlX2tub3duCi0gIyBlbmRpZgotKyMgaWYgZGVmaW5lZChfX05JT1MyX18pIHx8IGRlZmluZWQoX19OSU9TMikgfHwgZGVmaW5lZChfX25pb3MyX18pCi0rIyAgIGRlZmluZSBOSU9TMiAvKiBBbHRlcmEgTklPUzIgKi8KLSsjICAgZGVmaW5lIG1hY2hfdHlwZV9rbm93bgotKyMgZW5kaWYKLSAjIGlmIGRlZmluZWQoREdVWCkgJiYgKGRlZmluZWQoaTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykpCi0gIyAgICBkZWZpbmUgSTM4NgotICMgICAgaWZuZGVmIF9VU0lOR19ER1VYCi1AQCAtMTY1OCw2ICsxNjYyLDI0IEBACi0gIyAgIGVuZGlmCi0gIyBlbmRpZgotIAotKyMgaWZkZWYgTklPUzIKLSsjICBkZWZpbmUgQ1BQX1dPUkRTWiAzMgotKyMgIGRlZmluZSBNQUNIX1RZUEUgIk5JT1MyIgotKyMgIGlmZGVmIExJTlVYCi0rIyAgICBkZWZpbmUgT1NfVFlQRSAiTElOVVgiCi0rIyAgICBkZWZpbmUgRFlOQU1JQ19MT0FESU5HCi0rICAgICBleHRlcm4gaW50IF9lbmRbXTsKLSsgICAgIGV4dGVybiBpbnQgX19kYXRhX3N0YXJ0W107Ci0rIyAgICBkZWZpbmUgREFUQVNUQVJUICgocHRyX3QpKF9fZGF0YV9zdGFydCkpCi0rIyAgICBkZWZpbmUgREFUQUVORCAoKHB0cl90KShfZW5kKSkKLSsjICAgIGRlZmluZSBBTElHTk1FTlQgNAotKyMgICAgaWZuZGVmIEhCTEtTSVpFCi0rIyAgICAgIGRlZmluZSBIQkxLU0laRSA0MDk2Ci0rIyAgICBlbmRpZgotKyMgICAgZGVmaW5lIExJTlVYX1NUQUNLQk9UVE9NCi0rIyAgZW5kaWYgLyogTGludXggKi8KLSsjIGVuZGlmCi0rCi0gIyBpZmRlZiBIUF9QQQotICMgICBkZWZpbmUgTUFDSF9UWVBFICJIUF9QQSIKLSAjICAgaWZkZWYgX19MUDY0X18KLUBAIC0yNjIyLDYgKzI2NDQsNyBAQAotICNpZiAoKGRlZmluZWQoVU5JWF9MSUtFKSAmJiAoZGVmaW5lZChEQVJXSU4pIHx8IGRlZmluZWQoSFVSRCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZGVmaW5lZChPUEVOQlNEKSB8fCBkZWZpbmVkKEFSTTMyKSBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBkZWZpbmVkKE1JUFMpIHx8IGRlZmluZWQoQVZSMzIpKSkgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZGVmaW5lZChNSVBTKSB8fCBkZWZpbmVkKEFWUjMyKSBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBkZWZpbmVkKE5JT1MyKSkpIFwKLSAgICAgIHx8IChkZWZpbmVkKExJTlVYKSAmJiAoZGVmaW5lZChTUEFSQykgfHwgZGVmaW5lZChNNjhLKSkpIFwKLSAgICAgIHx8ICgoZGVmaW5lZChSVEVNUykgfHwgZGVmaW5lZChQTEFURk9STV9BTkRST0lEKSkgJiYgZGVmaW5lZChJMzg2KSkpIFwKLSAgICAgJiYgIWRlZmluZWQoTk9fR0VUQ09OVEVYVCkKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djL211c2xfaGVhZGVyX2ZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy9tdXNsX2hlYWRlcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExODQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy9tdXNsX2hlYWRlcl9maXgucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorQWRkIG1pc3NpbmcgaGVhZGVyIHRvIGF2b2lkOgorCit8IDE0NzI2NTk2MTAuMDE2MzU1OiAuLi9naXQvcHRocmVhZF9zdG9wX3dvcmxkLmM6IEluIGZ1bmN0aW9uICdHQ19icmllZl9hc3luY19zaWduYWxfc2FmZV9zbGVlcCc6Cit8IDE0NzI2NTk2MTAuMDU0MDI1MjogLi4vZ2l0L3B0aHJlYWRfc3RvcF93b3JsZC5jOjM5NzoyMjogZXJyb3I6IHN0b3JhZ2Ugc2l6ZSBvZiAndHYnIGlzbid0IGtub3duCit8IDE0NzI2NTk2MTAuMDU0MDI1MjogICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworfCAxNDcyNjU5NjEwLjA1NDAyNTI6ICAgICAgICAgICAgICAgICAgICAgICBefgorfCAxNDcyNjU5NjEwLjA1NDA5OTogLi4vZ2l0L3B0aHJlYWRfc3RvcF93b3JsZC5jOjM5NzoyMjogd2FybmluZzogdW51c2VkIHZhcmlhYmxlICd0dicgWy1XdW51c2VkLXZhcmlhYmxlXQorfCAxNDcyNjU5NjEwLjA1NDA5OTogICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworfCAxNDcyNjU5NjEwLjA1NDA5OTogICAgICAgICAgICAgICAgICAgICAgIF5+Cit8IDE0NzI2NTk2MTAuMDU0MDk5OiBNYWtlZmlsZToxNTMwOiByZWNpcGUgZm9yIHRhcmdldCAncHRocmVhZF9zdG9wX3dvcmxkLmxvJyBmYWlsZWQKKworaW4gbXVzbCBidWlsZHMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3B0aHJlYWRfc3RvcF93b3JsZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvcHRocmVhZF9zdG9wX3dvcmxkLmMKKysrKyBnaXQvcHRocmVhZF9zdG9wX3dvcmxkLmMKK0BAIC00NSw2ICs0NSw3IEBACisgI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAjaW5jbHVkZSAiYXRvbWljX29wcy5oIgorIAorIC8qIEl0J3Mgc2FmZSB0byBjYWxsIG9yaWdpbmFsIHB0aHJlYWRfc2lnbWFzaygpIGhlcmUuICAgKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0ZGFiMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfNy40LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1TVU1NQVJZID0gIkEgZ2FyYmFnZSBjb2xsZWN0b3IgZm9yIEMgYW5kIEMrKyIKLQotREVTQ1JJUFRJT04gPSAiVGhlIEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBiZVwKLSB1c2VkIGFzIGEgZ2FyYmFnZSBjb2xsZWN0aW5nIHJlcGxhY2VtZW50IGZvciBDIG1hbGxvYyBvciBDKysgbmV3LiBJdCBhbGxvd3NcCi0geW91IHRvIGFsbG9jYXRlIG1lbW9yeSBiYXNpY2FsbHkgYXMgeW91IG5vcm1hbGx5IHdvdWxkLCB3aXRob3V0IGV4cGxpY2l0bHlcCi0gZGVhbGxvY2F0aW5nIG1lbW9yeSB0aGF0IGlzIG5vIGxvbmdlciB1c2VmdWwuIFRoZSBjb2xsZWN0b3IgYXV0b21hdGljYWxseVwKLSByZWN5Y2xlcyBtZW1vcnkgd2hlbiBpdCBkZXRlcm1pbmVzIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBiZSBvdGhlcndpc2VcCi0gYWNjZXNzZWQuXAotICBUaGUgY29sbGVjdG9yIGlzIGFsc28gdXNlZCBieSBhIG51bWJlciBvZiBwcm9ncmFtbWluZyBsYW5ndWFnZVwKLSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBlaXRoZXIgdXNlIEMgYXMgaW50ZXJtZWRpYXRlIGNvZGUsIHdhbnQgdG8gZmFjaWxpdGF0ZVwKLSBlYXNpZXIgaW50ZXJvcGVyYXRpb24gd2l0aCBDIGxpYnJhcmllcywgb3IganVzdCBwcmVmZXIgdGhlIHNpbXBsZSBjb2xsZWN0b3JcCi0gaW50ZXJmYWNlLlwKLSAgQWx0ZXJuYXRpdmVseSwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG1heSBiZSB1c2VkIGFzIGEgbGVhayBkZXRlY3RvciBmb3IgQ1wKLSBvciBDKysgcHJvZ3JhbXMsIHRob3VnaCB0aGF0IGlzIG5vdCBpdHMgcHJpbWFyeSBnb2FsLlwKLSAgRW1waXJpY2FsbHksIHRoaXMgY29sbGVjdG9yIHdvcmtzIHdpdGggbW9zdCB1bm1vZGlmaWVkIEMgcHJvZ3JhbXMsIHNpbXBseVwKLSBieSByZXBsYWNpbmcgbWFsbG9jIHdpdGggR0NfbWFsbG9jIGNhbGxzLCByZXBsYWNpbmcgcmVhbGxvYyB3aXRoIEdDX3JlYWxsb2NcCi0gY2FsbHMsIGFuZCByZW1vdmluZyBmcmVlIGNhbGxzLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5oYm9laG0uaW5mby9nYy8iCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUuUVVJQ0s7bWQ1PTU1ZjUwODhmOTBhOTgyZmVkN2FmOWE0ODk3MDQ3ZWY3IgotCi1TUkNSRVYgPSAiZTMxY2RjMjg4ZmZiZWU1YmYyNWY5NDhlMTlkZWI1YTdjZTg0Njk3MSIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9pdm1haS9iZHdnYy5naXQ7YnJhbmNoPXJlbGVhc2UtN180IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtY2hlY2stZm9yLU5PX0dFVENPTlRFWFQtZGVmaW5pdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLUFsdGVyYS1OSU9TMi1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAiCi0KLUZJTEVTXyR7UE59LWRvYyA9ICIke2RhdGFkaXJ9IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1BUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLSMgYnkgZGVmYXVsdCB1c2UgZXh0ZXJuYWwgbGliYXRvbWljLW9wcwotUEFDS0FHRUNPTkZJRyA/Pz0gImxpYmF0b21pYy1vcHMiCi1QQUNLQUdFQ09ORklHW2xpYmF0b21pYy1vcHNdID0gIi0td2l0aC1saWJhdG9taWMtb3BzPXllcywtLXdpdGgtbGliYXRvbWljLW9wcz1ubyxsaWJhdG9taWMtb3BzIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfNy42LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfNy42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiNjhmMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjYuMC5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIkEgZ2FyYmFnZSBjb2xsZWN0b3IgZm9yIEMgYW5kIEMrKyIKKworREVTQ1JJUFRJT04gPSAiVGhlIEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBiZVwKKyB1c2VkIGFzIGEgZ2FyYmFnZSBjb2xsZWN0aW5nIHJlcGxhY2VtZW50IGZvciBDIG1hbGxvYyBvciBDKysgbmV3LiBJdCBhbGxvd3NcCisgeW91IHRvIGFsbG9jYXRlIG1lbW9yeSBiYXNpY2FsbHkgYXMgeW91IG5vcm1hbGx5IHdvdWxkLCB3aXRob3V0IGV4cGxpY2l0bHlcCisgZGVhbGxvY2F0aW5nIG1lbW9yeSB0aGF0IGlzIG5vIGxvbmdlciB1c2VmdWwuIFRoZSBjb2xsZWN0b3IgYXV0b21hdGljYWxseVwKKyByZWN5Y2xlcyBtZW1vcnkgd2hlbiBpdCBkZXRlcm1pbmVzIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBiZSBvdGhlcndpc2VcCisgYWNjZXNzZWQuXAorICBUaGUgY29sbGVjdG9yIGlzIGFsc28gdXNlZCBieSBhIG51bWJlciBvZiBwcm9ncmFtbWluZyBsYW5ndWFnZVwKKyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBlaXRoZXIgdXNlIEMgYXMgaW50ZXJtZWRpYXRlIGNvZGUsIHdhbnQgdG8gZmFjaWxpdGF0ZVwKKyBlYXNpZXIgaW50ZXJvcGVyYXRpb24gd2l0aCBDIGxpYnJhcmllcywgb3IganVzdCBwcmVmZXIgdGhlIHNpbXBsZSBjb2xsZWN0b3JcCisgaW50ZXJmYWNlLlwKKyAgQWx0ZXJuYXRpdmVseSwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG1heSBiZSB1c2VkIGFzIGEgbGVhayBkZXRlY3RvciBmb3IgQ1wKKyBvciBDKysgcHJvZ3JhbXMsIHRob3VnaCB0aGF0IGlzIG5vdCBpdHMgcHJpbWFyeSBnb2FsLlwKKyAgRW1waXJpY2FsbHksIHRoaXMgY29sbGVjdG9yIHdvcmtzIHdpdGggbW9zdCB1bm1vZGlmaWVkIEMgcHJvZ3JhbXMsIHNpbXBseVwKKyBieSByZXBsYWNpbmcgbWFsbG9jIHdpdGggR0NfbWFsbG9jIGNhbGxzLCByZXBsYWNpbmcgcmVhbGxvYyB3aXRoIEdDX3JlYWxsb2NcCisgY2FsbHMsIGFuZCByZW1vdmluZyBmcmVlIGNhbGxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5oYm9laG0uaW5mby9nYy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUuUVVJQ0s7bWQ1PTRmODFmMjRlYzY5NzI2YzMxMjQ4N2MyYWM3NDBlOWUzIgorCitTUkNSRVYgPSAiOGFjMWQ4NGE0MGViN2E0MzFmZWMxYjgwOTdlM2YyNGI0OGZiMjNmYSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9pdm1haS9iZHdnYy5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtYWRkLWNoZWNrLWZvci1OT19HRVRDT05URVhULWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbXVzbF9oZWFkZXJfZml4LnBhdGNoIFwKKyAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RhdGFkaXJ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgYnkgZGVmYXVsdCB1c2UgZXh0ZXJuYWwgbGliYXRvbWljLW9wcworUEFDS0FHRUNPTkZJRyA/Pz0gImxpYmF0b21pYy1vcHMiCitQQUNLQUdFQ09ORklHW2xpYmF0b21pYy1vcHNdID0gIi0td2l0aC1saWJhdG9taWMtb3BzPXllcywtLXdpdGgtbGliYXRvbWljLW9wcz1ubyxsaWJhdG9taWMtb3BzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm1hcC10b29scy9ibWFwLXRvb2xzXzMuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ibWFwLXRvb2xzL2JtYXAtdG9vbHNfMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMGY1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm1hcC10b29scy9ibWFwLXRvb2xzXzMuMi5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlRvb2xzIHRvIGdlbmVyYXRlIGJsb2NrIG1hcCAoQUtBIGJtYXApIGFuZCBmbGFzaCBpbWFnZXMgdXNpbmcgYm1hcCIKK0RFU0NSSVBUSU9OID0gIkJtYXAtdG9vbHMgLSB0b29scyB0byBnZW5lcmF0ZSBibG9jayBtYXAgKEFLQSBibWFwKSBhbmQgZmxhc2ggaW1hZ2VzIHVzaW5nIFwKK2JtYXAuIEJtYXB0b29sIGlzIGEgZ2VuZXJpYyB0b29sIGZvciBjcmVhdGluZyB0aGUgYmxvY2sgbWFwIChibWFwKSBmb3IgYSBmaWxlLCBcCithbmQgY29weWluZyBmaWxlcyB1c2luZyB0aGUgYmxvY2sgbWFwLiBUaGUgaWRlYSBpcyB0aGF0IGxhcmdlIGZpbGUgY29udGFpbmluZyBcCit1bnVzZWQgYmxvY2tzLCBsaWtlIHJhdyBzeXN0ZW0gaW1hZ2UgZmlsZXMsIGNhbiBiZSBjb3BpZWQgb3IgZmxhc2hlZCBhIGxvdCBcCitmYXN0ZXIgd2l0aCBibWFwdG9vbCB0aGFuIHdpdGggdHJhZGl0aW9uYWwgdG9vbHMgbGlrZSAiZGQiIG9yICJjcCIuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5pbmZyYWRlYWQub3JnL3VzZXJzL2RlZGVraW5kL2JtYXAtdG9vbHMuZ2l0IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZyYWRlYWQub3JnL3B1Yi8ke0JQTn0vJHtCUE59LSR7UFZ9LnRneiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MmNkYWQxY2I0ZGZhMGNjYTcxNzZjOGUyMjc1MjYxNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYzZjN2Y3ZGMwYTM3ZTJhMzJkZWIxMjczMDhlMjRlNmM0YjgwYmZiNTRmMzgwM2MzMDhlZmFiMDJiZjJkNDM0IgorCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tY29yZSBweXRob24tY29tcHJlc3Npb24iCisKK2luaGVyaXQgc2V0dXB0b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgIHNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke2JpbmRpcn0vYm1hcHRvb2wKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjYwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS42MS4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS42MC4wLmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS42MS4wLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS42MC4wLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjYwLjAuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzg2OTNlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjYwLjAuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBUaGUgQm9vc3Qgd2ViIHNpdGUgcHJvdmlkZXMgZnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlCi0jIEMrKyBzb3VyY2UgbGlicmFyaWVzLiBUaGUgZW1waGFzaXMgaXMgb24gbGlicmFyaWVzIHdoaWNoCi0jIHdvcmsgd2VsbCB3aXRoIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeS4gVGhlIGxpYnJhcmllcyBhcmUKLSMgaW50ZW5kZWQgdG8gYmUgd2lkZWx5IHVzZWZ1bCwgYW5kIGFyZSBpbiByZWd1bGFyIHVzZSBieQotIyB0aG91c2FuZHMgb2YgcHJvZ3JhbW1lcnMgYWNyb3NzIGEgYnJvYWQgc3BlY3RydW0gb2YgYXBwbGljYXRpb25zLgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ib29zdC5vcmcvIgotTElDRU5TRSA9ICJCU0wtMS4wICYgTUlUICYgUHl0aG9uLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VfMV8wLnR4dDttZDU9ZTQyMjRjY2FlY2IxNGQ5NDJjNzFkMzFiZWYyMGQ3OGMiCi0KLUJPT1NUX1ZFUiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLDEpLnNwbGl0KCIuIikpfSIKLUJPT1NUX01BSiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLDEpLnNwbGl0KCIuIilbMDoyXSl9IgotQk9PU1RfUCA9ICJib29zdF8ke0JPT1NUX1ZFUn0iCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2Jvb3N0LyR7Qk9PU1RfUH0udGFyLmJ6MiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjY1YTg0MGUxYTBiMTNhNTU4ZmYxOWVlYjJjNGYwY2JlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY4NmFmZmZmOTg5YWMyNDg4Zjc5YTk3Yjk0NzllZmI5ZjJhYmFlMDM1YjVlZDRkODIyNmRlNjg1NzkzM2ZkM2IiCi0KLVMgPSAiJHtXT1JLRElSfS8ke0JPT1NUX1B9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNjEuMC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS42MS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDlkOGE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNjEuMC5pbmMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGUgQm9vc3Qgd2ViIHNpdGUgcHJvdmlkZXMgZnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlCisjIEMrKyBzb3VyY2UgbGlicmFyaWVzLiBUaGUgZW1waGFzaXMgaXMgb24gbGlicmFyaWVzIHdoaWNoCisjIHdvcmsgd2VsbCB3aXRoIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeS4gVGhlIGxpYnJhcmllcyBhcmUKKyMgaW50ZW5kZWQgdG8gYmUgd2lkZWx5IHVzZWZ1bCwgYW5kIGFyZSBpbiByZWd1bGFyIHVzZSBieQorIyB0aG91c2FuZHMgb2YgcHJvZ3JhbW1lcnMgYWNyb3NzIGEgYnJvYWQgc3BlY3RydW0gb2YgYXBwbGljYXRpb25zLgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ib29zdC5vcmcvIgorTElDRU5TRSA9ICJCU0wtMS4wICYgTUlUICYgUHl0aG9uLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VfMV8wLnR4dDttZDU9ZTQyMjRjY2FlY2IxNGQ5NDJjNzFkMzFiZWYyMGQ3OGMiCisKK0JPT1NUX1ZFUiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLCBUcnVlKS5zcGxpdCgiLiIpKX0iCitCT09TVF9NQUogPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIiwgVHJ1ZSkuc3BsaXQoIi4iKVswOjJdKX0iCitCT09TVF9QID0gImJvb3N0XyR7Qk9PU1RfVkVSfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vYm9vc3QvJHtCT09TVF9QfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjA5NTg3NjM0MTk1NmY2NWY5ZDM1OTM5Y2NlYTFhOWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTU0N2JkMDZjMmZkOWE3MWJhMWQxNjlkOWNmMDMzOWRhN2ViZjQ3NTM4NDlhOGY3ZDZmZGI4ZmVlZTk5YjY0MCIKKworUyA9ICIke1dPUktESVJ9LyR7Qk9PU1RfUH0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYwppbmRleCA5ODI0NDZjLi5lZjE2NTMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMKQEAgLTgsMTEgKzgsMTQgQEAKIEJPT1NUX0xJQlMgPSAiXAogCWF0b21pYyBcCiAJY2hyb25vIFwKKwljb250YWluZXIgXAogCWRhdGVfdGltZSBcCisJZXhjZXB0aW9uIFwKIAlmaWxlc3lzdGVtIFwKIAlncmFwaCBcCiAJaW9zdHJlYW1zIFwKIAlsb2cgXAorCW1hdGggXAogCXByb2dyYW1fb3B0aW9ucyBcCiAJcmFuZG9tIFwKIAlyZWdleCBcCkBAIC0yMiwxMiArMjUsMzAgQEAKIAl0aW1lciBcCiAJdGVzdCBcCiAJdGhyZWFkIFwKKwl3YXZlIFwKIAkiCiAKLSMgb3B0aW9uYWwgYm9vc3QtcHl0aG9uIGxpYnJhcnkKLVBBQ0tBR0VDT05GSUcgPz89ICIiCisjIG9ubHkgc3VwcG9ydGVkIGJ5IHg4NiBhbmQgcG93ZXJwYworQk9PU1RfTElCU19hcHBlbmRfeDg2ID0gIiBjb250ZXh0IGNvcm91dGluZSIKK0JPT1NUX0xJQlNfYXBwZW5kX3g4Ni02NCA9ICIgY29udGV4dCBjb3JvdXRpbmUiCitCT09TVF9MSUJTX2FwcGVuZF9wb3dlcnBjID0gIiBjb250ZXh0IGNvcm91dGluZSIKKyMgbmVlZCBjb25zaXN0ZW50IHNldHRpbmdzIGZvciBuYXRpdmUgYnVpbGRzICh4ODYgb3ZlcnJpZGUgbm90IGFwcGxpZWQgZm9yIG5hdGl2ZSkKK0JPT1NUX0xJQlNfcmVtb3ZlX2NsYXNzLW5hdGl2ZSA9ICIgY29udGV4dCBjb3JvdXRpbmUiCisKKyMgb3B0aW9uYWwgbGlicmFyaWVzCitQQUNLQUdFQ09ORklHID8/PSAibG9jYWxlIgorUEFDS0FHRUNPTkZJR1tsb2NhbGVdID0gIiwsaWN1IgorUEFDS0FHRUNPTkZJR1tncmFwaF9wYXJhbGxlbF0gPSAiLCwsYm9vc3QtbXBpIG1waWNoIgorUEFDS0FHRUNPTkZJR1ttcGldID0gIiwsbXBpY2giCiBQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLCxweXRob24gcHl0aG9uMyIKLUJPT1NUX0xJQlMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24gcHl0aG9uMycsICcnLCBkKX0iCisKK0JPT1NUX0xJQlMgKz0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdsb2NhbGUnLCAnbG9jYWxlJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3JhcGhfcGFyYWxsZWwnLCAnZ3JhcGhfcGFyYWxsZWwgbXBpJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ21waScsICdtcGknLCAnJywgZCksIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uJywgJ3B5dGhvbiBweXRob24zJywgJycsIGQpfSBcCisiCisKIGluaGVyaXQgcHl0aG9uLWRpcgogUFlUSE9OX1JPT1QgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS8ke3ByZWZpeH0iCiAKQEAgLTU0LDYgKzc1LDEwIEBACiB9CiAKICMgT3ZlcnJpZGUgdGhlIGNvbnRlbnRzIG9mIHNwZWNpZmljIHBhY2thZ2VzCitGSUxFU18ke1BOfS1ncmFwaCA9ICIke2xpYmRpcn0vbGliYm9vc3RfZ3JhcGguc28uKiIKK0ZJTEVTXyR7UE59LWdyYXBoX3BhcmFsbGVsID0gIiR7bGliZGlyfS9saWJib29zdF9ncmFwaF9wYXJhbGxlbC5zby4qIgorRklMRVNfJHtQTn0tbG9jYWxlID0gIiR7bGliZGlyfS9saWJib29zdF9sb2NhbGUuc28uKiIKK0ZJTEVTXyR7UE59LW1waSA9ICIke2xpYmRpcn0vbXBpLnNvICR7bGliZGlyfS9saWJib29zdF9tcGkqLnNvLioiCiBGSUxFU19ib29zdC1zZXJpYWxpemF0aW9uID0gIiR7bGliZGlyfS9saWJib29zdF9zZXJpYWxpemF0aW9uKi5zby4qIFwKIAkke2xpYmRpcn0vbGliYm9vc3Rfd3NlcmlhbGl6YXRpb24qLnNvLioiCiBGSUxFU19ib29zdC10ZXN0ID0gIiR7bGliZGlyfS9saWJib29zdF9wcmdfZXhlY19tb25pdG9yKi5zby4qIFwKQEAgLTE0Miw3ICsxNjcsNyBAQAogQk9PU1RfUEFSQUxMRUxfTUFLRSA9ICIke0BnZXRfYm9vc3RfcGFyYWxsZWxfbWFrZShkKX0iCiBCSkFNX09QVFMgICAgPSAnJHtCT09TVF9QQVJBTExFTF9NQUtFfSAtZCsyIC1xIFwKIAkJJHtCSkFNX1RPT0xTfSBcCi0JCS1zQk9PU1RfQlVJTERfVVNFUl9DT05GSUc9JHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbSBcCisJCS1zQk9PU1RfQlVJTERfVVNFUl9DT05GSUc9JHtXT1JLRElSfS91c2VyLWNvbmZpZy5qYW0gXAogCQktLWJ1aWxkLWRpcj0ke1N9LyR7VEFSR0VUX1NZU30gXAogCQktLWRpc2FibGUtaWN1IFwKIAkJJHtCSkFNX0VYVFJBfScKQEAgLTE1MCwyNSArMTc1LDI2IEBACiAjIE5hdGl2ZSBjb21waWxhdGlvbiBvZiBiemlwMiBpc24ndCB3b3JraW5nCiBCSkFNX09QVFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICcgLXNOT19CWklQMj0xJwogCi1kb19ib29zdGNvbmZpZygpIHsKLQljcCAtZiBib29zdC9jb25maWcvcGxhdGZvcm0vbGludXguaHBwIGJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC1nbnVlYWJpLmhwcAorZG9fY29uZmlndXJlKCkgeworCWNwIC1mICR7U30vYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LmhwcCAke1N9L2Jvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC1nbnVlYWJpLmhwcAogCiAJIyBEMjE5NDpGaXhpbmcgdGhlIGZhaWx1cmUgb2YgImVycm9yOiBkdXBsaWNhdGUgaW5pdGlhbGl6YXRpb24gb2YgZ2NjIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIiBkdXJpbmcgY29tcGlsYXRpb24uCi0Jc2VkIC1pICIvXnVzaW5nIGdjYyA6IDQuMy4xL2QiICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KLQlzZWQgLWkgIi9edXNpbmcgcHl0aG9uIDogJHtQWVRIT05fQkFTRVZFUlNJT059Ii9kICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KLQllY2hvICd1c2luZyBnY2MgOiA0LjMuMSA6ICR7Q1hYfSA6IDxjZmxhZ3M+IiR7Q0ZMQUdTfSIgPGN4eGZsYWdzPiIke0NYWEZMQUdTfSIgPGxpbmtmbGFncz4iJHtMREZMQUdTfSIgOycgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQotCWVjaG8gInVzaW5nIHB5dGhvbiA6ICR7UFlUSE9OX0JBU0VWRVJTSU9OfSA6IDogJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IDsiID4+ICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KLQllY2hvICJ1c2luZyBweXRob24gOiAzLjUgOiA6ICR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbjMuNW0gOyIgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCXJtIC1mICR7V09SS0RJUn0vdXNlci1jb25maWcuamFtCisJZWNobyAndXNpbmcgZ2NjIDogNC4zLjEgOiAke0NYWH0gOiA8Y2ZsYWdzPiIke0NGTEFHU30iIDxjeHhmbGFncz4iJHtDWFhGTEFHU30iIDxsaW5rZmxhZ3M+IiR7TERGTEFHU30iIDsnID4+ICR7V09SS0RJUn0vdXNlci1jb25maWcuamFtCisJZWNobyAidXNpbmcgcHl0aG9uIDogJHtQWVRIT05fQkFTRVZFUlNJT059IDogOiAke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gOyIgPj4gJHtXT1JLRElSfS91c2VyLWNvbmZpZy5qYW0KKwllY2hvICJ1c2luZyBweXRob24gOiAzLjUgOiA6ICR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbjMuNW0gOyIgPj4gJHtXT1JLRElSfS91c2VyLWNvbmZpZy5qYW0KKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdCT09TVF9MSUJTJywgJ21waScsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWVjaG8gInVzaW5nIG1waSA6IDogPGZpbmQtc2hhcmVkLWxpYnJhcnk+bXBpIDsiID4+ICR7V09SS0RJUn0vdXNlci1jb25maWcuamFtCisJZmkKIAogCUNDPSIke0JVSUxEX0NDfSIgQ0ZMQUdTPSIke0JVSUxEX0NGTEFHU30iIC4vYm9vdHN0cmFwLnNoIC0td2l0aC1iamFtPWJqYW0gLS13aXRoLXRvb2xzZXQ9Z2NjIC0td2l0aC1weXRob24tcm9vdD0ke1BZVEhPTl9ST09UfQotCXNlZCAtaSAnL151c2luZyBweXRob24vZCcgcHJvamVjdC1jb25maWcuamFtCisJc2VkIC1pICcvXnVzaW5nIHB5dGhvbi9kJyAke1N9L3Byb2plY3QtY29uZmlnLmphbQogfQogCi1kb19ib29zdGNvbmZpZ1tkaXJzXSA9ICIke1N9IgotYWRkdGFzayBkb19ib29zdGNvbmZpZyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCi0KIGRvX2NvbXBpbGUoKSB7CiAJc2V0IC1leAorCXJtIC1yZiAke1N9LyR7VEFSR0VUX1NZU30KIAliamFtICR7QkpBTV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gXAogCQktLWV4ZWMtcHJlZml4PSR7ZXhlY19wcmVmaXh9IFwKIAkJLS1saWJkaXI9JHtsaWJkaXJ9IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLURvLW5vdC1xdWFsaWZ5LWZlbnYuaC1uYW1lcy10aGF0LW1pZ2h0LWJlLW1hY3Jvcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLURvLW5vdC1xdWFsaWZ5LWZlbnYuaC1uYW1lcy10aGF0LW1pZ2h0LWJlLW1hY3Jvcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3ZTcxZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwMS1Eby1ub3QtcXVhbGlmeS1mZW52LmgtbmFtZXMtdGhhdC1taWdodC1iZS1tYWNyb3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1Gcm9tIGY1MGU3YmM5ZmVkMzIzYzU3MDVjMGVkOTkyYzAzZTgwZWVlYzFkZDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKb25hdGhhbiBXYWtlbHkgPGp3YWtlbHlAcmVkaGF0LmNvbT4KLURhdGU6IE1vbiwgMTQgU2VwIDIwMTUgMTU6MDU6MjQgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gRG8gbm90IHF1YWxpZnkgPGZlbnYuaD4gbmFtZXMgdGhhdCBtaWdodCBiZSBtYWNyb3MuCi0KLVRoZSBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgYm9vc3QtdGVzdCBnaXQgcmVwb3NpdG9yeQotKGh0dHBzOi8vZ2l0aHViLmNvbS9ib29zdG9yZy90ZXN0KSBhcyBvZiBjb21taXQgaWQKLWY1MGU3YmM5ZmVkMzIzYzU3MDVjMGVkOTkyYzAzZTgwZWVlYzFkZDYuCi0gIAotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbY29tbWl0IGY1MGU3YmM5ZmVkIGluIGRldmVsb3AgYnJhbmNoXQotCi1TaWduZWQtb2ZmLWJ5OiBMdWthcyBCdWx3YWhuIDxsdWthcy5idWx3YWhuQG9zcy5ibXctY2FyaXQuZGU+Ci0tLS0KLSBpbmNsdWRlL2Jvb3N0L3Rlc3QvaW1wbC9leGVjdXRpb25fbW9uaXRvci5pcHAgfCA4ICsrKystLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGUvYm9vc3QvdGVzdC9pbXBsL2V4ZWN1dGlvbl9tb25pdG9yLmlwcCBiL2luY2x1ZGUvYm9vc3QvdGVzdC9pbXBsL2V4ZWN1dGlvbl9tb25pdG9yLmlwcAotaW5kZXggYjNlODczZS4uYTdiZGNlMiAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvYm9vc3QvdGVzdC9pbXBsL2V4ZWN1dGlvbl9tb25pdG9yLmlwcAotKysrIGIvaW5jbHVkZS9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwCi1AQCAtMTM4MCw4ICsxMzgwLDggQEAgZW5hYmxlKCB1bnNpZ25lZCBtYXNrICkKLSAKLSAgICAgcmV0dXJuIH5vbGRfY3cgJiBCT09TVF9GUEVfQUxMOwotICNlbGlmIGRlZmluZWQoX19HTElCQ19fKSAmJiBkZWZpbmVkKF9fVVNFX0dOVSkgJiYgIWRlZmluZWQoQk9PU1RfQ0xBTkcpICYmICFkZWZpbmVkKEJPT1NUX05PX0ZFTlZfSCkKLS0gICAgOjpmZWNsZWFyZXhjZXB0KEJPT1NUX0ZQRV9BTEwpOwotLSAgICBpbnQgcmVzID0gOjpmZWVuYWJsZWV4Y2VwdCggbWFzayApOwotKyAgICBmZWNsZWFyZXhjZXB0KEJPT1NUX0ZQRV9BTEwpOwotKyAgICBpbnQgcmVzID0gZmVlbmFibGVleGNlcHQoIG1hc2sgKTsKLSAgICAgcmV0dXJuIHJlcyA9PSAtMSA/ICh1bnNpZ25lZClCT09TVF9GUEVfSU5WIDogKHVuc2lnbmVkKXJlczsKLSAjZWxzZQotICAgICAvKiBOb3QgSW1wbGVtZW50ZWQgICovCi1AQCAtMTQxNyw4ICsxNDE3LDggQEAgZGlzYWJsZSggdW5zaWduZWQgbWFzayApCi0gCi0gICAgIHJldHVybiB+b2xkX2N3ICYgQk9PU1RfRlBFX0FMTDsKLSAjZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgZGVmaW5lZChfX1VTRV9HTlUpICYmICFkZWZpbmVkKEJPT1NUX0NMQU5HKSAmJiAhZGVmaW5lZChCT09TVF9OT19GRU5WX0gpCi0tICAgIDo6ZmVjbGVhcmV4Y2VwdChCT09TVF9GUEVfQUxMKTsKLS0gICAgaW50IHJlcyA9IDo6ZmVkaXNhYmxlZXhjZXB0KCBtYXNrICk7Ci0rICAgIGZlY2xlYXJleGNlcHQoQk9PU1RfRlBFX0FMTCk7Ci0rICAgIGludCByZXMgPSBmZWRpc2FibGVleGNlcHQoIG1hc2sgKTsKLSAgICAgcmV0dXJuIHJlcyA9PSAtMSA/ICh1bnNpZ25lZClCT09TVF9GUEVfSU5WIDogKHVuc2lnbmVkKXJlczsKLSAjZWxzZQotICAgICAvKiBOb3QgSW1wbGVtZW50ZWQgKi8KLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtYm9vc3QtYXNpby1kZXRhaWwtc29ja2V0X3R5cGVzLmhwcC1maXgtcG9sbC5oLWluY2x1ZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLWJvb3N0LWFzaW8tZGV0YWlsLXNvY2tldF90eXBlcy5ocHAtZml4LXBvbGwuaC1pbmNsdWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4NWFhYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLWJvb3N0LWFzaW8tZGV0YWlsLXNvY2tldF90eXBlcy5ocHAtZml4LXBvbGwuaC1pbmNsdWQucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA0MDE5MjMwMTEzMGRjZDkxM2FhNmQ5Y2I5ZGJhOWU1ZjhkYmQ5ZDE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGFkcmFzemlrQHR5Y29pbnQuY29tPgorRGF0ZTogV2VkLCAyNCBBdWcgMjAxNiAyMTowMTo0MyArMDEwMAorU3ViamVjdDogW1BBVENIIDEvNF0gdXNlIFBPU0lYIHBvbGwuaCBpbnN0ZWFkIG9mIHN5cy9wb2xsLmgKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUE9TSVggc3BlY2lmaWVzIHRoYXQgPHBvbGwuaD4gaXMgdGhlIGNvcnJlY3QgaGVhZGVyIHRvCitpbmNsdWRlIGZvciBwb2xsKCkKKyAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvcG9sbC5odG1sCit3aGVyZWFzIDxzeXMvcG9sbC5oPiBpcyBvbmx5IG5lZWRlZCBmb3IgYW5jaWVudCBnbGliYyAoPDIuMyksCitzbyBsZXQncyBmb2xsb3cgUE9TSVggaW5zdGVhZC4KKworQXMgYSBzaWRlLWVmZmVjdCwgdGhpcyBzaWxlbmNlcyBhIHdhcm5pbmcgd2hlbiBjb21waWxpbmcKK2FnYWluc3QgdGhlIG11c2wgQy1saWJyYXJ5OgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi9ib29zdC9hc2lvL2RldGFpbC9zb2NrZXRfdHlwZXMuaHBwOjYxOjAsCisgICAgICAgICAgICAgICAgIGZyb20gLi9ib29zdC9hc2lvL2lwL2FkZHJlc3NfdjQuaHBwOjIxLAorICAgICAgICAgICAgICAgICBmcm9tIC4vYm9vc3QvYXNpby9pcC9hZGRyZXNzLmhwcDoyMSwKKyAgICAgICAgICAgICAgICAgZnJvbSBsaWJzL2xvZy9zcmMvaW5pdF9mcm9tX3NldHRpbmdzLmNwcDo2NToKKzxzeXNyb290Pi91c3IvaW5jbHVkZS9zeXMvcG9sbC5oOjE6Mjogd2FybmluZzogI3dhcm5pbmcgcmVkaXJlY3RpbmcgaW5jb3JyZWN0ICNpbmNsdWRlIDxzeXMvcG9sbC5oPiB0byA8cG9sbC5oPiBbLVdjcHBdCisgI3dhcm5pbmcgcmVkaXJlY3RpbmcgaW5jb3JyZWN0ICNpbmNsdWRlIDxzeXMvcG9sbC5oPiB0byA8cG9sbC5oPgorICBefn5+fn5+CisKK2V0Yy4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGFkcmFzemlrQHR5Y29pbnQuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMTI0MTkKKyBib29zdC9hc2lvL2RldGFpbC9zb2NrZXRfdHlwZXMuaHBwIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9vc3QvYXNpby9kZXRhaWwvc29ja2V0X3R5cGVzLmhwcCBiL2Jvb3N0L2FzaW8vZGV0YWlsL3NvY2tldF90eXBlcy5ocHAKK2luZGV4IGU4YzcxMDkuLjdlNjVkM2MgMTAwNjQ0CistLS0gYS9ib29zdC9hc2lvL2RldGFpbC9zb2NrZXRfdHlwZXMuaHBwCisrKysgYi9ib29zdC9hc2lvL2RldGFpbC9zb2NrZXRfdHlwZXMuaHBwCitAQCAtNTgsNyArNTgsNyBAQAorICNlbHNlCisgIyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjIGlmICFkZWZpbmVkKF9fU1lNQklBTjMyX18pCistIyAgaW5jbHVkZSA8c3lzL3BvbGwuaD4KKysjICBpbmNsdWRlIDxwb2xsLmg+CisgIyBlbmRpZgorICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwMi1ib29zdC10ZXN0LWV4ZWN1dGlvbl9tb25pdG9yLmhwcC1maXgtbWlwcy1zb2Z0LWZsb2F0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDItYm9vc3QtdGVzdC1leGVjdXRpb25fbW9uaXRvci5ocHAtZml4LW1pcHMtc29mdC1mbG9hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjljOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDItYm9vc3QtdGVzdC1leGVjdXRpb25fbW9uaXRvci5ocHAtZml4LW1pcHMtc29mdC1mbG9hdC5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorRnJvbSA1YzM0OWExYzM5MWM5Y2UxNzFhMWM4MGY1MTY0ZmFlNzY0ZjI3ZGJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGFkcmFzemlrQHR5Y29pbnQuY29tPgorRGF0ZTogV2VkLCAyNCBBdWcgMjAxNiAyMDo1ODo1OSArMDEwMAorU3ViamVjdDogW1BBVENIIDIvNF0gYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHA6IGZpeCBtaXBzIHNvZnQgZmxvYXQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworZ2NjLmNvbXBpbGUuYysrIDxidWlsZGRpcj4vYm9vc3QvYmluLnYyL2xpYnMvdGVzdC9idWlsZC9nY2MtNC4zLjEvcmVsZWFzZS90aHJlYWRpbmctbXVsdGkvZXhlY3V0aW9uX21vbml0b3IubworCisgICAgIm1pcHNlbC1wb2t5LWxpbnV4LW11c2wtZysrIiAiLW1lbCIgIi1tYWJpPTMyIiAiLW1zb2Z0LWZsb2F0IiAiLW1hcmNoPW1pcHMzMnIyIiAiLW1pcHMxNiIgIi1taW50ZXJsaW5rLWNvbXByZXNzZWQiICItbXR1bmU9MjRrZWMiICItbWRzcCIgIi1XbCwtTzEiICItV2wsLS1hcy1uZWVkZWQiICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciICItV2wsLXoscmVscm8sLXosbm93IiAiLS1zeXNyb290PTxzeXNyb290PiIgIC1mdGVtcGxhdGUtZGVwdGgtMTI4IC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLWZkZWJ1Zy1wcmVmaXgtbWFwPTxzcmNkaXI+PS91c3Ivc3JjL2RlYnVnL2Jvb3N0LzEuNjEuMC1yMCAtZmRlYnVnLXByZWZpeC1tYXA9PHN5c3Jvb3RfaG9zdD49IC1mZGVidWctcHJlZml4LW1hcD08c3lzcm9vdD49IC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyAtcGllIC1mcGllIC1EX0ZPUlRJRllfU09VUkNFPTIgLVdmb3JtYXQgLVdmb3JtYXQtc2VjdXJpdHkgLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIC1PMyAtZmlubGluZS1mdW5jdGlvbnMgLVduby1pbmxpbmUgLVdhbGwgLXBlZGFudGljIC1wdGhyZWFkIC1mUElDIC1Xbm8tdmFyaWFkaWMtbWFjcm9zIC1EQk9PU1RfQUxMX05PX0xJQj0xIC1EQk9PU1RfQ0hST05PX0RZTl9MSU5LPTEgLURCT09TVF9TWVNURU1fRFlOX0xJTks9MSAtREJPT1NUX1NZU1RFTV9OT19ERVBSRUNBVEVEIC1EQk9PU1RfVEVTVF9EWU5fTElOSz0xIC1EQk9PU1RfVElNRVJfRFlOX0xJTks9MSAtRE5ERUJVRyAgLUkiLiIgLWMgLW8gIjxidWlsZGRpcj4vYm9vc3QvYmluLnYyL2xpYnMvdGVzdC9idWlsZC9nY2MtNC4zLjEvcmVsZWFzZS90aHJlYWRpbmctbXVsdGkvZXhlY3V0aW9uX21vbml0b3IubyIgImxpYnMvdGVzdC9zcmMvZXhlY3V0aW9uX21vbml0b3IuY3BwIgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwOjMxOjAsCisgICAgICAgICAgICAgICAgIGZyb20gbGlicy90ZXN0L3NyYy9leGVjdXRpb25fbW9uaXRvci5jcHA6MTY6CisuL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwOjQ5MToyNzogZXJyb3I6ICdGRV9ESVZCWVpFUk8nIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgICBCT09TVF9GUEVfRElWQllaRVJPID0gRkVfRElWQllaRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+CisuL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwOjQ5MjoyNzogZXJyb3I6ICdGRV9JTkVYQUNUJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICAgQk9PU1RfRlBFX0lORVhBQ1QgICA9IEZFX0lORVhBQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+CisuL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwOjQ5MzoyNzogZXJyb3I6ICdGRV9JTlZBTElEJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICAgQk9PU1RfRlBFX0lOVkFMSUQgICA9IEZFX0lOVkFMSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+CisuL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwOjQ5NDoyNzogZXJyb3I6ICdGRV9PVkVSRkxPVycgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgIEJPT1NUX0ZQRV9PVkVSRkxPVyAgPSBGRV9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+CisuL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwOjQ5NToyNzogZXJyb3I6ICdGRV9VTkRFUkZMT1cnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgICBCT09TVF9GUEVfVU5ERVJGTE9XID0gRkVfVU5ERVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+CisKK1RoZSByZWFzb24gaXMgdGhhdCBzb21lIChub3RhYmx5IEZQVS1sZXNzKSBhcmNoaXRlY3R1cmVzLAoraW5jbHVkaW5nIG1pcHMqLW5mLCBkb24ndCBkZWZpbmUvaW1wbGVtZW50IHNvbWUgb2YgdGhlCitmbG9hdGluZyBwb2ludCBjb25zdGFudHMsIGV2ZW4gdGhvdWdoIGZlbnYuaCBpcworYXZhaWxhYmxlLgorCitUaGUga2V5IHBvaW50IGlzOgorICBBIGZ1bGx5IHN0YW5kYXJkcyBjb25mb3JtaW5nIGZlbnYuaCBkb2VzIG5vdCBoYXZlIHRvCisgIGRlZmluZSBhbnkgRkVfKiBtYWNyb3MsIGFuZCBpZiBpdCBkb2VzIGRlZmluZSB0aGVtLAorICB0aGVuIGl0IGRlZmluZXMgbWFjcm9zIG9ubHkgZm9yIHRoZSBGUCBleGNlcHRpb25zIGl0CisgIGFjdHVhbGx5IHN1cHBvcnRzLgorCitTbyBjb3JyZWN0IHVzYWdlIHJlcXVpcmVzIGEgdHJpcGxlIGNoZWNrOgorMSkgQ2hlY2sgQk9PU1RfTk9fRkVOVl9IIHRvIHNlZSBpZiB0aGUgaGVhZGVyIGlzIHN1cHBvcnRlZC4KKzIpIEluY2x1ZGUgdGhlIGhlYWRlciBhbmQgdGhlbiBjaGVjayBGRV9BTExfRVhDRVBUIHRvIHNlZQorICAgaWYgYW55IEZQIGV4Y2VwdGlvbnMgYXJlIHN1cHBvcnRlZC4KKzMpIEJlZm9yZSB1c2luZyB0aGUgaW5kaXZpZHVhbCBGRV8qIG1hY3JvcywgeW91IG5lZWQgdG8KKyAgIGNoZWNrIGZvciB0aGVpciBleGlzdGVuY2UgdG9vIGFzIG5vdCBhbGwgbWF5IGJlCisgICBzdXBwb3J0ZWQuCisKK2h0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xMTc1NgorCitPdGhlciBwcm9qZWN0cyBoYXZlIHNpbWlsYXIgaXNzdWVzLCBlLmcuIHBpeG1hbiwgYW5kCithcHBseSBzaW1pbGFyIHdvcmstYXJvdW5kczoKKyAgaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvcGl4bWFuLzIwMTQtRmVicnVhcnkvMDAzMTcyLmh0bWwKKworQXJjaGl0ZWN0dXJlcyBhcmUgbm90YWJseSBhbHNvIGFsbG93ZWQgdG8gZGVmaW5lIEZFX0FMTF9FWENFUFQgdG8gMCEKK0tlZXBpbmcgdGhpcyBpbiBtaW5kLCBhbmQga25vd2luZyB0aGF0IHRoZSBjb21waWxlciB3aWxsIGVsaW1pbmF0ZQorY29kZSB0aGF0IGNhbid0IGJlIGV4ZWN1dGVkLCB3ZSBjYW4gY2hhbmdlIEJPT1NUX0ZQRV9BTEwgdG8gYmUgMCBmb3IKK3RoZSBjYXNlIG9mIGNvbXBpbGluZyB1c2luZyBDbGFuZyBhbmQvb3IgZmVudi5oIGJlaW5nIHVuYXZhaWxhYmxlCithcyB3ZWxsLCB3aGljaCBhbGxvd3Mgc2ltcGxpZmljYXRpb24gb2YgdGhlICNpZmRlZidzIGluCitleGVjdXRpb25fbW9uaXRvci5pcHAgYSBiaXQuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzExNzU2CisgYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHAgICAgICB8IDI2ICsrKysrKysrKysrKysrKysrKysrKysrKystCisgYm9vc3QvdGVzdC9pbXBsL2V4ZWN1dGlvbl9tb25pdG9yLmlwcCB8IDEwICsrKysrKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ib29zdC90ZXN0L2V4ZWN1dGlvbl9tb25pdG9yLmhwcCBiL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwCitpbmRleCAwZWVlNDk3Li40NGZlNTlkIDEwMDY0NAorLS0tIGEvYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHAKKysrKyBiL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwCitAQCAtNDg2LDE1ICs0ODYsMzkgQEAgZW51bSBtYXNrcyB7CisgICAgIEJPT1NUX0ZQRV9BTEwgICAgICAgPSBNQ1dfRU0sCisgI2VsaWYgZGVmaW5lZChCT09TVF9OT19GRU5WX0gpIHx8IGRlZmluZWQoQk9PU1RfQ0xBTkcpIFwKKyAgICAgfHwgZGVmaW5lZChfX0FSTV9QQ1MpCistICAgIEJPT1NUX0ZQRV9BTEwgICAgICAgPSAxLAorKyAgICBCT09TVF9GUEVfQUxMICAgICAgID0gMCwKKyAjZWxzZQorKyNpZiBkZWZpbmVkKEZFX0RJVkJZWkVSTykKKyAgICAgQk9PU1RfRlBFX0RJVkJZWkVSTyA9IEZFX0RJVkJZWkVSTywKKysjZWxzZQorKyAgICBCT09TVF9GUEVfRElWQllaRVJPID0gMCwKKysjZW5kaWYKKysjaWYgZGVmaW5lZChGRV9JTkVYQUNUKQorICAgICBCT09TVF9GUEVfSU5FWEFDVCAgID0gRkVfSU5FWEFDVCwKKysjZWxzZQorKyAgICBCT09TVF9GUEVfSU5FWEFDVCAgID0gMCwKKysjZW5kaWYKKysjaWYgZGVmaW5lZChGRV9JTlZBTElEKQorICAgICBCT09TVF9GUEVfSU5WQUxJRCAgID0gRkVfSU5WQUxJRCwKKysjZWxzZQorKyAgICBCT09TVF9GUEVfSU5WQUxJRCAgID0gMCwKKysjZW5kaWYKKysjaWYgZGVmaW5lZChGRV9PVkVSRkxPVykKKyAgICAgQk9PU1RfRlBFX09WRVJGTE9XICA9IEZFX09WRVJGTE9XLAorKyNlbHNlCisrICAgIEJPT1NUX0ZQRV9PVkVSRkxPVyAgPSAwLAorKyNlbmRpZgorKyNpZiBkZWZpbmVkKEZFX1VOREVSRkxPVykKKyAgICAgQk9PU1RfRlBFX1VOREVSRkxPVyA9IEZFX1VOREVSRkxPVywKKysjZWxzZQorKyAgICBCT09TVF9GUEVfVU5ERVJGTE9XID0gMCwKKysjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChGRV9BTExfRVhDRVBUKQorICAgICBCT09TVF9GUEVfQUxMICAgICAgID0gRkVfQUxMX0VYQ0VQVCwKKysjZWxzZQorKyAgICBCT09TVF9GUEVfQUxMICAgICAgID0gMCwKKysjZW5kaWYKKyAjZW5kaWYKKyAgICAgQk9PU1RfRlBFX0lOViAgICAgICA9IEJPT1NUX0ZQRV9BTEwrMQorIH07CitkaWZmIC0tZ2l0IGEvYm9vc3QvdGVzdC9pbXBsL2V4ZWN1dGlvbl9tb25pdG9yLmlwcCBiL2Jvb3N0L3Rlc3QvaW1wbC9leGVjdXRpb25fbW9uaXRvci5pcHAKK2luZGV4IGY3ZmM4ZWEuLmQxMDg4YjkgMTAwNjQ0CistLS0gYS9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwCisrKysgYi9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwCitAQCAtMTM4MSw3ICsxMzgxLDEwIEBAIGVuYWJsZSggdW5zaWduZWQgbWFzayApCisgI2VuZGlmCisgCisgICAgIHJldHVybiB+b2xkX2N3ICYgQk9PU1RfRlBFX0FMTDsKKy0jZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgZGVmaW5lZChfX1VTRV9HTlUpICYmICFkZWZpbmVkKEJPT1NUX0NMQU5HKSAmJiAhZGVmaW5lZChCT09TVF9OT19GRU5WX0gpCisrI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIGRlZmluZWQoX19VU0VfR05VKQorKyAgICBpZiAoQk9PU1RfRlBFX0FMTCA9PSAwKQorKyAgICAgICAgLyogTm90IEltcGxlbWVudGVkICovCisrICAgICAgICByZXR1cm4gMDsKKyAgICAgZmVjbGVhcmV4Y2VwdChCT09TVF9GUEVfQUxMKTsKKyAgICAgaW50IHJlcyA9IGZlZW5hYmxlZXhjZXB0KCBtYXNrICk7CisgICAgIHJldHVybiByZXMgPT0gLTEgPyAodW5zaWduZWQpQk9PU1RfRlBFX0lOViA6ICh1bnNpZ25lZClyZXM7CitAQCAtMTQxOCw3ICsxNDIxLDEwIEBAIGRpc2FibGUoIHVuc2lnbmVkIG1hc2sgKQorICNlbmRpZgorIAorICAgICByZXR1cm4gfm9sZF9jdyAmIEJPT1NUX0ZQRV9BTEw7CistI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIGRlZmluZWQoX19VU0VfR05VKSAmJiAhZGVmaW5lZChCT09TVF9DTEFORykgJiYgIWRlZmluZWQoQk9PU1RfTk9fRkVOVl9IKQorKyNlbGlmIGRlZmluZWQoX19HTElCQ19fKSAmJiBkZWZpbmVkKF9fVVNFX0dOVSkKKysgICAgaWYgKEJPT1NUX0ZQRV9BTEwgPT0gMCkKKysgICAgICAgIC8qIE5vdCBJbXBsZW1lbnRlZCAqLworKyAgICAgICAgcmV0dXJuIEJPT1NUX0ZQRV9JTlY7CisgICAgIGZlY2xlYXJleGNlcHQoQk9PU1RfRlBFX0FMTCk7CisgICAgIGludCByZXMgPSBmZWRpc2FibGVleGNlcHQoIG1hc2sgKTsKKyAgICAgcmV0dXJuIHJlcyA9PSAtMSA/ICh1bnNpZ25lZClCT09TVF9GUEVfSU5WIDogKHVuc2lnbmVkKXJlczsKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDMtc21hcnRfcHRyLW1pcHMtYXNzZW1ibHktZG9lc24tdC1jb21waWxlLWluLW1pcHMxNmUtbS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAzLXNtYXJ0X3B0ci1taXBzLWFzc2VtYmx5LWRvZXNuLXQtY29tcGlsZS1pbi1taXBzMTZlLW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0OGQwZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAzLXNtYXJ0X3B0ci1taXBzLWFzc2VtYmx5LWRvZXNuLXQtY29tcGlsZS1pbi1taXBzMTZlLW0ucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorRnJvbSA0ZjE5ZDcyY2E5NDQxODQzMWUwNjhjZmQ0ZmZiOTZlZDliMjg5ZjZjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGFkcmFzemlrQHR5Y29pbnQuY29tPgorRGF0ZTogV2VkLCAyNCBBdWcgMjAxNiAxNzozNDo1OSArMDEwMAorU3ViamVjdDogW1BBVENIIDMvNF0gc21hcnRfcHRyOiBtaXBzIGFzc2VtYmx5IGRvZXNuJ3QgY29tcGlsZSBpbiBtaXBzMTZlIG1vZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworZ2NjLmNvbXBpbGUuYysrIDxidWlsZGRpcj4vYm9vc3QvYmluLnYyL2xpYnMvZGF0ZV90aW1lL2J1aWxkL2djYy00LjMuMS9yZWxlYXNlL3RocmVhZGluZy1tdWx0aS9ncmVnb3JpYW4vZ3JlZ19tb250aC5vCisKKyAgICAibWlwc2VsLXBva3ktbGludXgtbXVzbC1nKysiICItbWVsIiAiLW1hYmk9MzIiICItbXNvZnQtZmxvYXQiICItbWFyY2g9bWlwczMycjIiICItbWlwczE2IiAiLW1pbnRlcmxpbmstY29tcHJlc3NlZCIgIi1tdHVuZT0yNGtlYyIgIi1tZHNwIiAiLVdsLC1PMSIgIi1XbCwtLWFzLW5lZWRlZCIgIi1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyIgIi1XbCwteixyZWxybywteixub3ciICItLXN5c3Jvb3Q9PHN5c3Jvb3Q+IiAgLWZ0ZW1wbGF0ZS1kZXB0aC0xMjggLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtZmRlYnVnLXByZWZpeC1tYXA9PHNyY2Rpcj49L3Vzci9zcmMvZGVidWcvYm9vc3QvMS42MS4wLXIwIC1mZGVidWctcHJlZml4LW1hcD08c3lzcm9vdF9ob3N0Pj0gLWZkZWJ1Zy1wcmVmaXgtbWFwPTxzeXNyb290Pj0gLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIC1waWUgLWZwaWUgLURfRk9SVElGWV9TT1VSQ0U9MiAtV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSAtV2Vycm9yPWZvcm1hdC1zZWN1cml0eSAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gLU8zIC1maW5saW5lLWZ1bmN0aW9ucyAtV25vLWlubGluZSAtV2FsbCAtcHRocmVhZCAtZlBJQyAgLURCT09TVF9BTExfRFlOX0xJTks9MSAtREJPT1NUX0FMTF9OT19MSUI9MSAtRERBVEVfVElNRV9JTkxJTkUgLUROREVCVUcgIC1JIi4iIC1jIC1vICI8YnVpbGRkaXI+L2Jvb3N0L2Jpbi52Mi9saWJzL2RhdGVfdGltZS9idWlsZC9nY2MtNC4zLjEvcmVsZWFzZS90aHJlYWRpbmctbXVsdGkvZ3JlZ29yaWFuL2dyZWdfbW9udGgubyIgImxpYnMvZGF0ZV90aW1lL3NyYy9ncmVnb3JpYW4vZ3JlZ19tb250aC5jcHAiCisKK3tzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKK3tzdGFuZGFyZCBpbnB1dH06MTc2MDM6IFdhcm5pbmc6IHRoZSBgZHNwJyBleHRlbnNpb24gcmVxdWlyZXMgTUlQUzMyIHJldmlzaW9uIDIgb3IgZ3JlYXRlcgore3N0YW5kYXJkIGlucHV0fToxNzYwNDogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYGxsICQzLDQoJDE2KScKK3tzdGFuZGFyZCBpbnB1dH06MTc2MDY6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBzYyAkMiw0KCQxNiknCit7c3RhbmRhcmQgaW5wdXR9OjE3NzM0OiBFcnJvcjogdW5yZWNvZ25pemVkIG9wY29kZSBgbGwgJDMsOCgkMTYpJwore3N0YW5kYXJkIGlucHV0fToxNzczNjogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYHNjICQyLDgoJDE2KScKK3tzdGFuZGFyZCBpbnB1dH06MTgwODQ6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBsbCAkMyw0KCQ0KScKK3tzdGFuZGFyZCBpbnB1dH06MTgwODY6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBzYyAkMiw0KCQ0KScKK3tzdGFuZGFyZCBpbnB1dH06MTgzMTg6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBsbCAkMyw4KCQ0KScKK3tzdGFuZGFyZCBpbnB1dH06MTgzMjA6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBzYyAkMiw4KCQ0KScKK3tzdGFuZGFyZCBpbnB1dH06MTk5MjE6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBsbCAkMyw0KCQyKScKK3tzdGFuZGFyZCBpbnB1dH06MTk5MjM6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBzYyAkMyw0KCQyKScKK3tzdGFuZGFyZCBpbnB1dH06MjAxOTk6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBsbCAkNCw0KCQxNiknCit7c3RhbmRhcmQgaW5wdXR9OjIwMjAxOiBFcnJvcjogdW5yZWNvZ25pemVkIG9wY29kZSBgc2MgJDIsNCgkMTYpJwore3N0YW5kYXJkIGlucHV0fToyMzM5MjogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYGxsICQ0LDgoJDE2KScKK3tzdGFuZGFyZCBpbnB1dH06MjMzOTQ6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBzYyAkMiw4KCQxNiknCisuLi5mYWlsZWQgdXBkYXRpbmcgMSB0YXJnZXQuLi4KKworYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2VfZ2NjX21pcHMuaHBwCitjb250YWlucyBoYW5kLXdyaXR0ZW4gTUlQUyBhc3NlbWJseSwgd2hpY2ggaXMgbm90IGNvbXBhdGlibGUKK3dpdGggdGhlIE1JUFMxNmUgaW5zdHJ1Y3Rpb24gc2V0LgorCitCeSBub3QgdXNpbmcgdGhpcyBmaWxlIGluIE1JUFMxNmUgbW9kZSwgd2UgZmFsbGJhY2sgdG8gdXNpbmcKK2crKyA0LjErIF9fc3luYyBpbnRyaW5zaWNzIChfX3N5bmNfZmV0Y2hfYW5kX2FkZCgpIGFuZAorX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCkpIHdoaWNoIGFyZSB3b3JraW5nIGZpbmUuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMTI0MTgKKyBib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAKK2luZGV4IDBhZGRmMDcuLjA5OTVjYTggMTAwNjQ0CistLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAKKysrKyBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlLmhwcAorQEAgLTY1LDcgKzY1LDcgQEAKKyAjZWxpZiBkZWZpbmVkKCBfX0dOVUNfXyApICYmICggZGVmaW5lZCggX19wb3dlcnBjX18gKSB8fCBkZWZpbmVkKCBfX3BwY19fICkgfHwgZGVmaW5lZCggX19wcGMgKSApICYmICFkZWZpbmVkKF9fUEFUSFNDQUxFX18pICYmICFkZWZpbmVkKCBfQUlYICkKKyAjIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlX2djY19wcGMuaHBwPgorIAorLSNlbGlmIGRlZmluZWQoIF9fR05VQ19fICkgJiYgKCBkZWZpbmVkKCBfX21pcHNfXyApIHx8IGRlZmluZWQoIF9taXBzICkgKSAmJiAhZGVmaW5lZChfX1BBVEhTQ0FMRV9fKQorKyNlbGlmIGRlZmluZWQoIF9fR05VQ19fICkgJiYgKCBkZWZpbmVkKCBfX21pcHNfXyApIHx8IGRlZmluZWQoIF9taXBzICkgKSAmJiAhZGVmaW5lZChfX1BBVEhTQ0FMRV9fKSAmJiAhZGVmaW5lZCggX19taXBzMTYgKQorICMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2VfZ2NjX21pcHMuaHBwPgorIAorICNlbGlmIGRlZmluZWQoIEJPT1NUX1NQX0hBU19TWU5DICkKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDQtVXNlLWF0b21pYy1ieS1kZWZhdWx0LXdoZW4tQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDA0LVVzZS1hdG9taWMtYnktZGVmYXVsdC13aGVuLUJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3ODI2YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDA0LVVzZS1hdG9taWMtYnktZGVmYXVsdC13aGVuLUJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSBjMjM0Y2M1NTdmNjA3MjllMDcxZDZkYTU5NzQ3YzFhOTI4OTU1NWM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGV0ZXIgRGltb3YgPHBkaW1vdkBwZGltb3YuY29tPgorRGF0ZTogU3VuLCAyOCBBdWcgMjAxNiAyMToyODoyMSArMDMwMAorU3ViamVjdDogW1BBVENIIDQvNF0gVXNlIDxhdG9taWM+IGJ5IGRlZmF1bHQgd2hlbiBCT09TVF9OT19DWFgxMV9IRFJfQVRPTUlDIGlzCisgbm90IGRlZmluZWQKKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vYm9vc3Rvcmcvc21hcnRfcHRyL2NvbW1pdC8yMGZlZGNmZjJjYTMxNDM1MDNlYzRlODc2ZDQ3NzQ1YWIwZWM3YjBjXQorU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGdpdEBhbmRyZWQubmV0PgorIGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50LmhwcCAgICB8IDMgKysrCisgYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwIHwgMyArKysKKyBib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrLmhwcCAgICAgICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudC5ocHAgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudC5ocHAKK2luZGV4IDhhZWZkNDQuLjZlNGY3MWEgMTAwNjQ0CistLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudC5ocHAKKysrKyBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50LmhwcAorQEAgLTczLDYgKzczLDkgQEAKKyAjZWxpZiBkZWZpbmVkKCBCT09TVF9ESVNBQkxFX1RIUkVBRFMgKSAmJiAhZGVmaW5lZCggQk9PU1RfU1BfRU5BQkxFX1RIUkVBRFMgKSAmJiAhZGVmaW5lZCggQk9PU1RfRElTQUJMRV9XSU4zMiApCisgIyBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9udC5ocHA+CisgCisrI2VsaWYgIWRlZmluZWQoIEJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMgKQorKyMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3RkX2F0b21pYy5ocHA+CisrCisgI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiAoIGRlZmluZWQoIF9faTM4Nl9fICkgfHwgZGVmaW5lZCggX194ODZfNjRfXyApICkgJiYgIWRlZmluZWQoIF9fUEFUSFNDQUxFX18gKQorICMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfZ2NjX3g4Ni5ocHA+CisgCitkaWZmIC0tZ2l0IGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwCitpbmRleCAwOTk1Y2E4Li44M2VkZTIzIDEwMDY0NAorLS0tIGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwCisrKysgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAKK0BAIC00NCw2ICs0NCw5IEBACisgI2VsaWYgZGVmaW5lZCggQk9PU1RfU1BfSEFTX0NMQU5HX0MxMV9BVE9NSUNTICkKKyAjIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlX2NsYW5nLmhwcD4KKyAKKysjZWxpZiAhZGVmaW5lZCggQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQyApCisrIyBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZV9zdGRfYXRvbWljLmhwcD4KKysKKyAjZWxpZiBkZWZpbmVkKCBfX1NOQ19fICkKKyAjIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlX3NuY19wczMuaHBwPgorIAorZGlmZiAtLWdpdCBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BpbmxvY2suaHBwIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9jay5ocHAKK2luZGV4IDE5ZjkzZDcuLjBiNjE4ZGYgMTAwNjQ0CistLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrLmhwcAorKysrIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9jay5ocHAKK0BAIC00Myw2ICs0Myw5IEBACisgI2VsaWYgZGVmaW5lZCggQk9PU1RfU1BfVVNFX1BUSFJFQURTICkKKyAjICBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrX3B0LmhwcD4KKyAKKysjZWxpZiAhZGVmaW5lZCggQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQyApCisrIyAgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9ja19zdGRfYXRvbWljLmhwcD4KKysKKyAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKCBfX2FybV9fICkgJiYgIWRlZmluZWQoIF9fdGh1bWJfXyApCisgIyAgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9ja19nY2NfYXJtLmhwcD4KKyAKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2Jvb3N0LUNWRS0yMDEyLTI2NzcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYm9vc3QtQ1ZFLTIwMTItMjY3Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTc2MTdhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2Jvb3N0LUNWRS0yMDEyLTI2NzcucGF0Y2gKQEAgLTAsMCArMSwxMTIgQEAKK1JlZmVyZW5jZQorCitodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC9jaGFuZ2VzZXQvNzgzMjYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxMi0yNjc3CitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9ib29zdC9wb29sL3Bvb2wuaHBwLm9sZCBiL2Jvb3N0L3Bvb2wvcG9vbC5ocHAKK2luZGV4IGM0N2IxMWYuLjQxN2ExZTAgMTAwNjQ0CistLS0gYS9ib29zdC9wb29sL3Bvb2wuaHBwLm9sZAorKysrIGIvYm9vc3QvcG9vbC9wb29sLmhwcAorQEAgLTI2LDYgKzI2LDggQEAKKyAKKyAjaW5jbHVkZSA8Ym9vc3QvcG9vbC9wb29sZndkLmhwcD4KKyAKKysvLyBzdGQ6Om51bWVyaWNfbGltaXRzCisrI2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+CisgLy8gYm9vc3Q6OmludGVnZXI6OnN0YXRpY19sY20KKyAjaW5jbHVkZSA8Ym9vc3QvaW50ZWdlci9jb21tb25fZmFjdG9yX2N0LmhwcD4KKyAvLyBib29zdDo6c2ltcGxlX3NlZ3JlZ2F0ZWRfc3RvcmFnZQorQEAgLTM1NSw2ICszNTcsMTUgQEAgY2xhc3MgcG9vbDogcHJvdGVjdGVkIHNpbXBsZV9zZWdyZWdhdGVkX3N0b3JhZ2UgPCB0eXBlbmFtZSBVc2VyQWxsb2NhdG9yOjpzaXplX3QKKyAgICAgICByZXR1cm4gczsKKyAgICAgfQorIAorKyAgICBzaXplX3R5cGUgbWF4X2NodW5rcygpIGNvbnN0CisrICAgIHsgLy8hIENhbGN1bGF0ZWQgbWF4aW11bSBudW1iZXIgb2YgbWVtb3J5IGNodW5rcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgaW4gYSBzaW5nbGUgY2FsbCBieSB0aGlzIFBvb2wuCisrICAgICAgc2l6ZV90eXBlIHBhcnRpdGlvbl9zaXplID0gYWxsb2Nfc2l6ZSgpOworKyAgICAgIHNpemVfdHlwZSBQT0Rfc2l6ZSA9IGludGVnZXI6OnN0YXRpY19sY208c2l6ZW9mKHNpemVfdHlwZSksIHNpemVvZih2b2lkICopPjo6dmFsdWUgKyBzaXplb2Yoc2l6ZV90eXBlKTsKKysgICAgICBzaXplX3R5cGUgbWF4X2NodW5rcyA9IChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdHlwZT46Om1heCgpIC0gUE9EX3NpemUpIC8gYWxsb2Nfc2l6ZSgpOworKworKyAgICAgIHJldHVybiBtYXhfY2h1bmtzOworKyAgICB9CisrCisgICAgIHN0YXRpYyB2b2lkICogJiBuZXh0b2Yodm9pZCAqIGNvbnN0IHB0cikKKyAgICAgeyAvLyEgXHJldHVybnMgUG9pbnRlciBkZXJlZmVyZW5jZWQuCisgICAgICAgLy8hIChQcm92aWRlZCBhbmQgdXNlZCBmb3IgdGhlIHNha2Ugb2YgY29kZSByZWFkYWJpbGl0eSA6KQorQEAgLTM3NSw2ICszODYsOCBAQCBjbGFzcyBwb29sOiBwcm90ZWN0ZWQgc2ltcGxlX3NlZ3JlZ2F0ZWRfc3RvcmFnZSA8IHR5cGVuYW1lIFVzZXJBbGxvY2F0b3I6OnNpemVfdAorICAgICAgIC8vISAgIHRoZSBmaXJzdCB0aW1lIHRoYXQgb2JqZWN0IG5lZWRzIHRvIGFsbG9jYXRlIHN5c3RlbSBtZW1vcnkuCisgICAgICAgLy8hICAgVGhlIGRlZmF1bHQgaXMgMzIuIFRoaXMgcGFyYW1ldGVyIG1heSBub3QgYmUgMC4KKyAgICAgICAvLyEgXHBhcmFtIG5tYXhfc2l6ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2h1bmtzIHRvIGFsbG9jYXRlIGluIG9uZSBibG9jay4KKysgICAgICBzZXRfbmV4dF9zaXplKG5uZXh0X3NpemUpOworKyAgICAgIHNldF9tYXhfc2l6ZShubWF4X3NpemUpOworICAgICB9CisgCisgICAgIH5wb29sKCkKK0BAIC0zOTgsOCArNDExLDggQEAgY2xhc3MgcG9vbDogcHJvdGVjdGVkIHNpbXBsZV9zZWdyZWdhdGVkX3N0b3JhZ2UgPCB0eXBlbmFtZSBVc2VyQWxsb2NhdG9yOjpzaXplX3QKKyAgICAgfQorICAgICB2b2lkIHNldF9uZXh0X3NpemUoY29uc3Qgc2l6ZV90eXBlIG5uZXh0X3NpemUpCisgICAgIHsgLy8hIFNldCBudW1iZXIgb2YgY2h1bmtzIHRvIHJlcXVlc3QgZnJvbSB0aGUgc3lzdGVtIHRoZSBuZXh0IHRpbWUgdGhhdCBvYmplY3QgbmVlZHMgdG8gYWxsb2NhdGUgc3lzdGVtIG1lbW9yeS4gVGhpcyB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIDAuCistICAgICAgLy8hIFxyZXR1cm5zIG5uZXh0X3NpemUuCistICAgICAgbmV4dF9zaXplID0gc3RhcnRfc2l6ZSA9IG5uZXh0X3NpemU7CisrICAgICAgQk9PU1RfVVNJTkdfU1REX01JTigpOworKyAgICAgIG5leHRfc2l6ZSA9IHN0YXJ0X3NpemUgPSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04obm5leHRfc2l6ZSwgbWF4X2NodW5rcygpKTsKKyAgICAgfQorICAgICBzaXplX3R5cGUgZ2V0X21heF9zaXplKCkgY29uc3QKKyAgICAgeyAvLyEgXHJldHVybnMgbWF4X3NpemUuCitAQCAtNDA3LDcgKzQyMCw4IEBAIGNsYXNzIHBvb2w6IHByb3RlY3RlZCBzaW1wbGVfc2VncmVnYXRlZF9zdG9yYWdlIDwgdHlwZW5hbWUgVXNlckFsbG9jYXRvcjo6c2l6ZV90CisgICAgIH0KKyAgICAgdm9pZCBzZXRfbWF4X3NpemUoY29uc3Qgc2l6ZV90eXBlIG5tYXhfc2l6ZSkKKyAgICAgeyAvLyEgU2V0IG1heF9zaXplLgorLSAgICAgIG1heF9zaXplID0gbm1heF9zaXplOworKyAgICAgIEJPT1NUX1VTSU5HX1NURF9NSU4oKTsKKysgICAgICBtYXhfc2l6ZSA9IG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTihubWF4X3NpemUsIG1heF9jaHVua3MoKSk7CisgICAgIH0KKyAgICAgc2l6ZV90eXBlIGdldF9yZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0CisgICAgIHsgLy8hICAgXHJldHVybnMgdGhlIHJlcXVlc3RlZCBzaXplIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4KK0BAIC03MDgsOSArNzIyLDkgQEAgdm9pZCAqIHBvb2w8VXNlckFsbG9jYXRvcj46Om1hbGxvY19uZWVkX3Jlc2l6ZSgpCisgCisgICBCT09TVF9VU0lOR19TVERfTUlOKCk7CisgICBpZighbWF4X3NpemUpCistICAgIG5leHRfc2l6ZSA8PD0gMTsKKysgICAgc2V0X25leHRfc2l6ZShuZXh0X3NpemUgPDwgMSk7CisgICBlbHNlIGlmKCBuZXh0X3NpemUqcGFydGl0aW9uX3NpemUvcmVxdWVzdGVkX3NpemUgPCBtYXhfc2l6ZSkKKy0gICAgbmV4dF9zaXplID0gbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKG5leHRfc2l6ZSA8PCAxLCBtYXhfc2l6ZSpyZXF1ZXN0ZWRfc2l6ZS8gcGFydGl0aW9uX3NpemUpOworKyAgICBzZXRfbmV4dF9zaXplKG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTihuZXh0X3NpemUgPDwgMSwgbWF4X3NpemUgKiByZXF1ZXN0ZWRfc2l6ZSAvIHBhcnRpdGlvbl9zaXplKSk7CisgCisgICAvLyAgaW5pdGlhbGl6ZSBpdCwKKyAgIHN0b3JlKCkuYWRkX2Jsb2NrKG5vZGUuYmVnaW4oKSwgbm9kZS5lbGVtZW50X3NpemUoKSwgcGFydGl0aW9uX3NpemUpOworQEAgLTc0OCw5ICs3NjIsOSBAQCB2b2lkICogcG9vbDxVc2VyQWxsb2NhdG9yPjo6b3JkZXJlZF9tYWxsb2NfbmVlZF9yZXNpemUoKQorIAorICAgQk9PU1RfVVNJTkdfU1REX01JTigpOworICAgaWYoIW1heF9zaXplKQorLSAgICBuZXh0X3NpemUgPDw9IDE7CisrICAgIHNldF9uZXh0X3NpemUobmV4dF9zaXplIDw8IDEpOworICAgZWxzZSBpZiggbmV4dF9zaXplKnBhcnRpdGlvbl9zaXplL3JlcXVlc3RlZF9zaXplIDwgbWF4X3NpemUpCistICAgIG5leHRfc2l6ZSA9IG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTihuZXh0X3NpemUgPDwgMSwgbWF4X3NpemUqcmVxdWVzdGVkX3NpemUvIHBhcnRpdGlvbl9zaXplKTsKKysgICAgc2V0X25leHRfc2l6ZShtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04obmV4dF9zaXplIDw8IDEsIG1heF9zaXplICogcmVxdWVzdGVkX3NpemUgLyBwYXJ0aXRpb25fc2l6ZSkpOworIAorICAgLy8gIGluaXRpYWxpemUgaXQsCisgICAvLyAgKHdlIGNhbiB1c2UgImFkZF9ibG9jayIgaGVyZSBiZWNhdXNlIHdlIGtub3cgdGhhdAorQEAgLTc5Miw2ICs4MDYsOCBAQCB2b2lkICogcG9vbDxVc2VyQWxsb2NhdG9yPjo6b3JkZXJlZF9tYWxsb2MoY29uc3Qgc2l6ZV90eXBlIG4pCisgeyAvLyEgR2V0cyBhZGRyZXNzIG9mIGEgY2h1bmsgbiwgYWxsb2NhdGluZyBuZXcgbWVtb3J5IGlmIG5vdCBhbHJlYWR5IGF2YWlsYWJsZS4KKyAgIC8vISBccmV0dXJucyBBZGRyZXNzIG9mIGNodW5rIG4gaWYgYWxsb2NhdGVkIG9rLgorICAgLy8hIFxyZXR1cm5zIDAgaWYgbm90IGVub3VnaCBtZW1vcnkgZm9yIG4gY2h1bmtzLgorKyAgaWYgKG4gPiBtYXhfY2h1bmtzKCkpCisrICAgIHJldHVybiAwOworIAorICAgY29uc3Qgc2l6ZV90eXBlIHBhcnRpdGlvbl9zaXplID0gYWxsb2Nfc2l6ZSgpOworICAgY29uc3Qgc2l6ZV90eXBlIHRvdGFsX3JlcV9zaXplID0gbiAqIHJlcXVlc3RlZF9zaXplOworQEAgLTg0MCw5ICs4NTYsOSBAQCB2b2lkICogcG9vbDxVc2VyQWxsb2NhdG9yPjo6b3JkZXJlZF9tYWxsb2MoY29uc3Qgc2l6ZV90eXBlIG4pCisgCisgICBCT09TVF9VU0lOR19TVERfTUlOKCk7CisgICBpZighbWF4X3NpemUpCistICAgIG5leHRfc2l6ZSA8PD0gMTsKKysgICAgc2V0X25leHRfc2l6ZShuZXh0X3NpemUgPDwgMSk7CisgICBlbHNlIGlmKCBuZXh0X3NpemUqcGFydGl0aW9uX3NpemUvcmVxdWVzdGVkX3NpemUgPCBtYXhfc2l6ZSkKKy0gICAgbmV4dF9zaXplID0gbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKG5leHRfc2l6ZSA8PCAxLCBtYXhfc2l6ZSpyZXF1ZXN0ZWRfc2l6ZS8gcGFydGl0aW9uX3NpemUpOworKyAgICBzZXRfbmV4dF9zaXplKG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTihuZXh0X3NpemUgPDwgMSwgbWF4X3NpemUgKiByZXF1ZXN0ZWRfc2l6ZSAvIHBhcnRpdGlvbl9zaXplKSk7CisgCisgICAvLyAgaW5zZXJ0IGl0IGludG8gdGhlIGxpc3QsCisgICAvLyAgIGhhbmRsZSBib3JkZXIgY2FzZS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9ib29zdC1tYXRoLWRpc2FibGUtcGNoLWZvci1nY2MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYm9vc3QtbWF0aC1kaXNhYmxlLXBjaC1mb3ItZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NWJhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYm9vc3QtbWF0aC1kaXNhYmxlLXBjaC1mb3ItZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gY2FiZmNiYTFmZjc1MTFmZmQ2YjkxY2EyNDQyODhkNDRmNTg1YWFkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIzIFNlcCAyMDE2IDAxOjA0OjUwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJvb3N0LW1hdGg6IGRpc2FibGUgcGNoIGZvciBnY2MKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsqXQorCisqIEl0J3MgYSB3b3JrIGFyb3VuZCBmb3IgYSBkZWZlY3Qgd2hlbiBidWlsZCBpbiBwYXJhbGxlbDoKK2h0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xMjQ3NworCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGlicy9tYXRoL2J1aWxkL0phbWZpbGUudjIgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzL21hdGgvYnVpbGQvSmFtZmlsZS52MiBiL2xpYnMvbWF0aC9idWlsZC9KYW1maWxlLnYyCitpbmRleCBlMTlmYjJlLi44MjQ3MmE3IDEwMDY0NAorLS0tIGEvbGlicy9tYXRoL2J1aWxkL0phbWZpbGUudjIKKysrKyBiL2xpYnMvbWF0aC9idWlsZC9KYW1maWxlLnYyCitAQCAtMTMsNyArMTMsNyBAQCBwcm9qZWN0CisgICAgICAgIzx0b29sc2V0PmludGVsLWxpbnV4OjxwY2g+b2ZmCisgICAgICAgPHRvb2xzZXQ+aW50ZWwtZGFyd2luOjxwY2g+b2ZmCisgICAgICAgPHRvb2xzZXQ+bXN2Yy03LjE6PHBjaD5vZmYKKy0gICAgICA8dG9vbHNldD5nY2MsPHRhcmdldC1vcz53aW5kb3dzOjxwY2g+b2ZmCisrICAgICAgPHRvb2xzZXQ+Z2NjOjxwY2g+b2ZmCisgICAgICAgIzx0b29sc2V0PmdjYzo8Y3h4ZmxhZ3M+LWZ2aXNpYmlsaXR5PWhpZGRlbgorICAgICAgIDx0b29sc2V0PmludGVsLWxpbnV4OjxjeHhmbGFncz4tZnZpc2liaWxpdHk9aGlkZGVuCisgICAgICAgIzx0b29sc2V0PnN1bjo8Y3h4ZmxhZ3M+LXhsZHNjb3BlPWhpZGRlbgorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42MC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0XzEuNjAuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4MjRjOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42MC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1pbmNsdWRlIGJvb3N0LSR7UFZ9LmluYwotaW5jbHVkZSBib29zdC5pbmMKLQotU1JDX1VSSSArPSAiXAotICAgIGZpbGU6Ly9hcm0taW50cmluc2ljcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDEtRG8tbm90LXF1YWxpZnktZmVudi5oLW5hbWVzLXRoYXQtbWlnaHQtYmUtbWFjcm9zLnBhdGNoO3N0cmlwbGV2ZWw9MiBcCi0gICAgZmlsZTovL2NvbnNpZGVyLWhhcmRmcC5wYXRjaCBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42MS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0XzEuNjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGUzODcwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0XzEuNjEuMC5iYgpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlIGJvb3N0LSR7UFZ9LmluYworaW5jbHVkZSBib29zdC5pbmMKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9hcm0taW50cmluc2ljcy5wYXRjaCBcCisgICAgZmlsZTovL2NvbnNpZGVyLWhhcmRmcC5wYXRjaCBcCisgICAgZmlsZTovL2Jvb3N0LUNWRS0yMDEyLTI2NzcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWJvb3N0LWFzaW8tZGV0YWlsLXNvY2tldF90eXBlcy5ocHAtZml4LXBvbGwuaC1pbmNsdWQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWJvb3N0LXRlc3QtZXhlY3V0aW9uX21vbml0b3IuaHBwLWZpeC1taXBzLXNvZnQtZmxvYXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLXNtYXJ0X3B0ci1taXBzLWFzc2VtYmx5LWRvZXNuLXQtY29tcGlsZS1pbi1taXBzMTZlLW0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LVVzZS1hdG9taWMtYnktZGVmYXVsdC13aGVuLUJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMucGF0Y2ggXAorICAgIGZpbGU6Ly9ib29zdC1tYXRoLWRpc2FibGUtcGNoLWZvci1nY2MucGF0Y2ggXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoCmluZGV4IDRiNGIyODcuLjRhOGFlNWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2gKQEAgLTYsOSArNiwxMyBAQAogCiB8IFJ1bm5pbmcgaG9va3MgaW4gWy4uLl0vcm9vdGZzL2V0Yy9jYS1jZXJ0aWZpY2F0ZXMvdXBkYXRlLmQuLi4KIHwgWy4uLl0vdXNyL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlczogbGluZSAxOTQ6IE5vdDogY29tbWFuZCBub3QgZm91bmQKK3wgWy4uLl0vdXNyL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlczogbGluZSAyMzA6IE5vdCBhIGRpcmVjdG9yeTogLS06IGNvbW1hbmQgbm90IGZvdW5kCit8IEU6IE5vdCBhIGRpcmVjdG9yeTogLS0gZXhpdGVkIHdpdGggY29kZSAxMjcuCisKIAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCiBTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFjaWVqIEJvcnplY2tpIDxtYWNpZWouYm9yemVja2lAcm5kaXR5LmNvbT4KIC0tLQogIHNiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyB8IDQgKy0tLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKQEAgLTI0LDcgKzI4LDcgQEAKIC0gIFZFUkJPU0VfQVJHPQogLSAgWyAiJHZlcmJvc2UiID0gMCBdIHx8IFZFUkJPU0VfQVJHPSItLXZlcmJvc2UiCiAtICBldmFsIHJ1bi1wYXJ0cyAiJFZFUkJPU0VfQVJHIiAtLXRlc3QgLS0gIiRIT09LU0RJUiIgfCB3aGlsZSByZWFkIGhvb2sKLSsgIGV2YWwgcnVuLXBhcnRzIC0tdGVzdCAtLSAiJEhPT0tTRElSIiB8IHdoaWxlIHJlYWQgaG9vaworKyAgZXZhbCBydW4tcGFydHMgLS10ZXN0ICIkSE9PS1NESVIiIHwgd2hpbGUgcmVhZCBob29rCiAgICBkbwogICAgICAoIGNhdCAiJEFEREVEIgogICAgICAgIGNhdCAiJFJFTU9WRUQiICkgfCAiJGhvb2siIHx8IGVjaG8gIkU6ICRob29rIGV4aXRlZCB3aXRoIGNvZGUgJD8uIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMDI3MjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1Gcm9tIDExMWU5MDVmZTkzMWRhMWEzODAwYWNjZmM2NzVjYzAxYzhlZTA4MGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBVbGYgU2FtdWVsc3NvbiA8dWxmQGVtYWdpaS5jb20+Ci1EYXRlOiBUdWUsIDI4IEZlYiAyMDEyIDA2OjQyOjU4ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IHJlbW92ZSBjIHJlaGFzaAotCi1VcGRhdGVkIGVhcmxpZXIgcGF0Y2ggdG8gYXBwbHkgY2xlYW4gb24gMjAxMi0wMi0xMgotU2lnbmVkLW9mZi1ieTogVWxmIFNhbXVlbHNzb24gPHVsZkBlbWFnaWkuY29tPgotLS0tCi0gc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgICAyMCArKysrKysrKysrLS0tLS0tLS0tLQotIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgYi9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKLWluZGV4IDUzNzU5NTAuLmM1NjdlM2QgMTAwNzU1Ci0tLS0gYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKLSsrKyBiL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcwotQEAgLTEzMiwxNiArMTMyLDE2IEBAIHJtIC1mICIkQ0VSVEJVTkRMRSIKLSBBRERFRF9DTlQ9JCh3YyAtbCA8ICIkQURERUQiKQotIFJFTU9WRURfQ05UPSQod2MgLWwgPCAiJFJFTU9WRUQiKQotCi0taWYgWyAiJEFEREVEX0NOVCIgLWd0IDAgXSB8fCBbICIkUkVNT1ZFRF9DTlQiIC1ndCAwIF0KLS10aGVuCi0tICAjIG9ubHkgcnVuIGlmIHNldCBvZiBmaWxlcyBoYXMgY2hhbmdlZAotLSAgaWYgWyAiJHZlcmJvc2UiID0gMCBdCi0tICB0aGVuCi0tICAgIGNfcmVoYXNoIC4gPiAvZGV2L251bGwKLS0gIGVsc2UKLS0gICAgY19yZWhhc2ggLgotLSAgZmkKLS1maQotKyNpZiBbICIkQURERURfQ05UIiAtZ3QgMCBdIHx8IFsgIiRSRU1PVkVEX0NOVCIgLWd0IDAgXQotKyN0aGVuCi0rIyAgIyBvbmx5IHJ1biBpZiBzZXQgb2YgZmlsZXMgaGFzIGNoYW5nZWQKLSsjICBpZiBbICIkdmVyYm9zZSIgPSAwIF0KLSsjICB0aGVuCi0rIyAgICBjX3JlaGFzaCAuID4gL2Rldi9udWxsCi0rIyAgZWxzZQotKyMgICAgY19yZWhhc2ggLgotKyMgIGZpCi0rI2ZpCi0KLSBjaG1vZCAwNjQ0ICIkVEVNUEJVTkRMRSIKLSBtdiAtZiAiJFRFTVBCVU5ETEUiICIkQ0VSVEJVTkRMRSIKLS0tCi0xLjcuNC4xCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE2MDEwNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTYwMTA0LmJiCmluZGV4IGUwZjE5MzkuLjFiZWEwNjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTYwMTA0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTYwMTA0LmJiCkBAIC05LDEyICs5LDEyIEBACiAKICMgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBydW4gdGhlIHBvc3RpbnN0IGF0IGltYWdlIGNyZWF0aW9uIHRpbWUKIERFUEVORFMgPSAiY2EtY2VydGlmaWNhdGVzLW5hdGl2ZSIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIm9wZW5zc2wtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiY2EtY2VydGlmaWNhdGVzLW5hdGl2ZSBvcGVuc3NsLW5hdGl2ZSIKIAogU1JDUkVWID0gImY1NDcxNTcwMmM1YzA1ODFjOTQ2MWY3OGZkODRlMmM4ZDJlYzI0M2MiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC9jYS1jZXJ0aWZpY2F0ZXMuZ2l0IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly91cGRhdGUtY2EtY2VydGlmaWNhdGVzLXN1cHBvcnQtVG95Ym94LnBhdGNoIFwKQEAgLTc3LDQgKzc3LDYgQEAKICAgICBTWVNST09UPSIke0R9JHtiYXNlX3ByZWZpeH0iICR7RH0ke3NiaW5kaXJ9L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKIH0KIAorUkRFUEVORFNfJHtQTn0gKz0gIm9wZW5zc2wiCisKIEJCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0XzAuNC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgppbmRleCAyOTc0ZTM2Li5jZWFjMGZlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0XzAuNC42LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXRfMC40LjYuYmIKQEAgLTMwLDcgKzMwLDcgQEAKIFBBQ0tBR0VDT05GSUdbcG9saWN5a2l0XSA9ICItLXdpdGgtcG9sa2l0LC0td2l0aG91dC1wb2xraXQscG9sa2l0IgogUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSIKIAotRklMRVNfJHtQTn0gKz0gIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL0NvbnNvbGVLaXQgJHtleGVjX3ByZWZpeH0vbGliL0NvbnNvbGVLaXQgXAorRklMRVNfJHtQTn0gKz0gIiR7ZXhlY19wcmVmaXh9L2xpYi9Db25zb2xlS2l0IFwKICAgICAgICAgICAgICAgICAke2xpYmRpcn0vQ29uc29sZUtpdCAgJHtzeXN0ZW1kX3VuaXRkaXJ9ICR7YmFzZV9saWJkaXJ9IFwKICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMSAke2RhdGFkaXJ9L1BvbGljeUtpdCAke2RhdGFkaXJ9L3BvbGtpdCoiCiAKQEAgLTQ1LDYgKzQ1LDYgQEAKIAkJCT4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9jb25zb2xla2l0LmNvbmYKIAlmaQogCi0JIyBSZW1vdmUgL3Zhci9ydW4gZnJvbSBwYWNrYWdlIGFzIGNvbnNvbGUta2l0LWRhZW1vbiB3aWxsIHBvcHVsYXRlIGl0IG9uIHN0YXJ0dXAKLQlybSAtZnIgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biIKKwkjIFJlbW92ZSAvdmFyLyBkaXJlY3RvcmllcyBhcyB0aGUgZGFlbW9uIGNyZWF0ZXMgdGhlbSBhcyByZXF1aXJlZAorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC8wMDAxLXJlcGxhY2Uta3JiNS1jb25maWctd2l0aC1wa2ctY29uZmlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC8wMDAxLXJlcGxhY2Uta3JiNS1jb25maWctd2l0aC1wa2ctY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTVkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsLzAwMDEtcmVwbGFjZS1rcmI1LWNvbmZpZy13aXRoLXBrZy1jb25maWcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorW1BBVENIXSByZXBsYWNlIGtyYjUtY29uZmlnIHdpdGggcGtnLWNvbmZpZworCitVcHN0cmVhbS1TdGF0dXM6ICBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTk5YjMwMy4uZGM5M2YzOSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTE5Niw3ICsxMTk2LDcgQEAgQUNfQVJHX1dJVEgoZ3NzYXBpLAorICAgZmkKKyBdKQorIAorLTogJHtLUkI1Q09ORklHOj0iJEdTU0FQSV9ST09UL2Jpbi9rcmI1LWNvbmZpZyJ9CisrS1JCNUNPTkZJRz1gd2hpY2ggcGtnLWNvbmZpZ2AKKyAKKyBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBHU1MtQVBJIHN1cHBvcnQgaXMgcmVxdWVzdGVkXSkKK0BAIC0xMjA3LDcgKzEyMDcsNyBAQCBpZiB0ZXN0IHgiJHdhbnRfZ3NzIiA9IHh5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRob3N0X2FsaWFzIiAtYSAtZiAiJEdTU0FQSV9ST09UL2Jpbi8kaG9zdF9hbGlhcy1rcmI1LWNvbmZpZyI7IHRoZW4KKyAgICAgICAgIEdTU0FQSV9JTkNTPWAkR1NTQVBJX1JPT1QvYmluLyRob3N0X2FsaWFzLWtyYjUtY29uZmlnIC0tY2ZsYWdzIGdzc2FwaWAKKyAgICAgIGVsaWYgdGVzdCAtZiAiJEtSQjVDT05GSUciOyB0aGVuCistICAgICAgICBHU1NBUElfSU5DUz1gJEtSQjVDT05GSUcgLS1jZmxhZ3MgZ3NzYXBpYAorKyAgICAgICAgR1NTQVBJX0lOQ1M9YCRLUkI1Q09ORklHIC0tY2ZsYWdzIG1pdC1rcmI1LWdzc2FwaWAKKyAgICAgIGVsaWYgdGVzdCAiJEdTU0FQSV9ST09UIiAhPSAieWVzIjsgdGhlbgorICAgICAgICAgR1NTQVBJX0lOQ1M9Ii1JJEdTU0FQSV9ST09UL2luY2x1ZGUiCisgICAgICBmaQorQEAgLTEzMDAsNyArMTMwMCw3IEBAIGlmIHRlc3QgeCIkd2FudF9nc3MiID0geHllczsgdGhlbgorICAgICAgICAgZWxpZiB0ZXN0IC1mICIkS1JCNUNPTkZJRyI7IHRoZW4KKyAgICAgICAgICAgIGRubCBrcmI1LWNvbmZpZyBkb2Vzbid0IGhhdmUgLS1saWJzLW9ubHktTCBvciBzaW1pbGFyLCBwdXQgZXZlcnl0aGluZworICAgICAgICAgICAgZG5sIGludG8gTElCUworLSAgICAgICAgICAgZ3NzX2xpYnM9YCRLUkI1Q09ORklHIC0tbGlicyBnc3NhcGlgCisrICAgICAgICAgICBnc3NfbGlicz1gJEtSQjVDT05GSUcgLS1saWJzIG1pdC1rcmI1LWdzc2FwaWAKKyAgICAgICAgICAgIExJQlM9IiRnc3NfbGlicyAkTElCUyIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhc2UgJGhvc3QgaW4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ3LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNDcuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxNzNkOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNDcuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLVNVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHRvb2wgYW5kIGxpYnJhcnkgZm9yIGNsaWVudC1zaWRlIFVSTCB0cmFuc2ZlcnMiCi1IT01FUEFHRSA9ICJodHRwOi8vY3VybC5oYXh4LnNlLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpc3QuY2dpP2xpc3Q9Y3VybC10cmFja2VyIgotU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTg7bWQ1PTNhMzQ5NDJmNGFlM2ZiZjFhMzAzMTYwNzE0ZTY2NGFjIgotCi1TUkNfVVJJID0gImh0dHA6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvY3VybC0ke1BWfS50YXIuYnoyIgotCi0jIGN1cmwgbGlrZXMgdG8gc2V0IC1nMCBpbiBDRkxBR1MsIHNvIHdlIHN0b3AgaXQKLSMgZnJvbSBtdWNraW5nIGFyb3VuZCB3aXRoIGRlYnVnIG9wdGlvbnMKLSMKLVNSQ19VUkkgKz0gIiBmaWxlOi8vY29uZmlndXJlX2FjLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWVhMzEyMzQ0OTQzOWJiZDk2MGNkMjVjZjk4Nzk2ZmIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGRjNjQzYWI5MzgyZTI0YmJlNDc0N2Q0M2RmMTg5YTBhNmNlMzhmY2IzM2RmMDQxYjljYjBiM2NkNDdhZTk4ZiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZyBtdWx0aWxpYl9oZWFkZXIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXB2NiIsICJpcHY2IiwgIiIsIGQpfSBnbnV0bHMgcHJveHkgemxpYiIKLVBBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gImlwdjYgcHJveHkgc3NsIHpsaWIiCi1QQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICJpcHY2IHByb3h5IHNzbCB6bGliIgotCi1QQUNLQUdFQ09ORklHW2RpY3RdID0gIi0tZW5hYmxlLWRpY3QsLS1kaXNhYmxlLWRpY3QsIgotUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCi1QQUNLQUdFQ09ORklHW2dvcGhlcl0gPSAiLS1lbmFibGUtZ29waGVyLC0tZGlzYWJsZS1nb3BoZXIsIgotUEFDS0FHRUNPTkZJR1tpbWFwXSA9ICItLWVuYWJsZS1pbWFwLC0tZGlzYWJsZS1pbWFwLCIKLVBBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCi1QQUNLQUdFQ09ORklHW2xkYXBdID0gIi0tZW5hYmxlLWxkYXAsLS1kaXNhYmxlLWxkYXAsIgotUEFDS0FHRUNPTkZJR1tsZGFwc10gPSAiLS1lbmFibGUtbGRhcHMsLS1kaXNhYmxlLWxkYXBzLCIKLVBBQ0tBR0VDT05GSUdbbGliaWRuXSA9ICItLXdpdGgtbGliaWRuLC0td2l0aG91dC1saWJpZG4sbGliaWRuIgotUEFDS0FHRUNPTkZJR1tsaWJzc2gyXSA9ICItLXdpdGgtbGlic3NoMiwtLXdpdGhvdXQtbGlic3NoMixsaWJzc2gyIgotUEFDS0FHRUNPTkZJR1twb3AzXSA9ICItLWVuYWJsZS1wb3AzLC0tZGlzYWJsZS1wb3AzLCIKLVBBQ0tBR0VDT05GSUdbcHJveHldID0gIi0tZW5hYmxlLXByb3h5LC0tZGlzYWJsZS1wcm94eSwiCi1QQUNLQUdFQ09ORklHW3J0bXBkdW1wXSA9ICItLXdpdGgtbGlicnRtcCwtLXdpdGhvdXQtbGlicnRtcCxydG1wZHVtcCIKLVBBQ0tBR0VDT05GSUdbcnRzcF0gPSAiLS1lbmFibGUtcnRzcCwtLWRpc2FibGUtcnRzcCwiCi1QQUNLQUdFQ09ORklHW3NtYl0gPSAiLS1lbmFibGUtc21iLC0tZGlzYWJsZS1zbWIsIgotUEFDS0FHRUNPTkZJR1tzbXRwXSA9ICItLWVuYWJsZS1zbXRwLC0tZGlzYWJsZS1zbXRwLCIKLVBBQ0tBR0VDT05GSUdbc3NsXSA9ICItLXdpdGgtc3NsIC0td2l0aC1yYW5kb209L2Rldi91cmFuZG9tLC0td2l0aG91dC1zc2wsb3BlbnNzbCIKLVBBQ0tBR0VDT05GSUdbdGVsbmV0XSA9ICItLWVuYWJsZS10ZWxuZXQsLS1kaXNhYmxlLXRlbG5ldCwiCi1QQUNLQUdFQ09ORklHW3RmdHBdID0gIi0tZW5hYmxlLXRmdHAsLS1kaXNhYmxlLXRmdHAsIgotUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLi8sLS13aXRob3V0LXpsaWIsemxpYiIKLQotRVhUUkFfT0VDT05GID0gIiBcCi0gICAgLS1lbmFibGUtY3J5cHRvLWF1dGggXAotICAgIC0td2l0aC1jYS1idW5kbGU9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCBcCi0gICAgLS13aXRob3V0LWxpYm1ldGFsaW5rIFwKLSAgICAtLXdpdGhvdXQtbGlicHNsIFwKLSAgICAtLXdpdGhvdXQtbmdodHRwMiBcCi0iCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCW9lX211bHRpbGliX2hlYWRlciBjdXJsL2N1cmxidWlsZC5oCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKLQkjIGNsZWFudXAgYnVpbGRwYXRocyBmcm9tIGN1cmwtY29uZmlnCi0Jc2VkIC1pIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnICR7RH0ke2JpbmRpcn0vY3VybC1jb25maWcKLX0KLQotUEFDS0FHRVMgPSsgImxpYiR7QlBOfSIKLQotRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS9saWIqLnNvLioiCi1SUkVDT01NRU5EU19saWIke0JQTn0gKz0gImNhLWNlcnRpZmljYXRlcyIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0venNoIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNTAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy41MC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTQxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNTAuMS5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSB0b29sIGFuZCBsaWJyYXJ5IGZvciBjbGllbnQtc2lkZSBVUkwgdHJhbnNmZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saXN0LmNnaT9saXN0PWN1cmwtdHJhY2tlciIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT04O21kNT0zYTM0OTQyZjRhZTNmYmYxYTMwMzE2MDcxNGU2NjRhYyIKKworU1JDX1VSSSA9ICJodHRwOi8vY3VybC5oYXh4LnNlL2Rvd25sb2FkL2N1cmwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXJlcGxhY2Uta3JiNS1jb25maWctd2l0aC1wa2ctY29uZmlnLnBhdGNoIFwKKyIKKworIyBjdXJsIGxpa2VzIHRvIHNldCAtZzAgaW4gQ0ZMQUdTLCBzbyB3ZSBzdG9wIGl0CisjIGZyb20gbXVja2luZyBhcm91bmQgd2l0aCBkZWJ1ZyBvcHRpb25zCisjCitTUkNfVVJJICs9ICIgZmlsZTovL2NvbmZpZ3VyZV9hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAxNWY2YTAyMTdjYTZmMmM1NDQyY2E0MDY0NzY5MjBiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMTJjNWY1NGNjYWExZDQwYWJjNjVkNjcyMTA3ZGNjNzVkM2UxZmNiMzhjMjY3NDg0MzM0MjgwMDk2ZTUxNTYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWcgbXVsdGlsaWJfaGVhZGVyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImlwdjYiLCAiaXB2NiIsICIiLCBkKX0gZ251dGxzIHByb3h5IHpsaWIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICJpcHY2IHByb3h5IHNzbCB6bGliIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPSAiaXB2NiBwcm94eSBzc2wgemxpYiIKKworUEFDS0FHRUNPTkZJR1tkaWN0XSA9ICItLWVuYWJsZS1kaWN0LC0tZGlzYWJsZS1kaWN0LCIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tnb3BoZXJdID0gIi0tZW5hYmxlLWdvcGhlciwtLWRpc2FibGUtZ29waGVyLCIKK1BBQ0tBR0VDT05GSUdbaW1hcF0gPSAiLS1lbmFibGUtaW1hcCwtLWRpc2FibGUtaW1hcCwiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorUEFDS0FHRUNPTkZJR1tsZGFwXSA9ICItLWVuYWJsZS1sZGFwLC0tZGlzYWJsZS1sZGFwLCIKK1BBQ0tBR0VDT05GSUdbbGRhcHNdID0gIi0tZW5hYmxlLWxkYXBzLC0tZGlzYWJsZS1sZGFwcywiCitQQUNLQUdFQ09ORklHW2xpYmlkbl0gPSAiLS13aXRoLWxpYmlkbiwtLXdpdGhvdXQtbGliaWRuLGxpYmlkbiIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gPSAiLS13aXRoLWxpYnNzaDIsLS13aXRob3V0LWxpYnNzaDIsbGlic3NoMiIKK1BBQ0tBR0VDT05GSUdbcG9wM10gPSAiLS1lbmFibGUtcG9wMywtLWRpc2FibGUtcG9wMywiCitQQUNLQUdFQ09ORklHW3Byb3h5XSA9ICItLWVuYWJsZS1wcm94eSwtLWRpc2FibGUtcHJveHksIgorUEFDS0FHRUNPTkZJR1tydG1wZHVtcF0gPSAiLS13aXRoLWxpYnJ0bXAsLS13aXRob3V0LWxpYnJ0bXAscnRtcGR1bXAiCitQQUNLQUdFQ09ORklHW3J0c3BdID0gIi0tZW5hYmxlLXJ0c3AsLS1kaXNhYmxlLXJ0c3AsIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXNtYiwtLWRpc2FibGUtc21iLCIKK1BBQ0tBR0VDT05GSUdbc210cF0gPSAiLS1lbmFibGUtc210cCwtLWRpc2FibGUtc210cCwiCitQQUNLQUdFQ09ORklHW3NzbF0gPSAiLS13aXRoLXNzbCAtLXdpdGgtcmFuZG9tPS9kZXYvdXJhbmRvbSwtLXdpdGhvdXQtc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3RlbG5ldF0gPSAiLS1lbmFibGUtdGVsbmV0LC0tZGlzYWJsZS10ZWxuZXQsIgorUEFDS0FHRUNPTkZJR1t0ZnRwXSA9ICItLWVuYWJsZS10ZnRwLC0tZGlzYWJsZS10ZnRwLCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4vLC0td2l0aG91dC16bGliLHpsaWIiCitQQUNLQUdFQ09ORklHW2tyYjVdID0gIi0td2l0aC1nc3NhcGksLS13aXRob3V0LWdzc2FwaSxrcmI1IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWVuYWJsZS1jcnlwdG8tYXV0aCBcCisgICAgLS13aXRoLWNhLWJ1bmRsZT0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IFwKKyAgICAtLXdpdGhvdXQtbGlibWV0YWxpbmsgXAorICAgIC0td2l0aG91dC1saWJwc2wgXAorICAgIC0td2l0aG91dC1uZ2h0dHAyIFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGN1cmwvY3VybGJ1aWxkLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCSMgY2xlYW51cCBidWlsZHBhdGhzIGZyb20gY3VybC1jb25maWcKKwlzZWQgLWkgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgJHtEfSR7YmluZGlyfS9jdXJsLWNvbmZpZworfQorCitQQUNLQUdFUyA9KyAibGliJHtCUE59IgorCitGSUxFU19saWIke0JQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK1JSRUNPTU1FTkRTX2xpYiR7QlBOfSArPSAiY2EtY2VydGlmaWNhdGVzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS96c2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGliZGItNi4wLmxhLWRlcGVuZC1vc19tYXAubC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGliZGItNi4wLmxhLWRlcGVuZC1vc19tYXAubC5wYXRjaAppbmRleCBkNGM2YmI4Li42OGEyMTMxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYmRiLTYuMC5sYS1kZXBlbmQtb3NfbWFwLmwucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJkYi02LjAubGEtZGVwZW5kLW9zX21hcC5sLnBhdGNoCkBAIC0xNCwxMCArMTQsMTAgQEAKICBkaXN0L01ha2VmaWxlLmluIHwgICAgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCi1kaWZmIC0tZ2l0IGEvZGlzdC9NYWtlZmlsZS5pbiBiL2Rpc3QvTWFrZWZpbGUuaW4KLWluZGV4IDBhNDIzNzUuLmQ5ZTA1YjkgMTAwNjQ0Ci0tLS0gYS9kaXN0L01ha2VmaWxlLmluCi0rKysgYi9kaXN0L01ha2VmaWxlLmluCitJbmRleDogZGItNi4wLjMwL2Rpc3QvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkYi02LjAuMzAub3JpZy9kaXN0L01ha2VmaWxlLmluCisrKysgZGItNi4wLjMwL2Rpc3QvTWFrZWZpbGUuaW4KIEBAIC04NjMsNyArODYzLDcgQEAgJChsaWJkYl92ZXJzaW9uKTogJChDX09CSlMpCiAgCSQoTE4pIC1zICQobGliZGJfdmVyc2lvbikgJChsaWJkYikKICAKQEAgLTI3LDYgKzI3LDMgQEAKICAJJChTT0xJTkspICQoU09GTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKENfT0JKUykgXAogIAkJJChMSUJDU09fTElCUykKICAJJChSTSkgJChsaWJkYikKLS0tIAotMS43LjkuNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaAppbmRleCAzMjliZmY1Li44NjgwNDA4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2gKQEAgLTE1LDEwICsxNSwxMCBAQAogIE1ha2VmaWxlLmluIHwgICAgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgotaW5kZXggZTQ1MWY3MC4uMGE0MjM3NSAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmluCi0rKysgYi9NYWtlZmlsZS5pbgorSW5kZXg6IGRiLTYuMC4zMC9kaXN0L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGItNi4wLjMwLm9yaWcvZGlzdC9NYWtlZmlsZS5pbgorKysrIGRiLTYuMC4zMC9kaXN0L01ha2VmaWxlLmluCiBAQCAtODYzLDcgKzg2Myw3IEBAICQobGliZGJfdmVyc2lvbik6ICQoQ19PQkpTKQogIAkkKExOKSAtcyAkKGxpYmRiX3ZlcnNpb24pICQobGliZGIpCiAgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoCmluZGV4IDM0ZThkYjguLjZhOGVhZGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoCkBAIC0xMCw5ICsxMCwxMSBAQAogCiBBdXRob3I6IGpib3dsZXJAbnNsdTItbGludXgub3JnCiAKLS0tLSBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oLm9yaWcJMjAxMS0wMS0wNSAxOToyMTo0Mi4xODE4MDUzNjYgLTA2MDAKLSsrKyBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oCTIwMTEtMDEtMDUgMTk6MjQ6NTMuMTQxODUzMTE3IC0wNjAwCi1AQCAtNDc0LDYgKzQ3NCwyNSBAQAorSW5kZXg6IGRiLTYuMC4zMC9zcmMvZGJpbmMvbXV0ZXhfaW50LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkYi02LjAuMzAub3JpZy9zcmMvZGJpbmMvbXV0ZXhfaW50LmgKKysrKyBkYi02LjAuMzAvc3JjL2RiaW5jL211dGV4X2ludC5oCitAQCAtNDc0LDYgKzQ3NCwyNSBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHNsX3Q7CiAgCiAgI2lmZGVmIExPQURfQUNUVUFMX01VVEVYX0NPREUKICAvKiBnY2MvYXJtOiAwIGlzIGNsZWFyLCAxIGlzIHNldC4gKi8KQEAgLTM4LDcgKzQwLDcgQEAKICAjZGVmaW5lCU1VVEVYX1NFVCh0c2wpICh7CQkJCQkJXAogIAlpbnQgX19yOwkJCQkJCQlcCiAgCV9fYXNtX18gdm9sYXRpbGUoCQkJCQkJXAotQEAgLTQ4NCw2ICs1MDMsNyBAQAorQEAgLTQ4NCw2ICs1MDMsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHNsX3Q7CiAgCSAgICApOwkJCQkJCQkJXAogIAlfX3IgJiAxOwkJCQkJCQlcCiAgfSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCmluZGV4IDJjN2YxZTEuLjI3NjMyZTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtNiw5ICs2LDExIEBACiAKIFNpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KIAotLS0tIGRpc3Qub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTExIDE5OjU3OjQ4LjAwMDAwMDAwMCArMDIwMAotKysrIGRpc3QvTWFrZWZpbGUuaW4JMjAxMy0xMC0zMSAxODoxNzoxMS44NzU1MzI1MjIgKzAxMDAKLUBAIC0xMDM0LDcgKzEwMzQsNyBAQAorSW5kZXg6IGRiLTYuMC4zMC9kaXN0L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGItNi4wLjMwLm9yaWcvZGlzdC9NYWtlZmlsZS5pbgorKysrIGRiLTYuMC4zMC9kaXN0L01ha2VmaWxlLmluCitAQCAtMTA0MSw3ICsxMDQxLDcgQEAgZGJfcmVjb3ZlcjogZGJfcmVjb3ZlckBvQCB1dGlsX3NpZ0BvQCAkKAogIAkgICAgZGJfcmVjb3ZlckBvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpICQoTElCUykKICAJJChQT1NUTElOSykgJEAKICAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCmluZGV4IGM3MjRmMDQuLjBiNTFhMWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYgpAQCAtMTUsMTUgKzE1LDE3IEBACiBWSVJUVUFMX05BTUUgPz0gInZpcnR1YWwvZGIiCiBSQ09ORkxJQ1RTXyR7UE59ID0gImRiMyIKIAorUFIgPSAicjEiCisKIFNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgotU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAorU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2ggXAogICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCiAgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gImI5OTQ1NDU2NGQ1YjQ0Nzk3NTA1NjcwMzFkNjZmZTI0IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwYTk5MmQ3NDA3MDk4OTJlODFmOWQ5M2YwNmRhZjMwNWNmNzNmYjgxYjU0NWFmZTcyNDc4MDQzMTcyYzM2MjgiCiAKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0xJQ0VOU0U7bWQ1PWVkMTE1OGUzMTQzN2Y0Zjg3Y2RkNGFiMmI4NjEzOTU1IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZWQxMTU4ZTMxNDM3ZjRmODdjZGQ0YWIyYjg2MTM5NTUiCiAKIGluaGVyaXQgYXV0b3Rvb2xzCiAKQEAgLTM2LDE0ICszOCw2IEBACiAjIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBkYiBpbiB0aGUgYnVpbGQgKGRpc3RybykgLmNvbmYKIFBST1ZJREVTICs9ICIke1ZJUlRVQUxfTkFNRX0iCiAKLSMgYml0YmFrZSBpc24ndCBxdWl0ZSBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCBzbGVlcHljYXQsCi0jIHRoZSBkaXN0cmlidXRpb24gc2l0cyBpbiB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5LCBidXQgYWxsCi0jIHRoZSBidWlsZHMgbXVzdCBvY2N1ciBmcm9tIGEgc3ViLWRpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcKLSMgcGVyc3VhZGVzIGJpdGJha2UgdG8gZ28gdG8gdGhlIHJpZ2h0IHBsYWNlCi1TID0gIiR7V09SS0RJUn0vZGItJHtQVn0vZGlzdCIKLUIgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9idWlsZF91bml4IgotU1BEWF9TID0gIiR7V09SS0RJUn0vZGItJHtQVn0iCi0KICMgVGhlIGV4ZWN1dGFibGVzIGdvIGluIGEgc2VwYXJhdGUgcGFja2FnZSAtIHR5cGljYWxseSB0aGVyZQogIyBpcyBubyBuZWVkIHRvIGluc3RhbGwgdGhlc2UgdW5sZXNzIGRvaW5nIHJlYWwgZGF0YWJhc2UKICMgbWFuYWdlbWVudCBvbiB0aGUgc3lzdGVtLgpAQCAtNzUsMjEgKzY5LDIzIEBACiBNVVRFWCA9ICIiCiBNVVRFWF9hcm0gPSAiJHtBUk1fTVVURVh9IgogTVVURVhfYXJtZWIgPSAiJHtBUk1fTVVURVh9IgotRVhUUkFfT0VDT05GICs9ICIke01VVEVYfSIKLUVYVFJBX09FTUFLRV9jbGFzcy10YXJnZXQgPSAiTElCVE9PTD0ke1NUQUdJTkdfQklORElSX0NST1NTfS8ke0hPU1RfU1lTfS1saWJ0b29sIgorRVhUUkFfT0VDT05GICs9ICIke01VVEVYfSBTVFJJUD10cnVlIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIExJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vJHtIT1NUX1NZU30tbGlidG9vbCIKKworQVVUT1RPT0xTX1NDUklQVF9QQVRIID0gIiR7U30vZGlzdCIKIAogIyBDYW5jZWwgdGhlIHNpdGUgc3R1ZmYgLSBpdCdzIHNldCBmb3IgZGIzIGFuZCBkZXN0cm95cyB0aGUKICMgY29uZmlndXJlLgogQ09ORklHX1NJVEUgPSAiIgogZG9fY29uZmlndXJlKCkgewotCWdudS1jb25maWdpemUgLS1mb3JjZSAke1N9Ci0JZXhwb3J0IFNUUklQPSJ0cnVlIgorICAgIGNkICR7Qn0KKwlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtBVVRPVE9PTFNfU0NSSVBUX1BBVEh9CiAJb2VfcnVuY29uZgogfQogCiBkb19jb21waWxlX3ByZXBlbmQoKSB7Ci0Jc2VkIC1pIC1lICdzfGhhcmRjb2RlX2ludG9fbGlicz15ZXN8aGFyZGNvZGVfaW50b19saWJzPW5vfCcgXAotCQkke0J9L2xpYnRvb2wKKyAgICAjIFN0b3AgbGlidG9vbCBhZGRpbmcgUlBBVEhzCisgICAgc2VkIC1pIC1lICdzfGhhcmRjb2RlX2ludG9fbGlicz15ZXN8aGFyZGNvZGVfaW50b19saWJzPW5vfCcgJHtCfS9saWJ0b29sCiB9CiAKIGRvX2luc3RhbGxfYXBwZW5kKCkgewpAQCAtMTE0LDQgKzExMCwzIEBACiBJTlNBTkVfU0tJUF8ke1BOfS1jeHggPSAiZGV2LXNvIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNi4wLjMwLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGE0NjliLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotIyBWZXJzaW9uIDYgb2YgdGhlIEJlcmtlbGV5IERCIGZyb20gT3JhY2xlIChmb3JtZXJseSBTbGVlcHljYXQpCi0jCi0jIEF0IHByZXNlbnQgdGhpcyBwYWNrYWdlIG9ubHkgaW5zdGFsbHMgdGhlIERCIGNvZGUKLSMgaXRzZWxmIChzaGFyZWQgbGlicmFyaWVzLCAuYSBpbiB0aGUgZGV2IHBhY2thZ2UpLAotIyBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzLgotIwotIyBUaGUgaGVhZGVycyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRob3NlIGFzIHYzCi0jIG9mIHRoZSBEQiwgb25seSBvbmUgdmVyc2lvbiBjYW4gYmUgdXNlZCAqZm9yIGRldioKLSMgYXQgb25jZSAtIERCMyBhbmQgREI2IGNhbiBib3RoIGJlIGluc3RhbGxlZCBvbiB0aGUKLSMgc2FtZSBzeXN0ZW0gYXQgdGhlIHNhbWUgdGltZSBpZiByZWFsbHkgbmVjZXNzYXJ5LgotU0VDVElPTiA9ICJsaWJzIgotU1VNTUFSWSA9ICJCZXJrZWxleSBEYXRhYmFzZSB2NiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9kYXRhYmFzZS9kYXRhYmFzZS10ZWNobm9sb2dpZXMvYmVya2VsZXlkYi9vdmVydmlldy9pbmRleC5odG1sIgotTElDRU5TRSA9ICJBR1BMLTMuMCIKLVZJUlRVQUxfTkFNRSA/PSAidmlydHVhbC9kYiIKLVJDT05GTElDVFNfJHtQTn0gPSAiZGIzIgotCi0jIE5vdGUsIHdoZW4gdXBncmFkZWQgdG8gNi4xLngsIGEgcGF0Y2ggaW4gUlBNIHdpbGwgbmVlZCB0byBiZSByZW1vdmVkIHRvIGFjdGl2YXRlIGRiIDYuMSBzdXBwb3J0LgotCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2JlcmtlbGV5LWRiL2RiLSR7UFZ9LnRhci5neiIKLVNSQ19VUkkgKz0gImZpbGU6Ly9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoO3BhdGNoZGlyPS4uIFwKLSAgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtbGV0LWxpYmRiLTYuMC5sYS1kZXBlbmQtb3NfbWFwLmwucGF0Y2g7cGF0Y2hkaXI9Li4gXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhZDI4ZWI4NmFkMzIwM2I1NDIyODQ0ZGIxNzljNTg1YiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDhlNGIxY2YzOTBlOWJmNTRjMGVmMDBjNWJkOWNhNzZkMzZlMjI2MWI5ZjRkMzNkNTQ1MTZmM2Y2YTIwZmQyIgotCi0jIEV4Y2x1ZGUgTkMgdmVyc2lvbnMgd2hpY2ggbGFjayBBRVMgZW5jcnlwdGlvbgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiZGItKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspPykudGFyIgotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9wcm9kdWN0cy9iZXJrZWxleWRiL2Rvd25sb2Fkcy9pbmRleC0wODI5NDQuaHRtbCIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9MWVjOGIwYjE3Y2MzMTUxM2ZlMzVhYjEwNzE2Zjg0OTAiCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLSMgUHV0IHZpcnR1YWwvZGIgaW4gYW55IGFwcHJvcHJpYXRlIHByb3ZpZGVyIG9mIGEKLSMgcmVsYXRpb25hbCBkYXRhYmFzZSwgdXNlIGl0IGFzIGEgZGVwZW5kZW5jeSBpbgotIyBwbGFjZSBvZiBhIHNwZWNpZmljIGRiIGFuZCB1c2U6Ci0jCi0jIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiCi0jCi0jIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBkYiBpbiB0aGUgYnVpbGQgKGRpc3RybykgLmNvbmYKLVBST1ZJREVTICs9ICIke1ZJUlRVQUxfTkFNRX0iCi0KLSMgYml0YmFrZSBpc24ndCBxdWl0ZSBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCBzbGVlcHljYXQsCi0jIHRoZSBkaXN0cmlidXRpb24gc2l0cyBpbiB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5LCBidXQgYWxsCi0jIHRoZSBidWlsZHMgbXVzdCBvY2N1ciBmcm9tIGEgc3ViLWRpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcKLSMgcGVyc3VhZGVzIGJpdGJha2UgdG8gZ28gdG8gdGhlIHJpZ2h0IHBsYWNlCi1TID0gIiR7V09SS0RJUn0vZGItJHtQVn0vZGlzdCIKLUIgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9idWlsZF91bml4IgotU1BEWF9TID0gIiR7V09SS0RJUn0vZGItJHtQVn0iCi0KLSMgVGhlIGV4ZWN1dGFibGVzIGdvIGluIGEgc2VwYXJhdGUgcGFja2FnZSAtIHR5cGljYWxseSB0aGVyZQotIyBpcyBubyBuZWVkIHRvIGluc3RhbGwgdGhlc2UgdW5sZXNzIGRvaW5nIHJlYWwgZGF0YWJhc2UKLSMgbWFuYWdlbWVudCBvbiB0aGUgc3lzdGVtLgotaW5oZXJpdCBsaWJfcGFja2FnZQotCi1QQUNLQUdFUyA9KyAiJHtQTn0tY3h4IgotRklMRVNfJHtQTn0tY3h4ID0gIiR7bGliZGlyfS8qY3h4KnNvIgotCi0KLSMgVGhlIGRldiBwYWNrYWdlIGhhcyB0aGUgLnNvIGxpbmsgKGFzIGluIGRiMykgYW5kIHRoZSAuYSdzIC0KLSMgaXQgaXMgdGhlcmVmb3JlIGluY29tcGF0aWJsZSAoY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUKLSMgc2FtZSB0aW1lKSBhcyB0aGUgZGIzIHBhY2thZ2UKLSMgc29ydCBvdXQgdGhlIC5zbyBzaW5jZSB0aGV5IGRvIHZlcnNpb24gcHJpb3IgdG8gdGhlIC5zbwotU09MSUJTID0gIi02Ki5zbyIKLUZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliZGIuc28gJHtsaWJkaXJ9L2xpYmRiX2N4eC5zbyIKLQotI2NvbmZpZ3VyYXRpb24gLSBzZXQgaW4gbG9jYWwuY29uZiB0byBvdmVycmlkZQotIyBBbGwgdGhlIC0tZGlzYWJsZS0qIG9wdGlvbnMgcmVwbGFjZSAtLWVuYWJsZS1zbWFsbGJ1aWxkLCB3aGljaCBicmVha3MgYSBidW5jaCBvZiBzdHVmZiAoZWcuIHBvc3RmaXgpCi1EQjZfQ09ORklHID89ICItLWVuYWJsZS1vX2RpcmVjdCAtLWRpc2FibGUtY3J5cHRvZ3JhcGh5IC0tZGlzYWJsZS1xdWV1ZSAtLWRpc2FibGUtcmVwbGljYXRpb24gLS1kaXNhYmxlLXZlcmlmeSAtLWRpc2FibGUtY29tcGF0MTg1IC0tZGlzYWJsZS1zcWwiCi0KLUVYVFJBX09FQ09ORiA9ICIke0RCNl9DT05GSUd9IC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1jeHggLS13aXRoLXN5c3Jvb3QiCi0KLSMgT3ZlcnJpZGUgdGhlIE1VVEVYIHNldHRpbmcgaGVyZSwgdGhlIFBPU0lYIGxpYnJhcnkgaXMKLSMgdGhlIGRlZmF1bHQgLSAiUE9TSVgvcHRocmVhZHMvbGlicmFyeSIuCi0jIERvbid0IGlnbm9yZSB0aGUgbmljZSBTV1AgaW5zdHJ1Y3Rpb24gb24gdGhlIEFSTToKLSMgVGhlc2UgZW5hYmxlIHRoZSBBUk0gYXNzZW1ibGVyIG11dGV4IGNvZGUKLUFSTV9NVVRFWCA9ICItLXdpdGgtbXV0ZXg9QVJNL2djYy1hc3NlbWJseSIKLU1VVEVYID0gIiIKLU1VVEVYX2FybSA9ICIke0FSTV9NVVRFWH0iCi1NVVRFWF9hcm1lYiA9ICIke0FSTV9NVVRFWH0iCi1FWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IgotRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wiCi0KLSMgQ2FuY2VsIHRoZSBzaXRlIHN0dWZmIC0gaXQncyBzZXQgZm9yIGRiMyBhbmQgZGVzdHJveXMgdGhlCi0jIGNvbmZpZ3VyZS4KLUNPTkZJR19TSVRFID0gIiIKLWRvX2NvbmZpZ3VyZSgpIHsKLQlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtTfQotCWV4cG9ydCBTVFJJUD0idHJ1ZSIKLQlvZV9ydW5jb25mCi19Ci0KLWRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLQlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyBcCi0JCSR7Qn0vbGlidG9vbAotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlta2RpciAtcCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MAotCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwLy4KLQltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAvLgotCWxuIC1zIGRiNjAvZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaAotCWxuIC1zIGRiNjAvZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oCi0KLQkjIFRoZSBkb2NzIGVuZCB1cCBpbiAvdXNyL2RvY3MgLSBub3QgcmlnaHQuCi0JaWYgdGVzdCAtZCAiJHtEfS8ke3ByZWZpeH0vZG9jcyIKLQl0aGVuCi0JCW1rZGlyIC1wICIke0R9LyR7ZGF0YWRpcn0iCi0JCXRlc3QgISAtZCAiJHtEfS8ke2RvY2Rpcn0iIHx8IHJtIC1yZiAiJHtEfS8ke2RvY2Rpcn0iCi0JCW12ICIke0R9LyR7cHJlZml4fS9kb2NzIiAiJHtEfS8ke2RvY2Rpcn0iCi0JZmkKLQotCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Ci19Ci0KLUlOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKLUlOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhZmJlOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzUuYmIKQEAgLTAsMCArMSwxMjIgQEAKKyMgVmVyc2lvbiA2IG9mIHRoZSBCZXJrZWxleSBEQiBmcm9tIE9yYWNsZSAoZm9ybWVybHkgU2xlZXB5Y2F0KQorIworIyBBdCBwcmVzZW50IHRoaXMgcGFja2FnZSBvbmx5IGluc3RhbGxzIHRoZSBEQiBjb2RlCisjIGl0c2VsZiAoc2hhcmVkIGxpYnJhcmllcywgLmEgaW4gdGhlIGRldiBwYWNrYWdlKSwKKyMgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycy4KKyMKKyMgVGhlIGhlYWRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aG9zZSBhcyB2MworIyBvZiB0aGUgREIsIG9ubHkgb25lIHZlcnNpb24gY2FuIGJlIHVzZWQgKmZvciBkZXYqCisjIGF0IG9uY2UgLSBEQjMgYW5kIERCNiBjYW4gYm90aCBiZSBpbnN0YWxsZWQgb24gdGhlCisjIHNhbWUgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUgaWYgcmVhbGx5IG5lY2Vzc2FyeS4KK1NFQ1RJT04gPSAibGlicyIKK1NVTU1BUlkgPSAiQmVya2VsZXkgRGF0YWJhc2UgdjYiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvZGF0YWJhc2UvZGF0YWJhc2UtdGVjaG5vbG9naWVzL2JlcmtlbGV5ZGIvb3ZlcnZpZXcvaW5kZXguaHRtbCIKK0xJQ0VOU0UgPSAiQUdQTC0zLjAiCitWSVJUVUFMX05BTUUgPz0gInZpcnR1YWwvZGIiCitSQ09ORkxJQ1RTXyR7UE59ID0gImRiMyIKKworUFIgPSAicjEiCisKKyMgTm90ZSwgd2hlbiB1cGdyYWRlZCB0byA2LjEueCwgYSBwYXRjaCBpbiBSUE0gd2lsbCBuZWVkIHRvIGJlIHJlbW92ZWQgdG8gYWN0aXZhdGUgZGIgNi4xIHN1cHBvcnQuCitTUkNfVVJJID0gImh0dHA6Ly9kaXN0ZmlsZXMuZ2VudG9vLm9yZy9kaXN0ZmlsZXMvZGItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1sZXQtbGliZGItNi4wLmxhLWRlcGVuZC1vc19tYXAubC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM2NWE0ZDNlOTMwYTExNmFiYWFmNjllZGZjNjk3ZjI1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI0NDIxYWZmYThhZTQzNmZlNDI3YWU0ZjVmMmQxNjM0ZGE4M2QzZDU1YTVhZDYzNTRhOThlZWVkYjgyNWRlNTUiCisKKyMgRXhjbHVkZSBOQyB2ZXJzaW9ucyB3aGljaCBsYWNrIEFFUyBlbmNyeXB0aW9uCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJkYi0oP1A8cHZlcj5cZCtcLlxkKyhcLlxkKyk/KS50YXIiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL3Byb2R1Y3RzL2JlcmtlbGV5ZGIvZG93bmxvYWRzL2luZGV4LTA4Mjk0NC5odG1sIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xZWM4YjBiMTdjYzMxNTEzZmUzNWFiMTA3MTZmODQ5MCIKKworIyBQdXQgdmlydHVhbC9kYiBpbiBhbnkgYXBwcm9wcmlhdGUgcHJvdmlkZXIgb2YgYQorIyByZWxhdGlvbmFsIGRhdGFiYXNlLCB1c2UgaXQgYXMgYSBkZXBlbmRlbmN5IGluCisjIHBsYWNlIG9mIGEgc3BlY2lmaWMgZGIgYW5kIHVzZToKKyMKKyMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIKKyMKKyMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGRiIGluIHRoZSBidWlsZCAoZGlzdHJvKSAuY29uZgorUFJPVklERVMgKz0gIiR7VklSVFVBTF9OQU1FfSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBUaGUgZXhlY3V0YWJsZXMgZ28gaW4gYSBzZXBhcmF0ZSBwYWNrYWdlIC0gdHlwaWNhbGx5IHRoZXJlCisjIGlzIG5vIG5lZWQgdG8gaW5zdGFsbCB0aGVzZSB1bmxlc3MgZG9pbmcgcmVhbCBkYXRhYmFzZQorIyBtYW5hZ2VtZW50IG9uIHRoZSBzeXN0ZW0uCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK1BBQ0tBR0VTID0rICIke1BOfS1jeHgiCitGSUxFU18ke1BOfS1jeHggPSAiJHtsaWJkaXJ9LypjeHgqc28iCisKKyMgVGhlIGRldiBwYWNrYWdlIGhhcyB0aGUgLnNvIGxpbmsgKGFzIGluIGRiMykgYW5kIHRoZSAuYSdzIC0KKyMgaXQgaXMgdGhlcmVmb3JlIGluY29tcGF0aWJsZSAoY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUKKyMgc2FtZSB0aW1lKSBhcyB0aGUgZGIzIHBhY2thZ2UKKyMgc29ydCBvdXQgdGhlIC5zbyBzaW5jZSB0aGV5IGRvIHZlcnNpb24gcHJpb3IgdG8gdGhlIC5zbworU09MSUJTID0gIi02Ki5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliZGIuc28gJHtsaWJkaXJ9L2xpYmRiX2N4eC5zbyIKKworI2NvbmZpZ3VyYXRpb24gLSBzZXQgaW4gbG9jYWwuY29uZiB0byBvdmVycmlkZQorIyBBbGwgdGhlIC0tZGlzYWJsZS0qIG9wdGlvbnMgcmVwbGFjZSAtLWVuYWJsZS1zbWFsbGJ1aWxkLCB3aGljaCBicmVha3MgYSBidW5jaCBvZiBzdHVmZiAoZWcuIHBvc3RmaXgpCitEQjZfQ09ORklHID89ICItLWVuYWJsZS1vX2RpcmVjdCAtLWRpc2FibGUtY3J5cHRvZ3JhcGh5IC0tZGlzYWJsZS1xdWV1ZSAtLWRpc2FibGUtcmVwbGljYXRpb24gLS1kaXNhYmxlLXZlcmlmeSAtLWRpc2FibGUtY29tcGF0MTg1IC0tZGlzYWJsZS1zcWwiCisKK0VYVFJBX09FQ09ORiA9ICIke0RCNl9DT05GSUd9IC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1jeHggLS13aXRoLXN5c3Jvb3QiCisKKyMgQ2FuY2VsIHRoZSBzaXRlIHN0dWZmIC0gaXQncyBzZXQgZm9yIGRiMyBhbmQgZGVzdHJveXMgdGhlIGNvbmZpZ3VyZS4KK0NPTkZJR19TSVRFID0gIiIKKworQVVUT1RPT0xTX1NDUklQVF9QQVRIID0gIiR7U30vZGlzdCIKKworZG9fY29uZmlndXJlKCkgeworCWNkICR7Qn0KKwlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtBVVRPVE9PTFNfU0NSSVBUX1BBVEh9CisJb2VfcnVuY29uZgorfQorCisjIE92ZXJyaWRlIHRoZSBNVVRFWCBzZXR0aW5nIGhlcmUsIHRoZSBQT1NJWCBsaWJyYXJ5IGlzCisjIHRoZSBkZWZhdWx0IC0gIlBPU0lYL3B0aHJlYWRzL2xpYnJhcnkiLgorIyBEb24ndCBpZ25vcmUgdGhlIG5pY2UgU1dQIGluc3RydWN0aW9uIG9uIHRoZSBBUk06CisjIFRoZXNlIGVuYWJsZSB0aGUgQVJNIGFzc2VtYmxlciBtdXRleCBjb2RlCitBUk1fTVVURVggPSAiLS13aXRoLW11dGV4PUFSTS9nY2MtYXNzZW1ibHkiCitNVVRFWCA9ICIiCitNVVRFWF9hcm0gPSAiJHtBUk1fTVVURVh9IgorTVVURVhfYXJtZWIgPSAiJHtBUk1fTVVURVh9IgorRVhUUkFfT0VDT05GICs9ICIke01VVEVYfSIKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wiCitFWFRSQV9PRU1BS0UgKz0gIlNUUklQPXRydWUiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwkjIFN0b3AgbGlidG9vbCBhZGRpbmcgUlBBVEhzCisJc2VkIC1pIC1lICdzfGhhcmRjb2RlX2ludG9fbGlicz15ZXN8aGFyZGNvZGVfaW50b19saWJzPW5vfCcgJHtCfS9saWJ0b29sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAvLgorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MC8uCisJbG4gLXMgZGI2MC9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oCisJbG4gLXMgZGI2MC9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmgKKworCSMgVGhlIGRvY3MgZW5kIHVwIGluIC91c3IvZG9jcyAtIG5vdCByaWdodC4KKwlpZiB0ZXN0IC1kICIke0R9LyR7cHJlZml4fS9kb2NzIgorCXRoZW4KKwkJbWtkaXIgLXAgIiR7RH0vJHtkYXRhZGlyfSIKKwkJdGVzdCAhIC1kICIke0R9LyR7ZG9jZGlyfSIgfHwgcm0gLXJmICIke0R9LyR7ZG9jZGlyfSIKKwkJbXYgIiR7RH0vJHtwcmVmaXh9L2RvY3MiICIke0R9LyR7ZG9jZGlyfSIKKwlmaQorCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworIyBsaWJkYiBpc24ndCB2ZXJzaW9uZWQgaW4gdGhlIHR5cGljYWwgbWFubmVyIChsaWJkYi02LjAuc28gaXMgdGhlIGZ1bGwgbGlicmFyeQorIyBuYW1lKSBzbyBza2lwIHRoZXNlIGNoZWNrcy4KK0lOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAibGF0ZXN0IGRiIGRvZXMgbm90IHdvcmsgd2l0aCBSUE0tNS54IGR1ZSB0byBjaGFuZ2VzIGluIGxvY2tpbmcgc2VtYW50aWNzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMWQ1YmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLVNVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgc3BlY2lmaWMgdG8gRGViaWFuIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJHUEx2MiAmIFNNQUlMX0dQTCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWYwMWE1MjAzZDUwNTEyZmM0ODMwYjQzMzJiNjk2YTlmIgotCi1TUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwMjA0VDA0MDUwMVovcG9vbC9tYWluL2QvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHoiCi0jIHRoZSBwYWNrYWdlIGlzIHRha2VuIGZyb20gc25hcHNob3RzLmRlYmlhbi5vcmc7IHRoYXQgc291cmNlIGlzIHN0YXRpYyBhbmQgZ29lcyBzdGFsZQotIyBzbyB3ZSBjaGVjayB0aGUgbGF0ZXN0IHVwc3RyZWFtIGZyb20gYSBkaXJlY3RvcnkgdGhhdCBkb2VzIGdldCB1cGRhdGVkCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvJHtCUE59LyIKLQotU1JDX1VSSVttZDVzdW1dID0gIjAwMTg2ZjUyN2IzNWUyY2VjZDRkYjU5M2M2ZDUxMmQwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyNjljYWNkNDBmNTJmMmZhNWQ1NjM2MzU3NzE0YTQ5ZTg1Mzg0NTljMTZkNzc3NzJlZmFhMjM3MTFmZTUzZDkiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgc2VkIC1pIC1lICdzOnRlbXBmaWxlLjEgd2hpY2guMTp3aGljaC4xOmcnICR7U30vTWFrZWZpbGUuYW0KLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KLSAgICAgICAgIyBEZWJpYW4gcGxhY2VzIHNvbWUgdXRpbHMgaW50byAke2Jhc2VfYmluZGlyfSBhcyBkb2VzIGJ1c3lib3gKLSAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KLSAgICAgICAgZm9yIGFwcCBpbiBydW4tcGFydHMgdGVtcGZpbGU7IGRvCi0gICAgICAgICAgICBtdiAke0R9JHtiaW5kaXJ9LyRhcHAgJHtEfSR7YmFzZV9iaW5kaXJ9LyRhcHAKLSAgICAgICAgZG9uZQotICAgIGZpCi19Ci0KLSMgTm90ZSB0aGF0IHdlIHBhY2thZ2UgdGhlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgbmFtZS4KLSMKLVBBQ0tBR0VTID0rICIke1BOfS1ydW4tcGFydHMiCi1GSUxFU18ke1BOfS1ydW4tcGFydHMgPSAiJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzLmRlYmlhbnV0aWxzIgotCi1SREVQRU5EU18ke1BOfSArPSAiJHtQTn0tcnVuLXBhcnRzIgotCi0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZPSIzMCIKLUFMVEVSTkFUSVZFXyR7UE59ID0gImFkZC1zaGVsbCBpbnN0YWxsa2VybmVsIHJlbW92ZS1zaGVsbCBzYXZlbG9nIHRlbXBmaWxlIHdoaWNoIgotQUxURVJOQVRJVkVfJHtQTn0tcnVuLXBhcnRzID0gInJ1bi1wYXJ0cyIKLQotQUxURVJOQVRJVkVfTElOS19OQU1FW2FkZC1zaGVsbF09IiR7c2JpbmRpcn0vYWRkLXNoZWxsIgotQUxURVJOQVRJVkVfTElOS19OQU1FW2luc3RhbGxrZXJuZWxdPSIke3NiaW5kaXJ9L2luc3RhbGxrZXJuZWwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbcmVtb3ZlLXNoZWxsXT0iJHtzYmluZGlyfS9yZW1vdmUtc2hlbGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbcnVuLXBhcnRzXT0iJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3NhdmVsb2ddPSIke2JpbmRpcn0vc2F2ZWxvZyIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVt0ZW1wZmlsZV09IiR7YmFzZV9iaW5kaXJ9L3RlbXBmaWxlIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3doaWNoXT0iJHtiaW5kaXJ9L3doaWNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2OWZkMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjguYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBzcGVjaWZpYyB0byBEZWJpYW4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyICYgU01BSUxfR1BMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9ZjAxYTUyMDNkNTA1MTJmYzQ4MzBiNDMzMmI2OTZhOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjA2MjlUMjI0NDA4Wi9wb29sL21haW4vZC8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiIKKyMgdGhlIHBhY2thZ2UgaXMgdGFrZW4gZnJvbSBzbmFwc2hvdHMuZGViaWFuLm9yZzsgdGhhdCBzb3VyY2UgaXMgc3RhdGljIGFuZCBnb2VzIHN0YWxlCisjIHNvIHdlIGNoZWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZnJvbSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgZ2V0IHVwZGF0ZWQKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC8ke0JQTn0vIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjZhMzdlNWZmMTdiZTQzMTMxOWJkMGI0M2U5YTQ2YjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWZhOTViYmU2YjZmZDNlZjNjMGM4MzhiMmQ3MjMyZjA5ZmFiZWZmNTkzY2E0YjU1ODNjZmZhNjc0ODU2N2VlMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgLWUgJ3M6dGVtcGZpbGUuMSB3aGljaC4xOndoaWNoLjE6ZycgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAjIERlYmlhbiBwbGFjZXMgc29tZSB1dGlscyBpbnRvICR7YmFzZV9iaW5kaXJ9IGFzIGRvZXMgYnVzeWJveAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICBmb3IgYXBwIGluIHJ1bi1wYXJ0cyB0ZW1wZmlsZTsgZG8KKyAgICAgICAgICAgIG12ICR7RH0ke2JpbmRpcn0vJGFwcCAke0R9JHtiYXNlX2JpbmRpcn0vJGFwcAorICAgICAgICBkb25lCisgICAgZmkKK30KKworIyBOb3RlIHRoYXQgd2UgcGFja2FnZSB0aGUgdXBkYXRlLWFsdGVybmF0aXZlcyBuYW1lLgorIworUEFDS0FHRVMgPSsgIiR7UE59LXJ1bi1wYXJ0cyIKK0ZJTEVTXyR7UE59LXJ1bi1wYXJ0cyA9ICIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMuZGViaWFudXRpbHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1ydW4tcGFydHMiCisKKworQUxURVJOQVRJVkVfUFJJT1JJVFk9IjMwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYWRkLXNoZWxsIGluc3RhbGxrZXJuZWwgcmVtb3ZlLXNoZWxsIHNhdmVsb2cgdGVtcGZpbGUgd2hpY2giCitBTFRFUk5BVElWRV8ke1BOfS1ydW4tcGFydHMgPSAicnVuLXBhcnRzIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYWRkLXNoZWxsXT0iJHtzYmluZGlyfS9hZGQtc2hlbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zdGFsbGtlcm5lbF09IiR7c2JpbmRpcn0vaW5zdGFsbGtlcm5lbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZW1vdmUtc2hlbGxdPSIke3NiaW5kaXJ9L3JlbW92ZS1zaGVsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtydW4tcGFydHNdPSIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2F2ZWxvZ109IiR7YmluZGlyfS9zYXZlbG9nIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3RlbXBmaWxlXT0iJHtiYXNlX2JpbmRpcn0vdGVtcGZpbGUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbd2hpY2hdPSIke2JpbmRpcn0vd2hpY2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50XzEuNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2VuY2hhbnQvZW5jaGFudF8xLjYuMC5iYgppbmRleCA5N2E0NzYxLi40NGViMmUzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50XzEuNi4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKQEAgLTcsNyArNyw3IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZGZjYmFiZjkxMzFkYzlhOTVmZWJlZjY3NTNhMjk1OGIgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2VuY2hhbnQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI5O21kNT04ZDg4MWNhYTFkMzc1MjM1NjdlMWQ4ZjcyNjY3NWExOCIKIAotREVQRU5EUyA9ICJhc3BlbGwgZ2xpYi0yLjAiCitERVBFTkRTID0gImdsaWItMi4wIgogCiBpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKIApAQCAtMTgsMTUgKzE4LDE3IEBACiBTUkNfVVJJW21kNXN1bV0gPSAiZGUxMTAxMWFmZjgwMWRjNjEwNDI4MjgwNDFmYjU5YzciCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmZhYzllN2JlN2U5NDI0YjJjNTU3MGQ4YWZmZTU2OGRiMzlmNzU3MmMxMGVkNDhkNGUxM2NkZGYwM2Y3MDk3ZiIKIAotRVhUUkFfT0VDT05GID0gIi0td2l0aC1hc3BlbGwtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAotCQktLWVuYWJsZS1hc3BlbGwgYnJfY3ZfYmlucmVsb2M9bm8gXAotCQkiCitQQUNLQUdFQ09ORklHID8/PSAiYXNwZWxsIgorUEFDS0FHRUNPTkZJR1thc3BlbGxdICA9ICIgLS13aXRoLWFzcGVsbC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSAgLS1lbmFibGUtYXNwZWxsLCAgLS1kaXNhYmxlLWFzcGVsbCwgIGFzcGVsbCwgIGFzcGVsbCIKK1BBQ0tBR0VDT05GSUdbaXNwZWxsXSAgPSAiIC0td2l0aC1pc3BlbGwtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gIC0tZW5hYmxlLWlzcGVsbCwgIC0tZGlzYWJsZS1pc3BlbGwsICBpc3BlbGwsICBpc3BlbGwiCitQQUNLQUdFQ09ORklHW3VzcGVsbF0gID0gIiAtLXdpdGgtdXNwZWxsLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9ICAtLWVuYWJsZS11c3BlbGwsICAtLWRpc2FibGUtdXNwZWxsLCAgdXNwZWxsLCAgdXNwZWxsIgorUEFDS0FHRUNPTkZJR1toc3BlbGxdICA9ICIgLS13aXRoLWhzcGVsbC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSAgLS1lbmFibGUtaHNwZWxsLCAgLS1kaXNhYmxlLWhzcGVsbCwgIGhzcGVsbCwgIGhzcGVsbCIKK1BBQ0tBR0VDT05GSUdbbXlzcGVsbF0gPSAiLS13aXRoLW15c3BlbGwtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gLS1lbmFibGUtbXlzcGVsbCwgLS1kaXNhYmxlLW15c3BlbGwsIG15c3BlbGwsIG15c3BlbGwiCisKK0VYVFJBX09FQ09ORiA9ICJicl9jdl9iaW5yZWxvYz1ubyIKIAogZXhwb3J0IENYWEZMQUdTICs9ICIgLUwke1NUQUdJTkdfTElCRElSfSAtbHN0ZGMrKyAiCiAKIEZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2xpYmRpcn0vKiR7U09MSUJTfSAke2RhdGFkaXJ9LyR7QlBOfSAke2xpYmRpcn0vJHtCUE59Lyouc28iCiBGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKntTT0xJQlNERVZ9ICR7bGliZGlyfS8ke0JQTn0vKi5sYSIKIEZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLmEiCi0KLVJERVBFTkRTXyR7UE59ICs9ICJhc3BlbGwiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmOGM1Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1TVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0MWRhMWI5ZmU0MmU2NDJjYmIyYzI0ZDVlMGM0ZDI0IgotCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNzJjODMyNjgwY2YwOTk5Y2FlZGJlNWIyNjVjOGMxYmQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGQ5MTJmNDRmMDVkMGIxNWE0YTVkOTZhNzZmODUyZTkwNWQwNTFiYjg4MDIyZmNkZmQ5OGI0M2JlMDkzZTNjMyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIGxpYl9wYWNrYWdlIHB0ZXN0Ci0KLSMgTmVlZGVkIGZvciBkYm0gcHl0aG9uIG1vZHVsZQotRVhUUkFfT0VDT05GID0gIi1lbmFibGUtbGliZ2RibS1jb21wYXQiCi0KLSMgU3RvcCBwcmVzZW5jZSBvZiBkYm0vbmJkbSBvbiB0aGUgaG9zdCBjb250YW1pbmF0aW5nIGJ1aWxkcwotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2xpYl9uZGJtX21haW49bm8gYWNfY3ZfbGliX2RibV9tYWluPW5vIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCi0gICAgIyB0aGVzZSBoZWFkZXJzCi0gICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9nZGJtCi0gICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKLSAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAotfQotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZGlmZnV0aWxzIgotCi1kb19jb21waWxlX3B0ZXN0KCkgewotICAgIG9lX3J1bm1ha2UgLUMgdGVzdHMgYnVpbGR0ZXN0cwotfQotCi1QQUNLQUdFUyA9KyAiJHtQTn0tY29tcGF0IFwKLSAgICAgICAgICAgICIKLUZJTEVTXyR7UE59LWNvbXBhdCA9ICIke2xpYmRpcn0vbGliZ2RibV9jb21wYXQke1NPTElCU30gXAotICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODAwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTIuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJLZXkvdmFsdWUgZGF0YWJhc2UgbGlicmFyeSB3aXRoIGV4dGVuc2libGUgaGFzaGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGJtLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDFkYTFiOWZlNDJlNjQyY2JiMmMyNGQ1ZTBjNGQyNCIKKworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2RibS9nZGJtLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjljZTk2ZmY0Yzk5ZTc0Mjk1ZWExOTA0MDkzMWM4ZmI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ5N2IyMTY2ZWU4NjdmZDZjYTVjMDIyZWZlZTgwNzAyZDZmMzBkZDY2YWYwZTAzZWQwOTIyODVjM2FmOWJjZWEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBsaWJfcGFja2FnZSBwdGVzdAorCisjIE5lZWRlZCBmb3IgZGJtIHB5dGhvbiBtb2R1bGUKK0VYVFJBX09FQ09ORiA9ICItZW5hYmxlLWxpYmdkYm0tY29tcGF0IgorCisjIFN0b3AgcHJlc2VuY2Ugb2YgZGJtL25iZG0gb24gdGhlIGhvc3QgY29udGFtaW5hdGluZyBidWlsZHMKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9saWJfbmRibV9tYWluPW5vIGFjX2N2X2xpYl9kYm1fbWFpbj1ubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYSBzeW1saW5rIHRvIG5kYm0uaCBhbmQgZ2RibS5oIGluIGluY2x1ZGUvZ2RibSB0byBsZXQgb3RoZXIgcGFja2FnZXMgdG8gZmluZAorICAgICMgdGhlc2UgaGVhZGVycworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vZ2RibQorICAgIGxuIC1zZiAuLi9uZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vbmRibS5oCisgICAgbG4gLXNmIC4uL2dkYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9nZGJtLmgKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImRpZmZ1dGlscyIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIC1DIHRlc3RzIGJ1aWxkdGVzdHMKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWNvbXBhdCBcCisgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1jb21wYXQgPSAiJHtsaWJkaXJ9L2xpYmdkYm1fY29tcGF0JHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9nbXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCmluZGV4IDYzYWVkMDUuLjI2ZmQ4ZWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtNSw3ICs1LDcgQEAKIHwgY29uZmlndXJlLmluOjIyNDA6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKIHwgTWFrZWZpbGUuYW06Mjg6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA1LzAyCiAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjAvMDAwMS1BcHBlbmQtdGhlLXVzZXItcHJvdmlkZWQtZmxhZ3MtdG8tdGhlLWF1dG8tZGV0ZWN0ZWQtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvMDAwMS1BcHBlbmQtdGhlLXVzZXItcHJvdmlkZWQtZmxhZ3MtdG8tdGhlLWF1dG8tZGV0ZWN0ZWQtLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMC8wMDAxLUFwcGVuZC10aGUtdXNlci1wcm92aWRlZC1mbGFncy10by10aGUtYXV0by1kZXRlY3RlZC0ucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4xLzAwMDEtQXBwZW5kLXRoZS11c2VyLXByb3ZpZGVkLWZsYWdzLXRvLXRoZS1hdXRvLWRldGVjdGVkLS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvMDAwMS1jb25maXVyZS5hYy1CZWxpZXZlLXRoZS1jZmxhZ3MtZnJvbS1lbnZpcm9ubWVudC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4xLzAwMDEtY29uZml1cmUuYWMtQmVsaWV2ZS10aGUtY2ZsYWdzLWZyb20tZW52aXJvbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1MzY3NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4xLzAwMDEtY29uZml1cmUuYWMtQmVsaWV2ZS10aGUtY2ZsYWdzLWZyb20tZW52aXJvbm1lbnQucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBhZTFhNGMzNzQxN2EzYmJiZjhlYTFjYWIxOTg5ODJiMGNhZDQ3ZTI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTIgQXVnIDIwMTYgMTc6MDg6MTMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZml1cmUuYWM6IEJlbGlldmUgdGhlIGNmbGFncyBmcm9tIGVudmlyb25tZW50CisKK0luIHNvbWUgdG9vbGNoYWlucyBlLmcuIE9wZW5FbWJlZGRlZCAtbWFyY2ggb3B0aW9ucworYXJlIHBhc3NlZCBvbiBjb21waWxlciBjbWRsaW5lLCBpdCBkb2VzIG5vdCB1c2UKK3RoZSBleHBlY3RlZCB0YXJnZXQgdHJpcGxldHMgdG8gbWFrZSB0aGVzZSBkZWNpc2lvbgorZHVyaW5nIGNvbmZpZ3VyZS4KKworU2Vjb25kbHksIGRvbnQgc2V0IGFybXY0IGZvciBtYXJjaCB3aGVuIG5vIHNlbGVjdGlvbgoraXMgbWFkZSwgc2luY2UgaXQgaXMgcGFzc2VkIGZyb20gY21kbGluZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbT0UtU3BlY2lmaWNdCisKKyBjb25maWd1cmUuYWMgfCAxMSAtLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggODU3ZWEzYi4uMzU5ZTkxOSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjA3LDE1ICs2MDcsNiBAQCBjYXNlICRob3N0IGluCisgICAgIEdNUF9JTkNMVURFX01QTihhcm0vYXJtLWRlZnMubTQpCisgICAgIENBTExJTkdfQ09OVkVOVElPTlNfT0JKUz0nYXJtMzJjYWxsLmxvIGFybTMyY2hlY2subG8nCisgCistICAgICMgVGhpcyBpcyBuZWVkZWQgZm9yIGNsYW5nLCB3aGljaCBpcyBub3QgY29udGVudCB3aXRoIGZsYWdzIGxpa2UgLW1mcHU9bmVvbgorLSAgICAjIGFsb25lLgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgKi0qLSplYWJpKQorLSAgICAgICAgZ2NjX2NmbGFnc19mcG1vZGU9Ii1tZmxvYXQtYWJpPXNvZnRmcCIgOzsKKy0gICAgICAqLSotKmVhYmloZikKKy0gICAgICAgIGdjY19jZmxhZ3NfZnBtb2RlPSItbWZsb2F0LWFiaT1oYXJkIiA7OworLSAgICBlc2FjCistCisgICAgICMgRklYTUU6IFdlIG1ha2UgbWFuZGF0b3J5IGNvbXBpbGVyIG9wdGlvbnMgb3B0aW9uYWwgaGVyZS4gIFdlIHNob3VsZAorICAgICAjIGVpdGhlciBlbmZvcmNlIHRoZW0sIG9yIG9yZ2FuaXNlIHRvIHN0cmlwIHBhdGhzIGFzIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICMgb3B0aW9ucyBmYWlsLgorQEAgLTY4Niw4ICs2NzcsNiBAQCBjYXNlICRob3N0IGluCisgCTs7CisgICAgICAgKikKKyAJcGF0aD0iYXJtIgorLQlnY2NfY2ZsYWdzX2FyY2g9Ii1tYXJjaD1hcm12NCIKKy0JR01QX0RFRklORV9SQVcoWyJkZWZpbmUoPE5PVEhVTUI+LDEpIl0pCisgCTs7CisgICAgIGVzYWMKKyAgICAgOzsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjAvYW1kNjQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMS9hbWQ2NC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjAvYW1kNjQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4xL2FtZDY0LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMC91c2UtaW5jbHVkZWRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4xL3VzZS1pbmNsdWRlZGlyLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMC91c2UtaW5jbHVkZWRpci5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvdXNlLWluY2x1ZGVkaXIucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzYuMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODI3ZjUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1yZXF1aXJlIGdtcC5pbmMKLQotTElDRU5TRSA9ICJHUEx2MisgfCBMR1BMdjMrIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0gICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKLSAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0iCi0KLVJFVklTSU9OID0gIiIKLVNSQ19VUkkgPSAiaHR0cHM6Ly9nbXBsaWIub3JnL2Rvd25sb2FkLyR7QlBOfS8ke0JQfSR7UkVWSVNJT059LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vYW1kNjQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdXNlLWluY2x1ZGVkaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1BcHBlbmQtdGhlLXVzZXItcHJvdmlkZWQtZmxhZ3MtdG8tdGhlLWF1dG8tZGV0ZWN0ZWQtLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiODZlZTZlNTRlYmZjNGE5MGI2NDNhNjVlNDAyYzQwNDgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDk4NDQ5YTk5NGVmZWJhNTI3ODg1YzEwNDA1OTkzNDI3OTk1ZDNmODZiODc2OGQ4Y2RmOGQ5ZGQ3YzZiNzNlOCIKLQotYWNwYXRocyA9ICIiCi0KLUVYVFJBX09FQ09ORiArPSAiIC0tZW5hYmxlLWN4eD1kZXRlY3QiCi0KLVBBQ0tBR0VTID0rICJsaWJnbXB4eCIKLUZJTEVTX2xpYmdtcHh4ID0gIiR7bGliZGlyfS9saWJnbXB4eCR7U09MSUJTfSIKLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgewotICAgICAgICBzZWQgLWkgInN8LS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH18fGciICR7RH0ke2luY2x1ZGVkaXJ9L2dtcC5oCi19Ci0KLVNTVEFURV9TQ0FOX0ZJTEVTICs9ICJnbXAuaCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDNjM2VmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjEuYmIKQEAgLTAsMCArMSwzOCBAQAorcmVxdWlyZSBnbXAuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgTEdQTHYzKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorIgorCitSRVZJU0lPTiA9ICIiCitTUkNfVVJJID0gImh0dHBzOi8vZ21wbGliLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0ke1JFVklTSU9OfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2FtZDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1pbmNsdWRlZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQXBwZW5kLXRoZS11c2VyLXByb3ZpZGVkLWZsYWdzLXRvLXRoZS1hdXRvLWRldGVjdGVkLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpdXJlLmFjLUJlbGlldmUtdGhlLWNmbGFncy1mcm9tLWVudmlyb25tZW50LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGMxNzVmODZlMTFlYjMyZDhiZjk4NzJjYTNhOGUxMWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTgxMDk4NjVmMjg5M2YxMzczYjBhOGVkNWZmNzQyOWRlOGRiNjk2ZmM0NTFiMTAzNmJkN2JkZjk1YmJlZmZkNiIKKworYWNwYXRocyA9ICIiCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZW5hYmxlLWN4eD1kZXRlY3QiCisKK1BBQ0tBR0VTID0rICJsaWJnbXB4eCIKK0ZJTEVTX2xpYmdtcHh4ID0gIiR7bGliZGlyfS9saWJnbXB4eCR7U09MSUJTfSIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICAgICBzZWQgLWkgInN8LS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH18fGciICR7RH0ke2luY2x1ZGVkaXJ9L2dtcC5oCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJnbXAuaCIKKworIyBEb2Vzbid0IGNvbXBpbGUgaW4gTUlQUzE2ZSBtb2RlIGR1ZSB0byB1c2Ugb2YgaGFuZC13cml0dGVuCisjIGFzc2VtYmx5CitNSVBTX0lOU1RSVUNUSU9OX1NFVCA9ICJtaXBzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMS40LjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMS40LjcuYmIKaW5kZXggYjRjY2JmZS4uNmNjZmZkNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYgpAQCAtOSw3ICs5LDcgQEAKIAogUFIgPSAicjkiCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ251cGcvZ251cGctJHtQVn0udGFyLmJ6MiBcCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9nbnVwZy9nbnVwZy0ke1BWfS50YXIuYnoyIFwKICAgICAgICAgICAgZmlsZTovL2xvbmctbG9uZy10aHVtYi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbWlwc19nY2M0LjQucGF0Y2ggXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjE4OWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLVNVTU1BUlkgPSAiR05VIFByaXZhY3kgR3VhcmQgLSBlbmNyeXB0aW9uIGFuZCBzaWduaW5nIHRvb2xzICgyLngpIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvIgotTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKLQotREVQRU5EUyA9ICJucHRoIGxpYmFzc3VhbiBsaWJrc2JhIHpsaWIgYnppcDIgcmVhZGxpbmUgbGliZ2NyeXB0IgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcGtnY29uZmlnCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdXRvZ2VuLnNoLWZpeC1maW5kLXZlcnNpb24tZm9yLWJldGEtY2hlY2tpbmcucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjg3MzMwMmM0NzVjNGM5MGJhZGI2N2RhYWM5MGViZDVkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3YjBmYjJjOGM1ZDQ3ZDdlYzkxNmQ0YTEwOTdjMGRkY2I5NGExMmJiMWMwYWM0MjRhZDg2YjFlZTMxNmI2MWEiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCBcCi0JCS0tZGlzYWJsZS1jY2lkLWRyaXZlciBcCi0JCS0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKLQkJLS13aXRoLWJ6aXAyPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKLSAgICAgICAgICAgICAgICAtLXdpdGgtcmVhZGxpbmU9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAotICAgICAgICAgICAgICAgIgotUlJFQ09NTUVORFNfJHtQTn0gPSAicGluZW50cnkiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5Ci0Jcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKLQlybSAtZiAke1N9L200L2xpYmFzc3Vhbi5tNAotCXJtIC1mICR7U30vbTQva3NiYS5tNAotCXJtIC1mICR7U30vbTQvbGliZ2NyeXB0Lm00Ci19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWxuIC1zZiBncGcyICR7RH0ke2JpbmRpcn0vZ3BnCi0JbG4gLXNmIGdwZ3YyICR7RH0ke2JpbmRpcn0vZ3BndgotfQotCi1SREVQRU5EU18ke1BOfSA9ICJnbnV0bHMiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW3NxbGl0ZTNdID0gIi0tZW5hYmxlLXNxbGl0ZSwgLS1kaXNhYmxlLXNxbGl0ZSwgc3FsaXRlMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuMTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTliOTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjE0LmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiR05VIFByaXZhY3kgR3VhcmQgLSBlbmNyeXB0aW9uIGFuZCBzaWduaW5nIHRvb2xzICgyLngpIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvIgorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKKworREVQRU5EUyA9ICJucHRoIGxpYmFzc3VhbiBsaWJrc2JhIHpsaWIgYnppcDIgcmVhZGxpbmUgbGliZ2NyeXB0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcGtnY29uZmlnCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dudXBnLm9yZy9kb3dubG9hZC9pbmRleC5odG1sIgorU1JDX1VSSSA9ICIke0dOVVBHX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvZ2VuLnNoLWZpeC1maW5kLXZlcnNpb24tZm9yLWJldGEtY2hlY2tpbmcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ2Y2YwYTQyZmZhZDZjMjYxNWNhZmQ2MzM1ODBiMmRlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk0NTBkZWU5NjkzYjZhMTJiZjBjMzc0ZGFlNzdiNjZjMzBmNjlmZjhmMzVmYzkyNjZhYjhkZDc2OTk4ZWJhNDIiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCBcCisJCS0tZGlzYWJsZS1jY2lkLWRyaXZlciBcCisJCS0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS13aXRoLWJ6aXAyPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcmVhZGxpbmU9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicGluZW50cnkiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKKwlybSAtZiAke1N9L200L2xpYmFzc3Vhbi5tNAorCXJtIC1mICR7U30vbTQva3NiYS5tNAorCXJtIC1mICR7U30vbTQvbGliZ2NyeXB0Lm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWxuIC1zZiBncGcyICR7RH0ke2JpbmRpcn0vZ3BnCisJbG4gLXNmIGdwZ3YyICR7RH0ke2JpbmRpcn0vZ3BndgorfQorCitSREVQRU5EU18ke1BOfSA9ICJnbnV0bHMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3NxbGl0ZTNdID0gIi0tZW5hYmxlLXNxbGl0ZSwgLS1kaXNhYmxlLXNxbGl0ZSwgc3FsaXRlMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYwppbmRleCBlN2M5MWViLi41MWI5ZDJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jCkBAIC04LDggKzgsOSBAQAogTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgogTElDRU5TRV8ke1BOfS1vcGVuc3NsID0gIkdQTHYzKyIKIAotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzEzOTFjOGUwYzFjZmU2ODA3N2U3ZmNlM2I1ODYyODMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9DT1BZSU5HLkxFU1NFUjttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCiAKIERFUEVORFMgPSAibmV0dGxlIGdtcCB2aXJ0dWFsL2xpYmljb252IgogREVQRU5EU19hcHBlbmRfbGliYy1tdXNsID0gIiBhcmdwLXN0YW5kYWxvbmUiCkBAIC0xOCwxMSArMTksMTAgQEAKIAogU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251dGxzLm9yZy9nY3J5cHQvZ251dGxzL3Yke1NIUlRfVkVSfS9nbnV0bHMtJHtQVn0udGFyLnh6IgogCi1pbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBwa2djb25maWcgZ2V0dGV4dCBsaWJfcGFja2FnZQoraW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWcgcGtnY29uZmlnIGdldHRleHQgbGliX3BhY2thZ2UgZ3RrLWRvYwogCiBQQUNLQUdFQ09ORklHID8/PSAibGliaWRuIHpsaWIiCiAKLVBBQ0tBR0VDT05GSUdbZG9jc10gPSAiLS1lbmFibGUtZG9jLC0tZGlzYWJsZS1kb2MiCiBQQUNLQUdFQ09ORklHW2xpYmlkbl0gPSAiLS13aXRoLWlkbiwtLXdpdGhvdXQtaWRuLGxpYmlkbiIKIFBBQ0tBR0VDT05GSUdbbGlidGFzbjFdID0gIi0td2l0aC1pbmNsdWRlZC1saWJ0YXNuMT1ubywtLXdpdGgtaW5jbHVkZWQtbGlidGFzbjEsbGlidGFzbjEiCiBQQUNLQUdFQ09ORklHW3AxMS1raXRdID0gIi0td2l0aC1wMTEta2l0LC0td2l0aG91dC1wMTEta2l0LHAxMS1raXQiCkBAIC0zMCw3ICszMCw3IEBACiBQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIiCiAKIEVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0tZGlzYWJsZS1jcnl3cmFwIFwKKyAgICAtLWVuYWJsZS1kb2MgXAogICAgIC0tZGlzYWJsZS1saWJkYW5lIFwKICAgICAtLWRpc2FibGUtZ3VpbGUgXAogICAgIC0tZGlzYWJsZS1ycGF0aCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy8wMDAxLVVzZS1jb3JyZWN0LWluY2x1ZGUtZGlyLXdpdGgtbWluaXRhc24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy8wMDAxLVVzZS1jb3JyZWN0LWluY2x1ZGUtZGlyLXdpdGgtbWluaXRhc24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkZDdjZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLzAwMDEtVXNlLWNvcnJlY3QtaW5jbHVkZS1kaXItd2l0aC1taW5pdGFzbi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDI2NTFiMDg0NzdmNDJkZDdhMDVlYTdkNmRmNDEwZmIyYzQ2ZGU0ZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAzMSBBdWcgMjAxNiAxMTowNDowNiArMDMwMAorU3ViamVjdDogW1BBVENIXSBVc2UgY29ycmVjdCBpbmNsdWRlIGRpciB3aXRoIG1pbml0YXNuCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1RoaXMgYWxsb3dzIGNvbXBpbGluZ8KgY2VydHRvb2wtY2ZnIHdpdGhvdXQgbGlidGFzbiBoZWFkZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRsYWIuY29tL2dudXRscy9nbnV0bHMvbWVyZ2VfcmVxdWVzdHMvNTRdCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgc3JjL01ha2VmaWxlLmFtIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDE4MmYzYTUuLmNmNjUzODggMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTE0Niw2ICsxNDYsNyBAQCBsaWJjbWRfY2xpX2RlYnVnX2xhX1NPVVJDRVMgPSBjbGktZGVidWctYXJncy5kZWYgY2xpLWRlYnVnLWFyZ3MuYyBjbGktZGVidWctYXJncworIENPTU1PTl9MSUJTID0gJChMSUJPUFRTKSAkKExUTElCSU5UTCkKKyBpZiBFTkFCTEVfTUlOSVRBU04xCisgQ09NTU9OX0xJQlMgKz0gLi4vbGliL21pbml0YXNuMS9saWJtaW5pdGFzbjEubGEgLi4vZ2wvbGliZ251LmxhIAorK0FNX0NQUEZMQUdTICs9IC1JJCh0b3Bfc3JjZGlyKS9saWIvbWluaXRhc24xCisgZWxzZQorIENPTU1PTl9MSUJTICs9ICQoTElCVEFTTjFfTElCUykKKyBlbmRpZgorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9DVkUtMjAxNi03NDQ0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvQ1ZFLTIwMTYtNzQ0NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTViZTVhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvQ1ZFLTIwMTYtNzQ0NC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitDVkU6IENWRS0yMDE2LTc0NDQKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKK1Vwc3RyZWFtIGNvbW1pdCBmb2xsb3dzOgorCisKK0Zyb20gOTY0NjMyZjM3ZGZkZmI5MTRlYmM1ZTQ5ZGI0ZmEyOWFmMzViMWRlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zIDxubWF2QGdudXRscy5vcmc+CitEYXRlOiBTYXQsIDI3IEF1ZyAyMDE2IDE3OjAwOjIyICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIG9jc3A6IGNvcnJlY3RlZCB0aGUgY29tcGFyaXNvbiBvZiB0aGUgc2VyaWFsIHNpemUgaW4gT0NTUCByZXNwb25zZQorCitQcmV2aW91c2x5IHRoZSBPQ1NQIGNlcnRpZmljYXRlIGNoZWNrIHdvdWxkbid0IHZlcmlmeSB0aGUgc2VyaWFsIGxlbmd0aAorYW5kIGNvdWxkIHN1Y2NlZWQgaW4gY2FzZXMgaXQgc2hvdWxkbid0LgorCitSZXBvcnRlZCBieSBTdGVmYW4gQnVlaGxlci4KKy0tLQorIGxpYi94NTA5L29jc3AuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi94NTA5L29jc3AuYyBiL2xpYi94NTA5L29jc3AuYworaW5kZXggOTJkYjliNi4uODE4MWYyZSAxMDA2NDQKKy0tLSBhL2xpYi94NTA5L29jc3AuYworKysrIGIvbGliL3g1MDkvb2NzcC5jCitAQCAtMTMxOCw2ICsxMzE4LDcgQEAgZ251dGxzX29jc3BfcmVzcF9jaGVja19jcnQoZ251dGxzX29jc3BfcmVzcF90IHJlc3AsCisgCQlnbnV0bHNfYXNzZXJ0KCk7CisgCQlnb3RvIGNsZWFudXA7CisgCX0KKysJY3NlcmlhbC5zaXplID0gdDsKKyAKKyAJaWYgKHJzZXJpYWwuc2l6ZSAhPSBjc2VyaWFsLnNpemUKKyAJICAgIHx8IG1lbWNtcChjc2VyaWFsLmRhdGEsIHJzZXJpYWwuZGF0YSwgcnNlcmlhbC5zaXplKSAhPSAwKSB7CistLQorbGliZ2l0MiAwLjI0LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy40LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjQuOS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY1MmY2Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjQuOS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotcmVxdWlyZSBnbnV0bHMuaW5jCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1maXgtc2VkLWNvbW1hbmQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjFiM2I2ZDU1ZDBlMmI2ZDAxYTU0ZjUzMTI5ZjFkYTliIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4NTk0ZmFkYmEzM2Q0NTBmNzk2ZWM2OTUyNmNmMmJjZTZmZjliYzNkYzkwZmJkN2JmMzhkYzM2MDFmNTdjM2YiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuNS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZGJiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjUuMy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGdudXRscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLWNvcnJlY3QtaW5jbHVkZS1kaXItd2l0aC1taW5pdGFzbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtNzQ0NC5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YzJjN2Y0MGRkZjUyOTMzZWUzY2E0NzRjYjhjYjYzYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MmM0YmM5OTlhMTBhMWI5NTI5OWViZWZhZWVhODMzM2YxOWQ4YTk4ZDk1N2EzNWI1ZWFlNzQ4ODFiZGIxZmVmIgorCisjIHg4NiAudGV4dCByZWxvY2F0aW9ucyBzaG91bGQgYmUgZml4ZWQgZnJvbSAzLjUuNSBvbndhcmRzCitJTlNBTkVfU0tJUF8ke1BOfV9hcHBlbmRfeDg2ID0gIiB0ZXh0cmVsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDAxLWNvbmZpZ3VyZS1kb24tdC1hZGQtV2Vycm9yLXRvLWJ1aWxkLWZsYWdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDAxLWNvbmZpZ3VyZS1kb24tdC1hZGQtV2Vycm9yLXRvLWJ1aWxkLWZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjQzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDEtY29uZmlndXJlLWRvbi10LWFkZC1XZXJyb3ItdG8tYnVpbGQtZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA5MDhlOWZhNGMxMTcyZjA5ZTBlNDU0MjBhNDAzZGMyNWVkMGE0NjZjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgPG5tYXZAcmVkaGF0LmNvbT4KK0RhdGU6IFR1ZSwgMjYgSnVsIDIwMTYgMDg6NDU6MzMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIGNvbmZpZ3VyZTogZG9uJ3QgYWRkIC1XZXJyb3IgdG8gYnVpbGQgZmxhZ3MKKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgY29uZmlndXJlLmFjIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA3YTE0ZTA0Li4wNjZmNWZlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03MCw4ICs3MCw2IEBAIEFDX0FSR19FTkFCTEUoW2djYy13YXJuaW5nc10sCisgKQorIAorIGlmIHRlc3QgIiRnbF9nY2Nfd2FybmluZ3MiID0geWVzOyB0aGVuCistICBnbF9XQVJOX0FERChbLVdlcnJvcl0sIFtXRVJST1JfQ0ZMQUdTXSkKKy0KKyAgIG53PSIkbncgLVdzeXN0ZW0taGVhZGVycyIgICAgICAgICAjIERvbid0IGxldCBzeXN0ZW0gaGVhZGVycyB0cmlnZ2VyIHdhcm5pbmdzCisgICBudz0iJG53IC1XYysrLWNvbXBhdCIgICAgICAgICAgICAgIyBXZSBkb24ndCBjYXJlIHN0cm9uZ2x5IGFib3V0IEMrKyBjb21waWxlcnMKKyAgIG53PSIkbncgLVd0cmFkaXRpb25hbCIgICAgICAgICAgICAjIFdhcm5zIG9uICNlbGlmIHdoaWNoIHdlIHVzZSBvZnRlbgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDItQVNOLnktY29ycmVjdGVkLWNvbXBpbGVyLXdhcm5pbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDItQVNOLnktY29ycmVjdGVkLWNvbXBpbGVyLXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzNjQyMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvMDAwMi1BU04ueS1jb3JyZWN0ZWQtY29tcGlsZXItd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDM1NDJjMDE2MThmY2RlODNiMjk2NDBlYTJjNjBiZmQyNjI5YWUwYjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcyA8bm1hdkByZWRoYXQuY29tPgorRGF0ZTogVHVlLCAyNiBKdWwgMjAxNiAwODo0Nzo0OSArMDIwMAorU3ViamVjdDogW1BBVENIIDIvNF0gQVNOLnk6IGNvcnJlY3RlZCBjb21waWxlciB3YXJuaW5nCisKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworIGxpYi9BU04xLnkgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvQVNOMS55IGIvbGliL0FTTjEueQoraW5kZXggNzMxNDE1ZC4uNmRiNjM4ZiAxMDA2NDQKKy0tLSBhL2xpYi9BU04xLnkKKysrKyBiL2xpYi9BU04xLnkKK0BAIC02MjEsNyArNjIxLDcgQEAgX2FzbjFfY3JlYXRlX2Vycm9yRGVzY3JpcHRpb24gKGludCBlcnJvciwgY2hhciAqZXJyb3JfZGVzYykKKyAgICAgY2FzZSBBU04xX05BTUVfVE9PX0xPTkc6CisgICAgICAgc25wcmludGYgKGVycm9yX2Rlc2MsIEFTTjFfTUFYX0VSUk9SX0RFU0NSSVBUSU9OX1NJWkUsCisgICAgICAgICAgICAgICAgICIlczoldTogbmFtZSB0b28gbG9uZyAobW9yZSB0aGFuICV1IGNoYXJhY3RlcnMpIiwgZmlsZV9uYW1lLAorLSAgICAgICAgICAgICAgICBsaW5lX251bWJlciwgQVNOMV9NQVhfTkFNRV9TSVpFKTsKKysgICAgICAgICAgICAgICAgbGluZV9udW1iZXIsICh1bnNpZ25lZClBU04xX01BWF9OQU1FX1NJWkUpOworICAgICAgIGJyZWFrOworICAgICBjYXNlIEFTTjFfSURFTlRJRklFUl9OT1RfRk9VTkQ6CisgICAgICAgc25wcmludGYgKGVycm9yX2Rlc2MsIEFTTjFfTUFYX0VSUk9SX0RFU0NSSVBUSU9OX1NJWkUsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvMDAwMy1wYXJzZXJfYXV4LWNvcnJlY3RlZC1wb3RlbnRpYWwtbnVsbC1wb2ludGVyLWRlcmVmZXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDAzLXBhcnNlcl9hdXgtY29ycmVjdGVkLXBvdGVudGlhbC1udWxsLXBvaW50ZXItZGVyZWZlcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyMDE0MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvMDAwMy1wYXJzZXJfYXV4LWNvcnJlY3RlZC1wb3RlbnRpYWwtbnVsbC1wb2ludGVyLWRlcmVmZXJlLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gYzg5MDNhYTI3ZGM5ZGUxZDllZmVlZDlkMWY3ODk0ZjEwMTk1NDhmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zIDxubWF2QHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDI2IEp1bCAyMDE2IDA4OjQ5OjE1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBwYXJzZXJfYXV4OiBjb3JyZWN0ZWQgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMKKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgbGliL3BhcnNlcl9hdXguYyB8IDEyICsrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcGFyc2VyX2F1eC5jIGIvbGliL3BhcnNlcl9hdXguYworaW5kZXggMjI4NWIyMC4uMTJlZTE2ZiAxMDA2NDQKKy0tLSBhL2xpYi9wYXJzZXJfYXV4LmMKKysrKyBiL2xpYi9wYXJzZXJfYXV4LmMKK0BAIC02MzcsNyArNjM3LDcgQEAgX2FzbjFfY2hhbmdlX2ludGVnZXJfdmFsdWUgKGFzbjFfbm9kZSBub2RlKQorIAkJICAgICAgcCA9IE5VTEw7CisgCQkgICAgICBicmVhazsKKyAJCSAgICB9CistCQkgIGlmIChwLT5yaWdodCkKKysJCSAgaWYgKHAgJiYgcC0+cmlnaHQpCisgCQkgICAgeworIAkJICAgICAgcCA9IHAtPnJpZ2h0OworIAkJICAgICAgYnJlYWs7CitAQCAtNzUzLDcgKzc1Myw3IEBAIF9hc24xX2V4cGFuZF9vYmplY3RfaWQgKGFzbjFfbm9kZSBub2RlKQorIAorICAgICAgIGlmIChtb3ZlID09IFJJR0hUKQorIAl7CistCSAgaWYgKHAtPnJpZ2h0KQorKwkgIGlmIChwICYmIHAtPnJpZ2h0KQorIAkgICAgcCA9IHAtPnJpZ2h0OworIAkgIGVsc2UKKyAJICAgIG1vdmUgPSBVUDsKK0BAIC04MjgsNyArODI4LDcgQEAgX2FzbjFfZXhwYW5kX29iamVjdF9pZCAoYXNuMV9ub2RlIG5vZGUpCisgCisgICAgICAgaWYgKG1vdmUgPT0gUklHSFQpCisgCXsKKy0JICBpZiAocC0+cmlnaHQpCisrCSAgaWYgKHAgJiYgcC0+cmlnaHQpCisgCSAgICBwID0gcC0+cmlnaHQ7CisgCSAgZWxzZQorIAkgICAgbW92ZSA9IFVQOworQEAgLTg5OCw3ICs4OTgsNyBAQCBfYXNuMV90eXBlX3NldF9jb25maWcgKGFzbjFfbm9kZSBub2RlKQorIAorICAgICAgIGlmIChtb3ZlID09IFJJR0hUKQorIAl7CistCSAgaWYgKHAtPnJpZ2h0KQorKwkgIGlmIChwICYmIHAtPnJpZ2h0KQorIAkgICAgcCA9IHAtPnJpZ2h0OworIAkgIGVsc2UKKyAJICAgIG1vdmUgPSBVUDsKK0BAIC0xMDA3LDcgKzEwMDcsNyBAQCBfYXNuMV9jaGVja19pZGVudGlmaWVyIChhc24xX25vZGUgbm9kZSkKKyAJCSAgcCA9IE5VTEw7CisgCQkgIGJyZWFrOworIAkJfQorLQkgICAgICBpZiAocC0+cmlnaHQpCisrCSAgICAgIGlmIChwICYmIHAtPnJpZ2h0KQorIAkJeworIAkJICBwID0gcC0+cmlnaHQ7CisgCQkgIGJyZWFrOworQEAgLTEwNjcsNyArMTA2Nyw3IEBAIF9hc24xX3NldF9kZWZhdWx0X3RhZyAoYXNuMV9ub2RlIG5vZGUpCisgCQkgIHAgPSBOVUxMOworIAkJICBicmVhazsKKyAJCX0KKy0JICAgICAgaWYgKHAtPnJpZ2h0KQorKwkgICAgICBpZiAocCAmJiBwLT5yaWdodCkKKyAJCXsKKyAJCSAgcCA9IHAtPnJpZ2h0OworIAkJICBicmVhazsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDA0LXRvb2xzLWVsaW1pbmF0ZWQtY29tcGlsZXItd2FybmluZ3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDQtdG9vbHMtZWxpbWluYXRlZC1jb21waWxlci13YXJuaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmRhMGU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDA0LXRvb2xzLWVsaW1pbmF0ZWQtY29tcGlsZXItd2FybmluZ3MucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSBkNjQ3YmIyZmExYmQyODhhNmFjMDJjMTgzMThmM2NiYTJhMzRjM2EwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgPG5tYXZAcmVkaGF0LmNvbT4KK0RhdGU6IFR1ZSwgMjYgSnVsIDIwMTYgMDg6NTA6MjQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIHRvb2xzOiBlbGltaW5hdGVkIGNvbXBpbGVyIHdhcm5pbmdzCisKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworIHNyYy9hc24xQ29kaW5nLmMgICB8IDIgKy0KKyBzcmMvYXNuMURlY29kaW5nLmMgfCAyICstCisgc3JjL2FzbjFQYXJzZXIuYyAgIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2FzbjFDb2RpbmcuYyBiL3NyYy9hc24xQ29kaW5nLmMKK2luZGV4IGQ0ZGY1OTMuLmI1MTZiZmUgMTAwNjQ0CistLS0gYS9zcmMvYXNuMUNvZGluZy5jCisrKysgYi9zcmMvYXNuMUNvZGluZy5jCitAQCAtMTg4LDcgKzE4OCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWRlZmF1bHQ6CisgCSAgZnByaW50ZiAoc3RkZXJyLAorIAkJICAgImFzbjFDb2Rpbmc6ID8/IGdldG9wdCByZXR1cm5lZCBjaGFyYWN0ZXIgY29kZSBPeCV4ID8/XG4iLAorLQkJICAgb3B0aW9uX3Jlc3VsdCk7CisrCQkgICAodW5zaWduZWQpb3B0aW9uX3Jlc3VsdCk7CisgCX0KKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9hc24xRGVjb2RpbmcuYyBiL3NyYy9hc24xRGVjb2RpbmcuYworaW5kZXggMDc4OTYzZS4uMjBmOTFhYyAxMDA2NDQKKy0tLSBhL3NyYy9hc24xRGVjb2RpbmcuYworKysrIGIvc3JjL2FzbjFEZWNvZGluZy5jCitAQCAtMTMxLDcgKzEzMSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWRlZmF1bHQ6CisgCSAgZnByaW50ZiAoc3RkZXJyLAorIAkJICAgImFzbjFEZWNvZGluZzogPz8gZ2V0b3B0IHJldHVybmVkIGNoYXJhY3RlciBjb2RlIE94JXggPz9cbiIsCistCQkgICBvcHRpb25fcmVzdWx0KTsKKysJCSAgICh1bnNpZ25lZClvcHRpb25fcmVzdWx0KTsKKyAJfQorICAgICB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL2FzbjFQYXJzZXIuYyBiL3NyYy9hc24xUGFyc2VyLmMKK2luZGV4IDdhM2FlNjcuLjQ3NWJmYzkgMTAwNjQ0CistLS0gYS9zcmMvYXNuMVBhcnNlci5jCisrKysgYi9zcmMvYXNuMVBhcnNlci5jCitAQCAtMTM5LDcgKzEzOSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWRlZmF1bHQ6CisgCSAgZnByaW50ZiAoc3RkZXJyLAorIAkJICAgImFzbjFQYXJzZXI6ID8/IGdldG9wdCByZXR1cm5lZCBjaGFyYWN0ZXIgY29kZSBPeCV4ID8/XG4iLAorLQkJICAgb3B0aW9uX3Jlc3VsdCk7CisrCQkgICAodW5zaWduZWQpb3B0aW9uX3Jlc3VsdCk7CisgCX0KKyAKKyAgICAgfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC43LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjA4NTY5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBBU04uMSBhbmQgREVSIG1hbmlwdWxhdGlvbiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0YXNuMS8iCi0KLUxJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgotTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgotTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2VuZGxpbmU9ODttZDU9YzM4MDNhM2U4Y2E1YWI1ZWIxZTU5MTJmYWE0MDUzNTEiCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0YXNuMS9saWJ0YXNuMS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxMmQxMGNhNGFlMGEzYjk1ZjdhYTA2YTA3NmRhMzllYyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhNDA3ODBkYzkzZmM2ZDgxOTE3MDI0MGU4ZWNlMjUzNTIwNThhODVmZDFkMjM0N2NlMGYxNDM2NjdkOGYxMWM5IgotCi1pbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBsaWJfcGFja2FnZQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmZjllYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC45LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgQVNOLjEgYW5kIERFUiBtYW5pcHVsYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidGFzbjEvIgorCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tYmluID0gIkdQTHYzKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRTtlbmRsaW5lPTg7bWQ1PWMzODAzYTNlOGNhNWFiNWViMWU1OTEyZmFhNDA1MzUxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGlidGFzbjEvbGlidGFzbjEtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLWRvbi10LWFkZC1XZXJyb3ItdG8tYnVpbGQtZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1BU04ueS1jb3JyZWN0ZWQtY29tcGlsZXItd2FybmluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLXBhcnNlcl9hdXgtY29ycmVjdGVkLXBvdGVudGlhbC1udWxsLXBvaW50ZXItZGVyZWZlcmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC10b29scy1lbGltaW5hdGVkLWNvbXBpbGVyLXdhcm5pbmdzLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzAxOGQwZjQ2NmEzMmI2NmRkZTQxYmIxMjJlNmNhYjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGY2ZjdhOGZkNjkxYWMyYjgzMDdjOGNhMzY1YmFkNzExZGI2MDdkNGFkNTk2NmY2OTM4YTlkMmVjZDY1YzkyMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWcgbGliX3BhY2thZ2UgZ3RrLWRvYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjYuMC5iYgppbmRleCA4NmVkYTIzLi5hMmQwNTg3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWVfMS42LjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNi4wLmJiCkBAIC05LDcgKzksOCBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dwZ21lLmguaW47ZW5kbGluZT0yMzttZDU9NTAyN2VlYzkzYTk5NjI3MmE5YTBhNmE4NmNmMzU3NzUgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2VuZ2luZS5oO2VuZGxpbmU9MjI7bWQ1PTRiNmQ4YmEzMTNkOWI1NjRjYzRkNGNmYjE2NDBhZjlkIgogCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2dwZ21lLyR7QlB9LnRhci5iejIgXAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9ncGdtZS8ke0JQfS50YXIuYnoyIFwKICAgICAgICAgICAgZmlsZTovL2dwZ21lLnBjIFwKICAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCiAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXJlbGVhc2UtNTYtMS1mbGFncGFyc2VyLWZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L2ljdS1yZWxlYXNlLTU2LTEtZmxhZ3BhcnNlci1maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MTlkODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXJlbGVhc2UtNTYtMS1mbGFncGFyc2VyLWZpeC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLWljdTogVGlja2V0ICMxMTk1OTogcGtnZGF0YSBkaWVzIHdoZW4gY29tcGlsZWQgd2l0aCBsb3RzJ28nZmxhZ3MKLQotU2VlOiBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy90aWNrZXQvMTE5NTkKLQotVGhlIHBhdGNoIGF2b2lkcyBwcmVtYXR1cmUgZmFpbHVyZSB3aGljaCByZXN1bHRzIGluIGEgc2VnZmF1bHQuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgb2YgcjM4MDgxCi1TaWduZWQtb2ZmLWJ5OiBNaWtlIENyb3dlIDxtYWNAbWNyb3dlLmNvbT4KLQotSW5kZXg6IHNvdXJjZS90b29scy90b29sdXRpbC9mbGFncGFyc2VyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBzb3VyY2UvdG9vbHMvdG9vbHV0aWwvZmxhZ3BhcnNlci5jCShyZXZpc2lvbiAzODA0NikKLSsrKyBzb3VyY2UvdG9vbHMvdG9vbHV0aWwvZmxhZ3BhcnNlci5jCSh3b3JraW5nIGNvcHkpCi1AQCAtOTYsOCArOTYsOCBAQAotICAgICB1cHJ2X2ZyZWUoYnVmZmVyKTsKLSAKLSAgICAgVF9GaWxlU3RyZWFtX2Nsb3NlKGYpOwotLSAgICAKLS0gICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkgewotKwotKyAgICBpZiAoVV9GQUlMVVJFKCpzdGF0dXMpICYmICpzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpIHsKLSAgICAgICAgIHJldHVybiAtMTsKLSAgICAgfQotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTYuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU2LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMGRlMTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTYuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLXJlcXVpcmUgaWN1LmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9saWNlbnNlLmh0bWw7bWQ1PTY0ZWZmNGFhZGZmNGQxMDRkNmQ0MzdjNGZkZTBlNmQ3IgotCi1kZWYgaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCk6Ci0gICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKLSAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KLQotSUNVX1BWID0gIiR7QGljdV9kb3dubG9hZF92ZXJzaW9uKGQpfSIKLQotIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjA0ODYvCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgotCi1CQVNFX1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmljdS1wcm9qZWN0Lm9yZy9maWxlcy9pY3U0Yy8ke1BWfS9pY3U0Yy0ke0lDVV9QVn0tc3JjLnRneiIKLVNSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKLSAgICAgICAgICAgZmlsZTovL2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtaW5zdGFsbC1tYW54LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ljdS1yZWxlYXNlLTU2LTEtZmxhZ3BhcnNlci1maXgucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoIFwKLSAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiYzRhMmQ3MWZmNTZhZWM1ZWJmYWIyYTNmMDU5YmU5OWQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2E2NGU5MTA1YzczNGRjZjYzMWMwYjNlZDYwNDA0NTMxYmNlNmMwZjVhNjRiZmUxYTY0MDJhNGNjMjMxNDgxNiIKLQotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuaWN1LXByb2plY3Qub3JnL2ZpbGVzL2ljdTRjLyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU3LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81Ny4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYzJiODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81Ny4xLmJiCkBAIC0wLDAgKzEsMjggQEAKK3JlcXVpcmUgaWN1LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9MSUNFTlNFO21kNT03ODdkM2IzNzg2NzQ0NWMxY2RkNmY2MTY3YmQwZTM0NyIKKworZGVmIGljdV9kb3dubG9hZF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCisKK0lDVV9QViA9ICIke0BpY3VfZG93bmxvYWRfdmVyc2lvbihkKX0iCisKKyMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwNDg2LworQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKKworQkFTRV9TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5pY3UtcHJvamVjdC5vcmcvZmlsZXMvaWN1NGMvJHtQVn0vaWN1NGMtJHtJQ1VfUFZ9LXNyYy50Z3oiCitTUkNfVVJJID0gIiR7QkFTRV9TUkNfVVJJfSBcCisgICAgICAgICAgIGZpbGU6Ly9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWluc3RhbGwtbWFueC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLUxERkxBR1NJQ1VEVC1mb3ItTGludXgucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NzY3MzQ4MDYwMjZhNGVmOGJkZDE3OTM3Yzg4OThiOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjhjNjdjYjY1OTQ5YjFlNzgwOGYyMzU5ZjJiODBmNzIyNjk3MDQ4ZTkwZTdjZmMzODJlYzFmZTIyOWU5NTgxIgorCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5pY3UtcHJvamVjdC5vcmcvZmlsZXMvaWN1NGMvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy42NS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pc28tY29kZXMvaXNvLWNvZGVzXzMuNjUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNzhkYzQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy42NS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVNVTU1BUlkgPSAiSVNPIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGN1cnJlbmN5LCBzY3JpcHQgY29kZXMgYW5kIHRoZWlyIHRyYW5zbGF0aW9ucyIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKLQotU1JDX1VSSSA9ICJodHRwczovL3BrZy1pc29jb2Rlcy5hbGlvdGguZGViaWFuLm9yZy9kb3dubG9hZHMvaXNvLWNvZGVzLSR7UFZ9LnRhci54eiIKLVNSQ19VUklbbWQ1c3VtXSA9ICI4OTBhMDhkNGY5NjI3NDhlMGEwNzU4YThhYTQ3MTg5NiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzRkZTUxOTNjODQ4OWVlZGVhZjY1MDk0NTdhOWIxMzQ3NjcwMjM4NmFlMWYzZWQ0ZjM5MWEzNDlkNjMwMzIwIgotCi0jIGluaGVyaXQgZ2V0dGV4dCBjYW5ub3QgYmUgdXNlZCwgYmVjYXVzZSBpdCBhZGRzIGdldHRleHQtbmF0aXZlIHRvIEJBU0VERVBFTkRTIHdoaWNoCi0jIGFyZSBpbmhpYml0ZWQgYnkgYWxsYXJjaAotREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSIKLQotaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scwotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS94bWwvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy43MC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pc28tY29kZXMvaXNvLWNvZGVzXzMuNzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkZDhiNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pc28tY29kZXMvaXNvLWNvZGVzXzMuNzAuYmIKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJJU08gbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY3VycmVuY3ksIHNjcmlwdCBjb2RlcyBhbmQgdGhlaXIgdHJhbnNsYXRpb25zIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitTUkNfVVJJID0gImh0dHBzOi8vcGtnLWlzb2NvZGVzLmFsaW90aC5kZWJpYW4ub3JnL2Rvd25sb2Fkcy9pc28tY29kZXMtJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gImM2MWY4ZjAyZWVjZjk3OGQzNzEwZmY1OTRlNDNjYTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQxZTJmYmFlYzJlZDU3ZTc2N2I5NGYxNzVkMGRjZDMxYjYyN2FlYjIzYjc1Y2Q2MDQ2MDVhNmZiNjEwOWQ2MWYiCisKKyMgaW5oZXJpdCBnZXR0ZXh0IGNhbm5vdCBiZSB1c2VkLCBiZWNhdXNlIGl0IGFkZHMgZ2V0dGV4dC1uYXRpdmUgdG8gQkFTRURFUEVORFMgd2hpY2gKKyMgYXJlIGluaGliaXRlZCBieSBhbGxhcmNoCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbC8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjQuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuNC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzc2ZDYzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuNC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJJUEMgbGlicmFyeSB1c2VkIGJ5IEdudVBHIGFuZCBHUEdNRSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliYXNzdWFuLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgotCi1MSUNFTlNFID0gIkdQTHYzKyAmIExHUEx2Mi4xKyIKLUxJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgotTElDRU5TRV8ke1BOfS1kb2MgPSAiR1BMdjMrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4uYztlbmRsaW5lPTIwO21kNT0wZjQ2NTU0NDE4MzQwNTA1NWVjMTc5ODY5ZmM1YjViYSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYXNzdWFuLWRlZnMuaDtlbmRsaW5lPTIwO21kNT0yMGNkNTU1MzUyNjBjYTE3NzllZGFlNWM3YjgwYjIxZSIKLQotREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliYXNzdWFuL2xpYmFzc3Vhbi0ke1BWfS50YXIuYnoyIFwKLQkgICBmaWxlOi8vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjcwMTUxOTk1YzIzMzBhZTEyNjFjMGE3Y2EzNGNmNDc4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiMDZkYzgxMzgwYjc0YmYxYjY0ZDU4NDliZTVjMDQwOWEzMzZmM2I0YzQ1ZjIwYWM2ODhlODZkMWI1YmNiMjAiCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliYXNzdWFuLWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQotCXJtIC1mICR7U30vbTQvKi5tNAotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuNC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzOTE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuNC4zLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiSVBDIGxpYnJhcnkgdXNlZCBieSBHbnVQRyBhbmQgR1BHTUUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmFzc3Vhbi8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKKworTElDRU5TRSA9ICJHUEx2MysgJiBMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tZG9jID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYXNzdWFuLmM7ZW5kbGluZT0yMDttZDU9MGY0NjU1NDQxODM0MDUwNTVlYzE3OTg2OWZjNWI1YmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Fzc3Vhbi1kZWZzLmg7ZW5kbGluZT0yMDttZDU9MjBjZDU1NTM1MjYwY2ExNzc5ZWRhZTVjN2I4MGIyMWUiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKK1NSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9L2xpYmFzc3Vhbi9saWJhc3N1YW4tJHtQVn0udGFyLmJ6MiBcCisJICAgZmlsZTovL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZTAxYTdjNzJkM2U1ZDE1NDQ4MTIzMDY2OGU2ZWI1YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMjg0M2EzYmRiMjU2ZjU5YmU0OTg0MmFiZjI0ZGE3NjcwMDM1NDI5M2EwNjZkODJhZGU4MTM0YmI1YWEyYjcxIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYmFzc3Vhbi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200LyoubTQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiNzBkOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGF0b21pYyBpbnRlZ2VyIG9wZXJhdGlvbnMiCi1IT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vaXZtYWkvbGliYXRvbWljX29wcy8iCi1TRUNUSU9OID0gIm9wdGlvbmFsIgotUFJPVklERVMgKz0gImxpYmF0b21pY3Mtb3BzIgotTElDRU5TRSA9ICJHUEx2MiAmIE1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9MSUNFTlNJTkcudHh0O21kNT1lMDBkZDVjOGFjMDNhMTRjNWFlNTIyNWE0NTI1ZmEyZCBcCi0JCSAgICIKLQotU1JDX1VSSSA9ICJcCi0JaHR0cDovL3d3dy5pdm1haXNvZnQuY29tL19iaW4vYXRvbWljX29wcy9saWJhdG9taWNfb3BzLSR7UFZ9LnRhci5neiBcCi0JZmlsZTovLzAwMDEtQWRkLWluaXRpYWwtbmlvczItYXJjaGl0ZWN0dXJlLXN1cHBvcnQucGF0Y2ggXAotCSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjFkNjUzODYwNGIzMTRkMmZjY2RmODY5MTVlNWMwODU3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0ZmE2MTVmNjI5OTI1NDdiY2JkYTU2MjI2MGUyOGI1MDRiYzRjMDZlMmY5ODVmMjY3ZjNhZGUzMDMwNGI1ZGQiCi0KLVMgPSAiJHtXT1JLRElSfS9saWJhdG9taWNfb3BzLSR7UFZ9IgotCi1BTExPV19FTVBUWV8ke1BOfSA9ICIxIgotCi1BUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgdGhvc2UgY29udGFpbiBvbmx5IGRvY3MsIG5vdCBuZWNlc3NhcnkgZm9yIG5vdy4KLQlpbnN0YWxsIC1tIDA3NTUgLWQgJHtEfSR7ZG9jZGlyfQotCW12ICR7RH0ke2RhdGFkaXJ9L2xpYmF0b21pY19vcHMgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwYzFiOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjQuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGF0b21pYyBpbnRlZ2VyIG9wZXJhdGlvbnMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vaXZtYWkvbGliYXRvbWljX29wcy8iCitTRUNUSU9OID0gIm9wdGlvbmFsIgorUFJPVklERVMgKz0gImxpYmF0b21pY3Mtb3BzIgorTElDRU5TRSA9ICJHUEx2MiAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9MSUNFTlNJTkcudHh0O21kNT1lMDBkZDVjOGFjMDNhMTRjNWFlNTIyNWE0NTI1ZmEyZCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJcCisJaHR0cDovL3d3dy5pdm1haXNvZnQuY29tL19iaW4vYXRvbWljX29wcy9saWJhdG9taWNfb3BzLSR7UFZ9LnRhci5neiBcCisJZmlsZTovLzAwMDEtQWRkLWluaXRpYWwtbmlvczItYXJjaGl0ZWN0dXJlLXN1cHBvcnQucGF0Y2ggXAorCSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQyNmQ4MDRiYWFlMTJjMzcyOTY3YTZkMTgzZTI1YWYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJmMjEwYTYwMGRkMWJlY2JmNzkzNmRkMjkxNGNmNWY1ZDMzNTYwNDY5MDQ4NDhkY2ZkMjdkMGM4YjEyYjZmOGYiCisKK1MgPSAiJHtXT1JLRElSfS9saWJhdG9taWNfb3BzLSR7UFZ9IgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgdGhvc2UgY29udGFpbiBvbmx5IGRvY3MsIG5vdCBuZWNlc3NhcnkgZm9yIG5vdy4KKwlpbnN0YWxsIC1tIDA3NTUgLWQgJHtEfSR7ZG9jZGlyfQorCW12ICR7RH0ke2RhdGFkaXJ9L2xpYmF0b21pY19vcHMgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC44LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjguMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzNTM4Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjguMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEzIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0jIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCi0KLVNVTU1BUlkgPSAiTGlicmFyeSBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBmcm9tIEJTRCBzeXN0ZW1zIgotREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHVzZWZ1bCBmdW5jdGlvbnMgY29tbW9ubHkgZm91bmQgb24gQlNEIHN5c3RlbXMsIFwKLSAgICAgICAgICAgICAgIGFuZCBsYWNraW5nIG9uIG90aGVycyBsaWtlIEdOVSBzeXN0ZW1zLCB0aHVzIG1ha2luZyBpdCBlYXNpZXIgdG8gcG9ydCBcCi0gICAgICAgICAgICAgICBwcm9qZWN0cyB3aXRoIHN0cm9uZyBCU0Qgb3JpZ2lucywgd2l0aG91dCBuZWVkaW5nIHRvIGVtYmVkIHRoZSBzYW1lIFwKLSAgICAgICAgICAgICAgIGNvZGUgb3ZlciBhbmQgb3ZlciBhZ2FpbiBvbiBlYWNoIHByb2plY3QuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy93aWtpLyIKLSMgVGhlcmUgc2VlbXMgdG8gYmUgbW9yZSBsaWNlbnNlcyB1c2VkIGluIHRoZSBjb2RlLCBJIGRvbid0IHRoaW5rIHdlIHdhbnQgdG8gbGlzdCB0aGVtIGFsbCBoZXJlLCBjb21wbGV0ZSBsaXN0OgotIyBPRSBAIH4vcHJvamVjdHMvbGliYnNkICQgZ3JlcCBeTGljZW5zZTogQ09QWUlORyAgfCBzb3J0Ci0jIExpY2Vuc2U6IEJTRC0yLWNsYXVzZQotIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UKLSMgTGljZW5zZTogQlNELTItY2xhdXNlLU5ldEJTRAotIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UtYXV0aG9yCi0jIExpY2Vuc2U6IEJTRC0yLWNsYXVzZS12ZXJiYXRpbQotIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UKLSMgTGljZW5zZTogQlNELTMtY2xhdXNlCi0jIExpY2Vuc2U6IEJTRC0zLWNsYXVzZQotIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UtUGV0ZXItV2VtbQotIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UtUmVnZW50cwotIyBMaWNlbnNlOiBCU0QtNC1jbGF1c2UtQ2hyaXN0b3BoZXItRy1EZW1ldHJpb3UKLSMgTGljZW5zZTogQlNELTQtY2xhdXNlLU5pZWxzLVByb3ZvcwotIyBMaWNlbnNlOiBCU0QtNS1jbGF1c2UtUGV0ZXItV2VtbQotIyBMaWNlbnNlOiBCZWVyd2FyZQotIyBMaWNlbnNlOiBFeHBhdAotIyBMaWNlbnNlOiBJU0MKLSMgTGljZW5zZTogSVNDLU9yaWdpbmFsCi0jIExpY2Vuc2U6IHB1YmxpYy1kb21haW4KLSMgTGljZW5zZTogcHVibGljLWRvbWFpbi1Db2xpbi1QbHVtYgotTElDRU5TRSA9ICJCU0QtNC1DbGF1c2UgJiBJU0MgJiBQRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0NWVjMDVhMjE3ZDhmODc5ZjI5Y2ZjNWY4MzA4NGJlIgotU0VDVElPTiA9ICJsaWJzIgotCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjZGVlMjUyY2NmZjk3OGI1MGFkMjMzNjI3OGM1MDZjOSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiMmY2NDRjYWU5NGE2ZTJmZTEwOTQ0OWMyMGFkNzlhMGY2ZWU0ZmFlYzIyMDViMDdlZWZhMDAyMDU2NWUyNTBhIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIxMjFlZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuOC4zLmJiCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiTGlicmFyeSBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBmcm9tIEJTRCBzeXN0ZW1zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHVzZWZ1bCBmdW5jdGlvbnMgY29tbW9ubHkgZm91bmQgb24gQlNEIHN5c3RlbXMsIFwKKyAgICAgICAgICAgICAgIGFuZCBsYWNraW5nIG9uIG90aGVycyBsaWtlIEdOVSBzeXN0ZW1zLCB0aHVzIG1ha2luZyBpdCBlYXNpZXIgdG8gcG9ydCBcCisgICAgICAgICAgICAgICBwcm9qZWN0cyB3aXRoIHN0cm9uZyBCU0Qgb3JpZ2lucywgd2l0aG91dCBuZWVkaW5nIHRvIGVtYmVkIHRoZSBzYW1lIFwKKyAgICAgICAgICAgICAgIGNvZGUgb3ZlciBhbmQgb3ZlciBhZ2FpbiBvbiBlYWNoIHByb2plY3QuIgorCitIT01FUEFHRSA9ICJodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy93aWtpLyIKKyMgVGhlcmUgc2VlbXMgdG8gYmUgbW9yZSBsaWNlbnNlcyB1c2VkIGluIHRoZSBjb2RlLCBJIGRvbid0IHRoaW5rIHdlIHdhbnQgdG8gbGlzdCB0aGVtIGFsbCBoZXJlLCBjb21wbGV0ZSBsaXN0OgorIyBPRSBAIH4vcHJvamVjdHMvbGliYnNkICQgZ3JlcCBeTGljZW5zZTogQ09QWUlORyAgfCBzb3J0CisjIExpY2Vuc2U6IEJTRC0yLWNsYXVzZQorIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UKKyMgTGljZW5zZTogQlNELTItY2xhdXNlLU5ldEJTRAorIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UtYXV0aG9yCisjIExpY2Vuc2U6IEJTRC0yLWNsYXVzZS12ZXJiYXRpbQorIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UKKyMgTGljZW5zZTogQlNELTMtY2xhdXNlCisjIExpY2Vuc2U6IEJTRC0zLWNsYXVzZQorIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UtUGV0ZXItV2VtbQorIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UtUmVnZW50cworIyBMaWNlbnNlOiBCU0QtNC1jbGF1c2UtQ2hyaXN0b3BoZXItRy1EZW1ldHJpb3UKKyMgTGljZW5zZTogQlNELTQtY2xhdXNlLU5pZWxzLVByb3ZvcworIyBMaWNlbnNlOiBCU0QtNS1jbGF1c2UtUGV0ZXItV2VtbQorIyBMaWNlbnNlOiBCZWVyd2FyZQorIyBMaWNlbnNlOiBFeHBhdAorIyBMaWNlbnNlOiBJU0MKKyMgTGljZW5zZTogSVNDLU9yaWdpbmFsCisjIExpY2Vuc2U6IHB1YmxpYy1kb21haW4KKyMgTGljZW5zZTogcHVibGljLWRvbWFpbi1Db2xpbi1QbHVtYgorTElDRU5TRSA9ICJCU0QtNC1DbGF1c2UgJiBJU0MgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBiOWM4OWQ4NjE5MTViODY2NTViOTZlNWUzMmZhMmFhIgorU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlOTM1YzFiYjZjYzk4YTRhNDNjYjFkYTIyNzk1NDkzYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MzRiNjM0ZjRkZmQ4NjViNjQ4MjY1MGI4ZjUyMmM3MGFlNjVjNDYzNTI5ZGU4YmU5MDdiNTNjODljM2EzNGE4IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MTU0NjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1TVU1NQVJZID0gIkFuIGFsdGVybmF0ZSBwb3NpeCBjYXBhYmlsaXRpZXMgbGlicmFyeSIKLURFU0NSSVBUSU9OID0gIlRoZSBsaWJjYXAtbmcgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBtYWtlIHByb2dyYW1taW5nIFwKLXdpdGggUE9TSVggY2FwYWJpbGl0aWVzIG11Y2ggZWFzaWVyIHRoYW4gdGhlIHRyYWRpdGlvbmFsIGxpYmNhcCBsaWJyYXJ5LiIKLUhPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvbGliY2FwLW5nIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0JCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWUzZWRhMDFkOTgxNWY4ZDI0YWFlMmRiZDg5YjY4YjA2IgotCi1TUkNfVVJJID0gImh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9zZ3J1YmIvbGliY2FwLW5nL2xpYmNhcC1uZy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcHl0aG9uLnBhdGNoIgotCi1pbmhlcml0IGxpYl9wYWNrYWdlIGF1dG90b29scyBweXRob25uYXRpdmUKLQotU1JDX1VSSVttZDVzdW1dID0gIjNkN2QxMjZiMjllMjg2OWEwMjU3YzE3YzhiMGQ5YjJlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxNTU0OWNlMzliMzMzZjZiNzhiYWVlMGMwYjRlZjE4YmM3MjZjNmJmMWNjYTEyM2RmZDg5ZGQ5NjNmNmQwNmIiCi0KLURFUEVORFMgKz0gInN3aWctbmF0aXZlIHB5dGhvbiIKLQotRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtcHl0aG9uMyIKLQotRVhUUkFfT0VNQUtFICs9ICJQWUxJQlZFUj0ncHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBQWUlOQz0nJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWUxJQlZFUn0nIgotCi1QQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgotCi1GSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgTW92aW5nIGxpYmNhcC1uZyB0byBiYXNlX2xpYmRpcgotCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgotCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9LwotCQltdiAtZiAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfS8KLQkJcmVscGF0aD0ke0Bvcy5wYXRoLnJlbHBhdGgoIiR7YmFzZV9saWJkaXJ9IiwgIiR7bGliZGlyfSIpfQotCQlsbiAtc2YgJHtyZWxwYXRofS9saWJjYXAtbmcuc28uMC4wLjAgJHtEfSR7bGliZGlyfS9saWJjYXAtbmcuc28KLQlmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTgzMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjguYmIKQEAgLTAsMCArMSwzNyBAQAorU1VNTUFSWSA9ICJBbiBhbHRlcm5hdGUgcG9zaXggY2FwYWJpbGl0aWVzIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgbGliY2FwLW5nIGxpYnJhcnkgaXMgaW50ZW5kZWQgdG8gbWFrZSBwcm9ncmFtbWluZyBcCit3aXRoIFBPU0lYIGNhcGFiaWxpdGllcyBtdWNoIGVhc2llciB0aGFuIHRoZSB0cmFkaXRpb25hbCBsaWJjYXAgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWNvZGUuY29tL3Byb2plY3RzL2xpYmNhcC1uZyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1lM2VkYTAxZDk4MTVmOGQyNGFhZTJkYmQ4OWI2OGIwNiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vc2dydWJiL2xpYmNhcC1uZy9saWJjYXAtbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi5wYXRjaCIKKworaW5oZXJpdCBsaWJfcGFja2FnZSBhdXRvdG9vbHMgcHl0aG9uM25hdGl2ZQorCitTUkNfVVJJW21kNXN1bV0gPSAiMGRlY2U5NjY0NGJkNzk4MDIwZTE3MGZiZjc2NjM4MDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzIxYWY5OTc0NDVjZDQxMDdhNTVkMzg2Zjk1NWM1ZWE2ZjZlOTZlYWQ2OTNlOTE1MTI3N2MwYWI1Zjk3ZDA1ZiIKKworREVQRU5EUyArPSAic3dpZy1uYXRpdmUgcHl0aG9uMyIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uIC0td2l0aC1weXRob24zIgorRVhUUkFfT0VNQUtFICs9ICJQWUxJQlZFUj0ncHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JHtQWVRIT05fQUJJfScgUFlJTkM9JyR7U1RBR0lOR19JTkNESVJ9LyR7UFlMSUJWRVJ9JyIKKworUEFDS0FHRVMgKz0gIiR7UE59LXB5dGhvbiIKKworRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIE1vdmluZyBsaWJjYXAtbmcgdG8gYmFzZV9saWJkaXIKKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfS8ke2Jhc2VfbGliZGlyfS8KKwkJbXYgLWYgJHtEfSR7bGliZGlyfS9saWJjYXAtbmcuc28uKiAke0R9JHtiYXNlX2xpYmRpcn0vCisJCXJlbHBhdGg9JHtAb3MucGF0aC5yZWxwYXRoKCIke2Jhc2VfbGliZGlyfSIsICIke2xpYmRpcn0iKX0KKwkJbG4gLXNmICR7cmVscGF0aH0vbGliY2FwLW5nLnNvLjAuMC4wICR7RH0ke2xpYmRpcn0vbGliY2FwLW5nLnNvCisJZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvZmlsZXMvMDAwMS1lbnN1cmUtdGhlLVhBVFRSX05BTUVfQ0FQUy1pcy1kZWZpbmVkLXdoZW4taXQtaXMtdXNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9maWxlcy8wMDAxLWVuc3VyZS10aGUtWEFUVFJfTkFNRV9DQVBTLWlzLWRlZmluZWQtd2hlbi1pdC1pcy11c2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNzcxYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvZmlsZXMvMDAwMS1lbnN1cmUtdGhlLVhBVFRSX05BTUVfQ0FQUy1pcy1kZWZpbmVkLXdoZW4taXQtaXMtdXNlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Vuc3VyZSB0aGUgWEFUVFJfTkFNRV9DQVBTIGlzIGRlZmluZWQgd2hlbiBpdCBpcyB1c2VkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitWRlNfQ0FQX1UzMiBjYW4gbm90IGVuc3VyZSB0aGF0IFhBVFRSX05BTUVfQ0FQUyBpcyBkZWZpbmVkLCBhbmQgZmFpbGVkIHRvIGJ1aWxkCitsaWJjYXAtbmF0aXZlIGluIG9sZCByZWxlYXNlLCBsaWtlIENlbnRPUyByZWxlYXNlIDYuNyAoRmluYWwpLCB3aXRoIHRoZSBibG93CitlcnJvcjoKKyAgICAgY2FwX2ZpbGUuYzogSW4gZnVuY3Rpb24g4oCYY2FwX2dldF9mZOKAmToKKyAgICAgY2FwX2ZpbGUuYzoxOTk6IGVycm9yOiDigJhYQVRUUl9OQU1FX0NBUFPigJkgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisgICAgIGNhcF9maWxlLmM6MTk5OiBlcnJvcjogKEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkgb25jZQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJjYXAvY2FwX2ZpbGUuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYmNhcC9jYXBfZmlsZS5jIGIvbGliY2FwL2NhcF9maWxlLmMKK2luZGV4IDQwNzU2ZWEuLmUyN2NhODAgMTAwNjQ0CistLS0gYS9saWJjYXAvY2FwX2ZpbGUuYworKysrIGIvbGliY2FwL2NhcF9maWxlLmMKK0BAIC0yNSw3ICsyNSw3IEBAIGV4dGVybiBpbnQgZnJlbW92ZXhhdHRyKGludCwgY29uc3QgY2hhciAqKTsKKyAKKyAjaW5jbHVkZSAibGliY2FwLmgiCisgCistI2lmZGVmIFZGU19DQVBfVTMyCisrI2lmIGRlZmluZWQgKFZGU19DQVBfVTMyKSAmJiBkZWZpbmVkIChYQVRUUl9OQU1FX0NBUFMpCisgCisgI2lmIFZGU19DQVBfVTMyICE9IF9fQ0FQX0JMS1MKKyAjIGVycm9yIFZGUyByZXByZXNlbnRhdGlvbiBvZiBjYXBhYmlsaXRpZXMgaXMgbm90IHRoZSBzYW1lIHNpemUgYXMga2VybmVsCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzAxMDE5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgZm9yIGdldHRpbmcvc2V0dGluZyBQT1NJWC4xZSBjYXBhYmlsaXRpZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2Z1bGx5Y2FwYWJsZS8iCi0KLSMgbm8gc3BlY2lmaWMgR1BMIHZlcnNpb24gcmVxdWlyZWQKLUxJQ0VOU0UgPSAiQlNEIHwgR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlO21kNT0zZjg0ZmQ2ZjI5ZDQ1M2E1NjUxNGNiN2U0ZWFkMjVmMSIKLQotREVQRU5EUyA9ICJob3N0cGVybC1ydW50aW1lLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2xpYnMvc2VjdXJpdHkvbGludXgtcHJpdnMvJHtCUE59Mi8ke0JQTn0tJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZDQzYWI5ZjY4MDQzNWE3ZmZmMzViNGFjZThkNDViODAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2VlNDU2OGY3OGRjODUxZDcyNmZjOTNmMjVmNGVkOTFjYzIyM2IxZmU4MjU5ZGFhNGE3NzE1OGQxNzRlNmM2NSIKLQotaW5oZXJpdCBsaWJfcGFja2FnZQotCi0jIGRvIE5PVCBwYXNzIHRhcmdldCBjZmxhZ3MgdG8gaG9zdCBjb21waWxhdGlvbnMKLSMKLWRvX2NvbmZpZ3VyZSgpIHsKLQkjIGxpYmNhcCB1c2VzIDo9IGZvciBjb21waWxlcnMsIGZvcnR1bmF0ZWx5LCBpdCBnaXZlcyB1cyBhIGhpbnQKLQkjIG9uIHdoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggPz0KLQlzZWQgLWUgJ3MsOj0sPz0sZycgLWkgTWFrZS5SdWxlcwotCXNlZCAtZSAncyxeQlVJTERfQ0ZMQUdTID89ICQoLipDRkxBR1MpLEJVSUxEX0NGTEFHUyA6PSAkKEJVSUxEX0NGTEFHUyksJyAtaSBNYWtlLlJ1bGVzCi0KLQkjIGRpc2FibGUgZ3BlcmYgZGV0ZWN0aW9uCi0Jc2VkIC1lICcvc2hlbGwgZ3BlcmYvY2lmZXEgKCx5ZXMpJyAtaSBsaWJjYXAvTWFrZWZpbGUKLX0KLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAnYXR0cicsICcnLCBkKX0iCi1QQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gIiIKLQotUEFDS0FHRUNPTkZJR1thdHRyXSA9ICJMSUJBVFRSPXllcyxMSUJBVFRSPW5vLGF0dHIiCi1QQUNLQUdFQ09ORklHW3BhbV0gPSAiUEFNX0NBUD15ZXMsUEFNX0NBUD1ubyxsaWJwYW0iCi0KLUVYVFJBX09FTUFLRSA9ICIgXAotICBJTkRFTlQ9ICBcCi0gIGxpYj0ke0Bvcy5wYXRoLmJhc2VuYW1lKCcke2xpYmRpcn0nKX0gXAotICBSQUlTRV9TRVRGQ0FQPW5vIFwKLSAgRFlOQU1JQz15ZXMgXAotIgotCi1FWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgU1lTVEVNX0hFQURFUlM9JHtTVEFHSU5HX0lOQ0RJUn0iCi0KLSMgdGhlc2UgYXJlIHByZXNlbnQgaW4gdGhlIGxpYmNhcCBkZWZhdWx0cywgc28gaW5jbHVkZSBpbiBvdXIgQ0ZMQUdTIHRvbwotQ0ZMQUdTICs9ICItRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIKLQotZG9fY29tcGlsZSgpIHsKLQlvZV9ydW5tYWtlICR7RVhUUkFfT0VDT05GfQotfQotCi1kb19pbnN0YWxsKCkgewotCW9lX3J1bm1ha2UgaW5zdGFsbCBcCi0JCSR7RVhUUkFfT0VDT05GfSBcCi0JCURFU1RESVI9IiR7RH0iIFwKLQkJcHJlZml4PSIke3ByZWZpeH0iIFwKLQkJU0JJTkRJUj0iJHtEfSR7c2JpbmRpcn0iCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgTW92ZSB0aGUgbGlicmFyeSB0byBiYXNlX2xpYmRpcgotCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9Ci0JaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCi0JCW12ICR7RH0ke2xpYmRpcn0vbGliY2FwKiAke0R9JHtiYXNlX2xpYmRpcn0KLSAgICAgICAgICAgICAgICBpZiBbIC1kICR7RH0ke2xpYmRpcn0vc2VjdXJpdHkgXTsgdGhlbgotCQkJbXYgJHtEfSR7bGliZGlyfS9zZWN1cml0eSAke0R9JHtiYXNlX2xpYmRpcn0KLQkJZmkKLQlmaQotfQotCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9Lyouc28iCi0KLSMgcGFtIGZpbGVzCi1GSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlZDRiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjUuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBnZXR0aW5nL3NldHRpbmcgUE9TSVguMWUgY2FwYWJpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9mdWxseWNhcGFibGUvIgorCisjIG5vIHNwZWNpZmljIEdQTCB2ZXJzaW9uIHJlcXVpcmVkCitMSUNFTlNFID0gIkJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZTttZDU9M2Y4NGZkNmYyOWQ0NTNhNTY1MTRjYjdlNGVhZDI1ZjEiCisKK0RFUEVORFMgPSAiaG9zdHBlcmwtcnVudGltZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9saWJzL3NlY3VyaXR5L2xpbnV4LXByaXZzLyR7QlBOfTIvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWVuc3VyZS10aGUtWEFUVFJfTkFNRV9DQVBTLWlzLWRlZmluZWQtd2hlbi1pdC1pcy11c2UucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjY2NjZiODM5ZTVkNDZjMmFkMzNmYzhhYTJjZWI1Zjc3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5M2M4YWM1MWU5ODNlZTY3ODIwNTU3MWVmMjcyNDM5ZDgzYWZlNjJkZDhlNDI0ZWExNGFkOTc5MGJjMzUxNjIiCisKK2luaGVyaXQgbGliX3BhY2thZ2UKKworIyBkbyBOT1QgcGFzcyB0YXJnZXQgY2ZsYWdzIHRvIGhvc3QgY29tcGlsYXRpb25zCisjCitkb19jb25maWd1cmUoKSB7CisJIyBsaWJjYXAgdXNlcyA6PSBmb3IgY29tcGlsZXJzLCBmb3J0dW5hdGVseSwgaXQgZ2l2ZXMgdXMgYSBoaW50CisJIyBvbiB3aGF0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoID89CisJc2VkIC1lICdzLDo9LD89LGcnIC1pIE1ha2UuUnVsZXMKKwlzZWQgLWUgJ3MsXkJVSUxEX0NGTEFHUyA/PSAkKC4qQ0ZMQUdTKSxCVUlMRF9DRkxBR1MgOj0gJChCVUlMRF9DRkxBR1MpLCcgLWkgTWFrZS5SdWxlcworCisJIyBkaXNhYmxlIGdwZXJmIGRldGVjdGlvbgorCXNlZCAtZSAnL3NoZWxsIGdwZXJmL2NpZmVxICgseWVzKScgLWkgbGliY2FwL01ha2VmaWxlCit9CisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ2F0dHInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICIiCisKK1BBQ0tBR0VDT05GSUdbYXR0cl0gPSAiTElCQVRUUj15ZXMsTElCQVRUUj1ubyxhdHRyIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIlBBTV9DQVA9eWVzLFBBTV9DQVA9bm8sbGlicGFtIgorCitFWFRSQV9PRU1BS0UgPSAiIFwKKyAgSU5ERU5UPSAgXAorICBsaWI9JHtAb3MucGF0aC5iYXNlbmFtZSgnJHtsaWJkaXJ9Jyl9IFwKKyAgUkFJU0VfU0VURkNBUD1ubyBcCisgIERZTkFNSUM9eWVzIFwKKyIKKworRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFNZU1RFTV9IRUFERVJTPSR7U1RBR0lOR19JTkNESVJ9IgorCisjIHRoZXNlIGFyZSBwcmVzZW50IGluIHRoZSBsaWJjYXAgZGVmYXVsdHMsIHNvIGluY2x1ZGUgaW4gb3VyIENGTEFHUyB0b28KK0NGTEFHUyArPSAiLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSAke1BBQ0tBR0VDT05GSUdfQ09ORkFSR1N9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIFwKKwkJJHtQQUNLQUdFQ09ORklHX0NPTkZBUkdTfSBcCisJCURFU1RESVI9IiR7RH0iIFwKKwkJcHJlZml4PSIke3ByZWZpeH0iIFwKKwkJU0JJTkRJUj0iJHtzYmluZGlyfSIKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZlIHRoZSBsaWJyYXJ5IHRvIGJhc2VfbGliZGlyCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0KKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbXYgJHtEfSR7bGliZGlyfS9saWJjYXAqICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgICAgIGlmIFsgLWQgJHtEfSR7bGliZGlyfS9zZWN1cml0eSBdOyB0aGVuCisJCQltdiAke0R9JHtsaWJkaXJ9L3NlY3VyaXR5ICR7RH0ke2Jhc2VfbGliZGlyfQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyIKKworIyBwYW0gZmlsZXMKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MTYzZTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZGV2L2xpYmV2ZGV2XzEuNC42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotU1VNTUFSWSA9ICJXcmFwcGVyIGxpYnJhcnkgZm9yIGV2ZGV2IGRldmljZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmV2ZGV2LyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJNSVQtWCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1YWFlMGQzOGZlZWE2ZmRhOTdjYTM4MWNiOTEzMmViIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmV2ZGV2L2xpYmV2ZGV2Lmg7ZW5kbGluZT0yMTttZDU9N2ZmNGYwYjUxMTMyNTJjMmYxYTgyOGUwYmJhZDk4ZDEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvbGliZXZkZXYvJHtCUH0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWIzZjI1YmQ4ZmIwZjhlZmE0OTQ0ZDM0NjY4ZGRkYzAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2IyYWUxYTBjN2Y5ZjdhOTYxOThkZGM4ZmQxNjdmMDkwZjIzM2Q2Y2JkODE2OGI4NDdlNGY5Njg0NDUxMzJkMyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS41LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2ZTFkNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjUuMi5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIldyYXBwZXIgbGlicmFyeSBmb3IgZXZkZXYgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliZXZkZXYvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzVhYWUwZDM4ZmVlYTZmZGE5N2NhMzgxY2I5MTMyZWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliZXZkZXYvbGliZXZkZXYuaDtlbmRsaW5lPTIxO21kNT03ZmY0ZjBiNTExMzI1MmMyZjFhODI4ZTBiYmFkOThkMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9saWJldmRldi8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NmFkNmVkYjVjZTVjNDQyOGYxYjE4M2NjMTgwZmY4YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZWUyMTYzNjU2YTYxZjU3MDNjYjVjMDhhMDVjOTQ3MWZmYjdiNjQwYmZiZTJjNTUxOTRlYTUwZDkwOGY2MjliIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnQvcnVuLXB0ZXN0CmluZGV4IGQ1MjE2ODguLjAyNDE4NTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9ydW4tcHRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdApAQCAtNCw3ICs0LDcgQEAKIGZvciB0ZXN0IGluIC4vdGVzdC8qCiBkbwogCSR0ZXN0Ci0JaWYgWyAkPyAtZXEgMCBdCisJaWYgWyAkPyAtbmUgMCBdCiAJdGhlbgogCQlmYWlsPTEKIAlmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmkvMDAwMS1taXBzLWZpeC1NSVBTLXNvZnRmbG9hdC1idWlsZC1pc3N1ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1maXgtTUlQUy1zb2Z0ZmxvYXQtYnVpbGQtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjOWViMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1maXgtTUlQUy1zb2Z0ZmxvYXQtYnVpbGQtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK0Zyb20gNjU1ZTgyYzkyZDVjMzg3NWFlZTA0MzIyZjE5OTNkNmIwNzc0YTdiZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFlvdXNvbmcgWmhvdSA8eXN6aG91NHRlY2hAZ21haWwuY29tPgorRGF0ZTogTW9uLCAxNSBBdWcgMjAxNiAxNTowMDoxMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBtaXBzOiBmaXggTUlQUyBzb2Z0ZmxvYXQgYnVpbGQgaXNzdWUKKworVGhlIHBhdGNoIGZvciBvMzIuUyBpcyB0YWtlbiBmcm9tIE9wZW5XcnQgcGFja2FnZXMgcmVwbyAzYTdhNGJmICJsaWJmZmk6CitmaXggTUlQUyBzb2Z0ZmxvYXQgYnVpbGQgaXNzdWUgd2l0aCBjdXJyZW50IGJpbnV0aWxzIgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBZb3Vzb25nIFpob3UgPHlzemhvdTR0ZWNoQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9naXRodWIuY29tL2xpYmZmaS9saWJmZmkvY29tbWl0LzJkZWQyYTRmNDk0MTY1YzkzMjkzYWZjMTRhYjBiZTEyNDNjZjhjNDldCisgc3JjL21pcHMvbjMyLlMgfCAxNyArKysrKysrKysrKysrKysrKworIHNyYy9taXBzL28zMi5TIHwgMTcgKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDM0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9taXBzL24zMi5TIGIvc3JjL21pcHMvbjMyLlMKK2luZGV4IGM2OTg1ZDMuLjhmMjU5OTQgMTAwNjQ0CistLS0gYS9zcmMvbWlwcy9uMzIuUworKysrIGIvc3JjL21pcHMvbjMyLlMKK0BAIC0xMDcsNiArMTA3LDE2IEBAIGxvYWRyZWdzOgorIAorIAlSRUdfTAl0NiwgMypGRklfU0laRU9GX0FSRygkZnApICAjIGxvYWQgdGhlIGZsYWdzIHdvcmQgaW50byB0Ni4KKyAKKysjaWZkZWYgX19taXBzX3NvZnRfZmxvYXQKKysJUkVHX0wJYTAsIDAqRkZJX1NJWkVPRl9BUkcodDkpCisrCVJFR19MCWExLCAxKkZGSV9TSVpFT0ZfQVJHKHQ5KQorKwlSRUdfTAlhMiwgMipGRklfU0laRU9GX0FSRyh0OSkKKysJUkVHX0wJYTMsIDMqRkZJX1NJWkVPRl9BUkcodDkpCisrCVJFR19MCWE0LCA0KkZGSV9TSVpFT0ZfQVJHKHQ5KQorKwlSRUdfTAlhNSwgNSpGRklfU0laRU9GX0FSRyh0OSkKKysJUkVHX0wJYTYsIDYqRkZJX1NJWkVPRl9BUkcodDkpCisrCVJFR19MCWE3LCA3KkZGSV9TSVpFT0ZfQVJHKHQ5KQorKyNlbHNlCisgCWFuZAl0NCwgdDYsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKKyAJUkVHX0wJYTAsIDAqRkZJX1NJWkVPRl9BUkcodDkpCisgCWJlcXoJdDQsIGFyZzFfbmV4dAorQEAgLTE5Myw2ICsyMDMsNyBAQCBhcmc3X25leHQ6CisgYXJnOF9kb3VibGVwOgkKKyAgCWwuZAkkZjE5LCA3KkZGSV9TSVpFT0ZfQVJHKHQ5KQkKKyBhcmc4X25leHQ6CQorKyNlbmRpZgorIAorIGNhbGxpdDoJCQorIAkjIExvYWQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKK0BAIC0yMTQsNiArMjI1LDcgQEAgcmV0aW50OgorIAliCWVwaWxvZ3VlCisgCisgcmV0ZmxvYXQ6CisrI2lmbmRlZiBfX21pcHNfc29mdF9mbG9hdAorIAlibmUgICAgIHQ2LCBGRklfVFlQRV9GTE9BVCwgcmV0ZG91YmxlCisgCWphbAl0OQorIAlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCitAQCAtMjcyLDYgKzI4NCw3IEBAIHJldHN0cnVjdF9mX2Q6CisgCXMucwkkZjAsIDAodDQpCisgCXMuZAkkZjIsIDgodDQpCisgCWIJZXBpbG9ndWUKKysjZW5kaWYKKyAKKyByZXRzdHJ1Y3RfZF9zb2Z0OgorIAlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9EX1NPRlQsIHJldHN0cnVjdF9mX3NvZnQKK0BAIC00MjksNiArNDQyLDcgQEAgZmZpX2Nsb3N1cmVfTjMyOgorIAlSRUdfUwlhNiwgQTZfT0ZGMigkc3ApCisgCVJFR19TCWE3LCBBN19PRkYyKCRzcCkKKyAKKysjaWZuZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgCSMgU3RvcmUgYWxsIHBvc3NpYmxlIGZsb2F0L2RvdWJsZSByZWdpc3RlcnMuCisgCXMuZAkkZjEyLCBGMTJfT0ZGMigkc3ApCisgCXMuZAkkZjEzLCBGMTNfT0ZGMigkc3ApCitAQCAtNDM4LDYgKzQ1Miw3IEBAIGZmaV9jbG9zdXJlX04zMjoKKyAJcy5kCSRmMTcsIEYxN19PRkYyKCRzcCkKKyAJcy5kCSRmMTgsIEYxOF9PRkYyKCRzcCkKKyAJcy5kCSRmMTksIEYxOV9PRkYyKCRzcCkKKysjZW5kaWYKKyAKKyAJIyBDYWxsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyIHRvIGRvIHRoZSByZWFsIHdvcmsuCisgCUxBCXQ5LCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMgorQEAgLTQ1OCw2ICs0NzMsNyBAQCBjbHNfcmV0aW50OgorIAliCWNsc19lcGlsb2d1ZQorIAorIGNsc19yZXRmbG9hdDoKKysjaWZuZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgCWJuZSAgICAgdjAsIEZGSV9UWVBFX0ZMT0FULCBjbHNfcmV0ZG91YmxlCisgCWwucwkkZjAsIFYwX09GRjIoJHNwKQorIAliCWNsc19lcGlsb2d1ZQorQEAgLTUwMCw2ICs1MTYsNyBAQCBjbHNfcmV0c3RydWN0X2ZfZDoKKyAJbC5zCSRmMCwgVjBfT0ZGMigkc3ApCisgCWwuZAkkZjIsIFYxX09GRjIoJHNwKQorIAliCWNsc19lcGlsb2d1ZQorKyNlbmRpZgorIAkKKyBjbHNfcmV0c3RydWN0X3NtYWxsMjoJCisgCVJFR19MCXYwLCBWMF9PRkYyKCRzcCkKK2RpZmYgLS1naXQgYS9zcmMvbWlwcy9vMzIuUyBiL3NyYy9taXBzL28zMi5TCitpbmRleCBlYjI3OTgxLi40MjlkZDBhIDEwMDY0NAorLS0tIGEvc3JjL21pcHMvbzMyLlMKKysrKyBiL3NyYy9taXBzL28zMi5TCitAQCAtODIsMTMgKzgyLDE2IEBAIHNpeHRlZW46CisgCQkKKyAJQUREVQkkc3AsIDQgKiBGRklfU0laRU9GX0FSRwkJIyBhZGp1c3QgJHNwIHRvIG5ldyBhcmdzCisgCisrI2lmbmRlZiBfX21pcHNfc29mdF9mbG9hdAorIAlibmV6CXQwLCBwYXNzX2QJCQkjIG1ha2UgaXQgcXVpY2sgZm9yIGludAorKyNlbmRpZgorIAlSRUdfTAlhMCwgMCpGRklfU0laRU9GX0FSRygkc3ApCSMganVzdCBnbyBhaGVhZCBhbmQgbG9hZCB0aGUKKyAJUkVHX0wJYTEsIDEqRkZJX1NJWkVPRl9BUkcoJHNwKQkjIGZvdXIgcmVncy4KKyAJUkVHX0wJYTIsIDIqRkZJX1NJWkVPRl9BUkcoJHNwKQorIAlSRUdfTAlhMywgMypGRklfU0laRU9GX0FSRygkc3ApCisgCWIJY2FsbF9pdAorIAorKyNpZm5kZWYgX19taXBzX3NvZnRfZmxvYXQKKyBwYXNzX2Q6CisgCWJuZQl0MCwgRkZJX0FSR1NfRCwgcGFzc19mCisgCWwuZAkkZjEyLCAwKkZGSV9TSVpFT0ZfQVJHKCRzcCkJIyBsb2FkICRmcCByZWdzIGZyb20gYXJncworQEAgLTEzMCw2ICsxMzMsNyBAQCBwYXNzX2ZfZDoKKyAgIwlibmUJdDAsIEZGSV9BUkdTX0ZfRCwgY2FsbF9pdAorIAlsLnMJJGYxMiwgMCpGRklfU0laRU9GX0FSRygkc3ApCSMgbG9hZCAkZnAgcmVncyBmcm9tIGFyZ3MKKyAJbC5kCSRmMTQsIDIqRkZJX1NJWkVPRl9BUkcoJHNwKQkjIHBhc3NpbmcgZG91YmxlIGFuZCBmbG9hdAorKyNlbmRpZgorIAorIGNhbGxfaXQ6CQorIAkjIExvYWQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKK0BAIC0xNTgsMTQgKzE2MiwyMyBAQCByZXRmbG9hdDoKKyAJYm5lICAgICB0MiwgRkZJX1RZUEVfRkxPQVQsIHJldGRvdWJsZQorIAlqYWxyCXQ5CisgCVJFR19MCXQwLCBTSVpFT0ZfRlJBTUUgKyA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKysjaWZuZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgCXMucwkkZjAsIDAodDApCisrI2Vsc2UKKysJUkVHX1MJdjAsIDAodDApCisrI2VuZGlmCisgCWIJZXBpbG9ndWUKKyAKKyByZXRkb3VibGU6CQorIAlibmUJdDIsIEZGSV9UWVBFX0RPVUJMRSwgbm9yZXR2YWwKKyAJamFscgl0OQorIAlSRUdfTAl0MCwgU0laRU9GX0ZSQU1FICsgNCpGRklfU0laRU9GX0FSRygkZnApCisrI2lmbmRlZiBfX21pcHNfc29mdF9mbG9hdAorIAlzLmQJJGYwLCAwKHQwKQorKyNlbHNlCisrCVJFR19TCXYxLCA0KHQwKQorKwlSRUdfUwl2MCwgMCh0MCkKKysjZW5kaWYKKyAJYgllcGlsb2d1ZQorIAkKKyBub3JldHZhbDoJCitAQCAtMjYxLDkgKzI3NCwxMSBAQCAkTENGSTc6CisgCWxpCSQxMywgMQkJIyBGRklfTzMyCisgCWJuZQkkMTYsICQxMywgMWYJIyBTa2lwIGZwIHNhdmUgaWYgRkZJX08zMl9TT0ZUX0ZMT0FUCisgCQorKyNpZm5kZWYgX19taXBzX3NvZnRfZmxvYXQKKyAJIyBTdG9yZSBhbGwgcG9zc2libGUgZmxvYXQvZG91YmxlIHJlZ2lzdGVycy4KKyAJcy5kCSRmMTIsIEZBXzBfMF9PRkYyKCRmcCkKKyAJcy5kCSRmMTQsIEZBXzFfMF9PRkYyKCRmcCkKKysjZW5kaWYKKyAxOgkKKyAJIyBDYWxsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyIHRvIGRvIHRoZSB3b3JrLgorIAlsYQl0OSwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIKK0BAIC0yODEsNiArMjk2LDcgQEAgJExDRkk3OgorIAlsaQkkMTMsIDEJCSMgRkZJX08zMgorIAlibmUJJDE2LCAkMTMsIDFmCSMgU2tpcCBmcCByZXN0b3JlIGlmIEZGSV9PMzJfU09GVF9GTE9BVAorIAorKyNpZm5kZWYgX19taXBzX3NvZnRfZmxvYXQKKyAJbGkJJDksIEZGSV9UWVBFX0ZMT0FUCisgCWwucwkkZjAsIFYwX09GRjIoJGZwKQorIAliZXEJJDgsICQ5LCBjbG9zdXJlX2RvbmUKK0BAIC0yODgsNiArMzA0LDcgQEAgJExDRkk3OgorIAlsaQkkOSwgRkZJX1RZUEVfRE9VQkxFCisgCWwuZAkkZjAsIFYwX09GRjIoJGZwKQorIAliZXEJJDgsICQ5LCBjbG9zdXJlX2RvbmUKKysjZW5kaWYKKyAxOgkKKyAJUkVHX0wJJDMsIFYxX09GRjIoJGZwKQorIAlSRUdfTAkkMiwgVjBfT0ZGMigkZnApCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmZmkvbGliZmZpXzMuMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmlfMy4yLjEuYmIKaW5kZXggNzJlMjVmYi4uNDNlZWU4ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmlfMy4yLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmlfMy4yLjEuYmIKQEAgLTEyLDYgKzEyLDcgQEAKIFNSQ19VUkkgPSAiZnRwOi8vc291cmNld2FyZS5vcmcvcHViL2xpYmZmaS8ke0JQfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vbm90LXdpbjMyLnBhdGNoIFwKIAkgICBmaWxlOi8vMDAwMS1taXBzLVVzZS1jb21waWxlci1pbnRlcm5hbC1kZWZpbmUtZm9yLWxpbnV4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWlwcy1maXgtTUlQUy1zb2Z0ZmxvYXQtYnVpbGQtaXNzdWUucGF0Y2ggXAogCSAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjgzYjg5NTg3NjA3ZTNlYjY1YzcwZDM2MWYxM2JhYjQzIgpAQCAtMjMsNCArMjQsOCBAQAogCiBGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJmZmktJHtQVn0iCiAKKyMgRG9lc24ndCBjb21waWxlIGluIE1JUFMxNmUgbW9kZSBkdWUgdG8gdXNlIG9mIGhhbmQtd3JpdHRlbgorIyBhc3NlbWJseQorTUlQU19JTlNUUlVDVElPTl9TRVQgPSAibWlwcyIKKwogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi40LmJiCmluZGV4IDg2NmIxMWEuLjIyMThmOWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbV8xLjIuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjQuYmIKQEAgLTksNyArOSw3IEBACiAKIAogU0VDVElPTiA9ICJ4MTEvbGlicyIKLURFUEVORFMgPSAiZ2xpYi0yLjAgcGFuZ28gZ3RrKyBtZW51LWNhY2hlIGludGx0b29sLW5hdGl2ZSBsaWJleGlmIGxpYmZtLWV4dHJhIGdldHRleHQtbmF0aXZlIgorREVQRU5EUyA9ICJnbGliLTIuMCBwYW5nbyBndGsrMyBtZW51LWNhY2hlIGludGx0b29sLW5hdGl2ZSBsaWJleGlmIGxpYmZtLWV4dHJhIGdldHRleHQtbmF0aXZlIgogCiBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wY21hbmZtL2xpYmZtLSR7UFZ9LnRhci54eiIKIApAQCAtMTcsNyArMTcsOSBAQAogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4MDRmNmYyOGNiM2QxYmM4ZmZiMzE1MWFiN2ZmMGMwNjNiMjdjNWY5YjA2YzY4MmViOTAzZTAxY2YyNTUwMmYiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jIGRpc3Ryb19mZWF0dXJlc19jaGVjawotQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCitBTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLM0RJU1RST0ZFQVRVUkVTfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1ndGs9MyIKIAogZG9fY29uZmlndXJlW2RpcnNdID0rICIke1N9L200IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCmluZGV4IDY3ZGRmYzYuLjY5NTg5ZjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC00LDYxICs0LDMyIEBACiAKIFJQIDIwMTQvNS8yMgogCi1JbmRleDogbGliZ2NyeXB0LTEuMi40L2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpYmdjcnlwdC0xLjIuNC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTAzLTE5IDIyOjE0OjUwLjAwMDAwMDAwMCArMDAwMAotKysrIGxpYmdjcnlwdC0xLjIuNC9jb25maWd1cmUuYWMJMjAwOC0wMy0xOSAyMjoxNDo1OC4wMDAwMDAwMDAgKzAwMDAKLUBAIC04MDcsNiArODA3LDcgQEAKK1JlYmFzZSB0byAxLjcuMAorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICB8ICAxICsKKyBzcmMvbGliZ2NyeXB0Lm00ICAgIHwgNzEgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvbGliZ2NyeXB0LnBjLmluIHwgMzMgKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgNjcgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9saWJnY3J5cHQucGMuaW4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZjY4M2UyMS4uNTY2ZTFjOCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjMxNCw2ICsyMzE0LDcgQEAgcmFuZG9tL01ha2VmaWxlCiAgZG9jL01ha2VmaWxlCiAgc3JjL01ha2VmaWxlCiAgc3JjL2djcnlwdC5oCiArc3JjL2xpYmdjcnlwdC5wYwogIHNyYy9saWJnY3J5cHQtY29uZmlnCisgc3JjL3ZlcnNpb25pbmZvLnJjCiAgdGVzdHMvTWFrZWZpbGUKLSB3MzItZGxsL01ha2VmaWxlCi1JbmRleDogbGliZ2NyeXB0LTEuMi40L3NyYy9saWJnY3J5cHQucGMuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBsaWJnY3J5cHQtMS4yLjQvc3JjL2xpYmdjcnlwdC5wYy5pbgkyMDA4LTAzLTE5IDIyOjE0OjU4LjAwMDAwMDAwMCArMDAwMAotQEAgLTAsMCArMSwzMyBAQAotKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgcGtnLWNvbmZpZyBtZXRhZGF0YSBmaWxlLgotKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotKyMgQXV0aG9yOiBTaW1vbiBKb3NlZnNzb24KLSsjCi0rIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCi0rIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSsjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotKyMKLSsjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSsjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKLSsjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKwotK3ByZWZpeD1AcHJlZml4QAotK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKLStsaWJkaXI9QGxpYmRpckAKLStpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAotKwotKyMgQVBJIGluZm8KLSthcGlfdmVyc2lvbj1ATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKLStob3N0PUBMSUJHQ1JZUFRfQ09ORklHX0hPU1RACi0rCi0rIyBNaXNjIGluZm9ybWF0aW9uLgotK3N5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfQ0lQSEVSU0AKLSthc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKLStkaWdlc3RzPUBMSUJHQ1JZUFRfRElHRVNUU0AKLSsKLStOYW1lOiBsaWJnY3J5cHQKLStEZXNjcmlwdGlvbjogR05VIGNyeXB0byBsaWJyYXJ5Ci0rVVJMOiBodHRwOi8vd3d3LmdudXBnLm9yZwotK1ZlcnNpb246IEBWRVJTSU9OQAotK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ2NyeXB0Ci0rTGlicy5wcml2YXRlOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgotK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IAotSW5kZXg6IGxpYmdjcnlwdC0xLjYuMS9zcmMvbGliZ2NyeXB0Lm00Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGliZ2NyeXB0LTEuNi4xLm9yaWcvc3JjL2xpYmdjcnlwdC5tNAkyMDEzLTEyLTE2IDE3OjQ0OjMyLjAwMDAwMDAwMCArMDAwMAotKysrIGxpYmdjcnlwdC0xLjYuMS9zcmMvbGliZ2NyeXB0Lm00CTIwMTQtMDUtMTMgMjE6MjU6MzcuNDc4Mzg5ODMzICswMDAwCi1AQCAtMjIsMTcgKzIyLDcgQEAKK2RpZmYgLS1naXQgYS9zcmMvbGliZ2NyeXB0Lm00IGIvc3JjL2xpYmdjcnlwdC5tNAoraW5kZXggYzY3Y2ZlYy4uNGVhNWYyYyAxMDA2NDQKKy0tLSBhL3NyYy9saWJnY3J5cHQubTQKKysrKyBiL3NyYy9saWJnY3J5cHQubTQKK0BAIC0yOSwzMCArMjksNiBAQCBkbmwgaXMgYWRkZWQgdG8gdGhlIGdwZ19jb25maWdfc2NyaXB0X3dhcm4gdmFyaWFibGUuCiAgZG5sCiAgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKICBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKQEAgLTY2LDE3ICszNywzMCBAQAogLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliZ2NyeXB0LXByZWZpeD1QRlhdLAogLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgTElCR0NSWVBUIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCiAtICAgICBsaWJnY3J5cHRfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBsaWJnY3J5cHRfY29uZmlnX3ByZWZpeD0iIikKLS0gIGlmIHRlc3QgeCRsaWJnY3J5cHRfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgotLSAgICAgaWYgdGVzdCB4JHtMSUJHQ1JZUFRfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KLS0gICAgICAgIExJQkdDUllQVF9DT05GSUc9JGxpYmdjcnlwdF9jb25maWdfcHJlZml4L2Jpbi9saWJnY3J5cHQtY29uZmlnCistICBpZiB0ZXN0IHgiJHtMSUJHQ1JZUFRfQ09ORklHfSIgPSB4IDsgdGhlbgorLSAgICAgaWYgdGVzdCB4IiR7bGliZ2NyeXB0X2NvbmZpZ19wcmVmaXh9IiAhPSB4IDsgdGhlbgorLSAgICAgICAgTElCR0NSWVBUX0NPTkZJRz0iJHtsaWJnY3J5cHRfY29uZmlnX3ByZWZpeH0vYmluL2xpYmdjcnlwdC1jb25maWciCistICAgICBlbHNlCistICAgICAgIGNhc2UgIiR7U1lTUk9PVH0iIGluCistICAgICAgICAgLyopCistICAgICAgICAgICBpZiB0ZXN0IC14ICIke1NZU1JPT1R9L2Jpbi9saWJnY3J5cHQtY29uZmlnIiA7IHRoZW4KKy0gICAgICAgICAgICAgTElCR0NSWVBUX0NPTkZJRz0iJHtTWVNST09UfS9iaW4vbGliZ2NyeXB0LWNvbmZpZyIKKy0gICAgICAgICAgIGZpCistICAgICAgICAgICA7OworLSAgICAgICAgICcnKQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgIEFDX01TR19XQVJOKFtJZ25vcmluZyBcJFNZU1JPT1QgYXMgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGguXSkKKy0gICAgICAgICAgIDs7CistICAgICAgIGVzYWMKIC0gICAgIGZpCiAtICBmaQotIAotLSAgQUNfUEFUSF9UT09MKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQorLQorLSAgQUNfUEFUSF9QUk9HKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQogICAgdG1wPWlmZWxzZShbJDFdLCAsMToxLjIuMCwkMSkKICAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KICAgICAgIHJlcV9saWJnY3J5cHRfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAotQEAgLTQyLDQ4ICszMiwxMyBAQAorQEAgLTYyLDQ4ICszOCwxMyBAQCBBQ19ERUZVTihbQU1fUEFUSF9MSUJHQ1JZUFRdLAogICAgICAgbWluX2xpYmdjcnlwdF92ZXJzaW9uPSIkdG1wIgogICAgZmkKICAKQEAgLTEyOCw3ICsxMTIsNyBAQAogICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCiAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0xJQkdDUllQVCBBUEkgdmVyc2lvbl0pCiAgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCi1AQCAtOTYsMTAgKzUxLDggQEAKK0BAIC0xMTYsMTAgKzU3LDggQEAgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKICAgICAgIGZpCiAgICBmaQogICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KQEAgLTE0MCw3ICsxMjQsNyBAQAogICAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCiAgICAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgogICAgQUNfTVNHX1dBUk4oW1sKLUBAIC0xMTMsOCArNjYsNiBAQAorQEAgLTEzNCw4ICs3Myw2IEBAIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkdDUllQVF0sCiAgICAgICAgZmkKICAgICAgZmkKICAgIGVsc2UKQEAgLTE0OSwzICsxMzMsNDUgQEAKICAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKICAgIGZpCiAgICBBQ19TVUJTVChMSUJHQ1JZUFRfQ0ZMQUdTKQorZGlmZiAtLWdpdCBhL3NyYy9saWJnY3J5cHQucGMuaW4gYi9zcmMvbGliZ2NyeXB0LnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmZjOGY1MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYmdjcnlwdC5wYy5pbgorQEAgLTAsMCArMSwzMyBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgcGtnLWNvbmZpZyBtZXRhZGF0YSBmaWxlLgorKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgQXV0aG9yOiBTaW1vbiBKb3NlZnNzb24KKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisrIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKysjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKyMKKysjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKysjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorKworK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1ATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBMSUJHQ1JZUFRfQ09ORklHX0hPU1RACisrCisrIyBNaXNjIGluZm9ybWF0aW9uLgorK3N5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfQ0lQSEVSU0AKKythc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKKytkaWdlc3RzPUBMSUJHQ1JZUFRfRElHRVNUU0AKKysKKytOYW1lOiBsaWJnY3J5cHQKKytEZXNjcmlwdGlvbjogR05VIGNyeXB0byBsaWJyYXJ5CisrVVJMOiBodHRwOi8vd3d3LmdudXBnLm9yZworK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ2NyeXB0CisrTGlicy5wcml2YXRlOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tcHRocmVhZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGNjMGUyYjQwM2QzMzg5Mjk2MzUxM2EzYmE5OGU0YWU1YTA1YTRkM2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDEyIEp1biAyMDE2IDA0OjQ0OjI5IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3RzL01ha2VmaWxlLmFtOiBmaXggdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcHRocmVhZF9jcmVhdGUnCisKK0FkZCBtaXNzaW5nICctbHB0aHJlYWQnIHRvIENGTEFHUworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBkNDYyZjMwLi5iZWY2ZGQ3IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtNjIsNCArNjIsNCBAQCBFWFRSQV9ESVNUID0gUkVBRE1FIHJzYS0xNmsua2V5IGNhdnNfdGVzdHMuc2ggY2F2c19kcml2ZXIucGwgXAorIAorIExEQUREID0gJChzdGFuZGFyZF9sZGFkZCkgJChHUEdfRVJST1JfTElCUykKKyB0X2xvY2tfTERBREQgPSAkKHN0YW5kYXJkX2xkYWRkKSAkKEdQR19FUlJPUl9NVF9MSUJTKQorLXRfbG9ja19DRkxBR1MgPSAkKEdQR19FUlJPUl9NVF9DRkxBR1MpCisrdF9sb2NrX0NGTEFHUyA9ICQoR1BHX0VSUk9SX01UX0NGTEFHUykgLWxwdGhyZWFkCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYwppbmRleCA1NDc4MjUzLi4xNTgwNWNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jCkBAIC0xNCwxMCArMTQsMTIgQEAKIAogREVQRU5EUyA9ICJsaWJncGctZXJyb3IgbGliY2FwIgogCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmdjcnlwdC9saWJnY3J5cHQtJHtQVn0udGFyLmd6IFwKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dudXBnLm9yZy9kb3dubG9hZC9pbmRleC5odG1sIgorU1JDX1VSSSA9ICIke0dOVVBHX01JUlJPUn0vbGliZ2NyeXB0L2xpYmdjcnlwdC0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1wdGhyZWFkLnBhdGNoIFwKICIKIAogQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJnY3J5cHQtY29uZmlnIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS42LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3YTIzZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotcmVxdWlyZSBsaWJnY3J5cHQuaW5jCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmMjRmY2I2ODQ5MzJkNGI1ZWQ4NWYyZjA1Y2IxZDlmOCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyMDJiZjEwOWNjZjJkNjE0NTY1Yzg0OWYzZTU2ODdiOTRjZGU5NzIxNjdiMzUyNjFlMDk0MjUyMzY3NjI3YmM2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS43LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjcuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGQ3YzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS43LjMuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGxpYmdjcnlwdC5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImJiNWIwMGNiNzBiMTIxNTgzMzg1N2ZkNjkwMDgwZmJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5ODQ3MGNmNmE3ODFmMmFmNGJkZmRhNzEwYWQzOWYwZjU0YjUwNDRlOGM0M2I4NzhkNDAwNTczN2Q2YzIxM2YiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci8wMDAxLWxpYmdwZy1lcnJvci1BZGQtbmlvczItc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLzAwMDEtbGliZ3BnLWVycm9yLUFkZC1uaW9zMi1zdXBwb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWIxYzEzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLzAwMDEtbGliZ3BnLWVycm9yLUFkZC1uaW9zMi1zdXBwb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotRnJvbSBiMmFmNjUyZjQzOTkxZTRjZTYyOTc5MTdkYTU0MmE5ZWI1MTM1OTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1EYXRlOiBUaHUsIDE3IFNlcCAyMDE1IDAzOjI4OjA2ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIGxpYmdwZy1lcnJvcjogQWRkIG5pb3MyIHN1cHBvcnQKLQotQWRkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBOSU9TMiBwcm9jZXNzb3IuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLS0tLQotIHNyYy9zeXNjZmcvbG9jay1vYmotcHViLm5pb3MyLXVua25vd24tbGludXgtZ251LmggfCAyMyArKysrKysrKysrKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9zeXNjZmcvbG9jay1vYmotcHViLm5pb3MyLXVua25vd24tbGludXgtZ251LmgKLQotZGlmZiAtLWdpdCBhL3NyYy9zeXNjZmcvbG9jay1vYmotcHViLm5pb3MyLXVua25vd24tbGludXgtZ251LmggYi9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi5uaW9zMi11bmtub3duLWxpbnV4LWdudS5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uM2EyNDU3MQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIubmlvczItdW5rbm93bi1saW51eC1nbnUuaAotQEAgLTAsMCArMSwyMyBAQAotKyMjIGxvY2stb2JqLXB1Yi5uaW9zMi11bmtub3duLWxpbnV4LWdudS5oCi0rIyMgRmlsZSBjcmVhdGVkIGJ5IGdlbi1wb3NpeC1sb2NrLW9iaiAtIERPIE5PVCBFRElUCi0rIyMgVG8gYmUgaW5jbHVkZWQgYnkgbWtoZWFkZXIgaW50byBncGctZXJyb3IuaAotKwotK3R5cGVkZWYgc3RydWN0Ci0rewotKyAgbG9uZyBfdmVyczsKLSsgIHVuaW9uIHsKLSsgICAgdm9sYXRpbGUgY2hhciBfcHJpdlsyNF07Ci0rICAgIGxvbmcgX3hfYWxpZ247Ci0rICAgIGxvbmcgKl94cF9hbGlnbjsKLSsgIH0gdTsKLSt9IGdwZ3J0X2xvY2tfdDsKLSsKLSsjZGVmaW5lIEdQR1JUX0xPQ0tfSU5JVElBTElaRVIgezEse3swLDAsMCwwLDAsMCwwLDAsIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLDAsMCwwLDAsMCwwLDAsIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLDAsMCwwLDAsMCwwLDB9fX0KLSsjIwotKyMjIExvY2FsIFZhcmlhYmxlczoKLSsjIyBtb2RlOiBjCi0rIyMgYnVmZmVyLXJlYWQtb25seTogdAotKyMjIEVuZDoKLSsjIwotLS0gCi0yLjUuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjIxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4yMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRkMTYwMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjIxLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotU1VNTUFSWSA9ICJTbWFsbCBsaWJyYXJ5IHRoYXQgZGVmaW5lcyBjb21tb24gZXJyb3IgdmFsdWVzIGZvciBhbGwgR251UEcgY29tcG9uZW50cyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliZ3BnLWVycm9yLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgotCi1MSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3BnLWVycm9yLmguaW47ZW5kbGluZT0yMzttZDU9OTNkMzE1NWFmMTQxYWUzYjM2OWE1ZDA5Y2E5ZDYyMzQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2luaXQuYztlbmRsaW5lPTIwO21kNT04ZjVhOWI1OTYzNGY0YWViY2QwZWM5ZDNlYmQ1M2JmZSIKLQotCi1TRUNUSU9OID0gImxpYnMiCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCi0JICAgZmlsZTovLzAwMDEtbGliZ3BnLWVycm9yLUFkZC1uaW9zMi1zdXBwb3J0LnBhdGNoIFwKLQkgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJhYjBiNWFiYTZkMGExODViNDFkMDdiZGE4MDRmZDhiMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiN2RiZGIzY2FkNjNhNzQwZTlmMGM2MzJhMWRhMzJkNGFmZGI2OTRlYzg2Yzg2MjVjOThlYTA2OTE3MTNiODRkIgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2dwZy1lcnJvci1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgZ2V0dGV4dAotQ1BQRkxBR1MgKz0gIi1QIgotZG9fY29tcGlsZV9wcmVwZW5kKCkgewotCVRBUkdFVF9GSUxFPWxpbnV4LWdudQotCWlmIFsgJHtUQVJHRVRfT1N9ICE9ICJsaW51eCIgXTsgdGhlbgotCQlUQVJHRVRfRklMRT0ke1RBUkdFVF9PU30KLQlmaQotCi0JY2FzZSAke1RBUkdFVF9BUkNIfSBpbgotCSAgYWFyY2g2NF9iZSkgVFVQTEU9YWFyY2g2NC11bmtub3duLWxpbnV4LWdudSA7OwotCSAgYXJtKQkgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7Ci0JICBhcm1lYikgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7Ci0JICBpNTg2fGk2ODYpICBUVVBMRT1pNjg2LXBjLWxpbnV4LWdudSA7OwotCSAgbWlwczY0ZWwpICAgVFVQTEU9bWlwc2VsLXVua25vd24tbGludXgtZ251IDs7Ci0JICBtaXBzNjQpICAgICBUVVBMRT1taXBzLXVua25vd24tbGludXgtZ251IDs7Ci0JICB4ODZfNjQpICAgICBUVVBMRT14ODZfNjQtcGMtbGludXgtZ251IDs7Ci0JICAqKSAgICAgICAgICBUVVBMRT0ke1RBUkdFVF9BUkNIfS11bmtub3duLWxpbnV4LWdudSA7OyAKLQllc2FjCi0KLQljcCAke1N9L3NyYy9zeXNjZmcvbG9jay1vYmotcHViLiRUVVBMRS5oIFwKLQkgICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRBUkdFVF9GSUxFLmgKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyB3ZSBkb24ndCBoYXZlIGNvbW1vbiBsaXNwIGluIE9FCi0Jcm0gLXJmICIke0R9JHtkYXRhZGlyfS9jb21tb24tbGlzcC8iCi19Ci0KLUZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dwZy1lcnJvciIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjI0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGE4ODJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4yNC5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIlNtYWxsIGxpYnJhcnkgdGhhdCBkZWZpbmVzIGNvbW1vbiBlcnJvciB2YWx1ZXMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJncGctZXJyb3IvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGctZXJyb3IuaC5pbjtlbmRsaW5lPTIzO21kNT1jZjU2MmY2MGI5ZGJhN2RmMjBkNmVlM2Y5N2VhMWQ1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaW5pdC5jO2VuZGxpbmU9MjA7bWQ1PTg3MmIyMzg5ZmU5YmFlN2ZmYjgwZDJiOTEyMjVhZmJjIgorCisKK1NFQ1RJT04gPSAibGlicyIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKwkgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZWI0MjE5OGMwYWFmM2IyOGVhYmU4ZjQxYTM0Yjk4MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MjY4ZTFjYzQ4N2RlNWU2ZTQ0NjBmY2E2MTJhMDZlNGYzODMwNzJhYzQzYWU5MDYwM2U1ZTQ2NzgzZDNlNTQwIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2dwZy1lcnJvci1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgZ2V0dGV4dAorQ1BQRkxBR1MgKz0gIi1QIgorZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCVRBUkdFVF9GSUxFPWxpbnV4LWdudQorCWlmIFsgJHtUQVJHRVRfT1N9ICE9ICJsaW51eCIgXTsgdGhlbgorCQlUQVJHRVRfRklMRT0ke1RBUkdFVF9PU30KKwlmaQorCisJY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorCSAgYWFyY2g2NF9iZSkgVFVQTEU9YWFyY2g2NC11bmtub3duLWxpbnV4LWdudSA7OworCSAgYXJtKQkgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7CisJICBhcm1lYikgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7CisJICBpNTg2fGk2ODYpICBUVVBMRT1pNjg2LXBjLWxpbnV4LWdudSA7OworCSAgbWlwcyplbCkgICAgVFVQTEU9bWlwc2VsLXVua25vd24tbGludXgtZ251IDs7CisJICBtaXBzKikgICAgICBUVVBMRT1taXBzLXVua25vd24tbGludXgtZ251IDs7CisJICB4ODZfNjQpICAgICBUVVBMRT14ODZfNjQtcGMtbGludXgtZ251IDs7CisJICAqKSAgICAgICAgICBUVVBMRT0ke1RBUkdFVF9BUkNIfS11bmtub3duLWxpbnV4LWdudSA7OyAKKwllc2FjCisKKwljcCAke1N9L3NyYy9zeXNjZmcvbG9jay1vYmotcHViLiRUVVBMRS5oIFwKKwkgICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRBUkdFVF9GSUxFLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB3ZSBkb24ndCBoYXZlIGNvbW1vbiBsaXNwIGluIE9FCisJcm0gLXJmICIke0R9JHtkYXRhZGlyfS9jb21tb24tbGlzcC8iCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dwZy1lcnJvciIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsLzAwMDEtQ01ha2VMaXN0cy50eHQtbGliaWNhbC5wYy5pbi1maXgtaWN1bGlicy1yZW1vdmUtZnVsbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWwvMDAwMS1DTWFrZUxpc3RzLnR4dC1saWJpY2FsLnBjLmluLWZpeC1pY3VsaWJzLXJlbW92ZS1mdWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYjc1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsLzAwMDEtQ01ha2VMaXN0cy50eHQtbGliaWNhbC5wYy5pbi1maXgtaWN1bGlicy1yZW1vdmUtZnVsbC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDFhNDEwNjljMGRjMDU0ZTU5Y2Q3NmZjM2Q4Y2Y3Y2MyYTc4YjVlOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGxlbiBXaW50ZXIgPGFsbGVuLndpbnRlckBrZGFiLmNvbT4KK0RhdGU6IFNhdCwgMyBTZXAgMjAxNiAxNjo1NjoyOSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBDTWFrZUxpc3RzLnR4dCwgbGliaWNhbC5wYy5pbiAtIGZpeCBpY3VsaWJzIChyZW1vdmUgZnVsbCBwYXRoKSBJU1NVRTogMjI3CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+CistLS0tCitkaWZmIC1OYXVyIGxpYmljYWwtMi4wLjAtb3JpZy9DTWFrZUxpc3RzLnR4dCBsaWJpY2FsLTIuMC4wL0NNYWtlTGlzdHMudHh0CistLS0gbGliaWNhbC0yLjAuMC1vcmlnL0NNYWtlTGlzdHMudHh0CTIwMTYtMDktMDggMTg6MDU6MDYuMTY2MDQ5MzQ1ICswMzAwCisrKysgbGliaWNhbC0yLjAuMC9DTWFrZUxpc3RzLnR4dAkyMDE2LTA5LTA4IDE4OjA1OjQ1LjIwMTU2MTMzNCArMDMwMAorQEAgLTEyOCw2ICsxMjgsNyBAQAorICMgIFJTQ0FMRSBpbmZvIGF0IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjkKKyBmaW5kX3BhY2thZ2UoSUNVKQorIGlmKElDVV9GT1VORCkKKysgIHNldChJQ1VVQ19MSUJTICItbGljdXVjIikgI2ZvciBsaWJpY2FsLnBjCisgICBzZXQoSEFWRV9MSUJJQ1UgMSkKKyAgIGlmKElDVV9NQUpPUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUiA1MCkKKyAgICAgc2V0KEhBVkVfSUNVX0RBTkdJIFRSVUUpCitAQCAtMTM3LDYgKzEzOCw3IEBACisgZW5kaWYoKQorIGlmKElDVV9JMThOX0ZPVU5EKQorICAgc2V0KEhBVkVfTElCSUNVX0kxOE4gMSkKKysgIHNldChJQ1VJMThOX0xJQlMgIi1saWN1aTE4biIpICNmb3IgbGliaWNhbC5wYworIGVuZGlmKCkKKyAKKyAjIE1TVkMgc3BlY2lmaWMgZGVmaW5pdGlvbnMKK2RpZmYgLU5hdXIgbGliaWNhbC0yLjAuMC1vcmlnL2xpYmljYWwucGMuaW4gbGliaWNhbC0yLjAuMC9saWJpY2FsLnBjLmluCistLS0gbGliaWNhbC0yLjAuMC1vcmlnL2xpYmljYWwucGMuaW4JMjAxNS0xMi0yOCAyMzo0NDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJpY2FsLTIuMC4wL2xpYmljYWwucGMuaW4JMjAxNi0wOS0wOCAxODowOToxMi45OTE5NjM1OTcgKzAzMDAKK0BAIC0zLDEwICszLDEwIEBACisgbGliZGlyPUBsaWJkaXJACisgaW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKyB0aHJlYWRzbGliPUBQVEhSRUFEX0xJQlNACistaWN1bGliPUBJQ1VfTElCUkFSSUVTQCBASUNVX0kxOE5fTElCUkFSSUVTQAorK2ljdWxpYnM9QElDVVVDX0xJQlNAIEBJQ1VJMThOX0xJQlNACisgCisgTmFtZTogbGliaWNhbAorIERlc2NyaXB0aW9uOiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBiYXNpYyBpQ0FMIHByb3RvY29scworIFZlcnNpb246IEBWRVJTSU9OQAorLUxpYnM6IC1MJHtsaWJkaXJ9IC1saWNhbCAtbGljYWxzcyAtbGljYWx2Y2FsICR7dGhyZWFkc2xpYn0gJHtpY3VsaWJ9CisrTGliczogLUwke2xpYmRpcn0gLWxpY2FsIC1saWNhbHNzIC1saWNhbHZjYWwgJHt0aHJlYWRzbGlifSAke2ljdWxpYnN9CisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWxfMi4wLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzIuMC4wLmJiCmluZGV4IDEwNDJlNmYuLmQ0ZmU4NjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWxfMi4wLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbF8yLjAuMC5iYgpAQCAtOCw2ICs4LDcgQEAKIAogU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vJHtCUE59LyR7QlBOfS9yZWxlYXNlcy9kb3dubG9hZC92JHtQVn0vJHtCUH0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL1JlbW92ZS1jbWFrZS1jaGVjay1mb3ItUGVybC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNNYWtlTGlzdHMudHh0LWxpYmljYWwucGMuaW4tZml4LWljdWxpYnMtcmVtb3ZlLWZ1bGwucGF0Y2ggXAogICAgICAgICAgICAiCiBERVBFTkRTID0gImljdSIKIApAQCAtMTUsMTMgKzE2LDYgQEAKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI2NTRjMTFmNzU5YzE5MjM3YmUzOWY2YWQ0MDFkOTE3ZTVhMDVmMzZmMTczNjM4NWVkOTU4ZTYwY2YyMTQ1NmRhIgogVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJpY2FsL2xpYmljYWwvcmVsZWFzZXMiCiAKLWluaGVyaXQgY21ha2UKK2luaGVyaXQgY21ha2UgcGtnY29uZmlnCiAKIEZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2NtYWtlLyoiCi0KLSMKLSMgVHVybiBzcGVjaWZpYyBsaWJyYXJ5IHBhdGhzIGluIHRoZSBwa2djb25maWcgZmlsZSBpbnRvIHN0YW5kYXJkIGxpYnJhcnkgZW50cmllcwotIwotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCXNlZCAtaSAtZSAicyMke1NUQUdJTkdfTElCRElSfS9saWJcKFthLXowLTldKlwpXC5zbyMtbFwxI2ciICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmljYWwucGMKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzIxMTY0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1TVU1NQVJZID0gIkVhc3kgQVBJIHRvIGNyZWF0ZSBhbmQgcGFyc2UgWC41MDkgYW5kIENNUyByZWxhdGVkIG9iamVjdHMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmtzYmEvIgotTElDRU5TRSA9ICJHUEx2MisgfCBMR1BMdjMrIHwgR1BMdjMrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmQ1NDFkODNmNzVkMDM4YzRlMDYxN2I2NzJlZDhiZGEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9MmYzMWIyNjZkMzQ0MGRkN2VlNTBmOTJjZjY3ZDhlNmMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIFwKLSAgICAgICAgICAgICAgICAgICAiCi0KLURFUEVORFMgPSAibGliZ3BnLWVycm9yIgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2tzYmEtY29uZmlnIgotCi1pbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnIHRleGluZm8KLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8va3NiYS1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhNWRkM2M1N2ZjYTI1NDkzNWY1Y2Y4ZGIyNmUzOTA2NSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwYzdmNWZmZTM0ZDA0MTRmNjk1MWQ5ODgwYTQ2ZmNjMjk4NWM0ODdmN2MzNjM2OWI5ZjExYWQ0MTEzMWM3Nzg2IgotCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0JIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKLQlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4MjU1YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjQuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJFYXN5IEFQSSB0byBjcmVhdGUgYW5kIHBhcnNlIFguNTA5IGFuZCBDTVMgcmVsYXRlZCBvYmplY3RzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJrc2JhLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgTEdQTHYzKyB8IEdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZkNTQxZDgzZjc1ZDAzOGM0ZTA2MTdiNjcyZWQ4YmRhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PTJmMzFiMjY2ZDM0NDBkZDdlZTUwZjkyY2Y2N2Q4ZTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9rc2JhLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyB0ZXhpbmZvCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dudXBnLm9yZy9kb3dubG9hZC9pbmRleC5odG1sIgorU1JDX1VSSSA9ICIke0dOVVBHX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmJmYzNkNjkwNTNkYjdiNjk4M2I1NjI3NzA2MDMzZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjZjMjg4M2NlYmVjNTYwODY5MmQ4NzMwODQzZDg3ZjIzN2MwOTY0ZDkyM2JiZTdhYTg5YzA1ZjIwNTU4YWQ0ZiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAxLWxpYi1hZGQtdXRpbGl0eS1mdW5jdGlvbi1ubF9zdHJlcnJvcl9sLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sLzAwMDEtbGliLWFkZC11dGlsaXR5LWZ1bmN0aW9uLW5sX3N0cmVycm9yX2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczNDAyOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAxLWxpYi1hZGQtdXRpbGl0eS1mdW5jdGlvbi1ubF9zdHJlcnJvcl9sLnBhdGNoCkBAIC0wLDAgKzEsMTQ2IEBACitGcm9tIDY4M2YyN2ZiYjY4Y2EyMDI4YTdiMzQ2OGYxNzE2NGQ0ODRkZjI3NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcj1DMz1BOT0yMERyYXN6aWs/PSA8YWRyYXN6aWtAdHljb2ludC5jb20+CitEYXRlOiBUaHUsIDI1IEF1ZyAyMDE2IDEzOjE0OjU5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBsaWI6IGFkZCB1dGlsaXR5IGZ1bmN0aW9uIG5sX3N0cmVycm9yX2woKQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitsaWJubCBjdXJyZW50bHkgdXNlcyBzdHJlcnJvcl9yKCkgdGhyb3VnaG91dCwgYnV0IHRoaXMgaXMKK3Byb2JsZW1hdGljIGJlY2F1c2UgdGhlcmUgaXMgYSBub24tc3RhbmRhcmQgR05VIHZlcnNpb24KK2ltcGxlbWVudGVkIGluIGdsaWJjLCBhbmQgdGhlIHN0YW5kYXJkIFBPU0lYIHZlcnNpb24sIHdoaWNoCitkaWZmZXIgaW4gc2lnbmF0dXJlLiBXaGVuIHVzaW5nIGdsaWJjLCBvbmUgY2FuIGNob29zZQorYmV0d2VlbiB0aGUgdHdvIHZlcnNpb25zIHVzaW5nIGZlYXR1cmUgdGVzdCBtYWNyb3MKK19HTlVfU09VUkNFIGFuZCBfUE9TSVhfQ19TT1VSQ0UuCisKK0dpdmVuIGxpYm5sIGlzIGJ1aWx0IHVzaW5nIHRoZSBmb3JtZXIsIHdlIGFsd2F5cyBnZXQgdGhlCitnbGliYyBzcGVjaWFsIHZlcnNpb24sIGFuZCBhbGwgY29kZSBzbyBmYXIgaGFzIGJlZW4gd3JpdHRlbgorZm9yIHRoYXQgbm9uLXN0YW5kYXJkIHZlcnNpb24uCisKK090aGVyIEMgbGlicmFyaWVzIGxpa2UgbXVzbCBvbiB0aGUgb3RoZXIgaGFuZCBvbmx5IHRyeQordG8gYmUgcG9zaXggY29tcGxpYW50LCBhbmQgb25seSBldmVyIHByb3ZpZGUgdGhlIHBvc2l4Cit2ZXJzaW9uIG9mIHN0cmVycm9yX3IoKSwgd2hpY2ggaGFzIGEgZGlmZmVyZW50IHNpZ25hdHVyZS4KKworVGhlIGFsdGVybmF0aXZlIGlzIHRvIHVzZSBzdHJlcnJvcl9sKCkgcmF0aGVyIHRoYW4KK3N0cmVycm9yX3IoKSBodHRwOi8vYXVzdGluZ3JvdXBidWdzLm5ldC92aWV3LnBocD9pZD02NTUKKy0gdGhpcyB3aWxsIGF2b2lkIHRoZSBub24tY29uZmlybWluZyB2ZXJzaW9ucyBpc3N1ZQorLSBzdHJlcnJvcl9sKCkgaXMgbm93IHJlY29tbWVuZGVkIGJ5IFBPU0lYIHRvIHJlcGxhY2UKKyAgc3RyZXJyb3JfcigpIHVzYWdlCisKK1NvIHJhdGhlciB0aGFuIGNoYW5naW5nIGFsbCB1c2VzIG9mIHN0cmVycm9yX3IoKSB0byBiZSBpbgorbGluZSB3aXRoIHBvc2l4LCB3ZSBhcmUgZ29pbmcgdG8gc3dpdGNoIHRvIHRoZSByZWNvbW1lbmRlZAoraW50ZXJmYWNlIHN0cmVycm9yX2woKS4KKworU2luY2Ugc3RyZXJyb3JfbCgpIGlzIHNsaWdodGx5IG1vcmUgZGlmZmljdWx5IHRvIHVzZSwgd2UKK2FkZCBhIGxpdHRsZSAocHJpdmF0ZSkgd3JhcHBlciB0aGF0IHdlIGNhbiB1c2UgZnJvbSBhbGwKK2N1cnJlbnQgY2FsbHNpdGVzIG9mIHN0cmVycm9yX3IoKS4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGFkcmFzemlrQHR5Y29pbnQuY29tPgorUmV2aWV3ZWQtYnk6IFN0ZXBoYW5lIEF5b3R0ZSA8c2F5b3R0ZUB0eWNvaW50LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBodHRwczovL2dpdGh1Yi5jb20vdGhvbTMxMS9saWJubC9jb21taXQvNjgzZjI3ZmJiNjhjYTIwMjhhN2IzNDY4ZjE3MTY0ZDQ4NGRmMjc1OQorIGluY2x1ZGUvTWFrZWZpbGUuYW0gICAgICAgICAgICAgfCAgMSArCisgaW5jbHVkZS9uZXRsaW5rLXByaXZhdGUvdXRpbHMuaCB8IDE3ICsrKysrKysrKysrKysrKysrCisgbGliL3V0aWxzLmMgICAgICAgICAgICAgICAgICAgICB8IDI0ICsrKysrKysrKysrKysrKysrKysrKysrKworIGxpYm5sLTMuc3ltICAgICAgICAgICAgICAgICAgICAgfCAgNSArKysrKworIDQgZmlsZXMgY2hhbmdlZCwgNDcgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL25ldGxpbmstcHJpdmF0ZS91dGlscy5oCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL01ha2VmaWxlLmFtIGIvaW5jbHVkZS9NYWtlZmlsZS5hbQoraW5kZXggODA0ZTk4NC4uZjhiOTc3YSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvTWFrZWZpbGUuYW0KKysrKyBiL2luY2x1ZGUvTWFrZWZpbGUuYW0KK0BAIC0xNjYsNiArMTY2LDcgQEAgbm9pbnN0X0hFQURFUlMgPSBcCisgCW5ldGxpbmstcHJpdmF0ZS9zb2NrZXQuaCBcCisgCW5ldGxpbmstcHJpdmF0ZS90Yy5oIFwKKyAJbmV0bGluay1wcml2YXRlL3R5cGVzLmggXAorKwluZXRsaW5rLXByaXZhdGUvdXRpbHMuaCBcCisgCW5ldGxpbmstcHJpdmF0ZS9jYWNoZS1hcGkuaCBcCisgCW5ldGxpbmstcHJpdmF0ZS9vYmplY3QtYXBpLmggXAorIAluZXRsaW5rLXByaXZhdGUvcm91dGUvbGluay9hcGkuaCBcCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXRsaW5rLXByaXZhdGUvdXRpbHMuaCBiL2luY2x1ZGUvbmV0bGluay1wcml2YXRlL3V0aWxzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43N2FhZGIzCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL25ldGxpbmstcHJpdmF0ZS91dGlscy5oCitAQCAtMCwwICsxLDE3IEBACisrLyoKKysgKiBuZXRsaW5rLXByaXZhdGUvdXRpbHMuaAlMb2NhbCBVdGlsaXR5IEZ1bmN0aW9ucworKyAqCisrICoJVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKglMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4xCisrICoJb2YgdGhlIExpY2Vuc2UuCisrICoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMiBUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KKysgKi8KKysKKysjaWZuZGVmIE5FVExJTktfVVRJTFNfUFJJVl9IXworKyNkZWZpbmUgTkVUTElOS19VVElMU19QUklWX0hfCisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKglubF9zdHJlcnJvcl9sKGludCBlcnIpOworKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYi91dGlscy5jIGIvbGliL3V0aWxzLmMKK2luZGV4IDYxYzNkOTUuLmMxYzFiNzIgMTAwNjQ0CistLS0gYS9saWIvdXRpbHMuYworKysrIGIvbGliL3V0aWxzLmMKK0BAIC0yNSwxMCArMjUsMTIgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL3V0aWxzLmg+CisgI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4gLyogZXhpdCgpICovCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorIAorIC8qKgorICAqIEdsb2JhbCB2YXJpYWJsZSBpbmRpY2F0aW5nIHRoZSBkZXNpcmVkIGxldmVsIG9mIGRlYnVnZ2luZyBvdXRwdXQuCitAQCAtMTE4LDYgKzEyMCwyOCBAQCBpbnQgX19ubF9yZWFkX251bV9zdHJfZmlsZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKCpjYikobG9uZywgY29uc3QgY2hhciAqKSkKKyAKKyAJcmV0dXJuIDA7CisgfQorKworK2NvbnN0IGNoYXIgKm5sX3N0cmVycm9yX2woaW50IGVycikKKyt7CisrCWludCBlcnJub19zYXZlID0gZXJybm87CisrCWxvY2FsZV90IGxvYyA9IG5ld2xvY2FsZShMQ19NRVNTQUdFU19NQVNLLCAiIiwgKGxvY2FsZV90KTApOworKwljb25zdCBjaGFyICpidWY7CisrCisrCWlmIChsb2MgPT0gKGxvY2FsZV90KTApIHsKKysJCWlmIChlcnJubyA9PSBFTk9FTlQpCisrCQkJbG9jID0gbmV3bG9jYWxlKExDX01FU1NBR0VTX01BU0ssCisrCQkJCQkiUE9TSVgiLCAobG9jYWxlX3QpMCk7CisrCX0KKysJaWYgKGxvYyAhPSAobG9jYWxlX3QpMCkgeworKwkJYnVmID0gc3RyZXJyb3JfbChlcnIsIGxvYyk7CisrCQlmcmVlbG9jYWxlKGxvYyk7CisrCX0gZWxzZSB7CisrCQlidWYgPSAibmV3bG9jYWxlKCkgZmFpbGVkIjsKKysJfQorKworKwllcnJubyA9IGVycm5vX3NhdmU7CisrCXJldHVybiBidWY7CisrfQorIC8qKiBAZW5kY29uZCAqLworIAorIC8qKgorZGlmZiAtLWdpdCBhL2xpYm5sLTMuc3ltIGIvbGlibmwtMy5zeW0KK2luZGV4IDRlMDliZGQuLjkxMTllNjYgMTAwNjQ0CistLS0gYS9saWJubC0zLnN5bQorKysrIGIvbGlibmwtMy5zeW0KK0BAIC0zNTEsMyArMzUxLDggQEAgbGlibmxfM18yXzI4IHsKKyBnbG9iYWw6CisgCW5sX29iamVjdF9kaWZmNjQ7CisgfSBsaWJubF8zXzJfMjc7CisrCisrbGlibmxfM18yXzI5IHsKKytnbG9iYWw6CisrCW5sX3N0cmVycm9yX2w7CisrfSBsaWJubF8zXzJfMjg7CistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAyLWxpYi1zd2l0Y2gtdG8tdXNpbmctc3RyZXJyb3JfbC1pbnN0ZWFkLW9mLXN0cmVycm9yX3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvMDAwMi1saWItc3dpdGNoLXRvLXVzaW5nLXN0cmVycm9yX2wtaW5zdGVhZC1vZi1zdHJlcnJvcl9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDdlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvMDAwMi1saWItc3dpdGNoLXRvLXVzaW5nLXN0cmVycm9yX2wtaW5zdGVhZC1vZi1zdHJlcnJvcl9yLnBhdGNoCkBAIC0wLDAgKzEsNDAzIEBACitGcm9tIGMxOTQ4ZWMyOWI4ZGNkYzU4ZDJkOTI3MDBjMzI1YWJkZWFiMTExYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcj1DMz1BOT0yMERyYXN6aWs/PSA8YWRyYXN6aWtAdHljb2ludC5jb20+CitEYXRlOiBUaHUsIDI1IEF1ZyAyMDE2IDEzOjE1OjAwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBsaWI6IHN3aXRjaCB0byB1c2luZyBzdHJlcnJvcl9sKCkgaW5zdGVhZCBvZiBzdHJlcnJvcl9yKCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworZ2xpYmMgcHJvdmlkZXMgdHdvIHZlcnNpb25zIG9mIHN0cmVycm9yX3IoKSwgd2hpY2gKK2NhbiBiZSBjaG9zZW4gYmV0d2VlbiB1c2luZyBmZWF0dXJlIHRlc3QgbWFjcm9zCitfR05VX1NPVVJDRSBhbmQgX1BPU0lYX0NfU09VUkNFLiBsaWJubCBpcyBidWlsdCB1c2luZwordGhlIGZvcm1lciwgaGVuY2Ugd2UgZ2V0IHRoZSBnbGliYyBzcGVjaWFsIHZlcnNpb24sCithbmQgYWxsIGNvZGUgc28gZmFyIGhhcyBiZWVuIHdyaXR0ZW4gZm9yIHRoaXMuCisKK090aGVyIEMgbGlicmFyaWVzIGxpa2UgbXVzbCBvbiB0aGUgb3RoZXIgaGFuZCBvbmx5IHRyeQordG8gYmUgcG9zaXggY29tcGxpYW50LCBhbmQgb25seSBldmVyIHByb3ZpZGUgdGhlIHBvc2l4Cit2ZXJzaW9uIG9mIHN0cmVycm9yX3IoKSwgd2hpY2ggaGFzIGEgZGlmZmVyZW50IHNpZ25hdHVyZS4KKworVXNlcyBpbiBsaWJubCBoZW5jZSBnZW5lcmFsbHkgY2F1c2UgcHJpbnRmKCkgb2YgYW4gKmludCoKK3dpdGggYSAqc3RyaW5nIGZvcm1hdCogc3BlY2lmaWVyIGZvciB0aGF0IHJlYXNvbi4KKworQWRkaXRpb25hbGx5LCBzdHJlcnJvcl9yKCkgaGFzIGJlZW4gZGVwcmVjYXRlZDoKKyAgaHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9NjU1CisKK1N3aXRjaCB0byB1c2luZyBzdHJlcnJvcl9sKCkgKHZpYSBvdXIgd3JhcHBlciBqdXN0CitpbnRyb2R1Y2VkKS4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGFkcmFzemlrQHR5Y29pbnQuY29tPgorUmV2aWV3ZWQtYnk6IFN0ZXBoYW5lIEF5b3R0ZSA8c2F5b3R0ZUB0eWNvaW50LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBodHRwczovL2dpdGh1Yi5jb20vdGhvbTMxMS9saWJubC9jb21taXQvYzE5NDhlYzI5YjhkY2RjNThkMmQ5MjcwMGMzMjVhYmRlYWIxMTFhNgorIGxpYi9jYWNoZV9tbmdyLmMgICAgICAgIHwgIDUgKystLS0KKyBsaWIvZmliX2xvb2t1cC9sb29rdXAuYyB8ICAzICsrLQorIGxpYi9oYW5kbGVycy5jICAgICAgICAgIHwgIDQgKystLQorIGxpYi9tc2cuYyAgICAgICAgICAgICAgIHwgIDQgKystLQorIGxpYi9ubC5jICAgICAgICAgICAgICAgIHwgMjYgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWIvcm91dGUvcm91dGVfb2JqLmMgICB8ICAzICsrLQorIGxpYi9zb2NrZXQuYyAgICAgICAgICAgIHwgMzMgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgNyBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9jYWNoZV9tbmdyLmMgYi9saWIvY2FjaGVfbW5nci5jCitpbmRleCBiOWViMzQ1Li4xZjIzZWIxIDEwMDY0NAorLS0tIGEvbGliL2NhY2hlX21uZ3IuYworKysrIGIvbGliL2NhY2hlX21uZ3IuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL2NhY2hlLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvdXRpbHMuaD4KK0BAIC0zOTIsMTAgKzM5Myw4IEBAIGludCBubF9jYWNoZV9tbmdyX3BvbGwoc3RydWN0IG5sX2NhY2hlX21uZ3IgKm1uZ3IsIGludCB0aW1lb3V0KQorIAlyZXQgPSBwb2xsKCZmZHMsIDEsIHRpbWVvdXQpOworIAlOTF9EQkcoMywgIkNhY2hlIG1hbmFnZXIgJXAsIHBvbGwoKSByZXR1cm5lZCAlZFxuIiwgbW5nciwgcmV0KTsKKyAJaWYgKHJldCA8IDApIHsKKy0JCWNoYXIgYnVmWzY0XTsKKy0KKyAJCU5MX0RCRyg0LCAibmxfY2FjaGVfbW5ncl9wb2xsKCVwKTogcG9sbCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJbW5nciwgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQltbmdyLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCitkaWZmIC0tZ2l0IGEvbGliL2ZpYl9sb29rdXAvbG9va3VwLmMgYi9saWIvZmliX2xvb2t1cC9sb29rdXAuYworaW5kZXggNDNiNjEyNi4uZWZjODYyYiAxMDA2NDQKKy0tLSBhL2xpYi9maWJfbG9va3VwL2xvb2t1cC5jCisrKysgYi9saWIvZmliX2xvb2t1cC9sb29rdXAuYworQEAgLTE3LDYgKzE3LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL2F0dHIuaD4KKyAjaW5jbHVkZSA8bmV0bGluay91dGlscy5oPgorQEAgLTEzMyw3ICsxMzQsNyBAQCBzdGF0aWMgdm9pZCByZXN1bHRfZHVtcF9saW5lKHN0cnVjdCBubF9vYmplY3QgKm9iaiwgc3RydWN0IG5sX2R1bXBfcGFyYW1zICpwKQorIAkJICAgICBubF9ydG50eXBlMnN0cihyZXMtPmZyX3R5cGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAJbmxfZHVtcChwLCAic2NvcGUgJXMgZXJyb3IgJXMgKCVkKVxuIiwKKyAJCXJ0bmxfc2NvcGUyc3RyKHJlcy0+ZnJfc2NvcGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpLAorLQkJc3RyZXJyb3JfcigtcmVzLT5mcl9lcnJvciwgYnVmLCBzaXplb2YoYnVmKSksIHJlcy0+ZnJfZXJyb3IpOworKwkJbmxfc3RyZXJyb3JfbCgtcmVzLT5mcl9lcnJvciksIHJlcy0+ZnJfZXJyb3IpOworIH0KKyAKKyBzdGF0aWMgdm9pZCByZXN1bHRfZHVtcF9kZXRhaWxzKHN0cnVjdCBubF9vYmplY3QgKm9iaiwgc3RydWN0IG5sX2R1bXBfcGFyYW1zICpwKQorZGlmZiAtLWdpdCBhL2xpYi9oYW5kbGVycy5jIGIvbGliL2hhbmRsZXJzLmMKK2luZGV4IDk3YTBkOWMuLjRhNDhiOTkgMTAwNjQ0CistLS0gYS9saWIvaGFuZGxlcnMuYworKysrIGIvbGliL2hhbmRsZXJzLmMKK0BAIC0yNiw2ICsyNiw3IEBACisgICovCisgCisgI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS9uZXRsaW5rLmg+CisrI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS91dGlscy5oPgorICNpbmNsdWRlIDxuZXRsaW5rL25ldGxpbmsuaD4KKyAjaW5jbHVkZSA8bmV0bGluay91dGlscy5oPgorICNpbmNsdWRlIDxuZXRsaW5rL21zZy5oPgorQEAgLTc5LDEwICs4MCw5IEBAIHN0YXRpYyBpbnQgbmxfZXJyb3JfaGFuZGxlcl92ZXJib3NlKHN0cnVjdCBzb2NrYWRkcl9ubCAqd2hvLAorIAkJCQkgICAgc3RydWN0IG5sbXNnZXJyICplLCB2b2lkICphcmcpCisgeworIAlGSUxFICpvZmQgPSBhcmcgPyBhcmcgOiBzdGRlcnI7CistCWNoYXIgYnVmWzI1Nl07CisgCisgCWZwcmludGYob2ZkLCAiLS0gRXJyb3IgcmVjZWl2ZWQ6ICVzXG4tLSBPcmlnaW5hbCBtZXNzYWdlOiAiLAorLQkJc3RyZXJyb3JfcigtZS0+ZXJyb3IsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCW5sX3N0cmVycm9yX2woLWUtPmVycm9yKSk7CisgCXByaW50X2hlYWRlcl9jb250ZW50KG9mZCwgJmUtPm1zZyk7CisgCWZwcmludGYob2ZkLCAiXG4iKTsKKyAKK2RpZmYgLS1naXQgYS9saWIvbXNnLmMgYi9saWIvbXNnLmMKK2luZGV4IGU4YTdlOTkuLjlhZjNmM2EgMTAwNjQ0CistLS0gYS9saWIvbXNnLmMKKysrKyBiL2xpYi9tc2cuYworQEAgLTI3LDYgKzI3LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvY2FjaGUuaD4KK0BAIC05MTMsMTEgKzkxNCwxMCBAQCBzdGF0aWMgdm9pZCBkdW1wX2Vycm9yX21zZyhzdHJ1Y3QgbmxfbXNnICptc2csIEZJTEUgKm9mZCkKKyAJZnByaW50ZihvZmQsICIgIFtFUlJPUk1TR10gJXp1IG9jdGV0c1xuIiwgc2l6ZW9mKCplcnIpKTsKKyAKKyAJaWYgKG5sbXNnX2xlbihoZHIpID49IHNpemVvZigqZXJyKSkgeworLQkJY2hhciBidWZbMjU2XTsKKyAJCXN0cnVjdCBubF9tc2cgKmVycm1zZzsKKyAKKyAJCWZwcmludGYob2ZkLCAiICAgIC5lcnJvciA9ICVkIFwiJXNcIlxuIiwgZXJyLT5lcnJvciwKKy0JCQlzdHJlcnJvcl9yKC1lcnItPmVycm9yLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJbmxfc3RyZXJyb3JfbCgtZXJyLT5lcnJvcikpOworIAkJZnByaW50ZihvZmQsICIgIFtPUklHSU5BTCBNRVNTQUdFXSAlenUgb2N0ZXRzXG4iLCBzaXplb2YoKmhkcikpOworIAorIAkJZXJybXNnID0gbmxtc2dfaW5oZXJpdCgmZXJyLT5tc2cpOworZGlmZiAtLWdpdCBhL2xpYi9ubC5jIGIvbGliL25sLmMKK2luZGV4IDEyM2Y2NTcuLmE0NWMzZWEgMTAwNjQ0CistLS0gYS9saWIvbmwuYworKysrIGIvbGliL25sLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgCisgI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS9zb2NrZXQuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvaGFuZGxlcnMuaD4KK0BAIC0xMDUsNyArMTA2LDYgQEAgaW50IG5sX2Nvbm5lY3Qoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgcHJvdG9jb2wpCisgCWludCBlcnJzdjsKKyAJc29ja2xlbl90IGFkZHJsZW47CisgCXN0cnVjdCBzb2NrYWRkcl9ubCBsb2NhbCA9IHsgMCB9OworLQljaGFyIGJ1Zls2NF07CisgCWludCB0cnlfYmluZCA9IDE7CisgCisgI2lmZGVmIFNPQ0tfQ0xPRVhFQworQEAgLTExOSw3ICsxMTksNyBAQCBpbnQgbmxfY29ubmVjdChzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBwcm90b2NvbCkKKyAJaWYgKHNrLT5zX2ZkIDwgMCkgeworIAkJZXJyc3YgPSBlcnJubzsKKyAJCU5MX0RCRyg0LCAibmxfY29ubmVjdCglcCk6IHNvY2tldCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsIHNrLCBlcnJzdiwKKy0JCQlzdHJlcnJvcl9yKGVycnN2LCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJbmxfc3RyZXJyb3JfbChlcnJzdikpOworIAkJZXJyID0gLW5sX3N5c2VycjJubGVycihlcnJzdik7CisgCQlnb3RvIGVycm91dDsKKyAJfQorQEAgLTE1OCw3ICsxNTgsNyBAQCBpbnQgbmxfY29ubmVjdChzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBwcm90b2NvbCkKKyAJCQkJX25sX3NvY2tldF91c2VkX3BvcnRzX3NldCh1c2VkX3BvcnRzLCBwb3J0KTsKKyAJCQl9IGVsc2UgeworIAkJCQlOTF9EQkcoNCwgIm5sX2Nvbm5lY3QoJXApOiBiaW5kKCkgZm9yIHBvcnQgJXUgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQkJCXNrLCAodW5zaWduZWQpIHBvcnQsIGVycnN2LCBzdHJlcnJvcl9yKGVycnN2LCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJCQlzaywgKHVuc2lnbmVkKSBwb3J0LCBlcnJzdiwgbmxfc3RyZXJyb3JfbChlcnJzdikpOworIAkJCQlfbmxfc29ja2V0X3VzZWRfcG9ydHNfcmVsZWFzZV9hbGwodXNlZF9wb3J0cyk7CisgCQkJCWVyciA9IC1ubF9zeXNlcnIybmxlcnIoZXJyc3YpOworIAkJCQlnb3RvIGVycm91dDsKK0BAIC0xNzIsNyArMTcyLDcgQEAgaW50IG5sX2Nvbm5lY3Qoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgcHJvdG9jb2wpCisgCQlpZiAoZXJyICE9IDApIHsKKyAJCQllcnJzdiA9IGVycm5vOworIAkJCU5MX0RCRyg0LCAibmxfY29ubmVjdCglcCk6IGJpbmQoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCQlzaywgZXJyc3YsIHN0cmVycm9yX3IoZXJyc3YsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQkJc2ssIGVycnN2LCBubF9zdHJlcnJvcl9sKGVycnN2KSk7CisgCQkJZXJyID0gLW5sX3N5c2VycjJubGVycihlcnJzdik7CisgCQkJZ290byBlcnJvdXQ7CisgCQl9CitAQCAtMTgzLDcgKzE4Myw3IEBAIGludCBubF9jb25uZWN0KHN0cnVjdCBubF9zb2NrICpzaywgaW50IHByb3RvY29sKQorIAkJCSAgJmFkZHJsZW4pOworIAlpZiAoZXJyIDwgMCkgeworIAkJTkxfREJHKDQsICJubF9jb25uZWN0KCVwKTogZ2V0c29ja25hbWUoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJZXJyID0gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCQlnb3RvIGVycm91dDsKKyAJfQorQEAgLTI4MCwxMCArMjgwLDggQEAgaW50IG5sX3NlbmR0byhzdHJ1Y3Qgbmxfc29jayAqc2ssIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCisgCXJldCA9IHNlbmR0byhzay0+c19mZCwgYnVmLCBzaXplLCAwLCAoc3RydWN0IHNvY2thZGRyICopCisgCQkgICAgICZzay0+c19wZWVyLCBzaXplb2Yoc2stPnNfcGVlcikpOworIAlpZiAocmV0IDwgMCkgeworLQkJY2hhciBlcnJidWZbNjRdOworLQorIAkJTkxfREJHKDQsICJubF9zZW5kdG8oJXApOiBzZW5kdG8oKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSkpOworKwkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCitAQCAtMzQzLDEwICszNDEsOCBAQCBpbnQgbmxfc2VuZG1zZyhzdHJ1Y3Qgbmxfc29jayAqc2ssIHN0cnVjdCBubF9tc2cgKm1zZywgc3RydWN0IG1zZ2hkciAqaGRyKQorIAorIAlyZXQgPSBzZW5kbXNnKHNrLT5zX2ZkLCBoZHIsIDApOworIAlpZiAocmV0IDwgMCkgeworLQkJY2hhciBlcnJidWZbNjRdOworLQorIAkJTkxfREJHKDQsICJubF9zZW5kbXNnKCVwKTogc2VuZG1zZygpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJc2ssIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBlcnJidWYsIHNpemVvZihlcnJidWYpKSk7CisrCQkJc2ssIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCX0KKyAKK0BAIC03MDYsMTUgKzcwMiwxMyBAQCByZXRyeToKKyAJCWdvdG8gYWJvcnQ7CisgCX0KKyAJaWYgKG4gPCAwKSB7CistCQljaGFyIGVycmJ1Zls2NF07CistCisgCQlpZiAoZXJybm8gPT0gRUlOVFIpIHsKKyAJCQlOTF9EQkcoMywgInJlY3Ztc2coKSByZXR1cm5lZCBFSU5UUiwgcmV0cnlpbmdcbiIpOworIAkJCWdvdG8gcmV0cnk7CisgCQl9CisgCisgCQlOTF9EQkcoNCwgIm5sX3NlbmRtc2coJXApOiBubF9yZWN2KCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQlzaywgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpKTsKKysJCQlzaywgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCXJldHZhbCA9IC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAkJZ290byBhYm9ydDsKKyAJfQorQEAgLTk4MCwxMCArOTc0LDggQEAgY29udGludWVfcmVhZGluZzoKKyAJCQkJCWdvdG8gb3V0OworIAkJCQl9CisgCQkJfSBlbHNlIGlmIChlLT5lcnJvcikgeworLQkJCQljaGFyIGJ1Zls2NF07CistCisgCQkJCU5MX0RCRyg0LCAicmVjdm1zZ3MoJXApOiBSVE5FVExJTksgcmVzcG9uZGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQkJCXNrLCAtZS0+ZXJyb3IsIHN0cmVycm9yX3IoLWUtPmVycm9yLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJCQlzaywgLWUtPmVycm9yLCBubF9zdHJlcnJvcl9sKC1lLT5lcnJvcikpOworIAorIAkJCQkvKiBFcnJvciBtZXNzYWdlIHJlcG9ydGVkIGJhY2sgZnJvbSBrZXJuZWwuICovCisgCQkJCWlmIChjYi0+Y2JfZXJyKSB7CitkaWZmIC0tZ2l0IGEvbGliL3JvdXRlL3JvdXRlX29iai5jIGIvbGliL3JvdXRlL3JvdXRlX29iai5jCitpbmRleCA3MzQ3ZWQyLi4yMWI2N2IxIDEwMDY0NAorLS0tIGEvbGliL3JvdXRlL3JvdXRlX29iai5jCisrKysgYi9saWIvcm91dGUvcm91dGVfb2JqLmMKK0BAIC0zMSw2ICszMSw3IEBACisgICovCisgCisgI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS9uZXRsaW5rLmg+CisrI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS91dGlscy5oPgorICNpbmNsdWRlIDxuZXRsaW5rL25ldGxpbmsuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9jYWNoZS5oPgorICNpbmNsdWRlIDxuZXRsaW5rL3V0aWxzLmg+CitAQCAtMjU5LDcgKzI2MCw3IEBAIHN0YXRpYyB2b2lkIHJvdXRlX2R1bXBfZGV0YWlscyhzdHJ1Y3Qgbmxfb2JqZWN0ICphLCBzdHJ1Y3QgbmxfZHVtcF9wYXJhbXMgKnApCisgCWlmICgoci0+Y2VfbWFzayAmIFJPVVRFX0FUVFJfQ0FDSEVJTkZPKSAmJiByLT5ydF9jYWNoZWluZm8ucnRjaV9lcnJvcikgeworIAkJbmxfZHVtcF9saW5lKHAsICIgICAgY2FjaGVpbmZvIGVycm9yICVkICglcylcbiIsCisgCQkJci0+cnRfY2FjaGVpbmZvLnJ0Y2lfZXJyb3IsCistCQkJc3RyZXJyb3Jfcigtci0+cnRfY2FjaGVpbmZvLnJ0Y2lfZXJyb3IsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQlubF9zdHJlcnJvcl9sKC1yLT5ydF9jYWNoZWluZm8ucnRjaV9lcnJvcikpOworIAl9CisgCisgCWlmIChyLT5jZV9tYXNrICYgUk9VVEVfQVRUUl9NRVRSSUNTKSB7CitkaWZmIC0tZ2l0IGEvbGliL3NvY2tldC5jIGIvbGliL3NvY2tldC5jCitpbmRleCA5N2IyZjY5Li41NTE1M2I0IDEwMDY0NAorLS0tIGEvbGliL3NvY2tldC5jCisrKysgYi9saWIvc29ja2V0LmMKK0BAIC0zMyw2ICszMyw3IEBACisgCisgI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmstcHJpdmF0ZS9zb2NrZXQuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvaGFuZGxlcnMuaD4KK0BAIC00NDksMTEgKzQ1MCw5IEBAIGludCBubF9zb2NrZXRfYWRkX21lbWJlcnNoaXBzKHN0cnVjdCBubF9zb2NrICpzaywgaW50IGdyb3VwLCAuLi4pCisgCQllcnIgPSBzZXRzb2Nrb3B0KHNrLT5zX2ZkLCBTT0xfTkVUTElOSywgTkVUTElOS19BRERfTUVNQkVSU0hJUCwKKyAJCQkJCQkgJmdyb3VwLCBzaXplb2YoZ3JvdXApKTsKKyAJCWlmIChlcnIgPCAwKSB7CistCQkJY2hhciBidWZbNjRdOworLQorIAkJCXZhX2VuZChhcCk7CisgCQkJTkxfREJHKDQsICJubF9zb2NrZXRfYWRkX21lbWJlcnNoaXBzKCVwKTogc2V0c29ja29wdCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCQlzaywgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCQl9CisgCitAQCAtNTAxLDExICs1MDAsOSBAQCBpbnQgbmxfc29ja2V0X2Ryb3BfbWVtYmVyc2hpcHMoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgZ3JvdXAsIC4uLikKKyAJCWVyciA9IHNldHNvY2tvcHQoc2stPnNfZmQsIFNPTF9ORVRMSU5LLCBORVRMSU5LX0RST1BfTUVNQkVSU0hJUCwKKyAJCQkJCQkgJmdyb3VwLCBzaXplb2YoZ3JvdXApKTsKKyAJCWlmIChlcnIgPCAwKSB7CistCQkJY2hhciBidWZbNjRdOworLQorIAkJCXZhX2VuZChhcCk7CisgCQkJTkxfREJHKDQsICJubF9zb2NrZXRfZHJvcF9tZW1iZXJzaGlwcyglcCk6IHNldHNvY2tvcHQoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCQlzaywgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQkJc2ssIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAkJfQorIAorQEAgLTYxOSw3ICs2MTYsNiBAQCBpbnQgbmxfc29ja2V0X3NldF9mZChzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBwcm90b2NvbCwgaW50IGZkKQorIHsKKyAJaW50IGVyciA9IDA7CisgCXNvY2tsZW5fdCBhZGRybGVuOworLQljaGFyIGJ1Zls2NF07CisgCXN0cnVjdCBzb2NrYWRkcl9ubCBsb2NhbCA9IHsgMCB9OworIAlpbnQgc29fdHlwZSA9IC0xLCBzb19wcm90b2NvbCA9IC0xOworIAorQEAgLTYzMyw3ICs2MjksNyBAQCBpbnQgbmxfc29ja2V0X3NldF9mZChzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBwcm90b2NvbCwgaW50IGZkKQorIAkgICAgICAgICAgICAgICAgICAmYWRkcmxlbik7CisgCWlmIChlcnIgPCAwKSB7CisgCQlOTF9EQkcoNCwgIm5sX3NvY2tldF9zZXRfZmQoJXAsJWQpOiBnZXRzb2NrbmFtZSgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkgICAgICAgc2ssIGZkLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJICAgICAgIHNrLCBmZCwgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCXJldHVybiAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJfQorIAlpZiAoYWRkcmxlbiAhPSBzaXplb2YobG9jYWwpKQorQEAgLTY0OCw3ICs2NDQsNyBAQCBpbnQgbmxfc29ja2V0X3NldF9mZChzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBwcm90b2NvbCwgaW50IGZkKQorIAllcnIgPSBnZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19UWVBFLCAmc29fdHlwZSwgJmFkZHJsZW4pOworIAlpZiAoZXJyIDwgMCkgeworIAkJTkxfREJHKDQsICJubF9zb2NrZXRfc2V0X2ZkKCVwLCVkKTogZ2V0c29ja29wdCgpIGZvciBTT19UWVBFIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkgICAgICAgc2ssIGZkLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJICAgICAgIHNrLCBmZCwgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCXJldHVybiAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJfQorIAlpZiAoYWRkcmxlbiAhPSBzaXplb2Yoc29fdHlwZSkpCitAQCAtNjY2LDcgKzY2Miw3IEBAIGludCBubF9zb2NrZXRfc2V0X2ZkKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHByb3RvY29sLCBpbnQgZmQpCisgCQlpZiAoZXJybm8gPT0gRU5PUFJPVE9PUFQpCisgCQkJZ290byBub19zb19wcm90b2NvbDsKKyAJCU5MX0RCRyg0LCAibmxfc29ja2V0X3NldF9mZCglcCwlZCk6IGdldHNvY2tvcHQoKSBmb3IgU09fUFJPVE9DT0wgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCSAgICAgICBzaywgZmQsIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkgICAgICAgc2ssIGZkLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCWlmIChhZGRybGVuICE9IHNpemVvZihzb19wcm90b2NvbCkpCitAQCAtNzA5LDEwICs3MDUsOCBAQCBpbnQgbmxfc29ja2V0X3NldF9ub25ibG9ja2luZyhjb25zdCBzdHJ1Y3Qgbmxfc29jayAqc2spCisgCQlyZXR1cm4gLU5MRV9CQURfU09DSzsKKyAKKyAJaWYgKGZjbnRsKHNrLT5zX2ZkLCBGX1NFVEZMLCBPX05PTkJMT0NLKSA8IDApIHsKKy0JCWNoYXIgYnVmWzY0XTsKKy0KKyAJCU5MX0RCRyg0LCAibmxfc29ja2V0X3NldF9ub25ibG9ja2luZyglcCk6IGZjbnRsKCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQlzaywgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQlzaywgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCXJldHVybiAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJfQorIAorQEAgLTgxMyw3ICs4MDcsNiBAQCBpbnQgbmxfc29ja2V0X21vZGlmeV9lcnJfY2Ioc3RydWN0IG5sX3NvY2sgKnNrLCBlbnVtIG5sX2NiX2tpbmQga2luZCwKKyBpbnQgbmxfc29ja2V0X3NldF9idWZmZXJfc2l6ZShzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCByeGJ1ZiwgaW50IHR4YnVmKQorIHsKKyAJaW50IGVycjsKKy0JY2hhciBidWZbNjRdOworIAorIAlpZiAocnhidWYgPD0gMCkKKyAJCXJ4YnVmID0gMzI3Njg7CitAQCAtODI4LDcgKzgyMSw3IEBAIGludCBubF9zb2NrZXRfc2V0X2J1ZmZlcl9zaXplKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHJ4YnVmLCBpbnQgdHhidWYpCisgCQkJICZ0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSk7CisgCWlmIChlcnIgPCAwKSB7CisgCQlOTF9EQkcoNCwgIm5sX3NvY2tldF9zZXRfYnVmZmVyX3NpemUoJXApOiBzZXRzb2Nrb3B0KCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQlzaywgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQlzaywgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCXJldHVybiAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJfQorIAorQEAgLTgzNiw3ICs4MjksNyBAQCBpbnQgbmxfc29ja2V0X3NldF9idWZmZXJfc2l6ZShzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCByeGJ1ZiwgaW50IHR4YnVmKQorIAkJCSAmcnhidWYsIHNpemVvZihyeGJ1ZikpOworIAlpZiAoZXJyIDwgMCkgeworIAkJTkxfREJHKDQsICJubF9zb2NrZXRfc2V0X2J1ZmZlcl9zaXplKCVwKTogc2V0c29ja29wdCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJc2ssIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJc2ssIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCX0KKyAKK0BAIC04OTAsMTAgKzg4Myw4IEBAIGludCBubF9zb2NrZXRfc2V0X3Bhc3NjcmVkKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHN0YXRlKQorIAllcnIgPSBzZXRzb2Nrb3B0KHNrLT5zX2ZkLCBTT0xfU09DS0VULCBTT19QQVNTQ1JFRCwKKyAJCQkgJnN0YXRlLCBzaXplb2Yoc3RhdGUpKTsKKyAJaWYgKGVyciA8IDApIHsKKy0JCWNoYXIgYnVmWzY0XTsKKy0KKyAJCU5MX0RCRyg0LCAibmxfc29ja2V0X3NldF9wYXNzY3JlZCglcCk6IHNldHNvY2tvcHQoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCitAQCAtOTIyLDEwICs5MTMsOCBAQCBpbnQgbmxfc29ja2V0X3JlY3ZfcGt0aW5mbyhzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBzdGF0ZSkKKyAJZXJyID0gc2V0c29ja29wdChzay0+c19mZCwgU09MX05FVExJTkssIE5FVExJTktfUEtUSU5GTywKKyAJCQkgJnN0YXRlLCBzaXplb2Yoc3RhdGUpKTsKKyAJaWYgKGVyciA8IDApIHsKKy0JCWNoYXIgYnVmWzY0XTsKKy0KKyAJCU5MX0RCRyg0LCAibmxfc29ja2V0X3JlY3ZfcGt0aW5mbyglcCk6IHNldHNvY2tvcHQoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAzLXNyYy1zd2l0Y2gtdG8tdXNpbmctc3RyZXJyb3JfbC1pbnN0ZWFkLW9mLXN0cmVycm9yX3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvMDAwMy1zcmMtc3dpdGNoLXRvLXVzaW5nLXN0cmVycm9yX2wtaW5zdGVhZC1vZi1zdHJlcnJvcl9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZjVhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvMDAwMy1zcmMtc3dpdGNoLXRvLXVzaW5nLXN0cmVycm9yX2wtaW5zdGVhZC1vZi1zdHJlcnJvcl9yLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK0Zyb20gNmMyZDExMTE3N2U5MTE4NDA3M2M0NGY4M2Q0YTYxODJhYWJhMDZkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KK0RhdGU6IFRodSwgMjUgQXVnIDIwMTYgMTM6MTU6MDEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIHNyYzogc3dpdGNoIHRvIHVzaW5nIHN0cmVycm9yX2woKSBpbnN0ZWFkIG9mIHN0cmVycm9yX3IoKQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitnbGliYyBwcm92aWRlcyB0d28gdmVyc2lvbnMgb2Ygc3RyZXJyb3JfcigpLCB3aGljaAorY2FuIGJlIGNob3NlbiBiZXR3ZWVuIHVzaW5nIGZlYXR1cmUgdGVzdCBtYWNyb3MKK19HTlVfU09VUkNFIGFuZCBfUE9TSVhfQ19TT1VSQ0UuIGxpYm5sIGlzIGJ1aWx0IHVzaW5nCit0aGUgZm9ybWVyLCBoZW5jZSB3ZSBnZXQgdGhlIGdsaWJjIHNwZWNpYWwgdmVyc2lvbiwKK2FuZCBhbGwgY29kZSBzbyBmYXIgaGFzIGJlZW4gd3JpdHRlbiBmb3IgdGhpcy4KKworT3RoZXIgQyBsaWJyYXJpZXMgbGlrZSBtdXNsIG9uIHRoZSBvdGhlciBoYW5kIG9ubHkgdHJ5Cit0byBiZSBwb3NpeCBjb21wbGlhbnQsIGFuZCBvbmx5IGV2ZXIgcHJvdmlkZSB0aGUgcG9zaXgKK3ZlcnNpb24gb2Ygc3RyZXJyb3JfcigpLCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlLgorCitVc2VzIGluIGxpYm5sIGhlbmNlIGdlbmVyYWxseSBjYXVzZSBwcmludGYoKSBvZiBhbiAqaW50Kgord2l0aCBhICpzdHJpbmcgZm9ybWF0KiBzcGVjaWZpZXIgZm9yIHRoYXQgcmVhc29uLgorCitBZGRpdGlvbmFsbHksIHN0cmVycm9yX3IoKSBoYXMgYmVlbiBkZXByZWNhdGVkOgorICBodHRwOi8vYXVzdGluZ3JvdXBidWdzLm5ldC92aWV3LnBocD9pZD02NTUKKworU3dpdGNoIHRvIHVzaW5nIHN0cmVycm9yX2woKS4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGFkcmFzemlrQHR5Y29pbnQuY29tPgorUmV2aWV3ZWQtYnk6IFN0ZXBoYW5lIEF5b3R0ZSA8c2F5b3R0ZUB0eWNvaW50LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBodHRwczovL2dpdGh1Yi5jb20vdGhvbTMxMS9saWJubC9jb21taXQvNmMyZDExMTE3N2U5MTE4NDA3M2M0NGY4M2Q0YTYxODJhYWJhMDZkNworIHNyYy9saWIvdXRpbHMuYyB8IDIwICsrKysrKysrKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGliL3V0aWxzLmMgYi9zcmMvbGliL3V0aWxzLmMKK2luZGV4IDQ2N2FhZWQuLjU4NzhmMjcgMTAwNjQ0CistLS0gYS9zcmMvbGliL3V0aWxzLmMKKysrKyBiL3NyYy9saWIvdXRpbHMuYworQEAgLTIyLDYgKzIyLDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8bmV0bGluay9jbGkvdXRpbHMuaD4KKysjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgLyoqCisgICogUGFyc2UgYSB0ZXh0IGJhc2VkIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFyZ3VtZW50CitAQCAtNzAsNyArNzEsNiBAQCB2b2lkIG5sX2NsaV9wcmludF92ZXJzaW9uKHZvaWQpCisgdm9pZCBubF9jbGlfZmF0YWwoaW50IGVyciwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgeworIAl2YV9saXN0IGFwOworLQljaGFyIGJ1ZlsyNTZdOworIAorIAlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiAiKTsKKyAKK0BAIC03OSw4ICs3OSwyMiBAQCB2b2lkIG5sX2NsaV9mYXRhbChpbnQgZXJyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAJCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisgCQl2YV9lbmQoYXApOworIAkJZnByaW50ZihzdGRlcnIsICJcbiIpOworLQl9IGVsc2UKKy0JCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cmVycm9yX3IoZXJyLCBidWYsIHNpemVvZihidWYpKSk7CisrCX0gZWxzZSB7CisrCQljaGFyICpidWY7CisrCQlsb2NhbGVfdCBsb2MgPSBuZXdsb2NhbGUoTENfTUVTU0FHRVNfTUFTSywgIiIsIChsb2NhbGVfdCkwKTsKKysJCWlmIChsb2MgPT0gKGxvY2FsZV90KTApIHsKKysJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorKwkJCQlsb2MgPSBuZXdsb2NhbGUoTENfTUVTU0FHRVNfTUFTSywKKysJCQkJCQkiUE9TSVgiLCAobG9jYWxlX3QpMCk7CisrCQkJaWYgKGxvYyA9PSAobG9jYWxlX3QpMCkKKysJCQkJYnVmID0gIm5ld2xvY2FsZSgpIGZhaWxlZCI7CisrCQl9CisrCQlpZiAobG9jICE9IChsb2NhbGVfdCkwKQorKwkJCWJ1ZiA9IHN0cmVycm9yX2woZXJyLCBsb2MpOworKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYnVmKTsKKysJCWlmIChsb2MgIT0gKGxvY2FsZV90KTApCisrCQkJZnJlZWxvY2FsZShsb2MpOworKwl9CisgCisgCWV4aXQoYWJzKGVycikpOworIH0KKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubF8zLjIuMjUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYmU4NDEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLVNVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciBhcHBsaWNhdGlvbnMgZGVhbGluZyB3aXRoIG5ldGxpbmsgc29ja2V0cyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mcmFkZWFkLm9yZy9+dGdyL2xpYm5sLyIKLVNFQ1RJT04gPSAibGlicy9uZXR3b3JrIgotCi1QRSA9ICIxIgotUFIgPSAicjEiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKLQotREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5pbmZyYWRlYWQub3JnL350Z3IvJHtCUE59L2ZpbGVzLyR7QlB9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtcGt0bG9jX3N5bnRheF9oLXJhY2UucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LXBjLWZpbGUucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjAzZjc0ZDBjZDUwMzdjYWRjOGNkZmEzMTNiYmQxOTVjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiZWI3NTkwNjc0OTU3YjkzMWRlNmI3ZjgxYzUzMGI4NWRjN2MxYWQ4ZmJkYTAxNTM5OGJjMWU4ZDFjZThlYzUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1GSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlibmwtMy5zby4qIFwKLSAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC5zby4qIFwKLSAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0iCi1SUkVQTEFDRVNfJHtQTn0gPSAibGlibmwyIgotUkNPTkZMSUNUU18ke1BOfSA9ICJsaWJubDIiCi1GSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8qLmEiCi0KLVBBQ0tBR0VTICs9ICIke1BOfS1jbGkgJHtQTn0tcm91dGUgJHtQTn0tbmYgJHtQTn0tZ2VubCAke1BOfS1pZGlhZyIKLUZJTEVTXyR7UE59LWNsaSAgID0gIiR7bGliZGlyfS9saWJubC1jbGktMy5zby4qIFwKLSAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLnNvIFwKLSAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLmxhIFwKLSAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vbmwtKiIKLUZJTEVTXyR7UE59LXJvdXRlID0gIiR7bGliZGlyfS9saWJubC1yb3V0ZS0zLnNvLioiCi1GSUxFU18ke1BOfS1pZGlhZyA9ICIke2xpYmRpcn0vbGlibmwtaWRpYWctMy5zby4qIgotRklMRVNfJHtQTn0tbmYgICAgPSAiJHtsaWJkaXJ9L2xpYm5sLW5mLTMuc28uKiIKLUZJTEVTXyR7UE59LWdlbmwgID0gIiR7bGliZGlyfS9saWJubC1nZW5sLTMuc28uKiBcCi0gICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwtZ2VubC5zby4qIFwKLSAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vZ2VubC1jdHJsLWxpc3QiCi1SUkVQTEFDRVNfJHtQTn0tZ2VubCA9ICJsaWJubC1nZW5sMiBsaWJubC1nZW5sLTMtMjAwIgotUkNPTkZMSUNUU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIGxpYm5sLWdlbmwtMy0yMDAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjk4MmYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yOC5iYgpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXBwbGljYXRpb25zIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHNvY2tldHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZnJhZGVhZC5vcmcvfnRnci9saWJubC8iCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworUEUgPSAiMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vdGhvbTMxMS8ke0JQTn0vcmVsZWFzZXMvZG93bmxvYWQvJHtCUE59JHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSkucmVwbGFjZSgnLicsJ18nKX0vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wa3Rsb2Nfc3ludGF4X2gtcmFjZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGMtZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYi1hZGQtdXRpbGl0eS1mdW5jdGlvbi1ubF9zdHJlcnJvcl9sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbGliLXN3aXRjaC10by11c2luZy1zdHJlcnJvcl9sLWluc3RlYWQtb2Ytc3RyZXJyb3Jfci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLXNyYy1zd2l0Y2gtdG8tdXNpbmctc3RyZXJyb3JfbC1pbnN0ZWFkLW9mLXN0cmVycm9yX3IucGF0Y2ggXAorIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS90aG9tMzExLyR7QlBOfS9yZWxlYXNlcyIKKworU1JDX1VSSVttZDVzdW1dID0gImJhYjEyZGIxZWI5NGE0MjEyOWY3MTJhNDRiZTkxYTY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNkNjA4OTkyYzY1NmU4ZjZlM2FiNmMxMzkxYjE2MmE1YTUxYzQ5MzM2YjkyMTlmN2YzOTBlNjFmYzU0MzdjNDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlibmwtMy5zby4qIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC5zby4qIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0iCitSUkVQTEFDRVNfJHtQTn0gPSAibGlibmwyIgorUkNPTkZMSUNUU18ke1BOfSA9ICJsaWJubDIiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovKi5hIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY2xpICR7UE59LWdlbmwgJHtQTn0taWRpYWcgJHtQTn0tbmYgJHtQTn0tcm91dGUgJHtQTn0teGZybSIKK0ZJTEVTXyR7UE59LWNsaSAgID0gIiR7bGliZGlyfS9saWJubC1jbGktMy5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9nZW5sLWN0cmwtbGlzdCBcCisgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vaWRpYWctc29ja2V0LWRldGFpbHMgXAorICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L25mLSogXAorICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L25sLSoiCitGSUxFU18ke1BOfS1nZW5sICA9ICIke2xpYmRpcn0vbGlibmwtZ2VubC0zLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sLWdlbmwuc28uKiIKK0ZJTEVTXyR7UE59LWlkaWFnID0gIiR7bGliZGlyfS9saWJubC1pZGlhZy0zLnNvLioiCitGSUxFU18ke1BOfS1uZiAgICA9ICIke2xpYmRpcn0vbGlibmwtbmYtMy5zby4qIgorRklMRVNfJHtQTn0tcm91dGUgPSAiJHtsaWJkaXJ9L2xpYm5sLXJvdXRlLTMuc28uKiIKK0ZJTEVTXyR7UE59LXhmcm0gID0gIiR7bGliZGlyfS9saWJubC14ZnJtLTMuc28uKiIKK1JSRVBMQUNFU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIgorUkNPTkZMSUNUU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODRjMmZlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLURFU0NSSVBUSU9OID0gIlRoZSBQQ1JFIGxpYnJhcnkgaXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHJlZ3VsYXIgXAotZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nIHVzaW5nIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIFBlcmwgNS4gUENSRSBcCi1oYXMgaXRzIG93biBuYXRpdmUgQVBJLCBhcyB3ZWxsIGFzIGEgc2V0IG9mIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCBcCi10byB0aGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uIEFQSS4iCi1TVU1NQVJZID0gIlBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wY3JlLm9yZyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PTdlNDkzNzgxNGFlZTE0NzU4YzFjOTViNTljODBjNDRkIgotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuY3N4LmNhbS5hYy51ay9wdWIvc29mdHdhcmUvcHJvZ3JhbW1pbmcvcGNyZS9wY3JlLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vcGNyZS1jcm9zcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMDBhYWJiZmU1NmQ1YTQ4YjI3MGY5OTliNTA4YzVhZDIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjllMDJkMzZlMjMwMjRkNmMwMmEyZTViMjUyMDRiM2E0ZmE2YWRlNDNlMGE1Zjg2OWYyNTRmNDk1MzUwNzlkZiIKLQotUyA9ICIke1dPUktESVJ9L3BjcmUtJHtQVn0iCi0KLVBST1ZJREVTICs9ICJwY3JlIgotREVQRU5EUyArPSAiYnppcDIgemxpYiIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gInBjcmU4IHVuaWNvZGUtcHJvcGVydGllcyIKLQotUEFDS0FHRUNPTkZJR1twY3JlOF0gPSAiLS1lbmFibGUtcGNyZTgsLS1kaXNhYmxlLXBjcmU4IgotUEFDS0FHRUNPTkZJR1twY3JlMTZdID0gIi0tZW5hYmxlLXBjcmUxNiwtLWRpc2FibGUtcGNyZTE2IgotUEFDS0FHRUNPTkZJR1twY3JlMzJdID0gIi0tZW5hYmxlLXBjcmUzMiwtLWRpc2FibGUtcGNyZTMyIgotUEFDS0FHRUNPTkZJR1twY3JldGVzdC1yZWFkbGluZV0gPSAiLS1lbmFibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUsLS1kaXNhYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLHJlYWRsaW5lLCIKLVBBQ0tBR0VDT05GSUdbdW5pY29kZS1wcm9wZXJ0aWVzXSA9ICItLWVuYWJsZS11bmljb2RlLXByb3BlcnRpZXMsLS1kaXNhYmxlLXVuaWNvZGUtcHJvcGVydGllcyIKLQotQklOQ09ORklHID0gIiR7YmluZGlyfS9wY3JlLWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHB0ZXN0Ci0KLUVYVFJBX09FQ09ORiA9ICJcCi0gICAgLS1lbmFibGUtbmV3bGluZS1pcy1sZiBcCi0gICAgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIFwKLSAgICAtLWVuYWJsZS11dGYgXAotICAgIC0td2l0aC1saW5rLXNpemU9MiBcCi0gICAgLS13aXRoLW1hdGNoLWxpbWl0PTEwMDAwMDAwIFwKLSIKLQotIyBTZXQgTElOS19TSVpFIGluIEJVSUxEX0NGTEFHUyBnaXZlbiB0aGF0IHRoZSBhdXRvdG9vbHMgYmJjbGFzcyB1c2UgaXQgdG8KLSMgc2V0IENGTEFHU19GT1JfQlVJTEQsIHJlcXVpcmVkIGZvciB0aGUgbGlicGNyZSBidWlsZC4KLUJVSUxEX0NGTEFHUyA9KyAiLURMSU5LX1NJWkU9MiAtSSR7Qn0iCi1DRkxBR1MgKz0gIi1EX1JFRU5UUkFOVCIKLUNYWEZMQUdTX2FwcGVuZF9wb3dlcnBjID0gIiAtbHN0ZGMrKyIKLQotUEFDS0FHRVMgPSsgImxpYnBjcmVjcHAgbGlicGNyZXBvc2l4IHBjcmVncmVwIHBjcmVncmVwLWRvYyBwY3JldGVzdCBwY3JldGVzdC1kb2MiCi0KLVNVTU1BUllfbGlicGNyZWNwcCA9ICIke1NVTU1BUll9IC0gQysrIHdyYXBwZXIgZnVuY3Rpb25zIgotU1VNTUFSWV9saWJwY3JlcG9zaXggPSAiJHtTVU1NQVJZfSAtIEMgd3JhcHBlciBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIFBPU0lYIHJlZ2V4IEFQSSIKLVNVTU1BUllfcGNyZWdyZXAgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIgotU1VNTUFSWV9wY3JlZ3JlcC1kb2MgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIC0gZG9jcyIKLVNVTU1BUllfcGNyZXRlc3QgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgotU1VNTUFSWV9wY3JldGVzdC1kb2MgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIC0gZG9jcyIKLQotRklMRVNfbGlicGNyZWNwcCA9ICIke2xpYmRpcn0vbGlicGNyZWNwcC5zby4qIgotRklMRVNfbGlicGNyZXBvc2l4ID0gIiR7bGliZGlyfS9saWJwY3JlcG9zaXguc28uKiIKLUZJTEVTX3BjcmVncmVwID0gIiR7YmluZGlyfS9wY3JlZ3JlcCIKLUZJTEVTX3BjcmVncmVwLWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JlZ3JlcC4xIgotRklMRVNfcGNyZXRlc3QgPSAiJHtiaW5kaXJ9L3BjcmV0ZXN0IgotRklMRVNfcGNyZXRlc3QtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmV0ZXN0LjEiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQl0PSR7RH0ke1BURVNUX1BBVEh9Ci0JY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAkdAotCWNwIC1yICR7U30vdGVzdGRhdGEgJHQKLQlmb3IgaSBpbiBwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0IHBjcmVncmVwIHBjcmV0ZXN0OyBcCi0JICBkbyBjcCAke0J9Ly5saWJzLyRpICR0OyBcCi0JZG9uZQotCWZvciBpIGluIFJ1blRlc3QgUnVuR3JlcFRlc3QgdGVzdC1kcml2ZXI7IFwKLQkgIGRvIGNwICR7U30vJGkgJHQ7IFwKLQlkb25lCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0NjY4YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zOS5iYgpAQCAtMCwwICsxLDgxIEBACitERVNDUklQVElPTiA9ICJUaGUgUENSRSBsaWJyYXJ5IGlzIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCByZWd1bGFyIFwKK2V4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyB1c2luZyB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyBQZXJsIDUuIFBDUkUgXAoraGFzIGl0cyBvd24gbmF0aXZlIEFQSSwgYXMgd2VsbCBhcyBhIHNldCBvZiB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNvcnJlc3BvbmQgXAordG8gdGhlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBBUEkuIgorU1VNTUFSWSA9ICJQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGNyZS5vcmciCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT1iODIyMWNiZjQzYzU1ODdmOTBjY2YyMjhmMTE4NWNjMiIKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmNzeC5jYW0uYWMudWsvcHViL3NvZnR3YXJlL3Byb2dyYW1taW5nL3BjcmUvcGNyZS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BjcmUtY3Jvc3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXBjcmUtbmFtZS1jb2xsaXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImUzZmNhNzY1MGEwNTU2YTI2NDc4MjE2NzlkODFmNTg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI4NTgwOTlmODI0ODMwMzFlZTAyMDkyNzExNjg5ZTcyNDU1ODZhZGE0OWU1MzRhMDZlNjc4YjhlYTk1NDllOGIiCisKK1MgPSAiJHtXT1JLRElSfS9wY3JlLSR7UFZ9IgorCitQUk9WSURFUyArPSAicGNyZSIKK0RFUEVORFMgKz0gImJ6aXAyIHpsaWIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJwY3JlOCB1bmljb2RlLXByb3BlcnRpZXMiCisKK1BBQ0tBR0VDT05GSUdbcGNyZThdID0gIi0tZW5hYmxlLXBjcmU4LC0tZGlzYWJsZS1wY3JlOCIKK1BBQ0tBR0VDT05GSUdbcGNyZTE2XSA9ICItLWVuYWJsZS1wY3JlMTYsLS1kaXNhYmxlLXBjcmUxNiIKK1BBQ0tBR0VDT05GSUdbcGNyZTMyXSA9ICItLWVuYWJsZS1wY3JlMzIsLS1kaXNhYmxlLXBjcmUzMiIKK1BBQ0tBR0VDT05GSUdbcGNyZXRlc3QtcmVhZGxpbmVdID0gIi0tZW5hYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLC0tZGlzYWJsZS1wY3JldGVzdC1saWJyZWFkbGluZSxyZWFkbGluZSwiCitQQUNLQUdFQ09ORklHW3VuaWNvZGUtcHJvcGVydGllc10gPSAiLS1lbmFibGUtdW5pY29kZS1wcm9wZXJ0aWVzLC0tZGlzYWJsZS11bmljb2RlLXByb3BlcnRpZXMiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNyZS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0tZW5hYmxlLW5ld2xpbmUtaXMtbGYgXAorICAgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcyBcCisgICAgLS1lbmFibGUtdXRmIFwKKyAgICAtLXdpdGgtbGluay1zaXplPTIgXAorICAgIC0td2l0aC1tYXRjaC1saW1pdD0xMDAwMDAwMCBcCisiCisKKyMgU2V0IExJTktfU0laRSBpbiBCVUlMRF9DRkxBR1MgZ2l2ZW4gdGhhdCB0aGUgYXV0b3Rvb2xzIGJiY2xhc3MgdXNlIGl0IHRvCisjIHNldCBDRkxBR1NfRk9SX0JVSUxELCByZXF1aXJlZCBmb3IgdGhlIGxpYnBjcmUgYnVpbGQuCitCVUlMRF9DRkxBR1MgPSsgIi1ETElOS19TSVpFPTIgLUkke0J9IgorQ0ZMQUdTICs9ICItRF9SRUVOVFJBTlQiCitDWFhGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWxzdGRjKysiCisKK2V4cG9ydCBDQ0xEX0ZPUl9CVUlMRCA9IiR7QlVJTERfQ0NMRH0iCisKK1BBQ0tBR0VTID0rICJsaWJwY3JlY3BwIGxpYnBjcmVwb3NpeCBwY3JlZ3JlcCBwY3JlZ3JlcC1kb2MgcGNyZXRlc3QgcGNyZXRlc3QtZG9jIgorCitTVU1NQVJZX2xpYnBjcmVjcHAgPSAiJHtTVU1NQVJZfSAtIEMrKyB3cmFwcGVyIGZ1bmN0aW9ucyIKK1NVTU1BUllfbGlicGNyZXBvc2l4ID0gIiR7U1VNTUFSWX0gLSBDIHdyYXBwZXIgZnVuY3Rpb25zIGJhc2VkIG9uIHRoZSBQT1NJWCByZWdleCBBUEkiCitTVU1NQVJZX3BjcmVncmVwID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyIKK1NVTU1BUllfcGNyZWdyZXAtZG9jID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyAtIGRvY3MiCitTVU1NQVJZX3BjcmV0ZXN0ID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK1NVTU1BUllfcGNyZXRlc3QtZG9jID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAtIGRvY3MiCisKK0ZJTEVTX2xpYnBjcmVjcHAgPSAiJHtsaWJkaXJ9L2xpYnBjcmVjcHAuc28uKiIKK0ZJTEVTX2xpYnBjcmVwb3NpeCA9ICIke2xpYmRpcn0vbGlicGNyZXBvc2l4LnNvLioiCitGSUxFU19wY3JlZ3JlcCA9ICIke2JpbmRpcn0vcGNyZWdyZXAiCitGSUxFU19wY3JlZ3JlcC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZWdyZXAuMSIKK0ZJTEVTX3BjcmV0ZXN0ID0gIiR7YmluZGlyfS9wY3JldGVzdCIKK0ZJTEVTX3BjcmV0ZXN0LWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JldGVzdC4xIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHQKKwljcCAtciAke1N9L3Rlc3RkYXRhICR0CisJZm9yIGkgaW4gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBwY3JlZ3JlcCBwY3JldGVzdDsgXAorCSAgZG8gY3AgJHtCfS8ubGlicy8kaSAkdDsgXAorCWRvbmUKKwlmb3IgaSBpbiBSdW5UZXN0IFJ1bkdyZXBUZXN0IHRlc3QtZHJpdmVyOyBcCisJICBkbyBjcCAke1N9LyRpICR0OyBcCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5LzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5LzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU1MmYyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLUZyb20gZjVmMmMyMjg5ZWIzNWViODA0YzFjMzVlNDZjYTQxYjU4ZTRjYWUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDYgQXByIDIwMTUgMTQ6MTM6NDkgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gdGVzdDogSW5jbHVkZSA8c3lzL3NlbGVjdC5oPiBmb3Igc2VsZWN0KCkKLQotQXMgcGVyIHBvc2l4IHdlIG5lZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUgb3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoIGVycm9ycyBsaWtlCi0KLS9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6IEluIG1lbWJlciBmdW5jdGlvbiAnYm9vbCBUZXN0U2VydmVyOjpsb29wKCknOgotL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDo4MDo0OiBlcnJvcjogJ2ZkX3NldCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCi0gICAgZmRfc2V0IGZkczsKLSAgICBeCi0vaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOjg5OjE0OiBlcnJvcjogJ2Zkcycgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCi0gICAgRkRfWkVSTyAoJmZkcyk7Ci08SklSQSBUSUNLRVQgIzE+LCA8SklSQSBUSUNLRVQgIzI+LCA8SklSQSBUSUNLRVQgI24+IDogPG9uZSBsaW5lIHN1bW1hcnkgb2YgY2hhbmdlPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGxpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcCB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwIGIvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwCi1pbmRleCBhNjFmYzRiLi5iZGE0NjQ2IDEwMDY0NAotLS0tIGEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwCi0rKysgYi9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKLUBAIC0zLDYgKzMsNyBAQAotICNpbmNsdWRlIDxzc3RyZWFtPgotICNpbmNsdWRlIDxzdHJpbmc+Ci0gCi0rI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KLSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0gI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNjOTBiYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJyYXJ5IHByb3ZpZGluZyBhdXRvbWF0aWMgcHJveHkgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IgotSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xpYnByb3h5LyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xpYnByb3h5L2lzc3Vlcy9saXN0IgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJMR1BMdjIuMSsiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91dGlscy9wcm94eS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PTU1MTUyYTEwMDZkN2RhZmJlZjMyYmFmOWMzMGE5OWMwIgotCi1ERVBFTkRTID0gImdsaWItMi4wIgotCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9saWJwLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjNjZDFhZTJhNGFiZWNmNDRiM2YyNGQ2NjM5ZDJjZDg0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImRjM2YzM2RlNTQxNjM3MThmODJiM2U3YzQ5NmE3ZGU5N2Y4ODYyNTc4NDE0YjhlY2FhZDNjYmZlNDgyMTg2NGIiCi0KLWluaGVyaXQgY21ha2UgcGtnY29uZmlnCi0KLVBBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dub21lJywgJycsIGQpfSBnbm9tZTMiCi1QQUNLQUdFQ09ORklHW2dub21lXSA9ICItRFdJVEhfR05PTUU9eWVzLC1EV0lUSF9HTk9NRT1ubyxnY29uZiIKLVBBQ0tBR0VDT05GSUdbZ25vbWUzXSA9ICItRFdJVEhfR05PTUUzPXllcywtRFdJVEhfR05PTUUzPW5vIgotCi1FWFRSQV9PRUNNQUtFICs9ICIgXAotICAgIC1EV0lUSF9LREU0PW5vIFwKLSAgICAtRFdJVEhfTU9aSlM9bm8gXAotICAgIC1EV0lUSF9OTT1ubyBcCi0gICAgLURXSVRIX1BFUkw9bm8gXAotICAgIC1EV0lUSF9QWVRIT049bm8gXAotICAgIC1EV0lUSF9XRUJLSVQ9bm8gXAotICAgIC1ETElCX0lOU1RBTExfRElSPSR7bGliZGlyfSBcCi0gICAgLURMSUJFWEVDX0lOU1RBTExfRElSPSR7bGliZXhlY2Rpcn0gXAotIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8ke1BWfS9tb2R1bGVzIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NtYWtlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0MGUyMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTMuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHByb3ZpZGluZyBhdXRvbWF0aWMgcHJveHkgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xpYnByb3h5L2xpYnByb3h5IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vbGlicHJveHkvbGlicHJveHkvaXNzdWVzIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91dGlscy9wcm94eS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PTU1MTUyYTEwMDZkN2RhZmJlZjMyYmFmOWMzMGE5OWMwIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS8ke0JQTn0vJHtCUE59L2FyY2hpdmUvJHtQVn0udGFyLmd6IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xpYnByb3h5L2xpYnByb3h5L3JlbGVhc2VzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGUyOTNiYjMxMWYxODVhMmZmYTM0OTI3MDBhNjk0YzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDYxMGJjMGVmODFhMThiYTQxOGQ3NTljNWY0Zjg3YmY3MTAyMjI5YTkxNTNmYjM5N2Q3ZDQ5MDk4NzMzMGZmZCIKKworaW5oZXJpdCBjbWFrZSBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ25vbWUnLCAnJywgZCl9IGdub21lMyIKK1BBQ0tBR0VDT05GSUdbZ25vbWVdID0gIi1EV0lUSF9HTk9NRT15ZXMsLURXSVRIX0dOT01FPW5vLGdjb25mIgorUEFDS0FHRUNPTkZJR1tnbm9tZTNdID0gIi1EV0lUSF9HTk9NRTM9eWVzLC1EV0lUSF9HTk9NRTM9bm8iCisKK0VYVFJBX09FQ01BS0UgKz0gIiBcCisgICAgLURXSVRIX0tERTQ9bm8gXAorICAgIC1EV0lUSF9NT1pKUz1ubyBcCisgICAgLURXSVRIX05NPW5vIFwKKyAgICAtRFdJVEhfUEVSTD1ubyBcCisgICAgLURXSVRIX1BZVEhPTj1ubyBcCisgICAgLURXSVRIX1dFQktJVD1ubyBcCisgICAgLURMSUJfSU5TVEFMTF9ESVI9JHtsaWJkaXJ9IFwKKyAgICAtRExJQkVYRUNfSU5TVEFMTF9ESVI9JHtsaWJleGVjZGlyfSBcCisiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyR7UFZ9L21vZHVsZXMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUyLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUyLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZTNkYjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41Mi4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotU1VNTUFSWSA9ICJBbiBIVFRQIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gaW4gQyIKLUhPTUVQQUdFID0gImh0dHBzOi8vd2lraS5nbm9tZS5vcmcvUHJvamVjdHMvbGlic291cCIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJ4MTEvZ25vbWUvbGlicyIKLUxJQ0VOU0UgPSAiTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGxpYnhtbDIgc3FsaXRlMyBpbnRsdG9vbC1uYXRpdmUiCi0KLVNIUlRfVkVSID0gIiR7QGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJylbMV19IgotCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9saWJzb3VwLyR7U0hSVF9WRVJ9L2xpYnNvdXAtJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZTQ3NTdkMDkwMTJlZDkzODIyYjFlZTQxNDM1ZmVjMjQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGI1NTYyOGI1YzdkOTUyOTQ1YmI3MWIyMzY0NjkwNTdjOGRmYjhkZWEwYzI3MTUxMzU3OWM2MjczYzIwOTNkYyIKLQotUyA9ICIke1dPUktESVJ9L2xpYnNvdXAtJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotIyBsaWJzb3VwLWdub21lIGlzIGVudGlyZWx5IGRlcHJlY2F0ZWQgYW5kIGp1c3Qgc3R1YnMgaW4gMi40MiBvbndhcmRzLiBEaXNhYmxlIGJ5IGRlZmF1bHQuCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tnbm9tZV0gPSAiLS13aXRoLWdub21lLC0td2l0aG91dC1nbm9tZSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS12YWxhIgotCi0jIFdoZW4gYnVpbHQgd2l0aG91dCBnbm9tZSBzdXBwb3J0LCBsaWJzb3VwLTIuNCB3aWxsIGNvbnRhaW4gb25seSBvbmUgc2hhcmVkIGxpYgotIyBhbmQgd2lsbCB0aGVyZWZvcmUgYmVjb21lIHN1YmplY3QgdG8gcmVuYW1pbmcgYnkgZGViaWFuLmJiY2xhc3MuIFByZXZlbnQKLSMgcmVuYW1pbmcgaW4gb3JkZXIgdG8ga2VlcCB0aGUgcGFja2FnZSBuYW1lIGNvbnNpc3RlbnQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCi0jIGdub21lIHN1cHBvcnQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLURFQklBTl9OT0FVVE9OQU1FXyR7UE59ID0gIjEiCi0KLSMgZ2xpYi1uZXR3b3JraW5nIGlzIG5lZWRlZCBmb3IgU1NMLCBwcm94aWVzLCBldGMuCi1SUkVDT01NRU5EU18ke1BOfSA9ICJnbGliLW5ldHdvcmtpbmciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjU0LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjU0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzYTlmZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTQuMS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkFuIEhUVFAgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbiBDIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Qcm9qZWN0cy9saWJzb3VwIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9nbm9tZS9saWJzIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgbGlieG1sMiBzcWxpdGUzIGludGx0b29sLW5hdGl2ZSIKKworU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2xpYnNvdXAvJHtTSFJUX1ZFUn0vbGlic291cC0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3M2IxZmI3NzRkZTE2YzI5YjM4MGY4NzAxNmY5ZjlkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0N2I0MmMyMzIwMzQ3MzRkNjZlNWYwOTMwMjU4NDNhNWQ4Y2M0YjIzNTdjMDExMDg1YTJmZDA0ZWYwMmRkNjMzIgorCitTID0gIiR7V09SS0RJUn0vbGlic291cC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jCisKKyMgbGlic291cC1nbm9tZSBpcyBlbnRpcmVseSBkZXByZWNhdGVkIGFuZCBqdXN0IHN0dWJzIGluIDIuNDIgb253YXJkcy4gRGlzYWJsZSBieSBkZWZhdWx0LgorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbZ25vbWVdID0gIi0td2l0aC1nbm9tZSwtLXdpdGhvdXQtZ25vbWUiCitQQUNLQUdFQ09ORklHW2dzc2FwaV0gPSAiLS13aXRoLWdzc2FwaSwtLXdpdGhvdXQtZ3NzYXBpLGtyYjUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdmFsYSIKKworIyBXaGVuIGJ1aWx0IHdpdGhvdXQgZ25vbWUgc3VwcG9ydCwgbGlic291cC0yLjQgd2lsbCBjb250YWluIG9ubHkgb25lIHNoYXJlZCBsaWIKKyMgYW5kIHdpbGwgdGhlcmVmb3JlIGJlY29tZSBzdWJqZWN0IHRvIHJlbmFtaW5nIGJ5IGRlYmlhbi5iYmNsYXNzLiBQcmV2ZW50CisjIHJlbmFtaW5nIGluIG9yZGVyIHRvIGtlZXAgdGhlIHBhY2thZ2UgbmFtZSBjb25zaXN0ZW50IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorIyBnbm9tZSBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCitERUJJQU5fTk9BVVRPTkFNRV8ke1BOfSA9ICIxIgorCisjIGdsaWItbmV0d29ya2luZyBpcyBuZWVkZWQgZm9yIFNTTCwgcHJveGllcywgZXRjLgorUlJFQ09NTUVORFNfJHtQTn0gPSAiZ2xpYi1uZXR3b3JraW5nIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLUZpeC1idWlsZC1vbi1taXBzLW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MjZmY2MuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLUZyb20gZTYyM2M3NzAzOTQ1YTVlYjZjOWEzMDU4NmVjNWUyM2IyZjczOTZmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDIzIE1hciAyMDE2IDA2OjA4OjU5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBvbiBtaXBzL211c2wKLQotRG8gbm90IGluY2x1ZGUgZW5kaWFuLmggb24gbXVzbCBpdCBpbmNsdWRlcwotZnVydGhlciBoZWFkZXJzIHdoaWNoIGNhbiBub3QgYmUgY29tcGlsZWQgaW4gX19BU1NFTUJMRVJfXwotIG1vZGUKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSBzcmMvY29yZWR1bXAvX1VDRF9pbnRlcm5hbC5oIHwgMzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIHNyYy9taXBzL2dldGNvbnRleHQuUyAgICAgICAgfCAgMyArLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvY29yZWR1bXAvX1VDRF9pbnRlcm5hbC5oIGIvc3JjL2NvcmVkdW1wL19VQ0RfaW50ZXJuYWwuaAotaW5kZXggM2M5NWEyYS4uODBhY2MxNSAxMDA2NDQKLS0tLSBhL3NyYy9jb3JlZHVtcC9fVUNEX2ludGVybmFsLmgKLSsrKyBiL3NyYy9jb3JlZHVtcC9fVUNEX2ludGVybmFsLmgKLUBAIC0zNCw2ICszNCw3IEBAIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSAjaWZkZWYgSEFWRV9TWVNfUFJPQ0ZTX0gKLSAjaW5jbHVkZSA8c3lzL3Byb2Nmcy5oPiAvKiBzdHJ1Y3QgZWxmX3Byc3RhdHVzICovCi0gI2VuZGlmCi0rI2luY2x1ZGUgPHN5cy9yZWcuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPGxpbWl0cy5oPgotQEAgLTQ0LDYgKzQ1LDM5IEBAIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSAKLSAjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKLSAKLSsjaWZuZGVmIF9fR0xJQkNfXwotKyNkZWZpbmUgRUZfUkVHMAkJCTYKLSsjZGVmaW5lIEVGX1JFRzEJCQk3Ci0rI2RlZmluZSBFRl9SRUcyCQkJOAotKyNkZWZpbmUgRUZfUkVHMwkJCTkKLSsjZGVmaW5lIEVGX1JFRzQJCQkxMAotKyNkZWZpbmUgRUZfUkVHNQkJCTExCi0rI2RlZmluZSBFRl9SRUc2CQkJMTIKLSsjZGVmaW5lIEVGX1JFRzcJCQkxMwotKyNkZWZpbmUgRUZfUkVHOAkJCTE0Ci0rI2RlZmluZSBFRl9SRUc5CQkJMTUKLSsjZGVmaW5lIEVGX1JFRzEwCQkxNgotKyNkZWZpbmUgRUZfUkVHMTEJCTE3Ci0rI2RlZmluZSBFRl9SRUcxMgkJMTgKLSsjZGVmaW5lIEVGX1JFRzEzCQkxOQotKyNkZWZpbmUgRUZfUkVHMTQJCTIwCi0rI2RlZmluZSBFRl9SRUcxNQkJMjEKLSsjZGVmaW5lIEVGX1JFRzE2CQkyMgotKyNkZWZpbmUgRUZfUkVHMTcJCTIzCi0rI2RlZmluZSBFRl9SRUcxOAkJMjQKLSsjZGVmaW5lIEVGX1JFRzE5CQkyNQotKyNkZWZpbmUgRUZfUkVHMjAJCTI2Ci0rI2RlZmluZSBFRl9SRUcyMQkJMjcKLSsjZGVmaW5lIEVGX1JFRzIyCQkyOAotKyNkZWZpbmUgRUZfUkVHMjMJCTI5Ci0rI2RlZmluZSBFRl9SRUcyNAkJMzAKLSsjZGVmaW5lIEVGX1JFRzI1CQkzMQotKyNkZWZpbmUgRUZfUkVHMjgJCTM0Ci0rI2RlZmluZSBFRl9SRUcyOQkJMzUKLSsjZGVmaW5lIEVGX1JFRzMwCQkzNgotKyNkZWZpbmUgRUZfUkVHMzEJCTM3Ci0rI2VuZGlmCi0rCi0gCi0gI2lmIFNJWkVPRl9PRkZfVCA9PSA0Ci0gdHlwZWRlZiB1aW50MzJfdCB1b2ZmX3Q7Ci1kaWZmIC0tZ2l0IGEvc3JjL21pcHMvZ2V0Y29udGV4dC5TIGIvc3JjL21pcHMvZ2V0Y29udGV4dC5TCi1pbmRleCBkMWRiZDU3Li5kZTliNjgxIDEwMDY0NAotLS0tIGEvc3JjL21pcHMvZ2V0Y29udGV4dC5TCi0rKysgYi9zcmMvbWlwcy9nZXRjb250ZXh0LlMKLUBAIC0yNCwxMiArMjQsMTEgQEAgT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotIAotICNpbmNsdWRlICJvZmZzZXRzLmgiCi0tI2luY2x1ZGUgPGVuZGlhbi5oPgotIAotIAkudGV4dAotIAotICNpZiBfTUlQU19TSU0gPT0gX0FCSU8zMgotLSMgaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotKyMgaWYgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18KLSAjICBkZWZpbmUgT0ZGU0VUIDQKLSAjIGVsc2UKLSAjICBkZWZpbmUgT0ZGU0VUIDAKLS0tIAotMS44LjMuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY5NzJmOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRnJvbSAzOTZiNmM3YWI3MzdlMmJmZjI0NGQ2NDA2MDFjNDM2YTI2MjYwY2ExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQXJ1biBTaGFybWEgPGFydW5Ac2hhcm1hLWhvbWUubmV0PgotRGF0ZTogRnJpLCAxOSBKdW4gMjAxNSAxOTo0NzoyMiAtMDcwMAotU3ViamVjdDogW1BBVENIXSBJbnZhbGlkIGR3YXJmIG9wY29kZXMgY2FuIGNhdXNlIHJlZmVyZW5jZXMgYmV5b25kIHRoZSBlbmQgb2YKLSB0aGUgYXJyYXkuCi0KLVVwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgotLS0tCi0gaW5jbHVkZS9kd2FyZl9pLmggfCAgICAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9pbmNsdWRlL2R3YXJmX2kuaCBiL2luY2x1ZGUvZHdhcmZfaS5oCi1pbmRleCAxZTYyMzFlLi40YTAyYTdkIDEwMDY0NAotLS0tIGEvaW5jbHVkZS9kd2FyZl9pLmgKLSsrKyBiL2luY2x1ZGUvZHdhcmZfaS5oCi1AQCAtMjAsNyArMjAsNyBAQAotIGV4dGVybiBjb25zdCB1aW50OF90IGR3YXJmX3RvX3Vud19yZWdudW1fbWFwW0RXQVJGX1JFR05VTV9NQVBfTEVOR1RIXTsKLSAvKiBSRUcgaXMgZXZhbHVhdGVkIG11bHRpcGxlIHRpbWVzOyBpdCBiZXR0ZXIgYmUgc2lkZS1lZmZlY3RzIGZyZWUhICAqLwotICMgZGVmaW5lIGR3YXJmX3RvX3Vud19yZWdudW0ocmVnKQkJCQkJICBcCi0tICAoKChyZWcpIDw9IERXQVJGX1JFR05VTV9NQVBfTEVOR1RIKSA/IGR3YXJmX3RvX3Vud19yZWdudW1fbWFwW3JlZ10gOiAwKQotKyAgKCgocmVnKSA8IERXQVJGX1JFR05VTV9NQVBfTEVOR1RIKSA/IGR3YXJmX3RvX3Vud19yZWdudW1fbWFwW3JlZ10gOiAwKQotICNlbmRpZgotIAotICNpZmRlZiBVTldfTE9DQUxfT05MWQotLS0gCi0xLjcuOS41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLWRpc2FibGUtdGVzdHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1kaXNhYmxlLXRlc3RzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzA5ZmZkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLWRpc2FibGUtdGVzdHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1Gcm9tIGIwNzQzNWE5MGJkNjM2ZWU3MThlMjIzOGZiNDZjNzRhNmRkNWUwNjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCAyMiBNYXIgMjAxNiAxNjo0MToxMyArMDAwMAotU3ViamVjdDogW1BBVENIXSBkaXNhYmxlIHRlc3RzCi0KLVRlc3RzIHVzZSBnZXRjb250ZXh0KCkgQVBJIHdoaWNoIGlzCi1ub3QgdGhlcmUgb24gbXVzbAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW01VU0wtb25seV0KLQotIE1ha2VmaWxlLmFtIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggZTI0ZmUxZS4uMTUzODBlNCAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmFtCi0rKysgYi9NYWtlZmlsZS5hbQotQEAgLTM5LDcgKzM5LDcgQEAgZW5kaWYKLSAKLSBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS9saWJ1bndpbmQtY29tbW9uLmgKLSAKLS1TVUJESVJTID0gc3JjIHRlc3RzIGRvYwotK1NVQkRJUlMgPSBzcmMgZG9jCi0gCi0gbm9pbnN0X0hFQURFUlMgPSBpbmNsdWRlL2R3YXJmLmggaW5jbHVkZS9kd2FyZl9pLmggaW5jbHVkZS9kd2FyZi1laC5oCVwKLSAJaW5jbHVkZS9jb21waWxlci5oIGluY2x1ZGUvbGlidW53aW5kX2kuaCBpbmNsdWRlL21lbXBvb2wuaAlcCi0tLSAKLTEuOC4zLjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FBcmNoNjQtcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyOGVjMzIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FBcmNoNjQtcG9ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MjkgKzAsMCBAQAotRnJvbSBhYzZjMGE2NTM1OTc1ZjFkYzJkYTZlNGUyNzY2NjE0YmFhYzJhMTRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogWXZhbiBSb3V4IDx5dmFuLnJvdXhAbGluYXJvLm9yZz4KLURhdGU6IFNhdCwgMTEgTWF5IDIwMTMgMDk6MTg6MjMgLTA2MDAKLVN1YmplY3Q6IFtQQVRDSF0gQUFyY2g2NCBwb3J0LgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLS0tLQotIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgCi0gUkVBRE1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKLSBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2IAotIGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaCAgICAgICAgICB8ICAxODcgKysrKysrKysrKysrKysrKysrKysrKwotIGluY2x1ZGUvbGlidW53aW5kLmguaW4gICAgICAgICAgICAgICB8ICAgIDQgCi0gaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmggIHwgICA1MiArKysrKysKLSBpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaCAgICAgICAgfCAgIDMzICsrKwotIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmggICB8ICAyOTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBpbmNsdWRlL3RkZXAvZHdhcmYtY29uZmlnLmggICAgICAgICAgfCAgICA0IAotIGluY2x1ZGUvdGRlcC9qbXBidWYuaCAgICAgICAgICAgICAgICB8ICAgIDIgCi0gaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4gICAgICAgIHwgICAgNCAKLSBzcmMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgIDM5ICsrKysKLSBzcmMvYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYyAgICAgfCAgIDYwICsrKysrKysKLSBzcmMvYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jICAgICAgICAgfCAgIDM5ICsrKysKLSBzcmMvYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMgICAgICAgICAgfCAgMTAwICsrKysrKysrKysrCi0gc3JjL2FhcmNoNjQvR2dsb2JhbC5jICAgICAgICAgICAgICAgIHwgICA1NyArKysrKysKLSBzcmMvYWFyY2g2NC9HaW5pdC5jICAgICAgICAgICAgICAgICAgfCAgMTg3ICsrKysrKysrKysrKysrKysrKysrKysKLSBzcmMvYWFyY2g2NC9HaW5pdF9sb2NhbC5jICAgICAgICAgICAgfCAgIDU1ICsrKysrKwotIHNyYy9hYXJjaDY0L0dpbml0X3JlbW90ZS5jICAgICAgICAgICB8ICAgNDUgKysrKysKLSBzcmMvYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMgICAgICAgfCAgIDY0ICsrKysrKysKLSBzcmMvYWFyY2g2NC9HcmVncy5jICAgICAgICAgICAgICAgICAgfCAgMTEzICsrKysrKysrKysrKysKLSBzcmMvYWFyY2g2NC9HcmVzdW1lLmMgICAgICAgICAgICAgICAgfCAgMTc3ICsrKysrKysrKysrKysrKysrKysrKwotIHNyYy9hYXJjaDY0L0dzdGVwLmMgICAgICAgICAgICAgICAgICB8ICAxMjkgKysrKysrKysrKysrKysrCi0gc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMgICAgIHwgICAgNSAKLSBzcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jICAgICAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYyAgICAgICAgICB8ICAgIDUgCi0gc3JjL2FhcmNoNjQvTGdsb2JhbC5jICAgICAgICAgICAgICAgIHwgICAgNSAKLSBzcmMvYWFyY2g2NC9MaW5pdC5jICAgICAgICAgICAgICAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMgICAgICAgICAgICB8ICAgIDUgCi0gc3JjL2FhcmNoNjQvTGluaXRfcmVtb3RlLmMgICAgICAgICAgIHwgICAgNSAKLSBzcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMgICAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L0xyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCi0gc3JjL2FhcmNoNjQvTHJlc3VtZS5jICAgICAgICAgICAgICAgIHwgICAgNSAKLSBzcmMvYWFyY2g2NC9Mc3RlcC5jICAgICAgICAgICAgICAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L2dlbi1vZmZzZXRzLmMgICAgICAgICAgICB8ICAgNjggKysrKysrKysKLSBzcmMvYWFyY2g2NC9pbml0LmggICAgICAgICAgICAgICAgICAgfCAgMTI3ICsrKysrKysrKysrKysrKwotIHNyYy9hYXJjaDY0L2lzX2ZwcmVnLmMgICAgICAgICAgICAgICB8ICAgMzIgKysrCi0gc3JjL2FhcmNoNjQvb2Zmc2V0cy5oICAgICAgICAgICAgICAgIHwgICA0OSArKysrKwotIHNyYy9hYXJjaDY0L3JlZ25hbWUuYyAgICAgICAgICAgICAgICB8ICAxMDYgKysrKysrKysrKysrCi0gc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TICAgICAgICAgICAgIHwgICAxMiArCi0gc3JjL2FhcmNoNjQvdW53aW5kX2kuaCAgICAgICAgICAgICAgIHwgICA0MyArKysrKwotIHNyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYyB8ICAgIDUgCi0gc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYyAgICAgICAgIHwgICAzNiArKysrCi0gNDMgZmlsZXMgY2hhbmdlZCwgMjE4NCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HZ2xvYmFsLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXQuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdF9sb2NhbC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0X3JlbW90ZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HcmVncy5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dyZXN1bWUuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9Hc3RlcC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xnbG9iYWwuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXRfcmVtb3RlLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xyZWdzLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHJlc3VtZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xzdGVwLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9pbml0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvaXNfZnByZWcuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9vZmZzZXRzLmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvcmVnbmFtZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3NpZ2xvbmdqbXAuUwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC91bndpbmRfaS5oCi0KLS0tLSBhL01ha2VmaWxlLmFtCi0rKysgYi9NYWtlZmlsZS5hbQotQEAgLTIsNiArMiw5IEBAIGluY2x1ZGVfSEVBREVSUyA9IGluY2x1ZGUvbGlidW53aW5kLWR5bmEKLSAgICAgaW5jbHVkZS9saWJ1bndpbmQtcHRyYWNlLmggXAotICAgICBpbmNsdWRlL2xpYnVud2luZC1jb3JlZHVtcC5oCi0gCi0raWYgQVJDSF9BQVJDSDY0Ci0raW5jbHVkZV9IRUFERVJTICs9IGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAotK2VuZGlmCi0gaWYgQVJDSF9BUk0KLSBpbmNsdWRlX0hFQURFUlMgKz0gaW5jbHVkZS9saWJ1bndpbmQtYXJtLmgKLSBlbmRpZgotQEAgLTQxLDYgKzQ0LDkgQEAgU1VCRElSUyA9IHNyYyB0ZXN0cyBkb2MKLSBub2luc3RfSEVBREVSUyA9IGluY2x1ZGUvZHdhcmYuaCBpbmNsdWRlL2R3YXJmX2kuaCBpbmNsdWRlL2R3YXJmLWVoLmgJXAotIAlpbmNsdWRlL2NvbXBpbGVyLmggaW5jbHVkZS9saWJ1bndpbmRfaS5oIGluY2x1ZGUvbWVtcG9vbC5oCVwKLSAJaW5jbHVkZS9yZW1vdGUuaAkJCQkJCVwKLSsJaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgJCQkJXAotKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAkJCQkJXAotKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCQkJCVwKLSAJaW5jbHVkZS90ZGVwLWFybS9kd2FyZi1jb25maWcuaAlpbmNsdWRlL3RkZXAtYXJtL2V4X3RhYmxlcy5oCVwKLSAJaW5jbHVkZS90ZGVwLWFybS9qbXBidWYuaCBpbmNsdWRlL3RkZXAtYXJtL2xpYnVud2luZF9pLmgJXAotIAlpbmNsdWRlL3RkZXAtaWE2NC9qbXBidWYuaCBpbmNsdWRlL3RkZXAtaWE2NC9yc2UuaCAJCVwKLS0tLSBhL1JFQURNRQotKysrIGIvUkVBRE1FCi1AQCAtOSw2ICs5LDcgQEAgc2V2ZXJhbCBhcmNoaXRlY3R1cmUvb3BlcmF0aW5nLXN5c3RlbSBjbwotICBMaW51eC9JQS02NDoJRnVsbHkgdGVzdGVkIGFuZCBzdXBwb3J0ZWQuCi0gIExpbnV4L1BBUklTQzoJV29ya3Mgd2VsbCwgYnV0IEMgbGlicmFyeSBtaXNzaW5nIHVud2luZC1pbmZvLgotICBIUC1VWC9JQS02NDoJTW9zdGx5IHdvcmtzIGJ1dCBrbm93biB0byBoYXZlIHNvbWUgc2VyaW91cyBsaW1pdGF0aW9ucy4KLSsgTGludXgvQUFyY2g2NDoJTmV3bHkgYWRkZWQuCi0gIExpbnV4L1BQQzY0OglOZXdseSBhZGRlZC4KLSAgTGludXgvU3VwZXJIOglOZXdseSBhZGRlZC4KLSAgRnJlZUJTRC9pMzg2OglOZXdseSBhZGRlZC4KLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMTA0LDcgKzEwNCw3IEBAIFNFVF9BUkNIKFskdGFyZ2V0X2NwdV0sW3RhcmdldF9hcmNoXSkKLSAKLSBBQ19BUkdfRU5BQkxFKGNvcmVkdW1wLAotIAlBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY29yZWR1bXBdLFtidWlsZGluZyBsaWJ1bndpbmQtY29yZWR1bXAgbGlicmFyeV0pLCwKLS0gICAgICAgIFtBU19DQVNFKFskaG9zdF9hcmNoXSwgW2FybSp8bWlwcyp8c2gqfHg4NipdLCBbZW5hYmxlX2NvcmVkdW1wPXllc10sIFtlbmFibGVfY29yZWR1bXA9bm9dKV0KLSsgICAgICAgIFtBU19DQVNFKFskaG9zdF9hcmNoXSwgW2FhcmNoNjQqfGFybSp8bWlwcyp8c2gqfHg4NipdLCBbZW5hYmxlX2NvcmVkdW1wPXllc10sIFtlbmFibGVfY29yZWR1bXA9bm9dKV0KLSApCi0gCi0gQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBzaG91bGQgYnVpbGQgbGlidW53aW5kLWNvcmVkdW1wXSkKLUBAIC0xMjEsNiArMTIxLDcgQEAgQUNfTVNHX1JFU1VMVChbJHRhcmdldF9vc10pCi0gCi0gQU1fQ09ORElUSU9OQUwoQlVJTERfQ09SRURVTVAsIHRlc3QgeCRlbmFibGVfY29yZWR1bXAgPSB4eWVzKQotIEFNX0NPTkRJVElPTkFMKFJFTU9URV9PTkxZLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggIT0geCRob3N0X2FyY2gpCi0rQU1fQ09ORElUSU9OQUwoQVJDSF9BQVJDSDY0LCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4YWFyY2g2NCkKLSBBTV9DT05ESVRJT05BTChBUkNIX0FSTSwgdGVzdCB4JHRhcmdldF9hcmNoID0geGFybSkKLSBBTV9DT05ESVRJT05BTChBUkNIX0lBNjQsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhpYTY0KQotIEFNX0NPTkRJVElPTkFMKEFSQ0hfSFBQQSwgdGVzdCB4JHRhcmdldF9hcmNoID0geGhwcGEpCi1AQCAtMTM3LDcgKzEzOCw3IEBAIEFNX0NPTkRJVElPTkFMKE9TX0ZSRUVCU0QsIGV4cHIgeCR0YXJnZXQKLSBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBFTEYgaGVscGVyIHdpZHRoXSkKLSBjYXNlICIke3RhcmdldF9hcmNofSIgaW4KLSAoYXJtfGhwcGF8cHBjMzJ8eDg2fHNoKSB1c2VfZWxmMzI9eWVzOyBBQ19NU0dfUkVTVUxUKFszMl0pOzsKLS0oaWE2NHxwcGM2NHx4ODZfNjQpICAgIHVzZV9lbGY2ND15ZXM7IEFDX01TR19SRVNVTFQoWzY0XSk7OwotKyhhYXJjaDY0fGlhNjR8cHBjNjR8eDg2XzY0KSAgICB1c2VfZWxmNjQ9eWVzOyBBQ19NU0dfUkVTVUxUKFs2NF0pOzsKLSAobWlwcykgICAgICAgICAgICAgICAgIHVzZV9lbGZ4eD15ZXM7IEFDX01TR19SRVNVTFQoW3h4XSk7OwotICopICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtVbmtub3duIEVMRiB0YXJnZXQ6ICR7dGFyZ2V0X2FyY2h9XSkKLSBlc2FjCi1AQCAtMTg2LDYgKzE4Nyw3IEBAIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jeHgtZXhjZXB0aW9uc10KLSAjIEMrKyBleGNlcHRpb24gaGFuZGxpbmcgZG9lc24ndCB3b3JrIHRvbyB3ZWxsIG9uIHg4NgotIGNhc2UgJHRhcmdldF9hcmNoIGluCi0gICB4ODYqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OwotKyAgYWFyY2g2NCopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7Ci0gICBhcm0qKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OwotICAgbWlwcyopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7Ci0gICAqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9eWVzOzsKLS0tLSAvZGV2L251bGwKLSsrKyBiL2luY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAotQEAgLTAsMCArMSwxODcgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCi0rCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpZm5kZWYgTElCVU5XSU5EX0gKLSsjZGVmaW5lIExJQlVOV0lORF9ICi0rCi0rI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoY19wbHVzcGx1cykKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSsjaW5jbHVkZSA8c3RkZGVmLmg+Ci0rI2luY2x1ZGUgPHVjb250ZXh0Lmg+Ci0rCi0rI2RlZmluZSBVTldfVEFSR0VUCWFhcmNoNjQKLSsjZGVmaW5lIFVOV19UQVJHRVRfQUFSQ0g2NAkxCi0rCi0rI2RlZmluZSBfVV9UREVQX1FQX1RSVUUJMAkvKiBzZWUgbGlidW53aW5kLWR5bmFtaWMuaCAgKi8KLSsKLSsvKiBUaGlzIG5lZWRzIHRvIGJlIGJpZyBlbm91Z2ggdG8gYWNjb21tb2RhdGUgInN0cnVjdCBjdXJzb3IiLCB3aGlsZQotKyAgIGxlYXZpbmcgc29tZSBzbGFjayBmb3IgZnV0dXJlIGV4cGFuc2lvbi4gIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbAotKyAgIHJlcXVpcmUgcmVjb21waWxpbmcgYWxsIHVzZXJzIG9mIHRoaXMgbGlicmFyeS4gIFN0YWNrIGFsbG9jYXRpb24gaXMKLSsgICByZWxhdGl2ZWx5IGNoZWFwIGFuZCB1bndpbmQtc3RhdGUgY29weWluZyBpcyByZWxhdGl2ZWx5IHJhcmUsIHNvIHdlCi0rICAgd2FudCB0byBlcnIgb24gbWFraW5nIGl0IHJhdGhlciB0b28gYmlnIHRoYW4gdG9vIHNtYWxsLiAgKi8KLSsKLSsjZGVmaW5lIFVOV19UREVQX0NVUlNPUl9MRU4JNDA5NgotKwotK3R5cGVkZWYgdWludDY0X3QgdW53X3dvcmRfdDsKLSt0eXBlZGVmIGludDY0X3QgdW53X3N3b3JkX3Q7Ci0rCi0rdHlwZWRlZiBsb25nIGRvdWJsZSB1bndfdGRlcF9mcHJlZ190OwotKwotK3R5cGVkZWYgc3RydWN0Ci0rICB7Ci0rICAgIC8qIG5vIGFhcmNoNjQtc3BlY2lmaWMgYXV4aWxpYXJ5IHByb2MtaW5mbyAqLwotKyAgfQotK3Vud190ZGVwX3Byb2NfaW5mb190OwotKwotK3R5cGVkZWYgZW51bQotKyAgewotKyAgICAvKiA2NC1iaXQgZ2VuZXJhbCByZWdpc3RlcnMuICAqLwotKyAgICBVTldfQUFSQ0g2NF9YMCwKLSsgICAgVU5XX0FBUkNINjRfWDEsCi0rICAgIFVOV19BQVJDSDY0X1gyLAotKyAgICBVTldfQUFSQ0g2NF9YMywKLSsgICAgVU5XX0FBUkNINjRfWDQsCi0rICAgIFVOV19BQVJDSDY0X1g1LAotKyAgICBVTldfQUFSQ0g2NF9YNiwKLSsgICAgVU5XX0FBUkNINjRfWDcsCi0rICAgIFVOV19BQVJDSDY0X1g4LAotKwotKyAgICAvKiBUZW1wb3JhcnkgcmVnaXN0ZXJzLiAgKi8KLSsgICAgVU5XX0FBUkNINjRfWDksCi0rICAgIFVOV19BQVJDSDY0X1gxMCwKLSsgICAgVU5XX0FBUkNINjRfWDExLAotKyAgICBVTldfQUFSQ0g2NF9YMTIsCi0rICAgIFVOV19BQVJDSDY0X1gxMywKLSsgICAgVU5XX0FBUkNINjRfWDE0LAotKyAgICBVTldfQUFSQ0g2NF9YMTUsCi0rCi0rICAgIC8qIEludHJhLXByb2NlZHVyZS1jYWxsIHRlbXBvcmFyeSByZWdpc3RlcnMuICAqLwotKyAgICBVTldfQUFSQ0g2NF9YMTYsCi0rICAgIFVOV19BQVJDSDY0X1gxNywKLSsKLSsgICAgLyogQ2FsbGVlLXNhdmVkIHJlZ2lzdGVycy4gICovCi0rICAgIFVOV19BQVJDSDY0X1gxOCwKLSsgICAgVU5XX0FBUkNINjRfWDE5LAotKyAgICBVTldfQUFSQ0g2NF9YMjAsCi0rICAgIFVOV19BQVJDSDY0X1gyMSwKLSsgICAgVU5XX0FBUkNINjRfWDIyLAotKyAgICBVTldfQUFSQ0g2NF9YMjMsCi0rICAgIFVOV19BQVJDSDY0X1gyNCwKLSsgICAgVU5XX0FBUkNINjRfWDI1LAotKyAgICBVTldfQUFSQ0g2NF9YMjYsCi0rICAgIFVOV19BQVJDSDY0X1gyNywKLSsgICAgVU5XX0FBUkNINjRfWDI4LAotKwotKyAgICAvKiA2NC1iaXQgZnJhbWUgcG9pbnRlci4gICovCi0rICAgIFVOV19BQVJDSDY0X1gyOSwKLSsKLSsgICAgLyogNjQtYml0IGxpbmsgcmVnaXN0ZXIuICAqLwotKyAgICBVTldfQUFSQ0g2NF9YMzAsCi0rCi0rICAgIC8qIDY0LWJpdCBzdGFjayBwb2ludGVyLiAgKi8KLSsgICAgVU5XX0FBUkNINjRfU1AgPSAgMzEsCi0rICAgIFVOV19BQVJDSDY0X1BDLAotKyAgICBVTldfQUFSQ0g2NF9QU1RBVEUsCi0rCi0rICAgIC8qIDEyOC1iaXQgRlAvQWR2YW5jZWQgU0lNRCByZWdpc3RlcnMuICAqLwotKyAgICBVTldfQUFSQ0g2NF9WMCA9IDY0LAotKyAgICBVTldfQUFSQ0g2NF9WMSwKLSsgICAgVU5XX0FBUkNINjRfVjIsCi0rICAgIFVOV19BQVJDSDY0X1YzLAotKyAgICBVTldfQUFSQ0g2NF9WNCwKLSsgICAgVU5XX0FBUkNINjRfVjUsCi0rICAgIFVOV19BQVJDSDY0X1Y2LAotKyAgICBVTldfQUFSQ0g2NF9WNywKLSsgICAgVU5XX0FBUkNINjRfVjgsCi0rICAgIFVOV19BQVJDSDY0X1Y5LAotKyAgICBVTldfQUFSQ0g2NF9WMTAsCi0rICAgIFVOV19BQVJDSDY0X1YxMSwKLSsgICAgVU5XX0FBUkNINjRfVjEyLAotKyAgICBVTldfQUFSQ0g2NF9WMTMsCi0rICAgIFVOV19BQVJDSDY0X1YxNCwKLSsgICAgVU5XX0FBUkNINjRfVjE1LAotKyAgICBVTldfQUFSQ0g2NF9WMTYsCi0rICAgIFVOV19BQVJDSDY0X1YxNywKLSsgICAgVU5XX0FBUkNINjRfVjE4LAotKyAgICBVTldfQUFSQ0g2NF9WMTksCi0rICAgIFVOV19BQVJDSDY0X1YyMCwKLSsgICAgVU5XX0FBUkNINjRfVjIxLAotKyAgICBVTldfQUFSQ0g2NF9WMjIsCi0rICAgIFVOV19BQVJDSDY0X1YyMywKLSsgICAgVU5XX0FBUkNINjRfVjI0LAotKyAgICBVTldfQUFSQ0g2NF9WMjUsCi0rICAgIFVOV19BQVJDSDY0X1YyNiwKLSsgICAgVU5XX0FBUkNINjRfVjI3LAotKyAgICBVTldfQUFSQ0g2NF9WMjgsCi0rICAgIFVOV19BQVJDSDY0X1YyOSwKLSsgICAgVU5XX0FBUkNINjRfVjMwLAotKyAgICBVTldfQUFSQ0g2NF9WMzEsCi0rCi0rICAgIFVOV19BQVJDSDY0X0ZQU1IsCi0rICAgIFVOV19BQVJDSDY0X0ZQQ1IsCi0rCi0rICAgIC8qIEZvciBBQXJjaDY0LCB0aGUgQ0ZBIGlzIHRoZSB2YWx1ZSBvZiBTUCAoeDMxKSBhdCB0aGUgY2FsbCBzaXRlIG9mIHRoZQotKyAgICAgICBwcmV2aW91cyBmcmFtZS4gICovCi0rICAgIFVOV19BQVJDSDY0X0NGQSA9IFVOV19BQVJDSDY0X1NQLAotKwotKyAgICBVTldfVERFUF9MQVNUX1JFRyA9IFVOV19BQVJDSDY0X0ZQQ1IsCi0rCi0rICAgIFVOV19UREVQX0lQID0gVU5XX0FBUkNINjRfWDMwLAotKyAgICBVTldfVERFUF9TUCA9IFVOV19BQVJDSDY0X1NQLAotKyAgICBVTldfVERFUF9FSCA9IFVOV19BQVJDSDY0X1gwLAotKwotKyAgfQotK2FhcmNoNjRfcmVnbnVtX3Q7Ci0rCi0rLyogVXNlIFIwIHRocm91Z2ggUjMgdG8gcGFzcyBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24uICAqLwotKyNkZWZpbmUgVU5XX1RERVBfTlVNX0VIX1JFR1MJNAotKwotK3R5cGVkZWYgc3RydWN0IHVud190ZGVwX3NhdmVfbG9jCi0rICB7Ci0rICAgIC8qIEFkZGl0aW9uYWwgdGFyZ2V0LWRlcGVuZGVudCBpbmZvIG9uIGEgc2F2ZSBsb2NhdGlvbi4gICovCi0rICB9Ci0rdW53X3RkZXBfc2F2ZV9sb2NfdDsKLSsKLSsKLSsvKiBPbiBBQXJjaDY0LCB3ZSBjYW4gZGlyZWN0bHkgdXNlIHVjb250ZXh0X3QgYXMgdGhlIHVud2luZCBjb250ZXh0LiAgKi8KLSt0eXBlZGVmIHVjb250ZXh0X3QgdW53X3RkZXBfY29udGV4dF90OwotKwotKyNpbmNsdWRlICJsaWJ1bndpbmQtY29tbW9uLmgiCi0rI2luY2x1ZGUgImxpYnVud2luZC1keW5hbWljLmgiCi0rCi0rI2RlZmluZSB1bndfdGRlcF9nZXRjb250ZXh0KHVjKSAgICAgICAgIChnZXRjb250ZXh0ICh1YyksIDApCi0rI2RlZmluZSB1bndfdGRlcF9pc19mcHJlZwkJVU5XX0FSQ0hfT0JKKGlzX2ZwcmVnKQotKwotK2V4dGVybiBpbnQgdW53X3RkZXBfaXNfZnByZWcgKGludCk7Ci0rCi0rI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoY19wbHVzcGx1cykKLSt9Ci0rI2VuZGlmCi0rCi0rI2VuZGlmIC8qIExJQlVOV0lORF9IICovCi0tLS0gYS9pbmNsdWRlL2xpYnVud2luZC5oLmluCi0rKysgYi9pbmNsdWRlL2xpYnVud2luZC5oLmluCi1AQCAtMyw3ICszLDkgQEAKLSAKLSAjaWZuZGVmIFVOV19SRU1PVEVfT05MWQotIAotLSNpZiBkZWZpbmVkIF9fYXJtX18KLSsjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXwotKyNpbmNsdWRlICJsaWJ1bndpbmQtYWFyY2g2NC5oIgotKyNlbGlmIGRlZmluZWQgX19hcm1fXwotICMgaW5jbHVkZSAibGlidW53aW5kLWFybS5oIgotICNlbGlmIGRlZmluZWQgX19ocHBhX18KLSAjIGluY2x1ZGUgImxpYnVud2luZC1ocHBhLmgiCi0tLS0gL2Rldi9udWxsCi0rKysgYi9pbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAotQEAgLTAsMCArMSw1MiBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2lmbmRlZiBkd2FyZl9jb25maWdfaAotKyNkZWZpbmUgZHdhcmZfY29uZmlnX2gKLSsKLSsvKiBUaGlzIG1hdGNoZXMgdGhlIHZhbHVlIHVkZXMgYnkgR0NDIChzZWUKLSsgICBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oOkRXQVJGX0ZSQU1FX1JFR0lTVEVSUy4gICovCi0rI2RlZmluZSBEV0FSRl9OVU1fUFJFU0VSVkVEX1JFR1MJOTcKLSsKLSsvKiBSZXR1cm4gVFJVRSBpZiB0aGUgQUREUl9TUEFDRSB1c2VzIGJpZy1lbmRpYW4gYnl0ZS1vcmRlci4gICovCi0rI2RlZmluZSBkd2FyZl9pc19iaWdfZW5kaWFuKGFkZHJfc3BhY2UpCTAKLSsKLSsjZGVmaW5lIGR3YXJmX3RvX3Vud19yZWdudW0ocmVnKSAoKChyZWcpIDw9IFVOV19BQVJDSDY0X1YzMSkgPyAocmVnKSA6IDApCi0rCi0rLyogQ29udmVydCBhIHBvaW50ZXIgdG8gYSBkd2FyZl9jdXJzb3Igc3RydWN0dXJlIHRvIGEgcG9pbnRlciB0bwotKyAgIHVud19jdXJzb3JfdC4gICovCi0rI2RlZmluZSBkd2FyZl90b19jdXJzb3IoYykJKCh1bndfY3Vyc29yX3QgKikgKGMpKQotKwotK3R5cGVkZWYgc3RydWN0IGR3YXJmX2xvYwotKyAgewotKyAgICB1bndfd29yZF90IHZhbDsKLSsjaWZuZGVmIFVOV19MT0NBTF9PTkxZCi0rICAgIHVud193b3JkX3QgdHlwZTsJCS8qIHNlZSBEV0FSRl9MT0NfVFlQRV8qIG1hY3Jvcy4gICovCi0rI2VuZGlmCi0rICB9Ci0rZHdhcmZfbG9jX3Q7Ci0rCi0rI2VuZGlmIC8qIGR3YXJmX2NvbmZpZ19oICovCi0tLS0gL2Rldi9udWxsCi0rKysgYi9pbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAotQEAgLTAsMCArMSwzMyBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsvKiBVc2UgZ2xpYmMncyBqdW1wLWJ1ZmZlciBpbmRpY2VzOyBOUFRMIHBlZWtzIGF0IFNQOiAqLwotKwotKy8qIEZJWE1FIGZvciBBQXJjaDY0ICAqLwotKwotKyNkZWZpbmUgSkJfU1AJCTEzCi0rI2RlZmluZSBKQl9SUAkJMTQKLSsjZGVmaW5lIEpCX01BU0tfU0FWRUQJMTUKLSsjZGVmaW5lIEpCX01BU0sJCTE2Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9pbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCi1AQCAtMCwwICsxLDI5NCBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28KLSsJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2lmbmRlZiBBQVJDSDY0X0xJQlVOV0lORF9JX0gKLSsjZGVmaW5lIEFBUkNINjRfTElCVU5XSU5EX0lfSAotKwotKy8qIFRhcmdldC1kZXBlbmRlbnQgZGVmaW5pdGlvbnMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gbGlidW53aW5kIGJ1dCBuZWVkCi0rICAgdG8gYmUgc2hhcmVkIHdpdGggdGFyZ2V0LWluZGVwZW5kZW50IGNvZGUuICAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8bGlidW53aW5kLmg+Ci0rCi0rI2luY2x1ZGUgImVsZjY0LmgiCi0rI2luY2x1ZGUgIm1lbXBvb2wuaCIKLSsjaW5jbHVkZSAiZHdhcmYuaCIKLSsKLSt0eXBlZGVmIHN0cnVjdAotKyAgewotKyAgICAvKiBubyBhYXJjaDY0LXNwZWNpZmljIGZhc3QgdHJhY2UgKi8KLSsgIH0KLSt1bndfdGRlcF9mcmFtZV90OwotKwotKyNpZmRlZiBVTldfTE9DQUxfT05MWQotKwotK3R5cGVkZWYgdW53X3dvcmRfdCBhYXJjaDY0X2xvY190OwotKwotKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLwotKwotK3R5cGVkZWYgc3RydWN0IGFhcmNoNjRfbG9jCi0rICB7Ci0rICAgIHVud193b3JkX3QgdzAsIHcxOwotKyAgfQotK2FhcmNoNjRfbG9jX3Q7Ci0rCi0rI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLwotKwotK3N0cnVjdCB1bndfYWRkcl9zcGFjZQotKyAgewotKyAgICBzdHJ1Y3QgdW53X2FjY2Vzc29ycyBhY2M7Ci0rICAgIGludCBiaWdfZW5kaWFuOwotKyAgICB1bndfY2FjaGluZ19wb2xpY3lfdCBjYWNoaW5nX3BvbGljeTsKLSsjaWZkZWYgSEFWRV9BVE9NSUNfT1BTX0gKLSsgICAgQU9fdCBjYWNoZV9nZW5lcmF0aW9uOwotKyNlbHNlCi0rICAgIHVpbnQzMl90IGNhY2hlX2dlbmVyYXRpb247Ci0rI2VuZGlmCi0rICAgIHVud193b3JkX3QgZHluX2dlbmVyYXRpb247ICAgICAgICAgIC8qIHNlZSBkeW4tY29tbW9uLmggKi8KLSsgICAgdW53X3dvcmRfdCBkeW5faW5mb19saXN0X2FkZHI7CS8qIChjYWNoZWQpIGR5bl9pbmZvX2xpc3RfYWRkciAqLwotKyAgICBzdHJ1Y3QgZHdhcmZfcnNfY2FjaGUgZ2xvYmFsX2NhY2hlOwotKyAgICBzdHJ1Y3QgdW53X2RlYnVnX2ZyYW1lX2xpc3QgKmRlYnVnX2ZyYW1lczsKLSsgICB9OwotKwotK3N0cnVjdCBjdXJzb3IKLSsgIHsKLSsgICAgc3RydWN0IGR3YXJmX2N1cnNvciBkd2FyZjsgICAgICAgICAgLyogbXVzdCBiZSBmaXJzdCAqLwotKyAgICBlbnVtCi0rICAgICAgewotKyAgICAgICAgQUFSQ0g2NF9TQ0ZfTk9ORSwKLSsgICAgICAgIEFBUkNINjRfU0NGX0xJTlVYX1JUX1NJR0ZSQU1FLAotKyAgICAgIH0KLSsgICAgc2lnY29udGV4dF9mb3JtYXQ7Ci0rICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9hZGRyOwotKyAgICB1bndfd29yZF90IHNpZ2NvbnRleHRfc3A7Ci0rICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9wYzsKLSsgIH07Ci0rCi0rI2RlZmluZSBEV0FSRl9HRVRfTE9DKGwpICAgICAgICAoKGwpLnZhbCkKLSsKLSsjaWZkZWYgVU5XX0xPQ0FMX09OTFkKLSsjIGRlZmluZSBEV0FSRl9OVUxMX0xPQyAgICAgICAgIERXQVJGX0xPQyAoMCwgMCkKLSsjIGRlZmluZSBEV0FSRl9JU19OVUxMX0xPQyhsKSAgIChEV0FSRl9HRVRfTE9DIChsKSA9PSAwKQotKyMgZGVmaW5lIERXQVJGX0xPQyhyLCB0KSAgICAgICAgKChkd2FyZl9sb2NfdCkgeyAudmFsID0gKHIpIH0pCi0rIyBkZWZpbmUgRFdBUkZfSVNfUkVHX0xPQyhsKSAgICAwCi0rIyBkZWZpbmUgRFdBUkZfUkVHX0xPQyhjLHIpICAgICAoRFdBUkZfTE9DKCh1bndfd29yZF90KSAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcF91Y19hZGRyKChjKS0+YXNfYXJnLCAocikpLCAwKSkKLSsjIGRlZmluZSBEV0FSRl9NRU1fTE9DKGMsbSkgICAgIERXQVJGX0xPQyAoKG0pLCAwKQotKyMgZGVmaW5lIERXQVJGX0ZQUkVHX0xPQyhjLHIpICAgKERXQVJGX0xPQygodW53X3dvcmRfdCkgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXBfdWNfYWRkcigoYyktPmFzX2FyZywgKHIpKSwgMCkpCi0rCi0rc3RhdGljIGlubGluZSBpbnQKLStkd2FyZl9nZXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCAqdmFsKQotK3sKLSsgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuIC0xOwotKyAgKnZhbCA9ICoodW53X2ZwcmVnX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKTsKLSsgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW5saW5lIGludAotK2R3YXJmX3B1dGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190IHZhbCkKLSt7Ci0rICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCi0rICAgIHJldHVybiAtMTsKLSsgICoodW53X2ZwcmVnX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKSA9IHZhbDsKLSsgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW5saW5lIGludAotK2R3YXJmX2dldCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90ICp2YWwpCi0rewotKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQotKyAgICByZXR1cm4gLTE7Ci0rICAqdmFsID0gKih1bndfd29yZF90ICopIERXQVJGX0dFVF9MT0MgKGxvYyk7Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBpbnQKLStkd2FyZl9wdXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCB2YWwpCi0rewotKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQotKyAgICByZXR1cm4gLTE7Ci0rICAqKHVud193b3JkX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKSA9IHZhbDsKLSsgIHJldHVybiAwOwotK30KLSsKLSsjZWxzZSAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KLSsjIGRlZmluZSBEV0FSRl9MT0NfVFlQRV9GUCAgICAgICgxIDw8IDApCi0rIyBkZWZpbmUgRFdBUkZfTE9DX1RZUEVfUkVHICAgICAoMSA8PCAxKQotKyMgZGVmaW5lIERXQVJGX05VTExfTE9DICAgICAgICAgRFdBUkZfTE9DICgwLCAwKQotKyMgZGVmaW5lIERXQVJGX0lTX05VTExfTE9DKGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKHsgZHdhcmZfbG9jX3QgX2wgPSAobCk7IF9sLnZhbCA9PSAwICYmIF9sLnR5cGUgPT0gMDsgfSkKLSsjIGRlZmluZSBEV0FSRl9MT0MociwgdCkgICAgICAgICgoZHdhcmZfbG9jX3QpIHsgLnZhbCA9IChyKSwgLnR5cGUgPSAodCkgfSkKLSsjIGRlZmluZSBEV0FSRl9JU19SRUdfTE9DKGwpICAgICgoKGwpLnR5cGUgJiBEV0FSRl9MT0NfVFlQRV9SRUcpICE9IDApCi0rIyBkZWZpbmUgRFdBUkZfSVNfRlBfTE9DKGwpICAgICAoKChsKS50eXBlICYgRFdBUkZfTE9DX1RZUEVfRlApICE9IDApCi0rIyBkZWZpbmUgRFdBUkZfUkVHX0xPQyhjLHIpICAgICBEV0FSRl9MT0MoKHIpLCBEV0FSRl9MT0NfVFlQRV9SRUcpCi0rIyBkZWZpbmUgRFdBUkZfTUVNX0xPQyhjLG0pICAgICBEV0FSRl9MT0MgKChtKSwgMCkKLSsjIGRlZmluZSBEV0FSRl9GUFJFR19MT0MoYyxyKSAgIERXQVJGX0xPQygociksIChEV0FSRl9MT0NfVFlQRV9SRUcgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEV0FSRl9MT0NfVFlQRV9GUCkpCi0rCi0rc3RhdGljIGlubGluZSBpbnQKLStkd2FyZl9nZXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCAqdmFsKQotK3sKLSsgIGNoYXIgKnZhbHAgPSAoY2hhciAqKSAmdmFsOwotKyAgdW53X3dvcmRfdCBhZGRyOwotKyAgaW50IHJldDsKLSsKLSsgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKLSsKLSsgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQotKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19mcHJlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwgMCwgYy0+YXNfYXJnKTsKLSsKLSsgIGFkZHIgPSBEV0FSRl9HRVRfTE9DIChsb2MpOwotKyAgaWYgKChyZXQgPSAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgMCwgKHVud193b3JkX3QgKikgdmFscCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjLT5hc19hcmcpKSA8IDApCi0rICAgIHJldHVybiByZXQ7Ci0rCi0rICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDQsICh1bndfd29yZF90ICopIHZhbHAgKyAxLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+YXNfYXJnKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBpbnQKLStkd2FyZl9wdXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCB2YWwpCi0rewotKyAgY2hhciAqdmFscCA9IChjaGFyICopICZ2YWw7Ci0rICB1bndfd29yZF90IGFkZHI7Ci0rICBpbnQgcmV0OwotKwotKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQotKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOwotKwotKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCi0rICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX2ZwcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbCwgMSwgYy0+YXNfYXJnKTsKLSsKLSsgIGFkZHIgPSBEV0FSRl9HRVRfTE9DIChsb2MpOwotKyAgaWYgKChyZXQgPSAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgMCwgKHVud193b3JkX3QgKikgdmFscCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpKSA8IDApCi0rICAgIHJldHVybiByZXQ7Ci0rCi0rICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDQsICh1bndfd29yZF90ICopIHZhbHAgKyAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBpbnQKLStkd2FyZl9nZXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCAqdmFsKQotK3sKLSsgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKLSsKLSsgIC8qIElmIGEgY29kZS1nZW5lcmF0b3Igd2VyZSB0byBzYXZlIGEgdmFsdWUgb2YgdHlwZSB1bndfd29yZF90IGluIGEKLSsgICAgIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyLCB3ZSB3b3VsZCBoYXZlIHRvIHN1cHBvcnQgdGhpcyBjYXNlLiAgSQotKyAgICAgc3VwcG9zZSBpdCBjb3VsZCBoYXBwZW4gd2l0aCBNTVggcmVnaXN0ZXJzLCBidXQgZG9lcyBpdCByZWFsbHkKLSsgICAgIGhhcHBlbj8gICovCi0rICBhc3NlcnQgKCFEV0FSRl9JU19GUF9MT0MgKGxvYykpOwotKwotKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCi0rICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX3JlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCB2YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZyk7Ci0rICBlbHNlCi0rICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCB2YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZyk7Ci0rfQotKwotK3N0YXRpYyBpbmxpbmUgaW50Ci0rZHdhcmZfcHV0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgdmFsKQotK3sKLSsgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKLSsKLSsgIC8qIElmIGEgY29kZS1nZW5lcmF0b3Igd2VyZSB0byBzYXZlIGEgdmFsdWUgb2YgdHlwZSB1bndfd29yZF90IGluIGEKLSsgICAgIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyLCB3ZSB3b3VsZCBoYXZlIHRvIHN1cHBvcnQgdGhpcyBjYXNlLiAgSQotKyAgICAgc3VwcG9zZSBpdCBjb3VsZCBoYXBwZW4gd2l0aCBNTVggcmVnaXN0ZXJzLCBidXQgZG9lcyBpdCByZWFsbHkKLSsgICAgIGhhcHBlbj8gICovCi0rICBhc3NlcnQgKCFEV0FSRl9JU19GUF9MT0MgKGxvYykpOwotKwotKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCi0rICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX3JlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCAmdmFsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOwotKyAgZWxzZQotKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgJnZhbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKTsKLSt9Ci0rCi0rI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLwotKwotKwotKwotKyNkZWZpbmUgdGRlcF9nZXRjb250ZXh0X3RyYWNlICAgICAgICAgICB1bndfZ2V0Y29udGV4dAotKyNkZWZpbmUgdGRlcF9pbml0X2RvbmUJCQlVTldfT0JKKGluaXRfZG9uZSkKLSsjZGVmaW5lIHRkZXBfaW5pdAkJCVVOV19PQkooaW5pdCkKLSsvKiBQbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFVOV19JTkZPX0ZPUk1BVF9UQUJMRSBuZWVkIHRvIGRlZmluZQotKyAgIHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZS4gICovCi0rI2RlZmluZSB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUJZHdhcmZfc2VhcmNoX3Vud2luZF90YWJsZQotKyNkZWZpbmUgdGRlcF9maW5kX3Vud2luZF90YWJsZQkgICAgICAgIGR3YXJmX2ZpbmRfdW53aW5kX3RhYmxlCi0rI2RlZmluZSB0ZGVwX3VjX2FkZHIJCQlVTldfT0JKKHVjX2FkZHIpCi0rI2RlZmluZSB0ZGVwX2dldF9lbGZfaW1hZ2UJCVVOV19BUkNIX09CSihnZXRfZWxmX2ltYWdlKQotKyNkZWZpbmUgdGRlcF9hY2Nlc3NfcmVnCQkJVU5XX09CSihhY2Nlc3NfcmVnKQotKyNkZWZpbmUgdGRlcF9hY2Nlc3NfZnByZWcJCVVOV19PQkooYWNjZXNzX2ZwcmVnKQotKyNkZWZpbmUgdGRlcF9mZXRjaF9mcmFtZShjLGlwLG4pCWRvIHt9IHdoaWxlKDApCi0rI2RlZmluZSB0ZGVwX2NhY2hlX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQotKyNkZWZpbmUgdGRlcF9yZXVzZV9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKLSsjZGVmaW5lIHRkZXBfc3Rhc2hfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCi0rI2RlZmluZSB0ZGVwX3RyYWNlKGN1cixhZGRyLG4pCQkoLVVOV19FTk9JTkZPKQotKwotKyNpZmRlZiBVTldfTE9DQUxfT05MWQotKyMgZGVmaW5lIHRkZXBfZmluZF9wcm9jX2luZm8oYyxpcCxuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBkd2FyZl9maW5kX3Byb2NfaW5mbygoYyktPmFzLCAoaXApLCAmKGMpLT5waSwgKG4pLCAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyktPmFzX2FyZykKLSsjIGRlZmluZSB0ZGVwX3B1dF91bndpbmRfaW5mbyhhcyxwaSxhcmcpICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIGR3YXJmX3B1dF91bndpbmRfaW5mbygoYXMpLCAocGkpLCAoYXJnKSkKLSsjZWxzZQotKyMgZGVmaW5lIHRkZXBfZmluZF9wcm9jX2luZm8oYyxpcCxuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICgqKGMpLT5hcy0+YWNjLmZpbmRfcHJvY19pbmZvKSgoYyktPmFzLCAoaXApLCAmKGMpLT5waSwgKG4pLCAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMpLT5hc19hcmcpCi0rIyBkZWZpbmUgdGRlcF9wdXRfdW53aW5kX2luZm8oYXMscGksYXJnKSAgICAgICAgICAgICAgICBcCi0rICAgICAgICAoKihhcyktPmFjYy5wdXRfdW53aW5kX2luZm8pKChhcyksIChwaSksIChhcmcpKQotKyNlbmRpZgotKwotKyNkZWZpbmUgdGRlcF9nZXRfYXMoYykgICAgICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5hcykKLSsjZGVmaW5lIHRkZXBfZ2V0X2FzX2FyZyhjKSAgICAgICAgICAgICAgKChjKS0+ZHdhcmYuYXNfYXJnKQotKyNkZWZpbmUgdGRlcF9nZXRfaXAoYykgICAgICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5pcCkKLSsjZGVmaW5lIHRkZXBfYmlnX2VuZGlhbihhcykgICAgICAgICAgICAgKChhcyktPmJpZ19lbmRpYW4pCi0rCi0rZXh0ZXJuIGludCB0ZGVwX2luaXRfZG9uZTsKLSsKLStleHRlcm4gdm9pZCB0ZGVwX2luaXQgKHZvaWQpOwotK2V4dGVybiBpbnQgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGlwLAotKwkJCQkgICAgIHVud19keW5faW5mb190ICpkaSwgdW53X3Byb2NfaW5mb190ICpwaSwKLSsJCQkJICAgICBpbnQgbmVlZF91bndpbmRfaW5mbywgdm9pZCAqYXJnKTsKLStleHRlcm4gdm9pZCAqdGRlcF91Y19hZGRyICh1bndfdGRlcF9jb250ZXh0X3QgKnVjLCBpbnQgcmVnKTsKLStleHRlcm4gaW50IHRkZXBfZ2V0X2VsZl9pbWFnZSAoc3RydWN0IGVsZl9pbWFnZSAqZWksIHBpZF90IHBpZCwgdW53X3dvcmRfdCBpcCwKLSsJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2VnYmFzZSwgdW5zaWduZWQgbG9uZyAqbWFwb2ZmLAotKwkJCSAgICAgICBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbik7Ci0rZXh0ZXJuIGludCB0ZGVwX2FjY2Vzc19yZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsCi0rCQkJICAgIHVud193b3JkX3QgKnZhbHAsIGludCB3cml0ZSk7Ci0rZXh0ZXJuIGludCB0ZGVwX2FjY2Vzc19mcHJlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywKLSsJCQkgICAgICB1bndfZnByZWdfdCAqdmFscCwgaW50IHdyaXRlKTsKLSsKLSsjZW5kaWYgLyogQUFSQ0g2NF9MSUJVTldJTkRfSV9IICovCi0tLS0gYS9pbmNsdWRlL3RkZXAvZHdhcmYtY29uZmlnLmgKLSsrKyBiL2luY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaAotQEAgLTEsNyArMSw5IEBACi0gLyogUHJvdmlkZSBhIHJlYWwgZmlsZSAtIG5vdCBhIHN5bWxpbmsgLSBhcyBpdCB3b3VsZCBjYXVzZSBtdWx0aWFyY2ggY29uZmxpY3RzCi0gICAgd2hlbiBtdWx0aXBsZSBkaWZmZXJlbnQgYXJjaCByZWxlYXNlcyBhcmUgaW5zdGFsbGVkIHNpbXVsdGFuZW91c2x5LiAgKi8KLSAKLS0jaWYgZGVmaW5lZCBfX2FybV9fCi0rI2lmIGRlZmluZWQgX19hYXJjaDY0X18KLSsjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaCIKLSsjZWxpZiBkZWZpbmVkIF9fYXJtX18KLSAjIGluY2x1ZGUgInRkZXAtYXJtL2R3YXJmLWNvbmZpZy5oIgotICNlbGlmIGRlZmluZWQgX19ocHBhX18KLSAjIGluY2x1ZGUgInRkZXAtaHBwYS9kd2FyZi1jb25maWcuaCIKLS0tLSBhL2luY2x1ZGUvdGRlcC9qbXBidWYuaAotKysrIGIvaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oCi1AQCAtMyw2ICszLDggQEAKLSAKLSAjaWZuZGVmIFVOV19SRU1PVEVfT05MWQotIAotKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCi0rIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvam1wYnVmLmgiCi0gI2lmIGRlZmluZWQgX19hcm1fXwotICMgaW5jbHVkZSAidGRlcC1hcm0vam1wYnVmLmgiCi0gI2VsaWYgZGVmaW5lZCBfX2hwcGFfXwotLS0tIGEvaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4KLSsrKyBiL2luY2x1ZGUvdGRlcC9saWJ1bndpbmRfaS5oLmluCi1AQCAtMyw3ICszLDkgQEAKLSAKLSAjaWZuZGVmIFVOV19SRU1PVEVfT05MWQotIAotLSNpZiBkZWZpbmVkIF9fYXJtX18KLSsjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXwotKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgiCi0rI2VsaWYgZGVmaW5lZCBfX2FybV9fCi0gIyBpbmNsdWRlICJ0ZGVwLWFybS9saWJ1bndpbmRfaS5oIgotICNlbGlmIGRlZmluZWQgX19ocHBhX18KLSAjIGluY2x1ZGUgInRkZXAtaHBwYS9saWJ1bndpbmRfaS5oIgotLS0tIGEvc3JjL01ha2VmaWxlLmFtCi0rKysgYi9zcmMvTWFrZWZpbGUuYW0KLUBAIC0xNzAsNiArMTcwLDI4IEBAIGxpYnVud2luZF9lbGZ4eF9sYV9TT1VSQ0VTID0gZWxmeHguYwotIG5vaW5zdF9MVExJQlJBUklFUyArPSAkKExJQlVOV0lORF9FTEYpCi0gbGlidW53aW5kX2xhX0xJQkFERCArPSAkKExJQlVOV0lORF9FTEYpCi0gCi0rIyBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGdvIGludG8gbGlidW53aW5kIGFuZCBsaWJ1bndpbmQtYWFyY2g2NDoKLStub2luc3RfSEVBREVSUyArPSBhYXJjaDY0L2luaXQuaCBhYXJjaDY0L29mZnNldHMuaCBhYXJjaDY0L3Vud2luZF9pLmgKLStsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbiA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfY29tbW9uKQkgICAgXAotKwlhYXJjaDY0L2lzX2ZwcmVnLmMgYWFyY2g2NC9yZWduYW1lLmMKLSsKLSsjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQ6Ci0rbGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NCA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NF9jb21tb24pCSAgICBcCi0rCSQobGlidW53aW5kX2xhX1NPVVJDRVNfbG9jYWwpCQkJCQkgICAgXAotKwlhYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jIGFhcmNoNjQvTGdldF9wcm9jX2luZm8uYyAJCSAgICBcCi0rCWFhcmNoNjQvTGdldF9zYXZlX2xvYy5jIGFhcmNoNjQvTGdsb2JhbC5jIGFhcmNoNjQvTGluaXQuYwkgICAgXAotKwlhYXJjaDY0L0xpbml0X2xvY2FsLmMgYWFyY2g2NC9MaW5pdF9yZW1vdGUuYyAJCQkgICAgXAotKwlhYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYyBhYXJjaDY0L0xyZWdzLmMgYWFyY2g2NC9McmVzdW1lLmMgCSAgICBcCi0rCWFhcmNoNjQvTHN0ZXAuYwotKwotK2xpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NF9jb21tb24pIFwKLSsJJChsaWJ1bndpbmRfbGFfU09VUkNFU19nZW5lcmljKQkJCQkJICAgICAgXAotKwlhYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jIGFhcmNoNjQvR2dldF9wcm9jX2luZm8uYyAJCSAgICAgIFwKLSsJYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMgYWFyY2g2NC9HZ2xvYmFsLmMgYWFyY2g2NC9HaW5pdC5jIAkgICAgICBcCi0rCWFhcmNoNjQvR2luaXRfbG9jYWwuYyBhYXJjaDY0L0dpbml0X3JlbW90ZS5jCQkJICAgICAgXAotKwlhYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYyBhYXJjaDY0L0dyZWdzLmMgYWFyY2g2NC9HcmVzdW1lLmMJICAgICAgXAotKwlhYXJjaDY0L0dzdGVwLmMKLSsKLSAjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQgYW5kIGxpYnVud2luZC1hcm06Ci0gbm9pbnN0X0hFQURFUlMgKz0gYXJtL2luaXQuaCBhcm0vb2Zmc2V0cy5oIGFybS91bndpbmRfaS5oCi0gbGlidW53aW5kX2xhX1NPVVJDRVNfYXJtX2NvbW1vbiA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfY29tbW9uKQkgICAgXAotQEAgLTQxOCw2ICs0NDAsMTggQEAgaWYgT1NfRlJFRUJTRAotICBsaWJ1bndpbmRfY29yZWR1bXBfbGFfU09VUkNFUyArPSBjb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfZnJlZWJzZC5jCi0gZW5kaWYKLSAKLStpZiBBUkNIX0FBUkNINjQKLSsgbGliX0xUTElCUkFSSUVTICs9IGxpYnVud2luZC1hYXJjaDY0LmxhCi0rIGxpYnVud2luZF9sYV9TT1VSQ0VTID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0KQotKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTID0gJChsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTX2FhcmNoNjQpCi0rIGxpYnVud2luZF9hYXJjaDY0X2xhX0xERkxBR1MgPSAkKENPTU1PTl9TT19MREZMQUdTKSAtdmVyc2lvbi1pbmZvICQoU09WRVJTSU9OKQotKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MSUJBREQgPSBsaWJ1bndpbmQtZHdhcmYtZ2VuZXJpYy5sYQotKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MSUJBREQgKz0gbGlidW53aW5kLWVsZjY0LmxhCi0raWYgIVJFTU9URV9PTkxZCi0rIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCArPSBsaWJ1bndpbmQubGEgLWxjCi0rZW5kaWYKLSsgbGlidW53aW5kX3NldGptcF9sYV9TT1VSQ0VTICs9IGFhcmNoNjQvc2lnbG9uZ2ptcC5TCi0rZWxzZQotIGlmIEFSQ0hfQVJNCi0gIGxpYl9MVExJQlJBUklFUyArPSBsaWJ1bndpbmQtYXJtLmxhCi0gIGxpYnVud2luZF9sYV9TT1VSQ0VTID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCi1AQCAtNTQ1LDYgKzU3OSw3IEBAIGVuZGlmICMgQVJDSF9NSVBTCi0gZW5kaWYgIyBBUkNIX0hQUEEKLSBlbmRpZiAjIEFSQ0hfSUE2NAotIGVuZGlmICMgQVJDSF9BUk0KLStlbmRpZiAjIEFSQ0hfQUFSQ0g2NAotIAotICMgbGlidW53aW5kLXNldGptcCBkZXBlbmRzIG9uIGxpYnVud2luZC0kKGFyY2gpLiBUaGVyZWZvcmUgbXVzdCBiZSBhZGRlZAotICMgYXQgdGhlIGVuZC4KLUBAIC01NjcsNyArNjAyLDggQEAgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSQotIEFNX0NDQVNGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCi0gbm9pbnN0X0hFQURFUlMgKz0gdW53aW5kL3Vud2luZC1pbnRlcm5hbC5oCi0gCi0tRVhUUkFfRElTVCA9CSQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQkJCVwKLStFWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0KQkJCVwKLSsJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQkJCVwKLSAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfaHBwYSkJCQlcCi0gCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2lhNjQpCQkJXAotIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19taXBzKQkJCVwKLUBAIC01NzksNiArNjE1LDcgQEAgRVhUUkFfRElTVCA9CSQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQotIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCQkJXAotIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19sb2NhbCkJCQlcCi0gCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2dlbmVyaWMpCQkJXAotKwkJJChsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTX2FhcmNoNjQpCQlcCi0gCQkkKGxpYnVud2luZF9hcm1fbGFfU09VUkNFU19hcm0pCQkJXAotIAkJJChsaWJ1bndpbmRfaHBwYV9sYV9TT1VSQ0VTX2hwcGEpCQlcCi0gCQkkKGxpYnVud2luZF9pYTY0X2xhX1NPVVJDRVNfaWE2NCkJCVwKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jCi1AQCAtMCwwICsxLDYwIEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rCi0rUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QKLSt1bndfY3JlYXRlX2FkZHJfc3BhY2UgKHVud19hY2Nlc3NvcnNfdCAqYSwgaW50IGJ5dGVfb3JkZXIpCi0rewotKyNpZmRlZiBVTldfTE9DQUxfT05MWQotKyAgcmV0dXJuIE5VTEw7Ci0rI2Vsc2UKLSsgIHVud19hZGRyX3NwYWNlX3QgYXM7Ci0rCi0rICAvKiBBQXJjaDY0IHN1cHBvcnRzIGxpdHRsZS1lbmRpYW4gYW5kIGJpZy1lbmRpYW4uICovCi0rICBpZiAoYnl0ZV9vcmRlciAhPSAwICYmIGJ5dGVfb3JkZXIgIT0gX19MSVRUTEVfRU5ESUFOCi0rICAgICAgJiYgYnl0ZV9vcmRlciAhPSBfX0JJR19FTkRJQU4pCi0rICAgIHJldHVybiBOVUxMOwotKwotKyAgYXMgPSBtYWxsb2MgKHNpemVvZiAoKmFzKSk7Ci0rICBpZiAoIWFzKQotKyAgICByZXR1cm4gTlVMTDsKLSsKLSsgIG1lbXNldCAoYXMsIDAsIHNpemVvZiAoKmFzKSk7Ci0rCi0rICBhcy0+YWNjID0gKmE7Ci0rCi0rICAvKiBEZWZhdWx0IHRvIGxpdHRsZS1lbmRpYW4gZm9yIEFBcmNoNjQuICovCi0rICBpZiAoYnl0ZV9vcmRlciA9PSAwIHx8IGJ5dGVfb3JkZXIgPT0gX19MSVRUTEVfRU5ESUFOKQotKyAgICBhcy0+YmlnX2VuZGlhbiA9IDA7Ci0rICBlbHNlCi0rICAgIGFzLT5iaWdfZW5kaWFuID0gMTsKLSsKLSsgIHJldHVybiBhczsKLSsjZW5kaWYKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jCi1AQCAtMCwwICsxLDM5IEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfZ2V0X3Byb2NfaW5mbyAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19wcm9jX2luZm9fdCAqcGkpCi0rewotKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKLSsgIGludCByZXQ7Ci0rCi0rICByZXQgPSBkd2FyZl9tYWtlX3Byb2NfaW5mbyAoJmMtPmR3YXJmKTsKLSsgIGlmIChyZXQgPCAwKQotKyAgICByZXR1cm4gcmV0OwotKwotKyAgKnBpID0gYy0+ZHdhcmYucGk7Ci0rICByZXR1cm4gMDsKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMKLUBAIC0wLDAgKzEsMTAwIEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSAidW53aW5kX2kuaCIKLSsKLStQUk9URUNURUQgaW50Ci0rdW53X2dldF9zYXZlX2xvYyAodW53X2N1cnNvcl90ICpjdXJzb3IsIGludCByZWcsIHVud19zYXZlX2xvY190ICpzbG9jKQotK3sKLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rICBkd2FyZl9sb2NfdCBsb2M7Ci0rCi0rICBzd2l0Y2ggKHJlZykKLSsgICAgewotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gwOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1g0OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1g1OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1g2OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1g3OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1g4OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1g5OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTE6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDEyOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTQ6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE1OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNjoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTc6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE4OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjA6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDIxOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMjoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjM6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI0OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjY6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI3OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyODoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjk6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDMwOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1NQOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1BDOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1BTVEFURToKLSsgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKLSsgICAgICBicmVhazsKLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBsb2MgPSBEV0FSRl9OVUxMX0xPQzsJLyogZGVmYXVsdCB0byAibm90IHNhdmVkIiAqLwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICBtZW1zZXQgKHNsb2MsIDAsIHNpemVvZiAoKnNsb2MpKTsKLSsKLSsgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKLSsgICAgewotKyAgICAgIHNsb2MtPnR5cGUgPSBVTldfU0xUX05PTkU7Ci0rICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjaWYgIWRlZmluZWQoVU5XX0xPQ0FMX09OTFkpCi0rICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKLSsgICAgewotKyAgICAgIHNsb2MtPnR5cGUgPSBVTldfU0xUX1JFRzsKLSsgICAgICBzbG9jLT51LnJlZ251bSA9IERXQVJGX0dFVF9MT0MgKGxvYyk7Ci0rICAgIH0KLSsgIGVsc2UKLSsjZW5kaWYKLSsgICAgewotKyAgICAgIHNsb2MtPnR5cGUgPSBVTldfU0xUX01FTU9SWTsKLSsgICAgICBzbG9jLT51LmFkZHIgPSBEV0FSRl9HRVRfTE9DIChsb2MpOwotKyAgICB9Ci0rICByZXR1cm4gMDsKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9HZ2xvYmFsLmMKLUBAIC0wLDAgKzEsNTcgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKyNpbmNsdWRlICJkd2FyZl9pLmgiCi0rCi0rSElEREVOIGRlZmluZV9sb2NrIChhYXJjaDY0X2xvY2spOwotK0hJRERFTiBpbnQgdGRlcF9pbml0X2RvbmU7Ci0rCi0rSElEREVOIHZvaWQKLSt0ZGVwX2luaXQgKHZvaWQpCi0rewotKyAgaW50cm1hc2tfdCBzYXZlZF9tYXNrOwotKwotKyAgc2lnZmlsbHNldCAoJnVud2lfZnVsbF9tYXNrKTsKLSsKLSsgIGxvY2tfYWNxdWlyZSAoJmFhcmNoNjRfbG9jaywgc2F2ZWRfbWFzayk7Ci0rICB7Ci0rICAgIGlmICh0ZGVwX2luaXRfZG9uZSkKLSsgICAgICAvKiBhbm90aGVyIHRocmVhZCBlbHNlIGJlYXQgdXMgdG8gaXQuLi4gKi8KLSsgICAgICBnb3RvIG91dDsKLSsKLSsgICAgbWlfaW5pdCAoKTsKLSsKLSsgICAgZHdhcmZfaW5pdCAoKTsKLSsKLSsjaWZuZGVmIFVOV19SRU1PVEVfT05MWQotKyAgICBhYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdCAoKTsKLSsjZW5kaWYKLSsgICAgdGRlcF9pbml0X2RvbmUgPSAxOwkvKiBzaWduYWwgdGhhdCB3ZSdyZSBpbml0aWFsaXplZC4uLiAqLwotKyAgfQotKyBvdXQ6Ci0rICBsb2NrX3JlbGVhc2UgKCZhYXJjaDY0X2xvY2ssIHNhdmVkX21hc2spOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dpbml0LmMKLUBAIC0wLDAgKzEsMTg3IEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKwotKyNpZmRlZiBVTldfUkVNT1RFX09OTFkKLSsKLSsvKiB1bndfbG9jYWxfYWRkcl9zcGFjZSBpcyBhIE5VTEwgcG9pbnRlciBpbiB0aGlzIGNhc2UuICAqLwotK1BST1RFQ1RFRCB1bndfYWRkcl9zcGFjZV90IHVud19sb2NhbF9hZGRyX3NwYWNlOwotKwotKyNlbHNlIC8qICFVTldfUkVNT1RFX09OTFkgKi8KLSsKLStzdGF0aWMgc3RydWN0IHVud19hZGRyX3NwYWNlIGxvY2FsX2FkZHJfc3BhY2U7Ci0rCi0rUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QgdW53X2xvY2FsX2FkZHJfc3BhY2UgPSAmbG9jYWxfYWRkcl9zcGFjZTsKLSsKLStzdGF0aWMgaW5saW5lIHZvaWQgKgotK3VjX2FkZHIgKHVjb250ZXh0X3QgKnVjLCBpbnQgcmVnKQotK3sKLSsgIGlmIChyZWcgPj0gVU5XX0FBUkNINjRfWDAgJiYgcmVnIDw9IFVOV19BQVJDSDY0X1YzMSkKLSsgICAgcmV0dXJuICZ1Yy0+dWNfbWNvbnRleHQucmVnc1tyZWddOwotKyAgZWxzZQotKyAgICByZXR1cm4gTlVMTDsKLSt9Ci0rCi0rIyBpZmRlZiBVTldfTE9DQUxfT05MWQotKwotK0hJRERFTiB2b2lkICoKLSt0ZGVwX3VjX2FkZHIgKHVjb250ZXh0X3QgKnVjLCBpbnQgcmVnKQotK3sKLSsgIHJldHVybiB1Y19hZGRyICh1YywgcmVnKTsKLSt9Ci0rCi0rIyBlbmRpZiAvKiBVTldfTE9DQUxfT05MWSAqLwotKwotK0hJRERFTiB1bndfZHluX2luZm9fbGlzdF90IF9VX2R5bl9pbmZvX2xpc3Q7Ci0rCi0rLyogWFhYIGZpeCBtZTogdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBsb2NhdGUgdGhlIGR5bi1pbmZvIGxpc3QKLSsgICAgICAgYnkgYSByZW1vdGUgdW53aW5kZXIuICBPbiBpYTY0LCB0aGlzIGlzIGRvbmUgdmlhIGEgc3BlY2lhbAotKyAgICAgICB1bndpbmQtdGFibGUgZW50cnkuICBQZXJoYXBzIHNvbWV0aGluZyBzaW1pbGFyIGNhbiBiZSBkb25lIHdpdGgKLSsgICAgICAgRFdBUkYyIHVud2luZCBpbmZvLiAgKi8KLSsKLStzdGF0aWMgdm9pZAotK3B1dF91bndpbmRfaW5mbyAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3Byb2NfaW5mb190ICpwcm9jX2luZm8sIHZvaWQgKmFyZykKLSt7Ci0rICAvKiBpdCdzIGEgbm8tb3AgKi8KLSt9Ci0rCi0rc3RhdGljIGludAotK2dldF9keW5faW5mb19saXN0X2FkZHIgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgKmR5bl9pbmZvX2xpc3RfYWRkciwKLSsJCQl2b2lkICphcmcpCi0rewotKyAgKmR5bl9pbmZvX2xpc3RfYWRkciA9ICh1bndfd29yZF90KSAmX1VfZHluX2luZm9fbGlzdDsKLSsgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW50Ci0rYWNjZXNzX21lbSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBhZGRyLCB1bndfd29yZF90ICp2YWwsIGludCB3cml0ZSwKLSsJICAgIHZvaWQgKmFyZykKLSt7Ci0rICBpZiAod3JpdGUpCi0rICAgIHsKLSsgICAgICBEZWJ1ZyAoMTYsICJtZW1bJWx4XSA8LSAlbHhcbiIsIGFkZHIsICp2YWwpOwotKyAgICAgICoodW53X3dvcmRfdCAqKSBhZGRyID0gKnZhbDsKLSsgICAgfQotKyAgZWxzZQotKyAgICB7Ci0rICAgICAgKnZhbCA9ICoodW53X3dvcmRfdCAqKSBhZGRyOwotKyAgICAgIERlYnVnICgxNiwgIm1lbVslbHhdIC0+ICVseFxuIiwgYWRkciwgKnZhbCk7Ci0rICAgIH0KLSsgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW50Ci0rYWNjZXNzX3JlZyAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3JlZ251bV90IHJlZywgdW53X3dvcmRfdCAqdmFsLCBpbnQgd3JpdGUsCi0rCSAgICB2b2lkICphcmcpCi0rewotKyAgdW53X3dvcmRfdCAqYWRkcjsKLSsgIHVjb250ZXh0X3QgKnVjID0gYXJnOwotKwotKyAgaWYgKHVud19pc19mcHJlZyAocmVnKSkKLSsgICAgZ290byBiYWRyZWc7Ci0rCi0rICBpZiAoIShhZGRyID0gdWNfYWRkciAodWMsIHJlZykpKQotKyAgICBnb3RvIGJhZHJlZzsKLSsKLSsgIGlmICh3cml0ZSkKLSsgICAgewotKyAgICAgICoodW53X3dvcmRfdCAqKSBhZGRyID0gKnZhbDsKLSsgICAgICBEZWJ1ZyAoMTIsICIlcyA8LSAlbHhcbiIsIHVud19yZWduYW1lIChyZWcpLCAqdmFsKTsKLSsgICAgfQotKyAgZWxzZQotKyAgICB7Ci0rICAgICAgKnZhbCA9ICoodW53X3dvcmRfdCAqKSBhZGRyOwotKyAgICAgIERlYnVnICgxMiwgIiVzIC0+ICVseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksICp2YWwpOwotKyAgICB9Ci0rICByZXR1cm4gMDsKLSsKLSsgYmFkcmVnOgotKyAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOwotKyAgcmV0dXJuIC1VTldfRUJBRFJFRzsKLSt9Ci0rCi0rc3RhdGljIGludAotK2FjY2Vzc19mcHJlZyAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3JlZ251bV90IHJlZywgdW53X2ZwcmVnX3QgKnZhbCwKLSsJICAgICAgaW50IHdyaXRlLCB2b2lkICphcmcpCi0rewotKyAgdWNvbnRleHRfdCAqdWMgPSBhcmc7Ci0rICB1bndfZnByZWdfdCAqYWRkcjsKLSsKLSsgIGlmICghdW53X2lzX2ZwcmVnIChyZWcpKQotKyAgICBnb3RvIGJhZHJlZzsKLSsKLSsgIGlmICghKGFkZHIgPSB1Y19hZGRyICh1YywgcmVnKSkpCi0rICAgIGdvdG8gYmFkcmVnOwotKwotKyAgaWYgKHdyaXRlKQotKyAgICB7Ci0rICAgICAgRGVidWcgKDEyLCAiJXMgPC0gJTA4bHguJTA4bHguJTA4bHhcbiIsIHVud19yZWduYW1lIChyZWcpLAotKwkgICAgICgobG9uZyAqKXZhbClbMF0sICgobG9uZyAqKXZhbClbMV0sICgobG9uZyAqKXZhbClbMl0pOwotKyAgICAgICoodW53X2ZwcmVnX3QgKikgYWRkciA9ICp2YWw7Ci0rICAgIH0KLSsgIGVsc2UKLSsgICAgewotKyAgICAgICp2YWwgPSAqKHVud19mcHJlZ190ICopIGFkZHI7Ci0rICAgICAgRGVidWcgKDEyLCAiJXMgLT4gJTA4bHguJTA4bHguJTA4bHhcbiIsIHVud19yZWduYW1lIChyZWcpLAotKwkgICAgICgobG9uZyAqKXZhbClbMF0sICgobG9uZyAqKXZhbClbMV0sICgobG9uZyAqKXZhbClbMl0pOwotKyAgICB9Ci0rICByZXR1cm4gMDsKLSsKLSsgYmFkcmVnOgotKyAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOwotKyAgLyogYXR0ZW1wdCB0byBhY2Nlc3MgYSBub24tcHJlc2VydmVkIHJlZ2lzdGVyICovCi0rICByZXR1cm4gLVVOV19FQkFEUkVHOwotK30KLSsKLStzdGF0aWMgaW50Ci0rZ2V0X3N0YXRpY19wcm9jX25hbWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgaXAsCi0rCQkgICAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCB1bndfd29yZF90ICpvZmZwLAotKwkJICAgICAgdm9pZCAqYXJnKQotK3sKLSsgIHJldHVybiBfVWVsZjY0X2dldF9wcm9jX25hbWUgKGFzLCBnZXRwaWQgKCksIGlwLCBidWYsIGJ1Zl9sZW4sIG9mZnApOwotK30KLSsKLStISURERU4gdm9pZAotK2FhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICh2b2lkKQotK3sKLSsgIG1lbXNldCAoJmxvY2FsX2FkZHJfc3BhY2UsIDAsIHNpemVvZiAobG9jYWxfYWRkcl9zcGFjZSkpOwotKyAgbG9jYWxfYWRkcl9zcGFjZS5jYWNoaW5nX3BvbGljeSA9IFVOV19DQUNIRV9HTE9CQUw7Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5maW5kX3Byb2NfaW5mbyA9IGR3YXJmX2ZpbmRfcHJvY19pbmZvOwotKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MucHV0X3Vud2luZF9pbmZvID0gcHV0X3Vud2luZF9pbmZvOwotKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuZ2V0X2R5bl9pbmZvX2xpc3RfYWRkciA9IGdldF9keW5faW5mb19saXN0X2FkZHI7Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfbWVtID0gYWNjZXNzX21lbTsKLSsgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19yZWcgPSBhY2Nlc3NfcmVnOwotKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX2ZwcmVnID0gYWNjZXNzX2ZwcmVnOwotKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MucmVzdW1lID0gYWFyY2g2NF9sb2NhbF9yZXN1bWU7Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5nZXRfcHJvY19uYW1lID0gZ2V0X3N0YXRpY19wcm9jX25hbWU7Ci0rICB1bndfZmx1c2hfY2FjaGUgKCZsb2NhbF9hZGRyX3NwYWNlLCAwLCAwKTsKLSt9Ci0rCi0rI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMKLUBAIC0wLDAgKzEsNTUgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSAidW53aW5kX2kuaCIKLSsjaW5jbHVkZSAiaW5pdC5oIgotKwotKyNpZmRlZiBVTldfUkVNT1RFX09OTFkKLSsKLStQUk9URUNURUQgaW50Ci0rdW53X2luaXRfbG9jYWwgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfY29udGV4dF90ICp1YykKLSt7Ci0rICByZXR1cm4gLVVOV19FSU5WQUw7Ci0rfQotKwotKyNlbHNlIC8qICFVTldfUkVNT1RFX09OTFkgKi8KLSsKLStQUk9URUNURUQgaW50Ci0rdW53X2luaXRfbG9jYWwgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfY29udGV4dF90ICp1YykKLSt7Ci0rICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOwotKwotKyAgaWYgKCF0ZGVwX2luaXRfZG9uZSkKLSsgICAgdGRlcF9pbml0ICgpOwotKwotKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwKVxuIiwgYyk7Ci0rCi0rICBjLT5kd2FyZi5hcyA9IHVud19sb2NhbF9hZGRyX3NwYWNlOwotKyAgYy0+ZHdhcmYuYXNfYXJnID0gdWM7Ci0rCi0rICByZXR1cm4gY29tbW9uX2luaXQgKGMsIDEpOwotK30KLSsKLSsjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLwotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMKLUBAIC0wLDAgKzEsNDUgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgImluaXQuaCIKLSsjaW5jbHVkZSAidW53aW5kX2kuaCIKLSsKLStQUk9URUNURUQgaW50Ci0rdW53X2luaXRfcmVtb3RlICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X2FkZHJfc3BhY2VfdCBhcywgdm9pZCAqYXNfYXJnKQotK3sKLSsjaWZkZWYgVU5XX0xPQ0FMX09OTFkKLSsgIHJldHVybiAtVU5XX0VJTlZBTDsKLSsjZWxzZSAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rCi0rICBpZiAoIXRkZXBfaW5pdF9kb25lKQotKyAgICB0ZGVwX2luaXQgKCk7Ci0rCi0rICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKLSsKLSsgIGMtPmR3YXJmLmFzID0gYXM7Ci0rICBjLT5kd2FyZi5hc19hcmcgPSBhc19hcmc7Ci0rICByZXR1cm4gY29tbW9uX2luaXQgKGMsIDApOwotKyNlbmRpZiAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMKLUBAIC0wLDAgKzEsNjQgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rCi0rLyogVGhlIHJlc3RvcmVyIHN0dWIgd2lsbCBhbHdheXMgaGF2ZSB0aGUgZm9ybToKLSsKLSsgICBkMjgwMTE2OCAgICAgICAgbW92eiAgICB4OCwgIzB4OGIKLSsgICBkNDAwMDAwMSAgICAgICAgc3ZjICAgICAjMHgwCi0rKi8KLSsKLStQUk9URUNURUQgaW50Ci0rdW53X2lzX3NpZ25hbF9mcmFtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCi0rewotKyNpZmRlZiBfX2xpbnV4X18KLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rICB1bndfd29yZF90IHcwLCBpcDsKLSsgIHVud19hZGRyX3NwYWNlX3QgYXM7Ci0rICB1bndfYWNjZXNzb3JzX3QgKmE7Ci0rICB2b2lkICphcmc7Ci0rICBpbnQgcmV0OwotKwotKyAgYXMgPSBjLT5kd2FyZi5hczsKLSsgIGEgPSB1bndfZ2V0X2FjY2Vzc29ycyAoYXMpOwotKyAgYXJnID0gYy0+ZHdhcmYuYXNfYXJnOwotKwotKyAgaXAgPSBjLT5kd2FyZi5pcDsKLSsKLSsgIHJldCA9ICgqYS0+YWNjZXNzX21lbSkgKGFzLCBpcCwgJncwLCAwLCBhcmcpOwotKyAgaWYgKHJldCA8IDApCi0rICAgIHJldHVybiByZXQ7Ci0rCi0rICAvKiBGSVhNRTogZGlzdGluZ3Vpc2ggMzJiaXQgaW5zbiB2cyA2NGJpdCByZWdpc3RlcnMuICAqLwotKyAgaWYgKHcwICE9IDB4ZDQwMDAwMDFkMjgwMTE2OCkKLSsgICAgcmV0dXJuIDA7Ci0rCi0rICByZXR1cm4gMTsKLSsKLSsjZWxzZQotKyAgcmV0dXJuIC1VTldfRU5PSU5GTzsKLSsjZW5kaWYKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9HcmVncy5jCi1AQCAtMCwwICsxLDExMyBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rCi0rSElEREVOIGludAotK3RkZXBfYWNjZXNzX3JlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywgdW53X3dvcmRfdCAqdmFscCwKLSsJCSBpbnQgd3JpdGUpCi0rewotKyAgZHdhcmZfbG9jX3QgbG9jID0gRFdBUkZfTlVMTF9MT0M7Ci0rICB1bnNpZ25lZCBpbnQgbWFzazsKLSsKLSsgIHN3aXRjaCAocmVnKQotKyAgICB7Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDA6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDM6Ci0rICAgICAgbWFzayA9IDEgPDwgcmVnOwotKyAgICAgIGlmICh3cml0ZSkKLSsgICAgICAgIHsKLSsgICAgICAgICAgYy0+ZHdhcmYuZWhfYXJnc1tyZWddID0gKnZhbHA7Ci0rICAgICAgICAgIGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgfD0gbWFzazsKLSsgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgICAgZWxzZSBpZiAoKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiBtYXNrKSAhPSAwKQotKyAgICAgICAgewotKyAgICAgICAgICAqdmFscCA9IGMtPmR3YXJmLmVoX2FyZ3NbcmVnXTsKLSsgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgICAgZWxzZQotKyAgICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDQ6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDU6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDY6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDc6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDg6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDk6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDEwOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTI6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDEzOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTU6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE2OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTg6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE5OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjE6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDIyOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjQ6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI1OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNjoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjc6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI4OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzA6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfUEM6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfUFNUQVRFOgotKyAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOwotKyAgICAgIGJyZWFrOwotKwotKyAgICBjYXNlIFVOV19BQVJDSDY0X1NQOgotKyAgICAgIGlmICh3cml0ZSkKLSsgICAgICAgIHJldHVybiAtVU5XX0VSRUFET05MWVJFRzsKLSsgICAgICAqdmFscCA9IGMtPmR3YXJmLmNmYTsKLSsgICAgICByZXR1cm4gMDsKLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7Ci0rICAgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKLSsgICAgfQotKwotKyAgaWYgKHdyaXRlKQotKyAgICByZXR1cm4gZHdhcmZfcHV0ICgmYy0+ZHdhcmYsIGxvYywgKnZhbHApOwotKyAgZWxzZQotKyAgICByZXR1cm4gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGxvYywgdmFscCk7Ci0rfQotKwotK0hJRERFTiBpbnQKLSt0ZGVwX2FjY2Vzc19mcHJlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywgdW53X2ZwcmVnX3QgKnZhbHAsCi0rCQkgICBpbnQgd3JpdGUpCi0rewotKyAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOwotKyAgcmV0dXJuIC1VTldfRUJBRFJFRzsKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9HcmVzdW1lLmMKLUBAIC0wLDAgKzEsMTc3IEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBMaW5hcm8gTGltaXRlZAotKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKyNpbmNsdWRlICJvZmZzZXRzLmgiCi0rCi0rI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKLSsKLStISURERU4gaW5saW5lIGludAotK2FhcmNoNjRfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfY3Vyc29yX3QgKmN1cnNvciwgdm9pZCAqYXJnKQotK3sKLSsjaWZkZWYgX19saW51eF9fCi0rICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOwotKyAgdW53X3RkZXBfY29udGV4dF90ICp1YyA9IGMtPmR3YXJmLmFzX2FyZzsKLSsKLSsgIGlmIChjLT5zaWdjb250ZXh0X2Zvcm1hdCA9PSBBQVJDSDY0X1NDRl9OT05FKQotKyAgICB7Ci0rICAgICAgLyogU2luY2UgdGhlcmUgYXJlIG5vIHNpZ25hbHMgaW52b2x2ZWQgaGVyZSB3ZSByZXN0b3JlIHRoZSBub24gc2NyYXRjaAotKwkgcmVnaXN0ZXJzIG9ubHkuICAqLwotKyAgICAgIHVuc2lnbmVkIGxvbmcgcmVnc1sxMV07Ci0rICAgICAgcmVnc1swXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE5XTsKLSsgICAgICByZWdzWzFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjBdOwotKyAgICAgIHJlZ3NbMl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMV07Ci0rICAgICAgcmVnc1szXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIyXTsKLSsgICAgICByZWdzWzRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjNdOwotKyAgICAgIHJlZ3NbNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNF07Ci0rICAgICAgcmVnc1s2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI1XTsKLSsgICAgICByZWdzWzddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjZdOwotKyAgICAgIHJlZ3NbOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syN107Ci0rICAgICAgcmVnc1s5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI4XTsKLSsgICAgICByZWdzWzEwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzMwXTsgLyogTFIgKi8KLSsgICAgICB1bnNpZ25lZCBsb25nIHNwID0gdWMtPnVjX21jb250ZXh0LnNwOwotKwotKyAgICAgIHN0cnVjdCByZWdzX292ZXJsYXkgewotKyAgICAgICAgY2hhciB4W3NpemVvZihyZWdzKV07Ci0rICAgICAgfTsKLSsKLSsgICAgICBhc20gdm9sYXRpbGUgKAotKyAgICAgICAgImxkcCB4MTksIHgyMCwgWyUwXVxuIgotKyAgICAgICAgImxkcCB4MjEsIHgyMiwgWyUwLDE2XVxuIgotKyAgICAgICAgImxkcCB4MjMsIHgyNCwgWyUwLDMyXVxuIgotKyAgICAgICAgImxkcCB4MjUsIHgyNiwgWyUwLDQ4XVxuIgotKyAgICAgICAgImxkcCB4MjcsIHgyOCwgWyUwLDY0XVxuIgotKyAgICAgICAgImxkciB4MzAsIFslMCw4MF1cbiIKLSsgICAgICAgICJtb3Ygc3AsICUxXG4iCi0rICAgICAgICAicmV0IFxuIgotKyAgICAgICAgOgotKyAgICAgICAgOiAiciIgKHJlZ3MpLAotKyAgICAgICAgICAiciIgKHNwKSwKLSsgICAgICAgICAgIm0iICgqKHN0cnVjdCByZWdzX292ZXJsYXkgKilyZWdzKQotKyAgICAgICk7Ci0rICAgIH0KLSsgIGVsc2UKLSsgICAgewotKyAgICAgIHN0cnVjdCBzaWdjb250ZXh0ICpzYyA9IChzdHJ1Y3Qgc2lnY29udGV4dCAqKSBjLT5zaWdjb250ZXh0X2FkZHI7Ci0rCi0rICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDEpIHNjLT5yZWdzWzBdID0gYy0+ZHdhcmYuZWhfYXJnc1swXTsKLSsgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4Mikgc2MtPnJlZ3NbMV0gPSBjLT5kd2FyZi5laF9hcmdzWzFdOwotKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHg0KSBzYy0+cmVnc1syXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMl07Ci0rICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDgpIHNjLT5yZWdzWzNdID0gYy0+ZHdhcmYuZWhfYXJnc1szXTsKLSsKLSsgICAgICBzYy0+cmVnc1s0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzRdOwotKyAgICAgIHNjLT5yZWdzWzVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNV07Ci0rICAgICAgc2MtPnJlZ3NbNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s2XTsKLSsgICAgICBzYy0+cmVnc1s3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzddOwotKyAgICAgIHNjLT5yZWdzWzhdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbOF07Ci0rICAgICAgc2MtPnJlZ3NbOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s5XTsKLSsgICAgICBzYy0+cmVnc1sxMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMF07Ci0rICAgICAgc2MtPnJlZ3NbMTFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTFdOwotKyAgICAgIHNjLT5yZWdzWzEyXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEyXTsKLSsgICAgICBzYy0+cmVnc1sxM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxM107Ci0rICAgICAgc2MtPnJlZ3NbMTRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTRdOwotKyAgICAgIHNjLT5yZWdzWzE1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE1XTsKLSsgICAgICBzYy0+cmVnc1sxNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNl07Ci0rICAgICAgc2MtPnJlZ3NbMTddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTddOwotKyAgICAgIHNjLT5yZWdzWzE4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE4XTsKLSsgICAgICBzYy0+cmVnc1sxOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxOV07Ci0rICAgICAgc2MtPnJlZ3NbMjBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjBdOwotKyAgICAgIHNjLT5yZWdzWzIxXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIxXTsKLSsgICAgICBzYy0+cmVnc1syMl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMl07Ci0rICAgICAgc2MtPnJlZ3NbMjNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjNdOwotKyAgICAgIHNjLT5yZWdzWzI0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI0XTsKLSsgICAgICBzYy0+cmVnc1syNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNV07Ci0rICAgICAgc2MtPnJlZ3NbMjZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjZdOwotKyAgICAgIHNjLT5yZWdzWzI3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI3XTsKLSsgICAgICBzYy0+cmVnc1syOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOF07Ci0rICAgICAgc2MtPnJlZ3NbMjldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjldOwotKyAgICAgIHNjLT5yZWdzWzMwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzMwXTsKLSsgICAgICBzYy0+c3AgPSB1Yy0+dWNfbWNvbnRleHQuc3A7Ci0rICAgICAgc2MtPnBjID0gdWMtPnVjX21jb250ZXh0LnBjOwotKyAgICAgIHNjLT5wc3RhdGUgPSB1Yy0+dWNfbWNvbnRleHQucHN0YXRlOwotKwotKyAgICAgIGFzbSB2b2xhdGlsZSAoCi0rICAgICAgICAibW92IHNwLCAlMFxuIgotKyAgICAgICAgInJldCAlMVxuIgotKyAgICAgICAgOiA6ICJyIiAoYy0+c2lnY29udGV4dF9zcCksICJyIiAoYy0+c2lnY29udGV4dF9wYykKLSsgICAgICApOwotKyAgIH0KLSsgIHVucmVhY2hhYmxlKCk7Ci0rI2Vsc2UKLSsgIHByaW50ZiAoIiVzOiBpbXBsZW1lbnQgbWVcbiIsIF9fRlVOQ1RJT05fXyk7Ci0rI2VuZGlmCi0rICByZXR1cm4gLVVOV19FSU5WQUw7Ci0rfQotKwotKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCi0rCi0rc3RhdGljIGlubGluZSB2b2lkCi0rZXN0YWJsaXNoX21hY2hpbmVfc3RhdGUgKHN0cnVjdCBjdXJzb3IgKmMpCi0rewotKyAgdW53X2FkZHJfc3BhY2VfdCBhcyA9IGMtPmR3YXJmLmFzOwotKyAgdm9pZCAqYXJnID0gYy0+ZHdhcmYuYXNfYXJnOwotKyAgdW53X2ZwcmVnX3QgZnB2YWw7Ci0rICB1bndfd29yZF90IHZhbDsKLSsgIGludCByZWc7Ci0rCi0rICBEZWJ1ZyAoOCwgImNvcHlpbmcgb3V0IGN1cnNvciBzdGF0ZVxuIik7Ci0rCi0rICBmb3IgKHJlZyA9IDA7IHJlZyA8PSBVTldfQUFSQ0g2NF9QU1RBVEU7ICsrcmVnKQotKyAgICB7Ci0rICAgICAgRGVidWcgKDE2LCAiY29weWluZyAlcyAlZFxuIiwgdW53X3JlZ25hbWUgKHJlZyksIHJlZyk7Ci0rICAgICAgaWYgKHVud19pc19mcHJlZyAocmVnKSkKLSsJewotKwkgIGlmICh0ZGVwX2FjY2Vzc19mcHJlZyAoYywgcmVnLCAmZnB2YWwsIDApID49IDApCi0rCSAgICBhcy0+YWNjLmFjY2Vzc19mcHJlZyAoYXMsIHJlZywgJmZwdmFsLCAxLCBhcmcpOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgaWYgKHRkZXBfYWNjZXNzX3JlZyAoYywgcmVnLCAmdmFsLCAwKSA+PSAwKQotKwkgICAgYXMtPmFjYy5hY2Nlc3NfcmVnIChhcywgcmVnLCAmdmFsLCAxLCBhcmcpOwotKwl9Ci0rICAgIH0KLSt9Ci0rCi0rUFJPVEVDVEVEIGludAotK3Vud19yZXN1bWUgKHVud19jdXJzb3JfdCAqY3Vyc29yKQotK3sKLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rCi0rICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKLSsKLSsgIGlmICghYy0+ZHdhcmYuaXApCi0rICAgIHsKLSsgICAgICAvKiBUaGlzIGNhbiBoYXBwZW4gZWFzaWx5IHdoZW4gdGhlIGZyYW1lLWNoYWluIGdldHMgdHJ1bmNhdGVkCi0rCSBkdWUgdG8gYmFkIG9yIG1pc3NpbmcgdW53aW5kLWluZm8uICAqLwotKyAgICAgIERlYnVnICgxLCAicmVmdXNpbmcgdG8gcmVzdW1lIGV4ZWN1dGlvbiBhdCBhZGRyZXNzIDBcbiIpOwotKyAgICAgIHJldHVybiAtVU5XX0VJTlZBTDsKLSsgICAgfQotKwotKyAgZXN0YWJsaXNoX21hY2hpbmVfc3RhdGUgKGMpOwotKwotKyAgcmV0dXJuICgqYy0+ZHdhcmYuYXMtPmFjYy5yZXN1bWUpIChjLT5kd2FyZi5hcywgKHVud19jdXJzb3JfdCAqKSBjLAotKwkJCQkgICAgIGMtPmR3YXJmLmFzX2FyZyk7Ci0rfQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvR3N0ZXAuYwotQEAgLTAsMCArMSwxMjkgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCi0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rI2luY2x1ZGUgIm9mZnNldHMuaCIKLSsKLStQUk9URUNURUQgaW50Ci0rdW53X2hhbmRsZV9zaWduYWxfZnJhbWUgKHVud19jdXJzb3JfdCAqY3Vyc29yKQotK3sKLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rICBpbnQgcmV0OwotKyAgdW53X3dvcmRfdCBzY19hZGRyLCBzcCwgc3BfYWRkciA9IGMtPmR3YXJmLmNmYTsKLSsgIHN0cnVjdCBkd2FyZl9sb2Mgc3BfbG9jID0gRFdBUkZfTE9DIChzcF9hZGRyLCAwKTsKLSsKLSsgIGlmICgocmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIHNwX2xvYywgJnNwKSkgPCAwKQotKyAgICByZXR1cm4gLVVOV19FVU5TUEVDOwotKwotKyAgcmV0ID0gdW53X2lzX3NpZ25hbF9mcmFtZSAoY3Vyc29yKTsKLSsgIERlYnVnKDEsICJ1bndfaXNfc2lnbmFsX2ZyYW1lKCk9JWRcbiIsIHJldCk7Ci0rCi0rICAvKiBTYXZlIHRoZSBTUCBhbmQgUEMgdG8gYmUgYWJsZSB0byByZXR1cm4gZXhlY3V0aW9uIGF0IHRoaXMgcG9pbnQKLSsgICAgIGxhdGVyIGluIHRpbWUgKHVud19yZXN1bWUpLiAgKi8KLSsgIGMtPnNpZ2NvbnRleHRfc3AgPSBjLT5kd2FyZi5jZmE7Ci0rICBjLT5zaWdjb250ZXh0X3BjID0gYy0+ZHdhcmYuaXA7Ci0rCi0rICBpZiAocmV0KQotKyAgICB7Ci0rICAgICAgYy0+c2lnY29udGV4dF9mb3JtYXQgPSBBQVJDSDY0X1NDRl9MSU5VWF9SVF9TSUdGUkFNRTsKLSsgICAgICBzY19hZGRyID0gc3BfYWRkciArIHNpemVvZiAoc2lnaW5mb190KSArIExJTlVYX1VDX01DT05URVhUX09GRjsKLSsgICAgfQotKyAgZWxzZQotKyAgICByZXR1cm4gLVVOV19FVU5TUEVDOwotKwotKyAgYy0+c2lnY29udGV4dF9hZGRyID0gc2NfYWRkcjsKLSsKLSsgIC8qIFVwZGF0ZSB0aGUgZHdhcmYgY3Vyc29yLgotKyAgICAgU2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVnaXN0ZXJzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3NlcyBvZiB0aGUKLSsgICAgIHVjX21jb250ZXh0IC8gc2lnY29udGV4dCBzdHJ1Y3R1cmUgY29udGVudHMuICAqLwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gwXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMV9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMl9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YM19PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g0XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YNF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g1XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YNV9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g2XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YNl9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g3XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YN19PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g4XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YOF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g5XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YOV9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTBfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTFdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDExX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEyXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMl9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxM10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTNfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTRdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE0X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE1XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNV9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTZfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTddID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE3X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE4XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxOF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTlfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIwX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIxXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMV9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjJfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjNdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIzX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI0XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjVfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjZdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI2X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI3XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyN19PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjhfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjldID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI5X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDMwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gzMF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19TUF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19QQ19PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BTVEFURV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfUFNUQVRFX09GRiwgMCk7Ci0rCi0rICAvKiBTZXQgU1AvQ0ZBIGFuZCBQQy9JUC4gICovCi0rICBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSwgJmMtPmR3YXJmLmNmYSk7Ci0rICBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSwgJmMtPmR3YXJmLmlwKTsKLSsKLSsgIGMtPmR3YXJmLnBpX3ZhbGlkID0gMDsKLSsKLSsgIHJldHVybiAxOwotK30KLSsKLStQUk9URUNURUQgaW50Ci0rdW53X3N0ZXAgKHVud19jdXJzb3JfdCAqY3Vyc29yKQotK3sKLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rICBpbnQgcmV0OwotKwotKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwLCBpcD0weCUwMTZseCwgY2ZhPTB4JTAxNmx4KSlcbiIsCi0rCSBjLCBjLT5kd2FyZi5pcCwgYy0+ZHdhcmYuY2ZhKTsKLSsKLSsgIC8qIENoZWNrIGlmIHRoaXMgaXMgYSBzaWduYWwgZnJhbWUuICovCi0rICBpZiAodW53X2lzX3NpZ25hbF9mcmFtZSAoY3Vyc29yKSkKLSsgICAgcmV0dXJuIHVud19oYW5kbGVfc2lnbmFsX2ZyYW1lIChjdXJzb3IpOwotKwotKyAgcmV0ID0gZHdhcmZfc3RlcCAoJmMtPmR3YXJmKTsKLSsgIERlYnVnKDEsICJkd2FyZl9zdGVwKCk9JWRcbiIsIHJldCk7Ci0rCi0rICBpZiAodW5saWtlbHkgKHJldCA9PSAtVU5XX0VTVE9QVU5XSU5EKSkKLSsgICAgcmV0dXJuIHJldDsKLSsKLSsgIGlmICh1bmxpa2VseSAocmV0IDwgMCkpCi0rICAgIHJldHVybiAwOwotKwotKyAgcmV0dXJuIChjLT5kd2FyZi5pcCA9PSAwKSA/IDAgOiAxOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdjcmVhdGVfYWRkcl9zcGFjZS5jIgotKyNlbmRpZgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYwotQEAgLTAsMCArMSw1IEBACi0rI2RlZmluZSBVTldfTE9DQUxfT05MWQotKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSsjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQotKyNpbmNsdWRlICJHZ2V0X3Byb2NfaW5mby5jIgotKyNlbmRpZgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdnZXRfc2F2ZV9sb2MuYyIKLSsjZW5kaWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xnbG9iYWwuYwotQEAgLTAsMCArMSw1IEBACi0rI2RlZmluZSBVTldfTE9DQUxfT05MWQotKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSsjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQotKyNpbmNsdWRlICJHZ2xvYmFsLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9MaW5pdC5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdpbml0LmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9MaW5pdF9sb2NhbC5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdpbml0X2xvY2FsLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYwotQEAgLTAsMCArMSw1IEBACi0rI2RlZmluZSBVTldfTE9DQUxfT05MWQotKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSsjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQotKyNpbmNsdWRlICJHaW5pdF9yZW1vdGUuYyIKLSsjZW5kaWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYwotQEAgLTAsMCArMSw1IEBACi0rI2RlZmluZSBVTldfTE9DQUxfT05MWQotKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSsjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQotKyNpbmNsdWRlICJHaXNfc2lnbmFsX2ZyYW1lLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9McmVncy5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdyZWdzLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9McmVzdW1lLmMKLUBAIC0wLDAgKzEsNSBAQAotKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKLSsjaW5jbHVkZSA8bGlidW53aW5kLmg+Ci0rI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKLSsjaW5jbHVkZSAiR3Jlc3VtZS5jIgotKyNlbmRpZgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvTHN0ZXAuYwotQEAgLTAsMCArMSw1IEBACi0rI2RlZmluZSBVTldfTE9DQUxfT05MWQotKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSsjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQotKyNpbmNsdWRlICJHc3RlcC5jIgotKyNlbmRpZgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYwotQEAgLTAsMCArMSw2OCBAQAotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRkZWYuaD4KLSsjaW5jbHVkZSA8dWNvbnRleHQuaD4KLSsjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KLSsKLSsjZGVmaW5lIFVDKE4sWCkgXAotKyAgcHJpbnRmICgiI2RlZmluZSBMSU5VWF9VQ18iIE4gIl9PRkZcdDB4JVhcbiIsIG9mZnNldG9mICh1Y29udGV4dF90LCBYKSkKLSsKLSsjZGVmaW5lIFNDKE4sWCkgXAotKyAgcHJpbnRmICgiI2RlZmluZSBMSU5VWF9TQ18iIE4gIl9PRkZcdDB4JVhcbiIsIG9mZnNldG9mIChzdHJ1Y3Qgc2lnY29udGV4dCwgWCkpCi0rCi0raW50Ci0rbWFpbiAodm9pZCkKLSt7Ci0rICBwcmludGYgKAotKyIvKiBMaW51eC1zcGVjaWZpYyBkZWZpbml0aW9uczogKi9cblxuIgotKwotKyIvKiBEZWZpbmUgdmFyaW91cyBzdHJ1Y3R1cmUgb2Zmc2V0cyB0byBzaW1wbGlmeSBjcm9zcy1jb21waWxhdGlvbi4gICovXG5cbiIKLSsKLSsiLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCBcInVjb250ZXh0X3RcIjogICovXG5cbiIpOwotKwotKyAgVUMgKCJGTEFHUyIsIHVjX2ZsYWdzKTsKLSsgIFVDICgiTElOSyIsIHVjX2xpbmspOwotKyAgVUMgKCJTVEFDSyIsIHVjX3N0YWNrKTsKLSsgIFVDICgiTUNPTlRFWFQiLCB1Y19tY29udGV4dCk7Ci0rICBVQyAoIlNJR01BU0siLCB1Y19zaWdtYXNrKTsKLSsKLSsgIHByaW50ZiAoIlxuLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCBcInN0cnVjdCBzaWdjb250ZXh0XCI6ICAqL1xuXG4iKTsKLSsKLSsgIFNDICgiUjAiLCAgcmVnc1swXSk7Ci0rICBTQyAoIlIxIiwgIHJlZ3NbMV0pOwotKyAgU0MgKCJSMiIsICByZWdzWzJdKTsKLSsgIFNDICgiUjMiLCAgcmVnc1szXSk7Ci0rICBTQyAoIlI0IiwgIHJlZ3NbNF0pOwotKyAgU0MgKCJSNSIsICByZWdzWzVdKTsKLSsgIFNDICgiUjYiLCAgcmVnc1s2XSk7Ci0rICBTQyAoIlI3IiwgIHJlZ3NbN10pOwotKyAgU0MgKCJSOCIsICByZWdzWzhdKTsKLSsgIFNDICgiUjkiLCAgcmVnc1s5XSk7Ci0rICBTQyAoIlIxMCIsIHJlZ3NbMTBdKTsKLSsgIFNDICgiUjExIiwgcmVnc1sxMV0pOwotKyAgU0MgKCJSMTIiLCByZWdzWzEyXSk7Ci0rICBTQyAoIlIxMyIsIHJlZ3NbMTNdKTsKLSsgIFNDICgiUjE0IiwgcmVnc1sxNF0pOwotKyAgU0MgKCJSMTUiLCByZWdzWzE1XSk7Ci0rICBTQyAoIlIxNiIsIHJlZ3NbMTZdKTsKLSsgIFNDICgiUjE3IiwgcmVnc1sxN10pOwotKyAgU0MgKCJSMTgiLCByZWdzWzE4XSk7Ci0rICBTQyAoIlIxOSIsIHJlZ3NbMTldKTsKLSsgIFNDICgiUjIwIiwgcmVnc1syMF0pOwotKyAgU0MgKCJSMjEiLCByZWdzWzIxXSk7Ci0rICBTQyAoIlIyMiIsIHJlZ3NbMjJdKTsKLSsgIFNDICgiUjIzIiwgcmVnc1syM10pOwotKyAgU0MgKCJSMjQiLCByZWdzWzI0XSk7Ci0rICBTQyAoIlIyNSIsIHJlZ3NbMjVdKTsKLSsgIFNDICgiUjI2IiwgcmVnc1syNl0pOwotKyAgU0MgKCJSMjciLCByZWdzWzI3XSk7Ci0rICBTQyAoIlIyOCIsIHJlZ3NbMjhdKTsKLSsgIFNDICgiUjI5IiwgcmVnc1syOV0pOwotKyAgU0MgKCJSMzAiLCByZWdzWzMwXSk7Ci0rICBTQyAoIlIzMSIsIHJlZ3NbMzFdKTsKLSsKLSsgIFNDICgiUEMiLCBwYyk7Ci0rICBTQyAoIlNQIiwgc3ApOwotKyAgU0MgKCJGYXVsdCIsIGZhdWx0X2FkZHJlc3MpOwotKyAgU0MgKCJzdGF0ZSIsIHBzdGF0ZSk7Ci0rICByZXR1cm4gMDsKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9pbml0LmgKLUBAIC0wLDAgKzEsMTI3IEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKwotK3N0YXRpYyBpbmxpbmUgaW50Ci0rY29tbW9uX2luaXQgKHN0cnVjdCBjdXJzb3IgKmMsIHVuc2lnbmVkIHVzZV9wcmV2X2luc3RyKQotK3sKLSsgIGludCByZXQsIGk7Ci0rCi0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDBdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDNdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDMpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g0XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g0KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDZdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDYpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g3XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g3KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YOCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDldICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDkpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDExXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDExKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTIpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE0KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTUpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE3KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMThdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTgpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxOSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjEpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIzKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjQpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI2KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjcpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyOCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI5KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMzBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMzApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1NQKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9QQyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUFNUQVRFXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5XX0FBUkNINjRfUFNUQVRFKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjFdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WM10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjRdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjQpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y1XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y1KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjddICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjcpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y4XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y4KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WOV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WOSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTEpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEzKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTQpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE2KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTcpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxOCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE5KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIyKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjMpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI1KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjYpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI4KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjkpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjMxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMxKTsKLSsKLSsgIGZvciAoaSA9IFVOV19BQVJDSDY0X1BTVEFURSArIDE7IGkgPCBVTldfQUFSQ0g2NF9WMDsgKytpKQotKyAgICBjLT5kd2FyZi5sb2NbaV0gPSBEV0FSRl9OVUxMX0xPQzsKLSsKLSsgIHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdLCAmYy0+ZHdhcmYuaXApOwotKyAgaWYgKHJldCA8IDApCi0rICAgIHJldHVybiByZXQ7Ci0rCi0rICByZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSwgJmMtPmR3YXJmLmNmYSk7Ci0rICBpZiAocmV0IDwgMCkKLSsgICAgcmV0dXJuIHJldDsKLSsKLSsgIGMtPnNpZ2NvbnRleHRfZm9ybWF0ID0gQUFSQ0g2NF9TQ0ZfTk9ORTsKLSsgIGMtPnNpZ2NvbnRleHRfYWRkciA9IDA7Ci0rICBjLT5zaWdjb250ZXh0X3NwID0gMDsKLSsgIGMtPnNpZ2NvbnRleHRfcGMgPSAwOwotKwotKyAgYy0+ZHdhcmYuYXJnc19zaXplID0gMDsKLSsgIGMtPmR3YXJmLnJldF9hZGRyX2NvbHVtbiA9IDA7Ci0rICBjLT5kd2FyZi5zdGFzaF9mcmFtZXMgPSAwOwotKyAgYy0+ZHdhcmYudXNlX3ByZXZfaW5zdHIgPSB1c2VfcHJldl9pbnN0cjsKLSsgIGMtPmR3YXJmLnBpX3ZhbGlkID0gMDsKLSsgIGMtPmR3YXJmLnBpX2lzX2R5bmFtaWMgPSAwOwotKyAgYy0+ZHdhcmYuaGludCA9IDA7Ci0rICBjLT5kd2FyZi5wcmV2X3JzID0gMDsKLSsKLSsgIHJldHVybiAwOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L2lzX2ZwcmVnLmMKLUBAIC0wLDAgKzEsMzIgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgImxpYnVud2luZF9pLmgiCi0rCi0rUFJPVEVDVEVEIGludAotK3Vud19pc19mcHJlZyAoaW50IHJlZ251bSkKLSt7Ci0rICByZXR1cm4gKHJlZ251bSA+PSBVTldfQUFSQ0g2NF9WMCAmJiByZWdudW0gPD0gVU5XX0FBUkNINjRfVjMxKTsKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9vZmZzZXRzLmgKLUBAIC0wLDAgKzEsNDkgQEAKLSsvKiBMaW51eC1zcGVjaWZpYyBkZWZpbml0aW9uczogKi8KLSsKLSsvKiBEZWZpbmUgdmFyaW91cyBzdHJ1Y3R1cmUgb2Zmc2V0cyB0byBzaW1wbGlmeSBjcm9zcy1jb21waWxhdGlvbi4gICovCi0rCi0rLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCAidWNvbnRleHRfdCI6ICAqLwotKwotKyNkZWZpbmUgTElOVVhfVUNfRkxBR1NfT0ZGCTB4MAotKyNkZWZpbmUgTElOVVhfVUNfTElOS19PRkYJMHg4Ci0rI2RlZmluZSBMSU5VWF9VQ19TVEFDS19PRkYJMHgxMAotKyNkZWZpbmUgTElOVVhfVUNfU0lHTUFTS19PRkYJMHgyOAotKyNkZWZpbmUgTElOVVhfVUNfTUNPTlRFWFRfT0ZGCTB4YjAKLSsKLSsvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4ICJzdHJ1Y3Qgc2lnY29udGV4dCI6ICAqLwotKwotKyNkZWZpbmUgTElOVVhfU0NfRkFVTFRBRERSRVNTX09GRgkweDAwCi0rI2RlZmluZSBMSU5VWF9TQ19YMF9PRkYJCTB4MDA4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMV9PRkYJCTB4MDEwCi0rI2RlZmluZSBMSU5VWF9TQ19YMl9PRkYJCTB4MDE4Ci0rI2RlZmluZSBMSU5VWF9TQ19YM19PRkYJCTB4MDIwCi0rI2RlZmluZSBMSU5VWF9TQ19YNF9PRkYJCTB4MDI4Ci0rI2RlZmluZSBMSU5VWF9TQ19YNV9PRkYJCTB4MDMwCi0rI2RlZmluZSBMSU5VWF9TQ19YNl9PRkYJCTB4MDM4Ci0rI2RlZmluZSBMSU5VWF9TQ19YN19PRkYJCTB4MDQwCi0rI2RlZmluZSBMSU5VWF9TQ19YOF9PRkYJCTB4MDQ4Ci0rI2RlZmluZSBMSU5VWF9TQ19YOV9PRkYJCTB4MDUwCi0rI2RlZmluZSBMSU5VWF9TQ19YMTBfT0ZGCTB4MDU4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMTFfT0ZGCTB4MDYwCi0rI2RlZmluZSBMSU5VWF9TQ19YMTJfT0ZGCTB4MDY4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMTNfT0ZGCTB4MDcwCi0rI2RlZmluZSBMSU5VWF9TQ19YMTRfT0ZGCTB4MDc4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMTVfT0ZGCTB4MDgwCi0rI2RlZmluZSBMSU5VWF9TQ19YMTZfT0ZGCTB4MDg4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMTdfT0ZGCTB4MDkwCi0rI2RlZmluZSBMSU5VWF9TQ19YMThfT0ZGCTB4MDk4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMTlfT0ZGCTB4MGEwCi0rI2RlZmluZSBMSU5VWF9TQ19YMjBfT0ZGCTB4MGE4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMjFfT0ZGCTB4MGIwCi0rI2RlZmluZSBMSU5VWF9TQ19YMjJfT0ZGCTB4MGI4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMjNfT0ZGCTB4MGMwCi0rI2RlZmluZSBMSU5VWF9TQ19YMjRfT0ZGCTB4MGM4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMjVfT0ZGCTB4MGQwCi0rI2RlZmluZSBMSU5VWF9TQ19YMjZfT0ZGCTB4MGQ4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMjdfT0ZGCTB4MGUwCi0rI2RlZmluZSBMSU5VWF9TQ19YMjhfT0ZGCTB4MGU4Ci0rI2RlZmluZSBMSU5VWF9TQ19YMjlfT0ZGCTB4MGYwCi0rI2RlZmluZSBMSU5VWF9TQ19YMzBfT0ZGCTB4MGY4Ci0rI2RlZmluZSBMSU5VWF9TQ19TUF9PRkYJCTB4MTAwCi0rI2RlZmluZSBMSU5VWF9TQ19QQ19PRkYJCTB4MTA4Ci0rI2RlZmluZSBMSU5VWF9TQ19QU1RBVEVfT0ZGCTB4MTEwCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9yZWduYW1lLmMKLUBAIC0wLDAgKzEsMTA2IEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKwotK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCByZWduYW1lW10gPQotKyAgewotKyAgICBbVU5XX0FBUkNINjRfWDBdID0gIngwIiwKLSsgICAgW1VOV19BQVJDSDY0X1gxXSA9ICJ4MSIsCi0rICAgIFtVTldfQUFSQ0g2NF9YMl0gPSAieDIiLAotKyAgICBbVU5XX0FBUkNINjRfWDNdID0gIngzIiwKLSsgICAgW1VOV19BQVJDSDY0X1g0XSA9ICJ4NCIsCi0rICAgIFtVTldfQUFSQ0g2NF9YNV0gPSAieDUiLAotKyAgICBbVU5XX0FBUkNINjRfWDZdID0gIng2IiwKLSsgICAgW1VOV19BQVJDSDY0X1g3XSA9ICJ4NyIsCi0rICAgIFtVTldfQUFSQ0g2NF9YOF0gPSAieDgiLAotKyAgICBbVU5XX0FBUkNINjRfWDldID0gIng5IiwKLSsgICAgW1VOV19BQVJDSDY0X1gxMF0gPSAieDEwIiwKLSsgICAgW1VOV19BQVJDSDY0X1gxMV0gPSAieDExIiwKLSsgICAgW1VOV19BQVJDSDY0X1gxMl0gPSAieDEyIiwKLSsgICAgW1VOV19BQVJDSDY0X1gxM10gPSAieDEzIiwKLSsgICAgW1VOV19BQVJDSDY0X1gxNF0gPSAieDE0IiwKLSsgICAgW1VOV19BQVJDSDY0X1gxNV0gPSAieDE1IiwKLSsgICAgW1VOV19BQVJDSDY0X1gxNl0gPSAiaXAwIiwKLSsgICAgW1VOV19BQVJDSDY0X1gxN10gPSAiaXAxIiwKLSsgICAgW1VOV19BQVJDSDY0X1gxOF0gPSAieDE4IiwKLSsgICAgW1VOV19BQVJDSDY0X1gxOV0gPSAieDE5IiwKLSsgICAgW1VOV19BQVJDSDY0X1gyMF0gPSAieDIwIiwKLSsgICAgW1VOV19BQVJDSDY0X1gyMV0gPSAieDIxIiwKLSsgICAgW1VOV19BQVJDSDY0X1gyMl0gPSAieDIyIiwKLSsgICAgW1VOV19BQVJDSDY0X1gyM10gPSAieDIzIiwKLSsgICAgW1VOV19BQVJDSDY0X1gyNF0gPSAieDI0IiwKLSsgICAgW1VOV19BQVJDSDY0X1gyNV0gPSAieDI1IiwKLSsgICAgW1VOV19BQVJDSDY0X1gyNl0gPSAieDI2IiwKLSsgICAgW1VOV19BQVJDSDY0X1gyN10gPSAieDI3IiwKLSsgICAgW1VOV19BQVJDSDY0X1gyOF0gPSAieDI4IiwKLSsgICAgW1VOV19BQVJDSDY0X1gyOV0gPSAiZnAiLAotKyAgICBbVU5XX0FBUkNINjRfWDMwXSA9ICJsciIsCi0rICAgIFtVTldfQUFSQ0g2NF9TUF0gPSAic3AiLAotKyAgICBbVU5XX0FBUkNINjRfUENdID0gInBjIiwKLSsgICAgW1VOV19BQVJDSDY0X1YwXSA9ICJ2MCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMV0gPSAidjEiLAotKyAgICBbVU5XX0FBUkNINjRfVjJdID0gInYyIiwKLSsgICAgW1VOV19BQVJDSDY0X1YzXSA9ICJ2MyIsCi0rICAgIFtVTldfQUFSQ0g2NF9WNF0gPSAidjQiLAotKyAgICBbVU5XX0FBUkNINjRfVjVdID0gInY1IiwKLSsgICAgW1VOV19BQVJDSDY0X1Y2XSA9ICJ2NiIsCi0rICAgIFtVTldfQUFSQ0g2NF9WN10gPSAidjciLAotKyAgICBbVU5XX0FBUkNINjRfVjhdID0gInY4IiwKLSsgICAgW1VOV19BQVJDSDY0X1Y5XSA9ICJ2OSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTBdID0gInYxMCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTFdID0gInYxMSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTJdID0gInYxMiIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTNdID0gInYxMyIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTRdID0gInYxNCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTVdID0gInYxNSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTZdID0gInYxNiIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTddID0gInYxNyIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMThdID0gInYxOCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMTldID0gInYxOSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjBdID0gInYyMCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjFdID0gInYyMSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjJdID0gInYyMiIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjNdID0gInYyMyIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjRdID0gInYyNCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjVdID0gInYyNSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjZdID0gInYyNiIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjddID0gInYyNyIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjhdID0gInYyOCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMjldID0gInYyOSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMzBdID0gInYzMCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMzFdID0gInYzMSIsCi0rICAgIFtVTldfQUFSQ0g2NF9GUFNSXSA9ICJmcHNyIiwKLSsgICAgW1VOV19BQVJDSDY0X0ZQQ1JdID0gImZwY3IiLAotKyAgfTsKLSsKLStQUk9URUNURUQgY29uc3QgY2hhciAqCi0rdW53X3JlZ25hbWUgKHVud19yZWdudW1fdCByZWcpCi0rewotKyAgaWYgKHJlZyA8ICh1bndfcmVnbnVtX3QpIEFSUkFZX1NJWkUgKHJlZ25hbWUpICYmIHJlZ25hbWVbcmVnXSAhPSBOVUxMKQotKyAgICByZXR1cm4gcmVnbmFtZVtyZWddOwotKyAgZWxzZQotKyAgICByZXR1cm4gIj8/PyI7Ci0rfQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TCi1AQCAtMCwwICsxLDEyIEBACi0rCS8qIER1bW15IGltcGxlbWVudGF0aW9uIGZvciBub3cuICAqLwotKwotKwkuZ2xvYmFsIF9VSV9zaWdsb25nam1wX2NvbnQKLSsJLmdsb2JhbCBfVUlfbG9uZ2ptcF9jb250Ci0rCi0rX1VJX3NpZ2xvbmdqbXBfY29udDoKLStfVUlfbG9uZ2ptcF9jb250OgotKwlyZXQKLSsjaWZkZWYgX19saW51eF9fCi0rIC8qIFdlIGRvIG5vdCBuZWVkIGV4ZWN1dGFibGUgc3RhY2suICAqLwotKyAuc2VjdGlvbiAgLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cwotKyNlbmRpZgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvdW53aW5kX2kuaAotQEAgLTAsMCArMSw0MyBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaWZuZGVmIHVud2luZF9pX2gKLSsjZGVmaW5lIHVud2luZF9pX2gKLSsKLSsjaW5jbHVkZSA8c3RkaW50Lmg+Ci0rCi0rI2luY2x1ZGUgPGxpYnVud2luZC1hYXJjaDY0Lmg+Ci0rCi0rI2luY2x1ZGUgImxpYnVud2luZF9pLmgiCi0rCi0rI2RlZmluZSBhYXJjaDY0X2xvY2sJCQlVTldfT0JKKGxvY2spCi0rI2RlZmluZSBhYXJjaDY0X2xvY2FsX3Jlc3VtZQkJVU5XX09CSihsb2NhbF9yZXN1bWUpCi0rI2RlZmluZSBhYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdAlVTldfT0JKKGxvY2FsX2FkZHJfc3BhY2VfaW5pdCkKLSsKLStleHRlcm4gdm9pZCBhYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdCAodm9pZCk7Ci0rZXh0ZXJuIGludCBhYXJjaDY0X2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X2N1cnNvcl90ICpjdXJzb3IsCi0rCQkJICAgICB2b2lkICphcmcpOwotKwotKyNlbmRpZiAvKiB1bndpbmRfaV9oICovCi0tLS0gYS9zcmMvY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2xpbnV4LmMKLSsrKyBiL3NyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYwotQEAgLTM5LDcgKzM5LDEwIEBAIF9VQ0RfYWNjZXNzX3JlZyAodW53X2FkZHJfc3BhY2VfdCBhcywKLSAgICAgICByZXR1cm4gLVVOV19FSU5WQUw7Ci0gICAgIH0KLSAKLS0jaWYgZGVmaW5lZChVTldfVEFSR0VUX0FSTSkKLSsjaWYgZGVmaW5lZChVTldfVEFSR0VUX0FBUkNINjQpCi0rICBpZiAocmVnbnVtIDwgMCB8fCByZWdudW0gPj0gVU5XX0FBUkNINjRfRlBDUikKLSsgICAgZ290byBiYWRyZWc7Ci0rI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX0FSTSkKLSAgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSAxNikKLSAgICAgZ290byBiYWRyZWc7Ci0gI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX1NIKQotLS0tIGEvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYwotKysrIGIvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYwotQEAgLTEsNiArMSw3IEBACi0gLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotICAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEhld2xldHQtUGFja2FyZCBDbwotIAlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0gCi0gVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotIAotQEAgLTUwMSw2ICs1MDIsNDEgQEAgY29uc3QgaW50IF9VUFRfcmVnX29mZnNldFtVTldfUkVHX0xBU1QgKwotICAgICBbVU5XX0FSTV9SMTVdICAgICAgPSAweDNjLAotICNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9NSVBTKQotICNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9TSCkKLSsjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfQUFSQ0g2NCkKLSsgICAgW1VOV19BQVJDSDY0X1gwXSAgICAgICA9IDB4MDAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMV0gICAgICAgPSAweDA4LAotKyAgICBbVU5XX0FBUkNINjRfWDJdICAgICAgID0gMHgxMCwKLSsgICAgW1VOV19BQVJDSDY0X1gzXSAgICAgICA9IDB4MTgsCi0rICAgIFtVTldfQUFSQ0g2NF9YNF0gICAgICAgPSAweDIwLAotKyAgICBbVU5XX0FBUkNINjRfWDVdICAgICAgID0gMHgyOCwKLSsgICAgW1VOV19BQVJDSDY0X1g2XSAgICAgICA9IDB4MzAsCi0rICAgIFtVTldfQUFSQ0g2NF9YN10gICAgICAgPSAweDM4LAotKyAgICBbVU5XX0FBUkNINjRfWDhdICAgICAgID0gMHg0MCwKLSsgICAgW1VOV19BQVJDSDY0X1g5XSAgICAgICA9IDB4NDgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMTBdICAgICAgPSAweDUwLAotKyAgICBbVU5XX0FBUkNINjRfWDExXSAgICAgID0gMHg1OCwKLSsgICAgW1VOV19BQVJDSDY0X1gxMl0gICAgICA9IDB4NjAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMTNdICAgICAgPSAweDY4LAotKyAgICBbVU5XX0FBUkNINjRfWDE0XSAgICAgID0gMHg3MCwKLSsgICAgW1VOV19BQVJDSDY0X1gxNV0gICAgICA9IDB4NzgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMTZdICAgICAgPSAweDgwLAotKyAgICBbVU5XX0FBUkNINjRfWDE3XSAgICAgID0gMHg4OCwKLSsgICAgW1VOV19BQVJDSDY0X1gxOF0gICAgICA9IDB4OTAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMTldICAgICAgPSAweDk4LAotKyAgICBbVU5XX0FBUkNINjRfWDIwXSAgICAgID0gMHhhMCwKLSsgICAgW1VOV19BQVJDSDY0X1gyMV0gICAgICA9IDB4YTgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMjJdICAgICAgPSAweGIwLAotKyAgICBbVU5XX0FBUkNINjRfWDIzXSAgICAgID0gMHhiOCwKLSsgICAgW1VOV19BQVJDSDY0X1gyNF0gICAgICA9IDB4YzAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMjVdICAgICAgPSAweGM4LAotKyAgICBbVU5XX0FBUkNINjRfWDI2XSAgICAgID0gMHhkMCwKLSsgICAgW1VOV19BQVJDSDY0X1gyN10gICAgICA9IDB4ZDgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMjhdICAgICAgPSAweGUwLAotKyAgICBbVU5XX0FBUkNINjRfWDI5XSAgICAgID0gMHhlOCwKLSsgICAgW1VOV19BQVJDSDY0X1gzMF0gICAgICA9IDB4ZjAsCi0rICAgIFtVTldfQUFSQ0g2NF9TUF0gICAgICAgPSAweGY4LAotKyAgICBbVU5XX0FBUkNINjRfUENdICAgICAgID0gMHgxMDAsCi0rICAgIFtVTldfQUFSQ0g2NF9QU1RBVEVdICAgPSAweDEwOAotICNlbHNlCi0gIyBlcnJvciBGaXggbWUuCi0gI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzBmNWMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotRml4IHRlc3QgY2FzZSBsaW5rIGZhaWx1cmUgb24gUG93ZXJQQyBzeXN0ZW1zIHdpdGggQWx0aXZlYwotCi1VcHN0cmVhbS1TdGF0dXM6YmFja3BvcnQKLQotT24gc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGNvbXBpbGVyIHN1cHBvcnRzIEFsdGl2ZWMgYnkgZGVmYXVsdCwKLXRoZSBsaWJ1bndpbmQgTWFrZWZpbGUgd2lsbCBhdHRlbXB0IHRvIGJ1aWxkIGFuIGV4dHJhIHRlc3QgY2FzZQotcHBjNjQtdGVzdC1hbHRpdmVjLiAgVW5mb3J0dW5hdGVseSwgdGhlIGxpbmsgc3RlcCB3aWxsIGZhaWwgc2luY2UKLXRoZSBNYWtlZmlsZSBkb2VzIG5vdCBhY3R1YWxseSBsaW5rIGFnYWluc3QgdGhlIGxpYnVud2luZCBsaWJyYXJ5LgotCi1GaXhlZCBieSBhZGRpbmcgdGhlIGFwcHJvcHJpYXRlIExEQUREIG1hY3JvLgotCi1TaWduZWQtb2ZmLWJ5OiBVbHJpY2ggV2VpZ2FuZCA8YWRkcmVzc0BoaWRkZW4+Ci0tLS0KLSB0ZXN0cy9NYWtlZmlsZS5hbSB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQotaW5kZXggMGUzMDUzNi4uOWM3NjYyOCAxMDA2NDQKLS0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCi0rKysgYi90ZXN0cy9NYWtlZmlsZS5hbQotQEAgLTIwMSwzICsyMDEsNCBAQCBMaWE2NF90ZXN0X3Jic19MREFERCA9ICQoTElCVU5XSU5EX2xvY2FsKQotIExpYTY0X3Rlc3RfcmVhZG9ubHlfTERBREQgPSAkKExJQlVOV0lORF9sb2NhbCkKLSBpYTY0X3Rlc3RfZHluMV9MREFERCA9ICQoTElCVU5XSU5EKQotIGlhNjRfdGVzdF9zaWdfTERBREQgPSAkKExJQlVOV0lORCkKLStwcGM2NF90ZXN0X2FsdGl2ZWNfTERBREQgPSAkKExJQlVOV0lORCkKLS0tIAotMS44LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNTVjOTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLUZyb20gNTA4Y2ExN2E3YmUwMWQxY2M5NjBkOWEwN2QwYWY0NTEzOTQ4ZmI4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Ci1EYXRlOiBGcmksIDI3IEp1biAyMDE0IDA4OjQwOjMzICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIExpbmsgbGlidW53aW5kIHRvIGxpYmdjY19zIHJhdGhlciB0aGFuIGxpYmdjYwotCi1Gb3Igc29tZSBhcmNoaXRlY3R1cmVzLCAtbGdjYyBhbmQgLWxnY2NfcyBhcmUgbm90IGVxdWl2YWxlbnQuIE9uIEFSTSBmb3IKLWV4YW1wbGUsIGxpYmdjY19zLnNvLjEgY29udGFpbnMgc29tZSBzeW1ib2xzIG5lZWRlZCBieSBsaWJ1bndpbmQgd2hpY2gKLWFyZSBub3QgcHJlc2VudCBpbiBsaWJnY2MuCi0KLVRoaXMgY2F1c2VzIHRoZSBmb2xsb3dpbmcgbGluayBlcnJvciB3aGVuIGJ1aWxkaW5nIHRoZSBYLk9yZyBYIHNlcnZlcgotd2l0aCBsaWJ1bndpbmQgc3VwcG9ydDoKLQotCSAgQ0NMRCAgICAgWG9yZwotCS91c3IvbGliL2xpYnVud2luZC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZWFiaV91bndpbmRfY3BwX3ByMCcKLQkvdXNyL2xpYi9saWJ1bndpbmQuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWVhYmlfdW53aW5kX2NwcF9wcjEnCi0KLUxpbmtpbmcgYWdhaW5zdCBsaWJnY2NfcyBleHBsaWNpdGx5IHNvbHZlcyB0aGlzIHByb2JsZW0uCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KLS0tLQotIGNvbmZpZ3VyZS5hYyB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggY2ZmZTE5Yi4uM2JlYjVmMiAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMjU4LDcgKzI1OCw3IEBAIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sjaWZuZGVmIF9fSU5URUxfQ09NUElMRVIKLSAKLSBpZiB0ZXN0IHgkR0NDID0geHllcyAtYSB4JGludGVsX2NvbXBpbGVyICE9IHh5ZXM7IHRoZW4KLSAgIENGTEFHUz0iJHtDRkxBR1N9IC1mZXhjZXB0aW9ucyAtV2FsbCAtV3NpZ24tY29tcGFyZSIKLS0gIExJQkNSVFM9Ii1sZ2NjIgotKyAgTElCQ1JUUz0iLWxnY2NfcyIKLSBmaQotIEFDX01TR19SRVNVTFQoWyRpbnRlbF9jb21waWxlcl0pCi0gCi0tLSAKLTIuMy4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9TdXBwb3J0LWJ1aWxkaW5nLXdpdGgtb2xkZXItY29tcGlsZXJzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2OGI3MDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1Gcm9tIDEwYjA2NGZmZTkwMmQ1YWYzMWJiNDliZDhlNGYwM2M1NDVmOGQ0NjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+Ci1EYXRlOiBUdWUsIDEzIE5vdiAyMDEyIDExOjE5OjQ3ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIFN1cHBvcnQgYnVpbGRpbmcgd2l0aCBvbGRlciBjb21waWxlcnMuCi0KLUFkZCBhIGNoZWNrIGZvciBfX2J1aWx0aW5fdW5yZWFjaGFibGUuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gY29uZmlndXJlLmFjICAgICAgICAgIHwgICAxMSArKysrKysrKysrKwotIGluY2x1ZGUvbGlidW53aW5kX2kuaCB8ICAgIDYgKysrKysrCi0gc3JjL2FybS9HcmVzdW1lLmMgICAgIHwgICAgMiArLQotIHNyYy9zaC9HcmVzdW1lLmMgICAgICB8ICAgIDIgKy0KLSA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMjg1LDYgKzI4NSwxNyBAQCBpZiB0ZXN0IHgkaGF2ZV9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlID0KLSBmaQotIEFDX01TR19SRVNVTFQoWyRoYXZlX19idWlsdGluX19fY2xlYXJfY2FjaGVdKQotIAotK0FDX01TR19DSEVDS0lORyhbZm9yIF9fYnVpbHRpbl91bnJlYWNoYWJsZV0pCi0rQUNfTElOS19JRkVMU0UoCi0rICBbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbX19idWlsdGluX3VucmVhY2hhYmxlKCldXSldLAotKyAgW2hhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGU9eWVzXSwKLSsgIFtoYXZlX19idWlsdGluX3VucmVhY2hhYmxlPW5vXSkKLStpZiB0ZXN0IHgkaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZSA9IHh5ZXM7IHRoZW4KLSsgIEFDX0RFRklORShbSEFWRV9fQlVJTFRJTl9VTlJFQUNIQUJMRV0sIFsxXSwKLSsgICAgICAgICAgICBbRGVmaW5lZCBpZiBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKSBpcyBhdmFpbGFibGVdKQotK2ZpCi0rQUNfTVNHX1JFU1VMVChbJGhhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGVdKQotKwotIEFDX01TR19DSEVDS0lORyhbZm9yIF9fc3luYyBhdG9taWNzXSkKLSBBQ19MSU5LX0lGRUxTRSgKLSAgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sKLS0tLSBhL2luY2x1ZGUvbGlidW53aW5kX2kuaAotKysrIGIvaW5jbHVkZS9saWJ1bndpbmRfaS5oCi1AQCAtNzIsNiArNzIsMTIgQEAgV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERQotICMgZW5kaWYKLSAjZW5kaWYKLSAKLSsjaWYgZGVmaW5lZChIQVZFX19CVUlMVElOX1VOUkVBQ0hBQkxFKQotKyMgZGVmaW5lIHVucmVhY2hhYmxlKCkgX19idWlsdGluX3VucmVhY2hhYmxlKCkKLSsjZWxzZQotKyMgZGVmaW5lIHVucmVhY2hhYmxlKCkgZG8geyB9IHdoaWxlICgxKQotKyNlbmRpZgotKwotICNpZmRlZiBERUJVRwotICMgZGVmaW5lIFVOV19ERUJVRwkxCi0gI2Vsc2UKLS0tLSBhL3NyYy9hcm0vR3Jlc3VtZS5jCi0rKysgYi9zcmMvYXJtL0dyZXN1bWUuYwotQEAgLTk2LDcgKzk2LDcgQEAgYXJtX2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdQotIAk6IDogInIiIChjLT5zaWdjb250ZXh0X3NwKSwgInIiIChjLT5zaWdjb250ZXh0X3BjKQotICAgICAgICk7Ci0gICAgfQotLSAgX19idWlsdGluX3VucmVhY2hhYmxlKCk7Ci0rICB1bnJlYWNoYWJsZSgpOwotICNlbHNlCi0gICBwcmludGYgKCIlczogaW1wbGVtZW50IG1lXG4iLCBfX0ZVTkNUSU9OX18pOwotICNlbmRpZgotLS0tIGEvc3JjL3NoL0dyZXN1bWUuYwotKysrIGIvc3JjL3NoL0dyZXN1bWUuYwotQEAgLTEwOSw3ICsxMDksNyBAQCBzaF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVuCi0gCSAgInIiIChjLT5zaWdjb250ZXh0X3BjKQotICAgICAgICk7Ci0gICAgfQotLSAgX19idWlsdGluX3VucmVhY2hhYmxlKCk7Ci0rICB1bnJlYWNoYWJsZSgpOwotICNlbmRpZgotICAgcmV0dXJuIC1VTldfRUlOVkFMOwotIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYwppbmRleCAxYzM0MmQzLi5lNGFlOGRmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jCkBAIC0xOCwxNSArMTgsNiBAQAogQVRPTUlDT1BTX2FybXY0ID0gIi1EQU9fVVNFX1BUSFJFQURfREVGUz0xIgogQVRPTUlDT1BTID89ICIiCiAKLUxERkxBR1NfYXBwZW5kX3g4NiA9ICIgLWZ1c2UtbGQ9Z29sZCIKLUxERkxBR1NfYXBwZW5kX3g4Ni02NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKLQotTERGTEFHU19hcHBlbmRfYXJtID0gIiAtZnVzZS1sZD1nb2xkIgotTERGTEFHU19hcHBlbmRfYWFyY2g2NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKLQotTERGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWZ1c2UtbGQ9Z29sZCAtbWJzcy1wbHQiCi1MREZMQUdTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1mdXNlLWxkPWdvbGQgLW1ic3MtcGx0IgotCiBTRUNVUklUWV9MREZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1sc3NwX25vbnNoYXJlZCAtbHNzcCIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC8wMDAxLUZpeC1idWlsZC1vbi1taXBzLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC8wMDAxLUZpeC1idWlsZC1vbi1taXBzLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjYzI1MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitGcm9tIGU2MjNjNzcwMzk0NWE1ZWI2YzlhMzA1ODZlYzVlMjNiMmY3Mzk2ZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyMyBNYXIgMjAxNiAwNjowODo1OSArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgb24gbWlwcy9tdXNsCisKK0RvIG5vdCBpbmNsdWRlIGVuZGlhbi5oIG9uIG11c2wgaXQgaW5jbHVkZXMKK2Z1cnRoZXIgaGVhZGVycyB3aGljaCBjYW4gbm90IGJlIGNvbXBpbGVkIGluIF9fQVNTRU1CTEVSX18KKyBtb2RlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL2NvcmVkdW1wL19VQ0RfaW50ZXJuYWwuaCB8IDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvbWlwcy9nZXRjb250ZXh0LlMgICAgICAgIHwgIDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L3NyYy9jb3JlZHVtcC9fVUNEX2ludGVybmFsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29yZWR1bXAvX1VDRF9pbnRlcm5hbC5oCisrKysgZ2l0L3NyYy9jb3JlZHVtcC9fVUNEX2ludGVybmFsLmgKK0BAIC00NCw2ICs0NCw0MSBAQCBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFCisgCisgI2luY2x1ZGUgImxpYnVud2luZF9pLmgiCisgCisrI2lmbmRlZiBfX0dMSUJDX18KKysjaW5jbHVkZSA8c3lzL3JlZy5oPgorKworKyNkZWZpbmUgRUZfUkVHMAkJCTYKKysjZGVmaW5lIEVGX1JFRzEJCQk3CisrI2RlZmluZSBFRl9SRUcyCQkJOAorKyNkZWZpbmUgRUZfUkVHMwkJCTkKKysjZGVmaW5lIEVGX1JFRzQJCQkxMAorKyNkZWZpbmUgRUZfUkVHNQkJCTExCisrI2RlZmluZSBFRl9SRUc2CQkJMTIKKysjZGVmaW5lIEVGX1JFRzcJCQkxMworKyNkZWZpbmUgRUZfUkVHOAkJCTE0CisrI2RlZmluZSBFRl9SRUc5CQkJMTUKKysjZGVmaW5lIEVGX1JFRzEwCQkxNgorKyNkZWZpbmUgRUZfUkVHMTEJCTE3CisrI2RlZmluZSBFRl9SRUcxMgkJMTgKKysjZGVmaW5lIEVGX1JFRzEzCQkxOQorKyNkZWZpbmUgRUZfUkVHMTQJCTIwCisrI2RlZmluZSBFRl9SRUcxNQkJMjEKKysjZGVmaW5lIEVGX1JFRzE2CQkyMgorKyNkZWZpbmUgRUZfUkVHMTcJCTIzCisrI2RlZmluZSBFRl9SRUcxOAkJMjQKKysjZGVmaW5lIEVGX1JFRzE5CQkyNQorKyNkZWZpbmUgRUZfUkVHMjAJCTI2CisrI2RlZmluZSBFRl9SRUcyMQkJMjcKKysjZGVmaW5lIEVGX1JFRzIyCQkyOAorKyNkZWZpbmUgRUZfUkVHMjMJCTI5CisrI2RlZmluZSBFRl9SRUcyNAkJMzAKKysjZGVmaW5lIEVGX1JFRzI1CQkzMQorKyNkZWZpbmUgRUZfUkVHMjgJCTM0CisrI2RlZmluZSBFRl9SRUcyOQkJMzUKKysjZGVmaW5lIEVGX1JFRzMwCQkzNgorKyNkZWZpbmUgRUZfUkVHMzEJCTM3CisrI2VuZGlmCisrCisgCisgI2lmIFNJWkVPRl9PRkZfVCA9PSA0CisgdHlwZWRlZiB1aW50MzJfdCB1b2ZmX3Q7CitJbmRleDogZ2l0L3NyYy9taXBzL2dldGNvbnRleHQuUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9taXBzL2dldGNvbnRleHQuUworKysrIGdpdC9zcmMvbWlwcy9nZXRjb250ZXh0LlMKK0BAIC0yNCwxMiArMjQsMTEgQEAgT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworIAorICNpbmNsdWRlICJvZmZzZXRzLmgiCistI2luY2x1ZGUgPGVuZGlhbi5oPgorIAorIAkudGV4dAorIAorICNpZiBfTUlQU19TSU0gPT0gX0FCSU8zMgorLSMgaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorKyMgaWYgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18KKyAjICBkZWZpbmUgT0ZGU0VUIDQKKyAjIGVsc2UKKyAjICBkZWZpbmUgT0ZGU0VUIDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtYWRkLWtub2JzLXRvLWRpc2FibGUtZW5hYmxlLXRlc3RzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1hZGQta25vYnMtdG8tZGlzYWJsZS1lbmFibGUtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczYTViYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtYWRkLWtub2JzLXRvLWRpc2FibGUtZW5hYmxlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK0Zyb20gNDU5ZTQ3MWZjYzMzZDMwMGY3YmJjZGFmM2UwZGMzMzhkOWRjMTViOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE2OjU2OjM0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGFkZCBrbm9icyB0byBkaXNhYmxlL2VuYWJsZSB0ZXN0cworCitTb21lIHRlc3RzIGRvIG5vdCBjb21waWxlIG9uIG11c2wgbGliYworaW4gZ2VuZXJhbCBpdHMgZ29vZCB0byBoYXZlIHN1Y2ggYSBrbm9iCitzaW5jZSBub3QgYWxsIGJ1aWxkcyBtYXkgd2FudCB0byBlbmFibGUKK3Rlc3RzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gIHwgIDYgKysrKystCisgY29uZmlndXJlLmFjIHwgMTIgKysrKysrKysrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNmEzZWQ5ZS4uMGMyOWIzZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTQyLDcgKzQyLDExIEBAIGVuZGlmCisgCisgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGluY2x1ZGUvbGlidW53aW5kLWNvbW1vbi5oCisgCistU1VCRElSUyA9IHNyYyB0ZXN0cworK1NVQkRJUlMgPSBzcmMKKysKKytpZiBDT05GSUdfVEVTVFMKKytTVUJESVJTICs9IHRlc3RzCisrZW5kaWYKKyAKKyBpZiBDT05GSUdfRE9DUworIFNVQkRJUlMgKz0gZG9jCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA4NWQ3OGY4Li5kMzYyMzg3IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMjksNiArMTI5LDEwIEBAIEFDX0FSR19FTkFCTEUoZG9jdW1lbnRhdGlvbiwKKyAJQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kb2N1bWVudGF0aW9uXSxbRGlzYWJsZSBnZW5lcmF0aW5nIHRoZSBtYW4gcGFnZXNdKSwsCisgCVtlbmFibGVfZG9jdW1lbnRhdGlvbj15ZXNdKQorIAorK0FDX0FSR19FTkFCTEUodGVzdHMsCisrCUFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdGVzdHNdLFtEaXNhYmxlIGJ1aWxkaW5nIHRlc3RzXSksLAorKwlbZW5hYmxlX3Rlc3RzPXllc10pCisrCisgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBzaG91bGQgYnVpbGQgbGlidW53aW5kLXNldGptcF0pCisgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zZXRqbXBdKQorIAorQEAgLTM5NSw5ICszOTksMTMgQEAgQU1fQ09ORElUSU9OQUwoW0NPTkZJR19ET0NTXSwgW3Rlc3QgeCRlbmFibGVfZG9jdW1lbnRhdGlvbiA9IHh5ZXNdKQorIGlmIHRlc3QgIngkZW5hYmxlX2RvY3VtZW50YXRpb24iID0gInh5ZXMiOyB0aGVuCisgICBBQ19DT05GSUdfRklMRVMoZG9jL01ha2VmaWxlIGRvYy9jb21tb24udGV4KQorIGZpCisrQU1fQ09ORElUSU9OQUwoW0NPTkZJR19URVNUU10sIFt0ZXN0IHgkZW5hYmxlX3Rlc3RzID0geHllc10pCisraWYgdGVzdCAieCRlbmFibGVfdGVzdHMiID0gInh5ZXMiOyB0aGVuCisrICBBQ19DT05GSUdfRklMRVModGVzdHMvTWFrZWZpbGUgdGVzdHMvY2hlY2stbmFtZXNwYWNlLnNoKQorK2ZpCisrCisgCistQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlIHNyYy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9jaGVjay1uYW1lc3BhY2Uuc2gKKy0JCWluY2x1ZGUvbGlidW53aW5kLWNvbW1vbi5oCisrQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlIHNyYy9NYWtlZmlsZSBpbmNsdWRlL2xpYnVud2luZC1jb21tb24uaAorICAgICAgICAgICAgICAgICBpbmNsdWRlL2xpYnVud2luZC5oIGluY2x1ZGUvdGRlcC9saWJ1bndpbmRfaS5oKQorIEFDX0NPTkZJR19GSUxFUyhzcmMvdW53aW5kL2xpYnVud2luZC5wYyBzcmMvY29yZWR1bXAvbGlidW53aW5kLWNvcmVkdW1wLnBjCisgICAgICAgICAgICAgICAgIHNyYy9wdHJhY2UvbGlidW53aW5kLXB0cmFjZS5wYyBzcmMvc2V0am1wL2xpYnVud2luZC1zZXRqbXAucGMKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1iYWNrdHJhY2UtVXNlLW9ubHktd2l0aC1nbGliYy1hbmQtdWNsaWJjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1iYWNrdHJhY2UtVXNlLW9ubHktd2l0aC1nbGliYy1hbmQtdWNsaWJjLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1iYWNrdHJhY2UtVXNlLW9ubHktd2l0aC1nbGliYy1hbmQtdWNsaWJjLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC8wMDAxLWJhY2t0cmFjZS1Vc2Utb25seS13aXRoLWdsaWJjLWFuZC11Y2xpYmMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtcHBjMzItQ29uc2lkZXItdWNvbnRleHQtbWlzbWF0Y2hlcy1iZXR3ZWVuLWdsaWJjLWFuZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtcHBjMzItQ29uc2lkZXItdWNvbnRleHQtbWlzbWF0Y2hlcy1iZXR3ZWVuLWdsaWJjLWFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTA2NDFmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1wcGMzMi1Db25zaWRlci11Y29udGV4dC1taXNtYXRjaGVzLWJldHdlZW4tZ2xpYmMtYW5kLnBhdGNoCkBAIC0wLDAgKzEsMjQ4IEBACitGcm9tIGUwZWVhNTNjNzdmY2U4NTM3YzU4YTA3MmI2ODQwNDM1MDc5ODdiY2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA5IEp1bCAyMDE2IDAxOjA3OjUzICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHBwYzMyOiBDb25zaWRlciB1Y29udGV4dCBtaXNtYXRjaGVzIGJldHdlZW4gZ2xpYmMgYW5kIG11c2wKKworVGhpcyBoZWxwcyBpbiBwb3J0aW5nIGxpYnVud2luZCBvbnRvIG11c2wgYmFzZWQgc3lzdGVtcworcHRyYWNlLmggY2hhbmdlIGlzIHJlcXVpcmVkIGFnYWluIGFuIGVycm9yIHRoYXQgc3VyZmFjZXMKK3dpdGggbXVzbAorCisvbW50L29lL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3N5c3Jvb3RzL3FlbXVwcGMvdXNyL2luY2x1ZGUvYXNtL3B0cmFjZS5oOjMxOjg6IGVycm9yOiByZWRlZmluaXRpb24gb2YgJ3N0cnVjdCBwdF9yZWdzJworIHN0cnVjdCBwdF9yZWdzIHsKKyAgICAgICAgXn5+fn5+fgorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9tbnQvb2Uvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvc3lzcm9vdHMvcWVtdXBwYy91c3IvaW5jbHVkZS9zeXMvdXNlci5oOjExOjAsCisgICAgICAgICAgICAgICAgIGZyb20gL21udC9vZS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC9zeXNyb290cy9xZW11cHBjL3Vzci9pbmNsdWRlL3N5cy9wcm9jZnMuaDo5LAorICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dpdC9zcmMvcHRyYWNlL19VUFRfaW50ZXJuYWwuaDo0MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9naXQvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYzoyNzoKKy9tbnQvb2Uvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvc3lzcm9vdHMvcWVtdXBwYy91c3IvaW5jbHVkZS9iaXRzL3VzZXIuaDoxOjg6IG5vdGU6IG9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlCisgc3RydWN0IHB0X3JlZ3MgeworICAgICAgICBefn5+fn5+CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL3BwYzMyL0dpbml0LmMgICAgICAgICAgICB8ICAgNiArLQorIHNyYy9wcGMzMi91Y29udGV4dF9pLmggICAgICAgfCAxNTggKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMgfCAgIDcgKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkyIGluc2VydGlvbnMoKyksIDc5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3BwYzMyL0dpbml0LmMgYi9zcmMvcHBjMzIvR2luaXQuYworaW5kZXggZjJlNmU4Mi4uNjE3YWFhMSAxMDA2NDQKKy0tLSBhL3NyYy9wcGMzMi9HaW5pdC5jCisrKysgYi9zcmMvcHBjMzIvR2luaXQuYworQEAgLTQ4LDEyICs0OCwxMiBAQCB1Y19hZGRyICh1Y29udGV4dF90ICp1YywgaW50IHJlZykKKyAgIHZvaWQgKmFkZHI7CisgCisgICBpZiAoKHVuc2lnbmVkKSAocmVnIC0gVU5XX1BQQzMyX1IwKSA8IDMyKQorLSAgICBhZGRyID0gJnVjLT51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tyZWcgLSBVTldfUFBDMzJfUjBdOworKyAgICBhZGRyID0gJnVjLT5HRVRfVUNfUkVHUy0+Z3JlZ3NbcmVnIC0gVU5XX1BQQzMyX1IwXTsKKyAKKyAgIGVsc2UKKyAgIGlmICggKCh1bnNpZ25lZCkgKHJlZyAtIFVOV19QUEMzMl9GMCkgPCAzMikgJiYKKyAgICAgICAgKCh1bnNpZ25lZCkgKHJlZyAtIFVOV19QUEMzMl9GMCkgPj0gMCkgKQorLSAgICBhZGRyID0gJnVjLT51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzW3JlZyAtIFVOV19QUEMzMl9GMF07CisrICAgIGFkZHIgPSAmdWMtPkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzW3JlZyAtIFVOV19QUEMzMl9GMF07CisgCisgICBlbHNlCisgICAgIHsKK0BAIC03Niw3ICs3Niw3IEBAIHVjX2FkZHIgKHVjb250ZXh0X3QgKnVjLCBpbnQgcmVnKQorICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICB9CistICAgICAgYWRkciA9ICZ1Yy0+dWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbZ3JlZ3NfaWR4XTsKKysgICAgICBhZGRyID0gJnVjLT5HRVRfVUNfUkVHUy0+Z3JlZ3NbZ3JlZ3NfaWR4XTsKKyAgICAgfQorICAgcmV0dXJuIGFkZHI7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9wcGMzMi91Y29udGV4dF9pLmggYi9zcmMvcHBjMzIvdWNvbnRleHRfaS5oCitpbmRleCBjNmJhODA2Li5iNzlmMTVjIDEwMDY0NAorLS0tIGEvc3JjL3BwYzMyL3Vjb250ZXh0X2kuaAorKysrIGIvc3JjL3BwYzMyL3Vjb250ZXh0X2kuaAorQEAgLTQ2LDgzICs0Niw4OSBAQCBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisgICAgdmFyaW91cyBzdHJ1Y3R1cmUgbWVtYmVycy4gKi8KKyBzdGF0aWMgdWNvbnRleHRfdCBkbXlfY3R4dCBVTlVTRUQ7CisgCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjIgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzJdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I0ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1s0XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjUgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzVdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SNiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I3ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1s3XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjggKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SOSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxMCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMTBdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTEgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzExXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjEyICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxMyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMTNdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTQgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzE0XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE1ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxNiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMTZdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTcgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzE3XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE4ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxOSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMTldIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjAgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzIwXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjIxICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1syMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyMiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMjJdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjMgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzIzXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI0ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1syNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyNSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMjVdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjYgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzI2XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI3ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1syN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyOCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMjhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjkgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzI5XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjMwICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1szMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IzMSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMzFdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2lmZGVmIF9fR0xJQkNfXworKyNkZWZpbmUgR0VUX1VDX1JFR1MgdWNfbWNvbnRleHQudWNfcmVncworKyNlbHNlCisrI2RlZmluZSBHRVRfVUNfUkVHUyB1Y19yZWdzCisrI2VuZGlmCisrCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzBdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzFdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzJdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzNdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SNCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzRdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SNSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzVdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SNiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzZdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SNyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzddIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SOCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SOSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzldIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTAgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1sxMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxMSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzExXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjEyICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMTJdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTMgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1sxM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxNCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzE0XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE1ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMTVdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTYgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1sxNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxNyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzE3XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE4ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMThdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTkgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1sxOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyMCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzIwXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjIxICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMjFdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjIgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1syMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyMyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzIzXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI0ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMjRdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjUgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1syNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyNiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzI2XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI3ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMjddIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjggKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1syOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyOSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzI5XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjMwICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMzBdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMzEgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1szMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKyAKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX01TUiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbTVNSX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX09SSUdfR1BSMyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbT1JJR19HUFIzX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX0NUUiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbQ1RSX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX0xJTksgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW0xJTktfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfWEVSICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tYRVJfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfQ0NSICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tDQ1JfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfU09GVEUgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW1NPRlRFX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1RSQVAgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW1RSQVBfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfREFSICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tEQVJfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfRFNJU1IgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW0RTSVNSX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1JFU1VMVCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbUkVTVUxUX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX01TUiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW01TUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19PUklHX0dQUjMgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tPUklHX0dQUjNfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfQ1RSICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbQ1RSX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX0xJTksgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tMSU5LX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1hFUiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW1hFUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19DQ1IgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tDQ1JfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfU09GVEUgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tTT0ZURV9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19UUkFQICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbVFJBUF9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19EQVIgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tEQVJfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfRFNJU1IgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tEU0lTUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SRVNVTFQgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tSRVNVTFRfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorIAorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjAgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzFdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjMgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I0ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzRdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SNSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1s1XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjYgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I3ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzddIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SOCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1s4XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjkgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxMCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxMSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxMiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxMyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxNCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxNSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxNiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxNyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxOCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxOSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1sxOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyMCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyMSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyMiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyMyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyNCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyNSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyNiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyNyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyOCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyOSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1syOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IzMCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1szMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IzMSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1szMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX0ZQU0NSICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzMyXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjAgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzBdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjMgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzNdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SNCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I1ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1s1XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjYgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzZdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SNyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I4ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1s4XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjkgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzldIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMTAgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzEwXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjExICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1sxMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxMiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMTJdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMTMgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzEzXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE0ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1sxNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxNSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMTVdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMTYgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzE2XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE3ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1sxN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxOCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMThdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMTkgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzE5XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIwICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyMSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMjFdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMjIgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzIyXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIzICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyNCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMjRdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMjUgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzI1XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI2ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyNyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMjddIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMjggKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzI4XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI5ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IzMCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMzBdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMzEgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzMxXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfRlBTQ1IgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzMyXSAtICh2b2lkICopJmRteV9jdHh0KQorIAorICNlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMgYi9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCitpbmRleCA2ODQ2MWEyLi5mY2M0M2Y3IDEwMDY0NAorLS0tIGEvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYworKysrIGIvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYworQEAgLTI3LDYgKzI3LDEzIEBAIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKyAjaW5jbHVkZSAiX1VQVF9pbnRlcm5hbC5oIgorIAorICNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaWYgIWRlZmluZWQoX19HTElCQ19fKQorKyMgZGVmaW5lIHB0X3JlZ3MgdWFwaV9wdF9yZWdzCisrI2VuZGlmCisrI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKysjaWYgIWRlZmluZWQoX19HTElCQ19fKQorKyMgdW5kZWYgcHRfcmVncworKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX0FTTV9QVFJBQ0VfT0ZGU0VUU19ICisgIyBpbmNsdWRlIDxhc20vcHRyYWNlX29mZnNldHMuaD4KKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS14ODYtU3R1Yi1vdXQteDg2X2xvY2FsX3Jlc3VtZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEteDg2LVN0dWItb3V0LXg4Nl9sb2NhbF9yZXN1bWUucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLXg4Ni1TdHViLW91dC14ODZfbG9jYWxfcmVzdW1lLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC8wMDAxLXg4Ni1TdHViLW91dC14ODZfbG9jYWxfcmVzdW1lLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQWRkLUFPX1JFUVVJUkVfQ0FTLXRvLWZpeC1idWlsZC1vbi1BUk0tdjYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC9BZGQtQU9fUkVRVUlSRV9DQVMtdG8tZml4LWJ1aWxkLW9uLUFSTS12Ni5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FkZC1BT19SRVFVSVJFX0NBUy10by1maXgtYnVpbGQtb24tQVJNLXY2LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC9BZGQtQU9fUkVRVUlSRV9DQVMtdG8tZml4LWJ1aWxkLW9uLUFSTS12Ni5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvbXVzbC1oZWFkZXItY29uZmxpY3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC9tdXNsLWhlYWRlci1jb25mbGljdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWY2M2ZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvbXVzbC1oZWFkZXItY29uZmxpY3QucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorSWYgeW91OgorCitUQ0xJQkM9bXVzbCBiaXRiYWtlIHVud2luZAorVENMSUJDPW11c2wgYml0YmFrZSBnY2MtcnVudGltZSAtYyBjbGVhbnNzdGF0ZQorVENMSUJDPW11c2wgYml0YmFrZSBnY2MtcnVudGltZQorCit5b3Ugd2lsbCBzZWUgbGlic3RkYysrIGZhaWwgdG8gYnVpbGQgZHVlIHRvIGZpbmRpbmcgbGlidW53aW5kJ3MgaGVhZGVyIGZpbGUuCisKK0toZW06ICJXaGVuIHdlIGJ1aWxkIGFueSBvZiBnY2MgY29tcG9uZW50cyB0aGV5IGV4cGVjdCB0byB1c2UgaW50ZXJuYWwgdmVyc2lvbiAKK2FuZCB0aGF0IHdvcmtzIHdpdGggZ2xpYmMgYmFzZWQgZ2NjIHNpbmNlIHRoZSBzZWFyY2ggaGVhZGVycyBmaXJzdCBsb29rIGludG8gZ2NjIAoraGVhZGVycywgaG93ZXZlciB3aXRoIG11c2wgdGhlIGdjYyBoZWFkZXJzIGFyZSBzZWFyY2hlZCBhZnRlciB0aGUgc3RhbmRhcmQgCitoZWFkZXJzICggd2hpY2ggaXMgYnkgZGVzaWduIHRoZSByaWdodCB0aGluZyApLiIKKworVGhpcyBwYXRjaCBoYWNrcyBhcm91bmQgdGhlIGlzc3VlIGJ5IGxvb2tpbmcgZm9yIGEgZGVmaW5lIHVzZWQgZHVyaW5nIGdjYy1ydW50aW1lJ3MgCitidWlsZCBhbmQgc2tpcHBpbmcgdG8gdGhlIGludGVybmFsIGhlYWRlciBpbiB0aGF0IGNhc2UuCisKK1tZT0NUTyAjMTAxMjldCisKK1JQIDIwMTYvOC8xOAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3JlYWxseSBuZWVkIHRvIGZpeCBnY2NdCisKK0luZGV4OiBnaXQvaW5jbHVkZS91bndpbmQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2luY2x1ZGUvdW53aW5kLmgKKysrKyBnaXQvaW5jbHVkZS91bndpbmQuaAorQEAgLTIzLDYgKzIzLDEwIEBAIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIEwKKyBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisgCisrI2lmZGVmIF9HTElCQ1hYX1NIQVJFRAorKyNpbmNsdWRlX25leHQgPHVud2luZC5oPgorKyNlbmRpZgorKworICNpZm5kZWYgX1VOV0lORF9ICisgI2RlZmluZSBfVU5XSU5EX0gKKyAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZmODQwOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1yZXF1aXJlIGxpYnVud2luZC5pbmMKLQotU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQUFyY2g2NC1wb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9BZGQtQU9fUkVRVUlSRV9DQVMtdG8tZml4LWJ1aWxkLW9uLUFSTS12Ni5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWJhY2t0cmFjZS1Vc2Utb25seS13aXRoLWdsaWJjLWFuZC11Y2xpYmMucGF0Y2ggXAotIgotU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIlwKLSAgICAgICAgICAgZmlsZTovLzAwMDEteDg2LVN0dWItb3V0LXg4Nl9sb2NhbF9yZXN1bWUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1kaXNhYmxlLXRlc3RzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiZmI0ZWEyZjZmYmJlNDViZjAzMmNkMzZlNTg2ODgzY2UiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZTBmY2FlMmE4NjZkZTlkMzk0MmM2Njk5NWU0YjQ2MDIzMDQ0Njg4N2RiZGFiMzAyZDQxYThhZWU4ZDA5YSIKLQotIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjA0ODcvCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDk0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorcmVxdWlyZSBsaWJ1bndpbmQuaW5jCisKK1BWID0gIjEuMStnaXQke1NSQ1BWfSIKKworU1JDUkVWID0gImJjODY5OGZkN2VkMTNhNjI5YThlYzNjYjJhODliZDc0ZjlkOGI1YzAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnN2LmdudS5vcmcvbGlidW53aW5kLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9BZGQtQU9fUkVRVUlSRV9DQVMtdG8tZml4LWJ1aWxkLW9uLUFSTS12Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJhY2t0cmFjZS1Vc2Utb25seS13aXRoLWdsaWJjLWFuZC11Y2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS14ODYtU3R1Yi1vdXQteDg2X2xvY2FsX3Jlc3VtZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1vbi1taXBzLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hZGQta25vYnMtdG8tZGlzYWJsZS1lbmFibGUtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1wcGMzMi1Db25zaWRlci11Y29udGV4dC1taXNtYXRjaGVzLWJldHdlZW4tZ2xpYmMtYW5kLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9tdXNsLWhlYWRlci1jb25mbGljdC5wYXRjaCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1tdXNsID0gIiAtLWRpc2FibGUtZG9jdW1lbnRhdGlvbiAtLWRpc2FibGUtdGVzdHMgIgorCisjIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ4Ny8KK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCisKKyMgc2VlIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE5OTg3CitTRUNVUklUWV9DRkxBR1NfcmVtb3ZlX2FhcmNoNjQgPSAiLWZwaWUiCitTRUNVUklUWV9DRkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1mUElFIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitMREZMQUdTICs9ICItV2wsLXoscmVscm8sLXosbm93ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICcgLWZ1c2UtbGQ9YmZkICcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjkuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkYzMyZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotU1VNTUFSWSA9ICJVc2Vyc3BhY2UgUkNVIChyZWFkLWNvcHktdXBkYXRlKSBsaWJyYXJ5IgotSE9NRVBBR0UgPSAiaHR0cDovL2x0dG5nLm9yZy91cmN1IgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vbHR0bmcub3JnL3Byb2plY3QvaXNzdWVzIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xKyAmIE1JVC1zdHlsZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWU1NDhkMjg3MzcyODlkNzVhOGYxZTAxYmEyZmQ3ODI1IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMyO21kNT00ZGUwZDY4ZDNhOTk3NjQzNzE1MDM2ZDIyMDlhZTFkOSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91cmN1L3VhdG9taWMveDg2Lmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yMTttZDU9NThlNTBiYmQ4YTJmMDczYmI1NTAwZTY1NTRhZjBkMGIiCi0KLVNSQ19VUkkgPSAiIFwKLQlodHRwOi8vbHR0bmcub3JnL2ZpbGVzL3VyY3UvdXNlcnNwYWNlLXJjdS0ke1BWfS50YXIuYnoyIFwKLQlmaWxlOi8vMDAwMS1TdXBwb3J0LWZvci1OSU9TMi1hcmNoaXRlY3R1cmUucGF0Y2ggXAotICAgICAgICBmaWxlOi8vMDAwMi1TdXBwb3J0LWZvci1hYXJjaDY0X2JlLnBhdGNoIFwKLQkiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxMjRlYWVlYTA2ODYzMjcxYzBiZGYyYTBjYzFkOGU0YiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmOGQyNzhlOWQ5NWJlYzk3YzliYTk1NGZjNGMzZmI1ODQ5MzZiYzAwMTA3MTNhOGZlMzU4YjkxNmJhZmQ4NzE1IgotCi1TID0gIiR7V09SS0RJUn0vdXNlcnNwYWNlLXJjdS0ke1BWfSIKLUNGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EX0dOVV9TT1VSQ0UiCi1pbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjkuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC45LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmYjhjNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC45LjIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgUkNVIChyZWFkLWNvcHktdXBkYXRlKSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2x0dG5nLm9yZy91cmN1IgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vbHR0bmcub3JnL3Byb2plY3QvaXNzdWVzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWU1NDhkMjg3MzcyODlkNzVhOGYxZTAxYmEyZmQ3ODI1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMyO21kNT00ZGUwZDY4ZDNhOTk3NjQzNzE1MDM2ZDIyMDlhZTFkOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91cmN1L3VhdG9taWMveDg2Lmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yMTttZDU9NThlNTBiYmQ4YTJmMDczYmI1NTAwZTY1NTRhZjBkMGIiCisKK1NSQ19VUkkgPSAiIFwKKwlodHRwOi8vbHR0bmcub3JnL2ZpbGVzL3VyY3UvdXNlcnNwYWNlLXJjdS0ke1BWfS50YXIuYnoyIFwKKwlmaWxlOi8vMDAwMS1TdXBwb3J0LWZvci1OSU9TMi1hcmNoaXRlY3R1cmUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMi1TdXBwb3J0LWZvci1hYXJjaDY0X2JlLnBhdGNoIFwKKwkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0OWY4NmU2OGMxZTJmNDFkMzAzMzgxYTI3MWI3OTFkMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZjdmYTMxM2IxZTBhM2Y3NDJjZWEyNGNlNjNhMzljMGVmZTYzZTYxNWE3NjllMjk2MWU1NWJkMjY2M2VjYWEzIgorCitTID0gIiR7V09SS0RJUn0vdXNlcnNwYWNlLXJjdS0ke1BWfSIKK0NGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EX0dOVV9TT1VSQ0UiCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC8wMDAxLVVzZS1wa2ctY29uZmlnLXRvLWZpbmQtZ2NyeXB0LWFuZC1saWJ4bWwyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC8wMDAxLVVzZS1wa2ctY29uZmlnLXRvLWZpbmQtZ2NyeXB0LWFuZC1saWJ4bWwyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODY3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0LzAwMDEtVXNlLXBrZy1jb25maWctdG8tZmluZC1nY3J5cHQtYW5kLWxpYnhtbDIucGF0Y2gKQEAgLTAsMCArMSwxMzAgQEAKK0Zyb20gZWQ3MWFjOTU0OGEyYmI2ZWNkMmRjNWFkODgwYzYwNDk3NWY4NzJiMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyIEp1biAyMDE2IDE0OjIwOjA0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSBwa2ctY29uZmlnIHRvIGZpbmQgZ2NyeXB0IGFuZCBsaWJ4bWwyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2xpYnhtbDIgaXMgdXBzdHJlYW1hYmxlXQorCitSUCAyMDE0LzUvMjIKKworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCA3MCArKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDhiZGY0NWEuLjBiMmIzMTIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTM3Nyw2ICszNzcsOCBAQCBBQ19TVUJTVChweXRob25kaXIpCisgQUNfU1VCU1QoUFlUSE9OX1NVQkRJUikKKyBBQ19TVUJTVChQWVRIT05fTElCUykKKyAKKytQS0dfUFJPR19QS0dfQ09ORklHCisrCisgQUNfQVJHX1dJVEgoY3J5cHRvLCBbICAtLXdpdGgtY3J5cHRvICAgICAgICAgICBBZGQgY3J5cHRvIHN1cHBvcnQgdG8gZXhzbHQgKG9uKV0pCisgV0lUSF9DUllQVE89MAorIENSWVBUT19URVNURElSPQorQEAgLTM5NCwyNyArMzk2LDE0IEBAIGNhc2UgJGhvc3QgaW4KKyAgICAgQ1JZUFRPX1RFU1RESVI9Y3J5cHRvCisgICAgIDs7CisgICAqKQorLSAgICBBQ19QQVRIX1RPT0woTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCistICAgIGlmIHRlc3QgIiRMSUJHQ1JZUFRfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICAgIExJQkdDUllQVF9WRVJTSU9OPWAkTElCR0NSWVBUX0NPTkZJRyAtLXZlcnNpb25gCistICAgICAgaWYgdGVzdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRMSUJHQ1JZUFRfVkVSU0lPTikgLWx0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gIjEuMS40MiIpCistICAgICAgdGhlbgorLSAgICAgICAgTElCR0NSWVBUX0NGTEFHUz0iIgorLSAgICAgICAgTElCR0NSWVBUX0xJQlM9IiIKKy0gICAgICAgIGVjaG8gJ2djcnlwdCBsaWJyYXJ5IHZlcnNpb24gPCAxLjEuNDIgLSBDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuJworLSAgICAgIGVsc2UKKy0gICAgICAgIExJQkdDUllQVF9DRkxBR1M9YCRMSUJHQ1JZUFRfQ09ORklHICRsaWJnY3J5cHRfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgICAgICBMSUJHQ1JZUFRfTElCUz1gJExJQkdDUllQVF9DT05GSUcgJGxpYmdjcnlwdF9jb25maWdfYXJncyAtLWxpYnNgCistICAgICAgICBBQ19ERUZJTkUoSEFWRV9HQ1JZUFQsIDEsIFtEZWZpbmUgaWYgZ2NyeXB0IGxpYnJhcnkgaXMgYXZhaWxhYmxlLl0pCistICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIGJlIGF2YWlsYWJsZS4nCisrICAgIFBLR19DSEVDS19NT0RVTEVTKExJQkdDUllQVCwgW2xpYmdjcnlwdCA+PSAxLjEuNDJdLCBbCisrICAgICAgICAgIEFDX0RFRklORShIQVZFX0dDUllQVCwgMSwgW0RlZmluZSBpZiBnY3J5cHQgbGlicmFyeSBpcyBhdmFpbGFibGUuXSkKKysgICAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBiZSBhdmFpbGFibGUuJworICAgICAgICAgV0lUSF9DUllQVE89MQorICAgICAgICAgQ1JZUFRPX1RFU1RESVI9Y3J5cHRvCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgYW5kIHJlY29uZmlndXJlIHRvIG1ha2UgYXZhaWxhYmxlLicKKy0gICAgZmkKKysgICAgICAgXSwgWworKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEluc3RhbGwgbGliZ2NyeXB0ID49IDEuMS40MiBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJworKyAgICAgICAgXSkKKyBlc2FjCisgZmkKKyBBQ19TVUJTVChXSVRIX0NSWVBUTykKK0BAIC00NzYsMjQgKzQ2NSw4IEBAIGRubCBvcmlnaW5hbCB3b3JrIC0gTWF0aGlldSBMYWNhZ2UgMzAvMDMvMjAwMAorIGRubCBzb21lIHR3ZWFraW5nIC0gRGF2aWQgSMOkcmRlbWFuIDMwLzEwLzIwMDEKKyBkbmwKKyAKKy1MSUJYTUxfQ09ORklHX1BSRUZJWD0iIgorIExJQlhNTF9TUkM9IiIKKyAKKy1BQ19BUkdfV0lUSChsaWJ4bWwtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1wcmVmaXg9W1BGWF0JCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGNvbmZpZ10sCistCUxJQlhNTF9DT05GSUdfUFJFRklYPSR3aXRodmFsCistKQorLSAgICAgICAgCistQUNfQVJHX1dJVEgobGlieG1sLWluY2x1ZGUtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1pbmNsdWRlLXByZWZpeD1bUEZYXQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBoZWFkZXJzXSwKKy0gICAgICAgIExJQlhNTF9DRkxBR1M9Ii1JJHdpdGh2YWwiCistKQorLQorLUFDX0FSR19XSVRIKGxpYnhtbC1saWJzLXByZWZpeCwKKy0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtbGlicy1wcmVmaXg9W1BGWF0JU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgbGlic10sCistICAgICAgICBMSUJYTUxfTElCUz0iLUwkd2l0aHZhbCIKKy0pCistCisgQUNfQVJHX1dJVEgobGlieG1sLXNyYywKKyAJWyAgLS13aXRoLWxpYnhtbC1zcmM9W0RJUl0gICAgICAgICAgICAgIEZvciBsaWJ4bWwgdGhhdHMgbm90IGluc3RhbGxlZCB5ZXQgKHNldHMgYWxsIHRocmVlIGFib3ZlKV0sCisgCUxJQlhNTF9TUkM9IiR3aXRodmFsIgorQEAgLTU1NiwyOCArNTI5LDkgQEAgdGhlbgorIAlmaQorIGZpCisgCistZG5sCistZG5sIG1ha2Ugc3VyZSB4bWwyLWNvbmZpZyBpcyBleGVjdXRhYmxlLAorLWRubCB0ZXN0IHZlcnNpb24gYW5kIGluaXQgb3VyIHZhcmlhYmxlcworLWRubAorLQorLWlmICR7WE1MX0NPTkZJR30gLS1saWJzIHByaW50ID4gL2Rldi9udWxsIDI+JjEKKy10aGVuCistCVhNTFZFUlM9YCRYTUxfQ09ORklHIC0tdmVyc2lvbmAKKy0JaWYgdGVzdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRYTUxWRVJTKSAtZ2UgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04pCistCXRoZW4KKy0JCUFDX01TR19SRVNVTFQoJFhNTFZFUlMgZm91bmQpCistCWVsc2UKKy0JCUFDX01TR19FUlJPUihWZXJzaW9uICRYTUxWRVJTIGZvdW5kLiBZb3UgbmVlZCBhdCBsZWFzdCBsaWJ4bWwyICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBmb3IgdGhpcyB2ZXJzaW9uIG9mIGxpYnhzbHQpCistCWZpCistCUxJQlhNTF9MSUJTPSIkTElCWE1MX0xJQlMgYCRYTUxfQ09ORklHIC0tbGlic2AiCistCWlmIHRlc3QgIngkTElCWE1MX1NSQyIgPSAieCI7IHRoZW4KKy0JCUxJQlhNTF9DRkxBR1M9IiRMSUJYTUxfQ0ZMQUdTIGAkWE1MX0NPTkZJRyAtLWNmbGFnc2AiCistCWZpCistZWxzZQorLQlBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGxpYnhtbDIgYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKQorLWZpCistCisrUEtHX0NIRUNLX01PRFVMRVMoTElCWE1MLCBbbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT05dLCwKKysgICAgW0FDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04gYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKV0KKyspCisgCisgQUNfU1VCU1QoQ0ZMQUdTKQorIEFDX1NVQlNUKENQUEZMQUdTKQorQEAgLTYwMiw3ICs1NTYsNyBAQCBmaQorIAorIGlmIHRlc3QgIiR3aXRoX3BsdWdpbnMiID0gInllcyIgOyB0aGVuCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2xpYnhtbDIgbW9kdWxlIHN1cHBvcnRdKQorLSAgV0lUSF9NT0RVTEVTPSJgJFhNTF9DT05GSUcgLS1tb2R1bGVzYCIKKysgIFdJVEhfTU9EVUxFUz0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9bW9kdWxlcyBsaWJ4bWwtMi4wYCIKKyAgIGlmIHRlc3QgIiR7V0lUSF9NT0RVTEVTfSIgPSAiMSI7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICBlbHNlCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvQ1ZFLTIwMTUtNzk5NS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvQ1ZFLTIwMTUtNzk5NS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQxMTNlZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L0NWRS0yMDE1LTc5OTUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1Gcm9tIDdjYTE5ZGY4OTJjYTIyZDkzMTRlOTVkNTljZTJhYmRlZmY0NmI2MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+Ci1EYXRlOiBUaHUsIDI5IE9jdCAyMDE1IDE5OjMzOjIzICswODAwCi1TdWJqZWN0OiBGaXggZm9yIHR5cGUgY29uZnVzaW9uIGluIHByZXByb2Nlc3NpbmcgYXR0cmlidXRlcwotCi1DVkUtMjAxNS03OTk1IGh0dHA6Ly93d3cub3BlbndhbGwuY29tL2xpc3RzL29zcy1zZWN1cml0eS8yMDE1LzEwLzI3LzEwCi1XZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIHBhcmVudCBub2RlIGlzIGFuIGVsZW1lbnQgYmVmb3JlIGRlcmVmZXJlbmNpbmcKLWl0cyBuYW1lc3BhY2UKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNS03OTk1Ci0KLWh0dHBzOi8vZ2l0Lmdub21lLm9yZy9icm93c2UvbGlieHNsdC9jb21taXQvP2lkPTdjYTE5ZGY4OTJjYTIyZDkzMTRlOTVkNTljZTJhYmRlZmY0NmI2MTcKLQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGxpYnhzbHQvcHJlcHJvYy5jIHwgMyArKy0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBsaWJ4c2x0LTEuMS4yOC9saWJ4c2x0L3ByZXByb2MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpYnhzbHQtMS4xLjI4Lm9yaWcvbGlieHNsdC9wcmVwcm9jLmMKLSsrKyBsaWJ4c2x0LTEuMS4yOC9saWJ4c2x0L3ByZXByb2MuYwotQEAgLTIyNDUsNyArMjI0NSw4IEBAIHhzbHRTdHlsZVByZUNvbXB1dGUoeHNsdFN0eWxlc2hlZXRQdHIgc3QKLSAJfSBlbHNlIGlmIChJU19YU0xUX05BTUUoaW5zdCwgImF0dHJpYnV0ZSIpKSB7Ci0gCSAgICB4bWxOb2RlUHRyIHBhcmVudCA9IGluc3QtPnBhcmVudDsKLSAKLS0JICAgIGlmICgocGFyZW50ID09IE5VTEwpIHx8IChwYXJlbnQtPm5zID09IE5VTEwpIHx8Ci0rCSAgICBpZiAoKHBhcmVudCA9PSBOVUxMKSB8fAotKwkgICAgICAgIChwYXJlbnQtPnR5cGUgIT0gWE1MX0VMRU1FTlRfTk9ERSkgfHwgKHBhcmVudC0+bnMgPT0gTlVMTCkgfHwKLSAJCSgocGFyZW50LT5ucyAhPSBpbnN0LT5ucykgJiYKLSAJCSAoIXhtbFN0ckVxdWFsKHBhcmVudC0+bnMtPmhyZWYsIGluc3QtPm5zLT5ocmVmKSkpIHx8Ci0gCQkoIXhtbFN0ckVxdWFsKHBhcmVudC0+bmFtZSwgQkFEX0NBU1QgImF0dHJpYnV0ZS1zZXQiKSkpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZDE0YzkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotVXNlIHBrZy1jb25maWcgdG8gZmluZCBnY3J5cHQgYW5kIGxpYnhtbDIuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbbGlieG1sMiBpcyB1cHN0cmVhbWFibGVdCi0KLVJQIDIwMTQvNS8yMgotCi1JbmRleDogbGlieHNsdC0xLjEuMjgvY29uZmlndXJlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGlieHNsdC0xLjEuMjgub3JpZy9jb25maWd1cmUuaW4JMjAxNC0wNS0xMyAxNjo0NjowMi4yNzg0NzQ5NjcgKzAwMDAKLSsrKyBsaWJ4c2x0LTEuMS4yOC9jb25maWd1cmUuaW4JMjAxNC0wNS0xMyAxNjo1Mzo1Ni41MTA0NzI1NjEgKzAwMDAKLUBAIC0zNzYsNiArMzc2LDggQEAKLSBBQ19TVUJTVChQWVRIT05fU1VCRElSKQotIEFDX1NVQlNUKFBZVEhPTl9MSUJTKQotIAotK1BLR19QUk9HX1BLR19DT05GSUcKLSsKLSBBQ19BUkdfV0lUSChjcnlwdG8sIFsgIC0td2l0aC1jcnlwdG8gICAgICAgICAgIEFkZCBjcnlwdG8gc3VwcG9ydCB0byBleHNsdCAob24pXSkKLSBXSVRIX0NSWVBUTz0wCi0gaWYgdGVzdCAiJHdpdGhfY3J5cHRvIiA9ICJubyIgOyB0aGVuCi1AQCAtMzkxLDI2ICszOTMsMTMgQEAKLSAgICAgV0lUSF9DUllQVE89MQotICAgICA7OwotICAgKikKLS0gICAgQUNfUEFUSF9QUk9HKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQotLSAgICBpZiB0ZXN0ICIkTElCR0NSWVBUX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KLS0gICAgICBMSUJHQ1JZUFRfVkVSU0lPTj1gJExJQkdDUllQVF9DT05GSUcgLS12ZXJzaW9uYAotLSAgICAgIGlmIHRlc3QgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkTElCR0NSWVBUX1ZFUlNJT04pIC1sdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICIxLjEuNDIiKQotLSAgICAgIHRoZW4KLS0gICAgICAgIExJQkdDUllQVF9DRkxBR1M9IiIKLS0gICAgICAgIExJQkdDUllQVF9MSUJTPSIiCi0tICAgICAgICBlY2hvICdnY3J5cHQgbGlicmFyeSB2ZXJzaW9uIDwgMS4xLjQyIC0gQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLicKLS0gICAgICBlbHNlCi0tICAgICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPWAkTElCR0NSWVBUX0NPTkZJRyAkbGliZ2NyeXB0X2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAotLSAgICAgICAgTElCR0NSWVBUX0xJQlM9YCRMSUJHQ1JZUFRfQ09ORklHICRsaWJnY3J5cHRfY29uZmlnX2FyZ3MgLS1saWJzYAotLSAgICAgICAgQUNfREVGSU5FKEhBVkVfR0NSWVBULCAxLCBbRGVmaW5lIGlmIGdjcnlwdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS5dKQotLSAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBiZSBhdmFpbGFibGUuJwotKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJHQ1JZUFQsIFtsaWJnY3J5cHQgPj0gMS4xLjQyXSwgWwotKyAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HQ1JZUFQsIDEsIFtEZWZpbmUgaWYgZ2NyeXB0IGxpYnJhcnkgaXMgYXZhaWxhYmxlLl0pCi0rICAgICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgYmUgYXZhaWxhYmxlLicKLSAJCVdJVEhfQ1JZUFRPPTEKLS0gICAgICBmaQotLSAgICBlbHNlCi0tICAgICAgTElCR0NSWVBUX0NGTEFHUz0iIgotLSAgICAgIExJQkdDUllQVF9MSUJTPSIiCi0tICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiBJbnN0YWxsIGxpYmdjcnlwdCBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJwotLSAgICBmaQotKwldLCBbCi0rICAgICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgPj0gMS4xLjQyIGFuZCByZWNvbmZpZ3VyZSB0byBtYWtlIGF2YWlsYWJsZS4nCi0rICAgICAgICBdKQotIGVzYWMKLSBmaQotIEFDX1NVQlNUKFdJVEhfQ1JZUFRPKQotQEAgLTQ3MSwyNCArNDYwLDggQEAKLSBkbmwgc29tZSB0d2Vha2luZyAtIERhdmlkIEjDpHJkZW1hbiAzMC8xMC8yMDAxCi0gZG5sCi0gCi0tTElCWE1MX0NPTkZJR19QUkVGSVg9IiIKLSBMSUJYTUxfU1JDPSIiCi0gCi0tQUNfQVJHX1dJVEgobGlieG1sLXByZWZpeCwKLS0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtcHJlZml4PVtQRlhdCQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBjb25maWddLAotLQlMSUJYTUxfQ09ORklHX1BSRUZJWD0kd2l0aHZhbAotLSkKLS0gICAgICAgIAotLUFDX0FSR19XSVRIKGxpYnhtbC1pbmNsdWRlLXByZWZpeCwKLS0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtaW5jbHVkZS1wcmVmaXg9W1BGWF0JU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgaGVhZGVyc10sCi0tICAgICAgICBMSUJYTUxfQ0ZMQUdTPSItSSR3aXRodmFsIgotLSkKLS0KLS1BQ19BUkdfV0lUSChsaWJ4bWwtbGlicy1wcmVmaXgsCi0tICAgICAgICBbICAtLXdpdGgtbGlieG1sLWxpYnMtcHJlZml4PVtQRlhdCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGxpYnNdLAotLSAgICAgICAgTElCWE1MX0xJQlM9Ii1MJHdpdGh2YWwiCi0tKQotLQotIEFDX0FSR19XSVRIKGxpYnhtbC1zcmMsCi0gCVsgIC0td2l0aC1saWJ4bWwtc3JjPVtESVJdICAgICAgICAgICAgICBGb3IgbGlieG1sIHRoYXRzIG5vdCBpbnN0YWxsZWQgeWV0IChzZXRzIGFsbCB0aHJlZSBhYm92ZSldLAotIAlMSUJYTUxfU1JDPSIkd2l0aHZhbCIKLUBAIC01NTEsMjggKzUyNCw5IEBACi0gCWZpCi0gZmkKLSAKLS1kbmwKLS1kbmwgbWFrZSBzdXJlIHhtbDItY29uZmlnIGlzIGV4ZWN1dGFibGUsCi0tZG5sIHRlc3QgdmVyc2lvbiBhbmQgaW5pdCBvdXIgdmFyaWFibGVzCi0tZG5sCi0tCi0taWYgJHtYTUxfQ09ORklHfSAtLWxpYnMgcHJpbnQgPiAvZGV2L251bGwgMj4mMQotLXRoZW4KLS0JWE1MVkVSUz1gJFhNTF9DT05GSUcgLS12ZXJzaW9uYAotLQlpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJFhNTFZFUlMpIC1nZSBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTikKLS0JdGhlbgotLQkJQUNfTVNHX1JFU1VMVCgkWE1MVkVSUyBmb3VuZCkKLS0JZWxzZQotLQkJQUNfTVNHX0VSUk9SKFZlcnNpb24gJFhNTFZFUlMgZm91bmQuIFlvdSBuZWVkIGF0IGxlYXN0IGxpYnhtbDIgJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OIGZvciB0aGlzIHZlcnNpb24gb2YgbGlieHNsdCkKLS0JZmkKLS0JTElCWE1MX0xJQlM9IiRMSUJYTUxfTElCUyBgJFhNTF9DT05GSUcgLS1saWJzYCIKLS0JaWYgdGVzdCAieCRMSUJYTUxfU1JDIiA9ICJ4IjsgdGhlbgotLQkJTElCWE1MX0NGTEFHUz0iJExJQlhNTF9DRkxBR1MgYCRYTUxfQ09ORklHIC0tY2ZsYWdzYCIKLS0JZmkKLS1lbHNlCi0tCUFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sMiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pCi0tZmkKLS0KLStQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJYTUwsIFtsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTl0sLAotKyAgICBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pXQotKykKLSAKLSBBQ19TVUJTVChDRkxBR1MpCi0gQUNfU1VCU1QoQ1BQRkxBR1MpCi1AQCAtNTk3LDcgKzU1MSw3IEBACi0gCi0gaWYgdGVzdCAiJHdpdGhfcGx1Z2lucyIgPSAieWVzIiA7IHRoZW4KLSAgIEFDX01TR19DSEVDS0lORyhbbGlieG1sMiBtb2R1bGUgc3VwcG9ydF0pCi0tICBXSVRIX01PRFVMRVM9ImAkWE1MX0NPTkZJRyAtLW1vZHVsZXNgIgotKyAgV0lUSF9NT0RVTEVTPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1tb2R1bGVzIGxpYnhtbC0yLjBgIgotICAgaWYgdGVzdCAiJHtXSVRIX01PRFVMRVN9IiA9ICIxIjsgdGhlbgotICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgIGVsc2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYWM1OTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1TVU1NQVJZID0gIkdOT01FIFhTTFQgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly94bWxzb2Z0Lm9yZy9YU0xULyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodDttZDU9MGNkOWEwN2FmYmViMjQwMjZjOWIwM2FlY2ZlYmE0NTgiCi0KLVNFQ1RJT04gPSAibGlicyIKLURFUEVORFMgPSAibGlieG1sMiIKLQotU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4c2x0L2xpYnhzbHQtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE1LTc5OTUucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5NjY3YmY2ZjkzMTBiOTU3MjU0ZmRjZjY1OTY2MDBiNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZmM3MTUxYTU3Yjg5YzAzZDdiODI1ZGY1YTBmYWUwYThkNWYwNTY3NGMwZTdjZjI5MzdlY2VjNGQ1NGEwMjhjIgotCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJsaWJ4c2x0LSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgotCi1TID0gIiR7V09SS0RJUn0vbGlieHNsdC0ke1BWfSIKLQotQklOQ09ORklHID0gIiR7YmluZGlyfS94c2x0LWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZQotCi0jIFdlIGRvbid0IERFUEVORCBvbiBiaW51dGlscyBmb3IgYW5zaWRlY2wuaCBzbyBlbnN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBoZWFkZXIKLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQlzZWQgLWkgLWUgJ3MvYW5zaWRlY2wuaC8vJyAke1N9L2NvbmZpZ3VyZS5pbgotCi0JIyBUaGUgdGltZXN0YW1wcyBpbiB0aGUgMS4xLjI4IHRhcmJhbGwgYXJlIG1lc3NlZCB1cCBjYXVzaW5nIHRoaXMgZmlsZSB0bwotCSMgYXBwZWFyIG91dCBvZiBkYXRlLiAgVG91Y2ggaXQgc28gdGhhdCB3ZSBkb24ndCB0cnkgdG8gcmVnZW5lcmF0ZSBpdC4KLQl0b3VjaCAke1N9L2RvYy94c2x0cHJvYy4xCi19Ci0KLUVYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtcHl0aG9uIC0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbWVtLWRlYnVnIC0td2l0aG91dC1jcnlwdG8iCi0jIG9sZGVyIHZlcnNpb25zIG9mIHRoaXMgcmVjaXBlIGhhZCAke1BOfS11dGlscwotUlBST1ZJREVTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCi1SQ09ORkxJQ1RTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCi1SUkVQTEFDRVNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKLQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgewotICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3hzbHRwcm9jIFhNTF9DQVRBTE9HX0ZJTEVTPSR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2cueG1sCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbGlieHNsdC1wbHVnaW5zIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veHNsdENvbmYuc2giCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3NDdlNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI5LmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiR05PTUUgWFNMVCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3htbHNvZnQub3JnL1hTTFQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0wY2Q5YTA3YWZiZWIyNDAyNmM5YjAzYWVjZmViYTQ1OCIKKworU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJ4bWwyIgorCitTUkNfVVJJID0gImZ0cDovL3htbHNvZnQub3JnL2xpYnhzbHQvbGlieHNsdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1wa2ctY29uZmlnLXRvLWZpbmQtZ2NyeXB0LWFuZC1saWJ4bWwyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTEyOWQzYzQ0YzAyMmRlM2I5ZGNmNmQ2ZjI4OGQ3MmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjU5NzZlMzg1NzgzN2U3NjE3YjI5ZjIyNDllYmI1ZWVhYzM0ZTI0OTIwOGQzMWYxZmJmN2E2YmE3YTQwOTBjZSIKKworVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAibGlieHNsdC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKKworUyA9ICIke1dPUktESVJ9L2xpYnhzbHQtJHtQVn0iCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veHNsdC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgbGliX3BhY2thZ2UKKworIyBXZSBkb24ndCBERVBFTkQgb24gYmludXRpbHMgZm9yIGFuc2lkZWNsLmggc28gZW5zdXJlIHdlIGRvbid0IHVzZSB0aGUgaGVhZGVyCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc2VkIC1pIC1lICdzL2Fuc2lkZWNsLmgvLycgJHtTfS9jb25maWd1cmUuaW4KKworCSMgVGhlIHRpbWVzdGFtcHMgaW4gdGhlIDEuMS4yOCB0YXJiYWxsIGFyZSBtZXNzZWQgdXAgY2F1c2luZyB0aGlzIGZpbGUgdG8KKwkjIGFwcGVhciBvdXQgb2YgZGF0ZS4gIFRvdWNoIGl0IHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIHJlZ2VuZXJhdGUgaXQuCisJdG91Y2ggJHtTfS9kb2MveHNsdHByb2MuMQorfQorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXB5dGhvbiAtLXdpdGhvdXQtZGVidWcgLS13aXRob3V0LW1lbS1kZWJ1ZyAtLXdpdGhvdXQtY3J5cHRvIgorIyBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIHJlY2lwZSBoYWQgJHtQTn0tdXRpbHMKK1JQUk9WSURFU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorUkNPTkZMSUNUU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorUlJFUExBQ0VTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCisKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS94c2x0cHJvYyBYTUxfQ0FUQUxPR19GSUxFUz0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2xpYnhzbHQtcGx1Z2lucyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3hzbHRDb25mLnNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmE3ZTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvZmlsZXMvbGlieWFtbC1DVkUtMjAxNC05MTMwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKLSMgVXNlciBLaXJpbGwgU2ltb25vdiA8eGlAcmVzb2x2ZW50Lm5ldD4KLSMgRGF0ZSAxNDE3MTk3MzEyIDIxNjAwCi0jIE5vZGUgSUQgMmI5MTU2NzU2NDIzZTk2N2NmZDA5YTYxZDEyNWQ4ODNmY2E2ZjRmMgotIyBQYXJlbnQgIDA1M2Y1M2EzODFmZjZhZGJiYzkzYTMxYWI3ZmRlZTA2YTE2YzhhMzMKLVJlbW92ZWQgaW52YWxpZCBzaW1wbGUga2V5IGFzc2VydGlvbiAodGhhbmsgdG8gSm9uYXRoYW4gR3JheSkuCi0KLVRoZSBwYXRjaCBjb21lcyBmcm9tIAotCi1odHRwczovL2JpdGJ1Y2tldC5vcmcveGkvbGlieWFtbC9jb21taXRzLzJiOTE1Njc1NjQyM2U5NjdjZmQwOWE2MWQxMjVkODgzZmNhNmY0ZjIKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNC05MTMwCi0KLVNpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KLQotZGlmZiAtciAwNTNmNTNhMzgxZmYgLXIgMmI5MTU2NzU2NDIzIHNyYy9zY2FubmVyLmMKLS0tLSBhL3NyYy9zY2FubmVyLmMJV2VkIE1hciAyNiAxMzo1NTo1NCAyMDE0IC0wNTAwCi0rKysgYi9zcmMvc2Nhbm5lci5jCUZyaSBOb3YgMjggMTE6NTU6MTIgMjAxNCAtMDYwMAotQEAgLTExMDYsMTMgKzExMDYsNiBAQAotICAgICAgICAgICAgICYmIHBhcnNlci0+aW5kZW50ID09IChwdHJkaWZmX3QpcGFyc2VyLT5tYXJrLmNvbHVtbik7Ci0gCi0gICAgIC8qCi0tICAgICAqIEEgc2ltcGxlIGtleSBpcyByZXF1aXJlZCBvbmx5IHdoZW4gaXQgaXMgdGhlIGZpcnN0IHRva2VuIGluIHRoZSBjdXJyZW50Ci0tICAgICAqIGxpbmUuICBUaGVyZWZvcmUgaXQgaXMgYWx3YXlzIGFsbG93ZWQuICBCdXQgd2UgYWRkIGEgY2hlY2sgYW55d2F5LgotLSAgICAgKi8KLS0KLS0gICAgYXNzZXJ0KHBhcnNlci0+c2ltcGxlX2tleV9hbGxvd2VkIHx8ICFyZXF1aXJlZCk7ICAgIC8qIEltcG9zc2libGUuICovCi0tCi0tICAgIC8qCi0gICAgICAqIElmIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1heSBzdGFydCBhIHNpbXBsZSBrZXksIHNhdmUgaXQuCi0gICAgICAqLwotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMTU1NzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLVNVTU1BUlkgPSAiTGliWUFNTCBpcyBhIFlBTUwgMS4xIHBhcnNlciBhbmQgZW1pdHRlciB3cml0dGVuIGluIEMuIgotREVTQ1JJUFRJT04gPSAiTGliWUFNTCBpcyBhIEMgbGlicmFyeSBmb3IgcGFyc2luZyBhbmQgZW1pdHRpbmcgZGF0YSBpbiBZQU1MIDEuMSwgXAotYSBodW1hbi1yZWFkYWJsZSBkYXRhIHNlcmlhbGl6YXRpb24gZm9ybWF0LiAiCi1IT01FUEFHRSA9ICJodHRwOi8vcHl5YW1sLm9yZy93aWtpL0xpYllBTUwiCi1TRUNUSU9OID0gImxpYnMvZGV2ZWwiCi0KLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjAxNWYwODg3NTliMTBlMGJjMmJmNjQ4OThkNGFlMTciCi0KLVNSQ19VUkkgPSAiaHR0cDovL3B5eWFtbC5vcmcvZG93bmxvYWQvbGlieWFtbC95YW1sLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjVmZTAwY2RhMThjYTVkYWViNDM3NjJiODBjMzhlMDZlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkYTY5NzFiNGJkMDhhOTg2ZGQyYTYxMzUzYmM0MjIzNjJiZDBlZGNjNjdkN2ViYWFjNjhjOTVmNzQxODI3NDkiCi0KLVMgPSAiJHtXT1JLRElSfS95YW1sLSR7UFZ9IgotCi1pbmhlcml0IGF1dG90b29scwotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDIyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS43LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiTGliWUFNTCBpcyBhIFlBTUwgMS4xIHBhcnNlciBhbmQgZW1pdHRlciB3cml0dGVuIGluIEMuIgorREVTQ1JJUFRJT04gPSAiTGliWUFNTCBpcyBhIEMgbGlicmFyeSBmb3IgcGFyc2luZyBhbmQgZW1pdHRpbmcgZGF0YSBpbiBZQU1MIDEuMSwgXAorYSBodW1hbi1yZWFkYWJsZSBkYXRhIHNlcmlhbGl6YXRpb24gZm9ybWF0LiAiCitIT01FUEFHRSA9ICJodHRwOi8vcHl5YW1sLm9yZy93aWtpL0xpYllBTUwiCitTRUNUSU9OID0gImxpYnMvZGV2ZWwiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjAxNWYwODg3NTliMTBlMGJjMmJmNjQ4OThkNGFlMTciCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5eWFtbC5vcmcvZG93bmxvYWQvbGlieWFtbC95YW1sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWFiZjQ1YmQzYTk2Mzc0ZmE1NWNhNjNiMzJmOWYyZjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODA4OGU0NTcyNjRhOThiYTQ1MWE5MGI4NjYxZmNiNGY5ZDZmNDc4ZjcyNjVkNDgzMjJhMTk2Y2VjMjQ4MDcyOSIKKworUyA9ICIke1dPUktESVJ9L3lhbWwtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0CmluZGV4IDJlYTc3NDUuLjZhY2I4OWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9ydW4tcHRlc3QKQEAgLTEsOCArMSwzMyBAQAogIyEvYmluL3NoCiAKIC4vbHpvdGVzdCAtbWF2YWlsIC1uMTAgLXEgL2V0Yy9zZXJ2aWNlcworaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgIGVjaG8gJ1BBU1M6IGx6b3Rlc3QnCitlbHNlCisgIGVjaG8gJ0ZBSUw6IGx6b3Rlc3QnCitmaQogTFpPVEVTVD0uL2x6b3Rlc3QgL2Jpbi9zaCAtZSAiLi9jaGVjay5zaCIgIi9ldGMiCiAuL2FsaWduCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgZWNobyAnUEFTUzogYWxpZ24nCitlbHNlCisgIGVjaG8gJ0ZBSUw6IGFsaWduJworZmkKIC4vY2hrc3VtCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgZWNobyAnUEFTUzogY2hrc3VtJworZWxzZQorICBlY2hvICdGQUlMOiBjaGtzdW0nCitmaQogLi9zaW1wbGUKK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorICBlY2hvICdQQVNTOiBzaW1wbGUnCitlbHNlCisgIGVjaG8gJ0ZBSUw6IHNpbXBsZScKK2ZpCiAuL3Rlc3RtaW5pCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgZWNobyAnUEFTUzogdGVzdG1pbmknCitlbHNlCisgIGVjaG8gJ0ZBSUw6IHRlc3RtaW5pJworZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvbHpvcC0xLjAzLWdjYzYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2x6b3AtMS4wMy1nY2M2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYjMzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2x6b3AtMS4wMy1nY2M2LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2djYy02IGhhcyBhZGRpdGlvbmFsIGVycm9ycyBlLmcuCisKKy4vdGVzdC5jOjE6MTI6IGVycm9yOiB2YXJpYWJseSBtb2RpZmllZCAnX19hY2NfY3RhJyBhdCBmaWxlIHNjb3BlCisgZXh0ZXJuIGludCBfX2FjY19jdGFbMS0yKiEoKDFsIDw8ICg4KjggLTEpKSA8IDApXTsKKyAgICAgICAgICAgIF5+fn5+fn5+fgorCitUaGlzIGlzIHJpZ2h0bHkgcG9pbnRlZCBvdXQgc2luY2UgdGhhdCBpbmRleCBpcyB1bmRlZmluZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9zcmMvbWluaWFjYy5oLm9yaWcJMjAxNi0wMi0xMCAxNjowOToyMy4yNDczMTU4NjYgKzAxMDAKKysrKyBhL3NyYy9taW5pYWNjLmgJMjAxNi0wMi0xMCAxNjoxMjoxNC45NzMyOTcwNTQgKzAxMDAKK0BAIC00NDY5LDEyICs0NDY5LDEyIEBACisgI2lmIGRlZmluZWQoX19NU0RPU19fKSAmJiBkZWZpbmVkKF9fVFVSQk9DX18pICYmIChfX1RVUkJPQ19fIDwgMHgwMTUwKQorICNlbGlmIDEgJiYgKEFDQ19DQ19TVU5QUk9DKSAmJiAhZGVmaW5lZChBQ0NDSEtfQ0ZHX1BFREFOVElDKQorICNlbHNlCistICAgIEFDQ0NIS19BU1NFUlQoKDEgICA8PCAoOCpTSVpFT0ZfSU5ULTEpKSA8IDApCisrICAgIEFDQ0NIS19BU1NFUlQoKGludCkoMXUgICA8PCAoOCpTSVpFT0ZfSU5ULTEpKSA8IDApCisgI2VuZGlmCisgICAgIEFDQ0NIS19BU1NFUlQoKDF1ICA8PCAoOCpTSVpFT0ZfSU5ULTEpKSA+IDApCisgI2lmIDEgJiYgKEFDQ19DQ19TVU5QUk9DKSAmJiAhZGVmaW5lZChBQ0NDSEtfQ0ZHX1BFREFOVElDKQorICNlbHNlCistICAgIEFDQ0NIS19BU1NFUlQoKDFsICA8PCAoOCpTSVpFT0ZfTE9ORy0xKSkgPCAwKQorKyAgICBBQ0NDSEtfQVNTRVJUKChsb25nKSgxdWwgIDw8ICg4KlNJWkVPRl9MT05HLTEpKSA8IDApCisgI2VuZGlmCisgICAgIEFDQ0NIS19BU1NFUlQoKDF1bCA8PCAoOCpTSVpFT0ZfTE9ORy0xKSkgPiAwKQorICNpZiBkZWZpbmVkKGFjY19pbnQxNmVfdCkKK0BAIC00NzAzLDcgKzQ3MDMsNyBAQAorICNlbGlmIDEgJiYgKEFDQ19DQ19MQ0MgfHwgQUNDX0NDX0xDQ1dJTjMyKSAmJiAhZGVmaW5lZChBQ0NDSEtfQ0ZHX1BFREFOVElDKQorICNlbGlmIDEgJiYgKEFDQ19DQ19TVU5QUk9DKSAmJiAhZGVmaW5lZChBQ0NDSEtfQ0ZHX1BFREFOVElDKQorICNlbGlmICEoQUNDX0JST0tFTl9JTlRFR1JBTF9QUk9NT1RJT04pICYmIChTSVpFT0ZfSU5UID4gMSkKKy0gICAgQUNDQ0hLX0FTU0VSVCggKCgodW5zaWduZWQgY2hhcikxMjgpIDw8IChpbnQpKDgqc2l6ZW9mKGludCktOCkpIDwgMCkKKysgICAgQUNDQ0hLX0FTU0VSVCggKGludCkoKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIpMTI4KSA8PCAoaW50KSg4KnNpemVvZihpbnQpLTgpKSA8IDApCisgI2VuZGlmCisgI2lmIChBQ0NfQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA1MzApICYmIChfX0JPUkxBTkRDX18gPCAweDA1NjApKQorICMgIHByYWdtYSBvcHRpb24gcG9wCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIKaW5kZXggMDdkNjI4OS4uNjQ5ZTcyNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3BfMS4wMy5iYgpAQCAtMTUsMTUgKzE1LDE1IEBACiAgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAogICAgICAgICAgICBmaWxlOi8veDMyX2FiaV9taW5pYWNjX2gucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2x6b3AtMS4wMy1nY2M2LnBhdGNoIFwKICAgICAgICAgICAiCiBTUkNfVVJJW21kNXN1bV0gPSAiMDA2YzVlMjdmYjc4Y2RkMTRhNjI4ZmRmYTVhYTE5MDUiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzE0MjViOGM3N2Q0OWY1YTY3OWQ1YTEyNmM5MGVhNmFkOTk1ODVhNTVlMzM1YTYxM2NhZTU5ZTkwOWRiYjJjOSIKIAogaW5oZXJpdCBhdXRvdG9vbHMKIAotZG9fY29uZmlndXJlICgpIHsKLSAgICBsbiAtc2YgIC4uL2FjaW5jbHVkZS5tNCAke1N9L2FjaW5jbHVkZS5tNAotICAgIGF1dG90b29sc19kb19jb25maWd1cmUKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1EbSAwNjQ0ICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vYWNpbmNsdWRlLm00CiB9CiAKIEJCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIvbG9uZy1sb25nLXRodW1iLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci9sb25nLWxvbmctdGh1bWIucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZThhMjM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1yZXF1aXJlIG1wZnIuaW5jCi0KLUxJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0JCSAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgotREVQRU5EUyA9ICJnbXAiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5tcGZyLm9yZy9tcGZyLSR7UFZ9L21wZnItJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2xvbmctbG9uZy10aHVtYi5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjY5NjkzOThjZDJmYmM1NmE2YWY1NzBiNTI3M2M1NmE5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY4MzVhMDhiZDk5MmM4MjU3NjQxNzkxZTlhNmEyYjM1YjAyMzM2YzhkZTI2ZDBhODU3Nzk1Mzc0N2U1MTRhMTYiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItY3VycmVudC8iCi0KLVMgPSAiJHtXT1JLRElSfS9tcGZyLSR7UFZ9IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBhODYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuNC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIG1wZnIuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorREVQRU5EUyA9ICJnbXAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tcGZyLm9yZy9tcGZyLSR7UFZ9L21wZnItJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2xvbmctbG9uZy10aHVtYi5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNjRiMmMxODE4NTAzOGU0MDRhNDAxYjgzMGQ1OWJlOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NjE0MTNiMTZkNzQ5YzUzZTJiZmQyYjFkZmFhM2IwMjdiMGU3OTNlNDA0YjkwYjVmYmFlZWY2MGFmNjUxN2Y1IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5tcGZyLm9yZy9tcGZyLWN1cnJlbnQvIgorCitTID0gIiR7V09SS0RJUn0vbXBmci0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMi43LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgppbmRleCBkNGRmMGEzLi5hZThlMzExIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgpAQCAtMSw2ICsxLDYgQEAKIHJlcXVpcmUgbmV0dGxlLmluYwogCi1MSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIiCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyIgogTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCiAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiCmluZGV4IDFiMzk2MmUuLjY2YWEzNDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiCkBAIC02LDcgKzYsOCBAQAogICAgIGZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZVwKICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2XAogICAgICIKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbnB0aC9ucHRoLSR7UFZ9LnRhci5iejIgXAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9ucHRoL25wdGgtJHtQVn0udGFyLmJ6MiBcCiAgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAogICAgICAgICAgICIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEyLmJiCmluZGV4IDE2ODM0MWIuLmZhNmQ1MjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTIuYmIKQEAgLTE0Nyw2ICsxNDcsOSBAQAogCiBpbmhlcml0IGF1dG90b29scwogCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKKwogZG9fY29tcGlsZV9wcmVwZW5kKCkgewogCW9lX3J1bm1ha2UgQ1JPU1NfQ09NUElMRT0xIENGTEFHUz0iLURYUF9VTklYIiBMREZMQUdTPSIiIENDPWdjYyAtQyBjb25maWcgZXhwb3J0CiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy8wMDAxLUZpeC1idWlsZC1mYWlsdXJlLW9uLW9wZW5zdXNlLTEzLjEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy8wMDAxLUZpeC1idWlsZC1mYWlsdXJlLW9uLW9wZW5zdXNlLTEzLjEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiM2FkMDAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvMDAwMS1GaXgtYnVpbGQtZmFpbHVyZS1vbi1vcGVuc3VzZS0xMy4xLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotRnJvbSA4NzU4YzZhNDUwOGE1Y2EwMTUwNWE4ZDY5YTI2OWM5MTJjZTEwYmVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDE4IEphbiAyMDE2IDE4OjI2OjE2ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBmYWlsdXJlIG9uIG9wZW5zdXNlIDEzLjEKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtnY2MgNC44IHNwZWNpZmljIGlzc3VlXQotU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci0tLS0KLSBuc3MvY21kL21vZHV0aWwvaW5zdGFsbC1kcy5oIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbnNzL2NtZC9tb2R1dGlsL2luc3RhbGwtZHMuaCBiL25zcy9jbWQvbW9kdXRpbC9pbnN0YWxsLWRzLmgKLWluZGV4IDNhM2FmYjMuLjQzM2VmZTAgMTAwNjQ0Ci0tLS0gYS9uc3MvY21kL21vZHV0aWwvaW5zdGFsbC1kcy5oCi0rKysgYi9uc3MvY21kL21vZHV0aWwvaW5zdGFsbC1kcy5oCi1AQCAtMjQzLDcgKzI0Myw3IEBAIHN0cnVjdCBQazExSW5zdGFsbF9JbmZvX3N0ciB7Ci0gUGsxMUluc3RhbGxfSW5mbyoKLSBQazExSW5zdGFsbF9JbmZvX25ldygpOwotIHZvaWQKLS1QazExSW5zdGFsbF9JbmZvX2luaXQoKTsKLStQazExSW5zdGFsbF9JbmZvX2luaXQoUGsxMUluc3RhbGxfSW5mbyogX3RoaXMpOwotIHZvaWQKLSBQazExSW5zdGFsbF9JbmZvX2RlbGV0ZShQazExSW5zdGFsbF9JbmZvKiBfdGhpcyk7Ci0gLyovLyBSZXR1cm5zIE5VTEwgZm9yIHN1Y2Nlc3MsIGVycm9yIG1lc3NhZ2UgaWYgcGFyc2UgZXJyb3IuKi8KLS0tIAotMS44LjQuNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9kaXNhYmxlLVd2YXJhcmdzLXdpdGgtY2xhbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9kaXNhYmxlLVd2YXJhcmdzLXdpdGgtY2xhbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiMWI2MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL2Rpc2FibGUtV3ZhcmFyZ3Mtd2l0aC1jbGFuZy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitjbGFuZyAzLjkgYWRkIHRoaXMgd2FybmluZyB0byByaWdodGx5IGZsYWcgdW5kZWZpbmVkCitiZWhhdmlvciwgd2UgcmVsZWdhdGUgdGhpcyB0byBiZSBqdXN0IGEgd2FybmluZyBpbnN0ZWFkCitvZiBlcnJvciBhbmQga2VlcCB0aGUgYmVoYXZpb3IgYXMgaXQgd2FzLiBSaWdodCBmaXggd291bGQKK2JlIHRvIG5vdCBwYXNzIGVudW0gdG8gdGhlIGZ1bmN0aW9uIHdpdGggdmFyaWFkaWMgYXJndW1lbnRzCithcyBsYXN0IG5hbWVkIGFyZ3VtZW50CisKK0ZpeGVzIGVycm9ycyBsaWtlCitvY3NwLmM6MjIyMDoyMjogZXJyb3I6IHBhc3NpbmcgYW4gb2JqZWN0IHRoYXQgdW5kZXJnb2VzIGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9uIHRvICd2YV9zdGFydCcgaGFzIHVuZGVmaW5lZCBiZWhhdmlvciBbLVdlcnJvciwtV3ZhcmFyZ3NdCisgICAgICAgIHZhX3N0YXJ0KGFwLCByZXNwb25zZVR5cGUwKTsKKyAgICAgICAgICAgICAgICAgICAgIF4KK29jc3AuYzoyMjAwOjQzOiBub3RlOiBwYXJhbWV0ZXIgb2YgdHlwZSAnU0VDT2lkVGFnJyBpcyBkZWNsYXJlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ09pZFRhZyByZXNwb25zZVR5cGUwLCAuLi4pCisKK3NlZQoraHR0cHM6Ly93d3cuc2VjdXJlY29kaW5nLmNlcnQub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9jcGx1c3BsdXMvRVhQNTgtQ1BQLitQYXNzK2FuK29iamVjdCtvZit0aGUrY29ycmVjdCt0eXBlK3RvK3ZhX3N0YXJ0Citmb3IgbW9yZSBkZXRhaWxzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG5zcy0zLjI0L25zcy9jb3JlY29uZi9XZXJyb3IubWsKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3MtMy4yNC5vcmlnL25zcy9jb3JlY29uZi9XZXJyb3IubWsKKysrKyBuc3MtMy4yNC9uc3MvY29yZWNvbmYvV2Vycm9yLm1rCitAQCAtNTQsNyArNTQsNyBAQCBpZm5kZWYgV0FSTklOR19DRkxBR1MKKyAgICAgaWZkZWYgQ0NfSVNfQ0xBTkcKKyAgICAgICAjIC1RdW51c2VkLWFyZ3VtZW50cyA6IGNsYW5nIG9iamVjdHMgdG8gYXJndW1lbnRzIHRoYXQgaXQgZG9lc24ndCB1bmRlcnN0YW5kCisgICAgICAgIyAgICBhbmQgZml4aW5nIHRoaXMgd291bGQgcmVxdWlyZSByZWFyY2hpdGVjdHVyZQorLSAgICAgIFdBUk5JTkdfQ0ZMQUdTICs9IC1RdW51c2VkLWFyZ3VtZW50cworKyAgICAgIFdBUk5JTkdfQ0ZMQUdTICs9IC1RdW51c2VkLWFyZ3VtZW50cyAtV25vLWVycm9yPXZhcmFyZ3MKKyAgICAgICAjIC1Xbm8tcGFyZW50aGVzZXMtZXF1YWxpdHkgOiBiZWNhdXNlIGNsYW5nIHdhcm5zIGFib3V0IG1hY3JvIGV4cGFuc2lvbnMKKyAgICAgICBXQVJOSU5HX0NGTEFHUyArPSAkKGNhbGwgZGlzYWJsZV93YXJuaW5nLHBhcmVudGhlc2VzLWVxdWFsaXR5KQorICAgICAgIGlmZGVmIEJVSUxEX09QVApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaAppbmRleCA4NjZkZTA3Li4xODFjNjlhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaApAQCAtMTYsMTEgKzE2LDExIEBACiAKIFNpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZSBiL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKLWluZGV4IDE4NTBiY2IuLjVhZWU4NGYgMTAwNjQ0Ci0tLS0gYS9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlCi0rKysgYi9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlCi1AQCAtMTgsNiArMTgsMTIgQEAgSU5URVJOQUxfVE9PTFMgID0gMQorSW5kZXg6IG5zcy0zLjI0L25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3MtMy4yNC5vcmlnL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKKysrKyBuc3MtMy4yNC9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlCitAQCAtMTgsNiArMTgsMTMgQEAgSU5URVJOQUxfVE9PTFMgID0gMQogIAogIGluY2x1ZGUgJChERVBUSCkvY29yZWNvbmYvY29uZmlnLm1rCiAgCkBAIC0yOSw2ICsyOSw3IEBACiArIyB0byBjbGVhbiB0aGUgJy1tNjQnIGZyb20gQVJDSEZMQUcgYW5kIExERkxBR1MuCiArQVJDSEZMQUcgPQogK0xERkxBR1MgPQorK0NGTEFHUyA9CiArCiAgaWZlcSAoLCQoZmlsdGVyLW91dCBPUzIgV0lOJSwkKE9TX1RBUkdFVCkpKQogIFBST0dSQU0JCT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL3BxZy5jLVVMTF9hZGRlbmQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9wcWcuYy1VTExfYWRkZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYWFhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9wcWcuYy1VTExfYWRkZW5kLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK25zcyBkb2VzIG5vdCBidWlsZCBvbiBtaXBzIHdpdGggY2xhbmcgYmVjYXVzZSB3cm9uZyB0eXBlcyBhcmUgdXNlZD8KKworcHFnLmM6MzM5OjE2OiBlcnJvcjogY29tcGFyaXNvbiBvZiBjb25zdGFudCAxODQ0Njc0NDA3MzcwOTU1MTYxNSB3aXRoIGV4cHJlc3Npb24gb2YgdHlwZSAndW5zaWduZWQgbG9uZycgaXMgYWx3YXlzIHRydWUgWy1XZXJyb3IsLVd0YXV0b2xvZ2ljYWwtY29uc3RhbnQtb3V0LW9mLXJhbmdlLWNvbXBhcmVdCisgICAgIGlmIChhZGRlbmQgPCBNUF9ESUdJVF9NQVgpIHsKKyAgICAgICB+fn5+fn4gXiB+fn5+fn5+fn5+fn4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IG5zcy0zLjI0L25zcy9saWIvZnJlZWJsL3BxZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNzLTMuMjQub3JpZy9uc3MvbGliL2ZyZWVibC9wcWcuYworKysrIG5zcy0zLjI0L25zcy9saWIvZnJlZWJsL3BxZy5jCitAQCAtMzIyLDggKzMyMiw4IEBAIGdlbmVyYXRlX2hfY2FuZGlkYXRlKFNFQ0l0ZW0gKmhpdCwgbXBfaW4KKyAKKyBzdGF0aWMgU0VDU3RhdHVzCisgYWRkVG9TZWVkKGNvbnN0IFNFQ0l0ZW0gKiBzZWVkLAorLSAgICAgICAgICB1bnNpZ25lZCBsb25nICAgYWRkZW5kLAorLSAgICAgICAgICBpbnQgICAgICAgICAgICAgc2VlZGxlbiwgLyogZyBpbiAxODYtMSAqLworKyAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgIGFkZGVuZCwKKysgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICBzZWVkbGVuLCAvKiBnIGluIDE4Ni0xICovCisgICAgICAgICAgIFNFQ0l0ZW0gKiBzZWVkb3V0KQorIHsKKyAgICAgbXBfaW50IHMsIHN1bSwgbW9kdWx1cywgdG1wOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4yMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZTI0MTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4yMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi1TVU1NQVJZID0gIk1vemlsbGEncyBTU0wgYW5kIFRMUyBpbXBsZW1lbnRhdGlvbiIKLURFU0NSSVBUSU9OID0gIk5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMgKE5TUykgaXMgYSBzZXQgb2YgbGlicmFyaWVzIFwKLWRlc2lnbmVkIHRvIHN1cHBvcnQgY3Jvc3MtcGxhdGZvcm0gZGV2ZWxvcG1lbnQgb2YgXAotc2VjdXJpdHktZW5hYmxlZCBjbGllbnQgYW5kIHNlcnZlciBhcHBsaWNhdGlvbnMuIFwKLUFwcGxpY2F0aW9ucyBidWlsdCB3aXRoIE5TUyBjYW4gc3VwcG9ydCBTU0wgdjIgYW5kIHYzLCBcCi1UTFMsIFBLQ1MgNSwgUEtDUyA3LCBQS0NTIDExLCBQS0NTIDEyLCBTL01JTUUsIFguNTA5IFwKLXYzIGNlcnRpZmljYXRlcywgYW5kIG90aGVyIHNlY3VyaXR5IHN0YW5kYXJkcy4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIk1QTC0yLjAgfCAoTVBMLTIuMCAmIEdQTC0yLjArKSB8IChNUEwtMi4wICYgTEdQTC0yLjErKSIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbnNzL0NPUFlJTkc7bWQ1PTNiMWU4OGUxYjljMGI1YTRiMjg4MWQ0NmNjZTA2YTE4IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRTttZDU9NDkxZjE1OGQwOWQ5NDg0NjZhZmNlODVkNmYxZmUxOGYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFLU1QTDttZDU9NWQ0MjVjOGYzMTU3ZGJmMjEyZGIyZWM1M2Q5ZTUxMzIiCi0KLVNSQ19VUkkgPSAiXAotICAgIGh0dHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL21vemlsbGEub3JnL3NlY3VyaXR5L25zcy9yZWxlYXNlcy9OU1NfM18yMV9SVE0vc3JjLyR7QlB9LnRhci5neiBcCi0gICAgZmlsZTovL25zcy1maXgtc3VwcG9ydC1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAotICAgIGZpbGU6Ly9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCi0gICAgZmlsZTovL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaCBcCi0gICAgZmlsZTovL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtZmFpbHVyZS1vbi1vcGVuc3VzZS0xMy4xLnBhdGNoIFwKLSAgICBmaWxlOi8vbnNzLnBjLmluIFwKLSAgICBmaWxlOi8vc2lnbmxpYnMuc2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiM2M4YjJlZDg4MGRkM2E4ZDg2YzllMDE1MWFmZTZlYmEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2Y3YTViMDI3ZDdjZGQ1YzBlNGZmNzU0NGRhMzNmZGM2ZjU2YzJmOGMyN2ZmZjAyOTM4ZmQ0YTZmYmU4NzIzOSIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9OU1MvTlNTX1JlbGVhc2VzIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiTlNTXyg/UDxwdmVyPi4rKV9yZWxlYXNlX25vdGVzIgotCi1pbmhlcml0IHNpdGVpbmZvCi0KLURFUEVORFMgPSAic3FsaXRlMyBuc3ByIHpsaWIgbnNzLW5hdGl2ZSIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gInNxbGl0ZTMtbmF0aXZlIG5zcHItbmF0aXZlIHpsaWItbmF0aXZlIgotUkRFUEVORFNfJHtQTn0tc21pbWUgPSAicGVybCIKLQotVEQgPSAiJHtTfS90ZW50YXRpdmUtZGlzdCIKLVREUyA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0LXN0YWdpbmciCi0KLVRBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgotCi1kb19jb25maWd1cmVfcHJlcGVuZF9saWJjLW11c2wgKCkgewotICAgIHNlZCAtaSAtZSAnLy1ESEFWRV9TWVNfQ0RFRlNfSC9kJyAke1N9L25zcy9saWIvZGJtL2NvbmZpZy9jb25maWcubWsKLX0KLQotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLSAgICBleHBvcnQgTlNQUl9JTkNMVURFX0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0KLSAgICBleHBvcnQgTlNQUl9MSUJfRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfQotfQotCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgewotICAgIGV4cG9ydCBMREZMQUdTPSIiCi19Ci0KLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0gICAgIyBOZWVkIHRvIHNldCBSUEFUSCBzbyB0aGF0IGNocnBhdGggd2lsbCBkbyBpdHMgam9iIGNvcnJlY3RseQotICAgIFJQQVRIPSItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSAtV2wsLXJwYXRoLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSAtV2wsLXJwYXRoLCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IgotfQotCi1kb19jb21waWxlKCkgewotICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKLSAgICBleHBvcnQgTkFUSVZFX0NDPSJnY2MiCi0gICAgZXhwb3J0IEJVSUxEX09QVD0xCi0KLSAgICBleHBvcnQgRlJFRUJMX05PX0RFUEVORD0xCi0gICAgZXhwb3J0IEZSRUVCTF9MT1dIQVNIPTEKLQotICAgIGV4cG9ydCBMSUJESVI9JHtsaWJkaXJ9Ci0gICAgZXhwb3J0IE1PWklMTEFfQ0xJRU5UPTEKLSAgICBleHBvcnQgTlNfVVNFX0dDQz0xCi0gICAgZXhwb3J0IE5TU19VU0VfU1lTVEVNX1NRTElURT0xCi0gICAgZXhwb3J0IE5TU19FTkFCTEVfRUNDPTEKLQotICAgIGV4cG9ydCBPU19SRUxFQVNFPTMuNAotICAgIGV4cG9ydCBPU19UQVJHRVQ9TGludXgKLSAgICBleHBvcnQgT1NfQVJDSD1MaW51eAotCi0gICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07IHRoZW4KLSAgICAgICAgT1NfVEVTVD1wcGMKLSAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07IHRoZW4KLSAgICAgICAgT1NfVEVTVD1wcGM2NAotICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHMiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwc2VsIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjRlbCIgXTsgdGhlbgotICAgICAgICBPU19URVNUPW1pcHMKLSAgICBlbHNlCi0gICAgICAgIE9TX1RFU1Q9IiR7VEFSR0VUX0FSQ0h9IgotICAgIGZpCi0KLSAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgotICAgICAgICBleHBvcnQgVVNFXzY0PTEKLSAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIC1hICIke1NJVEVJTkZPX0JJVFN9IiA9ICIzMiIgXTsgdGhlbgotICAgICAgICBleHBvcnQgVVNFX1gzMj0xCi0gICAgZmkKLQotICAgIGV4cG9ydCBOU1NfRElTQUJMRV9HVEVTVFM9MQotCi0gICAgIyBXZSBjYW4gbW9kaWZ5IENDIGluIHRoZSBlbnZpcm9ubWVudCwgYnV0IGlmIHdlIHNldCBpdCB2aWEgYW4KLSAgICAjIGFyZ3VtZW50IHRvIG1ha2UsIG5zaW5zdGFsbCwgYSBob3N0IHByb2dyYW0sIHdpbGwgYWxzbyBidWlsZCB3aXRoIGl0IQotICAgICMKLSAgICBleHBvcnQgQ0M9IiR7Q0N9IC1nIgotICAgIG1ha2UgLUMgLi9uc3MgQ0NDPSIke0NYWH0gLWciIFwKLSAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9IFwKLSAgICAgICAgUlBBVEg9IiR7UlBBVEh9IgotfQotCi0KLWRvX2luc3RhbGxfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7Ci0gICAgZXhwb3J0IExERkxBR1M9IiIKLX0KLQotZG9faW5zdGFsbCgpIHsKLSAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCi0gICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgotICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQotCi0gICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQotCi0gICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KLSAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQotICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKLSAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKLSAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQotCi0gICAgZXhwb3J0IE9TX1JFTEVBU0U9My40Ci0gICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAotICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4Ci0KLSAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgotICAgICAgICBPU19URVNUPXBwYwotICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgotICAgICAgICBPU19URVNUPXBwYzY0Ci0gICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCi0gICAgICAgIE9TX1RFU1Q9bWlwcwotICAgIGVsc2UKLSAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCi0gICAgZmkKLSAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgotICAgICAgICBleHBvcnQgVVNFXzY0PTEKLSAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIC1hICIke1NJVEVJTkZPX0JJVFN9IiA9ICIzMiIgXTsgdGhlbgotICAgICAgICBleHBvcnQgVVNFX1gzMj0xCi0gICAgZmkKLQotICAgIGV4cG9ydCBOU1NfRElTQUJMRV9HVEVTVFM9MQotCi0gICAgbWFrZSAtQyAuL25zcyBcCi0gICAgICAgIENDQz0iJHtDWFh9IiBcCi0gICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCi0gICAgICAgIFNPVVJDRV9MSUJfRElSPSIke1REfS8ke2xpYmRpcn0iIFwKLSAgICAgICAgU09VUkNFX0JJTl9ESVI9IiR7VER9LyR7YmluZGlyfSIgXAotICAgICAgICBpbnN0YWxsCi0KLSAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LwotICAgIGZvciBmaWxlIGluICR7U30vZGlzdC8qLk9CSi9saWIvKi5zbzsgZG8KLSAgICAgICAgZWNobyAiSW5zdGFsbGluZyBgYmFzZW5hbWUgJGZpbGVgLi4uIgotICAgICAgICBjcCAkZmlsZSAgJHtEfS8ke2xpYmRpcn0vCi0gICAgZG9uZQotCi0gICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc28uKjsgZG8KLSAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiBdOyB0aGVuCi0gICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQotICAgICAgICAgICAgbG4gLXNmICQoYmFzZW5hbWUgJHNoYXJlZF9saWIpICR7RH0vJHtsaWJkaXJ9LyQoYmFzZW5hbWUgJHNoYXJlZF9saWIgLjFvZSkKLSAgICAgICAgZmkKLSAgICBkb25lCi0gICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc287IGRvCi0gICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgLWEgISAtZSAke0R9LyR7bGliZGlyfS8kc2hhcmVkX2xpYiBdOyB0aGVuCi0gICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQotICAgICAgICBmaQotICAgIGRvbmUKLQotICAgIGluc3RhbGwgLWQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMKLSAgICBpbnN0YWxsIC1tIDY0NCAtdCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMyBkaXN0L3B1YmxpYy9uc3MvKgotCi0gICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQotICAgIGZvciBiaW5hcnkgaW4gJHtURH0vJHtiaW5kaXJ9Lyo7IGRvCi0gICAgICAgIGluc3RhbGwgLW0gNzU1IC10ICR7RH0vJHtiaW5kaXJ9ICRiaW5hcnkKLSAgICBkb25lCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgICMgQ3JlYXRlIGVtcHR5IC5jaGsgZmlsZXMgZm9yIHRoZSBOU1MgbGlicmFyaWVzIGF0IGJ1aWxkIHRpbWUuIFRoZXkgY291bGQKLSAgICAjIGJlIHJlZ2VuZXJhdGVkIGF0IHRhcmdldCdzIGJvb3QgdGltZS4KLSAgICBmb3IgZmlsZSBpbiBsaWJzb2Z0b2tuMy5jaGsgbGliZnJlZWJsMy5jaGsgbGlibnNzZGJtMy5jaGs7IGRvCi0gICAgICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9LyRmaWxlCi0gICAgICAgIGNobW9kIDc1NSAke0R9LyR7bGliZGlyfS8kZmlsZQotICAgIGRvbmUKLSAgICBpbnN0YWxsIC1EIC1tIDc1NSAke1dPUktESVJ9L3NpZ25saWJzLnNoICR7RH0vJHtiaW5kaXJ9L3NpZ25saWJzLnNoCi0KLSAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLwotICAgIHNlZCAncy8lTlNTX1ZFUlNJT04lLyR7UFZ9LycgJHtXT1JLRElSfS9uc3MucGMuaW4gfCBzZWQgJ3MvJU5TUFJfVkVSU0lPTiUvNC45LjIvJyA+ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYwotICAgIHNlZCAtaSBzOk9FUFJFRklYOiR7cHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYwotICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYwotICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYwotICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn0vbnNzMzpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYwotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0gICAgIyBDcmVhdGUgYSBibGFuayBjZXJ0aWZpY2F0ZQotICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8KLSAgICB0b3VjaCAuL2VtcHR5X3Bhc3N3b3JkCi0gICAgY2VydHV0aWwgLU4gLWQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyAtZiAuL2VtcHR5X3Bhc3N3b3JkCi0gICAgY2htb2QgNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8qLmRiCi0gICAgcm0gLi9lbXB0eV9wYXNzd29yZAotfQotCi1wa2dfcG9zdGluc3RfJHtQTn0gKCkgewotICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCi0gICAgICAgIGZvciBJIGluICRELyR7bGliZGlyfS9saWIqLmNoazsgZG8KLSAgICAgICAgICAgIEROPWBkaXJuYW1lICRJYAotICAgICAgICAgICAgQk49YGJhc2VuYW1lICRJIC5jaGtgCi0gICAgICAgICAgICBGTj0kRE4vJEJOLnNvCi0gICAgICAgICAgICBzaGxpYnNpZ24gLWkgJEZOCi0JICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgotCSAgICAgICBleGl0IDEKLQkgICAgZmkKLSAgICAgICAgZG9uZQotICAgICAgICBleGl0IDAKLSAgICBmaQotICAgIHNpZ25saWJzLnNoCi19Ci0KLVBBQ0tBR0VTID0rICIke1BOfS1zbWltZSIKLUZJTEVTXyR7UE59LXNtaW1lID0gIlwKLSAgICAke2JpbmRpcn0vc21pbWUgXAotIgotRklMRVNfJHtQTn0gPSAiXAotICAgICR7c3lzY29uZmRpcn0gXAotICAgICR7YmluZGlyfSBcCi0gICAgJHtsaWJkaXJ9L2xpYiouY2hrIFwKLSAgICAke2xpYmRpcn0vbGliKi5zbyBcCi0gICAgIgotRklMRVNfJHtQTn0tZGV2ID0gIlwKLSAgICAke2xpYmRpcn0vbnNzIFwKLSAgICAke2xpYmRpcn0vcGtnY29uZmlnLyogXAotICAgICR7aW5jbHVkZWRpcn0vKiBcCi0gICAgIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjA5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjI1LmJiCkBAIC0wLDAgKzEsMjQyIEBACitTVU1NQVJZID0gIk1vemlsbGEncyBTU0wgYW5kIFRMUyBpbXBsZW1lbnRhdGlvbiIKK0RFU0NSSVBUSU9OID0gIk5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMgKE5TUykgaXMgYSBzZXQgb2YgbGlicmFyaWVzIFwKK2Rlc2lnbmVkIHRvIHN1cHBvcnQgY3Jvc3MtcGxhdGZvcm0gZGV2ZWxvcG1lbnQgb2YgXAorc2VjdXJpdHktZW5hYmxlZCBjbGllbnQgYW5kIHNlcnZlciBhcHBsaWNhdGlvbnMuIFwKK0FwcGxpY2F0aW9ucyBidWlsdCB3aXRoIE5TUyBjYW4gc3VwcG9ydCBTU0wgdjIgYW5kIHYzLCBcCitUTFMsIFBLQ1MgNSwgUEtDUyA3LCBQS0NTIDExLCBQS0NTIDEyLCBTL01JTUUsIFguNTA5IFwKK3YzIGNlcnRpZmljYXRlcywgYW5kIG90aGVyIHNlY3VyaXR5IHN0YW5kYXJkcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1QTC0yLjAgfCAoTVBMLTIuMCAmIEdQTC0yLjArKSB8IChNUEwtMi4wICYgTEdQTC0yLjErKSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbnNzL0NPUFlJTkc7bWQ1PTNiMWU4OGUxYjljMGI1YTRiMjg4MWQ0NmNjZTA2YTE4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRTttZDU9NDkxZjE1OGQwOWQ5NDg0NjZhZmNlODVkNmYxZmUxOGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFLU1QTDttZDU9NWQ0MjVjOGYzMTU3ZGJmMjEyZGIyZWM1M2Q5ZTUxMzIiCisKK1NSQ19VUkkgPSAiXAorICAgIGh0dHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL21vemlsbGEub3JnL3NlY3VyaXR5L25zcy9yZWxlYXNlcy9OU1NfM18yNV9SVE0vc3JjLyR7QlB9LnRhci5neiBcCisgICAgZmlsZTovL25zcy1maXgtc3VwcG9ydC1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIFwKKyAgICBmaWxlOi8vZGlzYWJsZS1XdmFyYXJncy13aXRoLWNsYW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vcHFnLmMtVUxMX2FkZGVuZC5wYXRjaCBcCisgICAgZmlsZTovL25zcy5wYy5pbiBcCisgICAgZmlsZTovL3NpZ25saWJzLnNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMzE2OWM0MDZhZGM4YWMzNjcyZDM0YmY5ZWEyNDMzZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZDFhZDQ3NWRhMTlkMGMwMzNhNzE2MzUwZGM1ZjhhNzQ3OTk5ZDNlYmE1YWMwN2VlMDM2OGM1YmFkNmUyMzU5IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUy9OU1NfUmVsZWFzZXMiCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJOU1NfKD9QPHB2ZXI+LispX3JlbGVhc2Vfbm90ZXMiCisKK2luaGVyaXQgc2l0ZWluZm8KKworREVQRU5EUyA9ICJzcWxpdGUzIG5zcHIgemxpYiBuc3MtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAic3FsaXRlMy1uYXRpdmUgbnNwci1uYXRpdmUgemxpYi1uYXRpdmUiCitSREVQRU5EU18ke1BOfS1zbWltZSA9ICJwZXJsIgorCitURCA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0IgorVERTID0gIiR7U30vdGVudGF0aXZlLWRpc3Qtc3RhZ2luZyIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2xpYmMtbXVzbCAoKSB7CisgICAgc2VkIC1pIC1lICcvLURIQVZFX1NZU19DREVGU19IL2QnICR7U30vbnNzL2xpYi9kYm0vY29uZmlnL2NvbmZpZy5taworfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgIGV4cG9ydCBOU1BSX0lOQ0xVREVfRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfQorICAgIGV4cG9ydCBOU1BSX0xJQl9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9CisgICAgZXhwb3J0IE5TU19FTkFCTEVfV0VSUk9SPTAKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBleHBvcnQgTERGTEFHUz0iIgorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgICMgTmVlZCB0byBzZXQgUlBBVEggc28gdGhhdCBjaHJwYXRoIHdpbGwgZG8gaXRzIGpvYiBjb3JyZWN0bHkKKyAgICBSUEFUSD0iLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gLVdsLC1ycGF0aCwke1NUQUdJTkdfTElCRElSX05BVElWRX0gLVdsLC1ycGF0aCwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSIKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCisgICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgorICAgIGV4cG9ydCBOQVRJVkVfRkxBR1M9IiR7SE9TVF9DRkxBR1N9IgorICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQorCisgICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQorICAgIGV4cG9ydCBGUkVFQkxfTE9XSEFTSD0xCisKKyAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQorICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCisgICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQorICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQorICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCisKKyAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKKyAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4CisgICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKKworICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjNjQKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1taXBzCisgICAgZWxzZQorICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKKyAgICBmaQorCisgICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV82ND0xCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQorICAgIGZpCisKKyAgICBleHBvcnQgTlNTX0RJU0FCTEVfR1RFU1RTPTEKKworICAgICMgV2UgY2FuIG1vZGlmeSBDQyBpbiB0aGUgZW52aXJvbm1lbnQsIGJ1dCBpZiB3ZSBzZXQgaXQgdmlhIGFuCisgICAgIyBhcmd1bWVudCB0byBtYWtlLCBuc2luc3RhbGwsIGEgaG9zdCBwcm9ncmFtLCB3aWxsIGFsc28gYnVpbGQgd2l0aCBpdCEKKyAgICAjCisgICAgZXhwb3J0IENDPSIke0NDfSAtZyIKKyAgICBtYWtlIC1DIC4vbnNzIENDQz0iJHtDWFh9IC1nIiBcCisgICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCisgICAgICAgIFJQQVRIPSIke1JQQVRIfSIKK30KKworCitkb19pbnN0YWxsX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGV4cG9ydCBMREZMQUdTPSIiCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQorICAgIGV4cG9ydCBOQVRJVkVfQ0M9ImdjYyIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKworICAgIGV4cG9ydCBMSUJESVI9JHtsaWJkaXJ9CisgICAgZXhwb3J0IE1PWklMTEFfQ0xJRU5UPTEKKyAgICBleHBvcnQgTlNfVVNFX0dDQz0xCisgICAgZXhwb3J0IE5TU19VU0VfU1lTVEVNX1NRTElURT0xCisgICAgZXhwb3J0IE5TU19FTkFCTEVfRUNDPTEKKworICAgIGV4cG9ydCBPU19SRUxFQVNFPTMuNAorICAgIGV4cG9ydCBPU19UQVJHRVQ9TGludXgKKyAgICBleHBvcnQgT1NfQVJDSD1MaW51eAorCisgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGMKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGM2NAorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHMiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwc2VsIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjRlbCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPW1pcHMKKyAgICBlbHNlCisgICAgICAgIE9TX1RFU1Q9IiR7VEFSR0VUX0FSQ0h9IgorICAgIGZpCisgICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV82ND0xCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQorICAgIGZpCisKKyAgICBleHBvcnQgTlNTX0RJU0FCTEVfR1RFU1RTPTEKKworICAgIG1ha2UgLUMgLi9uc3MgXAorICAgICAgICBDQ0M9IiR7Q1hYfSIgXAorICAgICAgICBPU19URVNUPSR7T1NfVEVTVH0gXAorICAgICAgICBTT1VSQ0VfTElCX0RJUj0iJHtURH0vJHtsaWJkaXJ9IiBcCisgICAgICAgIFNPVVJDRV9CSU5fRElSPSIke1REfS8ke2JpbmRpcn0iIFwKKyAgICAgICAgaW5zdGFsbAorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8KKyAgICBmb3IgZmlsZSBpbiAke1N9L2Rpc3QvKi5PQkovbGliLyouc287IGRvCisgICAgICAgIGVjaG8gIkluc3RhbGxpbmcgYGJhc2VuYW1lICRmaWxlYC4uLiIKKyAgICAgICAgY3AgJGZpbGUgICR7RH0vJHtsaWJkaXJ9LworICAgIGRvbmUKKworICAgIGZvciBzaGFyZWRfbGliIGluICR7VER9LyR7bGliZGlyfS8qLnNvLio7IGRvCisgICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgXTsgdGhlbgorICAgICAgICAgICAgY3AgJHNoYXJlZF9saWIgJHtEfS8ke2xpYmRpcn0KKyAgICAgICAgICAgIGxuIC1zZiAkKGJhc2VuYW1lICRzaGFyZWRfbGliKSAke0R9LyR7bGliZGlyfS8kKGJhc2VuYW1lICRzaGFyZWRfbGliIC4xb2UpCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIGZvciBzaGFyZWRfbGliIGluICR7VER9LyR7bGliZGlyfS8qLnNvOyBkbworICAgICAgICBpZiBbIC1mICRzaGFyZWRfbGliIC1hICEgLWUgJHtEfS8ke2xpYmRpcn0vJHNoYXJlZF9saWIgXTsgdGhlbgorICAgICAgICAgICAgY3AgJHNoYXJlZF9saWIgJHtEfS8ke2xpYmRpcn0KKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtpbmNsdWRlZGlyfS9uc3MzCisgICAgaW5zdGFsbCAtbSA2NDQgLXQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMgZGlzdC9wdWJsaWMvbnNzLyoKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBmb3IgYmluYXJ5IGluICR7VER9LyR7YmluZGlyfS8qOyBkbworICAgICAgICBpbnN0YWxsIC1tIDc1NSAtdCAke0R9LyR7YmluZGlyfSAkYmluYXJ5CisgICAgZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjIENyZWF0ZSBlbXB0eSAuY2hrIGZpbGVzIGZvciB0aGUgTlNTIGxpYnJhcmllcyBhdCBidWlsZCB0aW1lLiBUaGV5IGNvdWxkCisgICAgIyBiZSByZWdlbmVyYXRlZCBhdCB0YXJnZXQncyBib290IHRpbWUuCisgICAgZm9yIGZpbGUgaW4gbGlic29mdG9rbjMuY2hrIGxpYmZyZWVibDMuY2hrIGxpYm5zc2RibTMuY2hrOyBkbworICAgICAgICB0b3VjaCAke0R9LyR7bGliZGlyfS8kZmlsZQorICAgICAgICBjaG1vZCA3NTUgJHtEfS8ke2xpYmRpcn0vJGZpbGUKKyAgICBkb25lCisgICAgaW5zdGFsbCAtRCAtbSA3NTUgJHtXT1JLRElSfS9zaWdubGlicy5zaCAke0R9LyR7YmluZGlyfS9zaWdubGlicy5zaAorCisgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8KKyAgICBzZWQgJ3MvJU5TU19WRVJTSU9OJS8ke1BWfS8nICR7V09SS0RJUn0vbnNzLnBjLmluIHwgc2VkICdzLyVOU1BSX1ZFUlNJT04lLzQuOS4yLycgPiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRVBSRUZJWDoke3ByZWZpeH06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRUVYRUNQUkVGSVg6JHtleGVjX3ByZWZpeH06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRUxJQkRJUjoke2xpYmRpcn06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRUlOQ0RJUjoke2luY2x1ZGVkaXJ9L25zczM6ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICMgQ3JlYXRlIGEgYmxhbmsgY2VydGlmaWNhdGUKKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvCisgICAgdG91Y2ggLi9lbXB0eV9wYXNzd29yZAorICAgIGNlcnR1dGlsIC1OIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8gLWYgLi9lbXB0eV9wYXNzd29yZAorICAgIGNobW9kIDY0NCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvKi5kYgorICAgIHJtIC4vZW1wdHlfcGFzc3dvcmQKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICBpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgICAgICBmb3IgSSBpbiAkRC8ke2xpYmRpcn0vbGliKi5jaGs7IGRvCisgICAgICAgICAgICBETj1gZGlybmFtZSAkSWAKKyAgICAgICAgICAgIEJOPWBiYXNlbmFtZSAkSSAuY2hrYAorICAgICAgICAgICAgRk49JEROLyRCTi5zbworICAgICAgICAgICAgc2hsaWJzaWduIC1pICRGTgorCSAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkgICAgICAgZXhpdCAxCisJICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgZXhpdCAwCisgICAgZmkKKyAgICBzaWdubGlicy5zaAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tc21pbWUiCitGSUxFU18ke1BOfS1zbWltZSA9ICJcCisgICAgJHtiaW5kaXJ9L3NtaW1lIFwKKyIKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke3N5c2NvbmZkaXJ9IFwKKyAgICAke2JpbmRpcn0gXAorICAgICR7bGliZGlyfS9saWIqLmNoayBcCisgICAgJHtsaWJkaXJ9L2xpYiouc28gXAorICAgICIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L25zcyBcCisgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy8qIFwKKyAgICAke2luY2x1ZGVkaXJ9LyogXAorICAgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcDExLWtpdC9wMTEta2l0XzAuMjIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiCmluZGV4IGE0ZWZmZjEuLjM4ZmEwOWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiCkBAIC0yLDcgKzIsNyBAQAogTElDRU5TRSA9ICJCU0QiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wMjkzMzg4N2Y2MDk4MDdmYmI1N2FhNDIzN2QxNGE1MCIKIAotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ3RrLWRvYwogCiBERVBFTkRTID0gImxpYnRhc24xIGxpYmZmaSIKIApAQCAtMTIsNiArMTIsMjYgQEAKIAogRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10cnVzdC1wYXRocyIKIAorIyBUaGlzIHJlY2lwZSBkb2VzIG5vdCB1c2UgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbTQgbWFjcm9zLCBhbmQgc28gdGhlIC4vY29uZmlndXJlIGZsYWdzCisjIHRoYXQgY29udHJvbCBndGstZG9jIGJ1aWxkIGFyZSBub24tc3RhbmRhcmQKK0VYVFJBX09FQ09ORl9wcmVwZW5kX2NsYXNzLXRhcmdldCA9ICIke0BiYi51dGlscy5jb250YWlucygnR1RLRE9DX0VOQUJMRUQnLCAnVHJ1ZScsICctLWVuYWJsZS1kb2MgLS1lbmFibGUtZG9jLWh0bWwgLS1kaXNhYmxlLWRvYy1wZGYnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1kaXNhYmxlLWRvYycsIGQpfSAiCisKKyMgV2hlbiBidWlsZGluZyBuYXRpdmUgcmVjaXBlcywgZGlzYWJsZSBndGtkb2MsIGFzIGl0IGlzIG5vdCBuZWNlc3NhcnksCisjIHB1bGxzIGluIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBhbmQgbWFrZXMgYnVpbGQgdGltZXMgbG9uZ2VyCitFWFRSQV9PRUNPTkZfcHJlcGVuZF9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWRvYyAiCitFWFRSQV9PRUNPTkZfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiLS1kaXNhYmxlLWRvYyAiCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVF9hcHBlbmQgPSAiIC0tZW5hYmxlLWd0ay1kb2MtaHRtbCAtLWRpc2FibGUtZ3RrLWRvYy1wZGYgLS1lbmFibGUtZ3RrLWRvYyAtLWRpc2FibGUtZ3RrLWRvYyIKKworIyBwMTEta2l0IHJlbGllcyBvbiB0aGVzZSB0d28gYmVpbmcgY29waWVkIGZyb20gc291cmNlIHRyZWUKKyMgaW5zdGVhZCBvZiBiZWluZyByZWdlbmVyYXRlZCBieSBndGtkb2Mtc2NhbiwgYnV0IGRvZXNuJ3Qgc2V0dXAKKyMgZGVwZW5kZW5jaWVzIGNvcnJlY3RseSB3aGVuIHRoZXJlIGlzIGEgcGFyYWxsZWwgYnVpbGQuIExldCdzIHByZS1jb3B5CisjIHRoZW0gaW5zdGVhZC4KK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisgICAgICAgIGNwICR7U30vZG9jL21hbnVhbC9wMTEta2l0LW92ZXJyaWRlcy50eHQgJHtTfS9kb2MvbWFudWFsL3AxMS1raXQtc2VjdGlvbnMudHh0ICR7Qn0vZG9jL21hbnVhbC8KK30KKwogRklMRVNfJHtQTn0gKz0gIiBcCiAgICAgJHtsaWJkaXJ9L3AxMS1raXQtcHJveHkuc28gXAogICAgICR7bGliZGlyfS9wa2NzMTEvKi5zbyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnlfMC45LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnlfMC45LjIuYmIKaW5kZXggZDZiNzEzMC4uZDMxNWE5OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpAQCAtMTIsNyArMTIsOCBAQAogCiBERVBFTkRTID0gImdldHRleHQtbmF0aXZlIgogCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dudXBnLm9yZy9kb3dubG9hZC9pbmRleC5odG1sIgorU1JDX1VSSSA9ICIke0dOVVBHX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiZjUxZDQ1NGY5MjExMTFiNTE1NmEyMjkxY2JmNzAyNzgiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmQ4YmMxNTkyY2ViMjJiYjQ5MmIwN2NiMjliMWIxNDBiYjg4MmM4NTllNjUwM2I5NzQyNTRjMGE0YjQxMzRkMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCmluZGV4IDkxYmNhOTYuLjdkNzRhYWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wb3B0X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtNCw3ICs0LDcgQEAKIAogfCBjb25maWd1cmUuYWM6NDk6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA1LzAyCiAKIEluZGV4OiBwb3B0LTEuMTYvY29uZmlndXJlLmFjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0XzEuMTYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0XzEuMTYuYmIKaW5kZXggY2IxM2E4MS4uNDc4Mjg4ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpAQCAtNiw2ICs2LDggQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiMDYxM2MzMGFmMmE4MjQ5YjhkY2M2N2QzZWRiMDZkIgogUFIgPSAicjMiCiAKK0RFUEVORFMgPSAidmlydHVhbC9saWJpY29udiIKKwogU1JDX1VSSSA9ICJodHRwOi8vcnBtNS5vcmcvZmlsZXMvcG9wdC9wb3B0LSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzIuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzIuMC5iYgppbmRleCA3MDgxYWZiLi45ZDQ1NTEzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8yLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMi4wLmJiCkBAIC03LDggKzcsOCBAQAogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgogCi1TUkNSRVYgPSAiOGJmZGY5NDZlNzg0ZjRkNTc1N2JlYmVlMWZiYzRiNGEzZDdhOTVjNCIKLVBWID0gIjIuMCtnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICJlMmFhNDI1Njc0NTM3N2I3ODRjODY5MWY1NDYwNDFiNTlmNmUwNDZiIgorUFYgPSAiMi4wLjErZ2l0JHtTUkNQVn0iCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcHRlc3QtcnVubmVyMiIKIFMgPSAiJHtXT1JLRElSfS9naXQiCkBAIC0yMiw1ICsyMiw1IEBACiB9CiAKIGRvX2luc3RhbGwgKCkgewotCWluc3RhbGwgLUQgLW0gMDc1NSAke1dPUktESVJ9L2dpdC9wdGVzdC1ydW5uZXIgJHtEfSR7YmluZGlyfS9wdGVzdC1ydW5uZXIKKwlpbnN0YWxsIC1EIC1tIDA3NTUgJHtTfS9wdGVzdC1ydW5uZXIgJHtEfSR7YmluZGlyfS9wdGVzdC1ydW5uZXIKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiCmluZGV4IGI1MDU5ZDUuLmM0OThkOTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZl8xLjMuOC5iYgpAQCAtMSwxMSArMSwxMyBAQAogU1VNTUFSWSA9ICJIaWdoLVBlcmZvcm1hbmNlIEFzeW5jaHJvbm91cyBIVFRQIENsaWVudCBMaWJyYXJ5IgotU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vcy8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjA3MjhUMDQzNDQzWi9wb29sL21haW4vcy8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL25vcnBhdGgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZW52LnBhdGNoIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNzEzYmVhZjA1ZDdmMzMyOWRlMTIxZTIxOGUyZmNiOTMiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzcxMzRjZDUwMTA2NjRjYTAyMzU4NWJjZTUwOTc4YmQ0MDA1OTA2ZWQyODBmZjg4OWY1OTFmODZkZjdjNTllNCIKIAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9zL3NlcmYvIgorCiBMSUNFTlNFID0gIkFwYWNoZS0yLjAiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04NmQzZjNhOTVjMzI0Yzk0NzliZDg5ODY5NjhmNDMyNyIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NvdXJjZS1oaWdobGlnaHQvZmlsZXMvMDAwMS1zb3VyY2UtaGlnaGxpZ2h0LnBjLmluLWRvLW5vdC1hZGQtQm9vc3Qtcy1saWJyYXJpZXMtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NvdXJjZS1oaWdobGlnaHQvZmlsZXMvMDAwMS1zb3VyY2UtaGlnaGxpZ2h0LnBjLmluLWRvLW5vdC1hZGQtQm9vc3Qtcy1saWJyYXJpZXMtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYWE1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc291cmNlLWhpZ2hsaWdodC9maWxlcy8wMDAxLXNvdXJjZS1oaWdobGlnaHQucGMuaW4tZG8tbm90LWFkZC1Cb29zdC1zLWxpYnJhcmllcy0ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA5YWEwMWZkNWY5ZDhiMmI5OGMzNDY4NGRjOGY2ODExNTc1MGVmNDFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDEyIEp1bCAyMDE2IDE3OjE1OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHNvdXJjZS1oaWdobGlnaHQucGMuaW46IGRvIG5vdCBhZGQgQm9vc3QncyBsaWJyYXJpZXMgYW5kCisgaW5jbHVkZXMKKworVGhpcyBicmVha3Mgd2hlbiBjb21waWxpbmcgaW4gc3lzcm9vdHM7IGEgcHJvcGVyIHdheSBpcyB0byB1c2UgRGVwZW5kcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgc291cmNlLWhpZ2hsaWdodC5wYy5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zb3VyY2UtaGlnaGxpZ2h0LnBjLmluIGIvc291cmNlLWhpZ2hsaWdodC5wYy5pbgoraW5kZXggNzlhYjYzZS4uNjQxMTRhNyAxMDA2NDQKKy0tLSBhL3NvdXJjZS1oaWdobGlnaHQucGMuaW4KKysrKyBiL3NvdXJjZS1oaWdobGlnaHQucGMuaW4KK0BAIC03LDYgKzcsNiBAQCBOYW1lOiBsaWJzb3VyY2UtaGlnaGxpZ2h0CisgRGVzY3JpcHRpb246IEdOVSBTb3VyY2UtaGlnaGxpZ2h0IGxpYnJhcnkuCisgVVJMOiBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc3JjLWhpZ2hsaXRlLworIFZlcnNpb246IEBWRVJTSU9OQAorLUxpYnM6IC1MJHtsaWJkaXJ9IC1sc291cmNlLWhpZ2hsaWdodCBAQk9PU1RfTERGTEFHU0AgQEJPT1NUX1JFR0VYX0xJQkAKKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQk9PU1RfQ1BQRkxBR1NACisrTGliczogLUwke2xpYmRpcn0gLWxzb3VyY2UtaGlnaGxpZ2h0CisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKyAKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NvdXJjZS1oaWdobGlnaHQvc291cmNlLWhpZ2hsaWdodF8zLjEuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zb3VyY2UtaGlnaGxpZ2h0L3NvdXJjZS1oaWdobGlnaHRfMy4xLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5MjNlNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zb3VyY2UtaGlnaGxpZ2h0L3NvdXJjZS1oaWdobGlnaHRfMy4xLjguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJTeW50YXggaGlnaGxpZ2h0IHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJTb3VyY2UtaGlnaGxpZ2h0IGNvbnZlcnRzIHNvdXJjZSBjb2RlIHRvIGZvcm1hdHRlZCB0ZXh0IHdpdGggc3ludGF4IGhpZ2hsaWdodGluZy4iCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NyYy1oaWdobGl0ZS8iCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmY5NWJmZTAxOWZlYWY5MmY1MjRiNzNkZDc5ZTc2ZWIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zcmMtaGlnaGxpdGUvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNvdXJjZS1oaWdobGlnaHQucGMuaW4tZG8tbm90LWFkZC1Cb29zdC1zLWxpYnJhcmllcy0ucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiMzI0MzQ3MDcwNmVmNWZlZmRjM2U0M2I1MzA2YTRlNDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDEzMzZhN2VhMWQxY2NjMzc0MjAxZjdiODFmZmE5NGQwYWVjYjMzYWZjN2Q2OTAzZWJmOWZiZjMzYTU1YWRhMyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworREVQRU5EU19hcHBlbmQgPSAiIGJvb3N0IgorCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIHNvdXJjZS1oaWdobGlnaHQtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWJvb3N0PXllcyAtLXdpdGgtYm9vc3QtbGliZGlyPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bGliZGlyfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKyMgc291cmNlLWhpZ2hsaWdodCBpcyB1c2luZyBpdHMgb3duIGJpbmFyeSBmcm9tIHRoZSBidWlsZCB0cmVlIHRvIG1ha2UgZG9jdW1lbnRhdGlvbgorIyBsZXQncyBzdWJzdGl0dXRlIHRoZSBuYXRpdmUgYmluYXJ5IGluc3RlYWQKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisgICAgICAgIHNlZCAtaSAtZSAncyxeU1JDSElMSVRFRVhFID0gJCh0b3BfYnVpbGRkaXIpLiosU1JDSElMSVRFRVhFID0gc291cmNlLWhpZ2hsaWdodCwnICR7U30vZG9jL01ha2VmaWxlLmFtCit9CisKK1JERVBFTkRTX3NvdXJjZS1oaWdobGlnaHQgKz0gImJhc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzLzAwMDEtcmV2ZXJ0LWFkNjAxYzc5NjItdGhhdC1icmluZ3MtMi1pbmNyZWFzZS1vZi1idWlsZC10aS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS1yZXZlcnQtYWQ2MDFjNzk2Mi10aGF0LWJyaW5ncy0yLWluY3JlYXNlLW9mLWJ1aWxkLXRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTQwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzLzAwMDEtcmV2ZXJ0LWFkNjAxYzc5NjItdGhhdC1icmluZ3MtMi1pbmNyZWFzZS1vZi1idWlsZC10aS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDRiMjg2YjQ0MWU4ZWZhOWEzNGViMGRiODIyNzc0OGViZmZkOTFjMzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaWFueHVuIFpoYW5nIDxqaWFueHVuLnpoYW5nQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMTMgT2N0IDIwMTYgMDk6MjQ6MjEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmV2ZXJ0IGFkNjAxYzc5NjIgdGhhdCBicmluZ3MgMiUgaW5jcmVhc2Ugb2YgYnVpbGQgdGltZS4KKworVGhlIGNvbW1lbnQgb2YgdGhlIGNoYW5nZSBpbiBzcWxpdGUgZm9zc2lsIHByb2plY3QgaXM6CisiRm9yIGluLW1lbW9yeSBkYXRhYmFzZXMsIGl0IGRvZXMgbm90IG1hdHRlciBpZiBwY2FjaGUKK2VudHJpZXMgYXJlIG1hcmtlZCAiY2xlYW4iIG9yICJ3cml0YWJsZSIuIgorCitVcHN0cmVhbSBTdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogSmlhbnh1biBaaGFuZyA8amlhbnh1bi56aGFuZ0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBzcWxpdGUzLmMgfCAxMiArKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3FsaXRlMy5jIGIvc3FsaXRlMy5jCitpbmRleCBjY2RkZmU2Li5lY2FlNTUwIDEwMDY0NAorLS0tIGEvc3FsaXRlMy5jCisrKysgYi9zcWxpdGUzLmMKK0BAIC0xMzE0Niw3ICsxMzE0Niw3IEBAIHN0cnVjdCBQZ0hkciB7CisgICBzcWxpdGUzX3BjYWNoZV9wYWdlICpwUGFnZTsgICAgLyogUGNhY2hlIG9iamVjdCBwYWdlIGhhbmRsZSAqLworICAgdm9pZCAqcERhdGE7ICAgICAgICAgICAgICAgICAgIC8qIFBhZ2UgZGF0YSAqLworICAgdm9pZCAqcEV4dHJhOyAgICAgICAgICAgICAgICAgIC8qIEV4dHJhIGNvbnRlbnQgKi8KKy0gIFBnSGRyICpwRGlydHk7ICAgICAgICAgICAgICAgICAvKiBUcmFuc2llbnQgbGlzdCBvZiBkaXJ0eSBzb3J0ZWQgYnkgcGdubyAqLworKyAgUGdIZHIgKnBEaXJ0eTsgICAgICAgICAgICAgICAgIC8qIFRyYW5zaWVudCBsaXN0IG9mIGRpcnR5IHBhZ2VzICovCisgICBQYWdlciAqcFBhZ2VyOyAgICAgICAgICAgICAgICAgLyogVGhlIHBhZ2VyIHRoaXMgcGFnZSBpcyBwYXJ0IG9mICovCisgICBQZ25vIHBnbm87ICAgICAgICAgICAgICAgICAgICAgLyogUGFnZSBudW1iZXIgZm9yIHRoaXMgcGFnZSAqLworICNpZmRlZiBTUUxJVEVfQ0hFQ0tfUEFHRVMKK0BAIC00MzUwNCwxMyArNDM1MDQsNyBAQCBiaXR2ZWNfZW5kOgorIC8qICNpbmNsdWRlICJzcWxpdGVJbnQuaCIgKi8KKyAKKyAvKgorLSoqIEEgY29tcGxldGUgcGFnZSBjYWNoZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdHVyZS4gIEV2ZXJ5CistKiogZW50cnkgaW4gdGhlIGNhY2hlIGhvbGRzIGEgc2luZ2xlIHBhZ2Ugb2YgdGhlIGRhdGFiYXNlIGZpbGUuICBUaGUKKy0qKiBidHJlZSBsYXllciBvbmx5IG9wZXJhdGVzIG9uIHRoZSBjYWNoZWQgY29weSBvZiB0aGUgZGF0YWJhc2UgcGFnZXMuCistKioKKy0qKiBBIHBhZ2UgY2FjaGUgZW50cnkgaXMgImNsZWFuIiBpZiBpdCBleGFjdGx5IG1hdGNoZXMgd2hhdCBpcyBjdXJyZW50bHkKKy0qKiBvbiBkaXNrLiAgQSBwYWdlIGlzICJkaXJ0eSIgaWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlCistKiogcGVyc2lzdGVkIHRvIGRpc2suCisrKiogQSBjb21wbGV0ZSBwYWdlIGNhY2hlIGlzIGFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlLgorICoqCisgKiogcERpcnR5LCBwRGlydHlUYWlsLCBwU3luY2VkOgorICoqICAgQWxsIGRpcnR5IHBhZ2VzIGFyZSBsaW5rZWQgaW50byB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0IHVzaW5nCitAQCAtNDgzMTQsNyArNDgzMDgsNyBAQCBzdGF0aWMgaW50IHBhZ2VyX2VuZF90cmFuc2FjdGlvbihQYWdlciAqcFBhZ2VyLCBpbnQgaGFzTWFzdGVyLCBpbnQgYkNvbW1pdCl7CisgICBwUGFnZXItPnBJbkpvdXJuYWwgPSAwOworICAgcFBhZ2VyLT5uUmVjID0gMDsKKyAgIGlmKCByYz09U1FMSVRFX09LICl7CistICAgIGlmKCBwYWdlckZsdXNoT25Db21taXQocFBhZ2VyLCBiQ29tbWl0KSApeworKyAgICBpZiggTUVNREIgfHwgcGFnZXJGbHVzaE9uQ29tbWl0KHBQYWdlciwgYkNvbW1pdCkgKXsKKyAgICAgICBzcWxpdGUzUGNhY2hlQ2xlYW5BbGwocFBhZ2VyLT5wUENhY2hlKTsKKyAgICAgfWVsc2V7CisgICAgICAgc3FsaXRlM1BjYWNoZUNsZWFyV3JpdGFibGUocFBhZ2VyLT5wUENhY2hlKTsKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzL2ZpeC1kaXNhYmxlLXN0YXRpYy1zaGVsbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy9maXgtZGlzYWJsZS1zdGF0aWMtc2hlbGwucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMzlhZTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzL2ZpeC1kaXNhYmxlLXN0YXRpYy1zaGVsbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLUZyb20gZWRlNWRiODNlMzhjYzhhZDhjOWJlMjkxY2Q4OTg1ZjdhZDk5ZjI5MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDE2IEZlYiAyMDE2IDE0OjAwOjAwIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0hdIGZpeCAtLWRpc2FibGUtc3RhdGljLXNoZWxsCi0KLVVwc3RyZWFtIHNxbGl0ZSBzZWVtcyB0byBiZSBtb3ZpbmcgZnVydGhlciBhbmQgZnVydGhlciBhd2F5IGZyb20KLWFsbG93aW5nIHRoZSBzcWxpdGUzIGNvbW1hbmQgbGluZSB0b29sIHRvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCB3aXRoCi1zcWxpdGUuCi0KLVRoZSAtLWRpc2FibGUtc3RhdGljLXNoZWxsIGNvbmZpZ3VyZSBvcHRpb24gYWRkZWQgaW4gMy4xMC4wIG5vIGxvbmdlcgotaGFzIGFueSBlZmZlY3QgaW4gMy4xMS4wLiBGb3Igbm93IHBhdGNoIHRoaW5ncyB1cCBhbmQgbWFrZSBpdCB3b3JrLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KLS0tLQotIE1ha2VmaWxlLmFtICB8IDEzICsrKysrKysrKysrLS0KLSBjb25maWd1cmUuYWMgfCAgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLWluZGV4IDBlMDljZmMuLjYwOGMwZmQgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5hbQotKysrIGIvTWFrZWZpbGUuYW0KLUBAIC02LDkgKzYsMTggQEAgbGlic3FsaXRlM19sYV9TT1VSQ0VTID0gc3FsaXRlMy5jCi0gbGlic3FsaXRlM19sYV9MREZMQUdTID0gLW5vLXVuZGVmaW5lZCAtdmVyc2lvbi1pbmZvIDg6Njo4Ci0gCi0gYmluX1BST0dSQU1TID0gc3FsaXRlMwotLXNxbGl0ZTNfU09VUkNFUyA9IHNoZWxsLmMgc3FsaXRlMy5jIHNxbGl0ZTMuaAotLXNxbGl0ZTNfTERBREQgPSBAUkVBRExJTkVfTElCU0AKLStzcWxpdGUzX1NPVVJDRVMgPSBzaGVsbC5jIHNxbGl0ZTMuaAotK0VYVFJBX3NxbGl0ZTNfU09VUkNFUyA9IHNxbGl0ZTMuYwotK3NxbGl0ZTNfTERBREQgPSBARVhUUkFfU0hFTExfT0JKQCBAUkVBRExJTkVfTElCU0AKLSBzcWxpdGUzX0RFUEVOREVOQ0lFUyA9IEBFWFRSQV9TSEVMTF9PQkpACi0rCi0rIyBXYXJuaW5nOiBBZGRpbmcgU1FMSVRFX0VOQUJMRV9FWFBMQUlOX0NPTU1FTlRTIHRvIHNxbGl0ZTNfQ0ZMQUdTIGRvZXNuJ3QKLSsjIGFjdHVhbGx5IGhhdmUgYW55IGVmZmVjdCBpZiB3ZSBsaW5rIHRoZSBzcWxpdGUzIGNvbW1hbmQgbGluZSB0b29sIHdpdGggdGhlCi0rIyBsaWJzcWxpdGUzLnNvIHNoYXJlZCBsaWJyYXJ5ICh3aGljaCB3aWxsIGNvbnRhaW4gYSB2ZXJzaW9uIG9mIHNxbGl0ZTMuYwotKyMgY29tcGlsZWQgd2l0aCB0aGUgZGVmYXVsdCBBTV9DRkxBR1MgYWJvdmUpLiBJZiBTUUxJVEVfRU5BQkxFX0VYUExBSU5fQ09NTUVOVFMKLSsjIGRlYnVnIGlzIHJlcXVpcmVkLCB0aGVuIHNxbGl0ZTMgbXVzdCBub3QgYmUgY29uZmlndXJlZCB3aXRoCi0rIyAtLWRpc2FibGUtc3RhdGljLXNoZWxsCi0rCi0gc3FsaXRlM19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLURTUUxJVEVfRU5BQkxFX0VYUExBSU5fQ09NTUVOVFMKLSAKLSBpbmNsdWRlX0hFQURFUlMgPSBzcWxpdGUzLmggc3FsaXRlM2V4dC5oCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA4ZTdmZDY5Li5hZGE1NTllIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xMzAsNyArMTMwLDcgQEAgQUNfQVJHX0VOQUJMRShzdGF0aWMtc2hlbGwsIFtBU19IRUxQX1NUUklORygKLSAgIFtzdGF0aWNhbGx5IGxpbmsgbGlic3FsaXRlMyBpbnRvIHNoZWxsIHRvb2wgW2RlZmF1bHQ9eWVzXV0pXSwgCi0gICBbXSwgW2VuYWJsZV9zdGF0aWNfc2hlbGw9eWVzXSkKLSBpZiB0ZXN0IHgiJGVuYWJsZV9zdGF0aWNfc2hlbGwiID09ICJ4eWVzIjsgdGhlbgotLSAgRVhUUkFfU0hFTExfT0JKPXNxbGl0ZTMuJE9CSkVYVAotKyAgRVhUUkFfU0hFTExfT0JKPXNxbGl0ZTMtc3FsaXRlMy4kT0JKRVhUCi0gZWxzZQotICAgRVhUUkFfU0hFTExfT0JKPWxpYnNxbGl0ZTMubGEKLSBmaQotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy4xMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuMTEuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkyZDIwYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy4xMS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotcmVxdWlyZSBzcWxpdGUzLmluYwotCi1MSUNFTlNFID0gIlBEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3FsaXRlMy5oO2VuZGxpbmU9MTE7bWQ1PTY1ZjBhNTdjYTY5Mjg3MTBiNDE4YzA5NGIzNTcwYmIwIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cuc3FsaXRlLm9yZy8yMDE2L3NxbGl0ZS1hdXRvY29uZi0ke1NRTElURV9QVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1kaXNhYmxlLXN0YXRpYy1zaGVsbC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhNmNkYzNlMGE2ZTUwODdkNjIwMDM3YWUwYzQ4NzIwZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1MDhkNGRjYmNmN2E3MTgxZTk1YzcxN2ExZGM0YWUzYzA4ODBiM2Q1OTNiZTBjNGI0MGFiYjZjM2EwZTIwMWZiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuMTQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjE0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4ZmE0MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjE0LjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBzcWxpdGUzLmluYworCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3FsaXRlMy5oO2VuZGxpbmU9MTE7bWQ1PTY1ZjBhNTdjYTY5Mjg3MTBiNDE4YzA5NGIzNTcwYmIwIgorCitTUkNfVVJJID0gIlwKKyAgaHR0cDovL3d3dy5zcWxpdGUub3JnLzIwMTYvc3FsaXRlLWF1dG9jb25mLSR7U1FMSVRFX1BWfS50YXIuZ3ogXAorICBmaWxlOi8vMDAwMS1yZXZlcnQtYWQ2MDFjNzk2Mi10aGF0LWJyaW5ncy0yLWluY3JlYXNlLW9mLWJ1aWxkLXRpLnBhdGNoIFwKKyAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzYzNGE5MGEzZjQ5NTQxNDYyYmNhZWQzNDc0YjI2ODQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmM3MTgyNDc2OTAwMDE3YmVjYjgxNTY1ZWNlYTc3NzVkNDZhYjc0N2E5NzI4MWFhNjEwZjRmNDU4ODFjNDdhNiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIKaW5kZXggMTNiYTY3Ny4uODE4MTdkMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIKQEAgLTIxLDcgKzIxLDYgQEAKIEZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kL3N5c3RlbS14dXNlci5jb25mIgogCiBVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgotR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gc2h1dGRvd24iCiBVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tY3JlYXRlLWhvbWUgXAogICAgICAgICAgICAgICAgICAgICAgICAtLWdyb3VwcyB2aWRlbyx0dHksYXVkaW8saW5wdXQsc2h1dGRvd24sZGlzayBcCiAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCB4dXNlciIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9jdmUtMjAxMi0yNzM4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL2N2ZS0yMDEyLTI3MzgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliOTk4MDMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL2N2ZS0yMDEyLTI3MzgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxMi0yNzM4Ci1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1Gcm9tIGU1MjRiMGIzYmQ4ZmFkODQ0ZmZhNzM5MjdjMTk5NTQ1Yjg5MmNkYmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaHJpc3RpYW4gUGVyc2NoIDxjaHBlQGdub21lLm9yZz4KLURhdGU6IFNhdCwgMTkgTWF5IDIwMTIgMTk6MzY6MDkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAxLzJdIGVtdWxhdGlvbjogTGltaXQgaW50ZWdlciBhcmd1bWVudHMgdG8gNjU1MzUKLQotVG8gZ3VhcmQgYWdhaW5zdCBtYWxpY2lvdXMgc2VxdWVuY2VzIGNvbnRhaW5pbmcgZXhjZXNzaXZlbHkgYmlnIG51bWJlcnMsCi1saW1pdCBhbGwgcGFyc2VkIG51bWJlcnMgdG8gMTYgYml0IHJhbmdlLiBEb2luZyB0aGlzIGhlcmUgaW4gdGhlIHBhcnNpbmcKLXJvdXRpbmUgaXMgYSBjYXRjaC1hbGwgZ3VhcmQ7IHRoaXMgZG9lc24ndCBwcmVjbHVkZSBlbmZvcmNpbmcKLW1vcmUgc3RyaW5nZW50IGxpbWl0cyBpbiB0aGUgaGFuZGxlcnMgdGhlbXNlbHZlcy4KLQotaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjA5MAotLS0tCi0gc3JjL3RhYmxlLmMgIHwgMiArLQotIHNyYy92dGVzZXEuYyB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy90YWJsZS5jIGIvc3JjL3RhYmxlLmMKLWluZGV4IDE0MGU4YzguLjg1Y2Y2MzEgMTAwNjQ0Ci0tLS0gYS9zcmMvdGFibGUuYwotKysrIGIvc3JjL3RhYmxlLmMKLUBAIC01NTAsNyArNTUwLDcgQEAgX3Z0ZV90YWJsZV9leHRyYWN0X251bWJlcnMoR1ZhbHVlQXJyYXkgKiphcnJheSwKLSAJCWlmIChHX1VOTElLRUxZICgqYXJyYXkgPT0gTlVMTCkpIHsKLSAJCQkqYXJyYXkgPSBnX3ZhbHVlX2FycmF5X25ldygxKTsKLSAJCX0KLS0JCWdfdmFsdWVfc2V0X2xvbmcoJnZhbHVlLCB0b3RhbCk7Ci0rCQlnX3ZhbHVlX3NldF9sb25nKCZ2YWx1ZSwgQ0xBTVAgKHRvdGFsLCAwLCBHX01BWFVTSE9SVCkpOwotIAkJZ192YWx1ZV9hcnJheV9hcHBlbmQoKmFycmF5LCAmdmFsdWUpOwotIAl9IHdoaWxlIChpKysgPCBhcmdpbmZvLT5sZW5ndGgpOwotIAlnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZSk7Ci1kaWZmIC0tZ2l0IGEvc3JjL3Z0ZXNlcS5jIGIvc3JjL3Z0ZXNlcS5jCi1pbmRleCA3ZWY0YzhjLi4xMDk5MWRiIDEwMDY0NAotLS0tIGEvc3JjL3Z0ZXNlcS5jCi0rKysgYi9zcmMvdnRlc2VxLmMKLUBAIC01NTcsNyArNTU3LDcgQEAgdnRlX3NlcXVlbmNlX2hhbmRsZXJfbXVsdGlwbGUoVnRlVGVybWluYWwgKnRlcm1pbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZUFycmF5ICpwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnRlVGVybWluYWxTZXF1ZW5jZUhhbmRsZXIgaGFuZGxlcikKLSB7Ci0tICAgICAgICB2dGVfc2VxdWVuY2VfaGFuZGxlcl9tdWx0aXBsZV9saW1pdGVkKHRlcm1pbmFsLCBwYXJhbXMsIGhhbmRsZXIsIEdfTUFYTE9ORyk7Ci0rICAgICAgICB2dGVfc2VxdWVuY2VfaGFuZGxlcl9tdWx0aXBsZV9saW1pdGVkKHRlcm1pbmFsLCBwYXJhbXMsIGhhbmRsZXIsIEdfTUFYVVNIT1JUKTsKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLS0tIAotMi40LjkgKEFwcGxlIEdpdC02MCkKLQotCi1Gcm9tIGNmMWFkNDUzYThkZWY4NzNjNDljZjZkODgxNjI1OTM0MDJmMzJiYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaHJpc3RpYW4gUGVyc2NoIDxjaHBlQGdub21lLm9yZz4KLURhdGU6IFNhdCwgMTkgTWF5IDIwMTIgMjA6MDQ6MTIgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzJdIGVtdWxhdGlvbjogTGltaXQgcmVwZXRpdGlvbnMKLQotRG9uJ3QgYWxsb3cgbWFsaWNpb3VzIHNlcXVlbmNlcyB0byBjYXVzZSBleGNlc3NpdmUgcmVwZXRpdGlvbnMuCi0KLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzYwOTAKLS0tLQotIHNyYy92dGVzZXEuYyB8IDI1ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy92dGVzZXEuYyBiL3NyYy92dGVzZXEuYwotaW5kZXggMTA5OTFkYi4uMjA5NTIyZiAxMDA2NDQKLS0tLSBhL3NyYy92dGVzZXEuYwotKysrIGIvc3JjL3Z0ZXNlcS5jCi1AQCAtMTM5Miw3ICsxMzkyLDcgQEAgdnRlX3NlcXVlbmNlX2hhbmRsZXJfZGMgKFZ0ZVRlcm1pbmFsICp0ZXJtaW5hbCwgR1ZhbHVlQXJyYXkgKnBhcmFtcykKLSBzdGF0aWMgdm9pZAotIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX0RDIChWdGVUZXJtaW5hbCAqdGVybWluYWwsIEdWYWx1ZUFycmF5ICpwYXJhbXMpCi0gewotLQl2dGVfc2VxdWVuY2VfaGFuZGxlcl9tdWx0aXBsZSh0ZXJtaW5hbCwgcGFyYW1zLCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9kYyk7Ci0rCXZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX211bHRpcGxlX3IodGVybWluYWwsIHBhcmFtcywgdnRlX3NlcXVlbmNlX2hhbmRsZXJfZGMpOwotIH0KLSAKLSAvKiBEZWxldGUgYSBsaW5lIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gKi8KLUBAIC0xNzg1LDcgKzE3ODUsNyBAQCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9yZXZlcnNlX2luZGV4IChWdGVUZXJtaW5hbCAqdGVybWluYWwsIEdWYWx1ZUFycmF5ICpwYXJhbXMpCi0gc3RhdGljIHZvaWQKLSB2dGVfc2VxdWVuY2VfaGFuZGxlcl9SSSAoVnRlVGVybWluYWwgKnRlcm1pbmFsLCBHVmFsdWVBcnJheSAqcGFyYW1zKQotIHsKLS0JdnRlX3NlcXVlbmNlX2hhbmRsZXJfbXVsdGlwbGUodGVybWluYWwsIHBhcmFtcywgdnRlX3NlcXVlbmNlX2hhbmRsZXJfbmQpOwotKwl2dGVfc2VxdWVuY2VfaGFuZGxlcl9tdWx0aXBsZV9yKHRlcm1pbmFsLCBwYXJhbXMsIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX25kKTsKLSB9Ci0gCi0gLyogU2F2ZSBjdXJzb3IgKHBvc2l0aW9uKS4gKi8KLUBAIC0yNzc3LDggKzI3NzcsNyBAQCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9pbnNlcnRfbGluZXMgKFZ0ZVRlcm1pbmFsICp0ZXJtaW5hbCwgR1ZhbHVlQXJyYXkgKnBhcmFtcykKLSB7Ci0gCUdWYWx1ZSAqdmFsdWU7Ci0gCVZ0ZVNjcmVlbiAqc2NyZWVuOwotLQlsb25nIHBhcmFtLCBlbmQsIHJvdzsKLS0JaW50IGk7Ci0rCWxvbmcgcGFyYW0sIGVuZCwgcm93LCBpLCBsaW1pdDsKLSAJc2NyZWVuID0gdGVybWluYWwtPnB2dC0+c2NyZWVuOwotIAkvKiBUaGUgZGVmYXVsdCBpcyBvbmUuICovCi0gCXBhcmFtID0gMTsKLUBAIC0yNzk2LDcgKzI3OTUsMTMgQEAgdnRlX3NlcXVlbmNlX2hhbmRsZXJfaW5zZXJ0X2xpbmVzIChWdGVUZXJtaW5hbCAqdGVybWluYWwsIEdWYWx1ZUFycmF5ICpwYXJhbXMpCi0gCX0gZWxzZSB7Ci0gCQllbmQgPSBzY3JlZW4tPmluc2VydF9kZWx0YSArIHRlcm1pbmFsLT5yb3dfY291bnQgLSAxOwotIAl9Ci0tCS8qIEluc2VydCB0aGUgbmV3IGxpbmVzIGF0IHRoZSBjdXJzb3IuICovCi0rCi0rCS8qIE9ubHkgYWxsb3cgdG8gaW5zZXJ0IGFzIG1hbnkgbGluZXMgYXMgdGhlcmUgYXJlIGJldHdlZW4gdGhpcyByb3cKLSsgICAgICAgICAqIGFuZCB0aGUgZW5kIG9mIHRoZSBzY3JvbGxpbmcgcmVnaW9uLiBTZWUgYnVnICM2NzYwOTAuCi0rICAgICAgICAgKi8KLSsgICAgICAgIGxpbWl0ID0gZW5kIC0gcm93ICsgMTsKLSsgICAgICAgIHBhcmFtID0gTUlOIChwYXJhbSwgbGltaXQpOwotKwotIAlmb3IgKGkgPSAwOyBpIDwgcGFyYW07IGkrKykgewotIAkJLyogQ2xlYXIgYSBsaW5lIG9mZiB0aGUgZW5kIG9mIHRoZSByZWdpb24gYW5kIGFkZCBvbmUgdG8gdGhlCi0gCQkgKiB0b3Agb2YgdGhlIHJlZ2lvbi4gKi8KLUBAIC0yODE3LDggKzI4MjIsNyBAQCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9kZWxldGVfbGluZXMgKFZ0ZVRlcm1pbmFsICp0ZXJtaW5hbCwgR1ZhbHVlQXJyYXkgKnBhcmFtcykKLSB7Ci0gCUdWYWx1ZSAqdmFsdWU7Ci0gCVZ0ZVNjcmVlbiAqc2NyZWVuOwotLQlsb25nIHBhcmFtLCBlbmQsIHJvdzsKLS0JaW50IGk7Ci0rCWxvbmcgcGFyYW0sIGVuZCwgcm93LCBpLCBsaW1pdDsKLSAKLSAJc2NyZWVuID0gdGVybWluYWwtPnB2dC0+c2NyZWVuOwotIAkvKiBUaGUgZGVmYXVsdCBpcyBvbmUuICovCi1AQCAtMjgzNyw2ICsyODQxLDEzIEBAIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX2RlbGV0ZV9saW5lcyAoVnRlVGVybWluYWwgKnRlcm1pbmFsLCBHVmFsdWVBcnJheSAqcGFyYW1zKQotIAl9IGVsc2UgewotIAkJZW5kID0gc2NyZWVuLT5pbnNlcnRfZGVsdGEgKyB0ZXJtaW5hbC0+cm93X2NvdW50IC0gMTsKLSAJfQotKwotKyAgICAgICAgLyogT25seSBhbGxvdyB0byBkZWxldGUgYXMgbWFueSBsaW5lcyBhcyB0aGVyZSBhcmUgYmV0d2VlbiB0aGlzIHJvdwotKyAgICAgICAgICogYW5kIHRoZSBlbmQgb2YgdGhlIHNjcm9sbGluZyByZWdpb24uIFNlZSBidWcgIzY3NjA5MC4KLSsgICAgICAgICAqLwotKyAgICAgICAgbGltaXQgPSBlbmQgLSByb3cgKyAxOwotKyAgICAgICAgcGFyYW0gPSBNSU4gKHBhcmFtLCBsaW1pdCk7Ci0rCi0gCS8qIENsZWFyIHRoZW0gZnJvbSBiZWxvdyB0aGUgY3VycmVudCBjdXJzb3IuICovCi0gCWZvciAoaSA9IDA7IGkgPCBwYXJhbTsgaSsrKSB7Ci0gCQkvKiBJbnNlcnQgYSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIHJlZ2lvbiBhbmQgcmVtb3ZlIG9uZSBmcm9tCi0tLSAKLTIuNC45IChBcHBsZSBHaXQtNjApCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS0wLjI4LjIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzYzZDM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTU0NV0KLQotU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KLWRpZmYgLU51cmQgdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbiB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCi0tLS0gdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgkyMDEwLTA3LTE1IDIwOjA4OjQ0LjAwMDAwMDAwMCArMDMwMAotKysrIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4JMjAxMy0wMS0xMSAxNDo1MDozNC45NzEwMjc0NDAgKzAyMDAKLUBAIC04LDcgKzgsNiBAQAotIEFDX0lTQ19QT1NJWAotIEFDX1BST0dfQ0MKLSBBQ19TVERDX0hFQURFUlMKLS1BTV9QUk9HX0NDX1NUREMKLQotIGlmIHRlc3QgLXogIiRlbmFibGVfbWFpbnRhaW5lcl9tb2RlIjsgdGhlbgotICAgZW5hYmxlX21haW50YWluZXJfbW9kZT15ZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU2NWNjMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1TVU1NQVJZID0gIlZpcnR1YWwgdGVybWluYWwgZW11bGF0b3IgR1RLKyB3aWRnZXQgbGlicmFyeSIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD12dGUiCi1MSUNFTlNFID0gIkxHUEx2Mi4wIgotREVQRU5EUyA9ICIgZ2xpYi0yLjAgZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbmN1cnNlcyIKLVJERVBFTkRTX2xpYnZ0ZSA9ICJ2dGUtdGVybWNhcCIKLQotaW5oZXJpdCBnbm9tZSBndGstZG9jIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1weXRob24iCi0KLVBBQ0tBR0VTID0rICJsaWJ2dGUgdnRlLXRlcm1jYXAiCi1GSUxFU19saWJ2dGUgPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmV4ZWNkaXJ9L2dub21lLXB0eS1oZWxwZXIiCi1GSUxFU192dGUtdGVybWNhcCA9ICIke2RhdGFkaXJ9L3Z0ZS90ZXJtY2FwLTAuMCIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUvMDAwMS1BZGQtbTQtdmFwaWdlbi5tNC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLzAwMDEtQWRkLW00LXZhcGlnZW4ubTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1NjMwZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLzAwMDEtQWRkLW00LXZhcGlnZW4ubTQucGF0Y2gKQEAgLTAsMCArMSwxMTkgQEAKK0Zyb20gMDhjYTFjNDhiMjVjMzMyYjc1YmJhMmE2YjVkNzU3ZGEwMDZlOTU1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgT2N0IDIwMTYgMTY6Mjc6NTcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIG00L3ZhcGlnZW4ubTQKKworQnVpbGRpbmcgd2l0aG91dCB2YWxhIHdpbGwgZmFpbCBpZiB3ZSBkb24ndCBoYXZlIGEgdmFwaWdlbi5tNC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgbTQvdmFwaWdlbi5tNCB8IDk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDk2IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvdmFwaWdlbi5tNAorCitkaWZmIC0tZ2l0IGEvbTQvdmFwaWdlbi5tNCBiL200L3ZhcGlnZW4ubTQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMmRmMTJmCistLS0gL2Rldi9udWxsCisrKysgYi9tNC92YXBpZ2VuLm00CitAQCAtMCwwICsxLDk2IEBACisrZG5sIHZhcGlnZW4ubTQKKytkbmwKKytkbmwgQ29weXJpZ2h0IDIwMTIgRXZhbiBOZW1lcnNvbgorK2RubAorK2RubCBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrZG5sIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrZG5sIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorK2RubAorK2RubCBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytkbmwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKytkbmwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKytkbmwgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKytkbmwKKytkbmwgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrZG5sIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAgVVNBCisrCisrIyBWQVBJR0VOX0NIRUNLKFtWRVJTSU9OXSwgW0FQSV9WRVJTSU9OXSwgW0ZPVU5ELUlOVFJPU1BFQ1RJT05dLCBbREVGQVVMVF0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2sgdmFwaWdlbiBleGlzdGVuY2UgYW5kIHZlcnNpb24KKysjCisrIyBTZWUgaHR0cDovL2xpdmUuZ25vbWUub3JnL1ZhbGEvVXBzdHJlYW1HdWlkZSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbgorK0FDX0RFRlVOKFtWQVBJR0VOX0NIRUNLXSwKKytbCisrICBBQ19CRUZPUkUoW0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS10sWyQwXSkKKysgIEFDX0JFRk9SRShbR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkVdLFskMF0pCisrCisrICBBQ19BUkdfRU5BQkxFKFt2YWxhXSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12YWxhWz1APDpAbm8vYXV0by95ZXNAOj5AXV0sW2J1aWxkIFZhbGEgYmluZGluZ3MgQDw6QGRlZmF1bHQ9XWlmZWxzZSgkNCwsYXV0bywkNClbQDo+QF0pXSwsWworKyAgICAgIEFTX0lGKFt0ZXN0ICJ4JDQiID0gIngiXSwgWworKyAgICAgICAgICBlbmFibGVfdmFsYT1hdXRvCisrICAgICAgICBdLCBbCisrICAgICAgICAgIGVuYWJsZV92YWxhPSQ0CisrICAgICAgICBdKQorKyAgICBdKQorKworKyAgQVNfQ0FTRShbJGVuYWJsZV92YWxhXSwgW25vXSwgW2VuYWJsZV92YWxhPW5vXSwKKysgICAgICBbeWVzXSwgWworKyAgICAgICAgQVNfSUYoW3Rlc3QgIngkMyIgIT0gInh5ZXMiIC1hICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iICE9ICJ4eWVzIl0sIFsKKysgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1ZhbGEgYmluZGluZ3MgcmVxdWlyZSBHT2JqZWN0IEludHJvc3BlY3Rpb25dKQorKyAgICAgICAgICBdKQorKyAgICAgIF0sIFthdXRvXSwgWworKyAgICAgICAgQVNfSUYoW3Rlc3QgIngkMyIgIT0gInh5ZXMiIC1hICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iICE9ICJ4eWVzIl0sIFsKKysgICAgICAgICAgICBlbmFibGVfdmFsYT1ubworKyAgICAgICAgICBdKQorKyAgICAgIF0sIFsKKysgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gLS1lbmFibGUtdmFsYSwgc2hvdWxkIGJlIG9uZSBvZiBAPDpAbm8vYXV0by95ZXNAOj5AXSkKKysgICAgICBdKQorKworKyAgQVNfSUYoW3Rlc3QgIngkMiIgPSAieCJdLCBbCisrICAgICAgdmFwaWdlbl9wa2dfbmFtZT12YXBpZ2VuCisrICAgIF0sIFsKKysgICAgICB2YXBpZ2VuX3BrZ19uYW1lPXZhcGlnZW4tJDIKKysgICAgXSkKKysgIEFTX0lGKFt0ZXN0ICJ4JDEiID0gIngiXSwgWworKyAgICAgIHZhcGlnZW5fcGtnPSIkdmFwaWdlbl9wa2dfbmFtZSIKKysgICAgXSwgWworKyAgICAgIHZhcGlnZW5fcGtnPSIkdmFwaWdlbl9wa2dfbmFtZSA+PSAkMSIKKysgICAgXSkKKysKKysgIFBLR19QUk9HX1BLR19DT05GSUcKKysKKysgIFBLR19DSEVDS19FWElTVFMoWyR2YXBpZ2VuX3BrZ10sIFsKKysgICAgICBBU19JRihbdGVzdCAiJGVuYWJsZV92YWxhIiA9ICJhdXRvIl0sIFsKKysgICAgICAgICAgZW5hYmxlX3ZhbGE9eWVzCisrICAgICAgICBdKQorKyAgICBdLCBbCisrICAgICAgQVNfQ0FTRShbJGVuYWJsZV92YWxhXSwgW3llc10sIFsKKysgICAgICAgICAgQUNfTVNHX0VSUk9SKFskdmFwaWdlbl9wa2cgbm90IGZvdW5kXSkKKysgICAgICAgIF0sIFthdXRvXSwgWworKyAgICAgICAgICBlbmFibGVfdmFsYT1ubworKyAgICAgICAgXSkKKysgICAgXSkKKysKKysgIEFDX01TR19DSEVDS0lORyhbZm9yIHZhbGFdKQorKworKyAgQVNfQ0FTRShbJGVuYWJsZV92YWxhXSwKKysgICAgW3llc10sIFsKKysgICAgICBWQVBJR0VOPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXZhcGlnZW4gdmFwaWdlbmAKKysgICAgICBWQVBJR0VOX01BS0VGSUxFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgdmFwaWdlbmAvdmFsYS9NYWtlZmlsZS52YXBpZ2VuCisrICAgICAgQVNfSUYoW3Rlc3QgIngkMiIgPSAieCJdLCBbCisrICAgICAgICAgIFZBUElHRU5fVkFQSURJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT12YXBpZGlyIHZhcGlnZW5gCisrICAgICAgICBdLCBbCisrICAgICAgICAgIFZBUElHRU5fVkFQSURJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT12YXBpZGlyX3ZlcnNpb25lZCB2YXBpZ2VuYAorKyAgICAgICAgXSkKKysgICAgXSkKKysKKysgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfdmFsYV0pCisrCisrICBBQ19TVUJTVChbVkFQSUdFTl0pCisrICBBQ19TVUJTVChbVkFQSUdFTl9WQVBJRElSXSkKKysgIEFDX1NVQlNUKFtWQVBJR0VOX01BS0VGSUxFXSkKKysKKysgIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9WQVBJR0VOLCB0ZXN0ICJ4JGVuYWJsZV92YWxhIiA9ICJ4eWVzIikKKytdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS8wMDAxLURvbi10LWVuYWJsZS1zdGFjay1wcm90ZWN0aW9uLWJ5LWRlZmF1bHQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS8wMDAxLURvbi10LWVuYWJsZS1zdGFjay1wcm90ZWN0aW9uLWJ5LWRlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmYzU1OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLzAwMDEtRG9uLXQtZW5hYmxlLXN0YWNrLXByb3RlY3Rpb24tYnktZGVmYXVsdC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGIwYTU3OWQ4M2UzNTU1NDViNjQ3NDJjOTk3ZmU4YjFkNThiZjQyMDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAxMyBKdW4gMjAxNiAxMTowNTowMCArMDMwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCBlbmFibGUgc3RhY2stcHJvdGVjdGlvbiBieSBkZWZhdWx0CisKK1RoZXNlIGFyZSBzZXQgYnkgc2VjdXJpdHlfZmxhZ3MuaW5jLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwNjhkMDcyLi5kNTgwZjg0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMzgsOCArMTM4LDYgQEAgbTRfZGVmaW5lKFtjb21waWxlcl9mbGFnc19jb21tb25dLFsgZG5sCisgICAtZm5vLWNvbW1vbiBkbmwKKyAgIC1mZGlhZ25vc3RpY3Mtc2hvdy1vcHRpb24gZG5sCisgICAtZm5vLXN0cmljdC1hbGlhc2luZyBkbmwKKy0gIC1mc3RhY2stcHJvdGVjdG9yIGRubAorLSAgLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIGRubAorICAgLWZuby1zZW1hbnRpYy1pbnRlcnBvc2l0aW9uIGRubAorICAgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyBkbmwKKyBdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjI4LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjI4LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDg3Y2EuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcmVxdWlyZSB2dGUuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IgotCi1QUiA9ICJyNiIKLQotU1JDX1VSSSArPSAiZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vY3ZlLTIwMTItMjczOC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFIgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI0OTdmMjZlNDU3MzA4NjQ5ZTZlY2UzMmIzYmIxNDJmZiIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjg2Y2YwYjgxYWEwMjNmYTkzZWQ0MTU2NTNkNTFjOTY3NjdmMjBiMmQ3MzM0Yzg5M2NhYmE3MWU0MjY1NGIwYWUiCi0KLVJFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIm1hdGNoYm94LXRlcm1pbmFsIG5lZWRzIHRvIGJlIHBvcnRlZCBvdmVyIHRvIG5ldyB2dGUgZmlyc3QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjQ0LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjQ0LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiNjcxZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuNDQuMi5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIlZpcnR1YWwgdGVybWluYWwgZW11bGF0b3IgR1RLKyB3aWRnZXQgbGlicmFyeSIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD12dGUiCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ3RrKzMgaW50bHRvb2wtbmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgorCisjIHZhcGlnZW4ubTQgaXMgcmVxdWlyZWQgd2hlbiB2YWxhIGlzIG5vdCBwcmVzZW50IChidXQgdGhlIG9uZSBmcm9tIHZhbGEgc2hvdWxkIGJlIHVzZWQgbm9ybWFsbHkpCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1Eb24tdC1lbmFibGUtc3RhY2stcHJvdGVjdGlvbi1ieS1kZWZhdWx0LnBhdGNoIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3ZhbGEnLCAnJywgJ2ZpbGU6Ly8wMDAxLUFkZC1tNC12YXBpZ2VuLm00LnBhdGNoJywgZCkgfSBcCisgICAgICAgICAgICAiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlY2E4ZjhhOWQ5ZjliYjhlOWQ1OTJkMGFjZmVlYzAxNSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImExZWE1OTQ4MTRiYjEzNmEzYTlhNmM3NjU2YjQ2MjQwNTcxZjZhMTk4ODI1YzExMTEwMDdmZTk5MTk0YjA5NDkiCisKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEszRElTVFJPRkVBVFVSRVN9IgorCisjIEluc3RlYWQgb2YgImluaGVyaXQgdmFsYSIgd2UgZG8gdGhlIHJlbGV2YW50IHNldHRpbmdzIGhlcmUgc28gd2UgY2FuCisjIHNldCBERVBFTkRTIGJhc2VkIG9uIFBBQ0tBR0VDT05GSUcuCisKKyMgT3VyIHBhdGNoZWQgdmVyc2lvbiBvZiBWYWxhIGxvb2tzIGluIFNUQUdJTkdfREFUQURJUiBmb3IgLnZhcGkgZmlsZXMKK2V4cG9ydCBTVEFHSU5HX0RBVEFESVIKKyMgVXBzdHJlYW0gVmFsYSA+PSAwLjExIGxvb2tzIGluIFhER19EQVRBX0RJUlMgZm9yIC52YXBpIGZpbGVzCitleHBvcnQgWERHX0RBVEFfRElSUyA9ICIke1NUQUdJTkdfREFUQURJUn0iCisKKyMgUGFja2FnZSBhZGRpdGlvbmFsIGZpbGVzCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vdmFsYS92YXBpLyoiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3ZhbGFdID0gIi0tZW5hYmxlLXZhbGEsLS1kaXNhYmxlLXZhbGEsdmFsYS1uYXRpdmUgdmFsYSIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdGVzdC1hcHBsaWNhdGlvbiIKKworIyBsaWJ0b29sIGFkZHMgIi1ub3N0ZGxpYiIgd2hlbiBnKysgaXMgdXNlZC4gVGhpcyBicmVha3MgUElFIGJ1aWxkcy4KKyMgVXNlIGxpYnRvb2wtY3Jvc3MgKHdoaWNoIGhhcyBhIGhhY2sgdG8gcHJldmVudCB0aGF0KSBpbnN0ZWFkLgorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wiCisKK1BBQ0tBR0VTID0rICJsaWJ2dGUiCitGSUxFU19saWJ2dGUgPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC8qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCmluZGV4IGEzYzk3OWYuLjE5OGM5OGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWNvbW1vbgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1jb21tb24KQEAgLTExMyw3ICsxMTMsNiBAQAogcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQogcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CiByc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KLXJzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CiByc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CiByc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQogcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWxpbnV4IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbGludXgKaW5kZXggMGE3NTJhNC4uMjk1ODcxNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbGludXgKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbGludXgKQEAgLTYxLDMgKzYxLDYgQEAKIAogIyBhcGFjaGUKIGFjX2N2X29fbm9uYmxvY2tfaW5oZXJpdGVkPSR7YWNfY3Zfb19ub25ibG9ja19pbmhlcml0ZWQ9bm99CisKKyMgcnN5bmMKK3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbgppbmRleCAyM2I4ZThiLi5mNGNmMGI4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvaXg4Ni1jb21tb24KQEAgLTE1NCw3ICsxNTQsNiBAQAogcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQogcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CiByc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KLXJzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CiByc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CiByc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQogcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4CmluZGV4IDhiNjFlYjAuLjY4MDE3MWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjRlbC1saW51eApAQCAtMzUsNiArMzUsNyBAQAogYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKIGFjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CiBhY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9OAogCiAjIGxpYnBjYXAKIGFjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNpc2EzMnI2LWxpbnV4IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhMzJyNi1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmE1NGY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhMzJyNi1saW51eApAQCAtMCwwICsxLDc5IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2lzYTMycjZlbC1saW51eCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2lzYTMycjZlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZiMWJlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhMzJyNmVsLWxpbnV4CkBAIC0wLDAgKzEsNzkgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhNjRyNi1saW51eCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2lzYTY0cjYtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwZmJiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2lzYTY0cjYtbGludXgKQEAgLTAsMCArMSw4MyBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKK2FjX2N2X3NpemVvZl9zc2l6ZV90PTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkcy1kYnVzCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2lzYTY0cjZlbC1saW51eCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2lzYTY0cjZlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODAxNzFkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhNjRyNmVsLWxpbnV4CkBAIC0wLDAgKzEsODMgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CithY19jdl9zaXplb2Zfc3NpemVfdD04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkcy1kYnVzCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL25pb3MyLWxpbnV4IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9uaW9zMi1saW51eAppbmRleCA5NWMwOWQzLi4yZjRlNTcwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL25pb3MyLWxpbnV4CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbmlvczItbGludXgKQEAgLTE3MSw3ICsxNzEsNiBAQAogcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQogcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CiByc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KLXJzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CiByc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CiByc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQogcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvc2gtY29tbW9uIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9zaC1jb21tb24KaW5kZXggNWNiZjM2YS4uZmM0ZDZhZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9zaC1jb21tb24KKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9zaC1jb21tb24KQEAgLTIxNiw3ICsyMTYsNiBAQAogcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQogcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CiByc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KLXJzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CiByc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CiByc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQogcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2JpdGJha2Utd2hhdGNoYW5nZWQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXdoYXRjaGFuZ2VkCmluZGV4IGFmNTRkMTYuLjAyMDc3NzcgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2JpdGJha2Utd2hhdGNoYW5nZWQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZApAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKICMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KIApAQCAtMTcsNyArMTcsNiBAQAogIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBnZXRvcHQKQEAgLTI1LDcgKzI0LDcgQEAKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgc3VicHJvY2VzcwotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitpbXBvcnQgYXJncGFyc2UKIAogc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKIGxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCkBAIC0zOCw2ICszNyw4IEBACiBpZiBub3QgYml0YmFrZXBhdGg6CiAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQogICAgIHN5cy5leGl0KDEpCitzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCitpbXBvcnQgYXJncGFyc2Vfb2UKIAogaW1wb3J0IGJiLnNpZ2dlbgogaW1wb3J0IGJiLnByb2Nlc3MKQEAgLTExOCw3ICsxMTksNyBAQAogICAgIFByaW50IHRoZSBuZXdseSBhZGRlZCB0YXNrcwogICAgICIiIgogICAgIGFkZGVkID0ge30KLSAgICBmb3IgayBpbiBkX25ldy5rZXlzKCk6CisgICAgZm9yIGsgaW4gbGlzdChkX25ldy5rZXlzKCkpOgogICAgICAgICBpZiBrIG5vdCBpbiBkX29sZDoKICAgICAgICAgICAgICMgQWRkIHRoZSBuZXcgb25lIHRvIGFkZGVkIGRpY3QsIGFuZCByZW1vdmUgaXQgZnJvbQogICAgICAgICAgICAgIyBkX25ldywgc28gdGhlIHJlbWFpbmluZyBvbmVzIGFyZSB0aGUgY2hhbmdlZCBvbmVzCkBAIC0xNTMsNyArMTU0LDcgQEAKICAgICAiIiIKICAgICBwdmNoYW5nZWQgPSB7fQogICAgIGNvdW50ZXIgPSAwCi0gICAgZm9yIGsgaW4gZF9uZXcua2V5cygpOgorICAgIGZvciBrIGluIGxpc3QoZF9uZXcua2V5cygpKToKICAgICAgICAgaWYgZF9uZXcuZ2V0KGspLmdldCh2cikgIT0gZF9vbGQuZ2V0KGspLmdldCh2cik6CiAgICAgICAgICAgICBjb3VudGVyICs9IDEKICAgICAgICAgICAgIHBuLCB0YXNrID0gc3BsaXRfcG50YXNrKGspCkBAIC0yMTksOSArMjIwLDcgQEAKICAgICAzKSBVc2UgYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMgdG8gZGlmZiB0aGUgb2xkIGFuZCBuZXcgc3RhbXBzCiAgICAgIiIiCiAKLSAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoCi0gICAgICAgIHZlcnNpb24gPSAiMS4wIiwKLSAgICAgICAgdXNhZ2UgPSAiIiIlcHJvZyBbb3B0aW9uc10gW3BhY2thZ2UgLi4uXQorICAgIHBhcnNlciA9IGFyZ3BhcnNlX29lLkFyZ3VtZW50UGFyc2VyKHVzYWdlID0gIiIiJShwcm9nKXMgW29wdGlvbnNdIFtwYWNrYWdlIC4uLl0KIHByaW50IHdoYXQgd2lsbCBiZSBkb25lIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgYnVpbGRzLCBmb3IgZXhhbXBsZToKIAogICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KQEAgLTIzNiwxNyArMjM1LDkgQEAKICAgICBUaGUgIm5vc3RhbXAiIHRhc2sgaXMgbm90IGluY2x1ZGVkLgogIiIiCiApCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGhlbHAgPSAicHJpbnQgdGhlIHZlcmJvc2UgY2hhbmdlcyIsCi0gICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAidmVyYm9zZSIpCi0KLSAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCi0KLSAgICB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlCi0KLSAgICBpZiBsZW4oYXJncykgIT0gMjoKLSAgICAgICAgcGFyc2VyLmVycm9yKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpCi0gICAgZWxzZToKLSAgICAgICAgcmVjaXBlID0gYXJnc1sxXQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoInJlY2lwZSIsIGhlbHA9InJlY2lwZSB0byBjaGVjayIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJwcmludCB0aGUgdmVyYm9zZSBjaGFuZ2VzIiwgYWN0aW9uID0gInN0b3JlX3RydWUiKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKICAgICAjIEdldCB0aGUgU1RBTVBTX0RJUgogICAgIHByaW50KCJGaWd1cmluZyBvdXQgdGhlIFNUQU1QU19ESVIgLi4uIikKQEAgLTI1Niw3ICsyNDcsNyBAQAogICAgIGV4Y2VwdDoKICAgICAgICAgcmFpc2UKICAgICBpZiBub3Qgc3RhbXBzZGlyOgotICAgICAgICBwcmludCgiRVJST1I6IE5vIFNUQU1QU19ESVIgZm91bmQgZm9yICclcyciICUgcmVjaXBlLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHByaW50KCJFUlJPUjogTm8gU1RBTVBTX0RJUiBmb3VuZCBmb3IgJyVzJyIgJSBhcmdzLnJlY2lwZSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICByZXR1cm4gMgogICAgIHN0YW1wc2RpciA9IHN0YW1wc2Rpci5yc3RyaXAoIlxuIikKICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzdGFtcHNkaXIpOgpAQCAtMjcyLDcgKzI2Myw3IEBACiAgICAgdHJ5OgogICAgICAgICAjIEdlbmVyYXRlIHRoZSBuZXcgc3RhbXBzIGRpcgogICAgICAgICBwcmludCgiR2VuZXJhdGluZyB0aGUgbmV3IHN0YW1wcyAuLi4gKG5lZWQgc2V2ZXJhbCBtaW51dGVzKSIpCi0gICAgICAgIGNtZGxpbmUgPSAiU1RBTVBTX0RJUj0lcyBiaXRiYWtlIC1TIG5vbmUgJXMiICUgKG5ld19zdGFtcHNkaXIsIHJlY2lwZSkKKyAgICAgICAgY21kbGluZSA9ICJTVEFNUFNfRElSPSVzIGJpdGJha2UgLVMgbm9uZSAlcyIgJSAobmV3X3N0YW1wc2RpciwgYXJncy5yZWNpcGUpCiAgICAgICAgICMgRklYTUUKICAgICAgICAgIyBUaGUgImJpdGJha2UgLVMiIG1heSBmYWlsLCBub3QgZmF0YWwgZXJyb3IsIHRoZSBzdGFtcHMgd2lsbCBzdGlsbAogICAgICAgICAjIGJlIGdlbmVyYXRlZCwgdGhpcyBtaWdodCBiZSBhIGJ1ZyBvZiAiYml0YmFrZSAtUyIuCkBAIC0yODcsNyArMjc4LDcgQEAKIAogICAgICAgICAjIFJlbW92ZSB0aGUgc2FtZSBvbmUgZnJvbSBib3RoIHN0YW1wcy4KICAgICAgICAgY250X3VuY2hhbmdlZCA9IDAKLSAgICAgICAgZm9yIGsgaW4gbmV3X2RpY3Qua2V5cygpOgorICAgICAgICBmb3IgayBpbiBsaXN0KG5ld19kaWN0LmtleXMoKSk6CiAgICAgICAgICAgICBpZiBrIGluIG9sZF9kaWN0OgogICAgICAgICAgICAgICAgIGNudF91bmNoYW5nZWQgKz0gMQogICAgICAgICAgICAgICAgIGRlbChuZXdfZGljdFtrXSkKQEAgLTMxMCwxNyArMzAxLDE3IEBACiAgICAgICAgICMgUFYgKGluY2x1ZGluZyBQRSkgYW5kIFBSIGNoYW5nZWQKICAgICAgICAgIyBMZXQgdGhlIGJiLnNpZ2dlbiBoYW5kbGUgdGhlbSBpZiB2ZXJib3NlCiAgICAgICAgIGNudF9ydiA9IHt9Ci0gICAgICAgIGlmIG5vdCB2ZXJib3NlOgorICAgICAgICBpZiBub3QgYXJncy52ZXJib3NlOgogICAgICAgICAgICAgZm9yIGkgaW4gKCdwdicsICdwcicpOgogICAgICAgICAgICAgICAgY250X3J2W2ldID0gcHJpbnRfdnJjaGFuZ2VkKG5ld19yZWNvbiwgb2xkX3JlY29uLCBpKQogCiAgICAgICAgICMgRGVwZW5kZW5jaWVzIGNoYW5nZWQgKHVzZSBiaXRiYWtlLWRpZmZzaWdzKQotICAgICAgICBjbnRfZGVwID0gcHJpbnRfZGVwY2hhbmdlZChuZXdfcmVjb24sIG9sZF9yZWNvbiwgdmVyYm9zZSkKKyAgICAgICAgY250X2RlcCA9IHByaW50X2RlcGNoYW5nZWQobmV3X3JlY29uLCBvbGRfcmVjb24sIGFyZ3MudmVyYm9zZSkKIAogICAgICAgICB0b3RhbF9jaGFuZ2VkID0gY250X2FkZGVkICsgKGNudF9ydi5nZXQoJ3B2Jykgb3IgMCkgKyAoY250X3J2LmdldCgncHInKSBvciAwKSArIGNudF9kZXAKIAogICAgICAgICBwcmludCgiXG49PT0gU3VtbWFyeTogKCVzIGNoYW5nZWQsICVzIHVuY2hhbmdlZCkiICUgKHRvdGFsX2NoYW5nZWQsIGNudF91bmNoYW5nZWQpKQotICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICBpZiBhcmdzLnZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgiTmV3bHkgYWRkZWQ6ICVzXG5EZXBlbmRlbmNpZXMgY2hhbmdlZDogJXNcbiIgJSBcCiAgICAgICAgICAgICAgICAgKGNudF9hZGRlZCwgY250X2RlcCkpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2cwppbmRleCBmM2ViNzZiLi44YTAzNTgwIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1jb2xsZWN0LXNyY3JldnMKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgQ29sbGVjdHMgdGhlIHJlY29yZGVkIFNSQ1JFViB2YWx1ZXMgZnJvbSBidWlsZGhpc3RvcnkgYW5kIHJlcG9ydHMgb24gdGhlbQogIwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG9wdGlvbnMucmVwb3J0YWxsIG9yIHZhbHVlICE9IG9yaWc6CiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfc3JjcmV2c1tjdXJkaXJdLmFwcGVuZCgocG4sIG5hbWUsIHNyY3JldikpCiAKLSAgICBmb3IgY3VyZGlyLCBzcmNyZXZzIGluIHNvcnRlZChhbGxfc3JjcmV2cy5pdGVyaXRlbXMoKSk6CisgICAgZm9yIGN1cmRpciwgc3JjcmV2cyBpbiBzb3J0ZWQoYWxsX3NyY3JldnMuaXRlbXMoKSk6CiAgICAgICAgIGlmIHNyY3JldnM6CiAgICAgICAgICAgICBwcmludCgnIyAlcycgJSBjdXJkaXIpCiAgICAgICAgICAgICBmb3IgcG4sIG5hbWUsIHNyY3JldiBpbiBzcmNyZXZzOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZgppbmRleCBkZmViY2RkLi5kOGNhMTJkIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZgpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIFJlcG9ydCBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiB0aGUgYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnkgc2luY2UgYSBzcGVjaWZpYyByZXZpc2lvbgogIwpAQCAtMTQsNyArMTQsNyBAQAogdHJ5OgogICAgIGltcG9ydCBnaXQKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwcmludCgiUGxlYXNlIGluc3RhbGwgR2l0UHl0aG9uIChweXRob24tZ2l0KSAwLjMuMSBvciBsYXRlciBpbiBvcmRlciB0byB1c2UgdGhpcyBzY3JpcHQiKQorICAgIHByaW50KCJQbGVhc2UgaW5zdGFsbCBHaXRQeXRob24gKHB5dGhvbjMtZ2l0KSAwLjMuNCBvciBsYXRlciBpbiBvcmRlciB0byB1c2UgdGhpcyBzY3JpcHQiKQogICAgIHN5cy5leGl0KDEpCiAKIGRlZiBtYWluKCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZHN0YXRzLWRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZHN0YXRzLWRpZmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjkxOGE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkc3RhdHMtZGlmZgpAQCAtMCwwICsxLDU2NCBAQAorIyEvdXNyL2Jpbi9weXRob24zCisjCisjIFNjcmlwdCBmb3IgY29tcGFyaW5nIGJ1aWxkc3RhdHMgZnJvbSB0d28gZGlmZmVyZW50IGJ1aWxkcworIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKyMKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGdsb2IKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG1hdGgKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhLCB0emluZm8KK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGF0dHJnZXR0ZXIKKworIyBTZXR1cCBsb2dnaW5nCitsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTywgZm9ybWF0PSIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigpCisKKworY2xhc3MgU2NyaXB0RXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gZm9yIGludGVybmFsIGVycm9yIGhhbmRsaW5nIG9mIHRoaXMgc2NyaXB0IiIiCisgICAgcGFzcworCisKK2NsYXNzIFRpbWVab25lKHR6aW5mbyk6CisgICAgIiIiU2ltcGxlIGZpeGVkLW9mZnNldCB0emluZm8iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcywgbmFtZSk6CisgICAgICAgIHNlbGYuX29mZnNldCA9IHRpbWVkZWx0YShzZWNvbmRzPXNlY29uZHMpCisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29mZnNldAorCisgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgZHN0KHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworVElNRVpPTkVTID0geydVVEMnOiBUaW1lWm9uZSgwLCAnVVRDJyksCisgICAgICAgICAgICAgJ0VFVCc6IFRpbWVab25lKDcyMDAsICdFRVQnKSwKKyAgICAgICAgICAgICAnRUVTVCc6IFRpbWVab25lKDEwODAwLCAnRUVTVCcpfQorCit0YXNrZGlmZl9maWVsZHMgPSAoJ3BrZycsICdwa2dfb3AnLCAndGFzaycsICd0YXNrX29wJywgJ3ZhbHVlMScsICd2YWx1ZTInLAorICAgICAgICAgICAgICAgICAgICdhYnNkaWZmJywgJ3JlbGRpZmYnKQorVGFza0RpZmYgPSBuYW1lZHR1cGxlKCdUYXNrRGlmZicsICcgJy5qb2luKHRhc2tkaWZmX2ZpZWxkcykpCisKKworZGVmIHRvX2RhdGV0aW1lX29iaihvYmopOgorICAgICIiIkhlbHBlciBmb3IgZ2V0dGluZyB0aW1lc3RhbXBzIGluIGRhdGV0aW1lIGZvcm1hdCIiIgorICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBkYXRldGltZSk6CisgICAgICAgIHJldHVybiBvYmoKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcChvYmopLnJlcGxhY2UodHppbmZvPVRJTUVaT05FU1snVVRDJ10pCisKKworY2xhc3MgQlNUYXNrKGRpY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmWydzdGFydF90aW1lJ10gPSBOb25lCisgICAgICAgIHNlbGZbJ2VsYXBzZWRfdGltZSddID0gTm9uZQorICAgICAgICBzZWxmWydzdGF0dXMnXSA9IE5vbmUKKyAgICAgICAgc2VsZlsnaW9zdGF0J10gPSB7fQorICAgICAgICBzZWxmWydydXNhZ2UnXSA9IHt9CisgICAgICAgIHNlbGZbJ2NoaWxkX3J1c2FnZSddID0ge30KKyAgICAgICAgc3VwZXIoQlNUYXNrLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY3B1dGltZShzZWxmKToKKyAgICAgICAgIiIiU3VtIG9mIHVzZXIgYW5kIHN5c3RlbSB0aW1lIHRha2VuIGJ5IHRoZSB0YXNrIiIiCisgICAgICAgIHJldHVybiBzZWxmWydydXNhZ2UnXVsncnVfc3RpbWUnXSArIHNlbGZbJ3J1c2FnZSddWydydV91dGltZSddICsgXAorICAgICAgICAgICAgICAgc2VsZlsnY2hpbGRfcnVzYWdlJ11bJ3J1X3N0aW1lJ10gKyBzZWxmWydjaGlsZF9ydXNhZ2UnXVsncnVfdXRpbWUnXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdhbGx0aW1lKHNlbGYpOgorICAgICAgICAiIiJFbGFwc2VkIHdhbGwgY2xvY2sgdGltZSIiIgorICAgICAgICByZXR1cm4gc2VsZlsnZWxhcHNlZF90aW1lJ10udG90YWxfc2Vjb25kcygpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVhZF9ieXRlcyhzZWxmKToKKyAgICAgICAgIiIiQnl0ZXMgcmVhZCBmcm9tIHRoZSBibG9jayBsYXllciIiIgorICAgICAgICByZXR1cm4gc2VsZlsnaW9zdGF0J11bJ3JlYWRfYnl0ZXMnXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdyaXRlX2J5dGVzKHNlbGYpOgorICAgICAgICAiIiJCeXRlcyB3cml0dGVuIHRvIHRoZSBibG9jayBsYXllciIiIgorICAgICAgICByZXR1cm4gc2VsZlsnaW9zdGF0J11bJ3dyaXRlX2J5dGVzJ10KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZWFkX29wcyhzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIHJlYWQgb3BlcmF0aW9ucyBvbiB0aGUgYmxvY2sgbGF5ZXIiIiIKKyAgICAgICAgcmV0dXJuIHNlbGZbJ3J1c2FnZSddWydydV9pbmJsb2NrJ10gKyBzZWxmWydjaGlsZF9ydXNhZ2UnXVsncnVfaW5ibG9jayddCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd3JpdGVfb3BzKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2Ygd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGUgYmxvY2sgbGF5ZXIiIiIKKyAgICAgICAgcmV0dXJuIHNlbGZbJ3J1c2FnZSddWydydV9vdWJsb2NrJ10gKyBzZWxmWydjaGlsZF9ydXNhZ2UnXVsncnVfb3VibG9jayddCisKKworZGVmIHJlYWRfYnVpbGRzdGF0c19maWxlKGJ1aWxkc3RhdF9maWxlKToKKyAgICAiIiJDb252ZXJ0IGJ1aWxkc3RhdCB0ZXh0IGZpbGUgaW50byBkaWN0L2pzb24iIiIKKyAgICBic190YXNrID0gQlNUYXNrKCkKKyAgICBsb2cuZGVidWcoIlJlYWRpbmcgdGFzayBidWlsZHN0YXRzIGZyb20gJXMiLCBidWlsZHN0YXRfZmlsZSkKKyAgICB3aXRoIG9wZW4oYnVpbGRzdGF0X2ZpbGUpIGFzIGZvYmo6CisgICAgICAgIGZvciBsaW5lIGluIGZvYmoucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBrZXksIHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgdmFsID0gdmFsLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGtleSA9PSAnU3RhcnRlZCc6CisgICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRvX2RhdGV0aW1lX29iaihmbG9hdCh2YWwpKQorICAgICAgICAgICAgICAgIGJzX3Rhc2tbJ3N0YXJ0X3RpbWUnXSA9IHN0YXJ0X3RpbWUKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdFbmRlZCc6CisgICAgICAgICAgICAgICAgZW5kX3RpbWUgPSB0b19kYXRldGltZV9vYmooZmxvYXQodmFsKSkKKyAgICAgICAgICAgIGVsaWYga2V5LnN0YXJ0c3dpdGgoJ0lPICcpOgorICAgICAgICAgICAgICAgIHNwbGl0ID0ga2V5LnNwbGl0KCkKKyAgICAgICAgICAgICAgICBic190YXNrWydpb3N0YXQnXVtzcGxpdFsxXV0gPSBpbnQodmFsKQorICAgICAgICAgICAgZWxpZiBrZXkuZmluZCgncnVzYWdlJykgPj0gMDoKKyAgICAgICAgICAgICAgICBzcGxpdCA9IGtleS5zcGxpdCgpCisgICAgICAgICAgICAgICAgcnVfa2V5ID0gc3BsaXRbLTFdCisgICAgICAgICAgICAgICAgaWYgcnVfa2V5IGluICgncnVfc3RpbWUnLCAncnVfdXRpbWUnKToKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gZmxvYXQodmFsKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhbCA9IGludCh2YWwpCisgICAgICAgICAgICAgICAgcnVfdHlwZSA9ICdydXNhZ2UnIGlmIHNwbGl0WzBdID09ICdydXNhZ2UnIGVsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hpbGRfcnVzYWdlJworICAgICAgICAgICAgICAgIGJzX3Rhc2tbcnVfdHlwZV1bcnVfa2V5XSA9IHZhbAorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ1N0YXR1cyc6CisgICAgICAgICAgICAgICAgYnNfdGFza1snc3RhdHVzJ10gPSB2YWwKKyAgICBic190YXNrWydlbGFwc2VkX3RpbWUnXSA9IGVuZF90aW1lIC0gc3RhcnRfdGltZQorICAgIHJldHVybiBic190YXNrCisKKworZGVmIHJlYWRfYnVpbGRzdGF0c19kaXIoYnNfZGlyKToKKyAgICAiIiJSZWFkIGJ1aWxkc3RhdHMgZGlyZWN0b3J5IiIiCisgICAgZGVmIHNwbGl0X25ldnIobmV2cik6CisgICAgICAgICIiIlNwbGl0IG5hbWUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSByZWNpcGUgIm5ldnIiIHN0cmluZyIiIgorICAgICAgICBuX2VfdiwgcmV2aXNpb24gPSBuZXZyLnJzcGxpdCgnLScsIDEpCisgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocideKD9QPG5hbWU+XFMrKS0oKD9QPGVwb2NoPlswLTldezEsNX0pXyk/KD9QPHZlcnNpb24+WzAtOV1cUyopJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgbl9lX3YpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgICMgSWYgd2UncmUgbm90IGFibGUgdG8gcGFyc2UgYSB2ZXJzaW9uIHN0YXJ0aW5nIHdpdGggYSBudW1iZXIsIGp1c3QKKyAgICAgICAgICAgICMgdGFrZSB0aGUgcGFydCBhZnRlciBsYXN0IGRhc2gKKyAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocideKD9QPG5hbWU+XFMrKS0oKD9QPGVwb2NoPlswLTldezEsNX0pXyk/KD9QPHZlcnNpb24+W14tXSspJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZV92KQorICAgICAgICBuYW1lID0gbWF0Y2guZ3JvdXAoJ25hbWUnKQorICAgICAgICB2ZXJzaW9uID0gbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKQorICAgICAgICBlcG9jaCA9IG1hdGNoLmdyb3VwKCdlcG9jaCcpCisgICAgICAgIHJldHVybiBuYW1lLCBlcG9jaCwgdmVyc2lvbiwgcmV2aXNpb24KKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oYnNfZGlyLCAnYnVpbGRfc3RhdHMnKSk6CisgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJ7fSBkb2VzIG5vdCBsb29rIGxpa2UgYSBidWlsZHN0YXRzIGRpcmVjdG9yeSIuZm9ybWF0KGJzX2RpcikpCisKKyAgICBsb2cuZGVidWcoIlJlYWRpbmcgYnVpbGRzdGF0cyBkaXJlY3RvcnkgJXMiLCBic19kaXIpCisKKyAgICBidWlsZHN0YXRzID0ge30KKyAgICBzdWJkaXJzID0gb3MubGlzdGRpcihic19kaXIpCisgICAgZm9yIGRpcm5hbWUgaW4gc3ViZGlyczoKKyAgICAgICAgcmVjaXBlX2RpciA9IG9zLnBhdGguam9pbihic19kaXIsIGRpcm5hbWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHJlY2lwZV9kaXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbmFtZSwgZXBvY2gsIHZlcnNpb24sIHJldmlzaW9uID0gc3BsaXRfbmV2cihkaXJuYW1lKQorICAgICAgICByZWNpcGVfYnMgPSB7J25ldnInOiBkaXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgJ2Vwb2NoJzogZXBvY2gsCisgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6IHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAncmV2aXNpb24nOiByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICd0YXNrcyc6IHt9fQorICAgICAgICBmb3IgdGFzayBpbiBvcy5saXN0ZGlyKHJlY2lwZV9kaXIpOgorICAgICAgICAgICAgcmVjaXBlX2JzWyd0YXNrcyddW3Rhc2tdID0gW3JlYWRfYnVpbGRzdGF0c19maWxlKAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocmVjaXBlX2RpciwgdGFzaykpXQorICAgICAgICBpZiBuYW1lIGluIGJ1aWxkc3RhdHM6CisgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiQ2Fubm90IGhhbmRsZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAoe30pIi5mb3JtYXQobmFtZSkpCisgICAgICAgIGJ1aWxkc3RhdHNbbmFtZV0gPSByZWNpcGVfYnMKKworICAgIHJldHVybiBidWlsZHN0YXRzCisKKworZGVmIGJzX2FwcGVuZChkc3QsIHNyYyk6CisgICAgIiIiQXBwZW5kIGRhdGEgZnJvbSBhbm90aGVyIGJ1aWxkc3RhdHMiIiIKKyAgICBpZiBzZXQoZHN0LmtleXMoKSkgIT0gc2V0KHNyYy5rZXlzKCkpOgorICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiUmVmdXNpbmcgdG8gam9pbiBidWlsZHN0YXRzLCBzZXQgb2YgcGFja2FnZXMgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlmZmVyZW50IikKKyAgICBmb3IgcGtnLCBkYXRhIGluIGRzdC5pdGVtcygpOgorICAgICAgICBpZiBkYXRhWyduZXZyJ10gIT0gc3JjW3BrZ11bJ25ldnInXToKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJSZWZ1c2luZyB0byBqb2luIGJ1aWxkc3RhdHMsIHBhY2thZ2UgdmVyc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlmZmVyczoge30gdnMuIHt9Ii5mb3JtYXQoZGF0YVsnbmV2ciddLCBzcmNbcGtnXVsnbmV2ciddKSkKKyAgICAgICAgaWYgc2V0KGRhdGFbJ3Rhc2tzJ10ua2V5cygpKSAhPSBzZXQoc3JjW3BrZ11bJ3Rhc2tzJ10ua2V5cygpKToKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJSZWZ1c2luZyB0byBqb2luIGJ1aWxkc3RhdHMsIHNldCBvZiB0YXNrcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4ge30gZGlmZmVyIi5mb3JtYXQocGtnKSkKKyAgICAgICAgZm9yIHRhc2tuYW1lLCB0YXNrZGF0YSBpbiBkYXRhWyd0YXNrcyddLml0ZW1zKCk6CisgICAgICAgICAgICB0YXNrZGF0YS5leHRlbmQoc3JjW3BrZ11bJ3Rhc2tzJ11bdGFza25hbWVdKQorCisKK2RlZiByZWFkX2J1aWxkc3RhdHNfanNvbihwYXRoKToKKyAgICAiIiJSZWFkIGJ1aWxkc3RhdHMgZnJvbSBKU09OIGZpbGUiIiIKKyAgICBidWlsZHN0YXRzID0ge30KKyAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZm9iajoKKyAgICAgICAgYnNfanNvbiA9IGpzb24ubG9hZChmb2JqKQorICAgIGZvciByZWNpcGVfYnMgaW4gYnNfanNvbjoKKyAgICAgICAgaWYgcmVjaXBlX2JzWyduYW1lJ10gaW4gYnVpbGRzdGF0czoKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJDYW5ub3QgaGFuZGxlIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICh7fSkiLmZvcm1hdChyZWNpcGVfYnNbJ25hbWUnXSkpCisKKyAgICAgICAgaWYgcmVjaXBlX2JzWydlcG9jaCddIGlzIE5vbmU6CisgICAgICAgICAgICByZWNpcGVfYnNbJ25ldnInXSA9ICJ7fS17fS17fSIuZm9ybWF0KHJlY2lwZV9ic1snbmFtZSddLCByZWNpcGVfYnNbJ3ZlcnNpb24nXSwgcmVjaXBlX2JzWydyZXZpc2lvbiddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVjaXBlX2JzWyduZXZyJ10gPSAie30te31fe30te30iLmZvcm1hdChyZWNpcGVfYnNbJ25hbWUnXSwgcmVjaXBlX2JzWydlcG9jaCddLCByZWNpcGVfYnNbJ3ZlcnNpb24nXSwgcmVjaXBlX2JzWydyZXZpc2lvbiddKQorCisgICAgICAgIGZvciB0YXNrLCBkYXRhIGluIHJlY2lwZV9ic1sndGFza3MnXS5jb3B5KCkuaXRlbXMoKToKKyAgICAgICAgICAgIHJlY2lwZV9ic1sndGFza3MnXVt0YXNrXSA9IFtCU1Rhc2soZGF0YSldCisKKyAgICAgICAgYnVpbGRzdGF0c1tyZWNpcGVfYnNbJ25hbWUnXV0gPSByZWNpcGVfYnMKKworICAgIHJldHVybiBidWlsZHN0YXRzCisKKworZGVmIHJlYWRfYnVpbGRzdGF0cyhwYXRoLCBtdWx0aSk6CisgICAgIiIiUmVhZCBidWlsZHN0YXRzIiIiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeToge30iLmZvcm1hdChwYXRoKSkKKworICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICByZXR1cm4gcmVhZF9idWlsZHN0YXRzX2pzb24ocGF0aCkKKworICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCAnYnVpbGRfc3RhdHMnKSk6CisgICAgICAgIHJldHVybiByZWFkX2J1aWxkc3RhdHNfZGlyKHBhdGgpCisKKyAgICAjIEhhbmRsZSBhIG5vbi1idWlsZHN0YXQgZGlyZWN0b3J5CisgICAgc3VicGF0aHMgPSBzb3J0ZWQoZ2xvYi5nbG9iKHBhdGggKyAnLyonKSkKKyAgICBpZiBsZW4oc3VicGF0aHMpID4gMToKKyAgICAgICAgaWYgbXVsdGk6CisgICAgICAgICAgICBsb2cuaW5mbygiQXZlcmFnaW5nIG92ZXIge30gYnVpbGRzdGF0cyBmcm9tIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICBsZW4oc3VicGF0aHMpLCBwYXRoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJNdWx0aXBsZSBidWlsZHN0YXRzIGZvdW5kIGluICd7fScuIFBsZWFzZSBnaXZlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHNpbmdsZSBidWlsZHN0YXQgZGlyZWN0b3J5IG9mIHVzZSB0aGUgLS1tdWx0aSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIi5mb3JtYXQocGF0aCkpCisgICAgYnMgPSBOb25lCisgICAgZm9yIHN1YnBhdGggaW4gc3VicGF0aHM6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHN1YnBhdGgpOgorICAgICAgICAgICAgdG1wYnMgPSByZWFkX2J1aWxkc3RhdHNfanNvbihzdWJwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG1wYnMgPSByZWFkX2J1aWxkc3RhdHNfZGlyKHN1YnBhdGgpCisgICAgICAgIGlmIG5vdCBiczoKKyAgICAgICAgICAgIGJzID0gdG1wYnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiSm9pbmluZyBidWlsZHN0YXRzIikKKyAgICAgICAgICAgIGJzX2FwcGVuZChicywgdG1wYnMpCisKKyAgICBpZiBub3QgYnM6CisgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJObyBidWlsZHN0YXRzIGZvdW5kIHVuZGVyIHt9Ii5mb3JtYXQocGF0aCkpCisgICAgcmV0dXJuIGJzCisKKworZGVmIHByaW50X3Zlcl9kaWZmKGJzMSwgYnMyKToKKyAgICAiIiJQcmludCBwYWNrYWdlIHZlcnNpb24gZGlmZmVyZW5jZXMiIiIKKyAgICBwa2dzMSA9IHNldChiczEua2V5cygpKQorICAgIHBrZ3MyID0gc2V0KGJzMi5rZXlzKCkpCisgICAgbmV3X3BrZ3MgPSBwa2dzMiAtIHBrZ3MxCisgICAgZGVsZXRlZF9wa2dzID0gcGtnczEgLSBwa2dzMgorCisgICAgZWNoYW5nZWQgPSBbXQorICAgIHZjaGFuZ2VkID0gW10KKyAgICByY2hhbmdlZCA9IFtdCisgICAgdW5jaGFuZ2VkID0gW10KKyAgICBjb21tb25fcGtncyA9IHBrZ3MyLmludGVyc2VjdGlvbihwa2dzMSkKKyAgICBpZiBjb21tb25fcGtnczoKKyAgICAgICAgZm9yIHBrZyBpbiBjb21tb25fcGtnczoKKyAgICAgICAgICAgIGlmIGJzMVtwa2ddWydlcG9jaCddICE9IGJzMltwa2ddWydlcG9jaCddOgorICAgICAgICAgICAgICAgIGVjaGFuZ2VkLmFwcGVuZChwa2cpCisgICAgICAgICAgICBlbGlmIGJzMVtwa2ddWyd2ZXJzaW9uJ10gIT0gYnMyW3BrZ11bJ3ZlcnNpb24nXToKKyAgICAgICAgICAgICAgICB2Y2hhbmdlZC5hcHBlbmQocGtnKQorICAgICAgICAgICAgZWxpZiBiczFbcGtnXVsncmV2aXNpb24nXSAhPSBiczJbcGtnXVsncmV2aXNpb24nXToKKyAgICAgICAgICAgICAgICByY2hhbmdlZC5hcHBlbmQocGtnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bmNoYW5nZWQuYXBwZW5kKHBrZykKKworICAgIG1heGxlbiA9IG1heChbbGVuKHBrZykgZm9yIHBrZyBpbiBwa2dzMS51bmlvbihwa2dzMildKQorICAgIGZtdF9zdHIgPSAiICB7OnttYXhsZW59fSAoe30pIgorIyAgICBpZiB1bmNoYW5nZWQ6CisjICAgICAgICBwcmludCgiXG5VTkNIQU5HRUQgUEFDS0FHRVM6IikKKyMgICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tIikKKyMgICAgICAgIG1heGxlbiA9IG1heChbbGVuKHBrZykgZm9yIHBrZyBpbiB1bmNoYW5nZWRdKQorIyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQodW5jaGFuZ2VkKToKKyMgICAgICAgICAgICBwcmludChmbXRfc3RyLmZvcm1hdChwa2csIGJzMltwa2ddWyduZXZyJ10sIG1heGxlbj1tYXhsZW4pKQorCisgICAgaWYgbmV3X3BrZ3M6CisgICAgICAgIHByaW50KCJcbk5FVyBQQUNLQUdFUzoiKQorICAgICAgICBwcmludCgiLS0tLS0tLS0tLS0tLSIpCisgICAgICAgIGZvciBwa2cgaW4gc29ydGVkKG5ld19wa2dzKToKKyAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgYnMyW3BrZ11bJ25ldnInXSwgbWF4bGVuPW1heGxlbikpCisKKyAgICBpZiBkZWxldGVkX3BrZ3M6CisgICAgICAgIHByaW50KCJcbkRFTEVURUQgUEFDS0FHRVM6IikKKyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tIikKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQoZGVsZXRlZF9wa2dzKToKKyAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgYnMxW3BrZ11bJ25ldnInXSwgbWF4bGVuPW1heGxlbikpCisKKyAgICBmbXRfc3RyID0gIiAgezA6e21heGxlbn19IHsxOjwyMH0gICAgKHsyfSkiCisgICAgaWYgcmNoYW5nZWQ6CisgICAgICAgIHByaW50KCJcblJFVklTSU9OIENIQU5HRUQ6IikKKyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tIikKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQocmNoYW5nZWQpOgorICAgICAgICAgICAgZmllbGQxID0gInt9IC0+IHt9Ii5mb3JtYXQocGtnLCBiczFbcGtnXVsncmV2aXNpb24nXSwgYnMyW3BrZ11bJ3JldmlzaW9uJ10pCisgICAgICAgICAgICBmaWVsZDIgPSAie30gLT4ge30iLmZvcm1hdChiczFbcGtnXVsnbmV2ciddLCBiczJbcGtnXVsnbmV2ciddKQorICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQocGtnLCBmaWVsZDEsIGZpZWxkMiwgbWF4bGVuPW1heGxlbikpCisKKyAgICBpZiB2Y2hhbmdlZDoKKyAgICAgICAgcHJpbnQoIlxuVkVSU0lPTiBDSEFOR0VEOiIpCisgICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tLS0tIikKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQodmNoYW5nZWQpOgorICAgICAgICAgICAgZmllbGQxID0gInt9IC0+IHt9Ii5mb3JtYXQoYnMxW3BrZ11bJ3ZlcnNpb24nXSwgYnMyW3BrZ11bJ3ZlcnNpb24nXSkKKyAgICAgICAgICAgIGZpZWxkMiA9ICJ7fSAtPiB7fSIuZm9ybWF0KGJzMVtwa2ddWyduZXZyJ10sIGJzMltwa2ddWyduZXZyJ10pCisgICAgICAgICAgICBwcmludChmbXRfc3RyLmZvcm1hdChwa2csIGZpZWxkMSwgZmllbGQyLCBtYXhsZW49bWF4bGVuKSkKKworICAgIGlmIGVjaGFuZ2VkOgorICAgICAgICBwcmludCgiXG5FUE9DSCBDSEFOR0VEOiIpCisgICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tLSIpCisgICAgICAgIGZvciBwa2cgaW4gc29ydGVkKGVjaGFuZ2VkKToKKyAgICAgICAgICAgIGZpZWxkMSA9ICJ7fSAtPiB7fSIuZm9ybWF0KHBrZywgYnMxW3BrZ11bJ2Vwb2NoJ10sIGJzMltwa2ddWydlcG9jaCddKQorICAgICAgICAgICAgZmllbGQyID0gInt9IC0+IHt9Ii5mb3JtYXQoYnMxW3BrZ11bJ25ldnInXSwgYnMyW3BrZ11bJ25ldnInXSkKKyAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgZmllbGQxLCBmaWVsZDIsIG1heGxlbj1tYXhsZW4pKQorCisKK2RlZiBwcmludF90YXNrX2RpZmYoYnMxLCBiczIsIHZhbF90eXBlLCBtaW5fdmFsPTAsIG1pbl9hYnNkaWZmPTAsIHNvcnRfYnk9KCdhYnNkaWZmJywpKToKKyAgICAiIiJEaWZmIHRhc2sgZXhlY3V0aW9uIHRpbWVzIiIiCisgICAgZGVmIHZhbF90b19zdHIodmFsLCBodW1hbl9yZWFkYWJsZT1GYWxzZSk6CisgICAgICAgICIiIkNvbnZlcnQgcmF3IHZhbHVlIHRvIHByaW50YWJsZSBzdHJpbmciIiIKKyAgICAgICAgZGVmIGhtc190aW1lKHNlY3MpOgorICAgICAgICAgICAgIiIiR2V0IHRpbWUgaW4gaHVtYW4tcmVhZGFibGUgSEg6TU06U1MgZm9ybWF0IiIiCisgICAgICAgICAgICBoID0gaW50KHNlY3MgLyAzNjAwKQorICAgICAgICAgICAgbSA9IGludCgoc2VjcyAlIDM2MDApIC8gNjApCisgICAgICAgICAgICBzID0gc2VjcyAlIDYwCisgICAgICAgICAgICBpZiBoID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ7OjAyZH06ezowNC4xZn0iLmZvcm1hdChtLCBzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIns6ZH06ezowMmR9Ons6MDQuMWZ9Ii5mb3JtYXQoaCwgbSwgcykKKworICAgICAgICBpZiAndGltZScgaW4gdmFsX3R5cGU6CisgICAgICAgICAgICBpZiBodW1hbl9yZWFkYWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaG1zX3RpbWUodmFsKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIns6LjFmfXMiLmZvcm1hdCh2YWwpCisgICAgICAgIGVsaWYgJ2J5dGVzJyBpbiB2YWxfdHlwZSBhbmQgaHVtYW5fcmVhZGFibGU6CisgICAgICAgICAgICAgICAgcHJlZml4ID0gWycnLCAnS2knLCAnTWknLCAnR2knLCAnVGknLCAnUGknXQorICAgICAgICAgICAgICAgIGRlYyA9IGludChtYXRoLmxvZyh2YWwsIDIpIC8gMTApCisgICAgICAgICAgICAgICAgcHJlYyA9IDEgaWYgZGVjID4gMCBlbHNlIDAKKyAgICAgICAgICAgICAgICByZXR1cm4gIns6LntwcmVjfWZ9e31CIi5mb3JtYXQodmFsIC8gKDIgKiogKDEwICogZGVjKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeFtkZWNdLCBwcmVjPXByZWMpCisgICAgICAgIGVsaWYgJ29wcycgaW4gdmFsX3R5cGUgYW5kIGh1bWFuX3JlYWRhYmxlOgorICAgICAgICAgICAgICAgIHByZWZpeCA9IFsnJywgJ2snLCAnTScsICdHJywgJ1QnLCAnUCddCisgICAgICAgICAgICAgICAgZGVjID0gaW50KG1hdGgubG9nKHZhbCwgMTAwMCkpCisgICAgICAgICAgICAgICAgcHJlYyA9IDEgaWYgZGVjID4gMCBlbHNlIDAKKyAgICAgICAgICAgICAgICByZXR1cm4gIns6LntwcmVjfWZ9e31vcHMiLmZvcm1hdCh2YWwgLyAoMTAwMCAqKiBkZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeFtkZWNdLCBwcmVjPXByZWMpCisgICAgICAgIHJldHVybiBzdHIoaW50KHZhbCkpCisKKyAgICBkZWYgc3VtX3ZhbHMoYnVpbGRzdGF0cyk6CisgICAgICAgICIiIkdldCBjdW11bGF0aXZlIHN1bSBvZiBhbGwgdGFza3MiIiIKKyAgICAgICAgdG90YWwgPSAwLjAKKyAgICAgICAgZm9yIHJlY2lwZV9kYXRhIGluIGJ1aWxkc3RhdHMudmFsdWVzKCk6CisgICAgICAgICAgICBmb3IgYnNfdGFzayBpbiByZWNpcGVfZGF0YVsndGFza3MnXS52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzdW0oW2dldGF0dHIoYiwgdmFsX3R5cGUpIGZvciBiIGluIGJzX3Rhc2tdKSAvIGxlbihic190YXNrKQorICAgICAgICByZXR1cm4gdG90YWwKKworICAgIHRhc2tzX2RpZmYgPSBbXQorCisgICAgaWYgbWluX3ZhbDoKKyAgICAgICAgcHJpbnQoIklnbm9yaW5nIHRhc2tzIGxlc3MgdGhhbiB7fSAoe30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgdmFsX3RvX3N0cihtaW5fdmFsLCBUcnVlKSwgdmFsX3RvX3N0cihtaW5fdmFsKSkpCisgICAgaWYgbWluX2Fic2RpZmY6CisgICAgICAgIHByaW50KCJJZ25vcmluZyBkaWZmZXJlbmNlcyBsZXNzIHRoYW4ge30gKHt9KSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIHZhbF90b19zdHIobWluX2Fic2RpZmYsIFRydWUpLCB2YWxfdG9fc3RyKG1pbl9hYnNkaWZmKSkpCisKKyAgICAjIFByZXBhcmUgdGhlIGRhdGEKKyAgICBwa2dzID0gc2V0KGJzMS5rZXlzKCkpLnVuaW9uKHNldChiczIua2V5cygpKSkKKyAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgIHRhc2tzMSA9IGJzMVtwa2ddWyd0YXNrcyddIGlmIHBrZyBpbiBiczEgZWxzZSB7fQorICAgICAgICB0YXNrczIgPSBiczJbcGtnXVsndGFza3MnXSBpZiBwa2cgaW4gYnMyIGVsc2Uge30KKyAgICAgICAgaWYgbm90IHRhc2tzMToKKyAgICAgICAgICAgIHBrZ19vcCA9ICcrICcKKyAgICAgICAgZWxpZiBub3QgdGFza3MyOgorICAgICAgICAgICAgcGtnX29wID0gJy0gJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnX29wID0gJyAgJworCisgICAgICAgIGZvciB0YXNrIGluIHNldCh0YXNrczEua2V5cygpKS51bmlvbihzZXQodGFza3MyLmtleXMoKSkpOgorICAgICAgICAgICAgdGFza19vcCA9ICcgICcKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gdGFza3MxOgorICAgICAgICAgICAgICAgICMgQXZlcmFnZSBvdmVyIGFsbCB2YWx1ZXMKKyAgICAgICAgICAgICAgICB2YWwxID0gW2dldGF0dHIoYiwgdmFsX3R5cGUpIGZvciBiIGluIGJzMVtwa2ddWyd0YXNrcyddW3Rhc2tdXQorICAgICAgICAgICAgICAgIHZhbDEgPSBzdW0odmFsMSkgLyBsZW4odmFsMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFza19vcCA9ICcrICcKKyAgICAgICAgICAgICAgICB2YWwxID0gMAorICAgICAgICAgICAgaWYgdGFzayBpbiB0YXNrczI6CisgICAgICAgICAgICAgICAgIyBBdmVyYWdlIG92ZXIgYWxsIHZhbHVlcworICAgICAgICAgICAgICAgIHZhbDIgPSBbZ2V0YXR0cihiLCB2YWxfdHlwZSkgZm9yIGIgaW4gYnMyW3BrZ11bJ3Rhc2tzJ11bdGFza11dCisgICAgICAgICAgICAgICAgdmFsMiA9IHN1bSh2YWwyKSAvIGxlbih2YWwyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWwyID0gMAorICAgICAgICAgICAgICAgIHRhc2tfb3AgPSAnLSAnCisKKyAgICAgICAgICAgIGlmIHZhbDEgPT0gMDoKKyAgICAgICAgICAgICAgICByZWxkaWZmID0gZmxvYXQoJ2luZicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlbGRpZmYgPSAxMDAgKiAodmFsMiAtIHZhbDEpIC8gdmFsMQorCisgICAgICAgICAgICBpZiBtYXgodmFsMSwgdmFsMikgPCBtaW5fdmFsOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiRmlsdGVyaW5nIG91dCAlczolcyAoJXMpIiwgcGtnLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKG1heCh2YWwxLCB2YWwyKSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGFicyh2YWwyIC0gdmFsMSkgPCBtaW5fYWJzZGlmZjoKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkZpbHRlcmluZyBvdXQgJXM6JXMgKGRpZmZlcmVuY2Ugb2YgJXMpIiwgcGtnLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKHZhbDItdmFsMSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRhc2tzX2RpZmYuYXBwZW5kKFRhc2tEaWZmKHBrZywgcGtnX29wLCB0YXNrLCB0YXNrX29wLCB2YWwxLCB2YWwyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsMi12YWwxLCByZWxkaWZmKSkKKworICAgICMgU29ydCBvdXIgbGlzdAorICAgIGZvciBmaWVsZCBpbiByZXZlcnNlZChzb3J0X2J5KToKKyAgICAgICAgaWYgZmllbGQuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgZmllbGQgPSBmaWVsZFsxOl0KKyAgICAgICAgICAgIHJldmVyc2UgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXZlcnNlID0gRmFsc2UKKyAgICAgICAgdGFza3NfZGlmZiA9IHNvcnRlZCh0YXNrc19kaWZmLCBrZXk9YXR0cmdldHRlcihmaWVsZCksIHJldmVyc2U9cmV2ZXJzZSkKKworICAgIGxpbmVkYXRhID0gWygnICAnLCAnUEtHJywgJyAgJywgJ1RBU0snLCAnQUJTRElGRicsICdSRUxESUZGJywKKyAgICAgICAgICAgICAgICB2YWxfdHlwZS51cHBlcigpICsgJzEnLCB2YWxfdHlwZS51cHBlcigpICsgJzInKV0KKyAgICBmaWVsZF9sZW5zID0gZGljdChbKCdsZW5fe30nLmZvcm1hdChpKSwgbGVuKGYpKSBmb3IgaSwgZiBpbiBlbnVtZXJhdGUobGluZWRhdGFbMF0pXSkKKworICAgICMgUHJlcGFyZSBmaWVsZHMgaW4gc3RyaW5nIGZvcm1hdCBhbmQgbWVhc3VyZSBmaWVsZCBsZW5ndGhzCisgICAgZm9yIGRpZmYgaW4gdGFza3NfZGlmZjoKKyAgICAgICAgdGFza19wcmVmaXggPSBkaWZmLnRhc2tfb3AgaWYgZGlmZi5wa2dfb3AgPT0gJyAgJyBlbHNlICcgICcKKyAgICAgICAgbGluZWRhdGEuYXBwZW5kKChkaWZmLnBrZ19vcCwgZGlmZi5wa2csIHRhc2tfcHJlZml4LCBkaWZmLnRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgdmFsX3RvX3N0cihkaWZmLmFic2RpZmYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OisuMWZ9JScuZm9ybWF0KGRpZmYucmVsZGlmZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgdmFsX3RvX3N0cihkaWZmLnZhbHVlMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgdmFsX3RvX3N0cihkaWZmLnZhbHVlMikpKQorICAgICAgICBmb3IgaSwgZmllbGQgaW4gZW51bWVyYXRlKGxpbmVkYXRhWy0xXSk6CisgICAgICAgICAgICBrZXkgPSAnbGVuX3t9Jy5mb3JtYXQoaSkKKyAgICAgICAgICAgIGlmIGxlbihmaWVsZCkgPiBmaWVsZF9sZW5zW2tleV06CisgICAgICAgICAgICAgICAgZmllbGRfbGVuc1trZXldID0gbGVuKGZpZWxkKQorCisgICAgIyBQcmludCBkYXRhCisgICAgcHJpbnQoKQorICAgIGZvciBmaWVsZHMgaW4gbGluZWRhdGE6CisgICAgICAgIHByaW50KCJ7OntsZW5fMH19ezp7bGVuXzF9fSAgezp7bGVuXzJ9fXs6e2xlbl8zfX0gIHs6PntsZW5fNH19ICB7Oj57bGVuXzV9fSAgezo+e2xlbl82fX0gLT4gezp7bGVuXzd9fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICpmaWVsZHMsICoqZmllbGRfbGVucykpCisKKyAgICAjIFByaW50IHN1bW1hcnkgb2YgdGhlIGRpZmZzCisgICAgdG90YWwxID0gc3VtX3ZhbHMoYnMxKQorICAgIHRvdGFsMiA9IHN1bV92YWxzKGJzMikKKyAgICBwcmludCgiXG5DdW11bGF0aXZlIHt9OiIuZm9ybWF0KHZhbF90eXBlKSkKKyAgICBwcmludCAoIiAge30gICAgezorLjFmfSUgICAge30gKHt9KSAtPiB7fSAoe30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgdmFsX3RvX3N0cih0b3RhbDIgLSB0b3RhbDEpLCAxMDAgKiAodG90YWwyLXRvdGFsMSkgLyB0b3RhbDEsCisgICAgICAgICAgICAgICAgdmFsX3RvX3N0cih0b3RhbDEsIFRydWUpLCB2YWxfdG9fc3RyKHRvdGFsMSksCisgICAgICAgICAgICAgICAgdmFsX3RvX3N0cih0b3RhbDIsIFRydWUpLCB2YWxfdG9fc3RyKHRvdGFsMikpKQorCisKK2RlZiBwYXJzZV9hcmdzKGFyZ3YpOgorICAgICIiIlBhcnNlIGNtZGxpbmUgYXJndW1lbnRzIiIiCisgICAgZGVzY3JpcHRpb249IiIiCitTY3JpcHQgZm9yIGNvbXBhcmluZyBidWlsZHN0YXRzIG9mIHR3byBzZXBhcmF0ZSBidWlsZHMuIiIiCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIsCisgICAgICAgICAgICBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKKworICAgIG1pbl92YWxfZGVmYXVsdHMgPSB7J2NwdXRpbWUnOiAzLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAncmVhZF9ieXRlcyc6IDUyNDI4OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3cml0ZV9ieXRlcyc6IDUyNDI4OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyZWFkX29wcyc6IDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3cml0ZV9vcHMnOiA1MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAnd2FsbHRpbWUnOiA1fQorICAgIG1pbl9hYnNkaWZmX2RlZmF1bHRzID0geydjcHV0aW1lJzogMS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFkX2J5dGVzJzogMTMxMDcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3cml0ZV9ieXRlcyc6IDEzMTA3MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVhZF9vcHMnOiA1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGVfb3BzJzogNTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dhbGx0aW1lJzogMn0KKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGVidWcnLCAnLWQnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVmVyYm9zZSBsb2dnaW5nIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlci1kaWZmJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNob3cgcGFja2FnZSB2ZXJzaW9uIGRpZmZlcmVuY2VzIGFuZCBleGl0IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRpZmYtYXR0cicsIGRlZmF1bHQ9J2NwdXRpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1taW5fdmFsX2RlZmF1bHRzLmtleXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkJ1aWxkc3RhdCBhdHRyaWJ1dGUgd2hpY2ggdG8gY29tcGFyZSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1taW4tdmFsJywgZGVmYXVsdD1taW5fdmFsX2RlZmF1bHRzLCB0eXBlPWZsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRmlsdGVyIG91dCB0YXNrcyBsZXNzIHRoYW4gTUlOX1ZBTC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVmYXVsdCBkZXBlbmRzIG9uIC0tZGlmZi1hdHRyLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1taW4tYWJzZGlmZicsIGRlZmF1bHQ9bWluX2Fic2RpZmZfZGVmYXVsdHMsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJGaWx0ZXIgb3V0IHRhc2tzIHdob3NlIGRpZmZlcmVuY2UgaXMgbGVzcyB0aGFuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTl9BQlNESUZGLCBEZWZhdWx0IGRlcGVuZHMgb24gLS1kaWZmLWF0dHIuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNvcnQtYnknLCBkZWZhdWx0PSdhYnNkaWZmJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZpZWxkIHNvcnQgb3JkZXIuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZXBlbmQgdGhlIGZpZWxkIG5hbWUgd2l0aCAnLScgZm9yIHJldmVyc2VkIHNvcnQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF2YWlsYWJsZSBmaWVsZHMgYXJlOiB7fSIuZm9ybWF0KCcsICcuam9pbih0YXNrZGlmZl9maWVsZHMpKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW11bHRpJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJlYWQgYWxsIGJ1aWxkc3RhdHMgZnJvbSB0aGUgZ2l2ZW4gcGF0aHMgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF2ZXJhZ2Ugb3ZlciB0aGVtIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdidWlsZHN0YXRzMScsIG1ldGF2YXI9J0JVSUxEU1RBVFMxJywgaGVscD0iJ0xlZnQnIGJ1aWxkc3RhdCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYnVpbGRzdGF0czInLCBtZXRhdmFyPSdCVUlMRFNUQVRTMicsIGhlbHA9IidSaWdodCcgYnVpbGRzdGF0IikKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisgICAgIyBXZSBkbyBub3QgbmVkZC93YW50IHRvIHJlYWQgYWxsIGJ1aWxkc3RhdHMgaWYgd2UganVzdCB3YW50IHRvIGxvb2sgYXQgdGhlCisgICAgIyBwYWNrYWdlIHZlcnNpb25zCisgICAgaWYgYXJncy52ZXJfZGlmZjoKKyAgICAgICAgYXJncy5tdWx0aSA9IEZhbHNlCisKKyAgICAjIEhhbmRsZSBkZWZhdWx0cyBmb3IgdGhlIGZpbHRlciBhcmd1bWVudHMKKyAgICBpZiBhcmdzLm1pbl92YWwgaXMgbWluX3ZhbF9kZWZhdWx0czoKKyAgICAgICAgYXJncy5taW5fdmFsID0gbWluX3ZhbF9kZWZhdWx0c1thcmdzLmRpZmZfYXR0cl0KKyAgICBpZiBhcmdzLm1pbl9hYnNkaWZmIGlzIG1pbl9hYnNkaWZmX2RlZmF1bHRzOgorICAgICAgICBhcmdzLm1pbl9hYnNkaWZmID0gbWluX2Fic2RpZmZfZGVmYXVsdHNbYXJncy5kaWZmX2F0dHJdCisKKyAgICByZXR1cm4gYXJncworCisKK2RlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgIiIiU2NyaXB0IGVudHJ5IHBvaW50IiIiCisgICAgYXJncyA9IHBhcnNlX2FyZ3MoYXJndikKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgICMgVmFsaWRhdGUgc29ydCBmaWVsZHMKKyAgICBzb3J0X2J5ID0gW10KKyAgICBmb3IgZmllbGQgaW4gYXJncy5zb3J0X2J5LnNwbGl0KCcsJyk6CisgICAgICAgIGlmIGZpZWxkLmxzdHJpcCgnLScpIG5vdCBpbiB0YXNrZGlmZl9maWVsZHM6CisgICAgICAgICAgICBsb2cuZXJyb3IoIkludmFsaWQgc29ydCBmaWVsZCAnJXMnIChtdXN0IGJlIG9uZSBvZjogJXMpIiAlCisgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkLCAnLCAnLmpvaW4odGFza2RpZmZfZmllbGRzKSkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBzb3J0X2J5LmFwcGVuZChmaWVsZCkKKworICAgIHRyeToKKyAgICAgICAgYnMxID0gcmVhZF9idWlsZHN0YXRzKGFyZ3MuYnVpbGRzdGF0czEsIGFyZ3MubXVsdGkpCisgICAgICAgIGJzMiA9IHJlYWRfYnVpbGRzdGF0cyhhcmdzLmJ1aWxkc3RhdHMyLCBhcmdzLm11bHRpKQorCisgICAgICAgIGlmIGFyZ3MudmVyX2RpZmY6CisgICAgICAgICAgICBwcmludF92ZXJfZGlmZihiczEsIGJzMikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50X3Rhc2tfZGlmZihiczEsIGJzMiwgYXJncy5kaWZmX2F0dHIsIGFyZ3MubWluX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLm1pbl9hYnNkaWZmLCBzb3J0X2J5KQorICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlcnI6CisgICAgICAgIGxvZy5lcnJvcihzdHIoZXJyKSkKKyAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NsZWFudXAtd29ya2RpciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NsZWFudXAtd29ya2RpcgppbmRleCAwMWViZDUyLi45ODc2OWY2IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jbGVhbnVwLXdvcmtkaXIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY2xlYW51cC13b3JrZGlyCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgQ29weXJpZ2h0IChjKSAyMDEyIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgogIwpAQCAtMjcsNyArMjcsNyBAQAogcGFyc2VyID0gTm9uZQogCiBkZWYgZXJyX3F1aXQobXNnKToKLSAgICBwcmludCBtc2cKKyAgICBwcmludChtc2cpCiAgICAgcGFyc2VyLnByaW50X3VzYWdlKCkKICAgICBzeXMuZXhpdCgxKQogCkBAIC00MywxOSArNDMsMTkgQEAKICAgICBwaXBlID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCiAgICAgb3V0cHV0ID0gcGlwZS5jb21tdW5pY2F0ZSgpWzBdCiAgICAgaWYgcGlwZS5yZXR1cm5jb2RlICE9IDA6Ci0gICAgICAgIHByaW50ICJFeGVjdXRlIGNvbW1hbmQgJyVzJyBmYWlsZWQuIiAlIGNtZAorICAgICAgICBwcmludCgiRXhlY3V0ZSBjb21tYW5kICclcycgZmFpbGVkLiIgJSBjbWQpCiAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgcmV0dXJuIG91dHB1dAorICAgIHJldHVybiBvdXRwdXQuZGVjb2RlKCd1dGYtOCcpCiAKIGRlZiBnZXRfY3VyX2FyY2hfZGlycyh3b3JrZGlyLCBhcmNoX2RpcnMpOgogICAgIHBhdHRlcm4gPSB3b3JrZGlyICsgJy8oLio/KS8nCiAKLSAgICBjbWQgPSAiYml0YmFrZSAtZSB8IGdyZXAgXlNES19BUkNIPSIKKyAgICBjbWQgPSAiYml0YmFrZSAtZSB8IGdyZXAgXlNES19TWVM9IgogICAgIG91dHB1dCA9IHJ1bl9jb21tYW5kKGNtZCkKLSAgICBzZGtfYXJjaCA9IG91dHB1dC5zcGxpdCgnIicpWzFdCisgICAgc2RrX3N5cyA9IG91dHB1dC5zcGxpdCgnIicpWzFdCiAKICAgICAjIHNlbGVjdCB0aGVzdCA1IHBhY2thZ2VzIHRvIGdldCB0aGUgZGlycyBvZiBjdXJyZW50IGFyY2gKLSAgICBwa2dzID0gWydoaWNvbG9yLWljb24tdGhlbWUnLCAnYmFzZS1maWxlcycsICdhY2wtbmF0aXZlJywgJ2JpbnV0aWxzLWNyb3Nzc2RrLScgKyBzZGtfYXJjaCwgJ25hdGl2ZXNkay1hdXRvY29uZiddCisgICAgcGtncyA9IFsnaGljb2xvci1pY29uLXRoZW1lJywgJ2Jhc2UtZmlsZXMnLCAnYWNsLW5hdGl2ZScsICdiaW51dGlscy1jcm9zc3Nkay0nICsgc2RrX3N5cywgJ25hdGl2ZXNkay1hdXRvY29uZiddCiAKICAgICBmb3IgcGtnIGluIHBrZ3M6CiAgICAgICAgIGNtZCA9ICJiaXRiYWtlIC1lICIgKyBwa2cgKyAiIHwgZ3JlcCBeSU1BR0VfUk9PVEZTPSIKQEAgLTg0LDcgKzg0LDcgQEAKICAgICBpZiBvcy5nZXRjd2QoKSAhPSBidWlsZGRpcjoKICAgICAgICAgZXJyX3F1aXQoIlBsZWFzZSBydW4gJXMgdW5kZXI6ICVzXG4iICUgKG9zLnBhdGguYmFzZW5hbWUoYXJnc1swXSksIGJ1aWxkZGlyKSkKIAotICAgIHByaW50ICdVcGRhdGluZyBiaXRiYWtlIGNhY2hlcy4uLicKKyAgICBwcmludCgnVXBkYXRpbmcgYml0YmFrZSBjYWNoZXMuLi4nKQogICAgIGNtZCA9ICJiaXRiYWtlIC1zIgogICAgIG91dHB1dCA9IHJ1bl9jb21tYW5kKGNtZCkKIApAQCAtMTI5LDEzICsxMjksMTMgQEAKIAogICAgICMgd29uJ3QgZmFpbCBqdXN0IGluIGNhc2UKICAgICBpZiBub3QgdG1wZGlyIG9yIG5vdCBpbWFnZV9yb290ZnM6Ci0gICAgICAgIHByaW50ICJDYW4ndCBnZXQgVE1QRElSIG9yIElNQUdFX1JPT1RGUy4iCisgICAgICAgIHByaW50KCJDYW4ndCBnZXQgVE1QRElSIG9yIElNQUdFX1JPT1RGUy4iKQogICAgICAgICByZXR1cm4gMQogCiAgICAgcGF0dGVybiA9IHRtcGRpciArICcvKC4qPykvKC4qPykvJwogICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBpbWFnZV9yb290ZnMpCiAgICAgaWYgbm90IG06Ci0gICAgICAgIHByaW50ICJDYW4ndCBnZXQgV09SS0RJUi4iCisgICAgICAgIHByaW50KCJDYW4ndCBnZXQgV09SS0RJUi4iKQogICAgICAgICByZXR1cm4gMQogCiAgICAgd29ya2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsIG0uZ3JvdXAoMSkpCkBAIC0xNzgsMTMgKzE3OCwxMyBAQAogICAgICAgICBicmVhawogCiAgICAgZm9yIGQgaW4gb2Jzb2xldGVfZGlyczoKLSAgICAgICAgcHJpbnQgIkRlbGV0aW5nICVzIiAlIGQKKyAgICAgICAgcHJpbnQoIkRlbGV0aW5nICVzIiAlIGQpCiAgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgVHJ1ZSkKIAogICAgIGlmIGxlbihvYnNvbGV0ZV9kaXJzKToKLSAgICAgICAgcHJpbnQgJ1xuVG90YWwgJWQgaXRlbXMuJyAlIGxlbihvYnNvbGV0ZV9kaXJzKQorICAgICAgICBwcmludCgnXG5Ub3RhbCAlZCBpdGVtcy4nICUgbGVuKG9ic29sZXRlX2RpcnMpKQogICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICdcbk5vIG9ic29sZXRlIGRpcmVjdG9yeSBmb3VuZCB1bmRlciAlcy4nICUgd29ya2RpcgorICAgICAgICBwcmludCgnXG5ObyBvYnNvbGV0ZSBkaXJlY3RvcnkgZm91bmQgdW5kZXIgJXMuJyAlIHdvcmtkaXIpCiAKICAgICByZXR1cm4gMAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyCmluZGV4IDkxMjcwNDEuLmI5MGJmYzggMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAogIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQogIwpAQCAtMjYsMTAgKzI2LDE0IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IENvbmZpZ1BhcnNlcgoraW1wb3J0IGNvbmZpZ3BhcnNlcgogaW1wb3J0IHJlCitpbXBvcnQgY29weQoraW1wb3J0IHBpcGVzCitpbXBvcnQgc2h1dGlsCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCiAKIF9fdmVyc2lvbl9fID0gIjAuMi4xIgogCkBAIC03Myw3ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgIyBBcHBseSBzcGVjaWFsIHR5cGUgdHJhbnNmb3JtYXRpb25zIGZvciBzb21lIHByb3BlcnRpZXMuCiAgICAgICAgICAgICAgICAgICAgICMgVHlwZSBtYXRjaGVzIHRoZSBSYXdDb25maWdQYXJzZXIuZ2V0KigpIG1ldGhvZHMuCi0gICAgICAgICAgICAgICAgICAgIHR5cGVzID0geydzaWdub2ZmJzogJ2Jvb2xlYW4nLCAndXBkYXRlJzogJ2Jvb2xlYW4nfQorICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IHsnc2lnbm9mZic6ICdib29sZWFuJywgJ3VwZGF0ZSc6ICdib29sZWFuJywgJ2hpc3RvcnknOiAnYm9vbGVhbid9CiAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gdHlwZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIocGFyc2VyLCAnZ2V0JyArIHR5cGVzW25hbWVdKShzZWN0aW9uLCBuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zW3JlcG9dW25hbWVdID0gdmFsdWUKQEAgLTg0LDcgKzg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfbXNnX3RlbXBsYXRlID0gdmFsdWUKIAogICAgICAgICBsb2dnZXIuZGVidWcoIkxvYWRpbmcgY29uZmlnIGZpbGUgJXMiICUgc2VsZi5jb25mZmlsZSkKLSAgICAgICAgc2VsZi5wYXJzZXIgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmZpbGUpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5yZWFkZnAoZikKIApAQCAtMTEzLDcgKzExNyw3IEBACiAKICAgICAgICAgICAgICAgICBzZWxmLmxvY2FsY29uZmZpbGUgPSBsY2ZpbGUKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkxvYWRpbmcgbG9jYWwgY29uZmlnIGZpbGUgJXMiICUgc2VsZi5sb2NhbGNvbmZmaWxlKQotICAgICAgICAgICAgICAgIHNlbGYubG9jYWxwYXJzZXIgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxvY2FscGFyc2VyID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9jYWxjb25mZmlsZSkgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhbHBhcnNlci5yZWFkZnAoZikKIApAQCAtMTc0LDI4ICsxNzgsMjggQEAKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRVJST1I6IHBhdGNodXRpbHMgcGFja2FnZSBpcyBtaXNzaW5nLCBwbGVhc2UgaW5zdGFsbCBpdCAoZS5nLiAjIGFwdC1nZXQgaW5zdGFsbCBwYXRjaHV0aWxzKSIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCi1kZWYgcnVuY21kKGNtZCxkZXN0ZGlyPU5vbmUscHJpbnRlcnI9VHJ1ZSxvdXQ9Tm9uZSk6CitkZWYgcnVuY21kKGNtZCxkZXN0ZGlyPU5vbmUscHJpbnRlcnI9VHJ1ZSxvdXQ9Tm9uZSxlbnY9Tm9uZSk6CiAgICAgIiIiCiAgICAgICAgIGV4ZWN1dGUgY29tbWFuZCwgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yIGlmIGZhaWwKICAgICAgICAgcmV0dXJuIG91dHB1dCBpZiBzdWNjZWVkCiAgICAgIiIiCiAgICAgbG9nZ2VyLmRlYnVnKCJydW4gY21kICclcycgaW4gJXMiICUgKGNtZCwgb3MuZ2V0Y3dkKCkgaWYgZGVzdGRpciBpcyBOb25lIGVsc2UgZGVzdGRpcikpCiAgICAgaWYgbm90IG91dDoKLSAgICAgICAgb3V0ID0gb3MudG1wZmlsZSgpCisgICAgICAgIG91dCA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQogICAgICAgICBlcnIgPSBvdXQKICAgICBlbHNlOgotICAgICAgICBlcnIgPSBvcy50bXBmaWxlKCkKKyAgICAgICAgZXJyID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCiAgICAgdHJ5OgotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzdGRvdXQ9b3V0LCBzdGRlcnI9ZXJyLCBjd2Q9ZGVzdGRpciwgc2hlbGw9aXNpbnN0YW5jZShjbWQsIHN0cikpCi0gICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLGU6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHN0ZG91dD1vdXQsIHN0ZGVycj1lcnIsIGN3ZD1kZXN0ZGlyLCBzaGVsbD1pc2luc3RhbmNlKGNtZCwgc3RyKSwgZW52PWVudiBvciBvcy5lbnZpcm9uKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICBlcnIuc2VlaygwKQogICAgICAgICBpZiBwcmludGVycjoKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMiICUgZXJyLnJlYWQoKSkKICAgICAgICAgcmFpc2UgZQogCiAgICAgZXJyLnNlZWsoMCkKLSAgICBvdXRwdXQgPSBlcnIucmVhZCgpCi0gICAgbG9nZ2VyLmRlYnVnKCJvdXRwdXQ6ICVzIiAlIG91dHB1dCApCisgICAgb3V0cHV0ID0gZXJyLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICBsb2dnZXIuZGVidWcoIm91dHB1dDogJXMiICUgb3V0cHV0LnJlcGxhY2UoY2hyKDApLCAnXFwwJykpCiAgICAgcmV0dXJuIG91dHB1dAogCiBkZWYgYWN0aW9uX2luaXQoY29uZiwgYXJncyk6CkBAIC00MjYsNyArNDMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgcmVwbGFjZSAtLWdyYWZ0ICVzICVzJyAlIChzdGFydCwgc3RhcnRyZXYpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJ1bmNtZChtZXJnZSkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycm9yOgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnJydNZXJnaW5nIGNvbXBvbmVudCByZXBvc2l0b3J5IGhpc3RvcnkgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3RzLgogSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGNvbW1pdCBhbnl3YXkgYWZ0ZXIgcmVzb2x2aW5nIHRoZXNlIGNvbmZsaWN0cy4KIApAQCAtNDc4LDMyICs0ODIsMzIgQEAKICAgICAgICAgc3lzLmV4aXQoMSkKIAogZGVmIGNoZWNrX3BhdGNoKHBhdGNoZmlsZSk6Ci0gICAgZiA9IG9wZW4ocGF0Y2hmaWxlKQorICAgIGYgPSBvcGVuKHBhdGNoZmlsZSwgJ3JiJykKICAgICBsbiA9IGYucmVhZGxpbmUoKQogICAgIG9mID0gTm9uZQogICAgIGluX3BhdGNoID0gRmFsc2UKICAgICBiZXlvbmRfbXNnID0gRmFsc2UKLSAgICBwcmVfYnVmID0gJycKKyAgICBwcmVfYnVmID0gYicnCiAgICAgd2hpbGUgbG46CiAgICAgICAgIGlmIG5vdCBiZXlvbmRfbXNnOgotICAgICAgICAgICAgaWYgbG4gPT0gJy0tLVxuJzoKKyAgICAgICAgICAgIGlmIGxuID09IGInLS0tXG4nOgogICAgICAgICAgICAgICAgIGlmIG5vdCBvZjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpbl9wYXRjaCA9IEZhbHNlCiAgICAgICAgICAgICAgICAgYmV5b25kX21zZyA9IFRydWUKLSAgICAgICAgICAgIGVsaWYgbG4uc3RhcnRzd2l0aCgnLS0tICcpOgorICAgICAgICAgICAgZWxpZiBsbi5zdGFydHN3aXRoKGInLS0tICcpOgogICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIGRpZmYgaW4gdGhlIGNvbW1pdCBtZXNzYWdlCiAgICAgICAgICAgICAgICAgaW5fcGF0Y2ggPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgbm90IG9mOgogICAgICAgICAgICAgICAgICAgICBwcmludCgnV0FSTklORzogJXMgY29udGFpbnMgYSBkaWZmIGluIGl0cyBjb21taXQgbWVzc2FnZSwgaW5kZW50aW5nIHRvIGF2b2lkIGZhaWx1cmUgZHVyaW5nIGFwcGx5JyAlIHBhdGNoZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgb2YgPSBvcGVuKHBhdGNoZmlsZSArICcudG1wJywgJ3cnKQorICAgICAgICAgICAgICAgICAgICBvZiA9IG9wZW4ocGF0Y2hmaWxlICsgJy50bXAnLCAnd2InKQogICAgICAgICAgICAgICAgICAgICBvZi53cml0ZShwcmVfYnVmKQotICAgICAgICAgICAgICAgICAgICBwcmVfYnVmID0gJycKLSAgICAgICAgICAgIGVsaWYgaW5fcGF0Y2ggYW5kIG5vdCBsblswXSBpbiAnKy1AIFxuXHInOgorICAgICAgICAgICAgICAgICAgICBwcmVfYnVmID0gYicnCisgICAgICAgICAgICBlbGlmIGluX3BhdGNoIGFuZCBub3QgbG5bMF0gaW4gYicrLUAgXG5ccic6CiAgICAgICAgICAgICAgICAgaW5fcGF0Y2ggPSBGYWxzZQogICAgICAgICBpZiBvZjoKICAgICAgICAgICAgIGlmIGluX3BhdGNoOgotICAgICAgICAgICAgICAgIG9mLndyaXRlKCcgJyArIGxuKQorICAgICAgICAgICAgICAgIG9mLndyaXRlKGInICcgKyBsbikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgb2Yud3JpdGUobG4pCiAgICAgICAgIGVsc2U6CkBAIC01MTYsNyArNTIwLDcgQEAKIAogZGVmIGRyb3BfdG9fc2hlbGwod29ya2Rpcj1Ob25lKToKICAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpOgotICAgICAgICBwcmludCAiTm90IGEgVFRZIHNvIGNhbid0IGRyb3AgdG8gc2hlbGwgZm9yIHJlc29sdXRpb24sIGV4aXRpbmcuIgorICAgICAgICBwcmludCgiTm90IGEgVFRZIHNvIGNhbid0IGRyb3AgdG8gc2hlbGwgZm9yIHJlc29sdXRpb24sIGV4aXRpbmcuIikKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBzaGVsbCA9IG9zLmVudmlyb24uZ2V0KCdTSEVMTCcsICdiYXNoJykKQEAgLTUyNiw3ICs1MzAsNyBAQAogICAgICAgICAgICcgICAgICAgZXhpdCAxICAtLSBhYm9ydFxuJyAlIHNoZWxsKTsKICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoW3NoZWxsXSwgY3dkPXdvcmtkaXIpCiAgICAgaWYgcmV0ICE9IDA6Ci0gICAgICAgIHByaW50ICJBYm9ydGluZyIKKyAgICAgICAgcHJpbnQoIkFib3J0aW5nIikKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTYxMCw4ICs2MTQsMTIgQEAKIGRlZiBhY3Rpb25fdXBkYXRlKGNvbmYsIGFyZ3MpOgogICAgICIiIgogICAgICAgICB1cGRhdGUgdGhlIGNvbXBvbmVudCByZXBvcwotICAgICAgICBnZW5lcmF0ZSB0aGUgcGF0Y2ggbGlzdAotICAgICAgICBhcHBseSB0aGUgZ2VuZXJhdGVkIHBhdGNoZXMKKyAgICAgICAgZWl0aGVyOgorICAgICAgICAgICBnZW5lcmF0ZSB0aGUgcGF0Y2ggbGlzdAorICAgICAgICAgICBhcHBseSB0aGUgZ2VuZXJhdGVkIHBhdGNoZXMKKyAgICAgICAgb3I6CisgICAgICAgICAgIHJlLWNyZWF0ZXMgdGhlIGVudGlyZSBjb21wb25lbnQgaGlzdG9yeSBhbmQgbWVyZ2VzIHRoZW0KKyAgICAgICAgICAgaW50byB0aGUgY3VycmVudCBicmFuY2ggd2l0aCBhIG1lcmdlIGNvbW1pdAogICAgICIiIgogICAgIGNvbXBvbmVudHMgPSBbYXJnLnNwbGl0KCc6JylbMF0gZm9yIGFyZyBpbiBhcmdzWzE6XV0KICAgICByZXZpc2lvbnMgPSB7fQpAQCAtNjI0LDEwICs2MzIsMjIgQEAKICAgICAjIG1ha2Ugc3VyZSBjb21ibyByZXBvIGlzIGNsZWFuCiAgICAgY2hlY2tfcmVwb19jbGVhbihvcy5nZXRjd2QoKSkKIAotICAgIGltcG9ydCB1dWlkCi0gICAgcGF0Y2hfZGlyID0gInBhdGNoLSVzIiAlIHV1aWQudXVpZDQoKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRjaF9kaXIpOgotICAgICAgICBvcy5ta2RpcihwYXRjaF9kaXIpCisgICAgIyBDaGVjayB3aGV0aGVyIHdlIGtlZXAgdGhlIGNvbXBvbmVudCBoaXN0b3JpZXMuIE11c3QgYmUKKyAgICAjIHNldCBlaXRoZXIgdmlhIC0taGlzdG9yeSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIG9yIGNvbnNpc3RlbnRseQorICAgICMgaW4gY29tYm8tbGF5ZXIuY29uZi4gTWl4aW5nIG1vZGVzIGlzIChjdXJyZW50bHksIGFuZCBwcm9iYWJseQorICAgICMgcGVybWFuZW50bHkgYmVjYXVzZSBpdCB3b3VsZCBiZSBjb21wbGljYXRlZCkgbm90IHN1cHBvcnRlZC4KKyAgICBpZiBjb25mLmhpc3Rvcnk6CisgICAgICAgIGhpc3RvcnkgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgaGlzdG9yeSA9IE5vbmUKKyAgICAgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICAgICAgcmVwb19oaXN0b3J5ID0gcmVwby5nZXQoJ2hpc3RvcnknLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIGhpc3RvcnkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBoaXN0b3J5ID0gcmVwb19oaXN0b3J5CisgICAgICAgICAgICBlbGlmIGhpc3RvcnkgIT0gcmVwb19oaXN0b3J5OgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJ2hpc3RvcnknIHByb3BlcnR5IGlzIHNldCBpbmNvbnNpc3RlbnRseSIpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICMgU3RlcCAxOiB1cGRhdGUgdGhlIGNvbXBvbmVudCByZXBvcwogICAgIGlmIGNvbmYubm9wdWxsOgpAQCAtNjM1LDYgKzY1NSwxNyBAQAogICAgIGVsc2U6CiAgICAgICAgIGFjdGlvbl9wdWxsKGNvbmYsIFsnYXJnMCddICsgY29tcG9uZW50cykKIAorICAgIGlmIGhpc3Rvcnk6CisgICAgICAgIHVwZGF0ZV93aXRoX2hpc3RvcnkoY29uZiwgY29tcG9uZW50cywgcmV2aXNpb25zLCByZXBvcykKKyAgICBlbHNlOgorICAgICAgICB1cGRhdGVfd2l0aF9wYXRjaGVzKGNvbmYsIGNvbXBvbmVudHMsIHJldmlzaW9ucywgcmVwb3MpCisKK2RlZiB1cGRhdGVfd2l0aF9wYXRjaGVzKGNvbmYsIGNvbXBvbmVudHMsIHJldmlzaW9ucywgcmVwb3MpOgorICAgIGltcG9ydCB1dWlkCisgICAgcGF0Y2hfZGlyID0gInBhdGNoLSVzIiAlIHV1aWQudXVpZDQoKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRjaF9kaXIpOgorICAgICAgICBvcy5ta2RpcihwYXRjaF9kaXIpCisKICAgICBmb3IgbmFtZSBpbiByZXBvczoKICAgICAgICAgcmV2aXNpb24gPSByZXZpc2lvbnMuZ2V0KG5hbWUsIE5vbmUpCiAgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCkBAIC03MTEsNiArNzQyLDIxIEBACiAgICAgcnVuY21kKCJybSAtcmYgJXMiICUgcGF0Y2hfZGlyKQogCiAgICAgIyBTdGVwIDc6IGNvbW1pdCB0aGUgdXBkYXRlZCBjb25maWcgZmlsZSBpZiBpdCdzIGJlaW5nIHRyYWNrZWQKKyAgICBjb21taXRfY29uZl9maWxlKGNvbmYsIGNvbXBvbmVudHMpCisKK2RlZiBjb25mX2NvbW1pdF9tc2coY29uZiwgY29tcG9uZW50cyk6CisgICAgIyBjcmVhdGUgdGhlICJjb21wb25lbnRzIiBzdHJpbmcKKyAgICBjb21wb25lbnRfc3RyID0gImFsbCBjb21wb25lbnRzIgorICAgIGlmIGxlbihjb21wb25lbnRzKSA+IDA6CisgICAgICAgICMgb3RoZXJ3aXNlIHRlbGwgd2hpY2ggY29tcG9uZW50cyB3ZXJlIGFjdHVhbGx5IGNoYW5nZWQKKyAgICAgICAgY29tcG9uZW50X3N0ciA9ICIsICIuam9pbihjb21wb25lbnRzKQorCisgICAgIyBleHBhbmQgdGhlIHRlbXBsYXRlIHdpdGgga25vd24gdmFsdWVzCisgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZShjb25mLmNvbW1pdF9tc2dfdGVtcGxhdGUpCisgICAgbXNnID0gdGVtcGxhdGUuc3Vic3RpdHV0ZShjb21wb25lbnRzID0gY29tcG9uZW50X3N0cikKKyAgICByZXR1cm4gbXNnCisKK2RlZiBjb21taXRfY29uZl9maWxlKGNvbmYsIGNvbXBvbmVudHMsIGNvbW1pdD1UcnVlKToKICAgICByZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKGNvbmYuY29uZmZpbGUpCiAgICAgdHJ5OgogICAgICAgICBvdXRwdXQgPSBydW5jbWQoImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gJXMiICUgcmVscGF0aCwgcHJpbnRlcnI9RmFsc2UpCkBAIC03MTgsMjMgKzc2NCwxNSBAQAogICAgICAgICAjIE91dHNpZGUgdGhlIHJlcG9zaXRvcnkKICAgICAgICAgb3V0cHV0ID0gTm9uZQogICAgIGlmIG91dHB1dDoKLSAgICAgICAgbG9nZ2VyLmluZm8oIkNvbW1pdHRpbmcgdXBkYXRlZCBjb25maWd1cmF0aW9uIGZpbGUiKQogICAgICAgICBpZiBvdXRwdXQubHN0cmlwKCkuc3RhcnRzd2l0aCgiTSIpOgotCi0gICAgICAgICAgICAjIGNyZWF0ZSB0aGUgImNvbXBvbmVudHMiIHN0cmluZwotICAgICAgICAgICAgY29tcG9uZW50X3N0ciA9ICJhbGwgY29tcG9uZW50cyIKLSAgICAgICAgICAgIGlmIGxlbihjb21wb25lbnRzKSA+IDA6Ci0gICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgdGVsbCB3aGljaCBjb21wb25lbnRzIHdlcmUgYWN0dWFsbHkgY2hhbmdlZAotICAgICAgICAgICAgICAgIGNvbXBvbmVudF9zdHIgPSAiLCAiLmpvaW4oY29tcG9uZW50cykKLQotICAgICAgICAgICAgIyBleHBhbmQgdGhlIHRlbXBsYXRlIHdpdGgga25vd24gdmFsdWVzCi0gICAgICAgICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlKGNvbmYuY29tbWl0X21zZ190ZW1wbGF0ZSkKLSAgICAgICAgICAgIHJhd19tc2cgPSB0ZW1wbGF0ZS5zdWJzdGl0dXRlKGNvbXBvbmVudHMgPSBjb21wb25lbnRfc3RyKQotCi0gICAgICAgICAgICAjIHNhbml0aXplIHRoZSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGluIGNvbW1hbmQgbGluZQotICAgICAgICAgICAgbXNnID0gcmF3X21zZy5yZXBsYWNlKCciJywgJ1xcIicpCi0KLSAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGNvbW1pdCAtbSAiJXMiICVzJyAlIChtc2csIHJlbHBhdGgpKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvbW1pdHRpbmcgdXBkYXRlZCBjb25maWd1cmF0aW9uIGZpbGUiKQorICAgICAgICAgICAgaWYgY29tbWl0OgorICAgICAgICAgICAgICAgIG1zZyA9IGNvbmZfY29tbWl0X21zZyhjb25mLCBjb21wb25lbnRzKQorICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGNvbW1pdCAtbScuc3BsaXQoKSArIFttc2csIHJlbHBhdGhdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCBhZGQgJXMnICUgcmVscGF0aCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCiAKIGRlZiBhcHBseV9wYXRjaGxpc3QoY29uZiwgcmVwb3MpOgogICAgICIiIgpAQCAtODUyLDYgKzg5MCw0MTggQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKHBhdGNoX2ZpbGVuYW1lKQogCitkZWYgdXBkYXRlX3dpdGhfaGlzdG9yeShjb25mLCBjb21wb25lbnRzLCByZXZpc2lvbnMsIHJlcG9zKToKKyAgICAnJydVcGRhdGUgYWxsIGNvbXBvbmVudHMgd2l0aCBmdWxsIGhpc3RvcnkuCisKKyAgICBXb3JrcyBieSBpbXBvcnRpbmcgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYSBjb21wb25lbnQncworICAgIGN1cnJlbnQgaGVhZCByZXZpc2lvbi4gIElmIHRob3NlIGNvbW1pdHMgYXJlIHJvb3RlZCBpbiBhbiBhbHJlYWR5CisgICAgaW1wb3J0ZWQgY29tbWl0LCB0aGVpciBjb250ZW50IGdldHMgbWl4ZWQgd2l0aCB0aGUgY29udGVudCBvZiB0aGUKKyAgICBjb21iaW5lZCByZXBvIG9mIHRoYXQgY29tbWl0IChuZXcgb3IgbW9kaWZpZWQgZmlsZXMgb3ZlcndyaXR0ZW4sCisgICAgcmVtb3ZlZCBmaWxlcyByZW1vdmVkKS4KKworICAgIFRoZSBsYXN0IGNvbW1pdCBpcyBhbiBhcnRpZmljaWFsIG1lcmdlIGNvbW1pdCB0aGF0IG1lcmdlcyBhbGwgdGhlCisgICAgdXBkYXRlZCBjb21wb25lbnRzIGludG8gdGhlIGNvbWJpbmVkIHJlcG9zaXRvcnkuCisKKyAgICBUaGUgSEVBRCByZWYgb25seSBnZXRzIHVwZGF0ZWQgYXQgdGhlIHZlcnkgZW5kLiBBbGwgaW50ZXJtZWRpYXRlIHdvcmsKKyAgICBoYXBwZW5zIGluIGEgd29ya3RyZWUgd2hpY2ggd2lsbCBnZXQgZ2FyYmFnZSBjb2xsZWN0ZWQgYnkgZ2l0IGV2ZW50dWFsbHkKKyAgICBhZnRlciBhIGZhaWx1cmUuCisgICAgJycnCisgICAgIyBSZW1lbWJlciBjdXJyZW50IEhFQUQgYW5kIHdoYXQgd2UgbmVlZCB0byBhZGQgdG8gaXQuCisgICAgaGVhZCA9IHJ1bmNtZCgiZ2l0IHJldi1wYXJzZSBIRUFEIikuc3RyaXAoKQorICAgIGFkZGl0aW9uYWxfaGVhZHMgPSB7fQorCisgICAgIyBUcmFjayB0aGUgbWFwcGluZyBiZXR3ZWVuIG9yaWdpbmFsIGNvbW1pdCBhbmQgY29tbWl0IGluIHRoZQorICAgICMgY29tYmluZWQgcmVwby4gV2UgZG8gbm90IGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBjb21wb25lbnRzLAorICAgICMgYmVjYXVzZSBjb21taXQgaGFzaGVzIGFyZSBkaWZmZXJlbnQgYW55d2F5LiBPZnRlbiB3ZSBjYW4KKyAgICAjIHNraXAgZmluZF9yZXZzKCkgZW50aXJlbHkgKGZvciBleGFtcGxlLCB3aGVuIGFsbCBuZXcgY29tbWl0cworICAgICMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbGFzdCBpbXBvcnRlZCByZXZpc2lvbikuCisgICAgIworICAgICMgVXNpbmcgImhlYWQiICh0eXBpY2FsbHkgdGhlIG1lcmdlIGNvbW1pdCkgaW5zdGVhZCBvZiB0aGUgYWN0dWFsCisgICAgIyBjb21taXQgZm9yIHRoZSBjb21wb25lbnQgbGVhZHMgdG8gYSBuaWNlciBoaXN0b3J5IGluIHRoZSBjb21iaW5lZAorICAgICMgcmVwby4KKyAgICBvbGQybmV3X3JldnMgPSB7fQorICAgIGZvciBuYW1lIGluIHJlcG9zOgorICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICByZXZpc2lvbiA9IHJlcG9bJ2xhc3RfcmV2aXNpb24nXQorICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIG9sZDJuZXdfcmV2c1tyZXZpc2lvbl0gPSBoZWFkCisKKyAgICBkZWYgYWRkX3AocGFyZW50cyk6CisgICAgICAgICcnJ0luc2VydCAtcCBiZWZvcmUgZWFjaCBlbnRyeS4nJycKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBwIGluIHBhcmVudHM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnLXAnKQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQocCkKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMKKworICAgICMgRG8gYWxsIGludGVybWVkaWF0ZSB3b3JrIHdpdGggYSBzZXBhcmF0ZSB3b3JrIGRpciBhbmQgaW5kZXgsCisgICAgIyBjaG9zZW4gdmlhIGVudiB2YXJpYWJsZXMgKGNhbid0IHVzZSAiZ2l0IHdvcmt0cmVlIiwgaXQgaXMgdG9vCisgICAgIyBuZXcpLiBUaGlzIGlzIHVzZWZ1bCAobm8gY2hhbmdlcyB0byBjdXJyZW50IHdvcmsgdHJlZSB1bmxlc3MgdGhlCisgICAgIyB1cGRhdGUgc3VjY2VlZHMpIGFuZCByZXF1aXJlZCAob3RoZXJ3aXNlIHdlIGVuZCB1cCB0ZW1wb3JhcmlseQorICAgICMgcmVtb3ZpbmcgdGhlIGNvbWJvLWxheWVyIGhvb2tzIHRoYXQgd2UgY3VycmVudGx5IHVzZSB3aGVuCisgICAgIyBpbXBvcnRpbmcgYSBuZXcgY29tcG9uZW50KS4KKyAgICAjCisgICAgIyBOb3QgY2xlYW5lZCB1cCBhZnRlciBhIGZhaWx1cmUgYXQgdGhlIG1vbWVudC4KKyAgICB3ZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAiLmdpdCIsICJjb21iby1sYXllciIpCisgICAgd2luZGV4ID0gd2RpciArICIuaW5kZXgiCisgICAgaWYgb3MucGF0aC5pc2Rpcih3ZGlyKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZSh3ZGlyKQorICAgIG9zLm1rZGlyKHdkaXIpCisgICAgd2VudiA9IGNvcHkuZGVlcGNvcHkob3MuZW52aXJvbikKKyAgICB3ZW52WyJHSVRfV09SS19UUkVFIl0gPSB3ZGlyCisgICAgd2VudlsiR0lUX0lOREVYX0ZJTEUiXSA9IHdpbmRleAorICAgICMgVGhpcyBvbmUgdHVybmVkIG91dCB0byBiZSBuZWVkZWQgaW4gcHJhY3RpY2UuCisgICAgd2VudlsiR0lUX09CSkVDVF9ESVJFQ1RPUlkiXSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgIi5naXQiLCAib2JqZWN0cyIpCisgICAgd2FyZ3MgPSB7ImRlc3RkaXIiOiB3ZGlyLCAiZW52Ijogd2Vudn0KKworICAgIGZvciBuYW1lIGluIHJlcG9zOgorICAgICAgICByZXZpc2lvbiA9IHJldmlzaW9ucy5nZXQobmFtZSwgTm9uZSkKKyAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgbGRpciA9IHJlcG9bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgZGVzdF9kaXIgPSByZXBvWydkZXN0X2RpciddCisgICAgICAgIGJyYW5jaCA9IHJlcG8uZ2V0KCdicmFuY2gnLCAibWFzdGVyIikKKyAgICAgICAgaG9vayA9IHJlcG8uZ2V0KCdob29rJywgTm9uZSkKKyAgICAgICAgbGFyZ3MgPSB7ImRlc3RkaXIiOiBsZGlyLCAiZW52IjogTm9uZX0KKyAgICAgICAgZmlsZV9pbmNsdWRlID0gcmVwby5nZXQoJ2ZpbGVfZmlsdGVyJywgJycpLnNwbGl0KCkKKyAgICAgICAgZmlsZV9pbmNsdWRlLnNvcnQoKSAjIG1ha2Ugc3VyZSB0aGF0IHNob3J0IGVudHJpZXMgbGlrZSAnLicgY29tZSBmaXJzdC4KKyAgICAgICAgZmlsZV9leGNsdWRlID0gcmVwby5nZXQoJ2ZpbGVfZXhjbHVkZScsICcnKS5zcGxpdCgpCisKKyAgICAgICAgZGVmIGluY2x1ZGVfZmlsZShmaWxlKToKKyAgICAgICAgICAgIGlmIG5vdCBmaWxlX2luY2x1ZGU6CisgICAgICAgICAgICAgICAgIyBObyBleHBsaWNpdCBmaWx0ZXIgc2V0LCBpbmNsdWRlIGZpbGUuCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGZvciBmaWx0ZXIgaW4gZmlsZV9pbmNsdWRlOgorICAgICAgICAgICAgICAgIGlmIGZpbHRlciA9PSAnLic6CisgICAgICAgICAgICAgICAgICAgICMgQW5vdGhlciBzcGVjaWFsIGNhc2U6IGluY2x1ZGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIHRodXMgYWxsIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguY29tbW9ucHJlZml4KChmaWx0ZXIsIGZpbGUpKSA9PSBmaWx0ZXI6CisgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZWQgaW4gZGlyZWN0b3J5IG9yIGRpcmVjdCBmaWxlIG1hdGNoLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIHdpbGRjYXJkIG1hdGNoICp3aXRoKiBhbGxvd2luZyAqIHRvIG1hdGNoIC8sIGkuZS4KKyAgICAgICAgICAgICAgICAjIHNyYy8qLmMgZG9lcyBtYXRjaCBzcmMvZm9vYmFyLyouYy4gVGhhdCdzIG5vdCBob3cgaXQgaXMgZG9uZSBlbHNld2hlcmUKKyAgICAgICAgICAgICAgICAjIHdoZW4gcGFzc2luZyB0aGUgZmlsdGVyaW5nIHRvICJnaXQgYXJjaGl2ZSIsIGJ1dCBpdCBpcyB1bmNsZWFyIHdoYXQKKyAgICAgICAgICAgICAgICAjIHRoZSBpbnRlbmRlZCBzZW1hbnRpYyBpcyAodGhlIGNvbW1lbnQgb24gZmlsZV9leGNsdWRlIHRoYXQgImFwcGVuZCBhICogd2lsZGNhcmQKKyAgICAgICAgICAgICAgICAjIGF0IHRoZSBlbmQiIHRvIG1hdGNoIHRoZSBmdWxsIGNvbnRlbnQgb2YgYSBkaXJlY3RvcmllcyBpbXBsaWVzIHRoYXQKKyAgICAgICAgICAgICAgICAjIHNsYXNoZXMgYXJlIGluZGVlZCBub3Qgc3BlY2lhbCksIHNvIGhlcmUgd2Ugc2ltcGx5IGRvIHdoYXQncyBlYXN5IHRvCisgICAgICAgICAgICAgICAgIyBpbXBsZW1lbnQgaW4gUHl0aG9uLgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnZm5tYXRjaCglcywgJXMpJyAlIChmaWxlLCBmaWx0ZXIpKQorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZmlsZSwgZmlsdGVyKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRlZiBleGNsdWRlX2ZpbGUoZmlsZSk6CisgICAgICAgICAgICBmb3IgZmlsdGVyIGluIGZpbGVfZXhjbHVkZToKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZpbGUsIGZpbHRlcik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBkZWYgZmlsZV9maWx0ZXIoZmlsZXMpOgorICAgICAgICAgICAgJycnQ2xlYW4gdXAgZmlsZSBsaXN0IHNvIHRoYXQgb25seSBpbmNsdWRlZCBmaWxlcyByZW1haW4uJycnCisgICAgICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgICAgIHdoaWxlIGluZGV4IDwgbGVuKGZpbGVzKToKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZXNbaW5kZXhdCisgICAgICAgICAgICAgICAgaWYgbm90IGluY2x1ZGVfZmlsZShmaWxlKSBvciBleGNsdWRlX2ZpbGUoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGRlbCBmaWxlc1tpbmRleF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAxCisKKworICAgICAgICAjIEdlbmVyYXRlIHRoZSByZXZpc2lvbiBsaXN0LgorICAgICAgICBsb2dnZXIuaW5mbygiQW5hbHl6aW5nIGNvbW1pdHMgZnJvbSAlcy4uLiIgJSBuYW1lKQorICAgICAgICB0b3BfcmV2aXNpb24gPSByZXZpc2lvbiBvciBicmFuY2gKKyAgICAgICAgaWYgbm90IGNoZWNrX3Jldl9icmFuY2gobmFtZSwgbGRpciwgdG9wX3JldmlzaW9uLCBicmFuY2gpOgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBsYXN0X3JldmlzaW9uID0gcmVwb1snbGFzdF9yZXZpc2lvbiddCisgICAgICAgIHJldl9saXN0X2FyZ3MgPSAiLS1mdWxsLWhpc3RvcnkgLS1zcGFyc2UgLS10b3BvLW9yZGVyIC0tcmV2ZXJzZSIKKyAgICAgICAgaWYgbm90IGxhc3RfcmV2aXNpb246CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiV2FybmluZzogbGFzdF9yZXZpc2lvbiBvZiBjb21wb25lbnQgJXMgaXMgbm90IHNldCwgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY29tbWl0IiAlIG5hbWUpCisgICAgICAgICAgICByZXZfbGlzdF9hcmdzID0gcmV2X2xpc3RfYXJncyArICcgJyArIHRvcF9yZXZpc2lvbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGNoZWNrX3Jldl9icmFuY2gobmFtZSwgbGRpciwgbGFzdF9yZXZpc2lvbiwgYnJhbmNoKToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgcmV2X2xpc3RfYXJncyA9ICIlcyAlcy4uJXMiICUgKHJldl9saXN0X2FyZ3MsIGxhc3RfcmV2aXNpb24sIHRvcF9yZXZpc2lvbikKKworICAgICAgICAgICAgIyBCeSBkZWZpbml0aW9uLCB0aGUgY3VycmVudCBIRUFEIGNvbnRhaW5zIHRoZSBsYXRlc3QgaW1wb3J0ZWQKKyAgICAgICAgICAgICMgY29tbWl0IG9mIGVhY2ggY29tcG9uZW50LiBXZSB1c2UgdGhhdCBhcyBpbml0aWFsIG1hcHBpbmcgZXZlbgorICAgICAgICAgICAgIyB0aG91Z2ggdGhlIGNvbW1pdHMgZG8gbm90IG1hdGNoIGV4YWN0bHkgYmVjYXVzZQorICAgICAgICAgICAgIyBhKSBpdCBhbHdheXMgd29ya3MgKGluIGNvbnRyYXN0IHRvIGZpbmRfcmV2cywgd2hpY2ggcmVsaWVzIG9uIHNwZWNpYWwKKyAgICAgICAgICAgICMgICAgY29tbWl0IG1lc3NhZ2VzKQorICAgICAgICAgICAgIyBiKSBpdCBpcyBmYXN0ZXIgdGhhbiBmaW5kX3JldnMsIHdoaWNoIHdpbGwgb25seSBiZSBjYWxsZWQgb24gZGVtYW5kCisgICAgICAgICAgICAjICAgIGFuZCBjYW4gYmUgc2tpcHBlZCBlbnRpcmVseSBpbiBtb3N0IGNhc2VzCisgICAgICAgICAgICAjIGMpIGxhc3QgYnV0IG5vdCBsZWFzdCwgdGhlIGNvbWJpbmVkIGhpc3RvcnkgbG9va3MgbmljZXIgd2hlbiBhbGwKKyAgICAgICAgICAgICMgICAgbmV3IGNvbW1pdHMgYXJlIHJvb3RlZCBpbiB0aGUgc2FtZSBtZXJnZSBjb21taXQKKyAgICAgICAgICAgIG9sZDJuZXdfcmV2c1tsYXN0X3JldmlzaW9uXSA9IGhlYWQKKworICAgICAgICAjIFdlIGNhcmUgYWJvdXQgYWxsIGNvbW1pdHMgKC0tZnVsbC1oaXN0b3J5IGFuZCAtLXNwYXJzZSkgYW5kCisgICAgICAgICMgd2Ugd2FudCByZWNvbnN0cnVjdCB0aGUgdG9wb2xvZ3kgYW5kIHRodXMgZG8gbm90IGNhcmUKKyAgICAgICAgIyBhYm91dCBvcmRlcmluZyBieSB0aW1lICgtLXRvcG8tb3JkZXIpLiBXZSBhc2sgZm9yIHRoZSBvbmVzCisgICAgICAgICMgd2UgbmVlZCB0byBpbXBvcnQgZmlyc3QgdG8gYmUgbGlzdGVkIGZpcnN0ICgtLXJldmVyc2UpLgorICAgICAgICByZXZzID0gcnVuY21kKCJnaXQgcmV2LWxpc3QgJXMiICUgcmV2X2xpc3RfYXJncywgKipsYXJncykuc3BsaXQoKQorICAgICAgICBsb2dnZXIuZGVidWcoIlRvIGJlIGltcG9ydGVkOiAlcyIgJSByZXZzKQorICAgICAgICAjIE5vdyAncmV2cycgY29udGFpbnMgYWxsIHJldmlzaW9ucyByZWFjaGFibGUgZnJvbSB0aGUgdG9wIHJldmlzaW9uLgorICAgICAgICAjIEFsbCByZXZpc2lvbnMgZGVyaXZlZCBmcm9tIHRoZSAnbGFzdF9yZXZpc2lvbicgZGVmaW5pdGVseSBhcmUgbmV3LAorICAgICAgICAjIHdoZXJlYXMgdGhlIG90aGVycyBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gaW1wb3J0ZWQgYmVmb3JlLiBGb3IKKyAgICAgICAgIyBhIGxpbmVhciBoaXN0b3J5IGluIHRoZSBjb21wb25lbnQsIHRoYXQgc2Vjb25kIHNldCB3aWxsIGJlIGVtcHR5LgorICAgICAgICAjIFRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSwgd2UgYWxzbyBnZXQgdGhlIHNob3J0ZXIgbGlzdAorICAgICAgICAjIG9mIHJldmlzaW9ucyBzdGFydGluZyBhdCB0aGUgYW5jZXN0b3IuCisgICAgICAgIGlmIGxhc3RfcmV2aXNpb246CisgICAgICAgICAgICBhbmNlc3Rvcl9yZXZzID0gcnVuY21kKCJnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoICVzIiAlIHJldl9saXN0X2FyZ3MsICoqbGFyZ3MpLnNwbGl0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFuY2VzdG9yX3JldnMgPSBbXQorICAgICAgICBsb2dnZXIuZGVidWcoIkFuY2VzdG9yczogJXMiICUgYW5jZXN0b3JfcmV2cykKKworICAgICAgICAjIE5vdyBpbXBvcnQgZWFjaCByZXZpc2lvbi4KKyAgICAgICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjb21taXRzIGZyb20gJXMuLi4iICUgbmFtZSkKKyAgICAgICAgZGVmIGltcG9ydF9yZXYocmV2KToKKyAgICAgICAgICAgIGdsb2JhbCBzY2FubmVkX3JldnMKKworICAgICAgICAgICAgIyBJZiBpdCBpcyBwYXJ0IG9mIHRoZSBuZXcgY29tbWl0cywgd2UgZGVmaW5pdGVseSBuZWVkCisgICAgICAgICAgICAjIHRvIGltcG9ydCBpdC4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2ssIHdlIG1pZ2h0IGhhdmUKKyAgICAgICAgICAgICMgaW1wb3J0ZWQgaXQgYmVmb3JlLiBJZiBpdCB3YXMgaW1wb3J0ZWQgYW5kIHdlIG1lcmVseQorICAgICAgICAgICAgIyBmYWlsIHRvIGZpbmQgaXQgYmVjYXVzZSBjb21taXQgbWVzc2FnZXMgZGlkIG5vdCB0cmFjaworICAgICAgICAgICAgIyB0aGUgbWFwcGluZywgdGhlbiB3ZSBlbmQgdXAgaW1wb3J0aW5nIGl0IGFnYWluLiBTbworICAgICAgICAgICAgIyBjb21iaW5lZCByZXBvcyB1c2luZyAidXBkYXRpbmcgd2l0aCBoaXN0b3J5IiByZWFsbHkgc2hvdWxkCisgICAgICAgICAgICAjIGVuYWJsZSB0aGUgIkZyb20gLi4uIHJldjoiIGNvbW1pdCBoZWFkZXIgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgIGlmIHJldiBub3QgaW4gYW5jZXN0b3JfcmV2cyBhbmQgcmV2IG5vdCBpbiBvbGQybmV3X3JldnMgYW5kIG5vdCBzY2FubmVkX3JldnM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJSZXZpc2lvbiAlcyB0cmlnZ2VycyBsb2cgYW5hbHlzaXMuIiAlIHJldikKKyAgICAgICAgICAgICAgICBmaW5kX3JldnMob2xkMm5ld19yZXZzLCBoZWFkKQorICAgICAgICAgICAgICAgIHNjYW5uZWRfcmV2cyA9IFRydWUKKyAgICAgICAgICAgIG5ld19yZXYgPSBvbGQybmV3X3JldnMuZ2V0KHJldiwgTm9uZSkKKyAgICAgICAgICAgIGlmIG5ld19yZXY6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld19yZXYKKworICAgICAgICAgICAgIyBJZiB0aGUgY29tbWl0IGlzIG5vdCBpbiB0aGUgb3JpZ2luYWwgbGlzdCBvZiByZXZpc2lvbnMKKyAgICAgICAgICAgICMgdG8gYmUgaW1wb3J0ZWQsIHRoZW4gaXQgbXVzdCBiZSBhIHBhcmVudCBvZiBvbmUgb2YgdGhvc2UKKyAgICAgICAgICAgICMgY29tbWl0cyBhbmQgaXQgd2FzIHNraXBwZWQgZHVyaW5nIGVhcmxpZXIgaW1wb3J0cyBvciBub3QKKyAgICAgICAgICAgICMgZm91bmQuIEltcG9ydGluZyBzdWNoIG1lcmdlIGNvbW1pdHMgbGVhZHMgdG8gdmVyeSB1Z2x5CisgICAgICAgICAgICAjIGhpc3RvcnkgKGxvbmcgY2FzY2FkZSBvZiBtZXJnZSBjb21taXRzIHdoaWNoIGFsbCBwb2ludAorICAgICAgICAgICAgIyB0byB0byBvbGRlciBjb21taXRzKSB3aGVuIHN3aXRjaGluZyBmcm9tICJ1cGRhdGUgdmlhCisgICAgICAgICAgICAjIHBhdGNoZXMiIHRvICJ1cGRhdGUgd2l0aCBoaXN0b3J5Ii4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2UgY2FuIGF2b2lkIGltcG9ydGluZyBtZXJnZSBjb21taXRzIGlmIGFsbCBub24tbWVyZ2UgY29tbWl0cworICAgICAgICAgICAgIyByZWFjaGFibGUgZnJvbSBpdCB3ZXJlIGFscmVhZHkgaW1wb3J0ZWQuIEluIHRoYXQgY2FzZSB3ZQorICAgICAgICAgICAgIyBjYW4gcm9vdCB0aGUgbmV3IGNvbW1pdHMgaW4gdGhlIGN1cnJlbnQgaGVhZCByZXZpc2lvbi4KKyAgICAgICAgICAgIGRlZiBpc19pbXBvcnRlZChwcmV2KToKKyAgICAgICAgICAgICAgICBwYXJlbnRzID0gcnVuY21kKCJnaXQgc2hvdyAtLW5vLXBhdGNoIC0tcHJldHR5PWZvcm1hdDolUCAiICsgcHJldiwgKipsYXJncykuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihwYXJlbnRzKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNfaW1wb3J0ZWQocCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJNdXN0IGltcG9ydCAlcyBiZWNhdXNlICVzIGlzIG5vdCBpbXBvcnRlZC4iICUgKHJldiwgcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBwcmV2IGluIG9sZDJuZXdfcmV2czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIk11c3QgaW1wb3J0ICVzIGJlY2F1c2UgJXMgaXMgbm90IGltcG9ydGVkLiIgJSAocmV2LCBwcmV2KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiByZXYgbm90IGluIHJldnMgYW5kIGlzX2ltcG9ydGVkKHJldik6CisgICAgICAgICAgICAgICAgb2xkMm5ld19yZXZzW3Jldl0gPSBoZWFkCisgICAgICAgICAgICAgICAgcmV0dXJuIGhlYWQKKworICAgICAgICAgICAgIyBOZWVkIHRvIGltcG9ydCByZXYuIENvbGxlY3Qgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBpdC4KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiSW1wb3J0aW5nICVzIiAlIHJldikKKyAgICAgICAgICAgIChwYXJlbnRzLCBhdXRob3JfbmFtZSwgYXV0aG9yX2VtYWlsLCBhdXRob3JfdGltZXN0YW1wLCBib2R5KSA9IFwKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBzaG93IC0tbm8tcGF0Y2ggLS1wcmV0dHk9Zm9ybWF0OiVQJXgwMCVhbiV4MDAlYWUleDAwJWF0JXgwMCVCICIgKyByZXYsICoqbGFyZ3MpLnNwbGl0KGNocigwKSkKKyAgICAgICAgICAgIHBhcmVudHMgPSBwYXJlbnRzLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIHBhcmVudHM6CisgICAgICAgICAgICAgICAgIyBBcmJpdHJhcmlseSBwaWNrIHRoZSBmaXJzdCBwYXJlbnQgYXMgYmFzZS4gSXQgbWF5IG9yIG1heSBub3QgaGF2ZQorICAgICAgICAgICAgICAgICMgYmVlbiBpbXBvcnRlZCBiZWZvcmUuIEZvciBleGFtcGxlLCBpZiB0aGUgcGFyZW50IGlzIGEgbWVyZ2UgY29tbWl0CisgICAgICAgICAgICAgICAgIyBhbmQgcHJldmlvdXNseSB0aGUgY29tYmluZWQgcmVwb3NpdG9yeSB1c2VkIHBhdGNoaW5nIGFzIHVwZGF0ZQorICAgICAgICAgICAgICAgICMgbWV0aG9kLCB0aGVuIHRoZSBhY3R1YWwgbWVyZ2UgY29tbWl0IHBhcmVudCBuZXZlciB3YXMgaW1wb3J0ZWQuCisgICAgICAgICAgICAgICAgIyBUbyBjb3ZlciB0aGlzLCBXZSByZWN1cnNpdmVseSBpbXBvcnQgcGFyZW50cy4KKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRzWzBdCisgICAgICAgICAgICAgICAgbmV3X3BhcmVudCA9IGltcG9ydF9yZXYocGFyZW50KQorICAgICAgICAgICAgICAgICMgQ2xlYW4gaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4gVE9ETzogY2FuIHdlIGNvbWJpbmUgdGhpcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgIyBuZXh0IGludG8gb25lIGNvbW1hbmQgd2l0aCBsZXNzIGZpbGUgSU8/CisgICAgICAgICAgICAgICAgIyAiZ2l0IHJlc2V0IC0taGFyZCIgZG9lcyBub3Qgd29yaywgaXQgY2hhbmdlcyBIRUFEIG9mIHRoZSBwYXJlbnQKKyAgICAgICAgICAgICAgICAjIHJlcG8sIHdoaWNoIHdlIHdhbnRlZCB0byBhdm9pZC4gUHJvYmFibHkgbmVlZCB0byBrZWVwCisgICAgICAgICAgICAgICAgIyB0cmFjayBvZiB0aGUgcmV2IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGluZGV4IGFuZCB1c2UgYXBwbHlfY29tbWl0KCkuCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgcm0gLXEgLS1pZ25vcmUtdW5tYXRjaCAtcmYgLiIsICoqd2FyZ3MpCisgICAgICAgICAgICAgICAgIyBVcGRhdGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSB0byBtYXRjaCB0aGUgcGFyZW50LgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGNoZWNrb3V0IC1xIC1mICVzIC4iICUgbmV3X3BhcmVudCwgKip3YXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gTm9uZQorICAgICAgICAgICAgICAgICMgQ2xlYW4gaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4KKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBybSAtcSAtLWlnbm9yZS11bm1hdGNoIC1yZiAuIiwgKip3YXJncykKKworICAgICAgICAgICAgIyBNb2RpZnkgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBzdWNoIHRoYXQgaXQgbWlycm9ycyB0aGUgY29tbWl0LgorICAgICAgICAgICAgYXBwbHlfY29tbWl0KHBhcmVudCwgcmV2LCBsYXJncywgd2FyZ3MsIGRlc3RfZGlyLCBmaWxlX2ZpbHRlcj1maWxlX2ZpbHRlcikKKworICAgICAgICAgICAgIyBOb3cgY29tbWl0LgorICAgICAgICAgICAgbmV3X3RyZWUgPSBydW5jbWQoImdpdCB3cml0ZS10cmVlIiwgKip3YXJncykuc3RyaXAoKQorICAgICAgICAgICAgZW52ID0gY29weS5kZWVwY29weSh3ZW52KQorICAgICAgICAgICAgZW52WydHSVRfQVVUSE9SX05BTUUnXSA9IGF1dGhvcl9uYW1lCisgICAgICAgICAgICBlbnZbJ0dJVF9BVVRIT1JfRU1BSUwnXSA9IGF1dGhvcl9lbWFpbAorICAgICAgICAgICAgZW52WydHSVRfQVVUSE9SX0RBVEUnXSA9IGF1dGhvcl90aW1lc3RhbXAKKyAgICAgICAgICAgIGlmIGhvb2s6CisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHR1cm4gdGhlIHZlcmJhdGltIGNvbW1pdCBtZXNzYWdlIGludG8gc29tZXRoaW5nIHJlc2VtYmxpbmcgYSBwYXRjaCBoZWFkZXIKKyAgICAgICAgICAgICAgICAjIGZvciB0aGUgaG9vay4KKyAgICAgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpIGFzIHBhdGNoOgorICAgICAgICAgICAgICAgICAgICBwYXRjaC53cml0ZSgnU3ViamVjdDogW1BBVENIXSAnKQorICAgICAgICAgICAgICAgICAgICBwYXRjaC53cml0ZShib2R5KQorICAgICAgICAgICAgICAgICAgICBwYXRjaC53cml0ZSgnXG4tLS1cbicpCisgICAgICAgICAgICAgICAgICAgIHBhdGNoLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgcnVuY21kKFtob29rLCBwYXRjaC5uYW1lLCByZXYsIG5hbWVdKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGF0Y2gubmFtZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmLnJlYWQoKVtsZW4oJ1N1YmplY3Q6IFtQQVRDSF0gJyk6XVs6LWxlbignXG4tLS1cbicpXQorCisgICAgICAgICAgICAjIFdlIGNhbiBza2lwIG5vbi1tZXJnZSBjb21taXRzIHRoYXQgZGlkIG5vdCBjaGFuZ2UgYW55IGZpbGVzLiBUaG9zZSBhcmUgdHlwaWNhbGx5CisgICAgICAgICAgICAjIHRoZSByZXN1bHQgb2YgZmlsZSBmaWx0ZXJpbmcsIGFsdGhvdWdoIHRoZXkgY291bGQgYWxzbyBoYXZlIGJlZW4gaW50cm9kdWNlZAorICAgICAgICAgICAgIyBpbnRlbnRpb25hbGx5IHVwc3RyZWFtLCBpbiB3aGljaCBjYXNlIHdlIGRyb3Agc29tZSBpbmZvcm1hdGlvbiBoZXJlLgorICAgICAgICAgICAgaWYgbGVuKHBhcmVudHMpID09IDE6CisgICAgICAgICAgICAgICAgcGFyZW50X3JldiA9IGltcG9ydF9yZXYocGFyZW50c1swXSkKKyAgICAgICAgICAgICAgICBvbGRfdHJlZSA9IHJ1bmNtZCgiZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVUICIgKyBwYXJlbnRfcmV2LCAqKndhcmdzKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgY29tbWl0ID0gb2xkX3RyZWUgIT0gbmV3X3RyZWUKKyAgICAgICAgICAgICAgICBpZiBub3QgY29tbWl0OgorICAgICAgICAgICAgICAgICAgICBuZXdfcmV2ID0gcGFyZW50X3JldgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb21taXQgPSBUcnVlCisgICAgICAgICAgICBpZiBjb21taXQ6CisgICAgICAgICAgICAgICAgbmV3X3JldiA9IHJ1bmNtZCgiZ2l0IGNvbW1pdC10cmVlIi5zcGxpdCgpICsgYWRkX3AoW2ltcG9ydF9yZXYocCkgZm9yIHAgaW4gcGFyZW50c10pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiLW0iLCBib2R5LCBuZXdfdHJlZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KS5zdHJpcCgpCisgICAgICAgICAgICBvbGQybmV3X3JldnNbcmV2XSA9IG5ld19yZXYKKworICAgICAgICAgICAgcmV0dXJuIG5ld19yZXYKKworICAgICAgICBpZiByZXZzOgorICAgICAgICAgICAgZm9yIHJldiBpbiByZXZzOgorICAgICAgICAgICAgICAgIGltcG9ydF9yZXYocmV2KQorICAgICAgICAgICAgIyBSZW1lbWJlciBob3cgdG8gdXBkYXRlIG91ciBjdXJyZW50IGhlYWQuIE5ldyBjb21wb25lbnRzIGdldCBhZGRlZCwKKyAgICAgICAgICAgICMgdXBkYXRlZCBjb21wb25lbnRzIGdldCB0aGUgZGVsdGEgYmV0d2VlbiBjdXJyZW50IGhlYWQgYW5kIHRoZSB1cGRhdGVkIGNvbXBvbmVudAorICAgICAgICAgICAgIyBhcHBsaWVkLgorICAgICAgICAgICAgYWRkaXRpb25hbF9oZWFkc1tvbGQybmV3X3JldnNbcmV2c1stMV1dXSA9IGhlYWQgaWYgcmVwb1snbGFzdF9yZXZpc2lvbiddIGVsc2UgTm9uZQorICAgICAgICAgICAgcmVwb1snbGFzdF9yZXZpc2lvbiddID0gcmV2c1stMV0KKworICAgICMgTm93IGNvbnN0cnVjdCB0aGUgZmluYWwgbWVyZ2UgY29tbWl0LiBXZSBjcmVhdGUgdGhlIHRyZWUgYnkKKyAgICAjIHN0YXJ0aW5nIHdpdGggdGhlIGhlYWQgYW5kIGFwcGx5aW5nIHRoZSBjaGFuZ2VzIGZyb20gZWFjaAorICAgICMgY29tcG9uZW50cyBpbXBvcnRlZCBoZWFkIHJldmlzaW9uLgorICAgIGlmIGFkZGl0aW9uYWxfaGVhZHM6CisgICAgICAgIHJ1bmNtZCgiZ2l0IHJlc2V0IC0taGFyZCIsICoqd2FyZ3MpCisgICAgICAgIGZvciByZXYsIGJhc2UgaW4gYWRkaXRpb25hbF9oZWFkcy5pdGVtcygpOgorICAgICAgICAgICAgYXBwbHlfY29tbWl0KGJhc2UsIHJldiwgd2FyZ3MsIHdhcmdzLCBOb25lKQorCisgICAgICAgICMgQ29tbWl0IHdpdGggYWxsIGNvbXBvbmVudCBicmFuY2hlcyBhcyBwYXJlbnRzIGFzIHdlbGwgYXMgdGhlIHByZXZpb3VzIGhlYWQuCisgICAgICAgIGxvZ2dlci5pbmZvKCJXcml0aW5nIGZpbmFsIG1lcmdlIGNvbW1pdC4uLiIpCisgICAgICAgIG1zZyA9IGNvbmZfY29tbWl0X21zZyhjb25mLCBjb21wb25lbnRzKQorICAgICAgICBuZXdfdHJlZSA9IHJ1bmNtZCgiZ2l0IHdyaXRlLXRyZWUiLCAqKndhcmdzKS5zdHJpcCgpCisgICAgICAgIG5ld19yZXYgPSBydW5jbWQoImdpdCBjb21taXQtdHJlZSIuc3BsaXQoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3AoW2hlYWRdICsgbGlzdChhZGRpdGlvbmFsX2hlYWRzLmtleXMoKSkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBbIi1tIiwgbXNnLCBuZXdfdHJlZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgKip3YXJncykuc3RyaXAoKQorICAgICAgICAjIEFuZCBkb25lISBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGNoYW5nZSB0aGUgSEVBRCBpbiB0aGUgYWN0dWFsIHdvcmsgdHJlZS4KKyAgICAgICAgcnVuY21kKCJnaXQgcmVzZXQgLS1oYXJkICVzIiAlIG5ld19yZXYpCisKKyAgICAgICAgIyBVcGRhdGUgYW5kIHN0YWdlIHRoZSAocG90ZW50aWFsbHkgbW9kaWZpZWQpCisgICAgICAgICMgY29tYm8tbGF5ZXIuY29uZiwgYnV0IGRvIG5vdCBjb21taXQgc2VwYXJhdGVseS4KKyAgICAgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICAgICAgcmV2ID0gcmVwb1snbGFzdF9yZXZpc2lvbiddCisgICAgICAgICAgICBjb25mLnVwZGF0ZShuYW1lLCAibGFzdF9yZXZpc2lvbiIsIHJldikKKyAgICAgICAgaWYgY29tbWl0X2NvbmZfZmlsZShjb25mLCBjb21wb25lbnRzLCBGYWxzZSk6CisgICAgICAgICAgICAjIE11c3QgYXVnbWVudCB0aGUgcHJldmlvdXMgY29tbWl0LgorICAgICAgICAgICAgcnVuY21kKCJnaXQgY29tbWl0IC0tYW1lbmQgLUMgSEVBRCIpCisKKworc2Nhbm5lZF9yZXZzID0gRmFsc2UKK2RlZiBmaW5kX3JldnMob2xkMm5ldywgaGVhZCk6CisgICAgJycnQ29uc3RydWN0IG1hcHBpbmcgZnJvbSBvcmlnaW5hbCBjb21taXQgaGFzaCB0byBjb21taXQgaGFzaCBpbgorICAgIGNvbWJpbmVkIHJlcG8gYnkgbG9va2luZyBhdCB0aGUgY29tbWl0IG1lc3NhZ2VzLiBEZXBlbmRzIG9uIHRoZQorICAgICJGcm9tIC4uLiByZXY6IC4uLiIgY29udmVudGlvbi4nJycKKyAgICBsb2dnZXIuaW5mbygiQW5hbHl6aW5nIGxvZyBtZXNzYWdlcyB0byBmaW5kIHByZXZpb3VzbHkgaW1wb3J0ZWQgY29tbWl0cy4uLiIpCisgICAgbnVtX2tub3duID0gbGVuKG9sZDJuZXcpCisgICAgbG9nID0gcnVuY21kKCJnaXQgbG9nIC0tZ3JlcD0nRnJvbSAuKiByZXY6IFthLWZBLUYwLTldW2EtZkEtRjAtOV0qJyAtLXByZXR0eT1mb3JtYXQ6JUgleDAwJUIleDAwICIgKyBoZWFkKS5zcGxpdChjaHIoMCkpCisgICAgcmVnZXggPSByZS5jb21waWxlKHInRnJvbSAuKiByZXY6IChbYS1mQS1GMC05XSspJykKKyAgICBmb3IgbmV3X3JldiwgYm9keSBpbiB6aXAoKltpdGVyKGxvZyldKiAyKToKKyAgICAgICAgIyBVc2UgdGhlIGxhc3Qgb25lLCBpbiB0aGUgdW5saWtlbHkgY2FzZSB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZS4KKyAgICAgICAgcmV2ID0gcmVnZXguZmluZGFsbChib2R5KVstMV0KKyAgICAgICAgaWYgcmV2IG5vdCBpbiBvbGQybmV3OgorICAgICAgICAgICAgb2xkMm5ld1tyZXZdID0gbmV3X3Jldi5zdHJpcCgpCisgICAgbG9nZ2VyLmluZm8oIkZvdW5kICVkIGFkZGl0aW9uYWwgY29tbWl0cywgbGVhZGluZyB0bzogJXMiICUgKGxlbihvbGQybmV3KSAtIG51bV9rbm93biwgb2xkMm5ldykpCisKKworZGVmIGFwcGx5X2NvbW1pdChwYXJlbnQsIHJldiwgbGFyZ3MsIHdhcmdzLCBkZXN0X2RpciwgZmlsZV9maWx0ZXI9Tm9uZSk6CisgICAgJycnQ29tcGFyZSByZXZpc2lvbiBhZ2FpbnN0IHBhcmVudCwgcmVtb3ZlIGZpbGVzIGRlbGV0ZWQgaW4gdGhlCisgICAgY29tbWl0LCByZS13cml0ZSBuZXcgb3IgbW9kaWZpZWQgb25lcy4gTW92ZXMgdGhlbSBpbnRvIGRlc3RfZGlyLgorICAgIE9wdGlvbmFsbHkgZmlsdGVycyBmaWxlcy4KKyAgICAnJycKKyAgICBpZiBub3QgZGVzdF9kaXI6CisgICAgICAgIGRlc3RfZGlyID0gIi4iCisgICAgIyAtciByZWN1cnNlcyBpbnRvIHN1Yi1kaXJlY3RvcmllcywgZ2l2ZW4gaXMgdGhlIGZ1bGwgb3ZlcnZpZXcgb2YKKyAgICAjIHdoYXQgY2hhbmdlZC4gIFdlIGRvIG5vdCBjYXJlIGFib3V0IGNvcHkvZWRpdHMgb3IgcmVuYW1lcywgc28gd2UKKyAgICAjIGNhbiBkaXNhYmxlIHRob3NlIHdpdGggLS1uby1yZW5hbWVzIChidXQgd2Ugc3RpbGwgcGFyc2UgdGhlbSwKKyAgICAjIGJlY2F1c2UgaXQgd2FzIG5vdCBjbGVhciBmcm9tIGdpdCBkb2N1bWVudGF0aW9uIHdoZXRoZXIgQyBhbmQgTQorICAgICMgbGluZXMgY2FuIHN0aWxsIG9jY3VyKS4KKyAgICBsb2dnZXIuZGVidWcoIkFwcGx5aW5nIGNoYW5nZXMgYmV0d2VlbiAlcyBhbmQgJXMgaW4gJXMiICUgKHBhcmVudCwgcmV2LCBsYXJnc1siZGVzdGRpciJdKSkKKyAgICBkZWxldGUgPSBbXQorICAgIHVwZGF0ZSA9IFtdCisgICAgaWYgcGFyZW50OgorICAgICAgICAjIEFwcGx5IGRlbHRhLgorICAgICAgICBjaGFuZ2VzID0gcnVuY21kKCJnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC0tbm8tcmVuYW1lcyAtLW5hbWUtc3RhdHVzIC1yIC0tcmF3IC16ICVzICVzIiAlIChwYXJlbnQsIHJldiksICoqbGFyZ3MpLnNwbGl0KGNocigwKSkKKyAgICAgICAgZm9yIHN0YXR1cywgbmFtZSBpbiB6aXAoKltpdGVyKGNoYW5nZXMpXSoyKToKKyAgICAgICAgICAgIGlmIHN0YXR1c1swXSBpbiAiQUNNUlQiOgorICAgICAgICAgICAgICAgIHVwZGF0ZS5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGVsaWYgc3RhdHVzWzBdIGluICJEIjoKKyAgICAgICAgICAgICAgICBkZWxldGUuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5rbm93biBzdGF0dXMgJXMgb2YgZmlsZSAlcyBpbiByZXZpc2lvbiAlcyIgJSAoc3RhdHVzLCBuYW1lLCByZXYpKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgZWxzZToKKyAgICAgICAgIyBDb3B5IGFsbCBmaWxlcy4KKyAgICAgICAgdXBkYXRlLmV4dGVuZChydW5jbWQoImdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IC16ICVzIiAlIHJldiwgKipsYXJncykuc3BsaXQoY2hyKDApKSkKKworICAgICMgSW5jbHVkZS9leGNsdWRlIGZpbGVzIGFzIGRlZmluZSBpbiB0aGUgY29tcG9uZW50IGNvbmZpZy4KKyAgICAjIEJvdGggdXBkYXRlZCBhbmQgZGVsZXRlZCBmaWxlIGxpc3RzIGdldCBmaWx0ZXJlZCwgYmVjYXVzZSBpdCBtaWdodCBoYXBwZW4KKyAgICAjIHRoYXQgYSBmaWxlIGdldHMgZXhjbHVkZWQsIHB1bGxlZCBmcm9tIGEgZGlmZmVyZW50IGNvbXBvbmVudCwgYW5kIHRoZW4gdGhlCisgICAgIyBleGNsdWRlZCBmaWxlIGdldHMgZGVsZXRlZC4gSW4gdGhhdCBjYXNlIHdlIG11c3Qga2VlcCB0aGUgY29weS4KKyAgICBpZiBmaWxlX2ZpbHRlcjoKKyAgICAgICAgZmlsZV9maWx0ZXIodXBkYXRlKQorICAgICAgICBmaWxlX2ZpbHRlcihkZWxldGUpCisKKyAgICAjIFdlIGV4cG9ydCBpbnRvIGEgdGFyIGFyY2hpdmUgaGVyZSBhbmQgZXh0cmFjdCB3aXRoIHRhciBiZWNhdXNlIGl0IGlzIHNpbXBsZSAobm8KKyAgICAjIG5lZWQgdG8gaW1wbGVtZW50IGZpbGUgYW5kIHN5bWxpbmsgd3JpdGluZyBvdXJzZWx2ZXMpIGFuZCBnaXZlcyB1cyBzb21lIGRlZ3JlZQorICAgICMgb2YgcGFyYWxsZWwgSU8uIFRoZSBkb3duc2lkZSBpcyB0aGF0IHdlIGhhdmUgdG8gcGFzcyB0aGUgbGlzdCBvZiBmaWxlcyB2aWEKKyAgICAjIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIC0gaG9wZWZ1bGx5IHRoZXJlIHdpbGwgbmV2ZXIgYmUgdG9vIG1hbnkgYXQgb25jZS4KKyAgICBpZiB1cGRhdGU6CisgICAgICAgIHRhcmdldCA9IG9zLnBhdGguam9pbih3YXJnc1siZGVzdGRpciJdLCBkZXN0X2RpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIodGFyZ2V0KToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRhcmdldCkKKyAgICAgICAgcXVvdGVkX3RhcmdldCA9IHBpcGVzLnF1b3RlKHRhcmdldCkKKyAgICAgICAgIyBvcy5zeXNjb25mKCdTQ19BUkdfTUFYJykgaXMgbHlpbmc6IHJ1bm5pbmcgYSBjb21tYW5kIHdpdGgKKyAgICAgICAgIyBzdHJpbmcgbGVuZ3RoIDYyOTM0MyBhbHJlYWR5IGZhaWxlZCB3aXRoICJBcmd1bWVudCBsaXN0IHRvbworICAgICAgICAjIGxvbmciIGFsdGhvdWdoIFNDX0FSR19NQVggPSAyMDk3MTUyLiAibWFuIGV4ZWN2ZSIgZXhwbGFpbnMKKyAgICAgICAgIyB0aGUgbGltaXRhdGlvbnMsIGJ1dCB0aG9zZSBhcmUgcHJldHR5IGNvbXBsaWNhdGVkLiBTbyBoZXJlCisgICAgICAgICMgd2UganVzdCBoYXJkLWNvZGUgYSBmaXhlZCB2YWx1ZSB3aGljaCBpcyBtb3JlIGxpa2VseSB0byB3b3JrLgorICAgICAgICBtYXhfY21kc2l6ZSA9IDY0ICogMTAyNAorICAgICAgICB3aGlsZSB1cGRhdGU6CisgICAgICAgICAgICBxdW90ZWRfYXJncyA9IFtdCisgICAgICAgICAgICB1bnF1b3RlZF9hcmdzID0gW10KKyAgICAgICAgICAgIGNtZHNpemUgPSAxMDAgKyBsZW4ocXVvdGVkX3RhcmdldCkKKyAgICAgICAgICAgIHdoaWxlIHVwZGF0ZToKKyAgICAgICAgICAgICAgICBxdW90ZWRfbmV4dCA9IHBpcGVzLnF1b3RlKHVwZGF0ZVswXSkKKyAgICAgICAgICAgICAgICBzaXplX25leHQgPSBsZW4ocXVvdGVkX25leHQpICsgbGVuKGRlc3RfZGlyKSArIDEKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ2NtZGxpbmUgbGVuZ3RoICVkICsgJWQgPCAlZD8nICUgKGNtZHNpemUsIHNpemVfbmV4dCwgb3Muc3lzY29uZignU0NfQVJHX01BWCcpKSkKKyAgICAgICAgICAgICAgICBpZiBjbWRzaXplICsgc2l6ZV9uZXh0IDwgbWF4X2NtZHNpemU6CisgICAgICAgICAgICAgICAgICAgIHF1b3RlZF9hcmdzLmFwcGVuZChxdW90ZWRfbmV4dCkKKyAgICAgICAgICAgICAgICAgICAgdW5xdW90ZWRfYXJncy5hcHBlbmQodXBkYXRlLnBvcCgwKSkKKyAgICAgICAgICAgICAgICAgICAgY21kc2l6ZSArPSBzaXplX25leHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ0JyZWFraW5nIHRoZSBjbWRsaW5lIGF0IGxlbmd0aCAlZCcgJSBjbWRzaXplKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdGaW5hbCBjbWRsaW5lIGxlbmd0aCAlZCAvICVkJyAlIChjbWRzaXplLCBvcy5zeXNjb25mKCdTQ19BUkdfTUFYJykpKQorICAgICAgICAgICAgY21kID0gImdpdCBhcmNoaXZlICVzICVzIHwgdGFyIC1DICVzIC14ZiAtIiAlIChyZXYsICcgJy5qb2luKHF1b3RlZF9hcmdzKSwgcXVvdGVkX3RhcmdldCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmlyc3QgY21kbGluZSBsZW5ndGggJWQnICUgbGVuKGNtZCkpCisgICAgICAgICAgICBydW5jbWQoY21kLCAqKmxhcmdzKQorICAgICAgICAgICAgY21kID0gImdpdCBhZGQgLWYiLnNwbGl0KCkgKyBbb3MucGF0aC5qb2luKGRlc3RfZGlyLCB4KSBmb3IgeCBpbiB1bnF1b3RlZF9hcmdzXQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTZWNvbmQgY21kbGluZSBsZW5ndGggJWQnICUgcmVkdWNlKGxhbWJkYSB4LCB5OiB4ICsgbGVuKHkpLCBjbWQsIDApKQorICAgICAgICAgICAgcnVuY21kKGNtZCwgKip3YXJncykKKyAgICBpZiBkZWxldGU6CisgICAgICAgIGZvciBwYXRoIGluIGRlbGV0ZToKKyAgICAgICAgICAgIGlmIGRlc3RfZGlyOgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdF9kaXIsIHBhdGgpCisgICAgICAgIHJ1bmNtZCgiZ2l0IHJtIC1mIC0taWdub3JlLXVubWF0Y2giLnNwbGl0KCkgKyBbb3MucGF0aC5qb2luKGRlc3RfZGlyLCB4KSBmb3IgeCBpbiBkZWxldGVdLCAqKndhcmdzKQorCiBkZWYgYWN0aW9uX2Vycm9yKGNvbmYsIGFyZ3MpOgogICAgIGxvZ2dlci5pbmZvKCJpbnZhbGlkIGFjdGlvbiAlcyIgJSBhcmdzWzBdKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JidmFycy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5CmluZGV4IDA4OTZkNjQuLmQ4ZDA1OTQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI0LDEyICsyNCwxMiBAQAogaW1wb3J0IHJlCiAKIGRlZiB1c2FnZSgpOgotICAgIHByaW50ICdVc2FnZTogJXMgLWQgRklMRU5BTUUgWy1kIEZJTEVOQU1FXSogLW0gTUVUQURJUiBbLW0gTUFUQURJUl0qJyAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0gICAgcHJpbnQgJyAgLWQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGZpbGUgdG8gc2VhcmNoJwotICAgIHByaW50ICcgIC1oLCAtLWhlbHAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQnCi0gICAgcHJpbnQgJyAgLW0gTUVUQURJUiAgICAgICAgICBtZXRhIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIHJlY2lwZXMnCi0gICAgcHJpbnQgJyAgLXQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGNvbmZpZyBmaWxlIChmb3IgZG9jIHRhZ3MpJwotICAgIHByaW50ICcgIC1UICAgICAgICAgICAgICAgICAgT25seSBkaXNwbGF5IHZhcmlhYmxlcyB3aXRoIGRvYyB0YWdzIChyZXF1aXJlcyAtdCknCisgICAgcHJpbnQoJ1VzYWdlOiAlcyAtZCBGSUxFTkFNRSBbLWQgRklMRU5BTUVdKiAtbSBNRVRBRElSIFstbSBNQVRBRElSXSonICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpCisgICAgcHJpbnQoJyAgLWQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGZpbGUgdG8gc2VhcmNoJykKKyAgICBwcmludCgnICAtaCwgLS1oZWxwICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0JykKKyAgICBwcmludCgnICAtbSBNRVRBRElSICAgICAgICAgIG1ldGEgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgcmVjaXBlcycpCisgICAgcHJpbnQoJyAgLXQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGNvbmZpZyBmaWxlIChmb3IgZG9jIHRhZ3MpJykKKyAgICBwcmludCgnICAtVCAgICAgICAgICAgICAgICAgIE9ubHkgZGlzcGxheSB2YXJpYWJsZXMgd2l0aCBkb2MgdGFncyAocmVxdWlyZXMgLXQpJykKIAogZGVmIHJlY2lwZV9iYnZhcnMocmVjaXBlKToKICAgICAnJycgUmV0dXJuIGEgdW5pcXVlIHNldCBvZiBldmVyeSBiYnZhciBlbmNvdW50ZXJlZCBpbiB0aGUgcmVjaXBlICcnJwpAQCAtMzcsOSArMzcsOSBAQAogICAgIHZzZXQgPSBzZXQoKQogICAgIHRyeToKICAgICAgICAgciA9IG9wZW4ocmVjaXBlKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIChlcnJubywgc3RyZXJyb3IpOgotICAgICAgICBwcmludCAnV0FSTklORzogRmFpbGVkIHRvIG9wZW4gcmVjaXBlICcsIHJlY2lwZQotICAgICAgICBwcmludCBzdHJlcnJvcgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgcHJpbnQoJ1dBUk5JTkc6IEZhaWxlZCB0byBvcGVuIHJlY2lwZSAnLCByZWNpcGUpCisgICAgICAgIHByaW50KGVyci5hcmdzWzFdKQogCiAgICAgZm9yIGxpbmUgaW4gcjoKICAgICAgICAgIyBTdHJpcCBhbnkgY29tbWVudHMgZnJvbSB0aGUgbGluZQpAQCAtNTksOCArNTksOCBAQAogICAgIGZvciByb290LGRpcnMsZmlsZXMgaW4gb3Mud2FsayhtZXRhZGlyKToKICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CiAgICAgICAgICAgICBpZiBuYW1lLmZpbmQoIi5iYiIpID49IDA6Ci0gICAgICAgICAgICAgICAgZm9yIGtleSBpbiByZWNpcGVfYmJ2YXJzKG9zLnBhdGguam9pbihyb290LG5hbWUpKS5pdGVya2V5cygpOgotICAgICAgICAgICAgICAgICAgICBpZiBiYnZhcnMuaGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gcmVjaXBlX2JidmFycyhvcy5wYXRoLmpvaW4ocm9vdCxuYW1lKSkua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgaW4gYmJ2YXJzOgogICAgICAgICAgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSBiYnZhcnNba2V5XSArIDEKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gMQpAQCAtNzEsOSArNzEsOSBAQAogICAgIGZvciBkb2MgaW4gZG9jZmlsZXM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGRvYykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgKGVycm5vLCBzdHJlcnJvcik6Ci0gICAgICAgICAgICBwcmludCAnV0FSTklORzogRmFpbGVkIHRvIG9wZW4gZG9jICcsIGRvYwotICAgICAgICAgICAgcHJpbnQgc3RyZXJyb3IKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQoJ1dBUk5JTkc6IEZhaWxlZCB0byBvcGVuIGRvYyAnLCBkb2MpCisgICAgICAgICAgICBwcmludChlcnIuYXJnc1sxXSkKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgIGlmIHByb2cubWF0Y2gobGluZSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTg3LDggKzg3LDggQEAKIAogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZG9jY29uZikKLSAgICBleGNlcHQgSU9FcnJvciBhcyAoZXJybm8sIHN0cmVycm9yKToKLSAgICAgICAgcmV0dXJuIHN0cmVycm9yCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICByZXR1cm4gZXJyLmFyZ3NbMV0KIAogICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgIG0gPSBwcm9nLnNlYXJjaChsaW5lKQpAQCAtMTA5LDggKzEwOSw4IEBACiAgICAgIyBDb2xsZWN0IGFuZCB2YWxpZGF0ZSBpbnB1dAogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiZDpobTp0OlQiLCBbImhlbHAiXSkKLSAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBlcnI6Ci0gICAgICAgIHByaW50ICclcycgJSBzdHIoZXJyKQorICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IgYXMgZXJyOgorICAgICAgICBwcmludCgnJXMnICUgc3RyKGVycikpCiAgICAgICAgIHVzYWdlKCkKICAgICAgICAgc3lzLmV4aXQoMikKIApAQCAtMTIyLDEzICsxMjIsMTMgQEAKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGEpOgogICAgICAgICAgICAgICAgIGRvY2ZpbGVzLmFwcGVuZChhKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCAnRVJST1I6IGRvY3VtZW50YXRpb24gZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUnICUgKGEpCisgICAgICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiBkb2N1bWVudGF0aW9uIGZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlJyAlIGEpCiAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMykKICAgICAgICAgZWxpZiBvID09ICctbSc6CiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGEpOgogICAgICAgICAgICAgICAgIG1ldGFkaXJzLmFwcGVuZChhKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCAnRVJST1I6IG1ldGEgZGlyZWN0b3J5ICVzIGlzIG5vdCBhIGRpcmVjdG9yeScgJSAoYSkKKyAgICAgICAgICAgICAgICBwcmludCgnRVJST1I6IG1ldGEgZGlyZWN0b3J5ICVzIGlzIG5vdCBhIGRpcmVjdG9yeScgJSBhKQogICAgICAgICAgICAgICAgIHN5cy5leGl0KDQpCiAgICAgICAgIGVsaWYgbyA9PSAiLXQiOgogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYSk6CkBAIC0xMzksMzEgKzEzOSwzMSBAQAogICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAidW5oYW5kbGVkIG9wdGlvbiIKIAogICAgIGlmIGxlbihkb2NmaWxlcykgPT0gMDoKLSAgICAgICAgcHJpbnQgJ0VSUk9SOiBubyBkb2NmaWxlIHNwZWNpZmllZCcKKyAgICAgICAgcHJpbnQoJ0VSUk9SOiBubyBkb2NmaWxlIHNwZWNpZmllZCcpCiAgICAgICAgIHVzYWdlKCkKICAgICAgICAgc3lzLmV4aXQoNSkKIAogICAgIGlmIGxlbihtZXRhZGlycykgPT0gMDoKLSAgICAgICAgcHJpbnQgJ0VSUk9SOiBubyBtZXRhZGlyIHNwZWNpZmllZCcKKyAgICAgICAgcHJpbnQoJ0VSUk9SOiBubyBtZXRhZGlyIHNwZWNpZmllZCcpCiAgICAgICAgIHVzYWdlKCkKICAgICAgICAgc3lzLmV4aXQoNikKIAogICAgIGlmIG9ubHlkb2N0YWdzIGFuZCBkb2Njb25mID09ICIiOgotICAgICAgICBwcmludCAnRVJST1I6IG5vIGRvY2NvbmYgc3BlY2lmaWVkJworICAgICAgICBwcmludCgnRVJST1I6IG5vIGRvY2NvbmYgc3BlY2lmaWVkJykKICAgICAgICAgdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCg3KQogCiAgICAgIyBDb2xsZWN0IGFsbCB0aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGUgcmVjaXBlcyBpbiB0aGUgbWV0YWRpcnMKICAgICBmb3IgbSBpbiBtZXRhZGlyczoKLSAgICAgICAgZm9yIGtleSxjbnQgaW4gY29sbGVjdF9iYnZhcnMobSkuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBiYnZhcnMuaGFzX2tleShrZXkpOgorICAgICAgICBmb3Iga2V5LGNudCBpbiBjb2xsZWN0X2JidmFycyhtKS5pdGVtcygpOgorICAgICAgICAgICAgaWYga2V5IGluIGJidmFyczoKICAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IGJidmFyc1trZXldICsgY250CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gY250CiAKICAgICAjIENoZWNrIGVhY2ggdmFyIGZvciBkb2N1bWVudGF0aW9uCiAgICAgdmFybGVuID0gMAotICAgIGZvciB2IGluIGJidmFycy5pdGVya2V5cygpOgorICAgIGZvciB2IGluIGJidmFycy5rZXlzKCk6CiAgICAgICAgIGlmIGxlbih2KSA+IHZhcmxlbjoKICAgICAgICAgICAgIHZhcmxlbiA9IGxlbih2KQogICAgICAgICBpZiBub3QgYmJ2YXJfaXNfZG9jdW1lbnRlZCh2LCBkb2NmaWxlcyk6CkBAIC0xNzIsMTQgKzE3MiwxNCBAQAogICAgIHZhcmxlbiA9IHZhcmxlbiArIDEKIAogICAgICMgUmVwb3J0IGFsbCB1bmRvY3VtZW50ZWQgdmFyaWFibGVzCi0gICAgcHJpbnQgJ0ZvdW5kICVkIHVuZG9jdW1lbnRlZCBiYiB2YXJpYWJsZXMgKG91dCBvZiAlZCk6JyAlIChsZW4odW5kb2N1bWVudGVkKSwgbGVuKGJidmFycykpCisgICAgcHJpbnQoJ0ZvdW5kICVkIHVuZG9jdW1lbnRlZCBiYiB2YXJpYWJsZXMgKG91dCBvZiAlZCk6JyAlIChsZW4odW5kb2N1bWVudGVkKSwgbGVuKGJidmFycykpKQogICAgIGhlYWRlciA9ICclcyVzJXMnICUgKHN0cigiVkFSSUFCTEUiKS5sanVzdCh2YXJsZW4pLCBzdHIoIkNPVU5UIikubGp1c3QoNiksIHN0cigiRE9DVEFHIikubGp1c3QoNykpCi0gICAgcHJpbnQgaGVhZGVyCi0gICAgcHJpbnQgc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKQorICAgIHByaW50KGhlYWRlcikKKyAgICBwcmludChzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpKQogICAgIGZvciB2IGluIHVuZG9jdW1lbnRlZDoKICAgICAgICAgZG9jdGFnID0gYmJ2YXJfZG9jdGFnKHYsIGRvY2NvbmYpCiAgICAgICAgIGlmIG5vdCBvbmx5ZG9jdGFncyBvciBub3QgZG9jdGFnID09ICIiOgotICAgICAgICAgICAgcHJpbnQgJyVzJXMlcycgJSAodi5sanVzdCh2YXJsZW4pLCBzdHIoYmJ2YXJzW3ZdKS5sanVzdCg2KSwgZG9jdGFnKQorICAgICAgICAgICAgcHJpbnQoJyVzJXMlcycgJSAodi5sanVzdCh2YXJsZW4pLCBzdHIoYmJ2YXJzW3ZdKS5sanVzdCg2KSwgZG9jdGFnKSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9idWlsZC1wZXJmLXRlc3Qtd3JhcHBlci5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LXdyYXBwZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTAzZWE5NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LXdyYXBwZXIuc2gKQEAgLTAsMCArMSwxNTMgQEAKKyMhL2Jpbi9iYXNoCisjCisjIEJ1aWxkIHBlcmZvcm1hbmNlIHRlc3Qgc2NyaXB0IHdyYXBwZXIKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorIyBtb3JlIGRldGFpbHMuCisjCisjCisjIFRoaXMgc2NyaXB0IGlzIGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBhY3R1YWwgYnVpbGQgcGVyZm9ybWFuY2UgdGVzdGVyCisjIHNjcmlwdC4gVGhpcyBzY3JpcHQgaW5pdGlhbGl6ZXMgdGhlIGJ1aWxkIGVudmlyb25tZW50LCBydW5zCisjIG9lLWJ1aWxkLXBlcmYtdGVzdCBhbmQgYXJjaGl2ZXMgdGhlIHJlc3VsdHMuCisKK3NjcmlwdD1gYmFzZW5hbWUgJDBgCithcmNoaXZlX2Rpcj1+L3BlcmYtcmVzdWx0cy9hcmNoaXZlcworCit1c2FnZSAoKSB7CitjYXQgPDwgRU9GCitVc2FnZTogJHNjcmlwdCBbLWhdIFstYyBDT01NSVRJU0hdIFstQyBHSVRfUkVQT10KKworT3B0aW9uYWwgYXJndW1lbnRzOgorICAtaCAgICAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgLWEgQVJDSElWRV9ESVIgICAgYXJjaGl2ZSByZXN1bHRzIHRhcmJhbGwgaGVyZSwgZ2l2ZSBhbiBlbXB0eSBzdHJpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSB0YXJiYWxsIGFyY2hpdmluZyAoZGVmYXVsdDogJGFyY2hpdmVfZGlyKQorICAtYyBDT01NSVRJU0ggICAgICB0ZXN0IChjaGVja291dCkgdGhpcyBjb21taXQKKyAgLUMgR0lUX1JFUE8gICAgICAgY29tbWl0IHJlc3VsdHMgaW50byBHaXQKKyAgLXcgV09SS19ESVIgICAgICAgd29yayBkaXIgZm9yIHRoaXMgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBHSVRfVE9QX0RJUi9idWlsZC1wZXJmLXRlc3QpCitFT0YKK30KKworCisjIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK2NvbW1pdGlzaD0iIgord2hpbGUgZ2V0b3B0cyAiaGE6YzpDOnc6IiBvcHQ7IGRvCisgICAgY2FzZSAkb3B0IGluCisgICAgICAgIGgpICB1c2FnZQorICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICA7OworICAgICAgICBhKSAgYXJjaGl2ZV9kaXI9YHJlYWxwYXRoICIkT1BUQVJHImAKKyAgICAgICAgICAgIDs7CisgICAgICAgIGMpICBjb21taXRpc2g9JE9QVEFSRworICAgICAgICAgICAgOzsKKyAgICAgICAgQykgIHJlc3VsdHNfcmVwbz1gcmVhbHBhdGggIiRPUFRBUkciYAorICAgICAgICAgICAgY29tbWl0X3Jlc3VsdHM9KCItLWNvbW1pdC1yZXN1bHRzIiAiJHJlc3VsdHNfcmVwbyIpCisgICAgICAgICAgICA7OworICAgICAgICB3KSAgYmFzZV9kaXI9YHJlYWxwYXRoICIkT1BUQVJHImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICopICB1c2FnZQorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBDaGVjayBwb3NpdGlvbmFsIGFyZ3MKK3NoaWZ0ICIkKChPUFRJTkQgLSAxKSkiCitpZiBbICQjIC1uZSAwIF07IHRoZW4KKyAgICBlY2hvICJFUlJPUjogTm8gcG9zaXRpb25hbCBhcmdzIGFyZSBhY2NlcHRlZC4iCisgICAgdXNhZ2UKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gIlJ1bm5pbmcgb24gYHVuYW1lIC1uYCIKK2lmICEgZ2l0X3RvcGRpcj0kKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKTsgdGhlbgorICAgICAgICBlY2hvICJUaGUgY3VycmVudCB3b3JraW5nIGRpciBkb2Vzbid0IHNlZW0gdG8gYmUgYSBnaXQgY2xvbmUuIFBsZWFzZSBjZCB0aGVyZSBiZWZvcmUgcnVubmluZyBgYmFzZW5hbWUgJDBgIgorICAgICAgICBleGl0IDEKK2ZpCisKK2NkICIkZ2l0X3RvcGRpciIKKworaWYgWyAtbiAiJGNvbW1pdGlzaCIgXTsgdGhlbgorICAgICMgQ2hlY2tvdXQgY29ycmVjdCByZXZpc2lvbgorICAgIGVjaG8gIkNoZWNraW5nIG91dCAkY29tbWl0aXNoIgorICAgIGdpdCBmZXRjaCAmPiAvZGV2L251bGwKKyAgICBnaXQgY2hlY2tvdXQgSEVBRF4wICY+IC9kZXYvbnVsbAorICAgIGdpdCBicmFuY2ggLUQgJGNvbW1pdGlzaCAmPiAvZGV2L251bGwKKyAgICBpZiAhIGdpdCBjaGVja291dCAtZiAkY29tbWl0aXNoICY+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJHaXQgY2hlY2tvdXQgZmFpbGVkIgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworIyBTZXR1cCBidWlsZCBlbnZpcm9ubWVudAoraWYgWyAteiAiJGJhc2VfZGlyIiBdOyB0aGVuCisgICAgYmFzZV9kaXI9IiRnaXRfdG9wZGlyL2J1aWxkLXBlcmYtdGVzdCIKK2ZpCitlY2hvICJVc2luZyB3b3JraW5nIGRpciAkYmFzZV9kaXIiCisKK3RpbWVzdGFtcD1gZGF0ZSAiKyVZJW0lZCVIJU0lUyJgCitnaXRfcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICB8fCBleGl0IDEKK2J1aWxkX2Rpcj0iJGJhc2VfZGlyL2J1aWxkLSRnaXRfcmV2LSR0aW1lc3RhbXAiCityZXN1bHRzX2Rpcj0iJGJhc2VfZGlyL3Jlc3VsdHMtJGdpdF9yZXYtJHRpbWVzdGFtcCIKK2dsb2JhbHJlc19sb2c9IiRiYXNlX2Rpci9nbG9iYWxyZXMubG9nIgorbWFjaGluZT0icWVtdXg4NiIKKworbWtkaXIgLXAgIiRiYXNlX2RpciIKK3NvdXJjZSAuL29lLWluaXQtYnVpbGQtZW52ICRidWlsZF9kaXIgPi9kZXYvbnVsbCB8fCBleGl0IDEKKworIyBBZGRpdGlvbmFsIGNvbmZpZworYXV0b19jb25mPSIkYnVpbGRfZGlyL2NvbmYvYXV0by5jb25mIgorZWNobyAiTUFDSElORSA9IFwiJG1hY2hpbmVcIiIgPiAiJGF1dG9fY29uZiIKK2VjaG8gJ0JCX05VTUJFUl9USFJFQURTID0gIjgiJyA+PiAiJGF1dG9fY29uZiIKK2VjaG8gJ1BBUkFMTEVMX01BS0UgPSAiLWogOCInID4+ICIkYXV0b19jb25mIgorZWNobyAiRExfRElSID0gXCIkYmFzZV9kaXIvZG93bmxvYWRzXCIiID4+ICIkYXV0b19jb25mIgorIyBEaXNhYmxpbmcgbmV0d29yayBzYW5pdHkgY2hlY2sgc2xpZ2h0bHkgcmVkdWNlcyB0aGUgdmFyaWFuY2Ugb2YgdGltaW5nIHJlc3VsdHMKK2VjaG8gJ0NPTk5FQ1RJVklUWV9DSEVDS19VUklTID0gIiInID4+ICIkYXV0b19jb25mIgorIyBQb3NzaWJpbGl0eSB0byBkZWZpbmUgZXh0cmEgc2V0dGluZ3MKK2lmIFsgLWYgIiRiYXNlX2Rpci9hdXRvLmNvbmYuZXh0cmEiIF07IHRoZW4KKyAgICBjYXQgIiRiYXNlX2Rpci9hdXRvLmNvbmYuZXh0cmEiID4+ICIkYXV0b19jb25mIgorZmkKKworIyBSdW4gYWN0dWFsIHRlc3Qgc2NyaXB0CitvZS1idWlsZC1wZXJmLXRlc3QgLS1vdXQtZGlyICIkcmVzdWx0c19kaXIiIFwKKyAgICAgICAgICAgICAgICAgICAtLWdsb2JhbHJlcy1maWxlICIkZ2xvYmFscmVzX2xvZyIgXAorICAgICAgICAgICAgICAgICAgIC0tbG9jay1maWxlICIkYmFzZV9kaXIvb2UtYnVpbGQtcGVyZi5sb2NrIiBcCisgICAgICAgICAgICAgICAgICAgIiR7Y29tbWl0X3Jlc3VsdHNbQF19IiBcCisgICAgICAgICAgICAgICAgICAgLS1jb21taXQtcmVzdWx0cy1icmFuY2ggInt0ZXN0ZXJfaG9zdH0ve2dpdF9icmFuY2h9LyRtYWNoaW5lIiBcCisgICAgICAgICAgICAgICAgICAgLS1jb21taXQtcmVzdWx0cy10YWcgInt0ZXN0ZXJfaG9zdH0ve2dpdF9icmFuY2h9LyRtYWNoaW5lL3tnaXRfY29tbWl0X2NvdW50fS1ne2dpdF9jb21taXR9L3t0YWdfbnVtfSIKKworY2FzZSAkPyBpbgorICAgIDEpICBlY2hvICJFUlJPUjogb2UtYnVpbGQtcGVyZi10ZXN0IHNjcmlwdCBmYWlsZWQhIgorICAgICAgICBleGl0IDEKKyAgICAgICAgOzsKKyAgICAyKSAgZWNobyAiTk9URTogc29tZSB0ZXN0cyBmYWlsZWQhIgorICAgICAgICA7OworZXNhYworCitlY2hvIC1uZSAiXG5cbi0tLS0tLS0tLS0tLS0tLS0tXG4iCitlY2hvICJHbG9iYWwgcmVzdWx0cyBmaWxlOiIKK2VjaG8gLW5lICJcbiIKKworY2F0ICIkZ2xvYmFscmVzX2xvZyIKKworaWYgWyAtbiAiJGFyY2hpdmVfZGlyIiBdOyB0aGVuCisgICAgZWNobyAtbmUgIlxuXG4tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgIGVjaG8gIkFyY2hpdmluZyByZXN1bHRzIGluICRhcmNoaXZlX2RpciIKKyAgICBta2RpciAtcCAiJGFyY2hpdmVfZGlyIgorICAgIHJlc3VsdHNfYmFzZW5hbWU9YGJhc2VuYW1lICIkcmVzdWx0c19kaXIiYAorICAgIHJlc3VsdHNfZGlybmFtZT1gZGlybmFtZSAiJHJlc3VsdHNfZGlyImAKKyAgICB0YXIgLWN6ZiAiJGFyY2hpdmVfZGlyL2B1bmFtZSAtbmAtJHtyZXN1bHRzX2Jhc2VuYW1lfS50YXIuZ3oiIC1DICIkcmVzdWx0c19kaXJuYW1lIiAiJHJlc3VsdHNfYmFzZW5hbWUiCitmaQorCitybSAtcmYgIiRidWlsZF9kaXIiCitybSAtcmYgIiRyZXN1bHRzX2RpciIKKworZWNobyAiRE9ORSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGRpbWFnZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGRpbWFnZQppbmRleCBhNTAzZjExLi5hYjkyOTk1IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RkaW1hZ2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlCkBAIC0xMDAsNSArMTAwLDkgQEAKIGZpCiAKIGVjaG8gIldyaXRpbmcgaW1hZ2UuLi4iCi1kZCBpZj0iJElNQUdFIiBvZj0iJERFVklDRSIgYnM9IiRCTE9DS1NJWkUiCitpZiB3aGljaCBwdiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwlwdiAiJElNQUdFIiB8IGRkIG9mPSIkREVWSUNFIiBicz0iJEJMT0NLU0laRSIKK2Vsc2UKKwlkZCBpZj0iJElNQUdFIiBvZj0iJERFVklDRSIgYnM9IiRCTE9DS1NJWkUiCitmaQogc3luYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZXZ0b29sLXN0cmVzcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGV2dG9vbC1zdHJlc3MucHkKaW5kZXggOGNmOTJjYS4uZDU1NWM1MSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZXZ0b29sLXN0cmVzcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RldnRvb2wtc3RyZXNzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgZGV2dG9vbCBzdHJlc3MgdGVzdGVyCiAjCkBAIC00MywxNSArNDMsMTUgQEAKICAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKICAgICB0aW5mb2lsLnByZXBhcmUoRmFsc2UpCiAKLSAgICBwa2dfcG4gPSB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4KLSAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnModGluZm9pbC5jb25maWdfZGF0YSwgdGluZm9pbC5jb29rZXIucmVjaXBlY2FjaGUsIHBrZ19wbikKKyAgICBwa2dfcG4gPSB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLnBrZ19wbgorICAgIChsYXRlc3RfdmVyc2lvbnMsIHByZWZlcnJlZF92ZXJzaW9ucykgPSBiYi5wcm92aWRlcnMuZmluZFByb3ZpZGVycyh0aW5mb2lsLmNvbmZpZ19kYXRhLCB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLCBwa2dfcG4pCiAKICAgICBza2lwX2NsYXNzZXMgPSBhcmdzLnNraXBfY2xhc3Nlcy5zcGxpdCgnLCcpCiAKICAgICByZWNpcGVsaXN0ID0gW10KICAgICBmb3IgcG4gaW4gc29ydGVkKHBrZ19wbik6CiAgICAgICAgIHByZWYgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dCi0gICAgICAgIGluaGVyaXRzID0gW29zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmKSlbMF0gZm9yIGYgaW4gdGluZm9pbC5jb29rZXIucmVjaXBlY2FjaGUuaW5oZXJpdHNbcHJlZlsxXV1dCisgICAgICAgIGluaGVyaXRzID0gW29zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmKSlbMF0gZm9yIGYgaW4gdGluZm9pbC5jb29rZXIucmVjaXBlY2FjaGVzWycnXS5pbmhlcml0c1twcmVmWzFdXV0KICAgICAgICAgZm9yIGNscyBpbiBza2lwX2NsYXNzZXM6CiAgICAgICAgICAgICBpZiBjbHMgaW4gaW5oZXJpdHM6CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTEyMSwxNCArMTIxLDE4IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdUZXN0aW5nICVzICcgJSAocG4gKyAnICcpLmxqdXN0KDQwLCAnLicpKQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICAgICAgc2tpcHBlZCA9IE5vbmUKIAogICAgICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbih0bXBkaXIsIHBuKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdkZXZ0b29sIGV4dHJhY3QgJXMgJXMnICUgKHBuLCBzcmN0cmVlKSkKLSAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKCdzdHJlc3NfJXNfZXh0cmFjdC5sb2cnICUgcG4sICd3JykgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIoZXhjKSkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMuZXhpdGNvZGUgPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCA9ICdpbmNvbXBhdGlibGUnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oJ3N0cmVzc18lc19leHRyYWN0LmxvZycgJSBwbiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIoZXhjKSkKIAogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjdHJlZSk6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzcmN0cmVlKQpAQCAtMTM2LDYgKzE0MCw4IEBACiAgICAgICAgICAgICBpZiBmYWlsZWQ6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZhaWxlZCcpCiAgICAgICAgICAgICAgICAgZmFpbHVyZXMgKz0gMQorICAgICAgICAgICAgZWxpZiBza2lwcGVkOgorICAgICAgICAgICAgICAgIHByaW50KCdza2lwcGVkICglcyknICUgc2tpcHBlZCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ29rJykKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CkBAIC0xNjIsMjkgKzE2OCwzNCBAQAogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICBmYWlsZWQgPSBGYWxzZQogICAgICAgICAgICAgcmVzZXQgPSBUcnVlCisgICAgICAgICAgICBza2lwcGVkID0gTm9uZQogCiAgICAgICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHRtcGRpciwgcG4pCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlIChwbiwgc3JjdHJlZSkpCi0gICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKCdzdHJlc3NfJXNfbW9kaWZ5LmxvZycgJSBwbiwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihleGMpKQotICAgICAgICAgICAgICAgIGZhaWxlZCA9ICdtb2RpZnknCi0gICAgICAgICAgICAgICAgcmVzZXQgPSBGYWxzZQotCi0gICAgICAgICAgICBpZiBub3QgZmFpbGVkOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2JpdGJha2UgLWMgaW5zdGFsbCAlcycgJSBwbikKLSAgICAgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbignc3RyZXNzXyVzX2luc3RhbGwubG9nJyAlIHBuLCAndycpIGFzIGY6CisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgZXhjLmV4aXRjb2RlID09IDQ6CisgICAgICAgICAgICAgICAgICAgIHNraXBwZWQgPSAnaW5jb21wYXRpYmxlJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbignc3RyZXNzXyVzX21vZGlmeS5sb2cnICUgcG4sICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKGV4YykpCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9ICdidWlsZCcKLSAgICAgICAgICAgIGlmIHJlc2V0OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2RldnRvb2wgcmVzZXQgJXMnICUgcG4pCi0gICAgICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnZGV2dG9vbCByZXNldCBmYWlsZWQ6ICVzJyAlIHN0cihleGMpKQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAnbW9kaWZ5JworICAgICAgICAgICAgICAgICAgICByZXNldCA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIG5vdCBza2lwcGVkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmYWlsZWQ6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdiaXRiYWtlIC1jIGluc3RhbGwgJXMnICUgcG4pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbignc3RyZXNzXyVzX2luc3RhbGwubG9nJyAlIHBuLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIoZXhjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9ICdidWlsZCcKKyAgICAgICAgICAgICAgICBpZiByZXNldDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2RldnRvb2wgcmVzZXQgJXMnICUgcG4pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdkZXZ0b29sIHJlc2V0IGZhaWxlZDogJXMnICUgc3RyKGV4YykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmN0cmVlKToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNyY3RyZWUpCkBAIC0xOTIsNiArMjAzLDggQEAKICAgICAgICAgICAgIGlmIGZhaWxlZDoKICAgICAgICAgICAgICAgICBwcmludCgnZmFpbGVkICglcyknICUgZmFpbGVkKQogICAgICAgICAgICAgICAgIGZhaWx1cmVzICs9IDEKKyAgICAgICAgICAgIGVsaWYgc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBwcmludCgnc2tpcHBlZCAoJXMpJyAlIHNraXBwZWQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByaW50KCdvaycpCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgpAQCAtMjEwLDkgKzIyMywxMCBAQAogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcicsICctLXJlc3VtZS1mcm9tJywgaGVscD0nUmVzdW1lIGZyb20gc3BlY2lmaWVkIHJlY2lwZScsIG1ldGF2YXI9J1BOJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW9ubHknLCBoZWxwPSdPbmx5IHRlc3Qgc3BlY2lmaWVkIHJlY2lwZXMgKGNvbW1hLXNlcGFyYXRlZCB3aXRob3V0IHNwYWNlcywgd2lsZGNhcmRzIGFsbG93ZWQpJywgbWV0YXZhcj0nUE5MSVNUJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNraXAnLCBoZWxwPSdTa2lwIHNwZWNpZmllZCByZWNpcGVzIChjb21tYS1zZXBhcmF0ZWQgd2l0aG91dCBzcGFjZXMsIHdpbGRjYXJkcyBhbGxvd2VkKScsIG1ldGF2YXI9J1BOTElTVCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1za2lwJywgaGVscD0nU2tpcCBzcGVjaWZpZWQgcmVjaXBlcyAoY29tbWEtc2VwYXJhdGVkIHdpdGhvdXQgc3BhY2VzLCB3aWxkY2FyZHMgYWxsb3dlZCknLCBtZXRhdmFyPSdQTkxJU1QnLCBkZWZhdWx0PSdnY2Mtc291cmNlLSosa2VybmVsLWRldnNyYyxwYWNrYWdlLWluZGV4LHBlcmYsbWV0YS13b3JsZC1wa2dkYXRhLGdsaWJjLWxvY2FsZSxnbGliYy1tdHJhY2UsZ2xpYmMtc2NyaXB0cyxvcy1yZWxlYXNlJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLXNraXAtY2xhc3NlcycsIGhlbHA9J1NraXAgcmVjaXBlcyBpbmhlcml0aW5nIHNwZWNpZmllZCBjbGFzc2VzIChjb21tYS1zZXBhcmF0ZWQpIC0gZGVmYXVsdCAlKGRlZmF1bHQpcycsIG1ldGF2YXI9J0NMQVNTTElTVCcsIGRlZmF1bHQ9J25hdGl2ZSxuYXRpdmVzZGssY3Jvc3MsY3Jvc3MtY2FuYWRpYW4saW1hZ2UscG9wdWxhdGVfc2RrLG1ldGEscGFja2FnZWdyb3VwJykKICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisgICAgc3VicGFyc2Vycy5yZXF1aXJlZCA9IFRydWUKIAogICAgIHBhcnNlcl9tb2RpZnkgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ21vZGlmeScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gImRldnRvb2wgbW9kaWZ5IiBmb2xsb3dlZCBieSBhIGJ1aWxkIHdpdGggYml0YmFrZSBvbiBtYXRjaGluZyByZWNpcGVzJywKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZ3JhcGgtdG9vbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZ3JhcGgtdG9vbAppbmRleCA2ZGM3ZDMzLi4xZGY1YjhjIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2dyYXBoLXRvb2wKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ncmFwaC10b29sCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgU2ltcGxlIGdyYXBoIHF1ZXJ5IHV0aWxpdHkKICMgdXNlZnVsIGZvciBnZXR0aW5nIGFuc3dlcnMgZnJvbSAuZG90IGZpbGVzIHByb2R1Y2VkIGJ5IGJpdGJha2UgLWcKQEAgLTMwLDggKzMwLDcgQEAKICAgICAgICAgcHJpbnQoJ0VSUk9SOiBQbGVhc2UgaW5zdGFsbCB0aGUgbmV0d29ya3ggcHl0aG9uIG1vZHVsZScpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKLSAgICBncmFwaCA9IG5ldHdvcmt4LkRpR3JhcGgobmV0d29ya3gucmVhZF9kb3QoZG90ZmlsZSkpCi0KKyAgICBncmFwaCA9IG5ldHdvcmt4LkRpR3JhcGgobmV0d29ya3gubnhfcHlkb3QucmVhZF9kb3QoZG90ZmlsZSkpCiAgICAgZGVmIG5vZGVfbWlzc2luZyhub2RlKToKICAgICAgICAgaW1wb3J0IGRpZmZsaWIKICAgICAgICAgY2xvc2VfbWF0Y2hlcyA9IGRpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXMobm9kZSwgZ3JhcGgubm9kZXMoKSwgY3V0b2ZmPTAuNykKQEAgLTUzLDExICs1MiwxMSBAQAogCiAgICAgZnJvbW5vZGUgPSBhcmdzWzFdCiAgICAgdG9ub2RlID0gYXJnc1syXQotICAgIHBhdGhzID0gbGlzdChnZXRfcGF0aF9uZXR3b3JreChhcmdzWzBdLCBmcm9tbm9kZSwgdG9ub2RlKSkKLSAgICBpZiBwYXRoczoKLSAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6Ci0gICAgICAgICAgICBwcmludCAnIC0+ICcuam9pbihwYXRoKQotICAgIGVsc2U6CisKKyAgICBwYXRoID0gTm9uZQorICAgIGZvciBwYXRoIGluIGdldF9wYXRoX25ldHdvcmt4KGFyZ3NbMF0sIGZyb21ub2RlLCB0b25vZGUpOgorICAgICAgICBwcmludCgiIC0+ICIuam9pbihtYXAoc3RyLCBwYXRoKSkpCisgICAgaWYgbm90IHBhdGg6CiAgICAgICAgIHByaW50KCJFUlJPUjogbm8gcGF0aCBmcm9tICVzIHRvICVzIGluIGdyYXBoIiAlIChmcm9tbm9kZSwgdG9ub2RlKSkKICAgICAgICAgc3lzLmV4aXQoMSkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9saXN0LXBhY2thZ2Vjb25maWctZmxhZ3MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2xpc3QtcGFja2FnZWNvbmZpZy1mbGFncy5weQppbmRleCAyZjNiOGIwLi4zODlmYjk3IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2xpc3QtcGFja2FnZWNvbmZpZy1mbGFncy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2xpc3QtcGFja2FnZWNvbmZpZy1mbGFncy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNyw3ICszNyw2IEBACiAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQogICAgIHN5cy5leGl0KDEpCiAKLWltcG9ydCBiYi5jYWNoZQogaW1wb3J0IGJiLmNvb2tlcgogaW1wb3J0IGJiLnByb3ZpZGVycwogaW1wb3J0IGJiLnRpbmZvaWwKQEAgLTQ1LDcgKzQ0LDcgQEAKIGRlZiBnZXRfZm5saXN0KGJiaGFuZGxlciwgcGtnX3BuLCBwcmVmZXJyZWQpOgogICAgICcnJyBHZXQgYWxsIHJlY2lwZSBmaWxlIG5hbWVzICcnJwogICAgIGlmIHByZWZlcnJlZDoKLSAgICAgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKGJiaGFuZGxlci5jb25maWdfZGF0YSwgYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSwgcGtnX3BuKQorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoYmJoYW5kbGVyLmNvbmZpZ19kYXRhLCBiYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlc1snJ10sIHBrZ19wbikKIAogICAgIGZuX2xpc3QgPSBbXQogICAgIGZvciBwbiBpbiBzb3J0ZWQocGtnX3BuKToKQEAgLTU4LDExICs1NywxMSBAQAogCiBkZWYgZ2V0X3JlY2lwZXNkYXRhKGJiaGFuZGxlciwgcHJlZmVycmVkKToKICAgICAnJycgR2V0IGRhdGEgb2YgYWxsIGF2YWlsYWJsZSByZWNpcGVzIHdoaWNoIGhhdmUgUEFDS0FHRUNPTkZJRyBmbGFncyAnJycKLSAgICBwa2dfcG4gPSBiYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgIHBrZ19wbiA9IGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGVzWycnXS5wa2dfcG4KIAogICAgIGRhdGFfZGljdCA9IHt9CiAgICAgZm9yIGZuIGluIGdldF9mbmxpc3QoYmJoYW5kbGVyLCBwa2dfcG4sIHByZWZlcnJlZCk6Ci0gICAgICAgIGRhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICBkYXRhID0gYmJoYW5kbGVyLnBhcnNlX3JlY2lwZV9maWxlKGZuKQogICAgICAgICBmbGFncyA9IGRhdGEuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKQogICAgICAgICBmbGFncy5wb3AoJ2RvYycsIE5vbmUpCiAgICAgICAgIGlmIGZsYWdzOgpAQCAtODYsNyArODUsNyBAQAogICAgICcnJyBDb2xsZWN0IGF2YWlsYWJsZSBQQUNLQUdFQ09ORklHIGZsYWdzIGFuZCBhbGwgYWZmZWN0ZWQgcGtncyAnJycKICAgICAjIGZsYWdfZGljdCA9IHsnZmxhZyc6IFsncGtnMScsICdwa2cyJywuLi5dfQogICAgIGZsYWdfZGljdCA9IHt9Ci0gICAgZm9yIHBrZ25hbWUsIGZsYWdsaXN0IGluIHBrZ19kaWN0Lml0ZXJpdGVtcygpOgorICAgIGZvciBwa2duYW1lLCBmbGFnbGlzdCBpbiBwa2dfZGljdC5pdGVtcygpOgogICAgICAgICBmb3IgZmxhZyBpbiBmbGFnbGlzdDoKICAgICAgICAgICAgIGlmIGZsYWcgaW4gZmxhZ19kaWN0OgogICAgICAgICAgICAgICAgIGZsYWdfZGljdFtmbGFnXS5hcHBlbmQocGtnbmFtZSkKQEAgLTEwNCw4ICsxMDMsOCBAQAogICAgIHBrZ25hbWVfbGVuICs9IDEKIAogICAgIGhlYWRlciA9ICclLSpzJXMnICUgKHBrZ25hbWVfbGVuLCBzdHIoIlJFQ0lQRSBOQU1FIiksIHN0cigiUEFDS0FHRUNPTkZJRyBGTEFHUyIpKQotICAgIHByaW50IGhlYWRlcgotICAgIHByaW50IHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykKKyAgICBwcmludChoZWFkZXIpCisgICAgcHJpbnQoc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKSkKICAgICBmb3IgcGtnbmFtZSBpbiBzb3J0ZWQocGtnX2RpY3QpOgogICAgICAgICBwcmludCgnJS0qcyVzJyAlIChwa2duYW1lX2xlbiwgcGtnbmFtZSwgJyAnLmpvaW4ocGtnX2RpY3RbcGtnbmFtZV0pKSkKIApAQCAtMTE1LDI4ICsxMTQsMjggQEAKICAgICBmbGFnX2xlbiA9IGxlbigiUEFDS0FHRUNPTkZJRyBGTEFHIikgKyA1CiAKICAgICBoZWFkZXIgPSAnJS0qcyVzJyAlIChmbGFnX2xlbiwgc3RyKCJQQUNLQUdFQ09ORklHIEZMQUciKSwgc3RyKCJSRUNJUEUgTkFNRVMiKSkKLSAgICBwcmludCBoZWFkZXIKLSAgICBwcmludCBzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpCisgICAgcHJpbnQoaGVhZGVyKQorICAgIHByaW50KHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykpCiAKICAgICBmb3IgZmxhZyBpbiBzb3J0ZWQoZmxhZ19kaWN0KToKICAgICAgICAgcHJpbnQoJyUtKnMlcycgJSAoZmxhZ19sZW4sIGZsYWcsICcgICcuam9pbihzb3J0ZWQoZmxhZ19kaWN0W2ZsYWddKSkpKQogCiBkZWYgZGlzcGxheV9hbGwoZGF0YV9kaWN0KToKICAgICAnJycgRGlzcGxheSBhbGwgcGtncyBhbmQgUEFDS0FHRUNPTkZJRyBpbmZvcm1hdGlvbiAnJycKLSAgICBwcmludCBzdHIoIiIpLmxqdXN0KDUwLCAnPScpCisgICAgcHJpbnQoc3RyKCIiKS5sanVzdCg1MCwgJz0nKSkKICAgICBmb3IgZm4gaW4gZGF0YV9kaWN0OgogICAgICAgICBwcmludCgnJXMnICUgZGF0YV9kaWN0W2ZuXS5nZXRWYXIoIlAiLCBUcnVlKSkKLSAgICAgICAgcHJpbnQgZm4KKyAgICAgICAgcHJpbnQoZm4pCiAgICAgICAgIHBhY2thZ2Vjb25maWcgPSBkYXRhX2RpY3RbZm5dLmdldFZhcigiUEFDS0FHRUNPTkZJRyIsIFRydWUpIG9yICcnCiAgICAgICAgIGlmIHBhY2thZ2Vjb25maWcuc3RyaXAoKSA9PSAnJzoKICAgICAgICAgICAgIHBhY2thZ2Vjb25maWcgPSAnTm9uZScKICAgICAgICAgcHJpbnQoJ1BBQ0tBR0VDT05GSUcgJXMnICUgcGFja2FnZWNvbmZpZykKIAotICAgICAgICBmb3IgZmxhZyxmbGFnX3ZhbCBpbiBkYXRhX2RpY3RbZm5dLmdldFZhckZsYWdzKCJQQUNLQUdFQ09ORklHIikuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBmbGFnLGZsYWdfdmFsIGluIGRhdGFfZGljdFtmbl0uZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKS5pdGVtcygpOgogICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcHJpbnQoJ1BBQ0tBR0VDT05GSUdbJXNdICVzJyAlIChmbGFnLCBmbGFnX3ZhbCkpCi0gICAgICAgIHByaW50ICcnCisgICAgICAgIHByaW50KCcnKQogCiBkZWYgbWFpbigpOgogICAgIHBrZ19kaWN0ID0ge30KQEAgLTE2MCwyMCArMTU5LDIwIEBACiAKICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCiAKLSAgICBiYmhhbmRsZXIgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQotICAgIGJiaGFuZGxlci5wcmVwYXJlKCkKLSAgICBwcmludCgiR2F0aGVyaW5nIHJlY2lwZSBkYXRhLi4uIikKLSAgICBkYXRhX2RpY3QgPSBnZXRfcmVjaXBlc2RhdGEoYmJoYW5kbGVyLCBvcHRpb25zLnByZWZlcnJlZCkKKyAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIGJiaGFuZGxlcjoKKyAgICAgICAgYmJoYW5kbGVyLnByZXBhcmUoKQorICAgICAgICBwcmludCgiR2F0aGVyaW5nIHJlY2lwZSBkYXRhLi4uIikKKyAgICAgICAgZGF0YV9kaWN0ID0gZ2V0X3JlY2lwZXNkYXRhKGJiaGFuZGxlciwgb3B0aW9ucy5wcmVmZXJyZWQpCiAKLSAgICBpZiBvcHRpb25zLmxpc3R0eXBlID09ICdmbGFncyc6Ci0gICAgICAgIHBrZ19kaWN0ID0gY29sbGVjdF9wa2dzKGRhdGFfZGljdCkKLSAgICAgICAgZmxhZ19kaWN0ID0gY29sbGVjdF9mbGFncyhwa2dfZGljdCkKLSAgICAgICAgZGlzcGxheV9mbGFncyhmbGFnX2RpY3QpCi0gICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdyZWNpcGVzJzoKLSAgICAgICAgcGtnX2RpY3QgPSBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KQotICAgICAgICBkaXNwbGF5X3BrZ3MocGtnX2RpY3QpCi0gICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdhbGwnOgotICAgICAgICBkaXNwbGF5X2FsbChkYXRhX2RpY3QpCisgICAgICAgIGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ2ZsYWdzJzoKKyAgICAgICAgICAgIHBrZ19kaWN0ID0gY29sbGVjdF9wa2dzKGRhdGFfZGljdCkKKyAgICAgICAgICAgIGZsYWdfZGljdCA9IGNvbGxlY3RfZmxhZ3MocGtnX2RpY3QpCisgICAgICAgICAgICBkaXNwbGF5X2ZsYWdzKGZsYWdfZGljdCkKKyAgICAgICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdyZWNpcGVzJzoKKyAgICAgICAgICAgIHBrZ19kaWN0ID0gY29sbGVjdF9wa2dzKGRhdGFfZGljdCkKKyAgICAgICAgICAgIGRpc3BsYXlfcGtncyhwa2dfZGljdCkKKyAgICAgICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdhbGwnOgorICAgICAgICAgICAgZGlzcGxheV9hbGwoZGF0YV9kaWN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaAppbmRleCAzMzMyODRmLi5kOGRiM2MwIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaApAQCAtMzY5LDggKzM2OSw4IEBACiAjIEluc3RhbGxpbmcgdG8gJERFVklDRQogIwogZGVidWcgIk1vdW50aW5nIGltYWdlcyBhbmQgZGV2aWNlIGluIHByZXBhcmF0aW9uIGZvciBpbnN0YWxsYXRpb24iCi1tb3VudCAtbyBsb29wICRIRERJTUcgJEhERElNR19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRIRERJTUciCi1tb3VudCAtbyBsb29wICRIRERJTUdfTU5UL3Jvb3Rmcy5pbWcgJEhERElNR19ST09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCByb290ZnMuaW1nIgorbW91bnQgLW8gcm8sbG9vcCAkSERESU1HICRIRERJTUdfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCAkSERESU1HIgorbW91bnQgLW8gcm8sbG9vcCAkSERESU1HX01OVC9yb290ZnMuaW1nICRIRERJTUdfUk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgcm9vdGZzLmltZyIKIG1vdW50ICRST09URlMgJFJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRST09URlMgb24gJFJPT1RGU19NTlQiCiBtb3VudCAkQk9PVEZTICRCT09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCAkQk9PVEZTIG9uICRCT09URlNfTU5UIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKaW5kZXggZDkzYzk0My4uZjJlY2Y4ZCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgdmFyaWFibGVzCiAgICAgICAgICMKIAotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZW1zKCkpOgogICAgICAgICAgICAgZGVzYywgZGVwcywgZmlsZXMgPSBkYXRhCiAKICAgICAgICAgICAgICMKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIicgKQogICAgICAgICBsaW5lID0gJ1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IicKIAotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZW1zKCkpOgogICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gWycke1BOfS1kZXYnLCAnJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiddOgogICAgICAgICAgICAgICAgIGxpbmUgKz0gIiVzICIgJSBuYW1lCiAKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICAgICAgICAgb3MudW5saW5rKHN5cy5hcmd2WzFdKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc3lzLmV4Y19jbGVhcigpCi0gICAgICAgIG91dGZpbGUgPSBmaWxlKCBzeXMuYXJndlsxXSwgInciICkKKyAgICAgICAgb3V0ZmlsZSA9IG9wZW4oIHN5cy5hcmd2WzFdLCAidyIgKQogICAgIGVsc2U6CiAgICAgICAgIG91dGZpbGUgPSBzeXMuc3Rkb3V0CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNS5weQppbmRleCAzNjdiNGI4Li4yOTA2Y2M2IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjUucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy41LnB5CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgIyBnZW5lcmF0ZSBwYWNrYWdlIHZhcmlhYmxlcwogICAgICAgICAjCiAKLSAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVtcygpKToKICAgICAgICAgICAgIGRlc2MsIGRlcHMsIGZpbGVzID0gZGF0YQogCiAgICAgICAgICAgICAjCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgc2VsZi5vdXQoICdTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyInICkKICAgICAgICAgbGluZSA9ICdSREVQRU5EU18ke1BOfS1tb2R1bGVzPSInCiAKLSAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVtcygpKToKICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIFsnJHtQTn0tZGV2JywgJyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYnXToKICAgICAgICAgICAgICAgICBsaW5lICs9ICIlcyAiICUgbmFtZQogCkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAgICAgICAgIG9zLnVubGluayhzeXMuYXJndlsxXSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHN5cy5leGNfY2xlYXIoKQotICAgICAgICBvdXRmaWxlID0gZmlsZSggc3lzLmFyZ3ZbMV0sICJ3IiApCisgICAgICAgIG91dGZpbGUgPSBvcGVuKCBzeXMuYXJndlsxXSwgInciICkKICAgICBlbHNlOgogICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAogCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAjCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb3JlIiwgIlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIiwgIiR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tcmVwcmxpYiAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tbWF0aCIsCi0gICAgIl9fZnV0dXJlX18uKiBfYWJjb2xsLiogYWJjLiogYXN0LiogY29weS4qIGNvcHlyZWcuKiBDb25maWdQYXJzZXIuKiAiICsKKyAgICAiX19mdXR1cmVfXy4qIF9hYmNvbGwuKiBhYmMuKiBhc3QuKiBjb3B5LiogY29weXJlZy4qIGNvbmZpZ3BhcnNlci4qICIgKwogICAgICJnZW5lcmljcGF0aC4qIGdldG9wdC4qIGxpbmVjYWNoZS4qIG5ldy4qICIgKwogICAgICJvcy4qIHBvc2l4cGF0aC4qIHN0cnVjdC4qICIgKwogICAgICJ3YXJuaW5ncy4qIHNpdGUuKiBzdGF0LiogIiArCkBAIC0yMDgsNiArMjA4LDkgQEAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hdWRpbyIsICJQeXRob24gQXVkaW8gSGFuZGxpbmciLCAiJHtQTn0tY29yZSIsCiAgICAgIndhdmUuKiBjaHVuay4qIHNuZGhkci4qIGxpYi1keW5sb2FkL29zc2F1ZGlvZGV2Liouc28gbGliLWR5bmxvYWQvYXVkaW9vcC4qLnNvIGF1ZGlvZGV2Liogc3VuYXVkaW8uKiBzdW5hdS4qIHRvYWlmZi4qIiApCiAKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hcmdwYXJzZSIsICJQeXRob24gY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNlciIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS10ZXh0dXRpbHMiLAorICAgICJhcmdwYXJzZS4qIiApCisKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hc3luY2lvIiwgIlB5dGhvbiBBc3luY2hyb25vdXMgSS9PLCBldmVudCBsb29wLCBjb3JvdXRpbmVzIGFuZCB0YXNrcyIsICIke1BOfS1jb3JlIiwKICAgICAiYXN5bmNpbyIgKQogCkBAIC0yMTcsOCArMjIwLDggQEAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21waWxlIiwgIlB5dGhvbiBieXRlY29kZSBjb21waWxhdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAogICAgICJweV9jb21waWxlLiogY29tcGlsZWFsbC4qIiApCiAKLSAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21wcmVzc2lvbiIsICJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIiwKLSAgICAiZ3ppcC4qIHppcGZpbGUuKiB0YXJmaWxlLiogbGliLWR5bmxvYWQvYnoyLiouc28iICkKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21wcmVzc2lvbiIsICJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LWltcG9ydGxpYiAke1BOfS10aHJlYWRpbmcgJHtQTn0tc2hlbGwiLAorICAgICJnemlwLiogemlwZmlsZS4qIHRhcmZpbGUuKiBsaWItZHlubG9hZC9iejIuKi5zbyBsaWItZHlubG9hZC96bGliLiouc28iICkKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNyeXB0IiwgIlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCiAgICAgImhhc2hsaWIuKiBtZDUuKiBzaGEuKiBsaWItZHlubG9hZC9jcnlwdC4qLnNvIGxpYi1keW5sb2FkL19oYXNobGliLiouc28gbGliLWR5bmxvYWQvX3NoYTI1Ni4qLnNvIGxpYi1keW5sb2FkL19zaGE1MTIuKi5zbyIgKQpAQCAtMjI5LDExICsyMzIsMTEgQEAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jdXJzZXMiLCAiUHl0aG9uIGN1cnNlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAogICAgICJjdXJzZXMgbGliLWR5bmxvYWQvX2N1cnNlcy4qLnNvIGxpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuKi5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKIAotICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN0eXBlcyIsICJQeXRob24gQyB0eXBlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN0eXBlcyIsICJQeXRob24gQyB0eXBlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tc3VicHJvY2VzcyIsCiAgICAgImN0eXBlcyBsaWItZHlubG9hZC9fY3R5cGVzLiouc28gbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0Liouc28iICkgIyBkaXJlY3RvcnkgKyBsb3cgbGV2ZWwgbW9kdWxlCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kYXRldGltZSIsICJQeXRob24gY2FsZW5kYXIgYW5kIHRpbWUgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIsCi0gICAgIl9zdHJwdGltZS4qIGNhbGVuZGFyLiogbGliLWR5bmxvYWQvZGF0ZXRpbWUuKi5zbyIgKQorICAgICJfc3RycHRpbWUuKiBjYWxlbmRhci4qIGRhdGV0aW1lLiogbGliLWR5bmxvYWQvX2RhdGV0aW1lLiouc28iICkKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRiIiwgIlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCiAgICAgImFueWRibS4qIGR1bWJkYm0uKiB3aGljaGRiLiogZGJtIGxpYi1keW5sb2FkL19kYm0uKi5zbyIgKQpAQCAtMjU2LDEzICsyNTksMTYgQEAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbWFpbCIsICJQeXRob24gZW1haWwgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IiwKICAgICAiaW1hcGxpYi4qIGVtYWlsIiApICMgcGFja2FnZQogCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZW51bSIsICJQeXRob24gc3VwcG9ydCBmb3IgZW51bWVyYXRpb25zIiwgIiR7UE59LWNvcmUiLAorICAgICJlbnVtLioiICkKKwogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWZjbnRsIiwgIlB5dGhvbidzIGZjbnRsIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKICAgICAibGliLWR5bmxvYWQvZmNudGwuKi5zbyIgKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taHRtbCIsICJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCiAgICAgImZvcm1hdHRlci4qIGh0bWxlbnRpdHlkZWZzLiogaHRtbGxpYi4qIG1hcmt1cGJhc2UuKiBzZ21sbGliLiogSFRNTFBhcnNlci4qICIgKQogCi0gICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1wb3J0bGliIiwgIlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIsICIke1BOfS1jb3JlIiwKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbXBvcnRsaWIiLCAiUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCiAgICAgImltcG9ydGxpYiIgKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZ2RibSIsICJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCkBAIC0yNzgsMTAgKzI4NCwxMCBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWpzb24iLCAiUHl0aG9uIEpTT04gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUiLAogICAgICJqc29uIGxpYi1keW5sb2FkL19qc29uLiouc28iICkgIyBwYWNrYWdlCiAKLSAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sYW5nIiwgIlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sYW5nIiwgIlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWltcG9ydGxpYiIsCiAgICAgImxpYi1keW5sb2FkL19iaXNlY3QuKi5zbyBsaWItZHlubG9hZC9fY29sbGVjdGlvbnMuKi5zbyBsaWItZHlubG9hZC9faGVhcHEuKi5zbyBsaWItZHlubG9hZC9fd2Vha3JlZi4qLnNvIGxpYi1keW5sb2FkL19mdW5jdG9vbHMuKi5zbyAiICsKICAgICAibGliLWR5bmxvYWQvYXJyYXkuKi5zbyBsaWItZHlubG9hZC9pdGVydG9vbHMuKi5zbyBsaWItZHlubG9hZC9vcGVyYXRvci4qLnNvIGxpYi1keW5sb2FkL3BhcnNlci4qLnNvICIgKwotICAgICJhdGV4aXQuKiBiaXNlY3QuKiBjb2RlLiogY29kZW9wLiogY29sbGVjdGlvbnMuKiBfY29sbGVjdGlvbnNfYWJjLiogZGlzLiogZnVuY3Rvb2xzLiogaGVhcHEuKiBpbnNwZWN0Lioga2V5d29yZC4qIG9wY29kZS4qIHN5bWJvbC4qIHJlcHIuKiB0b2tlbi4qICIgKworICAgICJhdGV4aXQuKiBiaXNlY3QuKiBjb2RlLiogY29kZW9wLiogY29sbGVjdGlvbnMuKiBfY29sbGVjdGlvbnNfYWJjLiogY29udGV4dGxpYi4qIGRpcy4qIGZ1bmN0b29scy4qIGhlYXBxLiogaW5zcGVjdC4qIGtleXdvcmQuKiBvcGNvZGUuKiBvcGVyYXRvci4qIHN5bWJvbC4qIHJlcHIuKiB0b2tlbi4qICIgKwogICAgICJ0b2tlbml6ZS4qIHRyYWNlYmFjay4qIHdlYWtyZWYuKiIgKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbG9nZ2luZyIsICJQeXRob24gbG9nZ2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIiwKQEAgLTI5MCw3ICsyOTYsNyBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1haWxib3giLCAiUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1taW1lIiwKICAgICAibWFpbGJveC4qIiApCiAKLSAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYXRoIiwgIlB5dGhvbiBtYXRoIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWF0aCIsICJQeXRob24gbWF0aCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY3J5cHQiLAogICAgICJsaWItZHlubG9hZC9jbWF0aC4qLnNvIGxpYi1keW5sb2FkL21hdGguKi5zbyBsaWItZHlubG9hZC9fcmFuZG9tLiouc28gcmFuZG9tLiogc2V0cy4qIiApCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1taW1lIiwgIlB5dGhvbiBNSU1FIGhhbmRsaW5nIEFQSXMiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCkBAIC0zMzYsMTEgKzM0MiwxNyBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlc291cmNlIiwgIlB5dGhvbiByZXNvdXJjZSBjb250cm9sIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKICAgICAibGliLWR5bmxvYWQvcmVzb3VyY2UuKi5zbyIgKQogCi0gICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc2hlbGwiLCAiUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIsICIke1BOfS1jb3JlICR7UE59LXJlIiwKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zZWxlY3RvcnMiLCAiUHl0aG9uIEhpZ2gtbGV2ZWwgSS9PIG11bHRpcGxleGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAic2VsZWN0b3JzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNoZWxsIiwgIlB5dGhvbiBzaGVsbC1saWtlIGZ1bmN0aW9uYWxpdHkiLCAiJHtQTn0tY29yZSAke1BOfS1yZSAke1BOfS1jb21wcmVzc2lvbiIsCiAgICAgImNtZC4qIGNvbW1hbmRzLiogZGlyY2FjaGUuKiBmbm1hdGNoLiogZ2xvYi4qIHBvcGVuMi4qIHNobGV4Liogc2h1dGlsLioiICkKIAotICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN1YnByb2Nlc3MiLCAiUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIsCi0gICAgInN1YnByb2Nlc3MuKiIgKQorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNpZ25hbCIsICJQeXRob24gc2V0IGhhbmRsZXJzIGZvciBhc3luY2hyb25vdXMgZXZlbnRzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1lbnVtIiwKKyAgICAic2lnbmFsLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN1YnByb2Nlc3MiLCAiUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tc2lnbmFsICR7UE59LXNlbGVjdG9ycyIsCisgICAgInN1YnByb2Nlc3MuKiBsaWItZHlubG9hZC9fcG9zaXhzdWJwcm9jZXNzLiouc28iICkKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNxbGl0ZTMiLCAiUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nIiwKICAgICAibGliLWR5bmxvYWQvX3NxbGl0ZTMuKi5zbyBzcWxpdGUzL2RiYXBpMi4qIHNxbGl0ZTMvX19pbml0X18uKiBzcWxpdGUzL2R1bXAuKiIgKQpAQCAtMzYxLDcgKzM3Myw3IEBACiAgICAgInRlc3QiICkgIyBwYWNrYWdlCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10aHJlYWRpbmciLCAiUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCi0gICAgIl90aHJlYWRpbmdfbG9jYWwuKiBkdW1teV90aHJlYWQuKiBkdW1teV90aHJlYWRpbmcuKiBtdXRleC4qIHRocmVhZGluZy4qIFF1ZXVlLioiICkKKyAgICAiX3RocmVhZGluZ19sb2NhbC4qIGR1bW15X3RocmVhZC4qIGR1bW15X3RocmVhZGluZy4qIG11dGV4LiogdGhyZWFkaW5nLiogcXVldWUuKiIgKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGtpbnRlciIsICJQeXRob24gVGNsL1RrIGJpbmRpbmdzIiwgIiR7UE59LWNvcmUiLAogICAgICJsaWItZHlubG9hZC9fdGtpbnRlci4qLnNvIGxpYi10ayB0a2ludGVyIiApICMgcGFja2FnZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi91bmNvdmVyZWQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3VuY292ZXJlZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODM5OWFkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi91bmNvdmVyZWQKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL2Jhc2ggLWV1cgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgRmluZCBweXRob24gbW9kdWxlcyB1bmNvdmVyZWQgYnkgb2Utc2VsdGVzdAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBdXRob3I6IEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorIworCitpZiBbICEgIiQjIiAtZXEgMSAtbyAtdCAwIF0gOyB0aGVuCisgICAgZWNobyAnVXNhZ2U6IGNvdmVyYWdlIHJlcG9ydCB8IC4vc2NyaXB0cy9jb250cmliL3VuY292ZXJlZCA8ZGlyPicgMT4mMgorICAgIGV4aXQgMQorZmkKKworcGF0aD0kKHJlYWRsaW5rIC1ldiAkMSkKKworaWYgWyAhIC1kICIkcGF0aCIgXSA7IHRoZW4KKyAgICBlY2hvICJkaXJlY3RvcnkgJDEgZG9lc24ndCBleGlzdCIgMT4mMgorICAgIGV4aXQgMQorZmkKKworZGlmZiAtdSA8KGdyZXAgIiRwYXRoIiB8IGdyZXAgLXYgJzAlJCcgfCBjdXQgLWYxIC1kOiB8IHNvcnQpIFwKKyAgICAgPChmaW5kICRwYXRoIHwgeGFyZ3MgZmlsZSB8IGdyZXAgJ1B5dGhvbiBzY3JpcHQnIHwgY3V0IC1mMSAtZDp8IHNvcnQpIHwgXAorICAgICBncmVwICJeKyRwYXRoIiB8IGN1dCAtYzItCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3ZlcmlmeS1ob21lcGFnZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5CmluZGV4IDI2NWZmNjUuLmQzOWRkMWQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgVGhpcyBzY3JpcHQgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IEhPTUVQQUdFIHZhbHVlcyBmb3IgYWxsIHJlY2lwZXMgaW4KICMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KQEAgLTcsNyArNyw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdXJsbGliMgoraW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAKIAogIyBBbGxvdyBpbXBvcnRpbmcgc2NyaXB0cy9saWIgbW9kdWxlcwpAQCAtMzMsMzAgKzMzLDMwIEBACiAgICAgICAgIHJldHVybiAwCiAKIGRlZiB2ZXJpZnlIb21lcGFnZShiYmhhbmRsZXIpOgotICAgIHBrZ19wbiA9IGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUucGtnX3BuCisgICAgcGtnX3BuID0gYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLnBrZ19wbgogICAgIHBubGlzdCA9IHNvcnRlZChwa2dfcG4pCiAgICAgY291bnQgPSAwCiAgICAgY2hlY2tlZCA9IFtdCiAgICAgZm9yIHBuIGluIHBubGlzdDoKICAgICAgICAgZm9yIGZuIGluIHBrZ19wbltwbl06CiAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgY2hlY2tpbmcgbXVsdGlwbGUgQkJDTEFTU0VYVEVORGVkIHZhcmlhbnRzIG9mIHRoZSBzYW1lIHJlY2lwZQotICAgICAgICAgICAgcmVhbGZuLCBfID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihmbikKKyAgICAgICAgICAgIHJlYWxmbiwgXywgXyA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oZm4pCiAgICAgICAgICAgICBpZiByZWFsZm4gaW4gY2hlY2tlZDoKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChyZWFsZm4sIGJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKHJlYWxmbiksIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKyAgICAgICAgICAgIGRhdGEgPSBiYmhhbmRsZXIucGFyc2VfcmVjaXBlX2ZpbGUocmVhbGZuKQogICAgICAgICAgICAgaG9tZXBhZ2UgPSBkYXRhLmdldFZhcigiSE9NRVBBR0UiLCBUcnVlKQogICAgICAgICAgICAgaWYgaG9tZXBhZ2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4oaG9tZXBhZ2UsIHRpbWVvdXQ9NSkKKyAgICAgICAgICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QudXJsb3Blbihob21lcGFnZSwgdGltZW91dD01KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyB3Z2V0SG9tZXBhZ2Uob3MucGF0aC5iYXNlbmFtZShyZWFsZm4pLCBob21lcGFnZSkKICAgICAgICAgICAgIGNoZWNrZWQuYXBwZW5kKHJlYWxmbikKICAgICByZXR1cm4gY291bnQKIAogaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgYmJoYW5kbGVyID0gYmIudGluZm9pbC5UaW5mb2lsKCkKLSAgICBiYmhhbmRsZXIucHJlcGFyZSgpCi0gICAgbG9nZ2VyLmluZm8oIlN0YXJ0IHZlcmlmeWluZyBIT01FUEFHRToiKQotICAgIGZhaWxjb3VudCA9IHZlcmlmeUhvbWVwYWdlKGJiaGFuZGxlcikKLSAgICBsb2dnZXIuaW5mbygiRmluaXNoZWQgdmVyaWZ5aW5nIEhPTUVQQUdFLiIpCi0gICAgbG9nZ2VyLmluZm8oIlN1bW1hcnk6ICVzIGZhaWxlZCIgJSBmYWlsY291bnQpCisgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyBiYmhhbmRsZXI6CisgICAgICAgIGJiaGFuZGxlci5wcmVwYXJlKCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0IHZlcmlmeWluZyBIT01FUEFHRToiKQorICAgICAgICBmYWlsY291bnQgPSB2ZXJpZnlIb21lcGFnZShiYmhhbmRsZXIpCisgICAgICAgIGxvZ2dlci5pbmZvKCJGaW5pc2hlZCB2ZXJpZnlpbmcgSE9NRVBBR0UuIikKKyAgICAgICAgbG9nZ2VyLmluZm8oIlN1bW1hcnk6ICVzIGZhaWxlZCIgJSBmYWlsY291bnQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jcC1ub2Vycm9yIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY3Atbm9lcnJvcgppbmRleCAyOGViOTBkLi4zNWViMjExIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jcC1ub2Vycm9yCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NwLW5vZXJyb3IKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgQWxsb3cgY29weWluZyBvZiAkMSB0byAkMiBidXQgaWYgZmlsZXMgaW4gJDEgZGlzYXBwZWFyIGR1cmluZyB0aGUgY29weSBvcGVyYXRpb24sCiAjIGRvbid0IGVycm9yLgpAQCAtMzMsMTYgKzMzLDE2IEBACiAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKHNyY25hbWUsIGRzdG5hbWUpCiAgICAgICAgICMgY2F0Y2ggdGhlIEVycm9yIGZyb20gdGhlIHJlY3Vyc2l2ZSBjb3B5dHJlZSBzbyB0aGF0IHdlIGNhbgogICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKLSAgICAgICAgZXhjZXB0IHNodXRpbC5FcnJvciwgZXJyOgorICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXJyLmFyZ3NbMF0pCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCB3aHk6CisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIHdoeToKICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyY25hbWUsIGRzdG5hbWUsIHN0cih3aHkpKSkKICAgICB0cnk6CiAgICAgICAgIHNodXRpbC5jb3B5c3RhdChzcmMsIGRzdCkKLSAgICBleGNlcHQgT1NFcnJvciwgd2h5OgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKICAgICBpZiBlcnJvcnM6Ci0gICAgICAgIHJhaXNlIHNodXRpbC5FcnJvciwgZXJyb3JzCisgICAgICAgIHJhaXNlIHNodXRpbC5FcnJvcihlcnJvcnMpCiAKIHRyeToKICAgICBjb3B5dHJlZShzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jcmVhdGUtcHVsbC1yZXF1ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdAppbmRleCA0NzlhZDZlLi5hODhmMzVhIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jcmVhdGUtcHVsbC1yZXF1ZXN0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QKQEAgLTM5LDEzICszOSwxNSBAQAogICAtbCBsb2NhbCBicmFuY2ggICAgIExvY2FsIGJyYW5jaCBuYW1lIChkZWZhdWx0OiBIRUFEKQogICAtYyAgICAgICAgICAgICAgICAgIENyZWF0ZSBhbiBSRkMgKFJlcXVlc3QgZm9yIENvbW1lbnQpIHBhdGNoIHNlcmllcwogICAtaCAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UKKyAgLWEgICAgICAgICAgICAgICAgICBBdXRvbWF0aWNhbGx5IHB1c2ggbG9jYWwgYnJhbmNoICgtbCkgdG8gcmVtb3RlIGJyYW5jaCAoLWIpLAorICAgICAgICAgICAgICAgICAgICAgIG9yIHNldCBDUFJfQ09OVFJJQl9BVVRPX1BVU0ggaW4gZW52CiAgIC1pIGNvbW1pdF9pZCAgICAgICAgRW5kaW5nIGNvbW1pdCAoZGVmYXVsdDogSEVBRCkKICAgLW0gbXNnX2JvZHlfZmlsZSAgICBUaGUgZmlsZSBjb250YWluaW5nIGEgYmx1cmIgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgc3VtbWFyeSBlbWFpbAogICAtbyBvdXRwdXRfZGlyICAgICAgIFNwZWNpZnkgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBtZXNzYWdlcyAoZGVmYXVsdDogcHVsbC1QSUQpCiAgIC1wIHByZWZpeCAgICAgICAgICAgVXNlIFtwcmVmaXggTi9NXSBpbnN0ZWFkIG9mIFtQQVRDSCBOL01dIGFzIHRoZSBzdWJqZWN0IHByZWZpeAogICAtciByZWxhdGl2ZV90byAgICAgIFN0YXJ0aW5nIGNvbW1pdCAoZGVmYXVsdDogbWFzdGVyKQogICAtcyBzdWJqZWN0ICAgICAgICAgIFRoZSBzdWJqZWN0IHRvIGJlIGluc2VydGVkIGludG8gdGhlIHN1bW1hcnkgZW1haWwKLSAgLXUgcmVtb3RlICAgICAgICAgICBUaGUgZ2l0IHJlbW90ZSB3aGVyZSB0aGUgYnJhbmNoIGlzIGxvY2F0ZWQKKyAgLXUgcmVtb3RlICAgICAgICAgICBUaGUgZ2l0IHJlbW90ZSB3aGVyZSB0aGUgYnJhbmNoIGlzIGxvY2F0ZWQsIG9yIHNldCBDUFJfQ09OVFJJQl9SRU1PVEUgaW4gZW52CiAgIC1kIHJlbGF0aXZlX2RpciAgICAgR2VuZXJhdGUgcGF0Y2hlcyByZWxhdGl2ZSB0byBkaXJlY3RvcnkKIAogIEV4YW1wbGVzOgpAQCAtNTgsOCArNjAsOSBAQAogRU9NCiB9CiAKK1JFTU9URT0iJENQUl9DT05UUklCX1JFTU9URSIKICMgUGFyc2UgYW5kIHZhbGlkYXRlIGFyZ3VtZW50cwotd2hpbGUgZ2V0b3B0cyAiYjpjZDpoaTptOm86cDpyOnM6dTpsOiIgT1BUOyBkbword2hpbGUgZ2V0b3B0cyAiYjphY2Q6aGk6bTpvOnA6cjpzOnU6bDoiIE9QVDsgZG8KIAljYXNlICRPUFQgaW4KIAliKQogCQlCUkFOQ0g9IiRPUFRBUkciCkBAIC0xMDEsMzUgKzEwNCw0NSBAQAogCQk7OwogCXUpCiAJCVJFTU9URT0iJE9QVEFSRyIKLQkJUkVNT1RFX1VSTD0kKGdpdCBjb25maWcgcmVtb3RlLiRSRU1PVEUudXJsKQotCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQkJCWVjaG8gIkVSUk9SOiBnaXQgY29uZmlnIGZhaWxlZCB0byBmaW5kIGEgdXJsIGZvciAnJFJFTU9URSciCi0JCQllY2hvCi0JCQllY2hvICJUbyBhZGQgYSByZW1vdGUgdXJsIGZvciAkUkVNT1RFLCB1c2U6IgotCQkJZWNobyAiICBnaXQgY29uZmlnIHJlbW90ZS4kUkVNT1RFLnVybCA8dXJsPiIKLQkJCWV4aXQgMQotCQlmaQotCi0JCSMgUmV3cml0ZSBwcml2YXRlIFVSTHMgdG8gcHVibGljIFVSTHMKLQkJIyBEZXRlcm1pbmUgdGhlIHJlcG9zaXRvcnkgbmFtZSBmb3IgdXNlIGluIHRoZSBXRUJfVVJMIGxhdGVyCi0JCWNhc2UgIiRSRU1PVEVfVVJMIiBpbgotCQkqQCopCi0JCQlVU0VSX1JFPSJbQS1aYS16MC05Xy5AXVtBLVphLXowLTlfLkAtXSpcJFw/IgotCQkJUFJPVE9fUkU9IlthLXpdW2EteitdKjovLyIKLQkJCUdJVF9SRT0iXCheXCgkUFJPVE9fUkVcKVw/JFVTRVJfUkVAXClcKFteOi9dKlwpWzovXVwoLipcKSIKLQkJCVJFTU9URV9VUkw9JHtSRU1PVEVfVVJMJS5naXR9Ci0JCQlSRU1PVEVfUkVQTz0kKGVjaG8gJFJFTU9URV9VUkwgfCBzZWQgInMjJEdJVF9SRSNcNCMiKQotCQkJUkVNT1RFX1VSTD0kKGVjaG8gJFJFTU9URV9VUkwgfCBzZWQgInMjJEdJVF9SRSNnaXQ6Ly9cMy9cNCMiKQotCQkJOzsKLQkJKikKLQkJCWVjaG8gIldBUk5JTkc6IFVucmVjb2duaXplZCByZW1vdGUgVVJMOiAkUkVNT1RFX1VSTCIKLQkJCWVjaG8gIiAgICAgICAgIFRoZSBwdWxsIGFuZCBicm93c2UgVVJMcyB3aWxsIGxpa2VseSBiZSBpbmNvcnJlY3QiCi0JCQk7OwotCQllc2FjCisJCTs7CisJYSkKKwkJQ1BSX0NPTlRSSUJfQVVUT19QVVNIPSIxIgogCQk7OwogCWVzYWMKIGRvbmUKIAoraWYgWyAteiAiJFJFTU9URSIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBNaXNzaW5nIHBhcmFtZXRlciAtdSBvciBDUFJfQ09OVFJJQl9SRU1PVEUgaW4gZW52LCBubyBnaXQgcmVtb3RlISIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworUkVNT1RFX1VSTD0kKGdpdCBjb25maWcgcmVtb3RlLiRSRU1PVEUudXJsKQoraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJZWNobyAiRVJST1I6IGdpdCBjb25maWcgZmFpbGVkIHRvIGZpbmQgYSB1cmwgZm9yICckUkVNT1RFJyIKKwllY2hvCisJZWNobyAiVG8gYWRkIGEgcmVtb3RlIHVybCBmb3IgJFJFTU9URSwgdXNlOiIKKwllY2hvICIgIGdpdCBjb25maWcgcmVtb3RlLiRSRU1PVEUudXJsIDx1cmw+IgorCWV4aXQgMQorZmkKKworIyBSZXdyaXRlIHByaXZhdGUgVVJMcyB0byBwdWJsaWMgVVJMcworIyBEZXRlcm1pbmUgdGhlIHJlcG9zaXRvcnkgbmFtZSBmb3IgdXNlIGluIHRoZSBXRUJfVVJMIGxhdGVyCitjYXNlICIkUkVNT1RFX1VSTCIgaW4KKypAKikKKwlVU0VSX1JFPSJbQS1aYS16MC05Xy5AXVtBLVphLXowLTlfLkAtXSpcJFw/IgorCVBST1RPX1JFPSJbYS16XVthLXorXSo6Ly8iCisJR0lUX1JFPSJcKF5cKCRQUk9UT19SRVwpXD8kVVNFUl9SRUBcKVwoW146L10qXClbOi9dXCguKlwpIgorCVJFTU9URV9VUkw9JHtSRU1PVEVfVVJMJS5naXR9CisJUkVNT1RFX1JFUE89JChlY2hvICRSRU1PVEVfVVJMIHwgc2VkICJzIyRHSVRfUkUjXDQjIikKKwlSRU1PVEVfVVJMPSQoZWNobyAkUkVNT1RFX1VSTCB8IHNlZCAicyMkR0lUX1JFI2dpdDovL1wzL1w0IyIpCisJOzsKKyopCisJZWNobyAiV0FSTklORzogVW5yZWNvZ25pemVkIHJlbW90ZSBVUkw6ICRSRU1PVEVfVVJMIgorCWVjaG8gIiAgICAgICAgIFRoZSBwdWxsIGFuZCBicm93c2UgVVJMcyB3aWxsIGxpa2VseSBiZSBpbmNvcnJlY3QiCisJOzsKK2VzYWMKKwogaWYgWyAteiAiJEJSQU5DSCIgXTsgdGhlbgogCUJSQU5DSD0kKGdpdCBicmFuY2ggfCBncmVwIC1lICJeXCogIiB8IGN1dCAtZCcgJyAtZjIpCiAJZWNobyAiTk9URTogQXNzdW1pbmcgcmVtb3RlIGJyYW5jaCAnJEJSQU5DSCcsIHVzZSAtYiB0byBvdmVycmlkZS4iCkBAIC0xNDAsMTIgKzE1Myw2IEBACiAJZWNobyAiTk9URTogQXNzdW1pbmcgbG9jYWwgYnJhbmNoIEhFQUQsIHVzZSAtbCB0byBvdmVycmlkZS4iCiBmaQogCi1pZiBbIC16ICIkUkVNT1RFX1VSTCIgXTsgdGhlbgotCWVjaG8gIkVSUk9SOiBNaXNzaW5nIHBhcmFtZXRlciAtdSwgbm8gZ2l0IHJlbW90ZSEiCi0JdXNhZ2UKLQlleGl0IDEKLWZpCi0KIGlmIFsgJFJGQyAtZXEgMSBdOyB0aGVuCiAJUFJFRklYPSJSRkMgJFBSRUZJWCIKIGZpCkBAIC0xNzEsNiArMTc4LDExIEBACiAjIFBlcmZvcm0gYSBzYW5pdHkgdGVzdCBvbiB0aGUgd2ViIFVSTC4gSXNzdWUgYSB3YXJuaW5nIGlmIGl0IGlzIG5vdAogIyBhY2Nlc3NpYmxlLCBidXQgZG8gbm90IGFib3J0IGFzIHVzZXJzIG1heSB3YW50IHRvIHJ1biBvZmZsaW5lLgogaWYgWyAtbiAiJFdFQl9VUkwiIF07IHRoZW4KKwlpZiBbICIkQ1BSX0NPTlRSSUJfQVVUT19QVVNIIiA9ICIxIiBdOyB0aGVuCisJCWVjaG8gIlB1c2hpbmcgJyRCUkFOQ0gnIG9uICckUkVNT1RFJyBhcyByZXF1ZXN0ZWQuLi4iCisJCWdpdCBwdXNoICRSRU1PVEUgJExfQlJBTkNIOiRCUkFOQ0gKKwkJZWNobyAiIgorCWZpCiAJd2dldCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIC1xICRXRUJfVVJMIC1PIC9kZXYvbnVsbAogCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgogCQllY2hvICJXQVJOSU5HOiBCcmFuY2ggJyRCUkFOQ0gnIHdhcyBub3QgZm91bmQgb24gdGhlIGNvbnRyaWIgZ2l0IHRyZWUuIgpAQCAtMjE3LDYgKzIyOSw3IEBACiBmaQogaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAJZWNobyAiRVJST1I6IGdpdCByZXF1ZXN0LXB1bGwgcmVwb3J0ZWQgYW4gZXJyb3IiCisJcm0gLXJmICRPRElSCiAJZXhpdCAxCiBmaQogCkBAIC0yNDksNyArMjYyLDEzIEBACiAJc2VkIC1pICIvQkxVUkIgSEVSRS8gZCIgIiRDTCIKIGZpCiAKLSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgc3ViamVjdCwgcmVwbGFjZSB0aGUgU1VCSkVDVCB0b2tlbiB3aXRoIGl0LgorIyBTZXQgc3ViamVjdCBhdXRvbWF0aWNhbGx5IGlmIHRoZXJlIGlzIG9ubHkgb25lIHBhdGNoCitwYXRjaF9jbnQ9YGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAke1JFTEFUSVZFX1RPfS4uJHtMX0JSQU5DSH0gfCB3YyAtbGAKK2lmIFsgLXogIiRTVUJKRUNUIiAtYSAkcGF0Y2hfY250IC1lcSAxIF07IHRoZW4KKyAgICBTVUJKRUNUPSJgZ2l0IGxvZyAtLWZvcm1hdD0lcyAke1JFTEFUSVZFX1RPfS4uJHtMX0JSQU5DSH1gIgorZmkKKworIyBSZXBsYWNlIHRoZSBTVUJKRUNUIHRva2VuIHdpdGggaXQuCiBpZiBbIC1uICIkU1VCSkVDVCIgXTsgdGhlbgogCXNlZCAtaSAtZSAicy9cKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKi8kU1VCSkVDVC8iICIkQ0wiCiBmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2RldnRvb2wKaW5kZXggNDc4MDM5MC4uMGMzMmM1MCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9kZXZ0b29sCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgT3BlbkVtYmVkZGVkIERldmVsb3BtZW50IHRvb2wKICMKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGdsb2IKIGltcG9ydCByZQotaW1wb3J0IENvbmZpZ1BhcnNlcgoraW1wb3J0IGNvbmZpZ3BhcnNlcgogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBsb2dnaW5nCiAKQEAgLTUxLDEyICs1MSwxMiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuY29uZmlnX29iaiA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgc2VsZi5jb25maWdfb2JqID0gY29uZmlncGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQogCiAgICAgZGVmIGdldChzZWxmLCBzZWN0aW9uLCBvcHRpb24sIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldCA9IHNlbGYuY29uZmlnX29iai5nZXQoc2VjdGlvbiwgb3B0aW9uKQotICAgICAgICBleGNlcHQgKENvbmZpZ1BhcnNlci5Ob09wdGlvbkVycm9yLCBDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IpOgorICAgICAgICBleGNlcHQgKGNvbmZpZ3BhcnNlci5Ob09wdGlvbkVycm9yLCBjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IpOgogICAgICAgICAgICAgaWYgZGVmYXVsdCAhPSBOb25lOgogICAgICAgICAgICAgICAgIHJldCA9IGRlZmF1bHQKICAgICAgICAgICAgIGVsc2U6CkBAIC04Niw2ICs4NiwxMSBAQAogICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5jb25maWdfb2JqLndyaXRlKGYpCiAKKyAgICBkZWYgc2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgorICAgICAgICBpZiBub3Qgc2VsZi5jb25maWdfb2JqLmhhc19zZWN0aW9uKHNlY3Rpb24pOgorICAgICAgICAgICAgc2VsZi5jb25maWdfb2JqLmFkZF9zZWN0aW9uKHNlY3Rpb24pCisgICAgICAgIHNlbGYuY29uZmlnX29iai5zZXQoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKKwogY2xhc3MgQ29udGV4dDoKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShrd2FyZ3MpCkBAIC0xNzQsMTMgKzE3OSwxNiBAQAogICAgICAgICAjIEFkZCBhIFJFQURNRSBmaWxlCiAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnUkVBRE1FJyksICd3JykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoJ1RoaXMgbGF5ZXIgd2FzIGNyZWF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBkZXZ0b29sIHV0aWxpdHkgaW4gb3JkZXIgdG9cbicpCi0gICAgICAgICAgICBmLndyaXRlKCdjb250YWluIHJlY2lwZXMgYW5kIGJiYXBwZW5kcy4gSW4gbW9zdCBpbnN0YW5jZXMgeW91IHNob3VsZCB1c2UgdGhlXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnY29udGFpbiByZWNpcGVzIGFuZCBiYmFwcGVuZHMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHdvcmtlZCBvbi4gVGhlIGlkZWFcbicpCisgICAgICAgICAgICBmLndyaXRlKCdpcyB0aGF0IHRoZSBjb250ZW50cyBpcyB0ZW1wb3JhcnkgLSBvbmNlIHlvdSBoYXZlIGZpbmlzaGVkIHdvcmtpbmcgb24gYVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ3JlY2lwZSB5b3UgdXNlIHRoZSBhcHByb3ByaWF0ZSBtZXRob2QgdG8gbW92ZSB0aGUgZmlsZXMgeW91IGhhdmUgYmVlblxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ3dvcmtpbmcgb24gdG8gYSBwcm9wZXIgbGF5ZXIuIEluIG1vc3QgaW5zdGFuY2VzIHlvdSBzaG91bGQgdXNlIHRoZVxuJykKICAgICAgICAgICAgIGYud3JpdGUoJ2RldnRvb2wgdXRpbGl0eSB0byBtYW5hZ2UgZmlsZXMgd2l0aGluIGl0IHJhdGhlciB0aGFuIG1vZGlmeWluZyBmaWxlc1xuJykKICAgICAgICAgICAgIGYud3JpdGUoJ2RpcmVjdGx5IChhbHRob3VnaCByZWNpcGVzIGFkZGVkIHdpdGggImRldnRvb2wgYWRkIiB3aWxsIG9mdGVuIG5lZWRcbicpCiAgICAgICAgICAgICBmLndyaXRlKCdkaXJlY3QgbW9kaWZpY2F0aW9uLilcbicpCi0gICAgICAgICAgICBmLndyaXRlKCdcbklmIHlvdSBubyBsb25nZXIgbmVlZCB0byB1c2UgZGV2dG9vbCB5b3UgY2FuIHJlbW92ZSB0aGUgcGF0aCB0byB0aGlzXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnd29ya3NwYWNlIGxheWVyIGZyb20geW91ciBjb25mL2JibGF5ZXJzLmNvbmYgZmlsZSAoYW5kIHRoZW4gZGVsZXRlIHRoZVxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ2xheWVyLCBpZiB5b3Ugd2lzaCkuXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG5JZiB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8gdXNlIGRldnRvb2wgb3IgdGhlIHdvcmtzcGFjZSBsYXllclwncyBjb250ZW50c1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ3lvdSBjYW4gcmVtb3ZlIHRoZSBwYXRoIHRvIHRoaXMgd29ya3NwYWNlIGxheWVyIGZyb20geW91ciBjb25mL2JibGF5ZXJzLmNvbmZcbicpCisgICAgICAgICAgICBmLndyaXRlKCdmaWxlIChhbmQgdGhlbiBkZWxldGUgdGhlIGxheWVyLCBpZiB5b3Ugd2lzaCkuXG4nKQogICAgICAgICAgICAgZi53cml0ZSgnXG5Ob3RlIHRoYXQgYnkgZGVmYXVsdCwgaWYgZGV2dG9vbCBmZXRjaGVzIGFuZCB1bnBhY2tzIHNvdXJjZSBjb2RlLCBpdFxuJykKICAgICAgICAgICAgIGYud3JpdGUoJ3dpbGwgcGxhY2UgaXQgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgYSAic291cmNlcyIgc3ViZGlyZWN0b3J5IG9mIHRoZVxuJykKICAgICAgICAgICAgIGYud3JpdGUoJ2xheWVyLiBJZiB5b3UgcHJlZmVyIGl0IHRvIGJlIGVsc2V3aGVyZSB5b3UgY2FuIHNwZWNpZnkgdGhlIHNvdXJjZVxuJykKQEAgLTI4MSwxOCArMjg5LDE3IEBACiAKICAgICBpZiBnbG9iYWxfYXJncy5iYnBhdGggaXMgTm9uZToKICAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoY29uZmlnX29ubHk9VHJ1ZSwgYmFzZXBhdGg9YmFzZXBhdGgpCi0gICAgICAgIGdsb2JhbF9hcmdzLmJicGF0aCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQotICAgIGVsc2U6Ci0gICAgICAgIHRpbmZvaWwgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdsb2JhbF9hcmdzLmJicGF0aCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKICAgICBmb3IgcGF0aCBpbiBbc2NyaXB0c19wYXRoXSArIGdsb2JhbF9hcmdzLmJicGF0aC5zcGxpdCgnOicpOgogICAgICAgICBwbHVnaW5wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdsaWInLCAnZGV2dG9vbCcpCiAgICAgICAgIHNjcmlwdHV0aWxzLmxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpCiAKLSAgICBpZiB0aW5mb2lsOgotICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKLQogICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoZGVzdD0ic3VicGFyc2VyX25hbWUiLCB0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorICAgIHN1YnBhcnNlcnMucmVxdWlyZWQgPSBUcnVlCiAKICAgICBzdWJwYXJzZXJzLmFkZF9zdWJwYXJzZXJfZ3JvdXAoJ3NkaycsICdTREsgbWFpbnRlbmFuY2UnLCAtMikKICAgICBzdWJwYXJzZXJzLmFkZF9zdWJwYXJzZXJfZ3JvdXAoJ2FkdmFuY2VkJywgJ0FkdmFuY2VkJywgLTEpCkBAIC0zMjUsNyArMzMyLDcgQEAKICAgICBleGNlcHQgRGV2dG9vbEVycm9yIGFzIGVycjoKICAgICAgICAgaWYgc3RyKGVycik6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGVycikpCi0gICAgICAgIHJldCA9IDEKKyAgICAgICAgcmV0ID0gZXJyLmV4aXRjb2RlCiAgICAgZXhjZXB0IGFyZ3BhcnNlX29lLkFyZ3VtZW50VXNhZ2VFcnJvciBhcyBhZToKICAgICAgICAgcGFyc2VyLmVycm9yX3N1YmNvbW1hbmQoYWUubWVzc2FnZSwgYWUuc3ViY29tbWFuZCkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2dlbi1sb2NrZWRzaWctY2FjaGUKaW5kZXggMDk4NmEyMS4uNDlkZTc0ZSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9nZW4tbG9ja2Vkc2lnLWNhY2hlCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtMTUsMTUgKzE1LDI3IEBACiAKIGlmIGxlbihzeXMuYXJndikgPCA1OgogICAgIHByaW50KCJJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBzcGVjaWZpZWQiKQotICAgIHByaW50KCJzeW50YXg6IGdlbi1sb2NrZWRzaWctY2FjaGUgPGxvY2tlZC1zaWdzLmluYz4gPGlucHV0LWNhY2hlZGlyPiA8b3V0cHV0LWNhY2hlZGlyPiA8bmF0aXZlbHNic3RyaW5nPiIpCisgICAgcHJpbnQoInN5bnRheDogZ2VuLWxvY2tlZHNpZy1jYWNoZSA8bG9ja2VkLXNpZ3MuaW5jPiA8aW5wdXQtY2FjaGVkaXI+IDxvdXRwdXQtY2FjaGVkaXI+IDxuYXRpdmVsc2JzdHJpbmc+IFtmaWx0ZXJmaWxlXSIpCiAgICAgc3lzLmV4aXQoMSkKIAorZmlsdGVybGlzdCA9IFtdCitpZiBsZW4oc3lzLmFyZ3YpID4gNToKKyAgICBwcmludCgnUmVhZGluZyBmaWx0ZXIgZmlsZSAlcycgJSBzeXMuYXJndls1XSkKKyAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbNV0pIGFzIGY6CisgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBpZiAiOiIgaW4gbDoKKyAgICAgICAgICAgICAgICBmaWx0ZXJsaXN0LmFwcGVuZChsLnJzdHJpcCgpKQorCiBwcmludCgnUmVhZGluZyAlcycgJSBzeXMuYXJndlsxXSkKIHNpZ3MgPSBbXQogd2l0aCBvcGVuKHN5cy5hcmd2WzFdKSBhcyBmOgogICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CiAgICAgICAgIGlmICI6IiBpbiBsOgotICAgICAgICAgICAgc2lncy5hcHBlbmQobC5zcGxpdCgiOiIpWzJdLnNwbGl0KClbMF0pCisgICAgICAgICAgICB0YXNrLCBzaWcgPSBsLnNwbGl0KClbMF0ucnNwbGl0KCc6JywgMSkKKyAgICAgICAgICAgIGlmIGZpbHRlcmxpc3QgYW5kIG5vdCB0YXNrIGluIGZpbHRlcmxpc3Q6CisgICAgICAgICAgICAgICAgcHJpbnQoJ0ZpbHRlcmluZyBvdXQgJXMnICUgdGFzaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2lncy5hcHBlbmQoc2lnKQogCiBwcmludCgnR2F0aGVyaW5nIGZpbGUgbGlzdCcpCiBmaWxlcyA9IHNldCgpCkBAIC00NSwxMyArNTcsMTQgQEAKICAgICBkZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGRzdCkKICAgICBta2RpcihkZXN0ZGlyKQogCisgICAgc3JjID0gb3MucGF0aC5yZWFscGF0aChmKQogICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CiAgICAgICAgIG9zLnJlbW92ZShkc3QpCi0gICAgaWYgKG9zLnN0YXQoZikuc3RfZGV2ID09IG9zLnN0YXQoZGVzdGRpcikuc3RfZGV2KToKKyAgICBpZiAob3Muc3RhdChzcmMpLnN0X2RldiA9PSBvcy5zdGF0KGRlc3RkaXIpLnN0X2Rldik6CiAgICAgICAgIHByaW50KCdsaW5raW5nJykKLSAgICAgICAgb3MubGluayhmLCBkc3QpCisgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoJ2NvcHlpbmcnKQotICAgICAgICBzaHV0aWwuY29weWZpbGUoZiwgZHN0KQorICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkc3QpCiAKIHByaW50KCdEb25lIScpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYXJncGFyc2Vfb2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYXJncGFyc2Vfb2UucHkKaW5kZXggYmYzZWJhZC4uYmY2ZWIxNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2FyZ3BhcnNlX29lLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9hcmdwYXJzZV9vZS5weQpAQCAtMTQsMjMgKzE0LDM1IEBACiAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdmb3JtYXR0ZXJfY2xhc3MnLCBPZUhlbHBGb3JtYXR0ZXIpCiAgICAgICAgIHNlbGYuX3N1YnBhcnNlcl9ncm91cHMgPSBPcmRlcmVkRGljdCgpCiAgICAgICAgIHN1cGVyKEFyZ3VtZW50UGFyc2VyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3Bvc2l0aW9uYWxzLnRpdGxlID0gJ2FyZ3VtZW50cycKKyAgICAgICAgc2VsZi5fb3B0aW9uYWxzLnRpdGxlID0gJ29wdGlvbnMnCiAKICAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0VSUk9SOiAlc1xuJyAlIG1lc3NhZ2UpCi0gICAgICAgIHNlbGYucHJpbnRfaGVscCgpCisgICAgICAgICIiImVycm9yKG1lc3NhZ2U6IHN0cmluZykKKworICAgICAgICBQcmludHMgYSBoZWxwIG1lc3NhZ2UgaW5jb3Jwb3JhdGluZyB0aGUgbWVzc2FnZSB0byBzdGRlcnIgYW5kCisgICAgICAgIGV4aXRzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcHJpbnRfbWVzc2FnZSgnJXM6IGVycm9yOiAlc1xuJyAlIChzZWxmLnByb2csIG1lc3NhZ2UpLCBzeXMuc3RkZXJyKQorICAgICAgICBzZWxmLnByaW50X2hlbHAoc3lzLnN0ZGVycikKICAgICAgICAgc3lzLmV4aXQoMikKIAogICAgIGRlZiBlcnJvcl9zdWJjb21tYW5kKHNlbGYsIG1lc3NhZ2UsIHN1YmNvbW1hbmQpOgogICAgICAgICBpZiBzdWJjb21tYW5kOgotICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYWN0aW9uLCBhcmdwYXJzZS5fU3ViUGFyc2Vyc0FjdGlvbik6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBjaG9pY2UsIHN1YnBhcnNlciBpbiBhY3Rpb24uY2hvaWNlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hvaWNlID09IHN1YmNvbW1hbmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicGFyc2VyLmVycm9yKG1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9nZXRfc3VicGFyc2VyX2FjdGlvbigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicGFyc2VyID0gYWN0aW9uLl9uYW1lX3BhcnNlcl9tYXBbc3ViY29tbWFuZF0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCdubyBzdWJwYXJzZXIgZm9yIG5hbWUgIiVzIicgJSBzdWJjb21tYW5kKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdWJwYXJzZXIuZXJyb3IobWVzc2FnZSkKKwogICAgICAgICBzZWxmLmVycm9yKG1lc3NhZ2UpCiAKICAgICBkZWYgYWRkX3N1YnBhcnNlcnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgJ2Rlc3QnIG5vdCBpbiBrd2FyZ3M6CisgICAgICAgICAgICBrd2FyZ3NbJ2Rlc3QnXSA9ICdfc3VicGFyc2VyX25hbWUnCisKICAgICAgICAgcmV0ID0gc3VwZXIoQXJndW1lbnRQYXJzZXIsIHNlbGYpLmFkZF9zdWJwYXJzZXJzKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgIyBOZWVkIGEgd2F5IG9mIGFjY2Vzc2luZyB0aGUgcGFyZW50IHBhcnNlcgogICAgICAgICByZXQuX3BhcmVudF9wYXJzZXIgPSBzZWxmCkBAIC00Myw2ICs1NSwzOCBAQAogICAgIGRlZiBhZGRfc3VicGFyc2VyX2dyb3VwKHNlbGYsIGdyb3VwbmFtZSwgZ3JvdXBkZXNjLCBvcmRlcj0wKToKICAgICAgICAgc2VsZi5fc3VicGFyc2VyX2dyb3Vwc1tncm91cG5hbWVdID0gKGdyb3VwZGVzYywgb3JkZXIpCiAKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmdzPU5vbmUsIG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgIiIiUGFyc2UgYXJndW1lbnRzLCB1c2luZyB0aGUgY29ycmVjdCBzdWJwYXJzZXIgdG8gc2hvdyB0aGUgZXJyb3IuIiIiCisgICAgICAgIGFyZ3MsIGFyZ3YgPSBzZWxmLnBhcnNlX2tub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlKQorICAgICAgICBpZiBhcmd2OgorICAgICAgICAgICAgbWVzc2FnZSA9ICd1bnJlY29nbml6ZWQgYXJndW1lbnRzOiAlcycgJSAnICcuam9pbihhcmd2KQorICAgICAgICAgICAgaWYgc2VsZi5fc3VicGFyc2VyczoKKyAgICAgICAgICAgICAgICBzdWJwYXJzZXIgPSBzZWxmLl9nZXRfc3VicGFyc2VyKGFyZ3MpCisgICAgICAgICAgICAgICAgc3VicGFyc2VyLmVycm9yKG1lc3NhZ2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IobWVzc2FnZSkKKyAgICAgICAgICAgIHN5cy5leGl0KDIpCisgICAgICAgIHJldHVybiBhcmdzCisKKyAgICBkZWYgX2dldF9zdWJwYXJzZXIoc2VsZiwgYXJncyk6CisgICAgICAgIGFjdGlvbiA9IHNlbGYuX2dldF9zdWJwYXJzZXJfYWN0aW9uKCkKKyAgICAgICAgaWYgYWN0aW9uLmRlc3QgPT0gYXJncGFyc2UuU1VQUFJFU1M6CisgICAgICAgICAgICBzZWxmLmVycm9yKCdjYW5ub3QgZ2V0IHN1YnBhcnNlciwgdGhlIHN1YnBhcnNlciBhY3Rpb24gZGVzdCBpcyBzdXBwcmVzc2VkJykKKworICAgICAgICBuYW1lID0gZ2V0YXR0cihhcmdzLCBhY3Rpb24uZGVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5fbmFtZV9wYXJzZXJfbWFwW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoJ25vIHN1YnBhcnNlciBmb3IgbmFtZSAiJXMiJyAlIG5hbWUpCisKKyAgICBkZWYgX2dldF9zdWJwYXJzZXJfYWN0aW9uKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fc3VicGFyc2VyczoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoJ2Nhbm5vdCByZXR1cm4gdGhlIHN1YnBhcnNlciBhY3Rpb24sIG5vIHN1YnBhcnNlcnMgYWRkZWQnKQorCisgICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fc3VicGFyc2Vycy5fZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYWN0aW9uLCBhcmdwYXJzZS5fU3ViUGFyc2Vyc0FjdGlvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbgorCiAKIGNsYXNzIEFyZ3VtZW50U3ViUGFyc2VyKEFyZ3VtZW50UGFyc2VyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTUxLDEwICs5NSw2IEBACiAgICAgICAgIGlmICdvcmRlcicgaW4ga3dhcmdzOgogICAgICAgICAgICAgc2VsZi5fb3JkZXIgPSBrd2FyZ3MucG9wKCdvcmRlcicpCiAgICAgICAgIHN1cGVyKEFyZ3VtZW50U3ViUGFyc2VyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGZvciBhZ3JvdXAgaW4gc2VsZi5fYWN0aW9uX2dyb3VwczoKLSAgICAgICAgICAgIGlmIGFncm91cC50aXRsZSA9PSAnb3B0aW9uYWwgYXJndW1lbnRzJzoKLSAgICAgICAgICAgICAgICBhZ3JvdXAudGl0bGUgPSAnb3B0aW9ucycKLSAgICAgICAgICAgICAgICBicmVhawogCiAgICAgZGVmIHBhcnNlX2tub3duX2FyZ3Moc2VsZiwgYXJncz1Ob25lLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgICAgICMgVGhpcyB3b3JrcyBhcm91bmQgYXJncGFyc2Ugbm90IGhhbmRsaW5nIG9wdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzIGJlaW5nCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2VuZ2luZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvZW5naW5lLnB5CmluZGV4IDY2ZTIxNjIuLjA3YTE1YmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvZW5naW5lLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvZW5naW5lLnB5CkBAIC0zNCwyMyArMzQsMjIgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCi1mcm9tIHRhZ3MgaW1wb3J0ICoKK2Zyb20gLnRhZ3MgaW1wb3J0ICoKIGltcG9ydCBzaGxleAogaW1wb3J0IGpzb24KIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc2h1dGlsCiAKLWNsYXNzIExpbmUoKToKK2NsYXNzIExpbmUobWV0YWNsYXNzPUFCQ01ldGEpOgogICAgICIiIgogICAgIEdlbmVyaWMgKGFic3RyYWN0KSBjb250YWluZXIgcmVwcmVzZW50aW5nIGEgbGluZSB0aGF0IHdpbGwgYXBwZWFyCiAgICAgaW4gdGhlIEJTUC1nZW5lcmF0aW5nIHByb2dyYW0uCiAgICAgIiIiCi0gICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKICAgICAgICAgc2VsZi5saW5lID0gbGluZQogICAgICAgICBzZWxmLmdlbmVyYXRlZF9saW5lID0gIiIKLSAgICAgICAgc2VsZi5wcmlvID0gc3lzLm1heGludAorICAgICAgICBzZWxmLnByaW8gPSBzeXMubWF4c2l6ZQogICAgICAgICBzZWxmLmRpc2NhcmQgPSBGYWxzZQogCiAgICAgQGFic3RyYWN0bWV0aG9kCkBAIC0xNTUsNyArMTU0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wcmlvID0gaW50KHByb3BzWyJwcmlvIl0pCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhpbnQKKyAgICAgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhzaXplCiAKICAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKICAgICAgICAgdHJ5OgpAQCAtMjAxLDcgKzIwMCw3IEBACiAKICAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgogCi0gICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGRlZmF1bHQocmF3X2lucHV0KFwiIiArIG1zZyArICIgXCIpLCAiICsgbmFtZSArICIpIgorICAgICAgICBsaW5lID0gbmFtZSArICIgPSBkZWZhdWx0KGlucHV0KFwiIiArIG1zZyArICIgXCIpLCAiICsgbmFtZSArICIpIgogCiAgICAgICAgIHJldHVybiBsaW5lCiAKQEAgLTMxNCwxNiArMzEzLDE1IEBACiAKICAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgogCi0gICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGJvb2xlYW4ocmF3X2lucHV0KFwiIiArIG1zZyArICIgXCIpLCAiICsgbmFtZSArICIpIgorICAgICAgICBsaW5lID0gbmFtZSArICIgPSBib29sZWFuKGlucHV0KFwiIiArIG1zZyArICIgXCIpLCAiICsgbmFtZSArICIpIgogCiAgICAgICAgIHJldHVybiBsaW5lCiAKIAotY2xhc3MgTGlzdElucHV0TGluZShJbnB1dExpbmUpOgorY2xhc3MgTGlzdElucHV0TGluZShJbnB1dExpbmUsIG1ldGFjbGFzcz1BQkNNZXRhKToKICAgICAiIiIKICAgICBCYXNlIGNsYXNzIGZvciBMaXN0LWJhc2VkIElucHV0IGxpbmVzLiBlLmcuIENob2ljZWxpc3QsIENoZWNrbGlzdC4KICAgICAiIiIKLSAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CiAgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCkBAIC00NjQsOSArNDYyLDkgQEAKICAgICAgICAgY2hvaWNlc19zdHIgPSBzZWxmLmdlbl9jaG9pY2VzX3N0cihjaG9pY2VwYWlycykKICAgICAgICAgY2hvaWNlc192YWxfbGlzdCA9IHNlbGYuZ2VuX2Nob2ljZXNfdmFsX2xpc3QoY2hvaWNlcGFpcnMpCiAgICAgICAgIGlmIGNoZWNrbGlzdDoKLSAgICAgICAgICAgIGNob2ljZXZhbCA9IGRlZmF1bHQoZmluZF9jaG9pY2V2YWxzKHJhd19pbnB1dChtc2cgKyAiXG4iICsgY2hvaWNlc19zdHIpLCBjaG9pY2VzX3ZhbF9saXN0KSwgZGVmYXVsdF9jaG9pY2UpCisgICAgICAgICAgICBjaG9pY2V2YWwgPSBkZWZhdWx0KGZpbmRfY2hvaWNldmFscyhpbnB1dChtc2cgKyAiXG4iICsgY2hvaWNlc19zdHIpLCBjaG9pY2VzX3ZhbF9saXN0KSwgZGVmYXVsdF9jaG9pY2UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjaG9pY2V2YWwgPSBkZWZhdWx0KGZpbmRfY2hvaWNldmFsKHJhd19pbnB1dChtc2cgKyAiXG4iICsgY2hvaWNlc19zdHIpLCBjaG9pY2VzX3ZhbF9saXN0KSwgZGVmYXVsdF9jaG9pY2UpCisgICAgICAgICAgICBjaG9pY2V2YWwgPSBkZWZhdWx0KGZpbmRfY2hvaWNldmFsKGlucHV0KG1zZyArICJcbiIgKyBjaG9pY2VzX3N0ciksIGNob2ljZXNfdmFsX2xpc3QpLCBkZWZhdWx0X2Nob2ljZSkKIAogICAgICAgICByZXR1cm4gY2hvaWNldmFsCiAKQEAgLTU0MCwxMiArNTM4LDEyIEBACiAgICAgIiIiCiAgICAgbXNnID0gaW5wdXRfc3RyLnN0cmlwKCkgKyAiICIKIAotICAgIGdpdHVybCA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisgICAgZ2l0dXJsID0gZGVmYXVsdChpbnB1dChtc2cpLCBuYW1lKQogCiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgaWYgdmVyaWZ5X2dpdF9yZXBvKGdpdHVybCk6CiAgICAgICAgICAgICByZXR1cm4gZ2l0dXJsCi0gICAgICAgIGdpdHVybCA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisgICAgICAgIGdpdHVybCA9IGRlZmF1bHQoaW5wdXQobXNnKSwgbmFtZSkKIAogCiBkZWYgZ2V0X3ZlcmlmaWVkX2ZpbGUoaW5wdXRfc3RyLCBuYW1lLCBmaWxlbmFtZV9jYW5fYmVfbnVsbCk6CkBAIC01NTUsMTQgKzU1MywxNCBAQAogICAgICIiIgogICAgIG1zZyA9IGlucHV0X3N0ci5zdHJpcCgpICsgIiAiCiAKLSAgICBmaWxlbmFtZSA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisgICAgZmlsZW5hbWUgPSBkZWZhdWx0KGlucHV0KG1zZyksIG5hbWUpCiAKICAgICB3aGlsZSBUcnVlOgogICAgICAgICBpZiBub3QgZmlsZW5hbWUgYW5kIGZpbGVuYW1lX2Nhbl9iZV9udWxsOgogICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZQotICAgICAgICBmaWxlbmFtZSA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisgICAgICAgIGZpbGVuYW1lID0gZGVmYXVsdChpbnB1dChtc2cpLCBuYW1lKQogCiAKIGRlZiByZXBsYWNlX2ZpbGUocmVwbGFjZV90aGlzLCB3aXRoX3RoaXMpOgpAQCAtMTI2MywxMyArMTI2MSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZW5kID0gZmlsZW5hbWUuZmluZChDTE9TRV9UQUcsIG9wZW50YWdfc3RhcnQpCiAgICAgICAgIGlmIGVuZCA9PSAtMToKLSAgICAgICAgICAgIHByaW50ICJObyBjbG9zZSB0YWcgZm91bmQgZm9yIG9wZW4gdGFnIGluIGZpbGVuYW1lICVzIiAlIGZpbGVuYW1lCisgICAgICAgICAgICBwcmludCgiTm8gY2xvc2UgdGFnIGZvdW5kIGZvciBvcGVuIHRhZyBpbiBmaWxlbmFtZSAlcyIgJSBmaWxlbmFtZSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAgICAgIyB3ZSBoYXZlIGEge3sgdGFnIGkuZS4gY29kZQogICAgICAgICB0YWcgPSBmaWxlbmFtZVtvcGVudGFnX3N0YXJ0ICsgbGVuKE9QRU5fVEFHKTplbmRdLnN0cmlwKCkKICAgICAgICAgaWYgbm90IHRhZy5sc3RyaXAoKS5zdGFydHN3aXRoKElGX1RBRyk6Ci0gICAgICAgICAgICBwcmludCAiT25seSAnaWYnIHRhZ3MgYXJlIGFsbG93ZWQgaW4gZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMsIGZpbGVuYW1lOiAlcyIgJSBmaWxlbmFtZQorICAgICAgICAgICAgcHJpbnQoIk9ubHkgJ2lmJyB0YWdzIGFyZSBhbGxvd2VkIGluIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzLCBmaWxlbmFtZTogJXMiICUgZmlsZW5hbWUpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgICAgIHJldHVybiBDb2RlTGluZSh0YWcpCkBAIC0xMjg2LDcgKzEyODQsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlbGluZSk6CiAgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCB7fSwgIiIsIDApCiAgICAgICAgIHNlbGYuZ3JvdXAgPSBbXQotICAgICAgICBzZWxmLnByaW8gPSBzeXMubWF4aW50CisgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhzaXplCiAgICAgICAgIHNlbGYuZ3JvdXAuYXBwZW5kKGNvZGVsaW5lKQogCiAgICAgZGVmIGFwcGVuZChzZWxmLCBsaW5lKToKQEAgLTEzNjQsNyArMTM2Miw3IEBACiAgICAgICAgIG9mID0gb3BlbigiYnNwZ2VuLm91dCIsICJ3IikKICAgICAgICAgb2Yud3JpdGUoYnVmKQogICAgICAgICBvZi5jbG9zZSgpCi0gICAgZXhlYyBidWYKKyAgICBleGVjKGJ1ZikKIAogCiBkZWYgZ2VuX3RhcmdldChmaWxlcywgY29udGV4dCA9IE5vbmUpOgpAQCAtMTM4Nyw3ICsxMzg1LDcgQEAKICAgICBHZW5lcmF0ZSB1c2VyLXNwZWNpZmllZCBlbnRyaWVzIGZvciBpbnB1dCB2YWx1ZXMgaW5zdGVhZCBvZgogICAgIGdlbmVyYXRpbmcgaW5wdXQgcHJvbXB0cy4KICAgICAiIiIKLSAgICBmb3IgbmFtZSwgdmFsIGluIHByb3BlcnRpZXMuaXRlcml0ZW1zKCk6CisgICAgZm9yIG5hbWUsIHZhbCBpbiBwcm9wZXJ0aWVzLml0ZW1zKCk6CiAgICAgICAgIHByb2dyYW1fbGluZSA9IG5hbWUgKyAiID0gXCIiICsgdmFsICsgIlwiIgogICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChwcm9ncmFtX2xpbmUpCiAKQEAgLTE1MTUsNyArMTUxMyw3IEBACiAKICAgICBhcmNoZXMgPSBvcy5saXN0ZGlyKGFyY2hfcGF0aCkKICAgICBpZiBhcmNoIG5vdCBpbiBhcmNoZXMgb3IgYXJjaCA9PSAiY29tbW9uIjoKLSAgICAgICAgcHJpbnQgIkludmFsaWQga2FyY2gsIGV4aXRpbmdcbiIKKyAgICAgICAgcHJpbnQoIkludmFsaWQga2FyY2gsIGV4aXRpbmdcbiIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICB0YXJnZXQgPSBvcy5wYXRoLmpvaW4oYXJjaF9wYXRoLCBhcmNoKQpAQCAtMTU0MSw3ICsxNTM5LDcgQEAKICAgICBleHBhbmRfY29tbW9uIC0gYm9vbGVhbiwgdXNlIHRoZSBjb250ZW50cyBvZiAoZm9yIGJzcCBsYXllcnMpIGFyY2gvY29tbW9uCiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJfb3V0cHV0X2Rpcik6Ci0gICAgICAgIHByaW50ICJcbmxheWVyIG91dHB1dCBkaXIgYWxyZWFkeSBleGlzdHMsIGV4aXRpbmcuICglcykiICUgbGF5ZXJfb3V0cHV0X2RpcgorICAgICAgICBwcmludCgiXG5sYXllciBvdXRwdXQgZGlyIGFscmVhZHkgZXhpc3RzLCBleGl0aW5nLiAoJXMpIiAlIGxheWVyX291dHB1dF9kaXIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBwcm9wZXJ0aWVzID0gTm9uZQpAQCAtMTU0OSwxMSArMTU0NywxMyBAQAogICAgIGlmIHByb3BlcnRpZXNfZmlsZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW5maWxlID0gb3Blbihwcm9wZXJ0aWVzX2ZpbGUsICJyIikKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBqc29uLmxvYWQoaW5maWxlKQogICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3IgcmVhZGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3IgcmVhZGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgICAgIHByb3BlcnRpZXMgPSBqc29uLmxvYWQoaW5maWxlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHByaW50KCJXcm9uZyBmb3JtYXQgb24gcHJvcGVydGllcyBmaWxlICVzLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBpZiBwcm9wZXJ0aWVzX3N0ciBhbmQgbm90IHByb3BlcnRpZXM6CiAgICAgICAgIHByb3BlcnRpZXMgPSBqc29uLmxvYWRzKHByb3BlcnRpZXNfc3RyKQpAQCAtMTU5Nyw4ICsxNTk3LDggQEAKICAgICAiIiIKICAgICB5b2N0b19jb21tb25fY3JlYXRlKGxheWVyX25hbWUsICJsYXllciIsIHNjcmlwdHNfcGF0aCwgbGF5ZXJfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcywgRmFsc2UpCiAKLSAgICBwcmludCAiXG5OZXcgbGF5ZXIgY3JlYXRlZCBpbiAlcy5cbiIgJSAobGF5ZXJfb3V0cHV0X2RpcikKLSAgICBwcmludCAiRG9uJ3QgZm9yZ2V0IHRvIGFkZCBpdCB0byB5b3VyIEJCTEFZRVJTIChmb3IgZGV0YWlscyBzZWUgJXMvUkVBRE1FKS4iICUgKGxheWVyX291dHB1dF9kaXIpCisgICAgcHJpbnQoIlxuTmV3IGxheWVyIGNyZWF0ZWQgaW4gJXMuXG4iICUgbGF5ZXJfb3V0cHV0X2RpcikKKyAgICBwcmludCgiRG9uJ3QgZm9yZ2V0IHRvIGFkZCBpdCB0byB5b3VyIEJCTEFZRVJTIChmb3IgZGV0YWlscyBzZWUgJXMvUkVBRE1FKS4iICUgbGF5ZXJfb3V0cHV0X2RpcikKIAogCiBkZWYgeW9jdG9fYnNwX2NyZWF0ZShtYWNoaW5lLCBhcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzPU5vbmUpOgpAQCAtMTYxNiwyMSArMTYxNiwyMSBAQAogICAgICIiIgogICAgIHlvY3RvX2NvbW1vbl9jcmVhdGUobWFjaGluZSwgYXJjaCwgc2NyaXB0c19wYXRoLCBic3Bfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcykKIAotICAgIHByaW50ICJcbk5ldyAlcyBCU1AgY3JlYXRlZCBpbiAlcyIgJSAoYXJjaCwgYnNwX291dHB1dF9kaXIpCisgICAgcHJpbnQoIlxuTmV3ICVzIEJTUCBjcmVhdGVkIGluICVzIiAlIChhcmNoLCBic3Bfb3V0cHV0X2RpcikpCiAKIAogZGVmIHByaW50X2RpY3QoaXRlbXMsIGluZGVudCA9IDApOgogICAgICIiIgogICAgIFByaW50IHRoZSB2YWx1ZXMgaW4gYSBwb3NzaWJseSBuZXN0ZWQgZGljdGlvbmFyeS4KICAgICAiIiIKLSAgICBmb3Iga2V5LCB2YWwgaW4gaXRlbXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgIHByaW50ICIgICAgIippbmRlbnQgKyAiXCIlc1wiIDoiICUga2V5LAorICAgIGZvciBrZXksIHZhbCBpbiBpdGVtcy5pdGVtcygpOgorICAgICAgICBwcmludCgiICAgICIqaW5kZW50ICsgIlwiJXNcIiA6IiAlIGtleSkKICAgICAgICAgaWYgdHlwZSh2YWwpID09IGRpY3Q6Ci0gICAgICAgICAgICBwcmludCAieyIKKyAgICAgICAgICAgIHByaW50KCJ7IikKICAgICAgICAgICAgIHByaW50X2RpY3QodmFsLCBpbmRlbnQgKyAxKQotICAgICAgICAgICAgcHJpbnQgIiAgICAiKmluZGVudCArICJ9IgorICAgICAgICAgICAgcHJpbnQoIiAgICAiKmluZGVudCArICJ9IikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICIlcyIgJSB2YWwKKyAgICAgICAgICAgIHByaW50KCIlcyIgJSB2YWwpCiAKIAogZGVmIGdldF9wcm9wZXJ0aWVzKGlucHV0X2xpbmVzKToKQEAgLTE2ODEsNyArMTY4MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9mID0gb3Blbihwcm9wZXJ0aWVzX2ZpbGUsICJ3IikKICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHdyaXRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHdyaXRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICAgICBqc29uLmR1bXAocHJvcGVydGllcywgb2YsIGluZGVudD0xKQpAQCAtMTc1NSwxMCArMTc1NSwxMCBAQAogICAgICIiIgogICAgIGlmIHR5cGUgPT0gImNob2ljZWxpc3QiOgogICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzX2xpc3Q6Ci0gICAgICAgICAgICBwcmludCAiW1wiJXNcIiwgXCIlc1wiXSIgJSAodmFsdWVbMF0sIHZhbHVlWzFdKQorICAgICAgICAgICAgcHJpbnQoIltcIiVzXCIsIFwiJXNcIl0iICUgKHZhbHVlWzBdLCB2YWx1ZVsxXSkpCiAgICAgZWxpZiB0eXBlID09ICJib29sZWFuIjoKICAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlc19saXN0OgotICAgICAgICAgICAgcHJpbnQgIltcIiVzXCIsIFwiJXNcIl0iICUgKHZhbHVlWzBdLCB2YWx1ZVsxXSkKKyAgICAgICAgICAgIHByaW50KCJbXCIlc1wiLCBcIiVzXCJdIiAlICh2YWx1ZVswXSwgdmFsdWVbMV0pKQogCiAKIGRlZiB5b2N0b19sYXllcl9saXN0X3Byb3BlcnR5X3ZhbHVlcyhhcmNoLCBwcm9wZXJ0eSwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIGV4cGFuZF9jb21tb249VHJ1ZSk6CkBAIC0xNzg5LDcgKzE3ODksNyBAQAogCiAgICAgaW5wdXRfbGluZSA9IGZpbmRfaW5wdXRfbGluZShwcm9wZXJ0eSwgaW5wdXRfbGluZXMpCiAgICAgaWYgbm90IGlucHV0X2xpbmU6Ci0gICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIHZhbHVlcyBmb3IgcHJvcGVydHkgJXMiICUgcHJvcGVydHkKKyAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgdmFsdWVzIGZvciBwcm9wZXJ0eSAlcyIgJSBwcm9wZXJ0eSkKICAgICAgICAgcmV0dXJuCiAKICAgICB2YWx1ZXNfbGlzdCA9IFtdCkBAIC0xODE4LDcgKzE4MTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvZiA9IG9wZW4ocHJvcGVydGllc19maWxlLCAidyIpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciB3cml0aW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZQorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciB3cml0aW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAgICAganNvbi5kdW1wKHZhbHVlc19saXN0LCBvZikKQEAgLTE4MjYsNDQgKzE4MjYsMjggQEAKICAgICBwcmludF92YWx1ZXModHlwZSwgdmFsdWVzX2xpc3QpCiAKIAotZGVmIHlvY3RvX2JzcF9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKToKK2RlZiB5b2N0b19ic3BfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgpOgogICAgICIiIgogICAgIFByaW50IGF2YWlsYWJsZSBhcmNoaXRlY3R1cmVzLCBvciB0aGUgY29tcGxldGUgbGlzdCBvZiBwcm9wZXJ0aWVzCiAgICAgZGVmaW5lZCBieSB0aGUgQlNQLCBvciB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBhIHBhcnRpY3VsYXIgQlNQCiAgICAgcHJvcGVydHkuCiAgICAgIiIiCi0gICAgaWYgbGVuKGFyZ3MpIDwgMToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBpZiBhcmdzWzBdID09ICJrYXJjaCI6CisgICAgaWYgYXJncy5rYXJjaCA9PSAia2FyY2giOgogICAgICAgICBsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJwogICAgICAgICBic3BfcGF0aCA9IGxpYl9wYXRoICsgJy9ic3AnCiAgICAgICAgIGFyY2hfcGF0aCA9IGJzcF9wYXRoICsgJy9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gnCi0gICAgICAgIHByaW50ICJBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToiCisgICAgICAgIHByaW50KCJBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToiKQogICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKGFyY2hfcGF0aCk6CiAgICAgICAgICAgICBpZiBhcmNoID09ICJjb21tb24iIG9yIGFyY2ggPT0gImxheWVyIjoKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgcHJpbnQgIiAgICAlcyIgJSBhcmNoCi0gICAgICAgIHJldHVybiBUcnVlCi0gICAgZWxzZToKLSAgICAgICAgYXJjaCA9IGFyZ3NbMF0KKyAgICAgICAgICAgIHByaW50KCIgICAgJXMiICUgYXJjaCkKKyAgICAgICAgcmV0dXJuCiAKLSAgICBpZiBsZW4oYXJncykgPCAyIG9yIGxlbihhcmdzKSA+IDM6Ci0gICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIGFyZ3MucHJvcGVydGllczoKKyAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0aWVzKGFyZ3Mua2FyY2gsIHNjcmlwdHNfcGF0aCwgYXJncy5wcm9wZXJ0aWVzX2ZpbGUpCisgICAgZWxpZiBhcmdzLnByb3BlcnR5OgorICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnR5X3ZhbHVlcyhhcmdzLmthcmNoLCBhcmdzLnByb3BlcnR5LCBzY3JpcHRzX3BhdGgsIGFyZ3MucHJvcGVydGllc19maWxlKQogCi0gICAgaWYgbGVuKGFyZ3MpID09IDI6Ci0gICAgICAgIGlmIGFyZ3NbMV0gPT0gInByb3BlcnRpZXMiOgotICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0aWVzKGFyY2gsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBpZiBsZW4oYXJncykgPT0gMzoKLSAgICAgICAgaWYgYXJnc1sxXSA9PSAicHJvcGVydHkiOgotICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0eV92YWx1ZXMoYXJjaCwgYXJnc1syXSwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIHJldHVybiBUcnVlCiAKIAogZGVmIHlvY3RvX2xheWVyX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5CmluZGV4IDg1YTA5ZGQuLjRmMGQ3NzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvaGVscC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkKQEAgLTQyLDcgKzQyLDcgQEAKIAogICAgIGhlbHAgPSBzdWJjb21tYW5kcy5nZXQoc3ViY29tbWFuZCwgc3ViY29tbWFuZF9lcnJvcilbMl0KICAgICBwYWdlciA9IHN1YnByb2Nlc3MuUG9wZW4oJ2xlc3MnLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgcGFnZXIuY29tbXVuaWNhdGUoaGVscCkKKyAgICBwYWdlci5jb21tdW5pY2F0ZShieXRlcyhoZWxwLCAnVVRGLTgnKSkKIAogICAgIHJldHVybiBUcnVlCiAKQEAgLTE4Myw5ICsxODMsOSBAQAogeW9jdG9fYnNwX2xpc3RfdXNhZ2UgPSAiIiIKIAogIHVzYWdlOiB5b2N0by1ic3AgbGlzdCBrYXJjaAotICAgICAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnRpZXMKKyAgICAgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiAtLXByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCi0gICAgICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydHkgPHh4eD4KKyAgICAgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiAtLXByb3BlcnR5IDx4eHg+CiAgICAgICAgICAgICAgICAgWy1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQogCiAgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEKQEAgLTIxMyw5ICsyMTMsOSBAQAogCiBTWU5PUFNJUwogICAgIHlvY3RvLWJzcCBsaXN0IGthcmNoCi0gICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiBwcm9wZXJ0aWVzCisgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiAtLXByb3BlcnRpZXMKICAgICAgICAgICAgIFstLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KLSAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnR5IDx4eHg+CisgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiAtLXByb3BlcnR5IDx4eHg+CiAgICAgICAgICAgICBbLS1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCiAKIERFU0NSSVBUSU9OCkBAIC0yNDYsOSArMjQ2LDkgQEAKICAgICBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZSBwYWlycyBjb3JyZXNwb25kaW5nCiAgICAgdG8gdGhlIChwb3NzaWJseSBuZXN0ZWQpIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBkZWZpbmVkIGJ5IHRoZQogICAgIGlucHV0IHN0YXRlbWVudHMgdXNlZCBieSB0aGUgQlNQLiAgU29tZSBleGFtcGxlIG91dHB1dCBmb3IgdGhlCi0gICAgJ2xpc3QgcHJvcGVydGllcycgY29tbWFuZDoKKyAgICAnbGlzdCAtLXByb3BlcnRpZXMnIGNvbW1hbmQ6CiAKLSAgICAkIHlvY3RvLWJzcCBsaXN0IGFybSBwcm9wZXJ0aWVzCisgICAgJCB5b2N0by1ic3AgbGlzdCBhcm0gLS1wcm9wZXJ0aWVzCiAgICAgInRvdWNoc2NyZWVuIiA6IHsKICAgICAgICAgIm1zZyIgOiBEb2VzIHlvdXIgQlNQIGhhdmUgYSB0b3VjaHNjcmVlbj8gKHkvTikKICAgICAgICAgImRlZmF1bHQiIDogbgpAQCAtMzEwLDExICszMTAsMTEgQEAKICAgICBuYW1lOnZhbHVlIHBhaXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcwogICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvcGVydHkuCiAKLSAgICAkIHlvY3RvLWJzcCBsaXN0IGkzODYgcHJvcGVydHkgeHNlcnZlcl9jaG9pY2UKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGkzODYgLS1wcm9wZXJ0eSB4c2VydmVyX2Nob2ljZQogICAgICAgICBbInhzZXJ2ZXJfdmVzYSIsICJWRVNBIHhzZXJ2ZXIgc3VwcG9ydCJdCiAgICAgICAgIFsieHNlcnZlcl9pOTE1IiwgImk5MTUgeHNlcnZlciBzdXBwb3J0Il0KIAotICAgICQgeW9jdG8tYnNwIGxpc3QgYXJtIHByb3BlcnR5IGJhc2Vfa2JyYW5jaF9saW51eF95b2N0b18zXzAKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGFybSAtLXByb3BlcnR5IGJhc2Vfa2JyYW5jaF9saW51eF95b2N0b18zXzAKICAgICAgICAgR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMC4uLgogICAgICAgICBbInlvY3RvL2Jhc2UiLCAieW9jdG8vYmFzZSJdCiAgICAgICAgIFsieW9jdG8vZWcyMHQiLCAieW9jdG8vZWcyMHQiXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9rZXJuZWwucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weQppbmRleCBiYTY4YjYwLi5hM2VlMzI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weQpAQCAtMjksMTEgKzI5LDEwIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWZyb20gdGFncyBpbXBvcnQgKgorZnJvbSAudGFncyBpbXBvcnQgKgogaW1wb3J0IGdsb2IKIGltcG9ydCBzdWJwcm9jZXNzCi1mcm9tIGVuZ2luZSBpbXBvcnQgY3JlYXRlX2NvbnRleHQKLQorZnJvbSAuZW5naW5lIGltcG9ydCBjcmVhdGVfY29udGV4dAogCiBkZWYgZmluZF9iYmxheWVycygpOgogICAgICIiIgpAQCAtNDIsNyArNDEsNyBAQAogICAgIHRyeToKICAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uWyJCVUlMRERJUiJdCiAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHByaW50KCJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgYmJsYXllcnNfY29uZiA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCiAKQEAgLTUwLDEwICs0OSwxMCBAQAogCiAgICAgYml0YmFrZV9lbnZfY21kID0gImJpdGJha2UgLWUiCiAgICAgYml0YmFrZV9lbnZfbGluZXMgPSBzdWJwcm9jZXNzLlBvcGVuKGJpdGJha2VfZW52X2NtZCwgc2hlbGw9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQogCiAgICAgaWYgbm90IGJpdGJha2VfZW52X2xpbmVzOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgZ2V0ICclcycgb3V0cHV0LCBleGl0aW5nLiIgJSBiaXRiYWtlX2Vudl9jbWQKKyAgICAgICAgcHJpbnQoIkNvdWxkbid0IGdldCAnJXMnIG91dHB1dCwgZXhpdGluZy4iICUgYml0YmFrZV9lbnZfY21kKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgZm9yIGxpbmUgaW4gYml0YmFrZV9lbnZfbGluZXMuc3BsaXQoJ1xuJyk6CkBAIC02Miw4ICs2MSw3IEBACiAgICAgICAgICAgICBicmVhawogCiAgICAgaWYgbm90IGJibGF5ZXJzOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBCQkxBWUVSUyBpbiAlcyBvdXRwdXQsIGV4aXRpbmcuIiAlIFwKLSAgICAgICAgICAgIGJpdGJha2VfZW52X2NtZAorICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBCQkxBWUVSUyBpbiAlcyBvdXRwdXQsIGV4aXRpbmcuIiAlIGJpdGJha2VfZW52X2NtZCkKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIHJhd19sYXllcnMgPSBiYmxheWVycy5zcGxpdCgpCkBAIC0xMTAsOCArMTA4LDggQEAKICAgICAgICAgaWYgbGF5ZXIuZW5kc3dpdGgobWFjaGluZSk6CiAgICAgICAgICAgICByZXR1cm4gbGF5ZXIKIAotICAgIHByaW50ICJVbmFibGUgdG8gZmluZCB0aGUgQlNQIGxheWVyIGZvciBtYWNoaW5lICVzLiIgJSBtYWNoaW5lCi0gICAgcHJpbnQgIlBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbGlzdGVkIGluIGJibGF5ZXJzLmNvbmYiCisgICAgcHJpbnQoIlVuYWJsZSB0byBmaW5kIHRoZSBCU1AgbGF5ZXIgZm9yIG1hY2hpbmUgJXMuIiAlIG1hY2hpbmUpCisgICAgcHJpbnQoIlBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbGlzdGVkIGluIGJibGF5ZXJzLmNvbmYiKQogICAgIHN5cy5leGl0KDEpCiAKIApAQCAtMTkwLDggKzE4OCw4IEBACiAgICAgIiIiCiAgICAgY29uZmlnX2l0ZW1zID0gcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQogCi0gICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIGtlcm5lbCBjb25maWcgaXRlbXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lCi0gICAgcHJpbnQgZ2VuX2Nob2ljZXNfc3RyKGNvbmZpZ19pdGVtcykKKyAgICBwcmludCgiVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMga2VybmVsIGNvbmZpZyBpdGVtcyBmb3IgJXMgaXM6IiAlIG1hY2hpbmUpCisgICAgcHJpbnQoZ2VuX2Nob2ljZXNfc3RyKGNvbmZpZ19pdGVtcykpCiAKIAogZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfcm0oc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKQEAgLTIwMiw5ICsyMDAsOSBAQAogICAgICIiIgogICAgIGNvbmZpZ19pdGVtcyA9IHJlYWRfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKIAotICAgIHByaW50ICJTcGVjaWZ5IHRoZSBrZXJuZWwgY29uZmlnIGl0ZW1zIHRvIHJlbW92ZToiCi0gICAgaW5wdXQgPSByYXdfaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKGNvbmZpZ19pdGVtcykpCi0gICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBwcmludCgiU3BlY2lmeSB0aGUga2VybmVsIGNvbmZpZyBpdGVtcyB0byByZW1vdmU6IikKKyAgICBpbnAgPSBpbnB1dChnZW5fY2hvaWNlc19zdHIoY29uZmlnX2l0ZW1zKSkKKyAgICBybV9jaG9pY2VzID0gaW5wLnNwbGl0KCkKICAgICBybV9jaG9pY2VzLnNvcnQoKQogCiAgICAgcmVtb3ZlZCA9IFtdCkBAIC0yMTMsMTggKzIxMSwxOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIGNob2ljZSAoJXMpLCBleGl0aW5nIiAlIGNob2ljZSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihjb25maWdfaXRlbXMpOgotICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglZCksIGV4aXRpbmciICUgKGlkeCArIDEpCisgICAgICAgICAgICBwcmludCgiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICByZW1vdmVkLmFwcGVuZChjb25maWdfaXRlbXMucG9wKGlkeCkpCiAKICAgICB3cml0ZV9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjb25maWdfaXRlbXMpCiAKLSAgICBwcmludCAiUmVtb3ZlZCBpdGVtczoiCisgICAgcHJpbnQoIlJlbW92ZWQgaXRlbXM6IikKICAgICBmb3IgciBpbiByZW1vdmVkOgotICAgICAgICBwcmludCAiXHQlcyIgJSByCisgICAgICAgIHByaW50KCJcdCVzIiAlIHIpCiAKIAogZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY29uZmlnX2l0ZW1zKToKQEAgLTIzOSw3ICsyMzcsNyBAQAogCiAgICAgZm9yIGl0ZW0gaW4gY29uZmlnX2l0ZW1zOgogICAgICAgICBpZiBub3QgaXRlbS5zdGFydHN3aXRoKCJDT05GSUciKSBvciAobm90ICI9eSIgaW4gaXRlbSBhbmQgbm90ICI9bSIgaW4gaXRlbSk6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZCBjb25maWcgaXRlbSAoJXMpLCBleGl0aW5nIiAlIGl0ZW0KKyAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIGNvbmZpZyBpdGVtICglcyksIGV4aXRpbmciICUgaXRlbSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGlmIGl0ZW0gbm90IGluIGN1cl9pdGVtcyBhbmQgaXRlbSBub3QgaW4gbmV3X2l0ZW1zOgogICAgICAgICAgICAgbmV3X2l0ZW1zLmFwcGVuZChpdGVtKQpAQCAtMjQ5LDE2ICsyNDcsMTYgQEAKICAgICBpZiBsZW4obmV3X2l0ZW1zKSA+IDA6CiAgICAgICAgIGN1cl9pdGVtcy5leHRlbmQobmV3X2l0ZW1zKQogICAgICAgICB3cml0ZV9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjdXJfaXRlbXMpCi0gICAgICAgIHByaW50ICJBZGRlZCBpdGVtJXM6IiAlICgiIiBpZiBsZW4obmV3X2l0ZW1zKT09MSBlbHNlICJzIikKKyAgICAgICAgcHJpbnQoIkFkZGVkIGl0ZW0lczoiICUgKCIiIGlmIGxlbihuZXdfaXRlbXMpPT0xIGVsc2UgInMiKSkKICAgICAgICAgZm9yIG4gaW4gbmV3X2l0ZW1zOgotICAgICAgICAgICAgcHJpbnQgIlx0JXMiICUgbgorICAgICAgICAgICAgcHJpbnQoIlx0JXMiICUgbikKIAogICAgIGlmIGxlbihkdXBfaXRlbXMpID4gMDoKICAgICAgICAgb3V0cHV0PSJUaGUgZm9sbG93aW5nIGl0ZW0lcyBhbHJlYWR5IGV4aXN0JXMgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgaWdub3JpbmcgJXM6IiAlIFwKICAgICAgICAgICAgICgoIiIsInMiLCAiaXQiKSBpZiBsZW4oZHVwX2l0ZW1zKT09MSBlbHNlICgicyIsICIiLCAidGhlbSIgKSkKLSAgICAgICAgcHJpbnQgb3V0cHV0CisgICAgICAgIHByaW50KG91dHB1dCkKICAgICAgICAgZm9yIG4gaW4gZHVwX2l0ZW1zOgotICAgICAgICAgICAgcHJpbnQgIlx0JXMiICUgbgorICAgICAgICAgICAgcHJpbnQoIlx0JXMiICUgbikKIAogZGVmIGZpbmRfY3VycmVudF9rZXJuZWwoYnNwX2xheWVyLCBtYWNoaW5lKToKICAgICAiIiIKQEAgLTM0Nyw4ICszNDUsOCBAQAogICAgICIiIgogICAgIHBhdGNoZXMgPSByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKIAotICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBwYXRjaGVzIGZvciAlcyBpczoiICUgbWFjaGluZQotICAgIHByaW50IGdlbl9jaG9pY2VzX3N0cihwYXRjaGVzKQorICAgIHByaW50KCJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBwYXRjaGVzIGZvciAlcyBpczoiICUgbWFjaGluZSkKKyAgICBwcmludChnZW5fY2hvaWNlc19zdHIocGF0Y2hlcykpCiAKIAogZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9ybShzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgpAQCAtMzU4LDI2ICszNTYsMjYgQEAKICAgICAiIiIKICAgICBwYXRjaGVzID0gcmVhZF9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCiAKLSAgICBwcmludCAiU3BlY2lmeSB0aGUgcGF0Y2hlcyB0byByZW1vdmU6IgotICAgIGlucHV0ID0gcmF3X2lucHV0KGdlbl9jaG9pY2VzX3N0cihwYXRjaGVzKSkKLSAgICBybV9jaG9pY2VzID0gaW5wdXQuc3BsaXQoKQorICAgIHByaW50KCJTcGVjaWZ5IHRoZSBwYXRjaGVzIHRvIHJlbW92ZToiKQorICAgIGlucCA9IGlucHV0KGdlbl9jaG9pY2VzX3N0cihwYXRjaGVzKSkKKyAgICBybV9jaG9pY2VzID0gaW5wLnNwbGl0KCkKICAgICBybV9jaG9pY2VzLnNvcnQoKQogCiAgICAgcmVtb3ZlZCA9IFtdCiAKICAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQogICAgIGlmIG5vdCBmaWxlc2RpcjoKLSAgICAgICAgcHJpbnQgIkNvdWxkbid0IHJtIHBhdGNoKGVzKSBzaW5jZSB3ZSBjb3VsZG4ndCBmaW5kIGEgJ2ZpbGVzJyBkaXIiCisgICAgICAgIHByaW50KCJDb3VsZG4ndCBybSBwYXRjaChlcykgc2luY2Ugd2UgY291bGRuJ3QgZmluZCBhICdmaWxlcycgZGlyIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGZvciBjaG9pY2UgaW4gcmV2ZXJzZWQocm1fY2hvaWNlcyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlkeCA9IGludChjaG9pY2UpIC0gMQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJXMpLCBleGl0aW5nIiAlIGNob2ljZQorICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgY2hvaWNlICglcyksIGV4aXRpbmciICUgY2hvaWNlKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgaWYgaWR4IDwgMCBvciBpZHggPj0gbGVuKHBhdGNoZXMpOgotICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglZCksIGV4aXRpbmciICUgKGlkeCArIDEpCisgICAgICAgICAgICBwcmludCgiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBmaWxlc2Rpcl9wYXRjaCA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgcGF0Y2hlc1tpZHhdKQogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlc2Rpcl9wYXRjaCk6CkBAIC0zODcsOSArMzg1LDkgQEAKIAogICAgIHdyaXRlX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgcGF0Y2hlcykKIAotICAgIHByaW50ICJSZW1vdmVkIHBhdGNoZXM6IgorICAgIHByaW50KCJSZW1vdmVkIHBhdGNoZXM6IikKICAgICBmb3IgciBpbiByZW1vdmVkOgotICAgICAgICBwcmludCAiXHQlcyIgJSByCisgICAgICAgIHByaW50KCJcdCVzIiAlIHIpCiAKIAogZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBwYXRjaGVzKToKQEAgLTQwMSwxOSArMzk5LDE5IEBACiAKICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkgaW4gZXhpc3RpbmdfcGF0Y2hlczoKLSAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBhZGQgcGF0Y2ggKCVzKSBzaW5jZSBpdCdzIGFscmVhZHkgYmVlbiBhZGRlZCIgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGFkZCBwYXRjaCAoJXMpIHNpbmNlIGl0J3MgYWxyZWFkeSBiZWVuIGFkZGVkIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGZpbGVzZGlyID0gZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCiAgICAgaWYgbm90IGZpbGVzZGlyOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgYWRkIHBhdGNoICglcykgc2luY2Ugd2UgY291bGRuJ3QgZmluZCBhICdmaWxlcycgZGlyIHRvIGFkZCBpdCB0byIgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICBwcmludCgiQ291bGRuJ3QgYWRkIHBhdGNoICglcykgc2luY2Ugd2UgY291bGRuJ3QgZmluZCBhICdmaWxlcycgZGlyIHRvIGFkZCBpdCB0byIgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSkKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIG5ld19wYXRjaGVzID0gW10KIAogICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocGF0Y2gpOgotICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgcGF0Y2ggKCVzKSwgZXhpdGluZyIgJSBwYXRjaAorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgcGF0Y2ggKCVzKSwgZXhpdGluZyIgJSBwYXRjaCkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKICAgICAgICAgZmlsZXNkaXJfcGF0Y2ggPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGJhc2VuYW1lKQpAQCAtNDI0LDkgKzQyMiw5IEBACiAgICAgY3VyX2l0ZW1zLmV4dGVuZChuZXdfcGF0Y2hlcykKICAgICB3cml0ZV9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGN1cl9pdGVtcykKIAotICAgIHByaW50ICJBZGRlZCBwYXRjaGVzOiIKKyAgICBwcmludCgiQWRkZWQgcGF0Y2hlczoiKQogICAgIGZvciBuIGluIG5ld19wYXRjaGVzOgotICAgICAgICBwcmludCAiXHQlcyIgJSBuCisgICAgICAgIHByaW50KCJcdCVzIiAlIG4pCiAKIAogZGVmIGluY19wcihsaW5lKToKQEAgLTQ2MSw3ICs0NTksNyBAQAogCiAgICAga2VybmVsID0gZmluZF9jdXJyZW50X2tlcm5lbChsYXllciwgbWFjaGluZSkKICAgICBpZiBub3Qga2VybmVsOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgZm9yIHRoaXMgQlNQLCBleGl0aW5nLiIKKyAgICAgICAgcHJpbnQoIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAga2VybmVsX2JiZmlsZSA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4LyIgKyBrZXJuZWwgKyAiLmJiYXBwZW5kIikKQEAgLTU5Nyw4ICs1OTUsOCBAQAogICAgICIiIgogICAgIGZlYXR1cmVzID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCiAKLSAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMgZmVhdHVyZXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lCi0gICAgcHJpbnQgZ2VuX2Nob2ljZXNfc3RyKGZlYXR1cmVzKQorICAgIHByaW50KCJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBmZWF0dXJlcyBmb3IgJXMgaXM6IiAlIG1hY2hpbmUpCisgICAgcHJpbnQoZ2VuX2Nob2ljZXNfc3RyKGZlYXR1cmVzKSkKIAogCiBkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm0oc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKQEAgLTYwOSw5ICs2MDcsOSBAQAogICAgICIiIgogICAgIGZlYXR1cmVzID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCiAKLSAgICBwcmludCAiU3BlY2lmeSB0aGUgZmVhdHVyZXMgdG8gcmVtb3ZlOiIKLSAgICBpbnB1dCA9IHJhd19pbnB1dChnZW5fY2hvaWNlc19zdHIoZmVhdHVyZXMpKQotICAgIHJtX2Nob2ljZXMgPSBpbnB1dC5zcGxpdCgpCisgICAgcHJpbnQoIlNwZWNpZnkgdGhlIGZlYXR1cmVzIHRvIHJlbW92ZToiKQorICAgIGlucCA9IGlucHV0KGdlbl9jaG9pY2VzX3N0cihmZWF0dXJlcykpCisgICAgcm1fY2hvaWNlcyA9IGlucC5zcGxpdCgpCiAgICAgcm1fY2hvaWNlcy5zb3J0KCkKIAogICAgIHJlbW92ZWQgPSBbXQpAQCAtNjIwLDE4ICs2MTgsMTggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWR4ID0gaW50KGNob2ljZSkgLSAxCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglcyksIGV4aXRpbmciICUgY2hvaWNlCisgICAgICAgICAgICBwcmludCgiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4oZmVhdHVyZXMpOgotICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglZCksIGV4aXRpbmciICUgKGlkeCArIDEpCisgICAgICAgICAgICBwcmludCgiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICByZW1vdmVkLmFwcGVuZChmZWF0dXJlcy5wb3AoaWR4KSkKIAogICAgIHdyaXRlX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZXMpCiAKLSAgICBwcmludCAiUmVtb3ZlZCBmZWF0dXJlczoiCisgICAgcHJpbnQoIlJlbW92ZWQgZmVhdHVyZXM6IikKICAgICBmb3IgciBpbiByZW1vdmVkOgotICAgICAgICBwcmludCAiXHQlcyIgJSByCisgICAgICAgIHByaW50KCJcdCVzIiAlIHIpCiAKIAogZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmVzKToKQEAgLTY0Myw3ICs2NDEsNyBAQAogCiAgICAgZm9yIGl0ZW0gaW4gZmVhdHVyZXM6CiAgICAgICAgIGlmIG5vdCBpdGVtLmVuZHN3aXRoKCIuc2NjIik6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZCBmZWF0dXJlICglcyksIGV4aXRpbmciICUgaXRlbQorICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgZmVhdHVyZSAoJXMpLCBleGl0aW5nIiAlIGl0ZW0pCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBuZXdfaXRlbXMuYXBwZW5kKGl0ZW0pCiAKQEAgLTY1Miw5ICs2NTAsOSBAQAogCiAgICAgd3JpdGVfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjdXJfaXRlbXMpCiAKLSAgICBwcmludCAiQWRkZWQgZmVhdHVyZXM6IgorICAgIHByaW50KCJBZGRlZCBmZWF0dXJlczoiKQogICAgIGZvciBuIGluIG5ld19pdGVtczoKLSAgICAgICAgcHJpbnQgIlx0JXMiICUgbgorICAgICAgICBwcmludCgiXHQlcyIgJSBuKQogCiAKIGRlZiBmaW5kX2ZlYXR1cmVfdXJsKGdpdF91cmwpOgpAQCAtNzE0LDcgKzcxMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9kaXIgKyAiLyIgKyBmaWxlKQogICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZ1bGxwYXRoKQogICAgICAgICAgICAgICAgIGZlYXR1cmVfZGVzYyA9IGZpbmRfZmVhdHVyZV9kZXNjKGYucmVhZGxpbmVzKCkpCi0gICAgICAgICAgICAgICAgcHJpbnQgZmVhdHVyZV9kaXIgKyAiLyIgKyBmaWxlICsgIjogIiArIGZlYXR1cmVfZGVzYworICAgICAgICAgICAgICAgIHByaW50KGZlYXR1cmVfZGlyICsgIi8iICsgZmlsZSArICI6ICIgKyBmZWF0dXJlX2Rlc2MpCiAKIAogZGVmIHlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgpAQCAtNzI1LDcgKzcyMyw3IEBACiAgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQogICAgIGtlcm5lbCA9IGZpbmRfY3VycmVudF9rZXJuZWwobGF5ZXIsIG1hY2hpbmUpCiAgICAgaWYgbm90IGtlcm5lbDoKLSAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iCisgICAgICAgIHByaW50KCJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dChtYWNoaW5lLCAiYXJjaCIsIHNjcmlwdHNfcGF0aCkKQEAgLTczNSw5ICs3MzMsOSBAQAogICAgIGZlYXR1cmVfdXJsID0gZmluZF9mZWF0dXJlX3VybChnaXR1cmwpCiAKICAgICBmZWF0dXJlX2NtZCA9ICJ3Z2V0IC1xIC1PIC0gIiArIGZlYXR1cmVfdXJsCi0gICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihmZWF0dXJlX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZmVhdHVyZV9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAKLSAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgdG8gJXMgaXM6XG4iICUgbWFjaGluZQorICAgIHByaW50KCJUaGUgY3VycmVudCBzZXQgb2Yga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZSB0byAlcyBpczpcbiIgJSBtYWNoaW5lKQogCiAgICAgaWYgdG1wOgogICAgICAgICB0bXBsaW5lID0gdG1wLnNwbGl0KCJcbiIpCkBAIC03NTQsOSArNzUyLDkgQEAKICAgICAgICAgICAgICAgICBmZWF0dXJlX3R5cGUgPSBmZWF0dXJlX2RlZlswXS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmVfZGVmWzFdLnN0cmlwKCkKICAgICAgICAgICAgICAgICBkZXNjID0gZ2V0X2ZlYXR1cmVfZGVzYyhnaXR1cmwsIGZlYXR1cmUpCi0gICAgICAgICAgICAgICAgcHJpbnQgIiVzOiAlcyIgJSAoZmVhdHVyZSwgZGVzYykKKyAgICAgICAgICAgICAgICBwcmludCgiJXM6ICVzIiAlIChmZWF0dXJlLCBkZXNjKSkKIAotICAgIHByaW50ICJbbG9jYWxdIgorICAgIHByaW50KCJbbG9jYWxdIikKIAogICAgIHByaW50X2ZlYXR1cmVfZGVzY3MobGF5ZXIsICJjZmciKQogICAgIHByaW50X2ZlYXR1cmVfZGVzY3MobGF5ZXIsICJmZWF0dXJlcyIpCkBAIC03ODYsNyArNzg0LDcgQEAKICAgICAiIiIKICAgICBmZWF0dXJlX2Rlc2NfdXJsID0gZmluZF9mZWF0dXJlX2Rlc2NfdXJsKGdpdF91cmwsIGZlYXR1cmUpCiAgICAgZmVhdHVyZV9kZXNjX2NtZCA9ICJ3Z2V0IC1xIC1PIC0gIiArIGZlYXR1cmVfZGVzY191cmwKLSAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGZlYXR1cmVfZGVzY19jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKyAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGZlYXR1cmVfZGVzY19jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAKICAgICByZXR1cm4gZmluZF9mZWF0dXJlX2Rlc2ModG1wLnNwbGl0KCJcbiIpKQogCkBAIC04MDAsNyArNzk4LDcgQEAKIAogICAgIGtlcm5lbCA9IGZpbmRfY3VycmVudF9rZXJuZWwobGF5ZXIsIG1hY2hpbmUpCiAgICAgaWYgbm90IGtlcm5lbDoKLSAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iCisgICAgICAgIHByaW50KCJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dChtYWNoaW5lLCAiYXJjaCIsIHNjcmlwdHNfcGF0aCkKQEAgLTgxMCw3ICs4MDgsNyBAQAogCiAgICAgZGVzYyA9IGdldF9mZWF0dXJlX2Rlc2MoZ2l0dXJsLCBmZWF0dXJlKQogCi0gICAgcHJpbnQgZGVzYworICAgIHByaW50KGRlc2MpCiAKIAogZGVmIGNoZWNrX2ZlYXR1cmVfbmFtZShmZWF0dXJlX25hbWUpOgpAQCAtODE4LDExICs4MTYsMTEgQEAKICAgICBTYW5pdHktY2hlY2sgdGhlIGZlYXR1cmUgbmFtZSBmb3IgY3JlYXRlL2Rlc3Ryb3kuICBSZXR1cm4gRmFsc2UgaWYgbm90IE9LLgogICAgICIiIgogICAgIGlmIG5vdCBmZWF0dXJlX25hbWUuZW5kc3dpdGgoIi5zY2MiKToKLSAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBuYW1lIChtdXN0IGVuZCB3aXRoIC5zY2MpIFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9uYW1lCisgICAgICAgIHByaW50KCJJbnZhbGlkIGZlYXR1cmUgbmFtZSAobXVzdCBlbmQgd2l0aCAuc2NjKSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfbmFtZSkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBpZiAiLyIgaW4gZmVhdHVyZV9uYW1lOgotICAgICAgICBwcmludCAiSW52YWxpZCBmZWF0dXJlIG5hbWUgKGRvbid0IHNwZWNpZnkgZGlyZWN0b3J5KSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfbmFtZQorICAgICAgICBwcmludCgiSW52YWxpZCBmZWF0dXJlIG5hbWUgKGRvbid0IHNwZWNpZnkgZGlyZWN0b3J5KSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfbmFtZSkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICByZXR1cm4gVHJ1ZQpAQCAtODM2LDExICs4MzQsMTEgQEAKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBpZiBmZWF0dXJlX2l0ZW1zWzFdLmVuZHN3aXRoKCIucGF0Y2giKSBvciBmZWF0dXJlX2l0ZW1zWzFdLnN0YXJ0c3dpdGgoIkNPTkZJR18iKToKLSAgICAgICAgcHJpbnQgIk1pc3NpbmcgZGVzY3JpcHRpb24gYW5kL29yIGNvbXBhdGliaWx0eSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfaXRlbXNbMV0KKyAgICAgICAgcHJpbnQoIk1pc3NpbmcgZGVzY3JpcHRpb24gYW5kL29yIGNvbXBhdGliaWx0eSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfaXRlbXNbMV0pCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgaWYgZmVhdHVyZV9pdGVtc1syXS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgZmVhdHVyZV9pdGVtc1syXS5zdGFydHN3aXRoKCJDT05GSUdfIik6Ci0gICAgICAgIHByaW50ICJNaXNzaW5nIGRlc2NyaXB0aW9uIGFuZC9vciBjb21wYXRpYmlsaXR5IFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9pdGVtc1sxXQorICAgICAgICBwcmludCgiTWlzc2luZyBkZXNjcmlwdGlvbiBhbmQvb3IgY29tcGF0aWJpbGl0eSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfaXRlbXNbMV0pCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgcmV0dXJuIFRydWUKQEAgLTg2OCw3ICs4NjYsNyBAQAogICAgICAgICAgICAgaWYgKCI9eSIgaW4gaXRlbSBvciAiPW0iIGluIGl0ZW0pOgogICAgICAgICAgICAgICAgIGNmZ19pdGVtcy5hcHBlbmQoaXRlbSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgaXRlbSAobXVzdCBiZSAucGF0Y2ggb3IgQ09ORklHXyopIFslc10sIGV4aXRpbmciICUgaXRlbQorICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgZmVhdHVyZSBpdGVtIChtdXN0IGJlIC5wYXRjaCBvciBDT05GSUdfKikgWyVzXSwgZXhpdGluZyIgJSBpdGVtKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGZlYXR1cmVfZGlybmFtZSA9ICJjZmciCkBAIC04NzcsNyArODc1LDcgQEAKIAogICAgIGZpbGVzZGlyID0gZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCiAgICAgaWYgbm90IGZpbGVzZGlyOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgYWRkIGZlYXR1cmUgKCVzKSwgbm8gJ2ZpbGVzJyBkaXIgZm91bmQiICUgZmVhdHVyZQorICAgICAgICBwcmludCgiQ291bGRuJ3QgYWRkIGZlYXR1cmUgKCVzKSwgbm8gJ2ZpbGVzJyBkaXIgZm91bmQiICUgZmVhdHVyZSkKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGZlYXRkaXIgPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGZlYXR1cmVfZGlybmFtZSkKQEAgLTg4Niw3ICs4ODQsNyBAQAogCiAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShwYXRjaCk6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBwYXRjaCAoJXMpLCBleGl0aW5nIiAlIHBhdGNoCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBwYXRjaCAoJXMpLCBleGl0aW5nIiAlIHBhdGNoKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQogICAgICAgICBmZWF0ZGlyX3BhdGNoID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGJhc2VuYW1lKQpAQCAtOTEwLDggKzkwOCw4IEBACiAgICAgbmV3X2ZlYXR1cmVfZmlsZS53cml0ZSgia2NvbmYgbm9uLWhhcmR3YXJlICIgKyBmZWF0dXJlX2Jhc2VuYW1lICsgIi5jZmdcbiIpCiAgICAgbmV3X2ZlYXR1cmVfZmlsZS5jbG9zZSgpCiAKLSAgICBwcmludCAiQWRkZWQgZmVhdHVyZToiCi0gICAgcHJpbnQgIlx0JXMiICUgZmVhdHVyZV9kaXJuYW1lICsgIi8iICsgZmVhdHVyZQorICAgIHByaW50KCJBZGRlZCBmZWF0dXJlOiIpCisgICAgcHJpbnQoIlx0JXMiICUgZmVhdHVyZV9kaXJuYW1lICsgIi8iICsgZmVhdHVyZSkKIAogCiBkZWYgZmVhdHVyZV9pbl91c2Uoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlKToKQEAgLTk0OSwxOCArOTQ3LDE4IEBACiAKICAgICBpZiBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsICJmZWF0dXJlcy8iICsgZmVhdHVyZSkgb3IgXAogICAgICAgICAgICAgZmVhdHVyZV9pbl91c2Uoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCAiY2ZnLyIgKyBmZWF0dXJlKToKLSAgICAgICAgcHJpbnQgIkZlYXR1cmUgJXMgaXMgaW4gdXNlICh1c2UgJ2ZlYXR1cmUgcm0nIHRvIHVuLXVzZSBpdCBmaXJzdCksIGV4aXRpbmciICUgZmVhdHVyZQorICAgICAgICBwcmludCgiRmVhdHVyZSAlcyBpcyBpbiB1c2UgKHVzZSAnZmVhdHVyZSBybScgdG8gdW4tdXNlIGl0IGZpcnN0KSwgZXhpdGluZyIgJSBmZWF0dXJlKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKICAgICBpZiBub3QgZmlsZXNkaXI6Ci0gICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXN0cm95IGZlYXR1cmUgKCVzKSwgbm8gJ2ZpbGVzJyBkaXIgZm91bmQiICUgZmVhdHVyZQorICAgICAgICBwcmludCgiQ291bGRuJ3QgZGVzdHJveSBmZWF0dXJlICglcyksIG5vICdmaWxlcycgZGlyIGZvdW5kIiAlIGZlYXR1cmUpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBmZWF0dXJlX2Rpcm5hbWUgPSAiZmVhdHVyZXMiCiAgICAgZmVhdGRpciA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgZmVhdHVyZV9kaXJuYW1lKQogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0ZGlyKToKLSAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgZmVhdHVyZSBkaXJlY3RvcnkgKCVzKSIgJSBmZWF0dXJlX2Rpcm5hbWUKKyAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgZmVhdHVyZSBkaXJlY3RvcnkgKCVzKSIgJSBmZWF0dXJlX2Rpcm5hbWUpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBmZWF0dXJlX2ZxbiA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlKQpAQCAtOTY4LDExICs5NjYsMTEgQEAKICAgICAgICAgZmVhdHVyZV9kaXJuYW1lID0gImNmZyIKICAgICAgICAgZmVhdGRpciA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgZmVhdHVyZV9kaXJuYW1lKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdGRpcik6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBmZWF0dXJlIGRpcmVjdG9yeSAoJXMpIiAlIGZlYXR1cmVfZGlybmFtZQorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgZmVhdHVyZSBkaXJlY3RvcnkgKCVzKSIgJSBmZWF0dXJlX2Rpcm5hbWUpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBmZWF0dXJlX2ZxbiA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlX2ZpbGVuYW1lKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdHVyZV9mcW4pOgotICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgZmVhdHVyZSAoJXMpIiAlIGZlYXR1cmUKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIGZlYXR1cmUgKCVzKSIgJSBmZWF0dXJlKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGYgPSBvcGVuKGZlYXR1cmVfZnFuLCAiciIpCkBAIC05ODksOCArOTg3LDggQEAKIAogICAgIGZlYXR1cmVfcmVtb3ZlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSkKIAotICAgIHByaW50ICJSZW1vdmVkIGZlYXR1cmU6IgotICAgIHByaW50ICJcdCVzIiAlIGZlYXR1cmVfZGlybmFtZSArICIvIiArIGZlYXR1cmUKKyAgICBwcmludCgiUmVtb3ZlZCBmZWF0dXJlOiIpCisgICAgcHJpbnQoIlx0JXMiICUgZmVhdHVyZV9kaXJuYW1lICsgIi8iICsgZmVhdHVyZSkKIAogCiBkZWYgYmFzZV9icmFuY2hlcyhjb250ZXh0KToKQEAgLTk5OSwxMCArOTk3LDEwIEBACiAgICAgIiIiCiAgICAgZ2l0dXJsID0gZmluZF9naXR1cmwoY29udGV4dCkKIAotICAgIHByaW50ICJHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gJXMuLi4iICUgZ2l0dXJsCisgICAgcHJpbnQoIkdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyAlcy4uLiIgJSBnaXR1cmwpCiAKICAgICBnaXRjbWQgPSAiZ2l0IGxzLXJlbW90ZSAlcyAqaGVhZHMqIDI+JjEiICUgKGdpdHVybCkKLSAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGdpdGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZ2l0Y21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQogCiAgICAgYnJhbmNoZXMgPSBbXQogCkBAIC0xMDI5LDEwICsxMDI3LDEwIEBACiAgICAgIiIiCiAgICAgZ2l0dXJsID0gZmluZF9naXR1cmwoY29udGV4dCkKIAotICAgIHByaW50ICJHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gJXMuLi4iICUgZ2l0dXJsCisgICAgcHJpbnQoIkdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyAlcy4uLiIgJSBnaXR1cmwpCiAKICAgICBnaXRjbWQgPSAiZ2l0IGxzLXJlbW90ZSAlcyAqaGVhZHMqIDI+JjEiICUgKGdpdHVybCkKLSAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGdpdGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZ2l0Y21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQogCiAgICAgYnJhbmNoZXMgPSBbXQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKaW5kZXggNDA1OTcyZC4uOGE4ODE1NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMyw3ICszLDcgQEAKIAogZGVmaW5lIEtBUkNIIGFybQogCi1pbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19CitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19IG5vcGF0Y2gKIHt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQogZGVmaW5lIEtUWVBFIHt7PW5ld19rYnJhbmNofX0KIGJyYW5jaCB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDAwY2YzNjAuLjAxMjBlZDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMSw1ICsxLDUgQEAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Ci17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC40KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC44KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CiAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuNCJ9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjgifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI0NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGRmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuOCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKaW5kZXggZDVhYmU0Zi4uNDc0NWMxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMzMsNyArMzMsNyBAQAogCiB7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KIAote3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIChrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjQiIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMSIpOiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CiB7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ4c2VydmVyX2Nob2ljZSIgcHJpbzoiNTAiIG1zZzoiUGxlYXNlIHNlbGVjdCBhbiB4c2VydmVyIGZvciB0aGlzIG1hY2hpbmU6IiBkZWZhdWx0OiJ4c2VydmVyX3Zlc2EiIH19CiB7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl92ZXNhIiBtc2c6IlZFU0EgeHNlcnZlciBzdXBwb3J0IiB9fQoge3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTkxNSIgbXNnOiJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KQEAgLTQxLDE1ICs0MSw3IEBACiB7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9mYmRldiIgbXNnOiJmYmRldiB4c2VydmVyIHN1cHBvcnQiIH19CiB7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9tb2Rlc2V0dGluZyIgbXNnOiJtb2Rlc2V0dGluZyB4c2VydmVyIHN1cHBvcnQiIH19CiAKLXt7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToieHNlcnZlcl9jaG9pY2UiIHByaW86IjUwIiBtc2c6IlBsZWFzZSBzZWxlY3QgYW4geHNlcnZlciBmb3IgdGhpcyBtYWNoaW5lOiIgZGVmYXVsdDoieHNlcnZlcl92ZXNhIiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfdmVzYSIgbXNnOiJWRVNBIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5MTUiIG1zZzoiaTkxNSB4c2VydmVyIHN1cHBvcnQiIH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTY1IiBtc2c6Imk5NjUgeHNlcnZlciBzdXBwb3J0IiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfZmJkZXYiIG1zZzoiZmJkZXYgeHNlcnZlciBzdXBwb3J0IiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfbW9kZXNldHRpbmciIG1zZzoibW9kZXNldHRpbmcgeHNlcnZlciBzdXBwb3J0IiB9fQotCi17eyBpZiB4c2VydmVyID09ICJ5IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fNC40IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fNC4xIiBhbmQga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogeHNlcnZlcl9jaG9pY2UgPSAieHNlcnZlcl9pOTE1IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvXzQuOCIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvXzQuNCIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvXzQuMSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IHhzZXJ2ZXJfY2hvaWNlID0gInhzZXJ2ZXJfaTkxNSIgfX0KIAoge3sgaWYgeHNlcnZlciA9PSAieSI6IH19CiBYU0VSVkVSID89ICIke1hTRVJWRVJfWDg2X0JBU0V9IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCmluZGV4IDY3YTU0YmUuLjM4ZDFjYTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMyw3ICszLDcgQEAKIAogZGVmaW5lIEtBUkNIIGkzODYKIAotaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQoraW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fSBub3BhdGNoCiB7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KIGRlZmluZSBLVFlQRSB7ez1uZXdfa2JyYW5jaH19CiBicmFuY2gge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDAwY2YzNjAuLjAxMjBlZDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC40In19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuOCJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiNDVkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzdkOGZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCmluZGV4IDdjOWRjNTIuLmIzNGYzZDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMyw3ICszLDcgQEAKIAogZGVmaW5lIEtBUkNIIG1pcHMKIAotaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQoraW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fSBub3BhdGNoCiB7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KIGRlZmluZSBLVFlQRSB7ez1uZXdfa2JyYW5jaH19CiBicmFuY2gge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDAwY2YzNjAuLjAxMjBlZDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC40In19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuOCJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiNDVkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzBkZjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwppbmRleCA3YzlkYzUyLi5iMzRmM2QzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0zLDcgKzMsNyBAQAogCiBkZWZpbmUgS0FSQ0ggbWlwcwogCi1pbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19CitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19IG5vcGF0Y2gKIHt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQogZGVmaW5lIEtUWVBFIHt7PW5ld19rYnJhbmNofX0KIGJyYW5jaCB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDAwY2YzNjAuLjAxMjBlZDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMSw1ICsxLDUgQEAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Ci17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC40KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC44KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CiAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuNCJ9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjgifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI0NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjY2Y5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuOCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2VkZ2Vyb3V0ZXIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwppbmRleCA4OWIzNDRmLi5jMTY2ZmNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTMsNyArMyw3IEBACiAKIGRlZmluZSBLQVJDSCBwb3dlcnBjCiAKLWluY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0gbm9wYXRjaAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiBkZWZpbmUgS1RZUEUge3s9bmV3X2ticmFuY2h9fQogYnJhbmNoIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAppbmRleCAwMGNmMzYwLi4wMTIwZWQwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMSw1ICsxLDUgQEAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Ci17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC40KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC44KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CiAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuNCJ9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjgifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwZGY4YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuOCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwppbmRleCAxNDU1NGRhLi40M2NmNjQyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTQsMTUgKzQsMTUgQEAKIGRlZmluZSBLQVJDSCB7ez1xZW11YXJjaH19CiAKIHt7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KLWluY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0gbm9wYXRjaAoge3sgaWYgcWVtdWFyY2ggPT0gImFybSI6IH19Ci1pbmNsdWRlIGJzcC9hcm0tdmVyc2F0aWxlLTkyNmVqcy9hcm0tdmVyc2F0aWxlLTkyNmVqcy1zdGFuZGFyZAoraW5jbHVkZSBic3AvYXJtLXZlcnNhdGlsZS05MjZlanMvYXJtLXZlcnNhdGlsZS05MjZlanMtc3RhbmRhcmQgbm9wYXRjaAoge3sgaWYgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQotaW5jbHVkZSBic3AvcWVtdS1wcGMzMi9xZW11LXBwYzMyLXN0YW5kYXJkCitpbmNsdWRlIGJzcC9xZW11LXBwYzMyL3FlbXUtcHBjMzItc3RhbmRhcmQgbm9wYXRjaAoge3sgaWYgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQotaW5jbHVkZSBic3AvbXRpLW1hbHRhMzIvbXRpLW1hbHRhMzItYmUtc3RhbmRhcmQKK2luY2x1ZGUgYnNwL210aS1tYWx0YTMyL210aS1tYWx0YTMyLWJlLXN0YW5kYXJkIG5vcGF0Y2gKIHt7IGlmIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQotaW5jbHVkZSBic3AvbXRpLW1hbHRhNjQvbXRpLW1hbHRhNjQtYmUtc3RhbmRhcmQKK2luY2x1ZGUgYnNwL210aS1tYWx0YTY0L210aS1tYWx0YTY0LWJlLXN0YW5kYXJkIG5vcGF0Y2gKIHt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQogZGVmaW5lIEtUWVBFIHt7PW5ld19rYnJhbmNofX0KIGJyYW5jaCB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCmluZGV4IGQ1NjA3ODQuLjNmYTRlZDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMSArMSwzIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZwore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiOiB9fQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAppbmRleCAwMGNmMzYwLi4wMTIwZWQwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMSw1ICsxLDUgQEAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Ci17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC40KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC44KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CiAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuNCJ9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjgifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjM1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGMzZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSw2MSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGFuIGV4aXN0aW5nIG1hY2hpbmUgYnJhbmNoIHRvIHVzZSBmb3IgdGhpcyBCU1A6IiBkZWZhdWx0OiJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcWVtdXBwYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGEzMiIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGE2NCIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwppbmRleCA5YzljYzkwLi5hMmIyOTEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0zLDcgKzMsNyBAQAogCiBkZWZpbmUgS0FSQ0ggeDg2XzY0CiAKLWluY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0gbm9wYXRjaAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiBkZWZpbmUgS1RZUEUge3s9bmV3X2ticmFuY2h9fQogYnJhbmNoIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKaW5kZXggMDBjZjM2MC4uMDEyMGVkMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC40In19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuOCJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwZGY4YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkKaW5kZXggZmY5N2RmYy4uZTY3NTEzMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBEZXZlbG9wbWVudCB0b29sIC0gdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBsdWdpbnMKICMKQEAgLTI2LDEwICsyNiwxMSBAQAogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCiAKLQogY2xhc3MgRGV2dG9vbEVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiRXhjZXB0aW9uIGZvciBoYW5kbGluZyBkZXZ0b29sIGVycm9ycyIiIgotICAgIHBhc3MKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSwgZXhpdGNvZGU9MSk6CisgICAgICAgIHN1cGVyKERldnRvb2xFcnJvciwgc2VsZikuX19pbml0X18obWVzc2FnZSkKKyAgICAgICAgc2VsZi5leGl0Y29kZSA9IGV4aXRjb2RlCiAKIAogZGVmIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoaW5pdF9wYXRoLCBidWlsZGRpciwgY21kLCB3YXRjaD1GYWxzZSwgKipvcHRpb25zKToKQEAgLTU5LDcgKzYwLDcgQEAKIGRlZiBleGVjX3dhdGNoKGNtZCwgKipvcHRpb25zKToKICAgICAiIiJSdW4gcHJvZ3JhbSB3aXRoIHN0ZG91dCBzaG93biBvbiBzeXMuc3Rkb3V0IiIiCiAgICAgaW1wb3J0IGJiCi0gICAgaWYgaXNpbnN0YW5jZShjbWQsIGJhc2VzdHJpbmcpIGFuZCBub3QgInNoZWxsIiBpbiBvcHRpb25zOgorICAgIGlmIGlzaW5zdGFuY2UoY21kLCBzdHIpIGFuZCBub3QgInNoZWxsIiBpbiBvcHRpb25zOgogICAgICAgICBvcHRpb25zWyJzaGVsbCJdID0gVHJ1ZQogCiAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCkBAIC02OSw2ICs3MCw3IEBACiAgICAgYnVmID0gJycKICAgICB3aGlsZSBUcnVlOgogICAgICAgICBvdXQgPSBwcm9jZXNzLnN0ZG91dC5yZWFkKDEpCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgaWYgb3V0OgogICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKQEAgLTE0NCw4ICsxNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwYXRoLnN0YXJ0c3dpdGgoY29uZmlnLndvcmtzcGFjZV9wYXRoKV0KICAgICBlbHNlOgogICAgICAgICBhcHBlbmRfZmlsZXMgPSBOb25lCi0gICAgcmV0dXJuIG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShyZWNpcGVmaWxlLCBhcHBlbmRfZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgIHJldHVybiBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUodGluZm9pbC5jb29rZXIsIHJlY2lwZWZpbGUsIGFwcGVuZF9maWxlcykKIAogZGVmIGNoZWNrX3dvcmtzcGFjZV9yZWNpcGUod29ya3NwYWNlLCBwbiwgY2hlY2tzcmM9VHJ1ZSwgYmJjbGFzc2V4dGVuZD1GYWxzZSk6CiAgICAgIiIiCkBAIC0xNTUsNyArMTU2LDcgQEAKIAogICAgIHdvcmtzcGFjZXBuID0gcG4KIAotICAgIGZvciByZWNpcGUsIHZhbHVlIGluIHdvcmtzcGFjZS5pdGVyaXRlbXMoKToKKyAgICBmb3IgcmVjaXBlLCB2YWx1ZSBpbiB3b3Jrc3BhY2UuaXRlbXMoKToKICAgICAgICAgaWYgcmVjaXBlID09IHBuOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgYmJjbGFzc2V4dGVuZDoKQEAgLTE5NSwxNSArMTk2LDE4IEBACiAgICAgICAgIGJfaXNfcyA9IEZhbHNlCiAgICAgcmV0dXJuIGJfaXNfcwogCi1kZWYgc2V0dXBfZ2l0X3JlcG8ocmVwb2RpciwgdmVyc2lvbiwgZGV2YnJhbmNoLCBiYXNldGFnPSdkZXZ0b29sLWJhc2UnKToKK2RlZiBzZXR1cF9naXRfcmVwbyhyZXBvZGlyLCB2ZXJzaW9uLCBkZXZicmFuY2gsIGJhc2V0YWc9J2RldnRvb2wtYmFzZScsIGQ9Tm9uZSk6CiAgICAgIiIiCiAgICAgU2V0IHVwIHRoZSBnaXQgcmVwb3NpdG9yeSBmb3IgdGhlIHNvdXJjZSB0cmVlCiAgICAgIiIiCiAgICAgaW1wb3J0IGJiLnByb2Nlc3MKKyAgICBpbXBvcnQgb2UucGF0Y2gKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHJlcG9kaXIsICcuZ2l0JykpOgogICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGluaXQnLCBjd2Q9cmVwb2RpcikKICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBhZGQgLicsIGN3ZD1yZXBvZGlyKQotICAgICAgICBjb21taXRfY21kID0gWydnaXQnLCAnY29tbWl0JywgJy1xJ10KKyAgICAgICAgY29tbWl0X2NtZCA9IFsnZ2l0J10KKyAgICAgICAgb2UucGF0Y2guR2l0QXBwbHlUcmVlLmdpdENvbW1hbmRVc2VyT3B0aW9ucyhjb21taXRfY21kLCBkPWQpCisgICAgICAgIGNvbW1pdF9jbWQgKz0gWydjb21taXQnLCAnLXEnXQogICAgICAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD1yZXBvZGlyKQogICAgICAgICBpZiBub3Qgc3Rkb3V0OgogICAgICAgICAgICAgY29tbWl0X2NtZC5hcHBlbmQoJy0tYWxsb3ctZW1wdHknKQpAQCAtMjU1LDMgKzI1OSwzMiBAQAogICAgICAgICAgICAgZWxpZiB2YXJpYW50IGluIFsnbmF0aXZlJywgJ2Nyb3NzJywgJ2Nyb3Nzc2RrJ106CiAgICAgICAgICAgICAgICAgdGFyZ2V0cy5hcHBlbmQoJyVzLSVzJyAlIChwbiwgdmFyaWFudCkpCiAgICAgcmV0dXJuIHRhcmdldHMKKworZGVmIGVuc3VyZV9ucG0oY29uZmlnLCBiYXNlcGF0aCwgZml4ZWRfc2V0dXA9RmFsc2UpOgorICAgICIiIgorICAgIEVuc3VyZSB0aGF0IG5wbSBpcyBhdmFpbGFibGUgYW5kIGVpdGhlciBidWlsZCBpdCBvciBzaG93IGEKKyAgICByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UKKyAgICAiIiIKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChjb25maWdfb25seT1UcnVlLCBiYXNlcGF0aD1iYXNlcGF0aCkKKyAgICB0cnk6CisgICAgICAgIG5hdGl2ZXBhdGggPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgVHJ1ZSkKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgIG5wbXBhdGggPSBvcy5wYXRoLmpvaW4obmF0aXZlcGF0aCwgJ25wbScpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5wbXBhdGgpOgorICAgICAgICBsb2dnZXIuaW5mbygnQnVpbGRpbmcgbm9kZWpzLW5hdGl2ZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlIC1xIG5vZGVqcy1uYXRpdmUnLCB3YXRjaD1UcnVlKQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgIk5vdGhpbmcgUFJPVklERVMgJ25vZGVqcy1uYXRpdmUnIiBpbiBlLnN0ZG91dDoKKyAgICAgICAgICAgICAgICBpZiBmaXhlZF9zZXR1cDoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ25vZGVqcy1uYXRpdmUgaXMgcmVxdWlyZWQgZm9yIG5wbSBidXQgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBTREsnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ25vZGVqcy1uYXRpdmUgaXMgcmVxdWlyZWQgZm9yIG5wbSBidXQgaXMgbm90IGF2YWlsYWJsZSAtIHlvdSB3aWxsIGxpa2VseSBuZWVkIHRvIGFkZCBhIGxheWVyIHRoYXQgcHJvdmlkZXMgbm9kZWpzJworICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhucG1wYXRoKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQnVpbHQgbm9kZWpzLW5hdGl2ZSBidXQgbnBtIGJpbmFyeSBzdGlsbCBjb3VsZCBub3QgYmUgZm91bmQgYXQgJXMnICUgbnBtcGF0aCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkKaW5kZXggNDhmNmZlMS4uNmJlNTQ5ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkKQEAgLTI3LDcgKzI3LDcgQEAKIAogCiBkZWYgX3NldF9maWxlX3ZhbHVlcyhmbiwgdmFsdWVzKToKLSAgICByZW1haW5pbmcgPSB2YWx1ZXMua2V5cygpCisgICAgcmVtYWluaW5nID0gbGlzdCh2YWx1ZXMua2V5cygpKQogCiAgICAgZGVmIHZhcmZ1bmModmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgogICAgICAgICBuZXd2YWx1ZSA9IHZhbHVlcy5nZXQodmFybmFtZSwgb3JpZ3ZhbHVlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGRfaW1hZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZF9pbWFnZS5weQppbmRleCBlNTFkNzY2Li5hZTc1NTExIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZF9pbWFnZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZF9pbWFnZS5weQpAQCAtMTgsNiArMTgsNyBAQAogIiIiRGV2dG9vbCBwbHVnaW4gY29udGFpbmluZyB0aGUgYnVpbGQtaW1hZ2Ugc3ViY29tbWFuZC4iIiIKIAogaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiAKIGZyb20gYmIucHJvY2VzcyBpbXBvcnQgRXhlY3V0aW9uRXJyb3IKQEAgLTM0LDcgKzM1LDcgQEAKICAgICBmb3IgcmVjaXBlIGluIHdvcmtzcGFjZToKICAgICAgICAgZGF0YSA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIHJlY2lwZSwgVHJ1ZSkKICAgICAgICAgaWYgJ2NsYXNzLXRhcmdldCcgaW4gZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpLnNwbGl0KCc6Jyk6Ci0gICAgICAgICAgICBpZiByZWNpcGUgaW4gZGF0YS5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSk6CisgICAgICAgICAgICBpZiByZWNpcGUgaW4gZGF0YS5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY2lwZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlNraXBwaW5nIHJlY2lwZSAlcyBhcyBpdCBkb2Vzbid0IHByb2R1Y2UgYSAiCkBAIC03Miw3MCArNzMsODkgQEAKICAgICByZXR1cm4gcmVzdWx0CiAKIGRlZiBidWlsZF9pbWFnZV90YXNrKGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSwgaW1hZ2UsIGFkZF9wYWNrYWdlcz1Ob25lLCB0YXNrPU5vbmUsIGV4dHJhX2FwcGVuZD1Ob25lKToKLSAgICBhcHBlbmRmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzLmJiYXBwZW5kJyAlIGltYWdlKQotCiAgICAgIyByZW1vdmUgPGltYWdlPi5iYmFwcGVuZCB0byBtYWtlIHN1cmUgc2V0dXBfdGluZm9pbCBkb2Vzbid0CiAgICAgIyBicmVhayBiZWNhdXNlIG9mIGl0Ci0gICAgaWYgb3MucGF0aC5pc2ZpbGUoYXBwZW5kZmlsZSk6Ci0gICAgICAgIG9zLnVubGluayhhcHBlbmRmaWxlKQorICAgIHRhcmdldF9iYXNlbmFtZSA9IGNvbmZpZy5nZXQoJ1NESycsICd0YXJnZXRfYmFzZW5hbWUnLCAnJykKKyAgICBpZiB0YXJnZXRfYmFzZW5hbWU6CisgICAgICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzLmJiYXBwZW5kJyAlIHRhcmdldF9iYXNlbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKGFwcGVuZGZpbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGJhc2VwYXRoPWJhc2VwYXRoKQotICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgaW1hZ2UsIFRydWUpCi0gICAgaWYgbm90IHJkOgotICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24KLSAgICAgICAgcmV0dXJuICgxLCBOb25lKQotICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdpbWFnZScsIHJkKToKLSAgICAgICAgcmFpc2UgVGFyZ2V0Tm90SW1hZ2VFcnJvcigpCi0KLSAgICBvdXRwdXRkaXIgPSBOb25lCiAgICAgdHJ5OgotICAgICAgICBpZiB3b3Jrc3BhY2Ugb3IgYWRkX3BhY2thZ2VzOgotICAgICAgICAgICAgaWYgYWRkX3BhY2thZ2VzOgotICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gYWRkX3BhY2thZ2VzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gX2dldF9wYWNrYWdlcyh0aW5mb2lsLCB3b3Jrc3BhY2UsIGNvbmZpZykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhY2thZ2VzID0gTm9uZQotICAgICAgICBpZiBub3QgdGFzazoKLSAgICAgICAgICAgIGlmIG5vdCBwYWNrYWdlcyBhbmQgbm90IGFkZF9wYWNrYWdlcyBhbmQgd29ya3NwYWNlOgotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdObyByZWNpcGVzIGluIHdvcmtzcGFjZSwgYnVpbGRpbmcgaW1hZ2UgJXMgdW5tb2RpZmllZCcsIGltYWdlKQotICAgICAgICAgICAgZWxpZiBub3QgcGFja2FnZXM6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vIHBhY2thZ2VzIHRvIGFkZCwgYnVpbGRpbmcgaW1hZ2UgJXMgdW5tb2RpZmllZCcsIGltYWdlKQorICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGltYWdlLCBUcnVlKQorICAgICAgICBpZiBub3QgcmQ6CisgICAgICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24KKyAgICAgICAgICAgIHJldHVybiAoMSwgTm9uZSkKKyAgICAgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgcmQpOgorICAgICAgICAgICAgcmFpc2UgVGFyZ2V0Tm90SW1hZ2VFcnJvcigpCiAKLSAgICAgICAgaWYgcGFja2FnZXMgb3IgZXh0cmFfYXBwZW5kOgotICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShhcHBlbmRmaWxlKSkKLSAgICAgICAgICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGFmaWxlOgotICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzOgotICAgICAgICAgICAgICAgICAgICAjIGluY2x1ZGUgcGFja2FnZXMgZnJvbSB3b3Jrc3BhY2UgcmVjaXBlcyBpbnRvIHRoZSBpbWFnZQotICAgICAgICAgICAgICAgICAgICBhZmlsZS53cml0ZSgnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiICVzIlxuJyAlICcgJy5qb2luKHBhY2thZ2VzKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRhc2s6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQnVpbGRpbmcgaW1hZ2UgJXMgd2l0aCB0aGUgZm9sbG93aW5nICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRpdGlvbmFsIHBhY2thZ2VzOiAlcycsIGltYWdlLCAnICcuam9pbihwYWNrYWdlcykpCi0gICAgICAgICAgICAgICAgaWYgZXh0cmFfYXBwZW5kOgotICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBleHRyYV9hcHBlbmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZmlsZS53cml0ZSgnJXNcbicgJSBsaW5lKQorICAgICAgICAjIEdldCB0aGUgYWN0dWFsIGZpbGVuYW1lIHVzZWQgYW5kIHN0cmlwIHRoZSAuYmIgYW5kIGZ1bGwgcGF0aAorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUodGFyZ2V0X2Jhc2VuYW1lKSlbMF0KKyAgICAgICAgY29uZmlnLnNldCgnU0RLJywgJ3RhcmdldF9iYXNlbmFtZScsIHRhcmdldF9iYXNlbmFtZSkKKyAgICAgICAgY29uZmlnLndyaXRlKCkKIAotICAgICAgICBpZiB0YXNrIGluIFsncG9wdWxhdGVfc2RrJywgJ3BvcHVsYXRlX3Nka19leHQnXToKLSAgICAgICAgICAgIG91dHB1dGRpciA9IHJkLmdldFZhcignU0RLX0RFUExPWScsIFRydWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvdXRwdXRkaXIgPSByZC5nZXRWYXIoJ0RFUExPWV9ESVJfSU1BR0UnLCBUcnVlKQorICAgICAgICBhcHBlbmRmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMuYmJhcHBlbmQnICUgdGFyZ2V0X2Jhc2VuYW1lKQogCi0gICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQotCi0gICAgICAgIG9wdGlvbnMgPSAnJwotICAgICAgICBpZiB0YXNrOgotICAgICAgICAgICAgb3B0aW9ucyArPSAnLWMgJXMnICUgdGFzawotCi0gICAgICAgICMgcnVuIGJpdGJha2UgdG8gYnVpbGQgaW1hZ2UgKG9yIHNwZWNpZmllZCB0YXNrKQorICAgICAgICBvdXRwdXRkaXIgPSBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlICVzICVzJyAlIChvcHRpb25zLCBpbWFnZSksIHdhdGNoPVRydWUpCi0gICAgICAgIGV4Y2VwdCBFeGVjdXRpb25FcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICByZXR1cm4gKGVyci5leGl0Y29kZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHdvcmtzcGFjZSBvciBhZGRfcGFja2FnZXM6CisgICAgICAgICAgICAgICAgaWYgYWRkX3BhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IGFkZF9wYWNrYWdlcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gX2dldF9wYWNrYWdlcyh0aW5mb2lsLCB3b3Jrc3BhY2UsIGNvbmZpZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBOb25lCisgICAgICAgICAgICBpZiBub3QgdGFzazoKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFja2FnZXMgYW5kIG5vdCBhZGRfcGFja2FnZXMgYW5kIHdvcmtzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vIHJlY2lwZXMgaW4gd29ya3NwYWNlLCBidWlsZGluZyBpbWFnZSAlcyB1bm1vZGlmaWVkJywgaW1hZ2UpCisgICAgICAgICAgICAgICAgZWxpZiBub3QgcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdObyBwYWNrYWdlcyB0byBhZGQsIGJ1aWxkaW5nIGltYWdlICVzIHVubW9kaWZpZWQnLCBpbWFnZSkKKworICAgICAgICAgICAgaWYgcGFja2FnZXMgb3IgZXh0cmFfYXBwZW5kOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoYXBwZW5kZmlsZSkpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGFwcGVuZGZpbGUsICd3JykgYXMgYWZpbGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmNsdWRlIHBhY2thZ2VzIGZyb20gd29ya3NwYWNlIHJlY2lwZXMgaW50byB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFmaWxlLndyaXRlKCdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgJXMiXG4nICUgJyAnLmpvaW4ocGFja2FnZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRhc2s6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0J1aWxkaW5nIGltYWdlICVzIHdpdGggdGhlIGZvbGxvd2luZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGl0aW9uYWwgcGFja2FnZXM6ICVzJywgaW1hZ2UsICcgJy5qb2luKHBhY2thZ2VzKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmFfYXBwZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZXh0cmFfYXBwZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmaWxlLndyaXRlKCclc1xuJyAlIGxpbmUpCisKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gWydwb3B1bGF0ZV9zZGsnLCAncG9wdWxhdGVfc2RrX2V4dCddOgorICAgICAgICAgICAgICAgIG91dHB1dGRpciA9IHJkLmdldFZhcignU0RLX0RFUExPWScsIFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dGRpciA9IHJkLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisKKyAgICAgICAgICAgIHRtcF90aW5mb2lsID0gdGluZm9pbAorICAgICAgICAgICAgdGluZm9pbCA9IE5vbmUKKyAgICAgICAgICAgIHRtcF90aW5mb2lsLnNodXRkb3duKCkKKworICAgICAgICAgICAgb3B0aW9ucyA9ICcnCisgICAgICAgICAgICBpZiB0YXNrOgorICAgICAgICAgICAgICAgIG9wdGlvbnMgKz0gJy1jICVzJyAlIHRhc2sKKworICAgICAgICAgICAgIyBydW4gYml0YmFrZSB0byBidWlsZCBpbWFnZSAob3Igc3BlY2lmaWVkIHRhc2spCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlICVzICVzJyAlIChvcHRpb25zLCBpbWFnZSksIHdhdGNoPVRydWUpCisgICAgICAgICAgICBleGNlcHQgRXhlY3V0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHJldHVybiAoZXJyLmV4aXRjb2RlLCBOb25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYXBwZW5kZmlsZSk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGFwcGVuZGZpbGUpCiAgICAgZmluYWxseToKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYXBwZW5kZmlsZSk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoYXBwZW5kZmlsZSkKKyAgICAgICAgaWYgdGluZm9pbDoKKyAgICAgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogICAgIHJldHVybiAoMCwgb3V0cHV0ZGlyKQogCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weQppbmRleCA2NjY0NGNjLi5jNGM3YmY2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9kZXBsb3kucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2RvJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGNoZWNrcGF0aD1gZGlybmFtZSAiJGNoZWNrcGF0aCJgJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnZG9uZScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2ZyZWVzcGFjZT1gZGYgLVAgJGNoZWNrcGF0aCB8IHNlZCAiMWQiIHwgYXdrIFwneyBwcmludCAkNCB9XCdgJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChyJ2ZyZWVzcGFjZT0kKGRmIC1QICRjaGVja3BhdGggfCBzZWQgLW5yZSAicy9eKFxTK1xzKyl7M30oWzAtOV0rKS4qL1wyL3AiKScpCiAgICAgICAgICAgICAjIEZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgaXMgdGhlIHRvdGFsIHNwYWNlCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3RvdGFsPWBoZWFkIC1uMSAkM2AnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdpZiBbICR0b3RhbCAtZ3QgJGZyZWVzcGFjZSBdIDsgdGhlbicpCkBAIC0xNTUsODMgKzE1NSw4NiBAQAogCiAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgpCiAgICAgdHJ5OgotICAgICAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZV9zaW1wbGUodGluZm9pbC5jb29rZXIsIGFyZ3MucmVjaXBlbmFtZSwgdGluZm9pbC5jb25maWdfZGF0YSkKLSAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRXhjZXB0aW9uIHBhcnNpbmcgcmVjaXBlICVzOiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ3MucmVjaXBlbmFtZSwgZSkpCi0gICAgcmVjaXBlX291dGRpciA9IHJkLmdldFZhcignRCcsIFRydWUpCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlY2lwZV9vdXRkaXIpIG9yIG5vdCBvcy5saXN0ZGlyKHJlY2lwZV9vdXRkaXIpOgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ05vIGZpbGVzIHRvIGRlcGxveSAtIGhhdmUgeW91IGJ1aWx0IHRoZSAlcyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlPyBJZiBzbywgdGhlIGluc3RhbGwgc3RlcCBoYXMgbm90IGluc3RhbGxlZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnYW55IGZpbGVzLicgJSBhcmdzLnJlY2lwZW5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJkID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlX3NpbXBsZSh0aW5mb2lsLmNvb2tlciwgYXJncy5yZWNpcGVuYW1lLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0V4Y2VwdGlvbiBwYXJzaW5nIHJlY2lwZSAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJncy5yZWNpcGVuYW1lLCBlKSkKKyAgICAgICAgcmVjaXBlX291dGRpciA9IHJkLmdldFZhcignRCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZWNpcGVfb3V0ZGlyKSBvciBub3Qgb3MubGlzdGRpcihyZWNpcGVfb3V0ZGlyKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignTm8gZmlsZXMgdG8gZGVwbG95IC0gaGF2ZSB5b3UgYnVpbHQgdGhlICVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlPyBJZiBzbywgdGhlIGluc3RhbGwgc3RlcCBoYXMgbm90IGluc3RhbGxlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FueSBmaWxlcy4nICUgYXJncy5yZWNpcGVuYW1lKQogCi0gICAgZmlsZWxpc3QgPSBbXQotICAgIGZ0b3RhbHNpemUgPSAwCi0gICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsocmVjaXBlX291dGRpcik6Ci0gICAgICAgIGZvciBmbiBpbiBmaWxlczoKLSAgICAgICAgICAgICMgR2V0IHRoZSBzaXplIGluIGtpQiAoc2luY2Ugd2UnbGwgYmUgY29tcGFyaW5nIGl0IHRvIHRoZSBvdXRwdXQgb2YgZHUgLWspCi0gICAgICAgICAgICAjIE1VU1QgdXNlIGxzdGF0KCkgaGVyZSBub3Qgc3RhdCgpIG9yIGdldGZpbGVzaXplKCkgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0bwotICAgICAgICAgICAgIyBkZXJlZmVyZW5jZSBzeW1saW5rcwotICAgICAgICAgICAgZnNpemUgPSBpbnQobWF0aC5jZWlsKGZsb2F0KG9zLmxzdGF0KG9zLnBhdGguam9pbihyb290LCBmbikpLnN0X3NpemUpLzEwMjQpKQotICAgICAgICAgICAgZnRvdGFsc2l6ZSArPSBmc2l6ZQotICAgICAgICAgICAgIyBUaGUgcGF0aCBhcyBpdCB3b3VsZCBhcHBlYXIgb24gdGhlIHRhcmdldAotICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgb3MucGF0aC5yZWxwYXRoKHJvb3QsIHJlY2lwZV9vdXRkaXIpLCBmbikKLSAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZCgoZnBhdGgsIGZzaXplKSkKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICBmdG90YWxzaXplID0gMAorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhyZWNpcGVfb3V0ZGlyKToKKyAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAjIEdldCB0aGUgc2l6ZSBpbiBraUIgKHNpbmNlIHdlJ2xsIGJlIGNvbXBhcmluZyBpdCB0byB0aGUgb3V0cHV0IG9mIGR1IC1rKQorICAgICAgICAgICAgICAgICMgTVVTVCB1c2UgbHN0YXQoKSBoZXJlIG5vdCBzdGF0KCkgb3IgZ2V0ZmlsZXNpemUoKSBzaW5jZSB3ZSBkb24ndCB3YW50IHRvCisgICAgICAgICAgICAgICAgIyBkZXJlZmVyZW5jZSBzeW1saW5rcworICAgICAgICAgICAgICAgIGZzaXplID0gaW50KG1hdGguY2VpbChmbG9hdChvcy5sc3RhdChvcy5wYXRoLmpvaW4ocm9vdCwgZm4pKS5zdF9zaXplKS8xMDI0KSkKKyAgICAgICAgICAgICAgICBmdG90YWxzaXplICs9IGZzaXplCisgICAgICAgICAgICAgICAgIyBUaGUgcGF0aCBhcyBpdCB3b3VsZCBhcHBlYXIgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgIGZwYXRoID0gb3MucGF0aC5qb2luKGRlc3RkaXIsIG9zLnBhdGgucmVscGF0aChyb290LCByZWNpcGVfb3V0ZGlyKSwgZm4pCisgICAgICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKChmcGF0aCwgZnNpemUpKQogCi0gICAgaWYgYXJncy5kcnlfcnVuOgotICAgICAgICBwcmludCgnRmlsZXMgdG8gYmUgZGVwbG95ZWQgZm9yICVzIG9uIHRhcmdldCAlczonICUgKGFyZ3MucmVjaXBlbmFtZSwgYXJncy50YXJnZXQpKQotICAgICAgICBmb3IgaXRlbSwgXyBpbiBmaWxlbGlzdDoKLSAgICAgICAgICAgIHByaW50KCcgICVzJyAlIGl0ZW0pCi0gICAgICAgIHJldHVybiAwCisgICAgICAgIGlmIGFyZ3MuZHJ5X3J1bjoKKyAgICAgICAgICAgIHByaW50KCdGaWxlcyB0byBiZSBkZXBsb3llZCBmb3IgJXMgb24gdGFyZ2V0ICVzOicgJSAoYXJncy5yZWNpcGVuYW1lLCBhcmdzLnRhcmdldCkpCisgICAgICAgICAgICBmb3IgaXRlbSwgXyBpbiBmaWxlbGlzdDoKKyAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBpdGVtKQorICAgICAgICAgICAgcmV0dXJuIDAKIAogCi0gICAgZXh0cmFvcHRpb25zID0gJycKLSAgICBpZiBhcmdzLm5vX2hvc3RfY2hlY2s6Ci0gICAgICAgIGV4dHJhb3B0aW9ucyArPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCi0gICAgaWYgbm90IGFyZ3Muc2hvd19zdGF0dXM6Ci0gICAgICAgIGV4dHJhb3B0aW9ucyArPSAnIC1xJworICAgICAgICBleHRyYW9wdGlvbnMgPSAnJworICAgICAgICBpZiBhcmdzLm5vX2hvc3RfY2hlY2s6CisgICAgICAgICAgICBleHRyYW9wdGlvbnMgKz0gJy1vIFVzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwgLW8gU3RyaWN0SG9zdEtleUNoZWNraW5nPW5vJworICAgICAgICBpZiBub3QgYXJncy5zaG93X3N0YXR1czoKKyAgICAgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnIC1xJwogCi0gICAgIyBJbiBvcmRlciB0byBkZWxldGUgcHJldmlvdXNseSBkZXBsb3llZCBmaWxlcyBhbmQgaGF2ZSB0aGUgbWFuaWZlc3QgZmlsZSBvbgotICAgICMgdGhlIHRhcmdldCwgd2Ugd3JpdGUgb3V0IGEgc2hlbGwgc2NyaXB0IGFuZCB0aGVuIGNvcHkgaXQgdG8gdGhlIHRhcmdldAotICAgICMgc28gd2UgY2FuIHRoZW4gcnVuIGl0IChwaXBpbmcgdGFyIG91dHB1dCB0byBpdCkuCi0gICAgIyAoV2UgY2Fubm90IHVzZSBzY3AgaGVyZSwgYmVjYXVzZSBpdCBkb2Vzbid0IHByZXNlcnZlIHN5bWxpbmtzLikKLSAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCi0gICAgdHJ5OgotICAgICAgICB0bXBzY3JpcHQgPSAnL3RtcC9kZXZ0b29sX2RlcGxveS5zaCcKLSAgICAgICAgdG1wZmlsZWxpc3QgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHRtcHNjcmlwdCksICdkZXZ0b29sX2RlcGxveS5saXN0JykKLSAgICAgICAgc2hlbGxzY3JpcHQgPSBfcHJlcGFyZV9yZW1vdGVfc2NyaXB0KGRlcGxveT1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1hcmdzLnNob3dfc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9wcmVzZXJ2ZT1hcmdzLm5vX3ByZXNlcnZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9jaGVja3NwYWNlPWFyZ3Mubm9fY2hlY2tfc3BhY2UpCi0gICAgICAgICMgV3JpdGUgb3V0IHRoZSBzY3JpcHQgdG8gYSBmaWxlCi0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odG1wZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHRtcHNjcmlwdCkpLCAndycpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNoZWxsc2NyaXB0KQotICAgICAgICAjIFdyaXRlIG91dCB0aGUgZmlsZSBsaXN0Ci0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odG1wZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHRtcGZpbGVsaXN0KSksICd3JykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoJyVkXG4nICUgZnRvdGFsc2l6ZSkKLSAgICAgICAgICAgIGZvciBmcGF0aCwgZnNpemUgaW4gZmlsZWxpc3Q6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgnJXMgJWRcbicgJSAoZnBhdGgsIGZzaXplKSkKLSAgICAgICAgIyBDb3B5IHRoZW0gdG8gdGhlIHRhcmdldAotICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoInNjcCAlcyAlcy8qICVzOiVzIiAlIChleHRyYW9wdGlvbnMsIHRtcGRpciwgYXJncy50YXJnZXQsIG9zLnBhdGguZGlybmFtZSh0bXBzY3JpcHQpKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgIyBJbiBvcmRlciB0byBkZWxldGUgcHJldmlvdXNseSBkZXBsb3llZCBmaWxlcyBhbmQgaGF2ZSB0aGUgbWFuaWZlc3QgZmlsZSBvbgorICAgICAgICAjIHRoZSB0YXJnZXQsIHdlIHdyaXRlIG91dCBhIHNoZWxsIHNjcmlwdCBhbmQgdGhlbiBjb3B5IGl0IHRvIHRoZSB0YXJnZXQKKyAgICAgICAgIyBzbyB3ZSBjYW4gdGhlbiBydW4gaXQgKHBpcGluZyB0YXIgb3V0cHV0IHRvIGl0KS4KKyAgICAgICAgIyAoV2UgY2Fubm90IHVzZSBzY3AgaGVyZSwgYmVjYXVzZSBpdCBkb2Vzbid0IHByZXNlcnZlIHN5bWxpbmtzLikKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0bXBzY3JpcHQgPSAnL3RtcC9kZXZ0b29sX2RlcGxveS5zaCcKKyAgICAgICAgICAgIHRtcGZpbGVsaXN0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZSh0bXBzY3JpcHQpLCAnZGV2dG9vbF9kZXBsb3kubGlzdCcpCisgICAgICAgICAgICBzaGVsbHNjcmlwdCA9IF9wcmVwYXJlX3JlbW90ZV9zY3JpcHQoZGVwbG95PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPWFyZ3Muc2hvd19zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3ByZXNlcnZlPWFyZ3Mubm9fcHJlc2VydmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2NoZWNrc3BhY2U9YXJncy5ub19jaGVja19zcGFjZSkKKyAgICAgICAgICAgICMgV3JpdGUgb3V0IHRoZSBzY3JpcHQgdG8gYSBmaWxlCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcGRpciwgb3MucGF0aC5iYXNlbmFtZSh0bXBzY3JpcHQpKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2hlbGxzY3JpcHQpCisgICAgICAgICAgICAjIFdyaXRlIG91dCB0aGUgZmlsZSBsaXN0CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcGRpciwgb3MucGF0aC5iYXNlbmFtZSh0bXBmaWxlbGlzdCkpLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJWRcbicgJSBmdG90YWxzaXplKQorICAgICAgICAgICAgICAgIGZvciBmcGF0aCwgZnNpemUgaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzICVkXG4nICUgKGZwYXRoLCBmc2l6ZSkpCisgICAgICAgICAgICAjIENvcHkgdGhlbSB0byB0aGUgdGFyZ2V0CisgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoInNjcCAlcyAlcy8qICVzOiVzIiAlIChleHRyYW9wdGlvbnMsIHRtcGRpciwgYXJncy50YXJnZXQsIG9zLnBhdGguZGlybmFtZSh0bXBzY3JpcHQpKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRmFpbGVkIHRvIGNvcHkgc2NyaXB0IHRvICVzIC0gcmVydW4gd2l0aCAtcyB0byAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXQgYSBjb21wbGV0ZSBlcnJvciBtZXNzYWdlJyAlIGFyZ3MudGFyZ2V0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBkaXIpCisKKyAgICAgICAgIyBOb3cgcnVuIHRoZSBzY3JpcHQKKyAgICAgICAgcmV0ID0gZXhlY19mYWtlcm9vdChyZCwgJ3RhciBjZiAtIC4gfCBzc2ggJXMgJXMgXCdzaCAlcyAlcyAlcyAlc1wnJyAlIChleHRyYW9wdGlvbnMsIGFyZ3MudGFyZ2V0LCB0bXBzY3JpcHQsIGFyZ3MucmVjaXBlbmFtZSwgZGVzdGRpciwgdG1wZmlsZWxpc3QpLCBjd2Q9cmVjaXBlX291dGRpciwgc2hlbGw9VHJ1ZSkKICAgICAgICAgaWYgcmV0ICE9IDA6Ci0gICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0ZhaWxlZCB0byBjb3B5IHNjcmlwdCB0byAlcyAtIHJlcnVuIHdpdGggLXMgdG8gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXQgYSBjb21wbGV0ZSBlcnJvciBtZXNzYWdlJyAlIGFyZ3MudGFyZ2V0KQorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdEZXBsb3kgZmFpbGVkIC0gcmVydW4gd2l0aCAtcyB0byBnZXQgYSBjb21wbGV0ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yIG1lc3NhZ2UnKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgZGVwbG95ZWQgJXMnICUgcmVjaXBlX291dGRpcikKKworICAgICAgICBmaWxlc19saXN0ID0gW10KKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsocmVjaXBlX291dGRpcik6CisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGZpbGVuYW1lKSwgcmVjaXBlX291dGRpcikKKyAgICAgICAgICAgICAgICBmaWxlc19saXN0LmFwcGVuZChvcy5wYXRoLmpvaW4oZGVzdGRpciwgZmlsZW5hbWUpKQogICAgIGZpbmFsbHk6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUodG1wZGlyKQotCi0gICAgIyBOb3cgcnVuIHRoZSBzY3JpcHQKLSAgICByZXQgPSBleGVjX2Zha2Vyb290KHJkLCAndGFyIGNmIC0gLiB8IHNzaCAlcyAlcyBcJ3NoICVzICVzICVzICVzXCcnICUgKGV4dHJhb3B0aW9ucywgYXJncy50YXJnZXQsIHRtcHNjcmlwdCwgYXJncy5yZWNpcGVuYW1lLCBkZXN0ZGlyLCB0bXBmaWxlbGlzdCksIGN3ZD1yZWNpcGVfb3V0ZGlyLCBzaGVsbD1UcnVlKQotICAgIGlmIHJldCAhPSAwOgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0RlcGxveSBmYWlsZWQgLSByZXJ1biB3aXRoIC1zIHRvIGdldCBhIGNvbXBsZXRlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBtZXNzYWdlJykKLQotICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgZGVwbG95ZWQgJXMnICUgcmVjaXBlX291dGRpcikKLQotICAgIGZpbGVzX2xpc3QgPSBbXQotICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHJlY2lwZV9vdXRkaXIpOgotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZW5hbWUpLCByZWNpcGVfb3V0ZGlyKQotICAgICAgICAgICAgZmlsZXNfbGlzdC5hcHBlbmQob3MucGF0aC5qb2luKGRlc3RkaXIsIGZpbGVuYW1lKSkKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKICAgICByZXR1cm4gMAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9ydW5xZW11LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvcnVucWVtdS5weQppbmRleCBkYWVlN2ZiLi5hZTI1Y2VlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9ydW5xZW11LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3J1bnFlbXUucHkKQEAgLTMwLDkgKzMwLDExIEBACiAgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdydW5xZW11JyBzdWJjb21tYW5kIiIiCiAKICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChjb25maWdfb25seT1UcnVlLCBiYXNlcGF0aD1iYXNlcGF0aCkKLSAgICBtYWNoaW5lID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQotICAgIGJpbmRpcl9uYXRpdmUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgVHJ1ZSkKLSAgICB0aW5mb2lsLnNodXRkb3duKCkKKyAgICB0cnk6CisgICAgICAgIG1hY2hpbmUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignTUFDSElORScsIFRydWUpCisgICAgICAgIGJpbmRpcl9uYXRpdmUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgVHJ1ZSkKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogICAgIGlmIG5vdCBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGJpbmRpcl9uYXRpdmUsICdxZW11LXN5c3RlbS0qJykpOgogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1FFTVUgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBTREsnKQpAQCAtNDYsNyArNDgsMTIgQEAKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGltYWdlIG5hbWUgdG8gcnVuLCBwbGVhc2Ugc3BlY2lmeSBvbmUnKQogCiAgICAgdHJ5OgotICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAncnVucWVtdSAlcyAlcyAlcycgJSAobWFjaGluZSwgaW1hZ2VuYW1lLCAiICIuam9pbihhcmdzLmFyZ3MpKSwgd2F0Y2g9VHJ1ZSkKKyAgICAgICAgIyBGSVhNRSBydW5xZW11IGFzc3VtZXMgdGhhdCBpZiBPRUNPUkVfTkFUSVZFX1NZU1JPT1QgaXMgc2V0IHRoZW4gaXQgc2hvdWxkbid0CisgICAgICAgICMgcnVuIGJpdGJha2UgdG8gZmluZCBvdXQgdGhlIHZhbHVlcyBvZiB2YXJpb3VzIGVudmlyb25tZW50IHZhcmlhYmxlcywgd2hpY2gKKyAgICAgICAgIyBpc24ndCB0aGUgY2FzZSBmb3IgdGhlIGV4dGVuc2libGUgU0RLLiBXb3JrIGFyb3VuZCBpdCBmb3Igbm93LgorICAgICAgICBuZXdlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgICAgIG5ld2Vudi5wb3AoJ09FQ09SRV9OQVRJVkVfU1lTUk9PVCcsICcnKQorICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAncnVucWVtdSAlcyAlcyAlcycgJSAobWFjaGluZSwgaW1hZ2VuYW1lLCAiICIuam9pbihhcmdzLmFyZ3MpKSwgd2F0Y2g9VHJ1ZSwgZW52PW5ld2VudikKICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgogICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgc2VlbiB0aGUgb3V0cHV0IHNpbmNlIHdhdGNoPVRydWUsIHNvIGp1c3QgZW5zdXJlIHdlIHJldHVybiBzb21ldGhpbmcgdG8gdGhlIHVzZXIKICAgICAgICAgcmV0dXJuIGUuZXhpdGNvZGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weQppbmRleCA0NmZkMTJiLi45MjIyNzdiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zZGsucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICByZXR1cm4gY2hhbmdlZGZpbGVzCiAKIGRlZiBzZGtfdXBkYXRlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6Ci0gICAgIyBGZXRjaCBsb2NrZWQtc2lncy5pbmMgZmlsZSBmcm9tIHJlbW90ZS9sb2NhbCBkZXN0aW5hdGlvbgorICAgICIiIkVudHJ5IHBvaW50IGZvciBkZXZ0b29sIHNkay11cGRhdGUgY29tbWFuZCIiIgogICAgIHVwZGF0ZXNlcnZlciA9IGFyZ3MudXBkYXRlc2VydmVyCiAgICAgaWYgbm90IHVwZGF0ZXNlcnZlcjoKICAgICAgICAgdXBkYXRlc2VydmVyID0gY29uZmlnLmdldCgnU0RLJywgJ3VwZGF0ZXNlcnZlcicsICcnKQpAQCAtMTIyLDEwICsxMjIsOSBAQAogICAgIGVsc2U6CiAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRm91bmQgY29uZi9sb2NrZWQtc2lncy5pbmMgaW4gJXMiICUgYmFzZXBhdGgpCiAKLSAgICBpZiAnOicgaW4gdXBkYXRlc2VydmVyOgotICAgICAgICBpc19yZW1vdGUgPSBUcnVlCi0gICAgZWxzZToKLSAgICAgICAgaXNfcmVtb3RlID0gRmFsc2UKKyAgICBpZiBub3QgJzovLycgaW4gdXBkYXRlc2VydmVyOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVwZGF0ZSBzZXJ2ZXIgbXVzdCBiZSBhIFVSTCIpCisgICAgICAgIHJldHVybiAtMQogCiAgICAgbGF5ZXJzX2RpciA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2xheWVycycpCiAgICAgY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJykKQEAgLTEzOSwxMjAgKzEzOCw4NSBAQAogICAgIGZpbmFsbHk6CiAgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogCi0gICAgaWYgbm90IGlzX3JlbW90ZToKLSAgICAgICAgIyBkZXZ0b29sIHNkay11cGRhdGUgL2xvY2FsL3BhdGgvdG8vbGF0ZXN0L3NkawotICAgICAgICBuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odXBkYXRlc2VydmVyLCAnY29uZi9sb2NrZWQtc2lncy5pbmMnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobmV3X2xvY2tlZF9zaWdfZmlsZV9wYXRoKToKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgZG9lc24ndCBleGlzdCBvciBpcyBub3QgYW4gZXh0ZW5zaWJsZSBTREsiICUgdXBkYXRlc2VydmVyKQotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dnZXIuZGVidWcoIkZvdW5kIGNvbmYvbG9ja2VkLXNpZ3MuaW5jIGluICVzIiAlIHVwZGF0ZXNlcnZlcikKLSAgICAgICAgdXBkYXRlX2RpY3QgPSBnZW5lcmF0ZV91cGRhdGVfZGljdChuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgsIG9sZF9sb2NrZWRfc2lnX2ZpbGVfcGF0aCkKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCJ1cGRhdGVfZGljdCA9ICVzIiAlIHVwZGF0ZV9kaWN0KQotICAgICAgICBuZXdzZGtfcGF0aCA9IHVwZGF0ZXNlcnZlcgotICAgICAgICBzc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKG5ld3Nka19wYXRoLCAnc3N0YXRlLWNhY2hlJykKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNzdGF0ZV9kaXIpOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IG5vdCBmb3VuZCB1bmRlciAlcyIgJSBuZXdzZGtfcGF0aCkKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHNzdGF0ZV9vYmplY3RzID0gZ2V0X3NzdGF0ZV9vYmplY3RzKHVwZGF0ZV9kaWN0LCBzc3RhdGVfZGlyKQotICAgICAgICBsb2dnZXIuZGVidWcoInNzdGF0ZV9vYmplY3RzID0gJXMiICUgc3N0YXRlX29iamVjdHMpCi0gICAgICAgIGlmIGxlbihzc3RhdGVfb2JqZWN0cykgPT0gMDoKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJObyBuZWVkIHRvIHVwZGF0ZS4iKQorICAgIHRtcHNka19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicpKQorICAgICAgICBuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnLCAnbG9ja2VkLXNpZ3MuaW5jJykKKyAgICAgICAgIyBGZXRjaCBtYW5pZmVzdCBmcm9tIHNlcnZlcgorICAgICAgICB0bXBtYW5pZmVzdCA9IG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicsICdzZGstY29uZi1tYW5pZmVzdCcpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAlcyAlcy9jb25mL3Nkay1jb25mLW1hbmlmZXN0IiAlICh0bXBtYW5pZmVzdCwgdXBkYXRlc2VydmVyKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgY2hhbmdlZGZpbGVzID0gY2hlY2tfbWFuaWZlc3QodG1wbWFuaWZlc3QsIGJhc2VwYXRoKQorICAgICAgICBpZiBub3QgY2hhbmdlZGZpbGVzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFscmVhZHkgdXAtdG8tZGF0ZSIpCiAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBsb2dnZXIuaW5mbygiSW5zdGFsbGluZyBzc3RhdGUgb2JqZWN0cyBpbnRvICVzIiwgYmFzZXBhdGgpCi0gICAgICAgIGluc3RhbGxfc3N0YXRlX29iamVjdHMoc3N0YXRlX29iamVjdHMsIHVwZGF0ZXNlcnZlci5yc3RyaXAoJy8nKSwgYmFzZXBhdGgpCi0gICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGluZyBjb25maWd1cmF0aW9uIGZpbGVzIikKLSAgICAgICAgbmV3X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHVwZGF0ZXNlcnZlciwgJ2NvbmYnKQotICAgICAgICBzaHV0aWwucm10cmVlKGNvbmZfZGlyKQotICAgICAgICBzaHV0aWwuY29weXRyZWUobmV3X2NvbmZfZGlyLCBjb25mX2RpcikKLSAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0aW5nIGxheWVycyIpCi0gICAgICAgIG5ld19sYXllcnNfZGlyID0gb3MucGF0aC5qb2luKHVwZGF0ZXNlcnZlciwgJ2xheWVycycpCi0gICAgICAgIHNodXRpbC5ybXRyZWUobGF5ZXJzX2RpcikKLSAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJjcCAtYSAlcyAlcyIgJSAobmV3X2xheWVyc19kaXIsIGxheWVyc19kaXIpLCBzaGVsbD1UcnVlKQotICAgICAgICBpZiByZXQgIT0gMDoKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29weWluZyAlcyB0byAlcyBmYWlsZWQiICUgKG5ld19sYXllcnNfZGlyLCBsYXllcnNfZGlyKSkKLSAgICAgICAgICAgIHJldHVybiByZXQKLSAgICBlbHNlOgotICAgICAgICAjIGRldnRvb2wgc2RrLXVwZGF0ZSBodHRwOi8vbXlob3N0L3NkawotICAgICAgICB0bXBzZGtfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicpKQotICAgICAgICAgICAgbmV3X2xvY2tlZF9zaWdfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJywgJ2xvY2tlZC1zaWdzLmluYycpCi0gICAgICAgICAgICAjIEZldGNoIG1hbmlmZXN0IGZyb20gc2VydmVyCi0gICAgICAgICAgICB0bXBtYW5pZmVzdCA9IG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicsICdzZGstY29uZi1tYW5pZmVzdCcpCi0gICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIndnZXQgLXEgLU8gJXMgJXMvY29uZi9zZGstY29uZi1tYW5pZmVzdCIgJSAodG1wbWFuaWZlc3QsIHVwZGF0ZXNlcnZlciksIHNoZWxsPVRydWUpCi0gICAgICAgICAgICBjaGFuZ2VkZmlsZXMgPSBjaGVja19tYW5pZmVzdCh0bXBtYW5pZmVzdCwgYmFzZXBhdGgpCi0gICAgICAgICAgICBpZiBub3QgY2hhbmdlZGZpbGVzOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBbHJlYWR5IHVwLXRvLWRhdGUiKQotICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICAjIFVwZGF0ZSBtZXRhZGF0YQotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJVcGRhdGluZyBtZXRhZGF0YSB2aWEgZ2l0IC4uLiIpCi0gICAgICAgICAgICAjQ2hlY2sgZm9yIHRoZSBzdGF0dXMgYmVmb3JlIGRvaW5nIGEgZmV0Y2ggYW5kIHJlc2V0Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdsYXllcnMvLmdpdCcpKToKLSAgICAgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIsIHNoZWxsPVRydWUsIGN3ZD1sYXllcnNfZGlyKQotICAgICAgICAgICAgICAgIGlmIG5vdCBvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiZ2l0IGZldGNoIC0tYWxsOyBnaXQgcmVzZXQgLS1oYXJkIiwgc2hlbGw9VHJ1ZSwgY3dkPWxheWVyc19kaXIpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gdXBkYXRlIG1ldGFkYXRhIGFzIHRoZXJlIGhhdmUgYmVlbiBjaGFuZ2VzIG1hZGUgdG8gaXQuIEFib3J0aW5nLiIpOwotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNoYW5nZWQgZmlsZXM6XG4lcyIgJSBvdXQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgIyBVcGRhdGUgbWV0YWRhdGEKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJVcGRhdGluZyBtZXRhZGF0YSB2aWEgZ2l0IC4uLiIpCisgICAgICAgICNDaGVjayBmb3IgdGhlIHN0YXR1cyBiZWZvcmUgZG9pbmcgYSBmZXRjaCBhbmQgcmVzZXQKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnbGF5ZXJzLy5naXQnKSk6CisgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIsIHNoZWxsPVRydWUsIGN3ZD1sYXllcnNfZGlyKQorICAgICAgICAgICAgaWYgbm90IG91dDoKKyAgICAgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoImdpdCBmZXRjaCAtLWFsbDsgZ2l0IHJlc2V0IC0taGFyZCIsIHNoZWxsPVRydWUsIGN3ZD1sYXllcnNfZGlyKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXQgPSAtMQorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIHVwZGF0ZSBtZXRhZGF0YSBhcyB0aGVyZSBoYXZlIGJlZW4gY2hhbmdlcyBtYWRlIHRvIGl0LiBBYm9ydGluZy4iKTsKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNoYW5nZWQgZmlsZXM6XG4lcyIgJSBvdXQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0ID0gLTEKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoImdpdCBjbG9uZSAlcy9sYXllcnMvLmdpdCIgJSB1cGRhdGVzZXJ2ZXIsIHNoZWxsPVRydWUsIGN3ZD10bXBzZGtfZGlyKQogICAgICAgICAgICAgaWYgcmV0ICE9IDA6Ci0gICAgICAgICAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJnaXQgY2xvbmUgJXMvbGF5ZXJzLy5naXQiICUgdXBkYXRlc2VydmVyLCBzaGVsbD1UcnVlLCBjd2Q9dG1wc2RrX2RpcikKLSAgICAgICAgICAgICAgICBpZiByZXQgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVcGRhdGluZyBtZXRhZGF0YSB2aWEgZ2l0IGZhaWxlZCIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiVXBkYXRpbmcgY29uZiBmaWxlcyAuLi4iKQotICAgICAgICAgICAgZm9yIGNoYW5nZWRmaWxlIGluIGNoYW5nZWRmaWxlczoKLSAgICAgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIndnZXQgLXEgLU8gJXMgJXMvJXMiICUgKGNoYW5nZWRmaWxlLCB1cGRhdGVzZXJ2ZXIsIGNoYW5nZWRmaWxlKSwgc2hlbGw9VHJ1ZSwgY3dkPXRtcHNka19kaXIpCi0gICAgICAgICAgICAgICAgaWYgcmV0ICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVXBkYXRpbmcgJXMgZmFpbGVkIiAlIGNoYW5nZWRmaWxlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVcGRhdGluZyBtZXRhZGF0YSB2aWEgZ2l0IGZhaWxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBsb2dnZXIuZGVidWcoIlVwZGF0aW5nIGNvbmYgZmlsZXMgLi4uIikKKyAgICAgICAgZm9yIGNoYW5nZWRmaWxlIGluIGNoYW5nZWRmaWxlczoKKyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAlcyAlcy8lcyIgJSAoY2hhbmdlZGZpbGUsIHVwZGF0ZXNlcnZlciwgY2hhbmdlZGZpbGUpLCBzaGVsbD1UcnVlLCBjd2Q9dG1wc2RrX2RpcikKKyAgICAgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVXBkYXRpbmcgJXMgZmFpbGVkIiAlIGNoYW5nZWRmaWxlKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQKIAotICAgICAgICAgICAgIyBDaGVjayBpZiBVTklOQVRJVkVfQ0hFQ0tTVU0gY2hhbmdlZAotICAgICAgICAgICAgdW5pbmF0aXZlID0gRmFsc2UKLSAgICAgICAgICAgIGlmICdjb25mL2xvY2FsLmNvbmYnIGluIGNoYW5nZWRmaWxlczoKLSAgICAgICAgICAgICAgICBkZWYgcmVhZF91bmluYXRpdmVfY2hlY2tzdW1zKGZuKToKLSAgICAgICAgICAgICAgICAgICAgY2hrc3VtaXRlbXMgPSBbXQotICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdVTklOQVRJVkVfQ0hFQ0tTVU0nKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gcmUuc3BsaXQocidbXFtcXSJcJ10nLCBsaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA+IDM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGtzdW1pdGVtcy5hcHBlbmQoKHNwbGl0bGluZVsxXSwgc3BsaXRsaW5lWzNdKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoa3N1bWl0ZW1zCisgICAgICAgICMgQ2hlY2sgaWYgVU5JTkFUSVZFX0NIRUNLU1VNIGNoYW5nZWQKKyAgICAgICAgdW5pbmF0aXZlID0gRmFsc2UKKyAgICAgICAgaWYgJ2NvbmYvbG9jYWwuY29uZicgaW4gY2hhbmdlZGZpbGVzOgorICAgICAgICAgICAgZGVmIHJlYWRfdW5pbmF0aXZlX2NoZWNrc3Vtcyhmbik6CisgICAgICAgICAgICAgICAgY2hrc3VtaXRlbXMgPSBbXQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdVTklOQVRJVkVfQ0hFQ0tTVU0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSByZS5zcGxpdChyJ1tcW1xdIlwnXScsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPiAzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGtzdW1pdGVtcy5hcHBlbmQoKHNwbGl0bGluZVsxXSwgc3BsaXRsaW5lWzNdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hrc3VtaXRlbXMKIAotICAgICAgICAgICAgICAgIG9sZHN1bXMgPSByZWFkX3VuaW5hdGl2ZV9jaGVja3N1bXMob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZi9sb2NhbC5jb25mJykpCi0gICAgICAgICAgICAgICAgbmV3c3VtcyA9IHJlYWRfdW5pbmF0aXZlX2NoZWNrc3Vtcyhvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYvbG9jYWwuY29uZicpKQotICAgICAgICAgICAgICAgIGlmIG9sZHN1bXMgIT0gbmV3c3VtczoKLSAgICAgICAgICAgICAgICAgICAgdW5pbmF0aXZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBmb3IgYnVpbGRhcmNoLCBjaGtzdW0gaW4gbmV3c3VtczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaW5hdGl2ZV9maWxlID0gb3MucGF0aC5qb2luKCdkb3dubG9hZHMnLCAndW5pbmF0aXZlJywgY2hrc3VtLCAnJXMtbmF0aXZlc2RrLWxpYmMudGFyLmJ6MicgJSBidWlsZGFyY2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBta2Rpcihvcy5wYXRoLmpvaW4odG1wc2RrX2Rpciwgb3MucGF0aC5kaXJuYW1lKHVuaW5hdGl2ZV9maWxlKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIndnZXQgLXEgLU8gJXMgJXMvJXMiICUgKHVuaW5hdGl2ZV9maWxlLCB1cGRhdGVzZXJ2ZXIsIHVuaW5hdGl2ZV9maWxlKSwgc2hlbGw9VHJ1ZSwgY3dkPXRtcHNka19kaXIpCisgICAgICAgICAgICBvbGRzdW1zID0gcmVhZF91bmluYXRpdmVfY2hlY2tzdW1zKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYvbG9jYWwuY29uZicpKQorICAgICAgICAgICAgbmV3c3VtcyA9IHJlYWRfdW5pbmF0aXZlX2NoZWNrc3Vtcyhvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYvbG9jYWwuY29uZicpKQorICAgICAgICAgICAgaWYgb2xkc3VtcyAhPSBuZXdzdW1zOgorICAgICAgICAgICAgICAgIHVuaW5hdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgYnVpbGRhcmNoLCBjaGtzdW0gaW4gbmV3c3VtczoKKyAgICAgICAgICAgICAgICAgICAgdW5pbmF0aXZlX2ZpbGUgPSBvcy5wYXRoLmpvaW4oJ2Rvd25sb2FkcycsICd1bmluYXRpdmUnLCBjaGtzdW0sICclcy1uYXRpdmVzZGstbGliYy50YXIuYnoyJyAlIGJ1aWxkYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgbWtkaXIob3MucGF0aC5qb2luKHRtcHNka19kaXIsIG9zLnBhdGguZGlybmFtZSh1bmluYXRpdmVfZmlsZSkpKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIndnZXQgLXEgLU8gJXMgJXMvJXMiICUgKHVuaW5hdGl2ZV9maWxlLCB1cGRhdGVzZXJ2ZXIsIHVuaW5hdGl2ZV9maWxlKSwgc2hlbGw9VHJ1ZSwgY3dkPXRtcHNka19kaXIpCiAKLSAgICAgICAgICAgICMgT2ssIGFsbCBpcyB3ZWxsIGF0IHRoaXMgcG9pbnQgLSBtb3ZlIGV2ZXJ5dGhpbmcgb3ZlcgotICAgICAgICAgICAgdG1wbGF5ZXJzX2RpciA9IG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnbGF5ZXJzJykKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRtcGxheWVyc19kaXIpOgotICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobGF5ZXJzX2RpcikKLSAgICAgICAgICAgICAgICBzaHV0aWwubW92ZSh0bXBsYXllcnNfZGlyLCBsYXllcnNfZGlyKQotICAgICAgICAgICAgZm9yIGNoYW5nZWRmaWxlIGluIGNoYW5nZWRmaWxlczoKLSAgICAgICAgICAgICAgICBkZXN0ZmlsZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgY2hhbmdlZGZpbGUpCi0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRlc3RmaWxlKQotICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCBjaGFuZ2VkZmlsZSksIGRlc3RmaWxlKQotICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihjb25mX2RpciwgJ3Nkay1jb25mLW1hbmlmZXN0JykpCi0gICAgICAgICAgICBzaHV0aWwubW92ZSh0bXBtYW5pZmVzdCwgY29uZl9kaXIpCi0gICAgICAgICAgICBpZiB1bmluYXRpdmU6Ci0gICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdkb3dubG9hZHMnLCAndW5pbmF0aXZlJykpCi0gICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRtcHNka19kaXIsICdkb3dubG9hZHMnLCAndW5pbmF0aXZlJyksIG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2Rvd25sb2FkcycpKQorICAgICAgICAjIE9rLCBhbGwgaXMgd2VsbCBhdCB0aGlzIHBvaW50IC0gbW92ZSBldmVyeXRoaW5nIG92ZXIKKyAgICAgICAgdG1wbGF5ZXJzX2RpciA9IG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnbGF5ZXJzJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wbGF5ZXJzX2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGxheWVyc19kaXIpCisgICAgICAgICAgICBzaHV0aWwubW92ZSh0bXBsYXllcnNfZGlyLCBsYXllcnNfZGlyKQorICAgICAgICBmb3IgY2hhbmdlZGZpbGUgaW4gY2hhbmdlZGZpbGVzOgorICAgICAgICAgICAgZGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsIGNoYW5nZWRmaWxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGRlc3RmaWxlKQorICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRtcHNka19kaXIsIGNoYW5nZWRmaWxlKSwgZGVzdGZpbGUpCisgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oY29uZl9kaXIsICdzZGstY29uZi1tYW5pZmVzdCcpKQorICAgICAgICBzaHV0aWwubW92ZSh0bXBtYW5pZmVzdCwgY29uZl9kaXIpCisgICAgICAgIGlmIHVuaW5hdGl2ZToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnZG93bmxvYWRzJywgJ3VuaW5hdGl2ZScpKQorICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRtcHNka19kaXIsICdkb3dubG9hZHMnLCAndW5pbmF0aXZlJyksIG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2Rvd25sb2FkcycpKQogCi0gICAgICAgICAgICBpZiBub3Qgc3N0YXRlX21pcnJvcnM6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihjb25mX2RpciwgJ3NpdGUuY29uZicpLCAnYScpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NDT05GX1ZFUlNJT04gPSAiJXMiXG4nICUgc2l0ZV9jb25mX3ZlcnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTX2FwcGVuZCA9ICIgZmlsZTovLy4qICVzL3NzdGF0ZS1jYWNoZS9QQVRIIFxcbiAiXG4nICUgdXBkYXRlc2VydmVyKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBzZGtfZGlyKQorICAgICAgICBpZiBub3Qgc3N0YXRlX21pcnJvcnM6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNvbmZfZGlyLCAnc2l0ZS5jb25mJyksICdhJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdTQ09ORl9WRVJTSU9OID0gIiVzIlxuJyAlIHNpdGVfY29uZl92ZXJzaW9uKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTX2FwcGVuZCA9ICIgZmlsZTovLy4qICVzL3NzdGF0ZS1jYWNoZS9QQVRIIFxcbiAiXG4nICUgdXBkYXRlc2VydmVyKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNodXRpbC5ybXRyZWUodG1wc2RrX2RpcikKIAogICAgIGlmIG5vdCBhcmdzLnNraXBfcHJlcGFyZToKICAgICAgICAgIyBGaW5kIGFsbCBwb3RlbnRpYWxseSB1cGRhdGVhYmxlIHRhc2tzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zdGFuZGFyZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5CmluZGV4IDc3YTgyZDUuLjRlZmY2ZjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5CkBAIC0xLDYgKzEsNiBAQAogIyBEZXZlbG9wbWVudCB0b29sIC0gc3RhbmRhcmQgY29tbWFuZHMgcGx1Z2luCiAjCi0jIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEludGVsIENvcnBvcmF0aW9uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yOCw4ICsyOCw5IEBACiBpbXBvcnQgc2NyaXB0dXRpbHMKIGltcG9ydCBlcnJubwogaW1wb3J0IGdsb2IKK2ltcG9ydCBmaWxlY21wCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAotZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBjaGVja193b3Jrc3BhY2VfcmVjaXBlLCB1c2VfZXh0ZXJuYWxfYnVpbGQsIHNldHVwX2dpdF9yZXBvLCByZWNpcGVfdG9fYXBwZW5kLCBnZXRfYmJjbGFzc2V4dGVuZF90YXJnZXRzLCBEZXZ0b29sRXJyb3IKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgY2hlY2tfd29ya3NwYWNlX3JlY2lwZSwgdXNlX2V4dGVybmFsX2J1aWxkLCBzZXR1cF9naXRfcmVwbywgcmVjaXBlX3RvX2FwcGVuZCwgZ2V0X2JiY2xhc3NleHRlbmRfdGFyZ2V0cywgZW5zdXJlX25wbSwgRGV2dG9vbEVycm9yCiBmcm9tIGRldnRvb2wgaW1wb3J0IHBhcnNlX3JlY2lwZQogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCkBAIC00NiwxMyArNDcsMTMgQEAKICAgICAjIFRoZXNlIGFyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cywgYnV0IGJlY2F1c2Ugd2UncmUgbmljZSwgYWxsb3cKICAgICAjIHNwZWNpZnlpbmcgZS5nLiBzb3VyY2UgdHJlZSB3aXRob3V0IG5hbWUsIG9yIGZldGNoIFVSSSB3aXRob3V0IG5hbWUgb3IKICAgICAjIHNvdXJjZSB0cmVlIChpZiB3ZSBjYW4gZGV0ZWN0IHRoYXQgdGhhdCBpcyB3aGF0IHRoZSB1c2VyIG1lYW50KQotICAgIGlmICc6Ly8nIGluIGFyZ3MucmVjaXBlbmFtZToKKyAgICBpZiBzY3JpcHR1dGlscy5pc19zcmNfdXJsKGFyZ3MucmVjaXBlbmFtZSk6CiAgICAgICAgIGlmIG5vdCBhcmdzLmZldGNodXJpOgogICAgICAgICAgICAgaWYgYXJncy5mZXRjaDoKICAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VSSSBzcGVjaWZpZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBhcyB3ZWxsIGFzIC1mLy0tZmV0Y2gnKQogICAgICAgICAgICAgYXJncy5mZXRjaHVyaSA9IGFyZ3MucmVjaXBlbmFtZQogICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lID0gJycKLSAgICBlbGlmIGFyZ3Muc3JjdHJlZSBhbmQgJzovLycgaW4gYXJncy5zcmN0cmVlOgorICAgIGVsaWYgc2NyaXB0dXRpbHMuaXNfc3JjX3VybChhcmdzLnNyY3RyZWUpOgogICAgICAgICBpZiBub3QgYXJncy5mZXRjaHVyaToKICAgICAgICAgICAgIGlmIGFyZ3MuZmV0Y2g6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdVUkkgc3BlY2lmaWVkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgYXMgd2VsbCBhcyAtZi8tLWZldGNoJykKQEAgLTYzLDEzICs2NCwxNyBAQAogICAgICAgICAgICAgYXJncy5zcmN0cmVlID0gYXJncy5yZWNpcGVuYW1lCiAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUgPSBOb25lCiAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihhcmdzLnJlY2lwZW5hbWUpOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0FtYmlndW91cyBhcmd1bWVudCAlcyAtIGFzc3VtaW5nIHlvdSBtZWFuIGl0IHRvIGJlIHRoZSByZWNpcGUgbmFtZScpCisgICAgICAgICAgICBsb2dnZXIud2FybignQW1iaWd1b3VzIGFyZ3VtZW50ICIlcyIgLSBhc3N1bWluZyB5b3UgbWVhbiBpdCB0byBiZSB0aGUgcmVjaXBlIG5hbWUnICUgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaWYgYXJncy5zcmN0cmVlIGFuZCBvcy5wYXRoLmlzZmlsZShhcmdzLnNyY3RyZWUpOgorICAgICAgICBhcmdzLmZldGNodXJpID0gJ2ZpbGU6Ly8nICsgb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKKyAgICAgICAgYXJncy5zcmN0cmVlID0gJycKIAogICAgIGlmIGFyZ3MuZmV0Y2g6CiAgICAgICAgIGlmIGFyZ3MuZmV0Y2h1cmk6CiAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VSSSBzcGVjaWZpZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBhcyB3ZWxsIGFzIC1mLy0tZmV0Y2gnKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBGSVhNRSBzaG91bGQgc2hvdyBhIHdhcm5pbmcgdGhhdCAtZi8tLWZldGNoIGlzIGRlcHJlY2F0ZWQgaGVyZQorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJy1mLy0tZmV0Y2ggb3B0aW9uIGlzIGRlcHJlY2F0ZWQgLSB5b3UgY2FuIG5vdyBzaW1wbHkgc3BlY2lmeSB0aGUgVVJMIHRvIGZldGNoIGFzIGEgcG9zaXRpb25hbCBhcmd1bWVudCBpbnN0ZWFkJykKICAgICAgICAgICAgIGFyZ3MuZmV0Y2h1cmkgPSBhcmdzLmZldGNoCiAKICAgICBpZiBhcmdzLnJlY2lwZW5hbWU6CkBAIC04MCwxMCArODUsNiBAQAogICAgICAgICBpZiByZWFzb246CiAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IocmVhc29uKQogCi0gICAgICAgICMgRklYTUUgdGhpcyBvdWdodCB0byBiZSBpbiB2YWxpZGF0ZV9wbiBidXQgd2UncmUgdXNpbmcgdGhhdCBpbiBvdGhlciBjb250ZXh0cwotICAgICAgICBpZiAnLycgaW4gYXJncy5yZWNpcGVuYW1lOgotICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCciLyIgaXMgbm90IGEgdmFsaWQgY2hhcmFjdGVyIGluIHJlY2lwZSBuYW1lcycpCi0KICAgICBpZiBhcmdzLnNyY3RyZWU6CiAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQogICAgICAgICBzcmN0cmVlcGFyZW50ID0gTm9uZQpAQCAtMTI3LDYgKzEyOCw5IEBACiAgICAgICAgIGNvbG9yID0gYXJncy5jb2xvcgogICAgIGV4dHJhY21kb3B0cyA9ICcnCiAgICAgaWYgYXJncy5mZXRjaHVyaToKKyAgICAgICAgaWYgYXJncy5mZXRjaHVyaS5zdGFydHN3aXRoKCducG06Ly8nKToKKyAgICAgICAgICAgIGVuc3VyZV9ucG0oY29uZmlnLCBiYXNlcGF0aCwgYXJncy5maXhlZF9zZXR1cCkKKwogICAgICAgICBzb3VyY2UgPSBhcmdzLmZldGNodXJpCiAgICAgICAgIGlmIHNyY3RyZWU6CiAgICAgICAgICAgICBleHRyYWNtZG9wdHMgKz0gJyAteCAlcycgJSBzcmN0cmVlCkBAIC0xNDQsMTYgKzE0OCwyOCBAQAogICAgICAgICBleHRyYWNtZG9wdHMgKz0gJyAtLWFsc28tbmF0aXZlJwogICAgIGlmIGFyZ3Muc3JjX3N1YmRpcjoKICAgICAgICAgZXh0cmFjbWRvcHRzICs9ICcgLS1zcmMtc3ViZGlyICIlcyInICUgYXJncy5zcmNfc3ViZGlyCisgICAgaWYgYXJncy5hdXRvcmV2OgorICAgICAgICBleHRyYWNtZG9wdHMgKz0gJyAtYScKIAogICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCiAgICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdGRvdXQsIF8gPSBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAncmVjaXBldG9vbCAtLWNvbG9yPSVzIGNyZWF0ZSAtbyAlcyAiJXMiICVzJyAlIChjb2xvciwgdGVtcGRpciwgc291cmNlLCBleHRyYWNtZG9wdHMpKQotICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5leGl0Y29kZSA9PSAxNToKLSAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0NvdWxkIG5vdCBhdXRvLWRldGVybWluZSByZWNpcGUgbmFtZSwgcGxlYXNlIHNwZWNpZnkgaXQgb24gdGhlIGNvbW1hbmQgbGluZScpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQ29tbWFuZCBcJyVzXCcgZmFpbGVkOlxuJXMnICUgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0ZG91dCwgXyA9IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdyZWNpcGV0b29sIC0tY29sb3I9JXMgY3JlYXRlIC1vICVzICIlcyIgJXMnICUgKGNvbG9yLCB0ZW1wZGlyLCBzb3VyY2UsIGV4dHJhY21kb3B0cykpCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXhpdGNvZGUgPT0gMTQ6CisgICAgICAgICAgICAgICAgICAgICMgRklYTUUgdGhpcyBpcyBhIGhvcnJpYmxlIGhhY2sgdGhhdCBpcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgICAgICAgICAgICAgICMgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGNhbid0IHJ1biBiaXRiYWtlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyBpbnNpZGUgcmVjaXBldG9vbCBzaW5jZSByZWNpcGV0b29sIGtlZXBzIHRpbmZvaWwgYWN0aXZlCisgICAgICAgICAgICAgICAgICAgICMgd2l0aCByZWZlcmVuY2VzIHRvIGl0IHRocm91Z2hvdXQgdGhlIGNvZGUsIHNvIHdlIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgIyB0byBleGl0IG91dCBhbmQgY29tZSBiYWNrIGhlcmUgdG8gZG8gaXQuCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZV9ucG0oY29uZmlnLCBiYXNlcGF0aCwgYXJncy5maXhlZF9zZXR1cCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbGlmIGUuZXhpdGNvZGUgPT0gMTU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQ291bGQgbm90IGF1dG8tZGV0ZXJtaW5lIHJlY2lwZSBuYW1lLCBwbGVhc2Ugc3BlY2lmeSBpdCBvbiB0aGUgY29tbWFuZCBsaW5lJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0NvbW1hbmQgXCclc1wnIGZhaWxlZDpcbiVzJyAlIChlLmNvbW1hbmQsIGUuc3Rkb3V0KSkKKyAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgcmVjaXBlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4odGVtcGRpciwgJyouYmInKSkKICAgICAgICAgaWYgcmVjaXBlczoKQEAgLTIwNSw1NSArMjIxLDU3IEBACiAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIocmVjaXBlZGlyKToKICAgICAgICAgX2FkZF9tZDUoY29uZmlnLCByZWNpcGVuYW1lLCBvcy5wYXRoLmpvaW4ocmVjaXBlZGlyLCBmbikpCiAKLSAgICBpZiBhcmdzLmZldGNodXJpIGFuZCBub3QgYXJncy5ub19naXQ6Ci0gICAgICAgIHNldHVwX2dpdF9yZXBvKHNyY3RyZWUsIGFyZ3MudmVyc2lvbiwgJ2RldnRvb2wnKQotCi0gICAgaW5pdGlhbF9yZXYgPSBOb25lCi0gICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgotICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKLSAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKLQogICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGNvbmZpZ19vbmx5PVRydWUsIGJhc2VwYXRoPWJhc2VwYXRoKQotICAgIHJkID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIE5vbmUsIHRpbmZvaWwuY29uZmlnX2RhdGEpCi0gICAgaWYgbm90IHJkOgotICAgICAgICByZXR1cm4gMQorICAgIHRyeToKKyAgICAgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUodGluZm9pbC5jb29rZXIsIHJlY2lwZWZpbGUsIE5vbmUpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgIHJldHVybiAxCiAKLSAgICBpZiBhcmdzLnNyY19zdWJkaXI6Ci0gICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgYXJncy5zcmNfc3ViZGlyKQorICAgICAgICBpZiBhcmdzLmZldGNodXJpIGFuZCBub3QgYXJncy5ub19naXQ6CisgICAgICAgICAgICBzZXR1cF9naXRfcmVwbyhzcmN0cmVlLCBhcmdzLnZlcnNpb24sICdkZXZ0b29sJywgZD10aW5mb2lsLmNvbmZpZ19kYXRhKQogCi0gICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShhcHBlbmRmaWxlKSkKLSAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBmOgotICAgICAgICBmLndyaXRlKCdpbmhlcml0IGV4dGVybmFsc3JjXG4nKQotICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQyA9ICIlcyJcbicgJSBzcmN0cmVlKQorICAgICAgICBpbml0aWFsX3JldiA9IE5vbmUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgorICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3RyZWUpCisgICAgICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQogCi0gICAgICAgIGJfaXNfcyA9IHVzZV9leHRlcm5hbF9idWlsZChhcmdzLnNhbWVfZGlyLCBhcmdzLm5vX3NhbWVfZGlyLCByZCkKLSAgICAgICAgaWYgYl9pc19zOgotICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTEQgPSAiJXMiXG4nICUgc3JjdHJlZSkKLSAgICAgICAgaWYgaW5pdGlhbF9yZXY6Ci0gICAgICAgICAgICBmLndyaXRlKCdcbiMgaW5pdGlhbF9yZXY6ICVzXG4nICUgaW5pdGlhbF9yZXYpCisgICAgICAgIGlmIGFyZ3Muc3JjX3N1YmRpcjoKKyAgICAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgYXJncy5zcmNfc3ViZGlyKQogCi0gICAgICAgIGlmIGFyZ3MuYmluYXJ5OgotICAgICAgICAgICAgZi53cml0ZSgnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nKQotICAgICAgICAgICAgZi53cml0ZSgnICAgIHJtIC1yZiAke0R9Ly5naXRcbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLWYgJHtEfS9zaW5nbGV0YXNrLmxvY2tcbicpCi0gICAgICAgICAgICBmLndyaXRlKCd9XG4nKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGFwcGVuZGZpbGUpKQorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnaW5oZXJpdCBleHRlcm5hbHNyY1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDID0gIiVzIlxuJyAlIHNyY3RyZWUpCiAKLSAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbnBtJywgcmQpOgotICAgICAgICAgICAgZi53cml0ZSgnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nKQotICAgICAgICAgICAgZi53cml0ZSgnICAgICMgUmVtb3ZlIGZpbGVzIGFkZGVkIHRvIHNvdXJjZSBkaXIgYnkgZGV2dG9vbC9leHRlcm5hbHNyY1xuJykKLSAgICAgICAgICAgIGYud3JpdGUoJyAgICBybSAtZiAke05QTV9JTlNUQUxMRElSfS9zaW5nbGV0YXNrLmxvY2tcbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLXJmICR7TlBNX0lOU1RBTExESVJ9Ly5naXRcbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLXJmICR7TlBNX0lOU1RBTExESVJ9L29lLWxvY2FsLWZpbGVzXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnICAgIGZvciBzeW1saW5rIGluICR7RVhURVJOQUxTUkNfU1lNTElOS1N9IDsgZG9cbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgICAgIHJtIC1mICR7TlBNX0lOU1RBTExESVJ9LyR7c3ltbGluayUlOip9XG4nKQotICAgICAgICAgICAgZi53cml0ZSgnICAgIGRvbmVcbicpCi0gICAgICAgICAgICBmLndyaXRlKCd9XG4nKQorICAgICAgICAgICAgYl9pc19zID0gdXNlX2V4dGVybmFsX2J1aWxkKGFyZ3Muc2FtZV9kaXIsIGFyZ3Mubm9fc2FtZV9kaXIsIHJkKQorICAgICAgICAgICAgaWYgYl9pc19zOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX0JVSUxEID0gIiVzIlxuJyAlIHNyY3RyZWUpCisgICAgICAgICAgICBpZiBpbml0aWFsX3JldjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdcbiMgaW5pdGlhbF9yZXY6ICVzXG4nICUgaW5pdGlhbF9yZXYpCiAKLSAgICBfYWRkX21kNShjb25maWcsIHJlY2lwZW5hbWUsIGFwcGVuZGZpbGUpCisgICAgICAgICAgICBpZiBhcmdzLmJpbmFyeToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgIHJtIC1yZiAke0R9Ly5naXRcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgIHJtIC1mICR7RH0vc2luZ2xldGFzay5sb2NrXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ31cbicpCiAKLSAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY3JlYXRlZDsgZnVydGhlciBlZGl0aW5nIG1heSBiZSByZXF1aXJlZCB0byBtYWtlIGl0IGZ1bGx5IGZ1bmN0aW9uYWwnICUgcmVjaXBlZmlsZSkKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25wbScsIHJkKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgICMgUmVtb3ZlIGZpbGVzIGFkZGVkIHRvIHNvdXJjZSBkaXIgYnkgZGV2dG9vbC9leHRlcm5hbHNyY1xuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLWYgJHtOUE1fSU5TVEFMTERJUn0vc2luZ2xldGFzay5sb2NrXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICBybSAtcmYgJHtOUE1fSU5TVEFMTERJUn0vLmdpdFxuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLXJmICR7TlBNX0lOU1RBTExESVJ9L29lLWxvY2FsLWZpbGVzXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICBmb3Igc3ltbGluayBpbiAke0VYVEVSTkFMU1JDX1NZTUxJTktTfSA7IGRvXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgcm0gLWYgJHtOUE1fSU5TVEFMTERJUn0vJHtzeW1saW5rJSU6Kn1cbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgIGRvbmVcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnfVxuJykKIAotICAgIHRpbmZvaWwuc2h1dGRvd24oKQorICAgICAgICBfYWRkX21kNShjb25maWcsIHJlY2lwZW5hbWUsIGFwcGVuZGZpbGUpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1JlY2lwZSAlcyBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQ7IGZ1cnRoZXIgZWRpdGluZyBtYXkgYmUgcmVxdWlyZWQgdG8gbWFrZSBpdCBmdWxseSBmdW5jdGlvbmFsJyAlIHJlY2lwZWZpbGUpCisKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogICAgIHJldHVybiAwCiAKQEAgLTI2MiwyOCArMjgwLDMwIEBACiAgICAgIiIiQ2hlY2sgaWYgdGhlIHJlY2lwZSBpcyBzdXBwb3J0ZWQgYnkgZGV2dG9vbCIiIgogICAgIGlmIHBuID09ICdwZXJmJzoKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgcGVyZiByZWNpcGUgZG9lcyBub3QgYWN0dWFsbHkgY2hlY2sgb3V0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRodXMgY2Fubm90IGJlIHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGh1cyBjYW5ub3QgYmUgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA0KQogCiAgICAgaWYgcG4gaW4gWydrZXJuZWwtZGV2c3JjJywgJ3BhY2thZ2UtaW5kZXgnXSBvciBwbi5zdGFydHN3aXRoKCdnY2Mtc291cmNlJyk6Ci0gICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuLCA0KQogCiAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGFuIGltYWdlLCBhbmQgdGhlcmVmb3JlIGlzIG5vdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuLCA0KQogCiAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncG9wdWxhdGVfc2RrJywgZCk6CiAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBpcyBhbiBTREssIGFuZCB0aGVyZWZvcmUgaXMgbm90ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4sIDQpCiAKICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKToKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGEgcGFja2FnZWdyb3VwLCBhbmQgdGhlcmVmb3JlIGlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbiwgNCkKIAogICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21ldGEnLCBkKToKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGEgbWV0YS1yZWNpcGUsIGFuZCB0aGVyZWZvcmUgaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuLCA0KQogCiAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnZXh0ZXJuYWxzcmMnLCBkKSBhbmQgZC5nZXRWYXIoJ0VYVEVSTkFMU1JDJywgVHJ1ZSk6CisgICAgICAgICMgTm90IGFuIGluY29tcGF0aWJpbGl0eSBlcnJvciBwZXIgc2UsIHNvIHdlIGRvbid0IHBhc3MgdGhlIGVycm9yIGNvZGUKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJleHRlcm5hbHNyYyBpcyBjdXJyZW50bHkgZW5hYmxlZCBmb3IgdGhlICVzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNpcGUuIFRoaXMgcHJldmVudHMgdGhlIG5vcm1hbCBkb19wYXRjaCB0YXNrICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHdvcmtpbmcuIFlvdSB3aWxsIG5lZWQgdG8gZGlzYWJsZSB0aGlzICIKQEAgLTI5Niw2ICszMTYsMTMgQEAKICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdF9kKQogICAgIHNodXRpbC5tb3ZlKHNyYywgZHN0KQogCitkZWYgX2NvcHlfZmlsZShzcmMsIGRzdCk6CisgICAgIiIiQ29weSBhIGZpbGUuIENyZWF0ZXMgYWxsIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50cyBvZiBkZXN0aW5hdGlvbiBwYXRoLiIiIgorICAgIGRzdF9kID0gb3MucGF0aC5kaXJuYW1lKGRzdCkKKyAgICBpZiBkc3RfZDoKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdF9kKQorICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQorCiBkZWYgX2dpdF9sc190cmVlKHJlcG9kaXIsIHRyZWVpc2g9J0hFQUQnLCByZWN1cnNpdmU9RmFsc2UpOgogICAgICIiIkxpc3QgY29udGVudHMgb2YgYSBnaXQgdHJlZWlzaCIiIgogICAgIGltcG9ydCBiYgpAQCAtMzE5LDcgKzM0Niw3IEBACiAgICAgIyBiZWNvbWVzIGdyZWF0ZXIgdGhhbiB0aGF0LgogICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCiAgICAgcmVjdXJzZSA9IFRydWUgaWYgbGVuKHBhdGguc3BsaXQob3MucGF0aC5zZXApKSA+IDEgZWxzZSBGYWxzZQotICAgIGdpdF9maWxlcyA9IF9naXRfbHNfdHJlZShzcmN0cmVlLCAnSEVBRCcsIHJlY3Vyc2UpLmtleXMoKQorICAgIGdpdF9maWxlcyA9IGxpc3QoX2dpdF9sc190cmVlKHNyY3RyZWUsICdIRUFEJywgcmVjdXJzZSkua2V5cygpKQogICAgIGlmIHBhdGggaW4gZ2l0X2ZpbGVzOgogICAgICAgICBnaXRfZmlsZXMucmVtb3ZlKHBhdGgpCiAgICAgICAgIHJldHVybiBnaXRfZmlsZXMKQEAgLTM0MywxOSArMzcwLDIxIEBACiAgICAgaWYgbm90IHRpbmZvaWw6CiAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgogICAgICAgICByZXR1cm4gMQorICAgIHRyeToKKyAgICAgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgIHJldHVybiAxCiAKLSAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKLSAgICBpZiBub3QgcmQ6Ci0gICAgICAgIHJldHVybiAxCisgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgICAgICBpbml0aWFsX3JldiA9IF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBhcmdzLmtlZXBfdGVtcCwgYXJncy5icmFuY2gsIEZhbHNlLCByZCkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSB0cmVlIGV4dHJhY3RlZCB0byAlcycgJSBzcmN0cmVlKQogCi0gICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCi0gICAgaW5pdGlhbF9yZXYgPSBfZXh0cmFjdF9zb3VyY2Uoc3JjdHJlZSwgYXJncy5rZWVwX3RlbXAsIGFyZ3MuYnJhbmNoLCBGYWxzZSwgcmQpCi0gICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSB0cmVlIGV4dHJhY3RlZCB0byAlcycgJSBzcmN0cmVlKQotCi0gICAgaWYgaW5pdGlhbF9yZXY6Ci0gICAgICAgIHJldHVybiAwCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogZGVmIHN5bmMoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKICAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3N5bmMnIHN1YmNvbW1hbmQiIiIKQEAgLTM2NSwxOSArMzk0LDIxIEBACiAgICAgaWYgbm90IHRpbmZvaWw6CiAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgogICAgICAgICByZXR1cm4gMQorICAgIHRyeToKKyAgICAgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgIHJldHVybiAxCiAKLSAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKLSAgICBpZiBub3QgcmQ6Ci0gICAgICAgIHJldHVybiAxCisgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgICAgICBpbml0aWFsX3JldiA9IF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBhcmdzLmtlZXBfdGVtcCwgYXJncy5icmFuY2gsIFRydWUsIHJkKQorICAgICAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgJXMgc3luY2hyb25pemVkJyAlIHNyY3RyZWUpCiAKLSAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKLSAgICBpbml0aWFsX3JldiA9IF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBhcmdzLmtlZXBfdGVtcCwgYXJncy5icmFuY2gsIFRydWUsIHJkKQotICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSAlcyBzeW5jaHJvbml6ZWQnICUgc3JjdHJlZSkKLQotICAgIGlmIGluaXRpYWxfcmV2OgotICAgICAgICByZXR1cm4gMAotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZmluYWxseToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKIGNsYXNzIEJiVGFza0V4ZWN1dG9yKG9iamVjdCk6CiAgICAgIiIiQ2xhc3MgZm9yIGV4ZWN1dGluZyBiaXRiYWtlIHRhc2tzIGZvciBhIHJlY2lwZQpAQCAtNDExLDcgKzQ0MiwxMCBAQAogCiBjbGFzcyBQYXRjaFRhc2tFeGVjdXRvcihCYlRhc2tFeGVjdXRvcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkYXRhKToKKyAgICAgICAgaW1wb3J0IG9lLnBhdGNoCiAgICAgICAgIHNlbGYuY2hlY2tfZ2l0ID0gRmFsc2UKKyAgICAgICAgc2VsZi51c2Vyb3B0aW9ucyA9IFtdCisgICAgICAgIG9lLnBhdGNoLkdpdEFwcGx5VHJlZS5naXRDb21tYW5kVXNlck9wdGlvbnMoc2VsZi51c2Vyb3B0aW9ucywgZD1yZGF0YSkKICAgICAgICAgc3VwZXIoUGF0Y2hUYXNrRXhlY3V0b3IsIHNlbGYpLl9faW5pdF9fKHJkYXRhKQogCiAgICAgZGVmIGV4ZWNfZnVuYyhzZWxmLCBmdW5jLCByZXBvcnQpOgpAQCAtNDM4LDcgKzQ3Miw3IEBACiAKICAgICAgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXNyY3N1YmRpcikKICAgICAgICAgICAgIGlmIHN0ZG91dDoKLSAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGFkZCAuOyBnaXQgY29tbWl0IC1hIC1tICJDb21taXR0aW5nIGNoYW5nZXMgZnJvbSAlc1xuXG4lcyInICUgKGZ1bmMsIEdpdEFwcGx5VHJlZS5pZ25vcmVfY29tbWl0X3ByZWZpeCArICcgLSBmcm9tICVzJyAlIGZ1bmMpLCBjd2Q9c3Jjc3ViZGlyKQorICAgICAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgYWRkIC47IGdpdCAlcyBjb21taXQgLWEgLW0gIkNvbW1pdHRpbmcgY2hhbmdlcyBmcm9tICVzXG5cbiVzIicgJSAoJyAnLmpvaW4oc2VsZi51c2Vyb3B0aW9ucyksIGZ1bmMsIEdpdEFwcGx5VHJlZS5pZ25vcmVfY29tbWl0X3ByZWZpeCArICcgLSBmcm9tICVzJyAlIGZ1bmMpLCBjd2Q9c3Jjc3ViZGlyKQogCiAKIGRlZiBfcHJlcF9leHRyYWN0X29wZXJhdGlvbihjb25maWcsIGJhc2VwYXRoLCByZWNpcGVuYW1lLCB0aW5mb2lsPU5vbmUpOgpAQCAtNDk2LDcgKzUzMCw3IEBACiAKICAgICAgICAgaWYgJ25vZXhlYycgaW4gKGQuZ2V0VmFyRmxhZ3MoJ2RvX3VucGFjaycsIEZhbHNlKSBvciBbXSk6CiAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaGFzIGRvX3VucGFjayBkaXNhYmxlZCwgdW5hYmxlIHRvICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0cmFjdCBzb3VyY2UiICUgcG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dHJhY3Qgc291cmNlIiAlIHBuLCA0KQogCiAgICAgaWYgbm90IHN5bmM6CiAgICAgICAgICMgUHJlcGFyZSBmb3Igc2h1dGlsLm1vdmUgbGF0ZXIgb24KQEAgLTU0Nyw4ICs1ODEsMTQgQEAKICAgICAgICAgcmVjaXBlX3BhdGNoZXMgPSBbb3MucGF0aC5iYXNlbmFtZShwYXRjaCkgZm9yIHBhdGNoIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhjcmQpXQogICAgICAgICBsb2NhbF9maWxlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfbG9jYWxfZmlsZXMoY3JkKQorCisgICAgICAgICMgSWdub3JlIGxvY2FsIGZpbGVzIHdpdGggc3ViZGlyPXtCUH0KKyAgICAgICAgc3JjYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzcmNzdWJkaXIpCiAgICAgICAgIGxvY2FsX2ZpbGVzID0gW2ZuYW1lIGZvciBmbmFtZSBpbiBsb2NhbF9maWxlcyBpZgotICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya2RpciwgZm5hbWUpKV0KKyAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtkaXIsIGZuYW1lKSkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIChzcmNhYnNwYXRoID09IHdvcmtkaXIgb3Igbm90CisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3b3JrZGlyLCBmbmFtZSkuc3RhcnRzd2l0aChzcmNhYnNwYXRoICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnNlcCkpXQogICAgICAgICBpZiBsb2NhbF9maWxlczoKICAgICAgICAgICAgIGZvciBmbmFtZSBpbiBsb2NhbF9maWxlczoKICAgICAgICAgICAgICAgICBfbW92ZV9maWxlKG9zLnBhdGguam9pbih3b3JrZGlyLCBmbmFtZSksCkBAIC01ODMsNyArNjIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2Vzbid0IHVzZSBhbnkgc291cmNlIG9yIHRoZSBjb3JyZWN0IHNvdXJjZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0b3J5IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIiAlIHBuKQogCi0gICAgICAgIHNldHVwX2dpdF9yZXBvKHNyY3N1YmRpciwgY3JkLmdldFZhcignUFYnLCBUcnVlKSwgZGV2YnJhbmNoKQorICAgICAgICBzZXR1cF9naXRfcmVwbyhzcmNzdWJkaXIsIGNyZC5nZXRWYXIoJ1BWJywgVHJ1ZSksIGRldmJyYW5jaCwgZD1kKQogCiAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmNzdWJkaXIpCiAgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCkBAIC03MDMsMTI4ICs3NDMsMTI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCiAKICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChiYXNlcGF0aD1iYXNlcGF0aCkKLSAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKLSAgICBpZiBub3QgcmQ6Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICBwbiA9IHJkLmdldFZhcignUE4nLCBUcnVlKQotICAgIGlmIHBuICE9IGFyZ3MucmVjaXBlbmFtZToKLSAgICAgICAgbG9nZ2VyLmluZm8oJ01hcHBpbmcgJXMgdG8gJXMnICUgKGFyZ3MucmVjaXBlbmFtZSwgcG4pKQotICAgIGlmIHBuIGluIHdvcmtzcGFjZToKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJyZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyIHdvcmtzcGFjZSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG4pCi0KLSAgICBpZiBhcmdzLnNyY3RyZWU6Ci0gICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQotICAgIGVsc2U6Ci0gICAgICAgIHNyY3RyZWUgPSBnZXRfZGVmYXVsdF9zcmN0cmVlKGNvbmZpZywgcG4pCi0KLSAgICBpZiBhcmdzLm5vX2V4dHJhY3QgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHNyY3RyZWUpOgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIi0tbm8tZXh0cmFjdCBzcGVjaWZpZWQgYW5kIHNvdXJjZSBwYXRoICVzIGRvZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3RyZWUpCi0gICAgaWYgbm90IGFyZ3Mubm9fZXh0cmFjdDoKLSAgICAgICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIHBuLCB0aW5mb2lsKQotICAgICAgICBpZiBub3QgdGluZm9pbDoKLSAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgIHRyeToKKyAgICAgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCByZDoKICAgICAgICAgICAgIHJldHVybiAxCiAKLSAgICByZWNpcGVmaWxlID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKLSAgICBhcHBlbmRmaWxlID0gcmVjaXBlX3RvX2FwcGVuZChyZWNpcGVmaWxlLCBjb25maWcsIGFyZ3Mud2lsZGNhcmQpCi0gICAgaWYgb3MucGF0aC5leGlzdHMoYXBwZW5kZmlsZSk6Ci0gICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQW5vdGhlciB2YXJpYW50IG9mIHJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvcmtzcGFjZSAob25seSBvbmUgdmFyaWFudCBvZiBhIHJlY2lwZSBjYW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnRseSBiZSB3b3JrZWQgb24gYXQgb25jZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAlIHBuKQorICAgICAgICBwbiA9IHJkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBpZiBwbiAhPSBhcmdzLnJlY2lwZW5hbWU6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnTWFwcGluZyAlcyB0byAlcycgJSAoYXJncy5yZWNpcGVuYW1lLCBwbikpCisgICAgICAgIGlmIHBuIGluIHdvcmtzcGFjZToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigicmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbikKIAotICAgIF9jaGVja19jb21wYXRpYmxlX3JlY2lwZShwbiwgcmQpCisgICAgICAgIGlmIGFyZ3Muc3JjdHJlZToKKyAgICAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3JjdHJlZSA9IGdldF9kZWZhdWx0X3NyY3RyZWUoY29uZmlnLCBwbikKIAotICAgIGluaXRpYWxfcmV2ID0gTm9uZQotICAgIGNvbW1pdHMgPSBbXQotICAgIGlmIG5vdCBhcmdzLm5vX2V4dHJhY3Q6Ci0gICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIEZhbHNlLCBhcmdzLmJyYW5jaCwgRmFsc2UsIHJkKQotICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6Ci0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCi0gICAgICAgICMgR2V0IGxpc3Qgb2YgY29tbWl0cyBzaW5jZSB0aGlzIHJldmlzaW9uCi0gICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtbGlzdCAtLXJldmVyc2UgJXMuLkhFQUQnICUgaW5pdGlhbF9yZXYsIGN3ZD1zcmN0cmVlKQotICAgICAgICBjb21taXRzID0gc3Rkb3V0LnNwbGl0KCkKLSAgICBlbHNlOgotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJy5naXQnKSk6Ci0gICAgICAgICAgICAjIENoZWNrIGlmIGl0J3MgYSB0cmVlIHByZXZpb3VzbHkgZXh0cmFjdGVkIGJ5IHVzCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IGJyYW5jaCAtLWNvbnRhaW5zIGRldnRvb2wtYmFzZScsIGN3ZD1zcmN0cmVlKQotICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3I6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gJycKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcqJyk6Ci0gICAgICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgZGV2dG9vbC1iYXNlJywgY3dkPXNyY3RyZWUpCi0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIGlmIGFyZ3Mubm9fZXh0cmFjdCBhbmQgbm90IG9zLnBhdGguaXNkaXIoc3JjdHJlZSk6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIi0tbm8tZXh0cmFjdCBzcGVjaWZpZWQgYW5kIHNvdXJjZSBwYXRoICVzIGRvZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjdHJlZSkKKyAgICAgICAgaWYgbm90IGFyZ3Mubm9fZXh0cmFjdDoKKyAgICAgICAgICAgIHRpbmZvaWwgPSBfcHJlcF9leHRyYWN0X29wZXJhdGlvbihjb25maWcsIGJhc2VwYXRoLCBwbiwgdGluZm9pbCkKKyAgICAgICAgICAgIGlmIG5vdCB0aW5mb2lsOgorICAgICAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgICAgIGFwcGVuZGZpbGUgPSByZWNpcGVfdG9fYXBwZW5kKHJlY2lwZWZpbGUsIGNvbmZpZywgYXJncy53aWxkY2FyZCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwZW5kZmlsZSk6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkFub3RoZXIgdmFyaWFudCBvZiByZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29ya3NwYWNlIChvbmx5IG9uZSB2YXJpYW50IG9mIGEgcmVjaXBlIGNhbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnRseSBiZSB3b3JrZWQgb24gYXQgb25jZSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBwbikKKworICAgICAgICBfY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUocG4sIHJkKQorCisgICAgICAgIGluaXRpYWxfcmV2ID0gTm9uZQorICAgICAgICBjb21taXRzID0gW10KKyAgICAgICAgaWYgbm90IGFyZ3Mubm9fZXh0cmFjdDoKKyAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIEZhbHNlLCBhcmdzLmJyYW5jaCwgRmFsc2UsIHJkKQogICAgICAgICAgICAgaWYgbm90IGluaXRpYWxfcmV2OgotICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlLCBqdXN0IGdyYWIgdGhlIGhlYWQgcmV2aXNpb24KLSAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKLSAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCisgICAgICAgICAgICAjIEdldCBsaXN0IG9mIGNvbW1pdHMgc2luY2UgdGhpcyByZXZpc2lvbgorICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAlcy4uSEVBRCcgJSBpbml0aWFsX3JldiwgY3dkPXNyY3RyZWUpCisgICAgICAgICAgICBjb21taXRzID0gc3Rkb3V0LnNwbGl0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmN0cmVlLCAnLmdpdCcpKToKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGl0J3MgYSB0cmVlIHByZXZpb3VzbHkgZXh0cmFjdGVkIGJ5IHVzCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgYnJhbmNoIC0tY29udGFpbnMgZGV2dG9vbC1iYXNlJywgY3dkPXNyY3RyZWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9ICcnCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcqJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIGRldnRvb2wtYmFzZScsIGN3ZD1zcmN0cmVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlLCBqdXN0IGdyYWIgdGhlIGhlYWQgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3RyZWUpCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCiAKLSAgICAjIENoZWNrIHRoYXQgcmVjaXBlIGlzbid0IHVzaW5nIGEgc2hhcmVkIHdvcmtkaXIKLSAgICBzID0gb3MucGF0aC5hYnNwYXRoKHJkLmdldFZhcignUycsIFRydWUpKQotICAgIHdvcmtkaXIgPSBvcy5wYXRoLmFic3BhdGgocmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkpCi0gICAgaWYgcy5zdGFydHN3aXRoKHdvcmtkaXIpIGFuZCBzICE9IHdvcmtkaXIgYW5kIG9zLnBhdGguZGlybmFtZShzKSAhPSB3b3JrZGlyOgotICAgICAgICAjIEhhbmRsZSBpZiBTIGlzIHNldCB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlCi0gICAgICAgIHNyY3N1YmRpciA9IG9zLnBhdGgucmVscGF0aChzLCB3b3JrZGlyKS5zcGxpdChvcy5zZXAsIDEpWzFdCi0gICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgc3Jjc3ViZGlyKQorICAgICAgICAjIENoZWNrIHRoYXQgcmVjaXBlIGlzbid0IHVzaW5nIGEgc2hhcmVkIHdvcmtkaXIKKyAgICAgICAgcyA9IG9zLnBhdGguYWJzcGF0aChyZC5nZXRWYXIoJ1MnLCBUcnVlKSkKKyAgICAgICAgd29ya2RpciA9IG9zLnBhdGguYWJzcGF0aChyZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSkKKyAgICAgICAgaWYgcy5zdGFydHN3aXRoKHdvcmtkaXIpIGFuZCBzICE9IHdvcmtkaXIgYW5kIG9zLnBhdGguZGlybmFtZShzKSAhPSB3b3JrZGlyOgorICAgICAgICAgICAgIyBIYW5kbGUgaWYgUyBpcyBzZXQgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZQorICAgICAgICAgICAgc3Jjc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHMsIHdvcmtkaXIpLnNwbGl0KG9zLnNlcCwgMSlbMV0KKyAgICAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgc3Jjc3ViZGlyKQogCi0gICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShhcHBlbmRmaWxlKSkKLSAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBmOgotICAgICAgICBmLndyaXRlKCdGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nKQotICAgICAgICAjIExvY2FsIGZpbGVzIGNhbiBiZSBtb2RpZmllZC90cmFja2VkIGluIHNlcGFyYXRlIHN1YmRpciB1bmRlciBzcmN0cmVlCi0gICAgICAgICMgTW9zdGx5IHVzZWZ1bCBmb3IgcGFja2FnZXMgd2l0aCBTICE9IFdPUktESVIKLSAgICAgICAgZi53cml0ZSgnRklMRVNQQVRIX3ByZXBlbmQgOj0gIiVzOiJcbicgJQotICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzcmN0cmVlLCAnb2UtbG9jYWwtZmlsZXMnKSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShhcHBlbmRmaWxlKSkKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicpCisgICAgICAgICAgICAjIExvY2FsIGZpbGVzIGNhbiBiZSBtb2RpZmllZC90cmFja2VkIGluIHNlcGFyYXRlIHN1YmRpciB1bmRlciBzcmN0cmVlCisgICAgICAgICAgICAjIE1vc3RseSB1c2VmdWwgZm9yIHBhY2thZ2VzIHdpdGggUyAhPSBXT1JLRElSCisgICAgICAgICAgICBmLndyaXRlKCdGSUxFU1BBVEhfcHJlcGVuZCA6PSAiJXM6IlxuJyAlCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzcmN0cmVlLCAnb2UtbG9jYWwtZmlsZXMnKSkKIAotICAgICAgICBmLndyaXRlKCdcbmluaGVyaXQgZXh0ZXJuYWxzcmNcbicpCi0gICAgICAgIGYud3JpdGUoJyMgTk9URTogV2UgdXNlIHBuLSBvdmVycmlkZXMgaGVyZSB0byBhdm9pZCBhZmZlY3RpbmcgbXVsdGlwbGUgdmFyaWFudHMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJlY2lwZSB1c2VzIEJCQ0xBU1NFWFRFTkRcbicpCi0gICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX3BuLSVzID0gIiVzIlxuJyAlIChwbiwgc3JjdHJlZSkpCisgICAgICAgICAgICBmLndyaXRlKCdcbmluaGVyaXQgZXh0ZXJuYWxzcmNcbicpCisgICAgICAgICAgICBmLndyaXRlKCcjIE5PVEU6IFdlIHVzZSBwbi0gb3ZlcnJpZGVzIGhlcmUgdG8gYXZvaWQgYWZmZWN0aW5nIG11bHRpcGxlIHZhcmlhbnRzIGluIHRoZSBjYXNlIHdoZXJlIHRoZSByZWNpcGUgdXNlcyBCQkNMQVNTRVhURU5EXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKIAotICAgICAgICBiX2lzX3MgPSB1c2VfZXh0ZXJuYWxfYnVpbGQoYXJncy5zYW1lX2RpciwgYXJncy5ub19zYW1lX2RpciwgcmQpCi0gICAgICAgIGlmIGJfaXNfczoKLSAgICAgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX0JVSUxEX3BuLSVzID0gIiVzIlxuJyAlIChwbiwgc3JjdHJlZSkpCisgICAgICAgICAgICBiX2lzX3MgPSB1c2VfZXh0ZXJuYWxfYnVpbGQoYXJncy5zYW1lX2RpciwgYXJncy5ub19zYW1lX2RpciwgcmQpCisgICAgICAgICAgICBpZiBiX2lzX3M6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTERfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKIAotICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCByZCk6Ci0gICAgICAgICAgICBmLndyaXRlKCdTUkNUUkVFQ09WRVJFRFRBU0tTID0gImRvX3ZhbGlkYXRlX2JyYW5jaGVzIGRvX2tlcm5lbF9jaGVja291dCAnCi0gICAgICAgICAgICAgICAgICAgICdkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2ggZG9fa2VybmVsX2NvbmZpZ21lIGRvX2tlcm5lbF9jb25maWdjaGVjayJcbicpCi0gICAgICAgICAgICBmLndyaXRlKCdcbmRvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7XG4nCi0gICAgICAgICAgICAgICAgICAgICcgICAgY3AgJHtCfS8uY29uZmlnICR7U30vLmNvbmZpZy5iYXNlbGluZVxuJwotICAgICAgICAgICAgICAgICAgICAnICAgIGxuIC1zZlQgJHtCfS8uY29uZmlnICR7U30vLmNvbmZpZy5uZXdcbicKLSAgICAgICAgICAgICAgICAgICAgJ31cbicpCi0gICAgICAgIGlmIGluaXRpYWxfcmV2OgotICAgICAgICAgICAgZi53cml0ZSgnXG4jIGluaXRpYWxfcmV2OiAlc1xuJyAlIGluaXRpYWxfcmV2KQotICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzOgotICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgY29tbWl0OiAlc1xuJyAlIGNvbW1pdCkKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIHJkKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNUUkVFQ09WRVJFRFRBU0tTID0gImRvX3ZhbGlkYXRlX2JyYW5jaGVzIGRvX2tlcm5lbF9jaGVja291dCAnCisgICAgICAgICAgICAgICAgICAgICAgICAnZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX3BhdGNoIGRvX2tlcm5lbF9jb25maWdtZSBkb19rZXJuZWxfY29uZmlnY2hlY2siXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuZG9fY29uZmlndXJlX2FwcGVuZCgpIHtcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICcgICAgY3AgJHtCfS8uY29uZmlnICR7U30vLmNvbmZpZy5iYXNlbGluZVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBsbiAtc2ZUICR7Qn0vLmNvbmZpZyAke1N9Ly5jb25maWcubmV3XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJykKKyAgICAgICAgICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSBpbml0aWFsX3JldikKKyAgICAgICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgY29tbWl0OiAlc1xuJyAlIGNvbW1pdCkKIAotICAgIF9hZGRfbWQ1KGNvbmZpZywgcG4sIGFwcGVuZGZpbGUpCisgICAgICAgIF9hZGRfbWQ1KGNvbmZpZywgcG4sIGFwcGVuZGZpbGUpCiAKLSAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIG5vdyBzZXQgdXAgdG8gYnVpbGQgZnJvbSAlcycgJSAocG4sIHNyY3RyZWUpKQorICAgICAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIG5vdyBzZXQgdXAgdG8gYnVpbGQgZnJvbSAlcycgJSAocG4sIHNyY3RyZWUpKQogCi0gICAgdGluZm9pbC5zaHV0ZG93bigpCisgICAgZmluYWxseToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKICAgICByZXR1cm4gMAogCi1kZWYgX2dldF9wYXRjaHNldF9yZXZzKGFyZ3MsIHNyY3RyZWUsIHJlY2lwZV9wYXRoKToKK2RlZiBfZ2V0X3BhdGNoc2V0X3JldnMoc3JjdHJlZSwgcmVjaXBlX3BhdGgsIGluaXRpYWxfcmV2PU5vbmUpOgogICAgICIiIkdldCBpbml0aWFsIGFuZCB1cGRhdGUgcmV2IG9mIGEgcmVjaXBlLiBUaGVzZSBhcmUgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZQogICAgIHdob2xlIHBhdGNoc2V0IGFuZCBzdGFydCBwb2ludCBmb3IgdGhlIHBhdGNoZXMgdG8gYmUgcmUtZ2VuZXJhdGVkL3VwZGF0ZWQuCiAgICAgIiIiCiAgICAgaW1wb3J0IGJiCiAKLSAgICBpZiBhcmdzLmluaXRpYWxfcmV2OgotICAgICAgICByZXR1cm4gYXJncy5pbml0aWFsX3JldiwgYXJncy5pbml0aWFsX3JldgotCi0gICAgIyBQYXJzZSBpbml0aWFsIHJldiBmcm9tIHJlY2lwZQorICAgICMgUGFyc2UgaW5pdGlhbCByZXYgZnJvbSByZWNpcGUgaWYgbm90IHNwZWNpZmllZAogICAgIGNvbW1pdHMgPSBbXQotICAgIGluaXRpYWxfcmV2ID0gTm9uZQogICAgIHdpdGggb3BlbihyZWNpcGVfcGF0aCwgJ3InKSBhcyBmOgogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjIGluaXRpYWxfcmV2OicpOgotICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gbGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGluaXRpYWxfcmV2OgorICAgICAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKQogICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgY29tbWl0OicpOgogICAgICAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKSkKIApAQCAtODM1LDcgKzg3NCw3IEBACiAgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LWxpc3QgLS1yZXZlcnNlICVzLi5IRUFEJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2LCBjd2Q9c3JjdHJlZSkKICAgICAgICAgbmV3Y29tbWl0cyA9IHN0ZG91dC5zcGxpdCgpCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShtaW4obGVuKGNvbW1pdHMpLCBsZW4obmV3Y29tbWl0cykpKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbihjb21taXRzKSwgbGVuKG5ld2NvbW1pdHMpKSk6CiAgICAgICAgICAgICBpZiBuZXdjb21taXRzW2ldID09IGNvbW1pdHNbaV06CiAgICAgICAgICAgICAgICAgdXBkYXRlX3JldiA9IGNvbW1pdHNbaV0KIApAQCAtODYxLDcgKzkwMCw3IEBACiAgICAgZW50cmllcyA9IFtdCiAgICAgZm9yIGZuYW1lIGluIGZpbGVsaXN0OgogICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZm5hbWUpCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc3JjdXJpKSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzcmN1cmkpKToKICAgICAgICAgICAgIGlmIChzcmN1cmlbaV0uc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZAogICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNyY3VyaVtpXS5zcGxpdCgnOycpWzBdKSA9PSBiYXNlbmFtZSk6CiAgICAgICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoc3JjdXJpW2ldKQpAQCAtODcwLDEwICs5MDksMTAgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgIHJldHVybiBlbnRyaWVzLCByZW1haW5pbmcKIAotZGVmIF9yZW1vdmVfc291cmNlX2ZpbGVzKGFyZ3MsIGZpbGVzLCBkZXN0cGF0aCk6CitkZWYgX3JlbW92ZV9zb3VyY2VfZmlsZXMoYXBwZW5kLCBmaWxlcywgZGVzdHBhdGgpOgogICAgICIiIlVubGluayBleGlzdGluZyBwYXRjaCBmaWxlcyIiIgogICAgIGZvciBwYXRoIGluIGZpbGVzOgotICAgICAgICBpZiBhcmdzLmFwcGVuZDoKKyAgICAgICAgaWYgYXBwZW5kOgogICAgICAgICAgICAgaWYgbm90IGRlc3RwYXRoOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignZGVzdHBhdGggc2hvdWxkIGJlIHNldCBoZXJlJykKICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdHBhdGgsIG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCkBAIC05OTYsNyArMTAzNSw3IEBACiAgICAgICAgIGJiLnByb2Nlc3MucnVuKFsnZ2l0JywgJ2NoZWNrb3V0JywgdHJlZSwgJy0tJywgJy4nXSwgY3dkPXNyY3RyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZGljdChvcy5lbnZpcm9uLCBHSVRfV09SS19UUkVFPWRlc3RkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSVRfSU5ERVhfRklMRT10bXBfaW5kZXgpKQotICAgICAgICBuZXdfc2V0ID0gX2dpdF9sc190cmVlKHNyY3RyZWUsIHRyZWUsIFRydWUpLmtleXMoKQorICAgICAgICBuZXdfc2V0ID0gbGlzdChfZ2l0X2xzX3RyZWUoc3JjdHJlZSwgdHJlZSwgVHJ1ZSkua2V5cygpKQogICAgIGVsaWYgb3MucGF0aC5pc2Rpcihsb2NhbF9maWxlc19kaXIpOgogICAgICAgICAjIElmIG5vdCB0cmFja2VkIGJ5IEdpdCwganVzdCBjb3B5IGZyb20gd29ya2luZyBjb3B5CiAgICAgICAgIG5ld19zZXQgPSBfbHNfdHJlZShvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJ29lLWxvY2FsLWZpbGVzJykpCkBAIC0xMDI2LDE1ICsxMDY1LDQ3IEBACiAgICAgaWYgbmV3X3NldCBpcyBub3QgTm9uZToKICAgICAgICAgZm9yIGZuYW1lIGluIG5ld19zZXQ6CiAgICAgICAgICAgICBpZiBmbmFtZSBpbiBleGlzdGluZ19maWxlczoKLSAgICAgICAgICAgICAgICB1cGRhdGVkW2ZuYW1lXSA9IGV4aXN0aW5nX2ZpbGVzLnBvcChmbmFtZSkKKyAgICAgICAgICAgICAgICBvcmlncGF0aCA9IGV4aXN0aW5nX2ZpbGVzLnBvcChmbmFtZSkKKyAgICAgICAgICAgICAgICB3b3JrcGF0aCA9IG9zLnBhdGguam9pbihsb2NhbF9maWxlc19kaXIsIGZuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBmaWxlY21wLmNtcChvcmlncGF0aCwgd29ya3BhdGgpOgorICAgICAgICAgICAgICAgICAgICB1cGRhdGVkW2ZuYW1lXSA9IG9yaWdwYXRoCiAgICAgICAgICAgICBlbGlmIGZuYW1lICE9ICcuZ2l0aWdub3JlJzoKICAgICAgICAgICAgICAgICBhZGRlZFtmbmFtZV0gPSBOb25lCiAKKyAgICAgICAgd29ya2RpciA9IHJkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgICAgIHMgPSByZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgICAgICBpZiBub3Qgcy5lbmRzd2l0aChvcy5zZXApOgorICAgICAgICAgICAgcyArPSBvcy5zZXAKKworICAgICAgICBpZiB3b3JrZGlyICE9IHM6CisgICAgICAgICAgICAjIEhhbmRsZSBmaWxlcyB3aGVyZSBzdWJkaXI9IHdhcyBzcGVjaWZpZWQKKyAgICAgICAgICAgIGZvciBmbmFtZSBpbiBsaXN0KGV4aXN0aW5nX2ZpbGVzLmtleXMoKSk6CisgICAgICAgICAgICAgICAgIyBGSVhNRSBoYW5kbGUgYm90aCBzdWJkaXIgc3RhcnRpbmcgd2l0aCBCUCBhbmQgbm90PworICAgICAgICAgICAgICAgIGZ3b3JrcGF0aCA9IG9zLnBhdGguam9pbih3b3JrZGlyLCBmbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBmd29ya3BhdGguc3RhcnRzd2l0aChzKToKKyAgICAgICAgICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgb3MucGF0aC5yZWxwYXRoKGZ3b3JrcGF0aCwgcykpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdwYXRoID0gZXhpc3RpbmdfZmlsZXMucG9wKGZuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpbGVjbXAuY21wKG9yaWdwYXRoLCBmcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFtmcGF0aF0gPSBvcmlncGF0aAorCiAgICAgICAgIHJlbW92ZWQgPSBleGlzdGluZ19maWxlcwogICAgIHJldHVybiAodXBkYXRlZCwgYWRkZWQsIHJlbW92ZWQpCiAKIAotZGVmIF91cGRhdGVfcmVjaXBlX3NyY3JldihhcmdzLCBzcmN0cmVlLCByZCwgY29uZmlnX2RhdGEpOgorZGVmIF9kZXRlcm1pbmVfZmlsZXNfZGlyKHJkKToKKyAgICAiIiJEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVzIGRpcmVjdG9yeSBmb3IgYSByZWNpcGUiIiIKKyAgICByZWNpcGVkaXIgPSByZC5nZXRWYXIoJ0ZJTEVfRElSTkFNRScsIFRydWUpCisgICAgZm9yIGVudHJ5IGluIHJkLmdldFZhcignRklMRVNQQVRIJywgVHJ1ZSkuc3BsaXQoJzonKToKKyAgICAgICAgcmVscHRoID0gb3MucGF0aC5yZWxwYXRoKGVudHJ5LCByZWNpcGVkaXIpCisgICAgICAgIGlmIG5vdCBvcy5zZXAgaW4gcmVscHRoOgorICAgICAgICAgICAgIyBPbmUgKG9yIHplcm8pIGxldmVscyBiZWxvdyBvbmx5LCBzbyB3ZSBkb24ndCBwdXQgYW55dGhpbmcgaW4gbWFjaGluZS1zcGVjaWZpYyBkaXJlY3RvcmllcworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihlbnRyeSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5CisgICAgcmV0dXJuIG9zLnBhdGguam9pbihyZWNpcGVkaXIsIHJkLmdldFZhcignQlBOJywgVHJ1ZSkpCisKKworZGVmIF91cGRhdGVfcmVjaXBlX3NyY3JldihzcmN0cmVlLCByZCwgYXBwZW5kbGF5ZXJkaXIsIHdpbGRjYXJkX3ZlcnNpb24sIG5vX3JlbW92ZSk6CiAgICAgIiIiSW1wbGVtZW50IHRoZSAnc3JjcmV2JyBtb2RlIG9mIHVwZGF0ZS1yZWNpcGUiIiIKICAgICBpbXBvcnQgYmIKICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKQEAgLTEwNjMsNyArMTEzNCw3IEBACiAgICAgdHJ5OgogICAgICAgICBsb2NhbF9maWxlc19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj10ZW1wZGlyKQogICAgICAgICB1cGRfZiwgbmV3X2YsIGRlbF9mID0gX2V4cG9ydF9sb2NhbF9maWxlcyhzcmN0cmVlLCByZCwgbG9jYWxfZmlsZXNfZGlyKQotICAgICAgICBpZiBub3QgYXJncy5ub19yZW1vdmU6CisgICAgICAgIGlmIG5vdCBub19yZW1vdmU6CiAgICAgICAgICAgICAjIEZpbmQgbGlzdCBvZiBleGlzdGluZyBwYXRjaGVzIGluIHJlY2lwZSBmaWxlCiAgICAgICAgICAgICBwYXRjaGVzX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXRlbXBkaXIpCiAgICAgICAgICAgICBvbGRfc3JjcmV2ID0gKHJkLmdldFZhcignU1JDUkVWJywgRmFsc2UpIG9yICcnKQpAQCAtMTA3MSwyOSArMTE0MiwzMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGVzX2RpcikKIAogICAgICAgICAgICAgIyBSZW1vdmUgZGVsZXRlZCBsb2NhbCBmaWxlcyBhbmQgIm92ZXJsYXBwaW5nIiBwYXRjaGVzCi0gICAgICAgICAgICByZW1vdmVfZmlsZXMgPSBkZWxfZi52YWx1ZXMoKSArIHVwZF9wLnZhbHVlcygpCisgICAgICAgICAgICByZW1vdmVfZmlsZXMgPSBsaXN0KGRlbF9mLnZhbHVlcygpKSArIGxpc3QodXBkX3AudmFsdWVzKCkpCiAgICAgICAgICAgICBpZiByZW1vdmVfZmlsZXM6CiAgICAgICAgICAgICAgICAgcmVtb3ZlZGVudHJpZXMgPSBfcmVtb3ZlX2ZpbGVfZW50cmllcyhzcmN1cmksIHJlbW92ZV9maWxlcylbMF0KICAgICAgICAgICAgICAgICB1cGRhdGVfc3JjdXJpID0gVHJ1ZQogCi0gICAgICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICBpZiBhcHBlbmRsYXllcmRpcjoKICAgICAgICAgICAgIGZpbGVzID0gZGljdCgob3MucGF0aC5qb2luKGxvY2FsX2ZpbGVzX2Rpciwga2V5KSwgdmFsKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWwgaW4gdXBkX2YuaXRlbXMoKSArIG5ld19mLml0ZW1zKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsIGluIGxpc3QodXBkX2YuaXRlbXMoKSkgKyBsaXN0KG5ld19mLml0ZW1zKCkpKQogICAgICAgICAgICAgcmVtb3ZldmFsdWVzID0ge30KICAgICAgICAgICAgIGlmIHVwZGF0ZV9zcmN1cmk6CiAgICAgICAgICAgICAgICAgcmVtb3ZldmFsdWVzICA9IHsnU1JDX1VSSSc6IHJlbW92ZWRlbnRyaWVzfQogICAgICAgICAgICAgICAgIHBhdGNoZmllbGRzWydTUkNfVVJJJ10gPSAnXFxcbiAgICAnLmpvaW4oc3JjdXJpKQogICAgICAgICAgICAgXywgZGVzdHBhdGggPSBvZS5yZWNpcGV1dGlscy5iYmFwcGVuZF9yZWNpcGUoCi0gICAgICAgICAgICAgICAgICAgIHJkLCBhcmdzLmFwcGVuZCwgZmlsZXMsIHdpbGRjYXJkdmVyPWFyZ3Mud2lsZGNhcmRfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgcmQsIGFwcGVuZGxheWVyZGlyLCBmaWxlcywgd2lsZGNhcmR2ZXI9d2lsZGNhcmRfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgZXh0cmFsaW5lcz1wYXRjaGZpZWxkcywgcmVtb3ZldmFsdWVzPXJlbW92ZXZhbHVlcykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZpbGVzX2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkKLSAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiB1cGRfZi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZpbGVzX2RpciA9IF9kZXRlcm1pbmVfZmlsZXNfZGlyKHJkKQorICAgICAgICAgICAgZm9yIGJhc2VwYXRoLCBwYXRoIGluIHVwZF9mLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZGF0aW5nIGZpbGUgJXMnICUgYmFzZXBhdGgpCi0gICAgICAgICAgICAgICAgX21vdmVfZmlsZShvcy5wYXRoLmpvaW4obG9jYWxfZmlsZXNfZGlyLCBiYXNlcGF0aCksIHBhdGgpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2FicyhiYXNlcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICMgT3JpZ2luYWwgZmlsZSAocHJvYmFibHkgd2l0aCBzdWJkaXIgcG9pbnRpbmcgaW5zaWRlIHNvdXJjZSB0cmVlKQorICAgICAgICAgICAgICAgICAgICAjIHNvIHdlIGRvIG5vdCB3YW50IHRvIG1vdmUgaXQsIGp1c3QgY29weQorICAgICAgICAgICAgICAgICAgICBfY29weV9maWxlKGJhc2VwYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF9tb3ZlX2ZpbGUob3MucGF0aC5qb2luKGxvY2FsX2ZpbGVzX2RpciwgYmFzZXBhdGgpLCBwYXRoKQogICAgICAgICAgICAgICAgIHVwZGF0ZV9zcmN1cmk9IFRydWUKLSAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiBuZXdfZi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiBuZXdfZi5pdGVtcygpOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdBZGRpbmcgbmV3IGZpbGUgJXMnICUgYmFzZXBhdGgpCiAgICAgICAgICAgICAgICAgX21vdmVfZmlsZShvcy5wYXRoLmpvaW4obG9jYWxfZmlsZXNfZGlyLCBiYXNlcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZmlsZXNfZGlyLCBiYXNlcGF0aCkpCkBAIC0xMTA5LDIxICsxMTg0LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICdwb2ludCB0byBhIGdpdCByZXBvc2l0b3J5IHdoZXJlIHlvdSBoYXZlIHB1c2hlZCB5b3VyICcKICAgICAgICAgICAgICAgICAgICAgJ2NoYW5nZXMnKQogCi0gICAgX3JlbW92ZV9zb3VyY2VfZmlsZXMoYXJncywgcmVtb3ZlX2ZpbGVzLCBkZXN0cGF0aCkKKyAgICBfcmVtb3ZlX3NvdXJjZV9maWxlcyhhcHBlbmRsYXllcmRpciwgcmVtb3ZlX2ZpbGVzLCBkZXN0cGF0aCkKICAgICByZXR1cm4gVHJ1ZQogCi1kZWYgX3VwZGF0ZV9yZWNpcGVfcGF0Y2goYXJncywgY29uZmlnLCB3b3Jrc3BhY2UsIHNyY3RyZWUsIHJkLCBjb25maWdfZGF0YSk6CitkZWYgX3VwZGF0ZV9yZWNpcGVfcGF0Y2gocmVjaXBlbmFtZSwgd29ya3NwYWNlLCBzcmN0cmVlLCByZCwgYXBwZW5kbGF5ZXJkaXIsIHdpbGRjYXJkX3ZlcnNpb24sIG5vX3JlbW92ZSwgaW5pdGlhbF9yZXYpOgogICAgICIiIkltcGxlbWVudCB0aGUgJ3BhdGNoJyBtb2RlIG9mIHVwZGF0ZS1yZWNpcGUiIiIKICAgICBpbXBvcnQgYmIKICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKIAogICAgIHJlY2lwZWZpbGUgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQotICAgIGFwcGVuZCA9IHdvcmtzcGFjZVthcmdzLnJlY2lwZW5hbWVdWydiYmFwcGVuZCddCisgICAgYXBwZW5kID0gd29ya3NwYWNlW3JlY2lwZW5hbWVdWydiYmFwcGVuZCddCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFwcGVuZCk6CiAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigndW5hYmxlIHRvIGZpbmQgd29ya3NwYWNlIGJiYXBwZW5kIGZvciByZWNpcGUgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZW5hbWUpCiAKLSAgICBpbml0aWFsX3JldiwgdXBkYXRlX3JldiwgY2hhbmdlZF9yZXZzID0gX2dldF9wYXRjaHNldF9yZXZzKGFyZ3MsIHNyY3RyZWUsIGFwcGVuZCkKKyAgICBpbml0aWFsX3JldiwgdXBkYXRlX3JldiwgY2hhbmdlZF9yZXZzID0gX2dldF9wYXRjaHNldF9yZXZzKHNyY3RyZWUsIGFwcGVuZCwgaW5pdGlhbF9yZXYpCiAgICAgaWYgbm90IGluaXRpYWxfcmV2OgogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGluaXRpYWwgcmV2aXNpb24gLSBwbGVhc2Ugc3BlY2lmeSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXQgd2l0aCAtLWluaXRpYWwtcmV2JykKQEAgLTExMzQsMTMgKzEyMDksMTMgQEAKICAgICAgICAgdXBkX2YsIG5ld19mLCBkZWxfZiA9IF9leHBvcnRfbG9jYWxfZmlsZXMoc3JjdHJlZSwgcmQsIGxvY2FsX2ZpbGVzX2RpcikKIAogICAgICAgICByZW1vdmVfZmlsZXMgPSBbXQotICAgICAgICBpZiBub3QgYXJncy5ub19yZW1vdmU6CisgICAgICAgIGlmIG5vdCBub19yZW1vdmU6CiAgICAgICAgICAgICAjIEdldCBhbGwgcGF0Y2hlcyBmcm9tIHNvdXJjZSB0cmVlIGFuZCBjaGVjayBpZiBhbnkgc2hvdWxkIGJlIHJlbW92ZWQKICAgICAgICAgICAgIGFsbF9wYXRjaGVzX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXRlbXBkaXIpCiAgICAgICAgICAgICB1cGRfcCwgbmV3X3AsIGRlbF9wID0gX2V4cG9ydF9wYXRjaGVzKHNyY3RyZWUsIHJkLCBpbml0aWFsX3JldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3BhdGNoZXNfZGlyKQogICAgICAgICAgICAgIyBSZW1vdmUgZGVsZXRlZCBsb2NhbCBmaWxlcyBhbmQgIHBhdGNoZXMKLSAgICAgICAgICAgIHJlbW92ZV9maWxlcyA9IGRlbF9mLnZhbHVlcygpICsgZGVsX3AudmFsdWVzKCkKKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyA9IGxpc3QoZGVsX2YudmFsdWVzKCkpICsgbGlzdChkZWxfcC52YWx1ZXMoKSkKIAogICAgICAgICAjIEdldCB1cGRhdGVkIHBhdGNoZXMgZnJvbSBzb3VyY2UgdHJlZQogICAgICAgICBwYXRjaGVzX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXRlbXBkaXIpCkBAIC0xMTUwLDExICsxMjI1LDExIEBACiAgICAgICAgIHVwZGF0ZXJlY2lwZSA9IEZhbHNlCiAgICAgICAgIGRlc3RwYXRoID0gTm9uZQogICAgICAgICBzcmN1cmkgPSAocmQuZ2V0VmFyKCdTUkNfVVJJJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCi0gICAgICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICBpZiBhcHBlbmRsYXllcmRpcjoKICAgICAgICAgICAgIGZpbGVzID0gZGljdCgob3MucGF0aC5qb2luKGxvY2FsX2ZpbGVzX2Rpciwga2V5KSwgdmFsKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbCBpbiB1cGRfZi5pdGVtcygpICsgbmV3X2YuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbCBpbiBsaXN0KHVwZF9mLml0ZW1zKCkpICsgbGlzdChuZXdfZi5pdGVtcygpKSkKICAgICAgICAgICAgIGZpbGVzLnVwZGF0ZShkaWN0KChvcy5wYXRoLmpvaW4ocGF0Y2hlc19kaXIsIGtleSksIHZhbCkgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbCBpbiB1cGRfcC5pdGVtcygpICsgbmV3X3AuaXRlbXMoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbCBpbiBsaXN0KHVwZF9wLml0ZW1zKCkpICsgbGlzdChuZXdfcC5pdGVtcygpKSkpCiAgICAgICAgICAgICBpZiBmaWxlcyBvciByZW1vdmVfZmlsZXM6CiAgICAgICAgICAgICAgICAgcmVtb3ZldmFsdWVzID0gTm9uZQogICAgICAgICAgICAgICAgIGlmIHJlbW92ZV9maWxlczoKQEAgLTExNjUsMTcgKzEyNDAsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtIGluIHJlbWFpbmluZ10KICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZXZhbHVlcyA9IHsnU1JDX1VSSSc6IHJlbW92ZWRlbnRyaWVzICsgcmVtYWluaW5nfQogICAgICAgICAgICAgICAgIF8sIGRlc3RwYXRoID0gb2UucmVjaXBldXRpbHMuYmJhcHBlbmRfcmVjaXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZCwgYXJncy5hcHBlbmQsIGZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZCwgYXBwZW5kbGF5ZXJkaXIsIGZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxkY2FyZHZlcj13aWxkY2FyZF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXM9cmVtb3ZldmFsdWVzKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnTm8gcGF0Y2hlcyBvciBsb2NhbCBzb3VyY2UgZmlsZXMgbmVlZGVkIHVwZGF0aW5nJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVXBkYXRlIGV4aXN0aW5nIGZpbGVzCi0gICAgICAgICAgICBmb3IgYmFzZXBhdGgsIHBhdGggaW4gdXBkX2YuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgYmFzZXBhdGgsIHBhdGggaW4gdXBkX2YuaXRlbXMoKToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgZmlsZSAlcycgJSBiYXNlcGF0aCkKLSAgICAgICAgICAgICAgICBfbW92ZV9maWxlKG9zLnBhdGguam9pbihsb2NhbF9maWxlc19kaXIsIGJhc2VwYXRoKSwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGJhc2VwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBPcmlnaW5hbCBmaWxlIChwcm9iYWJseSB3aXRoIHN1YmRpciBwb2ludGluZyBpbnNpZGUgc291cmNlIHRyZWUpCisgICAgICAgICAgICAgICAgICAgICMgc28gd2UgZG8gbm90IHdhbnQgdG8gbW92ZSBpdCwganVzdCBjb3B5CisgICAgICAgICAgICAgICAgICAgIF9jb3B5X2ZpbGUoYmFzZXBhdGgsIHBhdGgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX21vdmVfZmlsZShvcy5wYXRoLmpvaW4obG9jYWxfZmlsZXNfZGlyLCBiYXNlcGF0aCksIHBhdGgpCiAgICAgICAgICAgICAgICAgdXBkYXRlZmlsZXMgPSBUcnVlCi0gICAgICAgICAgICBmb3IgYmFzZXBhdGgsIHBhdGggaW4gdXBkX3AuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgYmFzZXBhdGgsIHBhdGggaW4gdXBkX3AuaXRlbXMoKToKICAgICAgICAgICAgICAgICBwYXRjaGZuID0gb3MucGF0aC5qb2luKHBhdGNoZXNfZGlyLCBiYXNlcGF0aCkKICAgICAgICAgICAgICAgICBpZiBjaGFuZ2VkX3JldnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICMgQXZvaWQgdXBkYXRpbmcgcGF0Y2hlcyB0aGF0IGhhdmUgbm90IGFjdHVhbGx5IGNoYW5nZWQKQEAgLTExODgsMTUgKzEyNjksMTQgQEAKICAgICAgICAgICAgICAgICBfbW92ZV9maWxlKHBhdGNoZm4sIHBhdGgpCiAgICAgICAgICAgICAgICAgdXBkYXRlZmlsZXMgPSBUcnVlCiAgICAgICAgICAgICAjIEFkZCBhbnkgbmV3IGZpbGVzCi0gICAgICAgICAgICBmaWxlc19kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkLmdldFZhcignQlBOJywgVHJ1ZSkpCi0gICAgICAgICAgICBmb3IgYmFzZXBhdGgsIHBhdGggaW4gbmV3X2YuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmaWxlc19kaXIgPSBfZGV0ZXJtaW5lX2ZpbGVzX2RpcihyZCkKKyAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiBuZXdfZi5pdGVtcygpOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdBZGRpbmcgbmV3IGZpbGUgJXMnICUgYmFzZXBhdGgpCiAgICAgICAgICAgICAgICAgX21vdmVfZmlsZShvcy5wYXRoLmpvaW4obG9jYWxfZmlsZXNfZGlyLCBiYXNlcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZmlsZXNfZGlyLCBiYXNlcGF0aCkpCiAgICAgICAgICAgICAgICAgc3JjdXJpLmFwcGVuZCgnZmlsZTovLyVzJyAlIGJhc2VwYXRoKQogICAgICAgICAgICAgICAgIHVwZGF0ZXJlY2lwZSA9IFRydWUKLSAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiBuZXdfcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiBuZXdfcC5pdGVtcygpOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdBZGRpbmcgbmV3IHBhdGNoICVzJyAlIGJhc2VwYXRoKQogICAgICAgICAgICAgICAgIF9tb3ZlX2ZpbGUob3MucGF0aC5qb2luKHBhdGNoZXNfZGlyLCBiYXNlcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZmlsZXNfZGlyLCBiYXNlcGF0aCkpCkBAIC0xMjE2LDcgKzEyOTYsNyBAQAogICAgIGZpbmFsbHk6CiAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKIAotICAgIF9yZW1vdmVfc291cmNlX2ZpbGVzKGFyZ3MsIHJlbW92ZV9maWxlcywgZGVzdHBhdGgpCisgICAgX3JlbW92ZV9zb3VyY2VfZmlsZXMoYXBwZW5kbGF5ZXJkaXIsIHJlbW92ZV9maWxlcywgZGVzdHBhdGgpCiAgICAgcmV0dXJuIFRydWUKIAogZGVmIF9ndWVzc19yZWNpcGVfdXBkYXRlX21vZGUoc3JjdHJlZSwgcmRhdGEpOgpAQCAtMTI0MSw2ICsxMzIxLDE5IEBACiAKICAgICByZXR1cm4gJ3BhdGNoJwogCitkZWYgX3VwZGF0ZV9yZWNpcGUocmVjaXBlbmFtZSwgd29ya3NwYWNlLCByZCwgbW9kZSwgYXBwZW5kbGF5ZXJkaXIsIHdpbGRjYXJkX3ZlcnNpb24sIG5vX3JlbW92ZSwgaW5pdGlhbF9yZXYpOgorICAgIHNyY3RyZWUgPSB3b3Jrc3BhY2VbcmVjaXBlbmFtZV1bJ3NyY3RyZWUnXQorICAgIGlmIG1vZGUgPT0gJ2F1dG8nOgorICAgICAgICBtb2RlID0gX2d1ZXNzX3JlY2lwZV91cGRhdGVfbW9kZShzcmN0cmVlLCByZCkKKworICAgIGlmIG1vZGUgPT0gJ3NyY3Jldic6CisgICAgICAgIHVwZGF0ZWQgPSBfdXBkYXRlX3JlY2lwZV9zcmNyZXYoc3JjdHJlZSwgcmQsIGFwcGVuZGxheWVyZGlyLCB3aWxkY2FyZF92ZXJzaW9uLCBub19yZW1vdmUpCisgICAgZWxpZiBtb2RlID09ICdwYXRjaCc6CisgICAgICAgIHVwZGF0ZWQgPSBfdXBkYXRlX3JlY2lwZV9wYXRjaChyZWNpcGVuYW1lLCB3b3Jrc3BhY2UsIHNyY3RyZWUsIHJkLCBhcHBlbmRsYXllcmRpciwgd2lsZGNhcmRfdmVyc2lvbiwgbm9fcmVtb3ZlLCBpbml0aWFsX3JldikKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ3VwZGF0ZV9yZWNpcGU6IGludmFsaWQgbW9kZSAlcycgJSBtb2RlKQorICAgIHJldHVybiB1cGRhdGVkCisKIGRlZiB1cGRhdGVfcmVjaXBlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CiAgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICd1cGRhdGUtcmVjaXBlJyBzdWJjb21tYW5kIiIiCiAgICAgY2hlY2tfd29ya3NwYWNlX3JlY2lwZSh3b3Jrc3BhY2UsIGFyZ3MucmVjaXBlbmFtZSkKQEAgLTEyNTQsMjggKzEzNDcsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzdGluYXRpb24gbGF5ZXIgIiVzIicgJSBhcmdzLmFwcGVuZCkKIAogICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGJhc2VwYXRoPWJhc2VwYXRoLCB0cmFja2luZz1UcnVlKQorICAgIHRyeToKIAotICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQotICAgIGlmIG5vdCByZDoKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgIHJldHVybiAxCiAKLSAgICBzcmN0cmVlID0gd29ya3NwYWNlW2FyZ3MucmVjaXBlbmFtZV1bJ3NyY3RyZWUnXQotICAgIGlmIGFyZ3MubW9kZSA9PSAnYXV0byc6Ci0gICAgICAgIG1vZGUgPSBfZ3Vlc3NfcmVjaXBlX3VwZGF0ZV9tb2RlKHNyY3RyZWUsIHJkKQotICAgIGVsc2U6Ci0gICAgICAgIG1vZGUgPSBhcmdzLm1vZGUKKyAgICAgICAgdXBkYXRlZCA9IF91cGRhdGVfcmVjaXBlKGFyZ3MucmVjaXBlbmFtZSwgd29ya3NwYWNlLCByZCwgYXJncy5tb2RlLCBhcmdzLmFwcGVuZCwgYXJncy53aWxkY2FyZF92ZXJzaW9uLCBhcmdzLm5vX3JlbW92ZSwgYXJncy5pbml0aWFsX3JldikKIAotICAgIGlmIG1vZGUgPT0gJ3NyY3Jldic6Ci0gICAgICAgIHVwZGF0ZWQgPSBfdXBkYXRlX3JlY2lwZV9zcmNyZXYoYXJncywgc3JjdHJlZSwgcmQsIHRpbmZvaWwuY29uZmlnX2RhdGEpCi0gICAgZWxpZiBtb2RlID09ICdwYXRjaCc6Ci0gICAgICAgIHVwZGF0ZWQgPSBfdXBkYXRlX3JlY2lwZV9wYXRjaChhcmdzLCBjb25maWcsIHdvcmtzcGFjZSwgc3JjdHJlZSwgcmQsIHRpbmZvaWwuY29uZmlnX2RhdGEpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCd1cGRhdGVfcmVjaXBlOiBpbnZhbGlkIG1vZGUgJXMnICUgbW9kZSkKLQotICAgIGlmIHVwZGF0ZWQ6Ci0gICAgICAgIHJmID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKLSAgICAgICAgaWYgcmYuc3RhcnRzd2l0aChjb25maWcud29ya3NwYWNlX3BhdGgpOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1JlY2lwZSBmaWxlICVzIGhhcyBiZWVuIHVwZGF0ZWQgYnV0IGlzIGluc2lkZSB0aGUgd29ya3NwYWNlIC0geW91IHdpbGwgbmVlZCB0byBtb3ZlIGl0IChhbmQgYW55IGFzc29jaWF0ZWQgZmlsZXMgbmV4dCB0byBpdCkgb3V0IHRvIHRoZSBkZXNpcmVkIGxheWVyIGJlZm9yZSB1c2luZyAiZGV2dG9vbCByZXNldCIgaW4gb3JkZXIgdG8ga2VlcCBhbnkgY2hhbmdlcycgJSByZikKKyAgICAgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgICAgIHJmID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHJmLnN0YXJ0c3dpdGgoY29uZmlnLndvcmtzcGFjZV9wYXRoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybignUmVjaXBlIGZpbGUgJXMgaGFzIGJlZW4gdXBkYXRlZCBidXQgaXMgaW5zaWRlIHRoZSB3b3Jrc3BhY2UgLSB5b3Ugd2lsbCBuZWVkIHRvIG1vdmUgaXQgKGFuZCBhbnkgYXNzb2NpYXRlZCBmaWxlcyBuZXh0IHRvIGl0KSBvdXQgdG8gdGhlIGRlc2lyZWQgbGF5ZXIgYmVmb3JlIHVzaW5nICJkZXZ0b29sIHJlc2V0IiBpbiBvcmRlciB0byBrZWVwIGFueSBjaGFuZ2VzJyAlIHJmKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogCiAgICAgcmV0dXJuIDAKIApAQCAtMTI4Myw3ICsxMzY4LDcgQEAKIGRlZiBzdGF0dXMoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKICAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3N0YXR1cycgc3ViY29tbWFuZCIiIgogICAgIGlmIHdvcmtzcGFjZToKLSAgICAgICAgZm9yIHJlY2lwZSwgdmFsdWUgaW4gd29ya3NwYWNlLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgcmVjaXBlLCB2YWx1ZSBpbiB3b3Jrc3BhY2UuaXRlbXMoKToKICAgICAgICAgICAgIHJlY2lwZWZpbGUgPSB2YWx1ZVsncmVjaXBlZmlsZSddCiAgICAgICAgICAgICBpZiByZWNpcGVmaWxlOgogICAgICAgICAgICAgICAgIHJlY2lwZXN0ciA9ICcgKCVzKScgJSByZWNpcGVmaWxlCkBAIC0xMjk1LDIzICsxMzgwLDEwIEBACiAgICAgcmV0dXJuIDAKIAogCi1kZWYgcmVzZXQoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKLSAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3Jlc2V0JyBzdWJjb21tYW5kIiIiCi0gICAgaW1wb3J0IGJiCi0gICAgaWYgYXJncy5yZWNpcGVuYW1lOgotICAgICAgICBpZiBhcmdzLmFsbDoKLSAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiUmVjaXBlIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgLWEvLS1hbGwgaXMgdXNlZCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjaGVja193b3Jrc3BhY2VfcmVjaXBlKHdvcmtzcGFjZSwgYXJncy5yZWNpcGVuYW1lLCBjaGVja3NyYz1GYWxzZSkKLSAgICBlbGlmIG5vdCBhcmdzLmFsbDoKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJSZWNpcGUgbXVzdCBiZSBzcGVjaWZpZWQsIG9yIHNwZWNpZnkgLWEvLS1hbGwgdG8gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc2V0IGFsbCByZWNpcGVzIikKLSAgICBpZiBhcmdzLmFsbDoKLSAgICAgICAgcmVjaXBlcyA9IHdvcmtzcGFjZS5rZXlzKCkKLSAgICBlbHNlOgotICAgICAgICByZWNpcGVzID0gW2FyZ3MucmVjaXBlbmFtZV0KK2RlZiBfcmVzZXQocmVjaXBlcywgbm9fY2xlYW4sIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiUmVzZXQgb25lIG9yIG1vcmUgcmVjaXBlcyIiIgogCi0gICAgaWYgcmVjaXBlcyBhbmQgbm90IGFyZ3Mubm9fY2xlYW46CisgICAgaWYgcmVjaXBlcyBhbmQgbm90IG5vX2NsZWFuOgogICAgICAgICBpZiBsZW4ocmVjaXBlcykgPT0gMToKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDbGVhbmluZyBzeXNyb290IGZvciByZWNpcGUgJXMuLi4nICUgcmVjaXBlc1swXSkKICAgICAgICAgZWxzZToKQEAgLTEzMjMsNyArMTM5NSw3IEBACiAgICAgICAgIGZvciByZWNpcGUgaW4gcmVjaXBlczoKICAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHJlY2lwZSkKICAgICAgICAgICAgIHJlY2lwZWZpbGUgPSB3b3Jrc3BhY2VbcmVjaXBlXVsncmVjaXBlZmlsZSddCi0gICAgICAgICAgICBpZiByZWNpcGVmaWxlOgorICAgICAgICAgICAgaWYgcmVjaXBlZmlsZSBhbmQgb3MucGF0aC5leGlzdHMocmVjaXBlZmlsZSk6CiAgICAgICAgICAgICAgICAgdGFyZ2V0cy5leHRlbmQoZ2V0X2JiY2xhc3NleHRlbmRfdGFyZ2V0cyhyZWNpcGVmaWxlLCByZWNpcGUpKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAnYml0YmFrZSAtYyBjbGVhbiAlcycgJSAnICcuam9pbih0YXJnZXRzKSkKQEAgLTEzNjMsNiArMTQzNSwxMjYgQEAKICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdW5saWtlbHksIGJ1dCBpZiBpdCdzIGVtcHR5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdAogICAgICAgICAgICAgICAgIG9zLnJtZGlyKHNyY3RyZWUpCiAKKworZGVmIHJlc2V0KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdyZXNldCcgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorICAgIGlmIGFyZ3MucmVjaXBlbmFtZToKKyAgICAgICAgaWYgYXJncy5hbGw6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlJlY2lwZSBjYW5ub3QgYmUgc3BlY2lmaWVkIGlmIC1hLy0tYWxsIGlzIHVzZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJlY2lwZSBpbiBhcmdzLnJlY2lwZW5hbWU6CisgICAgICAgICAgICAgICAgY2hlY2tfd29ya3NwYWNlX3JlY2lwZSh3b3Jrc3BhY2UsIHJlY2lwZSwgY2hlY2tzcmM9RmFsc2UpCisgICAgZWxpZiBub3QgYXJncy5hbGw6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiUmVjaXBlIG11c3QgYmUgc3BlY2lmaWVkLCBvciBzcGVjaWZ5IC1hLy0tYWxsIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNldCBhbGwgcmVjaXBlcyIpCisgICAgaWYgYXJncy5hbGw6CisgICAgICAgIHJlY2lwZXMgPSBsaXN0KHdvcmtzcGFjZS5rZXlzKCkpCisgICAgZWxzZToKKyAgICAgICAgcmVjaXBlcyA9IGFyZ3MucmVjaXBlbmFtZQorCisgICAgX3Jlc2V0KHJlY2lwZXMsIGFyZ3Mubm9fY2xlYW4sIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSkKKworICAgIHJldHVybiAwCisKKworZGVmIF9nZXRfbGF5ZXIobGF5ZXJuYW1lLCBkKToKKyAgICAiIiJEZXRlcm1pbmUgdGhlIGJhc2UgbGF5ZXIgcGF0aCBmb3IgdGhlIHNwZWNpZmllZCBsYXllciBuYW1lL3BhdGgiIiIKKyAgICBsYXllcmRpcnMgPSBkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKS5zcGxpdCgpCisgICAgbGF5ZXJzID0ge29zLnBhdGguYmFzZW5hbWUocCk6IHAgZm9yIHAgaW4gbGF5ZXJkaXJzfQorICAgICMgUHJvdmlkZSBzb21lIHNob3J0Y3V0cworICAgIGlmIGxheWVybmFtZS5sb3dlcigpIGluIFsnb2UtY29yZScsICdvcGVuZW1iZWRkZWQtY29yZSddOgorICAgICAgICBsYXllcmRpciA9IGxheWVycy5nZXQoJ21ldGEnLCBOb25lKQorICAgIGVsc2U6CisgICAgICAgIGxheWVyZGlyID0gbGF5ZXJzLmdldChsYXllcm5hbWUsIE5vbmUpCisgICAgaWYgbGF5ZXJkaXI6CisgICAgICAgIGxheWVyZGlyID0gb3MucGF0aC5hYnNwYXRoKGxheWVyZGlyKQorICAgIHJldHVybiBsYXllcmRpciBvciBsYXllcm5hbWUKKworZGVmIGZpbmlzaChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZmluaXNoJyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IGJiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBjaGVja193b3Jrc3BhY2VfcmVjaXBlKHdvcmtzcGFjZSwgYXJncy5yZWNpcGVuYW1lKQorCisgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgsIHRyYWNraW5nPVRydWUpCisgICAgdHJ5OgorICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHJkOgorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBkZXN0bGF5ZXJkaXIgPSBfZ2V0X2xheWVyKGFyZ3MuZGVzdGluYXRpb24sIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIG9yaWdsYXllcmRpciA9IG9lLnJlY2lwZXV0aWxzLmZpbmRfbGF5ZXJkaXIocmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGVzdGxheWVyZGlyKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVW5hYmxlIHRvIGZpbmQgbGF5ZXIgb3IgZGlyZWN0b3J5IG1hdGNoaW5nICIlcyInICUgYXJncy5kZXN0aW5hdGlvbikKKworICAgICAgICBpZiBvcy5wYXRoLmFic3BhdGgoZGVzdGxheWVyZGlyKSA9PSBjb25maWcud29ya3NwYWNlX3BhdGg6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJyIlcyIgc3BlY2lmaWVzIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGRlc3RpbmF0aW9uJyAlIGFyZ3MuZGVzdGluYXRpb24pCisKKyAgICAgICAgIyBJZiBpdCdzIGFuIHVwZ3JhZGUsIGdyYWIgdGhlIG9yaWdpbmFsIHBhdGgKKyAgICAgICAgb3JpZ3BhdGggPSBOb25lCisgICAgICAgIG9yaWdmaWxlbGlzdCA9IE5vbmUKKyAgICAgICAgYXBwZW5kID0gd29ya3NwYWNlW2FyZ3MucmVjaXBlbmFtZV1bJ2JiYXBwZW5kJ10KKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgb3JpZ2luYWxfcGF0aDonKToKKyAgICAgICAgICAgICAgICAgICAgb3JpZ3BhdGggPSBsaW5lLnNwbGl0KCc6JylbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcjIG9yaWdpbmFsX2ZpbGVzOicpOgorICAgICAgICAgICAgICAgICAgICBvcmlnZmlsZWxpc3QgPSBsaW5lLnNwbGl0KCc6JylbMV0uc3BsaXQoKQorCisgICAgICAgIGlmIG9yaWdsYXllcmRpciA9PSBjb25maWcud29ya3NwYWNlX3BhdGg6CisgICAgICAgICAgICAjIFJlY2lwZSBmaWxlIGl0c2VsZiBpcyBpbiB3b3Jrc3BhY2UsIHVwZGF0ZSBpdCB0aGVyZSBmaXJzdAorICAgICAgICAgICAgYXBwZW5kbGF5ZXJkaXIgPSBOb25lCisgICAgICAgICAgICBvcmlncmVscGF0aCA9IE5vbmUKKyAgICAgICAgICAgIGlmIG9yaWdwYXRoOgorICAgICAgICAgICAgICAgIG9yaWdsYXllcnBhdGggPSBvZS5yZWNpcGV1dGlscy5maW5kX2xheWVyZGlyKG9yaWdwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9yaWdsYXllcnBhdGg6CisgICAgICAgICAgICAgICAgICAgIG9yaWdyZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKG9yaWdwYXRoLCBvcmlnbGF5ZXJwYXRoKQorICAgICAgICAgICAgZGVzdHBhdGggPSBvZS5yZWNpcGV1dGlscy5nZXRfYmJmaWxlX3BhdGgocmQsIGRlc3RsYXllcmRpciwgb3JpZ3JlbHBhdGgpCisgICAgICAgICAgICBpZiBub3QgZGVzdHBhdGg6CisgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlc3RpbmF0aW9uIGxheWVyIHBhdGggLSBjaGVjayB0aGF0ICVzIHNwZWNpZmllcyBhbiBhY3R1YWwgbGF5ZXIgYW5kICVzL2NvbmYvbGF5ZXIuY29uZiBzcGVjaWZpZXMgQkJGSUxFUy4gWW91IG1heSBhbHNvIG5lZWQgdG8gc3BlY2lmeSBhIG1vcmUgY29tcGxldGUgcGF0aC4iICUgKGFyZ3MuZGVzdGluYXRpb24sIGRlc3RsYXllcmRpcikpCisgICAgICAgIGVsaWYgZGVzdGxheWVyZGlyID09IG9yaWdsYXllcmRpcjoKKyAgICAgICAgICAgICMgU2FtZSBsYXllciwgdXBkYXRlIHRoZSBvcmlnaW5hbCByZWNpcGUKKyAgICAgICAgICAgIGFwcGVuZGxheWVyZGlyID0gTm9uZQorICAgICAgICAgICAgZGVzdHBhdGggPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIENyZWF0ZS91cGRhdGUgYSBiYmFwcGVuZCBpbiB0aGUgc3BlY2lmaWVkIGxheWVyCisgICAgICAgICAgICBhcHBlbmRsYXllcmRpciA9IGRlc3RsYXllcmRpcgorICAgICAgICAgICAgZGVzdHBhdGggPSBOb25lCisKKyAgICAgICAgIyBSZW1vdmUgYW55IG9sZCBmaWxlcyBpbiB0aGUgY2FzZSBvZiBhbiB1cGdyYWRlCisgICAgICAgIGlmIG9yaWdwYXRoIGFuZCBvcmlnZmlsZWxpc3QgYW5kIG9lLnJlY2lwZXV0aWxzLmZpbmRfbGF5ZXJkaXIob3JpZ3BhdGgpID09IG9lLnJlY2lwZXV0aWxzLmZpbmRfbGF5ZXJkaXIoZGVzdGxheWVyZGlyKToKKyAgICAgICAgICAgIGZvciBmbiBpbiBvcmlnZmlsZWxpc3Q6CisgICAgICAgICAgICAgICAgZm5wID0gb3MucGF0aC5qb2luKG9yaWdwYXRoLCBmbikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbnApCisgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBBY3R1YWxseSB1cGRhdGUgdGhlIHJlY2lwZSAvIGJiYXBwZW5kCisgICAgICAgIF91cGRhdGVfcmVjaXBlKGFyZ3MucmVjaXBlbmFtZSwgd29ya3NwYWNlLCByZCwgYXJncy5tb2RlLCBhcHBlbmRsYXllcmRpciwgd2lsZGNhcmRfdmVyc2lvbj1UcnVlLCBub19yZW1vdmU9RmFsc2UsIGluaXRpYWxfcmV2PWFyZ3MuaW5pdGlhbF9yZXYpCisKKyAgICAgICAgaWYgb3JpZ2xheWVyZGlyID09IGNvbmZpZy53b3Jrc3BhY2VfcGF0aCBhbmQgZGVzdHBhdGg6CisgICAgICAgICAgICAjIFJlY2lwZSBmaWxlIGl0c2VsZiBpcyBpbiB0aGUgd29ya3NwYWNlIC0gbmVlZCB0byBtb3ZlIGl0IGFuZCBhbnkKKyAgICAgICAgICAgICMgYXNzb2NpYXRlZCBmaWxlcyB0byB0aGUgc3BlY2lmaWVkIGxheWVyCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnTW92aW5nIHJlY2lwZSBmaWxlIHRvICVzJyAlIGRlc3RwYXRoKQorICAgICAgICAgICAgcmVjaXBlZGlyID0gb3MucGF0aC5kaXJuYW1lKHJkLmdldFZhcignRklMRScsIFRydWUpKQorICAgICAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsocmVjaXBlZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZm4pCisgICAgICAgICAgICAgICAgICAgIHJlbHB0aCA9IG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUoc3JjcGF0aCksIHJlY2lwZWRpcikKKyAgICAgICAgICAgICAgICAgICAgZGVzdGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oZGVzdHBhdGgsIHJlbHB0aCkpCisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShzcmNwYXRoLCBvcy5wYXRoLmpvaW4oZGVzdGRpciwgZm4pKQorCisgICAgZmluYWxseToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisKKyAgICAjIEV2ZXJ5dGhpbmcgZWxzZSBoYXMgc3VjY2VlZGVkLCB3ZSBjYW4gbm93IHJlc2V0CisgICAgX3Jlc2V0KFthcmdzLnJlY2lwZW5hbWVdLCBub19jbGVhbj1GYWxzZSwgY29uZmlnPWNvbmZpZywgYmFzZXBhdGg9YmFzZXBhdGgsIHdvcmtzcGFjZT13b3Jrc3BhY2UpCisKICAgICByZXR1cm4gMAogCiAKQEAgLTEzOTAsMTAgKzE1ODIsMTEgQEAKICAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS1mZXRjaCcsICctZicsIGhlbHA9J0ZldGNoIHRoZSBzcGVjaWZpZWQgVVJJIGFuZCBleHRyYWN0IGl0IHRvIGNyZWF0ZSB0aGUgc291cmNlIHRyZWUgKGRlcHJlY2F0ZWQgLSBwYXNzIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgaW5zdGVhZCknLCBtZXRhdmFyPSdVUkknKQogICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCAnLVYnLCBoZWxwPSdWZXJzaW9uIHRvIHVzZSB3aXRoaW4gcmVjaXBlIChQViknKQogICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLW5vLWdpdCcsICctZycsIGhlbHA9J0lmIGZldGNoaW5nIHNvdXJjZSwgZG8gbm90IHNldCB1cCBzb3VyY2UgdHJlZSBhcyBhIGdpdCByZXBvc2l0b3J5JywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS1hdXRvcmV2JywgJy1hJywgaGVscD0nV2hlbiBmZXRjaGluZyBmcm9tIGEgZ2l0IHJlcG9zaXRvcnksIHNldCBTUkNSRVYgaW4gdGhlIHJlY2lwZSB0byBhIGZsb2F0aW5nIHJldmlzaW9uIGluc3RlYWQgb2YgZml4ZWQnLCBhY3Rpb249InN0b3JlX3RydWUiKQogICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWJpbmFyeScsICctYicsIGhlbHA9J1RyZWF0IHRoZSBzb3VyY2UgdHJlZSBhcyBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIHZlcmJhdGltIChubyBjb21waWxhdGlvbiwgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlKS4gVXNlZnVsIHdpdGggYmluYXJ5IHBhY2thZ2VzIGUuZy4gUlBNcy4nLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWFsc28tbmF0aXZlJywgaGVscD0nQWxzbyBhZGQgbmF0aXZlIHZhcmlhbnQgKGkuZS4gc3VwcG9ydCBidWlsZGluZyByZWNpcGUgZm9yIHRoZSBidWlsZCBob3N0IGFzIHdlbGwgYXMgdGhlIHRhcmdldCBtYWNoaW5lKScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tc3JjLXN1YmRpcicsIGhlbHA9J1NwZWNpZnkgc3ViZGlyZWN0b3J5IHdpdGhpbiBzb3VyY2UgdHJlZSB0byB1c2UnLCBtZXRhdmFyPSdTVUJESVInKQotICAgIHBhcnNlcl9hZGQuc2V0X2RlZmF1bHRzKGZ1bmM9YWRkKQorICAgIHBhcnNlcl9hZGQuc2V0X2RlZmF1bHRzKGZ1bmM9YWRkLCBmaXhlZF9zZXR1cD1jb250ZXh0LmZpeGVkX3NldHVwKQogCiAgICAgcGFyc2VyX21vZGlmeSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbW9kaWZ5JywgaGVscD0nTW9kaWZ5IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nU2V0cyB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gbW9kaWZ5IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZS4gVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGV4dHJhY3QgdGhlIHNvdXJjZSBiZWluZyBmZXRjaGVkIGJ5IHRoZSByZWNpcGUgaW50byBhIGdpdCB0cmVlIHNvIHlvdSBjYW4gd29yayBvbiBpdDsgYWx0ZXJuYXRpdmVseSBpZiB5b3UgYWxyZWFkeSBoYXZlIHlvdXIgb3duIHByZS1wcmVwYXJlZCBzb3VyY2UgdHJlZSB5b3UgY2FuIHNwZWNpZnkgLW4vLS1uby1leHRyYWN0LicsCkBAIC0xNDQ2LDkgKzE2MzksMTggQEAKICAgICBwYXJzZXJfc3RhdHVzLnNldF9kZWZhdWx0cyhmdW5jPXN0YXR1cykKIAogICAgIHBhcnNlcl9yZXNldCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigncmVzZXQnLCBoZWxwPSdSZW1vdmUgYSByZWNpcGUgZnJvbSB5b3VyIHdvcmtzcGFjZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcmVjaXBlIGZyb20geW91ciB3b3Jrc3BhY2UgKHJlc2V0dGluZyBpdHMgc3RhdGUpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1JlbW92ZXMgdGhlIHNwZWNpZmllZCByZWNpcGUocykgZnJvbSB5b3VyIHdvcmtzcGFjZSAocmVzZXR0aW5nIGl0cyBzdGF0ZSBiYWNrIHRvIHRoYXQgZGVmaW5lZCBieSB0aGUgbWV0YWRhdGEpLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPSd3b3JraW5nJywgb3JkZXI9LTEwMCkKLSAgICBwYXJzZXJfcmVzZXQuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgbmFyZ3M9Jz8nLCBoZWxwPSdSZWNpcGUgdG8gcmVzZXQnKQorICAgIHBhcnNlcl9yZXNldC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBuYXJncz0nKicsIGhlbHA9J1JlY2lwZSB0byByZXNldCcpCiAgICAgcGFyc2VyX3Jlc2V0LmFkZF9hcmd1bWVudCgnLS1hbGwnLCAnLWEnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdSZXNldCBhbGwgcmVjaXBlcyAoY2xlYXIgd29ya3NwYWNlKScpCiAgICAgcGFyc2VyX3Jlc2V0LmFkZF9hcmd1bWVudCgnLS1uby1jbGVhbicsICctbicsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0RvblwndCBjbGVhbiB0aGUgc3lzcm9vdCB0byByZW1vdmUgcmVjaXBlIG91dHB1dCcpCiAgICAgcGFyc2VyX3Jlc2V0LnNldF9kZWZhdWx0cyhmdW5jPXJlc2V0KQorCisgICAgcGFyc2VyX2ZpbmlzaCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZmluaXNoJywgaGVscD0nRmluaXNoIHdvcmtpbmcgb24gYSByZWNpcGUgaW4geW91ciB3b3Jrc3BhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nUHVzaGVzIGFueSBjb21taXR0ZWQgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIHJlY2lwZSB0byB0aGUgc3BlY2lmaWVkIGxheWVyIGFuZCByZW1vdmVzIGl0IGZyb20geW91ciB3b3Jrc3BhY2UuIFJvdWdobHkgZXF1aXZhbGVudCB0byBhbiB1cGRhdGUtcmVjaXBlIGZvbGxvd2VkIGJ5IHJlc2V0LCBleGNlcHQgdGhlIHVwZGF0ZS1yZWNpcGUgc3RlcCB3aWxsIGRvIHRoZSAicmlnaHQgdGhpbmciIGRlcGVuZGluZyBvbiB0aGUgcmVjaXBlIGFuZCB0aGUgZGVzdGluYXRpb24gbGF5ZXIgc3BlY2lmaWVkLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPSd3b3JraW5nJywgb3JkZXI9LTEwMCkKKyAgICBwYXJzZXJfZmluaXNoLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J1JlY2lwZSB0byBmaW5pc2gnKQorICAgIHBhcnNlcl9maW5pc2guYWRkX2FyZ3VtZW50KCdkZXN0aW5hdGlvbicsIGhlbHA9J0xheWVyL3BhdGggdG8gcHV0IHJlY2lwZSBpbnRvLiBDYW4gYmUgdGhlIG5hbWUgb2YgYSBsYXllciBjb25maWd1cmVkIGluIHlvdXIgYmJsYXllcnMuY29uZiwgdGhlIHBhdGggdG8gdGhlIGJhc2Ugb2YgYSBsYXllciwgb3IgYSBwYXJ0aWFsIHBhdGggaW5zaWRlIGEgbGF5ZXIuICUocHJvZylzIHdpbGwgYXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgcGF0aCBiYXNlZCBvbiB0aGUgbGF5ZXJcJ3Mgc3RydWN0dXJlLicpCisgICAgcGFyc2VyX2ZpbmlzaC5hZGRfYXJndW1lbnQoJy0tbW9kZScsICctbScsIGNob2ljZXM9WydwYXRjaCcsICdzcmNyZXYnLCAnYXV0byddLCBkZWZhdWx0PSdhdXRvJywgaGVscD0nVXBkYXRlIG1vZGUgKHdoZXJlICUobWV0YXZhcilzIGlzICUoY2hvaWNlcylzOyBkZWZhdWx0IGlzICUoZGVmYXVsdClzKScsIG1ldGF2YXI9J01PREUnKQorICAgIHBhcnNlcl9maW5pc2guYWRkX2FyZ3VtZW50KCctLWluaXRpYWwtcmV2JywgaGVscD0nT3ZlcnJpZGUgc3RhcnRpbmcgcmV2aXNpb24gZm9yIHBhdGNoZXMnKQorICAgIHBhcnNlcl9maW5pc2guc2V0X2RlZmF1bHRzKGZ1bmM9ZmluaXNoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvdXBncmFkZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3VwZ3JhZGUucHkKaW5kZXggYTA4NWY3OC4uYTQyMzlmMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvdXBncmFkZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5CkBAIC03MCwxOCArNzAsMjYgQEAKIGRlZiBfcmVjaXBlX2NvbnRhaW5zKHJkLCB2YXIpOgogICAgIHJmID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKICAgICB2YXJmaWxlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF92YXJfZmlsZXMocmYsIFt2YXJdLCByZCkKLSAgICBmb3IgdmFyLCBmbiBpbiB2YXJmaWxlcy5pdGVyaXRlbXMoKToKKyAgICBmb3IgdmFyLCBmbiBpbiB2YXJmaWxlcy5pdGVtcygpOgogICAgICAgICBpZiBmbiBhbmQgZm4uc3RhcnRzd2l0aChvcy5wYXRoLmRpcm5hbWUocmYpICsgb3Muc2VwKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgcmV0dXJuIEZhbHNlCiAKIGRlZiBfcmVuYW1lX3JlY2lwZV9kaXJzKG9sZHB2LCBuZXdwdiwgcGF0aCk6CiAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICMgUmVuYW1lIGRpcmVjdG9yaWVzIHdpdGggdGhlIHZlcnNpb24gaW4gdGhlaXIgbmFtZQogICAgICAgICBmb3Igb2xkZGlyIGluIGRpcnM6CiAgICAgICAgICAgICBpZiBvbGRkaXIuZmluZChvbGRwdikgIT0gLTE6CiAgICAgICAgICAgICAgICAgbmV3ZGlyID0gb2xkZGlyLnJlcGxhY2Uob2xkcHYsIG5ld3B2KQogICAgICAgICAgICAgICAgIGlmIG9sZGRpciAhPSBuZXdkaXI6CiAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKG9zLnBhdGguam9pbihwYXRoLCBvbGRkaXIpLCBvcy5wYXRoLmpvaW4ocGF0aCwgbmV3ZGlyKSkKKyAgICAgICAgIyBSZW5hbWUgYW55IGluYyBmaWxlcyB3aXRoIHRoZSB2ZXJzaW9uIGluIHRoZWlyIG5hbWUgKHVudXN1YWwsIGJ1dCBwb3NzaWJsZSkKKyAgICAgICAgZm9yIG9sZGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBvbGRmaWxlLmVuZHN3aXRoKCcuaW5jJyk6CisgICAgICAgICAgICAgICAgaWYgb2xkZmlsZS5maW5kKG9sZHB2KSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgbmV3ZmlsZSA9IG9sZGZpbGUucmVwbGFjZShvbGRwdiwgbmV3cHYpCisgICAgICAgICAgICAgICAgICAgIGlmIG9sZGZpbGUgIT0gbmV3ZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShvcy5wYXRoLmpvaW4ocGF0aCwgb2xkZmlsZSksIG9zLnBhdGguam9pbihwYXRoLCBuZXdmaWxlKSkKIAogZGVmIF9yZW5hbWVfcmVjaXBlX2ZpbGUob2xkcmVjaXBlLCBicG4sIG9sZHB2LCBuZXdwdiwgcGF0aCk6CiAgICAgb2xkcmVjaXBlID0gb3MucGF0aC5iYXNlbmFtZShvbGRyZWNpcGUpCkBAIC05Nyw3ICsxMDUsNyBAQAogICAgIF9yZW5hbWVfcmVjaXBlX2RpcnMob2xkcHYsIG5ld3B2LCBwYXRoKQogICAgIHJldHVybiBfcmVuYW1lX3JlY2lwZV9maWxlKG9sZHJlY2lwZSwgYnBuLCBvbGRwdiwgbmV3cHYsIHBhdGgpCiAKLWRlZiBfd3JpdGVfYXBwZW5kKHJjLCBzcmN0cmVlLCBzYW1lX2Rpciwgbm9fc2FtZV9kaXIsIHJldiwgd29ya3NwYWNlLCBkKToKK2RlZiBfd3JpdGVfYXBwZW5kKHJjLCBzcmN0cmVlLCBzYW1lX2Rpciwgbm9fc2FtZV9kaXIsIHJldiwgY29waWVkLCB3b3Jrc3BhY2UsIGQpOgogICAgICIiIldyaXRlcyBhbiBhcHBlbmQgZmlsZSIiIgogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyYyk6CiAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiYmJhcHBlbmQgbm90IGNyZWF0ZWQgYmVjYXVzZSAlcyBkb2VzIG5vdCBleGlzdCIgJSByYykKQEAgLTEyMCw4ICsxMjgsMTIgQEAKICAgICAgICAgYl9pc19zID0gdXNlX2V4dGVybmFsX2J1aWxkKHNhbWVfZGlyLCBub19zYW1lX2RpciwgZCkKICAgICAgICAgaWYgYl9pc19zOgogICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTERfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKKyAgICAgICAgZi53cml0ZSgnXG4nKQogICAgICAgICBpZiByZXY6Ci0gICAgICAgICAgICBmLndyaXRlKCdcbiMgaW5pdGlhbF9yZXY6ICVzXG4nICUgcmV2KQorICAgICAgICAgICAgZi53cml0ZSgnIyBpbml0aWFsX3JldjogJXNcbicgJSByZXYpCisgICAgICAgIGlmIGNvcGllZDoKKyAgICAgICAgICAgIGYud3JpdGUoJyMgb3JpZ2luYWxfcGF0aDogJXNcbicgJSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkpCisgICAgICAgICAgICBmLndyaXRlKCcjIG9yaWdpbmFsX2ZpbGVzOiAlc1xuJyAlICcgJy5qb2luKGNvcGllZCkpCiAgICAgcmV0dXJuIGFmCiAKIGRlZiBfY2xlYW51cF9vbl9lcnJvcihyZiwgc3JjdHJlZSk6CkBAIC0yMTUsNyArMjI3LDkgQEAKICAgICAgICAgZm9yIGYgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKICAgICAgICAgICAgIF9fcnVuKCdnaXQgYWRkICIlcyInICUgZikKIAotICAgICAgICBfX3J1bignZ2l0IGNvbW1pdCAtcSAtbSAiQ29tbWl0IG9mIHVwc3RyZWFtIGNoYW5nZXMgYXQgdmVyc2lvbiAlcyIgLS1hbGxvdy1lbXB0eScgJSBuZXdwdikKKyAgICAgICAgdXNlcm9wdGlvbnMgPSBbXQorICAgICAgICBvZS5wYXRjaC5HaXRBcHBseVRyZWUuZ2l0Q29tbWFuZFVzZXJPcHRpb25zKHVzZXJvcHRpb25zLCBkPXJkKQorICAgICAgICBfX3J1bignZ2l0ICVzIGNvbW1pdCAtcSAtbSAiQ29tbWl0IG9mIHVwc3RyZWFtIGNoYW5nZXMgYXQgdmVyc2lvbiAlcyIgLS1hbGxvdy1lbXB0eScgJSAoJyAnLmpvaW4odXNlcm9wdGlvbnMpLCBuZXdwdikpCiAgICAgICAgIF9fcnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtYmFzZS0lcycgJSBuZXdwdikKIAogICAgIChzdGRvdXQsIF8pID0gX19ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcpCkBAIC0yMjgsMTYgKzI0MiwyMiBAQAogICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIiVzIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpKQogICAgIGVsc2U6CisgICAgICAgIF9fcnVuKCdnaXQgY2hlY2tvdXQgZGV2dG9vbC1wYXRjaGVkIC1iICVzJyAlIGJyYW5jaCkKKyAgICAgICAgc2tpcHRhZyA9IEZhbHNlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9fcnVuKCdnaXQgY2hlY2tvdXQgZGV2dG9vbC1wYXRjaGVkIC1iICVzJyAlIGJyYW5jaCkKICAgICAgICAgICAgIF9fcnVuKCdnaXQgcmViYXNlICVzJyAlIHJldikKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNraXB0YWcgPSBUcnVlCisgICAgICAgICAgICBpZiAnY29uZmxpY3QnIGluIGUuc3Rkb3V0OgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdDb21tYW5kIFwnJXNcJyBmYWlsZWQ6XG4lc1xuXG5Zb3Ugd2lsbCBuZWVkIHRvIHJlc29sdmUgY29uZmxpY3RzIGluIG9yZGVyIHRvIGNvbXBsZXRlIHRoZSB1cGdyYWRlLicgJSAoZS5jb21tYW5kLCBlLnN0ZG91dC5yc3RyaXAoKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdDb21tYW5kIFwnJXNcJyBmYWlsZWQ6XG4lcycgJSAoZS5jb21tYW5kLCBlLnN0ZG91dCkpCisgICAgICAgIGlmIG5vdCBza2lwdGFnOgogICAgICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoJ2dpdDovLycpOgogICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICduZXcnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG5ld3B2CiAgICAgICAgICAgICBfX3J1bignZ2l0IHRhZyAtZiBkZXZ0b29sLXBhdGNoZWQtJXMnICUgc3VmZml4KQotICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgotICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbW1hbmQgXCclc1wnIGZhaWxlZDpcbiVzJyAlIChlLmNvbW1hbmQsIGUuc3Rkb3V0KSkKIAogICAgIGlmIHRtcHNyY3RyZWU6CiAgICAgICAgIGlmIGtlZXBfdGVtcDoKQEAgLTI1Myw3ICsyNzMsNyBAQAogICAgIGJwbiA9IHJkLmdldFZhcignQlBOJywgVHJ1ZSkKICAgICBwYXRoID0gb3MucGF0aC5qb2luKHdvcmtzcGFjZSwgJ3JlY2lwZXMnLCBicG4pCiAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBhdGgpCi0gICAgb2UucmVjaXBldXRpbHMuY29weV9yZWNpcGVfZmlsZXMocmQsIHBhdGgpCisgICAgY29waWVkLCBfID0gb2UucmVjaXBldXRpbHMuY29weV9yZWNpcGVfZmlsZXMocmQsIHBhdGgpCiAKICAgICBvbGRwdiA9IHJkLmdldFZhcignUFYnLCBUcnVlKQogICAgIGlmIG5vdCBuZXdwdjoKQEAgLTMwMCwxMCArMzIwLDEwIEBACiAgICAgICAgIG5ld3ZhbHVlc1snU1JDX1VSSVttZDVzdW1dJ10gPSBtZDUKICAgICAgICAgbmV3dmFsdWVzWydTUkNfVVJJW3NoYTI1NnN1bV0nXSA9IHNoYTI1NgogCi0gICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUoZnVsbHBhdGgsIE5vbmUsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUodGluZm9pbC5jb29rZXIsIGZ1bGxwYXRoLCBOb25lKQogICAgIG9lLnJlY2lwZXV0aWxzLnBhdGNoX3JlY2lwZShyZCwgZnVsbHBhdGgsIG5ld3ZhbHVlcykKIAotICAgIHJldHVybiBmdWxscGF0aAorICAgIHJldHVybiBmdWxscGF0aCwgY29waWVkCiAKIGRlZiB1cGdyYWRlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CiAgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICd1cGdyYWRlJyBzdWJjb21tYW5kIiIiCkBAIC0zMTYsNDggKzMzNiw1MSBAQAogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIklmIHlvdSBzcGVjaWZ5IC0tc3JjYnJhbmNoLy1CIHRoZW4geW91IG11c3QgdXNlIC0tc3JjcmV2Ly1TIHRvIHNwZWNpZnkgdGhlIHJldmlzaW9uIiAlIGFyZ3MucmVjaXBlbmFtZSkKIAogICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGJhc2VwYXRoPWJhc2VwYXRoLCB0cmFja2luZz1UcnVlKQotICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQotICAgIGlmIG5vdCByZDoKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIHBuID0gcmQuZ2V0VmFyKCdQTicsIFRydWUpCi0gICAgaWYgcG4gIT0gYXJncy5yZWNpcGVuYW1lOgotICAgICAgICBsb2dnZXIuaW5mbygnTWFwcGluZyAlcyB0byAlcycgJSAoYXJncy5yZWNpcGVuYW1lLCBwbikpCi0gICAgaWYgcG4gaW4gd29ya3NwYWNlOgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlIHBuKQotCi0gICAgaWYgYXJncy5zcmN0cmVlOgotICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKLSAgICBlbHNlOgotICAgICAgICBzcmN0cmVlID0gc3RhbmRhcmQuZ2V0X2RlZmF1bHRfc3JjdHJlZShjb25maWcsIHBuKQotCi0gICAgc3RhbmRhcmQuX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKHBuLCByZCkKLSAgICBvbGRfc3JjcmV2ID0gcmQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQotICAgIGlmIG9sZF9zcmNyZXYgPT0gJ0lOVkFMSUQnOgotICAgICAgICBvbGRfc3JjcmV2ID0gTm9uZQotICAgIGlmIG9sZF9zcmNyZXYgYW5kIG5vdCBhcmdzLnNyY3JldjoKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJSZWNpcGUgc3BlY2lmaWVzIGEgU1JDUkVWIHZhbHVlOyB5b3UgbXVzdCBzcGVjaWZ5IGEgbmV3IG9uZSB3aGVuIHVwZ3JhZGluZyIpCi0gICAgaWYgcmQuZ2V0VmFyKCdQVicsIFRydWUpID09IGFyZ3MudmVyc2lvbiBhbmQgb2xkX3NyY3JldiA9PSBhcmdzLnNyY3JldjoKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJDdXJyZW50IGFuZCB1cGdyYWRlIHZlcnNpb25zIGFyZSB0aGUgc2FtZSB2ZXJzaW9uIikKLQotICAgIHJmID0gTm9uZQogICAgIHRyeToKLSAgICAgICAgcmV2MSA9IHN0YW5kYXJkLl9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBGYWxzZSwgJ2RldnRvb2wtb3JpZycsIEZhbHNlLCByZCkKLSAgICAgICAgcmV2MiwgbWQ1LCBzaGEyNTYgPSBfZXh0cmFjdF9uZXdfc291cmNlKGFyZ3MudmVyc2lvbiwgc3JjdHJlZSwgYXJncy5ub19wYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc3JjcmV2LCBhcmdzLmJyYW5jaCwgYXJncy5rZWVwX3RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLCByZCkKLSAgICAgICAgcmYgPSBfY3JlYXRlX25ld19yZWNpcGUoYXJncy52ZXJzaW9uLCBtZDUsIHNoYTI1NiwgYXJncy5zcmNyZXYsIGFyZ3Muc3JjYnJhbmNoLCBjb25maWcud29ya3NwYWNlX3BhdGgsIHRpbmZvaWwsIHJkKQotICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGU6Ci0gICAgICAgIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBzcmN0cmVlKQotICAgIGV4Y2VwdCBEZXZ0b29sRXJyb3IgYXMgZToKLSAgICAgICAgX3VwZ3JhZGVfZXJyb3IoZSwgcmYsIHNyY3RyZWUpCi0gICAgc3RhbmRhcmQuX2FkZF9tZDUoY29uZmlnLCBwbiwgb3MucGF0aC5kaXJuYW1lKHJmKSkKKyAgICAgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgIHJldHVybiAxCiAKLSAgICBhZiA9IF93cml0ZV9hcHBlbmQocmYsIHNyY3RyZWUsIGFyZ3Muc2FtZV9kaXIsIGFyZ3Mubm9fc2FtZV9kaXIsIHJldjIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgcmQpCi0gICAgc3RhbmRhcmQuX2FkZF9tZDUoY29uZmlnLCBwbiwgYWYpCi0gICAgbG9nZ2VyLmluZm8oJ1VwZ3JhZGVkIHNvdXJjZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKLSAgICBsb2dnZXIuaW5mbygnTmV3IHJlY2lwZSBpcyAlcycgJSByZikKKyAgICAgICAgcG4gPSByZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgaWYgcG4gIT0gYXJncy5yZWNpcGVuYW1lOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ01hcHBpbmcgJXMgdG8gJXMnICUgKGFyZ3MucmVjaXBlbmFtZSwgcG4pKQorICAgICAgICBpZiBwbiBpbiB3b3Jrc3BhY2U6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlIHBuKQorCisgICAgICAgIGlmIGFyZ3Muc3JjdHJlZToKKyAgICAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3JjdHJlZSA9IHN0YW5kYXJkLmdldF9kZWZhdWx0X3NyY3RyZWUoY29uZmlnLCBwbikKKworICAgICAgICBzdGFuZGFyZC5fY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUocG4sIHJkKQorICAgICAgICBvbGRfc3JjcmV2ID0gcmQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBvbGRfc3JjcmV2ID09ICdJTlZBTElEJzoKKyAgICAgICAgICAgIG9sZF9zcmNyZXYgPSBOb25lCisgICAgICAgIGlmIG9sZF9zcmNyZXYgYW5kIG5vdCBhcmdzLnNyY3JldjoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiUmVjaXBlIHNwZWNpZmllcyBhIFNSQ1JFViB2YWx1ZTsgeW91IG11c3Qgc3BlY2lmeSBhIG5ldyBvbmUgd2hlbiB1cGdyYWRpbmciKQorICAgICAgICBpZiByZC5nZXRWYXIoJ1BWJywgVHJ1ZSkgPT0gYXJncy52ZXJzaW9uIGFuZCBvbGRfc3JjcmV2ID09IGFyZ3Muc3JjcmV2OgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJDdXJyZW50IGFuZCB1cGdyYWRlIHZlcnNpb25zIGFyZSB0aGUgc2FtZSB2ZXJzaW9uIikKKworICAgICAgICByZiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV2MSA9IHN0YW5kYXJkLl9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBGYWxzZSwgJ2RldnRvb2wtb3JpZycsIEZhbHNlLCByZCkKKyAgICAgICAgICAgIHJldjIsIG1kNSwgc2hhMjU2ID0gX2V4dHJhY3RfbmV3X3NvdXJjZShhcmdzLnZlcnNpb24sIHNyY3RyZWUsIGFyZ3Mubm9fcGF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zcmNyZXYsIGFyZ3MuYnJhbmNoLCBhcmdzLmtlZXBfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLCByZCkKKyAgICAgICAgICAgIHJmLCBjb3BpZWQgPSBfY3JlYXRlX25ld19yZWNpcGUoYXJncy52ZXJzaW9uLCBtZDUsIHNoYTI1NiwgYXJncy5zcmNyZXYsIGFyZ3Muc3JjYnJhbmNoLCBjb25maWcud29ya3NwYWNlX3BhdGgsIHRpbmZvaWwsIHJkKQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvciBhcyBlOgorICAgICAgICAgICAgX3VwZ3JhZGVfZXJyb3IoZSwgcmYsIHNyY3RyZWUpCisgICAgICAgIGV4Y2VwdCBEZXZ0b29sRXJyb3IgYXMgZToKKyAgICAgICAgICAgIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBzcmN0cmVlKQorICAgICAgICBzdGFuZGFyZC5fYWRkX21kNShjb25maWcsIHBuLCBvcy5wYXRoLmRpcm5hbWUocmYpKQorCisgICAgICAgIGFmID0gX3dyaXRlX2FwcGVuZChyZiwgc3JjdHJlZSwgYXJncy5zYW1lX2RpciwgYXJncy5ub19zYW1lX2RpciwgcmV2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZCwgY29uZmlnLndvcmtzcGFjZV9wYXRoLCByZCkKKyAgICAgICAgc3RhbmRhcmQuX2FkZF9tZDUoY29uZmlnLCBwbiwgYWYpCisgICAgICAgIGxvZ2dlci5pbmZvKCdVcGdyYWRlZCBzb3VyY2UgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCisgICAgICAgIGxvZ2dlci5pbmZvKCdOZXcgcmVjaXBlIGlzICVzJyAlIHJmKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogICAgIHJldHVybiAwCiAKIGRlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKQEAgLTM3MSw3ICszOTQsNyBAQAogICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J05hbWUgb2YgcmVjaXBlIHRvIHVwZ3JhZGUgKGp1c3QgbmFtZSAtIG5vIHZlcnNpb24sIHBhdGggb3IgZXh0ZW5zaW9uKScpCiAgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgIG5hcmdzPSc/JywgaGVscD0nUGF0aCB0byB3aGVyZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgdHJlZS4gSWYgbm90IHNwZWNpZmllZCwgYSBzdWJkaXJlY3Rvcnkgb2YgJXMgd2lsbCBiZSB1c2VkLicgJSBkZWZzcmN0cmVlKQogICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgJy1WJywgaGVscD0nVmVyc2lvbiB0byB1cGdyYWRlIHRvIChQViknKQotICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1zcmNyZXYnLCAnLVMnLCBoZWxwPSdTb3VyY2UgcmV2aXNpb24gdG8gdXBncmFkZSB0byAoaWYgZmV0Y2hpbmcgZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQpJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tc3JjcmV2JywgJy1TJywgaGVscD0nU291cmNlIHJldmlzaW9uIHRvIHVwZ3JhZGUgdG8gKHJlcXVpcmVkIGlmIGZldGNoaW5nIGZyb20gYW4gU0NNIHN1Y2ggYXMgZ2l0KScpCiAgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLXNyY2JyYW5jaCcsICctQicsIGhlbHA9J0JyYW5jaCBpbiBzb3VyY2UgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSByZXZpc2lvbiB0byB1c2UgKGlmIGZldGNoaW5nIGZyb20gYW4gU0NNIHN1Y2ggYXMgZ2l0KScpCiAgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBuZXcgZGV2ZWxvcG1lbnQgYnJhbmNoIHRvIGNoZWNrb3V0IChkZWZhdWx0ICIlKGRlZmF1bHQpcyIpJykKICAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tbm8tcGF0Y2gnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdEbyBub3QgYXBwbHkgcGF0Y2hlcyBmcm9tIHRoZSByZWNpcGUgdG8gdGhlIG5ldyBzb3VyY2UgY29kZScpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkKaW5kZXggNTU4ZmQyNS4uMWUwZmMxZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvYXBwZW5kLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2FwcGVuZC5weQpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICcvZXRjL2dzaGFkb3cnOiAnL2V0Yy9nc2hhZG93IHNob3VsZCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHVzZXJhZGQgYW5kIGV4dHJhdXNlcnMgY2xhc3NlcycsCiAgICAgICAgICAgICAgICAgICAgICAgJyR7c3lzY29uZmRpcn0vaG9zdG5hbWUnOiAnJHtzeXNjb25mZGlyfS9ob3N0bmFtZSBjb250ZW50cyBzaG91bGQgYmUgc2V0IGJ5IHNldHRpbmcgaG9zdG5hbWVfcG4tYmFzZS1maWxlcyA9ICJ2YWx1ZSIgaW4gY29uZmlndXJhdGlvbicsfQogCi0gICAgZm9yIHB0aHNwZWMsIG1lc3NhZ2UgaW4gaW52YWxpZHRhcmdldHMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHB0aHNwZWMsIG1lc3NhZ2UgaW4gaW52YWxpZHRhcmdldHMuaXRlbXMoKToKICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZSh0YXJnZXRwYXRoLCBkLmV4cGFuZChwdGhzcGVjKSk6CiAgICAgICAgICAgICByYWlzZSBJbnZhbGlkVGFyZ2V0RmlsZUVycm9yKGQuZXhwYW5kKG1lc3NhZ2UpKQogCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmdWxscHRoLCB0YXJnZXRwYXRoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlc1t0YXJnZXRwYXRoXS5hcHBlbmQocG4pCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdwa2dfcHJlaW5zdF8nKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ3BrZ19wb3N0aW5zdF8nKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLmRlY29kZSgnc3RyaW5nX2VzY2FwZScpCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHR2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKS5lbmNvZGUoJ3V0Zi04JykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAndXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgJXMgJyAlIHRhcmdldHBhdGggaW4gc2NyaXB0dmFsOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXNbdGFyZ2V0cGF0aF0uYXBwZW5kKCc/JXMnICUgcG4pCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHRhcmdldHBhdGhfcmUuc2VhcmNoKHNjcmlwdHZhbCk6CkBAIC0xMTUsOCArMTE1LDcgQEAKICAgICAgICAgIyBFcnJvciBhbHJlYWR5IGxvZ2dlZAogICAgICAgICByZXR1cm4gTm9uZQogICAgIGFwcGVuZF9maWxlcyA9IHRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQotICAgIHJkID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIGFwcGVuZF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUodGluZm9pbC5jb29rZXIsIHJlY2lwZWZpbGUsIGFwcGVuZF9maWxlcykKICAgICByZXR1cm4gcmQKIAogZGVmIGRldGVybWluZV9maWxlX3NvdXJjZSh0YXJnZXRwYXRoLCByZCk6CkBAIC0xNTIsNyArMTUxLDcgQEAKICAgICAgICAgIyBDaGVjayBwYXRjaGVzCiAgICAgICAgIHNyY3BhdGNoZXMgPSBbXQogICAgICAgICBwYXRjaGVkZmlsZXMgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZWRfZmlsZXMocmQpCi0gICAgICAgIGZvciBwYXRjaCwgZmlsZWxpc3QgaW4gcGF0Y2hlZGZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgcGF0Y2gsIGZpbGVsaXN0IGluIHBhdGNoZWRmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVsaXN0OgogICAgICAgICAgICAgICAgIGlmIGZpbGVpdGVtWzBdID09IHNyY3BhdGg6CiAgICAgICAgICAgICAgICAgICAgIHNyY3BhdGNoZXMuYXBwZW5kKChwYXRjaCwgZmlsZWl0ZW1bMV0pKQpAQCAtMTcyLDcgKzE3MSw3IEBACiAgICAgIiIiRmluZCB0aGUgc291cmNlIHBhdGggc3BlY2lmaWVkIHdpdGhpbiBhIGNvbW1hbmQiIiIKICAgICBjb21tYW5kID0gY21kZWxlbWVudHNbMF0KICAgICBpZiBjb21tYW5kIGluIFsnaW5zdGFsbCcsICdjcCddOgotICAgICAgICBoZWxwdGV4dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCdMQ19BTEw9QyAlcyAtLWhlbHAnICUgY29tbWFuZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaGVscHRleHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgnTENfQUxMPUMgJXMgLS1oZWxwJyAlIGNvbW1hbmQsIHNoZWxsPVRydWUpLmRlY29kZSgndXRmLTgnKQogICAgICAgICBhcmdvcHRzID0gJycKICAgICAgICAgYXJnb3B0X2xpbmVfcmUgPSByZS5jb21waWxlKCdeLShbYS16QS1aMC05XSksIC0tW2Etei1dKz0nKQogICAgICAgICBmb3IgbGluZSBpbiBoZWxwdGV4dC5zcGxpdGxpbmVzKCk6CkBAIC0yNzAsNyArMjY5LDcgQEAKICAgICBwb3N0aW5zdF9wbnMgPSBbXQogCiAgICAgc2VsZWN0cG4gPSBOb25lCi0gICAgZm9yIHRhcmdldHBhdGgsIHBubGlzdCBpbiByZWNpcGVzLml0ZXJpdGVtcygpOgorICAgIGZvciB0YXJnZXRwYXRoLCBwbmxpc3QgaW4gcmVjaXBlcy5pdGVtcygpOgogICAgICAgICBmb3IgcG4gaW4gcG5saXN0OgogICAgICAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgnPycpOgogICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlX3Bucy5hcHBlbmQocG5bMTpdKQpAQCAtMzUxLDcgKzM1MCw3IEBACiAKICAgICBjb3B5ZmlsZXMgPSB7fQogICAgIGV4dHJhbGluZXMgPSBleHRyYWxpbmVzIG9yIFtdCi0gICAgZm9yIG5ld2ZpbGUsIHNyY2ZpbGUgaW4gZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgZm9yIG5ld2ZpbGUsIHNyY2ZpbGUgaW4gZmlsZXMuaXRlbXMoKToKICAgICAgICAgc3JjX2Rlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3JjZmlsZSkKICAgICAgICAgaWYgbm90IGFyZ3MudXNlX3dvcmtkaXI6CiAgICAgICAgICAgICBpZiByZC5nZXRWYXIoJ1MnLCBUcnVlKSA9PSByZC5nZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsIFRydWUpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5CmluZGV4IGJiOWZiOWIuLmQ0MjdkMzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHNjcmlwdHV0aWxzCi1pbXBvcnQgdXJscGFyc2UKK2Zyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZSwgdXJsZGVmcmFnLCB1cmxzcGxpdAogaW1wb3J0IGhhc2hsaWIKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICBsaWJwYXRocyA9IGxpc3Qoc2V0KFtiYXNlX2xpYmRpciwgbGliZGlyXSkpCiAgICAgICAgIGxpYm5hbWVfcmUgPSByZS5jb21waWxlKCdebGliKC4rKVwuc28uKiQnKQogICAgICAgICBwa2dsaWJtYXAgPSB7fQotICAgICAgICBmb3IgbGliLCBpdGVtIGluIHNobGliX3Byb3ZpZGVycy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGZvciBwYXRoLCBwa2cgaW4gaXRlbS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGxpYiwgaXRlbSBpbiBzaGxpYl9wcm92aWRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBwYXRoLCBwa2cgaW4gaXRlbS5pdGVtcygpOgogICAgICAgICAgICAgICAgIGlmIHBhdGggaW4gbGlicGF0aHM6CiAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGxpYm5hbWVfcmUubWF0Y2gobGliKQogICAgICAgICAgICAgICAgICAgICBpZiByZXM6CkBAIC03NCw3ICs3NCw3IEBACiAKICAgICAgICAgIyBOb3cgdHVybiBpdCBpbnRvIGEgbGlicmFyeS0+cmVjaXBlIG1hcHBpbmcKICAgICAgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQotICAgICAgICBmb3IgbGlibmFtZSwgcGtnIGluIHBrZ2xpYm1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGxpYm5hbWUsIHBrZyBpbiBwa2dsaWJtYXAuaXRlbXMoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsIHBrZykpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgdW5tYXBwZWRwYyA9IFtdCiAgICAgICAgIHBjZGVwcyA9IGxpc3Qoc2V0KHBjZGVwcykpCiAgICAgICAgIGZvciBwY2RlcCBpbiBwY2RlcHM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBjZGVwLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGNkZXAsIHN0cik6CiAgICAgICAgICAgICAgICAgcmVjaXBlID0gcmVjaXBlbWFwLmdldChwY2RlcCwgTm9uZSkKICAgICAgICAgICAgICAgICBpZiByZWNpcGU6CiAgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKHJlY2lwZSkKQEAgLTI1NiwzMCArMjU2LDU2IEBACiAKIGRlZiBkZXRlcm1pbmVfZnJvbV9maWxlbmFtZShzcmNmaWxlKToKICAgICAiIiJEZXRlcm1pbmUgbmFtZSBhbmQgdmVyc2lvbiBmcm9tIGEgZmlsZW5hbWUiIiIKLSAgICBwYXJ0ID0gJycKKyAgICBpZiBpc19wYWNrYWdlKHNyY2ZpbGUpOgorICAgICAgICAjIEZvcmNlIGdldHRpbmcgdGhlIHZhbHVlIGZyb20gdGhlIHBhY2thZ2UgbWV0YWRhdGEKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKwogICAgIGlmICcudGFyLicgaW4gc3JjZmlsZToKLSAgICAgICAgbmFtZXBhcnQgPSBzcmNmaWxlLnNwbGl0KCcudGFyLicpWzBdLmxvd2VyKCkKKyAgICAgICAgbmFtZXBhcnQgPSBzcmNmaWxlLnNwbGl0KCcudGFyLicpWzBdCiAgICAgZWxzZToKLSAgICAgICAgbmFtZXBhcnQgPSBvcy5wYXRoLnNwbGl0ZXh0KHNyY2ZpbGUpWzBdLmxvd2VyKCkKLSAgICBzcGxpdHZhbCA9IG5hbWVwYXJ0LnJzcGxpdCgnXycsIDEpCisgICAgICAgIG5hbWVwYXJ0ID0gb3MucGF0aC5zcGxpdGV4dChzcmNmaWxlKVswXQorICAgIG5hbWVwYXJ0ID0gbmFtZXBhcnQubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKQorICAgIGlmIG5hbWVwYXJ0LmVuZHN3aXRoKCcuc3JjJyk6CisgICAgICAgIG5hbWVwYXJ0ID0gbmFtZXBhcnRbOi00XQorICAgIGlmIG5hbWVwYXJ0LmVuZHN3aXRoKCcub3JpZycpOgorICAgICAgICBuYW1lcGFydCA9IG5hbWVwYXJ0WzotNV0KKyAgICBzcGxpdHZhbCA9IG5hbWVwYXJ0LnNwbGl0KCctJykKKyAgICBsb2dnZXIuZGVidWcoJ2RldGVybWluZV9mcm9tX2ZpbGVuYW1lOiBzcGxpdCBuYW1lICVzIGludG86ICVzJyAlIChzcmNmaWxlLCBzcGxpdHZhbCkpCisKKyAgICB2ZXJfcmUgPSByZS5jb21waWxlKCdedj9bMC05XScpCisKKyAgICBwdiA9IE5vbmUKKyAgICBwbiA9IE5vbmUKICAgICBpZiBsZW4oc3BsaXR2YWwpID09IDE6Ci0gICAgICAgIHNwbGl0dmFsID0gbmFtZXBhcnQucnNwbGl0KCctJywgMSkKLSAgICBwbiA9IHNwbGl0dmFsWzBdLnJlcGxhY2UoJ18nLCAnLScpCi0gICAgaWYgbGVuKHNwbGl0dmFsKSA+IDE6Ci0gICAgICAgIGlmIHNwbGl0dmFsWzFdWzBdIGluICcwMTIzNDU2Nzg5JzoKLSAgICAgICAgICAgIHB2ID0gc3BsaXR2YWxbMV0KKyAgICAgICAgIyBUcnkgdG8gc3BsaXQgdGhlIHZlcnNpb24gb3V0IGlmIHRoZXJlIGlzIG5vIHNlcGFyYXRvciAob3IgYSAuKQorICAgICAgICByZXMgPSByZS5tYXRjaCgnXihbXjAtOV0rKShbMC05Ll0rLiopJCcsIG5hbWVwYXJ0KQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBpZiBsZW4ocmVzLmdyb3VwKDEpKSA+IDEgYW5kIGxlbihyZXMuZ3JvdXAoMikpID4gMToKKyAgICAgICAgICAgICAgICBwbiA9IHJlcy5ncm91cCgxKS5yc3RyaXAoJy4nKQorICAgICAgICAgICAgICAgIHB2ID0gcmVzLmdyb3VwKDIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwbiA9ICctJy5qb2luKHNwbGl0dmFsKS5yZXBsYWNlKCdfJywgJy0nKQotICAgICAgICAgICAgcHYgPSBOb25lCisgICAgICAgICAgICBwbiA9IG5hbWVwYXJ0CiAgICAgZWxzZToKLSAgICAgICAgcHYgPSBOb25lCisgICAgICAgIGlmIHNwbGl0dmFsWy0xXSBpbiBbJ3NvdXJjZScsICdzcmMnXToKKyAgICAgICAgICAgIHNwbGl0dmFsLnBvcCgpCisgICAgICAgIGlmIGxlbihzcGxpdHZhbCkgPiAyIGFuZCByZS5tYXRjaCgnXihhbHBoYXxiZXRhfHN0YWJsZXxyZWxlYXNlfHJjWzAtOV18cHJlWzAtOV18cFswLTldfFswLTldezh9KScsIHNwbGl0dmFsWy0xXSkgYW5kIHZlcl9yZS5tYXRjaChzcGxpdHZhbFstMl0pOgorICAgICAgICAgICAgcHYgPSAnLScuam9pbihzcGxpdHZhbFstMjpdKQorICAgICAgICAgICAgaWYgcHYuZW5kc3dpdGgoJy1yZWxlYXNlJyk6CisgICAgICAgICAgICAgICAgcHYgPSBwdls6LThdCisgICAgICAgICAgICBzcGxpdHZhbCA9IHNwbGl0dmFsWzotMl0KKyAgICAgICAgZWxpZiB2ZXJfcmUubWF0Y2goc3BsaXR2YWxbLTFdKToKKyAgICAgICAgICAgIHB2ID0gc3BsaXR2YWwucG9wKCkKKyAgICAgICAgcG4gPSAnLScuam9pbihzcGxpdHZhbCkKKyAgICAgICAgaWYgcHYgYW5kIHB2LnN0YXJ0c3dpdGgoJ3YnKToKKyAgICAgICAgICAgIHB2ID0gcHZbMTpdCisgICAgbG9nZ2VyLmRlYnVnKCdkZXRlcm1pbmVfZnJvbV9maWxlbmFtZTogbmFtZSA9ICIlcyIgdmVyc2lvbiA9ICIlcyInICUgKHBuLCBwdikpCiAgICAgcmV0dXJuIChwbiwgcHYpCiAKIGRlZiBkZXRlcm1pbmVfZnJvbV91cmwoc3JjdXJpKToKICAgICAiIiJEZXRlcm1pbmUgbmFtZSBhbmQgdmVyc2lvbiBmcm9tIGEgVVJMIiIiCiAgICAgcG4gPSBOb25lCiAgICAgcHYgPSBOb25lCi0gICAgcGFyc2VyZXMgPSB1cmxwYXJzZS51cmxwYXJzZShzcmN1cmkubG93ZXIoKS5zcGxpdCgnOycsIDEpWzBdKQorICAgIHBhcnNlcmVzID0gdXJscGFyc2Uoc3JjdXJpLmxvd2VyKCkuc3BsaXQoJzsnLCAxKVswXSkKICAgICBpZiBwYXJzZXJlcy5wYXRoOgogICAgICAgICBpZiAnZ2l0aHViLmNvbScgaW4gcGFyc2VyZXMubmV0bG9jOgogICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKHInLiovKC4qPykvYXJjaGl2ZS8oLiopLWZpbmFsXC4odGFyfHppcCknLCBwYXJzZXJlcy5wYXRoKQpAQCAtMzEwLDQzICszMzYsNjYgQEAKICAgICAjIG9kZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXJsZGF0YSBjYWNoZSB3aGljaCBsZWFkIHRvIGVycm9ycwogICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ1JFVicsICcke0FVVE9SRVZ9JykKICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKLSAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFt1cmldLCBsb2NhbGRhdGEpCi0gICAgdXJsZGF0YSA9IGZldGNoZXIudWQKLSAgICBmb3IgdSBpbiB1cmxkYXRhOgotICAgICAgICBpZiB1cmxkYXRhW3VdLm1ldGhvZC5zdXBwb3J0c19zcmNyZXYoKToKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3VyaV0sIGxvY2FsZGF0YSkKKyAgICAgICAgdXJsZGF0YSA9IGZldGNoZXIudWQKKyAgICAgICAgZm9yIHUgaW4gdXJsZGF0YToKKyAgICAgICAgICAgIGlmIHVybGRhdGFbdV0ubWV0aG9kLnN1cHBvcnRzX3NyY3JldigpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yIGFzIGU6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmV0Y2hFcnJvciBpbiBzdXBwb3J0c19zcmNyZXY6ICVzJyAlIHN0cihlKSkKKyAgICAgICAgIyBGYWxsIGJhY2sgdG8gYmFzaWMgY2hlY2sKKyAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoKCdnaXQ6Ly8nLCAnZ2l0c206Ly8nKSk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgIHJldHVybiBGYWxzZQogCiBkZWYgcmVmb3JtYXRfZ2l0X3VyaSh1cmkpOgogICAgICcnJ0NvbnZlcnQgYW55IGh0dHBbc106Ly8uLi4uZ2l0IFVSSSBpbnRvIGdpdDovLy4uLjtwcm90b2NvbD1odHRwW3NdJycnCiAgICAgY2hlY2t1cmkgPSB1cmkuc3BsaXQoJzsnLCAxKVswXQotICAgIGlmIGNoZWNrdXJpLmVuZHN3aXRoKCcuZ2l0Jykgb3IgJy9naXQvJyBpbiBjaGVja3VyaToKLSAgICAgICAgcmVzID0gcmUubWF0Y2goJyhodHRwcz8pOi8vKFteO10rKFwuZ2l0KT8pKDsuKik/JCcsIHVyaSkKKyAgICBpZiBjaGVja3VyaS5lbmRzd2l0aCgnLmdpdCcpIG9yICcvZ2l0LycgaW4gY2hlY2t1cmkgb3IgcmUubWF0Y2goJ2h0dHBzPzovL2dpdGh1Yi5jb20vW14vXSsvW14vXSsvPyQnLCBjaGVja3VyaSk6CisgICAgICAgIHJlcyA9IHJlLm1hdGNoKCcoaHR0cHxodHRwc3xzc2gpOi8vKFteO10rKFwuZ2l0KT8pKDsuKik/JCcsIHVyaSkKICAgICAgICAgaWYgcmVzOgogICAgICAgICAgICAgIyBOZWVkIHRvIHN3aXRjaCB0aGUgVVJJIGFyb3VuZCBzbyB0aGF0IHRoZSBnaXQgZmV0Y2hlciBpcyB1c2VkCiAgICAgICAgICAgICByZXR1cm4gJ2dpdDovLyVzO3Byb3RvY29sPSVzJXMnICUgKHJlcy5ncm91cCgyKSwgcmVzLmdyb3VwKDEpLCByZXMuZ3JvdXAoNCkgb3IgJycpCisgICAgICAgIGVsaWYgJ0AnIGluIGNoZWNrdXJpOgorICAgICAgICAgICAgIyBDYXRjaCBlLmcuIGdpdEBnaXQuZXhhbXBsZS5jb206cmVwby5naXQKKyAgICAgICAgICAgIHJldHVybiAnZ2l0Oi8vJXM7cHJvdG9jb2w9c3NoJyAlIGNoZWNrdXJpLnJlcGxhY2UoJzonLCAnLycsIDEpCiAgICAgcmV0dXJuIHVyaQogCitkZWYgaXNfcGFja2FnZSh1cmwpOgorICAgICcnJ0NoZWNrIGlmIGEgVVJMIHBvaW50cyB0byBhIHBhY2thZ2UnJycKKyAgICBjaGVja3VybCA9IHVybC5zcGxpdCgnOycsIDEpWzBdCisgICAgaWYgY2hlY2t1cmwuZW5kc3dpdGgoKCcuZGViJywgJy5pcGsnLCAnLnJwbScsICcuc3JwbScpKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKwogZGVmIGNyZWF0ZV9yZWNpcGUoYXJncyk6CiAgICAgaW1wb3J0IGJiLnByb2Nlc3MKICAgICBpbXBvcnQgdGVtcGZpbGUKICAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCiAKICAgICBwa2dhcmNoID0gIiIKICAgICBpZiBhcmdzLm1hY2hpbmU6CiAgICAgICAgIHBrZ2FyY2ggPSAiJHtNQUNISU5FX0FSQ0h9IgogCisgICAgZXh0cmF2YWx1ZXMgPSB7fQogICAgIGNoZWNrc3VtcyA9IChOb25lLCBOb25lKQogICAgIHRlbXBzcmMgPSAnJworICAgIHNvdXJjZSA9IGFyZ3Muc291cmNlCiAgICAgc3Jjc3ViZGlyID0gJycKICAgICBzcmNyZXYgPSAnJHtBVVRPUkVWfScKLSAgICBpZiAnOi8vJyBpbiBhcmdzLnNvdXJjZToKKworICAgIGlmIG9zLnBhdGguaXNmaWxlKHNvdXJjZSk6CisgICAgICAgIHNvdXJjZSA9ICdmaWxlOi8vJXMnICUgb3MucGF0aC5hYnNwYXRoKHNvdXJjZSkKKworICAgIGlmIHNjcmlwdHV0aWxzLmlzX3NyY191cmwoc291cmNlKToKICAgICAgICAgIyBGZXRjaCBhIFVSTAotICAgICAgICBmZXRjaHVyaSA9IHJlZm9ybWF0X2dpdF91cmkodXJscGFyc2UudXJsZGVmcmFnKGFyZ3Muc291cmNlKVswXSkKKyAgICAgICAgZmV0Y2h1cmkgPSByZWZvcm1hdF9naXRfdXJpKHVybGRlZnJhZyhzb3VyY2UpWzBdKQogICAgICAgICBpZiBhcmdzLmJpbmFyeToKICAgICAgICAgICAgICMgQXNzdW1lIHRoZSBhcmNoaXZlIGNvbnRhaW5zIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHZlcmJhdGltCiAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gZXh0cmFjdCB0byBhIHN1YmRpcmVjdG9yeQotICAgICAgICAgICAgZmV0Y2h1cmkgKz0gJztzdWJkaXI9JXMnICUgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHVybHBhcnNlLnVybHNwbGl0KGZldGNodXJpKS5wYXRoKSlbMF0KKyAgICAgICAgICAgIGZldGNodXJpICs9ICc7c3ViZGlyPSR7QlB9JwogICAgICAgICBzcmN1cmkgPSBmZXRjaHVyaQogICAgICAgICByZXZfcmUgPSByZS5jb21waWxlKCc7cmV2PShbXjtdKyknKQogICAgICAgICByZXMgPSByZXZfcmUuc2VhcmNoKHNyY3VyaSkKQEAgLTM1NywxMCArNDA2LDcgQEAKICAgICAgICAgc3JjdHJlZSA9IHRlbXBzcmMKICAgICAgICAgaWYgZmV0Y2h1cmkuc3RhcnRzd2l0aCgnbnBtOi8vJyk6CiAgICAgICAgICAgICAjIENoZWNrIGlmIG5wbSBpcyBhdmFpbGFibGUKLSAgICAgICAgICAgIG5wbSA9IGJiLnV0aWxzLndoaWNoKHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdQQVRIJywgVHJ1ZSksICducG0nKQotICAgICAgICAgICAgaWYgbm90IG5wbToKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ25wbTovLyBVUkwgcmVxdWVzdGVkIGJ1dCBucG0gaXMgbm90IGF2YWlsYWJsZSAtIHlvdSBuZWVkIHRvIGVpdGhlciBidWlsZCBub2RlanMtbmF0aXZlIG9yIGluc3RhbGwgbnBtIHVzaW5nIHlvdXIgcGFja2FnZSBtYW5hZ2VyJykKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgY2hlY2tfbnBtKHRpbmZvaWwuY29uZmlnX2RhdGEpCiAgICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyAlcy4uLicgJSBzcmN1cmkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNoZWNrc3VtcyA9IHNjcmlwdHV0aWxzLmZldGNoX3VyaSh0aW5mb2lsLmNvbmZpZ19kYXRhLCBmZXRjaHVyaSwgc3JjdHJlZSwgc3JjcmV2KQpAQCAtMzc3LDE5ICs0MjMsNTAgQEAKICAgICAgICAgICAgICAgICBzcmNzdWJkaXIgPSBkaXJsaXN0WzBdCiAgICAgICAgICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBzcmNzdWJkaXIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdpdGggb3BlbihzaW5nbGVpdGVtLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNpbmdsZWl0ZW0sICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBpZiAnPGh0bWwnIGluIGYucmVhZCgxMDApLmxvd2VyKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZldGNoaW5nICIlcyIgcmV0dXJuZWQgYSBzaW5nbGUgSFRNTCBwYWdlIC0gY2hlY2sgdGhlIFVSTCBpcyBjb3JyZWN0IGFuZCBmdW5jdGlvbmFsJyAlIGZldGNodXJpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0bW9kdWxlcycpKSBhbmQgc3JjdXJpLnN0YXJ0c3dpdGgoJ2dpdDovLycpOgorICAgICAgICAgICAgc3JjdXJpID0gJ2dpdHNtOi8vJyArIHNyY3VyaVs2Ol0KKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyBzdWJtb2R1bGVzLi4uJykKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUnLCBjd2Q9c3JjdHJlZSkKKworICAgICAgICBpZiBpc19wYWNrYWdlKGZldGNodXJpKToKKyAgICAgICAgICAgIHRtcGZkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncmVjaXBldG9vbC0nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBrZ2ZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmaWxldXJpID0gZmV0Y2h1cmkgKyAnO3VucGFjaz0wJworICAgICAgICAgICAgICAgICAgICBzY3JpcHR1dGlscy5mZXRjaF91cmkodGluZm9pbC5jb25maWdfZGF0YSwgZmlsZXVyaSwgdG1wZmRpciwgc3JjcmV2KQorICAgICAgICAgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2Fsayh0bXBmZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignU2Vjb25kIGZldGNoIHRvIGdldCBtZXRhZGF0YSBmYWlsZWQ6ICVzJyAlIHN0cihlKS5yc3RyaXAoKSkKKworICAgICAgICAgICAgICAgIGlmIHBrZ2ZpbGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ2ZpbGUuZW5kc3dpdGgoKCcuZGViJywgJy5pcGsnKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignYXIgeCAlcyBjb250cm9sLnRhci5neicgJSBwa2dmaWxlLCBjd2Q9dG1wZmRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCd0YXIgeGYgY29udHJvbC50YXIuZ3ogLi9jb250cm9sJywgY3dkPXRtcGZkaXIpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb252ZXJ0X2RlYmlhbih0bXBmZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmF2YWx1ZXMudXBkYXRlKHZhbHVlcykKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBwa2dmaWxlLmVuZHN3aXRoKCgnLnJwbScsICcuc3JwbScpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdycG0gLXFwIC0teG1sICVzID4gcGtnaW5mby54bWwnICUgcGtnZmlsZSwgY3dkPXRtcGZkaXIpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb252ZXJ0X3JwbV94bWwob3MucGF0aC5qb2luKHRtcGZkaXIsICdwa2dpbmZvLnhtbCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmF2YWx1ZXMudXBkYXRlKHZhbHVlcykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBmZGlyKQogICAgIGVsc2U6CiAgICAgICAgICMgQXNzdW1lIHdlJ3JlIHBvaW50aW5nIHRvIGFuIGV4aXN0aW5nIHNvdXJjZSB0cmVlCiAgICAgICAgIGlmIGFyZ3MuZXh0cmFjdF90bzoKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignLS1leHRyYWN0LXRvIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgc291cmNlIGlzIGEgZGlyZWN0b3J5JykKICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyZ3Muc291cmNlKToKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzb3VyY2UgZGlyZWN0b3J5ICVzJyAlIGFyZ3Muc291cmNlKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihzb3VyY2UpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIHNvdXJjZSBkaXJlY3RvcnkgJXMnICUgc291cmNlKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAgICAgc3JjdHJlZSA9IGFyZ3Muc291cmNlCisgICAgICAgIHNyY3RyZWUgPSBzb3VyY2UKICAgICAgICAgc3JjdXJpID0gJycKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgogICAgICAgICAgICAgIyBUcnkgdG8gZ2V0IHVwc3RyZWFtIHJlcG8gbG9jYXRpb24gZnJvbSBvcmlnaW4gcmVtb3RlCkBAIC00MDEsNyArNDc4LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCkKICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPiAxOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lWzBdID09ICdvcmlnaW4nIGFuZCAnOi8vJyBpbiBzcGxpdGxpbmVbMV06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdGxpbmVbMF0gPT0gJ29yaWdpbicgYW5kIHNjcmlwdHV0aWxzLmlzX3NyY191cmwoc3BsaXRsaW5lWzFdKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN1cmkgPSByZWZvcm1hdF9naXRfdXJpKHNwbGl0bGluZVsxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNzdWJkaXIgPSAnZ2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC00MjksMzcgKzUwNiwxMiBAQAogICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgUmVjaXBlIGNyZWF0ZWQgYnkgJXMnICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpCiAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBUaGlzIGlzIHRoZSBiYXNpcyBvZiBhIHJlY2lwZSBhbmQgbWF5IG5lZWQgZnVydGhlciBlZGl0aW5nIGluIG9yZGVyIHRvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwuJykKICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIChGZWVsIGZyZWUgdG8gcmVtb3ZlIHRoZXNlIGNvbW1lbnRzIHdoZW4gZWRpdGluZy4pJykKLSAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKLQotICAgIGxpY3ZhbHVlcyA9IGd1ZXNzX2xpY2Vuc2Uoc3JjdHJlZV91c2UpCi0gICAgbGljX2ZpbGVzX2Noa3N1bSA9IFtdCi0gICAgaWYgbGljdmFsdWVzOgotICAgICAgICBsaWNlbnNlcyA9IFtdCi0gICAgICAgIGZvciBsaWN2YWx1ZSBpbiBsaWN2YWx1ZXM6Ci0gICAgICAgICAgICBpZiBub3QgbGljdmFsdWVbMF0gaW4gbGljZW5zZXM6Ci0gICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGxpY3ZhbHVlWzBdKQotICAgICAgICAgICAgbGljX2ZpbGVzX2Noa3N1bS5hcHBlbmQoJ2ZpbGU6Ly8lczttZDU9JXMnICUgKGxpY3ZhbHVlWzFdLCBsaWN2YWx1ZVsyXSkpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgV0FSTklORzogdGhlIGZvbGxvd2luZyBMSUNFTlNFIGFuZCBMSUNfRklMRVNfQ0hLU1VNIHZhbHVlcyBhcmUgYmVzdCBndWVzc2VzIC0gaXQgaXMnKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHZhbHVlcyBhcmUgY29tcGxldGUgYW5kIGNvcnJlY3QuJykKLSAgICAgICAgaWYgbGVuKGxpY3ZhbHVlcykgPiAxOgotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCi0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IG11bHRpcGxlIGxpY2Vuc2VzIGhhdmUgYmVlbiBkZXRlY3RlZDsgaWYgdGhhdCBpcyBjb3JyZWN0IHlvdSBzaG91bGQgc2VwYXJhdGUnKQotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB0aGVzZSBpbiB0aGUgTElDRU5TRSB2YWx1ZSB1c2luZyAmIGlmIHRoZSBtdWx0aXBsZSBsaWNlbnNlcyBhbGwgYXBwbHksIG9yIHwgaWYgdGhlcmUnKQotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBpcyBhIGNob2ljZSBiZXR3ZWVuIHRoZSBtdWx0aXBsZSBsaWNlbnNlcy4gSWYgaW4gZG91YnQsIGNoZWNrIHRoZSBhY2NvbXBhbnlpbmcnKQotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSB3aGljaCBzaXR1YXRpb24gaXMgYXBwbGljYWJsZS4nKQotICAgIGVsc2U6Ci0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgVW5hYmxlIHRvIGZpbmQgYW55IGZpbGVzIHRoYXQgbG9va2VkIGxpa2UgbGljZW5zZSBzdGF0ZW1lbnRzLiBDaGVjayB0aGUgYWNjb21wYW55aW5nJykKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgaGVhZGVycyBhbmQgc2V0IExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gYWNjb3JkaW5nbHkuJykKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogTElDRU5TRSBpcyBiZWluZyBzZXQgdG8gIkNMT1NFRCIgdG8gYWxsb3cgeW91IHRvIGF0IGxlYXN0IHN0YXJ0IGJ1aWxkaW5nIC0gaWYnKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHRoaXMgaXMgbm90IGFjY3VyYXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbGljZW5zaW5nIG9mIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCAoaXQnKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHdpbGwgbm90IGJlIGluIG1vc3QgY2FzZXMpIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGNvcnJlY3QgdmFsdWUgYmVmb3JlIHVzaW5nIHRoaXMnKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHJlY2lwZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBpbml0aWFsIHRlc3RpbmcvZGV2ZWxvcG1lbnQhJykKLSAgICAgICAgbGljZW5zZXMgPSBbJ0NMT1NFRCddCi0gICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnTElDRU5TRSA9ICIlcyInICUgJyAnLmpvaW4obGljZW5zZXMpKQotICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ0xJQ19GSUxFU19DSEtTVU0gPSAiJXMiJyAlICcgXFxcbiAgICAgICAgICAgICAgICAgICAgJy5qb2luKGxpY19maWxlc19jaGtzdW0pKQorICAgICMgV2UgbmVlZCBhIGJsYW5rIGxpbmUgaGVyZSBzbyB0aGF0IHBhdGNoX3JlY2lwZV9saW5lcyBjYW4gcmV3aW5kIGJlZm9yZSB0aGUgTElDRU5TRSBjb21tZW50cwogICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCiAKKyAgICBoYW5kbGVkID0gW10KKyAgICBsaWN2YWx1ZXMgPSBoYW5kbGVfbGljZW5zZV92YXJzKHNyY3RyZWVfdXNlLCBsaW5lc19iZWZvcmUsIGhhbmRsZWQsIGV4dHJhdmFsdWVzLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorCiAgICAgY2xhc3NlcyA9IFtdCiAKICAgICAjIEZJWE1FIFRoaXMgaXMga2luZCBvZiBhIGhhY2ssIHdlIHByb2JhYmx5IG91Z2h0IHRvIGJlIHVzaW5nIGJpdGJha2UgdG8gZG8gdGhpcwpAQCAtNTE1LDEwICs1NjcsMTYgQEAKICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBNb2RpZnkgdGhlc2UgYXMgZGVzaXJlZCcpCiAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1BWID0gIiVzK2dpdCR7U1JDUFZ9IicgJSAocmVhbHB2IG9yICcxLjAnKSkKKyAgICAgICAgaWYgbm90IGFyZ3MuYXV0b3JldiBhbmQgc3JjcmV2ID09ICcke0FVVE9SRVZ9JzoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmN0cmVlLCAnLmdpdCcpKToKKyAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgICAgIHNyY3JldiA9IHN0ZG91dC5yc3RyaXAoKQogICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNSRVYgPSAiJXMiJyAlIHNyY3JldikKICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQogCi0gICAgaWYgc3Jjc3ViZGlyOgorICAgIGlmIHNyY3N1YmRpciBhbmQgbm90IGFyZ3MuYmluYXJ5OgorICAgICAgICAjIChmb3IgYmluYXJ5IHBhY2thZ2VzIHdlIGV4cGxpY2l0bHkgc3BlY2lmeSBzdWJkaXI9IHdoZW4gZmV0Y2hpbmcgdG8KKyAgICAgICAgIyBtYXRjaCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBTLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNldCBpdCBpbiB0aGF0IGNhc2UpCiAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1MgPSAiJHtXT1JLRElSfS8lcyInICUgc3Jjc3ViZGlyKQogICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQogCkBAIC01NDksNDAgKzYwNywzNiBAQAogICAgIGhhbmRsZXJzID0gW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gaGFuZGxlcnNdCiAKICAgICAjIEFwcGx5IHRoZSBoYW5kbGVycwotICAgIGhhbmRsZWQgPSBbXQotICAgIGhhbmRsZWQuYXBwZW5kKCgnbGljZW5zZScsIGxpY3ZhbHVlcykpCi0KICAgICBpZiBhcmdzLmJpbmFyeToKICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ2Jpbl9wYWNrYWdlJykKICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKIAotICAgIGV4dHJhdmFsdWVzID0ge30KICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKICAgICAgICAgaGFuZGxlci5wcm9jZXNzKHNyY3RyZWVfdXNlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkLCBleHRyYXZhbHVlcykKIAogICAgIGV4dHJhZmlsZXMgPSBleHRyYXZhbHVlcy5wb3AoJ2V4dHJhZmlsZXMnLCB7fSkKKyAgICBleHRyYV9wbiA9IGV4dHJhdmFsdWVzLnBvcCgnUE4nLCBOb25lKQorICAgIGV4dHJhX3B2ID0gZXh0cmF2YWx1ZXMucG9wKCdQVicsIE5vbmUpCiAKLSAgICBpZiBub3QgcmVhbHB2OgotICAgICAgICByZWFscHYgPSBleHRyYXZhbHVlcy5nZXQoJ1BWJywgTm9uZSkKLSAgICAgICAgaWYgcmVhbHB2OgotICAgICAgICAgICAgaWYgbm90IHZhbGlkYXRlX3B2KHJlYWxwdik6Ci0gICAgICAgICAgICAgICAgcmVhbHB2ID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZWFscHYgPSByZWFscHYubG93ZXIoKS5zcGxpdCgpWzBdCi0gICAgICAgICAgICAgICAgaWYgJ18nIGluIHJlYWxwdjoKLSAgICAgICAgICAgICAgICAgICAgcmVhbHB2ID0gcmVhbHB2LnJlcGxhY2UoJ18nLCAnLScpCi0gICAgaWYgbm90IHBuOgotICAgICAgICBwbiA9IGV4dHJhdmFsdWVzLmdldCgnUE4nLCBOb25lKQotICAgICAgICBpZiBwbjoKLSAgICAgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoJ0dOVSAnKToKLSAgICAgICAgICAgICAgICBwbiA9IHBuWzQ6XQotICAgICAgICAgICAgaWYgJyAnIGluIHBuOgotICAgICAgICAgICAgICAgICMgUHJvYmFibHkgYSBkZXNjcmlwdGl2ZSBpZGVudGlmaWVyIHJhdGhlciB0aGFuIGEgcHJvcGVyIG5hbWUKLSAgICAgICAgICAgICAgICBwbiA9IE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcG4gPSBwbi5sb3dlcigpCi0gICAgICAgICAgICAgICAgaWYgJ18nIGluIHBuOgotICAgICAgICAgICAgICAgICAgICBwbiA9IHBuLnJlcGxhY2UoJ18nLCAnLScpCisgICAgaWYgZXh0cmFfcHYgYW5kIG5vdCByZWFscHY6CisgICAgICAgIHJlYWxwdiA9IGV4dHJhX3B2CisgICAgICAgIGlmIG5vdCB2YWxpZGF0ZV9wdihyZWFscHYpOgorICAgICAgICAgICAgcmVhbHB2ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhbHB2ID0gcmVhbHB2Lmxvd2VyKCkuc3BsaXQoKVswXQorICAgICAgICAgICAgaWYgJ18nIGluIHJlYWxwdjoKKyAgICAgICAgICAgICAgICByZWFscHYgPSByZWFscHYucmVwbGFjZSgnXycsICctJykKKyAgICBpZiBleHRyYV9wbiBhbmQgbm90IHBuOgorICAgICAgICBwbiA9IGV4dHJhX3BuCisgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoJ0dOVSAnKToKKyAgICAgICAgICAgIHBuID0gcG5bNDpdCisgICAgICAgIGlmICcgJyBpbiBwbjoKKyAgICAgICAgICAgICMgUHJvYmFibHkgYSBkZXNjcmlwdGl2ZSBpZGVudGlmaWVyIHJhdGhlciB0aGFuIGEgcHJvcGVyIG5hbWUKKyAgICAgICAgICAgIHBuID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG4gPSBwbi5sb3dlcigpCisgICAgICAgICAgICBpZiAnXycgaW4gcG46CisgICAgICAgICAgICAgICAgcG4gPSBwbi5yZXBsYWNlKCdfJywgJy0nKQogCiAgICAgaWYgbm90IG91dGZpbGU6CiAgICAgICAgIGlmIG5vdCBwbjoKQEAgLTU5MCw4ICs2NDQsMTEgQEAKICAgICAgICAgICAgICMgZGV2dG9vbCBsb29rcyBmb3IgdGhpcyBzcGVjaWZpYyBleGl0IGNvZGUsIHNvIGRvbid0IGNoYW5nZSBpdAogICAgICAgICAgICAgc3lzLmV4aXQoMTUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzcmN1cmkgYW5kIHNyY3VyaS5zdGFydHN3aXRoKCgnZ2l0Oi8vJywgJ2hnOi8vJywgJ3N2bjovLycpKToKLSAgICAgICAgICAgICAgICBvdXRmaWxlID0gJyVzXyVzLmJiJyAlIChwbiwgc3JjdXJpLnNwbGl0KCc6JywgMSlbMF0pCisgICAgICAgICAgICBpZiBzcmN1cmkgYW5kIHNyY3VyaS5zdGFydHN3aXRoKCgnZ2l0c206Ly8nLCAnZ2l0Oi8vJywgJ2hnOi8vJywgJ3N2bjovLycpKToKKyAgICAgICAgICAgICAgICBzdWZmaXggPSBzcmN1cmkuc3BsaXQoJzonLCAxKVswXQorICAgICAgICAgICAgICAgIGlmIHN1ZmZpeCA9PSAnZ2l0c20nOgorICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSAnZ2l0JworICAgICAgICAgICAgICAgIG91dGZpbGUgPSAnJXNfJXMuYmInICUgKHBuLCBzdWZmaXgpCiAgICAgICAgICAgICBlbGlmIHJlYWxwdjoKICAgICAgICAgICAgICAgICBvdXRmaWxlID0gJyVzXyVzLmJiJyAlIChwbiwgcmVhbHB2KQogICAgICAgICAgICAgZWxzZToKQEAgLTYxMCw3ICs2NjcsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXh0cmFvdXRkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG91dGZpbGUpLCBwbikKICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGV4dHJhb3V0ZGlyKQotICAgICAgICBmb3IgZGVzdGZuLCBleHRyYWZpbGUgaW4gZXh0cmFmaWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGRlc3RmbiwgZXh0cmFmaWxlIGluIGV4dHJhZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGV4dHJhZmlsZSwgb3MucGF0aC5qb2luKGV4dHJhb3V0ZGlyLCBkZXN0Zm4pKQogCiAgICAgbGluZXMgPSBsaW5lc19iZWZvcmUKQEAgLTY2Miw2ICs3MTksMTIgQEAKICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcnKQogICAgIG91dGxpbmVzLmV4dGVuZChsaW5lc19hZnRlcikKIAorICAgIGlmIGV4dHJhdmFsdWVzOgorICAgICAgICBpZiAnTElDRU5TRScgaW4gZXh0cmF2YWx1ZXMgYW5kIG5vdCBsaWN2YWx1ZXM6CisgICAgICAgICAgICAjIERvbid0IGJsb3cgYXdheSAnQ0xPU0VEJyB2YWx1ZSB0aGF0IGNvbW1lbnRzIHNheSB3ZSBzZXQKKyAgICAgICAgICAgIGRlbCBleHRyYXZhbHVlc1snTElDRU5TRSddCisgICAgICAgIF8sIG91dGxpbmVzID0gb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlX2xpbmVzKG91dGxpbmVzLCBleHRyYXZhbHVlcywgdHJhaWxpbmdfbmV3bGluZT1GYWxzZSkKKwogICAgIGlmIGFyZ3MuZXh0cmFjdF90bzoKICAgICAgICAgc2NyaXB0dXRpbHMuZ2l0X2NvbnZlcnRfc3RhbmRhbG9uZV9jbG9uZShzcmN0cmVlKQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGFyZ3MuZXh0cmFjdF90byk6CkBAIC02NzksMTQgKzc0Miw3MiBAQAogICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicuam9pbihvdXRsaW5lcykgKyAnXG4nKQogICAgIGVsc2U6CiAgICAgICAgIHdpdGggb3BlbihvdXRmaWxlLCAndycpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCdcbicuam9pbihvdXRsaW5lcykgKyAnXG4nKQorICAgICAgICAgICAgbGFzdGxpbmUgPSBOb25lCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRsaW5lczoKKyAgICAgICAgICAgICAgICBpZiBub3QgbGFzdGxpbmUgYW5kIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAjIFNraXAgZXh0cmEgYmxhbmsgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgbGFzdGxpbmUgPSBsaW5lCiAgICAgICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgaGFzIGJlZW4gY3JlYXRlZDsgZnVydGhlciBlZGl0aW5nIG1heSBiZSByZXF1aXJlZCB0byBtYWtlIGl0IGZ1bGx5IGZ1bmN0aW9uYWwnICUgb3V0ZmlsZSkKIAogICAgIGlmIHRlbXBzcmM6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUodGVtcHNyYykKKyAgICAgICAgaWYgYXJncy5rZWVwX3RlbXA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnUHJlc2VydmluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzJyAlIHRlbXBzcmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBzcmMpCiAKICAgICByZXR1cm4gMAogCitkZWYgaGFuZGxlX2xpY2Vuc2VfdmFycyhzcmN0cmVlLCBsaW5lc19iZWZvcmUsIGhhbmRsZWQsIGV4dHJhdmFsdWVzLCBkKToKKyAgICBsaWN2YWx1ZXMgPSBndWVzc19saWNlbnNlKHNyY3RyZWUsIGQpCisgICAgbGljX2ZpbGVzX2Noa3N1bSA9IFtdCisgICAgbGljX3Vua25vd24gPSBbXQorICAgIGlmIGxpY3ZhbHVlczoKKyAgICAgICAgbGljZW5zZXMgPSBbXQorICAgICAgICBmb3IgbGljdmFsdWUgaW4gbGljdmFsdWVzOgorICAgICAgICAgICAgaWYgbm90IGxpY3ZhbHVlWzBdIGluIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgIGxpY2Vuc2VzLmFwcGVuZChsaWN2YWx1ZVswXSkKKyAgICAgICAgICAgIGxpY19maWxlc19jaGtzdW0uYXBwZW5kKCdmaWxlOi8vJXM7bWQ1PSVzJyAlIChsaWN2YWx1ZVsxXSwgbGljdmFsdWVbMl0pKQorICAgICAgICAgICAgaWYgbGljdmFsdWVbMF0gPT0gJ1Vua25vd24nOgorICAgICAgICAgICAgICAgIGxpY191bmtub3duLmFwcGVuZChsaWN2YWx1ZVsxXSkKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gdmFsdWVzIGFyZSBiZXN0IGd1ZXNzZXMgLSBpdCBpcycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgeW91ciByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgdmFsdWVzIGFyZSBjb21wbGV0ZSBhbmQgY29ycmVjdC4nKQorICAgICAgICBpZiBsZW4obGljdmFsdWVzKSA+IDE6CisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogbXVsdGlwbGUgbGljZW5zZXMgaGF2ZSBiZWVuIGRldGVjdGVkOyBpZiB0aGF0IGlzIGNvcnJlY3QgeW91IHNob3VsZCBzZXBhcmF0ZScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHRoZXNlIGluIHRoZSBMSUNFTlNFIHZhbHVlIHVzaW5nICYgaWYgdGhlIG11bHRpcGxlIGxpY2Vuc2VzIGFsbCBhcHBseSwgb3IgfCBpZiB0aGVyZScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGlzIGEgY2hvaWNlIGJldHdlZW4gdGhlIG11bHRpcGxlIGxpY2Vuc2VzLiBJZiBpbiBkb3VidCwgY2hlY2sgdGhlIGFjY29tcGFueWluZycpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHNpdHVhdGlvbiBpcyBhcHBsaWNhYmxlLicpCisgICAgICAgIGlmIGxpY191bmtub3duOgorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFRoZSBmb2xsb3dpbmcgbGljZW5zZSBmaWxlcyB3ZXJlIG5vdCBhYmxlIHRvIGJlIGlkZW50aWZpZWQgYW5kIGFyZScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHJlcHJlc2VudGVkIGFzICJVbmtub3duIiBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGVjayB0aGVtIHlvdXJzZWxmOicpCisgICAgICAgICAgICBmb3IgbGljZmlsZSBpbiBsaWNfdW5rbm93bjoKKyAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjICAgJXMnICUgbGljZmlsZSkKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorICAgIGVsc2U6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgVW5hYmxlIHRvIGZpbmQgYW55IGZpbGVzIHRoYXQgbG9va2VkIGxpa2UgbGljZW5zZSBzdGF0ZW1lbnRzLiBDaGVjayB0aGUgYWNjb21wYW55aW5nJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgaGVhZGVycyBhbmQgc2V0IExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gYWNjb3JkaW5nbHkuJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogTElDRU5TRSBpcyBiZWluZyBzZXQgdG8gIkNMT1NFRCIgdG8gYWxsb3cgeW91IHRvIGF0IGxlYXN0IHN0YXJ0IGJ1aWxkaW5nIC0gaWYnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHRoaXMgaXMgbm90IGFjY3VyYXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbGljZW5zaW5nIG9mIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCAoaXQnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHdpbGwgbm90IGJlIGluIG1vc3QgY2FzZXMpIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGNvcnJlY3QgdmFsdWUgYmVmb3JlIHVzaW5nIHRoaXMnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHJlY2lwZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBpbml0aWFsIHRlc3RpbmcvZGV2ZWxvcG1lbnQhJykKKyAgICAgICAgbGljZW5zZXMgPSBbJ0NMT1NFRCddCisgICAgcGtnX2xpY2Vuc2UgPSBleHRyYXZhbHVlcy5wb3AoJ0xJQ0VOU0UnLCBOb25lKQorICAgIGlmIHBrZ19saWNlbnNlOgorICAgICAgICBpZiBsaWNlbnNlcyA9PSBbJ1Vua25vd24nXToKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogVGhlIGZvbGxvd2luZyBMSUNFTlNFIHZhbHVlIHdhcyBkZXRlcm1pbmVkIGZyb20gdGhlIG9yaWdpbmFsIHBhY2thZ2UgbWV0YWRhdGEnKQorICAgICAgICAgICAgbGljZW5zZXMgPSBbcGtnX2xpY2Vuc2VdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IE9yaWdpbmFsIHBhY2thZ2UgbWV0YWRhdGEgaW5kaWNhdGVzIGxpY2Vuc2UgaXM6ICVzJyAlIHBrZ19saWNlbnNlKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ0xJQ0VOU0UgPSAiJXMiJyAlICcgJy5qb2luKGxpY2Vuc2VzKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdMSUNfRklMRVNfQ0hLU1VNID0gIiVzIicgJSAnIFxcXG4gICAgICAgICAgICAgICAgICAgICcuam9pbihsaWNfZmlsZXNfY2hrc3VtKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorICAgIGhhbmRsZWQuYXBwZW5kKCgnbGljZW5zZScsIGxpY3ZhbHVlcykpCisgICAgcmV0dXJuIGxpY3ZhbHVlcworCiBkZWYgZ2V0X2xpY2Vuc2VfbWQ1c3VtcyhkLCBzdGF0aWNfb25seT1GYWxzZSk6CiAgICAgaW1wb3J0IGJiLnV0aWxzCiAgICAgbWQ1c3VtcyA9IHt9CkBAIC03NTEsNyArODcyLDcgQEAKIAogICAgICMgTm90ZTogdGhlc2UgYXJlIGNhcmVmdWxseSBjb25zdHJ1Y3RlZCEKICAgICBsaWNlbnNlX3RpdGxlX3JlID0gcmUuY29tcGlsZSgnXlwoPygjKyAqKT8oVGhlICk/LnsxLDEwfSBbTGxdaWNlbltzY11lKCBcKC57MSwxMH1cKSk/XCk/Oj8kJykKLSAgICBsaWNlbnNlX3N0YXRlbWVudF9yZSA9IHJlLmNvbXBpbGUoJ15UaGlzIChwcm9qZWN0fHNvZnR3YXJlKSBpcyggZnJlZSBzb2Z0d2FyZSk/IHJlbGVhc2VkIHVuZGVyIHRoZSAuezEsMTB9IFtMbF1pY2VuW3NjXWU6PyQnKQorICAgIGxpY2Vuc2Vfc3RhdGVtZW50X3JlID0gcmUuY29tcGlsZSgnXihUaGlzIChwcm9qZWN0fHNvZnR3YXJlKSBpcyggZnJlZSBzb2Z0d2FyZSk/IChyZWxlYXNlZHxsaWNlbltzY11lZCl8KFJlbGVhc2VkfExpY2VuW2NzXWVkKSkgdW5kZXIgdGhlIC57MSwxMH0gW0xsXWljZW5bc2NdZTo/JCcpCiAgICAgY29weXJpZ2h0X3JlID0gcmUuY29tcGlsZSgnXigjKyk/ICpDb3B5cmlnaHQgLiokJykKIAogICAgIGNydW5jaGVkX21kNXN1bXMgPSB7fQpAQCAtNzgxLDcgKzkwMiw3IEBACiAgICAgIyBodHRwczovL2dpdGh1Yi5jb20vRkZtcGVnL0ZGbXBlZy9ibG9iL21hc3Rlci9DT1BZSU5HLkxHUEx2MwogICAgIGNydW5jaGVkX21kNXN1bXNbJzJlYmZiM2JiNDliOWE0OGEwNzVjYzE0MjVlN2Y0MTI5J10gPSAnTEdQTHYzJwogICAgIGxpY3RleHQgPSBbXQotICAgIHdpdGggb3BlbihsaWNmaWxlLCAncicpIGFzIGY6CisgICAgd2l0aCBvcGVuKGxpY2ZpbGUsICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgIyBEcm9wIG9wZW5pbmcgc3RhdGVtZW50cwogICAgICAgICAgICAgaWYgY29weXJpZ2h0X3JlLm1hdGNoKGxpbmUpOgpAQCAtNzkyLDE0ICs5MTMsMTQgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgIyBTcXVhc2ggc3BhY2VzLCBhbmQgcmVwbGFjZSBzbWFydCBxdW90ZXMsIGRvdWJsZSBxdW90ZXMKICAgICAgICAgICAgICMgYW5kIGJhY2t0aWNrcyB3aXRoIHNpbmdsZSBxdW90ZXMKLSAgICAgICAgICAgIGxpbmUgPSBvZS51dGlscy5zcXVhc2hzcGFjZXMobGluZS5zdHJpcCgpKS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIGxpbmUgPSBvZS51dGlscy5zcXVhc2hzcGFjZXMobGluZS5zdHJpcCgpKQogICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSh1Ilx1MjAxOCIsICInIikucmVwbGFjZSh1Ilx1MjAxOSIsICInIikucmVwbGFjZSh1Ilx1MjAxYyIsIiciKS5yZXBsYWNlKHUiXHUyMDFkIiwgIiciKS5yZXBsYWNlKCciJywgJ1wnJykucmVwbGFjZSgnYCcsICdcJycpCiAgICAgICAgICAgICBpZiBsaW5lOgogICAgICAgICAgICAgICAgIGxpY3RleHQuYXBwZW5kKGxpbmUpCiAKICAgICBtID0gaGFzaGxpYi5tZDUoKQogICAgIHRyeToKLSAgICAgICAgbS51cGRhdGUoJyAnLmpvaW4obGljdGV4dCkpCisgICAgICAgIG0udXBkYXRlKCcgJy5qb2luKGxpY3RleHQpLmVuY29kZSgndXRmLTgnKSkKICAgICAgICAgbWQ1dmFsID0gbS5oZXhkaWdlc3QoKQogICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CiAgICAgICAgIG1kNXZhbCA9IE5vbmUKQEAgLTgwNyw5ICs5MjgsOSBAQAogICAgIGxpY2Vuc2UgPSBjcnVuY2hlZF9tZDVzdW1zLmdldChtZDV2YWwsIE5vbmUpCiAgICAgcmV0dXJuIGxpY2Vuc2UsIG1kNXZhbCwgbGljdGV4dAogCi1kZWYgZ3Vlc3NfbGljZW5zZShzcmN0cmVlKToKK2RlZiBndWVzc19saWNlbnNlKHNyY3RyZWUsIGQpOgogICAgIGltcG9ydCBiYgotICAgIG1kNXN1bXMgPSBnZXRfbGljZW5zZV9tZDVzdW1zKHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgbWQ1c3VtcyA9IGdldF9saWNlbnNlX21kNXN1bXMoZCkKIAogICAgIGxpY2Vuc2VzID0gW10KICAgICBsaWNzcGVjcyA9IFsnKkxJQ0VOW0NTXUUqJywgJ0NPUFlJTkcqJywgJypbTGxdaWNlbnNlKicsICdMRUdBTConLCAnW0xsXWVnYWwqJywgJypHUEwqJywgJ1JFQURNRS5saWMqJywgJ0NPUFlSSUdIVConLCAnW0NjXW9weXJpZ2h0KiddCkBAIC04NDIsNyArOTYzLDcgQEAKICAgICAiIiIKICAgICBwa2dsaWNlbnNlcyA9IHtwbjogW119CiAgICAgZm9yIGxpY2Vuc2UsIGxpY3BhdGgsIF8gaW4gbGljdmFsdWVzOgotICAgICAgICBmb3IgcGtnbmFtZSwgcGtncGF0aCBpbiBwYWNrYWdlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHBrZ25hbWUsIHBrZ3BhdGggaW4gcGFja2FnZXMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGxpY3BhdGguc3RhcnRzd2l0aChwa2dwYXRoICsgJy8nKToKICAgICAgICAgICAgICAgICBpZiBwa2duYW1lIGluIHBrZ2xpY2Vuc2VzOgogICAgICAgICAgICAgICAgICAgICBwa2dsaWNlbnNlc1twa2duYW1lXS5hcHBlbmQobGljZW5zZSkKQEAgLTg1NCw3ICs5NzUsNyBAQAogICAgICAgICAgICAgcGtnbGljZW5zZXNbcG5dLmFwcGVuZChsaWNlbnNlKQogICAgIG91dGxpY2Vuc2VzID0ge30KICAgICBmb3IgcGtnbmFtZSBpbiBwYWNrYWdlczoKLSAgICAgICAgbGljZW5zZSA9ICcgJy5qb2luKGxpc3Qoc2V0KHBrZ2xpY2Vuc2VzLmdldChwa2duYW1lLCBbJ1Vua25vd24nXSkpKSkKKyAgICAgICAgbGljZW5zZSA9ICcgJy5qb2luKGxpc3Qoc2V0KHBrZ2xpY2Vuc2VzLmdldChwa2duYW1lLCBbJ1Vua25vd24nXSkpKSkgb3IgJ1Vua25vd24nCiAgICAgICAgIGlmIGxpY2Vuc2UgPT0gJ1Vua25vd24nIGFuZCBwa2duYW1lIGluIGZhbGxiYWNrX2xpY2Vuc2VzOgogICAgICAgICAgICAgbGljZW5zZSA9IGZhbGxiYWNrX2xpY2Vuc2VzW3BrZ25hbWVdCiAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnTElDRU5TRV8lcyA9ICIlcyInICUgKHBrZ25hbWUsIGxpY2Vuc2UpKQpAQCAtODY5LDcgKzk5MCw3IEBACiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgIHBrZ21hcFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUucnN0cmlwKCkpXSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdCiAgICAgcmVjaXBlbWFwID0ge30KLSAgICBmb3IgcGMsIHBrZyBpbiBwa2dtYXAuaXRlcml0ZW1zKCk6CisgICAgZm9yIHBjLCBwa2cgaW4gcGtnbWFwLml0ZW1zKCk6CiAgICAgICAgIHBrZ2RhdGFmaWxlID0gb3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsICdydW50aW1lJywgcGtnKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CiAgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YWZpbGUsICdyJykgYXMgZjoKQEAgLTg3OCw3MyArOTk5LDg0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVtYXBbcGNdID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKICAgICByZXR1cm4gcmVjaXBlbWFwCiAKLWRlZiBjb252ZXJ0X3BrZ2luZm8ocGtnaW5mb2ZpbGUpOgotICAgIHZhbHVlcyA9IHt9Ci0gICAgd2l0aCBvcGVuKHBrZ2luZm9maWxlLCAncicpIGFzIGY6Ci0gICAgICAgIGluZGVzYyA9IEZhbHNlCi0gICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICBpZiBpbmRlc2M6Ci0gICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpOgotICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gKz0gJyAnICsgbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaW5kZXNjID0gRmFsc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnOiAnLCAxKQotICAgICAgICAgICAgICAgIGtleSA9IGxpbmVbMF0KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmVbMV0KLSAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ0xJQ0VOU0UnOgotICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHZhbHVlLnNwbGl0KCcsJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBkZXAuc3BsaXQoKVswXQotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkID0gZGVwbWFwLmdldChkZXAsICcnKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFwcGVkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYXBwZW5kKG1hcHBlZCkKLSAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnTGljZW5zZSc6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1snTElDRU5TRSddID0gdmFsdWUKLSAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnU3VtbWFyeSc6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1snU1VNTUFSWSddID0gdmFsdWUKLSAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnRGVzY3JpcHRpb24nOgotICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gPSB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBUcnVlCi0gICAgcmV0dXJuIHZhbHVlcwotCiBkZWYgY29udmVydF9kZWJpYW4oZGVicGF0aCk6CisgICAgdmFsdWVfbWFwID0geydQYWNrYWdlJzogJ1BOJywKKyAgICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnUFYnLAorICAgICAgICAgICAgICAgICAnU2VjdGlvbic6ICdTRUNUSU9OJywKKyAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UnOiAnTElDRU5TRScsCisgICAgICAgICAgICAgICAgICdIb21lcGFnZSc6ICdIT01FUEFHRSd9CisKICAgICAjIEZJWE1FIGV4dGVuZCB0aGlzIG1hcHBpbmcgLSBwZXJoYXBzIHVzZSBkaXN0cm9fYWxpYXMuaW5jPwogICAgIGRlcG1hcCA9IHsnbGliei1kZXYnOiAnemxpYid9CiAKICAgICB2YWx1ZXMgPSB7fQogICAgIGRlcGVuZHMgPSBbXQotICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVicGF0aCwgJ2NvbnRyb2wnKSkgYXMgZjoKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRlYnBhdGgsICdjb250cm9sJyksICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICBpbmRlc2MgPSBGYWxzZQogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgaWYgaW5kZXNjOgotICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcgVGhpcyBwYWNrYWdlIGNvbnRhaW5zJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydERVNDUklQVElPTiddICs9ICcgJyArIGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ0RFU0NSSVBUSU9OJyBpbiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydERVNDUklQVElPTiddICs9ICcgJyArIGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gPSBsaW5lLnN0cmlwKCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQotICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpbmRlc2M6CiAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnOicsIDEpCi0gICAgICAgICAgICAgICAga2V5ID0gbGluZVswXQotICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZVsxXQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdGxpbmUpIDwgMjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBrZXkgPSBzcGxpdGxpbmVbMF0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0bGluZVsxXS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgaWYga2V5ID09ICdCdWlsZC1EZXBlbmRzJzoKICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB2YWx1ZS5zcGxpdCgnLCcpOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZGVwLnNwbGl0KClbMF0KICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZCA9IGRlcG1hcC5nZXQoZGVwLCAnJykKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hcHBlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFwcGVuZChtYXBwZWQpCi0gICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ1NlY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ1NFQ1RJT04nXSA9IHZhbHVlCiAgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ0Rlc2NyaXB0aW9uJzoKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydTVU1NQVJZJ10gPSB2YWx1ZQogICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFybmFtZSA9IHZhbHVlX21hcC5nZXQoa2V5LCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3Zhcm5hbWVdID0gdmFsdWUKIAotICAgIGlmIGRlcGVuZHM6Ci0gICAgICAgIHZhbHVlc1snREVQRU5EUyddID0gJyAnLmpvaW4oZGVwZW5kcykKKyAgICAjaWYgZGVwZW5kczoKKyAgICAjICAgIHZhbHVlc1snREVQRU5EUyddID0gJyAnLmpvaW4oZGVwZW5kcykKIAogICAgIHJldHVybiB2YWx1ZXMKIAorZGVmIGNvbnZlcnRfcnBtX3htbCh4bWxmaWxlKToKKyAgICAnJydDb252ZXJ0cyB0aGUgb3V0cHV0IGZyb20gcnBtIC1xcCAtLXhtbCB0byBhIHNldCBvZiB2YXJpYWJsZSB2YWx1ZXMnJycKKyAgICBpbXBvcnQgeG1sLmV0cmVlLkVsZW1lbnRUcmVlIGFzIEVsZW1lbnRUcmVlCisgICAgcnBtdGFnX21hcCA9IHsnTmFtZSc6ICdQTicsCisgICAgICAgICAgICAgICAgICAnVmVyc2lvbic6ICdQVicsCisgICAgICAgICAgICAgICAgICAnU3VtbWFyeSc6ICdTVU1NQVJZJywKKyAgICAgICAgICAgICAgICAgICdEZXNjcmlwdGlvbic6ICdERVNDUklQVElPTicsCisgICAgICAgICAgICAgICAgICAnTGljZW5zZSc6ICdMSUNFTlNFJywKKyAgICAgICAgICAgICAgICAgICdVcmwnOiAnSE9NRVBBR0UnfQorCisgICAgdmFsdWVzID0ge30KKyAgICB0cmVlID0gRWxlbWVudFRyZWUucGFyc2UoeG1sZmlsZSkKKyAgICByb290ID0gdHJlZS5nZXRyb290KCkKKyAgICBmb3IgY2hpbGQgaW4gcm9vdDoKKyAgICAgICAgaWYgY2hpbGQudGFnID09ICdycG1UYWcnOgorICAgICAgICAgICAgbmFtZSA9IGNoaWxkLmF0dHJpYi5nZXQoJ25hbWUnLCBOb25lKQorICAgICAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgICAgICB2YXJuYW1lID0gcnBtdGFnX21hcC5nZXQobmFtZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YXJuYW1lOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFybmFtZV0gPSBjaGlsZFswXS50ZXh0CisgICAgcmV0dXJuIHZhbHVlcworCisKK2RlZiBjaGVja19ucG0oZCk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihkLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgVHJ1ZSksICducG0nKSk6CisgICAgICAgIGxvZ2dlci5lcnJvcignbnBtIHJlcXVpcmVkIHRvIHByb2Nlc3Mgc3BlY2lmaWVkIHNvdXJjZSwgYnV0IG5wbSBpcyBub3QgYXZhaWxhYmxlIC0geW91IG5lZWQgdG8gYnVpbGQgbm9kZWpzLW5hdGl2ZSBmaXJzdCcpCisgICAgICAgIHN5cy5leGl0KDE0KQogCiBkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2Vycyk6CiAgICAgcGFyc2VyX2NyZWF0ZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignY3JlYXRlJywKQEAgLTk1OSw1ICsxMDkxLDcgQEAKICAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLWInLCAnLS1iaW5hcnknLCBoZWxwPSdUcmVhdCB0aGUgc291cmNlIHRyZWUgYXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCB2ZXJiYXRpbSAobm8gY29tcGlsYXRpb24sIHNhbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSknLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctLWFsc28tbmF0aXZlJywgaGVscD0nQWxzbyBhZGQgbmF0aXZlIHZhcmlhbnQgKGkuZS4gc3VwcG9ydCBidWlsZGluZyByZWNpcGUgZm9yIHRoZSBidWlsZCBob3N0IGFzIHdlbGwgYXMgdGhlIHRhcmdldCBtYWNoaW5lKScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy0tc3JjLXN1YmRpcicsIGhlbHA9J1NwZWNpZnkgc3ViZGlyZWN0b3J5IHdpdGhpbiBzb3VyY2UgdHJlZSB0byB1c2UnLCBtZXRhdmFyPSdTVUJESVInKQorICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctYScsICctLWF1dG9yZXYnLCBoZWxwPSdXaGVuIGZldGNoaW5nIGZyb20gYSBnaXQgcmVwb3NpdG9yeSwgc2V0IFNSQ1JFViBpbiB0aGUgcmVjaXBlIHRvIGEgZmxvYXRpbmcgcmV2aXNpb24gaW5zdGVhZCBvZiBmaXhlZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy0ta2VlcC10ZW1wJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nS2VlcCB0ZW1wb3JhcnkgZGlyZWN0b3J5IChmb3IgZGVidWdnaW5nKScpCiAgICAgcGFyc2VyX2NyZWF0ZS5zZXRfZGVmYXVsdHMoZnVuYz1jcmVhdGVfcmVjaXBlKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkKaW5kZXggZjg0ZWMzZC4uZTkxNGU1MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ2NtYWtlJykKICAgICAgICAgICAgIHZhbHVlcyA9IENtYWtlUmVjaXBlSGFuZGxlci5leHRyYWN0X2NtYWtlX2RlcHMobGluZXNfYmVmb3JlLCBzcmN0cmVlLCBleHRyYXZhbHVlcykKICAgICAgICAgICAgIGNsYXNzZXMuZXh0ZW5kKHZhbHVlcy5wb3AoJ2luaGVyaXQnLCAnJykuc3BsaXQoKSkKLSAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyVzID0gIiVzIicgJSAodmFyLCB2YWx1ZSkpCiAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgU3BlY2lmeSBhbnkgb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIGNtYWtlIHVzaW5nIEVYVFJBX09FQ01BS0U6JykKICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnRVhUUkFfT0VDTUFLRSA9ICIiJykKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAgICAgICAgIGRlZiBmaW5kX2NtYWtlX3BhY2thZ2UocGtnKToKICAgICAgICAgICAgIFJlY2lwZUhhbmRsZXIubG9hZF9kZXZlbF9maWxlbWFwKHRpbmZvaWwuY29uZmlnX2RhdGEpCi0gICAgICAgICAgICBmb3IgZm4sIHBuIGluIFJlY2lwZUhhbmRsZXIucmVjaXBlY21ha2VmaWxlbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIGZuLCBwbiBpbiBSZWNpcGVIYW5kbGVyLnJlY2lwZWNtYWtlZmlsZW1hcC5pdGVtcygpOgogICAgICAgICAgICAgICAgIHNwbGl0bmFtZSA9IGZuLnNwbGl0KCcvJykKICAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRuYW1lKSA+IDE6CiAgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0bmFtZVswXS5sb3dlcigpLnN0YXJ0c3dpdGgocGtnLmxvd2VyKCkpOgpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIGRlZiBwYXJzZV9jbWFrZV9maWxlKGZuLCBwYXRocz1Ob25lKToKICAgICAgICAgICAgIHNlYXJjaHBhdGhzID0gKHBhdGhzIG9yIFtdKSArIFtvcy5wYXRoLmRpcm5hbWUoZm4pXQogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdQYXJzaW5nIGZpbGUgJXMnICUgZm4pCi0gICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKQEAgLTM0OCwxMyArMzQ4LDEzIEBACiAgICAgICAgICAgICBhdXRvY29uZiA9IFRydWUKICAgICAgICAgICAgIHZhbHVlcyA9IEF1dG90b29sc1JlY2lwZUhhbmRsZXIuZXh0cmFjdF9hdXRvdG9vbHNfZGVwcyhsaW5lc19iZWZvcmUsIHNyY3RyZWUsIGV4dHJhdmFsdWVzKQogICAgICAgICAgICAgY2xhc3Nlcy5leHRlbmQodmFsdWVzLnBvcCgnaW5oZXJpdCcsICcnKS5zcGxpdCgpKQotICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gdmFsdWVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gdmFsdWVzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJXMgPSAiJXMiJyAlICh2YXIsIHZhbHVlKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbmZmaWxlID0gUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnY29uZmlndXJlJ10pCiAgICAgICAgICAgICBpZiBjb25mZmlsZToKICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoaXMgaXMganVzdCBhIHByZS1nZW5lcmF0ZWQgYXV0b2NvbmYgY29uZmlndXJlIHNjcmlwdAotICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mZmlsZVswXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mZmlsZVswXSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mJyBpbiBmLnJlYWRsaW5lKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbmYgPSBUcnVlCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICMgTGFzdCByZXNvcnQKICAgICAgICAgICAgIGNvbmZmaWxlID0gUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnY29uZmlndXJlJ10pCiAgICAgICAgICAgICBpZiBjb25mZmlsZToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZmZpbGVbMF0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZmZpbGVbMF0sICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdWRVJTSU9OPScpIG9yIGxpbmUuc3RhcnRzd2l0aCgnUEFDS0FHRV9WRVJTSU9OPScpOgpAQCAtNDQyLDExICs0NDIsMTIgQEAKICAgICAgICAgYWNfaW5pdF9yZSA9IHJlLmNvbXBpbGUoJ0FDX0lOSVRcKFxzKihbXixdKyksXHMqKFteLF0rKVssKV0uKicpCiAgICAgICAgIGFtX2luaXRfcmUgPSByZS5jb21waWxlKCdBTV9JTklUX0FVVE9NQUtFXChccyooW14sXSspLFxzKihbXixdKylbLCldLionKQogICAgICAgICBkZWZpbmVfcmUgPSByZS5jb21waWxlKCdccyoobTRfKT9kZWZpbmVcKFxzKihbXixdKyksXHMqKFteLF0rKVwpJykKKyAgICAgICAgdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoJyhbMC05Ll0rKScpCiAKICAgICAgICAgZGVmaW5lcyA9IHt9CiAgICAgICAgIGRlZiBzdWJzdF9kZWZpbmVzKHZhbHVlKToKICAgICAgICAgICAgIG5ld3ZhbHVlID0gdmFsdWUKLSAgICAgICAgICAgIGZvciBkZWZpbmUsIGRlZnZhbCBpbiBkZWZpbmVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIGRlZmluZSwgZGVmdmFsIGluIGRlZmluZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3ZhbHVlLnJlcGxhY2UoZGVmaW5lLCBkZWZ2YWwpCiAgICAgICAgICAgICBpZiBuZXd2YWx1ZSAhPSB2YWx1ZToKICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RfZGVmaW5lcyhuZXd2YWx1ZSkKQEAgLTQ4OCw2ICs0ODksNyBAQAogICAgICAgICAgICAgZm9yIGhhbmRsZXIgaW4gaGFuZGxlcnM6CiAgICAgICAgICAgICAgICAgaWYgaGFuZGxlci5wcm9jZXNzX21hY3JvKHNyY3RyZWUsIGtleXdvcmQsIHZhbHVlLCBwcm9jZXNzX3ZhbHVlLCBsaWJkZXBzLCBwY2RlcHMsIGRlcHMsIG91dGxpbmVzLCBpbmhlcml0cywgdmFsdWVzKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ0ZvdW5kIGtleXdvcmQgJXMgd2l0aCB2YWx1ZSAiJXMiJyAlIChrZXl3b3JkLCB2YWx1ZSkpCiAgICAgICAgICAgICBpZiBrZXl3b3JkID09ICdQS0dfQ0hFQ0tfTU9EVUxFUyc6CiAgICAgICAgICAgICAgICAgcmVzID0gcGtnX3JlLnNlYXJjaCh2YWx1ZSkKICAgICAgICAgICAgICAgICBpZiByZXM6CkBAIC01NjksMTAgKzU3MSwyMSBAQAogICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKCdzcWxpdGUzJykKICAgICAgICAgICAgIGVsaWYga2V5d29yZCA9PSAnQVhfTElCX1RBR0xJQic6CiAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoJ3RhZ2xpYicpCi0gICAgICAgICAgICBlbGlmIGtleXdvcmQgPT0gJ0FYX1BLR19TV0lHJzoKLSAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZCgnc3dpZycpCisgICAgICAgICAgICBlbGlmIGtleXdvcmQgaW4gWydBWF9QS0dfU1dJRycsICdBQ19QUk9HX1NXSUcnXToKKyAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZCgnc3dpZy1uYXRpdmUnKQogICAgICAgICAgICAgZWxpZiBrZXl3b3JkID09ICdBWF9QUk9HX1hTTFRQUk9DJzoKICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZCgnbGlieHNsdC1uYXRpdmUnKQorICAgICAgICAgICAgZWxpZiBrZXl3b3JkIGluIFsnQUNfUFlUSE9OX0RFVkVMJywgJ0FYX1BZVEhPTl9ERVZFTCcsICdBTV9QQVRIX1BZVEhPTiddOgorICAgICAgICAgICAgICAgIHB5dGhvbmNsYXNzID0gJ3B5dGhvbm5hdGl2ZScKKyAgICAgICAgICAgICAgICByZXMgPSB2ZXJzaW9uX3JlLnNlYXJjaCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlcy5ncm91cCgxKS5zdGFydHN3aXRoKCczJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBweXRob25jbGFzcyA9ICdweXRob24zbmF0aXZlJworICAgICAgICAgICAgICAgICMgQXZvaWQgcmVwbGFjaW5nIHB5dGhvbjNuYXRpdmUgd2l0aCBweXRob25uYXRpdmUKKyAgICAgICAgICAgICAgICBpZiBub3QgcHl0aG9uY2xhc3MgaW4gaW5oZXJpdHMgYW5kIG5vdCAncHl0aG9uM25hdGl2ZScgaW4gaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgIGlmICdweXRob25uYXRpdmUnIGluIGluaGVyaXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMucmVtb3ZlKCdweXRob25uYXRpdmUnKQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0cy5hcHBlbmQocHl0aG9uY2xhc3MpCiAgICAgICAgICAgICBlbGlmIGtleXdvcmQgPT0gJ0FYX1dJVEhfQ1VSU0VTJzoKICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZCgnbmN1cnNlcycpCiAgICAgICAgICAgICBlbGlmIGtleXdvcmQgPT0gJ0FYX1BBVEhfQkRCJzoKQEAgLTYzOCw3ICs2NTEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgJ0FYX0xJQl9TUUxJVEUzJywKICAgICAgICAgICAgICAgICAgICAgJ0FYX0xJQl9UQUdMSUInLAogICAgICAgICAgICAgICAgICAgICAnQVhfUEtHX1NXSUcnLAorICAgICAgICAgICAgICAgICAgICAnQUNfUFJPR19TV0lHJywKICAgICAgICAgICAgICAgICAgICAgJ0FYX1BST0dfWFNMVFBST0MnLAorICAgICAgICAgICAgICAgICAgICAnQUNfUFlUSE9OX0RFVkVMJywKKyAgICAgICAgICAgICAgICAgICAgJ0FYX1BZVEhPTl9ERVZFTCcsCisgICAgICAgICAgICAgICAgICAgICdBTV9QQVRIX1BZVEhPTicsCiAgICAgICAgICAgICAgICAgICAgICdBWF9XSVRIX0NVUlNFUycsCiAgICAgICAgICAgICAgICAgICAgICdBWF9QQVRIX0JEQicsCiAgICAgICAgICAgICAgICAgICAgICdBWF9QQVRIX0xJQl9QQ1JFJywKQEAgLTY1NCw3ICs2NzEsNyBAQAogICAgICAgICAgICAgbmVzdGluZyA9IDAKICAgICAgICAgICAgIGluX2tleXdvcmQgPSAnJwogICAgICAgICAgICAgcGFydGlhbCA9ICcnCi0gICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGUsICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgICAgIGlmIGluX2tleXdvcmQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsICs9ICcgJyArIGxpbmUuc3RyaXAoKQpAQCAtNjgyLDcgKzY5OSw3IEBACiAgICAgICAgICAgICAgICAgcHJvY2Vzc19tYWNybyhpbl9rZXl3b3JkLCBwYXJ0aWFsKQogCiAgICAgICAgIGlmIGV4dHJhdmFsdWVzOgotICAgICAgICAgICAgZm9yIGssdiBpbiBleHRyYXZhbHVlcy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGssdiBpbiBsaXN0KGV4dHJhdmFsdWVzLml0ZW1zKCkpOgogICAgICAgICAgICAgICAgIGlmIHY6CiAgICAgICAgICAgICAgICAgICAgIGlmIHYuc3RhcnRzd2l0aCgnJCcpIG9yIHYuc3RhcnRzd2l0aCgnQCcpIG9yIHYuc3RhcnRzd2l0aCgnJScpOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGV4dHJhdmFsdWVzW2tdCkBAIC03MzcsNyArNzU0LDcgQEAKICAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgbWFrZWZpbGUgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydNYWtlZmlsZSddKQorICAgICAgICBtYWtlZmlsZSA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ01ha2VmaWxlJywgJ21ha2VmaWxlJywgJ0dOVW1ha2VmaWxlJ10pCiAgICAgICAgIGlmIG1ha2VmaWxlOgogICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIE5PVEU6IHRoaXMgaXMgYSBNYWtlZmlsZS1vbmx5IHBpZWNlIG9mIHNvZnR3YXJlLCBzbyB3ZSBjYW5ub3QgZ2VuZXJhdGUgbXVjaCBvZiB0aGUnKQogICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIHJlY2lwZSBhdXRvbWF0aWNhbGx5IC0geW91IHdpbGwgbmVlZCB0byBleGFtaW5lIHRoZSBNYWtlZmlsZSB5b3Vyc2VsZiBhbmQgZW5zdXJlJykKQEAgLTc1Myw3ICs3NzAsNyBAQAogICAgICAgICAgICAgaWYgc2NhbmZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKHNjYW5maWxlKToKICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBBdXRvdG9vbHNSZWNpcGVIYW5kbGVyLmV4dHJhY3RfYXV0b3Rvb2xzX2RlcHMobGluZXNfYmVmb3JlLCBzcmN0cmVlLCBhY2ZpbGU9c2NhbmZpbGUpCiAgICAgICAgICAgICAgICAgY2xhc3Nlcy5leHRlbmQodmFsdWVzLnBvcCgnaW5oZXJpdCcsICcnKS5zcGxpdCgpKQotICAgICAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgdmFyLCB2YWx1ZSBpbiB2YWx1ZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICAgICAgaWYgdmFyID09ICdERVBFTkRTJzoKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogc29tZSBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgbWF5IGJlIG9wdGlvbmFsLCBjaGVjayB0aGUgTWFrZWZpbGUgYW5kL29yIHVwc3RyZWFtIGRvY3VtZW50YXRpb24nKQogICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCclcyA9ICIlcyInICUgKHZhciwgdmFsdWUpKQpAQCAtNzgwLDcgKzc5Nyw3IEBACiAgICAgICAgICAgICBpZiBpbnN0YWxsdGFyZ2V0OgogICAgICAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIFRoaXMgaXMgYSBndWVzczsgYWRkaXRpb25hbCBhcmd1bWVudHMgbWF5IGJlIHJlcXVpcmVkJykKICAgICAgICAgICAgICAgICBtYWtlYXJncyA9ICcnCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlWzBdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlWzBdLCAncicsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTAwKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdERVNURElSJyBpbiBmLnJlYWRsaW5lKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZWFyZ3MgKz0gIiAnREVTVERJUj0ke0R9JyIKQEAgLTgwOSw3ICs4MjYsNyBAQAogICAgICAgICAgICAgdmVyc2lvbiA9IE5vbmUKICAgICAgICAgICAgIGZvciBmaWxlaXRlbSBpbiBmaWxlbGlzdDoKICAgICAgICAgICAgICAgICBsaW5lY291bnQgPSAwCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVpdGVtLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVpdGVtLCAncicsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpLnN0cmlwKCciXCcnKQogICAgICAgICAgICAgICAgICAgICAgICAgbGluZWNvdW50ICs9IDEKQEAgLTgzMCwyMiArODQ3LDM1IEBACiAgICAgICAgIGlmICdQVicgaW4gZXh0cmF2YWx1ZXMgYW5kICdQTicgaW4gZXh0cmF2YWx1ZXM6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZmlsZWxpc3QgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWycqLnNwZWMnXSwgcmVjdXJzaXZlPVRydWUpCi0gICAgICAgIHBuID0gTm9uZQotICAgICAgICBwdiA9IE5vbmUKKyAgICAgICAgdmFsdWVtYXAgPSB7J05hbWUnOiAnUE4nLAorICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbic6ICdQVicsCisgICAgICAgICAgICAgICAgICAgICdTdW1tYXJ5JzogJ1NVTU1BUlknLAorICAgICAgICAgICAgICAgICAgICAnVXJsJzogJ0hPTUVQQUdFJywKKyAgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UnOiAnTElDRU5TRSd9CisgICAgICAgIGZvdW5kdmFsdWVzID0ge30KICAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVsaXN0OgogICAgICAgICAgICAgbGluZWNvdW50ID0gMAotICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVpdGVtLCAncicpIGFzIGY6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZWl0ZW0sICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTmFtZTonKSBhbmQgbm90IHBuOgotICAgICAgICAgICAgICAgICAgICAgICAgcG4gPSBsaW5lLnNwbGl0KCc6JylbMV0uc3RyaXAoKQotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1ZlcnNpb246JykgYW5kIG5vdCBwdjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHB2ID0gbGluZS5zcGxpdCgnOicpWzFdLnN0cmlwKCkKLSAgICAgICAgICAgIGlmIHB2IG9yIHBuOgotICAgICAgICAgICAgICAgIGlmIHB2IGFuZCBub3QgJ1BWJyBpbiBleHRyYXZhbHVlcyBhbmQgdmFsaWRhdGVfcHYocHYpOgotICAgICAgICAgICAgICAgICAgICBleHRyYXZhbHVlc1snUFYnXSA9IHB2Ci0gICAgICAgICAgICAgICAgaWYgcG4gYW5kIG5vdCAnUE4nIGluIGV4dHJhdmFsdWVzOgotICAgICAgICAgICAgICAgICAgICBleHRyYXZhbHVlc1snUE4nXSA9IHBuCi0gICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZm9yIHZhbHVlLCB2YXJuYW1lIGluIHZhbHVlbWFwLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgodmFsdWUgKyAnOicpIGFuZCBub3QgdmFybmFtZSBpbiBmb3VuZHZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZHZhbHVlc1t2YXJuYW1lXSA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGZvdW5kdmFsdWVzKSA9PSBsZW4odmFsdWVtYXApOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgJ1BWJyBpbiBmb3VuZHZhbHVlczoKKyAgICAgICAgICAgIGlmIG5vdCB2YWxpZGF0ZV9wdihmb3VuZHZhbHVlc1snUFYnXSk6CisgICAgICAgICAgICAgICAgZGVsIGZvdW5kdmFsdWVzWydQViddCisgICAgICAgIGxpY2Vuc2UgPSBmb3VuZHZhbHVlcy5wb3AoJ0xJQ0VOU0UnLCBOb25lKQorICAgICAgICBpZiBsaWNlbnNlOgorICAgICAgICAgICAgbGljY29tbWVudCA9ICcjIE5PVEU6IHNwZWMgZmlsZSBpbmRpY2F0ZXMgdGhlIGxpY2Vuc2UgbWF5IGJlICIlcyInICUgbGljZW5zZQorICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdMSUNFTlNFID0nKToKKyAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmluc2VydChpLCBsaWNjb21tZW50KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKGxpY2NvbW1lbnQpCisgICAgICAgIGV4dHJhdmFsdWVzLnVwZGF0ZShmb3VuZHZhbHVlcykKIAogZGVmIHJlZ2lzdGVyX3JlY2lwZV9oYW5kbGVycyhoYW5kbGVycyk6CiAgICAgIyBTZXQgcHJpb3JpdGllcyB3aXRoIHNvbWUgZ2FwcyBzbyB0aGF0IG90aGVyIHBsdWdpbnMgY2FuIGluc2VydApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkKaW5kZXggYzM4MjMzMC4uZTQxZDgxYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXNfcHl0aG9uLnB5CkBAIC02MSw4ICs2MSw2IEBACiAgICAgfQogICAgICMgUE4vUFYgYXJlIGFscmVhZHkgc2V0IGJ5IHJlY2lwZXRvb2wgY29yZSAmIGRlc2MgY2FuIGJlIGV4dHJlbWVseSBsb25nCiAgICAgZXhjbHVkZWRfZmllbGRzID0gWwotICAgICAgICAnTmFtZScsCi0gICAgICAgICdWZXJzaW9uJywKICAgICAgICAgJ0Rlc2NyaXB0aW9uJywKICAgICBdCiAgICAgc2V0dXBfcGFyc2VfbWFwID0gewpAQCAtODgsOCArODYsMTEgQEAKICAgICBdCiAgICAgc2V0dXBhcmdfbXVsdGlfbGluZV92YWx1ZXMgPSBbJ0Rlc2NyaXB0aW9uJ10KICAgICByZXBsYWNlbWVudHMgPSBbCisgICAgICAgICgnTGljZW5zZScsIHInICskJywgJycpLAorICAgICAgICAoJ0xpY2Vuc2UnLCByJ14gKycsICcnKSwKICAgICAgICAgKCdMaWNlbnNlJywgcicgJywgJy0nKSwKLSAgICAgICAgKCdMaWNlbnNlJywgcictTGljZW5zZSQnLCAnJyksCisgICAgICAgICgnTGljZW5zZScsIHInXkdOVS0nLCAnJyksCisgICAgICAgICgnTGljZW5zZScsIHInLVtMbF1pY2VuW2NzXWUoLD8tW1Z2XWVyc2lvbik/JywgJycpLAogICAgICAgICAoJ0xpY2Vuc2UnLCByJ15VTktOT1dOJCcsICcnKSwKIAogICAgICAgICAjIFJlbW92ZSBjdXJyZW50bHkgdW5oYW5kbGVkIHZlcnNpb24gbnVtYmVycyBmcm9tIHRoZXNlIHZhcmlhYmxlcwpAQCAtMjE4LDYgKzIxOSw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGluZm8gPSBzZWxmLmdldF9zZXR1cF9hcmdzX2luZm8oc2V0dXBzY3JpcHQpCiAKKyAgICAgICAgIyBHcmFiIHRoZSBsaWNlbnNlIHZhbHVlIGJlZm9yZSBhcHBseWluZyByZXBsYWNlbWVudHMKKyAgICAgICAgbGljZW5zZV9zdHIgPSBpbmZvLmdldCgnTGljZW5zZScsICcnKS5zdHJpcCgpCisKICAgICAgICAgc2VsZi5hcHBseV9pbmZvX3JlcGxhY2VtZW50cyhpbmZvKQogCiAgICAgICAgIGlmIHVzZXNfc2V0dXB0b29sczoKQEAgLTIyNSw2MyArMjI5LDUzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnZGlzdHV0aWxzJykKIAorICAgICAgICBpZiBsaWNlbnNlX3N0cjoKKyAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lc19iZWZvcmUpOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTElDRU5TRSA9ICcpOgorICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuaW5zZXJ0KGksICcjIE5PVEU6IExpY2Vuc2UgaW4gc2V0dXAucHkvUEtHSU5GTyBpczogJXMnICUgbGljZW5zZV9zdHIpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgaWYgJ0NsYXNzaWZpZXInIGluIGluZm86CisgICAgICAgICAgICBleGlzdGluZ19saWNlbnNlcyA9IGluZm8uZ2V0KCdMaWNlbnNlJywgJycpCiAgICAgICAgICAgICBsaWNlbnNlcyA9IFtdCiAgICAgICAgICAgICBmb3IgY2xhc3NpZmllciBpbiBpbmZvWydDbGFzc2lmaWVyJ106CiAgICAgICAgICAgICAgICAgaWYgY2xhc3NpZmllciBpbiBzZWxmLmNsYXNzaWZpZXJfbGljZW5zZV9tYXA6CiAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSBzZWxmLmNsYXNzaWZpZXJfbGljZW5zZV9tYXBbY2xhc3NpZmllcl0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGljZW5zZSA9PSAnQXBhY2hlJyBhbmQgJ0FwYWNoZS0yLjAnIGluIGV4aXN0aW5nX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9ICdBcGFjaGUtMi4wJworICAgICAgICAgICAgICAgICAgICBlbGlmIGxpY2Vuc2UgPT0gJ0dQTCc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnR1BMLTIuMCcgaW4gZXhpc3RpbmdfbGljZW5zZXMgb3IgJ0dQTHYyJyBpbiBleGlzdGluZ19saWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlID0gJ0dQTC0yLjAnCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmICdHUEwtMy4wJyBpbiBleGlzdGluZ19saWNlbnNlcyBvciAnR1BMdjMnIGluIGV4aXN0aW5nX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSAnR1BMLTMuMCcKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaWNlbnNlID09ICdMR1BMJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdMR1BMLTIuMScgaW4gZXhpc3RpbmdfbGljZW5zZXMgb3IgJ0xHUEx2Mi4xJyBpbiBleGlzdGluZ19saWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlID0gJ0xHUEwtMi4xJworICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAnTEdQTC0yLjAnIGluIGV4aXN0aW5nX2xpY2Vuc2VzIG9yICdMR1BMdjInIGluIGV4aXN0aW5nX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSAnTEdQTC0yLjAnCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmICdMR1BMLTMuMCcgaW4gZXhpc3RpbmdfbGljZW5zZXMgb3IgJ0xHUEx2MycgaW4gZXhpc3RpbmdfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9ICdMR1BMLTMuMCcKICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGxpY2Vuc2UpCiAKICAgICAgICAgICAgIGlmIGxpY2Vuc2VzOgogICAgICAgICAgICAgICAgIGluZm9bJ0xpY2Vuc2UnXSA9ICcgJiAnLmpvaW4obGljZW5zZXMpCiAKLQogICAgICAgICAjIE1hcCBQS0ctSU5GTyAmIHNldHVwLnB5IGZpZWxkcyB0byBiaXRiYWtlIHZhcmlhYmxlcwotICAgICAgICBiYmluZm8gPSB7fQotICAgICAgICBmb3IgZmllbGQsIHZhbHVlcyBpbiBpbmZvLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgZmllbGQsIHZhbHVlcyBpbiBpbmZvLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBmaWVsZCBpbiBzZWxmLmV4Y2x1ZGVkX2ZpZWxkczoKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBpZiBmaWVsZCBub3QgaW4gc2VsZi5iYnZhcl9tYXA6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZXMsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZXMsIHN0cik6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSAnICcuam9pbihzdHIodikgZm9yIHYgaW4gdmFsdWVzIGlmIHYpCiAKICAgICAgICAgICAgIGJidmFyID0gc2VsZi5iYnZhcl9tYXBbZmllbGRdCi0gICAgICAgICAgICBpZiBiYnZhciBub3QgaW4gYmJpbmZvIGFuZCB2YWx1ZToKLSAgICAgICAgICAgICAgICBiYmluZm9bYmJ2YXJdID0gdmFsdWUKLQotICAgICAgICBjb21tZW50X2xpY19saW5lID0gTm9uZQotICAgICAgICBmb3IgcG9zLCBsaW5lIGluIGVudW1lcmF0ZShsaXN0KGxpbmVzX2JlZm9yZSkpOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJykgYW5kICdMSUNFTlNFJyBpbiBsaW5lOgotICAgICAgICAgICAgICAgIGNvbW1lbnRfbGljX2xpbmUgPSBwb3MKLSAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdMSUNFTlNFID0nKSBhbmQgJ0xJQ0VOU0UnIGluIGJiaW5mbzoKLSAgICAgICAgICAgICAgICBpZiBsaW5lIGluICgnTElDRU5TRSA9ICJVbmtub3duIicsICdMSUNFTlNFID0gIkNMT1NFRCInKToKLSAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlW3Bvc10gPSAnTElDRU5TRSA9ICJ7fSInLmZvcm1hdChiYmluZm9bJ0xJQ0VOU0UnXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZSA9PSAnTElDRU5TRSA9ICJDTE9TRUQiJyBhbmQgY29tbWVudF9saWNfbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZVtjb21tZW50X2xpY19saW5lOnBvc10gPSBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgV0FSTklORzogdGhlIGZvbGxvd2luZyBMSUNFTlNFIHZhbHVlIGlzIGEgYmVzdCBndWVzcyAtIGl0IGlzIHlvdXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSB2YWx1ZSBpcyBjb21wbGV0ZSBhbmQgY29ycmVjdC4nCi0gICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgZGVsIGJiaW5mb1snTElDRU5TRSddCi0KLSAgICAgICAgc3JjX3VyaV9saW5lID0gTm9uZQotICAgICAgICBmb3IgcG9zLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lc19iZWZvcmUpOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTUkNfVVJJID0nKToKLSAgICAgICAgICAgICAgICBzcmNfdXJpX2xpbmUgPSBwb3MKLQotICAgICAgICBpZiBiYmluZm86Ci0gICAgICAgICAgICBtZGluZm8gPSBbJyddCi0gICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWQoYmJpbmZvKToKLSAgICAgICAgICAgICAgICB2ID0gYmJpbmZvW2tdCi0gICAgICAgICAgICAgICAgbWRpbmZvLmFwcGVuZCgne30gPSAie30iJy5mb3JtYXQoaywgdikpCi0gICAgICAgICAgICBpZiBzcmNfdXJpX2xpbmU6Ci0gICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlW3NyY191cmlfbGluZS0xOnNyY191cmlfbGluZS0xXSA9IG1kaW5mbwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuZXh0ZW5kKG1kaW5mbykKKyAgICAgICAgICAgIGlmIGJidmFyIG5vdCBpbiBleHRyYXZhbHVlcyBhbmQgdmFsdWU6CisgICAgICAgICAgICAgICAgZXh0cmF2YWx1ZXNbYmJ2YXJdID0gdmFsdWUKIAogICAgICAgICBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcyA9IHNlbGYuc2Nhbl9zZXR1cF9weXRob25fZGVwcyhzcmN0cmVlLCBzZXR1cF9pbmZvLCBzZXR1cF9ub25fbGl0ZXJhbHMpCiAKQEAgLTI5NCw4ICsyODgsOCBAQAogICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBUaGUgdXBzdHJlYW0gbmFtZXMgbWF5IG5vdCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gYml0YmFrZSBwYWNrYWdlIG5hbWVzLicpCiAgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjJykKICAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgVW5jb21tZW50IHRoaXMgbGluZSB0byBlbmFibGUgYWxsIHRoZSBvcHRpb25hbCBmZWF0dXJlcy4nKQotICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnI1BBQ0tBR0VDT05GSUcgPz0gInt9IicuZm9ybWF0KCcgJy5qb2luKGsubG93ZXIoKSBmb3IgayBpbiBleHRyYXNfcmVxLml0ZXJrZXlzKCkpKSkKLSAgICAgICAgICAgICAgICBmb3IgZmVhdHVyZSwgZmVhdHVyZV9yZXFzIGluIGV4dHJhc19yZXEuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjUEFDS0FHRUNPTkZJRyA/PSAie30iJy5mb3JtYXQoJyAnLmpvaW4oay5sb3dlcigpIGZvciBrIGluIGV4dHJhc19yZXEpKSkKKyAgICAgICAgICAgICAgICBmb3IgZmVhdHVyZSwgZmVhdHVyZV9yZXFzIGluIGV4dHJhc19yZXEuaXRlbXMoKToKICAgICAgICAgICAgICAgICAgICAgdW5tYXBwZWRfZGVwcy5kaWZmZXJlbmNlX3VwZGF0ZShmZWF0dXJlX3JlcXMpCiAKICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9yZXFfZGVwcyA9ICgncHl0aG9uLScgKyByLnJlcGxhY2UoJy4nLCAnLScpLmxvd2VyKCkgZm9yIHIgaW4gc29ydGVkKGZlYXR1cmVfcmVxcykpCkBAIC0zNjEsNyArMzU1LDcgQEAKIAogICAgICAgICAjIE5haXZlIG1hcHBpbmcgb2Ygc2V0dXAoKSBhcmd1bWVudHMgdG8gUEtHLUlORk8gZmllbGQgbmFtZXMKICAgICAgICAgZm9yIGQgaW4gW2luZm8sIG5vbl9saXRlcmFsc106Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBsaXN0KGQuaXRlbXMoKSk6CiAgICAgICAgICAgICAgICAgbmV3X2tleSA9IF9tYXAoa2V5KQogICAgICAgICAgICAgICAgIGlmIG5ld19rZXkgIT0ga2V5OgogICAgICAgICAgICAgICAgICAgICBkZWwgZFtrZXldCkBAIC00MzYsMTQgKzQzMCwxNCBAQAogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQogCiAgICAgICAgICAgICB2YWx1ZSA9IGluZm9bdmFyaWFibGVdCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CiAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gcmVwbGFjZV92YWx1ZShzZWFyY2gsIHJlcGxhY2UsIHZhbHVlKQogICAgICAgICAgICAgICAgIGlmIG5ld192YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBkZWwgaW5mb1t2YXJpYWJsZV0KICAgICAgICAgICAgICAgICBlbGlmIG5ld192YWx1ZSAhPSB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgaW5mb1t2YXJpYWJsZV0gPSBuZXdfdmFsdWUKLSAgICAgICAgICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgJ2l0ZXJpdGVtcycpOgotICAgICAgICAgICAgICAgIGZvciBka2V5LCBkdmFsdWUgaW4gdmFsdWUuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBlbGlmIGhhc2F0dHIodmFsdWUsICdpdGVtcycpOgorICAgICAgICAgICAgICAgIGZvciBka2V5LCBkdmFsdWUgaW4gbGlzdCh2YWx1ZS5pdGVtcygpKToKICAgICAgICAgICAgICAgICAgICAgbmV3X2xpc3QgPSBbXQogICAgICAgICAgICAgICAgICAgICBmb3IgcG9zLCBhX3ZhbHVlIGluIGVudW1lcmF0ZShkdmFsdWUpOgogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gcmVwbGFjZV92YWx1ZShzZWFyY2gsIHJlcGxhY2UsIGFfdmFsdWUpCkBAIC01MDQsOCArNDk4LDEwIEBACiAgICAgICAgIGZvciBkZXAgaW4gc2Nhbm5lZF9kZXBzOgogICAgICAgICAgICAgbWFwcGVkID0gcHJvdmlkZWRfcGFja2FnZXMuZ2V0KGRlcCkKICAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ01hcHBlZCAlcyB0byAlcycgJSAoZGVwLCBtYXBwZWQpKQogICAgICAgICAgICAgICAgIG1hcHBlZF9kZXBzLmFkZChtYXBwZWQpCiAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQ291bGQgbm90IG1hcCAlcycgJSBkZXApCiAgICAgICAgICAgICAgICAgdW5tYXBwZWRfZGVwcy5hZGQoZGVwKQogICAgICAgICByZXR1cm4gbWFwcGVkX2RlcHMsIHVubWFwcGVkX2RlcHMKIApAQCAtNTE2LDcgKzUxMiw3IEBACiAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGVwX291dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBkZXBfb3V0cHV0LmRlY29kZSgndXRmLTgnKS5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKICAgICAgICAgICAgICAgICBkZXAsIGZpbGVuYW1lID0gbGluZS5zcGxpdCgnXHQnLCAxKQogICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcvc2V0dXAucHknKToKQEAgLTU1OCw3ICs1NTQsNyBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlc19pbmZvLml0ZXJrZXlzKCk6CisgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXNfaW5mbzoKICAgICAgICAgICAgICAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgogICAgICAgICAgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aChzdWZmaXgpOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTU2Niw2ICs1NjIsOCBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgaWYgZm4uc3RhcnRzd2l0aChkeW5sb2FkX2RpciArIG9zLnNlcCk6CisgICAgICAgICAgICAgICAgICAgIGlmICcvLmRlYnVnLycgaW4gZm46CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShmbikKICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgPSBiYXNlLnNwbGl0KCcuJywgMSlbMF0KICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXNbcHJvdmlkZWRdID0gb3MucGF0aC5iYXNlbmFtZShwa2dkYXRhZmlsZSkKQEAgLTYwOCw3ICs2MDYsNyBAQAogICAgIHZpc2l0b3IudmlzaXQocGFyc2VkKQogCiAgICAgbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zID0ge30sIFtdCi0gICAgZm9yIGtleSwgdmFsdWUgaW4gdmlzaXRvci5rZXl3b3Jkcy5pdGVtcygpOgorICAgIGZvciBrZXksIHZhbHVlIGluIGxpc3QodmlzaXRvci5rZXl3b3Jkcy5pdGVtcygpKToKICAgICAgICAgaWYga2V5ID09ICdleHRfbW9kdWxlcyc6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICBmb3IgZXh0IGluIHZhbHVlOgpAQCAtNjQwLDcgKzYzOCw3IEBACiAgICAgZGVmIHZpc2l0X3NldHVwKHNlbGYsIG5vZGUpOgogICAgICAgICBjYWxsID0gTGl0ZXJhbEFzdFRyYW5zZm9ybSgpLnZpc2l0KG5vZGUpCiAgICAgICAgIHNlbGYua2V5d29yZHMgPSBjYWxsLmtleXdvcmRzCi0gICAgICAgIGZvciBrLCB2IGluIHNlbGYua2V5d29yZHMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBrLCB2IGluIHNlbGYua2V5d29yZHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGhhc19ub25fbGl0ZXJhbHModik6CiAgICAgICAgICAgICAgICBzZWxmLm5vbl9saXRlcmFscy5hcHBlbmQoaykKIApAQCAtNzA2LDEwICs3MDQsMTAgQEAKIGRlZiBoYXNfbm9uX2xpdGVyYWxzKHZhbHVlKToKICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBhc3QuQVNUKToKICAgICAgICAgcmV0dXJuIFRydWUKLSAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAnaXRlcnZhbHVlcycpOgotICAgICAgICByZXR1cm4gYW55KGhhc19ub25fbGl0ZXJhbHModikgZm9yIHYgaW4gdmFsdWUuaXRlcnZhbHVlcygpKQorICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgJ3ZhbHVlcycpOgorICAgICAgICByZXR1cm4gYW55KGhhc19ub25fbGl0ZXJhbHModikgZm9yIHYgaW4gdmFsdWUudmFsdWVzKCkpCiAgICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAnX19pdGVyX18nKToKICAgICAgICAgcmV0dXJuIGFueShoYXNfbm9uX2xpdGVyYWxzKHYpIGZvciB2IGluIHZhbHVlKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa2VybmVsLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2tlcm5lbC5weQppbmRleCBjNmU4NmJkLi43ZGFjNTlmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa2VybmVsLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9rZXJuZWwucHkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAga3BhdGNobGV2ZWwgPSAtMQogICAgICAgICAgICAgICAgICAgICBrc3VibGV2ZWwgPSAtMQogICAgICAgICAgICAgICAgICAgICBrZXh0cmF2ZXJzaW9uID0gJycKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoZik6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA+IDEwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2ttb2QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa21vZC5weQppbmRleCBmZTM5ZWRiLi43Y2YxODhkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa21vZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa21vZC5weQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2ZpbGUsICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbW9kdWxlX2luY19yZS5tYXRjaChsaW5lLnN0cmlwKCkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX21vZHVsZSA9IFRydWUKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIGluX2luc3RhbGwgPSBGYWxzZQogICAgICAgICAgICAgaW5fY29tcGlsZSA9IEZhbHNlCiAgICAgICAgICAgICBpbnN0YWxsX3RhcmdldCA9IE5vbmUKLSAgICAgICAgICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAncicsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ2luc3RhbGw6Jyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5zdGFsbF9saW5lczoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9ucG0ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfbnBtLnB5CmluZGV4IGIzZmZjZGIuLjdiYjg0NGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9ucG0ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX25wbS5weQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQganNvbgotZnJvbSByZWNpcGV0b29sLmNyZWF0ZSBpbXBvcnQgUmVjaXBlSGFuZGxlciwgc3BsaXRfcGtnX2xpY2Vuc2VzCitmcm9tIHJlY2lwZXRvb2wuY3JlYXRlIGltcG9ydCBSZWNpcGVIYW5kbGVyLCBzcGxpdF9wa2dfbGljZW5zZXMsIGhhbmRsZV9saWNlbnNlX3ZhcnMsIGNoZWNrX25wbQogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncmVjaXBldG9vbCcpCiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIGxpY2Vuc2UgPSBkYXRhWydsaWNlbnNlJ10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGljZW5zZSwgZGljdCk6CiAgICAgICAgICAgICAgICAgbGljZW5zZSA9IGxpY2Vuc2UuZ2V0KCd0eXBlJywgTm9uZSkKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGxpY2Vuc2UKIAogICAgIGRlZiBfc2hyaW5rd3JhcChzZWxmLCBzcmN0cmVlLCBsb2NhbGZpbGVzZGlyLCBleHRyYXZhbHVlcywgbGluZXNfYmVmb3JlKToKICAgICAgICAgdHJ5OgpAQCAtODMsNiArODMsNjYgQEAKICAgICAgICAgZXh0cmF2YWx1ZXNbJ2V4dHJhZmlsZXMnXVsnbG9ja2Rvd24uanNvbiddID0gdG1wZmlsZQogICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdOUE1fTE9DS0RPV04gOj0gIiR7VEhJU0RJUn0vJHtQTn0vbG9ja2Rvd24uanNvbiInKQogCisgICAgZGVmIF9oYW5kbGVfZGVwZW5kZW5jaWVzKHNlbGYsIGQsIGRlcHMsIGxpbmVzX2JlZm9yZSwgc3JjdHJlZSk6CisgICAgICAgIGltcG9ydCBzY3JpcHR1dGlscworICAgICAgICAjIElmIHRoaXMgaXNuJ3QgYSBzaW5nbGUgbW9kdWxlIHdlIG5lZWQgdG8gZ2V0IHRoZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgIyBhbmQgYWRkIHRoZW0gdG8gU1JDX1VSSQorICAgICAgICBkZWYgdmFyZnVuYyh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgICAgICBpZiB2YXJuYW1lID09ICdTUkNfVVJJJzoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3JpZ3ZhbHVlLnN0YXJ0c3dpdGgoJ25wbTovLycpOgorICAgICAgICAgICAgICAgICAgICBzcmNfdXJpID0gb3JpZ3ZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAsIGRlcGRhdGEgaW4gZGVwcy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYuZ2V0X25vZGVfdmVyc2lvbihkZXAsIGRlcGRhdGEsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB2ZXJzaW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICducG06Ly9yZWdpc3RyeS5ucG1qcy5vcmc7bmFtZT0lczt2ZXJzaW9uPSVzO3N1YmRpcj1ub2RlX21vZHVsZXMvJXMnICUgKGRlcCwgdmVyc2lvbiwgZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHV0aWxzLmZldGNoX3VyaShkLCB1cmwsIHNyY3RyZWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3VyaS5hcHBlbmQodXJsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjX3VyaSwgTm9uZSwgLTEsIFRydWUKKyAgICAgICAgICAgIHJldHVybiBvcmlndmFsdWUsIE5vbmUsIDAsIFRydWUKKyAgICAgICAgdXBkYXRlZCwgbmV3bGluZXMgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKGxpbmVzX2JlZm9yZSwgWydTUkNfVVJJJ10sIHZhcmZ1bmMpCisgICAgICAgIGlmIHVwZGF0ZWQ6CisgICAgICAgICAgICBkZWwgbGluZXNfYmVmb3JlWzpdCisgICAgICAgICAgICBmb3IgbGluZSBpbiBuZXdsaW5lczoKKyAgICAgICAgICAgICAgICAjIEhhY2sgdG8gYXZvaWQgbmV3bGluZXMgdGhhdCBlZGl0X21ldGFkYXRhIGluc2VydHMKKyAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCisgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gdXBkYXRlZAorCisgICAgZGVmIF9yZXBsYWNlX2xpY2Vuc2VfdmFycyhzZWxmLCBzcmN0cmVlLCBsaW5lc19iZWZvcmUsIGhhbmRsZWQsIGV4dHJhdmFsdWVzLCBkKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgdHVwbGUpOgorICAgICAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0gJ2xpY2Vuc2UnOgorICAgICAgICAgICAgICAgICAgICBkZWwgaXRlbQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGNhbGxlZHZhcnMgPSBbXQorICAgICAgICBkZWYgdmFyZnVuYyh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgICAgICBpZiB2YXJuYW1lIGluIFsnTElDRU5TRScsICdMSUNfRklMRVNfQ0hLU1VNJ106CisgICAgICAgICAgICAgICAgZm9yIGksIGUgaW4gZW51bWVyYXRlKHJldmVyc2VkKG5ld2xpbmVzKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgPSBpCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBzdG9wID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBjYWxsZWR2YXJzLmFwcGVuZCh2YXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIGxlbihjYWxsZWR2YXJzKSA+IDE6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIHNlY29uZCB0aW1lIGFyb3VuZCwgcHV0IHRoZSBuZXcgbGljZW5zZSB0ZXh0IGluCisgICAgICAgICAgICAgICAgICAgIGluc2VydHBvcyA9IGxlbihuZXdsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2xpY2Vuc2VfdmFycyhzcmN0cmVlLCBuZXdsaW5lcywgaGFuZGxlZCwgZXh0cmF2YWx1ZXMsIGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUsIDAsIFRydWUKKyAgICAgICAgICAgIHJldHVybiBvcmlndmFsdWUsIE5vbmUsIDAsIFRydWUKKyAgICAgICAgdXBkYXRlZCwgbmV3bGluZXMgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKGxpbmVzX2JlZm9yZSwgWydMSUNFTlNFJywgJ0xJQ19GSUxFU19DSEtTVU0nXSwgdmFyZnVuYykKKyAgICAgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgICAgIGRlbCBsaW5lc19iZWZvcmVbOl0KKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5leHRlbmQobmV3bGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0RpZCBub3QgZmluZCBsaWNlbnNlIHZhcmlhYmxlcycpCisKICAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkLCBleHRyYXZhbHVlcyk6CiAgICAgICAgIGltcG9ydCBiYi51dGlscwogICAgICAgICBpbXBvcnQgb2UKQEAgLTkyLDExICsxNTIsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGRlZiByZWFkX3BhY2thZ2VfanNvbihmbik6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoZi5yZWFkKCkpCiAKICAgICAgICAgZmlsZXMgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydwYWNrYWdlLmpzb24nXSkKICAgICAgICAgaWYgZmlsZXM6CisgICAgICAgICAgICBjaGVja19ucG0odGluZm9pbC5jb25maWdfZGF0YSkKKwogICAgICAgICAgICAgZGF0YSA9IHJlYWRfcGFja2FnZV9qc29uKGZpbGVzWzBdKQogICAgICAgICAgICAgaWYgJ25hbWUnIGluIGRhdGEgYW5kICd2ZXJzaW9uJyBpbiBkYXRhOgogICAgICAgICAgICAgICAgIGV4dHJhdmFsdWVzWydQTiddID0gZGF0YVsnbmFtZSddCkBAIC0xMDQsOSArMTY2LDE1IEBACiAgICAgICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ25wbScpCiAgICAgICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKICAgICAgICAgICAgICAgICBpZiAnZGVzY3JpcHRpb24nIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NVTU1BUlkgPSAiJXMiJyAlIGRhdGFbJ2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICAgICAgICAgIGV4dHJhdmFsdWVzWydTVU1NQVJZJ10gPSBkYXRhWydkZXNjcmlwdGlvbiddCiAgICAgICAgICAgICAgICAgaWYgJ2hvbWVwYWdlJyBpbiBkYXRhOgotICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdIT01FUEFHRSA9ICIlcyInICUgZGF0YVsnaG9tZXBhZ2UnXSkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmF2YWx1ZXNbJ0hPTUVQQUdFJ10gPSBkYXRhWydob21lcGFnZSddCisKKyAgICAgICAgICAgICAgICBkZXBzID0gZGF0YS5nZXQoJ2RlcGVuZGVuY2llcycsIHt9KQorICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSBzZWxmLl9oYW5kbGVfZGVwZW5kZW5jaWVzKHRpbmZvaWwuY29uZmlnX2RhdGEsIGRlcHMsIGxpbmVzX2JlZm9yZSwgc3JjdHJlZSkKKyAgICAgICAgICAgICAgICBpZiB1cGRhdGVkOgorICAgICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcmVkbyB0aGUgbGljZW5zZSBzdHVmZgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXBsYWNlX2xpY2Vuc2VfdmFycyhzcmN0cmVlLCBsaW5lc19iZWZvcmUsIGhhbmRsZWQsIGV4dHJhdmFsdWVzLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQogCiAgICAgICAgICAgICAgICAgIyBTaHJpbmt3cmFwCiAgICAgICAgICAgICAgICAgbG9jYWxmaWxlc2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29sLW5wbScpCkBAIC0xMjgsNyArMTk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9IHNlbGYuX2hhbmRsZV9saWNlbnNlKGRhdGEpCiAgICAgICAgICAgICAgICAgICAgIGlmIGxpY2Vuc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlc1snJHtQTn0nXSA9IGxpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgZm9yIHBrZ25hbWUsIHBrZ2l0ZW0gaW4gbnBtcGFja2FnZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGZvciBwa2duYW1lLCBwa2dpdGVtIGluIG5wbXBhY2thZ2VzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBfLCBwZGF0YSA9IHBrZ2l0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSBzZWxmLl9oYW5kbGVfbGljZW5zZShwZGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpY2Vuc2U6CkBAIC0xMzYsNyArMjA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBOb3cgd3JpdGUgb3V0IHRoZSBwYWNrYWdlLXNwZWNpZmljIGxpY2Vuc2UgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBzdHJpcCBvdXQgdGhlIGpzb24gZGF0YSBkaWN0cyBmb3IgdGhpcyBzaW5jZSBzcGxpdF9wa2dfbGljZW5zZXMKICAgICAgICAgICAgICAgICAgICAgIyBpc24ndCBleHBlY3RpbmcgaXQKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBPcmRlcmVkRGljdCgoeCx5WzBdKSBmb3IgeCx5IGluIG5wbXBhY2thZ2VzLml0ZXJpdGVtcygpKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IE9yZGVyZWREaWN0KCh4LHlbMF0pIGZvciB4LHkgaW4gbnBtcGFja2FnZXMuaXRlbXMoKSkKICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXNbJyR7UE59J10gPSAnJwogICAgICAgICAgICAgICAgICAgICBwa2dsaWNlbnNlcyA9IHNwbGl0X3BrZ19saWNlbnNlcyhsaWN2YWx1ZXMsIHBhY2thZ2VzLCBsaW5lc19hZnRlciwgbGljZW5zZXMpCiAgICAgICAgICAgICAgICAgICAgIGFsbF9saWNlbnNlcyA9IGxpc3Qoc2V0KFtpdGVtIGZvciBwa2dsaWNlbnNlIGluIHBrZ2xpY2Vuc2VzLnZhbHVlcygpIGZvciBpdGVtIGluIHBrZ2xpY2Vuc2VdKSkKQEAgLTE0OCw5ICsyMTYsNTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmVbaV0gPSAnTElDRU5TRSA9ICIlcyInICUgJyAmICcuam9pbihhbGxfbGljZW5zZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAorICAgICAgICAgICAgICAgICMgTmVlZCB0byBtb3ZlIFMgc2V0dGluZyBhZnRlciBpbmhlcml0IG5wbQorICAgICAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lc19iZWZvcmUpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1MgPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLnBvcChpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuaW5zZXJ0KDAsICcjIE11c3QgYmUgc2V0IGFmdGVyIGluaGVyaXQgbnBtIHNpbmNlIHRoYXQgaXRzZWxmIHNldHMgUycpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5pbnNlcnQoMSwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgIHJldHVybiBGYWxzZQogCisgICAgIyBGSVhNRSB0aGlzIGlzIGR1cGxpY2F0ZWQgZnJvbSBsaWIvYmIvZmV0Y2gyL25wbS5weQorICAgIGRlZiBfcGFyc2VfdmlldyhzZWxmLCBvdXRwdXQpOgorICAgICAgICAnJycKKyAgICAgICAgUGFyc2UgdGhlIG91dHB1dCBvZiBucG0gdmlldyAtLWpzb247IHRoZSBsYXN0IEpTT04gcmVzdWx0CisgICAgICAgIGlzIGFzc3VtZWQgdG8gYmUgdGhlIG9uZSB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisgICAgICAgICcnJworICAgICAgICBwZGF0YSA9IE5vbmUKKyAgICAgICAgb3V0ZGVwcyA9IHt9CisgICAgICAgIGRhdGFsaW5lcyA9IFtdCisgICAgICAgIGJyYWNlbGV2ZWwgPSAwCisgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBicmFjZWxldmVsOgorICAgICAgICAgICAgICAgIGRhdGFsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGVsaWYgJ3snIGluIGxpbmU6CisgICAgICAgICAgICAgICAgZGF0YWxpbmVzID0gW10KKyAgICAgICAgICAgICAgICBkYXRhbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBicmFjZWxldmVsID0gYnJhY2VsZXZlbCArIGxpbmUuY291bnQoJ3snKSAtIGxpbmUuY291bnQoJ30nKQorICAgICAgICBpZiBkYXRhbGluZXM6CisgICAgICAgICAgICBwZGF0YSA9IGpzb24ubG9hZHMoJ1xuJy5qb2luKGRhdGFsaW5lcykpCisgICAgICAgIHJldHVybiBwZGF0YQorCisgICAgIyBGSVhNRSB0aGlzIGlzIGVmZmVjdGl2ZWx5IGR1cGxpY2F0ZWQgZnJvbSBsaWIvYmIvZmV0Y2gyL25wbS5weQorICAgICMgKHNwbGl0IG91dCBmcm9tIF9nZXRkZXBlbmRlbmNpZXMoKSkKKyAgICBkZWYgZ2V0X25vZGVfdmVyc2lvbihzZWxmLCBwa2csIHZlcnNpb24sIGQpOgorICAgICAgICBpbXBvcnQgYmIuZmV0Y2gyCisgICAgICAgIHBrZ2Z1bGxuYW1lID0gcGtnCisgICAgICAgIGlmIHZlcnNpb24gIT0gJyonIGFuZCBub3QgJy8nIGluIHZlcnNpb246CisgICAgICAgICAgICBwa2dmdWxsbmFtZSArPSAiQCclcyciICUgdmVyc2lvbgorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhbGxpbmcgZ2V0ZGVwcyBvbiAlcyIgJSBwa2cpCisgICAgICAgIHJ1bmVudiA9IGRpY3Qob3MuZW52aXJvbiwgUEFUSD1kLmdldFZhcignUEFUSCcsIFRydWUpKQorICAgICAgICBmZXRjaGNtZCA9ICJucG0gdmlldyAlcyAtLWpzb24iICUgcGtnZnVsbG5hbWUKKyAgICAgICAgb3V0cHV0LCBfID0gYmIucHJvY2Vzcy5ydW4oZmV0Y2hjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgZW52PXJ1bmVudiwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZGF0YSA9IHNlbGYuX3BhcnNlX3ZpZXcob3V0cHV0KQorICAgICAgICByZXR1cm4gZGF0YS5nZXQoJ3ZlcnNpb24nLCBOb25lKQorCiBkZWYgcmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzKGhhbmRsZXJzKToKICAgICBoYW5kbGVycy5hcHBlbmQoKE5wbVJlY2lwZUhhbmRsZXIoKSwgNjApKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvbmV3YXBwZW5kLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvbmV3YXBwZW5kLnB5CmluZGV4IGJkZjA2OTMuLmZiZGQ3YmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL25ld2FwcGVuZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9uZXdhcHBlbmQucHkKQEAgLTM5LDE2ICszOSw2IEBACiAgICAgdGluZm9pbCA9IGluc3RhbmNlCiAKIAotZGVmIF9wcm92aWRlX3RvX3BuKGNvb2tlciwgcHJvdmlkZSk6Ci0gICAgIiIiR2V0IHRoZSBuYW1lIG9mIHRoZSBwcmVmZXJyZWQgcmVjaXBlIGZvciB0aGUgc3BlY2lmaWVkIHByb3ZpZGUuIiIiCi0gICAgaW1wb3J0IGJiLnByb3ZpZGVycwotICAgIGZpbGVuYW1lcyA9IGNvb2tlci5yZWNpcGVjYWNoZS5wcm92aWRlcnNbcHJvdmlkZV0KLSAgICBlbGlnaWJsZSwgZm91bmRVbmlxdWUgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzKGZpbGVuYW1lcywgcHJvdmlkZSwgY29va2VyLmV4cGFuZGVkX2RhdGEsIGNvb2tlci5yZWNpcGVjYWNoZSkKLSAgICBmaWxlbmFtZSA9IGVsaWdpYmxlWzBdCi0gICAgcG4gPSBjb29rZXIucmVjaXBlY2FjaGUucGtnX2ZuW2ZpbGVuYW1lXQotICAgIHJldHVybiBwbgotCi0KIGRlZiBfZ2V0X3JlY2lwZV9maWxlKGNvb2tlciwgcG4pOgogICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscwogICAgIHJlY2lwZWZpbGUgPSBvZS5yZWNpcGV1dGlscy5wbl90b19yZWNpcGUoY29va2VyLCBwbikKQEAgLTcwLDggKzYwLDcgQEAKIGRlZiBuZXdhcHBlbmQoYXJncyk6CiAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCiAKLSAgICBwbiA9IF9wcm92aWRlX3RvX3BuKHRpbmZvaWwuY29va2VyLCBhcmdzLnRhcmdldCkKLSAgICByZWNpcGVfcGF0aCA9IF9nZXRfcmVjaXBlX2ZpbGUodGluZm9pbC5jb29rZXIsIHBuKQorICAgIHJlY2lwZV9wYXRoID0gX2dldF9yZWNpcGVfZmlsZSh0aW5mb2lsLmNvb2tlciwgYXJncy50YXJnZXQpCiAKICAgICByZCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuY3JlYXRlQ29weSgpCiAgICAgcmQuc2V0VmFyKCdGSUxFJywgcmVjaXBlX3BhdGgpCkBAIC04MSw3ICs3MCw3IEBACiAgICAgICAgIHJldHVybiAxCiAKICAgICBpZiBub3QgcGF0aF9vazoKLSAgICAgICAgbG9nZ2VyLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgY29ycmVjdCBzdWJkaXJlY3RvcnkgcGF0aCBmb3IgYmJhcHBlbmQgZmlsZSAtIGNoZWNrIHRoYXQgd2hhdCAlcyBhZGRzIHRvIEJCRklMRVMgYWxzbyBtYXRjaGVzIC5iYmFwcGVuZCBmaWxlcy4gVXNpbmcgJXMgZm9yIG5vdywgYnV0IHVudGlsIHlvdSBmaXggdGhpcyB0aGUgYmJhcHBlbmQgd2lsbCBub3QgYmUgYXBwbGllZC4nLCBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksIG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKSkKKyAgICAgICAgbG9nZ2VyLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgY29ycmVjdCBzdWJkaXJlY3RvcnkgcGF0aCBmb3IgYmJhcHBlbmQgZmlsZSAtIGNoZWNrIHRoYXQgd2hhdCAlcyBhZGRzIHRvIEJCRklMRVMgYWxzbyBtYXRjaGVzIC5iYmFwcGVuZCBmaWxlcy4gVXNpbmcgJXMgZm9yIG5vdywgYnV0IHVudGlsIHlvdSBmaXggdGhpcyB0aGUgYmJhcHBlbmQgd2lsbCBub3QgYmUgYXBwbGllZC4nLCBvcy5wYXRoLmpvaW4oYXJncy5kZXN0bGF5ZXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgb3MucGF0aC5kaXJuYW1lKGFwcGVuZF9wYXRoKSkKIAogICAgIGxheWVyZGlycyA9IFtvcy5wYXRoLmFic3BhdGgobGF5ZXJkaXIpIGZvciBsYXllcmRpciBpbiByZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKV0KICAgICBpZiBub3Qgb3MucGF0aC5hYnNwYXRoKGFyZ3MuZGVzdGxheWVyKSBpbiBsYXllcmRpcnM6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9zZXR2YXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9zZXR2YXIucHkKaW5kZXggNjU3ZDJiNi4uODU3MDFjMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvc2V0dmFyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL3NldHZhci5weQpAQCAtNTEsNyArNTEsNyBAQAogICAgIGlmIGFyZ3MucmVjaXBlX29ubHk6CiAgICAgICAgIHBhdGNoZXMgPSBbb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlX2ZpbGUoYXJncy5yZWNpcGVmaWxlLCB2YXJ2YWx1ZXMsIHBhdGNoPWFyZ3MucGF0Y2gpXQogICAgIGVsc2U6Ci0gICAgICAgIHJkID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKGFyZ3MucmVjaXBlZmlsZSwgTm9uZSwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUodGluZm9pbC5jb29rZXIsIGFyZ3MucmVjaXBlZmlsZSwgTm9uZSkKICAgICAgICAgaWYgbm90IHJkOgogICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgcGF0Y2hlcyA9IG9lLnJlY2lwZXV0aWxzLnBhdGNoX3JlY2lwZShyZCwgYXJncy5yZWNpcGVmaWxlLCB2YXJ2YWx1ZXMsIHBhdGNoPWFyZ3MucGF0Y2gpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkKaW5kZXggYWVmMTlkMy4uNWNjYzAyNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHR1dGlscy5weQpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgcmV0dXJuIHJldAogCiBkZWYgcnVuX2VkaXRvcihmbik6Ci0gICAgaWYgaXNpbnN0YW5jZShmbiwgYmFzZXN0cmluZyk6CisgICAgaWYgaXNpbnN0YW5jZShmbiwgc3RyKToKICAgICAgICAgcGFyYW1zID0gJyIlcyInICUgZm4KICAgICBlbHNlOgogICAgICAgICBwYXJhbXMgPSAnJwpAQCAtMTE2LDMgKzExNiwxNiBAQAogICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgbG9nZ2VyLmVycm9yKCJFeGVjdXRpb24gb2YgZWRpdG9yICclcycgZmFpbGVkOiAlcyIsIGVkaXRvciwgZXhjKQogICAgICAgICByZXR1cm4gMQorCitkZWYgaXNfc3JjX3VybChwYXJhbSk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgYSBwYXJhbWV0ZXIgaXMgYSBVUkwgYW5kIHJldHVybiBUcnVlIGlmIHNvCisgICAgTk9URTogYmUgY2FyZWZ1bCBhYm91dCBjaGFuZ2luZyB0aGlzIGFzIGl0IHdpbGwgaW5mbHVlbmNlIGhvdyBkZXZ0b29sL3JlY2lwZXRvb2wgY29tbWFuZCBsaW5lIGhhbmRsaW5nIHdvcmtzCisgICAgIiIiCisgICAgaWYgbm90IHBhcmFtOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbGlmICc6Ly8nIGluIHBhcmFtOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgcGFyYW0uc3RhcnRzd2l0aCgnZ2l0QCcpIG9yICgnQCcgaW4gcGFyYW0gYW5kIHBhcmFtLmVuZHN3aXRoKCcuZ2l0JykpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stZ3B0LndrcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLWdwdC53a3MKaW5kZXggZWEwMWNmMy4uOGQ3ZDhkZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stZ3B0LndrcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzCkBAIC02LDUgKzYsNSBAQAogcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAogcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNCAtLXVzZS11dWlkCiAKLWJvb3Rsb2FkZXIgIC0tcHRhYmxlIGdwdCAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCIKK2Jvb3Rsb2FkZXIgIC0tcHRhYmxlIGdwdCAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVMwLDExNTIwMG44IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMud2tzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stbXVsdGktcm9vdGZzLndrcwppbmRleCA4YTgxZjhmLi5mNjFkOTQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMud2tzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MKQEAgLTE5LDUgKzE5LDUgQEAKIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPXJvb3RmczEgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKIHBhcnQgL3Jlc2N1ZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPXJvb3RmczIgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBzZWNvbmRhcnkgLS1hbGlnbiAxMDI0CiAKLWJvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAgY29uc29sZT10dHlTMCwxMTUyMDBuOCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCmluZGV4IDZkYjc0YTcuLjhjOGUwNmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MKQEAgLTQsNSArNCw1IEBACiAKIGluY2x1ZGUgY29tbW9uLndrcy5pbmMKIAotYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAiCitib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVMwLDExNTIwMG44IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtlZmlkaXNrLndrcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCmluZGV4IDY5NmU5NGUuLjlmNTM0ZmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCkBAIC00LDggKzQsOCBAQAogCiBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9Z3J1Yi1lZmkiIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAogCi1wYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0IC0tdXNlLXV1aWQKIAogcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCiAKLWJvb3Rsb2FkZXIgIC0tdGltZW91dD0xMCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCBjb25zb2xlPXR0eVBDSDAsMTE1MjAwIGNvbnNvbGU9dHR5MCB2bWFsbG9jPTI1Nk1CIHNuZC1oZGEtaW50ZWwuZW5hYmxlX21zaT0wIgorYm9vdGxvYWRlciAtLXB0YWJsZSBncHQgLS10aW1lb3V0PTUgLS1hcHBlbmQ9InJvb3Rmc3R5cGU9ZXh0NCBjb25zb2xlPXR0eVMwLDExNTIwMCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtndW1taWRpc2sud2tzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZ3VtbWlkaXNrLndrcwppbmRleCA2NmEyMmY2Li5mM2FlMDkwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtndW1taWRpc2sud2tzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MKQEAgLTgsNCArOCw0IEBACiAKIHBhcnQgc3dhcCAtLW9uZGlzayBzZGEgLS1zaXplIDQ0IC0tbGFiZWwgc3dhcDEgLS1mc3R5cGU9c3dhcAogCi1ib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgY29uc29sZT10dHlQQ0gwLDExNTIwMCBjb25zb2xlPXR0eTAgdm1hbGxvYz0yNTZNQiBzbmQtaGRhLWludGVsLmVuYWJsZV9tc2k9MCIKK2Jvb3Rsb2FkZXIgLS1wdGFibGUgZ3B0IC0tdGltZW91dD01ICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IGNvbnNvbGU9dHR5UzAsMTE1MjAwIGNvbnNvbGU9dHR5MCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zeXN0ZW1kLWJvb3RkaXNrLndrcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zeXN0ZW1kLWJvb3RkaXNrLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTAwMDIzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3N5c3RlbWQtYm9vdGRpc2sud2tzCkBAIC0wLDAgKzEsMTEgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZSB3aXRoIHN5c3RlbWQtYm9vdAorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4gVGhlIHNlbGVjdGVkIGJvb3Rsb2FkZXIgaXMgc3lzdGVtZC1ib290LgorCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9c3lzdGVtZC1ib290IiAtLW9uZGlzayBzZGEgLS1sYWJlbCBtc2RvcyAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKKworcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorCitwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworYm9vdGxvYWRlciAtLXB0YWJsZSBncHQgLS10aW1lb3V0PTUgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCBjb25zb2xlPXR0eVMwLDExNTIwMCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmYucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmYucHkKaW5kZXggZjdkNTZkMC4uMDcwZWMzMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25mLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZi5weQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBzZWxmLmNyZWF0ZSA9IHt9CiAKICAgICAgICAgIyBpbml0aWFsaXplIHRoZSB2YWx1ZXMgd2l0aCBkZWZhdWx0cwotICAgICAgICBmb3Igc2VjLCB2YWxzIGluIHNlbGYuREVGQVVMVFMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBzZWMsIHZhbHMgaW4gc2VsZi5ERUZBVUxUUy5pdGVtcygpOgogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBzZWMsIHZhbHMpCiAKICAgICBkZWYgX19zZXRfa3Njb25mKHNlbGYsIGtzY29uZik6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkKaW5kZXggNTIzMTI5Ny4uOGY3ZDE1MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jcmVhdG9yLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY3JlYXRvci5weQpAQCAtMjQsNyArMjQsNyBAQAogZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IKIAogCi1jbGFzcyBDcmVhdG9yKG9iamVjdCk6CitjbGFzcyBDcmVhdG9yKCk6CiAgICAgIiIiJHtuYW1lfTogY3JlYXRlIGFuIGltYWdlCiAKICAgICBVc2FnZToKQEAgLTQxLDcgKzQxLDcgQEAKIAogICAgICAgICAjIGdldCBjbWRzIGZyb20gcGx1Z2lubWdyCiAgICAgICAgICMgbWl4LWluIGRvX3N1YmNtZCBpbnRlcmZhY2UKLSAgICAgICAgZm9yIHN1YmNtZCwga2xhc3MgaW4gcGx1Z2lubWdyLmdldF9wbHVnaW5zKCdpbWFnZXInKS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHN1YmNtZCwga2xhc3MgaW4gcGx1Z2lubWdyLmdldF9wbHVnaW5zKCdpbWFnZXInKS5pdGVtcygpOgogICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoa2xhc3MsICdkb19jcmVhdGUnKToKICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJVbnN1cHBvcnRlZCBzdWJjbWQ6ICVzIiAlIHN1YmNtZCkKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtNjksNiArNjksNyBAQAogICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignJywgJy0tdG1wZnMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdlbmFibGV0bXBmcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NldHVwIHRtcGRpciBhcyB0bXBmcyB0byBhY2NlbGVyYXRlLCBleHBlcmltZW50YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmZWF0dXJlLCB1c2UgaXQgaWYgeW91IGhhdmUgbW9yZSB0aGFuIDRHIG1lbW9yeScpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS1ibWFwJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZ2VuZXJhdGUgLmJtYXAnKQogICAgICAgICByZXR1cm4gb3B0cGFyc2VyCiAKICAgICBkZWYgcG9zdG9wdHBhcnNlKHNlbGYsIG9wdGlvbnMpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9lbmdpbmUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weQppbmRleCA3NmI5M2U4Li41YjEwNDYzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgIFJldHVybnMgVHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgIiIiCiAgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpOgotICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHByaW50KCJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICByZXR1cm4gVHJ1ZQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBsaW5lW2lkeCArIGxlbigic2hvcnQtZGVzY3JpcHRpb246Iik6XS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmbmFtZSlbMF0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXNcdFx0JXMiICUgKGJhc2VuYW1lLmxqdXN0KDMwKSwgZGVzYykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiAgJXNcdFx0JXMiICUgKGJhc2VuYW1lLmxqdXN0KDMwKSwgZGVzYykpCiAKIAogZGVmIGxpc3RfY2FubmVkX2ltYWdlX2hlbHAoc2NyaXB0c19wYXRoLCBmdWxscGF0aCk6CkBAIC0xMjAsMTUgKzEyMCwxNSBAQAogICAgICAgICAgICAgaWYgbm90IGZvdW5kOgogICAgICAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgibG9uZy1kZXNjcmlwdGlvbjoiKQogICAgICAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgbGluZVtpZHggKyBsZW4oImxvbmctZGVzY3JpcHRpb246Iik6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobGluZVtpZHggKyBsZW4oImxvbmctZGVzY3JpcHRpb246Iik6XS5zdHJpcCgpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCIjIikKICAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKLSAgICAgICAgICAgICAgICBwcmludCBsaW5lW2lkeCArIGxlbigiIzoiKTpdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgcHJpbnQobGluZVtpZHggKyBsZW4oIiM6Iik6XS5yc3RyaXAoKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnJlYWsKIApAQCAtMTQwLDEyICsxNDAsMTIgQEAKICAgICBwbHVnaW5zID0gcGx1Z2lubWdyLmdldF9zb3VyY2VfcGx1Z2lucygpCiAKICAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6Ci0gICAgICAgIHByaW50ICIgICVzIiAlIHBsdWdpbgorICAgICAgICBwcmludCgiICAlcyIgJSBwbHVnaW4pCiAKIAogZGVmIHdpY19jcmVhdGUod2tzX2ZpbGUsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAogICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHNjcmlwdHNfcGF0aCwgaW1hZ2Vfb3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgIGNvbXByZXNzb3IsIGRlYnVnKToKKyAgICAgICAgICAgICAgIGNvbXByZXNzb3IsIGJtYXAsIGRlYnVnKToKICAgICAiIiJDcmVhdGUgaW1hZ2UKIAogICAgIHdrc19maWxlIC0gdXNlci1kZWZpbmVkIE9FIGtpY2tzdGFydCBmaWxlCkBAIC0xNTYsNiArMTU2LDcgQEAKICAgICBzY3JpcHRzX3BhdGggLSBhYnNvbHV0ZSBwYXRoIHRvIC9zY3JpcHRzIGRpcgogICAgIGltYWdlX291dHB1dF9kaXIgLSBkaXJuYW1lIHRvIGNyZWF0ZSBmb3IgaW1hZ2UKICAgICBjb21wcmVzc29yIC0gY29tcHJlc3NvciB1dGlsaXR5IHRvIGNvbXByZXNzIHRoZSBpbWFnZQorICAgIGJtYXAgLSBlbmFibGUgZ2VuZXJhdGlvbiBvZiAuYm1hcAogCiAgICAgTm9ybWFsbHksIHRoZSB2YWx1ZXMgZm9yIHRoZSBidWlsZCBhcnRpZmFjdHMgdmFsdWVzIGFyZSBkZXRlcm1pbmVkCiAgICAgYnkgJ3dpYyAtZScgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZSAnYml0YmFrZSAtZScgY29tbWFuZCBnaXZlbiBhbgpAQCAtMTc4LDcgKzE3OSw3IEBACiAgICAgdHJ5OgogICAgICAgICBvZV9idWlsZGRpciA9IG9zLmVudmlyb25bIkJVSUxERElSIl0KICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHByaW50ICJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIKKyAgICAgICAgcHJpbnQoIkJVSUxERElSIG5vdCBmb3VuZCwgZXhpdGluZy4gKERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudj8pIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGlmIGRlYnVnOgpAQCAtMTg2LDEwICsxODcsMTQgQEAKIAogICAgIGNyb2JqID0gY3JlYXRvci5DcmVhdG9yKCkKIAotICAgIGNyb2JqLm1haW4oWyJkaXJlY3QiLCBuYXRpdmVfc3lzcm9vdCwga2VybmVsX2RpciwgYm9vdGltZ19kaXIsIHJvb3Rmc19kaXIsCi0gICAgICAgICAgICAgICAgd2tzX2ZpbGUsIGltYWdlX291dHB1dF9kaXIsIG9lX2J1aWxkZGlyLCBjb21wcmVzc29yIG9yICIiXSkKKyAgICBjbWRsaW5lID0gWyJkaXJlY3QiLCBuYXRpdmVfc3lzcm9vdCwga2VybmVsX2RpciwgYm9vdGltZ19kaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgd2tzX2ZpbGUsIGltYWdlX291dHB1dF9kaXIsIG9lX2J1aWxkZGlyLCBjb21wcmVzc29yIG9yICIiXQorICAgIGlmIGJtYXA6CisgICAgICAgIGNtZGxpbmUuYXBwZW5kKCctLWJtYXAnKQogCi0gICAgcHJpbnQgIlxuVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZTpcbiAgJXMiICUgd2tzX2ZpbGUKKyAgICBjcm9iai5tYWluKGNtZGxpbmUpCisKKyAgICBwcmludCgiXG5UaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOlxuICAlcyIgJSB3a3NfZmlsZSkKIAogCiBkZWYgd2ljX2xpc3QoYXJncywgc2NyaXB0c19wYXRoKToKQEAgLTIwOSwxMCArMjE0LDEwIEBACiAgICAgICAgIHdrc19maWxlID0gYXJnc1swXQogICAgICAgICBmdWxscGF0aCA9IGZpbmRfY2FubmVkX2ltYWdlKHNjcmlwdHNfcGF0aCwgd2tzX2ZpbGUpCiAgICAgICAgIGlmIG5vdCBmdWxscGF0aDoKLSAgICAgICAgICAgIHByaW50ICJObyBpbWFnZSBuYW1lZCAlcyBmb3VuZCwgZXhpdGluZy4gIlwKKyAgICAgICAgICAgIHByaW50KCJObyBpbWFnZSBuYW1lZCAlcyBmb3VuZCwgZXhpdGluZy4gIlwKICAgICAgICAgICAgICAgICAgICIoVXNlICd3aWMgbGlzdCBpbWFnZXMnIHRvIGxpc3QgYXZhaWxhYmxlIGltYWdlcywgb3IgIlwKICAgICAgICAgICAgICAgICAgICJzcGVjaWZ5IGEgZnVsbHktcXVhbGlmaWVkIE9FIGtpY2tzdGFydCAoLndrcykgIlwKLSAgICAgICAgICAgICAgICAgICJmaWxlbmFtZSlcbiIgJSB3a3NfZmlsZQorICAgICAgICAgICAgICAgICAgImZpbGVuYW1lKVxuIiAlIHdrc19maWxlKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgbGlzdF9jYW5uZWRfaW1hZ2VfaGVscChzY3JpcHRzX3BhdGgsIGZ1bGxwYXRoKQogICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9maWxlbWFwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9maWxlbWFwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjQwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ZpbGVtYXAucHkKQEAgLTAsMCArMSw1NjEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKKyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIiIiCitUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHB5dGhvbiBpbXBsZW1lbnRzIGEgd2F5IHRvIGdldCBmaWxlIGJsb2NrLiBUd28gbWV0aG9kcworYXJlIHN1cHBvcnRlZCAtIHRoZSBGSUVNQVAgaW9jdGwgYW5kIHRoZSAnU0VFS19IT0xFIC8gU0VFS19EQVRBJyBmZWF0dXJlcyBvZgordGhlIGZpbGUgc2VlayBzeXNjYWxsLiBUaGUgZm9ybWVyIGlzIGltcGxlbWVudGVkIGJ5IHRoZSAnRmlsZW1hcEZpZW1hcCcgY2xhc3MsCit0aGUgbGF0dGVyIGlzIGltcGxlbWVudGVkIGJ5IHRoZSAnRmlsZW1hcFNlZWsnIGNsYXNzLiBCb3RoIGNsYXNzZXMgcHJvdmlkZSB0aGUKK3NhbWUgQVBJLiBUaGUgJ2ZpbGVtYXAnIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyB3aGljaCBjbGFzcyBjYW4gYmUgdXNlZAorYW5kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgorIiIiCisKKyMgRGlzYWJsZSB0aGUgZm9sbG93aW5nIHB5bGludCByZWNvbW1lbmRhdGlvbnM6CisjICAgKiBUb28gbWFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIChSMDkwMikKKyMgcHlsaW50OiBkaXNhYmxlPVIwOTAyCisKK2ltcG9ydCBvcworaW1wb3J0IHN0cnVjdAoraW1wb3J0IGFycmF5CitpbXBvcnQgZmNudGwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKKworZGVmIGdldF9ibG9ja19zaXplKGZpbGVfb2JqKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGJsb2NrIHNpemUgZm9yIGZpbGUgb2JqZWN0ICdmaWxlX29iaicuIEVycm9ycyBhcmUgaW5kaWNhdGVkIGJ5IHRoZQorICAgICdJT0Vycm9yJyBleGNlcHRpb24uCisgICAgIiIiCisKKyAgICBmcm9tIGZjbnRsIGltcG9ydCBpb2N0bAorICAgIGltcG9ydCBzdHJ1Y3QKKworICAgICMgR2V0IHRoZSBibG9jayBzaXplIG9mIHRoZSBob3N0IGZpbGUtc3lzdGVtIGZvciB0aGUgaW1hZ2UgZmlsZSBieSBjYWxsaW5nCisgICAgIyB0aGUgRklHRVRCU1ogaW9jdGwgKG51bWJlciAyKS4KKyAgICBiaW5hcnlfZGF0YSA9IGlvY3RsKGZpbGVfb2JqLCAyLCBzdHJ1Y3QucGFjaygnSScsIDApKQorICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCdJJywgYmluYXJ5X2RhdGEpWzBdCisKK2NsYXNzIEVycm9yTm90U3VwcChFeGNlcHRpb24pOgorICAgICIiIgorICAgIEFuIGV4Y2VwdGlvbiBvZiB0aGlzIHR5cGUgaXMgcmFpc2VkIHdoZW4gdGhlICdGSUVNQVAnIG9yICdTRUVLX0hPTEUnIGZlYXR1cmUKKyAgICBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSB0aGUga2VybmVsIG9yIHRoZSBmaWxlLXN5c3RlbS4KKyAgICAiIiIKKyAgICBwYXNzCisKK2NsYXNzIEVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiQSBjbGFzcyBmb3IgYWxsIHRoZSBvdGhlciBleGNlcHRpb25zIHJhaXNlZCBieSB0aGlzIG1vZHVsZS4iIiIKKyAgICBwYXNzCisKKworY2xhc3MgX0ZpbGVtYXBCYXNlKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGEgY291cGxlIG9mIG90aGVyIGNsYXNzZXMgaW4gdGhpcyBtb2R1bGUuIFRoaXMKKyAgICBjbGFzcyBzaW1wbHkgcGVyZm9ybXMgdGhlIGNvbW1vbiBwYXJ0cyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzczogb3BlbnMKKyAgICB0aGUgaW1hZ2UgZmlsZSwgZ2V0cyBpdHMgc2l6ZSwgZXRjLiBUaGUgJ2xvZycgcGFyYW1ldGVyIGlzIHRoZSBsb2dnZXIgb2JqZWN0CisgICAgdG8gdXNlIGZvciBwcmludGluZyBtZXNzYWdlcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZSwgbG9nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6ZSBhIGNsYXNzIGluc3RhbmNlLiBUaGUgJ2ltYWdlJyBhcmd1bWVudCBpcyBmdWxsIHBhdGggdG8gdGhlCisgICAgICAgIGZpbGUgb3IgZmlsZSBvYmplY3QgdG8gb3BlcmF0ZSBvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fbG9nID0gbG9nCisgICAgICAgIGlmIHNlbGYuX2xvZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKyAgICAgICAgc2VsZi5fZl9pbWFnZV9uZWVkc19jbG9zZSA9IEZhbHNlCisKKyAgICAgICAgaWYgaGFzYXR0cihpbWFnZSwgImZpbGVubyIpOgorICAgICAgICAgICAgc2VsZi5fZl9pbWFnZSA9IGltYWdlCisgICAgICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2UubmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlCisgICAgICAgICAgICBzZWxmLl9vcGVuX2ltYWdlX2ZpbGUoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaW1hZ2Vfc2l6ZSA9IG9zLmZzdGF0KHNlbGYuX2ZfaW1hZ2UuZmlsZW5vKCkpLnN0X3NpemUKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoImNhbm5vdCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgZmlsZSAnJXMnOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuX2ZfaW1hZ2UubmFtZSwgZXJyKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmJsb2NrX3NpemUgPSBnZXRfYmxvY2tfc2l6ZShzZWxmLl9mX2ltYWdlKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBFcnJvcigiY2Fubm90IGdldCBibG9jayBzaXplIGZvciAnJXMnOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuX2ltYWdlX3BhdGgsIGVycikpCisKKyAgICAgICAgc2VsZi5ibG9ja3NfY250ID0gc2VsZi5pbWFnZV9zaXplICsgc2VsZi5ibG9ja19zaXplIC0gMQorICAgICAgICBzZWxmLmJsb2Nrc19jbnQgLy89IHNlbGYuYmxvY2tfc2l6ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2ZfaW1hZ2UuZmx1c2goKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBFcnJvcigiY2Fubm90IGZsdXNoIGltYWdlIGZpbGUgJyVzJzogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9pbWFnZV9wYXRoLCBlcnIpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmZzeW5jKHNlbGYuX2ZfaW1hZ2UuZmlsZW5vKCkpLAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBFcnJvcigiY2Fubm90IHN5bmNocm9uaXplIGltYWdlIGZpbGUgJyVzJzogJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5faW1hZ2VfcGF0aCwgZXJyLnN0cmVycm9yKSkKKworICAgICAgICBzZWxmLl9sb2cuZGVidWcoIm9wZW5lZCBpbWFnZSBcIiVzXCIiICUgc2VsZi5faW1hZ2VfcGF0aCkKKyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJibG9jayBzaXplICVkLCBibG9ja3MgY291bnQgJWQsIGltYWdlIHNpemUgJWQiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmJsb2NrX3NpemUsIHNlbGYuYmxvY2tzX2NudCwgc2VsZi5pbWFnZV9zaXplKSkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiJUaGUgY2xhc3MgZGVzdHJ1Y3RvciB3aGljaCBqdXN0IGNsb3NlcyB0aGUgaW1hZ2UgZmlsZS4iIiIKKyAgICAgICAgaWYgc2VsZi5fZl9pbWFnZV9uZWVkc19jbG9zZToKKyAgICAgICAgICAgIHNlbGYuX2ZfaW1hZ2UuY2xvc2UoKQorCisgICAgZGVmIF9vcGVuX2ltYWdlX2ZpbGUoc2VsZik6CisgICAgICAgICIiIk9wZW4gdGhlIGltYWdlIGZpbGUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2ZfaW1hZ2UgPSBvcGVuKHNlbGYuX2ltYWdlX3BhdGgsICdyYicpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCJjYW5ub3Qgb3BlbiBpbWFnZSBmaWxlICclcyc6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5faW1hZ2VfcGF0aCwgZXJyKSkKKworICAgICAgICBzZWxmLl9mX2ltYWdlX25lZWRzX2Nsb3NlID0gVHJ1ZQorCisgICAgZGVmIGJsb2NrX2lzX21hcHBlZChzZWxmLCBibG9jayk6ICMgcHlsaW50OiBkaXNhYmxlPVcwNjEzLFIwMjAxCisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBoYXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNoaWxkIGNsYXNzZXMuIEl0IHJldHVybnMKKyAgICAgICAgJ1RydWUnIGlmIGJsb2NrIG51bWJlciAnYmxvY2snIG9mIHRoZSBpbWFnZSBmaWxlIGlzIG1hcHBlZCBhbmQgJ0ZhbHNlJworICAgICAgICBvdGhlcndpc2UuCisgICAgICAgICIiIgorCisgICAgICAgIHJhaXNlIEVycm9yKCJ0aGUgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCIpCisKKyAgICBkZWYgYmxvY2tfaXNfdW5tYXBwZWQoc2VsZiwgYmxvY2spOiAjIHB5bGludDogZGlzYWJsZT1XMDYxMyxSMDIwMQorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaGFzIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBieSBjaGlsZCBjbGFzc2VzLiBJdCByZXR1cm5zCisgICAgICAgICdUcnVlJyBpZiBibG9jayBudW1iZXIgJ2Jsb2NrJyBvZiB0aGUgaW1hZ2UgZmlsZSBpcyBub3QgbWFwcGVkIChob2xlKQorICAgICAgICBhbmQgJ0ZhbHNlJyBvdGhlcndpc2UuCisgICAgICAgICIiIgorCisgICAgICAgIHJhaXNlIEVycm9yKCJ0aGUgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCIpCisKKyAgICBkZWYgZ2V0X21hcHBlZF9yYW5nZXMoc2VsZiwgc3RhcnQsIGNvdW50KTogIyBweWxpbnQ6IGRpc2FibGU9VzA2MTMsUjAyMDEKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0aG9kIGhhcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2hpbGQgY2xhc3Nlcy4gVGhpcyBpcyBhCisgICAgICAgIGdlbmVyYXRvciB3aGljaCB5aWVsZHMgcmFuZ2VzIG9mIG1hcHBlZCBibG9ja3MgaW4gdGhlIGZpbGUuIFRoZSByYW5nZXMKKyAgICAgICAgYXJlIHR1cGxlcyBvZiAyIGVsZW1lbnRzOiBbZmlyc3QsIGxhc3RdLCB3aGVyZSAnZmlyc3QnIGlzIHRoZSBmaXJzdAorICAgICAgICBtYXBwZWQgYmxvY2sgYW5kICdsYXN0JyBpcyB0aGUgbGFzdCBtYXBwZWQgYmxvY2suCisKKyAgICAgICAgVGhlIHJhbmdlcyBhcmUgeWllbGRlZCBmb3IgdGhlIGFyZWEgb2YgdGhlIGZpbGUgb2Ygc2l6ZSAnY291bnQnIGJsb2NrcywKKyAgICAgICAgc3RhcnRpbmcgZnJvbSBibG9jayAnc3RhcnQnLgorICAgICAgICAiIiIKKworICAgICAgICByYWlzZSBFcnJvcigidGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQiKQorCisgICAgZGVmIGdldF91bm1hcHBlZF9yYW5nZXMoc2VsZiwgc3RhcnQsIGNvdW50KTogIyBweWxpbnQ6IGRpc2FibGU9VzA2MTMsUjAyMDEKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0aG9kIGhhcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2hpbGQgY2xhc3Nlcy4gSnVzdCBsaWtlCisgICAgICAgICdnZXRfbWFwcGVkX3JhbmdlcygpJywgYnV0IHlpZWxkcyB1bm1hcHBlZCBibG9jayByYW5nZXMgaW5zdGVhZAorICAgICAgICAoaG9sZXMpLgorICAgICAgICAiIiIKKworICAgICAgICByYWlzZSBFcnJvcigidGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQiKQorCisKKyMgVGhlICdTRUVLX0hPTEUnIGFuZCAnU0VFS19EQVRBJyBvcHRpb25zIG9mIHRoZSBmaWxlIHNlZWsgc3lzdGVtIGNhbGwKK19TRUVLX0RBVEEgPSAzCitfU0VFS19IT0xFID0gNAorCitkZWYgX2xzZWVrKGZpbGVfb2JqLCBvZmZzZXQsIHdoZW5jZSk6CisgICAgIiIiVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB3aGljaCBpbnZva2VzICdvcy5sc2VlaycgZm9yIGZpbGUgb2JqZWN0CisgICAgJ2ZpbGVfb2JqJyBhbmQgd2l0aCBzcGVjaWZpZWQgJ29mZnNldCcgYW5kICd3aGVuY2UnLiBUaGUgJ3doZW5jZScKKyAgICBhcmd1bWVudCBpcyBzdXBwb3NlZCB0byBiZSBlaXRoZXIgJ19TRUVLX0RBVEEnIG9yICdfU0VFS19IT0xFJy4gV2hlbgorICAgIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSBvciBob2xlIHN0YXJ0aW5nIGZyb20gJ29mZnNldCcsIHRoaXMgZnVuY3Rpb24KKyAgICByZXR1cm5zICctMScuICBPdGhlcndpc2UgdGhlIGRhdGEgb3IgaG9sZSBwb3NpdGlvbiBpcyByZXR1cm5lZC4iIiIKKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG9zLmxzZWVrKGZpbGVfb2JqLmZpbGVubygpLCBvZmZzZXQsIHdoZW5jZSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICMgVGhlICdsc2Vlaycgc3lzdGVtIGNhbGwgcmV0dXJucyB0aGUgRU5YSU8gaWYgdGhlcmUgaXMgbm8gZGF0YSBvcgorICAgICAgICAjIGhvbGUgc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIG9mZnNldC4KKyAgICAgICAgaWYgZXJyLmVycm5vID09IG9zLmVycm5vLkVOWElPOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgZXJyLmVycm5vID09IG9zLmVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yTm90U3VwcCgidGhlIGtlcm5lbCBvciBmaWxlLXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJTRUVLX0hPTEVcIiBhbmQgXCJTRUVLX0RBVEFcIiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCitjbGFzcyBGaWxlbWFwU2VlayhfRmlsZW1hcEJhc2UpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgdXNlcyB0aGUgJ1NFRUtfSE9MRScgYW5kICdTRUVLX0RBVEEnIHRvIGZpbmQgZmlsZSBibG9jayBtYXBwaW5nLgorICAgIFVuZm9ydHVuYXRlbHksIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gaGF2ZSB3cml0ZQorICAgIGFjY2VzcyB0byB0aGUgaW1hZ2UgZmlsZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZSwgbG9nPU5vbmUpOgorICAgICAgICAiIiJSZWZlciB0aGUgJ19GaWxlbWFwQmFzZScgY2xhc3MgZm9yIHRoZSBkb2N1bWVudGF0aW9uLiIiIgorCisgICAgICAgICMgQ2FsbCB0aGUgYmFzZSBjbGFzcyBjb25zdHJ1Y3RvciBmaXJzdAorICAgICAgICBfRmlsZW1hcEJhc2UuX19pbml0X18oc2VsZiwgaW1hZ2UsIGxvZykKKyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwU2VlazogaW5pdGlhbGl6aW5nIikKKworICAgICAgICBzZWxmLl9wcm9iZV9zZWVrX2hvbGUoKQorCisgICAgZGVmIF9wcm9iZV9zZWVrX2hvbGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB3aGV0aGVyIHRoZSBzeXN0ZW0gaW1wbGVtZW50cyAnU0VFS19IT0xFJyBhbmQgJ1NFRUtfREFUQScuCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoZXJlIHNlZW1zIHRvIGJlIG5vIGNsZWFuIHdheSBmb3IgZGV0ZWN0aW5nIHRoaXMsCisgICAgICAgIGJlY2F1c2Ugb2Z0ZW4gdGhlIHN5c3RlbSBqdXN0IGZha2VzIHRoZW0gYnkganVzdCBhc3N1bWluZyB0aGF0IGFsbAorICAgICAgICBmaWxlcyBhcmUgZnVsbHkgbWFwcGVkLCBzbyAnU0VFS19IT0xFJyBhbHdheXMgcmV0dXJucyBFT0YgYW5kCisgICAgICAgICdTRUVLX0RBVEEnIGFsd2F5cyByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0LgorCisgICAgICAgIEkgY291bGQgbm90IGludmVudCBhIGJldHRlciB3YXkgb2YgZGV0ZWN0aW5nIHRoZSBmYWtlICdTRUVLX0hPTEUnCisgICAgICAgIGltcGxlbWVudGF0aW9uIHRoYW4ganVzdCB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgc2FtZQorICAgICAgICBkaXJlY3Rvcnkgd2hlcmUgdGhlIGltYWdlIGZpbGUgcmVzaWRlcy4gSXQgd291bGQgYmUgbmljZSB0byBjaGFuZ2UgdGhpcworICAgICAgICB0byBzb21ldGhpbmcgYmV0dGVyLgorICAgICAgICAiIiIKKworICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5faW1hZ2VfcGF0aCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0bXBfb2JqID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgidysiLCBkaXI9ZGlyZWN0b3J5KQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBFcnJvck5vdFN1cHAoImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgaW4gXCIlc1wiOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGRpcmVjdG9yeSwgZXJyKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5mdHJ1bmNhdGUodG1wX29iai5maWxlbm8oKSwgc2VsZi5ibG9ja19zaXplKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBFcnJvck5vdFN1cHAoImNhbm5vdCB0cnVuY2F0ZSB0ZW1wb3JhcnkgZmlsZSBpbiBcIiVzXCI6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGRpcmVjdG9yeSwgZXJyKSkKKworICAgICAgICBvZmZzID0gX2xzZWVrKHRtcF9vYmosIDAsIF9TRUVLX0hPTEUpCisgICAgICAgIGlmIG9mZnMgIT0gMDoKKyAgICAgICAgICAgICMgV2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgc3R1YiAnU0VFS19IT0xFJyBpbXBsZW1lbnRhdGlvbiB3aGljaAorICAgICAgICAgICAgIyBhbHdheXMgcmV0dXJucyBFT0YuCisgICAgICAgICAgICBzZWxmLl9sb2cuZGVidWcoImxzZWVrKDAsIFNFRUtfSE9MRSkgcmV0dXJuZWQgJWQiICUgb2ZmcykKKyAgICAgICAgICAgIHJhaXNlIEVycm9yTm90U3VwcCgidGhlIGZpbGUtc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIlNFRUtfSE9MRVwiIGFuZCBcIlNFRUtfREFUQVwiIGJ1dCBvbmx5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXMgYSBzdHViIGltcGxlbWVudGF0aW9uIikKKworICAgICAgICB0bXBfb2JqLmNsb3NlKCkKKworICAgIGRlZiBibG9ja19pc19tYXBwZWQoc2VsZiwgYmxvY2spOgorICAgICAgICAiIiJSZWZlciB0aGUgJ19GaWxlbWFwQmFzZScgY2xhc3MgZm9yIHRoZSBkb2N1bWVudGF0aW9uLiIiIgorICAgICAgICBvZmZzID0gX2xzZWVrKHNlbGYuX2ZfaW1hZ2UsIGJsb2NrICogc2VsZi5ibG9ja19zaXplLCBfU0VFS19EQVRBKQorICAgICAgICBpZiBvZmZzID09IC0xOgorICAgICAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IChvZmZzIC8vIHNlbGYuYmxvY2tfc2l6ZSA9PSBibG9jaykKKworICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBTZWVrOiBibG9ja19pc19tYXBwZWQoJWQpIHJldHVybnMgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChibG9jaywgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGJsb2NrX2lzX3VubWFwcGVkKHNlbGYsIGJsb2NrKToKKyAgICAgICAgIiIiUmVmZXIgdGhlICdfRmlsZW1hcEJhc2UnIGNsYXNzIGZvciB0aGUgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmJsb2NrX2lzX21hcHBlZChibG9jaykKKworICAgIGRlZiBfZ2V0X3JhbmdlcyhzZWxmLCBzdGFydCwgY291bnQsIHdoZW5jZTEsIHdoZW5jZTIpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzICdnZXRfbWFwcGVkX3JhbmdlcygpJyBhbmQKKyAgICAgICAgJ2dldF91bm1hcHBlZF9yYW5nZXMoKScgZGVwZW5kaW5nIG9uIHdoYXQgaXMgcGFzc2VkIGluIHRoZSAnd2hlbmNlMScKKyAgICAgICAgYW5kICd3aGVuY2UyJyBhcmd1bWVudHMuCisgICAgICAgICIiIgorCisgICAgICAgIGFzc2VydCB3aGVuY2UxICE9IHdoZW5jZTIKKyAgICAgICAgZW5kID0gc3RhcnQgKiBzZWxmLmJsb2NrX3NpemUKKyAgICAgICAgbGltaXQgPSBlbmQgKyBjb3VudCAqIHNlbGYuYmxvY2tfc2l6ZQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGFydCA9IF9sc2VlayhzZWxmLl9mX2ltYWdlLCBlbmQsIHdoZW5jZTEpCisgICAgICAgICAgICBpZiBzdGFydCA9PSAtMSBvciBzdGFydCA+PSBsaW1pdCBvciBzdGFydCA9PSBzZWxmLmltYWdlX3NpemU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgZW5kID0gX2xzZWVrKHNlbGYuX2ZfaW1hZ2UsIHN0YXJ0LCB3aGVuY2UyKQorICAgICAgICAgICAgaWYgZW5kID09IC0xIG9yIGVuZCA9PSBzZWxmLmltYWdlX3NpemU6CisgICAgICAgICAgICAgICAgZW5kID0gc2VsZi5ibG9ja3NfY250ICogc2VsZi5ibG9ja19zaXplCisgICAgICAgICAgICBpZiBlbmQgPiBsaW1pdDoKKyAgICAgICAgICAgICAgICBlbmQgPSBsaW1pdAorCisgICAgICAgICAgICBzdGFydF9ibGsgPSBzdGFydCAvLyBzZWxmLmJsb2NrX3NpemUKKyAgICAgICAgICAgIGVuZF9ibGsgPSBlbmQgLy8gc2VsZi5ibG9ja19zaXplIC0gMQorICAgICAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwU2VlazogeWllbGRpbmcgcmFuZ2UgKCVkLCAlZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhcnRfYmxrLCBlbmRfYmxrKSkKKyAgICAgICAgICAgIHlpZWxkIChzdGFydF9ibGssIGVuZF9ibGspCisKKyAgICBkZWYgZ2V0X21hcHBlZF9yYW5nZXMoc2VsZiwgc3RhcnQsIGNvdW50KToKKyAgICAgICAgIiIiUmVmZXIgdGhlICdfRmlsZW1hcEJhc2UnIGNsYXNzIGZvciB0aGUgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwU2VlazogZ2V0X21hcHBlZF9yYW5nZXMoJWQsICAlZCglZCkpIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhcnQsIGNvdW50LCBzdGFydCArIGNvdW50IC0gMSkpCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfcmFuZ2VzKHN0YXJ0LCBjb3VudCwgX1NFRUtfREFUQSwgX1NFRUtfSE9MRSkKKworICAgIGRlZiBnZXRfdW5tYXBwZWRfcmFuZ2VzKHNlbGYsIHN0YXJ0LCBjb3VudCk6CisgICAgICAgICIiIlJlZmVyIHRoZSAnX0ZpbGVtYXBCYXNlJyBjbGFzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uIiIiCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcFNlZWs6IGdldF91bm1hcHBlZF9yYW5nZXMoJWQsICAlZCglZCkpIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhcnQsIGNvdW50LCBzdGFydCArIGNvdW50IC0gMSkpCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfcmFuZ2VzKHN0YXJ0LCBjb3VudCwgX1NFRUtfSE9MRSwgX1NFRUtfREFUQSkKKworCisjIEJlbG93IGdvZXMgdGhlIEZJRU1BUCBpb2N0bCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgbm90IHZlcnkgcmVhZGFibGUKKyMgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHRoZSByYXRoZXIgY29tcGxleCBGSUVNQVAgaW9jdGwuIFRvIHVuZGVyc3RhbmQgdGhlCisjIGNvZGUsIHlvdSBuZWVkIHRvIGtub3cgdGhlIEZJRU1BUCBpbnRlcmZhY2UsIHdoaWNoIGlzIGRvY3VtZW50ZWQgaW4gdGhlCisjICJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZpZW1hcC50eHQiIGZpbGUgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzLgorCisjIEZvcm1hdCBzdHJpbmcgZm9yICdzdHJ1Y3QgZmllbWFwJworX0ZJRU1BUF9GT1JNQVQgPSAiPVFRTExMTCIKKyMgc2l6ZW9mKHN0cnVjdCBmaWVtYXApCitfRklFTUFQX1NJWkUgPSBzdHJ1Y3QuY2FsY3NpemUoX0ZJRU1BUF9GT1JNQVQpCisjIEZvcm1hdCBzdHJpbmcgZm9yICdzdHJ1Y3QgZmllbWFwX2V4dGVudCcKK19GSUVNQVBfRVhURU5UX0ZPUk1BVCA9ICI9UVFRUVFMTExMIgorIyBzaXplb2Yoc3RydWN0IGZpZW1hcF9leHRlbnQpCitfRklFTUFQX0VYVEVOVF9TSVpFID0gc3RydWN0LmNhbGNzaXplKF9GSUVNQVBfRVhURU5UX0ZPUk1BVCkKKyMgVGhlIEZJRU1BUCBpb2N0bCBudW1iZXIKK19GSUVNQVBfSU9DVEwgPSAweEMwMjA2NjBCCisjIFRoaXMgRklFTUFQIGlvY3RsIGZsYWcgd2hpY2ggaW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdG8gc3luYyB0aGUgZmlsZSBiZWZvcmUKKyMgcmVhZGluZyB0aGUgYmxvY2sgbWFwCitfRklFTUFQX0ZMQUdfU1lOQyA9IDB4MDAwMDAwMDEKKyMgU2l6ZSBvZiB0aGUgYnVmZmVyIGZvciAnc3RydWN0IGZpZW1hcF9leHRlbnQnIGVsZW1lbnRzIHdoaWNoIHdpbGwgYmUgdXNlZAorIyB3aGVuIGludm9raW5nIHRoZSBGSUVNQVAgaW9jdGwuIFRoZSBsYXJnZXIgaXMgdGhlIGJ1ZmZlciwgdGhlIGxlc3MgdGltZXMgdGhlCisjIEZJRU1BUCBpb2N0bCB3aWxsIGJlIGludm9rZWQuCitfRklFTUFQX0JVRkZFUl9TSVpFID0gMjU2ICogMTAyNAorCitjbGFzcyBGaWxlbWFwRmllbWFwKF9GaWxlbWFwQmFzZSk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBBUEkgdG8gdGhlIEZJRU1BUCBpb2N0bC4gTmFtZWx5LCBpdCBhbGxvd3MgdG8gaXRlcmF0ZQorICAgIG92ZXIgYWxsIG1hcHBlZCBibG9ja3MgYW5kIG92ZXIgYWxsIGhvbGVzLgorCisgICAgVGhpcyBjbGFzcyBzeW5jaHJvbml6ZXMgdGhlIGltYWdlIGZpbGUgZXZlcnkgdGltZSBpdCBpbnZva2VzIHRoZSBGSUVNQVAKKyAgICBpb2N0bCBpbiBvcmRlciB0byB3b3JrLWFyb3VuZCBlYXJseSBGSUVNQVAgaW1wbGVtZW50YXRpb24ga2VybmVsIGJ1Z3MuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2UsIGxvZz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemUgYSBjbGFzcyBpbnN0YW5jZS4gVGhlICdpbWFnZScgYXJndW1lbnQgaXMgZnVsbCB0aGUgZmlsZQorICAgICAgICBvYmplY3QgdG8gb3BlcmF0ZSBvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBDYWxsIHRoZSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yIGZpcnN0CisgICAgICAgIF9GaWxlbWFwQmFzZS5fX2luaXRfXyhzZWxmLCBpbWFnZSwgbG9nKQorICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBGaWVtYXA6IGluaXRpYWxpemluZyIpCisKKyAgICAgICAgc2VsZi5fYnVmX3NpemUgPSBfRklFTUFQX0JVRkZFUl9TSVpFCisKKyAgICAgICAgIyBDYWxjdWxhdGUgaG93IG1hbnkgJ3N0cnVjdCBmaWVtYXBfZXh0ZW50JyBlbGVtZW50cyBmaXQgdGhlIGJ1ZmZlcgorICAgICAgICBzZWxmLl9idWZfc2l6ZSAtPSBfRklFTUFQX1NJWkUKKyAgICAgICAgc2VsZi5fZmllbWFwX2V4dGVudF9jbnQgPSBzZWxmLl9idWZfc2l6ZSAvLyBfRklFTUFQX0VYVEVOVF9TSVpFCisgICAgICAgIGFzc2VydCBzZWxmLl9maWVtYXBfZXh0ZW50X2NudCA+IDAKKyAgICAgICAgc2VsZi5fYnVmX3NpemUgPSBzZWxmLl9maWVtYXBfZXh0ZW50X2NudCAqIF9GSUVNQVBfRVhURU5UX1NJWkUKKyAgICAgICAgc2VsZi5fYnVmX3NpemUgKz0gX0ZJRU1BUF9TSVpFCisKKyAgICAgICAgIyBBbGxvY2F0ZSBhIG11dGFibGUgYnVmZmVyIGZvciB0aGUgRklFTUFQIGlvY3RsCisgICAgICAgIHNlbGYuX2J1ZiA9IGFycmF5LmFycmF5KCdCJywgWzBdICogc2VsZi5fYnVmX3NpemUpCisKKyAgICAgICAgIyBDaGVjayBpZiB0aGUgRklFTUFQIGlvY3RsIGlzIHN1cHBvcnRlZAorICAgICAgICBzZWxmLmJsb2NrX2lzX21hcHBlZCgwKQorCisgICAgZGVmIF9pbnZva2VfZmllbWFwKHNlbGYsIGJsb2NrLCBjb3VudCk6CisgICAgICAgICIiIgorICAgICAgICBJbnZva2UgdGhlIEZJRU1BUCBpb2N0bCBmb3IgJ2NvdW50JyBibG9ja3Mgb2YgdGhlIGZpbGUgc3RhcnRpbmcgZnJvbQorICAgICAgICBibG9jayBudW1iZXIgJ2Jsb2NrJy4KKworICAgICAgICBUaGUgZnVsbCByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBpcyBzdG9yZWQgaW4gJ3NlbGYuX2J1Zicgb24gZXhpdC4KKyAgICAgICAgUmV0dXJucyB0aGUgdW5wYWNrZWQgJ3N0cnVjdCBmaWVtYXAnIGRhdGEgc3RydWN0dXJlIGluIGZvcm0gb2YgYSBweXRob24KKyAgICAgICAgbGlzdCAoanVzdCBsaWtlICdzdHJ1Y3QudXBhY2soKScpLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxmLmJsb2Nrc19jbnQgIT0gMCBhbmQgKGJsb2NrIDwgMCBvciBibG9jayA+PSBzZWxmLmJsb2Nrc19jbnQpOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoImJhZCBibG9jayBudW1iZXIgJWQsIHNob3VsZCBiZSB3aXRoaW4gWzAsICVkXSIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGJsb2NrLCBzZWxmLmJsb2Nrc19jbnQpKQorCisgICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgJ3N0cnVjdCBmaWVtYXAnIHBhcnQgb2YgdGhlIGJ1ZmZlci4gV2UgdXNlIHRoZQorICAgICAgICAjICdfRklFTUFQX0ZMQUdfU1lOQycgZmxhZyBpbiBvcmRlciB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMKKyAgICAgICAgIyBzeW5jaHJvbml6ZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBlYXJseSBGSUVNQVAKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbnMgaGFkIG1hbnkgYnVncyByZWxhdGVkIHRvIGNhY2hlZCBkaXJ0eSBkYXRhLCBhbmQKKyAgICAgICAgIyBzeW5jaHJvbml6aW5nIHRoZSBmaWxlIGlzIGEgbmVjZXNzYXJ5IHdvcmstYXJvdW5kLgorICAgICAgICBzdHJ1Y3QucGFja19pbnRvKF9GSUVNQVBfRk9STUFULCBzZWxmLl9idWYsIDAsIGJsb2NrICogc2VsZi5ibG9ja19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2VsZi5ibG9ja19zaXplLCBfRklFTUFQX0ZMQUdfU1lOQywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWVtYXBfZXh0ZW50X2NudCwgMCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmY250bC5pb2N0bChzZWxmLl9mX2ltYWdlLCBfRklFTUFQX0lPQ1RMLCBzZWxmLl9idWYsIDEpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICMgTm90ZSwgdGhlIEZJRU1BUCBpb2N0bCBpcyBzdXBwb3J0ZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBzdGFydGluZworICAgICAgICAgICAgIyBmcm9tIHZlcnNpb24gMi42LjI4ICh5ZWFyIDIwMDgpLgorICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IG9zLmVycm5vLkVPUE5PVFNVUFA6CisgICAgICAgICAgICAgICAgZXJyc3RyID0gIkZpbGVtYXBGaWVtYXA6IHRoZSBGSUVNQVAgaW9jdGwgaXMgbm90IHN1cHBvcnRlZCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgdGhlIGZpbGUtc3lzdGVtIgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZyhlcnJzdHIpCisgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3JOb3RTdXBwKGVycnN0cikKKyAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBvcy5lcnJuby5FTk9UVFk6CisgICAgICAgICAgICAgICAgZXJyc3RyID0gIkZpbGVtYXBGaWVtYXA6IHRoZSBGSUVNQVAgaW9jdGwgaXMgbm90IHN1cHBvcnRlZCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgdGhlIGtlcm5lbCIKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2cuZGVidWcoZXJyc3RyKQorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yTm90U3VwcChlcnJzdHIpCisgICAgICAgICAgICByYWlzZSBFcnJvcigidGhlIEZJRU1BUCBpb2N0bCBmYWlsZWQgZm9yICclcyc6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5faW1hZ2VfcGF0aCwgZXJyKSkKKworICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjayhfRklFTUFQX0ZPUk1BVCwgc2VsZi5fYnVmWzpfRklFTUFQX1NJWkVdKQorCisgICAgZGVmIGJsb2NrX2lzX21hcHBlZChzZWxmLCBibG9jayk6CisgICAgICAgICIiIlJlZmVyIHRoZSAnX0ZpbGVtYXBCYXNlJyBjbGFzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uIiIiCisgICAgICAgIHN0cnVjdF9maWVtYXAgPSBzZWxmLl9pbnZva2VfZmllbWFwKGJsb2NrLCAxKQorCisgICAgICAgICMgVGhlIDNyZCBlbGVtZW50IG9mICdzdHJ1Y3RfZmllbWFwJyBpcyB0aGUgJ2ZtX21hcHBlZF9leHRlbnRzJyBmaWVsZC4KKyAgICAgICAgIyBJZiBpdCBjb250YWlucyB6ZXJvLCB0aGUgYmxvY2sgaXMgbm90IG1hcHBlZCwgb3RoZXJ3aXNlIGl0IGlzCisgICAgICAgICMgbWFwcGVkLgorICAgICAgICByZXN1bHQgPSBib29sKHN0cnVjdF9maWVtYXBbM10pCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogYmxvY2tfaXNfbWFwcGVkKCVkKSByZXR1cm5zICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoYmxvY2ssIHJlc3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBibG9ja19pc191bm1hcHBlZChzZWxmLCBibG9jayk6CisgICAgICAgICIiIlJlZmVyIHRoZSAnX0ZpbGVtYXBCYXNlJyBjbGFzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5ibG9ja19pc19tYXBwZWQoYmxvY2spCisKKyAgICBkZWYgX3VucGFja19maWVtYXBfZXh0ZW50KHNlbGYsIGluZGV4KToKKyAgICAgICAgIiIiCisgICAgICAgIFVucGFjayBhICdzdHJ1Y3QgZmllbWFwX2V4dGVudCcgc3RydWN0dXJlIG9iamVjdCBudW1iZXIgJ2luZGV4JyBmcm9tCisgICAgICAgIHRoZSBpbnRlcm5hbCAnc2VsZi5fYnVmJyBidWZmZXIuCisgICAgICAgICIiIgorCisgICAgICAgIG9mZnNldCA9IF9GSUVNQVBfU0laRSArIF9GSUVNQVBfRVhURU5UX1NJWkUgKiBpbmRleAorICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjayhfRklFTUFQX0VYVEVOVF9GT1JNQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZltvZmZzZXQgOiBvZmZzZXQgKyBfRklFTUFQX0VYVEVOVF9TSVpFXSkKKworICAgIGRlZiBfZG9fZ2V0X21hcHBlZF9yYW5nZXMoc2VsZiwgc3RhcnQsIGNvdW50KToKKyAgICAgICAgIiIiCisgICAgICAgIEltcGxlbWVudHMgbW9zdCB0aGUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlICAnZ2V0X21hcHBlZF9yYW5nZXMoKScKKyAgICAgICAgZ2VuZXJhdG9yOiBpbnZva2VzIHRoZSBGSUVNQVAgaW9jdGwsIHdhbGtzIHRocm91Z2ggdGhlIG1hcHBlZCBleHRlbnRzCisgICAgICAgIGFuZCB5aWVsZHMgbWFwcGVkIGJsb2NrIHJhbmdlcy4gSG93ZXZlciwgdGhlIHJhbmdlcyBtYXkgYmUgY29uc2VjdXRpdmUKKyAgICAgICAgKGUuZy4sICgxLCAxMDApLCAoMTAwLCAyMDApKSBhbmQgJ2dldF9tYXBwZWRfcmFuZ2VzKCknIHNpbXBseSBtZXJnZXMKKyAgICAgICAgdGhlbS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYmxvY2sgPSBzdGFydAorICAgICAgICB3aGlsZSBibG9jayA8IHN0YXJ0ICsgY291bnQ6CisgICAgICAgICAgICBzdHJ1Y3RfZmllbWFwID0gc2VsZi5faW52b2tlX2ZpZW1hcChibG9jaywgY291bnQpCisKKyAgICAgICAgICAgIG1hcHBlZF9leHRlbnRzID0gc3RydWN0X2ZpZW1hcFszXQorICAgICAgICAgICAgaWYgbWFwcGVkX2V4dGVudHMgPT0gMDoKKyAgICAgICAgICAgICAgICAjIE5vIG1vcmUgbWFwcGVkIGJsb2NrcworICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBleHRlbnQgPSAwCisgICAgICAgICAgICB3aGlsZSBleHRlbnQgPCBtYXBwZWRfZXh0ZW50czoKKyAgICAgICAgICAgICAgICBmaWVtYXBfZXh0ZW50ID0gc2VsZi5fdW5wYWNrX2ZpZW1hcF9leHRlbnQoZXh0ZW50KQorCisgICAgICAgICAgICAgICAgIyBTdGFydCBvZiB0aGUgZXh0ZW50CisgICAgICAgICAgICAgICAgZXh0ZW50X3N0YXJ0ID0gZmllbWFwX2V4dGVudFswXQorICAgICAgICAgICAgICAgICMgU3RhcnRpbmcgYmxvY2sgbnVtYmVyIG9mIHRoZSBleHRlbnQKKyAgICAgICAgICAgICAgICBleHRlbnRfYmxvY2sgPSBleHRlbnRfc3RhcnQgLy8gc2VsZi5ibG9ja19zaXplCisgICAgICAgICAgICAgICAgIyBMZW5ndGggb2YgdGhlIGV4dGVudAorICAgICAgICAgICAgICAgIGV4dGVudF9sZW4gPSBmaWVtYXBfZXh0ZW50WzJdCisgICAgICAgICAgICAgICAgIyBDb3VudCBvZiBibG9ja3MgaW4gdGhlIGV4dGVudAorICAgICAgICAgICAgICAgIGV4dGVudF9jb3VudCA9IGV4dGVudF9sZW4gLy8gc2VsZi5ibG9ja19zaXplCisKKyAgICAgICAgICAgICAgICAjIEV4dGVudCBsZW5ndGggYW5kIG9mZnNldCBoYXZlIHRvIGJlIGJsb2NrLWFsaWduZWQKKyAgICAgICAgICAgICAgICBhc3NlcnQgZXh0ZW50X3N0YXJ0ICUgc2VsZi5ibG9ja19zaXplID09IDAKKyAgICAgICAgICAgICAgICBhc3NlcnQgZXh0ZW50X2xlbiAlIHNlbGYuYmxvY2tfc2l6ZSA9PSAwCisKKyAgICAgICAgICAgICAgICBpZiBleHRlbnRfYmxvY2sgPiBzdGFydCArIGNvdW50IC0gMToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBmaXJzdCA9IG1heChleHRlbnRfYmxvY2ssIGJsb2NrKQorICAgICAgICAgICAgICAgIGxhc3QgPSBtaW4oZXh0ZW50X2Jsb2NrICsgZXh0ZW50X2NvdW50LCBzdGFydCArIGNvdW50KSAtIDEKKyAgICAgICAgICAgICAgICB5aWVsZCAoZmlyc3QsIGxhc3QpCisKKyAgICAgICAgICAgICAgICBleHRlbnQgKz0gMQorCisgICAgICAgICAgICBibG9jayA9IGV4dGVudF9ibG9jayArIGV4dGVudF9jb3VudAorCisgICAgZGVmIGdldF9tYXBwZWRfcmFuZ2VzKHNlbGYsIHN0YXJ0LCBjb3VudCk6CisgICAgICAgICIiIlJlZmVyIHRoZSAnX0ZpbGVtYXBCYXNlJyBjbGFzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uIiIiCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogZ2V0X21hcHBlZF9yYW5nZXMoJWQsICAlZCglZCkpIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhcnQsIGNvdW50LCBzdGFydCArIGNvdW50IC0gMSkpCisgICAgICAgIGl0ZXJhdG9yID0gc2VsZi5fZG9fZ2V0X21hcHBlZF9yYW5nZXMoc3RhcnQsIGNvdW50KQorICAgICAgICBmaXJzdF9wcmV2LCBsYXN0X3ByZXYgPSBuZXh0KGl0ZXJhdG9yKQorCisgICAgICAgIGZvciBmaXJzdCwgbGFzdCBpbiBpdGVyYXRvcjoKKyAgICAgICAgICAgIGlmIGxhc3RfcHJldiA9PSBmaXJzdCAtIDE6CisgICAgICAgICAgICAgICAgbGFzdF9wcmV2ID0gbGFzdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBGaWVtYXA6IHlpZWxkaW5nIHJhbmdlICglZCwgJWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaXJzdF9wcmV2LCBsYXN0X3ByZXYpKQorICAgICAgICAgICAgICAgIHlpZWxkIChmaXJzdF9wcmV2LCBsYXN0X3ByZXYpCisgICAgICAgICAgICAgICAgZmlyc3RfcHJldiwgbGFzdF9wcmV2ID0gZmlyc3QsIGxhc3QKKworICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBGaWVtYXA6IHlpZWxkaW5nIHJhbmdlICglZCwgJWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlyc3RfcHJldiwgbGFzdF9wcmV2KSkKKyAgICAgICAgeWllbGQgKGZpcnN0X3ByZXYsIGxhc3RfcHJldikKKworICAgIGRlZiBnZXRfdW5tYXBwZWRfcmFuZ2VzKHNlbGYsIHN0YXJ0LCBjb3VudCk6CisgICAgICAgICIiIlJlZmVyIHRoZSAnX0ZpbGVtYXBCYXNlJyBjbGFzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uIiIiCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogZ2V0X3VubWFwcGVkX3JhbmdlcyglZCwgICVkKCVkKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGFydCwgY291bnQsIHN0YXJ0ICsgY291bnQgLSAxKSkKKyAgICAgICAgaG9sZV9maXJzdCA9IHN0YXJ0CisgICAgICAgIGZvciBmaXJzdCwgbGFzdCBpbiBzZWxmLl9kb19nZXRfbWFwcGVkX3JhbmdlcyhzdGFydCwgY291bnQpOgorICAgICAgICAgICAgaWYgZmlyc3QgPiBob2xlX2ZpcnN0OgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogeWllbGRpbmcgcmFuZ2UgKCVkLCAlZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGhvbGVfZmlyc3QsIGZpcnN0IC0gMSkpCisgICAgICAgICAgICAgICAgeWllbGQgKGhvbGVfZmlyc3QsIGZpcnN0IC0gMSkKKworICAgICAgICAgICAgaG9sZV9maXJzdCA9IGxhc3QgKyAxCisKKyAgICAgICAgaWYgaG9sZV9maXJzdCA8IHN0YXJ0ICsgY291bnQ6CisgICAgICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBGaWVtYXA6IHlpZWxkaW5nIHJhbmdlICglZCwgJWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGhvbGVfZmlyc3QsIHN0YXJ0ICsgY291bnQgLSAxKSkKKyAgICAgICAgICAgIHlpZWxkIChob2xlX2ZpcnN0LCBzdGFydCArIGNvdW50IC0gMSkKKworZGVmIGZpbGVtYXAoaW1hZ2UsIGxvZz1Ob25lKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYW5kIHJldHVybiBhbiBpbnN0YW5jZSBvZiBhIEZpbGVtYXAgY2xhc3MgLSAnRmlsZW1hcEZpZW1hcCcgb3IKKyAgICAnRmlsZW1hcFNlZWsnLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgc3lzdGVtIHdlIHJ1biBvbiBzdXBwb3J0cy4gSWYgdGhlCisgICAgRklFTUFQIGlvY3RsIGlzIHN1cHBvcnRlZCwgYW4gaW5zdGFuY2Ugb2YgdGhlICdGaWxlbWFwRmllbWFwJyBjbGFzcyBpcworICAgIHJldHVybmVkLiBPdGhlcndpc2UsIGlmICdTRUVLX0hPTEUnIGlzIHN1cHBvcnRlZCBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgICAnRmlsZW1hcFNlZWsnIGNsYXNzIGlzIHJldHVybmVkLiBJZiBub25lIG9mIHRoZXNlIGFyZSBzdXBwb3J0ZWQsIHRoZQorICAgIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiAnRXJyb3InIHR5cGUgZXhjZXB0aW9uLgorICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gRmlsZW1hcEZpZW1hcChpbWFnZSwgbG9nKQorICAgIGV4Y2VwdCBFcnJvck5vdFN1cHA6CisgICAgICAgIHJldHVybiBGaWxlbWFwU2VlayhpbWFnZSwgbG9nKQorCitkZWYgc3BhcnNlX2NvcHkoc3JjX2ZuYW1lLCBkc3RfZm5hbWUsIG9mZnNldD0wLCBza2lwPTApOgorICAgICIiIkVmZmljaWVudGx5IGNvcHkgc3BhcnNlIGZpbGUgdG8gb3IgaW50byBhbm90aGVyIGZpbGUuIiIiCisgICAgZm1hcCA9IGZpbGVtYXAoc3JjX2ZuYW1lKQorICAgIHRyeToKKyAgICAgICAgZHN0X2ZpbGUgPSBvcGVuKGRzdF9mbmFtZSwgJ3IrYicpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGRzdF9maWxlID0gb3Blbihkc3RfZm5hbWUsICd3YicpCisKKyAgICBmb3IgZmlyc3QsIGxhc3QgaW4gZm1hcC5nZXRfbWFwcGVkX3JhbmdlcygwLCBmbWFwLmJsb2Nrc19jbnQpOgorICAgICAgICBzdGFydCA9IGZpcnN0ICogZm1hcC5ibG9ja19zaXplCisgICAgICAgIGVuZCA9IChsYXN0ICsgMSkgKiBmbWFwLmJsb2NrX3NpemUKKworICAgICAgICBpZiBzdGFydCA8IHNraXAgPCBlbmQ6CisgICAgICAgICAgICBzdGFydCA9IHNraXAKKworICAgICAgICBmbWFwLl9mX2ltYWdlLnNlZWsoc3RhcnQsIG9zLlNFRUtfU0VUKQorICAgICAgICBkc3RfZmlsZS5zZWVrKG9mZnNldCArIHN0YXJ0LCBvcy5TRUVLX1NFVCkKKworICAgICAgICBjaHVua19zaXplID0gMTAyNCAqIDEwMjQKKyAgICAgICAgdG9fcmVhZCA9IGVuZCAtIHN0YXJ0CisgICAgICAgIHJlYWQgPSAwCisKKyAgICAgICAgd2hpbGUgcmVhZCA8IHRvX3JlYWQ6CisgICAgICAgICAgICBpZiByZWFkICsgY2h1bmtfc2l6ZSA+IHRvX3JlYWQ6CisgICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSA9IHRvX3JlYWQgLSByZWFkCisgICAgICAgICAgICBjaHVuayA9IGZtYXAuX2ZfaW1hZ2UucmVhZChjaHVua19zaXplKQorICAgICAgICAgICAgZHN0X2ZpbGUud3JpdGUoY2h1bmspCisgICAgICAgICAgICByZWFkICs9IGNodW5rX3NpemUKKyAgICBkc3RfZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkKaW5kZXggNDA1ZDI1YS4uZTUzNDdlYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaGVscC5weQpAQCAtNDUsNyArNDUsNyBAQAogICAgIGlmIGNhbGxhYmxlKGhscCk6CiAgICAgICAgIGhscCA9IGhscCgpCiAgICAgcGFnZXIgPSBzdWJwcm9jZXNzLlBvcGVuKCdsZXNzJywgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQotICAgIHBhZ2VyLmNvbW11bmljYXRlKGhscCkKKyAgICBwYWdlci5jb21tdW5pY2F0ZShobHAuZW5jb2RlKCd1dGYtOCcpKQogCiAgICAgcmV0dXJuIFRydWUKIApAQCAtNTUsNyArNTUsNyBAQAogICAgIFN1YmNvbW1hbmQgaGVscCBkaXNwYXRjaGVyLgogICAgICIiIgogICAgIGlmIGxlbihhcmdzKSA9PSAxIG9yIG5vdCBkaXNwbGF5X2hlbHAoYXJnc1sxXSwgc3ViY29tbWFuZHMpOgotICAgICAgICBwcmludCB1c2FnZV9zdHIKKyAgICAgICAgcHJpbnQodXNhZ2Vfc3RyKQogCiAKIGRlZiBnZXRfd2ljX3BsdWdpbnNfaGVscCgpOgpAQCAtNjYsNyArNjYsNyBAQAogICAgIHJlc3VsdCA9IHdpY19wbHVnaW5zX2hlbHAKICAgICBmb3IgcGx1Z2luX3R5cGUgaW4gUExVR0lOX1RZUEVTOgogICAgICAgICByZXN1bHQgKz0gJ1xuXG4lcyBQTFVHSU5TXG5cbicgJSBwbHVnaW5fdHlwZS51cHBlcigpCi0gICAgICAgIGZvciBuYW1lLCBwbHVnaW4gaW4gcGx1Z2lubWdyLmdldF9wbHVnaW5zKHBsdWdpbl90eXBlKS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHBsdWdpbiBpbiBwbHVnaW5tZ3IuZ2V0X3BsdWdpbnMocGx1Z2luX3R5cGUpLml0ZW1zKCk6CiAgICAgICAgICAgICByZXN1bHQgKz0gIlxuICVzIHBsdWdpbjpcbiIgJSBuYW1lCiAgICAgICAgICAgICBpZiBwbHVnaW4uX19kb2NfXzoKICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGx1Z2luLl9fZG9jX18KQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICBbLWUgfCAtLWltYWdlLW5hbWVdIFstcywgLS1za2lwLWJ1aWxkLWNoZWNrXSBbLUQsIC0tZGVidWddCiAgICAgICAgIFstciwgLS1yb290ZnMtZGlyXSBbLWIsIC0tYm9vdGltZy1kaXJdCiAgICAgICAgIFstaywgLS1rZXJuZWwtZGlyXSBbLW4sIC0tbmF0aXZlLXN5c3Jvb3RdIFstZiwgLS1idWlsZC1yb290ZnNdCi0gICAgICAgIFstYywgLS1jb21wcmVzcy13aXRoXQorICAgICAgICBbLWMsIC0tY29tcHJlc3Mtd2l0aF0gWy1tLCAtLWJtYXBdCiAKIERFU0NSSVBUSU9OCiAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gT3BlbkVtYmVkZGVkIGltYWdlIGJhc2VkIG9uIHRoZSAnT0UKQEAgLTIyMSw2ICsyMjEsOSBAQAogCiAgICAgVGhlIC1jIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgY29tcHJlc3NvciB1dGlsaXR5IHRvIGNvbXByZXNzCiAgICAgYW4gaW1hZ2UuIGd6aXAsIGJ6aXAyIGFuZCB4eiBjb21wcmVzc29ycyBhcmUgc3VwcG9ydGVkLgorCisgICAgVGhlIC1tIG9wdGlvbiBpcyB1c2VkIHRvIHByb2R1Y2UgLmJtYXAgZmlsZSBmb3IgdGhlIGltYWdlLiBUaGlzIGZpbGUKKyAgICBjYW4gYmUgdXNlZCB0byBmbGFzaCBpbWFnZSB1c2luZyBibWFwdG9vbCB1dGlsaXR5LgogIiIiCiAKIHdpY19saXN0X3VzYWdlID0gIiIiCkBAIC03MzgsNiArNzQxLDEwIEBACiAgICAgICAgICAgICAgICAgIGluIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiBiZWZvcmUgcnVubmluZyB3aWMuIEluIHRoaXMgY2FzZSAud2tzIGZpbGUgY2FuCiAgICAgICAgICAgICAgICAgIGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCB0byBzZXQgcHJlY29uZmlndXJlZCBwYXJpdGlvbiBVVUlEIHVzaW5nIHRoaXMgb3B0aW9uLgogCisgICAgICAgICAtLXN5c3RlbS1pZDogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBJdCBzcGVjaWZpZXMgcGFydGl0aW9uIHN5c3RlbSBpZC4gSXQncyB1c2VmdWwKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGhhcndhcmUgdGhhdCByZXF1aXJlcyBub24tZGVmYXVsdCBwYXJ0aXRpb24gc3lzdGVtIGlkcy4gVGhlIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgICAgICAgIGluIG9uZSBieXRlIGxvbmcgaGV4IG51bWJlciBlaXRoZXIgd2l0aCAweCBwcmVmaXggb3Igd2l0aG91dCBpdC4KKwogICAgICogYm9vdGxvYWRlcgogCiAgICAgICBUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdmFyaW91cyBib290bG9hZGVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9iYXNlaW1hZ2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvYmFzZWltYWdlci5weQppbmRleCA3NjBjZjhhLi4xYTUyZGQ4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9iYXNlaW1hZ2VyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkKQEAgLTE2LDcgKzE2LDYgQEAKICMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKICMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogaW1wb3J0IG9zCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBzaHV0aWwKQEAgLTI1LDcgKzI0LDcgQEAKIGZyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgQ3JlYXRvckVycm9yCiBmcm9tIHdpYy51dGlscyBpbXBvcnQgcnVubmVyCiAKLWNsYXNzIEJhc2VJbWFnZUNyZWF0b3Iob2JqZWN0KToKK2NsYXNzIEJhc2VJbWFnZUNyZWF0b3IoKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBpbWFnZSBjcmVhdGlvbi4KIAogICAgIEJhc2VJbWFnZUNyZWF0b3IgaXMgdGhlIHNpbXBsZXN0IGNyZWF0b3IgY2xhc3MgYXZhaWxhYmxlOyBpdCB3aWxsCkBAIC02OCw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICMgdXBkYXRlIHNldHRpbmcgZnJvbSBjcmVhdGVvcHRzCi0gICAgICAgICAgICBmb3Iga2V5IGluIGNyZWF0ZW9wdHMua2V5cygpOgorICAgICAgICAgICAgZm9yIGtleSBpbiBjcmVhdGVvcHRzOgogICAgICAgICAgICAgICAgIGlmIGtleSBpbiBvcHRtYXA6CiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdG1hcFtrZXldCiAgICAgICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2RpcmVjdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2RpcmVjdC5weQppbmRleCBhMWI0MjQ5Li5lZGY1ZTVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9kaXJlY3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5CkBAIC0yNiwyMCArMjYsNDAgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgdXVpZAogCiBmcm9tIHdpYyBpbXBvcnQgbXNnZXIKLWZyb20gd2ljLnV0aWxzIGltcG9ydCBmc19yZWxhdGVkCiBmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIKIGZyb20gd2ljLnV0aWxzLnBhcnRpdGlvbmVkZnMgaW1wb3J0IEltYWdlCiBmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IENyZWF0b3JFcnJvciwgSW1hZ2VFcnJvcgogZnJvbSB3aWMuaW1hZ2VyLmJhc2VpbWFnZXIgaW1wb3J0IEJhc2VJbWFnZUNyZWF0b3IKIGZyb20gd2ljLnBsdWdpbiBpbXBvcnQgcGx1Z2lubWdyCi1mcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZAorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZAogCiBkaXNrX21ldGhvZHMgPSB7CiAgICAgImRvX2luc3RhbGxfZGlzayI6Tm9uZSwKIH0KIAorY2xhc3MgRGlza0ltYWdlKCk6CisgICAgIiIiCisgICAgQSBEaXNrIGJhY2tlZCBieSBhIGZpbGUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZSwgc2l6ZSk6CisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKyAgICAgICAgc2VsZi5kZXZpY2UgPSBkZXZpY2UKKyAgICAgICAgc2VsZi5jcmVhdGVkID0gRmFsc2UKKworICAgIGRlZiBleGlzdHMoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0cyhzZWxmLmRldmljZSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3JlYXRlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIGNyZWF0ZSBzcGFyc2UgZGlzayBpbWFnZQorICAgICAgICBjbWQgPSAidHJ1bmNhdGUgJXMgLXMgJXMiICUgKHNlbGYuZGV2aWNlLCBzZWxmLnNpemUpCisgICAgICAgIGV4ZWNfY21kKGNtZCkKKyAgICAgICAgc2VsZi5jcmVhdGVkID0gVHJ1ZQorCiBjbGFzcyBEaXJlY3RJbWFnZUNyZWF0b3IoQmFzZUltYWdlQ3JlYXRvcik6CiAgICAgIiIiCiAgICAgSW5zdGFsbHMgYSBzeXN0ZW0gaW50byBhIGZpbGUgY29udGFpbmluZyBhIHBhcnRpdGlvbmVkIGRpc2sgaW1hZ2UuCkBAIC01Miw3ICs3Miw4IEBACiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgb2VfYnVpbGRkaXIsIGltYWdlX291dHB1dF9kaXIsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLAotICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCwgY29tcHJlc3NvciwgY3JlYXRvcm9wdHM9Tm9uZSk6CisgICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290LCBjb21wcmVzc29yLCBjcmVhdG9yb3B0cz1Ob25lLAorICAgICAgICAgICAgICAgICBibWFwPUZhbHNlKToKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemUgYSBEaXJlY3RJbWFnZUNyZWF0b3IgaW5zdGFuY2UuCiAKQEAgLTc0LDYgKzk1LDcgQEAKICAgICAgICAgc2VsZi5rZXJuZWxfZGlyID0ga2VybmVsX2RpcgogICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290ID0gbmF0aXZlX3N5c3Jvb3QKICAgICAgICAgc2VsZi5jb21wcmVzc29yID0gY29tcHJlc3NvcgorICAgICAgICBzZWxmLmJtYXAgPSBibWFwCiAKICAgICBkZWYgX19nZXRfcGFydF9udW0oc2VsZiwgbnVtLCBwYXJ0cyk6CiAgICAgICAgICIiImNhbGN1bGF0ZSB0aGUgcmVhbCBwYXJ0aXRpb24gbnVtYmVyLCBhY2NvdW50aW5nIGZvciBwYXJ0aXRpb25zIG5vdApAQCAtMjIxLDEyICsyNDMsMjMgQEAKIAogICAgICAgICBzZWxmLl9faW1hZ2UgPSBJbWFnZShzZWxmLm5hdGl2ZV9zeXNyb290KQogCi0gICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICBkaXNrX2lkcyA9IHt9CisgICAgICAgIGZvciBudW0sIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzLCAxKToKICAgICAgICAgICAgICMgYXMgYSBjb252ZW5pZW5jZSwgc2V0IHNvdXJjZSB0byB0aGUgYm9vdCBwYXJ0aXRpb24gc291cmNlCiAgICAgICAgICAgICAjIGluc3RlYWQgb2YgZm9yY2luZyBpdCB0byBiZSBzZXQgdmlhIGJvb3Rsb2FkZXIgLS1zb3VyY2UKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmtzLmJvb3Rsb2FkZXIuc291cmNlIGFuZCBwYXJ0Lm1vdW50cG9pbnQgPT0gIi9ib290IjoKICAgICAgICAgICAgICAgICBzZWxmLmtzLmJvb3Rsb2FkZXIuc291cmNlID0gcGFydC5zb3VyY2UKIAorICAgICAgICAgICAgIyBnZW5lcmF0ZSBwYXJpdGlvbiBVVUlEcworICAgICAgICAgICAgaWYgbm90IHBhcnQudXVpZCBhbmQgcGFydC51c2VfdXVpZDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnB0YWJsZV9mb3JtYXQgPT0gJ2dwdCc6CisgICAgICAgICAgICAgICAgICAgIHBhcnQudXVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCisgICAgICAgICAgICAgICAgZWxzZTogIyBtc2RvcyBwYXJ0aXRpb24gdGFibGUKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFydC5kaXNrIG5vdCBpbiBkaXNrX2lkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfaWRzW3BhcnQuZGlza10gPSBpbnQuZnJvbV9ieXRlcyhvcy51cmFuZG9tKDQpLCAnbGl0dGxlJykKKyAgICAgICAgICAgICAgICAgICAgZGlza19pZCA9IGRpc2tfaWRzW3BhcnQuZGlza10KKyAgICAgICAgICAgICAgICAgICAgcGFydC51dWlkID0gJyUweC0lMDJkJyAlIChkaXNrX2lkLCBzZWxmLl9fZ2V0X3BhcnRfbnVtKG51bSwgcGFydHMpKQorCiAgICAgICAgIGZzdGFiX3BhdGggPSBzZWxmLl93cml0ZV9mc3RhYihzZWxmLnJvb3Rmc19kaXIuZ2V0KCJST09URlNfRElSIikpCiAKICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLndvcmtkaXIpCkBAIC0yNjcsNyArMzAwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPXBhcnQuYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub190YWJsZT1wYXJ0Lm5vX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydF90eXBlPXBhcnQucGFydF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZD1wYXJ0LnV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkPXBhcnQudXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9pZD1wYXJ0LnN5c3RlbV9pZCkKIAogICAgICAgICBpZiBmc3RhYl9wYXRoOgogICAgICAgICAgICAgc2h1dGlsLm1vdmUoZnN0YWJfcGF0aCArICIub3JpZyIsIGZzdGFiX3BhdGgpCkBAIC0yNzksOSArMzEzLDkgQEAKICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQogICAgICAgICAgICAgbXNnZXIuZGVidWcoIkFkZGluZyBkaXNrICVzIGFzICVzIHdpdGggc2l6ZSAlcyBieXRlcyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgJSAoZGlza19uYW1lLCBmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pKQotICAgICAgICAgICAgZGlza19vYmogPSBmc19yZWxhdGVkLkRpc2tJbWFnZShmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pCisgICAgICAgICAgICBkaXNrX29iaiA9IERpc2tJbWFnZShmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pCiAgICAgICAgICAgICBzZWxmLl9fZGlza3NbZGlza19uYW1lXSA9IGRpc2tfb2JqCi0gICAgICAgICAgICBzZWxmLl9faW1hZ2UuYWRkX2Rpc2soZGlza19uYW1lLCBkaXNrX29iaikKKyAgICAgICAgICAgIHNlbGYuX19pbWFnZS5hZGRfZGlzayhkaXNrX25hbWUsIGRpc2tfb2JqLCBkaXNrX2lkcy5nZXQoZGlza19uYW1lKSkKIAogICAgICAgICBzZWxmLl9faW1hZ2UuY3JlYXRlKCkKIApAQCAtMzEzLDEyICszNDcsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290aW1nX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5rZXJuZWxfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQotICAgICAgICAjIENvbXByZXNzIHRoZSBpbWFnZQotICAgICAgICBpZiBzZWxmLmNvbXByZXNzb3I6Ci0gICAgICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQotICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJDb21wcmVzc2luZyBkaXNrICVzIHdpdGggJXMiICUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrX25hbWUsIHNlbGYuY29tcHJlc3NvcikpCisKKyAgICAgICAgZm9yIGRpc2tfbmFtZSwgZGlzayBpbiBzZWxmLl9faW1hZ2UuZGlza3MuaXRlbXMoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQorICAgICAgICAgICAgIyBHZW5lcmF0ZSAuYm1hcAorICAgICAgICAgICAgaWYgc2VsZi5ibWFwOgorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJHZW5lcmF0aW5nIGJtYXAgZmlsZSBmb3IgJXMiICUgZGlza19uYW1lKQorICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgiYm1hcHRvb2wgY3JlYXRlICVzIC1vICVzLmJtYXAiICUgKGZ1bGxfcGF0aCwgZnVsbF9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgICMgQ29tcHJlc3MgdGhlIGltYWdlCisgICAgICAgICAgICBpZiBzZWxmLmNvbXByZXNzb3I6CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIkNvbXByZXNzaW5nIGRpc2sgJXMgd2l0aCAlcyIgJSAoZGlza19uYW1lLCBzZWxmLmNvbXByZXNzb3IpKQogICAgICAgICAgICAgICAgIGV4ZWNfY21kKCIlcyAlcyIgJSAoc2VsZi5jb21wcmVzc29yLCBmdWxsX3BhdGgpKQogCiAgICAgZGVmIHByaW50X291dGltYWdlX2luZm8oc2VsZik6CkBAIC0zNzUsNiArNDE0LDYgQEAKICAgICAgICAgaWYgbm90IHNlbGYuX19pbWFnZSBpcyBOb25lOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX19pbWFnZS5jbGVhbnVwKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJbWFnZUVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgSW1hZ2VFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygiJXMiICUgZXJyKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tzcGFyc2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9rc3BhcnNlci5weQppbmRleCA4YzNmODA4Li4wODk0ZTJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tzcGFyc2VyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva3NwYXJzZXIucHkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBDb252ZXJ0cyBzaXplIHN0cmluZyBpbiA8bnVtPltLfGt8TXxHXSBmb3JtYXQgaW50byB0aGUgaW50ZWdlciB2YWx1ZQogICAgICIiIgogICAgIGlmIGFyZy5pc2RpZ2l0KCk6Ci0gICAgICAgIHJldHVybiBpbnQoYXJnKSAqIDEwMjRMCisgICAgICAgIHJldHVybiBpbnQoYXJnKSAqIDEwMjQKIAogICAgIGlmIG5vdCBhcmdbOi0xXS5pc2RpZ2l0KCk6CiAgICAgICAgIHJhaXNlIEFyZ3VtZW50VHlwZUVycm9yKCJJbnZhbGlkIHNpemU6ICVyIiAlIGFyZykKQEAgLTYwLDkgKzYwLDkgQEAKICAgICBpZiBhcmcuZW5kc3dpdGgoImsiKSBvciBhcmcuZW5kc3dpdGgoIksiKToKICAgICAgICAgcmV0dXJuIHNpemUKICAgICBpZiBhcmcuZW5kc3dpdGgoIk0iKToKLSAgICAgICAgcmV0dXJuIHNpemUgKiAxMDI0TAorICAgICAgICByZXR1cm4gc2l6ZSAqIDEwMjQKICAgICBpZiBhcmcuZW5kc3dpdGgoIkciKToKLSAgICAgICAgcmV0dXJuIHNpemUgKiAxMDI0TCAqIDEwMjRMCisgICAgICAgIHJldHVybiBzaXplICogMTAyNCAqIDEwMjQKIAogICAgIHJhaXNlIEFyZ3VtZW50VHlwZUVycm9yKCJJbnZhbGlkIHNpemU6ICVyIiAlIGFyZykKIApAQCAtOTIsNyArOTIsMjUgQEAKICAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IoImZpbGUgbm90IGZvdW5kOiAlcyIgJSBhcmcpCiAgICAgcmV0dXJuIHJlc3VsdAogCi1jbGFzcyBLaWNrU3RhcnQob2JqZWN0KToKK2RlZiBzeXN0ZW1pZHR5cGUoYXJnKToKKyAgICAiIiIKKyAgICBDdXN0b20gdHlwZSBmb3IgQXJndW1lbnRQYXJzZXIKKyAgICBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IHN1dGlzZmllcyBzeXN0ZW0gaWQgcmVxdWlyZW1lbnRzLAorICAgIGkuZS4gaWYgaXQncyBvbmUgYnl0ZSBsb25nIGludGVnZXIgPiAwCisgICAgIiIiCisgICAgZXJyb3IgPSAiSW52YWxpZCBzeXN0ZW0gdHlwZTogJXMuIG11c3QgYmUgaGV4ICJcCisgICAgICAgICAgICAiYmV0d2VlbiAweDEgYW5kIDB4RkYiICUgYXJnCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBpbnQoYXJnLCAxNikKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IoZXJyb3IpCisKKyAgICBpZiByZXN1bHQgPD0gMCBvciByZXN1bHQgPiAweGZmOgorICAgICAgICByYWlzZSBBcmd1bWVudFR5cGVFcnJvcihlcnJvcikKKworICAgIHJldHVybiBhcmcKKworY2xhc3MgS2lja1N0YXJ0KCk6CiAgICAgIiIiIktpY2tzdGFydCBwYXJzZXIgaW1wbGVtZW50YXRpb24uIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZnBhdGgpOgpAQCAtMTA2LDEwICsxMjQsMTAgQEAKICAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCiAKICAgICAgICAgcGFydCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigncGFydCcpCi0gICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCdtb3VudHBvaW50JykKKyAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJ21vdW50cG9pbnQnLCBuYXJncz0nPycpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLWFjdGl2ZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLWFsaWduJywgdHlwZT1pbnQpCi0gICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCItLWV4dHJhLXNwYWNlIiwgdHlwZT1zaXpldHlwZSwgZGVmYXVsdD0xMCoxMDI0TCkKKyAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoIi0tZXh0cmEtc3BhY2UiLCB0eXBlPXNpemV0eXBlLCBkZWZhdWx0PTEwKjEwMjQpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLWZzb3B0aW9ucycsIGRlc3Q9J2Zzb3B0cycpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLWZzdHlwZScpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLWxhYmVsJykKQEAgLTEyMSw2ICsxMzksNyBAQAogICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnLS1zaXplJywgdHlwZT1zaXpldHlwZSwgZGVmYXVsdD0wKQogICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnLS1zb3VyY2UnKQogICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnLS1zb3VyY2VwYXJhbXMnKQorICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnLS1zeXN0ZW0taWQnLCB0eXBlPXN5c3RlbWlkdHlwZSkKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tdXNlLXV1aWQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnLS11dWlkJykKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9tc2dlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvbXNnZXIucHkKaW5kZXggYjczNzU1NC4uZmI4MzM2ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9tc2dlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5CkBAIC0yMSwxOCArMjEsMTQgQEAKIGltcG9ydCByZQogaW1wb3J0IHRpbWUKIAotX19BTExfXyA9IFsnc2V0X21vZGUnLAotICAgICAgICAgICAnZ2V0X2xvZ2xldmVsJywKK19fQUxMX18gPSBbJ2dldF9sb2dsZXZlbCcsCiAgICAgICAgICAgICdzZXRfbG9nbGV2ZWwnLAogICAgICAgICAgICAnc2V0X2xvZ2ZpbGUnLAotICAgICAgICAgICAncmF3JywKICAgICAgICAgICAgJ2RlYnVnJywKICAgICAgICAgICAgJ3ZlcmJvc2UnLAogICAgICAgICAgICAnaW5mbycsCiAgICAgICAgICAgICd3YXJuaW5nJywKICAgICAgICAgICAgJ2Vycm9yJywKLSAgICAgICAgICAgJ2FzaycsCi0gICAgICAgICAgICdwYXVzZScsCiAgICAgICAgICAgXQogCiAjIENPTE9ScyBpbiBBTlNJCkBAIC03MCwxMCArNjYsNiBAQAogICAgICAgICAjIHNraXAKICAgICAgICAgcmV0dXJuCiAKLSAgICAjIGVuY29kZSByYXcgJ3VuaWNvZGUnIHN0ciB0byB1dGY4IGVuY29kZWQgc3RyCi0gICAgaWYgbXNnIGFuZCBpc2luc3RhbmNlKG1zZywgdW5pY29kZSk6Ci0gICAgICAgIG1zZyA9IG1zZy5lbmNvZGUoJ3V0Zi04JywgJ2lnbm9yZScpCi0KICAgICBlcnJvcm1zZyA9ICcnCiAgICAgaWYgQ0FUQ0hFUlJfQlVGRklMRV9GRCA+IDA6CiAgICAgICAgIHNpemUgPSBvcy5sc2VlayhDQVRDSEVSUl9CVUZGSUxFX0ZELCAwLCBvcy5TRUVLX0VORCkKQEAgLTEyMiw5ICsxMTQsNiBAQAogICAgICAgICAgICAgICAgIG5ld2xpbmUgPSBUcnVlCiAKICAgICBpZiBtc2cgaXMgbm90IE5vbmU6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobXNnLCB1bmljb2RlKToKLSAgICAgICAgICAgIG1zZyA9IG1zZy5lbmNvZGUoJ3V0ZjgnLCAnaWdub3JlJykKLQogICAgICAgICBzdHJlYW0ud3JpdGUoJyVzJXMnICUgKGhlYWQsIG1zZykpCiAgICAgICAgIGlmIG5ld2xpbmU6CiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoJ1xuJykKQEAgLTE1OSw3ICsxNDgsNyBAQAogICAgIHJldHVybiBoZWFkLCBtc2cKIAogZGVmIGdldF9sb2dsZXZlbCgpOgotICAgIHJldHVybiAoayBmb3IgaywgdiBpbiBMT0dfTEVWRUxTLml0ZW1zKCkgaWYgdiA9PSBMT0dfTEVWRUwpLm5leHQoKQorICAgIHJldHVybiBuZXh0KChrIGZvciBrLCB2IGluIExPR19MRVZFTFMuaXRlbXMoKSBpZiB2ID09IExPR19MRVZFTCkpCiAKIGRlZiBzZXRfbG9nbGV2ZWwobGV2ZWwpOgogICAgIGdsb2JhbCBMT0dfTEVWRUwKQEAgLTE4Miw5ICsxNzEsNiBAQAogICAgIGlmIG1zZzoKICAgICAgICAgTE9HX0NPTlRFTlQgKz0gbXNnCiAKLWRlZiByYXcobXNnPScnKToKLSAgICBfZ2VuZXJhbF9wcmludCgnJywgTk9fQ09MT1IsIG1zZykKLQogZGVmIGluZm8obXNnKToKICAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdJbmZvJywgbXNnKQogICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIElORk9fQ09MT1IsIG1zZykKQEAgLTIwNiw2NiArMTkyLDYgQEAKICAgICBfY29sb3JfcGVycm9yKGhlYWQsIEVSUl9DT0xPUiwgbXNnKQogICAgIHN5cy5leGl0KDEpCiAKLWRlZiBhc2sobXNnLCBkZWZhdWx0PVRydWUpOgotICAgIF9nZW5lcmFsX3ByaW50KCdcclEnLCBBU0tfQ09MT1IsICcnKQotICAgIHRyeToKLSAgICAgICAgaWYgZGVmYXVsdDoKLSAgICAgICAgICAgIG1zZyArPSAnKFkvbikgJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnICs9ICcoeS9OKSAnCi0gICAgICAgIGlmIElOVEVSQUNUSVZFOgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICByZXBsID0gcmF3X2lucHV0KG1zZykKLSAgICAgICAgICAgICAgICBpZiByZXBsLmxvd2VyKCkgPT0gJ3knOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgICAgIGVsaWYgcmVwbC5sb3dlcigpID09ICduJzoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICAgICAgZWxpZiBub3QgcmVwbC5zdHJpcCgpOgotICAgICAgICAgICAgICAgICAgICAjIDxFbnRlcj4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLQotICAgICAgICAgICAgICAgICMgZWxzZSBsb29wCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1zZyArPSAnIFknCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1zZyArPSAnIE4nCi0gICAgICAgICAgICBfZ2VuZXJhbF9wcmludCgnJywgTk9fQ09MT1IsIG1zZykKLQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKLSAgICAgICAgc3lzLmV4aXQoMikKLQotZGVmIGNob2ljZShtc2csIGNob2ljZXMsIGRlZmF1bHQ9MCk6Ci0gICAgaWYgZGVmYXVsdCA+PSBsZW4oY2hvaWNlcyk6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgX2dlbmVyYWxfcHJpbnQoJ1xyUScsIEFTS19DT0xPUiwgJycpCi0gICAgdHJ5OgotICAgICAgICBtc2cgKz0gIiBbJXNdICIgJSAnLycuam9pbihjaG9pY2VzKQotICAgICAgICBpZiBJTlRFUkFDVElWRToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgcmVwbCA9IHJhd19pbnB1dChtc2cpCi0gICAgICAgICAgICAgICAgaWYgcmVwbCBpbiBjaG9pY2VzOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbAotICAgICAgICAgICAgICAgIGVsaWYgbm90IHJlcGwuc3RyaXAoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNob2ljZXNbZGVmYXVsdF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyArPSBjaG9pY2VzW2RlZmF1bHRdCi0gICAgICAgICAgICBfZ2VuZXJhbF9wcmludCgnJywgTk9fQ09MT1IsIG1zZykKLQotICAgICAgICAgICAgcmV0dXJuIGNob2ljZXNbZGVmYXVsdF0KLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKLSAgICAgICAgc3lzLmV4aXQoMikKLQotZGVmIHBhdXNlKG1zZz1Ob25lKToKLSAgICBpZiBJTlRFUkFDVElWRToKLSAgICAgICAgX2dlbmVyYWxfcHJpbnQoJ1xyUScsIEFTS19DT0xPUiwgJycpCi0gICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgbXNnID0gJ3ByZXNzIDxFTlRFUj4gdG8gY29udGludWUgLi4uJwotICAgICAgICByYXdfaW5wdXQobXNnKQotCiBkZWYgc2V0X2xvZ2ZpbGUoZnBhdGgpOgogICAgIGdsb2JhbCBMT0dfRklMRV9GUAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BhcnRpdGlvbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGFydGl0aW9uLnB5CmluZGV4IGY0MGQxYmMuLjkwZjY1YTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGFydGl0aW9uLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGFydGl0aW9uLnB5CkBAIC0yNiw3ICsyNiw2IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdXVpZAogCiBmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBtc2dlciwgcGFyc2Vfc291cmNlcGFyYW1zCiBmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCkBAIC0zOCw3ICszNyw3IEBACiAgICAgImRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24iOk5vbmUsCiB9CiAKLWNsYXNzIFBhcnRpdGlvbihvYmplY3QpOgorY2xhc3MgUGFydGl0aW9uKCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncywgbGluZW5vKToKICAgICAgICAgc2VsZi5hcmdzID0gYXJncwpAQCAtNTcsMTAgKzU2LDkgQEAKICAgICAgICAgc2VsZi5zaXplID0gYXJncy5zaXplCiAgICAgICAgIHNlbGYuc291cmNlID0gYXJncy5zb3VyY2UKICAgICAgICAgc2VsZi5zb3VyY2VwYXJhbXMgPSBhcmdzLnNvdXJjZXBhcmFtcworICAgICAgICBzZWxmLnN5c3RlbV9pZCA9IGFyZ3Muc3lzdGVtX2lkCiAgICAgICAgIHNlbGYudXNlX3V1aWQgPSBhcmdzLnVzZV91dWlkCiAgICAgICAgIHNlbGYudXVpZCA9IGFyZ3MudXVpZAotICAgICAgICBpZiBhcmdzLnVzZV91dWlkIGFuZCBub3Qgc2VsZi51dWlkOgotICAgICAgICAgICAgc2VsZi51dWlkID0gc3RyKHV1aWQudXVpZDQoKSkKIAogICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubwogICAgICAgICBzZWxmLnNvdXJjZV9maWxlID0gIiIKQEAgLTIxOSw5ICsyMTcsNyBAQAogICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAogICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBzZWxmLm1vdW50cG9pbnQsIHJvb3Rmc19zaXplKSkKIAotICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTEwMjQgc2Vlaz0lZCBjb3VudD0wIGJzPTFrIiAlIFwKLSAgICAgICAgICAgIChyb290ZnMsIHJvb3Rmc19zaXplKQotICAgICAgICBleGVjX2NtZChkZF9jbWQpCisgICAgICAgIGV4ZWNfY21kKCJ0cnVuY2F0ZSAlcyAtcyAlZCIgJSAocm9vdGZzLCByb290ZnNfc2l6ZSAqIDEwMjQpKQogCiAgICAgICAgIGV4dHJhX2ltYWdlY21kID0gIi1pIDgxOTIiCiAKQEAgLTI1NCw5ICsyNTAsNyBAQAogICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAogICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBzZWxmLm1vdW50cG9pbnQsIHJvb3Rmc19zaXplKSkKIAotICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTEwMjQgc2Vlaz0lZCBjb3VudD0wIGJzPTFrIiAlIFwKLSAgICAgICAgICAgIChyb290ZnMsIHJvb3Rmc19zaXplKQotICAgICAgICBleGVjX2NtZChkZF9jbWQpCisgICAgICAgIGV4ZWNfY21kKCJ0cnVuY2F0ZSAlcyAtcyAlZCIgJSAocm9vdGZzLCByb290ZnNfc2l6ZSAqIDEwMjQpKQogCiAgICAgICAgIGxhYmVsX3N0ciA9ICIiCiAgICAgICAgIGlmIHNlbGYubGFiZWw6CkBAIC0yODQsMTQgKzI3OCw2IEBACiAgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCiAgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgYmxvY2tzKSkKIAotICAgICAgICAjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgotICAgICAgICAjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCi0gICAgICAgICMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24KLSAgICAgICAgIyBpcyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuIEFwcGx5Ci0gICAgICAgICMgc2VjdG9yIGNvdW50IGZpeCBvbmx5IHdoZW4gbmVlZGVkLgotICAgICAgICBpZiBibG9ja3MgJSAxNiAhPSAwOgotICAgICAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCi0KICAgICAgICAgbGFiZWxfc3RyID0gIi1uIGJvb3QiCiAgICAgICAgIGlmIHNlbGYubGFiZWw6CiAgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLW4gJXMiICUgc2VsZi5sYWJlbApAQCAtMzE5LDkgKzMwNSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IGV4dDIvMy80IHBhcnRpdGlvbi4KICAgICAgICAgIiIiCi0gICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MWsgc2Vlaz0lZCBjb3VudD0wIiAlIFwKLSAgICAgICAgICAgIChyb290ZnMsIHNlbGYuc2l6ZSkKLSAgICAgICAgZXhlY19jbWQoZGRfY21kKQorICAgICAgICBleGVjX2NtZCgidHJ1bmNhdGUgJXMgLXMgJWQiICUgKHJvb3Rmcywgc2VsZi5zaXplICogMTAyNCkpCiAKICAgICAgICAgZXh0cmFfaW1hZ2VjbWQgPSAiLWkgODE5MiIKIApAQCAtMzM4LDkgKzMyMiw3IEBACiAgICAgICAgICIiIgogICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IGJ0cmZzIHBhcnRpdGlvbi4KICAgICAgICAgIiIiCi0gICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MWsgc2Vlaz0lZCBjb3VudD0wIiAlIFwKLSAgICAgICAgICAgIChyb290ZnMsIHNlbGYuc2l6ZSkKLSAgICAgICAgZXhlY19jbWQoZGRfY21kKQorICAgICAgICBleGVjX2NtZCgidHJ1bmNhdGUgJXMgLXMgJWQiICUgKHJvb3Rmcywgc2VsZi5zaXplICogMTAyNCkpCiAKICAgICAgICAgbGFiZWxfc3RyID0gIiIKICAgICAgICAgaWYgc2VsZi5sYWJlbDoKQEAgLTQwMSw5ICszODMsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgcGF0aCA9ICIlcy9mcy4lcyIgJSAoY3Jfd29ya2Rpciwgc2VsZi5mc3R5cGUpCiAKLSAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xayBzZWVrPSVkIGNvdW50PTAiICUgXAotICAgICAgICAgICAgKHBhdGgsIHNlbGYuc2l6ZSkKLSAgICAgICAgZXhlY19jbWQoZGRfY21kKQorICAgICAgICBleGVjX2NtZCgidHJ1bmNhdGUgJXMgLXMgJWQiICUgKHBhdGgsIHNlbGYuc2l6ZSAqIDEwMjQpKQogCiAgICAgICAgIGltcG9ydCB1dWlkCiAgICAgICAgIGxhYmVsX3N0ciA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5CmluZGV4IGNjZmRmY2IuLjMwNmIzMjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5CkBAIC0yOSw3ICsyOSw3IEBACiBQTFVHSU5fRElSID0gIi9saWIvd2ljL3BsdWdpbnMiICMgcmVsYXRpdmUgdG8gc2NyaXB0cwogU0NSSVBUU19QTFVHSU5fRElSID0gInNjcmlwdHMiICsgUExVR0lOX0RJUgogCi1jbGFzcyBQbHVnaW5NZ3Iob2JqZWN0KToKK2NsYXNzIFBsdWdpbk1ncigpOgogICAgIHBsdWdpbl9kaXJzID0ge30KIAogICAgICMgbWFrZSB0aGUgbWFuYWdlciBjbGFzcyBhcyBzaW5nbGV0b24KQEAgLTQyLDcgKzQyLDcgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgd2ljX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgICAgIGVvcyA9IHdpY19wYXRoLmZpbmQoJ3NjcmlwdHMnKSArIGxlbignc2NyaXB0cycpCisgICAgICAgIGVvcyA9IHdpY19wYXRoLnJmaW5kKCdzY3JpcHRzJykgKyBsZW4oJ3NjcmlwdHMnKQogICAgICAgICBzY3JpcHRzX3BhdGggPSB3aWNfcGF0aFs6ZW9zXQogICAgICAgICBzZWxmLnNjcmlwdHNfcGF0aCA9IHNjcmlwdHNfcGF0aAogICAgICAgICBzZWxmLnBsdWdpbl9kaXIgPSBzY3JpcHRzX3BhdGggKyBQTFVHSU5fRElSCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgICAjIHRoZSB2YWx1ZSBUcnVlL0ZhbHNlIG1lYW5zICJsb2FkZWQiCiAKICAgICBkZWYgX2xvYWRfYWxsKHNlbGYpOgotICAgICAgICBmb3IgKHBkaXIsIGxvYWRlZCkgaW4gc2VsZi5wbHVnaW5fZGlycy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIChwZGlyLCBsb2FkZWQpIGluIHNlbGYucGx1Z2luX2RpcnMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGxvYWRlZDoKICAgICAgICAgICAgICAgICBjb250aW51ZQogCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbHVnaW5fZGlyc1twZGlyXSA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiUGx1Z2luIG1vZHVsZSAlczolcyBpbXBvcnRlZCJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobW9kLCBweW1vZC5fX2ZpbGVfXykpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ0ZhaWxlZCB0byBsb2FkIHBsdWdpbiAlcy8lczogJXMnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3MucGF0aC5iYXNlbmFtZShwZGlyKSwgbW9kLCBlcnIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZyhtc2cpCkBAIC0xMzUsOSArMTM1LDkgQEAKICAgICAgICAgTm9uZSBpcyByZXR1cm5lZC4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybl9tZXRob2RzID0gTm9uZQotICAgICAgICBmb3IgX3NvdXJjZV9uYW1lLCBrbGFzcyBpbiBzZWxmLmdldF9wbHVnaW5zKCdzb3VyY2UnKS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIF9zb3VyY2VfbmFtZSwga2xhc3MgaW4gc2VsZi5nZXRfcGx1Z2lucygnc291cmNlJykuaXRlbXMoKToKICAgICAgICAgICAgIGlmIF9zb3VyY2VfbmFtZSA9PSBzb3VyY2VfbmFtZToKLSAgICAgICAgICAgICAgICBmb3IgX21ldGhvZF9uYW1lIGluIG1ldGhvZHMua2V5cygpOgorICAgICAgICAgICAgICAgIGZvciBfbWV0aG9kX25hbWUgaW4gbWV0aG9kczoKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoa2xhc3MsIF9tZXRob2RfbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJVbmltcGxlbWVudGVkICVzIHNvdXJjZSBpbnRlcmZhY2UgZm9yOiAlcyJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKF9tZXRob2RfbmFtZSwgX3NvdXJjZV9uYW1lKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weQppbmRleCBlZThmZTk1Li5lNzM3ZGVlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5CkBAIC0xNSwzNCArMTUsMjYgQEAKICMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKICMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KIAorX19hbGxfXyA9IFsnSW1hZ2VyUGx1Z2luJywgJ1NvdXJjZVBsdWdpbicsICdnZXRfcGx1Z2lucyddCisKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKIGZyb20gd2ljIGltcG9ydCBtc2dlcgogCi1jbGFzcyBfUGx1Z2luKG9iamVjdCk6Ci0gICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKLSAgICAgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgJ3BsdWdpbnMnKToKLSAgICAgICAgICAgICAgICBjbHMucGx1Z2lucyA9IHt9CitjbGFzcyBQbHVnaW5NZXRhKHR5cGUpOgorICAgIHBsdWdpbnMgPSBkZWZhdWx0ZGljdChkaWN0KQorICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgY2xhc3NfdHlwZSA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycykKKyAgICAgICAgaWYgJ25hbWUnIGluIGF0dHJzOgorICAgICAgICAgICAgY2xzLnBsdWdpbnNbY2xhc3NfdHlwZS53aWNfcGx1Z2luX3R5cGVdW2F0dHJzWyduYW1lJ11dID0gY2xhc3NfdHlwZQogCi0gICAgICAgICAgICBlbGlmICd3aWNfcGx1Z2luX3R5cGUnIGluIGF0dHJzOgotICAgICAgICAgICAgICAgIGlmIGF0dHJzWyd3aWNfcGx1Z2luX3R5cGUnXSBub3QgaW4gY2xzLnBsdWdpbnM6Ci0gICAgICAgICAgICAgICAgICAgIGNscy5wbHVnaW5zW2F0dHJzWyd3aWNfcGx1Z2luX3R5cGUnXV0gPSB7fQorICAgICAgICByZXR1cm4gY2xhc3NfdHlwZQogCi0gICAgICAgICAgICBlbGlmIGhhc2F0dHIoY2xzLCAnd2ljX3BsdWdpbl90eXBlJykgYW5kICduYW1lJyBpbiBhdHRyczoKLSAgICAgICAgICAgICAgICBjbHMucGx1Z2luc1tjbHMud2ljX3BsdWdpbl90eXBlXVthdHRyc1snbmFtZSddXSA9IGNscwotCi0gICAgICAgIGRlZiBzaG93X3BsdWdpbnMoY2xzKToKLSAgICAgICAgICAgIGZvciBjbHMgaW4gY2xzLnBsdWdpbnNbY2xzLndpY19wbHVnaW5fdHlwZV06Ci0gICAgICAgICAgICAgICAgcHJpbnQgY2xzCi0KLSAgICAgICAgZGVmIGdldF9wbHVnaW5zKGNscyk6Ci0gICAgICAgICAgICByZXR1cm4gY2xzLnBsdWdpbnMKLQotCi1jbGFzcyBJbWFnZXJQbHVnaW4oX1BsdWdpbik6CitjbGFzcyBJbWFnZXJQbHVnaW4oUGx1Z2luTWV0YSgiUGx1Z2luIiwgKCksIHt9KSk6CiAgICAgd2ljX3BsdWdpbl90eXBlID0gImltYWdlciIKIAotCi1jbGFzcyBTb3VyY2VQbHVnaW4oX1BsdWdpbik6CitjbGFzcyBTb3VyY2VQbHVnaW4oUGx1Z2luTWV0YSgiUGx1Z2luIiwgKCksIHt9KSk6CiAgICAgd2ljX3BsdWdpbl90eXBlID0gInNvdXJjZSIKICAgICAiIiIKICAgICBUaGUgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBieSAtLXNvdXJjZSBwbHVnaW5zLgpAQCAtOTksMTAgKzkxLDQgQEAKICAgICAgICAgbXNnZXIuZGVidWcoIlNvdXJjZVBsdWdpbjogZG9fcHJlcGFyZV9wYXJ0aXRpb246IHBhcnQ6ICVzIiAlIHBhcnQpCiAKIGRlZiBnZXRfcGx1Z2lucyh0eXBlbik6Ci0gICAgcGx1Z2lucyA9IEltYWdlclBsdWdpbi5nZXRfcGx1Z2lucygpCi0gICAgaWYgdHlwZW4gaW4gcGx1Z2luczoKLSAgICAgICAgcmV0dXJuIHBsdWdpbnNbdHlwZW5dCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotX19hbGxfXyA9IFsnSW1hZ2VyUGx1Z2luJywgJ1NvdXJjZVBsdWdpbicsICdnZXRfcGx1Z2lucyddCisgICAgcmV0dXJuIFBsdWdpbk1ldGEucGx1Z2lucy5nZXQodHlwZW4pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkKaW5kZXggNmQzZjQ2Yy4uOGZlMzkzMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3RfcGx1Z2luLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0X3BsdWdpbi5weQpAQCAtODYsNyArODYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcm9wdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3JvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmJtYXApCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY3JlYXRvci5jcmVhdGUoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLWVmaS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkKaW5kZXggYTQ3MzRjOS4uOGJjMzYyMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLWVmaS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5CkBAIC04NCw3ICs4NCw3IEBACiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRvX2NvbmZpZ3VyZV9ndW1taWJvb3QoY2xzLCBoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgogICAgICAgICAiIiIKLSAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3VtbWlib290KSBjb25maWcKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyBzeXN0ZW1kLWJvb3QvZ3VtbWlib290IGNvbmZpZwogICAgICAgICAiIiIKICAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcy9sb2FkZXIiICUgaGRkZGlyCiAgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQpAQCAtMTQ5LDcgKzE0OSw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdncnViLWVmaSc6CiAgICAgICAgICAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9ncnViZWZpKGhkZGRpciwgY3JlYXRvciwgY3Jfd29ya2RpcikKLSAgICAgICAgICAgIGVsaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2d1bW1pYm9vdCc6CisgICAgICAgICAgICBlbGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdndW1taWJvb3QnIFwKKyAgICAgICAgICAgICAgICAgb3Igc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ3N5c3RlbWQtYm9vdCc6CiAgICAgICAgICAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9ndW1taWJvb3QoaGRkZGlyLCBjcmVhdG9yLCBjcl93b3JrZGlyKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigidW5yZWNvZ25pemVkIGJvb3RpbWctZWZpIGxvYWRlcjogJXMiICUgc291cmNlX3BhcmFtc1snbG9hZGVyJ10pCkBAIC0xODksNyArMTkwLDggQEAKICAgICAgICAgICAgICAgICBleGVjX2NtZChjcF9jbWQsIFRydWUpCiAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoIiVzL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzL2hkZC9ib290L0VGSS9CT09UL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIpCi0gICAgICAgICAgICBlbGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdndW1taWJvb3QnOgorICAgICAgICAgICAgZWxpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3VtbWlib290JyBcCisgICAgICAgICAgICAgICAgIG9yIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdzeXN0ZW1kLWJvb3QnOgogICAgICAgICAgICAgICAgIGNwX2NtZCA9ICJjcCAlcy9FRkkvQk9PVC8qICVzL0VGSS9CT09UIiAlIChib290aW1nX2RpciwgaGRkZGlyKQogICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNwX2NtZCwgVHJ1ZSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xOTcsNiArMTk5LDExIEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJib290aW1nLWVmaSByZXF1aXJlcyBhIGxvYWRlciwgbm9uZSBzcGVjaWZpZWQiKQogCisgICAgICAgIHN0YXJ0dXAgPSBvcy5wYXRoLmpvaW4oYm9vdGltZ19kaXIsICJzdGFydHVwLm5zaCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN0YXJ0dXApOgorICAgICAgICAgICAgY3BfY21kID0gImNwICVzICVzLyIgJSAoc3RhcnR1cCwgaGRkZGlyKQorICAgICAgICAgICAgZXhlY19jbWQoY3BfY21kLCBUcnVlKQorCiAgICAgICAgIGR1X2NtZCA9ICJkdSAtYmtzICVzIiAlIGhkZGRpcgogICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCiAgICAgICAgIGJsb2NrcyA9IGludChvdXQuc3BsaXQoKVswXSkKQEAgLTIxMSwxMiArMjE4LDYgQEAKICAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2NrcywgcGFydC5tb3VudHBvaW50LCBibG9ja3MpKQogCi0gICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCi0gICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKLSAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcwotICAgICAgICAjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KLSAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCi0KICAgICAgICAgIyBkb3NmcyBpbWFnZSwgY3JlYXRlZCBieSBta2Rvc2ZzCiAgICAgICAgIGJvb3RpbWcgPSAiJXMvYm9vdC5pbWciICUgY3Jfd29ya2RpcgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBjYmlvcy5weQppbmRleCA1YjcxOWJmLi5mMjA0ZGFhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkKQEAgLTE3OSwxMiArMTc5LDYgQEAKICAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2NrcywgcGFydC5tb3VudHBvaW50LCBibG9ja3MpKQogCi0gICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCi0gICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKLSAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcwotICAgICAgICAjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KLSAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCi0KICAgICAgICAgIyBkb3NmcyBpbWFnZSwgY3JlYXRlZCBieSBta2Rvc2ZzCiAgICAgICAgIGJvb3RpbWcgPSAiJXMvYm9vdC5pbWciICUgY3Jfd29ya2RpcgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2lzb2ltYWdlLWlzb2h5YnJpZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5CmluZGV4IGJjOTkyODMuLjM4NThmZDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5CkBAIC0yNyw2ICsyNyw3IEBACiAKIGZyb20gd2ljIGltcG9ydCBtc2dlcgogZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5taXNjIGltcG9ydCBnZXRfY3VzdG9tX2NvbmZpZwogZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwgZ2V0X2JpdGJha2VfdmFyCiAKIGNsYXNzIElzb0ltYWdlUGx1Z2luKFNvdXJjZVBsdWdpbik6CkBAIC01OSw3ICs2MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChzeXNsaW51eCkgY29uZmlnCiAgICAgICAgICIiIgotICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIi9JU08vYm9vdC9zcGxhc2guanBnIikKKyAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICJJU08vYm9vdC9zcGxhc2guanBnIikKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3BsYXNoKToKICAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAibWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5qcGciCiAgICAgICAgIGVsc2U6CkBAIC05NCwzMyArOTUsNDMgQEAKICAgICAgICAgIiIiCiAgICAgICAgIENyZWF0ZSBsb2FkZXItc3BlY2lmaWMgKGdydWItZWZpKSBjb25maWcKICAgICAgICAgIiIiCi0gICAgICAgIHNwbGFzaCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCAiL0VGSS9ib290L3NwbGFzaC5qcGciKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcGxhc2gpOgotICAgICAgICAgICAgc3BsYXNobGluZSA9ICJtZW51IGJhY2tncm91bmQgc3BsYXNoLmpwZyIKKyAgICAgICAgY29uZmlnZmlsZSA9IGNyZWF0b3Iua3MuYm9vdGxvYWRlci5jb25maWdmaWxlCisgICAgICAgIGlmIGNvbmZpZ2ZpbGU6CisgICAgICAgICAgICBncnViZWZpX2NvbmYgPSBnZXRfY3VzdG9tX2NvbmZpZyhjb25maWdmaWxlKQorICAgICAgICAgICAgaWYgZ3J1YmVmaV9jb25mOgorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJVc2luZyBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyBmb3IgZ3J1Yi5jZmciICUgY29uZmlnZmlsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoImNvbmZpZ2ZpbGUgaXMgc3BlY2lmaWVkIGJ1dCBmYWlsZWQgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgImdldCBpdCBmcm9tICVzLiIgJSBjb25maWdmaWxlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3BsYXNobGluZSA9ICIiCisgICAgICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIkVGSS9ib290L3NwbGFzaC5qcGciKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3BsYXNoKToKKyAgICAgICAgICAgICAgICBzcGxhc2hsaW5lID0gIm1lbnUgYmFja2dyb3VuZCBzcGxhc2guanBnIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxhc2hsaW5lID0gIiIKIAotICAgICAgICBib290bG9hZGVyID0gY3JlYXRvci5rcy5ib290bG9hZGVyCisgICAgICAgICAgICBib290bG9hZGVyID0gY3JlYXRvci5rcy5ib290bG9hZGVyCiAKLSAgICAgICAgZ3J1YmVmaV9jb25mID0gIiIKLSAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggIgotICAgICAgICBncnViZWZpX2NvbmYgKz0gIi0tcGFyaXR5PW5vIC0tc3RvcD0xXG4iCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAiZGVmYXVsdD1ib290XG4iCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAidGltZW91dD0lc1xuIiAlIChib290bG9hZGVyLnRpbWVvdXQgb3IgMTApCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAiXG4iCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAic2VhcmNoIC0tc2V0PXJvb3QgLS1sYWJlbCAlcyAiICUgcGFydC5sYWJlbAotICAgICAgICBncnViZWZpX2NvbmYgKz0gIlxuIgotICAgICAgICBncnViZWZpX2NvbmYgKz0gIm1lbnVlbnRyeSAnYm9vdCd7XG4iCisgICAgICAgICAgICBncnViZWZpX2NvbmYgPSAiIgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggIgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICItLXBhcml0eT1ubyAtLXN0b3A9MVxuIgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJkZWZhdWx0PWJvb3RcbiIKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAidGltZW91dD0lc1xuIiAlIChib290bG9hZGVyLnRpbWVvdXQgb3IgMTApCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIlxuIgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJzZWFyY2ggLS1zZXQ9cm9vdCAtLWxhYmVsICVzICIgJSBwYXJ0LmxhYmVsCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIlxuIgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJtZW51ZW50cnkgJ2Jvb3Qne1xuIgogCi0gICAgICAgIGtlcm5lbCA9ICIvYnpJbWFnZSIKKyAgICAgICAgICAgIGtlcm5lbCA9ICIvYnpJbWFnZSIKIAotICAgICAgICBncnViZWZpX2NvbmYgKz0gImxpbnV4ICVzIHJvb3R3YWl0ICVzXG4iIFwKLSAgICAgICAgICAgICUgKGtlcm5lbCwgYm9vdGxvYWRlci5hcHBlbmQpCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAiaW5pdHJkIC9pbml0cmQgXG4iCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAifVxuIgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJsaW51eCAlcyByb290d2FpdCAlc1xuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoa2VybmVsLCBib290bG9hZGVyLmFwcGVuZCkKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAiaW5pdHJkIC9pbml0cmQgXG4iCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIn1cbiIKIAotICAgICAgICBpZiBzcGxhc2hsaW5lOgotICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICIlc1xuIiAlIHNwbGFzaGxpbmUKKyAgICAgICAgICAgIGlmIHNwbGFzaGxpbmU6CisgICAgICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICIlc1xuIiAlIHNwbGFzaGxpbmUKIAogICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBncnViZWZpIGNvbmZpZyAlcy9FRkkvQk9PVC9ncnViLmNmZyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQpAQCAtNDMwLDEyICs0NDEsNiBAQAogICAgICAgICAgICAgICAgICAgICAlIChwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykKICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKG1zZykKIAotICAgICAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKLSAgICAgICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKLSAgICAgICAgICAgICMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKLSAgICAgICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgotICAgICAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCi0KICAgICAgICAgICAgICMgZG9zZnMgaW1hZ2UgZm9yIEVGSSBib290CiAgICAgICAgICAgICBib290aW1nID0gIiVzL2VmaS5pbWciICUgaXNvZGlyCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvcmF3Y29weS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvcmF3Y29weS5weQppbmRleCAwNDcyZjUzLi5lMGIxMWY5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jhd2NvcHkucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5CkBAIC0yMCw2ICsyMCw3IEBACiBmcm9tIHdpYyBpbXBvcnQgbXNnZXIKIGZyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgogZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGdldF9iaXRiYWtlX3ZhcgorZnJvbSB3aWMuZmlsZW1hcCBpbXBvcnQgc3BhcnNlX2NvcHkKIAogY2xhc3MgUmF3Q29weVBsdWdpbihTb3VyY2VQbHVnaW4pOgogICAgICIiIgpAQCAtNjcsMTQgKzY4LDEyIEBACiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oYm9vdGltZ19kaXIsIHNvdXJjZV9wYXJhbXNbJ2ZpbGUnXSkKLSAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsIHNvdXJjZV9wYXJhbXNbJ2ZpbGUnXSkKKyAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICIlcy4lcyIgJSAoc291cmNlX3BhcmFtc1snZmlsZSddLCBwYXJ0LmxpbmVubykpCiAKICAgICAgICAgaWYgJ3NraXAnIGluIHNvdXJjZV9wYXJhbXM6Ci0gICAgICAgICAgICBkZF9jbWQgPSAiZGQgaWY9JXMgb2Y9JXMgaWJzPSVzIHNraXA9MSBjb252PW5vdHJ1bmMiICUgXAotICAgICAgICAgICAgICAgICAgICAoc3JjLCBkc3QsIHNvdXJjZV9wYXJhbXNbJ3NraXAnXSkKKyAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNyYywgZHN0LCBza2lwPXNvdXJjZV9wYXJhbXNbJ3NraXAnXSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRkX2NtZCA9ICJjcCAlcyAlcyIgJSAoc3JjLCBkc3QpCi0gICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKyAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNyYywgZHN0KQogCiAgICAgICAgICMgZ2V0IHRoZSBzaXplIGluIHRoZSByaWdodCB1bml0cyBmb3Iga2lja3N0YXJ0IChrQikKICAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIGRzdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTc0NDYxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZnNfcmVsYXRlZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA3LCBSZWQgSGF0LCBJbmMuCi0jIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKLSMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotaW1wb3J0IG9zCi1pbXBvcnQgZXJybm8KLQotZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQKLQotZGVmIG1ha2VkaXJzKGRpcm5hbWUpOgotICAgICIiIkEgdmVyc2lvbiBvZiBvcy5tYWtlZGlycygpIHRoYXQgZG9lc24ndCB0aHJvdyBhbgotICAgIGV4Y2VwdGlvbiBpZiB0aGUgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCi0gICAgIiIiCi0gICAgdHJ5OgotICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6Ci0gICAgICAgIGlmIGVyci5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi1jbGFzcyBEaXNrOgotICAgICIiIgotICAgIEdlbmVyaWMgYmFzZSBvYmplY3QgZm9yIGEgZGlzay4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSwgZGV2aWNlPU5vbmUpOgotICAgICAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKLSAgICAgICAgc2VsZi5fc2l6ZSA9IHNpemUKLQotICAgIGRlZiBjcmVhdGUoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBjbGVhbnVwKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgZ2V0X2RldmljZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZQotICAgIGRlZiBzZXRfZGV2aWNlKHNlbGYsIHBhdGgpOgotICAgICAgICBzZWxmLl9kZXZpY2UgPSBwYXRoCi0gICAgZGV2aWNlID0gcHJvcGVydHkoZ2V0X2RldmljZSwgc2V0X2RldmljZSkKLQotICAgIGRlZiBnZXRfc2l6ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3NpemUKLSAgICBzaXplID0gcHJvcGVydHkoZ2V0X3NpemUpCi0KLQotY2xhc3MgRGlza0ltYWdlKERpc2spOgotICAgICIiIgotICAgIEEgRGlzayBiYWNrZWQgYnkgYSBmaWxlLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9maWxlLCBzaXplKToKLSAgICAgICAgRGlzay5fX2luaXRfXyhzZWxmLCBzaXplKQotICAgICAgICBzZWxmLmltYWdlX2ZpbGUgPSBpbWFnZV9maWxlCi0KLSAgICBkZWYgZXhpc3RzKHNlbGYpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5leGlzdHMoc2VsZi5pbWFnZV9maWxlKQotCi0gICAgZGVmIGNyZWF0ZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5kZXZpY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBibG9ja3MgPSBzZWxmLnNpemUgLyAxMDI0Ci0gICAgICAgIGlmIHNlbGYuc2l6ZSAtIGJsb2NrcyAqIDEwMjQ6Ci0gICAgICAgICAgICBibG9ja3MgKz0gMQotCi0gICAgICAgICMgY3JlYXRlIGRpc2sgaW1hZ2UKLSAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xMDI0IHNlZWs9JWQgY291bnQ9MSIgJSBcCi0gICAgICAgICAgICAoc2VsZi5pbWFnZV9maWxlLCBibG9ja3MpCi0gICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKLQotICAgICAgICBzZWxmLmRldmljZSA9IHNlbGYuaW1hZ2VfZmlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9taXNjLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9taXNjLnB5CmluZGV4IDgxMjM5YWMuLmZlMTg4YzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvbWlzYy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkKQEAgLTI4LDEyICsyOCwxNCBAQAogCiBpbXBvcnQgb3MKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Citmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3Bhd24KIAogZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCiBmcm9tIHdpYy51dGlscyBpbXBvcnQgcnVubmVyCiAKICMgZXhlY3V0YWJsZSAtPiByZWNpcGUgcGFpcnMgZm9yIGV4ZWNfbmF0aXZlX2NtZAotTkFUSVZFX1JFQ0lQRVMgPSB7Im1jb3B5IjogIm10b29scyIsCitOQVRJVkVfUkVDSVBFUyA9IHsiYm1hcHRvb2wiOiAiYm1hcC10b29scyIsCisgICAgICAgICAgICAgICAgICAibWNvcHkiOiAibXRvb2xzIiwKICAgICAgICAgICAgICAgICAgICJta2Rvc2ZzIjogImRvc2ZzdG9vbHMiLAogICAgICAgICAgICAgICAgICAgIm1rZnMuYnRyZnMiOiAiYnRyZnMtdG9vbHMiLAogICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0MiI6ICJlMmZzcHJvZ3MiLApAQCAtNDMsNiArNDUsNyBAQAogICAgICAgICAgICAgICAgICAgIm1rc3F1YXNoZnMiOiAic3F1YXNoZnMtdG9vbHMiLAogICAgICAgICAgICAgICAgICAgIm1rc3dhcCI6ICJ1dGlsLWxpbnV4IiwKICAgICAgICAgICAgICAgICAgICJwYXJ0ZWQiOiAicGFydGVkIiwKKyAgICAgICAgICAgICAgICAgICJzZmRpc2siOiAidXRpbC1saW51eCIsCiAgICAgICAgICAgICAgICAgICAic2dkaXNrIjogImdwdGZkaXNrIiwKICAgICAgICAgICAgICAgICAgICJzeXNsaW51eCI6ICJzeXNsaW51eCIKICAgICAgICAgICAgICAgICAgfQpAQCAtODIsMTMgKzg1LDYgQEAKIAogICAgIHJldHVybiBvdXQKIAotZGVmIGNtZF9pbl9wYXRoKGNtZCwgcGF0aCk6Ci0gICAgaW1wb3J0IHNjcmlwdHBhdGgKLQotICAgIHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQotCi0gICAgcmV0dXJuIGJiLnV0aWxzLndoaWNoKHBhdGgsIGNtZCkgIT0gIiIgb3IgRmFsc2UKLQogZGVmIGV4ZWNfbmF0aXZlX2NtZChjbWRfYW5kX2FyZ3MsIG5hdGl2ZV9zeXNyb290LCBjYXRjaD0zLCBwc2V1ZG89IiIpOgogICAgICIiIgogICAgIEV4ZWN1dGUgbmF0aXZlIGNvbW1hbmQsIGNhdGNoaW5nIHN0ZGVyciwgc3Rkb3V0CkBAIC0xMTEsNyArMTA3LDcgQEAKICAgICBtc2dlci5kZWJ1ZygiZXhlY19uYXRpdmVfY21kOiAlcyIgJSBjbWRfYW5kX2FyZ3MpCiAKICAgICAjIElmIHRoZSBjb21tYW5kIGlzbid0IGluIHRoZSBuYXRpdmUgc3lzcm9vdCBzYXkgd2UgZmFpbGVkLgotICAgIGlmIGNtZF9pbl9wYXRoKGFyZ3NbMF0sIG5hdGl2ZV9wYXRocyk6CisgICAgaWYgc3Bhd24uZmluZF9leGVjdXRhYmxlKGFyZ3NbMF0sIG5hdGl2ZV9wYXRocyk6CiAgICAgICAgIHJldCwgb3V0ID0gX2V4ZWNfY21kKG5hdGl2ZV9jbWRfYW5kX2FyZ3MsIFRydWUsIGNhdGNoKQogICAgIGVsc2U6CiAgICAgICAgIHJldCA9IDEyNwpAQCAtMTg2LDggKzE4Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB2YXJzZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9saW5lKGxpbmUsIGltYWdlKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgYml0YmFrZSB2YXJpYWJsZSBmcm9tICVzLiIgJSBmbmFtZQotICAgICAgICAgICAgICAgICAgICBwcmludCAiRmlsZSAlcyBkb2Vzbid0IGV4aXN0LiIgJSBmbmFtZQorICAgICAgICAgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZ2V0IGJpdGJha2UgdmFyaWFibGUgZnJvbSAlcy4iICUgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJGaWxlICVzIGRvZXNuJ3QgZXhpc3QuIiAlIGZuYW1lKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBHZXQgYml0YmFrZSAtZSBvdXRwdXQKQEAgLTIwMSw4ICsxOTcsOCBAQAogICAgICAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dsZXZlbChsb2dfbGV2ZWwpCiAKICAgICAgICAgICAgICAgICBpZiByZXQ6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgJyVzJyBvdXRwdXQuIiAlIGNtZAotICAgICAgICAgICAgICAgICAgICBwcmludCAiQml0YmFrZSBmYWlsZWQgd2l0aCBlcnJvcjpcbiVzXG4iICUgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGdldCAnJXMnIG91dHB1dC4iICUgY21kKQorICAgICAgICAgICAgICAgICAgICBwcmludCgiQml0YmFrZSBmYWlsZWQgd2l0aCBlcnJvcjpcbiVzXG4iICUgbGluZXMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICAgICAgIyBQYXJzZSBiaXRiYWtlIC1lIG91dHB1dApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5CmluZGV4IGFkNTk2ZDIuLmNiMDMwMDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcGFydGl0aW9uZWRmcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3BhcnRpdGlvbmVkZnMucHkKQEAgLTIyLDYgKzIyLDcgQEAKIGZyb20gd2ljIGltcG9ydCBtc2dlcgogZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBJbWFnZUVycm9yCiBmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCitmcm9tIHdpYy5maWxlbWFwIGltcG9ydCBzcGFyc2VfY29weQogCiAjIE92ZXJoZWFkIG9mIHRoZSBNQlIgcGFydGl0aW9uaW5nIHNjaGVtZSAoanVzdCBvbmUgc2VjdG9yKQogTUJSX09WRVJIRUFEID0gMQpAQCAtMzIsNyArMzMsNyBAQAogIyBTaXplIG9mIGEgc2VjdG9yIGluIGJ5dGVzCiBTRUNUT1JfU0laRSA9IDUxMgogCi1jbGFzcyBJbWFnZShvYmplY3QpOgorY2xhc3MgSW1hZ2UoKToKICAgICAiIiIKICAgICBHZW5lcmljIGJhc2Ugb2JqZWN0IGZvciBhbiBpbWFnZS4KIApAQCAtNDIsNiArNDMsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYXRpdmVfc3lzcm9vdD1Ob25lKToKICAgICAgICAgc2VsZi5kaXNrcyA9IHt9CiAgICAgICAgIHNlbGYucGFydGl0aW9ucyA9IFtdCisgICAgICAgIHNlbGYucGFydGltYWdlcyA9IFtdCiAgICAgICAgICMgU2l6ZSBvZiBhIHNlY3RvciB1c2VkIGluIGNhbGN1bGF0aW9ucwogICAgICAgICBzZWxmLnNlY3Rvcl9zaXplID0gU0VDVE9SX1NJWkUKICAgICAgICAgc2VsZi5fcGFydGl0aW9uc19sYXllZF9vdXQgPSBGYWxzZQpAQCAtNjYsMTUgKzY4LDE3IEBACiAgICAgICAgICAgICAgICAgICdvZmZzZXQnOiAwLCAgICAgICMgT2Zmc2V0IG9mIG5leHQgcGFydGl0aW9uIChpbiBzZWN0b3JzKQogICAgICAgICAgICAgICAgICAjIE1pbmltdW0gcmVxdWlyZWQgZGlzayBzaXplIHRvIGZpdCBhbGwgcGFydGl0aW9ucyAoaW4gYnl0ZXMpCiAgICAgICAgICAgICAgICAgICdtaW5fc2l6ZSc6IDAsCi0gICAgICAgICAgICAgICAgICdwdGFibGVfZm9ybWF0JzogIm1zZG9zIn0gIyBQYXJ0aXRpb24gdGFibGUgZm9ybWF0CisgICAgICAgICAgICAgICAgICdwdGFibGVfZm9ybWF0JzogIm1zZG9zIiwgIyBQYXJ0aXRpb24gdGFibGUgZm9ybWF0CisgICAgICAgICAgICAgICAgICdpZGVudGlmaWVyJzogTm9uZX0gIyBEaXNrIHN5c3RlbSBpZGVudGlmaWVyCiAKLSAgICBkZWYgYWRkX2Rpc2soc2VsZiwgZGlza19uYW1lLCBkaXNrX29iaik6CisgICAgZGVmIGFkZF9kaXNrKHNlbGYsIGRpc2tfbmFtZSwgZGlza19vYmosIGlkZW50aWZpZXIpOgogICAgICAgICAiIiIgQWRkIGEgZGlzayBvYmplY3Qgd2hpY2ggaGF2ZSB0byBiZSBwYXJ0aXRpb25lZC4gTW9yZSB0aGFuIG9uZSBkaXNrCiAgICAgICAgIGNhbiBiZSBhZGRlZC4gSW4gY2FzZSBvZiBtdWx0aXBsZSBkaXNrcywgZGlzayBwYXJ0aXRpb25zIGhhdmUgdG8gYmUKICAgICAgICAgYWRkZWQgZm9yIGVhY2ggZGlzayBzZXBhcmF0ZWx5IHdpdGggJ2FkZF9wYXJ0aXRpb24oKSIuICIiIgogCiAgICAgICAgIHNlbGYuX19hZGRfZGlzayhkaXNrX25hbWUpCiAgICAgICAgIHNlbGYuZGlza3NbZGlza19uYW1lXVsnZGlzayddID0gZGlza19vYmoKKyAgICAgICAgc2VsZi5kaXNrc1tkaXNrX25hbWVdWydpZGVudGlmaWVyJ10gPSBpZGVudGlmaWVyCiAKICAgICBkZWYgX19hZGRfcGFydGl0aW9uKHNlbGYsIHBhcnQpOgogICAgICAgICAiIiIgVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgJ2FkZF9wYXJ0aXRpb24oKScgd2hpY2ggYWRkcyBhCkBAIC04NywxNCArOTEsMTQgQEAKIAogICAgIGRlZiBhZGRfcGFydGl0aW9uKHNlbGYsIHNpemUsIGRpc2tfbmFtZSwgbW91bnRwb2ludCwgc291cmNlX2ZpbGU9Tm9uZSwgZnN0eXBlPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9Tm9uZSwgZnNvcHRzPU5vbmUsIGJvb3Q9RmFsc2UsIGFsaWduPU5vbmUsIG5vX3RhYmxlPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgIHBhcnRfdHlwZT1Ob25lLCB1dWlkPU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgIHBhcnRfdHlwZT1Ob25lLCB1dWlkPU5vbmUsIHN5c3RlbV9pZD1Ob25lKToKICAgICAgICAgIiIiIEFkZCB0aGUgbmV4dCBwYXJ0aXRpb24uIFBydGl0aW9ucyBoYXZlIHRvIGJlIGFkZGVkIGluIHRoZQogICAgICAgICBmaXJzdC10by1sYXN0IG9yZGVyLiAiIiIKIAogICAgICAgICBrc19wbnVtID0gbGVuKHNlbGYucGFydGl0aW9ucykKIAogICAgICAgICAjIENvbnZlcnRpbmcga0IgdG8gc2VjdG9ycyBmb3IgcGFydGVkCi0gICAgICAgIHNpemUgPSBzaXplICogMTAyNCAvIHNlbGYuc2VjdG9yX3NpemUKKyAgICAgICAgc2l6ZSA9IHNpemUgKiAxMDI0IC8vIHNlbGYuc2VjdG9yX3NpemUKIAogICAgICAgICBwYXJ0ID0geydrc19wbnVtJzoga3NfcG51bSwgIyBQYXJ0aXRpb24gbnVtYmVyIGluIHRoZSBLUyBmaWxlCiAgICAgICAgICAgICAgICAgJ3NpemUnOiBzaXplLCAjIEluIHNlY3RvcnMKQEAgLTExMCw3ICsxMTQsOCBAQAogICAgICAgICAgICAgICAgICdhbGlnbic6IGFsaWduLCAjIFBhcnRpdGlvbiBhbGlnbm1lbnQKICAgICAgICAgICAgICAgICAnbm9fdGFibGUnIDogbm9fdGFibGUsICMgUGFydGl0aW9uIGRvZXMgbm90IGFwcGVhciBpbiBwYXJ0aXRpb24gdGFibGUKICAgICAgICAgICAgICAgICAncGFydF90eXBlJyA6IHBhcnRfdHlwZSwgIyBQYXJ0aXRpb24gdHlwZQotICAgICAgICAgICAgICAgICd1dWlkJzogdXVpZH0gIyBQYXJ0aXRpb24gVVVJRAorICAgICAgICAgICAgICAgICd1dWlkJzogdXVpZCwgIyBQYXJ0aXRpb24gVVVJRAorICAgICAgICAgICAgICAgICdzeXN0ZW1faWQnOiBzeXN0ZW1faWR9ICMgUGFydGl0aW9uIHN5c3RlbSBpZAogCiAgICAgICAgIHNlbGYuX19hZGRfcGFydGl0aW9uKHBhcnQpCiAKQEAgLTEzMCw3ICsxMzUsNyBAQAogICAgICAgICBmb3IgbnVtIGluIHJhbmdlKGxlbihzZWxmLnBhcnRpdGlvbnMpKToKICAgICAgICAgICAgIHBhcnQgPSBzZWxmLnBhcnRpdGlvbnNbbnVtXQogCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5kaXNrcy5oYXNfa2V5KHBhcnRbJ2Rpc2tfbmFtZSddKToKKyAgICAgICAgICAgIGlmIHBhcnRbJ2Rpc2tfbmFtZSddIG5vdCBpbiBzZWxmLmRpc2tzOgogICAgICAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoIk5vIGRpc2sgJXMgZm9yIHBhcnRpdGlvbiAlcyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFydFsnZGlza19uYW1lJ10sIHBhcnRbJ21vdW50cG9pbnQnXSkpCiAKQEAgLTE3MSwxMiArMTc2LDEyIEBACiAgICAgICAgICAgICAgICAgIyBnYXBzIHdlIGNvdWxkIGVubGFyZ2VhIHRoZSBwcmV2aW91cyBwYXJ0aXRpb24/CiAKICAgICAgICAgICAgICAgICAjIENhbGMgaG93IG11Y2ggdGhlIGFsaWdubWVudCBpcyBvZmYuCi0gICAgICAgICAgICAgICAgYWxpZ25fc2VjdG9ycyA9IGRpc2tbJ29mZnNldCddICUgKHBhcnRbJ2FsaWduJ10gKiAxMDI0IC8gc2VsZi5zZWN0b3Jfc2l6ZSkKKyAgICAgICAgICAgICAgICBhbGlnbl9zZWN0b3JzID0gZGlza1snb2Zmc2V0J10gJSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLy8gc2VsZi5zZWN0b3Jfc2l6ZSkKIAogICAgICAgICAgICAgICAgIGlmIGFsaWduX3NlY3RvcnM6CiAgICAgICAgICAgICAgICAgICAgICMgSWYgcGFydGl0aW9uIGlzIG5vdCBhbGlnbmVkIGFzIHJlcXVpcmVkLCB3ZSBuZWVkCiAgICAgICAgICAgICAgICAgICAgICMgdG8gbW92ZSBmb3J3YXJkIHRvIHRoZSBuZXh0IGFsaWdubWVudCBwb2ludAotICAgICAgICAgICAgICAgICAgICBhbGlnbl9zZWN0b3JzID0gKHBhcnRbJ2FsaWduJ10gKiAxMDI0IC8gc2VsZi5zZWN0b3Jfc2l6ZSkgLSBhbGlnbl9zZWN0b3JzCisgICAgICAgICAgICAgICAgICAgIGFsaWduX3NlY3RvcnMgPSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLy8gc2VsZi5zZWN0b3Jfc2l6ZSkgLSBhbGlnbl9zZWN0b3JzCiAKICAgICAgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlJlYWxpZ25tZW50IGZvciAlcyVzIHdpdGggJXMgc2VjdG9ycywgb3JpZ2luYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2Zmc2V0ICVzLCB0YXJnZXQgYWxpZ25tZW50IGlzICVzSy4iICUKQEAgLTIzNCw3ICsyMzksNyBAQAogICAgIGRlZiBfX2Zvcm1hdF9kaXNrcyhzZWxmKToKICAgICAgICAgc2VsZi5sYXlvdXRfcGFydGl0aW9ucygpCiAKLSAgICAgICAgZm9yIGRldiBpbiBzZWxmLmRpc2tzLmtleXMoKToKKyAgICAgICAgZm9yIGRldiBpbiBzZWxmLmRpc2tzOgogICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbZGV2XQogICAgICAgICAgICAgbXNnZXIuZGVidWcoIkluaXRpYWxpemluZyBwYXJ0aXRpb24gdGFibGUgZm9yICVzIiAlIFwKICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlKSkKQEAgLTI0Miw2ICsyNDcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlza1snZGlzayddLmRldmljZSwgZGlza1sncHRhYmxlX2Zvcm1hdCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQogCisgICAgICAgICAgICBpZiBkaXNrWydpZGVudGlmaWVyJ106CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlNldCBkaXNrIGlkZW50aWZpZXIgJXgiICUgZGlza1snaWRlbnRpZmllciddKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihkaXNrWydkaXNrJ10uZGV2aWNlLCAncitiJykgYXMgaW1nOgorICAgICAgICAgICAgICAgICAgICBpbWcuc2VlaygweDFCOCkKKyAgICAgICAgICAgICAgICAgICAgaW1nLndyaXRlKGRpc2tbJ2lkZW50aWZpZXInXS50b19ieXRlcyg0LCAnbGl0dGxlJykpCisKICAgICAgICAgbXNnZXIuZGVidWcoIkNyZWF0aW5nIHBhcnRpdGlvbnMiKQogCiAgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydGl0aW9uczoKQEAgLTI5Niw3ICszMDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIHBhcnRbJ3BhcnRfdHlwZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza1snZGlzayddLmRldmljZSksIHNlbGYubmF0aXZlX3N5c3Jvb3QpCiAKLSAgICAgICAgICAgIGlmIHBhcnRbJ3V1aWQnXToKKyAgICAgICAgICAgIGlmIHBhcnRbJ3V1aWQnXSBhbmQgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICJncHQiOgogICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJwYXJ0aXRpb24gJWQ6IHNldCBVVUlEIHRvICVzIiAlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIHBhcnRbJ3V1aWQnXSkpCiAgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJzZ2Rpc2sgLS1wYXJ0aXRpb24tZ3VpZD0lZDolcyAlcyIgJSBcCkBAIC0zMTAsNiArMzIxLDEwIEBACiAgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJwYXJ0ZWQgLXMgJXMgc2V0ICVkICVzIG9uIiAlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UsIHBhcnRbJ251bSddLCBmbGFnX25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgaWYgcGFydFsnc3lzdGVtX2lkJ106CisgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJzZmRpc2sgLS1wYXJ0LXR5cGUgJXMgJXMgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlza1snZGlzayddLmRldmljZSwgcGFydFsnbnVtJ10sIHBhcnRbJ3N5c3RlbV9pZCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKIAogICAgICAgICAgICAgIyBQYXJ0ZWQgZGVmYXVsdHMgdG8gZW5hYmxpbmcgdGhlIGxiYSBmbGFnIGZvciBmYXQxNiBwYXJ0aXRpb25zLAogICAgICAgICAgICAgIyB3aGljaCBjYXVzZXMgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBzb21lIGZpcm13YXJlIChhbmQgcmVhbGx5CkBAIC0zMzAsNiArMzQ1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGRpc2tbJ2Rpc2snXS5jbGVhbnVwKCkKICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyByZW1vdmUgcGFydGl0aW9uIGltYWdlcworICAgICAgICBmb3IgaW1hZ2UgaW4gc2VsZi5wYXJ0aW1hZ2VzOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoaW1hZ2UpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShpbWFnZSkKIAogICAgIGRlZiBhc3NlbWJsZShzZWxmLCBpbWFnZV9maWxlKToKICAgICAgICAgbXNnZXIuZGVidWcoIkluc3RhbGxpbmcgcGFydGl0aW9ucyIpCkBAIC0zMzgsMjAgKzM1NywxOSBAQAogICAgICAgICAgICAgc291cmNlID0gcGFydFsnc291cmNlX2ZpbGUnXQogICAgICAgICAgICAgaWYgc291cmNlOgogICAgICAgICAgICAgICAgICMgaW5zdGFsbCBzb3VyY2VfZmlsZSBjb250ZW50cyBpbnRvIGEgcGFydGl0aW9uCi0gICAgICAgICAgICAgICAgY21kID0gImRkIGlmPSVzIG9mPSVzIGJzPSVkIHNlZWs9JWQgY291bnQ9JWQgY29udj1ub3RydW5jIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAoc291cmNlLCBpbWFnZV9maWxlLCBzZWxmLnNlY3Rvcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICBwYXJ0WydzdGFydCddLCBwYXJ0WydzaXplJ10pCi0gICAgICAgICAgICAgICAgZXhlY19jbWQoY21kKQorICAgICAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNvdXJjZSwgaW1hZ2VfZmlsZSwgcGFydFsnc3RhcnQnXSAqIHNlbGYuc2VjdG9yX3NpemUpCiAKICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGVkICVzIGluIHBhcnRpdGlvbiAlZCwgc2VjdG9ycyAlZC0lZCwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXplICVkIHNlY3RvcnMiICUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIHBhcnRbJ251bSddLCBwYXJ0WydzdGFydCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0WydzdGFydCddICsgcGFydFsnc2l6ZSddIC0gMSwgcGFydFsnc2l6ZSddKSkKIAotICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzb3VyY2UsIGltYWdlX2ZpbGUgKyAnLnAlZCcgJSBwYXJ0WydudW0nXSkKKyAgICAgICAgICAgICAgICBwYXJ0aW1hZ2UgPSBpbWFnZV9maWxlICsgJy5wJWQnICUgcGFydFsnbnVtJ10KKyAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc291cmNlLCBwYXJ0aW1hZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5wYXJ0aW1hZ2VzLmFwcGVuZChwYXJ0aW1hZ2UpCiAKICAgICBkZWYgY3JlYXRlKHNlbGYpOgotICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3Mua2V5cygpOgorICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3M6CiAgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1tkZXZdCiAgICAgICAgICAgICBkaXNrWydkaXNrJ10uY3JlYXRlKCkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9ydW5uZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3J1bm5lci5weQppbmRleCA3NDMxOTE3Li5kYjUzNmJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3J1bm5lci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3J1bm5lci5weQpAQCAtNjUsOSArNjUsOSBAQAogICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsbl9vcl9hcmdzLCBzdGRvdXQ9c291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXNlcnIsIHNoZWxsPXNoZWxsKQogICAgICAgICAoc291dCwgc2VycikgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKLSAgICAgICAgIyBjb21iaW5lIHN0ZG91dCBhbmQgc3RkZXJyLCBmaWx0ZXIgTm9uZSBvdXQKLSAgICAgICAgb3V0ID0gJycuam9pbihmaWx0ZXIoTm9uZSwgW3NvdXQsIHNlcnJdKSkKLSAgICBleGNlcHQgT1NFcnJvciwgZXJyOgorICAgICAgICAjIGNvbWJpbmUgc3Rkb3V0IGFuZCBzdGRlcnIsIGZpbHRlciBOb25lIG91dCBhbmQgZGVjb2RlCisgICAgICAgIG91dCA9ICcnLmpvaW4oW291dC5kZWNvZGUoJ3V0Zi04JykgZm9yIG91dCBpbiBbc291dCwgc2Vycl0gaWYgb3V0XSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIGlmIGVyci5lcnJubyA9PSAyOgogICAgICAgICAgICAgIyBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQogICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ0Nhbm5vdCBydW4gY29tbWFuZDogJXMsIGxvc3QgZGVwZW5kZW5jeT8nICUgY21kKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbG5yIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbG5yCmluZGV4IDlkYWNlYmUuLjVmZWQ3ODAgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xucgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9sbnIKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIENyZWF0ZSBhICpyZWxhdGl2ZSogc3ltbGluaywganVzdCBsaWtlIGxuIC0tcmVsYXRpdmUgZG9lcyBidXQgd2l0aG91dCBuZWVkaW5nCiAjIGNvcmV1dGlscyA4LjE2LgpAQCAtNiw3ICs2LDcgQEAKIGltcG9ydCBzeXMsIG9zCiAKIGlmIGxlbihzeXMuYXJndikgIT0gMzoKLSAgIHByaW50ICIkIGxuciBUQVJHRVQgTElOS19OQU1FIgorICAgcHJpbnQoIiQgbG5yIFRBUkdFVCBMSU5LX05BTUUiKQogICAgc3lzLmV4aXQoMSkKIAogdGFyZ2V0ID0gc3lzLmFyZ3ZbMV0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWJ1aWxkLXBlcmYtdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWJ1aWxkLXBlcmYtdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzhlMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGQtcGVyZi10ZXN0CkBAIC0wLDAgKzEsMjExIEBACisjIS91c3IvYmluL3B5dGhvbjMKKyMKKyMgQnVpbGQgcGVyZm9ybWFuY2UgdGVzdCBzY3JpcHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorIyBtb3JlIGRldGFpbHMuCisjCisiIiJCdWlsZCBwZXJmb3JtYW5jZSB0ZXN0IHNjcmlwdCIiIgoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmY250bAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSArICcvbGliJykKK2ltcG9ydCBzY3JpcHRwYXRoCitzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCitpbXBvcnQgb2VxYS5idWlsZHBlcmYKK2Zyb20gb2VxYS5idWlsZHBlcmYgaW1wb3J0IChCdWlsZFBlcmZUZXN0TG9hZGVyLCBCdWlsZFBlcmZUZXN0UmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkUGVyZlRlc3RSdW5uZXIsIEtlcm5lbERyb3BDYWNoZXMpCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZAorZnJvbSBvZXFhLnV0aWxzLmdpdCBpbXBvcnQgR2l0UmVwbywgR2l0RXJyb3IKKworCisjIFNldC11cCBsb2dnaW5nCitMT0dfRk9STUFUID0gJ1slKGFzY3RpbWUpc10gJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnCitsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTywgZm9ybWF0PUxPR19GT1JNQVQsCisgICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9JyVZLSVtLSVkICVIOiVNOiVTJykKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKworCitkZWYgYWNxdWlyZV9sb2NrKGxvY2tfZik6CisgICAgIiIiQWNxdWlyZSBmbG9jayBvbiBmaWxlIiIiCisgICAgbG9nLmRlYnVnKCJBY3F1aXJpbmcgbG9jayAlcyIsIG9zLnBhdGguYWJzcGF0aChsb2NrX2YubmFtZSkpCisgICAgdHJ5OgorICAgICAgICBmY250bC5mbG9jayhsb2NrX2YsIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVBR0FJTjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByYWlzZQorICAgIGxvZy5kZWJ1ZygiTG9jayBhY3F1aXJlZCIpCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgcHJlX3J1bl9zYW5pdHlfY2hlY2soKToKKyAgICAiIiJTYW5pdHkgY2hlY2sgb2YgYnVpbGQgZW52aXJvbm1lbnQiIiIKKyAgICBidWlsZF9kaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgIGlmIG5vdCBidWlsZF9kaXI6CisgICAgICAgIGxvZy5lcnJvcigiQlVJTERESVIgbm90IHNldC4gUGxlYXNlIHJ1biB0aGUgYnVpbGQgZW52aXJvbm1uZW50IHNldHVwICIKKyAgICAgICAgICAgICAgICAgICJzY3JpcHQuIikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgb3MuZ2V0Y3dkKCkgIT0gYnVpbGRfZGlyOgorICAgICAgICBsb2cuZXJyb3IoIlBsZWFzZSBydW4gdGhpcyBzY3JpcHQgdW5kZXIgQlVJTERESVIgKCVzKSIsIGJ1aWxkX2RpcikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXQgPSBydW5DbWQoJ3doaWNoIGJpdGJha2UnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgaWYgcmV0LnN0YXR1czoKKyAgICAgICAgbG9nLmVycm9yKCJiaXRiYWtlIGNvbW1hbmQgbm90IGZvdW5kIikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIGluaXRfZ2l0X3JlcG8ocGF0aCk6CisgICAgIiIiQ2hlY2svY3JlYXRlIEdpdCByZXBvc2l0b3J5IHdoZXJlIHRvIHN0b3JlIHJlc3VsdHMiIiIKKyAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCisgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgIGxvZy5lcnJvcigiSW52YWxpZCBHaXQgcmVwbyAlczogcGF0aCBleGlzdHMgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeSIsIHBhdGgpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5ta2RpcihwYXRoKQorICAgICAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBQZXJtaXNzaW9uRXJyb3IpIGFzIGVycjoKKyAgICAgICAgICAgIGxvZy5lcnJvcigiRmFpbGVkIHRvIG1rZGlyICVzOiAlcyIsIHBhdGgsIGVycikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIG5vdCBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICBsb2cuaW5mbygiSW5pdGlhbGl6aW5nIGEgbmV3IEdpdCByZXBvIGF0ICVzIiwgcGF0aCkKKyAgICAgICAgR2l0UmVwby5pbml0KHBhdGgpCisgICAgdHJ5OgorICAgICAgICBHaXRSZXBvKHBhdGgsIGlzX3RvcGRpcj1UcnVlKQorICAgIGV4Y2VwdCBHaXRFcnJvcjoKKyAgICAgICAgbG9nLmVycm9yKCJObyBHaXQgcmVwb3NpdG9yeSBidXQgYSBub24tZW1wdHkgZGlyZWN0b3J5IGZvdW5kIGF0ICVzLlxuIgorICAgICAgICAgICAgICAgICAgIlBsZWFzZSBzcGVjaWZ5IGEgR2l0IHJlcG9zaXRvcnksIGFuIGVtcHR5IGRpcmVjdG9yeSBvciAiCisgICAgICAgICAgICAgICAgICAiYSBub24tZXhpc3RpbmcgZGlyZWN0b3J5IiwgcGF0aCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgc2V0dXBfZmlsZV9sb2dnaW5nKGxvZ19maWxlKToKKyAgICAiIiJTZXR1cCBsb2dnaW4gdG8gZmlsZSIiIgorICAgIGxvZ19kaXIgPSBvcy5wYXRoLmRpcm5hbWUobG9nX2ZpbGUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvZ19kaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhsb2dfZGlyKQorICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKExPR19GT1JNQVQpCisgICAgaGFuZGxlciA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIobG9nX2ZpbGUpCisgICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGxvZy5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKworZGVmIGFyY2hpdmVfYnVpbGRfY29uZihvdXRfZGlyKToKKyAgICAiIiJBcmNoaXZlIGJ1aWxkL2NvbmYgdG8gdGVzdCByZXN1bHRzIiIiCisgICAgc3JjX2RpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydCVUlMRERJUiddLCAnY29uZicpCisgICAgdGd0X2RpciA9IG9zLnBhdGguam9pbihvdXRfZGlyLCAnYnVpbGQnLCAnY29uZicpCisgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKHRndF9kaXIpKQorICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCB0Z3RfZGlyKQorCisKK2RlZiBwYXJzZV9hcmdzKGFyZ3YpOgorICAgICIiIlBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiIiIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLUQnLCAnLS1kZWJ1ZycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgZGVidWcgbGV2ZWwgbG9nZ2luZycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1nbG9iYWxyZXMtZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPW9zLnBhdGguYWJzcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkFwcGVuZCByZXN1bHRzIHRvICdnbG9iYWxyZXMnIGNzdiBmaWxlIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxvY2stZmlsZScsIGRlZmF1bHQ9Jy4vb2UtYnVpbGQtcGVyZi5sb2NrJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J0ZJTEVOQU1FJywgdHlwZT1vcy5wYXRoLmFic3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMb2NrIGZpbGUgdG8gdXNlIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW91dC1kaXInLCBkZWZhdWx0PSdyZXN1bHRzLXtkYXRlfScsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPW9zLnBhdGguYWJzcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCBkaXJlY3RvcnkgZm9yIHRlc3QgcmVzdWx0cyIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2ctZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSd7b3V0X2Rpcn0vb2UtYnVpbGQtcGVyZi10ZXN0LmxvZycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMb2cgZmlsZSBvZiB0aGlzIHNjcmlwdCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ydW4tdGVzdHMnLCBuYXJncz0nKycsIG1ldGF2YXI9J1RFU1QnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iTGlzdCBvZiB0ZXN0cyB0byBydW4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29tbWl0LXJlc3VsdHMnLCBtZXRhdmFyPSdHSVRfRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9b3MucGF0aC5hYnNwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQ29tbWl0IHJlc3VsdCBkYXRhIHRvIGEgKGxvY2FsKSBnaXQgcmVwb3NpdG9yeSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb21taXQtcmVzdWx0cy1icmFuY2gnLCBtZXRhdmFyPSdCUkFOQ0gnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ie2dpdF9icmFuY2h9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNvbW1pdCByZXN1bHRzIHRvIGJyYW5jaCBCUkFOQ0guIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvbW1pdC1yZXN1bHRzLXRhZycsIG1ldGF2YXI9J1RBRycsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJ7Z2l0X2JyYW5jaH0ve2dpdF9jb21taXRfY291bnR9LWd7Z2l0X2NvbW1pdH0ve3RhZ19udW19IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRhZyByZXN1bHRzIGNvbW1pdCB3aXRoIFRBRy4iKQorCisgICAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKworZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAiIiJTY3JpcHQgZW50cnkgcG9pbnQiIiIKKyAgICBhcmdzID0gcGFyc2VfYXJncyhhcmd2KQorCisgICAgIyBTZXQtdXAgbG9nIGZpbGUKKyAgICBvdXRfZGlyID0gYXJncy5vdXRfZGlyLmZvcm1hdChkYXRlPWRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkKKyAgICBzZXR1cF9maWxlX2xvZ2dpbmcoYXJncy5sb2dfZmlsZS5mb3JtYXQob3V0X2Rpcj1vdXRfZGlyKSkKKworICAgIGlmIGFyZ3MuZGVidWc6CisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgbG9ja19mID0gb3BlbihhcmdzLmxvY2tfZmlsZSwgJ3cnKQorICAgIGlmIG5vdCBhY3F1aXJlX2xvY2sobG9ja19mKToKKyAgICAgICAgbG9nLmVycm9yKCJBbm90aGVyIGluc3RhbmNlIG9mIHRoaXMgc2NyaXB0IGlzIHJ1bm5pbmcsIGV4aXRpbmcuLi4iKQorICAgICAgICByZXR1cm4gMQorCisgICAgaWYgbm90IHByZV9ydW5fc2FuaXR5X2NoZWNrKCk6CisgICAgICAgIHJldHVybiAxCisgICAgaWYgYXJncy5jb21taXRfcmVzdWx0czoKKyAgICAgICAgaWYgbm90IGluaXRfZ2l0X3JlcG8oYXJncy5jb21taXRfcmVzdWx0cyk6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgIyBDaGVjayBvdXIgY2FwYWJpbGl0eSB0byBkcm9wIGNhY2hlcyBhbmQgYXNrIHBhc3MgaWYgbmVlZGVkCisgICAgS2VybmVsRHJvcENhY2hlcy5jaGVjaygpCisKKyAgICAjIExvYWQgYnVpbGQgcGVyZiB0ZXN0cworICAgIGxvYWRlciA9IEJ1aWxkUGVyZlRlc3RMb2FkZXIoKQorICAgIGlmIGFyZ3MucnVuX3Rlc3RzOgorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoYXJncy5ydW5fdGVzdHMsIG9lcWEuYnVpbGRwZXJmKQorICAgIGVsc2U6CisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUob2VxYS5idWlsZHBlcmYpCisKKyAgICBhcmNoaXZlX2J1aWxkX2NvbmYob3V0X2RpcikKKyAgICBydW5uZXIgPSBCdWlsZFBlcmZUZXN0UnVubmVyKG91dF9kaXIsIHZlcmJvc2l0eT0yKQorCisgICAgIyBTdXBwcmVzcyBsb2dnZXIgb3V0cHV0IHRvIHN0ZGVyciBzbyB0aGF0IHRoZSBvdXRwdXQgZnJvbSB1bml0dGVzdAorICAgICMgaXMgbm90IG1peGVkIHdpdGggb2NjYXNpb25hbCBsb2dnZXIgb3V0cHV0CisgICAgbG9nLmhhbmRsZXJzWzBdLnNldExldmVsKGxvZ2dpbmcuQ1JJVElDQUwpCisKKyAgICAjIFJ1biBhY3R1YWwgdGVzdHMKKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQorCisgICAgIyBSZXN0b3JlIGxvZ2dlciBvdXRwdXQgdG8gc3RkZXJyCisgICAgbG9nLmhhbmRsZXJzWzBdLnNldExldmVsKGxvZy5sZXZlbCkKKworICAgIGlmIGFyZ3MuZ2xvYmFscmVzX2ZpbGU6CisgICAgICAgIHJlc3VsdC51cGRhdGVfZ2xvYmFscmVzX2ZpbGUoYXJncy5nbG9iYWxyZXNfZmlsZSkKKyAgICBpZiBhcmdzLmNvbW1pdF9yZXN1bHRzOgorICAgICAgICByZXN1bHQuZ2l0X2NvbW1pdF9yZXN1bHRzKGFyZ3MuY29tbWl0X3Jlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5jb21taXRfcmVzdWx0c19icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5jb21taXRfcmVzdWx0c190YWcpCisgICAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIHJldHVybiAyCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKCkpCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWJ1aWxkZW52LWludGVybmFsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwKaW5kZXggZTA0ZGIwMy4uOWZhZTNiNCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwKQEAgLTI5LDI3ICsyOSwzMSBAQAogICAgIHJldHVybiAxCiBmaQogCi0jIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdXNpbmcgcHl0aG9uIHYzLnguIFRoaXMgY2hlY2sgY2FuJ3QgZ28gaW50bwotIyBzYW5pdHkuYmJjbGFzcyBiZWNhdXNlIGJpdGJha2UncyBzb3VyY2UgY29kZSBkb2Vzbid0IGV2ZW4gcGFzcwotIyBwYXJzaW5nIHN0YWdlIHdoZW4gdXNlZCB3aXRoIHB5dGhvbiB2Mywgc28gd2UgY2F0Y2ggaXQgaGVyZSBzbyB3ZQotIyBjYW4gb2ZmZXIgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UuCi1weV92M19jaGVjaz0kKC91c3IvYmluL2VudiBweXRob24gLS12ZXJzaW9uIDI+JjEgfCBncmVwICJQeXRob24gMyIpCi1pZiBbIC1uICIkcHlfdjNfY2hlY2siIF07IHRoZW4KLSAgICBlY2hvID4mMiAiQml0YmFrZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHB5dGhvbiB2MyIKLSAgICBlY2hvID4mMiAiUGxlYXNlIHNldCB1cCBweXRob24gdjIgYXMgeW91ciBkZWZhdWx0IHB5dGhvbiBpbnRlcnByZXRlciIKKyMgTWFrZSBzdXJlIHdlJ3JlIG5vdCB1c2luZyBweXRob24gdjMueCBhcyAncHl0aG9uJywgd2UgZG9uJ3Qgc3VwcG9ydCBpdC4KK3B5X3YyX2NoZWNrPSQoL3Vzci9iaW4vZW52IHB5dGhvbiAtLXZlcnNpb24gMj4mMSB8IGdyZXAgIlB5dGhvbiAzIikKK2lmIFsgLW4gIiRweV92Ml9jaGVjayIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJPcGVuRW1iZWRkZWQgcmVxdWlyZXMgJ3B5dGhvbicgdG8gYmUgcHl0aG9uIHYyICg+PSAyLjcuMyksIG5vdCBweXRob24gdjMuIgorICAgIGVjaG8gPiYyICJQbGVhc2Ugc2V0IHVwIHB5dGhvbiB2MiBhcyB5b3VyIGRlZmF1bHQgJ3B5dGhvbicgaW50ZXJwcmV0ZXIuIgogICAgIHJldHVybiAxCiBmaQotdW5zZXQgcHlfdjNfY2hlY2sKK3Vuc2V0IHB5X3YyX2NoZWNrCiAKLSMgU2ltaWxhcmx5LCB3ZSBub3cgaGF2ZSBjb2RlIHRoYXQgZG9lc24ndCBwYXJzZSBjb3JyZWN0bHkgd2l0aCBvbGRlcgotIyB2ZXJzaW9ucyBvZiBQeXRob24sIGFuZCByYXRoZXIgdGhhbiBmaXhpbmcgdGhhdCBhbmQgYmVpbmcgZXRlcm5hbGx5Ci0jIHZpZ2lsYW50IGZvciBhbnkgb3RoZXIgbmV3IGZlYXR1cmUgdXNlLCBqdXN0IGNoZWNrIHRoZSB2ZXJzaW9uIGhlcmUuCi1weV92MjZfY2hlY2s9JChweXRob24gLWMgJ2ltcG9ydCBzeXM7IHByaW50IHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsNywzKScpCi1pZiBbICIkcHlfdjI2X2NoZWNrIiAhPSAiVHJ1ZSIgXTsgdGhlbgotICAgIGVjaG8gPiYyICJCaXRCYWtlIHJlcXVpcmVzIFB5dGhvbiAyLjcuMyBvciBsYXRlciIKK3B5X3YyN19jaGVjaz0kKHB5dGhvbiAtYyAnaW1wb3J0IHN5czsgcHJpbnQgc3lzLnZlcnNpb25faW5mbyA+PSAoMiw3LDMpJykKK2lmIFsgIiRweV92MjdfY2hlY2siICE9ICJUcnVlIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIk9wZW5FbWJlZGRlZCByZXF1aXJlcyAncHl0aG9uJyB0byBiZSBweXRob24gdjIgKD49IDIuNy4zKSwgbm90IHB5dGhvbiB2My4iCisgICAgZWNobyA+JjIgIlBsZWFzZSB1cGdyYWRlIHlvdXIgcHl0aG9uIHYyLiIKK2ZpCit1bnNldCBweV92MjdfY2hlY2sKKworIyBXZSBwb3RlbnRpYWxseSBoYXZlIGNvZGUgdGhhdCBkb2Vzbid0IHBhcnNlIGNvcnJlY3RseSB3aXRoIG9sZGVyIHZlcnNpb25zIAorIyBvZiBQeXRob24sIGFuZCByYXRoZXIgdGhhbiBmaXhpbmcgdGhhdCBhbmQgYmVpbmcgZXRlcm5hbGx5IHZpZ2lsYW50IGZvciAKKyMgYW55IG90aGVyIG5ldyBmZWF0dXJlIHVzZSwganVzdCBjaGVjayB0aGUgdmVyc2lvbiBoZXJlLgorcHlfdjM0X2NoZWNrPSQocHl0aG9uMyAtYyAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLnZlcnNpb25faW5mbyA+PSAoMyw0LDApKScpCitpZiBbICIkcHlfdjM0X2NoZWNrIiAhPSAiVHJ1ZSIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJCaXRCYWtlIHJlcXVpcmVzIFB5dGhvbiAzLjQuMCBvciBsYXRlciBhcyAncHl0aG9uMyciCiAgICAgcmV0dXJuIDEKIGZpCi11bnNldCBweV92MjZfY2hlY2sKK3Vuc2V0IHB5X3YzNF9jaGVjawogCiBpZiBbIC16ICIkQkRJUiIgXTsgdGhlbgogICAgIGlmIFsgLXogIiQxIiBdOyB0aGVuCkBAIC05Miw3ICs5Niw3IEBACiBCVUlMRERJUj0kKHJlYWRsaW5rIC1mICIkQlVJTERESVIiKQogCiBpZiBbICEgLWQgIiRCSVRCQUtFRElSIiBdOyB0aGVuCi0gICAgZWNobyA+JjIgIkVycm9yOiBUaGUgYml0YmFrZSBkaXJlY3RvcnkgKCRCSVRCQUtFRElSKSBkb2VzIG5vdCBleGlzdCEgIFBsZWFzZSBlbnN1cmUgYSBjb3B5IG9mIGJpdGJha2UgZXhpc3RzIGF0IHRoaXMgbG9jYXRpb24iCisgICAgZWNobyA+JjIgIkVycm9yOiBUaGUgYml0YmFrZSBkaXJlY3RvcnkgKCRCSVRCQUtFRElSKSBkb2VzIG5vdCBleGlzdCEgIFBsZWFzZSBlbnN1cmUgYSBjb3B5IG9mIGJpdGJha2UgZXhpc3RzIGF0IHRoaXMgbG9jYXRpb24gb3Igc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBwYXRoIG9uIHRoZSBjb21tYW5kIGxpbmUiCiAgICAgcmV0dXJuIDEKIGZpCiAKQEAgLTExNCw3ICsxMTgsNyBAQAogSFRUUFNfUFJPWFkgaHR0cHNfcHJveHkgRlRQX1BST1hZIGZ0cF9wcm94eSBGVFBTX1BST1hZIGZ0cHNfcHJveHkgQUxMX1BST1hZIFwKIGFsbF9wcm94eSBOT19QUk9YWSBub19wcm94eSBTU0hfQUdFTlRfUElEIFNTSF9BVVRIX1NPQ0sgQkJfU1JDUkVWX1BPTElDWSBcCiBTREtNQUNISU5FIEJCX05VTUJFUl9USFJFQURTIEJCX05PX05FVFdPUksgUEFSQUxMRUxfTUFLRSBHSVRfUFJPWFlfQ09NTUFORCBcCi1TT0NLUzVfUEFTU1dEIFNPQ0tTNV9VU0VSIFNDUkVFTkRJUiBTVEFNUFNfRElSIgorU09DS1M1X1BBU1NXRCBTT0NLUzVfVVNFUiBTQ1JFRU5ESVIgU1RBTVBTX0RJUiBCQlBBVEhfRVhUUkEgQkJfU0VUU0NFTkVfRU5GT1JDRSIKIAogQkJfRU5WX0VYVFJBV0hJVEU9IiQoZWNobyAkQkJfRU5WX0VYVFJBV0hJVEUgJEJCX0VOVl9FWFRSQVdISVRFX09FIHwgdHIgJyAnICdcbicgfCBMQ19BTEw9QyBzb3J0IC0tdW5pcXVlIHwgdHIgJ1xuJyAnICcpIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1jaGVjay1zc3RhdGUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1jaGVjay1zc3RhdGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDA2ZWZlNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWNoZWNrLXNzdGF0ZQpAQCAtMCwwICsxLDEyMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCisjIFF1ZXJ5IHdoaWNoIHRhc2tzIHdpbGwgYmUgcmVzdG9yZWQgZnJvbSBzc3RhdGUKKyMKKyMgQ29weXJpZ2h0IDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yZWQtYnk6ICBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHJlCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQoraW1wb3J0IHNjcmlwdHV0aWxzCitpbXBvcnQgc2NyaXB0cGF0aAorc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCitpbXBvcnQgYXJncGFyc2Vfb2UKKworCitkZWYgdHJhbnNsYXRlX3ZpcnR1YWxmbnModGFza3MpOgorICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdHJ5OgorICAgICAgICB0aW5mb2lsLnByZXBhcmUoRmFsc2UpCisKKyAgICAgICAgcmVjaXBlY2FjaGVzID0gdGluZm9pbC5jb29rZXIucmVjaXBlY2FjaGVzCisgICAgICAgIG91dHRhc2tzID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICAobWMsIGZuLCB0YXNrbmFtZSkgPSBiYi5ydW5xdWV1ZS5zcGxpdF90aWQodGFzaykKKyAgICAgICAgICAgIGlmIHRhc2tuYW1lLmVuZHN3aXRoKCdfc2V0c2NlbmUnKToKKyAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHRhc2tuYW1lWzotOV0KKyAgICAgICAgICAgIG91dHRhc2tzLmFwcGVuZCgnJXM6JXMnICUgKHJlY2lwZWNhY2hlc1ttY10ucGtnX2ZuW2ZuXSwgdGFza25hbWUpKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQorICAgIHJldHVybiBvdXR0YXNrcworCisKK2RlZiBjaGVjayhhcmdzKToKKyAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nb2UtY2hlY2stc3N0YXRlLScpCisgICAgdHJ5OgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBpZiBub3QgYXJncy5zYW1lX3RtcGRpcjoKKyAgICAgICAgICAgIGVudlsnQkJfRU5WX0VYVFJBV0hJVEUnXSA9IGVudi5nZXQoJ0JCX0VOVl9FWFRSQVdISVRFJywgJycpICsgJyBUTVBESVJfZm9yY2V2YXJpYWJsZScKKyAgICAgICAgICAgIGVudlsnVE1QRElSX2ZvcmNldmFyaWFibGUnXSA9IHRtcGRpcgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAnYml0YmFrZSAtbiAlcycgJSAnICcuam9pbihhcmdzLnRhcmdldCksCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAgICAgZW52PWVudiwKKyAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKworICAgICAgICAgICAgdGFza19yZSA9IHJlLmNvbXBpbGUoJ05PVEU6IFJ1bm5pbmcgc2V0c2NlbmUgdGFzayBbMC05XSsgb2YgWzAtOV0rIFwoKFteKV0rKVwpJykKKyAgICAgICAgICAgIHRhc2tzID0gW10KKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5kZWNvZGUoJ3V0Zi04Jykuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIHJlcyA9IHRhc2tfcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVuZChyZXMuZ3JvdXAoMSkpCisgICAgICAgICAgICBvdXR0YXNrcyA9IHRyYW5zbGF0ZV92aXJ0dWFsZm5zKHRhc2tzKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHByaW50KCdFUlJPUjogYml0YmFrZSBmYWlsZWQ6XG4lcycgJSBlLm91dHB1dC5kZWNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5jb2RlCisgICAgZmluYWxseToKKyAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBkaXIpCisKKyAgICBpZiBhcmdzLmxvZzoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3MubG9nLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShvdXRwdXQpCisKKyAgICBpZiBhcmdzLm91dGZpbGU6CisgICAgICAgIHdpdGggb3BlbihhcmdzLm91dGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGZvciB0YXNrIGluIG91dHRhc2tzOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzXG4nICUgdGFzaykKKyAgICBlbHNlOgorICAgICAgICBmb3IgdGFzayBpbiBvdXR0YXNrczoKKyAgICAgICAgICAgIHByaW50KHRhc2spCisKKyAgICByZXR1cm4gMAorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2Vfb2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J09wZW5FbWJlZGRlZCBzc3RhdGUgY2hlY2sgdG9vbC4gRG9lcyBhIGRyeS1ydW4gdG8gY2hlY2sgcmVzdG9yaW5nIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cyBmcm9tIHNoYXJlZCBzdGF0ZSwgYW5kIGxpc3RzIHRoZSB0YXNrcyB0aGF0IHdvdWxkIGJlIHJlc3RvcmVkLiBTZXQgQkJfU0VUU0NFTkVfRU5GT1JDRT0xIGluIHRoZSBlbnZpcm9ubWVudCBpZiB5b3Ugd2lzaCB0byBlbnN1cmUgcmVhbCB0YXNrcyBhcmUgZGlzYWxsb3dlZC4nKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndGFyZ2V0JywgbmFyZ3M9JysnLCBoZWxwPSdUYXJnZXQgdG8gY2hlY2snKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0ZmlsZScsIGhlbHA9J1dyaXRlIGxpc3QgdG8gYSBmaWxlIGluc3RlYWQgb2Ygc3Rkb3V0JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbCcsICctLWxvZycsIGhlbHA9J1dyaXRlIGZ1bGwgbG9nIHRvIGEgZmlsZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zYW1lLXRtcGRpcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1VzZSBzYW1lIFRNUERJUiBmb3IgY2hlY2sgKGxpc3Qgd2lsbCB0aGVuIGJlIGRlcGVuZGVudCBvbiB3aGF0IHRhc2tzIGhhdmUgZXhlY3V0ZWQgcHJldmlvdXNseSknKQorCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWNoZWNrKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzKQorICAgIHJldHVybiByZXQKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWdpdC1wcm94eSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWdpdC1wcm94eQppbmRleCAxMjQ3OTAyLi4wMDc4ZTk1IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1naXQtcHJveHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5CkBAIC04NiwxMyArODYsMTQgQEAKIAogCSMgTWF0Y2ggYnkgbmV0bWFzawogCWlmIHZhbGlkX2lwdjQgJEdMT0I7IHRoZW4KLQkJSE9TVF9JUD0kKGdldGhvc3RpcCAtZCAkSE9TVCkKLQkJaWYgdmFsaWRfaXB2NCAkSE9TVF9JUDsgdGhlbgotCQkJbWF0Y2hfaXB2NCAkR0xPQiAkSE9TVF9JUAotCQkJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCi0JCQkJcmV0dXJuIDAKKwkJZm9yIEhPU1RfSVAgaW4gJChnZXRlbnQgYWhvc3RzdjQgJEhPU1QgfCBncmVwICcgU1RSRUFNICcgfCBjdXQgLWQgJyAnIC1mIDEpIDsgZG8KKwkJCWlmIHZhbGlkX2lwdjQgJEhPU1RfSVA7IHRoZW4KKwkJCQltYXRjaF9pcHY0ICRHTE9CICRIT1NUX0lQCisJCQkJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCQkJCXJldHVybiAwCisJCQkJZmkKIAkJCWZpCi0JCWZpCisJCWRvbmUKIAlmaQogCiAJcmV0dXJuIDEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWdub21lLXRlcm1pbmFsLXBob25laG9tZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWdub21lLXRlcm1pbmFsLXBob25laG9tZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMDIzNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ25vbWUtdGVybWluYWwtcGhvbmVob21lCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorIworIyBHbm9tZSB0ZXJtaW5hbCB3b24ndCB0ZWxsIHVzIHdoaWNoIFBJRCBhIGdpdmVuIGNvbW1hbmQgaXMgcnVuIGFzIAorIyBvciBhbGxvdyBhIHNpbmdsZSBpbnN0YW5jZSBzbyB3ZSBjYW4ndCB0ZWxsIHdoZW4gaXQgY29tcGxldGVzLgorIyBUaGlzIGFsbG93cyB1cyB0byBmaWd1cmUgb3V0IHRoZSBQSUQgb2YgdGhlIHRhcmdldCBzbyB3ZSBjYW4gdGVsbCAKKyMgd2hlbiBpdHMgZG9uZS4KKyMKK2VjaG8gJCQgPiAkMQorc2hpZnQKK2V4ZWMgJEAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbAppbmRleCBhMDRlNDRkLi5iYjkxN2I0IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgT3BlbkVtYmVkZGVkIHBrZ2RhdGEgdXRpbGl0eQogIwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBpZiBhcmdzLnJldmVyc2U6Ci0gICAgICAgIGl0ZW1zID0gbWFwcGluZ3MudmFsdWVzKCkKKyAgICAgICAgaXRlbXMgPSBsaXN0KG1hcHBpbmdzLnZhbHVlcygpKQogICAgIGVsc2U6CiAgICAgICAgIGl0ZW1zID0gW10KICAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgpAQCAtMjc0LDYgKzI3NCw2MSBAQAogICAgICAgICBpdGVtcy5leHRlbmQobWFwcGluZ3MuZ2V0KHBrZywgW10pKQogICAgIHByaW50KCdcbicuam9pbihpdGVtcykpCiAKK2RlZiBwYWNrYWdlX2luZm8oYXJncyk6CisgICAgIyBIYW5kbGUgYm90aCBtdWx0aXBsZSBhcmd1bWVudHMgYW5kIG11bHRpcGxlIHZhbHVlcyB3aXRoaW4gYW4gYXJnIChvbGQgc3ludGF4KQorICAgIHBhY2thZ2VzID0gW10KKyAgICBpZiBhcmdzLmZpbGU6CisgICAgICAgIHdpdGggb3BlbihhcmdzLmZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy5hcHBlbmQoc3BsaXRsaW5lWzBdKQorICAgIGVsc2U6CisgICAgICAgIGZvciBwa2dpdGVtIGluIGFyZ3MucGtnOgorICAgICAgICAgICAgcGFja2FnZXMuZXh0ZW5kKHBrZ2l0ZW0uc3BsaXQoKSkKKyAgICAgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBwYWNrYWdlcyBzcGVjaWZpZWQiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hcHBpbmdzID0gZGVmYXVsdGRpY3QobGFtYmRhOiBkZWZhdWx0ZGljdChzdHIpKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2ZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgJ3J1bnRpbWUtcmV2ZXJzZScsIHBrZykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGtnZmlsZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoJzogJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRzWzBdLmVuZHN3aXRoKCJfIiArIHBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBrID0gZmllbGRzWzBdWzpsZW4oZmllbGRzWzBdKSAtIGxlbihwa2cpIC0gMV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBmaWVsZHNbMF0KKyAgICAgICAgICAgICAgICAgICAgdiA9IGZpZWxkc1sxXSBpZiBsZW4oZmllbGRzKSA9PSAyIGVsc2UgIiIKKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3NbcGtnXVtrXSA9IHYKKworICAgIGlmIGxlbihtYXBwaW5ncykgPCBsZW4ocGFja2FnZXMpOgorICAgICAgICBtaXNzaW5nID0gbGlzdChzZXQocGFja2FnZXMpIC0gc2V0KG1hcHBpbmdzLmtleXMoKSkpCisgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4obWlzc2luZykpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpdGVtcyA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnX3ZlcnNpb24gPSBtYXBwaW5nc1twa2ddWydQS0dWJ10KKyAgICAgICAgaWYgbWFwcGluZ3NbcGtnXVsnUEtHRSddOgorICAgICAgICAgICAgcGtnX3ZlcnNpb24gPSBtYXBwaW5nc1twa2ddWydQS0dFJ10gKyAiOiIgKyBwa2dfdmVyc2lvbgorICAgICAgICBpZiBtYXBwaW5nc1twa2ddWydQS0dSJ106CisgICAgICAgICAgICBwa2dfdmVyc2lvbiA9IHBrZ192ZXJzaW9uICsgIi0iICsgbWFwcGluZ3NbcGtnXVsnUEtHUiddCisgICAgICAgIHJlY2lwZSA9IG1hcHBpbmdzW3BrZ11bJ1BOJ10KKyAgICAgICAgcmVjaXBlX3ZlcnNpb24gPSBtYXBwaW5nc1twa2ddWydQViddCisgICAgICAgIGlmIG1hcHBpbmdzW3BrZ11bJ1BFJ106CisgICAgICAgICAgICByZWNpcGVfdmVyc2lvbiA9IG1hcHBpbmdzW3BrZ11bJ1BFJ10gKyAiOiIgKyByZWNpcGVfdmVyc2lvbgorICAgICAgICBpZiBtYXBwaW5nc1twa2ddWydQUiddOgorICAgICAgICAgICAgcmVjaXBlX3ZlcnNpb24gPSByZWNpcGVfdmVyc2lvbiArICItIiArIG1hcHBpbmdzW3BrZ11bJ1BSJ10KKyAgICAgICAgcGtnX3NpemUgPSBtYXBwaW5nc1twa2ddWydQS0dTSVpFJ10KKworICAgICAgICBpdGVtcy5hcHBlbmQoIiVzICVzICVzICVzICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAocGtnLCBwa2dfdmVyc2lvbiwgcmVjaXBlLCByZWNpcGVfdmVyc2lvbiwgcGtnX3NpemUpKQorICAgIHByaW50KCdcbicuam9pbihpdGVtcykpCisKIGRlZiBnZXRfcmVjaXBlX3BrZ3MocGtnZGF0YV9kaXIsIHJlY2lwZSwgdW5wYWNrYWdlZCk6CiAgICAgcmVjaXBlZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsIHJlY2lwZSkKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVjaXBlZGF0YWZpbGUpOgpAQCAtNDM3LDYgKzQ5Miw3IEBACiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcGtnZGF0YS1kaXInLCBoZWxwPSdQYXRoIHRvIHBrZ2RhdGEgZGlyZWN0b3J5IChkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgaWYgbm90IHNwZWNpZmllZCknKQogICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKyAgICBzdWJwYXJzZXJzLnJlcXVpcmVkID0gVHJ1ZQogCiAgICAgcGFyc2VyX2xvb2t1cF9wa2cgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2xvb2t1cC1wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJhbnNsYXRlIGJldHdlZW4gcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZXMgYW5kIHJ1bnRpbWUgcGFja2FnZSBuYW1lcycsCkBAIC00NjksNiArNTI1LDEzIEBACiAgICAgcGFyc2VyX2xvb2t1cF9yZWNpcGUuYWRkX2FyZ3VtZW50KCdwa2cnLCBuYXJncz0nKycsIGhlbHA9J1J1bnRpbWUgcGFja2FnZSBuYW1lIHRvIGxvb2sgdXAnKQogICAgIHBhcnNlcl9sb29rdXBfcmVjaXBlLnNldF9kZWZhdWx0cyhmdW5jPWxvb2t1cF9yZWNpcGUpCiAKKyAgICBwYXJzZXJfcGFja2FnZV9pbmZvID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdwYWNrYWdlLWluZm8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2hvd3MgdmVyc2lvbiwgcmVjaXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciBvbmUgb3IgbW9yZSBwYWNrYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nTG9va3MgdXAgdGhlIHNwZWNpZmllZCBydW50aW1lIHBhY2thZ2UocykgYW5kIGRpc3BsYXkgaW5mb3JtYXRpb24nKQorICAgIHBhcnNlcl9wYWNrYWdlX2luZm8uYWRkX2FyZ3VtZW50KCdwa2cnLCBuYXJncz0nKicsIGhlbHA9J1J1bnRpbWUgcGFja2FnZSBuYW1lIHRvIGxvb2sgdXAnKQorICAgIHBhcnNlcl9wYWNrYWdlX2luZm8uYWRkX2FyZ3VtZW50KCctZicsICctLWZpbGUnLCBoZWxwPSdSZWFkIHBhY2thZ2UgbmFtZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUgKG9uZSBwZXIgbGluZSwgZmlyc3QgZmllbGQgb25seSknKQorICAgIHBhcnNlcl9wYWNrYWdlX2luZm8uc2V0X2RlZmF1bHRzKGZ1bmM9cGFja2FnZV9pbmZvKQorCiAgICAgcGFyc2VyX2ZpbmRfcGF0aCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZmluZC1wYXRoJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZpbmQgcGFja2FnZSBwcm92aWRpbmcgYSB0YXJnZXQgcGF0aCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRmluZHMgdGhlIHJlY2lwZS1zcGFjZSBwYWNrYWdlIHByb3ZpZGluZyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYXRoJykKQEAgLTUwNiw3ICs1NjksMTAgQEAKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQgYml0YmFrZSBwYXRoOiAlcycgJSBiaXRiYWtlcGF0aCkKICAgICAgICAgdGluZm9pbCA9IHRpbmZvaWxfaW5pdCgpCi0gICAgICAgIGFyZ3MucGtnZGF0YV9kaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhcmdzLnBrZ2RhdGFfZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogICAgICAgICBsb2dnZXIuZGVidWcoJ1ZhbHVlIG9mIFBLR0RBVEFfRElSIGlzICIlcyInICUgYXJncy5wa2dkYXRhX2RpcikKICAgICAgICAgaWYgbm90IGFyZ3MucGtnZGF0YV9kaXI6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgcGtnZGF0YSBkaXJlY3RvcnkgZnJvbSBQS0dEQVRBX0RJUicpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wdWJsaXNoLXNkayBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrCmluZGV4IDU1ODcyZjIuLjRmZTg5NzQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgT3BlbkVtYmVkZGVkIFNESyBwdWJsaXNoaW5nIHRvb2wKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcnVuLW5hdGl2ZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXJ1bi1uYXRpdmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDk2ZTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXJ1bi1uYXRpdmUKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorIyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4KKyMKKworIworIyBUaGlzIHNjcmlwdCBpcyBmb3IgcnVubmluZyB0b29scyBmcm9tIG5hdGl2ZSBvZSBzeXNyb290CisjCisKK2lmIFsgJCMgLWx0IDEgLW8gIiQxIiA9ICctLWhlbHAnIC1vICIkMSIgPSAnLWgnIF0gOyB0aGVuCisgICAgZWNobyAiVXNhZ2U6ICQwIDxuYXRpdmUgdG9vbD4gW3BhcmFtZXRlcnNdIgorICAgIGV4aXQgMQorZmkKKworU1lTUk9PVF9TRVRVUF9TQ1JJUFQ9YHdoaWNoIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgMj4gL2Rldi9udWxsYAoraWYgWyAteiAiJFNZU1JPT1RfU0VUVVBfU0NSSVBUIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCBvZS1maW5kLW5hdGl2ZS1zeXNyb290IHNjcmlwdCIKKyAgICAgICAgZXhpdCAxCitmaQorLiAkU1lTUk9PVF9TRVRVUF9TQ1JJUFQKKworT0xEUEFUSD0kUEFUSAorCisjIGxvb2sgZm9yIGEgdG9vbCBvbmx5IGluIG5hdGl2ZSBzeXNyb290CitQQVRIPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL2JpbjokT0VDT1JFX05BVElWRV9TWVNST09UL2JpbjokT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluOiRPRUNPUkVfTkFUSVZFX1NZU1JPT1Qvc2JpbgordG9vbD1gL3Vzci9iaW4vd2hpY2ggJDEgMj4vZGV2L251bGxgCisKK2lmIFsgLW4gIiR0b29sIiBdIDsgdGhlbgorICAgICMgYWRkIG9sZCBwYXRoIHRvIGFsbG93IHVzYWdlIG9mIGhvc3QgdG9vbHMKKyAgICBQQVRIPSRQQVRIOiRPTERfUEFUSCAkQAorZWxzZQorICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCAnJDEnIGluIG5hdGl2ZSBzeXNyb290IgorICAgIGV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXNlbGZ0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QKaW5kZXggNWUyM2VmMC4uZDlmZmQ0MCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KICMKQEAgLTM0LDYgKzM0LDggQEAKIGltcG9ydCB0aW1lIGFzIHQKIGltcG9ydCByZQogaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGltcAogCiBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSArICcvbGliJykKIGltcG9ydCBzY3JpcHRwYXRoCkBAIC00Niw4ICs0OCwxOSBAQAogZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCiBmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdCwgZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcwogCit0cnk6CisgICAgaW1wb3J0IHhtbHJ1bm5lcgorICAgIGZyb20geG1scnVubmVyLnJlc3VsdCBpbXBvcnQgX1hNTFRlc3RSZXN1bHQgYXMgVGVzdFJlc3VsdAorICAgIGZyb20geG1scnVubmVyIGltcG9ydCBYTUxUZXN0UnVubmVyIGFzIF9UZXN0UnVubmVyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyB1c2UgdGhlIGJhc2UgcnVubmVyIGluc3RlYWQKKyAgICBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXh0VGVzdFJlc3VsdCBhcyBUZXN0UmVzdWx0CisgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgVGV4dFRlc3RSdW5uZXIgYXMgX1Rlc3RSdW5uZXIKKworbG9nX3ByZWZpeCA9ICJvZS1zZWxmdGVzdC0iICsgdC5zdHJmdGltZSgiJVklbSVkLSVIJU0lUyIpCisKIGRlZiBsb2dnZXJfY3JlYXRlKCk6Ci0gICAgbG9nX2ZpbGUgPSAib2Utc2VsZnRlc3QtIiArIHQuc3RyZnRpbWUoIiVZLSVtLSVkXyVIOiVNOiVTIikgKyAiLmxvZyIKKyAgICBsb2dfZmlsZSA9IGxvZ19wcmVmaXggKyAiLmxvZyIKICAgICBpZiBvcy5wYXRoLmV4aXN0cygib2Utc2VsZnRlc3QubG9nIik6IG9zLnJlbW92ZSgib2Utc2VsZnRlc3QubG9nIikKICAgICBvcy5zeW1saW5rKGxvZ19maWxlLCAib2Utc2VsZnRlc3QubG9nIikKIApAQCAtMjExLDcgKzIyNCw3IEBACiAgICAgdHJ5OgogICAgICAgICBpbXBvcnQgaW1wb3J0bGliCiAgICAgICAgIG1vZGxpYiA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHRtb2QpCi0gICAgICAgIGZvciBtb2QgaW4gdmFycyhtb2RsaWIpLnZhbHVlcygpOgorICAgICAgICBmb3IgbW9kIGluIGxpc3QodmFycyhtb2RsaWIpLnZhbHVlcygpKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kLCB0eXBlKG9lU2VsZlRlc3QpKSBhbmQgaXNzdWJjbGFzcyhtb2QsIG9lU2VsZlRlc3QpIGFuZCBtb2QgaXMgbm90IG9lU2VsZlRlc3Q6CiAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gZGlyKG1vZCk6CiAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Quc3RhcnRzd2l0aCgndGVzdF8nKSBhbmQgaGFzYXR0cih2YXJzKG1vZClbdGVzdF0sICdfX2NhbGxfXycpOgpAQCAtMjIwLDEyICsyMzMsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQgPSB2YXJzKG1vZClbdGVzdF0udGVzdF9jYXNlCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0RFQlVHOiB0YyBpZCBtaXNzaW5nIGZvciAnICsgc3RyKHRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0RFQlVHOiB0YyBpZCBtaXNzaW5nIGZvciAnICsgc3RyKHRlc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZCA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGFnID0gdmFycyhtb2QpW3Rlc3RdLnRhZ19fZmVhdHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnQgJ0RFQlVHOiBmZWF0dXJlIHRhZyBtaXNzaW5nIGZvciAnICsgc3RyKHRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCgnREVCVUc6IGZlYXR1cmUgdGFnIG1pc3NpbmcgZm9yICcgKyBzdHIodGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRhZyA9IE5vbmUKIAogICAgICAgICAgICAgICAgICAgICAgICAgIyBOT1RFOiBmb3Igc29tZSByZWFzb24gbHN0cmlwKCkgZG9lc24ndCB3b3JrIGZvciBtb2QuX19tb2R1bGVfXwpAQCAtMjYwLDE2ICsyNzMsMjIgQEAKICAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICAgcmVtYWluaW5nID0gdmFsdWVzWzpdCiAgICAgICAgIGZvciBrZXkgaW4ga2V5d29yZDoKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKICAgICAgICAgICAgIGlmIGtleSBpbiByZW1haW5pbmc6CiAgICAgICAgICAgICAgICAgIyBSZWd1bGFyIG1hdGNoaW5nIG9mIGV4YWN0IGl0ZW0KICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGtleSkKICAgICAgICAgICAgICAgICByZW1haW5pbmcucmVtb3ZlKGtleSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBXaWxkY2FyZCBtYXRjaGluZwogICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKGZubWF0Y2gudHJhbnNsYXRlKHIiJXMiICUga2V5KSkKICAgICAgICAgICAgICAgICBhZGRlZCA9IFt4IGZvciB4IGluIHJlbWFpbmluZyBpZiBwYXR0ZXJuLm1hdGNoKHgpXQotICAgICAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoYWRkZWQpCi0gICAgICAgICAgICAgICAgcmVtYWluaW5nID0gW3ggZm9yIHggaW4gcmVtYWluaW5nIGlmIHggbm90IGluIGFkZGVkXQorICAgICAgICAgICAgICAgIGlmIGFkZGVkOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGFkZGVkKQorICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSBbeCBmb3IgeCBpbiByZW1haW5pbmcgaWYgeCBub3QgaW4gYWRkZWRdCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRmFpbGVkIHRvIGZpbmQgdGVzdDogJXMiICUga2V5KQogCiAgICAgICAgIHJldHVybiByZXN1bHQKIApAQCAtMzIwLDE3ICszMzksMTcgQEAKIAogICAgIHRzID0gc29ydGVkKFsgKHRjLnRjaWQsIHRjLnRjdGFnLCB0Yy50Y25hbWUsIHRjLnRjY2xhc3MsIHRjLnRjbW9kdWxlKSBmb3IgdGMgaW4gZ2V0X3Rlc3RzdWl0ZV9ieShjcml0ZXJpYSwga2V5d29yZCkgXSkKIAotICAgIHByaW50ICclLTRzXHQlLTIwc1x0JS02MHNcdCUtMjVzXHQlLTIwcycgJSAoJ2lkJywgJ3RhZycsICduYW1lJywgJ2NsYXNzJywgJ21vZHVsZScpCi0gICAgcHJpbnQgJ18nICogMTUwCisgICAgcHJpbnQoJyUtNHNcdCUtMjBzXHQlLTYwc1x0JS0yNXNcdCUtMjBzJyAlICgnaWQnLCAndGFnJywgJ25hbWUnLCAnY2xhc3MnLCAnbW9kdWxlJykpCisgICAgcHJpbnQoJ18nICogMTUwKQogICAgIGZvciB0IGluIHRzOgogICAgICAgICBpZiBpc2luc3RhbmNlKHRbMV0sICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgcHJpbnQgJyUtNHNcdCUtMjBzXHQlLTYwc1x0JS0yNXNcdCUtMjBzJyAlICh0WzBdLCAnLCAnLmpvaW4odFsxXSksIHRbMl0sIHRbM10sIHRbNF0pCisgICAgICAgICAgICBwcmludCgnJS00c1x0JS0yMHNcdCUtNjBzXHQlLTI1c1x0JS0yMHMnICUgKHRbMF0sICcsICcuam9pbih0WzFdKSwgdFsyXSwgdFszXSwgdFs0XSkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAnJS00c1x0JS0yMHNcdCUtNjBzXHQlLTI1c1x0JS0yMHMnICUgdAotICAgIHByaW50ICdfJyAqIDE1MAotICAgIHByaW50ICdGaWx0ZXJpbmcgYnk6XHQgJXMnICUgY3JpdGVyaWEKLSAgICBwcmludCAnTG9va2luZyBmb3I6XHQgJXMnICUgJywgJy5qb2luKHN0cih4KSBmb3IgeCBpbiBrZXl3b3JkKQotICAgIHByaW50ICdUb3RhbCBmb3VuZDpcdCAlcycgJSBsZW4odHMpCisgICAgICAgICAgICBwcmludCgnJS00c1x0JS0yMHNcdCUtNjBzXHQlLTI1c1x0JS0yMHMnICUgdCkKKyAgICBwcmludCgnXycgKiAxNTApCisgICAgcHJpbnQoJ0ZpbHRlcmluZyBieTpcdCAlcycgJSBjcml0ZXJpYSkKKyAgICBwcmludCgnTG9va2luZyBmb3I6XHQgJXMnICUgJywgJy5qb2luKHN0cih4KSBmb3IgeCBpbiBrZXl3b3JkKSkKKyAgICBwcmludCgnVG90YWwgZm91bmQ6XHQgJXMnICUgbGVuKHRzKSkKIAogCiBkZWYgbGlzdF90ZXN0cygpOgpAQCAtMzM4LDE2ICszNTcsMTUgQEAKIAogICAgIHRzID0gZ2V0X2FsbF90ZXN0cygpCiAKLSAgICBwcmludCAnJS00c1x0JS0yMHNcdCUtNjBzXHQlLTI1c1x0JS0yMHMnICUgKCdpZCcsICd0YWcnLCAnbmFtZScsICdjbGFzcycsICdtb2R1bGUnKQotICAgIHByaW50ICdfJyAqIDE1MAorICAgIHByaW50KCclLTRzXHQlLTEwc1x0JS01MHMnICUgKCdpZCcsICd0YWcnLCAndGVzdCcpKQorICAgIHByaW50KCdfJyAqIDgwKQogICAgIGZvciB0IGluIHRzOgogICAgICAgICBpZiBpc2luc3RhbmNlKHQudGN0YWcsICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgcHJpbnQgJyUtNHNcdCUtMjBzXHQlLTYwc1x0JS0yNXNcdCUtMjBzJyAlICh0LnRjaWQsICcsICcuam9pbih0LnRjdGFnKSwgdC50Y25hbWUsIHQudGNjbGFzcywgdC50Y21vZHVsZSkKKyAgICAgICAgICAgIHByaW50KCclLTRzXHQlLTEwc1x0JS01MHMnICUgKHQudGNpZCwgJywgJy5qb2luKHQudGN0YWcpLCAnLicuam9pbihbdC50Y21vZHVsZSwgdC50Y2NsYXNzLCB0LnRjbmFtZV0pKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICclLTRzXHQlLTIwc1x0JS02MHNcdCUtMjVzXHQlLTIwcycgJSAodC50Y2lkLCB0LnRjdGFnLCB0LnRjbmFtZSwgdC50Y2NsYXNzLCB0LnRjbW9kdWxlKQotICAgIHByaW50ICdfJyAqIDE1MAotICAgIHByaW50ICdUb3RhbCBmb3VuZDpcdCAlcycgJSBsZW4odHMpCi0KKyAgICAgICAgICAgIHByaW50KCclLTRzXHQlLTEwc1x0JS01MHMnICUgKHQudGNpZCwgdC50Y3RhZywgJy4nLmpvaW4oW3QudGNtb2R1bGUsIHQudGNjbGFzcywgdC50Y25hbWVdKSkpCisgICAgcHJpbnQoJ18nICogODApCisgICAgcHJpbnQoJ1RvdGFsIGZvdW5kOlx0ICVzJyAlIGxlbih0cykpCiAKIGRlZiBsaXN0X3RhZ3MoKToKICAgICAjIEdldCBhbGwgdGFncyBzZXQgdG8gdGVzdCBjYXNlcwpAQCAtMzYyLDcgKzM4MCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0YWdzLmFkZCh0Yy50Y3RhZykKIAotICAgIHByaW50ICdUYWdzOlx0JXMnICUgJywgJy5qb2luKHN0cih4KSBmb3IgeCBpbiB0YWdzKQorICAgIHByaW50KCdUYWdzOlx0JXMnICUgJywgJy5qb2luKHN0cih4KSBmb3IgeCBpbiB0YWdzKSkKIAogZGVmIGNvdmVyYWdlX3NldHVwKGNvdmVyYWdlX3NvdXJjZSwgY292ZXJhZ2VfaW5jbHVkZSwgY292ZXJhZ2Vfb21pdCk6CiAgICAgIiIiIFNldCB1cCB0aGUgY292ZXJhZ2UgbWVhc3VyZW1lbnQgZm9yIHRoZSB0ZXN0Y2FzZXMgdG8gYmUgcnVuICIiIgpAQCAtMzcwLDcgKzM4OCw3IEBACiAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCiAgICAgcG9reWRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpKQotICAgIGN1cmNvbW1pdD0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJnaXQiLCAiLS1naXQtZGlyIiwgb3MucGF0aC5qb2luKHBva3lkaXIsICIuZ2l0IiksICJyZXYtcGFyc2UiLCAiSEVBRCJdKQorICAgIGN1cmNvbW1pdD0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJnaXQiLCAiLS1naXQtZGlyIiwgb3MucGF0aC5qb2luKHBva3lkaXIsICIuZ2l0IiksICJyZXYtcGFyc2UiLCAiSEVBRCJdKS5kZWNvZGUoJ3V0Zi04JykKICAgICBjb3ZlcmFnZXJjID0gIiVzLy5jb3ZlcmFnZXJjIiAlIGJ1aWxkZGlyCiAgICAgZGF0YV9maWxlID0gIiVzLy5jb3ZlcmFnZS4iICUgYnVpbGRkaXIKICAgICBkYXRhX2ZpbGUgKz0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZJW0lZFQlSCVNJVMnKQpAQCAtNDE1LDcgKzQzMyw3IEBACiAgICAgICAgICMgQ292ZXJhZ2UgdW5kZXIgdmVyc2lvbiA0IHVzZXMgY292ZXJhZ2UuY292ZXJhZ2UKICAgICAgICAgZnJvbSBjb3ZlcmFnZSBpbXBvcnQgY292ZXJhZ2UgYXMgQ292ZXJhZ2UKIAotICAgIGltcG9ydCBjU3RyaW5nSU8gYXMgU3RyaW5nSU8KKyAgICBpbXBvcnQgaW8gYXMgU3RyaW5nSU8KICAgICBmcm9tIGNvdmVyYWdlLm1pc2MgaW1wb3J0IENvdmVyYWdlRXhjZXB0aW9uCiAKICAgICBjb3Zfb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQpAQCAtNDQzLDIyICs0NjEsMjQgQEAKICAgICBiYnBhdGggPSBnZXRfYmJfdmFyKCdCQlBBVEgnKS5zcGxpdCgnOicpCiAgICAgbGF5ZXJfbGliZGlycyA9IFtwIGZvciBwIGluIChvcy5wYXRoLmpvaW4obCwgJ2xpYicpIGZvciBsIGluIGJicGF0aCkgaWYgb3MucGF0aC5leGlzdHMocCldCiAgICAgc3lzLnBhdGguZXh0ZW5kKGxheWVyX2xpYmRpcnMpCi0gICAgcmVsb2FkKG9lcWEuc2VsZnRlc3QpCisgICAgaW1wLnJlbG9hZChvZXFhLnNlbGZ0ZXN0KQogCiAgICAgaWYgYXJncy5ydW5fdGVzdHNfYnkgYW5kIGxlbihhcmdzLnJ1bl90ZXN0c19ieSkgPj0gMjoKICAgICAgICAgdmFsaWRfb3B0aW9ucyA9IFsnbmFtZScsICdjbGFzcycsICdtb2R1bGUnLCAnaWQnLCAndGFnJ10KICAgICAgICAgaWYgYXJncy5ydW5fdGVzdHNfYnlbMF0gbm90IGluIHZhbGlkX29wdGlvbnM6Ci0gICAgICAgICAgICBwcmludCAnLS1ydW4tdGVzdHMtYnkgJXMgbm90IGEgdmFsaWQgb3B0aW9uLiBDaG9vc2Ugb25lIG9mIDxuYW1lfGNsYXNzfG1vZHVsZXxpZHx0YWc+LicgJSBhcmdzLnJ1bl90ZXN0c19ieVswXQorICAgICAgICAgICAgcHJpbnQoJy0tcnVuLXRlc3RzLWJ5ICVzIG5vdCBhIHZhbGlkIG9wdGlvbi4gQ2hvb3NlIG9uZSBvZiA8bmFtZXxjbGFzc3xtb2R1bGV8aWR8dGFnPi4nICUgYXJncy5ydW5fdGVzdHNfYnlbMF0pCiAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY3JpdGVyaWEgPSBhcmdzLnJ1bl90ZXN0c19ieVswXQogICAgICAgICAgICAga2V5d29yZCA9IGFyZ3MucnVuX3Rlc3RzX2J5WzE6XQogICAgICAgICAgICAgdHMgPSBzb3J0ZWQoWyB0Yy5mdWxscGF0aCBmb3IgdGMgaW4gZ2V0X3Rlc3RzdWl0ZV9ieShjcml0ZXJpYSwga2V5d29yZCkgXSkKKyAgICAgICAgaWYgbm90IHRzOgorICAgICAgICAgICAgcmV0dXJuIDEKIAogICAgIGlmIGFyZ3MubGlzdF90ZXN0c19ieSBhbmQgbGVuKGFyZ3MubGlzdF90ZXN0c19ieSkgPj0gMjoKICAgICAgICAgdmFsaWRfb3B0aW9ucyA9IFsnbmFtZScsICdjbGFzcycsICdtb2R1bGUnLCAnaWQnLCAndGFnJ10KICAgICAgICAgaWYgYXJncy5saXN0X3Rlc3RzX2J5WzBdIG5vdCBpbiB2YWxpZF9vcHRpb25zOgotICAgICAgICAgICAgcHJpbnQgJy0tbGlzdC10ZXN0cy1ieSAlcyBub3QgYSB2YWxpZCBvcHRpb24uIENob29zZSBvbmUgb2YgPG5hbWV8Y2xhc3N8bW9kdWxlfGlkfHRhZz4uJyAlIGFyZ3MubGlzdF90ZXN0c19ieVswXQorICAgICAgICAgICAgcHJpbnQoJy0tbGlzdC10ZXN0cy1ieSAlcyBub3QgYSB2YWxpZCBvcHRpb24uIENob29zZSBvbmUgb2YgPG5hbWV8Y2xhc3N8bW9kdWxlfGlkfHRhZz4uJyAlIGFyZ3MubGlzdF90ZXN0c19ieVswXSkKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjcml0ZXJpYSA9IGFyZ3MubGlzdF90ZXN0c19ieVswXQpAQCAtNDgyLDcgKzUwMiw3IEBACiAgICAgICAgICAgICBpbmZvID0gJycKICAgICAgICAgICAgIGlmIG1vZHVsZS5zdGFydHN3aXRoKCdfJyk6CiAgICAgICAgICAgICAgICAgaW5mbyA9ICcgKGhpZGRlbiknCi0gICAgICAgICAgICBwcmludCBtb2R1bGUgKyBpbmZvCisgICAgICAgICAgICBwcmludChtb2R1bGUgKyBpbmZvKQogICAgICAgICAgICAgaWYgYXJncy5saXN0X2FsbGNsYXNzZXM6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCkBAIC00OTAsMTMgKzUxMCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgdiBpbiB2YXJzKG1vZGxpYik6CiAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdmFycyhtb2RsaWIpW3ZdCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHQsIHR5cGUob2VTZWxmVGVzdCkpIGFuZCBpc3N1YmNsYXNzKHQsIG9lU2VsZlRlc3QpIGFuZCB0IT1vZVNlbGZUZXN0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgLS0iLCB2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiAtLSIsIHYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiBkaXIodCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1ldGhvZC5zdGFydHN3aXRoKCJ0ZXN0XyIpIGFuZCBjYWxsYWJsZSh2YXJzKHQpW21ldGhvZF0pOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAtLSAgLS0iLCBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWV0aG9kLnN0YXJ0c3dpdGgoInRlc3RfIikgYW5kIGlzaW5zdGFuY2UodmFycyh0KVttZXRob2RdLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiIC0tICAtLSIsIG1ldGhvZCkKIAogICAgICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEltcG9ydEVycm9yKSBhcyBlOgotICAgICAgICAgICAgICAgICAgICBwcmludCBlCisgICAgICAgICAgICAgICAgICAgIHByaW50KGUpCiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGlmIGFyZ3MucnVuX3Rlc3RzIG9yIGFyZ3MucnVuX2FsbF90ZXN0cyBvciBhcmdzLnJ1bl90ZXN0c19ieToKQEAgLTUxMSw3ICs1MzEsOCBAQAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQogICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBOb25lCi0gICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yLCByZXN1bHRjbGFzcz1idWlsZFJlc3VsdENsYXNzKGFyZ3MpKQorICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyKHZlcmJvc2l0eT0yLAorICAgICAgICAgICAgICAgIHJlc3VsdGNsYXNzPWJ1aWxkUmVzdWx0Q2xhc3MoYXJncykpCiAgICAgICAgICMgd2UgbmVlZCB0byBkbyB0aGlzIGhlcmUsIG90aGVyd2lzZSBqdXN0IGxvYWRpbmcgdGhlIHRlc3RzCiAgICAgICAgICMgd2lsbCB0YWtlIDIgbWludXRlcyAoYml0YmFrZSAtZSBjYWxscykKICAgICAgICAgb2VTZWxmVGVzdC50ZXN0bGF5ZXJfcGF0aCA9IGdldF90ZXN0X2xheWVyKCkKQEAgLTU1Miw3ICs1NzMsNyBAQAogICAgICIiIkJ1aWxkIGEgUmVzdWx0IENsYXNzIHRvIHVzZSBpbiB0aGUgdGVzdGNhc2UgZXhlY3V0aW9uIiIiCiAgICAgaW1wb3J0IHNpdGUKIAotICAgIGNsYXNzIFN0YW1wZWRSZXN1bHQodW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQpOgorICAgIGNsYXNzIFN0YW1wZWRSZXN1bHQoVGVzdFJlc3VsdCk6CiAgICAgICAgICIiIgogICAgICAgICBDdXN0b20gVGVzdFJlc3VsdCB0aGF0IHByaW50cyB0aGUgdGltZSB3aGVuIGEgdGVzdCBzdGFydHMuICBBcyBvZS1zZWxmdGVzdAogICAgICAgICBjYW4gdGFrZSBhIGxvbmcgdGltZSAoaWUgYSBmZXcgaG91cnMpIHRvIHJ1biwgdGltZXN0YW1wcyBoZWxwIHVzIHVuZGVyc3RhbmQKQEAgLTU4NCw2ICs2MDUsMTAgQEAKICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvdmVyYWdlX2luc3RhbGxlZDoKICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIkNvdmVyYWdlIGlzIGVuYWJsZWQiKQogCisgICAgICAgICAgICAgICAgICAgIG1ham9yX3ZlcnNpb24gPSBpbnQoY292ZXJhZ2UudmVyc2lvbi5fX3ZlcnNpb25fX1swXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbWFqb3JfdmVyc2lvbiA8IDQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoInB5dGhvbiBjb3ZlcmFnZSAlcyBpbnN0YWxsZWQuIFJlcXVpcmUgdmVyc2lvbiA0IG9yIGdyZWF0ZXIuIiAlIGNvdmVyYWdlLnZlcnNpb24uX192ZXJzaW9uX18pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQogICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2UgdGhlIHVzZXIgaGFzIG5vdCBzZXQgdGhlIHZhcmlhYmxlIENPVkVSQUdFX1BST0NFU1NfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICMgY3JlYXRlIGEgZGVmYXVsdCBvbmUgYW5kIGV4cG9ydCBpdC4gVGhlIENPVkVSQUdFX1BST0NFU1NfU1RBUlQKICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZSBpbmRpY2F0ZXMgd2hlcmUgdGhlIGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24gZmlsZSByZXNpZGVzCkBAIC02MjIsNiArNjQ3LDIxIEBACiAKICAgICByZXR1cm4gU3RhbXBlZFJlc3VsdAogCitjbGFzcyBUZXN0UnVubmVyKF9UZXN0UnVubmVyKToKKyAgICAiIiJUZXN0IHJ1bm5lciBjbGFzcyBhd2FyZSBvZiBleHBvcnRpbmcgdGVzdHMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cG9ydGRpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgbG9nX3ByZWZpeCkKKyAgICAgICAgICAgIGt3YXJnc3ggPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICAgICAgIyBhcmd1bWVudCBzcGVjaWZpYyB0byBYTUxUZXN0UnVubmVyLCBpZiBhZGRpbmcgYSBuZXcgcnVubmVyIHRoZW4KKyAgICAgICAgICAgICMgYWxzbyBhZGQgbG9naWMgdG8gdXNlIG90aGVyIHJ1bm5lcidzIGFyZ3MuCisgICAgICAgICAgICBrd2FyZ3N4WydvdXRwdXQnXSA9IGV4cG9ydGRpcgorICAgICAgICAgICAga3dhcmdzeFsnZGVzY3JpcHRpb25zJ10gPSBGYWxzZQorICAgICAgICAgICAgIyBkb25lIGZvciB0aGUgY2FzZSB3aGVyZSB0ZWxsaW5nIHRoZSBydW5uZXIgd2hlcmUgdG8gZXhwb3J0CisgICAgICAgICAgICBzdXBlcihUZXN0UnVubmVyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3N4KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgbG9nLmluZm8oInRlc3QgcnVubmVyIGluaXQnZWQgbGlrZSB1bml0dGVzdCIpCisgICAgICAgICAgICBzdXBlcihUZXN0UnVubmVyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtdHJpbS1zY2hlbWFzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtdHJpbS1zY2hlbWFzCmluZGV4IDI5ZmIzYTEuLjY2YTFiOGQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXRyaW0tc2NoZW1hcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS10cmltLXNjaGVtYXMKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiBpbXBvcnQgc3lzCiB0cnk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkKaW5kZXggZjdiMmU0ZS4uYTIyYmVjMyAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2VweWRldnNoZWxsLWludGVybmFsLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKQEAgLTI5LDkgKzI5LDYgQEAKIHB0eSA9IG9wZW4oc3lzLmFyZ3ZbMV0sICJ3K2IiLCAwKQogcGFyZW50ID0gaW50KHN5cy5hcmd2WzJdKQogCi0jIERvbid0IGJ1ZmZlciBvdXRwdXQgYnkgbGluZSBlbmRpbmdzCi1zeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKLXN5cy5zdGRpbiA9IG9zLmZkb3BlbihzeXMuc3RkaW4uZmlsZW5vKCksICdyJywgMCkKIG5vbmJsb2NraW5nZmQocHR5KQogbm9uYmxvY2tpbmdmZChzeXMuc3RkaW4pCiAKQEAgLTUwLDcgKzQ3LDcgQEAKICAgICAjIE5lZWQgY2JyZWFrL25vZWNobyB3aGlsc3QgaW4gc2VsZWN0IHNvIHdlIHRyaWdnZXIgb24gYW55IGtleXByZXNzCiAgICAgY2JyZWFrbm9lY2hvKHN5cy5zdGRpbi5maWxlbm8oKSkKICAgICAjIFNlbmQgb3VyIFBJRCB0byB0aGUgb3RoZXIgZW5kIHNvIHRoZXkgY2FuIGtpbGwgdXMuCi0gICAgcHR5LndyaXRlKHN0cihvcy5nZXRwaWQoKSkgKyAiXG4iKQorICAgIHB0eS53cml0ZShzdHIob3MuZ2V0cGlkKCkpLmVuY29kZSgndXRmLTgnKSArIGIiXG4iKQogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdyaXRlcnMgPSBbXQpAQCAtNTksMTcgKzU2LDE4IEBACiAgICAgICAgICAgICAocmVhZHksIF8sIF8pID0gc2VsZWN0LnNlbGVjdChbcHR5LCBzeXMuc3RkaW5dLCB3cml0ZXJzICwgW10sIDApCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaWYgcHR5IGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpID0gaSArIHB0eS5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBwdHkucmVhZCgpLmRlY29kZSgndXRmLTgnKQogICAgICAgICAgICAgICAgIGlmIGk6CiAgICAgICAgICAgICAgICAgICAgICMgV3JpdGUgYSBwYWdlIGF0IGEgdGltZSB0byBhdm9pZCBvdmVyZmxvd2luZyBvdXRwdXQgCiAgICAgICAgICAgICAgICAgICAgICMgZC5rZXlzKCkgaXMgYSBnb29kIHdheSB0byBkbyB0aGF0CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoaVs6NDA5Nl0pCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgICAgICAgICBpID0gaVs0MDk2Ol0KICAgICAgICAgICAgICAgICBpZiBzeXMuc3RkaW4gaW4gcmVhZHk6CiAgICAgICAgICAgICAgICAgICAgIGVjaG9ub2NicmVhayhzeXMuc3RkaW4uZmlsZW5vKCkpCi0gICAgICAgICAgICAgICAgICAgIG8gPSByYXdfaW5wdXQoKQorICAgICAgICAgICAgICAgICAgICBvID0gaW5wdXQoKS5lbmNvZGUoJ3V0Zi04JykKICAgICAgICAgICAgICAgICAgICAgY2JyZWFrbm9lY2hvKHN5cy5zdGRpbi5maWxlbm8oKSkKLSAgICAgICAgICAgICAgICAgICAgcHR5LndyaXRlKG8gKyAiXG4iKQorICAgICAgICAgICAgICAgICAgICBwdHkud3JpdGUobyArIGIiXG4iKQogICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMTE6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vcGtnLXF1ZXJ5LWhlbHBlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5CmluZGV4IDJmYjFhNzguLmNlODk0OTEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgT3BlbkVtYmVkZGVkIG9wa2cgcXVlcnkgaGVscGVyIHV0aWxpdHkKICMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkuaW4gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5LmluCmluZGV4IDIxYmIwYmUuLmE5NTRiMTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkuaW4KKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weS5pbgpAQCAtMTYsOCArMTYsNiBAQAogIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgotCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBvcHRwYXJzZQpAQCAtMTQ5LDkgKzE0Nyw3IEBACiAJCQkJCWZvciB0aW1lIGluIHJlc1s0XToKIAkJCQkJCWlmIHRpbWUgaXMgbm90IE5vbmU6CiAJCQkJCQkJIyBvdXRwdXQgYXMgbXMKLQkJCQkJCQlwcmludCh0aW1lICogMTAsIGZpbGU9ZikKLQkJCQkJCWVsc2U6Ci0JCQkJCQkJcHJpbnQoZmlsZT1mKQorCQkJCQkJCWYud3JpdGUodGltZSAqIDEwKQogCQkJCWZpbmFsbHk6CiAJCQkJCWYuY2xvc2UoKQogCQkJZmlsZW5hbWUgPSBfZ2V0X2ZpbGVuYW1lKG9wdGlvbnMub3V0cHV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3BhcnNpbmcucHkKaW5kZXggZDQyM2I5Zi4uYTNhMGIwYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wYXJzaW5nLnB5CkBAIC0xMyw5ICsxMyw2IEBACiAjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQogaW1wb3J0IG9zCiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgcmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5dGhvbmRlcHMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9weXRob25kZXBzCmluZGV4IGZmOTJlNzQuLjU5MGI5NzYgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5dGhvbmRlcHMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHl0aG9uZGVwcwpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBEZXRlcm1pbmUgZGVwZW5kZW5jaWVzIG9mIHB5dGhvbiBzY3JpcHRzIG9yIGF2YWlsYWJsZSBweXRob24gbW9kdWxlcyBpbiBhIHNlYXJjaCBwYXRoLgogIwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5yZWFscGF0aChkaXJlY3RvcnkpCiAKICAgICBwcm92aWRlcyA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIGdldF9wcm92aWRlcyhkaXJlY3RvcnkpKQotICAgIGZvciBmaWxlbmFtZSwgcHJvdmlkZSBpbiBwcm92aWRlcy5pdGVyaXRlbXMoKToKKyAgICBmb3IgZmlsZW5hbWUsIHByb3ZpZGUgaW4gcHJvdmlkZXMuaXRlbXMoKToKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlbmFtZSk6CiAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihmaWxlbmFtZSwgJ19faW5pdF9fLnB5JykKICAgICAgICAgICAgIGlzcGtnID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcmVjaXBldG9vbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3JlY2lwZXRvb2wKaW5kZXggNmM2NjQ4Ny4uMTA1MmNkMiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcmVjaXBldG9vbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9yZWNpcGV0b29sCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgUmVjaXBlIGNyZWF0aW9uIHRvb2wKICMKQEAgLTYwLDYgKzYwLDcgQEAKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctaCcsICctLWhlbHAnLCBhY3Rpb249J2hlbHAnLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCiAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorICAgIHN1YnBhcnNlcnMucmVxdWlyZWQgPSBUcnVlCiAKICAgICBpZiBnbG9iYWxfYXJncy5kZWJ1ZzoKICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCkBAIC03NiwzNyArNzcsNDAgQEAKICAgICBzY3JpcHR1dGlscy5sb2dnZXJfc2V0dXBfY29sb3IobG9nZ2VyLCBnbG9iYWxfYXJncy5jb2xvcikKIAogICAgIHRpbmZvaWwgPSB0aW5mb2lsX2luaXQoRmFsc2UpCi0gICAgZm9yIHBhdGggaW4gKFtzY3JpcHRzX3BhdGhdICsKLSAgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLnNwbGl0KCc6JykpOgotICAgICAgICBwbHVnaW5wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdsaWInLCAncmVjaXBldG9vbCcpCi0gICAgICAgIHNjcmlwdHV0aWxzLmxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpCi0KLSAgICByZWdpc3RlcmVkID0gRmFsc2UKLSAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6Ci0gICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAncmVnaXN0ZXJfY29tbWFuZHMnKToKLSAgICAgICAgICAgIHJlZ2lzdGVyZWQgPSBUcnVlCi0gICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycykKLSAgICAgICAgZWxpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX2NvbW1hbmQnKToKLSAgICAgICAgICAgICMgTGVnYWN5IGZ1bmN0aW9uIG5hbWUKLSAgICAgICAgICAgIHJlZ2lzdGVyZWQgPSBUcnVlCi0gICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfY29tbWFuZChzdWJwYXJzZXJzKQotICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3RpbmZvaWxfaW5pdCcpOgotICAgICAgICAgICAgcGx1Z2luLnRpbmZvaWxfaW5pdCh0aW5mb2lsKQotCi0gICAgaWYgbm90IHJlZ2lzdGVyZWQ6Ci0gICAgICAgIGxvZ2dlci5lcnJvcigiTm8gY29tbWFuZHMgcmVnaXN0ZXJlZCAtIG1pc3NpbmcgcGx1Z2lucz8iKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHVucGFyc2VkX2FyZ3MsIG5hbWVzcGFjZT1nbG9iYWxfYXJncykKLQogICAgIHRyeToKLSAgICAgICAgaWYgZ2V0YXR0cihhcmdzLCAncGFyc2VyZWNpcGVzJywgRmFsc2UpOgotICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5kaXNhYmxlVHJhY2tpbmcoKQotICAgICAgICAgICAgdGluZm9pbC5wYXJzZVJlY2lwZXMoKQotICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5lbmFibGVUcmFja2luZygpCi0gICAgICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzKQotICAgIGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb246Ci0gICAgICAgIHJldCA9IDEKKyAgICAgICAgZm9yIHBhdGggaW4gKFtzY3JpcHRzX3BhdGhdICsKKyAgICAgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLnNwbGl0KCc6JykpOgorICAgICAgICAgICAgcGx1Z2lucGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnbGliJywgJ3JlY2lwZXRvb2wnKQorICAgICAgICAgICAgc2NyaXB0dXRpbHMubG9hZF9wbHVnaW5zKGxvZ2dlciwgcGx1Z2lucywgcGx1Z2lucGF0aCkKKworICAgICAgICByZWdpc3RlcmVkID0gRmFsc2UKKyAgICAgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgorICAgICAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICdyZWdpc3Rlcl9jb21tYW5kcycpOgorICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcGx1Z2luLnJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMpCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIocGx1Z2luLCAncmVnaXN0ZXJfY29tbWFuZCcpOgorICAgICAgICAgICAgICAgICMgTGVnYWN5IGZ1bmN0aW9uIG5hbWUKKyAgICAgICAgICAgICAgICByZWdpc3RlcmVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHBsdWdpbi5yZWdpc3Rlcl9jb21tYW5kKHN1YnBhcnNlcnMpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3RpbmZvaWxfaW5pdCcpOgorICAgICAgICAgICAgICAgIHBsdWdpbi50aW5mb2lsX2luaXQodGluZm9pbCkKKworICAgICAgICBpZiBub3QgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gY29tbWFuZHMgcmVnaXN0ZXJlZCAtIG1pc3NpbmcgcGx1Z2lucz8iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3ModW5wYXJzZWRfYXJncywgbmFtZXNwYWNlPWdsb2JhbF9hcmdzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGdldGF0dHIoYXJncywgJ3BhcnNlcmVjaXBlcycsIEZhbHNlKToKKyAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmRpc2FibGVUcmFja2luZygpCisgICAgICAgICAgICAgICAgdGluZm9pbC5wYXJzZVJlY2lwZXMoKQorICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuZW5hYmxlVHJhY2tpbmcoKQorICAgICAgICAgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCisgICAgICAgIGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb246CisgICAgICAgICAgICByZXQgPSAxCisgICAgZmluYWxseToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKICAgICByZXR1cm4gcmV0CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weQppbmRleCA5OWZjYTg2Li5lNDdiNGQ5IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIENvcHlyaWdodCAoYykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgogIwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUKaW5kZXggZDdmYTk0MS4uZGJlMTdhYiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11CkBAIC0xLDggKzEsOSBAQAotIyEvYmluL2Jhc2gKLSMKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKwogIyBIYW5kbGUgcnVubmluZyBPRSBpbWFnZXMgc3RhbmRhbG9uZSB3aXRoIFFFTVUKICMKICMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTYgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNyw1MzAgKzE4LDEwMTAgQEAKICMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KIAotdXNhZ2UoKSB7Ci0gICAgTVlOQU1FPWBiYXNlbmFtZSAkMGAKLWNhdCA8PF9FT0YKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKK2ltcG9ydCBmY250bAoraW1wb3J0IHNodXRpbAoraW1wb3J0IGdsb2IKK2ltcG9ydCBjb25maWdwYXJzZXIKIAorY2xhc3MgT0VQYXRoRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJDdXN0b20gRXhjZXB0aW9uIHRvIGdpdmUgYmV0dGVyIGd1aWRhbmNlIG9uIG1pc3NpbmcgYmluYXJpZXMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYubWVzc2FnZSA9ICJJbiBvcmRlciBmb3IgdGhpcyBzY3JpcHQgdG8gZHluYW1pY2FsbHkgaW5mZXIgcGF0aHNcbiBcCitrZXJuZWxzIG9yIGZpbGVzeXN0ZW0gaW1hZ2VzLCB5b3UgZWl0aGVyIG5lZWQgYml0YmFrZSBpbiB5b3VyIFBBVEhcbiBcCitvciB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYgYmVmb3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQuXG5cbiBcCitEeW5hbWljIHBhdGggaW5mZXJlbmNlIGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgYSAqLnFlbXVib290LmNvbmYgdG9cbiBcCitydW5xZW11LCBpLmUuIGBydW5xZW11IC9wYXRoL3RvL215LWltYWdlLW5hbWUucWVtdWJvb3QuY29uZmBcblxuICVzIiAlIG1lc3NhZ2UKKworCitkZWYgY3JlYXRlX2xvZ2dlcigpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdydW5xZW11JykKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorCisgICAgIyBjcmVhdGUgY29uc29sZSBoYW5kbGVyIGFuZCBzZXQgbGV2ZWwgdG8gZGVidWcKKyAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgY2guc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorCisgICAgIyBjcmVhdGUgZm9ybWF0dGVyCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKKworICAgICMgYWRkIGZvcm1hdHRlciB0byBjaAorICAgIGNoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisKKyAgICAjIGFkZCBjaCB0byBsb2dnZXIKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjaCkKKworICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gY3JlYXRlX2xvZ2dlcigpCisKK2RlZiBwcmludF91c2FnZSgpOgorICAgIHByaW50KCIiIgogVXNhZ2U6IHlvdSBjYW4gcnVuIHRoaXMgc2NyaXB0IHdpdGggYW55IHZhbGlkIGNvbWJpbmF0aW9uCiBvZiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyAoaW4gYW55IG9yZGVyKToKICAgS0VSTkVMIC0gdGhlIGtlcm5lbCBpbWFnZSBmaWxlIHRvIHVzZQogICBST09URlMgLSB0aGUgcm9vdGZzIGltYWdlIGZpbGUgb3IgbmZzcm9vdCBkaXJlY3RvcnkgdG8gdXNlCiAgIE1BQ0hJTkUgLSB0aGUgbWFjaGluZSBuYW1lIChvcHRpb25hbCwgYXV0b2RldGVjdGVkIGZyb20gS0VSTkVMIGZpbGVuYW1lIGlmIHVuc3BlY2lmaWVkKQogICBTaW1wbGlmaWVkIFFFTVUgY29tbWFuZC1saW5lIG9wdGlvbnMgY2FuIGJlIHBhc3NlZCB3aXRoOgotICAgIG5vZ3JhcGhpYyAtIGRpc2FibGVzIHZpZGVvIGNvbnNvbGUKLSAgICBzZXJpYWwgLSBlbmFibGVzIGEgc2VyaWFsIGNvbnNvbGUgb24gL2Rldi90dHlTMAotICAgIGt2bSAtIGVuYWJsZXMgS1ZNIHdoZW4gcnVubmluZyBxZW11eDg2L3FlbXV4ODYtNjQgKFZULWNhcGFibGUgQ1BVIHJlcXVpcmVkKQotICAgIGt2bS12aG9zdCAtIGVuYWJsZXMgS1ZNIHdpdGggdmhvc3Qgc3VwcG9ydCB3aGVuIHJ1bm5pbmcgcWVtdXg4Ni9xZW11eDg2LTY0IChWVC1jYXBhYmxlIENQVSByZXF1aXJlZCkKKyAgICBub2dyYXBoaWMgLSBkaXNhYmxlIHZpZGVvIGNvbnNvbGUKKyAgICBzZXJpYWwgLSBlbmFibGUgYSBzZXJpYWwgY29uc29sZSBvbiAvZGV2L3R0eVMwCisgICAgc2xpcnAgLSBlbmFibGUgdXNlciBuZXR3b3JraW5nLCBubyByb290IHByaXZpbGVnZXMgaXMgcmVxdWlyZWQKKyAgICBrdm0gLSBlbmFibGUgS1ZNIHdoZW4gcnVubmluZyB4ODYveDg2XzY0IChWVC1jYXBhYmxlIENQVSByZXF1aXJlZCkKKyAgICBrdm0tdmhvc3QgLSBlbmFibGUgS1ZNIHdpdGggdmhvc3Qgd2hlbiBydW5uaW5nIHg4Ni94ODZfNjQgKFZULWNhcGFibGUgQ1BVIHJlcXVpcmVkKQogICAgIHB1YmxpY3ZuYyAtIGVuYWJsZSBhIFZOQyBzZXJ2ZXIgb3BlbiB0byBhbGwgaG9zdHMKLSAgcWVtdXBhcmFtcz0ieHl6IiAtIHNwZWNpZnkgY3VzdG9tIHBhcmFtZXRlcnMgdG8gUUVNVQotICBib290cGFyYW1zPSJ4eXoiIC0gc3BlY2lmeSBjdXN0b20ga2VybmVsIHBhcmFtZXRlcnMgZHVyaW5nIGJvb3QKKyAgICBhdWRpbyAtIGVuYWJsZSBhdWRpbworICB0Y3BzZXJpYWw9PHBvcnQ+IC0gc3BlY2lmeSB0Y3Agc2VyaWFsIHBvcnQgbnVtYmVyCisgIGJpb3NkaXI9PGRpcj4gLSBzcGVjaWZ5IGN1c3RvbSBiaW9zIGRpcgorICBiaW9zZmlsZW5hbWU9PGZpbGVuYW1lPiAtIHNwZWNpZnkgYmlvcyBmaWxlbmFtZQorICBxZW11cGFyYW1zPTx4eXo+IC0gc3BlY2lmeSBjdXN0b20gcGFyYW1ldGVycyB0byBRRU1VCisgIGJvb3RwYXJhbXM9PHh5ej4gLSBzcGVjaWZ5IGN1c3RvbSBrZXJuZWwgcGFyYW1ldGVycyBkdXJpbmcgYm9vdAorICBoZWxwOiBwcmludCB0aGlzIHRleHQKIAogRXhhbXBsZXM6Ci0gICRNWU5BTUUgcWVtdWFybQotICAkTVlOQU1FIHFlbXV4ODYtNjQgY29yZS1pbWFnZS1zYXRvIGV4dDQKLSAgJE1ZTkFNRSBxZW11eDg2LTY0IHdpYy1pbWFnZS1taW5pbWFsIHdpYwotICAkTVlOQU1FIHBhdGgvdG8vYnpJbWFnZS1xZW11eDg2LmJpbiBwYXRoL3RvL25mc3Jvb3RkaXIvIHNlcmlhbAotICAkTVlOQU1FIHFlbXV4ODYgaXNvL2hkZGltZy92bWRrL3Fjb3cyL3ZkaS9yYW1mcy9jcGlvLmd6Li4uCi0gICRNWU5BTUUgcWVtdXg4NiBxZW11cGFyYW1zPSItbSAyNTYiCi0gICRNWU5BTUUgcWVtdXg4NiBib290cGFyYW1zPSJwc3BsYXNoPWZhbHNlIgotICAkTVlOQU1FIHBhdGgvdG8vPGltYWdlPi08bWFjaGluZT4udm1kawotICAkTVlOQU1FIHBhdGgvdG8vPGltYWdlPi08bWFjaGluZT4ud2ljCi1fRU9GCi0gICAgZXhpdCAxCi19CisgIHJ1bnFlbXUgcWVtdWFybQorICBydW5xZW11IHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXVhcm0KKyAgcnVucWVtdSB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2Ly5xZW11Ym9vdC5jb25mCisgIHJ1bnFlbXUgcWVtdXg4Ni02NCBjb3JlLWltYWdlLXNhdG8gZXh0NAorICBydW5xZW11IHFlbXV4ODYtNjQgd2ljLWltYWdlLW1pbmltYWwgd2ljCisgIHJ1bnFlbXUgcGF0aC90by9iekltYWdlLXFlbXV4ODYuYmluIHBhdGgvdG8vbmZzcm9vdGRpci8gc2VyaWFsCisgIHJ1bnFlbXUgcWVtdXg4NiBpc28vaGRkaW1nL3ZtZGsvcWNvdzIvdmRpL3JhbWZzL2NwaW8uZ3ouLi4KKyAgcnVucWVtdSBxZW11eDg2IHFlbXVwYXJhbXM9Ii1tIDI1NiIKKyAgcnVucWVtdSBxZW11eDg2IGJvb3RwYXJhbXM9InBzcGxhc2g9ZmFsc2UiCisgIHJ1bnFlbXUgcGF0aC90by88aW1hZ2U+LTxtYWNoaW5lPi52bWRrCisgIHJ1bnFlbXUgcGF0aC90by88aW1hZ2U+LTxtYWNoaW5lPi53aWMKKyIiIikKIAotaWYgWyAieCQxIiA9ICJ4IiBdOyB0aGVuCi0gICAgdXNhZ2UKLWZpCitkZWYgY2hlY2tfdHVuKCk6CisgICAgIiIiQ2hlY2sgL2Rldi9uZXQvcnVuIiIiCisgICAgZGV2X3R1biA9ICcvZGV2L25ldC90dW4nCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRldl90dW4pOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRVTiBjb250cm9sIGRldmljZSAlcyBpcyB1bmF2YWlsYWJsZTsgeW91IG1heSBuZWVkIHRvIGVuYWJsZSBUVU4gKGUuZy4gc3VkbyBtb2Rwcm9iZSB0dW4pIiAlIGRldl90dW4pCiAKLWVycm9yKCkgewotICAgIGVjaG8gIkVycm9yOiAiJCoKLSAgICB1c2FnZQotfQorICAgIGlmIG5vdCBvcy5hY2Nlc3MoZGV2X3R1biwgb3MuV19PSyk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVFVOIGNvbnRyb2wgZGV2aWNlICVzIGlzIG5vdCB3cml0YWJsZSwgcGxlYXNlIGZpeCAoZS5nLiBzdWRvIGNobW9kIDY2NiAlcykiICUgKGRldl90dW4sIGRldl90dW4pKQogCi1NQUNISU5FPSR7TUFDSElORTo9IiJ9Ci1LRVJORUw9JHtLRVJORUw6PSIifQotUk9PVEZTPSR7Uk9PVEZTOj0iIn0KLUZTVFlQRT0ke0ZTVFlQRTo9IiJ9Ci1MQVpZX1JPT1RGUz0iIgotU0NSSVBUX1FFTVVfT1BUPSIiCi1TQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiIKLVNDUklQVF9LRVJORUxfT1BUPSIiCi1TRVJJQUxTVERJTz0iIgotVENQU0VSSUFMX1BPUlROVU09IiIKLUtWTV9FTkFCTEVEPSJubyIKLUtWTV9BQ1RJVkU9Im5vIgotVkhPU1RfRU5BQkxFRD0ibm8iCi1WSE9TVF9BQ1RJVkU9Im5vIgotSVNfVk09ImZhbHNlIgorZGVmIGNoZWNrX2xpYmdsKHFlbXVfYmluKToKKyAgICBjbWQgPSAnbGRkICVzJyAlIHFlbXVfYmluCisgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMuLi4nICUgY21kKQorICAgIG5lZWRfZ2wgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICBpZiByZS5zZWFyY2goJ2xpYkdMVScsIG5lZWRfZ2wpOgorICAgICAgICAjIFdlIGNhbid0IHJ1biB3aXRob3V0IGEgbGliR0wuc28KKyAgICAgICAgbGliZ2wgPSBGYWxzZQorICAgICAgICBjaGVja19maWxlcyA9ICgoJy91c3IvbGliL2xpYkdMLnNvJywgJy91c3IvbGliL2xpYkdMVS5zbycpLCBcCisgICAgICAgICAgICAoJy91c3IvbGliNjQvbGliR0wuc28nLCAnL3Vzci9saWI2NC9saWJHTFUuc28nKSwgXAorICAgICAgICAgICAgKCcvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJHTC5zbycsICcvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJHTFUuc28nKSkKIAotIyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBpcyBhIGtlcm5lbCBvciBRRU1VIGltYWdlLCBhbmQgc2V0IHRoZQotIyBhcHByb3ByaWF0ZSB2YXJpYWJsZXMKLXByb2Nlc3NfZmlsZW5hbWUoKSB7Ci0gICAgZmlsZW5hbWU9JDEKKyAgICAgICAgZm9yIChmMSwgZjIpIGluIGNoZWNrX2ZpbGVzOgorICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCdcKicsIGYxKToKKyAgICAgICAgICAgICAgICBmb3IgZzEgaW4gZ2xvYi5nbG9iKGYxKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGliZ2w6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnMSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZzIgaW4gZ2xvYi5nbG9iKGYyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnMik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYmdsID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGxpYmdsOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmMSkgYW5kIG9zLnBhdGguZXhpc3RzKGYyKToKKyAgICAgICAgICAgICAgICAgICAgbGliZ2wgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBsaWJnbDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiWW91IG5lZWQgbGliR0wuc28gYW5kIGxpYkdMVS5zbyB0byBleGlzdCBpbiB5b3VyIGxpYnJhcnkgcGF0aCB0byBydW4gdGhlIFFFTVUgZW11bGF0b3IuIikKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVWJ1bnR1IHBhY2thZ2UgbmFtZXMgYXJlOiBsaWJnbDEtbWVzYS1kZXYgYW5kIGxpYmdsdTEtbWVzYS1kZXYuIikKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmVkb3JhIHBhY2thZ2UgbmFtZXMgYXJlOiBtZXNhLWxpYkdMLWRldmVsIG1lc2EtbGliR0xVLWRldmVsLiIpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJyVzIHJlcXVpcmVzIGxpYkdMVSwgYnV0IG5vdCBmb3VuZCcgJSBxZW11X2JpbikKIAotICAgICMgRXh0cmFjdCB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uCi0gICAgRVhUPWBlY2hvICRmaWxlbmFtZSB8IGF3ayAtRiAuICd7IHByaW50IFwkTkYgfSdgCi0gICAgY2FzZSAvJEVYVC8gaW4KLQkvYmluLykKLQkJIyBBIGZpbGUgZW5kaW5nIGluIC5iaW4gaXMgYSBrZXJuZWwKLQkJWyAteiAiJEtFUk5FTCIgXSAmJiBLRVJORUw9JGZpbGVuYW1lIHx8IFwKLQkJICAgIGVycm9yICJjb25mbGljdGluZyBLRVJORUwgYXJncyBbJEtFUk5FTF0gYW5kIFskZmlsZW5hbWVdIgotCQk7OwotCS9leHRbMjM0XS98L2pmZnMyL3wvYnRyZnMvKQotCQkjIEEgZmlsZSBlbmRpbmcgaW4gYSBzdXBwb3J0dGVkIGZzIHR5cGUgaXMgYSByb290ZnMgaW1hZ2UKLQkJaWYgWyAteiAiJEZTVFlQRSIgLW8gIiRGU1RZUEUiID0gIiRFWFQiIF07IHRoZW4KLQkJICAgIEZTVFlQRT0kRVhUCi0JCSAgICBST09URlM9JGZpbGVuYW1lCi0JCWVsc2UKLQkJICAgIGVycm9yICJjb25mbGljdGluZyBGU1RZUEUgdHlwZXMgWyRGU1RZUEVdIGFuZCBbJEVYVF0iCi0JCWZpCi0JCTs7Ci0JL2hkZGltZy98L2hkZGRpcmVjdC98L3ZtZGsvfC93aWMvfC9xY293Mi98L3ZkaS8pCi0JCUZTVFlQRT0kRVhUCi0JCVZNPSRmaWxlbmFtZQotCQlST09URlM9JGZpbGVuYW1lCi0JCUlTX1ZNPSJ0cnVlIgotCQk7OwotCSopCi0JCWVycm9yICJ1bmtub3duIGZpbGUgYXJnIFskZmlsZW5hbWVdIgotCQk7OwotICAgIGVzYWMKLX0KK2RlZiBnZXRfZmlyc3RfZmlsZShjbWRzKToKKyAgICAiIiJSZXR1cm4gZmlyc3QgZmlsZSBmb3VuZCBpbiB3aWxkY2FyZCBjbWRzIiIiCisgICAgZm9yIGNtZCBpbiBjbWRzOgorICAgICAgICBhbGxfZmlsZXMgPSBnbG9iLmdsb2IoY21kKQorICAgICAgICBpZiBhbGxfZmlsZXM6CisgICAgICAgICAgICBmb3IgZiBpbiBhbGxfZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgcmV0dXJuICcnCiAKLWNoZWNrX2ZzdHlwZV9jb25mbGljdHMoKSB7Ci0gICAgaWYgWyAteiAiJEZTVFlQRSIgLW8gIiRGU1RZUEUiID0gIiQxIiBdOyB0aGVuCi0gICAgICAgIEZTVFlQRT0kMQotICAgIGVsc2UKLSAgICAgICAgZXJyb3IgImNvbmZsaWN0aW5nIEZTVFlQRSB0eXBlcyBbJEZTVFlQRV0gYW5kIFskMV0iCi0gICAgZmkKLX0KLSMgUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3Mgd2l0aG91dCByZXF1aXJpbmcgc3BlY2lmaWMgb3JkZXJpbmcuIEl0J3MgYQotIyBiaXQgbW9yZSBjb21wbGV4LCBidXQgb2ZmZXJzIGEgZ3JlYXQgdXNlciBleHBlcmllbmNlLgotd2hpbGUgdHJ1ZTsgZG8KLSAgICBhcmc9JHsxfQotICAgIGNhc2UgIiRhcmciIGluCi0gICAgICAgICJxZW11eDg2IiB8ICJxZW11eDg2LTY0IiB8ICJxZW11YXJtIiB8ICJxZW11YXJtNjQiIHwgInFlbXVtaXBzIiB8ICJxZW11bWlwc2VsIiB8IFwKLSAgICAgICAgInFlbXVtaXBzNjQiIHwgInFlbXVzaDQiICB8ICJxZW11cHBjIiB8ICJxZW11bWljcm9ibGF6ZSIgfCAicWVtdXp5bnEiKQotICAgICAgICAgICAgWyAteiAiJE1BQ0hJTkUiIC1vICIkTUFDSElORSIgPSAiJGFyZyIgXSAmJiBNQUNISU5FPSRhcmcgfHwgXAotICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBNQUNISU5FIHR5cGVzIFskTUFDSElORV0gYW5kIFskYXJnXSIKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJleHQiWzIzNF0gfCAiamZmczIiIHwgIm5mcyIgfCAiYnRyZnMiKQotICAgICAgICAgICAgY2hlY2tfZnN0eXBlX2NvbmZsaWN0cyAkYXJnCi0gICAgICAgICAgICA7OwotICAgICAgICAiaGRkaW1nIiB8ICJoZGRkaXJlY3QiIHwgIndpYyIgfCAidm1kayIgfCAicWNvdzIiIHwgInZkaSIgfCAiaXNvIikKLSAgICAgICAgICAgIGNoZWNrX2ZzdHlwZV9jb25mbGljdHMgJGFyZwotICAgICAgICAgICAgSVNfVk09InRydWUiCi0gICAgICAgICAgICA7OwotICAgICAgICAicmFtZnMiIHwgImNwaW8uZ3oiKQotICAgICAgICAgICAgRlNUWVBFPWNwaW8uZ3oKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJub2dyYXBoaWMiKQotICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1ub2dyYXBoaWMiCi0gICAgICAgICAgICBTQ1JJUFRfS0VSTkVMX09QVD0iJFNDUklQVF9LRVJORUxfT1BUIGNvbnNvbGU9dHR5UzAiCi0gICAgICAgICAgICA7OwotICAgICAgICAic2VyaWFsIikKLSAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtc2VyaWFsIHN0ZGlvIgotICAgICAgICAgICAgU0NSSVBUX0tFUk5FTF9PUFQ9IiRTQ1JJUFRfS0VSTkVMX09QVCBjb25zb2xlPXR0eVMwIgotICAgICAgICAgICAgU0VSSUFMU1RESU89IjEiCi0gICAgICAgICAgICA7OwotICAgICAgICAidGNwc2VyaWFsPSIqKQotICAgICAgICAgICAgVENQU0VSSUFMX1BPUlROVU09JHthcmcjI3RjcHNlcmlhbD19Ci0gICAgICAgICAgICA7OwotICAgICAgICAiYmlvc2Rpcj0iKikKLSAgICAgICAgICAgIENVU1RPTUJJT1NESVI9IiR7YXJnIyNiaW9zZGlyPX0iCi0JICAgIDs7Ci0gICAgICAgICJiaW9zZmlsZW5hbWU9IiopCi0gICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLWJpb3MgJHthcmcjI2Jpb3NmaWxlbmFtZT19IgotICAgICAgICAgICAgOzsKLSAgICAgICAgInFlbXVwYXJhbXM9IiopCi0gICAgICAgICAgICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiR7YXJnIyNxZW11cGFyYW1zPX0iCitjbGFzcyBCYXNlQ29uZmlnKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIFZhcnMgY2FuIGJlIG1lcmdlZCB3aXRoIC5xZW11Ym9vdC5jb25mLCB1c2UgYSBkaWN0IHRvIG1hbmFnZSB0aGVtLgorICAgICAgICBzZWxmLmQgPSB7CisgICAgICAgICAgICAnTUFDSElORSc6ICcnLAorICAgICAgICAgICAgJ0RFUExPWV9ESVJfSU1BR0UnOiAnJywKKyAgICAgICAgICAgICdRQl9LRVJORUxfUk9PVCc6ICcvZGV2L3ZkYScsCisgICAgICAgIH0KIAotICAgICAgICAgICAgIyBXYXJuIHVzZXIgaWYgdGhleSB0cnkgdG8gc3BlY2lmeSBzZXJpYWwgb3Iga3ZtIG9wdGlvbnMKLSAgICAgICAgICAgICMgdG8gdXNlIHNpbXBsaWZpZWQgb3B0aW9ucyBpbnN0ZWFkCi0gICAgICAgICAgICBzZXJpYWxfb3B0aW9uPWBleHByICIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiA6ICcuKlwoLXNlcmlhbFwpJ2AKLSAgICAgICAgICAgIGt2bV9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtZW5hYmxlLWt2bVwpJ2AKLSAgICAgICAgICAgIHZnYV9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtdmdhXCknYAotICAgICAgICAgICAgWyAhIC16ICIkc2VyaWFsX29wdGlvbiIgLW8gISAteiAiJGt2bV9vcHRpb24iIF0gJiYgXAotICAgICAgICAgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugc2ltcGxpZmllZCBzZXJpYWwgb3Iga3ZtIG9wdGlvbnMgaW5zdGVhZCIKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJib290cGFyYW1zPSIqKQotICAgICAgICAgICAgU0NSSVBUX0tFUk5FTF9PUFQ9IiRTQ1JJUFRfS0VSTkVMX09QVCAke2FyZyMjYm9vdHBhcmFtcz19IgotICAgICAgICAgICAgOzsKLSAgICAgICAgImF1ZGlvIikKLSAgICAgICAgICAgIGlmIFsgIngkTUFDSElORSIgPSAieHFlbXV4ODYiIC1vICJ4JE1BQ0hJTkUiID0gInhxZW11eDg2LTY0IiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAiRW5hYmxpbmcgYXVkaW8gaW4gcWVtdS4iCi0gICAgICAgICAgICAgICAgZWNobyAiUGxlYXNlIGluc3RhbGwgc25kX2ludGVsOHgwIG9yIHNuZF9lbnMxMzcwIGRyaXZlciBpbiBsaW51eCBndWVzdC4iCi0gICAgICAgICAgICAgICAgUUVNVV9BVURJT19EUlY9ImFsc2EiCi0gICAgICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1zb3VuZGh3IGFjOTcsZXMxMzcwIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJrdm0iKQotICAgICAgICAgICAgS1ZNX0VOQUJMRUQ9InllcyIKLSAgICAgICAgICAgIEtWTV9DQVBBQkxFPWBncmVwIC1xICd2bXhcfHN2bScgL3Byb2MvY3B1aW5mbyAmJiBlY2hvIDFgCi0gICAgICAgICAgICA7OwotICAgICAgICAia3ZtLXZob3N0IikKLSAgICAgICAgICAgIEtWTV9FTkFCTEVEPSJ5ZXMiCi0gICAgICAgICAgICBLVk1fQ0FQQUJMRT1gZ3JlcCAtcSAndm14XHxzdm0nIC9wcm9jL2NwdWluZm8gJiYgZWNobyAxYAotICAgICAgICAgICAgVkhPU1RfRU5BQkxFRD0ieWVzIgotICAgICAgICAgICAgOzsKLSAgICAgICAgInNsaXJwIikKLSAgICAgICAgICAgIFNMSVJQX0VOQUJMRUQ9InllcyIKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJwdWJsaWN2bmMiKQotICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC12bmMgOjAiCi0gICAgICAgICAgICA7OwotICAgICAgICAqLWltYWdlKikKLSAgICAgICAgICAgIFsgLXogIiRST09URlMiIF0gfHwgXAotICAgICAgICAJCWVycm9yICJjb25mbGljdGluZyBST09URlMgYXJncyBbJFJPT1RGU10gYW5kIFskYXJnXSIKLSAgICAgICAgICAgIGlmIFsgLWYgIiRhcmciIF07IHRoZW4KLSAgICAgICAgICAgICAgICBwcm9jZXNzX2ZpbGVuYW1lICRhcmcKLSAgICAgICAgICAgIGVsaWYgWyAtZCAiJGFyZyIgXTsgdGhlbgotICAgICAgICAgICAgICAgICMgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBuZnNyb290IGRpciBoYXMgLWltYWdlLQotICAgICAgICAgICAgICAgICMgaW4gdGhlIHBhdGhuYW1lCi0gICAgICAgICAgICAgICAgZWNobyAiQXNzdW1pbmcgJGFyZyBpcyBhbiBuZnMgcm9vdGZzIgotICAgICAgICAgICAgICAgIEZTVFlQRT1uZnMKLSAgICAgICAgICAgICAgICBST09URlM9JGFyZwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFJPT1RGUz0kYXJnCi0gICAgICAgICAgICAgICAgTEFaWV9ST09URlM9InRydWUiCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgIiIpIGJyZWFrIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgICAjIEEgZGlyZWN0b3J5IG5hbWUgaXMgYW4gbmZzIHJvb3RmcwotICAgICAgICAgICAgaWYgWyAtZCAiJGFyZyIgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIkFzc3VtaW5nICRhcmcgaXMgYW4gbmZzIHJvb3RmcyIKLSAgICAgICAgICAgICAgICBpZiBbIC16ICIkRlNUWVBFIiAtbyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIEZTVFlQRT1uZnMKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBGU1RZUEUgdHlwZXMgWyRhcmddIGFuZCBuZnMiCi0gICAgICAgICAgICAgICAgZmkKKyAgICAgICAgc2VsZi5xZW11X29wdCA9ICcnCisgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ID0gJycKKyAgICAgICAgc2VsZi5uZnNfZGlyID0gJycKKyAgICAgICAgc2VsZi5jbGVhbl9uZnNfZGlyID0gRmFsc2UKKyAgICAgICAgc2VsZi5uZnNfc2VydmVyID0gJycKKyAgICAgICAgc2VsZi5yb290ZnMgPSAnJworICAgICAgICBzZWxmLnFlbXVib290ID0gJycKKyAgICAgICAgc2VsZi5xYmNvbmZsb2FkID0gRmFsc2UKKyAgICAgICAgc2VsZi5rZXJuZWwgPSAnJworICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lID0gJycKKyAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZV9zY3JpcHQgPSAnJworICAgICAgICBzZWxmLmR0YiA9ICcnCisgICAgICAgIHNlbGYuZnN0eXBlID0gJycKKyAgICAgICAgc2VsZi5rdm1fZW5hYmxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYudmhvc3RfZW5hYmxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc2xpcnBfZW5hYmxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYubmZzX2luc3RhbmNlID0gMAorICAgICAgICBzZWxmLm5mc19ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZXJpYWxzdGRpbyA9IEZhbHNlCisgICAgICAgIHNlbGYuY2xlYW50YXAgPSBGYWxzZQorICAgICAgICBzZWxmLnNhdmVkX3N0dHkgPSAnJworICAgICAgICBzZWxmLmF1ZGlvX2VuYWJsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnRjcHNlcmlhbF9wb3J0bnVtID0gJycKKyAgICAgICAgc2VsZi5jdXN0b21iaW9zZGlyID0gJycKKyAgICAgICAgc2VsZi5sb2NrID0gJycKKyAgICAgICAgc2VsZi5sb2NrX2Rlc2NyaXB0b3IgPSAnJworICAgICAgICBzZWxmLmJpdGJha2VfZSA9ICcnCisgICAgICAgIHNlbGYuc25hcHNob3QgPSBGYWxzZQorICAgICAgICBzZWxmLmZzdHlwZXMgPSAoJ2V4dDInLCAnZXh0MycsICdleHQ0JywgJ2pmZnMyJywgJ25mcycsICdidHJmcycsICdjcGlvLmd6JywgJ2NwaW8nLCAncmFtZnMnKQorICAgICAgICBzZWxmLnZtdHlwZXMgPSAoJ2hkZGltZycsICdoZGRkaXJlY3QnLCAnd2ljJywgJ3ZtZGsnLCAncWNvdzInLCAndmRpJywgJ2lzbycpCiAKLSAgICAgICAgICAgICAgICBpZiBbIC16ICIkUk9PVEZTIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIFJPT1RGUz0kYXJnCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgUk9PVEZTIGFyZ3MgWyRST09URlNdIGFuZCBbJGFyZ10iCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGVsaWYgWyAtZiAiJGFyZyIgXTsgdGhlbgotICAgICAgICAgICAgICAgIHByb2Nlc3NfZmlsZW5hbWUgJGFyZwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yICJ1bmFibGUgdG8gY2xhc3NpZnkgYXJnIFskYXJnXSIKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICA7OwotICAgIGVzYWMKLSAgICBzaGlmdAotZG9uZQorICAgIGRlZiBhY3F1aXJlX2xvY2soc2VsZik6CisgICAgICAgIGxvZ2dlci5pbmZvKCJBY3F1aXJpbmcgbG9ja2ZpbGUgJXMuLi4iICUgc2VsZi5sb2NrKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmxvY2tfZGVzY3JpcHRvciA9IG9wZW4oc2VsZi5sb2NrLCAndycpCisgICAgICAgICAgICBmY250bC5mbG9jayhzZWxmLmxvY2tfZGVzY3JpcHRvciwgZmNudGwuTE9DS19FWHxmY250bC5MT0NLX05CKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQWNxdWlyaW5nIGxvY2tmaWxlICVzIGZhaWxlZDogJXMiICUgKHNlbGYubG9jaywgZSkpCisgICAgICAgICAgICBpZiBzZWxmLmxvY2tfZGVzY3JpcHRvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvY2tfZGVzY3JpcHRvci5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKIAotaWYgWyAhIC1jIC9kZXYvbmV0L3R1biBdIDsgdGhlbgotCWVjaG8gIlRVTiBjb250cm9sIGRldmljZSAvZGV2L25ldC90dW4gaXMgdW5hdmFpbGFibGU7IHlvdSBtYXkgbmVlZCB0byBlbmFibGUgVFVOIChlLmcuIHN1ZG8gbW9kcHJvYmUgdHVuKSIKLQlleGl0IDEKLWVsaWYgWyAhIC13IC9kZXYvbmV0L3R1biBdIDsgdGhlbgotCWVjaG8gIlRVTiBjb250cm9sIGRldmljZSAvZGV2L25ldC90dW4gaXMgbm90IHdyaXRhYmxlLCBwbGVhc2UgZml4IChlLmcuIHN1ZG8gY2htb2QgNjY2IC9kZXYvbmV0L3R1bikiCi0JZXhpdCAxCi1maQorICAgIGRlZiByZWxlYXNlX2xvY2soc2VsZik6CisgICAgICAgIGZjbnRsLmZsb2NrKHNlbGYubG9ja19kZXNjcmlwdG9yLCBmY250bC5MT0NLX1VOKQorICAgICAgICBzZWxmLmxvY2tfZGVzY3JpcHRvci5jbG9zZSgpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmxvY2spCiAKLSMgUmVwb3J0IGVycm9ycyBmb3IgbWlzc2luZyBjb21iaW5hdGlvbnMgb2Ygb3B0aW9ucwotaWYgWyAteiAiJE1BQ0hJTkUiIC1hIC16ICIkS0VSTkVMIiAtYSAteiAiJFZNIiAtYSAiJEZTVFlQRSIgIT0gIndpYyIgXTsgdGhlbgotICAgIGVycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IGEgTUFDSElORSBvciBLRVJORUwgYXJndW1lbnQiCi1maQotaWYgWyAiJEZTVFlQRSIgPSAibmZzIiAtYSAteiAiJFJPT1RGUyIgXTsgdGhlbgotICAgIGVycm9yICJORlMgYm9vdGluZyB3aXRob3V0IGFuIGV4cGxpY2l0IFJPT1RGUyBwYXRoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgotZmkKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSk6CisgICAgICAgIGlmIGtleSBpbiBzZWxmLmQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kLmdldChrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycKIAotaWYgWyAteiAiJE1BQ0hJTkUiIF07IHRoZW4KLSAgICBpZiBbICIkSVNfVk0iID0gInRydWUiIF07IHRoZW4KLSAgICAgICAgWyAieCRGU1RZUEUiID0gInh3aWMiIF0gJiYgZmlsZW5hbWU9JFJPT1RGUyB8fCBmaWxlbmFtZT0kVk0KLSAgICAgICAgTUFDSElORT1gYmFzZW5hbWUgJGZpbGVuYW1lIHwgc2VkIC1uICdzLy4qXChxZW11eDg2LTY0XHxxZW11eDg2XHxxZW11YXJtNjRcfHFlbXVhcm1cfHFlbXVtaXBzNjRcfHFlbXVtaXBzXHxxZW11cHBjXHxxZW11c2g0XCkuKi9cMS9wJ2AKLSAgICAgICAgaWYgWyAteiAiJE1BQ0hJTkUiIF07IHRoZW4KLSAgICAgICAgICAgIGVycm9yICJVbmFibGUgdG8gc2V0IE1BQ0hJTkUgZnJvbSBpbWFnZSBmaWxlbmFtZSBbJFZNXSIKLSAgICAgICAgZmkKLSAgICAgICAgZWNobyAiU2V0IE1BQ0hJTkUgdG8gWyRNQUNISU5FXSBiYXNlZCBvbiBpbWFnZSBbJFZNXSIKLSAgICBlbHNlCi0gICAgICAgIE1BQ0hJTkU9YGJhc2VuYW1lICRLRVJORUwgfCBzZWQgLW4gJ3MvLipcKHFlbXV4ODYtNjRcfHFlbXV4ODZcfHFlbXVhcm02NFx8cWVtdWFybVx8cWVtdW1pcHM2NFx8cWVtdW1pcHNcfHFlbXVwcGNcfHFlbXVzaDRcKS4qL1wxL3AnYAotICAgICAgICBpZiBbIC16ICIkTUFDSElORSIgXTsgdGhlbgotICAgICAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBzZXQgTUFDSElORSBmcm9tIGtlcm5lbCBmaWxlbmFtZSBbJEtFUk5FTF0iCi0gICAgICAgIGZpCi0gICAgICAgIGVjaG8gIlNldCBNQUNISU5FIHRvIFskTUFDSElORV0gYmFzZWQgb24ga2VybmVsIFskS0VSTkVMXSIKLSAgICBmaQotZmkKKyAgICBkZWYgc2V0KHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBzZWxmLmRba2V5XSA9IHZhbHVlCiAKLVlPQ1RPX0tWTV9XSUtJPSJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL0hvd190b19lbmFibGVfS1ZNX2Zvcl9Qb2t5X3FlbXUiCi1ZT0NUT19QQVJBVklSVF9LVk1fV0lLST0iaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9SdW5uaW5nX2FuX3g4Nl9Zb2N0b19MaW51eF9pbWFnZV91bmRlcl9RRU1VX0tWTSIKLSMgRGV0ZWN0IEtWTSBjb25maWd1cmF0aW9uCi1pZiBbICJ4JEtWTV9FTkFCTEVEIiA9ICJ4eWVzIiBdOyB0aGVuCi0gICAgaWYgWyAteiAiJEtWTV9DQVBBQkxFIiBdOyB0aGVuCi0gICAgICAgIGVjaG8gIllvdSBhcmUgdHJ5aW5nIHRvIGVuYWJsZSBLVk0gb24gYSBjcHUgd2l0aG91dCBWVCBzdXBwb3J0LiIKLSAgICAgICAgZWNobyAiUmVtb3ZlIGt2bSBmcm9tIHRoZSBjb21tYW5kLWxpbmUsIG9yIHJlZmVyIgotICAgICAgICBlY2hvICIkWU9DVE9fS1ZNX1dJS0kiOwotICAgICAgICBleGl0IDE7Ci0gICAgZmkKLSAgICBpZiBbICJ4JE1BQ0hJTkUiICE9ICJ4cWVtdXg4NiIgLWEgIngkTUFDSElORSIgIT0gInhxZW11eDg2LTY0IiBdOyB0aGVuCi0gICAgICAgIGVjaG8gIktWTSBvbmx5IHN1cHBvcnQgeDg2ICYgeDg2LTY0LiBSZW1vdmUga3ZtIGZyb20gdGhlIGNvbW1hbmQtbGluZSI7Ci0gICAgICAgIGV4aXQgMTsKLSAgICBmaQotICAgIGlmIFsgISAtZSAvZGV2L2t2bSBdOyB0aGVuCi0gICAgICAgIGVjaG8gIk1pc3NpbmcgS1ZNIGRldmljZS4gSGF2ZSB5b3UgaW5zZXJ0ZWQga3ZtIG1vZHVsZXM/IgotICAgICAgICBlY2hvICJGb3IgZnVydGhlciBoZWxwIHNlZToiCi0gICAgICAgIGVjaG8gIiRZT0NUT19LVk1fV0lLSSI7Ci0gICAgICAgIGV4aXQgMTsKLSAgICBmaQotICAgIGlmIFsgLXcgL2Rldi9rdm0gLWEgLXIgL2Rldi9rdm0gXTsgdGhlbgotICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLWVuYWJsZS1rdm0iCi0gICAgICAgIEtWTV9BQ1RJVkU9InllcyIKLSAgICBlbHNlCi0gICAgICAgIGVjaG8gIllvdSBoYXZlIG5vIHJpZ2h0cyBvbiAvZGV2L2t2bS4iCi0gICAgICAgIGVjaG8gIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIKLSAgICAgICAgZWNobyAiJFlPQ1RPX0tWTV9XSUtJIjsKLSAgICAgICAgZXhpdCAxOwotICAgIGZpCi0gICAgaWYgWyAieCRWSE9TVF9FTkFCTEVEIiA9ICJ4eWVzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgISAtZSAvZGV2L3Zob3N0LW5ldCBdOyB0aGVuCi0gICAgICAgICAgICBlY2hvICJNaXNzaW5nIHZpcnRpbyBuZXQgZGV2aWNlLiBIYXZlIHlvdSBpbnNlcnRlZCB2aG9zdC1uZXQgbW9kdWxlPyIKLSAgICAgICAgICAgIGVjaG8gIkZvciBmdXJ0aGVyIGhlbHAgc2VlOiIKLSAgICAgICAgICAgIGVjaG8gIiRZT0NUT19QQVJBVklSVF9LVk1fV0lLSSI7Ci0gICAgICAgICAgICBleGl0IDE7Ci0gICAgICAgIGZpCisgICAgZGVmIGlzX2RlcGxveV9kaXJfaW1hZ2Uoc2VsZiwgcCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCk6CisgICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKCcucWVtdWJvb3QuY29uZiQnLCAnXG4nLmpvaW4ob3MubGlzdGRpcihwKSksIHJlLk0pOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDYW4ndCBmaW5kIHJlcXVpcmVkICoucWVtdWJvb3QuY29uZiBpbiAlcyIgJSBwKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgbm90IHJlLnNlYXJjaCgnLWltYWdlLScsICdcbicuam9pbihvcy5saXN0ZGlyKHApKSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNhbid0IGZpbmQgKi1pbWFnZS0qIGluICVzIiAlIHApCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgaWYgWyAtdyAvZGV2L3Zob3N0LW5ldCAtYSAtciAvZGV2L3Zob3N0LW5ldCBdOyB0aGVuCi0gICAgICAgICAgICBWSE9TVF9BQ1RJVkU9InllcyIKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZWNobyAiWW91IGhhdmUgbm8gcmlnaHRzIG9uIC9kZXYvdmhvc3QtbmV0LiIKLSAgICAgICAgICAgIGVjaG8gIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIKLSAgICAgICAgICAgIGVjaG8gIiRZT0NUT19LVk1fV0lLSSI7Ci0gICAgICAgICAgICBleGl0IDE7Ci0gICAgICAgIGZpCi0gICAgZmkKLWZpCisgICAgZGVmIGNoZWNrX2FyZ19mc3R5cGUoc2VsZiwgZnN0KToKKyAgICAgICAgIiIiQ2hlY2sgYW5kIHNldCBGU1RZUEUiIiIKKyAgICAgICAgaWYgZnN0IG5vdCBpbiBzZWxmLmZzdHlwZXMgKyBzZWxmLnZtdHlwZXM6CisgICAgICAgICAgICBsb2dnZXIud2FybigiTWF5YmUgdW5zdXBwb3J0ZWQgRlNUWVBFOiAlcyIgJSBmc3QpCisgICAgICAgIGlmIG5vdCBzZWxmLmZzdHlwZSBvciBzZWxmLmZzdHlwZSA9PSBmc3Q6CisgICAgICAgICAgICBpZiBmc3QgPT0gJ3JhbWZzJzoKKyAgICAgICAgICAgICAgICBmc3QgPSAnY3Bpby5neicKKyAgICAgICAgICAgIHNlbGYuZnN0eXBlID0gZnN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvbmZsaWN0aW5nOiBGU1RZUEUgJXMgYW5kICVzIiAlIChzZWxmLmZzdHlwZSwgZnN0KSkKIAotbWFjaGluZTI9YGVjaG8gJE1BQ0hJTkUgfCB0ciAnYS16JyAnQS1aJyB8IHNlZCAncy8tL18vJ2AKLSMgTUFDSElORSBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMKKyAgICBkZWYgc2V0X21hY2hpbmVfZGVwbG95X2RpcihzZWxmLCBtYWNoaW5lLCBkZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgIiIiU2V0IE1BQ0hJTkUgYW5kIERFUExPWV9ESVJfSU1BR0UiIiIKKyAgICAgICAgbG9nZ2VyLmluZm8oJ01BQ0hJTkU6ICVzJyAlIG1hY2hpbmUpCisgICAgICAgIHNlbGYuc2V0KCJNQUNISU5FIiwgbWFjaGluZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0RFUExPWV9ESVJfSU1BR0U6ICVzJyAlIGRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgIHNlbGYuc2V0KCJERVBMT1lfRElSX0lNQUdFIiwgZGVwbG95X2Rpcl9pbWFnZSkKIAotIyBEZWZhdWx0cyB1c2VkIHdoZW4gdGhlc2UgdmFycyBuZWVkIHRvIGJlIGluZmVycmVkCi1RRU1VWDg2X0RFRkFVTFRfS0VSTkVMPWJ6SW1hZ2UtcWVtdXg4Ni5iaW4KLVFFTVVYODZfREVGQVVMVF9GU1RZUEU9ZXh0NAorICAgIGRlZiBjaGVja19hcmdfbmZzKHNlbGYsIHApOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHApOgorICAgICAgICAgICAgc2VsZi5uZnNfZGlyID0gcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCcoLiopOiguKiknLCBwKQorICAgICAgICAgICAgc2VsZi5uZnNfc2VydmVyID0gbS5ncm91cCgxKQorICAgICAgICAgICAgc2VsZi5uZnNfZGlyID0gbS5ncm91cCgyKQorICAgICAgICBzZWxmLnJvb3RmcyA9ICIiCisgICAgICAgIHNlbGYuY2hlY2tfYXJnX2ZzdHlwZSgnbmZzJykKIAotUUVNVVg4Nl82NF9ERUZBVUxUX0tFUk5FTD1iekltYWdlLXFlbXV4ODYtNjQuYmluCi1RRU1VWDg2XzY0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKyAgICBkZWYgY2hlY2tfYXJnX3BhdGgoc2VsZiwgcCk6CisgICAgICAgICIiIgorICAgICAgICAtIENoZWNrIHdoZXRoZXIgaXQgaXMgPGltYWdlPi5xZW11Ym9vdC5jb25mIG9yIGNvbnRhaW5zIDxpbWFnZT4ucWVtdWJvb3QuY29uZgorICAgICAgICAtIENoZWNrIHdoZXRoZXIgaXMgYSBrZXJuZWwgZmlsZQorICAgICAgICAtIENoZWNrIHdoZXRoZXIgaXMgYSBpbWFnZSBmaWxlCisgICAgICAgIC0gQ2hlY2sgd2hldGhlciBpdCBpcyBhIG5mcyBkaXIKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHAuZW5kc3dpdGgoJy5xZW11Ym9vdC5jb25mJyk6CisgICAgICAgICAgICBzZWxmLnFlbXVib290ID0gcAorICAgICAgICAgICAgc2VsZi5xYmNvbmZsb2FkID0gVHJ1ZQorICAgICAgICBlbGlmIHJlLnNlYXJjaCgnXC5iaW4kJywgcCkgb3IgcmUuc2VhcmNoKCdiekltYWdlJywgcCkgb3IgXAorICAgICAgICAgICAgIHJlLnNlYXJjaCgnekltYWdlJywgcCkgb3IgcmUuc2VhcmNoKCd2bWxpbnV4JywgcCkgb3IgXAorICAgICAgICAgICAgIHJlLnNlYXJjaCgnZml0SW1hZ2UnLCBwKSBvciByZS5zZWFyY2goJ3VJbWFnZScsIHApOgorICAgICAgICAgICAgc2VsZi5rZXJuZWwgPSAgcAorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHApIGFuZCAobm90IG9zLnBhdGguaXNkaXIocCkpIGFuZCByZS5zZWFyY2goJy1pbWFnZS0nLCBvcy5wYXRoLmJhc2VuYW1lKHApKToKKyAgICAgICAgICAgIHNlbGYucm9vdGZzID0gcAorICAgICAgICAgICAgZGlycGF0aCA9IG9zLnBhdGguZGlybmFtZShwKQorICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgnKC4qKVwuKC4qKSQnLCBwKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBxYiA9ICclcyVzJyAlIChyZS5zdWIoJ1wucm9vdGZzJCcsICcnLCBtLmdyb3VwKDEpKSwgJy5xZW11Ym9vdC5jb25mJykKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhxYik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucWVtdWJvb3QgPSBxYgorICAgICAgICAgICAgICAgICAgICBzZWxmLnFiY29uZmxvYWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIiVzIGRvZXNuJ3QgZXhpc3QiICUgcWIpCisgICAgICAgICAgICAgICAgZnN0ID0gbS5ncm91cCgyKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfYXJnX2ZzdHlwZShmc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2FuJ3QgZmluZCBGU1RZUEUgZnJvbTogJXMiICUgcCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHApIG9yIHJlLnNlYXJjaCgnOicsIGFyZykgYW5kIHJlLnNlYXJjaCgnLycsIGFyZyk6CisgICAgICAgICAgICBpZiBzZWxmLmlzX2RlcGxveV9kaXJfaW1hZ2UocCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0RFUExPWV9ESVJfSU1BR0U6ICVzJyAlIHApCisgICAgICAgICAgICAgICAgc2VsZi5zZXQoIkRFUExPWV9ESVJfSU1BR0UiLCBwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQXNzdW1pbmcgJXMgaXMgYW4gbmZzIHJvb3RmcyIgJSBwKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfYXJnX25mcyhwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHBhdGggYXJnICVzIiAlIHApCiAKLVFFTVVBUk1fREVGQVVMVF9LRVJORUw9ekltYWdlLXFlbXVhcm0uYmluCi1RRU1VQVJNX0RFRkFVTFRfRlNUWVBFPWV4dDQKKyAgICBkZWYgY2hlY2tfYXJnX21hY2hpbmUoc2VsZiwgYXJnKToKKyAgICAgICAgIiIiQ2hlY2sgd2hldGhlciBpdCBpcyBhIG1hY2hpbmUiIiIKKyAgICAgICAgaWYgc2VsZi5nZXQoJ01BQ0hJTkUnKSBhbmQgc2VsZi5nZXQoJ01BQ0hJTkUnKSAhPSBhcmcgb3IgcmUuc2VhcmNoKCcvJywgYXJnKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBhcmc6ICVzIiAlIGFyZykKKyAgICAgICAgZWxpZiBzZWxmLmdldCgnTUFDSElORScpID09IGFyZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBsb2dnZXIuaW5mbygnQXNzdW1pbmcgTUFDSElORSA9ICVzJyAlIGFyZykKIAotUUVNVUFSTTY0X0RFRkFVTFRfS0VSTkVMPUltYWdlLXFlbXVhcm02NC5iaW4KLVFFTVVBUk02NF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisgICAgICAgICMgaWYgd2UncmUgcnVubmluZyB1bmRlciB0ZXN0aW1hZ2UsIG9yIHNpbWlsYXJseSBhcyBhIGNoaWxkCisgICAgICAgICMgb2YgYW4gZXhpc3RpbmcgYml0YmFrZSBpbnZvY2F0aW9uLCB3ZSBjYW4ndCBpbnZva2UgYml0YmFrZQorICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSBNQUNISU5FIHNldHRpbmcgYW5kIG11c3QgYXNzdW1lIGl0J3MgY29ycmVjdC4uLgorICAgICAgICAjIEZJWE1FOiB0ZXN0aW1hZ2UuYmJjbGFzcyBleHBvcnRzIHRoZXNlIHR3byB2YXJpYWJsZXMgaW50byBlbnYsCisgICAgICAgICMgYXJlIHRoZXJlIG90aGVyIHNjZW5hcmlvcyBpbiB3aGljaCB3ZSBuZWVkIHRvIHN1cHBvcnQgYmVpbmcKKyAgICAgICAgIyBpbnZva2VkIGJ5IGJpdGJha2U/CisgICAgICAgIGRlcGxveSA9IG9zLmVudmlyb24uZ2V0KCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgYmJjaGlsZCA9IGRlcGxveSBhbmQgb3MuZW52aXJvbi5nZXQoJ09FX1RNUERJUicpCisgICAgICAgIGlmIGJiY2hpbGQ6CisgICAgICAgICAgICBzZWxmLnNldF9tYWNoaW5lX2RlcGxveV9kaXIoYXJnLCBkZXBsb3kpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBhbHNvIGNoZWNrIHdoZXRoZXIgd2UncmUgcnVubmluZyB1bmRlciBhIHNvdXJjZWQgdG9vbGNoYWluCisgICAgICAgICMgZW52aXJvbm1lbnQgZmlsZQorICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgnT0VDT1JFX05BVElWRV9TWVNST09UJyk6CisgICAgICAgICAgICBzZWxmLnNldCgiTUFDSElORSIsIGFyZykKKyAgICAgICAgICAgIHJldHVybgogCi1RRU1VTUlQU19ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzLmJpbgotUUVNVU1JUFNfREVGQVVMVF9GU1RZUEU9ZXh0NAorICAgICAgICBjbWQgPSAnTUFDSElORT0lcyBiaXRiYWtlIC1lJyAlIGFyZworICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcy4uLicgJSBjbWQpCisgICAgICAgIHNlbGYuYml0YmFrZV9lID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICMgYml0YmFrZSAtZSBkb2Vzbid0IHJlcG9ydCBpbnZhbGlkIE1BQ0hJTkUgYXMgYW4gZXJyb3IsIHNvCisgICAgICAgICMgbGV0J3MgY2hlY2sgREVQTE9ZX0RJUl9JTUFHRSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBhIHZhbGlkCisgICAgICAgICMgTUFDSElORS4KKyAgICAgICAgcyA9IHJlLnNlYXJjaCgnXkRFUExPWV9ESVJfSU1BR0U9IiguKikiJywgc2VsZi5iaXRiYWtlX2UsIHJlLk0pCisgICAgICAgIGlmIHM6CisgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gcy5ncm91cCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJiaXRiYWtlIC1lICVzIiAlIHNlbGYuYml0YmFrZV9lKQorICAgICAgICBpZiBzZWxmLmlzX2RlcGxveV9kaXJfaW1hZ2UoZGVwbG95X2Rpcl9pbWFnZSk6CisgICAgICAgICAgICBzZWxmLnNldF9tYWNoaW5lX2RlcGxveV9kaXIoYXJnLCBkZXBsb3lfZGlyX2ltYWdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBub3QgYSBkaXJlY3RvcnkgdmFsaWQgREVQTE9ZX0RJUl9JTUFHRSIgJSBkZXBsb3lfZGlyX2ltYWdlKQorICAgICAgICAgICAgc2VsZi5zZXQoIk1BQ0hJTkUiLCBhcmcpCiAKLVFFTVVNSVBTRUxfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11bWlwc2VsLmJpbgotUUVNVU1JUFNFTF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisgICAgZGVmIGNoZWNrX2FyZ3Moc2VsZik6CisgICAgICAgIHVua25vd25fYXJnID0gIiIKKyAgICAgICAgZm9yIGFyZyBpbiBzeXMuYXJndlsxOl06CisgICAgICAgICAgICBpZiBhcmcgaW4gc2VsZi5mc3R5cGVzICsgc2VsZi52bXR5cGVzOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfYXJnX2ZzdHlwZShhcmcpCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAnbm9ncmFwaGljJzoKKyAgICAgICAgICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnIC1ub2dyYXBoaWMnCisgICAgICAgICAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZV9zY3JpcHQgKz0gJyBjb25zb2xlPXR0eVMwJworICAgICAgICAgICAgZWxpZiBhcmcgPT0gJ3NlcmlhbCc6CisgICAgICAgICAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZV9zY3JpcHQgKz0gJyBjb25zb2xlPXR0eVMwJworICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsc3RkaW8gPSBUcnVlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAnYXVkaW8nOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJFbmFibGluZyBhdWRpbyBpbiBxZW11IikKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUGxlYXNlIGluc3RhbGwgc291bmQgZHJpdmVycyBpbiBsaW51eCBob3N0IikKKyAgICAgICAgICAgICAgICBzZWxmLmF1ZGlvX2VuYWJsZWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAna3ZtJzoKKyAgICAgICAgICAgICAgICBzZWxmLmt2bV9lbmFibGVkID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBhcmcgPT0gJ2t2bS12aG9zdCc6CisgICAgICAgICAgICAgICAgc2VsZi52aG9zdF9lbmFibGVkID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBhcmcgPT0gJ3NsaXJwJzoKKyAgICAgICAgICAgICAgICBzZWxmLnNsaXJwX2VuYWJsZWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAnc25hcHNob3QnOgorICAgICAgICAgICAgICAgIHNlbGYuc25hcHNob3QgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAncHVibGljdm5jJzoKKyAgICAgICAgICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnIC12bmMgOjAnCisgICAgICAgICAgICBlbGlmIGFyZy5zdGFydHN3aXRoKCd0Y3BzZXJpYWw9Jyk6CisgICAgICAgICAgICAgICAgc2VsZi50Y3BzZXJpYWxfcG9ydG51bSA9IGFyZ1tsZW4oJ3RjcHNlcmlhbD0nKTpdCisgICAgICAgICAgICBlbGlmIGFyZy5zdGFydHN3aXRoKCdiaW9zZGlyPScpOgorICAgICAgICAgICAgICAgIHNlbGYuY3VzdG9tYmlvc2RpciA9IGFyZ1tsZW4oJ2Jpb3NkaXI9Jyk6XQorICAgICAgICAgICAgZWxpZiBhcmcuc3RhcnRzd2l0aCgnYmlvc2ZpbGVuYW1lPScpOgorICAgICAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgLWJpb3MgJXMnICUgYXJnW2xlbignYmlvc2ZpbGVuYW1lPScpOl0KKyAgICAgICAgICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGgoJ3FlbXVwYXJhbXM9Jyk6CisgICAgICAgICAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAlcycgJSBhcmdbbGVuKCdxZW11cGFyYW1zPScpOl0KKyAgICAgICAgICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGgoJ2Jvb3RwYXJhbXM9Jyk6CisgICAgICAgICAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZV9zY3JpcHQgKz0gJyAlcycgJSBhcmdbbGVuKCdib290cGFyYW1zPScpOl0KKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoYXJnKSBvciAocmUuc2VhcmNoKCc6JywgYXJnKSBhbmQgcmUuc2VhcmNoKCcvJywgYXJnKSk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19hcmdfcGF0aChvcy5wYXRoLmFic3BhdGgoYXJnKSkKKyAgICAgICAgICAgIGVsaWYgcmUuc2VhcmNoKCctaW1hZ2UtJywgYXJnKToKKyAgICAgICAgICAgICAgICAjIExhenkgcm9vdGZzCisgICAgICAgICAgICAgICAgc2VsZi5yb290ZnMgPSBhcmcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBdCBsYXN0LCBhc3N1bWUgaXMgaXQgdGhlIE1BQ0hJTkUKKyAgICAgICAgICAgICAgICBpZiAobm90IHVua25vd25fYXJnKSBvciB1bmtub3duX2FyZyA9PSBhcmc6CisgICAgICAgICAgICAgICAgICAgIHVua25vd25fYXJnID0gYXJnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4ndCBoYW5kbGUgdHdvIHVua25vd24gYXJnczogJXMgJXMiICUgKHVua25vd25fYXJnLCBhcmcpKQorICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIG1hY2hpbmUKKyAgICAgICAgaWYgdW5rbm93bl9hcmc6CisgICAgICAgICAgICBpZiBzZWxmLmdldCgnTUFDSElORScpID09IHVua25vd25fYXJnOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJyk6CisgICAgICAgICAgICAgICAgIyBUcnlpbmcgdG8gZ2V0IERFUExPWV9ESVJfSU1BR0UgZnJvbSBlbnYuCisgICAgICAgICAgICAgICAgcCA9IG9zLmdldGVudignREVQTE9ZX0RJUl9JTUFHRScpCisgICAgICAgICAgICAgICAgaWYgcCBhbmQgc2VsZi5pc19kZXBsb3lfZGlyX2ltYWdlKHApOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gb3MucGF0aC5iYXNlbmFtZShwKQorICAgICAgICAgICAgICAgICAgICBpZiB1bmtub3duX2FyZyA9PSBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRfbWFjaGluZV9kZXBsb3lfZGlyKG1hY2hpbmUsIHApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdERVBMT1lfRElSX0lNQUdFOiAlcycgJSBwKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQoIkRFUExPWV9ESVJfSU1BR0UiLCBwKQorICAgICAgICAgICAgc2VsZi5jaGVja19hcmdfbWFjaGluZSh1bmtub3duX2FyZykKIAotUUVNVU1JUFM2NF9ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzNjQuYmluCi1RRU1VTUlQUzY0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKyAgICBkZWYgY2hlY2tfa3ZtKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBrdm0gYW5kIGt2bS1ob3N0IiIiCisgICAgICAgIGlmIG5vdCAoc2VsZi5rdm1fZW5hYmxlZCBvciBzZWxmLnZob3N0X2VuYWJsZWQpOgorICAgICAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAlcyAlcycgJSAoc2VsZi5nZXQoJ1FCX01BQ0hJTkUnKSwgc2VsZi5nZXQoJ1FCX0NQVScpKQorICAgICAgICAgICAgcmV0dXJuCiAKLVFFTVVTSDRfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11bWlwcy5iaW4KLVFFTVVTSDRfREVGQVVMVF9GU1RZUEU9ZXh0NAorICAgICAgICBpZiBub3Qgc2VsZi5nZXQoJ1FCX0NQVV9LVk0nKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUUJfQ1BVX0tWTSBpcyBOVUxMLCB0aGlzIGJvYXJkIGRvZXNuJ3Qgc3VwcG9ydCBrdm0iKQogCi1RRU1VUFBDX0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdXBwYy5iaW4KLVFFTVVQUENfREVGQVVMVF9GU1RZUEU9ZXh0NAorICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnICVzICVzJyAlIChzZWxmLmdldCgnUUJfTUFDSElORScpLCBzZWxmLmdldCgnUUJfQ1BVX0tWTScpKQorICAgICAgICB5b2N0b19rdm1fd2lraSA9ICJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL0hvd190b19lbmFibGVfS1ZNX2Zvcl9Qb2t5X3FlbXUiCisgICAgICAgIHlvY3RvX3BhcmF2aXJ0X2t2bV93aWtpID0gImh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvUnVubmluZ19hbl94ODZfWW9jdG9fTGludXhfaW1hZ2VfdW5kZXJfUUVNVV9LVk0iCisgICAgICAgIGRldl9rdm0gPSAnL2Rldi9rdm0nCisgICAgICAgIGRldl92aG9zdCA9ICcvZGV2L3Zob3N0LW5ldCcKKyAgICAgICAgd2l0aCBvcGVuKCcvcHJvYy9jcHVpbmZvJywgJ3InKSBhcyBmOgorICAgICAgICAgICAga3ZtX2NhcCA9IHJlLnNlYXJjaCgndm14fHN2bScsICIiLmpvaW4oZi5yZWFkbGluZXMoKSkpCisgICAgICAgIGlmIG5vdCBrdm1fY2FwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgYXJlIHRyeWluZyB0byBlbmFibGUgS1ZNIG9uIGEgY3B1IHdpdGhvdXQgVlQgc3VwcG9ydC4iKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJSZW1vdmUga3ZtIGZyb20gdGhlIGNvbW1hbmQtbGluZSwgb3IgcmVmZXI6IikKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbih5b2N0b19rdm1fd2lraSkKIAotUUVNVU1JQ1JPQkxBWkVfREVGQVVMVF9LRVJORUw9bGludXguYmluLnViCi1RRU1VTUlDUk9CTEFaRV9ERUZBVUxUX0ZTVFlQRT1jcGlvCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXZfa3ZtKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTWlzc2luZyBLVk0gZGV2aWNlLiBIYXZlIHlvdSBpbnNlcnRlZCBrdm0gbW9kdWxlcz8iKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGb3IgZnVydGhlciBoZWxwIHNlZToiKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHlvY3RvX2t2bV93aWtpKQogCi1RRU1VWllOUV9ERUZBVUxUX0tFUk5FTD11SW1hZ2UKLVFFTVVaWU5RX0RFRkFVTFRfRlNUWVBFPWNwaW8KKyAgICAgICAgaWYgb3MuYWNjZXNzKGRldl9rdm0sIG9zLldfT0t8b3MuUl9PSyk6CisgICAgICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnIC1lbmFibGUta3ZtJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgaGF2ZSBubyByZWFkIG9yIHdyaXRlIHBlcm1pc3Npb24gb24gL2Rldi9rdm0uIikKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiUGxlYXNlIGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoaXMgZmlsZSBhcyBkZXNjcmliZWQgYXQ6IikKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbih5b2N0b19rdm1fd2lraSkKIAotc2V0dXBfcGF0aF92YXJzKCkgewotICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF0gOyB0aGVuCi0gICAgICAgIFBBVEhTX1JFUVVJUkVEPXRydWUKLSAgICBlbGlmIFsgIiQxIiA9ICIxIiAtYSAteiAiJERFUExPWV9ESVJfSU1BR0UiIF0gOyB0aGVuCi0gICAgICAgIFBBVEhTX1JFUVVJUkVEPXRydWUKLSAgICBlbHNlCi0gICAgICAgIFBBVEhTX1JFUVVJUkVEPWZhbHNlCi0gICAgZmkKKyAgICAgICAgaWYgc2VsZi52aG9zdF9lbmFibGVkOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRldl92aG9zdCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJNaXNzaW5nIHZpcnRpbyBuZXQgZGV2aWNlLiBIYXZlIHlvdSBpbnNlcnRlZCB2aG9zdC1uZXQgbW9kdWxlPyIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGb3IgZnVydGhlciBoZWxwIHNlZToiKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbih5b2N0b19wYXJhdmlydF9rdm1fd2lraSkKIAotICAgIGlmIFsgIiRQQVRIU19SRVFVSVJFRCIgPSAidHJ1ZSIgXTsgdGhlbgotICAgICAgICAjIFRyeSB0byBnZXQgdGhlIHZhcmlhYmxlIHZhbHVlcyBmcm9tIGJpdGJha2UKLSAgICAgICAgdHlwZSAtUCBiaXRiYWtlICY+L2Rldi9udWxsIHx8IHsKLSAgICAgICAgICAgIGVjaG8gIkluIG9yZGVyIGZvciB0aGlzIHNjcmlwdCB0byBkeW5hbWljYWxseSBpbmZlciBwYXRocyI7Ci0gICAgICAgICAgICBlY2hvICJ0byBrZXJuZWxzIG9yIGZpbGVzeXN0ZW0gaW1hZ2VzLCB5b3UgZWl0aGVyIG5lZWQiOwotICAgICAgICAgICAgZWNobyAiYml0YmFrZSBpbiB5b3VyIFBBVEggb3IgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52IjsKLSAgICAgICAgICAgIGVjaG8gImJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0IiA+JjI7Ci0gICAgICAgICAgICBleGl0IDE7IH0KKyAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhkZXZfa3ZtLCBvcy5XX09LfG9zLlJfT0spOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiWW91IGhhdmUgbm8gcmVhZCBvciB3cml0ZSBwZXJtaXNzaW9uIG9uIC9kZXYvdmhvc3QtbmV0LiIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJQbGVhc2UgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhpcyBmaWxlIGFzIGRlc2NyaWJlZCBhdDoiKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbih5b2N0b19rdm1fd2lraSkKIAotICAgICAgICAjIFdlIGhhdmUgYml0YmFrZSBpbiBQQVRILCBnZXQgdGhlIHZhcmlhYmxlIHZhbHVlcyBmcm9tIGJpdGJha2UKLSAgICAgICAgQklUQkFLRV9FTlZfVE1QRklMRT1gbWt0ZW1wIC0tdG1wZGlyIHJ1bnFlbXUuWFhYWFhYWFhYWGAKLSAgICAgICAgaWYgWyAiJD8iICE9ICIwIiBdIDsgdGhlbgotICAgICAgICAgICAgZWNobyAiRXJyb3I6IG1rdGVtcCBmYWlsZWQgZm9yIGJpdGJha2UgZW52aXJvbm1lbnQgb3V0cHV0IgotICAgICAgICAgICAgZXhpdCAxCi0gICAgICAgIGZpCisgICAgZGVmIGNoZWNrX2ZzdHlwZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgYW5kIHNldHVwIEZTVFlQRSIiIgorICAgICAgICBpZiBub3Qgc2VsZi5mc3R5cGU6CisgICAgICAgICAgICBmc3R5cGUgPSBzZWxmLmdldCgnUUJfREVGQVVMVF9GU1RZUEUnKQorICAgICAgICAgICAgaWYgZnN0eXBlOgorICAgICAgICAgICAgICAgIHNlbGYuZnN0eXBlID0gZnN0eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRlNUWVBFIGlzIE5VTEwhIikKIAotICAgICAgICBNQUNISU5FPSRNQUNISU5FIGJpdGJha2UgLWUgPiAkQklUQkFLRV9FTlZfVE1QRklMRQotICAgICAgICBpZiBbIC16ICIkT0VfVE1QRElSIiBdIDsgdGhlbgotICAgICAgICAgICAgT0VfVE1QRElSPWBzZWQgLW4gJ3MvXlRNUERJUj1cIlwoLipcKVwiL1wxL3AnICRCSVRCQUtFX0VOVl9UTVBGSUxFYAotICAgICAgICBmaQotICAgICAgICBpZiBbIC16ICIkREVQTE9ZX0RJUl9JTUFHRSIgXSA7IHRoZW4KLSAgICAgICAgICAgIERFUExPWV9ESVJfSU1BR0U9YHNlZCAtbiAncy9eREVQTE9ZX0RJUl9JTUFHRT1cIlwoLipcKVwiL1wxL3AnICRCSVRCQUtFX0VOVl9UTVBGSUxFYAotICAgICAgICBmaQotICAgICAgICBpZiBbIC16ICIkT0VfVE1QRElSIiBdOyB0aGVuCi0gICAgICAgICAgICAjIENoZWNrIGZvciBlcnJvcnMgZnJvbSBiaXRiYWtlIHRoYXQgdGhlIHVzZXIgbmVlZHMgdG8ga25vdyBhYm91dAotICAgICAgICAgICAgQklUQkFLRV9PVVRQVVQ9YGNhdCAkQklUQkFLRV9FTlZfVE1QRklMRSB8IHdjIC1sYAotICAgICAgICAgICAgaWYgWyAiJEJJVEJBS0VfT1VUUFVUIiAtZXEgIjAiIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogdGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcnVuIGZyb20geW91ciBidWlsZCBkaXJlY3RvcnksIG9yIHlvdSBuZWVkIgotICAgICAgICAgICAgICAgIGVjaG8gInRvIGV4cGxpY2l0bHkgc2V0IE9FX1RNUERJUiBhbmQgREVQTE9ZX0RJUl9JTUFHRSBpbiB5b3VyIGVudmlyb25tZW50IgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVjaG8gIlRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIGJpdGJha2UgdG8gZGV0ZXJtaW5lIFRNUERJUiIKLSAgICAgICAgICAgICAgICBlY2hvICJIZXJlIGlzIHRoZSBvdXRwdXQgZnJvbSAnYml0YmFrZSAtZSc6IgotICAgICAgICAgICAgICAgIGNhdCAkQklUQkFLRV9FTlZfVE1QRklMRQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIHJtICRCSVRCQUtFX0VOVl9UTVBGSUxFCi0gICAgICAgICAgICBleGl0IDEKLSAgICAgICAgZmkKLSAgICAgICAgcm0gJEJJVEJBS0VfRU5WX1RNUEZJTEUKLSAgICBmaQotfQorICAgIGRlZiBjaGVja19yb290ZnMoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGFuZCBzZXQgcm9vdGZzIiIiCiAKLXNldHVwX3N5c3Jvb3QoKSB7Ci0gICAgIyBUb29sY2hhaW4gaW5zdGFsbHMgc2V0IHVwICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgaW4gdGhlaXIKLSAgICAjIGVudmlyb25tZW50IHNjcmlwdC4gSWYgdGhhdCB2YXJpYWJsZSBpc24ndCBzZXQsIHdlJ3JlCi0gICAgIyBlaXRoZXIgaW4gYW4gaW4tdHJlZSBidWlsZCBzY2VuYXJpbyBvciB0aGUgZW52aXJvbm1lbnQKLSAgICAjIHNjcmlwdCB3YXNuJ3Qgc291cmNlJ2QuCi0gICAgaWYgWyAteiAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCIgXTsgdGhlbgotICAgICAgICBzZXR1cF9wYXRoX3ZhcnMKLSAgICAgICAgQlVJTERfQVJDSD1gdW5hbWUgLW1gCi0gICAgICAgIEJVSUxEX09TPWB1bmFtZSB8IHRyICdbQS1aXScgJ1thLXpdJ2AKLSAgICAgICAgQlVJTERfU1lTPSIkQlVJTERfQVJDSC0kQlVJTERfT1MiCisgICAgICAgIGlmIHNlbGYuZnN0eXBlID09ICduZnMnOgorICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgT0VDT1JFX05BVElWRV9TWVNST09UPSRPRV9UTVBESVIvc3lzcm9vdHMvJEJVSUxEX1NZUwotICAgIGZpIAorICAgICAgICBpZiBzZWxmLnJvb3RmcyBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucm9vdGZzKToKKyAgICAgICAgICAgICMgTGF6eSByb290ZnMKKyAgICAgICAgICAgIHNlbGYucm9vdGZzID0gIiVzLyVzLSVzLiVzIiAlIChzZWxmLmdldCgnREVQTE9ZX0RJUl9JTUFHRScpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLnJvb3Rmcywgc2VsZi5nZXQoJ01BQ0hJTkUnKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mc3R5cGUpCisgICAgICAgIGVsaWYgbm90IHNlbGYucm9vdGZzOgorICAgICAgICAgICAgY21kX25hbWUgPSAnJXMvJXMqLiVzJyAlIChzZWxmLmdldCgnREVQTE9ZX0RJUl9JTUFHRScpLCBzZWxmLmdldCgnSU1BR0VfTkFNRScpLCBzZWxmLmZzdHlwZSkKKyAgICAgICAgICAgIGNtZF9saW5rID0gJyVzLyVzKi4lcycgJSAoc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKSwgc2VsZi5nZXQoJ0lNQUdFX0xJTktfTkFNRScpLCBzZWxmLmZzdHlwZSkKKyAgICAgICAgICAgIGNtZHMgPSAoY21kX25hbWUsIGNtZF9saW5rKQorICAgICAgICAgICAgc2VsZi5yb290ZnMgPSBnZXRfZmlyc3RfZmlsZShjbWRzKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucm9vdGZzOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGZpbmQgcm9vdGZzOiAlcyBvciAlcyIgJSBjbWRzKQogCi0gICAgIyBTb21lIHJlY2lwZXMgc3RvcmUgdGhlIEJJT1MgdW5kZXIgJE9FX1RNUERJUi9zeXNyb290cy8kTUFDSElORSwKLSAgICAjIG5vdyBkZWZpbmVkIGFzIE9FQ09SRV9NQUNISU5FX1NZU1JPT1QuIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNlYXJjaGluZwotICAgICMgQklPUywgVkdBIEJJT1MgYW5kIGtleW1hcHMuCi0gICAgaWYgWyAteiAiJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QiIF07IHRoZW4KLSAgICAgICAgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVD0kT0VfVE1QRElSL3N5c3Jvb3RzLyRNQUNISU5FCi0gICAgZmkKLX0KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucm9vdGZzKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2FuJ3QgZmluZCByb290ZnM6ICVzIiAlIHNlbGYucm9vdGZzKQogCi0jIExvY2F0ZSBhIHJvb3RmcyBpbWFnZSB0byBib290IHdoaWNoIG1hdGNoZXMgb3VyIGV4cGVjdGVkCi0jIG1hY2hpbmUgYW5kIGZzdHlwZS4gCi1maW5kaW1hZ2UoKSB7Ci0gICAgd2hlcmU9JDEKLSAgICBtYWNoaW5lPSQyCi0gICAgZXh0ZW5zaW9uPSQzCisgICAgZGVmIGNoZWNrX2tlcm5lbChzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgYW5kIHNldCBrZXJuZWwsIGR0YiIiIgorICAgICAgICAjIFRoZSB2bSBpbWFnZSBkb2Vzbid0IG5lZWQgYSBrZXJuZWwKKyAgICAgICAgaWYgc2VsZi5mc3R5cGUgaW4gc2VsZi52bXR5cGVzOgorICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAjIFNvcnQgcm9vdGZzIGNhbmRpZGF0ZXMgYnkgbW9kaWZpY2F0aW9uIHRpbWUgLSB0aGUgbW9zdAotICAgICMgcmVjZW50bHkgY3JlYXRlZCBvbmUgaXMgdGhlIG9uZSB3ZSBtb3N0IGxpa2VseSB3YW50IHRvIGJvb3QuCi0gICAgZmlsZW5hbWU9YGxzIC10MSAkd2hlcmUvKi1pbWFnZSokbWFjaGluZS4kZXh0ZW5zaW9uIDI+L2Rldi9udWxsIHwgaGVhZCAtbjFgCi0gICAgaWYgWyAieCRmaWxlbmFtZSIgIT0gIngiIF07IHRoZW4KLSAgICAgICAgUk9PVEZTPSRmaWxlbmFtZQotICAgICAgICByZXR1cm4KLSAgICBmaQorICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBpZiBub3Qgc2VsZi5rZXJuZWw6CisgICAgICAgICAgICBrZXJuZWxfbWF0Y2hfbmFtZSA9ICIlcy8lcyIgJSAoZGVwbG95X2Rpcl9pbWFnZSwgc2VsZi5nZXQoJ1FCX0RFRkFVTFRfS0VSTkVMJykpCisgICAgICAgICAgICBrZXJuZWxfbWF0Y2hfbGluayA9ICIlcy8lcyIgJSAoZGVwbG95X2Rpcl9pbWFnZSwgc2VsZi5nZXQoJ0tFUk5FTF9JTUFHRVRZUEUnKSkKKyAgICAgICAgICAgIGtlcm5lbF9zdGFydHN3aXRoID0gIiVzLyVzKiIgJSAoZGVwbG95X2Rpcl9pbWFnZSwgc2VsZi5nZXQoJ0tFUk5FTF9JTUFHRVRZUEUnKSkKKyAgICAgICAgICAgIGNtZHMgPSAoa2VybmVsX21hdGNoX25hbWUsIGtlcm5lbF9tYXRjaF9saW5rLCBrZXJuZWxfc3RhcnRzd2l0aCkKKyAgICAgICAgICAgIHNlbGYua2VybmVsID0gZ2V0X2ZpcnN0X2ZpbGUoY21kcykKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmtlcm5lbDoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0tFUk5FTCBub3QgZm91bmQ6ICVzLCAlcyBvciAlcycgJSBjbWRzKQogCi0gICAgZWNobyAiQ291bGRuJ3QgZmluZCBhICRtYWNoaW5lIHJvb3RmcyBpbWFnZSBpbiAkd2hlcmUuIgotICAgIGV4aXQgMQotfQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5rZXJuZWwpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJLRVJORUwgJXMgbm90IGZvdW5kIiAlIHNlbGYua2VybmVsKQogCi1pZiBbIC1lICIkUk9PVEZTIiAtYSAteiAiJEZTVFlQRSIgXTsgdGhlbgotICAgICMgRXh0cmFjdCB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uCi0gICAgRVhUPWBlY2hvICRST09URlMgfCBhd2sgLUYgLiAneyBwcmludCBcJE5GIH0nYAotICAgIGlmIFsgIngkRVhUIiA9ICJ4ZXh0MiIgLW8gIngkRVhUIiA9ICJ4ZXh0MyIgLW8gXAotICAgICAgICAgICJ4JEVYVCIgPSAieGpmZnMyIiAtbyAieCRFWFQiID0gInhidHJmcyIgLW8gXAotICAgICAgICAgICJ4JEVYVCIgPSAieGV4dDQiIF07IHRoZW4KLSAgICAgICAgRlNUWVBFPSRFWFQKLSAgICBlbHNlCi0gICAgICAgIGVjaG8gIk5vdGU6IFVuYWJsZSB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBleHRlbnNpb24gZm9yICRST09URlMiCi0gICAgICAgIGVjaG8gIldlIHdpbGwgdXNlIHRoZSBkZWZhdWx0IEZTVFlQRSBmb3IgJE1BQ0hJTkUiCi0gICAgICAgICMgLi4ud2hpY2ggaXMgZG9uZSBmdXJ0aGVyIGJlbG93Li4uCi0gICAgZmkKLWZpCisgICAgICAgIGR0YiA9IHNlbGYuZ2V0KCdRQl9EVEInKQorICAgICAgICBpZiBkdGI6CisgICAgICAgICAgICBjbWRfbWF0Y2ggPSAiJXMvJXMiICUgKGRlcGxveV9kaXJfaW1hZ2UsIGR0YikKKyAgICAgICAgICAgIGNtZF9zdGFydHN3aXRoID0gIiVzLyVzKiIgJSAoZGVwbG95X2Rpcl9pbWFnZSwgZHRiKQorICAgICAgICAgICAgY21kX3dpbGQgPSAiJXMvKi5kdGIiICUgZGVwbG95X2Rpcl9pbWFnZQorICAgICAgICAgICAgY21kcyA9IChjbWRfbWF0Y2gsIGNtZF9zdGFydHN3aXRoLCBjbWRfd2lsZCkKKyAgICAgICAgICAgIHNlbGYuZHRiID0gZ2V0X2ZpcnN0X2ZpbGUoY21kcykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmR0Yik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdEVEIgbm90IGZvdW5kOiAlcywgJXMgb3IgJXMnICUgY21kcykKIAotaWYgWyAteiAiJEtFUk5FTCIgLWEgIiRJU19WTSIgPSAiZmFsc2UiIF07IHRoZW4gXAotICAgIHNldHVwX3BhdGhfdmFycyAxCi0gICAgZXZhbCBrZXJuZWxfZmlsZT1cJCR7bWFjaGluZTJ9X0RFRkFVTFRfS0VSTkVMCi0gICAgS0VSTkVMPSRERVBMT1lfRElSX0lNQUdFLyRrZXJuZWxfZmlsZQorICAgIGRlZiBjaGVja19iaW9zZGlyKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBjdXN0b21iaW9zZGlyIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmN1c3RvbWJpb3NkaXI6CisgICAgICAgICAgICByZXR1cm4KIAotICAgIGlmIFsgLXogIiRLRVJORUwiIF07IHRoZW4KLSAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCBrZXJuZWwgZm9yIE1BQ0hJTkUgWyRNQUNISU5FXSIKLSAgICBmaQotZmkKLSMgS0VSTkVMIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworICAgICAgICBiaW9zZGlyID0gIiIKKyAgICAgICAgYmlvc2Rpcl9uYXRpdmUgPSAiJXMvJXMiICUgKHNlbGYuZ2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnKSwgc2VsZi5jdXN0b21iaW9zZGlyKQorICAgICAgICBiaW9zZGlyX2hvc3QgPSAiJXMvJXMiICUgKHNlbGYuZ2V0KCdTVEFHSU5HX0RJUl9IT1NUJyksIHNlbGYuY3VzdG9tYmlvc2RpcikKKyAgICAgICAgZm9yIGkgaW4gKHNlbGYuY3VzdG9tYmlvc2RpciwgYmlvc2Rpcl9uYXRpdmUsIGJpb3NkaXJfaG9zdCk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGkpOgorICAgICAgICAgICAgICAgIGJpb3NkaXIgPSBpCisgICAgICAgICAgICAgICAgYnJlYWsKIAotaWYgWyAteiAiJEZTVFlQRSIgXTsgdGhlbgotICAgIGV2YWwgRlNUWVBFPVwkJHttYWNoaW5lMn1fREVGQVVMVF9GU1RZUEUKKyAgICAgICAgaWYgYmlvc2RpcjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBc3N1bWluZyBiaW9zZGlyIGlzOiAlcyIgJSBiaW9zZGlyKQorICAgICAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAtTCAlcycgJSBiaW9zZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkN1c3RvbSBCSU9TIGRpcmVjdG9yeSBub3QgZm91bmQuIFRyaWVkOiAlcywgJXMsIGFuZCAlcyIgJSAoc2VsZi5jdXN0b21iaW9zZGlyLCBiaW9zZGlyX25hdGl2ZSwgYmlvc2Rpcl9ob3N0KSkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBjdXN0b21iaW9zZGlyOiAlcyIgJSBzZWxmLmN1c3RvbWJpb3NkaXIpCiAKLSAgICBpZiBbIC16ICIkRlNUWVBFIiBdOyB0aGVuCi0gICAgICAgIGVycm9yICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgZnN0eXBlIGZvciBNQUNISU5FIFskTUFDSElORV0iCi0gICAgZmkKLWZpCisgICAgZGVmIGNoZWNrX21lbShzZWxmKToKKyAgICAgICAgcyA9IHJlLnNlYXJjaCgnLW0gKyhbMC05XSspJywgc2VsZi5xZW11X29wdF9zY3JpcHQpCisgICAgICAgIGlmIHM6CisgICAgICAgICAgICBzZWxmLnNldCgnUUJfTUVNJywgJy1tICVzJyAlIHMuZ3JvdXAoMSkpCisgICAgICAgIGVsaWYgbm90IHNlbGYuZ2V0KCdRQl9NRU0nKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdRQl9NRU0gaXMgbm90IHNldCwgdXNlIDUxMk0gYnkgZGVmYXVsdCcpCisgICAgICAgICAgICBzZWxmLnNldCgnUUJfTUVNJywgJy1tIDUxMicpCiAKLSMgRlNUWVBFIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lX3NjcmlwdCArPSAnIG1lbT0lcycgJSBzZWxmLmdldCgnUUJfTUVNJykucmVwbGFjZSgnLW0nLCcnKS5zdHJpcCgpICsgJ00nCisgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgJXMnICUgc2VsZi5nZXQoJ1FCX01FTScpCiAKLSMgSGFuZGxlIGNhc2VzIHdoZXJlIGEgUk9PVEZTIHR5cGUgaXMgZ2l2ZW4gaW5zdGVhZCBvZiBhIGZpbGVuYW1lLCBlLmcuCi0jIGNvcmUtaW1hZ2Utc2F0bwotaWYgWyAiJExBWllfUk9PVEZTIiA9ICJ0cnVlIiBdOyB0aGVuCi0gICAgc2V0dXBfcGF0aF92YXJzIDEKLSAgICBlY2hvICJBc3N1bWluZyAkUk9PVEZTIHJlYWxseSBtZWFucyAkREVQTE9ZX0RJUl9JTUFHRS8kUk9PVEZTLSRNQUNISU5FLiRGU1RZUEUiCi0gICAgaWYgWyAiJElTX1ZNIiA9ICJ0cnVlIiBdOyB0aGVuCi0gICAgICAgIFZNPSRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRQotICAgIGVsc2UKLSAgICAgICAgUk9PVEZTPSRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRQotICAgIGZpCi1maQorICAgIGRlZiBjaGVja190Y3BzZXJpYWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGNwc2VyaWFsX3BvcnRudW06CisgICAgICAgICAgICBpZiBzZWxmLmdldCgnUUJfVENQU0VSSUFMX09QVCcpOgorICAgICAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgJyArIHNlbGYuZ2V0KCdRQl9UQ1BTRVJJQUxfT1BUJykucmVwbGFjZSgnQFBPUlRAJywgc2VsZi50Y3BzZXJpYWxfcG9ydG51bSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAtc2VyaWFsIHRjcDoxMjcuMC4wLjE6JXMnICUgc2VsZi50Y3BzZXJpYWxfcG9ydG51bQogCi1pZiBbIC16ICIkUk9PVEZTIiBdOyB0aGVuCi0gICAgc2V0dXBfcGF0aF92YXJzIDEKLSAgICBUPSRERVBMT1lfRElSX0lNQUdFCi0gICAgZXZhbCByb290ZnNfbGlzdD1cJCR7bWFjaGluZTJ9X0RFRkFVTFRfUk9PVEZTCi0gICAgZmluZGltYWdlICRUICRNQUNISU5FICRGU1RZUEUKKyAgICBkZWYgY2hlY2tfYW5kX3NldChzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgY29uZmlncyBzYW5pdHkgYW5kIHNldCB3aGVuIG5lZWRlZCIiIgorICAgICAgICBzZWxmLnZhbGlkYXRlX3BhdGhzKCkKKyAgICAgICAgY2hlY2tfdHVuKCkKKyAgICAgICAgIyBDaGVjayBhdWRpbworICAgICAgICBpZiBzZWxmLmF1ZGlvX2VuYWJsZWQ6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5nZXQoJ1FCX0FVRElPX0RSVicpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUUJfQVVESU9fRFJWIGlzIE5VTEwsIHRoaXMgYm9hcmQgZG9lc24ndCBzdXBwb3J0IGF1ZGlvIikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdldCgnUUJfQVVESU9fT1BUJyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1FCX0FVRElPX09QVCBpcyBOVUxMLCB5b3UgbWF5IG5lZWQgZGVmaW5lIGl0IHRvIG1ha2UgYXVkaW8gd29yaycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgJXMnICUgc2VsZi5nZXQoJ1FCX0FVRElPX09QVCcpCisgICAgICAgICAgICBvcy5wdXRlbnYoJ1FFTVVfQVVESU9fRFJWJywgc2VsZi5nZXQoJ1FCX0FVRElPX0RSVicpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MucHV0ZW52KCdRRU1VX0FVRElPX0RSVicsICdub25lJykKIAotICAgIGlmIFsgLXogIiRST09URlMiIF07IHRoZW4KLSAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCByb290ZnMgZm9yIE1BQ0hJTkUgWyRNQUNISU5FXSIKLSAgICBlbGlmIFsgIiRJU19WTSIgPSAidHJ1ZSIgXTsgdGhlbgotCQlWTT0kUk9PVEZTCi0gICAgZmkKLWZpCi0jIFJPT1RGUyBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMsIG5vdyBleHBhbmQgaXQgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aCwgaXQgc2hvdWxkIGV4aXN0IGF0IHRoaXMgcG9pbnQKKyAgICAgICAgc2VsZi5jaGVja19rdm0oKQorICAgICAgICBzZWxmLmNoZWNrX2ZzdHlwZSgpCisgICAgICAgIHNlbGYuY2hlY2tfcm9vdGZzKCkKKyAgICAgICAgc2VsZi5jaGVja19rZXJuZWwoKQorICAgICAgICBzZWxmLmNoZWNrX2Jpb3NkaXIoKQorICAgICAgICBzZWxmLmNoZWNrX21lbSgpCisgICAgICAgIHNlbGYuY2hlY2tfdGNwc2VyaWFsKCkKIAotUk9PVEZTPWByZWFkbGluayAtZiAkUk9PVEZTYAorICAgIGRlZiByZWFkX3FlbXVib290KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5xZW11Ym9vdDoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJyk6CisgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgICAgIGVsaWYgb3MuZ2V0ZW52KCdERVBMT1lfRElSX0lNQUdFJyk6CisgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IG9zLmdldGVudignREVQTE9ZX0RJUl9JTUFHRScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDYW4ndCBmaW5kIHFlbXVib290IGNvbmYgZmlsZSwgREVQTE9ZX0RJUl9JTUFHRSBpcyBOVUxMISIpCisgICAgICAgICAgICAgICAgcmV0dXJuCiAKLWVjaG8gIiIKLWVjaG8gIkNvbnRpbnVpbmcgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6IgotaWYgWyAiJElTX1ZNIiA9ICJmYWxzZSIgXTsgdGhlbgotICAgIGVjaG8gIktFUk5FTDogWyRLRVJORUxdIgotICAgIGVjaG8gIlJPT1RGUzogWyRST09URlNdIgotZWxzZQotICAgIGVjaG8gIlZNOiAgIFskVk1dIgotZmkKLWVjaG8gIkZTVFlQRTogWyRGU1RZUEVdIgorICAgICAgICAgICAgaWYgc2VsZi5yb290ZnMgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICAgICAgIyBMYXp5IHJvb3RmcworICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBzZWxmLmdldCgnTUFDSElORScpCisgICAgICAgICAgICAgICAgaWYgbm90IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBvcy5wYXRoLmJhc2VuYW1lKGRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5xZW11Ym9vdCA9ICIlcy8lcy0lcy5xZW11Ym9vdC5jb25mIiAlIChkZXBsb3lfZGlyX2ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yb290ZnMsIG1hY2hpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNtZCA9ICdscyAtdCAlcy8qLnFlbXVib290LmNvbmYnICUgIGRlcGxveV9kaXJfaW1hZ2UKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcy4uLicgJSBjbWQpCisgICAgICAgICAgICAgICAgcWJzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgaWYgcWJzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnFlbXVib290ID0gcWJzLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5xYmNvbmZsb2FkID0gVHJ1ZQogCi1zZXR1cF9zeXNyb290Ci0jIE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBhbmQgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVCBhcmUgbm93IHNldCBmb3IgYWxsIGNhc2VzCisgICAgICAgIGlmIG5vdCBzZWxmLnFlbXVib290OgorICAgICAgICAgICAgIyBJZiB3ZSBoYXZlbid0IGZvdW5kIGEgLnFlbXVib290LmNvbmYgYXQgdGhpcyBwb2ludCBpdCBwcm9iYWJseQorICAgICAgICAgICAgIyBkb2Vzbid0IGV4aXN0LCBjb250aW51ZSB3aXRob3V0CisgICAgICAgICAgICByZXR1cm4KIAotSU5URVJOQUxfU0NSSVBUPSIkMC1pbnRlcm5hbCIKLWlmIFsgISAtZiAiJElOVEVSTkFMX1NDUklQVCIgLW8gISAtciAiJElOVEVSTkFMX1NDUklQVCIgXTsgdGhlbgotSU5URVJOQUxfU0NSSVBUPWB3aGljaCBydW5xZW11LWludGVybmFsYAotZmkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucWVtdWJvb3QpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCA8aW1hZ2U+LnFlbXVib290LmNvbmYhIikKIAotIyBTcGVjaWZ5IGRpcmVjdG9yeSBmb3IgQklPUywgVkdBIEJJT1MgYW5kIGtleW1hcHMKLWlmIFsgISAteiAiJENVU1RPTUJJT1NESVIiIF07IHRoZW4KLSAgICBpZiBbIC1kICIkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIiBdOyB0aGVuCi0gICAgICAgIGVjaG8gIkFzc3VtaW5nIGJpb3NkaXIgaXMgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKLSAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1MICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCi0gICAgZWxpZiBbIC1kICIkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgotICAgICAgICBlY2hvICJBc3N1bWluZyBiaW9zZGlyIGlzICRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIgotICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLUwgJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCi0gICAgZWxzZQotICAgICAgICBpZiBbICEgLWQgIiRDVVNUT01CSU9TRElSIiBdOyB0aGVuCi0gICAgICAgICAgICBlY2hvICJDdXN0b20gQklPUyBkaXJlY3Rvcnkgbm90IGZvdW5kLiBUcmllZDogJENVU1RPTUJJT1NESVIiCi0gICAgICAgICAgICBlY2hvICJhbmQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKLSAgICAgICAgICAgIGVjaG8gImFuZCAkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKLSAgICAgICAgICAgIGV4aXQgMTsKLSAgICAgICAgZmkKLSAgICAgICAgZWNobyAiQXNzdW1pbmcgYmlvc2RpciBpcyAkQ1VTVE9NQklPU0RJUiIKLSAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1MICRDVVNUT01CSU9TRElSIgotICAgIGZpCi1maQorICAgICAgICBsb2dnZXIuaW5mbygnQ09ORkZJTEU6ICVzJyAlIHNlbGYucWVtdWJvb3QpCiAKLS4gJElOVEVSTkFMX1NDUklQVAotZXhpdCAkPworICAgICAgICBjZiA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICBjZi5yZWFkKHNlbGYucWVtdWJvb3QpCisgICAgICAgIGZvciBrLCB2IGluIGNmLml0ZW1zKCdjb25maWdfYnNwJyk6CisgICAgICAgICAgICBrX3VwcGVyID0gay51cHBlcigpCisgICAgICAgICAgICBzZWxmLnNldChrX3VwcGVyLCB2KQorCisgICAgZGVmIHZhbGlkYXRlX3BhdGhzKHNlbGYpOgorICAgICAgICAiIiJFbnN1cmUgYWxsIHJlbGV2YW50IHBhdGggdmFyaWFibGVzIGFyZSBzZXQiIiIKKyAgICAgICAgIyBXaGVuIHdlJ3JlIHN0YXJ0ZWQgd2l0aCBhICoucWVtdWJvb3QuY29uZiBhcmcgYXNzdW1lIHRoYXQgaW1hZ2UKKyAgICAgICAgIyBhcnRlZmFjdHMgYXJlIHJlbGF0aXZlIHRvIHRoYXQgZmlsZSwgcmF0aGVyIHRoYW4gaW4gd2hhdGV2ZXIKKyAgICAgICAgIyBkaXJlY3RvcnkgREVQTE9ZX0RJUl9JTUFHRSBpbiB0aGUgY29uZiBmaWxlIHBvaW50cyB0by4KKyAgICAgICAgaWYgc2VsZi5xYmNvbmZsb2FkOgorICAgICAgICAgICAgaW1nZGlyID0gb3MucGF0aC5kaXJuYW1lKHNlbGYucWVtdWJvb3QpCisgICAgICAgICAgICBpZiBpbWdkaXIgIT0gc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0dGluZyBERVBMT1lfRElSX0lNQUdFIHRvIGZvbGRlciBjb250YWluaW5nICVzICglcyknICUgKHNlbGYucWVtdWJvb3QsIGltZ2RpcikpCisgICAgICAgICAgICAgICAgc2VsZi5zZXQoJ0RFUExPWV9ESVJfSU1BR0UnLCBpbWdkaXIpCisKKyAgICAgICAgIyBJZiB0aGUgU1RBR0lOR18qX05BVElWRSBkaXJlY3RvcmllcyBmcm9tIHRoZSBjb25maWcgZmlsZSBkb24ndCBleGlzdAorICAgICAgICAjIGFuZCB3ZSdyZSBpbiBhIHNvdXJjZWQgT0UgYnVpbGQgZGlyZWN0b3J5IHRyeSB0byBleHRyYWN0IHRoZSBwYXRocworICAgICAgICAjIGZyb20gYGJpdGJha2UgLWVgCisgICAgICAgIGhhdmVuYXRpdmUgPSBvcy5wYXRoLmV4aXN0cyhzZWxmLmdldCgnU1RBR0lOR19ESVJfTkFUSVZFJykpIGFuZCBcCisgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhzZWxmLmdldCgnU1RBR0lOR19CSU5ESVJfTkFUSVZFJykpCisKKyAgICAgICAgaWYgbm90IGhhdmVuYXRpdmU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5iaXRiYWtlX2U6CisgICAgICAgICAgICAgICAgc2VsZi5sb2FkX2JpdGJha2VfZW52KCkKKworICAgICAgICAgICAgaWYgc2VsZi5iaXRiYWtlX2U6CisgICAgICAgICAgICAgICAgbmF0aXZlX3ZhcnMgPSBbJ1NUQUdJTkdfRElSX05BVElWRScsICdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnXQorICAgICAgICAgICAgICAgIGZvciBudiBpbiBuYXRpdmVfdmFyczoKKyAgICAgICAgICAgICAgICAgICAgcyA9IHJlLnNlYXJjaCgnXiVzPSIoLiopIicgJSBudiwgc2VsZi5iaXRiYWtlX2UsIHJlLk0pCisgICAgICAgICAgICAgICAgICAgIGlmIHMgYW5kIHMuZ3JvdXAoMSkgIT0gc2VsZi5nZXQobnYpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ092ZXJyaWRpbmcgY29uZiBmaWxlIHNldHRpbmcgb2YgJXMgdG8gJXMgZnJvbSBCaXRiYWtlIGVudmlyb25tZW50JyAlIChudiwgcy5ncm91cCgxKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldChudiwgcy5ncm91cCgxKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyB3aGVuIHdlJ3JlIGludm9rZWQgZnJvbSBhIHJ1bm5pbmcgYml0YmFrZSBpbnN0YW5jZSB3ZSB3b24ndAorICAgICAgICAgICAgICAgICMgYmUgYWJsZSB0byBjYWxsIGBiaXRiYWtlIC1lYCwgdGhlbiB0cnk6CisgICAgICAgICAgICAgICAgIyAtIGdldCBPRV9UTVBESVIgZnJvbSBlbnZpcm9ubWVudCBhbmQgZ3Vlc3MgcGF0aHMgYmFzZWQgb24gaXQKKyAgICAgICAgICAgICAgICAjIC0gZ2V0IE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBmcm9tIGVudmlyb25tZW50IChmb3Igc2RrKQorICAgICAgICAgICAgICAgIHRtcGRpciA9IG9zLmVudmlyb24uZ2V0KCdPRV9UTVBESVInLCBOb25lKQorICAgICAgICAgICAgICAgIG9lY29yZV9uYXRpdmVfc3lzcm9vdCA9IG9zLmVudmlyb24uZ2V0KCdPRUNPUkVfTkFUSVZFX1NZU1JPT1QnLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHRtcGRpcjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1NldHRpbmcgU1RBR0lOR19ESVJfTkFUSVZFIGFuZCBTVEFHSU5HX0JJTkRJUl9OQVRJVkUgcmVsYXRpdmUgdG8gT0VfVE1QRElSICglcyknICUgdG1wZGlyKQorICAgICAgICAgICAgICAgICAgICBob3N0b3MsIF8sIF8sIF8sIG1hY2hpbmUgPSBvcy51bmFtZSgpCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkc3lzID0gJyVzLSVzJyAlIChtYWNoaW5lLCBob3N0b3MubG93ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2luZ19kaXJfbmF0aXZlID0gJyVzL3N5c3Jvb3RzLyVzJyAlICh0bXBkaXIsIGJ1aWxkc3lzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNldCgnU1RBR0lOR19ESVJfTkFUSVZFJywgc3RhZ2luZ19kaXJfbmF0aXZlKQorICAgICAgICAgICAgICAgIGVsaWYgb2Vjb3JlX25hdGl2ZV9zeXNyb290OgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0dGluZyBTVEFHSU5HX0RJUl9OQVRJVkUgdG8gT0VDT1JFX05BVElWRV9TWVNST09UICglcyknICUgb2Vjb3JlX25hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNldCgnU1RBR0lOR19ESVJfTkFUSVZFJywgb2Vjb3JlX25hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZ2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnKToKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IFNUQUdJTkdfQklORElSX05BVElWRSBpcyBhdCB1c3IvYmluCisgICAgICAgICAgICAgICAgICAgIHN0YWdpbmdfYmluZGlyX25hdGl2ZSA9ICclcy91c3IvYmluJyAlIHNlbGYuZ2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0dGluZyBTVEFHSU5HX0JJTkRJUl9OQVRJVkUgdG8gJXMnICUgc3RhZ2luZ19iaW5kaXJfbmF0aXZlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNldCgnU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgJyVzL3Vzci9iaW4nICUgc2VsZi5nZXQoJ1NUQUdJTkdfRElSX05BVElWRScpKQorCisgICAgZGVmIHByaW50X2NvbmZpZyhzZWxmKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0NvbnRpbnVpbmcgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4nKQorICAgICAgICBpZiBub3Qgc2VsZi5mc3R5cGUgaW4gc2VsZi52bXR5cGVzOgorICAgICAgICAgICAgcHJpbnQoJ0tFUk5FTDogWyVzXScgJSBzZWxmLmtlcm5lbCkKKyAgICAgICAgICAgIGlmIHNlbGYuZHRiOgorICAgICAgICAgICAgICAgIHByaW50KCdEVEI6IFslc10nICUgc2VsZi5kdGIpCisgICAgICAgIHByaW50KCdNQUNISU5FOiBbJXNdJyAlIHNlbGYuZ2V0KCdNQUNISU5FJykpCisgICAgICAgIHByaW50KCdGU1RZUEU6IFslc10nICUgc2VsZi5mc3R5cGUpCisgICAgICAgIGlmIHNlbGYuZnN0eXBlICA9PSAnbmZzJzoKKyAgICAgICAgICAgIHByaW50KCdORlNfRElSOiBbJXNdJyAlIHNlbGYubmZzX2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCdST09URlM6IFslc10nICUgc2VsZi5yb290ZnMpCisgICAgICAgIHByaW50KCdDT05GRklMRTogWyVzXScgJSBzZWxmLnFlbXVib290KQorICAgICAgICBwcmludCgnJykKKworICAgIGRlZiBzZXR1cF9uZnMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLm5mc19zZXJ2ZXI6CisgICAgICAgICAgICBpZiBzZWxmLnNsaXJwX2VuYWJsZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5uZnNfc2VydmVyID0gJzEwLjAuMi4yJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm5mc19zZXJ2ZXIgPSAnMTkyLjE2OC43LjEnCisKKyAgICAgICAgbmZzX2luc3RhbmNlID0gaW50KHNlbGYubmZzX2luc3RhbmNlKQorCisgICAgICAgIG1vdW50ZF9ycGNwb3J0ID0gMjExMTEgKyBuZnNfaW5zdGFuY2UKKyAgICAgICAgbmZzZF9ycGNwb3J0ID0gMTExMTEgKyBuZnNfaW5zdGFuY2UKKyAgICAgICAgbmZzZF9wb3J0ID0gMzA0OSArIDIgKiBuZnNfaW5zdGFuY2UKKyAgICAgICAgbW91bnRkX3BvcnQgPSAzMDQ4ICsgMiAqIG5mc19pbnN0YW5jZQorICAgICAgICB1bmZzX29wdHM9Im5mc3ZlcnM9Myxwb3J0PSVzLG1vdW50cHJvZz0lcyxuZnNwcm9nPSVzLHVkcCxtb3VudHBvcnQ9JXMiICUgKG5mc2RfcG9ydCwgbW91bnRkX3JwY3BvcnQsIG5mc2RfcnBjcG9ydCwgbW91bnRkX3BvcnQpCisgICAgICAgIHNlbGYudW5mc19vcHRzID0gdW5mc19vcHRzCisKKyAgICAgICAgcCA9ICclcy8ucnVucWVtdS1zZGsvcHNldWRvJyAlIG9zLmdldGVudignSE9NRScpCisgICAgICAgIG9zLnB1dGVudignUFNFVURPX0xPQ0FMU1RBVEVESVInLCBwKQorCisgICAgICAgICMgRXh0cmFjdCAudGFyLmJ6MiBvciAudGFyLmJ6IGlmIG5vIHNlbGYubmZzX2RpcgorICAgICAgICBpZiBub3Qgc2VsZi5uZnNfZGlyOgorICAgICAgICAgICAgc3JjX3ByZWZpeCA9ICclcy8lcycgJSAoc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKSwgc2VsZi5nZXQoJ0lNQUdFX0xJTktfTkFNRScpKQorICAgICAgICAgICAgZGVzdCA9ICIlcy1uZnNyb290IiAlIHNyY19wcmVmaXgKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCclcy5wc2V1ZG9fc3RhdGUnICUgZGVzdCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VzZSAlcyBhcyBORlNfRElSJyAlIGRlc3QpCisgICAgICAgICAgICAgICAgc2VsZi5uZnNfZGlyID0gZGVzdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcmMgPSAiIgorICAgICAgICAgICAgICAgIHNyYzEgPSAnJXMudGFyLmJ6MicgJSBzcmNfcHJlZml4CisgICAgICAgICAgICAgICAgc3JjMiA9ICclcy50YXIuZ3onICUgc3JjX3ByZWZpeAorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyYzEpOgorICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMxCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzcmMyKToKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gc3JjMgorICAgICAgICAgICAgICAgIGlmIG5vdCBzcmM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm8gTkZTX0RJUiBpcyBzZXQsIGFuZCBjYW4ndCBmaW5kICVzIG9yICVzIHRvIGV4dHJhY3QiICUgKHNyYzEsIHNyYzIpKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdORlNfRElSIG5vdCBmb3VuZCwgZXh0cmFjdGluZyAlcyB0byAlcycgJSAoc3JjLCBkZXN0KSkKKyAgICAgICAgICAgICAgICBjbWQgPSAncnVucWVtdS1leHRyYWN0LXNkayAlcyAlcycgJSAoc3JjLCBkZXN0KQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKKyAgICAgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKSAhPSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBydW4gJXMnICUgY21kKQorICAgICAgICAgICAgICAgIHNlbGYuY2xlYW5fbmZzX2RpciA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLm5mc19kaXIgPSBkZXN0CisKKyAgICAgICAgIyBTdGFydCB0aGUgdXNlcnNwYWNlIE5GUyBzZXJ2ZXIKKyAgICAgICAgY21kID0gJ3J1bnFlbXUtZXhwb3J0LXJvb3RmcyByZXN0YXJ0ICVzJyAlIHNlbGYubmZzX2RpcgorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcy4uLicgJSBjbWQpCisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBydW4gJXMnICUgY21kKQorCisgICAgICAgIHNlbGYubmZzX3J1bm5pbmcgPSBUcnVlCisKKworICAgIGRlZiBzZXR1cF9zbGlycChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mc3R5cGUgPT0gJ25mcyc6CisgICAgICAgICAgICBzZWxmLnNldHVwX25mcygpCisgICAgICAgIHNlbGYua2VybmVsX2NtZGxpbmVfc2NyaXB0ICs9ICcgaXA9ZGhjcCcKKyAgICAgICAgc2VsZi5zZXQoJ05FVFdPUktfQ01EJywgc2VsZi5nZXQoJ1FCX1NMSVJQX09QVCcpKQorCisgICAgZGVmIHNldHVwX3RhcChzZWxmKToKKyAgICAgICAgIiIiU2V0dXAgdGFwIiIiCisKKyAgICAgICAgIyBUaGlzIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHJ1bnFlbXUtZ2VuLXRhcGRldnMgY3JlYXRlcyBhIGJhbmsgb2YgdGFwCisgICAgICAgICMgZGV2aWNlcywgaW5kaWNhdGluZyB0aGF0IHRoZSB1c2VyIHNob3VsZCBub3QgYnJpbmcgdXAgbmV3IG9uZXMgdXNpbmcKKyAgICAgICAgIyBzdWRvLgorICAgICAgICBub3N1ZG9fZmxhZyA9ICcvZXRjL3J1bnFlbXUtbm9zdWRvJworICAgICAgICBzZWxmLnFlbXVpZnVwID0gc2h1dGlsLndoaWNoKCdydW5xZW11LWlmdXAnKQorICAgICAgICBzZWxmLnFlbXVpZmRvd24gPSBzaHV0aWwud2hpY2goJ3J1bnFlbXUtaWZkb3duJykKKyAgICAgICAgaXAgPSBzaHV0aWwud2hpY2goJ2lwJykKKyAgICAgICAgbG9ja2RpciA9ICIvdG1wL3FlbXUtdGFwLWxvY2tzIgorCisgICAgICAgIGlmIG5vdCAoc2VsZi5xZW11aWZ1cCBhbmQgc2VsZi5xZW11aWZkb3duIGFuZCBpcCk6CisgICAgICAgICAgICByYWlzZSBPRVBhdGhFcnJvcigicnVucWVtdS1pZnVwLCBydW5xZW11LWlmZG93biBvciBpcCBub3QgZm91bmQiKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2NrZGlyKToKKyAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgYSByYWNlIGlzc3VlIHdoZW4gbXVsdGkgcnVucWVtdSBwcm9jZXNzZXNzIGFyZQorICAgICAgICAgICAgIyBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIobG9ja2RpcikKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNtZCA9ICclcyBsaW5rJyAlIGlwCisgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKKyAgICAgICAgaXBfbGluayA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAjIE1hdGNoZXMgbGluZSBsaWtlOiA2OiB0YXAwOiA8Zm9vPgorICAgICAgICBwb3NzaWJsZXMgPSByZS5maW5kYWxsKCdeWzEtOV0rOiArKHRhcFswLTldKyk6IDwuKicsIGlwX2xpbmssIHJlLk0pCisgICAgICAgIHRhcCA9ICIiCisgICAgICAgIGZvciBwIGluIHBvc3NpYmxlczoKKyAgICAgICAgICAgIGxvY2tmaWxlID0gb3MucGF0aC5qb2luKGxvY2tkaXIsIHApCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMuc2tpcCcgJSBsb2NrZmlsZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0ZvdW5kICVzLnNraXAsIHNraXBwaW5nICVzJyAlIChsb2NrZmlsZSwgcCkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYubG9jayA9IGxvY2tmaWxlICsgJy5sb2NrJworICAgICAgICAgICAgaWYgc2VsZi5hY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgICAgICB0YXAgPSBwCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlVzaW5nIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSAlcyIgJSB0YXApCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIklmIHRoaXMgaXMgbm90IGludGVuZGVkLCB0b3VjaCAlcy5za2lwIHRvIG1ha2UgcnVucWVtdSBza2lwICVzLiIgJShsb2NrZmlsZSwgdGFwKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCB0YXA6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhub3N1ZG9fZmxhZyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvcjogVGhlcmUgYXJlIG5vIGF2YWlsYWJsZSB0YXAgZGV2aWNlcyB0byB1c2UgZm9yIG5ldHdvcmtpbmcsIikKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImFuZCBJIHNlZSAlcyBleGlzdHMsIHNvIEkgYW0gbm90IGdvaW5nIHRvIHRyeSBjcmVhdGluZyIgJSBub3N1ZG9fZmxhZykKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImEgbmV3IG9uZSB3aXRoIHN1ZG8uIikKKworICAgICAgICAgICAgZ2lkID0gb3MuZ2V0Z2lkKCkKKyAgICAgICAgICAgIHVpZCA9IG9zLmdldHVpZCgpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2V0dGluZyB1cCB0YXAgaW50ZXJmYWNlIHVuZGVyIHN1ZG8iKQorICAgICAgICAgICAgY21kID0gJ3N1ZG8gJXMgJXMgJXMgJXMnICUgKHNlbGYucWVtdWlmdXAsIHVpZCwgZ2lkLCBzZWxmLmdldCgnU1RBR0lOR19ESVJfTkFUSVZFJykpCisgICAgICAgICAgICB0YXAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykucnN0cmlwKCdcbicpCisgICAgICAgICAgICBsb2NrZmlsZSA9IG9zLnBhdGguam9pbihsb2NrZGlyLCB0YXApCisgICAgICAgICAgICBzZWxmLmxvY2sgPSBsb2NrZmlsZSArICcubG9jaycKKyAgICAgICAgICAgIHNlbGYuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgICAgIHNlbGYuY2xlYW50YXAgPSBUcnVlCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnQ3JlYXRlZCB0YXA6ICVzJyAlIHRhcCkKKworICAgICAgICBpZiBub3QgdGFwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gc2V0dXAgdGFwIGRldmljZS4gUnVuIHJ1bnFlbXUtZ2VuLXRhcGRldnMgdG8gbWFudWFsbHkgY3JlYXRlLiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBzZWxmLnRhcCA9IHRhcAorICAgICAgICBuMCA9IHRhcFszOl0KKyAgICAgICAgbjEgPSBpbnQobjApICogMiArIDEKKyAgICAgICAgbjIgPSBuMSArIDEKKyAgICAgICAgc2VsZi5uZnNfaW5zdGFuY2UgPSBuMAorICAgICAgICBpZiBzZWxmLmZzdHlwZSA9PSAnbmZzJzoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfbmZzKCkKKyAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZV9zY3JpcHQgKz0gIiBpcD0xOTIuMTY4LjcuJXM6OjE5Mi4xNjguNy4lczoyNTUuMjU1LjI1NS4wIiAlIChuMiwgbjEpCisgICAgICAgIG1hYyA9ICI1Mjo1NDowMDoxMjozNDolMDJ4IiAlIG4yCisgICAgICAgIHFiX3RhcF9vcHQgPSBzZWxmLmdldCgnUUJfVEFQX09QVCcpCisgICAgICAgIGlmIHFiX3RhcF9vcHQ6CisgICAgICAgICAgICBxZW11X3RhcF9vcHQgPSBxYl90YXBfb3B0LnJlcGxhY2UoJ0BUQVBAJywgdGFwKS5yZXBsYWNlKCdATUFDQCcsIG1hYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHFlbXVfdGFwX29wdCA9ICItZGV2aWNlIHZpcnRpby1uZXQtcGNpLG5ldGRldj1uZXQwLG1hYz0lcyAtbmV0ZGV2IHRhcCxpZD1uZXQwLGlmbmFtZT0lcyxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyIgJSAobWFjLCBzZWxmLnRhcCkKKworICAgICAgICBpZiBzZWxmLnZob3N0X2VuYWJsZWQ6CisgICAgICAgICAgICBxZW11X3RhcF9vcHQgKz0gJyx2aG9zdD1vbicKKworICAgICAgICBzZWxmLnNldCgnTkVUV09SS19DTUQnLCBxZW11X3RhcF9vcHQpCisKKyAgICBkZWYgc2V0dXBfbmV0d29yayhzZWxmKToKKyAgICAgICAgY21kID0gInN0dHkgLWciCisgICAgICAgIHNlbGYuc2F2ZWRfc3R0eSA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICBpZiBzZWxmLnNsaXJwX2VuYWJsZWQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3NsaXJwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdGFwKCkKKworICAgICAgICByb290ZnNfZm9ybWF0ID0gc2VsZi5mc3R5cGUgaWYgc2VsZi5mc3R5cGUgaW4gKCd2bWRrJywgJ3Fjb3cyJywgJ3ZkaScpIGVsc2UgJ3JhdycKKworICAgICAgICBxYl9yb290ZnNfb3B0ID0gc2VsZi5nZXQoJ1FCX1JPT1RGU19PUFQnKQorICAgICAgICBpZiBxYl9yb290ZnNfb3B0OgorICAgICAgICAgICAgc2VsZi5yb290ZnNfb3B0aW9ucyA9IHFiX3Jvb3Rmc19vcHQucmVwbGFjZSgnQFJPT1RGU0AnLCBzZWxmLnJvb3RmcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucm9vdGZzX29wdGlvbnMgPSAnLWRyaXZlIGZpbGU9JXMsaWY9dmlydGlvLGZvcm1hdD0lcycgJSAoc2VsZi5yb290ZnMsIHJvb3Rmc19mb3JtYXQpCisKKyAgICAgICAgaWYgc2VsZi5mc3R5cGUgaW4gKCdjcGlvLmd6JywgJ2NwaW8nKToKKyAgICAgICAgICAgIHNlbGYua2VybmVsX2NtZGxpbmUgPSAncm9vdD0vZGV2L3JhbTAgcncgZGVidWdzaGVsbCcKKyAgICAgICAgICAgIHNlbGYucm9vdGZzX29wdGlvbnMgPSAnLWluaXRyZCAlcycgJSBzZWxmLnJvb3RmcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUgaW4gc2VsZi52bXR5cGVzOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZnN0eXBlID09ICdpc28nOgorICAgICAgICAgICAgICAgICAgICB2bV9kcml2ZSA9ICctY2Ryb20gJXMnICUgc2VsZi5yb290ZnMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbWQxID0gImdyZXAgLXEgJ3Jvb3Q9L2Rldi9zZCcgJXMiICUgc2VsZi5yb290ZnMKKyAgICAgICAgICAgICAgICAgICAgY21kMiA9ICJncmVwIC1xICdyb290PS9kZXYvaGQnICVzIiAlIHNlbGYucm9vdGZzCisgICAgICAgICAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChjbWQxLCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VzaW5nIHNjc2kgZHJpdmUnKQorICAgICAgICAgICAgICAgICAgICAgICAgdm1fZHJpdmUgPSAnLWRyaXZlIGlmPW5vbmUsaWQ9aGQsZmlsZT0lcyxmb3JtYXQ9JXMgLWRldmljZSB2aXJ0aW8tc2NzaS1wY2ksaWQ9c2NzaSAtZGV2aWNlIHNjc2ktaGQsZHJpdmU9aGQnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYucm9vdGZzLCByb290ZnNfZm9ybWF0KQorICAgICAgICAgICAgICAgICAgICBlbGlmIHN1YnByb2Nlc3MuY2FsbChjbWQyLCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VzaW5nIHNjc2kgZHJpdmUnKQorICAgICAgICAgICAgICAgICAgICAgICAgdm1fZHJpdmUgPSAiJXMsZm9ybWF0PSVzIiAlIChzZWxmLnJvb3Rmcywgcm9vdGZzX2Zvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDYW4ndCBkZXRlY3QgZHJpdmUgdHlwZSAlcyIgJSBzZWxmLnJvb3RmcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdUcmluZyB0byB1c2UgdmlydGlvIGJsb2NrIGRyaXZlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtX2RyaXZlID0gJy1kcml2ZSBpZj12aXJ0aW8sZmlsZT0lcyxmb3JtYXQ9JXMnICUgKHNlbGYucm9vdGZzLCByb290ZnNfZm9ybWF0KQorICAgICAgICAgICAgICAgIHNlbGYucm9vdGZzX29wdGlvbnMgPSAnJXMgLW5vLXJlYm9vdCcgJSB2bV9kcml2ZQorICAgICAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZSA9ICdyb290PSVzIHJ3IGhpZ2hyZXM9b2ZmJyAlIChzZWxmLmdldCgnUUJfS0VSTkVMX1JPT1QnKSkKKworICAgICAgICBpZiBzZWxmLmZzdHlwZSA9PSAnbmZzJzoKKyAgICAgICAgICAgIHNlbGYucm9vdGZzX29wdGlvbnMgPSAnJworICAgICAgICAgICAga19yb290ID0gJy9kZXYvbmZzIG5mc3Jvb3Q9JXM6JXMsJXMnICUgKHNlbGYubmZzX3NlcnZlciwgc2VsZi5uZnNfZGlyLCBzZWxmLnVuZnNfb3B0cykKKyAgICAgICAgICAgIHNlbGYua2VybmVsX2NtZGxpbmUgPSAncm9vdD0lcyBydyBoaWdocmVzPW9mZicgJSBrX3Jvb3QKKworICAgICAgICBzZWxmLnNldCgnUk9PVEZTX09QVElPTlMnLCBzZWxmLnJvb3Rmc19vcHRpb25zKQorCisgICAgZGVmIGd1ZXNzX3FiX3N5c3RlbShzZWxmKToKKyAgICAgICAgIiIiYXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHFlbXUtc3lzdGVtIGJpbmFyeSIiIgorICAgICAgICBtYWNoID0gc2VsZi5nZXQoJ01BQ0hJTkUnKQorICAgICAgICBpZiBub3QgbWFjaDoKKyAgICAgICAgICAgIHNlYXJjaCA9ICcuKihxZW11eDg2LTY0fHFlbXV4ODZ8cWVtdWFybTY0fHFlbXVhcm18cWVtdW1pcHM2NHxxZW11bWlwczY0ZWx8cWVtdW1pcHNlbHxxZW11bWlwc3xxZW11cHBjKS4qJworICAgICAgICAgICAgaWYgc2VsZi5yb290ZnM6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChzZWFyY2gsIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBtYWNoID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5rZXJuZWw6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChzZWFyY2gsIHNlbGYua2VybmVsKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBtYWNoID0gbWF0Y2guZ3JvdXAoMSkKKworICAgICAgICBpZiBub3QgbWFjaDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbWFjaCA9PSAncWVtdWFybSc6CisgICAgICAgICAgICBxYnN5cyA9ICdhcm0nCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdWFybTY0JzoKKyAgICAgICAgICAgIHFic3lzID0gJ2FhcmNoNjQnCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdXg4Nic6CisgICAgICAgICAgICBxYnN5cyA9ICdpMzg2JworICAgICAgICBlbGlmIG1hY2ggPT0gJ3FlbXV4ODYtNjQnOgorICAgICAgICAgICAgcWJzeXMgPSAneDg2XzY0JworICAgICAgICBlbGlmIG1hY2ggPT0gJ3FlbXVwcGMnOgorICAgICAgICAgICAgcWJzeXMgPSAncHBjJworICAgICAgICBlbGlmIG1hY2ggPT0gJ3FlbXVtaXBzJzoKKyAgICAgICAgICAgIHFic3lzID0gJ21pcHMnCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdW1pcHM2NCc6CisgICAgICAgICAgICBxYnN5cyA9ICdtaXBzNjQnCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdW1pcHNlbCc6CisgICAgICAgICAgICBxYnN5cyA9ICdtaXBzZWwnCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdW1pcHM2NGVsJzoKKyAgICAgICAgICAgIHFic3lzID0gJ21pcHM2NGVsJworCisgICAgICAgIHJldHVybiAncWVtdS1zeXN0ZW0tJXMnICUgcWJzeXMKKworICAgIGRlZiBzZXR1cF9maW5hbChzZWxmKToKKyAgICAgICAgcWVtdV9zeXN0ZW0gPSBzZWxmLmdldCgnUUJfU1lTVEVNX05BTUUnKQorICAgICAgICBpZiBub3QgcWVtdV9zeXN0ZW06CisgICAgICAgICAgICBxZW11X3N5c3RlbSA9IHNlbGYuZ3Vlc3NfcWJfc3lzdGVtKCkKKyAgICAgICAgaWYgbm90IHFlbXVfc3lzdGVtOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gYm9vdCwgUUJfU1lTVEVNX05BTUUgaXMgTlVMTCEiKQorCisgICAgICAgIHFlbXVfYmluID0gJyVzLyVzJyAlIChzZWxmLmdldCgnU1RBR0lOR19CSU5ESVJfTkFUSVZFJyksIHFlbXVfc3lzdGVtKQorICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHFlbXVfYmluLCBvcy5YX09LKToKKyAgICAgICAgICAgIHJhaXNlIE9FUGF0aEVycm9yKCJObyBRRU1VIGJpbmFyeSAnJXMnIGNvdWxkIGJlIGZvdW5kIiAlIHFlbXVfYmluKQorCisgICAgICAgIGNoZWNrX2xpYmdsKHFlbXVfYmluKQorCisgICAgICAgIHNlbGYucWVtdV9vcHQgPSAiJXMgJXMgJXMgJXMgJXMiICUgKHFlbXVfYmluLCBzZWxmLmdldCgnTkVUV09SS19DTUQnKSwgc2VsZi5xZW11X29wdF9zY3JpcHQsIHNlbGYuZ2V0KCdST09URlNfT1BUSU9OUycpLCBzZWxmLmdldCgnUUJfT1BUX0FQUEVORCcpKQorCisgICAgICAgIGlmIHNlbGYuc25hcHNob3Q6CisgICAgICAgICAgICBzZWxmLnFlbXVfb3B0ICs9ICIgLXNuYXBzaG90IgorCisgICAgICAgIGlmIHNlbGYuc2VyaWFsc3RkaW86CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiSW50ZXJydXB0IGNoYXJhY3RlciBpcyAnXl0nIikKKyAgICAgICAgICAgIGNtZCA9ICJzdHR5IGludHIgXl0iCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgICAgICAgICBmaXJzdF9zZXJpYWwgPSAiIgorICAgICAgICAgICAgaWYgbm90IHJlLnNlYXJjaCgiLW5vZ3JhcGhpYyIsIHNlbGYucWVtdV9vcHQpOgorICAgICAgICAgICAgICAgIGZpcnN0X3NlcmlhbCA9ICItc2VyaWFsIG1vbjp2YyIKKyAgICAgICAgICAgICMgV2UgYWx3YXlzIHdhbnQgYSB0dHlTMS4gU2luY2UgcWVtdSBieSBkZWZhdWx0IGFkZHMgYSBzZXJpYWwKKyAgICAgICAgICAgICMgcG9ydCB3aGVuIG5vZGVmYXVsdHMgaXMgbm90IHNwZWNpZmllZCwgaXQgc2VlbXMgdGhhdCBhbGwgdGhhdAorICAgICAgICAgICAgIyB3b3VsZCBiZSBuZWVkZWQgaXMgdG8gbWFrZSBzdXJlIGEgIi1zZXJpYWwiIGlzIHRoZXJlLiBIb3dldmVyLAorICAgICAgICAgICAgIyBpdCBhcHBlYXJzIHRoYXQgd2hlbiAiLXNlcmlhbCIgaXMgc3BlY2lmaWVkLCBpdCBpZ25vcmVzIHRoZQorICAgICAgICAgICAgIyBkZWZhdWx0IHNlcmlhbCBwb3J0IHRoYXQgaXMgbm9ybWFsbHkgYWRkZWQuICBTbyBoZXJlIHdlIG1ha2UKKyAgICAgICAgICAgICMgc3VyZSB0byBhZGQgdHdvIC1zZXJpYWwgaWYgdGhlcmUgYXJlIG5vbmUuIEFuZCBvbmx5IG9uZSBpZgorICAgICAgICAgICAgIyB0aGVyZSBpcyBvbmUgLXNlcmlhbCBhbHJlYWR5LgorICAgICAgICAgICAgc2VyaWFsX251bSA9IGxlbihyZS5maW5kYWxsKCItc2VyaWFsIiwgc2VsZi5xZW11X29wdCkpCisgICAgICAgICAgICBpZiBzZXJpYWxfbnVtID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5xZW11X29wdCArPSAiICVzICVzIiAlIChmaXJzdF9zZXJpYWwsIHNlbGYuZ2V0KCJRQl9TRVJJQUxfT1BUIikpCisgICAgICAgICAgICBlbGlmIHNlcmlhbF9udW0gPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLnFlbXVfb3B0ICs9ICIgJXMiICUgc2VsZi5nZXQoIlFCX1NFUklBTF9PUFQiKQorCisgICAgZGVmIHN0YXJ0X3FlbXUoc2VsZik6CisgICAgICAgIGlmIHNlbGYua2VybmVsOgorICAgICAgICAgICAga2VybmVsX29wdHMgPSAiLWtlcm5lbCAlcyAtYXBwZW5kICclcyAlcyAlcyciICUgKHNlbGYua2VybmVsLCBzZWxmLmtlcm5lbF9jbWRsaW5lLCBzZWxmLmtlcm5lbF9jbWRsaW5lX3NjcmlwdCwgc2VsZi5nZXQoJ1FCX0tFUk5FTF9DTURMSU5FX0FQUEVORCcpKQorICAgICAgICAgICAgaWYgc2VsZi5kdGI6CisgICAgICAgICAgICAgICAga2VybmVsX29wdHMgKz0gIiAtZHRiICVzIiAlIHNlbGYuZHRiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXJuZWxfb3B0cyA9ICIiCisgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoc2VsZi5xZW11X29wdCwga2VybmVsX29wdHMpCisgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzJyAlIGNtZCkKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHJ1biAlcycgJSBjbWQpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbGVhbnRhcDoKKyAgICAgICAgICAgIGNtZCA9ICdzdWRvICVzICVzICVzJyAlIChzZWxmLnFlbXVpZmRvd24sIHNlbGYudGFwLCBzZWxmLmdldCgnU1RBR0lOR19ESVJfTkFUSVZFJykpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcycgJSBjbWQpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiBzZWxmLmxvY2tfZGVzY3JpcHRvcjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZWxlYXNpbmcgbG9ja2ZpbGUgZm9yIHRhcCBkZXZpY2UgJyVzJyIgJSBzZWxmLnRhcCkKKyAgICAgICAgICAgIHNlbGYucmVsZWFzZV9sb2NrKCkKKworICAgICAgICBpZiBzZWxmLm5mc19ydW5uaW5nOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNodXR0aW5nIGRvd24gdGhlIHVzZXJzcGFjZSBORlMgc2VydmVyLi4uIikKKyAgICAgICAgICAgIGNtZCA9ICJydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCAlcyIgJSBzZWxmLm5mc19kaXIKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzJyAlIGNtZCkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgaWYgc2VsZi5zYXZlZF9zdHR5OgorICAgICAgICAgICAgY21kID0gInN0dHkgJXMiICUgc2VsZi5zYXZlZF9zdHR5CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgICAgIGlmIHNlbGYuY2xlYW5fbmZzX2RpcjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSZW1vdmluZyAlcycgJSBzZWxmLm5mc19kaXIpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYubmZzX2RpcikKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoJyVzLnBzZXVkb19zdGF0ZScgJSBzZWxmLm5mc19kaXIpCisKKyAgICBkZWYgbG9hZF9iaXRiYWtlX2VudihzZWxmLCBtYWNoPU5vbmUpOgorICAgICAgICBpZiBzZWxmLmJpdGJha2VfZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJpdGJha2UgPSBzaHV0aWwud2hpY2goJ2JpdGJha2UnKQorICAgICAgICBpZiBub3QgYml0YmFrZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBtYWNoOgorICAgICAgICAgICAgbWFjaCA9IHNlbGYuZ2V0KCdNQUNISU5FJykKKworICAgICAgICBpZiBtYWNoOgorICAgICAgICAgICAgY21kID0gJ01BQ0hJTkU9JXMgYml0YmFrZSAtZScgJSBtYWNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAnYml0YmFrZSAtZScKKworICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcy4uLicgJSBjbWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYml0YmFrZV9lID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYml0YmFrZV9lID0gJycKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDb3VsZG4ndCBydW4gJ2JpdGJha2UgLWUnIHRvIGdhdGhlciBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbjpcbiVzIiAlIGVyci5vdXRwdXQuZGVjb2RlKCd1dGYtOCcpKQorCitkZWYgbWFpbigpOgorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMSBvciAiaGVscCIgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHByaW50X3VzYWdlKCkKKyAgICAgICAgcmV0dXJuIDAKKyAgICBjb25maWcgPSBCYXNlQ29uZmlnKCkKKyAgICB0cnk6CisgICAgICAgIGNvbmZpZy5jaGVja19hcmdzKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVzYzoKKyAgICAgICAgbG9nZ2VyLmVycm9yKGVzYykKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJUcnkgJ3J1bnFlbXUgaGVscCcgb24gaG93IHRvIHVzZSBpdCIpCisgICAgICAgIHJldHVybiAxCisgICAgY29uZmlnLnJlYWRfcWVtdWJvb3QoKQorICAgIGNvbmZpZy5jaGVja19hbmRfc2V0KCkKKyAgICBjb25maWcucHJpbnRfY29uZmlnKCkKKyAgICB0cnk6CisgICAgICAgIGNvbmZpZy5zZXR1cF9uZXR3b3JrKCkKKyAgICAgICAgY29uZmlnLnNldHVwX2ZpbmFsKCkKKyAgICAgICAgY29uZmlnLnN0YXJ0X3FlbXUoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGNvbmZpZy5jbGVhbnVwKCkKKyAgICByZXR1cm4gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IE9FUGF0aEVycm9yIGFzIGVycjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBsb2dnZXIuZXJyb3IoZXJyLm1lc3NhZ2UpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlc2M6CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cwppbmRleCA2MjRkZWFjLi5iZmI2MGY0IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMKQEAgLTY5LDMyICs2OSwzOCBAQAogICAgICAgIGV4aXQgMQogZmkKIAotIyBFbnN1cmUgd2Ugc3RhcnQgd2l0aCBhIGNsZWFuIHNsYXRlCi1mb3IgdGFwIGluIGAkSUZDT05GSUcgbGluayB8IGdyZXAgdGFwIHwgYXdrICd7IHByaW50IFwkMiB9JyB8IHNlZCBzLzovL2A7IGRvCi0JZWNobyAiTm90ZTogRGVzdHJveWluZyBwcmUtZXhpc3RpbmcgdGFwIGludGVyZmFjZSAkdGFwLi4uIgotCSRUVU5DVEwgLWQgJHRhcAotZG9uZQotCi1lY2hvICJDcmVhdGluZyAkQ09VTlQgdGFwIGRldmljZXMgZm9yIFVJRDogJFRVSUQgR0lEOiAkR0lELi4uIgotZm9yICgoaW5kZXg9MDsgaW5kZXggPCAkQ09VTlQ7IGluZGV4KyspKTsgZG8KLQllY2hvICJDcmVhdGluZyB0YXAkaW5kZXgiCi0JaWZ1cD1gJFJVTlFFTVVfSUZVUCAkVFVJRCAkR0lEICRTWVNST09UIDI+JjFgCi0JaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0JCWVjaG8gIkVycm9yIHJ1bm5pbmcgdHVuY3RsOiAkaWZ1cCIKLQkJZXhpdCAxCi0JZmkKLWRvbmUKK2lmIFsgJENPVU5UIC1nZSAwIF07IHRoZW4KKwkjIEVuc3VyZSB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUKKwlmb3IgdGFwIGluIGAkSUZDT05GSUcgbGluayB8IGdyZXAgdGFwIHwgYXdrICd7IHByaW50IFwkMiB9JyB8IHNlZCBzLzovL2A7IGRvCisJCWVjaG8gIk5vdGU6IERlc3Ryb3lpbmcgcHJlLWV4aXN0aW5nIHRhcCBpbnRlcmZhY2UgJHRhcC4uLiIKKwkJJFRVTkNUTCAtZCAkdGFwCisJZG9uZQorCXJtIC1mIC9ldGMvcnVucWVtdS1ub3N1ZG8KK2Vsc2UKKwllY2hvICJFcnJvcjogSW5jb3JyZWN0IGNvdW50OiAkQ09VTlQiCisJZXhpdCAxCitmaQogCiBpZiBbICRDT1VOVCAtZ3QgMCBdOyB0aGVuCisJZWNobyAiQ3JlYXRpbmcgJENPVU5UIHRhcCBkZXZpY2VzIGZvciBVSUQ6ICRUVUlEIEdJRDogJEdJRC4uLiIKKwlmb3IgKChpbmRleD0wOyBpbmRleCA8ICRDT1VOVDsgaW5kZXgrKykpOyBkbworCQllY2hvICJDcmVhdGluZyB0YXAkaW5kZXgiCisJCWlmdXA9YCRSVU5RRU1VX0lGVVAgJFRVSUQgJEdJRCAkU1lTUk9PVCAyPiYxYAorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWVjaG8gIkVycm9yIHJ1bm5pbmcgdHVuY3RsOiAkaWZ1cCIKKwkJCWV4aXQgMQorCQlmaQorCWRvbmUKKwogCWVjaG8gIk5vdGU6IEZvciBzeXN0ZW1zIHJ1bm5pbmcgTmV0d29ya01hbmFnZXIsIGl0J3MgcmVjb21tZW5kZWQiCiAJZWNobyAiTm90ZTogdGhhdCB0aGUgdGFwIGRldmljZXMgYmUgc2V0IGFzIHVubWFuYWdlZCBpbiB0aGUiCiAJZWNobyAiTm90ZTogTmV0d29ya01hbmFnZXIuY29uZiBmaWxlLiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byIKIAllY2hvICJOb3RlOiAvZXRjL05ldHdvcmtNYW5hZ2VyL05ldHdvcmtNYW5hZ2VyLmNvbmYiCiAJZWNobyAiW2tleWZpbGVdIgogCWVjaG8gInVubWFuYWdlZC1kZXZpY2VzPWludGVyZmFjZS1uYW1lOnRhcCoiCi1maQogCi0jIFRoZSBydW5xZW11IHNjcmlwdCB3aWxsIGNoZWNrIGZvciB0aGlzIGZpbGUsIGFuZCBpZiBpdCBleGlzdHMsCi0jIHdpbGwgdXNlIHRoZSBleGlzdGluZyBiYW5rIG9mIHRhcCBkZXZpY2VzIHdpdGhvdXQgY3JlYXRpbmcKLSMgYWRkaXRpb25hbCBvbmVzIHZpYSBzdWRvLgotdG91Y2ggL2V0Yy9ydW5xZW11LW5vc3VkbworCSMgVGhlIHJ1bnFlbXUgc2NyaXB0IHdpbGwgY2hlY2sgZm9yIHRoaXMgZmlsZSwgYW5kIGlmIGl0IGV4aXN0cywKKwkjIHdpbGwgdXNlIHRoZSBleGlzdGluZyBiYW5rIG9mIHRhcCBkZXZpY2VzIHdpdGhvdXQgY3JlYXRpbmcKKwkjIGFkZGl0aW9uYWwgb25lcyB2aWEgc3Vkby4KKwl0b3VjaCAvZXRjL3J1bnFlbXUtbm9zdWRvCitmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFjMWM3MDMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbAorKysgL2Rldi9udWxsCkBAIC0xLDcxNyArMCwwIEBACi0jIS9iaW4vYmFzaCAteAotCi0jIEhhbmRsZSBydW5uaW5nIE9FIGltYWdlcyB1bmRlciBxZW11Ci0jCi0jIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLSMgQ2FsbCBzZXR0aW5nOgotIyAgIFFFTVVfTUVNT1JZIChvcHRpb25hbCkgLSBzZXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgaW4gdGhlIGVtdWFsdGVkIHN5c3RlbS4KLSMgICBTRVJJQUxfTE9HRklMRSAob3B0aW9uYWwpIC0gbG9nIHRoZSBzZXJpYWwgcG9ydCBvdXRwdXQgdG8gYSBmaWxlCi0jCi0jIEltYWdlIG9wdGlvbnM6Ci0jICAgTUFDSElORSAtIHRoZSBtYWNoaW5lIHRvIHJ1bgotIyAgIEZTVFlQRSAtIHRoZSBpbWFnZSB0eXBlIHRvIHJ1bgotIyAgIEtFUk5FTCAtIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSB0byB1c2UKLSMgICBST09URlMgLSB0aGUgZGlzayBpbWFnZSBmaWxlIHRvIHVzZQotIwotCi1tZW1fc2l6ZT0tMQotCi0jR2V0IHJpZCBvZiA8PiBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBleHRyYSBxZW11IHJ1bm5pbmcgcGFyYW1zCi1TQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9YGVjaG8gJFNDUklQVF9RRU1VX0VYVFJBX09QVCB8IHNlZCAtZSAncy88Ly8nIC1lICdzLz4vLydgCi0jaWYgdXNlciBzZXQgcWVtdSBtZW1vcnksIGVnOiAtbSAyNTYgaW4gcWVtdSBleHRyYSBwYXJhbXMsIHdlIG5lZWQgdG8gZG8gc29tZSAKLSMgdmFsaWRhdGlvbiBjaGVjawotbWVtX3NldD1gZXhwciAiJFNDUklQVF9RRU1VX0VYVFJBX09QVCIgOiAnLipcKC1tW1s6c3BhY2U6XV0gKlswLTldKlwpJ2AKLWlmIFsgISAteiAiJG1lbV9zZXQiIF0gOyB0aGVuCi0jR2V0IG1lbW9yeSBzZXR0aW5nIHNpemUgZnJvbSB1c2VyIGlucHV0Ci0gIG1lbV9zaXplPWBlY2hvICRtZW1fc2V0IHwgc2VkICdzLy1tW1s6c3BhY2U6XV0gKi8vJ2AKLWZpCi0KLSMgVGhpcyBmaWxlIGlzIGNyZWF0ZWQgd2hlbiBydW5xZW11LWdlbi10YXBkZXZzIGNyZWF0ZXMgYSBiYW5rIG9mIHRhcAotIyBkZXZpY2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgc2hvdWxkIG5vdCBicmluZyB1cCBuZXcgb25lcyB1c2luZwotIyBzdWRvLgotTk9TVURPX0ZMQUc9Ii9ldGMvcnVucWVtdS1ub3N1ZG8iCi0KLVFFTVVJRlVQPWB3aGljaCBydW5xZW11LWlmdXAgMj4gL2Rldi9udWxsYAotUUVNVUlGRE9XTj1gd2hpY2ggcnVucWVtdS1pZmRvd24gMj4gL2Rldi9udWxsYAotaWYgWyAteiAiJFFFTVVJRlVQIiAtbyAhIC14ICIkUUVNVUlGVVAiIF07IHRoZW4KLSAgICAgICBlY2hvICJydW5xZW11LWlmdXAgY2Fubm90IGJlIGZvdW5kIG9yIGV4ZWN1dGVkIgotICAgICAgIGV4aXQgMQotZmkKLWlmIFsgLXogIiRRRU1VSUZET1dOIiAtbyAhIC14ICIkUUVNVUlGRE9XTiIgXTsgdGhlbgotICAgICAgIGVjaG8gInJ1bnFlbXUtaWZkb3duIGNhbm5vdCBiZSBmb3VuZCBvciBleGVjdXRlZCIKLSAgICAgICBleGl0IDEKLWZpCi0KLU5GU1JVTk5JTkc9ImZhbHNlIgotCi0jY2FwdHVyZSBvcmlnaW5hbCBzdHR5IHZhbHVlcwotT1JJR19TVFRZPSQoc3R0eSAtZykKLQotaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgotICAgIEtFUk5FTF9ORVRXT1JLX0NNRD0iaXA9ZGhjcCIKLSAgICBRRU1VX1RBUF9DTUQ9IiIKLSAgICBRRU1VX1VJX09QVElPTlM9Ii1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2UgdGFibGV0IgotICAgIFFFTVVfTkVUV09SS19DTUQ9IiIKLSAgICBEUk9PVD0iL2Rldi92ZGEiCi0gICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBmaWxlPSRST09URlMsaWY9dmlydGlvLGZvcm1hdD1yYXciCi1lbHNlCi0gICAgICAgIGFjcXVpcmVfbG9jaygpIHsKLSAgICAgICAgICAgIGxvY2tmaWxlPSQxCi0gICAgICAgICAgICBpZiBbIC16ICIkbG9ja2ZpbGUiIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogbWlzc2luZyBsb2NrZmlsZSBhcmcgcGFzc2VkIHRvIGFjcXVpcmVfbG9jaygpIgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICBmaQotCi0gICAgICAgICAgICB0b3VjaCAkbG9ja2ZpbGUubG9jayAyPi9kZXYvbnVsbAotICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAiQWNxdWlyaW5nIGxvY2tmaWxlIGZvciAkbG9ja2ZpbGUubG9jayBmYWlsZWQiCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBleGVjIDg+JGxvY2tmaWxlLmxvY2sKLSAgICAgICAgICAgIGZsb2NrIC1uIC14IDgKLSAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgotICAgICAgICAgICAgICAgIGV4ZWMgOD4mLQotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICBmaQotCi0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICB9Ci0KLSAgICAgICAgcmVsZWFzZV9sb2NrKCkgewotICAgICAgICAgICAgbG9ja2ZpbGU9JDEKLSAgICAgICAgICAgIGlmIFsgLXogIiRsb2NrZmlsZSIgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBtaXNzaW5nIGxvY2tmaWxlIGFyZyBwYXNzZWQgdG8gcmVsZWFzZV9sb2NrKCkiCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgIGZpCi0KLSAgICAgICAgICAgIHJtIC1mICRsb2NrZmlsZS5sb2NrCi0gICAgICAgICAgICBleGVjICA4PiYtCi0gICAgICAgIH0KLQotICAgICAgICBMT0NLRElSPSIvdG1wL3FlbXUtdGFwLWxvY2tzIgotICAgICAgICBpZiBbICEgLWQgIiRMT0NLRElSIiBdOyB0aGVuCi0gICAgICAgICAgICBta2RpciAkTE9DS0RJUgotICAgICAgICAgICAgY2htb2QgNzc3ICRMT0NLRElSCi0gICAgICAgIGZpCi0KLSAgICAgICAgSUZDT05GSUc9YHdoaWNoIGlwIDI+IC9kZXYvbnVsbGAKLSAgICAgICAgaWYgWyAteiAiJElGQ09ORklHIiBdOyB0aGVuCi0gICAgICAgICAgICBJRkNPTkZJRz0vc2Jpbi9pcAotICAgICAgICBmaQotICAgICAgICBpZiBbICEgLXggIiRJRkNPTkZJRyIgXTsgdGhlbgotICAgICAgICAgICAgICAgZWNobyAiJElGQ09ORklHIGNhbm5vdCBiZSBleGVjdXRlZCIKLSAgICAgICAgICAgICAgIGV4aXQgMQotICAgICAgICBmaQotCi0gICAgICAgIFBPU1NJQkxFPWAkSUZDT05GSUcgbGluayB8IGdyZXAgJ3RhcCcgfCBhd2sgJ3twcmludCAkMn0nIHwgc2VkIC1lICdzLzovLycgLWUgJ3MvQC4qLy8nYAotICAgICAgICBUQVA9IiIKLSAgICAgICAgTE9DS0ZJTEU9IiIKLSAgICAgICAgVVNFX1BSRUNPTkZfVEFQPSJubyIKLSAgICAgICAgZm9yIHRhcCBpbiAkUE9TU0lCTEU7IGRvCi0gICAgICAgICAgICBMT0NLRklMRT0iJExPQ0tESVIvJHRhcCIKLSAgICAgICAgICAgIGlmIFsgLWUgIiRMT0NLRklMRS5za2lwIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAiRm91bmQgJExPQ0tGSUxFLnNraXAsIHNraXBwaW5nICR0YXAiCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICR0YXAuLi4iCi0gICAgICAgICAgICBhY3F1aXJlX2xvY2sgJExPQ0tGSUxFCi0gICAgICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KLSAgICAgICAgICAgICAgICBUQVA9JHRhcAotICAgICAgICAgICAgICAgIFVTRV9QUkVDT05GX1RBUD0ieWVzIgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBmaQotICAgICAgICBkb25lCi0KLSAgICAgICAgaWYgWyAiJFRBUCIgPSAiIiBdOyB0aGVuCi0gICAgICAgICAgICBpZiBbIC1lICIkTk9TVURPX0ZMQUciIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogVGhlcmUgYXJlIG5vIGF2YWlsYWJsZSB0YXAgZGV2aWNlcyB0byB1c2UgZm9yIG5ldHdvcmtpbmcsIgotICAgICAgICAgICAgICAgIGVjaG8gImFuZCBJIHNlZSAkTk9TVURPX0ZMQUcgZXhpc3RzLCBzbyBJIGFtIG5vdCBnb2luZyB0byB0cnkgY3JlYXRpbmciCi0gICAgICAgICAgICAgICAgZWNobyAiYSBuZXcgb25lIHdpdGggc3Vkby4iCi0gICAgICAgICAgICAgICAgZXhpdCAxCi0gICAgICAgICAgICBmaQotCi0gICAgICAgICAgICBHUk9VUElEPWBpZCAtZ2AKLSAgICAgICAgICAgIFVTRVJJRD1gaWQgLXVgCi0gICAgICAgICAgICBlY2hvICJTZXR0aW5nIHVwIHRhcCBpbnRlcmZhY2UgdW5kZXIgc3VkbyIKLSAgICAgICAgICAgICMgUmVkaXJlY3Qgc3RkZXJyIHNpbmNlIHdlIGNvdWxkIHNlZSBhIExEX1BSRUxPQUQgd2FybmluZyBoZXJlIGlmIHBzZXVkbyBpcyBsb2FkZWQKLSAgICAgICAgICAgICMgYnV0IGluYWN0aXZlLiBUaGlzIGxvb2tzIHNjYXJ5IGJ1dCBpcyBoYXJtbGVzcwotICAgICAgICAgICAgdGFwPWBzdWRvICRRRU1VSUZVUCAkVVNFUklEICRHUk9VUElEICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgMj4gL2Rldi9udWxsYAotICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0gICAgICAgICAgICAgICAgIyBSZS1ydW4gc3RhbmRhbG9uZSB0byBzZWUgdmVyYm9zZSBlcnJvcnMKLSAgICAgICAgICAgICAgICBzdWRvICRRRU1VSUZVUCAkVVNFUklEICRHUk9VUElEICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIExPQ0tGSUxFPSIkTE9DS0RJUi8kdGFwIgotICAgICAgICAgICAgZWNobyAiQWNxdWlyaW5nIGxvY2tmaWxlIGZvciAkdGFwLi4uIgotICAgICAgICAgICAgYWNxdWlyZV9sb2NrICRMT0NLRklMRQotICAgICAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCi0gICAgICAgICAgICAgICAgVEFQPSR0YXAKLSAgICAgICAgICAgIGZpIAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICJVc2luZyBwcmVjb25maWd1cmVkIHRhcCBkZXZpY2UgJyRUQVAnIgotICAgICAgICAgICAgZWNobyAiSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRvdWNoICRMT0NLRklMRS5za2lwIHRvIG1ha2UgcnVucWVtdSBza2lwICRUQVAuIgotICAgICAgICBmaQotCi0gICAgICAgIGNsZWFudXAoKSB7Ci0gICAgICAgICAgICBpZiBbICEgLWUgIiROT1NVRE9fRkxBRyIgLWEgIiRVU0VfUFJFQ09ORl9UQVAiID0gIm5vIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgIyBSZWRpcmVjdCBzdGRlcnIgc2luY2Ugd2UgY291bGQgc2VlIGEgTERfUFJFTE9BRCB3YXJuaW5nIGhlcmUgaWYgcHNldWRvIGlzIGxvYWRlZAotICAgICAgICAgICAgICAgICMgYnV0IGluYWN0aXZlLiBUaGlzIGxvb2tzIHNjYXJ5IGJ1dCBpcyBoYXJtbGVzcwotICAgICAgICAgICAgICAgIHN1ZG8gJFFFTVVJRkRPV04gJFRBUCAkT0VDT1JFX05BVElWRV9TWVNST09UIDI+IC9kZXYvbnVsbAotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGVjaG8gIlJlbGVhc2luZyBsb2NrZmlsZSBvZiBwcmVjb25maWd1cmVkIHRhcCBkZXZpY2UgJyRUQVAnIgotICAgICAgICAgICAgcmVsZWFzZV9sb2NrICRMT0NLRklMRQotCi0gICAgICAgICAgICBpZiBbICIkTkZTUlVOTklORyIgPSAidHJ1ZSIgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIlNodXR0aW5nIGRvd24gdGhlIHVzZXJzcGFjZSBORlMgc2VydmVyLi4uIgotICAgICAgICAgICAgICAgIGVjaG8gInJ1bnFlbXUtZXhwb3J0LXJvb3RmcyBzdG9wICRST09URlMiCi0gICAgICAgICAgICAgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHN0b3AgJFJPT1RGUwotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICMgSWYgUUVNVSBjcmFzaGVzIG9yIHNvbWVob3cgdHR5IHByb3BlcnRpZXMgYXJlIG5vdCByZXN0b3JlZAotICAgICAgICAgICAgIyBhZnRlciBxZW11IGV4aXRzLCB3ZSBuZWVkIHRvIHJ1biBzdHR5IHNhbmUKLSAgICAgICAgICAgICNzdHR5IHNhbmUKLQotICAgICAgICAgICAgI2luc3RlYWQgb2YgdXNpbmcgc3R0eSBzYW5lIHdlIHNldCB0aGUgb3JpZ2luYWwgc3R0eSB2YWx1ZXMKLSAgICAgICAgICAgIHN0dHkgJHtPUklHX1NUVFl9Ci0KLSAgICAgICAgfQotCi0KLSAgICAgICAgbjA9JChlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nKQotCi0gICAgICAgIGNhc2UgJG4wIGluCi0gICAgICAgICAgICAnJ3wqWyEwLTldKikKLSAgICAgICAgICAgICAgICBlY2hvICJFcnJvciBDb3VsZG4ndCB0dXJuICRUQVAgaW50byBhbiBpbnRlcmZhY2UgbnVtYmVyPyIKLSAgICAgICAgICAgICAgICBleGl0IDEKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgbjE9JCgoJG4wICogMiArIDEpKQotICAgICAgICBuMj0kKCgkbjEgKyAxKSkKLQotICAgICAgICBLRVJORUxfTkVUV09SS19DTUQ9ImlwPTE5Mi4xNjguNy4kbjI6OjE5Mi4xNjguNy4kbjE6MjU1LjI1NS4yNTUuMCIKLSAgICAgICAgUUVNVV9UQVBfQ01EPSItbmV0IHRhcCx2bGFuPTAsaWZuYW1lPSRUQVAsc2NyaXB0PW5vLGRvd25zY3JpcHQ9bm8iCi0gICAgICAgIGlmIFsgIiRWSE9TVF9BQ1RJVkUiID0gInllcyIgXTsgdGhlbgotICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsbW9kZWw9dmlydGlvICRRRU1VX1RBUF9DTUQsdmhvc3Q9b24iCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9Ii1uZXQgbmljLG1vZGVsPXZpcnRpbyAkUUVNVV9UQVBfQ01EIgotICAgICAgICBmaQotICAgICAgICBEUk9PVD0iL2Rldi92ZGEiCi0gICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgZmlsZT0kUk9PVEZTLGlmPXZpcnRpbyxmb3JtYXQ9cmF3IgotCi0gICAgICAgIEtFUk5DTURMSU5FPSJtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VX1VJX09QVElPTlM9Ii1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2UgdGFibGV0IgotCi0gICAgICAgIE5GU19JTlNUQU5DRT1gZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AKLSAgICAgICAgZXhwb3J0IE5GU19JTlNUQU5DRQotCi0gICAgICAgIFNFUklBTE9QVFM9IiIKLSAgICAgICAgaWYgWyAieCRTRVJJQUxfTE9HRklMRSIgIT0gIngiIF07IHRoZW4KLSAgICAgICAgICAgIFNFUklBTE9QVFM9Ii1zZXJpYWwgZmlsZTokU0VSSUFMX0xPR0ZJTEUiCi0gICAgICAgIGZpCi1maQotCi1pZiBbICEgLWYgIiRLRVJORUwiIC1hICIkSVNfVk0iID0gImZhbHNlIiBdOyB0aGVuCi0gICAgZWNobyAiRXJyb3I6IEtlcm5lbCBpbWFnZSBmaWxlICRLRVJORUwgZG9lc24ndCBleGlzdCIKLSAgICBjbGVhbnVwCi0gICAgcmV0dXJuIDEKLWZpCi0KLWlmIFsgIiRGU1RZUEUiICE9ICJuZnMiIC1hICIkSVNfVk0iID0gImZhbHNlIiAtYSAhIC1mICIkUk9PVEZTIiBdOyB0aGVuCi0gICAgZWNobyAiRXJyb3I6IEltYWdlIGZpbGUgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgotICAgIGNsZWFudXAKLSAgICByZXR1cm4gMQotZmkKLQotaWYgWyAiJE5GU19TRVJWRVIiID0gIiIgXTsgdGhlbgotICAgIE5GU19TRVJWRVI9IjE5Mi4xNjguNy4xIgotICAgIGlmIFsgIiRTTElSUF9FTkFCTEVEIiA9ICJ5ZXMiIF07IHRoZW4KLQlORlNfU0VSVkVSPSIxMC4wLjIuMiIKLSAgICBmaQotZmkKLQotaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgTkZTX0RJUj1gZWNobyAkUk9PVEZTIHwgc2VkICdzL15bXjpdKjpcKC4qXCkvXDEvJ2AKLSAgICBpZiBbICIkTkZTX0lOU1RBTkNFIiA9ICIiIF0gOyB0aGVuCi0JTkZTX0lOU1RBTkNFPTAKLSAgICBmaQotICAgIE1PVU5URF9SUENQT1JUPSRbIDIxMTExICsgJE5GU19JTlNUQU5DRSBdCi0gICAgTkZTRF9SUENQT1JUPSRbIDExMTExICsgJE5GU19JTlNUQU5DRSBdCi0gICAgTkZTRF9QT1JUPSRbIDMwNDkgKyAyICogJE5GU19JTlNUQU5DRSBdCi0gICAgTU9VTlREX1BPUlQ9JFsgMzA0OCArIDIgKiAkTkZTX0lOU1RBTkNFIF0KLSAgICBVTkZTX09QVFM9Im5mc3ZlcnM9Myxwb3J0PSRORlNEX1BPUlQsbW91bnRwcm9nPSRNT1VOVERfUlBDUE9SVCxuZnNwcm9nPSRORlNEX1JQQ1BPUlQsdWRwLG1vdW50cG9ydD0kTU9VTlREX1BPUlQiCi0KLSAgICBQU0VVRE9fTE9DQUxTVEFURURJUj1+Ly5ydW5xZW11LXNkay9wc2V1ZG8KLSAgICBleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVIKLQotICAgICMgU3RhcnQgdGhlIHVzZXJzcGFjZSBORlMgc2VydmVyCi0gICAgZWNobyAicnVucWVtdS1leHBvcnQtcm9vdGZzIHJlc3RhcnQgJFJPT1RGUyIKLSAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgcmVzdGFydCAkUk9PVEZTCi0gICAgaWYgWyAkPyAhPSAwIF07IHRoZW4KLSAgICAgICAgcmV0dXJuIDEKLSAgICBmaQotICAgIE5GU1JVTk5JTkc9InRydWUiCi1maQotCi0KLXNldF9tZW1fc2l6ZSgpIHsKLSAgICBpZiBbICEgLXogIiRtZW1fc2V0IiBdIDsgdGhlbgotICAgICAgICAjR2V0IG1lbW9yeSBzZXR0aW5nIHNpemUgZnJvbSB1c2VyIGlucHV0Ci0gICAgICAgIG1lbV9zaXplPWBlY2hvICRtZW1fc2V0IHwgc2VkICdzLy1tW1s6c3BhY2U6XV0gKi8vJ2AKLSAgICBlbHNlCi0gICAgICAgIG1lbV9zaXplPSQxCi0gICAgZmkKLSAgICAjIFFFTVVfTUVNT1JZIGhhcyAnTScgYXBwZW5kZWQgdG8gbWVtX3NpemUKLSAgICBRRU1VX01FTU9SWT0iJG1lbV9zaXplIk0KLQotfQotCi1jb25maWdfcWVtdWFybSgpIHsKLSAgICBzZXRfbWVtX3NpemUgMTI4Ci0gICAgUUVNVT1xZW11LXN5c3RlbS1hcm0KLSAgICBNQUNISU5FX1NVQlRZUEU9dmVyc2F0aWxlcGIKLSAgICBleHBvcnQgUUVNVV9BVURJT19EUlY9Im5vbmUiCi0gICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgotICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiAtbyAiJEZTVFlQRSIgPSAid2ljIiBdOyB0aGVuCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PSREUk9PVCBydyBjb25zb2xlPXR0eUFNQTAsMTE1MjAwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSBoaWdocmVzPW9mZiIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICR7TUFDSElORV9TVUJUWVBFfSAkUk9PVEZTX09QVElPTlMgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgotICAgICAgICAgICAgY2xlYW51cAotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZmkKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3IGNvbnNvbGU9dHR5QU1BMCwxMTUyMDAgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJHtNQUNISU5FX1NVQlRZUEV9IC0tbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybXY2IiBdOyB0aGVuCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVU9QVElPTlMgLWNwdSBhcm0xMTM2IgotICAgIGZpCi0gICAgaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm12NyIgXTsgdGhlbgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVPUFRJT05TIC1jcHUgY29ydGV4LWE4IgotICAgIGZpCi19Ci0KLWNvbmZpZ19xZW11YXJtNjQoKSB7Ci0gICAgc2V0X21lbV9zaXplIDUxMgotICAgIFFFTVU9cWVtdS1zeXN0ZW0tYWFyY2g2NAotCi0gICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldGRldiB0YXAsaWQ9bmV0MCxpZm5hbWU9JFRBUCxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyAtZGV2aWNlIHZpcnRpby1uZXQtZGV2aWNlLG5ldGRldj1uZXQwICIKLSAgICBEUk9PVD0iL2Rldi92ZGEiCi0gICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBpZD1kaXNrMCxmaWxlPSRST09URlMsaWY9bm9uZSxmb3JtYXQ9cmF3IC1kZXZpY2UgdmlydGlvLWJsay1kZXZpY2UsZHJpdmU9ZGlzazAiCi0KLSAgICBleHBvcnQgUUVNVV9BVURJT19EUlY9Im5vbmUiCi0gICAgaWYgWyAieCRTRVJJQUxTVERJTyIgPSAieCIgXSA7IHRoZW4KLSAgICAgICAgUUVNVV9VSV9PUFRJT05TPSItbm9ncmFwaGljIgotICAgIGVsc2UKLSAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIiCi0gICAgZmkKLSAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgLW8gIiRGU1RZUEUiID0gIndpYyIgXTsgdGhlbgotICAgICAgICBLRVJOQ01ETElORT0icm9vdD0kRFJPT1QgcncgY29uc29sZT10dHlBTUEwLDM4NDAwIG1lbT0kUUVNVV9NRU1PUlkgaGlnaHJlcz1vZmYgJEtFUk5FTF9ORVRXT1JLX0NNRCIKLSAgICAgICAgIyBxZW11LXN5c3RlbS1hYXJjaDY0IG9ubHkgc3VwcG9ydCAnLW1hY2hpbmUgdmlydCAtY3B1IGNvcnRleC1hNTcnIGZvciBub3cKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1tYWNoaW5lIHZpcnQgLWNwdSBjb3J0ZXgtYTU3ICRST09URlNfT1BUSU9OUyAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgotICAgICAgICAgICAgY2xlYW51cAotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZmkKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3IGNvbnNvbGU9dHR5QU1BMCwzODQwMCBtZW09JFFFTVVfTUVNT1JZIGhpZ2hyZXM9b2ZmICRLRVJORUxfTkVUV09SS19DTUQiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtbWFjaGluZSB2aXJ0IC1jcHUgY29ydGV4LWE1NyAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi19Ci0KLWNvbmZpZ19xZW11eDg2KCkgewotICAgIHNldF9tZW1fc2l6ZSAyNTYKLSAgICBRRU1VPXFlbXUtc3lzdGVtLWkzODYKLSAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCi0gICAgICAgIENQVV9TVUJUWVBFPWt2bTMyCi0gICAgZWxzZQotICAgICAgICBDUFVfU1VCVFlQRT1xZW11MzIKLSAgICBmaQotICAgIGlmIFsgISAteiAiJHZnYV9vcHRpb24iIF07IHRoZW4KLSAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgotICAgIGVsc2UKLSAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIC12Z2Egdm13YXJlIgotICAgIGZpCi0gICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIC1vICIkRlNUWVBFIiA9ICJ3aWMiIF07IHRoZW4KLSAgICAgICAgS0VSTkNNRExJTkU9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PSREUk9PVCBydyBtZW09JFFFTVVfTUVNT1JZICRLRVJORUxfTkVUV09SS19DTUQiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUk9PVEZTX09QVElPTlMgJFFFTVVfVUlfT1BUSU9OUyIKLSAgICBmaQotICAgIGlmIFsgIiR7RlNUWVBFOjA6NH0iID0gImNwaW8iIF07IHRoZW4KLSAgICAgICAgS0VSTkNNRExJTkU9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PS9kZXYvcmFtMCBydyBtZW09JFFFTVVfTUVNT1JZICRLRVJORUxfTkVUV09SS19DTUQiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAtaW5pdHJkICRST09URlMgJFFFTVVfVUlfT1BUSU9OUyIKLSAgICBmaQotCi0gICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0LiIKLSAgICAgICAgICAgIGNsZWFudXAKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGZpCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJElTX1ZNIiA9ICJ0cnVlIiBdOyB0aGVuCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgIyBDdXJyZW50bHkgb3Byb2ZpbGUncyBldmVudCBiYXNlZCBpbnRlcnJ1cHQgbW9kZSBkb2Vzbid0IHdvcmsoQnVnICM4MjgpIGluCi0gICAgIyBxZW11eDg2IGFuZCBxZW11eDg2LTY0LiBXZSBjYW4gdXNlIHRpbWVyIGludGVycnVwdCBtb2RlIGZvciBub3cuCi0gICAgS0VSTkNNRExJTkU9IiRLRVJOQ01ETElORSBvcHJvZmlsZS50aW1lcj0xIgotfQotCi1jb25maWdfcWVtdXg4Nl82NCgpIHsKLSAgICBzZXRfbWVtX3NpemUgMjU2Ci0gICAgUUVNVT1xZW11LXN5c3RlbS14ODZfNjQKLSAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCi0gICAgICAgIENQVV9TVUJUWVBFPWt2bTY0Ci0gICAgZWxzZQotICAgICAgICBDUFVfU1VCVFlQRT1jb3JlMmR1bwotICAgIGZpCi0gICAgaWYgWyAhIC16ICIkdmdhX29wdGlvbiIgXTsgdGhlbgotICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCi0gICAgZWxzZQotICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMgLXZnYSB2bXdhcmUiCi0gICAgZmkKLSAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgLW8gIiRGU1RZUEUiID0gIndpYyIgXTsgdGhlbgotICAgICAgICBLRVJOQ01ETElORT0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9JERST09UIHJ3IG1lbT0kUUVNVV9NRU1PUlkgJEtFUk5FTF9ORVRXT1JLX0NNRCIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRST09URlNfT1BUSU9OUyAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgIngkUk9PVEZTIiA9ICJ4IiBdOyB0aGVuCi0gICAgICAgICAgICBST09URlM9L3Nydi9uZnMvcWVtdXg4Ni02NAotICAgICAgICBmaQotICAgICAgICBpZiBbICEgLWQgIiRST09URlMiIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0LiIKLSAgICAgICAgICAgIGNsZWFudXAKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGZpCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJElTX1ZNIiA9ICJ0cnVlIiBdOyB0aGVuCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgIyBDdXJyZW50bHkgb3Byb2ZpbGUncyBldmVudCBiYXNlZCBpbnRlcnJ1cHQgbW9kZSBkb2Vzbid0IHdvcmsoQnVnICM4MjgpIGluCi0gICAgIyBxZW11eDg2IGFuZCBxZW11eDg2LTY0LiBXZSBjYW4gdXNlIHRpbWVyIGludGVycnVwdCBtb2RlIGZvciBub3cuCi0gICAgS0VSTkNNRExJTkU9IiRLRVJOQ01ETElORSBvcHJvZmlsZS50aW1lcj0xIgotfQotCi1jb25maWdfcWVtdW1pcHMoKSB7Ci0gICAgc2V0X21lbV9zaXplIDI1NgotICAgIGNhc2UgIiRNQUNISU5FIiBpbgotICAgICAgIHFlbXVtaXBzKSAgIFFFTVU9cWVtdS1zeXN0ZW0tbWlwcyA7OwotICAgICAgIHFlbXVtaXBzZWwpIFFFTVU9cWVtdS1zeXN0ZW0tbWlwc2VsIDs7Ci0gICAgICAgcWVtdW1pcHM2NCkgUUVNVT1xZW11LXN5c3RlbS1taXBzNjQgOzsKLSAgICBlc2FjCi0gICAgTUFDSElORV9TVUJUWVBFPW1hbHRhCi0gICAgUUVNVV9VSV9PUFRJT05TPSItdmdhIGNpcnJ1cyAkUUVNVV9VSV9PUFRJT05TIgotICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiAtbyAiJEZTVFlQRSIgPSAid2ljIiBdOyB0aGVuCi0gICAgICAgICNLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5MCAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PSREUk9PVCBydyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgJFJPT1RGU19PUFRJT05TIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKLSAgICBmaQotICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgotICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCi0gICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKLSAgICAgICAgICAgIGNsZWFudXAKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGZpCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi19Ci0KLWNvbmZpZ19xZW11cHBjKCkgewotICAgIHNldF9tZW1fc2l6ZSAyNTYKLSAgICBRRU1VPXFlbXUtc3lzdGVtLXBwYwotICAgIE1BQ0hJTkVfU1VCVFlQRT1tYWM5OQotICAgIENQVV9TVUJUWVBFPUc0Ci0gICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgotICAgIGlmIFsgIiRTTElSUF9FTkFCTEVEIiA9ICJ5ZXMiIF07IHRoZW4KLSAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iIgotICAgIGVsc2UKLSAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsbW9kZWw9cGNuZXQgJFFFTVVfVEFQX0NNRCIKLSAgICBmaQotICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiAtbyAiJEZTVFlQRSIgPSAid2ljIiBdOyB0aGVuCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PSREUk9PVCBydyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFIC1NICRNQUNISU5FX1NVQlRZUEUgJFJPT1RGU19PUFRJT05TIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKLSAgICBmaQotICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgotICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCi0gICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKLSAgICAgICAgICAgIGNsZWFudXAKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGZpCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFIC1NICRNQUNISU5FX1NVQlRZUEUgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi19Ci0KLWNvbmZpZ19xZW11c2g0KCkgewotICAgIHNldF9tZW1fc2l6ZSAxMDI0Ci0gICAgUUVNVT1xZW11LXN5c3RlbS1zaDQKLSAgICBNQUNISU5FX1NVQlRZUEU9cjJkCi0gICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgotICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiAtbyAiJEZTVFlQRSIgPSAid2ljIiBdOyB0aGVuCi0gICAgICAgICNLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5MCAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIHJ3IGNvbnNvbGU9dHR5U0MxIG5vaW90cmFwIGVhcmx5cHJpbnRrPXNoLXNjaS4xIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLWhkYSAkUk9PVEZTIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyAtbW9uaXRvciBudWxsIC1zZXJpYWwgdmMgLXNlcmlhbCBzdGRpbyIKLSAgICAgICAgU0VSSUFMU1RESU89IjEiCi0gICAgZmkKLSAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KLSAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgotICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCi0gICAgICAgICAgICBjbGVhbnVwCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBmaQotICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBjb25zb2xlPXR0eVNDMSBub2lvdHJhcCBlYXJseXByaW50az1zaC1zY2kuMSBjb25zb2xlPXR0eSBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMgLW1vbml0b3IgbnVsbCAtc2VyaWFsIHZjIC1zZXJpYWwgc3RkaW8iCi0gICAgICAgIFNFUklBTFNURElPPSIxIgotICAgIGZpCi19Ci0KLWNvbmZpZ19xZW11enlucSgpIHsKLSAgICBzZXRfbWVtX3NpemUgMTAyNAotICAgIFFFTVU9cWVtdS1zeXN0ZW0tYXJtCi0gICAgUUVNVV9TWVNURU1fT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0geGlsaW54LXp5bnEtYTkgLXNlcmlhbCBudWxsIC1zZXJpYWwgbW9uOnN0ZGlvIC1kdGIgJEtFUk5FTC0kTUFDSElORS5kdGIiCi0gICAgIyB6eW5xIHNlcmlhbCBwb3J0cyBhcmUgbmFtZWQgJ3R0eVBTMCcgYW5kICd0dHlQUzEnLCBmaXh1cCB0aGUgZGVmYXVsdCB2YWx1ZXMKLSAgICBTQ1JJUFRfS0VSTkVMX09QVD0kKGVjaG8gIiRTQ1JJUFRfS0VSTkVMX09QVCIgfCBzZWQgJ3MvY29uc29sZT10dHlTL2NvbnNvbGU9dHR5UFMvZycpCi0gICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJHtGU1RZUEU6MDo0fSIgPSAiY3BpbyIgXTsgdGhlbgotICAgICAgICBLRVJOQ01ETElORT0iZWFybHlwcmludGsgcm9vdD0vZGV2L3JhbSBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9TWVNURU1fT1BUSU9OUyAtaW5pdHJkICRST09URlMiCi0gICAgZmkKLX0KLQotY29uZmlnX3FlbXVtaWNyb2JsYXplKCkgewotICAgIHNldF9tZW1fc2l6ZSAyNTYKLSAgICBRRU1VPXFlbXUtc3lzdGVtLW1pY3JvYmxhemVlbAotICAgIFFFTVVfU1lTVEVNX09QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NIHBldGFsb2dpeC1tbDYwNSAtc2VyaWFsIG1vbjpzdGRpbyIKLSAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIke0ZTVFlQRTowOjR9IiA9ICJjcGlvIiBdOyB0aGVuCi0gICAgICAgIEtFUk5DTURMSU5FPSJlYXJseXByaW50ayByb290PS9kZXYvcmFtIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX1NZU1RFTV9PUFRJT05TIC1pbml0cmQgJFJPT1RGUyIKLSAgICBmaQotfQotCi1jYXNlICIkTUFDSElORSIgaW4KLSAgICAicWVtdWFybSIgfCAicWVtdWFybXY2IiB8ICJxZW11YXJtdjciKQotICAgICAgICBjb25maWdfcWVtdWFybQotICAgICAgICA7OwotICAgICJxZW11YXJtNjQiKQotICAgICAgICBjb25maWdfcWVtdWFybTY0Ci0gICAgICAgIDs7Ci0gICAgInFlbXV4ODYiKQotICAgICAgICBjb25maWdfcWVtdXg4NgotICAgICAgICA7OwotICAgICJxZW11eDg2LTY0IikKLSAgICAgICAgY29uZmlnX3FlbXV4ODZfNjQKLSAgICAgICAgOzsKLSAgICAicWVtdW1pcHMiIHwgInFlbXVtaXBzZWwiIHwgInFlbXVtaXBzNjQiKQotICAgICAgICBjb25maWdfcWVtdW1pcHMKLSAgICAgICAgOzsKLSAgICAicWVtdXBwYyIpCi0gICAgICAgIGNvbmZpZ19xZW11cHBjCi0gICAgICAgIDs7Ci0gICAgInFlbXVzaDQiKQotICAgICAgICBjb25maWdfcWVtdXNoNAotICAgICAgICA7OwotICAgICJxZW11enlucSIpCi0gICAgICAgIGNvbmZpZ19xZW11enlucQotICAgICAgICA7OwotICAgICJxZW11bWljcm9ibGF6ZSIpCi0gICAgICAgIGNvbmZpZ19xZW11bWljcm9ibGF6ZQotICAgICAgICA7OwotICAgICopCi0gICAgICAgIGVjaG8gIkVycm9yOiBVbnN1cHBvcnRlZCBtYWNoaW5lIHR5cGUgJE1BQ0hJTkUiCi0gICAgICAgIHJldHVybiAxCi0gICAgOzsKLWVzYWMKLQotIyBXZSBuZWVkIHRvIHNwZWNpZnkgLW0gPG1lbV9zaXplPiB0byBvdmVyY29tZSBhIGJ1ZyBpbiBxZW11IDAuMTQuMAotIyBodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC91YnVudHUvK3NvdXJjZS9xZW11LWt2bS8rYnVnLzU4NDQ4MAotaWYgWyAteiAiJG1lbV9zZXQiIF0gOyB0aGVuCi0gIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtbSAkbWVtX3NpemUiCi1maQotCi1pZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIF07IHRoZW4KLSAgICBLRVJOQ01ETElORT0iJEtFUk5DTURMSU5FIHJvb3Rmc3R5cGU9JEZTVFlQRSIKLWZpCi0KLWlmIFsgIiRGU1RZUEUiID0gImNwaW8uZ3oiIF07IHRoZW4KLSAgICBRRU1VT1BUSU9OUz0iLWluaXRyZCAkUk9PVEZTIC1ub2dyYXBoaWMiCi0gICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9yYW0wIGNvbnNvbGU9dHR5UzAgZGVidWdzaGVsbCIKLWZpCi0KLWlmIFsgIiRGU1RZUEUiID0gImlzbyIgXTsgdGhlbgotICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY2Ryb20gJFJPT1RGUyAkUUVNVV9VSV9PUFRJT05TIgotZmkKLQotaWYgWyAieCRRRU1VT1BUSU9OUyIgPSAieCIgXTsgdGhlbgotICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gc3VwcG9ydCB0aGlzIGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMiCi0gICAgY2xlYW51cAotICAgIHJldHVybiAxCi1maQotCi1pZiBbICIkVENQU0VSSUFMX1BPUlROVU0iICE9ICIiIF07IHRoZW4KLSAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybTY0IiBdOyB0aGVuCi0gICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtZGV2aWNlIHZpcnRpby1zZXJpYWwtZGV2aWNlIC1jaGFyZGV2IHNvY2tldCxpZD12aXJ0Y29uLHBvcnQ9JFRDUFNFUklBTF9QT1JUTlVNLGhvc3Q9MTI3LjAuMC4xIC1kZXZpY2UgdmlydGNvbnNvbGUsY2hhcmRldj12aXJ0Y29uIgotICAgIGVsc2UKLSAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1zZXJpYWwgdGNwOjEyNy4wLjAuMTokVENQU0VSSUFMX1BPUlROVU0iCi0gICAgZmkKLWZpCi0KLVBBVEg9JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluOiRQQVRICi0KLVFFTVVCSU49YHdoaWNoICRRRU1VIDI+IC9kZXYvbnVsbGAKLWlmIFsgISAteCAiJFFFTVVCSU4iIF07IHRoZW4KLSAgICBlY2hvICJFcnJvcjogTm8gUUVNVSBiaW5hcnkgJyRRRU1VJyBjb3VsZCBiZSBmb3VuZC4iCi0gICAgY2xlYW51cAotICAgIHJldHVybiAxCi1maQotCi1ORUVEX0dMPWBsZGQgJFFFTVVCSU4vJFFFTVUgMj4mMSB8IGdyZXAgbGliR0xVYAotIyBXZSBjYW4ndCBydW4gd2l0aG91dCBhIGxpYkdMLnNvCi1pZiBbICIkTkVFRF9HTCIgIT0gIiIgXTsgdGhlbgotICAgIGxpYmdsPSdubycKLQotICAgIFsgLWUgL3Vzci9saWIvbGliR0wuc28gLWEgLWUgL3Vzci9saWIvbGliR0xVLnNvIF0gJiYgbGliZ2w9J3llcycKLSAgICBbIC1lIC91c3IvbGliNjQvbGliR0wuc28gLWEgLWUgL3Vzci9saWI2NC9saWJHTFUuc28gXSAmJiBsaWJnbD0neWVzJwotICAgIFsgLWUgL3Vzci9saWIvKi1saW51eC1nbnUvbGliR0wuc28gLWEgLWUgL3Vzci9saWIvKi1saW51eC1nbnUvbGliR0xVLnNvIF0gJiYgbGliZ2w9J3llcycKLQotICAgIGlmIFsgIiRsaWJnbCIgIT0gJ3llcycgXTsgdGhlbgotICAgICAgICBlY2hvICJZb3UgbmVlZCBsaWJHTC5zbyBhbmQgbGliR0xVLnNvIHRvIGV4aXN0IGluIHlvdXIgbGlicmFyeSBwYXRoIHRvIHJ1biB0aGUgUUVNVSBlbXVsYXRvci4KLSAgICAgICAgVWJ1bnR1IHBhY2thZ2UgbmFtZXMgYXJlOiBsaWJnbDEtbWVzYS1kZXYgYW5kIGxpYmdsdTEtbWVzYS1kZXYuCi0gICAgICAgIEZlZG9yYSBwYWNrYWdlIG5hbWVzIGFyZTogbWVzYS1saWJHTC1kZXZlbCBtZXNhLWxpYkdMVS1kZXZlbC4iCi0gICAgICAgIHJldHVybiAxOwotICAgIGZpCi1maQotCi1kb19xdWl0KCkgewotICAgIGNsZWFudXAKLSAgICByZXR1cm4gMQotfQotCi10cmFwIGRvX3F1aXQgSU5UIFRFUk0gUVVJVAotCi0jIHFlbXUgZ290IHNlZ2ZhdWx0IGlmIGxpbmtlZCB3aXRoIG5WaWRpYSdzIGxpYmdsCi1HTF9MRF9QUkVMT0FEPSRMRF9QUkVMT0FECi0KLWlmIGxkZCAkUUVNVUJJTiB8IGdyZXAgLWkgbnZpZGlhICY+IC9kZXYvbnVsbAotdGhlbgotY2F0IDw8IEVPTQotV0FSTklORzogblZpZGlhIHByb3ByaWV0YXJ5IE9wZW5HTCBsaWJyYXJpZXMgZGV0ZWN0ZWQuCi1uVmlkaWEncyBPcGVuR0wgbGlicmFyaWVzIGFyZSBrbm93biB0byBoYXZlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggcWVtdSwKLXJlc3VsdGluZyBpbiBhIHNlZ2ZhdWx0LiBQbGVhc2UgdW5pbnN0YWxsIHRoZXNlIGRyaXZlcnMgb3IgZW5zdXJlIHRoZSBtZXNhIGxpYkdMCi1saWJyYXJpZXMgcHJlY2VkZSBudmlkaWEncyB2aWEgTERfUFJFTE9BRChBbHJlYWR5IGRvIGl0IG9uIFVidW50dSAxMCkuCi1FT00KLQotIyBBdXRvbWF0aWNhbGx5IHVzZSBVYnVudHUgc3lzdGVtJ3MgbWVzYSBsaWJHTCwgb3RoZXIgZGlzdHJvIGNhbiBhZGQgaXRzIG93biBwYXRoCi1pZiBncmVwIC1pIHVidW50dSAvZXRjL2xzYi1yZWxlYXNlICY+IC9kZXYvbnVsbAotdGhlbgotICAgICMgcHJlY2VkZSBudmlkaWEncyBkcml2ZXIgb24gVWJ1bnR1IDEwCi0gICAgVUJVTlRVX01BSU5fVkVSU0lPTj1gY2F0IC9ldGMvbHNiLXJlbGVhc2UgfGdyZXAgRElTVFJJQl9SRUxFQVNFIHxjdXQgLWQ9ICAtZiAyfCBjdXQgLWQuIC1mIDFgCi0gICAgaWYgWyAiJFVCVU5UVV9NQUlOX1ZFUlNJT04iID0gIjEwIiBdOwotICAgIHRoZW4KLSAgICAgICAgR0xfUEFUSD0iIgotICAgICAgICBpZiB0ZXN0IC1lIC91c3IvbGliL2xpYkdMLnNvCi0gICAgICAgIHRoZW4gCi0gICAgICAgICAgICBHTF9QQVRIPSIvdXNyL2xpYi9saWJHTC5zbyIKLSAgICAgICAgZWxpZiB0ZXN0IC1lIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvbGliR0wuc28KLSAgICAgICAgdGhlbgotICAgICAgICAgICAgR0xfUEFUSD0iL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJHTC5zbyIKLSAgICAgICAgZmkKLQotICAgICAgICBlY2hvICJTa2lwIG5WaWRpYSdzIGxpYkdMIG9uIFVidW50dSAxMCEiCi0gICAgICAgIEdMX0xEX1BSRUxPQUQ9IiRHTF9QQVRIICRMRF9QUkVMT0FEIgotICAgIGZpCi1maQotZmkKLQotaWYgWyAieCRTRVJJQUxTVERJTyIgPSAieDEiIF07IHRoZW4KLSAgICAgICAgZWNobyAiSW50ZXJydXB0IGNoYXJhY3RlciBpcyAnXl0nIgotICAgICAgICBzdHR5IGludHIgXl0KLWZpCi0KLQotIyBQcmVzZXJ2ZSB0aGUgbXVsdGlwbGV4aW5nIGJlaGF2aW9yIGZvciB0aGUgbW9uaXRvciB0aGF0IHdvdWxkIGJlIHRoZXJlIGJhc2VkCi0jIG9uIHdoZXRoZXIgbm9ncmFwaGljIGlzIHVzZWQuCi1pZiBlY2hvICIkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiB8IGdyZXAgLS0gIi1ub2dyYXBoaWMiOyB0aGVuCi0gICAgRklSU1RfU0VSSUFMX09QVD0iLXNlcmlhbCBtb246c3RkaW8iCi1lbHNlCi0gICAgRklSU1RfU0VSSUFMX09QVD0iLXNlcmlhbCBtb246dmMiCi1maQotCi0jIHFlbXVhcm02NCB1c2VzIHZpcnRpbyBmb3IgYW55IGFkZGl0aW9uYWwgc2VyaWFsIHBvcnRzIHNvIHRoZSBub3JtYWwgbWVjaGFuaXNtCi0jIG9mIHVzaW5nIC1zZXJpYWwgd2lsbCBub3Qgd29yawotaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm02NCIgXTsgdGhlbgotICAgIFNFQ09ORF9TRVJJQUxfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1kZXZpY2UgdmlydGlvLXNlcmlhbC1kZXZpY2UgLWNoYXJkZXYgbnVsbCxpZD12aXJ0Y29uIC1kZXZpY2UgdmlydGNvbnNvbGUsY2hhcmRldj12aXJ0Y29uIgotZWxzZQotICAgIFNFQ09ORF9TRVJJQUxfT1BUPSItc2VyaWFsIG51bGwiCi1maQotCi0jIFdlIGFsd2F5cyB3YW50IGEgdHR5UzEuIFNpbmNlIHFlbXUgYnkgZGVmYXVsdCBhZGRzIGEgc2VyaWFsIHBvcnQgd2hlbgotIyBub2RlZmF1bHRzIGlzIG5vdCBzcGVjaWZpZWQsIGl0IHNlZW1zIHRoYXQgYWxsIHRoYXQgd291bGQgYmUgbmVlZGVkIGlzIHRvCi0jIG1ha2Ugc3VyZSBhICItc2VyaWFsIiBpcyB0aGVyZS4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0IHdoZW4gIi1zZXJpYWwiIGlzCi0jIHNwZWNpZmllZCwgaXQgaWdub3JlcyB0aGUgZGVmYXVsdCBzZXJpYWwgcG9ydCB0aGF0IGlzIG5vcm1hbGx5IGFkZGVkLgotIyBTbyBoZXJlIHdlIG1ha2Ugc3VyZSB0byBhZGQgdHdvIC1zZXJpYWwgaWYgdGhlcmUgYXJlIG5vbmUuIEFuZCBvbmx5IG9uZQotIyBpZiB0aGVyZSBpcyBvbmUgLXNlcmlhbCBhbHJlYWR5LgotTlVNX1NFUklBTF9PUFRTPWBlY2hvICRRRU1VT1BUSU9OUyAkU0VSSUFMT1BUUyAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgfCBzZWQgLWUgJ3MvIC9cbi9nJyB8IGdyZXAgLS1jb3VudCAtLSAtc2VyaWFsYAotCi1pZiBbICIkTlVNX1NFUklBTF9PUFRTIiA9ICIwIiBdOyB0aGVuCi0gICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUICRGSVJTVF9TRVJJQUxfT1BUICRTRUNPTkRfU0VSSUFMX09QVCIKLWVsaWYgWyAiJE5VTV9TRVJJQUxfT1BUUyIgPSAiMSIgXTsgdGhlbgotICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJFNDUklQVF9RRU1VX0VYVFJBX09QVCAkU0VDT05EX1NFUklBTF9PUFQiCi1maQotCi1lY2hvICJSdW5uaW5nICRRRU1VLi4uIgotIyAtbm8tcmVib290IGlzIGEgbWFuZGF0b3J5IG9wdGlvbiAtIHNlZSBidWcgIzEwMAotaWYgWyAiJElTX1ZNIiA9ICJ0cnVlIiBdOyB0aGVuCi0gICAgIyBDaGVjayByb290PS9kZXYvc2RYIG9yIHJvb3Q9L2Rldi92ZFgKLSAgICBbICEgLWUgIiRWTSIgXSAmJiBlcnJvciAiVk0gaW1hZ2UgaXMgbm90IGZvdW5kISIKLSAgICBpZiBncmVwIC1xICdyb290PS9kZXYvc2QnICRWTTsgdGhlbgotICAgICAgICBlY2hvICJVc2luZyBzY3NpIGRyaXZlIgotICAgICAgICBWTV9EUklWRT0iLWRyaXZlIGlmPW5vbmUsaWQ9aGQsZmlsZT0kVk0gLWRldmljZSB2aXJ0aW8tc2NzaS1wY2ksaWQ9c2NzaSAtZGV2aWNlIHNjc2ktaGQsZHJpdmU9aGQiCi0gICAgZWxpZiBncmVwIC1xICdyb290PS9kZXYvaGQnICRWTTsgdGhlbgotICAgICAgICBlY2hvICJVc2luZyBpZGUgZHJpdmUiCi0gICAgICAgIFZNX0RSSVZFPSIkVk0iCi0gICAgZWxzZQotICAgICAgICBlY2hvICJVc2luZyB2aXJ0aW8gYmxvY2sgZHJpdmUiCi0gICAgICAgIFZNX0RSSVZFPSItZHJpdmUgaWY9dmlydGlvLGZpbGU9JFZNIgotICAgIGZpCi0gICAgUUVNVV9GSVJFPSIkUUVNVUJJTiAkVk1fRFJJVkUgJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIgotICAgIGVjaG8gJFFFTVVfRklSRQotICAgIExEX1BSRUxPQUQ9IiRHTF9MRF9QUkVMT0FEIiAkUUVNVV9GSVJFCi1lbGlmIFsgIiRGU1RZUEUiID0gImlzbyIgLW8gIiRGU1RZUEUiID0gIndpYyIgXTsgdGhlbgotICAgIFFFTVVfRklSRT0iJFFFTVVCSU4gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIgotICAgIGVjaG8gJFFFTVVfRklSRQotICAgIExEX1BSRUxPQUQ9IiRHTF9MRF9QUkVMT0FEIiAkUUVNVV9GSVJFCi1lbHNlCi0gICAgUUVNVV9GSVJFPSIkUUVNVUJJTiAta2VybmVsICRLRVJORUwgJFFFTVVPUFRJT05TICRTTElSUF9DTUQgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiCi0gICAgZWNobyAkUUVNVV9GSVJFIC1hcHBlbmQgJyInJEtFUk5DTURMSU5FICRTQ1JJUFRfS0VSTkVMX09QVCciJwotICAgIExEX1BSRUxPQUQ9IiRHTF9MRF9QUkVMT0FEIiAkUUVNVV9GSVJFIC1hcHBlbmQgIiRLRVJOQ01ETElORSAkU0NSSVBUX0tFUk5FTF9PUFQiCi1maQotcmV0PSQ/Ci1pZiBbICIkU0xJUlBfRU5BQkxFRCIgIT0gInllcyIgXTsgdGhlbgotICAgICAgICBjbGVhbnVwCi1maQotCi0jc2V0IHRoZSBvcmlnaW5hbCBzdHR5IHZhbHVlcyBiZWZvcmUgZXhpdAotc3R0eSAke09SSUdfU1RUWX0KLXRyYXAgLSBJTlQgVEVSTSBRVUlUCi0KLXJldHVybiAkcmV0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9zZW5kLWVycm9yLXJlcG9ydCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtZXJyb3ItcmVwb3J0CmluZGV4IGEyOWZlZmYuLjE1YjVlODQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtZXJyb3ItcmVwb3J0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtZXJyb3ItcmVwb3J0CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgU2VuZHMgYW4gZXJyb3IgcmVwb3J0IChpZiB0aGUgcmVwb3J0LWVycm9yIGNsYXNzIHdhcyBlbmFibGVkKSB0byBhCiAjIHJlbW90ZSBzZXJ2ZXIuCkBAIC03LDcgKzcsNyBAQAogIyBBdXRob3I6IEFuZHJlZWEgUHJvY2EgPGFuZHJlZWEuYi5wcm9jYUBpbnRlbC5jb20+CiAjIEF1dGhvcjogTWljaGFlbCBXb29kIDxtaWNoYWVsLmcud29vZEBpbnRlbC5jb20+CiAKLWltcG9ydCB1cmxsaWIyCitpbXBvcnQgdXJsbGliLnJlcXVlc3QsIHVybGxpYi5lcnJvcgogaW1wb3J0IHN5cwogaW1wb3J0IGpzb24KIGltcG9ydCBvcwpAQCAtMjUsMTAgKzI1LDEwIEBACiBsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnKQogCiBkZWYgZ2V0UGF5bG9hZExpbWl0KHVybCk6Ci0gICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KHVybCwgTm9uZSkKKyAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVybCwgTm9uZSkKICAgICB0cnk6Ci0gICAgICAgIHJlc3BvbnNlID0gdXJsbGliMi51cmxvcGVuKHJlcSkKLSAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlOgorICAgICAgICByZXNwb25zZSA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQorICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuVVJMRXJyb3IgYXMgZToKICAgICAgICAgIyBVc2UgdGhpcyBvcHBvcnR1bml0eSB0byBiYWlsIG91dCBpZiB3ZSBjYW4ndCBldmVuIGNvbnRhY3QgdGhlIHNlcnZlcgogICAgICAgICBsb2cuZXJyb3IoIkNvdWxkIG5vdCBjb250YWN0IHNlcnZlcjogIiArIHVybCkKICAgICAgICAgbG9nLmVycm9yKGUucmVhc29uKQpAQCAtNDQsMTIgKzQ0LDEyIEBACiAKIGRlZiBhc2tfZm9yX2NvbnRhY3RkZXRhaWxzKCk6CiAgICAgcHJpbnQoIlBsZWFzZSBlbnRlciB5b3VyIG5hbWUgYW5kIHlvdXIgZW1haWwgKG9wdGlvbmFsbHkpLCB0aGV5J2xsIGJlIHNhdmVkIGluIHRoZSBmaWxlIHlvdSBzZW5kLiIpCi0gICAgdXNlcm5hbWUgPSByYXdfaW5wdXQoIk5hbWUgKHJlcXVpcmVkKTogIikKLSAgICBlbWFpbCA9IHJhd19pbnB1dCgiRS1tYWlsIChub3QgcmVxdWlyZWQpOiAiKQorICAgIHVzZXJuYW1lID0gaW5wdXQoIk5hbWUgKHJlcXVpcmVkKTogIikKKyAgICBlbWFpbCA9IGlucHV0KCJFLW1haWwgKG5vdCByZXF1aXJlZCk6ICIpCiAgICAgcmV0dXJuIHVzZXJuYW1lLCBlbWFpbAogCiBkZWYgZWRpdF9jb250ZW50KGpzb25fZmlsZV9wYXRoKToKLSAgICBlZGl0ID0gcmF3X2lucHV0KCJSZXZpZXcgaW5mb3JtYXRpb24gYmVmb3JlIHNlbmRpbmc/ICh5L24pOiAiKQorICAgIGVkaXQgPSBpbnB1dCgiUmV2aWV3IGluZm9ybWF0aW9uIGJlZm9yZSBzZW5kaW5nPyAoeS9uKTogIikKICAgICBpZiAneScgaW4gZWRpdCBvciAnWScgaW4gZWRpdDoKICAgICAgICAgZWRpdG9yID0gb3MuZW52aXJvbi5nZXQoJ0VESVRPUicsIE5vbmUpCiAgICAgICAgIGlmIGVkaXRvcjoKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICBpZiBtYXhfbG9nX3NpemUgIT0gMDoKICAgICAgICAgICAgIGZvciBmYWlsIGluIGpzb25kYXRhWydmYWlsdXJlcyddOgogICAgICAgICAgICAgICAgIGlmIGxlbihmYWlsWydsb2cnXSkgPiBtYXhfbG9nX3NpemU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJUcnVuY2F0aW5nIGxvZyB0byBhbGxvdyBmb3IgdXBsb2FkIgorICAgICAgICAgICAgICAgICAgICBwcmludCgiVHJ1bmNhdGluZyBsb2cgdG8gYWxsb3cgZm9yIHVwbG9hZCIpCiAgICAgICAgICAgICAgICAgICAgIGZhaWxbJ2xvZyddID0gZmFpbFsnbG9nJ11bLW1heF9sb2dfc2l6ZTpdCiAKICAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMoanNvbmRhdGEsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICB3aXRoIG9wZW4oYXJncy5lcnJvcl9maWxlLCAncicpIGFzIGpzb25fZnA6CiAgICAgICAgICAgICBkYXRhID0ganNvbl9mcC5yZWFkKCkKIAotICAgIHJldHVybiBkYXRhCisgICAgcmV0dXJuIGRhdGEuZW5jb2RlKCd1dGYtOCcpCiAKIAogZGVmIHNlbmRfZGF0YShkYXRhLCBhcmdzKToKQEAgLTEzNiwxNCArMTM2LDE0IEBACiAgICAgZWxzZToKICAgICAgICAgdXJsID0gImh0dHA6Ly8iK2FyZ3Muc2VydmVyKyIvQ2xpZW50UG9zdC8iCiAKLSAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsLCBkYXRhPWRhdGEsIGhlYWRlcnM9aGVhZGVycykKKyAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVybCwgZGF0YT1kYXRhLCBoZWFkZXJzPWhlYWRlcnMpCiAgICAgdHJ5OgotICAgICAgICByZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihyZXEpCi0gICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBlOgorICAgICAgICByZXNwb25zZSA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQorICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yIGFzIGU6CiAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZS5yZWFzb24pCiAgICAgICAgIHN5cy5leGl0KDEpCiAKLSAgICBwcmludCByZXNwb25zZS5yZWFkKCkKKyAgICBwcmludChyZXNwb25zZS5yZWFkKCkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgIGFyZ3MgPSBhcmdfcGFyc2UucGFyc2VfYXJncygpCiAKICAgICBpZiAoYXJncy5qc29uID09IEZhbHNlKToKLSAgICAgICAgcHJpbnQgIlByZXBhcmluZyB0byBzZW5kIGVycm9ycyB0bzogIithcmdzLnNlcnZlcgorICAgICAgICBwcmludCgiUHJlcGFyaW5nIHRvIHNlbmQgZXJyb3JzIHRvOiAiK2FyZ3Muc2VydmVyKQogCiAgICAgZGF0YSA9IHByZXBhcmVfZGF0YShhcmdzKQogICAgIHNlbmRfZGF0YShkYXRhLCBhcmdzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiYjAzOTFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3N3YWJiZXItc3RyYWNlLWF0dGFjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2VzcwotCi0jIERldGFjaCBmcm9tIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBhbmQgcGFyZW50IHByb2Nlc3MgYnkgZm9ya2luZyB0d2ljZSB0byBkYWVtb25pemUgb3Vyc2VsdmVzLAotIyB0aGVuIHJ1biB0aGUgY29tbWFuZCBwYXNzZWQgYXMgYXJndlsxXS4gU2VuZCBsb2cgZGF0YSB0byBhcmd2WzJdLgotCi1waWQgPSBvcy5mb3JrKCkKLWlmIChwaWQgPT0gMCk6Ci0gICAgb3Muc2V0c2lkKCkKLSAgICBwaWQgPSBvcy5mb3JrKCkKLSAgICBpZiAocGlkICE9IDApOgotICAgICAgICBvcy5fZXhpdCgwKQotZWxzZToKLSAgICBzeXMuZXhpdCgpCi0KLQotc2kgPSBmaWxlKG9zLmRldm51bGwsICdyJykKLXNvID0gZmlsZShzeXMuYXJndlsyXSwgJ3cnKQotc2UgPSBzbwotCi0jIFJlcGxhY2UgdGhvc2UgZmRzIHdpdGggb3VyIG93bgotb3MuZHVwMihzaS5maWxlbm8oKSwgc3lzLnN0ZGluLmZpbGVubygpKQotb3MuZHVwMihzby5maWxlbm8oKSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKLW9zLmR1cDIoc2UuZmlsZW5vKCksIHN5cy5zdGRlcnIuZmlsZW5vKCkpCi0KLXJldCA9IHN1YnByb2Nlc3MuY2FsbChzeXMuYXJndlsxXSwgc2hlbGw9VHJ1ZSkKLQotb3MuX2V4aXQocmV0KQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9zeXNyb290LXJlbGF0aXZlbGlua3MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9zeXNyb290LXJlbGF0aXZlbGlua3MucHkKaW5kZXggYWMyNjM2Ny4uZTQ0ZWJhMiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3lzcm9vdC1yZWxhdGl2ZWxpbmtzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtZGVwZW5kZW5jaWVzLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2gKaW5kZXggMDE3MDk0Ny4uMDBjNTBlMCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2gKQEAgLTE0MSw3ICsxNDEsNyBAQAogICBiaXRiYWtlIC1rICR0YXJnZXRzIDI+JjEgfCB0ZWUgLWEgJHtPVVRQVVQxfS9jb21wbGV0ZS5sb2cKICAgUkVTVUxUKz0ke1BJUEVTVEFUVVNbMF19CiAgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICR7T1VUUFVUMX0vY29tcGxldGUubG9nID4gJHtPVVRQVVQxfS9mYWlsZWQtdGFza3MubG9nCi0gIGNhdCAke09VVFBVVDF9L2ZhaWxlZC10YXNrcy5sb2cgfCBzZWQgJ3NALiovQEBnOyBzQF8uKkBAZzsgc0BcLmJiLCAuKkBAZycgfCBzb3J0IC11ID4gJHtPVVRQVVQxfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgY2F0ICR7T1VUUFVUMX0vZmFpbGVkLXRhc2tzLmxvZyB8IHNlZCAnc0AuKi9AQGc7IHNAXy4qQEBnOyBzQFwuYmIsIC4qQEBnOyBzQFwuYmI7LipAQGcnIHwgc29ydCAtdSA+ICR7T1VUUFVUMX0vZmFpbGVkLXJlY2lwZXMubG9nCiB9CiAKIGJ1aWxkX2V2ZXJ5X3JlY2lwZSgpIHsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgUkVTVUxUKz0ke1JFQ0lQRV9SRVNVTFR9CiAgICAgICBtdiAke09VVFBVVEJ9LyR7cmVjaXBlfS5sb2cgJHtPVVRQVVRCfS9mYWlsZWQvCiAgICAgICBncmVwICJFUlJPUjogVGFzay4qZmFpbGVkIiAgJHtPVVRQVVRCfS9mYWlsZWQvJHtyZWNpcGV9LmxvZyB8IHRlZSAtYSAke09VVFBVVEJ9L2ZhaWxlZC10YXNrcy5sb2cKLSAgICAgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICAke09VVFBVVEJ9L2ZhaWxlZC8ke3JlY2lwZX0ubG9nIHwgc2VkICdzQC4qL0BAZzsgc0BfLipAQGc7IHNAXC5iYiwgLipAQGcnID4+ICR7T1VUUFVUQn0vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICBncmVwICJFUlJPUjogVGFzay4qZmFpbGVkIiAgJHtPVVRQVVRCfS9mYWlsZWQvJHtyZWNpcGV9LmxvZyB8IHNlZCAnc0AuKi9AQGc7IHNAXy4qQEBnOyBzQFwuYmIsIC4qQEBnOyBzQFwuYmI7LipAQGcnID4+ICR7T1VUUFVUQn0vZmFpbGVkLXJlY2lwZXMubG9nCiAgICAgICAjIGFuZCBhcHBlbmQgYWxzbyAke3JlY2lwZX0gaW4gY2FzZSB0aGUgZmFpbGVkIHRhc2sgd2FzIGZyb20gc29tZSBkZXBlbmRlbmN5CiAgICAgICBlY2hvICR7cmVjaXBlfSA+PiAke09VVFBVVEJ9L2ZhaWxlZC1yZWNpcGVzLmxvZwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVtb3RlLWltYWdlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UKaW5kZXggOWM1YjAxNS4uMjdiMWNhZSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KICMKQEAgLTkyLDEzICs5MiwxMSBAQAogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2tpcC1kb3dubG9hZCcsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJza2lwX2Rvd25sb2FkIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nU2tpcCBkb3dubG9hZGluZyB0aGUgaW1hZ2VzIGNvbXBsZXRlbHkuIFRoaXMgbmVlZHMgdGhlIGNvcnJlY3QgZmlsZXMgdG8gYmUgcHJlc2VudCBpbiB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgdGFyZ2V0IHByb2ZpbGUuJykKICAgICByZXR1cm4gcGFyc2VyCiAKLWNsYXNzIEJhc2VUYXJnZXRQcm9maWxlKG9iamVjdCk6CitjbGFzcyBCYXNlVGFyZ2V0UHJvZmlsZShvYmplY3QsIG1ldGFjbGFzcz1BQkNNZXRhKToKICAgICAiIiIKICAgICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIG1ldGEgcHJvZmlsZSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQgKE1BQ0hJTkUgdHlwZSArIGltYWdlIHR5cGUpLgogICAgICIiIgogCi0gICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKLQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV90eXBlKToKICAgICAgICAgc2VsZi5pbWFnZV90eXBlID0gaW1hZ2VfdHlwZQogCkBAIC0xOTEsMTMgKzE4OSwxMSBAQAogICAgICAgICByZXR1cm4gY29udHJvbGxlci5nZXRfZXh0cmFfZmlsZXMoKQogCiAKLWNsYXNzIEJhc2VSZXBvUHJvZmlsZShvYmplY3QpOgorY2xhc3MgQmFzZVJlcG9Qcm9maWxlKG9iamVjdCwgbWV0YWNsYXNzPUFCQ01ldGEpOgogICAgICIiIgogICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbWV0YSBwcm9maWxlIGZvciBhbiBpbWFnZXMgcmVwb3NpdG9yeS4KICAgICAiIiIKIAotICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb2xpbmssIGxvY2FsZGlyKToKICAgICAgICAgc2VsZi5sb2NhbGRpciA9IGxvY2FsZGlyCiAgICAgICAgIHNlbGYucmVwb2xpbmsgPSByZXBvbGluawpAQCAtMjg5LDcgKzI4NSw3IEBACiAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoIiVzIC1jIHRlc3RpbWFnZSIgJSBpbWFnZV90eXBlLCBpZ25vcmVfc3RhdHVzPVRydWUsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykKICAgICAgICAgdGVzdGltYWdlX3Jlc3VsdHMgPSBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJUIiwgaW1hZ2VfdHlwZSksICJsb2cuZG9fdGVzdGltYWdlIikpCiAgICAgICAgIGxvZy5pbmZvKCdSdW50aW1lIHRlc3RzIHJlc3VsdHMgZm9yICVzOicgJSBpbWFnZV90eXBlKQotICAgICAgICBwcmludCB0ZXN0aW1hZ2VfcmVzdWx0cworICAgICAgICBwcmludCh0ZXN0aW1hZ2VfcmVzdWx0cykKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgIyBTdGFydCB0aGUgcHJvY2VkdXJlIQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9kaXJzaXplLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9kaXJzaXplLnB5CmluZGV4IDQwZmY0YWIuLmRkY2NjNWEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3RpbnkvZGlyc2l6ZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2RpcnNpemUucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTUyLDI2ICs1MiwyMiBAQAogICAgICAgICBzZWxmLnNpemUgPSAwCiAgICAgICAgIHNlbGYucmVjb3JkcyA9IFtdCiAKLSAgICBkZWYgX19jbXBfXyh0aGlzLCB0aGF0KToKKyAgICBkZWYgX19sdF9fKHRoaXMsIHRoYXQpOgogICAgICAgICBpZiB0aGF0IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRoYXQsIFJlY29yZCk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKICAgICAgICAgaWYgbGVuKHRoaXMucmVjb3JkcykgPiAwIGFuZCBsZW4odGhhdC5yZWNvcmRzKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGlmIGxlbih0aGlzLnJlY29yZHMpID09IDAgYW5kIGxlbih0aGF0LnJlY29yZHMpID4gMDoKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGlmIHRoaXMuc2l6ZSA8IHRoYXQuc2l6ZToKLSAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGlmIHRoaXMuc2l6ZSA+IHRoYXQuc2l6ZToKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHJldHVybiAwCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBzaG93KHNlbGYsIG1pbnNpemUpOgogICAgICAgICB0b3RhbCA9IDAKICAgICAgICAgaWYgc2VsZi5zaXplIDw9IG1pbnNpemU6CiAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBwcmludCAiJTEwZCAlcyIgJSAoc2VsZi5zaXplLCBzZWxmLnBhdGgpCisgICAgICAgIHByaW50KCIlMTBkICVzIiAlIChzZWxmLnNpemUsIHNlbGYucGF0aCkpCiAgICAgICAgIGZvciByIGluIHNlbGYucmVjb3JkczoKICAgICAgICAgICAgIHRvdGFsICs9IHIuc2hvdyhtaW5zaXplKQogICAgICAgICBpZiBsZW4oc2VsZi5yZWNvcmRzKSA9PSAwOgpAQCAtODUsOCArODEsOCBAQAogICAgICAgICBtaW5zaXplID0gaW50KHN5cy5hcmd2WzFdKQogICAgIHJvb3RmcyA9IFJlY29yZC5jcmVhdGUoIi4iKQogICAgIHRvdGFsID0gcm9vdGZzLnNob3cobWluc2l6ZSkKLSAgICBwcmludCAiRGlzcGxheWVkICVkLyVkIGJ5dGVzICglLjJmJSUpIiAlIFwKLSAgICAgICAgICAodG90YWwsIHJvb3Rmcy5zaXplLCAxMDAgKiBmbG9hdCh0b3RhbCkgLyByb290ZnMuc2l6ZSkKKyAgICBwcmludCgiRGlzcGxheWVkICVkLyVkIGJ5dGVzICglLjJmJSUpIiAlIFwKKyAgICAgICAgICAodG90YWwsIHJvb3Rmcy5zaXplLCAxMDAgKiBmbG9hdCh0b3RhbCkgLyByb290ZnMuc2l6ZSkpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rpbnkva3NpemUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2tzaXplLnB5CmluZGV4IDQwMDZmMmYuLmI5ZDJiMTkgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rpbnkva3NpemUucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9rc2l6ZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgogIyBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjgsMTYgKzI4LDE0IEBACiBpbXBvcnQgZ2V0b3B0CiBpbXBvcnQgb3MKIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgKgotZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KLQogCiBkZWYgdXNhZ2UoKToKICAgICBwcm9nID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKLSAgICBwcmludCAnVXNhZ2U6ICVzIFtPUFRJT05dLi4uJyAlIChwcm9nKQotICAgIHByaW50ICcgIC1kLCAgICAgICAgICAgICAgICAgZGlzcGxheSBhbiBhZGRpdGlvbmFsIGxldmVsIG9mIGRyaXZlcnMgZGV0YWlsJwotICAgIHByaW50ICcgIC1oLCAtLWhlbHAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQnCi0gICAgcHJpbnQgJycKLSAgICBwcmludCAnUnVuICVzIGZyb20gdGhlIHRvcC1sZXZlbCBMaW51eCBrZXJuZWwgYnVpbGQgZGlyZWN0b3J5LicgJSAocHJvZykKKyAgICBwcmludCgnVXNhZ2U6ICVzIFtPUFRJT05dLi4uJyAlIHByb2cpCisgICAgcHJpbnQoJyAgLWQsICAgICAgICAgICAgICAgICBkaXNwbGF5IGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgZHJpdmVycyBkZXRhaWwnKQorICAgIHByaW50KCcgIC1oLCAtLWhlbHAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQnKQorICAgIHByaW50KCcnKQorICAgIHByaW50KCdSdW4gJXMgZnJvbSB0aGUgdG9wLWxldmVsIExpbnV4IGtlcm5lbCBidWlsZCBkaXJlY3RvcnkuJyAlIHByb2cpCiAKIAogY2xhc3MgU2l6ZXM6CkBAIC01NSw4ICs1Myw4IEBACiAgICAgICAgICAgICBzZWxmLnRleHQgPSBzZWxmLmRhdGEgPSBzZWxmLmJzcyA9IHNlbGYudG90YWwgPSAwCiAKICAgICBkZWYgc2hvdyhzZWxmLCBpbmRlbnQ9IiIpOgotICAgICAgICBwcmludCAiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKLSAgICAgICAgICAgICAgKGluZGVudCtzZWxmLnRpdGxlLCBzZWxmLnRvdGFsLCBzZWxmLnRleHQsIHNlbGYuZGF0YSwgc2VsZi5ic3MpCisgICAgICAgIHByaW50KCIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAorICAgICAgICAgICAgICAoaW5kZW50K3NlbGYudGl0bGUsIHNlbGYudG90YWwsIHNlbGYudGV4dCwgc2VsZi5kYXRhLCBzZWxmLmJzcykpCiAKIAogY2xhc3MgUmVwb3J0OgpAQCAtNjYsNyArNjQsNyBAQAogCiAgICAgICAgIHAgPSBQb3BlbigibHMgIiArIHBhdGggKyAiLyoubyB8IGdyZXAgLXYgYnVpbHQtaW4ubyIsCiAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCi0gICAgICAgIGdsb2IgPSBqb2luKHAuY29tbXVuaWNhdGUoKVswXS5zcGxpdGxpbmVzKCkpCisgICAgICAgIGdsb2IgPSAnICcuam9pbihwLmNvbW11bmljYXRlKClbMF0uc3BsaXRsaW5lcygpKQogICAgICAgICBvcmVwb3J0ID0gUmVwb3J0KGdsb2IsIHBhdGggKyAiLyoubyIpCiAgICAgICAgIG9yZXBvcnQuc2l6ZXMudGl0bGUgPSBwYXRoICsgIi8qLm8iCiAgICAgICAgIHIucGFydHMuYXBwZW5kKG9yZXBvcnQpCkBAIC0xMDEsMjIgKzk5LDIyIEBACiAKICAgICBkZWYgc2hvdyhzZWxmLCBpbmRlbnQ9IiIpOgogICAgICAgICBydWxlID0gc3RyLmxqdXN0KGluZGVudCwgODAsICctJykKLSAgICAgICAgcHJpbnQgIiUtMzJzICUxMHMgfCAlMTBzICUxMHMgJTEwcyIgJSBcCi0gICAgICAgICAgICAgIChpbmRlbnQrc2VsZi50aXRsZSwgInRvdGFsIiwgInRleHQiLCAiZGF0YSIsICJic3MiKQotICAgICAgICBwcmludCBydWxlCisgICAgICAgIHByaW50KCIlLTMycyAlMTBzIHwgJTEwcyAlMTBzICUxMHMiICUgXAorICAgICAgICAgICAgICAoaW5kZW50K3NlbGYudGl0bGUsICJ0b3RhbCIsICJ0ZXh0IiwgImRhdGEiLCAiYnNzIikpCisgICAgICAgIHByaW50KHJ1bGUpCiAgICAgICAgIHNlbGYuc2l6ZXMuc2hvdyhpbmRlbnQpCi0gICAgICAgIHByaW50IHJ1bGUKKyAgICAgICAgcHJpbnQocnVsZSkKICAgICAgICAgZm9yIHAgaW4gc2VsZi5wYXJ0czoKICAgICAgICAgICAgIGlmIHAuc2l6ZXMudG90YWwgPiAwOgogICAgICAgICAgICAgICAgIHAuc2l6ZXMuc2hvdyhpbmRlbnQpCi0gICAgICAgIHByaW50IHJ1bGUKLSAgICAgICAgcHJpbnQgIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCisgICAgICAgIHByaW50KHJ1bGUpCisgICAgICAgIHByaW50KCIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAogICAgICAgICAgICAgICAoaW5kZW50KyJzdW0iLCBzZWxmLnRvdGFsc1sidG90YWwiXSwgc2VsZi50b3RhbHNbInRleHQiXSwKLSAgICAgICAgICAgICAgIHNlbGYudG90YWxzWyJkYXRhIl0sIHNlbGYudG90YWxzWyJic3MiXSkKLSAgICAgICAgcHJpbnQgIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCisgICAgICAgICAgICAgICBzZWxmLnRvdGFsc1siZGF0YSJdLCBzZWxmLnRvdGFsc1siYnNzIl0pKQorICAgICAgICBwcmludCgiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKICAgICAgICAgICAgICAgKGluZGVudCsiZGVsdGEiLCBzZWxmLmRlbHRhc1sidG90YWwiXSwgc2VsZi5kZWx0YXNbInRleHQiXSwKLSAgICAgICAgICAgICAgIHNlbGYuZGVsdGFzWyJkYXRhIl0sIHNlbGYuZGVsdGFzWyJic3MiXSkKLSAgICAgICAgcHJpbnQgIlxuIgorICAgICAgICAgICAgICAgc2VsZi5kZWx0YXNbImRhdGEiXSwgc2VsZi5kZWx0YXNbImJzcyJdKSkKKyAgICAgICAgcHJpbnQoIlxuIikKIAogICAgIGRlZiBfX2NtcF9fKHRoaXMsIHRoYXQpOgogICAgICAgICBpZiB0aGF0IGlzIE5vbmU6CkBAIC0xMzMsOCArMTMxLDggQEAKIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJkaCIsIFsiaGVscCJdKQotICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IsIGVycjoKLSAgICAgICAgcHJpbnQgJyVzJyAlIHN0cihlcnIpCisgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciBhcyBlcnI6CisgICAgICAgIHByaW50KCclcycgJSBzdHIoZXJyKSkKICAgICAgICAgdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCgyKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy92ZXJpZnktYmFzaGlzbXMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy92ZXJpZnktYmFzaGlzbXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDc0MWUxOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3ZlcmlmeS1iYXNoaXNtcwpAQCAtMCwwICsxLDExNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitpbXBvcnQgc3lzLCBvcywgc3VicHJvY2VzcywgcmUsIHNodXRpbAorCit3aGl0ZWxpc3QgPSAoCisgICAgIyB0eXBlIGlzIHN1cHBvcnRlZCBieSBkYXNoCisgICAgJ2lmIHR5cGUgc3lzdGVtY3RsID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4nLAorICAgICdpZiB0eXBlIHN5c3RlbWQtdG1wZmlsZXMgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbicsCisgICAgJ2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbicsCisgICAgJ2NvbW1hbmQgLXYnLAorICAgICMgSE9TVE5BTUUgaXMgc2V0IGxvY2FsbHkKKyAgICAnYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIicsCisgICAgIyBGYWxzZS1wb3NpdGl2ZSwgbWF0Y2ggaXMgYSBncmVwIG5vdCBzaGVsbCBleHByZXNzaW9uCisgICAgJ2dyZXAgIl4kZ3JvdXBuYW1lOlteOl0qOlteOl0qOlxcKFteLF0qLFxcKSokdXNlcm5hbWVcXCgsW14sXSpcXCkqIicsCisgICAgIyBUT0RPIHZlcmlmeSBkYXNoJ3MgJy4gc2NyaXB0IGFyZ3MnIGJlaGF2aW91cgorICAgICcuICR0YXJnZXRfc2RrX2Rpci8ke29lX2luaXRfYnVpbGRfZW52X3BhdGh9ICR0YXJnZXRfc2RrX2RpciA+PiAkTE9HRklMRScKKyAgICApCisKK2RlZiBpc193aGl0ZWxpc3RlZChzKToKKyAgICBmb3IgdyBpbiB3aGl0ZWxpc3Q6CisgICAgICAgIGlmIHcgaW4gczoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBwcm9jZXNzKHJlY2lwZSwgZnVuY3Rpb24sIHNjcmlwdCk6CisgICAgaW1wb3J0IHRlbXBmaWxlCisKKyAgICBpZiBub3Qgc2NyaXB0LnN0YXJ0c3dpdGgoIiMhIik6CisgICAgICAgIHNjcmlwdCA9ICIjISAvYmluL3NoXG4iICsgc2NyaXB0CisKKyAgICBmbiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSJ3K3QiKQorICAgIGZuLndyaXRlKHNjcmlwdCkKKyAgICBmbi5mbHVzaCgpCisKKyAgICB0cnk6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCgiY2hlY2tiYXNoaXNtcy5wbCIsIGZuLm5hbWUpLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAjIE5vIGJhc2hpc21zLCBzbyBqdXN0IHJldHVybgorICAgICAgICByZXR1cm4KKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgIyBUT0RPIGNoZWNrIGV4aXQgY29kZSBpcyAxCisKKyAgICAgICAgIyBSZXBsYWNlIHRoZSB0ZW1wb3JhcnkgZmlsZW5hbWUgd2l0aCB0aGUgZnVuY3Rpb24gYW5kIHNwbGl0IGl0CisgICAgICAgIG91dHB1dCA9IGUub3V0cHV0LnJlcGxhY2UoZm4ubmFtZSwgZnVuY3Rpb24pLnNwbGl0bGluZXMoKQorICAgICAgICBpZiBsZW4ocmVzdWx0cykgJSAyICE9IDA6CisgICAgICAgICAgICBwcmludCgiVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBjaGVja2Jhc2hpc206ICVzIiAlIHN0cihvdXRwdXQpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBUdXJuIHRoZSBvdXRwdXQgaW50byBhIGxpc3Qgb2YgKG1lc3NhZ2UsIHNvdXJjZSkgdmFsdWVzCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgICMgQ2hlY2sgdGhlIHJlc3VsdHMgYWdhaW5zdCB0aGUgd2hpdGVsaXN0CisgICAgICAgIGZvciBtZXNzYWdlLCBzb3VyY2UgaW4gemlwKG91dHB1dFswOjoyXSwgb3V0cHV0WzE6OjJdKToKKyAgICAgICAgICAgIGlmIG5vdCBpc193aGl0ZWxpc3RlZChzb3VyY2UpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKG1lc3NhZ2UsIHNvdXJjZSkpCisgICAgICAgIHJldHVybiByZXN1bHQKKworZGVmIGdldF90aW5mb2lsKCk6CisgICAgc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorICAgIGxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCisgICAgc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKyAgICBpbXBvcnQgc2NyaXB0cGF0aAorICAgIHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKCkKKyAgICAjIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKyAgICByZXR1cm4gdGluZm9pbAorCitpZiBfX25hbWVfXz09J19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaWYgc2h1dGlsLndoaWNoKCJjaGVja2Jhc2hpc21zLnBsIikgaXMgTm9uZToKKyAgICAgICAgcHJpbnQoIkNhbm5vdCBmaW5kIGNoZWNrYmFzaGlzbXMucGwgb24gJFBBVEgiKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgdGluZm9pbCA9IGdldF90aW5mb2lsKCkKKworICAgICMgVGhpcyBpcyBvbmx5IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYW5kIHNob3VsZCBpdGVyYXRlIG92ZXIKKyAgICAjIHJlY2lwZWNhY2hlcyB0byBoYW5kbGUgbXVsdGljb25maWcgZW52aXJvbm1lbnRzCisgICAgcGtnX3BuID0gdGluZm9pbC5jb29rZXIucmVjaXBlY2FjaGVzWyIiXS5wa2dfcG4KKworICAgICMgVE9ETzogdXNlIGFyZ3BhcnNlIGFuZCBoYXZlIC0taGVscAorICAgIGlmIGxlbihzeXMuYXJndikgPiAxOgorICAgICAgICBpbml0aWFsX3BucyA9IHN5cy5hcmd2WzE6XQorICAgIGVsc2U6CisgICAgICAgIGluaXRpYWxfcG5zID0gc29ydGVkKHBrZ19wbikKKworICAgIHBucyA9IFtdCisgICAgcHJpbnQoIkdlbmVyYXRpbmcgZmlsZSBsaXN0Li4uIikKKyAgICBmb3IgcG4gaW4gaW5pdGlhbF9wbnM6CisgICAgICAgIGZvciBmbiBpbiBwa2dfcG5bcG5dOgorICAgICAgICAgICAgIyBUaGVyZSdzIG5vIHBvaW50IGNoZWNraW5nIG11bHRpcGxlIEJCQ0xBU1NFWFRFTkRlZCB2YXJpYW50cyBvZiB0aGUgc2FtZSByZWNpcGUKKyAgICAgICAgICAgIHJlYWxmbiwgXywgXyA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oZm4pCisgICAgICAgICAgICBpZiByZWFsZm4gbm90IGluIHBuczoKKyAgICAgICAgICAgICAgICBwbnMuYXBwZW5kKHJlYWxmbikKKworCisgICAgZGVmIGZ1bmMoZm4pOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBkYXRhID0gdGluZm9pbC5wYXJzZV9yZWNpcGVfZmlsZShmbikKKyAgICAgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKKyAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyRmxhZyhrZXksICJmdW5jIiwgVHJ1ZSkgYW5kIG5vdCBkYXRhLmdldFZhckZsYWcoa2V5LCAicHl0aG9uIiwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgc2NyaXB0ID0gZGF0YS5nZXRWYXIoa2V5LCBGYWxzZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2NyaXB0OiBjb250aW51ZQorICAgICAgICAgICAgICAgICNwcmludCAoIiVzOiVzIiAlIChmbiwga2V5KSkKKyAgICAgICAgICAgICAgICByID0gcHJvY2Vzcyhmbiwga2V5LCBzY3JpcHQpCisgICAgICAgICAgICAgICAgaWYgcjogcmVzdWx0LmV4dGVuZChyKQorICAgICAgICByZXR1cm4gZm4sIHJlc3VsdAorCisgICAgcHJpbnQoIlNjYW5uaW5nIHNjcmlwdHMuLi5cbiIpCisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgpCisgICAgZm9yIHBuLHJlc3VsdHMgaW4gcG9vbC5pbWFwKGZ1bmMsIHBucyk6CisgICAgICAgIGlmIHJlc3VsdHM6CisgICAgICAgICAgICBwcmludChwbikKKyAgICAgICAgICAgIGZvciBtZXNzYWdlLHNvdXJjZSBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgIHByaW50KCIgJXNcbiAgJXMiICUgKG1lc3NhZ2UsIHNvdXJjZSkpCisgICAgICAgICAgICBwcmludCgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy93aWMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy93aWMKaW5kZXggMjI4NmYyMC4uZmUyYzMzZiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvd2ljCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3dpYwpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKICMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KICMKQEAgLTI4LDcgKzI4LDYgQEAKICMgQVVUSE9SUwogIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CiAjCi0KIF9fdmVyc2lvbl9fID0gIjAuMi4wIgogCiAjIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5IG1vZHVsZXMKQEAgLTExNCw2ICsxMTMsNyBAQAogICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvbXByZXNzLXdpdGgiLCBjaG9pY2VzPSgiZ3ppcCIsICJiemlwMiIsICJ4eiIpLAogICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NvbXByZXNzb3InLAogICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImNvbXByZXNzIGltYWdlIHdpdGggc3BlY2lmaWVkIGNvbXByZXNzb3IiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbSIsICItLWJtYXAiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJnZW5lcmF0ZSAuYm1hcCIpCiAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmFycyIsIGRlc3Q9J3ZhcnNfZGlyJywKICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJkaXJlY3Rvcnkgd2l0aCA8aW1hZ2U+LmVudiBmaWxlcyB0aGF0IHN0b3JlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaXRiYWtlIHZhcmlhYmxlcyIpCkBAIC0xNDAsOCArMTQwLDggQEAKICAgICAgICAgICAgIGlmIG5vdCB2YWw6CiAgICAgICAgICAgICAgICAgbWlzc2VkLmFwcGVuZChvcHQpCiAgICAgICAgIGlmIG1pc3NlZDoKLSAgICAgICAgICAgIHByaW50ICJUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyBhcmUgbm90IHNwZWNpZmllZDoiCi0gICAgICAgICAgICBwcmludCAiICAiICsgIiwgIi5qb2luKG1pc3NlZCkKKyAgICAgICAgICAgIHByaW50KCJUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyBhcmUgbm90IHNwZWNpZmllZDoiKQorICAgICAgICAgICAgcHJpbnQoIiAgIiArICIsICIuam9pbihtaXNzZWQpKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGlmIG9wdGlvbnMuaW1hZ2VfbmFtZToKQEAgLTE1MywxMiArMTUzLDEyIEBACiAgICAgICAgIEJCX1ZBUlMudmFyc19kaXIgPSBvcHRpb25zLnZhcnNfZGlyCiAKICAgICBpZiBvcHRpb25zLmJ1aWxkX2NoZWNrOgotICAgICAgICBwcmludCAiQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4iCisgICAgICAgIHByaW50KCJDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLiIpCiAgICAgICAgIGlmIG5vdCBlbmdpbmUudmVyaWZ5X2J1aWxkX2VudigpOgotICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IHZlcmlmeSBidWlsZCBlbnZpcm9ubWVudCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IHZlcmlmeSBidWlsZCBlbnZpcm9ubWVudCwgZXhpdGluZ1xuIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAiRG9uZS5cbiIKKyAgICAgICAgICAgIHByaW50KCJEb25lLlxuIikKIAogICAgIGJvb3RpbWdfZGlyID0gIiIKIApAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgogICAgICAgICAgICAgICAgIGFyZ3YuYXBwZW5kKCItLWRlYnVnIikKIAotICAgICAgICAgICAgcHJpbnQgIkJ1aWxkaW5nIHJvb3Rmcy4uLlxuIgorICAgICAgICAgICAgcHJpbnQoIkJ1aWxkaW5nIHJvb3Rmcy4uLlxuIikKICAgICAgICAgICAgIGlmIGJpdGJha2VfbWFpbihCaXRCYWtlQ29uZmlnUGFyYW1ldGVycyhhcmd2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZXJkYXRhLkNvb2tlckNvbmZpZ3VyYXRpb24oKSk6CiAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmltYWdlX25hbWUpCiAgICAgZWxzZToKICAgICAgICAgaWYgb3B0aW9ucy5idWlsZF9yb290ZnM6Ci0gICAgICAgICAgICBwcmludCAiSW1hZ2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBleGl0aW5nLiAoVXNlIC1lLy0taW1hZ2UtbmFtZSB0byBzcGVjaWZ5IGl0KVxuIgorICAgICAgICAgICAgcHJpbnQoIkltYWdlIG5hbWUgaXMgbm90IHNwZWNpZmllZCwgZXhpdGluZy4gKFVzZSAtZS8tLWltYWdlLW5hbWUgdG8gc3BlY2lmeSBpdClcbiIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgd2tzX2ZpbGUgPSBhcmdzWzBdCkBAIC0xODcsOSArMTg3LDkgQEAKICAgICBpZiBub3Qgd2tzX2ZpbGUuZW5kc3dpdGgoIi53a3MiKToKICAgICAgICAgd2tzX2ZpbGUgPSBlbmdpbmUuZmluZF9jYW5uZWRfaW1hZ2Uoc2NyaXB0c19wYXRoLCB3a3NfZmlsZSkKICAgICAgICAgaWYgbm90IHdrc19maWxlOgotICAgICAgICAgICAgcHJpbnQgIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAgKFVzZSAnd2ljIGxpc3QgaW1hZ2VzJyAiXAorICAgICAgICAgICAgcHJpbnQoIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAgKFVzZSAnd2ljIGxpc3QgaW1hZ2VzJyAiXAogICAgICAgICAgICAgICAgICAgInRvIGxpc3QgYXZhaWxhYmxlIGltYWdlcywgb3Igc3BlY2lmeSBhIGZ1bGx5LXF1YWxpZmllZCBPRSAiXAotICAgICAgICAgICAgICAgICAgImtpY2tzdGFydCAoLndrcykgZmlsZW5hbWUpXG4iICUgYXJnc1swXQorICAgICAgICAgICAgICAgICAgImtpY2tzdGFydCAoLndrcykgZmlsZW5hbWUpXG4iICUgYXJnc1swXSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBpbWFnZV9vdXRwdXRfZGlyID0gIiIKQEAgLTIwNCwxNiArMjA0LDE2IEBACiAgICAgICAgIGtlcm5lbF9kaXIgPSBvcHRpb25zLmtlcm5lbF9kaXIKICAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBvcHRpb25zLm5hdGl2ZV9zeXNyb290CiAgICAgICAgIGlmIHJvb3Rmc19kaXIgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgotICAgICAgICAgICAgcHJpbnQgIi0tcm9vZnMtZGlyICgtcikgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBwcmludCgiLS1yb29mcy1kaXIgKC1yKSBub3QgZm91bmQsIGV4aXRpbmdcbiIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihib290aW1nX2Rpcik6Ci0gICAgICAgICAgICBwcmludCAiLS1ib290aW1nLWRpciAoLWIpIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgcHJpbnQoIi0tYm9vdGltZy1kaXIgKC1iKSBub3QgZm91bmQsIGV4aXRpbmdcbiIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihrZXJuZWxfZGlyKToKLSAgICAgICAgICAgIHByaW50ICItLWtlcm5lbC1kaXIgKC1rKSBub3QgZm91bmQsIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHByaW50KCItLWtlcm5lbC1kaXIgKC1rKSBub3QgZm91bmQsIGV4aXRpbmdcbiIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihuYXRpdmVfc3lzcm9vdCk6Ci0gICAgICAgICAgICBwcmludCAiLS1uYXRpdmUtc3lzcm9vdCAoLW4pIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgcHJpbnQoIi0tbmF0aXZlLXN5c3Jvb3QgKC1uKSBub3QgZm91bmQsIGV4aXRpbmdcbiIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgIGVsc2U6CiAgICAgICAgIG5vdF9mb3VuZCA9IG5vdF9mb3VuZF9kaXIgPSAiIgpAQCAtMjI2LDEyICsyMjYsMTIgQEAKICAgICAgICAgaWYgbm90X2ZvdW5kOgogICAgICAgICAgICAgaWYgbm90IG5vdF9mb3VuZF9kaXI6CiAgICAgICAgICAgICAgICAgbm90X2ZvdW5kX2RpciA9ICJDb21wbGV0ZWx5IG1pc3NpbmcgYXJ0aWZhY3QgLSB3cm9uZyBpbWFnZSAoLndrcykgdXNlZD8iCi0gICAgICAgICAgICBwcmludCAiQnVpbGQgYXJ0aWZhY3RzIG5vdCBmb3VuZCwgZXhpdGluZy4iCi0gICAgICAgICAgICBwcmludCAiICAoUGxlYXNlIGNoZWNrIHRoYXQgdGhlIGJ1aWxkIGFydGlmYWN0cyBmb3IgdGhlIG1hY2hpbmUiCi0gICAgICAgICAgICBwcmludCAiICAgc2VsZWN0ZWQgaW4gbG9jYWwuY29uZiBhY3R1YWxseSBleGlzdCBhbmQgdGhhdCB0aGV5IgotICAgICAgICAgICAgcHJpbnQgIiAgIGFyZSB0aGUgY29ycmVjdCBhcnRpZmFjdHMgZm9yIHRoZSBpbWFnZSAoLndrcyBmaWxlKSkuXG4iCi0gICAgICAgICAgICBwcmludCAiVGhlIGFydGlmYWN0IHRoYXQgY291bGRuJ3QgYmUgZm91bmQgd2FzICVzOlxuICAlcyIgJSBcCi0gICAgICAgICAgICAgICAgKG5vdF9mb3VuZCwgbm90X2ZvdW5kX2RpcikKKyAgICAgICAgICAgIHByaW50KCJCdWlsZCBhcnRpZmFjdHMgbm90IGZvdW5kLCBleGl0aW5nLiIpCisgICAgICAgICAgICBwcmludCgiICAoUGxlYXNlIGNoZWNrIHRoYXQgdGhlIGJ1aWxkIGFydGlmYWN0cyBmb3IgdGhlIG1hY2hpbmUiKQorICAgICAgICAgICAgcHJpbnQoIiAgIHNlbGVjdGVkIGluIGxvY2FsLmNvbmYgYWN0dWFsbHkgZXhpc3QgYW5kIHRoYXQgdGhleSIpCisgICAgICAgICAgICBwcmludCgiICAgYXJlIHRoZSBjb3JyZWN0IGFydGlmYWN0cyBmb3IgdGhlIGltYWdlICgud2tzIGZpbGUpKS5cbiIpCisgICAgICAgICAgICBwcmludCgiVGhlIGFydGlmYWN0IHRoYXQgY291bGRuJ3QgYmUgZm91bmQgd2FzICVzOlxuICAlcyIgJSBcCisgICAgICAgICAgICAgICAgKG5vdF9mb3VuZCwgbm90X2ZvdW5kX2RpcikpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAga3Jvb3Rmc19kaXIgPSBvcHRpb25zLnJvb3Rmc19kaXIKQEAgLTI0MSwxMCArMjQxLDEwIEBACiAKICAgICByb290ZnNfZGlyID0gcm9vdGZzX2Rpcl90b19hcmdzKGtyb290ZnNfZGlyKQogCi0gICAgcHJpbnQgIkNyZWF0aW5nIGltYWdlKHMpLi4uXG4iCisgICAgcHJpbnQoIkNyZWF0aW5nIGltYWdlKHMpLi4uXG4iKQogICAgIGVuZ2luZS53aWNfY3JlYXRlKHdrc19maWxlLCByb290ZnNfZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgc2NyaXB0c19wYXRoLCBpbWFnZV9vdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcHJlc3Nvciwgb3B0aW9ucy5kZWJ1ZykKKyAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbXByZXNzb3IsIG9wdGlvbnMuYm1hcCwgb3B0aW9ucy5kZWJ1ZykKIAogCiBkZWYgd2ljX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgpAQCAtMjk0LDcgKzI5NCw3IEBACiAKIAogZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZT0nd2ljLmxvZycsIGZpbGVtb2RlPSd3JywgbGV2ZWw9bG9nbGV2ZWwpCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nd2ljLmxvZycsIGZpbGVtb2RlPSd3JywgbGV2ZWw9bG9nbGV2ZWwpCiAKIAogZGVmIG1haW4oYXJndik6CkBAIC0zMTgsNiArMzE4LDYgQEAKICAgICB0cnk6CiAgICAgICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKICAgICBleGNlcHQgV2ljRXJyb3IgYXMgZXJyOgotICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiRVJST1I6IiwgZXJyCisgICAgICAgIHByaW50KCJFUlJPUjoiLCBlcnIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgc3lzLmV4aXQoMSkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvd2lwZS1zeXNyb290IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvd2lwZS1zeXNyb290CmluZGV4IDllMDY3ZTguLjVlNmIxYTQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3dpcGUtc3lzcm9vdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy93aXBlLXN5c3Jvb3QKQEAgLTUxLDQgKzUxLDQgQEAKIHJtIC1yZiAkU1RBTVBTX0RJUi8qLyovKi5kb19wYWNrYWdlZGF0YV9zZXRzY2VuZS4qCiAKICMgVGhlIHNzdGF0ZSBtYW5pZmVzdHMKLXJtIC1yZiAkU1NUQVRFX01BTklGRVNUUy9tYW5pZmVzdC0qLnBvcHVsYXRlLXN5c3Jvb3QKK3JtIC1yZiAkU1NUQVRFX01BTklGRVNUUy9tYW5pZmVzdC0qLnBvcHVsYXRlX3N5c3Jvb3QKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWJzcCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWJzcAppbmRleCA4MmEwNTBlLi42ZmIxZjQxIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1ic3AKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tYnNwCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAogIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQogIwpAQCAtMzAsMTIwICszMCwxMjggQEAKICMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgogIwogCi1fX3ZlcnNpb25fXyA9ICIwLjEuMCIKLQogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGxvZ2dpbmcKIAotc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKLWxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCi1zeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorc3lzLnBhdGguaW5zZXJ0KDAsIHNjcmlwdHNfcGF0aCArICcvbGliJykKK2ltcG9ydCBhcmdwYXJzZV9vZQogCiBmcm9tIGJzcC5oZWxwIGltcG9ydCAqCiBmcm9tIGJzcC5lbmdpbmUgaW1wb3J0ICoKIAogCi1kZWYgeW9jdG9fYnNwX2NyZWF0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CitkZWYgZG9fY3JlYXRlX2JzcChhcmdzKToKICAgICAiIiIKICAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIEJTUCBjcmVhdGlvbi4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQogICAgIGJzcC5lbmdpbmUueW9jdG9fYnNwX2NyZWF0ZSgpCiAgICAgIiIiCi0gICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQotCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZGlyIiwgZGVzdCA9ICJvdXRkaXIiLCBhY3Rpb24gPSAic3RvcmUiLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibmFtZSBvZiBCU1AgZGlyIHRvIGNyZWF0ZSIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1pIiwgIi0taW5maWxlIiwgZGVzdCA9ICJwcm9wZXJ0aWVzX2ZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibmFtZSBvZiBmaWxlIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgQlNQIHByb3BlcnRpZXMgYXMgYSBKU09OIGZpbGUiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvZGVkdW1wIiwgZGVzdCA9ICJjb2RlZHVtcCIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAiZHVtcCB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gYnNwZ2VuLm91dCIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2tpcC1naXQtY2hlY2siLCBkZXN0ID0gImdpdF9jaGVjayIsIGFjdGlvbiA9ICJzdG9yZV9mYWxzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IFRydWUsIGhlbHAgPSAic2tpcCB0aGUgZ2l0IGNvbm5lY3Rpdml0eSBjaGVjayIpCi0gICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKLQotICAgIGlmIGxlbihhcmdzKSAhPSAyOgotICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBtYWNoaW5lID0gYXJnc1swXQotICAgIGthcmNoID0gYXJnc1sxXQotCi0gICAgaWYgb3B0aW9ucy5vdXRkaXI6Ci0gICAgICAgIGJzcF9vdXRwdXRfZGlyID0gb3B0aW9ucy5vdXRkaXIKKyAgICBpZiBhcmdzLm91dGRpcjoKKyAgICAgICAgYnNwX291dHB1dF9kaXIgPSBhcmdzLm91dGRpcgogICAgIGVsc2U6Ci0gICAgICAgIGJzcF9vdXRwdXRfZGlyID0gIm1ldGEtIiArIG1hY2hpbmUKKyAgICAgICAgYnNwX291dHB1dF9kaXIgPSAibWV0YS0iICsgYXJncy5ic3BuYW1lCiAKLSAgICBpZiBvcHRpb25zLmdpdF9jaGVjayBhbmQgbm90IG9wdGlvbnMucHJvcGVydGllc19maWxlOgotICAgICAgICBwcmludCAiQ2hlY2tpbmcgYmFzaWMgZ2l0IGNvbm5lY3Rpdml0eS4uLiIKKyAgICBpZiBhcmdzLmdpdF9jaGVjayBhbmQgbm90IGFyZ3MucHJvcGVydGllc19maWxlOgorICAgICAgICBwcmludCgiQ2hlY2tpbmcgYmFzaWMgZ2l0IGNvbm5lY3Rpdml0eS4uLiIpCiAgICAgICAgIGlmIG5vdCB2ZXJpZnlfZ2l0X3JlcG8oR0lUX0NIRUNLX1VSSSk6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgdmVyaWZ5IGdpdCBjb25uZWN0aXZpdHksIGV4aXRpbmdcbiIKLSAgICAgICAgICAgIHByaW50ICJEZXRhaWxzOiBjb3VsZG4ndCBhY2Nlc3MgJXMiICUgR0lUX0NIRUNLX1VSSQotICAgICAgICAgICAgcHJpbnQgIiAgICAgICAgICh0aGlzIG1vc3QgbGlrZWx5IGluZGljYXRlcyBhIG5ldHdvcmsgY29ubmVjdGl2aXR5IHByb2JsZW0gb3IiCi0gICAgICAgICAgICBwcmludCAiICAgICAgICAgYSBtaXNjb25maWd1cmVkIGdpdCBpbnRhbGxhdGlvbikiCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgdmVyaWZ5IGdpdCBjb25uZWN0aXZpdHksIGV4aXRpbmdcbiIpCisgICAgICAgICAgICBwcmludCgiRGV0YWlsczogY291bGRuJ3QgYWNjZXNzICVzIiAlIEdJVF9DSEVDS19VUkkpCisgICAgICAgICAgICBwcmludCgiICAgICAgICAgKHRoaXMgbW9zdCBsaWtlbHkgaW5kaWNhdGVzIGEgbmV0d29yayBjb25uZWN0aXZpdHkgcHJvYmxlbSBvciIpCisgICAgICAgICAgICBwcmludCgiICAgICAgICAgYSBtaXNjb25maWd1cmVkIGdpdCBpbnRhbGxhdGlvbikiKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICJEb25lLlxuIgorICAgICAgICAgICAgcHJpbnQoIkRvbmUuXG4iKQogCi0gICAgeW9jdG9fYnNwX2NyZWF0ZShtYWNoaW5lLCBrYXJjaCwgc2NyaXB0c19wYXRoLCBic3Bfb3V0cHV0X2Rpciwgb3B0aW9ucy5jb2RlZHVtcCwgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGUpCisgICAgeW9jdG9fYnNwX2NyZWF0ZShhcmdzLmJzcG5hbWUsIGFyZ3Mua2FyY2gsIHNjcmlwdHNfcGF0aCwgYnNwX291dHB1dF9kaXIsIGFyZ3MuY29kZWR1bXAsIGFyZ3MucHJvcGVydGllc19maWxlKQogCiAKLWRlZiB5b2N0b19ic3BfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CitkZWYgZG9fbGlzdF9ic3AoYXJncyk6CiAgICAgIiIiCiAgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGF2YWlsYWJsZSBCU1AgcHJvcGVydGllcyBhbmQKICAgICB2YWx1ZXMuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmVuZ2luZS55b2N0b19ic3BfbGlzdCgpCiAgICAgIiIiCi0gICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorICAgIHlvY3RvX2JzcF9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCkKIAotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJkdW1wIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIEJTUCBwcm9wZXJ0aWVzIHRvIGEgSlNPTiBmaWxlIikKK2RlZiBkb19oZWxwX2JzcChhcmdzKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGVscCB0b29sCisgICAgIiIiCisgICAgaGVscF90ZXh0ID0gY29tbWFuZF9oZWxwLmdldChhcmdzLnN1YmNvbW1hbmQpCisgICAgcGFnZXIgPSBzdWJwcm9jZXNzLlBvcGVuKCdsZXNzJywgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQorICAgIHBhZ2VyLmNvbW11bmljYXRlKGJ5dGVzKGhlbHBfdGV4dCwnVVRGLTgnKSkKIAotICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCi0KLSAgICBpZiBub3QgeW9jdG9fYnNwX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSk6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJhZCBsaXN0IGFyZ3VtZW50cywgZXhpdGluZ1xuIikKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0KLXN1YmNvbW1hbmRzID0gewotICAgICJjcmVhdGUiOiBbeW9jdG9fYnNwX2NyZWF0ZV9zdWJjb21tYW5kLAotICAgICAgICAgICAgICAgeW9jdG9fYnNwX2NyZWF0ZV91c2FnZSwKLSAgICAgICAgICAgICAgIHlvY3RvX2JzcF9jcmVhdGVfaGVscF0sCi0gICAgImxpc3QiOiAgIFt5b2N0b19ic3BfbGlzdF9zdWJjb21tYW5kLAotICAgICAgICAgICAgICAgeW9jdG9fYnNwX2xpc3RfdXNhZ2UsCi0gICAgICAgICAgICAgICB5b2N0b19ic3BfbGlzdF9oZWxwXSwKK2NvbW1hbmRfaGVscCA9IHsKKyAgICAiY3JlYXRlIjogeW9jdG9fYnNwX2NyZWF0ZV9oZWxwLAorICAgICJsaXN0IjogIHlvY3RvX2JzcF9saXN0X2hlbHAKIH0KIAogCiBkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6Ci0gICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lID0gJ3lvY3RvLWJzcC5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZSA9ICd5b2N0by1ic3AubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHZlcnNpb24gPSAieW9jdG8tYnNwIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlID0geW9jdG9fYnNwX3VzYWdlKQorICAgIHBhcnNlciA9IGFyZ3BhcnNlX29lLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdDcmVhdGUgYSBjdXN0b21pemVkIFlvY3RvIEJTUCBsYXllci4nLAorICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iU2VlICclKHByb2cpcyBoZWxwIDxzdWJjb21tYW5kPicgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIpCiAKLSAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0ID0gImRlYnVnIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1EIiwgIi0tZGVidWciLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlLCBoZWxwID0gIm91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiIpCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorICAgIHN1YnBhcnNlcnMucmVxdWlyZWQgPSBUcnVlCiAKLSAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgY3JlYXRlX3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignY3JlYXRlJywgaGVscD0nQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUCcpCisgICAgY3JlYXRlX3BhcnNlci5hZGRfYXJndW1lbnQoJ2JzcG5hbWUnLCBtZXRhdmFyPSdic3AtbmFtZScsIGhlbHA9J25hbWUgZm9yIHRoZSBuZXcgQlNQJykKKyAgICBjcmVhdGVfcGFyc2VyLmFkZF9hcmd1bWVudCgna2FyY2gnLCBoZWxwPSdrZXJuZWwgYXJjaGl0ZWN0dXJlJykKKyAgICBjcmVhdGVfcGFyc2VyLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1vdXRkaXIiLCBoZWxwID0gIm5hbWUgb2YgQlNQIGRpciB0byBjcmVhdGUiKQorICAgIGNyZWF0ZV9wYXJzZXIuYWRkX2FyZ3VtZW50KCItaSIsICItLWluZmlsZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIEJTUCBwcm9wZXJ0aWVzIGFzIGEgSlNPTiBmaWxlIikKKyAgICBjcmVhdGVfcGFyc2VyLmFkZF9hcmd1bWVudCgiLWMiLCAiLS1jb2RlZHVtcCIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVmYXVsdCA9IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAiZHVtcCB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gYnNwZ2VuLm91dCIpCisgICAgY3JlYXRlX3BhcnNlci5hZGRfYXJndW1lbnQoIi1zIiwgIi0tc2tpcC1naXQtY2hlY2siLCBkZXN0ID0gImdpdF9jaGVjayIsIGFjdGlvbiA9ICJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IFRydWUsIGhlbHAgPSAic2tpcCB0aGUgZ2l0IGNvbm5lY3Rpdml0eSBjaGVjayIpCisgICAgY3JlYXRlX3BhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1kb19jcmVhdGVfYnNwKQorCisKKyAgICBsaXN0X3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbGlzdCcsIGhlbHA9J0xpc3QgYXZhaWxhYmxlIHZhbHVlcyBmb3Igb3B0aW9ucyBhbmQgQlNQIHByb3BlcnRpZXMnKQorICAgIGxpc3RfcGFyc2VyLmFkZF9hcmd1bWVudCgna2FyY2gnLCBoZWxwPSdrZXJuZWwgYXJjaGl0ZWN0dXJlJykKKyAgICBwcm9wX2dyb3VwID0gbGlzdF9wYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgcHJvcF9ncm91cC5hZGRfYXJndW1lbnQoIi0tcHJvcGVydGllcyIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVmYXVsdCA9IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibGlzdCBhbGwgcHJvcGVydGllcyBmb3IgdGhlIGtlcm5lbCBhcmNoaXRlY3R1cmUiKQorICAgIHByb3BfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXByb3BlcnR5IiwgaGVscCA9ICJsaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSIpCisgICAgbGlzdF9wYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dGZpbGUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJkdW1wIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIEJTUCBwcm9wZXJ0aWVzIHRvIGEgSlNPTiBmaWxlIikKKworICAgIGxpc3RfcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWRvX2xpc3RfYnNwKQorCisgICAgaGVscF9wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2hlbHAnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdUaGlzIGNvbW1hbmQgZGlzcGxheXMgZGV0YWlsZWQgaGVscCBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLicpCisgICAgaGVscF9wYXJzZXIuYWRkX2FyZ3VtZW50KCdzdWJjb21tYW5kJywgbmFyZ3M9Jz8nKQorICAgIGhlbHBfcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWRvX2hlbHBfYnNwKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAogICAgIGxvZ2xldmVsID0gbG9nZ2luZy5JTkZPCi0gICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICBpZiBhcmdzLmRlYnVnOgogICAgICAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuREVCVUcKICAgICBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKQogCi0gICAgaWYgbGVuKGFyZ3MpOgotICAgICAgICBpZiBhcmdzWzBdID09ICJoZWxwIjoKLSAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgotICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCisgICAgaWYgYXJncy5fc3VicGFyc2VyX25hbWUgPT0gImxpc3QiOgorICAgICAgICBpZiBub3QgYXJncy5rYXJjaCA9PSAia2FyY2giIGFuZCBub3QgYXJncy5wcm9wZXJ0aWVzIGFuZCBub3QgYXJncy5wcm9wZXJ0eToKKyAgICAgICAgICAgIHByaW50ICgieW9jdG8tYnNwIGxpc3Q6IGVycm9yOiBvbmUgb2YgdGhlIGFyZ3VtZW50cyAtLXByb3BlcnRpZXMgLS1wcm9wZXJ0eSBpcyByZXF1aXJlZCIpCisgICAgICAgICAgICBsaXN0X3BhcnNlci5wcmludF9oZWxwKCkKIAotICAgIGludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgeW9jdG9fYnNwX2hlbHBfdXNhZ2UsIHN1YmNvbW1hbmRzKQorICAgIGlmIGFyZ3MuX3N1YnBhcnNlcl9uYW1lID09ICJoZWxwIjoKKyAgICAgICAgaWYgbm90IGFyZ3Muc3ViY29tbWFuZDoKKyAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsaWYgbm90IGNvbW1hbmRfaGVscC5nZXQoYXJncy5zdWJjb21tYW5kKToKKyAgICAgICAgICAgIHByaW50ICgieW9jdG8tYnNwIGhlbHA6IE5vIG1hbnVhbCBlbnRyeSBmb3IgJXMiICUgYXJncy5zdWJjb21tYW5kKQorICAgICAgICAgICAgcmV0dXJuIDEKIAorICAgIHJldHVybiBhcmdzLmZ1bmMoYXJncykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0cnk6CkBAIC0xNTMsNCArMTYxLDMgQEAKICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawogICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICBzeXMuZXhpdChyZXQpCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWtlcm5lbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWtlcm5lbAppbmRleCBkYWFhZDA3Li41YzcwZDBjIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1rZXJuZWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8ta2VybmVsCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAogIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQogIwpAQCAtMzUxLDcgKzM1MSw3IEBACiAKIAogZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZSA9ICd5b2N0by1rZXJuZWwubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWUgPSAneW9jdG8ta2VybmVsLmxvZycsIGZpbGVtb2RlID0gJ3cnLCBsZXZlbD1sb2dsZXZlbCkKIAogCiBkZWYgbWFpbigpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tbGF5ZXIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1sYXllcgppbmRleCAzNTY5NzJlLi5kNThmYWNhIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1sYXllcgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1sYXllcgpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKICMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KICMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAKIGRlZiBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKToKLSAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbG5hbWUgPSAneW9jdG8tbGF5ZXIubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWUgPSAneW9jdG8tbGF5ZXIubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQogCiAKIGRlZiBtYWluKCk6Cg==